@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,64 @@
1
+ import {
2
+ type EditorToolbarDefaultIconId,
3
+ type EditorToolbarIcon,
4
+ type EditorToolbarItemPlacement,
5
+ type EditorToolbarItem,
6
+ } from './EditorToolbarTypes';
7
+
8
+ export function defaultIcon(id: EditorToolbarDefaultIconId): EditorToolbarIcon {
9
+ return { type: 'default', id };
10
+ }
11
+
12
+ export function resolveToolbarItemPlacement(
13
+ placement: EditorToolbarItemPlacement | undefined
14
+ ): EditorToolbarItemPlacement {
15
+ return placement ?? 'scroll';
16
+ }
17
+
18
+ /**
19
+ * The toolbar layout used when `toolbarItems` is not supplied. Spread it to
20
+ * extend the built-in set rather than restating it:
21
+ * `[...DEFAULT_EDITOR_TOOLBAR_ITEMS, myItem]`.
22
+ */
23
+ export const DEFAULT_EDITOR_TOOLBAR_ITEMS: readonly EditorToolbarItem[] = [
24
+ { type: 'mark', mark: 'bold', label: 'Bold', icon: defaultIcon('bold') },
25
+ { type: 'mark', mark: 'italic', label: 'Italic', icon: defaultIcon('italic') },
26
+ { type: 'mark', mark: 'underline', label: 'Underline', icon: defaultIcon('underline') },
27
+ { type: 'mark', mark: 'strike', label: 'Strikethrough', icon: defaultIcon('strike') },
28
+ { type: 'blockquote', label: 'Blockquote', icon: defaultIcon('blockquote') },
29
+ { type: 'separator' },
30
+ {
31
+ type: 'list',
32
+ listType: 'bullet_list',
33
+ label: 'Bullet List',
34
+ icon: defaultIcon('bulletList'),
35
+ },
36
+ {
37
+ type: 'list',
38
+ listType: 'ordered_list',
39
+ label: 'Ordered List',
40
+ icon: defaultIcon('orderedList'),
41
+ },
42
+ {
43
+ type: 'command',
44
+ command: 'indentList',
45
+ label: 'Indent List',
46
+ icon: defaultIcon('indentList'),
47
+ },
48
+ {
49
+ type: 'command',
50
+ command: 'outdentList',
51
+ label: 'Outdent List',
52
+ icon: defaultIcon('outdentList'),
53
+ },
54
+ { type: 'node', nodeType: 'hard_break', label: 'Line Break', icon: defaultIcon('lineBreak') },
55
+ {
56
+ type: 'node',
57
+ nodeType: 'horizontal_rule',
58
+ label: 'Horizontal Rule',
59
+ icon: defaultIcon('horizontalRule'),
60
+ },
61
+ { type: 'separator' },
62
+ { type: 'command', command: 'undo', label: 'Undo', icon: defaultIcon('undo') },
63
+ { type: 'command', command: 'redo', label: 'Redo', icon: defaultIcon('redo') },
64
+ ] as const;
@@ -0,0 +1,254 @@
1
+ import React, { createContext, useEffect, useSyncExternalStore, useState } from 'react';
2
+ import type { MentionSuggestion } from './addons';
3
+ import type { EditorMentionTheme } from './EditorTheme';
4
+
5
+ export interface EditorToolbarFrame {
6
+ x: number;
7
+ y: number;
8
+ width: number;
9
+ height: number;
10
+ }
11
+
12
+ export type EditorToolbarFrameListener = () => void;
13
+
14
+ export interface EditorToolbarFrameRegistration {
15
+ ownerId: number | null;
16
+ frame: EditorToolbarFrame;
17
+ }
18
+
19
+ export const editorToolbarFrames = new Map<number, EditorToolbarFrameRegistration>();
20
+
21
+ export const editorToolbarFrameListeners = new Set<EditorToolbarFrameListener>();
22
+
23
+ export const editorToolbarMentionStateListeners = new Set<EditorToolbarFrameListener>();
24
+
25
+ export let nextEditorToolbarRegistrationId = 1;
26
+
27
+ export let activeEditorToolbarInteractions = 0;
28
+
29
+ export let editorToolbarFocusPreserveUntil = 0;
30
+
31
+ export let activeEditorToolbarFrameOwnerId: number | null = null;
32
+
33
+ export function allocateEditorToolbarRegistrationId(): number {
34
+ return nextEditorToolbarRegistrationId++;
35
+ }
36
+
37
+ export const EditorToolbarFrameOwnerContext = createContext<number | null>(null);
38
+
39
+ export function EditorToolbarFrameOwnerProvider({
40
+ ownerId,
41
+ children,
42
+ }: {
43
+ ownerId: number;
44
+ children: React.ReactNode;
45
+ }) {
46
+ return (
47
+ <EditorToolbarFrameOwnerContext.Provider value={ownerId}>
48
+ {children}
49
+ </EditorToolbarFrameOwnerContext.Provider>
50
+ );
51
+ }
52
+
53
+ export interface EditorToolbarMentionState {
54
+ ownerId: number;
55
+ trigger: string;
56
+ suggestions: readonly MentionSuggestion[];
57
+ theme?: EditorMentionTheme;
58
+ suggestionThemes?: Readonly<Record<string, EditorMentionTheme | undefined>>;
59
+ onSelectSuggestion: (suggestion: MentionSuggestion) => void;
60
+ }
61
+
62
+ export let editorToolbarMentionState: EditorToolbarMentionState | null = null;
63
+
64
+ export const EDITOR_TOOLBAR_FOCUS_PRESERVE_MS = 750;
65
+
66
+ export function areToolbarFramesEqual(
67
+ left: EditorToolbarFrame | undefined,
68
+ right: EditorToolbarFrame | undefined
69
+ ): boolean {
70
+ return (
71
+ left?.x === right?.x &&
72
+ left?.y === right?.y &&
73
+ left?.width === right?.width &&
74
+ left?.height === right?.height
75
+ );
76
+ }
77
+
78
+ export function areToolbarFrameListsEqual(
79
+ left: readonly EditorToolbarFrame[],
80
+ right: readonly EditorToolbarFrame[]
81
+ ): boolean {
82
+ if (left.length !== right.length) {
83
+ return false;
84
+ }
85
+ return left.every((frame, index) => areToolbarFramesEqual(frame, right[index]));
86
+ }
87
+
88
+ export function notifyEditorToolbarFrameListeners() {
89
+ editorToolbarFrameListeners.forEach((listener) => listener());
90
+ }
91
+
92
+ export function notifyEditorToolbarMentionStateListeners() {
93
+ editorToolbarMentionStateListeners.forEach((listener) => listener());
94
+ }
95
+
96
+ export function getEditorToolbarFramesSnapshot(ownerId: number): EditorToolbarFrame[] {
97
+ return Array.from(editorToolbarFrames.values())
98
+ .filter(
99
+ (registration) =>
100
+ registration.ownerId === ownerId ||
101
+ (registration.ownerId == null && activeEditorToolbarFrameOwnerId === ownerId)
102
+ )
103
+ .map((registration) => registration.frame);
104
+ }
105
+
106
+ export function subscribeEditorToolbarMentionState(listener: EditorToolbarFrameListener) {
107
+ editorToolbarMentionStateListeners.add(listener);
108
+ return () => {
109
+ editorToolbarMentionStateListeners.delete(listener);
110
+ };
111
+ }
112
+
113
+ export function getEditorToolbarMentionStateSnapshot(): EditorToolbarMentionState | null {
114
+ return editorToolbarMentionState;
115
+ }
116
+
117
+ export function useEditorToolbarMentionState(): EditorToolbarMentionState | null {
118
+ return useSyncExternalStore(
119
+ subscribeEditorToolbarMentionState,
120
+ getEditorToolbarMentionStateSnapshot,
121
+ getEditorToolbarMentionStateSnapshot
122
+ );
123
+ }
124
+
125
+ export function registerEditorToolbarFrame(
126
+ id: number,
127
+ frame: EditorToolbarFrame | null,
128
+ ownerId: number | null
129
+ ) {
130
+ if (frame == null || frame.width <= 0 || frame.height <= 0) {
131
+ if (editorToolbarFrames.delete(id)) {
132
+ notifyEditorToolbarFrameListeners();
133
+ }
134
+ return;
135
+ }
136
+
137
+ const currentRegistration = editorToolbarFrames.get(id);
138
+ if (
139
+ currentRegistration?.ownerId === ownerId &&
140
+ areToolbarFramesEqual(currentRegistration.frame, frame)
141
+ ) {
142
+ return;
143
+ }
144
+
145
+ editorToolbarFrames.set(id, { ownerId, frame });
146
+ notifyEditorToolbarFrameListeners();
147
+ }
148
+
149
+ export function unregisterEditorToolbarFrame(id: number) {
150
+ if (editorToolbarFrames.delete(id)) {
151
+ notifyEditorToolbarFrameListeners();
152
+ }
153
+ }
154
+
155
+ export function preserveEditorToolbarFocusForNextBlur() {
156
+ editorToolbarFocusPreserveUntil = Date.now() + EDITOR_TOOLBAR_FOCUS_PRESERVE_MS;
157
+ }
158
+
159
+ export function beginEditorToolbarInteraction() {
160
+ activeEditorToolbarInteractions += 1;
161
+ preserveEditorToolbarFocusForNextBlur();
162
+ }
163
+
164
+ export function endEditorToolbarInteraction() {
165
+ activeEditorToolbarInteractions = Math.max(0, activeEditorToolbarInteractions - 1);
166
+ preserveEditorToolbarFocusForNextBlur();
167
+ }
168
+
169
+ export function isEditorToolbarFocusPreservationActive(): boolean {
170
+ return activeEditorToolbarInteractions > 0 || Date.now() <= editorToolbarFocusPreserveUntil;
171
+ }
172
+
173
+ export function setActiveEditorToolbarFrameOwnerForEditor(ownerId: number, isActive: boolean) {
174
+ const nextOwnerId = isActive
175
+ ? ownerId
176
+ : activeEditorToolbarFrameOwnerId === ownerId
177
+ ? null
178
+ : activeEditorToolbarFrameOwnerId;
179
+ if (activeEditorToolbarFrameOwnerId === nextOwnerId) {
180
+ return;
181
+ }
182
+ activeEditorToolbarFrameOwnerId = nextOwnerId;
183
+ notifyEditorToolbarFrameListeners();
184
+ }
185
+
186
+ export function useEditorToolbarFrames(ownerId: number): readonly EditorToolbarFrame[] {
187
+ const [frames, setFrames] = useState<EditorToolbarFrame[]>(() =>
188
+ getEditorToolbarFramesSnapshot(ownerId)
189
+ );
190
+
191
+ useEffect(() => {
192
+ const listener = () => {
193
+ const nextFrames = getEditorToolbarFramesSnapshot(ownerId);
194
+ setFrames((currentFrames) =>
195
+ areToolbarFrameListsEqual(currentFrames, nextFrames) ? currentFrames : nextFrames
196
+ );
197
+ };
198
+ editorToolbarFrameListeners.add(listener);
199
+ listener();
200
+ return () => {
201
+ editorToolbarFrameListeners.delete(listener);
202
+ };
203
+ }, [ownerId]);
204
+
205
+ return frames;
206
+ }
207
+
208
+ export function setEditorToolbarMentionState(
209
+ ownerId: number,
210
+ state: Omit<EditorToolbarMentionState, 'ownerId'> | null
211
+ ) {
212
+ if (state == null) {
213
+ if (editorToolbarMentionState?.ownerId !== ownerId) {
214
+ return;
215
+ }
216
+ editorToolbarMentionState = null;
217
+ notifyEditorToolbarMentionStateListeners();
218
+ return;
219
+ }
220
+
221
+ editorToolbarMentionState = {
222
+ ownerId,
223
+ ...state,
224
+ };
225
+ notifyEditorToolbarMentionStateListeners();
226
+ }
227
+
228
+ export function _setEditorToolbarFrameForTests(
229
+ id: number,
230
+ frame: EditorToolbarFrame | null,
231
+ ownerId: number | null = null
232
+ ) {
233
+ registerEditorToolbarFrame(id, frame, ownerId);
234
+ }
235
+
236
+ export function _resetEditorToolbarFrameRegistryForTests() {
237
+ editorToolbarFrames.clear();
238
+ editorToolbarMentionState = null;
239
+ activeEditorToolbarInteractions = 0;
240
+ editorToolbarFocusPreserveUntil = 0;
241
+ activeEditorToolbarFrameOwnerId = null;
242
+ notifyEditorToolbarFrameListeners();
243
+ notifyEditorToolbarMentionStateListeners();
244
+ }
245
+
246
+ export function _beginEditorToolbarInteractionForTests() {
247
+ beginEditorToolbarInteraction();
248
+ }
249
+
250
+ export function _endEditorToolbarInteractionForTests() {
251
+ endEditorToolbarInteraction();
252
+ }
253
+
254
+ export const BUTTON_HIT = 44;
@@ -0,0 +1,322 @@
1
+ import type { HistoryState, ReadonlyActiveState } from './NativeEditorBridge';
2
+ import type { EditorToolbarTheme } from './EditorTheme';
3
+
4
+ /** List kinds a first-class `list` toolbar item can toggle. */
5
+ export type EditorToolbarListType = 'bullet_list' | 'ordered_list' | 'bulletList' | 'orderedList';
6
+
7
+ /** Heading levels the toolbar and `toggleHeading` accept. */
8
+ export type EditorToolbarHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
9
+
10
+ /** Commands a `command` toolbar item can run. */
11
+ export type EditorToolbarCommand = 'indentList' | 'outdentList' | 'undo' | 'redo';
12
+
13
+ /**
14
+ * How a group's children are shown: `'expand'` reveals them inline in the
15
+ * toolbar row, `'menu'` opens them in a popover.
16
+ */
17
+ export type EditorToolbarGroupPresentation = 'expand' | 'menu';
18
+
19
+ /**
20
+ * Which region of the toolbar an item sits in. `'start'` and `'end'` pin the
21
+ * item to that edge; `'scroll'` (the default) puts it in the scrolling middle
22
+ * row.
23
+ */
24
+ export type EditorToolbarItemPlacement = 'start' | 'scroll' | 'end';
25
+
26
+ /** Icons the package draws itself, on both platforms. */
27
+ export type EditorToolbarDefaultIconId =
28
+ | 'bold'
29
+ | 'italic'
30
+ | 'underline'
31
+ | 'strike'
32
+ | 'link'
33
+ | 'image'
34
+ | 'h1'
35
+ | 'h2'
36
+ | 'h3'
37
+ | 'h4'
38
+ | 'h5'
39
+ | 'h6'
40
+ | 'blockquote'
41
+ | 'bulletList'
42
+ | 'orderedList'
43
+ | 'indentList'
44
+ | 'outdentList'
45
+ | 'lineBreak'
46
+ | 'horizontalRule'
47
+ | 'undo'
48
+ | 'redo';
49
+
50
+ /** An SF Symbol, used for the iOS half of a `platform` icon. */
51
+ export interface EditorToolbarSFSymbolIcon {
52
+ type: 'sfSymbol';
53
+ /** SF Symbol name, e.g. `'bold'`. */
54
+ name: string;
55
+ }
56
+
57
+ /** A Material icon, used for the Android half of a `platform` icon. */
58
+ export interface EditorToolbarMaterialIcon {
59
+ type: 'material';
60
+ /** Material icon name, e.g. `'format_bold'`. */
61
+ name: string;
62
+ }
63
+
64
+ /**
65
+ * A toolbar button's icon:
66
+ *
67
+ * - `default` — one of the package's built-in icons.
68
+ * - `glyph` — arbitrary text or an emoji, drawn as-is.
69
+ * - `platform` — per-platform native icons, with `fallbackText` when the
70
+ * platform cannot resolve the named icon.
71
+ */
72
+ export type EditorToolbarIcon =
73
+ | {
74
+ type: 'default';
75
+ id: EditorToolbarDefaultIconId;
76
+ }
77
+ | {
78
+ type: 'glyph';
79
+ text: string;
80
+ }
81
+ | {
82
+ type: 'platform';
83
+ ios?: EditorToolbarSFSymbolIcon;
84
+ android?: EditorToolbarMaterialIcon;
85
+ fallbackText?: string;
86
+ };
87
+
88
+ /** Visual overrides for one toolbar button. */
89
+ export interface EditorToolbarButtonStyle {
90
+ iconSize?: number;
91
+ color?: string;
92
+ backgroundColor?: string;
93
+ activeColor?: string;
94
+ disabledColor?: string;
95
+ activeBackgroundColor?: string;
96
+ disabledBackgroundColor?: string;
97
+ borderRadius?: number;
98
+ }
99
+
100
+ /**
101
+ * A single toolbar button. Every variant takes a `label` (its accessible
102
+ * name), an `icon`, an optional `key` (defaults to something derived from the
103
+ * variant), and an optional `placement`.
104
+ *
105
+ * - `mark` — toggles the named mark; active and enabled state come from the engine.
106
+ * - `link` / `image` — calls the editor's `onRequestLink` / `onRequestImage`.
107
+ * - `heading` — toggles the given heading level.
108
+ * - `blockquote` — toggles blockquote wrapping.
109
+ * - `list` — toggles the given list type.
110
+ * - `command` — runs an {@link EditorToolbarCommand}.
111
+ * - `node` — inserts the named node type, e.g. `'horizontalRule'`.
112
+ * - `action` — host-defined; calls `onToolbarAction` with its `key`, and the
113
+ * host supplies `isActive`/`isDisabled` since the engine knows nothing about it.
114
+ */
115
+ export type EditorToolbarLeafItem = (
116
+ | {
117
+ type: 'mark';
118
+ mark: string;
119
+ label: string;
120
+ icon: EditorToolbarIcon;
121
+ key?: string;
122
+ placement?: EditorToolbarItemPlacement;
123
+ }
124
+ | {
125
+ type: 'link';
126
+ label: string;
127
+ icon: EditorToolbarIcon;
128
+ key?: string;
129
+ placement?: EditorToolbarItemPlacement;
130
+ }
131
+ | {
132
+ type: 'image';
133
+ label: string;
134
+ icon: EditorToolbarIcon;
135
+ key?: string;
136
+ placement?: EditorToolbarItemPlacement;
137
+ }
138
+ | {
139
+ type: 'heading';
140
+ level: EditorToolbarHeadingLevel;
141
+ label: string;
142
+ icon: EditorToolbarIcon;
143
+ key?: string;
144
+ placement?: EditorToolbarItemPlacement;
145
+ }
146
+ | {
147
+ type: 'blockquote';
148
+ label: string;
149
+ icon: EditorToolbarIcon;
150
+ key?: string;
151
+ placement?: EditorToolbarItemPlacement;
152
+ }
153
+ | {
154
+ type: 'list';
155
+ listType: EditorToolbarListType;
156
+ label: string;
157
+ icon: EditorToolbarIcon;
158
+ key?: string;
159
+ placement?: EditorToolbarItemPlacement;
160
+ }
161
+ | {
162
+ type: 'command';
163
+ command: EditorToolbarCommand;
164
+ label: string;
165
+ icon: EditorToolbarIcon;
166
+ key?: string;
167
+ placement?: EditorToolbarItemPlacement;
168
+ }
169
+ | {
170
+ type: 'node';
171
+ nodeType: string;
172
+ label: string;
173
+ icon: EditorToolbarIcon;
174
+ key?: string;
175
+ placement?: EditorToolbarItemPlacement;
176
+ }
177
+ | {
178
+ type: 'action';
179
+ key: string;
180
+ label: string;
181
+ icon: EditorToolbarIcon;
182
+ isActive?: boolean;
183
+ isDisabled?: boolean;
184
+ placement?: EditorToolbarItemPlacement;
185
+ }
186
+ ) & {
187
+ buttonStyle?: EditorToolbarButtonStyle;
188
+ };
189
+
190
+ /** What a group may contain. Groups do not nest. */
191
+ export type EditorToolbarGroupChildItem = EditorToolbarLeafItem;
192
+
193
+ /**
194
+ * Several buttons collapsed behind one — heading levels, say. The group
195
+ * reports active when any child is active, and disabled when every child is.
196
+ */
197
+ export interface EditorToolbarGroupItem {
198
+ type: 'group';
199
+ /** Identity of the group. Required, unlike a leaf item's key. */
200
+ key: string;
201
+ /** Accessible name for the group button. */
202
+ label: string;
203
+ icon: EditorToolbarIcon;
204
+ /** How the children are revealed. Defaults to `'expand'`. */
205
+ presentation?: EditorToolbarGroupPresentation;
206
+ placement?: EditorToolbarItemPlacement;
207
+ buttonStyle?: EditorToolbarButtonStyle;
208
+ items: readonly EditorToolbarGroupChildItem[];
209
+ }
210
+
211
+ /**
212
+ * One entry in `toolbarItems`: a button, a group of buttons, or a separator.
213
+ * The same list drives the JavaScript `EditorToolbar` and the native keyboard
214
+ * toolbar.
215
+ */
216
+ export type EditorToolbarItem =
217
+ | EditorToolbarLeafItem
218
+ | EditorToolbarGroupItem
219
+ | {
220
+ type: 'separator';
221
+ key?: string;
222
+ placement?: EditorToolbarItemPlacement;
223
+ };
224
+
225
+ export interface ToolbarButton {
226
+ key: string;
227
+ label: string;
228
+ icon: EditorToolbarIcon;
229
+ buttonStyle?: EditorToolbarButtonStyle;
230
+ action: () => void;
231
+ isActive?: boolean;
232
+ isDisabled?: boolean;
233
+ groupKey?: string;
234
+ placement: EditorToolbarItemPlacement;
235
+ }
236
+
237
+ export interface ToolbarGroupButton {
238
+ key: string;
239
+ label: string;
240
+ icon: EditorToolbarIcon;
241
+ buttonStyle?: EditorToolbarButtonStyle;
242
+ presentation: EditorToolbarGroupPresentation;
243
+ placement: EditorToolbarItemPlacement;
244
+ children: readonly ToolbarButton[];
245
+ isActive: boolean;
246
+ isDisabled: boolean;
247
+ isExpanded: boolean;
248
+ isOpen: boolean;
249
+ }
250
+
251
+ export interface ToolbarMenuState {
252
+ groupKey: string;
253
+ x: number;
254
+ y: number;
255
+ width: number;
256
+ height: number;
257
+ }
258
+
259
+ export type ToolbarRenderedItem =
260
+ | { type: 'separator'; key: string; placement: EditorToolbarItemPlacement }
261
+ | { type: 'button'; button: ToolbarButton }
262
+ | { type: 'group'; group: ToolbarGroupButton };
263
+
264
+ export interface EditorToolbarProps {
265
+ /** Currently active marks and nodes from the Rust engine. */
266
+ activeState: ReadonlyActiveState;
267
+ /** Current undo/redo availability. */
268
+ historyState: HistoryState;
269
+ /** Toggle bold mark. */
270
+ onToggleBold: () => void;
271
+ /** Toggle italic mark. */
272
+ onToggleItalic: () => void;
273
+ /** Toggle underline mark. */
274
+ onToggleUnderline: () => void;
275
+ /** Toggle strikethrough mark. */
276
+ onToggleStrike: () => void;
277
+ /** Toggle bullet list. */
278
+ onToggleBulletList?: () => void;
279
+ /** Toggle blockquote wrapping. */
280
+ onToggleBlockquote?: () => void;
281
+ /** Toggle ordered list. */
282
+ onToggleOrderedList?: () => void;
283
+ /** Indent the current list item. */
284
+ onIndentList?: () => void;
285
+ /** Outdent the current list item. */
286
+ onOutdentList?: () => void;
287
+ /** Insert horizontal rule. */
288
+ onInsertHorizontalRule?: () => void;
289
+ /** Insert inline hard break. */
290
+ onInsertLineBreak?: () => void;
291
+ /** Undo the last operation. */
292
+ onUndo: () => void;
293
+ /** Redo the last undone operation. */
294
+ onRedo: () => void;
295
+ /** Generic mark toggle handler used by configurable mark buttons. */
296
+ onToggleMark?: (mark: string) => void;
297
+ /** Generic list toggle handler used by configurable list buttons. */
298
+ onToggleListType?: (listType: EditorToolbarListType) => void;
299
+ /** Generic heading toggle handler used by configurable heading buttons. */
300
+ onToggleHeading?: (level: EditorToolbarHeadingLevel) => void;
301
+ /** Generic node insertion handler used by configurable node buttons. */
302
+ onInsertNodeType?: (nodeType: string) => void;
303
+ /** Generic command handler used by configurable command buttons. */
304
+ onRunCommand?: (command: EditorToolbarCommand) => void;
305
+ /** Generic action handler for arbitrary JS-defined toolbar buttons. */
306
+ onToolbarAction?: (key: string) => void;
307
+ /** Link button handler used by first-class link toolbar items. */
308
+ onRequestLink?: () => void;
309
+ /** Image button handler used by first-class image toolbar items. */
310
+ onRequestImage?: () => void;
311
+ /** Displayed toolbar items, in order. Defaults to the built-in toolbar. */
312
+ toolbarItems?: readonly EditorToolbarItem[];
313
+ /** Optional theme overrides for toolbar chrome and button colors. */
314
+ theme?: EditorToolbarTheme;
315
+ /** Whether to render the built-in top separator line. */
316
+ showTopBorder?: boolean;
317
+ /**
318
+ * Keep RichTextEditor focused when this toolbar is rendered outside
319
+ * the editor wrapper. Defaults to true.
320
+ */
321
+ preserveEditorFocus?: boolean;
322
+ }