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

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 (469) hide show
  1. package/README.md +54 -8
  2. package/ReactNativeEnrichedMarkdown.podspec +82 -73
  3. package/android/build.gradle +186 -1
  4. package/android/consumer-rules.pro +1 -1
  5. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownManagerDelegate.java +9 -0
  6. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownManagerInterface.java +3 -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 +9 -0
  10. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerInterface.java +3 -0
  11. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.cpp +75 -0
  12. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.h +63 -0
  13. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.cpp +35 -0
  14. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.h +886 -23
  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 +189 -13
  18. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownInternalText.kt +17 -0
  19. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownManager.kt +50 -0
  20. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownText.kt +48 -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 +42 -0
  23. package/android/src/main/java/com/swmansion/enriched/markdown/MeasurementStore.kt +82 -4
  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/input/EnrichedMarkdownTextInputManager.kt +54 -4
  26. package/android/src/main/java/com/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputView.kt +901 -462
  27. package/android/src/main/java/com/swmansion/enriched/markdown/input/MarkdownClipboard.kt +42 -0
  28. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/BlockEditCoordinator.kt +196 -0
  29. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/ClipboardCoordinator.kt +73 -0
  30. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/EditContext.kt +19 -0
  31. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/EditPipeline.kt +248 -0
  32. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/EditSession.kt +52 -0
  33. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/InputConnectionWrapper.kt +101 -7
  34. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/LinkCoordinator.kt +69 -0
  35. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/MarkdownTextWatcher.kt +3 -3
  36. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/MentionCoordinator.kt +118 -0
  37. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnChangeStateEvent.kt +26 -0
  38. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnContextMenuItemPressEvent.kt +26 -0
  39. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnInputKeyPressEvent.kt +24 -0
  40. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnPasteEvent.kt +24 -0
  41. package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/BlockStore.kt +254 -0
  42. package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/FormattingStore.kt +80 -87
  43. package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputFormatter.kt +109 -1
  44. package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputParser.kt +116 -22
  45. package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/MarkdownSerializer.kt +167 -38
  46. package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/RangeEditAdjustment.kt +149 -0
  47. package/android/src/main/java/com/swmansion/enriched/markdown/input/layout/InputEventEmitter.kt +66 -5
  48. package/android/src/main/java/com/swmansion/enriched/markdown/input/layout/InputMeasurementStore.kt +4 -2
  49. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/BlockRange.kt +27 -0
  50. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/BlockType.kt +48 -0
  51. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/FormattingRange.kt +9 -4
  52. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/InputFormatterStyle.kt +39 -2
  53. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/MathAtom.kt +20 -0
  54. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/MathChipStyle.kt +1 -1
  55. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/MutableRangeBounds.kt +11 -0
  56. package/android/src/main/java/com/swmansion/enriched/markdown/input/spans/InputBulletSpan.kt +82 -0
  57. package/android/src/main/java/com/swmansion/enriched/markdown/input/spans/InputHeadingSpan.kt +58 -0
  58. package/android/src/main/java/com/swmansion/enriched/markdown/input/spans/InputListItemSpacingSpan.kt +37 -0
  59. package/android/src/main/java/com/swmansion/enriched/markdown/input/spans/InputOrderedListMarkerSpan.kt +63 -0
  60. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/BlockHandler.kt +54 -0
  61. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/HeadingBlockHandler.kt +27 -0
  62. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/OrderedListBlockHandler.kt +38 -0
  63. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/UnorderedListBlockHandler.kt +37 -0
  64. package/android/src/main/java/com/swmansion/enriched/markdown/input/toolbar/InputContextMenu.kt +8 -26
  65. package/android/src/main/java/com/swmansion/enriched/markdown/parser/MarkdownASTNode.kt +1 -0
  66. package/android/src/main/java/com/swmansion/enriched/markdown/parser/Parser.kt +1 -0
  67. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BlockStyleContext.kt +9 -2
  68. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BlockquoteRenderer.kt +100 -12
  69. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/CodeBlockRenderer.kt +16 -1
  70. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/HeadingRenderer.kt +4 -0
  71. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListContextManager.kt +2 -1
  72. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListItemRenderer.kt +74 -18
  73. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListRenderer.kt +43 -4
  74. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/NodeRenderer.kt +9 -1
  75. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SoftBreakRenderer.kt +16 -0
  76. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SpanStyleCache.kt +30 -27
  77. package/android/src/main/java/com/swmansion/enriched/markdown/spans/BaseListSpan.kt +24 -0
  78. package/android/src/main/java/com/swmansion/enriched/markdown/spans/BlockquoteSpan.kt +174 -24
  79. package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeBackgroundSpan.kt +27 -3
  80. package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeBlockSpan.kt +13 -16
  81. package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeSpan.kt +1 -1
  82. package/android/src/main/java/com/swmansion/enriched/markdown/spans/EmphasisSpan.kt +1 -1
  83. package/android/src/main/java/com/swmansion/enriched/markdown/spans/ImageSpan.kt +182 -46
  84. package/android/src/main/java/com/swmansion/enriched/markdown/spans/ListItemSpacingSpan.kt +33 -0
  85. package/android/src/main/java/com/swmansion/enriched/markdown/spans/ListMarkerAnchorSpan.kt +38 -0
  86. package/android/src/main/java/com/swmansion/enriched/markdown/spans/OrderedListSpan.kt +2 -0
  87. package/android/src/main/java/com/swmansion/enriched/markdown/spans/StrongSpan.kt +1 -1
  88. package/android/src/main/java/com/swmansion/enriched/markdown/spans/TaskListSpan.kt +3 -2
  89. package/android/src/main/java/com/swmansion/enriched/markdown/spans/UnorderedListSpan.kt +3 -2
  90. package/android/src/main/java/com/swmansion/enriched/markdown/styles/BlockquoteStyle.kt +6 -0
  91. package/android/src/main/java/com/swmansion/enriched/markdown/styles/CodeBlockStyle.kt +26 -0
  92. package/android/src/main/java/com/swmansion/enriched/markdown/styles/ImageStyle.kt +7 -1
  93. package/android/src/main/java/com/swmansion/enriched/markdown/styles/ListStyle.kt +4 -1
  94. package/android/src/main/java/com/swmansion/enriched/markdown/styles/StyleConfig.kt +13 -4
  95. package/android/src/main/java/com/swmansion/enriched/markdown/styles/TableStyle.kt +6 -0
  96. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/CodeBlockHighlighter.kt +90 -0
  97. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/CodeBlockNode.kt +57 -0
  98. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/FeatureFlags.kt +1 -0
  99. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/MarkdownSegment.kt +9 -0
  100. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/MarkdownViewManagerUtils.kt +37 -7
  101. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/ReadableMapExtensions.kt +3 -0
  102. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/RenderedSegment.kt +10 -0
  103. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/SegmentSignature.kt +1 -0
  104. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/StreamingMarkdownFilter.kt +83 -5
  105. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/serialization/MarkdownASTSerializer.kt +4 -0
  106. package/android/src/main/java/com/swmansion/enriched/markdown/utils/input/MarkdownStyleParser.kt +74 -44
  107. package/android/src/main/java/com/swmansion/enriched/markdown/utils/input/PasteTextUtils.kt +20 -0
  108. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/ImageCache.kt +26 -3
  109. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/ImageDownloader.kt +22 -9
  110. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/LocalImageLoader.kt +161 -0
  111. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/extensions/TextPaintExtensions.kt +23 -0
  112. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/interaction/CheckboxTouchHelper.kt +7 -0
  113. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/interaction/TaskListTapUtils.kt +41 -21
  114. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/span/BlockSpacing.kt +15 -8
  115. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/LinkLongPressMovementMethod.kt +58 -27
  116. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/SelectionActionMode.kt +49 -15
  117. package/android/src/main/java/com/swmansion/enriched/markdown/views/BlockMenuOptions.kt +45 -0
  118. package/android/src/main/java/com/swmansion/enriched/markdown/views/CodeBlockContainerView.kt +396 -0
  119. package/android/src/main/java/com/swmansion/enriched/markdown/views/ContextMenuPopup.kt +9 -6
  120. package/android/src/main/java/com/swmansion/enriched/markdown/views/CopyGlyph.kt +101 -0
  121. package/android/src/main/java/com/swmansion/enriched/markdown/views/TableContainerView.kt +36 -9
  122. package/android/src/main/jni/CMakeLists.txt +53 -0
  123. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerShadowNode.cpp +10 -0
  124. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerShadowNode.h +11 -2
  125. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextShadowNode.cpp +10 -0
  126. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextShadowNode.h +12 -2
  127. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextState.cpp +9 -0
  128. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextState.h +24 -0
  129. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/conversions.h +16 -0
  130. package/android/src/math/java/com/swmansion/enriched/markdown/input/math/MathChipControllerImpl.kt +21 -4
  131. package/android/src/math/java/com/swmansion/enriched/markdown/renderer/MathInlineRenderer.kt +7 -2
  132. package/android/src/math/java/com/swmansion/enriched/markdown/spans/MathChipSpan.kt +1 -1
  133. package/android/src/math/java/com/swmansion/enriched/markdown/views/MathContainerView.kt +6 -4
  134. package/cpp/highlight/CodeBlockHighlighter.cpp +284 -0
  135. package/cpp/highlight/CodeBlockHighlighter.hpp +66 -0
  136. package/cpp/highlight/CodeBlockLanguages.cpp +138 -0
  137. package/cpp/highlight/CodeBlockLanguages.hpp +25 -0
  138. package/cpp/highlight/HighlightGrammars.hpp +28 -0
  139. package/cpp/highlight/code_highlight_podspec.rb +211 -0
  140. package/cpp/highlight/gen-registry.mjs +155 -0
  141. package/cpp/highlight/grammar-versions.json +159 -0
  142. package/cpp/highlight/vendor/generated/generated_queries.h +1665 -0
  143. package/cpp/highlight/vendor/generated/generated_registry.cpp +59 -0
  144. package/cpp/parser/MD4CParser.cpp +173 -61
  145. package/cpp/parser/MD4CParser.hpp +1 -0
  146. package/cpp/parser/MarkdownASTNode.hpp +2 -1
  147. package/cpp/wasm/ASTSerializer.cpp +2 -0
  148. package/cpp/wasm/build.sh +1 -0
  149. package/cpp/wasm/md4c_wasm.cpp +3 -1
  150. package/docs/ACCESSIBILITY.md +14 -2
  151. package/docs/API_REFERENCE.md +234 -12
  152. package/docs/BREAKING_CHANGES.md +129 -0
  153. package/docs/CODE_HIGHLIGHT.md +133 -0
  154. package/docs/COPY_OPTIONS.md +47 -3
  155. package/docs/ELEMENTS_STRUCTURE.md +52 -4
  156. package/docs/IMAGE_CACHING.md +30 -0
  157. package/docs/INPUT.md +108 -11
  158. package/docs/LATEX_MATH.md +87 -45
  159. package/docs/MACOS.md +1 -1
  160. package/docs/MARKDOWN_STREAMING.md +27 -1
  161. package/docs/NATIVE_ASSETS.md +127 -0
  162. package/docs/RTL.md +1 -1
  163. package/docs/STYLES.md +46 -6
  164. package/docs/TESTING.md +112 -0
  165. package/docs/TEXT.md +16 -6
  166. package/docs/WEB.md +3 -1
  167. package/ios/EnrichedMarkdown.h +7 -0
  168. package/ios/EnrichedMarkdown.mm +284 -75
  169. package/ios/EnrichedMarkdownText.h +7 -0
  170. package/ios/EnrichedMarkdownText.mm +101 -73
  171. package/ios/attachments/ENRMImageAttachment.h +9 -0
  172. package/ios/attachments/ENRMImageAttachment.m +143 -40
  173. package/ios/attachments/ENRMMathInlineAttachment.h +2 -0
  174. package/ios/attachments/ENRMMathInlineAttachment.m +48 -81
  175. package/ios/attachments/ENRMMathInlineAttachmentShared.h +2 -0
  176. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/EventEmitters.cpp +75 -0
  177. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/EventEmitters.h +63 -0
  178. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/Props.cpp +35 -0
  179. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/Props.h +886 -23
  180. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/RCTComponentViewHelpers.h +131 -0
  181. package/ios/input/ENRMAutoLinkDetector.h +2 -1
  182. package/ios/input/ENRMAutoLinkDetector.mm +79 -41
  183. package/ios/input/ENRMBlockEditCoordinator.h +71 -0
  184. package/ios/input/ENRMBlockEditCoordinator.mm +195 -0
  185. package/ios/input/ENRMBlockRange.h +28 -0
  186. package/ios/input/ENRMBlockRange.mm +30 -0
  187. package/ios/input/ENRMBlockStore.h +56 -0
  188. package/ios/input/ENRMBlockStore.mm +275 -0
  189. package/ios/input/ENRMClipboardCoordinator.h +45 -0
  190. package/ios/input/ENRMClipboardCoordinator.mm +120 -0
  191. package/ios/input/ENRMDetectorPipeline.h +2 -1
  192. package/ios/input/ENRMEditPipeline.h +76 -0
  193. package/ios/input/ENRMEditPipeline.mm +228 -0
  194. package/ios/input/ENRMEditSession.h +36 -0
  195. package/ios/input/ENRMEditSession.mm +63 -0
  196. package/ios/input/ENRMFormattingStore.h +17 -0
  197. package/ios/input/ENRMFormattingStore.mm +95 -105
  198. package/ios/input/ENRMInputBlockType.h +91 -0
  199. package/ios/input/ENRMInputBlockType.mm +5 -0
  200. package/ios/input/ENRMInputDecorationDrawer.h +18 -0
  201. package/ios/input/ENRMInputEventEmitter.h +56 -0
  202. package/ios/input/ENRMInputEventEmitter.mm +308 -0
  203. package/ios/input/ENRMInputFormatter.h +29 -69
  204. package/ios/input/ENRMInputFormatter.mm +216 -124
  205. package/ios/input/ENRMInputFormatterStyle.h +99 -0
  206. package/ios/input/ENRMInputFormatterStyle.mm +188 -0
  207. package/ios/input/ENRMInputLayoutManager.h +9 -0
  208. package/ios/input/ENRMInputLayoutManager.mm +30 -0
  209. package/ios/input/ENRMInputListMarkerDrawer.h +32 -0
  210. package/ios/input/ENRMInputListMarkerDrawer.mm +426 -0
  211. package/ios/input/ENRMInputParser.h +5 -6
  212. package/ios/input/ENRMInputParser.mm +461 -178
  213. package/ios/input/ENRMInputRemend.mm +2 -2
  214. package/ios/input/ENRMInputStyleStateBuilder.h +40 -0
  215. package/ios/input/ENRMInputStyleStateBuilder.mm +60 -0
  216. package/ios/input/ENRMInputTextView.mm +103 -8
  217. package/ios/input/ENRMInputTypingAttributesController.h +42 -0
  218. package/ios/input/ENRMInputTypingAttributesController.mm +203 -0
  219. package/ios/input/ENRMLinkCoordinator.h +41 -0
  220. package/ios/input/ENRMLinkCoordinator.mm +89 -0
  221. package/ios/input/ENRMMarkdownSerializer.h +29 -5
  222. package/ios/input/ENRMMarkdownSerializer.mm +170 -48
  223. package/ios/input/ENRMMathAtom.h +26 -0
  224. package/ios/input/ENRMMathAtom.mm +12 -0
  225. package/ios/input/ENRMMentionCoordinator.h +45 -0
  226. package/ios/input/ENRMMentionCoordinator.mm +167 -0
  227. package/ios/input/ENRMRangeEditAdjustment.h +38 -0
  228. package/ios/input/ENRMRangeEditAdjustment.mm +91 -0
  229. package/ios/input/ENRMRangeStoreUtils.h +39 -0
  230. package/ios/input/EnrichedMarkdownTextInput+ContextMenu.mm +6 -6
  231. package/ios/input/EnrichedMarkdownTextInput+Internal.h +11 -3
  232. package/ios/input/EnrichedMarkdownTextInput.h +7 -1
  233. package/ios/input/EnrichedMarkdownTextInput.mm +1089 -1023
  234. package/ios/input/InputStylePropsUtils.h +109 -68
  235. package/ios/input/internals/EnrichedMarkdownTextInputShadowNode.mm +2 -1
  236. package/ios/input/styles/ENRMBlockHandler.h +46 -0
  237. package/ios/input/styles/ENRMHeadingBlockHandler.h +15 -0
  238. package/ios/input/styles/ENRMHeadingBlockHandler.mm +38 -0
  239. package/ios/input/styles/ENRMOrderedListBlockHandler.h +14 -0
  240. package/ios/input/styles/ENRMOrderedListBlockHandler.mm +48 -0
  241. package/ios/input/styles/ENRMUnorderedListBlockHandler.h +15 -0
  242. package/ios/input/styles/ENRMUnorderedListBlockHandler.mm +51 -0
  243. package/ios/internals/ENRMViewFreeMeasurement.h +331 -0
  244. package/ios/internals/EnrichedMarkdownShadowNode.h +1 -3
  245. package/ios/internals/EnrichedMarkdownShadowNode.mm +16 -20
  246. package/ios/internals/EnrichedMarkdownTextShadowNode.h +1 -3
  247. package/ios/internals/EnrichedMarkdownTextShadowNode.mm +15 -20
  248. package/ios/internals/MeasurementCache.h +33 -7
  249. package/ios/internals/ShadowMeasurementUtils.h +63 -58
  250. package/ios/math/ENRMMathChipController.h +74 -0
  251. package/ios/math/ENRMMathChipController.mm +476 -0
  252. package/ios/math/ENRMRaTeXBridge.swift +4 -1
  253. package/ios/parser/ENRMMarkdownParser.h +1 -8
  254. package/ios/parser/ENRMMarkdownParser.mm +2 -11
  255. package/ios/parser/MarkdownASTNode.h +2 -1
  256. package/ios/parser/MarkdownParserBridge.mm +4 -0
  257. package/ios/renderer/AttributedRenderer.m +20 -2
  258. package/ios/renderer/BaseRenderer.h +17 -2
  259. package/ios/renderer/BaseRenderer.m +30 -0
  260. package/ios/renderer/BlockquoteRenderer.h +1 -1
  261. package/ios/renderer/BlockquoteRenderer.m +144 -35
  262. package/ios/renderer/CodeBlockRenderer.h +1 -1
  263. package/ios/renderer/CodeBlockRenderer.m +27 -23
  264. package/ios/renderer/CodeRenderer.h +1 -1
  265. package/ios/renderer/CodeRenderer.m +3 -1
  266. package/ios/renderer/ENRMImageRenderer.h +1 -1
  267. package/ios/renderer/ENRMImageRenderer.m +5 -1
  268. package/ios/renderer/ENRMMathInlineRenderer.h +1 -1
  269. package/ios/renderer/ENRMMathInlineRenderer.m +5 -1
  270. package/ios/renderer/ENRMSpoilerRenderer.h +1 -1
  271. package/ios/renderer/ENRMSpoilerRenderer.m +3 -1
  272. package/ios/renderer/EmphasisRenderer.h +1 -1
  273. package/ios/renderer/EmphasisRenderer.m +3 -1
  274. package/ios/renderer/HeadingRenderer.h +1 -1
  275. package/ios/renderer/HeadingRenderer.m +13 -6
  276. package/ios/renderer/HighlightRenderer.h +1 -1
  277. package/ios/renderer/HighlightRenderer.m +3 -1
  278. package/ios/renderer/LinkRenderer.h +1 -1
  279. package/ios/renderer/LinkRenderer.m +3 -1
  280. package/ios/renderer/ListItemRenderer.h +13 -1
  281. package/ios/renderer/ListItemRenderer.m +102 -44
  282. package/ios/renderer/ListRenderer.h +2 -2
  283. package/ios/renderer/ListRenderer.m +63 -25
  284. package/ios/renderer/ParagraphRenderer.h +1 -1
  285. package/ios/renderer/ParagraphRenderer.m +16 -8
  286. package/ios/renderer/RenderContext.h +10 -0
  287. package/ios/renderer/RenderContext.m +44 -0
  288. package/ios/renderer/RendererFactory.m +14 -0
  289. package/ios/renderer/StrikethroughRenderer.h +1 -1
  290. package/ios/renderer/StrikethroughRenderer.m +3 -1
  291. package/ios/renderer/StrongRenderer.h +1 -1
  292. package/ios/renderer/StrongRenderer.m +3 -1
  293. package/ios/renderer/SubscriptRenderer.h +1 -1
  294. package/ios/renderer/SubscriptRenderer.m +3 -1
  295. package/ios/renderer/SuperscriptRenderer.h +1 -1
  296. package/ios/renderer/SuperscriptRenderer.m +3 -1
  297. package/ios/renderer/TextRenderer.h +2 -2
  298. package/ios/renderer/TextRenderer.m +3 -1
  299. package/ios/renderer/ThematicBreakRenderer.h +1 -1
  300. package/ios/renderer/ThematicBreakRenderer.m +3 -1
  301. package/ios/renderer/UnderlineRenderer.h +1 -1
  302. package/ios/renderer/UnderlineRenderer.m +3 -1
  303. package/ios/styles/StyleConfig.h +22 -0
  304. package/ios/styles/StyleConfig.mm +132 -0
  305. package/ios/utils/BlockquoteBorder.h +6 -0
  306. package/ios/utils/BlockquoteBorder.m +249 -52
  307. package/ios/utils/CodeBlockBackground.m +16 -2
  308. package/ios/utils/ENRMAtomicSize.h +65 -0
  309. package/ios/utils/ENRMBlockMenu.h +57 -0
  310. package/ios/utils/ENRMCodeBlockContent.h +37 -0
  311. package/ios/utils/ENRMCodeBlockContent.mm +79 -0
  312. package/ios/utils/ENRMCodeBlockHighlighter.h +37 -0
  313. package/ios/utils/ENRMCodeBlockHighlighter.mm +51 -0
  314. package/ios/utils/ENRMFeatureFlags.h +7 -0
  315. package/ios/utils/ENRMImageDownloader.h +11 -1
  316. package/ios/utils/ENRMImageDownloader.m +60 -16
  317. package/ios/utils/ENRMLocalImageLoader.h +31 -0
  318. package/ios/utils/ENRMLocalImageLoader.m +68 -0
  319. package/ios/utils/ENRMMathFallback.h +26 -0
  320. package/ios/utils/ENRMMathFallback.m +18 -0
  321. package/ios/utils/ENRMTextViewSetup.h +35 -17
  322. package/ios/utils/EditMenuUtils.h +22 -5
  323. package/ios/utils/EditMenuUtils.m +53 -9
  324. package/ios/utils/ImageRequestHeaderUtils.h +35 -0
  325. package/ios/utils/LastElementUtils.h +1 -0
  326. package/ios/utils/ListMarkerDrawer.m +29 -42
  327. package/ios/utils/MarkdownASTSerializer.m +4 -0
  328. package/ios/utils/ParagraphStyleUtils.h +5 -0
  329. package/ios/utils/ParagraphStyleUtils.m +77 -17
  330. package/ios/utils/RenderedMarkdownSegment.h +13 -1
  331. package/ios/utils/RenderedMarkdownSegment.m +20 -0
  332. package/ios/utils/SegmentRenderer.m +17 -4
  333. package/ios/utils/StreamingMarkdownFilter.h +11 -1
  334. package/ios/utils/StreamingMarkdownFilter.m +98 -2
  335. package/ios/utils/StylePropsUtils.h +63 -0
  336. package/ios/utils/TaskListTapUtils.m +24 -0
  337. package/ios/views/ENRMCodeBlockContainerView.h +53 -0
  338. package/ios/views/ENRMCodeBlockContainerView.m +559 -0
  339. package/ios/views/ENRMMathContainerView.h +16 -0
  340. package/ios/views/ENRMMathContainerView.m +74 -19
  341. package/ios/views/TableContainerView.h +22 -0
  342. package/ios/views/TableContainerView.m +261 -175
  343. package/jest.d.ts +1 -0
  344. package/jest.js +5 -0
  345. package/lib/module/EnrichedMarkdownNativeComponent.ts +73 -0
  346. package/lib/module/EnrichedMarkdownTextInput.js +84 -5
  347. package/lib/module/EnrichedMarkdownTextInput.js.map +1 -1
  348. package/lib/module/EnrichedMarkdownTextInputNativeComponent.ts +78 -5
  349. package/lib/module/EnrichedMarkdownTextNativeComponent.ts +74 -0
  350. package/lib/module/headingDefaults.js +34 -0
  351. package/lib/module/headingDefaults.js.map +1 -0
  352. package/lib/module/index.js.map +1 -1
  353. package/lib/module/jest/index.js +191 -0
  354. package/lib/module/jest/index.js.map +1 -0
  355. package/lib/module/native/EnrichedMarkdownText.js +37 -5
  356. package/lib/module/native/EnrichedMarkdownText.js.map +1 -1
  357. package/lib/module/normalizeMarkdownStyle.js +81 -19
  358. package/lib/module/normalizeMarkdownStyle.js.map +1 -1
  359. package/lib/module/normalizeMarkdownStyle.web.js +56 -18
  360. package/lib/module/normalizeMarkdownStyle.web.js.map +1 -1
  361. package/lib/module/normalizeMarkdownTextInputStyle.js +62 -15
  362. package/lib/module/normalizeMarkdownTextInputStyle.js.map +1 -1
  363. package/lib/module/normalizeMenuItem.js +1 -1
  364. package/lib/module/utils/textInputState.js +26 -0
  365. package/lib/module/utils/textInputState.js.map +1 -0
  366. package/lib/module/web/EnrichedMarkdownText.js +9 -5
  367. package/lib/module/web/EnrichedMarkdownText.js.map +1 -1
  368. package/lib/module/web/parseMarkdown.js +4 -3
  369. package/lib/module/web/parseMarkdown.js.map +1 -1
  370. package/lib/module/web/renderers/InlineRenderers.js +6 -0
  371. package/lib/module/web/renderers/InlineRenderers.js.map +1 -1
  372. package/lib/module/web/renderers/ListRenderers.js +7 -2
  373. package/lib/module/web/renderers/ListRenderers.js.map +1 -1
  374. package/lib/module/web/renderers/index.js +7 -4
  375. package/lib/module/web/renderers/index.js.map +1 -1
  376. package/lib/module/web/styles.js +83 -6
  377. package/lib/module/web/styles.js.map +1 -1
  378. package/lib/module/web/utils.js +1 -0
  379. package/lib/module/web/utils.js.map +1 -1
  380. package/lib/module/web/wasm/md4c.js +0 -0
  381. package/lib/module/web/wasm/md4c.js.map +1 -1
  382. package/lib/typescript/src/EnrichedMarkdownNativeComponent.d.ts +66 -0
  383. package/lib/typescript/src/EnrichedMarkdownNativeComponent.d.ts.map +1 -1
  384. package/lib/typescript/src/EnrichedMarkdownTextInput.d.ts +94 -9
  385. package/lib/typescript/src/EnrichedMarkdownTextInput.d.ts.map +1 -1
  386. package/lib/typescript/src/EnrichedMarkdownTextInputNativeComponent.d.ts +69 -5
  387. package/lib/typescript/src/EnrichedMarkdownTextInputNativeComponent.d.ts.map +1 -1
  388. package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts +66 -0
  389. package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts.map +1 -1
  390. package/lib/typescript/src/headingDefaults.d.ts +9 -0
  391. package/lib/typescript/src/headingDefaults.d.ts.map +1 -0
  392. package/lib/typescript/src/index.d.ts +2 -2
  393. package/lib/typescript/src/index.d.ts.map +1 -1
  394. package/lib/typescript/src/index.web.d.ts +1 -1
  395. package/lib/typescript/src/index.web.d.ts.map +1 -1
  396. package/lib/typescript/src/jest/index.d.ts +6 -0
  397. package/lib/typescript/src/jest/index.d.ts.map +1 -0
  398. package/lib/typescript/src/native/EnrichedMarkdownText.d.ts +3 -3
  399. package/lib/typescript/src/native/EnrichedMarkdownText.d.ts.map +1 -1
  400. package/lib/typescript/src/normalizeMarkdownStyle.d.ts.map +1 -1
  401. package/lib/typescript/src/normalizeMarkdownStyle.web.d.ts.map +1 -1
  402. package/lib/typescript/src/normalizeMarkdownTextInputStyle.d.ts +19 -5
  403. package/lib/typescript/src/normalizeMarkdownTextInputStyle.d.ts.map +1 -1
  404. package/lib/typescript/src/types/MarkdownStyle.d.ts +72 -0
  405. package/lib/typescript/src/types/MarkdownStyle.d.ts.map +1 -1
  406. package/lib/typescript/src/types/MarkdownStyleInternal.d.ts +27 -0
  407. package/lib/typescript/src/types/MarkdownStyleInternal.d.ts.map +1 -1
  408. package/lib/typescript/src/types/MarkdownTextProps.d.ts +104 -9
  409. package/lib/typescript/src/types/MarkdownTextProps.d.ts.map +1 -1
  410. package/lib/typescript/src/types/MarkdownTextProps.web.d.ts +19 -0
  411. package/lib/typescript/src/types/MarkdownTextProps.web.d.ts.map +1 -1
  412. package/lib/typescript/src/types/events.d.ts +19 -0
  413. package/lib/typescript/src/types/events.d.ts.map +1 -1
  414. package/lib/typescript/src/utils/textInputState.d.ts +24 -0
  415. package/lib/typescript/src/utils/textInputState.d.ts.map +1 -0
  416. package/lib/typescript/src/web/EnrichedMarkdownText.d.ts +1 -1
  417. package/lib/typescript/src/web/EnrichedMarkdownText.d.ts.map +1 -1
  418. package/lib/typescript/src/web/parseMarkdown.d.ts +1 -1
  419. package/lib/typescript/src/web/parseMarkdown.d.ts.map +1 -1
  420. package/lib/typescript/src/web/renderers/InlineRenderers.d.ts.map +1 -1
  421. package/lib/typescript/src/web/renderers/ListRenderers.d.ts.map +1 -1
  422. package/lib/typescript/src/web/renderers/index.d.ts +2 -1
  423. package/lib/typescript/src/web/renderers/index.d.ts.map +1 -1
  424. package/lib/typescript/src/web/styles.d.ts +2 -1
  425. package/lib/typescript/src/web/styles.d.ts.map +1 -1
  426. package/lib/typescript/src/web/types.d.ts +6 -2
  427. package/lib/typescript/src/web/types.d.ts.map +1 -1
  428. package/lib/typescript/src/web/utils.d.ts.map +1 -1
  429. package/package.json +36 -9
  430. package/postinstall.mjs +131 -0
  431. package/ratex-version.json +21 -0
  432. package/src/EnrichedMarkdownNativeComponent.ts +73 -0
  433. package/src/EnrichedMarkdownTextInput.tsx +159 -8
  434. package/src/EnrichedMarkdownTextInputNativeComponent.ts +78 -5
  435. package/src/EnrichedMarkdownTextNativeComponent.ts +74 -0
  436. package/src/headingDefaults.ts +21 -0
  437. package/src/index.tsx +9 -0
  438. package/src/index.web.tsx +1 -0
  439. package/src/jest/index.tsx +215 -0
  440. package/src/native/EnrichedMarkdownText.tsx +53 -2
  441. package/src/normalizeMarkdownStyle.ts +102 -16
  442. package/src/normalizeMarkdownStyle.web.ts +63 -15
  443. package/src/normalizeMarkdownTextInputStyle.ts +110 -35
  444. package/src/normalizeMenuItem.ts +1 -1
  445. package/src/types/MarkdownStyle.ts +74 -0
  446. package/src/types/MarkdownStyleInternal.ts +39 -0
  447. package/src/types/MarkdownTextProps.ts +101 -9
  448. package/src/types/MarkdownTextProps.web.ts +19 -0
  449. package/src/types/events.ts +21 -0
  450. package/src/utils/textInputState.ts +35 -0
  451. package/src/web/EnrichedMarkdownText.tsx +16 -2
  452. package/src/web/parseMarkdown.ts +6 -2
  453. package/src/web/renderers/InlineRenderers.tsx +5 -0
  454. package/src/web/renderers/ListRenderers.tsx +14 -2
  455. package/src/web/renderers/index.tsx +6 -2
  456. package/src/web/styles.ts +89 -5
  457. package/src/web/types.ts +6 -1
  458. package/src/web/utils.ts +1 -0
  459. package/src/web/wasm/md4c.js +0 -0
  460. package/vendor-grammars.mjs +511 -0
  461. package/vendor-ratex.mjs +173 -0
  462. package/app.plugin.js +0 -2
  463. package/plugin/build/withAndroidMath.js +0 -19
  464. package/plugin/build/withIosMath.js +0 -28
  465. package/plugin/build/withReactNativeEnrichedMarkdown.js +0 -11
  466. package/plugin/src/withAndroidMath.ts +0 -24
  467. package/plugin/src/withIosMath.ts +0 -35
  468. package/plugin/src/withReactNativeEnrichedMarkdown.ts +0 -17
  469. package/plugin/tsconfig.build.json +0 -16
