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.
- package/README.md +80 -8
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerDelegate.java +17 -2
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedMarkdownTextManagerInterface.java +6 -1
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.cpp +9 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.h +6 -0
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.cpp +28 -3
- package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/Props.h +225 -1
- package/android/src/main/cpp/jni-adapter.cpp +28 -11
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownText.kt +132 -15
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextLayoutManager.kt +1 -16
- package/android/src/main/java/com/swmansion/enriched/markdown/EnrichedMarkdownTextManager.kt +67 -13
- package/android/src/main/java/com/swmansion/enriched/markdown/MeasurementStore.kt +241 -21
- package/android/src/main/java/com/swmansion/enriched/markdown/accessibility/MarkdownAccessibilityHelper.kt +279 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/events/LinkLongPressEvent.kt +23 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/parser/MarkdownASTNode.kt +2 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/parser/Parser.kt +17 -3
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/BlockquoteRenderer.kt +13 -18
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/CodeBlockRenderer.kt +23 -24
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/CodeRenderer.kt +1 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/DocumentRenderer.kt +2 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/EmphasisRenderer.kt +2 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/HeadingRenderer.kt +18 -2
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ImageRenderer.kt +22 -6
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/LineBreakRenderer.kt +1 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/LinkRenderer.kt +3 -2
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListItemRenderer.kt +2 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ListRenderer.kt +16 -9
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/NodeRenderer.kt +5 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ParagraphRenderer.kt +23 -9
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/Renderer.kt +24 -10
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/SpanStyleCache.kt +1 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/StrikethroughRenderer.kt +27 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/StrongRenderer.kt +2 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/TextRenderer.kt +1 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/ThematicBreakRenderer.kt +1 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/renderer/UnderlineRenderer.kt +27 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/ImageSpan.kt +1 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/LineHeightSpan.kt +8 -17
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/LinkSpan.kt +19 -5
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/MarginBottomSpan.kt +1 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/spans/StrikethroughSpan.kt +12 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/BaseBlockStyle.kt +1 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/BlockquoteStyle.kt +3 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/CodeBlockStyle.kt +3 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/HeadingStyle.kt +5 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/ImageStyle.kt +3 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/ListStyle.kt +3 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/ParagraphStyle.kt +5 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/StrikethroughStyle.kt +17 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/StyleConfig.kt +32 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/StyleParser.kt +22 -5
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/TextAlignment.kt +32 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/styles/UnderlineStyle.kt +17 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/HTMLGenerator.kt +23 -5
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/LinkLongPressMovementMethod.kt +121 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/MarkdownExtractor.kt +10 -0
- package/android/src/main/java/com/swmansion/enriched/markdown/utils/Utils.kt +58 -56
- package/android/src/main/jni/CMakeLists.txt +1 -13
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextShadowNode.cpp +0 -13
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextShadowNode.h +2 -14
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/conversions.h +3 -0
- package/cpp/parser/MD4CParser.cpp +21 -8
- package/cpp/parser/MD4CParser.hpp +5 -1
- package/cpp/parser/MarkdownASTNode.hpp +2 -0
- package/ios/EnrichedMarkdownText.mm +356 -29
- package/ios/attachments/{ImageAttachment.h → EnrichedMarkdownImageAttachment.h} +1 -1
- package/ios/attachments/{ImageAttachment.m → EnrichedMarkdownImageAttachment.m} +4 -4
- package/ios/generated/EnrichedMarkdownTextSpec/EventEmitters.cpp +9 -0
- package/ios/generated/EnrichedMarkdownTextSpec/EventEmitters.h +6 -0
- package/ios/generated/EnrichedMarkdownTextSpec/Props.cpp +28 -3
- package/ios/generated/EnrichedMarkdownTextSpec/Props.h +225 -1
- package/ios/parser/MarkdownASTNode.h +2 -0
- package/ios/parser/MarkdownParser.h +9 -0
- package/ios/parser/MarkdownParser.mm +31 -2
- package/ios/parser/MarkdownParserBridge.mm +13 -3
- package/ios/renderer/AttributedRenderer.h +2 -0
- package/ios/renderer/AttributedRenderer.m +52 -19
- package/ios/renderer/BlockquoteRenderer.m +7 -6
- package/ios/renderer/CodeBlockRenderer.m +9 -8
- package/ios/renderer/HeadingRenderer.m +31 -24
- package/ios/renderer/ImageRenderer.m +31 -10
- package/ios/renderer/ListItemRenderer.m +51 -39
- package/ios/renderer/ListRenderer.m +21 -18
- package/ios/renderer/ParagraphRenderer.m +27 -16
- package/ios/renderer/RenderContext.h +17 -0
- package/ios/renderer/RenderContext.m +66 -2
- package/ios/renderer/RendererFactory.m +6 -0
- package/ios/renderer/StrikethroughRenderer.h +6 -0
- package/ios/renderer/StrikethroughRenderer.m +40 -0
- package/ios/renderer/UnderlineRenderer.h +6 -0
- package/ios/renderer/UnderlineRenderer.m +39 -0
- package/ios/styles/StyleConfig.h +46 -0
- package/ios/styles/StyleConfig.mm +351 -12
- package/ios/utils/AccessibilityInfo.h +35 -0
- package/ios/utils/AccessibilityInfo.m +24 -0
- package/ios/utils/CodeBlockBackground.m +4 -9
- package/ios/utils/FontUtils.h +5 -0
- package/ios/utils/FontUtils.m +14 -0
- package/ios/utils/HTMLGenerator.m +21 -7
- package/ios/utils/MarkdownAccessibilityElementBuilder.h +45 -0
- package/ios/utils/MarkdownAccessibilityElementBuilder.m +323 -0
- package/ios/utils/MarkdownExtractor.m +18 -5
- package/ios/utils/ParagraphStyleUtils.h +10 -2
- package/ios/utils/ParagraphStyleUtils.m +57 -2
- package/ios/utils/PasteboardUtils.h +1 -1
- package/ios/utils/PasteboardUtils.m +3 -3
- package/lib/module/EnrichedMarkdownText.js +33 -2
- package/lib/module/EnrichedMarkdownText.js.map +1 -1
- package/lib/module/EnrichedMarkdownTextNativeComponent.ts +83 -3
- package/lib/module/index.js +0 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/normalizeMarkdownStyle.js +58 -14
- package/lib/module/normalizeMarkdownStyle.js.map +1 -1
- package/lib/typescript/src/EnrichedMarkdownText.d.ts +85 -3
- package/lib/typescript/src/EnrichedMarkdownText.d.ts.map +1 -1
- package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts +75 -1
- package/lib/typescript/src/EnrichedMarkdownTextNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +2 -3
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/normalizeMarkdownStyle.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/EnrichedMarkdownText.tsx +133 -5
- package/src/EnrichedMarkdownTextNativeComponent.ts +83 -3
- package/src/index.tsx +5 -2
- package/src/normalizeMarkdownStyle.ts +46 -0
- package/android/src/main/jni/react/renderer/components/EnrichedMarkdownTextSpec/MarkdownTextState.cpp +0 -9
- 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/
|
|
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.
|
|
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
|
-
|
|
|
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 | `` | 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`
|
|
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={(
|
|
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
|
-
| `
|
|
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 "
|
|
33
|
-
mViewManager.
|
|
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
|
|
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
|
}
|
package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.cpp
CHANGED
|
@@ -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
|
package/android/generated/jni/react/renderer/components/EnrichedMarkdownTextSpec/EventEmitters.h
CHANGED
|
@@ -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
|
-
|
|
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 (
|
|
51
|
-
result["
|
|
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
|
}
|