react-native-marked 1.0.0-alpha.1

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 (45) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +29 -0
  3. package/dist/commonjs/components/MDImage.js +55 -0
  4. package/dist/commonjs/components/MDImage.js.map +1 -0
  5. package/dist/commonjs/index.js +14 -0
  6. package/dist/commonjs/index.js.map +1 -0
  7. package/dist/commonjs/lib/Markdown.js +57 -0
  8. package/dist/commonjs/lib/Markdown.js.map +1 -0
  9. package/dist/commonjs/lib/Parser.js +264 -0
  10. package/dist/commonjs/lib/Parser.js.map +1 -0
  11. package/dist/commonjs/lib/Renderer.js +86 -0
  12. package/dist/commonjs/lib/Renderer.js.map +1 -0
  13. package/dist/commonjs/types/types.js +6 -0
  14. package/dist/commonjs/types/types.js.map +1 -0
  15. package/dist/commonjs/utils/string.js +17 -0
  16. package/dist/commonjs/utils/string.js.map +1 -0
  17. package/dist/module/components/MDImage.js +37 -0
  18. package/dist/module/components/MDImage.js.map +1 -0
  19. package/dist/module/index.js +3 -0
  20. package/dist/module/index.js.map +1 -0
  21. package/dist/module/lib/Markdown.js +38 -0
  22. package/dist/module/lib/Markdown.js.map +1 -0
  23. package/dist/module/lib/Parser.js +252 -0
  24. package/dist/module/lib/Parser.js.map +1 -0
  25. package/dist/module/lib/Renderer.js +70 -0
  26. package/dist/module/lib/Renderer.js.map +1 -0
  27. package/dist/module/types/types.js +2 -0
  28. package/dist/module/types/types.js.map +1 -0
  29. package/dist/module/utils/string.js +8 -0
  30. package/dist/module/utils/string.js.map +1 -0
  31. package/dist/typescript/components/MDImage.d.ts +7 -0
  32. package/dist/typescript/index.d.ts +2 -0
  33. package/dist/typescript/lib/Markdown.d.ts +9 -0
  34. package/dist/typescript/lib/Parser.d.ts +14 -0
  35. package/dist/typescript/lib/Renderer.d.ts +14 -0
  36. package/dist/typescript/types/types.d.ts +23 -0
  37. package/dist/typescript/utils/string.d.ts +5 -0
  38. package/package.json +179 -0
  39. package/src/components/MDImage.tsx +40 -0
  40. package/src/index.ts +3 -0
  41. package/src/lib/Markdown.tsx +39 -0
  42. package/src/lib/Parser.ts +256 -0
  43. package/src/lib/Renderer.tsx +75 -0
  44. package/src/types/types.ts +25 -0
  45. package/src/utils/string.ts +7 -0
