react-native-enriched-markdown 0.1.1 → 0.2.0

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 (127) hide show
  1. package/README.md +80 -8
  2. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerDelegate.java +17 -2
  3. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerInterface.java +6 -1
  4. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.cpp +9 -0
  5. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.h +6 -0
  6. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.cpp +28 -3
  7. package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.h +225 -1
  8. package/android/src/main/cpp/jni-adapter.cpp +28 -11
  9. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownText.kt +132 -15
  10. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextLayoutManager.kt +1 -16
  11. package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextManager.kt +67 -13
  12. package/android/src/main/java/com/swmansion/enriched/markdown/MeasurementStore.kt +241 -21
  13. package/android/src/main/java/com/swmansion/enriched/markdown/accessibility/MarkdownAccessibilityHelper.kt +279 -0
  14. package/android/src/main/java/com/swmansion/enriched/markdown/events/LinkLongPressEvent.kt +23 -0
  15. package/android/src/main/java/com/swmansion/enriched/markdown/parser/MarkdownASTNode.kt +2 -0
  16. package/android/src/main/java/com/swmansion/enriched/markdown/parser/Parser.kt +17 -3
  17. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BlockquoteRenderer.kt +13 -18
  18. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/CodeBlockRenderer.kt +23 -24
  19. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/CodeRenderer.kt +1 -0
  20. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/DocumentRenderer.kt +2 -1
  21. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/EmphasisRenderer.kt +2 -1
  22. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/HeadingRenderer.kt +18 -2
  23. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ImageRenderer.kt +22 -6
  24. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/LineBreakRenderer.kt +1 -0
  25. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/LinkRenderer.kt +3 -2
  26. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListItemRenderer.kt +2 -1
  27. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListRenderer.kt +16 -9
  28. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/NodeRenderer.kt +5 -1
  29. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ParagraphRenderer.kt +23 -9
  30. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/Renderer.kt +24 -10
  31. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SpanStyleCache.kt +1 -0
  32. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/StrikethroughRenderer.kt +27 -0
  33. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/StrongRenderer.kt +2 -1
  34. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/TextRenderer.kt +1 -0
  35. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ThematicBreakRenderer.kt +1 -0
  36. package/android/src/main/java/com/swmansion/enriched/markdown/renderer/UnderlineRenderer.kt +27 -0
  37. package/android/src/main/java/com/swmansion/enriched/markdown/spans/ImageSpan.kt +1 -0
  38. package/android/src/main/java/com/swmansion/enriched/markdown/spans/LineHeightSpan.kt +8 -17
  39. package/android/src/main/java/com/swmansion/enriched/markdown/spans/LinkSpan.kt +19 -5
  40. package/android/src/main/java/com/swmansion/enriched/markdown/spans/MarginBottomSpan.kt +1 -1
  41. package/android/src/main/java/com/swmansion/enriched/markdown/spans/StrikethroughSpan.kt +12 -0
  42. package/android/src/main/java/com/swmansion/enriched/markdown/styles/BaseBlockStyle.kt +1 -0
  43. package/android/src/main/java/com/swmansion/enriched/markdown/styles/BlockquoteStyle.kt +3 -0
  44. package/android/src/main/java/com/swmansion/enriched/markdown/styles/CodeBlockStyle.kt +3 -0
  45. package/android/src/main/java/com/swmansion/enriched/markdown/styles/HeadingStyle.kt +5 -1
  46. package/android/src/main/java/com/swmansion/enriched/markdown/styles/ImageStyle.kt +3 -1
  47. package/android/src/main/java/com/swmansion/enriched/markdown/styles/ListStyle.kt +3 -0
  48. package/android/src/main/java/com/swmansion/enriched/markdown/styles/ParagraphStyle.kt +5 -1
  49. package/android/src/main/java/com/swmansion/enriched/markdown/styles/StrikethroughStyle.kt +17 -0
  50. package/android/src/main/java/com/swmansion/enriched/markdown/styles/StyleConfig.kt +32 -1
  51. package/android/src/main/java/com/swmansion/enriched/markdown/styles/StyleParser.kt +22 -5
  52. package/android/src/main/java/com/swmansion/enriched/markdown/styles/TextAlignment.kt +32 -0
  53. package/android/src/main/java/com/swmansion/enriched/markdown/styles/UnderlineStyle.kt +17 -0
  54. package/android/src/main/java/com/swmansion/enriched/markdown/utils/HTMLGenerator.kt +23 -5
  55. package/android/src/main/java/com/swmansion/enriched/markdown/utils/LinkLongPressMovementMethod.kt +121 -0
  56. package/android/src/main/java/com/swmansion/enriched/markdown/utils/MarkdownExtractor.kt +10 -0
  57. package/android/src/main/java/com/swmansion/enriched/markdown/utils/Utils.kt +58 -56
  58. package/android/src/main/jni/CMakeLists.txt +1 -13
  59. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextShadowNode.cpp +0 -13
  60. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextShadowNode.h +2 -14
  61. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/conversions.h +3 -0
  62. package/cpp/parser/MD4CParser.cpp +21 -8
  63. package/cpp/parser/MD4CParser.hpp +5 -1
  64. package/cpp/parser/MarkdownASTNode.hpp +2 -0
  65. package/ios/EnrichedMarkdownText.mm +356 -29
  66. package/ios/attachments/{ImageAttachment.h → EnrichedMarkdownImageAttachment.h} +1 -1
  67. package/ios/attachments/{ImageAttachment.m → EnrichedMarkdownImageAttachment.m} +4 -4
  68. package/ios/generated/EnrichedMarkdownTextSpec/EventEmitters.cpp +9 -0
  69. package/ios/generated/EnrichedMarkdownTextSpec/EventEmitters.h +6 -0
  70. package/ios/generated/EnrichedMarkdownTextSpec/Props.cpp +28 -3
  71. package/ios/generated/EnrichedMarkdownTextSpec/Props.h +225 -1
  72. package/ios/parser/MarkdownASTNode.h +2 -0
  73. package/ios/parser/MarkdownParser.h +9 -0
  74. package/ios/parser/MarkdownParser.mm +31 -2
  75. package/ios/parser/MarkdownParserBridge.mm +13 -3
  76. package/ios/renderer/AttributedRenderer.h +2 -0
  77. package/ios/renderer/AttributedRenderer.m +52 -19
  78. package/ios/renderer/BlockquoteRenderer.m +7 -6
  79. package/ios/renderer/CodeBlockRenderer.m +9 -8
  80. package/ios/renderer/HeadingRenderer.m +31 -24
  81. package/ios/renderer/ImageRenderer.m +31 -10
  82. package/ios/renderer/ListItemRenderer.m +51 -39
  83. package/ios/renderer/ListRenderer.m +21 -18
  84. package/ios/renderer/ParagraphRenderer.m +27 -16
  85. package/ios/renderer/RenderContext.h +17 -0
  86. package/ios/renderer/RenderContext.m +66 -2
  87. package/ios/renderer/RendererFactory.m +6 -0
  88. package/ios/renderer/StrikethroughRenderer.h +6 -0
  89. package/ios/renderer/StrikethroughRenderer.m +40 -0
  90. package/ios/renderer/UnderlineRenderer.h +6 -0
  91. package/ios/renderer/UnderlineRenderer.m +39 -0
  92. package/ios/styles/StyleConfig.h +46 -0
  93. package/ios/styles/StyleConfig.mm +351 -12
  94. package/ios/utils/AccessibilityInfo.h +35 -0
  95. package/ios/utils/AccessibilityInfo.m +24 -0
  96. package/ios/utils/CodeBlockBackground.m +4 -9
  97. package/ios/utils/FontUtils.h +5 -0
  98. package/ios/utils/FontUtils.m +14 -0
  99. package/ios/utils/HTMLGenerator.m +21 -7
  100. package/ios/utils/MarkdownAccessibilityElementBuilder.h +45 -0
  101. package/ios/utils/MarkdownAccessibilityElementBuilder.m +323 -0
  102. package/ios/utils/MarkdownExtractor.m +18 -5
  103. package/ios/utils/ParagraphStyleUtils.h +10 -2
  104. package/ios/utils/ParagraphStyleUtils.m +57 -2
  105. package/ios/utils/PasteboardUtils.h +1 -1
  106. package/ios/utils/PasteboardUtils.m +3 -3
  107. package/lib/module/EnrichedMarkdownText.js +33 -2
  108. package/lib/module/EnrichedMarkdownText.js.map +1 -1
  109. package/lib/module/EnrichedMarkdownTextNativeComponent.ts +83 -3
  110. package/lib/module/index.js +0 -1
  111. package/lib/module/index.js.map +1 -1
  112. package/lib/module/normalizeMarkdownStyle.js +58 -14
  113. package/lib/module/normalizeMarkdownStyle.js.map +1 -1
  114. package/lib/typescript/src/EnrichedMarkdownText.d.ts +85 -3
  115. package/lib/typescript/src/EnrichedMarkdownText.d.ts.map +1 -1
  116. package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts +75 -1
  117. package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts.map +1 -1
  118. package/lib/typescript/src/index.d.ts +2 -3
  119. package/lib/typescript/src/index.d.ts.map +1 -1
  120. package/lib/typescript/src/normalizeMarkdownStyle.d.ts.map +1 -1
  121. package/package.json +1 -1
  122. package/src/EnrichedMarkdownText.tsx +133 -5
  123. package/src/EnrichedMarkdownTextNativeComponent.ts +83 -3
  124. package/src/index.tsx +5 -2
  125. package/src/normalizeMarkdownStyle.ts +46 -0
  126. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextState.cpp +0 -9
  127. package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextState.h +0 -25
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- <img src="https://github.com/user-attachments/assets/76e00153-6ae6-4a1a-bbbb-a8f7646aa1b5" alt="react-native-enriched-markdown by Software Mansion" width="100%">
1
+ <img src="https://github.com/user-attachments/assets/922e57b6-98b7-4ad4-a270-838c7341d102" alt="react-native-enriched-markdown by Software Mansion" width="100%">
2
2
 