@@ -1,3 +1,4 @@
1
+ #import "ENRMMathFallback.h"
1
2
  #import "ENRMMathInlineAttachmentShared.h"
2
3
 
3
4
  #if ENRICHED_MARKDOWN_MATH
@@ -10,21 +11,49 @@
10
11
 
11
12
  @implementation ENRMMathInlineAttachment
12
13
 
14
+ - (CGFloat)boxHeight
15
+ {
16
+ #if !TARGET_OS_OSX
17
+ [self prepareIfNeeded];
18
+ #endif
19
+ return _cachedSize.height + _containerPaddingVertical * 2;
20
+ }
21
+
22
+ /// Clears the cached glyph render so the next layout regenerates it
23
+ /// (e.g. after style or latex changes).
24
+ - (void)invalidateRender
25
+ {
26
+ _renderResult = nil;
27
+ _fallbackSource = nil;
28
+ _cachedSize = CGSizeZero;
29
+ _mathAscent = 0;
30
+ _mathDescent = 0;
31
+ }
32
+
13
33
  #if !TARGET_OS_OSX
14
34
 
15
35
  - (void)prepareIfNeeded
16
36
  {
17
- if (_renderResult)
37
+ if (_renderResult || _fallbackSource)
18
38
  return;
19
39
 
20
40
  RCTUIColor *color = self.mathTextColor ?: [RCTUIColor blackColor];
21
41
  ENRMRaTeXRenderResult *result = [ENRMRaTeXBridge parse:self.latex
22
- displayMode:self.displayMode
42
+ displayMode:NO
23
43
  fontSize:self.fontSize
24
44
  color:color
25
45
  bold:self.bold];
26
- if (!result)
46
+ if (!result) {
47
+ _fallbackSource = ENRMMathFallbackString(self.latex, @"$", self.fontSize, color);
48
+ UIFont *font = [_fallbackSource attribute:NSFontAttributeName atIndex:0 effectiveRange:NULL];
49
+ CGRect bounds = [_fallbackSource boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, CGFLOAT_MAX)
50
+ options:NSStringDrawingUsesLineFragmentOrigin
51
+ context:nil];
52
+ _mathAscent = font.ascender;
53
+ _mathDescent = -font.descender;
54
+ _cachedSize = CGSizeMake(ceil(bounds.size.width), ceil(_mathAscent + _mathDescent));
27
55
  return;
56
+ }
28
57
 
