@tinglinzh/react-native-markdownview 0.1.0 → 0.3.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/ios/RNMarkdownView.swift +13 -8
- package/ios/RNMarkdownViewComponentView.mm +8 -9
- package/lib/commonjs/MarkdownView.js +39 -5
- package/lib/commonjs/MarkdownView.js.map +1 -1
- package/lib/commonjs/NativeMarkdownView.js +2 -0
- package/lib/commonjs/NativeMarkdownView.js.map +1 -1
- package/lib/module/MarkdownView.js +39 -5
- package/lib/module/MarkdownView.js.map +1 -1
- package/lib/module/NativeMarkdownView.js +3 -0
- package/lib/module/NativeMarkdownView.js.map +1 -1
- package/lib/typescript/src/NativeMarkdownView.d.ts +3 -5
- package/lib/typescript/src/NativeMarkdownView.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/MarkdownView.tsx +26 -5
- package/src/NativeMarkdownView.ts +5 -6
package/ios/RNMarkdownView.swift
CHANGED
|
@@ -47,7 +47,8 @@ import MarkdownView
|
|
|
47
47
|
|
|
48
48
|
var onLinkPressFabric: ((_ url: String, _ isURL: Bool) -> Void)?
|
|
49
49
|
var onImagePressFabric: ((_ source: String) -> Void)?
|
|
50
|
-
|
|
50
|
+
// contents is a newline-joined string (codegen cannot handle ReadonlyArray in events)
|
|
51
|
+
var onLineSelectionFabric: ((_ start: Int, _ end: Int, _ contents: String, _ language: String?) -> Void)?
|
|
51
52
|
var onContentSizeChangeFabric: ((_ width: Double, _ height: Double) -> Void)?
|
|
52
53
|
|
|
53
54
|
// MARK: - Initializers
|
|
@@ -96,17 +97,20 @@ import MarkdownView
|
|
|
96
97
|
markdownTextView.lineSelectionHandler = { [weak self] info in
|
|
97
98
|
guard let self else { return }
|
|
98
99
|
guard let info else { return }
|
|
100
|
+
// Codegen does not support ReadonlyArray in event payloads,
|
|
101
|
+
// so we join contents with '\n' and split on the JS side.
|
|
102
|
+
let joinedContents = info.contents.joined(separator: "\n")
|
|
99
103
|
let body: [AnyHashable: Any] = [
|
|
100
104
|
"startLine": info.lineRange.lowerBound,
|
|
101
105
|
"endLine": info.lineRange.upperBound,
|
|
102
|
-
"contents":
|
|
103
|
-
"language": info.language
|
|
106
|
+
"contents": joinedContents,
|
|
107
|
+
"language": info.language ?? "",
|
|
104
108
|
]
|
|
105
109
|
self.onLineSelection?(body)
|
|
106
110
|
self.onLineSelectionFabric?(
|
|
107
111
|
info.lineRange.lowerBound,
|
|
108
112
|
info.lineRange.upperBound,
|
|
109
|
-
|
|
113
|
+
joinedContents,
|
|
110
114
|
info.language
|
|
111
115
|
)
|
|
112
116
|
}
|
|
@@ -129,11 +133,12 @@ import MarkdownView
|
|
|
129
133
|
let size = markdownTextView.intrinsicContentSize
|
|
130
134
|
guard size.height > 0, size != lastContentSize else { return }
|
|
131
135
|
lastContentSize = size
|
|
132
|
-
let
|
|
133
|
-
|
|
134
|
-
|
|
136
|
+
let w = Double(size.width), h = Double(size.height)
|
|
137
|
+
// Old arch: JS reconstructs { contentSize: { width, height } } from flat payload.
|
|
138
|
+
// Codegen cannot represent nested objects in event payloads, so we send flat fields.
|
|
139
|
+
let body: [AnyHashable: Any] = ["width": w, "height": h]
|
|
135
140
|
onContentSizeChange?(body)
|
|
136
|
-
onContentSizeChangeFabric?(
|
|
141
|
+
onContentSizeChangeFabric?(w, h)
|
|
137
142
|
}
|
|
138
143
|
|
|
139
144
|
// MARK: - Fabric entry-points (called from RNMarkdownViewComponentView.mm)
|
|
@@ -94,25 +94,24 @@ using namespace facebook::react;
|
|
|
94
94
|
emitter->onImagePress(event);
|
|
95
95
|
};
|
|
96
96
|
|
|
97
|
-
|
|
97
|
+
// contents is a newline-joined string (codegen cannot handle ReadonlyArray in events).
|
|
98
|
+
_markdownView.onLineSelectionFabric = ^(NSInteger start, NSInteger end, NSString *contents, NSString * _Nullable language) {
|
|
98
99
|
if (!emitter) return;
|
|
99
100
|
RNMarkdownViewEventEmitter::OnLineSelection event;
|
|
100
101
|
event.startLine = static_cast<int>(start);
|
|
101
102
|
event.endLine = static_cast<int>(end);
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
105
|
-
event.language = language ? std::string(language.UTF8String) : "";
|
|
103
|
+
event.contents = std::string(contents.UTF8String ?: "");
|
|
104
|
+
event.language = language ? std::string(language.UTF8String) : "";
|
|
106
105
|
emitter->onLineSelection(event);
|
|
107
106
|
};
|
|
108
107
|
|
|
109
108
|
_markdownView.onContentSizeChangeFabric = ^(double width, double height) {
|
|
110
109
|
if (!emitter) return;
|
|
110
|
+
// Flat fields — codegen does not support nested objects in event payloads.
|
|
111
|
+
// JS reconstructs { contentSize: { width, height } } from these.
|
|
111
112
|
RNMarkdownViewEventEmitter::OnContentSizeChange event;
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
size.height = height;
|
|
115
|
-
event.contentSize = size;
|
|
113
|
+
event.width = width;
|
|
114
|
+
event.height = height;
|
|
116
115
|
emitter->onContentSizeChange(event);
|
|
117
116
|
};
|
|
118
117
|
}
|
|
@@ -101,12 +101,27 @@ function MarkdownViewInner({
|
|
|
101
101
|
|
|
102
102
|
// Re-serialize only when theme reference changes.
|
|
103
103
|
themeJSONRef.current = serializeTheme(theme);
|
|
104
|
-
const handleContentSizeChange = (0, _react.useCallback)(
|
|
104
|
+
const handleContentSizeChange = (0, _react.useCallback)(
|
|
105
|
+
// Native sends flat { width, height } (codegen cannot handle nested objects in events).
|
|
106
|
+
// We reconstruct the { contentSize: { width, height } } shape for the user-facing API.
|
|
107
|
+
e => {
|
|
105
108
|
const {
|
|
109
|
+
width,
|
|
106
110
|
height
|
|
107
|
-
} = e.nativeEvent
|
|
111
|
+
} = e.nativeEvent;
|
|
108
112
|
if (height > 0) setAutoHeight(height);
|
|
109
|
-
onContentSizeChange
|
|
113
|
+
if (onContentSizeChange) {
|
|
114
|
+
const patched = {
|
|
115
|
+
...e,
|
|
116
|
+
nativeEvent: {
|
|
117
|
+
contentSize: {
|
|
118
|
+
width,
|
|
119
|
+
height
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
onContentSizeChange(patched);
|
|
124
|
+
}
|
|
110
125
|
}, [onContentSizeChange]);
|
|
111
126
|
const handleLinkPress = (0, _react.useCallback)(e => {
|
|
112
127
|
onLinkPress?.(e);
|
|
@@ -114,8 +129,27 @@ function MarkdownViewInner({
|
|
|
114
129
|
const handleImagePress = (0, _react.useCallback)(e => {
|
|
115
130
|
onImagePress?.(e);
|
|
116
131
|
}, [onImagePress]);
|
|
117
|
-
const handleLineSelection = (0, _react.useCallback)(
|
|
118
|
-
|
|
132
|
+
const handleLineSelection = (0, _react.useCallback)(
|
|
133
|
+
// Native sends contents as a newline-joined string (codegen limitation).
|
|
134
|
+
// We split it back into an array before forwarding to the user callback.
|
|
135
|
+
e => {
|
|
136
|
+
if (!onLineSelection) return;
|
|
137
|
+
const {
|
|
138
|
+
startLine,
|
|
139
|
+
endLine,
|
|
140
|
+
contents: raw,
|
|
141
|
+
language
|
|
142
|
+
} = e.nativeEvent;
|
|
143
|
+
const patched = {
|
|
144
|
+
...e,
|
|
145
|
+
nativeEvent: {
|
|
146
|
+
startLine,
|
|
147
|
+
endLine,
|
|
148
|
+
contents: raw ? raw.split('\n') : [],
|
|
149
|
+
language: language || undefined
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
onLineSelection(patched);
|
|
119
153
|
}, [onLineSelection]);
|
|
120
154
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(NativeComponent, {
|
|
121
155
|
markdown: markdown,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","COMPONENT_NAME","NativeMarkdownView","Platform","OS","requireNativeComponent","serializeTheme","theme","undefined","JSON","stringify","MarkdownView","markdown","style","onLinkPress","onImagePress","onLineSelection","onContentSizeChange","__DEV__","console","warn","jsx","View","MarkdownViewInner","NativeComponent","autoHeight","setAutoHeight","useState","themeJSONRef","useRef","current","handleContentSizeChange","useCallback","height","nativeEvent","contentSize","handleLinkPress","handleImagePress","handleLineSelection","themeJSON","styles","h"],"sourceRoot":"../../src","sources":["MarkdownView.tsx"],"mappings":"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
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","COMPONENT_NAME","NativeMarkdownView","Platform","OS","requireNativeComponent","serializeTheme","theme","undefined","JSON","stringify","MarkdownView","markdown","style","onLinkPress","onImagePress","onLineSelection","onContentSizeChange","__DEV__","console","warn","jsx","View","MarkdownViewInner","NativeComponent","autoHeight","setAutoHeight","useState","themeJSONRef","useRef","current","handleContentSizeChange","useCallback","width","height","nativeEvent","patched","contentSize","handleLinkPress","handleImagePress","handleLineSelection","startLine","endLine","contents","raw","language","split","themeJSON","styles","h"],"sourceRoot":"../../src","sources":["MarkdownView.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -17,6 +17,8 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
|
|
|
17
17
|
* react-native/Libraries/Types/CodegenTypes.
|
|
18
18
|
*/
|
|
19
19
|
// ─── Codegen event payload types ─────────────────────────────────────────────
|
|
20
|
+
// Codegen does not support nested objects in event payloads.
|
|
21
|
+
// We flatten width/height and reconstruct { contentSize: { width, height } } on the JS side.
|
|
20
22
|
// ─── Native component props ───────────────────────────────────────────────────
|
|
21
23
|
var _default = exports.default = (0, _codegenNativeComponent.default)('RNMarkdownView');
|
|
22
24
|
//# sourceMappingURL=NativeMarkdownView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_codegenNativeComponent","_interopRequireDefault","require","e","__esModule","default","_default","exports","codegenNativeComponent"],"sourceRoot":"../../src","sources":["NativeMarkdownView.ts"],"mappings":";;;;;;AAgBA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAhB7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAUA;
|
|
1
|
+
{"version":3,"names":["_codegenNativeComponent","_interopRequireDefault","require","e","__esModule","default","_default","exports","codegenNativeComponent"],"sourceRoot":"../../src","sources":["NativeMarkdownView.ts"],"mappings":";;;;;;AAgBA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAhB7F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAUA;AAmBA;AACA;AAMA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GAoBe,IAAAG,+BAAsB,EACnC,gBACF,CAAC","ignoreList":[]}
|
|
@@ -96,12 +96,27 @@ function MarkdownViewInner({
|
|
|
96
96
|
|
|
97
97
|
// Re-serialize only when theme reference changes.
|
|
98
98
|
themeJSONRef.current = serializeTheme(theme);
|
|
99
|
-
const handleContentSizeChange = useCallback(
|
|
99
|
+
const handleContentSizeChange = useCallback(
|
|
100
|
+
// Native sends flat { width, height } (codegen cannot handle nested objects in events).
|
|
101
|
+
// We reconstruct the { contentSize: { width, height } } shape for the user-facing API.
|
|
102
|
+
e => {
|
|
100
103
|
const {
|
|
104
|
+
width,
|
|
101
105
|
height
|
|
102
|
-
} = e.nativeEvent
|
|
106
|
+
} = e.nativeEvent;
|
|
103
107
|
if (height > 0) setAutoHeight(height);
|
|
104
|
-
onContentSizeChange
|
|
108
|
+
if (onContentSizeChange) {
|
|
109
|
+
const patched = {
|
|
110
|
+
...e,
|
|
111
|
+
nativeEvent: {
|
|
112
|
+
contentSize: {
|
|
113
|
+
width,
|
|
114
|
+
height
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
onContentSizeChange(patched);
|
|
119
|
+
}
|
|
105
120
|
}, [onContentSizeChange]);
|
|
106
121
|
const handleLinkPress = useCallback(e => {
|
|
107
122
|
onLinkPress?.(e);
|
|
@@ -109,8 +124,27 @@ function MarkdownViewInner({
|
|
|
109
124
|
const handleImagePress = useCallback(e => {
|
|
110
125
|
onImagePress?.(e);
|
|
111
126
|
}, [onImagePress]);
|
|
112
|
-
const handleLineSelection = useCallback(
|
|
113
|
-
|
|
127
|
+
const handleLineSelection = useCallback(
|
|
128
|
+
// Native sends contents as a newline-joined string (codegen limitation).
|
|
129
|
+
// We split it back into an array before forwarding to the user callback.
|
|
130
|
+
e => {
|
|
131
|
+
if (!onLineSelection) return;
|
|
132
|
+
const {
|
|
133
|
+
startLine,
|
|
134
|
+
endLine,
|
|
135
|
+
contents: raw,
|
|
136
|
+
language
|
|
137
|
+
} = e.nativeEvent;
|
|
138
|
+
const patched = {
|
|
139
|
+
...e,
|
|
140
|
+
nativeEvent: {
|
|
141
|
+
startLine,
|
|
142
|
+
endLine,
|
|
143
|
+
contents: raw ? raw.split('\n') : [],
|
|
144
|
+
language: language || undefined
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
onLineSelection(patched);
|
|
114
148
|
}, [onLineSelection]);
|
|
115
149
|
return /*#__PURE__*/_jsx(NativeComponent, {
|
|
116
150
|
markdown: markdown,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","useRef","useState","Platform","requireNativeComponent","View","jsx","_jsx","COMPONENT_NAME","NativeMarkdownView","OS","serializeTheme","theme","undefined","JSON","stringify","MarkdownView","markdown","style","onLinkPress","onImagePress","onLineSelection","onContentSizeChange","__DEV__","console","warn","MarkdownViewInner","NativeComponent","autoHeight","setAutoHeight","themeJSONRef","current","handleContentSizeChange","e","height","nativeEvent","contentSize","handleLinkPress","handleImagePress","handleLineSelection","themeJSON","styles","h"],"sourceRoot":"../../src","sources":["MarkdownView.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAC5D,SAEEC,QAAQ,EACRC,sBAAsB,EAEtBC,IAAI,QACC,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAUtB;;AAEA,MAAMC,cAAc,GAAG,gBAAgB;;AAEvC;AACA;AACA;AACA;AACA;AACA,MAAMC,kBAAmD,GACvDN,QAAQ,CAACO,EAAE,KAAK,KAAK,GAAGN,sBAAsB,CAACI,cAAc,CAAC,GAAG,IAAI;;AAEvE;;AAEA,SAASG,cAAcA,CAACC,KAA+B,EAAsB;EAC3E,IAAI,CAACA,KAAK,EAAE,OAAOC,SAAS;EAC5B,IAAI;IACF,OAAOC,IAAI,CAACC,SAAS,CAACH,KAAK,CAAC;EAC9B,CAAC,CAAC,MAAM;IACN,OAAOC,SAAS;EAClB;AACF;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,YAAYA,CAAC;EAC3BC,QAAQ;EACRL,KAAK;EACLM,KAAK;EACLC,WAAW;EACXC,YAAY;EACZC,eAAe;EACfC;AACiB,CAAC,EAAE;EACpB,IAAInB,QAAQ,CAACO,EAAE,KAAK,KAAK,IAAID,kBAAkB,KAAK,IAAI,EAAE;IACxD,IAAIc,OAAO,EAAE;MACXC,OAAO,CAACC,IAAI,CAAC,2CAA2C,CAAC;IAC3D;IACA,oBAAOlB,IAAA,CAACF,IAAI;MAACa,KAAK,EAAEA;IAAM,CAAE,CAAC;EAC/B;;EAEA;EACA,oBACEX,IAAA,CAACmB,iBAAiB;IAChBT,QAAQ,EAAEA,QAAS;IACnBL,KAAK,EAAEA,KAAM;IACbM,KAAK,EAAEA,KAAM;IACbC,WAAW,EAAEA,WAAY;IACzBC,YAAY,EAAEA,YAAa;IAC3BC,eAAe,EAAEA,eAAgB;IACjCC,mBAAmB,EAAEA,mBAAoB;IACzCK,eAAe,EAAElB;EAAmB,CACrC,CAAC;AAEN;;AAEA;;AAKA,SAASiB,iBAAiBA,CAAC;EACzBT,QAAQ;EACRL,KAAK;EACLM,KAAK;EACLC,WAAW;EACXC,YAAY;EACZC,eAAe;EACfC,mBAAmB;EACnBK;AACU,CAAC,EAAE;EACb,MAAM,CAACC,UAAU,EAAEC,aAAa,CAAC,GAAG3B,QAAQ,CAAqBW,SAAS,CAAC;EAC3E,MAAMiB,YAAY,GAAG7B,MAAM,CAAqBY,SAAS,CAAC;;EAE1D;EACAiB,YAAY,CAACC,OAAO,GAAGpB,cAAc,CAACC,KAAK,CAAC;EAE5C,MAAMoB,uBAAuB,GAAGhC,WAAW,
|
|
1
|
+
{"version":3,"names":["React","useCallback","useRef","useState","Platform","requireNativeComponent","View","jsx","_jsx","COMPONENT_NAME","NativeMarkdownView","OS","serializeTheme","theme","undefined","JSON","stringify","MarkdownView","markdown","style","onLinkPress","onImagePress","onLineSelection","onContentSizeChange","__DEV__","console","warn","MarkdownViewInner","NativeComponent","autoHeight","setAutoHeight","themeJSONRef","current","handleContentSizeChange","e","width","height","nativeEvent","patched","contentSize","handleLinkPress","handleImagePress","handleLineSelection","startLine","endLine","contents","raw","language","split","themeJSON","styles","h"],"sourceRoot":"../../src","sources":["MarkdownView.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -15,6 +15,9 @@ import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNati
|
|
|
15
15
|
|
|
16
16
|
// ─── Codegen event payload types ─────────────────────────────────────────────
|
|
17
17
|
|
|
18
|
+
// Codegen does not support nested objects in event payloads.
|
|
19
|
+
// We flatten width/height and reconstruct { contentSize: { width, height } } on the JS side.
|
|
20
|
+
|
|
18
21
|
// ─── Native component props ───────────────────────────────────────────────────
|
|
19
22
|
|
|
20
23
|
export default codegenNativeComponent('RNMarkdownView');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["codegenNativeComponent"],"sourceRoot":"../../src","sources":["NativeMarkdownView.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA,OAAOA,sBAAsB,MAAM,yDAAyD;;AAG5F;;
|
|
1
|
+
{"version":3,"names":["codegenNativeComponent"],"sourceRoot":"../../src","sources":["NativeMarkdownView.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOA,OAAOA,sBAAsB,MAAM,yDAAyD;;AAG5F;;AAmBA;AACA;;AAMA;;AAoBA,eAAeA,sBAAsB,CACnC,gBACF,CAAC","ignoreList":[]}
|
|
@@ -21,16 +21,14 @@ export type OnImagePressEvent = Readonly<{
|
|
|
21
21
|
export type OnLineSelectionEvent = Readonly<{
|
|
22
22
|
startLine: Int32;
|
|
23
23
|
endLine: Int32;
|
|
24
|
-
|
|
24
|
+
/** Newline-joined text of the selected lines. Split on '\n' to get individual lines. */
|
|
25
|
+
contents: string;
|
|
25
26
|
language: string;
|
|
26
27
|
}>;
|
|
27
|
-
export type
|
|
28
|
+
export type OnContentSizeChangeEvent = Readonly<{
|
|
28
29
|
width: Double;
|
|
29
30
|
height: Double;
|
|
30
31
|
}>;
|
|
31
|
-
export type OnContentSizeChangeEvent = Readonly<{
|
|
32
|
-
contentSize: OnContentSizeChangeContentSize;
|
|
33
|
-
}>;
|
|
34
32
|
export interface NativeProps extends ViewProps {
|
|
35
33
|
/** Raw markdown string to render. */
|
|
36
34
|
markdown?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeMarkdownView.d.ts","sourceRoot":"","sources":["../../../src/NativeMarkdownView.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EACV,kBAAkB,EAClB,MAAM,EACN,KAAK,EACN,MAAM,2CAA2C,CAAC;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIlD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,SAAS,EAAE,KAAK,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC;IACf,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"NativeMarkdownView.d.ts","sourceRoot":"","sources":["../../../src/NativeMarkdownView.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EACV,kBAAkB,EAClB,MAAM,EACN,KAAK,EACN,MAAM,2CAA2C,CAAC;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAIlD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,SAAS,EAAE,KAAK,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC;IACf,wFAAwF;IACxF,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAIH,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAIH,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,qCAAqC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IACnD,2BAA2B;IAC3B,YAAY,CAAC,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;IACrD,8BAA8B;IAC9B,eAAe,CAAC,EAAE,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;IAC3D,kCAAkC;IAClC,mBAAmB,CAAC,EAAE,kBAAkB,CAAC,wBAAwB,CAAC,CAAC;CACpE;wBAII,aAAa,CAAC,WAAW,CAAC;AAF/B,wBAEgC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tinglinzh/react-native-markdownview",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "React Native wrapper for MarkdownView — native iOS/macOS markdown rendering with GFM, syntax highlighting, LaTeX math, and unified diff support",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
package/src/MarkdownView.tsx
CHANGED
|
@@ -114,10 +114,18 @@ function MarkdownViewInner({
|
|
|
114
114
|
themeJSONRef.current = serializeTheme(theme);
|
|
115
115
|
|
|
116
116
|
const handleContentSizeChange = useCallback(
|
|
117
|
-
(
|
|
118
|
-
|
|
117
|
+
// Native sends flat { width, height } (codegen cannot handle nested objects in events).
|
|
118
|
+
// We reconstruct the { contentSize: { width, height } } shape for the user-facing API.
|
|
119
|
+
(e: NativeSyntheticEvent<{ width: number; height: number }>) => {
|
|
120
|
+
const { width, height } = e.nativeEvent;
|
|
119
121
|
if (height > 0) setAutoHeight(height);
|
|
120
|
-
onContentSizeChange
|
|
122
|
+
if (onContentSizeChange) {
|
|
123
|
+
const patched = {
|
|
124
|
+
...e,
|
|
125
|
+
nativeEvent: { contentSize: { width, height } } satisfies ContentSizeChangeEvent,
|
|
126
|
+
};
|
|
127
|
+
onContentSizeChange(patched as unknown as NativeSyntheticEvent<ContentSizeChangeEvent>);
|
|
128
|
+
}
|
|
121
129
|
},
|
|
122
130
|
[onContentSizeChange],
|
|
123
131
|
);
|
|
@@ -137,8 +145,21 @@ function MarkdownViewInner({
|
|
|
137
145
|
);
|
|
138
146
|
|
|
139
147
|
const handleLineSelection = useCallback(
|
|
140
|
-
(
|
|
141
|
-
|
|
148
|
+
// Native sends contents as a newline-joined string (codegen limitation).
|
|
149
|
+
// We split it back into an array before forwarding to the user callback.
|
|
150
|
+
(e: NativeSyntheticEvent<{ startLine: number; endLine: number; contents: string; language: string }>) => {
|
|
151
|
+
if (!onLineSelection) return;
|
|
152
|
+
const { startLine, endLine, contents: raw, language } = e.nativeEvent;
|
|
153
|
+
const patched = {
|
|
154
|
+
...e,
|
|
155
|
+
nativeEvent: {
|
|
156
|
+
startLine,
|
|
157
|
+
endLine,
|
|
158
|
+
contents: raw ? raw.split('\n') : [],
|
|
159
|
+
language: language || undefined,
|
|
160
|
+
} satisfies LineSelectionEvent,
|
|
161
|
+
};
|
|
162
|
+
onLineSelection(patched as unknown as NativeSyntheticEvent<LineSelectionEvent>);
|
|
142
163
|
},
|
|
143
164
|
[onLineSelection],
|
|
144
165
|
);
|
|
@@ -31,19 +31,18 @@ export type OnImagePressEvent = Readonly<{
|
|
|
31
31
|
export type OnLineSelectionEvent = Readonly<{
|
|
32
32
|
startLine: Int32;
|
|
33
33
|
endLine: Int32;
|
|
34
|
-
|
|
34
|
+
/** Newline-joined text of the selected lines. Split on '\n' to get individual lines. */
|
|
35
|
+
contents: string;
|
|
35
36
|
language: string; // empty string when unknown
|
|
36
37
|
}>;
|
|
37
38
|
|
|
38
|
-
|
|
39
|
+
// Codegen does not support nested objects in event payloads.
|
|
40
|
+
// We flatten width/height and reconstruct { contentSize: { width, height } } on the JS side.
|
|
41
|
+
export type OnContentSizeChangeEvent = Readonly<{
|
|
39
42
|
width: Double;
|
|
40
43
|
height: Double;
|
|
41
44
|
}>;
|
|
42
45
|
|
|
43
|
-
export type OnContentSizeChangeEvent = Readonly<{
|
|
44
|
-
contentSize: OnContentSizeChangeContentSize;
|
|
45
|
-
}>;
|
|
46
|
-
|
|
47
46
|
// ─── Native component props ───────────────────────────────────────────────────
|
|
48
47
|
|
|
49
48
|
export interface NativeProps extends ViewProps {
|