@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,219 @@
|
|
|
1
|
+
import { processColor } from 'react-native';
|
|
2
|
+
import type {
|
|
3
|
+
EditorStyleMap,
|
|
4
|
+
NormalizedEditorStyle,
|
|
5
|
+
NormalizedEditorTheme,
|
|
6
|
+
} from './EditorStyleSheetTypes';
|
|
7
|
+
|
|
8
|
+
const typography = [
|
|
9
|
+
'fontFamily',
|
|
10
|
+
'fontSize',
|
|
11
|
+
'fontWeight',
|
|
12
|
+
'fontStyle',
|
|
13
|
+
'color',
|
|
14
|
+
'lineHeight',
|
|
15
|
+
'letterSpacing',
|
|
16
|
+
'textDecorationLine',
|
|
17
|
+
'textDecorationColor',
|
|
18
|
+
'textDecorationStyle',
|
|
19
|
+
];
|
|
20
|
+
const sides = ['Top', 'Right', 'Bottom', 'Left'];
|
|
21
|
+
const corners = ['TopLeft', 'TopRight', 'BottomRight', 'BottomLeft'];
|
|
22
|
+
const border = [
|
|
23
|
+
'borderWidth',
|
|
24
|
+
'borderColor',
|
|
25
|
+
'borderStyle',
|
|
26
|
+
'borderRadius',
|
|
27
|
+
...sides.flatMap((side) => [`border${side}Width`, `border${side}Color`]),
|
|
28
|
+
...corners.map((corner) => `border${corner}Radius`),
|
|
29
|
+
];
|
|
30
|
+
const spacing = (prefix: string) => [
|
|
31
|
+
prefix,
|
|
32
|
+
`${prefix}Horizontal`,
|
|
33
|
+
`${prefix}Vertical`,
|
|
34
|
+
...sides.map((side) => `${prefix}${side}`),
|
|
35
|
+
];
|
|
36
|
+
const surface = ['backgroundColor', ...border, ...spacing('padding')];
|
|
37
|
+
const box = [...surface, ...spacing('margin')];
|
|
38
|
+
const block = [...typography, ...box, 'textAlign'];
|
|
39
|
+
const inline = [...typography, 'backgroundColor'];
|
|
40
|
+
const checkbox = [...border, 'backgroundColor', 'checkColor'];
|
|
41
|
+
const fields: Record<keyof EditorStyleMap, readonly string[]> = {
|
|
42
|
+
content: surface,
|
|
43
|
+
text: typography,
|
|
44
|
+
paragraph: block,
|
|
45
|
+
h1: block,
|
|
46
|
+
h2: block,
|
|
47
|
+
h3: block,
|
|
48
|
+
h4: block,
|
|
49
|
+
h5: block,
|
|
50
|
+
h6: block,
|
|
51
|
+
blockquote: block,
|
|
52
|
+
codeBlock: block,
|
|
53
|
+
bulletList: [...block, 'indent', 'baseIndentMultiplier'],
|
|
54
|
+
orderedList: [...block, 'indent', 'baseIndentMultiplier'],
|
|
55
|
+
taskList: [...block, 'indent', 'baseIndentMultiplier'],
|
|
56
|
+
listItem: block,
|
|
57
|
+
taskItem: block,
|
|
58
|
+
listMarker: ['color', 'scale', 'gap', 'ordered'],
|
|
59
|
+
taskCheckbox: [...checkbox, 'size', 'gap', 'checked'],
|
|
60
|
+
horizontalRule: [...border, ...spacing('margin'), 'backgroundColor', 'height'],
|
|
61
|
+
image: [...box, 'resizeMode'],
|
|
62
|
+
link: inline,
|
|
63
|
+
inlineCode: inline,
|
|
64
|
+
bold: inline,
|
|
65
|
+
italic: inline,
|
|
66
|
+
underline: inline,
|
|
67
|
+
strike: inline,
|
|
68
|
+
mention: [...inline, ...border],
|
|
69
|
+
placeholder: typography,
|
|
70
|
+
};
|
|
71
|
+
const enums: Record<string, readonly string[]> = {
|
|
72
|
+
fontStyle: ['normal', 'italic'],
|
|
73
|
+
fontWeight: ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'],
|
|
74
|
+
textAlign: ['auto', 'left', 'right', 'center', 'justify'],
|
|
75
|
+
textDecorationLine: ['none', 'underline', 'line-through', 'underline line-through'],
|
|
76
|
+
textDecorationStyle: ['solid', 'double', 'dotted', 'dashed'],
|
|
77
|
+
borderStyle: ['solid', 'dashed', 'dotted'],
|
|
78
|
+
resizeMode: ['contain', 'cover', 'stretch'],
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
function invalid(path: string, reason: string): never {
|
|
82
|
+
throw new TypeError(`Invalid editor style ${path}: ${reason}`);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function record(value: unknown): value is Record<string, unknown> {
|
|
86
|
+
if (value == null || typeof value !== 'object' || Array.isArray(value)) return false;
|
|
87
|
+
const prototype = Object.getPrototypeOf(value);
|
|
88
|
+
return prototype === Object.prototype || prototype === null;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export function normalizeEditorColor(value: unknown, path: string): string {
|
|
92
|
+
if (typeof value !== 'string') return invalid(path, 'expected a color string');
|
|
93
|
+
const argb = processColor(value);
|
|
94
|
+
if (typeof argb !== 'number') return invalid(path, 'unrecognized color');
|
|
95
|
+
const rgba = ((argb << 8) | (argb >>> 24)) >>> 0;
|
|
96
|
+
return `#${rgba.toString(16).padStart(8, '0')}`;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function orderedMarker(value: unknown, path: string): Record<string, unknown> {
|
|
100
|
+
if (!record(value)) return invalid(path, 'expected an ordered marker object');
|
|
101
|
+
const result: Record<string, unknown> = {};
|
|
102
|
+
for (const [key, entry] of Object.entries(value)) {
|
|
103
|
+
if (key !== 'schemes' && key !== 'suffix')
|
|
104
|
+
invalid(`${path}.${key}`, 'unsupported property');
|
|
105
|
+
if (entry === undefined) continue;
|
|
106
|
+
if (key === 'suffix') {
|
|
107
|
+
if (entry !== '.' && entry !== ')') invalid(`${path}.${key}`, 'expected . or )');
|
|
108
|
+
result[key] = entry;
|
|
109
|
+
} else {
|
|
110
|
+
const schemes = ['decimal', 'lowerAlpha', 'upperAlpha', 'lowerRoman', 'upperRoman'];
|
|
111
|
+
if (
|
|
112
|
+
!Array.isArray(entry) ||
|
|
113
|
+
entry.length === 0 ||
|
|
114
|
+
!entry.every((item) => typeof item === 'string' && schemes.includes(item))
|
|
115
|
+
) {
|
|
116
|
+
invalid(`${path}.${key}`, 'expected a nonempty array of numbering schemes');
|
|
117
|
+
}
|
|
118
|
+
result[key] = [...entry];
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return result;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function property(key: string, value: unknown, path: string): unknown {
|
|
125
|
+
if (value === undefined) return undefined;
|
|
126
|
+
if (key === 'ordered') return orderedMarker(value, path);
|
|
127
|
+
if (key === 'checked') return normalizeStyle(value, checkbox, path);
|
|
128
|
+
if (key === 'color' || key.endsWith('Color')) return normalizeEditorColor(value, path);
|
|
129
|
+
if (key === 'fontFamily') {
|
|
130
|
+
if (typeof value !== 'string' || value.length === 0)
|
|
131
|
+
invalid(path, 'expected a nonempty font family');
|
|
132
|
+
return value;
|
|
133
|
+
}
|
|
134
|
+
if (enums[key]) {
|
|
135
|
+
const candidate = key === 'fontWeight' && typeof value === 'number' ? String(value) : value;
|
|
136
|
+
if (typeof candidate !== 'string' || !enums[key].includes(candidate))
|
|
137
|
+
invalid(path, 'unsupported value');
|
|
138
|
+
return candidate;
|
|
139
|
+
}
|
|
140
|
+
if (typeof value !== 'number' || !Number.isFinite(value))
|
|
141
|
+
invalid(path, 'expected a finite number');
|
|
142
|
+
if (['fontSize', 'lineHeight', 'size', 'scale'].includes(key) && value <= 0)
|
|
143
|
+
invalid(path, 'expected a positive number');
|
|
144
|
+
if (!key.startsWith('margin') && key !== 'letterSpacing' && value < 0)
|
|
145
|
+
invalid(path, 'expected a nonnegative number');
|
|
146
|
+
return value;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function normalizeStyle(
|
|
150
|
+
value: unknown,
|
|
151
|
+
allowed: readonly string[],
|
|
152
|
+
path: string
|
|
153
|
+
): Record<string, unknown> {
|
|
154
|
+
const raw: Record<string, unknown> = {};
|
|
155
|
+
const ancestors = new Set<object>();
|
|
156
|
+
function append(entry: unknown, depth: number): void {
|
|
157
|
+
if (entry === false || entry == null) return;
|
|
158
|
+
if (depth > 64) invalid(path, 'style arrays are nested too deeply');
|
|
159
|
+
if (Array.isArray(entry)) {
|
|
160
|
+
if (ancestors.has(entry)) invalid(path, 'cyclic style array');
|
|
161
|
+
ancestors.add(entry);
|
|
162
|
+
entry.forEach((item) => append(item, depth + 1));
|
|
163
|
+
ancestors.delete(entry);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
if (!record(entry)) invalid(path, 'expected a style object or array');
|
|
167
|
+
for (const [key, field] of Object.entries(entry)) {
|
|
168
|
+
if (!allowed.includes(key)) invalid(`${path}.${key}`, 'unsupported property');
|
|
169
|
+
raw[key] = property(key, field, `${path}.${key}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
append(value, 0);
|
|
173
|
+
const result = Object.fromEntries(
|
|
174
|
+
Object.entries(raw).filter(([, value]) => value !== undefined)
|
|
175
|
+
);
|
|
176
|
+
for (const prefix of ['margin', 'padding']) {
|
|
177
|
+
for (const side of sides) {
|
|
178
|
+
const axis = side === 'Top' || side === 'Bottom' ? 'Vertical' : 'Horizontal';
|
|
179
|
+
const resolved = raw[`${prefix}${side}`] ?? raw[`${prefix}${axis}`] ?? raw[prefix];
|
|
180
|
+
if (resolved !== undefined) result[`${prefix}${side}`] = resolved;
|
|
181
|
+
}
|
|
182
|
+
delete result[prefix];
|
|
183
|
+
delete result[`${prefix}Horizontal`];
|
|
184
|
+
delete result[`${prefix}Vertical`];
|
|
185
|
+
}
|
|
186
|
+
for (const suffix of ['Width', 'Color']) {
|
|
187
|
+
for (const side of sides) {
|
|
188
|
+
const resolved = raw[`border${side}${suffix}`] ?? raw[`border${suffix}`];
|
|
189
|
+
if (resolved !== undefined) result[`border${side}${suffix}`] = resolved;
|
|
190
|
+
}
|
|
191
|
+
delete result[`border${suffix}`];
|
|
192
|
+
}
|
|
193
|
+
for (const corner of corners) {
|
|
194
|
+
const resolved = raw[`border${corner}Radius`] ?? raw.borderRadius;
|
|
195
|
+
if (resolved !== undefined) result[`border${corner}Radius`] = resolved;
|
|
196
|
+
}
|
|
197
|
+
delete result.borderRadius;
|
|
198
|
+
return result;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
export function normalizeEditorTheme(theme: unknown): NormalizedEditorTheme {
|
|
202
|
+
if (!record(theme)) invalid('theme', 'expected a named style map');
|
|
203
|
+
const styles: Partial<Record<keyof EditorStyleMap, NormalizedEditorStyle>> = {};
|
|
204
|
+
const result: NormalizedEditorTheme = { version: 1 };
|
|
205
|
+
for (const [key, value] of Object.entries(theme)) {
|
|
206
|
+
if (key === 'toolbar') {
|
|
207
|
+
if (value !== undefined) {
|
|
208
|
+
if (!record(value)) invalid('toolbar', 'expected toolbar configuration');
|
|
209
|
+
result.toolbar = { ...value };
|
|
210
|
+
}
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
if (!Object.prototype.hasOwnProperty.call(fields, key)) invalid(key, 'unsupported element');
|
|
214
|
+
const style = normalizeStyle(value, fields[key as keyof EditorStyleMap], key);
|
|
215
|
+
if (Object.keys(style).length) styles[key as keyof EditorStyleMap] = style;
|
|
216
|
+
}
|
|
217
|
+
if (Object.keys(styles).length) result.styles = styles;
|
|
218
|
+
return result;
|
|
219
|
+
}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import type { TextStyle } from 'react-native';
|
|
2
|
+
import type { EditorToolbarTheme, EditorFontWeight } from './EditorTheme';
|
|
3
|
+
|
|
4
|
+
export type EditorStyleProp<T> = T | false | null | undefined | readonly EditorStyleProp<T>[];
|
|
5
|
+
|
|
6
|
+
export interface EditorTypographyStyle {
|
|
7
|
+
fontFamily?: string;
|
|
8
|
+
fontSize?: number;
|
|
9
|
+
fontWeight?: EditorFontWeight | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900;
|
|
10
|
+
fontStyle?: 'normal' | 'italic';
|
|
11
|
+
color?: string;
|
|
12
|
+
lineHeight?: number;
|
|
13
|
+
letterSpacing?: number;
|
|
14
|
+
textDecorationLine?: TextStyle['textDecorationLine'];
|
|
15
|
+
textDecorationColor?: string;
|
|
16
|
+
textDecorationStyle?: 'solid' | 'double' | 'dotted' | 'dashed';
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface EditorBorderStyle {
|
|
20
|
+
borderWidth?: number;
|
|
21
|
+
borderColor?: string;
|
|
22
|
+
borderStyle?: 'solid' | 'dashed' | 'dotted';
|
|
23
|
+
borderTopWidth?: number;
|
|
24
|
+
borderRightWidth?: number;
|
|
25
|
+
borderBottomWidth?: number;
|
|
26
|
+
borderLeftWidth?: number;
|
|
27
|
+
borderTopColor?: string;
|
|
28
|
+
borderRightColor?: string;
|
|
29
|
+
borderBottomColor?: string;
|
|
30
|
+
borderLeftColor?: string;
|
|
31
|
+
borderRadius?: number;
|
|
32
|
+
borderTopLeftRadius?: number;
|
|
33
|
+
borderTopRightRadius?: number;
|
|
34
|
+
borderBottomLeftRadius?: number;
|
|
35
|
+
borderBottomRightRadius?: number;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface EditorPaddingStyle {
|
|
39
|
+
padding?: number;
|
|
40
|
+
paddingHorizontal?: number;
|
|
41
|
+
paddingVertical?: number;
|
|
42
|
+
paddingTop?: number;
|
|
43
|
+
paddingRight?: number;
|
|
44
|
+
paddingBottom?: number;
|
|
45
|
+
paddingLeft?: number;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface EditorMarginStyle {
|
|
49
|
+
margin?: number;
|
|
50
|
+
marginHorizontal?: number;
|
|
51
|
+
marginVertical?: number;
|
|
52
|
+
marginTop?: number;
|
|
53
|
+
marginRight?: number;
|
|
54
|
+
marginBottom?: number;
|
|
55
|
+
marginLeft?: number;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface EditorSurfaceStyle extends EditorBorderStyle, EditorPaddingStyle {
|
|
59
|
+
backgroundColor?: string;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface EditorBoxStyle extends EditorSurfaceStyle, EditorMarginStyle {}
|
|
63
|
+
|
|
64
|
+
export interface EditorTextStyle extends EditorTypographyStyle, EditorBoxStyle {
|
|
65
|
+
textAlign?: TextStyle['textAlign'];
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export interface EditorInlineStyle extends EditorTypographyStyle {
|
|
69
|
+
backgroundColor?: string;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export interface EditorImageStyle extends EditorBoxStyle {
|
|
73
|
+
resizeMode?: 'contain' | 'cover' | 'stretch';
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export interface EditorListStyle extends EditorTextStyle {
|
|
77
|
+
indent?: number;
|
|
78
|
+
baseIndentMultiplier?: number;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export type EditorOrderedListNumberingScheme =
|
|
82
|
+
| 'decimal'
|
|
83
|
+
| 'lowerAlpha'
|
|
84
|
+
| 'upperAlpha'
|
|
85
|
+
| 'lowerRoman'
|
|
86
|
+
| 'upperRoman';
|
|
87
|
+
|
|
88
|
+
export interface EditorOrderedListMarkerTheme {
|
|
89
|
+
schemes?: readonly EditorOrderedListNumberingScheme[];
|
|
90
|
+
suffix?: '.' | ')';
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export interface EditorListMarkerStyle {
|
|
94
|
+
color?: string;
|
|
95
|
+
scale?: number;
|
|
96
|
+
gap?: number;
|
|
97
|
+
ordered?: EditorOrderedListMarkerTheme;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export interface EditorCheckboxAppearance extends EditorBorderStyle {
|
|
101
|
+
backgroundColor?: string;
|
|
102
|
+
checkColor?: string;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export interface EditorTaskCheckboxStyle extends EditorCheckboxAppearance {
|
|
106
|
+
size?: number;
|
|
107
|
+
gap?: number;
|
|
108
|
+
checked?: EditorStyleProp<EditorCheckboxAppearance>;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export interface EditorHorizontalRuleStyle extends EditorBorderStyle, EditorMarginStyle {
|
|
112
|
+
backgroundColor?: string;
|
|
113
|
+
height?: number;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export interface EditorMentionStyle extends EditorInlineStyle, EditorBorderStyle {}
|
|
117
|
+
|
|
118
|
+
export interface EditorStyleMap {
|
|
119
|
+
content: EditorSurfaceStyle;
|
|
120
|
+
text: EditorTypographyStyle;
|
|
121
|
+
paragraph: EditorTextStyle;
|
|
122
|
+
h1: EditorTextStyle;
|
|
123
|
+
h2: EditorTextStyle;
|
|
124
|
+
h3: EditorTextStyle;
|
|
125
|
+
h4: EditorTextStyle;
|
|
126
|
+
h5: EditorTextStyle;
|
|
127
|
+
h6: EditorTextStyle;
|
|
128
|
+
blockquote: EditorTextStyle;
|
|
129
|
+
codeBlock: EditorTextStyle;
|
|
130
|
+
bulletList: EditorListStyle;
|
|
131
|
+
orderedList: EditorListStyle;
|
|
132
|
+
taskList: EditorListStyle;
|
|
133
|
+
listItem: EditorTextStyle;
|
|
134
|
+
taskItem: EditorTextStyle;
|
|
135
|
+
listMarker: EditorListMarkerStyle;
|
|
136
|
+
taskCheckbox: EditorTaskCheckboxStyle;
|
|
137
|
+
horizontalRule: EditorHorizontalRuleStyle;
|
|
138
|
+
image: EditorImageStyle;
|
|
139
|
+
link: EditorInlineStyle;
|
|
140
|
+
inlineCode: EditorInlineStyle;
|
|
141
|
+
bold: EditorInlineStyle;
|
|
142
|
+
italic: EditorInlineStyle;
|
|
143
|
+
underline: EditorInlineStyle;
|
|
144
|
+
strike: EditorInlineStyle;
|
|
145
|
+
mention: EditorMentionStyle;
|
|
146
|
+
placeholder: EditorTypographyStyle;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export type EditorTheme = {
|
|
150
|
+
[K in keyof EditorStyleMap]?: EditorStyleProp<EditorStyleMap[K]>;
|
|
151
|
+
} & { toolbar?: EditorToolbarTheme };
|
|
152
|
+
|
|
153
|
+
export type EditorLinkTheme = EditorInlineStyle;
|
|
154
|
+
export type EditorHeadingTheme = Partial<
|
|
155
|
+
Record<'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6', EditorStyleProp<EditorTextStyle>>
|
|
156
|
+
>;
|
|
157
|
+
export type EditorListTheme = EditorListStyle;
|
|
158
|
+
export type EditorHorizontalRuleTheme = EditorHorizontalRuleStyle;
|
|
159
|
+
export type EditorBlockquoteTheme = EditorTextStyle;
|
|
160
|
+
export type EditorCodeBlockTheme = EditorTextStyle;
|
|
161
|
+
|
|
162
|
+
export type NormalizedEditorStyle = Readonly<Record<string, unknown>>;
|
|
163
|
+
export interface NormalizedEditorTheme {
|
|
164
|
+
version: 1;
|
|
165
|
+
styles?: Partial<Record<keyof EditorStyleMap, NormalizedEditorStyle>>;
|
|
166
|
+
toolbar?: EditorToolbarTheme;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
type ExactStyle<T, Shape> = T extends false | null | undefined
|
|
170
|
+
? T
|
|
171
|
+
: T extends readonly unknown[]
|
|
172
|
+
? { [K in keyof T]: ExactStyle<T[K], Shape> }
|
|
173
|
+
: Shape & {
|
|
174
|
+
[K in keyof T]: K extends keyof Shape
|
|
175
|
+
? K extends 'checked'
|
|
176
|
+
? ExactStyle<T[K], EditorCheckboxAppearance>
|
|
177
|
+
: K extends 'ordered'
|
|
178
|
+
? ExactStyle<T[K], EditorOrderedListMarkerTheme>
|
|
179
|
+
: Shape[K]
|
|
180
|
+
: never;
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
export type ExactEditorTheme<T> = {
|
|
184
|
+
[K in keyof T]: K extends keyof EditorStyleMap
|
|
185
|
+
? ExactStyle<T[K], EditorStyleMap[K]>
|
|
186
|
+
: K extends 'toolbar'
|
|
187
|
+
? EditorToolbarTheme
|
|
188
|
+
: never;
|
|
189
|
+
};
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import type { EditorTheme, EditorMentionStyle } from './EditorStyleSheetTypes';
|
|
2
|
+
import { normalizeEditorTheme } from './EditorStyleSheetNormalization';
|
|
3
|
+
import { normalizeEditorMentionTheme } from './EditorMentionThemeNormalization';
|
|
4
|
+
export type {
|
|
5
|
+
EditorTheme,
|
|
6
|
+
EditorTextStyle,
|
|
7
|
+
EditorLinkTheme,
|
|
8
|
+
EditorHeadingTheme,
|
|
9
|
+
EditorListTheme,
|
|
10
|
+
EditorOrderedListNumberingScheme,
|
|
11
|
+
EditorOrderedListMarkerTheme,
|
|
12
|
+
EditorHorizontalRuleTheme,
|
|
13
|
+
EditorBlockquoteTheme,
|
|
14
|
+
EditorCodeBlockTheme,
|
|
15
|
+
} from './EditorStyleSheetTypes';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Font weight accepted by every themed text style. Numeric weights are
|
|
19
|
+
* strings, matching React Native's `fontWeight`.
|
|
20
|
+
*/
|
|
21
|
+
export type EditorFontWeight =
|
|
22
|
+
| 'normal'
|
|
23
|
+
| 'bold'
|
|
24
|
+
| '100'
|
|
25
|
+
| '200'
|
|
26
|
+
| '300'
|
|
27
|
+
| '400'
|
|
28
|
+
| '500'
|
|
29
|
+
| '600'
|
|
30
|
+
| '700'
|
|
31
|
+
| '800'
|
|
32
|
+
| '900';
|
|
33
|
+
|
|
34
|
+
/** Font slant accepted by every themed text style. */
|
|
35
|
+
export type EditorFontStyle = 'normal' | 'italic';
|
|
36
|
+
|
|
37
|
+
/** The mention itself, rendered inline in the document. */
|
|
38
|
+
export interface EditorMentionNodeTheme extends EditorMentionStyle {
|
|
39
|
+
/** @deprecated Use color. Retained for persisted mention themes. */
|
|
40
|
+
textColor?: string;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** A single row in the suggestion list. */
|
|
44
|
+
export interface EditorMentionSuggestionOptionTheme {
|
|
45
|
+
/** Color of the row's primary text (`MentionSuggestion.title`). */
|
|
46
|
+
textColor?: string;
|
|
47
|
+
/** Color of the row's secondary text (`MentionSuggestion.subtitle`). */
|
|
48
|
+
secondaryTextColor?: string;
|
|
49
|
+
/** Fill drawn behind an unhighlighted row. */
|
|
50
|
+
backgroundColor?: string;
|
|
51
|
+
borderColor?: string;
|
|
52
|
+
/** Row border width, in layout units. */
|
|
53
|
+
borderWidth?: number;
|
|
54
|
+
/** Row corner radius, in layout units. */
|
|
55
|
+
borderRadius?: number;
|
|
56
|
+
/** Weight of the row's primary text. */
|
|
57
|
+
fontWeight?: EditorFontWeight;
|
|
58
|
+
/** Fill drawn behind the row under the cursor or pointer. */
|
|
59
|
+
highlightedBackgroundColor?: string;
|
|
60
|
+
/** Primary text color for the row under the cursor or pointer. */
|
|
61
|
+
highlightedTextColor?: string;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** The container behind the suggestion rows. Honored by the JavaScript
|
|
65
|
+
* `EditorToolbar`; the native keyboard toolbar styles rows only. */
|
|
66
|
+
export interface EditorMentionSuggestionsTheme {
|
|
67
|
+
backgroundColor?: string;
|
|
68
|
+
borderColor?: string;
|
|
69
|
+
/** Container border width, in layout units. */
|
|
70
|
+
borderWidth?: number;
|
|
71
|
+
/** Container corner radius, in layout units. */
|
|
72
|
+
borderRadius?: number;
|
|
73
|
+
shadowColor?: string;
|
|
74
|
+
/** Styling for each suggestion row inside the container. */
|
|
75
|
+
option?: EditorMentionSuggestionOptionTheme;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Mention styling. It is configured on the mentions addon
|
|
80
|
+
* through `createMentionsAddon({ theme })`, and can be overridden per mention through
|
|
81
|
+
* `MentionsAddonConfig.resolveTheme`.
|
|
82
|
+
*/
|
|
83
|
+
export interface EditorMentionTheme {
|
|
84
|
+
node?: EditorMentionNodeTheme;
|
|
85
|
+
suggestions?: EditorMentionSuggestionsTheme;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Toolbar chrome style. `'custom'` renders the package's own chrome from
|
|
90
|
+
* this theme; `'native'` adopts the platform keyboard-accessory look, so the
|
|
91
|
+
* platform supplies chrome metrics this theme would otherwise set.
|
|
92
|
+
*/
|
|
93
|
+
export type EditorToolbarAppearance = 'custom' | 'native';
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Toolbar chrome and button colors. Honored by both the JavaScript
|
|
97
|
+
* `EditorToolbar` and the native keyboard toolbar unless a field says
|
|
98
|
+
* otherwise.
|
|
99
|
+
*/
|
|
100
|
+
export interface EditorToolbarTheme {
|
|
101
|
+
/** Chrome style. Defaults to `'custom'`. */
|
|
102
|
+
appearance?: EditorToolbarAppearance;
|
|
103
|
+
/** Toolbar height, in layout units. Defaults to a height that fits the buttons. */
|
|
104
|
+
height?: number;
|
|
105
|
+
backgroundColor?: string;
|
|
106
|
+
borderColor?: string;
|
|
107
|
+
/** Toolbar border width, in layout units. */
|
|
108
|
+
borderWidth?: number;
|
|
109
|
+
/** Toolbar corner radius, in layout units. */
|
|
110
|
+
borderRadius?: number;
|
|
111
|
+
/** Gap above an inline-placed toolbar, in layout units. Defaults to 8.
|
|
112
|
+
* Ignored for `toolbarPlacement="keyboard"`. */
|
|
113
|
+
marginTop?: number;
|
|
114
|
+
/** Whether the JavaScript toolbar draws its top separator line. Defaults to
|
|
115
|
+
* false through `RichTextEditor`, true for a standalone `EditorToolbar`. */
|
|
116
|
+
showTopBorder?: boolean;
|
|
117
|
+
/** Gap between the keyboard and the toolbar, in layout units. Applies to
|
|
118
|
+
* `toolbarPlacement="keyboard"`; the platform default depends on `appearance`. */
|
|
119
|
+
keyboardOffset?: number;
|
|
120
|
+
/** Inset on each side of the keyboard-attached toolbar, in layout units.
|
|
121
|
+
* The platform default depends on `appearance`. */
|
|
122
|
+
horizontalInset?: number;
|
|
123
|
+
/** Color of `separator` toolbar items. */
|
|
124
|
+
separatorColor?: string;
|
|
125
|
+
/** Icon color of an idle button. */
|
|
126
|
+
buttonColor?: string;
|
|
127
|
+
/** Fill drawn behind an idle button. */
|
|
128
|
+
buttonBackgroundColor?: string;
|
|
129
|
+
/** Icon size for toolbar buttons, in layout units. */
|
|
130
|
+
buttonIconSize?: number;
|
|
131
|
+
/** Icon color of a button whose mark or node is active at the selection. */
|
|
132
|
+
buttonActiveColor?: string;
|
|
133
|
+
/** Icon color of a button the current selection cannot apply. */
|
|
134
|
+
buttonDisabledColor?: string;
|
|
135
|
+
/** Fill drawn behind an active button. */
|
|
136
|
+
buttonActiveBackgroundColor?: string;
|
|
137
|
+
/** Fill drawn behind a disabled button. */
|
|
138
|
+
buttonDisabledBackgroundColor?: string;
|
|
139
|
+
/** Button corner radius, in layout units. */
|
|
140
|
+
buttonBorderRadius?: number;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/** Padding between the editor's edges and its content, in layout units. */
|
|
144
|
+
export interface EditorContentInsets {
|
|
145
|
+
top?: number;
|
|
146
|
+
right?: number;
|
|
147
|
+
bottom?: number;
|
|
148
|
+
left?: number;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function stripUndefined(value: unknown): unknown {
|
|
152
|
+
if (Array.isArray(value)) {
|
|
153
|
+
return value.map((item) => stripUndefined(item)).filter((item) => item !== undefined);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (value != null && typeof value === 'object') {
|
|
157
|
+
const entries = Object.entries(value as Record<string, unknown>)
|
|
158
|
+
.map(([key, entryValue]) => [key, stripUndefined(entryValue)] as const)
|
|
159
|
+
.filter(([, entryValue]) => entryValue !== undefined);
|
|
160
|
+
if (entries.length === 0) {
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
return Object.fromEntries(entries);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
if (typeof value === 'number' && !Number.isFinite(value)) {
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
return value;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// Mentions are configured on the mentions addon, not on EditorTheme; native
|
|
174
|
+
// still reads them from the theme payload.
|
|
175
|
+
export function serializeEditorTheme(
|
|
176
|
+
theme?: EditorTheme,
|
|
177
|
+
mentionTheme?: EditorMentionTheme
|
|
178
|
+
): string | undefined {
|
|
179
|
+
const normalized = theme === undefined ? undefined : normalizeEditorTheme(theme);
|
|
180
|
+
const cleanedTheme =
|
|
181
|
+
normalized && (normalized.styles || normalized.toolbar)
|
|
182
|
+
? stripUndefined(normalized)
|
|
183
|
+
: undefined;
|
|
184
|
+
const base =
|
|
185
|
+
cleanedTheme && typeof cleanedTheme === 'object'
|
|
186
|
+
? (cleanedTheme as Record<string, unknown>)
|
|
187
|
+
: undefined;
|
|
188
|
+
const cleanedMentions = mentionTheme
|
|
189
|
+
? stripUndefined(normalizeEditorMentionTheme(mentionTheme))
|
|
190
|
+
: undefined;
|
|
191
|
+
|
|
192
|
+
if (cleanedMentions == null) {
|
|
193
|
+
return base ? JSON.stringify(base) : undefined;
|
|
194
|
+
}
|
|
195
|
+
return JSON.stringify({ version: 1, ...(base ?? {}), mentions: cleanedMentions });
|
|
196
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export {
|
|
2
|
+
type EditorToolbarListType,
|
|
3
|
+
type EditorToolbarHeadingLevel,
|
|
4
|
+
type EditorToolbarCommand,
|
|
5
|
+
type EditorToolbarGroupPresentation,
|
|
6
|
+
type EditorToolbarItemPlacement,
|
|
7
|
+
type EditorToolbarDefaultIconId,
|
|
8
|
+
type EditorToolbarSFSymbolIcon,
|
|
9
|
+
type EditorToolbarMaterialIcon,
|
|
10
|
+
type EditorToolbarIcon,
|
|
11
|
+
type EditorToolbarButtonStyle,
|
|
12
|
+
type EditorToolbarLeafItem,
|
|
13
|
+
type EditorToolbarGroupChildItem,
|
|
14
|
+
type EditorToolbarGroupItem,
|
|
15
|
+
type EditorToolbarItem,
|
|
16
|
+
type EditorToolbarProps,
|
|
17
|
+
} from './EditorToolbarTypes';
|
|
18
|
+
export {
|
|
19
|
+
type EditorToolbarFrame,
|
|
20
|
+
EditorToolbarFrameOwnerProvider,
|
|
21
|
+
isEditorToolbarFocusPreservationActive,
|
|
22
|
+
setActiveEditorToolbarFrameOwnerForEditor,
|
|
23
|
+
useEditorToolbarFrames,
|
|
24
|
+
setEditorToolbarMentionState,
|
|
25
|
+
_setEditorToolbarFrameForTests,
|
|
26
|
+
_resetEditorToolbarFrameRegistryForTests,
|
|
27
|
+
_beginEditorToolbarInteractionForTests,
|
|
28
|
+
_endEditorToolbarInteractionForTests,
|
|
29
|
+
} from './EditorToolbarRegistry';
|
|
30
|
+
export { DEFAULT_EDITOR_TOOLBAR_ITEMS } from './EditorToolbarItems';
|
|
31
|
+
export { EditorToolbar } from './EditorToolbarComponent';
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type EditorToolbarProps } from './EditorToolbarTypes';
|
|
2
|
+
import { useEditorToolbarState } from './useEditorToolbarState';
|
|
3
|
+
import { useEditorToolbarItems } from './useEditorToolbarItems';
|
|
4
|
+
import { useEditorToolbarInteractions } from './useEditorToolbarInteractions';
|
|
5
|
+
import { useEditorToolbarPresentation } from './useEditorToolbarPresentation';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* A JavaScript formatting toolbar. `RichTextEditor` renders one for you
|
|
9
|
+
* when `showToolbar` is set — reach for this component directly only to place
|
|
10
|
+
* the toolbar somewhere the editor cannot, in which case wire every handler
|
|
11
|
+
* to the editor's ref and feed it `activeState` and `historyState` from the
|
|
12
|
+
* editor's callbacks.
|
|
13
|
+
*
|
|
14
|
+
* The native keyboard-attached toolbar (`toolbarPlacement="keyboard"`) is a
|
|
15
|
+
* separate implementation that consumes the same {@link EditorToolbarItem}
|
|
16
|
+
* list.
|
|
17
|
+
*/
|
|
18
|
+
export function EditorToolbar(props: EditorToolbarProps) {
|
|
19
|
+
const state = useEditorToolbarState(props);
|
|
20
|
+
const items = useEditorToolbarItems(state);
|
|
21
|
+
const interactions = useEditorToolbarInteractions({ ...state, ...items });
|
|
22
|
+
return useEditorToolbarPresentation({ ...state, ...items, ...interactions });
|
|
23
|
+
}
|