From 52695da2c5445ef27bf866d836ec7b12fad857a0 Mon Sep 17 00:00:00 2001
From: chvmvd <chvmvd@users.noreply.github.com>
Date: Sat, 3 Dec 2022 17:36:39 +0900
Subject: [PATCH 01/16] =?UTF-8?q?ipynb=E3=81=8B=E3=82=89=E7=9B=B4=E6=8E=A5?=
 =?UTF-8?q?=E5=8F=96=E3=82=8A=E5=87=BA=E3=81=99=E8=A8=AD=E5=AE=9A=E3=81=AB?=
 =?UTF-8?q?=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/ViewSource/ViewSource.tsx | 91 +++++++++++++++++++-----
 src/components/ViewSource/styles.css     | 15 ----
 2 files changed, 72 insertions(+), 34 deletions(-)
 delete mode 100644 src/components/ViewSource/styles.css

diff --git a/src/components/ViewSource/ViewSource.tsx b/src/components/ViewSource/ViewSource.tsx
index 0cb0b397f..d0658f979 100644
--- a/src/components/ViewSource/ViewSource.tsx
+++ b/src/components/ViewSource/ViewSource.tsx
@@ -1,13 +1,61 @@
 import React, { useState, useEffect } from "react";
 import CodeBlock from "@theme/CodeBlock";
-import JupyterViewer from "react-jupyter-notebook";
 import OpenInColab from "../OpenInColab/OpenInColab";
-import "./styles.css";
 
