@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.
@@ -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
- var onLineSelectionFabric: ((_ start: Int, _ end: Int, _ contents: [String], _ language: String?) -> Void)?
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": info.contents,
103
- "language": info.language as Any,
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
- info.contents,
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 body: [AnyHashable: Any] = [
133
- "contentSize": ["width": Double(size.width), "height": Double(size.height)]
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?(Double(size.width), Double(size.height))
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
- _markdownView.onLineSelectionFabric = ^(NSInteger start, NSInteger end, NSArray<NSString *> *contents, NSString * _Nullable language) {
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
- for (NSString *line in contents) {
103
- event.contents.push_back(std::string(line.UTF8String ?: ""));
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
- RNMarkdownViewEventEmitter::OnContentSizeChangeContentSize size;
113
- size.width = width;
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)(e => {
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.contentSize;
111
+ } = e.nativeEvent;
108
112
  if (height > 0) setAutoHeight(height);
109
- onContentSizeChange?.(e);
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)(e => {
118
- onLineSelection?.(e);
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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","ignoreList":[]}
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;AA2BA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GAoBe,IAAAG,+BAAsB,EACnC,gBACF,CAAC","ignoreList":[]}
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(e => {
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.contentSize;
106
+ } = e.nativeEvent;
103
107
  if (height > 0) setAutoHeight(height);
104
- onContentSizeChange?.(e);
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(e => {
113
- onLineSelection?.(e);
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":"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","ignoreList":[]}
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;;AA2BA;;AAoBA,eAAeA,sBAAsB,CACnC,gBACF,CAAC","ignoreList":[]}
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
- contents: ReadonlyArray<string>;
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 OnContentSizeChangeContentSize = Readonly<{
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,aAAa,CAAC,MAAM,CAAC,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAEH,MAAM,MAAM,8BAA8B,GAAG,QAAQ,CAAC;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C,WAAW,EAAE,8BAA8B,CAAC;CAC7C,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"}
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.1.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",
@@ -114,10 +114,18 @@ function MarkdownViewInner({
114
114
  themeJSONRef.current = serializeTheme(theme);
115
115
 
116
116
  const handleContentSizeChange = useCallback(
117
- (e: NativeSyntheticEvent<ContentSizeChangeEvent>) => {
118
- const { height } = e.nativeEvent.contentSize;
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?.(e);
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
- (e: NativeSyntheticEvent<LineSelectionEvent>) => {
141
- onLineSelection?.(e);
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
- contents: ReadonlyArray<string>;
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
- export type OnContentSizeChangeContentSize = Readonly<{
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 {