@mathers101/react-native-render-rich-text 0.0.0-stage → 0.1.9

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 (358) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +140 -3
  3. package/ReactNativeRenderRichText.podspec +23 -0
  4. package/android/build.gradle +86 -0
  5. package/android/consumer-rules.pro +3 -0
  6. package/android/src/main/AndroidManifest.xml +2 -0
  7. package/android/src/main/cpp/jni-adapter.cpp +191 -0
  8. package/android/src/main/java/com/renderrichtext/EnrichedTiptapText.kt +673 -0
  9. package/android/src/main/java/com/renderrichtext/EnrichedTiptapTextLayoutManager.kt +24 -0
  10. package/android/src/main/java/com/renderrichtext/EnrichedTiptapTextManager.kt +405 -0
  11. package/android/src/main/java/com/renderrichtext/EnrichedTiptapTextPackage.kt +13 -0
  12. package/android/src/main/java/com/renderrichtext/MeasurementStore.kt +644 -0
  13. package/android/src/main/java/com/renderrichtext/accessibility/AccessibilityLabels.kt +17 -0
  14. package/android/src/main/java/com/renderrichtext/accessibility/AccessibleTiptapTextView.kt +112 -0
  15. package/android/src/main/java/com/renderrichtext/accessibility/TiptapAccessibilityHelper.kt +576 -0
  16. package/android/src/main/java/com/renderrichtext/events/CodeBlockPressEvent.kt +24 -0
  17. package/android/src/main/java/com/renderrichtext/events/ContextMenuItemPressEvent.kt +28 -0
  18. package/android/src/main/java/com/renderrichtext/events/CopyPressEvent.kt +24 -0
  19. package/android/src/main/java/com/renderrichtext/events/FactoidPressEvent.kt +23 -0
  20. package/android/src/main/java/com/renderrichtext/events/ImagePressEvent.kt +25 -0
  21. package/android/src/main/java/com/renderrichtext/events/LatexErrorEvent.kt +29 -0
  22. package/android/src/main/java/com/renderrichtext/events/LinkLongPressEvent.kt +23 -0
  23. package/android/src/main/java/com/renderrichtext/events/LinkPressEvent.kt +23 -0
  24. package/android/src/main/java/com/renderrichtext/events/MentionLongPressEvent.kt +25 -0
  25. package/android/src/main/java/com/renderrichtext/events/MentionPressEvent.kt +25 -0
  26. package/android/src/main/java/com/renderrichtext/events/TaskListItemPressEvent.kt +26 -0
  27. package/android/src/main/java/com/renderrichtext/math/LatexErrorReporter.kt +9 -0
  28. package/android/src/main/java/com/renderrichtext/parser/Parser.kt +59 -0
  29. package/android/src/main/java/com/renderrichtext/parser/TextLinkMatching.kt +35 -0
  30. package/android/src/main/java/com/renderrichtext/parser/TiptapASTNode.kt +69 -0
  31. package/android/src/main/java/com/renderrichtext/renderer/BaselineShiftRenderer.kt +45 -0
  32. package/android/src/main/java/com/renderrichtext/renderer/BlankLineRenderer.kt +39 -0
  33. package/android/src/main/java/com/renderrichtext/renderer/BlockStyleContext.kt +181 -0
  34. package/android/src/main/java/com/renderrichtext/renderer/BlockquoteRenderer.kt +243 -0
  35. package/android/src/main/java/com/renderrichtext/renderer/BlockquoteTextRenderer.kt +56 -0
  36. package/android/src/main/java/com/renderrichtext/renderer/CodeBlockRenderer.kt +135 -0
  37. package/android/src/main/java/com/renderrichtext/renderer/CodeRenderer.kt +37 -0
  38. package/android/src/main/java/com/renderrichtext/renderer/EmphasisRenderer.kt +28 -0
  39. package/android/src/main/java/com/renderrichtext/renderer/FactoidRenderer.kt +97 -0
  40. package/android/src/main/java/com/renderrichtext/renderer/HeadingRenderer.kt +81 -0
  41. package/android/src/main/java/com/renderrichtext/renderer/HighlightRenderer.kt +26 -0
  42. package/android/src/main/java/com/renderrichtext/renderer/LineBreakRenderer.kt +17 -0
  43. package/android/src/main/java/com/renderrichtext/renderer/LinkRenderer.kt +90 -0
  44. package/android/src/main/java/com/renderrichtext/renderer/ListContextManager.kt +109 -0
  45. package/android/src/main/java/com/renderrichtext/renderer/ListItemRenderer.kt +211 -0
  46. package/android/src/main/java/com/renderrichtext/renderer/ListRenderer.kt +133 -0
  47. package/android/src/main/java/com/renderrichtext/renderer/MentionRenderer.kt +85 -0
  48. package/android/src/main/java/com/renderrichtext/renderer/NodeRenderer.kt +207 -0
  49. package/android/src/main/java/com/renderrichtext/renderer/ParagraphRenderer.kt +91 -0
  50. package/android/src/main/java/com/renderrichtext/renderer/Renderer.kt +148 -0
  51. package/android/src/main/java/com/renderrichtext/renderer/SoftBreakRenderer.kt +17 -0
  52. package/android/src/main/java/com/renderrichtext/renderer/SpanStyleCache.kt +143 -0
  53. package/android/src/main/java/com/renderrichtext/renderer/StrikethroughRenderer.kt +28 -0
  54. package/android/src/main/java/com/renderrichtext/renderer/StrongRenderer.kt +28 -0
  55. package/android/src/main/java/com/renderrichtext/renderer/TextRenderer.kt +31 -0
  56. package/android/src/main/java/com/renderrichtext/renderer/ThematicBreakRenderer.kt +46 -0
  57. package/android/src/main/java/com/renderrichtext/renderer/UnderlineRenderer.kt +28 -0
  58. package/android/src/main/java/com/renderrichtext/spans/BaseListSpan.kt +164 -0
  59. package/android/src/main/java/com/renderrichtext/spans/BaselineShiftSpan.kt +27 -0
  60. package/android/src/main/java/com/renderrichtext/spans/BlockquoteSpan.kt +302 -0
  61. package/android/src/main/java/com/renderrichtext/spans/CodeBackgroundSpan.kt +205 -0
  62. package/android/src/main/java/com/renderrichtext/spans/CodeBlockSpan.kt +216 -0
  63. package/android/src/main/java/com/renderrichtext/spans/CodeSpan.kt +32 -0
  64. package/android/src/main/java/com/renderrichtext/spans/EmphasisSpan.kt +42 -0
  65. package/android/src/main/java/com/renderrichtext/spans/FactoidBackgroundSpan.kt +265 -0
  66. package/android/src/main/java/com/renderrichtext/spans/FactoidPaddingSpan.kt +258 -0
  67. package/android/src/main/java/com/renderrichtext/spans/FactoidSpan.kt +32 -0
  68. package/android/src/main/java/com/renderrichtext/spans/FadeInSpan.kt +29 -0
  69. package/android/src/main/java/com/renderrichtext/spans/HeadingSpan.kt +38 -0
  70. package/android/src/main/java/com/renderrichtext/spans/HighlightSpan.kt +80 -0
  71. package/android/src/main/java/com/renderrichtext/spans/ImageSpan.kt +481 -0
  72. package/android/src/main/java/com/renderrichtext/spans/InlineBackgroundGeometry.kt +42 -0
  73. package/android/src/main/java/com/renderrichtext/spans/LineHeightSpan.kt +39 -0
  74. package/android/src/main/java/com/renderrichtext/spans/LinkPillIconCache.kt +154 -0
  75. package/android/src/main/java/com/renderrichtext/spans/LinkPillSpan.kt +381 -0
  76. package/android/src/main/java/com/renderrichtext/spans/LinkSpan.kt +68 -0
  77. package/android/src/main/java/com/renderrichtext/spans/ListItemSpacingSpan.kt +33 -0
  78. package/android/src/main/java/com/renderrichtext/spans/ListMarkerAnchorSpan.kt +38 -0
  79. package/android/src/main/java/com/renderrichtext/spans/MarginBottomSpan.kt +76 -0
  80. package/android/src/main/java/com/renderrichtext/spans/MentionChipSpan.kt +132 -0
  81. package/android/src/main/java/com/renderrichtext/spans/MentionSpan.kt +46 -0
  82. package/android/src/main/java/com/renderrichtext/spans/OrderedListSpan.kt +127 -0
  83. package/android/src/main/java/com/renderrichtext/spans/SpoilerSpan.kt +33 -0
  84. package/android/src/main/java/com/renderrichtext/spans/StrikethroughSpan.kt +12 -0
  85. package/android/src/main/java/com/renderrichtext/spans/StrongSpan.kt +39 -0
  86. package/android/src/main/java/com/renderrichtext/spans/TaskListSpan.kt +143 -0
  87. package/android/src/main/java/com/renderrichtext/spans/TextSpan.kt +26 -0
  88. package/android/src/main/java/com/renderrichtext/spans/ThematicBreakSpan.kt +69 -0
  89. package/android/src/main/java/com/renderrichtext/spans/UnorderedListSpan.kt +96 -0
  90. package/android/src/main/java/com/renderrichtext/spoiler/SpoilerStubs.kt +46 -0
  91. package/android/src/main/java/com/renderrichtext/styles/BaseBlockStyle.kt +11 -0
  92. package/android/src/main/java/com/renderrichtext/styles/BlockquoteStyle.kt +83 -0
  93. package/android/src/main/java/com/renderrichtext/styles/CodeBlockStyle.kt +80 -0
  94. package/android/src/main/java/com/renderrichtext/styles/CodeStyle.kt +26 -0
  95. package/android/src/main/java/com/renderrichtext/styles/EmphasisStyle.kt +21 -0
  96. package/android/src/main/java/com/renderrichtext/styles/FactoidStyle.kt +21 -0
  97. package/android/src/main/java/com/renderrichtext/styles/HeadingStyle.kt +33 -0
  98. package/android/src/main/java/com/renderrichtext/styles/HighlightStyle.kt +19 -0
  99. package/android/src/main/java/com/renderrichtext/styles/ImageStyle.kt +29 -0
  100. package/android/src/main/java/com/renderrichtext/styles/InlineImageStyle.kt +17 -0
  101. package/android/src/main/java/com/renderrichtext/styles/InlineMathStyle.kt +17 -0
  102. package/android/src/main/java/com/renderrichtext/styles/LinkPillContent.kt +36 -0
  103. package/android/src/main/java/com/renderrichtext/styles/LinkPillStyle.kt +44 -0
  104. package/android/src/main/java/com/renderrichtext/styles/LinkStyle.kt +23 -0
  105. package/android/src/main/java/com/renderrichtext/styles/LinkVariantEntry.kt +34 -0
  106. package/android/src/main/java/com/renderrichtext/styles/ListStyle.kt +65 -0
  107. package/android/src/main/java/com/renderrichtext/styles/MathStyle.kt +29 -0
  108. package/android/src/main/java/com/renderrichtext/styles/MentionStyle.kt +19 -0
  109. package/android/src/main/java/com/renderrichtext/styles/ParagraphStyle.kt +33 -0
  110. package/android/src/main/java/com/renderrichtext/styles/SpoilerStyle.kt +27 -0
  111. package/android/src/main/java/com/renderrichtext/styles/StrikethroughStyle.kt +17 -0
  112. package/android/src/main/java/com/renderrichtext/styles/StrongStyle.kt +21 -0
  113. package/android/src/main/java/com/renderrichtext/styles/StyleConfig.kt +411 -0
  114. package/android/src/main/java/com/renderrichtext/styles/StyleParser.kt +92 -0
  115. package/android/src/main/java/com/renderrichtext/styles/SubscriptStyle.kt +16 -0
  116. package/android/src/main/java/com/renderrichtext/styles/SuperscriptStyle.kt +16 -0
  117. package/android/src/main/java/com/renderrichtext/styles/TableStyle.kt +75 -0
  118. package/android/src/main/java/com/renderrichtext/styles/TaskListStyle.kt +29 -0
  119. package/android/src/main/java/com/renderrichtext/styles/TextAlignment.kt +32 -0
  120. package/android/src/main/java/com/renderrichtext/styles/ThematicBreakStyle.kt +23 -0
  121. package/android/src/main/java/com/renderrichtext/styles/UnderlineStyle.kt +17 -0
  122. package/android/src/main/java/com/renderrichtext/styles/VideoStyle.kt +31 -0
  123. package/android/src/main/java/com/renderrichtext/utils/common/BorderStyleUtils.kt +86 -0
  124. package/android/src/main/java/com/renderrichtext/utils/common/BreakStrategyUtils.kt +32 -0
  125. package/android/src/main/java/com/renderrichtext/utils/common/CodeBlockHighlighter.kt +36 -0
  126. package/android/src/main/java/com/renderrichtext/utils/common/CodeBlockNode.kt +42 -0
  127. package/android/src/main/java/com/renderrichtext/utils/common/EllipsizeUtils.kt +27 -0
  128. package/android/src/main/java/com/renderrichtext/utils/common/EnrichedTiptapAncestorUtils.kt +10 -0
  129. package/android/src/main/java/com/renderrichtext/utils/common/FeatureFlags.kt +9 -0
  130. package/android/src/main/java/com/renderrichtext/utils/common/LinkRecognitionProps.kt +31 -0
  131. package/android/src/main/java/com/renderrichtext/utils/common/LinkRegexConfig.kt +56 -0
  132. package/android/src/main/java/com/renderrichtext/utils/common/MotionPreferences.kt +18 -0
  133. package/android/src/main/java/com/renderrichtext/utils/common/ReadableMapExtensions.kt +28 -0
  134. package/android/src/main/java/com/renderrichtext/utils/common/TiptapViewManagerUtils.kt +242 -0
  135. package/android/src/main/java/com/renderrichtext/utils/common/layout/RTLUtils.kt +6 -0
  136. package/android/src/main/java/com/renderrichtext/utils/common/serialization/TiptapASTSerializer.kt +368 -0
  137. package/android/src/main/java/com/renderrichtext/utils/text/ImageCache.kt +88 -0
  138. package/android/src/main/java/com/renderrichtext/utils/text/ImageDownloader.kt +203 -0
  139. package/android/src/main/java/com/renderrichtext/utils/text/LocalImageLoader.kt +167 -0
  140. package/android/src/main/java/com/renderrichtext/utils/text/TailFadeInAnimator.kt +84 -0
  141. package/android/src/main/java/com/renderrichtext/utils/text/conversion/HTMLGenerator.kt +1105 -0
  142. package/android/src/main/java/com/renderrichtext/utils/text/conversion/TiptapExtractor.kt +423 -0
  143. package/android/src/main/java/com/renderrichtext/utils/text/extensions/ParagraphUtils.kt +9 -0
  144. package/android/src/main/java/com/renderrichtext/utils/text/extensions/SpannableExtensions.kt +9 -0
  145. package/android/src/main/java/com/renderrichtext/utils/text/extensions/TextPaintExtensions.kt +76 -0
  146. package/android/src/main/java/com/renderrichtext/utils/text/interaction/CheckboxTouchHelper.kt +61 -0
  147. package/android/src/main/java/com/renderrichtext/utils/text/interaction/TaskListTapUtils.kt +286 -0
  148. package/android/src/main/java/com/renderrichtext/utils/text/span/ApplyLineHeight.kt +39 -0
  149. package/android/src/main/java/com/renderrichtext/utils/text/span/BlockSpacing.kt +142 -0
  150. package/android/src/main/java/com/renderrichtext/utils/text/span/SpanFlags.kt +43 -0
  151. package/android/src/main/java/com/renderrichtext/utils/text/span/WidthAwareSpans.kt +30 -0
  152. package/android/src/main/java/com/renderrichtext/utils/text/view/CodeBlockPressHost.kt +15 -0
  153. package/android/src/main/java/com/renderrichtext/utils/text/view/ImagePressHost.kt +19 -0
  154. package/android/src/main/java/com/renderrichtext/utils/text/view/LinkEvents.kt +88 -0
  155. package/android/src/main/java/com/renderrichtext/utils/text/view/LinkLongPressMovementMethod.kt +449 -0
  156. package/android/src/main/java/com/renderrichtext/utils/text/view/SelectionActionMode.kt +235 -0
  157. package/android/src/main/java/com/renderrichtext/utils/text/view/TextSelectionColors.kt +48 -0
  158. package/android/src/main/java/com/renderrichtext/utils/text/view/TextViewSetup.kt +119 -0
  159. package/android/src/main/java/com/renderrichtext/views/ContextMenuPopup.kt +217 -0
  160. package/android/src/main/java/com/renderrichtext/views/CopyGlyph.kt +101 -0
  161. package/android/src/main/java/com/renderrichtext/views/WrapGlyph.kt +40 -0
  162. package/android/src/main/jni/CMakeLists.txt +52 -0
  163. package/android/src/main/jni/react/renderer/components/RichTextSpec/ComponentDescriptors.h +30 -0
  164. package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextComponentDescriptor.h +29 -0
  165. package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextMeasurementManager.cpp +45 -0
  166. package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextMeasurementManager.h +21 -0
  167. package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextShadowNode.cpp +38 -0
  168. package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextShadowNode.h +53 -0
  169. package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextState.cpp +9 -0
  170. package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextState.h +24 -0
  171. package/android/src/main/jni/react/renderer/components/RichTextSpec/conversions.h +40 -0
  172. package/cpp/parser/TiptapASTNode.hpp +68 -0
  173. package/cpp/parser/TiptapParser.cpp +233 -0
  174. package/cpp/parser/TiptapParser.hpp +13 -0
  175. package/cpp/vendor/nlohmann/json.hpp +24765 -0
  176. package/ios/EnrichedTiptapText.h +27 -0
  177. package/ios/EnrichedTiptapText.mm +1222 -0
  178. package/ios/attachments/ENRMImageAttachment.h +51 -0
  179. package/ios/attachments/ENRMImageAttachment.m +398 -0
  180. package/ios/attachments/ENRMLinkPillAttachment.h +47 -0
  181. package/ios/attachments/ENRMLinkPillAttachment.m +324 -0
  182. package/ios/attachments/ENRMLinkPillIconCache.h +28 -0
  183. package/ios/attachments/ENRMLinkPillIconCache.m +181 -0
  184. package/ios/attachments/ENRMLinkPillText.h +27 -0
  185. package/ios/attachments/ENRMLinkPillText.m +118 -0
  186. package/ios/attachments/ENRMMathInlineAttachment.h +7 -0
  187. package/ios/attachments/ENRMMathInlineAttachment.m +4 -0
  188. package/ios/attachments/ThematicBreakAttachment.h +15 -0
  189. package/ios/attachments/ThematicBreakAttachment.m +33 -0
  190. package/ios/internals/ENRMViewFreeMeasurement.h +208 -0
  191. package/ios/internals/EnrichedTiptapTextComponentDescriptor.h +19 -0
  192. package/ios/internals/EnrichedTiptapTextShadowNode.h +43 -0
  193. package/ios/internals/EnrichedTiptapTextShadowNode.mm +69 -0
  194. package/ios/internals/EnrichedTiptapTextState.h +24 -0
  195. package/ios/internals/MeasurementCache.h +308 -0
  196. package/ios/internals/ShadowMeasurementUtils.h +145 -0
  197. package/ios/parser/ENRMTextLinkAttributes.h +7 -0
  198. package/ios/parser/ENRMTiptapParser.h +33 -0
  199. package/ios/parser/ENRMTiptapParser.mm +73 -0
  200. package/ios/parser/TiptapASTNode.h +57 -0
  201. package/ios/parser/TiptapASTNode.m +52 -0
  202. package/ios/parser/TiptapParserBridge.mm +179 -0
  203. package/ios/renderer/AttributedRenderer.h +23 -0
  204. package/ios/renderer/AttributedRenderer.m +229 -0
  205. package/ios/renderer/BaseRenderer.h +33 -0
  206. package/ios/renderer/BaseRenderer.m +46 -0
  207. package/ios/renderer/BaselineShiftTextAttributes.h +10 -0
  208. package/ios/renderer/BaselineShiftTextAttributes.m +26 -0
  209. package/ios/renderer/BlankLineRenderer.h +4 -0
  210. package/ios/renderer/BlankLineRenderer.m +51 -0
  211. package/ios/renderer/BlockquoteRenderer.h +6 -0
  212. package/ios/renderer/BlockquoteRenderer.m +258 -0
  213. package/ios/renderer/CodeBlockRenderer.h +9 -0
  214. package/ios/renderer/CodeBlockRenderer.m +99 -0
  215. package/ios/renderer/CodeRenderer.h +9 -0
  216. package/ios/renderer/CodeRenderer.m +69 -0
  217. package/ios/renderer/ENRMBlockquoteTextRenderer.h +25 -0
  218. package/ios/renderer/ENRMBlockquoteTextRenderer.m +48 -0
  219. package/ios/renderer/EmphasisRenderer.h +5 -0
  220. package/ios/renderer/EmphasisRenderer.m +100 -0
  221. package/ios/renderer/FactoidRenderer.h +9 -0
  222. package/ios/renderer/FactoidRenderer.m +130 -0
  223. package/ios/renderer/HeadingRenderer.h +6 -0
  224. package/ios/renderer/HeadingRenderer.m +103 -0
  225. package/ios/renderer/HighlightRenderer.h +7 -0
  226. package/ios/renderer/HighlightRenderer.m +33 -0
  227. package/ios/renderer/LinkRenderer.h +6 -0
  228. package/ios/renderer/LinkRenderer.m +158 -0
  229. package/ios/renderer/ListItemRenderer.h +24 -0
  230. package/ios/renderer/ListItemRenderer.m +283 -0
  231. package/ios/renderer/ListRenderer.h +13 -0
  232. package/ios/renderer/ListRenderer.m +126 -0
  233. package/ios/renderer/MentionRenderer.h +9 -0
  234. package/ios/renderer/MentionRenderer.m +96 -0
  235. package/ios/renderer/NodeRenderer.h +8 -0
  236. package/ios/renderer/ParagraphRenderer.h +6 -0
  237. package/ios/renderer/ParagraphRenderer.m +85 -0
  238. package/ios/renderer/RenderContext.h +145 -0
  239. package/ios/renderer/RenderContext.m +403 -0
  240. package/ios/renderer/RendererFactory.h +12 -0
  241. package/ios/renderer/RendererFactory.m +158 -0
  242. package/ios/renderer/StrikethroughRenderer.h +5 -0
  243. package/ios/renderer/StrikethroughRenderer.m +30 -0
  244. package/ios/renderer/StrongRenderer.h +5 -0
  245. package/ios/renderer/StrongRenderer.m +88 -0
  246. package/ios/renderer/TextRenderer.h +6 -0
  247. package/ios/renderer/TextRenderer.m +18 -0
  248. package/ios/renderer/ThematicBreakRenderer.h +4 -0
  249. package/ios/renderer/ThematicBreakRenderer.m +42 -0
  250. package/ios/renderer/UnderlineRenderer.h +4 -0
  251. package/ios/renderer/UnderlineRenderer.m +41 -0
  252. package/ios/styles/ENRMFontSlot.h +12 -0
  253. package/ios/styles/ENRMFontSlot.m +24 -0
  254. package/ios/styles/StyleConfig.h +488 -0
  255. package/ios/styles/StyleConfig.mm +2820 -0
  256. package/ios/utils/AccessibilityInfo.h +35 -0
  257. package/ios/utils/AccessibilityInfo.m +24 -0
  258. package/ios/utils/BlockquoteBorder.h +26 -0
  259. package/ios/utils/BlockquoteBorder.m +294 -0
  260. package/ios/utils/CodeBackground.h +19 -0
  261. package/ios/utils/CodeBackground.m +197 -0
  262. package/ios/utils/CodeBlockBackground.h +17 -0
  263. package/ios/utils/CodeBlockBackground.m +103 -0
  264. package/ios/utils/ContextMenuUtils.h +76 -0
  265. package/ios/utils/ContextMenuUtils.mm +75 -0
  266. package/ios/utils/ENRMAccessibilityLabels.h +40 -0
  267. package/ios/utils/ENRMAccessibilityLabels.m +5 -0
  268. package/ios/utils/ENRMAsyncRenderCoordinator.h +24 -0
  269. package/ios/utils/ENRMAsyncRenderCoordinator.m +37 -0
  270. package/ios/utils/ENRMAtomicSize.h +65 -0
  271. package/ios/utils/ENRMCodeBlockContent.h +37 -0
  272. package/ios/utils/ENRMCodeBlockContent.mm +89 -0
  273. package/ios/utils/ENRMFeatureFlags.h +25 -0
  274. package/ios/utils/ENRMImageDownloader.h +30 -0
  275. package/ios/utils/ENRMImageDownloader.m +168 -0
  276. package/ios/utils/ENRMLatexErrorCoordinator.h +27 -0
  277. package/ios/utils/ENRMLatexErrorCoordinator.mm +75 -0
  278. package/ios/utils/ENRMLatexErrorReporting.h +13 -0
  279. package/ios/utils/ENRMLinkContextMenus.h +93 -0
  280. package/ios/utils/ENRMLinkContextMenus.m +178 -0
  281. package/ios/utils/ENRMLinkRegexConfig.h +30 -0
  282. package/ios/utils/ENRMLinkRegexConfig.mm +104 -0
  283. package/ios/utils/ENRMLinkRegexProps.h +23 -0
  284. package/ios/utils/ENRMLocalImageLoader.h +35 -0
  285. package/ios/utils/ENRMLocalImageLoader.m +111 -0
  286. package/ios/utils/ENRMMenuAction.h +27 -0
  287. package/ios/utils/ENRMMenuAction.m +33 -0
  288. package/ios/utils/ENRMSpoilerOverlayManager.h +15 -0
  289. package/ios/utils/ENRMSpoilerOverlayManager.m +19 -0
  290. package/ios/utils/ENRMSpoilerTapUtils.h +6 -0
  291. package/ios/utils/ENRMSpoilerTapUtils.m +11 -0
  292. package/ios/utils/ENRMTailFadeInAnimator.h +16 -0
  293. package/ios/utils/ENRMTailFadeInAnimator.m +161 -0
  294. package/ios/utils/ENRMTextHitTest.h +23 -0
  295. package/ios/utils/ENRMTextHitTest.m +20 -0
  296. package/ios/utils/ENRMTextInteractionUtils.h +20 -0
  297. package/ios/utils/ENRMTextInteractionUtils.m +15 -0
  298. package/ios/utils/ENRMTextRenderer.h +38 -0
  299. package/ios/utils/ENRMTextRenderer.m +54 -0
  300. package/ios/utils/ENRMTextViewSetup.h +132 -0
  301. package/ios/utils/ENRMUIKit.h +429 -0
  302. package/ios/utils/EditMenuUtils.h +105 -0
  303. package/ios/utils/EditMenuUtils.m +143 -0
  304. package/ios/utils/FactoidBackground.h +20 -0
  305. package/ios/utils/FactoidBackground.m +161 -0
  306. package/ios/utils/FontScaleObserver.h +10 -0
  307. package/ios/utils/FontScaleObserver.m +55 -0
  308. package/ios/utils/FontUtils.h +31 -0
  309. package/ios/utils/FontUtils.m +63 -0
  310. package/ios/utils/HTMLGenerator.h +25 -0
  311. package/ios/utils/HTMLGenerator.m +1041 -0
  312. package/ios/utils/HeightUpdateUtils.h +25 -0
  313. package/ios/utils/ImageRequestHeaderUtils.h +35 -0
  314. package/ios/utils/LastElementUtils.h +97 -0
  315. package/ios/utils/LinkContextMenuUtils.h +55 -0
  316. package/ios/utils/LinkPillContentUtils.h +46 -0
  317. package/ios/utils/LinkTapUtils.h +56 -0
  318. package/ios/utils/LinkTapUtils.m +139 -0
  319. package/ios/utils/ListMarkerDrawer.h +15 -0
  320. package/ios/utils/ListMarkerDrawer.m +239 -0
  321. package/ios/utils/MentionBackground.h +26 -0
  322. package/ios/utils/MentionBackground.m +86 -0
  323. package/ios/utils/ParagraphStyleUtils.h +87 -0
  324. package/ios/utils/ParagraphStyleUtils.m +484 -0
  325. package/ios/utils/PasteboardUtils.h +48 -0
  326. package/ios/utils/PasteboardUtils.m +166 -0
  327. package/ios/utils/RTFExportUtils.h +24 -0
  328. package/ios/utils/RTFExportUtils.m +299 -0
  329. package/ios/utils/RuntimeKeys.h +44 -0
  330. package/ios/utils/RuntimeKeys.m +13 -0
  331. package/ios/utils/SelectionColorUtils.h +14 -0
  332. package/ios/utils/StylePropsUtils.h +1340 -0
  333. package/ios/utils/TaskListTapUtils.h +6 -0
  334. package/ios/utils/TaskListTapUtils.m +14 -0
  335. package/ios/utils/TextViewLayoutManager.h +14 -0
  336. package/ios/utils/TextViewLayoutManager.mm +198 -0
  337. package/ios/utils/TiptapAccessibilityElementBuilder.h +43 -0
  338. package/ios/utils/TiptapAccessibilityElementBuilder.m +432 -0
  339. package/ios/utils/TiptapExtractor.h +17 -0
  340. package/ios/utils/TiptapExtractor.m +367 -0
  341. package/ios/views/ENRMTiptapTextView.h +25 -0
  342. package/ios/views/ENRMTiptapTextView.m +247 -0
  343. package/package.json +70 -6
  344. package/react-native.config.js +10 -0
  345. package/src/EnrichedTiptapTextNativeComponent.ts +739 -0
  346. package/src/RichText.tsx +164 -0
  347. package/src/admonitionDefaults.ts +58 -0
  348. package/src/darkModeTextStyle.ts +99 -0
  349. package/src/headingDefaults.ts +21 -0
  350. package/src/index.tsx +4 -0
  351. package/src/linkVariantUtils.ts +120 -0
  352. package/src/normalizeTiptapStyle.ts +397 -0
  353. package/src/rn-globals.d.ts +1 -0
  354. package/src/styleUtils.ts +107 -0
  355. package/src/types/TiptapStyle.ts +532 -0
  356. package/src/types/TiptapStyleInternal.ts +299 -0
  357. package/src/types/linkPill.ts +9 -0
  358. package/src/utils/isDev.ts +4 -0