29
58
  _renderResult = result;
30
59
  _mathAscent = result.ascent;
@@ -32,33 +61,16 @@
32
61
  _cachedSize = CGSizeMake(ceil(result.width), ceil(result.totalHeight));
33
62
  }
34
63
 
35
- - (void)invalidateRender
36
- {
37
- _renderResult = nil;
38
- _cachedSize = CGSizeZero;
39
- _mathAscent = 0;
40
- _mathDescent = 0;
41
- }
42
-
43
64
  - (CGRect)attachmentBoundsForTextContainer:(NSTextContainer *)textContainer
44
65
  proposedLineFragment:(CGRect)lineFragment
45
66
  glyphPosition:(CGPoint)position
46
67
  characterIndex:(NSUInteger)characterIndex
47
68
  {
48
69
  [self prepareIfNeeded];
49
-
50
- CGFloat intrinsicW = _cachedSize.width + _containerPaddingHorizontal * 2;
51
- CGFloat totalH = _cachedSize.height + _containerPaddingVertical * 2;
52
-
53
- if (_displayMode) {
54
- totalH += _blockMarginTop + _blockMarginBottom;
55
- // Block chip claims the full line fragment so text can't share the row.
56
- // Fall back to intrinsic width when the proposed fragment is degenerate
57
- // (e.g. during initial layout before the text container has a size).
58
- CGFloat fullW = MAX(lineFragment.size.width, intrinsicW);
59
- return CGRectMake(0, -(_mathDescent + _containerPaddingVertical + _blockMarginBottom), fullW, totalH);
60
- }
61
- return CGRectMake(0, -(_mathDescent + _containerPaddingVertical), intrinsicW, totalH);
70
+ // inlineMath.paddingVertical grows the glyph box symmetrically so a tall formula
71
+ // (\frac, \sum) stops sitting flush against the neighbouring line.
72
+ return CGRectMake(0, -(_mathDescent + _containerPaddingVertical), _cachedSize.width,
73
+ _cachedSize.height + _containerPaddingVertical * 2);
62
74
  }
