@liveblocks/react-ui 2.25.0-aiprivatebeta7 → 2.25.0-aiprivatebeta9
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 +14 -10
- package/dist/_private/index.cjs.map +1 -1
- package/dist/_private/index.d.cts +200 -105
- package/dist/_private/index.d.ts +200 -105
- package/dist/_private/index.js +10 -5
- package/dist/_private/index.js.map +1 -1
- package/dist/components/AiChat.cjs +85 -120
- package/dist/components/AiChat.cjs.map +1 -1
- package/dist/components/AiChat.js +87 -122
- package/dist/components/AiChat.js.map +1 -1
- 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 +5 -3
- package/dist/components/Comment.cjs.map +1 -1
- package/dist/components/Comment.js +6 -4
- package/dist/components/Comment.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 +53 -229
- package/dist/components/internal/AiChatAssistantMessage.cjs.map +1 -1
- package/dist/components/internal/AiChatAssistantMessage.js +55 -231
- package/dist/components/internal/AiChatAssistantMessage.js.map +1 -1
- package/dist/components/internal/AiChatComposer.cjs +29 -17
- package/dist/components/internal/AiChatComposer.cjs.map +1 -1
- package/dist/components/internal/AiChatComposer.js +29 -17
- 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 +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/icon.cjs +2 -0
- package/dist/icon.cjs.map +1 -1
- package/dist/icon.js +1 -0
- package/dist/icon.js.map +1 -1
- package/dist/icons/{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/index.cjs +4 -4
- package/dist/icons/index.js +2 -2
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +68 -14
- package/dist/index.d.ts +68 -14
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/overrides.cjs +2 -8
- package/dist/overrides.cjs.map +1 -1
- package/dist/overrides.js +2 -8
- package/dist/overrides.js.map +1 -1
- package/dist/primitives/AiChatComposer/index.cjs +1 -2
- package/dist/primitives/AiChatComposer/index.cjs.map +1 -1
- package/dist/primitives/AiChatComposer/index.js +1 -2
- package/dist/primitives/AiChatComposer/index.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 +133 -0
- package/dist/primitives/AiMessage/index.cjs.map +1 -0
- package/dist/primitives/AiMessage/index.js +131 -0
- package/dist/primitives/AiMessage/index.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/{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 -6
- package/dist/primitives/index.cjs.map +1 -1
- package/dist/primitives/index.d.cts +2 -79
- package/dist/primitives/index.d.ts +2 -79
- 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-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.js +1 -1
- package/package.json +5 -5
- package/src/styles/constants.css +1 -1
- package/src/styles/dark/index.css +7 -3
- package/src/styles/index.css +584 -238
- 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/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/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,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\n extends Omit<ComponentPropsWithSlot<\"div\">, \"children\"> {\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,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,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,83 +22,6 @@ 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
|
-
* The id of the chat the composer belongs to.
|
|
41
|
-
*/
|
|
42
|
-
chatId: string;
|
|
43
|
-
}
|
|
44
|
-
interface AiChatComposerEditorProps extends Omit<ComponentPropsWithoutRef<"div">, "defaultValue"> {
|
|
45
|
-
/**
|
|
46
|
-
* The editor's initial value.
|
|
47
|
-
*/
|
|
48
|
-
defaultValue?: string;
|
|
49
|
-
/**
|
|
50
|
-
* The text to display when the editor is empty.
|
|
51
|
-
*/
|
|
52
|
-
placeholder?: string;
|
|
53
|
-
/**
|
|
54
|
-
* Whether the editor is disabled.
|
|
55
|
-
*/
|
|
56
|
-
disabled?: boolean;
|
|
57
|
-
/**
|
|
58
|
-
* Whether to focus the editor on mount.
|
|
59
|
-
*/
|
|
60
|
-
autoFocus?: boolean;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Surrounds the chat composer's content and handles submissions.
|
|
65
|
-
*
|
|
66
|
-
* @example
|
|
67
|
-
* <AiChatComposer.Form onComposerSubmit={({ text }) => {}}>
|
|
68
|
-
* <AiChatComposer.Editor />
|
|
69
|
-
* <AiChatComposer.Submit />
|
|
70
|
-
* </AiChatComposer.Form>
|
|
71
|
-
*/
|
|
72
|
-
declare const AiChatComposerForm: react.ForwardRefExoticComponent<AiChatComposerFormProps & react.RefAttributes<HTMLFormElement>>;
|
|
73
|
-
/**
|
|
74
|
-
* Displays the chat composer's editor.
|
|
75
|
-
*
|
|
76
|
-
* @example
|
|
77
|
-
* <AiChatComposer.Editor placeholder="Write a message…" />
|
|
78
|
-
*/
|
|
79
|
-
declare const AiChatComposerEditor: react.ForwardRefExoticComponent<AiChatComposerEditorProps & react.RefAttributes<HTMLDivElement>>;
|
|
80
|
-
/**
|
|
81
|
-
* A button to submit a chat message.
|
|
82
|
-
*
|
|
83
|
-
* @example
|
|
84
|
-
* <AiChatComposer.Submit>Send</AiChatComposer.Submit>
|
|
85
|
-
*/
|
|
86
|
-
declare const AiChatComposerSubmit: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & SlotProp & react.RefAttributes<HTMLButtonElement>>;
|
|
87
|
-
|
|
88
|
-
declare const index$2_AiChatComposerEditor: typeof AiChatComposerEditor;
|
|
89
|
-
declare const index$2_AiChatComposerForm: typeof AiChatComposerForm;
|
|
90
|
-
declare const index$2_AiChatComposerSubmit: typeof AiChatComposerSubmit;
|
|
91
|
-
declare namespace index$2 {
|
|
92
|
-
export {
|
|
93
|
-
index$2_AiChatComposerEditor as AiChatComposerEditor,
|
|
94
|
-
index$2_AiChatComposerForm as AiChatComposerForm,
|
|
95
|
-
index$2_AiChatComposerSubmit as AiChatComposerSubmit,
|
|
96
|
-
AiChatComposerEditor as Editor,
|
|
97
|
-
AiChatComposerForm as Form,
|
|
98
|
-
AiChatComposerSubmit as Submit,
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
|
|
102
25
|
type CommentMentionProps = ComponentPropsWithSlot<"span">;
|
|
103
26
|
type CommentBodyMentionProps = {
|
|
104
27
|
/**
|
|
@@ -571,4 +494,4 @@ interface TimestampProps extends Omit<ComponentPropsWithSlot<"time">, "children"
|
|
|
571
494
|
*/
|
|
572
495
|
declare const Timestamp: react.ForwardRefExoticComponent<TimestampProps & react.RefAttributes<HTMLTimeElement>>;
|
|
573
496
|
|
|
574
|
-
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 };
|
|
@@ -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,83 +22,6 @@ 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
|
-
* The id of the chat the composer belongs to.
|
|
41
|
-
*/
|
|
42
|
-
chatId: string;
|
|
43
|
-
}
|
|
44
|
-
interface AiChatComposerEditorProps extends Omit<ComponentPropsWithoutRef<"div">, "defaultValue"> {
|
|
45
|
-
/**
|
|
46
|
-
* The editor's initial value.
|
|
47
|
-
*/
|
|
48
|
-
defaultValue?: string;
|
|
49
|
-
/**
|
|
50
|
-
* The text to display when the editor is empty.
|
|
51
|
-
*/
|
|
52
|
-
placeholder?: string;
|
|
53
|
-
/**
|
|
54
|
-
* Whether the editor is disabled.
|
|
55
|
-
*/
|
|
56
|
-
disabled?: boolean;
|
|
57
|
-
/**
|
|
58
|
-
* Whether to focus the editor on mount.
|
|
59
|
-
*/
|
|
60
|
-
autoFocus?: boolean;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Surrounds the chat composer's content and handles submissions.
|
|
65
|
-
*
|
|
66
|
-
* @example
|
|
67
|
-
* <AiChatComposer.Form onComposerSubmit={({ text }) => {}}>
|
|
68
|
-
* <AiChatComposer.Editor />
|
|
69
|
-
* <AiChatComposer.Submit />
|
|
70
|
-
* </AiChatComposer.Form>
|
|
71
|
-
*/
|
|
72
|
-
declare const AiChatComposerForm: react.ForwardRefExoticComponent<AiChatComposerFormProps & react.RefAttributes<HTMLFormElement>>;
|
|
73
|
-
/**
|
|
74
|
-
* Displays the chat composer's editor.
|
|
75
|
-
*
|
|
76
|
-
* @example
|
|
77
|
-
* <AiChatComposer.Editor placeholder="Write a message…" />
|
|
78
|
-
*/
|
|
79
|
-
declare const AiChatComposerEditor: react.ForwardRefExoticComponent<AiChatComposerEditorProps & react.RefAttributes<HTMLDivElement>>;
|
|
80
|
-
/**
|
|
81
|
-
* A button to submit a chat message.
|
|
82
|
-
*
|
|
83
|
-
* @example
|
|
84
|
-
* <AiChatComposer.Submit>Send</AiChatComposer.Submit>
|
|
85
|
-
*/
|
|
86
|
-
declare const AiChatComposerSubmit: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref"> & SlotProp & react.RefAttributes<HTMLButtonElement>>;
|
|
87
|
-
|
|
88
|
-
declare const index$2_AiChatComposerEditor: typeof AiChatComposerEditor;
|
|
89
|
-
declare const index$2_AiChatComposerForm: typeof AiChatComposerForm;
|
|
90
|
-
declare const index$2_AiChatComposerSubmit: typeof AiChatComposerSubmit;
|
|
91
|
-
declare namespace index$2 {
|
|
92
|
-
export {
|
|
93
|
-
index$2_AiChatComposerEditor as AiChatComposerEditor,
|
|
94
|
-
index$2_AiChatComposerForm as AiChatComposerForm,
|
|
95
|
-
index$2_AiChatComposerSubmit as AiChatComposerSubmit,
|
|
96
|
-
AiChatComposerEditor as Editor,
|
|
97
|
-
AiChatComposerForm as Form,
|
|
98
|
-
AiChatComposerSubmit as Submit,
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
|
|
102
25
|
type CommentMentionProps = ComponentPropsWithSlot<"span">;
|
|
103
26
|
type CommentBodyMentionProps = {
|
|
104
27
|
/**
|
|
@@ -571,4 +494,4 @@ interface TimestampProps extends Omit<ComponentPropsWithSlot<"time">, "children"
|
|
|
571
494
|
*/
|
|
572
495
|
declare const Timestamp: react.ForwardRefExoticComponent<TimestampProps & react.RefAttributes<HTMLTimeElement>>;
|
|
573
496
|
|
|
574
|
-
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 };
|