react-native-enriched-markdown-scaffold 0.6.0-scaffold.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -0
- package/README.md +53 -0
- package/ReactNativeEnrichedMarkdown.podspec +67 -0
- package/android/build.gradle +94 -0
- package/android/consumer-rules.pro +19 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownManagerDelegate.java +87 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownManagerInterface.java +37 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextInputManagerDelegate.java +159 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextInputManagerInterface.java +59 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerDelegate.java +87 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerInterface.java +37 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/ComponentDescriptors.cpp +22 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/ComponentDescriptors.h +24 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.cpp +318 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.h +259 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.cpp +375 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.h +5174 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/ShadowNodes.cpp +17 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/ShadowNodes.h +23 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/States.cpp +16 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/States.h +20 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/baseline-prof.txt +254 -0
- package/android/src/main/cpp/jni-adapter.cpp +264 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdown.kt +554 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownInternalText.kt +122 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownManager.kt +255 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownText.kt +363 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextLayoutManager.kt +15 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextManager.kt +253 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextPackage.kt +20 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/MeasurementStore.kt +653 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/accessibility/AccessibleMarkdownTextView.kt +33 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/accessibility/MarkdownAccessibilityHelper.kt +482 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/events/ContextMenuItemPressEvent.kt +28 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/events/LinkLongPressEvent.kt +23 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/events/LinkPressEvent.kt +23 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/events/TaskListItemPressEvent.kt +26 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputManager.kt +465 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputView.kt +1066 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/autolink/AutoDetectedLinkSpan.kt +29 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/autolink/AutoLinkDetector.kt +188 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/autolink/LinkRegexConfig.kt +9 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/detection/DetectorPipeline.kt +40 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/detection/TextDetector.kt +27 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/detection/WordResult.kt +7 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/detection/WordsUtils.kt +65 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/InputConnectionWrapper.kt +69 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/MarkdownEditableFactory.kt +15 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/MarkdownTextWatcher.kt +41 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnCaretRectChangeEvent.kt +20 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnChangeMarkdownEvent.kt +22 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnChangeMentionEvent.kt +24 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnChangeSelectionEvent.kt +24 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnChangeStateEvent.kt +50 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnChangeTextEvent.kt +22 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnContextMenuItemPressEvent.kt +48 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnEndMentionEvent.kt +22 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnInputBlurEvent.kt +18 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnInputFocusEvent.kt +18 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnLinkDetectedEvent.kt +28 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnMathPressEvent.kt +36 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnRequestCaretRectResultEvent.kt +25 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnRequestMarkdownResultEvent.kt +24 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnStartMentionEvent.kt +22 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/FormattingStore.kt +192 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputFormatter.kt +117 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputParser.kt +117 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputRemend.kt +120 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/MarkdownSerializer.kt +176 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/layout/InputEventEmitter.kt +216 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/layout/InputLayoutManager.kt +28 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/layout/InputMeasurementStore.kt +137 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/math/MathChipController.kt +113 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/model/CaretRect.kt +17 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/model/FormattingRange.kt +10 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/model/InputFormatterStyle.kt +28 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/model/MathAtom.kt +7 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/model/MathChipStyle.kt +47 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/model/StyleType.kt +10 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/BoldStyleHandler.kt +35 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/ItalicStyleHandler.kt +35 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/LinkStyleHandler.kt +75 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/SpoilerStyleHandler.kt +36 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/StrikethroughStyleHandler.kt +24 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/StyleHandler.kt +18 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/StyleMergingConfig.kt +10 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/UnderlineStyleHandler.kt +24 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/input/toolbar/InputContextMenu.kt +181 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/parser/MarkdownASTNode.kt +43 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/parser/Parser.kt +68 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BaselineShiftRenderer.kt +44 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BlockStyleContext.kt +152 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BlockquoteRenderer.kt +87 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/CodeBlockRenderer.kt +104 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/CodeRenderer.kt +36 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/DocumentRenderer.kt +16 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/EmphasisRenderer.kt +27 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/HeadingRenderer.kt +71 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/HighlightRenderer.kt +25 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ImageRenderer.kt +61 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/LineBreakRenderer.kt +16 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/LinkRenderer.kt +29 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListContextManager.kt +89 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListItemRenderer.kt +127 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListRenderer.kt +74 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/NodeRenderer.kt +161 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ParagraphRenderer.kt +75 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/Renderer.kt +113 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SpanStyleCache.kt +134 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SpoilerRenderer.kt +25 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/StrikethroughRenderer.kt +27 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/StrongRenderer.kt +27 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SubscriptRenderer.kt +11 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SuperscriptRenderer.kt +11 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/TextRenderer.kt +30 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ThematicBreakRenderer.kt +45 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/UnderlineRenderer.kt +27 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/BaseListSpan.kt +127 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/BaselineShiftSpan.kt +27 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/BlockquoteSpan.kt +152 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeBackgroundSpan.kt +180 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeBlockSpan.kt +196 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeSpan.kt +32 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/EmphasisSpan.kt +42 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/FadeInSpan.kt +25 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/HeadingSpan.kt +38 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/HighlightSpan.kt +26 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/ImageSpan.kt +335 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/LineHeightSpan.kt +27 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/LinkSpan.kt +66 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/MarginBottomSpan.kt +76 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/MathModels.kt +18 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/OrderedListSpan.kt +85 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/SpoilerSpan.kt +33 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/StrikethroughSpan.kt +12 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/StrongSpan.kt +39 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/TaskListSpan.kt +134 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/TextSpan.kt +26 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/ThematicBreakSpan.kt +69 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/UnorderedListSpan.kt +92 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/ParticleStrategy.kt +68 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SegmentKey.kt +13 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SolidStrategy.kt +95 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerAnimator.kt +89 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerCapable.kt +5 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerConstants.kt +3 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerDrawContext.kt +33 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerDrawUtils.kt +40 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerOverlay.kt +17 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerOverlayDrawer.kt +152 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerParticleDrawable.kt +237 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerStrategy.kt +53 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/BaseBlockStyle.kt +11 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/BlockquoteStyle.kt +51 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/CodeBlockStyle.kt +54 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/CodeStyle.kt +26 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/EmphasisStyle.kt +21 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/HeadingStyle.kt +33 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/HighlightStyle.kt +19 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/ImageStyle.kt +23 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/InlineImageStyle.kt +17 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/InlineMathStyle.kt +17 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/LinkStyle.kt +23 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/LinkVariantEntry.kt +29 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/ListStyle.kt +62 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/MathStyle.kt +29 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/ParagraphStyle.kt +33 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/SpoilerStyle.kt +27 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/StrikethroughStyle.kt +17 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/StrongStyle.kt +21 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/StyleConfig.kt +364 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/StyleParser.kt +92 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/SubscriptStyle.kt +16 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/SuperscriptStyle.kt +16 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/TableStyle.kt +69 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/TaskListStyle.kt +29 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/TextAlignment.kt +32 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/ThematicBreakStyle.kt +23 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/UnderlineStyle.kt +17 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/BreakStrategyUtils.kt +32 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/FeatureFlags.kt +7 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/MarkdownSegment.kt +56 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/MarkdownViewManagerUtils.kt +100 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/MotionPreferences.kt +18 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/ReadableMapExtensions.kt +20 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/RenderedSegment.kt +78 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/SegmentReconciler.kt +118 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/SegmentSignature.kt +78 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/StreamingMarkdownFilter.kt +142 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/layout/RTLUtils.kt +6 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/serialization/MarkdownASTSerializer.kt +115 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/input/AutoCapitalizeUtils.kt +27 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/input/BorderPropsApplicator.kt +77 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/input/MarkdownStyleParser.kt +184 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/ImageCache.kt +53 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/ImageDownloader.kt +156 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/TailFadeInAnimator.kt +84 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/conversion/HTMLGenerator.kt +1067 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/conversion/MarkdownExtractor.kt +419 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/extensions/ParagraphUtils.kt +9 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/extensions/SpannableExtensions.kt +65 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/extensions/TextPaintExtensions.kt +53 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/interaction/CheckboxTouchHelper.kt +54 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/interaction/TaskListTapUtils.kt +249 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/span/BlockSpacing.kt +89 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/span/SpanFlags.kt +17 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/LinkEvents.kt +43 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/LinkLongPressMovementMethod.kt +187 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/SelectionActionMode.kt +205 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/TextSelectionColors.kt +48 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/TextViewSetup.kt +40 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/views/BlockSegmentView.kt +10 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/views/ContextMenuPopup.kt +214 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/views/TableContainerView.kt +501 -0
- package/android/src/main/jni/CMakeLists.txt +70 -0
- package/android/src/main/jni/EnrichedMarkdownTextSpec.cpp +21 -0
- package/android/src/main/jni/EnrichedMarkdownTextSpec.h +15 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/ComponentDescriptors.h +67 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerComponentDescriptor.h +26 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerMeasurementManager.cpp +45 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerMeasurementManager.h +21 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerShadowNode.cpp +20 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerShadowNode.h +34 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextComponentDescriptor.h +29 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextInputMeasurementManager.cpp +44 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextInputMeasurementManager.h +21 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextInputShadowNode.cpp +30 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextInputShadowNode.h +43 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextInputState.cpp +9 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextInputState.h +24 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextMeasurementManager.cpp +45 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextMeasurementManager.h +21 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextShadowNode.cpp +20 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextShadowNode.h +37 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/conversions.h +45 -0
- package/android/src/math/java/com/swmansion/enriched/markdown/input/math/MathChipControllerImpl.kt +217 -0
- package/android/src/math/java/com/swmansion/enriched/markdown/renderer/MathInlineRenderer.kt +47 -0
- package/android/src/math/java/com/swmansion/enriched/markdown/spans/MathChipSpan.kt +208 -0
- package/android/src/math/java/com/swmansion/enriched/markdown/spans/MathInlinePlaceholderSpan.kt +41 -0
- package/android/src/math/java/com/swmansion/enriched/markdown/spans/MathInlineSpan.kt +92 -0
- package/android/src/math/java/com/swmansion/enriched/markdown/spans/MathMeasureHelper.kt +57 -0
- package/android/src/math/java/com/swmansion/enriched/markdown/views/MathContainerView.kt +148 -0
- package/app.plugin.js +1 -0
- package/cpp/md4c/md4c.c +7235 -0
- package/cpp/md4c/md4c.h +475 -0
- package/cpp/parser/MD4CParser.cpp +539 -0
- package/cpp/parser/MD4CParser.hpp +32 -0
- package/cpp/parser/MarkdownASTNode.hpp +63 -0
- package/cpp/wasm/ASTSerializer.cpp +158 -0
- package/cpp/wasm/ASTSerializer.hpp +17 -0
- package/cpp/wasm/build.sh +58 -0
- package/cpp/wasm/md4c_wasm.cpp +43 -0
- package/ios/EnrichedMarkdown.h +20 -0
- package/ios/EnrichedMarkdown.mm +1121 -0
- package/ios/EnrichedMarkdownText.h +20 -0
- package/ios/EnrichedMarkdownText.mm +802 -0
- package/ios/attachments/ENRMImageAttachment.h +27 -0
- package/ios/attachments/ENRMImageAttachment.m +305 -0
- package/ios/attachments/ENRMMathInlineAttachment+macOS.m +60 -0
- package/ios/attachments/ENRMMathInlineAttachment.h +47 -0
- package/ios/attachments/ENRMMathInlineAttachment.m +142 -0
- package/ios/attachments/ENRMMathInlineAttachmentShared.h +17 -0
- package/ios/attachments/ThematicBreakAttachment.h +15 -0
- package/ios/attachments/ThematicBreakAttachment.m +33 -0
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/ComponentDescriptors.cpp +22 -0
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/ComponentDescriptors.h +24 -0
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/EventEmitters.cpp +318 -0
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/EventEmitters.h +259 -0
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/Props.cpp +375 -0
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/Props.h +5174 -0
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/RCTComponentViewHelpers.h +436 -0
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/ShadowNodes.cpp +17 -0
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/ShadowNodes.h +23 -0
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/States.cpp +16 -0
- package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/States.h +20 -0
- package/ios/input/ENRMAutoLinkDetector.h +32 -0
- package/ios/input/ENRMAutoLinkDetector.mm +211 -0
- package/ios/input/ENRMDetectorPipeline.h +28 -0
- package/ios/input/ENRMDetectorPipeline.mm +53 -0
- package/ios/input/ENRMFormattingRange.h +19 -0
- package/ios/input/ENRMFormattingRange.mm +28 -0
- package/ios/input/ENRMFormattingStore.h +29 -0
- package/ios/input/ENRMFormattingStore.mm +278 -0
- package/ios/input/ENRMInputFormatter.h +84 -0
- package/ios/input/ENRMInputFormatter.mm +222 -0
- package/ios/input/ENRMInputLayoutManager.h +11 -0
- package/ios/input/ENRMInputLayoutManager.mm +5 -0
- package/ios/input/ENRMInputLinkPrompt.h +9 -0
- package/ios/input/ENRMInputLinkPrompt.mm +71 -0
- package/ios/input/ENRMInputMentionCandidate.h +21 -0
- package/ios/input/ENRMInputMentionCandidate.mm +18 -0
- package/ios/input/ENRMInputParser.h +27 -0
- package/ios/input/ENRMInputParser.mm +556 -0
- package/ios/input/ENRMInputRemend.h +9 -0
- package/ios/input/ENRMInputRemend.mm +136 -0
- package/ios/input/ENRMInputStyledRange.h +29 -0
- package/ios/input/ENRMInputStyledRange.mm +4 -0
- package/ios/input/ENRMInputTextView.h +13 -0
- package/ios/input/ENRMInputTextView.mm +175 -0
- package/ios/input/ENRMLinkRegexConfig.h +26 -0
- package/ios/input/ENRMLinkRegexConfig.mm +60 -0
- package/ios/input/ENRMMarkdownSerializer.h +19 -0
- package/ios/input/ENRMMarkdownSerializer.mm +283 -0
- package/ios/input/ENRMTextDetector.h +30 -0
- package/ios/input/ENRMWordsUtils.h +28 -0
- package/ios/input/ENRMWordsUtils.mm +88 -0
- package/ios/input/EnrichedMarkdownTextInput+ContextMenu.mm +157 -0
- package/ios/input/EnrichedMarkdownTextInput+Internal.h +30 -0
- package/ios/input/EnrichedMarkdownTextInput.h +20 -0
- package/ios/input/EnrichedMarkdownTextInput.mm +2008 -0
- package/ios/input/InputStylePropsUtils.h +261 -0
- package/ios/input/internals/EnrichedMarkdownTextInputComponentDescriptor.h +19 -0
- package/ios/input/internals/EnrichedMarkdownTextInputShadowNode.h +40 -0
- package/ios/input/internals/EnrichedMarkdownTextInputShadowNode.mm +83 -0
- package/ios/input/internals/EnrichedMarkdownTextInputState.h +23 -0
- package/ios/input/styles/ENRMBoldStyleHandler.h +10 -0
- package/ios/input/styles/ENRMBoldStyleHandler.mm +29 -0
- package/ios/input/styles/ENRMItalicStyleHandler.h +10 -0
- package/ios/input/styles/ENRMItalicStyleHandler.mm +29 -0
- package/ios/input/styles/ENRMLinkStyleHandler.h +10 -0
- package/ios/input/styles/ENRMLinkStyleHandler.mm +52 -0
- package/ios/input/styles/ENRMSpoilerStyleHandler.h +10 -0
- package/ios/input/styles/ENRMSpoilerStyleHandler.mm +33 -0
- package/ios/input/styles/ENRMStrikethroughStyleHandler.h +10 -0
- package/ios/input/styles/ENRMStrikethroughStyleHandler.mm +28 -0
- package/ios/input/styles/ENRMStyleHandler.h +26 -0
- package/ios/input/styles/ENRMStyleMergingConfig.h +26 -0
- package/ios/input/styles/ENRMStyleMergingConfig.mm +21 -0
- package/ios/input/styles/ENRMUnderlineStyleHandler.h +10 -0
- package/ios/input/styles/ENRMUnderlineStyleHandler.mm +28 -0
- package/ios/internals/EnrichedMarkdownComponentDescriptor.h +18 -0
- package/ios/internals/EnrichedMarkdownShadowNode.h +43 -0
- package/ios/internals/EnrichedMarkdownShadowNode.mm +73 -0
- package/ios/internals/EnrichedMarkdownState.h +23 -0
- package/ios/internals/EnrichedMarkdownTextComponentDescriptor.h +19 -0
- package/ios/internals/EnrichedMarkdownTextShadowNode.h +45 -0
- package/ios/internals/EnrichedMarkdownTextShadowNode.mm +74 -0
- package/ios/internals/EnrichedMarkdownTextState.h +24 -0
- package/ios/internals/MeasurementCache.h +223 -0
- package/ios/internals/ShadowMeasurementUtils.h +135 -0
- package/ios/math/ENRMRaTeXBridge.swift +58 -0
- package/ios/parser/ENRMMarkdownParser.h +21 -0
- package/ios/parser/ENRMMarkdownParser.mm +50 -0
- package/ios/parser/MarkdownASTNode.h +47 -0
- package/ios/parser/MarkdownASTNode.m +32 -0
- package/ios/parser/MarkdownParserBridge.mm +161 -0
- package/ios/renderer/AttributedRenderer.h +11 -0
- package/ios/renderer/AttributedRenderer.m +153 -0
- package/ios/renderer/BaseRenderer.h +18 -0
- package/ios/renderer/BaseRenderer.m +16 -0
- package/ios/renderer/BaselineShiftTextAttributes.h +6 -0
- package/ios/renderer/BaselineShiftTextAttributes.m +22 -0
- package/ios/renderer/BlockquoteRenderer.h +6 -0
- package/ios/renderer/BlockquoteRenderer.m +148 -0
- package/ios/renderer/CodeBlockRenderer.h +9 -0
- package/ios/renderer/CodeBlockRenderer.m +90 -0
- package/ios/renderer/CodeRenderer.h +9 -0
- package/ios/renderer/CodeRenderer.m +64 -0
- package/ios/renderer/ENRMImageRenderer.h +9 -0
- package/ios/renderer/ENRMImageRenderer.m +65 -0
- package/ios/renderer/ENRMMathInlineRenderer.h +9 -0
- package/ios/renderer/ENRMMathInlineRenderer.m +56 -0
- package/ios/renderer/ENRMSpoilerRenderer.h +5 -0
- package/ios/renderer/ENRMSpoilerRenderer.m +32 -0
- package/ios/renderer/EmphasisRenderer.h +5 -0
- package/ios/renderer/EmphasisRenderer.m +98 -0
- package/ios/renderer/HeadingRenderer.h +6 -0
- package/ios/renderer/HeadingRenderer.m +94 -0
- package/ios/renderer/HighlightRenderer.h +7 -0
- package/ios/renderer/HighlightRenderer.m +31 -0
- package/ios/renderer/LinkRenderer.h +6 -0
- package/ios/renderer/LinkRenderer.m +82 -0
- package/ios/renderer/ListItemRenderer.h +12 -0
- package/ios/renderer/ListItemRenderer.m +175 -0
- package/ios/renderer/ListRenderer.h +13 -0
- package/ios/renderer/ListRenderer.m +70 -0
- package/ios/renderer/NodeRenderer.h +8 -0
- package/ios/renderer/ParagraphRenderer.h +6 -0
- package/ios/renderer/ParagraphRenderer.m +70 -0
- package/ios/renderer/RenderContext.h +118 -0
- package/ios/renderer/RenderContext.m +337 -0
- package/ios/renderer/RendererFactory.h +12 -0
- package/ios/renderer/RendererFactory.m +147 -0
- package/ios/renderer/StrikethroughRenderer.h +5 -0
- package/ios/renderer/StrikethroughRenderer.m +28 -0
- package/ios/renderer/StrongRenderer.h +5 -0
- package/ios/renderer/StrongRenderer.m +86 -0
- package/ios/renderer/SubscriptRenderer.h +5 -0
- package/ios/renderer/SubscriptRenderer.m +22 -0
- package/ios/renderer/SuperscriptRenderer.h +5 -0
- package/ios/renderer/SuperscriptRenderer.m +22 -0
- package/ios/renderer/TextRenderer.h +6 -0
- package/ios/renderer/TextRenderer.m +16 -0
- package/ios/renderer/ThematicBreakRenderer.h +4 -0
- package/ios/renderer/ThematicBreakRenderer.m +40 -0
- package/ios/renderer/UnderlineRenderer.h +4 -0
- package/ios/renderer/UnderlineRenderer.m +27 -0
- package/ios/styles/ENRMFontSlot.h +12 -0
- package/ios/styles/ENRMFontSlot.m +24 -0
- package/ios/styles/StyleConfig.h +407 -0
- package/ios/styles/StyleConfig.mm +2515 -0
- package/ios/utils/AccessibilityInfo.h +35 -0
- package/ios/utils/AccessibilityInfo.m +24 -0
- package/ios/utils/BlockquoteBorder.h +20 -0
- package/ios/utils/BlockquoteBorder.m +97 -0
- package/ios/utils/CodeBackground.h +19 -0
- package/ios/utils/CodeBackground.m +197 -0
- package/ios/utils/CodeBlockBackground.h +17 -0
- package/ios/utils/CodeBlockBackground.m +89 -0
- package/ios/utils/ContextMenuUtils.h +76 -0
- package/ios/utils/ContextMenuUtils.mm +73 -0
- package/ios/utils/ENRMAsyncRenderCoordinator.h +24 -0
- package/ios/utils/ENRMAsyncRenderCoordinator.m +37 -0
- package/ios/utils/ENRMFeatureFlags.h +12 -0
- package/ios/utils/ENRMImageDownloader.h +16 -0
- package/ios/utils/ENRMImageDownloader.m +108 -0
- package/ios/utils/ENRMMenuAction.h +27 -0
- package/ios/utils/ENRMMenuAction.m +33 -0
- package/ios/utils/ENRMParticleOverlayView.h +12 -0
- package/ios/utils/ENRMParticleOverlayView.m +159 -0
- package/ios/utils/ENRMSolidOverlayView.h +12 -0
- package/ios/utils/ENRMSolidOverlayView.m +25 -0
- package/ios/utils/ENRMSpoilerCapable.h +15 -0
- package/ios/utils/ENRMSpoilerOverlayManager.h +21 -0
- package/ios/utils/ENRMSpoilerOverlayManager.m +181 -0
- package/ios/utils/ENRMSpoilerOverlayView.h +49 -0
- package/ios/utils/ENRMSpoilerOverlayView.m +144 -0
- package/ios/utils/ENRMSpoilerTapUtils.h +25 -0
- package/ios/utils/ENRMSpoilerTapUtils.m +68 -0
- package/ios/utils/ENRMTailFadeInAnimator.h +16 -0
- package/ios/utils/ENRMTailFadeInAnimator.m +161 -0
- package/ios/utils/ENRMTextHitTest.h +23 -0
- package/ios/utils/ENRMTextHitTest.m +20 -0
- package/ios/utils/ENRMTextInteractionUtils.h +20 -0
- package/ios/utils/ENRMTextInteractionUtils.m +15 -0
- package/ios/utils/ENRMTextRenderer.h +30 -0
- package/ios/utils/ENRMTextRenderer.m +38 -0
- package/ios/utils/ENRMTextViewSetup.h +78 -0
- package/ios/utils/ENRMUIKit.h +418 -0
- package/ios/utils/EditMenuUtils+macOS.m +60 -0
- package/ios/utils/EditMenuUtils.h +35 -0
- package/ios/utils/EditMenuUtils.m +119 -0
- package/ios/utils/FontScaleObserver.h +10 -0
- package/ios/utils/FontScaleObserver.m +55 -0
- package/ios/utils/FontUtils.h +30 -0
- package/ios/utils/FontUtils.m +47 -0
- package/ios/utils/HTMLGenerator.h +25 -0
- package/ios/utils/HTMLGenerator.m +1019 -0
- package/ios/utils/HeightUpdateUtils.h +25 -0
- package/ios/utils/LastElementUtils.h +53 -0
- package/ios/utils/LinkTapUtils.h +24 -0
- package/ios/utils/LinkTapUtils.m +32 -0
- package/ios/utils/ListMarkerDrawer.h +15 -0
- package/ios/utils/ListMarkerDrawer.m +212 -0
- package/ios/utils/MarkdownASTSerializer.h +24 -0
- package/ios/utils/MarkdownASTSerializer.m +114 -0
- package/ios/utils/MarkdownAccessibilityElementBuilder.h +41 -0
- package/ios/utils/MarkdownAccessibilityElementBuilder.m +450 -0
- package/ios/utils/MarkdownExtractor.h +17 -0
- package/ios/utils/MarkdownExtractor.m +355 -0
- package/ios/utils/ParagraphStyleUtils.h +53 -0
- package/ios/utils/ParagraphStyleUtils.m +349 -0
- package/ios/utils/PasteboardUtils.h +48 -0
- package/ios/utils/PasteboardUtils.m +162 -0
- package/ios/utils/RTFExportUtils.h +24 -0
- package/ios/utils/RTFExportUtils.m +297 -0
- package/ios/utils/RenderedMarkdownSegment.h +49 -0
- package/ios/utils/RenderedMarkdownSegment.m +130 -0
- package/ios/utils/RuntimeKeys.h +38 -0
- package/ios/utils/RuntimeKeys.m +11 -0
- package/ios/utils/SegmentReconciler.h +32 -0
- package/ios/utils/SegmentReconciler.m +118 -0
- package/ios/utils/SegmentRenderer.h +24 -0
- package/ios/utils/SegmentRenderer.m +88 -0
- package/ios/utils/SegmentViewRegistry.h +36 -0
- package/ios/utils/SegmentViewRegistry.m +67 -0
- package/ios/utils/SelectionColorUtils.h +14 -0
- package/ios/utils/StreamingMarkdownFilter.h +22 -0
- package/ios/utils/StreamingMarkdownFilter.m +165 -0
- package/ios/utils/StylePropsUtils.h +1146 -0
- package/ios/utils/TaskListTapUtils.h +43 -0
- package/ios/utils/TaskListTapUtils.m +227 -0
- package/ios/utils/TextViewLayoutManager.h +14 -0
- package/ios/utils/TextViewLayoutManager.mm +113 -0
- package/ios/views/ENRMContextMenuTextView+macOS.h +17 -0
- package/ios/views/ENRMContextMenuTextView+macOS.m +97 -0
- package/ios/views/ENRMMathContainerView.h +20 -0
- package/ios/views/ENRMMathContainerView.m +227 -0
- package/ios/views/ENRMTableGridView.h +36 -0
- package/ios/views/ENRMTableGridView.m +98 -0
- package/ios/views/EnrichedMarkdownInternalText.h +42 -0
- package/ios/views/EnrichedMarkdownInternalText.m +161 -0
- package/ios/views/TableContainerView.h +39 -0
- package/ios/views/TableContainerView.m +686 -0
- package/lib/module/EnrichedMarkdownNativeComponent.ts +429 -0
- package/lib/module/EnrichedMarkdownTextInput.js +310 -0
- package/lib/module/EnrichedMarkdownTextInput.js.map +1 -0
- package/lib/module/EnrichedMarkdownTextInputNativeComponent.ts +364 -0
- package/lib/module/EnrichedMarkdownTextNativeComponent.ts +428 -0
- package/lib/module/index.js +5 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/index.web.js +4 -0
- package/lib/module/index.web.js.map +1 -0
- package/lib/module/linkVariantUtils.js +28 -0
- package/lib/module/linkVariantUtils.js.map +1 -0
- package/lib/module/native/EnrichedMarkdownText.js +158 -0
- package/lib/module/native/EnrichedMarkdownText.js.map +1 -0
- package/lib/module/normalizeMarkdownStyle.js +337 -0
- package/lib/module/normalizeMarkdownStyle.js.map +1 -0
- package/lib/module/normalizeMarkdownStyle.web.js +264 -0
- package/lib/module/normalizeMarkdownStyle.web.js.map +1 -0
- package/lib/module/normalizeMarkdownTextInputStyle.js +146 -0
- package/lib/module/normalizeMarkdownTextInputStyle.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/plugin/withAndroidMath.js +20 -0
- package/lib/module/plugin/withAndroidMath.js.map +1 -0
- package/lib/module/plugin/withIosMath.js +23 -0
- package/lib/module/plugin/withIosMath.js.map +1 -0
- package/lib/module/plugin/withReactNativeEnrichedMarkdown.js +16 -0
- package/lib/module/plugin/withReactNativeEnrichedMarkdown.js.map +1 -0
- package/lib/module/styleUtils.js +64 -0
- package/lib/module/styleUtils.js.map +1 -0
- package/lib/module/types/MarkdownStyle.js +2 -0
- package/lib/module/types/MarkdownStyle.js.map +1 -0
- package/lib/module/types/MarkdownStyleInternal.js +2 -0
- package/lib/module/types/MarkdownStyleInternal.js.map +1 -0
- package/lib/module/types/MarkdownTextProps.js +4 -0
- package/lib/module/types/MarkdownTextProps.js.map +1 -0
- package/lib/module/types/MarkdownTextProps.web.js +4 -0
- package/lib/module/types/MarkdownTextProps.web.js.map +1 -0
- package/lib/module/types/events.js +2 -0
- package/lib/module/types/events.js.map +1 -0
- package/lib/module/utils/regexParser.js +43 -0
- package/lib/module/utils/regexParser.js.map +1 -0
- package/lib/module/web/EnrichedMarkdownText.js +120 -0
- package/lib/module/web/EnrichedMarkdownText.js.map +1 -0
- package/lib/module/web/globalStyles.js +10 -0
- package/lib/module/web/globalStyles.js.map +1 -0
- package/lib/module/web/injectStyle.js +20 -0
- package/lib/module/web/injectStyle.js.map +1 -0
- package/lib/module/web/katex.js +22 -0
- package/lib/module/web/katex.js.map +1 -0
- package/lib/module/web/parseMarkdown.js +35 -0
- package/lib/module/web/parseMarkdown.js.map +1 -0
- package/lib/module/web/renderers/BlockRenderers.js +115 -0
- package/lib/module/web/renderers/BlockRenderers.js.map +1 -0
- package/lib/module/web/renderers/InlineRenderers.js +160 -0
- package/lib/module/web/renderers/InlineRenderers.js.map +1 -0
- package/lib/module/web/renderers/KaTeXRenderer.js +43 -0
- package/lib/module/web/renderers/KaTeXRenderer.js.map +1 -0
- package/lib/module/web/renderers/ListRenderers.js +92 -0
- package/lib/module/web/renderers/ListRenderers.js.map +1 -0
- package/lib/module/web/renderers/TableRenderers.js +77 -0
- package/lib/module/web/renderers/TableRenderers.js.map +1 -0
- package/lib/module/web/renderers/index.js +49 -0
- package/lib/module/web/renderers/index.js.map +1 -0
- package/lib/module/web/styles.js +454 -0
- package/lib/module/web/styles.js.map +1 -0
- package/lib/module/web/types.js +4 -0
- package/lib/module/web/types.js.map +1 -0
- package/lib/module/web/utils.js +56 -0
- package/lib/module/web/utils.js.map +1 -0
- package/lib/module/web/wasm/md4c.d.js +4 -0
- package/lib/module/web/wasm/md4c.d.js.map +1 -0
- package/lib/module/web/wasm/md4c.js +0 -0
- package/lib/module/web/wasm/md4c.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/EnrichedMarkdownNativeComponent.d.ts +384 -0
- package/lib/typescript/src/EnrichedMarkdownNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/EnrichedMarkdownTextInput.d.ts +173 -0
- package/lib/typescript/src/EnrichedMarkdownTextInput.d.ts.map +1 -0
- package/lib/typescript/src/EnrichedMarkdownTextInputNativeComponent.d.ts +285 -0
- package/lib/typescript/src/EnrichedMarkdownTextInputNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts +384 -0
- package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +6 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/index.web.d.ts +5 -0
- package/lib/typescript/src/index.web.d.ts.map +1 -0
- package/lib/typescript/src/linkVariantUtils.d.ts +5 -0
- package/lib/typescript/src/linkVariantUtils.d.ts.map +1 -0
- package/lib/typescript/src/native/EnrichedMarkdownText.d.ts +9 -0
- package/lib/typescript/src/native/EnrichedMarkdownText.d.ts.map +1 -0
- package/lib/typescript/src/normalizeMarkdownStyle.d.ts +4 -0
- package/lib/typescript/src/normalizeMarkdownStyle.d.ts.map +1 -0
- package/lib/typescript/src/normalizeMarkdownStyle.web.d.ts +4 -0
- package/lib/typescript/src/normalizeMarkdownStyle.web.d.ts.map +1 -0
- package/lib/typescript/src/normalizeMarkdownTextInputStyle.d.ts +48 -0
- package/lib/typescript/src/normalizeMarkdownTextInputStyle.d.ts.map +1 -0
- package/lib/typescript/src/plugin/withAndroidMath.d.ts +5 -0
- package/lib/typescript/src/plugin/withAndroidMath.d.ts.map +1 -0
- package/lib/typescript/src/plugin/withIosMath.d.ts +5 -0
- package/lib/typescript/src/plugin/withIosMath.d.ts.map +1 -0
- package/lib/typescript/src/plugin/withReactNativeEnrichedMarkdown.d.ts +6 -0
- package/lib/typescript/src/plugin/withReactNativeEnrichedMarkdown.d.ts.map +1 -0
- package/lib/typescript/src/styleUtils.d.ts +6 -0
- package/lib/typescript/src/styleUtils.d.ts.map +1 -0
- package/lib/typescript/src/types/MarkdownStyle.d.ts +300 -0
- package/lib/typescript/src/types/MarkdownStyle.d.ts.map +1 -0
- package/lib/typescript/src/types/MarkdownStyleInternal.d.ts +178 -0
- package/lib/typescript/src/types/MarkdownStyleInternal.d.ts.map +1 -0
- package/lib/typescript/src/types/MarkdownTextProps.d.ts +249 -0
- package/lib/typescript/src/types/MarkdownTextProps.d.ts.map +1 -0
- package/lib/typescript/src/types/MarkdownTextProps.web.d.ts +83 -0
- package/lib/typescript/src/types/MarkdownTextProps.web.d.ts.map +1 -0
- package/lib/typescript/src/types/events.d.ts +29 -0
- package/lib/typescript/src/types/events.d.ts.map +1 -0
- package/lib/typescript/src/utils/regexParser.d.ts +3 -0
- package/lib/typescript/src/utils/regexParser.d.ts.map +1 -0
- package/lib/typescript/src/web/EnrichedMarkdownText.d.ts +4 -0
- package/lib/typescript/src/web/EnrichedMarkdownText.d.ts.map +1 -0
- package/lib/typescript/src/web/globalStyles.d.ts +3 -0
- package/lib/typescript/src/web/globalStyles.d.ts.map +1 -0
- package/lib/typescript/src/web/injectStyle.d.ts +9 -0
- package/lib/typescript/src/web/injectStyle.d.ts.map +1 -0
- package/lib/typescript/src/web/katex.d.ts +11 -0
- package/lib/typescript/src/web/katex.d.ts.map +1 -0
- package/lib/typescript/src/web/parseMarkdown.d.ts +4 -0
- package/lib/typescript/src/web/parseMarkdown.d.ts.map +1 -0
- package/lib/typescript/src/web/renderers/BlockRenderers.d.ts +3 -0
- package/lib/typescript/src/web/renderers/BlockRenderers.d.ts.map +1 -0
- package/lib/typescript/src/web/renderers/InlineRenderers.d.ts +3 -0
- package/lib/typescript/src/web/renderers/InlineRenderers.d.ts.map +1 -0
- package/lib/typescript/src/web/renderers/KaTeXRenderer.d.ts +11 -0
- package/lib/typescript/src/web/renderers/KaTeXRenderer.d.ts.map +1 -0
- package/lib/typescript/src/web/renderers/ListRenderers.d.ts +3 -0
- package/lib/typescript/src/web/renderers/ListRenderers.d.ts.map +1 -0
- package/lib/typescript/src/web/renderers/TableRenderers.d.ts +3 -0
- package/lib/typescript/src/web/renderers/TableRenderers.d.ts.map +1 -0
- package/lib/typescript/src/web/renderers/index.d.ts +14 -0
- package/lib/typescript/src/web/renderers/index.d.ts.map +1 -0
- package/lib/typescript/src/web/styles.d.ts +49 -0
- package/lib/typescript/src/web/styles.d.ts.map +1 -0
- package/lib/typescript/src/web/types.d.ts +51 -0
- package/lib/typescript/src/web/types.d.ts.map +1 -0
- package/lib/typescript/src/web/utils.d.ts +21 -0
- package/lib/typescript/src/web/utils.d.ts.map +1 -0
- package/package.json +125 -0
- package/react-native.config.js +17 -0
- package/src/EnrichedMarkdownNativeComponent.ts +429 -0
- package/src/EnrichedMarkdownTextInput.tsx +547 -0
- package/src/EnrichedMarkdownTextInputNativeComponent.ts +364 -0
- package/src/EnrichedMarkdownTextNativeComponent.ts +428 -0
- package/src/index.tsx +28 -0
- package/src/index.web.tsx +8 -0
- package/src/linkVariantUtils.ts +42 -0
- package/src/native/EnrichedMarkdownText.tsx +187 -0
- package/src/normalizeMarkdownStyle.ts +310 -0
- package/src/normalizeMarkdownStyle.web.ts +281 -0
- package/src/normalizeMarkdownTextInputStyle.ts +242 -0
- package/src/plugin/withAndroidMath.ts +24 -0
- package/src/plugin/withIosMath.ts +35 -0
- package/src/plugin/withReactNativeEnrichedMarkdown.ts +17 -0
- package/src/styleUtils.ts +98 -0
- package/src/types/MarkdownStyle.ts +326 -0
- package/src/types/MarkdownStyleInternal.ts +208 -0
- package/src/types/MarkdownTextProps.ts +253 -0
- package/src/types/MarkdownTextProps.web.ts +90 -0
- package/src/types/events.ts +32 -0
- package/src/utils/regexParser.ts +54 -0
- package/src/web/EnrichedMarkdownText.tsx +154 -0
- package/src/web/globalStyles.ts +15 -0
- package/src/web/injectStyle.ts +17 -0
- package/src/web/katex.ts +31 -0
- package/src/web/parseMarkdown.ts +78 -0
- package/src/web/renderers/BlockRenderers.tsx +90 -0
- package/src/web/renderers/InlineRenderers.tsx +121 -0
- package/src/web/renderers/KaTeXRenderer.tsx +49 -0
- package/src/web/renderers/ListRenderers.tsx +110 -0
- package/src/web/renderers/TableRenderers.tsx +61 -0
- package/src/web/renderers/index.tsx +75 -0
- package/src/web/styles.ts +549 -0
- package/src/web/types.ts +92 -0
- package/src/web/utils.ts +52 -0
- package/src/web/wasm/md4c.d.ts +21 -0
- package/src/web/wasm/md4c.js +0 -0
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import type { ColorValue, ViewProps, ViewStyle, TextStyle } from 'react-native';
|
|
2
|
+
import type { MarkdownStyle, Md4cFlags } from './MarkdownStyle';
|
|
3
|
+
import type {
|
|
4
|
+
LinkPressEvent,
|
|
5
|
+
LinkLongPressEvent,
|
|
6
|
+
TaskListItemPressEvent,
|
|
7
|
+
} from './events';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Public context menu item. Each item includes a JS-side `onPress` callback
|
|
11
|
+
* that is called when the user taps the item in the selection context menu.
|
|
12
|
+
*/
|
|
13
|
+
export interface ContextMenuItem {
|
|
14
|
+
text: string;
|
|
15
|
+
onPress: (event: {
|
|
16
|
+
text: string;
|
|
17
|
+
selection: { start: number; end: number };
|
|
18
|
+
}) => void;
|
|
19
|
+
icon?: string;
|
|
20
|
+
visible?: boolean;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface SelectionMenuConfig {
|
|
24
|
+
/**
|
|
25
|
+
* Shows the built-in "Copy as Markdown" action for text selections.
|
|
26
|
+
* @default true
|
|
27
|
+
*/
|
|
28
|
+
copyAsMarkdown?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Shows the built-in "Copy Image URL" action when selected content contains images.
|
|
31
|
+
* @default true
|
|
32
|
+
*/
|
|
33
|
+
copyImageUrl?: boolean;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface StreamingConfig {
|
|
37
|
+
/**
|
|
38
|
+
* Controls how incomplete tables are handled during streaming.
|
|
39
|
+
* - `'hidden'`: hide the entire table until it's complete.
|
|
40
|
+
* - `'progressive'` (default): show the table row-by-row as rows complete.
|
|
41
|
+
* Only effective when `streamingAnimation` is `true`.
|
|
42
|
+
* @default 'progressive'
|
|
43
|
+
* @platform ios, android
|
|
44
|
+
*/
|
|
45
|
+
tableMode?: 'hidden' | 'progressive';
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export interface EnrichedMarkdownTextProps extends Omit<ViewProps, 'style'> {
|
|
49
|
+
/**
|
|
50
|
+
* Markdown content to render.
|
|
51
|
+
* @platform ios, android, web
|
|
52
|
+
*/
|
|
53
|
+
markdown: string;
|
|
54
|
+
/**
|
|
55
|
+
* Style configuration for markdown elements.
|
|
56
|
+
* @platform ios, android, web
|
|
57
|
+
*/
|
|
58
|
+
markdownStyle?: MarkdownStyle;
|
|
59
|
+
/**
|
|
60
|
+
* Style for the container view.
|
|
61
|
+
* @platform ios, android, web
|
|
62
|
+
*/
|
|
63
|
+
containerStyle?: ViewStyle | TextStyle;
|
|
64
|
+
/**
|
|
65
|
+
* MD4C parser flags configuration.
|
|
66
|
+
* Controls how the markdown parser interprets certain syntax.
|
|
67
|
+
* @platform ios, android, web
|
|
68
|
+
*/
|
|
69
|
+
md4cFlags?: Md4cFlags;
|
|
70
|
+
/**
|
|
71
|
+
* Callback fired when a link is pressed.
|
|
72
|
+
* Receives the link URL directly.
|
|
73
|
+
* @platform ios, android, web
|
|
74
|
+
*/
|
|
75
|
+
onLinkPress?: (event: LinkPressEvent) => void;
|
|
76
|
+
/**
|
|
77
|
+
* Callback fired when a link is long pressed.
|
|
78
|
+
* Receives the link URL directly.
|
|
79
|
+
* - iOS: When provided, automatically disables the system link preview
|
|
80
|
+
* (unless `enableLinkPreview` is explicitly set to `true`).
|
|
81
|
+
* - Android: Handles long press gestures on links.
|
|
82
|
+
* - Web: Mapped to the `contextmenu` event (right-click).
|
|
83
|
+
* @platform ios, android, web
|
|
84
|
+
*/
|
|
85
|
+
onLinkLongPress?: (event: LinkLongPressEvent) => void;
|
|
86
|
+
/**
|
|
87
|
+
* Callback fired when a task list checkbox is tapped.
|
|
88
|
+
*
|
|
89
|
+
* The checkbox is toggled on the native side automatically.
|
|
90
|
+
* Receives the 0-based task index, the new checked state (after toggling),
|
|
91
|
+
* and the item's plain text.
|
|
92
|
+
*
|
|
93
|
+
* Only fires when `flavor="github"` (GFM task lists require GitHub flavor).
|
|
94
|
+
* @platform ios, android, web
|
|
95
|
+
*/
|
|
96
|
+
onTaskListItemPress?: (event: TaskListItemPressEvent) => void;
|
|
97
|
+
/**
|
|
98
|
+
* Controls whether the system link preview is shown on long press (iOS only).
|
|
99
|
+
*
|
|
100
|
+
* When `true`, long-pressing a link shows the native iOS link preview.
|
|
101
|
+
* When `false`, the system preview is suppressed.
|
|
102
|
+
*
|
|
103
|
+
* Defaults to `true`, but automatically becomes `false` when `onLinkLongPress`
|
|
104
|
+
* is provided. Set explicitly to override the automatic behavior.
|
|
105
|
+
*
|
|
106
|
+
* @default true
|
|
107
|
+
* @platform ios
|
|
108
|
+
*/
|
|
109
|
+
enableLinkPreview?: boolean;
|
|
110
|
+
/**
|
|
111
|
+
* Controls text selection.
|
|
112
|
+
* - iOS: Controls text selection and link previews on long press.
|
|
113
|
+
* - Android: Controls text selection.
|
|
114
|
+
* - Web: Applies `user-select: none` when `false`.
|
|
115
|
+
* @default true
|
|
116
|
+
* @platform ios, android, web
|
|
117
|
+
*/
|
|
118
|
+
selectable?: boolean;
|
|
119
|
+
/**
|
|
120
|
+
* Color of the text selection highlight.
|
|
121
|
+
*
|
|
122
|
+
* On iOS, this also affects the caret and selection handle colors
|
|
123
|
+
* (they share a single tint). On macOS, only the selection background
|
|
124
|
+
* is affected.
|
|
125
|
+
*
|
|
126
|
+
* @platform ios, android, macos, web
|
|
127
|
+
*/
|
|
128
|
+
selectionColor?: ColorValue;
|
|
129
|
+
/**
|
|
130
|
+
* Color of the selection handles (drag anchors).
|
|
131
|
+
* No-op on API levels below 29.
|
|
132
|
+
*
|
|
133
|
+
* @platform android
|
|
134
|
+
*/
|
|
135
|
+
selectionHandleColor?: ColorValue;
|
|
136
|
+
/**
|
|
137
|
+
* Specifies whether fonts should scale to respect Text Size accessibility settings.
|
|
138
|
+
* When false, text will not scale with the user's accessibility settings.
|
|
139
|
+
* @default true
|
|
140
|
+
* @platform ios, android
|
|
141
|
+
*/
|
|
142
|
+
allowFontScaling?: boolean;
|
|
143
|
+
/**
|
|
144
|
+
* Specifies the largest possible scale a font can reach when `allowFontScaling`
|
|
145
|
+
* is enabled.
|
|
146
|
+
* - `undefined` / `null` (default): no limit
|
|
147
|
+
* - `0`: no limit
|
|
148
|
+
* - `>= 1`: sets the maxFontSizeMultiplier of this node to this value
|
|
149
|
+
* @default undefined
|
|
150
|
+
* @platform ios, android
|
|
151
|
+
*/
|
|
152
|
+
maxFontSizeMultiplier?: number;
|
|
153
|
+
/**
|
|
154
|
+
* When false (default), removes trailing margin from the last element to
|
|
155
|
+
* eliminate bottom spacing.
|
|
156
|
+
* When true, keeps the trailing margin from the last element's marginBottom style.
|
|
157
|
+
* @default false
|
|
158
|
+
* @platform ios, android, web
|
|
159
|
+
*/
|
|
160
|
+
allowTrailingMargin?: boolean;
|
|
161
|
+
/**
|
|
162
|
+
* Specifies which Markdown flavor to use for rendering.
|
|
163
|
+
* - `'commonmark'` (default): standard CommonMark renderer (single TextView).
|
|
164
|
+
* - `'github'`: GitHub Flavored Markdown — container-based renderer with
|
|
165
|
+
* support for tables and other GFM extensions.
|
|
166
|
+
* @default 'commonmark'
|
|
167
|
+
* @platform ios, android
|
|
168
|
+
*/
|
|
169
|
+
flavor?: 'commonmark' | 'github';
|
|
170
|
+
/**
|
|
171
|
+
* When true, newly appended content fades in during streaming updates.
|
|
172
|
+
* Only the tail (new characters beyond the previous content) is animated.
|
|
173
|
+
* Recommended for LLM streaming use cases with `flavor="commonmark"`.
|
|
174
|
+
* @default false
|
|
175
|
+
* @platform ios, android
|
|
176
|
+
*/
|
|
177
|
+
streamingAnimation?: boolean;
|
|
178
|
+
/**
|
|
179
|
+
* Fine-grained control over streaming behavior for block-level elements.
|
|
180
|
+
* Only effective when `streamingAnimation` is `true`.
|
|
181
|
+
* @platform ios, android
|
|
182
|
+
*/
|
|
183
|
+
streamingConfig?: StreamingConfig;
|
|
184
|
+
/**
|
|
185
|
+
* Controls how spoiler text is displayed before being revealed.
|
|
186
|
+
* - `'particles'` (default): animated particle overlay (CAEmitterLayer on iOS,
|
|
187
|
+
* Choreographer-driven Canvas particles on Android).
|
|
188
|
+
* - `'solid'`: opaque rectangle covering the text (Discord-style).
|
|
189
|
+
*
|
|
190
|
+
* Both modes support tap-to-reveal.
|
|
191
|
+
* @default 'particles'
|
|
192
|
+
* @platform ios, android
|
|
193
|
+
*/
|
|
194
|
+
spoilerOverlay?: 'particles' | 'solid';
|
|
195
|
+
/**
|
|
196
|
+
* Custom items to show in the text selection context menu.
|
|
197
|
+
* Each item requires a `text` label and an `onPress` callback.
|
|
198
|
+
* Items with `visible: false` are hidden from the menu.
|
|
199
|
+
* @platform ios, android
|
|
200
|
+
*/
|
|
201
|
+
contextMenuItems?: ContextMenuItem[];
|
|
202
|
+
/**
|
|
203
|
+
* Controls built-in items added to the native text selection menu.
|
|
204
|
+
* Custom app-provided actions are controlled separately with `contextMenuItems`.
|
|
205
|
+
* @default { copyAsMarkdown: true, copyImageUrl: true }
|
|
206
|
+
* @platform ios, android, macos
|
|
207
|
+
*/
|
|
208
|
+
selectionMenuConfig?: SelectionMenuConfig;
|
|
209
|
+
/**
|
|
210
|
+
* Sets the text direction on the root container.
|
|
211
|
+
* Useful for RTL languages — CSS logical properties in the renderers
|
|
212
|
+
* automatically flip blockquote borders, list indentation, etc.
|
|
213
|
+
* @platform web
|
|
214
|
+
*/
|
|
215
|
+
dir?: 'ltr' | 'rtl' | 'auto';
|
|
216
|
+
/**
|
|
217
|
+
* Sets the text break strategy on Android (API 23+).
|
|
218
|
+
* - `'simple'`: no hyphenation, minimal line-break work.
|
|
219
|
+
* - `'highQuality'` (default): full paragraph optimization with hyphenation.
|
|
220
|
+
* - `'balanced'`: balances line lengths, no hyphenation.
|
|
221
|
+
*
|
|
222
|
+
* Both the measurement pass and the render pass use this value so that
|
|
223
|
+
* measured line counts match rendered line counts.
|
|
224
|
+
* @default 'highQuality'
|
|
225
|
+
* @platform android
|
|
226
|
+
*/
|
|
227
|
+
textBreakStrategy?: 'simple' | 'highQuality' | 'balanced';
|
|
228
|
+
/**
|
|
229
|
+
* Sets the line break strategy on iOS (iOS 14+).
|
|
230
|
+
* - `'none'` (default): no additional line break strategy.
|
|
231
|
+
* - `'standard'`: standard line breaking rules.
|
|
232
|
+
* - `'hangul-word'`: Korean word-boundary breaking.
|
|
233
|
+
* - `'push-out'`: pushes text out to avoid orphaned words.
|
|
234
|
+
* @default 'none'
|
|
235
|
+
* @platform ios
|
|
236
|
+
*/
|
|
237
|
+
lineBreakStrategyIOS?: 'none' | 'standard' | 'hangul-word' | 'push-out';
|
|
238
|
+
/**
|
|
239
|
+
* Paragraph writing direction.
|
|
240
|
+
* - `'first-strong'` (default): resolves each paragraph from its first strong
|
|
241
|
+
* directional character. Neutral-only paragraphs fall back to the view's
|
|
242
|
+
* resolved layout direction (inherits ancestor `direction` style). Library
|
|
243
|
+
* extension beyond React Native — matches Android's `TEXT_DIRECTION_FIRST_STRONG`.
|
|
244
|
+
* - `'auto'`: React Native parity. iOS TextKit follows the app's
|
|
245
|
+
* `userInterfaceLayoutDirection`; mixed-direction paragraphs do not
|
|
246
|
+
* auto-resolve.
|
|
247
|
+
* - `'ltr'` / `'rtl'`: force base direction on every paragraph. Code blocks
|
|
248
|
+
* always stay LTR.
|
|
249
|
+
* @default 'first-strong'
|
|
250
|
+
* @platform ios
|
|
251
|
+
*/
|
|
252
|
+
writingDirection?: 'auto' | 'ltr' | 'rtl' | 'first-strong';
|
|
253
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import type { CSSProperties, HTMLAttributes } from 'react';
|
|
2
|
+
import type { MarkdownStyle, Md4cFlags } from './MarkdownStyle';
|
|
3
|
+
import type {
|
|
4
|
+
LinkPressEvent,
|
|
5
|
+
LinkLongPressEvent,
|
|
6
|
+
TaskListItemPressEvent,
|
|
7
|
+
} from './events';
|
|
8
|
+
|
|
9
|
+
export interface EnrichedMarkdownTextProps extends Omit<
|
|
10
|
+
HTMLAttributes<HTMLDivElement>,
|
|
11
|
+
'style' | 'dir'
|
|
12
|
+
> {
|
|
13
|
+
/**
|
|
14
|
+
* Markdown content to render.
|
|
15
|
+
* @platform ios, android, web
|
|
16
|
+
*/
|
|
17
|
+
markdown: string;
|
|
18
|
+
/**
|
|
19
|
+
* Style configuration for markdown elements.
|
|
20
|
+
* @platform ios, android, web
|
|
21
|
+
*/
|
|
22
|
+
markdownStyle?: MarkdownStyle;
|
|
23
|
+
/**
|
|
24
|
+
* Style for the container view.
|
|
25
|
+
* @platform ios, android, web
|
|
26
|
+
*/
|
|
27
|
+
containerStyle?: CSSProperties;
|
|
28
|
+
/**
|
|
29
|
+
* MD4C parser flags configuration.
|
|
30
|
+
* Controls how the markdown parser interprets certain syntax.
|
|
31
|
+
* @platform ios, android, web
|
|
32
|
+
*/
|
|
33
|
+
md4cFlags?: Md4cFlags;
|
|
34
|
+
/**
|
|
35
|
+
* Callback fired when a link is pressed.
|
|
36
|
+
* Receives the link URL directly.
|
|
37
|
+
* @platform ios, android, web
|
|
38
|
+
*/
|
|
39
|
+
onLinkPress?: (event: LinkPressEvent) => void;
|
|
40
|
+
/**
|
|
41
|
+
* Callback fired when a link is long pressed.
|
|
42
|
+
* Receives the link URL directly.
|
|
43
|
+
* - iOS: When provided, automatically disables the system link preview
|
|
44
|
+
* (unless `enableLinkPreview` is explicitly set to `true`).
|
|
45
|
+
* - Android: Handles long press gestures on links.
|
|
46
|
+
* - Web: Mapped to the `contextmenu` event (right-click).
|
|
47
|
+
* @platform ios, android, web
|
|
48
|
+
*/
|
|
49
|
+
onLinkLongPress?: (event: LinkLongPressEvent) => void;
|
|
50
|
+
/**
|
|
51
|
+
* Callback fired when a task list checkbox is tapped.
|
|
52
|
+
*
|
|
53
|
+
* The checkbox is toggled on the native side automatically.
|
|
54
|
+
* Receives the 0-based task index, the new checked state (after toggling),
|
|
55
|
+
* and the item's plain text.
|
|
56
|
+
*
|
|
57
|
+
* Only fires when `flavor="github"` (GFM task lists require GitHub flavor).
|
|
58
|
+
* @platform ios, android, web
|
|
59
|
+
*/
|
|
60
|
+
onTaskListItemPress?: (event: TaskListItemPressEvent) => void;
|
|
61
|
+
/**
|
|
62
|
+
* Controls text selection.
|
|
63
|
+
* - iOS: Controls text selection and link previews on long press.
|
|
64
|
+
* - Android: Controls text selection.
|
|
65
|
+
* - Web: Applies `user-select: none` when `false`.
|
|
66
|
+
* @default true
|
|
67
|
+
* @platform ios, android, web
|
|
68
|
+
*/
|
|
69
|
+
selectable?: boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Color of the text selection highlight.
|
|
72
|
+
* @platform web
|
|
73
|
+
*/
|
|
74
|
+
selectionColor?: string;
|
|
75
|
+
/**
|
|
76
|
+
* When false (default), removes trailing margin from the last element to
|
|
77
|
+
* eliminate bottom spacing.
|
|
78
|
+
* When true, keeps the trailing margin from the last element's marginBottom style.
|
|
79
|
+
* @default false
|
|
80
|
+
* @platform ios, android, web
|
|
81
|
+
*/
|
|
82
|
+
allowTrailingMargin?: boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Sets the text direction on the root container.
|
|
85
|
+
* Useful for RTL languages — CSS logical properties in the renderers
|
|
86
|
+
* automatically flip blockquote borders, list indentation, etc.
|
|
87
|
+
* @platform web
|
|
88
|
+
*/
|
|
89
|
+
dir?: 'ltr' | 'rtl' | 'auto';
|
|
90
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface LinkPressEvent {
|
|
2
|
+
url: string;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export interface LinkLongPressEvent {
|
|
6
|
+
url: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface TaskListItemPressEvent {
|
|
10
|
+
index: number;
|
|
11
|
+
checked: boolean;
|
|
12
|
+
text: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Native-level context menu item config sent to the native component.
|
|
17
|
+
* Does not include the `onPress` callback — callbacks are managed on the JS side.
|
|
18
|
+
*/
|
|
19
|
+
export interface ContextMenuItemConfig {
|
|
20
|
+
text: string;
|
|
21
|
+
icon?: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Event payload fired by the native component when a context menu item is pressed.
|
|
26
|
+
*/
|
|
27
|
+
export interface OnContextMenuItemPressEvent {
|
|
28
|
+
itemText: string;
|
|
29
|
+
selectedText: string;
|
|
30
|
+
selectionStart: number;
|
|
31
|
+
selectionEnd: number;
|
|
32
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { LinkNativeRegex } from '../EnrichedMarkdownTextInputNativeComponent';
|
|
2
|
+
|
|
3
|
+
const DISABLED_REGEX: LinkNativeRegex = {
|
|
4
|
+
pattern: '',
|
|
5
|
+
caseInsensitive: false,
|
|
6
|
+
dotAll: false,
|
|
7
|
+
isDisabled: true,
|
|
8
|
+
isDefault: false,
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const DEFAULT_REGEX: LinkNativeRegex = {
|
|
12
|
+
pattern: '',
|
|
13
|
+
caseInsensitive: false,
|
|
14
|
+
dotAll: false,
|
|
15
|
+
isDisabled: false,
|
|
16
|
+
isDefault: true,
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export const toNativeRegexConfig = (
|
|
20
|
+
regex: RegExp | undefined | null
|
|
21
|
+
): LinkNativeRegex => {
|
|
22
|
+
if (regex === null) {
|
|
23
|
+
return DISABLED_REGEX;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (regex === undefined) {
|
|
27
|
+
return DEFAULT_REGEX;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const source = regex.source;
|
|
31
|
+
|
|
32
|
+
const hasLookbehind = source.includes('(?<=') || source.includes('(?<!');
|
|
33
|
+
|
|
34
|
+
if (hasLookbehind) {
|
|
35
|
+
const lookbehindContent = source.match(/\(\?<[=!](.*?)\)/)?.[1] || '';
|
|
36
|
+
if (/[*+{]/.test(lookbehindContent)) {
|
|
37
|
+
if (__DEV__) {
|
|
38
|
+
console.error(
|
|
39
|
+
'Variable-width lookbehinds are not supported. Using default link regex.'
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return DEFAULT_REGEX;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return {
|
|
48
|
+
pattern: source,
|
|
49
|
+
caseInsensitive: regex.ignoreCase,
|
|
50
|
+
dotAll: regex.dotAll,
|
|
51
|
+
isDisabled: false,
|
|
52
|
+
isDefault: false,
|
|
53
|
+
};
|
|
54
|
+
};
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { useState, useEffect, useMemo, type CSSProperties } from 'react';
|
|
2
|
+
import type { EnrichedMarkdownTextProps } from '../types/MarkdownTextProps.web';
|
|
3
|
+
import { normalizeMarkdownStyle } from '../normalizeMarkdownStyle.web';
|
|
4
|
+
import {
|
|
5
|
+
zeroTrailingMargins,
|
|
6
|
+
parseErrorFallbackStyle,
|
|
7
|
+
buildStyles,
|
|
8
|
+
} from './styles';
|
|
9
|
+
import { parseMarkdown } from './parseMarkdown';
|
|
10
|
+
import { RenderNode } from './renderers';
|
|
11
|
+
import type { ASTNode, RendererCallbacks, RenderCapabilities } from './types';
|
|
12
|
+
import { indexTaskItems, markInlineImages } from './utils';
|
|
13
|
+
import { loadKaTeX } from './katex';
|
|
14
|
+
import type { KaTeXInstance } from './katex';
|
|
15
|
+
import { ENRM_TEXT_CLASS, ENRM_SELECTION_BG_VAR } from './globalStyles';
|
|
16
|
+
|
|
17
|
+
export const EnrichedMarkdownText = ({
|
|
18
|
+
markdown,
|
|
19
|
+
markdownStyle = {},
|
|
20
|
+
md4cFlags = {},
|
|
21
|
+
onLinkPress,
|
|
22
|
+
onLinkLongPress,
|
|
23
|
+
onTaskListItemPress,
|
|
24
|
+
allowTrailingMargin = false,
|
|
25
|
+
containerStyle,
|
|
26
|
+
selectable = true,
|
|
27
|
+
dir,
|
|
28
|
+
selectionColor,
|
|
29
|
+
...rest
|
|
30
|
+
}: EnrichedMarkdownTextProps) => {
|
|
31
|
+
const normalizedStyle = useMemo(
|
|
32
|
+
() => normalizeMarkdownStyle(markdownStyle),
|
|
33
|
+
[markdownStyle]
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
const [ast, setAst] = useState<ASTNode | null>(null);
|
|
37
|
+
const [katex, setKatex] = useState<KaTeXInstance | null>(null);
|
|
38
|
+
const [parseError, setParseError] = useState<boolean>(false);
|
|
39
|
+
|
|
40
|
+
const {
|
|
41
|
+
underline = false,
|
|
42
|
+
latexMath = true,
|
|
43
|
+
superscript = false,
|
|
44
|
+
subscript = false,
|
|
45
|
+
highlight = false,
|
|
46
|
+
} = md4cFlags;
|
|
47
|
+
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
let cancelled = false;
|
|
50
|
+
|
|
51
|
+
const katexPromise = latexMath ? loadKaTeX() : Promise.resolve(null);
|
|
52
|
+
|
|
53
|
+
Promise.all([
|
|
54
|
+
parseMarkdown(markdown, {
|
|
55
|
+
underline,
|
|
56
|
+
latexMath,
|
|
57
|
+
superscript,
|
|
58
|
+
subscript,
|
|
59
|
+
highlight,
|
|
60
|
+
}),
|
|
61
|
+
katexPromise,
|
|
62
|
+
])
|
|
63
|
+
.then(([result, katexInstance]) => {
|
|
64
|
+
if (!cancelled) {
|
|
65
|
+
indexTaskItems(result);
|
|
66
|
+
markInlineImages(result);
|
|
67
|
+
|
|
68
|
+
setParseError(false);
|
|
69
|
+
setKatex(katexInstance);
|
|
70
|
+
setAst(result);
|
|
71
|
+
}
|
|
72
|
+
})
|
|
73
|
+
.catch((error) => {
|
|
74
|
+
if (!cancelled) {
|
|
75
|
+
if (__DEV__) {
|
|
76
|
+
console.error('[EnrichedMarkdownText] Parse failed:', error);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
setParseError(true);
|
|
80
|
+
setAst(null);
|
|
81
|
+
setKatex(null);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
return () => {
|
|
86
|
+
cancelled = true;
|
|
87
|
+
};
|
|
88
|
+
}, [markdown, underline, latexMath, superscript, subscript, highlight]);
|
|
89
|
+
|
|
90
|
+
const callbacks = useMemo<RendererCallbacks>(
|
|
91
|
+
() => ({ onLinkPress, onLinkLongPress, onTaskListItemPress }),
|
|
92
|
+
[onLinkPress, onLinkLongPress, onTaskListItemPress]
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
const capabilities = useMemo<RenderCapabilities>(() => ({ katex }), [katex]);
|
|
96
|
+
|
|
97
|
+
const lastChildStyle = useMemo(
|
|
98
|
+
() =>
|
|
99
|
+
allowTrailingMargin
|
|
100
|
+
? normalizedStyle
|
|
101
|
+
: zeroTrailingMargins(normalizedStyle),
|
|
102
|
+
[normalizedStyle, allowTrailingMargin]
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
const styles = useMemo(() => buildStyles(normalizedStyle), [normalizedStyle]);
|
|
106
|
+
|
|
107
|
+
const lastChildStyles = useMemo(
|
|
108
|
+
() => buildStyles(lastChildStyle),
|
|
109
|
+
[lastChildStyle]
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
const wrapperStyle = useMemo<CSSProperties>(
|
|
113
|
+
() => ({
|
|
114
|
+
display: 'flex',
|
|
115
|
+
flexDirection: 'column',
|
|
116
|
+
...(containerStyle as CSSProperties),
|
|
117
|
+
...(selectable ? undefined : { userSelect: 'none' }),
|
|
118
|
+
...(selectionColor
|
|
119
|
+
? ({ [ENRM_SELECTION_BG_VAR]: selectionColor } as CSSProperties)
|
|
120
|
+
: null),
|
|
121
|
+
}),
|
|
122
|
+
[containerStyle, selectable, selectionColor]
|
|
123
|
+
);
|
|
124
|
+
|
|
125
|
+
if (parseError) {
|
|
126
|
+
return (
|
|
127
|
+
<div className={ENRM_TEXT_CLASS} style={wrapperStyle} dir={dir} {...rest}>
|
|
128
|
+
<pre style={parseErrorFallbackStyle}>{markdown}</pre>
|
|
129
|
+
</div>
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (!ast) return null;
|
|
134
|
+
|
|
135
|
+
const children = ast.children ?? [];
|
|
136
|
+
const lastIdx = children.length - 1;
|
|
137
|
+
|
|
138
|
+
return (
|
|
139
|
+
<div className={ENRM_TEXT_CLASS} style={wrapperStyle} dir={dir} {...rest}>
|
|
140
|
+
{children.map((child, index) => (
|
|
141
|
+
<RenderNode
|
|
142
|
+
key={`${child.type}-${index}`}
|
|
143
|
+
node={child}
|
|
144
|
+
style={index === lastIdx ? lastChildStyle : normalizedStyle}
|
|
145
|
+
styles={index === lastIdx ? lastChildStyles : styles}
|
|
146
|
+
callbacks={callbacks}
|
|
147
|
+
capabilities={capabilities}
|
|
148
|
+
/>
|
|
149
|
+
))}
|
|
150
|
+
</div>
|
|
151
|
+
);
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
export default EnrichedMarkdownText;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { injectStyleOnce } from './injectStyle';
|
|
2
|
+
|
|
3
|
+
export const ENRM_TEXT_CLASS = 'enrm-text';
|
|
4
|
+
export const ENRM_SELECTION_BG_VAR = '--enrm-selection-bg';
|
|
5
|
+
|
|
6
|
+
const RULES: ReadonlyArray<readonly [id: string, css: string]> = [
|
|
7
|
+
[
|
|
8
|
+
'enrm-selection-style',
|
|
9
|
+
`.${ENRM_TEXT_CLASS} ::selection { background-color: var(${ENRM_SELECTION_BG_VAR}); }`,
|
|
10
|
+
],
|
|
11
|
+
];
|
|
12
|
+
|
|
13
|
+
for (const [id, css] of RULES) {
|
|
14
|
+
injectStyleOnce(id, css);
|
|
15
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/// <reference lib="dom" />
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Idempotently injects a `<style>` rule into `document.head`.
|
|
5
|
+
*
|
|
6
|
+
* Safe on SSR (no-op when `document` is undefined) and HMR (de-duped by `id`).
|
|
7
|
+
* Intended for module-level invocation: `N` mounted components produce a
|
|
8
|
+
* single `<style>` tag in the DOM.
|
|
9
|
+
*/
|
|
10
|
+
export const injectStyleOnce = (id: string, css: string): void => {
|
|
11
|
+
if (typeof document === 'undefined') return;
|
|
12
|
+
if (document.getElementById(id) != null) return;
|
|
13
|
+
const style = document.createElement('style');
|
|
14
|
+
style.id = id;
|
|
15
|
+
style.textContent = css;
|
|
16
|
+
document.head.appendChild(style);
|
|
17
|
+
};
|
package/src/web/katex.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface KaTeXInstance {
|
|
2
|
+
renderToString(
|
|
3
|
+
expression: string,
|
|
4
|
+
options?: {
|
|
5
|
+
displayMode?: boolean;
|
|
6
|
+
throwOnError?: boolean;
|
|
7
|
+
trust?: boolean;
|
|
8
|
+
output?: 'html' | 'mathml' | 'htmlAndMathml';
|
|
9
|
+
}
|
|
10
|
+
): string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
let katexLoadPromise: Promise<KaTeXInstance | null> | null = null;
|
|
14
|
+
|
|
15
|
+
/** Lazily loads KaTeX. Resolves to null if not installed. */
|
|
16
|
+
export function loadKaTeX(): Promise<KaTeXInstance | null> {
|
|
17
|
+
if (!katexLoadPromise) {
|
|
18
|
+
let instance: KaTeXInstance | null = null;
|
|
19
|
+
try {
|
|
20
|
+
const mod = require('katex');
|
|
21
|
+
const candidate = (mod?.default ?? mod) as KaTeXInstance | null;
|
|
22
|
+
if (typeof candidate?.renderToString === 'function') {
|
|
23
|
+
instance = candidate;
|
|
24
|
+
}
|
|
25
|
+
} catch {
|
|
26
|
+
// katex not installed — math rendering will be skipped
|
|
27
|
+
}
|
|
28
|
+
katexLoadPromise = Promise.resolve(instance);
|
|
29
|
+
}
|
|
30
|
+
return katexLoadPromise;
|
|
31
|
+
}
|