From ef361233775afc2098ee0c2eea0930840aa4464d Mon Sep 17 00:00:00 2001 From: mrdrogdrog Date: Thu, 27 Aug 2020 15:13:35 +0200 Subject: [PATCH] Replace MathJax with KaTeX (#497) Signed-off-by: Tilman Vatteroth --- CHANGELOG.md | 1 + cypress/integration/link.spec.ts | 2 +- package.json | 9 ++-- public/locales/ar.json | 2 +- public/locales/ca.json | 2 +- public/locales/cs.json | 2 +- public/locales/da.json | 2 +- public/locales/de.json | 2 +- public/locales/el.json | 2 +- public/locales/en.json | 2 +- public/locales/eo.json | 2 +- public/locales/es.json | 2 +- public/locales/fr.json | 2 +- public/locales/hi.json | 2 +- public/locales/hr.json | 2 +- public/locales/id.json | 2 +- public/locales/it.json | 2 +- public/locales/ja.json | 2 +- public/locales/ko.json | 2 +- public/locales/nl.json | 2 +- public/locales/pl.json | 2 +- public/locales/pt.json | 2 +- public/locales/ru.json | 2 +- public/locales/sk.json | 2 +- public/locales/sr.json | 2 +- public/locales/sv.json | 2 +- public/locales/tr.json | 2 +- public/locales/uk.json | 2 +- public/locales/vi.json | 2 +- public/locales/zh-CN.json | 2 +- public/locales/zh-TW.json | 2 +- src/components/intro-page/feature-links.tsx | 2 +- .../markdown-renderer/markdown-renderer.tsx | 21 ++++---- .../katex/katex-replacer.tsx | 28 +++++++++++ .../mathjax/mathjax-replacer.tsx | 27 ----------- yarn.lock | 48 +++++-------------- 36 files changed, 85 insertions(+), 109 deletions(-) create mode 100644 src/components/markdown-renderer/replace-components/katex/katex-replacer.tsx delete mode 100644 src/components/markdown-renderer/replace-components/mathjax/mathjax-replacer.tsx diff --git a/CHANGELOG.md b/CHANGELOG.md index 51ec16aa9..5feeba477 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -48,6 +48,7 @@ - The `[name=...]`, `[time=...]` and `[color=...]` tags may now be used anywhere in the document and not just inside of blockquotes and lists. - The (add image) and (add link) toolbar buttons, put selected links directly in the `()` instead of the `[]` part of the generated markdown - The help dialog has multiple tabs, and is a bit more organized. +- Use KaTeX instead of MathJax. ([Why?](https://community.codimd.org/t/frequently-asked-questions/190)) --- diff --git a/cypress/integration/link.spec.ts b/cypress/integration/link.spec.ts index ab1cc19ae..f36add4d7 100644 --- a/cypress/integration/link.spec.ts +++ b/cypress/integration/link.spec.ts @@ -92,7 +92,7 @@ describe('Links Intro', () => { .should('include', '/features#Share-Notes') }) - it('MathJax', () => { + it('KaTeX', () => { cy.get('i.fa-bar-chart.fa-3x') .click() cy.url() diff --git a/package.json b/package.json index dab995ee4..cedb8ef76 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "license": "AGPL-3.0", "version": "0.1.0", "dependencies": { + "@matejmazur/react-katex": "^3.1.3", "@testing-library/jest-dom": "5.11.4", "@testing-library/react": "10.4.9", "@testing-library/user-event": "12.1.2", @@ -22,7 +23,6 @@ "@types/react-bootstrap-typeahead": "3.4.6", "@types/react-dom": "16.9.8", "@types/react-html-parser": "2.0.1", - "@types/react-mathjax": "1.0.0", "@types/react-redux": "7.1.9", "@types/react-router": "5.1.8", "@types/react-router-bootstrap": "0.24.5", @@ -48,6 +48,7 @@ "i18next-browser-languagedetector": "6.0.1", "i18next-http-backend": "1.0.18", "js-yaml": "3.14.0", + "katex": "^0.12.0", "markdown-it": "11.0.0", "markdown-it-abbr": "1.0.4", "markdown-it-anchor": "5.3.0", @@ -66,7 +67,6 @@ "markdown-it-sup": "1.0.0", "markdown-it-task-lists": "2.1.1", "markdown-it-toc-done-right": "4.1.0", - "mathjax": "3.0.5", "moment": "2.27.0", "node-sass": "4.14.1", "react": "16.13.1", @@ -76,7 +76,6 @@ "react-dom": "16.13.1", "react-html-parser": "2.0.2", "react-i18next": "11.7.1", - "react-mathjax": "1.0.1", "react-redux": "7.2.1", "react-router": "5.2.0", "react-router-bootstrap": "0.25.0", @@ -142,10 +141,10 @@ "cypress": "5.0.0", "eslint-plugin-chai-friendly": "0.6.0", "eslint-plugin-cypress": "2.11.1", + "http-server": "0.12.3", "redux-devtools": "3.6.1", "redux-devtools-extension": "2.13.8", - "ts-loader": "8.0.2", - "http-server": "0.12.3" + "ts-loader": "8.0.2" }, "resolutions": { "cypress": "5.0.0" diff --git a/public/locales/ar.json b/public/locales/ar.json index a2ec86e2d..5cbea630d 100644 --- a/public/locales/ar.json +++ b/public/locales/ar.json @@ -8,7 +8,7 @@ "exploreFeatures": "استكشف جميع الميزات", "features": { "collaboration": "تعاون آني", - "mathJax": "دعم المنحنيات البيانية و MathJax", + "katex": "دعم المنحنيات البيانية و KaTeX", "slides": "دعم الشرائح التقديمية" } }, diff --git a/public/locales/ca.json b/public/locales/ca.json index 7490230fd..7f3539445 100644 --- a/public/locales/ca.json +++ b/public/locales/ca.json @@ -8,7 +8,7 @@ "exploreFeatures": "Explorar totes les funcions", "features": { "collaboration": "Col·laborar a través de URL", - "mathJax": "Soport per a gràfics i MathJax", + "katex": "Soport per a gràfics i KaTeX", "slides": "Soport per a diapositives" } }, diff --git a/public/locales/cs.json b/public/locales/cs.json index 13100d485..c3a6d99eb 100644 --- a/public/locales/cs.json +++ b/public/locales/cs.json @@ -8,7 +8,7 @@ "exploreFeatures": "Prozkoumat všechny funkce", "features": { "collaboration": "Spolupráce v reálném čase", - "mathJax": "Funguje s grafy a MathJax", + "katex": "Funguje s grafy a KaTeX", "slides": "Podporuje režim prezentace" } }, diff --git a/public/locales/da.json b/public/locales/da.json index 79a5a1210..461588f3a 100644 --- a/public/locales/da.json +++ b/public/locales/da.json @@ -8,7 +8,7 @@ "exploreFeatures": "Udforsk alle features", "features": { "collaboration": "Samarbejd via URL", - "mathJax": "Mulighed for diagrammer og MathJax", + "katex": "Mulighed for diagrammer og KaTeX", "slides": "Mulighed for præsentationer" } }, diff --git a/public/locales/de.json b/public/locales/de.json index bd4406acd..98b5c9a4e 100644 --- a/public/locales/de.json +++ b/public/locales/de.json @@ -8,7 +8,7 @@ "exploreFeatures": "Alle Funktionen", "features": { "collaboration": "Zusammenarbeiten mit URL", - "mathJax": "Unterstützt Charts und MathJax", + "katex": "Unterstützt Charts und KaTeX", "slides": "Unterstützt Präsentationsmodus" } }, diff --git a/public/locales/el.json b/public/locales/el.json index 4ec885ae9..5adfc5232 100644 --- a/public/locales/el.json +++ b/public/locales/el.json @@ -8,7 +8,7 @@ "exploreFeatures": "Ανακαλύψτε όλες τις λειτουργίες", "features": { "collaboration": "Συνεργαστείτε με URL", - "mathJax": "Υποστηρίζει διαγράμματα και MathJax", + "katex": "Υποστηρίζει διαγράμματα και KaTeX", "slides": "Υποστηρίζει λειτουργία συρσίματος" } }, diff --git a/public/locales/en.json b/public/locales/en.json index f9aaea6d6..8fdf0ff1a 100644 --- a/public/locales/en.json +++ b/public/locales/en.json @@ -8,7 +8,7 @@ "exploreFeatures": "Explore all features", "features": { "collaboration": "Real time collaboration", - "mathJax": "Works with charts and MathJax", + "katex": "Works with charts and KaTeX", "slides": "Supports slide mode" }, "screenShotAltText": "CodiMD Screenshot" diff --git a/public/locales/eo.json b/public/locales/eo.json index 5165bff93..e472604e6 100644 --- a/public/locales/eo.json +++ b/public/locales/eo.json @@ -8,7 +8,7 @@ "exploreFeatures": "Esploru ĉiujn eblecojn", "features": { "collaboration": "Kunlaboru per URL", - "mathJax": "Ebleco por skemoj kaj MathJax", + "katex": "Ebleco por skemoj kaj KaTeX", "slides": "Ebleco por bildvica modo" } }, diff --git a/public/locales/es.json b/public/locales/es.json index c783df447..e411d894b 100644 --- a/public/locales/es.json +++ b/public/locales/es.json @@ -8,7 +8,7 @@ "exploreFeatures": "Explorar todas las funciones", "features": { "collaboration": "Colaborar via URL", - "mathJax": "Soporte para gráficos y MathJax", + "katex": "Soporte para gráficos y KaTeX", "slides": "Soporte para diapositivas" } }, diff --git a/public/locales/fr.json b/public/locales/fr.json index 191917fd6..971b5acca 100644 --- a/public/locales/fr.json +++ b/public/locales/fr.json @@ -8,7 +8,7 @@ "exploreFeatures": "Explorer toutes les fonctionnalités", "features": { "collaboration": "Collaborez avec l'URL", - "mathJax": "Gère les graphiques et MathJax", + "katex": "Gère les graphiques et KaTeX", "slides": "Gère le mode présentation" } }, diff --git a/public/locales/hi.json b/public/locales/hi.json index f547a17f1..71d70c7f8 100644 --- a/public/locales/hi.json +++ b/public/locales/hi.json @@ -8,7 +8,7 @@ "exploreFeatures": "सभी सुविधाओं का अन्वेषण करें", "features": { "collaboration": "यूआरएल के साथ सहयोग करें", - "mathJax": "चार्ट और MathJax का समर्थन", + "katex": "चार्ट और KaTeX का समर्थन", "slides": "स्लाइड मोड का समर्थन" } }, diff --git a/public/locales/hr.json b/public/locales/hr.json index 2e2e599b1..0684e7a78 100644 --- a/public/locales/hr.json +++ b/public/locales/hr.json @@ -8,7 +8,7 @@ "exploreFeatures": "Istraži sve značajke", "features": { "collaboration": "Kolaboracija sa URL-om", - "mathJax": "Support charts and MathJax", + "katex": "Support charts and KaTeX", "slides": "Način podrške slajda" } }, diff --git a/public/locales/id.json b/public/locales/id.json index deb0d98af..5f7df55aa 100644 --- a/public/locales/id.json +++ b/public/locales/id.json @@ -8,7 +8,7 @@ "exploreFeatures": "Jelajahi semua fitur", "features": { "collaboration": "Kolaborasi real-time", - "mathJax": "Mendukung charts dan MathJax", + "katex": "Mendukung charts dan KaTeX", "slides": "Mendukung mode slide" } }, diff --git a/public/locales/it.json b/public/locales/it.json index 1bb8dfd62..ab96acb37 100644 --- a/public/locales/it.json +++ b/public/locales/it.json @@ -8,7 +8,7 @@ "exploreFeatures": "Esplora tutte le funzioni", "features": { "collaboration": "Collabora tramite URL", - "mathJax": "Supporta grafici e MathJax", + "katex": "Supporta grafici e KaTeX", "slides": "Supporta modalità slide" } }, diff --git a/public/locales/ja.json b/public/locales/ja.json index 944ae94b3..b64c8c34a 100644 --- a/public/locales/ja.json +++ b/public/locales/ja.json @@ -8,7 +8,7 @@ "exploreFeatures": "すべての機能をチェック", "features": { "collaboration": "URLで共同編集", - "mathJax": "グラフとMathJaxのサポート", + "katex": "グラフとKaTeXのサポート", "slides": "スライドモードのサポート" } }, diff --git a/public/locales/ko.json b/public/locales/ko.json index 50e771145..81443d05a 100644 --- a/public/locales/ko.json +++ b/public/locales/ko.json @@ -8,7 +8,7 @@ "exploreFeatures": "모든 기능 둘러보기", "features": { "collaboration": "URL을 통한 실시간 협업", - "mathJax": "차트와 MathJax 지원", + "katex": "차트와 KaTeX 지원", "slides": "슬라이드 모드 지원" } }, diff --git a/public/locales/nl.json b/public/locales/nl.json index 396fe73ed..f86c8e1d6 100644 --- a/public/locales/nl.json +++ b/public/locales/nl.json @@ -8,7 +8,7 @@ "exploreFeatures": "Ontdek alle features", "features": { "collaboration": "Samenwerken met URL", - "mathJax": "Ondersteunt grafieken en MathJax", + "katex": "Ondersteunt grafieken en KaTeX", "slides": "Ondersteunt presentatiemodus" } }, diff --git a/public/locales/pl.json b/public/locales/pl.json index c1e8e6548..e238af116 100644 --- a/public/locales/pl.json +++ b/public/locales/pl.json @@ -8,7 +8,7 @@ "exploreFeatures": "Przeglądaj wszystkie funkcje", "features": { "collaboration": "Kolaboracja w czasie rzeczywistym", - "mathJax": "Kompatybilne z wykresami oraz MathJax", + "katex": "Kompatybilne z wykresami oraz KaTeX", "slides": "Obsługuje tryb slajdów" } }, diff --git a/public/locales/pt.json b/public/locales/pt.json index 43e768998..d6c7a4360 100644 --- a/public/locales/pt.json +++ b/public/locales/pt.json @@ -8,7 +8,7 @@ "exploreFeatures": "Explore todas as funções", "features": { "collaboration": "Colaborar via URL", - "mathJax": "Suporte para gráficos e MathJax", + "katex": "Suporte para gráficos e KaTeX", "slides": "Suporte para modo apresentação" } }, diff --git a/public/locales/ru.json b/public/locales/ru.json index 926206b0f..eaad12c6d 100644 --- a/public/locales/ru.json +++ b/public/locales/ru.json @@ -8,7 +8,7 @@ "exploreFeatures": "Изучите все возможности", "features": { "collaboration": "Сотрудничество по ссылке", - "mathJax": "Поддержка графиков и MathJax", + "katex": "Поддержка графиков и KaTeX", "slides": "Поддержка режима слайдера" } }, diff --git a/public/locales/sk.json b/public/locales/sk.json index 9ce2d2e10..7c01469fd 100644 --- a/public/locales/sk.json +++ b/public/locales/sk.json @@ -8,7 +8,7 @@ "exploreFeatures": "Preskúmať všetky funkcie", "features": { "collaboration": "Spolupráca v reálnom čase", - "mathJax": "Funguje s grafmi a MathJax", + "katex": "Funguje s grafmi a KaTeX", "slides": "Podporuje prezentačný režim" } }, diff --git a/public/locales/sr.json b/public/locales/sr.json index 6f1ef4a71..907770ae1 100644 --- a/public/locales/sr.json +++ b/public/locales/sr.json @@ -8,7 +8,7 @@ "exploreFeatures": "Истражи све могућности", "features": { "collaboration": "Сарадња уз помоћ URL-а", - "mathJax": "Подршка за графиконе и MathJax", + "katex": "Подршка за графиконе и KaTeX", "slides": "Подршка за слајдове и презентације" } }, diff --git a/public/locales/sv.json b/public/locales/sv.json index edac49c13..e379bd023 100644 --- a/public/locales/sv.json +++ b/public/locales/sv.json @@ -8,7 +8,7 @@ "exploreFeatures": "Upptäck alla funktioner", "features": { "collaboration": "Samarbeta med URL", - "mathJax": "Stöd för diagram och MathJax", + "katex": "Stöd för diagram och KaTeX", "slides": "Stöd för slide mode" } }, diff --git a/public/locales/tr.json b/public/locales/tr.json index 7ec7593fb..5bd81254b 100644 --- a/public/locales/tr.json +++ b/public/locales/tr.json @@ -8,7 +8,7 @@ "exploreFeatures": "Özellikleri keşfet", "features": { "collaboration": "URL ile katkıda bulun", - "mathJax": "Grafikler ve MathJax'ı destekle", + "katex": "Grafikler ve KaTeX'ı destekle", "slides": "Sunum modunu destekle" } }, diff --git a/public/locales/uk.json b/public/locales/uk.json index 0f21fda4e..ba796215b 100644 --- a/public/locales/uk.json +++ b/public/locales/uk.json @@ -8,7 +8,7 @@ "exploreFeatures": "Дослідити всі можливості", "features": { "collaboration": "Спільна робота по URL", - "mathJax": "Підтримка графіків і MathJax", + "katex": "Підтримка графіків і KaTeX", "slides": "Підтримка режиму слайдера" } }, diff --git a/public/locales/vi.json b/public/locales/vi.json index f89a34e48..a54f19a5c 100644 --- a/public/locales/vi.json +++ b/public/locales/vi.json @@ -8,7 +8,7 @@ "exploreFeatures": "Khám phá tất cả tính năng", "features": { "collaboration": "Cộng tác thời gian thực", - "mathJax": "Làm việc với biểu đồ và MathJax", + "katex": "Làm việc với biểu đồ và KaTeX", "slides": "Hỗ trợ chế độ slide" } }, diff --git a/public/locales/zh-CN.json b/public/locales/zh-CN.json index f8bcdf077..56cfef610 100644 --- a/public/locales/zh-CN.json +++ b/public/locales/zh-CN.json @@ -8,7 +8,7 @@ "exploreFeatures": "探索所有功能", "features": { "collaboration": "实时协作", - "mathJax": "支持图表与 MathJax", + "katex": "支持图表与 KaTeX", "slides": "支持幻灯模式" } }, diff --git a/public/locales/zh-TW.json b/public/locales/zh-TW.json index f0b83886c..b947bcb91 100644 --- a/public/locales/zh-TW.json +++ b/public/locales/zh-TW.json @@ -8,7 +8,7 @@ "exploreFeatures": "探索所有功能", "features": { "collaboration": "使用網址協作", - "mathJax": "支援圖表與 MathJax", + "katex": "支援圖表與 KaTeX", "slides": "支援簡報模式" } }, diff --git a/src/components/intro-page/feature-links.tsx b/src/components/intro-page/feature-links.tsx index 79f5ce819..6b6badfbe 100644 --- a/src/components/intro-page/feature-links.tsx +++ b/src/components/intro-page/feature-links.tsx @@ -20,7 +20,7 @@ export const FeatureLinks: React.FC = () => {
- +
diff --git a/src/components/markdown-renderer/markdown-renderer.tsx b/src/components/markdown-renderer/markdown-renderer.tsx index 07d033a1a..de4139fac 100644 --- a/src/components/markdown-renderer/markdown-renderer.tsx +++ b/src/components/markdown-renderer/markdown-renderer.tsx @@ -25,7 +25,6 @@ import React, { ReactElement, useCallback, useEffect, useMemo, useRef, useState import { Alert } from 'react-bootstrap' import ReactHtmlParser, { convertNodeToElement, Transform } from 'react-html-parser' import { Trans } from 'react-i18next' -import MathJaxReact from 'react-mathjax' import { useSelector } from 'react-redux' import useResizeObserver from 'use-resize-observer' import { TocAst } from '../../external-types/markdown-it-toc-done-right/interface' @@ -60,7 +59,7 @@ import { ComponentReplacer, SubNodeConverter } from './replace-components/Compon import { GistReplacer } from './replace-components/gist/gist-replacer' import { HighlightedCodeReplacer } from './replace-components/highlighted-fence/highlighted-fence-replacer' import { ImageReplacer } from './replace-components/image/image-replacer' -import { MathjaxReplacer } from './replace-components/mathjax/mathjax-replacer' +import { KatexReplacer } from './replace-components/katex/katex-replacer' import { PdfReplacer } from './replace-components/pdf/pdf-replacer' import { PossibleWiderReplacer } from './replace-components/possible-wider/possible-wider-replacer' import { QuoteOptionsReplacer } from './replace-components/quote-options/quote-options-replacer' @@ -244,12 +243,12 @@ export const MarkdownRenderer: React.FC = ({ content, onM permalinkSymbol: '' }) md.use(mathJax({ - beforeMath: '', - afterMath: '', - beforeInlineMath: '', - afterInlineMath: '', - beforeDisplayMath: '', - afterDisplayMath: '' + beforeMath: '', + afterMath: '', + beforeInlineMath: '', + afterInlineMath: '', + beforeDisplayMath: '', + afterDisplayMath: '' })) md.use(markdownItRegex, replaceLegacyYoutubeShortCode) md.use(markdownItRegex, replaceLegacyVimeoShortCode) @@ -312,7 +311,7 @@ export const MarkdownRenderer: React.FC = ({ content, onM new TocReplacer(), new HighlightedCodeReplacer(), new QuoteOptionsReplacer(), - new MathjaxReplacer() + new KatexReplacer() ] if (onMetaDataChange) { // This is used if the front-matter callback is never called, because the user deleted everything regarding metadata from the document @@ -337,9 +336,7 @@ export const MarkdownRenderer: React.FC = ({ content, onM - - {result} - + {result} ) diff --git a/src/components/markdown-renderer/replace-components/katex/katex-replacer.tsx b/src/components/markdown-renderer/replace-components/katex/katex-replacer.tsx new file mode 100644 index 000000000..fd3f74bac --- /dev/null +++ b/src/components/markdown-renderer/replace-components/katex/katex-replacer.tsx @@ -0,0 +1,28 @@ +import { DomElement } from 'domhandler' +import React from 'react' +import 'katex/dist/katex.min.css' +import TeX from '@matejmazur/react-katex' +import { ComponentReplacer } from '../ComponentReplacer' + +const getNodeIfKatexBlock = (node: DomElement): (DomElement|undefined) => { + if (node.name !== 'p' || !node.children || node.children.length !== 1) { + return + } + const katexNode = node.children[0] + return (katexNode.name === 'codimd-katex' && katexNode.attribs?.inline === undefined) ? katexNode : undefined +} + +const getNodeIfInlineKatex = (node: DomElement): (DomElement|undefined) => { + return (node.name === 'codimd-katex' && node.attribs?.inline !== undefined) ? node : undefined +} + +export class KatexReplacer implements ComponentReplacer { + getReplacement (node: DomElement, index: number): React.ReactElement | undefined { + const katex = getNodeIfKatexBlock(node) || getNodeIfInlineKatex(node) + if (katex?.children && katex.children[0]) { + const mathJaxContent = katex.children[0]?.data as string + const isInline = (katex.attribs?.inline) !== undefined + return + } + } +} diff --git a/src/components/markdown-renderer/replace-components/mathjax/mathjax-replacer.tsx b/src/components/markdown-renderer/replace-components/mathjax/mathjax-replacer.tsx deleted file mode 100644 index cffcd777f..000000000 --- a/src/components/markdown-renderer/replace-components/mathjax/mathjax-replacer.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { DomElement } from 'domhandler' -import React from 'react' -import MathJax from 'react-mathjax' -import { ComponentReplacer, SubNodeConverter } from '../ComponentReplacer' - -const getNodeIfMathJaxBlock = (node: DomElement): (DomElement|undefined) => { - if (node.name !== 'p' || !node.children || node.children.length !== 1) { - return - } - const mathJaxNode = node.children[0] - return (mathJaxNode.name === 'codimd-mathjax' && mathJaxNode.attribs?.inline === undefined) ? mathJaxNode : undefined -} - -const getNodeIfInlineMathJax = (node: DomElement): (DomElement|undefined) => { - return (node.name === 'codimd-mathjax' && node.attribs?.inline !== undefined) ? node : undefined -} - -export class MathjaxReplacer implements ComponentReplacer { - getReplacement (node: DomElement, index: number, subNodeConverter: SubNodeConverter): React.ReactElement | undefined { - const mathJax = getNodeIfMathJaxBlock(node) || getNodeIfInlineMathJax(node) - if (mathJax?.children && mathJax.children[0]) { - const mathJaxContent = mathJax.children[0]?.data as string - const isInline = (mathJax.attribs?.inline) !== undefined - return - } - } -} diff --git a/yarn.lock b/yarn.lock index 4bcc9136a..2ca4df9e5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1420,6 +1420,11 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" +"@matejmazur/react-katex@^3.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@matejmazur/react-katex/-/react-katex-3.1.3.tgz#f07404c848b93bfef9ed9653a4bb080dc8bf2bf0" + integrity sha512-rBp7mJ9An7ktNoU653BWOYdO4FoR4YNwofHZi+vaytX/nWbIlmHVIF+X8VFOn6c3WYmrLT5FFBjKqCZ1sjR5uQ== + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -1901,13 +1906,6 @@ "@types/htmlparser2" "*" "@types/react" "*" -"@types/react-mathjax@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/react-mathjax/-/react-mathjax-1.0.0.tgz#5e337ddc0fbee4d01513d960f81f85963a9ee482" - integrity sha512-c3beW/LhRx/7LkwYGj7mIDphatRdih80Cpe4l2u3LFdyOgBloPaXq3H9QROC6GnhbGxVql7ByHLA70s+Q6ol1Q== - dependencies: - "@types/react" "*" - "@types/react-redux@7.1.9": version "7.1.9" resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.9.tgz#280c13565c9f13ceb727ec21e767abe0e9b4aec3" @@ -3681,7 +3679,7 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@^2.11.0, commander@^2.20.0: +commander@^2.11.0, commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -4564,16 +4562,6 @@ dom-accessibility-api@^0.5.1: resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.1.tgz#152f5e88583d900977119223e3e76c2d93d23830" integrity sha512-8DhtmKTYWXNpPiL/QOszbnkAbCGuPz9ieVwDrmWM1rNx4KRI3zqmvKANAD1PJdvvov3+eq1BPLXQkYTpqTrWng== -dom-accessibility-api@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.1.tgz#152f5e88583d900977119223e3e76c2d93d23830" - integrity sha512-8DhtmKTYWXNpPiL/QOszbnkAbCGuPz9ieVwDrmWM1rNx4KRI3zqmvKANAD1PJdvvov3+eq1BPLXQkYTpqTrWng== - -dom-accessibility-api@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.1.tgz#152f5e88583d900977119223e3e76c2d93d23830" - integrity sha512-8DhtmKTYWXNpPiL/QOszbnkAbCGuPz9ieVwDrmWM1rNx4KRI3zqmvKANAD1PJdvvov3+eq1BPLXQkYTpqTrWng== - dom-converter@^0.2: version "0.2.0" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" @@ -7747,6 +7735,13 @@ jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3, jsx-ast-utils@^2.4.1: array-includes "^3.1.1" object.assign "^4.1.0" +katex@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/katex/-/katex-0.12.0.tgz#2fb1c665dbd2b043edcf8a1f5c555f46beaa0cb9" + integrity sha512-y+8btoc/CK70XqcHqjxiGWBOeIL8upbS0peTPXTvgrh21n1RiWWcIpSWM+4uXq+IAgNh9YYQWdc7LVDPDAEEAg== + dependencies: + commander "^2.19.0" + killable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" @@ -7935,11 +7930,6 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" -load-script@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/load-script/-/load-script-1.0.0.tgz#0491939e0bee5643ee494a7e3da3d2bac70c6ca4" - integrity sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ= - loader-fs-cache@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz#f08657646d607078be2f0a032f8bd69dd6f277d9" @@ -8259,11 +8249,6 @@ markdown-it@11.0.0: mdurl "^1.0.1" uc.micro "^1.0.5" -mathjax@3.0.5: - version "3.0.5" - resolved "https://registry.yarnpkg.com/mathjax/-/mathjax-3.0.5.tgz#707e703a9c1d95f0790bbd404b895566f459d514" - integrity sha512-9M7VulhltkD8sIebWutK/VfAD+m+6BIFqfpjDh9Pz/etoKUtjO6UMnOhUcDmNl6iApE8C9xrUmaMyNZkZAlrMw== - md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -10530,13 +10515,6 @@ react-lifecycles-compat@^3.0.4: resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== -react-mathjax@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/react-mathjax/-/react-mathjax-1.0.1.tgz#a8c282e75d277a201632dfd07edf41edda372b4b" - integrity sha512-+mjFcciZY3GQoqiQm3aRTyDjgBKuoaXpY+SCONX00jScuPpTKwnASeFMS5+pbTIzDf5zPT2Y9ZZfQ9U/d4CKtQ== - dependencies: - load-script "^1.0.0" - react-overlays@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-2.1.1.tgz#ffe2090c4a10da6b8947a1c7b1a67d0457648a0d"