@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,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LOCAL_AWARENESS_SELECTION_VALUES = exports.LOCAL_AWARENESS_INTENT_KEYS = void 0;
|
|
4
|
+
exports.invalidLocalAwarenessIntent = invalidLocalAwarenessIntent;
|
|
5
|
+
exports.createNativeEditorLocalAwarenessSelection = createNativeEditorLocalAwarenessSelection;
|
|
6
|
+
exports.isLocalAwarenessRecord = isLocalAwarenessRecord;
|
|
7
|
+
exports.localAwarenessOwnDataValue = localAwarenessOwnDataValue;
|
|
8
|
+
exports.validateLocalAwarenessSelection = validateLocalAwarenessSelection;
|
|
9
|
+
exports.rejectReservedAwarenessCursor = rejectReservedAwarenessCursor;
|
|
10
|
+
exports.normalizeLocalAwarenessState = normalizeLocalAwarenessState;
|
|
11
|
+
exports.validateLocalAwarenessIntent = validateLocalAwarenessIntent;
|
|
12
|
+
exports.serializeLocalAwarenessIntent = serializeLocalAwarenessIntent;
|
|
13
|
+
const NativeEditorBoundaryError_1 = require("./NativeEditorBoundaryError");
|
|
14
|
+
const NativeEditorResultNormalization_1 = require("./NativeEditorResultNormalization");
|
|
15
|
+
const NativeEditorTypes_1 = require("./NativeEditorTypes");
|
|
16
|
+
const NativeEditorCreateJson_1 = require("./NativeEditorCreateJson");
|
|
17
|
+
exports.LOCAL_AWARENESS_INTENT_KEYS = new Set(['state', 'focused', 'selection']);
|
|
18
|
+
exports.LOCAL_AWARENESS_SELECTION_VALUES = new WeakMap();
|
|
19
|
+
function invalidLocalAwarenessIntent(message = 'invalid local awareness intent') {
|
|
20
|
+
throw (0, NativeEditorResultNormalization_1.invalidV2RequestError)(`NativeEditorBridge: ${message}`);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Create the only caller-owned local-awareness selection accepted at the
|
|
24
|
+
* JavaScript-to-native boundary. The private WeakMap makes provenance an API
|
|
25
|
+
* capability instead of a structural object-shape check.
|
|
26
|
+
*/
|
|
27
|
+
function createNativeEditorLocalAwarenessSelection(anchor, head) {
|
|
28
|
+
const acceptedAnchor = (0, NativeEditorResultNormalization_1.nativeEditorV2U32)(anchor);
|
|
29
|
+
const acceptedHead = (0, NativeEditorResultNormalization_1.nativeEditorV2U32)(head);
|
|
30
|
+
if (acceptedAnchor == null || acceptedHead == null)
|
|
31
|
+
invalidLocalAwarenessIntent();
|
|
32
|
+
const selection = new NativeEditorTypes_1.NativeEditorLocalAwarenessSelectionValue(acceptedAnchor, acceptedHead);
|
|
33
|
+
Object.freeze(selection);
|
|
34
|
+
exports.LOCAL_AWARENESS_SELECTION_VALUES.set(selection, selection);
|
|
35
|
+
return selection;
|
|
36
|
+
}
|
|
37
|
+
function isLocalAwarenessRecord(value) {
|
|
38
|
+
if (value == null || typeof value !== 'object' || Array.isArray(value))
|
|
39
|
+
return false;
|
|
40
|
+
const prototype = Object.getPrototypeOf(value);
|
|
41
|
+
return prototype === Object.prototype || prototype === null;
|
|
42
|
+
}
|
|
43
|
+
function localAwarenessOwnDataValue(record, key) {
|
|
44
|
+
const descriptor = Object.getOwnPropertyDescriptor(record, key);
|
|
45
|
+
if (descriptor === undefined || !('value' in descriptor) || descriptor.enumerable !== true) {
|
|
46
|
+
invalidLocalAwarenessIntent();
|
|
47
|
+
}
|
|
48
|
+
return descriptor.value;
|
|
49
|
+
}
|
|
50
|
+
function validateLocalAwarenessSelection(selection) {
|
|
51
|
+
if (selection == null || typeof selection !== 'object')
|
|
52
|
+
invalidLocalAwarenessIntent();
|
|
53
|
+
// Do not inspect caller-held values before provenance succeeds: a Proxy
|
|
54
|
+
// can imitate every structural and own-data check, but it cannot inherit
|
|
55
|
+
// this module's WeakMap identity.
|
|
56
|
+
const factoryValue = exports.LOCAL_AWARENESS_SELECTION_VALUES.get(selection);
|
|
57
|
+
if (factoryValue === undefined)
|
|
58
|
+
invalidLocalAwarenessIntent();
|
|
59
|
+
const anchor = (0, NativeEditorResultNormalization_1.nativeEditorV2U32)(factoryValue.anchor);
|
|
60
|
+
const head = (0, NativeEditorResultNormalization_1.nativeEditorV2U32)(factoryValue.head);
|
|
61
|
+
if (anchor == null || head == null) {
|
|
62
|
+
invalidLocalAwarenessIntent();
|
|
63
|
+
}
|
|
64
|
+
return { anchor, head };
|
|
65
|
+
}
|
|
66
|
+
/** Reject caller-owned sticky cursor data before a native call can occur. */
|
|
67
|
+
function rejectReservedAwarenessCursor(value) {
|
|
68
|
+
const pending = [value];
|
|
69
|
+
const seen = new WeakSet();
|
|
70
|
+
while (pending.length > 0) {
|
|
71
|
+
const current = pending.pop();
|
|
72
|
+
if (current == null || typeof current !== 'object')
|
|
73
|
+
continue;
|
|
74
|
+
if (seen.has(current))
|
|
75
|
+
continue;
|
|
76
|
+
seen.add(current);
|
|
77
|
+
for (const key of Reflect.ownKeys(current)) {
|
|
78
|
+
if (key === 'cursor')
|
|
79
|
+
invalidLocalAwarenessIntent('reserved cursor key is not allowed');
|
|
80
|
+
const descriptor = Object.getOwnPropertyDescriptor(current, key);
|
|
81
|
+
if (descriptor == null || !('value' in descriptor))
|
|
82
|
+
invalidLocalAwarenessIntent();
|
|
83
|
+
pending.push(descriptor.value);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function normalizeLocalAwarenessState(value) {
|
|
88
|
+
try {
|
|
89
|
+
const normalized = (0, NativeEditorCreateJson_1.normalizeV2JsonValue)(value, 'local awareness state', {
|
|
90
|
+
seen: new WeakSet(),
|
|
91
|
+
work: 0,
|
|
92
|
+
});
|
|
93
|
+
if (!isLocalAwarenessRecord(normalized) || Object.getPrototypeOf(normalized) !== null) {
|
|
94
|
+
invalidLocalAwarenessIntent();
|
|
95
|
+
}
|
|
96
|
+
rejectReservedAwarenessCursor(normalized);
|
|
97
|
+
return normalized;
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
if (error instanceof NativeEditorBoundaryError_1.NativeEditorEngineBoundaryError)
|
|
101
|
+
throw error;
|
|
102
|
+
invalidLocalAwarenessIntent();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
function validateLocalAwarenessIntent(intent) {
|
|
106
|
+
try {
|
|
107
|
+
if (!isLocalAwarenessRecord(intent) ||
|
|
108
|
+
Reflect.ownKeys(intent).some((key) => typeof key !== 'string' || !exports.LOCAL_AWARENESS_INTENT_KEYS.has(key)) ||
|
|
109
|
+
!Object.prototype.hasOwnProperty.call(intent, 'state') ||
|
|
110
|
+
!Object.prototype.hasOwnProperty.call(intent, 'focused')) {
|
|
111
|
+
invalidLocalAwarenessIntent();
|
|
112
|
+
}
|
|
113
|
+
const state = normalizeLocalAwarenessState(localAwarenessOwnDataValue(intent, 'state'));
|
|
114
|
+
const focused = localAwarenessOwnDataValue(intent, 'focused');
|
|
115
|
+
if (typeof focused !== 'boolean')
|
|
116
|
+
invalidLocalAwarenessIntent();
|
|
117
|
+
if (!Object.prototype.hasOwnProperty.call(intent, 'selection')) {
|
|
118
|
+
// Absent: retain whatever cursor Rust already holds.
|
|
119
|
+
return { state, focused };
|
|
120
|
+
}
|
|
121
|
+
const rawSelection = localAwarenessOwnDataValue(intent, 'selection');
|
|
122
|
+
if (rawSelection === null)
|
|
123
|
+
return { state, focused, selection: null };
|
|
124
|
+
const selection = validateLocalAwarenessSelection(rawSelection);
|
|
125
|
+
return { state, focused, selection: { type: 'text', ...selection } };
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
if (error instanceof NativeEditorBoundaryError_1.NativeEditorEngineBoundaryError)
|
|
129
|
+
throw error;
|
|
130
|
+
invalidLocalAwarenessIntent();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function serializeLocalAwarenessIntent(intent) {
|
|
134
|
+
try {
|
|
135
|
+
const wire = Object.create(null);
|
|
136
|
+
wire.state = intent.state;
|
|
137
|
+
wire.focused = intent.focused;
|
|
138
|
+
if (intent.selection === null) {
|
|
139
|
+
wire.selection = null;
|
|
140
|
+
}
|
|
141
|
+
else if (intent.selection !== undefined) {
|
|
142
|
+
const selection = Object.create(null);
|
|
143
|
+
selection.type = intent.selection.type;
|
|
144
|
+
selection.anchor = intent.selection.anchor;
|
|
145
|
+
selection.head = intent.selection.head;
|
|
146
|
+
wire.selection = selection;
|
|
147
|
+
}
|
|
148
|
+
return (0, NativeEditorCreateJson_1.serializeV2CreateEnvelope)(wire);
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
invalidLocalAwarenessIntent();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { type NativeEditorError } from './NativeEditorBoundaryError';
|
|
2
|
+
export declare let _nativeModule: NativeEditorModule | null;
|
|
3
|
+
export declare function getNativeModule(): NativeEditorModule;
|
|
4
|
+
/** @internal Reset the cached native module reference. For testing only. */
|
|
5
|
+
export declare function _resetNativeModuleCache(): void;
|
|
6
|
+
export declare const ERR_V2_NATIVE_RESPONSE = "NativeEditorBridge: invalid v2 result record from native module";
|
|
7
|
+
export declare const ERR_V2_DESTROYED = "NativeEditorBridge: v2 editor handle has been destroyed";
|
|
8
|
+
export declare const V2_ENVELOPE_VERSION = 1;
|
|
9
|
+
/**
|
|
10
|
+
* The v2 surface of the NativeEditor native module — the complete
|
|
11
|
+
* production ABI. Every call resolves the method lazily and fails clearly
|
|
12
|
+
* when the v2 surface is absent. Decimal-string identifiers keep full u64
|
|
13
|
+
* fidelity across the JavaScript boundary, and binaries travel as direct
|
|
14
|
+
* Uint8Array values (never JSON number arrays).
|
|
15
|
+
*/
|
|
16
|
+
export interface NativeEditorModule {
|
|
17
|
+
editorV2Create(configJson: string, snapshotState: Uint8Array | null): unknown;
|
|
18
|
+
editorV2Destroy(editorId: string): unknown;
|
|
19
|
+
editorV2GetState(editorId: string): unknown;
|
|
20
|
+
editorV2GetDocumentJson(editorId: string): unknown;
|
|
21
|
+
editorV2GetDocumentHtml(editorId: string): unknown;
|
|
22
|
+
editorV2GetContentSnapshot(editorId: string): unknown;
|
|
23
|
+
editorV2ReplaceDocument(editorId: string, requestJson: string): unknown;
|
|
24
|
+
editorV2ApplyInput(editorId: string, requestJson: string): unknown;
|
|
25
|
+
editorV2ApplyCommand(editorId: string, requestJson: string): unknown;
|
|
26
|
+
editorV2ApplyLocalApi(editorId: string, requestJson: string): unknown;
|
|
27
|
+
editorV2SetSelection(editorId: string, requestJson: string): unknown;
|
|
28
|
+
editorV2Undo(editorId: string, requestJson: string): unknown;
|
|
29
|
+
editorV2Redo(editorId: string, requestJson: string): unknown;
|
|
30
|
+
editorV2RenderUpdate(editorId: string, mirrorScalarAnchor: number | null, mirrorScalarHead: number | null): unknown;
|
|
31
|
+
editorV2CollaborationConfigureTransport(editorId: string, configJsonOrNull: string | null): unknown;
|
|
32
|
+
editorV2CollaborationResolveProtocolAdapter(editorId: string, attemptId: string, eventId: string, responseJson: string): unknown;
|
|
33
|
+
editorV2CollaborationSetAwareness(editorId: string, awarenessJson: string): unknown;
|
|
34
|
+
editorV2SnapshotExport(editorId: string): unknown;
|
|
35
|
+
editorV2SnapshotRestore(editorId: string, metadataJson: string, encodedState: Uint8Array): unknown;
|
|
36
|
+
addListener(eventName: 'onCollaborationTransportEvent', listener: (event: unknown) => void): {
|
|
37
|
+
remove(): void;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export declare function invokeNativeEditorV2<K extends keyof NativeEditorModule>(name: K, ...args: Parameters<NativeEditorModule[K]>): unknown;
|
|
41
|
+
/** The discriminated envelope every v2 result record normalizes into. */
|
|
42
|
+
export type NativeEditorResult<T> = {
|
|
43
|
+
ok: true;
|
|
44
|
+
value: T;
|
|
45
|
+
} | {
|
|
46
|
+
ok: false;
|
|
47
|
+
error: NativeEditorError;
|
|
48
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.V2_ENVELOPE_VERSION = exports.ERR_V2_DESTROYED = exports.ERR_V2_NATIVE_RESPONSE = exports._nativeModule = void 0;
|
|
4
|
+
exports.getNativeModule = getNativeModule;
|
|
5
|
+
exports._resetNativeModuleCache = _resetNativeModuleCache;
|
|
6
|
+
exports.invokeNativeEditorV2 = invokeNativeEditorV2;
|
|
7
|
+
const expo_modules_core_1 = require("expo-modules-core");
|
|
8
|
+
exports._nativeModule = null;
|
|
9
|
+
function getNativeModule() {
|
|
10
|
+
if (!exports._nativeModule) {
|
|
11
|
+
exports._nativeModule = (0, expo_modules_core_1.requireNativeModule)('NativeEditor');
|
|
12
|
+
}
|
|
13
|
+
return exports._nativeModule;
|
|
14
|
+
}
|
|
15
|
+
/** @internal Reset the cached native module reference. For testing only. */
|
|
16
|
+
function _resetNativeModuleCache() {
|
|
17
|
+
exports._nativeModule = null;
|
|
18
|
+
}
|
|
19
|
+
// The only construction path. Consumes the frozen v2 result records
|
|
20
|
+
// ({ value, error }, exactly one side set), normalizes them at the JS boundary
|
|
21
|
+
// (decimal-string u64s, direct binaries, unsafe-integer rejection), and raises
|
|
22
|
+
// typed per-domain errors with a non-retryable class for
|
|
23
|
+
// ENGINE_INVARIANT_FAILED and destroyed lifecycles.
|
|
24
|
+
exports.ERR_V2_NATIVE_RESPONSE = 'NativeEditorBridge: invalid v2 result record from native module';
|
|
25
|
+
exports.ERR_V2_DESTROYED = 'NativeEditorBridge: v2 editor handle has been destroyed';
|
|
26
|
+
exports.V2_ENVELOPE_VERSION = 1;
|
|
27
|
+
function invokeNativeEditorV2(name, ...args) {
|
|
28
|
+
const nativeModule = getNativeModule();
|
|
29
|
+
const method = nativeModule[name];
|
|
30
|
+
if (typeof method !== 'function') {
|
|
31
|
+
throw new Error(`NativeEditorBridge: native module does not expose the v2 entry ${String(name)}`);
|
|
32
|
+
}
|
|
33
|
+
return method.apply(nativeModule, args);
|
|
34
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type ListContext, type RenderElement, type RenderBlocksPatch, type Selection, type ActiveState, type HistoryState, type NativeEditorAtomicRenderSnapshot, type DocumentJSON, type ContentSnapshot } from './NativeEditorTypes';
|
|
2
|
+
export declare function validListContext(value: unknown): value is ListContext;
|
|
3
|
+
export declare function validRenderElement(value: unknown): value is RenderElement;
|
|
4
|
+
export declare function normalizeRenderBlocks(value: unknown): RenderElement[][] | null;
|
|
5
|
+
export declare function normalizeRenderPatch(value: unknown): RenderBlocksPatch | null | undefined;
|
|
6
|
+
export declare function normalizeRenderSelection(value: unknown): Selection | null;
|
|
7
|
+
export declare function normalizeRenderActiveState(value: unknown): ActiveState | null;
|
|
8
|
+
export declare function normalizeRenderHistoryState(value: unknown): HistoryState | null;
|
|
9
|
+
export declare function deepFreezeV2Value<T>(value: T): T;
|
|
10
|
+
/** Validate and freeze the one complete render/state snapshot. */
|
|
11
|
+
export declare function normalizeNativeEditorV2RenderUpdateValue(value: unknown): NativeEditorAtomicRenderSnapshot | null;
|
|
12
|
+
export declare function normalizeNativeEditorV2DocumentJsonValue(value: unknown): DocumentJSON | null;
|
|
13
|
+
export declare function normalizeNativeEditorV2ContentSnapshotValue(value: unknown): ContentSnapshot | null;
|
|
14
|
+
export interface NativeEditorSnapshotExport {
|
|
15
|
+
metadataJson: string;
|
|
16
|
+
encodedState: Uint8Array;
|
|
17
|
+
}
|
|
18
|
+
/** The snapshot export record arrives as direct fields (JSON + bytes), not a JSON string. */
|
|
19
|
+
export declare function normalizeNativeEditorV2SnapshotExportValue(value: unknown): NativeEditorSnapshotExport | null;
|
|
20
|
+
export declare function normalizeNativeEditorV2CreateValue(value: unknown): {
|
|
21
|
+
editorId: string;
|
|
22
|
+
} | null;
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validListContext = validListContext;
|
|
4
|
+
exports.validRenderElement = validRenderElement;
|
|
5
|
+
exports.normalizeRenderBlocks = normalizeRenderBlocks;
|
|
6
|
+
exports.normalizeRenderPatch = normalizeRenderPatch;
|
|
7
|
+
exports.normalizeRenderSelection = normalizeRenderSelection;
|
|
8
|
+
exports.normalizeRenderActiveState = normalizeRenderActiveState;
|
|
9
|
+
exports.normalizeRenderHistoryState = normalizeRenderHistoryState;
|
|
10
|
+
exports.deepFreezeV2Value = deepFreezeV2Value;
|
|
11
|
+
exports.normalizeNativeEditorV2RenderUpdateValue = normalizeNativeEditorV2RenderUpdateValue;
|
|
12
|
+
exports.normalizeNativeEditorV2DocumentJsonValue = normalizeNativeEditorV2DocumentJsonValue;
|
|
13
|
+
exports.normalizeNativeEditorV2ContentSnapshotValue = normalizeNativeEditorV2ContentSnapshotValue;
|
|
14
|
+
exports.normalizeNativeEditorV2SnapshotExportValue = normalizeNativeEditorV2SnapshotExportValue;
|
|
15
|
+
exports.normalizeNativeEditorV2CreateValue = normalizeNativeEditorV2CreateValue;
|
|
16
|
+
const NativeEditorResultNormalization_1 = require("./NativeEditorResultNormalization");
|
|
17
|
+
const EditorMentionThemeValidation_1 = require("./EditorMentionThemeValidation");
|
|
18
|
+
function validListContext(value) {
|
|
19
|
+
if (!(0, NativeEditorResultNormalization_1.isPlainRecord)(value))
|
|
20
|
+
return false;
|
|
21
|
+
return ((0, NativeEditorResultNormalization_1.hasOnlyOwnKeys)(value, [
|
|
22
|
+
'ordered',
|
|
23
|
+
'index',
|
|
24
|
+
'total',
|
|
25
|
+
'start',
|
|
26
|
+
'isFirst',
|
|
27
|
+
'isLast',
|
|
28
|
+
'kind',
|
|
29
|
+
'checked',
|
|
30
|
+
]) &&
|
|
31
|
+
typeof value.ordered === 'boolean' &&
|
|
32
|
+
(0, NativeEditorResultNormalization_1.nativeEditorV2U32)(value.index) != null &&
|
|
33
|
+
(0, NativeEditorResultNormalization_1.nativeEditorV2U32)(value.total) != null &&
|
|
34
|
+
(0, NativeEditorResultNormalization_1.nativeEditorV2U32)(value.start) != null &&
|
|
35
|
+
typeof value.isFirst === 'boolean' &&
|
|
36
|
+
typeof value.isLast === 'boolean' &&
|
|
37
|
+
(value.kind == null || typeof value.kind === 'string') &&
|
|
38
|
+
(value.checked == null || typeof value.checked === 'boolean'));
|
|
39
|
+
}
|
|
40
|
+
function validRenderElement(value) {
|
|
41
|
+
if (!(0, NativeEditorResultNormalization_1.isPlainRecord)(value) || !NativeEditorResultNormalization_1.RENDER_ELEMENT_TYPES.has(value.type)) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
switch (value.type) {
|
|
45
|
+
case 'textRun':
|
|
46
|
+
return ((0, NativeEditorResultNormalization_1.hasExactOwnKeys)(value, ['type', 'text', 'marks']) &&
|
|
47
|
+
typeof value.text === 'string' &&
|
|
48
|
+
Array.isArray(value.marks) &&
|
|
49
|
+
value.marks.every(NativeEditorResultNormalization_1.validRenderMark));
|
|
50
|
+
case 'blockStart':
|
|
51
|
+
return ((0, NativeEditorResultNormalization_1.hasOnlyOwnKeys)(value, ['type', 'nodeType', 'depth', 'listContext', 'language']) &&
|
|
52
|
+
typeof value.nodeType === 'string' &&
|
|
53
|
+
(0, NativeEditorResultNormalization_1.nativeEditorV2U32)(value.depth) != null &&
|
|
54
|
+
(value.language === undefined || typeof value.language === 'string') &&
|
|
55
|
+
(value.listContext === undefined || validListContext(value.listContext)));
|
|
56
|
+
case 'blockEnd':
|
|
57
|
+
return (0, NativeEditorResultNormalization_1.hasExactOwnKeys)(value, ['type']);
|
|
58
|
+
case 'voidInline':
|
|
59
|
+
return ((0, NativeEditorResultNormalization_1.hasOnlyOwnKeys)(value, ['type', 'nodeType', 'docPos', 'attrs']) &&
|
|
60
|
+
typeof value.nodeType === 'string' &&
|
|
61
|
+
(0, NativeEditorResultNormalization_1.nativeEditorV2U32)(value.docPos) != null &&
|
|
62
|
+
(value.attrs === undefined || (0, NativeEditorResultNormalization_1.isPlainRecord)(value.attrs)));
|
|
63
|
+
case 'voidBlock':
|
|
64
|
+
return ((0, NativeEditorResultNormalization_1.hasOnlyOwnKeys)(value, ['type', 'nodeType', 'docPos', 'attrs', 'atomId']) &&
|
|
65
|
+
typeof value.nodeType === 'string' &&
|
|
66
|
+
(0, NativeEditorResultNormalization_1.nativeEditorV2U32)(value.docPos) != null &&
|
|
67
|
+
(value.attrs === undefined || (0, NativeEditorResultNormalization_1.isPlainRecord)(value.attrs)) &&
|
|
68
|
+
(value.atomId === undefined || typeof value.atomId === 'string'));
|
|
69
|
+
case 'opaqueInlineAtom':
|
|
70
|
+
return ((0, NativeEditorResultNormalization_1.hasOnlyOwnKeys)(value, [
|
|
71
|
+
'type',
|
|
72
|
+
'nodeType',
|
|
73
|
+
'label',
|
|
74
|
+
'docPos',
|
|
75
|
+
'attrs',
|
|
76
|
+
'mentionTheme',
|
|
77
|
+
]) &&
|
|
78
|
+
typeof value.nodeType === 'string' &&
|
|
79
|
+
typeof value.label === 'string' &&
|
|
80
|
+
(0, NativeEditorResultNormalization_1.nativeEditorV2U32)(value.docPos) != null &&
|
|
81
|
+
(value.attrs === undefined || (0, NativeEditorResultNormalization_1.isPlainRecord)(value.attrs)) &&
|
|
82
|
+
(value.mentionTheme === undefined || (0, EditorMentionThemeValidation_1.validEditorMentionTheme)(value.mentionTheme)));
|
|
83
|
+
case 'opaqueBlockAtom':
|
|
84
|
+
return ((0, NativeEditorResultNormalization_1.hasOnlyOwnKeys)(value, ['type', 'nodeType', 'label', 'docPos', 'attrs']) &&
|
|
85
|
+
typeof value.nodeType === 'string' &&
|
|
86
|
+
typeof value.label === 'string' &&
|
|
87
|
+
(0, NativeEditorResultNormalization_1.nativeEditorV2U32)(value.docPos) != null &&
|
|
88
|
+
(value.attrs === undefined || (0, NativeEditorResultNormalization_1.isPlainRecord)(value.attrs)));
|
|
89
|
+
}
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
function normalizeRenderBlocks(value) {
|
|
93
|
+
if (!Array.isArray(value))
|
|
94
|
+
return null;
|
|
95
|
+
return value.every((block) => Array.isArray(block) && block.every((element) => validRenderElement(element)))
|
|
96
|
+
? value
|
|
97
|
+
: null;
|
|
98
|
+
}
|
|
99
|
+
function normalizeRenderPatch(value) {
|
|
100
|
+
if (value === null)
|
|
101
|
+
return null;
|
|
102
|
+
if (!(0, NativeEditorResultNormalization_1.isPlainRecord)(value) ||
|
|
103
|
+
!(0, NativeEditorResultNormalization_1.hasExactOwnKeys)(value, [
|
|
104
|
+
'baseDocumentVersion',
|
|
105
|
+
'startIndex',
|
|
106
|
+
'deleteCount',
|
|
107
|
+
'renderBlocks',
|
|
108
|
+
])) {
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
const renderBlocks = normalizeRenderBlocks(value.renderBlocks);
|
|
112
|
+
const baseDocumentVersion = (0, NativeEditorResultNormalization_1.normalizeNativeEditorV2DecimalId)(value.baseDocumentVersion);
|
|
113
|
+
const startIndex = (0, NativeEditorResultNormalization_1.nativeEditorV2U32)(value.startIndex);
|
|
114
|
+
const deleteCount = (0, NativeEditorResultNormalization_1.nativeEditorV2U32)(value.deleteCount);
|
|
115
|
+
if (renderBlocks == null ||
|
|
116
|
+
baseDocumentVersion == null ||
|
|
117
|
+
startIndex == null ||
|
|
118
|
+
deleteCount == null) {
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
return { baseDocumentVersion, startIndex, deleteCount, renderBlocks };
|
|
122
|
+
}
|
|
123
|
+
function normalizeRenderSelection(value) {
|
|
124
|
+
if (!(0, NativeEditorResultNormalization_1.isPlainRecord)(value))
|
|
125
|
+
return null;
|
|
126
|
+
if (value.type === 'all')
|
|
127
|
+
return (0, NativeEditorResultNormalization_1.hasExactOwnKeys)(value, ['type']) ? { type: 'all' } : null;
|
|
128
|
+
if (value.type === 'text') {
|
|
129
|
+
if (!(0, NativeEditorResultNormalization_1.hasExactOwnKeys)(value, ['type', 'anchor', 'head', 'anchorScalar', 'headScalar'])) {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
const anchor = (0, NativeEditorResultNormalization_1.nativeEditorV2U32)(value.anchor);
|
|
133
|
+
const head = (0, NativeEditorResultNormalization_1.nativeEditorV2U32)(value.head);
|
|
134
|
+
const anchorScalar = (0, NativeEditorResultNormalization_1.nativeEditorV2U32)(value.anchorScalar);
|
|
135
|
+
const headScalar = (0, NativeEditorResultNormalization_1.nativeEditorV2U32)(value.headScalar);
|
|
136
|
+
if (anchor == null || head == null || anchorScalar == null || headScalar == null)
|
|
137
|
+
return null;
|
|
138
|
+
return { type: 'text', anchor, head, anchorScalar, headScalar };
|
|
139
|
+
}
|
|
140
|
+
if (value.type === 'node') {
|
|
141
|
+
if (!(0, NativeEditorResultNormalization_1.hasExactOwnKeys)(value, ['type', 'pos', 'posScalar']))
|
|
142
|
+
return null;
|
|
143
|
+
const pos = (0, NativeEditorResultNormalization_1.nativeEditorV2U32)(value.pos);
|
|
144
|
+
const posScalar = (0, NativeEditorResultNormalization_1.nativeEditorV2U32)(value.posScalar);
|
|
145
|
+
if (pos == null || posScalar == null)
|
|
146
|
+
return null;
|
|
147
|
+
return { type: 'node', pos, posScalar };
|
|
148
|
+
}
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
function normalizeRenderActiveState(value) {
|
|
152
|
+
if (!(0, NativeEditorResultNormalization_1.isPlainRecord)(value))
|
|
153
|
+
return null;
|
|
154
|
+
if (!(0, NativeEditorResultNormalization_1.hasExactOwnKeys)(value, [
|
|
155
|
+
'marks',
|
|
156
|
+
'markAttrs',
|
|
157
|
+
'nodes',
|
|
158
|
+
'commands',
|
|
159
|
+
'allowedMarks',
|
|
160
|
+
'insertableNodes',
|
|
161
|
+
]) ||
|
|
162
|
+
!(0, NativeEditorResultNormalization_1.booleanRecord)(value.marks) ||
|
|
163
|
+
!(0, NativeEditorResultNormalization_1.isPlainRecord)(value.markAttrs) ||
|
|
164
|
+
!Object.values(value.markAttrs).every(NativeEditorResultNormalization_1.isPlainRecord) ||
|
|
165
|
+
!(0, NativeEditorResultNormalization_1.booleanRecord)(value.nodes) ||
|
|
166
|
+
!(0, NativeEditorResultNormalization_1.booleanRecord)(value.commands) ||
|
|
167
|
+
!(0, NativeEditorResultNormalization_1.stringArray)(value.allowedMarks) ||
|
|
168
|
+
!(0, NativeEditorResultNormalization_1.stringArray)(value.insertableNodes)) {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
return value;
|
|
172
|
+
}
|
|
173
|
+
function normalizeRenderHistoryState(value) {
|
|
174
|
+
if (!(0, NativeEditorResultNormalization_1.isPlainRecord)(value) || !(0, NativeEditorResultNormalization_1.hasExactOwnKeys)(value, ['canUndo', 'canRedo']))
|
|
175
|
+
return null;
|
|
176
|
+
const canUndo = (0, NativeEditorResultNormalization_1.optionalBoolean)(value.canUndo);
|
|
177
|
+
const canRedo = (0, NativeEditorResultNormalization_1.optionalBoolean)(value.canRedo);
|
|
178
|
+
return canUndo == null || canRedo == null ? null : { canUndo, canRedo };
|
|
179
|
+
}
|
|
180
|
+
function deepFreezeV2Value(value) {
|
|
181
|
+
if (value != null && typeof value === 'object' && !Object.isFrozen(value)) {
|
|
182
|
+
for (const child of Object.values(value)) {
|
|
183
|
+
deepFreezeV2Value(child);
|
|
184
|
+
}
|
|
185
|
+
Object.freeze(value);
|
|
186
|
+
}
|
|
187
|
+
return value;
|
|
188
|
+
}
|
|
189
|
+
/** Validate and freeze the one complete render/state snapshot. */
|
|
190
|
+
function normalizeNativeEditorV2RenderUpdateValue(value) {
|
|
191
|
+
const parsed = (0, NativeEditorResultNormalization_1.parseNativeEditorV2JsonValue)(value);
|
|
192
|
+
if (!(0, NativeEditorResultNormalization_1.isPlainRecord)(parsed))
|
|
193
|
+
return null;
|
|
194
|
+
if (!(0, NativeEditorResultNormalization_1.hasExactOwnKeys)(parsed, [
|
|
195
|
+
'renderBlocks',
|
|
196
|
+
'renderPatch',
|
|
197
|
+
'selection',
|
|
198
|
+
'activeState',
|
|
199
|
+
'historyState',
|
|
200
|
+
'documentVersion',
|
|
201
|
+
'stateRevision',
|
|
202
|
+
'scalarLength',
|
|
203
|
+
'documentIsEmpty',
|
|
204
|
+
])) {
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
const renderBlocks = parsed.renderBlocks === null ? null : normalizeRenderBlocks(parsed.renderBlocks);
|
|
208
|
+
const renderPatch = normalizeRenderPatch(parsed.renderPatch);
|
|
209
|
+
const selection = normalizeRenderSelection(parsed.selection);
|
|
210
|
+
const activeState = normalizeRenderActiveState(parsed.activeState);
|
|
211
|
+
const historyState = normalizeRenderHistoryState(parsed.historyState);
|
|
212
|
+
const documentVersion = (0, NativeEditorResultNormalization_1.normalizeRevisionField)(parsed, 'documentVersion');
|
|
213
|
+
const stateRevision = (0, NativeEditorResultNormalization_1.normalizeRevisionField)(parsed, 'stateRevision');
|
|
214
|
+
const scalarLength = (0, NativeEditorResultNormalization_1.nativeEditorV2U32)(parsed.scalarLength);
|
|
215
|
+
const documentIsEmpty = parsed.documentIsEmpty;
|
|
216
|
+
if (renderPatch === undefined ||
|
|
217
|
+
selection == null ||
|
|
218
|
+
activeState == null ||
|
|
219
|
+
historyState == null ||
|
|
220
|
+
documentVersion == null ||
|
|
221
|
+
stateRevision == null ||
|
|
222
|
+
scalarLength == null ||
|
|
223
|
+
typeof documentIsEmpty !== 'boolean') {
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
let renderPayload;
|
|
227
|
+
if (renderBlocks == null) {
|
|
228
|
+
if (parsed.renderBlocks !== null || renderPatch == null)
|
|
229
|
+
return null;
|
|
230
|
+
renderPayload = { renderBlocks: null, renderPatch };
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
if (renderPatch !== null)
|
|
234
|
+
return null;
|
|
235
|
+
renderPayload = { renderBlocks, renderPatch: null };
|
|
236
|
+
}
|
|
237
|
+
return deepFreezeV2Value({
|
|
238
|
+
...renderPayload,
|
|
239
|
+
selection,
|
|
240
|
+
activeState,
|
|
241
|
+
historyState,
|
|
242
|
+
documentVersion,
|
|
243
|
+
stateRevision,
|
|
244
|
+
scalarLength,
|
|
245
|
+
documentIsEmpty,
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
function normalizeNativeEditorV2DocumentJsonValue(value) {
|
|
249
|
+
const parsed = (0, NativeEditorResultNormalization_1.parseNativeEditorV2JsonValue)(value);
|
|
250
|
+
return (0, NativeEditorResultNormalization_1.isPlainRecord)(parsed) ? parsed : null;
|
|
251
|
+
}
|
|
252
|
+
function normalizeNativeEditorV2ContentSnapshotValue(value) {
|
|
253
|
+
const parsed = (0, NativeEditorResultNormalization_1.parseNativeEditorV2JsonValue)(value);
|
|
254
|
+
if (!(0, NativeEditorResultNormalization_1.isPlainRecord)(parsed) || typeof parsed.html !== 'string' || !(0, NativeEditorResultNormalization_1.isPlainRecord)(parsed.json)) {
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
return { html: parsed.html, json: parsed.json };
|
|
258
|
+
}
|
|
259
|
+
/** The snapshot export record arrives as direct fields (JSON + bytes), not a JSON string. */
|
|
260
|
+
function normalizeNativeEditorV2SnapshotExportValue(value) {
|
|
261
|
+
if (!(0, NativeEditorResultNormalization_1.isPlainRecord)(value) || typeof value.metadataJson !== 'string')
|
|
262
|
+
return null;
|
|
263
|
+
const encodedState = (0, NativeEditorResultNormalization_1.normalizeNativeEditorV2Bytes)(value.encodedState);
|
|
264
|
+
if (encodedState == null)
|
|
265
|
+
return null;
|
|
266
|
+
return { metadataJson: value.metadataJson, encodedState };
|
|
267
|
+
}
|
|
268
|
+
function normalizeNativeEditorV2CreateValue(value) {
|
|
269
|
+
const parsed = (0, NativeEditorResultNormalization_1.parseNativeEditorV2JsonValue)(value);
|
|
270
|
+
if (!(0, NativeEditorResultNormalization_1.isPlainRecord)(parsed))
|
|
271
|
+
return null;
|
|
272
|
+
const editorId = (0, NativeEditorResultNormalization_1.normalizeNativeEditorV2DecimalId)(parsed.editorId);
|
|
273
|
+
return editorId == null ? null : { editorId };
|
|
274
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { NativeEditorEngineBoundaryError, NativeEditorNonRetryableError } from './NativeEditorBoundaryError';
|
|
2
|
+
import { type NativeEditorResult } from './NativeEditorNativeModule';
|
|
3
|
+
import { type RenderMark } from './NativeEditorTypes';
|
|
4
|
+
import { type NativeEditorPeerInfo } from './NativeEditorCollaborationTransport';
|
|
5
|
+
export declare function isPlainRecord(value: unknown): value is Record<string, unknown>;
|
|
6
|
+
/**
|
|
7
|
+
* Validate a raw v2 result record: exactly one of value/error, every error
|
|
8
|
+
* field type, every domain/code string, and the caller-supplied value
|
|
9
|
+
* normalizer. Returns null for any contract violation; the imperative layer
|
|
10
|
+
* turns that into the non-retryable FFI_RESULT_INVALID error.
|
|
11
|
+
*/
|
|
12
|
+
export declare function normalizeNativeEditorV2Result<T>(raw: unknown, normalizeValue: (value: unknown) => T | null): NativeEditorResult<T> | null;
|
|
13
|
+
/** Parse a JSON-string result value; anything else is a contract violation. */
|
|
14
|
+
export declare function parseNativeEditorV2JsonValue(value: unknown): unknown | null;
|
|
15
|
+
/**
|
|
16
|
+
* Validate a direct binary result value. JSON number arrays are rejected on
|
|
17
|
+
* purpose: the frozen v2 contract moves bytes as bytes.
|
|
18
|
+
*/
|
|
19
|
+
export declare function normalizeNativeEditorV2Bytes(value: unknown): Uint8Array | null;
|
|
20
|
+
/** FfiUnitResult successes are exactly `true`; anything else is invalid. */
|
|
21
|
+
export declare function normalizeNativeEditorV2Unit(value: unknown): true | null;
|
|
22
|
+
/**
|
|
23
|
+
* Normalize a request/revision identifier to its canonical decimal string.
|
|
24
|
+
* V2 never accepts numeric compatibility values: JavaScript numbers cannot
|
|
25
|
+
* represent the complete Rust u64 domain.
|
|
26
|
+
*/
|
|
27
|
+
export declare function normalizeNativeEditorV2DecimalId(value: unknown): string | null;
|
|
28
|
+
export declare function normalizeRevisionField(record: Record<string, unknown>, field: string): string | null;
|
|
29
|
+
export declare function nativeEditorV2U32(value: unknown): number | null;
|
|
30
|
+
/** Require one exact JavaScript/platform u32 value at the v2 boundary. */
|
|
31
|
+
export declare function requireNativeEditorV2U32(value: unknown, field: string): number;
|
|
32
|
+
export declare function optionalBoolean(value: unknown): boolean | null;
|
|
33
|
+
export declare const V2_DOCUMENT_STATES: readonly ["LocalReady", "AwaitRemote", "RoomReady"];
|
|
34
|
+
/**
|
|
35
|
+
* Readiness of the engine document. `AwaitRemote` is a room document still
|
|
36
|
+
* waiting for the server's copy: content getters return empty values and the
|
|
37
|
+
* view renders nothing until it promotes to `RoomReady`.
|
|
38
|
+
*/
|
|
39
|
+
export type NativeEditorDocumentState = (typeof V2_DOCUMENT_STATES)[number];
|
|
40
|
+
export declare const V2_TRANSPORT_STATES: readonly ["Detached", "Disconnected", "Connecting", "Handshaking", "Synchronized", "Incompatible", "Destroying", "Destroyed"];
|
|
41
|
+
/** Raw transport lifecycle. `YjsTransportStatus` is the friendlier projection of it. */
|
|
42
|
+
export type NativeEditorTransportState = (typeof V2_TRANSPORT_STATES)[number];
|
|
43
|
+
export declare const V2_RENDER_STATES: readonly ["Loading", "Ready"];
|
|
44
|
+
/** Whether the engine has a render snapshot to draw. */
|
|
45
|
+
export type NativeEditorRenderState = (typeof V2_RENDER_STATES)[number];
|
|
46
|
+
export declare const V2_DOCUMENT_ORIGINS: readonly ["nativeView", "jsApi", "remoteCollaboration", "history", "restore", "import"];
|
|
47
|
+
export type NativeEditorDocumentOrigin = (typeof V2_DOCUMENT_ORIGINS)[number];
|
|
48
|
+
export declare function whitelisted<T extends string>(value: unknown, allowed: readonly T[]): T | null;
|
|
49
|
+
/** The engine's own account of a session: readiness, revisions, and history. */
|
|
50
|
+
export interface NativeEditorState {
|
|
51
|
+
documentState: NativeEditorDocumentState;
|
|
52
|
+
transportState: NativeEditorTransportState;
|
|
53
|
+
renderState: NativeEditorRenderState;
|
|
54
|
+
/** Decimal-string revision advancing on every document change. */
|
|
55
|
+
documentRevision: string;
|
|
56
|
+
/** Trusted origin of the transaction that produced documentRevision. */
|
|
57
|
+
documentOrigin: NativeEditorDocumentOrigin;
|
|
58
|
+
/** Decimal-string revision advancing on every state change, document or not. */
|
|
59
|
+
stateRevision: string;
|
|
60
|
+
canUndo: boolean;
|
|
61
|
+
canRedo: boolean;
|
|
62
|
+
}
|
|
63
|
+
export declare function normalizeNativeEditorV2StateValue(value: unknown): NativeEditorState | null;
|
|
64
|
+
export type NativeEditorMutationOutcome = {
|
|
65
|
+
type: 'transaction';
|
|
66
|
+
changed: boolean;
|
|
67
|
+
documentRevision: string;
|
|
68
|
+
stateRevision: string;
|
|
69
|
+
canUndo: boolean;
|
|
70
|
+
canRedo: boolean;
|
|
71
|
+
} | {
|
|
72
|
+
type: 'notApplicable';
|
|
73
|
+
} | {
|
|
74
|
+
type: 'replacement';
|
|
75
|
+
changed: boolean;
|
|
76
|
+
documentRevision: string;
|
|
77
|
+
};
|
|
78
|
+
export declare function normalizeNativeEditorV2MutationOutcomeValue(value: unknown): NativeEditorMutationOutcome | null;
|
|
79
|
+
export interface NativeEditorCommitInfo {
|
|
80
|
+
changed: boolean;
|
|
81
|
+
documentRevision: string;
|
|
82
|
+
}
|
|
83
|
+
export declare function normalizeNativeEditorV2CommitValue(value: unknown): NativeEditorCommitInfo | null;
|
|
84
|
+
export declare function normalizeNativeEditorV2ChangedValue(value: unknown): boolean | null;
|
|
85
|
+
export declare function normalizeNativeEditorV2HtmlValue(value: unknown): string | null;
|
|
86
|
+
export declare const RENDER_ELEMENT_TYPES: Set<"textRun" | "blockStart" | "blockEnd" | "voidInline" | "voidBlock" | "opaqueInlineAtom" | "opaqueBlockAtom">;
|
|
87
|
+
export declare function hasExactOwnKeys(record: Record<string, unknown>, expected: readonly string[]): boolean;
|
|
88
|
+
export declare function hasOnlyOwnKeys(record: Record<string, unknown>, allowed: readonly string[]): boolean;
|
|
89
|
+
export declare function booleanRecord(value: unknown): value is Record<string, boolean>;
|
|
90
|
+
export declare function stringArray(value: unknown): value is string[];
|
|
91
|
+
export declare function validJsonValue(value: unknown): boolean;
|
|
92
|
+
export declare function validRenderMark(value: unknown): value is RenderMark;
|
|
93
|
+
export declare function normalizeNativeEditorV2PeersValue(value: unknown): NativeEditorPeerInfo[] | null;
|
|
94
|
+
export declare const REJECTED_V2_RECORD_PREVIEW_CHARS = 4000;
|
|
95
|
+
/** Dev-only preview of a rejected boundary record, bounded so a large document never floods the log. */
|
|
96
|
+
export declare function describeRejectedV2Record(raw: unknown): string;
|
|
97
|
+
export declare function invalidV2ResultError(): NativeEditorNonRetryableError;
|
|
98
|
+
export declare function destroyedHandleError(): NativeEditorNonRetryableError;
|
|
99
|
+
export declare function invalidV2RequestError(message: string): NativeEditorEngineBoundaryError;
|
|
100
|
+
/**
|
|
101
|
+
* Unwrap a raw v2 result record on the imperative path: typed per-domain
|
|
102
|
+
* throws for recoverable engine errors, the distinct non-retryable class for
|
|
103
|
+
* ENGINE_INVARIANT_FAILED / lifecycle-destroyed states and for malformed
|
|
104
|
+
* records (a bridge contract violation can never succeed on retry).
|
|
105
|
+
*/
|
|
106
|
+
export declare function unwrapNativeEditorV2Result<T>(raw: unknown, normalizeValue: (value: unknown) => T | null): T;
|
|
107
|
+
export declare function requireV2DecimalId(value: string, field: string): string;
|
|
108
|
+
export declare function requireV2Bytes(value: unknown, field: string): Uint8Array;
|