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.
Files changed (678) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +53 -0
  3. package/ReactNativeEnrichedMarkdown.podspec +67 -0
  4. package/android/build.gradle +94 -0
  5. package/android/consumer-rules.pro +19 -0
  6. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownManagerDelegate.java +87 -0
  7. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownManagerInterface.java +37 -0
  8. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextInputManagerDelegate.java +159 -0
  9. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextInputManagerInterface.java +59 -0
  10. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerDelegate.java +87 -0
  11. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerInterface.java +37 -0
  12. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/ComponentDescriptors.cpp +22 -0
  13. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/ComponentDescriptors.h +24 -0
  14. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.cpp +318 -0
  15. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.h +259 -0
  16. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.cpp +375 -0
  17. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.h +5174 -0
  18. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/ShadowNodes.cpp +17 -0
  19. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/ShadowNodes.h +23 -0
  20. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/States.cpp +16 -0
  21. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/States.h +20 -0
  22. package/android/gradle.properties +5 -0
  23. package/android/src/main/AndroidManifest.xml +2 -0
  24. package/android/src/main/baseline-prof.txt +254 -0
  25. package/android/src/main/cpp/jni-adapter.cpp +264 -0
  26. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdown.kt +554 -0
  27. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownInternalText.kt +122 -0
  28. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownManager.kt +255 -0
  29. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownText.kt +363 -0
  30. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextLayoutManager.kt +15 -0
  31. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextManager.kt +253 -0
  32. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextPackage.kt +20 -0
  33. package/android/src/main/java/com/swmansion/enriched/markdown/MeasurementStore.kt +653 -0
  34. package/android/src/main/java/com/swmansion/enriched/markdown/accessibility/AccessibleMarkdownTextView.kt +33 -0
  35. package/android/src/main/java/com/swmansion/enriched/markdown/accessibility/MarkdownAccessibilityHelper.kt +482 -0
  36. package/android/src/main/java/com/swmansion/enriched/markdown/events/ContextMenuItemPressEvent.kt +28 -0
  37. package/android/src/main/java/com/swmansion/enriched/markdown/events/LinkLongPressEvent.kt +23 -0
  38. package/android/src/main/java/com/swmansion/enriched/markdown/events/LinkPressEvent.kt +23 -0
  39. package/android/src/main/java/com/swmansion/enriched/markdown/events/TaskListItemPressEvent.kt +26 -0
  40. package/android/src/main/java/com/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputManager.kt +465 -0
  41. package/android/src/main/java/com/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputView.kt +1066 -0
  42. package/android/src/main/java/com/swmansion/enriched/markdown/input/autolink/AutoDetectedLinkSpan.kt +29 -0
  43. package/android/src/main/java/com/swmansion/enriched/markdown/input/autolink/AutoLinkDetector.kt +188 -0
  44. package/android/src/main/java/com/swmansion/enriched/markdown/input/autolink/LinkRegexConfig.kt +9 -0
  45. package/android/src/main/java/com/swmansion/enriched/markdown/input/detection/DetectorPipeline.kt +40 -0
  46. package/android/src/main/java/com/swmansion/enriched/markdown/input/detection/TextDetector.kt +27 -0
  47. package/android/src/main/java/com/swmansion/enriched/markdown/input/detection/WordResult.kt +7 -0
  48. package/android/src/main/java/com/swmansion/enriched/markdown/input/detection/WordsUtils.kt +65 -0
  49. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/InputConnectionWrapper.kt +69 -0
  50. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/MarkdownEditableFactory.kt +15 -0
  51. package/android/src/main/java/com/swmansion/enriched/markdown/input/editing/MarkdownTextWatcher.kt +41 -0
  52. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnCaretRectChangeEvent.kt +20 -0
  53. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnChangeMarkdownEvent.kt +22 -0
  54. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnChangeMentionEvent.kt +24 -0
  55. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnChangeSelectionEvent.kt +24 -0
  56. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnChangeStateEvent.kt +50 -0
  57. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnChangeTextEvent.kt +22 -0
  58. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnContextMenuItemPressEvent.kt +48 -0
  59. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnEndMentionEvent.kt +22 -0
  60. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnInputBlurEvent.kt +18 -0
  61. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnInputFocusEvent.kt +18 -0
  62. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnLinkDetectedEvent.kt +28 -0
  63. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnMathPressEvent.kt +36 -0
  64. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnRequestCaretRectResultEvent.kt +25 -0
  65. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnRequestMarkdownResultEvent.kt +24 -0
  66. package/android/src/main/java/com/swmansion/enriched/markdown/input/events/OnStartMentionEvent.kt +22 -0
  67. package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/FormattingStore.kt +192 -0
  68. package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputFormatter.kt +117 -0
  69. package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputParser.kt +117 -0
  70. package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/InputRemend.kt +120 -0
  71. package/android/src/main/java/com/swmansion/enriched/markdown/input/formatting/MarkdownSerializer.kt +176 -0
  72. package/android/src/main/java/com/swmansion/enriched/markdown/input/layout/InputEventEmitter.kt +216 -0
  73. package/android/src/main/java/com/swmansion/enriched/markdown/input/layout/InputLayoutManager.kt +28 -0
  74. package/android/src/main/java/com/swmansion/enriched/markdown/input/layout/InputMeasurementStore.kt +137 -0
  75. package/android/src/main/java/com/swmansion/enriched/markdown/input/math/MathChipController.kt +113 -0
  76. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/CaretRect.kt +17 -0
  77. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/FormattingRange.kt +10 -0
  78. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/InputFormatterStyle.kt +28 -0
  79. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/MathAtom.kt +7 -0
  80. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/MathChipStyle.kt +47 -0
  81. package/android/src/main/java/com/swmansion/enriched/markdown/input/model/StyleType.kt +10 -0
  82. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/BoldStyleHandler.kt +35 -0
  83. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/ItalicStyleHandler.kt +35 -0
  84. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/LinkStyleHandler.kt +75 -0
  85. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/SpoilerStyleHandler.kt +36 -0
  86. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/StrikethroughStyleHandler.kt +24 -0
  87. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/StyleHandler.kt +18 -0
  88. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/StyleMergingConfig.kt +10 -0
  89. package/android/src/main/java/com/swmansion/enriched/markdown/input/styles/UnderlineStyleHandler.kt +24 -0
  90. package/android/src/main/java/com/swmansion/enriched/markdown/input/toolbar/InputContextMenu.kt +181 -0
  91. package/android/src/main/java/com/swmansion/enriched/markdown/parser/MarkdownASTNode.kt +43 -0
  92. package/android/src/main/java/com/swmansion/enriched/markdown/parser/Parser.kt +68 -0
  93. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BaselineShiftRenderer.kt +44 -0
  94. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BlockStyleContext.kt +152 -0
  95. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BlockquoteRenderer.kt +87 -0
  96. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/CodeBlockRenderer.kt +104 -0
  97. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/CodeRenderer.kt +36 -0
  98. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/DocumentRenderer.kt +16 -0
  99. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/EmphasisRenderer.kt +27 -0
  100. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/HeadingRenderer.kt +71 -0
  101. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/HighlightRenderer.kt +25 -0
  102. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ImageRenderer.kt +61 -0
  103. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/LineBreakRenderer.kt +16 -0
  104. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/LinkRenderer.kt +29 -0
  105. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListContextManager.kt +89 -0
  106. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListItemRenderer.kt +127 -0
  107. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListRenderer.kt +74 -0
  108. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/NodeRenderer.kt +161 -0
  109. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ParagraphRenderer.kt +75 -0
  110. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/Renderer.kt +113 -0
  111. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SpanStyleCache.kt +134 -0
  112. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SpoilerRenderer.kt +25 -0
  113. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/StrikethroughRenderer.kt +27 -0
  114. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/StrongRenderer.kt +27 -0
  115. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SubscriptRenderer.kt +11 -0
  116. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SuperscriptRenderer.kt +11 -0
  117. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/TextRenderer.kt +30 -0
  118. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ThematicBreakRenderer.kt +45 -0
  119. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/UnderlineRenderer.kt +27 -0
  120. package/android/src/main/java/com/swmansion/enriched/markdown/spans/BaseListSpan.kt +127 -0
  121. package/android/src/main/java/com/swmansion/enriched/markdown/spans/BaselineShiftSpan.kt +27 -0
  122. package/android/src/main/java/com/swmansion/enriched/markdown/spans/BlockquoteSpan.kt +152 -0
  123. package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeBackgroundSpan.kt +180 -0
  124. package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeBlockSpan.kt +196 -0
  125. package/android/src/main/java/com/swmansion/enriched/markdown/spans/CodeSpan.kt +32 -0
  126. package/android/src/main/java/com/swmansion/enriched/markdown/spans/EmphasisSpan.kt +42 -0
  127. package/android/src/main/java/com/swmansion/enriched/markdown/spans/FadeInSpan.kt +25 -0
  128. package/android/src/main/java/com/swmansion/enriched/markdown/spans/HeadingSpan.kt +38 -0
  129. package/android/src/main/java/com/swmansion/enriched/markdown/spans/HighlightSpan.kt +26 -0
  130. package/android/src/main/java/com/swmansion/enriched/markdown/spans/ImageSpan.kt +335 -0
  131. package/android/src/main/java/com/swmansion/enriched/markdown/spans/LineHeightSpan.kt +27 -0
  132. package/android/src/main/java/com/swmansion/enriched/markdown/spans/LinkSpan.kt +66 -0
  133. package/android/src/main/java/com/swmansion/enriched/markdown/spans/MarginBottomSpan.kt +76 -0
  134. package/android/src/main/java/com/swmansion/enriched/markdown/spans/MathModels.kt +18 -0
  135. package/android/src/main/java/com/swmansion/enriched/markdown/spans/OrderedListSpan.kt +85 -0
  136. package/android/src/main/java/com/swmansion/enriched/markdown/spans/SpoilerSpan.kt +33 -0
  137. package/android/src/main/java/com/swmansion/enriched/markdown/spans/StrikethroughSpan.kt +12 -0
  138. package/android/src/main/java/com/swmansion/enriched/markdown/spans/StrongSpan.kt +39 -0
  139. package/android/src/main/java/com/swmansion/enriched/markdown/spans/TaskListSpan.kt +134 -0
  140. package/android/src/main/java/com/swmansion/enriched/markdown/spans/TextSpan.kt +26 -0
  141. package/android/src/main/java/com/swmansion/enriched/markdown/spans/ThematicBreakSpan.kt +69 -0
  142. package/android/src/main/java/com/swmansion/enriched/markdown/spans/UnorderedListSpan.kt +92 -0
  143. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/ParticleStrategy.kt +68 -0
  144. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SegmentKey.kt +13 -0
  145. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SolidStrategy.kt +95 -0
  146. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerAnimator.kt +89 -0
  147. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerCapable.kt +5 -0
  148. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerConstants.kt +3 -0
  149. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerDrawContext.kt +33 -0
  150. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerDrawUtils.kt +40 -0
  151. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerOverlay.kt +17 -0
  152. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerOverlayDrawer.kt +152 -0
  153. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerParticleDrawable.kt +237 -0
  154. package/android/src/main/java/com/swmansion/enriched/markdown/spoiler/SpoilerStrategy.kt +53 -0
  155. package/android/src/main/java/com/swmansion/enriched/markdown/styles/BaseBlockStyle.kt +11 -0
  156. package/android/src/main/java/com/swmansion/enriched/markdown/styles/BlockquoteStyle.kt +51 -0
  157. package/android/src/main/java/com/swmansion/enriched/markdown/styles/CodeBlockStyle.kt +54 -0
  158. package/android/src/main/java/com/swmansion/enriched/markdown/styles/CodeStyle.kt +26 -0
  159. package/android/src/main/java/com/swmansion/enriched/markdown/styles/EmphasisStyle.kt +21 -0
  160. package/android/src/main/java/com/swmansion/enriched/markdown/styles/HeadingStyle.kt +33 -0
  161. package/android/src/main/java/com/swmansion/enriched/markdown/styles/HighlightStyle.kt +19 -0
  162. package/android/src/main/java/com/swmansion/enriched/markdown/styles/ImageStyle.kt +23 -0
  163. package/android/src/main/java/com/swmansion/enriched/markdown/styles/InlineImageStyle.kt +17 -0
  164. package/android/src/main/java/com/swmansion/enriched/markdown/styles/InlineMathStyle.kt +17 -0
  165. package/android/src/main/java/com/swmansion/enriched/markdown/styles/LinkStyle.kt +23 -0
  166. package/android/src/main/java/com/swmansion/enriched/markdown/styles/LinkVariantEntry.kt +29 -0
  167. package/android/src/main/java/com/swmansion/enriched/markdown/styles/ListStyle.kt +62 -0
  168. package/android/src/main/java/com/swmansion/enriched/markdown/styles/MathStyle.kt +29 -0
  169. package/android/src/main/java/com/swmansion/enriched/markdown/styles/ParagraphStyle.kt +33 -0
  170. package/android/src/main/java/com/swmansion/enriched/markdown/styles/SpoilerStyle.kt +27 -0
  171. package/android/src/main/java/com/swmansion/enriched/markdown/styles/StrikethroughStyle.kt +17 -0
  172. package/android/src/main/java/com/swmansion/enriched/markdown/styles/StrongStyle.kt +21 -0
  173. package/android/src/main/java/com/swmansion/enriched/markdown/styles/StyleConfig.kt +364 -0
  174. package/android/src/main/java/com/swmansion/enriched/markdown/styles/StyleParser.kt +92 -0
  175. package/android/src/main/java/com/swmansion/enriched/markdown/styles/SubscriptStyle.kt +16 -0
  176. package/android/src/main/java/com/swmansion/enriched/markdown/styles/SuperscriptStyle.kt +16 -0
  177. package/android/src/main/java/com/swmansion/enriched/markdown/styles/TableStyle.kt +69 -0
  178. package/android/src/main/java/com/swmansion/enriched/markdown/styles/TaskListStyle.kt +29 -0
  179. package/android/src/main/java/com/swmansion/enriched/markdown/styles/TextAlignment.kt +32 -0
  180. package/android/src/main/java/com/swmansion/enriched/markdown/styles/ThematicBreakStyle.kt +23 -0
  181. package/android/src/main/java/com/swmansion/enriched/markdown/styles/UnderlineStyle.kt +17 -0
  182. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/BreakStrategyUtils.kt +32 -0
  183. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/FeatureFlags.kt +7 -0
  184. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/MarkdownSegment.kt +56 -0
  185. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/MarkdownViewManagerUtils.kt +100 -0
  186. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/MotionPreferences.kt +18 -0
  187. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/ReadableMapExtensions.kt +20 -0
  188. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/RenderedSegment.kt +78 -0
  189. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/SegmentReconciler.kt +118 -0
  190. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/SegmentSignature.kt +78 -0
  191. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/StreamingMarkdownFilter.kt +142 -0
  192. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/layout/RTLUtils.kt +6 -0
  193. package/android/src/main/java/com/swmansion/enriched/markdown/utils/common/serialization/MarkdownASTSerializer.kt +115 -0
  194. package/android/src/main/java/com/swmansion/enriched/markdown/utils/input/AutoCapitalizeUtils.kt +27 -0
  195. package/android/src/main/java/com/swmansion/enriched/markdown/utils/input/BorderPropsApplicator.kt +77 -0
  196. package/android/src/main/java/com/swmansion/enriched/markdown/utils/input/MarkdownStyleParser.kt +184 -0
  197. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/ImageCache.kt +53 -0
  198. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/ImageDownloader.kt +156 -0
  199. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/TailFadeInAnimator.kt +84 -0
  200. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/conversion/HTMLGenerator.kt +1067 -0
  201. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/conversion/MarkdownExtractor.kt +419 -0
  202. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/extensions/ParagraphUtils.kt +9 -0
  203. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/extensions/SpannableExtensions.kt +65 -0
  204. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/extensions/TextPaintExtensions.kt +53 -0
  205. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/interaction/CheckboxTouchHelper.kt +54 -0
  206. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/interaction/TaskListTapUtils.kt +249 -0
  207. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/span/BlockSpacing.kt +89 -0
  208. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/span/SpanFlags.kt +17 -0
  209. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/LinkEvents.kt +43 -0
  210. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/LinkLongPressMovementMethod.kt +187 -0
  211. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/SelectionActionMode.kt +205 -0
  212. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/TextSelectionColors.kt +48 -0
  213. package/android/src/main/java/com/swmansion/enriched/markdown/utils/text/view/TextViewSetup.kt +40 -0
  214. package/android/src/main/java/com/swmansion/enriched/markdown/views/BlockSegmentView.kt +10 -0
  215. package/android/src/main/java/com/swmansion/enriched/markdown/views/ContextMenuPopup.kt +214 -0
  216. package/android/src/main/java/com/swmansion/enriched/markdown/views/TableContainerView.kt +501 -0
  217. package/android/src/main/jni/CMakeLists.txt +70 -0
  218. package/android/src/main/jni/EnrichedMarkdownTextSpec.cpp +21 -0
  219. package/android/src/main/jni/EnrichedMarkdownTextSpec.h +15 -0
  220. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/ComponentDescriptors.h +67 -0
  221. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerComponentDescriptor.h +26 -0
  222. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerMeasurementManager.cpp +45 -0
  223. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerMeasurementManager.h +21 -0
  224. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerShadowNode.cpp +20 -0
  225. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownContainerShadowNode.h +34 -0
  226. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextComponentDescriptor.h +29 -0
  227. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextInputMeasurementManager.cpp +44 -0
  228. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextInputMeasurementManager.h +21 -0
  229. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextInputShadowNode.cpp +30 -0
  230. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextInputShadowNode.h +43 -0
  231. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextInputState.cpp +9 -0
  232. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextInputState.h +24 -0
  233. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextMeasurementManager.cpp +45 -0
  234. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextMeasurementManager.h +21 -0
  235. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextShadowNode.cpp +20 -0
  236. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextShadowNode.h +37 -0
  237. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/conversions.h +45 -0
  238. package/android/src/math/java/com/swmansion/enriched/markdown/input/math/MathChipControllerImpl.kt +217 -0
  239. package/android/src/math/java/com/swmansion/enriched/markdown/renderer/MathInlineRenderer.kt +47 -0
  240. package/android/src/math/java/com/swmansion/enriched/markdown/spans/MathChipSpan.kt +208 -0
  241. package/android/src/math/java/com/swmansion/enriched/markdown/spans/MathInlinePlaceholderSpan.kt +41 -0
  242. package/android/src/math/java/com/swmansion/enriched/markdown/spans/MathInlineSpan.kt +92 -0
  243. package/android/src/math/java/com/swmansion/enriched/markdown/spans/MathMeasureHelper.kt +57 -0
  244. package/android/src/math/java/com/swmansion/enriched/markdown/views/MathContainerView.kt +148 -0
  245. package/app.plugin.js +1 -0
  246. package/cpp/md4c/md4c.c +7235 -0
  247. package/cpp/md4c/md4c.h +475 -0
  248. package/cpp/parser/MD4CParser.cpp +539 -0
  249. package/cpp/parser/MD4CParser.hpp +32 -0
  250. package/cpp/parser/MarkdownASTNode.hpp +63 -0
  251. package/cpp/wasm/ASTSerializer.cpp +158 -0
  252. package/cpp/wasm/ASTSerializer.hpp +17 -0
  253. package/cpp/wasm/build.sh +58 -0
  254. package/cpp/wasm/md4c_wasm.cpp +43 -0
  255. package/ios/EnrichedMarkdown.h +20 -0
  256. package/ios/EnrichedMarkdown.mm +1121 -0
  257. package/ios/EnrichedMarkdownText.h +20 -0
  258. package/ios/EnrichedMarkdownText.mm +802 -0
  259. package/ios/attachments/ENRMImageAttachment.h +27 -0
  260. package/ios/attachments/ENRMImageAttachment.m +305 -0
  261. package/ios/attachments/ENRMMathInlineAttachment+macOS.m +60 -0
  262. package/ios/attachments/ENRMMathInlineAttachment.h +47 -0
  263. package/ios/attachments/ENRMMathInlineAttachment.m +142 -0
  264. package/ios/attachments/ENRMMathInlineAttachmentShared.h +17 -0
  265. package/ios/attachments/ThematicBreakAttachment.h +15 -0
  266. package/ios/attachments/ThematicBreakAttachment.m +33 -0
  267. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/ComponentDescriptors.cpp +22 -0
  268. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/ComponentDescriptors.h +24 -0
  269. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/EventEmitters.cpp +318 -0
  270. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/EventEmitters.h +259 -0
  271. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/Props.cpp +375 -0
  272. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/Props.h +5174 -0
  273. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/RCTComponentViewHelpers.h +436 -0
  274. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/ShadowNodes.cpp +17 -0
  275. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/ShadowNodes.h +23 -0
  276. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/States.cpp +16 -0
  277. package/ios/generated/ReactCodegen/EnrichedMarkdownTextSpec/States.h +20 -0
  278. package/ios/input/ENRMAutoLinkDetector.h +32 -0
  279. package/ios/input/ENRMAutoLinkDetector.mm +211 -0
  280. package/ios/input/ENRMDetectorPipeline.h +28 -0
  281. package/ios/input/ENRMDetectorPipeline.mm +53 -0
  282. package/ios/input/ENRMFormattingRange.h +19 -0
  283. package/ios/input/ENRMFormattingRange.mm +28 -0
  284. package/ios/input/ENRMFormattingStore.h +29 -0
  285. package/ios/input/ENRMFormattingStore.mm +278 -0
  286. package/ios/input/ENRMInputFormatter.h +84 -0
  287. package/ios/input/ENRMInputFormatter.mm +222 -0
  288. package/ios/input/ENRMInputLayoutManager.h +11 -0
  289. package/ios/input/ENRMInputLayoutManager.mm +5 -0
  290. package/ios/input/ENRMInputLinkPrompt.h +9 -0
  291. package/ios/input/ENRMInputLinkPrompt.mm +71 -0
  292. package/ios/input/ENRMInputMentionCandidate.h +21 -0
  293. package/ios/input/ENRMInputMentionCandidate.mm +18 -0
  294. package/ios/input/ENRMInputParser.h +27 -0
  295. package/ios/input/ENRMInputParser.mm +556 -0
  296. package/ios/input/ENRMInputRemend.h +9 -0
  297. package/ios/input/ENRMInputRemend.mm +136 -0
  298. package/ios/input/ENRMInputStyledRange.h +29 -0
  299. package/ios/input/ENRMInputStyledRange.mm +4 -0
  300. package/ios/input/ENRMInputTextView.h +13 -0
  301. package/ios/input/ENRMInputTextView.mm +175 -0
  302. package/ios/input/ENRMLinkRegexConfig.h +26 -0
  303. package/ios/input/ENRMLinkRegexConfig.mm +60 -0
  304. package/ios/input/ENRMMarkdownSerializer.h +19 -0
  305. package/ios/input/ENRMMarkdownSerializer.mm +283 -0
  306. package/ios/input/ENRMTextDetector.h +30 -0
  307. package/ios/input/ENRMWordsUtils.h +28 -0
  308. package/ios/input/ENRMWordsUtils.mm +88 -0
  309. package/ios/input/EnrichedMarkdownTextInput+ContextMenu.mm +157 -0
  310. package/ios/input/EnrichedMarkdownTextInput+Internal.h +30 -0
  311. package/ios/input/EnrichedMarkdownTextInput.h +20 -0
  312. package/ios/input/EnrichedMarkdownTextInput.mm +2008 -0
  313. package/ios/input/InputStylePropsUtils.h +261 -0
  314. package/ios/input/internals/EnrichedMarkdownTextInputComponentDescriptor.h +19 -0
  315. package/ios/input/internals/EnrichedMarkdownTextInputShadowNode.h +40 -0
  316. package/ios/input/internals/EnrichedMarkdownTextInputShadowNode.mm +83 -0
  317. package/ios/input/internals/EnrichedMarkdownTextInputState.h +23 -0
  318. package/ios/input/styles/ENRMBoldStyleHandler.h +10 -0
  319. package/ios/input/styles/ENRMBoldStyleHandler.mm +29 -0
  320. package/ios/input/styles/ENRMItalicStyleHandler.h +10 -0
  321. package/ios/input/styles/ENRMItalicStyleHandler.mm +29 -0
  322. package/ios/input/styles/ENRMLinkStyleHandler.h +10 -0
  323. package/ios/input/styles/ENRMLinkStyleHandler.mm +52 -0
  324. package/ios/input/styles/ENRMSpoilerStyleHandler.h +10 -0
  325. package/ios/input/styles/ENRMSpoilerStyleHandler.mm +33 -0
  326. package/ios/input/styles/ENRMStrikethroughStyleHandler.h +10 -0
  327. package/ios/input/styles/ENRMStrikethroughStyleHandler.mm +28 -0
  328. package/ios/input/styles/ENRMStyleHandler.h +26 -0
  329. package/ios/input/styles/ENRMStyleMergingConfig.h +26 -0
  330. package/ios/input/styles/ENRMStyleMergingConfig.mm +21 -0
  331. package/ios/input/styles/ENRMUnderlineStyleHandler.h +10 -0
  332. package/ios/input/styles/ENRMUnderlineStyleHandler.mm +28 -0
  333. package/ios/internals/EnrichedMarkdownComponentDescriptor.h +18 -0
  334. package/ios/internals/EnrichedMarkdownShadowNode.h +43 -0
  335. package/ios/internals/EnrichedMarkdownShadowNode.mm +73 -0
  336. package/ios/internals/EnrichedMarkdownState.h +23 -0
  337. package/ios/internals/EnrichedMarkdownTextComponentDescriptor.h +19 -0
  338. package/ios/internals/EnrichedMarkdownTextShadowNode.h +45 -0
  339. package/ios/internals/EnrichedMarkdownTextShadowNode.mm +74 -0
  340. package/ios/internals/EnrichedMarkdownTextState.h +24 -0
  341. package/ios/internals/MeasurementCache.h +223 -0
  342. package/ios/internals/ShadowMeasurementUtils.h +135 -0
  343. package/ios/math/ENRMRaTeXBridge.swift +58 -0
  344. package/ios/parser/ENRMMarkdownParser.h +21 -0
  345. package/ios/parser/ENRMMarkdownParser.mm +50 -0
  346. package/ios/parser/MarkdownASTNode.h +47 -0
  347. package/ios/parser/MarkdownASTNode.m +32 -0
  348. package/ios/parser/MarkdownParserBridge.mm +161 -0
  349. package/ios/renderer/AttributedRenderer.h +11 -0
  350. package/ios/renderer/AttributedRenderer.m +153 -0
  351. package/ios/renderer/BaseRenderer.h +18 -0
  352. package/ios/renderer/BaseRenderer.m +16 -0
  353. package/ios/renderer/BaselineShiftTextAttributes.h +6 -0
  354. package/ios/renderer/BaselineShiftTextAttributes.m +22 -0
  355. package/ios/renderer/BlockquoteRenderer.h +6 -0
  356. package/ios/renderer/BlockquoteRenderer.m +148 -0
  357. package/ios/renderer/CodeBlockRenderer.h +9 -0
  358. package/ios/renderer/CodeBlockRenderer.m +90 -0
  359. package/ios/renderer/CodeRenderer.h +9 -0
  360. package/ios/renderer/CodeRenderer.m +64 -0
  361. package/ios/renderer/ENRMImageRenderer.h +9 -0
  362. package/ios/renderer/ENRMImageRenderer.m +65 -0
  363. package/ios/renderer/ENRMMathInlineRenderer.h +9 -0
  364. package/ios/renderer/ENRMMathInlineRenderer.m +56 -0
  365. package/ios/renderer/ENRMSpoilerRenderer.h +5 -0
  366. package/ios/renderer/ENRMSpoilerRenderer.m +32 -0
  367. package/ios/renderer/EmphasisRenderer.h +5 -0
  368. package/ios/renderer/EmphasisRenderer.m +98 -0
  369. package/ios/renderer/HeadingRenderer.h +6 -0
  370. package/ios/renderer/HeadingRenderer.m +94 -0
  371. package/ios/renderer/HighlightRenderer.h +7 -0
  372. package/ios/renderer/HighlightRenderer.m +31 -0
  373. package/ios/renderer/LinkRenderer.h +6 -0
  374. package/ios/renderer/LinkRenderer.m +82 -0
  375. package/ios/renderer/ListItemRenderer.h +12 -0
  376. package/ios/renderer/ListItemRenderer.m +175 -0
  377. package/ios/renderer/ListRenderer.h +13 -0
  378. package/ios/renderer/ListRenderer.m +70 -0
  379. package/ios/renderer/NodeRenderer.h +8 -0
  380. package/ios/renderer/ParagraphRenderer.h +6 -0
  381. package/ios/renderer/ParagraphRenderer.m +70 -0
  382. package/ios/renderer/RenderContext.h +118 -0
  383. package/ios/renderer/RenderContext.m +337 -0
  384. package/ios/renderer/RendererFactory.h +12 -0
  385. package/ios/renderer/RendererFactory.m +147 -0
  386. package/ios/renderer/StrikethroughRenderer.h +5 -0
  387. package/ios/renderer/StrikethroughRenderer.m +28 -0
  388. package/ios/renderer/StrongRenderer.h +5 -0
  389. package/ios/renderer/StrongRenderer.m +86 -0
  390. package/ios/renderer/SubscriptRenderer.h +5 -0
  391. package/ios/renderer/SubscriptRenderer.m +22 -0
  392. package/ios/renderer/SuperscriptRenderer.h +5 -0
  393. package/ios/renderer/SuperscriptRenderer.m +22 -0
  394. package/ios/renderer/TextRenderer.h +6 -0
  395. package/ios/renderer/TextRenderer.m +16 -0
  396. package/ios/renderer/ThematicBreakRenderer.h +4 -0
  397. package/ios/renderer/ThematicBreakRenderer.m +40 -0
  398. package/ios/renderer/UnderlineRenderer.h +4 -0
  399. package/ios/renderer/UnderlineRenderer.m +27 -0
  400. package/ios/styles/ENRMFontSlot.h +12 -0
  401. package/ios/styles/ENRMFontSlot.m +24 -0
  402. package/ios/styles/StyleConfig.h +407 -0
  403. package/ios/styles/StyleConfig.mm +2515 -0
  404. package/ios/utils/AccessibilityInfo.h +35 -0
  405. package/ios/utils/AccessibilityInfo.m +24 -0
  406. package/ios/utils/BlockquoteBorder.h +20 -0
  407. package/ios/utils/BlockquoteBorder.m +97 -0
  408. package/ios/utils/CodeBackground.h +19 -0
  409. package/ios/utils/CodeBackground.m +197 -0
  410. package/ios/utils/CodeBlockBackground.h +17 -0
  411. package/ios/utils/CodeBlockBackground.m +89 -0
  412. package/ios/utils/ContextMenuUtils.h +76 -0
  413. package/ios/utils/ContextMenuUtils.mm +73 -0
  414. package/ios/utils/ENRMAsyncRenderCoordinator.h +24 -0
  415. package/ios/utils/ENRMAsyncRenderCoordinator.m +37 -0
  416. package/ios/utils/ENRMFeatureFlags.h +12 -0
  417. package/ios/utils/ENRMImageDownloader.h +16 -0
  418. package/ios/utils/ENRMImageDownloader.m +108 -0
  419. package/ios/utils/ENRMMenuAction.h +27 -0
  420. package/ios/utils/ENRMMenuAction.m +33 -0
  421. package/ios/utils/ENRMParticleOverlayView.h +12 -0
  422. package/ios/utils/ENRMParticleOverlayView.m +159 -0
  423. package/ios/utils/ENRMSolidOverlayView.h +12 -0
  424. package/ios/utils/ENRMSolidOverlayView.m +25 -0
  425. package/ios/utils/ENRMSpoilerCapable.h +15 -0
  426. package/ios/utils/ENRMSpoilerOverlayManager.h +21 -0
  427. package/ios/utils/ENRMSpoilerOverlayManager.m +181 -0
  428. package/ios/utils/ENRMSpoilerOverlayView.h +49 -0
  429. package/ios/utils/ENRMSpoilerOverlayView.m +144 -0
  430. package/ios/utils/ENRMSpoilerTapUtils.h +25 -0
  431. package/ios/utils/ENRMSpoilerTapUtils.m +68 -0
  432. package/ios/utils/ENRMTailFadeInAnimator.h +16 -0
  433. package/ios/utils/ENRMTailFadeInAnimator.m +161 -0
  434. package/ios/utils/ENRMTextHitTest.h +23 -0
  435. package/ios/utils/ENRMTextHitTest.m +20 -0
  436. package/ios/utils/ENRMTextInteractionUtils.h +20 -0
  437. package/ios/utils/ENRMTextInteractionUtils.m +15 -0
  438. package/ios/utils/ENRMTextRenderer.h +30 -0
  439. package/ios/utils/ENRMTextRenderer.m +38 -0
  440. package/ios/utils/ENRMTextViewSetup.h +78 -0
  441. package/ios/utils/ENRMUIKit.h +418 -0
  442. package/ios/utils/EditMenuUtils+macOS.m +60 -0
  443. package/ios/utils/EditMenuUtils.h +35 -0
  444. package/ios/utils/EditMenuUtils.m +119 -0
  445. package/ios/utils/FontScaleObserver.h +10 -0
  446. package/ios/utils/FontScaleObserver.m +55 -0
  447. package/ios/utils/FontUtils.h +30 -0
  448. package/ios/utils/FontUtils.m +47 -0
  449. package/ios/utils/HTMLGenerator.h +25 -0
  450. package/ios/utils/HTMLGenerator.m +1019 -0
  451. package/ios/utils/HeightUpdateUtils.h +25 -0
  452. package/ios/utils/LastElementUtils.h +53 -0
  453. package/ios/utils/LinkTapUtils.h +24 -0
  454. package/ios/utils/LinkTapUtils.m +32 -0
  455. package/ios/utils/ListMarkerDrawer.h +15 -0
  456. package/ios/utils/ListMarkerDrawer.m +212 -0
  457. package/ios/utils/MarkdownASTSerializer.h +24 -0
  458. package/ios/utils/MarkdownASTSerializer.m +114 -0
  459. package/ios/utils/MarkdownAccessibilityElementBuilder.h +41 -0
  460. package/ios/utils/MarkdownAccessibilityElementBuilder.m +450 -0
  461. package/ios/utils/MarkdownExtractor.h +17 -0
  462. package/ios/utils/MarkdownExtractor.m +355 -0
  463. package/ios/utils/ParagraphStyleUtils.h +53 -0
  464. package/ios/utils/ParagraphStyleUtils.m +349 -0
  465. package/ios/utils/PasteboardUtils.h +48 -0
  466. package/ios/utils/PasteboardUtils.m +162 -0
  467. package/ios/utils/RTFExportUtils.h +24 -0
  468. package/ios/utils/RTFExportUtils.m +297 -0
  469. package/ios/utils/RenderedMarkdownSegment.h +49 -0
  470. package/ios/utils/RenderedMarkdownSegment.m +130 -0
  471. package/ios/utils/RuntimeKeys.h +38 -0
  472. package/ios/utils/RuntimeKeys.m +11 -0
  473. package/ios/utils/SegmentReconciler.h +32 -0
  474. package/ios/utils/SegmentReconciler.m +118 -0
  475. package/ios/utils/SegmentRenderer.h +24 -0
  476. package/ios/utils/SegmentRenderer.m +88 -0
  477. package/ios/utils/SegmentViewRegistry.h +36 -0
  478. package/ios/utils/SegmentViewRegistry.m +67 -0
  479. package/ios/utils/SelectionColorUtils.h +14 -0
  480. package/ios/utils/StreamingMarkdownFilter.h +22 -0
  481. package/ios/utils/StreamingMarkdownFilter.m +165 -0
  482. package/ios/utils/StylePropsUtils.h +1146 -0
  483. package/ios/utils/TaskListTapUtils.h +43 -0
  484. package/ios/utils/TaskListTapUtils.m +227 -0
  485. package/ios/utils/TextViewLayoutManager.h +14 -0
  486. package/ios/utils/TextViewLayoutManager.mm +113 -0
  487. package/ios/views/ENRMContextMenuTextView+macOS.h +17 -0
  488. package/ios/views/ENRMContextMenuTextView+macOS.m +97 -0
  489. package/ios/views/ENRMMathContainerView.h +20 -0
  490. package/ios/views/ENRMMathContainerView.m +227 -0
  491. package/ios/views/ENRMTableGridView.h +36 -0
  492. package/ios/views/ENRMTableGridView.m +98 -0
  493. package/ios/views/EnrichedMarkdownInternalText.h +42 -0
  494. package/ios/views/EnrichedMarkdownInternalText.m +161 -0
  495. package/ios/views/TableContainerView.h +39 -0
  496. package/ios/views/TableContainerView.m +686 -0
  497. package/lib/module/EnrichedMarkdownNativeComponent.ts +429 -0
  498. package/lib/module/EnrichedMarkdownTextInput.js +310 -0
  499. package/lib/module/EnrichedMarkdownTextInput.js.map +1 -0
  500. package/lib/module/EnrichedMarkdownTextInputNativeComponent.ts +364 -0
  501. package/lib/module/EnrichedMarkdownTextNativeComponent.ts +428 -0
  502. package/lib/module/index.js +5 -0
  503. package/lib/module/index.js.map +1 -0
  504. package/lib/module/index.web.js +4 -0
  505. package/lib/module/index.web.js.map +1 -0
  506. package/lib/module/linkVariantUtils.js +28 -0
  507. package/lib/module/linkVariantUtils.js.map +1 -0
  508. package/lib/module/native/EnrichedMarkdownText.js +158 -0
  509. package/lib/module/native/EnrichedMarkdownText.js.map +1 -0
  510. package/lib/module/normalizeMarkdownStyle.js +337 -0
  511. package/lib/module/normalizeMarkdownStyle.js.map +1 -0
  512. package/lib/module/normalizeMarkdownStyle.web.js +264 -0
  513. package/lib/module/normalizeMarkdownStyle.web.js.map +1 -0
  514. package/lib/module/normalizeMarkdownTextInputStyle.js +146 -0
  515. package/lib/module/normalizeMarkdownTextInputStyle.js.map +1 -0
  516. package/lib/module/package.json +1 -0
  517. package/lib/module/plugin/withAndroidMath.js +20 -0
  518. package/lib/module/plugin/withAndroidMath.js.map +1 -0
  519. package/lib/module/plugin/withIosMath.js +23 -0
  520. package/lib/module/plugin/withIosMath.js.map +1 -0
  521. package/lib/module/plugin/withReactNativeEnrichedMarkdown.js +16 -0
  522. package/lib/module/plugin/withReactNativeEnrichedMarkdown.js.map +1 -0
  523. package/lib/module/styleUtils.js +64 -0
  524. package/lib/module/styleUtils.js.map +1 -0
  525. package/lib/module/types/MarkdownStyle.js +2 -0
  526. package/lib/module/types/MarkdownStyle.js.map +1 -0
  527. package/lib/module/types/MarkdownStyleInternal.js +2 -0
  528. package/lib/module/types/MarkdownStyleInternal.js.map +1 -0
  529. package/lib/module/types/MarkdownTextProps.js +4 -0
  530. package/lib/module/types/MarkdownTextProps.js.map +1 -0
  531. package/lib/module/types/MarkdownTextProps.web.js +4 -0
  532. package/lib/module/types/MarkdownTextProps.web.js.map +1 -0
  533. package/lib/module/types/events.js +2 -0
  534. package/lib/module/types/events.js.map +1 -0
  535. package/lib/module/utils/regexParser.js +43 -0
  536. package/lib/module/utils/regexParser.js.map +1 -0
  537. package/lib/module/web/EnrichedMarkdownText.js +120 -0
  538. package/lib/module/web/EnrichedMarkdownText.js.map +1 -0
  539. package/lib/module/web/globalStyles.js +10 -0
  540. package/lib/module/web/globalStyles.js.map +1 -0
  541. package/lib/module/web/injectStyle.js +20 -0
  542. package/lib/module/web/injectStyle.js.map +1 -0
  543. package/lib/module/web/katex.js +22 -0
  544. package/lib/module/web/katex.js.map +1 -0
  545. package/lib/module/web/parseMarkdown.js +35 -0
  546. package/lib/module/web/parseMarkdown.js.map +1 -0
  547. package/lib/module/web/renderers/BlockRenderers.js +115 -0
  548. package/lib/module/web/renderers/BlockRenderers.js.map +1 -0
  549. package/lib/module/web/renderers/InlineRenderers.js +160 -0
  550. package/lib/module/web/renderers/InlineRenderers.js.map +1 -0
  551. package/lib/module/web/renderers/KaTeXRenderer.js +43 -0
  552. package/lib/module/web/renderers/KaTeXRenderer.js.map +1 -0
  553. package/lib/module/web/renderers/ListRenderers.js +92 -0
  554. package/lib/module/web/renderers/ListRenderers.js.map +1 -0
  555. package/lib/module/web/renderers/TableRenderers.js +77 -0
  556. package/lib/module/web/renderers/TableRenderers.js.map +1 -0
  557. package/lib/module/web/renderers/index.js +49 -0
  558. package/lib/module/web/renderers/index.js.map +1 -0
  559. package/lib/module/web/styles.js +454 -0
  560. package/lib/module/web/styles.js.map +1 -0
  561. package/lib/module/web/types.js +4 -0
  562. package/lib/module/web/types.js.map +1 -0
  563. package/lib/module/web/utils.js +56 -0
  564. package/lib/module/web/utils.js.map +1 -0
  565. package/lib/module/web/wasm/md4c.d.js +4 -0
  566. package/lib/module/web/wasm/md4c.d.js.map +1 -0
  567. package/lib/module/web/wasm/md4c.js +0 -0
  568. package/lib/module/web/wasm/md4c.js.map +1 -0
  569. package/lib/typescript/package.json +1 -0
  570. package/lib/typescript/src/EnrichedMarkdownNativeComponent.d.ts +384 -0
  571. package/lib/typescript/src/EnrichedMarkdownNativeComponent.d.ts.map +1 -0
  572. package/lib/typescript/src/EnrichedMarkdownTextInput.d.ts +173 -0
  573. package/lib/typescript/src/EnrichedMarkdownTextInput.d.ts.map +1 -0
  574. package/lib/typescript/src/EnrichedMarkdownTextInputNativeComponent.d.ts +285 -0
  575. package/lib/typescript/src/EnrichedMarkdownTextInputNativeComponent.d.ts.map +1 -0
  576. package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts +384 -0
  577. package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts.map +1 -0
  578. package/lib/typescript/src/index.d.ts +6 -0
  579. package/lib/typescript/src/index.d.ts.map +1 -0
  580. package/lib/typescript/src/index.web.d.ts +5 -0
  581. package/lib/typescript/src/index.web.d.ts.map +1 -0
  582. package/lib/typescript/src/linkVariantUtils.d.ts +5 -0
  583. package/lib/typescript/src/linkVariantUtils.d.ts.map +1 -0
  584. package/lib/typescript/src/native/EnrichedMarkdownText.d.ts +9 -0
  585. package/lib/typescript/src/native/EnrichedMarkdownText.d.ts.map +1 -0
  586. package/lib/typescript/src/normalizeMarkdownStyle.d.ts +4 -0
  587. package/lib/typescript/src/normalizeMarkdownStyle.d.ts.map +1 -0
  588. package/lib/typescript/src/normalizeMarkdownStyle.web.d.ts +4 -0
  589. package/lib/typescript/src/normalizeMarkdownStyle.web.d.ts.map +1 -0
  590. package/lib/typescript/src/normalizeMarkdownTextInputStyle.d.ts +48 -0
  591. package/lib/typescript/src/normalizeMarkdownTextInputStyle.d.ts.map +1 -0
  592. package/lib/typescript/src/plugin/withAndroidMath.d.ts +5 -0
  593. package/lib/typescript/src/plugin/withAndroidMath.d.ts.map +1 -0
  594. package/lib/typescript/src/plugin/withIosMath.d.ts +5 -0
  595. package/lib/typescript/src/plugin/withIosMath.d.ts.map +1 -0
  596. package/lib/typescript/src/plugin/withReactNativeEnrichedMarkdown.d.ts +6 -0
  597. package/lib/typescript/src/plugin/withReactNativeEnrichedMarkdown.d.ts.map +1 -0
  598. package/lib/typescript/src/styleUtils.d.ts +6 -0
  599. package/lib/typescript/src/styleUtils.d.ts.map +1 -0
  600. package/lib/typescript/src/types/MarkdownStyle.d.ts +300 -0
  601. package/lib/typescript/src/types/MarkdownStyle.d.ts.map +1 -0
  602. package/lib/typescript/src/types/MarkdownStyleInternal.d.ts +178 -0
  603. package/lib/typescript/src/types/MarkdownStyleInternal.d.ts.map +1 -0
  604. package/lib/typescript/src/types/MarkdownTextProps.d.ts +249 -0
  605. package/lib/typescript/src/types/MarkdownTextProps.d.ts.map +1 -0
  606. package/lib/typescript/src/types/MarkdownTextProps.web.d.ts +83 -0
  607. package/lib/typescript/src/types/MarkdownTextProps.web.d.ts.map +1 -0
  608. package/lib/typescript/src/types/events.d.ts +29 -0
  609. package/lib/typescript/src/types/events.d.ts.map +1 -0
  610. package/lib/typescript/src/utils/regexParser.d.ts +3 -0
  611. package/lib/typescript/src/utils/regexParser.d.ts.map +1 -0
  612. package/lib/typescript/src/web/EnrichedMarkdownText.d.ts +4 -0
  613. package/lib/typescript/src/web/EnrichedMarkdownText.d.ts.map +1 -0
  614. package/lib/typescript/src/web/globalStyles.d.ts +3 -0
  615. package/lib/typescript/src/web/globalStyles.d.ts.map +1 -0
  616. package/lib/typescript/src/web/injectStyle.d.ts +9 -0
  617. package/lib/typescript/src/web/injectStyle.d.ts.map +1 -0
  618. package/lib/typescript/src/web/katex.d.ts +11 -0
  619. package/lib/typescript/src/web/katex.d.ts.map +1 -0
  620. package/lib/typescript/src/web/parseMarkdown.d.ts +4 -0
  621. package/lib/typescript/src/web/parseMarkdown.d.ts.map +1 -0
  622. package/lib/typescript/src/web/renderers/BlockRenderers.d.ts +3 -0
  623. package/lib/typescript/src/web/renderers/BlockRenderers.d.ts.map +1 -0
  624. package/lib/typescript/src/web/renderers/InlineRenderers.d.ts +3 -0
  625. package/lib/typescript/src/web/renderers/InlineRenderers.d.ts.map +1 -0
  626. package/lib/typescript/src/web/renderers/KaTeXRenderer.d.ts +11 -0
  627. package/lib/typescript/src/web/renderers/KaTeXRenderer.d.ts.map +1 -0
  628. package/lib/typescript/src/web/renderers/ListRenderers.d.ts +3 -0
  629. package/lib/typescript/src/web/renderers/ListRenderers.d.ts.map +1 -0
  630. package/lib/typescript/src/web/renderers/TableRenderers.d.ts +3 -0
  631. package/lib/typescript/src/web/renderers/TableRenderers.d.ts.map +1 -0
  632. package/lib/typescript/src/web/renderers/index.d.ts +14 -0
  633. package/lib/typescript/src/web/renderers/index.d.ts.map +1 -0
  634. package/lib/typescript/src/web/styles.d.ts +49 -0
  635. package/lib/typescript/src/web/styles.d.ts.map +1 -0
  636. package/lib/typescript/src/web/types.d.ts +51 -0
  637. package/lib/typescript/src/web/types.d.ts.map +1 -0
  638. package/lib/typescript/src/web/utils.d.ts +21 -0
  639. package/lib/typescript/src/web/utils.d.ts.map +1 -0
  640. package/package.json +125 -0
  641. package/react-native.config.js +17 -0
  642. package/src/EnrichedMarkdownNativeComponent.ts +429 -0
  643. package/src/EnrichedMarkdownTextInput.tsx +547 -0
  644. package/src/EnrichedMarkdownTextInputNativeComponent.ts +364 -0
  645. package/src/EnrichedMarkdownTextNativeComponent.ts +428 -0
  646. package/src/index.tsx +28 -0
  647. package/src/index.web.tsx +8 -0
  648. package/src/linkVariantUtils.ts +42 -0
  649. package/src/native/EnrichedMarkdownText.tsx +187 -0
  650. package/src/normalizeMarkdownStyle.ts +310 -0
  651. package/src/normalizeMarkdownStyle.web.ts +281 -0
  652. package/src/normalizeMarkdownTextInputStyle.ts +242 -0
  653. package/src/plugin/withAndroidMath.ts +24 -0
  654. package/src/plugin/withIosMath.ts +35 -0
  655. package/src/plugin/withReactNativeEnrichedMarkdown.ts +17 -0
  656. package/src/styleUtils.ts +98 -0
  657. package/src/types/MarkdownStyle.ts +326 -0
  658. package/src/types/MarkdownStyleInternal.ts +208 -0
  659. package/src/types/MarkdownTextProps.ts +253 -0
  660. package/src/types/MarkdownTextProps.web.ts +90 -0
  661. package/src/types/events.ts +32 -0
  662. package/src/utils/regexParser.ts +54 -0
  663. package/src/web/EnrichedMarkdownText.tsx +154 -0
  664. package/src/web/globalStyles.ts +15 -0
  665. package/src/web/injectStyle.ts +17 -0
  666. package/src/web/katex.ts +31 -0
  667. package/src/web/parseMarkdown.ts +78 -0
  668. package/src/web/renderers/BlockRenderers.tsx +90 -0
  669. package/src/web/renderers/InlineRenderers.tsx +121 -0
  670. package/src/web/renderers/KaTeXRenderer.tsx +49 -0
  671. package/src/web/renderers/ListRenderers.tsx +110 -0
  672. package/src/web/renderers/TableRenderers.tsx +61 -0
  673. package/src/web/renderers/index.tsx +75 -0
  674. package/src/web/styles.ts +549 -0
  675. package/src/web/types.ts +92 -0
  676. package/src/web/utils.ts +52 -0
  677. package/src/web/wasm/md4c.d.ts +21 -0
  678. package/src/web/wasm/md4c.js +0 -0