3
3
  # react-native-enriched-markdown
4
4
 
@@ -14,6 +14,7 @@
14
14
  - 🔗 Interactive link handling
15
15
  - 🖼️ Native image interactions (iOS: Copy, Save to Camera Roll)
16
16
  - 🌐 Native platform features (Translate, Look Up, Search Web, Share)
17
+ - 🗣️ Accessibility support (VoiceOver & TalkBack)
17
18
 
18
19
  Since 2012 [Software Mansion](https://swmansion.com) is a software agency with experience in building web and mobile apps. We are Core React Native Contributors and experts in dealing with all kinds of React Native issues.
19
20
  We can help you build your next dream product –
@@ -27,6 +28,7 @@ We can help you build your next dream product –
27
28
  - [Supported Markdown Elements](#supported-markdown-elements)
28
29
  - [Link Handling](#link-handling)
29
30
  - [Copy Options](#copy-options)
31
+ - [Accessibility](#accessibility)
30
32
  - [Styling Architecture](#styling-architecture)
31
33
  - [Customizing Styles](#customizing-styles)
32
34
  - [API Reference](#api-reference)
@@ -36,7 +38,7 @@ We can help you build your next dream product –
36
38
  ## Prerequisites
37
39
 
38
40
  - `react-native-enriched-markdown` currently supports only Android and iOS platforms
39
- - It works only with [the React Native New Architecture (Fabric)](https://reactnative.dev/architecture/landing-page) and supports following React Native releases: `0.81`, `0.82` and `0.83`
41
+ - It works only with [the React Native New Architecture (Fabric)](https://reactnative.dev/architecture/landing-page) and supports following React Native releases: `0.81`, `0.82`, `0.83` and `0.84`
40
42
 
41
43
  ## Installation
42
44
 
@@ -144,11 +146,15 @@ export default function App() {
144
146
  |---------|--------|-------------|
145
147
  | Bold | `**text**` or `__text__` | Strong emphasis |
146
148
  | Italic | `*text*` or `_text_` | Emphasis |
147
- | Bold + Italic | `***text***`, `___text___`, `**_text_**`, `__*text*__`, `_**text**_`, `*__text__*` | Combined emphasis |
149
+ | Underline | `_text_` | Underlined text (requires `md4cFlags`) |
150
+ | Strikethrough | `~~text~~` | Strikethrough text |
151
+ | Bold + Italic | `***text***`, `___text___`, etc. | Combined emphasis |
148
152
  | Links | `[text](url)` | Clickable links |
149
153
  | Inline Code | `` `code` `` | Inline code snippets |
150
154
  | Inline Images | `![alt](url)` | Images within text flow |
151
155
 
156
+ > **Note:** Underscore syntax (`__text__`, `_text_`) works for bold/italic by default. Enable underline via `md4cFlags={{ underline: true }}` to treat `_text_` as underline instead of emphasis.
157
+
152
158
  ### Nested Lists Example
153
159
 
154
160
  ```markdown
@@ -174,16 +180,32 @@ export default function App() {
174
180
 
175
181
  ## Link Handling
176
182
 
177
- Links in Markdown are interactive and can be handled with the `onLinkPress` callback:
183
+ Links in Markdown are interactive and can be handled with the `onLinkPress` and `onLinkLongPress` callbacks:
178
184
 
179
185
  ```tsx
180
186
  <EnrichedMarkdownText
181
187
  markdown="Check out [React Native](https://reactnative.dev)!"
182
- onLinkPress={(event) => {
183
- const { url } = event.nativeEvent;
188
+ onLinkPress={({ url }) => {
184
189
  Alert.alert('Link pressed', url);
185
190
  Linking.openURL(url);
186
191
  }}
192
+ onLinkLongPress={({ url }) => {
193
+ Alert.alert('Link long pressed', url);
194
+ }}
195
+ />
196
+ ```
197
+
198
+ ### Link Preview (iOS)
199
+
200
+ By default, long-pressing a link on iOS shows the native system link preview. When you provide `onLinkLongPress`, the system preview is automatically disabled so your handler can fire instead.
201
+
202
+ You can also control this behavior explicitly with the `enableLinkPreview` prop:
203
+
204
+ ```tsx
205
+ // Disable system link preview without providing a handler
206
+ <EnrichedMarkdownText
207
+ markdown={content}
208
+ enableLinkPreview={false}
187
209
  />
188
210
  ```
189
211
 
@@ -219,6 +241,20 @@ A dedicated **Copy as Markdown** option is available in the context menu on both
219
241
 
220
242
  When selecting text that contains images, a **Copy Image URL** option appears to copy the image's source URL. On Android, if multiple images are selected, all URLs are copied (one per line).
221
243
 
244
+ ## Accessibility
245
+
246
+ `react-native-enriched-markdown` provides accessibility support for screen readers on both platforms — VoiceOver on iOS and TalkBack on Android.
247
+
248
+ ### Supported Elements
249
+
250
+ | Element | VoiceOver (iOS) | TalkBack (Android) |
251
+ |---------|-----------------|---------------------|
252
+ | **Headings (h1-h6)** | Rotor navigation | Reading controls navigation |
253
+ | **Links** | Rotor navigation, activatable | Reading controls navigation, activatable |
254
+ | **Images** | Alt text announced, rotor navigation | Alt text announced |
255
+ | **List items** | Position announced (e.g., "bullet point", "list item 1") | Position announced |
256
+ | **Nested lists** | Proper depth handling | "Nested" prefix for deeper items |
257
+
222
258
  ## Styling Architecture
223
259
 
224
260
  Understanding how `react-native-enriched-markdown` handles styling helps you create consistent, well-designed Markdown content.
@@ -229,7 +265,7 @@ Markdown elements are divided into two categories:
229
265
 
230
266
  #### Block Elements
231
267
 
232
- Block elements are structural containers that define the layout. Each block has its own typography settings (`fontSize`, `fontFamily`, `fontWeight`, `color`, `lineHeight`, `marginBottom`).
268
+ Block elements are structural containers that define the layout. Each block has its own typography settings (`fontSize`, `fontFamily`, `fontWeight`, `color`, `lineHeight`, `marginTop`, `marginBottom`).
233
269
 
234
270
  | Block Type | Description |
235
271
  |------------|-------------|
@@ -247,6 +283,8 @@ Inline elements modify text within blocks. They inherit the parent block's base
247
283
  |-------------|---------------|------|
248
284
  | `strong` | Parent block | Bold weight, optional color |
249
285
  | `em` | Parent block | Italic style, optional color |
286
+ | `strikethrough` | Parent block | Strike line with custom color (iOS only) |
287
+ | `underline` | Parent block | Underline with custom color (iOS only) |
250
288
  | `code` | Parent block | Monospace font, background |
251
289
  | `link` | Parent block | Color, underline |
252
290
 
@@ -306,11 +344,13 @@ The library provides sensible default styles for all Markdown elements out of th
306
344
  fontWeight: 'bold',
307
345
  color: '#000',
308
346
  marginBottom: 16,
347
+ textAlign: 'center',
309
348
  },
310
349
  h2: {
311
350
  fontSize: 24,
312
351
  fontWeight: '600',
313
352
  marginBottom: 12,
353
+ textAlign: 'left',
314
354
  },
315
355
  strong: {
316
356
  color: '#000',
@@ -318,6 +358,12 @@ The library provides sensible default styles for all Markdown elements out of th
318
358
  em: {
319
359
  color: '#666',
320
360
  },
361
+ strikethrough: {
362
+ color: '#999',
363
+ },
364
+ underline: {
365
+ color: '#333',
366
+ },
321
367
  link: {
322
368
  color: '#007AFF',
323
369
  underline: true,
@@ -382,9 +428,16 @@ The library provides sensible default styles for all Markdown elements out of th
382
428
  | `fontFamily` | `string` | Font family name |
383
429
  | `fontWeight` | `string` | Font weight |
384
430
  | `color` | `string` | Text color |
431
+ | `marginTop` | `number` | Top margin |
385
432
  | `marginBottom` | `number` | Bottom margin |
386
433
  | `lineHeight` | `number` | Line height |
387
434
 
435
+ #### Paragraph and Heading-specific (paragraph, h1-h6)
436
+
437
+ | Property | Type | Description |
438
+ |----------|------|-------------|
439
+ | `textAlign` | `'auto' \| 'left' \| 'right' \| 'center' \| 'justify'` | Text alignment (default: `'left'`) |
440
+
388
441
  #### Blockquote-specific
389
442
 
390
443
  | Property | Type | Description |
@@ -430,12 +483,25 @@ The library provides sensible default styles for all Markdown elements out of th
430
483
  | `color` | `string` | Link text color |
431
484
  | `underline` | `boolean` | Show underline |
432
485
 
486
+ #### Strikethrough-specific
487
+
488
+ | Property | Type | Description |
489
+ |----------|------|-------------|
490
+ | `color` | `string` | Strikethrough line color (iOS only) |
491
+
492
+ #### Underline-specific
493
+
494
+ | Property | Type | Description |
495
+ |----------|------|-------------|
496
+ | `color` | `string` | Underline color (iOS only) |
497
+
433
498
  #### Image-specific
434
499
 
435
500
  | Property | Type | Description |
436
501
  |----------|------|-------------|
437
502
  | `height` | `number` | Image height |
438
503
  | `borderRadius` | `number` | Corner radius |
504
+ | `marginTop` | `number` | Top margin |
439
505
  | `marginBottom` | `number` | Bottom margin |
440
506
 
441
507
  #### Inline Image-specific
@@ -463,7 +529,13 @@ The library provides sensible default styles for all Markdown elements out of th
463
529
  | `markdownStyle` | `MarkdownStyle` | `{}` | Style configuration for Markdown elements |
464
530
  | `containerStyle` | `ViewStyle` | - | Style for the container view |
465
531
  | `onLinkPress` | `(event: LinkPressEvent) => void` | - | Callback when a link is pressed. Access URL via `event.url` |
466
- | `isSelectable` | `boolean` | `true` | Whether text can be selected |
532
+ | `onLinkLongPress` | `(event: LinkLongPressEvent) => void` | - | Callback when a link is long pressed. Access URL via `event.url`. On iOS, automatically disables the system link preview |
533
+ | `enableLinkPreview` | `boolean` | `true` | Controls the native link preview on long press (iOS only). Automatically set to `false` when `onLinkLongPress` is provided |
534
+ | `selectable` | `boolean` | `true` | Whether text can be selected |
535
+ | `md4cFlags` | `Md4cFlags` | `{ underline: false }` | Configuration for md4c parser extension flags |
536
+ | `allowFontScaling` | `boolean` | `true` | Whether fonts should scale to respect Text Size accessibility settings |
537
+ | `maxFontSizeMultiplier` | `number` | `undefined` | Maximum font scale multiplier when `allowFontScaling` is enabled |
538
+ | `allowTrailingMargin` | `boolean` | `false` | Whether to preserve the bottom margin of the last block element |
467
539
 
468
540
  ## Contributing
469
541
 
@@ -29,8 +29,23 @@ public class EnrichedMarkdownTextManagerDelegate<T extends View, U extends BaseV
29
29
  case "markdownStyle":
30
30
  mViewManager.setMarkdownStyle(view, (ReadableMap) value);
31
31
  break;
32
- case "isSelectable":
33
- mViewManager.setIsSelectable(view, value == null ? false : (boolean) value);
32
+ case "enableLinkPreview":
33
+ mViewManager.setEnableLinkPreview(view, value == null ? true : (boolean) value);
34
+ break;
35
+ case "selectable":
36
+ mViewManager.setSelectable(view, value == null ? false : (boolean) value);
37
+ break;
38
+ case "md4cFlags":
39
+ mViewManager.setMd4cFlags(view, (ReadableMap) value);
40
+ break;
41
+ case "allowFontScaling":
42
+ mViewManager.setAllowFontScaling(view, value == null ? true : (boolean) value);
43
+ break;
44
+ case "maxFontSizeMultiplier":
45
+ mViewManager.setMaxFontSizeMultiplier(view, value == null ? 0f : ((Double) value).floatValue());
46
+ break;
47
+ case "allowTrailingMargin":
48
+ mViewManager.setAllowTrailingMargin(view, value == null ? false : (boolean) value);
34
49
  break;
35
50
  default:
36
51
  super.setProperty(view, propName, value);
@@ -17,5 +17,10 @@ import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
17
17
  public interface EnrichedMarkdownTextManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
18
18
  void setMarkdown(T view, @Nullable String value);
19
19
  void setMarkdownStyle(T view, @Nullable ReadableMap value);
20
- void setIsSelectable(T view, boolean value);
20
+ void setEnableLinkPreview(T view, boolean value);
21
+ void setSelectable(T view, boolean value);
22
+ void setMd4cFlags(T view, @Nullable ReadableMap value);
23
+ void setAllowFontScaling(T view, boolean value);
24
+ void setMaxFontSizeMultiplier(T view, float value);
25
+ void setAllowTrailingMargin(T view, boolean value);
21
26
  }
@@ -21,4 +21,13 @@ void EnrichedMarkdownTextEventEmitter::onLinkPress(OnLinkPress event) const {
21
21
  });
22
22
  }
23
23
 
24
+
25
+ void EnrichedMarkdownTextEventEmitter::onLinkLongPress(OnLinkLongPress event) const {
26
+ dispatchEvent("linkLongPress", [event=std::move(event)](jsi::Runtime &runtime) {
27
+ auto payload = jsi::Object(runtime);
28
+ payload.setProperty(runtime, "url", event.url);
29
+ return payload;
30
+ });
31
+ }
32
+
24
33
  } // namespace facebook::react
@@ -20,6 +20,12 @@ class EnrichedMarkdownTextEventEmitter : public ViewEventEmitter {
20
20
  struct OnLinkPress {
21
21
  std::string url;
22
22
  };
23
+
24
+ struct OnLinkLongPress {
25
+ std::string url;
26
+ };
23
27
  void onLinkPress(OnLinkPress value) const;
28
+
29
+ void onLinkLongPress(OnLinkLongPress value) const;
24
30
  };
25
31
  } // namespace facebook::react
@@ -21,7 +21,12 @@ EnrichedMarkdownTextProps::EnrichedMarkdownTextProps(
21
21
 
22
22
  markdown(convertRawProp(context, rawProps, "markdown", sourceProps.markdown, {})),
23
23
  markdownStyle(convertRawProp(context, rawProps, "markdownStyle", sourceProps.markdownStyle, {})),
24
- isSelectable(convertRawProp(context, rawProps, "isSelectable", sourceProps.isSelectable, {false})) {}
24
+ enableLinkPreview(convertRawProp(context, rawProps, "enableLinkPreview", sourceProps.enableLinkPreview, {true})),
25
+ selectable(convertRawProp(context, rawProps, "selectable", sourceProps.selectable, {false})),
26
+ md4cFlags(convertRawProp(context, rawProps, "md4cFlags", sourceProps.md4cFlags, {})),
27
+ allowFontScaling(convertRawProp(context, rawProps, "allowFontScaling", sourceProps.allowFontScaling, {true})),
28
+ maxFontSizeMultiplier(convertRawProp(context, rawProps, "maxFontSizeMultiplier", sourceProps.maxFontSizeMultiplier, {0.0})),
29
+ allowTrailingMargin(convertRawProp(context, rawProps, "allowTrailingMargin", sourceProps.allowTrailingMargin, {false})) {}
25
30
 
26
31
  #ifdef RN_SERIALIZABLE_STATE
27
32
  ComponentName EnrichedMarkdownTextProps::getDiffPropsImplementationTarget() const {
@@ -47,8 +52,28 @@ folly::dynamic EnrichedMarkdownTextProps::getDiffProps(
47
52
  result["markdownStyle"] = toDynamic(markdownStyle);
48
53
  }
49
54
 
50
- if (isSelectable != oldProps->isSelectable) {
51
- result["isSelectable"] = isSelectable;
55
+ if (enableLinkPreview != oldProps->enableLinkPreview) {
56
+ result["enableLinkPreview"] = enableLinkPreview;
57
+ }
58
+
59
+ if (selectable != oldProps->selectable) {
60
+ result["selectable"] = selectable;
61
+ }
62
+
63
+ if (md4cFlags != oldProps->md4cFlags) {
64
+ result["md4cFlags"] = toDynamic(md4cFlags);
65
+ }
66
+
67
+ if (allowFontScaling != oldProps->allowFontScaling) {
68
+ result["allowFontScaling"] = allowFontScaling;
69
+ }
70
+
71
+ if ((maxFontSizeMultiplier != oldProps->maxFontSizeMultiplier) && !(std::isnan(maxFontSizeMultiplier) && std::isnan(oldProps->maxFontSizeMultiplier))) {
72
+ result["maxFontSizeMultiplier"] = maxFontSizeMultiplier;
73
+ }
74
+
75
+ if (allowTrailingMargin != oldProps->allowTrailingMargin) {
76
+ result["allowTrailingMargin"] = allowTrailingMargin;
52
77
  }
53
78
  return result;
54
79
  }