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