63
75
 
64
76
  - (UIImage *)imageForBounds:(CGRect)imageBounds
@@ -66,72 +78,27 @@
66
78
  characterIndex:(NSUInteger)characterIndex
67
79
  {
68
80
  [self prepareIfNeeded];
69
- if (!_renderResult)
81
+ if (!_renderResult && !_fallbackSource)
70
82
  return nil;
71
83
 
72
- // Block chips claim the full line fragment (set in attachmentBounds…), so
73
- // the canvas is `imageBounds.width` wide and the formula floats inside it
74
- // according to `blockAlignment`. Inline chips fall back to intrinsic width.
75
- CGFloat intrinsicW = _cachedSize.width + _containerPaddingHorizontal * 2;
76
- CGFloat totalW = (_displayMode && imageBounds.size.width > intrinsicW) ? imageBounds.size.width : intrinsicW;
77
- CGFloat totalH = _cachedSize.height + _containerPaddingVertical * 2;
78
- CGSize totalSize = CGSizeMake(totalW, totalH);
79
-
80
- RCTUIColor *bg = _isSelected ? (_selectedBackgroundColor ?: _containerBackgroundColor) : _containerBackgroundColor;
81
- RCTUIColor *border = _isSelected ? (_selectedBorderColor ?: _containerBorderColor) : _containerBorderColor;
82
- CGFloat borderWidth = _containerBorderWidth;
83
- CGFloat borderRadius = _containerBorderRadius;
84
- CGFloat padH = _containerPaddingHorizontal;
85
- CGFloat padV = _containerPaddingVertical;
86
- ENRMRaTeXRenderResult *render = _renderResult;
87
- CGFloat formulaW = _cachedSize.width;
88
- NSTextAlignment alignment = _blockAlignment;
89
- BOOL displayMode = _displayMode;
90
-
91
84
  UIGraphicsImageRendererFormat *format = [UIGraphicsImageRendererFormat preferredFormat];
92
85
  format.opaque = NO;
93
86
 
94
- UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:totalSize format:format];
87
+ CGFloat padV = _containerPaddingVertical;
88
+ CGSize boxSize = CGSizeMake(_cachedSize.width, _cachedSize.height + padV * 2);
89
+ UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:boxSize format:format];
95
90
 
