@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,360 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
|
|
3
|
+
extension EditorV2Adapter {
|
|
4
|
+
private static func viewUpdate(
|
|
5
|
+
from snapshot: AtomicRenderSnapshot,
|
|
6
|
+
strippingViewSelection: Bool
|
|
7
|
+
) -> String? {
|
|
8
|
+
guard strippingViewSelection,
|
|
9
|
+
let data = snapshot.viewUpdateJSON.data(using: .utf8),
|
|
10
|
+
var update = try? JSONSerialization.jsonObject(with: data) as? [String: Any]
|
|
11
|
+
else {
|
|
12
|
+
return strippingViewSelection ? nil : snapshot.viewUpdateJSON
|
|
13
|
+
}
|
|
14
|
+
update.removeValue(forKey: "selection")
|
|
15
|
+
guard let strippedData = try? JSONSerialization.data(withJSONObject: update) else { return nil }
|
|
16
|
+
return String(data: strippedData, encoding: .utf8)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/// Fetch one complete locked render snapshot. This is deliberately the
|
|
20
|
+
/// only read in the refresh path: never splice a getState revision onto
|
|
21
|
+
/// the render payload.
|
|
22
|
+
private func fetchAtomicRenderSnapshot(
|
|
23
|
+
mirrorScalarSelection: (anchor: UInt32, head: UInt32)?
|
|
24
|
+
) -> AtomicRenderSnapshot? {
|
|
25
|
+
renderUpdateCallCountForTesting += 1
|
|
26
|
+
let result: FfiJsonResult
|
|
27
|
+
if let nativeOwnerId {
|
|
28
|
+
result = editorV2RenderNative(
|
|
29
|
+
editorId: editorId,
|
|
30
|
+
ownerId: String(nativeOwnerId),
|
|
31
|
+
mirrorScalarAnchor: mirrorScalarSelection?.anchor,
|
|
32
|
+
mirrorScalarHead: mirrorScalarSelection?.head
|
|
33
|
+
)
|
|
34
|
+
} else {
|
|
35
|
+
result = editorV2RenderUpdate(
|
|
36
|
+
editorId: editorId,
|
|
37
|
+
mirrorScalarAnchor: mirrorScalarSelection?.anchor,
|
|
38
|
+
mirrorScalarHead: mirrorScalarSelection?.head
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
switch Self.normalizeJsonResult(result) {
|
|
42
|
+
case .failure(let error):
|
|
43
|
+
// A render update that fails or violates the frozen shape is a
|
|
44
|
+
// boundary failure like any other. Returning nil without
|
|
45
|
+
// reporting it leaves every caller — the paired view and the
|
|
46
|
+
// stateless render probe alike — holding a bare nil with no
|
|
47
|
+
// cause to surface, so the engine's own error is what travels.
|
|
48
|
+
emit(error)
|
|
49
|
+
return nil
|
|
50
|
+
case .success(let json):
|
|
51
|
+
guard let snapshot = Self.parseAtomicRenderSnapshot(json) else {
|
|
52
|
+
emit(Self.contractError("v2 render update violates the frozen shape"))
|
|
53
|
+
return nil
|
|
54
|
+
}
|
|
55
|
+
return snapshot
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@discardableResult
|
|
60
|
+
private func adopt(_ snapshot: AtomicRenderSnapshot, strippingViewSelection: Bool) -> EditorV2DerivedUpdate? {
|
|
61
|
+
guard let updateJSON = Self.viewUpdate(
|
|
62
|
+
from: snapshot,
|
|
63
|
+
strippingViewSelection: strippingViewSelection
|
|
64
|
+
) else {
|
|
65
|
+
return nil
|
|
66
|
+
}
|
|
67
|
+
baseDocumentRevision = snapshot.documentRevision
|
|
68
|
+
stateRevision = snapshot.stateRevision
|
|
69
|
+
cachedScalarLength = snapshot.scalarLength
|
|
70
|
+
cachedActiveState = snapshot.activeState
|
|
71
|
+
cachedHistoryState = snapshot.historyState
|
|
72
|
+
cachedViewUpdateJSON = updateJSON
|
|
73
|
+
cachedAtomicRenderJSON = snapshot.atomicRenderJSON
|
|
74
|
+
cachedAtomicRenderDocumentRevision = snapshot.documentRevision
|
|
75
|
+
if let epoch = snapshot.positionEpoch {
|
|
76
|
+
positionEpoch = epoch
|
|
77
|
+
}
|
|
78
|
+
// This is the engine's selection from the locked snapshot. Keep it
|
|
79
|
+
// distinct from a caller-provided mirror: treating it as a mirror on
|
|
80
|
+
// the next refresh would change the frozen no-mirror render shape.
|
|
81
|
+
cachedAuthoritativeScalarSelection = snapshot.selection
|
|
82
|
+
return EditorV2DerivedUpdate(updateJSON: updateJSON, scalarLength: snapshot.scalarLength)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
func atomicRenderJSON(matchingDocumentRevision documentRevision: UInt64) -> String? {
|
|
86
|
+
guard beginRuntimeOperation() else { return nil }
|
|
87
|
+
defer { endRuntimeOperation() }
|
|
88
|
+
guard cachedAtomicRenderDocumentRevision == documentRevision else { return nil }
|
|
89
|
+
return cachedAtomicRenderJSON
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
private func parseExternalReset(_ resetJSON: String) -> (payload: [String: Any], revision: UInt64)? {
|
|
93
|
+
guard let data = resetJSON.data(using: .utf8),
|
|
94
|
+
let reset = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
|
|
95
|
+
reset["history"] as? String == "resetAndClear",
|
|
96
|
+
Set(reset.keys) == ["history", "documentRevision", reset["setJson"] != nil ? "setJson" : "setHtml"],
|
|
97
|
+
reset["setJson"] is [String: Any] || reset["setHtml"] is String,
|
|
98
|
+
let revision = Self.uint64Field(reset, "documentRevision")
|
|
99
|
+
else {
|
|
100
|
+
rejectExternalRenderEnvelope("external reset intent is malformed")
|
|
101
|
+
return nil
|
|
102
|
+
}
|
|
103
|
+
return (reset, revision)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
func validateExternalReset(_ resetJSON: String) -> Bool {
|
|
107
|
+
parseExternalReset(resetJSON) != nil
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
func adoptExternalReset(_ renderJSON: String, resetJSON: String) -> String? {
|
|
111
|
+
guard beginRuntimeOperation() else { return nil }
|
|
112
|
+
defer { endRuntimeOperation() }
|
|
113
|
+
guard let intent = parseExternalReset(resetJSON) else { return nil }
|
|
114
|
+
var reset = intent.payload
|
|
115
|
+
let resetRevision = intent.revision
|
|
116
|
+
guard let current = fetchAtomicRenderSnapshot(mirrorScalarSelection: nil) else { return nil }
|
|
117
|
+
if current.documentRevision == resetRevision {
|
|
118
|
+
return adoptExternalRender(renderJSON)
|
|
119
|
+
}
|
|
120
|
+
if latestJSDrivenDocumentRevision > resetRevision {
|
|
121
|
+
return adopt(current, strippingViewSelection: false)?.updateJSON
|
|
122
|
+
}
|
|
123
|
+
switch Self.normalizeJsonResult(editorV2GetState(editorId: editorId)) {
|
|
124
|
+
case .failure(let error):
|
|
125
|
+
emit(error)
|
|
126
|
+
return nil
|
|
127
|
+
case .success(let json):
|
|
128
|
+
guard let data = json.data(using: .utf8),
|
|
129
|
+
let state = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
|
|
130
|
+
let origin = state["documentOrigin"] as? String
|
|
131
|
+
else {
|
|
132
|
+
emit(contractError("v2 reset state violates the frozen shape"))
|
|
133
|
+
return nil
|
|
134
|
+
}
|
|
135
|
+
if origin != "nativeView" {
|
|
136
|
+
return refreshInternal(mirrorSelection: nil, strippingViewSelection: false)?.updateJSON
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
reset.removeValue(forKey: "documentRevision")
|
|
140
|
+
let result = callWithEnvelope(reset, includeBaseRevision: false) { requestJSON in
|
|
141
|
+
editorV2ReplaceDocument(editorId: self.editorId, requestJson: requestJSON)
|
|
142
|
+
}
|
|
143
|
+
switch Self.normalizeJsonResult(result) {
|
|
144
|
+
case .failure(let error):
|
|
145
|
+
emit(error)
|
|
146
|
+
return nil
|
|
147
|
+
case .success(let json):
|
|
148
|
+
guard let data = json.data(using: .utf8),
|
|
149
|
+
let commit = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
|
|
150
|
+
let changed = commit["changed"] as? Bool,
|
|
151
|
+
Self.uint64Field(commit, "documentRevision") != nil
|
|
152
|
+
else {
|
|
153
|
+
emit(contractError("v2 reset result violates the frozen shape"))
|
|
154
|
+
return nil
|
|
155
|
+
}
|
|
156
|
+
guard let update = refreshInternal(mirrorSelection: nil, strippingViewSelection: false) else {
|
|
157
|
+
return nil
|
|
158
|
+
}
|
|
159
|
+
if changed {
|
|
160
|
+
publishCachedCollaborationSelection()
|
|
161
|
+
notifyCollaborationMutation()
|
|
162
|
+
}
|
|
163
|
+
return update.updateJSON
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
func adoptExternalRender(_ renderJSON: String) -> String? {
|
|
168
|
+
guard beginRuntimeOperation() else { return nil }
|
|
169
|
+
defer { endRuntimeOperation() }
|
|
170
|
+
guard !destroyed else {
|
|
171
|
+
rejectExternalRenderEnvelope("external editor update adapter is destroyed")
|
|
172
|
+
return nil
|
|
173
|
+
}
|
|
174
|
+
guard let snapshot = Self.parseAtomicRenderSnapshot(renderJSON),
|
|
175
|
+
let adopted = adopt(snapshot, strippingViewSelection: false)
|
|
176
|
+
else {
|
|
177
|
+
rejectAtomicRenderSnapshot()
|
|
178
|
+
return nil
|
|
179
|
+
}
|
|
180
|
+
if snapshot.positionEpoch == nil, !pinCurrentPositionEpoch(snapshot.documentRevision) {
|
|
181
|
+
return nil
|
|
182
|
+
}
|
|
183
|
+
return adopted.updateJSON
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/// Validate an externally supplied atomic render without adopting it.
|
|
187
|
+
/// A preflight commit can make an otherwise valid render stale; callers
|
|
188
|
+
/// still need to reject malformed envelopes exactly once before replacing
|
|
189
|
+
/// that stale render with a current atomic refresh.
|
|
190
|
+
func validateExternalRender(_ renderJSON: String) -> Bool {
|
|
191
|
+
guard beginRuntimeOperation() else { return false }
|
|
192
|
+
defer { endRuntimeOperation() }
|
|
193
|
+
guard !destroyed else {
|
|
194
|
+
rejectExternalRenderEnvelope("external editor update adapter is destroyed")
|
|
195
|
+
return false
|
|
196
|
+
}
|
|
197
|
+
guard Self.parseAtomicRenderSnapshot(renderJSON) != nil else {
|
|
198
|
+
rejectAtomicRenderSnapshot()
|
|
199
|
+
return false
|
|
200
|
+
}
|
|
201
|
+
return true
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
func pinCurrentPositionEpoch(_ documentRevision: UInt64) -> Bool {
|
|
205
|
+
guard let nativeOwnerId else { return true }
|
|
206
|
+
switch Self.normalizeJsonResult(
|
|
207
|
+
editorV2PinPositionEpoch(
|
|
208
|
+
editorId: editorId,
|
|
209
|
+
ownerId: String(nativeOwnerId),
|
|
210
|
+
documentRevision: String(documentRevision)
|
|
211
|
+
)
|
|
212
|
+
) {
|
|
213
|
+
case .failure(let error):
|
|
214
|
+
emit(error)
|
|
215
|
+
return false
|
|
216
|
+
case .success(let json):
|
|
217
|
+
guard let data = json.data(using: .utf8),
|
|
218
|
+
let object = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
|
|
219
|
+
Set(object.keys) == ["positionEpoch"],
|
|
220
|
+
let value = object["positionEpoch"] as? String,
|
|
221
|
+
let epoch = UInt64(value), String(epoch) == value
|
|
222
|
+
else {
|
|
223
|
+
emit(Self.contractError("v2 position epoch result violates the frozen shape"))
|
|
224
|
+
return false
|
|
225
|
+
}
|
|
226
|
+
positionEpoch = epoch
|
|
227
|
+
return true
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/// Re-read the authoritative v2 state and update the render caches.
|
|
232
|
+
@discardableResult
|
|
233
|
+
func refreshInternal(
|
|
234
|
+
mirrorSelection: (anchor: UInt32, head: UInt32)?,
|
|
235
|
+
strippingViewSelection: Bool = false
|
|
236
|
+
) -> EditorV2DerivedUpdate? {
|
|
237
|
+
guard !destroyed else {
|
|
238
|
+
emit(
|
|
239
|
+
FfiError(
|
|
240
|
+
domain: "lifecycle",
|
|
241
|
+
code: "ENGINE_DESTROYED",
|
|
242
|
+
message: "editor session is destroyed",
|
|
243
|
+
requestId: nil,
|
|
244
|
+
operationIndex: nil,
|
|
245
|
+
limit: nil,
|
|
246
|
+
actual: nil,
|
|
247
|
+
detailsJson: nil
|
|
248
|
+
)
|
|
249
|
+
)
|
|
250
|
+
return nil
|
|
251
|
+
}
|
|
252
|
+
guard let snapshot = fetchAtomicRenderSnapshot(mirrorScalarSelection: mirrorSelection),
|
|
253
|
+
let derived = adopt(snapshot, strippingViewSelection: strippingViewSelection)
|
|
254
|
+
else {
|
|
255
|
+
debugNotes.append("deriveUpdateJSON failed")
|
|
256
|
+
return nil
|
|
257
|
+
}
|
|
258
|
+
return derived
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/// Public recovery entry (stale-revision recovery, external refresh).
|
|
262
|
+
func refreshFromRustState(mirrorSelection: (anchor: UInt32, head: UInt32)?) -> String? {
|
|
263
|
+
guard beginRuntimeOperation() else { return nil }
|
|
264
|
+
defer { endRuntimeOperation() }
|
|
265
|
+
return refreshInternal(mirrorSelection: mirrorSelection)?.updateJSON
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
func recoverNativeRender() -> String? {
|
|
269
|
+
guard beginRuntimeOperation() else { return nil }
|
|
270
|
+
defer { endRuntimeOperation() }
|
|
271
|
+
if let ownerId = nativeOwnerId {
|
|
272
|
+
positionEpoch = nil
|
|
273
|
+
_ = editorV2ReleaseNativeBinding(editorId: editorId, ownerId: String(ownerId))
|
|
274
|
+
}
|
|
275
|
+
return refreshFromRustState(mirrorSelection: nil)
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/// Synthesized current-state update (selection/activeState included,
|
|
279
|
+
/// mirroring the legacy `editorGetCurrentState` contract).
|
|
280
|
+
func currentStateJSON() -> String? {
|
|
281
|
+
guard beginRuntimeOperation() else { return nil }
|
|
282
|
+
defer { endRuntimeOperation() }
|
|
283
|
+
return refreshInternal(mirrorSelection: lastSyncedScalarSelection)?.updateJSON
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/// The initial bind render. The host passes this exact snapshot directly
|
|
287
|
+
/// to the text view and toolbar, so it must not be replayed by a later
|
|
288
|
+
/// independent current-state read.
|
|
289
|
+
func initialUpdateJSON() -> String? {
|
|
290
|
+
guard beginRuntimeOperation() else { return nil }
|
|
291
|
+
defer { endRuntimeOperation() }
|
|
292
|
+
return refreshInternal(mirrorSelection: nil)?.updateJSON
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
func documentHtml() -> String? {
|
|
296
|
+
guard beginRuntimeOperation() else { return nil }
|
|
297
|
+
defer { endRuntimeOperation() }
|
|
298
|
+
guard !destroyed else { return nil }
|
|
299
|
+
switch Self.normalizeJsonResult(editorV2GetDocumentHtml(editorId: editorId)) {
|
|
300
|
+
case .failure(let error):
|
|
301
|
+
emit(error)
|
|
302
|
+
return nil
|
|
303
|
+
case .success(let json):
|
|
304
|
+
guard let data = json.data(using: .utf8),
|
|
305
|
+
let object = try? JSONSerialization.jsonObject(with: data) as? [String: Any]
|
|
306
|
+
else {
|
|
307
|
+
emit(contractError("v2 getDocumentHtml value violates the frozen shape"))
|
|
308
|
+
return nil
|
|
309
|
+
}
|
|
310
|
+
return object["html"] as? String
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/// The authoritative v2 document JSON.
|
|
315
|
+
func documentJson() -> String? {
|
|
316
|
+
guard beginRuntimeOperation() else { return nil }
|
|
317
|
+
defer { endRuntimeOperation() }
|
|
318
|
+
guard !destroyed else { return nil }
|
|
319
|
+
return fetchDocumentJson()
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/// The v2 content snapshot `{html, json}` (same frozen shape as legacy).
|
|
323
|
+
func contentSnapshotJSON() -> String? {
|
|
324
|
+
guard beginRuntimeOperation() else { return nil }
|
|
325
|
+
defer { endRuntimeOperation() }
|
|
326
|
+
guard !destroyed else { return nil }
|
|
327
|
+
switch Self.normalizeJsonResult(editorV2GetContentSnapshot(editorId: editorId)) {
|
|
328
|
+
case .failure(let error):
|
|
329
|
+
emit(error)
|
|
330
|
+
return nil
|
|
331
|
+
case .success(let json):
|
|
332
|
+
return json
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/// Engine-owned history flags (module `editorCanUndo/editorCanRedo`).
|
|
337
|
+
func historyFlags() -> (canUndo: Bool, canRedo: Bool)? {
|
|
338
|
+
guard beginRuntimeOperation() else { return nil }
|
|
339
|
+
defer { endRuntimeOperation() }
|
|
340
|
+
if let cachedHistoryState { return cachedHistoryState }
|
|
341
|
+
guard refreshInternal(mirrorSelection: nil) != nil else { return nil }
|
|
342
|
+
return cachedHistoryState
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/// The resolved selection JSON (legacy `editorGetSelection` shape).
|
|
346
|
+
func selectionJSON() -> String? {
|
|
347
|
+
guard beginRuntimeOperation() else { return nil }
|
|
348
|
+
defer { endRuntimeOperation() }
|
|
349
|
+
guard let derived = refreshInternal(mirrorSelection: lastSyncedScalarSelection),
|
|
350
|
+
let updateData = derived.updateJSON.data(using: .utf8),
|
|
351
|
+
let update = try? JSONSerialization.jsonObject(with: updateData) as? [String: Any],
|
|
352
|
+
let selection = update["selection"],
|
|
353
|
+
let data = try? JSONSerialization.data(withJSONObject: selection)
|
|
354
|
+
else {
|
|
355
|
+
return nil
|
|
356
|
+
}
|
|
357
|
+
return String(data: data, encoding: .utf8)
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
}
|