@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,334 @@
|
|
|
1
|
+
#include "reactnativeproseeditor.h"
|
|
2
|
+
|
|
3
|
+
#include <fbjni/fbjni.h>
|
|
4
|
+
#include <folly/dynamic.h>
|
|
5
|
+
#include <limits>
|
|
6
|
+
#include <memory>
|
|
7
|
+
#include <mutex>
|
|
8
|
+
#include <optional>
|
|
9
|
+
#include <string>
|
|
10
|
+
#include <react/jni/ReadableNativeMap.h>
|
|
11
|
+
#include <react/renderer/core/conversions.h>
|
|
12
|
+
|
|
13
|
+
using namespace facebook::jni;
|
|
14
|
+
|
|
15
|
+
namespace facebook::react {
|
|
16
|
+
|
|
17
|
+
namespace {
|
|
18
|
+
|
|
19
|
+
folly::dynamic optionalStringToDynamic(
|
|
20
|
+
const std::optional<std::string>& value) {
|
|
21
|
+
return value ? folly::dynamic(*value) : folly::dynamic(nullptr);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
folly::dynamic toDynamic(const PreparedProseViewerProps& props) {
|
|
25
|
+
// The generated component props are deliberately copied into a ReadableMap
|
|
26
|
+
// for FabricUIManager.measure; the Java manager is the only Android layout
|
|
27
|
+
// boundary and owns DIP-to-pixel normalization.
|
|
28
|
+
return folly::dynamic::object
|
|
29
|
+
("sourceKind", props.sourceKind == PreparedProseViewerSourceKind::Html ? "html" : "json")
|
|
30
|
+
("source", props.source)
|
|
31
|
+
("configJson", props.configJson)
|
|
32
|
+
("themeJson", optionalStringToDynamic(props.themeJson))
|
|
33
|
+
("imagePolicyJson", optionalStringToDynamic(props.imagePolicyJson))
|
|
34
|
+
("imagesEnabled", props.imagesEnabled)
|
|
35
|
+
("collapsesWhenEmpty", props.collapsesWhenEmpty)
|
|
36
|
+
("enableLinkTaps", props.enableLinkTaps)
|
|
37
|
+
("fontEnvironmentRevision", props.fontEnvironmentRevision);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
folly::dynamic toState(
|
|
41
|
+
uint64_t attachmentRevision,
|
|
42
|
+
uint64_t nativeFontRevision,
|
|
43
|
+
double nativeFontScale,
|
|
44
|
+
uint64_t leaseHandle) {
|
|
45
|
+
return folly::dynamic::object
|
|
46
|
+
("attachmentRevision", static_cast<int64_t>(attachmentRevision))
|
|
47
|
+
("nativeFontRevision", static_cast<int64_t>(nativeFontRevision))
|
|
48
|
+
("nativeFontScale", nativeFontScale)
|
|
49
|
+
("leaseHandle", std::to_string(static_cast<int64_t>(leaseHandle)));
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Each C++ state-family owns one bridge while it is live. Terminal callbacks
|
|
53
|
+
// can run on the final C++ state release rather than a Java-created thread, so
|
|
54
|
+
// this must retain a JNI global reference instead of the local class lookup
|
|
55
|
+
// that created it. The bridge owns no state-family object, avoiding a cycle.
|
|
56
|
+
class AndroidLeaseLifecycleBridge final {
|
|
57
|
+
public:
|
|
58
|
+
static AndroidLeaseLifecycleBridge& processLifetime() {
|
|
59
|
+
// Intentionally process-lifetime: VM teardown can occur from an
|
|
60
|
+
// unattached native thread, where destroying a JNI global is unsafe.
|
|
61
|
+
static std::mutex mutex;
|
|
62
|
+
static AndroidLeaseLifecycleBridge* bridge = nullptr;
|
|
63
|
+
std::lock_guard<std::mutex> lock(mutex);
|
|
64
|
+
if (!bridge) {
|
|
65
|
+
bridge = new AndroidLeaseLifecycleBridge(
|
|
66
|
+
facebook::jni::make_global(facebook::jni::findClassStatic(
|
|
67
|
+
"com/apollohg/editor/viewer/FabricLeaseHandleBridge")));
|
|
68
|
+
}
|
|
69
|
+
return *bridge;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
explicit AndroidLeaseLifecycleBridge(
|
|
73
|
+
facebook::jni::global_ref<facebook::jni::JClass> bridgeClass)
|
|
74
|
+
: bridgeClass_(std::move(bridgeClass)),
|
|
75
|
+
registerLease_(bridgeClass_->getStaticMethod<void(jint, jint, jlong)>(
|
|
76
|
+
"registerNativeLease")),
|
|
77
|
+
finalizeLease_(bridgeClass_->getStaticMethod<void(jint, jint, jlong)>(
|
|
78
|
+
"finalizeNativeLease")),
|
|
79
|
+
beginNativeMeasure_(
|
|
80
|
+
bridgeClass_->getStaticMethod<void(jlong)>("beginNativeMeasure")),
|
|
81
|
+
beginNativeFinalLayout_(bridgeClass_->getStaticMethod<void(jlong, jint, jint)>(
|
|
82
|
+
"beginNativeFinalLayout")),
|
|
83
|
+
endNativeMeasure_(
|
|
84
|
+
bridgeClass_->getStaticMethod<void()>("endNativeMeasure")) {}
|
|
85
|
+
|
|
86
|
+
void registerLease(SurfaceId surfaceId, Tag componentTag, uint64_t leaseHandle) const {
|
|
87
|
+
registerLease_(bridgeClass_, static_cast<jint>(surfaceId),
|
|
88
|
+
static_cast<jint>(componentTag),
|
|
89
|
+
static_cast<jlong>(leaseHandle));
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
void finalizeLease(SurfaceId surfaceId, Tag componentTag, uint64_t leaseHandle) const {
|
|
93
|
+
finalizeLease_(bridgeClass_, static_cast<jint>(surfaceId),
|
|
94
|
+
static_cast<jint>(componentTag),
|
|
95
|
+
static_cast<jlong>(leaseHandle));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
void beginNativeMeasure(uint64_t leaseHandle) const {
|
|
99
|
+
beginNativeMeasure_(bridgeClass_, static_cast<jlong>(leaseHandle));
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
void beginNativeFinalLayout(
|
|
103
|
+
uint64_t leaseHandle,
|
|
104
|
+
int32_t contentOriginXPx,
|
|
105
|
+
int32_t contentOriginYPx) const {
|
|
106
|
+
beginNativeFinalLayout_(
|
|
107
|
+
bridgeClass_,
|
|
108
|
+
static_cast<jlong>(leaseHandle),
|
|
109
|
+
static_cast<jint>(contentOriginXPx),
|
|
110
|
+
static_cast<jint>(contentOriginYPx));
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
void endNativeMeasure() const {
|
|
114
|
+
endNativeMeasure_(bridgeClass_);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
private:
|
|
118
|
+
facebook::jni::global_ref<facebook::jni::JClass> bridgeClass_;
|
|
119
|
+
facebook::jni::JStaticMethod<void(jint, jint, jlong)> registerLease_;
|
|
120
|
+
facebook::jni::JStaticMethod<void(jint, jint, jlong)> finalizeLease_;
|
|
121
|
+
facebook::jni::JStaticMethod<void(jlong)> beginNativeMeasure_;
|
|
122
|
+
facebook::jni::JStaticMethod<void(jlong, jint, jint)> beginNativeFinalLayout_;
|
|
123
|
+
facebook::jni::JStaticMethod<void()> endNativeMeasure_;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
} // namespace
|
|
127
|
+
|
|
128
|
+
void PreparedProseMeasurementsManager::bindLeaseLifecycle(
|
|
129
|
+
SurfaceId surfaceId,
|
|
130
|
+
Tag componentTag,
|
|
131
|
+
uint64_t leaseHandle,
|
|
132
|
+
const std::shared_ptr<PreparedProseViewerLeaseLifecycle>& leaseLifecycle) const {
|
|
133
|
+
if (leaseHandle == 0 || !leaseLifecycle || !leaseLifecycle->isActive()) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
// Yoga may run on a native worker rather than directly beneath a JNI entry
|
|
137
|
+
// point. ThreadScope gives the one-time class lookup an attached env and
|
|
138
|
+
// caches it for this native call without retaining the thread afterward.
|
|
139
|
+
if (!facebook::jni::Environment::isGlobalJvmAvailable()) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
facebook::jni::ThreadScope threadScope;
|
|
144
|
+
auto& bridge = AndroidLeaseLifecycleBridge::processLifetime();
|
|
145
|
+
bridge.registerLease(surfaceId, componentTag, leaseHandle);
|
|
146
|
+
leaseLifecycle->bindTerminalCleanup([surfaceId, componentTag, leaseHandle] {
|
|
147
|
+
// The class global is intentionally process-lifetime. Runtime-unavailable
|
|
148
|
+
// paths no-op; they never reset or destroy it without an attached env.
|
|
149
|
+
try {
|
|
150
|
+
if (!facebook::jni::Environment::isGlobalJvmAvailable()) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
facebook::jni::ThreadScope threadScope;
|
|
154
|
+
try {
|
|
155
|
+
AndroidLeaseLifecycleBridge::processLifetime().finalizeLease(
|
|
156
|
+
surfaceId, componentTag, leaseHandle);
|
|
157
|
+
} catch (...) {
|
|
158
|
+
// The Java registry may already be gone during runtime teardown.
|
|
159
|
+
}
|
|
160
|
+
} catch (...) {
|
|
161
|
+
// A failed attach means VM teardown is already underway. The process
|
|
162
|
+
// lifetime bridge is deliberately left untouched.
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
} catch (...) {
|
|
166
|
+
// Runtime teardown may race a Yoga worker before it has an attached env.
|
|
167
|
+
// Do not bind a terminal Java callback from a partially destroyed VM.
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
Size PreparedProseMeasurementsManager::measure(
|
|
172
|
+
SurfaceId surfaceId,
|
|
173
|
+
Tag componentTag,
|
|
174
|
+
const PreparedProseViewerProps& props,
|
|
175
|
+
Float effectiveWidth,
|
|
176
|
+
Float /*pointScaleFactor*/,
|
|
177
|
+
uint64_t attachmentRevision,
|
|
178
|
+
uint64_t nativeFontRevision,
|
|
179
|
+
double nativeFontScale,
|
|
180
|
+
int32_t /*userInterfaceStyle*/,
|
|
181
|
+
int32_t /*accessibilityContrast*/,
|
|
182
|
+
uint64_t /*fontEnvironmentRevision*/,
|
|
183
|
+
uint64_t leaseHandle,
|
|
184
|
+
const std::shared_ptr<PreparedProseViewerLeaseLifecycle>& /*leaseLifecycle*/) const {
|
|
185
|
+
// Every object allocation, class lookup, and Java invocation below can run
|
|
186
|
+
// from a Yoga worker. It must live in this one attached scope; binding the
|
|
187
|
+
// lifecycle above is insufficient because its scope has already ended.
|
|
188
|
+
if (!facebook::jni::Environment::isGlobalJvmAvailable()) {
|
|
189
|
+
return {};
|
|
190
|
+
}
|
|
191
|
+
try {
|
|
192
|
+
facebook::jni::ThreadScope threadScope;
|
|
193
|
+
const auto& fabricUIManager =
|
|
194
|
+
contextContainer_->at<jni::global_ref<jobject>>("FabricUIManager");
|
|
195
|
+
static auto measure = facebook::jni::findClassStatic(
|
|
196
|
+
"com/facebook/react/fabric/FabricUIManager")
|
|
197
|
+
->getMethod<jlong(
|
|
198
|
+
jint,
|
|
199
|
+
jstring,
|
|
200
|
+
ReadableMap::javaobject,
|
|
201
|
+
ReadableMap::javaobject,
|
|
202
|
+
ReadableMap::javaobject,
|
|
203
|
+
jfloat,
|
|
204
|
+
jfloat,
|
|
205
|
+
jfloat,
|
|
206
|
+
jfloat)>("measure");
|
|
207
|
+
auto& leaseBridge = AndroidLeaseLifecycleBridge::processLifetime();
|
|
208
|
+
folly::dynamic localData = folly::dynamic::object
|
|
209
|
+
("surfaceId", static_cast<int64_t>(surfaceId))
|
|
210
|
+
("componentTag", static_cast<int64_t>(componentTag))
|
|
211
|
+
("leaseHandle", std::to_string(static_cast<int64_t>(leaseHandle)));
|
|
212
|
+
auto propsDynamic = toDynamic(props);
|
|
213
|
+
auto stateDynamic = toState(
|
|
214
|
+
attachmentRevision,
|
|
215
|
+
nativeFontRevision,
|
|
216
|
+
nativeFontScale,
|
|
217
|
+
leaseHandle);
|
|
218
|
+
const auto localDataNative = ReadableNativeMap::newObjectCxxArgs(localData);
|
|
219
|
+
const auto propsNative = ReadableNativeMap::newObjectCxxArgs(propsDynamic);
|
|
220
|
+
const auto stateNative = ReadableNativeMap::newObjectCxxArgs(stateDynamic);
|
|
221
|
+
const auto localDataMap = make_local(reinterpret_cast<ReadableMap::javaobject>(localDataNative.get()));
|
|
222
|
+
const auto propsMap = make_local(reinterpret_cast<ReadableMap::javaobject>(propsNative.get()));
|
|
223
|
+
const auto stateMap = make_local(reinterpret_cast<ReadableMap::javaobject>(stateNative.get()));
|
|
224
|
+
const auto componentName = make_jstring("PreparedProseViewer");
|
|
225
|
+
const auto width = effectiveWidth;
|
|
226
|
+
leaseBridge.beginNativeMeasure(leaseHandle);
|
|
227
|
+
try {
|
|
228
|
+
const auto result = yogaMeassureToSize(measure(
|
|
229
|
+
fabricUIManager,
|
|
230
|
+
surfaceId,
|
|
231
|
+
componentName.get(),
|
|
232
|
+
localDataMap.get(),
|
|
233
|
+
propsMap.get(),
|
|
234
|
+
stateMap.get(),
|
|
235
|
+
0,
|
|
236
|
+
width,
|
|
237
|
+
0,
|
|
238
|
+
std::numeric_limits<Float>::infinity()));
|
|
239
|
+
leaseBridge.endNativeMeasure();
|
|
240
|
+
return result;
|
|
241
|
+
} catch (...) {
|
|
242
|
+
// Still inside ThreadScope, so this is the only safe place to clear the
|
|
243
|
+
// Java thread-local handoff after FabricUIManager.measure throws.
|
|
244
|
+
leaseBridge.endNativeMeasure();
|
|
245
|
+
return {};
|
|
246
|
+
}
|
|
247
|
+
} catch (...) {
|
|
248
|
+
// JVM shutdown and failed attach are terminal for this synchronous Yoga
|
|
249
|
+
// pass. Returning an empty size is safe; never use a potentially
|
|
250
|
+
// destroyed JNIEnv to try to balance the Java thread-local callback.
|
|
251
|
+
return {};
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
void PreparedProseMeasurementsManager::prepareFinalLayout(
|
|
256
|
+
SurfaceId surfaceId,
|
|
257
|
+
Tag componentTag,
|
|
258
|
+
const PreparedProseViewerProps& props,
|
|
259
|
+
int32_t contentWidthPx,
|
|
260
|
+
int32_t contentOriginXPx,
|
|
261
|
+
int32_t contentOriginYPx,
|
|
262
|
+
Float /*pointScaleFactor*/,
|
|
263
|
+
uint64_t attachmentRevision,
|
|
264
|
+
uint64_t nativeFontRevision,
|
|
265
|
+
double nativeFontScale,
|
|
266
|
+
int32_t /*userInterfaceStyle*/,
|
|
267
|
+
int32_t /*accessibilityContrast*/,
|
|
268
|
+
uint64_t /*fontEnvironmentRevision*/,
|
|
269
|
+
uint64_t leaseHandle,
|
|
270
|
+
const std::shared_ptr<PreparedProseViewerLeaseLifecycle>& /*leaseLifecycle*/) const {
|
|
271
|
+
if (!facebook::jni::Environment::isGlobalJvmAvailable() ||
|
|
272
|
+
leaseHandle == 0) {
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
try {
|
|
276
|
+
facebook::jni::ThreadScope threadScope;
|
|
277
|
+
const auto& fabricUIManager =
|
|
278
|
+
contextContainer_->at<jni::global_ref<jobject>>("FabricUIManager");
|
|
279
|
+
static auto measure = facebook::jni::findClassStatic(
|
|
280
|
+
"com/facebook/react/fabric/FabricUIManager")
|
|
281
|
+
->getMethod<jlong(
|
|
282
|
+
jint,
|
|
283
|
+
jstring,
|
|
284
|
+
ReadableMap::javaobject,
|
|
285
|
+
ReadableMap::javaobject,
|
|
286
|
+
ReadableMap::javaobject,
|
|
287
|
+
jfloat,
|
|
288
|
+
jfloat,
|
|
289
|
+
jfloat,
|
|
290
|
+
jfloat)>("measure");
|
|
291
|
+
folly::dynamic localData = folly::dynamic::object
|
|
292
|
+
("surfaceId", static_cast<int64_t>(surfaceId))
|
|
293
|
+
("componentTag", static_cast<int64_t>(componentTag))
|
|
294
|
+
("leaseHandle", std::to_string(static_cast<int64_t>(leaseHandle)));
|
|
295
|
+
auto propsDynamic = toDynamic(props);
|
|
296
|
+
auto stateDynamic = toState(
|
|
297
|
+
attachmentRevision,
|
|
298
|
+
nativeFontRevision,
|
|
299
|
+
nativeFontScale,
|
|
300
|
+
leaseHandle);
|
|
301
|
+
const auto localDataNative = ReadableNativeMap::newObjectCxxArgs(localData);
|
|
302
|
+
const auto propsNative = ReadableNativeMap::newObjectCxxArgs(propsDynamic);
|
|
303
|
+
const auto stateNative = ReadableNativeMap::newObjectCxxArgs(stateDynamic);
|
|
304
|
+
const auto localDataMap = make_local(
|
|
305
|
+
reinterpret_cast<ReadableMap::javaobject>(localDataNative.get()));
|
|
306
|
+
const auto propsMap = make_local(
|
|
307
|
+
reinterpret_cast<ReadableMap::javaobject>(propsNative.get()));
|
|
308
|
+
const auto stateMap = make_local(
|
|
309
|
+
reinterpret_cast<ReadableMap::javaobject>(stateNative.get()));
|
|
310
|
+
const auto componentName = make_jstring("PreparedProseViewer");
|
|
311
|
+
auto& leaseBridge = AndroidLeaseLifecycleBridge::processLifetime();
|
|
312
|
+
leaseBridge.beginNativeFinalLayout(
|
|
313
|
+
leaseHandle, contentOriginXPx, contentOriginYPx);
|
|
314
|
+
try {
|
|
315
|
+
measure(
|
|
316
|
+
fabricUIManager,
|
|
317
|
+
surfaceId,
|
|
318
|
+
componentName.get(),
|
|
319
|
+
localDataMap.get(),
|
|
320
|
+
propsMap.get(),
|
|
321
|
+
stateMap.get(),
|
|
322
|
+
static_cast<jfloat>(contentWidthPx),
|
|
323
|
+
static_cast<jfloat>(contentWidthPx),
|
|
324
|
+
0,
|
|
325
|
+
std::numeric_limits<Float>::infinity());
|
|
326
|
+
leaseBridge.endNativeMeasure();
|
|
327
|
+
} catch (...) {
|
|
328
|
+
leaseBridge.endNativeMeasure();
|
|
329
|
+
}
|
|
330
|
+
} catch (...) {
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
} // namespace facebook::react
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <ReactCommon/JavaTurboModule.h>
|
|
4
|
+
#include <ReactCommon/TurboModule.h>
|
|
5
|
+
#include <jsi/jsi.h>
|
|
6
|
+
#include <react/renderer/components/PreparedProseViewer/PreparedProseViewerComponentDescriptor.h>
|
|
7
|
+
|
|
8
|
+
namespace facebook {
|
|
9
|
+
namespace react {
|
|
10
|
+
|
|
11
|
+
JSI_EXPORT
|
|
12
|
+
std::shared_ptr<TurboModule> ReactNativeProseEditorSpec_ModuleProvider(
|
|
13
|
+
const std::string &moduleName,
|
|
14
|
+
const JavaTurboModule::InitParams ¶ms);
|
|
15
|
+
|
|
16
|
+
} // namespace react
|
|
17
|
+
} // namespace facebook
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
// Narrow Android-only include boundary for the prepared prose Fabric adapter.
|
|
4
|
+
// Keeping this separate prevents generated React Native headers from leaking into
|
|
5
|
+
// the renderer-neutral registry and Kotlin facade.
|
|
6
|
+
#include <react/renderer/components/PreparedProseViewer/PreparedProseMeasurementsManager.h>
|
package/android/src/release/java/com/apollohg/editor/viewer/PreparedProseDrawInstrumentation.kt
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
package com.apollohg.editor.viewer
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Release deliberately inlines only the drawing block. This keeps collector
|
|
5
|
+
* calls and instrumentation branches out of the release drawing hot path.
|
|
6
|
+
*/
|
|
7
|
+
internal inline fun recordPreparedProseDraw(draw: () -> Int) {
|
|
8
|
+
draw()
|
|
9
|
+
}
|
package/app.plugin.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
const path = require('path');
|
|
2
|
+
const { createRequire } = require('module');
|
|
3
|
+
|
|
4
|
+
const pkg = require('./package.json');
|
|
5
|
+
|
|
6
|
+
const PACKAGING_EXCLUDES_PROPERTY = 'android.packagingOptions.excludes';
|
|
7
|
+
const LEGACY_JNA_ABI_EXCLUDES = [
|
|
8
|
+
'**/armeabi/libjnidispatch.so',
|
|
9
|
+
'**/mips/libjnidispatch.so',
|
|
10
|
+
'**/mips64/libjnidispatch.so',
|
|
11
|
+
];
|
|
12
|
+
|
|
13
|
+
function requireExpoConfigPlugins() {
|
|
14
|
+
try {
|
|
15
|
+
return require('expo/config-plugins');
|
|
16
|
+
} catch (error) {
|
|
17
|
+
if (error.code !== 'MODULE_NOT_FOUND') {
|
|
18
|
+
throw error;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const appRequire = createRequire(path.join(process.cwd(), 'package.json'));
|
|
22
|
+
return appRequire('expo/config-plugins');
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function mergeCommaList(value, additions) {
|
|
27
|
+
const values = (value || '')
|
|
28
|
+
.split(',')
|
|
29
|
+
.map((item) => item.trim())
|
|
30
|
+
.filter(Boolean);
|
|
31
|
+
|
|
32
|
+
return Array.from(new Set([...values, ...additions])).join(',');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function withReactNativeProseEditor(config) {
|
|
36
|
+
const { withGradleProperties } = requireExpoConfigPlugins();
|
|
37
|
+
|
|
38
|
+
return withGradleProperties(config, (config) => {
|
|
39
|
+
const existing = config.modResults.find(
|
|
40
|
+
(property) => property.type === 'property' && property.key === PACKAGING_EXCLUDES_PROPERTY
|
|
41
|
+
);
|
|
42
|
+
const value = mergeCommaList(existing && existing.value, LEGACY_JNA_ABI_EXCLUDES);
|
|
43
|
+
|
|
44
|
+
if (existing) {
|
|
45
|
+
existing.value = value;
|
|
46
|
+
} else {
|
|
47
|
+
config.modResults.push({
|
|
48
|
+
type: 'property',
|
|
49
|
+
key: PACKAGING_EXCLUDES_PROPERTY,
|
|
50
|
+
value,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return config;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
module.exports = requireExpoConfigPlugins().createRunOncePlugin(
|
|
59
|
+
withReactNativeProseEditor,
|
|
60
|
+
pkg.name,
|
|
61
|
+
pkg.version
|
|
62
|
+
);
|
package/common/cpp/react/renderer/components/PreparedProseViewer/PreparedProseMeasurementsManager.h
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <cstdint>
|
|
4
|
+
#include <memory>
|
|
5
|
+
|
|
6
|
+
#include <react/renderer/components/ReactNativeProseEditorSpec/Props.h>
|
|
7
|
+
#include <react/renderer/components/PreparedProseViewer/PreparedProseViewerState.h>
|
|
8
|
+
#include <react/renderer/core/LayoutConstraints.h>
|
|
9
|
+
#include <react/renderer/core/ReactPrimitives.h>
|
|
10
|
+
#include <react/utils/ContextContainer.h>
|
|
11
|
+
|
|
12
|
+
namespace facebook::react {
|
|
13
|
+
|
|
14
|
+
class PreparedProseMeasurementsManager {
|
|
15
|
+
public:
|
|
16
|
+
explicit PreparedProseMeasurementsManager(
|
|
17
|
+
const std::shared_ptr<const ContextContainer>& contextContainer)
|
|
18
|
+
: contextContainer_(contextContainer) {}
|
|
19
|
+
|
|
20
|
+
Size measure(
|
|
21
|
+
SurfaceId surfaceId,
|
|
22
|
+
Tag componentTag,
|
|
23
|
+
const PreparedProseViewerProps& props,
|
|
24
|
+
Float effectiveWidth,
|
|
25
|
+
Float pointScaleFactor,
|
|
26
|
+
uint64_t attachmentRevision,
|
|
27
|
+
uint64_t nativeFontRevision,
|
|
28
|
+
double nativeFontScale,
|
|
29
|
+
int32_t userInterfaceStyle,
|
|
30
|
+
int32_t accessibilityContrast,
|
|
31
|
+
uint64_t fontEnvironmentRevision,
|
|
32
|
+
uint64_t leaseHandle,
|
|
33
|
+
const std::shared_ptr<PreparedProseViewerLeaseLifecycle>& leaseLifecycle) const;
|
|
34
|
+
|
|
35
|
+
void prepareFinalLayout(
|
|
36
|
+
SurfaceId surfaceId,
|
|
37
|
+
Tag componentTag,
|
|
38
|
+
const PreparedProseViewerProps& props,
|
|
39
|
+
int32_t contentWidthPx,
|
|
40
|
+
int32_t contentOriginXPx,
|
|
41
|
+
int32_t contentOriginYPx,
|
|
42
|
+
Float pointScaleFactor,
|
|
43
|
+
uint64_t attachmentRevision,
|
|
44
|
+
uint64_t nativeFontRevision,
|
|
45
|
+
double nativeFontScale,
|
|
46
|
+
int32_t userInterfaceStyle,
|
|
47
|
+
int32_t accessibilityContrast,
|
|
48
|
+
uint64_t fontEnvironmentRevision,
|
|
49
|
+
uint64_t leaseHandle,
|
|
50
|
+
const std::shared_ptr<PreparedProseViewerLeaseLifecycle>& leaseLifecycle) const;
|
|
51
|
+
|
|
52
|
+
void bindLeaseLifecycle(
|
|
53
|
+
SurfaceId surfaceId,
|
|
54
|
+
Tag componentTag,
|
|
55
|
+
uint64_t leaseHandle,
|
|
56
|
+
const std::shared_ptr<PreparedProseViewerLeaseLifecycle>& leaseLifecycle) const;
|
|
57
|
+
|
|
58
|
+
private:
|
|
59
|
+
const std::shared_ptr<const ContextContainer> contextContainer_;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
} // namespace facebook::react
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include "PreparedProseMeasurementsManager.h"
|
|
4
|
+
#include "PreparedProseViewerShadowNode.h"
|
|
5
|
+
|
|
6
|
+
#include <react/renderer/core/ConcreteComponentDescriptor.h>
|
|
7
|
+
|
|
8
|
+
namespace facebook::react {
|
|
9
|
+
|
|
10
|
+
class PreparedProseViewerComponentDescriptor final
|
|
11
|
+
: public ConcreteComponentDescriptor<PreparedProseViewerShadowNode> {
|
|
12
|
+
public:
|
|
13
|
+
PreparedProseViewerComponentDescriptor(
|
|
14
|
+
const ComponentDescriptorParameters& parameters)
|
|
15
|
+
: ConcreteComponentDescriptor(parameters),
|
|
16
|
+
measurementsManager_(std::make_shared<PreparedProseMeasurementsManager>(
|
|
17
|
+
contextContainer_)) {}
|
|
18
|
+
|
|
19
|
+
void adopt(ShadowNode& shadowNode) const override {
|
|
20
|
+
ConcreteComponentDescriptor::adopt(shadowNode);
|
|
21
|
+
auto& preparedProseViewerShadowNode =
|
|
22
|
+
static_cast<PreparedProseViewerShadowNode&>(shadowNode);
|
|
23
|
+
preparedProseViewerShadowNode.setMeasurementsManager(measurementsManager_);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
private:
|
|
27
|
+
const std::shared_ptr<PreparedProseMeasurementsManager> measurementsManager_;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
} // namespace facebook::react
|