react-native-marked 1.0.0-alpha.1 → 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.
- package/README.md +23 -7
- package/dist/commonjs/components/MDImage.js +5 -22
- package/dist/commonjs/components/MDImage.js.map +1 -1
- package/dist/commonjs/lib/Markdown.js +19 -11
- package/dist/commonjs/lib/Markdown.js.map +1 -1
- package/dist/commonjs/lib/Parser.js +38 -131
- package/dist/commonjs/lib/Parser.js.map +1 -1
- package/dist/commonjs/lib/Renderer.js +22 -13
- package/dist/commonjs/lib/Renderer.js.map +1 -1
- package/dist/commonjs/theme/colors.js +25 -0
- package/dist/commonjs/theme/colors.js.map +1 -0
- package/dist/commonjs/theme/styles.js +113 -0
- package/dist/commonjs/theme/styles.js.map +1 -0
- package/dist/commonjs/theme/theme.js +19 -0
- package/dist/commonjs/theme/theme.js.map +1 -0
- package/dist/commonjs/{types → theme}/types.js +0 -0
- package/dist/commonjs/theme/types.js.map +1 -0
- package/dist/module/components/MDImage.js +6 -22
- package/dist/module/components/MDImage.js.map +1 -1
- package/dist/module/lib/Markdown.js +18 -12
- package/dist/module/lib/Markdown.js.map +1 -1
- package/dist/module/lib/Parser.js +39 -130
- package/dist/module/lib/Parser.js.map +1 -1
- package/dist/module/lib/Renderer.js +19 -13
- package/dist/module/lib/Renderer.js.map +1 -1
- package/dist/module/theme/colors.js +18 -0
- package/dist/module/theme/colors.js.map +1 -0
- package/dist/module/theme/styles.js +102 -0
- package/dist/module/theme/styles.js.map +1 -0
- package/dist/module/theme/theme.js +7 -0
- package/dist/module/theme/theme.js.map +1 -0
- package/dist/module/{types → theme}/types.js +0 -0
- package/dist/module/theme/types.js.map +1 -0
- package/dist/typescript/components/MDImage.d.ts +1 -2
- package/dist/typescript/lib/Markdown.d.ts +6 -5
- package/dist/typescript/lib/Parser.d.ts +7 -5
- package/dist/typescript/lib/Renderer.d.ts +6 -6
- package/dist/typescript/theme/colors.d.ts +3 -0
- package/dist/typescript/theme/styles.d.ts +4 -0
- package/dist/typescript/theme/theme.d.ts +3 -0
- package/dist/typescript/theme/types.d.ts +25 -0
- package/package.json +10 -5
- package/src/components/MDImage.tsx +5 -28
- package/src/lib/Markdown.tsx +28 -10
- package/src/lib/Parser.tsx +163 -0
- package/src/lib/Renderer.tsx +32 -13
- package/src/theme/colors.ts +20 -0
- package/src/theme/styles.ts +117 -0
- package/src/theme/theme.ts +9 -0
- package/src/theme/types.ts +28 -0
- package/dist/commonjs/types/types.js.map +0 -1
- package/dist/module/types/types.js.map +0 -1
- package/dist/typescript/types/types.d.ts +0 -23
- package/src/lib/Parser.ts +0 -256
- package/src/types/types.ts +0 -25
package/README.md
CHANGED
|
@@ -1,19 +1,31 @@
|
|
|
1
1
|
# react-native-marked
|
|
2
|
+
|
|
2
3
|
Markdown support for React Native
|
|
4
|
+
|
|
3
5
|
## Installation
|
|
4
6
|
|
|
5
7
|
```sh
|
|
6
|
-
|
|
8
|
+
yarn add react-native-marked
|
|
7
9
|
```
|
|
8
10
|
|
|
9
11
|
## Usage
|
|
10
12
|
|
|
11
|
-
```
|
|
12
|
-
import
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
```jsx
|
|
14
|
+
import * as React from 'react';
|
|
15
|
+
import Markdown from 'react-native-marked';
|
|
16
|
+
|
|
17
|
+
const ExampleComponent = () => {
|
|
18
|
+
return (
|
|
19
|
+
<Markdown
|
|
20
|
+
value={`#Hello world`}
|
|
21
|
+
flatListProps={{
|
|
22
|
+
initialNumToRender: 8,
|
|
23
|
+
}}
|
|
24
|
+
/>
|
|
25
|
+
);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export default ExampleComponent;
|
|
17
29
|
```
|
|
18
30
|
|
|
19
31
|
## Contributing
|
|
@@ -27,3 +39,7 @@ MIT
|
|
|
27
39
|
---
|
|
28
40
|
|
|
29
41
|
Made with [create-react-native-library](https://github.com/callstack/react-native-builder-bob)
|
|
42
|
+
|
|
43
|
+
## External Libraries
|
|
44
|
+
- [React Native Fit Image](https://github.com/huiseoul/react-native-fit-image)
|
|
45
|
+
- [@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
|
|
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
|
-
|
|
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
|
-
|
|
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","
|
|
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
|
|
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
|
-
|
|
28
|
-
|
|
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
|
-
|
|
39
|
+
const tokens = _marked.marked.lexer(value.trim());
|
|
32
40
|
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
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","
|
|
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, "
|
|
20
|
+
_defineProperty(this, "headingStylesMap", void 0);
|
|
23
21
|
|
|
22
|
+
this.styles = { ...options.styles
|
|
23
|
+
};
|
|
24
24
|
this.renderer = new _Renderer.default();
|
|
25
|
-
this.
|
|
26
|
-
|
|
27
|
-
|
|
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),
|
|
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,41 @@ class Parser {
|
|
|
58
56
|
});
|
|
59
57
|
|
|
60
58
|
if (tempTokens.length > 0) {
|
|
61
|
-
paragraphChildren.push(this.renderer.getTextNode(this.parseInline(tempTokens),
|
|
59
|
+
paragraphChildren.push(this.renderer.getTextNode(this.parseInline(tempTokens), {}));
|
|
62
60
|
}
|
|
63
61
|
|
|
64
|
-
return this.renderer.
|
|
62
|
+
return this.renderer.getViewNode(paragraphChildren, this.styles.paragraph);
|
|
65
63
|
}
|
|
66
64
|
|
|
67
65
|
case 'blockquote':
|
|
68
66
|
{
|
|
69
|
-
return this.renderer.
|
|
67
|
+
return this.renderer.getBlockquoteNode(this.parse(token.tokens), this.styles.blockquote);
|
|
70
68
|
}
|
|
71
69
|
|
|
72
70
|
case 'heading':
|
|
73
71
|
{
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
case 2:
|
|
79
|
-
return this.renderer.getHeading(token.text, this.styles.h2);
|
|
80
|
-
|
|
81
|
-
case 3:
|
|
82
|
-
return this.renderer.getHeading(token.text, this.styles.h3);
|
|
83
|
-
|
|
84
|
-
case 4:
|
|
85
|
-
return this.renderer.getHeading(token.text, this.styles.h4);
|
|
86
|
-
|
|
87
|
-
case 5:
|
|
88
|
-
return this.renderer.getHeading(token.text, this.styles.h5);
|
|
72
|
+
const styles = this.headingStylesMap[token.depth] ?? this.styles.text;
|
|
73
|
+
return this.renderer.getTextNode(token.text, styles);
|
|
74
|
+
}
|
|
89
75
|
|
|
90
|
-
|
|
91
|
-
|
|
76
|
+
case 'code':
|
|
77
|
+
{
|
|
78
|
+
return this.renderer.getCodeBlockNode(token.text, this.styles.code, this.styles.em);
|
|
79
|
+
}
|
|
92
80
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
81
|
+
case 'hr':
|
|
82
|
+
{
|
|
83
|
+
return this.renderer.getViewNode(null, this.styles.hr);
|
|
96
84
|
}
|
|
97
85
|
|
|
98
|
-
case '
|
|
86
|
+
case 'list':
|
|
99
87
|
{
|
|
100
|
-
|
|
88
|
+
const li = token.items.map(item => item.text);
|
|
89
|
+
return this.renderer.getListNode(token.ordered, li, this.styles.list, this.styles.li);
|
|
101
90
|
}
|
|
102
91
|
|
|
103
92
|
default:
|
|
93
|
+
console.warn(`Token with '${token.type}' type was not found.`);
|
|
104
94
|
return null;
|
|
105
95
|
}
|
|
106
96
|
});
|
|
@@ -108,14 +98,14 @@ class Parser {
|
|
|
108
98
|
}
|
|
109
99
|
|
|
110
100
|
parseInline(tokens) {
|
|
111
|
-
let
|
|
101
|
+
let styles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
112
102
|
const elements = tokens.map(token => {
|
|
113
103
|
if (!token) return null;
|
|
114
104
|
|
|
115
105
|
switch (token.type) {
|
|
116
106
|
case 'escape':
|
|
117
107
|
{
|
|
118
|
-
return this.renderer.getTextNode(token.text, [
|
|
108
|
+
return this.renderer.getTextNode(token.text, [styles, this.styles.text]);
|
|
119
109
|
}
|
|
120
110
|
|
|
121
111
|
case 'html':
|
|
@@ -126,27 +116,27 @@ class Parser {
|
|
|
126
116
|
|
|
127
117
|
case 'link':
|
|
128
118
|
{
|
|
129
|
-
return this.renderer.getLinkNode(token.text, token.href, [
|
|
119
|
+
return this.renderer.getLinkNode(token.text, token.href, [styles, this.styles.link]);
|
|
130
120
|
}
|
|
131
121
|
|
|
132
122
|
case 'image':
|
|
133
123
|
{
|
|
134
|
-
return this.renderer.
|
|
124
|
+
return this.renderer.getImageNode(token.href);
|
|
135
125
|
}
|
|
136
126
|
|
|
137
127
|
case 'strong':
|
|
138
128
|
{
|
|
139
|
-
return this.renderer.getTextNode(this.parseInline(token.tokens, this.styles.strong), [
|
|
129
|
+
return this.renderer.getTextNode(this.parseInline(token.tokens, this.styles.strong), [styles, this.styles.strong]);
|
|
140
130
|
}
|
|
141
131
|
|
|
142
132
|
case 'em':
|
|
143
133
|
{
|
|
144
|
-
return this.renderer.getTextNode(this.parseInline(token.tokens, this.styles.em), [
|
|
134
|
+
return this.renderer.getTextNode(this.parseInline(token.tokens, this.styles.em), [styles, this.styles.em]);
|
|
145
135
|
}
|
|
146
136
|
|
|
147
137
|
case 'codespan':
|
|
148
138
|
{
|
|
149
|
-
return this.renderer.getTextNode(
|
|
139
|
+
return this.renderer.getTextNode(token.text, this.styles.codespan);
|
|
150
140
|
}
|
|
151
141
|
|
|
152
142
|
case 'br':
|
|
@@ -161,13 +151,12 @@ class Parser {
|
|
|
161
151
|
|
|
162
152
|
case 'text':
|
|
163
153
|
{
|
|
164
|
-
return this.renderer.getTextNode(token.raw, [
|
|
154
|
+
return this.renderer.getTextNode(token.raw, [styles, this.styles.text]);
|
|
165
155
|
}
|
|
166
156
|
|
|
167
157
|
default:
|
|
168
158
|
{
|
|
169
|
-
|
|
170
|
-
console.error(errMsg);
|
|
159
|
+
console.warn(`Token with '${token.type}' type was not found.`);
|
|
171
160
|
return null;
|
|
172
161
|
}
|
|
173
162
|
}
|
|
@@ -175,89 +164,7 @@ class Parser {
|
|
|
175
164
|
return elements;
|
|
176
165
|
}
|
|
177
166
|
|
|
178
|
-
}
|
|
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
|
-
});
|
|
167
|
+
}
|
|
261
168
|
|
|
262
169
|
var _default = Parser;
|
|
263
170
|
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","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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"}
|
|
@@ -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
|
-
|
|
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
|
-
|
|
57
|
+
getCodeBlockNode(text, containerStyle, textStyle) {
|
|
52
58
|
return /*#__PURE__*/React.createElement(_reactNative.ScrollView, {
|
|
53
59
|
contentContainerStyle: containerStyle,
|
|
54
60
|
horizontal: true
|
|
@@ -57,28 +63,31 @@ class Renderer {
|
|
|
57
63
|
}, text));
|
|
58
64
|
}
|
|
59
65
|
|
|
60
|
-
|
|
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
|
-
|
|
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((text, index) => /*#__PURE__*/React.createElement(_reactNative.Text, {
|
|
86
|
+
key: index,
|
|
87
|
+
style: textStyle
|
|
88
|
+
}, text)));
|
|
89
|
+
}
|
|
90
|
+
|
|
82
91
|
}
|
|
83
92
|
|
|
84
93
|
var _default = Renderer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Renderer","href","Linking","openURL","children","styles","generateRandomString","text","onLinkPress","
|
|
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","index"],"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: string[],\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((text, index) => (\n <Text key={index} style={textStyle}>\n {text}\n </Text>\n ))}\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,CAAO,CAACf,IAAD,EAAOgB,KAAP,kBACN,oBAAC,iBAAD;MAAM,GAAG,EAAEA,KAAX;MAAkB,KAAK,EAAEX;IAAzB,GACGL,IADH,CADD,CALH,CADF;EAaD;;AAhFY;;eAmFAP,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"}
|