@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,203 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import UIKit
|
|
3
|
+
|
|
4
|
+
extension EditorTextView {
|
|
5
|
+
func performToolbarToggleMark(_ markName: String) {
|
|
6
|
+
guard prepareForToolbarCommand() else { return }
|
|
7
|
+
guard let selection = currentScalarSelection() else { return }
|
|
8
|
+
performInterceptedInput {
|
|
9
|
+
let updateJSON = EditorV2Shadow.toggleMarkAtSelectionScalar(
|
|
10
|
+
id: editorId,
|
|
11
|
+
scalarAnchor: selection.anchor,
|
|
12
|
+
scalarHead: selection.head,
|
|
13
|
+
markName: markName
|
|
14
|
+
)
|
|
15
|
+
applyUpdateJSON(updateJSON)
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
func performToolbarToggleList(_ listType: String, isActive: Bool) {
|
|
20
|
+
guard prepareForToolbarCommand() else { return }
|
|
21
|
+
guard let selection = currentScalarSelection() else { return }
|
|
22
|
+
performInterceptedInput {
|
|
23
|
+
let updateJSON = isActive
|
|
24
|
+
? EditorV2Shadow.unwrapFromListAtSelectionScalar(
|
|
25
|
+
id: editorId,
|
|
26
|
+
scalarAnchor: selection.anchor,
|
|
27
|
+
scalarHead: selection.head
|
|
28
|
+
)
|
|
29
|
+
: EditorV2Shadow.wrapInListAtSelectionScalar(
|
|
30
|
+
id: editorId,
|
|
31
|
+
scalarAnchor: selection.anchor,
|
|
32
|
+
scalarHead: selection.head,
|
|
33
|
+
listType: listType
|
|
34
|
+
)
|
|
35
|
+
applyUpdateJSON(updateJSON)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
func performToolbarToggleBlockquote() {
|
|
40
|
+
guard prepareForToolbarCommand() else { return }
|
|
41
|
+
guard let selection = currentScalarSelection() else { return }
|
|
42
|
+
performInterceptedInput {
|
|
43
|
+
let updateJSON = EditorV2Shadow.toggleBlockquoteAtSelectionScalar(
|
|
44
|
+
id: editorId,
|
|
45
|
+
scalarAnchor: selection.anchor,
|
|
46
|
+
scalarHead: selection.head
|
|
47
|
+
)
|
|
48
|
+
applyUpdateJSON(updateJSON)
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
func performToolbarToggleHeading(_ level: Int) {
|
|
53
|
+
guard prepareForToolbarCommand() else { return }
|
|
54
|
+
guard let selection = currentScalarSelection() else { return }
|
|
55
|
+
guard let level = UInt8(exactly: level), (1...6).contains(level) else { return }
|
|
56
|
+
performInterceptedInput {
|
|
57
|
+
let updateJSON = EditorV2Shadow.toggleHeadingAtSelectionScalar(
|
|
58
|
+
id: editorId,
|
|
59
|
+
scalarAnchor: selection.anchor,
|
|
60
|
+
scalarHead: selection.head,
|
|
61
|
+
level: level
|
|
62
|
+
)
|
|
63
|
+
applyUpdateJSON(updateJSON)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
func performToolbarIndentListItem() {
|
|
68
|
+
guard prepareForToolbarCommand() else { return }
|
|
69
|
+
guard let selection = currentScalarSelection() else { return }
|
|
70
|
+
performInterceptedInput {
|
|
71
|
+
let updateJSON = EditorV2Shadow.indentListItemAtSelectionScalar(
|
|
72
|
+
id: editorId,
|
|
73
|
+
scalarAnchor: selection.anchor,
|
|
74
|
+
scalarHead: selection.head
|
|
75
|
+
)
|
|
76
|
+
applyUpdateJSON(updateJSON)
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
func performToolbarOutdentListItem() {
|
|
81
|
+
guard prepareForToolbarCommand() else { return }
|
|
82
|
+
guard let selection = currentScalarSelection() else { return }
|
|
83
|
+
performInterceptedInput {
|
|
84
|
+
let updateJSON = EditorV2Shadow.outdentListItemAtSelectionScalar(
|
|
85
|
+
id: editorId,
|
|
86
|
+
scalarAnchor: selection.anchor,
|
|
87
|
+
scalarHead: selection.head
|
|
88
|
+
)
|
|
89
|
+
applyUpdateJSON(updateJSON)
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
func performToolbarInsertNode(_ nodeType: String) {
|
|
94
|
+
guard prepareForToolbarCommand() else { return }
|
|
95
|
+
performInterceptedInput {
|
|
96
|
+
insertNodeInRust(nodeType)
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
func performToolbarUndo() {
|
|
101
|
+
guard prepareForToolbarCommand() else { return }
|
|
102
|
+
performInterceptedInput {
|
|
103
|
+
let updateJSON = EditorV2Shadow.undo(id: editorId)
|
|
104
|
+
applyUpdateJSON(updateJSON)
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
func performToolbarRedo() {
|
|
109
|
+
guard prepareForToolbarCommand() else { return }
|
|
110
|
+
performInterceptedInput {
|
|
111
|
+
let updateJSON = EditorV2Shadow.redo(id: editorId)
|
|
112
|
+
applyUpdateJSON(updateJSON)
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
private func prepareForToolbarCommand() -> Bool {
|
|
117
|
+
guard editorId != 0 else { return false }
|
|
118
|
+
guard isEditable else { return false }
|
|
119
|
+
guard finishExternalTextCompositionBeforeInteractionIfNeeded() else { return false }
|
|
120
|
+
return prepareForExternalEditorUpdate()
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/// Insert text at a scalar position via the Rust editor.
|
|
124
|
+
func insertTextInRust(_ text: String, at scalarPos: UInt32) {
|
|
125
|
+
Self.inputLog.debug(
|
|
126
|
+
"[rust.insertTextScalar] text=\(self.preview(text), privacy: .public) scalarPos=\(scalarPos) selection=\(self.selectionSummary(), privacy: .public)"
|
|
127
|
+
)
|
|
128
|
+
let updateJSON = EditorV2Shadow.insertTextScalar(id: editorId, scalarPos: scalarPos, text: text)
|
|
129
|
+
applyUpdateJSON(updateJSON)
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
private func replaceTextRangeInRust(from: UInt32, to: UInt32, with text: String) {
|
|
133
|
+
Self.inputLog.debug(
|
|
134
|
+
"[rust.replaceTextScalar] text=\(self.preview(text), privacy: .public) scalar=\(from)-\(to) selection=\(self.selectionSummary(), privacy: .public)"
|
|
135
|
+
)
|
|
136
|
+
let updateJSON = EditorV2Shadow.replaceTextScalar(
|
|
137
|
+
id: editorId,
|
|
138
|
+
scalarFrom: from,
|
|
139
|
+
scalarTo: to,
|
|
140
|
+
text: text
|
|
141
|
+
)
|
|
142
|
+
applyUpdateJSON(updateJSON)
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
func insertNodeInRust(_ nodeType: String) {
|
|
146
|
+
guard let selection = currentScalarSelection() else { return }
|
|
147
|
+
Self.inputLog.debug(
|
|
148
|
+
"[rust.insertNode] nodeType=\(nodeType, privacy: .public) selection=\(self.selectionSummary(), privacy: .public)"
|
|
149
|
+
)
|
|
150
|
+
let updateJSON = EditorV2Shadow.insertNodeAtSelectionScalar(
|
|
151
|
+
id: editorId,
|
|
152
|
+
scalarAnchor: selection.anchor,
|
|
153
|
+
scalarHead: selection.head,
|
|
154
|
+
nodeType: nodeType
|
|
155
|
+
)
|
|
156
|
+
applyUpdateJSON(updateJSON)
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/// Delete a scalar range via the Rust editor.
|
|
160
|
+
func deleteScalarRangeInRust(from: UInt32, to: UInt32) {
|
|
161
|
+
guard from < to else { return }
|
|
162
|
+
Self.inputLog.debug(
|
|
163
|
+
"[rust.deleteScalarRange] scalar=\(from)-\(to) selection=\(self.selectionSummary(), privacy: .public)"
|
|
164
|
+
)
|
|
165
|
+
let updateJSON = EditorV2Shadow.deleteScalarRange(id: editorId, scalarFrom: from, scalarTo: to)
|
|
166
|
+
applyUpdateJSON(updateJSON)
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
func deleteBackwardAtSelectionScalarInRust(anchor: UInt32, head: UInt32) {
|
|
170
|
+
Self.inputLog.debug(
|
|
171
|
+
"[rust.deleteBackwardAtSelectionScalar] scalar=\(anchor)-\(head) selection=\(self.selectionSummary(), privacy: .public)"
|
|
172
|
+
)
|
|
173
|
+
let updateJSON = EditorV2Shadow.deleteBackwardAtSelectionScalar(
|
|
174
|
+
id: editorId,
|
|
175
|
+
scalarAnchor: anchor,
|
|
176
|
+
scalarHead: head
|
|
177
|
+
)
|
|
178
|
+
applyUpdateJSON(updateJSON)
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
func toggleTaskItemCheckedAtSelectionScalarInRust(anchor: UInt32, head: UInt32) {
|
|
182
|
+
Self.inputLog.debug(
|
|
183
|
+
"[rust.toggleTaskItemCheckedAtSelectionScalar] scalar=\(anchor)-\(head) selection=\(self.selectionSummary(), privacy: .public)"
|
|
184
|
+
)
|
|
185
|
+
let updateJSON = EditorV2Shadow.toggleTaskItemCheckedAtSelectionScalar(
|
|
186
|
+
id: editorId,
|
|
187
|
+
scalarAnchor: anchor,
|
|
188
|
+
scalarHead: head
|
|
189
|
+
)
|
|
190
|
+
applyUpdateJSON(updateJSON)
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/// Delete a document-position range via the Rust editor.
|
|
194
|
+
private func deleteRangeInRust(from: UInt32, to: UInt32) {
|
|
195
|
+
guard from < to else { return }
|
|
196
|
+
Self.inputLog.debug(
|
|
197
|
+
"[rust.deleteRange] doc=\(from)-\(to) selection=\(self.selectionSummary(), privacy: .public)"
|
|
198
|
+
)
|
|
199
|
+
let updateJSON = EditorV2Shadow.deleteRange(id: editorId, from: from, to: to)
|
|
200
|
+
applyUpdateJSON(updateJSON)
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import UIKit
|
|
2
|
+
|
|
3
|
+
// MARK: - EditorTextViewDelegate
|
|
4
|
+
|
|
5
|
+
/// Delegate protocol for EditorTextView to communicate state changes
|
|
6
|
+
/// back to the hosting view (Fabric component or UIKit container).
|
|
7
|
+
protocol EditorTextViewDelegate: AnyObject {
|
|
8
|
+
/// Called when the editor's selection changes.
|
|
9
|
+
/// - Parameters:
|
|
10
|
+
/// - textView: The editor text view.
|
|
11
|
+
/// - anchor: Scalar offset of the selection anchor.
|
|
12
|
+
/// - head: Scalar offset of the selection head.
|
|
13
|
+
func editorTextView(_ textView: EditorTextView, selectionDidChange anchor: UInt32, head: UInt32)
|
|
14
|
+
|
|
15
|
+
/// Called when the editor content is updated after a Rust operation.
|
|
16
|
+
/// - Parameters:
|
|
17
|
+
/// - textView: The editor text view.
|
|
18
|
+
/// - updateJSON: The full EditorUpdate JSON string from Rust.
|
|
19
|
+
func editorTextView(_ textView: EditorTextView, didReceiveUpdate updateJSON: String)
|
|
20
|
+
|
|
21
|
+
func editorTextView(_ textView: EditorTextView, didEndExternalTextComposition resultJSON: String)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
extension EditorTextViewDelegate {
|
|
25
|
+
func editorTextView(_ textView: EditorTextView, didEndExternalTextComposition resultJSON: String) {}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// MARK: - EditorTextView
|
|
29
|
+
|
|
30
|
+
/// Dedicated `UITextViewDelegate`, because the editor must not be its own.
|
|
31
|
+
///
|
|
32
|
+
/// Proxy keyboard integrations forward unimplemented selectors via
|
|
33
|
+
/// `forwardingTarget(for:)`, so UIKit's private `keyboardInputChangedSelection:`
|
|
34
|
+
/// bounces view -> proxy -> view until the stack overflows (APOLLO-REACT-56).
|
|
35
|
+
/// A plain NSObject does not respond to those private selectors.
|
|
36
|
+
final class EditorTextViewInternalDelegate: NSObject, UITextViewDelegate {
|
|
37
|
+
private weak var editor: EditorTextView?
|
|
38
|
+
|
|
39
|
+
init(editor: EditorTextView) {
|
|
40
|
+
self.editor = editor
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
func textViewDidChangeSelection(_ textView: UITextView) {
|
|
44
|
+
editor?.textViewDidChangeSelection(textView)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
func textView(
|
|
48
|
+
_ textView: UITextView,
|
|
49
|
+
shouldInteractWith URL: URL,
|
|
50
|
+
in characterRange: NSRange,
|
|
51
|
+
interaction: UITextItemInteraction
|
|
52
|
+
) -> Bool {
|
|
53
|
+
editor?.textView(textView, shouldInteractWith: URL, in: characterRange, interaction: interaction) ?? false
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
func textView(
|
|
57
|
+
_ textView: UITextView,
|
|
58
|
+
shouldInteractWith textAttachment: NSTextAttachment,
|
|
59
|
+
in characterRange: NSRange,
|
|
60
|
+
interaction: UITextItemInteraction
|
|
61
|
+
) -> Bool {
|
|
62
|
+
editor?.textView(textView, shouldInteractWith: textAttachment, in: characterRange, interaction: interaction)
|
|
63
|
+
?? false
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import UIKit
|
|
3
|
+
|
|
4
|
+
extension EditorTextView {
|
|
5
|
+
struct ApplyUpdateTrace {
|
|
6
|
+
let attemptedPatch: Bool
|
|
7
|
+
let patchStartIndex: Int?
|
|
8
|
+
let patchDeleteCount: Int?
|
|
9
|
+
let patchRenderBlockCount: Int?
|
|
10
|
+
let usedPatch: Bool
|
|
11
|
+
let usedSmallPatchTextMutation: Bool
|
|
12
|
+
let applyRenderReplaceUtf16Length: Int
|
|
13
|
+
let applyRenderReplacementUtf16Length: Int
|
|
14
|
+
let parseNanos: UInt64
|
|
15
|
+
let resolveRenderBlocksNanos: UInt64
|
|
16
|
+
let patchEligibilityNanos: UInt64
|
|
17
|
+
let patchTrimNanos: UInt64
|
|
18
|
+
let patchMetadataNanos: UInt64
|
|
19
|
+
let buildRenderNanos: UInt64
|
|
20
|
+
let applyRenderNanos: UInt64
|
|
21
|
+
let selectionNanos: UInt64
|
|
22
|
+
let postApplyNanos: UInt64
|
|
23
|
+
let totalNanos: UInt64
|
|
24
|
+
let applyRenderTextMutationNanos: UInt64
|
|
25
|
+
let applyRenderBeginEditingNanos: UInt64
|
|
26
|
+
let applyRenderEndEditingNanos: UInt64
|
|
27
|
+
let applyRenderStringMutationNanos: UInt64
|
|
28
|
+
let applyRenderAttributeMutationNanos: UInt64
|
|
29
|
+
let applyRenderAuthorizedTextNanos: UInt64
|
|
30
|
+
let applyRenderCacheInvalidationNanos: UInt64
|
|
31
|
+
let selectionResolveNanos: UInt64
|
|
32
|
+
let selectionAssignmentNanos: UInt64
|
|
33
|
+
let selectionChromeNanos: UInt64
|
|
34
|
+
let postApplyTypingAttributesNanos: UInt64
|
|
35
|
+
let postApplyHeightNotifyNanos: UInt64
|
|
36
|
+
let postApplyHeightNotifyMeasureNanos: UInt64
|
|
37
|
+
let postApplyHeightNotifyCallbackNanos: UInt64
|
|
38
|
+
let postApplyHeightNotifyEnsureLayoutNanos: UInt64
|
|
39
|
+
let postApplyHeightNotifyUsedRectNanos: UInt64
|
|
40
|
+
let postApplyHeightNotifyContentSizeNanos: UInt64
|
|
41
|
+
let postApplyHeightNotifySizeThatFitsNanos: UInt64
|
|
42
|
+
let postApplySelectionOrContentCallbackNanos: UInt64
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
struct PatchApplyTrace {
|
|
46
|
+
let applied: Bool
|
|
47
|
+
let eligibilityNanos: UInt64
|
|
48
|
+
let trimNanos: UInt64
|
|
49
|
+
let metadataNanos: UInt64
|
|
50
|
+
let buildRenderNanos: UInt64
|
|
51
|
+
let applyRenderNanos: UInt64
|
|
52
|
+
let applyRenderReplaceUtf16Length: Int
|
|
53
|
+
let applyRenderReplacementUtf16Length: Int
|
|
54
|
+
let applyRenderTextMutationNanos: UInt64
|
|
55
|
+
let applyRenderBeginEditingNanos: UInt64
|
|
56
|
+
let applyRenderEndEditingNanos: UInt64
|
|
57
|
+
let applyRenderStringMutationNanos: UInt64
|
|
58
|
+
let applyRenderAttributeMutationNanos: UInt64
|
|
59
|
+
let applyRenderAuthorizedTextNanos: UInt64
|
|
60
|
+
let applyRenderCacheInvalidationNanos: UInt64
|
|
61
|
+
let usedSmallPatchTextMutation: Bool
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
struct ApplyRenderTrace {
|
|
65
|
+
let totalNanos: UInt64
|
|
66
|
+
let replaceUtf16Length: Int
|
|
67
|
+
let replacementUtf16Length: Int
|
|
68
|
+
let textMutationNanos: UInt64
|
|
69
|
+
let beginEditingNanos: UInt64
|
|
70
|
+
let endEditingNanos: UInt64
|
|
71
|
+
let stringMutationNanos: UInt64
|
|
72
|
+
let attributeMutationNanos: UInt64
|
|
73
|
+
let authorizedTextNanos: UInt64
|
|
74
|
+
let cacheInvalidationNanos: UInt64
|
|
75
|
+
let usedSmallPatchTextMutation: Bool
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
struct SelectionApplyTrace {
|
|
79
|
+
let totalNanos: UInt64
|
|
80
|
+
let resolveNanos: UInt64
|
|
81
|
+
let assignmentNanos: UInt64
|
|
82
|
+
let chromeNanos: UInt64
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
struct PostApplyTrace {
|
|
86
|
+
let totalNanos: UInt64
|
|
87
|
+
let typingAttributesNanos: UInt64
|
|
88
|
+
let heightNotifyNanos: UInt64
|
|
89
|
+
let heightNotifyMeasureNanos: UInt64
|
|
90
|
+
let heightNotifyCallbackNanos: UInt64
|
|
91
|
+
let heightNotifyEnsureLayoutNanos: UInt64
|
|
92
|
+
let heightNotifyUsedRectNanos: UInt64
|
|
93
|
+
let heightNotifyContentSizeNanos: UInt64
|
|
94
|
+
let heightNotifySizeThatFitsNanos: UInt64
|
|
95
|
+
let selectionOrContentCallbackNanos: UInt64
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
func isPlaceholderVisibleForTesting() -> Bool {
|
|
99
|
+
!placeholderLabel.isHidden
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
func placeholderFrameForTesting() -> CGRect {
|
|
103
|
+
placeholderLabel.frame
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
func lastRenderAppliedPatch() -> Bool {
|
|
107
|
+
lastRenderAppliedPatchForTesting
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
func authorizedTextForTesting() -> String {
|
|
111
|
+
lastAuthorizedText
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
func lastApplyUpdateTrace() -> ApplyUpdateTrace? {
|
|
115
|
+
lastApplyUpdateTraceForTesting
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
func isUsingInternalTextViewDelegateForTesting() -> Bool {
|
|
119
|
+
(delegate as AnyObject?) === internalTextViewDelegate
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
func blockquoteStripeRectsForTesting() -> [CGRect] {
|
|
123
|
+
editorLayoutManager.blockquoteStripeRectsForTesting(in: textStorage)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
func resetBlockquoteStripeDrawPassesForTesting() {
|
|
127
|
+
editorLayoutManager.resetBlockquoteStripeDrawPassesForTesting()
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
func blockquoteStripeDrawPassesForTesting() -> [[CGRect]] {
|
|
131
|
+
editorLayoutManager.blockquoteStripeDrawPassesForTesting
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
func resetCodeBlockDrawPassesForTesting() {
|
|
135
|
+
editorLayoutManager.resetCodeBlockDrawPassesForTesting()
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
func codeBlockDrawPassesForTesting() -> [[CGRect]] {
|
|
139
|
+
editorLayoutManager.codeBlockDrawPassesForTesting
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
@discardableResult
|
|
143
|
+
func selectImageAttachmentForTesting(at location: CGPoint) -> Bool {
|
|
144
|
+
selectImageAttachmentIfNeeded(at: location)
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
func imageSelectionTapWouldHandleForTesting(at location: CGPoint) -> Bool {
|
|
148
|
+
imageAttachmentRange(at: location) != nil
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
func taskListMarkerParagraphStartForTesting(at location: CGPoint) -> Int? {
|
|
152
|
+
taskListMarkerParagraphStart(at: location)
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
func imageSelectionTapCancelsTouchesForTesting() -> Bool {
|
|
156
|
+
imageSelectionTapRecognizer.cancelsTouchesInView
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
func imageSelectionTapYieldsToDefaultTapForTesting() -> Bool {
|
|
160
|
+
gestureRecognizer(
|
|
161
|
+
imageSelectionTapRecognizer,
|
|
162
|
+
shouldBeRequiredToFailBy: UITapGestureRecognizer()
|
|
163
|
+
) || gestureRecognizer(
|
|
164
|
+
imageSelectionTapRecognizer,
|
|
165
|
+
shouldRequireFailureOf: UITapGestureRecognizer()
|
|
166
|
+
)
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
func measuredAutoGrowHeightForTesting(width: CGFloat) -> CGFloat {
|
|
170
|
+
measuredAutoGrowHeight(forWidth: width)
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
func preview(_ text: String, limit: Int = 32) -> String {
|
|
174
|
+
let normalized = text.replacingOccurrences(of: "\n", with: "\\n")
|
|
175
|
+
if normalized.count <= limit {
|
|
176
|
+
return normalized
|
|
177
|
+
}
|
|
178
|
+
return "\(normalized.prefix(limit))…"
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
func textSnapshotSummary() -> String {
|
|
182
|
+
let text = textStorage.string
|
|
183
|
+
return "len=\(text.count) preview=\"\(preview(text))\""
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
func selectionSummary() -> String {
|
|
187
|
+
guard let range = selectedTextRange else { return "none" }
|
|
188
|
+
// The UTF-16 offsets are what UIKit actually holds; every scalar below
|
|
189
|
+
// is derived through the conversion table. Logging both is what tells
|
|
190
|
+
// a caret that moved apart from a table that changed under a caret
|
|
191
|
+
// that did not.
|
|
192
|
+
let anchorUtf16 = offset(from: beginningOfDocument, to: range.start)
|
|
193
|
+
let headUtf16 = offset(from: beginningOfDocument, to: range.end)
|
|
194
|
+
let anchorScalar = PositionBridge.textViewToScalar(range.start, in: self)
|
|
195
|
+
let headScalar = PositionBridge.textViewToScalar(range.end, in: self)
|
|
196
|
+
guard editorId != 0 else {
|
|
197
|
+
return "utf16=\(anchorUtf16)-\(headUtf16) scalar=\(anchorScalar)-\(headScalar)"
|
|
198
|
+
}
|
|
199
|
+
let docAnchor = EditorV2Shadow.scalarToDoc(id: editorId, scalar: anchorScalar)
|
|
200
|
+
let docHead = EditorV2Shadow.scalarToDoc(id: editorId, scalar: headScalar)
|
|
201
|
+
return "utf16=\(anchorUtf16)-\(headUtf16) scalar=\(anchorScalar)-\(headScalar) doc=\(docAnchor)-\(docHead)"
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
func selectionSummary(from selection: [String: Any]) -> String {
|
|
205
|
+
guard let type = selection["type"] as? String else { return "unknown" }
|
|
206
|
+
switch type {
|
|
207
|
+
case "text":
|
|
208
|
+
let anchor = v2ExactUInt32(selection["anchor"] as? NSNumber) ?? 0
|
|
209
|
+
let head = v2ExactUInt32(selection["head"] as? NSNumber) ?? 0
|
|
210
|
+
return "text doc=\(anchor)-\(head)"
|
|
211
|
+
case "node":
|
|
212
|
+
let pos = v2ExactUInt32(selection["pos"] as? NSNumber) ?? 0
|
|
213
|
+
return "node doc=\(pos)"
|
|
214
|
+
case "all":
|
|
215
|
+
return "all"
|
|
216
|
+
default:
|
|
217
|
+
return type
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
func expireNativeTextMutationAfterBlurDeadlineForTesting() {
|
|
222
|
+
nativeTextMutationAfterBlurDeadline = ProcessInfo.processInfo.systemUptime - 0.001
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
}
|