@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,168 @@
1
+ import { type ResolvedDocumentSchema } from './schemas';
2
+ import { NativeEditorErrorBase } from './NativeEditorBoundaryError';
3
+ import { NativeEditorDocumentBridge } from './NativeEditorDocumentBridge';
4
+ import {
5
+ type NativeCollaborationTransportConfig,
6
+ type NativeCollaborationTransportEvent,
7
+ } from './NativeEditorCollaborationTransport';
8
+ import {
9
+ type NativeEditorLocalAwarenessIntent,
10
+ type NativeEditorCreateConfig,
11
+ } from './NativeEditorTypes';
12
+ import {
13
+ invalidV2RequestError,
14
+ unwrapNativeEditorV2Result,
15
+ } from './NativeEditorResultNormalization';
16
+ import { buildV2CreateRequest } from './NativeEditorCreateConfig';
17
+ import { invokeNativeEditorV2 } from './NativeEditorNativeModule';
18
+ import { normalizeNativeEditorV2CreateValue } from './NativeEditorRenderNormalization';
19
+
20
+ export const NATIVE_EDITOR_DOCUMENT_HANDLE_BRAND: unique symbol = Symbol(
21
+ 'NativeEditorDocumentHandle.brand'
22
+ );
23
+
24
+ export const NATIVE_EDITOR_DOCUMENT_HANDLE_TOKEN = Object.freeze({});
25
+
26
+ export const AUTHENTIC_NATIVE_EDITOR_DOCUMENT_HANDLES = new WeakSet<object>();
27
+
28
+ export const NATIVE_EDITOR_DOCUMENT_HANDLE_DESCRIPTORS = new WeakMap<
29
+ object,
30
+ ResolvedDocumentSchema
31
+ >();
32
+
33
+ /**
34
+ * One native document session, shared by everything that touches the
35
+ * document: the editor view, the headless `useNativeEditorDocument` binding,
36
+ * and the collaboration controller. Obtain one from
37
+ * {@link createNativeEditorDocumentHandle} — it cannot be constructed
38
+ * directly — and `destroy()` it when its owner unmounts.
39
+ */
40
+ export interface NativeEditorDocumentHandle {
41
+ readonly [NATIVE_EDITOR_DOCUMENT_HANDLE_BRAND]: true;
42
+ /** Decimal-string session id, shared with the native view. */
43
+ readonly editorId: string;
44
+ /** Typed imperative access to the engine. The React APIs use this for you. */
45
+ readonly bridge: NativeEditorDocumentBridge;
46
+ readonly isDestroyed: boolean;
47
+ /** Release the native session. Every later call fails as non-retryable. */
48
+ destroy(): void;
49
+ /** Observe engine failures raised outside a caller's own call. Returns an unsubscribe function. */
50
+ addErrorListener(listener: (error: NativeEditorErrorBase) => void): () => void;
51
+ /** Point the native transport at a server, or pass null to detach. */
52
+ configureCollaborationTransport(config: NativeCollaborationTransportConfig | null): void;
53
+ /** Publish local presence, or pass null to withdraw it. */
54
+ setLocalAwareness(intent: NativeEditorLocalAwarenessIntent | null): void;
55
+ /** Observe transport state, errors, and protocol-adapter requests. Returns an unsubscribe function. */
56
+ addCollaborationTransportListener(
57
+ listener: (event: NativeCollaborationTransportEvent) => void
58
+ ): () => void;
59
+ }
60
+
61
+ export class NativeEditorDocumentHandleImpl implements NativeEditorDocumentHandle {
62
+ readonly [NATIVE_EDITOR_DOCUMENT_HANDLE_BRAND] = true as const;
63
+
64
+ constructor(
65
+ token: typeof NATIVE_EDITOR_DOCUMENT_HANDLE_TOKEN,
66
+ public readonly editorId: string,
67
+ public readonly bridge: NativeEditorDocumentBridge,
68
+ documentDescriptor: ResolvedDocumentSchema
69
+ ) {
70
+ if (token !== NATIVE_EDITOR_DOCUMENT_HANDLE_TOKEN) {
71
+ throw invalidV2RequestError(
72
+ 'NativeEditorBridge: NativeEditorDocumentHandle cannot be constructed directly'
73
+ );
74
+ }
75
+ AUTHENTIC_NATIVE_EDITOR_DOCUMENT_HANDLES.add(this);
76
+ NATIVE_EDITOR_DOCUMENT_HANDLE_DESCRIPTORS.set(this, documentDescriptor);
77
+ }
78
+
79
+ get isDestroyed(): boolean {
80
+ return this.bridge.isDestroyed;
81
+ }
82
+
83
+ destroy(): void {
84
+ this.bridge.destroy();
85
+ }
86
+
87
+ addErrorListener(listener: (error: NativeEditorErrorBase) => void): () => void {
88
+ return this.bridge.addErrorListener(listener);
89
+ }
90
+
91
+ configureCollaborationTransport(config: NativeCollaborationTransportConfig | null): void {
92
+ this.bridge.configureCollaborationTransport(config);
93
+ }
94
+
95
+ setLocalAwareness(intent: NativeEditorLocalAwarenessIntent | null): void {
96
+ this.bridge.setLocalAwareness(intent);
97
+ }
98
+
99
+ addCollaborationTransportListener(
100
+ listener: (event: NativeCollaborationTransportEvent) => void
101
+ ): () => void {
102
+ return this.bridge.addCollaborationTransportListener(listener);
103
+ }
104
+ }
105
+
106
+ /** @internal Handle-owned schema metadata for source-module view bindings. */
107
+ export function _getNativeEditorDocumentHandleDescriptor(
108
+ handle: NativeEditorDocumentHandle
109
+ ): ResolvedDocumentSchema {
110
+ _assertNativeEditorDocumentHandle(handle);
111
+ const documentDescriptor = NATIVE_EDITOR_DOCUMENT_HANDLE_DESCRIPTORS.get(handle);
112
+ if (documentDescriptor === undefined) {
113
+ throw invalidV2RequestError(
114
+ 'NativeEditorBridge: authentic NativeEditorDocumentHandle has no document descriptor'
115
+ );
116
+ }
117
+ return documentDescriptor;
118
+ }
119
+
120
+ /** @internal Source-module boundary assertion; intentionally absent from the package index. */
121
+ export function _assertNativeEditorDocumentHandle(
122
+ value: unknown
123
+ ): asserts value is NativeEditorDocumentHandle {
124
+ if (
125
+ (typeof value !== 'object' && typeof value !== 'function') ||
126
+ value === null ||
127
+ !AUTHENTIC_NATIVE_EDITOR_DOCUMENT_HANDLES.has(value)
128
+ ) {
129
+ throw invalidV2RequestError(
130
+ 'NativeEditorBridge: expected an authentic NativeEditorDocumentHandle'
131
+ );
132
+ }
133
+ }
134
+
135
+ /**
136
+ * Create the native document session every other API binds to. Create it once
137
+ * per document — `useMemo`, not on each render — and destroy it when its
138
+ * owner unmounts.
139
+ *
140
+ * @throws NativeEditorErrorBase when the config is rejected: a malformed
141
+ * schema, an out-of-range limit, or content the engine cannot parse.
142
+ *
143
+ * @example
144
+ * ```ts
145
+ * const documentHandle = useMemo(
146
+ * () => createNativeEditorDocumentHandle({
147
+ * initialization: { type: 'localHtml', html: '<p>Hello world</p>' },
148
+ * }),
149
+ * []
150
+ * );
151
+ * useEffect(() => () => documentHandle.destroy(), [documentHandle]);
152
+ * ```
153
+ */
154
+ export function createNativeEditorDocumentHandle(
155
+ config: NativeEditorCreateConfig
156
+ ): NativeEditorDocumentHandle {
157
+ const { configJson, snapshotState, documentDescriptor } = buildV2CreateRequest(config);
158
+ const value = unwrapNativeEditorV2Result(
159
+ invokeNativeEditorV2('editorV2Create', configJson, snapshotState),
160
+ normalizeNativeEditorV2CreateValue
161
+ );
162
+ return new NativeEditorDocumentHandleImpl(
163
+ NATIVE_EDITOR_DOCUMENT_HANDLE_TOKEN,
164
+ value.editorId,
165
+ new NativeEditorDocumentBridge(value.editorId),
166
+ documentDescriptor
167
+ );
168
+ }
@@ -0,0 +1,168 @@
1
+ import { NativeEditorEngineBoundaryError } from './NativeEditorBoundaryError';
2
+ import { invalidV2RequestError, nativeEditorV2U32 } from './NativeEditorResultNormalization';
3
+ import {
4
+ type NativeEditorLocalAwarenessSelection,
5
+ NativeEditorLocalAwarenessSelectionValue,
6
+ } from './NativeEditorTypes';
7
+ import { normalizeV2JsonValue, serializeV2CreateEnvelope } from './NativeEditorCreateJson';
8
+
9
+ export const LOCAL_AWARENESS_INTENT_KEYS = new Set(['state', 'focused', 'selection']);
10
+
11
+ export const LOCAL_AWARENESS_SELECTION_VALUES = new WeakMap<
12
+ object,
13
+ Readonly<{ anchor: number; head: number }>
14
+ >();
15
+
16
+ export function invalidLocalAwarenessIntent(message = 'invalid local awareness intent'): never {
17
+ throw invalidV2RequestError(`NativeEditorBridge: ${message}`);
18
+ }
19
+
20
+ /**
21
+ * Create the only caller-owned local-awareness selection accepted at the
22
+ * JavaScript-to-native boundary. The private WeakMap makes provenance an API
23
+ * capability instead of a structural object-shape check.
24
+ */
25
+ export function createNativeEditorLocalAwarenessSelection(
26
+ anchor: number,
27
+ head: number
28
+ ): NativeEditorLocalAwarenessSelection {
29
+ const acceptedAnchor = nativeEditorV2U32(anchor);
30
+ const acceptedHead = nativeEditorV2U32(head);
31
+ if (acceptedAnchor == null || acceptedHead == null) invalidLocalAwarenessIntent();
32
+
33
+ const selection: NativeEditorLocalAwarenessSelection =
34
+ new NativeEditorLocalAwarenessSelectionValue(acceptedAnchor, acceptedHead);
35
+ Object.freeze(selection);
36
+ LOCAL_AWARENESS_SELECTION_VALUES.set(selection, selection);
37
+ return selection;
38
+ }
39
+
40
+ export function isLocalAwarenessRecord(value: unknown): value is Record<string, unknown> {
41
+ if (value == null || typeof value !== 'object' || Array.isArray(value)) return false;
42
+ const prototype = Object.getPrototypeOf(value);
43
+ return prototype === Object.prototype || prototype === null;
44
+ }
45
+
46
+ export function localAwarenessOwnDataValue(record: Record<string, unknown>, key: string): unknown {
47
+ const descriptor = Object.getOwnPropertyDescriptor(record, key);
48
+ if (descriptor === undefined || !('value' in descriptor) || descriptor.enumerable !== true) {
49
+ invalidLocalAwarenessIntent();
50
+ }
51
+ return descriptor.value;
52
+ }
53
+
54
+ export function validateLocalAwarenessSelection(selection: unknown): {
55
+ anchor: number;
56
+ head: number;
57
+ } {
58
+ if (selection == null || typeof selection !== 'object') invalidLocalAwarenessIntent();
59
+
60
+ // Do not inspect caller-held values before provenance succeeds: a Proxy
61
+ // can imitate every structural and own-data check, but it cannot inherit
62
+ // this module's WeakMap identity.
63
+ const factoryValue = LOCAL_AWARENESS_SELECTION_VALUES.get(selection);
64
+ if (factoryValue === undefined) invalidLocalAwarenessIntent();
65
+
66
+ const anchor = nativeEditorV2U32(factoryValue.anchor);
67
+ const head = nativeEditorV2U32(factoryValue.head);
68
+ if (anchor == null || head == null) {
69
+ invalidLocalAwarenessIntent();
70
+ }
71
+ return { anchor, head };
72
+ }
73
+
74
+ /** Reject caller-owned sticky cursor data before a native call can occur. */
75
+ export function rejectReservedAwarenessCursor(value: unknown): void {
76
+ const pending: unknown[] = [value];
77
+ const seen = new WeakSet<object>();
78
+ while (pending.length > 0) {
79
+ const current = pending.pop();
80
+ if (current == null || typeof current !== 'object') continue;
81
+ if (seen.has(current)) continue;
82
+ seen.add(current);
83
+ for (const key of Reflect.ownKeys(current)) {
84
+ if (key === 'cursor') invalidLocalAwarenessIntent('reserved cursor key is not allowed');
85
+ const descriptor = Object.getOwnPropertyDescriptor(current, key);
86
+ if (descriptor == null || !('value' in descriptor)) invalidLocalAwarenessIntent();
87
+ pending.push(descriptor.value);
88
+ }
89
+ }
90
+ }
91
+
92
+ export function normalizeLocalAwarenessState(value: unknown): Record<string, unknown> {
93
+ try {
94
+ const normalized = normalizeV2JsonValue(value, 'local awareness state', {
95
+ seen: new WeakSet<object>(),
96
+ work: 0,
97
+ });
98
+ if (!isLocalAwarenessRecord(normalized) || Object.getPrototypeOf(normalized) !== null) {
99
+ invalidLocalAwarenessIntent();
100
+ }
101
+ rejectReservedAwarenessCursor(normalized);
102
+ return normalized;
103
+ } catch (error) {
104
+ if (error instanceof NativeEditorEngineBoundaryError) throw error;
105
+ invalidLocalAwarenessIntent();
106
+ }
107
+ }
108
+
109
+ export interface NativeEditorLocalAwarenessWireIntent {
110
+ state: Record<string, unknown>;
111
+ focused: boolean;
112
+ /** Absent retains the Rust-owned cursor; `null` clears it. */
113
+ selection?: { type: 'text'; anchor: number; head: number } | null;
114
+ }
115
+
116
+ export function validateLocalAwarenessIntent(
117
+ intent: unknown
118
+ ): NativeEditorLocalAwarenessWireIntent {
119
+ try {
120
+ if (
121
+ !isLocalAwarenessRecord(intent) ||
122
+ Reflect.ownKeys(intent).some(
123
+ (key) => typeof key !== 'string' || !LOCAL_AWARENESS_INTENT_KEYS.has(key)
124
+ ) ||
125
+ !Object.prototype.hasOwnProperty.call(intent, 'state') ||
126
+ !Object.prototype.hasOwnProperty.call(intent, 'focused')
127
+ ) {
128
+ invalidLocalAwarenessIntent();
129
+ }
130
+ const state = normalizeLocalAwarenessState(localAwarenessOwnDataValue(intent, 'state'));
131
+ const focused = localAwarenessOwnDataValue(intent, 'focused');
132
+ if (typeof focused !== 'boolean') invalidLocalAwarenessIntent();
133
+
134
+ if (!Object.prototype.hasOwnProperty.call(intent, 'selection')) {
135
+ // Absent: retain whatever cursor Rust already holds.
136
+ return { state, focused };
137
+ }
138
+ const rawSelection = localAwarenessOwnDataValue(intent, 'selection');
139
+ if (rawSelection === null) return { state, focused, selection: null };
140
+ const selection = validateLocalAwarenessSelection(rawSelection);
141
+ return { state, focused, selection: { type: 'text', ...selection } };
142
+ } catch (error) {
143
+ if (error instanceof NativeEditorEngineBoundaryError) throw error;
144
+ invalidLocalAwarenessIntent();
145
+ }
146
+ }
147
+
148
+ export function serializeLocalAwarenessIntent(
149
+ intent: NativeEditorLocalAwarenessWireIntent
150
+ ): string {
151
+ try {
152
+ const wire = Object.create(null) as Record<string, unknown>;
153
+ wire.state = intent.state;
154
+ wire.focused = intent.focused;
155
+ if (intent.selection === null) {
156
+ wire.selection = null;
157
+ } else if (intent.selection !== undefined) {
158
+ const selection = Object.create(null) as Record<string, unknown>;
159
+ selection.type = intent.selection.type;
160
+ selection.anchor = intent.selection.anchor;
161
+ selection.head = intent.selection.head;
162
+ wire.selection = selection;
163
+ }
164
+ return serializeV2CreateEnvelope(wire);
165
+ } catch {
166
+ invalidLocalAwarenessIntent();
167
+ }
168
+ }
@@ -0,0 +1,97 @@
1
+ import { requireNativeModule } from 'expo-modules-core';
2
+ import { type NativeEditorError } from './NativeEditorBoundaryError';
3
+
4
+ export let _nativeModule: NativeEditorModule | null = null;
5
+
6
+ export function getNativeModule(): NativeEditorModule {
7
+ if (!_nativeModule) {
8
+ _nativeModule = requireNativeModule<NativeEditorModule>('NativeEditor');
9
+ }
10
+ return _nativeModule;
11
+ }
12
+
13
+ /** @internal Reset the cached native module reference. For testing only. */
14
+ export function _resetNativeModuleCache(): void {
15
+ _nativeModule = null;
16
+ }
17
+
18
+ // The only construction path. Consumes the frozen v2 result records
19
+ // ({ value, error }, exactly one side set), normalizes them at the JS boundary
20
+ // (decimal-string u64s, direct binaries, unsafe-integer rejection), and raises
21
+ // typed per-domain errors with a non-retryable class for
22
+ // ENGINE_INVARIANT_FAILED and destroyed lifecycles.
23
+
24
+ export const ERR_V2_NATIVE_RESPONSE =
25
+ 'NativeEditorBridge: invalid v2 result record from native module';
26
+
27
+ export const ERR_V2_DESTROYED = 'NativeEditorBridge: v2 editor handle has been destroyed';
28
+
29
+ export const V2_ENVELOPE_VERSION = 1;
30
+
31
+ /**
32
+ * The v2 surface of the NativeEditor native module — the complete
33
+ * production ABI. Every call resolves the method lazily and fails clearly
34
+ * when the v2 surface is absent. Decimal-string identifiers keep full u64
35
+ * fidelity across the JavaScript boundary, and binaries travel as direct
36
+ * Uint8Array values (never JSON number arrays).
37
+ */
38
+ export interface NativeEditorModule {
39
+ editorV2Create(configJson: string, snapshotState: Uint8Array | null): unknown;
40
+ editorV2Destroy(editorId: string): unknown;
41
+ editorV2GetState(editorId: string): unknown;
42
+ editorV2GetDocumentJson(editorId: string): unknown;
43
+ editorV2GetDocumentHtml(editorId: string): unknown;
44
+ editorV2GetContentSnapshot(editorId: string): unknown;
45
+ editorV2ReplaceDocument(editorId: string, requestJson: string): unknown;
46
+ editorV2ApplyInput(editorId: string, requestJson: string): unknown;
47
+ editorV2ApplyCommand(editorId: string, requestJson: string): unknown;
48
+ editorV2ApplyLocalApi(editorId: string, requestJson: string): unknown;
49
+ editorV2SetSelection(editorId: string, requestJson: string): unknown;
50
+ editorV2Undo(editorId: string, requestJson: string): unknown;
51
+ editorV2Redo(editorId: string, requestJson: string): unknown;
52
+ editorV2RenderUpdate(
53
+ editorId: string,
54
+ mirrorScalarAnchor: number | null,
55
+ mirrorScalarHead: number | null
56
+ ): unknown;
57
+ editorV2CollaborationConfigureTransport(
58
+ editorId: string,
59
+ configJsonOrNull: string | null
60
+ ): unknown;
61
+ editorV2CollaborationResolveProtocolAdapter(
62
+ editorId: string,
63
+ attemptId: string,
64
+ eventId: string,
65
+ responseJson: string
66
+ ): unknown;
67
+ editorV2CollaborationSetAwareness(editorId: string, awarenessJson: string): unknown;
68
+ editorV2SnapshotExport(editorId: string): unknown;
69
+ editorV2SnapshotRestore(
70
+ editorId: string,
71
+ metadataJson: string,
72
+ encodedState: Uint8Array
73
+ ): unknown;
74
+ addListener(
75
+ eventName: 'onCollaborationTransportEvent',
76
+ listener: (event: unknown) => void
77
+ ): { remove(): void };
78
+ }
79
+
80
+ export function invokeNativeEditorV2<K extends keyof NativeEditorModule>(
81
+ name: K,
82
+ ...args: Parameters<NativeEditorModule[K]>
83
+ ): unknown {
84
+ const nativeModule = getNativeModule() as unknown as Record<string, unknown>;
85
+ const method = nativeModule[name as string];
86
+ if (typeof method !== 'function') {
87
+ throw new Error(
88
+ `NativeEditorBridge: native module does not expose the v2 entry ${String(name)}`
89
+ );
90
+ }
91
+ return (method as (...fnArgs: unknown[]) => unknown).apply(nativeModule, args);
92
+ }
93
+
94
+ /** The discriminated envelope every v2 result record normalizes into. */
95
+ export type NativeEditorResult<T> =
96
+ | { ok: true; value: T }
97
+ | { ok: false; error: NativeEditorError };