@apollohg/react-native-rich-text-editor 2.0.0

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 (494) hide show
  1. package/LICENSE +160 -0
  2. package/README.md +259 -0
  3. package/RUST-STANDARD-LIBRARY-NOTICES.html +8266 -0
  4. package/ReactNativeProseEditor.podspec +59 -0
  5. package/THIRD_PARTY_NOTICES.md +31155 -0
  6. package/android/build.gradle +188 -0
  7. package/android/consumer-rules.pro +18 -0
  8. package/android/expo/build.gradle +17 -0
  9. package/android/src/debug/java/com/apollohg/editor/viewer/PreparedProseDrawInstrumentation.kt +7 -0
  10. package/android/src/main/assets/editor-icons/MaterialIcons.json +2236 -0
  11. package/android/src/main/assets/editor-icons/MaterialIcons.ttf +0 -0
  12. package/android/src/main/java/com/apollohg/editor/AndroidApiCompat.kt +19 -0
  13. package/android/src/main/java/com/apollohg/editor/AndroidCollaborationTransport.kt +860 -0
  14. package/android/src/main/java/com/apollohg/editor/CaretGeometry.kt +91 -0
  15. package/android/src/main/java/com/apollohg/editor/CodeHighlighting.kt +141 -0
  16. package/android/src/main/java/com/apollohg/editor/DecodedBitmapBudget.kt +250 -0
  17. package/android/src/main/java/com/apollohg/editor/EditorAddons.kt +133 -0
  18. package/android/src/main/java/com/apollohg/editor/EditorBlockSpacing.kt +51 -0
  19. package/android/src/main/java/com/apollohg/editor/EditorBoxDrawable.kt +16 -0
  20. package/android/src/main/java/com/apollohg/editor/EditorBoxDrawing.kt +234 -0
  21. package/android/src/main/java/com/apollohg/editor/EditorCheckboxSpan.kt +87 -0
  22. package/android/src/main/java/com/apollohg/editor/EditorCodeHighlighting.kt +120 -0
  23. package/android/src/main/java/com/apollohg/editor/EditorDecorationLayer.java +18 -0
  24. package/android/src/main/java/com/apollohg/editor/EditorDocumentLayout.kt +626 -0
  25. package/android/src/main/java/com/apollohg/editor/EditorEditText.kt +1042 -0
  26. package/android/src/main/java/com/apollohg/editor/EditorEditTextAnnotations.kt +191 -0
  27. package/android/src/main/java/com/apollohg/editor/EditorEditTextCaret.kt +100 -0
  28. package/android/src/main/java/com/apollohg/editor/EditorEditTextClipboard.kt +101 -0
  29. package/android/src/main/java/com/apollohg/editor/EditorEditTextComposition.kt +220 -0
  30. package/android/src/main/java/com/apollohg/editor/EditorEditTextConfiguration.kt +316 -0
  31. package/android/src/main/java/com/apollohg/editor/EditorEditTextCorrection.kt +303 -0
  32. package/android/src/main/java/com/apollohg/editor/EditorEditTextDeferredUpdates.kt +327 -0
  33. package/android/src/main/java/com/apollohg/editor/EditorEditTextDeletion.kt +258 -0
  34. package/android/src/main/java/com/apollohg/editor/EditorEditTextDiagnostics.kt +83 -0
  35. package/android/src/main/java/com/apollohg/editor/EditorEditTextDragDrop.kt +67 -0
  36. package/android/src/main/java/com/apollohg/editor/EditorEditTextExternalComposition.kt +357 -0
  37. package/android/src/main/java/com/apollohg/editor/EditorEditTextHardwareInput.kt +277 -0
  38. package/android/src/main/java/com/apollohg/editor/EditorEditTextImages.kt +280 -0
  39. package/android/src/main/java/com/apollohg/editor/EditorEditTextInputLifecycle.kt +183 -0
  40. package/android/src/main/java/com/apollohg/editor/EditorEditTextInputPreparation.kt +79 -0
  41. package/android/src/main/java/com/apollohg/editor/EditorEditTextInputTraits.kt +384 -0
  42. package/android/src/main/java/com/apollohg/editor/EditorEditTextLayout.kt +100 -0
  43. package/android/src/main/java/com/apollohg/editor/EditorEditTextNativeMutation.kt +243 -0
  44. package/android/src/main/java/com/apollohg/editor/EditorEditTextPlaceholder.kt +154 -0
  45. package/android/src/main/java/com/apollohg/editor/EditorEditTextRenderPatch.kt +347 -0
  46. package/android/src/main/java/com/apollohg/editor/EditorEditTextRendering.kt +313 -0
  47. package/android/src/main/java/com/apollohg/editor/EditorEditTextRustCommands.kt +281 -0
  48. package/android/src/main/java/com/apollohg/editor/EditorEditTextSelection.kt +352 -0
  49. package/android/src/main/java/com/apollohg/editor/EditorEditTextState.kt +113 -0
  50. package/android/src/main/java/com/apollohg/editor/EditorEditTextTaskMarkers.kt +92 -0
  51. package/android/src/main/java/com/apollohg/editor/EditorEditTextTextCommit.kt +327 -0
  52. package/android/src/main/java/com/apollohg/editor/EditorEditTextToolbar.kt +84 -0
  53. package/android/src/main/java/com/apollohg/editor/EditorEditTextUpdates.kt +245 -0
  54. package/android/src/main/java/com/apollohg/editor/EditorGlyphHeightCursorDrawable.kt +42 -0
  55. package/android/src/main/java/com/apollohg/editor/EditorHeightBehavior.kt +13 -0
  56. package/android/src/main/java/com/apollohg/editor/EditorInputConnection.kt +923 -0
  57. package/android/src/main/java/com/apollohg/editor/EditorInputCoordinates.kt +191 -0
  58. package/android/src/main/java/com/apollohg/editor/EditorInputCorrection.kt +107 -0
  59. package/android/src/main/java/com/apollohg/editor/EditorInputCursorGeometry.kt +128 -0
  60. package/android/src/main/java/com/apollohg/editor/EditorInputSnapshots.kt +134 -0
  61. package/android/src/main/java/com/apollohg/editor/EditorInputSurroundingDeletion.kt +321 -0
  62. package/android/src/main/java/com/apollohg/editor/EditorKeyboardToolbarView.kt +851 -0
  63. package/android/src/main/java/com/apollohg/editor/EditorMentionStyle.kt +192 -0
  64. package/android/src/main/java/com/apollohg/editor/EditorReconciliationWatcher.kt +46 -0
  65. package/android/src/main/java/com/apollohg/editor/EditorStyleSheet.kt +303 -0
  66. package/android/src/main/java/com/apollohg/editor/EditorStyleSheetSpans.kt +253 -0
  67. package/android/src/main/java/com/apollohg/editor/EditorSurfaceInputConnection.kt +67 -0
  68. package/android/src/main/java/com/apollohg/editor/EditorTextDecorationDrawing.kt +143 -0
  69. package/android/src/main/java/com/apollohg/editor/EditorTextSurface.kt +712 -0
  70. package/android/src/main/java/com/apollohg/editor/EditorTextSurfaceDragDrop.kt +94 -0
  71. package/android/src/main/java/com/apollohg/editor/EditorTextSurfaceInteraction.kt +708 -0
  72. package/android/src/main/java/com/apollohg/editor/EditorTheme.kt +650 -0
  73. package/android/src/main/java/com/apollohg/editor/EditorV2Adapter.kt +912 -0
  74. package/android/src/main/java/com/apollohg/editor/EditorV2AdapterMutations.kt +402 -0
  75. package/android/src/main/java/com/apollohg/editor/EditorV2AdapterRendering.kt +123 -0
  76. package/android/src/main/java/com/apollohg/editor/EditorV2AdapterSelection.kt +203 -0
  77. package/android/src/main/java/com/apollohg/editor/EditorV2Backend.kt +120 -0
  78. package/android/src/main/java/com/apollohg/editor/EditorV2Driver.kt +87 -0
  79. package/android/src/main/java/com/apollohg/editor/EditorV2Registry.kt +97 -0
  80. package/android/src/main/java/com/apollohg/editor/EditorV2RenderValidation.kt +409 -0
  81. package/android/src/main/java/com/apollohg/editor/ExpoAutoGrowStyleSizePublisher.kt +34 -0
  82. package/android/src/main/java/com/apollohg/editor/ImageResizeOverlayView.kt +266 -0
  83. package/android/src/main/java/com/apollohg/editor/ImeTextCoordinateMapper.kt +102 -0
  84. package/android/src/main/java/com/apollohg/editor/KeyboardToolbarImeAnimationController.kt +101 -0
  85. package/android/src/main/java/com/apollohg/editor/MentionSuggestionChipView.kt +234 -0
  86. package/android/src/main/java/com/apollohg/editor/NativeCollaborationTransportRegistry.kt +493 -0
  87. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoView.kt +813 -0
  88. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewAtoms.kt +68 -0
  89. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewBinding.kt +126 -0
  90. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewDiagnostics.kt +208 -0
  91. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewErrors.kt +146 -0
  92. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewEvents.kt +150 -0
  93. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewExternalComposition.kt +39 -0
  94. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewFocus.kt +176 -0
  95. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewLifecycle.kt +302 -0
  96. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewMentions.kt +259 -0
  97. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewNativeActions.kt +179 -0
  98. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewOutsideTap.kt +214 -0
  99. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewPendingUpdates.kt +376 -0
  100. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewProperties.kt +234 -0
  101. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewPropertyRetries.kt +197 -0
  102. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewToolbar.kt +285 -0
  103. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewTypes.kt +28 -0
  104. package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewUpdates.kt +271 -0
  105. package/android/src/main/java/com/apollohg/editor/NativeEditorModule.kt +687 -0
  106. package/android/src/main/java/com/apollohg/editor/NativeEditorOutsideTapDispatcher.kt +380 -0
  107. package/android/src/main/java/com/apollohg/editor/NativeEditorV2Numbers.kt +45 -0
  108. package/android/src/main/java/com/apollohg/editor/NativeEditorViewRegistry.kt +372 -0
  109. package/android/src/main/java/com/apollohg/editor/NativeImagePipeline.kt +22 -0
  110. package/android/src/main/java/com/apollohg/editor/NativeToolbar.kt +193 -0
  111. package/android/src/main/java/com/apollohg/editor/NativeToolbarIcons.kt +177 -0
  112. package/android/src/main/java/com/apollohg/editor/NativeToolbarItem.kt +274 -0
  113. package/android/src/main/java/com/apollohg/editor/OkHttpCollaborationSocket.kt +102 -0
  114. package/android/src/main/java/com/apollohg/editor/OrderedListMarkerFormatter.kt +130 -0
  115. package/android/src/main/java/com/apollohg/editor/PointerTransparentView.java +18 -0
  116. package/android/src/main/java/com/apollohg/editor/PositionBridge.kt +128 -0
  117. package/android/src/main/java/com/apollohg/editor/ProseViewerView.kt +854 -0
  118. package/android/src/main/java/com/apollohg/editor/RemoteSelectionOverlayView.kt +314 -0
  119. package/android/src/main/java/com/apollohg/editor/RenderBlockSpans.kt +314 -0
  120. package/android/src/main/java/com/apollohg/editor/RenderBridge.kt +224 -0
  121. package/android/src/main/java/com/apollohg/editor/RenderBridgeBlockStyles.kt +407 -0
  122. package/android/src/main/java/com/apollohg/editor/RenderBridgeElements.kt +544 -0
  123. package/android/src/main/java/com/apollohg/editor/RenderBridgeInlineAndAtoms.kt +631 -0
  124. package/android/src/main/java/com/apollohg/editor/RenderBridgeParagraphs.kt +215 -0
  125. package/android/src/main/java/com/apollohg/editor/RenderImageDecoder.kt +748 -0
  126. package/android/src/main/java/com/apollohg/editor/RenderImageLoader.kt +900 -0
  127. package/android/src/main/java/com/apollohg/editor/RenderLayoutConstants.kt +117 -0
  128. package/android/src/main/java/com/apollohg/editor/RenderMediaSpans.kt +337 -0
  129. package/android/src/main/java/com/apollohg/editor/RenderParagraphSpans.kt +182 -0
  130. package/android/src/main/java/com/apollohg/editor/RichTextEditorView.kt +951 -0
  131. package/android/src/main/java/com/apollohg/editor/SharedNativeImagePipeline.kt +78 -0
  132. package/android/src/main/java/com/apollohg/editor/UniffiEditorV2Backend.kt +261 -0
  133. package/android/src/main/java/com/apollohg/editor/viewer/AndroidProseLayoutEngine.kt +1656 -0
  134. package/android/src/main/java/com/apollohg/editor/viewer/FabricAttachmentSidecars.kt +80 -0
  135. package/android/src/main/java/com/apollohg/editor/viewer/FabricLeaseHandleBridge.kt +59 -0
  136. package/android/src/main/java/com/apollohg/editor/viewer/FallbackSelectionGeometry.kt +450 -0
  137. package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseDrawingView.kt +678 -0
  138. package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseInstrumentation.kt +608 -0
  139. package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseLayout.kt +186 -0
  140. package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseLayoutCache.kt +393 -0
  141. package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseLayoutRegistry.kt +828 -0
  142. package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseTheme.kt +316 -0
  143. package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseViewerManager.kt +900 -0
  144. package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseViewerPackage.kt +16 -0
  145. package/android/src/main/java/com/apollohg/editor/viewer/PreparedViewerAtoms.kt +89 -0
  146. package/android/src/main/java/com/apollohg/editor/viewer/ViewerCodeHighlighting.kt +91 -0
  147. package/android/src/main/java/com/apollohg/editor/viewer/ViewerDocument.kt +453 -0
  148. package/android/src/main/java/com/apollohg/editor/viewer/ViewerFontEnvironment.kt +282 -0
  149. package/android/src/main/java/com/apollohg/editor/viewer/ViewerImagePipeline.kt +460 -0
  150. package/android/src/main/jni/CMakeLists.txt +85 -0
  151. package/android/src/main/jni/PreparedProseViewerMeasurementsManager.cpp +334 -0
  152. package/android/src/main/jni/ReactNativeProseEditorSpec.h +17 -0
  153. package/android/src/main/jni/reactnativeproseeditor.h +6 -0
  154. package/android/src/main/res/values/attrs.xml +6 -0
  155. package/android/src/release/java/com/apollohg/editor/viewer/PreparedProseDrawInstrumentation.kt +9 -0
  156. package/app.plugin.js +62 -0
  157. package/common/cpp/react/renderer/components/PreparedProseViewer/PreparedProseMeasurementsManager.h +62 -0
  158. package/common/cpp/react/renderer/components/PreparedProseViewer/PreparedProseViewerComponentDescriptor.h +30 -0
  159. package/common/cpp/react/renderer/components/PreparedProseViewer/PreparedProseViewerShadowNode.cpp +192 -0
  160. package/common/cpp/react/renderer/components/PreparedProseViewer/PreparedProseViewerShadowNode.h +46 -0
  161. package/common/cpp/react/renderer/components/PreparedProseViewer/PreparedProseViewerState.h +145 -0
  162. package/dist/AtomHost.d.ts +17 -0
  163. package/dist/AtomHost.js +135 -0
  164. package/dist/DefaultAtomChip.d.ts +2 -0
  165. package/dist/DefaultAtomChip.js +22 -0
  166. package/dist/EditorAddon.d.ts +32 -0
  167. package/dist/EditorAddon.js +29 -0
  168. package/dist/EditorAddonNormalization.d.ts +6 -0
  169. package/dist/EditorAddonNormalization.js +48 -0
  170. package/dist/EditorMentionThemeNormalization.d.ts +8 -0
  171. package/dist/EditorMentionThemeNormalization.js +22 -0
  172. package/dist/EditorMentionThemeValidation.d.ts +12 -0
  173. package/dist/EditorMentionThemeValidation.js +95 -0
  174. package/dist/EditorStyleSheet.d.ts +4 -0
  175. package/dist/EditorStyleSheet.js +10 -0
  176. package/dist/EditorStyleSheetNormalization.d.ts +3 -0
  177. package/dist/EditorStyleSheetNormalization.js +226 -0
  178. package/dist/EditorStyleSheetTypes.d.ts +151 -0
  179. package/dist/EditorStyleSheetTypes.js +2 -0
  180. package/dist/EditorTheme.d.ts +117 -0
  181. package/dist/EditorTheme.js +41 -0
  182. package/dist/EditorToolbar.d.ts +4 -0
  183. package/dist/EditorToolbar.js +17 -0
  184. package/dist/EditorToolbarComponent.d.ts +13 -0
  185. package/dist/EditorToolbarComponent.js +24 -0
  186. package/dist/EditorToolbarItems.d.ts +9 -0
  187. package/dist/EditorToolbarItems.js +58 -0
  188. package/dist/EditorToolbarRegistry.d.ts +59 -0
  189. package/dist/EditorToolbarRegistry.js +175 -0
  190. package/dist/EditorToolbarTypes.d.ts +273 -0
  191. package/dist/EditorToolbarTypes.js +2 -0
  192. package/dist/EditorToolbarVisuals.d.ts +154 -0
  193. package/dist/EditorToolbarVisuals.js +228 -0
  194. package/dist/EditorUpdateRevision.d.ts +8 -0
  195. package/dist/EditorUpdateRevision.js +22 -0
  196. package/dist/ExternalTextComposition.d.ts +45 -0
  197. package/dist/ExternalTextComposition.js +537 -0
  198. package/dist/ImageLoadingPolicy.d.ts +54 -0
  199. package/dist/ImageLoadingPolicy.js +60 -0
  200. package/dist/NativeEditorBoundaryError.d.ts +111 -0
  201. package/dist/NativeEditorBoundaryError.js +268 -0
  202. package/dist/NativeEditorBridge.d.ts +9 -0
  203. package/dist/NativeEditorBridge.js +37 -0
  204. package/dist/NativeEditorCollaborationTransport.d.ts +154 -0
  205. package/dist/NativeEditorCollaborationTransport.js +275 -0
  206. package/dist/NativeEditorCreateConfig.d.ts +16 -0
  207. package/dist/NativeEditorCreateConfig.js +249 -0
  208. package/dist/NativeEditorCreateJson.d.ts +76 -0
  209. package/dist/NativeEditorCreateJson.js +474 -0
  210. package/dist/NativeEditorCreateValidation.d.ts +32 -0
  211. package/dist/NativeEditorCreateValidation.js +150 -0
  212. package/dist/NativeEditorDocumentBridge.d.ts +72 -0
  213. package/dist/NativeEditorDocumentBridge.js +305 -0
  214. package/dist/NativeEditorDocumentHandle.d.ts +70 -0
  215. package/dist/NativeEditorDocumentHandle.js +89 -0
  216. package/dist/NativeEditorLocalAwareness.d.ts +34 -0
  217. package/dist/NativeEditorLocalAwareness.js +153 -0
  218. package/dist/NativeEditorNativeModule.d.ts +48 -0
  219. package/dist/NativeEditorNativeModule.js +34 -0
  220. package/dist/NativeEditorRenderNormalization.d.ts +22 -0
  221. package/dist/NativeEditorRenderNormalization.js +274 -0
  222. package/dist/NativeEditorResultNormalization.d.ts +108 -0
  223. package/dist/NativeEditorResultNormalization.js +400 -0
  224. package/dist/NativeEditorTypes.d.ts +318 -0
  225. package/dist/NativeEditorTypes.js +15 -0
  226. package/dist/NativeEditorV2Decimal.d.ts +5 -0
  227. package/dist/NativeEditorV2Decimal.js +18 -0
  228. package/dist/NativeProseViewer.d.ts +122 -0
  229. package/dist/NativeProseViewer.js +130 -0
  230. package/dist/NativeRichTextEditor.d.ts +3 -0
  231. package/dist/NativeRichTextEditor.js +6 -0
  232. package/dist/ResourceLimits.d.ts +100 -0
  233. package/dist/ResourceLimits.js +80 -0
  234. package/dist/RichTextEditor.d.ts +4 -0
  235. package/dist/RichTextEditor.js +25 -0
  236. package/dist/RichTextEditorNativeTypes.d.ts +122 -0
  237. package/dist/RichTextEditorNativeTypes.js +2 -0
  238. package/dist/RichTextEditorNativeView.d.ts +12 -0
  239. package/dist/RichTextEditorNativeView.js +15 -0
  240. package/dist/RichTextEditorSerialization.d.ts +53 -0
  241. package/dist/RichTextEditorSerialization.js +283 -0
  242. package/dist/RichTextEditorTypes.d.ts +281 -0
  243. package/dist/RichTextEditorTypes.js +2 -0
  244. package/dist/ViewerConfiguration.d.ts +22 -0
  245. package/dist/ViewerConfiguration.js +6 -0
  246. package/dist/YjsCollaboration.d.ts +146 -0
  247. package/dist/YjsCollaboration.js +496 -0
  248. package/dist/addons.d.ts +193 -0
  249. package/dist/addons.js +122 -0
  250. package/dist/atomConstants.d.ts +3 -0
  251. package/dist/atomConstants.js +6 -0
  252. package/dist/atomInstances.d.ts +35 -0
  253. package/dist/atomInstances.js +79 -0
  254. package/dist/atomPolicy.d.ts +4 -0
  255. package/dist/atomPolicy.js +47 -0
  256. package/dist/atomUpdates.d.ts +2 -0
  257. package/dist/atomUpdates.js +38 -0
  258. package/dist/atoms.d.ts +92 -0
  259. package/dist/atoms.js +222 -0
  260. package/dist/attributeValidation.d.ts +4 -0
  261. package/dist/attributeValidation.js +97 -0
  262. package/dist/contentExpression.d.ts +6 -0
  263. package/dist/contentExpression.js +335 -0
  264. package/dist/index.d.ts +21 -0
  265. package/dist/index.js +78 -0
  266. package/dist/listMarkers.d.ts +15 -0
  267. package/dist/listMarkers.js +21 -0
  268. package/dist/schemaDefinition.d.ts +143 -0
  269. package/dist/schemaDefinition.js +206 -0
  270. package/dist/schemaDocument.d.ts +17 -0
  271. package/dist/schemaDocument.js +69 -0
  272. package/dist/schemaDocumentConstruction.d.ts +5 -0
  273. package/dist/schemaDocumentConstruction.js +125 -0
  274. package/dist/schemaNormalization.d.ts +29 -0
  275. package/dist/schemaNormalization.js +313 -0
  276. package/dist/schemaPresets.d.ts +68 -0
  277. package/dist/schemaPresets.js +198 -0
  278. package/dist/schemaResolution.d.ts +9 -0
  279. package/dist/schemaResolution.js +211 -0
  280. package/dist/schemas.d.ts +5 -0
  281. package/dist/schemas.js +28 -0
  282. package/dist/specs/PreparedProseViewerNativeComponent.d.ts +37 -0
  283. package/dist/specs/PreparedProseViewerNativeComponent.js +6 -0
  284. package/dist/useEditorToolbarInteractions.d.ts +12 -0
  285. package/dist/useEditorToolbarInteractions.js +218 -0
  286. package/dist/useEditorToolbarItems.d.ts +8 -0
  287. package/dist/useEditorToolbarItems.js +280 -0
  288. package/dist/useEditorToolbarPresentation.d.ts +4 -0
  289. package/dist/useEditorToolbarPresentation.js +203 -0
  290. package/dist/useEditorToolbarState.d.ts +63 -0
  291. package/dist/useEditorToolbarState.js +108 -0
  292. package/dist/useFocusPreservingFrames.d.ts +17 -0
  293. package/dist/useFocusPreservingFrames.js +108 -0
  294. package/dist/useNativeEditor.d.ts +66 -0
  295. package/dist/useNativeEditor.js +370 -0
  296. package/dist/useRichTextEditorCommands.d.ts +21 -0
  297. package/dist/useRichTextEditorCommands.js +299 -0
  298. package/dist/useRichTextEditorEvents.d.ts +18 -0
  299. package/dist/useRichTextEditorEvents.js +216 -0
  300. package/dist/useRichTextEditorMentions.d.ts +11 -0
  301. package/dist/useRichTextEditorMentions.js +316 -0
  302. package/dist/useRichTextEditorPresentation.d.ts +5 -0
  303. package/dist/useRichTextEditorPresentation.js +178 -0
  304. package/dist/useRichTextEditorState.d.ts +180 -0
  305. package/dist/useRichTextEditorState.js +405 -0
  306. package/dist/useRichTextEditorUpdates.d.ts +10 -0
  307. package/dist/useRichTextEditorUpdates.js +308 -0
  308. package/dist/useViewerAtoms.d.ts +38 -0
  309. package/dist/useViewerAtoms.js +288 -0
  310. package/expo-module.config.json +13 -0
  311. package/ios/EditorAddons.swift +354 -0
  312. package/ios/EditorCodeHighlighting.swift +184 -0
  313. package/ios/EditorCore.xcframework/Info.plist +44 -0
  314. package/ios/EditorCore.xcframework/ios-arm64/libeditor_core.a +0 -0
  315. package/ios/EditorCore.xcframework/ios-arm64_x86_64-simulator/libeditor_core.a +0 -0
  316. package/ios/EditorInteractionOverlays.swift +697 -0
  317. package/ios/EditorLayoutManager.swift +971 -0
  318. package/ios/EditorNodeTypes.swift +37 -0
  319. package/ios/EditorStyleSheet.swift +461 -0
  320. package/ios/EditorTextView+AttributedPatch.swift +305 -0
  321. package/ios/EditorTextView+Binding.swift +61 -0
  322. package/ios/EditorTextView+Caret.swift +333 -0
  323. package/ios/EditorTextView+Commands.swift +203 -0
  324. package/ios/EditorTextView+Delegate.swift +65 -0
  325. package/ios/EditorTextView+Diagnostics.swift +225 -0
  326. package/ios/EditorTextView+DragDrop.swift +290 -0
  327. package/ios/EditorTextView+ExternalComposition.swift +364 -0
  328. package/ios/EditorTextView+Images.swift +354 -0
  329. package/ios/EditorTextView+InputTraits.swift +200 -0
  330. package/ios/EditorTextView+KeyboardInput.swift +318 -0
  331. package/ios/EditorTextView+Layout.swift +245 -0
  332. package/ios/EditorTextView+MarkedText.swift +267 -0
  333. package/ios/EditorTextView+NativeInputLifecycle.swift +372 -0
  334. package/ios/EditorTextView+NativeMutation.swift +471 -0
  335. package/ios/EditorTextView+Reconciliation.swift +97 -0
  336. package/ios/EditorTextView+RenderPatch.swift +573 -0
  337. package/ios/EditorTextView+Rendering.swift +539 -0
  338. package/ios/EditorTextView+Selection.swift +542 -0
  339. package/ios/EditorTextView.swift +953 -0
  340. package/ios/EditorTheme.swift +626 -0
  341. package/ios/EditorV2Adapter+Commands.swift +204 -0
  342. package/ios/EditorV2Adapter+Envelope.swift +238 -0
  343. package/ios/EditorV2Adapter+Mutation.swift +392 -0
  344. package/ios/EditorV2Adapter+Registry.swift +185 -0
  345. package/ios/EditorV2Adapter+RenderState.swift +360 -0
  346. package/ios/EditorV2Adapter+RenderValidation.swift +420 -0
  347. package/ios/EditorV2Adapter+Selection.swift +329 -0
  348. package/ios/EditorV2Adapter+TextCommands.swift +430 -0
  349. package/ios/EditorV2Adapter.swift +376 -0
  350. package/ios/EditorV2Shadow.swift +353 -0
  351. package/ios/Generated_editor_core.swift +2378 -0
  352. package/ios/NativeCodeHighlighting.swift +159 -0
  353. package/ios/NativeCollaborationSocket.swift +144 -0
  354. package/ios/NativeCollaborationTransport+Protocol.swift +258 -0
  355. package/ios/NativeCollaborationTransport+Socket.swift +379 -0
  356. package/ios/NativeCollaborationTransport+Validation.swift +103 -0
  357. package/ios/NativeCollaborationTransport.swift +322 -0
  358. package/ios/NativeCollaborationTransportRegistry.swift +521 -0
  359. package/ios/NativeEditorExpoView+AccessoryRetry.swift +219 -0
  360. package/ios/NativeEditorExpoView+Binding.swift +268 -0
  361. package/ios/NativeEditorExpoView+Diagnostics.swift +66 -0
  362. package/ios/NativeEditorExpoView+Events.swift +131 -0
  363. package/ios/NativeEditorExpoView+Focus.swift +169 -0
  364. package/ios/NativeEditorExpoView+MentionRetry.swift +288 -0
  365. package/ios/NativeEditorExpoView+Mentions.swift +288 -0
  366. package/ios/NativeEditorExpoView+Properties.swift +300 -0
  367. package/ios/NativeEditorExpoView+Toolbar.swift +86 -0
  368. package/ios/NativeEditorExpoView+Updates.swift +312 -0
  369. package/ios/NativeEditorExpoView.swift +349 -0
  370. package/ios/NativeEditorModule.swift +856 -0
  371. package/ios/NativeEditorViewRegistry.swift +226 -0
  372. package/ios/NativeToolbar+ButtonStyle.swift +214 -0
  373. package/ios/NativeToolbar+Buttons.swift +228 -0
  374. package/ios/NativeToolbar+Diagnostics.swift +114 -0
  375. package/ios/NativeToolbar+Menu.swift +101 -0
  376. package/ios/NativeToolbar+Models.swift +519 -0
  377. package/ios/NativeToolbar+Placeholder.swift +39 -0
  378. package/ios/NativeToolbar.swift +612 -0
  379. package/ios/OrderedListMarkerFormatter.swift +103 -0
  380. package/ios/PositionBridge.swift +596 -0
  381. package/ios/ProseViewerView.swift +462 -0
  382. package/ios/RenderBridge+Atoms.swift +288 -0
  383. package/ios/RenderBridge+Attachments.swift +246 -0
  384. package/ios/RenderBridge+BlockBoundaries.swift +313 -0
  385. package/ios/RenderBridge+Style.swift +343 -0
  386. package/ios/RenderBridge.swift +704 -0
  387. package/ios/RichTextEditorView.swift +930 -0
  388. package/ios/SharedNativeImagePipeline+Cache.swift +189 -0
  389. package/ios/SharedNativeImagePipeline+Transport.swift +328 -0
  390. package/ios/SharedNativeImagePipeline.swift +533 -0
  391. package/ios/Viewer/CoreTextProseLayoutEngine+AttributedText.swift +436 -0
  392. package/ios/Viewer/CoreTextProseLayoutEngine+Models.swift +322 -0
  393. package/ios/Viewer/CoreTextProseLayoutEngine.swift +635 -0
  394. package/ios/Viewer/Fabric/PREPPreparedProseViewerComponentView.h +4 -0
  395. package/ios/Viewer/Fabric/PREPPreparedProseViewerComponentView.mm +767 -0
  396. package/ios/Viewer/Fabric/PreparedProseMeasurementsManager.mm +118 -0
  397. package/ios/Viewer/NativeSVGImageDecoder.h +9 -0
  398. package/ios/Viewer/NativeSVGImageDecoder.mm +106 -0
  399. package/ios/Viewer/NativeSVGPreflight.h +11 -0
  400. package/ios/Viewer/NativeSVGPreflight.mm +219 -0
  401. package/ios/Viewer/PreparedProseDrawingView.swift +639 -0
  402. package/ios/Viewer/PreparedProseInstrumentation.swift +387 -0
  403. package/ios/Viewer/PreparedProseLayout.swift +326 -0
  404. package/ios/Viewer/PreparedProseLayoutCache.swift +766 -0
  405. package/ios/Viewer/PreparedProseLayoutRegistry+Artifacts.swift +377 -0
  406. package/ios/Viewer/PreparedProseLayoutRegistry+Fabric.swift +582 -0
  407. package/ios/Viewer/PreparedProseLayoutRegistry+FabricOwnership.swift +128 -0
  408. package/ios/Viewer/PreparedProseLayoutRegistry.swift +381 -0
  409. package/ios/Viewer/ViewerDocument.swift +575 -0
  410. package/ios/Viewer/ViewerFontEnvironment.swift +283 -0
  411. package/ios/Viewer/ViewerImagePipeline.swift +478 -0
  412. package/ios/editor_coreFFI/editor_coreFFI.h +1023 -0
  413. package/ios/editor_coreFFI/module.modulemap +7 -0
  414. package/package.json +151 -0
  415. package/react-native.config.js +17 -0
  416. package/rust/android/arm64-v8a/libeditor_core.so +0 -0
  417. package/rust/android/armeabi-v7a/libeditor_core.so +0 -0
  418. package/rust/android/x86/libeditor_core.so +0 -0
  419. package/rust/android/x86_64/libeditor_core.so +0 -0
  420. package/rust/bindings/kotlin/uniffi/editor_core/editor_core.kt +3146 -0
  421. package/src/AtomHost.tsx +180 -0
  422. package/src/DefaultAtomChip.tsx +27 -0
  423. package/src/EditorAddon.ts +65 -0
  424. package/src/EditorAddonNormalization.ts +49 -0
  425. package/src/EditorMentionThemeNormalization.ts +25 -0
  426. package/src/EditorMentionThemeValidation.ts +133 -0
  427. package/src/EditorStyleSheet.ts +9 -0
  428. package/src/EditorStyleSheetNormalization.ts +219 -0
  429. package/src/EditorStyleSheetTypes.ts +189 -0
  430. package/src/EditorTheme.ts +196 -0
  431. package/src/EditorToolbar.tsx +31 -0
  432. package/src/EditorToolbarComponent.tsx +23 -0
  433. package/src/EditorToolbarItems.tsx +64 -0
  434. package/src/EditorToolbarRegistry.tsx +254 -0
  435. package/src/EditorToolbarTypes.tsx +322 -0
  436. package/src/EditorToolbarVisuals.tsx +270 -0
  437. package/src/EditorUpdateRevision.ts +26 -0
  438. package/src/ExternalTextComposition.ts +658 -0
  439. package/src/ImageLoadingPolicy.ts +125 -0
  440. package/src/NativeEditorBoundaryError.ts +345 -0
  441. package/src/NativeEditorBridge.ts +93 -0
  442. package/src/NativeEditorCollaborationTransport.ts +493 -0
  443. package/src/NativeEditorCreateConfig.ts +326 -0
  444. package/src/NativeEditorCreateJson.ts +579 -0
  445. package/src/NativeEditorCreateValidation.ts +178 -0
  446. package/src/NativeEditorDocumentBridge.ts +485 -0
  447. package/src/NativeEditorDocumentHandle.ts +168 -0
  448. package/src/NativeEditorLocalAwareness.ts +168 -0
  449. package/src/NativeEditorNativeModule.ts +97 -0
  450. package/src/NativeEditorRenderNormalization.ts +320 -0
  451. package/src/NativeEditorResultNormalization.ts +469 -0
  452. package/src/NativeEditorTypes.ts +366 -0
  453. package/src/NativeEditorV2Decimal.ts +13 -0
  454. package/src/NativeProseViewer.tsx +356 -0
  455. package/src/NativeRichTextEditor.tsx +33 -0
  456. package/src/ResourceLimits.ts +187 -0
  457. package/src/RichTextEditor.tsx +27 -0
  458. package/src/RichTextEditorNativeTypes.tsx +144 -0
  459. package/src/RichTextEditorNativeView.tsx +21 -0
  460. package/src/RichTextEditorSerialization.tsx +381 -0
  461. package/src/RichTextEditorTypes.tsx +327 -0
  462. package/src/ViewerConfiguration.ts +23 -0
  463. package/src/YjsCollaboration.ts +692 -0
  464. package/src/addons.ts +311 -0
  465. package/src/atomConstants.ts +3 -0
  466. package/src/atomInstances.ts +123 -0
  467. package/src/atomPolicy.ts +47 -0
  468. package/src/atomUpdates.ts +52 -0
  469. package/src/atoms.ts +379 -0
  470. package/src/attributeValidation.ts +116 -0
  471. package/src/contentExpression.ts +338 -0
  472. package/src/index.ts +295 -0
  473. package/src/listMarkers.ts +18 -0
  474. package/src/schemaDefinition.ts +395 -0
  475. package/src/schemaDocument.ts +92 -0
  476. package/src/schemaDocumentConstruction.ts +148 -0
  477. package/src/schemaNormalization.ts +367 -0
  478. package/src/schemaPresets.ts +250 -0
  479. package/src/schemaResolution.ts +242 -0
  480. package/src/schemas.ts +43 -0
  481. package/src/specs/PreparedProseViewerNativeComponent.ts +40 -0
  482. package/src/useEditorToolbarInteractions.tsx +329 -0
  483. package/src/useEditorToolbarItems.tsx +390 -0
  484. package/src/useEditorToolbarPresentation.tsx +483 -0
  485. package/src/useEditorToolbarState.tsx +172 -0
  486. package/src/useFocusPreservingFrames.ts +171 -0
  487. package/src/useNativeEditor.ts +534 -0
  488. package/src/useRichTextEditorCommands.tsx +478 -0
  489. package/src/useRichTextEditorEvents.tsx +342 -0
  490. package/src/useRichTextEditorMentions.tsx +441 -0
  491. package/src/useRichTextEditorPresentation.tsx +563 -0
  492. package/src/useRichTextEditorState.tsx +620 -0
  493. package/src/useRichTextEditorUpdates.tsx +403 -0
  494. package/src/useViewerAtoms.tsx +427 -0
