react-native-enriched-markdown-scaffold 0.7.4-scaffold.9 → 1.0.2-scaffold.10

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 (505) hide show
  1. package/README.md +54 -8
  2. package/ReactNativeEnrichedMarkdown.podspec +82 -73
  3. package/android/build.gradle +188 -1
  4. package/android/consumer-rules.pro +1 -1
  5. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownManagerDelegate.java +27 -0
  6. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownManagerInterface.java +7 -0
  7. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextInputManagerDelegate.java +24 -0
  8. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextInputManagerInterface.java +8 -0
  9. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerDelegate.java +27 -0
  10. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerInterface.java +7 -0
  11. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.cpp +223 -0
  12. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.h +183 -0
  13. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.cpp +65 -0
  14. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.h +1086 -61
  15. package/android/src/main/baseline-prof.txt +1 -1
  16. package/android/src/main/cpp/jni-adapter.cpp +74 -0
  17. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdown.kt +351 -13
  18. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownInternalText.kt +62 -0
  19. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownManager.kt +85 -0
  20. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownText.kt +160 -1
  21. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextLayoutManager.kt +10 -1
  22. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextManager.kt +76 -0
  23. package/android/src/main/java/com/swmansion/enriched/markdown/MeasurementStore.kt +126 -10
  24. package/android/src/main/java/com/swmansion/enriched/markdown/events/CopyPressEvent.kt +24 -0
  25. package/android/src/main/java/com/swmansion/enriched/markdown/events/CopyRequestEvent.kt +28 -0
  26. package/android/src/main/java/com/swmansion/enriched/markdown/events/LinkLayoutEvent.kt +36 -0
  27. package/android/src/main/java/com/swmansion/enriched/markdown/events/SelectionChangeEvent.kt +43 -0
  28. package/android/src/main/java/com/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputManager.kt +54 -4
  29. package/android/src/main/java/com/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputView.kt +923 -462
  30. package/android/src/main/java/com/swmansion/enriched/markdown/input/MarkdownClipboard.kt +42 -0
  31. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/BlockEditCoordinator.kt +196 -0
  32. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/ClipboardCoordinator.kt +73 -0
  33. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/EditContext.kt +19 -0
  34. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/EditPipeline.kt +248 -0
  35. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/EditSession.kt +52 -0
  36. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/InputConnectionWrapper.kt +108 -7
  37. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/LinkCoordinator.kt +69 -0
  38. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/MarkdownTextWatcher.kt +3 -3
  39. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/MentionCoordinator.kt +118 -0
  40. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnChangeStateEvent.kt +26 -0
  41. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnContextMenuItemPressEvent.kt +26 -0
  42. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnInputKeyPressEvent.kt +24 -0
  43. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnPasteEvent.kt +24 -0
  44. package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/BlockStore.kt +254 -0
  45. package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/FormattingStore.kt +80 -87
  46. package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputFormatter.kt +109 -1
  47. package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputParser.kt +116 -22
  48. package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/MarkdownSerializer.kt +167 -38
  49. package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/RangeEditAdjustment.kt +149 -0
  50. package/android/src/main/java/com/swmansion/enriched/markdown/input/layout/InputEventEmitter.kt +66 -5
  51. package/android/src/main/java/com/swmansion/enriched/markdown/input/layout/InputMeasurementStore.kt +4 -2
  52. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/BlockRange.kt +27 -0
  53. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/BlockType.kt +48 -0
  54. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/FormattingRange.kt +9 -4
  55. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/InputFormatterStyle.kt +39 -2
  56. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/MathAtom.kt +20 -0
  57. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/MathChipStyle.kt +1 -1
  58. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/MutableRangeBounds.kt +11 -0
  59. package/android/src/main/java/com/swmansion/enriched/markdown/input/spans/InputBulletSpan.kt +82 -0
  60. package/android/src/main/java/com/swmansion/enriched/markdown/input/spans/InputHeadingSpan.kt +58 -0
  61. package/android/src/main/java/com/swmansion/enriched/markdown/input/spans/InputListItemSpacingSpan.kt +37 -0
  62. package/android/src/main/java/com/swmansion/enriched/markdown/input/spans/InputOrderedListMarkerSpan.kt +63 -0
  63. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/BlockHandler.kt +54 -0
  64. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/HeadingBlockHandler.kt +27 -0
  65. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/OrderedListBlockHandler.kt +38 -0
  66. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/UnorderedListBlockHandler.kt +37 -0
  67. package/android/src/main/java/com/swmansion/enriched/markdown/input/toolbar/InputContextMenu.kt +8 -26
  68. package/android/src/main/java/com/swmansion/enriched/markdown/parser/MarkdownASTNode.kt +1 -0
  69. package/android/src/main/java/com/swmansion/enriched/markdown/parser/Parser.kt +1 -0
  70. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BlockStyleContext.kt +9 -2
  71. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BlockquoteRenderer.kt +100 -12
  72. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/CodeBlockRenderer.kt +16 -1
  73. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/HeadingRenderer.kt +4 -0
  74. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/LinkRenderer.kt +37 -7
  75. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListContextManager.kt +2 -1
  76. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListItemRenderer.kt +74 -18
  77. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListRenderer.kt +43 -4
  78. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/NodeRenderer.kt +9 -1
  79. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SoftBreakRenderer.kt +16 -0
  80. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SpanStyleCache.kt +35 -28
  81. package/android/src/main/java/com/swmansion/enriched/markdown/spans/BaseListSpan.kt +24 -0
  82. package/android/src/main/java/com/swmansion/enriched/markdown/spans/BlockquoteSpan.kt +174 -24
  83. package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeBackgroundSpan.kt +20 -82
  84. package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeBlockSpan.kt +13 -16
  85. package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeSpan.kt +1 -1
  86. package/android/src/main/java/com/swmansion/enriched/markdown/spans/EmphasisSpan.kt +1 -1
  87. package/android/src/main/java/com/swmansion/enriched/markdown/spans/ImageSpan.kt +182 -46
  88. package/android/src/main/java/com/swmansion/enriched/markdown/spans/InlineChipPainter.kt +140 -0
  89. package/android/src/main/java/com/swmansion/enriched/markdown/spans/LinkChipSpans.kt +177 -0
  90. package/android/src/main/java/com/swmansion/enriched/markdown/spans/LinkSpan.kt +1 -6
  91. package/android/src/main/java/com/swmansion/enriched/markdown/spans/ListItemSpacingSpan.kt +33 -0
  92. package/android/src/main/java/com/swmansion/enriched/markdown/spans/ListMarkerAnchorSpan.kt +38 -0
  93. package/android/src/main/java/com/swmansion/enriched/markdown/spans/OrderedListSpan.kt +2 -0
  94. package/android/src/main/java/com/swmansion/enriched/markdown/spans/StrongSpan.kt +1 -1
  95. package/android/src/main/java/com/swmansion/enriched/markdown/spans/TaskListSpan.kt +3 -2
  96. package/android/src/main/java/com/swmansion/enriched/markdown/spans/UnorderedListSpan.kt +3 -2
  97. package/android/src/main/java/com/swmansion/enriched/markdown/styles/BlockquoteStyle.kt +6 -0
  98. package/android/src/main/java/com/swmansion/enriched/markdown/styles/CodeBlockStyle.kt +26 -0
  99. package/android/src/main/java/com/swmansion/enriched/markdown/styles/ImageStyle.kt +7 -1
  100. package/android/src/main/java/com/swmansion/enriched/markdown/styles/InlineMathStyle.kt +16 -1
  101. package/android/src/main/java/com/swmansion/enriched/markdown/styles/LinkStyle.kt +36 -1
  102. package/android/src/main/java/com/swmansion/enriched/markdown/styles/LinkVariantEntry.kt +7 -3
  103. package/android/src/main/java/com/swmansion/enriched/markdown/styles/ListStyle.kt +4 -1
  104. package/android/src/main/java/com/swmansion/enriched/markdown/styles/MathStyle.kt +3 -0
  105. package/android/src/main/java/com/swmansion/enriched/markdown/styles/StyleConfig.kt +13 -4
  106. package/android/src/main/java/com/swmansion/enriched/markdown/styles/TableStyle.kt +6 -0
  107. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/CodeBlockHighlighter.kt +90 -0
  108. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/CodeBlockNode.kt +57 -0
  109. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/FeatureFlags.kt +1 -0
  110. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/MarkdownSegment.kt +9 -0
  111. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/MarkdownViewManagerUtils.kt +84 -7
  112. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/ReadableMapExtensions.kt +3 -0
  113. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/RenderedSegment.kt +10 -0
  114. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/SegmentSignature.kt +1 -0
  115. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/StreamingMarkdownFilter.kt +83 -5
  116. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/serialization/MarkdownASTSerializer.kt +4 -0
  117. package/android/src/main/java/com/swmansion/enriched/markdown/utils/input/MarkdownStyleParser.kt +74 -44
  118. package/android/src/main/java/com/swmansion/enriched/markdown/utils/input/PasteTextUtils.kt +52 -0
  119. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/ImageCache.kt +26 -3
  120. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/ImageDownloader.kt +22 -9
  121. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/LocalImageLoader.kt +161 -0
  122. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/conversion/HTMLGenerator.kt +2 -1
  123. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/conversion/MarkdownExtractor.kt +6 -0
  124. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/extensions/TextPaintExtensions.kt +23 -0
  125. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/interaction/CheckboxTouchHelper.kt +7 -0
  126. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/interaction/TaskListTapUtils.kt +41 -21
  127. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/span/BlockSpacing.kt +15 -8
  128. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/HeadlessActionMode.kt +88 -0
  129. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/LinkLayoutCollector.kt +100 -0
  130. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/LinkLongPressMovementMethod.kt +58 -27
  131. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/SelectionActionMode.kt +72 -16
  132. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/SelectionChangeReporter.kt +232 -0
  133. package/android/src/main/java/com/swmansion/enriched/markdown/views/BlockMenuOptions.kt +64 -0
  134. package/android/src/main/java/com/swmansion/enriched/markdown/views/CodeBlockContainerView.kt +414 -0
  135. package/android/src/main/java/com/swmansion/enriched/markdown/views/ContextMenuPopup.kt +9 -6
  136. package/android/src/main/java/com/swmansion/enriched/markdown/views/CopyGlyph.kt +101 -0
  137. package/android/src/main/java/com/swmansion/enriched/markdown/views/TableContainerView.kt +61 -11
  138. package/android/src/main/jni/CMakeLists.txt +53 -0
  139. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerShadowNode.cpp +10 -0
  140. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerShadowNode.h +11 -2
  141. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextShadowNode.cpp +10 -0
  142. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextShadowNode.h +12 -2
  143. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextState.cpp +9 -0
  144. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextState.h +24 -0
  145. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/conversions.h +16 -0
  146. package/android/src/math/java/com/swmansion/enriched/markdown/input/math/MathChipControllerImpl.kt +21 -4
  147. package/android/src/math/java/com/swmansion/enriched/markdown/renderer/MathInlineRenderer.kt +8 -2
  148. package/android/src/math/java/com/swmansion/enriched/markdown/spans/MathChipSpan.kt +1 -1
  149. package/android/src/math/java/com/swmansion/enriched/markdown/spans/MathInlineSpan.kt +13 -6
  150. package/android/src/math/java/com/swmansion/enriched/markdown/spans/MathMeasureHelper.kt +2 -1
  151. package/android/src/math/java/com/swmansion/enriched/markdown/views/MathContainerView.kt +26 -8
  152. package/cpp/highlight/CodeBlockHighlighter.cpp +284 -0
  153. package/cpp/highlight/CodeBlockHighlighter.hpp +66 -0
  154. package/cpp/highlight/CodeBlockLanguages.cpp +138 -0
  155. package/cpp/highlight/CodeBlockLanguages.hpp +25 -0
  156. package/cpp/highlight/HighlightGrammars.hpp +28 -0
  157. package/cpp/highlight/code_highlight_podspec.rb +211 -0
  158. package/cpp/highlight/gen-registry.mjs +155 -0
  159. package/cpp/highlight/grammar-versions.json +159 -0
  160. package/cpp/highlight/vendor/generated/generated_queries.h +1665 -0
  161. package/cpp/highlight/vendor/generated/generated_registry.cpp +59 -0
  162. package/cpp/parser/MD4CParser.cpp +173 -61
  163. package/cpp/parser/MD4CParser.hpp +1 -0
  164. package/cpp/parser/MarkdownASTNode.hpp +2 -1
  165. package/cpp/wasm/ASTSerializer.cpp +2 -0
  166. package/cpp/wasm/build.sh +1 -0
  167. package/cpp/wasm/md4c_wasm.cpp +3 -1
  168. package/docs/ACCESSIBILITY.md +14 -2
  169. package/docs/API_REFERENCE.md +405 -12
  170. package/docs/BREAKING_CHANGES.md +129 -0
  171. package/docs/CODE_HIGHLIGHT.md +133 -0
  172. package/docs/COPY_OPTIONS.md +61 -3
  173. package/docs/ELEMENTS_STRUCTURE.md +52 -4
  174. package/docs/IMAGE_CACHING.md +30 -0
  175. package/docs/INPUT.md +110 -11
  176. package/docs/LATEX_MATH.md +87 -45
  177. package/docs/MACOS.md +1 -1
  178. package/docs/MARKDOWN_STREAMING.md +27 -1
  179. package/docs/MENTIONS.md +8 -1
  180. package/docs/NATIVE_ASSETS.md +127 -0
  181. package/docs/RTL.md +1 -1
  182. package/docs/STYLES.md +73 -6
  183. package/docs/TESTING.md +112 -0
  184. package/docs/TEXT.md +18 -6
  185. package/docs/WEB.md +4 -1
  186. package/ios/EnrichedMarkdown.h +7 -0
  187. package/ios/EnrichedMarkdown.mm +583 -76
  188. package/ios/EnrichedMarkdownText.h +7 -0
  189. package/ios/EnrichedMarkdownText.mm +299 -73
  190. package/ios/attachments/ENRMImageAttachment.h +9 -0
  191. package/ios/attachments/ENRMImageAttachment.m +143 -40
  192. package/ios/attachments/ENRMMathInlineAttachment+macOS.m +2 -1
  193. package/ios/attachments/ENRMMathInlineAttachment.h +5 -0
  194. package/ios/attachments/ENRMMathInlineAttachment.m +50 -82
  195. package/ios/attachments/ENRMMathInlineAttachmentShared.h +2 -0
  196. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/EventEmitters.cpp +223 -0
  197. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/EventEmitters.h +183 -0
  198. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/Props.cpp +65 -0
  199. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/Props.h +1086 -61
  200. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/RCTComponentViewHelpers.h +181 -2
  201. package/ios/input/ENRMAutoLinkDetector.h +2 -1
  202. package/ios/input/ENRMAutoLinkDetector.mm +79 -41
  203. package/ios/input/ENRMBlockEditCoordinator.h +71 -0
  204. package/ios/input/ENRMBlockEditCoordinator.mm +195 -0
  205. package/ios/input/ENRMBlockRange.h +28 -0
  206. package/ios/input/ENRMBlockRange.mm +30 -0
  207. package/ios/input/ENRMBlockStore.h +56 -0
  208. package/ios/input/ENRMBlockStore.mm +275 -0
  209. package/ios/input/ENRMClipboardCoordinator.h +45 -0
  210. package/ios/input/ENRMClipboardCoordinator.mm +120 -0
  211. package/ios/input/ENRMDetectorPipeline.h +2 -1
  212. package/ios/input/ENRMEditPipeline.h +76 -0
  213. package/ios/input/ENRMEditPipeline.mm +228 -0
  214. package/ios/input/ENRMEditSession.h +36 -0
  215. package/ios/input/ENRMEditSession.mm +63 -0
  216. package/ios/input/ENRMFormattingStore.h +17 -0
  217. package/ios/input/ENRMFormattingStore.mm +95 -105
  218. package/ios/input/ENRMInputBlockType.h +91 -0
  219. package/ios/input/ENRMInputBlockType.mm +5 -0
  220. package/ios/input/ENRMInputDecorationDrawer.h +18 -0
  221. package/ios/input/ENRMInputEventEmitter.h +56 -0
  222. package/ios/input/ENRMInputEventEmitter.mm +308 -0
  223. package/ios/input/ENRMInputFormatter.h +29 -69
  224. package/ios/input/ENRMInputFormatter.mm +216 -124
  225. package/ios/input/ENRMInputFormatterStyle.h +99 -0
  226. package/ios/input/ENRMInputFormatterStyle.mm +188 -0
  227. package/ios/input/ENRMInputLayoutManager.h +9 -0
  228. package/ios/input/ENRMInputLayoutManager.mm +30 -0
  229. package/ios/input/ENRMInputListMarkerDrawer.h +32 -0
  230. package/ios/input/ENRMInputListMarkerDrawer.mm +426 -0
  231. package/ios/input/ENRMInputParser.h +5 -6
  232. package/ios/input/ENRMInputParser.mm +461 -178
  233. package/ios/input/ENRMInputRemend.mm +2 -2
  234. package/ios/input/ENRMInputStyleStateBuilder.h +40 -0
  235. package/ios/input/ENRMInputStyleStateBuilder.mm +60 -0
  236. package/ios/input/ENRMInputTextView.mm +103 -8
  237. package/ios/input/ENRMInputTypingAttributesController.h +42 -0
  238. package/ios/input/ENRMInputTypingAttributesController.mm +203 -0
  239. package/ios/input/ENRMLinkCoordinator.h +41 -0
  240. package/ios/input/ENRMLinkCoordinator.mm +89 -0
  241. package/ios/input/ENRMMarkdownSerializer.h +29 -5
  242. package/ios/input/ENRMMarkdownSerializer.mm +170 -48
  243. package/ios/input/ENRMMathAtom.h +26 -0
  244. package/ios/input/ENRMMathAtom.mm +12 -0
  245. package/ios/input/ENRMMentionCoordinator.h +45 -0
  246. package/ios/input/ENRMMentionCoordinator.mm +167 -0
  247. package/ios/input/ENRMRangeEditAdjustment.h +38 -0
  248. package/ios/input/ENRMRangeEditAdjustment.mm +91 -0
  249. package/ios/input/ENRMRangeStoreUtils.h +39 -0
  250. package/ios/input/EnrichedMarkdownTextInput+ContextMenu.mm +6 -6
  251. package/ios/input/EnrichedMarkdownTextInput+Internal.h +11 -3
  252. package/ios/input/EnrichedMarkdownTextInput.h +7 -1
  253. package/ios/input/EnrichedMarkdownTextInput.mm +1089 -1023
  254. package/ios/input/InputStylePropsUtils.h +109 -68
  255. package/ios/input/internals/EnrichedMarkdownTextInputShadowNode.mm +2 -1
  256. package/ios/input/styles/ENRMBlockHandler.h +46 -0
  257. package/ios/input/styles/ENRMHeadingBlockHandler.h +15 -0
  258. package/ios/input/styles/ENRMHeadingBlockHandler.mm +38 -0
  259. package/ios/input/styles/ENRMOrderedListBlockHandler.h +14 -0
  260. package/ios/input/styles/ENRMOrderedListBlockHandler.mm +48 -0
  261. package/ios/input/styles/ENRMUnorderedListBlockHandler.h +15 -0
  262. package/ios/input/styles/ENRMUnorderedListBlockHandler.mm +51 -0
  263. package/ios/internals/ENRMViewFreeMeasurement.h +331 -0
  264. package/ios/internals/EnrichedMarkdownShadowNode.h +1 -3
  265. package/ios/internals/EnrichedMarkdownShadowNode.mm +16 -20
  266. package/ios/internals/EnrichedMarkdownTextShadowNode.h +1 -3
  267. package/ios/internals/EnrichedMarkdownTextShadowNode.mm +15 -20
  268. package/ios/internals/MeasurementCache.h +41 -9
  269. package/ios/internals/ShadowMeasurementUtils.h +63 -58
  270. package/ios/math/ENRMMathChipController.h +74 -0
  271. package/ios/math/ENRMMathChipController.mm +476 -0
  272. package/ios/math/ENRMRaTeXBridge.swift +27 -6
  273. package/ios/parser/ENRMMarkdownParser.h +1 -8
  274. package/ios/parser/ENRMMarkdownParser.mm +2 -11
  275. package/ios/parser/MarkdownASTNode.h +2 -1
  276. package/ios/parser/MarkdownParserBridge.mm +4 -0
  277. package/ios/renderer/AttributedRenderer.m +20 -2
  278. package/ios/renderer/BaseRenderer.h +17 -2
  279. package/ios/renderer/BaseRenderer.m +30 -0
  280. package/ios/renderer/BlockquoteRenderer.h +1 -1
  281. package/ios/renderer/BlockquoteRenderer.m +144 -35
  282. package/ios/renderer/CodeBlockRenderer.h +1 -1
  283. package/ios/renderer/CodeBlockRenderer.m +27 -23
  284. package/ios/renderer/CodeRenderer.h +1 -1
  285. package/ios/renderer/CodeRenderer.m +3 -1
  286. package/ios/renderer/ENRMImageRenderer.h +1 -1
  287. package/ios/renderer/ENRMImageRenderer.m +5 -1
  288. package/ios/renderer/ENRMMathInlineRenderer.h +1 -1
  289. package/ios/renderer/ENRMMathInlineRenderer.m +6 -1
  290. package/ios/renderer/ENRMSpoilerRenderer.h +1 -1
  291. package/ios/renderer/ENRMSpoilerRenderer.m +3 -1
  292. package/ios/renderer/EmphasisRenderer.h +1 -1
  293. package/ios/renderer/EmphasisRenderer.m +3 -1
  294. package/ios/renderer/HeadingRenderer.h +1 -1
  295. package/ios/renderer/HeadingRenderer.m +13 -6
  296. package/ios/renderer/HighlightRenderer.h +1 -1
  297. package/ios/renderer/HighlightRenderer.m +3 -1
  298. package/ios/renderer/LinkRenderer.h +1 -1
  299. package/ios/renderer/LinkRenderer.m +50 -16
  300. package/ios/renderer/ListItemRenderer.h +13 -1
  301. package/ios/renderer/ListItemRenderer.m +102 -44
  302. package/ios/renderer/ListRenderer.h +2 -2
  303. package/ios/renderer/ListRenderer.m +63 -25
  304. package/ios/renderer/ParagraphRenderer.h +1 -1
  305. package/ios/renderer/ParagraphRenderer.m +16 -8
  306. package/ios/renderer/RenderContext.h +10 -0
  307. package/ios/renderer/RenderContext.m +44 -0
  308. package/ios/renderer/RendererFactory.m +14 -0
  309. package/ios/renderer/StrikethroughRenderer.h +1 -1
  310. package/ios/renderer/StrikethroughRenderer.m +3 -1
  311. package/ios/renderer/StrongRenderer.h +1 -1
  312. package/ios/renderer/StrongRenderer.m +3 -1
  313. package/ios/renderer/SubscriptRenderer.h +1 -1
  314. package/ios/renderer/SubscriptRenderer.m +3 -1
  315. package/ios/renderer/SuperscriptRenderer.h +1 -1
  316. package/ios/renderer/SuperscriptRenderer.m +3 -1
  317. package/ios/renderer/TextRenderer.h +2 -2
  318. package/ios/renderer/TextRenderer.m +3 -1
  319. package/ios/renderer/ThematicBreakRenderer.h +1 -1
  320. package/ios/renderer/ThematicBreakRenderer.m +3 -1
  321. package/ios/renderer/UnderlineRenderer.h +1 -1
  322. package/ios/renderer/UnderlineRenderer.m +3 -1
  323. package/ios/styles/StyleConfig.h +42 -0
  324. package/ios/styles/StyleConfig.mm +216 -0
  325. package/ios/utils/BlockquoteBorder.h +6 -0
  326. package/ios/utils/BlockquoteBorder.m +249 -52
  327. package/ios/utils/CodeBackground.m +3 -65
  328. package/ios/utils/CodeBlockBackground.m +16 -2
  329. package/ios/utils/ENRMAtomicSize.h +65 -0
  330. package/ios/utils/ENRMBlockMenu.h +66 -0
  331. package/ios/utils/ENRMChipDrawing.h +24 -0
  332. package/ios/utils/ENRMChipDrawing.m +83 -0
  333. package/ios/utils/ENRMCodeBlockContent.h +37 -0
  334. package/ios/utils/ENRMCodeBlockContent.mm +79 -0
  335. package/ios/utils/ENRMCodeBlockHighlighter.h +37 -0
  336. package/ios/utils/ENRMCodeBlockHighlighter.mm +51 -0
  337. package/ios/utils/ENRMFeatureFlags.h +7 -0
  338. package/ios/utils/ENRMImageDownloader.h +11 -1
  339. package/ios/utils/ENRMImageDownloader.m +60 -16
  340. package/ios/utils/ENRMLinkChip.h +70 -0
  341. package/ios/utils/ENRMLinkChip.m +213 -0
  342. package/ios/utils/ENRMLinkLayout.h +50 -0
  343. package/ios/utils/ENRMLinkLayout.m +45 -0
  344. package/ios/utils/ENRMLocalImageLoader.h +31 -0
  345. package/ios/utils/ENRMLocalImageLoader.m +68 -0
  346. package/ios/utils/ENRMMathFallback.h +26 -0
  347. package/ios/utils/ENRMMathFallback.m +18 -0
  348. package/ios/utils/ENRMSelectionChange.h +120 -0
  349. package/ios/utils/ENRMSelectionChange.m +282 -0
  350. package/ios/utils/ENRMTextViewSetup.h +35 -17
  351. package/ios/utils/EditMenuUtils+macOS.m +4 -1
  352. package/ios/utils/EditMenuUtils.h +35 -6
  353. package/ios/utils/EditMenuUtils.m +188 -11
  354. package/ios/utils/HTMLGenerator.m +2 -1
  355. package/ios/utils/ImageRequestHeaderUtils.h +35 -0
  356. package/ios/utils/LastElementUtils.h +1 -0
  357. package/ios/utils/ListMarkerDrawer.m +29 -42
  358. package/ios/utils/MarkdownASTSerializer.m +4 -0
  359. package/ios/utils/MarkdownAccessibilityElementBuilder.m +3 -1
  360. package/ios/utils/MarkdownExtractor.m +2 -1
  361. package/ios/utils/ParagraphStyleUtils.h +5 -0
  362. package/ios/utils/ParagraphStyleUtils.m +77 -17
  363. package/ios/utils/RTFExportUtils.m +2 -0
  364. package/ios/utils/RenderedMarkdownSegment.h +13 -1
  365. package/ios/utils/RenderedMarkdownSegment.m +20 -0
  366. package/ios/utils/SegmentRenderer.m +17 -4
  367. package/ios/utils/StreamingMarkdownFilter.h +11 -1
  368. package/ios/utils/StreamingMarkdownFilter.m +98 -2
  369. package/ios/utils/StylePropsUtils.h +110 -1
  370. package/ios/utils/TaskListTapUtils.m +24 -0
  371. package/ios/utils/TextViewLayoutManager.mm +3 -0
  372. package/ios/views/ENRMCodeBlockContainerView.h +60 -0
  373. package/ios/views/ENRMCodeBlockContainerView.m +569 -0
  374. package/ios/views/ENRMMathContainerView.h +23 -0
  375. package/ios/views/ENRMMathContainerView.m +87 -20
  376. package/ios/views/TableContainerView.h +32 -0
  377. package/ios/views/TableContainerView.m +291 -175
  378. package/jest.d.ts +1 -0
  379. package/jest.js +5 -0
  380. package/lib/module/EnrichedMarkdownNativeComponent.ts +203 -1
  381. package/lib/module/EnrichedMarkdownTextInput.js +84 -5
  382. package/lib/module/EnrichedMarkdownTextInput.js.map +1 -1
  383. package/lib/module/EnrichedMarkdownTextInputNativeComponent.ts +78 -5
  384. package/lib/module/EnrichedMarkdownTextNativeComponent.ts +204 -1
  385. package/lib/module/headingDefaults.js +34 -0
  386. package/lib/module/headingDefaults.js.map +1 -0
  387. package/lib/module/index.js.map +1 -1
  388. package/lib/module/jest/index.js +205 -0
  389. package/lib/module/jest/index.js.map +1 -0
  390. package/lib/module/native/EnrichedMarkdownText.js +199 -15
  391. package/lib/module/native/EnrichedMarkdownText.js.map +1 -1
  392. package/lib/module/normalizeMarkdownStyle.js +98 -23
  393. package/lib/module/normalizeMarkdownStyle.js.map +1 -1
  394. package/lib/module/normalizeMarkdownStyle.web.js +73 -22
  395. package/lib/module/normalizeMarkdownStyle.web.js.map +1 -1
  396. package/lib/module/normalizeMarkdownTextInputStyle.js +62 -15
  397. package/lib/module/normalizeMarkdownTextInputStyle.js.map +1 -1
  398. package/lib/module/normalizeMenuItem.js +1 -1
  399. package/lib/module/utils/textInputState.js +26 -0
  400. package/lib/module/utils/textInputState.js.map +1 -0
  401. package/lib/module/web/EnrichedMarkdownText.js +15 -8
  402. package/lib/module/web/EnrichedMarkdownText.js.map +1 -1
  403. package/lib/module/web/parseMarkdown.js +4 -3
  404. package/lib/module/web/parseMarkdown.js.map +1 -1
  405. package/lib/module/web/renderers/InlineRenderers.js +102 -3
  406. package/lib/module/web/renderers/InlineRenderers.js.map +1 -1
  407. package/lib/module/web/renderers/ListRenderers.js +7 -2
  408. package/lib/module/web/renderers/ListRenderers.js.map +1 -1
  409. package/lib/module/web/renderers/index.js +7 -4
  410. package/lib/module/web/renderers/index.js.map +1 -1
  411. package/lib/module/web/styles.js +101 -6
  412. package/lib/module/web/styles.js.map +1 -1
  413. package/lib/module/web/utils.js +14 -0
  414. package/lib/module/web/utils.js.map +1 -1
  415. package/lib/module/web/wasm/md4c.js +0 -0
  416. package/lib/module/web/wasm/md4c.js.map +1 -1
  417. package/lib/typescript/src/EnrichedMarkdownNativeComponent.d.ts +185 -2
  418. package/lib/typescript/src/EnrichedMarkdownNativeComponent.d.ts.map +1 -1
  419. package/lib/typescript/src/EnrichedMarkdownTextInput.d.ts +94 -9
  420. package/lib/typescript/src/EnrichedMarkdownTextInput.d.ts.map +1 -1
  421. package/lib/typescript/src/EnrichedMarkdownTextInputNativeComponent.d.ts +69 -5
  422. package/lib/typescript/src/EnrichedMarkdownTextInputNativeComponent.d.ts.map +1 -1
  423. package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts +185 -2
  424. package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts.map +1 -1
  425. package/lib/typescript/src/headingDefaults.d.ts +9 -0
  426. package/lib/typescript/src/headingDefaults.d.ts.map +1 -0
  427. package/lib/typescript/src/index.d.ts +3 -3
  428. package/lib/typescript/src/index.d.ts.map +1 -1
  429. package/lib/typescript/src/index.web.d.ts +2 -2
  430. package/lib/typescript/src/index.web.d.ts.map +1 -1
  431. package/lib/typescript/src/jest/index.d.ts +6 -0
  432. package/lib/typescript/src/jest/index.d.ts.map +1 -0
  433. package/lib/typescript/src/native/EnrichedMarkdownText.d.ts +5 -5
  434. package/lib/typescript/src/native/EnrichedMarkdownText.d.ts.map +1 -1
  435. package/lib/typescript/src/normalizeMarkdownStyle.d.ts.map +1 -1
  436. package/lib/typescript/src/normalizeMarkdownStyle.web.d.ts.map +1 -1
  437. package/lib/typescript/src/normalizeMarkdownTextInputStyle.d.ts +19 -5
  438. package/lib/typescript/src/normalizeMarkdownTextInputStyle.d.ts.map +1 -1
  439. package/lib/typescript/src/types/MarkdownStyle.d.ts +122 -5
  440. package/lib/typescript/src/types/MarkdownStyle.d.ts.map +1 -1
  441. package/lib/typescript/src/types/MarkdownStyleInternal.d.ts +39 -0
  442. package/lib/typescript/src/types/MarkdownStyleInternal.d.ts.map +1 -1
  443. package/lib/typescript/src/types/MarkdownTextProps.d.ts +207 -10
  444. package/lib/typescript/src/types/MarkdownTextProps.d.ts.map +1 -1
  445. package/lib/typescript/src/types/MarkdownTextProps.web.d.ts +60 -1
  446. package/lib/typescript/src/types/MarkdownTextProps.web.d.ts.map +1 -1
  447. package/lib/typescript/src/types/events.d.ts +85 -0
  448. package/lib/typescript/src/types/events.d.ts.map +1 -1
  449. package/lib/typescript/src/utils/textInputState.d.ts +24 -0
  450. package/lib/typescript/src/utils/textInputState.d.ts.map +1 -0
  451. package/lib/typescript/src/web/EnrichedMarkdownText.d.ts +1 -1
  452. package/lib/typescript/src/web/EnrichedMarkdownText.d.ts.map +1 -1
  453. package/lib/typescript/src/web/parseMarkdown.d.ts +1 -1
  454. package/lib/typescript/src/web/parseMarkdown.d.ts.map +1 -1
  455. package/lib/typescript/src/web/renderers/InlineRenderers.d.ts.map +1 -1
  456. package/lib/typescript/src/web/renderers/ListRenderers.d.ts.map +1 -1
  457. package/lib/typescript/src/web/renderers/index.d.ts +2 -1
  458. package/lib/typescript/src/web/renderers/index.d.ts.map +1 -1
  459. package/lib/typescript/src/web/styles.d.ts +2 -1
  460. package/lib/typescript/src/web/styles.d.ts.map +1 -1
  461. package/lib/typescript/src/web/types.d.ts +10 -2
  462. package/lib/typescript/src/web/types.d.ts.map +1 -1
  463. package/lib/typescript/src/web/utils.d.ts +4 -0
  464. package/lib/typescript/src/web/utils.d.ts.map +1 -1
  465. package/package.json +36 -9
  466. package/postinstall.mjs +131 -0
  467. package/ratex-version.json +21 -0
  468. package/src/EnrichedMarkdownNativeComponent.ts +203 -1
  469. package/src/EnrichedMarkdownTextInput.tsx +159 -8
  470. package/src/EnrichedMarkdownTextInputNativeComponent.ts +78 -5
  471. package/src/EnrichedMarkdownTextNativeComponent.ts +204 -1
  472. package/src/headingDefaults.ts +21 -0
  473. package/src/index.tsx +15 -0
  474. package/src/index.web.tsx +6 -1
  475. package/src/jest/index.tsx +236 -0
  476. package/src/native/EnrichedMarkdownText.tsx +260 -11
  477. package/src/normalizeMarkdownStyle.ts +117 -16
  478. package/src/normalizeMarkdownStyle.web.ts +76 -15
  479. package/src/normalizeMarkdownTextInputStyle.ts +110 -35
  480. package/src/normalizeMenuItem.ts +1 -1
  481. package/src/types/MarkdownStyle.ts +125 -5
  482. package/src/types/MarkdownStyleInternal.ts +51 -0
  483. package/src/types/MarkdownTextProps.ts +215 -10
  484. package/src/types/MarkdownTextProps.web.ts +62 -1
  485. package/src/types/events.ts +90 -0
  486. package/src/utils/textInputState.ts +35 -0
  487. package/src/web/EnrichedMarkdownText.tsx +26 -5
  488. package/src/web/parseMarkdown.ts +6 -2
  489. package/src/web/renderers/InlineRenderers.tsx +116 -3
  490. package/src/web/renderers/ListRenderers.tsx +14 -2
  491. package/src/web/renderers/index.tsx +6 -2
  492. package/src/web/styles.ts +114 -5
  493. package/src/web/types.ts +10 -1
  494. package/src/web/utils.ts +9 -0
  495. package/src/web/wasm/md4c.js +0 -0
  496. package/vendor-grammars.mjs +511 -0
  497. package/vendor-ratex.mjs +173 -0
  498. package/app.plugin.js +0 -2
  499. package/plugin/build/withAndroidMath.js +0 -19
  500. package/plugin/build/withIosMath.js +0 -28
  501. package/plugin/build/withReactNativeEnrichedMarkdown.js +0 -11
  502. package/plugin/src/withAndroidMath.ts +0 -24
  503. package/plugin/src/withIosMath.ts +0 -35
  504. package/plugin/src/withReactNativeEnrichedMarkdown.ts +0 -17
  505. package/plugin/tsconfig.build.json +0 -16