-function getSources(json) {
-  return json.cells
-    .filter((cell) => cell.cell_type === "code")
-    .map((cell) => cell.source.join(""));
+type MarkdownCell = { cell_type: "markdown"; source: string };
+type CodeCell = { cell_type: "code"; source: string; outputs: string };
+type NotebookData = [...(MarkdownCell | CodeCell)[]];
+
+// \n => <br/>
+function getOutputs(outputs): string {
+  let html = "";
+  for (const output of outputs) {
+    switch (output.output_type) {
+      case "stream":
+        html += output.text.join("");
+        break;
+      case "execute_result":
+        if (output.data["text/plain"] != null)
+          html += output.data["text/plain"].join("");
+        if (output.data["text/html"]) html += output.data["text/html"].join("");
+        break;
+      case "error":
+        html += output.traceback.join("");
+        break;
+      case "display_data":
+        if (output.data["text/plain"] != null)
+          html += output.data["text/plain"].join("");
+        if (output.data["text/html"] != null)
+          html += output.data["text/html"].join("");
+        if (output.data["application/javascript"] != null)
+          html += output.data["application/javascript"];
+        if (output.data["image/png"] != null) html += output.data["image/png"];
+        break;
+    }
+  }
+  return html;
+}
+
+function getNotebookData(notebook): NotebookData {
+  const notebookData: NotebookData = [];
+  for (const cell of notebook.cells) {
+    switch (cell.cell_type) {
+      case "markdown":
+        notebookData.push({
+          cell_type: "markdown",
+          source: cell.source.length === 0 ? null : cell.source.join(""),
+        });
+        break;
+      case "code":
+        notebookData.push({
+          cell_type: "code",
+          source: cell.source.length === 0 ? null : cell.source.join(""),
+          outputs: cell.outputs.length === 0 ? null : getOutputs(cell.outputs),
+        });
+        break;
+    }
+  }
+  return notebookData;
 }
 
 /**
@@ -24,30 +72,35 @@ export default function ViewSource({
   path: string;
   noOutput?: boolean;
 }) {
-  const [sources, setSources] = useState<string[]>([]);
-  const [content, setContent] = useState();
+  const [notebookData, setNotebookData] = useState<NotebookData>([]);
   useEffect(() => {
     fetch(path)
       .then((response) => response.json())
       .then((json) => {
-        setSources(getSources(json));
-        setContent(json);
+        setNotebookData(getNotebookData(json));
       });
   }, []);
   return (
     <>
-      {sources.map((source, i) => (
+      {notebookData.map((cell, i) => (
         <React.Fragment key={i}>
-          <CodeBlock language="python">{source}</CodeBlock>
+          {cell.cell_type === "markdown" && cell.source != null && cell.source}
+          {cell.cell_type === "code" && (
+            <>
+              {cell.source != null && (
+                <CodeBlock language="python">{cell.source}</CodeBlock>
+              )}
+              {!noOutput && cell.outputs != null && (
+                <iframe
+                  width="100%"
+                  srcDoc={cell.outputs}
+                  title="Code Output"
+                />
+              )}
+            </>
+          )}
         </React.Fragment>
       ))}
-      {content !== undefined && !noOutput && (
-        <JupyterViewer
-          rawIpynb={content}
-          language="python"
-          displaySource="hide"
-        />
-      )}
       <OpenInColab path={path} />
     </>
   );
diff --git a/src/components/ViewSource/styles.css b/src/components/ViewSource/styles.css
deleted file mode 100644
index eafa39079..000000000
--- a/src/components/ViewSource/styles.css
+++ /dev/null
@@ -1,15 +0,0 @@
-.block-light {
-  display: none;
-}
-
-.block-hidden {
-  display: none;
-}
-
-.cell-header {
-  display: none;
-}
-
-.block-light-selected {
-  display: none;
-}

From 5e5ddb007c6f609d74f56cf7154e5581e0fe3149 Mon Sep 17 00:00:00 2001
From: chvmvd <chvmvd@users.noreply.github.com>
Date: Sat, 3 Dec 2022 17:38:55 +0900
Subject: [PATCH 02/16] uninstall react-jupyter-notebook

---
 package-lock.json | 1190 +--------------------------------------------
 package.json      |    1 -
 2 files changed, 1 insertion(+), 1190 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index e7963847f..d046971f2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -24,7 +24,6 @@
         "prism-react-renderer": "^1.3.5",
         "react": "^17.0.2",
         "react-dom": "^17.0.2",
-        "react-jupyter-notebook": "^0.4.0",
         "react-zoom-pan-pinch": "^2.1.3",
         "rehype-katex": "^5.0.0",
         "remark-math": "^3.0.1"
@@ -1974,139 +1973,6 @@
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@codemirror/autocomplete": {
-      "version": "0.19.15",
-      "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-0.19.15.tgz",
-      "integrity": "sha512-GQWzvvuXxNUyaEk+5gawbAD8s51/v2Chb++nx0e2eGWrphWk42isBtzOMdc3DxrxrZtPZ55q2ldNp+6G8KJLIQ==",
-      "dependencies": {
-        "@codemirror/language": "^0.19.0",
-        "@codemirror/state": "^0.19.4",
-        "@codemirror/text": "^0.19.2",
-        "@codemirror/tooltip": "^0.19.12",
-        "@codemirror/view": "^0.19.0",
-        "@lezer/common": "^0.15.0"
-      }
-    },
-    "node_modules/@codemirror/gutter": {
-      "version": "0.19.9",
-      "resolved": "https://registry.npmjs.org/@codemirror/gutter/-/gutter-0.19.9.tgz",
-      "integrity": "sha512-PFrtmilahin1g6uL27aG5tM/rqR9DZzZYZsIrCXA5Uc2OFTFqx4owuhoU9hqfYxHp5ovfvBwQ+txFzqS4vog6Q==",
-      "deprecated": "As of 0.20.0, this package has been merged into @codemirror/view",
-      "dependencies": {
-        "@codemirror/rangeset": "^0.19.0",
-        "@codemirror/state": "^0.19.0",
-        "@codemirror/view": "^0.19.23"
-      }
-    },
-    "node_modules/@codemirror/highlight": {
-      "version": "0.19.8",
-      "resolved": "https://registry.npmjs.org/@codemirror/highlight/-/highlight-0.19.8.tgz",
-      "integrity": "sha512-v/lzuHjrYR8MN2mEJcUD6fHSTXXli9C1XGYpr+ElV6fLBIUhMTNKR3qThp611xuWfXfwDxeL7ppcbkM/MzPV3A==",
-      "deprecated": "As of 0.20.0, this package has been split between @lezer/highlight and @codemirror/language",
-      "dependencies": {
-        "@codemirror/language": "^0.19.0",
-        "@codemirror/rangeset": "^0.19.0",
-        "@codemirror/state": "^0.19.3",
-        "@codemirror/view": "^0.19.39",
-        "@lezer/common": "^0.15.0",
-        "style-mod": "^4.0.0"
-      }
-    },
-    "node_modules/@codemirror/lang-javascript": {
-      "version": "0.19.7",
-      "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-0.19.7.tgz",
-      "integrity": "sha512-DL9f3JLqOEHH9cIwEqqjnP5bkjdVXeECksLtV+/MbPm+l4H+AG+PkwZaJQ2oR1GfPZKh8MVSIE94aGWNkJP8WQ==",
-      "dependencies": {
-        "@codemirror/autocomplete": "^0.19.0",
-        "@codemirror/highlight": "^0.19.7",
-        "@codemirror/language": "^0.19.0",
-        "@codemirror/lint": "^0.19.0",
-        "@codemirror/state": "^0.19.0",
-        "@codemirror/view": "^0.19.0",
-        "@lezer/javascript": "^0.15.1"
-      }
-    },
-    "node_modules/@codemirror/language": {
-      "version": "0.19.10",
-      "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-0.19.10.tgz",
-      "integrity": "sha512-yA0DZ3RYn2CqAAGW62VrU8c4YxscMQn45y/I9sjBlqB1e2OTQLg4CCkMBuMSLXk4xaqjlsgazeOQWaJQOKfV8Q==",
-      "dependencies": {
-        "@codemirror/state": "^0.19.0",
-        "@codemirror/text": "^0.19.0",
-        "@codemirror/view": "^0.19.0",
-        "@lezer/common": "^0.15.5",
-        "@lezer/lr": "^0.15.0"
-      }
-    },
-    "node_modules/@codemirror/lint": {
-      "version": "0.19.6",
-      "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-0.19.6.tgz",
-      "integrity": "sha512-Pbw1Y5kHVs2J+itQ0uez3dI4qY9ApYVap7eNfV81x1/3/BXgBkKfadaw0gqJ4h4FDG7OnJwb0VbPsjJQllHjaA==",
-      "dependencies": {
-        "@codemirror/gutter": "^0.19.4",
-        "@codemirror/panel": "^0.19.0",
-        "@codemirror/rangeset": "^0.19.1",
-        "@codemirror/state": "^0.19.4",
-        "@codemirror/tooltip": "^0.19.16",
-        "@codemirror/view": "^0.19.22",
-        "crelt": "^1.0.5"
-      }
-    },
-    "node_modules/@codemirror/panel": {
-      "version": "0.19.1",
-      "resolved": "https://registry.npmjs.org/@codemirror/panel/-/panel-0.19.1.tgz",
-      "integrity": "sha512-sYeOCMA3KRYxZYJYn5PNlt9yNsjy3zTNTrbYSfVgjgL9QomIVgOJWPO5hZ2sTN8lufO6lw0vTBsIPL9MSidmBg==",
-      "deprecated": "As of 0.20.0, this package has been merged into @codemirror/view",
-      "dependencies": {
-        "@codemirror/state": "^0.19.0",
-        "@codemirror/view": "^0.19.0"
-      }
-    },
-    "node_modules/@codemirror/rangeset": {
-      "version": "0.19.9",
-      "resolved": "https://registry.npmjs.org/@codemirror/rangeset/-/rangeset-0.19.9.tgz",
-      "integrity": "sha512-V8YUuOvK+ew87Xem+71nKcqu1SXd5QROMRLMS/ljT5/3MCxtgrRie1Cvild0G/Z2f1fpWxzX78V0U4jjXBorBQ==",
-      "deprecated": "As of 0.20.0, this package has been merged into @codemirror/state",
-      "dependencies": {
-        "@codemirror/state": "^0.19.0"
-      }
-    },
-    "node_modules/@codemirror/state": {
-      "version": "0.19.9",
-      "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-0.19.9.tgz",
-      "integrity": "sha512-psOzDolKTZkx4CgUqhBQ8T8gBc0xN5z4gzed109aF6x7D7umpDRoimacI/O6d9UGuyl4eYuDCZmDFr2Rq7aGOw==",
-      "dependencies": {
-        "@codemirror/text": "^0.19.0"
-      }
-    },
-    "node_modules/@codemirror/text": {
-      "version": "0.19.6",
-      "resolved": "https://registry.npmjs.org/@codemirror/text/-/text-0.19.6.tgz",
-      "integrity": "sha512-T9jnREMIygx+TPC1bOuepz18maGq/92q2a+n4qTqObKwvNMg+8cMTslb8yxeEDEq7S3kpgGWxgO1UWbQRij0dA==",
-      "deprecated": "As of 0.20.0, this package has been merged into @codemirror/state"
-    },
-    "node_modules/@codemirror/tooltip": {
-      "version": "0.19.16",
-      "resolved": "https://registry.npmjs.org/@codemirror/tooltip/-/tooltip-0.19.16.tgz",
-      "integrity": "sha512-zxKDHryUV5/RS45AQL+wOeN+i7/l81wK56OMnUPoTSzCWNITfxHn7BToDsjtrRKbzHqUxKYmBnn/4hPjpZ4WJQ==",
-      "deprecated": "As of 0.20.0, this package has been merged into @codemirror/view",
-      "dependencies": {
-        "@codemirror/state": "^0.19.0",
-        "@codemirror/view": "^0.19.0"
-      }
-    },
-    "node_modules/@codemirror/view": {
-      "version": "0.19.48",
-      "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-0.19.48.tgz",
-      "integrity": "sha512-0eg7D2Nz4S8/caetCTz61rK0tkHI17V/d15Jy0kLOT8dTLGGNJUponDnW28h2B6bERmPlVHKh8MJIr5OCp1nGw==",
-      "dependencies": {
-        "@codemirror/rangeset": "^0.19.5",
-        "@codemirror/state": "^0.19.3",
-        "@codemirror/text": "^0.19.0",
-        "style-mod": "^4.0.0",
-        "w3c-keyname": "^2.2.4"
-      }
-    },
     "node_modules/@colors/colors": {
       "version": "1.5.0",
       "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
@@ -3074,27 +2940,6 @@
       "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz",
       "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A=="
     },
-    "node_modules/@lezer/common": {
-      "version": "0.15.12",
-      "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz",
-      "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig=="
-    },
-    "node_modules/@lezer/javascript": {
-      "version": "0.15.3",
-      "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-0.15.3.tgz",
-      "integrity": "sha512-8jA2NpOfpWwSPZxRhd9BxK2ZPvGd7nLE3LFTJ5AbMhXAzMHeMjneV6GEVd7dAIee85dtap0jdb6bgOSO0+lfwA==",
-      "dependencies": {
-        "@lezer/lr": "^0.15.0"
-      }
-    },
-    "node_modules/@lezer/lr": {
-      "version": "0.15.8",
-      "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz",
-      "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==",
-      "dependencies": {
-        "@lezer/common": "^0.15.0"
-      }
-    },
     "node_modules/@mdx-js/mdx": {
       "version": "1.6.22",
       "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz",
@@ -4835,11 +4680,6 @@
         "algoliasearch": ">= 3.1 < 6"
       }
     },
-    "node_modules/anser": {
-      "version": "1.4.10",
-      "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz",
-      "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww=="
-    },
     "node_modules/ansi-align": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
@@ -4899,19 +4739,6 @@
         "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "node_modules/ansi-to-react": {
-      "version": "6.1.6",
-      "resolved": "https://registry.npmjs.org/ansi-to-react/-/ansi-to-react-6.1.6.tgz",
-      "integrity": "sha512-+HWn72GKydtupxX9TORBedqOMsJRiKTqaLUKW8txSBZw9iBpzPKLI8KOu4WzwD4R7hSv1zEspobY6LwlWvwZ6Q==",
-      "dependencies": {
-        "anser": "^1.4.1",
-        "escape-carriage": "^1.3.0"
-      },
-      "peerDependencies": {
-        "react": "^16.3.2 || ^17.0.0",
-        "react-dom": "^16.3.2 || ^17.0.0"
-      }
-    },
     "node_modules/anymatch": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
@@ -6182,11 +6009,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/crelt": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.5.tgz",
-      "integrity": "sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA=="
-    },
     "node_modules/cross-fetch": {
       "version": "3.1.5",
       "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
@@ -7001,11 +6823,6 @@
         "node": ">=6"
       }
     },
-    "node_modules/escape-carriage": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/escape-carriage/-/escape-carriage-1.3.0.tgz",
-      "integrity": "sha512-ATWi5MD8QlAGQOeMgI8zTp671BG8aKvAC0M7yenlxU4CRLGO/sKthxVUyjiOFKjHdIo+6dZZUNFgHFeVEaKfGQ=="
-    },
     "node_modules/escape-goat": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz",
@@ -7670,18 +7487,6 @@
         "reusify": "^1.0.4"
       }
     },
-    "node_modules/fault": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz",
-      "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==",
-      "dependencies": {
-        "format": "^0.2.0"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
     "node_modules/faye-websocket": {
       "version": "0.11.4",
       "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz",
@@ -8003,14 +7808,6 @@
         "node": ">=6"
       }
     },
-    "node_modules/format": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
-      "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==",
-      "engines": {
-        "node": ">=0.4.x"
-      }
-    },
     "node_modules/forwarded": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@@ -8575,14 +8372,6 @@
         "he": "bin/he"
       }
     },
-    "node_modules/highlight.js": {
-      "version": "10.7.3",
-      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
-      "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
-      "engines": {
-        "node": "*"
-      }
-    },
     "node_modules/history": {
       "version": "4.10.1",
       "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz",
@@ -9770,15 +9559,6 @@
       "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
       "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="
     },
-    "node_modules/longest-streak": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz",
-      "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==",
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
     "node_modules/loose-envify": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -9806,19 +9586,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/lowlight": {
-      "version": "1.20.0",
-      "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz",
-      "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==",
-      "dependencies": {
-        "fault": "^1.0.0",
-        "highlight.js": "~10.7.0"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
     "node_modules/lru-cache": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -9914,18 +9681,6 @@
         "url": "https://github.com/fb55/entities?sponsor=1"
       }
     },
-    "node_modules/markdown-table": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz",
-      "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==",
-      "dependencies": {
-        "repeat-string": "^1.0.0"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
     "node_modules/match-at": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/match-at/-/match-at-0.1.1.tgz",
@@ -9955,117 +9710,6 @@
         "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/mdast-util-find-and-replace": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz",
-      "integrity": "sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==",
-      "dependencies": {
-        "escape-string-regexp": "^4.0.0",
-        "unist-util-is": "^4.0.0",
-        "unist-util-visit-parents": "^3.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/mdast-util-from-markdown": {
-      "version": "0.8.5",
-      "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz",
-      "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==",
-      "dependencies": {
-        "@types/mdast": "^3.0.0",
-        "mdast-util-to-string": "^2.0.0",
-        "micromark": "~2.11.0",
-        "parse-entities": "^2.0.0",
-        "unist-util-stringify-position": "^2.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/mdast-util-gfm": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz",
-      "integrity": "sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==",
-      "dependencies": {
-        "mdast-util-gfm-autolink-literal": "^0.1.0",
-        "mdast-util-gfm-strikethrough": "^0.2.0",
-        "mdast-util-gfm-table": "^0.1.0",
-        "mdast-util-gfm-task-list-item": "^0.1.0",
-        "mdast-util-to-markdown": "^0.6.1"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/mdast-util-gfm-autolink-literal": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz",
-      "integrity": "sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==",
-      "dependencies": {
-        "ccount": "^1.0.0",
-        "mdast-util-find-and-replace": "^1.1.0",
-        "micromark": "^2.11.3"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/mdast-util-gfm-strikethrough": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz",
-      "integrity": "sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==",
-      "dependencies": {
-        "mdast-util-to-markdown": "^0.6.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/mdast-util-gfm-table": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz",
-      "integrity": "sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==",
-      "dependencies": {
-        "markdown-table": "^2.0.0",
-        "mdast-util-to-markdown": "~0.6.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/mdast-util-gfm-task-list-item": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz",
-      "integrity": "sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==",
-      "dependencies": {
-        "mdast-util-to-markdown": "~0.6.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/mdast-util-math": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-0.1.2.tgz",
-      "integrity": "sha512-fogAitds+wH+QRas78Yr1TwmQGN4cW/G2WRw5ePuNoJbBSPJCxIOCE8MTzHgWHVSpgkRaPQTgfzXRE1CrwWSlg==",
-      "dependencies": {
-        "longest-streak": "^2.0.0",
-        "mdast-util-to-markdown": "^0.6.0",
-        "repeat-string": "^1.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
     "node_modules/mdast-util-to-hast": {
       "version": "10.0.1",
       "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz",
@@ -10085,23 +9729,6 @@
         "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/mdast-util-to-markdown": {
-      "version": "0.6.5",
-      "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz",
-      "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==",
-      "dependencies": {
-        "@types/unist": "^2.0.0",
-        "longest-streak": "^2.0.0",
-        "mdast-util-to-string": "^2.0.0",
-        "parse-entities": "^2.0.0",
-        "repeat-string": "^1.0.0",
-        "zwitch": "^1.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
     "node_modules/mdast-util-to-string": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz",
@@ -10166,128 +9793,6 @@
         "node": ">= 0.6"
       }
     },
-    "node_modules/micromark": {
-      "version": "2.11.4",
-      "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz",
-      "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==",
-      "funding": [
-        {
-          "type": "GitHub Sponsors",
-          "url": "https://github.com/sponsors/unifiedjs"
-        },
-        {
-          "type": "OpenCollective",
-          "url": "https://opencollective.com/unified"
-        }
-      ],
-      "dependencies": {
-        "debug": "^4.0.0",
-        "parse-entities": "^2.0.0"
-      }
-    },
-    "node_modules/micromark-extension-gfm": {
-      "version": "0.3.3",
-      "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz",
-      "integrity": "sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==",
-      "dependencies": {
-        "micromark": "~2.11.0",
-        "micromark-extension-gfm-autolink-literal": "~0.5.0",
-        "micromark-extension-gfm-strikethrough": "~0.6.5",
-        "micromark-extension-gfm-table": "~0.4.0",
-        "micromark-extension-gfm-tagfilter": "~0.3.0",
-        "micromark-extension-gfm-task-list-item": "~0.3.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/micromark-extension-gfm-autolink-literal": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz",
-      "integrity": "sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==",
-      "dependencies": {
-        "micromark": "~2.11.3"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/micromark-extension-gfm-strikethrough": {
-      "version": "0.6.5",
-      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz",
-      "integrity": "sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==",
-      "dependencies": {
-        "micromark": "~2.11.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/micromark-extension-gfm-table": {
-      "version": "0.4.3",
-      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz",
-      "integrity": "sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==",
-      "dependencies": {
-        "micromark": "~2.11.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/micromark-extension-gfm-tagfilter": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz",
-      "integrity": "sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q==",
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/micromark-extension-gfm-task-list-item": {
-      "version": "0.3.3",
-      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz",
-      "integrity": "sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==",
-      "dependencies": {
-        "micromark": "~2.11.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/micromark-extension-math": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-0.1.2.tgz",
-      "integrity": "sha512-ZJXsT2eVPM8VTmcw0CPSDeyonOn9SziGK3Z+nkf9Vb6xMPeU+4JMEnO6vzDL10562Favw8Vste74f54rxJ/i6Q==",
-      "dependencies": {
-        "katex": "^0.12.0",
-        "micromark": "~2.11.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/micromark-extension-math/node_modules/commander": {
-      "version": "2.20.3",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
-    },
-    "node_modules/micromark-extension-math/node_modules/katex": {
-      "version": "0.12.0",
-      "resolved": "https://registry.npmjs.org/katex/-/katex-0.12.0.tgz",
-      "integrity": "sha512-y+8btoc/CK70XqcHqjxiGWBOeIL8upbS0peTPXTvgrh21n1RiWWcIpSWM+4uXq+IAgNh9YYQWdc7LVDPDAEEAg==",
-      "dependencies": {
-        "commander": "^2.19.0"
-      },
-      "bin": {
-        "katex": "cli.js"
-      }
-    },
     "node_modules/micromatch": {
       "version": "4.0.5",
       "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
@@ -12119,38 +11624,6 @@
         "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4"
       }
     },
-    "node_modules/react-jupyter-notebook": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/react-jupyter-notebook/-/react-jupyter-notebook-0.4.0.tgz",
-      "integrity": "sha512-puxAs7ACXIGbLcw/phxW5L3VPYFjFBkQzFdZaFeVTm9sATuwoLuSgcY8z7wPMqUyzu9cIApdRAKGCvDWRNuCNQ==",
-      "dependencies": {
-        "@codemirror/gutter": "^0.19.9",
-        "@codemirror/lang-javascript": "^0.19.7",
-        "@codemirror/view": "^0.19.47",
-        "ansi-to-react": "^6.1.4",
-        "katex": "^0.13.2",
-        "react": "^17.0.1",
-        "react-dom": "^17.0.1",
-        "react-markdown": "^6.0.2",
-        "react-syntax-highlighter": "^15.4.3",
-        "rehype-katex": "^5.0.0",
-        "remark-gfm": "^1.0.0",
-        "remark-math": "^4.0.0"
-      }
-    },
-    "node_modules/react-jupyter-notebook/node_modules/remark-math": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/remark-math/-/remark-math-4.0.0.tgz",
-      "integrity": "sha512-lH7SoQenXtQrvL0bm+mjZbvOk//YWNuyR+MxV18Qyv8rgFmMEGNuB0TSCQDkoDaiJ40FCnG8lxErc/zhcedYbw==",
-      "dependencies": {
-        "mdast-util-math": "^0.1.0",
-        "micromark-extension-math": "^0.1.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
     "node_modules/react-lifecycles-compat": {
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
@@ -12257,51 +11730,6 @@
         "webpack": ">=4.41.1 || 5.x"
       }
     },
-    "node_modules/react-markdown": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-6.0.3.tgz",
-      "integrity": "sha512-kQbpWiMoBHnj9myLlmZG9T1JdoT/OEyHK7hqM6CqFT14MAkgWiWBUYijLyBmxbntaN6dCDicPcUhWhci1QYodg==",
-      "dependencies": {
-        "@types/hast": "^2.0.0",
-        "@types/unist": "^2.0.3",
-        "comma-separated-tokens": "^1.0.0",
-        "prop-types": "^15.7.2",
-        "property-information": "^5.3.0",
-        "react-is": "^17.0.0",
-        "remark-parse": "^9.0.0",
-        "remark-rehype": "^8.0.0",
-        "space-separated-tokens": "^1.1.0",
-        "style-to-object": "^0.3.0",
-        "unified": "^9.0.0",
-        "unist-util-visit": "^2.0.0",
-        "vfile": "^4.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      },
-      "peerDependencies": {
-        "@types/react": ">=16",
-        "react": ">=16"
-      }
-    },
-    "node_modules/react-markdown/node_modules/react-is": {
-      "version": "17.0.2",
-      "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
-      "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
-    },
-    "node_modules/react-markdown/node_modules/remark-parse": {
-      "version": "9.0.0",
-      "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz",
-      "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==",
-      "dependencies": {
-        "mdast-util-from-markdown": "^0.8.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
     "node_modules/react-router": {
       "version": "5.3.4",
       "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz",
@@ -12347,22 +11775,7 @@
         "tiny-warning": "^1.0.0"
       },
       "peerDependencies": {
-        "react": ">=15"
-      }
-    },
-    "node_modules/react-syntax-highlighter": {
-      "version": "15.5.0",
-      "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.5.0.tgz",
-      "integrity": "sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==",
-      "dependencies": {
-        "@babel/runtime": "^7.3.1",
-        "highlight.js": "^10.4.1",
-        "lowlight": "^1.17.0",
-        "prismjs": "^1.27.0",
-        "refractor": "^3.6.0"
-      },
-      "peerDependencies": {
-        "react": ">= 0.14.0"
+        "react": ">=15"
       }
     },
     "node_modules/react-textarea-autosize": {
@@ -12471,28 +11884,6 @@
         "node": "*"
       }
     },
-    "node_modules/refractor": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz",
-      "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==",
-      "dependencies": {
-        "hastscript": "^6.0.0",
-        "parse-entities": "^2.0.0",
-        "prismjs": "~1.27.0"
-      },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/wooorm"
-      }
-    },
-    "node_modules/refractor/node_modules/prismjs": {
-      "version": "1.27.0",
-      "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz",
-      "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==",
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "node_modules/regenerate": {
       "version": "1.4.2",
       "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
@@ -12675,19 +12066,6 @@
         "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/remark-gfm": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-1.0.0.tgz",
-      "integrity": "sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==",
-      "dependencies": {
-        "mdast-util-gfm": "^0.1.0",
-        "micromark-extension-gfm": "^0.3.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
     "node_modules/remark-math": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/remark-math/-/remark-math-3.0.1.tgz",
@@ -12835,37 +12213,6 @@
         "url": "https://opencollective.com/unified"
       }
     },
-    "node_modules/remark-rehype": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-8.1.0.tgz",
-      "integrity": "sha512-EbCu9kHgAxKmW1yEYjx3QafMyGY3q8noUbNUI5xyKbaFP89wbhDrKxyIQNukNYthzjNHZu6J7hwFg7hRm1svYA==",
-      "dependencies": {
-        "mdast-util-to-hast": "^10.2.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
-    "node_modules/remark-rehype/node_modules/mdast-util-to-hast": {
-      "version": "10.2.0",
-      "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.2.0.tgz",
-      "integrity": "sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ==",
-      "dependencies": {
-        "@types/mdast": "^3.0.0",
-        "@types/unist": "^2.0.0",
-        "mdast-util-definitions": "^4.0.0",
-        "mdurl": "^1.0.0",
-        "unist-builder": "^2.0.0",
-        "unist-util-generated": "^1.0.0",
-        "unist-util-position": "^3.0.0",
-        "unist-util-visit": "^2.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/unified"
-      }
-    },
     "node_modules/remark-squeeze-paragraphs": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz",
@@ -13884,11 +13231,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/style-mod": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.0.tgz",
-      "integrity": "sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw=="
-    },
     "node_modules/style-to-object": {
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz",
@@ -14941,11 +14283,6 @@
       "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz",
       "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w=="
     },
-    "node_modules/w3c-keyname": {
-      "version": "2.2.6",
-      "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz",
-      "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg=="
-    },
     "node_modules/wait-on": {
       "version": "6.0.1",
       "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz",
@@ -16957,133 +16294,6 @@
         "to-fast-properties": "^2.0.0"
       }
     },
-    "@codemirror/autocomplete": {
-      "version": "0.19.15",
-      "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-0.19.15.tgz",
-      "integrity": "sha512-GQWzvvuXxNUyaEk+5gawbAD8s51/v2Chb++nx0e2eGWrphWk42isBtzOMdc3DxrxrZtPZ55q2ldNp+6G8KJLIQ==",
-      "requires": {
-        "@codemirror/language": "^0.19.0",
-        "@codemirror/state": "^0.19.4",
-        "@codemirror/text": "^0.19.2",
-        "@codemirror/tooltip": "^0.19.12",
-        "@codemirror/view": "^0.19.0",
-        "@lezer/common": "^0.15.0"
-      }
-    },
-    "@codemirror/gutter": {
-      "version": "0.19.9",
-      "resolved": "https://registry.npmjs.org/@codemirror/gutter/-/gutter-0.19.9.tgz",
-      "integrity": "sha512-PFrtmilahin1g6uL27aG5tM/rqR9DZzZYZsIrCXA5Uc2OFTFqx4owuhoU9hqfYxHp5ovfvBwQ+txFzqS4vog6Q==",
-      "requires": {
-        "@codemirror/rangeset": "^0.19.0",
-        "@codemirror/state": "^0.19.0",
-        "@codemirror/view": "^0.19.23"
-      }
-    },
-    "@codemirror/highlight": {
-      "version": "0.19.8",
-      "resolved": "https://registry.npmjs.org/@codemirror/highlight/-/highlight-0.19.8.tgz",
-      "integrity": "sha512-v/lzuHjrYR8MN2mEJcUD6fHSTXXli9C1XGYpr+ElV6fLBIUhMTNKR3qThp611xuWfXfwDxeL7ppcbkM/MzPV3A==",
-      "requires": {
-        "@codemirror/language": "^0.19.0",
-        "@codemirror/rangeset": "^0.19.0",
-        "@codemirror/state": "^0.19.3",
-        "@codemirror/view": "^0.19.39",
-        "@lezer/common": "^0.15.0",
-        "style-mod": "^4.0.0"
-      }
-    },
-    "@codemirror/lang-javascript": {
-      "version": "0.19.7",
-      "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-0.19.7.tgz",
-      "integrity": "sha512-DL9f3JLqOEHH9cIwEqqjnP5bkjdVXeECksLtV+/MbPm+l4H+AG+PkwZaJQ2oR1GfPZKh8MVSIE94aGWNkJP8WQ==",
-      "requires": {
-        "@codemirror/autocomplete": "^0.19.0",
-        "@codemirror/highlight": "^0.19.7",
-        "@codemirror/language": "^0.19.0",
-        "@codemirror/lint": "^0.19.0",
-        "@codemirror/state": "^0.19.0",
-        "@codemirror/view": "^0.19.0",
-        "@lezer/javascript": "^0.15.1"
-      }
-    },
-    "@codemirror/language": {
-      "version": "0.19.10",
-      "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-0.19.10.tgz",
-      "integrity": "sha512-yA0DZ3RYn2CqAAGW62VrU8c4YxscMQn45y/I9sjBlqB1e2OTQLg4CCkMBuMSLXk4xaqjlsgazeOQWaJQOKfV8Q==",
-      "requires": {
-        "@codemirror/state": "^0.19.0",
-        "@codemirror/text": "^0.19.0",
-        "@codemirror/view": "^0.19.0",
-        "@lezer/common": "^0.15.5",
-        "@lezer/lr": "^0.15.0"
-      }
-    },
-    "@codemirror/lint": {
-      "version": "0.19.6",
-      "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-0.19.6.tgz",
-      "integrity": "sha512-Pbw1Y5kHVs2J+itQ0uez3dI4qY9ApYVap7eNfV81x1/3/BXgBkKfadaw0gqJ4h4FDG7OnJwb0VbPsjJQllHjaA==",
-      "requires": {
-        "@codemirror/gutter": "^0.19.4",
-        "@codemirror/panel": "^0.19.0",
-        "@codemirror/rangeset": "^0.19.1",
-        "@codemirror/state": "^0.19.4",
-        "@codemirror/tooltip": "^0.19.16",
-        "@codemirror/view": "^0.19.22",
-        "crelt": "^1.0.5"
-      }
-    },
-    "@codemirror/panel": {
-      "version": "0.19.1",
-      "resolved": "https://registry.npmjs.org/@codemirror/panel/-/panel-0.19.1.tgz",
-      "integrity": "sha512-sYeOCMA3KRYxZYJYn5PNlt9yNsjy3zTNTrbYSfVgjgL9QomIVgOJWPO5hZ2sTN8lufO6lw0vTBsIPL9MSidmBg==",
-      "requires": {
-        "@codemirror/state": "^0.19.0",
-        "@codemirror/view": "^0.19.0"
-      }
-    },
-    "@codemirror/rangeset": {
-      "version": "0.19.9",
-      "resolved": "https://registry.npmjs.org/@codemirror/rangeset/-/rangeset-0.19.9.tgz",
-      "integrity": "sha512-V8YUuOvK+ew87Xem+71nKcqu1SXd5QROMRLMS/ljT5/3MCxtgrRie1Cvild0G/Z2f1fpWxzX78V0U4jjXBorBQ==",
-      "requires": {
-        "@codemirror/state": "^0.19.0"
-      }
-    },
-    "@codemirror/state": {
-      "version": "0.19.9",
-      "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-0.19.9.tgz",
-      "integrity": "sha512-psOzDolKTZkx4CgUqhBQ8T8gBc0xN5z4gzed109aF6x7D7umpDRoimacI/O6d9UGuyl4eYuDCZmDFr2Rq7aGOw==",
-      "requires": {
-        "@codemirror/text": "^0.19.0"
-      }
-    },
-    "@codemirror/text": {
-      "version": "0.19.6",
-      "resolved": "https://registry.npmjs.org/@codemirror/text/-/text-0.19.6.tgz",
-      "integrity": "sha512-T9jnREMIygx+TPC1bOuepz18maGq/92q2a+n4qTqObKwvNMg+8cMTslb8yxeEDEq7S3kpgGWxgO1UWbQRij0dA=="
-    },
-    "@codemirror/tooltip": {
-      "version": "0.19.16",
-      "resolved": "https://registry.npmjs.org/@codemirror/tooltip/-/tooltip-0.19.16.tgz",
-      "integrity": "sha512-zxKDHryUV5/RS45AQL+wOeN+i7/l81wK56OMnUPoTSzCWNITfxHn7BToDsjtrRKbzHqUxKYmBnn/4hPjpZ4WJQ==",
-      "requires": {
-        "@codemirror/state": "^0.19.0",
-        "@codemirror/view": "^0.19.0"
-      }
-    },
-    "@codemirror/view": {
-      "version": "0.19.48",
-      "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-0.19.48.tgz",
-      "integrity": "sha512-0eg7D2Nz4S8/caetCTz61rK0tkHI17V/d15Jy0kLOT8dTLGGNJUponDnW28h2B6bERmPlVHKh8MJIr5OCp1nGw==",
-      "requires": {
-        "@codemirror/rangeset": "^0.19.5",
-        "@codemirror/state": "^0.19.3",
-        "@codemirror/text": "^0.19.0",
-        "style-mod": "^4.0.0",
-        "w3c-keyname": "^2.2.4"
-      }
-    },
     "@colors/colors": {
       "version": "1.5.0",
       "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
@@ -17813,27 +17023,6 @@
       "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz",
       "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A=="
     },
-    "@lezer/common": {
-      "version": "0.15.12",
-      "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz",
-      "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig=="
-    },
-    "@lezer/javascript": {
-      "version": "0.15.3",
-      "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-0.15.3.tgz",
-      "integrity": "sha512-8jA2NpOfpWwSPZxRhd9BxK2ZPvGd7nLE3LFTJ5AbMhXAzMHeMjneV6GEVd7dAIee85dtap0jdb6bgOSO0+lfwA==",
-      "requires": {
-        "@lezer/lr": "^0.15.0"
-      }
-    },
-    "@lezer/lr": {
-      "version": "0.15.8",
-      "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz",
-      "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==",
-      "requires": {
-        "@lezer/common": "^0.15.0"
-      }
-    },
     "@mdx-js/mdx": {
       "version": "1.6.22",
       "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz",
@@ -19076,11 +18265,6 @@
         "@algolia/events": "^4.0.1"
       }
     },
-    "anser": {
-      "version": "1.4.10",
-      "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz",
-      "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww=="
-    },
     "ansi-align": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
@@ -19124,15 +18308,6 @@
         "color-convert": "^2.0.1"
       }
     },
-    "ansi-to-react": {
-      "version": "6.1.6",
-      "resolved": "https://registry.npmjs.org/ansi-to-react/-/ansi-to-react-6.1.6.tgz",
-      "integrity": "sha512-+HWn72GKydtupxX9TORBedqOMsJRiKTqaLUKW8txSBZw9iBpzPKLI8KOu4WzwD4R7hSv1zEspobY6LwlWvwZ6Q==",
-      "requires": {
-        "anser": "^1.4.1",
-        "escape-carriage": "^1.3.0"
-      }
-    },
     "anymatch": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
@@ -20057,11 +19232,6 @@
         "yaml": "^1.10.0"
       }
     },
-    "crelt": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.5.tgz",
-      "integrity": "sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA=="
-    },
     "cross-fetch": {
       "version": "3.1.5",
       "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz",
@@ -20645,11 +19815,6 @@
       "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
       "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
     },
-    "escape-carriage": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/escape-carriage/-/escape-carriage-1.3.0.tgz",
-      "integrity": "sha512-ATWi5MD8QlAGQOeMgI8zTp671BG8aKvAC0M7yenlxU4CRLGO/sKthxVUyjiOFKjHdIo+6dZZUNFgHFeVEaKfGQ=="
-    },
     "escape-goat": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz",
@@ -21134,14 +20299,6 @@
         "reusify": "^1.0.4"
       }
     },
-    "fault": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz",
-      "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==",
-      "requires": {
-        "format": "^0.2.0"
-      }
-    },
     "faye-websocket": {
       "version": "0.11.4",
       "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz",
@@ -21371,11 +20528,6 @@
         }
       }
     },
-    "format": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
-      "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww=="
-    },
     "forwarded": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@@ -21788,11 +20940,6 @@
       "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
       "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
     },
-    "highlight.js": {
-      "version": "10.7.3",
-      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
-      "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A=="
-    },
     "history": {
       "version": "4.10.1",
       "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz",
@@ -22634,11 +21781,6 @@
       "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
       "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="
     },
-    "longest-streak": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz",
-      "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg=="
-    },
     "loose-envify": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -22660,15 +21802,6 @@
       "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
       "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="
     },
-    "lowlight": {
-      "version": "1.20.0",
-      "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz",
-      "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==",
-      "requires": {
-        "fault": "^1.0.0",
-        "highlight.js": "~10.7.0"
-      }
-    },
     "lru-cache": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -22742,14 +21875,6 @@
         }
       }
     },
-    "markdown-table": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz",
-      "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==",
-      "requires": {
-        "repeat-string": "^1.0.0"
-      }
-    },
     "match-at": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/match-at/-/match-at-0.1.1.tgz",
@@ -22771,85 +21896,6 @@
         "unist-util-visit": "^2.0.0"
       }
     },
-    "mdast-util-find-and-replace": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz",
-      "integrity": "sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA==",
-      "requires": {
-        "escape-string-regexp": "^4.0.0",
-        "unist-util-is": "^4.0.0",
-        "unist-util-visit-parents": "^3.0.0"
-      }
-    },
-    "mdast-util-from-markdown": {
-      "version": "0.8.5",
-      "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz",
-      "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==",
-      "requires": {
-        "@types/mdast": "^3.0.0",
-        "mdast-util-to-string": "^2.0.0",
-        "micromark": "~2.11.0",
-        "parse-entities": "^2.0.0",
-        "unist-util-stringify-position": "^2.0.0"
-      }
-    },
-    "mdast-util-gfm": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz",
-      "integrity": "sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ==",
-      "requires": {
-        "mdast-util-gfm-autolink-literal": "^0.1.0",
-        "mdast-util-gfm-strikethrough": "^0.2.0",
-        "mdast-util-gfm-table": "^0.1.0",
-        "mdast-util-gfm-task-list-item": "^0.1.0",
-        "mdast-util-to-markdown": "^0.6.1"
-      }
-    },
-    "mdast-util-gfm-autolink-literal": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz",
-      "integrity": "sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A==",
-      "requires": {
-        "ccount": "^1.0.0",
-        "mdast-util-find-and-replace": "^1.1.0",
-        "micromark": "^2.11.3"
-      }
-    },
-    "mdast-util-gfm-strikethrough": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz",
-      "integrity": "sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA==",
-      "requires": {
-        "mdast-util-to-markdown": "^0.6.0"
-      }
-    },
-    "mdast-util-gfm-table": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz",
-      "integrity": "sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ==",
-      "requires": {
-        "markdown-table": "^2.0.0",
-        "mdast-util-to-markdown": "~0.6.0"
-      }
-    },
-    "mdast-util-gfm-task-list-item": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz",
-      "integrity": "sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A==",
-      "requires": {
-        "mdast-util-to-markdown": "~0.6.0"
-      }
-    },
-    "mdast-util-math": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-0.1.2.tgz",
-      "integrity": "sha512-fogAitds+wH+QRas78Yr1TwmQGN4cW/G2WRw5ePuNoJbBSPJCxIOCE8MTzHgWHVSpgkRaPQTgfzXRE1CrwWSlg==",
-      "requires": {
-        "longest-streak": "^2.0.0",
-        "mdast-util-to-markdown": "^0.6.0",
-        "repeat-string": "^1.0.0"
-      }
-    },
     "mdast-util-to-hast": {
       "version": "10.0.1",
       "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz",
@@ -22865,19 +21911,6 @@
         "unist-util-visit": "^2.0.0"
       }
     },
-    "mdast-util-to-markdown": {
-      "version": "0.6.5",
-      "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz",
-      "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==",
-      "requires": {
-        "@types/unist": "^2.0.0",
-        "longest-streak": "^2.0.0",
-        "mdast-util-to-string": "^2.0.0",
-        "parse-entities": "^2.0.0",
-        "repeat-string": "^1.0.0",
-        "zwitch": "^1.0.0"
-      }
-    },
     "mdast-util-to-string": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz",
@@ -22926,89 +21959,6 @@
       "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
       "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="
     },
-    "micromark": {
-      "version": "2.11.4",
-      "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz",
-      "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==",
-      "requires": {
-        "debug": "^4.0.0",
-        "parse-entities": "^2.0.0"
-      }
-    },
-    "micromark-extension-gfm": {
-      "version": "0.3.3",
-      "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz",
-      "integrity": "sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A==",
-      "requires": {
-        "micromark": "~2.11.0",
-        "micromark-extension-gfm-autolink-literal": "~0.5.0",
-        "micromark-extension-gfm-strikethrough": "~0.6.5",
-        "micromark-extension-gfm-table": "~0.4.0",
-        "micromark-extension-gfm-tagfilter": "~0.3.0",
-        "micromark-extension-gfm-task-list-item": "~0.3.0"
-      }
-    },
-    "micromark-extension-gfm-autolink-literal": {
-      "version": "0.5.7",
-      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz",
-      "integrity": "sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw==",
-      "requires": {
-        "micromark": "~2.11.3"
-      }
-    },
-    "micromark-extension-gfm-strikethrough": {
-      "version": "0.6.5",
-      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz",
-      "integrity": "sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw==",
-      "requires": {
-        "micromark": "~2.11.0"
-      }
-    },
-    "micromark-extension-gfm-table": {
-      "version": "0.4.3",
-      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz",
-      "integrity": "sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA==",
-      "requires": {
-        "micromark": "~2.11.0"
-      }
-    },
-    "micromark-extension-gfm-tagfilter": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz",
-      "integrity": "sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q=="
-    },
-    "micromark-extension-gfm-task-list-item": {
-      "version": "0.3.3",
-      "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz",
-      "integrity": "sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ==",
-      "requires": {
-        "micromark": "~2.11.0"
-      }
-    },
-    "micromark-extension-math": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-0.1.2.tgz",
-      "integrity": "sha512-ZJXsT2eVPM8VTmcw0CPSDeyonOn9SziGK3Z+nkf9Vb6xMPeU+4JMEnO6vzDL10562Favw8Vste74f54rxJ/i6Q==",
-      "requires": {
-        "katex": "^0.12.0",
-        "micromark": "~2.11.0"
-      },
-      "dependencies": {
-        "commander": {
-          "version": "2.20.3",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-          "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
-        },
-        "katex": {
-          "version": "0.12.0",
-          "resolved": "https://registry.npmjs.org/katex/-/katex-0.12.0.tgz",
-          "integrity": "sha512-y+8btoc/CK70XqcHqjxiGWBOeIL8upbS0peTPXTvgrh21n1RiWWcIpSWM+4uXq+IAgNh9YYQWdc7LVDPDAEEAg==",
-          "requires": {
-            "commander": "^2.19.0"
-          }
-        }
-      }
-    },
     "micromatch": {
       "version": "4.0.5",
       "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
@@ -24260,36 +23210,6 @@
         "react-textarea-autosize": "^8.3.2"
       }
     },
-    "react-jupyter-notebook": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/react-jupyter-notebook/-/react-jupyter-notebook-0.4.0.tgz",
-      "integrity": "sha512-puxAs7ACXIGbLcw/phxW5L3VPYFjFBkQzFdZaFeVTm9sATuwoLuSgcY8z7wPMqUyzu9cIApdRAKGCvDWRNuCNQ==",
-      "requires": {
-        "@codemirror/gutter": "^0.19.9",
-        "@codemirror/lang-javascript": "^0.19.7",
-        "@codemirror/view": "^0.19.47",
-        "ansi-to-react": "^6.1.4",
-        "katex": "^0.13.2",
-        "react": "^17.0.1",
-        "react-dom": "^17.0.1",
-        "react-markdown": "^6.0.2",
-        "react-syntax-highlighter": "^15.4.3",
-        "rehype-katex": "^5.0.0",
-        "remark-gfm": "^1.0.0",
-        "remark-math": "^4.0.0"
-      },
-      "dependencies": {
-        "remark-math": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/remark-math/-/remark-math-4.0.0.tgz",
-          "integrity": "sha512-lH7SoQenXtQrvL0bm+mjZbvOk//YWNuyR+MxV18Qyv8rgFmMEGNuB0TSCQDkoDaiJ40FCnG8lxErc/zhcedYbw==",
-          "requires": {
-            "mdast-util-math": "^0.1.0",
-            "micromark-extension-math": "^0.1.0"
-          }
-        }
-      }
-    },
     "react-lifecycles-compat": {
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
@@ -24372,41 +23292,6 @@
         "@babel/runtime": "^7.10.3"
       }
     },
-    "react-markdown": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-6.0.3.tgz",
-      "integrity": "sha512-kQbpWiMoBHnj9myLlmZG9T1JdoT/OEyHK7hqM6CqFT14MAkgWiWBUYijLyBmxbntaN6dCDicPcUhWhci1QYodg==",
-      "requires": {
-        "@types/hast": "^2.0.0",
-        "@types/unist": "^2.0.3",
-        "comma-separated-tokens": "^1.0.0",
-        "prop-types": "^15.7.2",
-        "property-information": "^5.3.0",
-        "react-is": "^17.0.0",
-        "remark-parse": "^9.0.0",
-        "remark-rehype": "^8.0.0",
-        "space-separated-tokens": "^1.1.0",
-        "style-to-object": "^0.3.0",
-        "unified": "^9.0.0",
-        "unist-util-visit": "^2.0.0",
-        "vfile": "^4.0.0"
-      },
-      "dependencies": {
-        "react-is": {
-          "version": "17.0.2",
-          "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
-          "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
-        },
-        "remark-parse": {
-          "version": "9.0.0",
-          "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz",
-          "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==",
-          "requires": {
-            "mdast-util-from-markdown": "^0.8.0"
-          }
-        }
-      }
-    },
     "react-router": {
       "version": "5.3.4",
       "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz",
@@ -24445,18 +23330,6 @@
         "tiny-warning": "^1.0.0"
       }
     },
-    "react-syntax-highlighter": {
-      "version": "15.5.0",
-      "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.5.0.tgz",
-      "integrity": "sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==",
-      "requires": {
-        "@babel/runtime": "^7.3.1",
-        "highlight.js": "^10.4.1",
-        "lowlight": "^1.17.0",
-        "prismjs": "^1.27.0",
-        "refractor": "^3.6.0"
-      }
-    },
     "react-textarea-autosize": {
       "version": "8.3.4",
       "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz",
@@ -24533,23 +23406,6 @@
         }
       }
     },
-    "refractor": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz",
-      "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==",
-      "requires": {
-        "hastscript": "^6.0.0",
-        "parse-entities": "^2.0.0",
-        "prismjs": "~1.27.0"
-      },
-      "dependencies": {
-        "prismjs": {
-          "version": "1.27.0",
-          "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz",
-          "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA=="
-        }
-      }
-    },
     "regenerate": {
       "version": "1.4.2",
       "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
@@ -24691,15 +23547,6 @@
       "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz",
       "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ=="
     },
-    "remark-gfm": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-1.0.0.tgz",
-      "integrity": "sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA==",
-      "requires": {
-        "mdast-util-gfm": "^0.1.0",
-        "micromark-extension-gfm": "^0.3.0"
-      }
-    },
     "remark-math": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/remark-math/-/remark-math-3.0.1.tgz",
@@ -24814,31 +23661,6 @@
         "xtend": "^4.0.1"
       }
     },
-    "remark-rehype": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-8.1.0.tgz",
-      "integrity": "sha512-EbCu9kHgAxKmW1yEYjx3QafMyGY3q8noUbNUI5xyKbaFP89wbhDrKxyIQNukNYthzjNHZu6J7hwFg7hRm1svYA==",
-      "requires": {
-        "mdast-util-to-hast": "^10.2.0"
-      },
-      "dependencies": {
-        "mdast-util-to-hast": {
-          "version": "10.2.0",
-          "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.2.0.tgz",
-          "integrity": "sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ==",
-          "requires": {
-            "@types/mdast": "^3.0.0",
-            "@types/unist": "^2.0.0",
-            "mdast-util-definitions": "^4.0.0",
-            "mdurl": "^1.0.0",
-            "unist-builder": "^2.0.0",
-            "unist-util-generated": "^1.0.0",
-            "unist-util-position": "^3.0.0",
-            "unist-util-visit": "^2.0.0"
-          }
-        }
-      }
-    },
     "remark-squeeze-paragraphs": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz",
@@ -25610,11 +24432,6 @@
       "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
       "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
     },
-    "style-mod": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.0.tgz",
-      "integrity": "sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw=="
-    },
     "style-to-object": {
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz",
@@ -26325,11 +25142,6 @@
       "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz",
       "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w=="
     },
-    "w3c-keyname": {
-      "version": "2.2.6",
-      "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.6.tgz",
-      "integrity": "sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg=="
-    },
     "wait-on": {
       "version": "6.0.1",
       "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz",
diff --git a/package.json b/package.json
index 92dd6631d..f11bc0f81 100644
--- a/package.json
+++ b/package.json
@@ -31,7 +31,6 @@
     "prism-react-renderer": "^1.3.5",
     "react": "^17.0.2",
     "react-dom": "^17.0.2",
-    "react-jupyter-notebook": "^0.4.0",
     "react-zoom-pan-pinch": "^2.1.3",
     "rehype-katex": "^5.0.0",
     "remark-math": "^3.0.1"

From 586fa0117e775d29415f4bf3c82ad9b1bf3ab5dc Mon Sep 17 00:00:00 2001
From: chvmvd <chvmvd@users.noreply.github.com>
Date: Sat, 3 Dec 2022 17:47:09 +0900
Subject: [PATCH 03/16] =?UTF-8?q?output=E3=81=AB=E3=82=B9=E3=82=BF?=
 =?UTF-8?q?=E3=82=A4=E3=83=AB=E3=82=92=E3=81=A4=E3=81=91=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/ViewSource/ViewSource.tsx    | 13 ++++++++-----
 src/components/ViewSource/styles.module.css |  5 +++++
 2 files changed, 13 insertions(+), 5 deletions(-)
 create mode 100644 src/components/ViewSource/styles.module.css

diff --git a/src/components/ViewSource/ViewSource.tsx b/src/components/ViewSource/ViewSource.tsx
index d0658f979..75370db68 100644
--- a/src/components/ViewSource/ViewSource.tsx
+++ b/src/components/ViewSource/ViewSource.tsx
@@ -1,6 +1,7 @@
 import React, { useState, useEffect } from "react";
 import CodeBlock from "@theme/CodeBlock";
 import OpenInColab from "../OpenInColab/OpenInColab";
+import styles from "./styles.module.css";
 
 type MarkdownCell = { cell_type: "markdown"; source: string };
 type CodeCell = { cell_type: "code"; source: string; outputs: string };
@@ -91,11 +92,13 @@ export default function ViewSource({
                 <CodeBlock language="python">{cell.source}</CodeBlock>
               )}
               {!noOutput && cell.outputs != null && (
-                <iframe
-                  width="100%"
-                  srcDoc={cell.outputs}
-                  title="Code Output"
-                />
+                <div className={styles.iframeWrapper}>
+                  <iframe
+                    width="100%"
+                    srcDoc={cell.outputs}
+                    title="Code Output"
+                  />
+                </div>
               )}
             </>
           )}
diff --git a/src/components/ViewSource/styles.module.css b/src/components/ViewSource/styles.module.css
new file mode 100644
index 000000000..6ed69c5b6
--- /dev/null
+++ b/src/components/ViewSource/styles.module.css
@@ -0,0 +1,5 @@
+.iframeWrapper {
+  border-radius: 8px;
+  background-color: #eee;
+  margin-bottom: 5px;
+}

From 15da00e8d39118847a7f7d4e21b21bd266f0d962 Mon Sep 17 00:00:00 2001
From: chvmvd <chvmvd@users.noreply.github.com>
Date: Sat, 3 Dec 2022 19:27:55 +0900
Subject: [PATCH 04/16] introduce ansi-to-html

---
 package-lock.json | 38 ++++++++++++++++++++++++++++++++++++++
 package.json      |  1 +
 2 files changed, 39 insertions(+)

diff --git a/package-lock.json b/package-lock.json
index d046971f2..646ad7350 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -17,6 +17,7 @@
         "@monaco-editor/react": "^4.4.6",
         "@mui/icons-material": "^5.10.15",
         "@mui/material": "^5.10.15",
+        "ansi-to-html": "^0.7.2",
         "clsx": "^1.2.1",
         "hast-util-is-element": "^1.1.0",
         "markdown-it": "^13.0.1",
@@ -4739,6 +4740,28 @@
         "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
+    "node_modules/ansi-to-html": {
+      "version": "0.7.2",
+      "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.7.2.tgz",
+      "integrity": "sha512-v6MqmEpNlxF+POuyhKkidusCHWWkaLcGRURzivcU3I9tv7k4JVhFcnukrM5Rlk2rUywdZuzYAZ+kbZqWCnfN3g==",
+      "dependencies": {
+        "entities": "^2.2.0"
+      },
+      "bin": {
+        "ansi-to-html": "bin/ansi-to-html"
+      },
+      "engines": {
+        "node": ">=8.0.0"
+      }
+    },
+    "node_modules/ansi-to-html/node_modules/entities": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+      "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+      "funding": {
+        "url": "https://github.com/fb55/entities?sponsor=1"
+      }
+    },
     "node_modules/anymatch": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
@@ -18308,6 +18331,21 @@
         "color-convert": "^2.0.1"
       }
     },
+    "ansi-to-html": {
+      "version": "0.7.2",
+      "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.7.2.tgz",
+      "integrity": "sha512-v6MqmEpNlxF+POuyhKkidusCHWWkaLcGRURzivcU3I9tv7k4JVhFcnukrM5Rlk2rUywdZuzYAZ+kbZqWCnfN3g==",
+      "requires": {
+        "entities": "^2.2.0"
+      },
+      "dependencies": {
+        "entities": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+          "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="
+        }
+      }
+    },
     "anymatch": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
diff --git a/package.json b/package.json
index f11bc0f81..4a7ff8903 100644
--- a/package.json
+++ b/package.json
@@ -24,6 +24,7 @@
     "@monaco-editor/react": "^4.4.6",
     "@mui/icons-material": "^5.10.15",
     "@mui/material": "^5.10.15",
+    "ansi-to-html": "^0.7.2",
     "clsx": "^1.2.1",
     "hast-util-is-element": "^1.1.0",
     "markdown-it": "^13.0.1",

From bfa053c95805dcd8f933bfe276e8fca08c15237f Mon Sep 17 00:00:00 2001
From: chvmvd <chvmvd@users.noreply.github.com>
Date: Sat, 3 Dec 2022 22:40:54 +0900
Subject: [PATCH 05/16] =?UTF-8?q?output=E3=82=92=E8=A8=AD=E5=AE=9A?=
 =?UTF-8?q?=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/ViewSource/ViewSource.tsx    | 82 ++++++++++++++-------
 src/components/ViewSource/styles.module.css |  1 -
 2 files changed, 55 insertions(+), 28 deletions(-)

diff --git a/src/components/ViewSource/ViewSource.tsx b/src/components/ViewSource/ViewSource.tsx
index 75370db68..56b50a31d 100644
--- a/src/components/ViewSource/ViewSource.tsx
+++ b/src/components/ViewSource/ViewSource.tsx
@@ -1,40 +1,76 @@
 import React, { useState, useEffect } from "react";
+import Convert from "ansi-to-html";
 import CodeBlock from "@theme/CodeBlock";
 import OpenInColab from "../OpenInColab/OpenInColab";
 import styles from "./styles.module.css";
 
+const convert = new Convert({ newline: true });
 type MarkdownCell = { cell_type: "markdown"; source: string };
-type CodeCell = { cell_type: "code"; source: string; outputs: string };
+type CodeCell = { cell_type: "code"; source: string; outputs: JSX.Element[] };
 type NotebookData = [...(MarkdownCell | CodeCell)[]];
 
-// \n => <br/>
-function getOutputs(outputs): string {
-  let html = "";
-  for (const output of outputs) {
+function toIframe(key, input, error = false) {
+  return (
+    <div
+      className={styles.iframeWrapper}
+      style={{ backgroundColor: error ? "red" : "#eee" }}
+      key={key}
+    >
+      <iframe width="100%" srcDoc={input} title="Code Output" />
+    </div>
+  );
+}
+
+function toHTML(type: "text" | "html" | "png" | "js", input) {
+  switch (type) {
+    case "text":
+      return convert.toHtml(input);
+    case "html":
+      return input;
+    case "png":
+      return `<img src="data:image/png;base64,${input}"></img>`;
+    case "js":
+      return `<script>${input}</script>`;
+  }
+}
+
+function getOutput(outputs): JSX.Element[] {
+  const result: JSX.Element[] = [];
+  outputs.forEach((output, i) => {
     switch (output.output_type) {
       case "stream":
-        html += output.text.join("");
+        result.push(toIframe(i, toHTML("text", output.text.join(""))));
         break;
-      case "execute_result":
+      case "execute_result": {
+        const item = [];
         if (output.data["text/plain"] != null)
-          html += output.data["text/plain"].join("");
-        if (output.data["text/html"]) html += output.data["text/html"].join("");
+          item.push(toHTML("text", output.data["text/plain"].join("")));
+        if (output.data["text/html"] != null)
+          item.push(toHTML("html", output.data["text/html"].join("")));
+        result.push(toIframe(i, item.join("")));
         break;
+      }
       case "error":
-        html += output.traceback.join("");
+        result.push(
+          toIframe(i, toHTML("text", output.traceback.join("")), true),
+        );
         break;
-      case "display_data":
+      case "display_data": {
+        const item = [];
         if (output.data["text/plain"] != null)
-          html += output.data["text/plain"].join("");
+          item.push(toHTML("text", output.data["text/plain"].join("")));
         if (output.data["text/html"] != null)
-          html += output.data["text/html"].join("");
+          item.push(toHTML("html", output.data["text/html"].join("")));
         if (output.data["application/javascript"] != null)
-          html += output.data["application/javascript"];
-        if (output.data["image/png"] != null) html += output.data["image/png"];
+          item.push(toHTML("js", output.data["application/javascript"]));
+        if (output.data["image/png"] != null)
+          item.push(toHTML("png", output.data["image/png"]));
+        result.push(toIframe(i, item.join("")));
         break;
+      }
     }
-  }
-  return html;
+  });
+  return result;
 }
 
 function getNotebookData(notebook): NotebookData {
@@ -51,7 +87,7 @@ function getNotebookData(notebook): NotebookData {
         notebookData.push({
           cell_type: "code",
           source: cell.source.length === 0 ? null : cell.source.join(""),
-          outputs: cell.outputs.length === 0 ? null : getOutputs(cell.outputs),
+          outputs: cell.outputs.length === 0 ? null : getOutput(cell.outputs),
         });
         break;
     }
@@ -91,15 +127,7 @@ export default function ViewSource({
               {cell.source != null && (
                 <CodeBlock language="python">{cell.source}</CodeBlock>
               )}
-              {!noOutput && cell.outputs != null && (
-                <div className={styles.iframeWrapper}>
-                  <iframe
-                    width="100%"
-                    srcDoc={cell.outputs}
-                    title="Code Output"
-                  />
-                </div>
-              )}
+              {!noOutput && cell.outputs != null && cell.outputs}
             </>
           )}
         </React.Fragment>
diff --git a/src/components/ViewSource/styles.module.css b/src/components/ViewSource/styles.module.css
index 6ed69c5b6..0bcee5f33 100644
--- a/src/components/ViewSource/styles.module.css
+++ b/src/components/ViewSource/styles.module.css
@@ -1,5 +1,4 @@
 .iframeWrapper {
   border-radius: 8px;
-  background-color: #eee;
   margin-bottom: 5px;
 }

From 20e24bf16a2a5d661c7450d92a8448070cc4c530 Mon Sep 17 00:00:00 2001
From: chvmvd <chvmvd@users.noreply.github.com>
Date: Sun, 4 Dec 2022 11:41:06 +0900
Subject: [PATCH 06/16] =?UTF-8?q?iframe=E3=81=AE=E9=AB=98=E3=81=95?=
 =?UTF-8?q?=E3=82=92=E8=87=AA=E5=8B=95=E8=AA=BF=E6=95=B4=E3=81=99=E3=82=8B?=
 =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/ViewSource/ViewSource.tsx | 81 +++++++++++++++---------
 1 file changed, 50 insertions(+), 31 deletions(-)

diff --git a/src/components/ViewSource/ViewSource.tsx b/src/components/ViewSource/ViewSource.tsx
index 56b50a31d..5206e981d 100644
--- a/src/components/ViewSource/ViewSource.tsx
+++ b/src/components/ViewSource/ViewSource.tsx
@@ -6,22 +6,15 @@ import styles from "./styles.module.css";
 
 const convert = new Convert({ newline: true });
 type MarkdownCell = { cell_type: "markdown"; source: string };
-type CodeCell = { cell_type: "code"; source: string; outputs: JSX.Element[] };
+type CodeCell = {
+  cell_type: "code";
+  source: string;
+  outputs: string;
+  cellColor: string;
+};
 type NotebookData = [...(MarkdownCell | CodeCell)[]];
 
-function toIframe(key, input, error = false) {
-  return (
-    <div
-      className={styles.iframeWrapper}
-      style={{ backgroundColor: error ? "red" : "#eee" }}
-      key={key}
-    >
-      <iframe width="100%" srcDoc={input} title="Code Output" />
-    </div>
-  );
-}
-
-function toHTML(type: "text" | "html" | "png" | "js", input) {
+function toHTML(type: "text" | "html" | "png" | "js", input): string {
   switch (type) {
     case "text":
       return convert.toHtml(input);
@@ -34,26 +27,26 @@ function toHTML(type: "text" | "html" | "png" | "js", input) {
   }
 }
 
-function getOutput(outputs): JSX.Element[] {
-  const result: JSX.Element[] = [];
-  outputs.forEach((output, i) => {
+function getOutput(outputs): { result: string; isError: boolean } {
+  const results: string[] = [];
+  let isError = false;
+  for (const output of outputs) {
     switch (output.output_type) {
       case "stream":
-        result.push(toIframe(i, toHTML("text", output.text.join(""))));
+        results.push(toHTML("text", output.text.join("")));
         break;
       case "execute_result": {
-        const item = [];
+        const data = [];
         if (output.data["text/plain"] != null)
-          item.push(toHTML("text", output.data["text/plain"].join("")));
+          data.push(toHTML("text", output.data["text/plain"].join("")));
         if (output.data["text/html"] != null)
-          item.push(toHTML("html", output.data["text/html"].join("")));
-        result.push(toIframe(i, item.join("")));
+          data.push(toHTML("html", output.data["text/html"].join("")));
+        results.push(data.join(""));
         break;
       }
       case "error":
-        result.push(
-          toIframe(i, toHTML("text", output.traceback.join("")), true),
-        );
+        results.push(toHTML("text", output.traceback.join("")));
+        isError = true;
         break;
       case "display_data": {
         const item = [];
@@ -65,12 +58,13 @@ function getOutput(outputs): JSX.Element[] {
           item.push(toHTML("js", output.data["application/javascript"]));
         if (output.data["image/png"] != null)
           item.push(toHTML("png", output.data["image/png"]));
-        result.push(toIframe(i, item.join("")));
+        results.push(item.join(""));
         break;
       }
     }
-  });
-  return result;
+  }
+  const result = results.join("");
+  return { result, isError };
 }
 
 function getNotebookData(notebook): NotebookData {
@@ -83,13 +77,16 @@ function getNotebookData(notebook): NotebookData {
           source: cell.source.length === 0 ? null : cell.source.join(""),
         });
         break;
-      case "code":
+      case "code": {
+        const { result, isError } = getOutput(cell.outputs);
         notebookData.push({
           cell_type: "code",
           source: cell.source.length === 0 ? null : cell.source.join(""),
-          outputs: cell.outputs.length === 0 ? null : getOutput(cell.outputs),
+          outputs: cell.outputs.length === 0 ? null : result,
+          cellColor: isError ? "#ffdddc" : "#eee",
         });
         break;
+      }
     }
   }
   return notebookData;
@@ -127,7 +124,29 @@ export default function ViewSource({
               {cell.source != null && (
                 <CodeBlock language="python">{cell.source}</CodeBlock>
               )}
-              {!noOutput && cell.outputs != null && cell.outputs}
+              {!noOutput && cell.outputs != null && (
+                <div
+                  className={styles.iframeWrapper}
+                  style={{ backgroundColor: cell.cellColor }}
+                >
+                  <iframe
+                    id={`${path}${i}`}
+                    height="40px"
+                    width="100%"
+                    srcDoc={cell.outputs}
+                    onLoad={() => {
+                      const iframe = document.getElementById(
+                        `${path}${i}`,
+                      ) as HTMLIFrameElement;
+                      if (iframe !== null)
+                        iframe.style.height =
+                          iframe.contentDocument.documentElement.scrollHeight +
+                          "px";
+                    }}
+                    title="Code Output"
+                  />
+                </div>
+              )}
             </>
           )}
         </React.Fragment>

From c15d6e3fe9804f155067d46cccfe24ea5f9feb19 Mon Sep 17 00:00:00 2001
From: chvmvd <chvmvd@users.noreply.github.com>
Date: Sun, 4 Dec 2022 12:00:18 +0900
Subject: [PATCH 07/16] =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?=
 =?UTF-8?q?=E3=81=AA=E3=81=A9=E3=82=92=E3=81=A4=E3=81=91=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/ViewSource/ViewSource.tsx | 36 +++++++++++++++++-------
 1 file changed, 26 insertions(+), 10 deletions(-)

diff --git a/src/components/ViewSource/ViewSource.tsx b/src/components/ViewSource/ViewSource.tsx
index 5206e981d..c730bf848 100644
--- a/src/components/ViewSource/ViewSource.tsx
+++ b/src/components/ViewSource/ViewSource.tsx
@@ -4,7 +4,6 @@ import CodeBlock from "@theme/CodeBlock";
 import OpenInColab from "../OpenInColab/OpenInColab";
 import styles from "./styles.module.css";
 
-const convert = new Convert({ newline: true });
 type MarkdownCell = { cell_type: "markdown"; source: string };
 type CodeCell = {
   cell_type: "code";
@@ -14,7 +13,14 @@ type CodeCell = {
 };
 type NotebookData = [...(MarkdownCell | CodeCell)[]];
 
-function toHTML(type: "text" | "html" | "png" | "js", input): string {
+/**
+ * 各種データをHTMLに変換
+ * @param type 変換するデータの種類
+ * @param input 入力
+ * @returns HTML形式の出力
+ */
+function toHTML(type: "text" | "html" | "js" | "png", input: string): string {
+  const convert = new Convert({ newline: true });
   switch (type) {
     case "text":
       return convert.toHtml(input);
@@ -27,9 +33,15 @@ function toHTML(type: "text" | "html" | "png" | "js", input): string {
   }
 }
 
-function getOutput(outputs): { result: string; isError: boolean } {
+/**
+ * ipynbのoutputsオブジェクトをHTML形式に変換
+ * @param outputs ipynbのoutputsオブジェクト
+ * @returns HTML形式の出力とセルの種類
+ */
+type CellType = "normal" | "error";
+function getOutput(outputs): { result: string; cellType: CellType } {
   const results: string[] = [];
-  let isError = false;
+  let cellType: CellType = "normal";
   for (const output of outputs) {
     switch (output.output_type) {
       case "stream":
@@ -46,7 +58,7 @@ function getOutput(outputs): { result: string; isError: boolean } {
       }
       case "error":
         results.push(toHTML("text", output.traceback.join("")));
-        isError = true;
+        cellType = "error";
         break;
       case "display_data": {
         const item = [];
@@ -64,9 +76,14 @@ function getOutput(outputs): { result: string; isError: boolean } {
     }
   }
   const result = results.join("");
-  return { result, isError };
+  return { result, cellType };
 }
 
+/**
+ * Notebookのデータを読み取る
+ * @param notebook Notebookのオブジェクト
+ * @returns 読み取った情報
+ */
 function getNotebookData(notebook): NotebookData {
   const notebookData: NotebookData = [];
   for (const cell of notebook.cells) {
@@ -78,12 +95,12 @@ function getNotebookData(notebook): NotebookData {
         });
         break;
       case "code": {
-        const { result, isError } = getOutput(cell.outputs);
+        const { result, cellType } = getOutput(cell.outputs);
         notebookData.push({
           cell_type: "code",
           source: cell.source.length === 0 ? null : cell.source.join(""),
           outputs: cell.outputs.length === 0 ? null : result,
-          cellColor: isError ? "#ffdddc" : "#eee",
+          cellColor: cellType === "normal" ? "#eee" : "#ffdddc",
         });
         break;
       }
@@ -94,11 +111,10 @@ function getNotebookData(notebook): NotebookData {
 
 /**
  * ipynbファイルからソースコードと出力、OpenInColabへのリンクを生成
- * @param param0 現在ファイルからのipynbへの相対パス
+ * @param param0 ipynbへのパス
  * @param param1 Pythonの出力を表示するか
  * @returns ソースコードと出力、OpenInColabへのリンク
  */
-
 export default function ViewSource({
   path,
   noOutput = false,

From 3209d62679ae4d2063170c7c40d4eaccaca20f97 Mon Sep 17 00:00:00 2001
From: chvmvd <chvmvd@users.noreply.github.com>
Date: Sun, 4 Dec 2022 13:08:41 +0900
Subject: [PATCH 08/16] =?UTF-8?q?DOM=E3=81=AE=E6=93=8D=E4=BD=9C=E3=81=8B?=
 =?UTF-8?q?=E3=82=89e.target=E3=81=AB=E5=A4=89=E3=81=88=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/ViewSource/ViewSource.tsx | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

diff --git a/src/components/ViewSource/ViewSource.tsx b/src/components/ViewSource/ViewSource.tsx
index c730bf848..a47cdfb1f 100644
--- a/src/components/ViewSource/ViewSource.tsx
+++ b/src/components/ViewSource/ViewSource.tsx
@@ -146,18 +146,15 @@ export default function ViewSource({
                   style={{ backgroundColor: cell.cellColor }}
                 >
                   <iframe
-                    id={`${path}${i}`}
                     height="40px"
                     width="100%"
+                    style={{ minHeight: "40px" }}
                     srcDoc={cell.outputs}
-                    onLoad={() => {
-                      const iframe = document.getElementById(
-                        `${path}${i}`,
-                      ) as HTMLIFrameElement;
-                      if (iframe !== null)
-                        iframe.style.height =
-                          iframe.contentDocument.documentElement.scrollHeight +
-                          "px";
+                    onLoad={(e) => {
+                      const iframe = e.target as HTMLIFrameElement;
+                      iframe.height =
+                        iframe.contentDocument.documentElement.scrollHeight +
+                        "px";
                     }}
                     title="Code Output"
                   />

From 513c621145dd9a16f731f3dfaf74bac27ba11251 Mon Sep 17 00:00:00 2001
From: chvmvd <chvmvd@users.noreply.github.com>
Date: Sun, 4 Dec 2022 13:38:10 +0900
Subject: [PATCH 09/16] =?UTF-8?q?OutputCell=E3=82=92=E9=96=A2=E6=95=B0?=
 =?UTF-8?q?=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/ViewSource/ViewSource.tsx | 58 ++++++++++++++++--------
 1 file changed, 40 insertions(+), 18 deletions(-)

diff --git a/src/components/ViewSource/ViewSource.tsx b/src/components/ViewSource/ViewSource.tsx
index a47cdfb1f..c5150527e 100644
--- a/src/components/ViewSource/ViewSource.tsx
+++ b/src/components/ViewSource/ViewSource.tsx
@@ -109,6 +109,43 @@ function getNotebookData(notebook): NotebookData {
   return notebookData;
 }
 
+/**
+ * セルをiframeで出力
+ * @param param0 出力するもの
+ * @param param1 セルの色
+ * @param param2 セルのタイトル
+ * @returns iframe
+ */
+function OutputCell({
+  children: output,
+  cellColor,
+  title,
+}: {
+  children: string;
+  cellColor: string;
+  title: string;
+}): JSX.Element {
+  return (
+    <div
+      className={styles.iframeWrapper}
+      style={{ backgroundColor: cellColor }}
+    >
+      <iframe
+        height="40px"
+        width="100%"
+        style={{ minHeight: "40px" }}
+        srcDoc={output}
+        onLoad={(e) => {
+          const iframe = e.target as HTMLIFrameElement;
+          iframe.height =
+            iframe.contentDocument.documentElement.scrollHeight + "px";
+        }}
+        title={title}
+      />
+    </div>
+  );
+}
+
 /**
  * ipynbファイルからソースコードと出力、OpenInColabへのリンクを生成
  * @param param0 ipynbへのパス
@@ -141,24 +178,9 @@ export default function ViewSource({
                 <CodeBlock language="python">{cell.source}</CodeBlock>
               )}
               {!noOutput && cell.outputs != null && (
-                <div
-                  className={styles.iframeWrapper}
-                  style={{ backgroundColor: cell.cellColor }}
-                >
-                  <iframe
-                    height="40px"
-                    width="100%"
-                    style={{ minHeight: "40px" }}
-                    srcDoc={cell.outputs}
-                    onLoad={(e) => {
-                      const iframe = e.target as HTMLIFrameElement;
-                      iframe.height =
-                        iframe.contentDocument.documentElement.scrollHeight +
-                        "px";
-                    }}
-                    title="Code Output"
-                  />
-                </div>
+                <OutputCell cellColor={cell.cellColor} title="Code Output">
+                  {cell.outputs}
+                </OutputCell>
               )}
             </>
           )}

From 56ffe681505f96704457d00b07fa37e15173b69b Mon Sep 17 00:00:00 2001
From: chvmvd <chvmvd@users.noreply.github.com>
Date: Sun, 4 Dec 2022 13:39:44 +0900
Subject: [PATCH 10/16] rename cell.outputs => cell.output

---
 src/components/ViewSource/ViewSource.tsx | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/components/ViewSource/ViewSource.tsx b/src/components/ViewSource/ViewSource.tsx
index c5150527e..c2c0a8125 100644
--- a/src/components/ViewSource/ViewSource.tsx
+++ b/src/components/ViewSource/ViewSource.tsx
@@ -8,7 +8,7 @@ type MarkdownCell = { cell_type: "markdown"; source: string };
 type CodeCell = {
   cell_type: "code";
   source: string;
-  outputs: string;
+  output: string;
   cellColor: string;
 };
 type NotebookData = [...(MarkdownCell | CodeCell)[]];
@@ -99,7 +99,7 @@ function getNotebookData(notebook): NotebookData {
         notebookData.push({
           cell_type: "code",
           source: cell.source.length === 0 ? null : cell.source.join(""),
-          outputs: cell.outputs.length === 0 ? null : result,
+          output: cell.outputs.length === 0 ? null : result,
           cellColor: cellType === "normal" ? "#eee" : "#ffdddc",
         });
         break;
@@ -177,9 +177,9 @@ export default function ViewSource({
               {cell.source != null && (
                 <CodeBlock language="python">{cell.source}</CodeBlock>
               )}
-              {!noOutput && cell.outputs != null && (
+              {!noOutput && cell.output != null && (
                 <OutputCell cellColor={cell.cellColor} title="Code Output">
-                  {cell.outputs}
+                  {cell.output}
                 </OutputCell>
               )}
             </>

From dab91115f5b02d621ac639bb9fbac8aeb30244c0 Mon Sep 17 00:00:00 2001
From: chvmvd <chvmvd@users.noreply.github.com>
Date: Sun, 4 Dec 2022 13:54:56 +0900
Subject: [PATCH 11/16] =?UTF-8?q?mdToHTML=E3=82=92=E9=96=A2=E6=95=B0?=
 =?UTF-8?q?=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../InteractiveCodeEditor.tsx                 | 40 +-----------------
 src/components/mdToHTML.ts                    | 41 +++++++++++++++++++
 2 files changed, 43 insertions(+), 38 deletions(-)
 create mode 100644 src/components/mdToHTML.ts

diff --git a/src/components/InteractiveCodeEditor/InteractiveCodeEditor.tsx b/src/components/InteractiveCodeEditor/InteractiveCodeEditor.tsx
index 4647be7a9..b0387b8f5 100644
--- a/src/components/InteractiveCodeEditor/InteractiveCodeEditor.tsx
+++ b/src/components/InteractiveCodeEditor/InteractiveCodeEditor.tsx
@@ -2,9 +2,8 @@ import React, { useState } from "react";
 import Tabs from "@theme/Tabs";
 import TabItem from "@theme/TabItem";
 import Editor from "@monaco-editor/react";
-import MarkdownIt from "markdown-it";
-import mk from "markdown-it-katex";
 import BrowserWindow from "@site/src/components/BrowserWindow";
+import mdToHTML from "@site/src/components/mdToHTML";
 import styles from "./styles.module.css";
 
 export default function InteractiveCodeEditor({
@@ -24,41 +23,6 @@ export default function InteractiveCodeEditor({
   const [html, setHTML] = useState<string>(defaultHTML);
   const [css, setCSS] = useState<string>(defaultCSS);
   const [js, setJS] = useState<string>(defaultJavaScript);
-  const md = new MarkdownIt({ html: true, linkify: true, typographer: true });
-  md.use(mk);
-  const markdownDefaultValue = `
-<style>
-  blockquote {
-    margin: 0;
-  }
-
-  blockquote p {
-    padding: 15px;
-    background: #eee;
-    border-radius: 5px;
-  }
-
-  blockquote p::before {
-    content: '\\201C';
-  }
-
-  blockquote p::after {
-    content: '\\201D';
-  }
-
-  code {
-    background-color: #eee;
-    border-radius: 3px;
-    font-family: courier, monospace;
-    padding: 0 3px;
-  }
-  pre code {
-    padding: 20px 5px;
-  }
-</style>
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.5.1/katex.min.css"/>
-<link rel="stylesheet" href="https://cdn.jsdelivr.net/github-markdown-css/2.2.1/github-markdown.css"/>
-`;
 
   function latexRender(value: string) {
     const header = `\
@@ -140,7 +104,7 @@ export default function InteractiveCodeEditor({
                 language === "html"
                   ? code
                   : language === "markdown"
-                  ? markdownDefaultValue + md.render(code)
+                  ? mdToHTML(code)
                   : language === "latex"
                   ? latexRender(code)
                   : `<style>${css}</style>${html}<script>${js}</script>`
diff --git a/src/components/mdToHTML.ts b/src/components/mdToHTML.ts
new file mode 100644
index 000000000..9a55a84f8
--- /dev/null
+++ b/src/components/mdToHTML.ts
@@ -0,0 +1,41 @@
+import MarkdownIt from "markdown-it";
+import mk from "markdown-it-katex";
+
+export default function mdToHTML(mdCode) {
+  const md = new MarkdownIt({ html: true, linkify: true, typographer: true });
+  md.use(mk);
+  const markdownDefaultValue = `
+<style>
+  blockquote {
+    margin: 0;
+  }
+
+  blockquote p {
+    padding: 15px;
+    background: #eee;
+    border-radius: 5px;
+  }
+
+  blockquote p::before {
+    content: '\\201C';
+  }
+
+  blockquote p::after {
+    content: '\\201D';
+  }
+
+  code {
+    background-color: #eee;
+    border-radius: 3px;
+    font-family: courier, monospace;
+    padding: 0 3px;
+  }
+  pre code {
+    padding: 20px 5px;
+  }
+</style>
+<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.5.1/katex.min.css"/>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/github-markdown-css/2.2.1/github-markdown.css"/>
+`;
+  return markdownDefaultValue + md.render(mdCode);
+}

From 59280d96ef39ae92023f488ad68487b3fbb51ea3 Mon Sep 17 00:00:00 2001
From: chvmvd <chvmvd@users.noreply.github.com>
Date: Sun, 4 Dec 2022 14:05:03 +0900
Subject: [PATCH 12/16] =?UTF-8?q?Markdown=E3=81=AE=E3=82=BB=E3=83=AB?=
 =?UTF-8?q?=E3=81=AB=E3=82=82=E5=AF=BE=E5=BF=9C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/ViewSource/ViewSource.tsx | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/components/ViewSource/ViewSource.tsx b/src/components/ViewSource/ViewSource.tsx
index c2c0a8125..dfc5adc32 100644
--- a/src/components/ViewSource/ViewSource.tsx
+++ b/src/components/ViewSource/ViewSource.tsx
@@ -1,7 +1,8 @@
 import React, { useState, useEffect } from "react";
 import Convert from "ansi-to-html";
 import CodeBlock from "@theme/CodeBlock";
-import OpenInColab from "../OpenInColab/OpenInColab";
+import mdToHTML from "@site/src/components/mdToHTML";
+import OpenInColab from "@site/src/components/OpenInColab/OpenInColab";
 import styles from "./styles.module.css";
 
 type MarkdownCell = { cell_type: "markdown"; source: string };
@@ -171,7 +172,11 @@ export default function ViewSource({
     <>
       {notebookData.map((cell, i) => (
         <React.Fragment key={i}>
-          {cell.cell_type === "markdown" && cell.source != null && cell.source}
+          {cell.cell_type === "markdown" && cell.source != null && (
+            <OutputCell cellColor="#f8f8f8" title="Markdown Code">
+              {mdToHTML(cell.source)}
+            </OutputCell>
+          )}
           {cell.cell_type === "code" && (
             <>
               {cell.source != null && (

From 2df5a5de7e10fa45c7bff72146dba7bc5ed295ce Mon Sep 17 00:00:00 2001
From: chvmvd <chvmvd@users.noreply.github.com>
Date: Sun, 4 Dec 2022 14:07:33 +0900
Subject: [PATCH 13/16] =?UTF-8?q?noOutput=E3=82=92=E5=A4=96=E3=81=97?=
 =?UTF-8?q?=E3=81=9F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 docs/02advanced/01life-game/index.mdx  | 8 ++++----
 docs/02advanced/03simulation/index.mdx | 7 ++-----
 2 files changed, 6 insertions(+), 9 deletions(-)

diff --git a/docs/02advanced/01life-game/index.mdx b/docs/02advanced/01life-game/index.mdx
index 94b127fb3..27c298b26 100644
--- a/docs/02advanced/01life-game/index.mdx
+++ b/docs/02advanced/01life-game/index.mdx
@@ -88,7 +88,7 @@ import LifeGame from "@site/src/components/LifeGame/LifeGame";
 
 早速、ライフゲームの Python でのプログラムを見てみましょう。この後、詳しく解説するので、分からなくても構いません。`Open in Colab` と書いてあるボタンを押してから実行して、実際に動く様子を確認してみてください。
 
-<ViewSource path="/life-game/life_game.ipynb" noOutput />
+<ViewSource path="/life-game/life_game.ipynb" />
 
 それでは、実際に詳しく見ていきましょう。
 
@@ -139,7 +139,7 @@ ita.array.make2d(行数,列数)
 
 これらを使ってあげると、次のようなプログラムになるはずです。
 
-<ViewSource path="/life-game/next_generation.ipynb" noOutput />
+<ViewSource path="/life-game/next_generation.ipynb" />
 
 次の世代の盤面を計算することができたので、次は指定した世代までの盤面を計算する関数を作りましょう。
 
@@ -151,7 +151,7 @@ ita.array.make1d(要素数)
 
 これを用いて、引数を `board` と世代数 `n` にすると、次のようにプログラムを書けます。
 
-<ViewSource path="/life-game/life_game_func.ipynb" noOutput />
+<ViewSource path="/life-game/life_game_func.ipynb" />
 
 後はこれをアニメーションにしてあげれば、完成です。
 
@@ -175,4 +175,4 @@ ita.plot.animation_show(三次元配列)
 
 今までのをすべて合わせると、次のようになって冒頭のプログラムができました。
 
-<ViewSource path="/life-game/life_game.ipynb" noOutput />
+<ViewSource path="/life-game/life_game.ipynb" />
diff --git a/docs/02advanced/03simulation/index.mdx b/docs/02advanced/03simulation/index.mdx
index e5e5a0e29..38a3a2a42 100644
--- a/docs/02advanced/03simulation/index.mdx
+++ b/docs/02advanced/03simulation/index.mdx
@@ -77,13 +77,10 @@ $$
 
 可視化すると、次のようになります。
 
-<ViewSource path="/simulation/uniform_linear_motion_view.ipynb" noOutput />
+<ViewSource path="/simulation/uniform_linear_motion_view.ipynb" />
 
 :::note
 解析解を使うと次のようになります。
 
-<ViewSource
-  path="/simulation/uniform_linear_motion_view_analytical.ipynb"
-  noOutput
-/>
+<ViewSource path="/simulation/uniform_linear_motion_view_analytical.ipynb" />
 :::

From 56cf37b000d329a4534577731a710d725c8a64b1 Mon Sep 17 00:00:00 2001
From: chvmvd <chvmvd@users.noreply.github.com>
Date: Sun, 4 Dec 2022 14:10:12 +0900
Subject: [PATCH 14/16] =?UTF-8?q?ViewSource2=E3=82=B3=E3=83=B3=E3=83=9D?=
 =?UTF-8?q?=E3=83=BC=E3=83=8D=E3=83=B3=E3=83=88=E3=82=92=E5=89=8A=E9=99=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/ViewSource2.tsx | 45 ----------------------------------
 1 file changed, 45 deletions(-)
 delete mode 100644 src/components/ViewSource2.tsx

diff --git a/src/components/ViewSource2.tsx b/src/components/ViewSource2.tsx
deleted file mode 100644
index 7f1c085bc..000000000
--- a/src/components/ViewSource2.tsx
+++ /dev/null
@@ -1,45 +0,0 @@
-/* eslint-disable react/prop-types */
-import React, { useState, useEffect } from "react";
-import usePathname from "./usePathname";
-import JupyterViewer from "react-jupyter-notebook";
-import OpenInColab from "./OpenInColab/OpenInColab";
-
-/**
- * ipynbファイルからソースコードと出力、OpenInColabへのリンクを生成
- * @param param0 現在ファイルからのipynbへの相対パス
- * @param param1 Pythonの出力を表示するか
- * @returns ソースコードと出力、OpenInColabへのリンク
- */
-
-export default function ViewSource({
-  path,
-  noOutput = false,
-}: {
-  path: string;
-  noOutput?: boolean;
-}) {
-  const pathname = usePathname();
-  const [content, setContent] = useState();
-  useEffect(() => {
-    async function tmp() {
-      // 該当のipynbファイルをjson形式でとってくる
-      const json = await import(
-        `/docs/${pathname.slice(6)}${path.slice(0, -6)}.json`
-      );
-      setContent(json);
-    }
-    tmp();
-  }, []);
-  return (
-    <>
-      {content !== undefined && (
-        <JupyterViewer
-          rawIpynb={content}
-          language="python"
-          displayOutput={noOutput ? "hide" : "show"}
-        />
-      )}
-      <OpenInColab path={path} />
-    </>
-  );
-}

From 5c484897ed28edd43fce95e0228cf3b9453444bb Mon Sep 17 00:00:00 2001
From: chvmvd <chvmvd@users.noreply.github.com>
Date: Sun, 4 Dec 2022 14:18:30 +0900
Subject: [PATCH 15/16] =?UTF-8?q?Super=20Linter=E3=81=AE=E3=82=A8=E3=83=A9?=
 =?UTF-8?q?=E3=83=BC=E3=82=92=E4=BF=AE=E6=AD=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/ViewSource/styles.module.css | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/components/ViewSource/styles.module.css b/src/components/ViewSource/styles.module.css
index 0bcee5f33..3f64e98ab 100644
--- a/src/components/ViewSource/styles.module.css
+++ b/src/components/ViewSource/styles.module.css
@@ -1,4 +1,4 @@
-.iframeWrapper {
+.iframe-wrapper {
   border-radius: 8px;
   margin-bottom: 5px;
 }

From 8d8ce2647cffd58347e3f08673e8bcf243605c21 Mon Sep 17 00:00:00 2001
From: chvmvd <chvmvd@users.noreply.github.com>
Date: Sun, 4 Dec 2022 14:20:02 +0900
Subject: [PATCH 16/16] =?UTF-8?q?Super=20Linter=E3=81=AE=E3=82=A8=E3=83=A9?=
 =?UTF-8?q?=E3=83=BC=E3=82=92=E4=BF=AE=E6=AD=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/{mdToHTML.ts => mdToHTML.tsx} | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename src/components/{mdToHTML.ts => mdToHTML.tsx} (100%)

diff --git a/src/components/mdToHTML.ts b/src/components/mdToHTML.tsx
similarity index 100%
rename from src/components/mdToHTML.ts
rename to src/components/mdToHTML.tsx
