react-native-enriched-markdown-scaffold 0.6.0-scaffold.4

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 (678) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +53 -0
  3. package/ReactNativeEnrichedMarkdown.podspec +67 -0
  4. package/android/build.gradle +94 -0
  5. package/android/consumer-rules.pro +19 -0
  6. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownManagerDelegate.java +87 -0
  7. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownManagerInterface.java +37 -0
  8. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextInputManagerDelegate.java +159 -0
  9. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextInputManagerInterface.java +59 -0
  10. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerDelegate.java +87 -0
  11. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerInterface.java +37 -0
  12. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/ComponentDescriptors.cpp +22 -0
  13. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/ComponentDescriptors.h +24 -0
  14. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.cpp +318 -0
  15. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.h +259 -0
  16. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.cpp +375 -0
  17. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.h +5174 -0
  18. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/ShadowNodes.cpp +17 -0
  19. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/ShadowNodes.h +23 -0
  20. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/States.cpp +16 -0
  21. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/States.h +20 -0
  22. package/android/gradle.properties +5 -0
  23. package/android/src/main/AndroidManifest.xml +2 -0
  24. package/android/src/main/baseline-prof.txt +254 -0
  25. package/android/src/main/cpp/jni-adapter.cpp +264 -0
  26. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdown.kt +554 -0
  27. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownInternalText.kt +122 -0
  28. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownManager.kt +255 -0
  29. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownText.kt +363 -0
  30. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextLayoutManager.kt +15 -0
  31. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextManager.kt +253 -0
  32. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextPackage.kt +20 -0
  33. package/android/src/main/java/com/swmansion/enriched/markdown/MeasurementStore.kt +653 -0
  34. package/android/src/main/java/com/swmansion/enriched/markdown/accessibility/AccessibleMarkdownTextView.kt +33 -0
  35. package/android/src/main/java/com/swmansion/enriched/markdown/accessibility/MarkdownAccessibilityHelper.kt +482 -0
  36. package/android/src/main/java/com/swmansion/enriched/markdown/events/ContextMenuItemPressEvent.kt +28 -0
  37. package/android/src/main/java/com/swmansion/enriched/markdown/events/LinkLongPressEvent.kt +23 -0
  38. package/android/src/main/java/com/swmansion/enriched/markdown/events/LinkPressEvent.kt +23 -0
  39. package/android/src/main/java/com/swmansion/enriched/markdown/events/TaskListItemPressEvent.kt +26 -0
  40. package/android/src/main/java/com/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputManager.kt +465 -0
  41. package/android/src/main/java/com/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputView.kt +1066 -0
  42. package/android/src/main/java/com/swmansion/enriched/markdown/input/autolink/AutoDetectedLinkSpan.kt +29 -0
  43. package/android/src/main/java/com/swmansion/enriched/markdown/input/autolink/AutoLinkDetector.kt +188 -0
  44. package/android/src/main/java/com/swmansion/enriched/markdown/input/autolink/LinkRegexConfig.kt +9 -0
  45. package/android/src/main/java/com/swmansion/enriched/markdown/input/detection/DetectorPipeline.kt +40 -0
  46. package/android/src/main/java/com/swmansion/enriched/markdown/input/detection/TextDetector.kt +27 -0
  47. package/android/src/main/java/com/swmansion/enriched/markdown/input/detection/WordResult.kt +7 -0
  48. package/android/src/main/java/com/swmansion/enriched/markdown/input/detection/WordsUtils.kt +65 -0
  49. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/InputConnectionWrapper.kt +69 -0
  50. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/MarkdownEditableFactory.kt +15 -0
  51. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/MarkdownTextWatcher.kt +41 -0
  52. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnCaretRectChangeEvent.kt +20 -0
  53. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnChangeMarkdownEvent.kt +22 -0
  54. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnChangeMentionEvent.kt +24 -0
  55. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnChangeSelectionEvent.kt +24 -0
  56. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnChangeStateEvent.kt +50 -0
  57. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnChangeTextEvent.kt +22 -0
  58. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnContextMenuItemPressEvent.kt +48 -0
  59. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnEndMentionEvent.kt +22 -0
  60. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnInputBlurEvent.kt +18 -0
  61. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnInputFocusEvent.kt +18 -0
  62. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnLinkDetectedEvent.kt +28 -0
  63. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnMathPressEvent.kt +36 -0
  64. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnRequestCaretRectResultEvent.kt +25 -0
  65. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnRequestMarkdownResultEvent.kt +24 -0
  66. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnStartMentionEvent.kt +22 -0
  67. package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/FormattingStore.kt +192 -0
  68. package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputFormatter.kt +117 -0
  69. package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputParser.kt +117 -0
  70. package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputRemend.kt +120 -0
  71. package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/MarkdownSerializer.kt +176 -0
  72. package/android/src/main/java/com/swmansion/enriched/markdown/input/layout/InputEventEmitter.kt +216 -0
  73. package/android/src/main/java/com/swmansion/enriched/markdown/input/layout/InputLayoutManager.kt +28 -0
  74. package/android/src/main/java/com/swmansion/enriched/markdown/input/layout/InputMeasurementStore.kt +137 -0
  75. package/android/src/main/java/com/swmansion/enriched/markdown/input/math/MathChipController.kt +113 -0
  76. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/CaretRect.kt +17 -0
  77. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/FormattingRange.kt +10 -0
  78. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/InputFormatterStyle.kt +28 -0
  79. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/MathAtom.kt +7 -0
  80. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/MathChipStyle.kt +47 -0
  81. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/StyleType.kt +10 -0
  82. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/BoldStyleHandler.kt +35 -0
  83. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/ItalicStyleHandler.kt +35 -0
  84. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/LinkStyleHandler.kt +75 -0
  85. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/SpoilerStyleHandler.kt +36 -0
  86. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/StrikethroughStyleHandler.kt +24 -0
  87. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/StyleHandler.kt +18 -0
  88. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/StyleMergingConfig.kt +10 -0
  89. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/UnderlineStyleHandler.kt +24 -0
  90. package/android/src/main/java/com/swmansion/enriched/markdown/input/toolbar/InputContextMenu.kt +181 -0
  91. package/android/src/main/java/com/swmansion/enriched/markdown/parser/MarkdownASTNode.kt +43 -0
  92. package/android/src/main/java/com/swmansion/enriched/markdown/parser/Parser.kt +68 -0
  93. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BaselineShiftRenderer.kt +44 -0
  94. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BlockStyleContext.kt +152 -0
  95. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BlockquoteRenderer.kt +87 -0
  96. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/CodeBlockRenderer.kt +104 -0
  97. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/CodeRenderer.kt +36 -0
  98. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/DocumentRenderer.kt +16 -0
  99. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/EmphasisRenderer.kt +27 -0
  100. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/HeadingRenderer.kt +71 -0
  101. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/HighlightRenderer.kt +25 -0
  102. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ImageRenderer.kt +61 -0
  103. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/LineBreakRenderer.kt +16 -0
  104. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/LinkRenderer.kt +29 -0
  105. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListContextManager.kt +89 -0
  106. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListItemRenderer.kt +127 -0
  107. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListRenderer.kt +74 -0
  108. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/NodeRenderer.kt +161 -0
  109. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ParagraphRenderer.kt +75 -0
  110. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/Renderer.kt +113 -0
  111. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SpanStyleCache.kt +134 -0
  112. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SpoilerRenderer.kt +25 -0
  113. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/StrikethroughRenderer.kt +27 -0
  114. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/StrongRenderer.kt +27 -0
  115. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SubscriptRenderer.kt +11 -0
  116. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SuperscriptRenderer.kt +11 -0
  117. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/TextRenderer.kt +30 -0
  118. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ThematicBreakRenderer.kt +45 -0
  119. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/UnderlineRenderer.kt +27 -0
  120. package/android/src/main/java/com/swmansion/enriched/markdown/spans/BaseListSpan.kt +127 -0
  121. package/android/src/main/java/com/swmansion/enriched/markdown/spans/BaselineShiftSpan.kt +27 -0
  122. package/android/src/main/java/com/swmansion/enriched/markdown/spans/BlockquoteSpan.kt +152 -0
  123. package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeBackgroundSpan.kt +180 -0
  124. package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeBlockSpan.kt +196 -0
  125. package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeSpan.kt +32 -0
  126. package/android/src/main/java/com/swmansion/enriched/markdown/spans/EmphasisSpan.kt +42 -0
  127. package/android/src/main/java/com/swmansion/enriched/markdown/spans/FadeInSpan.kt +25 -0
  128. package/android/src/main/java/com/swmansion/enriched/markdown/spans/HeadingSpan.kt +38 -0
  129. package/android/src/main/java/com/swmansion/enriched/markdown/spans/HighlightSpan.kt +26 -0
  130. package/android/src/main/java/com/swmansion/enriched/markdown/spans/ImageSpan.kt +335 -0
  131. package/android/src/main/java/com/swmansion/enriched/markdown/spans/LineHeightSpan.kt +27 -0
  132. package/android/src/main/java/com/swmansion/enriched/markdown/spans/LinkSpan.kt +66 -0
  133. package/android/src/main/java/com/swmansion/enriched/markdown/spans/MarginBottomSpan.kt +76 -0
  134. package/android/src/main/java/com/swmansion/enriched/markdown/spans/MathModels.kt +18 -0
  135. package/android/src/main/java/com/swmansion/enriched/markdown/spans/OrderedListSpan.kt +85 -0
  136. package/android/src/main/java/com/swmansion/enriched/markdown/spans/SpoilerSpan.kt +33 -0
  137. package/android/src/main/java/com/swmansion/enriched/markdown/spans/StrikethroughSpan.kt +12 -0
  138. package/android/src/main/java/com/swmansion/enriched/markdown/spans/StrongSpan.kt +39 -0
  139. package/android/src/main/java/com/swmansion/enriched/markdown/spans/TaskListSpan.kt +134 -0
  140. package/android/src/main/java/com/swmansion/enriched/markdown/spans/TextSpan.kt +26 -0
  141. package/android/src/main/java/com/swmansion/enriched/markdown/spans/ThematicBreakSpan.kt +69 -0
  142. package/android/src/main/java/com/swmansion/enriched/markdown/spans/UnorderedListSpan.kt +92 -0
  143. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/ParticleStrategy.kt +68 -0
  144. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SegmentKey.kt +13 -0
  145. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SolidStrategy.kt +95 -0
  146. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerAnimator.kt +89 -0
  147. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerCapable.kt +5 -0
  148. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerConstants.kt +3 -0
  149. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerDrawContext.kt +33 -0
  150. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerDrawUtils.kt +40 -0
  151. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerOverlay.kt +17 -0
  152. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerOverlayDrawer.kt +152 -0
  153. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerParticleDrawable.kt +237 -0
  154. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerStrategy.kt +53 -0
  155. package/android/src/main/java/com/swmansion/enriched/markdown/styles/BaseBlockStyle.kt +11 -0
  156. package/android/src/main/java/com/swmansion/enriched/markdown/styles/BlockquoteStyle.kt +51 -0
  157. package/android/src/main/java/com/swmansion/enriched/markdown/styles/CodeBlockStyle.kt +54 -0
  158. package/android/src/main/java/com/swmansion/enriched/markdown/styles/CodeStyle.kt +26 -0
  159. package/android/src/main/java/com/swmansion/enriched/markdown/styles/EmphasisStyle.kt +21 -0
  160. package/android/src/main/java/com/swmansion/enriched/markdown/styles/HeadingStyle.kt +33 -0
  161. package/android/src/main/java/com/swmansion/enriched/markdown/styles/HighlightStyle.kt +19 -0
  162. package/android/src/main/java/com/swmansion/enriched/markdown/styles/ImageStyle.kt +23 -0
  163. package/android/src/main/java/com/swmansion/enriched/markdown/styles/InlineImageStyle.kt +17 -0
  164. package/android/src/main/java/com/swmansion/enriched/markdown/styles/InlineMathStyle.kt +17 -0
  165. package/android/src/main/java/com/swmansion/enriched/markdown/styles/LinkStyle.kt +23 -0
  166. package/android/src/main/java/com/swmansion/enriched/markdown/styles/LinkVariantEntry.kt +29 -0
  167. package/android/src/main/java/com/swmansion/enriched/markdown/styles/ListStyle.kt +62 -0
  168. package/android/src/main/java/com/swmansion/enriched/markdown/styles/MathStyle.kt +29 -0
  169. package/android/src/main/java/com/swmansion/enriched/markdown/styles/ParagraphStyle.kt +33 -0
  170. package/android/src/main/java/com/swmansion/enriched/markdown/styles/SpoilerStyle.kt +27 -0
  171. package/android/src/main/java/com/swmansion/enriched/markdown/styles/StrikethroughStyle.kt +17 -0
  172. package/android/src/main/java/com/swmansion/enriched/markdown/styles/StrongStyle.kt +21 -0
  173. package/android/src/main/java/com/swmansion/enriched/markdown/styles/StyleConfig.kt +364 -0
  174. package/android/src/main/java/com/swmansion/enriched/markdown/styles/StyleParser.kt +92 -0
  175. package/android/src/main/java/com/swmansion/enriched/markdown/styles/SubscriptStyle.kt +16 -0
  176. package/android/src/main/java/com/swmansion/enriched/markdown/styles/SuperscriptStyle.kt +16 -0
  177. package/android/src/main/java/com/swmansion/enriched/markdown/styles/TableStyle.kt +69 -0
  178. package/android/src/main/java/com/swmansion/enriched/markdown/styles/TaskListStyle.kt +29 -0
  179. package/android/src/main/java/com/swmansion/enriched/markdown/styles/TextAlignment.kt +32 -0
  180. package/android/src/main/java/com/swmansion/enriched/markdown/styles/ThematicBreakStyle.kt +23 -0
  181. package/android/src/main/java/com/swmansion/enriched/markdown/styles/UnderlineStyle.kt +17 -0
  182. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/BreakStrategyUtils.kt +32 -0
  183. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/FeatureFlags.kt +7 -0
  184. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/MarkdownSegment.kt +56 -0
  185. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/MarkdownViewManagerUtils.kt +100 -0
  186. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/MotionPreferences.kt +18 -0
  187. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/ReadableMapExtensions.kt +20 -0
  188. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/RenderedSegment.kt +78 -0
  189. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/SegmentReconciler.kt +118 -0
  190. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/SegmentSignature.kt +78 -0
  191. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/StreamingMarkdownFilter.kt +142 -0
  192. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/layout/RTLUtils.kt +6 -0
  193. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/serialization/MarkdownASTSerializer.kt +115 -0
  194. package/android/src/main/java/com/swmansion/enriched/markdown/utils/input/AutoCapitalizeUtils.kt +27 -0
  195. package/android/src/main/java/com/swmansion/enriched/markdown/utils/input/BorderPropsApplicator.kt +77 -0
  196. package/android/src/main/java/com/swmansion/enriched/markdown/utils/input/MarkdownStyleParser.kt +184 -0
  197. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/ImageCache.kt +53 -0
  198. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/ImageDownloader.kt +156 -0
  199. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/TailFadeInAnimator.kt +84 -0
  200. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/conversion/HTMLGenerator.kt +1067 -0
  201. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/conversion/MarkdownExtractor.kt +419 -0
  202. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/extensions/ParagraphUtils.kt +9 -0
  203. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/extensions/SpannableExtensions.kt +65 -0
  204. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/extensions/TextPaintExtensions.kt +53 -0
  205. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/interaction/CheckboxTouchHelper.kt +54 -0
  206. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/interaction/TaskListTapUtils.kt +249 -0
  207. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/span/BlockSpacing.kt +89 -0
  208. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/span/SpanFlags.kt +17 -0
  209. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/LinkEvents.kt +43 -0
  210. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/LinkLongPressMovementMethod.kt +187 -0
  211. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/SelectionActionMode.kt +205 -0
  212. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/TextSelectionColors.kt +48 -0
  213. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/TextViewSetup.kt +40 -0
  214. package/android/src/main/java/com/swmansion/enriched/markdown/views/BlockSegmentView.kt +10 -0
  215. package/android/src/main/java/com/swmansion/enriched/markdown/views/ContextMenuPopup.kt +214 -0
  216. package/android/src/main/java/com/swmansion/enriched/markdown/views/TableContainerView.kt +501 -0
  217. package/android/src/main/jni/CMakeLists.txt +70 -0
  218. package/android/src/main/jni/EnrichedMarkdownTextSpec.cpp +21 -0
  219. package/android/src/main/jni/EnrichedMarkdownTextSpec.h +15 -0
  220. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/ComponentDescriptors.h +67 -0
  221. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerComponentDescriptor.h +26 -0
  222. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerMeasurementManager.cpp +45 -0
  223. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerMeasurementManager.h +21 -0
  224. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerShadowNode.cpp +20 -0
  225. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerShadowNode.h +34 -0
  226. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextComponentDescriptor.h +29 -0
  227. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextInputMeasurementManager.cpp +44 -0
  228. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextInputMeasurementManager.h +21 -0
  229. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextInputShadowNode.cpp +30 -0
  230. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextInputShadowNode.h +43 -0
  231. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextInputState.cpp +9 -0
  232. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextInputState.h +24 -0
  233. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextMeasurementManager.cpp +45 -0
  234. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextMeasurementManager.h +21 -0
  235. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextShadowNode.cpp +20 -0
  236. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextShadowNode.h +37 -0
  237. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/conversions.h +45 -0
  238. package/android/src/math/java/com/swmansion/enriched/markdown/input/math/MathChipControllerImpl.kt +217 -0
  239. package/android/src/math/java/com/swmansion/enriched/markdown/renderer/MathInlineRenderer.kt +47 -0
  240. package/android/src/math/java/com/swmansion/enriched/markdown/spans/MathChipSpan.kt +208 -0
  241. package/android/src/math/java/com/swmansion/enriched/markdown/spans/MathInlinePlaceholderSpan.kt +41 -0
  242. package/android/src/math/java/com/swmansion/enriched/markdown/spans/MathInlineSpan.kt +92 -0
  243. package/android/src/math/java/com/swmansion/enriched/markdown/spans/MathMeasureHelper.kt +57 -0
  244. package/android/src/math/java/com/swmansion/enriched/markdown/views/MathContainerView.kt +148 -0
  245. package/app.plugin.js +1 -0
  246. package/cpp/md4c/md4c.c +7235 -0
  247. package/cpp/md4c/md4c.h +475 -0
  248. package/cpp/parser/MD4CParser.cpp +539 -0
  249. package/cpp/parser/MD4CParser.hpp +32 -0
  250. package/cpp/parser/MarkdownASTNode.hpp +63 -0
  251. package/cpp/wasm/ASTSerializer.cpp +158 -0
  252. package/cpp/wasm/ASTSerializer.hpp +17 -0
  253. package/cpp/wasm/build.sh +58 -0
  254. package/cpp/wasm/md4c_wasm.cpp +43 -0
  255. package/ios/EnrichedMarkdown.h +20 -0
  256. package/ios/EnrichedMarkdown.mm +1121 -0
  257. package/ios/EnrichedMarkdownText.h +20 -0
  258. package/ios/EnrichedMarkdownText.mm +802 -0
  259. package/ios/attachments/ENRMImageAttachment.h +27 -0
  260. package/ios/attachments/ENRMImageAttachment.m +305 -0
  261. package/ios/attachments/ENRMMathInlineAttachment+macOS.m +60 -0
  262. package/ios/attachments/ENRMMathInlineAttachment.h +47 -0
  263. package/ios/attachments/ENRMMathInlineAttachment.m +142 -0
  264. package/ios/attachments/ENRMMathInlineAttachmentShared.h +17 -0
  265. package/ios/attachments/ThematicBreakAttachment.h +15 -0
  266. package/ios/attachments/ThematicBreakAttachment.m +33 -0
  267. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/ComponentDescriptors.cpp +22 -0
  268. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/ComponentDescriptors.h +24 -0
  269. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/EventEmitters.cpp +318 -0
  270. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/EventEmitters.h +259 -0
  271. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/Props.cpp +375 -0
  272. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/Props.h +5174 -0
  273. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/RCTComponentViewHelpers.h +436 -0
  274. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/ShadowNodes.cpp +17 -0
  275. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/ShadowNodes.h +23 -0
  276. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/States.cpp +16 -0
  277. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/States.h +20 -0
  278. package/ios/input/ENRMAutoLinkDetector.h +32 -0
  279. package/ios/input/ENRMAutoLinkDetector.mm +211 -0
  280. package/ios/input/ENRMDetectorPipeline.h +28 -0
  281. package/ios/input/ENRMDetectorPipeline.mm +53 -0
  282. package/ios/input/ENRMFormattingRange.h +19 -0
  283. package/ios/input/ENRMFormattingRange.mm +28 -0
  284. package/ios/input/ENRMFormattingStore.h +29 -0
  285. package/ios/input/ENRMFormattingStore.mm +278 -0
  286. package/ios/input/ENRMInputFormatter.h +84 -0
  287. package/ios/input/ENRMInputFormatter.mm +222 -0
  288. package/ios/input/ENRMInputLayoutManager.h +11 -0
  289. package/ios/input/ENRMInputLayoutManager.mm +5 -0
  290. package/ios/input/ENRMInputLinkPrompt.h +9 -0
  291. package/ios/input/ENRMInputLinkPrompt.mm +71 -0
  292. package/ios/input/ENRMInputMentionCandidate.h +21 -0
  293. package/ios/input/ENRMInputMentionCandidate.mm +18 -0
  294. package/ios/input/ENRMInputParser.h +27 -0
  295. package/ios/input/ENRMInputParser.mm +556 -0
  296. package/ios/input/ENRMInputRemend.h +9 -0
  297. package/ios/input/ENRMInputRemend.mm +136 -0
  298. package/ios/input/ENRMInputStyledRange.h +29 -0
  299. package/ios/input/ENRMInputStyledRange.mm +4 -0
  300. package/ios/input/ENRMInputTextView.h +13 -0
  301. package/ios/input/ENRMInputTextView.mm +175 -0
  302. package/ios/input/ENRMLinkRegexConfig.h +26 -0
  303. package/ios/input/ENRMLinkRegexConfig.mm +60 -0
  304. package/ios/input/ENRMMarkdownSerializer.h +19 -0
  305. package/ios/input/ENRMMarkdownSerializer.mm +283 -0
  306. package/ios/input/ENRMTextDetector.h +30 -0
  307. package/ios/input/ENRMWordsUtils.h +28 -0
  308. package/ios/input/ENRMWordsUtils.mm +88 -0
  309. package/ios/input/EnrichedMarkdownTextInput+ContextMenu.mm +157 -0
  310. package/ios/input/EnrichedMarkdownTextInput+Internal.h +30 -0
  311. package/ios/input/EnrichedMarkdownTextInput.h +20 -0
  312. package/ios/input/EnrichedMarkdownTextInput.mm +2008 -0
  313. package/ios/input/InputStylePropsUtils.h +261 -0
  314. package/ios/input/internals/EnrichedMarkdownTextInputComponentDescriptor.h +19 -0
  315. package/ios/input/internals/EnrichedMarkdownTextInputShadowNode.h +40 -0
  316. package/ios/input/internals/EnrichedMarkdownTextInputShadowNode.mm +83 -0
  317. package/ios/input/internals/EnrichedMarkdownTextInputState.h +23 -0
  318. package/ios/input/styles/ENRMBoldStyleHandler.h +10 -0
  319. package/ios/input/styles/ENRMBoldStyleHandler.mm +29 -0
  320. package/ios/input/styles/ENRMItalicStyleHandler.h +10 -0
  321. package/ios/input/styles/ENRMItalicStyleHandler.mm +29 -0
  322. package/ios/input/styles/ENRMLinkStyleHandler.h +10 -0
  323. package/ios/input/styles/ENRMLinkStyleHandler.mm +52 -0
  324. package/ios/input/styles/ENRMSpoilerStyleHandler.h +10 -0
  325. package/ios/input/styles/ENRMSpoilerStyleHandler.mm +33 -0
  326. package/ios/input/styles/ENRMStrikethroughStyleHandler.h +10 -0
  327. package/ios/input/styles/ENRMStrikethroughStyleHandler.mm +28 -0
  328. package/ios/input/styles/ENRMStyleHandler.h +26 -0
  329. package/ios/input/styles/ENRMStyleMergingConfig.h +26 -0
  330. package/ios/input/styles/ENRMStyleMergingConfig.mm +21 -0
  331. package/ios/input/styles/ENRMUnderlineStyleHandler.h +10 -0
  332. package/ios/input/styles/ENRMUnderlineStyleHandler.mm +28 -0
  333. package/ios/internals/EnrichedMarkdownComponentDescriptor.h +18 -0
  334. package/ios/internals/EnrichedMarkdownShadowNode.h +43 -0
  335. package/ios/internals/EnrichedMarkdownShadowNode.mm +73 -0
  336. package/ios/internals/EnrichedMarkdownState.h +23 -0
  337. package/ios/internals/EnrichedMarkdownTextComponentDescriptor.h +19 -0
  338. package/ios/internals/EnrichedMarkdownTextShadowNode.h +45 -0
  339. package/ios/internals/EnrichedMarkdownTextShadowNode.mm +74 -0
  340. package/ios/internals/EnrichedMarkdownTextState.h +24 -0
  341. package/ios/internals/MeasurementCache.h +223 -0
  342. package/ios/internals/ShadowMeasurementUtils.h +135 -0
  343. package/ios/math/ENRMRaTeXBridge.swift +58 -0
  344. package/ios/parser/ENRMMarkdownParser.h +21 -0
  345. package/ios/parser/ENRMMarkdownParser.mm +50 -0
  346. package/ios/parser/MarkdownASTNode.h +47 -0
  347. package/ios/parser/MarkdownASTNode.m +32 -0
  348. package/ios/parser/MarkdownParserBridge.mm +161 -0
  349. package/ios/renderer/AttributedRenderer.h +11 -0
  350. package/ios/renderer/AttributedRenderer.m +153 -0
  351. package/ios/renderer/BaseRenderer.h +18 -0
  352. package/ios/renderer/BaseRenderer.m +16 -0
  353. package/ios/renderer/BaselineShiftTextAttributes.h +6 -0
  354. package/ios/renderer/BaselineShiftTextAttributes.m +22 -0
  355. package/ios/renderer/BlockquoteRenderer.h +6 -0
  356. package/ios/renderer/BlockquoteRenderer.m +148 -0
  357. package/ios/renderer/CodeBlockRenderer.h +9 -0
  358. package/ios/renderer/CodeBlockRenderer.m +90 -0
  359. package/ios/renderer/CodeRenderer.h +9 -0
  360. package/ios/renderer/CodeRenderer.m +64 -0
  361. package/ios/renderer/ENRMImageRenderer.h +9 -0
  362. package/ios/renderer/ENRMImageRenderer.m +65 -0
  363. package/ios/renderer/ENRMMathInlineRenderer.h +9 -0
  364. package/ios/renderer/ENRMMathInlineRenderer.m +56 -0
  365. package/ios/renderer/ENRMSpoilerRenderer.h +5 -0
  366. package/ios/renderer/ENRMSpoilerRenderer.m +32 -0
  367. package/ios/renderer/EmphasisRenderer.h +5 -0
  368. package/ios/renderer/EmphasisRenderer.m +98 -0
  369. package/ios/renderer/HeadingRenderer.h +6 -0
  370. package/ios/renderer/HeadingRenderer.m +94 -0
  371. package/ios/renderer/HighlightRenderer.h +7 -0
  372. package/ios/renderer/HighlightRenderer.m +31 -0
  373. package/ios/renderer/LinkRenderer.h +6 -0
  374. package/ios/renderer/LinkRenderer.m +82 -0
  375. package/ios/renderer/ListItemRenderer.h +12 -0
  376. package/ios/renderer/ListItemRenderer.m +175 -0
  377. package/ios/renderer/ListRenderer.h +13 -0
  378. package/ios/renderer/ListRenderer.m +70 -0
  379. package/ios/renderer/NodeRenderer.h +8 -0
  380. package/ios/renderer/ParagraphRenderer.h +6 -0
  381. package/ios/renderer/ParagraphRenderer.m +70 -0
  382. package/ios/renderer/RenderContext.h +118 -0
  383. package/ios/renderer/RenderContext.m +337 -0
  384. package/ios/renderer/RendererFactory.h +12 -0
  385. package/ios/renderer/RendererFactory.m +147 -0
  386. package/ios/renderer/StrikethroughRenderer.h +5 -0
  387. package/ios/renderer/StrikethroughRenderer.m +28 -0
  388. package/ios/renderer/StrongRenderer.h +5 -0
  389. package/ios/renderer/StrongRenderer.m +86 -0
  390. package/ios/renderer/SubscriptRenderer.h +5 -0
  391. package/ios/renderer/SubscriptRenderer.m +22 -0
  392. package/ios/renderer/SuperscriptRenderer.h +5 -0
  393. package/ios/renderer/SuperscriptRenderer.m +22 -0
  394. package/ios/renderer/TextRenderer.h +6 -0
  395. package/ios/renderer/TextRenderer.m +16 -0
  396. package/ios/renderer/ThematicBreakRenderer.h +4 -0
  397. package/ios/renderer/ThematicBreakRenderer.m +40 -0
  398. package/ios/renderer/UnderlineRenderer.h +4 -0
  399. package/ios/renderer/UnderlineRenderer.m +27 -0
  400. package/ios/styles/ENRMFontSlot.h +12 -0
  401. package/ios/styles/ENRMFontSlot.m +24 -0
  402. package/ios/styles/StyleConfig.h +407 -0
  403. package/ios/styles/StyleConfig.mm +2515 -0
  404. package/ios/utils/AccessibilityInfo.h +35 -0
  405. package/ios/utils/AccessibilityInfo.m +24 -0
  406. package/ios/utils/BlockquoteBorder.h +20 -0
  407. package/ios/utils/BlockquoteBorder.m +97 -0
  408. package/ios/utils/CodeBackground.h +19 -0
  409. package/ios/utils/CodeBackground.m +197 -0
  410. package/ios/utils/CodeBlockBackground.h +17 -0
  411. package/ios/utils/CodeBlockBackground.m +89 -0
  412. package/ios/utils/ContextMenuUtils.h +76 -0
  413. package/ios/utils/ContextMenuUtils.mm +73 -0
  414. package/ios/utils/ENRMAsyncRenderCoordinator.h +24 -0
  415. package/ios/utils/ENRMAsyncRenderCoordinator.m +37 -0
  416. package/ios/utils/ENRMFeatureFlags.h +12 -0
  417. package/ios/utils/ENRMImageDownloader.h +16 -0
  418. package/ios/utils/ENRMImageDownloader.m +108 -0
  419. package/ios/utils/ENRMMenuAction.h +27 -0
  420. package/ios/utils/ENRMMenuAction.m +33 -0
  421. package/ios/utils/ENRMParticleOverlayView.h +12 -0
  422. package/ios/utils/ENRMParticleOverlayView.m +159 -0
  423. package/ios/utils/ENRMSolidOverlayView.h +12 -0
  424. package/ios/utils/ENRMSolidOverlayView.m +25 -0
  425. package/ios/utils/ENRMSpoilerCapable.h +15 -0
  426. package/ios/utils/ENRMSpoilerOverlayManager.h +21 -0
  427. package/ios/utils/ENRMSpoilerOverlayManager.m +181 -0
  428. package/ios/utils/ENRMSpoilerOverlayView.h +49 -0
  429. package/ios/utils/ENRMSpoilerOverlayView.m +144 -0
  430. package/ios/utils/ENRMSpoilerTapUtils.h +25 -0
  431. package/ios/utils/ENRMSpoilerTapUtils.m +68 -0
  432. package/ios/utils/ENRMTailFadeInAnimator.h +16 -0
  433. package/ios/utils/ENRMTailFadeInAnimator.m +161 -0
  434. package/ios/utils/ENRMTextHitTest.h +23 -0
  435. package/ios/utils/ENRMTextHitTest.m +20 -0
  436. package/ios/utils/ENRMTextInteractionUtils.h +20 -0
  437. package/ios/utils/ENRMTextInteractionUtils.m +15 -0
  438. package/ios/utils/ENRMTextRenderer.h +30 -0
  439. package/ios/utils/ENRMTextRenderer.m +38 -0
  440. package/ios/utils/ENRMTextViewSetup.h +78 -0
  441. package/ios/utils/ENRMUIKit.h +418 -0
  442. package/ios/utils/EditMenuUtils+macOS.m +60 -0
  443. package/ios/utils/EditMenuUtils.h +35 -0
  444. package/ios/utils/EditMenuUtils.m +119 -0
  445. package/ios/utils/FontScaleObserver.h +10 -0
  446. package/ios/utils/FontScaleObserver.m +55 -0
  447. package/ios/utils/FontUtils.h +30 -0
  448. package/ios/utils/FontUtils.m +47 -0
  449. package/ios/utils/HTMLGenerator.h +25 -0
  450. package/ios/utils/HTMLGenerator.m +1019 -0
  451. package/ios/utils/HeightUpdateUtils.h +25 -0
  452. package/ios/utils/LastElementUtils.h +53 -0
  453. package/ios/utils/LinkTapUtils.h +24 -0
  454. package/ios/utils/LinkTapUtils.m +32 -0
  455. package/ios/utils/ListMarkerDrawer.h +15 -0
  456. package/ios/utils/ListMarkerDrawer.m +212 -0
  457. package/ios/utils/MarkdownASTSerializer.h +24 -0
  458. package/ios/utils/MarkdownASTSerializer.m +114 -0
  459. package/ios/utils/MarkdownAccessibilityElementBuilder.h +41 -0
  460. package/ios/utils/MarkdownAccessibilityElementBuilder.m +450 -0
  461. package/ios/utils/MarkdownExtractor.h +17 -0
  462. package/ios/utils/MarkdownExtractor.m +355 -0
  463. package/ios/utils/ParagraphStyleUtils.h +53 -0
  464. package/ios/utils/ParagraphStyleUtils.m +349 -0
  465. package/ios/utils/PasteboardUtils.h +48 -0
  466. package/ios/utils/PasteboardUtils.m +162 -0
  467. package/ios/utils/RTFExportUtils.h +24 -0
  468. package/ios/utils/RTFExportUtils.m +297 -0
  469. package/ios/utils/RenderedMarkdownSegment.h +49 -0
  470. package/ios/utils/RenderedMarkdownSegment.m +130 -0
  471. package/ios/utils/RuntimeKeys.h +38 -0
  472. package/ios/utils/RuntimeKeys.m +11 -0
  473. package/ios/utils/SegmentReconciler.h +32 -0
  474. package/ios/utils/SegmentReconciler.m +118 -0
  475. package/ios/utils/SegmentRenderer.h +24 -0
  476. package/ios/utils/SegmentRenderer.m +88 -0
  477. package/ios/utils/SegmentViewRegistry.h +36 -0
  478. package/ios/utils/SegmentViewRegistry.m +67 -0
  479. package/ios/utils/SelectionColorUtils.h +14 -0
  480. package/ios/utils/StreamingMarkdownFilter.h +22 -0
  481. package/ios/utils/StreamingMarkdownFilter.m +165 -0
  482. package/ios/utils/StylePropsUtils.h +1146 -0
  483. package/ios/utils/TaskListTapUtils.h +43 -0
  484. package/ios/utils/TaskListTapUtils.m +227 -0
  485. package/ios/utils/TextViewLayoutManager.h +14 -0
  486. package/ios/utils/TextViewLayoutManager.mm +113 -0
  487. package/ios/views/ENRMContextMenuTextView+macOS.h +17 -0
  488. package/ios/views/ENRMContextMenuTextView+macOS.m +97 -0
  489. package/ios/views/ENRMMathContainerView.h +20 -0
  490. package/ios/views/ENRMMathContainerView.m +227 -0
  491. package/ios/views/ENRMTableGridView.h +36 -0
  492. package/ios/views/ENRMTableGridView.m +98 -0
  493. package/ios/views/EnrichedMarkdownInternalText.h +42 -0
  494. package/ios/views/EnrichedMarkdownInternalText.m +161 -0
  495. package/ios/views/TableContainerView.h +39 -0
  496. package/ios/views/TableContainerView.m +686 -0
  497. package/lib/module/EnrichedMarkdownNativeComponent.ts +429 -0
  498. package/lib/module/EnrichedMarkdownTextInput.js +310 -0
  499. package/lib/module/EnrichedMarkdownTextInput.js.map +1 -0
  500. package/lib/module/EnrichedMarkdownTextInputNativeComponent.ts +364 -0
  501. package/lib/module/EnrichedMarkdownTextNativeComponent.ts +428 -0
  502. package/lib/module/index.js +5 -0
  503. package/lib/module/index.js.map +1 -0
  504. package/lib/module/index.web.js +4 -0
  505. package/lib/module/index.web.js.map +1 -0
  506. package/lib/module/linkVariantUtils.js +28 -0
  507. package/lib/module/linkVariantUtils.js.map +1 -0
  508. package/lib/module/native/EnrichedMarkdownText.js +158 -0
  509. package/lib/module/native/EnrichedMarkdownText.js.map +1 -0
  510. package/lib/module/normalizeMarkdownStyle.js +337 -0
  511. package/lib/module/normalizeMarkdownStyle.js.map +1 -0
  512. package/lib/module/normalizeMarkdownStyle.web.js +264 -0
  513. package/lib/module/normalizeMarkdownStyle.web.js.map +1 -0
  514. package/lib/module/normalizeMarkdownTextInputStyle.js +146 -0
  515. package/lib/module/normalizeMarkdownTextInputStyle.js.map +1 -0
  516. package/lib/module/package.json +1 -0
  517. package/lib/module/plugin/withAndroidMath.js +20 -0
  518. package/lib/module/plugin/withAndroidMath.js.map +1 -0
  519. package/lib/module/plugin/withIosMath.js +23 -0
  520. package/lib/module/plugin/withIosMath.js.map +1 -0
  521. package/lib/module/plugin/withReactNativeEnrichedMarkdown.js +16 -0
  522. package/lib/module/plugin/withReactNativeEnrichedMarkdown.js.map +1 -0
  523. package/lib/module/styleUtils.js +64 -0
  524. package/lib/module/styleUtils.js.map +1 -0
  525. package/lib/module/types/MarkdownStyle.js +2 -0
  526. package/lib/module/types/MarkdownStyle.js.map +1 -0
  527. package/lib/module/types/MarkdownStyleInternal.js +2 -0
  528. package/lib/module/types/MarkdownStyleInternal.js.map +1 -0
  529. package/lib/module/types/MarkdownTextProps.js +4 -0
  530. package/lib/module/types/MarkdownTextProps.js.map +1 -0
  531. package/lib/module/types/MarkdownTextProps.web.js +4 -0
  532. package/lib/module/types/MarkdownTextProps.web.js.map +1 -0
  533. package/lib/module/types/events.js +2 -0
  534. package/lib/module/types/events.js.map +1 -0
  535. package/lib/module/utils/regexParser.js +43 -0
  536. package/lib/module/utils/regexParser.js.map +1 -0
  537. package/lib/module/web/EnrichedMarkdownText.js +120 -0
  538. package/lib/module/web/EnrichedMarkdownText.js.map +1 -0
  539. package/lib/module/web/globalStyles.js +10 -0
  540. package/lib/module/web/globalStyles.js.map +1 -0
  541. package/lib/module/web/injectStyle.js +20 -0
  542. package/lib/module/web/injectStyle.js.map +1 -0
  543. package/lib/module/web/katex.js +22 -0
  544. package/lib/module/web/katex.js.map +1 -0
  545. package/lib/module/web/parseMarkdown.js +35 -0
  546. package/lib/module/web/parseMarkdown.js.map +1 -0
  547. package/lib/module/web/renderers/BlockRenderers.js +115 -0
  548. package/lib/module/web/renderers/BlockRenderers.js.map +1 -0
  549. package/lib/module/web/renderers/InlineRenderers.js +160 -0
  550. package/lib/module/web/renderers/InlineRenderers.js.map +1 -0
  551. package/lib/module/web/renderers/KaTeXRenderer.js +43 -0
  552. package/lib/module/web/renderers/KaTeXRenderer.js.map +1 -0
  553. package/lib/module/web/renderers/ListRenderers.js +92 -0
  554. package/lib/module/web/renderers/ListRenderers.js.map +1 -0
  555. package/lib/module/web/renderers/TableRenderers.js +77 -0
  556. package/lib/module/web/renderers/TableRenderers.js.map +1 -0
  557. package/lib/module/web/renderers/index.js +49 -0
  558. package/lib/module/web/renderers/index.js.map +1 -0
  559. package/lib/module/web/styles.js +454 -0
  560. package/lib/module/web/styles.js.map +1 -0
  561. package/lib/module/web/types.js +4 -0
  562. package/lib/module/web/types.js.map +1 -0
  563. package/lib/module/web/utils.js +56 -0
  564. package/lib/module/web/utils.js.map +1 -0
  565. package/lib/module/web/wasm/md4c.d.js +4 -0
  566. package/lib/module/web/wasm/md4c.d.js.map +1 -0
  567. package/lib/module/web/wasm/md4c.js +0 -0
  568. package/lib/module/web/wasm/md4c.js.map +1 -0
  569. package/lib/typescript/package.json +1 -0
  570. package/lib/typescript/src/EnrichedMarkdownNativeComponent.d.ts +384 -0
  571. package/lib/typescript/src/EnrichedMarkdownNativeComponent.d.ts.map +1 -0
  572. package/lib/typescript/src/EnrichedMarkdownTextInput.d.ts +173 -0
  573. package/lib/typescript/src/EnrichedMarkdownTextInput.d.ts.map +1 -0
  574. package/lib/typescript/src/EnrichedMarkdownTextInputNativeComponent.d.ts +285 -0
  575. package/lib/typescript/src/EnrichedMarkdownTextInputNativeComponent.d.ts.map +1 -0
  576. package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts +384 -0
  577. package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts.map +1 -0
  578. package/lib/typescript/src/index.d.ts +6 -0
  579. package/lib/typescript/src/index.d.ts.map +1 -0
  580. package/lib/typescript/src/index.web.d.ts +5 -0
  581. package/lib/typescript/src/index.web.d.ts.map +1 -0
  582. package/lib/typescript/src/linkVariantUtils.d.ts +5 -0
  583. package/lib/typescript/src/linkVariantUtils.d.ts.map +1 -0
  584. package/lib/typescript/src/native/EnrichedMarkdownText.d.ts +9 -0
  585. package/lib/typescript/src/native/EnrichedMarkdownText.d.ts.map +1 -0
  586. package/lib/typescript/src/normalizeMarkdownStyle.d.ts +4 -0
  587. package/lib/typescript/src/normalizeMarkdownStyle.d.ts.map +1 -0
  588. package/lib/typescript/src/normalizeMarkdownStyle.web.d.ts +4 -0
  589. package/lib/typescript/src/normalizeMarkdownStyle.web.d.ts.map +1 -0
  590. package/lib/typescript/src/normalizeMarkdownTextInputStyle.d.ts +48 -0
  591. package/lib/typescript/src/normalizeMarkdownTextInputStyle.d.ts.map +1 -0
  592. package/lib/typescript/src/plugin/withAndroidMath.d.ts +5 -0
  593. package/lib/typescript/src/plugin/withAndroidMath.d.ts.map +1 -0
  594. package/lib/typescript/src/plugin/withIosMath.d.ts +5 -0
  595. package/lib/typescript/src/plugin/withIosMath.d.ts.map +1 -0
  596. package/lib/typescript/src/plugin/withReactNativeEnrichedMarkdown.d.ts +6 -0
  597. package/lib/typescript/src/plugin/withReactNativeEnrichedMarkdown.d.ts.map +1 -0
  598. package/lib/typescript/src/styleUtils.d.ts +6 -0
  599. package/lib/typescript/src/styleUtils.d.ts.map +1 -0
  600. package/lib/typescript/src/types/MarkdownStyle.d.ts +300 -0
  601. package/lib/typescript/src/types/MarkdownStyle.d.ts.map +1 -0
  602. package/lib/typescript/src/types/MarkdownStyleInternal.d.ts +178 -0
  603. package/lib/typescript/src/types/MarkdownStyleInternal.d.ts.map +1 -0
  604. package/lib/typescript/src/types/MarkdownTextProps.d.ts +249 -0
  605. package/lib/typescript/src/types/MarkdownTextProps.d.ts.map +1 -0
  606. package/lib/typescript/src/types/MarkdownTextProps.web.d.ts +83 -0
  607. package/lib/typescript/src/types/MarkdownTextProps.web.d.ts.map +1 -0
  608. package/lib/typescript/src/types/events.d.ts +29 -0
  609. package/lib/typescript/src/types/events.d.ts.map +1 -0
  610. package/lib/typescript/src/utils/regexParser.d.ts +3 -0
  611. package/lib/typescript/src/utils/regexParser.d.ts.map +1 -0
  612. package/lib/typescript/src/web/EnrichedMarkdownText.d.ts +4 -0
  613. package/lib/typescript/src/web/EnrichedMarkdownText.d.ts.map +1 -0
  614. package/lib/typescript/src/web/globalStyles.d.ts +3 -0
  615. package/lib/typescript/src/web/globalStyles.d.ts.map +1 -0
  616. package/lib/typescript/src/web/injectStyle.d.ts +9 -0
  617. package/lib/typescript/src/web/injectStyle.d.ts.map +1 -0
  618. package/lib/typescript/src/web/katex.d.ts +11 -0
  619. package/lib/typescript/src/web/katex.d.ts.map +1 -0
  620. package/lib/typescript/src/web/parseMarkdown.d.ts +4 -0
  621. package/lib/typescript/src/web/parseMarkdown.d.ts.map +1 -0
  622. package/lib/typescript/src/web/renderers/BlockRenderers.d.ts +3 -0
  623. package/lib/typescript/src/web/renderers/BlockRenderers.d.ts.map +1 -0
  624. package/lib/typescript/src/web/renderers/InlineRenderers.d.ts +3 -0
  625. package/lib/typescript/src/web/renderers/InlineRenderers.d.ts.map +1 -0
  626. package/lib/typescript/src/web/renderers/KaTeXRenderer.d.ts +11 -0
  627. package/lib/typescript/src/web/renderers/KaTeXRenderer.d.ts.map +1 -0
  628. package/lib/typescript/src/web/renderers/ListRenderers.d.ts +3 -0
  629. package/lib/typescript/src/web/renderers/ListRenderers.d.ts.map +1 -0
  630. package/lib/typescript/src/web/renderers/TableRenderers.d.ts +3 -0
  631. package/lib/typescript/src/web/renderers/TableRenderers.d.ts.map +1 -0
  632. package/lib/typescript/src/web/renderers/index.d.ts +14 -0
  633. package/lib/typescript/src/web/renderers/index.d.ts.map +1 -0
  634. package/lib/typescript/src/web/styles.d.ts +49 -0
  635. package/lib/typescript/src/web/styles.d.ts.map +1 -0
  636. package/lib/typescript/src/web/types.d.ts +51 -0
  637. package/lib/typescript/src/web/types.d.ts.map +1 -0
  638. package/lib/typescript/src/web/utils.d.ts +21 -0
  639. package/lib/typescript/src/web/utils.d.ts.map +1 -0
  640. package/package.json +125 -0
  641. package/react-native.config.js +17 -0
  642. package/src/EnrichedMarkdownNativeComponent.ts +429 -0
  643. package/src/EnrichedMarkdownTextInput.tsx +547 -0
  644. package/src/EnrichedMarkdownTextInputNativeComponent.ts +364 -0
  645. package/src/EnrichedMarkdownTextNativeComponent.ts +428 -0
  646. package/src/index.tsx +28 -0
  647. package/src/index.web.tsx +8 -0
  648. package/src/linkVariantUtils.ts +42 -0
  649. package/src/native/EnrichedMarkdownText.tsx +187 -0
  650. package/src/normalizeMarkdownStyle.ts +310 -0
  651. package/src/normalizeMarkdownStyle.web.ts +281 -0
  652. package/src/normalizeMarkdownTextInputStyle.ts +242 -0
  653. package/src/plugin/withAndroidMath.ts +24 -0
  654. package/src/plugin/withIosMath.ts +35 -0
  655. package/src/plugin/withReactNativeEnrichedMarkdown.ts +17 -0
  656. package/src/styleUtils.ts +98 -0
  657. package/src/types/MarkdownStyle.ts +326 -0
  658. package/src/types/MarkdownStyleInternal.ts +208 -0
  659. package/src/types/MarkdownTextProps.ts +253 -0
  660. package/src/types/MarkdownTextProps.web.ts +90 -0
  661. package/src/types/events.ts +32 -0
  662. package/src/utils/regexParser.ts +54 -0
  663. package/src/web/EnrichedMarkdownText.tsx +154 -0
  664. package/src/web/globalStyles.ts +15 -0
  665. package/src/web/injectStyle.ts +17 -0
  666. package/src/web/katex.ts +31 -0
  667. package/src/web/parseMarkdown.ts +78 -0
  668. package/src/web/renderers/BlockRenderers.tsx +90 -0
  669. package/src/web/renderers/InlineRenderers.tsx +121 -0
  670. package/src/web/renderers/KaTeXRenderer.tsx +49 -0
  671. package/src/web/renderers/ListRenderers.tsx +110 -0
  672. package/src/web/renderers/TableRenderers.tsx +61 -0
  673. package/src/web/renderers/index.tsx +75 -0
  674. package/src/web/styles.ts +549 -0
  675. package/src/web/types.ts +92 -0
  676. package/src/web/utils.ts +52 -0
  677. package/src/web/wasm/md4c.d.ts +21 -0
  678. package/src/web/wasm/md4c.js +0 -0