@@ -0,0 +1,1146 @@
1
+ #pragma once
2
+ #import "ENRMUIKit.h"
3
+
4
+ /**
5
+ * StylePropsHelper.h
6
+ *
7
+ * C++ template that maps codegen-generated markdownStyle props → StyleConfig setters.
8
+ * Both EnrichedMarkdownText and EnrichedMarkdown share identical markdownStyle fields
9
+ * but codegen produces two distinct C++ struct types. A template lets us write the
10
+ * mapping once and instantiate it for each type.
11
+ */
12
+
13
+ #import "ParagraphStyleUtils.h"
14
+ #import "StyleConfig.h"
15
+ #import <React/RCTConversions.h>
16
+
17
+ template <typename MarkdownStyle>
18
+ BOOL applyMarkdownStyleToConfig(StyleConfig *config, const MarkdownStyle &newStyle, const MarkdownStyle &oldStyle)
19
+ {
20
+ BOOL changed = NO;
21
+
22
+ // ── Paragraph ──────────────────────────────────────────────────────────────
23
+
24
+ if (newStyle.paragraph.fontSize != oldStyle.paragraph.fontSize) {
25
+ [config setParagraphFontSize:newStyle.paragraph.fontSize];
26
+ changed = YES;
27
+ }
28
+
29
+ if (newStyle.paragraph.fontFamily != oldStyle.paragraph.fontFamily) {
30
+ if (!newStyle.paragraph.fontFamily.empty()) {
31
+ NSString *fontFamily = [[NSString alloc] initWithUTF8String:newStyle.paragraph.fontFamily.c_str()];
32
+ [config setParagraphFontFamily:fontFamily];
33
+ } else {
34
+ [config setParagraphFontFamily:nullptr];
35
+ }
36
+ changed = YES;
37
+ }
38
+
39
+ if (newStyle.paragraph.fontWeight != oldStyle.paragraph.fontWeight) {
40
+ if (!newStyle.paragraph.fontWeight.empty()) {
41
+ NSString *fontWeight = [[NSString alloc] initWithUTF8String:newStyle.paragraph.fontWeight.c_str()];
42
+ [config setParagraphFontWeight:fontWeight];
43
+ } else {
44
+ [config setParagraphFontWeight:nullptr];
45
+ }
46
+ changed = YES;
47
+ }
48
+
49
+ if (newStyle.paragraph.color != oldStyle.paragraph.color) {
50
+ if (newStyle.paragraph.color) {
51
+ RCTUIColor *paragraphColor = RCTUIColorFromSharedColor(newStyle.paragraph.color);
52
+ [config setParagraphColor:paragraphColor];
53
+ } else {
54
+ [config setParagraphColor:nullptr];
55
+ }
56
+ changed = YES;
57
+ }
58
+
59
+ if (newStyle.paragraph.marginTop != oldStyle.paragraph.marginTop) {
60
+ [config setParagraphMarginTop:newStyle.paragraph.marginTop];
61
+ changed = YES;
62
+ }
63
+
64
+ if (newStyle.paragraph.marginBottom != oldStyle.paragraph.marginBottom) {
65
+ [config setParagraphMarginBottom:newStyle.paragraph.marginBottom];
66
+ changed = YES;
67
+ }
68
+
69
+ if (newStyle.paragraph.lineHeight != oldStyle.paragraph.lineHeight) {
70
+ [config setParagraphLineHeight:newStyle.paragraph.lineHeight];
71
+ changed = YES;
72
+ }
73
+
74
+ if (newStyle.paragraph.textAlign != oldStyle.paragraph.textAlign) {
75
+ [config setParagraphTextAlign:textAlignmentFromString(@(newStyle.paragraph.textAlign.c_str()))];
76
+ changed = YES;
77
+ }
78
+
79
+ // ── H1 ─────────────────────────────────────────────────────────────────────
80
+
81
+ if (newStyle.h1.fontSize != oldStyle.h1.fontSize) {
82
+ [config setH1FontSize:newStyle.h1.fontSize];
83
+ changed = YES;
84
+ }
85
+
86
+ if (newStyle.h1.fontFamily != oldStyle.h1.fontFamily) {
87
+ if (!newStyle.h1.fontFamily.empty()) {
88
+ NSString *fontFamily = [[NSString alloc] initWithUTF8String:newStyle.h1.fontFamily.c_str()];
89
+ [config setH1FontFamily:fontFamily];
90
+ } else {
91
+ [config setH1FontFamily:nullptr];
92
+ }
93
+ changed = YES;
94
+ }
95
+
96
+ if (newStyle.h1.fontWeight != oldStyle.h1.fontWeight) {
97
+ if (!newStyle.h1.fontWeight.empty()) {
98
+ NSString *fontWeight = [[NSString alloc] initWithUTF8String:newStyle.h1.fontWeight.c_str()];
99
+ [config setH1FontWeight:fontWeight];
100
+ } else {
101
+ [config setH1FontWeight:nullptr];
102
+ }
103
+ changed = YES;
104
+ }
105
+
106
+ if (newStyle.h1.color != oldStyle.h1.color) {
107
+ if (newStyle.h1.color) {
108
+ RCTUIColor *h1Color = RCTUIColorFromSharedColor(newStyle.h1.color);
109
+ [config setH1Color:h1Color];
110
+ } else {
111
+ [config setH1Color:nullptr];
112
+ }
113
+ changed = YES;
114
+ }
115
+
116
+ if (newStyle.h1.marginTop != oldStyle.h1.marginTop) {
117
+ [config setH1MarginTop:newStyle.h1.marginTop];
118
+ changed = YES;
119
+ }
120
+
121
+ if (newStyle.h1.marginBottom != oldStyle.h1.marginBottom) {
122
+ [config setH1MarginBottom:newStyle.h1.marginBottom];
123
+ changed = YES;
124
+ }
125
+
126
+ if (newStyle.h1.lineHeight != oldStyle.h1.lineHeight) {
127
+ [config setH1LineHeight:newStyle.h1.lineHeight];
128
+ changed = YES;
129
+ }
130
+
131
+ if (newStyle.h1.textAlign != oldStyle.h1.textAlign) {
132
+ [config setH1TextAlign:textAlignmentFromString(@(newStyle.h1.textAlign.c_str()))];
133
+ changed = YES;
134
+ }
135
+
136
+ // ── H2 ─────────────────────────────────────────────────────────────────────
137
+
138
+ if (newStyle.h2.fontSize != oldStyle.h2.fontSize) {
139
+ [config setH2FontSize:newStyle.h2.fontSize];
140
+ changed = YES;
141
+ }
142
+
143
+ if (newStyle.h2.fontFamily != oldStyle.h2.fontFamily) {
144
+ if (!newStyle.h2.fontFamily.empty()) {
145
+ NSString *fontFamily = [[NSString alloc] initWithUTF8String:newStyle.h2.fontFamily.c_str()];
146
+ [config setH2FontFamily:fontFamily];
147
+ } else {
148
+ [config setH2FontFamily:nullptr];
149
+ }
150
+ changed = YES;
151
+ }
152
+
153
+ if (newStyle.h2.fontWeight != oldStyle.h2.fontWeight) {
154
+ if (!newStyle.h2.fontWeight.empty()) {
155
+ NSString *fontWeight = [[NSString alloc] initWithUTF8String:newStyle.h2.fontWeight.c_str()];
156
+ [config setH2FontWeight:fontWeight];
157
+ } else {
158
+ [config setH2FontWeight:nullptr];
159
+ }
160
+ changed = YES;
161
+ }
162
+
163
+ if (newStyle.h2.color != oldStyle.h2.color) {
164
+ if (newStyle.h2.color) {
165
+ RCTUIColor *h2Color = RCTUIColorFromSharedColor(newStyle.h2.color);
166
+ [config setH2Color:h2Color];
167
+ } else {
168
+ [config setH2Color:nullptr];
169
+ }
170
+ changed = YES;
171
+ }
172
+
173
+ if (newStyle.h2.marginTop != oldStyle.h2.marginTop) {
174
+ [config setH2MarginTop:newStyle.h2.marginTop];
175
+ changed = YES;
176
+ }
177
+
178
+ if (newStyle.h2.marginBottom != oldStyle.h2.marginBottom) {
179
+ [config setH2MarginBottom:newStyle.h2.marginBottom];
180
+ changed = YES;
181
+ }
182
+
183
+ if (newStyle.h2.lineHeight != oldStyle.h2.lineHeight) {
184
+ [config setH2LineHeight:newStyle.h2.lineHeight];
185
+ changed = YES;
186
+ }
187
+
188
+ if (newStyle.h2.textAlign != oldStyle.h2.textAlign) {
189
+ [config setH2TextAlign:textAlignmentFromString(@(newStyle.h2.textAlign.c_str()))];
190
+ changed = YES;
191
+ }
192
+
193
+ // ── H3 ─────────────────────────────────────────────────────────────────────
194
+
195
+ if (newStyle.h3.fontSize != oldStyle.h3.fontSize) {
196
+ [config setH3FontSize:newStyle.h3.fontSize];
197
+ changed = YES;
198
+ }
199
+
200
+ if (newStyle.h3.fontFamily != oldStyle.h3.fontFamily) {
201
+ if (!newStyle.h3.fontFamily.empty()) {
202
+ NSString *fontFamily = [[NSString alloc] initWithUTF8String:newStyle.h3.fontFamily.c_str()];
203
+ [config setH3FontFamily:fontFamily];
204
+ } else {
205
+ [config setH3FontFamily:nullptr];
206
+ }
207
+ changed = YES;
208
+ }
209
+
210
+ if (newStyle.h3.fontWeight != oldStyle.h3.fontWeight) {
211
+ if (!newStyle.h3.fontWeight.empty()) {
212
+ NSString *fontWeight = [[NSString alloc] initWithUTF8String:newStyle.h3.fontWeight.c_str()];
213
+ [config setH3FontWeight:fontWeight];
214
+ } else {
215
+ [config setH3FontWeight:nullptr];
216
+ }
217
+ changed = YES;
218
+ }
219
+
220
+ if (newStyle.h3.color != oldStyle.h3.color) {
221
+ if (newStyle.h3.color) {
222
+ RCTUIColor *h3Color = RCTUIColorFromSharedColor(newStyle.h3.color);
223
+ [config setH3Color:h3Color];
224
+ } else {
225
+ [config setH3Color:nullptr];
226
+ }
227
+ changed = YES;
228
+ }
229
+
230
+ if (newStyle.h3.marginTop != oldStyle.h3.marginTop) {
231
+ [config setH3MarginTop:newStyle.h3.marginTop];
232
+ changed = YES;
233
+ }
234
+
235
+ if (newStyle.h3.marginBottom != oldStyle.h3.marginBottom) {
236
+ [config setH3MarginBottom:newStyle.h3.marginBottom];
237
+ changed = YES;
238
+ }
239
+
240
+ if (newStyle.h3.lineHeight != oldStyle.h3.lineHeight) {
241
+ [config setH3LineHeight:newStyle.h3.lineHeight];
242
+ changed = YES;
243
+ }
244
+
245
+ if (newStyle.h3.textAlign != oldStyle.h3.textAlign) {
246
+ [config setH3TextAlign:textAlignmentFromString(@(newStyle.h3.textAlign.c_str()))];
247
+ changed = YES;
248
+ }
249
+
250
+ // ── H4 ─────────────────────────────────────────────────────────────────────
251
+
252
+ if (newStyle.h4.fontSize != oldStyle.h4.fontSize) {
253
+ [config setH4FontSize:newStyle.h4.fontSize];
254
+ changed = YES;
255
+ }
256
+
257
+ if (newStyle.h4.fontFamily != oldStyle.h4.fontFamily) {
258
+ if (!newStyle.h4.fontFamily.empty()) {
259
+ NSString *fontFamily = [[NSString alloc] initWithUTF8String:newStyle.h4.fontFamily.c_str()];
260
+ [config setH4FontFamily:fontFamily];
261
+ } else {
262
+ [config setH4FontFamily:nullptr];
263
+ }
264
+ changed = YES;
265
+ }
266
+
267
+ if (newStyle.h4.fontWeight != oldStyle.h4.fontWeight) {
268
+ if (!newStyle.h4.fontWeight.empty()) {
269
+ NSString *fontWeight = [[NSString alloc] initWithUTF8String:newStyle.h4.fontWeight.c_str()];
270
+ [config setH4FontWeight:fontWeight];
271
+ } else {
272
+ [config setH4FontWeight:nullptr];
273
+ }
274
+ changed = YES;
275
+ }
276
+
277
+ if (newStyle.h4.color != oldStyle.h4.color) {
278
+ if (newStyle.h4.color) {
279
+ RCTUIColor *h4Color = RCTUIColorFromSharedColor(newStyle.h4.color);
280
+ [config setH4Color:h4Color];
281
+ } else {
282
+ [config setH4Color:nullptr];
283
+ }
284
+ changed = YES;
285
+ }
286
+
287
+ if (newStyle.h4.marginTop != oldStyle.h4.marginTop) {
288
+ [config setH4MarginTop:newStyle.h4.marginTop];
289
+ changed = YES;
290
+ }
291
+
292
+ if (newStyle.h4.marginBottom != oldStyle.h4.marginBottom) {
293
+ [config setH4MarginBottom:newStyle.h4.marginBottom];
294
+ changed = YES;
295
+ }
296
+
297
+ if (newStyle.h4.lineHeight != oldStyle.h4.lineHeight) {
298
+ [config setH4LineHeight:newStyle.h4.lineHeight];
299
+ changed = YES;
300
+ }
301
+
302
+ if (newStyle.h4.textAlign != oldStyle.h4.textAlign) {
303
+ [config setH4TextAlign:textAlignmentFromString(@(newStyle.h4.textAlign.c_str()))];
304
+ changed = YES;
305
+ }
306
+
307
+ // ── H5 ─────────────────────────────────────────────────────────────────────
308
+
309
+ if (newStyle.h5.fontSize != oldStyle.h5.fontSize) {
310
+ [config setH5FontSize:newStyle.h5.fontSize];
311
+ changed = YES;
312
+ }
313
+
314
+ if (newStyle.h5.fontFamily != oldStyle.h5.fontFamily) {
315
+ if (!newStyle.h5.fontFamily.empty()) {
316
+ NSString *fontFamily = [[NSString alloc] initWithUTF8String:newStyle.h5.fontFamily.c_str()];
317
+ [config setH5FontFamily:fontFamily];
318
+ } else {
319
+ [config setH5FontFamily:nullptr];
320
+ }
321
+ changed = YES;
322
+ }
323
+
324
+ if (newStyle.h5.fontWeight != oldStyle.h5.fontWeight) {
325
+ if (!newStyle.h5.fontWeight.empty()) {
326
+ NSString *fontWeight = [[NSString alloc] initWithUTF8String:newStyle.h5.fontWeight.c_str()];
327
+ [config setH5FontWeight:fontWeight];
328
+ } else {
329
+ [config setH5FontWeight:nullptr];
330
+ }
331
+ changed = YES;
332
+ }
333
+
334
+ if (newStyle.h5.color != oldStyle.h5.color) {
335
+ if (newStyle.h5.color) {
336
+ RCTUIColor *h5Color = RCTUIColorFromSharedColor(newStyle.h5.color);
337
+ [config setH5Color:h5Color];
338
+ } else {
339
+ [config setH5Color:nullptr];
340
+ }
341
+ changed = YES;
342
+ }
343
+
344
+ if (newStyle.h5.marginTop != oldStyle.h5.marginTop) {
345
+ [config setH5MarginTop:newStyle.h5.marginTop];
346
+ changed = YES;
347
+ }
348
+
349
+ if (newStyle.h5.marginBottom != oldStyle.h5.marginBottom) {
350
+ [config setH5MarginBottom:newStyle.h5.marginBottom];
351
+ changed = YES;
352
+ }
353
+
354
+ if (newStyle.h5.lineHeight != oldStyle.h5.lineHeight) {
355
+ [config setH5LineHeight:newStyle.h5.lineHeight];
356
+ changed = YES;
357
+ }
358
+
359
+ if (newStyle.h5.textAlign != oldStyle.h5.textAlign) {
360
+ [config setH5TextAlign:textAlignmentFromString(@(newStyle.h5.textAlign.c_str()))];
361
+ changed = YES;
362
+ }
363
+
364
+ // ── H6 ─────────────────────────────────────────────────────────────────────
365
+
366
+ if (newStyle.h6.fontSize != oldStyle.h6.fontSize) {
367
+ [config setH6FontSize:newStyle.h6.fontSize];
368
+ changed = YES;
369
+ }
370
+
371
+ if (newStyle.h6.fontFamily != oldStyle.h6.fontFamily) {
372
+ if (!newStyle.h6.fontFamily.empty()) {
373
+ NSString *fontFamily = [[NSString alloc] initWithUTF8String:newStyle.h6.fontFamily.c_str()];
374
+ [config setH6FontFamily:fontFamily];
375
+ } else {
376
+ [config setH6FontFamily:nullptr];
377
+ }
378
+ changed = YES;
379
+ }
380
+
381
+ if (newStyle.h6.fontWeight != oldStyle.h6.fontWeight) {
382
+ if (!newStyle.h6.fontWeight.empty()) {
383
+ NSString *fontWeight = [[NSString alloc] initWithUTF8String:newStyle.h6.fontWeight.c_str()];
384
+ [config setH6FontWeight:fontWeight];
385
+ } else {
386
+ [config setH6FontWeight:nullptr];
387
+ }
388
+ changed = YES;
389
+ }
390
+
391
+ if (newStyle.h6.color != oldStyle.h6.color) {
392
+ if (newStyle.h6.color) {
393
+ RCTUIColor *h6Color = RCTUIColorFromSharedColor(newStyle.h6.color);
394
+ [config setH6Color:h6Color];
395
+ } else {
396
+ [config setH6Color:nullptr];
397
+ }
398
+ changed = YES;
399
+ }
400
+
401
+ if (newStyle.h6.marginTop != oldStyle.h6.marginTop) {
402
+ [config setH6MarginTop:newStyle.h6.marginTop];
403
+ changed = YES;
404
+ }
405
+
406
+ if (newStyle.h6.marginBottom != oldStyle.h6.marginBottom) {
407
+ [config setH6MarginBottom:newStyle.h6.marginBottom];
408
+ changed = YES;
409
+ }
410
+
411
+ if (newStyle.h6.lineHeight != oldStyle.h6.lineHeight) {
412
+ [config setH6LineHeight:newStyle.h6.lineHeight];
413
+ changed = YES;
414
+ }
415
+
416
+ if (newStyle.h6.textAlign != oldStyle.h6.textAlign) {
417
+ [config setH6TextAlign:textAlignmentFromString(@(newStyle.h6.textAlign.c_str()))];
418
+ changed = YES;
419
+ }
420
+
421
+ // ── Blockquote ─────────────────────────────────────────────────────────────
422
+
423
+ if (newStyle.blockquote.fontSize != oldStyle.blockquote.fontSize) {
424
+ [config setBlockquoteFontSize:newStyle.blockquote.fontSize];
425
+ changed = YES;
426
+ }
427
+
428
+ if (newStyle.blockquote.fontFamily != oldStyle.blockquote.fontFamily) {
429
+ NSString *fontFamily = [[NSString alloc] initWithUTF8String:newStyle.blockquote.fontFamily.c_str()];
430
+ [config setBlockquoteFontFamily:fontFamily];
431
+ changed = YES;
432
+ }
433
+
434
+ if (newStyle.blockquote.fontWeight != oldStyle.blockquote.fontWeight) {
435
+ NSString *fontWeight = [[NSString alloc] initWithUTF8String:newStyle.blockquote.fontWeight.c_str()];
436
+ [config setBlockquoteFontWeight:fontWeight];
437
+ changed = YES;
438
+ }
439
+
440
+ if (newStyle.blockquote.color != oldStyle.blockquote.color) {
441
+ RCTUIColor *blockquoteColor = RCTUIColorFromSharedColor(newStyle.blockquote.color);
442
+ [config setBlockquoteColor:blockquoteColor];
443
+ changed = YES;
444
+ }
445
+
446
+ if (newStyle.blockquote.marginTop != oldStyle.blockquote.marginTop) {
447
+ [config setBlockquoteMarginTop:newStyle.blockquote.marginTop];
448
+ changed = YES;
449
+ }
450
+
451
+ if (newStyle.blockquote.marginBottom != oldStyle.blockquote.marginBottom) {
452
+ [config setBlockquoteMarginBottom:newStyle.blockquote.marginBottom];
453
+ changed = YES;
454
+ }
455
+
456
+ if (newStyle.blockquote.lineHeight != oldStyle.blockquote.lineHeight) {
457
+ [config setBlockquoteLineHeight:newStyle.blockquote.lineHeight];
458
+ changed = YES;
459
+ }
460
+
461
+ if (newStyle.blockquote.borderColor != oldStyle.blockquote.borderColor) {
462
+ RCTUIColor *blockquoteBorderColor = RCTUIColorFromSharedColor(newStyle.blockquote.borderColor);
463
+ [config setBlockquoteBorderColor:blockquoteBorderColor];
464
+ changed = YES;
465
+ }
466
+
467
+ if (newStyle.blockquote.borderWidth != oldStyle.blockquote.borderWidth) {
468
+ [config setBlockquoteBorderWidth:newStyle.blockquote.borderWidth];
469
+ changed = YES;
470
+ }
471
+
472
+ if (newStyle.blockquote.gapWidth != oldStyle.blockquote.gapWidth) {
473
+ [config setBlockquoteGapWidth:newStyle.blockquote.gapWidth];
474
+ changed = YES;
475
+ }
476
+
477
+ if (newStyle.blockquote.backgroundColor != oldStyle.blockquote.backgroundColor) {
478
+ RCTUIColor *blockquoteBackgroundColor = RCTUIColorFromSharedColor(newStyle.blockquote.backgroundColor);
479
+ [config setBlockquoteBackgroundColor:blockquoteBackgroundColor];
480
+ changed = YES;
481
+ }
482
+
483
+ // ── Link ───────────────────────────────────────────────────────────────────
484
+
485
+ if (newStyle.link.fontFamily != oldStyle.link.fontFamily) {
486
+ if (!newStyle.link.fontFamily.empty()) {
487
+ NSString *fontFamily = [[NSString alloc] initWithUTF8String:newStyle.link.fontFamily.c_str()];
488
+ [config setLinkFontFamily:fontFamily];
489
+ } else {
490
+ [config setLinkFontFamily:nullptr];
491
+ }
492
+ changed = YES;
493
+ }
494
+
495
+ if (newStyle.link.color != oldStyle.link.color) {
496
+ RCTUIColor *linkColor = RCTUIColorFromSharedColor(newStyle.link.color);
497
+ [config setLinkColor:linkColor];
498
+ changed = YES;
499
+ }
500
+
501
+ {
502
+ BOOL newUnderline = newStyle.link.underline ? YES : NO;
503
+ if (newStyle.link.underline != oldStyle.link.underline || [config linkUnderline] != newUnderline) {
504
+ [config setLinkUnderline:newUnderline];
505
+ changed = YES;
506
+ }
507
+ }
508
+
509
+ if (newStyle.link.backgroundColor != oldStyle.link.backgroundColor) {
510
+ RCTUIColor *color = RCTUIColorFromSharedColor(newStyle.link.backgroundColor);
511
+ [config setLinkBackgroundColor:CGColorGetAlpha(color.CGColor) > 0 ? color : nil];
512
+ changed = YES;
513
+ }
514
+
515
+ {
516
+ BOOL linkVariantsChanged = newStyle.linkVariants.size() != oldStyle.linkVariants.size();
517
+ if (!linkVariantsChanged) {
518
+ for (size_t i = 0; i < newStyle.linkVariants.size(); i++) {
519
+ const auto &newVariant = newStyle.linkVariants[i];
520
+ const auto &oldVariant = oldStyle.linkVariants[i];
521
+ if (newVariant.pattern != oldVariant.pattern || newVariant.color != oldVariant.color ||
522
+ newVariant.underline != oldVariant.underline || newVariant.backgroundColor != oldVariant.backgroundColor) {
523
+ linkVariantsChanged = YES;
524
+ break;
525
+ }
526
+ }
527
+ }
528
+ if (linkVariantsChanged) {
529
+ NSMutableArray<LinkVariantConfig *> *variants = [NSMutableArray array];
530
+ for (const auto &entry : newStyle.linkVariants) {
531
+ LinkVariantConfig *variant = [[LinkVariantConfig alloc] init];
532
+ variant.pattern = [[NSString alloc] initWithUTF8String:entry.pattern.c_str()];
533
+ variant.color = RCTUIColorFromSharedColor(entry.color);
534
+ variant.underline = entry.underline;
535
+ RCTUIColor *backgroundColor = RCTUIColorFromSharedColor(entry.backgroundColor);
536
+ variant.backgroundColor = CGColorGetAlpha(backgroundColor.CGColor) > 0 ? backgroundColor : nil;
537
+ [variants addObject:variant];
538
+ }
539
+ [config setLinkVariants:variants];
540
+ changed = YES;
541
+ }
542
+ }
543
+
544
+ // ── Strong ─────────────────────────────────────────────────────────────────
545
+
546
+ if (newStyle.strong.fontFamily != oldStyle.strong.fontFamily) {
547
+ if (!newStyle.strong.fontFamily.empty()) {
548
+ NSString *fontFamily = [[NSString alloc] initWithUTF8String:newStyle.strong.fontFamily.c_str()];
549
+ [config setStrongFontFamily:fontFamily];
550
+ } else {
551
+ [config setStrongFontFamily:nullptr];
552
+ }
553
+ changed = YES;
554
+ }
555
+
556
+ if (newStyle.strong.fontWeight != oldStyle.strong.fontWeight) {
557
+ if (!newStyle.strong.fontWeight.empty()) {
558
+ NSString *fontWeight = [[NSString alloc] initWithUTF8String:newStyle.strong.fontWeight.c_str()];
559
+ [config setStrongFontWeight:fontWeight];
560
+ } else {
561
+ [config setStrongFontWeight:nullptr];
562
+ }
563
+ changed = YES;
564
+ }
565
+
566
+ if (newStyle.strong.color != oldStyle.strong.color) {
567
+ if (newStyle.strong.color) {
568
+ RCTUIColor *strongColor = RCTUIColorFromSharedColor(newStyle.strong.color);
569
+ [config setStrongColor:strongColor];
570
+ } else {
571
+ [config setStrongColor:nullptr];
572
+ }
573
+ changed = YES;
574
+ }
575
+
576
+ // ── Emphasis ───────────────────────────────────────────────────────────────
577
+
578
+ if (newStyle.em.fontFamily != oldStyle.em.fontFamily) {
579
+ if (!newStyle.em.fontFamily.empty()) {
580
+ NSString *fontFamily = [[NSString alloc] initWithUTF8String:newStyle.em.fontFamily.c_str()];
581
+ [config setEmphasisFontFamily:fontFamily];
582
+ } else {
583
+ [config setEmphasisFontFamily:nullptr];
584
+ }
585
+ changed = YES;
586
+ }
587
+
588
+ if (newStyle.em.fontStyle != oldStyle.em.fontStyle) {
589
+ if (!newStyle.em.fontStyle.empty()) {
590
+ NSString *fontStyle = [[NSString alloc] initWithUTF8String:newStyle.em.fontStyle.c_str()];
591
+ [config setEmphasisFontStyle:fontStyle];
592
+ } else {
593
+ [config setEmphasisFontStyle:nullptr];
594
+ }
595
+ changed = YES;
596
+ }
597
+
598
+ if (newStyle.em.color != oldStyle.em.color) {
599
+ if (newStyle.em.color) {
600
+ RCTUIColor *emphasisColor = RCTUIColorFromSharedColor(newStyle.em.color);
601
+ [config setEmphasisColor:emphasisColor];
602
+ } else {
603
+ [config setEmphasisColor:nullptr];
604
+ }
605
+ changed = YES;
606
+ }
607
+
608
+ // ── Strikethrough ──────────────────────────────────────────────────────────
609
+
610
+ if (newStyle.strikethrough.color != oldStyle.strikethrough.color) {
611
+ RCTUIColor *strikethroughColor = RCTUIColorFromSharedColor(newStyle.strikethrough.color);
612
+ [config setStrikethroughColor:strikethroughColor];
613
+ changed = YES;
614
+ }
615
+
616
+ // ── Highlight ──────────────────────────────────────────────────────────────
617
+
618
+ if (newStyle.highlight.color != oldStyle.highlight.color) {
619
+ RCTUIColor *highlightColor = RCTUIColorFromSharedColor(newStyle.highlight.color);
620
+ [config setHighlightColor:highlightColor];
621
+ changed = YES;
622
+ }
623
+
624
+ if (newStyle.highlight.backgroundColor != oldStyle.highlight.backgroundColor) {
625
+ RCTUIColor *highlightBackgroundColor = RCTUIColorFromSharedColor(newStyle.highlight.backgroundColor);
626
+ [config setHighlightBackgroundColor:highlightBackgroundColor];
627
+ changed = YES;
628
+ }
629
+
630
+ // ── Underline ──────────────────────────────────────────────────────────────
631
+
632
+ if (newStyle.underline.color != oldStyle.underline.color) {
633
+ RCTUIColor *underlineColor = RCTUIColorFromSharedColor(newStyle.underline.color);
634
+ [config setUnderlineColor:underlineColor];
635
+ changed = YES;
636
+ }
637
+
638
+ // ── Code ───────────────────────────────────────────────────────────────────
639
+
640
+ if (newStyle.code.fontFamily != oldStyle.code.fontFamily) {
641
+ if (!newStyle.code.fontFamily.empty()) {
642
+ NSString *fontFamily = [[NSString alloc] initWithUTF8String:newStyle.code.fontFamily.c_str()];
643
+ [config setCodeFontFamily:fontFamily];
644
+ } else {
645
+ [config setCodeFontFamily:nullptr];
646
+ }
647
+ changed = YES;
648
+ }
649
+
650
+ if (newStyle.code.fontSize != oldStyle.code.fontSize) {
651
+ [config setCodeFontSize:newStyle.code.fontSize];
652
+ changed = YES;
653
+ }
654
+
655
+ if (newStyle.code.color != oldStyle.code.color) {
656
+ if (newStyle.code.color) {
657
+ RCTUIColor *codeColor = RCTUIColorFromSharedColor(newStyle.code.color);
658
+ [config setCodeColor:codeColor];
659
+ } else {
660
+ [config setCodeColor:nullptr];
661
+ }
662
+ changed = YES;
663
+ }
664
+
665
+ if (newStyle.code.backgroundColor != oldStyle.code.backgroundColor) {
666
+ if (newStyle.code.backgroundColor) {
667
+ RCTUIColor *codeBackgroundColor = RCTUIColorFromSharedColor(newStyle.code.backgroundColor);
668
+ [config setCodeBackgroundColor:codeBackgroundColor];
669
+ } else {
670
+ [config setCodeBackgroundColor:nullptr];
671
+ }
672
+ changed = YES;
673
+ }
674
+
675
+ if (newStyle.code.borderColor != oldStyle.code.borderColor) {
676
+ if (newStyle.code.borderColor) {
677
+ RCTUIColor *codeBorderColor = RCTUIColorFromSharedColor(newStyle.code.borderColor);
678
+ [config setCodeBorderColor:codeBorderColor];
679
+ } else {
680
+ [config setCodeBorderColor:nullptr];
681
+ }
682
+ changed = YES;
683
+ }
684
+
685
+ // ── Image ──────────────────────────────────────────────────────────────────
686
+
687
+ if (newStyle.image.height != oldStyle.image.height) {
688
+ [config setImageHeight:newStyle.image.height];
689
+ changed = YES;
690
+ }
691
+
692
+ if (newStyle.image.borderRadius != oldStyle.image.borderRadius) {
693
+ [config setImageBorderRadius:newStyle.image.borderRadius];
694
+ changed = YES;
695
+ }
696
+
697
+ if (newStyle.image.marginTop != oldStyle.image.marginTop) {
698
+ [config setImageMarginTop:newStyle.image.marginTop];
699
+ changed = YES;
700
+ }
701
+
702
+ if (newStyle.image.marginBottom != oldStyle.image.marginBottom) {
703
+ [config setImageMarginBottom:newStyle.image.marginBottom];
704
+ changed = YES;
705
+ }
706
+
707
+ // ── Inline Image ───────────────────────────────────────────────────────────
708
+
709
+ if (newStyle.inlineImage.size != oldStyle.inlineImage.size) {
710
+ [config setInlineImageSize:newStyle.inlineImage.size];
711
+ changed = YES;
712
+ }
713
+
714
+ // ── List ───────────────────────────────────────────────────────────────────
715
+
716
+ if (newStyle.list.fontSize != oldStyle.list.fontSize) {
717
+ [config setListStyleFontSize:newStyle.list.fontSize];
718
+ changed = YES;
719
+ }
720
+
721
+ if (newStyle.list.fontFamily != oldStyle.list.fontFamily) {
722
+ NSString *fontFamily = [[NSString alloc] initWithUTF8String:newStyle.list.fontFamily.c_str()];
723
+ [config setListStyleFontFamily:fontFamily];
724
+ changed = YES;
725
+ }
726
+
727
+ if (newStyle.list.fontWeight != oldStyle.list.fontWeight) {
728
+ NSString *fontWeight = [[NSString alloc] initWithUTF8String:newStyle.list.fontWeight.c_str()];
729
+ [config setListStyleFontWeight:fontWeight];
730
+ changed = YES;
731
+ }
732
+
733
+ if (newStyle.list.color != oldStyle.list.color) {
734
+ RCTUIColor *listColor = RCTUIColorFromSharedColor(newStyle.list.color);
735
+ [config setListStyleColor:listColor];
736
+ changed = YES;
737
+ }
738
+
739
+ if (newStyle.list.marginTop != oldStyle.list.marginTop) {
740
+ [config setListStyleMarginTop:newStyle.list.marginTop];
741
+ changed = YES;
742
+ }
743
+
744
+ if (newStyle.list.marginBottom != oldStyle.list.marginBottom) {
745
+ [config setListStyleMarginBottom:newStyle.list.marginBottom];
746
+ changed = YES;
747
+ }
748
+
749
+ if (newStyle.list.lineHeight != oldStyle.list.lineHeight) {
750
+ [config setListStyleLineHeight:newStyle.list.lineHeight];
751
+ changed = YES;
752
+ }
753
+
754
+ if (newStyle.list.bulletColor != oldStyle.list.bulletColor) {
755
+ RCTUIColor *bulletColor = RCTUIColorFromSharedColor(newStyle.list.bulletColor);
756
+ [config setListStyleBulletColor:bulletColor];
757
+ changed = YES;
758
+ }
759
+
760
+ if (newStyle.list.bulletSize != oldStyle.list.bulletSize) {
761
+ [config setListStyleBulletSize:newStyle.list.bulletSize];
762
+ changed = YES;
763
+ }
764
+
765
+ if (newStyle.list.markerMinWidth != oldStyle.list.markerMinWidth) {
766
+ [config setListStyleMarkerMinWidth:newStyle.list.markerMinWidth];
767
+ changed = YES;
768
+ }
769
+
770
+ if (newStyle.list.markerColor != oldStyle.list.markerColor) {
771
+ RCTUIColor *markerColor = RCTUIColorFromSharedColor(newStyle.list.markerColor);
772
+ [config setListStyleMarkerColor:markerColor];
773
+ changed = YES;
774
+ }
775
+
776
+ if (newStyle.list.markerFontWeight != oldStyle.list.markerFontWeight) {
777
+ NSString *markerFontWeight = [[NSString alloc] initWithUTF8String:newStyle.list.markerFontWeight.c_str()];
778
+ [config setListStyleMarkerFontWeight:markerFontWeight];
779
+ changed = YES;
780
+ }
781
+
782
+ if (newStyle.list.gapWidth != oldStyle.list.gapWidth) {
783
+ [config setListStyleGapWidth:newStyle.list.gapWidth];
784
+ changed = YES;
785
+ }
786
+
787
+ if (newStyle.list.marginLeft != oldStyle.list.marginLeft) {
788
+ [config setListStyleMarginLeft:newStyle.list.marginLeft];
789
+ changed = YES;
790
+ }
791
+
792
+ // ── Code Block ─────────────────────────────────────────────────────────────
793
+
794
+ if (newStyle.codeBlock.fontSize != oldStyle.codeBlock.fontSize) {
795
+ [config setCodeBlockFontSize:newStyle.codeBlock.fontSize];
796
+ changed = YES;
797
+ }
798
+
799
+ if (newStyle.codeBlock.fontFamily != oldStyle.codeBlock.fontFamily) {
800
+ NSString *fontFamily = [[NSString alloc] initWithUTF8String:newStyle.codeBlock.fontFamily.c_str()];
801
+ [config setCodeBlockFontFamily:fontFamily];
802
+ changed = YES;
803
+ }
804
+
805
+ if (newStyle.codeBlock.fontWeight != oldStyle.codeBlock.fontWeight) {
806
+ NSString *fontWeight = [[NSString alloc] initWithUTF8String:newStyle.codeBlock.fontWeight.c_str()];
807
+ [config setCodeBlockFontWeight:fontWeight];
808
+ changed = YES;
809
+ }
810
+
811
+ if (newStyle.codeBlock.color != oldStyle.codeBlock.color) {
812
+ RCTUIColor *codeBlockColor = RCTUIColorFromSharedColor(newStyle.codeBlock.color);
813
+ [config setCodeBlockColor:codeBlockColor];
814
+ changed = YES;
815
+ }
816
+
817
+ if (newStyle.codeBlock.marginTop != oldStyle.codeBlock.marginTop) {
818
+ [config setCodeBlockMarginTop:newStyle.codeBlock.marginTop];
819
+ changed = YES;
820
+ }
821
+
822
+ if (newStyle.codeBlock.marginBottom != oldStyle.codeBlock.marginBottom) {
823
+ [config setCodeBlockMarginBottom:newStyle.codeBlock.marginBottom];
824
+ changed = YES;
825
+ }
826
+
827
+ if (newStyle.codeBlock.lineHeight != oldStyle.codeBlock.lineHeight) {
828
+ [config setCodeBlockLineHeight:newStyle.codeBlock.lineHeight];
829
+ changed = YES;
830
+ }
831
+
832
+ if (newStyle.codeBlock.backgroundColor != oldStyle.codeBlock.backgroundColor) {
833
+ RCTUIColor *codeBlockBackgroundColor = RCTUIColorFromSharedColor(newStyle.codeBlock.backgroundColor);
834
+ [config setCodeBlockBackgroundColor:codeBlockBackgroundColor];
835
+ changed = YES;
836
+ }
837
+
838
+ if (newStyle.codeBlock.borderColor != oldStyle.codeBlock.borderColor) {
839
+ RCTUIColor *codeBlockBorderColor = RCTUIColorFromSharedColor(newStyle.codeBlock.borderColor);
840
+ [config setCodeBlockBorderColor:codeBlockBorderColor];
841
+ changed = YES;
842
+ }
843
+
844
+ if (newStyle.codeBlock.borderRadius != oldStyle.codeBlock.borderRadius) {
845
+ [config setCodeBlockBorderRadius:newStyle.codeBlock.borderRadius];
846
+ changed = YES;
847
+ }
848
+
849
+ if (newStyle.codeBlock.borderWidth != oldStyle.codeBlock.borderWidth) {
850
+ [config setCodeBlockBorderWidth:newStyle.codeBlock.borderWidth];
851
+ changed = YES;
852
+ }
853
+
854
+ if (newStyle.codeBlock.padding != oldStyle.codeBlock.padding) {
855
+ [config setCodeBlockPadding:newStyle.codeBlock.padding];
856
+ changed = YES;
857
+ }
858
+
859
+ // ── Thematic Break ─────────────────────────────────────────────────────────
860
+
861
+ if (newStyle.thematicBreak.color != oldStyle.thematicBreak.color) {
862
+ RCTUIColor *thematicBreakColor = RCTUIColorFromSharedColor(newStyle.thematicBreak.color);
863
+ [config setThematicBreakColor:thematicBreakColor];
864
+ changed = YES;
865
+ }
866
+
867
+ if (newStyle.thematicBreak.height != oldStyle.thematicBreak.height) {
868
+ [config setThematicBreakHeight:newStyle.thematicBreak.height];
869
+ changed = YES;
870
+ }
871
+
872
+ if (newStyle.thematicBreak.marginTop != oldStyle.thematicBreak.marginTop) {
873
+ [config setThematicBreakMarginTop:newStyle.thematicBreak.marginTop];
874
+ changed = YES;
875
+ }
876
+
877
+ if (newStyle.thematicBreak.marginBottom != oldStyle.thematicBreak.marginBottom) {
878
+ [config setThematicBreakMarginBottom:newStyle.thematicBreak.marginBottom];
879
+ changed = YES;
880
+ }
881
+
882
+ // ── Table ───────────────────────────────────────────────────────────────────
883
+
884
+ if (newStyle.table.fontSize != oldStyle.table.fontSize) {
885
+ [config setTableFontSize:newStyle.table.fontSize];
886
+ changed = YES;
887
+ }
888
+
889
+ if (newStyle.table.fontFamily != oldStyle.table.fontFamily) {
890
+ if (!newStyle.table.fontFamily.empty()) {
891
+ NSString *fontFamily = [[NSString alloc] initWithUTF8String:newStyle.table.fontFamily.c_str()];
892
+ [config setTableFontFamily:fontFamily];
893
+ } else {
894
+ [config setTableFontFamily:nullptr];
895
+ }
896
+ changed = YES;
897
+ }
898
+
899
+ if (newStyle.table.fontWeight != oldStyle.table.fontWeight) {
900
+ if (!newStyle.table.fontWeight.empty()) {
901
+ NSString *fontWeight = [[NSString alloc] initWithUTF8String:newStyle.table.fontWeight.c_str()];
902
+ [config setTableFontWeight:fontWeight];
903
+ } else {
904
+ [config setTableFontWeight:nullptr];
905
+ }
906
+ changed = YES;
907
+ }
908
+
909
+ if (newStyle.table.color != oldStyle.table.color) {
910
+ if (newStyle.table.color) {
911
+ RCTUIColor *color = RCTUIColorFromSharedColor(newStyle.table.color);
912
+ [config setTableColor:color];
913
+ } else {
914
+ [config setTableColor:nullptr];
915
+ }
916
+ changed = YES;
917
+ }
918
+
919
+ if (newStyle.table.marginTop != oldStyle.table.marginTop) {
920
+ [config setTableMarginTop:newStyle.table.marginTop];
921
+ changed = YES;
922
+ }
923
+
924
+ if (newStyle.table.marginBottom != oldStyle.table.marginBottom) {
925
+ [config setTableMarginBottom:newStyle.table.marginBottom];
926
+ changed = YES;
927
+ }
928
+
929
+ if (newStyle.table.lineHeight != oldStyle.table.lineHeight) {
930
+ [config setTableLineHeight:newStyle.table.lineHeight];
931
+ changed = YES;
932
+ }
933
+
934
+ if (newStyle.table.headerFontFamily != oldStyle.table.headerFontFamily) {
935
+ if (!newStyle.table.headerFontFamily.empty()) {
936
+ NSString *fontFamily = [[NSString alloc] initWithUTF8String:newStyle.table.headerFontFamily.c_str()];
937
+ [config setTableHeaderFontFamily:fontFamily];
938
+ } else {
939
+ [config setTableHeaderFontFamily:nullptr];
940
+ }
941
+ changed = YES;
942
+ }
943
+
944
+ if (newStyle.table.headerBackgroundColor != oldStyle.table.headerBackgroundColor) {
945
+ RCTUIColor *color = RCTUIColorFromSharedColor(newStyle.table.headerBackgroundColor);
946
+ [config setTableHeaderBackgroundColor:color];
947
+ changed = YES;
948
+ }
949
+
950
+ if (newStyle.table.headerTextColor != oldStyle.table.headerTextColor) {
951
+ RCTUIColor *color = RCTUIColorFromSharedColor(newStyle.table.headerTextColor);
952
+ [config setTableHeaderTextColor:color];
953
+ changed = YES;
954
+ }
955
+
956
+ if (newStyle.table.rowEvenBackgroundColor != oldStyle.table.rowEvenBackgroundColor) {
957
+ RCTUIColor *color = RCTUIColorFromSharedColor(newStyle.table.rowEvenBackgroundColor);
958
+ [config setTableRowEvenBackgroundColor:color];
959
+ changed = YES;
960
+ }
961
+
962
+ if (newStyle.table.rowOddBackgroundColor != oldStyle.table.rowOddBackgroundColor) {
963
+ RCTUIColor *color = RCTUIColorFromSharedColor(newStyle.table.rowOddBackgroundColor);
964
+ [config setTableRowOddBackgroundColor:color];
965
+ changed = YES;
966
+ }
967
+
968
+ if (newStyle.table.borderColor != oldStyle.table.borderColor) {
969
+ RCTUIColor *color = RCTUIColorFromSharedColor(newStyle.table.borderColor);
970
+ [config setTableBorderColor:color];
971
+ changed = YES;
972
+ }
973
+
974
+ if (newStyle.table.borderWidth != oldStyle.table.borderWidth) {
975
+ [config setTableBorderWidth:newStyle.table.borderWidth];
976
+ changed = YES;
977
+ }
978
+
979
+ if (newStyle.table.borderRadius != oldStyle.table.borderRadius) {
980
+ [config setTableBorderRadius:newStyle.table.borderRadius];
981
+ changed = YES;
982
+ }
983
+
984
+ if (newStyle.table.cellPaddingHorizontal != oldStyle.table.cellPaddingHorizontal) {
985
+ [config setTableCellPaddingHorizontal:newStyle.table.cellPaddingHorizontal];
986
+ changed = YES;
987
+ }
988
+
989
+ if (newStyle.table.cellPaddingVertical != oldStyle.table.cellPaddingVertical) {
990
+ [config setTableCellPaddingVertical:newStyle.table.cellPaddingVertical];
991
+ changed = YES;
992
+ }
993
+
994
+ // ── Task List ───────────────────────────────────────────────────────────────
995
+
996
+ if (newStyle.taskList.checkedColor != oldStyle.taskList.checkedColor) {
997
+ RCTUIColor *color = RCTUIColorFromSharedColor(newStyle.taskList.checkedColor);
998
+ [config setTaskListCheckedColor:color];
999
+ changed = YES;
1000
+ }
1001
+
1002
+ if (newStyle.taskList.borderColor != oldStyle.taskList.borderColor) {
1003
+ RCTUIColor *color = RCTUIColorFromSharedColor(newStyle.taskList.borderColor);
1004
+ [config setTaskListBorderColor:color];
1005
+ changed = YES;
1006
+ }
1007
+
1008
+ if (newStyle.taskList.checkboxSize != oldStyle.taskList.checkboxSize) {
1009
+ [config setTaskListCheckboxSize:newStyle.taskList.checkboxSize];
1010
+ changed = YES;
1011
+ }
1012
+
1013
+ if (newStyle.taskList.checkboxBorderRadius != oldStyle.taskList.checkboxBorderRadius) {
1014
+ [config setTaskListCheckboxBorderRadius:newStyle.taskList.checkboxBorderRadius];
1015
+ changed = YES;
1016
+ }
1017
+
1018
+ if (newStyle.taskList.checkmarkColor != oldStyle.taskList.checkmarkColor) {
1019
+ RCTUIColor *color = RCTUIColorFromSharedColor(newStyle.taskList.checkmarkColor);
1020
+ [config setTaskListCheckmarkColor:color];
1021
+ changed = YES;
1022
+ }
1023
+
1024
+ if (newStyle.taskList.checkedTextColor != oldStyle.taskList.checkedTextColor) {
1025
+ if (newStyle.taskList.checkedTextColor) {
1026
+ RCTUIColor *color = RCTUIColorFromSharedColor(newStyle.taskList.checkedTextColor);
1027
+ [config setTaskListCheckedTextColor:color];
1028
+ } else {
1029
+ [config setTaskListCheckedTextColor:nullptr];
1030
+ }
1031
+ changed = YES;
1032
+ }
1033
+
1034
+ if (newStyle.taskList.checkedStrikethrough != oldStyle.taskList.checkedStrikethrough) {
1035
+ [config setTaskListCheckedStrikethrough:newStyle.taskList.checkedStrikethrough];
1036
+ changed = YES;
1037
+ }
1038
+
1039
+ // ── Math ───────────────────────────────────────────────────────────────────
1040
+
1041
+ if (newStyle.math.fontSize != oldStyle.math.fontSize) {
1042
+ [config setMathFontSize:newStyle.math.fontSize];
1043
+ changed = YES;
1044
+ }
1045
+
1046
+ if (newStyle.math.color != oldStyle.math.color) {
1047
+ if (newStyle.math.color) {
1048
+ RCTUIColor *color = RCTUIColorFromSharedColor(newStyle.math.color);
1049
+ [config setMathColor:color];
1050
+ } else {
1051
+ [config setMathColor:nullptr];
1052
+ }
1053
+ changed = YES;
1054
+ }
1055
+
1056
+ if (newStyle.math.backgroundColor != oldStyle.math.backgroundColor) {
1057
+ if (newStyle.math.backgroundColor) {
1058
+ RCTUIColor *color = RCTUIColorFromSharedColor(newStyle.math.backgroundColor);
1059
+ [config setMathBackgroundColor:color];
1060
+ } else {
1061
+ [config setMathBackgroundColor:nullptr];
1062
+ }
1063
+ changed = YES;
1064
+ }
1065
+
1066
+ if (newStyle.math.padding != oldStyle.math.padding) {
1067
+ [config setMathPadding:newStyle.math.padding];
1068
+ changed = YES;
1069
+ }
1070
+
1071
+ if (newStyle.math.marginTop != oldStyle.math.marginTop) {
1072
+ [config setMathMarginTop:newStyle.math.marginTop];
1073
+ changed = YES;
1074
+ }
1075
+
1076
+ if (newStyle.math.marginBottom != oldStyle.math.marginBottom) {
1077
+ [config setMathMarginBottom:newStyle.math.marginBottom];
1078
+ changed = YES;
1079
+ }
1080
+
1081
+ if (newStyle.math.textAlign != oldStyle.math.textAlign) {
1082
+ [config setMathTextAlign:@(newStyle.math.textAlign.c_str())];
1083
+ changed = YES;
1084
+ }
1085
+
1086
+ // ── Inline Math ───────────────────────────────────────────────────────────
1087
+
1088
+ if (newStyle.inlineMath.color != oldStyle.inlineMath.color) {
1089
+ if (newStyle.inlineMath.color) {
1090
+ RCTUIColor *color = RCTUIColorFromSharedColor(newStyle.inlineMath.color);
1091
+ [config setInlineMathColor:color];
1092
+ } else {
1093
+ [config setInlineMathColor:nullptr];
1094
+ }
1095
+ changed = YES;
1096
+ }
1097
+
1098
+ // ── Spoiler ─────────────────────────────────────────────────────────────
1099
+
1100
+ if (newStyle.spoiler.color != oldStyle.spoiler.color) {
1101
+ RCTUIColor *color = RCTUIColorFromSharedColor(newStyle.spoiler.color);
1102
+ [config setSpoilerColor:color];
1103
+ changed = YES;
1104
+ }
1105
+
1106
+ if (newStyle.spoiler.particles.density != oldStyle.spoiler.particles.density) {
1107
+ [config setSpoilerParticleDensity:newStyle.spoiler.particles.density];
1108
+ changed = YES;
1109
+ }
1110
+
1111
+ if (newStyle.spoiler.particles.speed != oldStyle.spoiler.particles.speed) {
1112
+ [config setSpoilerParticleSpeed:newStyle.spoiler.particles.speed];
1113
+ changed = YES;
1114
+ }
1115
+
1116
+ if (newStyle.spoiler.solid.borderRadius != oldStyle.spoiler.solid.borderRadius) {
1117
+ [config setSpoilerSolidBorderRadius:newStyle.spoiler.solid.borderRadius];
1118
+ changed = YES;
1119
+ }
1120
+
1121
+ // ── Superscript ──────────────────────────────────────────────────────────
1122
+
1123
+ if (newStyle.superscript.fontScale != oldStyle.superscript.fontScale) {
1124
+ [config setSuperscriptFontScale:newStyle.superscript.fontScale];
1125
+ changed = YES;
1126
+ }
1127
+
1128
+ if (newStyle.superscript.baselineOffsetScale != oldStyle.superscript.baselineOffsetScale) {
1129
+ [config setSuperscriptBaselineOffsetScale:newStyle.superscript.baselineOffsetScale];
1130
+ changed = YES;
1131
+ }
1132
+
1133
+ // ── Subscript ────────────────────────────────────────────────────────────
1134
+
1135
+ if (newStyle.subscript.fontScale != oldStyle.subscript.fontScale) {
1136
+ [config setSubscriptFontScale:newStyle.subscript.fontScale];
1137
+ changed = YES;
1138
+ }
1139
+
1140
+ if (newStyle.subscript.baselineOffsetScale != oldStyle.subscript.baselineOffsetScale) {
1141
+ [config setSubscriptBaselineOffsetScale:newStyle.subscript.baselineOffsetScale];
1142
+ changed = YES;
1143
+ }
1144
+
1145
+ return changed;
1146
+ }