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
|
@@ -28,6 +28,184 @@
|
|
|
28
28
|
@implementation TableCellData
|
|
29
29
|
@end
|
|
30
30
|
|
|
31
|
+
// Cell rendering and layout are view-free statics so the instance path
|
|
32
|
+
// (applyTableNode:/computeLayout) and the shadow-measurement class method
|
|
33
|
+
// (+measureHeightForTableNode:...) share one implementation and cannot drift
|
|
34
|
+
// (issue #550).
|
|
35
|
+
|
|
36
|
+
static NSTextAlignment ENRMTableTextAlignmentFromString(NSString *align)
|
|
37
|
+
{
|
|
38
|
+
if ([align isEqualToString:@"center"])
|
|
39
|
+
return NSTextAlignmentCenter;
|
|
40
|
+
if ([align isEqualToString:@"right"])
|
|
41
|
+
return NSTextAlignmentRight;
|
|
42
|
+
return NSTextAlignmentLeft;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
static NSString *ENRMTablePlainTextFromNode(MarkdownASTNode *node)
|
|
46
|
+
{
|
|
47
|
+
if (!node)
|
|
48
|
+
return @"";
|
|
49
|
+
NSMutableString *buffer = [node.content mutableCopy] ?: [NSMutableString string];
|
|
50
|
+
for (MarkdownASTNode *child in node.children) {
|
|
51
|
+
[buffer appendString:ENRMTablePlainTextFromNode(child)];
|
|
52
|
+
}
|
|
53
|
+
return [buffer copy];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
static StyleConfig *ENRMTableCellConfig(StyleConfig *config, BOOL isHeader)
|
|
57
|
+
{
|
|
58
|
+
StyleConfig *cellConfig = [config copy];
|
|
59
|
+
|
|
60
|
+
[cellConfig setParagraphFontSize:config.tableFontSize];
|
|
61
|
+
NSString *headerFamily =
|
|
62
|
+
config.tableHeaderFontFamily.length > 0 ? config.tableHeaderFontFamily : config.tableFontFamily;
|
|
63
|
+
[cellConfig setParagraphFontFamily:isHeader ? headerFamily : config.tableFontFamily];
|
|
64
|
+
[cellConfig setParagraphFontWeight:isHeader ? @"bold" : config.tableFontWeight];
|
|
65
|
+
[cellConfig setParagraphColor:isHeader ? config.tableHeaderTextColor : config.tableColor];
|
|
66
|
+
[cellConfig setParagraphLineHeight:config.tableLineHeight];
|
|
67
|
+
|
|
68
|
+
[cellConfig setParagraphMarginTop:0];
|
|
69
|
+
[cellConfig setParagraphMarginBottom:0];
|
|
70
|
+
|
|
71
|
+
return cellConfig;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
static NSMutableAttributedString *ENRMTableRenderCellNode(MarkdownASTNode *cellNode, StyleConfig *cellConfig,
|
|
75
|
+
NSTextAlignment alignment, BOOL allowFontScaling,
|
|
76
|
+
CGFloat maxFontSizeMultiplier,
|
|
77
|
+
ENRMWritingDirectionMode writingDirectionMode,
|
|
78
|
+
NSWritingDirection resolvedLayoutDirection)
|
|
79
|
+
{
|
|
80
|
+
MarkdownASTNode *temporaryRoot = [[MarkdownASTNode alloc] initWithType:MarkdownNodeTypeDocument];
|
|
81
|
+
for (MarkdownASTNode *child in cellNode.children) {
|
|
82
|
+
[temporaryRoot addChild:child];
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
AttributedRenderer *renderer = [[AttributedRenderer alloc] initWithConfig:cellConfig];
|
|
86
|
+
RenderContext *context = [RenderContext new];
|
|
87
|
+
context.allowFontScaling = allowFontScaling;
|
|
88
|
+
context.maxFontSizeMultiplier = maxFontSizeMultiplier;
|
|
89
|
+
|
|
90
|
+
NSMutableAttributedString *attributedText = [renderer renderRoot:temporaryRoot context:context];
|
|
91
|
+
|
|
92
|
+
[context applyLinkAttributesToString:attributedText];
|
|
93
|
+
|
|
94
|
+
ENRMApplyWritingDirectionMode(attributedText, writingDirectionMode, resolvedLayoutDirection);
|
|
95
|
+
|
|
96
|
+
if (alignment != NSTextAlignmentLeft && attributedText.length > 0) {
|
|
97
|
+
NSRange fullRange = NSMakeRange(0, attributedText.length);
|
|
98
|
+
[attributedText
|
|
99
|
+
enumerateAttribute:NSParagraphStyleAttributeName
|
|
100
|
+
inRange:fullRange
|
|
101
|
+
options:0
|
|
102
|
+
usingBlock:^(NSParagraphStyle *paragraphStyle, NSRange range, BOOL *stop) {
|
|
103
|
+
NSMutableParagraphStyle *mutableStyle =
|
|
104
|
+
paragraphStyle ? [paragraphStyle mutableCopy] : [[NSMutableParagraphStyle alloc] init];
|
|
105
|
+
mutableStyle.alignment = alignment;
|
|
106
|
+
[attributedText addAttribute:NSParagraphStyleAttributeName value:mutableStyle range:range];
|
|
107
|
+
}];
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return attributedText;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
static NSArray<NSArray<TableCellData *> *> *ENRMTableBuildRows(MarkdownASTNode *tableNode, StyleConfig *config,
|
|
114
|
+
BOOL allowFontScaling, CGFloat maxFontSizeMultiplier,
|
|
115
|
+
ENRMWritingDirectionMode writingDirectionMode,
|
|
116
|
+
NSWritingDirection resolvedLayoutDirection,
|
|
117
|
+
NSUInteger *outColCount)
|
|
118
|
+
{
|
|
119
|
+
StyleConfig *headerCellConfig = ENRMTableCellConfig(config, YES);
|
|
120
|
+
StyleConfig *bodyCellConfig = ENRMTableCellConfig(config, NO);
|
|
121
|
+
|
|
122
|
+
NSMutableArray *allRows = [NSMutableArray array];
|
|
123
|
+
NSUInteger colCount = 0;
|
|
124
|
+
|
|
125
|
+
for (MarkdownASTNode *section in tableNode.children) {
|
|
126
|
+
BOOL isSectionHead = (section.type == MarkdownNodeTypeTableHead);
|
|
127
|
+
|
|
128
|
+
for (MarkdownASTNode *rowNode in section.children) {
|
|
129
|
+
if (rowNode.type != MarkdownNodeTypeTableRow)
|
|
130
|
+
continue;
|
|
131
|
+
|
|
132
|
+
NSMutableArray<TableCellData *> *rowCells = [NSMutableArray array];
|
|
133
|
+
for (MarkdownASTNode *cellNode in rowNode.children) {
|
|
134
|
+
TableCellData *cell = [[TableCellData alloc] init];
|
|
135
|
+
cell.isHeader = isSectionHead || (cellNode.type == MarkdownNodeTypeTableHeaderCell);
|
|
136
|
+
cell.alignment = ENRMTableTextAlignmentFromString(cellNode.attributes[@"align"]);
|
|
137
|
+
cell.plainText = ENRMTablePlainTextFromNode(cellNode);
|
|
138
|
+
cell.markdownText = markdownFromASTNodeChildren(cellNode);
|
|
139
|
+
|
|
140
|
+
StyleConfig *cellConfig = cell.isHeader ? headerCellConfig : bodyCellConfig;
|
|
141
|
+
cell.attributedText =
|
|
142
|
+
ENRMTableRenderCellNode(cellNode, cellConfig, cell.alignment, allowFontScaling, maxFontSizeMultiplier,
|
|
143
|
+
writingDirectionMode, resolvedLayoutDirection);
|
|
144
|
+
[rowCells addObject:cell];
|
|
145
|
+
}
|
|
146
|
+
colCount = MAX(colCount, rowCells.count);
|
|
147
|
+
[allRows addObject:rowCells];
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (outColCount != NULL) {
|
|
152
|
+
*outColCount = colCount;
|
|
153
|
+
}
|
|
154
|
+
return [allRows copy];
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
static void ENRMTableComputeLayout(NSArray<NSArray<TableCellData *> *> *rows, NSUInteger colCount, StyleConfig *config,
|
|
158
|
+
CGFloat borderWidth, NSMutableArray<NSNumber *> *_Nullable *_Nullable outColWidths,
|
|
159
|
+
NSMutableArray<NSNumber *> *_Nullable *_Nullable outRowHeights,
|
|
160
|
+
CGFloat *_Nullable outTotalWidth, CGFloat *_Nullable outTotalHeight)
|
|
161
|
+
{
|
|
162
|
+
// TODO: Consider making minColumnWidth / maxColumnWidth configurable via style props
|
|
163
|
+
const CGFloat minimumColumnWidth = 60.0;
|
|
164
|
+
const CGFloat maximumColumnWidth = 300.0;
|
|
165
|
+
const CGFloat horizontalPadding = config.tableCellPaddingHorizontal * 2;
|
|
166
|
+
const CGFloat verticalPadding = config.tableCellPaddingVertical * 2;
|
|
167
|
+
|
|
168
|
+
NSMutableArray<NSNumber *> *colWidths = [NSMutableArray arrayWithCapacity:colCount];
|
|
169
|
+
for (NSUInteger i = 0; i < colCount; i++)
|
|
170
|
+
[colWidths addObject:@0];
|
|
171
|
+
|
|
172
|
+
for (NSArray<TableCellData *> *row in rows) {
|
|
173
|
+
for (NSUInteger column = 0; column < row.count; column++) {
|
|
174
|
+
CGRect boundingRect = [row[column].attributedText
|
|
175
|
+
boundingRectWithSize:CGSizeMake(maximumColumnWidth, CGFLOAT_MAX)
|
|
176
|
+
options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
|
|
177
|
+
context:nil];
|
|
178
|
+
CGFloat width = MIN(MAX(ceil(boundingRect.size.width) + horizontalPadding, minimumColumnWidth),
|
|
179
|
+
maximumColumnWidth + horizontalPadding);
|
|
180
|
+
if (width > [colWidths[column] doubleValue])
|
|
181
|
+
colWidths[column] = @(width);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
NSMutableArray<NSNumber *> *rowHeights = [NSMutableArray arrayWithCapacity:rows.count];
|
|
186
|
+
for (NSArray<TableCellData *> *row in rows) {
|
|
187
|
+
CGFloat maxHeight = 0;
|
|
188
|
+
for (NSUInteger column = 0; column < row.count; column++) {
|
|
189
|
+
CGFloat availableWidth = [colWidths[column] doubleValue] - horizontalPadding;
|
|
190
|
+
CGRect boundingRect = [row[column].attributedText
|
|
191
|
+
boundingRectWithSize:CGSizeMake(availableWidth, CGFLOAT_MAX)
|
|
192
|
+
options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
|
|
193
|
+
context:nil];
|
|
194
|
+
maxHeight = MAX(maxHeight, ceil(boundingRect.size.height) + verticalPadding);
|
|
195
|
+
}
|
|
196
|
+
[rowHeights addObject:@(maxHeight)];
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
if (outColWidths != NULL)
|
|
200
|
+
*outColWidths = colWidths;
|
|
201
|
+
if (outRowHeights != NULL)
|
|
202
|
+
*outRowHeights = rowHeights;
|
|
203
|
+
if (outTotalWidth != NULL)
|
|
204
|
+
*outTotalWidth = [[colWidths valueForKeyPath:@"@sum.self"] doubleValue] + borderWidth;
|
|
205
|
+
if (outTotalHeight != NULL)
|
|
206
|
+
*outTotalHeight = [[rowHeights valueForKeyPath:@"@sum.self"] doubleValue] + borderWidth;
|
|
207
|
+
}
|
|
208
|
+
|
|
31
209
|
#if !TARGET_OS_OSX
|
|
32
210
|
@interface TableContainerView () <UIContextMenuInteractionDelegate>
|
|
33
211
|
@end
|
|
@@ -46,7 +224,6 @@
|
|
|
46
224
|
NSMutableArray<NSNumber *> *_rowHeights;
|
|
47
225
|
CGFloat _totalTableWidth;
|
|
48
226
|
CGFloat _totalTableHeight;
|
|
49
|
-
CGFloat _borderWidth;
|
|
50
227
|
|
|
51
228
|
NSString *_cachedMarkdown;
|
|
52
229
|
|
|
@@ -58,7 +235,6 @@
|
|
|
58
235
|
self = [super initWithFrame:CGRectZero];
|
|
59
236
|
if (self) {
|
|
60
237
|
_config = config;
|
|
61
|
-
_borderWidth = config.tableBorderWidth;
|
|
62
238
|
_allowFontScaling = YES;
|
|
63
239
|
_maxFontSizeMultiplier = 0;
|
|
64
240
|
_enableLinkPreview = YES;
|
|
@@ -93,6 +269,8 @@
|
|
|
93
269
|
TableContainerView *strongSelf = weakSelf;
|
|
94
270
|
if (!strongSelf)
|
|
95
271
|
return nil;
|
|
272
|
+
if (strongSelf.contextMenuHidden)
|
|
273
|
+
return nil;
|
|
96
274
|
NSMenu *menu = [[NSMenu alloc] initWithTitle:@""];
|
|
97
275
|
[menu addItem:ENRMCreateMenuItem(strongSelf.copyLabel, ^{ [strongSelf copyTableToPasteboard]; })];
|
|
98
276
|
[menu addItem:ENRMCreateMenuItem(strongSelf.copyAsMarkdownLabel, ^{ [strongSelf copyMarkdownToPasteboard]; })];
|
|
@@ -120,74 +298,6 @@
|
|
|
120
298
|
#endif
|
|
121
299
|
}
|
|
122
300
|
|
|
123
|
-
- (StyleConfig *)cellConfigForHeader:(BOOL)isHeader
|
|
124
|
-
{
|
|
125
|
-
StyleConfig *cellConfig = [self.config copy];
|
|
126
|
-
|
|
127
|
-
[cellConfig setParagraphFontSize:self.config.tableFontSize];
|
|
128
|
-
NSString *headerFamily =
|
|
129
|
-
self.config.tableHeaderFontFamily.length > 0 ? self.config.tableHeaderFontFamily : self.config.tableFontFamily;
|
|
130
|
-
[cellConfig setParagraphFontFamily:isHeader ? headerFamily : self.config.tableFontFamily];
|
|
131
|
-
[cellConfig setParagraphFontWeight:isHeader ? @"bold" : self.config.tableFontWeight];
|
|
132
|
-
[cellConfig setParagraphColor:isHeader ? self.config.tableHeaderTextColor : self.config.tableColor];
|
|
133
|
-
[cellConfig setParagraphLineHeight:self.config.tableLineHeight];
|
|
134
|
-
|
|
135
|
-
[cellConfig setParagraphMarginTop:0];
|
|
136
|
-
[cellConfig setParagraphMarginBottom:0];
|
|
137
|
-
|
|
138
|
-
return cellConfig;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
- (NSMutableAttributedString *)renderCellNode:(MarkdownASTNode *)cellNode
|
|
142
|
-
isHeader:(BOOL)isHeader
|
|
143
|
-
cellConfig:(StyleConfig *)cellConfig
|
|
144
|
-
alignment:(NSTextAlignment)alignment
|
|
145
|
-
{
|
|
146
|
-
|
|
147
|
-
MarkdownASTNode *temporaryRoot = [[MarkdownASTNode alloc] initWithType:MarkdownNodeTypeDocument];
|
|
148
|
-
for (MarkdownASTNode *child in cellNode.children) {
|
|
149
|
-
[temporaryRoot addChild:child];
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
AttributedRenderer *renderer = [[AttributedRenderer alloc] initWithConfig:cellConfig];
|
|
153
|
-
RenderContext *context = [RenderContext new];
|
|
154
|
-
context.allowFontScaling = self.allowFontScaling;
|
|
155
|
-
context.maxFontSizeMultiplier = self.maxFontSizeMultiplier;
|
|
156
|
-
|
|
157
|
-
NSMutableAttributedString *attributedText = [renderer renderRoot:temporaryRoot context:context];
|
|
158
|
-
|
|
159
|
-
[context applyLinkAttributesToString:attributedText];
|
|
160
|
-
|
|
161
|
-
ENRMApplyWritingDirectionMode(attributedText, _writingDirectionMode, _resolvedLayoutDirection);
|
|
162
|
-
|
|
163
|
-
if (alignment != NSTextAlignmentLeft && attributedText.length > 0) {
|
|
164
|
-
NSRange fullRange = NSMakeRange(0, attributedText.length);
|
|
165
|
-
[attributedText
|
|
166
|
-
enumerateAttribute:NSParagraphStyleAttributeName
|
|
167
|
-
inRange:fullRange
|
|
168
|
-
options:0
|
|
169
|
-
usingBlock:^(NSParagraphStyle *paragraphStyle, NSRange range, BOOL *stop) {
|
|
170
|
-
NSMutableParagraphStyle *mutableStyle =
|
|
171
|
-
paragraphStyle ? [paragraphStyle mutableCopy] : [[NSMutableParagraphStyle alloc] init];
|
|
172
|
-
mutableStyle.alignment = alignment;
|
|
173
|
-
[attributedText addAttribute:NSParagraphStyleAttributeName value:mutableStyle range:range];
|
|
174
|
-
}];
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
return attributedText;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
- (NSString *)extractPlainTextFromNode:(MarkdownASTNode *)node
|
|
181
|
-
{
|
|
182
|
-
if (!node)
|
|
183
|
-
return @"";
|
|
184
|
-
NSMutableString *buffer = [node.content mutableCopy] ?: [NSMutableString string];
|
|
185
|
-
for (MarkdownASTNode *child in node.children) {
|
|
186
|
-
[buffer appendString:[self extractPlainTextFromNode:child]];
|
|
187
|
-
}
|
|
188
|
-
return [buffer copy];
|
|
189
|
-
}
|
|
190
|
-
|
|
191
301
|
- (NSUInteger)rowCount
|
|
192
302
|
{
|
|
193
303
|
return _rows.count;
|
|
@@ -212,96 +322,47 @@
|
|
|
212
322
|
{
|
|
213
323
|
[[_gridContainer subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
|
|
214
324
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
_colCount = 0;
|
|
220
|
-
|
|
221
|
-
for (MarkdownASTNode *section in tableNode.children) {
|
|
222
|
-
BOOL isSectionHead = (section.type == MarkdownNodeTypeTableHead);
|
|
223
|
-
|
|
224
|
-
for (MarkdownASTNode *rowNode in section.children) {
|
|
225
|
-
if (rowNode.type != MarkdownNodeTypeTableRow)
|
|
226
|
-
continue;
|
|
227
|
-
|
|
228
|
-
NSMutableArray<TableCellData *> *rowCells = [NSMutableArray array];
|
|
229
|
-
for (MarkdownASTNode *cellNode in rowNode.children) {
|
|
230
|
-
TableCellData *cell = [[TableCellData alloc] init];
|
|
231
|
-
cell.isHeader = isSectionHead || (cellNode.type == MarkdownNodeTypeTableHeaderCell);
|
|
232
|
-
cell.alignment = [self textAlignmentFromString:cellNode.attributes[@"align"]];
|
|
233
|
-
cell.plainText = [self extractPlainTextFromNode:cellNode];
|
|
234
|
-
cell.markdownText = markdownFromASTNodeChildren(cellNode);
|
|
235
|
-
|
|
236
|
-
StyleConfig *cellConfig = cell.isHeader ? headerCellConfig : bodyCellConfig;
|
|
237
|
-
cell.attributedText = [self renderCellNode:cellNode
|
|
238
|
-
isHeader:cell.isHeader
|
|
239
|
-
cellConfig:cellConfig
|
|
240
|
-
alignment:cell.alignment];
|
|
241
|
-
[rowCells addObject:cell];
|
|
242
|
-
}
|
|
243
|
-
_colCount = MAX(_colCount, rowCells.count);
|
|
244
|
-
[allRows addObject:rowCells];
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
_rows = [allRows copy];
|
|
325
|
+
NSUInteger colCount = 0;
|
|
326
|
+
_rows = ENRMTableBuildRows(tableNode, self.config, self.allowFontScaling, self.maxFontSizeMultiplier,
|
|
327
|
+
_writingDirectionMode, _resolvedLayoutDirection, &colCount);
|
|
328
|
+
_colCount = colCount;
|
|
249
329
|
_cachedMarkdown = [self buildMarkdownFromRows];
|
|
250
330
|
_cachedAccessibilityElements = nil;
|
|
251
331
|
[self computeLayout];
|
|
252
332
|
[self renderGrid];
|
|
253
333
|
}
|
|
254
334
|
|
|
255
|
-
- (
|
|
335
|
+
- (void)computeLayout
|
|
256
336
|
{
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
337
|
+
NSMutableArray<NSNumber *> *colWidths = nil;
|
|
338
|
+
NSMutableArray<NSNumber *> *rowHeights = nil;
|
|
339
|
+
CGFloat totalWidth = 0;
|
|
340
|
+
CGFloat totalHeight = 0;
|
|
341
|
+
ENRMTableComputeLayout(_rows, _colCount, self.config, self.config.tableBorderWidth, &colWidths, &rowHeights,
|
|
342
|
+
&totalWidth, &totalHeight);
|
|
343
|
+
_colWidths = colWidths;
|
|
344
|
+
_rowHeights = rowHeights;
|
|
345
|
+
_totalTableWidth = totalWidth;
|
|
346
|
+
_totalTableHeight = totalHeight;
|
|
262
347
|
}
|
|
263
348
|
|
|
264
|
-
|
|
349
|
+
+ (CGFloat)measureHeightForTableNode:(MarkdownASTNode *)tableNode
|
|
350
|
+
config:(StyleConfig *)config
|
|
351
|
+
allowFontScaling:(BOOL)allowFontScaling
|
|
352
|
+
maxFontSizeMultiplier:(CGFloat)maxFontSizeMultiplier
|
|
353
|
+
writingDirectionMode:(ENRMWritingDirectionMode)writingDirectionMode
|
|
354
|
+
resolvedLayoutDirection:(NSWritingDirection)resolvedLayoutDirection
|
|
265
355
|
{
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
_colWidths = [NSMutableArray arrayWithCapacity:_colCount];
|
|
273
|
-
for (NSUInteger i = 0; i < _colCount; i++)
|
|
274
|
-
[_colWidths addObject:@0];
|
|
275
|
-
|
|
276
|
-
for (NSArray<TableCellData *> *row in _rows) {
|
|
277
|
-
for (NSUInteger column = 0; column < row.count; column++) {
|
|
278
|
-
CGRect boundingRect = [row[column].attributedText
|
|
279
|
-
boundingRectWithSize:CGSizeMake(maximumColumnWidth, CGFLOAT_MAX)
|
|
280
|
-
options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
|
|
281
|
-
context:nil];
|
|
282
|
-
CGFloat width = MIN(MAX(ceil(boundingRect.size.width) + horizontalPadding, minimumColumnWidth),
|
|
283
|
-
maximumColumnWidth + horizontalPadding);
|
|
284
|
-
if (width > [_colWidths[column] doubleValue])
|
|
285
|
-
_colWidths[column] = @(width);
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
_rowHeights = [NSMutableArray arrayWithCapacity:_rows.count];
|
|
290
|
-
for (NSArray<TableCellData *> *row in _rows) {
|
|
291
|
-
CGFloat maxHeight = 0;
|
|
292
|
-
for (NSUInteger column = 0; column < row.count; column++) {
|
|
293
|
-
CGFloat availableWidth = [_colWidths[column] doubleValue] - horizontalPadding;
|
|
294
|
-
CGRect boundingRect = [row[column].attributedText
|
|
295
|
-
boundingRectWithSize:CGSizeMake(availableWidth, CGFLOAT_MAX)
|
|
296
|
-
options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
|
|
297
|
-
context:nil];
|
|
298
|
-
maxHeight = MAX(maxHeight, ceil(boundingRect.size.height) + verticalPadding);
|
|
299
|
-
}
|
|
300
|
-
[_rowHeights addObject:@(maxHeight)];
|
|
301
|
-
}
|
|
356
|
+
NSUInteger colCount = 0;
|
|
357
|
+
NSArray<NSArray<TableCellData *> *> *rows =
|
|
358
|
+
ENRMTableBuildRows(tableNode, config, allowFontScaling, maxFontSizeMultiplier, writingDirectionMode,
|
|
359
|
+
resolvedLayoutDirection, &colCount);
|
|
360
|
+
if (rows.count == 0)
|
|
361
|
+
return 0;
|
|
302
362
|
|
|
303
|
-
|
|
304
|
-
|
|
363
|
+
CGFloat totalHeight = 0;
|
|
364
|
+
ENRMTableComputeLayout(rows, colCount, config, config.tableBorderWidth, NULL, NULL, NULL, &totalHeight);
|
|
365
|
+
return totalHeight;
|
|
305
366
|
}
|
|
306
367
|
|
|
307
368
|
- (void)renderGrid
|
|
@@ -357,7 +418,7 @@
|
|
|
357
418
|
columnWidths:_colWidths
|
|
358
419
|
rowHeights:_rowHeights
|
|
359
420
|
borderColor:self.config.tableBorderColor
|
|
360
|
-
borderWidth:
|
|
421
|
+
borderWidth:self.config.tableBorderWidth
|
|
361
422
|
horizontalCellPadding:self.config.tableCellPaddingHorizontal
|
|
362
423
|
verticalCellPadding:self.config.tableCellPaddingVertical
|
|
363
424
|
cornerRadius:self.config.tableBorderRadius];
|
|
@@ -392,7 +453,7 @@
|
|
|
392
453
|
columnWidths:_colWidths
|
|
393
454
|
rowHeights:_rowHeights
|
|
394
455
|
borderColor:self.config.tableBorderColor
|
|
395
|
-
borderWidth:
|
|
456
|
+
borderWidth:self.config.tableBorderWidth
|
|
396
457
|
horizontalCellPadding:self.config.tableCellPaddingHorizontal
|
|
397
458
|
verticalCellPadding:self.config.tableCellPaddingVertical
|
|
398
459
|
cornerRadius:self.config.tableBorderRadius];
|
|
@@ -403,24 +464,14 @@
|
|
|
403
464
|
- (UIContextMenuConfiguration *)contextMenuInteraction:(UIContextMenuInteraction *)interaction
|
|
404
465
|
configurationForMenuAtLocation:(CGPoint)location
|
|
405
466
|
{
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
handler:^(__kindof UIAction *action) { [self copyMarkdownToPasteboard]; }];
|
|
415
|
-
|
|
416
|
-
UIAction *copyPlainText =
|
|
417
|
-
[UIAction actionWithTitle:self.copyLabel
|
|
418
|
-
image:[RCTUIImage systemImageNamed:@"doc.on.doc"]
|
|
419
|
-
identifier:nil
|
|
420
|
-
handler:^(__kindof UIAction *action) { [self copyTableToPasteboard]; }];
|
|
421
|
-
|
|
422
|
-
return [UIMenu menuWithTitle:@"" children:@[ copyPlainText, copyMarkdown ]];
|
|
423
|
-
}];
|
|
467
|
+
// Returning nil is the UIKit-sanctioned way to suppress a context menu.
|
|
468
|
+
if (self.contextMenuHidden) {
|
|
469
|
+
return nil;
|
|
470
|
+
}
|
|
471
|
+
__weak __typeof(self) weakSelf = self;
|
|
472
|
+
return ENRMBlockContextMenuConfiguration(
|
|
473
|
+
self.menuOptions, self.copyLabel, self.copyAsMarkdownLabel, ^{ [weakSelf copyTableToPasteboard]; },
|
|
474
|
+
^{ [weakSelf copyMarkdownToPasteboard]; });
|
|
424
475
|
}
|
|
425
476
|
#endif // !TARGET_OS_OSX
|
|
426
477
|
|
|
@@ -550,19 +601,54 @@
|
|
|
550
601
|
return _totalTableHeight;
|
|
551
602
|
}
|
|
552
603
|
|
|
604
|
+
- (CGFloat)alignOffsetForFreeSpace:(CGFloat)freeSpace
|
|
605
|
+
{
|
|
606
|
+
if (freeSpace <= 0)
|
|
607
|
+
return 0;
|
|
608
|
+
NSString *align = self.config.tableAlign;
|
|
609
|
+
if ([align isEqualToString:@"center"])
|
|
610
|
+
return freeSpace / 2;
|
|
611
|
+
if ([align isEqualToString:@"right"])
|
|
612
|
+
return freeSpace;
|
|
613
|
+
return 0;
|
|
614
|
+
}
|
|
615
|
+
|
|
553
616
|
- (void)layoutSubviews
|
|
554
617
|
{
|
|
555
618
|
[super layoutSubviews];
|
|
556
619
|
_scrollView.frame = self.bounds;
|
|
557
620
|
#if !TARGET_OS_OSX
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
621
|
+
CGFloat overhang = MAX(self.config.tableHorizontalOverflow, 0);
|
|
622
|
+
CGFloat containerWidth = self.bounds.size.width;
|
|
623
|
+
BOOL tableOverflows = (overhang > 0 && _totalTableWidth > containerWidth);
|
|
624
|
+
|
|
625
|
+
if (tableOverflows) {
|
|
626
|
+
UIEdgeInsets inset = UIEdgeInsetsMake(0, overhang, 0, overhang);
|
|
627
|
+
if (!UIEdgeInsetsEqualToEdgeInsets(_scrollView.contentInset, inset)) {
|
|
628
|
+
_scrollView.contentInset = inset;
|
|
629
|
+
_scrollView.contentOffset = CGPointMake(-overhang, 0);
|
|
630
|
+
}
|
|
631
|
+
_scrollView.contentSize = CGSizeMake(_totalTableWidth, _totalTableHeight);
|
|
632
|
+
_scrollView.scrollEnabled = YES;
|
|
633
|
+
_gridContainer.frame = CGRectMake(0, 0, _totalTableWidth, _totalTableHeight);
|
|
634
|
+
} else {
|
|
635
|
+
CGFloat alignOffset = [self alignOffsetForFreeSpace:containerWidth - overhang * 2 - _totalTableWidth];
|
|
636
|
+
_scrollView.contentInset = UIEdgeInsetsZero;
|
|
637
|
+
_scrollView.contentOffset = CGPointZero;
|
|
638
|
+
_scrollView.contentSize = CGSizeMake(MAX(_totalTableWidth, containerWidth), _totalTableHeight);
|
|
639
|
+
_scrollView.scrollEnabled = (_totalTableWidth > containerWidth);
|
|
640
|
+
_gridContainer.frame = CGRectMake(overhang + alignOffset, 0, _totalTableWidth, _totalTableHeight);
|
|
641
|
+
}
|
|
561
642
|
#else
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
643
|
+
CGFloat overhang = MAX(self.config.tableHorizontalOverflow, 0);
|
|
644
|
+
CGFloat containerWidth = self.bounds.size.width;
|
|
645
|
+
BOOL tableOverflows = (overhang > 0 && _totalTableWidth > containerWidth);
|
|
646
|
+
|
|
647
|
+
if (tableOverflows) {
|
|
565
648
|
_gridContainer.frame = CGRectMake(0, 0, _totalTableWidth, _totalTableHeight);
|
|
649
|
+
} else if (_totalTableWidth > 0 && _totalTableHeight > 0) {
|
|
650
|
+
CGFloat alignOffset = [self alignOffsetForFreeSpace:containerWidth - overhang * 2 - _totalTableWidth];
|
|
651
|
+
_gridContainer.frame = CGRectMake(overhang + alignOffset, 0, _totalTableWidth, _totalTableHeight);
|
|
566
652
|
}
|
|
567
653
|
#endif
|
|
568
654
|
}
|
package/jest.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './src/jest';
|
package/jest.js
ADDED
|
@@ -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,9 @@ interface CodeStyleInternal {
|
|
|
94
115
|
|
|
95
116
|
interface ImageStyleInternal {
|
|
96
117
|
height: CodegenTypes.Float;
|
|
118
|
+
maxHeight: CodegenTypes.Float;
|
|
119
|
+
aspectRatio: CodegenTypes.Float;
|
|
120
|
+
resizeMode: string;
|
|
97
121
|
borderRadius: CodegenTypes.Float;
|
|
98
122
|
marginTop: CodegenTypes.Float;
|
|
99
123
|
marginBottom: CodegenTypes.Float;
|
|
@@ -121,6 +145,8 @@ interface TableStyleInternal extends BaseBlockStyleInternal {
|
|
|
121
145
|
borderRadius: CodegenTypes.Float;
|
|
122
146
|
cellPaddingHorizontal: CodegenTypes.Float;
|
|
123
147
|
cellPaddingVertical: CodegenTypes.Float;
|
|
148
|
+
horizontalOverflow: CodegenTypes.Float;
|
|
149
|
+
align: string;
|
|
124
150
|
}
|
|
125
151
|
|
|
126
152
|
interface TaskListStyleInternal {
|
|
@@ -225,11 +251,21 @@ export interface TaskListItemPressEvent {
|
|
|
225
251
|
text: string;
|
|
226
252
|
}
|
|
227
253
|
|
|
254
|
+
export interface CopyPressEvent {
|
|
255
|
+
code: string;
|
|
256
|
+
language: string;
|
|
257
|
+
}
|
|
258
|
+
|
|
228
259
|
export interface ContextMenuItemConfig {
|
|
229
260
|
text: string;
|
|
230
261
|
icon?: string;
|
|
231
262
|
}
|
|
232
263
|
|
|
264
|
+
export interface ImageRequestHeaderInternal {
|
|
265
|
+
name: string;
|
|
266
|
+
value: string;
|
|
267
|
+
}
|
|
268
|
+
|
|
233
269
|
export interface SelectionMenuConfig {
|
|
234
270
|
copyAsMarkdown: boolean;
|
|
235
271
|
copyImageUrl: boolean;
|
|
@@ -240,6 +276,14 @@ export interface SelectionMenuConfig {
|
|
|
240
276
|
// Precomputed plural templates indexed by image count (0..100). Empty when no
|
|
241
277
|
// pluralLabels are set; native then uses copyImageUrlLabel/copyImageUrlsLabel.
|
|
242
278
|
copyImageUrlPluralTemplates: ReadonlyArray<string>;
|
|
279
|
+
// false removes the Copy item from the text and block menus.
|
|
280
|
+
copyEnabled: boolean;
|
|
281
|
+
// true: Copy writes Markdown (plain text) instead of rich text / raw block content.
|
|
282
|
+
copyFormatMarkdown: boolean;
|
|
283
|
+
// true: the text selection menu drops every system-provided item.
|
|
284
|
+
systemItemsNone: boolean;
|
|
285
|
+
// false hides the copy button in the code block header.
|
|
286
|
+
codeBlockCopyButton: boolean;
|
|
243
287
|
}
|
|
244
288
|
|
|
245
289
|
export interface OnContextMenuItemPressEvent {
|
|
@@ -311,10 +355,16 @@ export interface Md4cFlagsInternal {
|
|
|
311
355
|
* @default false
|
|
312
356
|
*/
|
|
313
357
|
highlight: boolean;
|
|
358
|
+
/**
|
|
359
|
+
* Treat soft breaks (single newlines) as hard breaks (visible line breaks).
|
|
360
|
+
* @default false
|
|
361
|
+
*/
|
|
362
|
+
hardSoftBreaks: boolean;
|
|
314
363
|
}
|
|
315
364
|
|
|
316
365
|
interface StreamingConfigInternal {
|
|
317
366
|
tableMode: string;
|
|
367
|
+
codeBlockMode: string;
|
|
318
368
|
}
|
|
319
369
|
|
|
320
370
|
export interface NativeProps extends ViewProps {
|
|
@@ -345,6 +395,21 @@ export interface NativeProps extends ViewProps {
|
|
|
345
395
|
* Receives the 0-based task index, current checked state, and the item's plain text.
|
|
346
396
|
*/
|
|
347
397
|
onTaskListItemPress?: CodegenTypes.BubblingEventHandler<TaskListItemPressEvent>;
|
|
398
|
+
/**
|
|
399
|
+
* Controls whether tapping a task list checkbox toggles its checked state.
|
|
400
|
+
*
|
|
401
|
+
* When `false`, the tap is fully inert: no visual toggle and no
|
|
402
|
+
* `onTaskListItemPress` emission. Text selection and links are unaffected.
|
|
403
|
+
*
|
|
404
|
+
* @default true
|
|
405
|
+
*/
|
|
406
|
+
enableTaskListItemToggle?: CodegenTypes.WithDefault<boolean, true>;
|
|
407
|
+
/**
|
|
408
|
+
* Callback fired when code is copied from a fenced code block's header copy
|
|
409
|
+
* button, its long-press context-menu "Copy" action, or the VoiceOver copy
|
|
410
|
+
* action. Receives the copied code and its language.
|
|
411
|
+
*/
|
|
412
|
+
onCopyPress?: CodegenTypes.BubblingEventHandler<CopyPressEvent>;
|
|
348
413
|
/**
|
|
349
414
|
* Controls whether the system link preview is shown on long press (iOS only).
|
|
350
415
|
*
|
|
@@ -425,10 +490,18 @@ export interface NativeProps extends ViewProps {
|
|
|
425
490
|
*/
|
|
426
491
|
spoilerOverlay?: CodegenTypes.WithDefault<string, 'particles'>;
|
|
427
492
|
|
|
493
|
+
/**
|
|
494
|
+
* Hides the text selection context menu while keeping text selectable.
|
|
495
|
+
*/
|
|
496
|
+
contextMenuHidden?: CodegenTypes.WithDefault<boolean, false>;
|
|
428
497
|
/**
|
|
429
498
|
* Custom items to show in the text selection context menu.
|
|
430
499
|
*/
|
|
431
500
|
contextMenuItems?: ReadonlyArray<Readonly<ContextMenuItemConfig>>;
|
|
501
|
+
/**
|
|
502
|
+
* HTTP headers attached to remote image requests, as name/value pairs.
|
|
503
|
+
*/
|
|
504
|
+
imageRequestHeaders?: ReadonlyArray<Readonly<ImageRequestHeaderInternal>>;
|
|
432
505
|
/**
|
|
433
506
|
* Built-in items to show in the text selection context menu.
|
|
434
507
|
*/
|