[IMPROVE] Add support to Linebreak and Katex on markdown (#4361)
* fix enableMessageParser logic * create LineBreak component * fix code style * add KaTeX support * add Katex and Inline Katex stories * update snapshots * add color prop * update snapshot * update snapshot
This commit is contained in:
parent
1c1dfe5af1
commit
376c8e8252
|
@ -138,7 +138,7 @@ class Markdown extends PureComponent<IMarkdownProps, any> {
|
||||||
|
|
||||||
get isNewMarkdown(): boolean {
|
get isNewMarkdown(): boolean {
|
||||||
const { md, enableMessageParser } = this.props;
|
const { md, enableMessageParser } = this.props;
|
||||||
return !!enableMessageParser && !!md;
|
return (enableMessageParser ?? true) && !!md;
|
||||||
}
|
}
|
||||||
|
|
||||||
renderText = ({ context, literal }: { context: []; literal: string }) => {
|
renderText = ({ context, literal }: { context: []; literal: string }) => {
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Text } from 'react-native';
|
import { View } from 'react-native';
|
||||||
import { Code as CodeProps } from '@rocket.chat/message-parser';
|
import { Code as CodeProps } from '@rocket.chat/message-parser';
|
||||||
|
|
||||||
import styles from '../styles';
|
import styles from '../styles';
|
||||||
import { themes } from '../../../lib/constants';
|
|
||||||
import { useTheme } from '../../../theme';
|
import { useTheme } from '../../../theme';
|
||||||
import CodeLine from './CodeLine';
|
import CodeLine from './CodeLine';
|
||||||
|
|
||||||
|
@ -11,17 +10,16 @@ interface ICodeProps {
|
||||||
value: CodeProps['value'];
|
value: CodeProps['value'];
|
||||||
}
|
}
|
||||||
|
|
||||||
const Code = ({ value }: ICodeProps) => {
|
const Code = ({ value }: ICodeProps): React.ReactElement => {
|
||||||
const { theme } = useTheme();
|
const { colors } = useTheme();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Text
|
<View
|
||||||
style={[
|
style={[
|
||||||
styles.codeBlock,
|
styles.codeBlock,
|
||||||
{
|
{
|
||||||
color: themes[theme].bodyText,
|
backgroundColor: colors.bannerBackground,
|
||||||
backgroundColor: themes[theme].bannerBackground,
|
borderColor: colors.borderColor
|
||||||
borderColor: themes[theme].borderColor
|
|
||||||
}
|
}
|
||||||
]}>
|
]}>
|
||||||
{value.map(block => {
|
{value.map(block => {
|
||||||
|
@ -32,7 +30,7 @@ const Code = ({ value }: ICodeProps) => {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
})}
|
})}
|
||||||
</Text>
|
</View>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,21 @@
|
||||||
|
import { CodeLine as CodeLineProps } from '@rocket.chat/message-parser';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Text } from 'react-native';
|
import { Text } from 'react-native';
|
||||||
import { CodeLine as CodeLineProps } from '@rocket.chat/message-parser';
|
|
||||||
|
import { useTheme } from '../../../theme';
|
||||||
|
import styles from '../styles';
|
||||||
|
|
||||||
interface ICodeLineProps {
|
interface ICodeLineProps {
|
||||||
value: CodeLineProps['value'];
|
value: CodeLineProps['value'];
|
||||||
}
|
}
|
||||||
|
|
||||||
const CodeLine = ({ value }: ICodeLineProps) => {
|
const CodeLine = ({ value }: ICodeLineProps): React.ReactElement | null => {
|
||||||
|
const { colors } = useTheme();
|
||||||
if (value.type !== 'PLAIN_TEXT') {
|
if (value.type !== 'PLAIN_TEXT') {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return <Text>{value.value}</Text>;
|
return <Text style={[styles.codeBlockText, { color: colors.bodyText }]}>{value.value}</Text>;
|
||||||
};
|
};
|
||||||
|
|
||||||
export default CodeLine;
|
export default CodeLine;
|
||||||
|
|
|
@ -14,12 +14,13 @@ import Emoji from './Emoji';
|
||||||
import InlineCode from './InlineCode';
|
import InlineCode from './InlineCode';
|
||||||
import Image from './Image';
|
import Image from './Image';
|
||||||
import MarkdownContext from './MarkdownContext';
|
import MarkdownContext from './MarkdownContext';
|
||||||
|
// import { InlineKaTeX, KaTeX } from './Katex';
|
||||||
|
|
||||||
interface IParagraphProps {
|
interface IParagraphProps {
|
||||||
value: ParagraphProps['value'];
|
value: ParagraphProps['value'];
|
||||||
}
|
}
|
||||||
|
|
||||||
const Inline = ({ value }: IParagraphProps) => {
|
const Inline = ({ value }: IParagraphProps): React.ReactElement | null => {
|
||||||
const { useRealName, username, navToRoomInfo, mentions, channels } = useContext(MarkdownContext);
|
const { useRealName, username, navToRoomInfo, mentions, channels } = useContext(MarkdownContext);
|
||||||
return (
|
return (
|
||||||
<Text style={styles.inline}>
|
<Text style={styles.inline}>
|
||||||
|
@ -53,6 +54,9 @@ const Inline = ({ value }: IParagraphProps) => {
|
||||||
return <Hashtag hashtag={block.value.value} navToRoomInfo={navToRoomInfo} channels={channels} />;
|
return <Hashtag hashtag={block.value.value} navToRoomInfo={navToRoomInfo} channels={channels} />;
|
||||||
case 'INLINE_CODE':
|
case 'INLINE_CODE':
|
||||||
return <InlineCode value={block.value} />;
|
return <InlineCode value={block.value} />;
|
||||||
|
case 'INLINE_KATEX':
|
||||||
|
// return <InlineKaTeX value={block.value} />;
|
||||||
|
return <Text>{block.value}</Text>;
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
import React from 'react';
|
||||||
|
import { KaTeX as KaTeXProps } from '@rocket.chat/message-parser';
|
||||||
|
// eslint-disable-next-line import/no-unresolved
|
||||||
|
import MathView, { MathText } from 'react-native-math-view';
|
||||||
|
|
||||||
|
import { useTheme } from '../../../theme';
|
||||||
|
|
||||||
|
interface IKaTeXProps {
|
||||||
|
value: KaTeXProps['value'];
|
||||||
|
}
|
||||||
|
|
||||||
|
export const KaTeX = ({ value }: IKaTeXProps): React.ReactElement | null => {
|
||||||
|
const { colors } = useTheme();
|
||||||
|
return <MathView math={value} style={{ color: colors.bodyText }} />;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const InlineKaTeX = ({ value }: IKaTeXProps): React.ReactElement | null => {
|
||||||
|
const { colors } = useTheme();
|
||||||
|
return <MathText color value={`$$${value}$$`} direction='ltr' style={{ color: colors.bodyText }} />;
|
||||||
|
};
|
|
@ -0,0 +1,6 @@
|
||||||
|
import React from 'react';
|
||||||
|
import { View } from 'react-native';
|
||||||
|
|
||||||
|
export default function LineBreak() {
|
||||||
|
return <View style={{ height: 8 }} />;
|
||||||
|
}
|
|
@ -12,6 +12,8 @@ import UnorderedList from './UnorderedList';
|
||||||
import { IUserMention, IUserChannel, TOnLinkPress } from '../interfaces';
|
import { IUserMention, IUserChannel, TOnLinkPress } from '../interfaces';
|
||||||
import TaskList from './TaskList';
|
import TaskList from './TaskList';
|
||||||
import MarkdownContext from './MarkdownContext';
|
import MarkdownContext from './MarkdownContext';
|
||||||
|
import LineBreak from './LineBreak';
|
||||||
|
import { KaTeX } from './Katex';
|
||||||
|
|
||||||
interface IBodyProps {
|
interface IBodyProps {
|
||||||
tokens?: MarkdownAST;
|
tokens?: MarkdownAST;
|
||||||
|
@ -35,7 +37,7 @@ const Body = ({
|
||||||
getCustomEmoji,
|
getCustomEmoji,
|
||||||
baseUrl,
|
baseUrl,
|
||||||
onLinkPress
|
onLinkPress
|
||||||
}: IBodyProps) => {
|
}: IBodyProps): React.ReactElement | null => {
|
||||||
if (isEmpty(tokens)) {
|
if (isEmpty(tokens)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -70,6 +72,14 @@ const Body = ({
|
||||||
return <Code value={block.value} />;
|
return <Code value={block.value} />;
|
||||||
case 'HEADING':
|
case 'HEADING':
|
||||||
return <Heading value={block.value} level={block.level} />;
|
return <Heading value={block.value} level={block.level} />;
|
||||||
|
case 'LINE_BREAK':
|
||||||
|
return <LineBreak />;
|
||||||
|
// This prop exists, but not even on the web it is treated, so...
|
||||||
|
// https://github.com/RocketChat/Rocket.Chat/blob/develop/packages/gazzodown/src/Markup.tsx
|
||||||
|
// case 'LIST_ITEM':
|
||||||
|
// return <View />;
|
||||||
|
case 'KATEX':
|
||||||
|
return <KaTeX value={block.value} />;
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,13 +83,15 @@ export default StyleSheet.create({
|
||||||
paddingTop: 2
|
paddingTop: 2
|
||||||
},
|
},
|
||||||
codeBlock: {
|
codeBlock: {
|
||||||
fontSize: 16,
|
|
||||||
...sharedStyles.textRegular,
|
|
||||||
...codeFontFamily,
|
|
||||||
borderWidth: 1,
|
borderWidth: 1,
|
||||||
borderRadius: 4,
|
borderRadius: 4,
|
||||||
padding: 4
|
padding: 4
|
||||||
},
|
},
|
||||||
|
codeBlockText: {
|
||||||
|
fontSize: 16,
|
||||||
|
...sharedStyles.textRegular,
|
||||||
|
...codeFontFamily
|
||||||
|
},
|
||||||
link: {
|
link: {
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
...sharedStyles.textRegular
|
...sharedStyles.textRegular
|
||||||
|
|
|
@ -11,3 +11,4 @@ declare module 'react-native-mime-types';
|
||||||
declare module 'react-native-restart';
|
declare module 'react-native-restart';
|
||||||
declare module 'react-native-jitsi-meet';
|
declare module 'react-native-jitsi-meet';
|
||||||
declare module 'rn-root-view';
|
declare module 'rn-root-view';
|
||||||
|
declare module 'react-native-math-view';
|
||||||
|
|
|
@ -68,3 +68,13 @@ jest.mock('@gorhom/bottom-sheet', () => {
|
||||||
BottomSheetScrollView: react.ScrollView
|
BottomSheetScrollView: react.ScrollView
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// If you need to manually mock a lib use this mock pattern and set exports.
|
||||||
|
jest.mock('react-native-math-view', () => {
|
||||||
|
const react = require('react-native');
|
||||||
|
return {
|
||||||
|
__esModule: true,
|
||||||
|
default: react.View, // Default export
|
||||||
|
MathText: react.View // {...} Named export
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
|
@ -97,6 +97,7 @@
|
||||||
"react-native-jitsi-meet": "RocketChat/react-native-jitsi-meet",
|
"react-native-jitsi-meet": "RocketChat/react-native-jitsi-meet",
|
||||||
"react-native-keycommands": "2.0.3",
|
"react-native-keycommands": "2.0.3",
|
||||||
"react-native-localize": "2.1.1",
|
"react-native-localize": "2.1.1",
|
||||||
|
"react-native-math-view": "^3.9.5",
|
||||||
"react-native-mime-types": "2.3.0",
|
"react-native-mime-types": "2.3.0",
|
||||||
"react-native-mmkv-storage": "0.6.12",
|
"react-native-mmkv-storage": "0.6.12",
|
||||||
"react-native-modal": "11.10.0",
|
"react-native-modal": "11.10.0",
|
||||||
|
|
|
@ -692,3 +692,42 @@ stories.add('Lists', () => (
|
||||||
<NewMarkdown tokens={tasks} mentions={listMentions} channels={listChannels} />
|
<NewMarkdown tokens={tasks} mentions={listMentions} channels={listChannels} />
|
||||||
</View>
|
</View>
|
||||||
));
|
));
|
||||||
|
|
||||||
|
const katex = [
|
||||||
|
{
|
||||||
|
type: 'KATEX',
|
||||||
|
value: ' f(x) = \\int_{-\\infty}^\\infty \\hat f(\\xi)\\,e^{2 \\pi i \\xi x} \\,d\\xi '
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
const inlineKatex = [
|
||||||
|
{
|
||||||
|
type: 'PARAGRAPH',
|
||||||
|
value: [
|
||||||
|
{
|
||||||
|
type: 'INLINE_KATEX',
|
||||||
|
value: 'This text includes math notations and should be wrapped correctly for $\\alpha$ and $\\beta$ within the view.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'INLINE_KATEX',
|
||||||
|
value: "The following formula shouldn't be inline:$$x_{1,2} = {-b \\pm \\sqrt{b^2-4ac} \\over 2a}$$"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'INLINE_KATEX',
|
||||||
|
value: 'However the following formula should be inline with the text: \\( a^2 + b^2 = c^2 \\)'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
stories.add('Katex', () => (
|
||||||
|
<View style={styles.container}>
|
||||||
|
<NewMarkdown tokens={katex} />
|
||||||
|
</View>
|
||||||
|
));
|
||||||
|
|
||||||
|
stories.add('Inline Katex', () => (
|
||||||
|
<View style={styles.container}>
|
||||||
|
<NewMarkdown tokens={inlineKatex} />
|
||||||
|
</View>
|
||||||
|
));
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
129
yarn.lock
129
yarn.lock
|
@ -4654,6 +4654,13 @@
|
||||||
resolved "https://registry.yarnpkg.com/@types/hammerjs/-/hammerjs-2.0.41.tgz#f6ecf57d1b12d2befcce00e928a6a097c22980aa"
|
resolved "https://registry.yarnpkg.com/@types/hammerjs/-/hammerjs-2.0.41.tgz#f6ecf57d1b12d2befcce00e928a6a097c22980aa"
|
||||||
integrity sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==
|
integrity sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==
|
||||||
|
|
||||||
|
"@types/hast@^2.0.0":
|
||||||
|
version "2.3.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc"
|
||||||
|
integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==
|
||||||
|
dependencies:
|
||||||
|
"@types/unist" "*"
|
||||||
|
|
||||||
"@types/history@*":
|
"@types/history@*":
|
||||||
version "4.7.6"
|
version "4.7.6"
|
||||||
resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.6.tgz#ed8fc802c45b8e8f54419c2d054e55c9ea344356"
|
resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.6.tgz#ed8fc802c45b8e8f54419c2d054e55c9ea344356"
|
||||||
|
@ -4949,6 +4956,11 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
source-map "^0.6.1"
|
source-map "^0.6.1"
|
||||||
|
|
||||||
|
"@types/unist@*":
|
||||||
|
version "2.0.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d"
|
||||||
|
integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==
|
||||||
|
|
||||||
"@types/url-parse@^1.4.8":
|
"@types/url-parse@^1.4.8":
|
||||||
version "1.4.8"
|
version "1.4.8"
|
||||||
resolved "https://registry.yarnpkg.com/@types/url-parse/-/url-parse-1.4.8.tgz#c3825047efbca1295b7f1646f38203d9145130d6"
|
resolved "https://registry.yarnpkg.com/@types/url-parse/-/url-parse-1.4.8.tgz#c3825047efbca1295b7f1646f38203d9145130d6"
|
||||||
|
@ -7370,6 +7382,11 @@ comma-separated-tokens@^1.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea"
|
resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea"
|
||||||
integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==
|
integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==
|
||||||
|
|
||||||
|
comma-separated-tokens@^2.0.0:
|
||||||
|
version "2.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz#d4c25abb679b7751c880be623c1179780fe1dd98"
|
||||||
|
integrity sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==
|
||||||
|
|
||||||
command-exists@^1.2.8:
|
command-exists@^1.2.8:
|
||||||
version "1.2.9"
|
version "1.2.9"
|
||||||
resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69"
|
resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69"
|
||||||
|
@ -7405,6 +7422,11 @@ command-line-usage@^6.1.0:
|
||||||
table-layout "^1.0.1"
|
table-layout "^1.0.1"
|
||||||
typical "^5.2.0"
|
typical "^5.2.0"
|
||||||
|
|
||||||
|
commander@9.2.0:
|
||||||
|
version "9.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/commander/-/commander-9.2.0.tgz#6e21014b2ed90d8b7c9647230d8b7a94a4a419a9"
|
||||||
|
integrity sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w==
|
||||||
|
|
||||||
commander@^2.19.0, commander@^2.20.0:
|
commander@^2.19.0, commander@^2.20.0:
|
||||||
version "2.20.3"
|
version "2.20.3"
|
||||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
|
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
|
||||||
|
@ -7853,6 +7875,11 @@ css-select@^4.2.1:
|
||||||
domutils "^2.8.0"
|
domutils "^2.8.0"
|
||||||
nth-check "^2.0.1"
|
nth-check "^2.0.1"
|
||||||
|
|
||||||
|
css-selector-parser@^1.0.0:
|
||||||
|
version "1.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-1.4.1.tgz#03f9cb8a81c3e5ab2c51684557d5aaf6d2569759"
|
||||||
|
integrity sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==
|
||||||
|
|
||||||
css-to-react-native@^2.2.1:
|
css-to-react-native@^2.2.1:
|
||||||
version "2.3.2"
|
version "2.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-2.3.2.tgz#e75e2f8f7aa385b4c3611c52b074b70a002f2e7d"
|
resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-2.3.2.tgz#e75e2f8f7aa385b4c3611c52b074b70a002f2e7d"
|
||||||
|
@ -8987,6 +9014,11 @@ eslint@^7.31.0:
|
||||||
text-table "^0.2.0"
|
text-table "^0.2.0"
|
||||||
v8-compile-cache "^2.0.3"
|
v8-compile-cache "^2.0.3"
|
||||||
|
|
||||||
|
esm@^3.2.25:
|
||||||
|
version "3.2.25"
|
||||||
|
resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10"
|
||||||
|
integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==
|
||||||
|
|
||||||
espree@^7.3.0, espree@^7.3.1:
|
espree@^7.3.0, espree@^7.3.1:
|
||||||
version "7.3.1"
|
version "7.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6"
|
resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6"
|
||||||
|
@ -10338,11 +10370,28 @@ hash.js@^1.0.0, hash.js@^1.0.3:
|
||||||
inherits "^2.0.3"
|
inherits "^2.0.3"
|
||||||
minimalistic-assert "^1.0.1"
|
minimalistic-assert "^1.0.1"
|
||||||
|
|
||||||
|
hast-util-from-selector@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/hast-util-from-selector/-/hast-util-from-selector-2.0.0.tgz#b78142068b26a7996f5e1cfc7069067d5468773b"
|
||||||
|
integrity sha512-ynzm+z7xEecWF8DvnJ5onpGIsfmXphKRsZUnWCfinKwP+fL1/2mYW1nWOVife61syQpF74j4h/57BT6e5niDwA==
|
||||||
|
dependencies:
|
||||||
|
"@types/hast" "^2.0.0"
|
||||||
|
css-selector-parser "^1.0.0"
|
||||||
|
hastscript "^7.0.0"
|
||||||
|
zwitch "^2.0.0"
|
||||||
|
|
||||||
hast-util-parse-selector@^2.0.0:
|
hast-util-parse-selector@^2.0.0:
|
||||||
version "2.2.4"
|
version "2.2.4"
|
||||||
resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.4.tgz#60c99d0b519e12ab4ed32e58f150ec3f61ed1974"
|
resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.4.tgz#60c99d0b519e12ab4ed32e58f150ec3f61ed1974"
|
||||||
integrity sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA==
|
integrity sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA==
|
||||||
|
|
||||||
|
hast-util-parse-selector@^3.0.0:
|
||||||
|
version "3.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-3.1.0.tgz#a519e27e8b61bd5a98fad494ed06131ce68d9c3f"
|
||||||
|
integrity sha512-AyjlI2pTAZEOeu7GeBPZhROx0RHBnydkQIXlhnFzDi0qfXTmGUWoCYZtomHbrdrheV4VFUlPcfJ6LMF5T6sQzg==
|
||||||
|
dependencies:
|
||||||
|
"@types/hast" "^2.0.0"
|
||||||
|
|
||||||
hastscript@^5.0.0:
|
hastscript@^5.0.0:
|
||||||
version "5.1.2"
|
version "5.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.2.tgz#bde2c2e56d04c62dd24e8c5df288d050a355fb8a"
|
resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.2.tgz#bde2c2e56d04c62dd24e8c5df288d050a355fb8a"
|
||||||
|
@ -10353,6 +10402,17 @@ hastscript@^5.0.0:
|
||||||
property-information "^5.0.0"
|
property-information "^5.0.0"
|
||||||
space-separated-tokens "^1.0.0"
|
space-separated-tokens "^1.0.0"
|
||||||
|
|
||||||
|
hastscript@^7.0.0:
|
||||||
|
version "7.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-7.0.2.tgz#d811fc040817d91923448a28156463b2e40d590a"
|
||||||
|
integrity sha512-uA8ooUY4ipaBvKcMuPehTAB/YfFLSSzCwFSwT6ltJbocFUKH/GDHLN+tflq7lSRf9H86uOuxOFkh1KgIy3Gg2g==
|
||||||
|
dependencies:
|
||||||
|
"@types/hast" "^2.0.0"
|
||||||
|
comma-separated-tokens "^2.0.0"
|
||||||
|
hast-util-parse-selector "^3.0.0"
|
||||||
|
property-information "^6.0.0"
|
||||||
|
space-separated-tokens "^2.0.0"
|
||||||
|
|
||||||
he@1.2.0, he@^1.2.0:
|
he@1.2.0, he@^1.2.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
|
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
|
||||||
|
@ -12764,6 +12824,16 @@ markdown-to-jsx@^6.11.4:
|
||||||
prop-types "^15.6.2"
|
prop-types "^15.6.2"
|
||||||
unquote "^1.1.0"
|
unquote "^1.1.0"
|
||||||
|
|
||||||
|
mathjax-full@^3.1.4:
|
||||||
|
version "3.2.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/mathjax-full/-/mathjax-full-3.2.2.tgz#43f02e55219db393030985d2b6537ceae82f1fa7"
|
||||||
|
integrity sha512-+LfG9Fik+OuI8SLwsiR02IVdjcnRCy5MufYLi0C3TdMT56L/pjB0alMVGgoWJF8pN9Rc7FESycZB9BMNWIid5w==
|
||||||
|
dependencies:
|
||||||
|
esm "^3.2.25"
|
||||||
|
mhchemparser "^4.1.0"
|
||||||
|
mj-context-menu "^0.6.1"
|
||||||
|
speech-rule-engine "^4.0.6"
|
||||||
|
|
||||||
md5-file@^3.2.3:
|
md5-file@^3.2.3:
|
||||||
version "3.2.3"
|
version "3.2.3"
|
||||||
resolved "https://registry.yarnpkg.com/md5-file/-/md5-file-3.2.3.tgz#f9bceb941eca2214a4c0727f5e700314e770f06f"
|
resolved "https://registry.yarnpkg.com/md5-file/-/md5-file-3.2.3.tgz#f9bceb941eca2214a4c0727f5e700314e770f06f"
|
||||||
|
@ -13119,6 +13189,11 @@ metro@0.64.0, metro@^0.64.0:
|
||||||
ws "^1.1.5"
|
ws "^1.1.5"
|
||||||
yargs "^15.3.1"
|
yargs "^15.3.1"
|
||||||
|
|
||||||
|
mhchemparser@^4.1.0:
|
||||||
|
version "4.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/mhchemparser/-/mhchemparser-4.1.1.tgz#a2142fdab37a02ec8d1b48a445059287790becd5"
|
||||||
|
integrity sha512-R75CUN6O6e1t8bgailrF1qPq+HhVeFTM3XQ0uzI+mXTybmphy3b6h4NbLOYhemViQ3lUs+6CKRkC3Ws1TlYREA==
|
||||||
|
|
||||||
microevent.ts@~0.1.1:
|
microevent.ts@~0.1.1:
|
||||||
version "0.1.1"
|
version "0.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0"
|
resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0"
|
||||||
|
@ -13322,6 +13397,11 @@ mixin-object@^2.0.1:
|
||||||
for-in "^0.1.3"
|
for-in "^0.1.3"
|
||||||
is-extendable "^0.1.1"
|
is-extendable "^0.1.1"
|
||||||
|
|
||||||
|
mj-context-menu@^0.6.1:
|
||||||
|
version "0.6.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/mj-context-menu/-/mj-context-menu-0.6.1.tgz#a043c5282bf7e1cf3821de07b13525ca6f85aa69"
|
||||||
|
integrity sha512-7NO5s6n10TIV96d4g2uDpG7ZDpIhMh0QNfGdJw/W47JswFcosz457wqz/b5sAKvl12sxINGFCn80NZHKwxQEXA==
|
||||||
|
|
||||||
mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1:
|
mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1:
|
||||||
version "0.5.5"
|
version "0.5.5"
|
||||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
|
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
|
||||||
|
@ -14769,6 +14849,11 @@ property-information@^5.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
xtend "^4.0.0"
|
xtend "^4.0.0"
|
||||||
|
|
||||||
|
property-information@^6.0.0:
|
||||||
|
version "6.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.1.1.tgz#5ca85510a3019726cb9afed4197b7b8ac5926a22"
|
||||||
|
integrity sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w==
|
||||||
|
|
||||||
proxy-addr@~2.0.5:
|
proxy-addr@~2.0.5:
|
||||||
version "2.0.6"
|
version "2.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf"
|
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf"
|
||||||
|
@ -15237,6 +15322,16 @@ react-native-localize@2.1.1:
|
||||||
resolved "https://registry.yarnpkg.com/react-native-localize/-/react-native-localize-2.1.1.tgz#da8f8776991d2b748708c408db05152602cefb38"
|
resolved "https://registry.yarnpkg.com/react-native-localize/-/react-native-localize-2.1.1.tgz#da8f8776991d2b748708c408db05152602cefb38"
|
||||||
integrity sha512-+uyz2/b0vyLq19fcb7r1qU1gqmzbp3aC6EMTvOVXwfBuiN+aJXR/fDdFOJJ8D7+bLccKeuS2zBDrazh+ZayX/g==
|
integrity sha512-+uyz2/b0vyLq19fcb7r1qU1gqmzbp3aC6EMTvOVXwfBuiN+aJXR/fDdFOJJ8D7+bLccKeuS2zBDrazh+ZayX/g==
|
||||||
|
|
||||||
|
react-native-math-view@^3.9.5:
|
||||||
|
version "3.9.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/react-native-math-view/-/react-native-math-view-3.9.5.tgz#59c6fb0bef8eb460bf16bbdf8169e57ceb12eb4c"
|
||||||
|
integrity sha512-UJxrisNafszfqIW+utoSDylb72SkZ92cKz1IfE5Dm0s+uIaHxOxepF2DdRbktAV8c0FEFllnXfErcGdh8sfIBw==
|
||||||
|
dependencies:
|
||||||
|
hast-util-from-selector "^2.0.0"
|
||||||
|
lodash "^4.17.21"
|
||||||
|
mathjax-full "^3.1.4"
|
||||||
|
transformation-matrix "^2.8.0"
|
||||||
|
|
||||||
react-native-mime-types@2.3.0:
|
react-native-mime-types@2.3.0:
|
||||||
version "2.3.0"
|
version "2.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/react-native-mime-types/-/react-native-mime-types-2.3.0.tgz#1278602c3da94ffb47c6400ef861901c4ebac420"
|
resolved "https://registry.yarnpkg.com/react-native-mime-types/-/react-native-mime-types-2.3.0.tgz#1278602c3da94ffb47c6400ef861901c4ebac420"
|
||||||
|
@ -16784,6 +16879,11 @@ space-separated-tokens@^1.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899"
|
resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899"
|
||||||
integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==
|
integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==
|
||||||
|
|
||||||
|
space-separated-tokens@^2.0.0:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz#43193cec4fb858a2ce934b7f98b7f2c18107098b"
|
||||||
|
integrity sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==
|
||||||
|
|
||||||
spdx-correct@^3.0.0:
|
spdx-correct@^3.0.0:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
|
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
|
||||||
|
@ -16810,6 +16910,15 @@ spdx-license-ids@^3.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
|
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654"
|
||||||
integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
|
integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==
|
||||||
|
|
||||||
|
speech-rule-engine@^4.0.6:
|
||||||
|
version "4.0.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/speech-rule-engine/-/speech-rule-engine-4.0.7.tgz#b655dacbad3dae04acc0f7665e26ef258397dd09"
|
||||||
|
integrity sha512-sJrL3/wHzNwJRLBdf6CjJWIlxC04iYKkyXvYSVsWVOiC2DSkHmxsqOhEeMsBA9XK+CHuNcsdkbFDnoUfAsmp9g==
|
||||||
|
dependencies:
|
||||||
|
commander "9.2.0"
|
||||||
|
wicked-good-xpath "1.3.0"
|
||||||
|
xmldom-sre "0.1.31"
|
||||||
|
|
||||||
split-on-first@^1.0.0:
|
split-on-first@^1.0.0:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f"
|
resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f"
|
||||||
|
@ -17672,6 +17781,11 @@ tr46@~0.0.3:
|
||||||
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
|
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
|
||||||
integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
|
integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
|
||||||
|
|
||||||
|
transformation-matrix@^2.8.0:
|
||||||
|
version "2.12.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/transformation-matrix/-/transformation-matrix-2.12.0.tgz#cb826a23aa5d675d18940215ccb7613b8587830f"
|
||||||
|
integrity sha512-BbzXM7el7rNwIr1s87m8tcffH5qgY+HYROLn3BStRU9Y6vYTL37YZKadfNPEvGbP813iA1h8qflo4pa2TomkyQ==
|
||||||
|
|
||||||
truncate-utf8-bytes@^1.0.0:
|
truncate-utf8-bytes@^1.0.0:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b"
|
resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b"
|
||||||
|
@ -18477,6 +18591,11 @@ which@^1.2.9, which@^1.3.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
isexe "^2.0.0"
|
isexe "^2.0.0"
|
||||||
|
|
||||||
|
wicked-good-xpath@1.3.0:
|
||||||
|
version "1.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/wicked-good-xpath/-/wicked-good-xpath-1.3.0.tgz#81b0e95e8650e49c94b22298fff8686b5553cf6c"
|
||||||
|
integrity sha512-Gd9+TUn5nXdwj/hFsPVx5cuHHiF5Bwuc30jZ4+ronF1qHK5O7HD0sgmXWSEgwKquT3ClLoKPVbO6qGwVwLzvAw==
|
||||||
|
|
||||||
wide-align@1.1.3, wide-align@^1.1.0:
|
wide-align@1.1.3, wide-align@^1.1.0:
|
||||||
version "1.1.3"
|
version "1.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
|
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
|
||||||
|
@ -18695,6 +18814,11 @@ xmldoc@^1.1.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
sax "^1.2.1"
|
sax "^1.2.1"
|
||||||
|
|
||||||
|
xmldom-sre@0.1.31:
|
||||||
|
version "0.1.31"
|
||||||
|
resolved "https://registry.yarnpkg.com/xmldom-sre/-/xmldom-sre-0.1.31.tgz#10860d5bab2c603144597d04bf2c4980e98067f4"
|
||||||
|
integrity sha512-f9s+fUkX04BxQf+7mMWAp5zk61pciie+fFLC9hX9UVvCeJQfNHRHXpeo5MPcR0EUf57PYLdt+ZO4f3Ipk2oZUw==
|
||||||
|
|
||||||
xmldom@~0.5.0:
|
xmldom@~0.5.0:
|
||||||
version "0.5.0"
|
version "0.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.5.0.tgz#193cb96b84aa3486127ea6272c4596354cb4962e"
|
resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.5.0.tgz#193cb96b84aa3486127ea6272c4596354cb4962e"
|
||||||
|
@ -18819,3 +18943,8 @@ yocto-queue@^0.1.0:
|
||||||
version "0.1.0"
|
version "0.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
|
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
|
||||||
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
|
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
|
||||||
|
|
||||||
|
zwitch@^2.0.0:
|
||||||
|
version "2.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.2.tgz#91f8d0e901ffa3d66599756dde7f57b17c95dce1"
|
||||||
|
integrity sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==
|
||||||
|
|
Loading…
Reference in New Issue