@liveblocks/react-ui 3.1.4 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/_private/index.d.cts +272 -37
  2. package/dist/_private/index.d.ts +272 -37
  3. package/dist/components/AiChat.cjs +213 -63
  4. package/dist/components/AiChat.cjs.map +1 -1
  5. package/dist/components/AiChat.js +215 -65
  6. package/dist/components/AiChat.js.map +1 -1
  7. package/dist/components/Composer.cjs +2 -0
  8. package/dist/components/Composer.cjs.map +1 -1
  9. package/dist/components/Composer.js +2 -0
  10. package/dist/components/Composer.js.map +1 -1
  11. package/dist/components/Thread.cjs +2 -0
  12. package/dist/components/Thread.cjs.map +1 -1
  13. package/dist/components/Thread.js +2 -0
  14. package/dist/components/Thread.js.map +1 -1
  15. package/dist/components/internal/AiChatAssistantMessage.cjs +21 -15
  16. package/dist/components/internal/AiChatAssistantMessage.cjs.map +1 -1
  17. package/dist/components/internal/AiChatAssistantMessage.js +20 -14
  18. package/dist/components/internal/AiChatAssistantMessage.js.map +1 -1
  19. package/dist/components/internal/AiChatUserMessage.cjs +2 -1
  20. package/dist/components/internal/AiChatUserMessage.cjs.map +1 -1
  21. package/dist/components/internal/AiChatUserMessage.js +2 -1
  22. package/dist/components/internal/AiChatUserMessage.js.map +1 -1
  23. package/dist/components/internal/Prose.cjs +15 -7
  24. package/dist/components/internal/Prose.cjs.map +1 -1
  25. package/dist/components/internal/Prose.js +16 -8
  26. package/dist/components/internal/Prose.js.map +1 -1
  27. package/dist/index.d.cts +277 -4
  28. package/dist/index.d.ts +277 -4
  29. package/dist/primitives/Composer/index.cjs +5 -2
  30. package/dist/primitives/Composer/index.cjs.map +1 -1
  31. package/dist/primitives/Composer/index.js +5 -2
  32. package/dist/primitives/Composer/index.js.map +1 -1
  33. package/dist/primitives/Composer/utils.cjs +1 -2
  34. package/dist/primitives/Composer/utils.cjs.map +1 -1
  35. package/dist/primitives/Composer/utils.js +1 -2
  36. package/dist/primitives/Composer/utils.js.map +1 -1
  37. package/dist/primitives/Markdown.cjs +267 -336
  38. package/dist/primitives/Markdown.cjs.map +1 -1
  39. package/dist/primitives/Markdown.js +269 -338
  40. package/dist/primitives/Markdown.js.map +1 -1
  41. package/dist/primitives/index.d.cts +4 -0
  42. package/dist/primitives/index.d.ts +4 -0
  43. package/dist/utils/use-observable.cjs +2 -2
  44. package/dist/utils/use-observable.cjs.map +1 -1
  45. package/dist/utils/use-observable.js +1 -1
  46. package/dist/utils/use-observable.js.map +1 -1
  47. package/dist/utils/use-visible.cjs +8 -6
  48. package/dist/utils/use-visible.cjs.map +1 -1
  49. package/dist/utils/use-visible.js +7 -5
  50. package/dist/utils/use-visible.js.map +1 -1
  51. package/dist/version.cjs +1 -1
  52. package/dist/version.js +1 -1
  53. package/package.json +4 -4
  54. package/src/styles/constants.css +2 -2
  55. package/src/styles/index.css +14 -1
  56. package/styles/dark/attributes.css +1 -1
  57. package/styles/dark/media-query.css +1 -1
  58. package/styles.css +1 -1
  59. package/styles.css.map +1 -1
  60. package/dist/utils/use-latest.cjs +0 -14
  61. package/dist/utils/use-latest.cjs.map +0 -1
  62. package/dist/utils/use-latest.js +0 -12
  63. package/dist/utils/use-latest.js.map +0 -1
