@tinglinzh/react-native-markdownview 0.2.0 → 0.4.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 +5 -4
- package/ios/RNMarkdownViewComponentView.mm +4 -4
- package/ios/RNMarkdownViewManager.m +27 -7
- package/lib/commonjs/MarkdownView.js +18 -3
- 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 +18 -3
- 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 +1 -4
- package/lib/typescript/src/NativeMarkdownView.d.ts.map +1 -1
- package/package.json +1 -1
- package/react-native-markdownview.podspec +4 -4
- package/src/MarkdownView.tsx +11 -3
- package/src/NativeMarkdownView.ts +3 -5
- package/ios/RNMarkdownViewManager.swift +0 -16
- package/ios/react-native-markdownview-Bridging-Header.h +0 -12
package/ios/RNMarkdownView.swift
CHANGED
|
@@ -133,11 +133,12 @@ import MarkdownView
|
|
|
133
133
|
let size = markdownTextView.intrinsicContentSize
|
|
134
134
|
guard size.height > 0, size != lastContentSize else { return }
|
|
135
135
|
lastContentSize = size
|
|
136
|
-
let
|
|
137
|
-
|
|
138
|
-
|
|
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]
|
|
139
140
|
onContentSizeChange?(body)
|
|
140
|
-
onContentSizeChangeFabric?(
|
|
141
|
+
onContentSizeChangeFabric?(w, h)
|
|
141
142
|
}
|
|
142
143
|
|
|
143
144
|
// MARK: - Fabric entry-points (called from RNMarkdownViewComponentView.mm)
|
|
@@ -107,11 +107,11 @@ using namespace facebook::react;
|
|
|
107
107
|
|
|
108
108
|
_markdownView.onContentSizeChangeFabric = ^(double width, double height) {
|
|
109
109
|
if (!emitter) return;
|
|
110
|
+
// Flat fields — codegen does not support nested objects in event payloads.
|
|
111
|
+
// JS reconstructs { contentSize: { width, height } } from these.
|
|
110
112
|
RNMarkdownViewEventEmitter::OnContentSizeChange event;
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
size.height = height;
|
|
114
|
-
event.contentSize = size;
|
|
113
|
+
event.width = width;
|
|
114
|
+
event.height = height;
|
|
115
115
|
emitter->onContentSizeChange(event);
|
|
116
116
|
};
|
|
117
117
|
}
|
|
@@ -1,13 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Old Architecture
|
|
2
|
+
* Old Architecture view manager — pure Objective-C implementation.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Framework targets don't support bridging headers, so we:
|
|
5
|
+
* 1. Keep this file as ObjC (no bridging header needed).
|
|
6
|
+
* 2. Import the auto-generated Swift header to access RNMarkdownView.
|
|
7
|
+
* 3. Delete the separate RNMarkdownViewManager.swift file.
|
|
8
|
+
*
|
|
9
|
+
* The Swift-generated header is emitted by the compiler as
|
|
10
|
+
* "react_native_markdownview-Swift.h" (pod name, hyphens → underscores).
|
|
7
11
|
*/
|
|
8
12
|
#import <React/RCTViewManager.h>
|
|
13
|
+
#import "react_native_markdownview-Swift.h"
|
|
14
|
+
|
|
15
|
+
@interface RNMarkdownViewManager : RCTViewManager
|
|
16
|
+
@end
|
|
17
|
+
|
|
18
|
+
@implementation RNMarkdownViewManager
|
|
19
|
+
|
|
20
|
+
RCT_EXPORT_MODULE()
|
|
21
|
+
|
|
22
|
+
- (UIView *)view
|
|
23
|
+
{
|
|
24
|
+
return [[RNMarkdownView alloc] init];
|
|
25
|
+
}
|
|
9
26
|
|
|
10
|
-
|
|
27
|
+
+ (BOOL)requiresMainQueueSetup
|
|
28
|
+
{
|
|
29
|
+
return YES;
|
|
30
|
+
}
|
|
11
31
|
|
|
12
32
|
// ─── Content ────────────────────────────────────────────────────────────────
|
|
13
33
|
/// Raw markdown string.
|
|
@@ -24,11 +44,11 @@ RCT_EXPORT_VIEW_PROPERTY(onLinkPress, RCTDirectEventBlock)
|
|
|
24
44
|
RCT_EXPORT_VIEW_PROPERTY(onImagePress, RCTDirectEventBlock)
|
|
25
45
|
|
|
26
46
|
/// Fires when lines are selected in a code block.
|
|
27
|
-
/// Payload: { startLine: number, endLine: number, contents: string
|
|
47
|
+
/// Payload: { startLine: number, endLine: number, contents: string, language: string }
|
|
28
48
|
RCT_EXPORT_VIEW_PROPERTY(onLineSelection, RCTDirectEventBlock)
|
|
29
49
|
|
|
30
50
|
/// Fires when the intrinsic content height changes.
|
|
31
|
-
/// Payload: {
|
|
51
|
+
/// Payload: { width: number, height: number }
|
|
32
52
|
RCT_EXPORT_VIEW_PROPERTY(onContentSizeChange, RCTDirectEventBlock)
|
|
33
53
|
|
|
34
54
|
@end
|
|
@@ -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);
|
|
@@ -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","startLine","endLine","contents","raw","language","
|
|
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);
|
|
@@ -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","startLine","endLine","contents","raw","language","
|
|
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":[]}
|
|
@@ -25,13 +25,10 @@ export type OnLineSelectionEvent = Readonly<{
|
|
|
25
25
|
contents: string;
|
|
26
26
|
language: string;
|
|
27
27
|
}>;
|
|
28
|
-
export type
|
|
28
|
+
export type OnContentSizeChangeEvent = Readonly<{
|
|
29
29
|
width: Double;
|
|
30
30
|
height: Double;
|
|
31
31
|
}>;
|
|
32
|
-
export type OnContentSizeChangeEvent = Readonly<{
|
|
33
|
-
contentSize: OnContentSizeChangeContentSize;
|
|
34
|
-
}>;
|
|
35
32
|
export interface NativeProps extends ViewProps {
|
|
36
33
|
/** Raw markdown string to render. */
|
|
37
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,wFAAwF;IACxF,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;
|
|
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.4.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",
|
|
@@ -15,11 +15,11 @@ Pod::Spec.new do |s|
|
|
|
15
15
|
s.source_files = "ios/**/*.{h,m,mm,swift}"
|
|
16
16
|
s.swift_version = "5.9"
|
|
17
17
|
|
|
18
|
-
#
|
|
18
|
+
# Allow the Swift compiler to find the MarkdownView module when it is added
|
|
19
|
+
# to the host app via Xcode's Swift Package integration.
|
|
20
|
+
# Framework targets cannot use bridging headers; ObjC↔Swift interop is handled
|
|
21
|
+
# via the auto-generated "-Swift.h" header imported in RNMarkdownViewManager.m.
|
|
19
22
|
s.pod_target_xcconfig = {
|
|
20
|
-
"SWIFT_OBJC_BRIDGING_HEADER" => "$(PODS_TARGET_SRCROOT)/ios/react-native-markdownview-Bridging-Header.h",
|
|
21
|
-
# Allow the Swift compiler to find the MarkdownView Swift module when it is
|
|
22
|
-
# added to the host app via SPM (Xcode embeds SPM-built modules here).
|
|
23
23
|
"SWIFT_INCLUDE_PATHS" => "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/PackageFrameworks/**",
|
|
24
24
|
}
|
|
25
25
|
|
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
|
);
|
|
@@ -36,15 +36,13 @@ export type OnLineSelectionEvent = Readonly<{
|
|
|
36
36
|
language: string; // empty string when unknown
|
|
37
37
|
}>;
|
|
38
38
|
|
|
39
|
-
|
|
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<{
|
|
40
42
|
width: Double;
|
|
41
43
|
height: Double;
|
|
42
44
|
}>;
|
|
43
45
|
|
|
44
|
-
export type OnContentSizeChangeEvent = Readonly<{
|
|
45
|
-
contentSize: OnContentSizeChangeContentSize;
|
|
46
|
-
}>;
|
|
47
|
-
|
|
48
46
|
// ─── Native component props ───────────────────────────────────────────────────
|
|
49
47
|
|
|
50
48
|
export interface NativeProps extends ViewProps {
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import React
|
|
2
|
-
import UIKit
|
|
3
|
-
|
|
4
|
-
/// Old Architecture view manager.
|
|
5
|
-
/// The ObjC bridge in RNMarkdownViewManager.m exports props and this class.
|
|
6
|
-
@objc(RNMarkdownViewManager)
|
|
7
|
-
final class RNMarkdownViewManager: RCTViewManager {
|
|
8
|
-
|
|
9
|
-
override func view() -> UIView! {
|
|
10
|
-
RNMarkdownView()
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
override static func requiresMainQueueSetup() -> Bool {
|
|
14
|
-
true
|
|
15
|
-
}
|
|
16
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Bridging header for Swift ↔ Objective-C interop within this pod.
|
|
3
|
-
*
|
|
4
|
-
* The CocoaPods build system picks up SWIFT_OBJC_BRIDGING_HEADER via
|
|
5
|
-
* the pod_target_xcconfig in the podspec and makes these React Native
|
|
6
|
-
* Objective-C headers visible to all Swift source files in the pod.
|
|
7
|
-
*/
|
|
8
|
-
#import <React/RCTViewManager.h>
|
|
9
|
-
#import <React/RCTBridgeModule.h>
|
|
10
|
-
#import <React/RCTEventEmitter.h>
|
|
11
|
-
#import <React/RCTView.h>
|
|
12
|
-
#import <React/RCTUIManager.h>
|