@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.
Files changed (327) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +140 -140
  3. package/ReactNativeRenderRichText.podspec +23 -23
  4. package/android/build.gradle +86 -86
  5. package/android/consumer-rules.pro +3 -3
  6. package/android/src/main/AndroidManifest.xml +2 -2
  7. package/android/src/main/java/com/renderrichtext/EnrichedTiptapTextLayoutManager.kt +24 -24
  8. package/android/src/main/java/com/renderrichtext/EnrichedTiptapTextPackage.kt +13 -13
  9. package/android/src/main/java/com/renderrichtext/MeasurementStore.kt +644 -644
  10. package/android/src/main/java/com/renderrichtext/accessibility/AccessibilityLabels.kt +17 -17
  11. package/android/src/main/java/com/renderrichtext/accessibility/AccessibleTiptapTextView.kt +112 -112
  12. package/android/src/main/java/com/renderrichtext/accessibility/TiptapAccessibilityHelper.kt +576 -576
  13. package/android/src/main/java/com/renderrichtext/events/CodeBlockPressEvent.kt +24 -24
  14. package/android/src/main/java/com/renderrichtext/events/ContextMenuItemPressEvent.kt +28 -28
  15. package/android/src/main/java/com/renderrichtext/events/CopyPressEvent.kt +24 -24
  16. package/android/src/main/java/com/renderrichtext/events/ImagePressEvent.kt +25 -25
  17. package/android/src/main/java/com/renderrichtext/events/LatexErrorEvent.kt +29 -29
  18. package/android/src/main/java/com/renderrichtext/events/LinkLongPressEvent.kt +23 -23
  19. package/android/src/main/java/com/renderrichtext/events/LinkPressEvent.kt +23 -23
  20. package/android/src/main/java/com/renderrichtext/events/MentionLongPressEvent.kt +25 -25
  21. package/android/src/main/java/com/renderrichtext/events/MentionPressEvent.kt +25 -25
  22. package/android/src/main/java/com/renderrichtext/events/TaskListItemPressEvent.kt +26 -26
  23. package/android/src/main/java/com/renderrichtext/math/LatexErrorReporter.kt +9 -9
  24. package/android/src/main/java/com/renderrichtext/parser/Parser.kt +59 -59
  25. package/android/src/main/java/com/renderrichtext/parser/TextLinkMatching.kt +35 -35
  26. package/android/src/main/java/com/renderrichtext/renderer/BaselineShiftRenderer.kt +45 -45
  27. package/android/src/main/java/com/renderrichtext/renderer/BlankLineRenderer.kt +39 -39
  28. package/android/src/main/java/com/renderrichtext/renderer/BlockquoteRenderer.kt +243 -243
  29. package/android/src/main/java/com/renderrichtext/renderer/BlockquoteTextRenderer.kt +56 -56
  30. package/android/src/main/java/com/renderrichtext/renderer/CodeBlockRenderer.kt +135 -135
  31. package/android/src/main/java/com/renderrichtext/renderer/CodeRenderer.kt +37 -37
  32. package/android/src/main/java/com/renderrichtext/renderer/EmphasisRenderer.kt +28 -28
  33. package/android/src/main/java/com/renderrichtext/renderer/HeadingRenderer.kt +81 -81
  34. package/android/src/main/java/com/renderrichtext/renderer/HighlightRenderer.kt +26 -26
  35. package/android/src/main/java/com/renderrichtext/renderer/LineBreakRenderer.kt +17 -17
  36. package/android/src/main/java/com/renderrichtext/renderer/LinkRenderer.kt +90 -90
  37. package/android/src/main/java/com/renderrichtext/renderer/ListContextManager.kt +109 -109
  38. package/android/src/main/java/com/renderrichtext/renderer/ListItemRenderer.kt +211 -211
  39. package/android/src/main/java/com/renderrichtext/renderer/ListRenderer.kt +133 -133
  40. package/android/src/main/java/com/renderrichtext/renderer/MentionRenderer.kt +85 -85
  41. package/android/src/main/java/com/renderrichtext/renderer/ParagraphRenderer.kt +91 -91
  42. package/android/src/main/java/com/renderrichtext/renderer/Renderer.kt +148 -148
  43. package/android/src/main/java/com/renderrichtext/renderer/SoftBreakRenderer.kt +17 -17
  44. package/android/src/main/java/com/renderrichtext/renderer/SpanStyleCache.kt +143 -143
  45. package/android/src/main/java/com/renderrichtext/renderer/StrikethroughRenderer.kt +28 -28
  46. package/android/src/main/java/com/renderrichtext/renderer/StrongRenderer.kt +28 -28
  47. package/android/src/main/java/com/renderrichtext/renderer/TextRenderer.kt +31 -31
  48. package/android/src/main/java/com/renderrichtext/renderer/ThematicBreakRenderer.kt +46 -46
  49. package/android/src/main/java/com/renderrichtext/renderer/UnderlineRenderer.kt +28 -28
  50. package/android/src/main/java/com/renderrichtext/spans/BaseListSpan.kt +164 -164
  51. package/android/src/main/java/com/renderrichtext/spans/BaselineShiftSpan.kt +27 -27
  52. package/android/src/main/java/com/renderrichtext/spans/BlockquoteSpan.kt +302 -302
  53. package/android/src/main/java/com/renderrichtext/spans/CodeBackgroundSpan.kt +205 -205
  54. package/android/src/main/java/com/renderrichtext/spans/CodeBlockSpan.kt +216 -216
  55. package/android/src/main/java/com/renderrichtext/spans/CodeSpan.kt +32 -32
  56. package/android/src/main/java/com/renderrichtext/spans/EmphasisSpan.kt +42 -42
  57. package/android/src/main/java/com/renderrichtext/spans/FadeInSpan.kt +29 -29
  58. package/android/src/main/java/com/renderrichtext/spans/HeadingSpan.kt +38 -38
  59. package/android/src/main/java/com/renderrichtext/spans/HighlightSpan.kt +80 -80
  60. package/android/src/main/java/com/renderrichtext/spans/ImageSpan.kt +481 -481
  61. package/android/src/main/java/com/renderrichtext/spans/InlineBackgroundGeometry.kt +42 -42
  62. package/android/src/main/java/com/renderrichtext/spans/LineHeightSpan.kt +39 -39
  63. package/android/src/main/java/com/renderrichtext/spans/LinkPillIconCache.kt +154 -154
  64. package/android/src/main/java/com/renderrichtext/spans/LinkPillSpan.kt +381 -381
  65. package/android/src/main/java/com/renderrichtext/spans/LinkSpan.kt +68 -68
  66. package/android/src/main/java/com/renderrichtext/spans/ListItemSpacingSpan.kt +33 -33
  67. package/android/src/main/java/com/renderrichtext/spans/ListMarkerAnchorSpan.kt +38 -38
  68. package/android/src/main/java/com/renderrichtext/spans/MarginBottomSpan.kt +76 -76
  69. package/android/src/main/java/com/renderrichtext/spans/MentionChipSpan.kt +132 -132
  70. package/android/src/main/java/com/renderrichtext/spans/MentionSpan.kt +46 -46
  71. package/android/src/main/java/com/renderrichtext/spans/OrderedListSpan.kt +127 -127
  72. package/android/src/main/java/com/renderrichtext/spans/SpoilerSpan.kt +33 -33
  73. package/android/src/main/java/com/renderrichtext/spans/StrikethroughSpan.kt +12 -12
  74. package/android/src/main/java/com/renderrichtext/spans/StrongSpan.kt +39 -39
  75. package/android/src/main/java/com/renderrichtext/spans/TaskListSpan.kt +143 -143
  76. package/android/src/main/java/com/renderrichtext/spans/TextSpan.kt +26 -26
  77. package/android/src/main/java/com/renderrichtext/spans/ThematicBreakSpan.kt +69 -69
  78. package/android/src/main/java/com/renderrichtext/spans/UnorderedListSpan.kt +96 -96
  79. package/android/src/main/java/com/renderrichtext/spoiler/SpoilerStubs.kt +46 -46
  80. package/android/src/main/java/com/renderrichtext/styles/BaseBlockStyle.kt +11 -11
  81. package/android/src/main/java/com/renderrichtext/styles/BlockquoteStyle.kt +83 -83
  82. package/android/src/main/java/com/renderrichtext/styles/CodeBlockStyle.kt +80 -80
  83. package/android/src/main/java/com/renderrichtext/styles/CodeStyle.kt +26 -26
  84. package/android/src/main/java/com/renderrichtext/styles/EmphasisStyle.kt +21 -21
  85. package/android/src/main/java/com/renderrichtext/styles/FactoidStyle.kt +21 -21
  86. package/android/src/main/java/com/renderrichtext/styles/HeadingStyle.kt +33 -33
  87. package/android/src/main/java/com/renderrichtext/styles/HighlightStyle.kt +19 -19
  88. package/android/src/main/java/com/renderrichtext/styles/ImageStyle.kt +29 -29
  89. package/android/src/main/java/com/renderrichtext/styles/InlineImageStyle.kt +17 -17
  90. package/android/src/main/java/com/renderrichtext/styles/InlineMathStyle.kt +17 -17
  91. package/android/src/main/java/com/renderrichtext/styles/LinkPillContent.kt +36 -36
  92. package/android/src/main/java/com/renderrichtext/styles/LinkPillStyle.kt +44 -44
  93. package/android/src/main/java/com/renderrichtext/styles/LinkStyle.kt +23 -23
  94. package/android/src/main/java/com/renderrichtext/styles/LinkVariantEntry.kt +34 -34
  95. package/android/src/main/java/com/renderrichtext/styles/ListStyle.kt +65 -65
  96. package/android/src/main/java/com/renderrichtext/styles/MathStyle.kt +29 -29
  97. package/android/src/main/java/com/renderrichtext/styles/MentionStyle.kt +19 -19
  98. package/android/src/main/java/com/renderrichtext/styles/ParagraphStyle.kt +33 -33
  99. package/android/src/main/java/com/renderrichtext/styles/SpoilerStyle.kt +27 -27
  100. package/android/src/main/java/com/renderrichtext/styles/StrikethroughStyle.kt +17 -17
  101. package/android/src/main/java/com/renderrichtext/styles/StrongStyle.kt +21 -21
  102. package/android/src/main/java/com/renderrichtext/styles/StyleConfig.kt +411 -411
  103. package/android/src/main/java/com/renderrichtext/styles/StyleParser.kt +92 -92
  104. package/android/src/main/java/com/renderrichtext/styles/SubscriptStyle.kt +16 -16
  105. package/android/src/main/java/com/renderrichtext/styles/SuperscriptStyle.kt +16 -16
  106. package/android/src/main/java/com/renderrichtext/styles/TableStyle.kt +75 -75
  107. package/android/src/main/java/com/renderrichtext/styles/TaskListStyle.kt +29 -29
  108. package/android/src/main/java/com/renderrichtext/styles/TextAlignment.kt +32 -32
  109. package/android/src/main/java/com/renderrichtext/styles/ThematicBreakStyle.kt +23 -23
  110. package/android/src/main/java/com/renderrichtext/styles/UnderlineStyle.kt +17 -17
  111. package/android/src/main/java/com/renderrichtext/styles/VideoStyle.kt +31 -31
  112. package/android/src/main/java/com/renderrichtext/utils/common/BorderStyleUtils.kt +86 -86
  113. package/android/src/main/java/com/renderrichtext/utils/common/BreakStrategyUtils.kt +32 -32
  114. package/android/src/main/java/com/renderrichtext/utils/common/CodeBlockHighlighter.kt +36 -36
  115. package/android/src/main/java/com/renderrichtext/utils/common/CodeBlockNode.kt +42 -42
  116. package/android/src/main/java/com/renderrichtext/utils/common/EllipsizeUtils.kt +27 -27
  117. package/android/src/main/java/com/renderrichtext/utils/common/EnrichedTiptapAncestorUtils.kt +10 -10
  118. package/android/src/main/java/com/renderrichtext/utils/common/FeatureFlags.kt +9 -9
  119. package/android/src/main/java/com/renderrichtext/utils/common/LinkRecognitionProps.kt +31 -31
  120. package/android/src/main/java/com/renderrichtext/utils/common/LinkRegexConfig.kt +56 -56
  121. package/android/src/main/java/com/renderrichtext/utils/common/MotionPreferences.kt +18 -18
  122. package/android/src/main/java/com/renderrichtext/utils/common/ReadableMapExtensions.kt +28 -28
  123. package/android/src/main/java/com/renderrichtext/utils/common/layout/RTLUtils.kt +6 -6
  124. package/android/src/main/java/com/renderrichtext/utils/common/serialization/TiptapASTSerializer.kt +368 -368
  125. package/android/src/main/java/com/renderrichtext/utils/text/ImageCache.kt +88 -88
  126. package/android/src/main/java/com/renderrichtext/utils/text/ImageDownloader.kt +203 -203
  127. package/android/src/main/java/com/renderrichtext/utils/text/LocalImageLoader.kt +167 -167
  128. package/android/src/main/java/com/renderrichtext/utils/text/TailFadeInAnimator.kt +84 -84
  129. package/android/src/main/java/com/renderrichtext/utils/text/conversion/HTMLGenerator.kt +1105 -1105
  130. package/android/src/main/java/com/renderrichtext/utils/text/conversion/TiptapExtractor.kt +423 -423
  131. package/android/src/main/java/com/renderrichtext/utils/text/extensions/ParagraphUtils.kt +9 -9
  132. package/android/src/main/java/com/renderrichtext/utils/text/extensions/SpannableExtensions.kt +9 -9
  133. package/android/src/main/java/com/renderrichtext/utils/text/extensions/TextPaintExtensions.kt +76 -76
  134. package/android/src/main/java/com/renderrichtext/utils/text/interaction/CheckboxTouchHelper.kt +61 -61
  135. package/android/src/main/java/com/renderrichtext/utils/text/interaction/TaskListTapUtils.kt +286 -286
  136. package/android/src/main/java/com/renderrichtext/utils/text/span/ApplyLineHeight.kt +39 -39
  137. package/android/src/main/java/com/renderrichtext/utils/text/span/BlockSpacing.kt +142 -142
  138. package/android/src/main/java/com/renderrichtext/utils/text/span/SpanFlags.kt +43 -43
  139. package/android/src/main/java/com/renderrichtext/utils/text/span/WidthAwareSpans.kt +30 -30
  140. package/android/src/main/java/com/renderrichtext/utils/text/view/CodeBlockPressHost.kt +15 -15
  141. package/android/src/main/java/com/renderrichtext/utils/text/view/ImagePressHost.kt +19 -19
  142. package/android/src/main/java/com/renderrichtext/utils/text/view/SelectionActionMode.kt +235 -235
  143. package/android/src/main/java/com/renderrichtext/utils/text/view/TextSelectionColors.kt +48 -48
  144. package/android/src/main/java/com/renderrichtext/utils/text/view/TextViewSetup.kt +119 -119
  145. package/android/src/main/java/com/renderrichtext/views/ContextMenuPopup.kt +217 -217
  146. package/android/src/main/java/com/renderrichtext/views/CopyGlyph.kt +101 -101
  147. package/android/src/main/java/com/renderrichtext/views/WrapGlyph.kt +40 -40
  148. package/android/src/main/jni/CMakeLists.txt +52 -52
  149. package/android/src/main/jni/react/renderer/components/RichTextSpec/ComponentDescriptors.h +30 -30
  150. package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextComponentDescriptor.h +29 -29
  151. package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextMeasurementManager.cpp +45 -45
  152. package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextMeasurementManager.h +21 -21
  153. package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextShadowNode.cpp +38 -38
  154. package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextShadowNode.h +53 -53
  155. package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextState.cpp +9 -9
  156. package/android/src/main/jni/react/renderer/components/RichTextSpec/TiptapTextState.h +24 -24
  157. package/android/src/main/jni/react/renderer/components/RichTextSpec/conversions.h +40 -40
  158. package/cpp/parser/TiptapParser.hpp +13 -13
  159. package/cpp/vendor/nlohmann/json.hpp +24765 -24765
  160. package/ios/EnrichedTiptapText.h +27 -27
  161. package/ios/attachments/ENRMImageAttachment.h +51 -51
  162. package/ios/attachments/ENRMImageAttachment.m +398 -398
  163. package/ios/attachments/ENRMLinkPillAttachment.h +47 -47
  164. package/ios/attachments/ENRMLinkPillAttachment.m +324 -324
  165. package/ios/attachments/ENRMLinkPillIconCache.h +28 -28
  166. package/ios/attachments/ENRMLinkPillIconCache.m +181 -181
  167. package/ios/attachments/ENRMLinkPillText.h +27 -27
  168. package/ios/attachments/ENRMLinkPillText.m +118 -118
  169. package/ios/attachments/ENRMMathInlineAttachment.h +7 -7
  170. package/ios/attachments/ENRMMathInlineAttachment.m +4 -4
  171. package/ios/attachments/ThematicBreakAttachment.h +15 -15
  172. package/ios/attachments/ThematicBreakAttachment.m +33 -33
  173. package/ios/internals/ENRMViewFreeMeasurement.h +208 -208
  174. package/ios/internals/EnrichedTiptapTextComponentDescriptor.h +19 -19
  175. package/ios/internals/EnrichedTiptapTextShadowNode.h +43 -43
  176. package/ios/internals/EnrichedTiptapTextShadowNode.mm +69 -69
  177. package/ios/internals/EnrichedTiptapTextState.h +24 -24
  178. package/ios/internals/MeasurementCache.h +308 -308
  179. package/ios/internals/ShadowMeasurementUtils.h +145 -145
  180. package/ios/parser/ENRMTextLinkAttributes.h +7 -7
  181. package/ios/parser/ENRMTiptapParser.h +33 -33
  182. package/ios/parser/ENRMTiptapParser.mm +73 -73
  183. package/ios/parser/TiptapASTNode.m +52 -52
  184. package/ios/renderer/AttributedRenderer.h +23 -23
  185. package/ios/renderer/AttributedRenderer.m +229 -229
  186. package/ios/renderer/BaseRenderer.h +33 -33
  187. package/ios/renderer/BaseRenderer.m +46 -46
  188. package/ios/renderer/BaselineShiftTextAttributes.h +10 -10
  189. package/ios/renderer/BaselineShiftTextAttributes.m +26 -26
  190. package/ios/renderer/BlankLineRenderer.h +4 -4
  191. package/ios/renderer/BlankLineRenderer.m +51 -51
  192. package/ios/renderer/BlockquoteRenderer.h +6 -6
  193. package/ios/renderer/BlockquoteRenderer.m +258 -258
  194. package/ios/renderer/CodeBlockRenderer.h +9 -9
  195. package/ios/renderer/CodeBlockRenderer.m +99 -99
  196. package/ios/renderer/CodeRenderer.h +9 -9
  197. package/ios/renderer/CodeRenderer.m +69 -69
  198. package/ios/renderer/ENRMBlockquoteTextRenderer.h +25 -25
  199. package/ios/renderer/ENRMBlockquoteTextRenderer.m +48 -48
  200. package/ios/renderer/EmphasisRenderer.h +5 -5
  201. package/ios/renderer/EmphasisRenderer.m +99 -99
  202. package/ios/renderer/HeadingRenderer.h +6 -6
  203. package/ios/renderer/HeadingRenderer.m +102 -102
  204. package/ios/renderer/HighlightRenderer.h +7 -7
  205. package/ios/renderer/HighlightRenderer.m +33 -33
  206. package/ios/renderer/LinkRenderer.h +6 -6
  207. package/ios/renderer/LinkRenderer.m +157 -157
  208. package/ios/renderer/ListItemRenderer.h +24 -24
  209. package/ios/renderer/ListItemRenderer.m +283 -283
  210. package/ios/renderer/ListRenderer.h +13 -13
  211. package/ios/renderer/ListRenderer.m +126 -126
  212. package/ios/renderer/MentionRenderer.h +9 -9
  213. package/ios/renderer/MentionRenderer.m +96 -96
  214. package/ios/renderer/NodeRenderer.h +8 -8
  215. package/ios/renderer/ParagraphRenderer.h +6 -6
  216. package/ios/renderer/ParagraphRenderer.m +85 -85
  217. package/ios/renderer/RenderContext.h +145 -145
  218. package/ios/renderer/RenderContext.m +402 -402
  219. package/ios/renderer/RendererFactory.h +12 -12
  220. package/ios/renderer/StrikethroughRenderer.h +5 -5
  221. package/ios/renderer/StrikethroughRenderer.m +30 -30
  222. package/ios/renderer/StrongRenderer.h +5 -5
  223. package/ios/renderer/StrongRenderer.m +87 -87
  224. package/ios/renderer/TextRenderer.h +6 -6
  225. package/ios/renderer/TextRenderer.m +18 -18
  226. package/ios/renderer/ThematicBreakRenderer.h +4 -4
  227. package/ios/renderer/ThematicBreakRenderer.m +41 -41
  228. package/ios/renderer/UnderlineRenderer.h +4 -4
  229. package/ios/renderer/UnderlineRenderer.m +41 -41
  230. package/ios/styles/ENRMFontSlot.h +12 -12
  231. package/ios/styles/ENRMFontSlot.m +24 -24
  232. package/ios/styles/StyleConfig.h +488 -488
  233. package/ios/styles/StyleConfig.mm +2820 -2820
  234. package/ios/utils/AccessibilityInfo.h +35 -35
  235. package/ios/utils/AccessibilityInfo.m +24 -24
  236. package/ios/utils/BlockquoteBorder.h +26 -26
  237. package/ios/utils/BlockquoteBorder.m +294 -294
  238. package/ios/utils/CodeBackground.h +19 -19
  239. package/ios/utils/CodeBackground.m +196 -196
  240. package/ios/utils/CodeBlockBackground.h +17 -17
  241. package/ios/utils/CodeBlockBackground.m +102 -102
  242. package/ios/utils/ContextMenuUtils.h +76 -76
  243. package/ios/utils/ContextMenuUtils.mm +75 -75
  244. package/ios/utils/ENRMAccessibilityLabels.h +40 -40
  245. package/ios/utils/ENRMAccessibilityLabels.m +5 -5
  246. package/ios/utils/ENRMAsyncRenderCoordinator.h +24 -24
  247. package/ios/utils/ENRMAsyncRenderCoordinator.m +37 -37
  248. package/ios/utils/ENRMAtomicSize.h +65 -65
  249. package/ios/utils/ENRMCodeBlockContent.h +37 -37
  250. package/ios/utils/ENRMCodeBlockContent.mm +89 -89
  251. package/ios/utils/ENRMFeatureFlags.h +25 -25
  252. package/ios/utils/ENRMImageDownloader.h +30 -30
  253. package/ios/utils/ENRMImageDownloader.m +168 -168
  254. package/ios/utils/ENRMLatexErrorCoordinator.h +27 -27
  255. package/ios/utils/ENRMLatexErrorCoordinator.mm +75 -75
  256. package/ios/utils/ENRMLatexErrorReporting.h +13 -13
  257. package/ios/utils/ENRMLinkContextMenus.h +93 -93
  258. package/ios/utils/ENRMLinkContextMenus.m +178 -178
  259. package/ios/utils/ENRMLinkRegexConfig.h +30 -30
  260. package/ios/utils/ENRMLinkRegexConfig.mm +104 -104
  261. package/ios/utils/ENRMLinkRegexProps.h +23 -23
  262. package/ios/utils/ENRMLocalImageLoader.h +35 -35
  263. package/ios/utils/ENRMLocalImageLoader.m +111 -111
  264. package/ios/utils/ENRMMenuAction.h +27 -27
  265. package/ios/utils/ENRMMenuAction.m +33 -33
  266. package/ios/utils/ENRMSpoilerOverlayManager.h +15 -15
  267. package/ios/utils/ENRMSpoilerOverlayManager.m +19 -19
  268. package/ios/utils/ENRMSpoilerTapUtils.h +6 -6
  269. package/ios/utils/ENRMSpoilerTapUtils.m +11 -11
  270. package/ios/utils/ENRMTailFadeInAnimator.h +16 -16
  271. package/ios/utils/ENRMTailFadeInAnimator.m +161 -161
  272. package/ios/utils/ENRMTextHitTest.h +23 -23
  273. package/ios/utils/ENRMTextHitTest.m +20 -20
  274. package/ios/utils/ENRMTextInteractionUtils.h +20 -20
  275. package/ios/utils/ENRMTextInteractionUtils.m +15 -15
  276. package/ios/utils/ENRMTextRenderer.h +38 -38
  277. package/ios/utils/ENRMTextRenderer.m +54 -54
  278. package/ios/utils/ENRMTextViewSetup.h +132 -132
  279. package/ios/utils/ENRMUIKit.h +429 -429
  280. package/ios/utils/EditMenuUtils.h +105 -105
  281. package/ios/utils/EditMenuUtils.m +143 -143
  282. package/ios/utils/FontScaleObserver.h +10 -10
  283. package/ios/utils/FontScaleObserver.m +55 -55
  284. package/ios/utils/FontUtils.h +31 -31
  285. package/ios/utils/FontUtils.m +63 -63
  286. package/ios/utils/HTMLGenerator.h +25 -25
  287. package/ios/utils/HTMLGenerator.m +1041 -1041
  288. package/ios/utils/HeightUpdateUtils.h +25 -25
  289. package/ios/utils/ImageRequestHeaderUtils.h +35 -35
  290. package/ios/utils/LastElementUtils.h +97 -97
  291. package/ios/utils/LinkContextMenuUtils.h +55 -55
  292. package/ios/utils/LinkPillContentUtils.h +46 -46
  293. package/ios/utils/ListMarkerDrawer.h +15 -15
  294. package/ios/utils/ListMarkerDrawer.m +239 -239
  295. package/ios/utils/MentionBackground.h +26 -26
  296. package/ios/utils/MentionBackground.m +86 -86
  297. package/ios/utils/ParagraphStyleUtils.h +87 -87
  298. package/ios/utils/ParagraphStyleUtils.m +484 -484
  299. package/ios/utils/PasteboardUtils.h +48 -48
  300. package/ios/utils/PasteboardUtils.m +166 -166
  301. package/ios/utils/RTFExportUtils.h +24 -24
  302. package/ios/utils/RTFExportUtils.m +299 -299
  303. package/ios/utils/SelectionColorUtils.h +14 -14
  304. package/ios/utils/StylePropsUtils.h +1340 -1340
  305. package/ios/utils/TaskListTapUtils.h +6 -6
  306. package/ios/utils/TaskListTapUtils.m +14 -14
  307. package/ios/utils/TextViewLayoutManager.h +14 -14
  308. package/ios/utils/TiptapAccessibilityElementBuilder.h +43 -43
  309. package/ios/utils/TiptapAccessibilityElementBuilder.m +432 -432
  310. package/ios/utils/TiptapExtractor.h +17 -17
  311. package/ios/utils/TiptapExtractor.m +367 -367
  312. package/ios/views/ENRMTiptapTextView.h +25 -25
  313. package/ios/views/ENRMTiptapTextView.m +247 -247
  314. package/package.json +65 -70
  315. package/react-native.config.js +10 -10
  316. package/src/admonitionDefaults.ts +58 -58
  317. package/src/darkModeTextStyle.ts +99 -99
  318. package/src/headingDefaults.ts +21 -21
  319. package/src/index.tsx +4 -4
  320. package/src/linkVariantUtils.ts +120 -120
  321. package/src/normalizeTiptapStyle.ts +397 -397
  322. package/src/rn-globals.d.ts +1 -1
  323. package/src/styleUtils.ts +107 -107
  324. package/src/types/TiptapStyle.ts +532 -532
  325. package/src/types/TiptapStyleInternal.ts +299 -299
  326. package/src/types/linkPill.ts +9 -9
  327. 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