@skitter/assistant_md 1.0.0-alpha.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.
- package/.parcel-cache/20b6e48fcf1b612f +0 -0
- package/.parcel-cache/b6694c1eefd2b32c +0 -0
- package/.parcel-cache/c0e87891cd14f32b.txt +4512 -0
- package/.parcel-cache/cbf39635cd1b2434 +0 -0
- package/.parcel-cache/data.mdb +0 -0
- package/.parcel-cache/ffdc629ccf572e1f +0 -0
- package/.parcel-cache/lock.mdb +0 -0
- package/dist/assistant_md.d.ts +60 -0
- package/dist/assistant_md.d.ts.map +1 -0
- package/dist/assistant_md.js +181 -0
- package/dist/assistant_md.js.map +1 -0
- package/package.json +28 -0
- package/src/assistant_md.tsx +289 -0
- package/src/backup.tsx +278 -0
- package/src/sol-1.tsx +363 -0
- package/tsconfig.json +104 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export function parseUrlAndString(str: string): {
|
|
2
|
+
type: string;
|
|
3
|
+
value: string;
|
|
4
|
+
}[];
|
|
5
|
+
type NormalText = {
|
|
6
|
+
normal_text: string;
|
|
7
|
+
markdown_text: "normal_text";
|
|
8
|
+
};
|
|
9
|
+
type MdValueContainer = {
|
|
10
|
+
value: MdText;
|
|
11
|
+
};
|
|
12
|
+
type BoldText = {
|
|
13
|
+
bold: MdValueContainer;
|
|
14
|
+
markdown_text: "bold";
|
|
15
|
+
};
|
|
16
|
+
type ItalicText = {
|
|
17
|
+
italic: MdValueContainer;
|
|
18
|
+
markdown_text: "italic";
|
|
19
|
+
};
|
|
20
|
+
type UnderlineText = {
|
|
21
|
+
underline: MdValueContainer;
|
|
22
|
+
markdown_text: "underline";
|
|
23
|
+
};
|
|
24
|
+
type HyperLinkContainer = {
|
|
25
|
+
link: string;
|
|
26
|
+
value: MdText;
|
|
27
|
+
};
|
|
28
|
+
type HyperLinkText = {
|
|
29
|
+
hyperlink: HyperLinkContainer;
|
|
30
|
+
markdown_text: "hyperlink";
|
|
31
|
+
};
|
|
32
|
+
type MdList = {
|
|
33
|
+
list: MdText[];
|
|
34
|
+
};
|
|
35
|
+
type OrdredListText = {
|
|
36
|
+
ordered_list: MdList;
|
|
37
|
+
markdown_text: "ordered_list";
|
|
38
|
+
};
|
|
39
|
+
type UnOrdredListText = {
|
|
40
|
+
unordered_list: MdList;
|
|
41
|
+
markdown_text: "unordered_list";
|
|
42
|
+
};
|
|
43
|
+
type NewlineText = {
|
|
44
|
+
markdown_text: "newline";
|
|
45
|
+
};
|
|
46
|
+
type JoinMdContainer = {
|
|
47
|
+
lhs: MdText;
|
|
48
|
+
rhs: MdText;
|
|
49
|
+
};
|
|
50
|
+
type JoinMdText = {
|
|
51
|
+
join: JoinMdContainer;
|
|
52
|
+
markdown_text: "join";
|
|
53
|
+
};
|
|
54
|
+
type MdText = NormalText | BoldText | ItalicText | UnderlineText | HyperLinkText | OrdredListText | UnOrdredListText | JoinMdText | NewlineText;
|
|
55
|
+
type MdTextProp = {
|
|
56
|
+
mdText: MdText;
|
|
57
|
+
};
|
|
58
|
+
export default function AssistantMd({ mdText }: MdTextProp): JSX.Element;
|
|
59
|
+
|
|
60
|
+
//# sourceMappingURL=assistant_md.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"AAeA,kCAAkC,GAAG,EAAE,MAAM;;;IA2B5C;AAiDD,kBAAkB;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,wBAAwB;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1C,gBAAgB;IACd,IAAI,EAAE,gBAAgB,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,kBAAkB;IAChB,MAAM,EAAE,gBAAgB,CAAC;IACzB,aAAa,EAAE,QAAQ,CAAC;CACzB,CAAC;AAEF,qBAAqB;IACnB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,aAAa,EAAE,WAAW,CAAC;CAC5B,CAAC;AAEF,0BAA0B;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,qBAAqB;IACnB,SAAS,EAAE,kBAAkB,CAAC;IAC9B,aAAa,EAAE,WAAW,CAAC;CAC5B,CAAC;AAEF,cAAc;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAAC;AAEF,sBAAsB;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,cAAc,CAAC;CAC/B,CAAC;AAEF,wBAAwB;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,gBAAgB,CAAC;CACjC,CAAC;AAEF,mBAAmB;IACjB,aAAa,EAAE,SAAS,CAAC;CAC1B,CAAC;AAEF,uBAAuB;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,kBAAkB;IAChB,IAAI,EAAE,eAAe,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,cACI,UAAU,GACV,QAAQ,GACR,UAAU,GACV,aAAa,GACb,aAAa,GACb,cAAc,GACd,gBAAgB,GAChB,UAAU,GACV,WAAW,CAAC;AAEhB,kBAAkB;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AA8ErC,oCAAoC,EAAE,MAAM,EAAE,EAAE,UAAU,eAgDzD","sources":["src/src/assistant_md.tsx","src/assistant_md.tsx"],"sourcesContent":[null,"import React from \"react\";\n\nconst URL_REGEX =\n /[(http(s)?):\\/\\/(www\\.)?a-zA-Z0-9@:%._\\+~#=-]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/;\n\nconst normalStr = (str: string) => ({\n type: \"normal_str\",\n value: str,\n});\n\nconst urlStr = (str: string) => ({\n type: \"url\",\n value: str,\n});\n\nexport function parseUrlAndString(str: string) {\n const results = [];\n let remaining = str;\n while (remaining) {\n let match = remaining.match(URL_REGEX);\n if (!match) {\n results.push(normalStr(remaining));\n break;\n }\n\n if (match.index !== 0) {\n results.push(normalStr(remaining.slice(0, match.index)));\n results.push(\n urlStr(\n remaining.slice(\n match.index,\n match.index && match.index + match[0].length\n )\n )\n );\n remaining = remaining.slice(match.index && match.index + match[0].length);\n continue;\n }\n results.push(urlStr(remaining.slice(0, match[0].length)));\n remaining = remaining.slice(match[0].length);\n }\n return results;\n}\n\nconst DisplayLineBreaks = ({ text }: { text: string }) => {\n let texts = text.split(\"\\n\");\n let lastOne = texts[texts.length - 1];\n let exceptLastOne = texts.slice(0, texts.length - 1);\n return (\n <>\n {exceptLastOne.reduce(\n (arr: (string | JSX.Element)[], text) => [\n ...arr,\n text,\n <br key={arr.length} />,\n ],\n []\n )}\n {lastOne}\n </>\n );\n};\n\nconst DisplayURL = ({ text }: { text: string }) => {\n const parsed = parseUrlAndString(text);\n return (\n <>\n {parsed.map(({ type, value }, i) =>\n type === \"url\" ? (\n <a href={value} target=\"_blank\" key={i} rel=\"noreferrer\">\n {value}\n </a>\n ) : (\n <DisplayLineBreaks text={value} key={i}></DisplayLineBreaks>\n )\n )}\n </>\n );\n};\n\ntype MdTypes =\n | \"normal_text\"\n | \"bold\"\n | \"italic\"\n | \"underline\"\n | \"hyperlink\"\n | \"ordered_list\"\n | \"unordered_list\"\n | \"newline\"\n | \"join\";\n\ntype NormalText = {\n normal_text: string;\n markdown_text: \"normal_text\";\n};\n\ntype MdValueContainer = { value: MdText };\n\ntype BoldText = {\n bold: MdValueContainer;\n markdown_text: \"bold\";\n};\n\ntype ItalicText = {\n italic: MdValueContainer;\n markdown_text: \"italic\";\n};\n\ntype UnderlineText = {\n underline: MdValueContainer;\n markdown_text: \"underline\";\n};\n\ntype HyperLinkContainer = {\n link: string;\n value: MdText;\n};\n\ntype HyperLinkText = {\n hyperlink: HyperLinkContainer;\n markdown_text: \"hyperlink\";\n};\n\ntype MdList = {\n list: MdText[];\n};\n\ntype OrdredListText = {\n ordered_list: MdList;\n markdown_text: \"ordered_list\";\n};\n\ntype UnOrdredListText = {\n unordered_list: MdList;\n markdown_text: \"unordered_list\";\n};\n\ntype NewlineText = {\n markdown_text: \"newline\";\n};\n\ntype JoinMdContainer = {\n lhs: MdText;\n rhs: MdText;\n};\n\ntype JoinMdText = {\n join: JoinMdContainer;\n markdown_text: \"join\";\n};\n\ntype MdText =\n | NormalText\n | BoldText\n | ItalicText\n | UnderlineText\n | HyperLinkText\n | OrdredListText\n | UnOrdredListText\n | JoinMdText\n | NewlineText;\n\ntype MdTextProp = { mdText: MdText };\n\ntype NormalRenderes = React.FunctionComponent<{ mdText: MdValueContainer }>;\n\ntype ListRenderers = React.FunctionComponent<{ mdText: MdList }>;\n\ntype TextRenderer = React.FunctionComponent<{ mdText: string }>;\n\ntype JoinMdRenderer = React.FunctionComponent<{ mdText: JoinMdContainer }>;\n\ntype HyperLinkRenderer = React.FunctionComponent<{\n mdText: HyperLinkContainer;\n}>;\n\nconst normalWrapper: (TagName: React.ElementType) => NormalRenderes =\n (TagName: React.ElementType) =>\n ({ mdText }) =>\n (\n <TagName>\n <AssistantMd mdText={mdText.value} />\n </TagName>\n );\n\nconst listWrapper: (TagName: React.ElementType) => ListRenderers =\n (TagName) =>\n ({ mdText: { list } }) =>\n (\n <TagName>\n {list.map((mdText) => (\n <li>\n <AssistantMd mdText={mdText} />\n </li>\n ))}\n </TagName>\n );\n\ntype RenderTypes = MdTypes;\n\ntype MdRenderers =\n | NormalRenderes\n | ListRenderers\n | TextRenderer\n | HyperLinkRenderer\n | JoinMdRenderer;\n\n// type RenderMap = Record<RenderTypes, MdRenderers>;\n\nconst NormalTextMd: TextRenderer = ({ mdText }) => {\n return <DisplayURL text={mdText} />;\n};\n\nconst HyperLinkMd: HyperLinkRenderer = ({ mdText }) => (\n <a href={mdText.link}>\n <AssistantMd mdText={mdText.value} />\n </a>\n);\n\nconst JoinMd: JoinMdRenderer = ({ mdText: { lhs, rhs } }) => (\n <>\n <AssistantMd mdText={lhs} />\n <AssistantMd mdText={rhs} />\n </>\n);\n\nconst mdTypeRenderers = {\n normal_text: NormalTextMd,\n bold: normalWrapper(\"strong\"),\n italic: normalWrapper(\"em\"),\n underline: normalWrapper(\"u\"),\n hyperlink: HyperLinkMd,\n ordered_list: listWrapper(\"ol\"),\n unordered_list: listWrapper(\"ul\"),\n newline: () => <br />,\n join: JoinMd,\n};\n\nfunction exhaustiveCheck(param: never) {}\n\nexport default function AssistantMd({ mdText }: MdTextProp) {\n switch (mdText.markdown_text) {\n case \"bold\": {\n let RendenMDElement = mdTypeRenderers[mdText.markdown_text];\n let container = mdText[mdText.markdown_text];\n return <RendenMDElement mdText={container} />;\n }\n case \"italic\": {\n let RendenMDElement = mdTypeRenderers[mdText.markdown_text];\n let container = mdText[mdText.markdown_text];\n return <RendenMDElement mdText={container} />;\n }\n case \"normal_text\": {\n let RendenMDElement = mdTypeRenderers[mdText.markdown_text];\n let container = mdText[mdText.markdown_text];\n return <RendenMDElement mdText={container} />;\n }\n case \"underline\": {\n let RendenMDElement = mdTypeRenderers[mdText.markdown_text];\n let container = mdText[mdText.markdown_text];\n return <RendenMDElement mdText={container} />;\n }\n case \"hyperlink\": {\n let RendenMDElement = mdTypeRenderers[mdText.markdown_text];\n let container = mdText[mdText.markdown_text];\n return <RendenMDElement mdText={container} />;\n }\n case \"ordered_list\": {\n let RendenMDElement = mdTypeRenderers[mdText.markdown_text];\n let container = mdText[mdText.markdown_text];\n return <RendenMDElement mdText={container} />;\n }\n case \"unordered_list\": {\n let RendenMDElement = mdTypeRenderers[mdText.markdown_text];\n let container = mdText[mdText.markdown_text];\n return <RendenMDElement mdText={container} />;\n }\n case \"join\": {\n let RendenMDElement = mdTypeRenderers[mdText.markdown_text];\n let container = mdText[mdText.markdown_text];\n return <RendenMDElement mdText={container} />;\n }\n case \"newline\": {\n let RendenMDElement = mdTypeRenderers[mdText.markdown_text];\n return <RendenMDElement />;\n }\n }\n exhaustiveCheck(mdText);\n}\n"],"names":[],"version":3,"file":"assistant_md.d.ts.map"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
var $kmRvl$react = require("react");
|
|
2
|
+
|
|
3
|
+
function $parcel$interopDefault(a) {
|
|
4
|
+
return a && a.__esModule ? a.default : a;
|
|
5
|
+
}
|
|
6
|
+
function $parcel$defineInteropFlag(a) {
|
|
7
|
+
Object.defineProperty(a, '__esModule', {value: true, configurable: true});
|
|
8
|
+
}
|
|
9
|
+
function $parcel$export(e, n, v, s) {
|
|
10
|
+
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
$parcel$defineInteropFlag(module.exports);
|
|
14
|
+
|
|
15
|
+
$parcel$export(module.exports, "parseUrlAndString", () => $69304f3cd9aa4f81$export$41849f4004f0a2a6);
|
|
16
|
+
$parcel$export(module.exports, "default", () => $69304f3cd9aa4f81$export$2e2bcd8739ae039);
|
|
17
|
+
|
|
18
|
+
const $69304f3cd9aa4f81$var$URL_REGEX = /[(http(s)?):\/\/(www\.)?a-zA-Z0-9@:%._\+~#=-]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/;
|
|
19
|
+
const $69304f3cd9aa4f81$var$normalStr = (str)=>({
|
|
20
|
+
type: "normal_str",
|
|
21
|
+
value: str
|
|
22
|
+
});
|
|
23
|
+
const $69304f3cd9aa4f81$var$urlStr = (str)=>({
|
|
24
|
+
type: "url",
|
|
25
|
+
value: str
|
|
26
|
+
});
|
|
27
|
+
function $69304f3cd9aa4f81$export$41849f4004f0a2a6(str) {
|
|
28
|
+
const results = [];
|
|
29
|
+
let remaining = str;
|
|
30
|
+
while(remaining){
|
|
31
|
+
let match = remaining.match($69304f3cd9aa4f81$var$URL_REGEX);
|
|
32
|
+
if (!match) {
|
|
33
|
+
results.push($69304f3cd9aa4f81$var$normalStr(remaining));
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
if (match.index !== 0) {
|
|
37
|
+
results.push($69304f3cd9aa4f81$var$normalStr(remaining.slice(0, match.index)));
|
|
38
|
+
results.push($69304f3cd9aa4f81$var$urlStr(remaining.slice(match.index, match.index && match.index + match[0].length)));
|
|
39
|
+
remaining = remaining.slice(match.index && match.index + match[0].length);
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
results.push($69304f3cd9aa4f81$var$urlStr(remaining.slice(0, match[0].length)));
|
|
43
|
+
remaining = remaining.slice(match[0].length);
|
|
44
|
+
}
|
|
45
|
+
return results;
|
|
46
|
+
}
|
|
47
|
+
const $69304f3cd9aa4f81$var$DisplayLineBreaks = ({ text: text1 })=>{
|
|
48
|
+
let texts = text1.split("\n");
|
|
49
|
+
let lastOne = texts[texts.length - 1];
|
|
50
|
+
let exceptLastOne = texts.slice(0, texts.length - 1);
|
|
51
|
+
return /*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement((0, ($parcel$interopDefault($kmRvl$react))).Fragment, null, exceptLastOne.reduce((arr, text)=>[
|
|
52
|
+
...arr,
|
|
53
|
+
text,
|
|
54
|
+
/*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement("br", {
|
|
55
|
+
key: arr.length
|
|
56
|
+
}),
|
|
57
|
+
], []), lastOne);
|
|
58
|
+
};
|
|
59
|
+
const $69304f3cd9aa4f81$var$DisplayURL = ({ text: text })=>{
|
|
60
|
+
const parsed = $69304f3cd9aa4f81$export$41849f4004f0a2a6(text);
|
|
61
|
+
return /*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement((0, ($parcel$interopDefault($kmRvl$react))).Fragment, null, parsed.map(({ type: type , value: value }, i)=>type === "url" ? /*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement("a", {
|
|
62
|
+
href: value,
|
|
63
|
+
target: "_blank",
|
|
64
|
+
key: i,
|
|
65
|
+
rel: "noreferrer"
|
|
66
|
+
}, value) : /*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement($69304f3cd9aa4f81$var$DisplayLineBreaks, {
|
|
67
|
+
text: value,
|
|
68
|
+
key: i
|
|
69
|
+
})));
|
|
70
|
+
};
|
|
71
|
+
const $69304f3cd9aa4f81$var$normalWrapper = (TagName)=>({ mdText: mdText })=>/*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement(TagName, null, /*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement($69304f3cd9aa4f81$export$2e2bcd8739ae039, {
|
|
72
|
+
mdText: mdText.value
|
|
73
|
+
}));
|
|
74
|
+
const $69304f3cd9aa4f81$var$listWrapper = (TagName)=>({ mdText: { list: list } })=>/*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement(TagName, null, list.map((mdText)=>/*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement("li", null, /*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement($69304f3cd9aa4f81$export$2e2bcd8739ae039, {
|
|
75
|
+
mdText: mdText
|
|
76
|
+
}))));
|
|
77
|
+
// type RenderMap = Record<RenderTypes, MdRenderers>;
|
|
78
|
+
const $69304f3cd9aa4f81$var$NormalTextMd = ({ mdText: mdText })=>{
|
|
79
|
+
return /*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement($69304f3cd9aa4f81$var$DisplayURL, {
|
|
80
|
+
text: mdText
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
const $69304f3cd9aa4f81$var$HyperLinkMd = ({ mdText: mdText })=>/*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement("a", {
|
|
84
|
+
href: mdText.link
|
|
85
|
+
}, /*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement($69304f3cd9aa4f81$export$2e2bcd8739ae039, {
|
|
86
|
+
mdText: mdText.value
|
|
87
|
+
}));
|
|
88
|
+
const $69304f3cd9aa4f81$var$JoinMd = ({ mdText: { lhs: lhs , rhs: rhs } })=>/*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement((0, ($parcel$interopDefault($kmRvl$react))).Fragment, null, /*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement($69304f3cd9aa4f81$export$2e2bcd8739ae039, {
|
|
89
|
+
mdText: lhs
|
|
90
|
+
}), /*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement($69304f3cd9aa4f81$export$2e2bcd8739ae039, {
|
|
91
|
+
mdText: rhs
|
|
92
|
+
}));
|
|
93
|
+
const $69304f3cd9aa4f81$var$mdTypeRenderers = {
|
|
94
|
+
normal_text: $69304f3cd9aa4f81$var$NormalTextMd,
|
|
95
|
+
bold: $69304f3cd9aa4f81$var$normalWrapper("strong"),
|
|
96
|
+
italic: $69304f3cd9aa4f81$var$normalWrapper("em"),
|
|
97
|
+
underline: $69304f3cd9aa4f81$var$normalWrapper("u"),
|
|
98
|
+
hyperlink: $69304f3cd9aa4f81$var$HyperLinkMd,
|
|
99
|
+
ordered_list: $69304f3cd9aa4f81$var$listWrapper("ol"),
|
|
100
|
+
unordered_list: $69304f3cd9aa4f81$var$listWrapper("ul"),
|
|
101
|
+
newline: ()=>/*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement("br", null),
|
|
102
|
+
join: $69304f3cd9aa4f81$var$JoinMd
|
|
103
|
+
};
|
|
104
|
+
function $69304f3cd9aa4f81$var$exhaustiveCheck(param) {}
|
|
105
|
+
function $69304f3cd9aa4f81$export$2e2bcd8739ae039({ mdText: mdText }) {
|
|
106
|
+
switch(mdText.markdown_text){
|
|
107
|
+
case "bold":
|
|
108
|
+
{
|
|
109
|
+
let RendenMDElement = $69304f3cd9aa4f81$var$mdTypeRenderers[mdText.markdown_text];
|
|
110
|
+
let container = mdText[mdText.markdown_text];
|
|
111
|
+
return /*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement(RendenMDElement, {
|
|
112
|
+
mdText: container
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
case "italic":
|
|
116
|
+
{
|
|
117
|
+
let RendenMDElement = $69304f3cd9aa4f81$var$mdTypeRenderers[mdText.markdown_text];
|
|
118
|
+
let container = mdText[mdText.markdown_text];
|
|
119
|
+
return /*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement(RendenMDElement, {
|
|
120
|
+
mdText: container
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
case "normal_text":
|
|
124
|
+
{
|
|
125
|
+
let RendenMDElement = $69304f3cd9aa4f81$var$mdTypeRenderers[mdText.markdown_text];
|
|
126
|
+
let container = mdText[mdText.markdown_text];
|
|
127
|
+
return /*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement(RendenMDElement, {
|
|
128
|
+
mdText: container
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
case "underline":
|
|
132
|
+
{
|
|
133
|
+
let RendenMDElement = $69304f3cd9aa4f81$var$mdTypeRenderers[mdText.markdown_text];
|
|
134
|
+
let container = mdText[mdText.markdown_text];
|
|
135
|
+
return /*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement(RendenMDElement, {
|
|
136
|
+
mdText: container
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
case "hyperlink":
|
|
140
|
+
{
|
|
141
|
+
let RendenMDElement = $69304f3cd9aa4f81$var$mdTypeRenderers[mdText.markdown_text];
|
|
142
|
+
let container = mdText[mdText.markdown_text];
|
|
143
|
+
return /*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement(RendenMDElement, {
|
|
144
|
+
mdText: container
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
case "ordered_list":
|
|
148
|
+
{
|
|
149
|
+
let RendenMDElement = $69304f3cd9aa4f81$var$mdTypeRenderers[mdText.markdown_text];
|
|
150
|
+
let container = mdText[mdText.markdown_text];
|
|
151
|
+
return /*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement(RendenMDElement, {
|
|
152
|
+
mdText: container
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
case "unordered_list":
|
|
156
|
+
{
|
|
157
|
+
let RendenMDElement = $69304f3cd9aa4f81$var$mdTypeRenderers[mdText.markdown_text];
|
|
158
|
+
let container = mdText[mdText.markdown_text];
|
|
159
|
+
return /*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement(RendenMDElement, {
|
|
160
|
+
mdText: container
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
case "join":
|
|
164
|
+
{
|
|
165
|
+
let RendenMDElement = $69304f3cd9aa4f81$var$mdTypeRenderers[mdText.markdown_text];
|
|
166
|
+
let container = mdText[mdText.markdown_text];
|
|
167
|
+
return /*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement(RendenMDElement, {
|
|
168
|
+
mdText: container
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
case "newline":
|
|
172
|
+
{
|
|
173
|
+
let RendenMDElement = $69304f3cd9aa4f81$var$mdTypeRenderers[mdText.markdown_text];
|
|
174
|
+
return /*#__PURE__*/ (0, ($parcel$interopDefault($kmRvl$react))).createElement(RendenMDElement, null);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
$69304f3cd9aa4f81$var$exhaustiveCheck(mdText);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
//# sourceMappingURL=assistant_md.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","sources":["src/assistant_md.tsx"],"sourcesContent":["import React from \"react\";\n\nconst URL_REGEX =\n /[(http(s)?):\\/\\/(www\\.)?a-zA-Z0-9@:%._\\+~#=-]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/;\n\nconst normalStr = (str: string) => ({\n type: \"normal_str\",\n value: str,\n});\n\nconst urlStr = (str: string) => ({\n type: \"url\",\n value: str,\n});\n\nexport function parseUrlAndString(str: string) {\n const results = [];\n let remaining = str;\n while (remaining) {\n let match = remaining.match(URL_REGEX);\n if (!match) {\n results.push(normalStr(remaining));\n break;\n }\n\n if (match.index !== 0) {\n results.push(normalStr(remaining.slice(0, match.index)));\n results.push(\n urlStr(\n remaining.slice(\n match.index,\n match.index && match.index + match[0].length\n )\n )\n );\n remaining = remaining.slice(match.index && match.index + match[0].length);\n continue;\n }\n results.push(urlStr(remaining.slice(0, match[0].length)));\n remaining = remaining.slice(match[0].length);\n }\n return results;\n}\n\nconst DisplayLineBreaks = ({ text }: { text: string }) => {\n let texts = text.split(\"\\n\");\n let lastOne = texts[texts.length - 1];\n let exceptLastOne = texts.slice(0, texts.length - 1);\n return (\n <>\n {exceptLastOne.reduce(\n (arr: (string | JSX.Element)[], text) => [\n ...arr,\n text,\n <br key={arr.length} />,\n ],\n []\n )}\n {lastOne}\n </>\n );\n};\n\nconst DisplayURL = ({ text }: { text: string }) => {\n const parsed = parseUrlAndString(text);\n return (\n <>\n {parsed.map(({ type, value }, i) =>\n type === \"url\" ? (\n <a href={value} target=\"_blank\" key={i} rel=\"noreferrer\">\n {value}\n </a>\n ) : (\n <DisplayLineBreaks text={value} key={i}></DisplayLineBreaks>\n )\n )}\n </>\n );\n};\n\ntype MdTypes =\n | \"normal_text\"\n | \"bold\"\n | \"italic\"\n | \"underline\"\n | \"hyperlink\"\n | \"ordered_list\"\n | \"unordered_list\"\n | \"newline\"\n | \"join\";\n\ntype NormalText = {\n normal_text: string;\n markdown_text: \"normal_text\";\n};\n\ntype MdValueContainer = { value: MdText };\n\ntype BoldText = {\n bold: MdValueContainer;\n markdown_text: \"bold\";\n};\n\ntype ItalicText = {\n italic: MdValueContainer;\n markdown_text: \"italic\";\n};\n\ntype UnderlineText = {\n underline: MdValueContainer;\n markdown_text: \"underline\";\n};\n\ntype HyperLinkContainer = {\n link: string;\n value: MdText;\n};\n\ntype HyperLinkText = {\n hyperlink: HyperLinkContainer;\n markdown_text: \"hyperlink\";\n};\n\ntype MdList = {\n list: MdText[];\n};\n\ntype OrdredListText = {\n ordered_list: MdList;\n markdown_text: \"ordered_list\";\n};\n\ntype UnOrdredListText = {\n unordered_list: MdList;\n markdown_text: \"unordered_list\";\n};\n\ntype NewlineText = {\n markdown_text: \"newline\";\n};\n\ntype JoinMdContainer = {\n lhs: MdText;\n rhs: MdText;\n};\n\ntype JoinMdText = {\n join: JoinMdContainer;\n markdown_text: \"join\";\n};\n\ntype MdText =\n | NormalText\n | BoldText\n | ItalicText\n | UnderlineText\n | HyperLinkText\n | OrdredListText\n | UnOrdredListText\n | JoinMdText\n | NewlineText;\n\ntype MdTextProp = { mdText: MdText };\n\ntype NormalRenderes = React.FunctionComponent<{ mdText: MdValueContainer }>;\n\ntype ListRenderers = React.FunctionComponent<{ mdText: MdList }>;\n\ntype TextRenderer = React.FunctionComponent<{ mdText: string }>;\n\ntype JoinMdRenderer = React.FunctionComponent<{ mdText: JoinMdContainer }>;\n\ntype HyperLinkRenderer = React.FunctionComponent<{\n mdText: HyperLinkContainer;\n}>;\n\nconst normalWrapper: (TagName: React.ElementType) => NormalRenderes =\n (TagName: React.ElementType) =>\n ({ mdText }) =>\n (\n <TagName>\n <AssistantMd mdText={mdText.value} />\n </TagName>\n );\n\nconst listWrapper: (TagName: React.ElementType) => ListRenderers =\n (TagName) =>\n ({ mdText: { list } }) =>\n (\n <TagName>\n {list.map((mdText) => (\n <li>\n <AssistantMd mdText={mdText} />\n </li>\n ))}\n </TagName>\n );\n\ntype RenderTypes = MdTypes;\n\ntype MdRenderers =\n | NormalRenderes\n | ListRenderers\n | TextRenderer\n | HyperLinkRenderer\n | JoinMdRenderer;\n\n// type RenderMap = Record<RenderTypes, MdRenderers>;\n\nconst NormalTextMd: TextRenderer = ({ mdText }) => {\n return <DisplayURL text={mdText} />;\n};\n\nconst HyperLinkMd: HyperLinkRenderer = ({ mdText }) => (\n <a href={mdText.link}>\n <AssistantMd mdText={mdText.value} />\n </a>\n);\n\nconst JoinMd: JoinMdRenderer = ({ mdText: { lhs, rhs } }) => (\n <>\n <AssistantMd mdText={lhs} />\n <AssistantMd mdText={rhs} />\n </>\n);\n\nconst mdTypeRenderers = {\n normal_text: NormalTextMd,\n bold: normalWrapper(\"strong\"),\n italic: normalWrapper(\"em\"),\n underline: normalWrapper(\"u\"),\n hyperlink: HyperLinkMd,\n ordered_list: listWrapper(\"ol\"),\n unordered_list: listWrapper(\"ul\"),\n newline: () => <br />,\n join: JoinMd,\n};\n\nfunction exhaustiveCheck(param: never) {}\n\nexport default function AssistantMd({ mdText }: MdTextProp) {\n switch (mdText.markdown_text) {\n case \"bold\": {\n let RendenMDElement = mdTypeRenderers[mdText.markdown_text];\n let container = mdText[mdText.markdown_text];\n return <RendenMDElement mdText={container} />;\n }\n case \"italic\": {\n let RendenMDElement = mdTypeRenderers[mdText.markdown_text];\n let container = mdText[mdText.markdown_text];\n return <RendenMDElement mdText={container} />;\n }\n case \"normal_text\": {\n let RendenMDElement = mdTypeRenderers[mdText.markdown_text];\n let container = mdText[mdText.markdown_text];\n return <RendenMDElement mdText={container} />;\n }\n case \"underline\": {\n let RendenMDElement = mdTypeRenderers[mdText.markdown_text];\n let container = mdText[mdText.markdown_text];\n return <RendenMDElement mdText={container} />;\n }\n case \"hyperlink\": {\n let RendenMDElement = mdTypeRenderers[mdText.markdown_text];\n let container = mdText[mdText.markdown_text];\n return <RendenMDElement mdText={container} />;\n }\n case \"ordered_list\": {\n let RendenMDElement = mdTypeRenderers[mdText.markdown_text];\n let container = mdText[mdText.markdown_text];\n return <RendenMDElement mdText={container} />;\n }\n case \"unordered_list\": {\n let RendenMDElement = mdTypeRenderers[mdText.markdown_text];\n let container = mdText[mdText.markdown_text];\n return <RendenMDElement mdText={container} />;\n }\n case \"join\": {\n let RendenMDElement = mdTypeRenderers[mdText.markdown_text];\n let container = mdText[mdText.markdown_text];\n return <RendenMDElement mdText={container} />;\n }\n case \"newline\": {\n let RendenMDElement = mdTypeRenderers[mdText.markdown_text];\n return <RendenMDElement />;\n }\n }\n exhaustiveCheck(mdText);\n}\n"],"names":[],"version":3,"file":"assistant_md.js.map"}
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@skitter/assistant_md",
|
|
3
|
+
"version": "1.0.0-alpha.0",
|
|
4
|
+
"description": "",
|
|
5
|
+
"source": "src/assistant_md.tsx",
|
|
6
|
+
"main": "dist/assistant_md.js",
|
|
7
|
+
"types": "dist/assistant_md.d.ts",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"watch": "parcel watch",
|
|
10
|
+
"build": "parcel build"
|
|
11
|
+
},
|
|
12
|
+
"keywords": [],
|
|
13
|
+
"author": "",
|
|
14
|
+
"license": "ISC",
|
|
15
|
+
"peerDependencies": {
|
|
16
|
+
"react": "^16.8.2"
|
|
17
|
+
},
|
|
18
|
+
"volta": {
|
|
19
|
+
"node": "14.19.3"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"@parcel/packager-ts": "^2.6.0",
|
|
23
|
+
"@parcel/transformer-typescript-types": "^2.6.0",
|
|
24
|
+
"@types/react": "^18.0.12",
|
|
25
|
+
"parcel": "^2.6.0",
|
|
26
|
+
"typescript": "^4.7.3"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
const URL_REGEX =
|
|
4
|
+
/[(http(s)?):\/\/(www\.)?a-zA-Z0-9@:%._\+~#=-]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/;
|
|
5
|
+
|
|
6
|
+
const normalStr = (str: string) => ({
|
|
7
|
+
type: "normal_str",
|
|
8
|
+
value: str,
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
const urlStr = (str: string) => ({
|
|
12
|
+
type: "url",
|
|
13
|
+
value: str,
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
export function parseUrlAndString(str: string) {
|
|
17
|
+
const results = [];
|
|
18
|
+
let remaining = str;
|
|
19
|
+
while (remaining) {
|
|
20
|
+
let match = remaining.match(URL_REGEX);
|
|
21
|
+
if (!match) {
|
|
22
|
+
results.push(normalStr(remaining));
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (match.index !== 0) {
|
|
27
|
+
results.push(normalStr(remaining.slice(0, match.index)));
|
|
28
|
+
results.push(
|
|
29
|
+
urlStr(
|
|
30
|
+
remaining.slice(
|
|
31
|
+
match.index,
|
|
32
|
+
match.index && match.index + match[0].length
|
|
33
|
+
)
|
|
34
|
+
)
|
|
35
|
+
);
|
|
36
|
+
remaining = remaining.slice(match.index && match.index + match[0].length);
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
results.push(urlStr(remaining.slice(0, match[0].length)));
|
|
40
|
+
remaining = remaining.slice(match[0].length);
|
|
41
|
+
}
|
|
42
|
+
return results;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const DisplayLineBreaks = ({ text }: { text: string }) => {
|
|
46
|
+
let texts = text.split("\n");
|
|
47
|
+
let lastOne = texts[texts.length - 1];
|
|
48
|
+
let exceptLastOne = texts.slice(0, texts.length - 1);
|
|
49
|
+
return (
|
|
50
|
+
<>
|
|
51
|
+
{exceptLastOne.reduce(
|
|
52
|
+
(arr: (string | JSX.Element)[], text) => [
|
|
53
|
+
...arr,
|
|
54
|
+
text,
|
|
55
|
+
<br key={arr.length} />,
|
|
56
|
+
],
|
|
57
|
+
[]
|
|
58
|
+
)}
|
|
59
|
+
{lastOne}
|
|
60
|
+
</>
|
|
61
|
+
);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const DisplayURL = ({ text }: { text: string }) => {
|
|
65
|
+
const parsed = parseUrlAndString(text);
|
|
66
|
+
return (
|
|
67
|
+
<>
|
|
68
|
+
{parsed.map(({ type, value }, i) =>
|
|
69
|
+
type === "url" ? (
|
|
70
|
+
<a href={value} target="_blank" key={i} rel="noreferrer">
|
|
71
|
+
{value}
|
|
72
|
+
</a>
|
|
73
|
+
) : (
|
|
74
|
+
<DisplayLineBreaks text={value} key={i}></DisplayLineBreaks>
|
|
75
|
+
)
|
|
76
|
+
)}
|
|
77
|
+
</>
|
|
78
|
+
);
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
type MdTypes =
|
|
82
|
+
| "normal_text"
|
|
83
|
+
| "bold"
|
|
84
|
+
| "italic"
|
|
85
|
+
| "underline"
|
|
86
|
+
| "hyperlink"
|
|
87
|
+
| "ordered_list"
|
|
88
|
+
| "unordered_list"
|
|
89
|
+
| "newline"
|
|
90
|
+
| "join";
|
|
91
|
+
|
|
92
|
+
type NormalText = {
|
|
93
|
+
normal_text: string;
|
|
94
|
+
markdown_text: "normal_text";
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
type MdValueContainer = { value: MdText };
|
|
98
|
+
|
|
99
|
+
type BoldText = {
|
|
100
|
+
bold: MdValueContainer;
|
|
101
|
+
markdown_text: "bold";
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
type ItalicText = {
|
|
105
|
+
italic: MdValueContainer;
|
|
106
|
+
markdown_text: "italic";
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
type UnderlineText = {
|
|
110
|
+
underline: MdValueContainer;
|
|
111
|
+
markdown_text: "underline";
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
type HyperLinkContainer = {
|
|
115
|
+
link: string;
|
|
116
|
+
value: MdText;
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
type HyperLinkText = {
|
|
120
|
+
hyperlink: HyperLinkContainer;
|
|
121
|
+
markdown_text: "hyperlink";
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
type MdList = {
|
|
125
|
+
list: MdText[];
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
type OrdredListText = {
|
|
129
|
+
ordered_list: MdList;
|
|
130
|
+
markdown_text: "ordered_list";
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
type UnOrdredListText = {
|
|
134
|
+
unordered_list: MdList;
|
|
135
|
+
markdown_text: "unordered_list";
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
type NewlineText = {
|
|
139
|
+
markdown_text: "newline";
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
type JoinMdContainer = {
|
|
143
|
+
lhs: MdText;
|
|
144
|
+
rhs: MdText;
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
type JoinMdText = {
|
|
148
|
+
join: JoinMdContainer;
|
|
149
|
+
markdown_text: "join";
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
type MdText =
|
|
153
|
+
| NormalText
|
|
154
|
+
| BoldText
|
|
155
|
+
| ItalicText
|
|
156
|
+
| UnderlineText
|
|
157
|
+
| HyperLinkText
|
|
158
|
+
| OrdredListText
|
|
159
|
+
| UnOrdredListText
|
|
160
|
+
| JoinMdText
|
|
161
|
+
| NewlineText;
|
|
162
|
+
|
|
163
|
+
type MdTextProp = { mdText: MdText };
|
|
164
|
+
|
|
165
|
+
type NormalRenderes = React.FunctionComponent<{ mdText: MdValueContainer }>;
|
|
166
|
+
|
|
167
|
+
type ListRenderers = React.FunctionComponent<{ mdText: MdList }>;
|
|
168
|
+
|
|
169
|
+
type TextRenderer = React.FunctionComponent<{ mdText: string }>;
|
|
170
|
+
|
|
171
|
+
type JoinMdRenderer = React.FunctionComponent<{ mdText: JoinMdContainer }>;
|
|
172
|
+
|
|
173
|
+
type HyperLinkRenderer = React.FunctionComponent<{
|
|
174
|
+
mdText: HyperLinkContainer;
|
|
175
|
+
}>;
|
|
176
|
+
|
|
177
|
+
const normalWrapper: (TagName: React.ElementType) => NormalRenderes =
|
|
178
|
+
(TagName: React.ElementType) =>
|
|
179
|
+
({ mdText }) =>
|
|
180
|
+
(
|
|
181
|
+
<TagName>
|
|
182
|
+
<AssistantMd mdText={mdText.value} />
|
|
183
|
+
</TagName>
|
|
184
|
+
);
|
|
185
|
+
|
|
186
|
+
const listWrapper: (TagName: React.ElementType) => ListRenderers =
|
|
187
|
+
(TagName) =>
|
|
188
|
+
({ mdText: { list } }) =>
|
|
189
|
+
(
|
|
190
|
+
<TagName>
|
|
191
|
+
{list.map((mdText) => (
|
|
192
|
+
<li>
|
|
193
|
+
<AssistantMd mdText={mdText} />
|
|
194
|
+
</li>
|
|
195
|
+
))}
|
|
196
|
+
</TagName>
|
|
197
|
+
);
|
|
198
|
+
|
|
199
|
+
type RenderTypes = MdTypes;
|
|
200
|
+
|
|
201
|
+
type MdRenderers =
|
|
202
|
+
| NormalRenderes
|
|
203
|
+
| ListRenderers
|
|
204
|
+
| TextRenderer
|
|
205
|
+
| HyperLinkRenderer
|
|
206
|
+
| JoinMdRenderer;
|
|
207
|
+
|
|
208
|
+
// type RenderMap = Record<RenderTypes, MdRenderers>;
|
|
209
|
+
|
|
210
|
+
const NormalTextMd: TextRenderer = ({ mdText }) => {
|
|
211
|
+
return <DisplayURL text={mdText} />;
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
const HyperLinkMd: HyperLinkRenderer = ({ mdText }) => (
|
|
215
|
+
<a href={mdText.link}>
|
|
216
|
+
<AssistantMd mdText={mdText.value} />
|
|
217
|
+
</a>
|
|
218
|
+
);
|
|
219
|
+
|
|
220
|
+
const JoinMd: JoinMdRenderer = ({ mdText: { lhs, rhs } }) => (
|
|
221
|
+
<>
|
|
222
|
+
<AssistantMd mdText={lhs} />
|
|
223
|
+
<AssistantMd mdText={rhs} />
|
|
224
|
+
</>
|
|
225
|
+
);
|
|
226
|
+
|
|
227
|
+
const mdTypeRenderers = {
|
|
228
|
+
normal_text: NormalTextMd,
|
|
229
|
+
bold: normalWrapper("strong"),
|
|
230
|
+
italic: normalWrapper("em"),
|
|
231
|
+
underline: normalWrapper("u"),
|
|
232
|
+
hyperlink: HyperLinkMd,
|
|
233
|
+
ordered_list: listWrapper("ol"),
|
|
234
|
+
unordered_list: listWrapper("ul"),
|
|
235
|
+
newline: () => <br />,
|
|
236
|
+
join: JoinMd,
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
function exhaustiveCheck(param: never) {}
|
|
240
|
+
|
|
241
|
+
export default function AssistantMd({ mdText }: MdTextProp) {
|
|
242
|
+
switch (mdText.markdown_text) {
|
|
243
|
+
case "bold": {
|
|
244
|
+
let RendenMDElement = mdTypeRenderers[mdText.markdown_text];
|
|
245
|
+
let container = mdText[mdText.markdown_text];
|
|
246
|
+
return <RendenMDElement mdText={container} />;
|
|
247
|
+
}
|
|
248
|
+
case "italic": {
|
|
249
|
+
let RendenMDElement = mdTypeRenderers[mdText.markdown_text];
|
|
250
|
+
let container = mdText[mdText.markdown_text];
|
|
251
|
+
return <RendenMDElement mdText={container} />;
|
|
252
|
+
}
|
|
253
|
+
case "normal_text": {
|
|
254
|
+
let RendenMDElement = mdTypeRenderers[mdText.markdown_text];
|
|
255
|
+
let container = mdText[mdText.markdown_text];
|
|
256
|
+
return <RendenMDElement mdText={container} />;
|
|
257
|
+
}
|
|
258
|
+
case "underline": {
|
|
259
|
+
let RendenMDElement = mdTypeRenderers[mdText.markdown_text];
|
|
260
|
+
let container = mdText[mdText.markdown_text];
|
|
261
|
+
return <RendenMDElement mdText={container} />;
|
|
262
|
+
}
|
|
263
|
+
case "hyperlink": {
|
|
264
|
+
let RendenMDElement = mdTypeRenderers[mdText.markdown_text];
|
|
265
|
+
let container = mdText[mdText.markdown_text];
|
|
266
|
+
return <RendenMDElement mdText={container} />;
|
|
267
|
+
}
|
|
268
|
+
case "ordered_list": {
|
|
269
|
+
let RendenMDElement = mdTypeRenderers[mdText.markdown_text];
|
|
270
|
+
let container = mdText[mdText.markdown_text];
|
|
271
|
+
return <RendenMDElement mdText={container} />;
|
|
272
|
+
}
|
|
273
|
+
case "unordered_list": {
|
|
274
|
+
let RendenMDElement = mdTypeRenderers[mdText.markdown_text];
|
|
275
|
+
let container = mdText[mdText.markdown_text];
|
|
276
|
+
return <RendenMDElement mdText={container} />;
|
|
277
|
+
}
|
|
278
|
+
case "join": {
|
|
279
|
+
let RendenMDElement = mdTypeRenderers[mdText.markdown_text];
|
|
280
|
+
let container = mdText[mdText.markdown_text];
|
|
281
|
+
return <RendenMDElement mdText={container} />;
|
|
282
|
+
}
|
|
283
|
+
case "newline": {
|
|
284
|
+
let RendenMDElement = mdTypeRenderers[mdText.markdown_text];
|
|
285
|
+
return <RendenMDElement />;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
exhaustiveCheck(mdText);
|
|
289
|
+
}
|