@liveblocks/react-ui 2.25.0-aiprivatebeta7 → 2.25.0-aiprivatebeta8
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 +10 -4
- package/dist/_private/index.cjs.map +1 -1
- package/dist/_private/index.d.cts +76 -10
- package/dist/_private/index.d.ts +76 -10
- package/dist/_private/index.js +4 -2
- package/dist/_private/index.js.map +1 -1
- package/dist/components/AiChat.cjs +24 -27
- package/dist/components/AiChat.cjs.map +1 -1
- package/dist/components/AiChat.js +24 -27
- package/dist/components/AiChat.js.map +1 -1
- package/dist/components/AiToolDebugger.cjs +74 -0
- package/dist/components/AiToolDebugger.cjs.map +1 -0
- package/dist/components/AiToolDebugger.js +72 -0
- package/dist/components/AiToolDebugger.js.map +1 -0
- 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 +127 -147
- package/dist/components/internal/AiChatAssistantMessage.cjs.map +1 -1
- package/dist/components/internal/AiChatAssistantMessage.js +129 -149
- package/dist/components/internal/AiChatAssistantMessage.js.map +1 -1
- package/dist/components/internal/AiChatComposer.cjs +28 -16
- package/dist/components/internal/AiChatComposer.cjs.map +1 -1
- package/dist/components/internal/AiChatComposer.js +28 -16
- package/dist/components/internal/AiChatComposer.js.map +1 -1
- 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 +27 -14
- package/dist/index.d.ts +27 -14
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/overrides.cjs +0 -4
- package/dist/overrides.cjs.map +1 -1
- package/dist/overrides.js +0 -4
- 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/index.d.cts +0 -4
- package/dist/primitives/index.d.ts +0 -4
- package/dist/primitives/internal/Markdown.cjs +56 -25
- package/dist/primitives/internal/Markdown.cjs.map +1 -1
- package/dist/primitives/internal/Markdown.js +56 -25
- package/dist/primitives/internal/Markdown.js.map +1 -1
- package/dist/version.cjs +1 -1
- package/dist/version.js +1 -1
- package/package.json +5 -5
- package/src/styles/index.css +105 -61
- 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
|
@@ -4,17 +4,32 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
4
4
|
var marked = require('marked');
|
|
5
5
|
var react = require('react');
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
const defaultComponents = {
|
|
8
|
+
CodeBlock: ({ language, code }) => {
|
|
9
|
+
return /* @__PURE__ */ jsxRuntime.jsx("pre", {
|
|
10
|
+
"data-language": language ?? void 0,
|
|
11
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("code", {
|
|
12
|
+
children: code
|
|
13
|
+
})
|
|
14
|
+
});
|
|
15
|
+
},
|
|
16
|
+
Anchor: "a"
|
|
17
|
+
};
|
|
18
|
+
function Markdown({ content, components }) {
|
|
8
19
|
const tokens = react.useMemo(() => {
|
|
9
20
|
return new marked.Lexer().lex(content);
|
|
10
21
|
}, [content]);
|
|
11
22
|
return tokens.map((token, index) => {
|
|
12
23
|
return /* @__PURE__ */ jsxRuntime.jsx(BlockTokenComp, {
|
|
13
|
-
token
|
|
24
|
+
token,
|
|
25
|
+
components
|
|
14
26
|
}, index);
|
|
15
27
|
});
|
|
16
28
|
}
|
|
17
|
-
function BlockTokenComp({
|
|
29
|
+
function BlockTokenComp({
|
|
30
|
+
token,
|
|
31
|
+
components
|
|
32
|
+
}) {
|
|
18
33
|
switch (token.type) {
|
|
19
34
|
case "space": {
|
|
20
35
|
return null;
|
|
@@ -24,11 +39,10 @@ function BlockTokenComp({ token }) {
|
|
|
24
39
|
if (token.lang !== void 0) {
|
|
25
40
|
language = token.lang.match(/^\S*/)?.[0] ?? null;
|
|
26
41
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
})
|
|
42
|
+
const CodeBlock = components?.CodeBlock ?? defaultComponents.CodeBlock;
|
|
43
|
+
return /* @__PURE__ */ jsxRuntime.jsx(CodeBlock, {
|
|
44
|
+
language,
|
|
45
|
+
code: token.text
|
|
32
46
|
});
|
|
33
47
|
}
|
|
34
48
|
case "blockquote": {
|
|
@@ -69,7 +83,8 @@ function BlockTokenComp({ token }) {
|
|
|
69
83
|
return /* @__PURE__ */ jsxRuntime.jsx("blockquote", {
|
|
70
84
|
children: tokens.map((token2, index) => {
|
|
71
85
|
return /* @__PURE__ */ jsxRuntime.jsx(BlockTokenComp, {
|
|
72
|
-
token: token2
|
|
86
|
+
token: token2,
|
|
87
|
+
components
|
|
73
88
|
}, index);
|
|
74
89
|
})
|
|
75
90
|
});
|
|
@@ -104,7 +119,8 @@ function BlockTokenComp({ token }) {
|
|
|
104
119
|
}
|
|
105
120
|
return /* @__PURE__ */ jsxRuntime.jsx(HeadingTag, {
|
|
106
121
|
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsxRuntime.jsx(InlineTokenComp, {
|
|
107
|
-
token: token2
|
|
122
|
+
token: token2,
|
|
123
|
+
components
|
|
108
124
|
}, index))
|
|
109
125
|
});
|
|
110
126
|
}
|
|
@@ -188,7 +204,8 @@ function BlockTokenComp({ token }) {
|
|
|
188
204
|
return /* @__PURE__ */ jsxRuntime.jsx("li", {
|
|
189
205
|
children: items.map((token2, index2) => {
|
|
190
206
|
return /* @__PURE__ */ jsxRuntime.jsx(BlockTokenComp, {
|
|
191
|
-
token: token2
|
|
207
|
+
token: token2,
|
|
208
|
+
components
|
|
192
209
|
}, index2);
|
|
193
210
|
})
|
|
194
211
|
}, index);
|
|
@@ -232,7 +249,8 @@ function BlockTokenComp({ token }) {
|
|
|
232
249
|
return /* @__PURE__ */ jsxRuntime.jsx("li", {
|
|
233
250
|
children: tokens.map((token2, index2) => {
|
|
234
251
|
return /* @__PURE__ */ jsxRuntime.jsx(BlockTokenComp, {
|
|
235
|
-
token: token2
|
|
252
|
+
token: token2,
|
|
253
|
+
components
|
|
236
254
|
}, index2);
|
|
237
255
|
})
|
|
238
256
|
}, index);
|
|
@@ -250,12 +268,14 @@ function BlockTokenComp({ token }) {
|
|
|
250
268
|
case "paragraph":
|
|
251
269
|
case "table": {
|
|
252
270
|
return /* @__PURE__ */ jsxRuntime.jsx(BlockTokenComp, {
|
|
253
|
-
token: token2
|
|
271
|
+
token: token2,
|
|
272
|
+
components
|
|
254
273
|
}, index2);
|
|
255
274
|
}
|
|
256
275
|
case "text": {
|
|
257
276
|
return /* @__PURE__ */ jsxRuntime.jsx(InlineTokenComp, {
|
|
258
|
-
token: token2
|
|
277
|
+
token: token2,
|
|
278
|
+
components
|
|
259
279
|
}, index2);
|
|
260
280
|
}
|
|
261
281
|
default: {
|
|
@@ -287,7 +307,8 @@ function BlockTokenComp({ token }) {
|
|
|
287
307
|
case "paragraph": {
|
|
288
308
|
return /* @__PURE__ */ jsxRuntime.jsx("p", {
|
|
289
309
|
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsxRuntime.jsx(InlineTokenComp, {
|
|
290
|
-
token: token2
|
|
310
|
+
token: token2,
|
|
311
|
+
components
|
|
291
312
|
}, index))
|
|
292
313
|
});
|
|
293
314
|
}
|
|
@@ -300,7 +321,8 @@ function BlockTokenComp({ token }) {
|
|
|
300
321
|
return /* @__PURE__ */ jsxRuntime.jsx("th", {
|
|
301
322
|
align: cell.align ?? void 0,
|
|
302
323
|
children: cell.tokens.map((token2, index2) => /* @__PURE__ */ jsxRuntime.jsx(InlineTokenComp, {
|
|
303
|
-
token: token2
|
|
324
|
+
token: token2,
|
|
325
|
+
components
|
|
304
326
|
}, index2))
|
|
305
327
|
}, index);
|
|
306
328
|
})
|
|
@@ -313,7 +335,8 @@ function BlockTokenComp({ token }) {
|
|
|
313
335
|
return /* @__PURE__ */ jsxRuntime.jsx("td", {
|
|
314
336
|
align: cell.align ?? void 0,
|
|
315
337
|
children: cell.tokens.map((token2, index3) => /* @__PURE__ */ jsxRuntime.jsx(InlineTokenComp, {
|
|
316
|
-
token: token2
|
|
338
|
+
token: token2,
|
|
339
|
+
components
|
|
317
340
|
}, index3))
|
|
318
341
|
}, index2);
|
|
319
342
|
})
|
|
@@ -326,20 +349,23 @@ function BlockTokenComp({ token }) {
|
|
|
326
349
|
}
|
|
327
350
|
}
|
|
328
351
|
function InlineTokenComp({
|
|
329
|
-
token
|
|
352
|
+
token,
|
|
353
|
+
components
|
|
330
354
|
}) {
|
|
331
355
|
switch (token.type) {
|
|
332
356
|
case "strong": {
|
|
333
357
|
return /* @__PURE__ */ jsxRuntime.jsx("strong", {
|
|
334
358
|
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsxRuntime.jsx(InlineTokenComp, {
|
|
335
|
-
token: token2
|
|
359
|
+
token: token2,
|
|
360
|
+
components
|
|
336
361
|
}, index))
|
|
337
362
|
});
|
|
338
363
|
}
|
|
339
364
|
case "em": {
|
|
340
365
|
return /* @__PURE__ */ jsxRuntime.jsx("em", {
|
|
341
366
|
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsxRuntime.jsx(InlineTokenComp, {
|
|
342
|
-
token: token2
|
|
367
|
+
token: token2,
|
|
368
|
+
components
|
|
343
369
|
}, index))
|
|
344
370
|
});
|
|
345
371
|
}
|
|
@@ -354,7 +380,8 @@ function InlineTokenComp({
|
|
|
354
380
|
case "del": {
|
|
355
381
|
return /* @__PURE__ */ jsxRuntime.jsx("del", {
|
|
356
382
|
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsxRuntime.jsx(InlineTokenComp, {
|
|
357
|
-
token: token2
|
|
383
|
+
token: token2,
|
|
384
|
+
components
|
|
358
385
|
}, index))
|
|
359
386
|
});
|
|
360
387
|
}
|
|
@@ -372,16 +399,19 @@ function InlineTokenComp({
|
|
|
372
399
|
}
|
|
373
400
|
if (href === null) {
|
|
374
401
|
return token.tokens.map((token2, index) => /* @__PURE__ */ jsxRuntime.jsx(InlineTokenComp, {
|
|
375
|
-
token: token2
|
|
402
|
+
token: token2,
|
|
403
|
+
components
|
|
376
404
|
}, index));
|
|
377
405
|
}
|
|
378
|
-
|
|
406
|
+
const Anchor = components?.Anchor ?? defaultComponents.Anchor;
|
|
407
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Anchor, {
|
|
379
408
|
href,
|
|
380
409
|
title: token.title ? token.title : void 0,
|
|
381
410
|
target: "_blank",
|
|
382
411
|
rel: "noopener noreferrer",
|
|
383
412
|
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsxRuntime.jsx(InlineTokenComp, {
|
|
384
|
-
token: token2
|
|
413
|
+
token: token2,
|
|
414
|
+
components
|
|
385
415
|
}, index))
|
|
386
416
|
});
|
|
387
417
|
}
|
|
@@ -409,7 +439,8 @@ function InlineTokenComp({
|
|
|
409
439
|
case "text": {
|
|
410
440
|
if (token.tokens !== void 0) {
|
|
411
441
|
return token.tokens.map((token2, index) => /* @__PURE__ */ jsxRuntime.jsx(InlineTokenComp, {
|
|
412
|
-
token: token2
|
|
442
|
+
token: token2,
|
|
443
|
+
components
|
|
413
444
|
}, index));
|
|
414
445
|
} else {
|
|
415
446
|
return parseHtmlEntities(token.text);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Markdown.cjs","sources":["../../../src/primitives/internal/Markdown.tsx"],"sourcesContent":["import { Lexer, type Tokens } from \"marked\";\nimport { type ReactNode, useMemo } from \"react\";\n\nexport type MarkdownProps = {\n content: string;\n};\nexport function Markdown({ content }: { content: string }) {\n const tokens = useMemo(() => {\n return new Lexer().lex(content);\n }, [content]);\n\n return tokens.map((token, index) => {\n return <BlockTokenComp token={token as BlockToken} key={index} />;\n });\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\nexport function BlockTokenComp({ token }: { token: BlockToken }) {\n switch (token.type) {\n case \"space\": {\n return null;\n }\n case \"code\": {\n let language: string | null = null;\n if (token.lang !== undefined) {\n language = token.lang.match(/^\\S*/)?.[0] ?? null;\n }\n return (\n <pre data-language={language || undefined}>\n <code>{token.text}</code>\n </pre>\n );\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 return (\n <blockquote>\n {tokens.map((token, index) => {\n return <BlockTokenComp token={token} key={index} />;\n })}\n </blockquote>\n );\n }\n case \"html\": {\n return token.text;\n }\n case \"heading\": {\n let HeadingTag: \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n switch (token.depth) {\n case 1:\n HeadingTag = \"h1\";\n break;\n case 2:\n HeadingTag = \"h2\";\n break;\n case 3:\n HeadingTag = \"h3\";\n break;\n case 4:\n HeadingTag = \"h4\";\n break;\n case 5:\n HeadingTag = \"h5\";\n break;\n case 6:\n HeadingTag = \"h6\";\n break;\n default:\n HeadingTag = \"h1\";\n break;\n }\n return (\n <HeadingTag>\n {token.tokens.map((token, index) => (\n <InlineTokenComp key={index} token={token as InlineToken} />\n ))}\n </HeadingTag>\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 <BlockTokenComp token={token} key={index} />;\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 <BlockTokenComp token={token} key={index} />;\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 <BlockTokenComp token={token as BlockToken} key={index} />\n );\n }\n case \"text\": {\n return (\n <InlineTokenComp\n token={token as Tokens.Text}\n key={index}\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 <InlineTokenComp key={index} token={token as InlineToken} />\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 <InlineTokenComp\n key={index}\n token={token as InlineToken}\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 <InlineTokenComp\n key={index}\n token={token as InlineToken}\n />\n ))}\n </td>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n );\n }\n }\n}\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;\nfunction InlineTokenComp({\n token,\n}: {\n token: InlineToken | { type: \"checkbox\"; checked: boolean };\n}) {\n switch (token.type) {\n case \"strong\": {\n return (\n <strong>\n {token.tokens.map((token, index) => (\n <InlineTokenComp key={index} token={token as InlineToken} />\n ))}\n </strong>\n );\n }\n case \"em\": {\n return (\n <em>\n {token.tokens.map((token, index) => (\n <InlineTokenComp key={index} token={token as InlineToken} />\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 <InlineTokenComp key={index} token={token as InlineToken} />\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 <InlineTokenComp key={index} token={token as InlineToken} />\n ));\n }\n\n return (\n <a\n href={href}\n title={token.title ? token.title : undefined}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {token.tokens.map((token, index) => (\n <InlineTokenComp key={index} token={token as InlineToken} />\n ))}\n </a>\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 return (\n <img 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 <InlineTokenComp key={index} token={token as InlineToken} />\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\nexport function 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"],"names":["useMemo","Lexer","jsx","token","index","jsxs"],"mappings":";;;;;;AAMgB,SAAA,QAAA,CAAS,EAAE,OAAA,EAAgC,EAAA;AACzD,EAAM,MAAA,MAAA,GAASA,cAAQ,MAAM;AAC3B,IAAA,OAAO,IAAIC,YAAA,EAAQ,CAAA,GAAA,CAAI,OAAO,CAAA,CAAA;AAAA,GAChC,EAAG,CAAC,OAAO,CAAC,CAAA,CAAA;AAEZ,EAAA,OAAO,MAAO,CAAA,GAAA,CAAI,CAAC,KAAA,EAAO,KAAU,KAAA;AAClC,IAAA,uBAAQC,cAAA,CAAA,cAAA,EAAA;AAAA,MAAe,KAAA;AAAA,KAAA,EAAiC,KAAO,CAAA,CAAA;AAAA,GAChE,CAAA,CAAA;AACH,CAAA;AAyBgB,SAAA,cAAA,CAAe,EAAE,KAAA,EAAgC,EAAA;AAC/D,EAAA,QAAQ,MAAM,IAAM;AAAA,IAClB,KAAK,OAAS,EAAA;AACZ,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAAA,IACA,KAAK,MAAQ,EAAA;AACX,MAAA,IAAI,QAA0B,GAAA,IAAA,CAAA;AAC9B,MAAI,IAAA,KAAA,CAAM,SAAS,KAAW,CAAA,EAAA;AAC5B,QAAA,QAAA,GAAW,KAAM,CAAA,IAAA,CAAK,KAAM,CAAA,MAAM,IAAI,CAAM,CAAA,IAAA,IAAA,CAAA;AAAA,OAC9C;AACA,MAAA,uBACGA,cAAA,CAAA,KAAA,EAAA;AAAA,QAAI,iBAAe,QAAY,IAAA,KAAA,CAAA;AAAA,QAC9B,QAAC,kBAAAA,cAAA,CAAA,MAAA,EAAA;AAAA,UAAM,QAAM,EAAA,KAAA,CAAA,IAAA;AAAA,SAAK,CAAA;AAAA,OACpB,CAAA,CAAA;AAAA,KAEJ;AAAA,IACA,KAAK,YAAc,EAAA;AACjB,MAAA,MAAM,SAAuB,EAAC,CAAA;AAC9B,MAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,KAAM,CAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AAC5C,QAAQ,QAAA,KAAA,CAAM,MAAO,CAAA,CAAA,CAAA,CAAI,IAAM;AAAA,UAC7B,KAAK,OAAA,CAAA;AAAA,UACL,KAAK,MAAA,CAAA;AAAA,UACL,KAAK,YAAA,CAAA;AAAA,UACL,KAAK,MAAA,CAAA;AAAA,UACL,KAAK,SAAA,CAAA;AAAA,UACL,KAAK,IAAA,CAAA;AAAA,UACL,KAAK,MAAA,CAAA;AAAA,UACL,KAAK,WAAA,CAAA;AAAA,UACL,KAAK,OAAS,EAAA;AACZ,YAAO,MAAA,CAAA,IAAA,CAAK,KAAM,CAAA,MAAA,CAAO,CAAgB,CAAA,CAAA,CAAA;AACzC,YAAA,MAAA;AAAA,WACF;AAAA,UACA,KAAK,MAAQ,EAAA;AACX,YAAA,MAAM,KAAuB,GAAA,CAAC,KAAM,CAAA,MAAA,CAAO,CAAiB,CAAA,CAAA,CAAA;AAC5D,YACE,OAAA,CAAA,GAAI,CAAI,GAAA,KAAA,CAAM,MAAO,CAAA,MAAA,IACrB,MAAM,MAAO,CAAA,CAAA,GAAI,CAAI,CAAA,CAAA,IAAA,KAAS,MAC9B,EAAA;AACA,cAAA,CAAA,EAAA,CAAA;AACA,cAAM,KAAA,CAAA,IAAA,CAAK,KAAM,CAAA,MAAA,CAAO,CAAiB,CAAA,CAAA,CAAA;AAAA,aAC3C;AACA,YAAA,MAAA,CAAO,IAAK,CAAA;AAAA,cACV,IAAM,EAAA,WAAA;AAAA,cACN,MAAQ,EAAA,KAAA;AAAA,cACR,GAAA,EAAK,MAAM,GAAI,CAAA,CAAC,SAAS,IAAK,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA,cAC1C,IAAA,EAAM,MAAM,GAAI,CAAA,CAAC,SAAS,IAAK,CAAA,IAAI,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA,aAClB,CAAA,CAAA;AAC5B,YAAA,MAAA;AAAA,WACF;AAAA,UACA,SAAS;AACP,YAAA,SAAA;AAAA,WACF;AAAA,SACF;AAAA,OACF;AAEA,MAAA,uBACGA,cAAA,CAAA,YAAA,EAAA;AAAA,QACE,QAAO,EAAA,MAAA,CAAA,GAAA,CAAI,CAACC,MAAAA,EAAO,KAAU,KAAA;AAC5B,UAAA,uBAAQD,cAAA,CAAA,cAAA,EAAA;AAAA,YAAe,KAAOC,EAAAA,MAAAA;AAAA,WAAA,EAAY,KAAO,CAAA,CAAA;AAAA,SAClD,CAAA;AAAA,OACH,CAAA,CAAA;AAAA,KAEJ;AAAA,IACA,KAAK,MAAQ,EAAA;AACX,MAAA,OAAO,KAAM,CAAA,IAAA,CAAA;AAAA,KACf;AAAA,IACA,KAAK,SAAW,EAAA;AACd,MAAI,IAAA,UAAA,CAAA;AACJ,MAAA,QAAQ,MAAM,KAAO;AAAA,QACnB,KAAK,CAAA;AACH,UAAa,UAAA,GAAA,IAAA,CAAA;AACb,UAAA,MAAA;AAAA,QACF,KAAK,CAAA;AACH,UAAa,UAAA,GAAA,IAAA,CAAA;AACb,UAAA,MAAA;AAAA,QACF,KAAK,CAAA;AACH,UAAa,UAAA,GAAA,IAAA,CAAA;AACb,UAAA,MAAA;AAAA,QACF,KAAK,CAAA;AACH,UAAa,UAAA,GAAA,IAAA,CAAA;AACb,UAAA,MAAA;AAAA,QACF,KAAK,CAAA;AACH,UAAa,UAAA,GAAA,IAAA,CAAA;AACb,UAAA,MAAA;AAAA,QACF,KAAK,CAAA;AACH,UAAa,UAAA,GAAA,IAAA,CAAA;AACb,UAAA,MAAA;AAAA,QACF;AACE,UAAa,UAAA,GAAA,IAAA,CAAA;AACb,UAAA,MAAA;AAAA,OACJ;AACA,MAAA,uBACGD,cAAA,CAAA,UAAA,EAAA;AAAA,QACE,gBAAM,MAAO,CAAA,GAAA,CAAI,CAACC,MAAAA,EAAO,0BACvBD,cAAA,CAAA,eAAA,EAAA;AAAA,UAA4B,KAAOC,EAAAA,MAAAA;AAAA,SAAA,EAAd,KAAoC,CAC3D,CAAA;AAAA,OACH,CAAA,CAAA;AAAA,KAEJ;AAAA,IACA,KAAK,IAAM,EAAA;AACT,MAAA,sCAAQ,IAAG,EAAA,EAAA,CAAA,CAAA;AAAA,KACb;AAAA,IACA,KAAK,MAAQ,EAAA;AACX,MAAM,MAAA,OAAA,GAAU,KAAM,CAAA,OAAA,GAAU,IAAO,GAAA,IAAA,CAAA;AAEvC,MAAA,uBACGD,cAAA,CAAA,OAAA,EAAA;AAAA,QACE,QAAM,EAAA,KAAA,CAAA,KAAA,CAAM,GAAI,CAAA,CAAC,MAAM,KAAU,KAAA;AAEhC,UAAA,IAAI,KAAK,KAAO,EAAA;AAEd,YAAA,IAAI,KAAK,IAAM,EAAA;AACb,cAAA,MAAM,MAAS,GAAA,CAAC,GAAG,IAAA,CAAK,MAAM,CAAA,CAAA;AAC9B,cAAI,IAAA,MAAA,CAAO,CAAI,CAAA,EAAA,IAAA,KAAS,WAAa,EAAA;AACnC,gBAAA,MAAMC,SAAQ,MAAO,CAAA,CAAA,CAAA,CAAA;AACrB,gBAAAA,OAAM,MAAO,CAAA,OAAA;AAAA,kBACX;AAAA,oBACE,IAAM,EAAA,UAAA;AAAA,oBACN,SAAS,IAAK,CAAA,OAAA;AAAA,oBACd,GAAK,EAAA,EAAA;AAAA,mBACP;AAAA,kBACA;AAAA,oBACE,IAAM,EAAA,MAAA;AAAA,oBACN,IAAM,EAAA,GAAA;AAAA,oBACN,GAAK,EAAA,GAAA;AAAA,oBACL,OAAS,EAAA,KAAA;AAAA,mBACX;AAAA,iBACF,CAAA;AAAA,eACK,MAAA;AACL,gBAAO,MAAA,CAAA,OAAA;AAAA,kBACL;AAAA,oBACE,IAAM,EAAA,UAAA;AAAA,oBACN,SAAS,IAAK,CAAA,OAAA;AAAA,oBACd,GAAK,EAAA,EAAA;AAAA,mBACP;AAAA,kBACA;AAAA,oBACE,IAAM,EAAA,MAAA;AAAA,oBACN,IAAM,EAAA,GAAA;AAAA,oBACN,GAAK,EAAA,GAAA;AAAA,oBACL,OAAS,EAAA,KAAA;AAAA,mBACX;AAAA,iBACF,CAAA;AAAA,eACF;AAEA,cAAA,MAAM,QAAsB,EAAC,CAAA;AAC7B,cAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AACtC,gBAAQ,QAAA,MAAA,CAAO,GAAI,IAAM;AAAA,kBACvB,KAAK,OAAA,CAAA;AAAA,kBACL,KAAK,MAAA,CAAA;AAAA,kBACL,KAAK,YAAA,CAAA;AAAA,kBACL,KAAK,MAAA,CAAA;AAAA,kBACL,KAAK,SAAA,CAAA;AAAA,kBACL,KAAK,IAAA,CAAA;AAAA,kBACL,KAAK,MAAA,CAAA;AAAA,kBACL,KAAK,WAAA,CAAA;AAAA,kBACL,KAAK,OAAS,EAAA;AACZ,oBAAM,KAAA,CAAA,IAAA,CAAK,OAAO,CAAgB,CAAA,CAAA,CAAA;AAClC,oBAAA,MAAA;AAAA,mBACF;AAAA,kBACA,KAAK,MAAA,CAAA;AAAA,kBACL,KAAK,UAAY,EAAA;AACf,oBAAA,MAAM,KAQA,GAAA;AAAA,sBACJ,MAAO,CAAA,CAAA,CAAA;AAAA,qBAQT,CAAA;AACA,oBACE,OAAA,CAAA,GAAI,IAAI,MAAO,CAAA,MAAA,IACf,OAAO,CAAI,GAAA,CAAA,CAAA,CAAI,SAAS,MACxB,EAAA;AACA,sBAAA,CAAA,EAAA,CAAA;AACA,sBAAM,KAAA,CAAA,IAAA,CAAK,OAAO,CAAiB,CAAA,CAAA,CAAA;AAAA,qBACrC;AACA,oBAAA,KAAA,CAAM,IAAK,CAAA;AAAA,sBACT,IAAM,EAAA,WAAA;AAAA,sBACN,MAAQ,EAAA,KAAA;AAAA,sBACR,GAAA,EAAK,MAAM,GAAI,CAAA,CAAC,SAAS,IAAK,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA,sBAC1C,IAAA,EAAM,MAAM,GAAI,CAAA,CAAC,SAAS,IAAK,CAAA,IAAI,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA,qBAClB,CAAA,CAAA;AAC5B,oBAAA,MAAA;AAAA,mBACF;AAAA,kBACA,SAAS;AACP,oBAAA,SAAA;AAAA,mBACF;AAAA,iBACF;AAAA,eACF;AAEA,cAAA,uBACGD,cAAA,CAAA,IAAA,EAAA;AAAA,gBACE,QAAM,EAAA,KAAA,CAAA,GAAA,CAAI,CAACC,MAAAA,EAAOC,MAAU,KAAA;AAC3B,kBAAA,uBAAQF,cAAA,CAAA,cAAA,EAAA;AAAA,oBAAe,KAAOC,EAAAA,MAAAA;AAAA,mBAAA,EAAYC,MAAO,CAAA,CAAA;AAAA,iBAClD,CAAA;AAAA,eAAA,EAHM,KAIT,CAAA,CAAA;AAAA,aAEG,MAAA;AACL,cAAA,MAAM,SAAuB,EAAC,CAAA;AAC9B,cAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,IAAK,CAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AAC3C,gBAAQ,QAAA,IAAA,CAAK,MAAO,CAAA,CAAA,CAAA,CAAI,IAAM;AAAA,kBAC5B,KAAK,OAAA,CAAA;AAAA,kBACL,KAAK,MAAA,CAAA;AAAA,kBACL,KAAK,YAAA,CAAA;AAAA,kBACL,KAAK,MAAA,CAAA;AAAA,kBACL,KAAK,SAAA,CAAA;AAAA,kBACL,KAAK,IAAA,CAAA;AAAA,kBACL,KAAK,MAAA,CAAA;AAAA,kBACL,KAAK,WAAA,CAAA;AAAA,kBACL,KAAK,OAAS,EAAA;AACZ,oBAAO,MAAA,CAAA,IAAA,CAAK,IAAK,CAAA,MAAA,CAAO,CAAgB,CAAA,CAAA,CAAA;AACxC,oBAAA,MAAA;AAAA,mBACF;AAAA,kBACA,KAAK,MAAQ,EAAA;AACX,oBAAA,MAAM,KAAuB,GAAA;AAAA,sBAC3B,KAAK,MAAO,CAAA,CAAA,CAAA;AAAA,qBACd,CAAA;AACA,oBACE,OAAA,CAAA,GAAI,CAAI,GAAA,IAAA,CAAK,MAAO,CAAA,MAAA,IACpB,KAAK,MAAO,CAAA,CAAA,GAAI,CAAI,CAAA,CAAA,IAAA,KAAS,MAC7B,EAAA;AACA,sBAAA,CAAA,EAAA,CAAA;AACA,sBAAM,KAAA,CAAA,IAAA,CAAK,IAAK,CAAA,MAAA,CAAO,CAAiB,CAAA,CAAA,CAAA;AAAA,qBAC1C;AACA,oBAAA,MAAA,CAAO,IAAK,CAAA;AAAA,sBACV,IAAM,EAAA,WAAA;AAAA,sBACN,MAAQ,EAAA,KAAA;AAAA,sBACR,GAAA,EAAK,MAAM,GAAI,CAAA,CAAC,SAAS,IAAK,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA,sBAC1C,IAAA,EAAM,MAAM,GAAI,CAAA,CAAC,SAAS,IAAK,CAAA,IAAI,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA,qBAClB,CAAA,CAAA;AAC5B,oBAAA,MAAA;AAAA,mBACF;AAAA,kBACA,SAAS;AACP,oBAAA,SAAA;AAAA,mBACF;AAAA,iBACF;AAAA,eACF;AAEA,cAAA,uBACGF,cAAA,CAAA,IAAA,EAAA;AAAA,gBACE,QAAO,EAAA,MAAA,CAAA,GAAA,CAAI,CAACC,MAAAA,EAAOC,MAAU,KAAA;AAC5B,kBAAA,uBAAQF,cAAA,CAAA,cAAA,EAAA;AAAA,oBAAe,KAAOC,EAAAA,MAAAA;AAAA,mBAAA,EAAYC,MAAO,CAAA,CAAA;AAAA,iBAClD,CAAA;AAAA,eAAA,EAHM,KAIT,CAAA,CAAA;AAAA,aAEJ;AAAA,WACK,MAAA;AACL,YAAA,MAAM,QAAmB,IAAK,CAAA,MAAA,CAAO,GAAI,CAAA,CAACD,QAAOC,MAAU,KAAA;AACzD,cAAA,QAAQD,OAAM,IAAM;AAAA,gBAClB,KAAK,OAAA,CAAA;AAAA,gBACL,KAAK,MAAA,CAAA;AAAA,gBACL,KAAK,YAAA,CAAA;AAAA,gBACL,KAAK,MAAA,CAAA;AAAA,gBACL,KAAK,SAAA,CAAA;AAAA,gBACL,KAAK,IAAA,CAAA;AAAA,gBACL,KAAK,MAAA,CAAA;AAAA,gBACL,KAAK,WAAA,CAAA;AAAA,gBACL,KAAK,OAAS,EAAA;AACZ,kBAAA,uBACGD,cAAA,CAAA,cAAA,EAAA;AAAA,oBAAe,KAAOC,EAAAA,MAAAA;AAAA,mBAAA,EAA0BC,MAAO,CAAA,CAAA;AAAA,iBAE5D;AAAA,gBACA,KAAK,MAAQ,EAAA;AACX,kBAAA,uBACGF,cAAA,CAAA,eAAA,EAAA;AAAA,oBACC,KAAOC,EAAAA,MAAAA;AAAA,mBAAA,EACFC,MACP,CAAA,CAAA;AAAA,iBAEJ;AAAA,gBACA,SAAS;AACP,kBAAO,OAAA,IAAA,CAAA;AAAA,iBACT;AAAA,eACF;AAAA,aACD,CAAA,CAAA;AACD,YAAA,IAAI,KAAK,IAAM,EAAA;AACb,cAAA,uBACGC,eAAA,CAAA,IAAA,EAAA;AAAA,gBACC,QAAA,EAAA;AAAA,kCAACH,cAAA,CAAA,OAAA,EAAA;AAAA,oBAAM,IAAK,EAAA,UAAA;AAAA,oBAAW,QAAQ,EAAA,IAAA;AAAA,oBAAC,SAAS,IAAK,CAAA,OAAA;AAAA,mBAAS,CAAA;AAAA,kBAAG,GAAA;AAAA,kBACzD,KAAA;AAAA,iBAAA;AAAA,eAAA,EAFM,KAGT,CAAA,CAAA;AAAA,aAEG,MAAA;AACL,cAAA,uBAAQA,cAAA,CAAA,IAAA,EAAA;AAAA,gBAAgB,QAAA,EAAA,KAAA;AAAA,eAAA,EAAR,KAAc,CAAA,CAAA;AAAA,aAChC;AAAA,WACF;AAAA,SACD,CAAA;AAAA,OACH,CAAA,CAAA;AAAA,KAEJ;AAAA,IACA,KAAK,WAAa,EAAA;AAChB,MAAA,uBACGA,cAAA,CAAA,GAAA,EAAA;AAAA,QACE,gBAAM,MAAO,CAAA,GAAA,CAAI,CAACC,MAAAA,EAAO,0BACvBD,cAAA,CAAA,eAAA,EAAA;AAAA,UAA4B,KAAOC,EAAAA,MAAAA;AAAA,SAAA,EAAd,KAAoC,CAC3D,CAAA;AAAA,OACH,CAAA,CAAA;AAAA,KAEJ;AAAA,IACA,KAAK,OAAS,EAAA;AACZ,MAAA,uBACGE,eAAA,CAAA,OAAA,EAAA;AAAA,QACC,QAAA,EAAA;AAAA,0BAACH,cAAA,CAAA,OAAA,EAAA;AAAA,YACC,QAAC,kBAAAA,cAAA,CAAA,IAAA,EAAA;AAAA,cACE,QAAM,EAAA,KAAA,CAAA,MAAA,CAAO,GAAI,CAAA,CAAC,MAAM,KAAU,KAAA;AACjC,gBAAA,uBACGA,cAAA,CAAA,IAAA,EAAA;AAAA,kBAAe,KAAA,EAAO,KAAK,KAAS,IAAA,KAAA,CAAA;AAAA,kBAClC,eAAK,MAAO,CAAA,GAAA,CAAI,CAACC,MAAAA,EAAOC,2BACtBF,cAAA,CAAA,eAAA,EAAA;AAAA,oBAEC,KAAOC,EAAAA,MAAAA;AAAA,mBAAA,EADFC,MAEP,CACD,CAAA;AAAA,iBAAA,EANM,KAOT,CAAA,CAAA;AAAA,eAEH,CAAA;AAAA,aACH,CAAA;AAAA,WACF,CAAA;AAAA,0BACCF,cAAA,CAAA,OAAA,EAAA;AAAA,YACE,QAAM,EAAA,KAAA,CAAA,IAAA,CAAK,GAAI,CAAA,CAAC,KAAK,KAAU,KAAA;AAC9B,cAAA,uBACGA,cAAA,CAAA,IAAA,EAAA;AAAA,gBACE,QAAI,EAAA,GAAA,CAAA,GAAA,CAAI,CAAC,IAAA,EAAME,MAAU,KAAA;AACxB,kBAAA,uBACGF,cAAA,CAAA,IAAA,EAAA;AAAA,oBAAe,KAAA,EAAO,KAAK,KAAS,IAAA,KAAA,CAAA;AAAA,oBAClC,eAAK,MAAO,CAAA,GAAA,CAAI,CAACC,MAAAA,EAAOC,2BACtBF,cAAA,CAAA,eAAA,EAAA;AAAA,sBAEC,KAAOC,EAAAA,MAAAA;AAAA,qBAAA,EADFC,MAEP,CACD,CAAA;AAAA,mBAAA,EANMA,MAOT,CAAA,CAAA;AAAA,iBAEH,CAAA;AAAA,eAAA,EAZM,KAaT,CAAA,CAAA;AAAA,aAEH,CAAA;AAAA,WACH,CAAA;AAAA,SAAA;AAAA,OACF,CAAA,CAAA;AAAA,KAEJ;AAAA,GACF;AACF,CAAA;AAuBA,SAAS,eAAgB,CAAA;AAAA,EACvB,KAAA;AACF,CAEG,EAAA;AACD,EAAA,QAAQ,MAAM,IAAM;AAAA,IAClB,KAAK,QAAU,EAAA;AACb,MAAA,uBACGF,cAAA,CAAA,QAAA,EAAA;AAAA,QACE,gBAAM,MAAO,CAAA,GAAA,CAAI,CAACC,MAAAA,EAAO,0BACvBD,cAAA,CAAA,eAAA,EAAA;AAAA,UAA4B,KAAOC,EAAAA,MAAAA;AAAA,SAAA,EAAd,KAAoC,CAC3D,CAAA;AAAA,OACH,CAAA,CAAA;AAAA,KAEJ;AAAA,IACA,KAAK,IAAM,EAAA;AACT,MAAA,uBACGD,cAAA,CAAA,IAAA,EAAA;AAAA,QACE,gBAAM,MAAO,CAAA,GAAA,CAAI,CAACC,MAAAA,EAAO,0BACvBD,cAAA,CAAA,eAAA,EAAA;AAAA,UAA4B,KAAOC,EAAAA,MAAAA;AAAA,SAAA,EAAd,KAAoC,CAC3D,CAAA;AAAA,OACH,CAAA,CAAA;AAAA,KAEJ;AAAA,IACA,KAAK,UAAY,EAAA;AACf,MAAA,uBAAQD,cAAA,CAAA,MAAA,EAAA;AAAA,QAAM,QAAA,EAAA,iBAAA,CAAkB,MAAM,IAAI,CAAA;AAAA,OAAE,CAAA,CAAA;AAAA,KAC9C;AAAA,IACA,KAAK,IAAM,EAAA;AACT,MAAA,sCAAQ,IAAG,EAAA,EAAA,CAAA,CAAA;AAAA,KACb;AAAA,IACA,KAAK,KAAO,EAAA;AACV,MAAA,uBACGA,cAAA,CAAA,KAAA,EAAA;AAAA,QACE,gBAAM,MAAO,CAAA,GAAA,CAAI,CAACC,MAAAA,EAAO,0BACvBD,cAAA,CAAA,eAAA,EAAA;AAAA,UAA4B,KAAOC,EAAAA,MAAAA;AAAA,SAAA,EAAd,KAAoC,CAC3D,CAAA;AAAA,OACH,CAAA,CAAA;AAAA,KAEJ;AAAA,IACA,KAAK,MAAQ,EAAA;AACX,MAAI,IAAA,IAAA,CAAA;AACJ,MAAI,IAAA;AACF,QAAA,MAAM,GAAM,GAAA,IAAI,GAAI,CAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAC9B,QAAA,IAAI,GAAI,CAAA,QAAA,KAAa,OAAW,IAAA,GAAA,CAAI,aAAa,QAAU,EAAA;AACzD,UAAA,IAAA,GAAO,IAAI,QAAS,EAAA,CAAA;AAAA,SACf,MAAA;AACL,UAAO,IAAA,GAAA,IAAA,CAAA;AAAA,SACT;AAAA,OACA,CAAA,MAAA;AACA,QAAO,IAAA,GAAA,IAAA,CAAA;AAAA,OACT;AAEA,MAAA,IAAI,SAAS,IAAM,EAAA;AACjB,QAAA,OAAO,MAAM,MAAO,CAAA,GAAA,CAAI,CAACA,MAAAA,EAAO,0BAC7BD,cAAA,CAAA,eAAA,EAAA;AAAA,UAA4B,KAAOC,EAAAA,MAAAA;AAAA,SAAA,EAAd,KAAoC,CAC3D,CAAA,CAAA;AAAA,OACH;AAEA,MAAA,uBACGD,cAAA,CAAA,GAAA,EAAA;AAAA,QACC,IAAA;AAAA,QACA,KAAO,EAAA,KAAA,CAAM,KAAQ,GAAA,KAAA,CAAM,KAAQ,GAAA,KAAA,CAAA;AAAA,QACnC,MAAO,EAAA,QAAA;AAAA,QACP,GAAI,EAAA,qBAAA;AAAA,QAEH,gBAAM,MAAO,CAAA,GAAA,CAAI,CAACC,MAAAA,EAAO,0BACvBD,cAAA,CAAA,eAAA,EAAA;AAAA,UAA4B,KAAOC,EAAAA,MAAAA;AAAA,SAAA,EAAd,KAAoC,CAC3D,CAAA;AAAA,OACH,CAAA,CAAA;AAAA,KAEJ;AAAA,IACA,KAAK,OAAS,EAAA;AACZ,MAAI,IAAA,IAAA,CAAA;AACJ,MAAI,IAAA;AACF,QAAA,MAAM,GAAM,GAAA,IAAI,GAAI,CAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAC9B,QAAA,IAAI,GAAI,CAAA,QAAA,KAAa,OAAW,IAAA,GAAA,CAAI,aAAa,QAAU,EAAA;AACzD,UAAA,IAAA,GAAO,IAAI,QAAS,EAAA,CAAA;AAAA,SACf,MAAA;AACL,UAAO,IAAA,GAAA,IAAA,CAAA;AAAA,SACT;AAAA,OACA,CAAA,MAAA;AACA,QAAO,IAAA,GAAA,IAAA,CAAA;AAAA,OACT;AAEA,MAAA,IAAI,SAAS,IAAM,EAAA;AACjB,QAAA,OAAO,KAAM,CAAA,IAAA,CAAA;AAAA,OACf;AAEA,MAAA,uBACGD,cAAA,CAAA,KAAA,EAAA;AAAA,QAAI,GAAK,EAAA,IAAA;AAAA,QAAM,KAAK,KAAM,CAAA,IAAA;AAAA,QAAM,KAAA,EAAO,MAAM,KAAS,IAAA,KAAA,CAAA;AAAA,OAAW,CAAA,CAAA;AAAA,KAEtE;AAAA,IACA,KAAK,MAAQ,EAAA;AACX,MAAI,IAAA,KAAA,CAAM,WAAW,KAAW,CAAA,EAAA;AAC9B,QAAA,OAAO,MAAM,MAAO,CAAA,GAAA,CAAI,CAACC,MAAAA,EAAO,0BAC7BD,cAAA,CAAA,eAAA,EAAA;AAAA,UAA4B,KAAOC,EAAAA,MAAAA;AAAA,SAAA,EAAd,KAAoC,CAC3D,CAAA,CAAA;AAAA,OACI,MAAA;AACL,QAAO,OAAA,iBAAA,CAAkB,MAAM,IAAI,CAAA,CAAA;AAAA,OACrC;AAAA,KACF;AAAA,IACA,KAAK,QAAU,EAAA;AACb,MAAA,OAAO,KAAM,CAAA,IAAA,CAAA;AAAA,KACf;AAAA,IACA,KAAK,UAAY,EAAA;AACf,MAAA,uBAAQD,cAAA,CAAA,OAAA,EAAA;AAAA,QAAM,IAAK,EAAA,UAAA;AAAA,QAAW,QAAQ,EAAA,IAAA;AAAA,QAAC,SAAS,KAAM,CAAA,OAAA;AAAA,OAAS,CAAA,CAAA;AAAA,KACjE;AAAA,IACA,SAAS;AACP,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAAA,GACF;AACF,CAAA;AAEO,SAAS,kBAAkB,KAAe,EAAA;AAC/C,EAAM,MAAA,QAAA,GAAW,IAAI,SAAA,EAAY,CAAA,eAAA;AAAA,IAC/B,CAAwB,qBAAA,EAAA,KAAA,CAAA,CAAA;AAAA,IACxB,WAAA;AAAA,GACF,CAAA;AAEA,EAAA,OAAO,SAAS,IAAK,CAAA,WAAA,CAAA;AACvB;;;;;;"}
|
|
1
|
+
{"version":3,"file":"Markdown.cjs","sources":["../../../src/primitives/internal/Markdown.tsx"],"sourcesContent":["import { Lexer, type Tokens } from \"marked\";\nimport {\n type ComponentPropsWithoutRef,\n type ComponentType,\n type ReactNode,\n useMemo,\n} from \"react\";\n\n// TODO: Expose all Markdown tags in a holistic way\n// (e.g. instead of `h1`, `h2`, etc, maybe `Heading` with a `level` prop? Maybe not every inline components should be exposed?)\nexport type MarkdownComponents = {\n CodeBlock: ComponentType<{ language: string | null; code: string }>;\n Anchor: ComponentType<ComponentPropsWithoutRef<\"a\">> | \"a\";\n};\n\nexport type MarkdownProps = {\n content: string;\n\n /** @private */\n components?: Partial<MarkdownComponents>;\n};\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 Anchor: \"a\",\n};\n\nexport function Markdown({ content, components }: MarkdownProps) {\n const tokens = useMemo(() => {\n return new Lexer().lex(content);\n }, [content]);\n\n return tokens.map((token, index) => {\n return (\n <BlockTokenComp\n token={token as BlockToken}\n key={index}\n components={components}\n />\n );\n });\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\nexport function BlockTokenComp({\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 | null = null;\n if (token.lang !== undefined) {\n language = token.lang.match(/^\\S*/)?.[0] ?? null;\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 return (\n <blockquote>\n {tokens.map((token, index) => {\n return (\n <BlockTokenComp\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 let HeadingTag: \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\";\n switch (token.depth) {\n case 1:\n HeadingTag = \"h1\";\n break;\n case 2:\n HeadingTag = \"h2\";\n break;\n case 3:\n HeadingTag = \"h3\";\n break;\n case 4:\n HeadingTag = \"h4\";\n break;\n case 5:\n HeadingTag = \"h5\";\n break;\n case 6:\n HeadingTag = \"h6\";\n break;\n default:\n HeadingTag = \"h1\";\n break;\n }\n return (\n <HeadingTag>\n {token.tokens.map((token, index) => (\n <InlineTokenComp\n key={index}\n token={token as InlineToken}\n components={components}\n />\n ))}\n </HeadingTag>\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 <BlockTokenComp\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 <BlockTokenComp\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 <BlockTokenComp\n token={token as BlockToken}\n key={index}\n components={components}\n />\n );\n }\n case \"text\": {\n return (\n <InlineTokenComp\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 <InlineTokenComp\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 <InlineTokenComp\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 <InlineTokenComp\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\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;\nfunction InlineTokenComp({\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 <InlineTokenComp\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 <InlineTokenComp\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 <InlineTokenComp\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 <InlineTokenComp\n key={index}\n token={token as InlineToken}\n components={components}\n />\n ));\n }\n\n const Anchor = components?.Anchor ?? defaultComponents.Anchor;\n\n return (\n <Anchor\n href={href}\n title={token.title ? token.title : undefined}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {token.tokens.map((token, index) => (\n <InlineTokenComp\n key={index}\n token={token as InlineToken}\n components={components}\n />\n ))}\n </Anchor>\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 return (\n <img 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 <InlineTokenComp\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\nexport function 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"],"names":["jsx","useMemo","Lexer","token","index","jsxs"],"mappings":";;;;;;AAsBA,MAAM,iBAAwC,GAAA;AAAA,EAC5C,SAAW,EAAA,CAAC,EAAE,QAAA,EAAU,MAAW,KAAA;AACjC,IAAA,uBACGA,cAAA,CAAA,KAAA,EAAA;AAAA,MAAI,iBAAe,QAAY,IAAA,KAAA,CAAA;AAAA,MAC9B,QAAC,kBAAAA,cAAA,CAAA,MAAA,EAAA;AAAA,QAAM,QAAA,EAAA,IAAA;AAAA,OAAK,CAAA;AAAA,KACd,CAAA,CAAA;AAAA,GAEJ;AAAA,EACA,MAAQ,EAAA,GAAA;AACV,CAAA,CAAA;AAEO,SAAS,QAAS,CAAA,EAAE,OAAS,EAAA,UAAA,EAA6B,EAAA;AAC/D,EAAM,MAAA,MAAA,GAASC,cAAQ,MAAM;AAC3B,IAAA,OAAO,IAAIC,YAAA,EAAQ,CAAA,GAAA,CAAI,OAAO,CAAA,CAAA;AAAA,GAChC,EAAG,CAAC,OAAO,CAAC,CAAA,CAAA;AAEZ,EAAA,OAAO,MAAO,CAAA,GAAA,CAAI,CAAC,KAAA,EAAO,KAAU,KAAA;AAClC,IAAA,uBACGF,cAAA,CAAA,cAAA,EAAA;AAAA,MACC,KAAA;AAAA,MAEA,UAAA;AAAA,KAAA,EADK,KAEP,CAAA,CAAA;AAAA,GAEH,CAAA,CAAA;AACH,CAAA;AAyBO,SAAS,cAAe,CAAA;AAAA,EAC7B,KAAA;AAAA,EACA,UAAA;AACF,CAGG,EAAA;AACD,EAAA,QAAQ,MAAM,IAAM;AAAA,IAClB,KAAK,OAAS,EAAA;AACZ,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAAA,IACA,KAAK,MAAQ,EAAA;AACX,MAAA,IAAI,QAA0B,GAAA,IAAA,CAAA;AAC9B,MAAI,IAAA,KAAA,CAAM,SAAS,KAAW,CAAA,EAAA;AAC5B,QAAA,QAAA,GAAW,KAAM,CAAA,IAAA,CAAK,KAAM,CAAA,MAAM,IAAI,CAAM,CAAA,IAAA,IAAA,CAAA;AAAA,OAC9C;AAEA,MAAM,MAAA,SAAA,GAAY,UAAY,EAAA,SAAA,IAAa,iBAAkB,CAAA,SAAA,CAAA;AAE7D,MAAA,uBAAQA,cAAA,CAAA,SAAA,EAAA;AAAA,QAAU,QAAA;AAAA,QAAoB,MAAM,KAAM,CAAA,IAAA;AAAA,OAAM,CAAA,CAAA;AAAA,KAC1D;AAAA,IACA,KAAK,YAAc,EAAA;AACjB,MAAA,MAAM,SAAuB,EAAC,CAAA;AAC9B,MAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,KAAM,CAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AAC5C,QAAQ,QAAA,KAAA,CAAM,MAAO,CAAA,CAAA,CAAA,CAAI,IAAM;AAAA,UAC7B,KAAK,OAAA,CAAA;AAAA,UACL,KAAK,MAAA,CAAA;AAAA,UACL,KAAK,YAAA,CAAA;AAAA,UACL,KAAK,MAAA,CAAA;AAAA,UACL,KAAK,SAAA,CAAA;AAAA,UACL,KAAK,IAAA,CAAA;AAAA,UACL,KAAK,MAAA,CAAA;AAAA,UACL,KAAK,WAAA,CAAA;AAAA,UACL,KAAK,OAAS,EAAA;AACZ,YAAO,MAAA,CAAA,IAAA,CAAK,KAAM,CAAA,MAAA,CAAO,CAAgB,CAAA,CAAA,CAAA;AACzC,YAAA,MAAA;AAAA,WACF;AAAA,UACA,KAAK,MAAQ,EAAA;AACX,YAAA,MAAM,KAAuB,GAAA,CAAC,KAAM,CAAA,MAAA,CAAO,CAAiB,CAAA,CAAA,CAAA;AAC5D,YACE,OAAA,CAAA,GAAI,CAAI,GAAA,KAAA,CAAM,MAAO,CAAA,MAAA,IACrB,MAAM,MAAO,CAAA,CAAA,GAAI,CAAI,CAAA,CAAA,IAAA,KAAS,MAC9B,EAAA;AACA,cAAA,CAAA,EAAA,CAAA;AACA,cAAM,KAAA,CAAA,IAAA,CAAK,KAAM,CAAA,MAAA,CAAO,CAAiB,CAAA,CAAA,CAAA;AAAA,aAC3C;AACA,YAAA,MAAA,CAAO,IAAK,CAAA;AAAA,cACV,IAAM,EAAA,WAAA;AAAA,cACN,MAAQ,EAAA,KAAA;AAAA,cACR,GAAA,EAAK,MAAM,GAAI,CAAA,CAAC,SAAS,IAAK,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA,cAC1C,IAAA,EAAM,MAAM,GAAI,CAAA,CAAC,SAAS,IAAK,CAAA,IAAI,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA,aAClB,CAAA,CAAA;AAC5B,YAAA,MAAA;AAAA,WACF;AAAA,UACA,SAAS;AACP,YAAA,SAAA;AAAA,WACF;AAAA,SACF;AAAA,OACF;AAEA,MAAA,uBACGA,cAAA,CAAA,YAAA,EAAA;AAAA,QACE,QAAO,EAAA,MAAA,CAAA,GAAA,CAAI,CAACG,MAAAA,EAAO,KAAU,KAAA;AAC5B,UAAA,uBACGH,cAAA,CAAA,cAAA,EAAA;AAAA,YACC,KAAOG,EAAAA,MAAAA;AAAA,YAEP,UAAA;AAAA,WAAA,EADK,KAEP,CAAA,CAAA;AAAA,SAEH,CAAA;AAAA,OACH,CAAA,CAAA;AAAA,KAEJ;AAAA,IACA,KAAK,MAAQ,EAAA;AACX,MAAA,OAAO,KAAM,CAAA,IAAA,CAAA;AAAA,KACf;AAAA,IACA,KAAK,SAAW,EAAA;AACd,MAAI,IAAA,UAAA,CAAA;AACJ,MAAA,QAAQ,MAAM,KAAO;AAAA,QACnB,KAAK,CAAA;AACH,UAAa,UAAA,GAAA,IAAA,CAAA;AACb,UAAA,MAAA;AAAA,QACF,KAAK,CAAA;AACH,UAAa,UAAA,GAAA,IAAA,CAAA;AACb,UAAA,MAAA;AAAA,QACF,KAAK,CAAA;AACH,UAAa,UAAA,GAAA,IAAA,CAAA;AACb,UAAA,MAAA;AAAA,QACF,KAAK,CAAA;AACH,UAAa,UAAA,GAAA,IAAA,CAAA;AACb,UAAA,MAAA;AAAA,QACF,KAAK,CAAA;AACH,UAAa,UAAA,GAAA,IAAA,CAAA;AACb,UAAA,MAAA;AAAA,QACF,KAAK,CAAA;AACH,UAAa,UAAA,GAAA,IAAA,CAAA;AACb,UAAA,MAAA;AAAA,QACF;AACE,UAAa,UAAA,GAAA,IAAA,CAAA;AACb,UAAA,MAAA;AAAA,OACJ;AACA,MAAA,uBACGH,cAAA,CAAA,UAAA,EAAA;AAAA,QACE,gBAAM,MAAO,CAAA,GAAA,CAAI,CAACG,MAAAA,EAAO,0BACvBH,cAAA,CAAA,eAAA,EAAA;AAAA,UAEC,KAAOG,EAAAA,MAAAA;AAAA,UACP,UAAA;AAAA,SAAA,EAFK,KAGP,CACD,CAAA;AAAA,OACH,CAAA,CAAA;AAAA,KAEJ;AAAA,IACA,KAAK,IAAM,EAAA;AACT,MAAA,sCAAQ,IAAG,EAAA,EAAA,CAAA,CAAA;AAAA,KACb;AAAA,IACA,KAAK,MAAQ,EAAA;AACX,MAAM,MAAA,OAAA,GAAU,KAAM,CAAA,OAAA,GAAU,IAAO,GAAA,IAAA,CAAA;AAEvC,MAAA,uBACGH,cAAA,CAAA,OAAA,EAAA;AAAA,QACE,QAAM,EAAA,KAAA,CAAA,KAAA,CAAM,GAAI,CAAA,CAAC,MAAM,KAAU,KAAA;AAEhC,UAAA,IAAI,KAAK,KAAO,EAAA;AAEd,YAAA,IAAI,KAAK,IAAM,EAAA;AACb,cAAA,MAAM,MAAS,GAAA,CAAC,GAAG,IAAA,CAAK,MAAM,CAAA,CAAA;AAC9B,cAAI,IAAA,MAAA,CAAO,CAAI,CAAA,EAAA,IAAA,KAAS,WAAa,EAAA;AACnC,gBAAA,MAAMG,SAAQ,MAAO,CAAA,CAAA,CAAA,CAAA;AACrB,gBAAAA,OAAM,MAAO,CAAA,OAAA;AAAA,kBACX;AAAA,oBACE,IAAM,EAAA,UAAA;AAAA,oBACN,SAAS,IAAK,CAAA,OAAA;AAAA,oBACd,GAAK,EAAA,EAAA;AAAA,mBACP;AAAA,kBACA;AAAA,oBACE,IAAM,EAAA,MAAA;AAAA,oBACN,IAAM,EAAA,GAAA;AAAA,oBACN,GAAK,EAAA,GAAA;AAAA,oBACL,OAAS,EAAA,KAAA;AAAA,mBACX;AAAA,iBACF,CAAA;AAAA,eACK,MAAA;AACL,gBAAO,MAAA,CAAA,OAAA;AAAA,kBACL;AAAA,oBACE,IAAM,EAAA,UAAA;AAAA,oBACN,SAAS,IAAK,CAAA,OAAA;AAAA,oBACd,GAAK,EAAA,EAAA;AAAA,mBACP;AAAA,kBACA;AAAA,oBACE,IAAM,EAAA,MAAA;AAAA,oBACN,IAAM,EAAA,GAAA;AAAA,oBACN,GAAK,EAAA,GAAA;AAAA,oBACL,OAAS,EAAA,KAAA;AAAA,mBACX;AAAA,iBACF,CAAA;AAAA,eACF;AAEA,cAAA,MAAM,QAAsB,EAAC,CAAA;AAC7B,cAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AACtC,gBAAQ,QAAA,MAAA,CAAO,GAAI,IAAM;AAAA,kBACvB,KAAK,OAAA,CAAA;AAAA,kBACL,KAAK,MAAA,CAAA;AAAA,kBACL,KAAK,YAAA,CAAA;AAAA,kBACL,KAAK,MAAA,CAAA;AAAA,kBACL,KAAK,SAAA,CAAA;AAAA,kBACL,KAAK,IAAA,CAAA;AAAA,kBACL,KAAK,MAAA,CAAA;AAAA,kBACL,KAAK,WAAA,CAAA;AAAA,kBACL,KAAK,OAAS,EAAA;AACZ,oBAAM,KAAA,CAAA,IAAA,CAAK,OAAO,CAAgB,CAAA,CAAA,CAAA;AAClC,oBAAA,MAAA;AAAA,mBACF;AAAA,kBACA,KAAK,MAAA,CAAA;AAAA,kBACL,KAAK,UAAY,EAAA;AACf,oBAAA,MAAM,KAQA,GAAA;AAAA,sBACJ,MAAO,CAAA,CAAA,CAAA;AAAA,qBAQT,CAAA;AACA,oBACE,OAAA,CAAA,GAAI,IAAI,MAAO,CAAA,MAAA,IACf,OAAO,CAAI,GAAA,CAAA,CAAA,CAAI,SAAS,MACxB,EAAA;AACA,sBAAA,CAAA,EAAA,CAAA;AACA,sBAAM,KAAA,CAAA,IAAA,CAAK,OAAO,CAAiB,CAAA,CAAA,CAAA;AAAA,qBACrC;AACA,oBAAA,KAAA,CAAM,IAAK,CAAA;AAAA,sBACT,IAAM,EAAA,WAAA;AAAA,sBACN,MAAQ,EAAA,KAAA;AAAA,sBACR,GAAA,EAAK,MAAM,GAAI,CAAA,CAAC,SAAS,IAAK,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA,sBAC1C,IAAA,EAAM,MAAM,GAAI,CAAA,CAAC,SAAS,IAAK,CAAA,IAAI,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA,qBAClB,CAAA,CAAA;AAC5B,oBAAA,MAAA;AAAA,mBACF;AAAA,kBACA,SAAS;AACP,oBAAA,SAAA;AAAA,mBACF;AAAA,iBACF;AAAA,eACF;AAEA,cAAA,uBACGH,cAAA,CAAA,IAAA,EAAA;AAAA,gBACE,QAAM,EAAA,KAAA,CAAA,GAAA,CAAI,CAACG,MAAAA,EAAOC,MAAU,KAAA;AAC3B,kBAAA,uBACGJ,cAAA,CAAA,cAAA,EAAA;AAAA,oBACC,KAAOG,EAAAA,MAAAA;AAAA,oBAEP,UAAA;AAAA,mBAAA,EADKC,MAEP,CAAA,CAAA;AAAA,iBAEH,CAAA;AAAA,eAAA,EATM,KAUT,CAAA,CAAA;AAAA,aAEG,MAAA;AACL,cAAA,MAAM,SAAuB,EAAC,CAAA;AAC9B,cAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,IAAK,CAAA,MAAA,CAAO,QAAQ,CAAK,EAAA,EAAA;AAC3C,gBAAQ,QAAA,IAAA,CAAK,MAAO,CAAA,CAAA,CAAA,CAAI,IAAM;AAAA,kBAC5B,KAAK,OAAA,CAAA;AAAA,kBACL,KAAK,MAAA,CAAA;AAAA,kBACL,KAAK,YAAA,CAAA;AAAA,kBACL,KAAK,MAAA,CAAA;AAAA,kBACL,KAAK,SAAA,CAAA;AAAA,kBACL,KAAK,IAAA,CAAA;AAAA,kBACL,KAAK,MAAA,CAAA;AAAA,kBACL,KAAK,WAAA,CAAA;AAAA,kBACL,KAAK,OAAS,EAAA;AACZ,oBAAO,MAAA,CAAA,IAAA,CAAK,IAAK,CAAA,MAAA,CAAO,CAAgB,CAAA,CAAA,CAAA;AACxC,oBAAA,MAAA;AAAA,mBACF;AAAA,kBACA,KAAK,MAAQ,EAAA;AACX,oBAAA,MAAM,KAAuB,GAAA;AAAA,sBAC3B,KAAK,MAAO,CAAA,CAAA,CAAA;AAAA,qBACd,CAAA;AACA,oBACE,OAAA,CAAA,GAAI,CAAI,GAAA,IAAA,CAAK,MAAO,CAAA,MAAA,IACpB,KAAK,MAAO,CAAA,CAAA,GAAI,CAAI,CAAA,CAAA,IAAA,KAAS,MAC7B,EAAA;AACA,sBAAA,CAAA,EAAA,CAAA;AACA,sBAAM,KAAA,CAAA,IAAA,CAAK,IAAK,CAAA,MAAA,CAAO,CAAiB,CAAA,CAAA,CAAA;AAAA,qBAC1C;AACA,oBAAA,MAAA,CAAO,IAAK,CAAA;AAAA,sBACV,IAAM,EAAA,WAAA;AAAA,sBACN,MAAQ,EAAA,KAAA;AAAA,sBACR,GAAA,EAAK,MAAM,GAAI,CAAA,CAAC,SAAS,IAAK,CAAA,GAAG,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA,sBAC1C,IAAA,EAAM,MAAM,GAAI,CAAA,CAAC,SAAS,IAAK,CAAA,IAAI,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA;AAAA,qBAClB,CAAA,CAAA;AAC5B,oBAAA,MAAA;AAAA,mBACF;AAAA,kBACA,SAAS;AACP,oBAAA,SAAA;AAAA,mBACF;AAAA,iBACF;AAAA,eACF;AAEA,cAAA,uBACGJ,cAAA,CAAA,IAAA,EAAA;AAAA,gBACE,QAAO,EAAA,MAAA,CAAA,GAAA,CAAI,CAACG,MAAAA,EAAOC,MAAU,KAAA;AAC5B,kBAAA,uBACGJ,cAAA,CAAA,cAAA,EAAA;AAAA,oBACC,KAAOG,EAAAA,MAAAA;AAAA,oBAEP,UAAA;AAAA,mBAAA,EADKC,MAEP,CAAA,CAAA;AAAA,iBAEH,CAAA;AAAA,eAAA,EATM,KAUT,CAAA,CAAA;AAAA,aAEJ;AAAA,WACK,MAAA;AACL,YAAA,MAAM,QAAmB,IAAK,CAAA,MAAA,CAAO,GAAI,CAAA,CAACD,QAAOC,MAAU,KAAA;AACzD,cAAA,QAAQD,OAAM,IAAM;AAAA,gBAClB,KAAK,OAAA,CAAA;AAAA,gBACL,KAAK,MAAA,CAAA;AAAA,gBACL,KAAK,YAAA,CAAA;AAAA,gBACL,KAAK,MAAA,CAAA;AAAA,gBACL,KAAK,SAAA,CAAA;AAAA,gBACL,KAAK,IAAA,CAAA;AAAA,gBACL,KAAK,MAAA,CAAA;AAAA,gBACL,KAAK,WAAA,CAAA;AAAA,gBACL,KAAK,OAAS,EAAA;AACZ,kBAAA,uBACGH,cAAA,CAAA,cAAA,EAAA;AAAA,oBACC,KAAOG,EAAAA,MAAAA;AAAA,oBAEP,UAAA;AAAA,mBAAA,EADKC,MAEP,CAAA,CAAA;AAAA,iBAEJ;AAAA,gBACA,KAAK,MAAQ,EAAA;AACX,kBAAA,uBACGJ,cAAA,CAAA,eAAA,EAAA;AAAA,oBACC,KAAOG,EAAAA,MAAAA;AAAA,oBAEP,UAAA;AAAA,mBAAA,EADKC,MAEP,CAAA,CAAA;AAAA,iBAEJ;AAAA,gBACA,SAAS;AACP,kBAAO,OAAA,IAAA,CAAA;AAAA,iBACT;AAAA,eACF;AAAA,aACD,CAAA,CAAA;AACD,YAAA,IAAI,KAAK,IAAM,EAAA;AACb,cAAA,uBACGC,eAAA,CAAA,IAAA,EAAA;AAAA,gBACC,QAAA,EAAA;AAAA,kCAACL,cAAA,CAAA,OAAA,EAAA;AAAA,oBAAM,IAAK,EAAA,UAAA;AAAA,oBAAW,QAAQ,EAAA,IAAA;AAAA,oBAAC,SAAS,IAAK,CAAA,OAAA;AAAA,mBAAS,CAAA;AAAA,kBAAG,GAAA;AAAA,kBACzD,KAAA;AAAA,iBAAA;AAAA,eAAA,EAFM,KAGT,CAAA,CAAA;AAAA,aAEG,MAAA;AACL,cAAA,uBAAQA,cAAA,CAAA,IAAA,EAAA;AAAA,gBAAgB,QAAA,EAAA,KAAA;AAAA,eAAA,EAAR,KAAc,CAAA,CAAA;AAAA,aAChC;AAAA,WACF;AAAA,SACD,CAAA;AAAA,OACH,CAAA,CAAA;AAAA,KAEJ;AAAA,IACA,KAAK,WAAa,EAAA;AAChB,MAAA,uBACGA,cAAA,CAAA,GAAA,EAAA;AAAA,QACE,gBAAM,MAAO,CAAA,GAAA,CAAI,CAACG,MAAAA,EAAO,0BACvBH,cAAA,CAAA,eAAA,EAAA;AAAA,UAEC,KAAOG,EAAAA,MAAAA;AAAA,UACP,UAAA;AAAA,SAAA,EAFK,KAGP,CACD,CAAA;AAAA,OACH,CAAA,CAAA;AAAA,KAEJ;AAAA,IACA,KAAK,OAAS,EAAA;AACZ,MAAA,uBACGE,eAAA,CAAA,OAAA,EAAA;AAAA,QACC,QAAA,EAAA;AAAA,0BAACL,cAAA,CAAA,OAAA,EAAA;AAAA,YACC,QAAC,kBAAAA,cAAA,CAAA,IAAA,EAAA;AAAA,cACE,QAAM,EAAA,KAAA,CAAA,MAAA,CAAO,GAAI,CAAA,CAAC,MAAM,KAAU,KAAA;AACjC,gBAAA,uBACGA,cAAA,CAAA,IAAA,EAAA;AAAA,kBAAe,KAAA,EAAO,KAAK,KAAS,IAAA,KAAA,CAAA;AAAA,kBAClC,eAAK,MAAO,CAAA,GAAA,CAAI,CAACG,MAAAA,EAAOC,2BACtBJ,cAAA,CAAA,eAAA,EAAA;AAAA,oBAEC,KAAOG,EAAAA,MAAAA;AAAA,oBACP,UAAA;AAAA,mBAAA,EAFKC,MAGP,CACD,CAAA;AAAA,iBAAA,EAPM,KAQT,CAAA,CAAA;AAAA,eAEH,CAAA;AAAA,aACH,CAAA;AAAA,WACF,CAAA;AAAA,0BACCJ,cAAA,CAAA,OAAA,EAAA;AAAA,YACE,QAAM,EAAA,KAAA,CAAA,IAAA,CAAK,GAAI,CAAA,CAAC,KAAK,KAAU,KAAA;AAC9B,cAAA,uBACGA,cAAA,CAAA,IAAA,EAAA;AAAA,gBACE,QAAI,EAAA,GAAA,CAAA,GAAA,CAAI,CAAC,IAAA,EAAMI,MAAU,KAAA;AACxB,kBAAA,uBACGJ,cAAA,CAAA,IAAA,EAAA;AAAA,oBAAe,KAAA,EAAO,KAAK,KAAS,IAAA,KAAA,CAAA;AAAA,oBAClC,eAAK,MAAO,CAAA,GAAA,CAAI,CAACG,MAAAA,EAAOC,2BACtBJ,cAAA,CAAA,eAAA,EAAA;AAAA,sBAEC,KAAOG,EAAAA,MAAAA;AAAA,sBACP,UAAA;AAAA,qBAAA,EAFKC,MAGP,CACD,CAAA;AAAA,mBAAA,EAPMA,MAQT,CAAA,CAAA;AAAA,iBAEH,CAAA;AAAA,eAAA,EAbM,KAcT,CAAA,CAAA;AAAA,aAEH,CAAA;AAAA,WACH,CAAA;AAAA,SAAA;AAAA,OACF,CAAA,CAAA;AAAA,KAEJ;AAAA,GACF;AACF,CAAA;AAuBA,SAAS,eAAgB,CAAA;AAAA,EACvB,KAAA;AAAA,EACA,UAAA;AACF,CAGG,EAAA;AACD,EAAA,QAAQ,MAAM,IAAM;AAAA,IAClB,KAAK,QAAU,EAAA;AACb,MAAA,uBACGJ,cAAA,CAAA,QAAA,EAAA;AAAA,QACE,gBAAM,MAAO,CAAA,GAAA,CAAI,CAACG,MAAAA,EAAO,0BACvBH,cAAA,CAAA,eAAA,EAAA;AAAA,UAEC,KAAOG,EAAAA,MAAAA;AAAA,UACP,UAAA;AAAA,SAAA,EAFK,KAGP,CACD,CAAA;AAAA,OACH,CAAA,CAAA;AAAA,KAEJ;AAAA,IACA,KAAK,IAAM,EAAA;AACT,MAAA,uBACGH,cAAA,CAAA,IAAA,EAAA;AAAA,QACE,gBAAM,MAAO,CAAA,GAAA,CAAI,CAACG,MAAAA,EAAO,0BACvBH,cAAA,CAAA,eAAA,EAAA;AAAA,UAEC,KAAOG,EAAAA,MAAAA;AAAA,UACP,UAAA;AAAA,SAAA,EAFK,KAGP,CACD,CAAA;AAAA,OACH,CAAA,CAAA;AAAA,KAEJ;AAAA,IACA,KAAK,UAAY,EAAA;AACf,MAAA,uBAAQH,cAAA,CAAA,MAAA,EAAA;AAAA,QAAM,QAAA,EAAA,iBAAA,CAAkB,MAAM,IAAI,CAAA;AAAA,OAAE,CAAA,CAAA;AAAA,KAC9C;AAAA,IACA,KAAK,IAAM,EAAA;AACT,MAAA,sCAAQ,IAAG,EAAA,EAAA,CAAA,CAAA;AAAA,KACb;AAAA,IACA,KAAK,KAAO,EAAA;AACV,MAAA,uBACGA,cAAA,CAAA,KAAA,EAAA;AAAA,QACE,gBAAM,MAAO,CAAA,GAAA,CAAI,CAACG,MAAAA,EAAO,0BACvBH,cAAA,CAAA,eAAA,EAAA;AAAA,UAEC,KAAOG,EAAAA,MAAAA;AAAA,UACP,UAAA;AAAA,SAAA,EAFK,KAGP,CACD,CAAA;AAAA,OACH,CAAA,CAAA;AAAA,KAEJ;AAAA,IACA,KAAK,MAAQ,EAAA;AACX,MAAI,IAAA,IAAA,CAAA;AACJ,MAAI,IAAA;AACF,QAAA,MAAM,GAAM,GAAA,IAAI,GAAI,CAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAC9B,QAAA,IAAI,GAAI,CAAA,QAAA,KAAa,OAAW,IAAA,GAAA,CAAI,aAAa,QAAU,EAAA;AACzD,UAAA,IAAA,GAAO,IAAI,QAAS,EAAA,CAAA;AAAA,SACf,MAAA;AACL,UAAO,IAAA,GAAA,IAAA,CAAA;AAAA,SACT;AAAA,OACA,CAAA,MAAA;AACA,QAAO,IAAA,GAAA,IAAA,CAAA;AAAA,OACT;AAEA,MAAA,IAAI,SAAS,IAAM,EAAA;AACjB,QAAA,OAAO,MAAM,MAAO,CAAA,GAAA,CAAI,CAACA,MAAAA,EAAO,0BAC7BH,cAAA,CAAA,eAAA,EAAA;AAAA,UAEC,KAAOG,EAAAA,MAAAA;AAAA,UACP,UAAA;AAAA,SAAA,EAFK,KAGP,CACD,CAAA,CAAA;AAAA,OACH;AAEA,MAAM,MAAA,MAAA,GAAS,UAAY,EAAA,MAAA,IAAU,iBAAkB,CAAA,MAAA,CAAA;AAEvD,MAAA,uBACGH,cAAA,CAAA,MAAA,EAAA;AAAA,QACC,IAAA;AAAA,QACA,KAAO,EAAA,KAAA,CAAM,KAAQ,GAAA,KAAA,CAAM,KAAQ,GAAA,KAAA,CAAA;AAAA,QACnC,MAAO,EAAA,QAAA;AAAA,QACP,GAAI,EAAA,qBAAA;AAAA,QAEH,gBAAM,MAAO,CAAA,GAAA,CAAI,CAACG,MAAAA,EAAO,0BACvBH,cAAA,CAAA,eAAA,EAAA;AAAA,UAEC,KAAOG,EAAAA,MAAAA;AAAA,UACP,UAAA;AAAA,SAAA,EAFK,KAGP,CACD,CAAA;AAAA,OACH,CAAA,CAAA;AAAA,KAEJ;AAAA,IACA,KAAK,OAAS,EAAA;AACZ,MAAI,IAAA,IAAA,CAAA;AACJ,MAAI,IAAA;AACF,QAAA,MAAM,GAAM,GAAA,IAAI,GAAI,CAAA,KAAA,CAAM,IAAI,CAAA,CAAA;AAC9B,QAAA,IAAI,GAAI,CAAA,QAAA,KAAa,OAAW,IAAA,GAAA,CAAI,aAAa,QAAU,EAAA;AACzD,UAAA,IAAA,GAAO,IAAI,QAAS,EAAA,CAAA;AAAA,SACf,MAAA;AACL,UAAO,IAAA,GAAA,IAAA,CAAA;AAAA,SACT;AAAA,OACA,CAAA,MAAA;AACA,QAAO,IAAA,GAAA,IAAA,CAAA;AAAA,OACT;AAEA,MAAA,IAAI,SAAS,IAAM,EAAA;AACjB,QAAA,OAAO,KAAM,CAAA,IAAA,CAAA;AAAA,OACf;AAEA,MAAA,uBACGH,cAAA,CAAA,KAAA,EAAA;AAAA,QAAI,GAAK,EAAA,IAAA;AAAA,QAAM,KAAK,KAAM,CAAA,IAAA;AAAA,QAAM,KAAA,EAAO,MAAM,KAAS,IAAA,KAAA,CAAA;AAAA,OAAW,CAAA,CAAA;AAAA,KAEtE;AAAA,IACA,KAAK,MAAQ,EAAA;AACX,MAAI,IAAA,KAAA,CAAM,WAAW,KAAW,CAAA,EAAA;AAC9B,QAAA,OAAO,MAAM,MAAO,CAAA,GAAA,CAAI,CAACG,MAAAA,EAAO,0BAC7BH,cAAA,CAAA,eAAA,EAAA;AAAA,UAEC,KAAOG,EAAAA,MAAAA;AAAA,UACP,UAAA;AAAA,SAAA,EAFK,KAGP,CACD,CAAA,CAAA;AAAA,OACI,MAAA;AACL,QAAO,OAAA,iBAAA,CAAkB,MAAM,IAAI,CAAA,CAAA;AAAA,OACrC;AAAA,KACF;AAAA,IACA,KAAK,QAAU,EAAA;AACb,MAAA,OAAO,KAAM,CAAA,IAAA,CAAA;AAAA,KACf;AAAA,IACA,KAAK,UAAY,EAAA;AACf,MAAA,uBAAQH,cAAA,CAAA,OAAA,EAAA;AAAA,QAAM,IAAK,EAAA,UAAA;AAAA,QAAW,QAAQ,EAAA,IAAA;AAAA,QAAC,SAAS,KAAM,CAAA,OAAA;AAAA,OAAS,CAAA,CAAA;AAAA,KACjE;AAAA,IACA,SAAS;AACP,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAAA,GACF;AACF,CAAA;AAEO,SAAS,kBAAkB,KAAe,EAAA;AAC/C,EAAM,MAAA,QAAA,GAAW,IAAI,SAAA,EAAY,CAAA,eAAA;AAAA,IAC/B,CAAwB,qBAAA,EAAA,KAAA,CAAA,CAAA;AAAA,IACxB,WAAA;AAAA,GACF,CAAA;AAEA,EAAA,OAAO,SAAS,IAAK,CAAA,WAAA,CAAA;AACvB;;;;;;"}
|
|
@@ -2,17 +2,32 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
2
2
|
import { Lexer } from 'marked';
|
|
3
3
|
import { useMemo } from 'react';
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
const defaultComponents = {
|
|
6
|
+
CodeBlock: ({ language, code }) => {
|
|
7
|
+
return /* @__PURE__ */ jsx("pre", {
|
|
8
|
+
"data-language": language ?? void 0,
|
|
9
|
+
children: /* @__PURE__ */ jsx("code", {
|
|
10
|
+
children: code
|
|
11
|
+
})
|
|
12
|
+
});
|
|
13
|
+
},
|
|
14
|
+
Anchor: "a"
|
|
15
|
+
};
|
|
16
|
+
function Markdown({ content, components }) {
|
|
6
17
|
const tokens = useMemo(() => {
|
|
7
18
|
return new Lexer().lex(content);
|
|
8
19
|
}, [content]);
|
|
9
20
|
return tokens.map((token, index) => {
|
|
10
21
|
return /* @__PURE__ */ jsx(BlockTokenComp, {
|
|
11
|
-
token
|
|
22
|
+
token,
|
|
23
|
+
components
|
|
12
24
|
}, index);
|
|
13
25
|
});
|
|
14
26
|
}
|
|
15
|
-
function BlockTokenComp({
|
|
27
|
+
function BlockTokenComp({
|
|
28
|
+
token,
|
|
29
|
+
components
|
|
30
|
+
}) {
|
|
16
31
|
switch (token.type) {
|
|
17
32
|
case "space": {
|
|
18
33
|
return null;
|
|
@@ -22,11 +37,10 @@ function BlockTokenComp({ token }) {
|
|
|
22
37
|
if (token.lang !== void 0) {
|
|
23
38
|
language = token.lang.match(/^\S*/)?.[0] ?? null;
|
|
24
39
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
})
|
|
40
|
+
const CodeBlock = components?.CodeBlock ?? defaultComponents.CodeBlock;
|
|
41
|
+
return /* @__PURE__ */ jsx(CodeBlock, {
|
|
42
|
+
language,
|
|
43
|
+
code: token.text
|
|
30
44
|
});
|
|
31
45
|
}
|
|
32
46
|
case "blockquote": {
|
|
@@ -67,7 +81,8 @@ function BlockTokenComp({ token }) {
|
|
|
67
81
|
return /* @__PURE__ */ jsx("blockquote", {
|
|
68
82
|
children: tokens.map((token2, index) => {
|
|
69
83
|
return /* @__PURE__ */ jsx(BlockTokenComp, {
|
|
70
|
-
token: token2
|
|
84
|
+
token: token2,
|
|
85
|
+
components
|
|
71
86
|
}, index);
|
|
72
87
|
})
|
|
73
88
|
});
|
|
@@ -102,7 +117,8 @@ function BlockTokenComp({ token }) {
|
|
|
102
117
|
}
|
|
103
118
|
return /* @__PURE__ */ jsx(HeadingTag, {
|
|
104
119
|
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(InlineTokenComp, {
|
|
105
|
-
token: token2
|
|
120
|
+
token: token2,
|
|
121
|
+
components
|
|
106
122
|
}, index))
|
|
107
123
|
});
|
|
108
124
|
}
|
|
@@ -186,7 +202,8 @@ function BlockTokenComp({ token }) {
|
|
|
186
202
|
return /* @__PURE__ */ jsx("li", {
|
|
187
203
|
children: items.map((token2, index2) => {
|
|
188
204
|
return /* @__PURE__ */ jsx(BlockTokenComp, {
|
|
189
|
-
token: token2
|
|
205
|
+
token: token2,
|
|
206
|
+
components
|
|
190
207
|
}, index2);
|
|
191
208
|
})
|
|
192
209
|
}, index);
|
|
@@ -230,7 +247,8 @@ function BlockTokenComp({ token }) {
|
|
|
230
247
|
return /* @__PURE__ */ jsx("li", {
|
|
231
248
|
children: tokens.map((token2, index2) => {
|
|
232
249
|
return /* @__PURE__ */ jsx(BlockTokenComp, {
|
|
233
|
-
token: token2
|
|
250
|
+
token: token2,
|
|
251
|
+
components
|
|
234
252
|
}, index2);
|
|
235
253
|
})
|
|
236
254
|
}, index);
|
|
@@ -248,12 +266,14 @@ function BlockTokenComp({ token }) {
|
|
|
248
266
|
case "paragraph":
|
|
249
267
|
case "table": {
|
|
250
268
|
return /* @__PURE__ */ jsx(BlockTokenComp, {
|
|
251
|
-
token: token2
|
|
269
|
+
token: token2,
|
|
270
|
+
components
|
|
252
271
|
}, index2);
|
|
253
272
|
}
|
|
254
273
|
case "text": {
|
|
255
274
|
return /* @__PURE__ */ jsx(InlineTokenComp, {
|
|
256
|
-
token: token2
|
|
275
|
+
token: token2,
|
|
276
|
+
components
|
|
257
277
|
}, index2);
|
|
258
278
|
}
|
|
259
279
|
default: {
|
|
@@ -285,7 +305,8 @@ function BlockTokenComp({ token }) {
|
|
|
285
305
|
case "paragraph": {
|
|
286
306
|
return /* @__PURE__ */ jsx("p", {
|
|
287
307
|
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(InlineTokenComp, {
|
|
288
|
-
token: token2
|
|
308
|
+
token: token2,
|
|
309
|
+
components
|
|
289
310
|
}, index))
|
|
290
311
|
});
|
|
291
312
|
}
|
|
@@ -298,7 +319,8 @@ function BlockTokenComp({ token }) {
|
|
|
298
319
|
return /* @__PURE__ */ jsx("th", {
|
|
299
320
|
align: cell.align ?? void 0,
|
|
300
321
|
children: cell.tokens.map((token2, index2) => /* @__PURE__ */ jsx(InlineTokenComp, {
|
|
301
|
-
token: token2
|
|
322
|
+
token: token2,
|
|
323
|
+
components
|
|
302
324
|
}, index2))
|
|
303
325
|
}, index);
|
|
304
326
|
})
|
|
@@ -311,7 +333,8 @@ function BlockTokenComp({ token }) {
|
|
|
311
333
|
return /* @__PURE__ */ jsx("td", {
|
|
312
334
|
align: cell.align ?? void 0,
|
|
313
335
|
children: cell.tokens.map((token2, index3) => /* @__PURE__ */ jsx(InlineTokenComp, {
|
|
314
|
-
token: token2
|
|
336
|
+
token: token2,
|
|
337
|
+
components
|
|
315
338
|
}, index3))
|
|
316
339
|
}, index2);
|
|
317
340
|
})
|
|
@@ -324,20 +347,23 @@ function BlockTokenComp({ token }) {
|
|
|
324
347
|
}
|
|
325
348
|
}
|
|
326
349
|
function InlineTokenComp({
|
|
327
|
-
token
|
|
350
|
+
token,
|
|
351
|
+
components
|
|
328
352
|
}) {
|
|
329
353
|
switch (token.type) {
|
|
330
354
|
case "strong": {
|
|
331
355
|
return /* @__PURE__ */ jsx("strong", {
|
|
332
356
|
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(InlineTokenComp, {
|
|
333
|
-
token: token2
|
|
357
|
+
token: token2,
|
|
358
|
+
components
|
|
334
359
|
}, index))
|
|
335
360
|
});
|
|
336
361
|
}
|
|
337
362
|
case "em": {
|
|
338
363
|
return /* @__PURE__ */ jsx("em", {
|
|
339
364
|
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(InlineTokenComp, {
|
|
340
|
-
token: token2
|
|
365
|
+
token: token2,
|
|
366
|
+
components
|
|
341
367
|
}, index))
|
|
342
368
|
});
|
|
343
369
|
}
|
|
@@ -352,7 +378,8 @@ function InlineTokenComp({
|
|
|
352
378
|
case "del": {
|
|
353
379
|
return /* @__PURE__ */ jsx("del", {
|
|
354
380
|
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(InlineTokenComp, {
|
|
355
|
-
token: token2
|
|
381
|
+
token: token2,
|
|
382
|
+
components
|
|
356
383
|
}, index))
|
|
357
384
|
});
|
|
358
385
|
}
|
|
@@ -370,16 +397,19 @@ function InlineTokenComp({
|
|
|
370
397
|
}
|
|
371
398
|
if (href === null) {
|
|
372
399
|
return token.tokens.map((token2, index) => /* @__PURE__ */ jsx(InlineTokenComp, {
|
|
373
|
-
token: token2
|
|
400
|
+
token: token2,
|
|
401
|
+
components
|
|
374
402
|
}, index));
|
|
375
403
|
}
|
|
376
|
-
|
|
404
|
+
const Anchor = components?.Anchor ?? defaultComponents.Anchor;
|
|
405
|
+
return /* @__PURE__ */ jsx(Anchor, {
|
|
377
406
|
href,
|
|
378
407
|
title: token.title ? token.title : void 0,
|
|
379
408
|
target: "_blank",
|
|
380
409
|
rel: "noopener noreferrer",
|
|
381
410
|
children: token.tokens.map((token2, index) => /* @__PURE__ */ jsx(InlineTokenComp, {
|
|
382
|
-
token: token2
|
|
411
|
+
token: token2,
|
|
412
|
+
components
|
|
383
413
|
}, index))
|
|
384
414
|
});
|
|
385
415
|
}
|
|
@@ -407,7 +437,8 @@ function InlineTokenComp({
|
|
|
407
437
|
case "text": {
|
|
408
438
|
if (token.tokens !== void 0) {
|
|
409
439
|
return token.tokens.map((token2, index) => /* @__PURE__ */ jsx(InlineTokenComp, {
|
|
410
|
-
token: token2
|
|
440
|
+
token: token2,
|
|
441
|
+
components
|
|
411
442
|
}, index));
|
|
412
443
|
} else {
|
|
413
444
|
return parseHtmlEntities(token.text);
|