react-native-marked 3.0.0 → 4.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 +60 -9
- package/dist/commonjs/hooks/useMarkdown.js +40 -0
- package/dist/commonjs/hooks/useMarkdown.js.map +1 -0
- package/dist/commonjs/index.js +8 -0
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/lib/Markdown.js +12 -21
- package/dist/commonjs/lib/Markdown.js.map +1 -1
- package/dist/commonjs/theme/styles.js +0 -3
- package/dist/commonjs/theme/styles.js.map +1 -1
- package/dist/module/hooks/useMarkdown.js +25 -0
- package/dist/module/hooks/useMarkdown.js.map +1 -0
- package/dist/module/index.js +2 -1
- package/dist/module/index.js.map +1 -1
- package/dist/module/lib/Markdown.js +13 -19
- package/dist/module/lib/Markdown.js.map +1 -1
- package/dist/module/theme/styles.js +0 -3
- package/dist/module/theme/styles.js.map +1 -1
- package/dist/typescript/hooks/useMarkdown.d.ts +14 -0
- package/dist/typescript/hooks/useMarkdown.d.ts.map +1 -0
- package/dist/typescript/index.d.ts +3 -2
- package/dist/typescript/index.d.ts.map +1 -1
- package/dist/typescript/lib/Markdown.d.ts +1 -1
- package/dist/typescript/lib/Markdown.d.ts.map +1 -1
- package/dist/typescript/theme/styles.d.ts.map +1 -1
- package/dist/typescript/theme/types.d.ts +0 -1
- package/dist/typescript/theme/types.d.ts.map +1 -1
- package/package.json +16 -16
- package/src/hooks/useMarkdown.ts +45 -0
- package/src/index.ts +8 -2
- package/src/lib/Markdown.tsx +16 -25
- package/src/theme/styles.ts +0 -3
- package/src/theme/types.ts +0 -1
package/README.md
CHANGED
|
@@ -17,6 +17,8 @@ yarn add react-native-marked
|
|
|
17
17
|
|
|
18
18
|
## Usage
|
|
19
19
|
|
|
20
|
+
### Using Component
|
|
21
|
+
|
|
20
22
|
```tsx
|
|
21
23
|
import * as React from "react";
|
|
22
24
|
import Markdown from "react-native-marked";
|
|
@@ -35,11 +37,7 @@ const ExampleComponent = () => {
|
|
|
35
37
|
export default ExampleComponent;
|
|
36
38
|
```
|
|
37
39
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
- RN App: https://github.com/gmsgowtham/react-native-marked-test
|
|
41
|
-
|
|
42
|
-
## [Props](https://github.com/gmsgowtham/react-native-marked/blob/main/src/lib/types.ts#L9)
|
|
40
|
+
#### [Props](https://github.com/gmsgowtham/react-native-marked/blob/main/src/lib/types.ts#L9)
|
|
43
41
|
|
|
44
42
|
| Prop | Description | Type | Optional? |
|
|
45
43
|
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------- |
|
|
@@ -50,6 +48,46 @@ export default ExampleComponent;
|
|
|
50
48
|
| baseUrl | A prefix url for any relative link | string | true |
|
|
51
49
|
| renderer | Custom component Renderer | [RendererInterface](https://github.com/gmsgowtham/react-native-marked/blob/main/src/lib/types.ts#L25) | true |
|
|
52
50
|
|
|
51
|
+
|
|
52
|
+
### Using hook
|
|
53
|
+
|
|
54
|
+
`useMarkdown` hook will return list of elements that can be rendered using a list component of your choice.
|
|
55
|
+
|
|
56
|
+
```tsx
|
|
57
|
+
import React, { Fragment } from "react";
|
|
58
|
+
import { ScrollView, useColorScheme } from "react-native";
|
|
59
|
+
import { useMarkdown, type useMarkdownHookOptions } from "react-native-marked";
|
|
60
|
+
|
|
61
|
+
const CustomComponent = () => {
|
|
62
|
+
const colorScheme = useColorScheme();
|
|
63
|
+
const options: useMarkdownHookOptions = {
|
|
64
|
+
colorScheme
|
|
65
|
+
}
|
|
66
|
+
const elements = useMarkdown("# Hello world", options);
|
|
67
|
+
return (
|
|
68
|
+
<ScrollView>
|
|
69
|
+
{elements.map((element, index) => {
|
|
70
|
+
return <Fragment key={`demo_${index}`}>{element}</Fragment>
|
|
71
|
+
})}
|
|
72
|
+
</ScrollView>
|
|
73
|
+
);
|
|
74
|
+
};
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
#### Options
|
|
78
|
+
|
|
79
|
+
| Option | Description | Type | Optional? |
|
|
80
|
+
| ----------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | --------- |
|
|
81
|
+
| colorScheme | Device color scheme ("dark" or "light") | ColorSchemeName | false |
|
|
82
|
+
| styles | Styles for parsed components | [MarkedStyles](https://github.com/gmsgowtham/react-native-marked/blob/main/src/theme/types.ts#L5) | true |
|
|
83
|
+
| theme | Props for customizing colors and spacing for all components,and it will get overridden with custom component style applied via 'styles' prop | [UserTheme](https://github.com/gmsgowtham/react-native-marked/blob/main/src/theme/types.ts#L28) | true |
|
|
84
|
+
| baseUrl | A prefix url for any relative link | string | true |
|
|
85
|
+
| renderer | Custom component Renderer | [RendererInterface](https://github.com/gmsgowtham/react-native-marked/blob/main/src/lib/types.ts#L25) | true |
|
|
86
|
+
|
|
87
|
+
## Examples
|
|
88
|
+
|
|
89
|
+
- RN App: https://github.com/gmsgowtham/react-native-marked-test
|
|
90
|
+
|
|
53
91
|
## Supported elements
|
|
54
92
|
|
|
55
93
|
- [x] Headings (1 to 6)
|
|
@@ -67,15 +105,15 @@ export default ExampleComponent;
|
|
|
67
105
|
|
|
68
106
|
Ref: [CommonMark](https://commonmark.org/help/)
|
|
69
107
|
|
|
70
|
-
> HTML will be treated as plain text
|
|
108
|
+
> HTML will be treated as plain text. Please refer [issue#290](https://github.com/gmsgowtham/react-native-marked/issues/290) for a potential solution
|
|
71
109
|
|
|
72
110
|
## Using custom components
|
|
73
111
|
|
|
74
112
|
```tsx
|
|
75
|
-
import React, { ReactNode } from "react";
|
|
76
|
-
import { Text } from "react-native";
|
|
113
|
+
import React, { ReactNode, Fragment } from "react";
|
|
114
|
+
import { Text, ScrollView } from "react-native";
|
|
77
115
|
import type { ImageStyle, TextStyle } from "react-native";
|
|
78
|
-
import Markdown, { Renderer } from "react-native-marked";
|
|
116
|
+
import Markdown, { Renderer, useMarkdown } from "react-native-marked";
|
|
79
117
|
import type { RendererInterface } from "react-native-marked";
|
|
80
118
|
import FastImage from "react-native-fast-image";
|
|
81
119
|
|
|
@@ -118,6 +156,19 @@ const ExampleComponent = () => {
|
|
|
118
156
|
);
|
|
119
157
|
};
|
|
120
158
|
|
|
159
|
+
// Alternate using hook
|
|
160
|
+
const ExampleComponentWithHook = () => {
|
|
161
|
+
const elements = useMarkdown("`Hello world`", { renderer });
|
|
162
|
+
|
|
163
|
+
return (
|
|
164
|
+
<ScrollView>
|
|
165
|
+
{elements.map((element, index) => {
|
|
166
|
+
return <Fragment key={`demo_${index}`}>{element}</Fragment>
|
|
167
|
+
})}
|
|
168
|
+
</ScrollView>
|
|
169
|
+
)
|
|
170
|
+
}
|
|
171
|
+
|
|
121
172
|
export default ExampleComponent;
|
|
122
173
|
```
|
|
123
174
|
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _marked = require("marked");
|
|
11
|
+
|
|
12
|
+
var _Parser = _interopRequireDefault(require("../lib/Parser"));
|
|
13
|
+
|
|
14
|
+
var _Renderer = _interopRequireDefault(require("../lib/Renderer"));
|
|
15
|
+
|
|
16
|
+
var _styles = _interopRequireDefault(require("./../theme/styles"));
|
|
17
|
+
|
|
18
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
+
|
|
20
|
+
const useMarkdown = (value, options) => {
|
|
21
|
+
const styles = (0, _react.useMemo)(() => (0, _styles.default)(options === null || options === void 0 ? void 0 : options.styles, options === null || options === void 0 ? void 0 : options.colorScheme, options === null || options === void 0 ? void 0 : options.theme), [options === null || options === void 0 ? void 0 : options.styles, options === null || options === void 0 ? void 0 : options.theme, options === null || options === void 0 ? void 0 : options.colorScheme]);
|
|
22
|
+
const parser = (0, _react.useMemo)(() => new _Parser.default({
|
|
23
|
+
styles: styles,
|
|
24
|
+
baseUrl: options === null || options === void 0 ? void 0 : options.baseUrl,
|
|
25
|
+
renderer: (options === null || options === void 0 ? void 0 : options.renderer) ?? new _Renderer.default()
|
|
26
|
+
}), [options === null || options === void 0 ? void 0 : options.renderer, options === null || options === void 0 ? void 0 : options.baseUrl, styles]);
|
|
27
|
+
const elements = (0, _react.useMemo)(() => {
|
|
28
|
+
const tokens = _marked.marked.lexer(value, {
|
|
29
|
+
mangle: false,
|
|
30
|
+
gfm: true
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
return parser.parse(tokens);
|
|
34
|
+
}, [value, parser]);
|
|
35
|
+
return elements;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
var _default = useMarkdown;
|
|
39
|
+
exports.default = _default;
|
|
40
|
+
//# sourceMappingURL=useMarkdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMarkdown","value","options","styles","useMemo","getStyles","colorScheme","theme","parser","Parser","baseUrl","renderer","Renderer","elements","tokens","marked","lexer","mangle","gfm","parse"],"sourceRoot":"../../../src","sources":["hooks/useMarkdown.ts"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;AACA;;AACA;;;;AAYA,MAAMA,WAAW,GAAG,CACnBC,KADmB,EAEnBC,OAFmB,KAGF;EACjB,MAAMC,MAAM,GAAG,IAAAC,cAAA,EACd,MAAM,IAAAC,eAAA,EAAUH,OAAV,aAAUA,OAAV,uBAAUA,OAAO,CAAEC,MAAnB,EAA2BD,OAA3B,aAA2BA,OAA3B,uBAA2BA,OAAO,CAAEI,WAApC,EAAiDJ,OAAjD,aAAiDA,OAAjD,uBAAiDA,OAAO,CAAEK,KAA1D,CADQ,EAEd,CAACL,OAAD,aAACA,OAAD,uBAACA,OAAO,CAAEC,MAAV,EAAkBD,OAAlB,aAAkBA,OAAlB,uBAAkBA,OAAO,CAAEK,KAA3B,EAAkCL,OAAlC,aAAkCA,OAAlC,uBAAkCA,OAAO,CAAEI,WAA3C,CAFc,CAAf;EAKA,MAAME,MAAM,GAAG,IAAAJ,cAAA,EACd,MACC,IAAIK,eAAJ,CAAW;IACVN,MAAM,EAAEA,MADE;IAEVO,OAAO,EAAER,OAAF,aAAEA,OAAF,uBAAEA,OAAO,CAAEQ,OAFR;IAGVC,QAAQ,EAAE,CAAAT,OAAO,SAAP,IAAAA,OAAO,WAAP,YAAAA,OAAO,CAAES,QAAT,KAAqB,IAAIC,iBAAJ;EAHrB,CAAX,CAFa,EAOd,CAACV,OAAD,aAACA,OAAD,uBAACA,OAAO,CAAES,QAAV,EAAoBT,OAApB,aAAoBA,OAApB,uBAAoBA,OAAO,CAAEQ,OAA7B,EAAsCP,MAAtC,CAPc,CAAf;EAUA,MAAMU,QAAQ,GAAG,IAAAT,cAAA,EAAQ,MAAM;IAC9B,MAAMU,MAAM,GAAGC,cAAA,CAAOC,KAAP,CAAaf,KAAb,EAAoB;MAAEgB,MAAM,EAAE,KAAV;MAAiBC,GAAG,EAAE;IAAtB,CAApB,CAAf;;IACA,OAAOV,MAAM,CAACW,KAAP,CAAaL,MAAb,CAAP;EACA,CAHgB,EAGd,CAACb,KAAD,EAAQO,MAAR,CAHc,CAAjB;EAKA,OAAOK,QAAP;AACA,CAzBD;;eA2Beb,W"}
|
package/dist/commonjs/index.js
CHANGED
|
@@ -10,11 +10,19 @@ Object.defineProperty(exports, "Renderer", {
|
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
12
|
exports.default = void 0;
|
|
13
|
+
Object.defineProperty(exports, "useMarkdown", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () {
|
|
16
|
+
return _useMarkdown.default;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
13
19
|
|
|
14
20
|
var _Markdown = _interopRequireDefault(require("./lib/Markdown"));
|
|
15
21
|
|
|
16
22
|
var _Renderer = _interopRequireDefault(require("./lib/Renderer"));
|
|
17
23
|
|
|
24
|
+
var _useMarkdown = _interopRequireDefault(require("./hooks/useMarkdown"));
|
|
25
|
+
|
|
18
26
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
27
|
|
|
20
28
|
var _default = _Markdown.default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Markdown"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"names":["Markdown"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;eAceA,iB"}
|
|
@@ -9,13 +9,9 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
9
9
|
|
|
10
10
|
var _reactNative = require("react-native");
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _useMarkdown = _interopRequireDefault(require("../hooks/useMarkdown"));
|
|
13
13
|
|
|
14
|
-
var
|
|
15
|
-
|
|
16
|
-
var _Renderer = _interopRequireDefault(require("./Renderer"));
|
|
17
|
-
|
|
18
|
-
var _styles = _interopRequireDefault(require("../theme/styles"));
|
|
14
|
+
var _colors = _interopRequireDefault(require("../theme/colors"));
|
|
19
15
|
|
|
20
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
17
|
|
|
@@ -32,23 +28,16 @@ const Markdown = _ref => {
|
|
|
32
28
|
theme,
|
|
33
29
|
baseUrl,
|
|
34
30
|
renderer,
|
|
35
|
-
styles
|
|
31
|
+
styles
|
|
36
32
|
} = _ref;
|
|
37
33
|
const colorScheme = (0, _reactNative.useColorScheme)();
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
styles,
|
|
34
|
+
const rnElements = (0, _useMarkdown.default)(value, {
|
|
35
|
+
theme,
|
|
41
36
|
baseUrl,
|
|
42
|
-
renderer
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
mangle: false,
|
|
47
|
-
gfm: true
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
return parser.parse(tokens);
|
|
51
|
-
}, [value, styles, baseUrl]);
|
|
37
|
+
renderer,
|
|
38
|
+
colorScheme,
|
|
39
|
+
styles
|
|
40
|
+
});
|
|
52
41
|
const renderItem = (0, _react.useCallback)(_ref2 => {
|
|
53
42
|
let {
|
|
54
43
|
item
|
|
@@ -61,7 +50,9 @@ const Markdown = _ref => {
|
|
|
61
50
|
keyExtractor: keyExtractor,
|
|
62
51
|
maxToRenderPerBatch: 8,
|
|
63
52
|
initialNumToRender: 8,
|
|
64
|
-
style:
|
|
53
|
+
style: {
|
|
54
|
+
backgroundColor: colorScheme === "light" ? _colors.default.light.background : _colors.default.dark.background
|
|
55
|
+
}
|
|
65
56
|
}, flatListProps, {
|
|
66
57
|
data: rnElements,
|
|
67
58
|
renderItem: renderItem
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Markdown","value","flatListProps","theme","baseUrl","renderer","styles","
|
|
1
|
+
{"version":3,"names":["Markdown","value","flatListProps","theme","baseUrl","renderer","styles","colorScheme","useColorScheme","rnElements","useMarkdown","renderItem","useCallback","item","keyExtractor","_","index","toString","backgroundColor","colors","light","background","dark","memo"],"sourceRoot":"../../../src","sources":["lib/Markdown.tsx"],"mappings":";;;;;;;AAAA;;AAMA;;AAEA;;AACA;;;;;;;;;;AAEA,MAAMA,QAAQ,GAAG,QAOI;EAAA,IAPH;IACjBC,KADiB;IAEjBC,aAFiB;IAGjBC,KAHiB;IAIjBC,OAJiB;IAKjBC,QALiB;IAMjBC;EANiB,CAOG;EACpB,MAAMC,WAAW,GAAG,IAAAC,2BAAA,GAApB;EAEA,MAAMC,UAAU,GAAG,IAAAC,oBAAA,EAAYT,KAAZ,EAAmB;IACrCE,KADqC;IAErCC,OAFqC;IAGrCC,QAHqC;IAIrCE,WAJqC;IAKrCD;EALqC,CAAnB,CAAnB;EAQA,MAAMK,UAAU,GAAG,IAAAC,kBAAA,EAAY,SAAmC;IAAA,IAAlC;MAAEC;IAAF,CAAkC;IACjE,OAAOA,IAAP;EACA,CAFkB,EAEhB,EAFgB,CAAnB;EAIA,MAAMC,YAAY,GAAG,IAAAF,kBAAA,EACpB,CAACG,CAAD,EAAeC,KAAf,KAAiCA,KAAK,CAACC,QAAN,EADb,EAEpB,EAFoB,CAArB;EAKA,oBACC,6BAAC,qBAAD;IACC,qBAAqB,MADtB;IAEC,YAAY,EAAEH,YAFf;IAGC,mBAAmB,EAAE,CAHtB;IAIC,kBAAkB,EAAE,CAJrB;IAKC,KAAK,EAAE;MACNI,eAAe,EACdX,WAAW,KAAK,OAAhB,GACGY,eAAA,CAAOC,KAAP,CAAaC,UADhB,GAEGF,eAAA,CAAOG,IAAP,CAAYD;IAJV;EALR,GAWKnB,aAXL;IAYC,IAAI,EAAEO,UAZP;IAaC,UAAU,EAAEE;EAbb,GADD;AAiBA,CA5CD;;4BA8Ce,IAAAY,WAAA,EAAKvB,QAAL,C"}
|
|
@@ -37,9 +37,6 @@ const getStyles = (userStyles, colorScheme, userTheme) => {
|
|
|
37
37
|
const fontStyle = getFontStyles(mdColors);
|
|
38
38
|
|
|
39
39
|
const defaultStyles = _reactNative.StyleSheet.create({
|
|
40
|
-
container: {
|
|
41
|
-
backgroundColor: mdColors.background
|
|
42
|
-
},
|
|
43
40
|
em: { ...fontStyle.regular,
|
|
44
41
|
fontStyle: "italic"
|
|
45
42
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getFontStyles","mdColors","StyleSheet","create","regular","fontSize","lineHeight","color","text","heading","fontWeight","getStyles","userStyles","colorScheme","userTheme","colors","mdSpacing","spacing","fontStyle","defaultStyles","
|
|
1
|
+
{"version":3,"names":["getFontStyles","mdColors","StyleSheet","create","regular","fontSize","lineHeight","color","text","heading","fontWeight","getStyles","userStyles","colorScheme","userTheme","colors","mdSpacing","spacing","fontStyle","defaultStyles","em","strong","strikethrough","textDecorationLine","textDecorationStyle","paragraph","paddingVertical","m","link","blockquote","borderLeftColor","border","paddingLeft","l","borderLeftWidth","s","opacity","h1","marginVertical","letterSpacing","paddingBottom","borderBottomColor","borderBottomWidth","h2","h3","h4","h5","xs","h6","codespan","backgroundColor","code","padding","minWidth","hr","li","flexShrink","image","resizeMode","table","borderWidth","borderColor","tableRow","flexDirection","tableCell"],"sourceRoot":"../../../src","sources":["theme/styles.ts"],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { useMemo } from "react";
|
|
2
|
+
import { marked } from "marked";
|
|
3
|
+
import Parser from "../lib/Parser";
|
|
4
|
+
import Renderer from "../lib/Renderer";
|
|
5
|
+
import getStyles from "./../theme/styles";
|
|
6
|
+
|
|
7
|
+
const useMarkdown = (value, options) => {
|
|
8
|
+
const styles = useMemo(() => getStyles(options === null || options === void 0 ? void 0 : options.styles, options === null || options === void 0 ? void 0 : options.colorScheme, options === null || options === void 0 ? void 0 : options.theme), [options === null || options === void 0 ? void 0 : options.styles, options === null || options === void 0 ? void 0 : options.theme, options === null || options === void 0 ? void 0 : options.colorScheme]);
|
|
9
|
+
const parser = useMemo(() => new Parser({
|
|
10
|
+
styles: styles,
|
|
11
|
+
baseUrl: options === null || options === void 0 ? void 0 : options.baseUrl,
|
|
12
|
+
renderer: (options === null || options === void 0 ? void 0 : options.renderer) ?? new Renderer()
|
|
13
|
+
}), [options === null || options === void 0 ? void 0 : options.renderer, options === null || options === void 0 ? void 0 : options.baseUrl, styles]);
|
|
14
|
+
const elements = useMemo(() => {
|
|
15
|
+
const tokens = marked.lexer(value, {
|
|
16
|
+
mangle: false,
|
|
17
|
+
gfm: true
|
|
18
|
+
});
|
|
19
|
+
return parser.parse(tokens);
|
|
20
|
+
}, [value, parser]);
|
|
21
|
+
return elements;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export default useMarkdown;
|
|
25
|
+
//# sourceMappingURL=useMarkdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMemo","marked","Parser","Renderer","getStyles","useMarkdown","value","options","styles","colorScheme","theme","parser","baseUrl","renderer","elements","tokens","lexer","mangle","gfm","parse"],"sourceRoot":"../../../src","sources":["hooks/useMarkdown.ts"],"mappings":"AAAA,SAASA,OAAT,QAAwC,OAAxC;AACA,SAASC,MAAT,QAAuB,QAAvB;AAEA,OAAOC,MAAP,MAAmB,eAAnB;AACA,OAAOC,QAAP,MAAqB,iBAArB;AACA,OAAOC,SAAP,MAAsB,mBAAtB;;AAYA,MAAMC,WAAW,GAAG,CACnBC,KADmB,EAEnBC,OAFmB,KAGF;EACjB,MAAMC,MAAM,GAAGR,OAAO,CACrB,MAAMI,SAAS,CAACG,OAAD,aAACA,OAAD,uBAACA,OAAO,CAAEC,MAAV,EAAkBD,OAAlB,aAAkBA,OAAlB,uBAAkBA,OAAO,CAAEE,WAA3B,EAAwCF,OAAxC,aAAwCA,OAAxC,uBAAwCA,OAAO,CAAEG,KAAjD,CADM,EAErB,CAACH,OAAD,aAACA,OAAD,uBAACA,OAAO,CAAEC,MAAV,EAAkBD,OAAlB,aAAkBA,OAAlB,uBAAkBA,OAAO,CAAEG,KAA3B,EAAkCH,OAAlC,aAAkCA,OAAlC,uBAAkCA,OAAO,CAAEE,WAA3C,CAFqB,CAAtB;EAKA,MAAME,MAAM,GAAGX,OAAO,CACrB,MACC,IAAIE,MAAJ,CAAW;IACVM,MAAM,EAAEA,MADE;IAEVI,OAAO,EAAEL,OAAF,aAAEA,OAAF,uBAAEA,OAAO,CAAEK,OAFR;IAGVC,QAAQ,EAAE,CAAAN,OAAO,SAAP,IAAAA,OAAO,WAAP,YAAAA,OAAO,CAAEM,QAAT,KAAqB,IAAIV,QAAJ;EAHrB,CAAX,CAFoB,EAOrB,CAACI,OAAD,aAACA,OAAD,uBAACA,OAAO,CAAEM,QAAV,EAAoBN,OAApB,aAAoBA,OAApB,uBAAoBA,OAAO,CAAEK,OAA7B,EAAsCJ,MAAtC,CAPqB,CAAtB;EAUA,MAAMM,QAAQ,GAAGd,OAAO,CAAC,MAAM;IAC9B,MAAMe,MAAM,GAAGd,MAAM,CAACe,KAAP,CAAaV,KAAb,EAAoB;MAAEW,MAAM,EAAE,KAAV;MAAiBC,GAAG,EAAE;IAAtB,CAApB,CAAf;IACA,OAAOP,MAAM,CAACQ,KAAP,CAAaJ,MAAb,CAAP;EACA,CAHuB,EAGrB,CAACT,KAAD,EAAQK,MAAR,CAHqB,CAAxB;EAKA,OAAOG,QAAP;AACA,CAzBD;;AA2BA,eAAeT,WAAf"}
|
package/dist/module/index.js
CHANGED
package/dist/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Markdown","Renderer"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA,OAAOA,QAAP,MAAqB,gBAArB;AACA,OAAOC,QAAP,MAAqB,gBAArB;
|
|
1
|
+
{"version":3,"names":["Markdown","Renderer","useMarkdown"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA,OAAOA,QAAP,MAAqB,gBAArB;AACA,OAAOC,QAAP,MAAqB,gBAArB;AACA,OAAOC,WAAP,MAAyD,qBAAzD;AAaA,SAASD,QAAT,EAAmBC,WAAnB;AACA,eAAeF,QAAf"}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
2
|
|
|
3
|
-
import React, { memo, useCallback
|
|
3
|
+
import React, { memo, useCallback } from "react";
|
|
4
4
|
import { FlatList, useColorScheme } from "react-native";
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import Renderer from "./Renderer";
|
|
8
|
-
import getStyles from "../theme/styles";
|
|
5
|
+
import useMarkdown from "../hooks/useMarkdown";
|
|
6
|
+
import colors from "../theme/colors";
|
|
9
7
|
|
|
10
8
|
const Markdown = _ref => {
|
|
11
9
|
let {
|
|
@@ -14,22 +12,16 @@ const Markdown = _ref => {
|
|
|
14
12
|
theme,
|
|
15
13
|
baseUrl,
|
|
16
14
|
renderer,
|
|
17
|
-
styles
|
|
15
|
+
styles
|
|
18
16
|
} = _ref;
|
|
19
17
|
const colorScheme = useColorScheme();
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
styles,
|
|
18
|
+
const rnElements = useMarkdown(value, {
|
|
19
|
+
theme,
|
|
23
20
|
baseUrl,
|
|
24
|
-
renderer
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
mangle: false,
|
|
29
|
-
gfm: true
|
|
30
|
-
});
|
|
31
|
-
return parser.parse(tokens);
|
|
32
|
-
}, [value, styles, baseUrl]);
|
|
21
|
+
renderer,
|
|
22
|
+
colorScheme,
|
|
23
|
+
styles
|
|
24
|
+
});
|
|
33
25
|
const renderItem = useCallback(_ref2 => {
|
|
34
26
|
let {
|
|
35
27
|
item
|
|
@@ -42,7 +34,9 @@ const Markdown = _ref => {
|
|
|
42
34
|
keyExtractor: keyExtractor,
|
|
43
35
|
maxToRenderPerBatch: 8,
|
|
44
36
|
initialNumToRender: 8,
|
|
45
|
-
style:
|
|
37
|
+
style: {
|
|
38
|
+
backgroundColor: colorScheme === "light" ? colors.light.background : colors.dark.background
|
|
39
|
+
}
|
|
46
40
|
}, flatListProps, {
|
|
47
41
|
data: rnElements,
|
|
48
42
|
renderItem: renderItem
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","memo","useCallback","
|
|
1
|
+
{"version":3,"names":["React","memo","useCallback","FlatList","useColorScheme","useMarkdown","colors","Markdown","value","flatListProps","theme","baseUrl","renderer","styles","colorScheme","rnElements","renderItem","item","keyExtractor","_","index","toString","backgroundColor","light","background","dark"],"sourceRoot":"../../../src","sources":["lib/Markdown.tsx"],"mappings":";;AAAA,OAAOA,KAAP,IACCC,IADD,EAECC,WAFD,QAKO,OALP;AAMA,SAASC,QAAT,EAAmBC,cAAnB,QAAyC,cAAzC;AAEA,OAAOC,WAAP,MAAwB,sBAAxB;AACA,OAAOC,MAAP,MAAmB,iBAAnB;;AAEA,MAAMC,QAAQ,GAAG,QAOI;EAAA,IAPH;IACjBC,KADiB;IAEjBC,aAFiB;IAGjBC,KAHiB;IAIjBC,OAJiB;IAKjBC,QALiB;IAMjBC;EANiB,CAOG;EACpB,MAAMC,WAAW,GAAGV,cAAc,EAAlC;EAEA,MAAMW,UAAU,GAAGV,WAAW,CAACG,KAAD,EAAQ;IACrCE,KADqC;IAErCC,OAFqC;IAGrCC,QAHqC;IAIrCE,WAJqC;IAKrCD;EALqC,CAAR,CAA9B;EAQA,MAAMG,UAAU,GAAGd,WAAW,CAAC,SAAmC;IAAA,IAAlC;MAAEe;IAAF,CAAkC;IACjE,OAAOA,IAAP;EACA,CAF6B,EAE3B,EAF2B,CAA9B;EAIA,MAAMC,YAAY,GAAGhB,WAAW,CAC/B,CAACiB,CAAD,EAAeC,KAAf,KAAiCA,KAAK,CAACC,QAAN,EADF,EAE/B,EAF+B,CAAhC;EAKA,oBACC,oBAAC,QAAD;IACC,qBAAqB,MADtB;IAEC,YAAY,EAAEH,YAFf;IAGC,mBAAmB,EAAE,CAHtB;IAIC,kBAAkB,EAAE,CAJrB;IAKC,KAAK,EAAE;MACNI,eAAe,EACdR,WAAW,KAAK,OAAhB,GACGR,MAAM,CAACiB,KAAP,CAAaC,UADhB,GAEGlB,MAAM,CAACmB,IAAP,CAAYD;IAJV;EALR,GAWKf,aAXL;IAYC,IAAI,EAAEM,UAZP;IAaC,UAAU,EAAEC;EAbb,GADD;AAiBA,CA5CD;;AA8CA,4BAAef,IAAI,CAACM,QAAD,CAAnB"}
|
|
@@ -25,9 +25,6 @@ const getStyles = (userStyles, colorScheme, userTheme) => {
|
|
|
25
25
|
};
|
|
26
26
|
const fontStyle = getFontStyles(mdColors);
|
|
27
27
|
const defaultStyles = StyleSheet.create({
|
|
28
|
-
container: {
|
|
29
|
-
backgroundColor: mdColors.background
|
|
30
|
-
},
|
|
31
28
|
em: { ...fontStyle.regular,
|
|
32
29
|
fontStyle: "italic"
|
|
33
30
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["StyleSheet","spacing","colors","getFontStyles","mdColors","create","regular","fontSize","lineHeight","color","text","heading","fontWeight","getStyles","userStyles","colorScheme","userTheme","mdSpacing","fontStyle","defaultStyles","
|
|
1
|
+
{"version":3,"names":["StyleSheet","spacing","colors","getFontStyles","mdColors","create","regular","fontSize","lineHeight","color","text","heading","fontWeight","getStyles","userStyles","colorScheme","userTheme","mdSpacing","fontStyle","defaultStyles","em","strong","strikethrough","textDecorationLine","textDecorationStyle","paragraph","paddingVertical","m","link","blockquote","borderLeftColor","border","paddingLeft","l","borderLeftWidth","s","opacity","h1","marginVertical","letterSpacing","paddingBottom","borderBottomColor","borderBottomWidth","h2","h3","h4","h5","xs","h6","codespan","backgroundColor","code","padding","minWidth","hr","li","flexShrink","image","resizeMode","table","borderWidth","borderColor","tableRow","flexDirection","tableCell"],"sourceRoot":"../../../src","sources":["theme/styles.ts"],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import type { MarkedStyles, UserTheme } from "./../theme/types";
|
|
3
|
+
import { type ColorSchemeName } from "react-native";
|
|
4
|
+
import type { RendererInterface } from "../lib/types";
|
|
5
|
+
export interface useMarkdownHookOptions {
|
|
6
|
+
colorScheme?: ColorSchemeName;
|
|
7
|
+
renderer?: RendererInterface;
|
|
8
|
+
theme?: UserTheme;
|
|
9
|
+
styles?: MarkedStyles;
|
|
10
|
+
baseUrl?: string;
|
|
11
|
+
}
|
|
12
|
+
declare const useMarkdown: (value: string, options?: useMarkdownHookOptions) => ReactNode[];
|
|
13
|
+
export default useMarkdown;
|
|
14
|
+
//# sourceMappingURL=useMarkdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMarkdown.d.ts","sourceRoot":"","sources":["../../../src/hooks/useMarkdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAIhE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,WAAW,sBAAsB;IACtC,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,QAAA,MAAM,WAAW,UACT,MAAM,YACH,sBAAsB,KAC9B,SAAS,EAsBX,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import Markdown from "./lib/Markdown";
|
|
2
2
|
import Renderer from "./lib/Renderer";
|
|
3
|
+
import useMarkdown, { type useMarkdownHookOptions } from "./hooks/useMarkdown";
|
|
3
4
|
import type { MarkdownProps, ParserOptions, RendererInterface } from "./lib/types";
|
|
4
|
-
export type { MarkdownProps, ParserOptions, RendererInterface };
|
|
5
|
-
export { Renderer };
|
|
5
|
+
export type { MarkdownProps, ParserOptions, RendererInterface, useMarkdownHookOptions, };
|
|
6
|
+
export { Renderer, useMarkdown };
|
|
6
7
|
export default Markdown;
|
|
7
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EACX,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,MAAM,aAAa,CAAC;AAErB,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,WAAW,EAAE,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EACX,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,MAAM,aAAa,CAAC;AAErB,YAAY,EACX,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,sBAAsB,GACtB,CAAC;AACF,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AACjC,eAAe,QAAQ,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import type { MarkdownProps } from "./types";
|
|
3
|
-
declare const _default: React.MemoExoticComponent<({ value, flatListProps, theme, baseUrl, renderer, styles
|
|
3
|
+
declare const _default: React.MemoExoticComponent<({ value, flatListProps, theme, baseUrl, renderer, styles, }: MarkdownProps) => JSX.Element>;
|
|
4
4
|
export default _default;
|
|
5
5
|
//# sourceMappingURL=Markdown.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Markdown.d.ts","sourceRoot":"","sources":["../../../src/lib/Markdown.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Markdown.d.ts","sourceRoot":"","sources":["../../../src/lib/Markdown.tsx"],"names":[],"mappings":"AAAA,OAAO,KAKN,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;;AAkD7C,wBAA8B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/theme/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAGhE,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAgBvD,QAAA,MAAM,SAAS,gBACD,YAAY,gBACX,eAAe,cACjB,SAAS,KACnB,
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/theme/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAGhE,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAgBvD,QAAA,MAAM,SAAS,gBACD,YAAY,gBACX,eAAe,cACjB,SAAS,KACnB,YAsHF,CAAC;AAEF,eAAe,SAAS,CAAC"}
|
|
@@ -2,7 +2,6 @@ import type { ImageStyle, TextStyle, ViewStyle } from "react-native";
|
|
|
2
2
|
import type { ColorKeysType } from "./colors";
|
|
3
3
|
import type { SpacingKeysType } from "./spacing";
|
|
4
4
|
export interface MarkedStyles {
|
|
5
|
-
container?: ViewStyle;
|
|
6
5
|
em?: TextStyle;
|
|
7
6
|
strong?: TextStyle;
|
|
8
7
|
strikethrough?: TextStyle;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/theme/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,WAAW,YAAY;IAC5B,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/theme/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,WAAW,YAAY;IAC5B,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,EAAE,CAAC,EAAE,SAAS,CAAC;IACf,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;CAC1C"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-marked",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"description": "Markdown renderer for React Native powered by marked.js",
|
|
5
5
|
"main": "dist/commonjs/index",
|
|
6
6
|
"module": "dist/module/index",
|
|
@@ -49,32 +49,32 @@
|
|
|
49
49
|
"registry": "https://registry.npmjs.org/"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@babel/core": "7.21.
|
|
53
|
-
"@babel/preset-env": "7.21.
|
|
54
|
-
"@commitlint/config-conventional": "17.
|
|
55
|
-
"@evilmartians/lefthook": "1.3.
|
|
52
|
+
"@babel/core": "7.21.8",
|
|
53
|
+
"@babel/preset-env": "7.21.5",
|
|
54
|
+
"@commitlint/config-conventional": "17.6.1",
|
|
55
|
+
"@evilmartians/lefthook": "1.3.12",
|
|
56
56
|
"@release-it/conventional-changelog": "5.1.1",
|
|
57
57
|
"@testing-library/jest-native": "5.4.2",
|
|
58
|
-
"@testing-library/react-native": "12.
|
|
59
|
-
"@types/jest": "29.5.
|
|
58
|
+
"@testing-library/react-native": "12.1.1",
|
|
59
|
+
"@types/jest": "29.5.1",
|
|
60
60
|
"@types/marked": "4.0.8",
|
|
61
|
-
"@types/node": "18.
|
|
62
|
-
"@types/react": "18.0
|
|
63
|
-
"@types/react-native": "0.71.
|
|
61
|
+
"@types/node": "18.16.3",
|
|
62
|
+
"@types/react": "18.2.0",
|
|
63
|
+
"@types/react-native": "0.71.6",
|
|
64
64
|
"@types/react-native-table-component": "1.2.4",
|
|
65
|
-
"commitlint": "17.
|
|
66
|
-
"danger": "11.2.
|
|
65
|
+
"commitlint": "17.6.1",
|
|
66
|
+
"danger": "11.2.6",
|
|
67
67
|
"jest": "29.5.0",
|
|
68
68
|
"jest-environment-jsdom": "29.5.0",
|
|
69
|
-
"metro-react-native-babel-preset": "0.76.
|
|
69
|
+
"metro-react-native-babel-preset": "0.76.3",
|
|
70
70
|
"pod-install": "0.1.38",
|
|
71
71
|
"postinstall-postinstall": "2.1.0",
|
|
72
72
|
"react": "18.2.0",
|
|
73
|
-
"react-native": "0.71.
|
|
73
|
+
"react-native": "0.71.7",
|
|
74
74
|
"react-native-builder-bob": "0.20.4",
|
|
75
75
|
"react-test-renderer": "18.2.0",
|
|
76
|
-
"reassure": "0.
|
|
77
|
-
"release-it": "15.10.
|
|
76
|
+
"reassure": "0.9.0",
|
|
77
|
+
"release-it": "15.10.3",
|
|
78
78
|
"rome": "12.0.0",
|
|
79
79
|
"typescript": "5.0.4"
|
|
80
80
|
},
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { useMemo, type ReactNode } from "react";
|
|
2
|
+
import { marked } from "marked";
|
|
3
|
+
import type { MarkedStyles, UserTheme } from "./../theme/types";
|
|
4
|
+
import Parser from "../lib/Parser";
|
|
5
|
+
import Renderer from "../lib/Renderer";
|
|
6
|
+
import getStyles from "./../theme/styles";
|
|
7
|
+
import { type ColorSchemeName } from "react-native";
|
|
8
|
+
import type { RendererInterface } from "../lib/types";
|
|
9
|
+
|
|
10
|
+
export interface useMarkdownHookOptions {
|
|
11
|
+
colorScheme?: ColorSchemeName;
|
|
12
|
+
renderer?: RendererInterface;
|
|
13
|
+
theme?: UserTheme;
|
|
14
|
+
styles?: MarkedStyles;
|
|
15
|
+
baseUrl?: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const useMarkdown = (
|
|
19
|
+
value: string,
|
|
20
|
+
options?: useMarkdownHookOptions,
|
|
21
|
+
): ReactNode[] => {
|
|
22
|
+
const styles = useMemo(
|
|
23
|
+
() => getStyles(options?.styles, options?.colorScheme, options?.theme),
|
|
24
|
+
[options?.styles, options?.theme, options?.colorScheme],
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
const parser = useMemo(
|
|
28
|
+
() =>
|
|
29
|
+
new Parser({
|
|
30
|
+
styles: styles,
|
|
31
|
+
baseUrl: options?.baseUrl,
|
|
32
|
+
renderer: options?.renderer ?? new Renderer(),
|
|
33
|
+
}),
|
|
34
|
+
[options?.renderer, options?.baseUrl, styles],
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
const elements = useMemo(() => {
|
|
38
|
+
const tokens = marked.lexer(value, { mangle: false, gfm: true });
|
|
39
|
+
return parser.parse(tokens);
|
|
40
|
+
}, [value, parser]);
|
|
41
|
+
|
|
42
|
+
return elements;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export default useMarkdown;
|
package/src/index.ts
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import Markdown from "./lib/Markdown";
|
|
2
2
|
import Renderer from "./lib/Renderer";
|
|
3
|
+
import useMarkdown, { type useMarkdownHookOptions } from "./hooks/useMarkdown";
|
|
3
4
|
import type {
|
|
4
5
|
MarkdownProps,
|
|
5
6
|
ParserOptions,
|
|
6
7
|
RendererInterface,
|
|
7
8
|
} from "./lib/types";
|
|
8
9
|
|
|
9
|
-
export type {
|
|
10
|
-
|
|
10
|
+
export type {
|
|
11
|
+
MarkdownProps,
|
|
12
|
+
ParserOptions,
|
|
13
|
+
RendererInterface,
|
|
14
|
+
useMarkdownHookOptions,
|
|
15
|
+
};
|
|
16
|
+
export { Renderer, useMarkdown };
|
|
11
17
|
export default Markdown;
|
package/src/lib/Markdown.tsx
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
import React, {
|
|
2
2
|
memo,
|
|
3
3
|
useCallback,
|
|
4
|
-
useMemo,
|
|
5
4
|
type ReactElement,
|
|
6
5
|
type ReactNode,
|
|
7
6
|
} from "react";
|
|
8
7
|
import { FlatList, useColorScheme } from "react-native";
|
|
9
|
-
import { marked } from "marked";
|
|
10
|
-
import Parser from "./Parser";
|
|
11
|
-
import Renderer from "./Renderer";
|
|
12
|
-
import getStyles from "../theme/styles";
|
|
13
8
|
import type { MarkdownProps } from "./types";
|
|
9
|
+
import useMarkdown from "../hooks/useMarkdown";
|
|
10
|
+
import colors from "../theme/colors";
|
|
14
11
|
|
|
15
12
|
const Markdown = ({
|
|
16
13
|
value,
|
|
@@ -18,28 +15,17 @@ const Markdown = ({
|
|
|
18
15
|
theme,
|
|
19
16
|
baseUrl,
|
|
20
17
|
renderer,
|
|
21
|
-
styles
|
|
18
|
+
styles,
|
|
22
19
|
}: MarkdownProps) => {
|
|
23
20
|
const colorScheme = useColorScheme();
|
|
24
|
-
const styles = useMemo(
|
|
25
|
-
() => getStyles(userStyles, colorScheme, theme),
|
|
26
|
-
[userStyles, colorScheme, theme],
|
|
27
|
-
);
|
|
28
|
-
|
|
29
|
-
const parser = useMemo(
|
|
30
|
-
() =>
|
|
31
|
-
new Parser({
|
|
32
|
-
styles,
|
|
33
|
-
baseUrl,
|
|
34
|
-
renderer: renderer ?? new Renderer(),
|
|
35
|
-
}),
|
|
36
|
-
[styles, baseUrl],
|
|
37
|
-
);
|
|
38
21
|
|
|
39
|
-
const rnElements =
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
22
|
+
const rnElements = useMarkdown(value, {
|
|
23
|
+
theme,
|
|
24
|
+
baseUrl,
|
|
25
|
+
renderer,
|
|
26
|
+
colorScheme,
|
|
27
|
+
styles,
|
|
28
|
+
});
|
|
43
29
|
|
|
44
30
|
const renderItem = useCallback(({ item }: { item: ReactNode }) => {
|
|
45
31
|
return item as ReactElement;
|
|
@@ -56,7 +42,12 @@ const Markdown = ({
|
|
|
56
42
|
keyExtractor={keyExtractor}
|
|
57
43
|
maxToRenderPerBatch={8}
|
|
58
44
|
initialNumToRender={8}
|
|
59
|
-
style={
|
|
45
|
+
style={{
|
|
46
|
+
backgroundColor:
|
|
47
|
+
colorScheme === "light"
|
|
48
|
+
? colors.light.background
|
|
49
|
+
: colors.dark.background,
|
|
50
|
+
}}
|
|
60
51
|
{...flatListProps}
|
|
61
52
|
data={rnElements}
|
|
62
53
|
renderItem={renderItem}
|
package/src/theme/styles.ts
CHANGED