@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,45 @@
1
+ import { NativeEditorLifecycleError, type NativeEditorErrorBase } from './NativeEditorBoundaryError';
2
+ export type ExternalTextCompositionEndCause = 'consumer' | 'interaction' | 'documentChange' | 'lifecycle';
3
+ export interface ExternalTextCompositionEndEvent {
4
+ outcome: 'committed' | 'cancelled';
5
+ cause: ExternalTextCompositionEndCause;
6
+ text: string;
7
+ error?: NativeEditorErrorBase;
8
+ }
9
+ export interface ExternalTextCompositionOptions {
10
+ onEnd?: (event: ExternalTextCompositionEndEvent) => void;
11
+ }
12
+ export interface ExternalTextCompositionSession {
13
+ update(text: string): Promise<void>;
14
+ commit(finalText: string): Promise<void>;
15
+ cancel(): Promise<void>;
16
+ }
17
+ export interface NativeExternalTextCompositionHandle {
18
+ beginExternalTextComposition?(sessionId: string): Promise<string> | string;
19
+ updateExternalTextComposition?(sessionId: string, text: string): Promise<string> | string;
20
+ commitExternalTextComposition?(sessionId: string, text: string): Promise<string> | string;
21
+ cancelExternalTextComposition?(sessionId: string, cause: 'consumer' | 'documentChange' | 'lifecycle'): Promise<string> | string;
22
+ }
23
+ export declare function createExternalCompositionLifecycleError(code: string, message: string): NativeEditorLifecycleError;
24
+ export declare class ExternalTextCompositionManager {
25
+ private readonly editorId;
26
+ private readonly getNativeHandle;
27
+ private active;
28
+ private pendingBegin;
29
+ private pendingEnd;
30
+ private disposed;
31
+ private beginTail;
32
+ private readonly sessionHost;
33
+ constructor(editorId: string, getNativeHandle: () => NativeExternalTextCompositionHandle | null);
34
+ supports(): boolean;
35
+ begin(options?: ExternalTextCompositionOptions): Promise<ExternalTextCompositionSession>;
36
+ handleNativeEnd(editorId: string, resultJson: string): void;
37
+ cancelForDocumentChange(): Promise<void>;
38
+ dispose(): void;
39
+ private unsupportedError;
40
+ private invokeBegin;
41
+ private invokeUpdate;
42
+ private invokeCommit;
43
+ private invokeCancel;
44
+ private beginSerialized;
45
+ }
@@ -0,0 +1,537 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExternalTextCompositionManager = void 0;
4
+ exports.createExternalCompositionLifecycleError = createExternalCompositionLifecycleError;
5
+ const NativeEditorBoundaryError_1 = require("./NativeEditorBoundaryError");
6
+ let nextExternalCompositionId = 1n;
7
+ function allocateExternalCompositionId() {
8
+ const id = nextExternalCompositionId.toString(10);
9
+ nextExternalCompositionId += 1n;
10
+ return id;
11
+ }
12
+ function createExternalCompositionLifecycleError(code, message) {
13
+ return new NativeEditorBoundaryError_1.NativeEditorLifecycleError({
14
+ domain: 'lifecycle',
15
+ code,
16
+ message,
17
+ requestId: null,
18
+ operationIndex: null,
19
+ limit: null,
20
+ actual: null,
21
+ details: null,
22
+ });
23
+ }
24
+ function invalidResultError() {
25
+ return new NativeEditorBoundaryError_1.NativeEditorNonRetryableError({
26
+ domain: 'boundary',
27
+ code: 'EXTERNAL_COMPOSITION_RESULT_INVALID',
28
+ message: 'Native external text composition returned an invalid result',
29
+ requestId: null,
30
+ operationIndex: null,
31
+ limit: null,
32
+ actual: null,
33
+ details: null,
34
+ });
35
+ }
36
+ function endedLifecycleError() {
37
+ return createExternalCompositionLifecycleError('EXTERNAL_COMPOSITION_ENDED', 'The external text composition session has ended');
38
+ }
39
+ function isRecord(value) {
40
+ return value != null && typeof value === 'object' && !Array.isArray(value);
41
+ }
42
+ function hasExactKeys(value, keys) {
43
+ const actual = Object.keys(value);
44
+ return actual.length === keys.length && actual.every((key) => keys.includes(key));
45
+ }
46
+ const ERROR_KEYS = [
47
+ 'domain',
48
+ 'code',
49
+ 'message',
50
+ 'requestId',
51
+ 'operationIndex',
52
+ 'limit',
53
+ 'actual',
54
+ 'details',
55
+ ];
56
+ function parseError(value) {
57
+ if (!isRecord(value) || !hasExactKeys(value, ERROR_KEYS))
58
+ return null;
59
+ return (0, NativeEditorBoundaryError_1.normalizeNativeEditorV2Error)({ error: value });
60
+ }
61
+ function parseNativeCompositionResult(resultJson) {
62
+ let value;
63
+ try {
64
+ value = JSON.parse(resultJson);
65
+ }
66
+ catch {
67
+ throw invalidResultError();
68
+ }
69
+ if (!isRecord(value) || value.version !== 1 || typeof value.type !== 'string') {
70
+ throw invalidResultError();
71
+ }
72
+ if (value.type === 'active') {
73
+ if (!hasExactKeys(value, ['version', 'type', 'sessionId']) ||
74
+ typeof value.sessionId !== 'string') {
75
+ throw invalidResultError();
76
+ }
77
+ return { version: 1, type: 'active', sessionId: value.sessionId };
78
+ }
79
+ if (value.type === 'ended') {
80
+ const keys = Object.prototype.hasOwnProperty.call(value, 'error')
81
+ ? ['version', 'type', 'sessionId', 'outcome', 'cause', 'text', 'error']
82
+ : ['version', 'type', 'sessionId', 'outcome', 'cause', 'text'];
83
+ const validOutcome = value.outcome === 'committed' || value.outcome === 'cancelled';
84
+ const validCause = value.cause === 'consumer' ||
85
+ value.cause === 'interaction' ||
86
+ value.cause === 'documentChange' ||
87
+ value.cause === 'lifecycle';
88
+ const error = keys.includes('error') ? parseError(value.error) : undefined;
89
+ if (!hasExactKeys(value, keys) ||
90
+ typeof value.sessionId !== 'string' ||
91
+ !validOutcome ||
92
+ !validCause ||
93
+ typeof value.text !== 'string' ||
94
+ (keys.includes('error') && error == null)) {
95
+ throw invalidResultError();
96
+ }
97
+ return {
98
+ version: 1,
99
+ type: 'ended',
100
+ sessionId: value.sessionId,
101
+ outcome: value.outcome,
102
+ cause: value.cause,
103
+ text: value.text,
104
+ ...(error == null ? {} : { error }),
105
+ };
106
+ }
107
+ if (value.type === 'error') {
108
+ const error = parseError(value.error);
109
+ if (!hasExactKeys(value, ['version', 'type', 'sessionId', 'error']) ||
110
+ (value.sessionId !== null && typeof value.sessionId !== 'string') ||
111
+ error == null) {
112
+ throw invalidResultError();
113
+ }
114
+ return { version: 1, type: 'error', sessionId: value.sessionId, error };
115
+ }
116
+ throw invalidResultError();
117
+ }
118
+ function requireActiveResult(result, sessionId) {
119
+ if (result.type === 'error') {
120
+ if (result.sessionId !== null && result.sessionId !== sessionId) {
121
+ throw invalidResultError();
122
+ }
123
+ throw (0, NativeEditorBoundaryError_1.nativeEditorV2ErrorToException)(result.error);
124
+ }
125
+ if (result.type !== 'active' || result.sessionId !== sessionId) {
126
+ throw invalidResultError();
127
+ }
128
+ }
129
+ function requireEndResult(result, sessionId) {
130
+ if (result.type === 'error') {
131
+ if (result.sessionId !== null && result.sessionId !== sessionId) {
132
+ throw invalidResultError();
133
+ }
134
+ throw (0, NativeEditorBoundaryError_1.nativeEditorV2ErrorToException)(result.error);
135
+ }
136
+ if (result.type !== 'ended' || result.sessionId !== sessionId) {
137
+ throw invalidResultError();
138
+ }
139
+ return result;
140
+ }
141
+ function settleWaiters(waiters, error) {
142
+ for (const waiter of waiters) {
143
+ if (error === undefined)
144
+ waiter.resolve();
145
+ else
146
+ waiter.reject(error);
147
+ }
148
+ }
149
+ class ManagedExternalTextCompositionSession {
150
+ constructor(id, host, options) {
151
+ this.id = id;
152
+ this.host = host;
153
+ this.options = options;
154
+ this.latestText = '';
155
+ this.terminal = false;
156
+ this.terminalResult = null;
157
+ this.terminalError = null;
158
+ this.terminalCompletion = new Promise((resolve) => {
159
+ this.resolveTerminal = resolve;
160
+ });
161
+ this.closing = null;
162
+ this.updateInFlight = null;
163
+ this.inFlightWaiters = [];
164
+ this.pendingUpdate = null;
165
+ this.cancelPromise = null;
166
+ }
167
+ update(text) {
168
+ if (!this.canMutate())
169
+ return Promise.reject(endedLifecycleError());
170
+ this.latestText = text;
171
+ return new Promise((resolve, reject) => {
172
+ const waiter = { resolve, reject };
173
+ if (this.updateInFlight != null) {
174
+ if (this.pendingUpdate == null) {
175
+ this.pendingUpdate = { text, waiters: [waiter] };
176
+ }
177
+ else {
178
+ this.pendingUpdate.text = text;
179
+ this.pendingUpdate.waiters.push(waiter);
180
+ }
181
+ return;
182
+ }
183
+ this.startUpdate(text, [waiter]);
184
+ });
185
+ }
186
+ async commit(finalText) {
187
+ if (!this.canMutate())
188
+ throw endedLifecycleError();
189
+ this.closing = 'commit';
190
+ this.latestText = finalText;
191
+ if (this.updateInFlight != null) {
192
+ const update = await this.raceWithTerminal(this.updateInFlight);
193
+ if (update.type === 'terminal') {
194
+ this.requireSuccessfulConsumerCommit(update.result, finalText);
195
+ return;
196
+ }
197
+ if (update.type === 'failed')
198
+ throw update.error;
199
+ }
200
+ if (this.terminalResult != null) {
201
+ this.requireSuccessfulConsumerCommit(this.terminalResult, finalText);
202
+ return;
203
+ }
204
+ if (!this.canFinish())
205
+ throw endedLifecycleError();
206
+ const foldedWaiters = this.takePendingWaiters();
207
+ const commit = await this.raceWithTerminal(this.host.commit(this.id, finalText));
208
+ if (commit.type === 'terminal') {
209
+ const error = this.explicitCommitError(commit.result, finalText);
210
+ settleWaiters(foldedWaiters, error);
211
+ if (error)
212
+ throw error;
213
+ return;
214
+ }
215
+ if (commit.type === 'failed') {
216
+ settleWaiters(foldedWaiters, commit.error);
217
+ if (!this.terminal && this.host.owns(this))
218
+ this.closing = null;
219
+ throw commit.error;
220
+ }
221
+ try {
222
+ this.requireOwnership();
223
+ const endResult = requireEndResult(commit.value, this.id);
224
+ const endError = this.explicitCommitError(endResult, finalText);
225
+ this.finish(endResult);
226
+ settleWaiters(foldedWaiters, endError);
227
+ if (endError)
228
+ throw endError;
229
+ }
230
+ catch (error) {
231
+ settleWaiters(foldedWaiters, error);
232
+ if (!this.terminal && this.host.owns(this))
233
+ this.closing = null;
234
+ throw error;
235
+ }
236
+ }
237
+ cancel() {
238
+ if (this.terminal)
239
+ return Promise.resolve();
240
+ if (this.cancelPromise != null)
241
+ return this.cancelPromise;
242
+ if (!this.canMutate())
243
+ return Promise.reject(endedLifecycleError());
244
+ this.cancelPromise = this.cancelWithCause('consumer');
245
+ return this.cancelPromise;
246
+ }
247
+ cancelForDocumentChange() {
248
+ if (this.terminal)
249
+ return Promise.resolve();
250
+ if (this.cancelPromise != null)
251
+ return this.cancelPromise;
252
+ if (!this.canMutate())
253
+ return Promise.reject(endedLifecycleError());
254
+ this.cancelPromise = this.cancelWithCause('documentChange');
255
+ return this.cancelPromise;
256
+ }
257
+ finish(result) {
258
+ if (this.terminal)
259
+ return;
260
+ this.terminal = true;
261
+ this.terminalResult = result;
262
+ const error = result.error
263
+ ? (0, NativeEditorBoundaryError_1.nativeEditorV2ErrorToException)(result.error)
264
+ : endedLifecycleError();
265
+ this.terminalError = error;
266
+ const waiterError = this.closing === 'commit' && this.explicitCommitError(result, this.latestText) == null
267
+ ? undefined
268
+ : error;
269
+ settleWaiters(this.inFlightWaiters, waiterError);
270
+ this.inFlightWaiters = [];
271
+ if (this.pendingUpdate != null) {
272
+ settleWaiters(this.pendingUpdate.waiters, waiterError);
273
+ this.pendingUpdate = null;
274
+ }
275
+ this.host.release(this);
276
+ this.resolveTerminal(result);
277
+ this.options.onEnd?.({
278
+ outcome: result.outcome,
279
+ cause: result.cause,
280
+ text: result.text,
281
+ ...(result.error == null ? {} : { error }),
282
+ });
283
+ }
284
+ canMutate() {
285
+ return !this.terminal && this.closing == null && this.host.owns(this);
286
+ }
287
+ canFinish() {
288
+ return !this.terminal && this.closing != null && this.host.owns(this);
289
+ }
290
+ startUpdate(text, waiters) {
291
+ this.inFlightWaiters = waiters;
292
+ this.updateInFlight = this.performUpdate(text, waiters);
293
+ }
294
+ async performUpdate(text, waiters) {
295
+ try {
296
+ const result = await this.host.update(this.id, text);
297
+ this.requireOwnership();
298
+ requireActiveResult(result, this.id);
299
+ settleWaiters(waiters);
300
+ }
301
+ catch (error) {
302
+ settleWaiters(waiters, error);
303
+ }
304
+ finally {
305
+ if (this.inFlightWaiters === waiters)
306
+ this.inFlightWaiters = [];
307
+ this.updateInFlight = null;
308
+ if (!this.terminal && this.closing == null && this.pendingUpdate != null) {
309
+ const pending = this.pendingUpdate;
310
+ this.pendingUpdate = null;
311
+ this.startUpdate(pending.text, pending.waiters);
312
+ }
313
+ }
314
+ }
315
+ takePendingWaiters() {
316
+ const waiters = this.pendingUpdate?.waiters ?? [];
317
+ this.pendingUpdate = null;
318
+ return waiters;
319
+ }
320
+ requireOwnership() {
321
+ if (!this.host.owns(this))
322
+ throw endedLifecycleError();
323
+ }
324
+ raceWithTerminal(work) {
325
+ return Promise.race([
326
+ work.then((value) => ({ type: 'completed', value }), (error) => ({ type: 'failed', error })),
327
+ this.terminalCompletion.then((result) => ({
328
+ type: 'terminal',
329
+ result,
330
+ })),
331
+ ]);
332
+ }
333
+ explicitCommitError(result, finalText) {
334
+ if (result.outcome === 'committed' &&
335
+ result.cause === 'consumer' &&
336
+ result.text === finalText &&
337
+ result.error == null) {
338
+ return undefined;
339
+ }
340
+ return result.error ? (0, NativeEditorBoundaryError_1.nativeEditorV2ErrorToException)(result.error) : endedLifecycleError();
341
+ }
342
+ requireSuccessfulConsumerCommit(result, finalText) {
343
+ const error = this.explicitCommitError(result, finalText);
344
+ if (error)
345
+ throw error;
346
+ }
347
+ settleTerminalWaiters(waiters) {
348
+ settleWaiters(waiters, this.terminalError ?? endedLifecycleError());
349
+ }
350
+ async cancelWithCause(cause) {
351
+ this.closing = 'cancel';
352
+ if (this.updateInFlight != null) {
353
+ const update = await this.raceWithTerminal(this.updateInFlight);
354
+ if (update.type === 'terminal')
355
+ return;
356
+ if (update.type === 'failed')
357
+ throw update.error;
358
+ }
359
+ if (!this.canFinish())
360
+ return;
361
+ const pendingWaiters = this.takePendingWaiters();
362
+ const cancellation = await this.raceWithTerminal(this.host.cancel(this.id, cause));
363
+ if (cancellation.type === 'terminal') {
364
+ this.settleTerminalWaiters(pendingWaiters);
365
+ return;
366
+ }
367
+ if (cancellation.type === 'failed') {
368
+ settleWaiters(pendingWaiters, cancellation.error);
369
+ if (this.host.owns(this)) {
370
+ this.closing = null;
371
+ this.cancelPromise = null;
372
+ }
373
+ throw cancellation.error;
374
+ }
375
+ try {
376
+ this.requireOwnership();
377
+ const endResult = requireEndResult(cancellation.value, this.id);
378
+ const endError = endResult.error
379
+ ? (0, NativeEditorBoundaryError_1.nativeEditorV2ErrorToException)(endResult.error)
380
+ : undefined;
381
+ this.finish(endResult);
382
+ settleWaiters(pendingWaiters, endError);
383
+ if (endError)
384
+ throw endError;
385
+ }
386
+ catch (error) {
387
+ settleWaiters(pendingWaiters, error);
388
+ if (!this.terminal && this.host.owns(this)) {
389
+ this.closing = null;
390
+ this.cancelPromise = null;
391
+ }
392
+ throw error;
393
+ }
394
+ }
395
+ }
396
+ class ExternalTextCompositionManager {
397
+ constructor(editorId, getNativeHandle) {
398
+ this.editorId = editorId;
399
+ this.getNativeHandle = getNativeHandle;
400
+ this.active = null;
401
+ this.pendingBegin = null;
402
+ this.pendingEnd = null;
403
+ this.disposed = false;
404
+ this.beginTail = Promise.resolve();
405
+ this.sessionHost = {
406
+ owns: (session) => !this.disposed && this.active === session,
407
+ release: (session) => {
408
+ if (this.active === session)
409
+ this.active = null;
410
+ },
411
+ update: (sessionId, text) => this.invokeUpdate(sessionId, text),
412
+ commit: (sessionId, text) => this.invokeCommit(sessionId, text),
413
+ cancel: (sessionId, cause) => this.invokeCancel(sessionId, cause),
414
+ };
415
+ }
416
+ supports() {
417
+ const handle = this.getNativeHandle();
418
+ return (typeof handle?.beginExternalTextComposition === 'function' &&
419
+ typeof handle.updateExternalTextComposition === 'function' &&
420
+ typeof handle.commitExternalTextComposition === 'function' &&
421
+ typeof handle.cancelExternalTextComposition === 'function');
422
+ }
423
+ begin(options = {}) {
424
+ const pending = this.beginTail.then(() => this.beginSerialized(options));
425
+ this.beginTail = pending.then(() => undefined, () => undefined);
426
+ return pending;
427
+ }
428
+ handleNativeEnd(editorId, resultJson) {
429
+ if (editorId !== this.editorId)
430
+ return;
431
+ const result = parseNativeCompositionResult(resultJson);
432
+ if (result.type !== 'ended')
433
+ return;
434
+ if (result.sessionId === this.active?.id) {
435
+ this.active.finish(result);
436
+ return;
437
+ }
438
+ if (result.sessionId === this.pendingBegin?.id && this.pendingEnd == null) {
439
+ this.pendingEnd = result;
440
+ this.pendingBegin.finish(result);
441
+ }
442
+ }
443
+ cancelForDocumentChange() {
444
+ return this.active?.cancelForDocumentChange() ?? Promise.resolve();
445
+ }
446
+ dispose() {
447
+ if (this.disposed)
448
+ return;
449
+ this.disposed = true;
450
+ const active = this.active;
451
+ if (!active)
452
+ return;
453
+ active.finish({
454
+ version: 1,
455
+ type: 'ended',
456
+ sessionId: active.id,
457
+ outcome: 'cancelled',
458
+ cause: 'lifecycle',
459
+ text: active.latestText,
460
+ });
461
+ void this.invokeCancel(active.id, 'lifecycle').catch(() => undefined);
462
+ }
463
+ unsupportedError() {
464
+ return createExternalCompositionLifecycleError('EXTERNAL_COMPOSITION_UNSUPPORTED', 'The mounted native editor does not support external text composition');
465
+ }
466
+ async invokeBegin(sessionId) {
467
+ const handle = this.getNativeHandle();
468
+ const method = handle?.beginExternalTextComposition;
469
+ if (typeof method !== 'function') {
470
+ throw this.unsupportedError();
471
+ }
472
+ const resultJson = await method.call(handle, sessionId);
473
+ return parseNativeCompositionResult(resultJson);
474
+ }
475
+ async invokeUpdate(sessionId, text) {
476
+ const handle = this.getNativeHandle();
477
+ const method = handle?.updateExternalTextComposition;
478
+ if (typeof method !== 'function') {
479
+ throw this.unsupportedError();
480
+ }
481
+ const resultJson = await method.call(handle, sessionId, text);
482
+ return parseNativeCompositionResult(resultJson);
483
+ }
484
+ async invokeCommit(sessionId, text) {
485
+ const handle = this.getNativeHandle();
486
+ const method = handle?.commitExternalTextComposition;
487
+ if (typeof method !== 'function') {
488
+ throw this.unsupportedError();
489
+ }
490
+ const resultJson = await method.call(handle, sessionId, text);
491
+ return parseNativeCompositionResult(resultJson);
492
+ }
493
+ async invokeCancel(sessionId, cause) {
494
+ const handle = this.getNativeHandle();
495
+ const method = handle?.cancelExternalTextComposition;
496
+ if (typeof method !== 'function') {
497
+ throw this.unsupportedError();
498
+ }
499
+ const resultJson = await method.call(handle, sessionId, cause);
500
+ return parseNativeCompositionResult(resultJson);
501
+ }
502
+ async beginSerialized(options) {
503
+ if (this.disposed)
504
+ throw endedLifecycleError();
505
+ if (!this.supports()) {
506
+ throw this.unsupportedError();
507
+ }
508
+ if (this.active)
509
+ await this.active.commit(this.active.latestText);
510
+ if (this.disposed)
511
+ throw endedLifecycleError();
512
+ const session = new ManagedExternalTextCompositionSession(allocateExternalCompositionId(), this.sessionHost, options);
513
+ this.pendingBegin = session;
514
+ this.pendingEnd = null;
515
+ try {
516
+ const result = await this.invokeBegin(session.id);
517
+ if (this.disposed) {
518
+ void this.invokeCancel(session.id, 'lifecycle').catch(() => undefined);
519
+ throw endedLifecycleError();
520
+ }
521
+ if (this.pendingBegin !== session)
522
+ throw endedLifecycleError();
523
+ requireActiveResult(result, session.id);
524
+ if (this.pendingEnd != null)
525
+ throw endedLifecycleError();
526
+ this.active = session;
527
+ return session;
528
+ }
529
+ finally {
530
+ if (this.pendingBegin === session) {
531
+ this.pendingBegin = null;
532
+ this.pendingEnd = null;
533
+ }
534
+ }
535
+ }
536
+ }
537
+ exports.ExternalTextCompositionManager = ExternalTextCompositionManager;
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Bounds on the native image pipeline that fetches and decodes remote and
3
+ * data-URL images. Set it on `RichTextEditor.imageLoadingPolicy` or
4
+ * `RichTextViewer.imageLoadingPolicy`.
5
+ *
6
+ * Every field is optional; an omitted one uses
7
+ * {@link DEFAULT_EDITOR_IMAGE_LOADING_POLICY}. Each value must be a positive
8
+ * integer no greater than the matching
9
+ * {@link HARD_EDITOR_IMAGE_LOADING_POLICY} ceiling — anything else throws
10
+ * `NativeEditorBoundaryError` (`IMAGE_POLICY_INVALID`).
11
+ */
12
+ export interface EditorImageLoadingPolicy {
13
+ /** Byte ceiling for one image source, applied to remote responses and decoded data-URL payloads alike. */
14
+ maxSourceBytes?: number;
15
+ /** Socket connect timeout for a remote image request, in milliseconds. */
16
+ connectTimeoutMs?: number;
17
+ /** Socket read timeout for a remote image request, in milliseconds. */
18
+ readTimeoutMs?: number;
19
+ /** Overall deadline for one image request, in milliseconds. */
20
+ requestTimeoutMs?: number;
21
+ /** Image requests allowed in flight at once. Further requests queue. */
22
+ maxConcurrentRequests?: number;
23
+ /** Queued requests allowed while the in-flight slots are full. Requests beyond this are dropped. */
24
+ maxPendingRequests?: number;
25
+ /** Ceiling on decoded image width and height, in pixels. Larger images are downsampled. */
26
+ maxDecodeDimensionPx?: number;
27
+ /** Decoded pixel bytes this editor or viewer may retain at once. */
28
+ maxDecodedBytes?: number;
29
+ }
30
+ /** {@link EditorImageLoadingPolicy} with every default filled in. */
31
+ export interface ResolvedEditorImageLoadingPolicy {
32
+ maxSourceBytes: number;
33
+ connectTimeoutMs: number;
34
+ readTimeoutMs: number;
35
+ requestTimeoutMs: number;
36
+ maxConcurrentRequests: number;
37
+ maxPendingRequests: number;
38
+ maxDecodeDimensionPx: number;
39
+ maxDecodedBytes: number;
40
+ }
41
+ /** The value used for each {@link EditorImageLoadingPolicy} field left unset. */
42
+ export declare const DEFAULT_EDITOR_IMAGE_LOADING_POLICY: Readonly<ResolvedEditorImageLoadingPolicy>;
43
+ /** The ceiling each {@link EditorImageLoadingPolicy} field may not exceed. */
44
+ export declare const HARD_EDITOR_IMAGE_LOADING_POLICY: Readonly<ResolvedEditorImageLoadingPolicy>;
45
+ /**
46
+ * Fill in every unset {@link EditorImageLoadingPolicy} field from
47
+ * {@link DEFAULT_EDITOR_IMAGE_LOADING_POLICY}, validating each value against
48
+ * {@link HARD_EDITOR_IMAGE_LOADING_POLICY}.
49
+ *
50
+ * @throws NativeEditorBoundaryError `IMAGE_POLICY_INVALID` when a value is
51
+ * not a positive integer within its ceiling.
52
+ */
53
+ export declare function resolveEditorImageLoadingPolicy(policy?: EditorImageLoadingPolicy): ResolvedEditorImageLoadingPolicy;
54
+ export declare function serializeEditorImageLoadingPolicy(policy?: EditorImageLoadingPolicy): string | undefined;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HARD_EDITOR_IMAGE_LOADING_POLICY = exports.DEFAULT_EDITOR_IMAGE_LOADING_POLICY = void 0;
4
+ exports.resolveEditorImageLoadingPolicy = resolveEditorImageLoadingPolicy;
5
+ exports.serializeEditorImageLoadingPolicy = serializeEditorImageLoadingPolicy;
6
+ const NativeEditorBoundaryError_1 = require("./NativeEditorBoundaryError");
7
+ /** The value used for each {@link EditorImageLoadingPolicy} field left unset. */
8
+ exports.DEFAULT_EDITOR_IMAGE_LOADING_POLICY = {
9
+ maxSourceBytes: 10 * 1024 * 1024,
10
+ connectTimeoutMs: 10000,
11
+ readTimeoutMs: 20000,
12
+ requestTimeoutMs: 60000,
13
+ maxConcurrentRequests: 2,
14
+ maxPendingRequests: 64,
15
+ maxDecodeDimensionPx: 2048,
16
+ maxDecodedBytes: 32 * 1024 * 1024,
17
+ };
18
+ /** The ceiling each {@link EditorImageLoadingPolicy} field may not exceed. */
19
+ exports.HARD_EDITOR_IMAGE_LOADING_POLICY = {
20
+ maxSourceBytes: 64 * 1024 * 1024,
21
+ connectTimeoutMs: 600000,
22
+ readTimeoutMs: 600000,
23
+ requestTimeoutMs: 600000,
24
+ maxConcurrentRequests: 16,
25
+ maxPendingRequests: 512,
26
+ maxDecodeDimensionPx: 8192,
27
+ maxDecodedBytes: 256 * 1024 * 1024,
28
+ };
29
+ function resolveImagePolicyValue(name, value) {
30
+ const resolved = value ?? exports.DEFAULT_EDITOR_IMAGE_LOADING_POLICY[name];
31
+ if (!Number.isSafeInteger(resolved) ||
32
+ resolved <= 0 ||
33
+ resolved > exports.HARD_EDITOR_IMAGE_LOADING_POLICY[name]) {
34
+ throw new NativeEditorBoundaryError_1.NativeEditorBoundaryError('IMAGE_POLICY_INVALID', `${name} must be a positive integer no greater than ${exports.HARD_EDITOR_IMAGE_LOADING_POLICY[name]}`, exports.HARD_EDITOR_IMAGE_LOADING_POLICY[name], resolved);
35
+ }
36
+ return resolved;
37
+ }
38
+ /**
39
+ * Fill in every unset {@link EditorImageLoadingPolicy} field from
40
+ * {@link DEFAULT_EDITOR_IMAGE_LOADING_POLICY}, validating each value against
41
+ * {@link HARD_EDITOR_IMAGE_LOADING_POLICY}.
42
+ *
43
+ * @throws NativeEditorBoundaryError `IMAGE_POLICY_INVALID` when a value is
44
+ * not a positive integer within its ceiling.
45
+ */
46
+ function resolveEditorImageLoadingPolicy(policy) {
47
+ return {
48
+ maxSourceBytes: resolveImagePolicyValue('maxSourceBytes', policy?.maxSourceBytes),
49
+ connectTimeoutMs: resolveImagePolicyValue('connectTimeoutMs', policy?.connectTimeoutMs),
50
+ readTimeoutMs: resolveImagePolicyValue('readTimeoutMs', policy?.readTimeoutMs),
51
+ requestTimeoutMs: resolveImagePolicyValue('requestTimeoutMs', policy?.requestTimeoutMs),
52
+ maxConcurrentRequests: resolveImagePolicyValue('maxConcurrentRequests', policy?.maxConcurrentRequests),
53
+ maxPendingRequests: resolveImagePolicyValue('maxPendingRequests', policy?.maxPendingRequests),
54
+ maxDecodeDimensionPx: resolveImagePolicyValue('maxDecodeDimensionPx', policy?.maxDecodeDimensionPx),
55
+ maxDecodedBytes: resolveImagePolicyValue('maxDecodedBytes', policy?.maxDecodedBytes),
56
+ };
57
+ }
58
+ function serializeEditorImageLoadingPolicy(policy) {
59
+ return policy == null ? undefined : JSON.stringify(resolveEditorImageLoadingPolicy(policy));
60
+ }