feat: add markdown plugins remark-gfm remark-math rehype-katex

This commit is contained in:
kangfenmao 2024-08-01 14:51:20 +08:00
parent 86fc4676ba
commit c9a964d8f8
6 changed files with 494 additions and 10 deletions

View File

@ -74,6 +74,9 @@
"react-spinners": "^0.14.1", "react-spinners": "^0.14.1",
"react-syntax-highlighter": "^15.5.0", "react-syntax-highlighter": "^15.5.0",
"redux-persist": "^6.0.0", "redux-persist": "^6.0.0",
"rehype-katex": "^7.0.0",
"remark-gfm": "^4.0.0",
"remark-math": "^6.0.0",
"sass": "^1.77.2", "sass": "^1.77.2",
"styled-components": "^6.1.11", "styled-components": "^6.1.11",
"typescript": "^5.3.3", "typescript": "^5.3.3",

View File

@ -20,10 +20,8 @@ import dayjs from 'dayjs'
import { isEmpty, upperFirst } from 'lodash' import { isEmpty, upperFirst } from 'lodash'
import { FC, useCallback, useState } from 'react' import { FC, useCallback, useState } from 'react'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import Markdown from 'react-markdown'
import styled from 'styled-components' import styled from 'styled-components'
import CodeBlock from './CodeBlock' import Markdown from './markdown/Markdown'
import Link from './Link'
interface Props { interface Props {
message: Message message: Message
@ -136,11 +134,7 @@ const MessageItem: FC<Props> = ({ message, index, showMenu, onDeleteMessage }) =
<SyncOutlined spin size={24} /> <SyncOutlined spin size={24} />
</MessageContentLoading> </MessageContentLoading>
)} )}
{message.status !== 'sending' && ( {message.status !== 'sending' && <Markdown message={message} />}
<Markdown className="markdown" components={{ code: CodeBlock as any, a: Link as any }}>
{getMessageContent(message)}
</Markdown>
)}
{message.usage && !generating && ( {message.usage && !generating && (
<MessageMetadata> <MessageMetadata>
Tokens: {message.usage.total_tokens} | {message.usage.prompt_tokens}{message.usage.completion_tokens} Tokens: {message.usage.total_tokens} | {message.usage.prompt_tokens}{message.usage.completion_tokens}

View File

@ -7,7 +7,7 @@ import { useTranslation } from 'react-i18next'
import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter' import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'
import { atomDark, oneLight } from 'react-syntax-highlighter/dist/esm/styles/prism' import { atomDark, oneLight } from 'react-syntax-highlighter/dist/esm/styles/prism'
import styled from 'styled-components' import styled from 'styled-components'
import Mermaid from './Mermaid' import Mermaid from '../Mermaid'
interface CodeBlockProps { interface CodeBlockProps {
children: string children: string

View File

@ -0,0 +1,42 @@
import { FC, useCallback, useMemo } from 'react'
import ReactMarkdown from 'react-markdown'
import { Message } from '@renderer/types'
import { isEmpty } from 'lodash'
import { useTranslation } from 'react-i18next'
import CodeBlock from './CodeBlock'
import Link from './Link'
import remarkGfm from 'remark-gfm'
import remarkMath from 'remark-math'
import rehypeKatex from 'rehype-katex'
import 'katex/dist/katex.min.css'
interface Props {
message: Message
}
const Markdown: FC<Props> = ({ message }) => {
const { t } = useTranslation()
const getMessageContent = useCallback(
(message: Message) => {
const empty = isEmpty(message.content)
const paused = message.status === 'paused'
return empty && paused ? t('message.chat.completion.paused') : message.content
},
[t]
)
return useMemo(() => {
return (
<ReactMarkdown
className="markdown"
remarkPlugins={[remarkGfm, remarkMath]}
rehypePlugins={[rehypeKatex]}
components={{ code: CodeBlock as any, a: Link as any }}>
{getMessageContent(message)}
</ReactMarkdown>
)
}, [getMessageContent, message])
}
export default Markdown

447
yarn.lock
View File

@ -2139,6 +2139,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"@types/katex@npm:^0.16.0":
version: 0.16.7
resolution: "@types/katex@npm:0.16.7"
checksum: 10c0/68dcb9f68a90513ec78ca0196a142e15c2a2c270b1520d752bafd47a99207115085a64087b50140359017d7e9c870b3c68e7e4d36668c9e348a9ef0c48919b5a
languageName: node
linkType: hard
"@types/keygrip@npm:*": "@types/keygrip@npm:*":
version: 1.0.6 version: 1.0.6
resolution: "@types/keygrip@npm:1.0.6" resolution: "@types/keygrip@npm:1.0.6"
@ -3482,6 +3489,9 @@ __metadata:
react-spinners: "npm:^0.14.1" react-spinners: "npm:^0.14.1"
react-syntax-highlighter: "npm:^15.5.0" react-syntax-highlighter: "npm:^15.5.0"
redux-persist: "npm:^6.0.0" redux-persist: "npm:^6.0.0"
rehype-katex: "npm:^7.0.0"
remark-gfm: "npm:^4.0.0"
remark-math: "npm:^6.0.0"
sass: "npm:^1.77.2" sass: "npm:^1.77.2"
styled-components: "npm:^6.1.11" styled-components: "npm:^6.1.11"
typescript: "npm:^5.3.3" typescript: "npm:^5.3.3"
@ -3646,6 +3656,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"commander@npm:^8.3.0":
version: 8.3.0
resolution: "commander@npm:8.3.0"
checksum: 10c0/8b043bb8322ea1c39664a1598a95e0495bfe4ca2fad0d84a92d7d1d8d213e2a155b441d2470c8e08de7c4a28cf2bc6e169211c49e1b21d9f7edc6ae4d9356060
languageName: node
linkType: hard
"compare-version@npm:^0.1.2": "compare-version@npm:^0.1.2":
version: 0.1.2 version: 0.1.2
resolution: "compare-version@npm:0.1.2" resolution: "compare-version@npm:0.1.2"
@ -4265,6 +4282,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"entities@npm:^4.4.0":
version: 4.5.0
resolution: "entities@npm:4.5.0"
checksum: 10c0/5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250
languageName: node
linkType: hard
"env-paths@npm:^2.2.0, env-paths@npm:^2.2.1": "env-paths@npm:^2.2.0, env-paths@npm:^2.2.1":
version: 2.2.1 version: 2.2.1
resolution: "env-paths@npm:2.2.1" resolution: "env-paths@npm:2.2.1"
@ -4599,6 +4623,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"escape-string-regexp@npm:^5.0.0":
version: 5.0.0
resolution: "escape-string-regexp@npm:5.0.0"
checksum: 10c0/6366f474c6f37a802800a435232395e04e9885919873e382b157ab7e8f0feb8fed71497f84a6f6a81a49aab41815522f5839112bd38026d203aea0c91622df95
languageName: node
linkType: hard
"eslint-config-prettier@npm:^9.1.0": "eslint-config-prettier@npm:^9.1.0":
version: 9.1.0 version: 9.1.0
resolution: "eslint-config-prettier@npm:9.1.0" resolution: "eslint-config-prettier@npm:9.1.0"
@ -5425,6 +5456,68 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"hast-util-from-dom@npm:^5.0.0":
version: 5.0.0
resolution: "hast-util-from-dom@npm:5.0.0"
dependencies:
"@types/hast": "npm:^3.0.0"
hastscript: "npm:^8.0.0"
web-namespaces: "npm:^2.0.0"
checksum: 10c0/1b0a9d65eb8f8cd3616559190bb6db271b7b4f72a13c5dc16abac264b6f7145beb408fbaa497d1b5c725d55392b951972d8313802bfe90ccac33f888ec34c63c
languageName: node
linkType: hard
"hast-util-from-html-isomorphic@npm:^2.0.0":
version: 2.0.0
resolution: "hast-util-from-html-isomorphic@npm:2.0.0"
dependencies:
"@types/hast": "npm:^3.0.0"
hast-util-from-dom: "npm:^5.0.0"
hast-util-from-html: "npm:^2.0.0"
unist-util-remove-position: "npm:^5.0.0"
checksum: 10c0/fc68d9245e794483a802d5c85a9f6c25959e00db78cc796411efc965134f3206f9cc9fa38134572ea781ad74663e801f1f83202007b208e27a770855566a62b6
languageName: node
linkType: hard
"hast-util-from-html@npm:^2.0.0":
version: 2.0.1
resolution: "hast-util-from-html@npm:2.0.1"
dependencies:
"@types/hast": "npm:^3.0.0"
devlop: "npm:^1.1.0"
hast-util-from-parse5: "npm:^8.0.0"
parse5: "npm:^7.0.0"
vfile: "npm:^6.0.0"
vfile-message: "npm:^4.0.0"
checksum: 10c0/856ceec209940ac4f9db52bf6338b97fb11f27e6d5b930f89676bc16ee282c06f9ff2a17254280803aefdf740507cf3004f181d0286b04dda11907852decbe77
languageName: node
linkType: hard
"hast-util-from-parse5@npm:^8.0.0":
version: 8.0.1
resolution: "hast-util-from-parse5@npm:8.0.1"
dependencies:
"@types/hast": "npm:^3.0.0"
"@types/unist": "npm:^3.0.0"
devlop: "npm:^1.0.0"
hastscript: "npm:^8.0.0"
property-information: "npm:^6.0.0"
vfile: "npm:^6.0.0"
vfile-location: "npm:^5.0.0"
web-namespaces: "npm:^2.0.0"
checksum: 10c0/4a30bb885cff1f0e023c429ae3ece73fe4b03386f07234bf23f5555ca087c2573ff4e551035b417ed7615bde559f394cdaf1db2b91c3b7f0575f3563cd238969
languageName: node
linkType: hard
"hast-util-is-element@npm:^3.0.0":
version: 3.0.0
resolution: "hast-util-is-element@npm:3.0.0"
dependencies:
"@types/hast": "npm:^3.0.0"
checksum: 10c0/f5361e4c9859c587ca8eb0d8343492f3077ccaa0f58a44cd09f35d5038f94d65152288dcd0c19336ef2c9491ec4d4e45fde2176b05293437021570aa0bc3613b
languageName: node
linkType: hard
"hast-util-parse-selector@npm:^2.0.0": "hast-util-parse-selector@npm:^2.0.0":
version: 2.2.5 version: 2.2.5
resolution: "hast-util-parse-selector@npm:2.2.5" resolution: "hast-util-parse-selector@npm:2.2.5"
@ -5432,6 +5525,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"hast-util-parse-selector@npm:^4.0.0":
version: 4.0.0
resolution: "hast-util-parse-selector@npm:4.0.0"
dependencies:
"@types/hast": "npm:^3.0.0"
checksum: 10c0/5e98168cb44470dc274aabf1a28317e4feb09b1eaf7a48bbaa8c1de1b43a89cd195cb1284e535698e658e3ec26ad91bc5e52c9563c36feb75abbc68aaf68fb9f
languageName: node
linkType: hard
"hast-util-to-jsx-runtime@npm:^2.0.0": "hast-util-to-jsx-runtime@npm:^2.0.0":
version: 2.3.0 version: 2.3.0
resolution: "hast-util-to-jsx-runtime@npm:2.3.0" resolution: "hast-util-to-jsx-runtime@npm:2.3.0"
@ -5455,6 +5557,18 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"hast-util-to-text@npm:^4.0.0":
version: 4.0.2
resolution: "hast-util-to-text@npm:4.0.2"
dependencies:
"@types/hast": "npm:^3.0.0"
"@types/unist": "npm:^3.0.0"
hast-util-is-element: "npm:^3.0.0"
unist-util-find-after: "npm:^5.0.0"
checksum: 10c0/93ecc10e68fe5391c6e634140eb330942e71dea2724c8e0c647c73ed74a8ec930a4b77043b5081284808c96f73f2bee64ee416038ece75a63a467e8d14f09946
languageName: node
linkType: hard
"hast-util-whitespace@npm:^3.0.0": "hast-util-whitespace@npm:^3.0.0":
version: 3.0.0 version: 3.0.0
resolution: "hast-util-whitespace@npm:3.0.0" resolution: "hast-util-whitespace@npm:3.0.0"
@ -5477,6 +5591,19 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"hastscript@npm:^8.0.0":
version: 8.0.0
resolution: "hastscript@npm:8.0.0"
dependencies:
"@types/hast": "npm:^3.0.0"
comma-separated-tokens: "npm:^2.0.0"
hast-util-parse-selector: "npm:^4.0.0"
property-information: "npm:^6.0.0"
space-separated-tokens: "npm:^2.0.0"
checksum: 10c0/f0b54bbdd710854b71c0f044612db0fe1b5e4d74fa2001633dc8c535c26033269f04f536f9fd5b03f234de1111808f9e230e9d19493bf919432bb24d541719e0
languageName: node
linkType: hard
"highlight.js@npm:^10.4.1, highlight.js@npm:~10.7.0": "highlight.js@npm:^10.4.1, highlight.js@npm:~10.7.0":
version: 10.7.3 version: 10.7.3
resolution: "highlight.js@npm:10.7.3" resolution: "highlight.js@npm:10.7.3"
@ -6334,6 +6461,17 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"katex@npm:^0.16.0":
version: 0.16.11
resolution: "katex@npm:0.16.11"
dependencies:
commander: "npm:^8.3.0"
bin:
katex: cli.js
checksum: 10c0/be405d45d7228bbfeecd491e0f74d9da0066b5e7b457e3f1dc833de5b63f9e98e40d2ef6b46e1cbe577490a43338c043851da032c45aeec0cc03ad431ef6fd83
languageName: node
linkType: hard
"keyv@npm:^4.0.0, keyv@npm:^4.5.3": "keyv@npm:^4.0.0, keyv@npm:^4.5.3":
version: 4.5.4 version: 4.5.4
resolution: "keyv@npm:4.5.4" resolution: "keyv@npm:4.5.4"
@ -6530,6 +6668,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"markdown-table@npm:^3.0.0":
version: 3.0.3
resolution: "markdown-table@npm:3.0.3"
checksum: 10c0/47433a3f31e4637a184e38e873ab1d2fadfb0106a683d466fec329e99a2d8dfa09f091fa42202c6f13ec94aef0199f449a684b28042c636f2edbc1b7e1811dcd
languageName: node
linkType: hard
"matcher@npm:^3.0.0": "matcher@npm:^3.0.0":
version: 3.0.0 version: 3.0.0
resolution: "matcher@npm:3.0.0" resolution: "matcher@npm:3.0.0"
@ -6539,6 +6684,18 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"mdast-util-find-and-replace@npm:^3.0.0":
version: 3.0.1
resolution: "mdast-util-find-and-replace@npm:3.0.1"
dependencies:
"@types/mdast": "npm:^4.0.0"
escape-string-regexp: "npm:^5.0.0"
unist-util-is: "npm:^6.0.0"
unist-util-visit-parents: "npm:^6.0.0"
checksum: 10c0/1faca98c4ee10a919f23b8cc6d818e5bb6953216a71dfd35f51066ed5d51ef86e5063b43dcfdc6061cd946e016a9f0d44a1dccadd58452cf4ed14e39377f00cb
languageName: node
linkType: hard
"mdast-util-from-markdown@npm:^2.0.0": "mdast-util-from-markdown@npm:^2.0.0":
version: 2.0.1 version: 2.0.1
resolution: "mdast-util-from-markdown@npm:2.0.1" resolution: "mdast-util-from-markdown@npm:2.0.1"
@ -6559,6 +6716,98 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"mdast-util-gfm-autolink-literal@npm:^2.0.0":
version: 2.0.0
resolution: "mdast-util-gfm-autolink-literal@npm:2.0.0"
dependencies:
"@types/mdast": "npm:^4.0.0"
ccount: "npm:^2.0.0"
devlop: "npm:^1.0.0"
mdast-util-find-and-replace: "npm:^3.0.0"
micromark-util-character: "npm:^2.0.0"
checksum: 10c0/821ef91db108f05b321c54fdf4436df9d6badb33e18f714d8d52c0e70f988f5b6b118cdd4d607b4cb3bef1718304ce7e9fb25fa580622c3d20d68c1489c64875
languageName: node
linkType: hard
"mdast-util-gfm-footnote@npm:^2.0.0":
version: 2.0.0
resolution: "mdast-util-gfm-footnote@npm:2.0.0"
dependencies:
"@types/mdast": "npm:^4.0.0"
devlop: "npm:^1.1.0"
mdast-util-from-markdown: "npm:^2.0.0"
mdast-util-to-markdown: "npm:^2.0.0"
micromark-util-normalize-identifier: "npm:^2.0.0"
checksum: 10c0/c673b22bea24740235e74cfd66765b41a2fa540334f7043fa934b94938b06b7d3c93f2d3b33671910c5492b922c0cc98be833be3b04cfed540e0679650a6d2de
languageName: node
linkType: hard
"mdast-util-gfm-strikethrough@npm:^2.0.0":
version: 2.0.0
resolution: "mdast-util-gfm-strikethrough@npm:2.0.0"
dependencies:
"@types/mdast": "npm:^4.0.0"
mdast-util-from-markdown: "npm:^2.0.0"
mdast-util-to-markdown: "npm:^2.0.0"
checksum: 10c0/b053e93d62c7545019bd914271ea9e5667ad3b3b57d16dbf68e56fea39a7e19b4a345e781312714eb3d43fdd069ff7ee22a3ca7f6149dfa774554f19ce3ac056
languageName: node
linkType: hard
"mdast-util-gfm-table@npm:^2.0.0":
version: 2.0.0
resolution: "mdast-util-gfm-table@npm:2.0.0"
dependencies:
"@types/mdast": "npm:^4.0.0"
devlop: "npm:^1.0.0"
markdown-table: "npm:^3.0.0"
mdast-util-from-markdown: "npm:^2.0.0"
mdast-util-to-markdown: "npm:^2.0.0"
checksum: 10c0/128af47c503a53bd1c79f20642561e54a510ad5e2db1e418d28fefaf1294ab839e6c838e341aef5d7e404f9170b9ca3d1d89605f234efafde93ee51174a6e31e
languageName: node
linkType: hard
"mdast-util-gfm-task-list-item@npm:^2.0.0":
version: 2.0.0
resolution: "mdast-util-gfm-task-list-item@npm:2.0.0"
dependencies:
"@types/mdast": "npm:^4.0.0"
devlop: "npm:^1.0.0"
mdast-util-from-markdown: "npm:^2.0.0"
mdast-util-to-markdown: "npm:^2.0.0"
checksum: 10c0/258d725288482b636c0a376c296431390c14b4f29588675297cb6580a8598ed311fc73ebc312acfca12cc8546f07a3a285a53a3b082712e2cbf5c190d677d834
languageName: node
linkType: hard
"mdast-util-gfm@npm:^3.0.0":
version: 3.0.0
resolution: "mdast-util-gfm@npm:3.0.0"
dependencies:
mdast-util-from-markdown: "npm:^2.0.0"
mdast-util-gfm-autolink-literal: "npm:^2.0.0"
mdast-util-gfm-footnote: "npm:^2.0.0"
mdast-util-gfm-strikethrough: "npm:^2.0.0"
mdast-util-gfm-table: "npm:^2.0.0"
mdast-util-gfm-task-list-item: "npm:^2.0.0"
mdast-util-to-markdown: "npm:^2.0.0"
checksum: 10c0/91596fe9bf3e4a0c546d0c57f88106c17956d9afbe88ceb08308e4da2388aff64489d649ddad599caecfdf755fc3ae4c9b82c219b85281bc0586b67599881fca
languageName: node
linkType: hard
"mdast-util-math@npm:^3.0.0":
version: 3.0.0
resolution: "mdast-util-math@npm:3.0.0"
dependencies:
"@types/hast": "npm:^3.0.0"
"@types/mdast": "npm:^4.0.0"
devlop: "npm:^1.0.0"
longest-streak: "npm:^3.0.0"
mdast-util-from-markdown: "npm:^2.0.0"
mdast-util-to-markdown: "npm:^2.1.0"
unist-util-remove-position: "npm:^5.0.0"
checksum: 10c0/d4e839e38719f26872ed78aac18339805a892f1b56585a9cb8668f34e221b4f0660b9dfe49ec96dbbe79fd1b63b648608a64046d8286bcd2f9d576e80b48a0a1
languageName: node
linkType: hard
"mdast-util-mdx-expression@npm:^2.0.0": "mdast-util-mdx-expression@npm:^2.0.0":
version: 2.0.0 version: 2.0.0
resolution: "mdast-util-mdx-expression@npm:2.0.0" resolution: "mdast-util-mdx-expression@npm:2.0.0"
@ -6635,7 +6884,7 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"mdast-util-to-markdown@npm:^2.0.0": "mdast-util-to-markdown@npm:^2.0.0, mdast-util-to-markdown@npm:^2.1.0":
version: 2.1.0 version: 2.1.0
resolution: "mdast-util-to-markdown@npm:2.1.0" resolution: "mdast-util-to-markdown@npm:2.1.0"
dependencies: dependencies:
@ -6698,6 +6947,114 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"micromark-extension-gfm-autolink-literal@npm:^2.0.0":
version: 2.1.0
resolution: "micromark-extension-gfm-autolink-literal@npm:2.1.0"
dependencies:
micromark-util-character: "npm:^2.0.0"
micromark-util-sanitize-uri: "npm:^2.0.0"
micromark-util-symbol: "npm:^2.0.0"
micromark-util-types: "npm:^2.0.0"
checksum: 10c0/84e6fbb84ea7c161dfa179665dc90d51116de4c28f3e958260c0423e5a745372b7dcbc87d3cde98213b532e6812f847eef5ae561c9397d7f7da1e59872ef3efe
languageName: node
linkType: hard
"micromark-extension-gfm-footnote@npm:^2.0.0":
version: 2.1.0
resolution: "micromark-extension-gfm-footnote@npm:2.1.0"
dependencies:
devlop: "npm:^1.0.0"
micromark-core-commonmark: "npm:^2.0.0"
micromark-factory-space: "npm:^2.0.0"
micromark-util-character: "npm:^2.0.0"
micromark-util-normalize-identifier: "npm:^2.0.0"
micromark-util-sanitize-uri: "npm:^2.0.0"
micromark-util-symbol: "npm:^2.0.0"
micromark-util-types: "npm:^2.0.0"
checksum: 10c0/d172e4218968b7371b9321af5cde8c77423f73b233b2b0fcf3ff6fd6f61d2e0d52c49123a9b7910612478bf1f0d5e88c75a3990dd68f70f3933fe812b9f77edc
languageName: node
linkType: hard
"micromark-extension-gfm-strikethrough@npm:^2.0.0":
version: 2.1.0
resolution: "micromark-extension-gfm-strikethrough@npm:2.1.0"
dependencies:
devlop: "npm:^1.0.0"
micromark-util-chunked: "npm:^2.0.0"
micromark-util-classify-character: "npm:^2.0.0"
micromark-util-resolve-all: "npm:^2.0.0"
micromark-util-symbol: "npm:^2.0.0"
micromark-util-types: "npm:^2.0.0"
checksum: 10c0/ef4f248b865bdda71303b494671b7487808a340b25552b11ca6814dff3fcfaab9be8d294643060bbdb50f79313e4a686ab18b99cbe4d3ee8a4170fcd134234fb
languageName: node
linkType: hard
"micromark-extension-gfm-table@npm:^2.0.0":
version: 2.1.0
resolution: "micromark-extension-gfm-table@npm:2.1.0"
dependencies:
devlop: "npm:^1.0.0"
micromark-factory-space: "npm:^2.0.0"
micromark-util-character: "npm:^2.0.0"
micromark-util-symbol: "npm:^2.0.0"
micromark-util-types: "npm:^2.0.0"
checksum: 10c0/c1b564ab68576406046d825b9574f5b4dbedbb5c44bede49b5babc4db92f015d9057dd79d8e0530f2fecc8970a695c40ac2e5e1d4435ccf3ef161038d0d1463b
languageName: node
linkType: hard
"micromark-extension-gfm-tagfilter@npm:^2.0.0":
version: 2.0.0
resolution: "micromark-extension-gfm-tagfilter@npm:2.0.0"
dependencies:
micromark-util-types: "npm:^2.0.0"
checksum: 10c0/995558843fff137ae4e46aecb878d8a4691cdf23527dcf1e2f0157d66786be9f7bea0109c52a8ef70e68e3f930af811828ba912239438e31a9cfb9981f44d34d
languageName: node
linkType: hard
"micromark-extension-gfm-task-list-item@npm:^2.0.0":
version: 2.1.0
resolution: "micromark-extension-gfm-task-list-item@npm:2.1.0"
dependencies:
devlop: "npm:^1.0.0"
micromark-factory-space: "npm:^2.0.0"
micromark-util-character: "npm:^2.0.0"
micromark-util-symbol: "npm:^2.0.0"
micromark-util-types: "npm:^2.0.0"
checksum: 10c0/78aa537d929e9309f076ba41e5edc99f78d6decd754b6734519ccbbfca8abd52e1c62df68d41a6ae64d2a3fc1646cea955893c79680b0b4385ced4c52296181f
languageName: node
linkType: hard
"micromark-extension-gfm@npm:^3.0.0":
version: 3.0.0
resolution: "micromark-extension-gfm@npm:3.0.0"
dependencies:
micromark-extension-gfm-autolink-literal: "npm:^2.0.0"
micromark-extension-gfm-footnote: "npm:^2.0.0"
micromark-extension-gfm-strikethrough: "npm:^2.0.0"
micromark-extension-gfm-table: "npm:^2.0.0"
micromark-extension-gfm-tagfilter: "npm:^2.0.0"
micromark-extension-gfm-task-list-item: "npm:^2.0.0"
micromark-util-combine-extensions: "npm:^2.0.0"
micromark-util-types: "npm:^2.0.0"
checksum: 10c0/970e28df6ebdd7c7249f52a0dda56e0566fbfa9ae56c8eeeb2445d77b6b89d44096880cd57a1c01e7821b1f4e31009109fbaca4e89731bff7b83b8519690e5d9
languageName: node
linkType: hard
"micromark-extension-math@npm:^3.0.0":
version: 3.1.0
resolution: "micromark-extension-math@npm:3.1.0"
dependencies:
"@types/katex": "npm:^0.16.0"
devlop: "npm:^1.0.0"
katex: "npm:^0.16.0"
micromark-factory-space: "npm:^2.0.0"
micromark-util-character: "npm:^2.0.0"
micromark-util-symbol: "npm:^2.0.0"
micromark-util-types: "npm:^2.0.0"
checksum: 10c0/56e6f2185a4613f9d47e7e98cf8605851c990957d9229c942b005e286c8087b61dc9149448d38b2f8be6d42cc6a64aad7e1f2778ddd86fbbb1a2f48a3ca1872f
languageName: node
linkType: hard
"micromark-factory-destination@npm:^2.0.0": "micromark-factory-destination@npm:^2.0.0":
version: 2.0.0 version: 2.0.0
resolution: "micromark-factory-destination@npm:2.0.0" resolution: "micromark-factory-destination@npm:2.0.0"
@ -7529,6 +7886,15 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"parse5@npm:^7.0.0":
version: 7.1.2
resolution: "parse5@npm:7.1.2"
dependencies:
entities: "npm:^4.4.0"
checksum: 10c0/297d7af8224f4b5cb7f6617ecdae98eeaed7f8cbd78956c42785e230505d5a4f07cef352af10d3006fa5c1544b76b57784d3a22d861ae071bbc460c649482bf4
languageName: node
linkType: hard
"path-exists@npm:^3.0.0": "path-exists@npm:^3.0.0":
version: 3.0.0 version: 3.0.0
resolution: "path-exists@npm:3.0.0" resolution: "path-exists@npm:3.0.0"
@ -8753,6 +9119,47 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"rehype-katex@npm:^7.0.0":
version: 7.0.0
resolution: "rehype-katex@npm:7.0.0"
dependencies:
"@types/hast": "npm:^3.0.0"
"@types/katex": "npm:^0.16.0"
hast-util-from-html-isomorphic: "npm:^2.0.0"
hast-util-to-text: "npm:^4.0.0"
katex: "npm:^0.16.0"
unist-util-visit-parents: "npm:^6.0.0"
vfile: "npm:^6.0.0"
checksum: 10c0/4986d5db673576df0274464eafecef7c999fb72bf16e8df92454c68bf063b005010ab5465c64dacfbc1767ed6446dd03768917df7b9983f5e60711bce78b9880
languageName: node
linkType: hard
"remark-gfm@npm:^4.0.0":
version: 4.0.0
resolution: "remark-gfm@npm:4.0.0"
dependencies:
"@types/mdast": "npm:^4.0.0"
mdast-util-gfm: "npm:^3.0.0"
micromark-extension-gfm: "npm:^3.0.0"
remark-parse: "npm:^11.0.0"
remark-stringify: "npm:^11.0.0"
unified: "npm:^11.0.0"
checksum: 10c0/db0aa85ab718d475c2596e27c95be9255d3b0fc730a4eda9af076b919f7dd812f7be3ac020611a8dbe5253fd29671d7b12750b56e529fdc32dfebad6dbf77403
languageName: node
linkType: hard
"remark-math@npm:^6.0.0":
version: 6.0.0
resolution: "remark-math@npm:6.0.0"
dependencies:
"@types/mdast": "npm:^4.0.0"
mdast-util-math: "npm:^3.0.0"
micromark-extension-math: "npm:^3.0.0"
unified: "npm:^11.0.0"
checksum: 10c0/859613c4db194bb6b3c9c063661dc52b8ceda9c5cf3256b42f73d93eb8f38a6d634eb5f976fe094425f6f1035aaf329eb49ada314feb3b2b1073326b6d3aaa02
languageName: node
linkType: hard
"remark-parse@npm:^11.0.0": "remark-parse@npm:^11.0.0":
version: 11.0.0 version: 11.0.0
resolution: "remark-parse@npm:11.0.0" resolution: "remark-parse@npm:11.0.0"
@ -8778,6 +9185,17 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"remark-stringify@npm:^11.0.0":
version: 11.0.0
resolution: "remark-stringify@npm:11.0.0"
dependencies:
"@types/mdast": "npm:^4.0.0"
mdast-util-to-markdown: "npm:^2.0.0"
unified: "npm:^11.0.0"
checksum: 10c0/0cdb37ce1217578f6f847c7ec9f50cbab35df5b9e3903d543e74b405404e67c07defcb23cd260a567b41b769400f6de03c2c3d9cd6ae7a6707d5c8d89ead489f
languageName: node
linkType: hard
"require-directory@npm:^2.1.1": "require-directory@npm:^2.1.1":
version: 2.1.1 version: 2.1.1
resolution: "require-directory@npm:2.1.1" resolution: "require-directory@npm:2.1.1"
@ -9831,6 +10249,16 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"unist-util-find-after@npm:^5.0.0":
version: 5.0.0
resolution: "unist-util-find-after@npm:5.0.0"
dependencies:
"@types/unist": "npm:^3.0.0"
unist-util-is: "npm:^6.0.0"
checksum: 10c0/a7cea473c4384df8de867c456b797ff1221b20f822e1af673ff5812ed505358b36f47f3b084ac14c3622cb879ed833b71b288e8aa71025352a2aab4c2925a6eb
languageName: node
linkType: hard
"unist-util-is@npm:^6.0.0": "unist-util-is@npm:^6.0.0":
version: 6.0.0 version: 6.0.0
resolution: "unist-util-is@npm:6.0.0" resolution: "unist-util-is@npm:6.0.0"
@ -9996,6 +10424,16 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"vfile-location@npm:^5.0.0":
version: 5.0.3
resolution: "vfile-location@npm:5.0.3"
dependencies:
"@types/unist": "npm:^3.0.0"
vfile: "npm:^6.0.0"
checksum: 10c0/1711f67802a5bc175ea69750d59863343ed43d1b1bb25c0a9063e4c70595e673e53e2ed5cdbb6dcdc370059b31605144d95e8c061b9361bcc2b036b8f63a4966
languageName: node
linkType: hard
"vfile-message@npm:^4.0.0": "vfile-message@npm:^4.0.0":
version: 4.0.2 version: 4.0.2
resolution: "vfile-message@npm:4.0.2" resolution: "vfile-message@npm:4.0.2"
@ -10064,6 +10502,13 @@ __metadata:
languageName: node languageName: node
linkType: hard linkType: hard
"web-namespaces@npm:^2.0.0":
version: 2.0.1
resolution: "web-namespaces@npm:2.0.1"
checksum: 10c0/df245f466ad83bd5cd80bfffc1674c7f64b7b84d1de0e4d2c0934fb0782e0a599164e7197a4bce310ee3342fd61817b8047ff04f076a1ce12dd470584142a4bd
languageName: node
linkType: hard
"web-streams-polyfill@npm:4.0.0-beta.3": "web-streams-polyfill@npm:4.0.0-beta.3":
version: 4.0.0-beta.3 version: 4.0.0-beta.3
resolution: "web-streams-polyfill@npm:4.0.0-beta.3" resolution: "web-streams-polyfill@npm:4.0.0-beta.3"