96
91
  return [renderer imageWithActions:^(UIGraphicsImageRendererContext *rendererContext) {
97
92
  CGContextRef ctx = rendererContext.CGContext;
98
-
99
- if (bg) {
100
- CGFloat inset = borderWidth / 2.0;
101
- CGRect rect = CGRectMake(inset, inset, totalW - borderWidth, totalH - borderWidth);
102
- UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:borderRadius];
103
- [bg setFill];
104
- [path fill];
105
- }
106
-
107
- if (border && borderWidth > 0) {
108
- CGFloat inset = borderWidth / 2.0;
109
- CGRect rect = CGRectMake(inset, inset, totalW - borderWidth, totalH - borderWidth);
110
- UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:borderRadius];
111
- [border setStroke];
112
- path.lineWidth = borderWidth;
113
- [path stroke];
114
- }
115
-
116
- CGFloat glyphOffset = padH;
117
- if (displayMode && totalW > intrinsicW) {
118
- CGFloat slack = totalW - formulaW - padH * 2;
119
- switch (alignment) {
120
- case NSTextAlignmentCenter:
121
- glyphOffset = padH + slack / 2.0;
122
- break;
123
- case NSTextAlignmentRight:
124
- glyphOffset = padH + slack;
125
- break;
126
- default:
127
- glyphOffset = padH;
128
- break;
129
- }
130
- }
131
-
132
93
  CGContextSaveGState(ctx);
