react-native-jet-markdown 0.2.0-beta.7

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 (157) hide show
  1. package/JetMarkdown.podspec +42 -0
  2. package/LICENSE +20 -0
  3. package/README.md +247 -0
  4. package/android/CMakeLists.txt +52 -0
  5. package/android/build.gradle +55 -0
  6. package/android/src/main/AndroidManifest.xml +2 -0
  7. package/android/src/main/cpp/JniBindings.cpp +243 -0
  8. package/android/src/main/java/com/jetmarkdown/JetMarkdownNative.kt +114 -0
  9. package/android/src/main/java/com/jetmarkdown/JetMarkdownPackage.kt +22 -0
  10. package/android/src/main/java/com/jetmarkdown/JetMarkdownView.kt +235 -0
  11. package/android/src/main/java/com/jetmarkdown/JetMarkdownViewManager.kt +75 -0
  12. package/android/src/main/java/com/jetmarkdown/editor/EditorSpans.kt +217 -0
  13. package/android/src/main/java/com/jetmarkdown/editor/JetMarkdownEditorManager.kt +224 -0
  14. package/android/src/main/java/com/jetmarkdown/editor/JetMarkdownEditorView.kt +1736 -0
  15. package/android/src/main/java/com/jetmarkdown/measure/MarkdownMeasurer.kt +54 -0
  16. package/android/src/main/java/com/jetmarkdown/parser/AstDecoder.kt +59 -0
  17. package/android/src/main/java/com/jetmarkdown/parser/MdNode.kt +43 -0
  18. package/android/src/main/java/com/jetmarkdown/render/ContentCache.kt +53 -0
  19. package/android/src/main/java/com/jetmarkdown/render/RenderedContent.kt +318 -0
  20. package/android/src/main/java/com/jetmarkdown/render/SpannableRenderer.kt +658 -0
  21. package/android/src/main/java/com/jetmarkdown/render/spans/ChipSpan.kt +17 -0
  22. package/android/src/main/java/com/jetmarkdown/render/spans/InteractiveSpans.kt +11 -0
  23. package/android/src/main/java/com/jetmarkdown/render/spans/MarkdownLineHeightSpan.kt +59 -0
  24. package/android/src/main/java/com/jetmarkdown/render/spans/RunSpan.kt +40 -0
  25. package/android/src/main/java/com/jetmarkdown/style/Fonts.kt +34 -0
  26. package/android/src/main/java/com/jetmarkdown/style/LayoutStyleSpec.kt +71 -0
  27. package/android/src/main/java/com/jetmarkdown/style/PlatformColorResolver.kt +77 -0
  28. package/android/src/main/java/com/jetmarkdown/style/StyleConfig.kt +80 -0
  29. package/android/src/main/java/com/jetmarkdown/style/TextStyleSpec.kt +61 -0
  30. package/android/src/main/java/com/jetmarkdown/views/BlockStackView.kt +292 -0
  31. package/android/src/main/java/com/jetmarkdown/views/BlockTextView.kt +378 -0
  32. package/android/src/main/java/com/jetmarkdown/views/BoxDrawing.kt +50 -0
  33. package/android/src/main/java/com/jetmarkdown/views/MarkdownHost.kt +12 -0
  34. package/android/src/main/java/com/jetmarkdown/views/MarkdownImageView.kt +113 -0
  35. package/android/src/main/java/com/jetmarkdown/views/NestedHorizontalScrollView.kt +87 -0
  36. package/android/src/main/java/com/jetmarkdown/views/TableBlockView.kt +139 -0
  37. package/cpp/core/Ast.h +85 -0
  38. package/cpp/core/AstJson.cpp +129 -0
  39. package/cpp/core/AstJson.h +12 -0
  40. package/cpp/core/AstSerializer.cpp +40 -0
  41. package/cpp/core/AstSerializer.h +21 -0
  42. package/cpp/core/AstToMarkdown.cpp +549 -0
  43. package/cpp/core/AstToMarkdown.h +16 -0
  44. package/cpp/core/EditorRuns.cpp +640 -0
  45. package/cpp/core/EditorRuns.h +94 -0
  46. package/cpp/core/EditorText.cpp +15 -0
  47. package/cpp/core/EditorText.h +18 -0
  48. package/cpp/core/InlineExtensions.cpp +305 -0
  49. package/cpp/core/InlineExtensions.h +17 -0
  50. package/cpp/core/Parser.cpp +470 -0
  51. package/cpp/core/Parser.h +16 -0
  52. package/cpp/core/Preprocess.cpp +181 -0
  53. package/cpp/core/Preprocess.h +14 -0
  54. package/cpp/md4c/LICENSE +22 -0
  55. package/cpp/md4c/VERSION +1 -0
  56. package/cpp/md4c/md4c.c +6462 -0
  57. package/cpp/md4c/md4c.h +407 -0
  58. package/cpp/react/JetMarkdownEditorShadowNode.cpp +54 -0
  59. package/cpp/react/JetMarkdownEditorShadowNode.h +55 -0
  60. package/cpp/react/JetMarkdownEditorState.h +35 -0
  61. package/cpp/react/JetMarkdownMeasurer.cpp +32 -0
  62. package/cpp/react/JetMarkdownMeasurer.h +41 -0
  63. package/cpp/react/JetMarkdownShadowNode.cpp +100 -0
  64. package/cpp/react/JetMarkdownShadowNode.h +53 -0
  65. package/cpp/react/JetMarkdownState.h +52 -0
  66. package/cpp/react/override/react/renderer/components/JetMarkdownViewSpec/ComponentDescriptors.h +21 -0
  67. package/cpp/tests/parser_tests.cpp +662 -0
  68. package/cpp/tests/run_tests.sh +25 -0
  69. package/ios/JetMarkdownView.h +14 -0
  70. package/ios/JetMarkdownView.mm +468 -0
  71. package/ios/editor/JetMarkdownEditor.h +12 -0
  72. package/ios/editor/JetMarkdownEditor.mm +2002 -0
  73. package/ios/measure/JMDMarkdownMeasurer.h +22 -0
  74. package/ios/measure/JMDMarkdownMeasurer.mm +38 -0
  75. package/ios/render/JMDBlock.h +97 -0
  76. package/ios/render/JMDBlock.m +28 -0
  77. package/ios/render/JMDBlockRenderer.h +17 -0
  78. package/ios/render/JMDBlockRenderer.mm +852 -0
  79. package/ios/render/JMDContentCache.h +17 -0
  80. package/ios/render/JMDContentCache.mm +42 -0
  81. package/ios/render/JMDRenderedContent.h +35 -0
  82. package/ios/render/JMDRenderedContent.mm +274 -0
  83. package/ios/style/JMDFontScale.h +33 -0
  84. package/ios/style/JMDLayoutStyle.h +37 -0
  85. package/ios/style/JMDLayoutStyle.mm +68 -0
  86. package/ios/style/JMDStyleConfig.h +39 -0
  87. package/ios/style/JMDStyleConfig.mm +111 -0
  88. package/ios/style/JMDTextStyle.h +25 -0
  89. package/ios/style/JMDTextStyle.mm +68 -0
  90. package/ios/views/JMDBlockStackView.h +18 -0
  91. package/ios/views/JMDBlockStackView.m +97 -0
  92. package/ios/views/JMDBlockTextView.h +24 -0
  93. package/ios/views/JMDBlockTextView.m +340 -0
  94. package/ios/views/JMDBoxViews.h +33 -0
  95. package/ios/views/JMDBoxViews.m +292 -0
  96. package/ios/views/JMDImageView.h +19 -0
  97. package/ios/views/JMDImageView.m +68 -0
  98. package/ios/views/JMDMarkdownHost.h +16 -0
  99. package/ios/views/JMDTableView.h +16 -0
  100. package/ios/views/JMDTableView.m +172 -0
  101. package/lib/module/JetMarkdownEditor.js +85 -0
  102. package/lib/module/JetMarkdownEditor.js.map +1 -0
  103. package/lib/module/JetMarkdownEditor.native.js +244 -0
  104. package/lib/module/JetMarkdownEditor.native.js.map +1 -0
  105. package/lib/module/JetMarkdownEditorNativeComponent.ts +173 -0
  106. package/lib/module/JetMarkdownView.js +19 -0
  107. package/lib/module/JetMarkdownView.js.map +1 -0
  108. package/lib/module/JetMarkdownView.native.js +44 -0
  109. package/lib/module/JetMarkdownView.native.js.map +1 -0
  110. package/lib/module/JetMarkdownViewNativeComponent.ts +35 -0
  111. package/lib/module/defaultStyles.js +122 -0
  112. package/lib/module/defaultStyles.js.map +1 -0
  113. package/lib/module/index.js +9 -0
  114. package/lib/module/index.js.map +1 -0
  115. package/lib/module/package.json +1 -0
  116. package/lib/module/serializeStyles.js +259 -0
  117. package/lib/module/serializeStyles.js.map +1 -0
  118. package/lib/module/types.js +4 -0
  119. package/lib/module/types.js.map +1 -0
  120. package/lib/module/useJetMarkdownEditor.js +41 -0
  121. package/lib/module/useJetMarkdownEditor.js.map +1 -0
  122. package/lib/typescript/package.json +1 -0
  123. package/lib/typescript/src/JetMarkdownEditor.d.ts +6 -0
  124. package/lib/typescript/src/JetMarkdownEditor.d.ts.map +1 -0
  125. package/lib/typescript/src/JetMarkdownEditor.native.d.ts +6 -0
  126. package/lib/typescript/src/JetMarkdownEditor.native.d.ts.map +1 -0
  127. package/lib/typescript/src/JetMarkdownEditorNativeComponent.d.ts +105 -0
  128. package/lib/typescript/src/JetMarkdownEditorNativeComponent.d.ts.map +1 -0
  129. package/lib/typescript/src/JetMarkdownView.d.ts +3 -0
  130. package/lib/typescript/src/JetMarkdownView.d.ts.map +1 -0
  131. package/lib/typescript/src/JetMarkdownView.native.d.ts +3 -0
  132. package/lib/typescript/src/JetMarkdownView.native.d.ts.map +1 -0
  133. package/lib/typescript/src/JetMarkdownViewNativeComponent.d.ts +28 -0
  134. package/lib/typescript/src/JetMarkdownViewNativeComponent.d.ts.map +1 -0
  135. package/lib/typescript/src/defaultStyles.d.ts +20 -0
  136. package/lib/typescript/src/defaultStyles.d.ts.map +1 -0
  137. package/lib/typescript/src/index.d.ts +7 -0
  138. package/lib/typescript/src/index.d.ts.map +1 -0
  139. package/lib/typescript/src/serializeStyles.d.ts +34 -0
  140. package/lib/typescript/src/serializeStyles.d.ts.map +1 -0
  141. package/lib/typescript/src/types.d.ts +352 -0
  142. package/lib/typescript/src/types.d.ts.map +1 -0
  143. package/lib/typescript/src/useJetMarkdownEditor.d.ts +36 -0
  144. package/lib/typescript/src/useJetMarkdownEditor.d.ts.map +1 -0
  145. package/package.json +150 -0
  146. package/react-native.config.js +11 -0
  147. package/src/JetMarkdownEditor.native.tsx +301 -0
  148. package/src/JetMarkdownEditor.tsx +90 -0
  149. package/src/JetMarkdownEditorNativeComponent.ts +173 -0
  150. package/src/JetMarkdownView.native.tsx +67 -0
  151. package/src/JetMarkdownView.tsx +16 -0
  152. package/src/JetMarkdownViewNativeComponent.ts +35 -0
  153. package/src/defaultStyles.ts +102 -0
  154. package/src/index.tsx +34 -0
  155. package/src/serializeStyles.ts +369 -0
  156. package/src/types.ts +438 -0
  157. package/src/useJetMarkdownEditor.ts +50 -0