@@ -0,0 +1,3 @@
1
+ import Markdown from './lib/Markdown';
2
+ export default Markdown;
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Markdown"],"sources":["index.ts"],"sourcesContent":["import Markdown from './lib/Markdown';\n\nexport default Markdown;\n"],"mappings":"AAAA,OAAOA,QAAP,MAAqB,gBAArB;AAEA,eAAeA,QAAf"}
@@ -0,0 +1,38 @@
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
+
3
+ import React, { useCallback } from 'react';
4
+ import { marked } from 'marked';
5
+ import Parser from './Parser';
6
+ import { FlatList } from 'react-native';
7
+
8
+ const Markdown = _ref => {
9
+ let {
10
+ value,
11
+ contentWidth,
12
+ listProps
13
+ } = _ref;
14
+ const tokens = marked.lexer(value.trim());
15
+ const parser = new Parser({
16
+ contentWidth
17
+ });
18
+ const rnElements = parser.parse(tokens);
19
+ const renderItem = useCallback(_ref2 => {
20
+ let {
21
+ item
22
+ } = _ref2;
23
+ return /*#__PURE__*/React.createElement(React.Fragment, null, item);
24
+ }, []);
25
+ const keyExtractor = useCallback((_, index) => index.toString(), []);
26
+ return /*#__PURE__*/React.createElement(FlatList, _extends({
27
+ keyExtractor: keyExtractor,
28
+ maxToRenderPerBatch: 8,
29
+ initialNumToRender: 8,
30
+ removeClippedSubviews: true
31
+ }, listProps, {
32
+ data: rnElements,
33
+ renderItem: renderItem
34
+ }));
35
+ };
36
+
37
+ export default Markdown;
38
+ //# sourceMappingURL=Markdown.js.map
@@ -0,0 +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"}
@@ -0,0 +1,252 @@
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
+
3
+ import { StyleSheet } from 'react-native';
4
+ import Renderer from './Renderer';
5
+
6
+ class Parser {
7
+ constructor(options) {
8
+ _defineProperty(this, "renderer", void 0);
9
+
10
+ _defineProperty(this, "styles", void 0);
11
+
12
+ _defineProperty(this, "options", void 0);
13
+
14
+ this.renderer = new Renderer();
15
+ this.options = options;
16
+ this.styles = { ...defaultStyles,
17
+ ...options.styles
18
+ };
19
+ }
20
+
21
+ parse(tokens) {
22
+ return this.parseBlocks(tokens);
23
+ }
24
+
25
+ parseBlocks(tokens) {
26
+ let styleObj = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
27
+ const elements = tokens.map(token => {
28
+ switch (token.type) {
29
+ case 'space':
30
+ {
31
+ return null;
32
+ }
33
+
34
+ case 'paragraph':
35
+ {
36
+ let tempTokens = [];
37
+ const paragraphChildren = [];
38
+ token.tokens.forEach(t => {
39
+ // TODO: move type checking value to const
40
+ if (t.type === 'image') {
41
+ paragraphChildren.push(this.renderer.getTextNode(this.parseInline(tempTokens), styleObj));
42
+ paragraphChildren.push(this.parseInline([t]));
43
+ tempTokens = [];
44
+ return;
45
+ }
46
+
47
+ tempTokens = [...tempTokens, t];
48
+ });
49
+
50
+ if (tempTokens.length > 0) {
51
+ paragraphChildren.push(this.renderer.getTextNode(this.parseInline(tempTokens), styleObj));
52
+ }
53
+
54
+ return this.renderer.getParagraph(paragraphChildren, [styleObj, this.styles.paragraph]);
55
+ }
56
+
57
+ case 'blockquote':
58
+ {
59
+ return this.renderer.getBlockquote(this.parseBlocks(token.tokens, this.styles.blockquoteText), this.styles.blockquoteContainer);
60
+ }
61
+
62
+ case 'heading':
63
+ {
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);
79
+
80
+ case 6:
81
+ return this.renderer.getHeading(token.text, this.styles.h6);
82
+
83
+ default:
84
+ return null;
85
+ }
86
+ }
87
+
88
+ case 'code':
89
+ {
90
+ return this.renderer.getCodeBlock(token.text, this.styles.code, this.styles.em);
91
+ }
92
+
93
+ default:
94
+ return null;
95
+ }
96
+ });
97
+ return elements;
98
+ }
99
+
100
+ parseInline(tokens) {
101
+ let styleObj = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
102
+ const elements = tokens.map(token => {
103
+ if (!token) return null;
104
+
105
+ switch (token.type) {
106
+ case 'escape':
107
+ {
108
+ return this.renderer.getTextNode(token.text, [styleObj, this.styles.text]);
109
+ }
110
+
111
+ case 'html':
112
+ {
113
+ console.log('html', token);
114
+ return null;
115
+ }
116
+
117
+ case 'link':
118
+ {
119
+ return this.renderer.getLinkNode(token.text, token.href, [styleObj, this.styles.link]);
120
+ }
121
+
122
+ case 'image':
123
+ {
124
+ return this.renderer.getImage(token.href, this.options.contentWidth);
125
+ }
126
+
127
+ case 'strong':
128
+ {
129
+ return this.renderer.getTextNode(this.parseInline(token.tokens, this.styles.strong), [styleObj, this.styles.strong]);
130
+ }
131
+
132
+ case 'em':
133
+ {
134
+ return this.renderer.getTextNode(this.parseInline(token.tokens, this.styles.em), [styleObj, this.styles.em]);
135
+ }
136
+
137
+ case 'codespan':
138
+ {
139
+ return this.renderer.getTextNode(` ${token.text} `, this.styles.codespan);
140
+ }
141
+
142
+ case 'br':
143
+ {
144
+ return this.renderer.getTextNode('\n', {});
145
+ }
146
+
147
+ case 'del':
148
+ {
149
+ return null;
150
+ }
151
+
152
+ case 'text':
153
+ {
154
+ return this.renderer.getTextNode(token.raw, [styleObj, this.styles.text]);
155
+ }
156
+
157
+ default:
158
+ {
159
+ const errMsg = 'Token with "' + token.type + '" type was not found.';
160
+ console.error(errMsg);
161
+ return null;
162
+ }
163
+ }
164
+ });
165
+ return elements;
166
+ }
167
+
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
+ });
251
+ export default Parser;
252
+ //# sourceMappingURL=Parser.js.map
@@ -0,0 +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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"}
@@ -0,0 +1,70 @@
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
+
3
+ import * as React from 'react';
4
+ import { Linking, ScrollView, View } from 'react-native';
5
+ import { Text } from 'react-native';
6
+ import MDImage from './../components/MDImage';
7
+ import { generateRandomString } from '../utils/string';
8
+
9
+ class Renderer {
10
+ constructor() {
11
+ _defineProperty(this, "onLinkPress", href => () => Linking.openURL(href));
12
+
13
+ _defineProperty(this, "getTextNode", (children, styles) => {
14
+ return /*#__PURE__*/React.createElement(Text, {
15
+ key: generateRandomString(),
16
+ style: styles
17
+ }, children);
18
+ });
19
+
20
+ _defineProperty(this, "getLinkNode", (text, href, styles) => {
21
+ return /*#__PURE__*/React.createElement(Text, {
22
+ key: generateRandomString(),
23
+ onPress: this.onLinkPress(href),
24
+ style: styles
25
+ }, text);
26
+ });
27
+ }
28
+
29
+ getParagraph(children, styles) {
30
+ return /*#__PURE__*/React.createElement(View, {
31
+ key: generateRandomString(),
32
+ style: styles
33
+ }, children);
34
+ }
35
+
36
+ getCodeBlock(text, containerStyle, textStyle) {
37
+ return /*#__PURE__*/React.createElement(ScrollView, {
38
+ contentContainerStyle: containerStyle,
39
+ horizontal: true
40
+ }, /*#__PURE__*/React.createElement(Text, {
41
+ style: textStyle
42
+ }, text));
43
+ }
44
+
45
+ getBlockquote(children, styles) {
46
+ return /*#__PURE__*/React.createElement(View, {
47
+ key: generateRandomString(),
48
+ style: styles
49
+ }, children);
50
+ }
51
+
52
+ getHeading(text, styles) {
53
+ return /*#__PURE__*/React.createElement(Text, {
54
+ key: generateRandomString(),
55
+ style: styles
56
+ }, text);
57
+ }
58
+
59
+ getImage(uri, width) {
60
+ return /*#__PURE__*/React.createElement(MDImage, {
61
+ key: generateRandomString(),
62
+ uri: uri,
63
+ width: width
64
+ });
65
+ }
66
+
67
+ }
68
+
69
+ export default Renderer;
70
+ //# sourceMappingURL=Renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Linking","ScrollView","View","Text","MDImage","generateRandomString","Renderer","href","openURL","children","styles","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,OAAO,KAAKA,KAAZ,MAAuB,OAAvB;AACA,SAASC,OAAT,EAAkBC,UAAlB,EAA8BC,IAA9B,QAAqD,cAArD;AAEA,SAASC,IAAT,QAAqB,cAArB;AACA,OAAOC,OAAP,MAAoB,yBAApB;AACA,SAASC,oBAAT,QAAqC,iBAArC;;AAEA,MAAMC,QAAN,CAAe;EAAA;IAAA,qCACUC,IAAD,IAAkB,MAAMP,OAAO,CAACQ,OAAR,CAAgBD,IAAhB,CADjC;;IAAA,qCAGC,CACZE,QADY,EAEZC,MAFY,KAGT;MACH,oBACE,oBAAC,IAAD;QAAM,GAAG,EAAEL,oBAAoB,EAA/B;QAAmC,KAAK,EAAEK;MAA1C,GACGD,QADH,CADF;IAKD,CAZY;;IAAA,qCAcC,CAACE,IAAD,EAAeJ,IAAf,EAA6BG,MAA7B,KAA8D;MAC1E,oBACE,oBAAC,IAAD;QACE,GAAG,EAAEL,oBAAoB,EAD3B;QAEE,OAAO,EAAE,KAAKO,WAAL,CAAiBL,IAAjB,CAFX;QAGE,KAAK,EAAEG;MAHT,GAKGC,IALH,CADF;IASD,CAxBY;EAAA;;EA0BbE,YAAY,CAACJ,QAAD,EAA8BC,MAA9B,EAA4D;IACtE,oBACE,oBAAC,IAAD;MAAM,GAAG,EAAEL,oBAAoB,EAA/B;MAAmC,KAAK,EAAEK;IAA1C,GACGD,QADH,CADF;EAKD;;EAEDK,YAAY,CACVH,IADU,EAEVI,cAFU,EAGVC,SAHU,EAIV;IACA,oBACE,oBAAC,UAAD;MAAY,qBAAqB,EAAED,cAAnC;MAAmD,UAAU;IAA7D,gBACE,oBAAC,IAAD;MAAM,KAAK,EAAEC;IAAb,GAAyBL,IAAzB,CADF,CADF;EAKD;;EAEDM,aAAa,CAACR,QAAD,EAA8BC,MAA9B,EAA4D;IACvE,oBACE,oBAAC,IAAD;MAAM,GAAG,EAAEL,oBAAoB,EAA/B;MAAmC,KAAK,EAAEK;IAA1C,GACGD,QADH,CADF;EAKD;;EAEDS,UAAU,CAACP,IAAD,EAAeD,MAAf,EAA6C;IACrD,oBACE,oBAAC,IAAD;MAAM,GAAG,EAAEL,oBAAoB,EAA/B;MAAmC,KAAK,EAAEK;IAA1C,GACGC,IADH,CADF;EAKD;;EAEDQ,QAAQ,CAACC,GAAD,EAAcC,KAAd,EAA6B;IACnC,oBAAO,oBAAC,OAAD;MAAS,GAAG,EAAEhB,oBAAoB,EAAlC;MAAsC,GAAG,EAAEe,GAA3C;MAAgD,KAAK,EAAEC;IAAvD,EAAP;EACD;;AAhEY;;AAmEf,eAAef,QAAf"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type { ImageStyle, TextStyle, ViewStyle } from 'react-native';\n\nexport interface MarkedStyles {\n em?: TextStyle;\n strong?: TextStyle;\n text?: TextStyle;\n paragraph?: ViewStyle;\n link?: TextStyle;\n blockquoteText?: TextStyle;\n blockquoteContainer?: ViewStyle;\n h1?: TextStyle;\n h2?: TextStyle;\n h3?: TextStyle;\n h4?: TextStyle;\n h5?: TextStyle;\n h6?: TextStyle;\n image?: ImageStyle;\n codespan?: TextStyle;\n code?: ViewStyle;\n}\n\nexport interface ParserOptions {\n contentWidth: number;\n styles?: MarkedStyles;\n}\n"],"mappings":""}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Generates a random string
3
+ * @returns string
4
+ */
5
+ export const generateRandomString = () => {
6
+ return (Math.random() + 1).toString(36).substring(7);
7
+ };
8
+ //# sourceMappingURL=string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["generateRandomString","Math","random","toString","substring"],"sources":["string.ts"],"sourcesContent":["/**\n * Generates a random string\n * @returns string\n */\nexport const generateRandomString = () => {\n return (Math.random() + 1).toString(36).substring(7);\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA,OAAO,MAAMA,oBAAoB,GAAG,MAAM;EACxC,OAAO,CAACC,IAAI,CAACC,MAAL,KAAgB,CAAjB,EAAoBC,QAApB,CAA6B,EAA7B,EAAiCC,SAAjC,CAA2C,CAA3C,CAAP;AACD,CAFM"}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ interface MDImageProps {
3
+ uri: string;
4
+ width: number;
5
+ }
6
+ declare const _default: React.MemoExoticComponent<({ uri, width }: MDImageProps) => JSX.Element | null>;
7
+ export default _default;
@@ -0,0 +1,2 @@
1
+ import Markdown from './lib/Markdown';
2
+ export default Markdown;
@@ -0,0 +1,9 @@
1
+ import { ReactNode } from 'react';
2
+ import { FlatListProps } from 'react-native';
3
+ interface MarkdownProps {
4
+ value: string;
5
+ contentWidth: number;
6
+ listProps?: Omit<FlatListProps<ReactNode>, 'data' | 'renderItem' | 'horizontal'>;
7
+ }
8
+ declare const Markdown: ({ value, contentWidth, listProps }: MarkdownProps) => JSX.Element;
9
+ export default Markdown;
@@ -0,0 +1,14 @@
1
+ /// <reference types="react" />
2
+ import type { marked } from 'marked';
3
+ import { ImageStyle, StyleProp, TextStyle, ViewStyle } from 'react-native';
4
+ import type { ParserOptions } from '../types/types';
5
+ declare class Parser {
6
+ private renderer;
7
+ private styles;
8
+ private options;
9
+ constructor(options: ParserOptions);
10
+ parse(tokens: marked.Token[]): import("react").ReactNode[];
11
+ parseBlocks(tokens: marked.Token[], styleObj?: StyleProp<ViewStyle | TextStyle | ImageStyle>): import("react").ReactNode[];
12
+ parseInline(tokens: marked.Token[], styleObj?: StyleProp<ViewStyle | TextStyle | ImageStyle>): import("react").ReactNode[];
13
+ }
14
+ export default Parser;
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+ import { ViewStyle } from 'react-native';
3
+ import type { StyleProp, TextStyle } from 'react-native';
4
+ declare class Renderer {
5
+ private onLinkPress;
6
+ getTextNode: (children: string | React.ReactNode[], styles: StyleProp<TextStyle>) => JSX.Element;
7
+ getLinkNode: (text: string, href: string, styles: StyleProp<TextStyle>) => JSX.Element;
8
+ getParagraph(children: React.ReactNode[], styles: StyleProp<ViewStyle>): JSX.Element;
9
+ getCodeBlock(text: string, containerStyle: StyleProp<ViewStyle>, textStyle: StyleProp<TextStyle>): JSX.Element;
10
+ getBlockquote(children: React.ReactNode[], styles: StyleProp<ViewStyle>): JSX.Element;
11
+ getHeading(text: string, styles: StyleProp<TextStyle>): JSX.Element;
12
+ getImage(uri: string, width: number): JSX.Element;
13
+ }
14
+ export default Renderer;
@@ -0,0 +1,23 @@
1
+ import type { ImageStyle, TextStyle, ViewStyle } from 'react-native';
2
+ export interface MarkedStyles {
3
+ em?: TextStyle;
4
+ strong?: TextStyle;
5
+ text?: TextStyle;
6
+ paragraph?: ViewStyle;
7
+ link?: TextStyle;
8
+ blockquoteText?: TextStyle;
9
+ blockquoteContainer?: ViewStyle;
10
+ h1?: TextStyle;
11
+ h2?: TextStyle;
12
+ h3?: TextStyle;
13
+ h4?: TextStyle;
14
+ h5?: TextStyle;
15
+ h6?: TextStyle;
16
+ image?: ImageStyle;
17
+ codespan?: TextStyle;
18
+ code?: ViewStyle;
19
+ }
20
+ export interface ParserOptions {
21
+ contentWidth: number;
22
+ styles?: MarkedStyles;
23
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generates a random string
3
+ * @returns string
4
+ */
5
+ export declare const generateRandomString: () => string;