@mathers101/react-native-render-rich-text 0.1.9 → 0.1.14
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 -20
- package/README.md +140 -140
- package/ReactNativeRenderRichText.podspec +23 -23
- package/android/build.gradle +86 -86
- package/android/consumer-rules.pro +3 -3
- package/android/src/main/AndroidManifest.xml +2 -2
- package/android/src/main/java/com/renderrichtext/EnrichedTiptapTextLayoutManager.kt +24 -24
- package/android/src/main/java/com/renderrichtext/EnrichedTiptapTextPackage.kt +13 -13
- package/android/src/main/java/com/renderrichtext/MeasurementStore.kt +644 -644
- package/android/src/main/java/com/renderrichtext/accessibility/AccessibilityLabels.kt +17 -17
- package/android/src/main/java/com/renderrichtext/accessibility/AccessibleTiptapTextView.kt +112 -112
- package/android/src/main/java/com/renderrichtext/accessibility/TiptapAccessibilityHelper.kt +576 -576
- package/android/src/main/java/com/renderrichtext/events/CodeBlockPressEvent.kt +24 -24
- package/android/src/main/java/com/renderrichtext/events/ContextMenuItemPressEvent.kt +28 -28
- package/android/src/main/java/com/renderrichtext/events/CopyPressEvent.kt +24 -24
- package/android/src/main/java/com/renderrichtext/events/ImagePressEvent.kt +25 -25
- package/android/src/main/java/com/renderrichtext/events/LatexErrorEvent.kt +29 -29
- package/android/src/main/java/com/renderrichtext/events/LinkLongPressEvent.kt +23 -23
- package/android/src/main/java/com/renderrichtext/events/LinkPressEvent.kt +23 -23
- package/android/src/main/java/com/renderrichtext/events/MentionLongPressEvent.kt +25 -25
- package/android/src/main/java/com/renderrichtext/events/MentionPressEvent.kt +25 -25
- package/android/src/main/java/com/renderrichtext/events/TaskListItemPressEvent.kt +26 -26
- package/android/src/main/java/com/renderrichtext/math/LatexErrorReporter.kt +9 -9
- package/android/src/main/java/com/renderrichtext/parser/Parser.kt +59 -59
- package/android/src/main/java/com/renderrichtext/parser/TextLinkMatching.kt +35 -35
- package/android/src/main/java/com/renderrichtext/renderer/BaselineShiftRenderer.kt +45 -45
- package/android/src/main/java/com/renderrichtext/renderer/BlankLineRenderer.kt +39 -39
- package/android/src/main/java/com/renderrichtext/renderer/BlockquoteRenderer.kt +243 -243
- package/android/src/main/java/com/renderrichtext/renderer/BlockquoteTextRenderer.kt +56 -56
- package/android/src/main/java/com/renderrichtext/renderer/CodeBlockRenderer.kt +135 -135
- package/android/src/main/java/com/renderrichtext/renderer/CodeRenderer.kt +37 -37
- package/android/src/main/java/com/renderrichtext/renderer/EmphasisRenderer.kt +28 -28
- package/android/src/main/java/com/renderrichtext/renderer/HeadingRenderer.kt +81 -81
- package/android/src/main/java/com/renderrichtext/renderer/HighlightRenderer.kt +26 -26
- package/android/src/main/java/com/renderrichtext/renderer/LineBreakRenderer.kt +17 -17
- package/android/src/main/java/com/renderrichtext/renderer/LinkRenderer.kt +90 -90
- package/android/src/main/java/com/renderrichtext/renderer/ListContextManager.kt +109 -109
- package/android/src/main/java/com/renderrichtext/renderer/ListItemRenderer.kt +211 -211
- package/android/src/main/java/com/renderrichtext/renderer/ListRenderer.kt +133 -133
- package/android/src/main/java/com/renderrichtext/renderer/MentionRenderer.kt +85 -85
- package/android/src/main/java/com/renderrichtext/renderer/ParagraphRenderer.kt +91 -91
- package/android/src/main/java/com/renderrichtext/renderer/Renderer.kt +148 -148
- package/android/src/main/java/com/renderrichtext/renderer/SoftBreakRenderer.kt +17 -17
- package/android/src/main/java/com/renderrichtext/renderer/SpanStyleCache.kt +143 -143
- package/android/src/main/java/com/renderrichtext/renderer/StrikethroughRenderer.kt +28 -28
- package/android/src/main/java/com/renderrichtext/renderer/StrongRenderer.kt +28 -28
- package/android/src/main/java/com/renderrichtext/renderer/TextRenderer.kt +31 -31
- package/android/src/main/java/com/renderrichtext/renderer/ThematicBreakRenderer.kt +46 -46
- package/android/src/main/java/com/renderrichtext/renderer/UnderlineRenderer.kt +28 -28
- package/android/src/main/java/com/renderrichtext/spans/BaseListSpan.kt +164 -164
- package/android/src/main/java/com/renderrichtext/spans/BaselineShiftSpan.kt +27 -27
- package/android/src/main/java/com/renderrichtext/spans/BlockquoteSpan.kt +302 -302
- package/android/src/main/java/com/renderrichtext/spans/CodeBackgroundSpan.kt +205 -205
- package/android/src/main/java/com/renderrichtext/spans/CodeBlockSpan.kt +216 -216
- package/android/src/main/java/com/renderrichtext/spans/CodeSpan.kt +32 -32
- package/android/src/main/java/com/renderrichtext/spans/EmphasisSpan.kt +42 -42
- package/android/src/main/java/com/renderrichtext/spans/FadeInSpan.kt +29 -29
- package/android/src/main/java/com/renderrichtext/spans/HeadingSpan.kt +38 -38
- package/android/src/main/java/com/renderrichtext/spans/HighlightSpan.kt +80 -80
- package/android/src/main/java/com/renderrichtext/spans/ImageSpan.kt +481 -481
- package/android/src/main/java/com/renderrichtext/spans/InlineBackgroundGeometry.kt +42 -42
- package/android/src/main/java/com/renderrichtext/spans/LineHeightSpan.kt +39 -39
- package/android/src/main/java/com/renderrichtext/spans/LinkPillIconCache.kt +154 -154
- package/android/src/main/java/com/renderrichtext/spans/LinkPillSpan.kt +381 -381
- package/android/src/main/java/com/renderrichtext/spans/LinkSpan.kt +68 -68
- package/android/src/main/java/com/renderrichtext/spans/ListItemSpacingSpan.kt +33 -33
- package/android/src/main/java/com/renderrichtext/spans/ListMarkerAnchorSpan.kt +38 -38
- package/android/src/main/java/com/renderrichtext/spans/MarginBottomSpan.kt +76 -76
- package/android/src/main/java/com/renderrichtext/spans/MentionChipSpan.kt +132 -132
- package/android/src/main/java/com/renderrichtext/spans/MentionSpan.kt +46 -46
- package/android/src/main/java/com/renderrichtext/spans/OrderedListSpan.kt +127 -127
- package/android/src/main/java/com/renderrichtext/spans/SpoilerSpan.kt +33 -33
- package/android/src/main/java/com/renderrichtext/spans/StrikethroughSpan.kt +12 -12
- package/android/src/main/java/com/renderrichtext/spans/StrongSpan.kt +39 -39
- package/android/src/main/java/com/renderrichtext/spans/TaskListSpan.kt +143 -143
- package/android/src/main/java/com/renderrichtext/spans/TextSpan.kt +26 -26
- package/android/src/main/java/com/renderrichtext/spans/ThematicBreakSpan.kt +69 -69
- package/android/src/main/java/com/renderrichtext/spans/UnorderedListSpan.kt +96 -96
- package/android/src/main/java/com/renderrichtext/spoiler/SpoilerStubs.kt +46 -46
- package/android/src/main/java/com/renderrichtext/styles/BaseBlockStyle.kt +11 -11
- package/android/src/main/java/com/renderrichtext/styles/BlockquoteStyle.kt +83 -83
- package/android/src/main/java/com/renderrichtext/styles/CodeBlockStyle.kt +80 -80
- package/android/src/main/java/com/renderrichtext/styles/CodeStyle.kt +26 -26
- package/android/src/main/java/com/renderrichtext/styles/EmphasisStyle.kt +21 -21
- package/android/src/main/java/com/renderrichtext/styles/FactoidStyle.kt +21 -21
- package/android/src/main/java/com/renderrichtext/styles/HeadingStyle.kt +33 -33
- package/android/src/main/java/com/renderrichtext/styles/HighlightStyle.kt +19 -19
- package/android/src/main/java/com/renderrichtext/styles/ImageStyle.kt +29 -29
- package/android/src/main/java/com/renderrichtext/styles/InlineImageStyle.kt +17 -17
- package/android/src/main/java/com/renderrichtext/styles/InlineMathStyle.kt +17 -17
- package/android/src/main/java/com/renderrichtext/styles/LinkPillContent.kt +36 -36
- package/android/src/main/java/com/renderrichtext/styles/LinkPillStyle.kt +44 -44
- package/android/src/main/java/com/renderrichtext/styles/LinkStyle.kt +23 -23
- package/android/src/main/java/com/renderrichtext/styles/LinkVariantEntry.kt +34 -34
- package/android/src/main/java/com/renderrichtext/styles/ListStyle.kt +65 -65
- package/android/src/main/java/com/renderrichtext/styles/MathStyle.kt +29 -29
- package/android/src/main/java/com/renderrichtext/styles/MentionStyle.kt +19 -19
- package/android/src/main/java/com/renderrichtext/styles/ParagraphStyle.kt +33 -33
- package/android/src/main/java/com/renderrichtext/styles/SpoilerStyle.kt +27 -27
- package/android/src/main/java/com/renderrichtext/styles/StrikethroughStyle.kt +17 -17
- package/android/src/main/java/com/renderrichtext/styles/StrongStyle.kt +21 -21
- package/android/src/main/java/com/renderrichtext/styles/StyleConfig.kt +411 -411
- package/android/src/main/java/com/renderrichtext/styles/StyleParser.kt +92 -92
- package/android/src/main/java/com/renderrichtext/styles/SubscriptStyle.kt +16 -16
- package/android/src/main/java/com/renderrichtext/styles/SuperscriptStyle.kt +16 -16
- package/android/src/main/java/com/renderrichtext/styles/TableStyle.kt +75 -75
- package/android/src/main/java/com/renderrichtext/styles/TaskListStyle.kt +29 -29
- package/android/src/main/java/com/renderrichtext/styles/TextAlignment.kt +32 -32
- package/android/src/main/java/com/renderrichtext/styles/ThematicBreakStyle.kt +23 -23
- package/android/src/main/java/com/renderrichtext/styles/UnderlineStyle.kt +17 -17
- package/android/src/main/java/com/renderrichtext/styles/VideoStyle.kt +31 -31
- package/android/src/main/java/com/renderrichtext/utils/common/BorderStyleUtils.kt +86 -86
- package/android/src/main/java/com/renderrichtext/utils/common/BreakStrategyUtils.kt +32 -32
- package/android/src/main/java/com/renderrichtext/utils/common/CodeBlockHighlighter.kt +36 -36
- package/android/src/main/java/com/renderrichtext/utils/common/CodeBlockNode.kt +42 -42
- package/android/src/main/java/com/renderrichtext/utils/common/EllipsizeUtils.kt +27 -27
- package/android/src/main/java/com/renderrichtext/utils/common/EnrichedTiptapAncestorUtils.kt +10 -10
- package/android/src/main/java/com/renderrichtext/utils/common/FeatureFlags.kt +9 -9
- package/android/src/main/java/com/renderrichtext/utils/common/LinkRecognitionProps.kt +31 -31
- package/android/src/main/java/com/renderrichtext/utils/common/LinkRegexConfig.kt +56 -56
- package/android/src/main/java/com/renderrichtext/utils/common/MotionPreferences.kt +18 -18
- package/android/src/main/java/com/renderrichtext/utils/common/ReadableMapExtensions.kt +28 -28
- package/android/src/main/java/com/renderrichtext/utils/common/layout/RTLUtils.kt +6 -6
- package/android/src/main/java/com/renderrichtext/utils/common/serialization/TiptapASTSerializer.kt +368 -368
- package/android/src/main/java/com/renderrichtext/utils/text/ImageCache.kt +88 -88
- package/android/src/main/java/com/renderrichtext/utils/text/ImageDownloader.kt +203 -203
- package/android/src/main/java/com/renderrichtext/utils/text/LocalImageLoader.kt +167 -167
- package/android/src/main/java/com/renderrichtext/utils/text/TailFadeInAnimator.kt +84 -84
- package/android/src/main/java/com/renderrichtext/utils/text/conversion/HTMLGenerator.kt +1105 -1105
- package/android/src/main/java/com/renderrichtext/utils/text/conversion/TiptapExtractor.kt +423 -423
- package/android/src/main/java/com/renderrichtext/utils/text/extensions/ParagraphUtils.kt +9 -9
- package/android/src/main/java/com/renderrichtext/utils/text/extensions/SpannableExtensions.kt +9 -9
- package/android/src/main/java/com/renderrichtext/utils/text/extensions/TextPaintExtensions.kt +76 -76
- package/android/src/main/java/com/renderrichtext/utils/text/interaction/CheckboxTouchHelper.kt +61 -61
- package/android/src/main/java/com/renderrichtext/utils/text/interaction/TaskListTapUtils.kt +286 -286
- package/android/src/main/java/com/renderrichtext/utils/text/span/ApplyLineHeight.kt +39 -39
- package/android/src/main/java/com/renderrichtext/utils/text/span/BlockSpacing.kt +142 -142
- package/android/src/main/java/com/renderrichtext/utils/text/span/SpanFlags.kt +43 -43
- package/android/src/main/java/com/renderrichtext/utils/text/span/WidthAwareSpans.kt +30 -30
- package/android/src/main/java/com/renderrichtext/utils/text/view/CodeBlockPressHost.kt +15 -15
- package/android/src/main/java/com/renderrichtext/utils/text/view/ImagePressHost.kt +19 -19
- package/android/src/main/java/com/renderrichtext/utils/text/view/SelectionActionMode.kt +235 -235
- package/android/src/main/java/com/renderrichtext/utils/text/view/TextSelectionColors.kt +48 -48
- package/android/src/main/java/com/renderrichtext/utils/text/view/TextViewSetup.kt +119 -119
- package/android/src/main/java/com/renderrichtext/views/ContextMenuPopup.kt +217 -217
- package/android/src/main/java/com/renderrichtext/views/CopyGlyph.kt +101 -101
- package/android/src/main/java/com/renderrichtext/views/WrapGlyph.kt +40 -40
- package/android/src/main/jni/CMakeLists.txt +52 -52
- package/android/src/main/jni/react/renderer/components/RichTextSpec/ComponentDescriptors.h +30 -30
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextComponentDescriptor.h +29 -29
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextMeasurementManager.cpp +45 -45
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextMeasurementManager.h +21 -21
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextShadowNode.cpp +38 -38
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextShadowNode.h +53 -53
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextState.cpp +9 -9
- package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextState.h +24 -24
- package/android/src/main/jni/react/renderer/components/RichTextSpec/conversions.h +40 -40
- package/cpp/parser/TiptapParser.hpp +13 -13
- package/cpp/vendor/nlohmann/json.hpp +24765 -24765
- package/ios/EnrichedTiptapText.h +27 -27
- package/ios/attachments/ENRMImageAttachment.h +51 -51
- package/ios/attachments/ENRMImageAttachment.m +398 -398
- package/ios/attachments/ENRMLinkPillAttachment.h +47 -47
- package/ios/attachments/ENRMLinkPillAttachment.m +324 -324
- package/ios/attachments/ENRMLinkPillIconCache.h +28 -28
- package/ios/attachments/ENRMLinkPillIconCache.m +181 -181
- package/ios/attachments/ENRMLinkPillText.h +27 -27
- package/ios/attachments/ENRMLinkPillText.m +118 -118
- package/ios/attachments/ENRMMathInlineAttachment.h +7 -7
- package/ios/attachments/ENRMMathInlineAttachment.m +4 -4
- package/ios/attachments/ThematicBreakAttachment.h +15 -15
- package/ios/attachments/ThematicBreakAttachment.m +33 -33
- package/ios/internals/ENRMViewFreeMeasurement.h +208 -208
- package/ios/internals/EnrichedTiptapTextComponentDescriptor.h +19 -19
- package/ios/internals/EnrichedTiptapTextShadowNode.h +43 -43
- package/ios/internals/EnrichedTiptapTextShadowNode.mm +69 -69
- package/ios/internals/EnrichedTiptapTextState.h +24 -24
- package/ios/internals/MeasurementCache.h +308 -308
- package/ios/internals/ShadowMeasurementUtils.h +145 -145
- package/ios/parser/ENRMTextLinkAttributes.h +7 -7
- package/ios/parser/ENRMTiptapParser.h +33 -33
- package/ios/parser/ENRMTiptapParser.mm +73 -73
- package/ios/parser/TiptapASTNode.m +52 -52
- package/ios/renderer/AttributedRenderer.h +23 -23
- package/ios/renderer/AttributedRenderer.m +229 -229
- package/ios/renderer/BaseRenderer.h +33 -33
- package/ios/renderer/BaseRenderer.m +46 -46
- package/ios/renderer/BaselineShiftTextAttributes.h +10 -10
- package/ios/renderer/BaselineShiftTextAttributes.m +26 -26
- package/ios/renderer/BlankLineRenderer.h +4 -4
- package/ios/renderer/BlankLineRenderer.m +51 -51
- package/ios/renderer/BlockquoteRenderer.h +6 -6
- package/ios/renderer/BlockquoteRenderer.m +258 -258
- package/ios/renderer/CodeBlockRenderer.h +9 -9
- package/ios/renderer/CodeBlockRenderer.m +99 -99
- package/ios/renderer/CodeRenderer.h +9 -9
- package/ios/renderer/CodeRenderer.m +69 -69
- package/ios/renderer/ENRMBlockquoteTextRenderer.h +25 -25
- package/ios/renderer/ENRMBlockquoteTextRenderer.m +48 -48
- package/ios/renderer/EmphasisRenderer.h +5 -5
- package/ios/renderer/EmphasisRenderer.m +99 -99
- package/ios/renderer/HeadingRenderer.h +6 -6
- package/ios/renderer/HeadingRenderer.m +102 -102
- package/ios/renderer/HighlightRenderer.h +7 -7
- package/ios/renderer/HighlightRenderer.m +33 -33
- package/ios/renderer/LinkRenderer.h +6 -6
- package/ios/renderer/LinkRenderer.m +157 -157
- package/ios/renderer/ListItemRenderer.h +24 -24
- package/ios/renderer/ListItemRenderer.m +283 -283
- package/ios/renderer/ListRenderer.h +13 -13
- package/ios/renderer/ListRenderer.m +126 -126
- package/ios/renderer/MentionRenderer.h +9 -9
- package/ios/renderer/MentionRenderer.m +96 -96
- package/ios/renderer/NodeRenderer.h +8 -8
- package/ios/renderer/ParagraphRenderer.h +6 -6
- package/ios/renderer/ParagraphRenderer.m +85 -85
- package/ios/renderer/RenderContext.h +145 -145
- package/ios/renderer/RenderContext.m +402 -402
- package/ios/renderer/RendererFactory.h +12 -12
- package/ios/renderer/StrikethroughRenderer.h +5 -5
- package/ios/renderer/StrikethroughRenderer.m +30 -30
- package/ios/renderer/StrongRenderer.h +5 -5
- package/ios/renderer/StrongRenderer.m +87 -87
- package/ios/renderer/TextRenderer.h +6 -6
- package/ios/renderer/TextRenderer.m +18 -18
- package/ios/renderer/ThematicBreakRenderer.h +4 -4
- package/ios/renderer/ThematicBreakRenderer.m +41 -41
- package/ios/renderer/UnderlineRenderer.h +4 -4
- package/ios/renderer/UnderlineRenderer.m +41 -41
- package/ios/styles/ENRMFontSlot.h +12 -12
- package/ios/styles/ENRMFontSlot.m +24 -24
- package/ios/styles/StyleConfig.h +488 -488
- package/ios/styles/StyleConfig.mm +2820 -2820
- package/ios/utils/AccessibilityInfo.h +35 -35
- package/ios/utils/AccessibilityInfo.m +24 -24
- package/ios/utils/BlockquoteBorder.h +26 -26
- package/ios/utils/BlockquoteBorder.m +294 -294
- package/ios/utils/CodeBackground.h +19 -19
- package/ios/utils/CodeBackground.m +196 -196
- package/ios/utils/CodeBlockBackground.h +17 -17
- package/ios/utils/CodeBlockBackground.m +102 -102
- package/ios/utils/ContextMenuUtils.h +76 -76
- package/ios/utils/ContextMenuUtils.mm +75 -75
- package/ios/utils/ENRMAccessibilityLabels.h +40 -40
- package/ios/utils/ENRMAccessibilityLabels.m +5 -5
- package/ios/utils/ENRMAsyncRenderCoordinator.h +24 -24
- package/ios/utils/ENRMAsyncRenderCoordinator.m +37 -37
- package/ios/utils/ENRMAtomicSize.h +65 -65
- package/ios/utils/ENRMCodeBlockContent.h +37 -37
- package/ios/utils/ENRMCodeBlockContent.mm +89 -89
- package/ios/utils/ENRMFeatureFlags.h +25 -25
- package/ios/utils/ENRMImageDownloader.h +30 -30
- package/ios/utils/ENRMImageDownloader.m +168 -168
- package/ios/utils/ENRMLatexErrorCoordinator.h +27 -27
- package/ios/utils/ENRMLatexErrorCoordinator.mm +75 -75
- package/ios/utils/ENRMLatexErrorReporting.h +13 -13
- package/ios/utils/ENRMLinkContextMenus.h +93 -93
- package/ios/utils/ENRMLinkContextMenus.m +178 -178
- package/ios/utils/ENRMLinkRegexConfig.h +30 -30
- package/ios/utils/ENRMLinkRegexConfig.mm +104 -104
- package/ios/utils/ENRMLinkRegexProps.h +23 -23
- package/ios/utils/ENRMLocalImageLoader.h +35 -35
- package/ios/utils/ENRMLocalImageLoader.m +111 -111
- package/ios/utils/ENRMMenuAction.h +27 -27
- package/ios/utils/ENRMMenuAction.m +33 -33
- package/ios/utils/ENRMSpoilerOverlayManager.h +15 -15
- package/ios/utils/ENRMSpoilerOverlayManager.m +19 -19
- package/ios/utils/ENRMSpoilerTapUtils.h +6 -6
- package/ios/utils/ENRMSpoilerTapUtils.m +11 -11
- package/ios/utils/ENRMTailFadeInAnimator.h +16 -16
- package/ios/utils/ENRMTailFadeInAnimator.m +161 -161
- package/ios/utils/ENRMTextHitTest.h +23 -23
- package/ios/utils/ENRMTextHitTest.m +20 -20
- package/ios/utils/ENRMTextInteractionUtils.h +20 -20
- package/ios/utils/ENRMTextInteractionUtils.m +15 -15
- package/ios/utils/ENRMTextRenderer.h +38 -38
- package/ios/utils/ENRMTextRenderer.m +54 -54
- package/ios/utils/ENRMTextViewSetup.h +132 -132
- package/ios/utils/ENRMUIKit.h +429 -429
- package/ios/utils/EditMenuUtils.h +105 -105
- package/ios/utils/EditMenuUtils.m +143 -143
- package/ios/utils/FontScaleObserver.h +10 -10
- package/ios/utils/FontScaleObserver.m +55 -55
- package/ios/utils/FontUtils.h +31 -31
- package/ios/utils/FontUtils.m +63 -63
- package/ios/utils/HTMLGenerator.h +25 -25
- package/ios/utils/HTMLGenerator.m +1041 -1041
- package/ios/utils/HeightUpdateUtils.h +25 -25
- package/ios/utils/ImageRequestHeaderUtils.h +35 -35
- package/ios/utils/LastElementUtils.h +97 -97
- package/ios/utils/LinkContextMenuUtils.h +55 -55
- package/ios/utils/LinkPillContentUtils.h +46 -46
- package/ios/utils/ListMarkerDrawer.h +15 -15
- package/ios/utils/ListMarkerDrawer.m +239 -239
- package/ios/utils/MentionBackground.h +26 -26
- package/ios/utils/MentionBackground.m +86 -86
- package/ios/utils/ParagraphStyleUtils.h +87 -87
- package/ios/utils/ParagraphStyleUtils.m +484 -484
- package/ios/utils/PasteboardUtils.h +48 -48
- package/ios/utils/PasteboardUtils.m +166 -166
- package/ios/utils/RTFExportUtils.h +24 -24
- package/ios/utils/RTFExportUtils.m +299 -299
- package/ios/utils/SelectionColorUtils.h +14 -14
- package/ios/utils/StylePropsUtils.h +1340 -1340
- package/ios/utils/TaskListTapUtils.h +6 -6
- package/ios/utils/TaskListTapUtils.m +14 -14
- package/ios/utils/TextViewLayoutManager.h +14 -14
- package/ios/utils/TiptapAccessibilityElementBuilder.h +43 -43
- package/ios/utils/TiptapAccessibilityElementBuilder.m +432 -432
- package/ios/utils/TiptapExtractor.h +17 -17
- package/ios/utils/TiptapExtractor.m +367 -367
- package/ios/views/ENRMTiptapTextView.h +25 -25
- package/ios/views/ENRMTiptapTextView.m +247 -247
- package/package.json +65 -70
- package/react-native.config.js +10 -10
- package/src/admonitionDefaults.ts +58 -58
- package/src/darkModeTextStyle.ts +99 -99
- package/src/headingDefaults.ts +21 -21
- package/src/index.tsx +4 -4
- package/src/linkVariantUtils.ts +120 -120
- package/src/normalizeTiptapStyle.ts +397 -397
- package/src/rn-globals.d.ts +1 -1
- package/src/styleUtils.ts +107 -107
- package/src/types/TiptapStyle.ts +532 -532
- package/src/types/TiptapStyleInternal.ts +299 -299
- package/src/types/linkPill.ts +9 -9
- package/src/utils/isDev.ts +4 -4
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
#import "ENRMUIKit.h"
|
|
3
|
-
#import <React/RCTUtils.h>
|
|
4
|
-
#include <memory>
|
|
5
|
-
#import <react/utils/ManagedObjectWrapper.h>
|
|
6
|
-
|
|
7
|
-
/// Returns YES if the measured content height differs from the frame height
|
|
8
|
-
/// Yoga assigned, comparing at physical-pixel granularity to avoid
|
|
9
|
-
/// false positives from sub-pixel floating-point differences.
|
|
10
|
-
static inline BOOL needsHeightUpdate(CGSize measuredSize, CGRect bounds)
|
|
11
|
-
{
|
|
12
|
-
CGFloat scale = RCTScreenScale();
|
|
13
|
-
CGFloat assignedHeight = ceil(bounds.size.height * scale) / scale;
|
|
14
|
-
CGFloat measuredHeight = ceil(measuredSize.height * scale) / scale;
|
|
15
|
-
return assignedHeight != measuredHeight;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
template <typename StateDataT, typename ConcreteStateT>
|
|
19
|
-
inline void ENRMRequestHeightUpdate(std::shared_ptr<const ConcreteStateT> const &state, int &counter, id self)
|
|
20
|
-
{
|
|
21
|
-
if (!state)
|
|
22
|
-
return;
|
|
23
|
-
counter++;
|
|
24
|
-
state->updateState(StateDataT(counter, facebook::react::wrapManagedObjectWeakly(self)));
|
|
25
|
-
}
|
|
1
|
+
#pragma once
|
|
2
|
+
#import "ENRMUIKit.h"
|
|
3
|
+
#import <React/RCTUtils.h>
|
|
4
|
+
#include <memory>
|
|
5
|
+
#import <react/utils/ManagedObjectWrapper.h>
|
|
6
|
+
|
|
7
|
+
/// Returns YES if the measured content height differs from the frame height
|
|
8
|
+
/// Yoga assigned, comparing at physical-pixel granularity to avoid
|
|
9
|
+
/// false positives from sub-pixel floating-point differences.
|
|
10
|
+
static inline BOOL needsHeightUpdate(CGSize measuredSize, CGRect bounds)
|
|
11
|
+
{
|
|
12
|
+
CGFloat scale = RCTScreenScale();
|
|
13
|
+
CGFloat assignedHeight = ceil(bounds.size.height * scale) / scale;
|
|
14
|
+
CGFloat measuredHeight = ceil(measuredSize.height * scale) / scale;
|
|
15
|
+
return assignedHeight != measuredHeight;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
template <typename StateDataT, typename ConcreteStateT>
|
|
19
|
+
inline void ENRMRequestHeightUpdate(std::shared_ptr<const ConcreteStateT> const &state, int &counter, id self)
|
|
20
|
+
{
|
|
21
|
+
if (!state)
|
|
22
|
+
return;
|
|
23
|
+
counter++;
|
|
24
|
+
state->updateState(StateDataT(counter, facebook::react::wrapManagedObjectWeakly(self)));
|
|
25
|
+
}
|
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#import <Foundation/Foundation.h>
|
|
4
|
-
|
|
5
|
-
#ifdef __cplusplus
|
|
6
|
-
#include <vector>
|
|
7
|
-
|
|
8
|
-
template <typename T>
|
|
9
|
-
static bool ENRMImageRequestHeadersChanged(const std::vector<T> &oldHeaders, const std::vector<T> &newHeaders)
|
|
10
|
-
{
|
|
11
|
-
if (newHeaders.size() != oldHeaders.size()) {
|
|
12
|
-
return true;
|
|
13
|
-
}
|
|
14
|
-
for (size_t i = 0; i < newHeaders.size(); i++) {
|
|
15
|
-
if (newHeaders[i].name != oldHeaders[i].name || newHeaders[i].value != oldHeaders[i].value) {
|
|
16
|
-
return true;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
template <typename T>
|
|
23
|
-
static NSDictionary<NSString *, NSString *> *_Nullable ENRMImageRequestHeadersFromProps(const std::vector<T> &headers)
|
|
24
|
-
{
|
|
25
|
-
if (headers.empty()) {
|
|
26
|
-
return nil;
|
|
27
|
-
}
|
|
28
|
-
NSMutableDictionary<NSString *, NSString *> *result = [NSMutableDictionary dictionaryWithCapacity:headers.size()];
|
|
29
|
-
for (const auto &header : headers) {
|
|
30
|
-
result[@(header.name.c_str())] = @(header.value.c_str());
|
|
31
|
-
}
|
|
32
|
-
return [result copy];
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
#endif
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#import <Foundation/Foundation.h>
|
|
4
|
+
|
|
5
|
+
#ifdef __cplusplus
|
|
6
|
+
#include <vector>
|
|
7
|
+
|
|
8
|
+
template <typename T>
|
|
9
|
+
static bool ENRMImageRequestHeadersChanged(const std::vector<T> &oldHeaders, const std::vector<T> &newHeaders)
|
|
10
|
+
{
|
|
11
|
+
if (newHeaders.size() != oldHeaders.size()) {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
for (size_t i = 0; i < newHeaders.size(); i++) {
|
|
15
|
+
if (newHeaders[i].name != oldHeaders[i].name || newHeaders[i].value != oldHeaders[i].value) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
template <typename T>
|
|
23
|
+
static NSDictionary<NSString *, NSString *> *_Nullable ENRMImageRequestHeadersFromProps(const std::vector<T> &headers)
|
|
24
|
+
{
|
|
25
|
+
if (headers.empty()) {
|
|
26
|
+
return nil;
|
|
27
|
+
}
|
|
28
|
+
NSMutableDictionary<NSString *, NSString *> *result = [NSMutableDictionary dictionaryWithCapacity:headers.size()];
|
|
29
|
+
for (const auto &header : headers) {
|
|
30
|
+
result[@(header.name.c_str())] = @(header.value.c_str());
|
|
31
|
+
}
|
|
32
|
+
return [result copy];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
#endif
|
|
@@ -1,97 +1,97 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
#import "ENRMLinkPillAttachment.h"
|
|
3
|
-
#import "ENRMUIKit.h"
|
|
4
|
-
|
|
5
|
-
NS_ASSUME_NONNULL_BEGIN
|
|
6
|
-
|
|
7
|
-
static NSString *const CodeBlockAttributeName = @"CodeBlock";
|
|
8
|
-
static NSString *const CodeBlockIndentAttributeName = @"CodeBlockIndent";
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Returns YES when the last semantic block in the storage is a code block, ignoring any
|
|
12
|
-
* trailing newline spacers (e.g. codeBlockMarginBottom) that may follow it.
|
|
13
|
-
*
|
|
14
|
-
* Detection is based on the last non-newline character: if it sits inside a CodeBlock
|
|
15
|
-
* attribute run, the answer is YES regardless of what newlines come after.
|
|
16
|
-
*
|
|
17
|
-
* Use this in render-time cleanup paths (e.g. removeTrailingSpacing) that need to know
|
|
18
|
-
* "is the document ending with a code block?" before any trailing newlines have been trimmed.
|
|
19
|
-
* The stricter `isLastElementCodeBlock` would answer NO in that pre-trim state because
|
|
20
|
-
* the CodeBlock range hasn't yet been pushed to text.length.
|
|
21
|
-
*/
|
|
22
|
-
static inline BOOL isLastBlockACodeBlock(NSAttributedString *text)
|
|
23
|
-
{
|
|
24
|
-
if (text.length == 0)
|
|
25
|
-
return NO;
|
|
26
|
-
|
|
27
|
-
NSRange lastContent = [text.string rangeOfCharacterFromSet:[[NSCharacterSet newlineCharacterSet] invertedSet]
|
|
28
|
-
options:NSBackwardsSearch];
|
|
29
|
-
if (lastContent.location == NSNotFound)
|
|
30
|
-
return NO;
|
|
31
|
-
|
|
32
|
-
NSNumber *isCodeBlock = [text attribute:CodeBlockAttributeName atIndex:lastContent.location effectiveRange:nil];
|
|
33
|
-
return isCodeBlock.boolValue;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Stricter sibling of `isLastBlockACodeBlock`: requires both that the last non-newline
|
|
38
|
-
* character is inside a CodeBlock run AND that the CodeBlock range extends literally to
|
|
39
|
-
* text.length (i.e. no characters at all live after the code block).
|
|
40
|
-
*
|
|
41
|
-
* Used in the iOS measurement path (and the analogous drawing-compensation check) to
|
|
42
|
-
* decide whether to add `codeBlockPadding` to make up for iOS not measuring/drawing
|
|
43
|
-
* trailing newlines that carry custom minimum/maximum line heights.
|
|
44
|
-
*
|
|
45
|
-
* After `removeTrailingSpacing` runs, the bottom padding spacer is preserved together
|
|
46
|
-
* with a single trailing newline outside the code block range, so this returns NO and
|
|
47
|
-
* the compensation is skipped — the bottom padding spacer is no longer the trailing
|
|
48
|
-
* paragraph terminator, so iOS lays its line fragment out as part of usedRect normally.
|
|
49
|
-
* The check still exists as a safety net for unexpected storage shapes.
|
|
50
|
-
*/
|
|
51
|
-
static inline BOOL isLastElementCodeBlock(NSAttributedString *text)
|
|
52
|
-
{
|
|
53
|
-
if (text.length == 0)
|
|
54
|
-
return NO;
|
|
55
|
-
|
|
56
|
-
NSRange lastContent = [text.string rangeOfCharacterFromSet:[[NSCharacterSet newlineCharacterSet] invertedSet]
|
|
57
|
-
options:NSBackwardsSearch];
|
|
58
|
-
if (lastContent.location == NSNotFound)
|
|
59
|
-
return NO;
|
|
60
|
-
|
|
61
|
-
NSNumber *isCodeBlock = [text attribute:CodeBlockAttributeName atIndex:lastContent.location effectiveRange:nil];
|
|
62
|
-
if (!isCodeBlock.boolValue)
|
|
63
|
-
return NO;
|
|
64
|
-
|
|
65
|
-
NSRange codeBlockRange;
|
|
66
|
-
[text attribute:CodeBlockAttributeName atIndex:lastContent.location effectiveRange:&codeBlockRange];
|
|
67
|
-
return NSMaxRange(codeBlockRange) == text.length;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Checks if the last element in the attributed string is an image attachment.
|
|
72
|
-
* Used to compensate for iOS text attachment baseline spacing issues.
|
|
73
|
-
*/
|
|
74
|
-
static inline BOOL isLastElementImage(NSAttributedString *text)
|
|
75
|
-
{
|
|
76
|
-
if (text.length == 0)
|
|
77
|
-
return NO;
|
|
78
|
-
|
|
79
|
-
NSRange lastContent = [text.string rangeOfCharacterFromSet:[[NSCharacterSet newlineCharacterSet] invertedSet]
|
|
80
|
-
options:NSBackwardsSearch];
|
|
81
|
-
if (lastContent.location == NSNotFound)
|
|
82
|
-
return NO;
|
|
83
|
-
|
|
84
|
-
unichar lastChar = [text.string characterAtIndex:lastContent.location];
|
|
85
|
-
if (lastChar != 0xFFFC)
|
|
86
|
-
return NO;
|
|
87
|
-
|
|
88
|
-
id attachment = [text attribute:NSAttachmentAttributeName atIndex:lastContent.location effectiveRange:nil];
|
|
89
|
-
#if !TARGET_OS_OSX
|
|
90
|
-
// A link pill sits on the text baseline like a word; it needs no image compensation.
|
|
91
|
-
if ([attachment isKindOfClass:[ENRMLinkPillAttachment class]])
|
|
92
|
-
return NO;
|
|
93
|
-
#endif
|
|
94
|
-
return attachment != nil;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
NS_ASSUME_NONNULL_END
|
|
1
|
+
#pragma once
|
|
2
|
+
#import "ENRMLinkPillAttachment.h"
|
|
3
|
+
#import "ENRMUIKit.h"
|
|
4
|
+
|
|
5
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
6
|
+
|
|
7
|
+
static NSString *const CodeBlockAttributeName = @"CodeBlock";
|
|
8
|
+
static NSString *const CodeBlockIndentAttributeName = @"CodeBlockIndent";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Returns YES when the last semantic block in the storage is a code block, ignoring any
|
|
12
|
+
* trailing newline spacers (e.g. codeBlockMarginBottom) that may follow it.
|
|
13
|
+
*
|
|
14
|
+
* Detection is based on the last non-newline character: if it sits inside a CodeBlock
|
|
15
|
+
* attribute run, the answer is YES regardless of what newlines come after.
|
|
16
|
+
*
|
|
17
|
+
* Use this in render-time cleanup paths (e.g. removeTrailingSpacing) that need to know
|
|
18
|
+
* "is the document ending with a code block?" before any trailing newlines have been trimmed.
|
|
19
|
+
* The stricter `isLastElementCodeBlock` would answer NO in that pre-trim state because
|
|
20
|
+
* the CodeBlock range hasn't yet been pushed to text.length.
|
|
21
|
+
*/
|
|
22
|
+
static inline BOOL isLastBlockACodeBlock(NSAttributedString *text)
|
|
23
|
+
{
|
|
24
|
+
if (text.length == 0)
|
|
25
|
+
return NO;
|
|
26
|
+
|
|
27
|
+
NSRange lastContent = [text.string rangeOfCharacterFromSet:[[NSCharacterSet newlineCharacterSet] invertedSet]
|
|
28
|
+
options:NSBackwardsSearch];
|
|
29
|
+
if (lastContent.location == NSNotFound)
|
|
30
|
+
return NO;
|
|
31
|
+
|
|
32
|
+
NSNumber *isCodeBlock = [text attribute:CodeBlockAttributeName atIndex:lastContent.location effectiveRange:nil];
|
|
33
|
+
return isCodeBlock.boolValue;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Stricter sibling of `isLastBlockACodeBlock`: requires both that the last non-newline
|
|
38
|
+
* character is inside a CodeBlock run AND that the CodeBlock range extends literally to
|
|
39
|
+
* text.length (i.e. no characters at all live after the code block).
|
|
40
|
+
*
|
|
41
|
+
* Used in the iOS measurement path (and the analogous drawing-compensation check) to
|
|
42
|
+
* decide whether to add `codeBlockPadding` to make up for iOS not measuring/drawing
|
|
43
|
+
* trailing newlines that carry custom minimum/maximum line heights.
|
|
44
|
+
*
|
|
45
|
+
* After `removeTrailingSpacing` runs, the bottom padding spacer is preserved together
|
|
46
|
+
* with a single trailing newline outside the code block range, so this returns NO and
|
|
47
|
+
* the compensation is skipped — the bottom padding spacer is no longer the trailing
|
|
48
|
+
* paragraph terminator, so iOS lays its line fragment out as part of usedRect normally.
|
|
49
|
+
* The check still exists as a safety net for unexpected storage shapes.
|
|
50
|
+
*/
|
|
51
|
+
static inline BOOL isLastElementCodeBlock(NSAttributedString *text)
|
|
52
|
+
{
|
|
53
|
+
if (text.length == 0)
|
|
54
|
+
return NO;
|
|
55
|
+
|
|
56
|
+
NSRange lastContent = [text.string rangeOfCharacterFromSet:[[NSCharacterSet newlineCharacterSet] invertedSet]
|
|
57
|
+
options:NSBackwardsSearch];
|
|
58
|
+
if (lastContent.location == NSNotFound)
|
|
59
|
+
return NO;
|
|
60
|
+
|
|
61
|
+
NSNumber *isCodeBlock = [text attribute:CodeBlockAttributeName atIndex:lastContent.location effectiveRange:nil];
|
|
62
|
+
if (!isCodeBlock.boolValue)
|
|
63
|
+
return NO;
|
|
64
|
+
|
|
65
|
+
NSRange codeBlockRange;
|
|
66
|
+
[text attribute:CodeBlockAttributeName atIndex:lastContent.location effectiveRange:&codeBlockRange];
|
|
67
|
+
return NSMaxRange(codeBlockRange) == text.length;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Checks if the last element in the attributed string is an image attachment.
|
|
72
|
+
* Used to compensate for iOS text attachment baseline spacing issues.
|
|
73
|
+
*/
|
|
74
|
+
static inline BOOL isLastElementImage(NSAttributedString *text)
|
|
75
|
+
{
|
|
76
|
+
if (text.length == 0)
|
|
77
|
+
return NO;
|
|
78
|
+
|
|
79
|
+
NSRange lastContent = [text.string rangeOfCharacterFromSet:[[NSCharacterSet newlineCharacterSet] invertedSet]
|
|
80
|
+
options:NSBackwardsSearch];
|
|
81
|
+
if (lastContent.location == NSNotFound)
|
|
82
|
+
return NO;
|
|
83
|
+
|
|
84
|
+
unichar lastChar = [text.string characterAtIndex:lastContent.location];
|
|
85
|
+
if (lastChar != 0xFFFC)
|
|
86
|
+
return NO;
|
|
87
|
+
|
|
88
|
+
id attachment = [text attribute:NSAttachmentAttributeName atIndex:lastContent.location effectiveRange:nil];
|
|
89
|
+
#if !TARGET_OS_OSX
|
|
90
|
+
// A link pill sits on the text baseline like a word; it needs no image compensation.
|
|
91
|
+
if ([attachment isKindOfClass:[ENRMLinkPillAttachment class]])
|
|
92
|
+
return NO;
|
|
93
|
+
#endif
|
|
94
|
+
return attachment != nil;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#import "ENRMLinkContextMenus.h"
|
|
4
|
-
#import <Foundation/Foundation.h>
|
|
5
|
-
|
|
6
|
-
#ifdef __cplusplus
|
|
7
|
-
#include <vector>
|
|
8
|
-
|
|
9
|
-
// The `linkContextMenuItems` prop: link long-press menu items by URL pattern.
|
|
10
|
-
|
|
11
|
-
template <typename T>
|
|
12
|
-
static bool ENRMLinkContextMenuItemsChanged(const std::vector<T> &oldMenus, const std::vector<T> &newMenus)
|
|
13
|
-
{
|
|
14
|
-
if (newMenus.size() != oldMenus.size()) {
|
|
15
|
-
return true;
|
|
16
|
-
}
|
|
17
|
-
for (size_t i = 0; i < newMenus.size(); i++) {
|
|
18
|
-
const auto &oldItems = oldMenus[i].items;
|
|
19
|
-
const auto &newItems = newMenus[i].items;
|
|
20
|
-
if (newMenus[i].pattern != oldMenus[i].pattern || newItems.size() != oldItems.size()) {
|
|
21
|
-
return true;
|
|
22
|
-
}
|
|
23
|
-
for (size_t j = 0; j < newItems.size(); j++) {
|
|
24
|
-
if (newItems[j].text != oldItems[j].text || newItems[j].icon != oldItems[j].icon ||
|
|
25
|
-
newItems[j].disabled != oldItems[j].disabled || newItems[j].destructive != oldItems[j].destructive) {
|
|
26
|
-
return true;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
return false;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
template <typename T>
|
|
34
|
-
static NSArray<ENRMLinkContextMenuEntry *> *_Nonnull ENRMLinkContextMenuEntriesFromProps(const std::vector<T> &menus)
|
|
35
|
-
{
|
|
36
|
-
NSMutableArray<ENRMLinkContextMenuEntry *> *entries = [NSMutableArray arrayWithCapacity:menus.size()];
|
|
37
|
-
for (const auto &menu : menus) {
|
|
38
|
-
NSMutableArray<ENRMLinkContextMenuItem *> *items = [NSMutableArray arrayWithCapacity:menu.items.size()];
|
|
39
|
-
for (const auto &source : menu.items) {
|
|
40
|
-
ENRMLinkContextMenuItem *item = [[ENRMLinkContextMenuItem alloc] init];
|
|
41
|
-
item.text = @(source.text.c_str());
|
|
42
|
-
item.icon = @(source.icon.c_str());
|
|
43
|
-
item.disabled = source.disabled;
|
|
44
|
-
item.destructive = source.destructive;
|
|
45
|
-
[items addObject:item];
|
|
46
|
-
}
|
|
47
|
-
ENRMLinkContextMenuEntry *entry = [[ENRMLinkContextMenuEntry alloc] init];
|
|
48
|
-
entry.pattern = @(menu.pattern.c_str());
|
|
49
|
-
entry.items = items;
|
|
50
|
-
[entries addObject:entry];
|
|
51
|
-
}
|
|
52
|
-
return entries;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
#endif
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#import "ENRMLinkContextMenus.h"
|
|
4
|
+
#import <Foundation/Foundation.h>
|
|
5
|
+
|
|
6
|
+
#ifdef __cplusplus
|
|
7
|
+
#include <vector>
|
|
8
|
+
|
|
9
|
+
// The `linkContextMenuItems` prop: link long-press menu items by URL pattern.
|
|
10
|
+
|
|
11
|
+
template <typename T>
|
|
12
|
+
static bool ENRMLinkContextMenuItemsChanged(const std::vector<T> &oldMenus, const std::vector<T> &newMenus)
|
|
13
|
+
{
|
|
14
|
+
if (newMenus.size() != oldMenus.size()) {
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
for (size_t i = 0; i < newMenus.size(); i++) {
|
|
18
|
+
const auto &oldItems = oldMenus[i].items;
|
|
19
|
+
const auto &newItems = newMenus[i].items;
|
|
20
|
+
if (newMenus[i].pattern != oldMenus[i].pattern || newItems.size() != oldItems.size()) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
for (size_t j = 0; j < newItems.size(); j++) {
|
|
24
|
+
if (newItems[j].text != oldItems[j].text || newItems[j].icon != oldItems[j].icon ||
|
|
25
|
+
newItems[j].disabled != oldItems[j].disabled || newItems[j].destructive != oldItems[j].destructive) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
template <typename T>
|
|
34
|
+
static NSArray<ENRMLinkContextMenuEntry *> *_Nonnull ENRMLinkContextMenuEntriesFromProps(const std::vector<T> &menus)
|
|
35
|
+
{
|
|
36
|
+
NSMutableArray<ENRMLinkContextMenuEntry *> *entries = [NSMutableArray arrayWithCapacity:menus.size()];
|
|
37
|
+
for (const auto &menu : menus) {
|
|
38
|
+
NSMutableArray<ENRMLinkContextMenuItem *> *items = [NSMutableArray arrayWithCapacity:menu.items.size()];
|
|
39
|
+
for (const auto &source : menu.items) {
|
|
40
|
+
ENRMLinkContextMenuItem *item = [[ENRMLinkContextMenuItem alloc] init];
|
|
41
|
+
item.text = @(source.text.c_str());
|
|
42
|
+
item.icon = @(source.icon.c_str());
|
|
43
|
+
item.disabled = source.disabled;
|
|
44
|
+
item.destructive = source.destructive;
|
|
45
|
+
[items addObject:item];
|
|
46
|
+
}
|
|
47
|
+
ENRMLinkContextMenuEntry *entry = [[ENRMLinkContextMenuEntry alloc] init];
|
|
48
|
+
entry.pattern = @(menu.pattern.c_str());
|
|
49
|
+
entry.items = items;
|
|
50
|
+
[entries addObject:entry];
|
|
51
|
+
}
|
|
52
|
+
return entries;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
#endif
|
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#import "StyleConfig.h"
|
|
4
|
-
#import <Foundation/Foundation.h>
|
|
5
|
-
|
|
6
|
-
#ifdef __cplusplus
|
|
7
|
-
#import <React/RCTConversions.h>
|
|
8
|
-
#include <vector>
|
|
9
|
-
|
|
10
|
-
// The `linkPillContent` prop: per-link pill label and icon, keyed by exact URL.
|
|
11
|
-
|
|
12
|
-
template <typename T>
|
|
13
|
-
static bool ENRMLinkPillContentChanged(const std::vector<T> &oldContent, const std::vector<T> &newContent)
|
|
14
|
-
{
|
|
15
|
-
if (newContent.size() != oldContent.size()) {
|
|
16
|
-
return true;
|
|
17
|
-
}
|
|
18
|
-
for (size_t i = 0; i < newContent.size(); i++) {
|
|
19
|
-
if (newContent[i].url != oldContent[i].url || newContent[i].label != oldContent[i].label ||
|
|
20
|
-
newContent[i].iconUri != oldContent[i].iconUri || newContent[i].iconTintColor != oldContent[i].iconTintColor) {
|
|
21
|
-
return true;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
return false;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
template <typename T>
|
|
28
|
-
static NSDictionary<NSString *, LinkPillContent *> *_Nullable ENRMLinkPillContentFromProps(
|
|
29
|
-
const std::vector<T> &content)
|
|
30
|
-
{
|
|
31
|
-
if (content.empty()) {
|
|
32
|
-
return nil;
|
|
33
|
-
}
|
|
34
|
-
NSMutableDictionary<NSString *, LinkPillContent *> *result =
|
|
35
|
-
[NSMutableDictionary dictionaryWithCapacity:content.size()];
|
|
36
|
-
for (const auto &entry : content) {
|
|
37
|
-
LinkPillContent *value = [[LinkPillContent alloc] init];
|
|
38
|
-
value.label = @(entry.label.c_str());
|
|
39
|
-
value.iconUri = @(entry.iconUri.c_str());
|
|
40
|
-
value.iconTintColor = entry.iconTintColor ? RCTUIColorFromSharedColor(entry.iconTintColor) : nil;
|
|
41
|
-
result[@(entry.url.c_str())] = value;
|
|
42
|
-
}
|
|
43
|
-
return [result copy];
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
#endif
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#import "StyleConfig.h"
|
|
4
|
+
#import <Foundation/Foundation.h>
|
|
5
|
+
|
|
6
|
+
#ifdef __cplusplus
|
|
7
|
+
#import <React/RCTConversions.h>
|
|
8
|
+
#include <vector>
|
|
9
|
+
|
|
10
|
+
// The `linkPillContent` prop: per-link pill label and icon, keyed by exact URL.
|
|
11
|
+
|
|
12
|
+
template <typename T>
|
|
13
|
+
static bool ENRMLinkPillContentChanged(const std::vector<T> &oldContent, const std::vector<T> &newContent)
|
|
14
|
+
{
|
|
15
|
+
if (newContent.size() != oldContent.size()) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
for (size_t i = 0; i < newContent.size(); i++) {
|
|
19
|
+
if (newContent[i].url != oldContent[i].url || newContent[i].label != oldContent[i].label ||
|
|
20
|
+
newContent[i].iconUri != oldContent[i].iconUri || newContent[i].iconTintColor != oldContent[i].iconTintColor) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
template <typename T>
|
|
28
|
+
static NSDictionary<NSString *, LinkPillContent *> *_Nullable ENRMLinkPillContentFromProps(
|
|
29
|
+
const std::vector<T> &content)
|
|
30
|
+
{
|
|
31
|
+
if (content.empty()) {
|
|
32
|
+
return nil;
|
|
33
|
+
}
|
|
34
|
+
NSMutableDictionary<NSString *, LinkPillContent *> *result =
|
|
35
|
+
[NSMutableDictionary dictionaryWithCapacity:content.size()];
|
|
36
|
+
for (const auto &entry : content) {
|
|
37
|
+
LinkPillContent *value = [[LinkPillContent alloc] init];
|
|
38
|
+
value.label = @(entry.label.c_str());
|
|
39
|
+
value.iconUri = @(entry.iconUri.c_str());
|
|
40
|
+
value.iconTintColor = entry.iconTintColor ? RCTUIColorFromSharedColor(entry.iconTintColor) : nil;
|
|
41
|
+
result[@(entry.url.c_str())] = value;
|
|
42
|
+
}
|
|
43
|
+
return [result copy];
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
#endif
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
#import "ENRMUIKit.h"
|
|
2
|
-
#import <Foundation/Foundation.h>
|
|
3
|
-
|
|
4
|
-
@class StyleConfig;
|
|
5
|
-
|
|
6
|
-
@interface ListMarkerDrawer : NSObject
|
|
7
|
-
|
|
8
|
-
- (instancetype)initWithConfig:(StyleConfig *)config;
|
|
9
|
-
|
|
10
|
-
- (void)drawMarkersForGlyphRange:(NSRange)glyphsToShow
|
|
11
|
-
layoutManager:(NSLayoutManager *)layoutManager
|
|
12
|
-
textContainer:(NSTextContainer *)textContainer
|
|
13
|
-
atPoint:(CGPoint)origin;
|
|
14
|
-
|
|
15
|
-
@end
|
|
1
|
+
#import "ENRMUIKit.h"
|
|
2
|
+
#import <Foundation/Foundation.h>
|
|
3
|
+
|
|
4
|
+
@class StyleConfig;
|
|
5
|
+
|
|
6
|
+
@interface ListMarkerDrawer : NSObject
|
|
7
|
+
|
|
8
|
+
- (instancetype)initWithConfig:(StyleConfig *)config;
|
|
9
|
+
|
|
10
|
+
- (void)drawMarkersForGlyphRange:(NSRange)glyphsToShow
|
|
11
|
+
layoutManager:(NSLayoutManager *)layoutManager
|
|
12
|
+
textContainer:(NSTextContainer *)textContainer
|
|
13
|
+
atPoint:(CGPoint)origin;
|
|
14
|
+
|
|
15
|
+
@end
|