@liveblocks/react-ui 2.25.0-aiprivatebeta8 → 3.0.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/_private/package.json +2 -2
- package/dist/_private/index.cjs +14 -12
- package/dist/_private/index.cjs.map +1 -1
- package/dist/_private/index.d.cts +146 -113
- package/dist/_private/index.d.ts +146 -113
- package/dist/_private/index.js +10 -5
- package/dist/_private/index.js.map +1 -1
- package/dist/components/AiChat.cjs +85 -121
- package/dist/components/AiChat.cjs.map +1 -1
- package/dist/components/AiChat.js +87 -123
- package/dist/components/AiChat.js.map +1 -1
- package/dist/components/AiTool.cjs +188 -0
- package/dist/components/AiTool.cjs.map +1 -0
- package/dist/components/AiTool.js +186 -0
- package/dist/components/AiTool.js.map +1 -0
- package/dist/components/Comment.cjs +259 -238
- package/dist/components/Comment.cjs.map +1 -1
- package/dist/components/Comment.js +261 -240
- package/dist/components/Comment.js.map +1 -1
- package/dist/components/Composer.cjs +42 -30
- package/dist/components/Composer.cjs.map +1 -1
- package/dist/components/Composer.js +44 -32
- 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 +7 -1
- package/dist/components/Thread.cjs.map +1 -1
- package/dist/components/Thread.js +8 -2
- package/dist/components/Thread.js.map +1 -1
- package/dist/components/internal/AiChatAssistantMessage.cjs +75 -199
- package/dist/components/internal/AiChatAssistantMessage.cjs.map +1 -1
- package/dist/components/internal/AiChatAssistantMessage.js +77 -201
- package/dist/components/internal/AiChatAssistantMessage.js.map +1 -1
- package/dist/components/internal/AiChatComposer.cjs +1 -1
- package/dist/components/internal/AiChatComposer.cjs.map +1 -1
- package/dist/components/internal/AiChatComposer.js +1 -1
- package/dist/components/internal/AiChatComposer.js.map +1 -1
- package/dist/components/internal/AiChatUserMessage.cjs +17 -10
- package/dist/components/internal/AiChatUserMessage.cjs.map +1 -1
- package/dist/components/internal/AiChatUserMessage.js +17 -10
- 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 +75 -0
- package/dist/components/internal/CodeBlock.cjs.map +1 -0
- package/dist/components/internal/CodeBlock.js +73 -0
- package/dist/components/internal/CodeBlock.js.map +1 -0
- package/dist/components/internal/Dropdown.cjs +1 -1
- package/dist/components/internal/Dropdown.cjs.map +1 -1
- package/dist/components/internal/Dropdown.js +2 -2
- package/dist/components/internal/Dropdown.js.map +1 -1
- 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/EmojiPicker.cjs +1 -1
- package/dist/components/internal/EmojiPicker.cjs.map +1 -1
- package/dist/components/internal/EmojiPicker.js +2 -2
- package/dist/components/internal/EmojiPicker.js.map +1 -1
- package/dist/components/internal/InboxNotificationThread.cjs +5 -2
- package/dist/components/internal/InboxNotificationThread.cjs.map +1 -1
- package/dist/components/internal/InboxNotificationThread.js +6 -3
- package/dist/components/internal/InboxNotificationThread.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/components/internal/Tooltip.cjs +1 -1
- package/dist/components/internal/Tooltip.cjs.map +1 -1
- package/dist/components/internal/Tooltip.js +2 -2
- package/dist/components/internal/Tooltip.js.map +1 -1
- package/dist/config.cjs +9 -9
- package/dist/config.cjs.map +1 -1
- package/dist/config.js +8 -8
- package/dist/config.js.map +1 -1
- package/dist/icons/CrossCircleFill.cjs +25 -0
- package/dist/icons/CrossCircleFill.cjs.map +1 -0
- package/dist/icons/CrossCircleFill.js +23 -0
- package/dist/icons/CrossCircleFill.js.map +1 -0
- package/dist/icons/MinusCircle.cjs +23 -0
- package/dist/icons/MinusCircle.cjs.map +1 -0
- package/dist/icons/MinusCircle.js +21 -0
- package/dist/icons/MinusCircle.js.map +1 -0
- package/dist/icons/index.cjs +4 -0
- package/dist/icons/index.cjs.map +1 -1
- package/dist/icons/index.js +2 -0
- package/dist/icons/index.js.map +1 -1
- package/dist/index.cjs +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +270 -22
- package/dist/index.d.ts +270 -22
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/overrides.cjs +6 -4
- package/dist/overrides.cjs.map +1 -1
- package/dist/overrides.js +6 -4
- package/dist/overrides.js.map +1 -1
- 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 +77 -0
- package/dist/primitives/AiMessage/index.cjs.map +1 -0
- package/dist/primitives/AiMessage/index.js +75 -0
- package/dist/primitives/AiMessage/index.js.map +1 -0
- package/dist/primitives/AiMessage/tool-invocation.cjs +70 -0
- package/dist/primitives/AiMessage/tool-invocation.cjs.map +1 -0
- package/dist/primitives/AiMessage/tool-invocation.js +68 -0
- package/dist/primitives/AiMessage/tool-invocation.js.map +1 -0
- package/dist/primitives/{internal/Collapsible → Collapsible}/index.cjs +39 -17
- package/dist/primitives/Collapsible/index.cjs.map +1 -0
- package/dist/primitives/{internal/Collapsible → Collapsible}/index.js +37 -15
- package/dist/primitives/Collapsible/index.js.map +1 -0
- package/dist/primitives/Comment/index.cjs +5 -4
- package/dist/primitives/Comment/index.cjs.map +1 -1
- package/dist/primitives/Comment/index.js +5 -4
- package/dist/primitives/Comment/index.js.map +1 -1
- package/dist/primitives/Composer/index.cjs +49 -41
- package/dist/primitives/Composer/index.cjs.map +1 -1
- package/dist/primitives/Composer/index.js +50 -42
- package/dist/primitives/Composer/index.js.map +1 -1
- package/dist/primitives/Composer/slate/plugins/mentions.cjs +4 -4
- package/dist/primitives/Composer/slate/plugins/mentions.cjs.map +1 -1
- package/dist/primitives/Composer/slate/plugins/mentions.js +4 -4
- package/dist/primitives/Composer/slate/plugins/mentions.js.map +1 -1
- package/dist/primitives/Composer/utils.cjs +3 -6
- package/dist/primitives/Composer/utils.cjs.map +1 -1
- package/dist/primitives/Composer/utils.js +3 -6
- package/dist/primitives/Composer/utils.js.map +1 -1
- package/dist/primitives/{internal/Markdown.cjs → Markdown.cjs} +105 -65
- package/dist/primitives/Markdown.cjs.map +1 -0
- package/dist/primitives/{internal/Markdown.js → Markdown.js} +106 -65
- package/dist/primitives/Markdown.js.map +1 -0
- package/dist/primitives/index.cjs +4 -6
- package/dist/primitives/index.cjs.map +1 -1
- package/dist/primitives/index.d.cts +20 -93
- package/dist/primitives/index.d.ts +20 -93
- package/dist/primitives/index.js +4 -6
- package/dist/primitives/index.js.map +1 -1
- 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-controllable-state.cjs +25 -2
- package/dist/utils/use-controllable-state.cjs.map +1 -1
- package/dist/utils/use-controllable-state.js +25 -3
- package/dist/utils/use-controllable-state.js.map +1 -1
- package/dist/utils/use-visible.cjs +65 -45
- package/dist/utils/use-visible.cjs.map +1 -1
- package/dist/utils/use-visible.js +66 -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 +16 -5
- package/primitives/package.json +2 -2
- package/src/styles/constants.css +1 -1
- package/src/styles/dark/index.css +7 -3
- package/src/styles/index.css +572 -252
- package/src/styles/utils.css +1 -1
- 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/AiToolDebugger.cjs +0 -74
- package/dist/components/AiToolDebugger.cjs.map +0 -1
- package/dist/components/AiToolDebugger.js +0 -72
- package/dist/components/AiToolDebugger.js.map +0 -1
- package/dist/primitives/internal/Collapsible/index.cjs.map +0 -1
- package/dist/primitives/internal/Collapsible/index.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
|
@@ -1,6 +1,7 @@
|
|
|
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
|
const defaultComponents = {
|
|
6
7
|
CodeBlock: ({ language, code }) => {
|
|
@@ -11,20 +12,75 @@ const defaultComponents = {
|
|
|
11
12
|
})
|
|
12
13
|
});
|
|
13
14
|
},
|
|
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
|
+
}
|
|
15
42
|
};
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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, {
|
|
22
67
|
token,
|
|
23
68
|
components
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
|
|
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({
|
|
28
84
|
token,
|
|
29
85
|
components
|
|
30
86
|
}) {
|
|
@@ -33,9 +89,9 @@ function BlockTokenComp({
|
|
|
33
89
|
return null;
|
|
34
90
|
}
|
|
35
91
|
case "code": {
|
|
36
|
-
let language =
|
|
92
|
+
let language = void 0;
|
|
37
93
|
if (token.lang !== void 0) {
|
|
38
|
-
language = token.lang.match(/^\S*/)?.[0] ??
|
|
94
|
+
language = token.lang.match(/^\S*/)?.[0] ?? void 0;
|
|
39
95
|
}
|
|
40
96
|
const CodeBlock = components?.CodeBlock ?? defaultComponents.CodeBlock;
|
|
41
97
|
return /* @__PURE__ */ jsx(CodeBlock, {
|
|
@@ -78,9 +134,10 @@ function BlockTokenComp({
|
|
|
78
134
|
}
|
|
79
135
|
}
|
|
80
136
|
}
|
|
81
|
-
|
|
137
|
+
const Blockquote = components?.Blockquote ?? defaultComponents.Blockquote;
|
|
138
|
+
return /* @__PURE__ */ jsx(Blockquote, {
|
|
82
139
|
children: tokens.map((token2, index) => {
|
|
83
|
-
return /* @__PURE__ */ jsx(
|
|
140
|
+
return /* @__PURE__ */ jsx(MarkdownBlockToken, {
|
|
84
141
|
token: token2,
|
|
85
142
|
components
|
|
86
143
|
}, index);
|
|
@@ -91,32 +148,10 @@ function BlockTokenComp({
|
|
|
91
148
|
return token.text;
|
|
92
149
|
}
|
|
93
150
|
case "heading": {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
break;
|
|
99
|
-
case 2:
|
|
100
|
-
HeadingTag = "h2";
|
|
101
|
-
break;
|
|
102
|
-
case 3:
|
|
103
|
-
HeadingTag = "h3";
|
|
104
|
-
break;
|
|
105
|
-
case 4:
|
|
106
|
-
HeadingTag = "h4";
|
|
107
|
-
break;
|
|
108
|
-
case 5:
|
|
109
|
-
HeadingTag = "h5";
|
|
110
|
-
break;
|
|
111
|
-
case 6:
|
|
112
|
-
HeadingTag = "h6";
|
|
113
|
-
break;
|
|
114
|
-
default:
|
|
115
|
-
HeadingTag = "h1";
|
|
116
|
-
break;
|
|
117
|
-
}
|
|
118
|
-
return /* @__PURE__ */ jsx(HeadingTag, {
|
|
119
|
-
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(InlineTokenComp, {
|
|
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, {
|
|
120
155
|
token: token2,
|
|
121
156
|
components
|
|
122
157
|
}, index))
|
|
@@ -201,7 +236,7 @@ function BlockTokenComp({
|
|
|
201
236
|
}
|
|
202
237
|
return /* @__PURE__ */ jsx("li", {
|
|
203
238
|
children: items.map((token2, index2) => {
|
|
204
|
-
return /* @__PURE__ */ jsx(
|
|
239
|
+
return /* @__PURE__ */ jsx(MarkdownBlockToken, {
|
|
205
240
|
token: token2,
|
|
206
241
|
components
|
|
207
242
|
}, index2);
|
|
@@ -246,7 +281,7 @@ function BlockTokenComp({
|
|
|
246
281
|
}
|
|
247
282
|
return /* @__PURE__ */ jsx("li", {
|
|
248
283
|
children: tokens.map((token2, index2) => {
|
|
249
|
-
return /* @__PURE__ */ jsx(
|
|
284
|
+
return /* @__PURE__ */ jsx(MarkdownBlockToken, {
|
|
250
285
|
token: token2,
|
|
251
286
|
components
|
|
252
287
|
}, index2);
|
|
@@ -265,13 +300,13 @@ function BlockTokenComp({
|
|
|
265
300
|
case "list":
|
|
266
301
|
case "paragraph":
|
|
267
302
|
case "table": {
|
|
268
|
-
return /* @__PURE__ */ jsx(
|
|
303
|
+
return /* @__PURE__ */ jsx(MarkdownBlockToken, {
|
|
269
304
|
token: token2,
|
|
270
305
|
components
|
|
271
306
|
}, index2);
|
|
272
307
|
}
|
|
273
308
|
case "text": {
|
|
274
|
-
return /* @__PURE__ */ jsx(
|
|
309
|
+
return /* @__PURE__ */ jsx(MarkdownInlineToken, {
|
|
275
310
|
token: token2,
|
|
276
311
|
components
|
|
277
312
|
}, index2);
|
|
@@ -304,7 +339,7 @@ function BlockTokenComp({
|
|
|
304
339
|
}
|
|
305
340
|
case "paragraph": {
|
|
306
341
|
return /* @__PURE__ */ jsx("p", {
|
|
307
|
-
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(
|
|
342
|
+
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
|
|
308
343
|
token: token2,
|
|
309
344
|
components
|
|
310
345
|
}, index))
|
|
@@ -318,7 +353,7 @@ function BlockTokenComp({
|
|
|
318
353
|
children: token.header.map((cell, index) => {
|
|
319
354
|
return /* @__PURE__ */ jsx("th", {
|
|
320
355
|
align: cell.align ?? void 0,
|
|
321
|
-
children: cell.tokens.map((token2, index2) => /* @__PURE__ */ jsx(
|
|
356
|
+
children: cell.tokens.map((token2, index2) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
|
|
322
357
|
token: token2,
|
|
323
358
|
components
|
|
324
359
|
}, index2))
|
|
@@ -332,7 +367,7 @@ function BlockTokenComp({
|
|
|
332
367
|
children: row.map((cell, index2) => {
|
|
333
368
|
return /* @__PURE__ */ jsx("td", {
|
|
334
369
|
align: cell.align ?? void 0,
|
|
335
|
-
children: cell.tokens.map((token2, index3) => /* @__PURE__ */ jsx(
|
|
370
|
+
children: cell.tokens.map((token2, index3) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
|
|
336
371
|
token: token2,
|
|
337
372
|
components
|
|
338
373
|
}, index3))
|
|
@@ -346,14 +381,14 @@ function BlockTokenComp({
|
|
|
346
381
|
}
|
|
347
382
|
}
|
|
348
383
|
}
|
|
349
|
-
function
|
|
384
|
+
function MarkdownInlineToken({
|
|
350
385
|
token,
|
|
351
386
|
components
|
|
352
387
|
}) {
|
|
353
388
|
switch (token.type) {
|
|
354
389
|
case "strong": {
|
|
355
390
|
return /* @__PURE__ */ jsx("strong", {
|
|
356
|
-
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(
|
|
391
|
+
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
|
|
357
392
|
token: token2,
|
|
358
393
|
components
|
|
359
394
|
}, index))
|
|
@@ -361,7 +396,7 @@ function InlineTokenComp({
|
|
|
361
396
|
}
|
|
362
397
|
case "em": {
|
|
363
398
|
return /* @__PURE__ */ jsx("em", {
|
|
364
|
-
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(
|
|
399
|
+
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
|
|
365
400
|
token: token2,
|
|
366
401
|
components
|
|
367
402
|
}, index))
|
|
@@ -377,7 +412,7 @@ function InlineTokenComp({
|
|
|
377
412
|
}
|
|
378
413
|
case "del": {
|
|
379
414
|
return /* @__PURE__ */ jsx("del", {
|
|
380
|
-
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(
|
|
415
|
+
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
|
|
381
416
|
token: token2,
|
|
382
417
|
components
|
|
383
418
|
}, index))
|
|
@@ -386,9 +421,13 @@ function InlineTokenComp({
|
|
|
386
421
|
case "link": {
|
|
387
422
|
let href;
|
|
388
423
|
try {
|
|
389
|
-
const url = new URL(token.href);
|
|
424
|
+
const url = new URL(token.href, window.location.href);
|
|
390
425
|
if (url.protocol === "http:" || url.protocol === "https:") {
|
|
391
|
-
|
|
426
|
+
if (url.origin === window.location.origin) {
|
|
427
|
+
href = url.pathname + url.search + url.hash;
|
|
428
|
+
} else {
|
|
429
|
+
href = url.toString();
|
|
430
|
+
}
|
|
392
431
|
} else {
|
|
393
432
|
href = null;
|
|
394
433
|
}
|
|
@@ -396,18 +435,16 @@ function InlineTokenComp({
|
|
|
396
435
|
href = null;
|
|
397
436
|
}
|
|
398
437
|
if (href === null) {
|
|
399
|
-
return token.tokens.map((token2, index) => /* @__PURE__ */ jsx(
|
|
438
|
+
return token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
|
|
400
439
|
token: token2,
|
|
401
440
|
components
|
|
402
441
|
}, index));
|
|
403
442
|
}
|
|
404
|
-
const
|
|
405
|
-
return /* @__PURE__ */ jsx(
|
|
443
|
+
const Link = components?.Link ?? defaultComponents.Link;
|
|
444
|
+
return /* @__PURE__ */ jsx(Link, {
|
|
406
445
|
href,
|
|
407
|
-
title: token.title
|
|
408
|
-
|
|
409
|
-
rel: "noopener noreferrer",
|
|
410
|
-
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(InlineTokenComp, {
|
|
446
|
+
title: token.title ?? void 0,
|
|
447
|
+
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
|
|
411
448
|
token: token2,
|
|
412
449
|
components
|
|
413
450
|
}, index))
|
|
@@ -428,7 +465,8 @@ function InlineTokenComp({
|
|
|
428
465
|
if (href === null) {
|
|
429
466
|
return token.text;
|
|
430
467
|
}
|
|
431
|
-
|
|
468
|
+
const Image = components?.Image ?? defaultComponents.Image;
|
|
469
|
+
return /* @__PURE__ */ jsx(Image, {
|
|
432
470
|
src: href,
|
|
433
471
|
alt: token.text,
|
|
434
472
|
title: token.title ?? void 0
|
|
@@ -436,7 +474,7 @@ function InlineTokenComp({
|
|
|
436
474
|
}
|
|
437
475
|
case "text": {
|
|
438
476
|
if (token.tokens !== void 0) {
|
|
439
|
-
return token.tokens.map((token2, index) => /* @__PURE__ */ jsx(
|
|
477
|
+
return token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
|
|
440
478
|
token: token2,
|
|
441
479
|
components
|
|
442
480
|
}, index));
|
|
@@ -466,6 +504,9 @@ function parseHtmlEntities(input) {
|
|
|
466
504
|
);
|
|
467
505
|
return document.body.textContent;
|
|
468
506
|
}
|
|
507
|
+
function clampHeadingLevel(level) {
|
|
508
|
+
return Math.max(1, Math.min(6, level));
|
|
509
|
+
}
|
|
469
510
|
|
|
470
|
-
export {
|
|
511
|
+
export { Markdown, MarkdownBlockToken };
|
|
471
512
|
//# 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, window.location.href);\n if (url.protocol === \"http:\" || url.protocol === \"https:\") {\n // If the link is relative to the current origin, we use the pathname, search, and hash to create a relative link.\n if (url.origin === window.location.origin) {\n href = url.pathname + url.search + url.hash;\n }\n // If the link is absolute, we use the full URL.\n else {\n href = url.toString();\n }\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,9 +9,8 @@ var Timestamp = require('./Timestamp.cjs');
|
|
|
10
9
|
|
|
11
10
|
|
|
12
11
|
|
|
13
|
-
exports.
|
|
14
|
-
exports.
|
|
15
|
-
exports.Composer = index$2;
|
|
12
|
+
exports.Comment = index;
|
|
13
|
+
exports.Composer = index$1;
|
|
16
14
|
exports.useComposer = contexts.useComposer;
|
|
17
15
|
exports.AttachmentTooLargeError = utils.AttachmentTooLargeError;
|
|
18
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,6 +1,6 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { ElementType, ComponentPropsWithoutRef,
|
|
3
|
-
import { CommentBody as CommentBody$1, CommentAttachment, CommentMixedAttachment } from '@liveblocks/core';
|
|
2
|
+
import { ElementType, ComponentPropsWithoutRef, ReactNode, ComponentType, FormEvent } from 'react';
|
|
3
|
+
import { MentionData, CommentBody as CommentBody$1, CommentAttachment, CommentMixedAttachment } from '@liveblocks/core';
|
|
4
4
|
|
|
5
5
|
type Direction = "ltr" | "rtl";
|
|
6
6
|
type SlotProp = {
|
|
@@ -22,85 +22,12 @@ type ComposerBodyMarks = {
|
|
|
22
22
|
[K in ComposerBodyMark]: boolean;
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
-
interface AiChatComposerFormProps extends ComponentPropsWithSlot<"form"> {
|
|
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
|
-
interface AiChatComposerEditorProps extends Omit<ComponentPropsWithoutRef<"div">, "defaultValue"> {
|
|
41
|
-
/**
|
|
42
|
-
* The editor's initial value.
|
|
43
|
-
*/
|
|
44
|
-
defaultValue?: string;
|
|
45
|
-
/**
|
|
46
|
-
* The text to display when the editor is empty.
|
|
47
|
-
*/
|
|
48
|
-
placeholder?: string;
|
|
49
|
-
/**
|
|
50
|
-
* Whether the editor is disabled.
|
|
51
|
-
*/
|
|
52
|
-
disabled?: boolean;
|
|
53
|
-
/**
|
|
54
|
-
* Whether to focus the editor on mount.
|
|
55
|
-
*/
|
|
56
|
-
autoFocus?: boolean;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Surrounds the chat composer's content and handles submissions.
|
|
61
|
-
*
|
|
62
|
-
* @example
|
|
63
|
-
* <AiChatComposer.Form onComposerSubmit={({ text }) => {}}>
|
|
64
|
-
* <AiChatComposer.Editor />
|
|
65
|
-
* <AiChatComposer.Submit />
|
|
66
|
-
* </AiChatComposer.Form>
|
|
67
|
-
*/
|
|
68
|
-
declare const AiChatComposerForm: react.ForwardRefExoticComponent<AiChatComposerFormProps & react.RefAttributes<HTMLFormElement>>;
|
|
69
|
-
/**
|
|
70
|
-
* Displays the chat composer's editor.
|
|
71
|
-
*
|
|
72
|
-
* @example
|
|
73
|
-
* <AiChatComposer.Editor placeholder="Write a message…" />
|
|
74
|
-
*/
|
|
75
|
-
declare const AiChatComposerEditor: react.ForwardRefExoticComponent<AiChatComposerEditorProps & react.RefAttributes<HTMLDivElement>>;
|
|
76
|
-
/**
|
|
77
|
-
* A button to submit a chat message.
|
|
78
|
-
*
|
|
79
|
-
* @example
|
|
80
|
-
* <AiChatComposer.Submit>Send</AiChatComposer.Submit>
|
|
81
|
-
*/
|
|
82
|
-
declare const AiChatComposerSubmit: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & SlotProp & react.RefAttributes<HTMLButtonElement>>;
|
|
83
|
-
|
|
84
|
-
declare const index$2_AiChatComposerEditor: typeof AiChatComposerEditor;
|
|
85
|
-
declare const index$2_AiChatComposerForm: typeof AiChatComposerForm;
|
|
86
|
-
declare const index$2_AiChatComposerSubmit: typeof AiChatComposerSubmit;
|
|
87
|
-
declare namespace index$2 {
|
|
88
|
-
export {
|
|
89
|
-
index$2_AiChatComposerEditor as AiChatComposerEditor,
|
|
90
|
-
index$2_AiChatComposerForm as AiChatComposerForm,
|
|
91
|
-
index$2_AiChatComposerSubmit as AiChatComposerSubmit,
|
|
92
|
-
AiChatComposerEditor as Editor,
|
|
93
|
-
AiChatComposerForm as Form,
|
|
94
|
-
AiChatComposerSubmit as Submit,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
|
|
98
25
|
type CommentMentionProps = ComponentPropsWithSlot<"span">;
|
|
99
26
|
type CommentBodyMentionProps = {
|
|
100
27
|
/**
|
|
101
|
-
* The mention
|
|
28
|
+
* The mention to display.
|
|
102
29
|
*/
|
|
103
|
-
|
|
30
|
+
mention: MentionData;
|
|
104
31
|
};
|
|
105
32
|
type CommentLinkProps = ComponentPropsWithSlot<"a">;
|
|
106
33
|
interface CommentBodyLinkProps {
|
|
@@ -127,7 +54,7 @@ interface CommentBodyComponents {
|
|
|
127
54
|
*/
|
|
128
55
|
Link: ComponentType<CommentBodyLinkProps>;
|
|
129
56
|
}
|
|
130
|
-
interface CommentBodyProps extends
|
|
57
|
+
interface CommentBodyProps extends ComponentPropsWithSlot<"div"> {
|
|
131
58
|
/**
|
|
132
59
|
* The comment body to display.
|
|
133
60
|
* If not defined, the component will render `null`.
|
|
@@ -143,7 +70,7 @@ interface CommentBodyProps extends Omit<ComponentPropsWithSlot<"div">, "children
|
|
|
143
70
|
* Displays mentions within `Comment.Body`.
|
|
144
71
|
*
|
|
145
72
|
* @example
|
|
146
|
-
* <Comment.Mention>@{
|
|
73
|
+
* <Comment.Mention>@{mention.id}</Comment.Mention>
|
|
147
74
|
*/
|
|
148
75
|
declare const CommentMention: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & SlotProp & react.RefAttributes<HTMLSpanElement>>;
|
|
149
76
|
/**
|
|
@@ -175,9 +102,9 @@ interface ComposerEditorMentionProps {
|
|
|
175
102
|
*/
|
|
176
103
|
isSelected: boolean;
|
|
177
104
|
/**
|
|
178
|
-
* The mention
|
|
105
|
+
* The mention to display.
|
|
179
106
|
*/
|
|
180
|
-
|
|
107
|
+
mention: MentionData;
|
|
181
108
|
}
|
|
182
109
|
interface ComposerEditorLinkProps {
|
|
183
110
|
/**
|
|
@@ -195,13 +122,13 @@ interface ComposerEditorLinkProps {
|
|
|
195
122
|
}
|
|
196
123
|
type ComposerEditorMentionSuggestionsProps = {
|
|
197
124
|
/**
|
|
198
|
-
* The list of
|
|
125
|
+
* The list of mention suggestions.
|
|
199
126
|
*/
|
|
200
|
-
|
|
127
|
+
mentions: MentionData[];
|
|
201
128
|
/**
|
|
202
|
-
* The currently selected
|
|
129
|
+
* The currently selected mention's ID.
|
|
203
130
|
*/
|
|
204
|
-
|
|
131
|
+
selectedMentionId?: string;
|
|
205
132
|
};
|
|
206
133
|
type ComposerEditorFloatingToolbarProps = Record<string, never>;
|
|
207
134
|
type ComposerMentionProps = ComponentPropsWithSlot<"span">;
|
|
@@ -232,7 +159,7 @@ interface ComposerEditorComponents {
|
|
|
232
159
|
*/
|
|
233
160
|
FloatingToolbar?: ComponentType<ComposerEditorFloatingToolbarProps>;
|
|
234
161
|
}
|
|
235
|
-
interface ComposerEditorProps extends Omit<ComponentPropsWithoutRef<"div">, "defaultValue"> {
|
|
162
|
+
interface ComposerEditorProps extends Omit<ComponentPropsWithoutRef<"div">, "defaultValue" | "children"> {
|
|
236
163
|
/**
|
|
237
164
|
* The reading direction of the editor and related elements.
|
|
238
165
|
*/
|
|
@@ -329,7 +256,7 @@ declare const ComposerFloatingToolbar: react.ForwardRefExoticComponent<Omit<reac
|
|
|
329
256
|
* Displays mentions within `Composer.Editor`.
|
|
330
257
|
*
|
|
331
258
|
* @example
|
|
332
|
-
* <Composer.Mention>@{
|
|
259
|
+
* <Composer.Mention>@{mention.id}</Composer.Mention>
|
|
333
260
|
*/
|
|
334
261
|
declare const ComposerMention: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & SlotProp & react.RefAttributes<HTMLSpanElement>>;
|
|
335
262
|
/**
|
|
@@ -348,9 +275,9 @@ declare const ComposerSuggestions: react.ForwardRefExoticComponent<Omit<react.De
|
|
|
348
275
|
*
|
|
349
276
|
* @example
|
|
350
277
|
* <Composer.SuggestionsList>
|
|
351
|
-
* {
|
|
352
|
-
* <Composer.SuggestionsListItem key={
|
|
353
|
-
* @{
|
|
278
|
+
* {mentions.map((mention) => (
|
|
279
|
+
* <Composer.SuggestionsListItem key={mention.id} value={mention.id}>
|
|
280
|
+
* @{mention.id}
|
|
354
281
|
* </Composer.SuggestionsListItem>
|
|
355
282
|
* ))}
|
|
356
283
|
* </Composer.SuggestionsList>
|
|
@@ -360,8 +287,8 @@ declare const ComposerSuggestionsList: react.ForwardRefExoticComponent<Omit<reac
|
|
|
360
287
|
* Displays a suggestion within `Composer.SuggestionsList`.
|
|
361
288
|
*
|
|
362
289
|
* @example
|
|
363
|
-
* <Composer.SuggestionsListItem key={
|
|
364
|
-
* @{
|
|
290
|
+
* <Composer.SuggestionsListItem key={mention.id} value={mention.id}>
|
|
291
|
+
* @{mention.id}
|
|
365
292
|
* </Composer.SuggestionsListItem>
|
|
366
293
|
*/
|
|
367
294
|
declare const ComposerSuggestionsListItem: react.ForwardRefExoticComponent<ComposerSuggestionsListItemProps & react.RefAttributes<HTMLLIElement>>;
|
|
@@ -567,4 +494,4 @@ interface TimestampProps extends Omit<ComponentPropsWithSlot<"time">, "children"
|
|
|
567
494
|
*/
|
|
568
495
|
declare const Timestamp: react.ForwardRefExoticComponent<TimestampProps & react.RefAttributes<HTMLTimeElement>>;
|
|
569
496
|
|
|
570
|
-
export {
|
|
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 };
|