@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,203 @@
1
+ import os
2
+ import UIKit
3
+
4
+ extension EditorTextView {
5
+ func performToolbarToggleMark(_ markName: String) {
6
+ guard prepareForToolbarCommand() else { return }
7
+ guard let selection = currentScalarSelection() else { return }
8
+ performInterceptedInput {
9
+ let updateJSON = EditorV2Shadow.toggleMarkAtSelectionScalar(
10
+ id: editorId,
11
+ scalarAnchor: selection.anchor,
12
+ scalarHead: selection.head,
13
+ markName: markName
14
+ )
15
+ applyUpdateJSON(updateJSON)
16
+ }
17
+ }
18
+
19
+ func performToolbarToggleList(_ listType: String, isActive: Bool) {
20
+ guard prepareForToolbarCommand() else { return }
21
+ guard let selection = currentScalarSelection() else { return }
22
+ performInterceptedInput {
23
+ let updateJSON = isActive
24
+ ? EditorV2Shadow.unwrapFromListAtSelectionScalar(
25
+ id: editorId,
26
+ scalarAnchor: selection.anchor,
27
+ scalarHead: selection.head
28
+ )
29
+ : EditorV2Shadow.wrapInListAtSelectionScalar(
30
+ id: editorId,
31
+ scalarAnchor: selection.anchor,
32
+ scalarHead: selection.head,
33
+ listType: listType
34
+ )
35
+ applyUpdateJSON(updateJSON)
36
+ }
37
+ }
38
+
39
+ func performToolbarToggleBlockquote() {
40
+ guard prepareForToolbarCommand() else { return }
41
+ guard let selection = currentScalarSelection() else { return }
42
+ performInterceptedInput {
43
+ let updateJSON = EditorV2Shadow.toggleBlockquoteAtSelectionScalar(
44
+ id: editorId,
45
+ scalarAnchor: selection.anchor,
46
+ scalarHead: selection.head
47
+ )
48
+ applyUpdateJSON(updateJSON)
49
+ }
50
+ }
51
+
52
+ func performToolbarToggleHeading(_ level: Int) {
53
+ guard prepareForToolbarCommand() else { return }
54
+ guard let selection = currentScalarSelection() else { return }
55
+ guard let level = UInt8(exactly: level), (1...6).contains(level) else { return }
56
+ performInterceptedInput {
57
+ let updateJSON = EditorV2Shadow.toggleHeadingAtSelectionScalar(
58
+ id: editorId,
59
+ scalarAnchor: selection.anchor,
60
+ scalarHead: selection.head,
61
+ level: level
62
+ )
63
+ applyUpdateJSON(updateJSON)
64
+ }
65
+ }
66
+
67
+ func performToolbarIndentListItem() {
68
+ guard prepareForToolbarCommand() else { return }
69
+ guard let selection = currentScalarSelection() else { return }
70
+ performInterceptedInput {
71
+ let updateJSON = EditorV2Shadow.indentListItemAtSelectionScalar(
72
+ id: editorId,
73
+ scalarAnchor: selection.anchor,
74
+ scalarHead: selection.head
75
+ )
76
+ applyUpdateJSON(updateJSON)
77
+ }
78
+ }
79
+
80
+ func performToolbarOutdentListItem() {
81
+ guard prepareForToolbarCommand() else { return }
82
+ guard let selection = currentScalarSelection() else { return }
83
+ performInterceptedInput {
84
+ let updateJSON = EditorV2Shadow.outdentListItemAtSelectionScalar(
85
+ id: editorId,
86
+ scalarAnchor: selection.anchor,
87
+ scalarHead: selection.head
88
+ )
89
+ applyUpdateJSON(updateJSON)
90
+ }
91
+ }
92
+
93
+ func performToolbarInsertNode(_ nodeType: String) {
94
+ guard prepareForToolbarCommand() else { return }
95
+ performInterceptedInput {
96
+ insertNodeInRust(nodeType)
97
+ }
98
+ }
99
+
100
+ func performToolbarUndo() {
101
+ guard prepareForToolbarCommand() else { return }
102
+ performInterceptedInput {
103
+ let updateJSON = EditorV2Shadow.undo(id: editorId)
104
+ applyUpdateJSON(updateJSON)
105
+ }
106
+ }
107
+
108
+ func performToolbarRedo() {
109
+ guard prepareForToolbarCommand() else { return }
110
+ performInterceptedInput {
111
+ let updateJSON = EditorV2Shadow.redo(id: editorId)
112
+ applyUpdateJSON(updateJSON)
113
+ }
114
+ }
115
+
116
+ private func prepareForToolbarCommand() -> Bool {
117
+ guard editorId != 0 else { return false }
118
+ guard isEditable else { return false }
119
+ guard finishExternalTextCompositionBeforeInteractionIfNeeded() else { return false }
120
+ return prepareForExternalEditorUpdate()
121
+ }
122
+
123
+ /// Insert text at a scalar position via the Rust editor.
124
+ func insertTextInRust(_ text: String, at scalarPos: UInt32) {
125
+ Self.inputLog.debug(
126
+ "[rust.insertTextScalar] text=\(self.preview(text), privacy: .public) scalarPos=\(scalarPos) selection=\(self.selectionSummary(), privacy: .public)"
127
+ )
128
+ let updateJSON = EditorV2Shadow.insertTextScalar(id: editorId, scalarPos: scalarPos, text: text)
129
+ applyUpdateJSON(updateJSON)
130
+ }
131
+
132
+ private func replaceTextRangeInRust(from: UInt32, to: UInt32, with text: String) {
133
+ Self.inputLog.debug(
134
+ "[rust.replaceTextScalar] text=\(self.preview(text), privacy: .public) scalar=\(from)-\(to) selection=\(self.selectionSummary(), privacy: .public)"
135
+ )
136
+ let updateJSON = EditorV2Shadow.replaceTextScalar(
137
+ id: editorId,
138
+ scalarFrom: from,
139
+ scalarTo: to,
140
+ text: text
141
+ )
142
+ applyUpdateJSON(updateJSON)
143
+ }
144
+
145
+ func insertNodeInRust(_ nodeType: String) {
146
+ guard let selection = currentScalarSelection() else { return }
147
+ Self.inputLog.debug(
148
+ "[rust.insertNode] nodeType=\(nodeType, privacy: .public) selection=\(self.selectionSummary(), privacy: .public)"
149
+ )
150
+ let updateJSON = EditorV2Shadow.insertNodeAtSelectionScalar(
151
+ id: editorId,
152
+ scalarAnchor: selection.anchor,
153
+ scalarHead: selection.head,
154
+ nodeType: nodeType
155
+ )
156
+ applyUpdateJSON(updateJSON)
157
+ }
158
+
159
+ /// Delete a scalar range via the Rust editor.
160
+ func deleteScalarRangeInRust(from: UInt32, to: UInt32) {
161
+ guard from < to else { return }
162
+ Self.inputLog.debug(
163
+ "[rust.deleteScalarRange] scalar=\(from)-\(to) selection=\(self.selectionSummary(), privacy: .public)"
164
+ )
165
+ let updateJSON = EditorV2Shadow.deleteScalarRange(id: editorId, scalarFrom: from, scalarTo: to)
166
+ applyUpdateJSON(updateJSON)
167
+ }
168
+
169
+ func deleteBackwardAtSelectionScalarInRust(anchor: UInt32, head: UInt32) {
170
+ Self.inputLog.debug(
171
+ "[rust.deleteBackwardAtSelectionScalar] scalar=\(anchor)-\(head) selection=\(self.selectionSummary(), privacy: .public)"
172
+ )
173
+ let updateJSON = EditorV2Shadow.deleteBackwardAtSelectionScalar(
174
+ id: editorId,
175
+ scalarAnchor: anchor,
176
+ scalarHead: head
177
+ )
178
+ applyUpdateJSON(updateJSON)
179
+ }
180
+
181
+ func toggleTaskItemCheckedAtSelectionScalarInRust(anchor: UInt32, head: UInt32) {
182
+ Self.inputLog.debug(
183
+ "[rust.toggleTaskItemCheckedAtSelectionScalar] scalar=\(anchor)-\(head) selection=\(self.selectionSummary(), privacy: .public)"
184
+ )
185
+ let updateJSON = EditorV2Shadow.toggleTaskItemCheckedAtSelectionScalar(
186
+ id: editorId,
187
+ scalarAnchor: anchor,
188
+ scalarHead: head
189
+ )
190
+ applyUpdateJSON(updateJSON)
191
+ }
192
+
193
+ /// Delete a document-position range via the Rust editor.
194
+ private func deleteRangeInRust(from: UInt32, to: UInt32) {
195
+ guard from < to else { return }
196
+ Self.inputLog.debug(
197
+ "[rust.deleteRange] doc=\(from)-\(to) selection=\(self.selectionSummary(), privacy: .public)"
198
+ )
199
+ let updateJSON = EditorV2Shadow.deleteRange(id: editorId, from: from, to: to)
200
+ applyUpdateJSON(updateJSON)
201
+ }
202
+
203
+ }
@@ -0,0 +1,65 @@
1
+ import UIKit
2
+
3
+ // MARK: - EditorTextViewDelegate
4
+
5
+ /// Delegate protocol for EditorTextView to communicate state changes
6
+ /// back to the hosting view (Fabric component or UIKit container).
7
+ protocol EditorTextViewDelegate: AnyObject {
8
+ /// Called when the editor's selection changes.
9
+ /// - Parameters:
10
+ /// - textView: The editor text view.
11
+ /// - anchor: Scalar offset of the selection anchor.
12
+ /// - head: Scalar offset of the selection head.
13
+ func editorTextView(_ textView: EditorTextView, selectionDidChange anchor: UInt32, head: UInt32)
14
+
15
+ /// Called when the editor content is updated after a Rust operation.
16
+ /// - Parameters:
17
+ /// - textView: The editor text view.
18
+ /// - updateJSON: The full EditorUpdate JSON string from Rust.
19
+ func editorTextView(_ textView: EditorTextView, didReceiveUpdate updateJSON: String)
20
+
21
+ func editorTextView(_ textView: EditorTextView, didEndExternalTextComposition resultJSON: String)
22
+ }
23
+
24
+ extension EditorTextViewDelegate {
25
+ func editorTextView(_ textView: EditorTextView, didEndExternalTextComposition resultJSON: String) {}
26
+ }
27
+
28
+ // MARK: - EditorTextView
29
+
30
+ /// Dedicated `UITextViewDelegate`, because the editor must not be its own.
31
+ ///
32
+ /// Proxy keyboard integrations forward unimplemented selectors via
33
+ /// `forwardingTarget(for:)`, so UIKit's private `keyboardInputChangedSelection:`
34
+ /// bounces view -> proxy -> view until the stack overflows (APOLLO-REACT-56).
35
+ /// A plain NSObject does not respond to those private selectors.
36
+ final class EditorTextViewInternalDelegate: NSObject, UITextViewDelegate {
37
+ private weak var editor: EditorTextView?
38
+
39
+ init(editor: EditorTextView) {
40
+ self.editor = editor
41
+ }
42
+
43
+ func textViewDidChangeSelection(_ textView: UITextView) {
44
+ editor?.textViewDidChangeSelection(textView)
45
+ }
46
+
47
+ func textView(
48
+ _ textView: UITextView,
49
+ shouldInteractWith URL: URL,
50
+ in characterRange: NSRange,
51
+ interaction: UITextItemInteraction
52
+ ) -> Bool {
53
+ editor?.textView(textView, shouldInteractWith: URL, in: characterRange, interaction: interaction) ?? false
54
+ }
55
+
56
+ func textView(
57
+ _ textView: UITextView,
58
+ shouldInteractWith textAttachment: NSTextAttachment,
59
+ in characterRange: NSRange,
60
+ interaction: UITextItemInteraction
61
+ ) -> Bool {
62
+ editor?.textView(textView, shouldInteractWith: textAttachment, in: characterRange, interaction: interaction)
63
+ ?? false
64
+ }
65
+ }
@@ -0,0 +1,225 @@
1
+ import os
2
+ import UIKit
3
+
4
+ extension EditorTextView {
5
+ struct ApplyUpdateTrace {
6
+ let attemptedPatch: Bool
7
+ let patchStartIndex: Int?
8
+ let patchDeleteCount: Int?
9
+ let patchRenderBlockCount: Int?
10
+ let usedPatch: Bool
11
+ let usedSmallPatchTextMutation: Bool
12
+ let applyRenderReplaceUtf16Length: Int
13
+ let applyRenderReplacementUtf16Length: Int
14
+ let parseNanos: UInt64
15
+ let resolveRenderBlocksNanos: UInt64
16
+ let patchEligibilityNanos: UInt64
17
+ let patchTrimNanos: UInt64
18
+ let patchMetadataNanos: UInt64
19
+ let buildRenderNanos: UInt64
20
+ let applyRenderNanos: UInt64
21
+ let selectionNanos: UInt64
22
+ let postApplyNanos: UInt64
23
+ let totalNanos: UInt64
24
+ let applyRenderTextMutationNanos: UInt64
25
+ let applyRenderBeginEditingNanos: UInt64
26
+ let applyRenderEndEditingNanos: UInt64
27
+ let applyRenderStringMutationNanos: UInt64
28
+ let applyRenderAttributeMutationNanos: UInt64
29
+ let applyRenderAuthorizedTextNanos: UInt64
30
+ let applyRenderCacheInvalidationNanos: UInt64
31
+ let selectionResolveNanos: UInt64
32
+ let selectionAssignmentNanos: UInt64
33
+ let selectionChromeNanos: UInt64
34
+ let postApplyTypingAttributesNanos: UInt64
35
+ let postApplyHeightNotifyNanos: UInt64
36
+ let postApplyHeightNotifyMeasureNanos: UInt64
37
+ let postApplyHeightNotifyCallbackNanos: UInt64
38
+ let postApplyHeightNotifyEnsureLayoutNanos: UInt64
39
+ let postApplyHeightNotifyUsedRectNanos: UInt64
40
+ let postApplyHeightNotifyContentSizeNanos: UInt64
41
+ let postApplyHeightNotifySizeThatFitsNanos: UInt64
42
+ let postApplySelectionOrContentCallbackNanos: UInt64
43
+ }
44
+
45
+ struct PatchApplyTrace {
46
+ let applied: Bool
47
+ let eligibilityNanos: UInt64
48
+ let trimNanos: UInt64
49
+ let metadataNanos: UInt64
50
+ let buildRenderNanos: UInt64
51
+ let applyRenderNanos: UInt64
52
+ let applyRenderReplaceUtf16Length: Int
53
+ let applyRenderReplacementUtf16Length: Int
54
+ let applyRenderTextMutationNanos: UInt64
55
+ let applyRenderBeginEditingNanos: UInt64
56
+ let applyRenderEndEditingNanos: UInt64
57
+ let applyRenderStringMutationNanos: UInt64
58
+ let applyRenderAttributeMutationNanos: UInt64
59
+ let applyRenderAuthorizedTextNanos: UInt64
60
+ let applyRenderCacheInvalidationNanos: UInt64
61
+ let usedSmallPatchTextMutation: Bool
62
+ }
63
+
64
+ struct ApplyRenderTrace {
65
+ let totalNanos: UInt64
66
+ let replaceUtf16Length: Int
67
+ let replacementUtf16Length: Int
68
+ let textMutationNanos: UInt64
69
+ let beginEditingNanos: UInt64
70
+ let endEditingNanos: UInt64
71
+ let stringMutationNanos: UInt64
72
+ let attributeMutationNanos: UInt64
73
+ let authorizedTextNanos: UInt64
74
+ let cacheInvalidationNanos: UInt64
75
+ let usedSmallPatchTextMutation: Bool
76
+ }
77
+
78
+ struct SelectionApplyTrace {
79
+ let totalNanos: UInt64
80
+ let resolveNanos: UInt64
81
+ let assignmentNanos: UInt64
82
+ let chromeNanos: UInt64
83
+ }
84
+
85
+ struct PostApplyTrace {
86
+ let totalNanos: UInt64
87
+ let typingAttributesNanos: UInt64
88
+ let heightNotifyNanos: UInt64
89
+ let heightNotifyMeasureNanos: UInt64
90
+ let heightNotifyCallbackNanos: UInt64
91
+ let heightNotifyEnsureLayoutNanos: UInt64
92
+ let heightNotifyUsedRectNanos: UInt64
93
+ let heightNotifyContentSizeNanos: UInt64
94
+ let heightNotifySizeThatFitsNanos: UInt64
95
+ let selectionOrContentCallbackNanos: UInt64
96
+ }
97
+
98
+ func isPlaceholderVisibleForTesting() -> Bool {
99
+ !placeholderLabel.isHidden
100
+ }
101
+
102
+ func placeholderFrameForTesting() -> CGRect {
103
+ placeholderLabel.frame
104
+ }
105
+
106
+ func lastRenderAppliedPatch() -> Bool {
107
+ lastRenderAppliedPatchForTesting
108
+ }
109
+
110
+ func authorizedTextForTesting() -> String {
111
+ lastAuthorizedText
112
+ }
113
+
114
+ func lastApplyUpdateTrace() -> ApplyUpdateTrace? {
115
+ lastApplyUpdateTraceForTesting
116
+ }
117
+
118
+ func isUsingInternalTextViewDelegateForTesting() -> Bool {
119
+ (delegate as AnyObject?) === internalTextViewDelegate
120
+ }
121
+
122
+ func blockquoteStripeRectsForTesting() -> [CGRect] {
123
+ editorLayoutManager.blockquoteStripeRectsForTesting(in: textStorage)
124
+ }
125
+
126
+ func resetBlockquoteStripeDrawPassesForTesting() {
127
+ editorLayoutManager.resetBlockquoteStripeDrawPassesForTesting()
128
+ }
129
+
130
+ func blockquoteStripeDrawPassesForTesting() -> [[CGRect]] {
131
+ editorLayoutManager.blockquoteStripeDrawPassesForTesting
132
+ }
133
+
134
+ func resetCodeBlockDrawPassesForTesting() {
135
+ editorLayoutManager.resetCodeBlockDrawPassesForTesting()
136
+ }
137
+
138
+ func codeBlockDrawPassesForTesting() -> [[CGRect]] {
139
+ editorLayoutManager.codeBlockDrawPassesForTesting
140
+ }
141
+
142
+ @discardableResult
143
+ func selectImageAttachmentForTesting(at location: CGPoint) -> Bool {
144
+ selectImageAttachmentIfNeeded(at: location)
145
+ }
146
+
147
+ func imageSelectionTapWouldHandleForTesting(at location: CGPoint) -> Bool {
148
+ imageAttachmentRange(at: location) != nil
149
+ }
150
+
151
+ func taskListMarkerParagraphStartForTesting(at location: CGPoint) -> Int? {
152
+ taskListMarkerParagraphStart(at: location)
153
+ }
154
+
155
+ func imageSelectionTapCancelsTouchesForTesting() -> Bool {
156
+ imageSelectionTapRecognizer.cancelsTouchesInView
157
+ }
158
+
159
+ func imageSelectionTapYieldsToDefaultTapForTesting() -> Bool {
160
+ gestureRecognizer(
161
+ imageSelectionTapRecognizer,
162
+ shouldBeRequiredToFailBy: UITapGestureRecognizer()
163
+ ) || gestureRecognizer(
164
+ imageSelectionTapRecognizer,
165
+ shouldRequireFailureOf: UITapGestureRecognizer()
166
+ )
167
+ }
168
+
169
+ func measuredAutoGrowHeightForTesting(width: CGFloat) -> CGFloat {
170
+ measuredAutoGrowHeight(forWidth: width)
171
+ }
172
+
173
+ func preview(_ text: String, limit: Int = 32) -> String {
174
+ let normalized = text.replacingOccurrences(of: "\n", with: "\\n")
175
+ if normalized.count <= limit {
176
+ return normalized
177
+ }
178
+ return "\(normalized.prefix(limit))…"
179
+ }
180
+
181
+ func textSnapshotSummary() -> String {
182
+ let text = textStorage.string
183
+ return "len=\(text.count) preview=\"\(preview(text))\""
184
+ }
185
+
186
+ func selectionSummary() -> String {
187
+ guard let range = selectedTextRange else { return "none" }
188
+ // The UTF-16 offsets are what UIKit actually holds; every scalar below
189
+ // is derived through the conversion table. Logging both is what tells
190
+ // a caret that moved apart from a table that changed under a caret
191
+ // that did not.
192
+ let anchorUtf16 = offset(from: beginningOfDocument, to: range.start)
193
+ let headUtf16 = offset(from: beginningOfDocument, to: range.end)
194
+ let anchorScalar = PositionBridge.textViewToScalar(range.start, in: self)
195
+ let headScalar = PositionBridge.textViewToScalar(range.end, in: self)
196
+ guard editorId != 0 else {
197
+ return "utf16=\(anchorUtf16)-\(headUtf16) scalar=\(anchorScalar)-\(headScalar)"
198
+ }
199
+ let docAnchor = EditorV2Shadow.scalarToDoc(id: editorId, scalar: anchorScalar)
200
+ let docHead = EditorV2Shadow.scalarToDoc(id: editorId, scalar: headScalar)
201
+ return "utf16=\(anchorUtf16)-\(headUtf16) scalar=\(anchorScalar)-\(headScalar) doc=\(docAnchor)-\(docHead)"
202
+ }
203
+
204
+ func selectionSummary(from selection: [String: Any]) -> String {
205
+ guard let type = selection["type"] as? String else { return "unknown" }
206
+ switch type {
207
+ case "text":
208
+ let anchor = v2ExactUInt32(selection["anchor"] as? NSNumber) ?? 0
209
+ let head = v2ExactUInt32(selection["head"] as? NSNumber) ?? 0
210
+ return "text doc=\(anchor)-\(head)"
211
+ case "node":
212
+ let pos = v2ExactUInt32(selection["pos"] as? NSNumber) ?? 0
213
+ return "node doc=\(pos)"
214
+ case "all":
215
+ return "all"
216
+ default:
217
+ return type
218
+ }
219
+ }
220
+
221
+ func expireNativeTextMutationAfterBlurDeadlineForTesting() {
222
+ nativeTextMutationAfterBlurDeadline = ProcessInfo.processInfo.systemUptime - 0.001
223
+ }
224
+
225
+ }