react-native-markdown-native 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/LICENSE +21 -0
- package/MarkdownNative.podspec +19 -0
- package/README.md +109 -0
- package/android/.gradle/8.9/checksums/checksums.lock +0 -0
- package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
- package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/8.9/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/build.gradle +36 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/java/com/markdownnative/MarkdownPackage.java +25 -0
- package/android/src/main/java/com/markdownnative/MarkdownView.java +516 -0
- package/android/src/main/java/com/markdownnative/MarkdownViewManager.java +107 -0
- package/ios/MarkdownView.swift +771 -0
- package/ios/MarkdownViewManager.m +27 -0
- package/ios/MarkdownViewManager.swift +20 -0
- package/lib/commonjs/index.js +97 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/types.js +154 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/index.d.ts +26 -0
- package/lib/index.js +97 -0
- package/lib/module/index.js +80 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/types.js +153 -0
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/index.d.ts +30 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/types.d.ts +80 -0
- package/lib/typescript/types.d.ts.map +1 -0
- package/package.json +92 -0
- package/react-native.config.js +11 -0
- package/src/index.tsx +117 -0
- package/src/types.ts +205 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#import <React/RCTViewManager.h>
|
|
2
|
+
|
|
3
|
+
@interface RCT_EXTERN_MODULE(MarkdownViewManager, RCTViewManager)
|
|
4
|
+
|
|
5
|
+
RCT_EXPORT_VIEW_PROPERTY(markdownText, NSString)
|
|
6
|
+
RCT_EXPORT_VIEW_PROPERTY(markdownFontSize, CGFloat)
|
|
7
|
+
RCT_EXPORT_VIEW_PROPERTY(markdownColor, NSString)
|
|
8
|
+
RCT_EXPORT_VIEW_PROPERTY(markdownFontFamily, NSString)
|
|
9
|
+
RCT_EXPORT_VIEW_PROPERTY(markdownSelectionColor, NSString)
|
|
10
|
+
RCT_EXPORT_VIEW_PROPERTY(markdownScrollEnabled, BOOL)
|
|
11
|
+
RCT_EXPORT_VIEW_PROPERTY(markdownSelectable, BOOL)
|
|
12
|
+
// Customization props
|
|
13
|
+
RCT_EXPORT_VIEW_PROPERTY(markdownLinkColor, NSString)
|
|
14
|
+
RCT_EXPORT_VIEW_PROPERTY(markdownLineSpacing, CGFloat)
|
|
15
|
+
RCT_EXPORT_VIEW_PROPERTY(markdownParagraphSpacing, CGFloat)
|
|
16
|
+
RCT_EXPORT_VIEW_PROPERTY(markdownBulletIndent, CGFloat)
|
|
17
|
+
// List styling props
|
|
18
|
+
RCT_EXPORT_VIEW_PROPERTY(markdownListLeftInset, CGFloat)
|
|
19
|
+
RCT_EXPORT_VIEW_PROPERTY(markdownListSpacingBefore, CGFloat)
|
|
20
|
+
RCT_EXPORT_VIEW_PROPERTY(markdownListSpacingAfter, CGFloat)
|
|
21
|
+
// New rules-based styling system
|
|
22
|
+
RCT_EXPORT_VIEW_PROPERTY(markdownRulesJson, NSString)
|
|
23
|
+
RCT_EXPORT_VIEW_PROPERTY(onNativeSizeChange, RCTDirectEventBlock)
|
|
24
|
+
|
|
25
|
+
@end
|
|
26
|
+
|
|
27
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import React
|
|
3
|
+
|
|
4
|
+
@objc(MarkdownViewManager)
|
|
5
|
+
class MarkdownViewManager: RCTViewManager {
|
|
6
|
+
|
|
7
|
+
override func view() -> UIView! {
|
|
8
|
+
if #available(iOS 15.0, *) {
|
|
9
|
+
return MarkdownView()
|
|
10
|
+
} else {
|
|
11
|
+
let label = UILabel()
|
|
12
|
+
label.text = "Markdown requires iOS 15+"
|
|
13
|
+
return label
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
override static func requiresMainQueueSetup() -> Bool {
|
|
18
|
+
return true
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "DEFAULT_MARKDOWN_RULES", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _types.DEFAULT_MARKDOWN_RULES;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "MarkdownElementType", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _types.MarkdownElementType;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
exports.MarkdownView = void 0;
|
|
19
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
20
|
+
var _reactNative = require("react-native");
|
|
21
|
+
var _types = require("./types");
|
|
22
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
23
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
24
|
+
// Re-export types for convenience
|
|
25
|
+
|
|
26
|
+
const NativeMarkdownView = (0, _reactNative.requireNativeComponent)('MarkdownView');
|
|
27
|
+
const MarkdownView = props => {
|
|
28
|
+
const {
|
|
29
|
+
onNativeSizeChange,
|
|
30
|
+
markdownRules
|
|
31
|
+
} = props;
|
|
32
|
+
const [nativeHeight, setNativeHeight] = (0, _react.useState)(0);
|
|
33
|
+
|
|
34
|
+
// Merge user rules with defaults
|
|
35
|
+
const finalRules = (0, _react.useMemo)(() => {
|
|
36
|
+
if (!markdownRules) {
|
|
37
|
+
return _types.DEFAULT_MARKDOWN_RULES;
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
..._types.DEFAULT_MARKDOWN_RULES,
|
|
41
|
+
...markdownRules
|
|
42
|
+
};
|
|
43
|
+
}, [markdownRules]);
|
|
44
|
+
|
|
45
|
+
// Serialize rules to JSON for native modules
|
|
46
|
+
const rulesJson = (0, _react.useMemo)(() => {
|
|
47
|
+
return JSON.stringify(finalRules);
|
|
48
|
+
}, [finalRules]);
|
|
49
|
+
|
|
50
|
+
// Default values (maintained for backward compatibility)
|
|
51
|
+
const defaultProps = {
|
|
52
|
+
markdownFontSize: 16,
|
|
53
|
+
markdownColor: '#000000',
|
|
54
|
+
markdownFontFamily: undefined,
|
|
55
|
+
markdownSelectionColor: '#ACCEF7',
|
|
56
|
+
markdownScrollEnabled: false,
|
|
57
|
+
markdownSelectable: true,
|
|
58
|
+
markdownLinkColor: '#007AFF',
|
|
59
|
+
markdownLineSpacing: 0,
|
|
60
|
+
markdownParagraphSpacing: 0,
|
|
61
|
+
markdownBulletIndent: 20,
|
|
62
|
+
markdownListLeftInset: 10,
|
|
63
|
+
markdownListSpacingBefore: 0,
|
|
64
|
+
markdownListSpacingAfter: 0
|
|
65
|
+
};
|
|
66
|
+
const mergedProps = {
|
|
67
|
+
...defaultProps,
|
|
68
|
+
...props,
|
|
69
|
+
markdownRulesJson: rulesJson
|
|
70
|
+
};
|
|
71
|
+
const fontSize = mergedProps.markdownFontSize;
|
|
72
|
+
// Minimum height based on font size (single line)
|
|
73
|
+
const minHeight = fontSize * 1.5;
|
|
74
|
+
const handleNativeSizeChange = (0, _react.useCallback)(event => {
|
|
75
|
+
const {
|
|
76
|
+
height
|
|
77
|
+
} = event.nativeEvent;
|
|
78
|
+
if (height > 0 && Math.abs(height - nativeHeight) > 0.5) {
|
|
79
|
+
setNativeHeight(height);
|
|
80
|
+
}
|
|
81
|
+
onNativeSizeChange?.(event);
|
|
82
|
+
}, [nativeHeight, onNativeSizeChange]);
|
|
83
|
+
|
|
84
|
+
// Use nativeHeight if available, otherwise minHeight ensures visibility
|
|
85
|
+
const dynamicStyle = {
|
|
86
|
+
minHeight: minHeight,
|
|
87
|
+
height: nativeHeight > 0 ? nativeHeight : undefined
|
|
88
|
+
};
|
|
89
|
+
const nativeView = /*#__PURE__*/(0, _jsxRuntime.jsx)(NativeMarkdownView, {
|
|
90
|
+
...mergedProps,
|
|
91
|
+
style: [dynamicStyle, props.style],
|
|
92
|
+
onNativeSizeChange: handleNativeSizeChange
|
|
93
|
+
});
|
|
94
|
+
return nativeView;
|
|
95
|
+
};
|
|
96
|
+
exports.MarkdownView = MarkdownView;
|
|
97
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_types","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","NativeMarkdownView","requireNativeComponent","MarkdownView","props","onNativeSizeChange","markdownRules","nativeHeight","setNativeHeight","useState","finalRules","useMemo","DEFAULT_MARKDOWN_RULES","rulesJson","JSON","stringify","defaultProps","markdownFontSize","markdownColor","markdownFontFamily","undefined","markdownSelectionColor","markdownScrollEnabled","markdownSelectable","markdownLinkColor","markdownLineSpacing","markdownParagraphSpacing","markdownBulletIndent","markdownListLeftInset","markdownListSpacingBefore","markdownListSpacingAfter","mergedProps","markdownRulesJson","fontSize","minHeight","handleNativeSizeChange","useCallback","event","height","nativeEvent","Math","abs","dynamicStyle","nativeView","jsx","style","exports"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.MarkdownElementType = exports.DEFAULT_MARKDOWN_RULES = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* All supported markdown element types
|
|
9
|
+
*/
|
|
10
|
+
let MarkdownElementType = exports.MarkdownElementType = /*#__PURE__*/function (MarkdownElementType) {
|
|
11
|
+
// Headers
|
|
12
|
+
MarkdownElementType["HEADING1"] = "heading1";
|
|
13
|
+
MarkdownElementType["HEADING2"] = "heading2";
|
|
14
|
+
MarkdownElementType["HEADING3"] = "heading3";
|
|
15
|
+
MarkdownElementType["HEADING4"] = "heading4";
|
|
16
|
+
MarkdownElementType["HEADING5"] = "heading5";
|
|
17
|
+
MarkdownElementType["HEADING6"] = "heading6";
|
|
18
|
+
// Text blocks
|
|
19
|
+
MarkdownElementType["PARAGRAPH"] = "paragraph";
|
|
20
|
+
MarkdownElementType["BLOCKQUOTE"] = "blockquote";
|
|
21
|
+
// Lists
|
|
22
|
+
MarkdownElementType["LIST"] = "list";
|
|
23
|
+
MarkdownElementType["LIST_ITEM"] = "listItem";
|
|
24
|
+
MarkdownElementType["ORDERED_LIST"] = "orderedList";
|
|
25
|
+
MarkdownElementType["ORDERED_LIST_ITEM"] = "orderedListItem";
|
|
26
|
+
// Code
|
|
27
|
+
MarkdownElementType["CODE_INLINE"] = "codeInline";
|
|
28
|
+
MarkdownElementType["CODE_BLOCK"] = "codeBlock";
|
|
29
|
+
// Inline styles
|
|
30
|
+
MarkdownElementType["STRONG"] = "strong";
|
|
31
|
+
MarkdownElementType["EM"] = "em";
|
|
32
|
+
MarkdownElementType["STRIKETHROUGH"] = "strikethrough";
|
|
33
|
+
MarkdownElementType["LINK"] = "link";
|
|
34
|
+
// Other
|
|
35
|
+
MarkdownElementType["HR"] = "hr";
|
|
36
|
+
return MarkdownElementType;
|
|
37
|
+
}({});
|
|
38
|
+
/**
|
|
39
|
+
* Style definition for a markdown element
|
|
40
|
+
* Extends React Native TextStyle with additional custom properties
|
|
41
|
+
*/
|
|
42
|
+
/**
|
|
43
|
+
* Complete rules configuration for all markdown elements
|
|
44
|
+
*/
|
|
45
|
+
/**
|
|
46
|
+
* Default markdown rules that match the current behavior
|
|
47
|
+
* These ensure consistent rendering across iOS and Android
|
|
48
|
+
*/
|
|
49
|
+
const DEFAULT_MARKDOWN_RULES = exports.DEFAULT_MARKDOWN_RULES = {
|
|
50
|
+
[MarkdownElementType.HEADING1]: {
|
|
51
|
+
fontSize: 32,
|
|
52
|
+
fontWeight: 'bold',
|
|
53
|
+
marginTop: 8,
|
|
54
|
+
marginBottom: 4
|
|
55
|
+
},
|
|
56
|
+
[MarkdownElementType.HEADING2]: {
|
|
57
|
+
fontSize: 24,
|
|
58
|
+
fontWeight: 'bold',
|
|
59
|
+
marginTop: 8,
|
|
60
|
+
marginBottom: 4
|
|
61
|
+
},
|
|
62
|
+
[MarkdownElementType.HEADING3]: {
|
|
63
|
+
fontSize: 20,
|
|
64
|
+
fontWeight: 'bold',
|
|
65
|
+
marginTop: 8,
|
|
66
|
+
marginBottom: 4
|
|
67
|
+
},
|
|
68
|
+
[MarkdownElementType.HEADING4]: {
|
|
69
|
+
fontSize: 18,
|
|
70
|
+
fontWeight: 'bold',
|
|
71
|
+
marginTop: 8,
|
|
72
|
+
marginBottom: 4
|
|
73
|
+
},
|
|
74
|
+
[MarkdownElementType.HEADING5]: {
|
|
75
|
+
fontSize: 16,
|
|
76
|
+
fontWeight: 'bold',
|
|
77
|
+
marginTop: 8,
|
|
78
|
+
marginBottom: 4
|
|
79
|
+
},
|
|
80
|
+
[MarkdownElementType.HEADING6]: {
|
|
81
|
+
fontSize: 14,
|
|
82
|
+
fontWeight: 'bold',
|
|
83
|
+
marginTop: 8,
|
|
84
|
+
marginBottom: 4
|
|
85
|
+
},
|
|
86
|
+
[MarkdownElementType.PARAGRAPH]: {
|
|
87
|
+
marginBottom: 12
|
|
88
|
+
},
|
|
89
|
+
[MarkdownElementType.BLOCKQUOTE]: {
|
|
90
|
+
marginLeft: 16,
|
|
91
|
+
marginTop: 8,
|
|
92
|
+
marginBottom: 8,
|
|
93
|
+
paddingLeft: 12,
|
|
94
|
+
borderLeftWidth: 4,
|
|
95
|
+
borderLeftColor: '#CCCCCC',
|
|
96
|
+
fontStyle: 'italic',
|
|
97
|
+
color: '#666666'
|
|
98
|
+
},
|
|
99
|
+
[MarkdownElementType.LIST]: {
|
|
100
|
+
marginTop: 8,
|
|
101
|
+
marginBottom: 8
|
|
102
|
+
},
|
|
103
|
+
[MarkdownElementType.LIST_ITEM]: {
|
|
104
|
+
marginBottom: 4,
|
|
105
|
+
listLeftInset: 10,
|
|
106
|
+
bulletIndent: 20
|
|
107
|
+
},
|
|
108
|
+
[MarkdownElementType.ORDERED_LIST]: {
|
|
109
|
+
marginTop: 8,
|
|
110
|
+
marginBottom: 8
|
|
111
|
+
},
|
|
112
|
+
[MarkdownElementType.ORDERED_LIST_ITEM]: {
|
|
113
|
+
marginBottom: 4,
|
|
114
|
+
listLeftInset: 10,
|
|
115
|
+
bulletIndent: 20
|
|
116
|
+
},
|
|
117
|
+
[MarkdownElementType.CODE_INLINE]: {
|
|
118
|
+
fontFamily: 'Menlo, Monaco, Courier New, monospace',
|
|
119
|
+
backgroundColor: '#F5F5F5',
|
|
120
|
+
paddingLeft: 4,
|
|
121
|
+
paddingRight: 4,
|
|
122
|
+
paddingTop: 2,
|
|
123
|
+
paddingBottom: 2,
|
|
124
|
+
borderRadius: 3
|
|
125
|
+
},
|
|
126
|
+
[MarkdownElementType.CODE_BLOCK]: {
|
|
127
|
+
fontFamily: 'Menlo, Monaco, Courier New, monospace',
|
|
128
|
+
backgroundColor: '#F5F5F5',
|
|
129
|
+
padding: 12,
|
|
130
|
+
borderRadius: 4,
|
|
131
|
+
marginTop: 8,
|
|
132
|
+
marginBottom: 8
|
|
133
|
+
},
|
|
134
|
+
[MarkdownElementType.STRONG]: {
|
|
135
|
+
fontWeight: 'bold'
|
|
136
|
+
},
|
|
137
|
+
[MarkdownElementType.EM]: {
|
|
138
|
+
fontStyle: 'italic'
|
|
139
|
+
},
|
|
140
|
+
[MarkdownElementType.STRIKETHROUGH]: {
|
|
141
|
+
textDecorationLine: 'line-through'
|
|
142
|
+
},
|
|
143
|
+
[MarkdownElementType.LINK]: {
|
|
144
|
+
color: '#007AFF',
|
|
145
|
+
textDecorationLine: 'underline'
|
|
146
|
+
},
|
|
147
|
+
[MarkdownElementType.HR]: {
|
|
148
|
+
marginTop: 16,
|
|
149
|
+
marginBottom: 16,
|
|
150
|
+
borderBottomWidth: 1,
|
|
151
|
+
borderBottomColor: '#CCCCCC'
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MarkdownElementType","exports","DEFAULT_MARKDOWN_RULES","HEADING1","fontSize","fontWeight","marginTop","marginBottom","HEADING2","HEADING3","HEADING4","HEADING5","HEADING6","PARAGRAPH","BLOCKQUOTE","marginLeft","paddingLeft","borderLeftWidth","borderLeftColor","fontStyle","color","LIST","LIST_ITEM","listLeftInset","bulletIndent","ORDERED_LIST","ORDERED_LIST_ITEM","CODE_INLINE","fontFamily","backgroundColor","paddingRight","paddingTop","paddingBottom","borderRadius","CODE_BLOCK","padding","STRONG","EM","STRIKETHROUGH","textDecorationLine","LINK","HR","borderBottomWidth","borderBottomColor"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ViewProps, NativeSyntheticEvent } from 'react-native';
|
|
3
|
+
export type NativeMarkdownSizeEvent = {
|
|
4
|
+
width: number;
|
|
5
|
+
height: number;
|
|
6
|
+
};
|
|
7
|
+
export interface NativeMarkdownViewProps extends ViewProps {
|
|
8
|
+
markdownText: string;
|
|
9
|
+
markdownFontSize?: number;
|
|
10
|
+
markdownColor?: string;
|
|
11
|
+
markdownFontFamily?: string;
|
|
12
|
+
markdownSelectionColor?: string;
|
|
13
|
+
markdownScrollEnabled?: boolean;
|
|
14
|
+
markdownSelectable?: boolean;
|
|
15
|
+
markdownLinkColor?: string;
|
|
16
|
+
markdownLineSpacing?: number;
|
|
17
|
+
markdownParagraphSpacing?: number;
|
|
18
|
+
markdownBulletIndent?: number;
|
|
19
|
+
markdownListLeftInset?: number;
|
|
20
|
+
markdownListSpacingBefore?: number;
|
|
21
|
+
markdownListSpacingAfter?: number;
|
|
22
|
+
onNativeSizeChange?: (
|
|
23
|
+
event: NativeSyntheticEvent<NativeMarkdownSizeEvent>
|
|
24
|
+
) => void;
|
|
25
|
+
}
|
|
26
|
+
export declare const MarkdownView: React.FC<NativeMarkdownViewProps>;
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
var __createBinding =
|
|
3
|
+
(this && this.__createBinding) ||
|
|
4
|
+
(Object.create
|
|
5
|
+
? function (o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (
|
|
9
|
+
!desc ||
|
|
10
|
+
('get' in desc ? !m.__esModule : desc.writable || desc.configurable)
|
|
11
|
+
) {
|
|
12
|
+
desc = {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return m[k];
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}
|
|
21
|
+
: function (o, m, k, k2) {
|
|
22
|
+
if (k2 === undefined) k2 = k;
|
|
23
|
+
o[k2] = m[k];
|
|
24
|
+
});
|
|
25
|
+
var __setModuleDefault =
|
|
26
|
+
(this && this.__setModuleDefault) ||
|
|
27
|
+
(Object.create
|
|
28
|
+
? function (o, v) {
|
|
29
|
+
Object.defineProperty(o, 'default', { enumerable: true, value: v });
|
|
30
|
+
}
|
|
31
|
+
: function (o, v) {
|
|
32
|
+
o['default'] = v;
|
|
33
|
+
});
|
|
34
|
+
var __importStar =
|
|
35
|
+
(this && this.__importStar) ||
|
|
36
|
+
function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null)
|
|
40
|
+
for (var k in mod)
|
|
41
|
+
if (k !== 'default' && Object.prototype.hasOwnProperty.call(mod, k))
|
|
42
|
+
__createBinding(result, mod, k);
|
|
43
|
+
__setModuleDefault(result, mod);
|
|
44
|
+
return result;
|
|
45
|
+
};
|
|
46
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
47
|
+
exports.MarkdownView = void 0;
|
|
48
|
+
const react_1 = __importStar(require('react'));
|
|
49
|
+
const react_native_1 = require('react-native');
|
|
50
|
+
const NativeMarkdownView = (0, react_native_1.requireNativeComponent)(
|
|
51
|
+
'MarkdownView'
|
|
52
|
+
);
|
|
53
|
+
const MarkdownView = (props) => {
|
|
54
|
+
const [nativeHeight, setNativeHeight] = (0, react_1.useState)(0);
|
|
55
|
+
// Default values
|
|
56
|
+
const defaultProps = {
|
|
57
|
+
markdownFontSize: 16,
|
|
58
|
+
markdownColor: '#000000',
|
|
59
|
+
markdownFontFamily: undefined,
|
|
60
|
+
markdownSelectionColor: '#ACCEF7',
|
|
61
|
+
markdownScrollEnabled: false,
|
|
62
|
+
markdownSelectable: true,
|
|
63
|
+
markdownLinkColor: '#007AFF',
|
|
64
|
+
markdownLineSpacing: 0,
|
|
65
|
+
markdownParagraphSpacing: 0,
|
|
66
|
+
markdownBulletIndent: 20,
|
|
67
|
+
markdownListLeftInset: 10,
|
|
68
|
+
markdownListSpacingBefore: 0,
|
|
69
|
+
markdownListSpacingAfter: 0,
|
|
70
|
+
};
|
|
71
|
+
const mergedProps = { ...defaultProps, ...props };
|
|
72
|
+
const fontSize = mergedProps.markdownFontSize;
|
|
73
|
+
// Minimum height based on font size (single line)
|
|
74
|
+
const minHeight = fontSize * 1.5;
|
|
75
|
+
const handleNativeSizeChange = (0, react_1.useCallback)(
|
|
76
|
+
(event) => {
|
|
77
|
+
const { height } = event.nativeEvent;
|
|
78
|
+
if (height > 0 && Math.abs(height - nativeHeight) > 0.5) {
|
|
79
|
+
setNativeHeight(height);
|
|
80
|
+
}
|
|
81
|
+
props.onNativeSizeChange?.(event);
|
|
82
|
+
},
|
|
83
|
+
[nativeHeight, props.onNativeSizeChange]
|
|
84
|
+
);
|
|
85
|
+
// Use nativeHeight if available, otherwise minHeight ensures visibility
|
|
86
|
+
const dynamicStyle = {
|
|
87
|
+
minHeight: minHeight,
|
|
88
|
+
height: nativeHeight > 0 ? nativeHeight : undefined,
|
|
89
|
+
};
|
|
90
|
+
const nativeView = react_1.default.createElement(NativeMarkdownView, {
|
|
91
|
+
...mergedProps,
|
|
92
|
+
style: [dynamicStyle, props.style],
|
|
93
|
+
onNativeSizeChange: handleNativeSizeChange,
|
|
94
|
+
});
|
|
95
|
+
return nativeView;
|
|
96
|
+
};
|
|
97
|
+
exports.MarkdownView = MarkdownView;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { useState, useCallback, useMemo } from 'react';
|
|
4
|
+
import { requireNativeComponent } from 'react-native';
|
|
5
|
+
import { DEFAULT_MARKDOWN_RULES } from './types';
|
|
6
|
+
|
|
7
|
+
// Re-export types for convenience
|
|
8
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
|
+
export { MarkdownElementType, DEFAULT_MARKDOWN_RULES } from './types';
|
|
10
|
+
const NativeMarkdownView = requireNativeComponent('MarkdownView');
|
|
11
|
+
export const MarkdownView = props => {
|
|
12
|
+
const {
|
|
13
|
+
onNativeSizeChange,
|
|
14
|
+
markdownRules
|
|
15
|
+
} = props;
|
|
16
|
+
const [nativeHeight, setNativeHeight] = useState(0);
|
|
17
|
+
|
|
18
|
+
// Merge user rules with defaults
|
|
19
|
+
const finalRules = useMemo(() => {
|
|
20
|
+
if (!markdownRules) {
|
|
21
|
+
return DEFAULT_MARKDOWN_RULES;
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
...DEFAULT_MARKDOWN_RULES,
|
|
25
|
+
...markdownRules
|
|
26
|
+
};
|
|
27
|
+
}, [markdownRules]);
|
|
28
|
+
|
|
29
|
+
// Serialize rules to JSON for native modules
|
|
30
|
+
const rulesJson = useMemo(() => {
|
|
31
|
+
return JSON.stringify(finalRules);
|
|
32
|
+
}, [finalRules]);
|
|
33
|
+
|
|
34
|
+
// Default values (maintained for backward compatibility)
|
|
35
|
+
const defaultProps = {
|
|
36
|
+
markdownFontSize: 16,
|
|
37
|
+
markdownColor: '#000000',
|
|
38
|
+
markdownFontFamily: undefined,
|
|
39
|
+
markdownSelectionColor: '#ACCEF7',
|
|
40
|
+
markdownScrollEnabled: false,
|
|
41
|
+
markdownSelectable: true,
|
|
42
|
+
markdownLinkColor: '#007AFF',
|
|
43
|
+
markdownLineSpacing: 0,
|
|
44
|
+
markdownParagraphSpacing: 0,
|
|
45
|
+
markdownBulletIndent: 20,
|
|
46
|
+
markdownListLeftInset: 10,
|
|
47
|
+
markdownListSpacingBefore: 0,
|
|
48
|
+
markdownListSpacingAfter: 0
|
|
49
|
+
};
|
|
50
|
+
const mergedProps = {
|
|
51
|
+
...defaultProps,
|
|
52
|
+
...props,
|
|
53
|
+
markdownRulesJson: rulesJson
|
|
54
|
+
};
|
|
55
|
+
const fontSize = mergedProps.markdownFontSize;
|
|
56
|
+
// Minimum height based on font size (single line)
|
|
57
|
+
const minHeight = fontSize * 1.5;
|
|
58
|
+
const handleNativeSizeChange = useCallback(event => {
|
|
59
|
+
const {
|
|
60
|
+
height
|
|
61
|
+
} = event.nativeEvent;
|
|
62
|
+
if (height > 0 && Math.abs(height - nativeHeight) > 0.5) {
|
|
63
|
+
setNativeHeight(height);
|
|
64
|
+
}
|
|
65
|
+
onNativeSizeChange?.(event);
|
|
66
|
+
}, [nativeHeight, onNativeSizeChange]);
|
|
67
|
+
|
|
68
|
+
// Use nativeHeight if available, otherwise minHeight ensures visibility
|
|
69
|
+
const dynamicStyle = {
|
|
70
|
+
minHeight: minHeight,
|
|
71
|
+
height: nativeHeight > 0 ? nativeHeight : undefined
|
|
72
|
+
};
|
|
73
|
+
const nativeView = /*#__PURE__*/_jsx(NativeMarkdownView, {
|
|
74
|
+
...mergedProps,
|
|
75
|
+
style: [dynamicStyle, props.style],
|
|
76
|
+
onNativeSizeChange: handleNativeSizeChange
|
|
77
|
+
});
|
|
78
|
+
return nativeView;
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useState","useCallback","useMemo","requireNativeComponent","DEFAULT_MARKDOWN_RULES","jsx","_jsx","MarkdownElementType","NativeMarkdownView","MarkdownView","props","onNativeSizeChange","markdownRules","nativeHeight","setNativeHeight","finalRules","rulesJson","JSON","stringify","defaultProps","markdownFontSize","markdownColor","markdownFontFamily","undefined","markdownSelectionColor","markdownScrollEnabled","markdownSelectable","markdownLinkColor","markdownLineSpacing","markdownParagraphSpacing","markdownBulletIndent","markdownListLeftInset","markdownListSpacingBefore","markdownListSpacingAfter","mergedProps","markdownRulesJson","fontSize","minHeight","handleNativeSizeChange","event","height","nativeEvent","Math","abs","dynamicStyle","nativeView","style"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,QAAQ,EAAEC,WAAW,EAAEC,OAAO,QAAQ,OAAO;AAC7D,SACEC,sBAAsB,QAGjB,cAAc;AACrB,SAAwBC,sBAAsB,QAAQ,SAAS;;AAiC/D;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAEA,SAASC,mBAAmB,EAAEH,sBAAsB,QAAQ,SAAS;AAErE,MAAMI,kBAAkB,GACtBL,sBAAsB,CAA0B,cAAc,CAAC;AAEjE,OAAO,MAAMM,YAA+C,GAAIC,KAAK,IAAK;EACxE,MAAM;IAAEC,kBAAkB;IAAEC;EAAc,CAAC,GAAGF,KAAK;EACnD,MAAM,CAACG,YAAY,EAAEC,eAAe,CAAC,GAAGd,QAAQ,CAAS,CAAC,CAAC;;EAE3D;EACA,MAAMe,UAAU,GAAGb,OAAO,CAAC,MAAM;IAC/B,IAAI,CAACU,aAAa,EAAE;MAClB,OAAOR,sBAAsB;IAC/B;IACA,OAAO;MAAE,GAAGA,sBAAsB;MAAE,GAAGQ;IAAc,CAAC;EACxD,CAAC,EAAE,CAACA,aAAa,CAAC,CAAC;;EAEnB;EACA,MAAMI,SAAS,GAAGd,OAAO,CAAC,MAAM;IAC9B,OAAOe,IAAI,CAACC,SAAS,CAACH,UAAU,CAAC;EACnC,CAAC,EAAE,CAACA,UAAU,CAAC,CAAC;;EAEhB;EACA,MAAMI,YAAY,GAAG;IACnBC,gBAAgB,EAAE,EAAE;IACpBC,aAAa,EAAE,SAAS;IACxBC,kBAAkB,EAAEC,SAAS;IAC7BC,sBAAsB,EAAE,SAAS;IACjCC,qBAAqB,EAAE,KAAK;IAC5BC,kBAAkB,EAAE,IAAI;IACxBC,iBAAiB,EAAE,SAAS;IAC5BC,mBAAmB,EAAE,CAAC;IACtBC,wBAAwB,EAAE,CAAC;IAC3BC,oBAAoB,EAAE,EAAE;IACxBC,qBAAqB,EAAE,EAAE;IACzBC,yBAAyB,EAAE,CAAC;IAC5BC,wBAAwB,EAAE;EAC5B,CAAC;EAED,MAAMC,WAAW,GAAG;IAClB,GAAGf,YAAY;IACf,GAAGT,KAAK;IACRyB,iBAAiB,EAAEnB;EACrB,CAAC;EAED,MAAMoB,QAAQ,GAAGF,WAAW,CAACd,gBAAgB;EAC7C;EACA,MAAMiB,SAAS,GAAGD,QAAQ,GAAG,GAAG;EAEhC,MAAME,sBAAsB,GAAGrC,WAAW,CACvCsC,KAAoD,IAAK;IACxD,MAAM;MAAEC;IAAO,CAAC,GAAGD,KAAK,CAACE,WAAW;IACpC,IAAID,MAAM,GAAG,CAAC,IAAIE,IAAI,CAACC,GAAG,CAACH,MAAM,GAAG3B,YAAY,CAAC,GAAG,GAAG,EAAE;MACvDC,eAAe,CAAC0B,MAAM,CAAC;IACzB;IACA7B,kBAAkB,GAAG4B,KAAK,CAAC;EAC7B,CAAC,EACD,CAAC1B,YAAY,EAAEF,kBAAkB,CACnC,CAAC;;EAED;EACA,MAAMiC,YAAY,GAAG;IACnBP,SAAS,EAAEA,SAAS;IACpBG,MAAM,EAAE3B,YAAY,GAAG,CAAC,GAAGA,YAAY,GAAGU;EAC5C,CAAC;EAED,MAAMsB,UAAU,gBACdvC,IAAA,CAACE,kBAAkB;IAAA,GACb0B,WAAW;IACfY,KAAK,EAAE,CAACF,YAAY,EAAElC,KAAK,CAACoC,KAAK,CAAE;IACnCnC,kBAAkB,EAAE2B;EAAuB,CAC5C,CACF;EAED,OAAOO,UAAU;AACnB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* All supported markdown element types
|
|
5
|
+
*/
|
|
6
|
+
export let MarkdownElementType = /*#__PURE__*/function (MarkdownElementType) {
|
|
7
|
+
// Headers
|
|
8
|
+
MarkdownElementType["HEADING1"] = "heading1";
|
|
9
|
+
MarkdownElementType["HEADING2"] = "heading2";
|
|
10
|
+
MarkdownElementType["HEADING3"] = "heading3";
|
|
11
|
+
MarkdownElementType["HEADING4"] = "heading4";
|
|
12
|
+
MarkdownElementType["HEADING5"] = "heading5";
|
|
13
|
+
MarkdownElementType["HEADING6"] = "heading6";
|
|
14
|
+
// Text blocks
|
|
15
|
+
MarkdownElementType["PARAGRAPH"] = "paragraph";
|
|
16
|
+
MarkdownElementType["BLOCKQUOTE"] = "blockquote";
|
|
17
|
+
// Lists
|
|
18
|
+
MarkdownElementType["LIST"] = "list";
|
|
19
|
+
MarkdownElementType["LIST_ITEM"] = "listItem";
|
|
20
|
+
MarkdownElementType["ORDERED_LIST"] = "orderedList";
|
|
21
|
+
MarkdownElementType["ORDERED_LIST_ITEM"] = "orderedListItem";
|
|
22
|
+
// Code
|
|
23
|
+
MarkdownElementType["CODE_INLINE"] = "codeInline";
|
|
24
|
+
MarkdownElementType["CODE_BLOCK"] = "codeBlock";
|
|
25
|
+
// Inline styles
|
|
26
|
+
MarkdownElementType["STRONG"] = "strong";
|
|
27
|
+
MarkdownElementType["EM"] = "em";
|
|
28
|
+
MarkdownElementType["STRIKETHROUGH"] = "strikethrough";
|
|
29
|
+
MarkdownElementType["LINK"] = "link";
|
|
30
|
+
// Other
|
|
31
|
+
MarkdownElementType["HR"] = "hr";
|
|
32
|
+
return MarkdownElementType;
|
|
33
|
+
}({});
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Style definition for a markdown element
|
|
37
|
+
* Extends React Native TextStyle with additional custom properties
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Complete rules configuration for all markdown elements
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Default markdown rules that match the current behavior
|
|
46
|
+
* These ensure consistent rendering across iOS and Android
|
|
47
|
+
*/
|
|
48
|
+
export const DEFAULT_MARKDOWN_RULES = {
|
|
49
|
+
[MarkdownElementType.HEADING1]: {
|
|
50
|
+
fontSize: 32,
|
|
51
|
+
fontWeight: 'bold',
|
|
52
|
+
marginTop: 8,
|
|
53
|
+
marginBottom: 4
|
|
54
|
+
},
|
|
55
|
+
[MarkdownElementType.HEADING2]: {
|
|
56
|
+
fontSize: 24,
|
|
57
|
+
fontWeight: 'bold',
|
|
58
|
+
marginTop: 8,
|
|
59
|
+
marginBottom: 4
|
|
60
|
+
},
|
|
61
|
+
[MarkdownElementType.HEADING3]: {
|
|
62
|
+
fontSize: 20,
|
|
63
|
+
fontWeight: 'bold',
|
|
64
|
+
marginTop: 8,
|
|
65
|
+
marginBottom: 4
|
|
66
|
+
},
|
|
67
|
+
[MarkdownElementType.HEADING4]: {
|
|
68
|
+
fontSize: 18,
|
|
69
|
+
fontWeight: 'bold',
|
|
70
|
+
marginTop: 8,
|
|
71
|
+
marginBottom: 4
|
|
72
|
+
},
|
|
73
|
+
[MarkdownElementType.HEADING5]: {
|
|
74
|
+
fontSize: 16,
|
|
75
|
+
fontWeight: 'bold',
|
|
76
|
+
marginTop: 8,
|
|
77
|
+
marginBottom: 4
|
|
78
|
+
},
|
|
79
|
+
[MarkdownElementType.HEADING6]: {
|
|
80
|
+
fontSize: 14,
|
|
81
|
+
fontWeight: 'bold',
|
|
82
|
+
marginTop: 8,
|
|
83
|
+
marginBottom: 4
|
|
84
|
+
},
|
|
85
|
+
[MarkdownElementType.PARAGRAPH]: {
|
|
86
|
+
marginBottom: 12
|
|
87
|
+
},
|
|
88
|
+
[MarkdownElementType.BLOCKQUOTE]: {
|
|
89
|
+
marginLeft: 16,
|
|
90
|
+
marginTop: 8,
|
|
91
|
+
marginBottom: 8,
|
|
92
|
+
paddingLeft: 12,
|
|
93
|
+
borderLeftWidth: 4,
|
|
94
|
+
borderLeftColor: '#CCCCCC',
|
|
95
|
+
fontStyle: 'italic',
|
|
96
|
+
color: '#666666'
|
|
97
|
+
},
|
|
98
|
+
[MarkdownElementType.LIST]: {
|
|
99
|
+
marginTop: 8,
|
|
100
|
+
marginBottom: 8
|
|
101
|
+
},
|
|
102
|
+
[MarkdownElementType.LIST_ITEM]: {
|
|
103
|
+
marginBottom: 4,
|
|
104
|
+
listLeftInset: 10,
|
|
105
|
+
bulletIndent: 20
|
|
106
|
+
},
|
|
107
|
+
[MarkdownElementType.ORDERED_LIST]: {
|
|
108
|
+
marginTop: 8,
|
|
109
|
+
marginBottom: 8
|
|
110
|
+
},
|
|
111
|
+
[MarkdownElementType.ORDERED_LIST_ITEM]: {
|
|
112
|
+
marginBottom: 4,
|
|
113
|
+
listLeftInset: 10,
|
|
114
|
+
bulletIndent: 20
|
|
115
|
+
},
|
|
116
|
+
[MarkdownElementType.CODE_INLINE]: {
|
|
117
|
+
fontFamily: 'Menlo, Monaco, Courier New, monospace',
|
|
118
|
+
backgroundColor: '#F5F5F5',
|
|
119
|
+
paddingLeft: 4,
|
|
120
|
+
paddingRight: 4,
|
|
121
|
+
paddingTop: 2,
|
|
122
|
+
paddingBottom: 2,
|
|
123
|
+
borderRadius: 3
|
|
124
|
+
},
|
|
125
|
+
[MarkdownElementType.CODE_BLOCK]: {
|
|
126
|
+
fontFamily: 'Menlo, Monaco, Courier New, monospace',
|
|
127
|
+
backgroundColor: '#F5F5F5',
|
|
128
|
+
padding: 12,
|
|
129
|
+
borderRadius: 4,
|
|
130
|
+
marginTop: 8,
|
|
131
|
+
marginBottom: 8
|
|
132
|
+
},
|
|
133
|
+
[MarkdownElementType.STRONG]: {
|
|
134
|
+
fontWeight: 'bold'
|
|
135
|
+
},
|
|
136
|
+
[MarkdownElementType.EM]: {
|
|
137
|
+
fontStyle: 'italic'
|
|
138
|
+
},
|
|
139
|
+
[MarkdownElementType.STRIKETHROUGH]: {
|
|
140
|
+
textDecorationLine: 'line-through'
|
|
141
|
+
},
|
|
142
|
+
[MarkdownElementType.LINK]: {
|
|
143
|
+
color: '#007AFF',
|
|
144
|
+
textDecorationLine: 'underline'
|
|
145
|
+
},
|
|
146
|
+
[MarkdownElementType.HR]: {
|
|
147
|
+
marginTop: 16,
|
|
148
|
+
marginBottom: 16,
|
|
149
|
+
borderBottomWidth: 1,
|
|
150
|
+
borderBottomColor: '#CCCCCC'
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
//# sourceMappingURL=types.js.map
|