@@ -2,8 +2,9 @@ import type { ComponentType, ReactNode } from 'react';
2
2
  import type { MarkdownStyleInternal } from '../types/MarkdownStyleInternal';
3
3
  import type { Styles } from './styles';
4
4
  import type { LinkPressEvent, LinkLongPressEvent, TaskListItemPressEvent } from '../types/events';
5
+ import type { LinkDecorationInfo } from '../types/MarkdownTextProps.web';
5
6
  import type { KaTeXInstance } from './katex';
6
- export type NodeType = 'Document' | 'Paragraph' | 'Text' | 'Link' | 'Heading' | 'LineBreak' | 'Strong' | 'Emphasis' | 'Strikethrough' | 'Underline' | 'Superscript' | 'Subscript' | 'Highlight' | 'Code' | 'Image' | 'Blockquote' | 'UnorderedList' | 'OrderedList' | 'ListItem' | 'CodeBlock' | 'ThematicBreak' | 'Table' | 'TableHead' | 'TableBody' | 'TableRow' | 'TableHeaderCell' | 'TableCell' | 'LatexMathInline' | 'LatexMathDisplay';
7
+ export type NodeType = 'Document' | 'Paragraph' | 'Text' | 'Link' | 'Heading' | 'LineBreak' | 'SoftBreak' | 'Strong' | 'Emphasis' | 'Strikethrough' | 'Underline' | 'Superscript' | 'Subscript' | 'Highlight' | 'Code' | 'Image' | 'Blockquote' | 'UnorderedList' | 'OrderedList' | 'ListItem' | 'CodeBlock' | 'ThematicBreak' | 'Table' | 'TableHead' | 'TableBody' | 'TableRow' | 'TableHeaderCell' | 'TableCell' | 'LatexMathInline' | 'LatexMathDisplay';
7
8
  export interface NodeAttributes {
8
9
  level?: string;
9
10
  url?: string;
@@ -16,6 +17,8 @@ export interface NodeAttributes {
16
17
  taskIndex?: number;
17
18
  /** Stamped by markInlineImages() — not present in the raw WASM output. */
18
19
  isInline?: boolean;
20
+ /** Stamped by indexLinks() — document-order link index, not in the raw WASM output. */
21
+ linkIndex?: number;
19
22
  colCount?: string;
20
23
  headRowCount?: string;
21
24
  bodyRowCount?: string;
@@ -27,22 +30,27 @@ export interface ASTNode {
27
30
  content?: string;
28
31
  /** Present on nodes that carry structural metadata (Heading, Link, etc.). */
29
32
  attributes?: NodeAttributes;
30
- /** Child nodes; absent on leaf nodes (Text, LineBreak, ThematicBreak). */
33
+ /** Child nodes; absent on leaf nodes (Text, LineBreak, SoftBreak, ThematicBreak). */
31
34
  children?: ASTNode[];
32
35
  }
33
36
  export interface RendererCallbacks {
34
37
  onLinkPress?: (event: LinkPressEvent) => void;
35
38
  onLinkLongPress?: (event: LinkLongPressEvent) => void;
36
39
  onTaskListItemPress?: (event: TaskListItemPressEvent) => void;
40
+ renderLinkDecoration?: (info: LinkDecorationInfo) => ReactNode | null;
37
41
  }
38
42
  export interface RenderCapabilities {
39
43
  katex: KaTeXInstance | null;
44
+ /** When false, task list checkboxes render read-only and ignore clicks. */
45
+ enableTaskListItemToggle: boolean;
40
46
  }
41
47
  export interface RendererProps {
42
48
  node: ASTNode;
43
49
  style: MarkdownStyleInternal;
44
50
  styles: Styles;
45
51
  parentType?: NodeType;
52
+ /** Position among the parent node's children. */
53
+ index?: number;
46
54
  callbacks: RendererCallbacks;
47
55
  capabilities: RenderCapabilities;
48
56
  renderChildren: (node: ASTNode) => ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/web/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,MAAM,QAAQ,GAChB,UAAU,GACV,WAAW,GACX,MAAM,GACN,MAAM,GACN,SAAS,GACT,WAAW,GACX,QAAQ,GACR,UAAU,GACV,eAAe,GACf,WAAW,GACX,aAAa,GACb,WAAW,GACX,WAAW,GACX,MAAM,GACN,OAAO,GACP,YAAY,GACZ,eAAe,GACf,aAAa,GACb,UAAU,GACV,WAAW,GACX,eAAe,GACf,OAAO,GACP,WAAW,GACX,WAAW,GACX,UAAU,GACV,iBAAiB,GACjB,WAAW,GACX,iBAAiB,GACjB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;CACjD;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,QAAQ,CAAC;IACf,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC9C,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACtD,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAC;CAC/D;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,qBAAqB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,YAAY,EAAE,kBAAkB,CAAC;IACjC,cAAc,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,SAAS,CAAC;CAC9C;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,CAC/B,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC,CAC/C,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/web/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAC5E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,MAAM,QAAQ,GAChB,UAAU,GACV,WAAW,GACX,MAAM,GACN,MAAM,GACN,SAAS,GACT,WAAW,GACX,WAAW,GACX,QAAQ,GACR,UAAU,GACV,eAAe,GACf,WAAW,GACX,aAAa,GACb,WAAW,GACX,WAAW,GACX,MAAM,GACN,OAAO,GACP,YAAY,GACZ,eAAe,GACf,aAAa,GACb,UAAU,GACV,WAAW,GACX,eAAe,GACf,OAAO,GACP,WAAW,GACX,WAAW,GACX,UAAU,GACV,iBAAiB,GACjB,WAAW,GACX,iBAAiB,GACjB,kBAAkB,CAAC;AAEvB,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uFAAuF;IACvF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;CACjD;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,QAAQ,CAAC;IACf,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,qFAAqF;IACrF,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC9C,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACtD,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAC9D,oBAAoB,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,SAAS,GAAG,IAAI,CAAC;CACvE;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAC5B,2EAA2E;IAC3E,wBAAwB,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,qBAAqB,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,iBAAiB,CAAC;IAC7B,YAAY,EAAE,kBAAkB,CAAC;IACjC,cAAc,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,SAAS,CAAC;CAC9C;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,CAC/B,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC,CAC/C,CAAC"}
@@ -11,6 +11,10 @@ export declare function filenameFromUrl(url: string): string;
11
11
  export declare function indexTaskItems(node: ASTNode, counter?: {
12
12
  value: number;
13
13
  }): void;
14
+ /** Stamps Link nodes with their document-order index (the `renderLinkDecoration` key). */
15
+ export declare function indexLinks(node: ASTNode, counter?: {
16
+ value: number;
17
+ }): void;
14
18
  /**
15
19
  * Stamps Image nodes with `isInline` when they appear inside a paragraph
16
20
  * that also contains other content (text, links, etc.).
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/web/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAGrD;AAED,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO;;CAAe,GAAG,IAAI,CAK1E;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAcpD"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/web/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAIrD;AAED,gEAAgE;AAChE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO;;CAAe,GAAG,IAAI,CAK1E;AAED,0FAA0F;AAC1F,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO;;CAAe,GAAG,IAAI,CAKtE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAcpD"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-native-enriched-markdown-scaffold",
3
- "version": "0.7.4-scaffold.9",
4
- "description": "Markdown Text component for React Native",
3
+ "version": "1.0.2-scaffold.10",
4
+ "description": "Markdown-based Rich Text solution for React Native",
5
5
  "main": "./lib/module/index",
6
6
  "module": "./lib/module/index",
7
7
  "source": "./src/index.tsx",
@@ -13,8 +13,15 @@
13
13
  "ios",
14
14
  "cpp",
15
15
  "*.podspec",
16
+ "jest.js",
17
+ "jest.d.ts",
16
18
  "react-native.config.js",
19
+ "postinstall.mjs",
20
+ "vendor-grammars.mjs",
21
+ "vendor-ratex.mjs",
22
+ "ratex-version.json",
17
23
  "!ios/build",
24
+ "!ios/vendor",
18
25
  "!android/build",
19
26
  "!android/gradle",
20
27
  "!android/gradlew",
@@ -24,10 +31,11 @@
24
31
  "!**/__fixtures__",
25
32
  "!**/__mocks__",
26
33
  "!**/.*",
27
- "app.plugin.js",
28
- "plugin",
29
34
  "docs"
30
35
  ],
36
+ "scripts": {
37
+ "postinstall": "node postinstall.mjs"
38
+ },
31
39
  "keywords": [
32
40
  "react-native",
33
41
  "expo",
@@ -45,29 +53,48 @@
45
53
  "registry": "https://registry.npmjs.org/"
46
54
  },
47
55
  "peerDependencies": {
48
- "@expo/config-plugins": ">=50.0.0",
49
56
  "katex": ">=0.16.0",
50
57
  "react": "*",
51
58
  "react-native": "*"
52
59
  },
53
60
  "peerDependenciesMeta": {
54
- "@expo/config-plugins": {
55
- "optional": true
56
- },
57
61
  "katex": {
58
62
  "optional": true
59
63
  }
60
64
  },
61
65
  "devDependencies": {
62
- "@expo/config-plugins": "^55.0.6",
66
+ "@babel/core": "^7.25.0",
63
67
  "@react-native/babel-preset": "0.85.0",
68
+ "@react-native/jest-preset": "0.85.0",
69
+ "@tree-sitter-grammars/tree-sitter-markdown": "0.3.2",
70
+ "@tree-sitter-grammars/tree-sitter-yaml": "0.7.1",
71
+ "@types/jest": "^29.5.0",
64
72
  "@types/node": "^22.0.0",
65
73
  "@types/react": "^19.2.0",
74
+ "babel-jest": "^29.7.0",
66
75
  "clang-format": "^1.8.0",
67
76
  "del-cli": "^7.0.0",
77
+ "jest": "^29.7.0",
68
78
  "react": "19.2.3",
69
79
  "react-native": "0.85.0",
70
80
  "react-native-builder-bob": "^0.41.0",
81
+ "test-renderer": "^1.0.0",
82
+ "tree-sitter-bash": "0.23.3",
83
+ "tree-sitter-c": "0.23.5",
84
+ "tree-sitter-c-sharp": "0.23.1",
85
+ "tree-sitter-cpp": "0.23.4",
86
+ "tree-sitter-css": "0.23.2",
87
+ "tree-sitter-go": "0.23.4",
88
+ "tree-sitter-html": "0.23.2",
89
+ "tree-sitter-java": "0.23.5",
90
+ "tree-sitter-javascript": "0.23.1",
91
+ "tree-sitter-json": "0.24.8",
92
+ "tree-sitter-php": "0.24.2",
93
+ "tree-sitter-python": "0.23.6",
94
+ "tree-sitter-ruby": "0.23.1",
95
+ "tree-sitter-rust": "0.23.2",
96
+ "tree-sitter-swift": "0.7.0",
97
+ "tree-sitter-typescript": "0.23.2",
71
98
  "typescript": "^6.0.2"
72
99
  },
73
100
  "react-native-builder-bob": {
@@ -0,0 +1,131 @@
1
+ #!/usr/bin/env node
2
+ // Thin wrapper that invokes vendor-grammars.mjs and vendor-ratex.mjs in
3
+ // consumer mode (--from-npm) to download vendored native assets after install.
4
+ //
5
+ // In the monorepo, grammar-versions.json is not present at the expected path
6
+ // (it is only copied during prepack), so this script is a no-op -- the
7
+ // `prepare` script handles vendoring via the same scripts with monorepo paths.
8
+
9
+ import fs from 'node:fs';
10
+ import path from 'node:path';
11
+ import { fileURLToPath } from 'node:url';
12
+ import { spawnSync } from 'node:child_process';
13
+
14
+ const PKG_ROOT = path.dirname(fileURLToPath(import.meta.url));
15
+ const LOG = '[react-native-enriched-markdown-scaffold]';
16
+
17
+ const grammarManifest = path.join(PKG_ROOT, 'cpp/highlight/grammar-versions.json');
18
+ if (!fs.existsSync(grammarManifest)) {
19
+ console.log(`${LOG} grammar-versions.json not found; skipping postinstall.`);
20
+ console.log(`${LOG} This is expected in monorepo development (use \`yarn prepare\`).`);
21
+ process.exit(0);
22
+ }
23
+
24
+ // Consumer opt-out. npm/yarn/pnpm set INIT_CWD to the project root running the
25
+ // install, so the consumer declares which heavy native assets to skip downloading
26
+ // via an `enriched-markdown` block in their own package.json:
27
+ //
28
+ // { "enriched-markdown": { "enableCodeHighlight": false, "enableMath": false } }
29
+ //
30
+ // Both features default to enabled (opt-out, not opt-in). Any resolution failure
31
+ // (INIT_CWD unset, unreadable/malformed JSON, absent key) falls back to downloading
32
+ // everything -- a skipped download is far cheaper to recover from than a silently
33
+ // missing feature. In a monorepo INIT_CWD is the workspace root where the install
34
+ // ran, so the download opt-out lives in the root package.json (one shared node_modules).
35
+ //
36
+ // The native build reads the *app* package.json directly (via the podspec's
37
+ // installation root / gradle's build root -- see the podspecs and android/build.gradle),
38
+ // which is a separate per-app decision. It reconciles that flag with asset presence on
39
+ // disk: an explicit opt-in with the asset missing fails loud, a default-on with it
40
+ // missing degrades to a clean build.
41
+ function resolveConsumerConfig() {
42
+ const initCwd = process.env.INIT_CWD;
43
+ if (!initCwd) {
44
+ return {};
45
+ }
46
+ try {
47
+ const pkg = JSON.parse(fs.readFileSync(path.join(initCwd, 'package.json'), 'utf8'));
48
+ const config = pkg['enriched-markdown'];
49
+ return config && typeof config === 'object' ? config : {};
50
+ } catch {
51
+ return {};
52
+ }
53
+ }
54
+
55
+ const consumerConfig = resolveConsumerConfig();
56
+
57
+ // This script only decides what to DOWNLOAD into node_modules. The native build
58
+ // (podspec + build.gradle) reads the app package.json directly to decide what to
59
+ // compile/link, so nothing is written here for it to consume. The `codeHighlightLanguages`
60
+ // subset is a build-time concern (a language subset is selected from the full downloaded
61
+ // grammar set), so it is intentionally not read here. ENV vars are a deprecated fallback,
62
+ // honored only when package.json has no explicit value.
63
+ let enableCodeHighlight = consumerConfig.enableCodeHighlight;
64
+ let enableMath = consumerConfig.enableMath;
65
+
66
+ if (enableCodeHighlight === undefined && process.env.ENRICHED_MARKDOWN_ENABLE_CODE_HIGHLIGHT) {
67
+ console.warn(`${LOG} DEPRECATED: ENRICHED_MARKDOWN_ENABLE_CODE_HIGHLIGHT env var will be removed in a future version. Configure via "enriched-markdown".enableCodeHighlight in your package.json instead.`);
68
+ enableCodeHighlight = process.env.ENRICHED_MARKDOWN_ENABLE_CODE_HIGHLIGHT !== '0';
69
+ }
70
+ if (enableMath === undefined && process.env.ENRICHED_MARKDOWN_ENABLE_MATH) {
71
+ console.warn(`${LOG} DEPRECATED: ENRICHED_MARKDOWN_ENABLE_MATH env var will be removed in a future version. Configure via "enriched-markdown".enableMath in your package.json instead.`);
72
+ enableMath = process.env.ENRICHED_MARKDOWN_ENABLE_MATH !== '0';
73
+ }
74
+
75
+ enableCodeHighlight = enableCodeHighlight !== false;
76
+ enableMath = enableMath !== false;
77
+
78
+ if (!enableCodeHighlight && !enableMath) {
79
+ console.log(`${LOG} both code highlighting and math are disabled via package.json ("enriched-markdown"); skipping postinstall.`);
80
+ process.exit(0);
81
+ }
82
+
83
+ console.log(`${LOG} restoring vendored native assets ...`);
84
+
85
+ const vendorGrammars = path.join(PKG_ROOT, 'vendor-grammars.mjs');
86
+ const vendorRatex = path.join(PKG_ROOT, 'vendor-ratex.mjs');
87
+ const vendorDir = path.join(PKG_ROOT, 'cpp/highlight/vendor');
88
+ const ratexManifest = path.join(PKG_ROOT, 'ratex-version.json');
89
+ const iosVendor = path.join(PKG_ROOT, 'ios/vendor');
90
+
91
+ let failed = false;
92
+
93
+ // Tree-sitter runtime + grammar C sources
94
+ if (enableCodeHighlight) {
95
+ const r1 = spawnSync(process.execPath, [
96
+ vendorGrammars,
97
+ '--from-npm',
98
+ '--vendor-dir', vendorDir,
99
+ '--manifest', grammarManifest,
100
+ ], { stdio: 'inherit' });
101
+ if (r1.status !== 0) {
102
+ console.warn(`${LOG} WARNING: vendor-grammars failed. Code highlighting may not work.`);
103
+ failed = true;
104
+ }
105
+ } else {
106
+ console.log(`${LOG} code highlighting disabled via package.json ("enriched-markdown".enableCodeHighlight = false); skipping tree-sitter grammars.`);
107
+ }
108
+
109
+ // RaTeX XCFramework + Swift sources + fonts (iOS math)
110
+ if (!enableMath) {
111
+ console.log(`${LOG} math disabled via package.json ("enriched-markdown".enableMath = false); skipping RaTeX.`);
112
+ } else if (fs.existsSync(ratexManifest) && fs.existsSync(vendorRatex)) {
113
+ const r2 = spawnSync(process.execPath, [
114
+ vendorRatex,
115
+ '--manifest', ratexManifest,
116
+ '--output', iosVendor,
117
+ ], { stdio: 'inherit' });
118
+ if (r2.status !== 0) {
119
+ console.warn(`${LOG} WARNING: vendor-ratex failed. iOS math rendering may not work.`);
120
+ failed = true;
121
+ }
122
+ }
123
+
124
+ if (failed) {
125
+ console.warn(
126
+ `${LOG} Some downloads failed. Ensure network access to registry.npmjs.org and github.com, ` +
127
+ `then re-run: node node_modules/react-native-enriched-markdown-scaffold/postinstall.mjs`
128
+ );
129
+ }
130
+
131
+ console.log(`${LOG} postinstall complete.`);
@@ -0,0 +1,21 @@
1
+ {
2
+ "$comment": "Pins the RaTeX Apple integration for vendor-ratex.mjs. Instead of React Native's spm_dependency (which builds/signs RaTeX's Swift wrapper from SPM source at build time and caused #491/#527), we vendor the prebuilt static XCFramework plus RaTeX's four core Swift sources and KaTeX fonts into packages/react-native-enriched-markdown/ios/vendor/ (gitignored, reproduced on demand, shipped in the npm tarball via prepack). Same mechanism as the tree-sitter runtime pin in grammar-versions.json. To re-pin: bump tag, download the two assets, run `node vendor/vendor-ratex.mjs --force`, and paste the sha256 it prints on mismatch. The swiftSources list mirrors erweixin/RaTeX's RaTeXCore.podspec; PlatformCompat.swift and RaTeXView.swift are intentionally omitted (the four files typecheck standalone and pull in no React Native/UI surface).",
3
+ "tag": "v0.1.14",
4
+ "xcframework": {
5
+ "url": "https://github.com/erweixin/RaTeX/releases/download/v0.1.14/RaTeX.xcframework.zip",
6
+ "sha256": "16b84a5e9b9f80ed4910c490f96dda047662e9bdd0934817ecf4464cf02581f2"
7
+ },
8
+ "source": {
9
+ "url": "https://github.com/erweixin/RaTeX/archive/refs/tags/v0.1.14.tar.gz",
10
+ "sha256": "2da907eb5dfcb464c7eef3b4c657fbdee144e3c6633e81efb1e56dcf1c76e01b",
11
+ "prefix": "RaTeX-0.1.14",
12
+ "swiftSources": [
13
+ "platforms/ios/Sources/Ratex/DisplayList.swift",
14
+ "platforms/ios/Sources/Ratex/RaTeXEngine.swift",
15
+ "platforms/ios/Sources/Ratex/RaTeXFontLoader.swift",
16
+ "platforms/ios/Sources/Ratex/RaTeXRenderer.swift"
17
+ ],
18
+ "fontsDir": "platforms/ios/Sources/Ratex/Fonts",
19
+ "license": "LICENSE"
20
+ }
21
+ }
@@ -1,9 +1,12 @@
1
1
  import {
2
2
  codegenNativeComponent,
3
+ codegenNativeCommands,
3
4
  type ViewProps,
4
5
  type CodegenTypes,
5
6
  type ColorValue,
7
+ type HostComponent,
6
8
  } from 'react-native';
9
+ import type React from 'react';
7
10
 
8
11
  // All block styles extend this interface
9
12
  interface BaseBlockStyleInternal {
@@ -29,6 +32,8 @@ interface BlockquoteStyleInternal extends BaseBlockStyleInternal {
29
32
  borderWidth: CodegenTypes.Float;
30
33
  gapWidth: CodegenTypes.Float;
31
34
  backgroundColor: ColorValue;
35
+ borderRadius: CodegenTypes.Float;
36
+ padding: CodegenTypes.Float;
32
37
  }
33
38
 
34
39
  interface ListStyleInternal extends BaseBlockStyleInternal {
@@ -39,6 +44,24 @@ interface ListStyleInternal extends BaseBlockStyleInternal {
39
44
  markerFontWeight: string;
40
45
  gapWidth: CodegenTypes.Float;
41
46
  marginLeft: CodegenTypes.Float;
47
+ itemSpacing: CodegenTypes.Float;
48
+ }
49
+
50
+ interface CodeBlockSyntaxColorsInternal {
51
+ keyword: ColorValue;
52
+ operatorColor: ColorValue;
53
+ punctuation: ColorValue;
54
+ string: ColorValue;
55
+ number: ColorValue;
56
+ constant: ColorValue;
57
+ comment: ColorValue;
58
+ function: ColorValue;
59
+ type: ColorValue;
60
+ variable: ColorValue;
61
+ property: ColorValue;
62
+ tag: ColorValue;
63
+ attribute: ColorValue;
64
+ embedded: ColorValue;
42
65
  }
43
66
 
44
67
  interface CodeBlockStyleInternal extends BaseBlockStyleInternal {
@@ -47,6 +70,7 @@ interface CodeBlockStyleInternal extends BaseBlockStyleInternal {
47
70
  borderRadius: CodegenTypes.Float;
48
71
  borderWidth: CodegenTypes.Float;
49
72
  padding: CodegenTypes.Float;
73
+ syntaxColors: CodeBlockSyntaxColorsInternal;
50
74
  }
51
75
 
52
76
  interface LinkStyleInternal {
@@ -54,6 +78,11 @@ interface LinkStyleInternal {
54
78
  color: ColorValue;
55
79
  underline: boolean;
56
80
  backgroundColor: ColorValue;
81
+ borderRadius: CodegenTypes.Float;
82
+ paddingHorizontal: CodegenTypes.Float;
83
+ paddingVertical: CodegenTypes.Float;
84
+ borderColor: ColorValue;
85
+ borderWidth: CodegenTypes.Float;
57
86
  }
58
87
 
59
88
  // Mirrors EnrichedMarkdownTextNativeComponent.ts — kept in sync manually (codegen spec files must be self-contained).
@@ -62,6 +91,11 @@ interface LinkVariantEntryInternal {
62
91
  color: ColorValue;
63
92
  underline: boolean;
64
93
  backgroundColor: ColorValue;
94
+ borderRadius: CodegenTypes.Float;
95
+ paddingHorizontal: CodegenTypes.Float;
96
+ paddingVertical: CodegenTypes.Float;
97
+ borderColor: ColorValue;
98
+ borderWidth: CodegenTypes.Float;
65
99
  }
66
100
 
67
101
  interface StrongStyleInternal {
@@ -94,6 +128,9 @@ interface CodeStyleInternal {
94
128
 
95
129
  interface ImageStyleInternal {
96
130
  height: CodegenTypes.Float;
131
+ maxHeight: CodegenTypes.Float;
132
+ aspectRatio: CodegenTypes.Float;
133
+ resizeMode: string;
97
134
  borderRadius: CodegenTypes.Float;
98
135
  marginTop: CodegenTypes.Float;
99
136
  marginBottom: CodegenTypes.Float;
@@ -121,6 +158,8 @@ interface TableStyleInternal extends BaseBlockStyleInternal {
121
158
  borderRadius: CodegenTypes.Float;
122
159
  cellPaddingHorizontal: CodegenTypes.Float;
123
160
  cellPaddingVertical: CodegenTypes.Float;
161
+ horizontalOverflow: CodegenTypes.Float;
162
+ align: string;
124
163
  }
125
164
 
126
165
  interface TaskListStyleInternal {
@@ -142,12 +181,14 @@ interface MathStyleInternal {
142
181
  marginBottom: CodegenTypes.Float;
143
182
  textAlign: string;
144
183
  fontWeight: string;
184
+ glyphOverflow: CodegenTypes.Float;
145
185
  }
146
186
 
147
187
  interface InlineMathStyleInternal {
148
188
  color: ColorValue;
149
189
  paddingVertical: CodegenTypes.Float;
150
190
  fontWeight: string;
191
+ glyphOverflow: CodegenTypes.Float;
151
192
  }
152
193
 
153
194
  interface SpoilerParticlesStyleInternal {
@@ -219,17 +260,88 @@ export interface LinkLongPressEvent {
219
260
  url: string;
220
261
  }
221
262
 
263
+ /**
264
+ * `fragments` holds one entry per laid-out line of a link (a wrapping link
265
+ * yields several). Rects are in dp, relative to the native view's origin, and
266
+ * cover the drawn chip (glyphs + padding). Flattened rather than nested per
267
+ * link, and written inline, because codegen only accepts inline object
268
+ * literals as event array elements.
269
+ */
270
+ export interface LinkLayoutEvent {
271
+ fragments: {
272
+ linkIndex: CodegenTypes.Int32;
273
+ url: string;
274
+ text: string;
275
+ x: CodegenTypes.Double;
276
+ y: CodegenTypes.Double;
277
+ width: CodegenTypes.Double;
278
+ height: CodegenTypes.Double;
279
+ }[];
280
+ }
281
+
282
+ /**
283
+ * Current text selection, or a long-pressed table / math / code block while
284
+ * `contextMenuHidden` is on. `active: false` means the selection was cleared
285
+ * (every other field is then empty / zero). Rects are in dp / pt, relative to
286
+ * the native view's origin; rect objects are written inline because codegen
287
+ * only accepts inline object literals in event payloads.
288
+ */
289
+ export interface SelectionChangeEvent {
290
+ active: boolean;
291
+ source: string;
292
+ text: string;
293
+ markdown: string;
294
+ whole: boolean;
295
+ rect: {
296
+ x: CodegenTypes.Double;
297
+ y: CodegenTypes.Double;
298
+ width: CodegenTypes.Double;
299
+ height: CodegenTypes.Double;
300
+ };
301
+ startRect: {
302
+ x: CodegenTypes.Double;
303
+ y: CodegenTypes.Double;
304
+ width: CodegenTypes.Double;
305
+ height: CodegenTypes.Double;
306
+ };
307
+ endRect: {
308
+ x: CodegenTypes.Double;
309
+ y: CodegenTypes.Double;
310
+ width: CodegenTypes.Double;
311
+ height: CodegenTypes.Double;
312
+ };
313
+ adjusting: boolean;
314
+ }
315
+
222
316
  export interface TaskListItemPressEvent {
223
317
  index: CodegenTypes.Int32;
224
318
  checked: boolean;
225
319
  text: string;
226
320
  }
227
321
 
322
+ export interface CopyPressEvent {
323
+ code: string;
324
+ language: string;
325
+ }
326
+
327
+ export interface CopyRequestEvent {
328
+ // 'selection' | 'math' | 'table' | 'code'
329
+ source: string;
330
+ markdown: string;
331
+ text: string;
332
+ whole: boolean;
333
+ }
334
+
228
335
  export interface ContextMenuItemConfig {
229
336
  text: string;
230
337
  icon?: string;
231
338
  }
232
339
 
340
+ export interface ImageRequestHeaderInternal {
341
+ name: string;
342
+ value: string;
343
+ }
344
+
233
345
  export interface SelectionMenuConfig {
234
346
  copyAsMarkdown: boolean;
235
347
  copyImageUrl: boolean;
@@ -240,6 +352,16 @@ export interface SelectionMenuConfig {
240
352
  // Precomputed plural templates indexed by image count (0..100). Empty when no
241
353
  // pluralLabels are set; native then uses copyImageUrlLabel/copyImageUrlsLabel.
242
354
  copyImageUrlPluralTemplates: ReadonlyArray<string>;
355
+ // false removes the Copy item from the text and block menus.
356
+ copyEnabled: boolean;
357
+ // true: Copy writes Markdown (plain text) instead of rich text / raw block content.
358
+ copyFormatMarkdown: boolean;
359
+ // true: the text selection menu drops every system-provided item.
360
+ systemItemsNone: boolean;
361
+ // false hides the copy button in the code block header.
362
+ codeBlockCopyButton: boolean;
363
+ // true: the Copy item emits onCopyRequest instead of writing the clipboard.
364
+ interceptCopy: boolean;
243
365
  }
244
366
 
245
367
  export interface OnContextMenuItemPressEvent {
@@ -311,10 +433,16 @@ export interface Md4cFlagsInternal {
311
433
  * @default false
312
434
  */
313
435
  highlight: boolean;
436
+ /**
437
+ * Treat soft breaks (single newlines) as hard breaks (visible line breaks).
438
+ * @default false
439
+ */
440
+ hardSoftBreaks: boolean;
314
441
  }
315
442
 
316
443
  interface StreamingConfigInternal {
317
444
  tableMode: string;
445
+ codeBlockMode: string;
318
446
  }
319
447
 
320
448
  export interface NativeProps extends ViewProps {
@@ -340,11 +468,56 @@ export interface NativeProps extends ViewProps {
340
468
  * - Android: Handles long press gestures on links.
341
469
  */
342
470
  onLinkLongPress?: CodegenTypes.BubblingEventHandler<LinkLongPressEvent>;
471
+ /**
472
+ * When true, the view reports the laid-out rects of every link through
473
+ * `onLinkLayout` (after each render and whenever its size changes).
474
+ * Set by the JS wrapper only when `renderLinkDecoration` is provided.
475
+ * @default false
476
+ */
477
+ emitLinkLayout?: CodegenTypes.WithDefault<boolean, false>;
478
+ /**
479
+ * Fired with the rects of every link fragment while `emitLinkLayout` is on.
480
+ * Deduplicated: not re-fired when the payload is unchanged.
481
+ */
482
+ onLinkLayout?: CodegenTypes.DirectEventHandler<LinkLayoutEvent>;
483
+ /**
484
+ * When true, the view reports selection changes (and, with
485
+ * `contextMenuHidden`, block long-presses) through `onSelectionChange`.
486
+ * Set by the JS wrapper only when `onSelectionChange` is provided.
487
+ * @default false
488
+ */
489
+ emitSelectionChange?: CodegenTypes.WithDefault<boolean, false>;
490
+ /**
491
+ * Fired while `emitSelectionChange` is on: coalesced to one event per frame,
492
+ * deduplicated, and `active: false` once the selection is gone.
493
+ */
494
+ onSelectionChange?: CodegenTypes.DirectEventHandler<SelectionChangeEvent>;
343
495
  /**
344
496
  * Callback fired when a task list checkbox is tapped.
345
497
  * Receives the 0-based task index, current checked state, and the item's plain text.
346
498
  */
347
499
  onTaskListItemPress?: CodegenTypes.BubblingEventHandler<TaskListItemPressEvent>;
500
+ /**
501
+ * Controls whether tapping a task list checkbox toggles its checked state.
502
+ *
503
+ * When `false`, the tap is fully inert: no visual toggle and no
504
+ * `onTaskListItemPress` emission. Text selection and links are unaffected.
505
+ *
506
+ * @default true
507
+ */
508
+ enableTaskListItemToggle?: CodegenTypes.WithDefault<boolean, true>;
509
+ /**
510
+ * Callback fired when code is copied from a fenced code block's header copy
511
+ * button, its long-press context-menu "Copy" action, or the VoiceOver copy
512
+ * action. Receives the copied code and its language.
513
+ */
514
+ onCopyPress?: CodegenTypes.BubblingEventHandler<CopyPressEvent>;
515
+ /**
516
+ * Fired instead of writing the clipboard when the Copy item of the text
517
+ * selection menu or a table / math / code block menu is pressed while
518
+ * `selectionMenuConfig.interceptCopy` is set.
519
+ */
520
+ onCopyRequest?: CodegenTypes.BubblingEventHandler<CopyRequestEvent>;
348
521
  /**
349
522
  * Controls whether the system link preview is shown on long press (iOS only).
350
523
  *
@@ -358,6 +531,16 @@ export interface NativeProps extends ViewProps {
358
531
  * @default true
359
532
  */
360
533
  enableLinkPreview?: CodegenTypes.WithDefault<boolean, true>;
534
+ /**
535
+ * When `true`, long-pressing a link selects its label and shows the
536
+ * selection edit menu instead of the system link preview (iOS only).
537
+ * Takes precedence over `enableLinkPreview` and `onLinkLongPress`.
538
+ *
539
+ * Android: No-op.
540
+ *
541
+ * @default false
542
+ */
543
+ linkLongPressSelects?: CodegenTypes.WithDefault<boolean, false>;
361
544
  /**
362
545
  * - iOS: Controls text selection and link previews on long press.
363
546
  * - Android: Controls text selection.
@@ -425,10 +608,18 @@ export interface NativeProps extends ViewProps {
425
608
  */
426
609
  spoilerOverlay?: CodegenTypes.WithDefault<string, 'particles'>;
427
610
 
611
+ /**
612
+ * Hides the text selection context menu while keeping text selectable.
613
+ */
614
+ contextMenuHidden?: CodegenTypes.WithDefault<boolean, false>;
428
615
  /**
429
616
  * Custom items to show in the text selection context menu.
430
617
  */
431
618
  contextMenuItems?: ReadonlyArray<Readonly<ContextMenuItemConfig>>;
619
+ /**
620
+ * HTTP headers attached to remote image requests, as name/value pairs.
621
+ */
622
+ imageRequestHeaders?: ReadonlyArray<Readonly<ImageRequestHeaderInternal>>;
432
623
  /**
433
624
  * Built-in items to show in the text selection context menu.
434
625
  */
@@ -464,6 +655,17 @@ export interface NativeProps extends ViewProps {
464
655
  writingDirection?: CodegenTypes.WithDefault<string, 'first-strong'>;
465
656
  }
466
657
 
658
+ type ComponentType = HostComponent<NativeProps>;
659
+
660
+ interface NativeCommands {
661
+ /** Clears the text selection (and any active block) and fires `onSelectionChange` with `active: false`. */
662
+ clearSelection: (viewRef: React.ElementRef<ComponentType>) => void;
663
+ }
664
+
665
+ export const Commands: NativeCommands = codegenNativeCommands<NativeCommands>({
666
+ supportedCommands: ['clearSelection'],
667
+ });
668
+
467
669
  export default codegenNativeComponent<NativeProps>('EnrichedMarkdown', {
468
670
  interfaceOnly: true,
469
- });
671
+ }) as HostComponent<NativeProps>;