133
- CGContextTranslateCTM(ctx, glyphOffset, padV);
134
- [render drawIn:ctx];
94
+ CGContextTranslateCTM(ctx, 0, padV);
95
+ if (_renderResult) {
96
+ [_renderResult drawIn:ctx];
97
+ } else {
98
+ [_fallbackSource drawWithRect:CGRectMake(0, 0, _cachedSize.width, _cachedSize.height)
99
+ options:NSStringDrawingUsesLineFragmentOrigin
100
+ context:nil];
101
+ }
135
102
  CGContextRestoreGState(ctx);
136
103
  }];
137
104
  }
@@ -11,6 +11,8 @@
11
11
  CGFloat _mathAscent;
12
12
  CGFloat _mathDescent;
13
13
  ENRMRaTeXRenderResult *_renderResult;
14
+ // Visible-source fallback when RaTeX cannot parse the span; see ENRMMathFallback.h.
15
+ NSAttributedString *_fallbackSource;
14
16
  }
15
17
  @end
16
18
 
@@ -42,6 +42,16 @@ payload.setProperty(runtime, "text", event.text);
42
42
  }
43
43
 
44
44
 
45
+ void EnrichedMarkdownEventEmitter::onCopyPress(OnCopyPress event) const {
46
+ dispatchEvent("copyPress", [event=std::move(event)](jsi::Runtime &runtime) {
47
+ auto payload = jsi::Object(runtime);
48
+ payload.setProperty(runtime, "code", event.code);
49
+ payload.setProperty(runtime, "language", event.language);
50
+ return payload;
51
+ });
52
+ }
53
+
54
+
45
55
  void EnrichedMarkdownEventEmitter::onContextMenuItemPress(OnContextMenuItemPress event) const {
46
56
  dispatchEvent("contextMenuItemPress", [event=std::move(event)](jsi::Runtime &runtime) {
47
57
  auto payload = jsi::Object(runtime);
@@ -82,6 +92,15 @@ payload.setProperty(runtime, "end", event.end);
82
92
  }
83
93
 
84
94
 
95
+ void EnrichedMarkdownTextInputEventEmitter::onInputKeyPress(OnInputKeyPress event) const {
96
+ dispatchEvent("inputKeyPress", [event=std::move(event)](jsi::Runtime &runtime) {
97
+ auto payload = jsi::Object(runtime);
98
+ payload.setProperty(runtime, "key", event.key);
99
+ return payload;
100
+ });
101
+ }
102
+
103
+
85
104
  void EnrichedMarkdownTextInputEventEmitter::onChangeState(OnChangeState event) const {
86
105
  dispatchEvent("changeState", [event=std::move(event)](jsi::Runtime &runtime) {
87
106
  auto payload = jsi::Object(runtime);
@@ -114,6 +133,24 @@ void EnrichedMarkdownTextInputEventEmitter::onChangeState(OnChangeState event) c
114
133
  auto link = jsi::Object(runtime);
115
134
  link.setProperty(runtime, "isActive", event.link.isActive);
116
135
  payload.setProperty(runtime, "link", link);
136
+ }
137
+ {
138
+ auto heading = jsi::Object(runtime);
139
+ heading.setProperty(runtime, "isActive", event.heading.isActive);
140
+ heading.setProperty(runtime, "level", event.heading.level);
141
+ payload.setProperty(runtime, "heading", heading);
142
+ }
143
+ {
144
+ auto unorderedList = jsi::Object(runtime);
145
+ unorderedList.setProperty(runtime, "isActive", event.unorderedList.isActive);
146
+ unorderedList.setProperty(runtime, "depth", event.unorderedList.depth);
147
+ payload.setProperty(runtime, "unorderedList", unorderedList);
148
+ }
149
+ {
150
+ auto orderedList = jsi::Object(runtime);
151
+ orderedList.setProperty(runtime, "isActive", event.orderedList.isActive);
152
+ orderedList.setProperty(runtime, "depth", event.orderedList.depth);
153
+ payload.setProperty(runtime, "orderedList", orderedList);
117
154
  }
118
155
  return payload;
119
156
  });
@@ -212,6 +249,24 @@ payload.setProperty(runtime, "selectionEnd", event.selectionEnd);
212
249
  link.setProperty(runtime, "isActive", event.styleState.link.isActive);
213
250
  styleState.setProperty(runtime, "link", link);
214
251
  }
252
+ {
253
+ auto heading = jsi::Object(runtime);
254
+ heading.setProperty(runtime, "isActive", event.styleState.heading.isActive);
255
+ heading.setProperty(runtime, "level", event.styleState.heading.level);
256
+ styleState.setProperty(runtime, "heading", heading);
257
+ }
258
+ {
259
+ auto unorderedList = jsi::Object(runtime);
260
+ unorderedList.setProperty(runtime, "isActive", event.styleState.unorderedList.isActive);
261
+ unorderedList.setProperty(runtime, "depth", event.styleState.unorderedList.depth);
262
+ styleState.setProperty(runtime, "unorderedList", unorderedList);
263
+ }
264
+ {
265
+ auto orderedList = jsi::Object(runtime);
266
+ orderedList.setProperty(runtime, "isActive", event.styleState.orderedList.isActive);
267
+ orderedList.setProperty(runtime, "depth", event.styleState.orderedList.depth);
268
+ styleState.setProperty(runtime, "orderedList", orderedList);
269
+ }
215
270
  payload.setProperty(runtime, "styleState", styleState);
216
271
  }
217
272
  return payload;
@@ -247,6 +302,16 @@ payload.setProperty(runtime, "height", event.height);
247
302
  }
248
303
 
249
304
 
