@liveblocks/react-ui 3.1.4 → 3.2.1

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