react-native-marked 1.0.0-alpha.3 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +5 -4
  2. package/dist/commonjs/components/MDImage.js +5 -22
  3. package/dist/commonjs/components/MDImage.js.map +1 -1
  4. package/dist/commonjs/lib/Markdown.js +19 -11
  5. package/dist/commonjs/lib/Markdown.js.map +1 -1
  6. package/dist/commonjs/lib/Parser.js +38 -131
  7. package/dist/commonjs/lib/Parser.js.map +1 -1
  8. package/dist/commonjs/lib/Renderer.js +22 -13
  9. package/dist/commonjs/lib/Renderer.js.map +1 -1
  10. package/dist/commonjs/theme/colors.js +25 -0
  11. package/dist/commonjs/theme/colors.js.map +1 -0
  12. package/dist/commonjs/theme/styles.js +113 -0
  13. package/dist/commonjs/theme/styles.js.map +1 -0
  14. package/dist/commonjs/theme/theme.js +19 -0
  15. package/dist/commonjs/theme/theme.js.map +1 -0
  16. package/dist/commonjs/{types → theme}/types.js +0 -0
  17. package/dist/commonjs/theme/types.js.map +1 -0
  18. package/dist/module/components/MDImage.js +6 -22
  19. package/dist/module/components/MDImage.js.map +1 -1
  20. package/dist/module/lib/Markdown.js +18 -12
  21. package/dist/module/lib/Markdown.js.map +1 -1
  22. package/dist/module/lib/Parser.js +39 -130
  23. package/dist/module/lib/Parser.js.map +1 -1
  24. package/dist/module/lib/Renderer.js +19 -13
  25. package/dist/module/lib/Renderer.js.map +1 -1
  26. package/dist/module/theme/colors.js +18 -0
  27. package/dist/module/theme/colors.js.map +1 -0
  28. package/dist/module/theme/styles.js +102 -0
  29. package/dist/module/theme/styles.js.map +1 -0
  30. package/dist/module/theme/theme.js +7 -0
  31. package/dist/module/theme/theme.js.map +1 -0
  32. package/dist/module/{types → theme}/types.js +0 -0
  33. package/dist/module/theme/types.js.map +1 -0
  34. package/dist/typescript/components/MDImage.d.ts +1 -2
  35. package/dist/typescript/lib/Markdown.d.ts +6 -5
  36. package/dist/typescript/lib/Parser.d.ts +7 -5
  37. package/dist/typescript/lib/Renderer.d.ts +6 -6
  38. package/dist/typescript/theme/colors.d.ts +3 -0
  39. package/dist/typescript/theme/styles.d.ts +4 -0
  40. package/dist/typescript/theme/theme.d.ts +3 -0
  41. package/dist/typescript/theme/types.d.ts +25 -0
  42. package/package.json +10 -5
  43. package/src/components/MDImage.tsx +5 -28
  44. package/src/lib/Markdown.tsx +28 -10
  45. package/src/lib/Parser.tsx +163 -0
  46. package/src/lib/Renderer.tsx +32 -13
  47. package/src/theme/colors.ts +20 -0
  48. package/src/theme/styles.ts +117 -0
  49. package/src/theme/theme.ts +9 -0
  50. package/src/theme/types.ts +28 -0
  51. package/dist/commonjs/types/types.js.map +0 -1
  52. package/dist/module/types/types.js.map +0 -1
  53. package/dist/typescript/types/types.d.ts +0 -23
  54. package/src/lib/Parser.ts +0 -256
  55. package/src/types/types.ts +0 -25
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _reactNative = require("react-native");
9
+
10
+ var _theme = require("./theme");
11
+
12
+ const getFontStyles = theme => {
13
+ return _reactNative.StyleSheet.create({
14
+ regular: {
15
+ fontSize: 16,
16
+ lineHeight: 24,
17
+ color: theme.colors.text
18
+ },
19
+ heading: {
20
+ fontWeight: '500',
21
+ color: theme.colors.text
22
+ }
23
+ });
24
+ };
25
+
26
+ const getStyles = (userStyles, colorScheme) => {
27
+ const theme = (0, _theme.getTheme)(colorScheme || 'light');
28
+ const fontStyle = getFontStyles(theme);
29
+
30
+ const defaultStyles = _reactNative.StyleSheet.create({
31
+ container: {
32
+ backgroundColor: theme.colors.background
33
+ },
34
+ em: { ...fontStyle.regular,
35
+ fontStyle: 'italic'
36
+ },
37
+ strong: { ...fontStyle.regular,
38
+ fontWeight: 'bold'
39
+ },
40
+ text: { ...fontStyle.regular
41
+ },
42
+ paragraph: { ...fontStyle.regular,
43
+ paddingVertical: 8
44
+ },
45
+ link: { ...fontStyle.regular,
46
+ fontStyle: 'italic',
47
+ color: theme.colors.link
48
+ },
49
+ blockquote: {
50
+ borderLeftColor: theme.colors.border,
51
+ paddingLeft: 16,
52
+ borderLeftWidth: 5,
53
+ opacity: 0.8
54
+ },
55
+ h1: {
56
+ fontSize: 32,
57
+ lineHeight: 40,
58
+ fontWeight: 'bold',
59
+ marginVertical: 8,
60
+ letterSpacing: 0
61
+ },
62
+ h2: { ...fontStyle.heading,
63
+ fontSize: 28,
64
+ lineHeight: 36,
65
+ marginVertical: 8
66
+ },
67
+ h3: { ...fontStyle.heading,
68
+ fontSize: 24,
69
+ lineHeight: 32,
70
+ marginVertical: 4
71
+ },
72
+ h4: { ...fontStyle.heading,
73
+ fontSize: 22,
74
+ lineHeight: 28,
75
+ marginVertical: 4
76
+ },
77
+ h5: { ...fontStyle.regular,
78
+ ...fontStyle.heading,
79
+ marginVertical: 2
80
+ },
81
+ h6: { ...fontStyle.heading,
82
+ fontSize: 14,
83
+ lineHeight: 20,
84
+ marginVertical: 2
85
+ },
86
+ codespan: { ...fontStyle.regular,
87
+ fontStyle: 'italic',
88
+ backgroundColor: theme.colors.code,
89
+ fontWeight: '300'
90
+ },
91
+ code: {
92
+ padding: 16,
93
+ backgroundColor: theme.colors.code,
94
+ minWidth: '100%'
95
+ },
96
+ hr: {
97
+ borderBottomWidth: 1,
98
+ borderBottomColor: theme.colors.border,
99
+ marginVertical: 4
100
+ },
101
+ li: { ...fontStyle.regular,
102
+ flexShrink: 1
103
+ }
104
+ });
105
+
106
+ return { ...defaultStyles,
107
+ ...userStyles
108
+ };
109
+ };
110
+
111
+ var _default = getStyles;
112
+ exports.default = _default;
113
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getFontStyles","theme","StyleSheet","create","regular","fontSize","lineHeight","color","colors","text","heading","fontWeight","getStyles","userStyles","colorScheme","getTheme","fontStyle","defaultStyles","container","backgroundColor","background","em","strong","paragraph","paddingVertical","link","blockquote","borderLeftColor","border","paddingLeft","borderLeftWidth","opacity","h1","marginVertical","letterSpacing","h2","h3","h4","h5","h6","codespan","code","padding","minWidth","hr","borderBottomWidth","borderBottomColor","li","flexShrink"],"sources":["styles.ts"],"sourcesContent":["import { ColorSchemeName, StyleSheet } from 'react-native';\nimport { getTheme } from './theme';\nimport type { MarkedStyles, Theme } from './types';\n\nconst getFontStyles = (theme: Theme) => {\n return StyleSheet.create({\n regular: {\n fontSize: 16,\n lineHeight: 24,\n color: theme.colors.text,\n },\n heading: {\n fontWeight: '500',\n color: theme.colors.text,\n },\n });\n};\n\nconst getStyles = (\n userStyles?: MarkedStyles,\n colorScheme?: ColorSchemeName\n): MarkedStyles => {\n const theme = getTheme(colorScheme || 'light');\n const fontStyle = getFontStyles(theme);\n const defaultStyles = StyleSheet.create<MarkedStyles>({\n container: {\n backgroundColor: theme.colors.background,\n },\n em: {\n ...fontStyle.regular,\n fontStyle: 'italic',\n },\n strong: {\n ...fontStyle.regular,\n fontWeight: 'bold',\n },\n text: { ...fontStyle.regular },\n paragraph: {\n ...fontStyle.regular,\n paddingVertical: 8,\n },\n link: {\n ...fontStyle.regular,\n fontStyle: 'italic',\n color: theme.colors.link,\n },\n blockquote: {\n borderLeftColor: theme.colors.border,\n paddingLeft: 16,\n borderLeftWidth: 5,\n opacity: 0.8,\n },\n h1: {\n fontSize: 32,\n lineHeight: 40,\n fontWeight: 'bold',\n marginVertical: 8,\n letterSpacing: 0,\n },\n h2: {\n ...fontStyle.heading,\n fontSize: 28,\n lineHeight: 36,\n marginVertical: 8,\n },\n h3: {\n ...fontStyle.heading,\n fontSize: 24,\n lineHeight: 32,\n marginVertical: 4,\n },\n h4: {\n ...fontStyle.heading,\n fontSize: 22,\n lineHeight: 28,\n marginVertical: 4,\n },\n h5: {\n ...fontStyle.regular,\n ...fontStyle.heading,\n marginVertical: 2,\n },\n h6: {\n ...fontStyle.heading,\n fontSize: 14,\n lineHeight: 20,\n marginVertical: 2,\n },\n codespan: {\n ...fontStyle.regular,\n fontStyle: 'italic',\n backgroundColor: theme.colors.code,\n fontWeight: '300',\n },\n code: {\n padding: 16,\n backgroundColor: theme.colors.code,\n minWidth: '100%',\n },\n hr: {\n borderBottomWidth: 1,\n borderBottomColor: theme.colors.border,\n marginVertical: 4,\n },\n li: {\n ...fontStyle.regular,\n flexShrink: 1,\n },\n });\n\n return {\n ...defaultStyles,\n ...userStyles,\n };\n};\n\nexport default getStyles;\n"],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getTheme = void 0;
7
+
8
+ var _colors = _interopRequireDefault(require("./colors"));
9
+
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+
12
+ const getTheme = theme => {
13
+ return {
14
+ colors: _colors.default[theme || 'light']
15
+ };
16
+ };
17
+
18
+ exports.getTheme = getTheme;
19
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getTheme","theme","colors"],"sources":["theme.ts"],"sourcesContent":["import type { ColorSchemeName } from 'react-native';\nimport colors from './colors';\nimport type { Theme } from './types';\n\nexport const getTheme = (theme: ColorSchemeName): Theme => {\n return {\n colors: colors[theme || 'light'],\n };\n};\n"],"mappings":";;;;;;;AACA;;;;AAGO,MAAMA,QAAQ,GAAIC,KAAD,IAAmC;EACzD,OAAO;IACLC,MAAM,EAAEA,eAAA,CAAOD,KAAK,IAAI,OAAhB;EADH,CAAP;AAGD,CAJM"}
File without changes
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { TextStyle, ViewStyle } from 'react-native';\n\nexport interface MarkedStyles {\n container?: ViewStyle;\n em?: TextStyle;\n strong?: TextStyle;\n text?: TextStyle;\n paragraph?: ViewStyle;\n link?: TextStyle;\n blockquote?: ViewStyle;\n h1?: TextStyle;\n h2?: TextStyle;\n h3?: TextStyle;\n h4?: TextStyle;\n h5?: TextStyle;\n h6?: TextStyle;\n codespan?: TextStyle;\n code?: ViewStyle;\n hr?: ViewStyle;\n list?: ViewStyle;\n li?: TextStyle;\n}\n\nexport type ColorKeys = 'background' | 'code' | 'link' | 'text' | 'border';\n\nexport interface Theme {\n colors: Record<ColorKeys, string>;\n}\n"],"mappings":""}
@@ -1,35 +1,19 @@
1
- import React, { memo, useEffect, useState } from 'react';
1
+ import React, { memo, useEffect } from 'react';
2
2
  import { Image } from 'react-native';