305
+ void EnrichedMarkdownTextInputEventEmitter::onPaste(OnPaste event) const {
306
+ dispatchEvent("paste", [event=std::move(event)](jsi::Runtime &runtime) {
307
+ auto payload = jsi::Object(runtime);
308
+ payload.setProperty(runtime, "text", event.text);
309
+ payload.setProperty(runtime, "markdown", event.markdown);
310
+ return payload;
311
+ });
312
+ }
313
+
314
+
250
315
  void EnrichedMarkdownTextInputEventEmitter::onStartMention(OnStartMention event) const {
251
316
  dispatchEvent("startMention", [event=std::move(event)](jsi::Runtime &runtime) {
252
317
  auto payload = jsi::Object(runtime);
@@ -304,6 +369,16 @@ payload.setProperty(runtime, "text", event.text);
304
369
  }
305
370
 
306
371
 
372
+ void EnrichedMarkdownTextEventEmitter::onCopyPress(OnCopyPress event) const {
373
+ dispatchEvent("copyPress", [event=std::move(event)](jsi::Runtime &runtime) {
374
+ auto payload = jsi::Object(runtime);
375
+ payload.setProperty(runtime, "code", event.code);
376
+ payload.setProperty(runtime, "language", event.language);
377
+ return payload;
378
+ });
379
+ }
380
+
381
+
307
382
  void EnrichedMarkdownTextEventEmitter::onContextMenuItemPress(OnContextMenuItemPress event) const {
308
383
  dispatchEvent("contextMenuItemPress", [event=std::move(event)](jsi::Runtime &runtime) {
309
384
  auto payload = jsi::Object(runtime);
@@ -31,6 +31,11 @@ class EnrichedMarkdownEventEmitter : public ViewEventEmitter {
31
31
  std::string text;
32
32
  };
33
33
 
34
+ struct OnCopyPress {
35
+ std::string code;
36
+ std::string language;
37
+ };
38
+
34
39
  struct OnContextMenuItemPress {
35
40
  std::string itemText;
36
41
  std::string selectedText;
@@ -43,6 +48,8 @@ class EnrichedMarkdownEventEmitter : public ViewEventEmitter {
43
48
 
44
49
  void onTaskListItemPress(OnTaskListItemPress value) const;
45
50
 
51
+ void onCopyPress(OnCopyPress value) const;
52
+
46
53
  void onContextMenuItemPress(OnContextMenuItemPress value) const;
47
54
  };
48
55
  class EnrichedMarkdownTextInputEventEmitter : public ViewEventEmitter {
@@ -62,6 +69,10 @@ class EnrichedMarkdownTextInputEventEmitter : public ViewEventEmitter {
62
69
  int end;
63
70
  };
64
71
 
72
+ struct OnInputKeyPress {
73
+ std::string key;
74
+ };
75
+
65
76
  struct OnChangeStateBold {
66
77
  bool isActive;
67
78
  };
@@ -86,6 +97,21 @@ class EnrichedMarkdownTextInputEventEmitter : public ViewEventEmitter {
86
97
  bool isActive;
87
98
  };
88
99
 
100
+ struct OnChangeStateHeading {
101
+ bool isActive;
102
+ int level;
103
+ };
104
+
105
+ struct OnChangeStateUnorderedList {
106
+ bool isActive;
107
+ int depth;
108
+ };
109
+
110
+ struct OnChangeStateOrderedList {
111
+ bool isActive;
112
+ int depth;
113
+ };
114
+
89
115
  struct OnChangeState {
90
116
  OnChangeStateBold bold;
91
117
  OnChangeStateItalic italic;
@@ -93,6 +119,9 @@ class EnrichedMarkdownTextInputEventEmitter : public ViewEventEmitter {
93
119
  OnChangeStateStrikethrough strikethrough;
94
120
  OnChangeStateSpoiler spoiler;
95
121
  OnChangeStateLink link;
122
+ OnChangeStateHeading heading;
123
+ OnChangeStateUnorderedList unorderedList;
124
+ OnChangeStateOrderedList orderedList;
96
125
  };
97
126
 
98
127
  struct OnInputFocus {
@@ -147,6 +176,21 @@ class EnrichedMarkdownTextInputEventEmitter : public ViewEventEmitter {
147
176
  bool isActive;
148
177
  };
149
178
 
179
+ struct OnContextMenuItemPressStyleStateHeading {
180
+ bool isActive;
181
+ int level;
182
+ };
183
+
184
+ struct OnContextMenuItemPressStyleStateUnorderedList {
185
+ bool isActive;
186
+ int depth;
187
+ };
188
+
189
+ struct OnContextMenuItemPressStyleStateOrderedList {
190
+ bool isActive;
191
+ int depth;
192
+ };
193
+
150
194
  struct OnContextMenuItemPressStyleState {
151
195
  OnContextMenuItemPressStyleStateBold bold;
152
196
  OnContextMenuItemPressStyleStateItalic italic;
@@ -154,6 +198,9 @@ class EnrichedMarkdownTextInputEventEmitter : public ViewEventEmitter {
154
198
  OnContextMenuItemPressStyleStateStrikethrough strikethrough;
155
199
  OnContextMenuItemPressStyleStateSpoiler spoiler;
156
200
  OnContextMenuItemPressStyleStateLink link;
201
+ OnContextMenuItemPressStyleStateHeading heading;
202
+ OnContextMenuItemPressStyleStateUnorderedList unorderedList;
203
+ OnContextMenuItemPressStyleStateOrderedList orderedList;
157
204
  };
158
205
 
159
206
  struct OnContextMenuItemPress {
@@ -182,6 +229,11 @@ class EnrichedMarkdownTextInputEventEmitter : public ViewEventEmitter {
182
229
  double height;
183
230
  };
184
231
 
232
+ struct OnPaste {
233
+ std::string text;
234
+ std::string markdown;
235
+ };
236
+
185
237
  struct OnStartMention {
186
238
  std::string indicator;
187
239
  };
@@ -200,6 +252,8 @@ class EnrichedMarkdownTextInputEventEmitter : public ViewEventEmitter {
200
252
 
201
253
  void onChangeSelection(OnChangeSelection value) const;
202
254
 
255
+ void onInputKeyPress(OnInputKeyPress value) const;
256
+
203
257
  void onChangeState(OnChangeState value) const;
204
258
 
205
259
  void onInputFocus(OnInputFocus value) const;
@@ -218,6 +272,8 @@ class EnrichedMarkdownTextInputEventEmitter : public ViewEventEmitter {
218
272
 
219
273
  void onMathPress(OnMathPress value) const;
220
274
 
275
+ void onPaste(OnPaste value) const;
276
+
221
277
  void onStartMention(OnStartMention value) const;
222
278
 
223
279
  void onChangeMention(OnChangeMention value) const;
@@ -242,6 +298,11 @@ class EnrichedMarkdownTextEventEmitter : public ViewEventEmitter {
242
298
  std::string text;
243
299
  };
244
300
 
301
+ struct OnCopyPress {
302
+ std::string code;
303
+ std::string language;
304
+ };
305
+
245
306
  struct OnContextMenuItemPress {
246
307
  std::string itemText;
247
308
  std::string selectedText;
@@ -254,6 +315,8 @@ class EnrichedMarkdownTextEventEmitter : public ViewEventEmitter {
254
315
 
255
316
  void onTaskListItemPress(OnTaskListItemPress value) const;
256
317
 
318
+ void onCopyPress(OnCopyPress value) const;
319
+
257
320
  void onContextMenuItemPress(OnContextMenuItemPress value) const;
258
321
  };
259
322
  } // namespace facebook::react
@@ -21,6 +21,7 @@ EnrichedMarkdownProps::EnrichedMarkdownProps(
21
21
 
22
22
  markdown(convertRawProp(context, rawProps, "markdown", sourceProps.markdown, {})),
23
23
  markdownStyle(convertRawProp(context, rawProps, "markdownStyle", sourceProps.markdownStyle, {})),
24
+ enableTaskListItemToggle(convertRawProp(context, rawProps, "enableTaskListItemToggle", sourceProps.enableTaskListItemToggle, {true})),
24
25
  enableLinkPreview(convertRawProp(context, rawProps, "enableLinkPreview", sourceProps.enableLinkPreview, {true})),
25
26
  selectable(convertRawProp(context, rawProps, "selectable", sourceProps.selectable, {false})),
26
27
  selectionColor(convertRawProp(context, rawProps, "selectionColor", sourceProps.selectionColor, {})),
@@ -32,7 +33,9 @@ EnrichedMarkdownProps::EnrichedMarkdownProps(
32
33
  streamingAnimation(convertRawProp(context, rawProps, "streamingAnimation", sourceProps.streamingAnimation, {false})),
33
34
  streamingConfig(convertRawProp(context, rawProps, "streamingConfig", sourceProps.streamingConfig, {})),
34
35
  spoilerOverlay(convertRawProp(context, rawProps, "spoilerOverlay", sourceProps.spoilerOverlay, {std::string{"particles"}})),
36
+ contextMenuHidden(convertRawProp(context, rawProps, "contextMenuHidden", sourceProps.contextMenuHidden, {false})),
35
37
  contextMenuItems(convertRawProp(context, rawProps, "contextMenuItems", sourceProps.contextMenuItems, {})),
38
+ imageRequestHeaders(convertRawProp(context, rawProps, "imageRequestHeaders", sourceProps.imageRequestHeaders, {})),
36
39
  selectionMenuConfig(convertRawProp(context, rawProps, "selectionMenuConfig", sourceProps.selectionMenuConfig, {})),
37
40
  accessibilityLabels(convertRawProp(context, rawProps, "accessibilityLabels", sourceProps.accessibilityLabels, {})),
38
41
  textBreakStrategy(convertRawProp(context, rawProps, "textBreakStrategy", sourceProps.textBreakStrategy, {std::string{"highQuality"}})),
@@ -63,6 +66,10 @@ folly::dynamic EnrichedMarkdownProps::getDiffProps(
63
66
  result["markdownStyle"] = toDynamic(markdownStyle);
64
67
  }
65
68
 
69
+ if (enableTaskListItemToggle != oldProps->enableTaskListItemToggle) {
70
+ result["enableTaskListItemToggle"] = enableTaskListItemToggle;
71
+ }
72
+
66
73
  if (enableLinkPreview != oldProps->enableLinkPreview) {
67
74
  result["enableLinkPreview"] = enableLinkPreview;
68
75
  }
@@ -107,10 +114,18 @@ folly::dynamic EnrichedMarkdownProps::getDiffProps(
107
114
  result["spoilerOverlay"] = spoilerOverlay;
108
115
  }
109
116
 
117
+ if (contextMenuHidden != oldProps->contextMenuHidden) {
118
+ result["contextMenuHidden"] = contextMenuHidden;
119
+ }
120
+
110
121
  if (contextMenuItems != oldProps->contextMenuItems) {
111
122
  result["contextMenuItems"] = toDynamic(contextMenuItems);
112
123
  }
113
124
 
125
+ if (imageRequestHeaders != oldProps->imageRequestHeaders) {
126
+ result["imageRequestHeaders"] = toDynamic(imageRequestHeaders);
127
+ }
128
+
114
129
  if (selectionMenuConfig != oldProps->selectionMenuConfig) {
115
130
  result["selectionMenuConfig"] = toDynamic(selectionMenuConfig);
116
131
  }
@@ -146,6 +161,7 @@ EnrichedMarkdownTextInputProps::EnrichedMarkdownTextInputProps(
146
161
  scrollEnabled(convertRawProp(context, rawProps, "scrollEnabled", sourceProps.scrollEnabled, {false})),
147
162
  blockSyntax(convertRawProp(context, rawProps, "blockSyntax", sourceProps.blockSyntax, {false})),
148
163
  autoCapitalize(convertRawProp(context, rawProps, "autoCapitalize", sourceProps.autoCapitalize, {})),
164
+ interceptPaste(convertRawProp(context, rawProps, "interceptPaste", sourceProps.interceptPaste, {false})),
149
165
  multiline(convertRawProp(context, rawProps, "multiline", sourceProps.multiline, {false})),
150
166
  cursorColor(convertRawProp(context, rawProps, "cursorColor", sourceProps.cursorColor, {})),
151
167
  selectionColor(convertRawProp(context, rawProps, "selectionColor", sourceProps.selectionColor, {})),
@@ -211,6 +227,10 @@ folly::dynamic EnrichedMarkdownTextInputProps::getDiffProps(
211
227
  result["autoCapitalize"] = autoCapitalize;
212
228
  }
213
229
 
230
+ if (interceptPaste != oldProps->interceptPaste) {
231
+ result["interceptPaste"] = interceptPaste;
232
+ }
233
+
214
234
  if (multiline != oldProps->multiline) {
215
235
  result["multiline"] = multiline;
216
236
  }
@@ -284,6 +304,7 @@ EnrichedMarkdownTextProps::EnrichedMarkdownTextProps(
284
304
 
285
305
  markdown(convertRawProp(context, rawProps, "markdown", sourceProps.markdown, {})),
286
306
  markdownStyle(convertRawProp(context, rawProps, "markdownStyle", sourceProps.markdownStyle, {})),
307
+ enableTaskListItemToggle(convertRawProp(context, rawProps, "enableTaskListItemToggle", sourceProps.enableTaskListItemToggle, {true})),
287
308
  enableLinkPreview(convertRawProp(context, rawProps, "enableLinkPreview", sourceProps.enableLinkPreview, {true})),
288
309
  selectable(convertRawProp(context, rawProps, "selectable", sourceProps.selectable, {false})),
289
310
  selectionColor(convertRawProp(context, rawProps, "selectionColor", sourceProps.selectionColor, {})),
@@ -295,7 +316,9 @@ EnrichedMarkdownTextProps::EnrichedMarkdownTextProps(
295
316
  streamingAnimation(convertRawProp(context, rawProps, "streamingAnimation", sourceProps.streamingAnimation, {false})),
296
317
  streamingConfig(convertRawProp(context, rawProps, "streamingConfig", sourceProps.streamingConfig, {})),
297
318
  spoilerOverlay(convertRawProp(context, rawProps, "spoilerOverlay", sourceProps.spoilerOverlay, {std::string{"particles"}})),
319
+ contextMenuHidden(convertRawProp(context, rawProps, "contextMenuHidden", sourceProps.contextMenuHidden, {false})),
298
320
  contextMenuItems(convertRawProp(context, rawProps, "contextMenuItems", sourceProps.contextMenuItems, {})),
321
+ imageRequestHeaders(convertRawProp(context, rawProps, "imageRequestHeaders", sourceProps.imageRequestHeaders, {})),
299
322
  selectionMenuConfig(convertRawProp(context, rawProps, "selectionMenuConfig", sourceProps.selectionMenuConfig, {})),
300
323
  accessibilityLabels(convertRawProp(context, rawProps, "accessibilityLabels", sourceProps.accessibilityLabels, {})),
301
324
  textBreakStrategy(convertRawProp(context, rawProps, "textBreakStrategy", sourceProps.textBreakStrategy, {std::string{"highQuality"}})),
@@ -326,6 +349,10 @@ folly::dynamic EnrichedMarkdownTextProps::getDiffProps(
326
349
  result["markdownStyle"] = toDynamic(markdownStyle);
327
350
  }
328
351
 
352
+ if (enableTaskListItemToggle != oldProps->enableTaskListItemToggle) {
353
+ result["enableTaskListItemToggle"] = enableTaskListItemToggle;
354
+ }
355
+
329
356
  if (enableLinkPreview != oldProps->enableLinkPreview) {
330
357
  result["enableLinkPreview"] = enableLinkPreview;
331
358
  }
@@ -370,10 +397,18 @@ folly::dynamic EnrichedMarkdownTextProps::getDiffProps(
370
397
  result["spoilerOverlay"] = spoilerOverlay;
371
398
  }
372
399
 
400
+ if (contextMenuHidden != oldProps->contextMenuHidden) {
401
+ result["contextMenuHidden"] = contextMenuHidden;
402
+ }
403
+
373
404
  if (contextMenuItems != oldProps->contextMenuItems) {
374
405
  result["contextMenuItems"] = toDynamic(contextMenuItems);
375
406
  }
376
407
 
408
+ if (imageRequestHeaders != oldProps->imageRequestHeaders) {
409
+ result["imageRequestHeaders"] = toDynamic(imageRequestHeaders);
410
+ }
411
+
377
412
  if (selectionMenuConfig != oldProps->selectionMenuConfig) {
378
413
  result["selectionMenuConfig"] = toDynamic(selectionMenuConfig);
379
414
  }