@@ -0,0 +1,418 @@
1
+ #pragma once
2
+
3
+ #include <TargetConditionals.h>
4
+
5
+ // RCTUIKit.h is react-native-macos only. On iOS we import UIKit and define the aliases ourselves.
6
+ #if !TARGET_OS_OSX
7
+ #import <UIKit/UIKit.h>
8
+ #define RCTUIColor UIColor
9
+ #define RCTUIImage UIImage
10
+ #define RCTUIView UIView
11
+ #define RCTUIScrollView UIScrollView
12
+ #define RCTUIGraphicsImageRenderer UIGraphicsImageRenderer
13
+ #define RCTUIGraphicsImageRendererContext UIGraphicsImageRendererContext
14
+ #define RCTUIGraphicsImageRendererFormat UIGraphicsImageRendererFormat
15
+ #define ENRMPlatformTextView UITextView
16
+ #define ENRMTapRecognizer UITapGestureRecognizer
17
+
18
+ // Inline helpers that RCTUIKit.h normally provides on iOS.
19
+ static inline UIBezierPath *UIBezierPathWithRoundedRect(CGRect rect, CGFloat cornerRadius)
20
+ {
21
+ return [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
22
+ }
23
+ static inline void UIBezierPathAppendPath(UIBezierPath *path, UIBezierPath *appendPath)
24
+ {
25
+ [path appendPath:appendPath];
26
+ }
27
+ static inline CGFloat UIFontLineHeight(UIFont *font)
28
+ {
29
+ return font.lineHeight;
30
+ }
31
+ #else
32
+ #import <React/RCTTextUIKit.h>
33
+ #import <React/RCTUIKit.h>
34
+ #import <React/RCTUITextView.h>
35
+ #define ENRMPlatformTextView RCTUITextView
36
+ #define ENRMTapRecognizer NSClickGestureRecognizer
37
+ #endif
38
+
39
+ /// On iOS, explicitly sets opaque=NO — without it the renderer produces an opaque backing,
40
+ /// breaking transparent backgrounds. macOS handles transparency by default.
41
+ static inline RCTUIGraphicsImageRenderer *ImageRendererForSize(CGSize size)
42
+ {
43
+ #if !TARGET_OS_OSX
44
+ RCTUIGraphicsImageRendererFormat *format = [RCTUIGraphicsImageRendererFormat preferredFormat];
45
+ format.opaque = NO;
46
+ return [[RCTUIGraphicsImageRenderer alloc] initWithSize:size format:format];
47
+ #else
48
+ return [[RCTUIGraphicsImageRenderer alloc] initWithSize:size];
49
+ #endif
50
+ }
51
+
52
+ /// NSBezierPath uses NS-prefixed enum values; UIBezierPath uses kCG-prefixed constants.
53
+ static inline void BezierPathSetRoundStyle(UIBezierPath *path)
54
+ {
55
+ #if !TARGET_OS_OSX
56
+ path.lineCapStyle = kCGLineCapRound;
57
+ path.lineJoinStyle = kCGLineJoinRound;
58
+ #else
59
+ path.lineCapStyle = NSLineCapStyleRound;
60
+ path.lineJoinStyle = NSLineJoinStyleRound;
61
+ #endif
62
+ }
63
+
64
+ /// Cross-platform line segment: NSBezierPath uses lineToPoint: instead of addLineToPoint:.
65
+ static inline void BezierPathAddLine(UIBezierPath *path, CGPoint point)
66
+ {
67
+ #if !TARGET_OS_OSX
68
+ [path addLineToPoint:point];
69
+ #else
70
+ [path lineToPoint:point];
71
+ #endif
72
+ }
73
+
74
+ /// Cross-platform quad-curve: NSBezierPath lacks addQuadCurveToPoint:, so we approximate
75
+ /// with a cubic Bezier using the standard quadratic-to-cubic conversion.
76
+ static inline void BezierPathAddQuadCurve(UIBezierPath *path, CGPoint end, CGPoint control)
77
+ {
78
+ #if !TARGET_OS_OSX
79
+ [path addQuadCurveToPoint:end controlPoint:control];
80
+ #else
81
+ CGPoint start = [path currentPoint];
82
+ [path curveToPoint:end
83
+ controlPoint1:CGPointMake(start.x + 2.0 / 3.0 * (control.x - start.x),
84
+ start.y + 2.0 / 3.0 * (control.y - start.y))
85
+ controlPoint2:CGPointMake(end.x + 2.0 / 3.0 * (control.x - end.x), end.y + 2.0 / 3.0 * (control.y - end.y))];
86
+ #endif
87
+ }
88
+
89
+ /// Cross-platform IME composition check: UITextView uses markedTextRange (nullable UITextRange);
90
+ /// NSTextView uses hasMarkedText (BOOL).
91
+ static inline BOOL ENRMHasMarkedText(ENRMPlatformTextView *textView)
92
+ {
93
+ #if !TARGET_OS_OSX
94
+ return textView.markedTextRange != nil;
95
+ #else
96
+ return textView.hasMarkedText;
97
+ #endif
98
+ }
99
+
100
+ /// Cross-platform plain text read: UITextView uses .text; NSTextView uses .string.
101
+ static inline NSString *ENRMGetPlainText(ENRMPlatformTextView *textView)
102
+ {
103
+ #if !TARGET_OS_OSX
104
+ return textView.text;
105
+ #else
106
+ return textView.string;
107
+ #endif
108
+ }
109
+
110
+ /// Cross-platform plain text write: UITextView uses .text setter; NSTextView uses setString:.
111
+ static inline void ENRMSetPlainText(ENRMPlatformTextView *textView, NSString *text)
112
+ {
113
+ #if !TARGET_OS_OSX
114
+ textView.text = text;
115
+ #else
116
+ [textView setString:text];
117
+ #endif
118
+ }
119
+
120
+ /// Cross-platform attributed text read: NSTextView exposes content via textStorage;
121
+ /// UITextView exposes it via attributedText.
122
+ static inline NSAttributedString *ENRMGetAttributedText(ENRMPlatformTextView *textView)
123
+ {
124
+ #if !TARGET_OS_OSX
125
+ return textView.attributedText;
126
+ #else
127
+ return textView.textStorage;
128
+ #endif
129
+ }
130
+
131
+ /// Cross-platform attributed text write: NSTextView uses textStorage setAttributedString:;
132
+ /// UITextView uses the attributedText property setter.
133
+ static inline void ENRMSetAttributedText(ENRMPlatformTextView *textView, NSAttributedString *text)
134
+ {
135
+ #if !TARGET_OS_OSX
136
+ textView.attributedText = text;
137
+ #else
138
+ [textView.textStorage setAttributedString:text];
139
+ #endif
140
+ }
141
+
142
+ /// Cross-platform text replacement at a given range.
143
+ /// iOS uses UITextInput protocol methods; macOS uses NSTextView's insertText:replacementRange:.
144
+ static inline void ENRMReplaceTextInRange(ENRMPlatformTextView *textView, NSString *text, NSRange range)
145
+ {
146
+ #if !TARGET_OS_OSX
147
+ UITextPosition *start = [textView positionFromPosition:textView.beginningOfDocument offset:(NSInteger)range.location];
148
+ UITextPosition *end = [textView positionFromPosition:textView.beginningOfDocument
149
+ offset:(NSInteger)NSMaxRange(range)];
150
+ [textView replaceRange:[textView textRangeFromPosition:start toPosition:end] withText:text];
151
+ #else
152
+ [textView insertText:text replacementRange:range];
153
+ #endif
154
+ }
155
+
156
+ /// Cross-platform content size update after measurement.
157
+ /// iOS UITextView has a settable contentSize; macOS NSTextView does not.
158
+ static inline void ENRMSetContentSize(ENRMPlatformTextView *textView, CGSize size)
159
+ {
160
+ #if !TARGET_OS_OSX
161
+ textView.contentSize = size;
162
+ #endif
163
+ }
164
+
165
+ /// Returns YES when the user has asked the system to minimise motion.
166
+ /// iOS: UIAccessibilityIsReduceMotionEnabled.
167
+ /// macOS: NSWorkspace.shared.accessibilityDisplayShouldReduceMotion.
168
+ /// Always NO on platforms where the API is unavailable.
169
+ static inline BOOL ENRMShouldReduceMotion(void)
170
+ {
171
+ #if !TARGET_OS_OSX
172
+ return UIAccessibilityIsReduceMotionEnabled();
173
+ #else
174
+ if (@available(macOS 10.12, *)) {
175
+ return NSWorkspace.sharedWorkspace.accessibilityDisplayShouldReduceMotion;
176
+ }
177
+ return NO;
178
+ #endif
179
+ }
180
+
181
+ /// Sets default typing attributes on the text view.
182
+ /// On macOS, RCTUITextView overrides setTypingAttributes: to use defaultTextAttributes,
183
+ /// so we must set that property as well.
184
+ static inline void ENRMSetDefaultTypingAttributes(ENRMPlatformTextView *textView, NSDictionary *attrs)
185
+ {
186
+ #if TARGET_OS_OSX
187
+ textView.defaultTextAttributes = attrs;
188
+ #endif
189
+ textView.typingAttributes = attrs;
190
+ }
191
+
192
+ /// Applies shared configuration to a text view used for markdown input editing.
193
+ /// Handles platform differences: scroll indicators, text container insets,
194
+ /// drawsBackground (macOS). Sets editable=YES, scrollEnabled=YES.
195
+ static inline void ENRMConfigureMarkdownTextInputTextView(ENRMPlatformTextView *textView)
196
+ {
197
+ textView.font = [UIFont systemFontOfSize:16.0];
198
+ textView.backgroundColor = [RCTUIColor clearColor];
199
+ textView.editable = YES;
200
+ #if !TARGET_OS_OSX
201
+ textView.scrollEnabled = YES;
202
+ textView.showsVerticalScrollIndicator = NO;
203
+ textView.showsHorizontalScrollIndicator = NO;
204
+ textView.textContainerInset = UIEdgeInsetsZero;
205
+ #else
206
+ textView.textContainerInsets = UIEdgeInsetsZero;
207
+ textView.drawsBackground = NO;
208
+ #endif
209
+ textView.textContainer.lineFragmentPadding = 0;
210
+ }
211
+
212
+ /// Cross-platform cursor color: iOS uses tintColor; macOS uses insertionPointColor.
213
+ static inline void ENRMSetCursorColor(ENRMPlatformTextView *textView, RCTUIColor *color)
214
+ {
215
+ #if !TARGET_OS_OSX
216
+ textView.tintColor = color;
217
+ #else
218
+ textView.insertionPointColor = color;
219
+ #endif
220
+ }
221
+
222
+ /// Cross-platform selection color: iOS uses tintColor (also affects the caret
223
+ /// and selection handles); macOS sets the selection background via
224
+ /// `selectedTextAttributes`. Pass `nil` to restore the system default.
225
+ static inline void ENRMSetSelectionColor(ENRMPlatformTextView *textView, RCTUIColor *color)
226
+ {
227
+ #if !TARGET_OS_OSX
228
+ textView.tintColor = color;
229
+ #else
230
+ RCTUIColor *resolved = color ?: [NSColor selectedTextBackgroundColor];
231
+ textView.selectedTextAttributes = @{NSBackgroundColorAttributeName : resolved};
232
+ #endif
233
+ }
234
+
235
+ /// Cross-platform focus: iOS uses becomeFirstResponder;
236
+ /// macOS uses makeFirstResponder: on the window.
237
+ static inline void ENRMFocusTextView(ENRMPlatformTextView *textView)
238
+ {
239
+ #if !TARGET_OS_OSX
240
+ [textView becomeFirstResponder];
241
+ #else
242
+ [textView.window makeFirstResponder:textView];
243
+ #endif
244
+ }
245
+
246
+ /// Cross-platform blur: iOS uses resignFirstResponder;
247
+ /// macOS clears first responder via the window.
248
+ static inline void ENRMBlurTextView(ENRMPlatformTextView *textView)
249
+ {
250
+ #if !TARGET_OS_OSX
251
+ [textView resignFirstResponder];
252
+ #else
253
+ [textView.window makeFirstResponder:nil];
254
+ #endif
255
+ }
256
+
257
+ /// Applies shared configuration to a text view used for markdown rendering.
258
+ /// Handles platform differences: scroll indicators, text container insets,
259
+ /// drawsBackground (macOS), accessibilityElementsHidden (iOS).
260
+ static inline void ENRMConfigureMarkdownTextView(ENRMPlatformTextView *textView)
261
+ {
262
+ textView.font = [UIFont systemFontOfSize:16.0];
263
+ textView.backgroundColor = [RCTUIColor clearColor];
264
+ textView.textColor = [RCTUIColor blackColor];
265
+ textView.editable = NO;
266
+ textView.scrollEnabled = NO;
267
+ #if !TARGET_OS_OSX
268
+ textView.showsVerticalScrollIndicator = NO;
269
+ textView.showsHorizontalScrollIndicator = NO;
270
+ textView.textContainerInset = UIEdgeInsetsZero;
271
+ #else
272
+ textView.textContainerInsets = UIEdgeInsetsZero;
273
+ textView.drawsBackground = NO;
274
+ #endif
275
+ textView.textContainer.lineFragmentPadding = 0;
276
+ textView.linkTextAttributes = @{};
277
+ textView.selectable = YES;
278
+ #if !TARGET_OS_OSX
279
+ textView.accessibilityElementsHidden = YES;
280
+ #endif
281
+ }
282
+
283
+ /// Result of a text layout measurement pass.
284
+ typedef struct {
285
+ CGRect usedRect;
286
+ CGRect extraLineFragmentRect;
287
+ } ENRMTextLayoutResult;
288
+
289
+ /// Measures text layout in a text view for a given width.
290
+ /// On macOS, temporarily disables widthTracksTextView so the container width
291
+ /// can be set directly without being overridden by the view's frame.
292
+ static inline ENRMTextLayoutResult ENRMMeasureTextLayout(ENRMPlatformTextView *textView, CGFloat maxWidth)
293
+ {
294
+ #if TARGET_OS_OSX
295
+ textView.textContainer.widthTracksTextView = NO;
296
+ #endif
297
+ textView.textContainer.size = CGSizeMake(maxWidth, CGFLOAT_MAX);
298
+ [textView.layoutManager ensureLayoutForTextContainer:textView.textContainer];
299
+ ENRMTextLayoutResult result;
300
+ result.usedRect = [textView.layoutManager usedRectForTextContainer:textView.textContainer];
301
+ result.extraLineFragmentRect = textView.layoutManager.extraLineFragmentRect;
302
+ #if TARGET_OS_OSX
303
+ textView.textContainer.widthTracksTextView = YES;
304
+ #endif
305
+ return result;
306
+ }
307
+
308
+ /// Cross-platform display refresh: UIView requires layoutIfNeeded before setNeedsDisplay
309
+ /// to flush pending layout before the redraw; NSView takes a BOOL argument.
310
+ /// Implemented as a macro to avoid Objective-C++ implicit pointer conversion issues in .mm files.
311
+ #if !TARGET_OS_OSX
312
+ #define ENRMSetNeedsDisplay(view) \
313
+ do { \
314
+ [(view) layoutIfNeeded]; \
315
+ [(view) setNeedsDisplay]; \
316
+ } while (0)
317
+ #else
318
+ #define ENRMSetNeedsDisplay(view) [(view) setNeedsDisplay:YES]
319
+ #endif
320
+
321
+ /// Invalidates the text container, re-lays out any existing content, and
322
+ /// triggers a redraw. On iOS also resets contentOffset to zero.
323
+ /// Does NOT touch the text view's frame — callers that need to reposition
324
+ /// the view should set the frame themselves before calling this.
325
+ static inline void ENRMRefreshTextViewLayout(ENRMPlatformTextView *textView)
326
+ {
327
+ #if !TARGET_OS_OSX
328
+ textView.contentOffset = CGPointZero;
329
+ #endif
330
+ textView.textContainer.size = CGSizeMake(textView.bounds.size.width, CGFLOAT_MAX);
331
+ NSUInteger textLength = ENRMGetAttributedText(textView).length;
332
+ if (textLength > 0) {
333
+ [textView.layoutManager invalidateLayoutForCharacterRange:NSMakeRange(0, textLength) actualCharacterRange:NULL];
334
+ [textView.layoutManager ensureLayoutForTextContainer:textView.textContainer];
335
+ }
336
+ ENRMSetNeedsDisplay(textView);
337
+ }
338
+
339
+ /// Refreshes a text view's layout and display after it is attached to a window.
340
+ /// Sets the frame and text container to the given bounds, invalidates layout for
341
+ /// any existing content, then triggers a redraw.
342
+ static inline void ENRMRefreshTextViewAfterWindowAttach(ENRMPlatformTextView *textView, CGRect bounds)
343
+ {
344
+ textView.frame = bounds;
345
+ ENRMRefreshTextViewLayout(textView);
346
+ }
347
+
348
+ /// Cross-platform text deselection: UITextView uses selectedTextRange (nullable);
349
+ /// NSTextView uses selectedRange (length-based).
350
+ static inline void ENRMClearSelection(ENRMPlatformTextView *textView)
351
+ {
352
+ #if !TARGET_OS_OSX
353
+ if (textView.selectedTextRange != nil) {
354
+ textView.selectedTextRange = nil;
355
+ }
356
+ #else
357
+ if (textView.selectedRange.length > 0) {
358
+ textView.selectedRange = NSMakeRange(0, 0);
359
+ }
360
+ #endif
361
+ }
362
+
363
+ // ── Placeholder label abstraction ──────────────────────────────────────────────
364
+
365
+ #if !TARGET_OS_OSX
366
+ typedef UILabel ENRMPlaceholderLabel;
367
+ #else
368
+ typedef NSTextField ENRMPlaceholderLabel;
369
+ #endif
370
+
371
+ /// Creates a placeholder label configured for use inside an ENRMPlatformTextView.
372
+ /// On iOS: UILabel with multiline, placeholderTextColor, auto-layout pinned to
373
+ /// textContainerInset and lineFragmentPadding.
374
+ /// On macOS: borderless, non-editable NSTextField pinned to the text view origin.
375
+ static inline ENRMPlaceholderLabel *ENRMCreatePlaceholderLabel(ENRMPlatformTextView *textView, UIFont *font)
376
+ {
377
+ #if !TARGET_OS_OSX
378
+ UILabel *label = [[UILabel alloc] init];
379
+ label.numberOfLines = 0;
380
+ label.textColor = [UIColor placeholderTextColor];
381
+ label.font = font;
382
+ label.translatesAutoresizingMaskIntoConstraints = NO;
383
+ [textView addSubview:label];
384
+ [NSLayoutConstraint activateConstraints:@[
385
+ [label.topAnchor constraintEqualToAnchor:textView.topAnchor constant:textView.textContainerInset.top],
386
+ [label.leadingAnchor constraintEqualToAnchor:textView.leadingAnchor
387
+ constant:textView.textContainer.lineFragmentPadding],
388
+ [label.trailingAnchor constraintEqualToAnchor:textView.trailingAnchor
389
+ constant:-textView.textContainer.lineFragmentPadding],
390
+ ]];
391
+ return label;
392
+ #else
393
+ NSTextField *label = [[NSTextField alloc] initWithFrame:CGRectZero];
394
+ label.bordered = NO;
395
+ label.editable = NO;
396
+ label.selectable = NO;
397
+ label.drawsBackground = NO;
398
+ label.textColor = [NSColor placeholderTextColor];
399
+ label.font = font;
400
+ label.translatesAutoresizingMaskIntoConstraints = NO;
401
+ [textView addSubview:label];
402
+ [NSLayoutConstraint activateConstraints:@[
403
+ [label.topAnchor constraintEqualToAnchor:textView.topAnchor],
404
+ [label.leadingAnchor constraintEqualToAnchor:textView.leadingAnchor],
405
+ ]];
406
+ return label;
407
+ #endif
408
+ }
409
+
410
+ /// Cross-platform placeholder text setter.
411
+ static inline void ENRMSetPlaceholderText(ENRMPlaceholderLabel *label, NSString *text)
412
+ {
413
+ #if !TARGET_OS_OSX
414
+ label.text = text;
415
+ #else
416
+ label.stringValue = text;
417
+ #endif
418
+ }
@@ -0,0 +1,60 @@
1
+ #import "ContextMenuUtils.h"
2
+ #import "ENRMMenuAction.h"
3
+ #import "EditMenuUtils.h"
4
+ #import "PasteboardUtils.h"
5
+ #import "StyleConfig.h"
6
+ #include <TargetConditionals.h>
7
+
8
+ #if TARGET_OS_OSX
9
+
10
+ NSMenu *_Nullable buildEditMenuForSelection(NSAttributedString *attributedText, NSRange range,
11
+ NSString *_Nullable cachedMarkdown, StyleConfig *styleConfig,
12
+ NSArray *suggestedActions, NSArray<NSMenuItem *> *_Nullable customItems,
13
+ ENRMSelectionMenuConfig selectionMenuConfig)
14
+ {
15
+ NSMenu *menu = ([suggestedActions.firstObject isKindOfClass:[NSMenu class]]) ? (NSMenu *)suggestedActions.firstObject
16
+ : [[NSMenu alloc] initWithTitle:@""];
17
+
18
+ if (range.length == 0) {
19
+ return menu;
20
+ }
21
+
22
+ NSAttributedString *selectedText = [attributedText attributedSubstringFromRange:range];
23
+ NSString *markdown = markdownForRange(attributedText, range, cachedMarkdown);
24
+ NSArray<NSString *> *imageURLs = imageURLsInRange(attributedText, range);
25
+
26
+ // Replace the system Copy item with our enhanced version (copies RTF/HTML/Markdown).
27
+ // This mirrors the iOS behaviour where we replace the standard-edit Copy action.
28
+ NSMenuItem *enhancedCopy =
29
+ ENRMCreateMenuItem(@"Copy", ^{ copyAttributedStringToPasteboard(selectedText, markdown, styleConfig); });
30
+ NSInteger systemCopyIndex = [menu indexOfItemWithTarget:nil andAction:@selector(copy:)];
31
+ if (systemCopyIndex != NSNotFound) {
32
+ [menu removeItemAtIndex:systemCopyIndex];
33
+ [menu insertItem:enhancedCopy atIndex:systemCopyIndex];
34
+ } else {
35
+ if (menu.numberOfItems > 0) {
36
+ [menu addItem:[NSMenuItem separatorItem]];
37
+ }
38
+ [menu addItem:enhancedCopy];
39
+ }
40
+
41
+ if (selectionMenuConfig.copyAsMarkdown && markdown.length > 0) {
42
+ [menu addItem:ENRMCreateMenuItem(@"Copy as Markdown", ^{ copyStringToPasteboard(markdown); })];
43
+ }
44
+
45
+ if (selectionMenuConfig.copyImageURL && imageURLs.count > 0) {
46
+ NSString *title = (imageURLs.count == 1)
47
+ ? @"Copy Image URL"
48
+ : [NSString stringWithFormat:@"Copy %lu Image URLs", (unsigned long)imageURLs.count];
49
+ [menu addItem:ENRMCreateMenuItem(title, ^{
50
+ NSString *urlsToCopy = [imageURLs componentsJoinedByString:@"\n"];
51
+ copyStringToPasteboard(urlsToCopy);
52
+ })];
53
+ }
54
+
55
+ ENRMPrependMenuItems(menu, customItems);
56
+
57
+ return menu;
58
+ }
59
+
60
+ #endif
@@ -0,0 +1,35 @@
1
+ #pragma once
2
+ #import "ENRMUIKit.h"
3
+ #import <Foundation/Foundation.h>
4
+
5
+ @class StyleConfig;
6
+
7
+ NS_ASSUME_NONNULL_BEGIN
8
+
9
+ typedef struct {
10
+ BOOL copyAsMarkdown;
11
+ BOOL copyImageURL;
12
+ } ENRMSelectionMenuConfig;
13
+
14
+ #ifdef __cplusplus
15
+ extern "C" {
16
+ #endif
17
+
18
+ #if !TARGET_OS_OSX
19
+ // TODO: Remove API_AVAILABLE(ios(16.0)) guard when the minimum iOS deployment target in RN is bumped to 16.
20
+ UIMenu *buildEditMenuForSelection(NSAttributedString *attributedText, NSRange range, NSString *_Nullable cachedMarkdown,
21
+ StyleConfig *styleConfig, NSArray<UIMenuElement *> *suggestedActions,
22
+ NSArray<UIAction *> *_Nullable customActions,
23
+ ENRMSelectionMenuConfig selectionMenuConfig) API_AVAILABLE(ios(16.0));
24
+ #else
25
+ NSMenu *_Nullable buildEditMenuForSelection(NSAttributedString *attributedText, NSRange range,
26
+ NSString *_Nullable cachedMarkdown, StyleConfig *styleConfig,
27
+ NSArray *suggestedActions, NSArray<NSMenuItem *> *_Nullable customItems,
28
+ ENRMSelectionMenuConfig selectionMenuConfig);
29
+ #endif
30
+
31
+ #ifdef __cplusplus
32
+ }
33
+ #endif
34
+
35
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,119 @@
1
+ #import "EditMenuUtils.h"
2
+ #import "PasteboardUtils.h"
3
+ #import "StyleConfig.h"
4
+ #include <TargetConditionals.h>
5
+
6
+ #if !TARGET_OS_OSX
7
+
8
+ static NSString *const kMenuIdentifierStandardEdit = @"com.apple.menu.standard-edit";
9
+ static NSString *const kActionIdentifierCopy = @"com.swmansion.enriched.markdown.copy";
10
+ static NSString *const kActionIdentifierCopyMarkdown = @"com.swmansion.enriched.markdown.copyMarkdown";
11
+ static NSString *const kActionIdentifierCopyImageURL = @"com.swmansion.enriched.markdown.copyImageURL";
12
+
13
+ static UIAction *createCopyAction(NSAttributedString *selectedText, NSString *markdown, StyleConfig *styleConfig)
14
+ {
15
+ return [UIAction actionWithTitle:@"Copy"
16
+ image:[RCTUIImage systemImageNamed:@"doc.on.doc"]
17
+ identifier:kActionIdentifierCopy
18
+ handler:^(__kindof UIAction *action) {
19
+ copyAttributedStringToPasteboard(selectedText, markdown, styleConfig);
20
+ }];
21
+ }
22
+
23
+ static UIAction *_Nullable createCopyMarkdownAction(NSString *markdown)
24
+ {
25
+ if (markdown.length == 0)
26
+ return nil;
27
+
28
+ return [UIAction actionWithTitle:@"Copy as Markdown"
29
+ image:[RCTUIImage systemImageNamed:@"doc.text"]
30
+ identifier:kActionIdentifierCopyMarkdown
31
+ handler:^(__kindof UIAction *action) { copyStringToPasteboard(markdown); }];
32
+ }
33
+
34
+ static UIAction *_Nullable createCopyImageURLAction(NSArray<NSString *> *imageURLs)
35
+ {
36
+ if (imageURLs.count == 0)
37
+ return nil;
38
+
39
+ NSString *urlsToCopy = [imageURLs componentsJoinedByString:@"\n"];
40
+ NSString *title = (imageURLs.count == 1)
41
+ ? @"Copy Image URL"
42
+ : [NSString stringWithFormat:@"Copy %lu Image URLs", (unsigned long)imageURLs.count];
43
+
44
+ return [UIAction actionWithTitle:title
45
+ image:[RCTUIImage systemImageNamed:@"link"]
46
+ identifier:kActionIdentifierCopyImageURL
47
+ handler:^(__kindof UIAction *action) { copyStringToPasteboard(urlsToCopy); }];
48
+ }
49
+
50
+ static UIMenu *createEnhancedStandardEditMenu(UIMenu *originalMenu, UIAction *copyAction)
51
+ {
52
+ return [UIMenu menuWithTitle:originalMenu.title
53
+ image:originalMenu.image
54
+ identifier:originalMenu.identifier
55
+ options:originalMenu.options
56
+ children:@[ copyAction ]];
57
+ }
58
+
59
+ static void addOptionalAction(NSMutableArray<UIMenuElement *> *array, UIAction *_Nullable action)
60
+ {
61
+ if (action) {
62
+ [array addObject:action];
63
+ }
64
+ }
65
+
66
+ static void insertOptionalAction(NSMutableArray<UIMenuElement *> *array, UIAction *_Nullable action, NSUInteger index)
67
+ {
68
+ if (action) {
69
+ [array insertObject:action atIndex:index];
70
+ }
71
+ }
72
+
73
+ // TODO: Remove API_AVAILABLE(ios(16.0)) guard when the minimum iOS deployment target in RN is bumped to 16.
74
+ UIMenu *buildEditMenuForSelection(NSAttributedString *attributedText, NSRange range, NSString *_Nullable cachedMarkdown,
75
+ StyleConfig *styleConfig, NSArray<UIMenuElement *> *suggestedActions,
76
+ NSArray<UIAction *> *_Nullable customActions,
77
+ ENRMSelectionMenuConfig selectionMenuConfig) API_AVAILABLE(ios(16.0))
78
+ {
79
+ NSAttributedString *selectedText = [attributedText attributedSubstringFromRange:range];
80
+ NSString *markdown = markdownForRange(attributedText, range, cachedMarkdown);
81
+ NSArray<NSString *> *imageURLs = imageURLsInRange(attributedText, range);
82
+
83
+ UIAction *copyAction = createCopyAction(selectedText, markdown, styleConfig);
84
+ UIAction *copyMarkdownAction = selectionMenuConfig.copyAsMarkdown ? createCopyMarkdownAction(markdown) : nil;
85
+ UIAction *copyImageURLAction = selectionMenuConfig.copyImageURL ? createCopyImageURLAction(imageURLs) : nil;
86
+
87
+ NSMutableArray<UIMenuElement *> *result = [NSMutableArray array];
88
+ BOOL foundStandardEditMenu = NO;
89
+
90
+ for (UIMenuElement *element in suggestedActions) {
91
+ if ([element isKindOfClass:[UIMenu class]]) {
92
+ UIMenu *menu = (UIMenu *)element;
93
+
94
+ if ([menu.identifier isEqualToString:kMenuIdentifierStandardEdit]) {
95
+ // Replace standard Copy with our enhanced version
96
+ [result addObject:createEnhancedStandardEditMenu(menu, copyAction)];
97
+ addOptionalAction(result, copyMarkdownAction);
98
+ addOptionalAction(result, copyImageURLAction);
99
+ foundStandardEditMenu = YES;
100
+ continue;
101
+ }
102
+ }
103
+ [result addObject:element];
104
+ }
105
+
106
+ if (!foundStandardEditMenu) {
107
+ [result insertObject:copyAction atIndex:0];
108
+ insertOptionalAction(result, copyMarkdownAction, 1);
109
+ addOptionalAction(result, copyImageURLAction);
110
+ }
111
+
112
+ if (customActions.count > 0) {
113
+ return [UIMenu menuWithChildren:[customActions arrayByAddingObjectsFromArray:result]];
114
+ }
115
+
116
+ return [UIMenu menuWithChildren:result];
117
+ }
118
+
119
+ #endif
@@ -0,0 +1,10 @@
1
+ #import "ENRMUIKit.h"
2
+
3
+ @interface FontScaleObserver : NSObject
4
+
5
+ @property (nonatomic, assign) BOOL allowFontScaling;
6
+ @property (nonatomic, readonly) CGFloat effectiveFontScale;
7
+
8
+ @property (nonatomic, copy, nullable) void (^onChange)(void);
9
+
10
+ @end
@@ -0,0 +1,55 @@
1
+ #import "FontScaleObserver.h"
2
+ #import <React/RCTUtils.h>
3
+ #include <TargetConditionals.h>
4
+
5
+ @implementation FontScaleObserver {
6
+ CGFloat _currentFontScale;
7
+ }
8
+
9
+ - (instancetype)init
10
+ {
11
+ if (self = [super init]) {
12
+ _allowFontScaling = YES;
13
+ _currentFontScale = RCTFontSizeMultiplier();
14
+
15
+ #if !TARGET_OS_OSX
16
+ [[NSNotificationCenter defaultCenter] addObserver:self
17
+ selector:@selector(contentSizeCategoryDidChange:)
18
+ name:UIContentSizeCategoryDidChangeNotification
19
+ object:nil];
20
+ #endif
21
+ // TODO: Observe macOS system font size changes. UIContentSizeCategoryDidChangeNotification
22
+ // is iOS-only; macOS has no direct equivalent. Possible approaches: KVO on
23
+ // NSApplication.effectiveAppearance or polling NSFont.systemFontSize.
24
+ }
25
+ return self;
26
+ }
27
+
28
+ - (void)dealloc
29
+ {
30
+ #if !TARGET_OS_OSX
31
+ [[NSNotificationCenter defaultCenter] removeObserver:self name:UIContentSizeCategoryDidChangeNotification object:nil];
32
+ #endif
33
+ }
34
+
35
+ - (CGFloat)effectiveFontScale
36
+ {
37
+ return _allowFontScaling ? _currentFontScale : 1.0;
38
+ }
39
+
40
+ - (void)contentSizeCategoryDidChange:(NSNotification *)notification
41
+ {
42
+ if (!_allowFontScaling) {
43
+ return;
44
+ }
45
+
46
+ CGFloat newFontScale = RCTFontSizeMultiplier();
47
+ if (_currentFontScale != newFontScale) {
48
+ _currentFontScale = newFontScale;
49
+ if (self.onChange) {
50
+ self.onChange();
51
+ }
52
+ }
53
+ }
54
+
55
+ @end