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.
Files changed (39) hide show
  1. package/LICENSE +21 -0
  2. package/MarkdownNative.podspec +19 -0
  3. package/README.md +109 -0
  4. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  5. package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
  6. package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
  7. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  8. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  9. package/android/.gradle/8.9/gc.properties +0 -0
  10. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  11. package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
  12. package/android/.gradle/vcs-1/gc.properties +0 -0
  13. package/android/build.gradle +36 -0
  14. package/android/src/main/AndroidManifest.xml +2 -0
  15. package/android/src/main/java/com/markdownnative/MarkdownPackage.java +25 -0
  16. package/android/src/main/java/com/markdownnative/MarkdownView.java +516 -0
  17. package/android/src/main/java/com/markdownnative/MarkdownViewManager.java +107 -0
  18. package/ios/MarkdownView.swift +771 -0
  19. package/ios/MarkdownViewManager.m +27 -0
  20. package/ios/MarkdownViewManager.swift +20 -0
  21. package/lib/commonjs/index.js +97 -0
  22. package/lib/commonjs/index.js.map +1 -0
  23. package/lib/commonjs/package.json +1 -0
  24. package/lib/commonjs/types.js +154 -0
  25. package/lib/commonjs/types.js.map +1 -0
  26. package/lib/index.d.ts +26 -0
  27. package/lib/index.js +97 -0
  28. package/lib/module/index.js +80 -0
  29. package/lib/module/index.js.map +1 -0
  30. package/lib/module/types.js +153 -0
  31. package/lib/module/types.js.map +1 -0
  32. package/lib/typescript/index.d.ts +30 -0
  33. package/lib/typescript/index.d.ts.map +1 -0
  34. package/lib/typescript/types.d.ts +80 -0
  35. package/lib/typescript/types.d.ts.map +1 -0
  36. package/package.json +92 -0
  37. package/react-native.config.js +11 -0
  38. package/src/index.tsx +117 -0
  39. 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