@@ -0,0 +1,405 @@
1
+ package com.renderrichtext
2
+
3
+ import android.content.Context
4
+ import com.facebook.react.bridge.ReadableArray
5
+ import com.facebook.react.bridge.ReadableMap
6
+ import com.facebook.react.module.annotations.ReactModule
7
+ import com.facebook.react.uimanager.ReactStylesDiffMap
8
+ import com.facebook.react.uimanager.SimpleViewManager
9
+ import com.facebook.react.uimanager.StateWrapper
10
+ import com.facebook.react.uimanager.ThemedReactContext
11
+ import com.facebook.react.uimanager.ViewManagerDelegate
12
+ import com.facebook.react.uimanager.annotations.ReactProp
13
+ import com.facebook.react.viewmanagers.EnrichedTiptapTextManagerDelegate
14
+ import com.facebook.react.viewmanagers.EnrichedTiptapTextManagerInterface
15
+ import com.facebook.yoga.YogaMeasureMode
16
+ import com.renderrichtext.spoiler.SpoilerOverlay
17
+ import com.renderrichtext.utils.common.applyReactBorderProps
18
+ import com.renderrichtext.utils.common.emitContextMenuItemPress
19
+ import com.renderrichtext.utils.common.emitFactoidPress
20
+ import com.renderrichtext.utils.common.emitMentionLongPress
21
+ import com.renderrichtext.utils.common.emitMentionPress
22
+ import com.renderrichtext.utils.common.emitLatexError
23
+ import com.renderrichtext.utils.common.emitLinkLongPress
24
+ import com.renderrichtext.utils.common.emitLinkPress
25
+ import com.renderrichtext.utils.common.emitTaskListItemPress
26
+ import com.renderrichtext.utils.common.tiptapEventTypeConstants
27
+ import com.renderrichtext.utils.common.parseAccessibilityLabels
28
+ import com.renderrichtext.utils.common.parseContextMenuItems
29
+ import com.renderrichtext.utils.common.parseImageRequestHeaders
30
+ import com.renderrichtext.utils.common.parseLinkPillContent
31
+ import com.renderrichtext.utils.common.parseLinkRecognition
32
+ import com.renderrichtext.utils.common.parseMd4cFlags
33
+ import com.renderrichtext.utils.common.parseSelectionMenuConfig
34
+ import com.renderrichtext.utils.text.interaction.TaskListTapUtils
35
+ import com.renderrichtext.utils.text.interaction.TaskListToggleUtils
36
+
37
+ @ReactModule(name = EnrichedTiptapTextManager.NAME)
38
+ class EnrichedTiptapTextManager :
39
+ SimpleViewManager<EnrichedTiptapText>(),
40
+ EnrichedTiptapTextManagerInterface<EnrichedTiptapText> {
41
+ private val mDelegate: ViewManagerDelegate<EnrichedTiptapText> = EnrichedTiptapTextManagerDelegate(this)
42
+
43
+ override fun getDelegate(): ViewManagerDelegate<EnrichedTiptapText>? = mDelegate
44
+
45
+ override fun getName(): String = NAME
46
+
47
+ override fun createViewInstance(reactContext: ThemedReactContext): EnrichedTiptapText {
48
+ val view = EnrichedTiptapText(reactContext)
49
+ view.onContextMenuItemPressCallback = { itemText, selectedText, selectionStart, selectionEnd ->
50
+ emitContextMenuItemPress(view, itemText, selectedText, selectionStart, selectionEnd)
51
+ }
52
+
53
+ view.setOnLinkPressCallback { url ->
54
+ emitLinkPress(view, url)
55
+ }
56
+
57
+ view.setOnFactoidPressCallback { factoidId ->
58
+ emitFactoidPress(view, factoidId)
59
+ }
60
+
61
+ view.setOnMentionPressCallback { mentionId, label ->
62
+ emitMentionPress(view, mentionId, label)
63
+ }
64
+
65
+ view.setOnMentionLongPressCallback { mentionId, label ->
66
+ emitMentionLongPress(view, mentionId, label)
67
+ }
68
+
69
+ view.setOnLinkLongPressCallback { url ->
70
+ emitLinkLongPress(view, url)
71
+ }
72
+
73
+ view.setOnTaskListItemPressCallback { taskIndex, checked, itemText ->
74
+ val newChecked = !checked
75
+
76
+ val styleConfig = view.tiptapStyle
77
+ val optimizedSuccess =
78
+ styleConfig != null && TaskListTapUtils.updateTaskListItemCheckedState(view, taskIndex, newChecked, styleConfig)
79
+
80
+ if (optimizedSuccess) {
81
+ emitTaskListItemPress(view, taskIndex, newChecked, itemText)
82
+ return@setOnTaskListItemPressCallback
83
+ }
84
+
85
+ val currentTiptap = view.currentTiptap
86
+ val updatedTiptap = TaskListToggleUtils.toggleAtIndex(currentTiptap, taskIndex, newChecked)
87
+ view.setTiptapContent(updatedTiptap)
88
+
89
+ emitTaskListItemPress(view, taskIndex, newChecked, itemText)
90
+ }
91
+
92
+ view.setOnLatexErrorCallback { source, message, displayMode ->
93
+ emitLatexError(view, source, message, displayMode)
94
+ }
95
+ return view
96
+ }
97
+
98
+ override fun onAfterUpdateTransaction(view: EnrichedTiptapText) {
99
+ super.onAfterUpdateTransaction(view)
100
+ view.commitProps()
101
+ }
102
+
103
+ // Replay containerStyle border props the delegate drops (see applyReactBorderProps).
104
+ override fun updateProperties(
105
+ view: EnrichedTiptapText,
106
+ props: ReactStylesDiffMap,
107
+ ) {
108
+ super.updateProperties(view, props)
109
+ applyReactBorderProps(view, props)
110
+ }
111
+
112
+ override fun updateState(
113
+ view: EnrichedTiptapText,
114
+ props: ReactStylesDiffMap?,
115
+ stateWrapper: StateWrapper?,
116
+ ): Any? {
117
+ view.stateWrapper = stateWrapper
118
+ return super.updateState(view, props, stateWrapper)
119
+ }
120
+
121
+ override fun onDropViewInstance(view: EnrichedTiptapText) {
122
+ super.onDropViewInstance(view)
123
+ view.cleanup()
124
+ MeasurementStore.clearFontScalingSettings(view.id)
125
+ MeasurementStore.clearBreakStrategy(view.id)
126
+ view.layoutManager.releaseMeasurementStore()
127
+ }
128
+
129
+ override fun getExportedCustomDirectEventTypeConstants(): MutableMap<String, Any> = tiptapEventTypeConstants()
130
+
131
+ @ReactProp(name = "document")
132
+ override fun setDocument(
133
+ view: EnrichedTiptapText?,
134
+ document: String?,
135
+ ) {
136
+ view?.setTiptapContent(document ?: "")
137
+ }
138
+
139
+ @ReactProp(name = "tiptapStyle")
140
+ override fun setTiptapStyle(
141
+ view: EnrichedTiptapText?,
142
+ style: ReadableMap?,
143
+ ) {
144
+ view?.setTiptapStyle(style)
145
+ }
146
+
147
+ @ReactProp(name = "selectable", defaultBoolean = true)
148
+ override fun setSelectable(
149
+ view: EnrichedTiptapText?,
150
+ selectable: Boolean,
151
+ ) {
152
+ view?.setIsSelectable(selectable)
153
+ }
154
+
155
+ override fun setSelectionColor(
156
+ view: EnrichedTiptapText?,
157
+ value: Int?,
158
+ ) {
159
+ view?.setSelectionColor(value)
160
+ }
161
+
162
+ override fun setSelectionHandleColor(
163
+ view: EnrichedTiptapText?,
164
+ value: Int?,
165
+ ) {
166
+ view?.setSelectionHandleColor(value)
167
+ }
168
+
169
+ @ReactProp(name = "linkRecognition")
170
+ override fun setLinkRecognition(
171
+ view: EnrichedTiptapText?,
172
+ value: ReadableMap?,
173
+ ) {
174
+ val recognition = parseLinkRecognition(value)
175
+ view?.setLinkRegex(recognition.text)
176
+ view?.setInlineCodeLinkRegex(recognition.inlineCode)
177
+ }
178
+
179
+ @ReactProp(name = "md4cFlags")
180
+ override fun setMd4cFlags(
181
+ view: EnrichedTiptapText?,
182
+ flags: ReadableMap?,
183
+ ) {
184
+ view?.setMd4cFlags(parseMd4cFlags(flags))
185
+ }
186
+
187
+ @ReactProp(name = "isGFM", defaultBoolean = false)
188
+ override fun setIsGFM(
189
+ view: EnrichedTiptapText?,
190
+ isGFM: Boolean,
191
+ ) {
192
+ view?.setIsGFM(isGFM)
193
+ }
194
+
195
+ @ReactProp(name = "allowFontScaling", defaultBoolean = true)
196
+ override fun setAllowFontScaling(
197
+ view: EnrichedTiptapText?,
198
+ allowFontScaling: Boolean,
199
+ ) {
200
+ view?.setAllowFontScaling(allowFontScaling)
201
+ }
202
+
203
+ @ReactProp(name = "maxFontSizeMultiplier", defaultFloat = 0f)
204
+ override fun setMaxFontSizeMultiplier(
205
+ view: EnrichedTiptapText?,
206
+ maxFontSizeMultiplier: Float,
207
+ ) {
208
+ view?.setMaxFontSizeMultiplier(maxFontSizeMultiplier)
209
+ }
210
+
211
+ @ReactProp(name = "allowTrailingMargin", defaultBoolean = false)
212
+ override fun setAllowTrailingMargin(
213
+ view: EnrichedTiptapText?,
214
+ allowTrailingMargin: Boolean,
215
+ ) {
216
+ view?.setAllowTrailingMargin(allowTrailingMargin)
217
+ }
218
+
219
+ @ReactProp(name = "enableLinkPreview", defaultBoolean = true)
220
+ override fun setEnableLinkPreview(
221
+ view: EnrichedTiptapText?,
222
+ enableLinkPreview: Boolean,
223
+ ) {
224
+ // No-op on Android — only used on iOS
225
+ }
226
+
227
+ @ReactProp(name = "enableTaskListItemToggle", defaultBoolean = true)
228
+ override fun setEnableTaskListItemToggle(
229
+ view: EnrichedTiptapText?,
230
+ enableTaskListItemToggle: Boolean,
231
+ ) {
232
+ view?.setEnableTaskListItemToggle(enableTaskListItemToggle)
233
+ }
234
+
235
+ @ReactProp(name = "enableImagePress", defaultBoolean = false)
236
+ override fun setEnableImagePress(
237
+ view: EnrichedTiptapText?,
238
+ enableImagePress: Boolean,
239
+ ) {
240
+ view?.setEnableImagePress(enableImagePress)
241
+ }
242
+
243
+ @ReactProp(name = "enableBlockContextMenu", defaultBoolean = true)
244
+ override fun setEnableBlockContextMenu(
245
+ view: EnrichedTiptapText?,
246
+ enableBlockContextMenu: Boolean,
247
+ ) {
248
+ // No-op: block context menus are rendered by the container component.
249
+ }
250
+
251
+ @ReactProp(name = "enableCodeBlockPress", defaultBoolean = false)
252
+ override fun setEnableCodeBlockPress(
253
+ view: EnrichedTiptapText?,
254
+ enableCodeBlockPress: Boolean,
255
+ ) {
256
+ view?.setEnableCodeBlockPress(enableCodeBlockPress)
257
+ }
258
+
259
+ @ReactProp(name = "lineBreakStrategyIOS")
260
+ override fun setLineBreakStrategyIOS(
261
+ view: EnrichedTiptapText?,
262
+ strategy: String?,
263
+ ) {
264
+ // No-op on Android — only used on iOS
265
+ }
266
+
267
+ @ReactProp(name = "writingDirection")
268
+ override fun setWritingDirection(
269
+ view: EnrichedTiptapText?,
270
+ value: String?,
271
+ ) {
272
+ // No-op on Android — first-strong per-paragraph resolution is the platform default
273
+ }
274
+
275
+ @ReactProp(name = "streamingAnimation", defaultBoolean = false)
276
+ override fun setStreamingAnimation(
277
+ view: EnrichedTiptapText?,
278
+ streamingAnimation: Boolean,
279
+ ) {
280
+ view?.setStreamingAnimation(streamingAnimation)
281
+ }
282
+
283
+ @ReactProp(name = "streamingConfig")
284
+ override fun setStreamingConfig(
285
+ view: EnrichedTiptapText?,
286
+ config: ReadableMap?,
287
+ ) {
288
+ // No-op — CommonMark mode uses a single text view; table streaming is GFM-only.
289
+ }
290
+
291
+ @ReactProp(name = "spoilerOverlay")
292
+ override fun setSpoilerOverlay(
293
+ view: EnrichedTiptapText?,
294
+ mode: String?,
295
+ ) {
296
+ view?.spoilerOverlay = SpoilerOverlay.fromString(mode)
297
+ }
298
+
299
+ @ReactProp(name = "textBreakStrategy")
300
+ override fun setTextBreakStrategy(
301
+ view: EnrichedTiptapText?,
302
+ strategy: String?,
303
+ ) {
304
+ view?.setTextBreakStrategy(strategy ?: "highQuality")
305
+ }
306
+
307
+ @ReactProp(name = "numberOfLines", defaultInt = 0)
308
+ override fun setNumberOfLines(
309
+ view: EnrichedTiptapText?,
310
+ value: Int,
311
+ ) {
312
+ view?.setTiptapNumberOfLines(value)
313
+ }
314
+
315
+ @ReactProp(name = "ellipsizeMode")
316
+ override fun setEllipsizeMode(
317
+ view: EnrichedTiptapText?,
318
+ value: String?,
319
+ ) {
320
+ view?.setTiptapEllipsizeMode(value ?: "tail")
321
+ }
322
+
323
+ @ReactProp(name = "linkContextMenuItems")
324
+ override fun setLinkContextMenuItems(
325
+ view: EnrichedTiptapText?,
326
+ value: ReadableArray?,
327
+ ) {
328
+ // Link menus are iOS-only for now; onLinkLongPress is the Android hook.
329
+ }
330
+
331
+ @ReactProp(name = "contextMenuItems")
332
+ override fun setContextMenuItems(
333
+ view: EnrichedTiptapText?,
334
+ value: ReadableArray?,
335
+ ) {
336
+ if (view == null) return
337
+ view.setContextMenuItems(parseContextMenuItems(value))
338
+ }
339
+
340
+ @ReactProp(name = "imageRequestHeaders")
341
+ override fun setImageRequestHeaders(
342
+ view: EnrichedTiptapText?,
343
+ value: ReadableArray?,
344
+ ) {
345
+ if (view == null) return
346
+ view.setImageRequestHeaders(parseImageRequestHeaders(value))
347
+ }
348
+
349
+ @ReactProp(name = "linkPillContent")
350
+ override fun setLinkPillContent(
351
+ view: EnrichedTiptapText?,
352
+ value: ReadableArray?,
353
+ ) {
354
+ if (view == null) return
355
+ view.setLinkPillContent(parseLinkPillContent(value))
356
+ }
357
+
358
+ @ReactProp(name = "selectionMenuConfig")
359
+ override fun setSelectionMenuConfig(
360
+ view: EnrichedTiptapText?,
361
+ value: ReadableMap?,
362
+ ) {
363
+ if (view == null) return
364
+ view.setSelectionMenuConfig(parseSelectionMenuConfig(value))
365
+ }
366
+
367
+ @ReactProp(name = "accessibilityLabels")
368
+ override fun setAccessibilityLabels(
369
+ view: EnrichedTiptapText?,
370
+ value: ReadableMap?,
371
+ ) {
372
+ if (view == null) return
373
+ view.setAccessibilityLabels(parseAccessibilityLabels(value))
374
+ }
375
+
376
+ override fun setPadding(
377
+ view: EnrichedTiptapText,
378
+ left: Int,
379
+ top: Int,
380
+ right: Int,
381
+ bottom: Int,
382
+ ) {
383
+ super.setPadding(view, left, top, right, bottom)
384
+ view.setPadding(left, top, right, bottom)
385
+ }
386
+
387
+ override fun measure(
388
+ context: Context,
389
+ localData: ReadableMap?,
390
+ props: ReadableMap?,
391
+ state: ReadableMap?,
392
+ width: Float,
393
+ widthMode: YogaMeasureMode?,
394
+ height: Float,
395
+ heightMode: YogaMeasureMode?,
396
+ attachmentsPositions: FloatArray?,
397
+ ): Long {
398
+ val id = localData?.getInt("viewTag")
399
+ return MeasurementStore.getMeasureById(context, id, width, widthMode, height, heightMode, props)
400
+ }
401
+
402
+ companion object {
403
+ const val NAME = "EnrichedTiptapText"
404
+ }
405
+ }
@@ -0,0 +1,13 @@
1
+ package com.renderrichtext
2
+
3
+ import com.facebook.react.ReactPackage
4
+ import com.facebook.react.bridge.NativeModule
5
+ import com.facebook.react.bridge.ReactApplicationContext
6
+ import com.facebook.react.uimanager.ViewManager
7
+
8
+ class EnrichedTiptapTextPackage : ReactPackage {
9
+ override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> =
10
+ listOf(EnrichedTiptapTextManager())
11
+
12
+ override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> = emptyList()
13
+ }