react-native-enriched-markdown-scaffold 0.7.4-scaffold.9 → 1.0.2-scaffold.2
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/README.md +54 -8
- package/ReactNativeEnrichedMarkdown.podspec +82 -73
- package/android/build.gradle +186 -1
- package/android/consumer-rules.pro +1 -1
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownManagerDelegate.java +9 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownManagerInterface.java +3 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextInputManagerDelegate.java +24 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextInputManagerInterface.java +8 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerDelegate.java +9 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerInterface.java +3 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.cpp +75 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.h +63 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.cpp +35 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.h +886 -23
- package/android/src/main/baseline-prof.txt +1 -1
- package/android/src/main/cpp/jni-adapter.cpp +74 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdown.kt +189 -13
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownInternalText.kt +17 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownManager.kt +50 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownText.kt +48 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextLayoutManager.kt +10 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextManager.kt +42 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/MeasurementStore.kt +82 -4
- package/android/src/main/java/com/swmansion/enriched/markdown/events/CopyPressEvent.kt +24 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputManager.kt +54 -4
- package/android/src/main/java/com/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputView.kt +901 -462
- package/android/src/main/java/com/swmansion/enriched/markdown/input/MarkdownClipboard.kt +42 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/BlockEditCoordinator.kt +196 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/ClipboardCoordinator.kt +73 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/EditContext.kt +19 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/EditPipeline.kt +248 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/EditSession.kt +52 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/InputConnectionWrapper.kt +101 -7
- package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/LinkCoordinator.kt +69 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/MarkdownTextWatcher.kt +3 -3
- package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/MentionCoordinator.kt +118 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnChangeStateEvent.kt +26 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnContextMenuItemPressEvent.kt +26 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnInputKeyPressEvent.kt +24 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnPasteEvent.kt +24 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/BlockStore.kt +254 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/FormattingStore.kt +80 -87
- package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputFormatter.kt +109 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputParser.kt +116 -22
- package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/MarkdownSerializer.kt +167 -38
- package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/RangeEditAdjustment.kt +149 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/layout/InputEventEmitter.kt +66 -5
- package/android/src/main/java/com/swmansion/enriched/markdown/input/layout/InputMeasurementStore.kt +4 -2
- package/android/src/main/java/com/swmansion/enriched/markdown/input/model/BlockRange.kt +27 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/model/BlockType.kt +48 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/model/FormattingRange.kt +9 -4
- package/android/src/main/java/com/swmansion/enriched/markdown/input/model/InputFormatterStyle.kt +39 -2
- package/android/src/main/java/com/swmansion/enriched/markdown/input/model/MathAtom.kt +20 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/model/MathChipStyle.kt +1 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/input/model/MutableRangeBounds.kt +11 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/spans/InputBulletSpan.kt +82 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/spans/InputHeadingSpan.kt +58 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/spans/InputListItemSpacingSpan.kt +37 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/spans/InputOrderedListMarkerSpan.kt +63 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/BlockHandler.kt +54 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/HeadingBlockHandler.kt +27 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/OrderedListBlockHandler.kt +38 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/UnorderedListBlockHandler.kt +37 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/toolbar/InputContextMenu.kt +8 -26
- package/android/src/main/java/com/swmansion/enriched/markdown/parser/MarkdownASTNode.kt +1 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/parser/Parser.kt +1 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BlockStyleContext.kt +9 -2
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BlockquoteRenderer.kt +100 -12
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/CodeBlockRenderer.kt +16 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/HeadingRenderer.kt +4 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListContextManager.kt +2 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListItemRenderer.kt +74 -18
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListRenderer.kt +43 -4
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/NodeRenderer.kt +9 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SoftBreakRenderer.kt +16 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SpanStyleCache.kt +30 -27
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/BaseListSpan.kt +24 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/BlockquoteSpan.kt +174 -24
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeBackgroundSpan.kt +27 -3
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeBlockSpan.kt +13 -16
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeSpan.kt +1 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/EmphasisSpan.kt +1 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/ImageSpan.kt +182 -46
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/ListItemSpacingSpan.kt +33 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/ListMarkerAnchorSpan.kt +38 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/OrderedListSpan.kt +2 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/StrongSpan.kt +1 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/TaskListSpan.kt +3 -2
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/UnorderedListSpan.kt +3 -2
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/BlockquoteStyle.kt +6 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/CodeBlockStyle.kt +26 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/ImageStyle.kt +7 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/ListStyle.kt +4 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/StyleConfig.kt +13 -4
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/TableStyle.kt +6 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/CodeBlockHighlighter.kt +90 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/CodeBlockNode.kt +57 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/FeatureFlags.kt +1 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/MarkdownSegment.kt +9 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/MarkdownViewManagerUtils.kt +37 -7
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/ReadableMapExtensions.kt +3 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/RenderedSegment.kt +10 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/SegmentSignature.kt +1 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/StreamingMarkdownFilter.kt +83 -5
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/serialization/MarkdownASTSerializer.kt +4 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/input/MarkdownStyleParser.kt +74 -44
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/input/PasteTextUtils.kt +20 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/ImageCache.kt +26 -3
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/ImageDownloader.kt +22 -9
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/LocalImageLoader.kt +161 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/extensions/TextPaintExtensions.kt +23 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/interaction/CheckboxTouchHelper.kt +7 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/interaction/TaskListTapUtils.kt +41 -21
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/span/BlockSpacing.kt +15 -8
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/LinkLongPressMovementMethod.kt +58 -27
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/SelectionActionMode.kt +49 -15
- package/android/src/main/java/com/swmansion/enriched/markdown/views/BlockMenuOptions.kt +45 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/views/CodeBlockContainerView.kt +396 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/views/ContextMenuPopup.kt +9 -6
- package/android/src/main/java/com/swmansion/enriched/markdown/views/CopyGlyph.kt +101 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/views/TableContainerView.kt +36 -9
- package/android/src/main/jni/CMakeLists.txt +53 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerShadowNode.cpp +10 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerShadowNode.h +11 -2
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextShadowNode.cpp +10 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextShadowNode.h +12 -2
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextState.cpp +9 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextState.h +24 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/conversions.h +16 -0
- package/android/src/math/java/com/swmansion/enriched/markdown/input/math/MathChipControllerImpl.kt +21 -4
- package/android/src/math/java/com/swmansion/enriched/markdown/renderer/MathInlineRenderer.kt +7 -2
- package/android/src/math/java/com/swmansion/enriched/markdown/spans/MathChipSpan.kt +1 -1
- package/android/src/math/java/com/swmansion/enriched/markdown/views/MathContainerView.kt +6 -4
- package/cpp/highlight/CodeBlockHighlighter.cpp +284 -0
- package/cpp/highlight/CodeBlockHighlighter.hpp +66 -0
- package/cpp/highlight/CodeBlockLanguages.cpp +138 -0
- package/cpp/highlight/CodeBlockLanguages.hpp +25 -0
- package/cpp/highlight/HighlightGrammars.hpp +28 -0
- package/cpp/highlight/code_highlight_podspec.rb +211 -0
- package/cpp/highlight/gen-registry.mjs +155 -0
- package/cpp/highlight/grammar-versions.json +159 -0
- package/cpp/highlight/vendor/generated/generated_queries.h +1665 -0
- package/cpp/highlight/vendor/generated/generated_registry.cpp +59 -0
- package/cpp/parser/MD4CParser.cpp +173 -61
- package/cpp/parser/MD4CParser.hpp +1 -0
- package/cpp/parser/MarkdownASTNode.hpp +2 -1
- package/cpp/wasm/ASTSerializer.cpp +2 -0
- package/cpp/wasm/build.sh +1 -0
- package/cpp/wasm/md4c_wasm.cpp +3 -1
- package/docs/ACCESSIBILITY.md +14 -2
- package/docs/API_REFERENCE.md +234 -12
- package/docs/BREAKING_CHANGES.md +129 -0
- package/docs/CODE_HIGHLIGHT.md +133 -0
- package/docs/COPY_OPTIONS.md +47 -3
- package/docs/ELEMENTS_STRUCTURE.md +52 -4
- package/docs/IMAGE_CACHING.md +30 -0
- package/docs/INPUT.md +108 -11
- package/docs/LATEX_MATH.md +87 -45
- package/docs/MACOS.md +1 -1
- package/docs/MARKDOWN_STREAMING.md +27 -1
- package/docs/NATIVE_ASSETS.md +127 -0
- package/docs/RTL.md +1 -1
- package/docs/STYLES.md +46 -6
- package/docs/TESTING.md +112 -0
- package/docs/TEXT.md +16 -6
- package/docs/WEB.md +3 -1
- package/ios/EnrichedMarkdown.h +7 -0
- package/ios/EnrichedMarkdown.mm +284 -75
- package/ios/EnrichedMarkdownText.h +7 -0
- package/ios/EnrichedMarkdownText.mm +101 -73
- package/ios/attachments/ENRMImageAttachment.h +9 -0
- package/ios/attachments/ENRMImageAttachment.m +143 -40
- package/ios/attachments/ENRMMathInlineAttachment.h +2 -0
- package/ios/attachments/ENRMMathInlineAttachment.m +48 -81
- package/ios/attachments/ENRMMathInlineAttachmentShared.h +2 -0
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/EventEmitters.cpp +75 -0
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/EventEmitters.h +63 -0
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/Props.cpp +35 -0
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/Props.h +886 -23
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/RCTComponentViewHelpers.h +131 -0
- package/ios/input/ENRMAutoLinkDetector.h +2 -1
- package/ios/input/ENRMAutoLinkDetector.mm +79 -41
- package/ios/input/ENRMBlockEditCoordinator.h +71 -0
- package/ios/input/ENRMBlockEditCoordinator.mm +195 -0
- package/ios/input/ENRMBlockRange.h +28 -0
- package/ios/input/ENRMBlockRange.mm +30 -0
- package/ios/input/ENRMBlockStore.h +56 -0
- package/ios/input/ENRMBlockStore.mm +275 -0
- package/ios/input/ENRMClipboardCoordinator.h +45 -0
- package/ios/input/ENRMClipboardCoordinator.mm +120 -0
- package/ios/input/ENRMDetectorPipeline.h +2 -1
- package/ios/input/ENRMEditPipeline.h +76 -0
- package/ios/input/ENRMEditPipeline.mm +228 -0
- package/ios/input/ENRMEditSession.h +36 -0
- package/ios/input/ENRMEditSession.mm +63 -0
- package/ios/input/ENRMFormattingStore.h +17 -0
- package/ios/input/ENRMFormattingStore.mm +95 -105
- package/ios/input/ENRMInputBlockType.h +91 -0
- package/ios/input/ENRMInputBlockType.mm +5 -0
- package/ios/input/ENRMInputDecorationDrawer.h +18 -0
- package/ios/input/ENRMInputEventEmitter.h +56 -0
- package/ios/input/ENRMInputEventEmitter.mm +308 -0
- package/ios/input/ENRMInputFormatter.h +29 -69
- package/ios/input/ENRMInputFormatter.mm +216 -124
- package/ios/input/ENRMInputFormatterStyle.h +99 -0
- package/ios/input/ENRMInputFormatterStyle.mm +188 -0
- package/ios/input/ENRMInputLayoutManager.h +9 -0
- package/ios/input/ENRMInputLayoutManager.mm +30 -0
- package/ios/input/ENRMInputListMarkerDrawer.h +32 -0
- package/ios/input/ENRMInputListMarkerDrawer.mm +426 -0
- package/ios/input/ENRMInputParser.h +5 -6
- package/ios/input/ENRMInputParser.mm +461 -178
- package/ios/input/ENRMInputRemend.mm +2 -2
- package/ios/input/ENRMInputStyleStateBuilder.h +40 -0
- package/ios/input/ENRMInputStyleStateBuilder.mm +60 -0
- package/ios/input/ENRMInputTextView.mm +103 -8
- package/ios/input/ENRMInputTypingAttributesController.h +42 -0
- package/ios/input/ENRMInputTypingAttributesController.mm +203 -0
- package/ios/input/ENRMLinkCoordinator.h +41 -0
- package/ios/input/ENRMLinkCoordinator.mm +89 -0
- package/ios/input/ENRMMarkdownSerializer.h +29 -5
- package/ios/input/ENRMMarkdownSerializer.mm +170 -48
- package/ios/input/ENRMMathAtom.h +26 -0
- package/ios/input/ENRMMathAtom.mm +12 -0
- package/ios/input/ENRMMentionCoordinator.h +45 -0
- package/ios/input/ENRMMentionCoordinator.mm +167 -0
- package/ios/input/ENRMRangeEditAdjustment.h +38 -0
- package/ios/input/ENRMRangeEditAdjustment.mm +91 -0
- package/ios/input/ENRMRangeStoreUtils.h +39 -0
- package/ios/input/EnrichedMarkdownTextInput+ContextMenu.mm +6 -6
- package/ios/input/EnrichedMarkdownTextInput+Internal.h +11 -3
- package/ios/input/EnrichedMarkdownTextInput.h +7 -1
- package/ios/input/EnrichedMarkdownTextInput.mm +1089 -1023
- package/ios/input/InputStylePropsUtils.h +109 -68
- package/ios/input/internals/EnrichedMarkdownTextInputShadowNode.mm +2 -1
- package/ios/input/styles/ENRMBlockHandler.h +46 -0
- package/ios/input/styles/ENRMHeadingBlockHandler.h +15 -0
- package/ios/input/styles/ENRMHeadingBlockHandler.mm +38 -0
- package/ios/input/styles/ENRMOrderedListBlockHandler.h +14 -0
- package/ios/input/styles/ENRMOrderedListBlockHandler.mm +48 -0
- package/ios/input/styles/ENRMUnorderedListBlockHandler.h +15 -0
- package/ios/input/styles/ENRMUnorderedListBlockHandler.mm +51 -0
- package/ios/internals/ENRMViewFreeMeasurement.h +331 -0
- package/ios/internals/EnrichedMarkdownShadowNode.h +1 -3
- package/ios/internals/EnrichedMarkdownShadowNode.mm +16 -20
- package/ios/internals/EnrichedMarkdownTextShadowNode.h +1 -3
- package/ios/internals/EnrichedMarkdownTextShadowNode.mm +15 -20
- package/ios/internals/MeasurementCache.h +33 -7
- package/ios/internals/ShadowMeasurementUtils.h +63 -58
- package/ios/math/ENRMMathChipController.h +74 -0
- package/ios/math/ENRMMathChipController.mm +476 -0
- package/ios/math/ENRMRaTeXBridge.swift +4 -1
- package/ios/parser/ENRMMarkdownParser.h +1 -8
- package/ios/parser/ENRMMarkdownParser.mm +2 -11
- package/ios/parser/MarkdownASTNode.h +2 -1
- package/ios/parser/MarkdownParserBridge.mm +4 -0
- package/ios/renderer/AttributedRenderer.m +20 -2
- package/ios/renderer/BaseRenderer.h +17 -2
- package/ios/renderer/BaseRenderer.m +30 -0
- package/ios/renderer/BlockquoteRenderer.h +1 -1
- package/ios/renderer/BlockquoteRenderer.m +144 -35
- package/ios/renderer/CodeBlockRenderer.h +1 -1
- package/ios/renderer/CodeBlockRenderer.m +27 -23
- package/ios/renderer/CodeRenderer.h +1 -1
- package/ios/renderer/CodeRenderer.m +3 -1
- package/ios/renderer/ENRMImageRenderer.h +1 -1
- package/ios/renderer/ENRMImageRenderer.m +5 -1
- package/ios/renderer/ENRMMathInlineRenderer.h +1 -1
- package/ios/renderer/ENRMMathInlineRenderer.m +5 -1
- package/ios/renderer/ENRMSpoilerRenderer.h +1 -1
- package/ios/renderer/ENRMSpoilerRenderer.m +3 -1
- package/ios/renderer/EmphasisRenderer.h +1 -1
- package/ios/renderer/EmphasisRenderer.m +3 -1
- package/ios/renderer/HeadingRenderer.h +1 -1
- package/ios/renderer/HeadingRenderer.m +13 -6
- package/ios/renderer/HighlightRenderer.h +1 -1
- package/ios/renderer/HighlightRenderer.m +3 -1
- package/ios/renderer/LinkRenderer.h +1 -1
- package/ios/renderer/LinkRenderer.m +3 -1
- package/ios/renderer/ListItemRenderer.h +13 -1
- package/ios/renderer/ListItemRenderer.m +102 -44
- package/ios/renderer/ListRenderer.h +2 -2
- package/ios/renderer/ListRenderer.m +63 -25
- package/ios/renderer/ParagraphRenderer.h +1 -1
- package/ios/renderer/ParagraphRenderer.m +16 -8
- package/ios/renderer/RenderContext.h +10 -0
- package/ios/renderer/RenderContext.m +44 -0
- package/ios/renderer/RendererFactory.m +14 -0
- package/ios/renderer/StrikethroughRenderer.h +1 -1
- package/ios/renderer/StrikethroughRenderer.m +3 -1
- package/ios/renderer/StrongRenderer.h +1 -1
- package/ios/renderer/StrongRenderer.m +3 -1
- package/ios/renderer/SubscriptRenderer.h +1 -1
- package/ios/renderer/SubscriptRenderer.m +3 -1
- package/ios/renderer/SuperscriptRenderer.h +1 -1
- package/ios/renderer/SuperscriptRenderer.m +3 -1
- package/ios/renderer/TextRenderer.h +2 -2
- package/ios/renderer/TextRenderer.m +3 -1
- package/ios/renderer/ThematicBreakRenderer.h +1 -1
- package/ios/renderer/ThematicBreakRenderer.m +3 -1
- package/ios/renderer/UnderlineRenderer.h +1 -1
- package/ios/renderer/UnderlineRenderer.m +3 -1
- package/ios/styles/StyleConfig.h +22 -0
- package/ios/styles/StyleConfig.mm +132 -0
- package/ios/utils/BlockquoteBorder.h +6 -0
- package/ios/utils/BlockquoteBorder.m +249 -52
- package/ios/utils/CodeBlockBackground.m +16 -2
- package/ios/utils/ENRMAtomicSize.h +65 -0
- package/ios/utils/ENRMBlockMenu.h +57 -0
- package/ios/utils/ENRMCodeBlockContent.h +37 -0
- package/ios/utils/ENRMCodeBlockContent.mm +79 -0
- package/ios/utils/ENRMCodeBlockHighlighter.h +37 -0
- package/ios/utils/ENRMCodeBlockHighlighter.mm +51 -0
- package/ios/utils/ENRMFeatureFlags.h +7 -0
- package/ios/utils/ENRMImageDownloader.h +11 -1
- package/ios/utils/ENRMImageDownloader.m +60 -16
- package/ios/utils/ENRMLocalImageLoader.h +31 -0
- package/ios/utils/ENRMLocalImageLoader.m +68 -0
- package/ios/utils/ENRMMathFallback.h +26 -0
- package/ios/utils/ENRMMathFallback.m +18 -0
- package/ios/utils/ENRMTextViewSetup.h +35 -17
- package/ios/utils/EditMenuUtils.h +22 -5
- package/ios/utils/EditMenuUtils.m +53 -9
- package/ios/utils/ImageRequestHeaderUtils.h +35 -0
- package/ios/utils/LastElementUtils.h +1 -0
- package/ios/utils/ListMarkerDrawer.m +29 -42
- package/ios/utils/MarkdownASTSerializer.m +4 -0
- package/ios/utils/ParagraphStyleUtils.h +5 -0
- package/ios/utils/ParagraphStyleUtils.m +77 -17
- package/ios/utils/RenderedMarkdownSegment.h +13 -1
- package/ios/utils/RenderedMarkdownSegment.m +20 -0
- package/ios/utils/SegmentRenderer.m +17 -4
- package/ios/utils/StreamingMarkdownFilter.h +11 -1
- package/ios/utils/StreamingMarkdownFilter.m +98 -2
- package/ios/utils/StylePropsUtils.h +63 -0
- package/ios/utils/TaskListTapUtils.m +24 -0
- package/ios/views/ENRMCodeBlockContainerView.h +53 -0
- package/ios/views/ENRMCodeBlockContainerView.m +559 -0
- package/ios/views/ENRMMathContainerView.h +16 -0
- package/ios/views/ENRMMathContainerView.m +74 -19
- package/ios/views/TableContainerView.h +22 -0
- package/ios/views/TableContainerView.m +261 -175
- package/jest.d.ts +1 -0
- package/jest.js +5 -0
- package/lib/module/EnrichedMarkdownNativeComponent.ts +73 -0
- package/lib/module/EnrichedMarkdownTextInput.js +84 -5
- package/lib/module/EnrichedMarkdownTextInput.js.map +1 -1
- package/lib/module/EnrichedMarkdownTextInputNativeComponent.ts +78 -5
- package/lib/module/EnrichedMarkdownTextNativeComponent.ts +74 -0
- package/lib/module/headingDefaults.js +34 -0
- package/lib/module/headingDefaults.js.map +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/jest/index.js +191 -0
- package/lib/module/jest/index.js.map +1 -0
- package/lib/module/native/EnrichedMarkdownText.js +37 -5
- package/lib/module/native/EnrichedMarkdownText.js.map +1 -1
- package/lib/module/normalizeMarkdownStyle.js +81 -19
- package/lib/module/normalizeMarkdownStyle.js.map +1 -1
- package/lib/module/normalizeMarkdownStyle.web.js +56 -18
- package/lib/module/normalizeMarkdownStyle.web.js.map +1 -1
- package/lib/module/normalizeMarkdownTextInputStyle.js +62 -15
- package/lib/module/normalizeMarkdownTextInputStyle.js.map +1 -1
- package/lib/module/normalizeMenuItem.js +1 -1
- package/lib/module/utils/textInputState.js +26 -0
- package/lib/module/utils/textInputState.js.map +1 -0
- package/lib/module/web/EnrichedMarkdownText.js +9 -5
- package/lib/module/web/EnrichedMarkdownText.js.map +1 -1
- package/lib/module/web/parseMarkdown.js +4 -3
- package/lib/module/web/parseMarkdown.js.map +1 -1
- package/lib/module/web/renderers/InlineRenderers.js +6 -0
- package/lib/module/web/renderers/InlineRenderers.js.map +1 -1
- package/lib/module/web/renderers/ListRenderers.js +7 -2
- package/lib/module/web/renderers/ListRenderers.js.map +1 -1
- package/lib/module/web/renderers/index.js +7 -4
- package/lib/module/web/renderers/index.js.map +1 -1
- package/lib/module/web/styles.js +83 -6
- package/lib/module/web/styles.js.map +1 -1
- package/lib/module/web/utils.js +1 -0
- package/lib/module/web/utils.js.map +1 -1
- package/lib/module/web/wasm/md4c.js +0 -0
- package/lib/module/web/wasm/md4c.js.map +1 -1
- package/lib/typescript/src/EnrichedMarkdownNativeComponent.d.ts +66 -0
- package/lib/typescript/src/EnrichedMarkdownNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/EnrichedMarkdownTextInput.d.ts +94 -9
- package/lib/typescript/src/EnrichedMarkdownTextInput.d.ts.map +1 -1
- package/lib/typescript/src/EnrichedMarkdownTextInputNativeComponent.d.ts +69 -5
- package/lib/typescript/src/EnrichedMarkdownTextInputNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts +66 -0
- package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/headingDefaults.d.ts +9 -0
- package/lib/typescript/src/headingDefaults.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +2 -2
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/index.web.d.ts +1 -1
- package/lib/typescript/src/index.web.d.ts.map +1 -1
- package/lib/typescript/src/jest/index.d.ts +6 -0
- package/lib/typescript/src/jest/index.d.ts.map +1 -0
- package/lib/typescript/src/native/EnrichedMarkdownText.d.ts +3 -3
- package/lib/typescript/src/native/EnrichedMarkdownText.d.ts.map +1 -1
- package/lib/typescript/src/normalizeMarkdownStyle.d.ts.map +1 -1
- package/lib/typescript/src/normalizeMarkdownStyle.web.d.ts.map +1 -1
- package/lib/typescript/src/normalizeMarkdownTextInputStyle.d.ts +19 -5
- package/lib/typescript/src/normalizeMarkdownTextInputStyle.d.ts.map +1 -1
- package/lib/typescript/src/types/MarkdownStyle.d.ts +72 -0
- package/lib/typescript/src/types/MarkdownStyle.d.ts.map +1 -1
- package/lib/typescript/src/types/MarkdownStyleInternal.d.ts +27 -0
- package/lib/typescript/src/types/MarkdownStyleInternal.d.ts.map +1 -1
- package/lib/typescript/src/types/MarkdownTextProps.d.ts +104 -9
- package/lib/typescript/src/types/MarkdownTextProps.d.ts.map +1 -1
- package/lib/typescript/src/types/MarkdownTextProps.web.d.ts +19 -0
- package/lib/typescript/src/types/MarkdownTextProps.web.d.ts.map +1 -1
- package/lib/typescript/src/types/events.d.ts +19 -0
- package/lib/typescript/src/types/events.d.ts.map +1 -1
- package/lib/typescript/src/utils/textInputState.d.ts +24 -0
- package/lib/typescript/src/utils/textInputState.d.ts.map +1 -0
- package/lib/typescript/src/web/EnrichedMarkdownText.d.ts +1 -1
- package/lib/typescript/src/web/EnrichedMarkdownText.d.ts.map +1 -1
- package/lib/typescript/src/web/parseMarkdown.d.ts +1 -1
- package/lib/typescript/src/web/parseMarkdown.d.ts.map +1 -1
- package/lib/typescript/src/web/renderers/InlineRenderers.d.ts.map +1 -1
- package/lib/typescript/src/web/renderers/ListRenderers.d.ts.map +1 -1
- package/lib/typescript/src/web/renderers/index.d.ts +2 -1
- package/lib/typescript/src/web/renderers/index.d.ts.map +1 -1
- package/lib/typescript/src/web/styles.d.ts +2 -1
- package/lib/typescript/src/web/styles.d.ts.map +1 -1
- package/lib/typescript/src/web/types.d.ts +6 -2
- package/lib/typescript/src/web/types.d.ts.map +1 -1
- package/lib/typescript/src/web/utils.d.ts.map +1 -1
- package/package.json +36 -9
- package/postinstall.mjs +131 -0
- package/ratex-version.json +21 -0
- package/src/EnrichedMarkdownNativeComponent.ts +73 -0
- package/src/EnrichedMarkdownTextInput.tsx +159 -8
- package/src/EnrichedMarkdownTextInputNativeComponent.ts +78 -5
- package/src/EnrichedMarkdownTextNativeComponent.ts +74 -0
- package/src/headingDefaults.ts +21 -0
- package/src/index.tsx +9 -0
- package/src/index.web.tsx +1 -0
- package/src/jest/index.tsx +215 -0
- package/src/native/EnrichedMarkdownText.tsx +53 -2
- package/src/normalizeMarkdownStyle.ts +102 -16
- package/src/normalizeMarkdownStyle.web.ts +63 -15
- package/src/normalizeMarkdownTextInputStyle.ts +110 -35
- package/src/normalizeMenuItem.ts +1 -1
- package/src/types/MarkdownStyle.ts +74 -0
- package/src/types/MarkdownStyleInternal.ts +39 -0
- package/src/types/MarkdownTextProps.ts +101 -9
- package/src/types/MarkdownTextProps.web.ts +19 -0
- package/src/types/events.ts +21 -0
- package/src/utils/textInputState.ts +35 -0
- package/src/web/EnrichedMarkdownText.tsx +16 -2
- package/src/web/parseMarkdown.ts +6 -2
- package/src/web/renderers/InlineRenderers.tsx +5 -0
- package/src/web/renderers/ListRenderers.tsx +14 -2
- package/src/web/renderers/index.tsx +6 -2
- package/src/web/styles.ts +89 -5
- package/src/web/types.ts +6 -1
- package/src/web/utils.ts +1 -0
- package/src/web/wasm/md4c.js +0 -0
- package/vendor-grammars.mjs +511 -0
- package/vendor-ratex.mjs +173 -0
- package/app.plugin.js +0 -2
- package/plugin/build/withAndroidMath.js +0 -19
- package/plugin/build/withIosMath.js +0 -28
- package/plugin/build/withReactNativeEnrichedMarkdown.js +0 -11
- package/plugin/src/withAndroidMath.ts +0 -24
- package/plugin/src/withIosMath.ts +0 -35
- package/plugin/src/withReactNativeEnrichedMarkdown.ts +0 -17
- package/plugin/tsconfig.build.json +0 -16
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
useCallback,
|
|
3
3
|
useEffect,
|
|
4
4
|
useImperativeHandle,
|
|
5
|
+
useLayoutEffect,
|
|
5
6
|
useMemo,
|
|
6
7
|
useRef,
|
|
7
8
|
} from 'react';
|
|
@@ -13,6 +14,7 @@ import EnrichedMarkdownTextInputNativeComponent, {
|
|
|
13
14
|
type OnChangeMarkdownEvent,
|
|
14
15
|
type OnChangeSelectionEvent,
|
|
15
16
|
type OnChangeStateEvent,
|
|
17
|
+
type OnKeyPressEvent,
|
|
16
18
|
type OnRequestMarkdownResultEvent,
|
|
17
19
|
type OnRequestCaretRectResultEvent,
|
|
18
20
|
type OnCaretRectChangeEvent,
|
|
@@ -24,6 +26,7 @@ import EnrichedMarkdownTextInputNativeComponent, {
|
|
|
24
26
|
type OnEndMentionEvent,
|
|
25
27
|
} from './EnrichedMarkdownTextInputNativeComponent';
|
|
26
28
|
export type {
|
|
29
|
+
OnKeyPressEvent,
|
|
27
30
|
OnLinkDetected,
|
|
28
31
|
OnStartMentionEvent,
|
|
29
32
|
OnChangeMentionEvent,
|
|
@@ -37,9 +40,11 @@ import type {
|
|
|
37
40
|
TextStyle,
|
|
38
41
|
ColorValue,
|
|
39
42
|
} from 'react-native';
|
|
43
|
+
import type { OnPasteEvent } from './types/events';
|
|
40
44
|
import { normalizeMarkdownTextInputStyle } from './normalizeMarkdownTextInputStyle';
|
|
41
45
|
import { normalizeMenuItem } from './normalizeMenuItem';
|
|
42
46
|
import { toNativeRegexConfig } from './utils/regexParser';
|
|
47
|
+
import { TextInputState } from './utils/textInputState';
|
|
43
48
|
import type { RefObject } from 'react';
|
|
44
49
|
|
|
45
50
|
type NativeRef = HostInstance;
|
|
@@ -50,7 +55,12 @@ export interface LinkStyle {
|
|
|
50
55
|
backgroundColor?: string;
|
|
51
56
|
}
|
|
52
57
|
|
|
53
|
-
|
|
58
|
+
/**
|
|
59
|
+
* Chip style for inline math (`$...$`) in the editor. Mirrors the read-only
|
|
60
|
+
* renderer's `markdownStyle.inlineMath`, which shares `color`; the remaining
|
|
61
|
+
* fields are the chip's own box and have no counterpart there.
|
|
62
|
+
*/
|
|
63
|
+
export interface InputInlineMathStyle {
|
|
54
64
|
color?: string;
|
|
55
65
|
fontSize?: number;
|
|
56
66
|
backgroundColor?: string;
|
|
@@ -64,10 +74,36 @@ export interface MathStyle {
|
|
|
64
74
|
fontWeight?: 'bold' | 'normal';
|
|
65
75
|
}
|
|
66
76
|
|
|
67
|
-
|
|
77
|
+
/**
|
|
78
|
+
* Chip style for block math (`$$...$$`) in the editor. Field names mirror the
|
|
79
|
+
* read-only renderer's `markdownStyle.math` (`padding`, `marginTop`,
|
|
80
|
+
* `marginBottom`, `textAlign`) so the same key means the same thing on both
|
|
81
|
+
* surfaces; the chip additionally splits `padding` per axis.
|
|
82
|
+
*/
|
|
83
|
+
export interface InputMathStyle extends InputInlineMathStyle {
|
|
84
|
+
/**
|
|
85
|
+
* Shorthand for both padding axes, matching the renderer's
|
|
86
|
+
* `markdownStyle.math.padding`. `paddingHorizontal` / `paddingVertical`
|
|
87
|
+
* override it per axis when both are given.
|
|
88
|
+
*/
|
|
89
|
+
padding?: number;
|
|
68
90
|
marginTop?: number;
|
|
69
91
|
marginBottom?: number;
|
|
70
|
-
|
|
92
|
+
textAlign?: 'left' | 'center' | 'right';
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
|
|
96
|
+
|
|
97
|
+
const VALID_HEADING_LEVELS = new Set<number>([1, 2, 3, 4, 5, 6]);
|
|
98
|
+
|
|
99
|
+
function toHeadingLevel(n: number): HeadingLevel {
|
|
100
|
+
return (VALID_HEADING_LEVELS.has(n) ? n : 1) as HeadingLevel;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export interface HeadingStyle {
|
|
104
|
+
fontSize?: number;
|
|
105
|
+
fontWeight?: string;
|
|
106
|
+
color?: string;
|
|
71
107
|
}
|
|
72
108
|
|
|
73
109
|
export interface MarkdownTextInputStyle {
|
|
@@ -83,8 +119,28 @@ export interface MarkdownTextInputStyle {
|
|
|
83
119
|
color?: string;
|
|
84
120
|
backgroundColor?: string;
|
|
85
121
|
};
|
|
86
|
-
|
|
87
|
-
|
|
122
|
+
inlineMath?: InputInlineMathStyle;
|
|
123
|
+
math?: InputMathStyle;
|
|
124
|
+
/**
|
|
125
|
+
* Per-level heading styling for the editor, mirroring the readonly
|
|
126
|
+
* renderer's `markdownStyle` h1..h6. Omitted levels fall back to defaults
|
|
127
|
+
* (font sizes 30/24/20/18/16/14).
|
|
128
|
+
*/
|
|
129
|
+
h1?: HeadingStyle;
|
|
130
|
+
h2?: HeadingStyle;
|
|
131
|
+
h3?: HeadingStyle;
|
|
132
|
+
h4?: HeadingStyle;
|
|
133
|
+
h5?: HeadingStyle;
|
|
134
|
+
h6?: HeadingStyle;
|
|
135
|
+
/** List styling shared by bullet and numbered lists. */
|
|
136
|
+
list?: {
|
|
137
|
+
/**
|
|
138
|
+
* Vertical spacing (points) added above each list item so items read as
|
|
139
|
+
* separate rows. iOS uses `paragraphSpacingBefore`; Android a `LineHeightSpan`.
|
|
140
|
+
* @default 0
|
|
141
|
+
*/
|
|
142
|
+
itemSpacing?: number;
|
|
143
|
+
};
|
|
88
144
|
}
|
|
89
145
|
|
|
90
146
|
export interface StyleState {
|
|
@@ -94,6 +150,9 @@ export interface StyleState {
|
|
|
94
150
|
strikethrough: { isActive: boolean };
|
|
95
151
|
spoiler: { isActive: boolean };
|
|
96
152
|
link: { isActive: boolean };
|
|
153
|
+
heading: { isActive: boolean; level: HeadingLevel };
|
|
154
|
+
unorderedList: { isActive: boolean; depth: number };
|
|
155
|
+
orderedList: { isActive: boolean; depth: number };
|
|
97
156
|
}
|
|
98
157
|
|
|
99
158
|
export interface ContextMenuItem {
|
|
@@ -139,8 +198,14 @@ export interface EnrichedMarkdownTextInputInstance {
|
|
|
139
198
|
toggleUnderline: () => void;
|
|
140
199
|
toggleStrikethrough: () => void;
|
|
141
200
|
toggleSpoiler: () => void;
|
|
201
|
+
toggleHeading: (level: HeadingLevel) => void;
|
|
202
|
+
toggleUnorderedList: () => void;
|
|
203
|
+
toggleOrderedList: () => void;
|
|
204
|
+
indentList: () => void;
|
|
205
|
+
outdentList: () => void;
|
|
142
206
|
setLink: (url: string) => void;
|
|
143
207
|
insertLink: (text: string, url: string) => void;
|
|
208
|
+
insertText: (text: string) => void;
|
|
144
209
|
insertMention: (displayText: string, url: string) => void;
|
|
145
210
|
startMention: (indicator: string) => void;
|
|
146
211
|
removeLink: () => void;
|
|
@@ -152,6 +217,13 @@ export interface EnrichedMarkdownTextInputInstance {
|
|
|
152
217
|
) => void;
|
|
153
218
|
removeMath: (start: number) => void;
|
|
154
219
|
copyToClipboard: () => void;
|
|
220
|
+
/**
|
|
221
|
+
* Completes a paste reported through `onPaste`. Call it exactly once per
|
|
222
|
+
* event: `resolvePaste('', '')` drops the clipboard content (replacing any
|
|
223
|
+
* selection), a non-empty `markdown` re-applies the copied formatting, and
|
|
224
|
+
* plain `text` inserts verbatim.
|
|
225
|
+
*/
|
|
226
|
+
resolvePaste: (text: string, markdown?: string) => void;
|
|
155
227
|
getMarkdown: () => Promise<string>;
|
|
156
228
|
getCaretRect: () => Promise<CaretRect>;
|
|
157
229
|
}
|
|
@@ -206,6 +278,15 @@ export interface EnrichedMarkdownTextInputProps extends Omit<
|
|
|
206
278
|
scrollEnabled?: boolean;
|
|
207
279
|
blockSyntax?: boolean;
|
|
208
280
|
autoCapitalize?: string;
|
|
281
|
+
/**
|
|
282
|
+
* Report pastes through `onPaste` instead of inserting them. Only takes
|
|
283
|
+
* effect when `onPaste` is also set — otherwise native would swallow every
|
|
284
|
+
* paste with nobody left to resolve it.
|
|
285
|
+
*
|
|
286
|
+
* macOS ignores this prop and always pastes inline.
|
|
287
|
+
* @default false
|
|
288
|
+
*/
|
|
289
|
+
interceptPaste?: boolean;
|
|
209
290
|
multiline?: boolean;
|
|
210
291
|
cursorColor?: ColorValue;
|
|
211
292
|
selectionColor?: ColorValue;
|
|
@@ -215,9 +296,16 @@ export interface EnrichedMarkdownTextInputProps extends Omit<
|
|
|
215
296
|
onChangeMarkdown?: (markdown: string) => void;
|
|
216
297
|
onChangeSelection?: (selection: { start: number; end: number }) => void;
|
|
217
298
|
onChangeState?: (state: StyleState) => void;
|
|
299
|
+
onKeyPress?: (e: NativeSyntheticEvent<OnKeyPressEvent>) => void;
|
|
218
300
|
onCaretRectChange?: (rect: CaretRect) => void;
|
|
219
301
|
onLinkDetected?: (event: OnLinkDetected) => void;
|
|
220
302
|
onMathPress?: (event: OnMathPressEvent) => void;
|
|
303
|
+
/**
|
|
304
|
+
* Fires instead of the insert when `interceptPaste` is on. The handler owns
|
|
305
|
+
* the paste from here: it must call `resolvePaste` exactly once, on every
|
|
306
|
+
* path including failures, or the paste is silently dropped.
|
|
307
|
+
*/
|
|
308
|
+
onPaste?: (event: OnPasteEvent) => void;
|
|
221
309
|
mentionIndicators?: string[];
|
|
222
310
|
onStartMention?: (event: OnStartMentionEvent) => void;
|
|
223
311
|
onChangeMention?: (event: OnChangeMentionEvent) => void;
|
|
@@ -287,6 +375,7 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
287
375
|
scrollEnabled = true,
|
|
288
376
|
blockSyntax = true,
|
|
289
377
|
autoCapitalize = 'sentences',
|
|
378
|
+
interceptPaste = false,
|
|
290
379
|
multiline = true,
|
|
291
380
|
cursorColor,
|
|
292
381
|
selectionColor,
|
|
@@ -294,9 +383,11 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
294
383
|
onChangeMarkdown,
|
|
295
384
|
onChangeSelection,
|
|
296
385
|
onChangeState,
|
|
386
|
+
onKeyPress,
|
|
297
387
|
onCaretRectChange,
|
|
298
388
|
onLinkDetected,
|
|
299
389
|
onMathPress,
|
|
390
|
+
onPaste,
|
|
300
391
|
mentionIndicators,
|
|
301
392
|
onStartMention,
|
|
302
393
|
onChangeMention,
|
|
@@ -354,6 +445,27 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
354
445
|
};
|
|
355
446
|
}, []);
|
|
356
447
|
|
|
448
|
+
/**
|
|
449
|
+
* Mirrors the built-in TextInput's TextInputState integration so scroll
|
|
450
|
+
* containers' keyboardShouldPersistTaps logic and Keyboard.dismiss treat
|
|
451
|
+
* this input like a native TextInput. See utils/textInputState.ts for the
|
|
452
|
+
* full rationale. The unmount cleanup blurs through blurTextInput so both
|
|
453
|
+
* the registry entry and the native focus are released, matching the
|
|
454
|
+
* TextInput unmount path.
|
|
455
|
+
*/
|
|
456
|
+
useLayoutEffect(() => {
|
|
457
|
+
const instance = nativeRef.current;
|
|
458
|
+
if (instance == null) return;
|
|
459
|
+
|
|
460
|
+
TextInputState.registerInput(instance);
|
|
461
|
+
return () => {
|
|
462
|
+
if (TextInputState.currentlyFocusedInput() === instance) {
|
|
463
|
+
TextInputState.blurTextInput(instance);
|
|
464
|
+
}
|
|
465
|
+
TextInputState.unregisterInput(instance);
|
|
466
|
+
};
|
|
467
|
+
}, []);
|
|
468
|
+
|
|
357
469
|
const normalizedStyle = normalizeMarkdownTextInputStyle(markdownStyle);
|
|
358
470
|
|
|
359
471
|
const normalizedSelectionMenuConfig = useMemo(() => {
|
|
@@ -438,6 +550,14 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
438
550
|
[onMathPress]
|
|
439
551
|
);
|
|
440
552
|
|
|
553
|
+
const handlePaste = useCallback(
|
|
554
|
+
(e: NativeSyntheticEvent<OnPasteEvent>) => {
|
|
555
|
+
const { text, markdown } = e.nativeEvent;
|
|
556
|
+
onPaste?.({ text, markdown });
|
|
557
|
+
},
|
|
558
|
+
[onPaste]
|
|
559
|
+
);
|
|
560
|
+
|
|
441
561
|
const handleChangeText = useCallback(
|
|
442
562
|
(e: NativeSyntheticEvent<OnChangeTextEvent>) => {
|
|
443
563
|
onChangeText?.(e.nativeEvent.value);
|
|
@@ -462,8 +582,17 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
462
582
|
|
|
463
583
|
const handleChangeState = useCallback(
|
|
464
584
|
(e: NativeSyntheticEvent<OnChangeStateEvent>) => {
|
|
465
|
-
const {
|
|
466
|
-
|
|
585
|
+
const {
|
|
586
|
+
bold,
|
|
587
|
+
italic,
|
|
588
|
+
underline,
|
|
589
|
+
strikethrough,
|
|
590
|
+
spoiler,
|
|
591
|
+
link,
|
|
592
|
+
heading,
|
|
593
|
+
unorderedList,
|
|
594
|
+
orderedList,
|
|
595
|
+
} = e.nativeEvent;
|
|
467
596
|
onChangeState?.({
|
|
468
597
|
bold,
|
|
469
598
|
italic,
|
|
@@ -471,6 +600,9 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
471
600
|
strikethrough,
|
|
472
601
|
spoiler,
|
|
473
602
|
link,
|
|
603
|
+
heading: { ...heading, level: toHeadingLevel(heading.level) },
|
|
604
|
+
unorderedList,
|
|
605
|
+
orderedList,
|
|
474
606
|
});
|
|
475
607
|
},
|
|
476
608
|
[onChangeState]
|
|
@@ -506,10 +638,12 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
506
638
|
);
|
|
507
639
|
|
|
508
640
|
const handleFocus = useCallback(() => {
|
|
641
|
+
TextInputState.focusInput(nativeRef.current);
|
|
509
642
|
onFocus?.();
|
|
510
643
|
}, [onFocus]);
|
|
511
644
|
|
|
512
645
|
const handleBlur = useCallback(() => {
|
|
646
|
+
TextInputState.blurInput(nativeRef.current);
|
|
513
647
|
onBlur?.();
|
|
514
648
|
}, [onBlur]);
|
|
515
649
|
|
|
@@ -550,7 +684,13 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
550
684
|
callback?.({
|
|
551
685
|
text: selectedText,
|
|
552
686
|
selection: { start: selectionStart, end: selectionEnd },
|
|
553
|
-
styleState
|
|
687
|
+
styleState: {
|
|
688
|
+
...styleState,
|
|
689
|
+
heading: {
|
|
690
|
+
...styleState.heading,
|
|
691
|
+
level: toHeadingLevel(styleState.heading.level),
|
|
692
|
+
},
|
|
693
|
+
},
|
|
554
694
|
});
|
|
555
695
|
},
|
|
556
696
|
[]
|
|
@@ -576,8 +716,14 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
576
716
|
toggleUnderline: () => Commands.toggleUnderline(commandRef),
|
|
577
717
|
toggleStrikethrough: () => Commands.toggleStrikethrough(commandRef),
|
|
578
718
|
toggleSpoiler: () => Commands.toggleSpoiler(commandRef),
|
|
719
|
+
toggleHeading: (level) => Commands.toggleHeading(commandRef, level),
|
|
720
|
+
toggleUnorderedList: () => Commands.toggleUnorderedList(commandRef),
|
|
721
|
+
toggleOrderedList: () => Commands.toggleOrderedList(commandRef),
|
|
722
|
+
indentList: () => Commands.indentList(commandRef),
|
|
723
|
+
outdentList: () => Commands.outdentList(commandRef),
|
|
579
724
|
setLink: (url) => Commands.setLink(commandRef, url),
|
|
580
725
|
insertLink: (text, url) => Commands.insertLink(commandRef, text, url),
|
|
726
|
+
insertText: (text) => Commands.insertText(commandRef, text),
|
|
581
727
|
insertMention: (displayText, url) =>
|
|
582
728
|
Commands.insertMention(commandRef, displayText, url),
|
|
583
729
|
startMention: (indicator) => Commands.startMention(commandRef, indicator),
|
|
@@ -593,6 +739,8 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
593
739
|
),
|
|
594
740
|
removeMath: (start) => Commands.removeMath(commandRef, start),
|
|
595
741
|
copyToClipboard: () => Commands.copyToClipboard(commandRef),
|
|
742
|
+
resolvePaste: (text, markdown = '') =>
|
|
743
|
+
Commands.resolvePaste(commandRef, text, markdown),
|
|
596
744
|
getMarkdown: () =>
|
|
597
745
|
new Promise<string>((resolve, reject) => {
|
|
598
746
|
const requestId = nextRequestId.current++;
|
|
@@ -624,6 +772,7 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
624
772
|
scrollEnabled={scrollEnabled}
|
|
625
773
|
blockSyntax={blockSyntax}
|
|
626
774
|
autoCapitalize={autoCapitalize}
|
|
775
|
+
interceptPaste={interceptPaste === true && onPaste != null}
|
|
627
776
|
multiline={multiline}
|
|
628
777
|
cursorColor={cursorColor}
|
|
629
778
|
selectionColor={selectionColor}
|
|
@@ -634,8 +783,10 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
634
783
|
handleChangeSelection as NativeProps['onChangeSelection']
|
|
635
784
|
}
|
|
636
785
|
onChangeState={handleChangeState as NativeProps['onChangeState']}
|
|
786
|
+
onInputKeyPress={onKeyPress as NativeProps['onInputKeyPress']}
|
|
637
787
|
onLinkDetected={handleLinkDetected as NativeProps['onLinkDetected']}
|
|
638
788
|
onMathPress={handleMathPress as NativeProps['onMathPress']}
|
|
789
|
+
onPaste={handlePaste as NativeProps['onPaste']}
|
|
639
790
|
onInputFocus={handleFocus as NativeProps['onInputFocus']}
|
|
640
791
|
onInputBlur={handleBlur as NativeProps['onInputBlur']}
|
|
641
792
|
onRequestMarkdownResult={
|
|
@@ -8,7 +8,13 @@ import {
|
|
|
8
8
|
} from 'react-native';
|
|
9
9
|
import type React from 'react';
|
|
10
10
|
|
|
11
|
-
interface
|
|
11
|
+
interface HeadingStyleInternal {
|
|
12
|
+
fontSize: CodegenTypes.Float;
|
|
13
|
+
fontWeight: string;
|
|
14
|
+
color: ColorValue;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
interface InputInlineMathStyleInternal {
|
|
12
18
|
color: ColorValue;
|
|
13
19
|
fontSize: CodegenTypes.Float;
|
|
14
20
|
backgroundColor: ColorValue;
|
|
@@ -22,10 +28,10 @@ interface MathStyleInternal {
|
|
|
22
28
|
fontWeight: string;
|
|
23
29
|
}
|
|
24
30
|
|
|
25
|
-
interface
|
|
31
|
+
interface InputMathStyleInternal extends InputInlineMathStyleInternal {
|
|
26
32
|
marginTop: CodegenTypes.Float;
|
|
27
33
|
marginBottom: CodegenTypes.Float;
|
|
28
|
-
|
|
34
|
+
textAlign: string;
|
|
29
35
|
}
|
|
30
36
|
|
|
31
37
|
interface MarkdownTextInputStyleInternal {
|
|
@@ -52,8 +58,27 @@ interface MarkdownTextInputStyleInternal {
|
|
|
52
58
|
color: ColorValue;
|
|
53
59
|
backgroundColor: ColorValue;
|
|
54
60
|
};
|
|
55
|
-
|
|
56
|
-
|
|
61
|
+
// Per-level heading styles, mirroring the readonly renderer's markdownStyle
|
|
62
|
+
// h1..h6 so heading sizing is configured consistently across read and edit
|
|
63
|
+
// views. Always provided with complete defaults via normalizeMarkdownTextInputStyle.
|
|
64
|
+
h1: HeadingStyleInternal;
|
|
65
|
+
h2: HeadingStyleInternal;
|
|
66
|
+
h3: HeadingStyleInternal;
|
|
67
|
+
h4: HeadingStyleInternal;
|
|
68
|
+
h5: HeadingStyleInternal;
|
|
69
|
+
h6: HeadingStyleInternal;
|
|
70
|
+
list: {
|
|
71
|
+
// Vertical spacing (points) added above each list item. iOS applies it via
|
|
72
|
+
// paragraphSpacingBefore; Android via a LineHeightSpan. Float for parity with
|
|
73
|
+
// every other spacing value in the library.
|
|
74
|
+
itemSpacing: CodegenTypes.Float;
|
|
75
|
+
};
|
|
76
|
+
// Inline math (`$...$`) chip; block math (`$$...$$`) chip. Key names and the
|
|
77
|
+
// shared field names match the read-only renderer's markdownStyle. The
|
|
78
|
+
// author-facing `math.padding` shorthand is expanded into the two axes by
|
|
79
|
+
// normalizeMarkdownTextInputStyle, so nothing below carries it.
|
|
80
|
+
inlineMath: InputInlineMathStyleInternal;
|
|
81
|
+
math: InputMathStyleInternal;
|
|
57
82
|
}
|
|
58
83
|
|
|
59
84
|
interface TargetedEvent {
|
|
@@ -68,6 +93,10 @@ export interface OnChangeMarkdownEvent {
|
|
|
68
93
|
value: string;
|
|
69
94
|
}
|
|
70
95
|
|
|
96
|
+
export interface OnKeyPressEvent {
|
|
97
|
+
key: string;
|
|
98
|
+
}
|
|
99
|
+
|
|
71
100
|
export interface OnChangeSelectionEvent {
|
|
72
101
|
start: CodegenTypes.Int32;
|
|
73
102
|
end: CodegenTypes.Int32;
|
|
@@ -80,6 +109,9 @@ export interface OnChangeStateEvent {
|
|
|
80
109
|
strikethrough: { isActive: boolean };
|
|
81
110
|
spoiler: { isActive: boolean };
|
|
82
111
|
link: { isActive: boolean };
|
|
112
|
+
heading: { isActive: boolean; level: CodegenTypes.Int32 };
|
|
113
|
+
unorderedList: { isActive: boolean; depth: CodegenTypes.Int32 };
|
|
114
|
+
orderedList: { isActive: boolean; depth: CodegenTypes.Int32 };
|
|
83
115
|
}
|
|
84
116
|
|
|
85
117
|
export interface OnRequestMarkdownResultEvent {
|
|
@@ -141,6 +173,11 @@ export interface OnEndMentionEvent {
|
|
|
141
173
|
indicator: string;
|
|
142
174
|
}
|
|
143
175
|
|
|
176
|
+
export interface OnPasteEvent {
|
|
177
|
+
text: string;
|
|
178
|
+
markdown: string;
|
|
179
|
+
}
|
|
180
|
+
|
|
144
181
|
export interface ContextMenuItemConfig {
|
|
145
182
|
text: string;
|
|
146
183
|
icon?: string;
|
|
@@ -180,6 +217,9 @@ export interface OnContextMenuItemPressEvent {
|
|
|
180
217
|
strikethrough: { isActive: boolean };
|
|
181
218
|
spoiler: { isActive: boolean };
|
|
182
219
|
link: { isActive: boolean };
|
|
220
|
+
heading: { isActive: boolean; level: CodegenTypes.Int32 };
|
|
221
|
+
unorderedList: { isActive: boolean; depth: CodegenTypes.Int32 };
|
|
222
|
+
orderedList: { isActive: boolean; depth: CodegenTypes.Int32 };
|
|
183
223
|
};
|
|
184
224
|
}
|
|
185
225
|
|
|
@@ -226,6 +266,16 @@ export interface NativeProps extends ViewProps {
|
|
|
226
266
|
* Auto-capitalization behavior.
|
|
227
267
|
*/
|
|
228
268
|
autoCapitalize?: string;
|
|
269
|
+
/**
|
|
270
|
+
* When `true`, a paste is reported through `onPaste` instead of being
|
|
271
|
+
* inserted. Native reads the clipboard and leaves the buffer untouched — the
|
|
272
|
+
* JS handler decides what happens and must call the `resolvePaste` command
|
|
273
|
+
* exactly once, or the paste is dropped.
|
|
274
|
+
*
|
|
275
|
+
* macOS ignores this prop and always pastes inline.
|
|
276
|
+
* @default false
|
|
277
|
+
*/
|
|
278
|
+
interceptPaste?: boolean;
|
|
229
279
|
/**
|
|
230
280
|
* Whether the input supports multiple lines.
|
|
231
281
|
* @default true
|
|
@@ -303,6 +353,7 @@ export interface NativeProps extends ViewProps {
|
|
|
303
353
|
onChangeText?: CodegenTypes.DirectEventHandler<OnChangeTextEvent>;
|
|
304
354
|
onChangeMarkdown?: CodegenTypes.DirectEventHandler<OnChangeMarkdownEvent>;
|
|
305
355
|
onChangeSelection?: CodegenTypes.DirectEventHandler<OnChangeSelectionEvent>;
|
|
356
|
+
onInputKeyPress?: CodegenTypes.DirectEventHandler<OnKeyPressEvent>;
|
|
306
357
|
onChangeState?: CodegenTypes.DirectEventHandler<OnChangeStateEvent>;
|
|
307
358
|
onInputFocus?: CodegenTypes.DirectEventHandler<TargetedEvent>;
|
|
308
359
|
onInputBlur?: CodegenTypes.DirectEventHandler<TargetedEvent>;
|
|
@@ -312,6 +363,7 @@ export interface NativeProps extends ViewProps {
|
|
|
312
363
|
onContextMenuItemPress?: CodegenTypes.DirectEventHandler<OnContextMenuItemPressEvent>;
|
|
313
364
|
onLinkDetected?: CodegenTypes.DirectEventHandler<OnLinkDetected>;
|
|
314
365
|
onMathPress?: CodegenTypes.DirectEventHandler<OnMathPressNativeEvent>;
|
|
366
|
+
onPaste?: CodegenTypes.DirectEventHandler<OnPasteEvent>;
|
|
315
367
|
onStartMention?: CodegenTypes.DirectEventHandler<OnStartMentionEvent>;
|
|
316
368
|
onChangeMention?: CodegenTypes.DirectEventHandler<OnChangeMentionEvent>;
|
|
317
369
|
onEndMention?: CodegenTypes.DirectEventHandler<OnEndMentionEvent>;
|
|
@@ -336,12 +388,21 @@ interface NativeCommands {
|
|
|
336
388
|
toggleUnderline: (viewRef: React.ElementRef<ComponentType>) => void;
|
|
337
389
|
toggleStrikethrough: (viewRef: React.ElementRef<ComponentType>) => void;
|
|
338
390
|
toggleSpoiler: (viewRef: React.ElementRef<ComponentType>) => void;
|
|
391
|
+
toggleHeading: (
|
|
392
|
+
viewRef: React.ElementRef<ComponentType>,
|
|
393
|
+
level: CodegenTypes.Int32
|
|
394
|
+
) => void;
|
|
395
|
+
toggleUnorderedList: (viewRef: React.ElementRef<ComponentType>) => void;
|
|
396
|
+
toggleOrderedList: (viewRef: React.ElementRef<ComponentType>) => void;
|
|
397
|
+
indentList: (viewRef: React.ElementRef<ComponentType>) => void;
|
|
398
|
+
outdentList: (viewRef: React.ElementRef<ComponentType>) => void;
|
|
339
399
|
setLink: (viewRef: React.ElementRef<ComponentType>, url: string) => void;
|
|
340
400
|
insertLink: (
|
|
341
401
|
viewRef: React.ElementRef<ComponentType>,
|
|
342
402
|
text: string,
|
|
343
403
|
url: string
|
|
344
404
|
) => void;
|
|
405
|
+
insertText: (viewRef: React.ElementRef<ComponentType>, text: string) => void;
|
|
345
406
|
insertMention: (
|
|
346
407
|
viewRef: React.ElementRef<ComponentType>,
|
|
347
408
|
displayText: string,
|
|
@@ -368,6 +429,11 @@ interface NativeCommands {
|
|
|
368
429
|
start: CodegenTypes.Int32
|
|
369
430
|
) => void;
|
|
370
431
|
copyToClipboard: (viewRef: React.ElementRef<ComponentType>) => void;
|
|
432
|
+
resolvePaste: (
|
|
433
|
+
viewRef: React.ElementRef<ComponentType>,
|
|
434
|
+
text: string,
|
|
435
|
+
markdown: string
|
|
436
|
+
) => void;
|
|
371
437
|
requestMarkdown: (
|
|
372
438
|
viewRef: React.ElementRef<ComponentType>,
|
|
373
439
|
requestId: CodegenTypes.Int32
|
|
@@ -389,8 +455,14 @@ export const Commands: NativeCommands = codegenNativeCommands<NativeCommands>({
|
|
|
389
455
|
'toggleUnderline',
|
|
390
456
|
'toggleStrikethrough',
|
|
391
457
|
'toggleSpoiler',
|
|
458
|
+
'toggleHeading',
|
|
459
|
+
'toggleUnorderedList',
|
|
460
|
+
'toggleOrderedList',
|
|
461
|
+
'indentList',
|
|
462
|
+
'outdentList',
|
|
392
463
|
'setLink',
|
|
393
464
|
'insertLink',
|
|
465
|
+
'insertText',
|
|
394
466
|
'insertMention',
|
|
395
467
|
'startMention',
|
|
396
468
|
'removeLink',
|
|
@@ -398,6 +470,7 @@ export const Commands: NativeCommands = codegenNativeCommands<NativeCommands>({
|
|
|
398
470
|
'updateMath',
|
|
399
471
|
'removeMath',
|
|
400
472
|
'copyToClipboard',
|
|
473
|
+
'resolvePaste',
|
|
401
474
|
'requestMarkdown',
|
|
402
475
|
'requestCaretRect',
|
|
403
476
|
],
|
|
@@ -29,6 +29,8 @@ interface BlockquoteStyleInternal extends BaseBlockStyleInternal {
|
|
|
29
29
|
borderWidth: CodegenTypes.Float;
|
|
30
30
|
gapWidth: CodegenTypes.Float;
|
|
31
31
|
backgroundColor: ColorValue;
|
|
32
|
+
borderRadius: CodegenTypes.Float;
|
|
33
|
+
padding: CodegenTypes.Float;
|
|
32
34
|
}
|
|
33
35
|
|
|
34
36
|
interface ListStyleInternal extends BaseBlockStyleInternal {
|
|
@@ -39,6 +41,24 @@ interface ListStyleInternal extends BaseBlockStyleInternal {
|
|
|
39
41
|
markerFontWeight: string;
|
|
40
42
|
gapWidth: CodegenTypes.Float;
|
|
41
43
|
marginLeft: CodegenTypes.Float;
|
|
44
|
+
itemSpacing: CodegenTypes.Float;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
interface CodeBlockSyntaxColorsInternal {
|
|
48
|
+
keyword: ColorValue;
|
|
49
|
+
operatorColor: ColorValue;
|
|
50
|
+
punctuation: ColorValue;
|
|
51
|
+
string: ColorValue;
|
|
52
|
+
number: ColorValue;
|
|
53
|
+
constant: ColorValue;
|
|
54
|
+
comment: ColorValue;
|
|
55
|
+
function: ColorValue;
|
|
56
|
+
type: ColorValue;
|
|
57
|
+
variable: ColorValue;
|
|
58
|
+
property: ColorValue;
|
|
59
|
+
tag: ColorValue;
|
|
60
|
+
attribute: ColorValue;
|
|
61
|
+
embedded: ColorValue;
|
|
42
62
|
}
|
|
43
63
|
|
|
44
64
|
interface CodeBlockStyleInternal extends BaseBlockStyleInternal {
|
|
@@ -47,6 +67,7 @@ interface CodeBlockStyleInternal extends BaseBlockStyleInternal {
|
|
|
47
67
|
borderRadius: CodegenTypes.Float;
|
|
48
68
|
borderWidth: CodegenTypes.Float;
|
|
49
69
|
padding: CodegenTypes.Float;
|
|
70
|
+
syntaxColors: CodeBlockSyntaxColorsInternal;
|
|
50
71
|
}
|
|
51
72
|
|
|
52
73
|
interface LinkStyleInternal {
|
|
@@ -94,6 +115,10 @@ interface CodeStyleInternal {
|
|
|
94
115
|
|
|
95
116
|
interface ImageStyleInternal {
|
|
96
117
|
height: CodegenTypes.Float;
|
|
118
|
+
maxHeight: CodegenTypes.Float;
|
|
119
|
+
aspectRatio: CodegenTypes.Float;
|
|
120
|
+
// Nested struct fields cannot use WithDefault; default is applied in JS normalization.
|
|
121
|
+
resizeMode: string;
|
|
97
122
|
borderRadius: CodegenTypes.Float;
|
|
98
123
|
marginTop: CodegenTypes.Float;
|
|
99
124
|
marginBottom: CodegenTypes.Float;
|
|
@@ -121,6 +146,8 @@ interface TableStyleInternal extends BaseBlockStyleInternal {
|
|
|
121
146
|
borderRadius: CodegenTypes.Float;
|
|
122
147
|
cellPaddingHorizontal: CodegenTypes.Float;
|
|
123
148
|
cellPaddingVertical: CodegenTypes.Float;
|
|
149
|
+
horizontalOverflow: CodegenTypes.Float;
|
|
150
|
+
align: string;
|
|
124
151
|
}
|
|
125
152
|
|
|
126
153
|
interface TaskListStyleInternal {
|
|
@@ -225,11 +252,21 @@ export interface TaskListItemPressEvent {
|
|
|
225
252
|
text: string;
|
|
226
253
|
}
|
|
227
254
|
|
|
255
|
+
export interface CopyPressEvent {
|
|
256
|
+
code: string;
|
|
257
|
+
language: string;
|
|
258
|
+
}
|
|
259
|
+
|
|
228
260
|
export interface ContextMenuItemConfig {
|
|
229
261
|
text: string;
|
|
230
262
|
icon?: string;
|
|
231
263
|
}
|
|
232
264
|
|
|
265
|
+
export interface ImageRequestHeaderInternal {
|
|
266
|
+
name: string;
|
|
267
|
+
value: string;
|
|
268
|
+
}
|
|
269
|
+
|
|
233
270
|
export interface SelectionMenuConfig {
|
|
234
271
|
copyAsMarkdown: boolean;
|
|
235
272
|
copyImageUrl: boolean;
|
|
@@ -240,6 +277,14 @@ export interface SelectionMenuConfig {
|
|
|
240
277
|
// Precomputed plural templates indexed by image count (0..100). Empty when no
|
|
241
278
|
// pluralLabels are set; native then uses copyImageUrlLabel/copyImageUrlsLabel.
|
|
242
279
|
copyImageUrlPluralTemplates: ReadonlyArray<string>;
|
|
280
|
+
// false removes the Copy item from the text and block menus.
|
|
281
|
+
copyEnabled: boolean;
|
|
282
|
+
// true: Copy writes Markdown (plain text) instead of rich text / raw block content.
|
|
283
|
+
copyFormatMarkdown: boolean;
|
|
284
|
+
// true: the text selection menu drops every system-provided item.
|
|
285
|
+
systemItemsNone: boolean;
|
|
286
|
+
// false hides the copy button in the code block header.
|
|
287
|
+
codeBlockCopyButton: boolean;
|
|
243
288
|
}
|
|
244
289
|
|
|
245
290
|
export interface OnContextMenuItemPressEvent {
|
|
@@ -311,10 +356,16 @@ export interface Md4cFlagsInternal {
|
|
|
311
356
|
* @default false
|
|
312
357
|
*/
|
|
313
358
|
highlight: boolean;
|
|
359
|
+
/**
|
|
360
|
+
* Treat soft breaks (single newlines) as hard breaks (visible line breaks).
|
|
361
|
+
* @default false
|
|
362
|
+
*/
|
|
363
|
+
hardSoftBreaks: boolean;
|
|
314
364
|
}
|
|
315
365
|
|
|
316
366
|
interface StreamingConfigInternal {
|
|
317
367
|
tableMode: string;
|
|
368
|
+
codeBlockMode: string;
|
|
318
369
|
}
|
|
319
370
|
|
|
320
371
|
export interface NativeProps extends ViewProps {
|
|
@@ -345,6 +396,21 @@ export interface NativeProps extends ViewProps {
|
|
|
345
396
|
* Receives the 0-based task index, current checked state, and the item's plain text.
|
|
346
397
|
*/
|
|
347
398
|
onTaskListItemPress?: CodegenTypes.BubblingEventHandler<TaskListItemPressEvent>;
|
|
399
|
+
/**
|
|
400
|
+
* Controls whether tapping a task list checkbox toggles its checked state.
|
|
401
|
+
*
|
|
402
|
+
* When `false`, the tap is fully inert: no visual toggle and no
|
|
403
|
+
* `onTaskListItemPress` emission. Text selection and links are unaffected.
|
|
404
|
+
*
|
|
405
|
+
* @default true
|
|
406
|
+
*/
|
|
407
|
+
enableTaskListItemToggle?: CodegenTypes.WithDefault<boolean, true>;
|
|
408
|
+
/**
|
|
409
|
+
* Callback fired when code is copied from a fenced code block's header copy
|
|
410
|
+
* button, its long-press context-menu "Copy" action, or the VoiceOver copy
|
|
411
|
+
* action. Receives the copied code and its language.
|
|
412
|
+
*/
|
|
413
|
+
onCopyPress?: CodegenTypes.BubblingEventHandler<CopyPressEvent>;
|
|
348
414
|
/**
|
|
349
415
|
* Controls whether the system link preview is shown on long press (iOS only).
|
|
350
416
|
*
|
|
@@ -424,10 +490,18 @@ export interface NativeProps extends ViewProps {
|
|
|
424
490
|
* @default 'particles'
|
|
425
491
|
*/
|
|
426
492
|
spoilerOverlay?: CodegenTypes.WithDefault<string, 'particles'>;
|
|
493
|
+
/**
|
|
494
|
+
* Hides the text selection context menu while keeping text selectable.
|
|
495
|
+
*/
|
|
496
|
+
contextMenuHidden?: CodegenTypes.WithDefault<boolean, false>;
|
|
427
497
|
/**
|
|
428
498
|
* Custom items to show in the text selection context menu.
|
|
429
499
|
*/
|
|
430
500
|
contextMenuItems?: ReadonlyArray<Readonly<ContextMenuItemConfig>>;
|
|
501
|
+
/**
|
|
502
|
+
* HTTP headers attached to remote image requests, as name/value pairs.
|
|
503
|
+
*/
|
|
504
|
+
imageRequestHeaders?: ReadonlyArray<Readonly<ImageRequestHeaderInternal>>;
|
|
431
505
|
/**
|
|
432
506
|
* Built-in items to show in the text selection context menu.
|
|
433
507
|
*/
|