@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,384 @@
1
+ package com.apollohg.editor
2
+
3
+ import android.os.Build
4
+ import android.provider.Settings
5
+ import android.text.Annotation
6
+ import android.text.InputType
7
+ import android.text.SpannableStringBuilder
8
+ import android.text.Spanned
9
+ import android.view.inputmethod.EditorInfo
10
+ import android.view.inputmethod.InputConnection
11
+ import com.apollohg.editor.EditorEditText.Companion.DEFAULT_AUTO_CAPITALIZE
12
+ import com.apollohg.editor.EditorEditText.Companion.DEFAULT_AUTO_CORRECT
13
+ import com.apollohg.editor.EditorEditText.Companion.DEFAULT_KEYBOARD_TYPE
14
+ import com.apollohg.editor.EditorEditText.ImeInitialSurroundingText
15
+
16
+ internal fun EditorEditText.setAutoCapitalizeImpl(autoCapitalize: String?) {
17
+ val next = when (autoCapitalize) {
18
+ "none",
19
+ "sentences",
20
+ "words",
21
+ "characters" -> autoCapitalize
22
+
23
+ else -> DEFAULT_AUTO_CAPITALIZE
24
+ }
25
+ if (nativeAutoCapitalize == next) return
26
+ nativeAutoCapitalize = next
27
+ applyInputTraits()
28
+ }
29
+
30
+ internal fun EditorEditText.setAutoCorrectImpl(autoCorrect: Boolean?) {
31
+ val next = autoCorrect ?: DEFAULT_AUTO_CORRECT
32
+ if (nativeAutoCorrect == next) return
33
+ nativeAutoCorrect = next
34
+ applyInputTraits()
35
+ }
36
+
37
+ internal fun EditorEditText.setKeyboardTypeImpl(keyboardType: String?) {
38
+ val next = when (keyboardType) {
39
+ "default",
40
+ "email-address",
41
+ "numeric",
42
+ "phone-pad",
43
+ "ascii-capable",
44
+ "numbers-and-punctuation",
45
+ "url",
46
+ "number-pad",
47
+ "name-phone-pad",
48
+ "decimal-pad",
49
+ "twitter",
50
+ "web-search",
51
+ "visible-password",
52
+ "ascii-capable-number-pad" -> keyboardType
53
+
54
+ else -> DEFAULT_KEYBOARD_TYPE
55
+ }
56
+ if (nativeKeyboardType == next) return
57
+ nativeKeyboardType = next
58
+ applyInputTraits()
59
+ }
60
+
61
+ internal fun EditorEditText.setPrivateImeOptionsForEditorImpl(value: String?) {
62
+ if (privateImeOptions == value) return
63
+ privateImeOptions = value
64
+ restartInputForEditorIfFocused("privateImeOptions")
65
+ }
66
+
67
+ internal fun EditorEditText.applyInputTraits() {
68
+ val nextInputType = resolvedInputType()
69
+ if (inputType == nextInputType) return
70
+
71
+ val currentStart = selectionStart
72
+ val currentEnd = selectionEnd
73
+ val authorizedSelection = authorizedSelectionForTransientInputRestore(
74
+ currentStart,
75
+ currentEnd
76
+ )
77
+ discardTransientInputAndRestoreAuthorizedTextForEditor()
78
+ setRawInputType(nextInputType)
79
+
80
+ val editable = text
81
+ if (editable != null && authorizedSelection != null) {
82
+ setSelection(
83
+ authorizedSelection.first.coerceIn(0, editable.length),
84
+ authorizedSelection.second.coerceIn(0, editable.length)
85
+ )
86
+ }
87
+
88
+ if (hasFocus()) {
89
+ restartInputForEditor()
90
+ }
91
+ }
92
+
93
+ internal fun EditorEditText.resolvedInputType(): Int {
94
+ var nextInputType = when (nativeKeyboardType) {
95
+ "email-address" ->
96
+ InputType.TYPE_CLASS_TEXT or
97
+ InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS
98
+
99
+ "url" ->
100
+ InputType.TYPE_CLASS_TEXT or
101
+ InputType.TYPE_TEXT_VARIATION_URI
102
+
103
+ "phone-pad" -> InputType.TYPE_CLASS_PHONE
104
+
105
+ "number-pad" -> InputType.TYPE_CLASS_NUMBER
106
+
107
+ "decimal-pad" ->
108
+ InputType.TYPE_CLASS_NUMBER or
109
+ InputType.TYPE_NUMBER_FLAG_DECIMAL
110
+
111
+ "numeric" ->
112
+ InputType.TYPE_CLASS_NUMBER or
113
+ InputType.TYPE_NUMBER_FLAG_DECIMAL or
114
+ InputType.TYPE_NUMBER_FLAG_SIGNED
115
+
116
+ "visible-password" ->
117
+ InputType.TYPE_CLASS_TEXT or
118
+ InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
119
+
120
+ else -> InputType.TYPE_CLASS_TEXT
121
+ }
122
+
123
+ if ((nextInputType and InputType.TYPE_MASK_CLASS) == InputType.TYPE_CLASS_TEXT) {
124
+ nextInputType = nextInputType or InputType.TYPE_TEXT_FLAG_MULTI_LINE
125
+ nextInputType = nextInputType or when (nativeAutoCapitalize) {
126
+ "none" -> 0
127
+ "words" -> InputType.TYPE_TEXT_FLAG_CAP_WORDS
128
+ "characters" -> InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS
129
+ else -> InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
130
+ }
131
+ nextInputType = nextInputType or if (nativeAutoCorrect) {
132
+ InputType.TYPE_TEXT_FLAG_AUTO_CORRECT
133
+ } else {
134
+ InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS
135
+ }
136
+ }
137
+
138
+ return nextInputType
139
+ }
140
+
141
+ internal fun EditorEditText.applyInitialSurroundingTextForIme(
142
+ outAttrs: EditorInfo,
143
+ mapper: ImeTextCoordinateMapper
144
+ ): ImeInitialSurroundingText? {
145
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) return null
146
+ val initialText = initialSurroundingTextForImeForEditor(mapper) ?: return null
147
+
148
+ outAttrs.initialSelStart = initialText.selectionStart
149
+ outAttrs.initialSelEnd = initialText.selectionEnd
150
+ outAttrs.setInitialSurroundingText(initialText.text)
151
+ return initialText
152
+ }
153
+
154
+ internal fun ImeInitialSurroundingText.textBeforeSelectionTailForImeLog(limit: Int = 24): String {
155
+ val end = selectionStart.coerceIn(0, text.length)
156
+ val start = maxOf(0, end - limit)
157
+ return text.substring(start, end).toImeTraceSnippet()
158
+ }
159
+
160
+ private fun String.toImeTraceSnippet(): String {
161
+ val builder = StringBuilder(length)
162
+ forEach { ch ->
163
+ when (ch) {
164
+ '\n' -> builder.append("\\n")
165
+
166
+ '\r' -> builder.append("\\r")
167
+
168
+ '\t' -> builder.append("\\t")
169
+
170
+ '\\' -> builder.append("\\\\")
171
+
172
+ '"' -> builder.append("\\\"")
173
+
174
+ else -> {
175
+ if (ch.code < 0x20 || ch == LayoutConstants.SYNTHETIC_PLACEHOLDER_CHARACTER[0]) {
176
+ builder.append("\\u")
177
+ builder.append(ch.code.toString(16).padStart(4, '0'))
178
+ } else {
179
+ builder.append(ch)
180
+ }
181
+ }
182
+ }
183
+ }
184
+ return builder.toString()
185
+ }
186
+
187
+ internal fun EditorEditText.samsungSentenceCapsComposingTextForEditorImpl(
188
+ composingText: String?
189
+ ): String? {
190
+ if (composingText.isNullOrEmpty()) return composingText
191
+ if (!isSamsungKeyboardActiveForEditor()) return composingText
192
+ if ((inputType and InputType.TYPE_TEXT_FLAG_CAP_SENTENCES) !=
193
+ InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
194
+ ) {
195
+ return composingText
196
+ }
197
+ val (replacementStart, replacementEnd) = compositionReplacementRange() ?: return composingText
198
+ if (replacementStart != replacementEnd) return composingText
199
+ val authorizedSpanned = lastAuthorizedRenderedText as? Spanned
200
+ ?: SpannableStringBuilder(lastAuthorizedText)
201
+ if (!isRenderedLineStartForSentenceCaps(authorizedSpanned, replacementStart)) {
202
+ return composingText
203
+ }
204
+
205
+ val firstCodePoint = Character.codePointAt(composingText, 0)
206
+ if (!Character.isLowerCase(firstCodePoint)) return composingText
207
+ val adjusted = buildString(composingText.length) {
208
+ appendCodePoint(Character.toTitleCase(firstCodePoint))
209
+ append(composingText.substring(Character.charCount(firstCodePoint)))
210
+ }
211
+ recordImeTraceForTesting(
212
+ "samsungSentenceCapsFallback",
213
+ "range=$replacementStart..$replacementEnd textLength=${composingText.length}"
214
+ )
215
+ return adjusted
216
+ }
217
+
218
+ internal fun EditorEditText.cursorCapsModeForEditorImpl(reqModes: Int, baseCapsMode: Int): Int {
219
+ val sentenceCapsMode = InputType.TYPE_TEXT_FLAG_CAP_SENTENCES
220
+ if ((reqModes and sentenceCapsMode) != sentenceCapsMode) return baseCapsMode
221
+ if ((baseCapsMode and sentenceCapsMode) == sentenceCapsMode) return baseCapsMode
222
+ if (!isCursorAtRenderedLineStartForSentenceCaps()) return baseCapsMode
223
+ return baseCapsMode or sentenceCapsMode
224
+ }
225
+
226
+ internal fun EditorEditText.initialSurroundingTextForImeForEditorImpl(
227
+ mapper: ImeTextCoordinateMapper? = null
228
+ ): ImeInitialSurroundingText? {
229
+ val coordinateMapper = mapper ?: imeTextCoordinateMapperForEditor() ?: return null
230
+ val rawText = text ?: return null
231
+ val removedCount = rawText.length - coordinateMapper.visibleText.length
232
+ if (removedCount == 0) return null
233
+ val start = selectionStart
234
+ val end = selectionEnd
235
+ if (start < 0 || end < 0) return null
236
+ val rawSelectionStart = start.coerceIn(0, rawText.length)
237
+ val rawSelectionEnd = end.coerceIn(0, rawText.length)
238
+
239
+ return ImeInitialSurroundingText(
240
+ text = coordinateMapper.visibleText.toString(),
241
+ selectionStart = coordinateMapper.rawToIme(rawSelectionStart),
242
+ selectionEnd = coordinateMapper.rawToIme(rawSelectionEnd),
243
+ originalSelectionStart = rawSelectionStart,
244
+ originalSelectionEnd = rawSelectionEnd,
245
+ removedPlaceholderCount = removedCount
246
+ )
247
+ }
248
+
249
+ internal fun EditorEditText.isCursorAtRenderedLineStartForSentenceCaps(): Boolean {
250
+ val currentText = text ?: return false
251
+ val start = selectionStart
252
+ val end = selectionEnd
253
+ if (start < 0 || end < 0 || start != end) return false
254
+
255
+ val cursor = end.coerceIn(0, currentText.length)
256
+ return isRenderedLineStartForSentenceCaps(currentText, cursor)
257
+ }
258
+
259
+ internal fun EditorEditText.isRenderedLineStartForSentenceCaps(
260
+ text: Spanned,
261
+ cursor: Int
262
+ ): Boolean {
263
+ val cursor = cursor.coerceIn(0, text.length)
264
+ if (cursor == 0) return true
265
+
266
+ val lineStart = lastRenderedLineBreakBefore(text, cursor) + 1
267
+ var index = lineStart
268
+ while (index < cursor && isIgnoredSentenceCapsLinePrefix(text[index])) {
269
+ index += 1
270
+ }
271
+ if (index == cursor) return true
272
+
273
+ val markerEnd = renderedListMarkerEnd(text, index, cursor) ?: return false
274
+ index = markerEnd
275
+ while (index < cursor && isIgnoredSentenceCapsLinePrefix(text[index])) {
276
+ index += 1
277
+ }
278
+ return index == cursor
279
+ }
280
+
281
+ internal fun EditorEditText.isSamsungKeyboardActiveForEditor(): Boolean {
282
+ val inputMethodId = Settings.Secure.getString(
283
+ context.contentResolver,
284
+ Settings.Secure.DEFAULT_INPUT_METHOD
285
+ ) ?: return false
286
+ return inputMethodId.contains("samsung", ignoreCase = true) ||
287
+ inputMethodId.contains("honeyboard", ignoreCase = true)
288
+ }
289
+
290
+ internal fun EditorEditText.lastRenderedLineBreakBefore(text: CharSequence, cursor: Int): Int {
291
+ var index = cursor.coerceAtMost(text.length) - 1
292
+ while (index >= 0) {
293
+ when (text[index]) {
294
+ '\n', '\r' -> return index
295
+ }
296
+ index -= 1
297
+ }
298
+ return -1
299
+ }
300
+
301
+ internal fun EditorEditText.isIgnoredSentenceCapsLinePrefix(ch: Char): Boolean = ch == ' ' ||
302
+ ch == '\t' ||
303
+ ch == '\u00A0' ||
304
+ ch == LayoutConstants.SYNTHETIC_PLACEHOLDER_CHARACTER[0]
305
+
306
+ internal fun EditorEditText.renderedListMarkerEnd(
307
+ text: Spanned,
308
+ start: Int,
309
+ endExclusive: Int
310
+ ): Int? {
311
+ if (start >= endExclusive) return null
312
+ if (renderedTaskListMarkerEnd(text, start, endExclusive) != null) {
313
+ return start + 2
314
+ }
315
+ if (text[start] == LayoutConstants.UNORDERED_LIST_BULLET[0]) {
316
+ return start + 1
317
+ }
318
+
319
+ var index = start
320
+ while (index < endExclusive && text[index].isDigit()) {
321
+ index += 1
322
+ }
323
+ if (index == start || index >= endExclusive) return null
324
+ return when (text[index]) {
325
+ '.', ')' -> index + 1
326
+ else -> null
327
+ }
328
+ }
329
+
330
+ internal fun EditorEditText.renderedTaskListMarkerEnd(
331
+ text: Spanned,
332
+ start: Int,
333
+ endExclusive: Int
334
+ ): Int? {
335
+ if (start + 1 >= endExclusive) return null
336
+ val marker = text[start]
337
+ if (marker != LayoutConstants.TASK_LIST_MARKER_UNCHECKED[0] &&
338
+ marker != LayoutConstants.TASK_LIST_MARKER_CHECKED[0]
339
+ ) {
340
+ return null
341
+ }
342
+ if (text[start + 1] != ' ') return null
343
+ val isMarker = text.getSpans(start, start + 1, Annotation::class.java)
344
+ .any { it.key == RenderBridge.NATIVE_TASK_LIST_MARKER_ANNOTATION }
345
+ return if (isMarker) start + 2 else null
346
+ }
347
+
348
+ internal fun EditorEditText.configureInputConnection(
349
+ baseConnection: InputConnection,
350
+ outAttrs: EditorInfo
351
+ ): InputConnection? {
352
+ val originalInitialCapsMode = outAttrs.initialCapsMode
353
+ outAttrs.initialCapsMode = cursorCapsModeForEditor(
354
+ reqModes = outAttrs.inputType,
355
+ baseCapsMode = outAttrs.initialCapsMode
356
+ )
357
+ val generation = nextInputConnectionGenerationForEditor()
358
+ val mapper = imeTextCoordinateMapperForEditor(generation) ?: return null
359
+ val initialSurroundingText = applyInitialSurroundingTextForIme(outAttrs, mapper)
360
+ NativeEditorViewRegistry.registerInputView(editorId, this)
361
+ recordImeTraceForTesting(
362
+ "createInputConnection",
363
+ "boundEditor=$editorId boundGen=$generation inputType=$inputType " +
364
+ "initialCaps=$originalInitialCapsMode->${outAttrs.initialCapsMode} " +
365
+ "imeContextPlaceholdersRemoved=" +
366
+ "${initialSurroundingText?.removedPlaceholderCount ?: 0} " +
367
+ "imeContextSel=" +
368
+ "${initialSurroundingText?.selectionStart ?: outAttrs.initialSelStart}.." +
369
+ "${initialSurroundingText?.selectionEnd ?: outAttrs.initialSelEnd} " +
370
+ "imeContextRawSel=" +
371
+ "${initialSurroundingText?.originalSelectionStart ?: selectionStart}.." +
372
+ "${initialSurroundingText?.originalSelectionEnd ?: selectionEnd} " +
373
+ "imeContextBeforeTail=\"${initialSurroundingText?.textBeforeSelectionTailForImeLog() ?: ""}\""
374
+ )
375
+ return EditorInputConnection(
376
+ this,
377
+ baseConnection,
378
+ editorId,
379
+ generation,
380
+ mapper.generation
381
+ ).also {
382
+ activeInputConnection = it
383
+ }
384
+ }
@@ -0,0 +1,100 @@
1
+ package com.apollohg.editor
2
+
3
+ import android.graphics.Rect
4
+ import android.view.View
5
+
6
+ internal fun EditorEditText.resolveAutoGrowHeightImpl(): Int {
7
+ val availableWidth = (measuredWidth - compoundPaddingLeft - compoundPaddingRight).coerceAtLeast(
8
+ 0
9
+ )
10
+ val placeholderHeight = resolvePlaceholderHeightForAvailableWidth(availableWidth)
11
+ val laidOutTextHeight = if (isLaidOut) layout?.height else null
12
+ if (laidOutTextHeight != null && laidOutTextHeight > 0) {
13
+ return maxOf(
14
+ laidOutTextHeight + compoundPaddingTop + compoundPaddingBottom,
15
+ placeholderHeight ?: 0
16
+ )
17
+ }
18
+
19
+ val currentText = text
20
+ if (availableWidth > 0 && currentText != null) {
21
+ val staticLayout =
22
+ EditorDocumentLayout(currentText, paint, availableWidth, includeFontPadding)
23
+ val textHeight = staticLayout.height.takeIf { it > 0 } ?: lineHeight
24
+ return maxOf(
25
+ textHeight + compoundPaddingTop + compoundPaddingBottom,
26
+ placeholderHeight ?: 0
27
+ )
28
+ }
29
+
30
+ val minimumHeight = editorSuggestedMinimumHeight.coerceAtLeast(minHeight)
31
+ return maxOf(
32
+ placeholderHeight ?: 0,
33
+ (lineHeight + compoundPaddingTop + compoundPaddingBottom).coerceAtLeast(minimumHeight)
34
+ )
35
+ }
36
+
37
+ internal fun EditorEditText.preserveScrollPosition(previousScrollX: Int, previousScrollY: Int) {
38
+ val restore = {
39
+ val maxScrollX = maxOf(0, editorHorizontalScrollRange() - width)
40
+ val maxScrollY = maxOf(0, editorVerticalScrollRange() - height)
41
+ scrollTo(
42
+ previousScrollX.coerceIn(0, maxScrollX),
43
+ previousScrollY.coerceIn(0, maxScrollY)
44
+ )
45
+ }
46
+
47
+ restore()
48
+ post { restore() }
49
+ }
50
+
51
+ internal fun EditorEditText.ensureSelectionVisible() {
52
+ if (!hasFocus()) return
53
+ if (!isLaidOut || width <= 0 || height <= 0) return
54
+ if (selectionEnd < 0 || caretVisibilityRequestPosted) return
55
+
56
+ caretVisibilityRequestPosted = true
57
+ val posted = post {
58
+ caretVisibilityRequestPosted = false
59
+ if (!hasFocus() || !isLaidOut || layout == null) return@post
60
+ val selectionOffset = selectionEnd.takeIf { it >= 0 } ?: return@post
61
+ val viewportBottomClearance = resolveViewportBottomClearancePx()
62
+ if (heightBehavior == EditorHeightBehavior.FIXED) {
63
+ bringPointIntoView(selectionOffset)
64
+ }
65
+
66
+ val textLayout = layout ?: return@post
67
+ val clampedOffset = selectionOffset.coerceAtMost(textLayout.text.length)
68
+ val line = textLayout.getLineForOffset(clampedOffset)
69
+ val caretLeft = textLayout.getPrimaryHorizontal(clampedOffset).toInt()
70
+ val rect = Rect(
71
+ caretLeft + totalPaddingLeft,
72
+ textLayout.editorTextLineTop(line) + totalPaddingTop,
73
+ caretLeft + totalPaddingLeft + 1,
74
+ textLayout.editorTextLineBottom(line) + totalPaddingTop + viewportBottomClearance
75
+ )
76
+ requestRectangleOnScreen(rect)
77
+ }
78
+ if (!posted) {
79
+ caretVisibilityRequestPosted = false
80
+ }
81
+ }
82
+
83
+ internal fun EditorEditText.resolveViewportBottomClearancePx(): Int {
84
+ val occlusionTop = viewportBottomOcclusionTopOnScreenPx ?: return viewportBottomInsetPx
85
+ var ancestor = parent
86
+ var foundScrollableAncestor = false
87
+ var clearance = 0
88
+ while (ancestor is View) {
89
+ if (ancestor.canScrollVertically(-1) || ancestor.canScrollVertically(1)) {
90
+ ancestor.getLocationOnScreen(caretVisibilityLocationOnScreen)
91
+ foundScrollableAncestor = true
92
+ clearance = maxOf(
93
+ clearance,
94
+ caretVisibilityLocationOnScreen[1] + ancestor.height - occlusionTop
95
+ )
96
+ }
97
+ ancestor = (ancestor as View).parent
98
+ }
99
+ return if (foundScrollableAncestor) clearance.coerceAtLeast(0) else viewportBottomInsetPx
100
+ }