@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.
- package/LICENSE +160 -0
- package/README.md +259 -0
- package/RUST-STANDARD-LIBRARY-NOTICES.html +8266 -0
- package/ReactNativeProseEditor.podspec +59 -0
- package/THIRD_PARTY_NOTICES.md +31155 -0
- package/android/build.gradle +188 -0
- package/android/consumer-rules.pro +18 -0
- package/android/expo/build.gradle +17 -0
- package/android/src/debug/java/com/apollohg/editor/viewer/PreparedProseDrawInstrumentation.kt +7 -0
- package/android/src/main/assets/editor-icons/MaterialIcons.json +2236 -0
- package/android/src/main/assets/editor-icons/MaterialIcons.ttf +0 -0
- package/android/src/main/java/com/apollohg/editor/AndroidApiCompat.kt +19 -0
- package/android/src/main/java/com/apollohg/editor/AndroidCollaborationTransport.kt +860 -0
- package/android/src/main/java/com/apollohg/editor/CaretGeometry.kt +91 -0
- package/android/src/main/java/com/apollohg/editor/CodeHighlighting.kt +141 -0
- package/android/src/main/java/com/apollohg/editor/DecodedBitmapBudget.kt +250 -0
- package/android/src/main/java/com/apollohg/editor/EditorAddons.kt +133 -0
- package/android/src/main/java/com/apollohg/editor/EditorBlockSpacing.kt +51 -0
- package/android/src/main/java/com/apollohg/editor/EditorBoxDrawable.kt +16 -0
- package/android/src/main/java/com/apollohg/editor/EditorBoxDrawing.kt +234 -0
- package/android/src/main/java/com/apollohg/editor/EditorCheckboxSpan.kt +87 -0
- package/android/src/main/java/com/apollohg/editor/EditorCodeHighlighting.kt +120 -0
- package/android/src/main/java/com/apollohg/editor/EditorDecorationLayer.java +18 -0
- package/android/src/main/java/com/apollohg/editor/EditorDocumentLayout.kt +626 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditText.kt +1042 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextAnnotations.kt +191 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextCaret.kt +100 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextClipboard.kt +101 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextComposition.kt +220 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextConfiguration.kt +316 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextCorrection.kt +303 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextDeferredUpdates.kt +327 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextDeletion.kt +258 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextDiagnostics.kt +83 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextDragDrop.kt +67 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextExternalComposition.kt +357 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextHardwareInput.kt +277 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextImages.kt +280 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextInputLifecycle.kt +183 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextInputPreparation.kt +79 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextInputTraits.kt +384 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextLayout.kt +100 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextNativeMutation.kt +243 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextPlaceholder.kt +154 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextRenderPatch.kt +347 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextRendering.kt +313 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextRustCommands.kt +281 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextSelection.kt +352 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextState.kt +113 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextTaskMarkers.kt +92 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextTextCommit.kt +327 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextToolbar.kt +84 -0
- package/android/src/main/java/com/apollohg/editor/EditorEditTextUpdates.kt +245 -0
- package/android/src/main/java/com/apollohg/editor/EditorGlyphHeightCursorDrawable.kt +42 -0
- package/android/src/main/java/com/apollohg/editor/EditorHeightBehavior.kt +13 -0
- package/android/src/main/java/com/apollohg/editor/EditorInputConnection.kt +923 -0
- package/android/src/main/java/com/apollohg/editor/EditorInputCoordinates.kt +191 -0
- package/android/src/main/java/com/apollohg/editor/EditorInputCorrection.kt +107 -0
- package/android/src/main/java/com/apollohg/editor/EditorInputCursorGeometry.kt +128 -0
- package/android/src/main/java/com/apollohg/editor/EditorInputSnapshots.kt +134 -0
- package/android/src/main/java/com/apollohg/editor/EditorInputSurroundingDeletion.kt +321 -0
- package/android/src/main/java/com/apollohg/editor/EditorKeyboardToolbarView.kt +851 -0
- package/android/src/main/java/com/apollohg/editor/EditorMentionStyle.kt +192 -0
- package/android/src/main/java/com/apollohg/editor/EditorReconciliationWatcher.kt +46 -0
- package/android/src/main/java/com/apollohg/editor/EditorStyleSheet.kt +303 -0
- package/android/src/main/java/com/apollohg/editor/EditorStyleSheetSpans.kt +253 -0
- package/android/src/main/java/com/apollohg/editor/EditorSurfaceInputConnection.kt +67 -0
- package/android/src/main/java/com/apollohg/editor/EditorTextDecorationDrawing.kt +143 -0
- package/android/src/main/java/com/apollohg/editor/EditorTextSurface.kt +712 -0
- package/android/src/main/java/com/apollohg/editor/EditorTextSurfaceDragDrop.kt +94 -0
- package/android/src/main/java/com/apollohg/editor/EditorTextSurfaceInteraction.kt +708 -0
- package/android/src/main/java/com/apollohg/editor/EditorTheme.kt +650 -0
- package/android/src/main/java/com/apollohg/editor/EditorV2Adapter.kt +912 -0
- package/android/src/main/java/com/apollohg/editor/EditorV2AdapterMutations.kt +402 -0
- package/android/src/main/java/com/apollohg/editor/EditorV2AdapterRendering.kt +123 -0
- package/android/src/main/java/com/apollohg/editor/EditorV2AdapterSelection.kt +203 -0
- package/android/src/main/java/com/apollohg/editor/EditorV2Backend.kt +120 -0
- package/android/src/main/java/com/apollohg/editor/EditorV2Driver.kt +87 -0
- package/android/src/main/java/com/apollohg/editor/EditorV2Registry.kt +97 -0
- package/android/src/main/java/com/apollohg/editor/EditorV2RenderValidation.kt +409 -0
- package/android/src/main/java/com/apollohg/editor/ExpoAutoGrowStyleSizePublisher.kt +34 -0
- package/android/src/main/java/com/apollohg/editor/ImageResizeOverlayView.kt +266 -0
- package/android/src/main/java/com/apollohg/editor/ImeTextCoordinateMapper.kt +102 -0
- package/android/src/main/java/com/apollohg/editor/KeyboardToolbarImeAnimationController.kt +101 -0
- package/android/src/main/java/com/apollohg/editor/MentionSuggestionChipView.kt +234 -0
- package/android/src/main/java/com/apollohg/editor/NativeCollaborationTransportRegistry.kt +493 -0
- package/android/src/main/java/com/apollohg/editor/NativeEditorExpoView.kt +813 -0
- package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewAtoms.kt +68 -0
- package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewBinding.kt +126 -0
- package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewDiagnostics.kt +208 -0
- package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewErrors.kt +146 -0
- package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewEvents.kt +150 -0
- package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewExternalComposition.kt +39 -0
- package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewFocus.kt +176 -0
- package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewLifecycle.kt +302 -0
- package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewMentions.kt +259 -0
- package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewNativeActions.kt +179 -0
- package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewOutsideTap.kt +214 -0
- package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewPendingUpdates.kt +376 -0
- package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewProperties.kt +234 -0
- package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewPropertyRetries.kt +197 -0
- package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewToolbar.kt +285 -0
- package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewTypes.kt +28 -0
- package/android/src/main/java/com/apollohg/editor/NativeEditorExpoViewUpdates.kt +271 -0
- package/android/src/main/java/com/apollohg/editor/NativeEditorModule.kt +687 -0
- package/android/src/main/java/com/apollohg/editor/NativeEditorOutsideTapDispatcher.kt +380 -0
- package/android/src/main/java/com/apollohg/editor/NativeEditorV2Numbers.kt +45 -0
- package/android/src/main/java/com/apollohg/editor/NativeEditorViewRegistry.kt +372 -0
- package/android/src/main/java/com/apollohg/editor/NativeImagePipeline.kt +22 -0
- package/android/src/main/java/com/apollohg/editor/NativeToolbar.kt +193 -0
- package/android/src/main/java/com/apollohg/editor/NativeToolbarIcons.kt +177 -0
- package/android/src/main/java/com/apollohg/editor/NativeToolbarItem.kt +274 -0
- package/android/src/main/java/com/apollohg/editor/OkHttpCollaborationSocket.kt +102 -0
- package/android/src/main/java/com/apollohg/editor/OrderedListMarkerFormatter.kt +130 -0
- package/android/src/main/java/com/apollohg/editor/PointerTransparentView.java +18 -0
- package/android/src/main/java/com/apollohg/editor/PositionBridge.kt +128 -0
- package/android/src/main/java/com/apollohg/editor/ProseViewerView.kt +854 -0
- package/android/src/main/java/com/apollohg/editor/RemoteSelectionOverlayView.kt +314 -0
- package/android/src/main/java/com/apollohg/editor/RenderBlockSpans.kt +314 -0
- package/android/src/main/java/com/apollohg/editor/RenderBridge.kt +224 -0
- package/android/src/main/java/com/apollohg/editor/RenderBridgeBlockStyles.kt +407 -0
- package/android/src/main/java/com/apollohg/editor/RenderBridgeElements.kt +544 -0
- package/android/src/main/java/com/apollohg/editor/RenderBridgeInlineAndAtoms.kt +631 -0
- package/android/src/main/java/com/apollohg/editor/RenderBridgeParagraphs.kt +215 -0
- package/android/src/main/java/com/apollohg/editor/RenderImageDecoder.kt +748 -0
- package/android/src/main/java/com/apollohg/editor/RenderImageLoader.kt +900 -0
- package/android/src/main/java/com/apollohg/editor/RenderLayoutConstants.kt +117 -0
- package/android/src/main/java/com/apollohg/editor/RenderMediaSpans.kt +337 -0
- package/android/src/main/java/com/apollohg/editor/RenderParagraphSpans.kt +182 -0
- package/android/src/main/java/com/apollohg/editor/RichTextEditorView.kt +951 -0
- package/android/src/main/java/com/apollohg/editor/SharedNativeImagePipeline.kt +78 -0
- package/android/src/main/java/com/apollohg/editor/UniffiEditorV2Backend.kt +261 -0
- package/android/src/main/java/com/apollohg/editor/viewer/AndroidProseLayoutEngine.kt +1656 -0
- package/android/src/main/java/com/apollohg/editor/viewer/FabricAttachmentSidecars.kt +80 -0
- package/android/src/main/java/com/apollohg/editor/viewer/FabricLeaseHandleBridge.kt +59 -0
- package/android/src/main/java/com/apollohg/editor/viewer/FallbackSelectionGeometry.kt +450 -0
- package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseDrawingView.kt +678 -0
- package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseInstrumentation.kt +608 -0
- package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseLayout.kt +186 -0
- package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseLayoutCache.kt +393 -0
- package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseLayoutRegistry.kt +828 -0
- package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseTheme.kt +316 -0
- package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseViewerManager.kt +900 -0
- package/android/src/main/java/com/apollohg/editor/viewer/PreparedProseViewerPackage.kt +16 -0
- package/android/src/main/java/com/apollohg/editor/viewer/PreparedViewerAtoms.kt +89 -0
- package/android/src/main/java/com/apollohg/editor/viewer/ViewerCodeHighlighting.kt +91 -0
- package/android/src/main/java/com/apollohg/editor/viewer/ViewerDocument.kt +453 -0
- package/android/src/main/java/com/apollohg/editor/viewer/ViewerFontEnvironment.kt +282 -0
- package/android/src/main/java/com/apollohg/editor/viewer/ViewerImagePipeline.kt +460 -0
- package/android/src/main/jni/CMakeLists.txt +85 -0
- package/android/src/main/jni/PreparedProseViewerMeasurementsManager.cpp +334 -0
- package/android/src/main/jni/ReactNativeProseEditorSpec.h +17 -0
- package/android/src/main/jni/reactnativeproseeditor.h +6 -0
- package/android/src/main/res/values/attrs.xml +6 -0
- package/android/src/release/java/com/apollohg/editor/viewer/PreparedProseDrawInstrumentation.kt +9 -0
- package/app.plugin.js +62 -0
- package/common/cpp/react/renderer/components/PreparedProseViewer/PreparedProseMeasurementsManager.h +62 -0
- package/common/cpp/react/renderer/components/PreparedProseViewer/PreparedProseViewerComponentDescriptor.h +30 -0
- package/common/cpp/react/renderer/components/PreparedProseViewer/PreparedProseViewerShadowNode.cpp +192 -0
- package/common/cpp/react/renderer/components/PreparedProseViewer/PreparedProseViewerShadowNode.h +46 -0
- package/common/cpp/react/renderer/components/PreparedProseViewer/PreparedProseViewerState.h +145 -0
- package/dist/AtomHost.d.ts +17 -0
- package/dist/AtomHost.js +135 -0
- package/dist/DefaultAtomChip.d.ts +2 -0
- package/dist/DefaultAtomChip.js +22 -0
- package/dist/EditorAddon.d.ts +32 -0
- package/dist/EditorAddon.js +29 -0
- package/dist/EditorAddonNormalization.d.ts +6 -0
- package/dist/EditorAddonNormalization.js +48 -0
- package/dist/EditorMentionThemeNormalization.d.ts +8 -0
- package/dist/EditorMentionThemeNormalization.js +22 -0
- package/dist/EditorMentionThemeValidation.d.ts +12 -0
- package/dist/EditorMentionThemeValidation.js +95 -0
- package/dist/EditorStyleSheet.d.ts +4 -0
- package/dist/EditorStyleSheet.js +10 -0
- package/dist/EditorStyleSheetNormalization.d.ts +3 -0
- package/dist/EditorStyleSheetNormalization.js +226 -0
- package/dist/EditorStyleSheetTypes.d.ts +151 -0
- package/dist/EditorStyleSheetTypes.js +2 -0
- package/dist/EditorTheme.d.ts +117 -0
- package/dist/EditorTheme.js +41 -0
- package/dist/EditorToolbar.d.ts +4 -0
- package/dist/EditorToolbar.js +17 -0
- package/dist/EditorToolbarComponent.d.ts +13 -0
- package/dist/EditorToolbarComponent.js +24 -0
- package/dist/EditorToolbarItems.d.ts +9 -0
- package/dist/EditorToolbarItems.js +58 -0
- package/dist/EditorToolbarRegistry.d.ts +59 -0
- package/dist/EditorToolbarRegistry.js +175 -0
- package/dist/EditorToolbarTypes.d.ts +273 -0
- package/dist/EditorToolbarTypes.js +2 -0
- package/dist/EditorToolbarVisuals.d.ts +154 -0
- package/dist/EditorToolbarVisuals.js +228 -0
- package/dist/EditorUpdateRevision.d.ts +8 -0
- package/dist/EditorUpdateRevision.js +22 -0
- package/dist/ExternalTextComposition.d.ts +45 -0
- package/dist/ExternalTextComposition.js +537 -0
- package/dist/ImageLoadingPolicy.d.ts +54 -0
- package/dist/ImageLoadingPolicy.js +60 -0
- package/dist/NativeEditorBoundaryError.d.ts +111 -0
- package/dist/NativeEditorBoundaryError.js +268 -0
- package/dist/NativeEditorBridge.d.ts +9 -0
- package/dist/NativeEditorBridge.js +37 -0
- package/dist/NativeEditorCollaborationTransport.d.ts +154 -0
- package/dist/NativeEditorCollaborationTransport.js +275 -0
- package/dist/NativeEditorCreateConfig.d.ts +16 -0
- package/dist/NativeEditorCreateConfig.js +249 -0
- package/dist/NativeEditorCreateJson.d.ts +76 -0
- package/dist/NativeEditorCreateJson.js +474 -0
- package/dist/NativeEditorCreateValidation.d.ts +32 -0
- package/dist/NativeEditorCreateValidation.js +150 -0
- package/dist/NativeEditorDocumentBridge.d.ts +72 -0
- package/dist/NativeEditorDocumentBridge.js +305 -0
- package/dist/NativeEditorDocumentHandle.d.ts +70 -0
- package/dist/NativeEditorDocumentHandle.js +89 -0
- package/dist/NativeEditorLocalAwareness.d.ts +34 -0
- package/dist/NativeEditorLocalAwareness.js +153 -0
- package/dist/NativeEditorNativeModule.d.ts +48 -0
- package/dist/NativeEditorNativeModule.js +34 -0
- package/dist/NativeEditorRenderNormalization.d.ts +22 -0
- package/dist/NativeEditorRenderNormalization.js +274 -0
- package/dist/NativeEditorResultNormalization.d.ts +108 -0
- package/dist/NativeEditorResultNormalization.js +400 -0
- package/dist/NativeEditorTypes.d.ts +318 -0
- package/dist/NativeEditorTypes.js +15 -0
- package/dist/NativeEditorV2Decimal.d.ts +5 -0
- package/dist/NativeEditorV2Decimal.js +18 -0
- package/dist/NativeProseViewer.d.ts +122 -0
- package/dist/NativeProseViewer.js +130 -0
- package/dist/NativeRichTextEditor.d.ts +3 -0
- package/dist/NativeRichTextEditor.js +6 -0
- package/dist/ResourceLimits.d.ts +100 -0
- package/dist/ResourceLimits.js +80 -0
- package/dist/RichTextEditor.d.ts +4 -0
- package/dist/RichTextEditor.js +25 -0
- package/dist/RichTextEditorNativeTypes.d.ts +122 -0
- package/dist/RichTextEditorNativeTypes.js +2 -0
- package/dist/RichTextEditorNativeView.d.ts +12 -0
- package/dist/RichTextEditorNativeView.js +15 -0
- package/dist/RichTextEditorSerialization.d.ts +53 -0
- package/dist/RichTextEditorSerialization.js +283 -0
- package/dist/RichTextEditorTypes.d.ts +281 -0
- package/dist/RichTextEditorTypes.js +2 -0
- package/dist/ViewerConfiguration.d.ts +22 -0
- package/dist/ViewerConfiguration.js +6 -0
- package/dist/YjsCollaboration.d.ts +146 -0
- package/dist/YjsCollaboration.js +496 -0
- package/dist/addons.d.ts +193 -0
- package/dist/addons.js +122 -0
- package/dist/atomConstants.d.ts +3 -0
- package/dist/atomConstants.js +6 -0
- package/dist/atomInstances.d.ts +35 -0
- package/dist/atomInstances.js +79 -0
- package/dist/atomPolicy.d.ts +4 -0
- package/dist/atomPolicy.js +47 -0
- package/dist/atomUpdates.d.ts +2 -0
- package/dist/atomUpdates.js +38 -0
- package/dist/atoms.d.ts +92 -0
- package/dist/atoms.js +222 -0
- package/dist/attributeValidation.d.ts +4 -0
- package/dist/attributeValidation.js +97 -0
- package/dist/contentExpression.d.ts +6 -0
- package/dist/contentExpression.js +335 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.js +78 -0
- package/dist/listMarkers.d.ts +15 -0
- package/dist/listMarkers.js +21 -0
- package/dist/schemaDefinition.d.ts +143 -0
- package/dist/schemaDefinition.js +206 -0
- package/dist/schemaDocument.d.ts +17 -0
- package/dist/schemaDocument.js +69 -0
- package/dist/schemaDocumentConstruction.d.ts +5 -0
- package/dist/schemaDocumentConstruction.js +125 -0
- package/dist/schemaNormalization.d.ts +29 -0
- package/dist/schemaNormalization.js +313 -0
- package/dist/schemaPresets.d.ts +68 -0
- package/dist/schemaPresets.js +198 -0
- package/dist/schemaResolution.d.ts +9 -0
- package/dist/schemaResolution.js +211 -0
- package/dist/schemas.d.ts +5 -0
- package/dist/schemas.js +28 -0
- package/dist/specs/PreparedProseViewerNativeComponent.d.ts +37 -0
- package/dist/specs/PreparedProseViewerNativeComponent.js +6 -0
- package/dist/useEditorToolbarInteractions.d.ts +12 -0
- package/dist/useEditorToolbarInteractions.js +218 -0
- package/dist/useEditorToolbarItems.d.ts +8 -0
- package/dist/useEditorToolbarItems.js +280 -0
- package/dist/useEditorToolbarPresentation.d.ts +4 -0
- package/dist/useEditorToolbarPresentation.js +203 -0
- package/dist/useEditorToolbarState.d.ts +63 -0
- package/dist/useEditorToolbarState.js +108 -0
- package/dist/useFocusPreservingFrames.d.ts +17 -0
- package/dist/useFocusPreservingFrames.js +108 -0
- package/dist/useNativeEditor.d.ts +66 -0
- package/dist/useNativeEditor.js +370 -0
- package/dist/useRichTextEditorCommands.d.ts +21 -0
- package/dist/useRichTextEditorCommands.js +299 -0
- package/dist/useRichTextEditorEvents.d.ts +18 -0
- package/dist/useRichTextEditorEvents.js +216 -0
- package/dist/useRichTextEditorMentions.d.ts +11 -0
- package/dist/useRichTextEditorMentions.js +316 -0
- package/dist/useRichTextEditorPresentation.d.ts +5 -0
- package/dist/useRichTextEditorPresentation.js +178 -0
- package/dist/useRichTextEditorState.d.ts +180 -0
- package/dist/useRichTextEditorState.js +405 -0
- package/dist/useRichTextEditorUpdates.d.ts +10 -0
- package/dist/useRichTextEditorUpdates.js +308 -0
- package/dist/useViewerAtoms.d.ts +38 -0
- package/dist/useViewerAtoms.js +288 -0
- package/expo-module.config.json +13 -0
- package/ios/EditorAddons.swift +354 -0
- package/ios/EditorCodeHighlighting.swift +184 -0
- package/ios/EditorCore.xcframework/Info.plist +44 -0
- package/ios/EditorCore.xcframework/ios-arm64/libeditor_core.a +0 -0
- package/ios/EditorCore.xcframework/ios-arm64_x86_64-simulator/libeditor_core.a +0 -0
- package/ios/EditorInteractionOverlays.swift +697 -0
- package/ios/EditorLayoutManager.swift +971 -0
- package/ios/EditorNodeTypes.swift +37 -0
- package/ios/EditorStyleSheet.swift +461 -0
- package/ios/EditorTextView+AttributedPatch.swift +305 -0
- package/ios/EditorTextView+Binding.swift +61 -0
- package/ios/EditorTextView+Caret.swift +333 -0
- package/ios/EditorTextView+Commands.swift +203 -0
- package/ios/EditorTextView+Delegate.swift +65 -0
- package/ios/EditorTextView+Diagnostics.swift +225 -0
- package/ios/EditorTextView+DragDrop.swift +290 -0
- package/ios/EditorTextView+ExternalComposition.swift +364 -0
- package/ios/EditorTextView+Images.swift +354 -0
- package/ios/EditorTextView+InputTraits.swift +200 -0
- package/ios/EditorTextView+KeyboardInput.swift +318 -0
- package/ios/EditorTextView+Layout.swift +245 -0
- package/ios/EditorTextView+MarkedText.swift +267 -0
- package/ios/EditorTextView+NativeInputLifecycle.swift +372 -0
- package/ios/EditorTextView+NativeMutation.swift +471 -0
- package/ios/EditorTextView+Reconciliation.swift +97 -0
- package/ios/EditorTextView+RenderPatch.swift +573 -0
- package/ios/EditorTextView+Rendering.swift +539 -0
- package/ios/EditorTextView+Selection.swift +542 -0
- package/ios/EditorTextView.swift +953 -0
- package/ios/EditorTheme.swift +626 -0
- package/ios/EditorV2Adapter+Commands.swift +204 -0
- package/ios/EditorV2Adapter+Envelope.swift +238 -0
- package/ios/EditorV2Adapter+Mutation.swift +392 -0
- package/ios/EditorV2Adapter+Registry.swift +185 -0
- package/ios/EditorV2Adapter+RenderState.swift +360 -0
- package/ios/EditorV2Adapter+RenderValidation.swift +420 -0
- package/ios/EditorV2Adapter+Selection.swift +329 -0
- package/ios/EditorV2Adapter+TextCommands.swift +430 -0
- package/ios/EditorV2Adapter.swift +376 -0
- package/ios/EditorV2Shadow.swift +353 -0
- package/ios/Generated_editor_core.swift +2378 -0
- package/ios/NativeCodeHighlighting.swift +159 -0
- package/ios/NativeCollaborationSocket.swift +144 -0
- package/ios/NativeCollaborationTransport+Protocol.swift +258 -0
- package/ios/NativeCollaborationTransport+Socket.swift +379 -0
- package/ios/NativeCollaborationTransport+Validation.swift +103 -0
- package/ios/NativeCollaborationTransport.swift +322 -0
- package/ios/NativeCollaborationTransportRegistry.swift +521 -0
- package/ios/NativeEditorExpoView+AccessoryRetry.swift +219 -0
- package/ios/NativeEditorExpoView+Binding.swift +268 -0
- package/ios/NativeEditorExpoView+Diagnostics.swift +66 -0
- package/ios/NativeEditorExpoView+Events.swift +131 -0
- package/ios/NativeEditorExpoView+Focus.swift +169 -0
- package/ios/NativeEditorExpoView+MentionRetry.swift +288 -0
- package/ios/NativeEditorExpoView+Mentions.swift +288 -0
- package/ios/NativeEditorExpoView+Properties.swift +300 -0
- package/ios/NativeEditorExpoView+Toolbar.swift +86 -0
- package/ios/NativeEditorExpoView+Updates.swift +312 -0
- package/ios/NativeEditorExpoView.swift +349 -0
- package/ios/NativeEditorModule.swift +856 -0
- package/ios/NativeEditorViewRegistry.swift +226 -0
- package/ios/NativeToolbar+ButtonStyle.swift +214 -0
- package/ios/NativeToolbar+Buttons.swift +228 -0
- package/ios/NativeToolbar+Diagnostics.swift +114 -0
- package/ios/NativeToolbar+Menu.swift +101 -0
- package/ios/NativeToolbar+Models.swift +519 -0
- package/ios/NativeToolbar+Placeholder.swift +39 -0
- package/ios/NativeToolbar.swift +612 -0
- package/ios/OrderedListMarkerFormatter.swift +103 -0
- package/ios/PositionBridge.swift +596 -0
- package/ios/ProseViewerView.swift +462 -0
- package/ios/RenderBridge+Atoms.swift +288 -0
- package/ios/RenderBridge+Attachments.swift +246 -0
- package/ios/RenderBridge+BlockBoundaries.swift +313 -0
- package/ios/RenderBridge+Style.swift +343 -0
- package/ios/RenderBridge.swift +704 -0
- package/ios/RichTextEditorView.swift +930 -0
- package/ios/SharedNativeImagePipeline+Cache.swift +189 -0
- package/ios/SharedNativeImagePipeline+Transport.swift +328 -0
- package/ios/SharedNativeImagePipeline.swift +533 -0
- package/ios/Viewer/CoreTextProseLayoutEngine+AttributedText.swift +436 -0
- package/ios/Viewer/CoreTextProseLayoutEngine+Models.swift +322 -0
- package/ios/Viewer/CoreTextProseLayoutEngine.swift +635 -0
- package/ios/Viewer/Fabric/PREPPreparedProseViewerComponentView.h +4 -0
- package/ios/Viewer/Fabric/PREPPreparedProseViewerComponentView.mm +767 -0
- package/ios/Viewer/Fabric/PreparedProseMeasurementsManager.mm +118 -0
- package/ios/Viewer/NativeSVGImageDecoder.h +9 -0
- package/ios/Viewer/NativeSVGImageDecoder.mm +106 -0
- package/ios/Viewer/NativeSVGPreflight.h +11 -0
- package/ios/Viewer/NativeSVGPreflight.mm +219 -0
- package/ios/Viewer/PreparedProseDrawingView.swift +639 -0
- package/ios/Viewer/PreparedProseInstrumentation.swift +387 -0
- package/ios/Viewer/PreparedProseLayout.swift +326 -0
- package/ios/Viewer/PreparedProseLayoutCache.swift +766 -0
- package/ios/Viewer/PreparedProseLayoutRegistry+Artifacts.swift +377 -0
- package/ios/Viewer/PreparedProseLayoutRegistry+Fabric.swift +582 -0
- package/ios/Viewer/PreparedProseLayoutRegistry+FabricOwnership.swift +128 -0
- package/ios/Viewer/PreparedProseLayoutRegistry.swift +381 -0
- package/ios/Viewer/ViewerDocument.swift +575 -0
- package/ios/Viewer/ViewerFontEnvironment.swift +283 -0
- package/ios/Viewer/ViewerImagePipeline.swift +478 -0
- package/ios/editor_coreFFI/editor_coreFFI.h +1023 -0
- package/ios/editor_coreFFI/module.modulemap +7 -0
- package/package.json +151 -0
- package/react-native.config.js +17 -0
- package/rust/android/arm64-v8a/libeditor_core.so +0 -0
- package/rust/android/armeabi-v7a/libeditor_core.so +0 -0
- package/rust/android/x86/libeditor_core.so +0 -0
- package/rust/android/x86_64/libeditor_core.so +0 -0
- package/rust/bindings/kotlin/uniffi/editor_core/editor_core.kt +3146 -0
- package/src/AtomHost.tsx +180 -0
- package/src/DefaultAtomChip.tsx +27 -0
- package/src/EditorAddon.ts +65 -0
- package/src/EditorAddonNormalization.ts +49 -0
- package/src/EditorMentionThemeNormalization.ts +25 -0
- package/src/EditorMentionThemeValidation.ts +133 -0
- package/src/EditorStyleSheet.ts +9 -0
- package/src/EditorStyleSheetNormalization.ts +219 -0
- package/src/EditorStyleSheetTypes.ts +189 -0
- package/src/EditorTheme.ts +196 -0
- package/src/EditorToolbar.tsx +31 -0
- package/src/EditorToolbarComponent.tsx +23 -0
- package/src/EditorToolbarItems.tsx +64 -0
- package/src/EditorToolbarRegistry.tsx +254 -0
- package/src/EditorToolbarTypes.tsx +322 -0
- package/src/EditorToolbarVisuals.tsx +270 -0
- package/src/EditorUpdateRevision.ts +26 -0
- package/src/ExternalTextComposition.ts +658 -0
- package/src/ImageLoadingPolicy.ts +125 -0
- package/src/NativeEditorBoundaryError.ts +345 -0
- package/src/NativeEditorBridge.ts +93 -0
- package/src/NativeEditorCollaborationTransport.ts +493 -0
- package/src/NativeEditorCreateConfig.ts +326 -0
- package/src/NativeEditorCreateJson.ts +579 -0
- package/src/NativeEditorCreateValidation.ts +178 -0
- package/src/NativeEditorDocumentBridge.ts +485 -0
- package/src/NativeEditorDocumentHandle.ts +168 -0
- package/src/NativeEditorLocalAwareness.ts +168 -0
- package/src/NativeEditorNativeModule.ts +97 -0
- package/src/NativeEditorRenderNormalization.ts +320 -0
- package/src/NativeEditorResultNormalization.ts +469 -0
- package/src/NativeEditorTypes.ts +366 -0
- package/src/NativeEditorV2Decimal.ts +13 -0
- package/src/NativeProseViewer.tsx +356 -0
- package/src/NativeRichTextEditor.tsx +33 -0
- package/src/ResourceLimits.ts +187 -0
- package/src/RichTextEditor.tsx +27 -0
- package/src/RichTextEditorNativeTypes.tsx +144 -0
- package/src/RichTextEditorNativeView.tsx +21 -0
- package/src/RichTextEditorSerialization.tsx +381 -0
- package/src/RichTextEditorTypes.tsx +327 -0
- package/src/ViewerConfiguration.ts +23 -0
- package/src/YjsCollaboration.ts +692 -0
- package/src/addons.ts +311 -0
- package/src/atomConstants.ts +3 -0
- package/src/atomInstances.ts +123 -0
- package/src/atomPolicy.ts +47 -0
- package/src/atomUpdates.ts +52 -0
- package/src/atoms.ts +379 -0
- package/src/attributeValidation.ts +116 -0
- package/src/contentExpression.ts +338 -0
- package/src/index.ts +295 -0
- package/src/listMarkers.ts +18 -0
- package/src/schemaDefinition.ts +395 -0
- package/src/schemaDocument.ts +92 -0
- package/src/schemaDocumentConstruction.ts +148 -0
- package/src/schemaNormalization.ts +367 -0
- package/src/schemaPresets.ts +250 -0
- package/src/schemaResolution.ts +242 -0
- package/src/schemas.ts +43 -0
- package/src/specs/PreparedProseViewerNativeComponent.ts +40 -0
- package/src/useEditorToolbarInteractions.tsx +329 -0
- package/src/useEditorToolbarItems.tsx +390 -0
- package/src/useEditorToolbarPresentation.tsx +483 -0
- package/src/useEditorToolbarState.tsx +172 -0
- package/src/useFocusPreservingFrames.ts +171 -0
- package/src/useNativeEditor.ts +534 -0
- package/src/useRichTextEditorCommands.tsx +478 -0
- package/src/useRichTextEditorEvents.tsx +342 -0
- package/src/useRichTextEditorMentions.tsx +441 -0
- package/src/useRichTextEditorPresentation.tsx +563 -0
- package/src/useRichTextEditorState.tsx +620 -0
- package/src/useRichTextEditorUpdates.tsx +403 -0
- package/src/useViewerAtoms.tsx +427 -0
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
import type { AtomViewport } from './AtomHost';
|
|
2
|
+
import React, { useCallback, useMemo } from 'react';
|
|
3
|
+
import { View, type NativeSyntheticEvent, type ViewProps } from 'react-native';
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
serializeEditorImageLoadingPolicy,
|
|
7
|
+
type EditorImageLoadingPolicy,
|
|
8
|
+
} from './ImageLoadingPolicy';
|
|
9
|
+
import {
|
|
10
|
+
resolveEditorResourceLimits,
|
|
11
|
+
type EditorResourceLimits,
|
|
12
|
+
type ResolvedEditorResourceLimits,
|
|
13
|
+
} from './ResourceLimits';
|
|
14
|
+
import { serializeEditorTheme, type EditorTheme } from './EditorTheme';
|
|
15
|
+
import type { DocumentJSON } from './NativeEditorBridge';
|
|
16
|
+
import { normalizeEditorAddons, withMentionsSchema } from './addons';
|
|
17
|
+
import type {
|
|
18
|
+
EditorAddons,
|
|
19
|
+
CodeHighlightingAddonOptions,
|
|
20
|
+
MentionPressEvent,
|
|
21
|
+
MentionsAddonOptions,
|
|
22
|
+
} from './EditorAddon';
|
|
23
|
+
import { withAtomsSchema, type AtomNodeDefinition } from './atoms';
|
|
24
|
+
import { useViewerAtoms, type RichTextViewerAtomAttrsUpdateEvent } from './useViewerAtoms';
|
|
25
|
+
import NativePreparedProseViewer from './specs/PreparedProseViewerNativeComponent';
|
|
26
|
+
import {
|
|
27
|
+
serializePreparedProseViewerConfiguration,
|
|
28
|
+
type PreparedProseViewerConfiguration,
|
|
29
|
+
} from './ViewerConfiguration';
|
|
30
|
+
import { defaultSchema, type SchemaDefinition } from './schemas';
|
|
31
|
+
|
|
32
|
+
export type {
|
|
33
|
+
RichTextViewerAtomAttrsUpdateEvent,
|
|
34
|
+
NativeProseViewerAtomAttrsUpdateEvent,
|
|
35
|
+
} from './useViewerAtoms';
|
|
36
|
+
|
|
37
|
+
interface RichTextViewerLinkPressNativeEvent {
|
|
38
|
+
href: string;
|
|
39
|
+
text: string;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
interface RichTextViewerMentionPressNativeEvent {
|
|
43
|
+
docPos: number;
|
|
44
|
+
label: string;
|
|
45
|
+
attrsJson: string;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** A parse, layout, or rendering failure reported by the native viewer. */
|
|
49
|
+
export interface RichTextViewerErrorEvent {
|
|
50
|
+
/** Native subsystem that raised the failure, e.g. `'viewer'`. */
|
|
51
|
+
domain: string;
|
|
52
|
+
/** Stable failure code, e.g. `'INVALID_MENTION_ATTRIBUTES'`. */
|
|
53
|
+
code: string;
|
|
54
|
+
message: string;
|
|
55
|
+
/** Whether the viewer gave up on this content, as opposed to skipping one element. */
|
|
56
|
+
fatal: boolean;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** A tap on a mention node. Requires a mention addon with `onPress`. */
|
|
60
|
+
export type RichTextViewerMentionPressEvent = MentionPressEvent;
|
|
61
|
+
|
|
62
|
+
/** A tap on link-marked text. Requires `enableLinkTaps` and `onPressLink`. */
|
|
63
|
+
export interface RichTextViewerLinkPressEvent {
|
|
64
|
+
/** The link mark's `href` attribute. */
|
|
65
|
+
href: string;
|
|
66
|
+
/** The text the link mark covers. */
|
|
67
|
+
text: string;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** Mention rendering and press handling for the viewer. */
|
|
71
|
+
export type RichTextViewerMentionsConfig = MentionsAddonOptions;
|
|
72
|
+
|
|
73
|
+
export type RichTextViewerAddons = EditorAddons;
|
|
74
|
+
|
|
75
|
+
/** Props shared by both content forms of {@link RichTextViewerProps}. */
|
|
76
|
+
export interface RichTextViewerBaseProps extends ViewProps {
|
|
77
|
+
/** Schema the content is parsed against. Defaults to {@link defaultSchema}; the mention node is always added. */
|
|
78
|
+
schema?: SchemaDefinition;
|
|
79
|
+
/** React renderers for custom block atoms; their node specs are added to the schema. */
|
|
80
|
+
atoms?: readonly AtomNodeDefinition<any>[];
|
|
81
|
+
/** Whether persisted atom attributes are read-only. Defaults to true; prose is always read-only. */
|
|
82
|
+
readOnly?: boolean;
|
|
83
|
+
/** Whether atom controls receive input. Defaults to true, independently of readOnly. */
|
|
84
|
+
atomsInteractive?: boolean;
|
|
85
|
+
/** Opt-in atom virtualization; range is relative to the native viewer content. */
|
|
86
|
+
atomViewport?: AtomViewport;
|
|
87
|
+
/** Handles an atom update request. Persist it in the app and supply updated content. */
|
|
88
|
+
onUpdateAtomAttrs?: (event: RichTextViewerAtomAttrsUpdateEvent) => void | Promise<void>;
|
|
89
|
+
/** Native content theme. See {@link EditorTheme}. */
|
|
90
|
+
theme?: EditorTheme;
|
|
91
|
+
/** Whether `data:` image sources are admitted. Defaults to false. */
|
|
92
|
+
allowBase64Images?: boolean;
|
|
93
|
+
/** Bounds image fetching and decoding. See {@link EditorImageLoadingPolicy}. */
|
|
94
|
+
imageLoadingPolicy?: EditorImageLoadingPolicy;
|
|
95
|
+
/** Bounds the content the viewer will parse. See {@link EditorResourceLimits}. */
|
|
96
|
+
resourceLimits?: EditorResourceLimits;
|
|
97
|
+
/** Whether content with no text measures to zero height. Defaults to true. */
|
|
98
|
+
collapseTrailingEmptyParagraphs?: boolean;
|
|
99
|
+
/** Whether link-marked text is tappable. Defaults to true. */
|
|
100
|
+
enableLinkTaps?: boolean;
|
|
101
|
+
/** Whether image nodes are fetched and drawn. Defaults to true. */
|
|
102
|
+
renderImages?: boolean;
|
|
103
|
+
/**
|
|
104
|
+
* Bump this to discard the prepared layout after the app's font
|
|
105
|
+
* environment changes (a newly registered font, a font-scale change).
|
|
106
|
+
* Defaults to 0.
|
|
107
|
+
*/
|
|
108
|
+
fontEnvironmentRevision?: number;
|
|
109
|
+
addons?: RichTextViewerAddons;
|
|
110
|
+
/** Called when link-marked text is tapped. */
|
|
111
|
+
onPressLink?: (event: RichTextViewerLinkPressEvent) => void;
|
|
112
|
+
/** Called when the viewer cannot parse, lay out, or render the content. */
|
|
113
|
+
onError?: (error: RichTextViewerErrorEvent) => void;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
interface RichTextViewerJsonProps extends RichTextViewerBaseProps {
|
|
117
|
+
/** ProseMirror JSON document, or a JSON string holding one. */
|
|
118
|
+
contentJSON: DocumentJSON | string;
|
|
119
|
+
contentHTML?: never;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
interface RichTextViewerHtmlProps extends RichTextViewerBaseProps {
|
|
123
|
+
/** HTML document. Sanitize untrusted HTML before passing it here. */
|
|
124
|
+
contentHTML: string;
|
|
125
|
+
contentJSON?: never;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Props for {@link RichTextViewer}. Supply exactly one content source:
|
|
130
|
+
* `contentJSON` or `contentHTML`.
|
|
131
|
+
*/
|
|
132
|
+
export type RichTextViewerProps = RichTextViewerJsonProps | RichTextViewerHtmlProps;
|
|
133
|
+
|
|
134
|
+
const serializedJsonCache = new WeakMap<object, string>();
|
|
135
|
+
|
|
136
|
+
function stringifyCachedJson(value: DocumentJSON): string {
|
|
137
|
+
const cached = serializedJsonCache.get(value);
|
|
138
|
+
if (cached != null) {
|
|
139
|
+
return cached;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const serialized = JSON.stringify(value);
|
|
143
|
+
serializedJsonCache.set(value, serialized);
|
|
144
|
+
return serialized;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function resolveViewerConfiguration(
|
|
148
|
+
schema: SchemaDefinition | undefined,
|
|
149
|
+
allowBase64Images: boolean,
|
|
150
|
+
resourceLimits: ResolvedEditorResourceLimits | undefined,
|
|
151
|
+
mentions: RichTextViewerMentionsConfig | undefined,
|
|
152
|
+
atoms: readonly AtomNodeDefinition<any>[] | undefined,
|
|
153
|
+
codeHighlighting: CodeHighlightingAddonOptions | undefined
|
|
154
|
+
): PreparedProseViewerConfiguration {
|
|
155
|
+
return {
|
|
156
|
+
initialization: { type: 'localEmpty' },
|
|
157
|
+
...(codeHighlighting ? { codeHighlighting } : {}),
|
|
158
|
+
schema: withAtomsSchema(withMentionsSchema(schema ?? defaultSchema), atoms ?? []),
|
|
159
|
+
...(allowBase64Images ? { policy: { allowBase64Images: true } } : {}),
|
|
160
|
+
...(resourceLimits ? { limits: { resource: resourceLimits } } : {}),
|
|
161
|
+
...(mentions?.trigger || mentions?.prefix
|
|
162
|
+
? {
|
|
163
|
+
mentions: {
|
|
164
|
+
...(mentions.trigger ? { trigger: mentions.trigger } : {}),
|
|
165
|
+
...(mentions.prefix ? { prefix: mentions.prefix } : {}),
|
|
166
|
+
},
|
|
167
|
+
}
|
|
168
|
+
: {}),
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Read-only renderer for HTML or ProseMirror JSON. It prepares a native
|
|
174
|
+
* layout and measures to that layout's exact size, so the host must give it a
|
|
175
|
+
* finite width; no editor session is created and no document handle is
|
|
176
|
+
* needed.
|
|
177
|
+
*
|
|
178
|
+
* Requires the New Architecture.
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```tsx
|
|
182
|
+
* <RichTextViewer
|
|
183
|
+
* contentHTML='<p>Read-only content</p>'
|
|
184
|
+
* theme={{ text: { fontSize: 16 } }}
|
|
185
|
+
* onPressLink={({ href }) => openLink(href)}
|
|
186
|
+
* />
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
export function RichTextViewer(props: RichTextViewerProps) {
|
|
190
|
+
const {
|
|
191
|
+
contentJSON,
|
|
192
|
+
contentHTML,
|
|
193
|
+
schema,
|
|
194
|
+
atoms,
|
|
195
|
+
readOnly = true,
|
|
196
|
+
atomsInteractive = true,
|
|
197
|
+
atomViewport,
|
|
198
|
+
onUpdateAtomAttrs,
|
|
199
|
+
theme,
|
|
200
|
+
allowBase64Images = false,
|
|
201
|
+
imageLoadingPolicy,
|
|
202
|
+
resourceLimits,
|
|
203
|
+
collapseTrailingEmptyParagraphs = true,
|
|
204
|
+
enableLinkTaps = true,
|
|
205
|
+
renderImages = true,
|
|
206
|
+
fontEnvironmentRevision = 0,
|
|
207
|
+
addons,
|
|
208
|
+
onPressLink,
|
|
209
|
+
onError,
|
|
210
|
+
...viewProps
|
|
211
|
+
} = props;
|
|
212
|
+
const { mentions, codeHighlighting } = useMemo(() => normalizeEditorAddons(addons), [addons]);
|
|
213
|
+
const resolvedResourceLimits = useMemo(
|
|
214
|
+
() => (resourceLimits ? resolveEditorResourceLimits(resourceLimits) : undefined),
|
|
215
|
+
[resourceLimits]
|
|
216
|
+
);
|
|
217
|
+
const configJson = useMemo(
|
|
218
|
+
() =>
|
|
219
|
+
serializePreparedProseViewerConfiguration(
|
|
220
|
+
resolveViewerConfiguration(
|
|
221
|
+
schema,
|
|
222
|
+
allowBase64Images,
|
|
223
|
+
resolvedResourceLimits,
|
|
224
|
+
mentions,
|
|
225
|
+
atoms,
|
|
226
|
+
codeHighlighting
|
|
227
|
+
)
|
|
228
|
+
),
|
|
229
|
+
[allowBase64Images, mentions, resolvedResourceLimits, schema, atoms, codeHighlighting]
|
|
230
|
+
);
|
|
231
|
+
const themeJson = useMemo(
|
|
232
|
+
() => serializeEditorTheme(theme, mentions?.theme),
|
|
233
|
+
[mentions?.theme, theme]
|
|
234
|
+
);
|
|
235
|
+
const imagePolicyJson = useMemo(
|
|
236
|
+
() => serializeEditorImageLoadingPolicy(imageLoadingPolicy),
|
|
237
|
+
[imageLoadingPolicy]
|
|
238
|
+
);
|
|
239
|
+
const sourceKind = contentJSON === undefined ? 'html' : 'json';
|
|
240
|
+
const source = useMemo(() => {
|
|
241
|
+
if (contentJSON === undefined) {
|
|
242
|
+
return contentHTML ?? '';
|
|
243
|
+
}
|
|
244
|
+
return typeof contentJSON === 'string' ? contentJSON : stringifyCachedJson(contentJSON);
|
|
245
|
+
}, [contentHTML, contentJSON]);
|
|
246
|
+
const atomIdentity = useMemo(
|
|
247
|
+
() => ({}),
|
|
248
|
+
[
|
|
249
|
+
sourceKind,
|
|
250
|
+
source,
|
|
251
|
+
configJson,
|
|
252
|
+
themeJson,
|
|
253
|
+
imagePolicyJson,
|
|
254
|
+
renderImages,
|
|
255
|
+
collapseTrailingEmptyParagraphs,
|
|
256
|
+
fontEnvironmentRevision,
|
|
257
|
+
]
|
|
258
|
+
);
|
|
259
|
+
const viewerAtoms = useViewerAtoms({
|
|
260
|
+
atoms,
|
|
261
|
+
identity: atomIdentity,
|
|
262
|
+
themeJson,
|
|
263
|
+
readOnly,
|
|
264
|
+
interactive: atomsInteractive,
|
|
265
|
+
viewport: atomViewport,
|
|
266
|
+
onUpdateAtomAttrs,
|
|
267
|
+
onError,
|
|
268
|
+
});
|
|
269
|
+
const handlePressLink = useCallback(
|
|
270
|
+
(event: NativeSyntheticEvent<RichTextViewerLinkPressNativeEvent>) => {
|
|
271
|
+
onPressLink?.(event.nativeEvent);
|
|
272
|
+
},
|
|
273
|
+
[onPressLink]
|
|
274
|
+
);
|
|
275
|
+
const handlePressMention = useCallback(
|
|
276
|
+
(event: NativeSyntheticEvent<RichTextViewerMentionPressNativeEvent>) => {
|
|
277
|
+
const { docPos, label, attrsJson } = event.nativeEvent;
|
|
278
|
+
let attrs: unknown;
|
|
279
|
+
try {
|
|
280
|
+
attrs = JSON.parse(attrsJson);
|
|
281
|
+
} catch {
|
|
282
|
+
attrs = null;
|
|
283
|
+
}
|
|
284
|
+
if (attrs === null || typeof attrs !== 'object' || Array.isArray(attrs)) {
|
|
285
|
+
onError?.({
|
|
286
|
+
domain: 'viewer',
|
|
287
|
+
code: 'INVALID_MENTION_ATTRIBUTES',
|
|
288
|
+
message: 'The prepared mention attributes are not a JSON object.',
|
|
289
|
+
fatal: false,
|
|
290
|
+
});
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
mentions?.onPress?.({ docPos, label, attrs: attrs as Record<string, unknown> });
|
|
294
|
+
},
|
|
295
|
+
[mentions, onError]
|
|
296
|
+
);
|
|
297
|
+
const handleError = useCallback(
|
|
298
|
+
(event: NativeSyntheticEvent<RichTextViewerErrorEvent>) => {
|
|
299
|
+
onError?.(event.nativeEvent);
|
|
300
|
+
},
|
|
301
|
+
[onError]
|
|
302
|
+
);
|
|
303
|
+
|
|
304
|
+
const nativeViewer = (
|
|
305
|
+
<NativePreparedProseViewer
|
|
306
|
+
{...(viewerAtoms.enabled ? { style: { alignSelf: 'stretch' as const } } : viewProps)}
|
|
307
|
+
sourceKind={sourceKind}
|
|
308
|
+
source={source}
|
|
309
|
+
configJson={configJson}
|
|
310
|
+
themeJson={viewerAtoms.themeJson}
|
|
311
|
+
onAtomLayout={viewerAtoms.enabled ? viewerAtoms.onAtomLayout : undefined}
|
|
312
|
+
imagePolicyJson={imagePolicyJson}
|
|
313
|
+
imagesEnabled={renderImages}
|
|
314
|
+
collapsesWhenEmpty={collapseTrailingEmptyParagraphs}
|
|
315
|
+
enableLinkTaps={enableLinkTaps && onPressLink != null}
|
|
316
|
+
mentionInteractionsEnabled={mentions?.onPress != null}
|
|
317
|
+
fontEnvironmentRevision={fontEnvironmentRevision}
|
|
318
|
+
onPressLink={onPressLink ? handlePressLink : undefined}
|
|
319
|
+
onPressMention={mentions?.onPress ? handlePressMention : undefined}
|
|
320
|
+
onError={onError ? handleError : undefined}
|
|
321
|
+
/>
|
|
322
|
+
);
|
|
323
|
+
if (!viewerAtoms.enabled) return nativeViewer;
|
|
324
|
+
return (
|
|
325
|
+
<View {...viewProps}>
|
|
326
|
+
<View style={{ alignSelf: 'stretch' }} onLayout={viewerAtoms.onContainerLayout}>
|
|
327
|
+
{nativeViewer}
|
|
328
|
+
{viewerAtoms.children}
|
|
329
|
+
</View>
|
|
330
|
+
</View>
|
|
331
|
+
);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/** @deprecated Use RichTextViewerErrorEvent instead. */
|
|
335
|
+
export type NativeProseViewerErrorEvent = RichTextViewerErrorEvent;
|
|
336
|
+
|
|
337
|
+
/** @deprecated Use RichTextViewerMentionPressEvent instead. */
|
|
338
|
+
export type NativeProseViewerMentionPressEvent = RichTextViewerMentionPressEvent;
|
|
339
|
+
|
|
340
|
+
/** @deprecated Use RichTextViewerLinkPressEvent instead. */
|
|
341
|
+
export type NativeProseViewerLinkPressEvent = RichTextViewerLinkPressEvent;
|
|
342
|
+
|
|
343
|
+
/** @deprecated Use RichTextViewerMentionsConfig instead. */
|
|
344
|
+
export type NativeProseViewerMentionsConfig = RichTextViewerMentionsConfig;
|
|
345
|
+
|
|
346
|
+
/** @deprecated Use RichTextViewerAddons instead. */
|
|
347
|
+
export type NativeProseViewerAddons = RichTextViewerAddons;
|
|
348
|
+
|
|
349
|
+
/** @deprecated Use RichTextViewerBaseProps instead. */
|
|
350
|
+
export type NativeProseViewerBaseProps = RichTextViewerBaseProps;
|
|
351
|
+
|
|
352
|
+
/** @deprecated Use RichTextViewerProps instead. */
|
|
353
|
+
export type NativeProseViewerProps = RichTextViewerProps;
|
|
354
|
+
|
|
355
|
+
/** @deprecated Use RichTextViewer instead. */
|
|
356
|
+
export const NativeProseViewer = RichTextViewer;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export {
|
|
2
|
+
type RichTextEditorHeightBehavior,
|
|
3
|
+
type RichTextEditorToolbarPlacement,
|
|
4
|
+
type RichTextEditorValueJSONUpdateMode,
|
|
5
|
+
type RichTextEditorAutoCapitalize,
|
|
6
|
+
type RichTextEditorKeyboardType,
|
|
7
|
+
type RichTextEditorAndroidInputOptions,
|
|
8
|
+
type RemoteSelectionDecoration,
|
|
9
|
+
type LinkRequestContext,
|
|
10
|
+
type ImageRequestContext,
|
|
11
|
+
type RichTextEditorProps,
|
|
12
|
+
type RichTextEditorRef,
|
|
13
|
+
type RichTextEditorCaretRect,
|
|
14
|
+
type NativeRichTextEditorHeightBehavior,
|
|
15
|
+
type NativeRichTextEditorToolbarPlacement,
|
|
16
|
+
type NativeRichTextEditorValueJSONUpdateMode,
|
|
17
|
+
type NativeRichTextEditorAutoCapitalize,
|
|
18
|
+
type NativeRichTextEditorKeyboardType,
|
|
19
|
+
type NativeRichTextEditorAndroidInputOptions,
|
|
20
|
+
type NativeRichTextEditorProps,
|
|
21
|
+
type NativeRichTextEditorRef,
|
|
22
|
+
type NativeRichTextEditorCaretRect,
|
|
23
|
+
} from './RichTextEditorTypes';
|
|
24
|
+
export { RichTextEditor, NativeRichTextEditor } from './RichTextEditor';
|
|
25
|
+
|
|
26
|
+
export type {
|
|
27
|
+
NativeRichTextEditorFocusPreservingElement,
|
|
28
|
+
NativeRichTextEditorFocusPreservingRef,
|
|
29
|
+
NativeRichTextEditorFocusPreservingRefs,
|
|
30
|
+
RichTextEditorFocusPreservingElement,
|
|
31
|
+
RichTextEditorFocusPreservingRef,
|
|
32
|
+
RichTextEditorFocusPreservingRefs,
|
|
33
|
+
} from './useFocusPreservingFrames';
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { NativeEditorBoundaryError } from './NativeEditorBoundaryError';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Bounds on the documents, schemas, and collaboration payloads the Rust core
|
|
5
|
+
* will admit. Set them on `NativeEditorCreateConfig.limits.resource` when
|
|
6
|
+
* creating a document handle, or on `RichTextViewer.resourceLimits`.
|
|
7
|
+
*
|
|
8
|
+
* Every field is optional; an omitted one uses
|
|
9
|
+
* {@link DEFAULT_EDITOR_RESOURCE_LIMITS}. Each value must be a positive
|
|
10
|
+
* integer no greater than the matching {@link HARD_EDITOR_RESOURCE_LIMITS}
|
|
11
|
+
* ceiling — anything else throws `NativeEditorBoundaryError`
|
|
12
|
+
* (`INVALID_RESOURCE_LIMIT`). Exceeding a limit at runtime raises
|
|
13
|
+
* `INPUT_LIMIT_EXCEEDED`, `DOCUMENT_LIMIT_EXCEEDED`, or `SCHEMA_INVALID`.
|
|
14
|
+
*/
|
|
15
|
+
export interface EditorResourceLimits {
|
|
16
|
+
/** Byte ceiling for a single config, document JSON, or HTML string crossing into the core. */
|
|
17
|
+
maxInputBytes?: number;
|
|
18
|
+
/** Maximum number of nodes in a document. */
|
|
19
|
+
maxDocumentNodes?: number;
|
|
20
|
+
/** Maximum node nesting depth in a document. */
|
|
21
|
+
maxDocumentDepth?: number;
|
|
22
|
+
/** Maximum number of node specs in a schema definition. */
|
|
23
|
+
maxSchemaNodes?: number;
|
|
24
|
+
/** Byte ceiling for the combined `content` expressions of a schema's nodes. */
|
|
25
|
+
maxSchemaExpressionBytes?: number;
|
|
26
|
+
/** Byte ceiling for one inbound collaboration message. */
|
|
27
|
+
maxCollaborationMessageBytes?: number;
|
|
28
|
+
/** Byte ceiling for an encoded Yjs state — imported room snapshots and exported ones. */
|
|
29
|
+
maxEncodedStateBytes?: number;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Bounds on editing work inside the engine, set on
|
|
34
|
+
* `NativeEditorCreateConfig.limits.editing`. Omitted fields use the Rust
|
|
35
|
+
* core's defaults; supplied values are validated against the same hard
|
|
36
|
+
* ceilings the core enforces.
|
|
37
|
+
*/
|
|
38
|
+
export interface EditorEditingLimits {
|
|
39
|
+
/** Maximum operations one compiled transaction may carry. Core default 256. */
|
|
40
|
+
maxOperationsPerTransaction?: number;
|
|
41
|
+
/** Maximum undoable groups retained in history. Core default 500. */
|
|
42
|
+
maxUndoGroups?: number;
|
|
43
|
+
/** Maximum document units the undo stack may retain across all groups. Core default 1,000,000. */
|
|
44
|
+
maxUndoRetainedUnits?: number;
|
|
45
|
+
/** Byte ceiling for derived output (HTML, JSON, render state) the engine produces. Core default 32 MiB. */
|
|
46
|
+
maxDerivedOutputBytes?: number;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Bounds on the native collaboration transport, set on
|
|
51
|
+
* `NativeEditorCreateConfig.limits.collaboration`. Omitted fields use the
|
|
52
|
+
* Rust core's defaults; supplied values are validated against the same hard
|
|
53
|
+
* ceilings the core enforces.
|
|
54
|
+
*/
|
|
55
|
+
export interface EditorCollaborationLimits {
|
|
56
|
+
/** Maximum protocol frames decoded from one transport message. Core default 64. */
|
|
57
|
+
maxFramesPerMessage?: number;
|
|
58
|
+
/** Byte ceiling for a single protocol frame. Core default 10 MiB. */
|
|
59
|
+
maxFrameBytes?: number;
|
|
60
|
+
/** Byte ceiling for all reply frames produced for one inbound message. Core default 10 MiB. */
|
|
61
|
+
maxAggregateResponseBytes?: number;
|
|
62
|
+
/** Maximum tracked awareness peers. Core default 1,024. */
|
|
63
|
+
maxAwarenessPeers?: number;
|
|
64
|
+
/** Byte ceiling for one peer's awareness state. Core default 64 KiB. */
|
|
65
|
+
maxAwarenessPeerBytes?: number;
|
|
66
|
+
/** Byte ceiling for all retained awareness state. Core default 10 MiB. */
|
|
67
|
+
maxAwarenessBytes?: number;
|
|
68
|
+
/** Maximum messages queued for send while disconnected. Core default 256. */
|
|
69
|
+
maxPendingOutboxMessages?: number;
|
|
70
|
+
/** Byte ceiling for the outbound queue. Core default 10 MiB. */
|
|
71
|
+
maxPendingOutboxBytes?: number;
|
|
72
|
+
/** Byte ceiling for remote updates buffered while awaiting their missing dependencies. Core default 10 MiB. */
|
|
73
|
+
maxPendingDependencyUpdateBytes?: number;
|
|
74
|
+
/** Work ceiling for those buffered dependency updates. Core default 1,000,000. */
|
|
75
|
+
maxPendingDependencyUpdateWork?: number;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** {@link EditorResourceLimits} with every default filled in. */
|
|
79
|
+
export interface ResolvedEditorResourceLimits {
|
|
80
|
+
maxInputBytes: number;
|
|
81
|
+
maxDocumentNodes: number;
|
|
82
|
+
maxDocumentDepth: number;
|
|
83
|
+
maxSchemaNodes: number;
|
|
84
|
+
maxSchemaExpressionBytes: number;
|
|
85
|
+
maxCollaborationMessageBytes: number;
|
|
86
|
+
maxEncodedStateBytes: number;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** The value used for each {@link EditorResourceLimits} field left unset. */
|
|
90
|
+
export const DEFAULT_EDITOR_RESOURCE_LIMITS: Readonly<ResolvedEditorResourceLimits> = {
|
|
91
|
+
maxInputBytes: 20 * 1024 * 1024,
|
|
92
|
+
maxDocumentNodes: 100_000,
|
|
93
|
+
maxDocumentDepth: 256,
|
|
94
|
+
maxSchemaNodes: 1_024,
|
|
95
|
+
maxSchemaExpressionBytes: 64 * 1024,
|
|
96
|
+
maxCollaborationMessageBytes: 10 * 1024 * 1024,
|
|
97
|
+
maxEncodedStateBytes: 50 * 1024 * 1024,
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
/** The ceiling each {@link EditorResourceLimits} field may not exceed. */
|
|
101
|
+
export const HARD_EDITOR_RESOURCE_LIMITS: Readonly<ResolvedEditorResourceLimits> = {
|
|
102
|
+
maxInputBytes: 64 * 1024 * 1024,
|
|
103
|
+
maxDocumentNodes: 1_000_000,
|
|
104
|
+
maxDocumentDepth: 1_024,
|
|
105
|
+
maxSchemaNodes: 10_000,
|
|
106
|
+
maxSchemaExpressionBytes: 1024 * 1024,
|
|
107
|
+
maxCollaborationMessageBytes: 64 * 1024 * 1024,
|
|
108
|
+
maxEncodedStateBytes: 256 * 1024 * 1024,
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
const HARD_EDITOR_EDITING_LIMITS: Readonly<Required<EditorEditingLimits>> = {
|
|
112
|
+
maxOperationsPerTransaction: 4_096,
|
|
113
|
+
maxUndoGroups: 2_000,
|
|
114
|
+
maxUndoRetainedUnits: 8_000_000,
|
|
115
|
+
maxDerivedOutputBytes: 128 * 1024 * 1024,
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
const HARD_EDITOR_COLLABORATION_LIMITS: Readonly<Required<EditorCollaborationLimits>> = {
|
|
119
|
+
maxFramesPerMessage: 1_024,
|
|
120
|
+
maxFrameBytes: 64 * 1024 * 1024,
|
|
121
|
+
maxAggregateResponseBytes: 64 * 1024 * 1024,
|
|
122
|
+
maxAwarenessPeers: 10_000,
|
|
123
|
+
maxAwarenessPeerBytes: 1024 * 1024,
|
|
124
|
+
maxAwarenessBytes: 64 * 1024 * 1024,
|
|
125
|
+
maxPendingOutboxMessages: 4_096,
|
|
126
|
+
maxPendingOutboxBytes: 64 * 1024 * 1024,
|
|
127
|
+
maxPendingDependencyUpdateBytes: 64 * 1024 * 1024,
|
|
128
|
+
maxPendingDependencyUpdateWork: 8_000_000,
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
function validateLimit(name: string, value: number, ceiling: number): void {
|
|
132
|
+
if (!Number.isSafeInteger(value) || value <= 0 || value > ceiling) {
|
|
133
|
+
throw new NativeEditorBoundaryError(
|
|
134
|
+
'INVALID_RESOURCE_LIMIT',
|
|
135
|
+
`${name} must be a positive integer no greater than ${ceiling}`,
|
|
136
|
+
ceiling,
|
|
137
|
+
value
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function resolveLimit(name: keyof ResolvedEditorResourceLimits, value?: number): number {
|
|
143
|
+
const resolved = value ?? DEFAULT_EDITOR_RESOURCE_LIMITS[name];
|
|
144
|
+
validateLimit(name, resolved, HARD_EDITOR_RESOURCE_LIMITS[name]);
|
|
145
|
+
return resolved;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
function validateOverrides<T extends object>(
|
|
149
|
+
limits: T | undefined,
|
|
150
|
+
ceilings: Readonly<Required<T>>
|
|
151
|
+
): void {
|
|
152
|
+
if (limits === undefined) return;
|
|
153
|
+
for (const name of Object.keys(ceilings) as Array<keyof T>) {
|
|
154
|
+
const value = limits[name];
|
|
155
|
+
if (value !== undefined) {
|
|
156
|
+
validateLimit(String(name), value as number, ceilings[name] as number);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export function validateEditorCreateLimits(limits?: {
|
|
162
|
+
resource?: EditorResourceLimits;
|
|
163
|
+
editing?: EditorEditingLimits;
|
|
164
|
+
collaboration?: EditorCollaborationLimits;
|
|
165
|
+
}): void {
|
|
166
|
+
validateOverrides(limits?.resource, HARD_EDITOR_RESOURCE_LIMITS);
|
|
167
|
+
validateOverrides(limits?.editing, HARD_EDITOR_EDITING_LIMITS);
|
|
168
|
+
validateOverrides(limits?.collaboration, HARD_EDITOR_COLLABORATION_LIMITS);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Fill in every unset {@link EditorResourceLimits} field from
|
|
173
|
+
* {@link DEFAULT_EDITOR_RESOURCE_LIMITS}, validating each value against
|
|
174
|
+
* {@link HARD_EDITOR_RESOURCE_LIMITS}.
|
|
175
|
+
*
|
|
176
|
+
* @throws NativeEditorBoundaryError `INVALID_RESOURCE_LIMIT` when a value is
|
|
177
|
+
* not a positive integer within its ceiling.
|
|
178
|
+
*/
|
|
179
|
+
export function resolveEditorResourceLimits(
|
|
180
|
+
limits: EditorResourceLimits = {}
|
|
181
|
+
): ResolvedEditorResourceLimits {
|
|
182
|
+
return Object.fromEntries(
|
|
183
|
+
(Object.keys(DEFAULT_EDITOR_RESOURCE_LIMITS) as Array<
|
|
184
|
+
keyof ResolvedEditorResourceLimits
|
|
185
|
+
>).map((name) => [name, resolveLimit(name, limits[name])])
|
|
186
|
+
) as unknown as ResolvedEditorResourceLimits;
|
|
187
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { forwardRef } from 'react';
|
|
2
|
+
import { type RichTextEditorRef, type RichTextEditorProps } from './RichTextEditorTypes';
|
|
3
|
+
import { useRichTextEditorState } from './useRichTextEditorState';
|
|
4
|
+
import { useRichTextEditorUpdates } from './useRichTextEditorUpdates';
|
|
5
|
+
import { useRichTextEditorCommands } from './useRichTextEditorCommands';
|
|
6
|
+
import { useRichTextEditorEvents } from './useRichTextEditorEvents';
|
|
7
|
+
import { useRichTextEditorMentions } from './useRichTextEditorMentions';
|
|
8
|
+
import { useRichTextEditorPresentation } from './useRichTextEditorPresentation';
|
|
9
|
+
|
|
10
|
+
export const RichTextEditor = forwardRef<RichTextEditorRef, RichTextEditorProps>(
|
|
11
|
+
function RichTextEditor(props, ref) {
|
|
12
|
+
const state = useRichTextEditorState(props, ref);
|
|
13
|
+
const updates = useRichTextEditorUpdates(state);
|
|
14
|
+
const commands = useRichTextEditorCommands({ ...state, ...updates });
|
|
15
|
+
const events = useRichTextEditorEvents({ ...state, ...updates, ...commands });
|
|
16
|
+
const mentions = useRichTextEditorMentions({
|
|
17
|
+
...state,
|
|
18
|
+
...commands,
|
|
19
|
+
...updates,
|
|
20
|
+
...events,
|
|
21
|
+
});
|
|
22
|
+
return useRichTextEditorPresentation({ ...state, ...mentions, ...commands, ...events });
|
|
23
|
+
}
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
/** @deprecated Use RichTextEditor instead. */
|
|
27
|
+
export const NativeRichTextEditor = RichTextEditor;
|