3
- import FastImage from 'react-native-fast-image';
3
+ import FitImage from 'react-native-fit-image';
4
4
 
5
5
  const MDImage = _ref => {
6
6
  let {
7
- uri,
8
- width
7
+ uri
9
8
  } = _ref;
10
- const [height, setHeight] = useState(0);
11
9
  useEffect(() => {
12
10
  Image.prefetch(uri);
13
- Image.getSize(uri, (iWidth, iHeight) => {
14
- const heightCalc = width * (iHeight / iWidth);
15
- setHeight(heightCalc);
16
- });
17
- }, [uri, width, height]);
18
-
19
- if (height < 1) {
20
- return null;
21
- }
22
-
23
- return /*#__PURE__*/React.createElement(FastImage, {
24
- fallback: true,
11
+ }, [uri]);
12
+ return /*#__PURE__*/React.createElement(FitImage, {
25
13
  source: {
26
14
  uri
27
15
  },
28
- style: [{
29
- width: width,
30
- height: height
31
- }],
32
- resizeMode: FastImage.resizeMode.cover
16
+ resizeMode: "cover"
33
17
  });
34
18
  };
35
19
 
@@ -1 +1 @@
1
- {"version":3,"names":["React","memo","useEffect","useState","Image","FastImage","MDImage","uri","width","height","setHeight","prefetch","getSize","iWidth","iHeight","heightCalc","resizeMode","cover"],"sources":["MDImage.tsx"],"sourcesContent":["import React, { memo, useEffect, useState } from 'react';\nimport { Image } from 'react-native';\nimport FastImage from 'react-native-fast-image';\n\ninterface MDImageProps {\n uri: string;\n width: number;\n}\n\nconst MDImage = ({ uri, width }: MDImageProps) => {\n const [height, setHeight] = useState<number>(0);\n\n useEffect(() => {\n Image.prefetch(uri);\n Image.getSize(uri, (iWidth, iHeight) => {\n const heightCalc = width * (iHeight / iWidth);\n setHeight(heightCalc);\n });\n }, [uri, width, height]);\n\n if (height < 1) {\n return null;\n }\n\n return (\n <FastImage\n fallback\n source={{ uri }}\n style={[\n {\n width: width,\n height: height,\n },\n ]}\n resizeMode={FastImage.resizeMode.cover}\n />\n );\n};\n\nexport default memo(MDImage);\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,IAAhB,EAAsBC,SAAtB,EAAiCC,QAAjC,QAAiD,OAAjD;AACA,SAASC,KAAT,QAAsB,cAAtB;AACA,OAAOC,SAAP,MAAsB,yBAAtB;;AAOA,MAAMC,OAAO,GAAG,QAAkC;EAAA,IAAjC;IAAEC,GAAF;IAAOC;EAAP,CAAiC;EAChD,MAAM,CAACC,MAAD,EAASC,SAAT,IAAsBP,QAAQ,CAAS,CAAT,CAApC;EAEAD,SAAS,CAAC,MAAM;IACdE,KAAK,CAACO,QAAN,CAAeJ,GAAf;IACAH,KAAK,CAACQ,OAAN,CAAcL,GAAd,EAAmB,CAACM,MAAD,EAASC,OAAT,KAAqB;MACtC,MAAMC,UAAU,GAAGP,KAAK,IAAIM,OAAO,GAAGD,MAAd,CAAxB;MACAH,SAAS,CAACK,UAAD,CAAT;IACD,CAHD;EAID,CANQ,EAMN,CAACR,GAAD,EAAMC,KAAN,EAAaC,MAAb,CANM,CAAT;;EAQA,IAAIA,MAAM,GAAG,CAAb,EAAgB;IACd,OAAO,IAAP;EACD;;EAED,oBACE,oBAAC,SAAD;IACE,QAAQ,MADV;IAEE,MAAM,EAAE;MAAEF;IAAF,CAFV;IAGE,KAAK,EAAE,CACL;MACEC,KAAK,EAAEA,KADT;MAEEC,MAAM,EAAEA;IAFV,CADK,CAHT;IASE,UAAU,EAAEJ,SAAS,CAACW,UAAV,CAAqBC;EATnC,EADF;AAaD,CA5BD;;AA8BA,4BAAehB,IAAI,CAACK,OAAD,CAAnB"}
1
+ {"version":3,"names":["React","memo","useEffect","Image","FitImage","MDImage","uri","prefetch"],"sources":["MDImage.tsx"],"sourcesContent":["import React, { memo, useEffect } from 'react';\nimport { Image } from 'react-native';\nimport FitImage from 'react-native-fit-image';\n\ninterface MDImageProps {\n uri: string;\n}\n\nconst MDImage = ({ uri }: MDImageProps) => {\n useEffect(() => {\n Image.prefetch(uri);\n }, [uri]);\n\n return <FitImage source={{ uri }} resizeMode=\"cover\" />;\n};\n\nexport default memo(MDImage);\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,IAAhB,EAAsBC,SAAtB,QAAuC,OAAvC;AACA,SAASC,KAAT,QAAsB,cAAtB;AACA,OAAOC,QAAP,MAAqB,wBAArB;;AAMA,MAAMC,OAAO,GAAG,QAA2B;EAAA,IAA1B;IAAEC;EAAF,CAA0B;EACzCJ,SAAS,CAAC,MAAM;IACdC,KAAK,CAACI,QAAN,CAAeD,GAAf;EACD,CAFQ,EAEN,CAACA,GAAD,CAFM,CAAT;EAIA,oBAAO,oBAAC,QAAD;IAAU,MAAM,EAAE;MAAEA;IAAF,CAAlB;IAA2B,UAAU,EAAC;EAAtC,EAAP;AACD,CAND;;AAQA,4BAAeL,IAAI,CAACI,OAAD,CAAnB"}
@@ -1,21 +1,26 @@
1
1
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
2
 
3
- import React, { useCallback } from 'react';
3
+ import React, { memo, useCallback, useMemo } from 'react';
4
+ import { FlatList, useColorScheme } from 'react-native';
4
5
  import { marked } from 'marked';
5
6
  import Parser from './Parser';
6
- import { FlatList } from 'react-native';
7
+ import getStyles from '../theme/styles';
7
8
 
8
9
  const Markdown = _ref => {
9
10
  let {
10
11
  value,
11
- contentWidth,
12
- listProps
12
+ flatListProps,
13
+ styles: userStyles
13
14
  } = _ref;
14
- const tokens = marked.lexer(value.trim());
15
- const parser = new Parser({
16
- contentWidth
17
- });
18
- const rnElements = parser.parse(tokens);
15
+ const systemTheme = useColorScheme();
16
+ const styles = useMemo(() => getStyles(userStyles, systemTheme), [userStyles, systemTheme]);
17
+ const rnElements = useMemo(() => {
18
+ const parser = new Parser({
19
+ styles
20
+ });
21
+ const tokens = marked.lexer(value.trim());
22
+ return parser.parse(tokens);
23
+ }, [value, styles]);
19
24
  const renderItem = useCallback(_ref2 => {
20
25
  let {
21
26
  item
@@ -27,12 +32,13 @@ const Markdown = _ref => {
27
32
  keyExtractor: keyExtractor,
28
33
  maxToRenderPerBatch: 8,
29
34
  initialNumToRender: 8,
30
- removeClippedSubviews: true
31
- }, listProps, {
35
+ removeClippedSubviews: true,
36
+ style: styles.container
37
+ }, flatListProps, {
32
38
  data: rnElements,
33
39
  renderItem: renderItem
34
40
  }));
35
41
  };
36
42
 
37
- export default Markdown;
43
+ export default /*#__PURE__*/memo(Markdown);
38
44
  //# sourceMappingURL=Markdown.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","marked","Parser","FlatList","Markdown","value","contentWidth","listProps","tokens","lexer","trim","parser","rnElements","parse","renderItem","item","keyExtractor","_","index","toString"],"sources":["Markdown.tsx"],"sourcesContent":["import React, { ReactNode, useCallback } from 'react';\nimport { marked } from 'marked';\nimport Parser from './Parser';\nimport { FlatList, FlatListProps } from 'react-native';\n\ninterface MarkdownProps {\n value: string;\n contentWidth: number;\n listProps?: Omit<\n FlatListProps<ReactNode>,\n 'data' | 'renderItem' | 'horizontal'\n >;\n}\n\nconst Markdown = ({ value, contentWidth, listProps }: MarkdownProps) => {\n const tokens = marked.lexer(value.trim());\n const parser = new Parser({ contentWidth });\n const rnElements = parser.parse(tokens);\n\n const renderItem = useCallback(({ item }: { item: ReactNode }) => {\n return <>{item}</>;\n }, []);\n\n const keyExtractor = useCallback((_, index) => index.toString(), []);\n\n return (\n <FlatList\n keyExtractor={keyExtractor}\n maxToRenderPerBatch={8}\n initialNumToRender={8}\n removeClippedSubviews\n {...listProps}\n data={rnElements}\n renderItem={renderItem}\n />\n );\n};\n\nexport default Markdown;\n"],"mappings":";;AAAA,OAAOA,KAAP,IAA2BC,WAA3B,QAA8C,OAA9C;AACA,SAASC,MAAT,QAAuB,QAAvB;AACA,OAAOC,MAAP,MAAmB,UAAnB;AACA,SAASC,QAAT,QAAwC,cAAxC;;AAWA,MAAMC,QAAQ,GAAG,QAAuD;EAAA,IAAtD;IAAEC,KAAF;IAASC,YAAT;IAAuBC;EAAvB,CAAsD;EACtE,MAAMC,MAAM,GAAGP,MAAM,CAACQ,KAAP,CAAaJ,KAAK,CAACK,IAAN,EAAb,CAAf;EACA,MAAMC,MAAM,GAAG,IAAIT,MAAJ,CAAW;IAAEI;EAAF,CAAX,CAAf;EACA,MAAMM,UAAU,GAAGD,MAAM,CAACE,KAAP,CAAaL,MAAb,CAAnB;EAEA,MAAMM,UAAU,GAAGd,WAAW,CAAC,SAAmC;IAAA,IAAlC;MAAEe;IAAF,CAAkC;IAChE,oBAAO,0CAAGA,IAAH,CAAP;EACD,CAF6B,EAE3B,EAF2B,CAA9B;EAIA,MAAMC,YAAY,GAAGhB,WAAW,CAAC,CAACiB,CAAD,EAAIC,KAAJ,KAAcA,KAAK,CAACC,QAAN,EAAf,EAAiC,EAAjC,CAAhC;EAEA,oBACE,oBAAC,QAAD;IACE,YAAY,EAAEH,YADhB;IAEE,mBAAmB,EAAE,CAFvB;IAGE,kBAAkB,EAAE,CAHtB;IAIE,qBAAqB;EAJvB,GAKMT,SALN;IAME,IAAI,EAAEK,UANR;IAOE,UAAU,EAAEE;EAPd,GADF;AAWD,CAtBD;;AAwBA,eAAeV,QAAf"}
1
+ {"version":3,"names":["React","memo","useCallback","useMemo","FlatList","useColorScheme","marked","Parser","getStyles","Markdown","value","flatListProps","styles","userStyles","systemTheme","rnElements","parser","tokens","lexer","trim","parse","renderItem","item","keyExtractor","_","index","toString","container"],"sources":["Markdown.tsx"],"sourcesContent":["import React, { memo, ReactNode, useCallback, useMemo } from 'react';\nimport { FlatList, FlatListProps, useColorScheme } from 'react-native';\nimport { marked } from 'marked';\nimport Parser from './Parser';\nimport getStyles from '../theme/styles';\nimport type { MarkedStyles } from '../theme/types';\n\ninterface MarkdownProps {\n value: string;\n flatListProps?: Omit<\n FlatListProps<ReactNode>,\n 'data' | 'renderItem' | 'horizontal'\n >;\n styles?: MarkedStyles;\n}\n\nconst Markdown = ({\n value,\n flatListProps,\n styles: userStyles,\n}: MarkdownProps) => {\n const systemTheme = useColorScheme();\n const styles = useMemo(\n () => getStyles(userStyles, systemTheme),\n [userStyles, systemTheme]\n );\n\n const rnElements = useMemo(() => {\n const parser = new Parser({\n styles,\n });\n const tokens = marked.lexer(value.trim());\n\n return parser.parse(tokens);\n }, [value, styles]);\n\n const renderItem = useCallback(({ item }: { item: ReactNode }) => {\n return <>{item}</>;\n }, []);\n\n const keyExtractor = useCallback((_, index) => index.toString(), []);\n\n return (\n <FlatList\n keyExtractor={keyExtractor}\n maxToRenderPerBatch={8}\n initialNumToRender={8}\n removeClippedSubviews\n style={styles.container}\n {...flatListProps}\n data={rnElements}\n renderItem={renderItem}\n />\n );\n};\n\nexport default memo(Markdown);\n"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,IAAhB,EAAiCC,WAAjC,EAA8CC,OAA9C,QAA6D,OAA7D;AACA,SAASC,QAAT,EAAkCC,cAAlC,QAAwD,cAAxD;AACA,SAASC,MAAT,QAAuB,QAAvB;AACA,OAAOC,MAAP,MAAmB,UAAnB;AACA,OAAOC,SAAP,MAAsB,iBAAtB;;AAYA,MAAMC,QAAQ,GAAG,QAII;EAAA,IAJH;IAChBC,KADgB;IAEhBC,aAFgB;IAGhBC,MAAM,EAAEC;EAHQ,CAIG;EACnB,MAAMC,WAAW,GAAGT,cAAc,EAAlC;EACA,MAAMO,MAAM,GAAGT,OAAO,CACpB,MAAMK,SAAS,CAACK,UAAD,EAAaC,WAAb,CADK,EAEpB,CAACD,UAAD,EAAaC,WAAb,CAFoB,CAAtB;EAKA,MAAMC,UAAU,GAAGZ,OAAO,CAAC,MAAM;IAC/B,MAAMa,MAAM,GAAG,IAAIT,MAAJ,CAAW;MACxBK;IADwB,CAAX,CAAf;IAGA,MAAMK,MAAM,GAAGX,MAAM,CAACY,KAAP,CAAaR,KAAK,CAACS,IAAN,EAAb,CAAf;IAEA,OAAOH,MAAM,CAACI,KAAP,CAAaH,MAAb,CAAP;EACD,CAPyB,EAOvB,CAACP,KAAD,EAAQE,MAAR,CAPuB,CAA1B;EASA,MAAMS,UAAU,GAAGnB,WAAW,CAAC,SAAmC;IAAA,IAAlC;MAAEoB;IAAF,CAAkC;IAChE,oBAAO,0CAAGA,IAAH,CAAP;EACD,CAF6B,EAE3B,EAF2B,CAA9B;EAIA,MAAMC,YAAY,GAAGrB,WAAW,CAAC,CAACsB,CAAD,EAAIC,KAAJ,KAAcA,KAAK,CAACC,QAAN,EAAf,EAAiC,EAAjC,CAAhC;EAEA,oBACE,oBAAC,QAAD;IACE,YAAY,EAAEH,YADhB;IAEE,mBAAmB,EAAE,CAFvB;IAGE,kBAAkB,EAAE,CAHtB;IAIE,qBAAqB,MAJvB;IAKE,KAAK,EAAEX,MAAM,CAACe;EALhB,GAMMhB,aANN;IAOE,IAAI,EAAEI,UAPR;IAQE,UAAU,EAAEM;EARd,GADF;AAYD,CAtCD;;AAwCA,4BAAepB,IAAI,CAACQ,QAAD,CAAnB"}
@@ -1,6 +1,5 @@
1
1
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
2
 
3
- import { StyleSheet } from 'react-native';
4
3
  import Renderer from './Renderer';
5
4
 
6
5
  class Parser {
@@ -9,21 +8,22 @@ class Parser {
9
8
 
10
9
  _defineProperty(this, "styles", void 0);
11
10
 
12
- _defineProperty(this, "options", void 0);
11
+ _defineProperty(this, "headingStylesMap", void 0);
13
12
 
13
+ this.styles = { ...options.styles
14
+ };
14
15
  this.renderer = new Renderer();
15
- this.options = options;
16
- this.styles = { ...defaultStyles,
17
- ...options.styles
16
+ this.headingStylesMap = {
17
+ 1: this.styles.h1,
18
+ 2: this.styles.h2,
19
+ 3: this.styles.h3,
20
+ 4: this.styles.h4,
21
+ 5: this.styles.h5,
22
+ 6: this.styles.h6
18
23
  };
19
24
  }
20
25
 
21
26
  parse(tokens) {
22
- return this.parseBlocks(tokens);
23
- }
24
-
25
- parseBlocks(tokens) {
26
- let styleObj = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
27
27
  const elements = tokens.map(token => {
28
28
  switch (token.type) {
29
29
  case 'space':
@@ -36,9 +36,8 @@ class Parser {
36
36
  let tempTokens = [];
37
37
  const paragraphChildren = [];
38
38
  token.tokens.forEach(t => {
39
- // TODO: move type checking value to const
40
39
  if (t.type === 'image') {
41
- paragraphChildren.push(this.renderer.getTextNode(this.parseInline(tempTokens), styleObj));
40
+ paragraphChildren.push(this.renderer.getTextNode(this.parseInline(tempTokens), this.styles.text));
42
41
  paragraphChildren.push(this.parseInline([t]));
43
42
  tempTokens = [];
44
43
  return;
@@ -48,49 +47,41 @@ class Parser {
48
47
  });
49
48
 
50
49
  if (tempTokens.length > 0) {
51
- paragraphChildren.push(this.renderer.getTextNode(this.parseInline(tempTokens), styleObj));
50
+ paragraphChildren.push(this.renderer.getTextNode(this.parseInline(tempTokens), {}));
52
51
  }
53
52
 
54
- return this.renderer.getParagraph(paragraphChildren, [styleObj, this.styles.paragraph]);
53
+ return this.renderer.getViewNode(paragraphChildren, this.styles.paragraph);
55
54
  }
56
55
 
57
56
  case 'blockquote':
58
57
  {
59
- return this.renderer.getBlockquote(this.parseBlocks(token.tokens, this.styles.blockquoteText), this.styles.blockquoteContainer);
58
+ return this.renderer.getBlockquoteNode(this.parse(token.tokens), this.styles.blockquote);
60
59
  }
61
60
 
62
61
  case 'heading':
63
62
  {
64
- switch (token.depth) {
65
- case 1:
66
- return this.renderer.getHeading(token.text, this.styles.h1);
67
-
68
- case 2:
69
- return this.renderer.getHeading(token.text, this.styles.h2);
70
-
71
- case 3:
72
- return this.renderer.getHeading(token.text, this.styles.h3);
73
-
74
- case 4:
75
- return this.renderer.getHeading(token.text, this.styles.h4);
76
-
77
- case 5:
78
- return this.renderer.getHeading(token.text, this.styles.h5);
63
+ const styles = this.headingStylesMap[token.depth] ?? this.styles.text;
64
+ return this.renderer.getTextNode(token.text, styles);
65
+ }
79
66
 
80
- case 6:
81
- return this.renderer.getHeading(token.text, this.styles.h6);
67
+ case 'code':
68
+ {
69
+ return this.renderer.getCodeBlockNode(token.text, this.styles.code, this.styles.em);
70
+ }
82
71
 
83
- default:
84
- return null;
85
- }
72
+ case 'hr':
73
+ {
74
+ return this.renderer.getViewNode(null, this.styles.hr);
86
75
  }
87
76
 
88
- case 'code':
77
+ case 'list':
89
78
  {
90
- return this.renderer.getCodeBlock(token.text, this.styles.code, this.styles.em);
79
+ const li = token.items.map(item => item.text);
80
+ return this.renderer.getListNode(token.ordered, li, this.styles.list, this.styles.li);
91
81
  }
92
82
 
93
83
  default:
84
+ console.warn(`Token with '${token.type}' type was not found.`);
94
85
  return null;
95
86
  }
96
87
  });
@@ -98,14 +89,14 @@ class Parser {
98
89
  }
99
90
 
100
91
  parseInline(tokens) {
101
- let styleObj = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
92
+ let styles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
102
93
  const elements = tokens.map(token => {
103
94
  if (!token) return null;
104
95
 
105
96
  switch (token.type) {
106
97
  case 'escape':
107
98
  {
108
- return this.renderer.getTextNode(token.text, [styleObj, this.styles.text]);
99
+ return this.renderer.getTextNode(token.text, [styles, this.styles.text]);
109
100
  }
110
101
 
111
102
  case 'html':
@@ -116,27 +107,27 @@ class Parser {
116
107
 
117
108
  case 'link':
118
109
  {
119
- return this.renderer.getLinkNode(token.text, token.href, [styleObj, this.styles.link]);
110
+ return this.renderer.getLinkNode(token.text, token.href, [styles, this.styles.link]);
120
111
  }
121
112
 
122
113
  case 'image':
123
114
  {
124
- return this.renderer.getImage(token.href, this.options.contentWidth);
115
+ return this.renderer.getImageNode(token.href);
125
116
  }
126
117
 
127
118
  case 'strong':
128
119
  {
129
- return this.renderer.getTextNode(this.parseInline(token.tokens, this.styles.strong), [styleObj, this.styles.strong]);
120
+ return this.renderer.getTextNode(this.parseInline(token.tokens, this.styles.strong), [styles, this.styles.strong]);
130
121
  }
131
122
 
132
123
  case 'em':
133
124
  {
134
- return this.renderer.getTextNode(this.parseInline(token.tokens, this.styles.em), [styleObj, this.styles.em]);
125
+ return this.renderer.getTextNode(this.parseInline(token.tokens, this.styles.em), [styles, this.styles.em]);
135
126
  }
136
127
 
137
128
  case 'codespan':
138
129
  {
139
- return this.renderer.getTextNode(` ${token.text} `, this.styles.codespan);
130
+ return this.renderer.getTextNode(token.text, this.styles.codespan);
140
131
  }
141
132
 
142
133
  case 'br':
@@ -151,13 +142,12 @@ class Parser {
151
142
 
152
143
  case 'text':
153
144
  {
154
- return this.renderer.getTextNode(token.raw, [styleObj, this.styles.text]);
145
+ return this.renderer.getTextNode(token.raw, [styles, this.styles.text]);
155
146
  }
156
147
 
157
148
  default:
158
149
  {
159
- const errMsg = 'Token with "' + token.type + '" type was not found.';
160
- console.error(errMsg);
150
+ console.warn(`Token with '${token.type}' type was not found.`);
161
151
  return null;
162
152
  }
163
153
  }
@@ -165,88 +155,7 @@ class Parser {
165
155
  return elements;
166
156
  }
167
157
 
168
- } // TODO: material typography for font size
169
-
170
-
171
- const defaultStyles = StyleSheet.create({
172
- em: {
173
- fontSize: 16,
174
- lineHeight: 24,
175
- fontStyle: 'italic'
176
- },
177
- strong: {
178
- fontSize: 16,
179
- lineHeight: 24,
180
- fontWeight: 'bold'
181
- },
182
- text: {
183
- fontSize: 16,
184
- lineHeight: 24
185
- },
186
- paragraph: {
187
- fontSize: 16,
188
- lineHeight: 24,
189
- paddingVertical: 8
190
- },
191
- link: {
192
- fontStyle: 'italic',
193
- fontSize: 16,
194
- lineHeight: 24,
195
- color: '#0074cc'
196
- },
197
- blockquoteText: {
198
- color: '#6a737d'
199
- },
200
- blockquoteContainer: {
201
- borderLeftColor: '#dfe2e5',
202
- paddingLeft: 16,
203
- borderLeftWidth: 5
204
- },
205
- h1: {
206
- fontSize: 32,
207
- lineHeight: 40,
208
- fontWeight: 'bold',
209
- paddingVertical: 8,
210
- letterSpacing: 0
211
- },
212
- h2: {
213
- fontSize: 28,
214
- lineHeight: 36,
215
- fontWeight: '500',
216
- paddingVertical: 8
217
- },
218
- h3: {
219
- fontSize: 36,
220
- lineHeight: 44,
221
- fontWeight: '500'
222
- },
223
- h4: {
224
- fontSize: 22,
225
- lineHeight: 28,
226
- fontWeight: '500'
227
- },
228
- h5: {
229
- fontSize: 16,
230
- lineHeight: 24,
231
- fontWeight: '500'
232
- },
233
- h6: {
234
- fontSize: 14,
235
- lineHeight: 20,
236
- fontWeight: '500'
237
- },
238
- codespan: {
239
- fontSize: 16,
240
- lineHeight: 24,
241
- fontStyle: 'italic',
242
- backgroundColor: '#afb8c133',
243
- fontWeight: '300'
244
- },
245
- code: {
246
- padding: 16,
247
- backgroundColor: '#afb8c133',
248
- minWidth: '100%'
249
- }
250
- });
158
+ }
159
+
251
160
  export default Parser;
252
161
  //# sourceMappingURL=Parser.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["StyleSheet","Renderer","Parser","constructor","options","renderer","styles","defaultStyles","parse","tokens","parseBlocks","styleObj","elements","map","token","type","tempTokens","paragraphChildren","forEach","t","push","getTextNode","parseInline","length","getParagraph","paragraph","getBlockquote","blockquoteText","blockquoteContainer","depth","getHeading","text","h1","h2","h3","h4","h5","h6","getCodeBlock","code","em","console","log","getLinkNode","href","link","getImage","contentWidth","strong","codespan","raw","errMsg","error","create","fontSize","lineHeight","fontStyle","fontWeight","paddingVertical","color","borderLeftColor","paddingLeft","borderLeftWidth","letterSpacing","backgroundColor","padding","minWidth"],"sources":["Parser.ts"],"sourcesContent":["import type { marked } from 'marked';\nimport {\n ImageStyle,\n StyleProp,\n StyleSheet,\n TextStyle,\n ViewStyle,\n} from 'react-native';\nimport Renderer from './Renderer';\nimport type { MarkedStyles, ParserOptions } from '../types/types';\n\nclass Parser {\n private renderer;\n private styles: MarkedStyles;\n private options: ParserOptions;\n constructor(options: ParserOptions) {\n this.renderer = new Renderer();\n this.options = options;\n this.styles = {\n ...defaultStyles,\n ...options.styles,\n };\n }\n\n parse(tokens: marked.Token[]) {\n return this.parseBlocks(tokens);\n }\n\n parseBlocks(\n tokens: marked.Token[],\n styleObj: StyleProp<ViewStyle | TextStyle | ImageStyle> = {}\n ) {\n const elements: React.ReactNode[] = tokens.map((token) => {\n switch (token.type) {\n case 'space': {\n return null;\n }\n case 'paragraph': {\n let tempTokens: marked.Token[] = [];\n const paragraphChildren: React.ReactNode[] = [];\n token.tokens.forEach((t) => {\n // TODO: move type checking value to const\n if (t.type === 'image') {\n paragraphChildren.push(\n this.renderer.getTextNode(\n this.parseInline(tempTokens),\n styleObj\n )\n );\n paragraphChildren.push(this.parseInline([t]));\n tempTokens = [];\n return;\n }\n tempTokens = [...tempTokens, t];\n });\n\n if (tempTokens.length > 0) {\n paragraphChildren.push(\n this.renderer.getTextNode(this.parseInline(tempTokens), styleObj)\n );\n }\n\n return this.renderer.getParagraph(paragraphChildren, [\n styleObj,\n this.styles.paragraph,\n ]);\n }\n case 'blockquote': {\n return this.renderer.getBlockquote(\n this.parseBlocks(token.tokens, this.styles.blockquoteText),\n this.styles.blockquoteContainer\n );\n }\n case 'heading': {\n switch (token.depth) {\n case 1:\n return this.renderer.getHeading(token.text, this.styles.h1);\n case 2:\n return this.renderer.getHeading(token.text, this.styles.h2);\n case 3:\n return this.renderer.getHeading(token.text, this.styles.h3);\n case 4:\n return this.renderer.getHeading(token.text, this.styles.h4);\n case 5:\n return this.renderer.getHeading(token.text, this.styles.h5);\n case 6:\n return this.renderer.getHeading(token.text, this.styles.h6);\n default:\n return null;\n }\n }\n case 'code': {\n return this.renderer.getCodeBlock(\n token.text,\n this.styles.code,\n this.styles.em\n );\n }\n default:\n return null;\n }\n });\n return elements;\n }\n\n parseInline(\n tokens: marked.Token[],\n styleObj: StyleProp<ViewStyle | TextStyle | ImageStyle> = {}\n ) {\n const elements: React.ReactNode[] = tokens.map((token) => {\n if (!token) return null;\n\n switch (token.type) {\n case 'escape': {\n return this.renderer.getTextNode(token.text, [\n styleObj,\n this.styles.text,\n ]);\n }\n case 'html': {\n console.log('html', token);\n return null;\n }\n case 'link': {\n return this.renderer.getLinkNode(token.text, token.href, [\n styleObj,\n this.styles.link,\n ]);\n }\n case 'image': {\n return this.renderer.getImage(token.href, this.options.contentWidth);\n }\n case 'strong': {\n return this.renderer.getTextNode(\n this.parseInline(token.tokens, this.styles.strong),\n [styleObj, this.styles.strong]\n );\n }\n case 'em': {\n return this.renderer.getTextNode(\n this.parseInline(token.tokens, this.styles.em),\n [styleObj, this.styles.em]\n );\n }\n case 'codespan': {\n return this.renderer.getTextNode(\n ` ${token.text} `,\n this.styles.codespan\n );\n }\n case 'br': {\n return this.renderer.getTextNode('\\n', {});\n }\n case 'del': {\n return null;\n }\n case 'text': {\n return this.renderer.getTextNode(token.raw, [\n styleObj,\n this.styles.text,\n ]);\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n console.error(errMsg);\n return null;\n }\n }\n });\n return elements;\n }\n}\n\n// TODO: material typography for font size\nconst defaultStyles = StyleSheet.create<MarkedStyles>({\n em: {\n fontSize: 16,\n lineHeight: 24,\n fontStyle: 'italic',\n },\n strong: {\n fontSize: 16,\n lineHeight: 24,\n fontWeight: 'bold',\n },\n text: {\n fontSize: 16,\n lineHeight: 24,\n },\n paragraph: {\n fontSize: 16,\n lineHeight: 24,\n paddingVertical: 8,\n },\n link: {\n fontStyle: 'italic',\n fontSize: 16,\n lineHeight: 24,\n color: '#0074cc',\n },\n blockquoteText: {\n color: '#6a737d',\n },\n blockquoteContainer: {\n borderLeftColor: '#dfe2e5',\n paddingLeft: 16,\n borderLeftWidth: 5,\n },\n h1: {\n fontSize: 32,\n lineHeight: 40,\n fontWeight: 'bold',\n paddingVertical: 8,\n letterSpacing: 0,\n },\n h2: {\n fontSize: 28,\n lineHeight: 36,\n fontWeight: '500',\n paddingVertical: 8,\n },\n h3: {\n fontSize: 36,\n lineHeight: 44,\n fontWeight: '500',\n },\n h4: {\n fontSize: 22,\n lineHeight: 28,\n fontWeight: '500',\n },\n h5: {\n fontSize: 16,\n lineHeight: 24,\n fontWeight: '500',\n },\n h6: {\n fontSize: 14,\n lineHeight: 20,\n fontWeight: '500',\n },\n codespan: {\n fontSize: 16,\n lineHeight: 24,\n fontStyle: 'italic',\n backgroundColor: '#afb8c133',\n fontWeight: '300',\n },\n code: {\n padding: 16,\n backgroundColor: '#afb8c133',\n minWidth: '100%',\n },\n});\n\nexport default Parser;\n"],"mappings":"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"}
1
+ {"version":3,"names":["Renderer","Parser","constructor","options","styles","renderer","headingStylesMap","h1","h2","h3","h4","h5","h6","parse","tokens","elements","map","token","type","tempTokens","paragraphChildren","forEach","t","push","getTextNode","parseInline","text","length","getViewNode","paragraph","getBlockquoteNode","blockquote","depth","getCodeBlockNode","code","em","hr","li","items","item","getListNode","ordered","list","console","warn","log","getLinkNode","href","link","getImageNode","strong","codespan","raw"],"sources":["Parser.tsx"],"sourcesContent":["import type { marked } from 'marked';\nimport type { ImageStyle, StyleProp, TextStyle, ViewStyle } from 'react-native';\nimport Renderer from './Renderer';\nimport type { MarkedStyles } from '../theme/types';\n\ninterface ParserOptions {\n styles?: MarkedStyles;\n}\n\nclass Parser {\n private renderer;\n private styles: MarkedStyles;\n private headingStylesMap: Record<number, TextStyle | undefined>;\n constructor(options: ParserOptions) {\n this.styles = { ...options.styles };\n this.renderer = new Renderer();\n this.headingStylesMap = {\n 1: this.styles.h1,\n 2: this.styles.h2,\n 3: this.styles.h3,\n 4: this.styles.h4,\n 5: this.styles.h5,\n 6: this.styles.h6,\n };\n }\n\n parse(tokens: marked.Token[]) {\n const elements: React.ReactNode[] = tokens.map((token) => {\n switch (token.type) {\n case 'space': {\n return null;\n }\n case 'paragraph': {\n let tempTokens: marked.Token[] = [];\n const paragraphChildren: React.ReactNode[] = [];\n token.tokens.forEach((t) => {\n if (t.type === 'image') {\n paragraphChildren.push(\n this.renderer.getTextNode(\n this.parseInline(tempTokens),\n this.styles.text\n )\n );\n paragraphChildren.push(this.parseInline([t]));\n tempTokens = [];\n return;\n }\n tempTokens = [...tempTokens, t];\n });\n\n if (tempTokens.length > 0) {\n paragraphChildren.push(\n this.renderer.getTextNode(this.parseInline(tempTokens), {})\n );\n }\n\n return this.renderer.getViewNode(\n paragraphChildren,\n this.styles.paragraph\n );\n }\n case 'blockquote': {\n return this.renderer.getBlockquoteNode(\n this.parse(token.tokens),\n this.styles.blockquote\n );\n }\n case 'heading': {\n const styles = this.headingStylesMap[token.depth] ?? this.styles.text;\n return this.renderer.getTextNode(token.text, styles);\n }\n case 'code': {\n return this.renderer.getCodeBlockNode(\n token.text,\n this.styles.code,\n this.styles.em\n );\n }\n case 'hr': {\n return this.renderer.getViewNode(null, this.styles.hr);\n }\n case 'list': {\n const li = token.items.map((item) => item.text);\n return this.renderer.getListNode(\n token.ordered,\n li,\n this.styles.list,\n this.styles.li\n );\n }\n default:\n console.warn(`Token with '${token.type}' type was not found.`);\n return null;\n }\n });\n return elements;\n }\n\n parseInline(\n tokens: marked.Token[],\n styles: StyleProp<ViewStyle | TextStyle | ImageStyle> = {}\n ) {\n const elements: React.ReactNode[] = tokens.map((token) => {\n if (!token) return null;\n\n switch (token.type) {\n case 'escape': {\n return this.renderer.getTextNode(token.text, [\n styles,\n this.styles.text,\n ]);\n }\n case 'html': {\n console.log('html', token);\n return null;\n }\n case 'link': {\n return this.renderer.getLinkNode(token.text, token.href, [\n styles,\n this.styles.link,\n ]);\n }\n case 'image': {\n return this.renderer.getImageNode(token.href);\n }\n case 'strong': {\n return this.renderer.getTextNode(\n this.parseInline(token.tokens, this.styles.strong),\n [styles, this.styles.strong]\n );\n }\n case 'em': {\n return this.renderer.getTextNode(\n this.parseInline(token.tokens, this.styles.em),\n [styles, this.styles.em]\n );\n }\n case 'codespan': {\n return this.renderer.getTextNode(token.text, this.styles.codespan);\n }\n case 'br': {\n return this.renderer.getTextNode('\\n', {});\n }\n case 'del': {\n return null;\n }\n case 'text': {\n return this.renderer.getTextNode(token.raw, [\n styles,\n this.styles.text,\n ]);\n }\n default: {\n console.warn(`Token with '${token.type}' type was not found.`);\n return null;\n }\n }\n });\n return elements;\n }\n}\n\nexport default Parser;\n"],"mappings":"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"}