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,418 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <TargetConditionals.h>
|
|
4
|
+
|
|
5
|
+
// RCTUIKit.h is react-native-macos only. On iOS we import UIKit and define the aliases ourselves.
|
|
6
|
+
#if !TARGET_OS_OSX
|
|
7
|
+
#import <UIKit/UIKit.h>
|
|
8
|
+
#define RCTUIColor UIColor
|
|
9
|
+
#define RCTUIImage UIImage
|
|
10
|
+
#define RCTUIView UIView
|
|
11
|
+
#define RCTUIScrollView UIScrollView
|
|
12
|
+
#define RCTUIGraphicsImageRenderer UIGraphicsImageRenderer
|
|
13
|
+
#define RCTUIGraphicsImageRendererContext UIGraphicsImageRendererContext
|
|
14
|
+
#define RCTUIGraphicsImageRendererFormat UIGraphicsImageRendererFormat
|
|
15
|
+
#define ENRMPlatformTextView UITextView
|
|
16
|
+
#define ENRMTapRecognizer UITapGestureRecognizer
|
|
17
|
+
|
|
18
|
+
// Inline helpers that RCTUIKit.h normally provides on iOS.
|
|
19
|
+
static inline UIBezierPath *UIBezierPathWithRoundedRect(CGRect rect, CGFloat cornerRadius)
|
|
20
|
+
{
|
|
21
|
+
return [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:cornerRadius];
|
|
22
|
+
}
|
|
23
|
+
static inline void UIBezierPathAppendPath(UIBezierPath *path, UIBezierPath *appendPath)
|
|
24
|
+
{
|
|
25
|
+
[path appendPath:appendPath];
|
|
26
|
+
}
|
|
27
|
+
static inline CGFloat UIFontLineHeight(UIFont *font)
|
|
28
|
+
{
|
|
29
|
+
return font.lineHeight;
|
|
30
|
+
}
|
|
31
|
+
#else
|
|
32
|
+
#import <React/RCTTextUIKit.h>
|
|
33
|
+
#import <React/RCTUIKit.h>
|
|
34
|
+
#import <React/RCTUITextView.h>
|
|
35
|
+
#define ENRMPlatformTextView RCTUITextView
|
|
36
|
+
#define ENRMTapRecognizer NSClickGestureRecognizer
|
|
37
|
+
#endif
|
|
38
|
+
|
|
39
|
+
/// On iOS, explicitly sets opaque=NO — without it the renderer produces an opaque backing,
|
|
40
|
+
/// breaking transparent backgrounds. macOS handles transparency by default.
|
|
41
|
+
static inline RCTUIGraphicsImageRenderer *ImageRendererForSize(CGSize size)
|
|
42
|
+
{
|
|
43
|
+
#if !TARGET_OS_OSX
|
|
44
|
+
RCTUIGraphicsImageRendererFormat *format = [RCTUIGraphicsImageRendererFormat preferredFormat];
|
|
45
|
+
format.opaque = NO;
|
|
46
|
+
return [[RCTUIGraphicsImageRenderer alloc] initWithSize:size format:format];
|
|
47
|
+
#else
|
|
48
|
+
return [[RCTUIGraphicsImageRenderer alloc] initWithSize:size];
|
|
49
|
+
#endif
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/// NSBezierPath uses NS-prefixed enum values; UIBezierPath uses kCG-prefixed constants.
|
|
53
|
+
static inline void BezierPathSetRoundStyle(UIBezierPath *path)
|
|
54
|
+
{
|
|
55
|
+
#if !TARGET_OS_OSX
|
|
56
|
+
path.lineCapStyle = kCGLineCapRound;
|
|
57
|
+
path.lineJoinStyle = kCGLineJoinRound;
|
|
58
|
+
#else
|
|
59
|
+
path.lineCapStyle = NSLineCapStyleRound;
|
|
60
|
+
path.lineJoinStyle = NSLineJoinStyleRound;
|
|
61
|
+
#endif
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/// Cross-platform line segment: NSBezierPath uses lineToPoint: instead of addLineToPoint:.
|
|
65
|
+
static inline void BezierPathAddLine(UIBezierPath *path, CGPoint point)
|
|
66
|
+
{
|
|
67
|
+
#if !TARGET_OS_OSX
|
|
68
|
+
[path addLineToPoint:point];
|
|
69
|
+
#else
|
|
70
|
+
[path lineToPoint:point];
|
|
71
|
+
#endif
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/// Cross-platform quad-curve: NSBezierPath lacks addQuadCurveToPoint:, so we approximate
|
|
75
|
+
/// with a cubic Bezier using the standard quadratic-to-cubic conversion.
|
|
76
|
+
static inline void BezierPathAddQuadCurve(UIBezierPath *path, CGPoint end, CGPoint control)
|
|
77
|
+
{
|
|
78
|
+
#if !TARGET_OS_OSX
|
|
79
|
+
[path addQuadCurveToPoint:end controlPoint:control];
|
|
80
|
+
#else
|
|
81
|
+
CGPoint start = [path currentPoint];
|
|
82
|
+
[path curveToPoint:end
|
|
83
|
+
controlPoint1:CGPointMake(start.x + 2.0 / 3.0 * (control.x - start.x),
|
|
84
|
+
start.y + 2.0 / 3.0 * (control.y - start.y))
|
|
85
|
+
controlPoint2:CGPointMake(end.x + 2.0 / 3.0 * (control.x - end.x), end.y + 2.0 / 3.0 * (control.y - end.y))];
|
|
86
|
+
#endif
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/// Cross-platform IME composition check: UITextView uses markedTextRange (nullable UITextRange);
|
|
90
|
+
/// NSTextView uses hasMarkedText (BOOL).
|
|
91
|
+
static inline BOOL ENRMHasMarkedText(ENRMPlatformTextView *textView)
|
|
92
|
+
{
|
|
93
|
+
#if !TARGET_OS_OSX
|
|
94
|
+
return textView.markedTextRange != nil;
|
|
95
|
+
#else
|
|
96
|
+
return textView.hasMarkedText;
|
|
97
|
+
#endif
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/// Cross-platform plain text read: UITextView uses .text; NSTextView uses .string.
|
|
101
|
+
static inline NSString *ENRMGetPlainText(ENRMPlatformTextView *textView)
|
|
102
|
+
{
|
|
103
|
+
#if !TARGET_OS_OSX
|
|
104
|
+
return textView.text;
|
|
105
|
+
#else
|
|
106
|
+
return textView.string;
|
|
107
|
+
#endif
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/// Cross-platform plain text write: UITextView uses .text setter; NSTextView uses setString:.
|
|
111
|
+
static inline void ENRMSetPlainText(ENRMPlatformTextView *textView, NSString *text)
|
|
112
|
+
{
|
|
113
|
+
#if !TARGET_OS_OSX
|
|
114
|
+
textView.text = text;
|
|
115
|
+
#else
|
|
116
|
+
[textView setString:text];
|
|
117
|
+
#endif
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/// Cross-platform attributed text read: NSTextView exposes content via textStorage;
|
|
121
|
+
/// UITextView exposes it via attributedText.
|
|
122
|
+
static inline NSAttributedString *ENRMGetAttributedText(ENRMPlatformTextView *textView)
|
|
123
|
+
{
|
|
124
|
+
#if !TARGET_OS_OSX
|
|
125
|
+
return textView.attributedText;
|
|
126
|
+
#else
|
|
127
|
+
return textView.textStorage;
|
|
128
|
+
#endif
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/// Cross-platform attributed text write: NSTextView uses textStorage setAttributedString:;
|
|
132
|
+
/// UITextView uses the attributedText property setter.
|
|
133
|
+
static inline void ENRMSetAttributedText(ENRMPlatformTextView *textView, NSAttributedString *text)
|
|
134
|
+
{
|
|
135
|
+
#if !TARGET_OS_OSX
|
|
136
|
+
textView.attributedText = text;
|
|
137
|
+
#else
|
|
138
|
+
[textView.textStorage setAttributedString:text];
|
|
139
|
+
#endif
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/// Cross-platform text replacement at a given range.
|
|
143
|
+
/// iOS uses UITextInput protocol methods; macOS uses NSTextView's insertText:replacementRange:.
|
|
144
|
+
static inline void ENRMReplaceTextInRange(ENRMPlatformTextView *textView, NSString *text, NSRange range)
|
|
145
|
+
{
|
|
146
|
+
#if !TARGET_OS_OSX
|
|
147
|
+
UITextPosition *start = [textView positionFromPosition:textView.beginningOfDocument offset:(NSInteger)range.location];
|
|
148
|
+
UITextPosition *end = [textView positionFromPosition:textView.beginningOfDocument
|
|
149
|
+
offset:(NSInteger)NSMaxRange(range)];
|
|
150
|
+
[textView replaceRange:[textView textRangeFromPosition:start toPosition:end] withText:text];
|
|
151
|
+
#else
|
|
152
|
+
[textView insertText:text replacementRange:range];
|
|
153
|
+
#endif
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/// Cross-platform content size update after measurement.
|
|
157
|
+
/// iOS UITextView has a settable contentSize; macOS NSTextView does not.
|
|
158
|
+
static inline void ENRMSetContentSize(ENRMPlatformTextView *textView, CGSize size)
|
|
159
|
+
{
|
|
160
|
+
#if !TARGET_OS_OSX
|
|
161
|
+
textView.contentSize = size;
|
|
162
|
+
#endif
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/// Returns YES when the user has asked the system to minimise motion.
|
|
166
|
+
/// iOS: UIAccessibilityIsReduceMotionEnabled.
|
|
167
|
+
/// macOS: NSWorkspace.shared.accessibilityDisplayShouldReduceMotion.
|
|
168
|
+
/// Always NO on platforms where the API is unavailable.
|
|
169
|
+
static inline BOOL ENRMShouldReduceMotion(void)
|
|
170
|
+
{
|
|
171
|
+
#if !TARGET_OS_OSX
|
|
172
|
+
return UIAccessibilityIsReduceMotionEnabled();
|
|
173
|
+
#else
|
|
174
|
+
if (@available(macOS 10.12, *)) {
|
|
175
|
+
return NSWorkspace.sharedWorkspace.accessibilityDisplayShouldReduceMotion;
|
|
176
|
+
}
|
|
177
|
+
return NO;
|
|
178
|
+
#endif
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/// Sets default typing attributes on the text view.
|
|
182
|
+
/// On macOS, RCTUITextView overrides setTypingAttributes: to use defaultTextAttributes,
|
|
183
|
+
/// so we must set that property as well.
|
|
184
|
+
static inline void ENRMSetDefaultTypingAttributes(ENRMPlatformTextView *textView, NSDictionary *attrs)
|
|
185
|
+
{
|
|
186
|
+
#if TARGET_OS_OSX
|
|
187
|
+
textView.defaultTextAttributes = attrs;
|
|
188
|
+
#endif
|
|
189
|
+
textView.typingAttributes = attrs;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/// Applies shared configuration to a text view used for markdown input editing.
|
|
193
|
+
/// Handles platform differences: scroll indicators, text container insets,
|
|
194
|
+
/// drawsBackground (macOS). Sets editable=YES, scrollEnabled=YES.
|
|
195
|
+
static inline void ENRMConfigureMarkdownTextInputTextView(ENRMPlatformTextView *textView)
|
|
196
|
+
{
|
|
197
|
+
textView.font = [UIFont systemFontOfSize:16.0];
|
|
198
|
+
textView.backgroundColor = [RCTUIColor clearColor];
|
|
199
|
+
textView.editable = YES;
|
|
200
|
+
#if !TARGET_OS_OSX
|
|
201
|
+
textView.scrollEnabled = YES;
|
|
202
|
+
textView.showsVerticalScrollIndicator = NO;
|
|
203
|
+
textView.showsHorizontalScrollIndicator = NO;
|
|
204
|
+
textView.textContainerInset = UIEdgeInsetsZero;
|
|
205
|
+
#else
|
|
206
|
+
textView.textContainerInsets = UIEdgeInsetsZero;
|
|
207
|
+
textView.drawsBackground = NO;
|
|
208
|
+
#endif
|
|
209
|
+
textView.textContainer.lineFragmentPadding = 0;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/// Cross-platform cursor color: iOS uses tintColor; macOS uses insertionPointColor.
|
|
213
|
+
static inline void ENRMSetCursorColor(ENRMPlatformTextView *textView, RCTUIColor *color)
|
|
214
|
+
{
|
|
215
|
+
#if !TARGET_OS_OSX
|
|
216
|
+
textView.tintColor = color;
|
|
217
|
+
#else
|
|
218
|
+
textView.insertionPointColor = color;
|
|
219
|
+
#endif
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/// Cross-platform selection color: iOS uses tintColor (also affects the caret
|
|
223
|
+
/// and selection handles); macOS sets the selection background via
|
|
224
|
+
/// `selectedTextAttributes`. Pass `nil` to restore the system default.
|
|
225
|
+
static inline void ENRMSetSelectionColor(ENRMPlatformTextView *textView, RCTUIColor *color)
|
|
226
|
+
{
|
|
227
|
+
#if !TARGET_OS_OSX
|
|
228
|
+
textView.tintColor = color;
|
|
229
|
+
#else
|
|
230
|
+
RCTUIColor *resolved = color ?: [NSColor selectedTextBackgroundColor];
|
|
231
|
+
textView.selectedTextAttributes = @{NSBackgroundColorAttributeName : resolved};
|
|
232
|
+
#endif
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/// Cross-platform focus: iOS uses becomeFirstResponder;
|
|
236
|
+
/// macOS uses makeFirstResponder: on the window.
|
|
237
|
+
static inline void ENRMFocusTextView(ENRMPlatformTextView *textView)
|
|
238
|
+
{
|
|
239
|
+
#if !TARGET_OS_OSX
|
|
240
|
+
[textView becomeFirstResponder];
|
|
241
|
+
#else
|
|
242
|
+
[textView.window makeFirstResponder:textView];
|
|
243
|
+
#endif
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/// Cross-platform blur: iOS uses resignFirstResponder;
|
|
247
|
+
/// macOS clears first responder via the window.
|
|
248
|
+
static inline void ENRMBlurTextView(ENRMPlatformTextView *textView)
|
|
249
|
+
{
|
|
250
|
+
#if !TARGET_OS_OSX
|
|
251
|
+
[textView resignFirstResponder];
|
|
252
|
+
#else
|
|
253
|
+
[textView.window makeFirstResponder:nil];
|
|
254
|
+
#endif
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/// Applies shared configuration to a text view used for markdown rendering.
|
|
258
|
+
/// Handles platform differences: scroll indicators, text container insets,
|
|
259
|
+
/// drawsBackground (macOS), accessibilityElementsHidden (iOS).
|
|
260
|
+
static inline void ENRMConfigureMarkdownTextView(ENRMPlatformTextView *textView)
|
|
261
|
+
{
|
|
262
|
+
textView.font = [UIFont systemFontOfSize:16.0];
|
|
263
|
+
textView.backgroundColor = [RCTUIColor clearColor];
|
|
264
|
+
textView.textColor = [RCTUIColor blackColor];
|
|
265
|
+
textView.editable = NO;
|
|
266
|
+
textView.scrollEnabled = NO;
|
|
267
|
+
#if !TARGET_OS_OSX
|
|
268
|
+
textView.showsVerticalScrollIndicator = NO;
|
|
269
|
+
textView.showsHorizontalScrollIndicator = NO;
|
|
270
|
+
textView.textContainerInset = UIEdgeInsetsZero;
|
|
271
|
+
#else
|
|
272
|
+
textView.textContainerInsets = UIEdgeInsetsZero;
|
|
273
|
+
textView.drawsBackground = NO;
|
|
274
|
+
#endif
|
|
275
|
+
textView.textContainer.lineFragmentPadding = 0;
|
|
276
|
+
textView.linkTextAttributes = @{};
|
|
277
|
+
textView.selectable = YES;
|
|
278
|
+
#if !TARGET_OS_OSX
|
|
279
|
+
textView.accessibilityElementsHidden = YES;
|
|
280
|
+
#endif
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/// Result of a text layout measurement pass.
|
|
284
|
+
typedef struct {
|
|
285
|
+
CGRect usedRect;
|
|
286
|
+
CGRect extraLineFragmentRect;
|
|
287
|
+
} ENRMTextLayoutResult;
|
|
288
|
+
|
|
289
|
+
/// Measures text layout in a text view for a given width.
|
|
290
|
+
/// On macOS, temporarily disables widthTracksTextView so the container width
|
|
291
|
+
/// can be set directly without being overridden by the view's frame.
|
|
292
|
+
static inline ENRMTextLayoutResult ENRMMeasureTextLayout(ENRMPlatformTextView *textView, CGFloat maxWidth)
|
|
293
|
+
{
|
|
294
|
+
#if TARGET_OS_OSX
|
|
295
|
+
textView.textContainer.widthTracksTextView = NO;
|
|
296
|
+
#endif
|
|
297
|
+
textView.textContainer.size = CGSizeMake(maxWidth, CGFLOAT_MAX);
|
|
298
|
+
[textView.layoutManager ensureLayoutForTextContainer:textView.textContainer];
|
|
299
|
+
ENRMTextLayoutResult result;
|
|
300
|
+
result.usedRect = [textView.layoutManager usedRectForTextContainer:textView.textContainer];
|
|
301
|
+
result.extraLineFragmentRect = textView.layoutManager.extraLineFragmentRect;
|
|
302
|
+
#if TARGET_OS_OSX
|
|
303
|
+
textView.textContainer.widthTracksTextView = YES;
|
|
304
|
+
#endif
|
|
305
|
+
return result;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/// Cross-platform display refresh: UIView requires layoutIfNeeded before setNeedsDisplay
|
|
309
|
+
/// to flush pending layout before the redraw; NSView takes a BOOL argument.
|
|
310
|
+
/// Implemented as a macro to avoid Objective-C++ implicit pointer conversion issues in .mm files.
|
|
311
|
+
#if !TARGET_OS_OSX
|
|
312
|
+
#define ENRMSetNeedsDisplay(view) \
|
|
313
|
+
do { \
|
|
314
|
+
[(view) layoutIfNeeded]; \
|
|
315
|
+
[(view) setNeedsDisplay]; \
|
|
316
|
+
} while (0)
|
|
317
|
+
#else
|
|
318
|
+
#define ENRMSetNeedsDisplay(view) [(view) setNeedsDisplay:YES]
|
|
319
|
+
#endif
|
|
320
|
+
|
|
321
|
+
/// Invalidates the text container, re-lays out any existing content, and
|
|
322
|
+
/// triggers a redraw. On iOS also resets contentOffset to zero.
|
|
323
|
+
/// Does NOT touch the text view's frame — callers that need to reposition
|
|
324
|
+
/// the view should set the frame themselves before calling this.
|
|
325
|
+
static inline void ENRMRefreshTextViewLayout(ENRMPlatformTextView *textView)
|
|
326
|
+
{
|
|
327
|
+
#if !TARGET_OS_OSX
|
|
328
|
+
textView.contentOffset = CGPointZero;
|
|
329
|
+
#endif
|
|
330
|
+
textView.textContainer.size = CGSizeMake(textView.bounds.size.width, CGFLOAT_MAX);
|
|
331
|
+
NSUInteger textLength = ENRMGetAttributedText(textView).length;
|
|
332
|
+
if (textLength > 0) {
|
|
333
|
+
[textView.layoutManager invalidateLayoutForCharacterRange:NSMakeRange(0, textLength) actualCharacterRange:NULL];
|
|
334
|
+
[textView.layoutManager ensureLayoutForTextContainer:textView.textContainer];
|
|
335
|
+
}
|
|
336
|
+
ENRMSetNeedsDisplay(textView);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/// Refreshes a text view's layout and display after it is attached to a window.
|
|
340
|
+
/// Sets the frame and text container to the given bounds, invalidates layout for
|
|
341
|
+
/// any existing content, then triggers a redraw.
|
|
342
|
+
static inline void ENRMRefreshTextViewAfterWindowAttach(ENRMPlatformTextView *textView, CGRect bounds)
|
|
343
|
+
{
|
|
344
|
+
textView.frame = bounds;
|
|
345
|
+
ENRMRefreshTextViewLayout(textView);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/// Cross-platform text deselection: UITextView uses selectedTextRange (nullable);
|
|
349
|
+
/// NSTextView uses selectedRange (length-based).
|
|
350
|
+
static inline void ENRMClearSelection(ENRMPlatformTextView *textView)
|
|
351
|
+
{
|
|
352
|
+
#if !TARGET_OS_OSX
|
|
353
|
+
if (textView.selectedTextRange != nil) {
|
|
354
|
+
textView.selectedTextRange = nil;
|
|
355
|
+
}
|
|
356
|
+
#else
|
|
357
|
+
if (textView.selectedRange.length > 0) {
|
|
358
|
+
textView.selectedRange = NSMakeRange(0, 0);
|
|
359
|
+
}
|
|
360
|
+
#endif
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// ── Placeholder label abstraction ──────────────────────────────────────────────
|
|
364
|
+
|
|
365
|
+
#if !TARGET_OS_OSX
|
|
366
|
+
typedef UILabel ENRMPlaceholderLabel;
|
|
367
|
+
#else
|
|
368
|
+
typedef NSTextField ENRMPlaceholderLabel;
|
|
369
|
+
#endif
|
|
370
|
+
|
|
371
|
+
/// Creates a placeholder label configured for use inside an ENRMPlatformTextView.
|
|
372
|
+
/// On iOS: UILabel with multiline, placeholderTextColor, auto-layout pinned to
|
|
373
|
+
/// textContainerInset and lineFragmentPadding.
|
|
374
|
+
/// On macOS: borderless, non-editable NSTextField pinned to the text view origin.
|
|
375
|
+
static inline ENRMPlaceholderLabel *ENRMCreatePlaceholderLabel(ENRMPlatformTextView *textView, UIFont *font)
|
|
376
|
+
{
|
|
377
|
+
#if !TARGET_OS_OSX
|
|
378
|
+
UILabel *label = [[UILabel alloc] init];
|
|
379
|
+
label.numberOfLines = 0;
|
|
380
|
+
label.textColor = [UIColor placeholderTextColor];
|
|
381
|
+
label.font = font;
|
|
382
|
+
label.translatesAutoresizingMaskIntoConstraints = NO;
|
|
383
|
+
[textView addSubview:label];
|
|
384
|
+
[NSLayoutConstraint activateConstraints:@[
|
|
385
|
+
[label.topAnchor constraintEqualToAnchor:textView.topAnchor constant:textView.textContainerInset.top],
|
|
386
|
+
[label.leadingAnchor constraintEqualToAnchor:textView.leadingAnchor
|
|
387
|
+
constant:textView.textContainer.lineFragmentPadding],
|
|
388
|
+
[label.trailingAnchor constraintEqualToAnchor:textView.trailingAnchor
|
|
389
|
+
constant:-textView.textContainer.lineFragmentPadding],
|
|
390
|
+
]];
|
|
391
|
+
return label;
|
|
392
|
+
#else
|
|
393
|
+
NSTextField *label = [[NSTextField alloc] initWithFrame:CGRectZero];
|
|
394
|
+
label.bordered = NO;
|
|
395
|
+
label.editable = NO;
|
|
396
|
+
label.selectable = NO;
|
|
397
|
+
label.drawsBackground = NO;
|
|
398
|
+
label.textColor = [NSColor placeholderTextColor];
|
|
399
|
+
label.font = font;
|
|
400
|
+
label.translatesAutoresizingMaskIntoConstraints = NO;
|
|
401
|
+
[textView addSubview:label];
|
|
402
|
+
[NSLayoutConstraint activateConstraints:@[
|
|
403
|
+
[label.topAnchor constraintEqualToAnchor:textView.topAnchor],
|
|
404
|
+
[label.leadingAnchor constraintEqualToAnchor:textView.leadingAnchor],
|
|
405
|
+
]];
|
|
406
|
+
return label;
|
|
407
|
+
#endif
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
/// Cross-platform placeholder text setter.
|
|
411
|
+
static inline void ENRMSetPlaceholderText(ENRMPlaceholderLabel *label, NSString *text)
|
|
412
|
+
{
|
|
413
|
+
#if !TARGET_OS_OSX
|
|
414
|
+
label.text = text;
|
|
415
|
+
#else
|
|
416
|
+
label.stringValue = text;
|
|
417
|
+
#endif
|
|
418
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#import "ContextMenuUtils.h"
|
|
2
|
+
#import "ENRMMenuAction.h"
|
|
3
|
+
#import "EditMenuUtils.h"
|
|
4
|
+
#import "PasteboardUtils.h"
|
|
5
|
+
#import "StyleConfig.h"
|
|
6
|
+
#include <TargetConditionals.h>
|
|
7
|
+
|
|
8
|
+
#if TARGET_OS_OSX
|
|
9
|
+
|
|
10
|
+
NSMenu *_Nullable buildEditMenuForSelection(NSAttributedString *attributedText, NSRange range,
|
|
11
|
+
NSString *_Nullable cachedMarkdown, StyleConfig *styleConfig,
|
|
12
|
+
NSArray *suggestedActions, NSArray<NSMenuItem *> *_Nullable customItems,
|
|
13
|
+
ENRMSelectionMenuConfig selectionMenuConfig)
|
|
14
|
+
{
|
|
15
|
+
NSMenu *menu = ([suggestedActions.firstObject isKindOfClass:[NSMenu class]]) ? (NSMenu *)suggestedActions.firstObject
|
|
16
|
+
: [[NSMenu alloc] initWithTitle:@""];
|
|
17
|
+
|
|
18
|
+
if (range.length == 0) {
|
|
19
|
+
return menu;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
NSAttributedString *selectedText = [attributedText attributedSubstringFromRange:range];
|
|
23
|
+
NSString *markdown = markdownForRange(attributedText, range, cachedMarkdown);
|
|
24
|
+
NSArray<NSString *> *imageURLs = imageURLsInRange(attributedText, range);
|
|
25
|
+
|
|
26
|
+
// Replace the system Copy item with our enhanced version (copies RTF/HTML/Markdown).
|
|
27
|
+
// This mirrors the iOS behaviour where we replace the standard-edit Copy action.
|
|
28
|
+
NSMenuItem *enhancedCopy =
|
|
29
|
+
ENRMCreateMenuItem(@"Copy", ^{ copyAttributedStringToPasteboard(selectedText, markdown, styleConfig); });
|
|
30
|
+
NSInteger systemCopyIndex = [menu indexOfItemWithTarget:nil andAction:@selector(copy:)];
|
|
31
|
+
if (systemCopyIndex != NSNotFound) {
|
|
32
|
+
[menu removeItemAtIndex:systemCopyIndex];
|
|
33
|
+
[menu insertItem:enhancedCopy atIndex:systemCopyIndex];
|
|
34
|
+
} else {
|
|
35
|
+
if (menu.numberOfItems > 0) {
|
|
36
|
+
[menu addItem:[NSMenuItem separatorItem]];
|
|
37
|
+
}
|
|
38
|
+
[menu addItem:enhancedCopy];
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (selectionMenuConfig.copyAsMarkdown && markdown.length > 0) {
|
|
42
|
+
[menu addItem:ENRMCreateMenuItem(@"Copy as Markdown", ^{ copyStringToPasteboard(markdown); })];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (selectionMenuConfig.copyImageURL && imageURLs.count > 0) {
|
|
46
|
+
NSString *title = (imageURLs.count == 1)
|
|
47
|
+
? @"Copy Image URL"
|
|
48
|
+
: [NSString stringWithFormat:@"Copy %lu Image URLs", (unsigned long)imageURLs.count];
|
|
49
|
+
[menu addItem:ENRMCreateMenuItem(title, ^{
|
|
50
|
+
NSString *urlsToCopy = [imageURLs componentsJoinedByString:@"\n"];
|
|
51
|
+
copyStringToPasteboard(urlsToCopy);
|
|
52
|
+
})];
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
ENRMPrependMenuItems(menu, customItems);
|
|
56
|
+
|
|
57
|
+
return menu;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
#endif
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
#import "ENRMUIKit.h"
|
|
3
|
+
#import <Foundation/Foundation.h>
|
|
4
|
+
|
|
5
|
+
@class StyleConfig;
|
|
6
|
+
|
|
7
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
8
|
+
|
|
9
|
+
typedef struct {
|
|
10
|
+
BOOL copyAsMarkdown;
|
|
11
|
+
BOOL copyImageURL;
|
|
12
|
+
} ENRMSelectionMenuConfig;
|
|
13
|
+
|
|
14
|
+
#ifdef __cplusplus
|
|
15
|
+
extern "C" {
|
|
16
|
+
#endif
|
|
17
|
+
|
|
18
|
+
#if !TARGET_OS_OSX
|
|
19
|
+
// TODO: Remove API_AVAILABLE(ios(16.0)) guard when the minimum iOS deployment target in RN is bumped to 16.
|
|
20
|
+
UIMenu *buildEditMenuForSelection(NSAttributedString *attributedText, NSRange range, NSString *_Nullable cachedMarkdown,
|
|
21
|
+
StyleConfig *styleConfig, NSArray<UIMenuElement *> *suggestedActions,
|
|
22
|
+
NSArray<UIAction *> *_Nullable customActions,
|
|
23
|
+
ENRMSelectionMenuConfig selectionMenuConfig) API_AVAILABLE(ios(16.0));
|
|
24
|
+
#else
|
|
25
|
+
NSMenu *_Nullable buildEditMenuForSelection(NSAttributedString *attributedText, NSRange range,
|
|
26
|
+
NSString *_Nullable cachedMarkdown, StyleConfig *styleConfig,
|
|
27
|
+
NSArray *suggestedActions, NSArray<NSMenuItem *> *_Nullable customItems,
|
|
28
|
+
ENRMSelectionMenuConfig selectionMenuConfig);
|
|
29
|
+
#endif
|
|
30
|
+
|
|
31
|
+
#ifdef __cplusplus
|
|
32
|
+
}
|
|
33
|
+
#endif
|
|
34
|
+
|
|
35
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
#import "EditMenuUtils.h"
|
|
2
|
+
#import "PasteboardUtils.h"
|
|
3
|
+
#import "StyleConfig.h"
|
|
4
|
+
#include <TargetConditionals.h>
|
|
5
|
+
|
|
6
|
+
#if !TARGET_OS_OSX
|
|
7
|
+
|
|
8
|
+
static NSString *const kMenuIdentifierStandardEdit = @"com.apple.menu.standard-edit";
|
|
9
|
+
static NSString *const kActionIdentifierCopy = @"com.swmansion.enriched.markdown.copy";
|
|
10
|
+
static NSString *const kActionIdentifierCopyMarkdown = @"com.swmansion.enriched.markdown.copyMarkdown";
|
|
11
|
+
static NSString *const kActionIdentifierCopyImageURL = @"com.swmansion.enriched.markdown.copyImageURL";
|
|
12
|
+
|
|
13
|
+
static UIAction *createCopyAction(NSAttributedString *selectedText, NSString *markdown, StyleConfig *styleConfig)
|
|
14
|
+
{
|
|
15
|
+
return [UIAction actionWithTitle:@"Copy"
|
|
16
|
+
image:[RCTUIImage systemImageNamed:@"doc.on.doc"]
|
|
17
|
+
identifier:kActionIdentifierCopy
|
|
18
|
+
handler:^(__kindof UIAction *action) {
|
|
19
|
+
copyAttributedStringToPasteboard(selectedText, markdown, styleConfig);
|
|
20
|
+
}];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
static UIAction *_Nullable createCopyMarkdownAction(NSString *markdown)
|
|
24
|
+
{
|
|
25
|
+
if (markdown.length == 0)
|
|
26
|
+
return nil;
|
|
27
|
+
|
|
28
|
+
return [UIAction actionWithTitle:@"Copy as Markdown"
|
|
29
|
+
image:[RCTUIImage systemImageNamed:@"doc.text"]
|
|
30
|
+
identifier:kActionIdentifierCopyMarkdown
|
|
31
|
+
handler:^(__kindof UIAction *action) { copyStringToPasteboard(markdown); }];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
static UIAction *_Nullable createCopyImageURLAction(NSArray<NSString *> *imageURLs)
|
|
35
|
+
{
|
|
36
|
+
if (imageURLs.count == 0)
|
|
37
|
+
return nil;
|
|
38
|
+
|
|
39
|
+
NSString *urlsToCopy = [imageURLs componentsJoinedByString:@"\n"];
|
|
40
|
+
NSString *title = (imageURLs.count == 1)
|
|
41
|
+
? @"Copy Image URL"
|
|
42
|
+
: [NSString stringWithFormat:@"Copy %lu Image URLs", (unsigned long)imageURLs.count];
|
|
43
|
+
|
|
44
|
+
return [UIAction actionWithTitle:title
|
|
45
|
+
image:[RCTUIImage systemImageNamed:@"link"]
|
|
46
|
+
identifier:kActionIdentifierCopyImageURL
|
|
47
|
+
handler:^(__kindof UIAction *action) { copyStringToPasteboard(urlsToCopy); }];
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
static UIMenu *createEnhancedStandardEditMenu(UIMenu *originalMenu, UIAction *copyAction)
|
|
51
|
+
{
|
|
52
|
+
return [UIMenu menuWithTitle:originalMenu.title
|
|
53
|
+
image:originalMenu.image
|
|
54
|
+
identifier:originalMenu.identifier
|
|
55
|
+
options:originalMenu.options
|
|
56
|
+
children:@[ copyAction ]];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
static void addOptionalAction(NSMutableArray<UIMenuElement *> *array, UIAction *_Nullable action)
|
|
60
|
+
{
|
|
61
|
+
if (action) {
|
|
62
|
+
[array addObject:action];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
static void insertOptionalAction(NSMutableArray<UIMenuElement *> *array, UIAction *_Nullable action, NSUInteger index)
|
|
67
|
+
{
|
|
68
|
+
if (action) {
|
|
69
|
+
[array insertObject:action atIndex:index];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// TODO: Remove API_AVAILABLE(ios(16.0)) guard when the minimum iOS deployment target in RN is bumped to 16.
|
|
74
|
+
UIMenu *buildEditMenuForSelection(NSAttributedString *attributedText, NSRange range, NSString *_Nullable cachedMarkdown,
|
|
75
|
+
StyleConfig *styleConfig, NSArray<UIMenuElement *> *suggestedActions,
|
|
76
|
+
NSArray<UIAction *> *_Nullable customActions,
|
|
77
|
+
ENRMSelectionMenuConfig selectionMenuConfig) API_AVAILABLE(ios(16.0))
|
|
78
|
+
{
|
|
79
|
+
NSAttributedString *selectedText = [attributedText attributedSubstringFromRange:range];
|
|
80
|
+
NSString *markdown = markdownForRange(attributedText, range, cachedMarkdown);
|
|
81
|
+
NSArray<NSString *> *imageURLs = imageURLsInRange(attributedText, range);
|
|
82
|
+
|
|
83
|
+
UIAction *copyAction = createCopyAction(selectedText, markdown, styleConfig);
|
|
84
|
+
UIAction *copyMarkdownAction = selectionMenuConfig.copyAsMarkdown ? createCopyMarkdownAction(markdown) : nil;
|
|
85
|
+
UIAction *copyImageURLAction = selectionMenuConfig.copyImageURL ? createCopyImageURLAction(imageURLs) : nil;
|
|
86
|
+
|
|
87
|
+
NSMutableArray<UIMenuElement *> *result = [NSMutableArray array];
|
|
88
|
+
BOOL foundStandardEditMenu = NO;
|
|
89
|
+
|
|
90
|
+
for (UIMenuElement *element in suggestedActions) {
|
|
91
|
+
if ([element isKindOfClass:[UIMenu class]]) {
|
|
92
|
+
UIMenu *menu = (UIMenu *)element;
|
|
93
|
+
|
|
94
|
+
if ([menu.identifier isEqualToString:kMenuIdentifierStandardEdit]) {
|
|
95
|
+
// Replace standard Copy with our enhanced version
|
|
96
|
+
[result addObject:createEnhancedStandardEditMenu(menu, copyAction)];
|
|
97
|
+
addOptionalAction(result, copyMarkdownAction);
|
|
98
|
+
addOptionalAction(result, copyImageURLAction);
|
|
99
|
+
foundStandardEditMenu = YES;
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
[result addObject:element];
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (!foundStandardEditMenu) {
|
|
107
|
+
[result insertObject:copyAction atIndex:0];
|
|
108
|
+
insertOptionalAction(result, copyMarkdownAction, 1);
|
|
109
|
+
addOptionalAction(result, copyImageURLAction);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (customActions.count > 0) {
|
|
113
|
+
return [UIMenu menuWithChildren:[customActions arrayByAddingObjectsFromArray:result]];
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return [UIMenu menuWithChildren:result];
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
#endif
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#import "FontScaleObserver.h"
|
|
2
|
+
#import <React/RCTUtils.h>
|
|
3
|
+
#include <TargetConditionals.h>
|
|
4
|
+
|
|
5
|
+
@implementation FontScaleObserver {
|
|
6
|
+
CGFloat _currentFontScale;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
- (instancetype)init
|
|
10
|
+
{
|
|
11
|
+
if (self = [super init]) {
|
|
12
|
+
_allowFontScaling = YES;
|
|
13
|
+
_currentFontScale = RCTFontSizeMultiplier();
|
|
14
|
+
|
|
15
|
+
#if !TARGET_OS_OSX
|
|
16
|
+
[[NSNotificationCenter defaultCenter] addObserver:self
|
|
17
|
+
selector:@selector(contentSizeCategoryDidChange:)
|
|
18
|
+
name:UIContentSizeCategoryDidChangeNotification
|
|
19
|
+
object:nil];
|
|
20
|
+
#endif
|
|
21
|
+
// TODO: Observe macOS system font size changes. UIContentSizeCategoryDidChangeNotification
|
|
22
|
+
// is iOS-only; macOS has no direct equivalent. Possible approaches: KVO on
|
|
23
|
+
// NSApplication.effectiveAppearance or polling NSFont.systemFontSize.
|
|
24
|
+
}
|
|
25
|
+
return self;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
- (void)dealloc
|
|
29
|
+
{
|
|
30
|
+
#if !TARGET_OS_OSX
|
|
31
|
+
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIContentSizeCategoryDidChangeNotification object:nil];
|
|
32
|
+
#endif
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
- (CGFloat)effectiveFontScale
|
|
36
|
+
{
|
|
37
|
+
return _allowFontScaling ? _currentFontScale : 1.0;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
- (void)contentSizeCategoryDidChange:(NSNotification *)notification
|
|
41
|
+
{
|
|
42
|
+
if (!_allowFontScaling) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
CGFloat newFontScale = RCTFontSizeMultiplier();
|
|
47
|
+
if (_currentFontScale != newFontScale) {
|
|
48
|
+
_currentFontScale = newFontScale;
|
|
49
|
+
if (self.onChange) {
|
|
50
|
+
self.onChange();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@end
|