react-native-enriched-markdown-scaffold 0.7.4-scaffold.8 → 1.0.2-scaffold.1
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 +191 -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 +27 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextInputManagerInterface.java +9 -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 +40 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.h +839 -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 +175 -11
- 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 +62 -4
- package/android/src/main/java/com/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputView.kt +911 -460
- 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/BlockSyntaxSentinel.kt +69 -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 +180 -27
- 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 +7 -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 +33 -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 +19 -2
- package/android/src/main/java/com/swmansion/enriched/markdown/views/CodeBlockContainerView.kt +388 -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 +32 -5
- 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 +2 -0
- 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 +231 -8
- package/docs/BREAKING_CHANGES.md +129 -0
- package/docs/CODE_HIGHLIGHT.md +133 -0
- package/docs/COPY_OPTIONS.md +21 -3
- package/docs/ELEMENTS_STRUCTURE.md +52 -4
- package/docs/IMAGE_CACHING.md +30 -0
- package/docs/INPUT.md +146 -5
- 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 +262 -67
- package/ios/EnrichedMarkdownText.h +7 -0
- package/ios/EnrichedMarkdownText.mm +97 -68
- 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 +40 -0
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/Props.h +839 -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/ENRMBlockSyntaxSentinel.h +25 -0
- package/ios/input/ENRMBlockSyntaxSentinel.mm +80 -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 +10 -6
- package/ios/input/ENRMInputParser.mm +527 -171
- 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 +1104 -1024
- 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/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.m +22 -1
- 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 +46 -0
- package/ios/views/ENRMCodeBlockContainerView.m +566 -0
- package/ios/views/ENRMMathContainerView.h +12 -0
- package/ios/views/ENRMMathContainerView.m +71 -1
- package/ios/views/TableContainerView.h +18 -0
- package/ios/views/TableContainerView.m +259 -159
- package/jest.d.ts +1 -0
- package/jest.js +5 -0
- package/lib/module/EnrichedMarkdownNativeComponent.ts +65 -0
- package/lib/module/EnrichedMarkdownTextInput.js +86 -5
- package/lib/module/EnrichedMarkdownTextInput.js.map +1 -1
- package/lib/module/EnrichedMarkdownTextInputNativeComponent.ts +89 -5
- package/lib/module/EnrichedMarkdownTextNativeComponent.ts +66 -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 +30 -4
- 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 +62 -0
- package/lib/typescript/src/EnrichedMarkdownNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/EnrichedMarkdownTextInput.d.ts +95 -9
- package/lib/typescript/src/EnrichedMarkdownTextInput.d.ts.map +1 -1
- package/lib/typescript/src/EnrichedMarkdownTextInputNativeComponent.d.ts +80 -5
- package/lib/typescript/src/EnrichedMarkdownTextInputNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts +62 -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 +65 -1
- 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 +65 -0
- package/src/EnrichedMarkdownTextInput.tsx +162 -8
- package/src/EnrichedMarkdownTextInputNativeComponent.ts +89 -5
- package/src/EnrichedMarkdownTextNativeComponent.ts +66 -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 +40 -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 +65 -0
- 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
|
}
|
|
@@ -204,7 +276,17 @@ export interface EnrichedMarkdownTextInputProps extends Omit<
|
|
|
204
276
|
editable?: boolean;
|
|
205
277
|
autoFocus?: boolean;
|
|
206
278
|
scrollEnabled?: boolean;
|
|
279
|
+
blockSyntax?: boolean;
|
|
207
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;
|
|
208
290
|
multiline?: boolean;
|
|
209
291
|
cursorColor?: ColorValue;
|
|
210
292
|
selectionColor?: ColorValue;
|
|
@@ -214,9 +296,16 @@ export interface EnrichedMarkdownTextInputProps extends Omit<
|
|
|
214
296
|
onChangeMarkdown?: (markdown: string) => void;
|
|
215
297
|
onChangeSelection?: (selection: { start: number; end: number }) => void;
|
|
216
298
|
onChangeState?: (state: StyleState) => void;
|
|
299
|
+
onKeyPress?: (e: NativeSyntheticEvent<OnKeyPressEvent>) => void;
|
|
217
300
|
onCaretRectChange?: (rect: CaretRect) => void;
|
|
218
301
|
onLinkDetected?: (event: OnLinkDetected) => void;
|
|
219
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;
|
|
220
309
|
mentionIndicators?: string[];
|
|
221
310
|
onStartMention?: (event: OnStartMentionEvent) => void;
|
|
222
311
|
onChangeMention?: (event: OnChangeMentionEvent) => void;
|
|
@@ -284,7 +373,9 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
284
373
|
editable = true,
|
|
285
374
|
autoFocus = false,
|
|
286
375
|
scrollEnabled = true,
|
|
376
|
+
blockSyntax = true,
|
|
287
377
|
autoCapitalize = 'sentences',
|
|
378
|
+
interceptPaste = false,
|
|
288
379
|
multiline = true,
|
|
289
380
|
cursorColor,
|
|
290
381
|
selectionColor,
|
|
@@ -292,9 +383,11 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
292
383
|
onChangeMarkdown,
|
|
293
384
|
onChangeSelection,
|
|
294
385
|
onChangeState,
|
|
386
|
+
onKeyPress,
|
|
295
387
|
onCaretRectChange,
|
|
296
388
|
onLinkDetected,
|
|
297
389
|
onMathPress,
|
|
390
|
+
onPaste,
|
|
298
391
|
mentionIndicators,
|
|
299
392
|
onStartMention,
|
|
300
393
|
onChangeMention,
|
|
@@ -352,6 +445,27 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
352
445
|
};
|
|
353
446
|
}, []);
|
|
354
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
|
+
|
|
355
469
|
const normalizedStyle = normalizeMarkdownTextInputStyle(markdownStyle);
|
|
356
470
|
|
|
357
471
|
const normalizedSelectionMenuConfig = useMemo(() => {
|
|
@@ -436,6 +550,14 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
436
550
|
[onMathPress]
|
|
437
551
|
);
|
|
438
552
|
|
|
553
|
+
const handlePaste = useCallback(
|
|
554
|
+
(e: NativeSyntheticEvent<OnPasteEvent>) => {
|
|
555
|
+
const { text, markdown } = e.nativeEvent;
|
|
556
|
+
onPaste?.({ text, markdown });
|
|
557
|
+
},
|
|
558
|
+
[onPaste]
|
|
559
|
+
);
|
|
560
|
+
|
|
439
561
|
const handleChangeText = useCallback(
|
|
440
562
|
(e: NativeSyntheticEvent<OnChangeTextEvent>) => {
|
|
441
563
|
onChangeText?.(e.nativeEvent.value);
|
|
@@ -460,8 +582,17 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
460
582
|
|
|
461
583
|
const handleChangeState = useCallback(
|
|
462
584
|
(e: NativeSyntheticEvent<OnChangeStateEvent>) => {
|
|
463
|
-
const {
|
|
464
|
-
|
|
585
|
+
const {
|
|
586
|
+
bold,
|
|
587
|
+
italic,
|
|
588
|
+
underline,
|
|
589
|
+
strikethrough,
|
|
590
|
+
spoiler,
|
|
591
|
+
link,
|
|
592
|
+
heading,
|
|
593
|
+
unorderedList,
|
|
594
|
+
orderedList,
|
|
595
|
+
} = e.nativeEvent;
|
|
465
596
|
onChangeState?.({
|
|
466
597
|
bold,
|
|
467
598
|
italic,
|
|
@@ -469,6 +600,9 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
469
600
|
strikethrough,
|
|
470
601
|
spoiler,
|
|
471
602
|
link,
|
|
603
|
+
heading: { ...heading, level: toHeadingLevel(heading.level) },
|
|
604
|
+
unorderedList,
|
|
605
|
+
orderedList,
|
|
472
606
|
});
|
|
473
607
|
},
|
|
474
608
|
[onChangeState]
|
|
@@ -504,10 +638,12 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
504
638
|
);
|
|
505
639
|
|
|
506
640
|
const handleFocus = useCallback(() => {
|
|
641
|
+
TextInputState.focusInput(nativeRef.current);
|
|
507
642
|
onFocus?.();
|
|
508
643
|
}, [onFocus]);
|
|
509
644
|
|
|
510
645
|
const handleBlur = useCallback(() => {
|
|
646
|
+
TextInputState.blurInput(nativeRef.current);
|
|
511
647
|
onBlur?.();
|
|
512
648
|
}, [onBlur]);
|
|
513
649
|
|
|
@@ -548,7 +684,13 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
548
684
|
callback?.({
|
|
549
685
|
text: selectedText,
|
|
550
686
|
selection: { start: selectionStart, end: selectionEnd },
|
|
551
|
-
styleState
|
|
687
|
+
styleState: {
|
|
688
|
+
...styleState,
|
|
689
|
+
heading: {
|
|
690
|
+
...styleState.heading,
|
|
691
|
+
level: toHeadingLevel(styleState.heading.level),
|
|
692
|
+
},
|
|
693
|
+
},
|
|
552
694
|
});
|
|
553
695
|
},
|
|
554
696
|
[]
|
|
@@ -574,8 +716,14 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
574
716
|
toggleUnderline: () => Commands.toggleUnderline(commandRef),
|
|
575
717
|
toggleStrikethrough: () => Commands.toggleStrikethrough(commandRef),
|
|
576
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),
|
|
577
724
|
setLink: (url) => Commands.setLink(commandRef, url),
|
|
578
725
|
insertLink: (text, url) => Commands.insertLink(commandRef, text, url),
|
|
726
|
+
insertText: (text) => Commands.insertText(commandRef, text),
|
|
579
727
|
insertMention: (displayText, url) =>
|
|
580
728
|
Commands.insertMention(commandRef, displayText, url),
|
|
581
729
|
startMention: (indicator) => Commands.startMention(commandRef, indicator),
|
|
@@ -591,6 +739,8 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
591
739
|
),
|
|
592
740
|
removeMath: (start) => Commands.removeMath(commandRef, start),
|
|
593
741
|
copyToClipboard: () => Commands.copyToClipboard(commandRef),
|
|
742
|
+
resolvePaste: (text, markdown = '') =>
|
|
743
|
+
Commands.resolvePaste(commandRef, text, markdown),
|
|
594
744
|
getMarkdown: () =>
|
|
595
745
|
new Promise<string>((resolve, reject) => {
|
|
596
746
|
const requestId = nextRequestId.current++;
|
|
@@ -620,7 +770,9 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
620
770
|
editable={editable}
|
|
621
771
|
autoFocus={autoFocus}
|
|
622
772
|
scrollEnabled={scrollEnabled}
|
|
773
|
+
blockSyntax={blockSyntax}
|
|
623
774
|
autoCapitalize={autoCapitalize}
|
|
775
|
+
interceptPaste={interceptPaste === true && onPaste != null}
|
|
624
776
|
multiline={multiline}
|
|
625
777
|
cursorColor={cursorColor}
|
|
626
778
|
selectionColor={selectionColor}
|
|
@@ -631,8 +783,10 @@ export const EnrichedMarkdownTextInput = ({
|
|
|
631
783
|
handleChangeSelection as NativeProps['onChangeSelection']
|
|
632
784
|
}
|
|
633
785
|
onChangeState={handleChangeState as NativeProps['onChangeState']}
|
|
786
|
+
onInputKeyPress={onKeyPress as NativeProps['onInputKeyPress']}
|
|
634
787
|
onLinkDetected={handleLinkDetected as NativeProps['onLinkDetected']}
|
|
635
788
|
onMathPress={handleMathPress as NativeProps['onMathPress']}
|
|
789
|
+
onPaste={handlePaste as NativeProps['onPaste']}
|
|
636
790
|
onInputFocus={handleFocus as NativeProps['onInputFocus']}
|
|
637
791
|
onInputBlur={handleBlur as NativeProps['onInputBlur']}
|
|
638
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
|
|
|
@@ -211,10 +251,31 @@ export interface NativeProps extends ViewProps {
|
|
|
211
251
|
* @default true
|
|
212
252
|
*/
|
|
213
253
|
scrollEnabled?: boolean;
|
|
254
|
+
/**
|
|
255
|
+
* Whether block-level markdown syntax is interpreted.
|
|
256
|
+
*
|
|
257
|
+
* When `false`, list markers, headings, blockquotes, tables, code blocks and
|
|
258
|
+
* thematic breaks stay in the text verbatim instead of being consumed as
|
|
259
|
+
* structure, so the markdown round-trips byte-for-byte. Inline syntax
|
|
260
|
+
* (`**bold**`, links, `$math$`) still applies. `\r\n` is normalized to `\n`
|
|
261
|
+
* and `U+000B` is stripped from the input.
|
|
262
|
+
* @default true
|
|
263
|
+
*/
|
|
264
|
+
blockSyntax?: boolean;
|
|
214
265
|
/**
|
|
215
266
|
* Auto-capitalization behavior.
|
|
216
267
|
*/
|
|
217
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;
|
|
218
279
|
/**
|
|
219
280
|
* Whether the input supports multiple lines.
|
|
220
281
|
* @default true
|
|
@@ -292,6 +353,7 @@ export interface NativeProps extends ViewProps {
|
|
|
292
353
|
onChangeText?: CodegenTypes.DirectEventHandler<OnChangeTextEvent>;
|
|
293
354
|
onChangeMarkdown?: CodegenTypes.DirectEventHandler<OnChangeMarkdownEvent>;
|
|
294
355
|
onChangeSelection?: CodegenTypes.DirectEventHandler<OnChangeSelectionEvent>;
|
|
356
|
+
onInputKeyPress?: CodegenTypes.DirectEventHandler<OnKeyPressEvent>;
|
|
295
357
|
onChangeState?: CodegenTypes.DirectEventHandler<OnChangeStateEvent>;
|
|
296
358
|
onInputFocus?: CodegenTypes.DirectEventHandler<TargetedEvent>;
|
|
297
359
|
onInputBlur?: CodegenTypes.DirectEventHandler<TargetedEvent>;
|
|
@@ -301,6 +363,7 @@ export interface NativeProps extends ViewProps {
|
|
|
301
363
|
onContextMenuItemPress?: CodegenTypes.DirectEventHandler<OnContextMenuItemPressEvent>;
|
|
302
364
|
onLinkDetected?: CodegenTypes.DirectEventHandler<OnLinkDetected>;
|
|
303
365
|
onMathPress?: CodegenTypes.DirectEventHandler<OnMathPressNativeEvent>;
|
|
366
|
+
onPaste?: CodegenTypes.DirectEventHandler<OnPasteEvent>;
|
|
304
367
|
onStartMention?: CodegenTypes.DirectEventHandler<OnStartMentionEvent>;
|
|
305
368
|
onChangeMention?: CodegenTypes.DirectEventHandler<OnChangeMentionEvent>;
|
|
306
369
|
onEndMention?: CodegenTypes.DirectEventHandler<OnEndMentionEvent>;
|
|
@@ -325,12 +388,21 @@ interface NativeCommands {
|
|
|
325
388
|
toggleUnderline: (viewRef: React.ElementRef<ComponentType>) => void;
|
|
326
389
|
toggleStrikethrough: (viewRef: React.ElementRef<ComponentType>) => void;
|
|
327
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;
|
|
328
399
|
setLink: (viewRef: React.ElementRef<ComponentType>, url: string) => void;
|
|
329
400
|
insertLink: (
|
|
330
401
|
viewRef: React.ElementRef<ComponentType>,
|
|
331
402
|
text: string,
|
|
332
403
|
url: string
|
|
333
404
|
) => void;
|
|
405
|
+
insertText: (viewRef: React.ElementRef<ComponentType>, text: string) => void;
|
|
334
406
|
insertMention: (
|
|
335
407
|
viewRef: React.ElementRef<ComponentType>,
|
|
336
408
|
displayText: string,
|
|
@@ -357,6 +429,11 @@ interface NativeCommands {
|
|
|
357
429
|
start: CodegenTypes.Int32
|
|
358
430
|
) => void;
|
|
359
431
|
copyToClipboard: (viewRef: React.ElementRef<ComponentType>) => void;
|
|
432
|
+
resolvePaste: (
|
|
433
|
+
viewRef: React.ElementRef<ComponentType>,
|
|
434
|
+
text: string,
|
|
435
|
+
markdown: string
|
|
436
|
+
) => void;
|
|
360
437
|
requestMarkdown: (
|
|
361
438
|
viewRef: React.ElementRef<ComponentType>,
|
|
362
439
|
requestId: CodegenTypes.Int32
|
|
@@ -378,8 +455,14 @@ export const Commands: NativeCommands = codegenNativeCommands<NativeCommands>({
|
|
|
378
455
|
'toggleUnderline',
|
|
379
456
|
'toggleStrikethrough',
|
|
380
457
|
'toggleSpoiler',
|
|
458
|
+
'toggleHeading',
|
|
459
|
+
'toggleUnorderedList',
|
|
460
|
+
'toggleOrderedList',
|
|
461
|
+
'indentList',
|
|
462
|
+
'outdentList',
|
|
381
463
|
'setLink',
|
|
382
464
|
'insertLink',
|
|
465
|
+
'insertText',
|
|
383
466
|
'insertMention',
|
|
384
467
|
'startMention',
|
|
385
468
|
'removeLink',
|
|
@@ -387,6 +470,7 @@ export const Commands: NativeCommands = codegenNativeCommands<NativeCommands>({
|
|
|
387
470
|
'updateMath',
|
|
388
471
|
'removeMath',
|
|
389
472
|
'copyToClipboard',
|
|
473
|
+
'resolvePaste',
|
|
390
474
|
'requestMarkdown',
|
|
391
475
|
'requestCaretRect',
|
|
392
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;
|
|
@@ -311,10 +348,16 @@ export interface Md4cFlagsInternal {
|
|
|
311
348
|
* @default false
|
|
312
349
|
*/
|
|
313
350
|
highlight: boolean;
|
|
351
|
+
/**
|
|
352
|
+
* Treat soft breaks (single newlines) as hard breaks (visible line breaks).
|
|
353
|
+
* @default false
|
|
354
|
+
*/
|
|
355
|
+
hardSoftBreaks: boolean;
|
|
314
356
|
}
|
|
315
357
|
|
|
316
358
|
interface StreamingConfigInternal {
|
|
317
359
|
tableMode: string;
|
|
360
|
+
codeBlockMode: string;
|
|
318
361
|
}
|
|
319
362
|
|
|
320
363
|
export interface NativeProps extends ViewProps {
|
|
@@ -345,6 +388,21 @@ export interface NativeProps extends ViewProps {
|
|
|
345
388
|
* Receives the 0-based task index, current checked state, and the item's plain text.
|
|
346
389
|
*/
|
|
347
390
|
onTaskListItemPress?: CodegenTypes.BubblingEventHandler<TaskListItemPressEvent>;
|
|
391
|
+
/**
|
|
392
|
+
* Controls whether tapping a task list checkbox toggles its checked state.
|
|
393
|
+
*
|
|
394
|
+
* When `false`, the tap is fully inert: no visual toggle and no
|
|
395
|
+
* `onTaskListItemPress` emission. Text selection and links are unaffected.
|
|
396
|
+
*
|
|
397
|
+
* @default true
|
|
398
|
+
*/
|
|
399
|
+
enableTaskListItemToggle?: CodegenTypes.WithDefault<boolean, true>;
|
|
400
|
+
/**
|
|
401
|
+
* Callback fired when code is copied from a fenced code block's header copy
|
|
402
|
+
* button, its long-press context-menu "Copy" action, or the VoiceOver copy
|
|
403
|
+
* action. Receives the copied code and its language.
|
|
404
|
+
*/
|
|
405
|
+
onCopyPress?: CodegenTypes.BubblingEventHandler<CopyPressEvent>;
|
|
348
406
|
/**
|
|
349
407
|
* Controls whether the system link preview is shown on long press (iOS only).
|
|
350
408
|
*
|
|
@@ -424,10 +482,18 @@ export interface NativeProps extends ViewProps {
|
|
|
424
482
|
* @default 'particles'
|
|
425
483
|
*/
|
|
426
484
|
spoilerOverlay?: CodegenTypes.WithDefault<string, 'particles'>;
|
|
485
|
+
/**
|
|
486
|
+
* Hides the text selection context menu while keeping text selectable.
|
|
487
|
+
*/
|
|
488
|
+
contextMenuHidden?: CodegenTypes.WithDefault<boolean, false>;
|
|
427
489
|
/**
|
|
428
490
|
* Custom items to show in the text selection context menu.
|
|
429
491
|
*/
|
|
430
492
|
contextMenuItems?: ReadonlyArray<Readonly<ContextMenuItemConfig>>;
|
|
493
|
+
/**
|
|
494
|
+
* HTTP headers attached to remote image requests, as name/value pairs.
|
|
495
|
+
*/
|
|
496
|
+
imageRequestHeaders?: ReadonlyArray<Readonly<ImageRequestHeaderInternal>>;
|
|
431
497
|
/**
|
|
432
498
|
* Built-in items to show in the text selection context menu.
|
|
433
499
|
*/
|