@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,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
|
+
}
|