@@ -1,10 +1,37 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { sanitizeUrl } from '@liveblocks/core';
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import { assertNever, sanitizeUrl } from '@liveblocks/core';
3
3
  import { Slot } from '@radix-ui/react-slot';
4
4
  import { Lexer } from 'marked';
5
5
  import { forwardRef, useMemo, memo } from 'react';
6
6
 
7
7
  const defaultComponents = {
8
+ Paragraph: ({ children }) => {
9
+ return /* @__PURE__ */ jsx("p", {
10
+ children
11
+ });
12
+ },
13
+ Inline: ({ type, children }) => {
14
+ switch (type) {
15
+ case "strong":
16
+ return /* @__PURE__ */ jsx("strong", {
17
+ children
18
+ });
19
+ case "em":
20
+ return /* @__PURE__ */ jsx("em", {
21
+ children
22
+ });
23
+ case "code":
24
+ return /* @__PURE__ */ jsx("code", {
25
+ children
26
+ });
27
+ case "del":
28
+ return /* @__PURE__ */ jsx("del", {
29
+ children
30
+ });
31
+ default:
32
+ assertNever(type, "Unknown inline type");
33
+ }
34
+ },
8
35
  CodeBlock: ({ language, code }) => {
9
36
  return /* @__PURE__ */ jsx("pre", {
10
37
  "data-language": language ?? void 0,
@@ -39,6 +66,57 @@ const defaultComponents = {
39
66
  return /* @__PURE__ */ jsx("blockquote", {
40
67
  children
41
68
  });
69
+ },
70
+ Table: ({ headings, rows }) => {
71
+ return /* @__PURE__ */ jsxs("table", {
72
+ children: [
73
+ /* @__PURE__ */ jsx("thead", {
74
+ children: /* @__PURE__ */ jsx("tr", {
75
+ children: headings.map((heading, index) => {
76
+ return /* @__PURE__ */ jsx("th", {
77
+ align: heading.align,
78
+ children: heading.children
79
+ }, index);
80
+ })
81
+ })
82
+ }),
83
+ /* @__PURE__ */ jsx("tbody", {
84
+ children: rows.map((row, index) => {
85
+ return /* @__PURE__ */ jsx("tr", {
86
+ children: row.map((cell, index2) => {
87
+ return /* @__PURE__ */ jsx("td", {
88
+ align: cell.align,
89
+ children: cell.children
90
+ }, index2);
91
+ })
92
+ }, index);
93
+ })
94
+ })
95
+ ]
96
+ });
97
+ },
98
+ List: ({ type, items }) => {
99
+ const List = type === "ordered" ? "ol" : "ul";
100
+ return /* @__PURE__ */ jsx(List, {
101
+ children: items.map((item, index) => /* @__PURE__ */ jsxs("li", {
102
+ children: [
103
+ item.checked !== void 0 && /* @__PURE__ */ jsxs(Fragment, {
104
+ children: [
105
+ /* @__PURE__ */ jsx("input", {
106
+ type: "checkbox",
107
+ disabled: true,
108
+ checked: item.checked
109
+ }),
110
+ " "
111
+ ]
112
+ }),
113
+ item.children
114
+ ]
115
+ }, index))
116
+ });
117
+ },
118
+ Separator: () => {
119
+ return /* @__PURE__ */ jsx("hr", {});
42
120
  }
43
121
  };
44
122
  const Markdown = forwardRef(
@@ -51,7 +129,7 @@ const Markdown = forwardRef(
51
129
  ...props,
52
130
  ref: forwardedRef,
53
131
  children: tokens.map((token, index) => {
54
- return /* @__PURE__ */ jsx(MemoizedMarkdownBlockToken, {
132
+ return /* @__PURE__ */ jsx(MemoizedMarkdownToken, {
55
133
  token,
56
134
  components
57
135
  }, index);
@@ -59,382 +137,190 @@ const Markdown = forwardRef(
59
137
  });
60
138
  }
61
139
  );
62
- const MemoizedMarkdownBlockToken = memo(
140
+ const MemoizedMarkdownToken = memo(
63
141
  ({
64
142
  token,
65
143
  components
66
144
  }) => {
67
- return /* @__PURE__ */ jsx(MarkdownBlockToken, {
145
+ return /* @__PURE__ */ jsx(MarkdownToken, {
68
146
  token,
69
147
  components
70
148
  });
71
149
  },
72
- (prevProps, nextProps) => {
73
- const prevToken = prevProps.token;
150
+ (previousProps, nextProps) => {
151
+ const previousToken = previousProps.token;
74
152
  const nextToken = nextProps.token;
75
- if (prevToken.raw.length !== nextToken.raw.length) {
153
+ if (previousToken.raw.length !== nextToken.raw.length) {
76
154
  return false;
77
155
  }
78
- if (prevToken.type !== nextToken.type) {
156
+ if (previousToken.type !== nextToken.type) {
79
157
  return false;
80
158
  }
81
- return prevToken.raw === nextToken.raw;
159
+ return previousToken.raw === nextToken.raw;
82
160
  }
83
161
  );
84
- function MarkdownBlockToken({
162
+ function MarkdownToken({
85
163
  token,
86
164
  components
87
165
  }) {
166
+ if (!isMarkedToken(token)) {
167
+ return null;
168
+ }
88
169
  switch (token.type) {
170
+ case "escape": {
171
+ return token.text;
172
+ }
89
173
  case "space": {
90
174
  return null;
91
175
  }
92
- case "code": {
93
- let language = void 0;
94
- if (token.lang !== void 0) {
95
- language = token.lang.match(/^\S*/)?.[0] ?? void 0;
176
+ case "text": {
177
+ if (token.tokens !== void 0) {
178
+ return /* @__PURE__ */ jsx(MarkdownTokens, {
179
+ tokens: token.tokens,
180
+ components
181
+ });
182
+ } else {
183
+ return parseHtmlEntities(token.text);
96
184
  }
97
- const CodeBlock = components?.CodeBlock ?? defaultComponents.CodeBlock;
98
- return /* @__PURE__ */ jsx(CodeBlock, {
99
- language,
100
- code: token.text
101
- });
102
185
  }
103
- case "blockquote": {
104
- const tokens = [];
105
- for (let i = 0; i < token.tokens.length; i++) {
106
- switch (token.tokens[i].type) {
107
- case "space":
108
- case "code":
109
- case "blockquote":
110
- case "html":
111
- case "heading":
112
- case "hr":
113
- case "list":
114
- case "paragraph":
115
- case "table": {
116
- tokens.push(token.tokens[i]);
117
- break;
118
- }
119
- case "text": {
120
- const texts = [token.tokens[i]];
121
- while (i + 1 < token.tokens.length && token.tokens[i + 1].type === "text") {
122
- i++;
123
- texts.push(token.tokens[i]);
124
- }
125
- tokens.push({
126
- type: "paragraph",
127
- tokens: texts,
128
- raw: texts.map((text) => text.raw).join(""),
129
- text: texts.map((text) => text.text).join("")
130
- });
131
- break;
132
- }
133
- default: {
134
- continue;
135
- }
136
- }
137
- }
138
- const Blockquote = components?.Blockquote ?? defaultComponents.Blockquote;
139
- return /* @__PURE__ */ jsx(Blockquote, {
140
- children: tokens.map((token2, index) => {
141
- return /* @__PURE__ */ jsx(MarkdownBlockToken, {
142
- token: token2,
143
- components
144
- }, index);
186
+ case "br": {
187
+ return /* @__PURE__ */ jsx("br", {});
188
+ }
189
+ case "paragraph": {
190
+ const Paragraph = components?.Paragraph ?? defaultComponents.Paragraph;
191
+ return /* @__PURE__ */ jsx(Paragraph, {
192
+ children: /* @__PURE__ */ jsx(MarkdownTokens, {
193
+ tokens: token.tokens,
194
+ components
145
195
  })
146
196
  });
147
197
  }
148
- case "html": {
149
- return token.text;
150
- }
151
198
  case "heading": {
152
199
  const Heading = components?.Heading ?? defaultComponents.Heading;
153
200
  return /* @__PURE__ */ jsx(Heading, {
154
201
  level: clampHeadingLevel(token.depth),
155
- children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
156
- token: token2,
202
+ children: /* @__PURE__ */ jsx(MarkdownTokens, {
203
+ tokens: token.tokens,
157
204
  components
158
- }, index))
159
- });
160
- }
161
- case "hr": {
162
- return /* @__PURE__ */ jsx("hr", {});
163
- }
164
- case "list": {
165
- const ListTag = token.ordered ? "ol" : "ul";
166
- return /* @__PURE__ */ jsx(ListTag, {
167
- children: token.items.map((item, index) => {
168
- if (item.loose) {
169
- if (item.task) {
170
- const tokens = [...item.tokens];
171
- if (tokens[0]?.type === "paragraph") {
172
- const token2 = tokens[0];
173
- token2.tokens.unshift(
174
- {
175
- type: "checkbox",
176
- checked: item.checked,
177
- raw: ""
178
- },
179
- {
180
- type: "text",
181
- text: " ",
182
- raw: " ",
183
- escaped: false
184
- }
185
- );
186
- } else {
187
- tokens.unshift(
188
- {
189
- type: "checkbox",
190
- checked: item.checked,
191
- raw: ""
192
- },
193
- {
194
- type: "text",
195
- text: " ",
196
- raw: " ",
197
- escaped: false
198
- }
199
- );
200
- }
201
- const items = [];
202
- for (let i = 0; i < tokens.length; i++) {
203
- switch (tokens[i].type) {
204
- case "space":
205
- case "code":
206
- case "blockquote":
207
- case "html":
208
- case "heading":
209
- case "hr":
210
- case "list":
211
- case "paragraph":
212
- case "table": {
213
- items.push(tokens[i]);
214
- break;
215
- }
216
- case "text":
217
- case "checkbox": {
218
- const texts = [
219
- tokens[i]
220
- ];
221
- while (i + 1 < tokens.length && tokens[i + 1].type === "text") {
222
- i++;
223
- texts.push(tokens[i]);
224
- }
225
- items.push({
226
- type: "paragraph",
227
- tokens: texts,
228
- raw: texts.map((text) => text.raw).join(""),
229
- text: texts.map((text) => text.text).join("")
230
- });
231
- break;
232
- }
233
- default: {
234
- continue;
235
- }
236
- }
237
- }
238
- return /* @__PURE__ */ jsx("li", {
239
- children: items.map((token2, index2) => {
240
- return /* @__PURE__ */ jsx(MarkdownBlockToken, {
241
- token: token2,
242
- components
243
- }, index2);
244
- })
245
- }, index);
246
- } else {
247
- const tokens = [];
248
- for (let i = 0; i < item.tokens.length; i++) {
249
- switch (item.tokens[i].type) {
250
- case "space":
251
- case "code":
252
- case "blockquote":
253
- case "html":
254
- case "heading":
255
- case "hr":
256
- case "list":
257
- case "paragraph":
258
- case "table": {
259
- tokens.push(item.tokens[i]);
260
- break;
261
- }
262
- case "text": {
263
- const texts = [
264
- item.tokens[i]
265
- ];
266
- while (i + 1 < item.tokens.length && item.tokens[i + 1].type === "text") {
267
- i++;
268
- texts.push(item.tokens[i]);
269
- }
270
- tokens.push({
271
- type: "paragraph",
272
- tokens: texts,
273
- raw: texts.map((text) => text.raw).join(""),
274
- text: texts.map((text) => text.text).join("")
275
- });
276
- break;
277
- }
278
- default: {
279
- continue;
280
- }
281
- }
282
- }
283
- return /* @__PURE__ */ jsx("li", {
284
- children: tokens.map((token2, index2) => {
285
- return /* @__PURE__ */ jsx(MarkdownBlockToken, {
286
- token: token2,
287
- components
288
- }, index2);
289
- })
290
- }, index);
291
- }
292
- } else {
293
- const Items = item.tokens.map((token2, index2) => {
294
- switch (token2.type) {
295
- case "space":
296
- case "code":
297
- case "blockquote":
298
- case "html":
299
- case "heading":
300
- case "hr":
301
- case "list":
302
- case "paragraph":
303
- case "table": {
304
- return /* @__PURE__ */ jsx(MarkdownBlockToken, {
305
- token: token2,
306
- components
307
- }, index2);
308
- }
309
- case "text": {
310
- return /* @__PURE__ */ jsx(MarkdownInlineToken, {
311
- token: token2,
312
- components
313
- }, index2);
314
- }
315
- default: {
316
- return null;
317
- }
318
- }
319
- });
320
- if (item.task) {
321
- return /* @__PURE__ */ jsxs("li", {
322
- children: [
323
- /* @__PURE__ */ jsx("input", {
324
- type: "checkbox",
325
- disabled: true,
326
- checked: item.checked
327
- }),
328
- " ",
329
- Items
330
- ]
331
- }, index);
332
- } else {
333
- return /* @__PURE__ */ jsx("li", {
334
- children: Items
335
- }, index);
336
- }
337
- }
338
205
  })
339
206
  });
340
207
  }
341
- case "paragraph": {
342
- return /* @__PURE__ */ jsx("p", {
343
- children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
344
- token: token2,
345
- components
346
- }, index))
347
- });
348
- }
349
- case "table": {
350
- return /* @__PURE__ */ jsxs("table", {
351
- children: [
352
- /* @__PURE__ */ jsx("thead", {
353
- children: /* @__PURE__ */ jsx("tr", {
354
- children: token.header.map((cell, index) => {
355
- return /* @__PURE__ */ jsx("th", {
356
- align: cell.align ?? void 0,
357
- children: cell.tokens.map((token2, index2) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
358
- token: token2,
359
- components
360
- }, index2))
361
- }, index);
362
- })
363
- })
364
- }),
365
- /* @__PURE__ */ jsx("tbody", {
366
- children: token.rows.map((row, index) => {
367
- return /* @__PURE__ */ jsx("tr", {
368
- children: row.map((cell, index2) => {
369
- return /* @__PURE__ */ jsx("td", {
370
- align: cell.align ?? void 0,
371
- children: cell.tokens.map((token2, index3) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
372
- token: token2,
373
- components
374
- }, index3))
375
- }, index2);
376
- })
377
- }, index);
378
- })
379
- })
380
- ]
381
- });
382
- }
383
- }
384
- }
385
- function MarkdownInlineToken({
386
- token,
387
- components
388
- }) {
389
- switch (token.type) {
390
208
  case "strong": {
391
- return /* @__PURE__ */ jsx("strong", {
392
- children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
393
- token: token2,
209
+ const Inline = components?.Inline ?? defaultComponents.Inline;
210
+ return /* @__PURE__ */ jsx(Inline, {
211
+ type: "strong",
212
+ children: /* @__PURE__ */ jsx(MarkdownTokens, {
213
+ tokens: token.tokens,
394
214
  components
395
- }, index))
215
+ })
396
216
  });
397
217
  }
398
218
  case "em": {
399
- return /* @__PURE__ */ jsx("em", {
400
- children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
401
- token: token2,
219
+ const Inline = components?.Inline ?? defaultComponents.Inline;
220
+ return /* @__PURE__ */ jsx(Inline, {
221
+ type: "em",
222
+ children: /* @__PURE__ */ jsx(MarkdownTokens, {
223
+ tokens: token.tokens,
402
224
  components
403
- }, index))
225
+ })
404
226
  });
405
227
  }
406
228
  case "codespan": {
407
- return /* @__PURE__ */ jsx("code", {
229
+ const Inline = components?.Inline ?? defaultComponents.Inline;
230
+ return /* @__PURE__ */ jsx(Inline, {
231
+ type: "code",
408
232
  children: parseHtmlEntities(token.text)
409
233
  });
410
234
  }
411
- case "br": {
412
- return /* @__PURE__ */ jsx("br", {});
413
- }
414
235
  case "del": {
415
- return /* @__PURE__ */ jsx("del", {
416
- children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
417
- token: token2,
236
+ const Inline = components?.Inline ?? defaultComponents.Inline;
237
+ return /* @__PURE__ */ jsx(Inline, {
238
+ type: "del",
239
+ children: /* @__PURE__ */ jsx(MarkdownTokens, {
240
+ tokens: token.tokens,
418
241
  components
419
- }, index))
242
+ })
420
243
  });
421
244
  }
422
245
  case "link": {
423
246
  const href = sanitizeUrl(token.href);
424
247
  if (href === null) {
425
- return token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
426
- token: token2,
248
+ return /* @__PURE__ */ jsx(MarkdownTokens, {
249
+ tokens: token.tokens,
427
250
  components
428
- }, index));
251
+ });
429
252
  }
430
253
  const Link = components?.Link ?? defaultComponents.Link;
431
254
  return /* @__PURE__ */ jsx(Link, {
432
255
  href,
433
256
  title: token.title ?? void 0,
434
- children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
435
- token: token2,
257
+ children: /* @__PURE__ */ jsx(MarkdownTokens, {
258
+ tokens: token.tokens,
436
259
  components
437
- }, index))
260
+ })
261
+ });
262
+ }
263
+ case "code": {
264
+ let language = void 0;
265
+ if (token.lang !== void 0) {
266
+ language = token.lang.match(/^\S*/)?.[0] ?? void 0;
267
+ }
268
+ const CodeBlock = components?.CodeBlock ?? defaultComponents.CodeBlock;
269
+ return /* @__PURE__ */ jsx(CodeBlock, {
270
+ language,
271
+ code: token.text
272
+ });
273
+ }
274
+ case "blockquote": {
275
+ const Blockquote = components?.Blockquote ?? defaultComponents.Blockquote;
276
+ return /* @__PURE__ */ jsx(Blockquote, {
277
+ children: /* @__PURE__ */ jsx(MarkdownTokens, {
278
+ tokens: token.tokens,
279
+ components,
280
+ normalizeToBlockTokens: true
281
+ })
282
+ });
283
+ }
284
+ case "list": {
285
+ const List = components?.List ?? defaultComponents.List;
286
+ const items = token.items.map((item) => {
287
+ return {
288
+ checked: item.task ? item.checked : void 0,
289
+ children: /* @__PURE__ */ jsx(MarkdownTokens, {
290
+ tokens: item.tokens,
291
+ components,
292
+ normalizeToBlockTokens: item.loose
293
+ })
294
+ };
295
+ });
296
+ return /* @__PURE__ */ jsx(List, {
297
+ type: token.ordered ? "ordered" : "unordered",
298
+ items
299
+ });
300
+ }
301
+ case "table": {
302
+ const Table = components?.Table ?? defaultComponents.Table;
303
+ const headings = token.header.map(
304
+ (cell) => ({
305
+ align: cell.align ?? void 0,
306
+ children: /* @__PURE__ */ jsx(MarkdownTokens, {
307
+ tokens: cell.tokens,
308
+ components
309
+ })
310
+ })
311
+ );
312
+ const rows = token.rows.map(
313
+ (row) => row.map((cell) => ({
314
+ align: cell.align ?? void 0,
315
+ children: /* @__PURE__ */ jsx(MarkdownTokens, {
316
+ tokens: cell.tokens,
317
+ components
318
+ })
319
+ }))
320
+ );
321
+ return /* @__PURE__ */ jsx(Table, {
322
+ headings,
323
+ rows
438
324
  });
439
325
  }
440
326
  case "image": {
@@ -449,31 +335,76 @@ function MarkdownInlineToken({
449
335
  title: token.title ?? void 0
450
336
  });
451
337
  }
452
- case "text": {
453
- if (token.tokens !== void 0) {
454
- return token.tokens.map((token2, index) => /* @__PURE__ */ jsx(MarkdownInlineToken, {
455
- token: token2,
456
- components
457
- }, index));
458
- } else {
459
- return parseHtmlEntities(token.text);
460
- }
461
- }
462
- case "escape": {
463
- return token.text;
464
- }
465
- case "checkbox": {
466
- return /* @__PURE__ */ jsx("input", {
467
- type: "checkbox",
468
- disabled: true,
469
- checked: token.checked
470
- });
338
+ case "hr": {
339
+ const Separator = components?.Separator ?? defaultComponents.Separator;
340
+ return /* @__PURE__ */ jsx(Separator, {});
471
341
  }
342
+ case "html":
472
343
  default: {
473
344
  return null;
474
345
  }
475
346
  }
476
347
  }
348
+ function MarkdownTokens({
349
+ tokens,
350
+ components,
351
+ normalizeToBlockTokens = false
352
+ }) {
353
+ const normalizedTokens = [];
354
+ if (normalizeToBlockTokens) {
355
+ for (let i = 0; i < tokens.length; i++) {
356
+ const token = tokens[i];
357
+ switch (token.type) {
358
+ case "text": {
359
+ const texts = [token];
360
+ while (i + 1 < tokens.length && tokens[i + 1].type === "text") {
361
+ i++;
362
+ texts.push(tokens[i]);
363
+ }
364
+ normalizedTokens.push({
365
+ type: "paragraph",
366
+ tokens: texts,
367
+ raw: texts.map((text) => text.raw).join(""),
368
+ text: texts.map((text) => text.text).join("")
369
+ });
370
+ break;
371
+ }
372
+ default: {
373
+ normalizedTokens.push(token);
374
+ }
375
+ }
376
+ }
377
+ }
378
+ return tokens.map((token, index) => /* @__PURE__ */ jsx(MarkdownToken, {
379
+ token,
380
+ components
381
+ }, index));
382
+ }
383
+ const markedTokenTypes = [
384
+ "blockquote",
385
+ "br",
386
+ "code",
387
+ "codespan",
388
+ "def",
389
+ "del",
390
+ "em",
391
+ "escape",
392
+ "heading",
393
+ "hr",
394
+ "html",
395
+ "image",
396
+ "link",
397
+ "list",
398
+ "list_item",
399
+ "paragraph",
400
+ "space",
401
+ "strong",
402
+ "table",
403
+ "text"
404
+ ];
405
+ function isMarkedToken(token) {
406
+ return typeof token === "object" && token !== null && "type" in token && markedTokenTypes.includes(token.type);
407
+ }
477
408
  function parseHtmlEntities(input) {
478
409
  const document = new DOMParser().parseFromString(
479
410
  `<!doctype html><body>${input}`,
@@ -485,5 +416,5 @@ function clampHeadingLevel(level) {
485
416
  return Math.max(1, Math.min(6, level));
486
417
  }
487
418
 
488
- export { Markdown, MarkdownBlockToken };
419
+ export { Markdown, MarkdownToken };
489
420
  //# sourceMappingURL=Markdown.js.map