@@ -0,0 +1,244 @@
1
+ "use strict";
2
+
3
+ import { useCallback, useImperativeHandle, useMemo, useRef } from "react";
4
+ import NativeJetMarkdownEditor, { Commands } from "./JetMarkdownEditorNativeComponent";
5
+ import { serializeStyles, splitContainerStyle } from "./serializeStyles.js";
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ export function JetMarkdownEditor({
8
+ allowFontScaling,
9
+ autoCapitalize,
10
+ autoCorrect,
11
+ autoFocus,
12
+ cursorColor,
13
+ defaultValue,
14
+ editable,
15
+ mentionTriggers,
16
+ multiline,
17
+ onBlur,
18
+ onChangeMarkdown,
19
+ onChangeSelection,
20
+ onChangeState,
21
+ onChangeText,
22
+ onFocus,
23
+ onLinkDetected,
24
+ onMentionChange,
25
+ onMentionEnd,
26
+ onMentionStart,
27
+ onPaste,
28
+ placeholder,
29
+ placeholderTextColor,
30
+ scrollEnabled,
31
+ selectionColor,
32
+ style,
33
+ styles,
34
+ ref
35
+ }) {
36
+ const nativeRef = useRef(null);
37
+ // getMarkdown resolves from the latest onEditorChangeMarkdown payload;
38
+ // until the serializer emits (E1), plain text doubles as the markdown.
39
+ const markdownRef = useRef(null);
40
+ const textRef = useRef(defaultValue ?? "");
41
+ const {
42
+ hostStyle,
43
+ main
44
+ } = splitContainerStyle(style);
45
+ // maxHeight rides as a native prop (autogrow cap; the editor scrolls
46
+ // internally past it) instead of a host style key. It is omitted when
47
+ // unset: Yoga reads the same raw prop as max-height, and a 0 would clamp
48
+ // flex-sized editors to zero height.
49
+ const {
50
+ maxHeight,
51
+ ...editorHostStyle
52
+ } = hostStyle;
53
+ const mainKey = JSON.stringify(main);
54
+ const stylesJson = useMemo(() => serializeStyles(styles, JSON.parse(mainKey)), [styles, mainKey]);
55
+ useImperativeHandle(ref, () => ({
56
+ blur: () => {
57
+ if (nativeRef.current) {
58
+ Commands.blur(nativeRef.current);
59
+ }
60
+ },
61
+ focus: () => {
62
+ if (nativeRef.current) {
63
+ Commands.focus(nativeRef.current);
64
+ }
65
+ },
66
+ getMarkdown: () => Promise.resolve(markdownRef.current ?? textRef.current),
67
+ insertLink: (url, label) => {
68
+ if (nativeRef.current) {
69
+ Commands.insertLink(nativeRef.current, url, label ?? "");
70
+ }
71
+ },
72
+ insertMarkdown: markdown => {
73
+ if (nativeRef.current) {
74
+ Commands.insertMarkdown(nativeRef.current, markdown);
75
+ }
76
+ },
77
+ insertMention: (trigger, label, url) => {
78
+ if (nativeRef.current) {
79
+ Commands.insertMention(nativeRef.current, trigger, label, url);
80
+ }
81
+ },
82
+ removeLink: () => {
83
+ if (nativeRef.current) {
84
+ Commands.removeLink(nativeRef.current);
85
+ }
86
+ },
87
+ setSelection: (start, end) => {
88
+ if (nativeRef.current) {
89
+ Commands.setSelection(nativeRef.current, start, end);
90
+ }
91
+ },
92
+ setValue: markdown => {
93
+ // Seed with the value being set so getMarkdown() never reports the
94
+ // pre-setValue document; native re-emits its canonical serialization
95
+ // right after.
96
+ markdownRef.current = markdown;
97
+ textRef.current = markdown;
98
+ if (nativeRef.current) {
99
+ Commands.setValue(nativeRef.current, markdown);
100
+ }
101
+ },
102
+ toggleBlockQuote: () => {
103
+ if (nativeRef.current) {
104
+ Commands.toggleBlockQuote(nativeRef.current);
105
+ }
106
+ },
107
+ toggleBold: () => {
108
+ if (nativeRef.current) {
109
+ Commands.toggleBold(nativeRef.current);
110
+ }
111
+ },
112
+ toggleCode: () => {
113
+ if (nativeRef.current) {
114
+ Commands.toggleCode(nativeRef.current);
115
+ }
116
+ },
117
+ toggleCodeBlock: () => {
118
+ if (nativeRef.current) {
119
+ Commands.toggleCodeBlock(nativeRef.current);
120
+ }
121
+ },
122
+ toggleHeading: level => {
123
+ if (nativeRef.current) {
124
+ Commands.toggleHeading(nativeRef.current, level);
125
+ }
126
+ },
127
+ toggleItalic: () => {
128
+ if (nativeRef.current) {
129
+ Commands.toggleItalic(nativeRef.current);
130
+ }
131
+ },
132
+ toggleOrderedList: () => {
133
+ if (nativeRef.current) {
134
+ Commands.toggleOrderedList(nativeRef.current);
135
+ }
136
+ },
137
+ toggleSpoiler: () => {
138
+ if (nativeRef.current) {
139
+ Commands.toggleSpoiler(nativeRef.current);
140
+ }
141
+ },
142
+ toggleStrikethrough: () => {
143
+ if (nativeRef.current) {
144
+ Commands.toggleStrikethrough(nativeRef.current);
145
+ }
146
+ },
147
+ toggleSubscript: () => {
148
+ if (nativeRef.current) {
149
+ Commands.toggleSubscript(nativeRef.current);
150
+ }
151
+ },
152
+ toggleSuperscript: () => {
153
+ if (nativeRef.current) {
154
+ Commands.toggleSuperscript(nativeRef.current);
155
+ }
156
+ },
157
+ toggleUnorderedList: () => {
158
+ if (nativeRef.current) {
159
+ Commands.toggleUnorderedList(nativeRef.current);
160
+ }
161
+ }
162
+ }), []);
163
+
164
+ // The native side never inserts pasted content itself: it reports the
165
+ // clipboard here, and unless the app's onPaste calls preventDefault()
166
+ // synchronously, the default insertion happens via insertMarkdown.
167
+ const handlePaste = useCallback(event => {
168
+ const {
169
+ images,
170
+ text
171
+ } = event.nativeEvent;
172
+ let prevented = false;
173
+ onPaste?.({
174
+ images: images.length > 0 ? [...images] : undefined,
175
+ preventDefault: () => {
176
+ prevented = true;
177
+ },
178
+ text: text.length > 0 ? text : undefined
179
+ });
180
+ if (!prevented && text.length > 0 && nativeRef.current) {
181
+ Commands.insertMarkdown(nativeRef.current, text);
182
+ }
183
+ }, [onPaste]);
184
+ return /*#__PURE__*/_jsx(NativeJetMarkdownEditor, {
185
+ allowFontScaling: allowFontScaling,
186
+ autoCapitalize: autoCapitalize,
187
+ autoCorrect: autoCorrect,
188
+ autoFocus: autoFocus,
189
+ cursorColor: cursorColor,
190
+ defaultValue: defaultValue,
191
+ editable: editable,
192
+ maxHeight: typeof maxHeight === "number" && maxHeight > 0 ? maxHeight : undefined,
193
+ mentionTriggers: mentionTriggers,
194
+ multiline: multiline,
195
+ onEditorBlur: onBlur ? () => onBlur() : undefined,
196
+ onEditorChangeMarkdown: event => {
197
+ markdownRef.current = event.nativeEvent.markdown;
198
+ onChangeMarkdown?.(event.nativeEvent.markdown);
199
+ },
200
+ onEditorChangeSelection: onChangeSelection ? event => onChangeSelection({
201
+ end: event.nativeEvent.end,
202
+ start: event.nativeEvent.start
203
+ }) : undefined,
204
+ onEditorChangeState: onChangeState ? event => {
205
+ // Copy the declared fields so consumers never see the raw
206
+ // nativeEvent extras (target, etc.).
207
+ const state = event.nativeEvent;
208
+ onChangeState({
209
+ headingLevel: state.headingLevel,
210
+ isBlockQuote: state.isBlockQuote,
211
+ isBold: state.isBold,
212
+ isCodeBlock: state.isCodeBlock,
213
+ isInlineCode: state.isInlineCode,
214
+ isItalic: state.isItalic,
215
+ isOrderedList: state.isOrderedList,
216
+ isSpoiler: state.isSpoiler,
217
+ isStrikethrough: state.isStrikethrough,
218
+ isSubscript: state.isSubscript,
219
+ isSuperscript: state.isSuperscript,
220
+ isUnorderedList: state.isUnorderedList
221
+ });
222
+ } : undefined,
223
+ onEditorChangeText: event => {
224
+ textRef.current = event.nativeEvent.text;
225
+ onChangeText?.(event.nativeEvent.text);
226
+ },
227
+ onEditorFocus: onFocus ? () => onFocus() : undefined,
228
+ onEditorLinkDetected: onLinkDetected ? event => onLinkDetected({
229
+ url: event.nativeEvent.url
230
+ }) : undefined,
231
+ onEditorMentionChange: onMentionChange ? event => onMentionChange(event.nativeEvent) : undefined,
232
+ onEditorMentionEnd: onMentionEnd ? event => onMentionEnd(event.nativeEvent) : undefined,
233
+ onEditorMentionStart: onMentionStart ? event => onMentionStart(event.nativeEvent) : undefined,
234
+ onEditorPaste: handlePaste,
235
+ placeholder: placeholder,
236
+ placeholderTextColor: placeholderTextColor,
237
+ ref: nativeRef,
238
+ scrollEnabled: scrollEnabled,
239
+ selectionColor: selectionColor,
240
+ style: editorHostStyle,
241
+ stylesJson: stylesJson
242
+ });
243
+ }
244
+ //# sourceMappingURL=JetMarkdownEditor.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useImperativeHandle","useMemo","useRef","NativeJetMarkdownEditor","Commands","serializeStyles","splitContainerStyle","jsx","_jsx","JetMarkdownEditor","allowFontScaling","autoCapitalize","autoCorrect","autoFocus","cursorColor","defaultValue","editable","mentionTriggers","multiline","onBlur","onChangeMarkdown","onChangeSelection","onChangeState","onChangeText","onFocus","onLinkDetected","onMentionChange","onMentionEnd","onMentionStart","onPaste","placeholder","placeholderTextColor","scrollEnabled","selectionColor","style","styles","ref","nativeRef","markdownRef","textRef","hostStyle","main","maxHeight","editorHostStyle","mainKey","JSON","stringify","stylesJson","parse","blur","current","focus","getMarkdown","Promise","resolve","insertLink","url","label","insertMarkdown","markdown","insertMention","trigger","removeLink","setSelection","start","end","setValue","toggleBlockQuote","toggleBold","toggleCode","toggleCodeBlock","toggleHeading","level","toggleItalic","toggleOrderedList","toggleSpoiler","toggleStrikethrough","toggleSubscript","toggleSuperscript","toggleUnorderedList","handlePaste","event","images","text","nativeEvent","prevented","length","undefined","preventDefault","onEditorBlur","onEditorChangeMarkdown","onEditorChangeSelection","onEditorChangeState","state","headingLevel","isBlockQuote","isBold","isCodeBlock","isInlineCode","isItalic","isOrderedList","isSpoiler","isStrikethrough","isSubscript","isSuperscript","isUnorderedList","onEditorChangeText","onEditorFocus","onEditorLinkDetected","onEditorMentionChange","onEditorMentionEnd","onEditorMentionStart","onEditorPaste"],"sourceRoot":"../../src","sources":["JetMarkdownEditor.native.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,173 @@
1
+ import {
2
+ type CodegenTypes,
3
+ type ColorValue,
4
+ codegenNativeCommands,
5
+ codegenNativeComponent,
6
+ type HostComponent,
7
+ type ViewProps,
8
+ } from "react-native";
9
+
10
+ interface TextEvent {
11
+ text: string;
12
+ }
13
+
14
+ interface MarkdownEvent {
15
+ markdown: string;
16
+ }
17
+
18
+ interface SelectionEvent {
19
+ end: CodegenTypes.Int32;
20
+ start: CodegenTypes.Int32;
21
+ }
22
+
23
+ interface StateEvent {
24
+ headingLevel: CodegenTypes.Int32;
25
+ isBlockQuote: boolean;
26
+ isBold: boolean;
27
+ isCodeBlock: boolean;
28
+ isInlineCode: boolean;
29
+ isItalic: boolean;
30
+ isOrderedList: boolean;
31
+ isSpoiler: boolean;
32
+ isStrikethrough: boolean;
33
+ isSubscript: boolean;
34
+ isSuperscript: boolean;
35
+ isUnorderedList: boolean;
36
+ }
37
+
38
+ interface UrlEvent {
39
+ url: string;
40
+ }
41
+
42
+ interface MentionEvent {
43
+ trigger: string;
44
+ }
45
+
46
+ interface MentionQueryEvent {
47
+ query: string;
48
+ trigger: string;
49
+ }
50
+
51
+ interface PasteEvent {
52
+ // Codegen's event parser needs inline element types and rejects readonly
53
+ // arrays (the props parser accepts both).
54
+ images: {
55
+ height: CodegenTypes.Double;
56
+ url: string;
57
+ width: CodegenTypes.Double;
58
+ }[];
59
+ text: string;
60
+ }
61
+
62
+ interface NativeProps extends ViewProps {
63
+ allowFontScaling?: CodegenTypes.WithDefault<boolean, true>;
64
+ autoCapitalize?: CodegenTypes.WithDefault<
65
+ "none" | "sentences" | "words" | "characters",
66
+ "sentences"
67
+ >;
68
+ autoCorrect?: CodegenTypes.WithDefault<boolean, true>;
69
+ autoFocus?: CodegenTypes.WithDefault<boolean, false>;
70
+ cursorColor?: ColorValue;
71
+ defaultValue?: string;
72
+ editable?: CodegenTypes.WithDefault<boolean, true>;
73
+ /**
74
+ * Autogrow cap in points; native default 0 = unbounded. Yoga ALSO parses
75
+ * this key out of the raw-props bag as max-height, so the wrapper MUST
76
+ * omit it entirely when unset — an unconditional 0 clamps the node to
77
+ * zero height (dead flex-sized editors). When set, Yoga's clamp equals
78
+ * the autogrow cap, which is exactly the intended geometry.
79
+ */
80
+ maxHeight?: CodegenTypes.WithDefault<CodegenTypes.Double, 0>;
81
+ mentionTriggers?: readonly string[];
82
+ multiline?: CodegenTypes.WithDefault<boolean, true>;
83
+ onEditorBlur?: CodegenTypes.DirectEventHandler<null>;
84
+ onEditorChangeMarkdown?: CodegenTypes.DirectEventHandler<MarkdownEvent>;
85
+ onEditorChangeSelection?: CodegenTypes.DirectEventHandler<SelectionEvent>;
86
+ onEditorChangeState?: CodegenTypes.DirectEventHandler<StateEvent>;
87
+ onEditorChangeText?: CodegenTypes.DirectEventHandler<TextEvent>;
88
+ onEditorFocus?: CodegenTypes.DirectEventHandler<null>;
89
+ onEditorLinkDetected?: CodegenTypes.DirectEventHandler<UrlEvent>;
90
+ onEditorMentionChange?: CodegenTypes.DirectEventHandler<MentionQueryEvent>;
91
+ onEditorMentionEnd?: CodegenTypes.DirectEventHandler<MentionEvent>;
92
+ onEditorMentionStart?: CodegenTypes.DirectEventHandler<MentionEvent>;
93
+ onEditorPaste?: CodegenTypes.DirectEventHandler<PasteEvent>;
94
+ placeholder?: string;
95
+ placeholderTextColor?: ColorValue;
96
+ scrollEnabled?: CodegenTypes.WithDefault<boolean, false>;
97
+ selectionColor?: ColorValue;
98
+ stylesJson?: string;
99
+ }
100
+
101
+ type EditorComponentType = HostComponent<NativeProps>;
102
+
103
+ interface NativeCommands {
104
+ blur: (viewRef: React.ElementRef<EditorComponentType>) => void;
105
+ focus: (viewRef: React.ElementRef<EditorComponentType>) => void;
106
+ insertLink: (
107
+ viewRef: React.ElementRef<EditorComponentType>,
108
+ url: string,
109
+ label: string
110
+ ) => void;
111
+ insertMarkdown: (
112
+ viewRef: React.ElementRef<EditorComponentType>,
113
+ value: string
114
+ ) => void;
115
+ insertMention: (
116
+ viewRef: React.ElementRef<EditorComponentType>,
117
+ trigger: string,
118
+ label: string,
119
+ url: string
120
+ ) => void;
121
+ removeLink: (viewRef: React.ElementRef<EditorComponentType>) => void;
122
+ setSelection: (
123
+ viewRef: React.ElementRef<EditorComponentType>,
124
+ start: CodegenTypes.Int32,
125
+ end: CodegenTypes.Int32
126
+ ) => void;
127
+ setValue: (
128
+ viewRef: React.ElementRef<EditorComponentType>,
129
+ value: string
130
+ ) => void;
131
+ toggleBlockQuote: (viewRef: React.ElementRef<EditorComponentType>) => void;
132
+ toggleBold: (viewRef: React.ElementRef<EditorComponentType>) => void;
133
+ toggleCode: (viewRef: React.ElementRef<EditorComponentType>) => void;
134
+ toggleCodeBlock: (viewRef: React.ElementRef<EditorComponentType>) => void;
135
+ toggleHeading: (
136
+ viewRef: React.ElementRef<EditorComponentType>,
137
+ level: CodegenTypes.Int32
138
+ ) => void;
139
+ toggleItalic: (viewRef: React.ElementRef<EditorComponentType>) => void;
140
+ toggleOrderedList: (viewRef: React.ElementRef<EditorComponentType>) => void;
141
+ toggleSpoiler: (viewRef: React.ElementRef<EditorComponentType>) => void;
142
+ toggleStrikethrough: (viewRef: React.ElementRef<EditorComponentType>) => void;
143
+ toggleSubscript: (viewRef: React.ElementRef<EditorComponentType>) => void;
144
+ toggleSuperscript: (viewRef: React.ElementRef<EditorComponentType>) => void;
145
+ toggleUnorderedList: (viewRef: React.ElementRef<EditorComponentType>) => void;
146
+ }
147
+
148
+ export const Commands = codegenNativeCommands<NativeCommands>({
149
+ supportedCommands: [
150
+ "blur",
151
+ "focus",
152
+ "insertLink",
153
+ "insertMarkdown",
154
+ "insertMention",
155
+ "removeLink",
156
+ "setSelection",
157
+ "setValue",
158
+ "toggleBlockQuote",
159
+ "toggleBold",
160
+ "toggleCode",
161
+ "toggleCodeBlock",
162
+ "toggleHeading",
163
+ "toggleItalic",
164
+ "toggleOrderedList",
165
+ "toggleSpoiler",
166
+ "toggleStrikethrough",
167
+ "toggleSubscript",
168
+ "toggleSuperscript",
169
+ "toggleUnorderedList",
170
+ ],
171
+ });
172
+
173
+ export default codegenNativeComponent<NativeProps>("JetMarkdownEditor");
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ import { Text, View } from "react-native";
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
+ // Non-native (web) fallback: renders the raw markdown as plain text.
6
+ export function JetMarkdownView({
7
+ allowFontScaling,
8
+ markdown,
9
+ style
10
+ }) {
11
+ return /*#__PURE__*/_jsx(View, {
12
+ style: style,
13
+ children: /*#__PURE__*/_jsx(Text, {
14
+ allowFontScaling: allowFontScaling,
15
+ children: markdown
16
+ })
17
+ });
18
+ }
19
+ //# sourceMappingURL=JetMarkdownView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Text","View","jsx","_jsx","JetMarkdownView","allowFontScaling","markdown","style","children"],"sourceRoot":"../../src","sources":["JetMarkdownView.tsx"],"mappings":";;AAAA,SAAyBA,IAAI,EAAEC,IAAI,QAAwB,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAI1E;AACA,OAAO,SAASC,eAAeA,CAAC;EAC9BC,gBAAgB;EAChBC,QAAQ;EACRC;AACoB,CAAC,EAAE;EACvB,oBACEJ,IAAA,CAACF,IAAI;IAACM,KAAK,EAAEA,KAA8B;IAAAC,QAAA,eACzCL,IAAA,CAACH,IAAI;MAACK,gBAAgB,EAAEA,gBAAiB;MAAAG,QAAA,EAAEF;IAAQ,CAAO;EAAC,CACvD,CAAC;AAEX","ignoreList":[]}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+
3
+ import { useMemo } from "react";
4
+ import NativeJetMarkdownView from "./JetMarkdownViewNativeComponent";
5
+ import { serializeStyles, splitContainerStyle } from "./serializeStyles.js";
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ export function JetMarkdownView({
8
+ allowFontScaling,
9
+ markdown,
10
+ style,
11
+ styles,
12
+ images,
13
+ onLinkPress,
14
+ onLinkLongPress,
15
+ onImagePress
16
+ }) {
17
+ const {
18
+ hostStyle,
19
+ main
20
+ } = splitContainerStyle(style);
21
+ const mainKey = JSON.stringify(main);
22
+ const stylesJson = useMemo(() => serializeStyles(styles, JSON.parse(mainKey)), [styles, mainKey]);
23
+ return /*#__PURE__*/_jsx(NativeJetMarkdownView, {
24
+ allowFontScaling: allowFontScaling,
25
+ images: images,
26
+ markdown: markdown,
27
+ onImagePress: onImagePress ? event => onImagePress({
28
+ height: event.nativeEvent.height,
29
+ url: event.nativeEvent.url,
30
+ width: event.nativeEvent.width,
31
+ x: event.nativeEvent.x,
32
+ y: event.nativeEvent.y
33
+ }) : undefined,
34
+ onLinkLongPress: onLinkLongPress ? event => onLinkLongPress({
35
+ url: event.nativeEvent.url
36
+ }) : undefined,
37
+ onLinkPress: onLinkPress ? event => onLinkPress({
38
+ url: event.nativeEvent.url
39
+ }) : undefined,
40
+ style: hostStyle,
41
+ stylesJson: stylesJson
42
+ });
43
+ }
44
+ //# sourceMappingURL=JetMarkdownView.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useMemo","NativeJetMarkdownView","serializeStyles","splitContainerStyle","jsx","_jsx","JetMarkdownView","allowFontScaling","markdown","style","styles","images","onLinkPress","onLinkLongPress","onImagePress","hostStyle","main","mainKey","JSON","stringify","stylesJson","parse","event","height","nativeEvent","url","width","x","y","undefined"],"sourceRoot":"../../src","sources":["JetMarkdownView.native.tsx"],"mappings":";;AAAA,SAASA,OAAO,QAAQ,OAAO;AAG/B,OAAOC,qBAAqB,MAAM,kCAAkC;AACpE,SAEEC,eAAe,EACfC,mBAAmB,QACd,sBAAmB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAO3B,OAAO,SAASC,eAAeA,CAAC;EAC9BC,gBAAgB;EAChBC,QAAQ;EACRC,KAAK;EACLC,MAAM;EACNC,MAAM;EACNC,WAAW;EACXC,eAAe;EACfC;AACoB,CAAC,EAAE;EACvB,MAAM;IAAEC,SAAS;IAAEC;EAAK,CAAC,GAAGb,mBAAmB,CAACM,KAAK,CAAC;EAEtD,MAAMQ,OAAO,GAAGC,IAAI,CAACC,SAAS,CAACH,IAAI,CAAC;EACpC,MAAMI,UAAU,GAAGpB,OAAO,CACxB,MAAME,eAAe,CAACQ,MAAM,EAAEQ,IAAI,CAACG,KAAK,CAACJ,OAAO,CAAc,CAAC,EAC/D,CAACP,MAAM,EAAEO,OAAO,CAClB,CAAC;EAED,oBACEZ,IAAA,CAACJ,qBAAqB;IACpBM,gBAAgB,EAAEA,gBAAiB;IACnCI,MAAM,EAAEA,MAAO;IACfH,QAAQ,EAAEA,QAAS;IACnBM,YAAY,EACVA,YAAY,GACPQ,KAA+C,IAC9CR,YAAY,CAAC;MACXS,MAAM,EAAED,KAAK,CAACE,WAAW,CAACD,MAAM;MAChCE,GAAG,EAAEH,KAAK,CAACE,WAAW,CAACC,GAAG;MAC1BC,KAAK,EAAEJ,KAAK,CAACE,WAAW,CAACE,KAAK;MAC9BC,CAAC,EAAEL,KAAK,CAACE,WAAW,CAACG,CAAC;MACtBC,CAAC,EAAEN,KAAK,CAACE,WAAW,CAACI;IACvB,CAAC,CAAC,GACJC,SACL;IACDhB,eAAe,EACbA,eAAe,GACVS,KAA6C,IAC5CT,eAAe,CAAC;MAAEY,GAAG,EAAEH,KAAK,CAACE,WAAW,CAACC;IAAI,CAAC,CAAC,GACjDI,SACL;IACDjB,WAAW,EACTA,WAAW,GACNU,KAA6C,IAC5CV,WAAW,CAAC;MAAEa,GAAG,EAAEH,KAAK,CAACE,WAAW,CAACC;IAAI,CAAC,CAAC,GAC7CI,SACL;IACDpB,KAAK,EAAEM,SAAU;IACjBK,UAAU,EAAEA;EAAW,CACxB,CAAC;AAEN","ignoreList":[]}
@@ -0,0 +1,35 @@
1
+ import {
2
+ type CodegenTypes,
3
+ codegenNativeComponent,
4
+ type ViewProps,
5
+ } from "react-native";
6
+
7
+ interface UrlEvent {
8
+ url: string;
9
+ }
10
+
11
+ interface ImagePressEvent {
12
+ height: CodegenTypes.Double;
13
+ url: string;
14
+ width: CodegenTypes.Double;
15
+ x: CodegenTypes.Double;
16
+ y: CodegenTypes.Double;
17
+ }
18
+
19
+ interface ImageData {
20
+ height: CodegenTypes.Double;
21
+ url: string;
22
+ width: CodegenTypes.Double;
23
+ }
24
+
25
+ interface NativeProps extends ViewProps {
26
+ allowFontScaling?: CodegenTypes.WithDefault<boolean, true>;
27
+ images?: readonly ImageData[];
28
+ markdown: string;
29
+ onImagePress?: CodegenTypes.DirectEventHandler<ImagePressEvent>;
30
+ onLinkLongPress?: CodegenTypes.DirectEventHandler<UrlEvent>;
31
+ onLinkPress?: CodegenTypes.DirectEventHandler<UrlEvent>;
32
+ stylesJson?: string;
33
+ }
34
+
35
+ export default codegenNativeComponent<NativeProps>("JetMarkdownView");
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * The classic markdown look. The viewer renders fully plain when `styles`
5
+ * is omitted — pass `defaultStyles` for this look as-is, or
6
+ * `mergeStyles({...})` to override parts of it. Tune freely: this object is
7
+ * the single source of truth for the default appearance.
8
+ *
9
+ * Only semantics stay native and are not represented here: bold/italic/
10
+ * strikethrough runs, the monospace font family for code, list markers,
11
+ * table header-row bold, and the spoiler cover fallback.
12
+ */
13
+ export const defaultStyles = {
14
+ blockQuote: {
15
+ borderLeftColor: "rgba(0, 0, 0, 0.2)",
16
+ borderLeftWidth: 3,
17
+ paddingLeft: 12
18
+ },
19
+ codeBlock: {
20
+ backgroundColor: "rgba(0, 0, 0, 0.08)",
21
+ borderRadius: 6,
22
+ fontSize: 14,
23
+ padding: 12
24
+ },
25
+ divider: {
26
+ color: "rgba(0, 0, 0, 0.13)",
27
+ height: 1
28
+ },
29
+ gap: 12,
30
+ headings: {
31
+ h1: {
32
+ fontSize: 32,
33
+ fontWeight: "700"
34
+ },
35
+ h2: {
36
+ fontSize: 26,
37
+ fontWeight: "700"
38
+ },
39
+ h3: {
40
+ fontSize: 22,
41
+ fontWeight: "700"
42
+ },
43
+ h4: {
44
+ fontSize: 18,
45
+ fontWeight: "700"
46
+ },
47
+ h5: {
48
+ fontSize: 16,
49
+ fontWeight: "700"
50
+ },
51
+ h6: {
52
+ fontSize: 14,
53
+ fontWeight: "700"
54
+ }
55
+ },
56
+ image: {
57
+ backgroundColor: "rgba(0, 0, 0, 0.08)"
58
+ },
59
+ inlineCode: {
60
+ backgroundColor: "rgba(0, 0, 0, 0.08)"
61
+ },
62
+ link: {
63
+ color: "#007AFF"
64
+ },
65
+ listMarker: {
66
+ width: 24
67
+ },
68
+ spoiler: {
69
+ backgroundColor: "#3F3F46",
70
+ borderRadius: 4
71
+ },
72
+ table: {
73
+ maxColumnWidth: 320,
74
+ minColumnWidth: 44
75
+ },
76
+ tableCell: {
77
+ padding: 8
78
+ },
79
+ tableRow: {
80
+ borderBottomColor: "rgba(0, 0, 0, 0.12)",
81
+ borderBottomWidth: 1
82
+ }
83
+ };
84
+
85
+ /**
86
+ * Deep-merges the given overrides over {@link defaultStyles}: element
87
+ * sections merge key-by-key, heading levels merge individually, and
88
+ * anything not overridden keeps its default. Hoist the result to module
89
+ * scope (or memoize) like any other `styles` value.
90
+ */
91
+ export function mergeStyles(overrides = {}) {
92
+ const merged = {
93
+ ...defaultStyles
94
+ };
95
+ for (const [key, value] of Object.entries(overrides)) {
96
+ if (value == null) {
97
+ continue;
98
+ }
99
+ const base = defaultStyles[key];
100
+ if (key === "headings") {
101
+ const levels = {
102
+ ...defaultStyles.headings
103
+ };
104
+ for (const [level, style] of Object.entries(value)) {
105
+ levels[level] = {
106
+ ...levels[level],
107
+ ...style
108
+ };
109
+ }
110
+ merged.headings = levels;
111
+ } else if (base != null && typeof base === "object" && typeof value === "object") {
112
+ merged[key] = {
113
+ ...base,
114
+ ...value
115
+ };
116
+ } else {
117
+ merged[key] = value;
118
+ }
119
+ }
120
+ return merged;
121
+ }
122
+ //# sourceMappingURL=defaultStyles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["defaultStyles","blockQuote","borderLeftColor","borderLeftWidth","paddingLeft","codeBlock","backgroundColor","borderRadius","fontSize","padding","divider","color","height","gap","headings","h1","fontWeight","h2","h3","h4","h5","h6","image","inlineCode","link","listMarker","width","spoiler","table","maxColumnWidth","minColumnWidth","tableCell","tableRow","borderBottomColor","borderBottomWidth","mergeStyles","overrides","merged","key","value","Object","entries","base","levels","level","style"],"sourceRoot":"../../src","sources":["defaultStyles.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ /** biome-ignore-all lint/performance/noBarrelFile: go away */
4
+
5
+ export { defaultStyles, mergeStyles } from "./defaultStyles.js";
6
+ export { JetMarkdownEditor } from "./JetMarkdownEditor";
7
+ export { JetMarkdownView } from "./JetMarkdownView";
8
+ export { useJetMarkdownEditor } from "./useJetMarkdownEditor.js";
9
+ //# sourceMappingURL=index.js.map