@@ -0,0 +1,334 @@
1
+ #include "reactnativeproseeditor.h"
2
+
3
+ #include <fbjni/fbjni.h>
4
+ #include <folly/dynamic.h>
5
+ #include <limits>
6
+ #include <memory>
7
+ #include <mutex>
8
+ #include <optional>
9
+ #include <string>
10
+ #include <react/jni/ReadableNativeMap.h>
11
+ #include <react/renderer/core/conversions.h>
12
+
13
+ using namespace facebook::jni;
14
+
15
+ namespace facebook::react {
16
+
17
+ namespace {
18
+
19
+ folly::dynamic optionalStringToDynamic(
20
+ const std::optional<std::string>& value) {
21
+ return value ? folly::dynamic(*value) : folly::dynamic(nullptr);
22
+ }
23
+
24
+ folly::dynamic toDynamic(const PreparedProseViewerProps& props) {
25
+ // The generated component props are deliberately copied into a ReadableMap
26
+ // for FabricUIManager.measure; the Java manager is the only Android layout
27
+ // boundary and owns DIP-to-pixel normalization.
28
+ return folly::dynamic::object
29
+ ("sourceKind", props.sourceKind == PreparedProseViewerSourceKind::Html ? "html" : "json")
30
+ ("source", props.source)
31
+ ("configJson", props.configJson)
32
+ ("themeJson", optionalStringToDynamic(props.themeJson))
33
+ ("imagePolicyJson", optionalStringToDynamic(props.imagePolicyJson))
34
+ ("imagesEnabled", props.imagesEnabled)
35
+ ("collapsesWhenEmpty", props.collapsesWhenEmpty)
36
+ ("enableLinkTaps", props.enableLinkTaps)
37
+ ("fontEnvironmentRevision", props.fontEnvironmentRevision);
38
+ }
39
+
40
+ folly::dynamic toState(
41
+ uint64_t attachmentRevision,
42
+ uint64_t nativeFontRevision,
43
+ double nativeFontScale,
44
+ uint64_t leaseHandle) {
45
+ return folly::dynamic::object
46
+ ("attachmentRevision", static_cast<int64_t>(attachmentRevision))
47
+ ("nativeFontRevision", static_cast<int64_t>(nativeFontRevision))
48
+ ("nativeFontScale", nativeFontScale)
49
+ ("leaseHandle", std::to_string(static_cast<int64_t>(leaseHandle)));
50
+ }
51
+
52
+ // Each C++ state-family owns one bridge while it is live. Terminal callbacks
53
+ // can run on the final C++ state release rather than a Java-created thread, so
54
+ // this must retain a JNI global reference instead of the local class lookup
55
+ // that created it. The bridge owns no state-family object, avoiding a cycle.
56
+ class AndroidLeaseLifecycleBridge final {
57
+ public:
58
+ static AndroidLeaseLifecycleBridge& processLifetime() {
59
+ // Intentionally process-lifetime: VM teardown can occur from an
60
+ // unattached native thread, where destroying a JNI global is unsafe.
61
+ static std::mutex mutex;
62
+ static AndroidLeaseLifecycleBridge* bridge = nullptr;
63
+ std::lock_guard<std::mutex> lock(mutex);
64
+ if (!bridge) {
65
+ bridge = new AndroidLeaseLifecycleBridge(
66
+ facebook::jni::make_global(facebook::jni::findClassStatic(
67
+ "com/apollohg/editor/viewer/FabricLeaseHandleBridge")));
68
+ }
69
+ return *bridge;
70
+ }
71
+
72
+ explicit AndroidLeaseLifecycleBridge(
73
+ facebook::jni::global_ref<facebook::jni::JClass> bridgeClass)
74
+ : bridgeClass_(std::move(bridgeClass)),
75
+ registerLease_(bridgeClass_->getStaticMethod<void(jint, jint, jlong)>(
76
+ "registerNativeLease")),
77
+ finalizeLease_(bridgeClass_->getStaticMethod<void(jint, jint, jlong)>(
78
+ "finalizeNativeLease")),
79
+ beginNativeMeasure_(
80
+ bridgeClass_->getStaticMethod<void(jlong)>("beginNativeMeasure")),
81
+ beginNativeFinalLayout_(bridgeClass_->getStaticMethod<void(jlong, jint, jint)>(
82
+ "beginNativeFinalLayout")),
83
+ endNativeMeasure_(
84
+ bridgeClass_->getStaticMethod<void()>("endNativeMeasure")) {}
85
+
86
+ void registerLease(SurfaceId surfaceId, Tag componentTag, uint64_t leaseHandle) const {
87
+ registerLease_(bridgeClass_, static_cast<jint>(surfaceId),
88
+ static_cast<jint>(componentTag),
89
+ static_cast<jlong>(leaseHandle));
90
+ }
91
+
92
+ void finalizeLease(SurfaceId surfaceId, Tag componentTag, uint64_t leaseHandle) const {
93
+ finalizeLease_(bridgeClass_, static_cast<jint>(surfaceId),
94
+ static_cast<jint>(componentTag),
95
+ static_cast<jlong>(leaseHandle));
96
+ }
97
+
98
+ void beginNativeMeasure(uint64_t leaseHandle) const {
99
+ beginNativeMeasure_(bridgeClass_, static_cast<jlong>(leaseHandle));
100
+ }
101
+
102
+ void beginNativeFinalLayout(
103
+ uint64_t leaseHandle,
104
+ int32_t contentOriginXPx,
105
+ int32_t contentOriginYPx) const {
106
+ beginNativeFinalLayout_(
107
+ bridgeClass_,
108
+ static_cast<jlong>(leaseHandle),
109
+ static_cast<jint>(contentOriginXPx),
110
+ static_cast<jint>(contentOriginYPx));
111
+ }
112
+
113
+ void endNativeMeasure() const {
114
+ endNativeMeasure_(bridgeClass_);
115
+ }
116
+
117
+ private:
118
+ facebook::jni::global_ref<facebook::jni::JClass> bridgeClass_;
119
+ facebook::jni::JStaticMethod<void(jint, jint, jlong)> registerLease_;
120
+ facebook::jni::JStaticMethod<void(jint, jint, jlong)> finalizeLease_;
121
+ facebook::jni::JStaticMethod<void(jlong)> beginNativeMeasure_;
122
+ facebook::jni::JStaticMethod<void(jlong, jint, jint)> beginNativeFinalLayout_;
123
+ facebook::jni::JStaticMethod<void()> endNativeMeasure_;
124
+ };
125
+
126
+ } // namespace
127
+
128
+ void PreparedProseMeasurementsManager::bindLeaseLifecycle(
129
+ SurfaceId surfaceId,
130
+ Tag componentTag,
131
+ uint64_t leaseHandle,
132
+ const std::shared_ptr<PreparedProseViewerLeaseLifecycle>& leaseLifecycle) const {
133
+ if (leaseHandle == 0 || !leaseLifecycle || !leaseLifecycle->isActive()) {
134
+ return;
135
+ }
136
+ // Yoga may run on a native worker rather than directly beneath a JNI entry
137
+ // point. ThreadScope gives the one-time class lookup an attached env and
138
+ // caches it for this native call without retaining the thread afterward.
139
+ if (!facebook::jni::Environment::isGlobalJvmAvailable()) {
140
+ return;
141
+ }
142
+ try {
143
+ facebook::jni::ThreadScope threadScope;
144
+ auto& bridge = AndroidLeaseLifecycleBridge::processLifetime();
145
+ bridge.registerLease(surfaceId, componentTag, leaseHandle);
146
+ leaseLifecycle->bindTerminalCleanup([surfaceId, componentTag, leaseHandle] {
147
+ // The class global is intentionally process-lifetime. Runtime-unavailable
148
+ // paths no-op; they never reset or destroy it without an attached env.
149
+ try {
150
+ if (!facebook::jni::Environment::isGlobalJvmAvailable()) {
151
+ return;
152
+ }
153
+ facebook::jni::ThreadScope threadScope;
154
+ try {
155
+ AndroidLeaseLifecycleBridge::processLifetime().finalizeLease(
156
+ surfaceId, componentTag, leaseHandle);
157
+ } catch (...) {
158
+ // The Java registry may already be gone during runtime teardown.
159
+ }
160
+ } catch (...) {
161
+ // A failed attach means VM teardown is already underway. The process
162
+ // lifetime bridge is deliberately left untouched.
163
+ }
164
+ });
165
+ } catch (...) {
166
+ // Runtime teardown may race a Yoga worker before it has an attached env.
167
+ // Do not bind a terminal Java callback from a partially destroyed VM.
168
+ }
169
+ }
170
+
171
+ Size PreparedProseMeasurementsManager::measure(
172
+ SurfaceId surfaceId,
173
+ Tag componentTag,
174
+ const PreparedProseViewerProps& props,
175
+ Float effectiveWidth,
176
+ Float /*pointScaleFactor*/,
177
+ uint64_t attachmentRevision,
178
+ uint64_t nativeFontRevision,
179
+ double nativeFontScale,
180
+ int32_t /*userInterfaceStyle*/,
181
+ int32_t /*accessibilityContrast*/,
182
+ uint64_t /*fontEnvironmentRevision*/,
183
+ uint64_t leaseHandle,
184
+ const std::shared_ptr<PreparedProseViewerLeaseLifecycle>& /*leaseLifecycle*/) const {
185
+ // Every object allocation, class lookup, and Java invocation below can run
186
+ // from a Yoga worker. It must live in this one attached scope; binding the
187
+ // lifecycle above is insufficient because its scope has already ended.
188
+ if (!facebook::jni::Environment::isGlobalJvmAvailable()) {
189
+ return {};
190
+ }
191
+ try {
192
+ facebook::jni::ThreadScope threadScope;
193
+ const auto& fabricUIManager =
194
+ contextContainer_->at<jni::global_ref<jobject>>("FabricUIManager");
195
+ static auto measure = facebook::jni::findClassStatic(
196
+ "com/facebook/react/fabric/FabricUIManager")
197
+ ->getMethod<jlong(
198
+ jint,
199
+ jstring,
200
+ ReadableMap::javaobject,
201
+ ReadableMap::javaobject,
202
+ ReadableMap::javaobject,
203
+ jfloat,
204
+ jfloat,
205
+ jfloat,
206
+ jfloat)>("measure");
207
+ auto& leaseBridge = AndroidLeaseLifecycleBridge::processLifetime();
208
+ folly::dynamic localData = folly::dynamic::object
209
+ ("surfaceId", static_cast<int64_t>(surfaceId))
210
+ ("componentTag", static_cast<int64_t>(componentTag))
211
+ ("leaseHandle", std::to_string(static_cast<int64_t>(leaseHandle)));
212
+ auto propsDynamic = toDynamic(props);
213
+ auto stateDynamic = toState(
214
+ attachmentRevision,
215
+ nativeFontRevision,
216
+ nativeFontScale,
217
+ leaseHandle);
218
+ const auto localDataNative = ReadableNativeMap::newObjectCxxArgs(localData);
219
+ const auto propsNative = ReadableNativeMap::newObjectCxxArgs(propsDynamic);
220
+ const auto stateNative = ReadableNativeMap::newObjectCxxArgs(stateDynamic);
221
+ const auto localDataMap = make_local(reinterpret_cast<ReadableMap::javaobject>(localDataNative.get()));
222
+ const auto propsMap = make_local(reinterpret_cast<ReadableMap::javaobject>(propsNative.get()));
223
+ const auto stateMap = make_local(reinterpret_cast<ReadableMap::javaobject>(stateNative.get()));
224
+ const auto componentName = make_jstring("PreparedProseViewer");
225
+ const auto width = effectiveWidth;
226
+ leaseBridge.beginNativeMeasure(leaseHandle);
227
+ try {
228
+ const auto result = yogaMeassureToSize(measure(
229
+ fabricUIManager,
230
+ surfaceId,
231
+ componentName.get(),
232
+ localDataMap.get(),
233
+ propsMap.get(),
234
+ stateMap.get(),
235
+ 0,
236
+ width,
237
+ 0,
238
+ std::numeric_limits<Float>::infinity()));
239
+ leaseBridge.endNativeMeasure();
240
+ return result;
241
+ } catch (...) {
242
+ // Still inside ThreadScope, so this is the only safe place to clear the
243
+ // Java thread-local handoff after FabricUIManager.measure throws.
244
+ leaseBridge.endNativeMeasure();
245
+ return {};
246
+ }
247
+ } catch (...) {
248
+ // JVM shutdown and failed attach are terminal for this synchronous Yoga
249
+ // pass. Returning an empty size is safe; never use a potentially
250
+ // destroyed JNIEnv to try to balance the Java thread-local callback.
251
+ return {};
252
+ }
253
+ }
254
+
255
+ void PreparedProseMeasurementsManager::prepareFinalLayout(
256
+ SurfaceId surfaceId,
257
+ Tag componentTag,
258
+ const PreparedProseViewerProps& props,
259
+ int32_t contentWidthPx,
260
+ int32_t contentOriginXPx,
261
+ int32_t contentOriginYPx,
262
+ Float /*pointScaleFactor*/,
263
+ uint64_t attachmentRevision,
264
+ uint64_t nativeFontRevision,
265
+ double nativeFontScale,
266
+ int32_t /*userInterfaceStyle*/,
267
+ int32_t /*accessibilityContrast*/,
268
+ uint64_t /*fontEnvironmentRevision*/,
269
+ uint64_t leaseHandle,
270
+ const std::shared_ptr<PreparedProseViewerLeaseLifecycle>& /*leaseLifecycle*/) const {
271
+ if (!facebook::jni::Environment::isGlobalJvmAvailable() ||
272
+ leaseHandle == 0) {
273
+ return;
274
+ }
275
+ try {
276
+ facebook::jni::ThreadScope threadScope;
277
+ const auto& fabricUIManager =
278
+ contextContainer_->at<jni::global_ref<jobject>>("FabricUIManager");
279
+ static auto measure = facebook::jni::findClassStatic(
280
+ "com/facebook/react/fabric/FabricUIManager")
281
+ ->getMethod<jlong(
282
+ jint,
283
+ jstring,
284
+ ReadableMap::javaobject,
285
+ ReadableMap::javaobject,
286
+ ReadableMap::javaobject,
287
+ jfloat,
288
+ jfloat,
289
+ jfloat,
290
+ jfloat)>("measure");
291
+ folly::dynamic localData = folly::dynamic::object
292
+ ("surfaceId", static_cast<int64_t>(surfaceId))
293
+ ("componentTag", static_cast<int64_t>(componentTag))
294
+ ("leaseHandle", std::to_string(static_cast<int64_t>(leaseHandle)));
295
+ auto propsDynamic = toDynamic(props);
296
+ auto stateDynamic = toState(
297
+ attachmentRevision,
298
+ nativeFontRevision,
299
+ nativeFontScale,
300
+ leaseHandle);
301
+ const auto localDataNative = ReadableNativeMap::newObjectCxxArgs(localData);
302
+ const auto propsNative = ReadableNativeMap::newObjectCxxArgs(propsDynamic);
303
+ const auto stateNative = ReadableNativeMap::newObjectCxxArgs(stateDynamic);
304
+ const auto localDataMap = make_local(
305
+ reinterpret_cast<ReadableMap::javaobject>(localDataNative.get()));
306
+ const auto propsMap = make_local(
307
+ reinterpret_cast<ReadableMap::javaobject>(propsNative.get()));
308
+ const auto stateMap = make_local(
309
+ reinterpret_cast<ReadableMap::javaobject>(stateNative.get()));
310
+ const auto componentName = make_jstring("PreparedProseViewer");
311
+ auto& leaseBridge = AndroidLeaseLifecycleBridge::processLifetime();
312
+ leaseBridge.beginNativeFinalLayout(
313
+ leaseHandle, contentOriginXPx, contentOriginYPx);
314
+ try {
315
+ measure(
316
+ fabricUIManager,
317
+ surfaceId,
318
+ componentName.get(),
319
+ localDataMap.get(),
320
+ propsMap.get(),
321
+ stateMap.get(),
322
+ static_cast<jfloat>(contentWidthPx),
323
+ static_cast<jfloat>(contentWidthPx),
324
+ 0,
325
+ std::numeric_limits<Float>::infinity());
326
+ leaseBridge.endNativeMeasure();
327
+ } catch (...) {
328
+ leaseBridge.endNativeMeasure();
329
+ }
330
+ } catch (...) {
331
+ }
332
+ }
333
+
334
+ } // namespace facebook::react
@@ -0,0 +1,17 @@
1
+ #pragma once
2
+
3
+ #include <ReactCommon/JavaTurboModule.h>
4
+ #include <ReactCommon/TurboModule.h>
5
+ #include <jsi/jsi.h>
6
+ #include <react/renderer/components/PreparedProseViewer/PreparedProseViewerComponentDescriptor.h>
7
+
8
+ namespace facebook {
9
+ namespace react {
10
+
11
+ JSI_EXPORT
12
+ std::shared_ptr<TurboModule> ReactNativeProseEditorSpec_ModuleProvider(
13
+ const std::string &moduleName,
14
+ const JavaTurboModule::InitParams &params);
15
+
16
+ } // namespace react
17
+ } // namespace facebook
@@ -0,0 +1,6 @@
1
+ #pragma once
2
+
3
+ // Narrow Android-only include boundary for the prepared prose Fabric adapter.
4
+ // Keeping this separate prevents generated React Native headers from leaking into
5
+ // the renderer-neutral registry and Kotlin facade.
6
+ #include <react/renderer/components/PreparedProseViewer/PreparedProseMeasurementsManager.h>
@@ -0,0 +1,6 @@
1
+ <resources>
2
+ <declare-styleable name="EditorSelectionHandles">
3
+ <attr name="android:textSelectHandleLeft" />
4
+ <attr name="android:textSelectHandleRight" />
5
+ </declare-styleable>
6
+ </resources>
@@ -0,0 +1,9 @@
1
+ package com.apollohg.editor.viewer
2
+
3
+ /**
4
+ * Release deliberately inlines only the drawing block. This keeps collector
5
+ * calls and instrumentation branches out of the release drawing hot path.
6
+ */
7
+ internal inline fun recordPreparedProseDraw(draw: () -> Int) {
8
+ draw()
9
+ }
package/app.plugin.js ADDED
@@ -0,0 +1,62 @@
1
+ const path = require('path');
2
+ const { createRequire } = require('module');
3
+
4
+ const pkg = require('./package.json');
5
+
6
+ const PACKAGING_EXCLUDES_PROPERTY = 'android.packagingOptions.excludes';
7
+ const LEGACY_JNA_ABI_EXCLUDES = [
8
+ '**/armeabi/libjnidispatch.so',
9
+ '**/mips/libjnidispatch.so',
10
+ '**/mips64/libjnidispatch.so',
11
+ ];
12
+
13
+ function requireExpoConfigPlugins() {
14
+ try {
15
+ return require('expo/config-plugins');
16
+ } catch (error) {
17
+ if (error.code !== 'MODULE_NOT_FOUND') {
18
+ throw error;
19
+ }
20
+
21
+ const appRequire = createRequire(path.join(process.cwd(), 'package.json'));
22
+ return appRequire('expo/config-plugins');
23
+ }
24
+ }
25
+
26
+ function mergeCommaList(value, additions) {
27
+ const values = (value || '')
28
+ .split(',')
29
+ .map((item) => item.trim())
30
+ .filter(Boolean);
31
+
32
+ return Array.from(new Set([...values, ...additions])).join(',');
33
+ }
34
+
35
+ function withReactNativeProseEditor(config) {
36
+ const { withGradleProperties } = requireExpoConfigPlugins();
37
+
38
+ return withGradleProperties(config, (config) => {
39
+ const existing = config.modResults.find(
40
+ (property) => property.type === 'property' && property.key === PACKAGING_EXCLUDES_PROPERTY
41
+ );
42
+ const value = mergeCommaList(existing && existing.value, LEGACY_JNA_ABI_EXCLUDES);
43
+
44
+ if (existing) {
45
+ existing.value = value;
46
+ } else {
47
+ config.modResults.push({
48
+ type: 'property',
49
+ key: PACKAGING_EXCLUDES_PROPERTY,
50
+ value,
51
+ });
52
+ }
53
+
54
+ return config;
55
+ });
56
+ }
57
+
58
+ module.exports = requireExpoConfigPlugins().createRunOncePlugin(
59
+ withReactNativeProseEditor,
60
+ pkg.name,
61
+ pkg.version
62
+ );
@@ -0,0 +1,62 @@
1
+ #pragma once
2
+
3
+ #include <cstdint>
4
+ #include <memory>
5
+
6
+ #include <react/renderer/components/ReactNativeProseEditorSpec/Props.h>
7
+ #include <react/renderer/components/PreparedProseViewer/PreparedProseViewerState.h>
8
+ #include <react/renderer/core/LayoutConstraints.h>
9
+ #include <react/renderer/core/ReactPrimitives.h>
10
+ #include <react/utils/ContextContainer.h>
11
+
12
+ namespace facebook::react {
13
+
14
+ class PreparedProseMeasurementsManager {
15
+ public:
16
+ explicit PreparedProseMeasurementsManager(
17
+ const std::shared_ptr<const ContextContainer>& contextContainer)
18
+ : contextContainer_(contextContainer) {}
19
+
20
+ Size measure(
21
+ SurfaceId surfaceId,
22
+ Tag componentTag,
23
+ const PreparedProseViewerProps& props,
24
+ Float effectiveWidth,
25
+ Float pointScaleFactor,
26
+ uint64_t attachmentRevision,
27
+ uint64_t nativeFontRevision,
28
+ double nativeFontScale,
29
+ int32_t userInterfaceStyle,
30
+ int32_t accessibilityContrast,
31
+ uint64_t fontEnvironmentRevision,
32
+ uint64_t leaseHandle,
33
+ const std::shared_ptr<PreparedProseViewerLeaseLifecycle>& leaseLifecycle) const;
34
+
35
+ void prepareFinalLayout(
36
+ SurfaceId surfaceId,
37
+ Tag componentTag,
38
+ const PreparedProseViewerProps& props,
39
+ int32_t contentWidthPx,
40
+ int32_t contentOriginXPx,
41
+ int32_t contentOriginYPx,
42
+ Float pointScaleFactor,
43
+ uint64_t attachmentRevision,
44
+ uint64_t nativeFontRevision,
45
+ double nativeFontScale,
46
+ int32_t userInterfaceStyle,
47
+ int32_t accessibilityContrast,
48
+ uint64_t fontEnvironmentRevision,
49
+ uint64_t leaseHandle,
50
+ const std::shared_ptr<PreparedProseViewerLeaseLifecycle>& leaseLifecycle) const;
51
+
52
+ void bindLeaseLifecycle(
53
+ SurfaceId surfaceId,
54
+ Tag componentTag,
55
+ uint64_t leaseHandle,
56
+ const std::shared_ptr<PreparedProseViewerLeaseLifecycle>& leaseLifecycle) const;
57
+
58
+ private:
59
+ const std::shared_ptr<const ContextContainer> contextContainer_;
60
+ };
61
+
62
+ } // namespace facebook::react
@@ -0,0 +1,30 @@
1
+ #pragma once
2
+
3
+ #include "PreparedProseMeasurementsManager.h"
4
+ #include "PreparedProseViewerShadowNode.h"
5
+
6
+ #include <react/renderer/core/ConcreteComponentDescriptor.h>
7
+
8
+ namespace facebook::react {
9
+
10
+ class PreparedProseViewerComponentDescriptor final
11
+ : public ConcreteComponentDescriptor<PreparedProseViewerShadowNode> {
12
+ public:
13
+ PreparedProseViewerComponentDescriptor(
14
+ const ComponentDescriptorParameters& parameters)
15
+ : ConcreteComponentDescriptor(parameters),
16
+ measurementsManager_(std::make_shared<PreparedProseMeasurementsManager>(
17
+ contextContainer_)) {}
18
+
19
+ void adopt(ShadowNode& shadowNode) const override {
20
+ ConcreteComponentDescriptor::adopt(shadowNode);
21
+ auto& preparedProseViewerShadowNode =
22
+ static_cast<PreparedProseViewerShadowNode&>(shadowNode);
23
+ preparedProseViewerShadowNode.setMeasurementsManager(measurementsManager_);
24
+ }
25
+
26
+ private:
27
+ const std::shared_ptr<PreparedProseMeasurementsManager> measurementsManager_;
28
+ };
29
+
30
+ } // namespace facebook::react