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

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 +7 -5
  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 +49 -130
  7. package/dist/commonjs/lib/Parser.js.map +1 -1
  8. package/dist/commonjs/lib/Renderer.js +19 -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 +50 -129
  23. package/dist/module/lib/Parser.js.map +1 -1
  24. package/dist/module/lib/Renderer.js +16 -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 +15 -9
  43. package/src/components/MDImage.tsx +5 -28
  44. package/src/lib/Markdown.tsx +28 -10
  45. package/src/lib/Parser.tsx +177 -0
  46. package/src/lib/Renderer.tsx +28 -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
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # react-native-marked
2
2
 
3
- Markdown support for React Native
3
+ Markdown renderer for React Native powered by [marked.js](https://marked.js.org/)
4
4
 
5
5
  ## Installation
6
6
 
@@ -12,16 +12,13 @@ yarn add react-native-marked
12
12
 
13
13
  ```jsx
14
14
  import * as React from 'react';
15
- import { Dimensions } from 'react-native';
16
15
  import Markdown from 'react-native-marked';
17
16
 
18
17
  const ExampleComponent = () => {
19
- const { width: windowWidth } = Dimensions.get('window');
20
18
  return (
21
19
  <Markdown
22
20
  value={`#Hello world`}
23
- contentWidth={windowWidth}
24
- listProps={{
21
+ flatListProps={{
25
22
  initialNumToRender: 8,
26
23
  }}
27
24
  />
@@ -42,3 +39,8 @@ MIT
42
39
  ---
43
40
 
44
41
  Made with [create-react-native-library](https://github.com/callstack/react-native-builder-bob)
42
+
43
+ ## External Libraries
44
+
45
+ - [React Native Fit Image](https://github.com/huiseoul/react-native-fit-image)
46
+ - [@jsamr/react-native-li](https://github.com/jsamr/react-native-li)
@@ -9,7 +9,7 @@ var _react = _interopRequireWildcard(require("react"));
9
9
 
10
10
  var _reactNative = require("react-native");
11
11
 
12
- var _reactNativeFastImage = _interopRequireDefault(require("react-native-fast-image"));
12
+ var _reactNativeFitImage = _interopRequireDefault(require("react-native-fit-image"));
13
13
 
14
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
15
 
@@ -19,33 +19,16 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
19
19
 
20
20
  const MDImage = _ref => {
21
21
  let {
22
- uri,
23
- width
22
+ uri
24
23
  } = _ref;
25
- const [height, setHeight] = (0, _react.useState)(0);
26
24
  (0, _react.useEffect)(() => {
27
25
  _reactNative.Image.prefetch(uri);
28
-
29
- _reactNative.Image.getSize(uri, (iWidth, iHeight) => {
30
- const heightCalc = width * (iHeight / iWidth);
31
- setHeight(heightCalc);
32
- });
33
- }, [uri, width, height]);
34
-
35
- if (height < 1) {
36
- return null;
37
- }
38
-
39
- return /*#__PURE__*/_react.default.createElement(_reactNativeFastImage.default, {
40
- fallback: true,
26
+ }, [uri]);
27
+ return /*#__PURE__*/_react.default.createElement(_reactNativeFitImage.default, {
41
28
  source: {
42
29
  uri
43
30
  },
44
- style: [{
45
- width: width,
46
- height: height
47
- }],
48
- resizeMode: _reactNativeFastImage.default.resizeMode.cover
31
+ resizeMode: "cover"
49
32
  });
50
33
  };
51
34
 
@@ -1 +1 @@
1
- {"version":3,"names":["MDImage","uri","width","height","setHeight","useState","useEffect","Image","prefetch","getSize","iWidth","iHeight","heightCalc","FastImage","resizeMode","cover","memo"],"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;;AACA;;AACA;;;;;;;;AAOA,MAAMA,OAAO,GAAG,QAAkC;EAAA,IAAjC;IAAEC,GAAF;IAAOC;EAAP,CAAiC;EAChD,MAAM,CAACC,MAAD,EAASC,SAAT,IAAsB,IAAAC,eAAA,EAAiB,CAAjB,CAA5B;EAEA,IAAAC,gBAAA,EAAU,MAAM;IACdC,kBAAA,CAAMC,QAAN,CAAeP,GAAf;;IACAM,kBAAA,CAAME,OAAN,CAAcR,GAAd,EAAmB,CAACS,MAAD,EAASC,OAAT,KAAqB;MACtC,MAAMC,UAAU,GAAGV,KAAK,IAAIS,OAAO,GAAGD,MAAd,CAAxB;MACAN,SAAS,CAACQ,UAAD,CAAT;IACD,CAHD;EAID,CAND,EAMG,CAACX,GAAD,EAAMC,KAAN,EAAaC,MAAb,CANH;;EAQA,IAAIA,MAAM,GAAG,CAAb,EAAgB;IACd,OAAO,IAAP;EACD;;EAED,oBACE,6BAAC,6BAAD;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,EAAEU,6BAAA,CAAUC,UAAV,CAAqBC;EATnC,EADF;AAaD,CA5BD;;4BA8Be,IAAAC,WAAA,EAAKhB,OAAL,C"}
1
+ {"version":3,"names":["MDImage","uri","useEffect","Image","prefetch","memo"],"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;;AACA;;AACA;;;;;;;;AAMA,MAAMA,OAAO,GAAG,QAA2B;EAAA,IAA1B;IAAEC;EAAF,CAA0B;EACzC,IAAAC,gBAAA,EAAU,MAAM;IACdC,kBAAA,CAAMC,QAAN,CAAeH,GAAf;EACD,CAFD,EAEG,CAACA,GAAD,CAFH;EAIA,oBAAO,6BAAC,4BAAD;IAAU,MAAM,EAAE;MAAEA;IAAF,CAAlB;IAA2B,UAAU,EAAC;EAAtC,EAAP;AACD,CAND;;4BAQe,IAAAI,WAAA,EAAKL,OAAL,C"}
@@ -7,11 +7,13 @@ exports.default = void 0;
7
7
 
8
8
  var _react = _interopRequireWildcard(require("react"));
9
9
 
10
+ var _reactNative = require("react-native");
11
+
10
12
  var _marked = require("marked");
11
13
 
12
14
  var _Parser = _interopRequireDefault(require("./Parser"));
13
15
 
14
- var _reactNative = require("react-native");
16
+ var _styles = _interopRequireDefault(require("../theme/styles"));
15
17
 
16
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
19
 
@@ -24,16 +26,20 @@ function _extends() { _extends = Object.assign ? Object.assign.bind() : function
24
26
  const Markdown = _ref => {
25
27
  let {
26
28
  value,
27
- contentWidth,
28
- listProps
29
+ flatListProps,
30
+ styles: userStyles
29
31
  } = _ref;
32
+ const systemTheme = (0, _reactNative.useColorScheme)();
33
+ const styles = (0, _react.useMemo)(() => (0, _styles.default)(userStyles, systemTheme), [userStyles, systemTheme]);
34
+ const rnElements = (0, _react.useMemo)(() => {
35
+ const parser = new _Parser.default({
36
+ styles
37
+ });
30
38
 
31
- const tokens = _marked.marked.lexer(value.trim());
39
+ const tokens = _marked.marked.lexer(value.trim());
32
40
 
33
- const parser = new _Parser.default({
34
- contentWidth
35
- });
36
- const rnElements = parser.parse(tokens);
41
+ return parser.parse(tokens);
42
+ }, [value, styles]);
37
43
  const renderItem = (0, _react.useCallback)(_ref2 => {
38
44
  let {
39
45
  item
@@ -45,13 +51,15 @@ const Markdown = _ref => {
45
51
  keyExtractor: keyExtractor,
46
52
  maxToRenderPerBatch: 8,
47
53
  initialNumToRender: 8,
48
- removeClippedSubviews: true
49
- }, listProps, {
54
+ removeClippedSubviews: true,
55
+ style: styles.container
56
+ }, flatListProps, {
50
57
  data: rnElements,
51
58
  renderItem: renderItem
52
59
  }));
53
60
  };
54
61
 
55
- var _default = Markdown;
62
+ var _default = /*#__PURE__*/(0, _react.memo)(Markdown);
63
+
56
64
  exports.default = _default;
57
65
  //# sourceMappingURL=Markdown.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Markdown","value","contentWidth","listProps","tokens","marked","lexer","trim","parser","Parser","rnElements","parse","renderItem","useCallback","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;;AACA;;AACA;;AACA;;;;;;;;;;AAWA,MAAMA,QAAQ,GAAG,QAAuD;EAAA,IAAtD;IAAEC,KAAF;IAASC,YAAT;IAAuBC;EAAvB,CAAsD;;EACtE,MAAMC,MAAM,GAAGC,cAAA,CAAOC,KAAP,CAAaL,KAAK,CAACM,IAAN,EAAb,CAAf;;EACA,MAAMC,MAAM,GAAG,IAAIC,eAAJ,CAAW;IAAEP;EAAF,CAAX,CAAf;EACA,MAAMQ,UAAU,GAAGF,MAAM,CAACG,KAAP,CAAaP,MAAb,CAAnB;EAEA,MAAMQ,UAAU,GAAG,IAAAC,kBAAA,EAAY,SAAmC;IAAA,IAAlC;MAAEC;IAAF,CAAkC;IAChE,oBAAO,4DAAGA,IAAH,CAAP;EACD,CAFkB,EAEhB,EAFgB,CAAnB;EAIA,MAAMC,YAAY,GAAG,IAAAF,kBAAA,EAAY,CAACG,CAAD,EAAIC,KAAJ,KAAcA,KAAK,CAACC,QAAN,EAA1B,EAA4C,EAA5C,CAArB;EAEA,oBACE,6BAAC,qBAAD;IACE,YAAY,EAAEH,YADhB;IAEE,mBAAmB,EAAE,CAFvB;IAGE,kBAAkB,EAAE,CAHtB;IAIE,qBAAqB;EAJvB,GAKMZ,SALN;IAME,IAAI,EAAEO,UANR;IAOE,UAAU,EAAEE;EAPd,GADF;AAWD,CAtBD;;eAwBeZ,Q"}
1
+ {"version":3,"names":["Markdown","value","flatListProps","styles","userStyles","systemTheme","useColorScheme","useMemo","getStyles","rnElements","parser","Parser","tokens","marked","lexer","trim","parse","renderItem","useCallback","item","keyExtractor","_","index","toString","container","memo"],"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;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;AAYA,MAAMA,QAAQ,GAAG,QAII;EAAA,IAJH;IAChBC,KADgB;IAEhBC,aAFgB;IAGhBC,MAAM,EAAEC;EAHQ,CAIG;EACnB,MAAMC,WAAW,GAAG,IAAAC,2BAAA,GAApB;EACA,MAAMH,MAAM,GAAG,IAAAI,cAAA,EACb,MAAM,IAAAC,eAAA,EAAUJ,UAAV,EAAsBC,WAAtB,CADO,EAEb,CAACD,UAAD,EAAaC,WAAb,CAFa,CAAf;EAKA,MAAMI,UAAU,GAAG,IAAAF,cAAA,EAAQ,MAAM;IAC/B,MAAMG,MAAM,GAAG,IAAIC,eAAJ,CAAW;MACxBR;IADwB,CAAX,CAAf;;IAGA,MAAMS,MAAM,GAAGC,cAAA,CAAOC,KAAP,CAAab,KAAK,CAACc,IAAN,EAAb,CAAf;;IAEA,OAAOL,MAAM,CAACM,KAAP,CAAaJ,MAAb,CAAP;EACD,CAPkB,EAOhB,CAACX,KAAD,EAAQE,MAAR,CAPgB,CAAnB;EASA,MAAMc,UAAU,GAAG,IAAAC,kBAAA,EAAY,SAAmC;IAAA,IAAlC;MAAEC;IAAF,CAAkC;IAChE,oBAAO,4DAAGA,IAAH,CAAP;EACD,CAFkB,EAEhB,EAFgB,CAAnB;EAIA,MAAMC,YAAY,GAAG,IAAAF,kBAAA,EAAY,CAACG,CAAD,EAAIC,KAAJ,KAAcA,KAAK,CAACC,QAAN,EAA1B,EAA4C,EAA5C,CAArB;EAEA,oBACE,6BAAC,qBAAD;IACE,YAAY,EAAEH,YADhB;IAEE,mBAAmB,EAAE,CAFvB;IAGE,kBAAkB,EAAE,CAHtB;IAIE,qBAAqB,MAJvB;IAKE,KAAK,EAAEjB,MAAM,CAACqB;EALhB,GAMMtB,aANN;IAOE,IAAI,EAAEO,UAPR;IAQE,UAAU,EAAEQ;EARd,GADF;AAYD,CAtCD;;4BAwCe,IAAAQ,WAAA,EAAKzB,QAAL,C"}
@@ -5,8 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
 
8
- var _reactNative = require("react-native");
9
-
10
8
  var _Renderer = _interopRequireDefault(require("./Renderer"));
11
9
 
12
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -19,21 +17,22 @@ class Parser {
19
17
 
20
18
  _defineProperty(this, "styles", void 0);
21
19
 
22
- _defineProperty(this, "options", void 0);
20
+ _defineProperty(this, "headingStylesMap", void 0);
23
21
 
22
+ this.styles = { ...options.styles
23
+ };
24
24
  this.renderer = new _Renderer.default();
25
- this.options = options;
26
- this.styles = { ...defaultStyles,
27
- ...options.styles
25
+ this.headingStylesMap = {
26
+ 1: this.styles.h1,
27
+ 2: this.styles.h2,
28
+ 3: this.styles.h3,
29
+ 4: this.styles.h4,
30
+ 5: this.styles.h5,
31
+ 6: this.styles.h6
28
32
  };
29
33
  }
30
34
 
31
35
  parse(tokens) {
32
- return this.parseBlocks(tokens);
33
- }
34
-
35
- parseBlocks(tokens) {
36
- let styleObj = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
37
36
  const elements = tokens.map(token => {
38
37
  switch (token.type) {
39
38
  case 'space':
@@ -46,9 +45,8 @@ class Parser {
46
45
  let tempTokens = [];
47
46
  const paragraphChildren = [];
48
47
  token.tokens.forEach(t => {
49
- // TODO: move type checking value to const
50
48
  if (t.type === 'image') {
51
- paragraphChildren.push(this.renderer.getTextNode(this.parseInline(tempTokens), styleObj));
49
+ paragraphChildren.push(this.renderer.getTextNode(this.parseInline(tempTokens), this.styles.text));
52
50
  paragraphChildren.push(this.parseInline([t]));
53
51
  tempTokens = [];
54
52
  return;
@@ -58,49 +56,53 @@ class Parser {
58
56
  });
59
57
 
60
58
  if (tempTokens.length > 0) {
61
- paragraphChildren.push(this.renderer.getTextNode(this.parseInline(tempTokens), styleObj));
59
+ paragraphChildren.push(this.renderer.getTextNode(this.parseInline(tempTokens), {}));
62
60
  }
63
61
 
64
- return this.renderer.getParagraph(paragraphChildren, [styleObj, this.styles.paragraph]);
62
+ return this.renderer.getViewNode(paragraphChildren, this.styles.paragraph);
65
63
  }
66
64
 
67
65
  case 'blockquote':
68
66
  {
69
- return this.renderer.getBlockquote(this.parseBlocks(token.tokens, this.styles.blockquoteText), this.styles.blockquoteContainer);
67
+ return this.renderer.getBlockquoteNode(this.parse(token.tokens), this.styles.blockquote);
70
68
  }
71
69
 
72
70
  case 'heading':
73
71
  {
74
- switch (token.depth) {
75
- case 1:
76
- return this.renderer.getHeading(token.text, this.styles.h1);
77
-
78
- case 2:
79
- return this.renderer.getHeading(token.text, this.styles.h2);
72
+ const styles = this.headingStylesMap[token.depth] ?? this.styles.text;
73
+ return this.renderer.getTextNode(token.text, styles);
74
+ }
80
75
 
81
- case 3:
82
- return this.renderer.getHeading(token.text, this.styles.h3);
76
+ case 'code':
77
+ {
78
+ return this.renderer.getCodeBlockNode(token.text, this.styles.code, this.styles.em);
79
+ }
83
80
 
84
- case 4:
85
- return this.renderer.getHeading(token.text, this.styles.h4);
81
+ case 'hr':
82
+ {
83
+ return this.renderer.getViewNode(null, this.styles.hr);
84
+ }
86
85
 
87
- case 5:
88
- return this.renderer.getHeading(token.text, this.styles.h5);
86
+ case 'list':
87
+ {
88
+ const li = token.items.map(item => {
89
+ var _item$tokens$, _item$tokens$2;
89
90
 
90
- case 6:
91
- return this.renderer.getHeading(token.text, this.styles.h6);
91
+ if (item.tokens.length > 0 && ((_item$tokens$ = item.tokens[0]) === null || _item$tokens$ === void 0 ? void 0 : _item$tokens$.type) === 'text' && // @ts-ignore
92
+ Array.isArray((_item$tokens$2 = item.tokens[0]) === null || _item$tokens$2 === void 0 ? void 0 : _item$tokens$2.tokens)) {
93
+ var _item$tokens$3;
92
94
 
93
- default:
94
- return null;
95
- }
96
- }
95
+ return this.renderer.getTextNode( // @ts-ignore
96
+ this.parseInline((_item$tokens$3 = item.tokens[0]) === null || _item$tokens$3 === void 0 ? void 0 : _item$tokens$3.tokens), this.styles.li);
97
+ }
97
98
 
98
- case 'code':
99
- {
100
- return this.renderer.getCodeBlock(token.text, this.styles.code, this.styles.em);
99
+ return this.renderer.getTextNode(item.text, this.styles.li);
100
+ });
101
+ return this.renderer.getListNode(token.ordered, li, this.styles.list, this.styles.li);
101
102
  }
102
103
 
103
104
  default:
105
+ console.warn(`Token with '${token.type}' type was not found.`);
104
106
  return null;
105
107
  }
106
108
  });
@@ -108,14 +110,14 @@ class Parser {
108
110
  }
109
111
 
110
112
  parseInline(tokens) {
111
- let styleObj = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
113
+ let styles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
112
114
  const elements = tokens.map(token => {
113
115
  if (!token) return null;
114
116
 
115
117
  switch (token.type) {
116
118
  case 'escape':
117
119
  {
118
- return this.renderer.getTextNode(token.text, [styleObj, this.styles.text]);
120
+ return this.renderer.getTextNode(token.text, [styles, this.styles.text]);
119
121
  }
120
122
 
121
123
  case 'html':
@@ -126,27 +128,27 @@ class Parser {
126
128
 
127
129
  case 'link':
128
130
  {
129
- return this.renderer.getLinkNode(token.text, token.href, [styleObj, this.styles.link]);
131
+ return this.renderer.getLinkNode(token.text, token.href, [styles, this.styles.link]);
130
132
  }
131
133
 
132
134
  case 'image':
133
135
  {
134
- return this.renderer.getImage(token.href, this.options.contentWidth);
136
+ return this.renderer.getImageNode(token.href);
135
137
  }
136
138
 
137
139
  case 'strong':
138
140
  {
139
- return this.renderer.getTextNode(this.parseInline(token.tokens, this.styles.strong), [styleObj, this.styles.strong]);
141
+ return this.renderer.getTextNode(this.parseInline(token.tokens, this.styles.strong), [styles, this.styles.strong]);
140
142
  }
141
143
 
142
144
  case 'em':
143
145
  {
144
- return this.renderer.getTextNode(this.parseInline(token.tokens, this.styles.em), [styleObj, this.styles.em]);
146
+ return this.renderer.getTextNode(this.parseInline(token.tokens, this.styles.em), [styles, this.styles.em]);
145
147
  }
146
148
 
147
149
  case 'codespan':
148
150
  {
149
- return this.renderer.getTextNode(` ${token.text} `, this.styles.codespan);
151
+ return this.renderer.getTextNode(token.text, this.styles.codespan);
150
152
  }
151
153
 
152
154
  case 'br':
@@ -161,13 +163,12 @@ class Parser {
161
163
 
162
164
  case 'text':
163
165
  {
164
- return this.renderer.getTextNode(token.raw, [styleObj, this.styles.text]);
166
+ return this.renderer.getTextNode(token.raw, [styles, this.styles.text]);
165
167
  }
166
168
 
167
169
  default:
168
170
  {
169
- const errMsg = 'Token with "' + token.type + '" type was not found.';
170
- console.error(errMsg);
171
+ console.warn(`Token with '${token.type}' type was not found.`);
171
172
  return null;
172
173
  }
173
174
  }
@@ -175,89 +176,7 @@ class Parser {
175
176
  return elements;
176
177
  }
177
178
 
178
- } // TODO: material typography for font size
179
-
180
-
181
- const defaultStyles = _reactNative.StyleSheet.create({
182
- em: {
183
- fontSize: 16,
184
- lineHeight: 24,
185
- fontStyle: 'italic'
186
- },
187
- strong: {
188
- fontSize: 16,
189
- lineHeight: 24,
190
- fontWeight: 'bold'
191
- },
192
- text: {
193
- fontSize: 16,
194
- lineHeight: 24
195
- },
196
- paragraph: {
197
- fontSize: 16,
198
- lineHeight: 24,
199
- paddingVertical: 8
200
- },
201
- link: {
202
- fontStyle: 'italic',
203
- fontSize: 16,
204
- lineHeight: 24,
205
- color: '#0074cc'
206
- },
207
- blockquoteText: {
208
- color: '#6a737d'
209
- },
210
- blockquoteContainer: {
211
- borderLeftColor: '#dfe2e5',
212
- paddingLeft: 16,
213
- borderLeftWidth: 5
214
- },
215
- h1: {
216
- fontSize: 32,
217
- lineHeight: 40,
218
- fontWeight: 'bold',
219
- paddingVertical: 8,
220
- letterSpacing: 0
221
- },
222
- h2: {
223
- fontSize: 28,
224
- lineHeight: 36,
225
- fontWeight: '500',
226
- paddingVertical: 8
227
- },
228
- h3: {
229
- fontSize: 36,
230
- lineHeight: 44,
231
- fontWeight: '500'
232
- },
233
- h4: {
234
- fontSize: 22,
235
- lineHeight: 28,
236
- fontWeight: '500'
237
- },
238
- h5: {
239
- fontSize: 16,
240
- lineHeight: 24,
241
- fontWeight: '500'
242
- },
243
- h6: {
244
- fontSize: 14,
245
- lineHeight: 20,
246
- fontWeight: '500'
247
- },
248
- codespan: {
249
- fontSize: 16,
250
- lineHeight: 24,
251
- fontStyle: 'italic',
252
- backgroundColor: '#afb8c133',
253
- fontWeight: '300'
254
- },
255
- code: {
256
- padding: 16,
257
- backgroundColor: '#afb8c133',
258
- minWidth: '100%'
259
- }
260
- });
179
+ }
261
180
 
262
181
  var _default = Parser;
263
182
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"names":["Parser","constructor","options","renderer","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","StyleSheet","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":["Parser","constructor","options","styles","renderer","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","Array","isArray","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) => {\n if (\n item.tokens.length > 0 &&\n item.tokens[0]?.type === 'text' &&\n // @ts-ignore\n Array.isArray(item.tokens[0]?.tokens)\n ) {\n return this.renderer.getTextNode(\n // @ts-ignore\n this.parseInline(item.tokens[0]?.tokens),\n this.styles.li\n );\n }\n return this.renderer.getTextNode(item.text, this.styles.li);\n });\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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"}
@@ -9,6 +9,12 @@ var React = _interopRequireWildcard(require("react"));
9
9
 
10
10
  var _reactNative = require("react-native");
11
11
 
12
+ var _reactNativeLi = _interopRequireDefault(require("@jsamr/react-native-li"));
13
+
14
+ var _disc = _interopRequireDefault(require("@jsamr/counter-style/presets/disc"));
15
+
16
+ var _decimal = _interopRequireDefault(require("@jsamr/counter-style/presets/decimal"));
17
+
12
18
  var _MDImage = _interopRequireDefault(require("./../components/MDImage"));
13
19
 
14
20
  var _string = require("../utils/string");
@@ -41,14 +47,14 @@ class Renderer {
41
47
  });
42
48
  }
43
49
 
44
- getParagraph(children, styles) {
50
+ getViewNode(children, styles) {
45
51
  return /*#__PURE__*/React.createElement(_reactNative.View, {
46
52
  key: (0, _string.generateRandomString)(),
47
53
  style: styles
48
54
  }, children);
49
55
  }
50
56
 
51
- getCodeBlock(text, containerStyle, textStyle) {
57
+ getCodeBlockNode(text, containerStyle, textStyle) {
52
58
  return /*#__PURE__*/React.createElement(_reactNative.ScrollView, {
53
59
  contentContainerStyle: containerStyle,
54
60
  horizontal: true
@@ -57,28 +63,28 @@ class Renderer {
57
63
  }, text));
58
64
  }
59
65
 
60
- getBlockquote(children, styles) {
66
+ getBlockquoteNode(children, styles) {
61
67
  return /*#__PURE__*/React.createElement(_reactNative.View, {
62
68
  key: (0, _string.generateRandomString)(),
63
69
  style: styles
64
70
  }, children);
65
71
  }
66
72
 
67
- getHeading(text, styles) {
68
- return /*#__PURE__*/React.createElement(_reactNative.Text, {
69
- key: (0, _string.generateRandomString)(),
70
- style: styles
71
- }, text);
72
- }
73
-
74
- getImage(uri, width) {
73
+ getImageNode(uri) {
75
74
  return /*#__PURE__*/React.createElement(_MDImage.default, {
76
75
  key: (0, _string.generateRandomString)(),
77
- uri: uri,
78
- width: width
76
+ uri: uri
79
77
  });
80
78
  }
81
79
 
80
+ getListNode(ordered, li, listStyle, textStyle) {
81
+ return /*#__PURE__*/React.createElement(_reactNativeLi.default, {
82
+ counterRenderer: ordered ? _decimal.default : _disc.default,
83
+ markerTextStyle: textStyle,
84
+ markerBoxStyle: listStyle
85
+ }, li.map(node => node));
86
+ }
87
+
82
88
  }
83
89
 
84
90
  var _default = Renderer;
@@ -1 +1 @@
1
- {"version":3,"names":["Renderer","href","Linking","openURL","children","styles","generateRandomString","text","onLinkPress","getParagraph","getCodeBlock","containerStyle","textStyle","getBlockquote","getHeading","getImage","uri","width"],"sources":["Renderer.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Linking, ScrollView, View, ViewStyle } from 'react-native';\nimport type { StyleProp, TextStyle } from 'react-native';\nimport { Text } from 'react-native';\nimport MDImage from './../components/MDImage';\nimport { generateRandomString } from '../utils/string';\n\nclass Renderer {\n private onLinkPress = (href: string) => () => Linking.openURL(href);\n\n getTextNode = (\n children: string | React.ReactNode[],\n styles: StyleProp<TextStyle>\n ) => {\n return (\n <Text key={generateRandomString()} style={styles}>\n {children}\n </Text>\n );\n };\n\n getLinkNode = (text: string, href: string, styles: StyleProp<TextStyle>) => {\n return (\n <Text\n key={generateRandomString()}\n onPress={this.onLinkPress(href)}\n style={styles}\n >\n {text}\n </Text>\n );\n };\n\n getParagraph(children: React.ReactNode[], styles: StyleProp<ViewStyle>) {\n return (\n <View key={generateRandomString()} style={styles}>\n {children}\n </View>\n );\n }\n\n getCodeBlock(\n text: string,\n containerStyle: StyleProp<ViewStyle>,\n textStyle: StyleProp<TextStyle>\n ) {\n return (\n <ScrollView contentContainerStyle={containerStyle} horizontal>\n <Text style={textStyle}>{text}</Text>\n </ScrollView>\n );\n }\n\n getBlockquote(children: React.ReactNode[], styles: StyleProp<ViewStyle>) {\n return (\n <View key={generateRandomString()} style={styles}>\n {children}\n </View>\n );\n }\n\n getHeading(text: string, styles: StyleProp<TextStyle>) {\n return (\n <Text key={generateRandomString()} style={styles}>\n {text}\n </Text>\n );\n }\n\n getImage(uri: string, width: number) {\n return <MDImage key={generateRandomString()} uri={uri} width={width} />;\n }\n}\n\nexport default Renderer;\n"],"mappings":";;;;;;;AAAA;;AACA;;AAGA;;AACA;;;;;;;;;;AAEA,MAAMA,QAAN,CAAe;EAAA;IAAA,qCACUC,IAAD,IAAkB,MAAMC,oBAAA,CAAQC,OAAR,CAAgBF,IAAhB,CADjC;;IAAA,qCAGC,CACZG,QADY,EAEZC,MAFY,KAGT;MACH,oBACE,oBAAC,iBAAD;QAAM,GAAG,EAAE,IAAAC,4BAAA,GAAX;QAAmC,KAAK,EAAED;MAA1C,GACGD,QADH,CADF;IAKD,CAZY;;IAAA,qCAcC,CAACG,IAAD,EAAeN,IAAf,EAA6BI,MAA7B,KAA8D;MAC1E,oBACE,oBAAC,iBAAD;QACE,GAAG,EAAE,IAAAC,4BAAA,GADP;QAEE,OAAO,EAAE,KAAKE,WAAL,CAAiBP,IAAjB,CAFX;QAGE,KAAK,EAAEI;MAHT,GAKGE,IALH,CADF;IASD,CAxBY;EAAA;;EA0BbE,YAAY,CAACL,QAAD,EAA8BC,MAA9B,EAA4D;IACtE,oBACE,oBAAC,iBAAD;MAAM,GAAG,EAAE,IAAAC,4BAAA,GAAX;MAAmC,KAAK,EAAED;IAA1C,GACGD,QADH,CADF;EAKD;;EAEDM,YAAY,CACVH,IADU,EAEVI,cAFU,EAGVC,SAHU,EAIV;IACA,oBACE,oBAAC,uBAAD;MAAY,qBAAqB,EAAED,cAAnC;MAAmD,UAAU;IAA7D,gBACE,oBAAC,iBAAD;MAAM,KAAK,EAAEC;IAAb,GAAyBL,IAAzB,CADF,CADF;EAKD;;EAEDM,aAAa,CAACT,QAAD,EAA8BC,MAA9B,EAA4D;IACvE,oBACE,oBAAC,iBAAD;MAAM,GAAG,EAAE,IAAAC,4BAAA,GAAX;MAAmC,KAAK,EAAED;IAA1C,GACGD,QADH,CADF;EAKD;;EAEDU,UAAU,CAACP,IAAD,EAAeF,MAAf,EAA6C;IACrD,oBACE,oBAAC,iBAAD;MAAM,GAAG,EAAE,IAAAC,4BAAA,GAAX;MAAmC,KAAK,EAAED;IAA1C,GACGE,IADH,CADF;EAKD;;EAEDQ,QAAQ,CAACC,GAAD,EAAcC,KAAd,EAA6B;IACnC,oBAAO,oBAAC,gBAAD;MAAS,GAAG,EAAE,IAAAX,4BAAA,GAAd;MAAsC,GAAG,EAAEU,GAA3C;MAAgD,KAAK,EAAEC;IAAvD,EAAP;EACD;;AAhEY;;eAmEAjB,Q"}
1
+ {"version":3,"names":["Renderer","href","Linking","openURL","children","styles","generateRandomString","text","onLinkPress","getViewNode","getCodeBlockNode","containerStyle","textStyle","getBlockquoteNode","getImageNode","uri","getListNode","ordered","li","listStyle","Decimal","Disc","map","node"],"sources":["Renderer.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Linking, ScrollView, View, ViewStyle } from 'react-native';\nimport { Text, StyleProp, TextStyle } from 'react-native';\nimport MarkedList from '@jsamr/react-native-li';\nimport Disc from '@jsamr/counter-style/presets/disc';\nimport Decimal from '@jsamr/counter-style/presets/decimal';\nimport MDImage from './../components/MDImage';\n\nimport { generateRandomString } from '../utils/string';\n\nclass Renderer {\n private onLinkPress = (href: string) => () => Linking.openURL(href);\n\n getTextNode = (\n children: string | React.ReactNode[],\n styles: StyleProp<TextStyle>\n ) => {\n return (\n <Text key={generateRandomString()} style={styles}>\n {children}\n </Text>\n );\n };\n\n getLinkNode = (text: string, href: string, styles: StyleProp<TextStyle>) => {\n return (\n <Text\n key={generateRandomString()}\n onPress={this.onLinkPress(href)}\n style={styles}\n >\n {text}\n </Text>\n );\n };\n\n getViewNode(\n children: React.ReactNode[] | null,\n styles: StyleProp<ViewStyle>\n ) {\n return (\n <View key={generateRandomString()} style={styles}>\n {children}\n </View>\n );\n }\n\n getCodeBlockNode(\n text: string,\n containerStyle: StyleProp<ViewStyle>,\n textStyle: StyleProp<TextStyle>\n ) {\n return (\n <ScrollView contentContainerStyle={containerStyle} horizontal>\n <Text style={textStyle}>{text}</Text>\n </ScrollView>\n );\n }\n\n getBlockquoteNode(children: React.ReactNode[], styles: StyleProp<ViewStyle>) {\n return (\n <View key={generateRandomString()} style={styles}>\n {children}\n </View>\n );\n }\n\n getImageNode(uri: string) {\n return <MDImage key={generateRandomString()} uri={uri} />;\n }\n\n getListNode(\n ordered: boolean,\n li: React.ReactNode[],\n listStyle: ViewStyle | undefined,\n textStyle: TextStyle | undefined\n ) {\n return (\n <MarkedList\n counterRenderer={ordered ? Decimal : Disc}\n markerTextStyle={textStyle}\n markerBoxStyle={listStyle}\n >\n {li.map((node) => node)}\n </MarkedList>\n );\n }\n}\n\nexport default Renderer;\n"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;AACA;;AACA;;AACA;;AAEA;;;;;;;;;;AAEA,MAAMA,QAAN,CAAe;EAAA;IAAA,qCACUC,IAAD,IAAkB,MAAMC,oBAAA,CAAQC,OAAR,CAAgBF,IAAhB,CADjC;;IAAA,qCAGC,CACZG,QADY,EAEZC,MAFY,KAGT;MACH,oBACE,oBAAC,iBAAD;QAAM,GAAG,EAAE,IAAAC,4BAAA,GAAX;QAAmC,KAAK,EAAED;MAA1C,GACGD,QADH,CADF;IAKD,CAZY;;IAAA,qCAcC,CAACG,IAAD,EAAeN,IAAf,EAA6BI,MAA7B,KAA8D;MAC1E,oBACE,oBAAC,iBAAD;QACE,GAAG,EAAE,IAAAC,4BAAA,GADP;QAEE,OAAO,EAAE,KAAKE,WAAL,CAAiBP,IAAjB,CAFX;QAGE,KAAK,EAAEI;MAHT,GAKGE,IALH,CADF;IASD,CAxBY;EAAA;;EA0BbE,WAAW,CACTL,QADS,EAETC,MAFS,EAGT;IACA,oBACE,oBAAC,iBAAD;MAAM,GAAG,EAAE,IAAAC,4BAAA,GAAX;MAAmC,KAAK,EAAED;IAA1C,GACGD,QADH,CADF;EAKD;;EAEDM,gBAAgB,CACdH,IADc,EAEdI,cAFc,EAGdC,SAHc,EAId;IACA,oBACE,oBAAC,uBAAD;MAAY,qBAAqB,EAAED,cAAnC;MAAmD,UAAU;IAA7D,gBACE,oBAAC,iBAAD;MAAM,KAAK,EAAEC;IAAb,GAAyBL,IAAzB,CADF,CADF;EAKD;;EAEDM,iBAAiB,CAACT,QAAD,EAA8BC,MAA9B,EAA4D;IAC3E,oBACE,oBAAC,iBAAD;MAAM,GAAG,EAAE,IAAAC,4BAAA,GAAX;MAAmC,KAAK,EAAED;IAA1C,GACGD,QADH,CADF;EAKD;;EAEDU,YAAY,CAACC,GAAD,EAAc;IACxB,oBAAO,oBAAC,gBAAD;MAAS,GAAG,EAAE,IAAAT,4BAAA,GAAd;MAAsC,GAAG,EAAES;IAA3C,EAAP;EACD;;EAEDC,WAAW,CACTC,OADS,EAETC,EAFS,EAGTC,SAHS,EAITP,SAJS,EAKT;IACA,oBACE,oBAAC,sBAAD;MACE,eAAe,EAAEK,OAAO,GAAGG,gBAAH,GAAaC,aADvC;MAEE,eAAe,EAAET,SAFnB;MAGE,cAAc,EAAEO;IAHlB,GAKGD,EAAE,CAACI,GAAH,CAAQC,IAAD,IAAUA,IAAjB,CALH,CADF;EASD;;AA5EY;;eA+EAvB,Q"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ const colors = {
8
+ light: {
9
+ background: '#ffffff',
10
+ code: '#f6f8fa',
11
+ link: '#58a6ff',
12
+ text: '#333333',
13
+ border: '#d0d7de'
14
+ },
15
+ dark: {
16
+ background: '#000000',
17
+ code: '#161b22',
18
+ link: '#58a6ff',
19
+ text: '#ffffff',
20
+ border: '#30363d'
21
+ }
22
+ };
23
+ var _default = colors;
24
+ exports.default = _default;
25
+ //# sourceMappingURL=colors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["colors","light","background","code","link","text","border","dark"],"sources":["colors.ts"],"sourcesContent":["import type { ColorKeys } from './types';\n\nconst colors: Record<'light' | 'dark', Record<ColorKeys, string>> = {\n light: {\n background: '#ffffff',\n code: '#f6f8fa',\n link: '#58a6ff',\n text: '#333333',\n border: '#d0d7de',\n },\n dark: {\n background: '#000000',\n code: '#161b22',\n link: '#58a6ff',\n text: '#ffffff',\n border: '#30363d',\n },\n};\n\nexport default colors;\n"],"mappings":";;;;;;AAEA,MAAMA,MAA2D,GAAG;EAClEC,KAAK,EAAE;IACLC,UAAU,EAAE,SADP;IAELC,IAAI,EAAE,SAFD;IAGLC,IAAI,EAAE,SAHD;IAILC,IAAI,EAAE,SAJD;IAKLC,MAAM,EAAE;EALH,CAD2D;EAQlEC,IAAI,EAAE;IACJL,UAAU,EAAE,SADR;IAEJC,IAAI,EAAE,SAFF;IAGJC,IAAI,EAAE,SAHF;IAIJC,IAAI,EAAE,SAJF;IAKJC,MAAM,EAAE;EALJ;AAR4D,CAApE;eAiBeN,M"}