react-native-enriched-markdown 1.1.0 → 1.1.1

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 (33) hide show
  1. package/README.md +1 -1
  2. package/android/src/main/java/com/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputView.kt +43 -5
  3. package/android/src/main/java/com/swmansion/enriched/markdown/input/layout/InputEventEmitter.kt +9 -8
  4. package/docs/API_REFERENCE.md +24 -0
  5. package/docs/BREAKING_CHANGES.md +5 -0
  6. package/ios/EnrichedMarkdown.mm +3 -0
  7. package/ios/internals/ShadowMeasurementUtils.h +1 -2
  8. package/ios/renderer/ListItemRenderer.m +38 -1
  9. package/ios/segments/ENRMBlockquoteContainerView.h +6 -0
  10. package/ios/segments/ENRMBlockquoteContainerView.mm +28 -0
  11. package/ios/segments/TableContainerView.m +1 -0
  12. package/ios/utils/ENRMCodeBlockContent.mm +2 -0
  13. package/ios/utils/ENRMTextRenderer.m +1 -0
  14. package/ios/utils/MarkdownAccessibilityElementBuilder.m +4 -2
  15. package/ios/utils/ParagraphStyleUtils.h +18 -0
  16. package/ios/utils/ParagraphStyleUtils.m +20 -0
  17. package/ios/utils/TextViewLayoutManager.mm +57 -0
  18. package/lib/module/EnrichedMarkdownTextInput.js +48 -2
  19. package/lib/module/EnrichedMarkdownTextInput.js.map +1 -1
  20. package/lib/module/utils/textInputState.js +4 -3
  21. package/lib/module/utils/textInputState.js.map +1 -1
  22. package/lib/module/utils/usePressability.js +28 -0
  23. package/lib/module/utils/usePressability.js.map +1 -0
  24. package/lib/typescript/src/EnrichedMarkdownTextInput.d.ts +3 -3
  25. package/lib/typescript/src/EnrichedMarkdownTextInput.d.ts.map +1 -1
  26. package/lib/typescript/src/utils/textInputState.d.ts +5 -3
  27. package/lib/typescript/src/utils/textInputState.d.ts.map +1 -1
  28. package/lib/typescript/src/utils/usePressability.d.ts +24 -0
  29. package/lib/typescript/src/utils/usePressability.d.ts.map +1 -0
  30. package/package.json +1 -1
  31. package/src/EnrichedMarkdownTextInput.tsx +66 -4
  32. package/src/utils/textInputState.ts +5 -3
  33. package/src/utils/usePressability.ts +34 -0
package/README.md CHANGED
@@ -262,7 +262,7 @@ We're actively working on expanding the capabilities of `react-native-enriched-m
262
262
  | | 0.82 | 0.83 | 0.84 | 0.85 | 0.86 | 0.87 |
263
263
  | ----------- | :--: | :--: | :--: | :--: | :--: | :--: |
264
264
  | **nightly** | ⛔ | ✅ | ✅ | ✅ | ✅ | ✅ |
265
- | **1.1.0** | ⛔ | ✅ | ✅ | ✅ | ✅ | ✅ |
265
+ | **1.1.x** | ⛔ | ✅ | ✅ | ✅ | ✅ | ✅ |
266
266
  | **1.0.x** | ⛔ | ✅ | ✅ | ✅ | ✅ | ✅ |
267
267
  | **0.7.0** | ⛔ | ✅ | ✅ | ✅ | ✅ | ✅ |
268
268
  | **0.6.0** | ⛔ | ✅ | ✅ | ✅ | ⛔ | ⛔ |
@@ -60,6 +60,8 @@ class EnrichedMarkdownTextInputView(
60
60
  context: Context,
61
61
  ) : AppCompatEditText(context) {
62
62
  private var isComponentReady = false
63
+ private var lastEmittedSelectionStart = -1
64
+ private var lastEmittedSelectionEnd = -1
63
65
 
64
66
  val formattingStore = FormattingStore()
65
67
  val blockStore = BlockStore()
@@ -387,6 +389,7 @@ class EnrichedMarkdownTextInputView(
387
389
  } finally {
388
390
  editSession.exit()
389
391
  }
392
+ emitSelectionIfChanged()
390
393
  }
391
394
 
392
395
  override fun onSelectionChanged(
@@ -416,12 +419,33 @@ class EnrichedMarkdownTextInputView(
416
419
  syncEmptyListAnchor()
417
420
  }
418
421
 
419
- eventEmitter.emitSelection(selStart, selEnd)
422
+ emitSelectionIfChanged()
420
423
  dispatchMentionUpdate()
421
424
  eventEmitter.emitState()
422
425
  eventEmitter.emitCaretRectChangeIfNeeded()
423
426
  }
424
427
 
428
+ /**
429
+ * Sends the caret range to JS when it differs from the last range JS received.
430
+ *
431
+ * [onSelectionChanged] returns immediately while an edit phase is active, so
432
+ * a caret move from setValue, a programmatic insert, or anchor management is
433
+ * not reported there. Those callers invoke this once the edit phase has ended.
434
+ *
435
+ * This function then rereads the latest range at that point before emitting
436
+ * the selection.
437
+ */
438
+ private fun emitSelectionIfChanged() {
439
+ if (!isComponentReady) return
440
+ val start = selectionStart
441
+ val end = selectionEnd
442
+ if (start == lastEmittedSelectionStart && end == lastEmittedSelectionEnd) return
443
+ if (eventEmitter.emitSelection(start, end)) {
444
+ lastEmittedSelectionStart = start
445
+ lastEmittedSelectionEnd = end
446
+ }
447
+ }
448
+
425
449
  /**
426
450
  * Text typed over a non-empty selection inherits the inline styles of the first
427
451
  * selected character (mirrors iOS rebuildFromContext and the range-inheritance
@@ -478,6 +502,7 @@ class EnrichedMarkdownTextInputView(
478
502
  } finally {
479
503
  editSession.exit()
480
504
  }
505
+ emitSelectionIfChanged()
481
506
  }
482
507
 
483
508
  fun applyFormatting() {
@@ -971,6 +996,7 @@ class EnrichedMarkdownTextInputView(
971
996
  } finally {
972
997
  editSession.exit()
973
998
  }
999
+ emitSelectionIfChanged()
974
1000
  }
975
1001
 
976
1002
  override fun setBackgroundColor(color: Int) {
@@ -1036,10 +1062,22 @@ class EnrichedMarkdownTextInputView(
1036
1062
  AutoCapitalizeUtils.apply(this, flagName)
1037
1063
  }
1038
1064
 
1039
- fun requestFocusProgrammatically() {
1040
- requestFocus()
1041
- inputMethodManager?.showSoftInput(this, 0)
1042
- setSelection(selectionStart.coerceAtLeast(0))
1065
+ /**
1066
+ * Programmatic focus for ref.focus() and for the focus command that the JS
1067
+ * pressability onPress sends on finger-up (including after a long-press word
1068
+ * select).
1069
+ *
1070
+ * Matches ReactEditText.requestFocusProgrammatically: request focus and show
1071
+ * the keyboard without touching the selection, so a long-press word selection
1072
+ * isn't collapsed:
1073
+ * https://github.com/react/react-native/blob/v0.86.2/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.kt#L396-L402
1074
+ */
1075
+ fun requestFocusProgrammatically(): Boolean {
1076
+ val focused = super.requestFocus(FOCUS_DOWN, null)
1077
+ if (isInTouchMode && showSoftInputOnFocus) {
1078
+ inputMethodManager?.showSoftInput(this, 0)
1079
+ }
1080
+ return focused
1043
1081
  }
1044
1082
 
1045
1083
  private fun showAutoFocusKeyboardIfPending() {
@@ -48,9 +48,7 @@ class InputEventEmitter(
48
48
  fun emitSelection(
49
49
  start: Int,
50
50
  end: Int,
51
- ) {
52
- dispatch(OnChangeSelectionEvent(surfaceId(), view.id, start, end))
53
- }
51
+ ): Boolean = dispatch(OnChangeSelectionEvent(surfaceId(), view.id, start, end))
54
52
 
55
53
  fun emitState() {
56
54
  val pos = view.selectionStart
@@ -236,10 +234,13 @@ class InputEventEmitter(
236
234
  return UIManagerHelper.getSurfaceId(reactContext)
237
235
  }
238
236
 
239
- private fun dispatch(event: Event<*>) {
240
- if (view.editSession.shouldSuppressEvents) return
241
- val reactContext = view.context as? ReactContext ?: return
242
- val dispatcher = UIManagerHelper.getEventDispatcherForReactTag(reactContext, view.id)
243
- dispatcher?.dispatchEvent(event)
237
+ /** Returns true when [event] was handed to the React event dispatcher */
238
+ private fun dispatch(event: Event<*>): Boolean {
239
+ if (view.editSession.shouldSuppressEvents) return false
240
+ val reactContext = view.context as? ReactContext ?: return false
241
+ val dispatcher =
242
+ UIManagerHelper.getEventDispatcherForReactTag(reactContext, view.id) ?: return false
243
+ dispatcher.dispatchEvent(event)
244
+ return true
244
245
  }
245
246
  }
@@ -935,6 +935,30 @@ Fires when the input loses focus.
935
935
 
936
936
  The input participates in React Native's text-input focus tracking (`TextInput.State`), so blur also happens through the platform's standard keyboard-dismiss paths: taps outside the input inside a `ScrollView` (per its `keyboardShouldPersistTaps` setting) and `Keyboard.dismiss()`. See [Keyboard Dismissal](INPUT.md#keyboard-dismissal).
937
937
 
938
+ ### `onPress`, `onPressIn`, `onPressOut`
939
+
940
+ Fire for taps on the input, like React Native `TextInput`. The input claims the JS touch responder, so a tap that focuses it does not also fire the `onPress` of an ancestor `Pressable`. After `onPress` runs, the input focuses itself (unless `editable` is `false`) without changing the current selection. As on `TextInput`, responder props passed through `ViewProps` (`onStartShouldSetResponder`, `onResponderGrant`, and the rest) are overridden by the input's press handling.
941
+
942
+ | Type | Default Value | Platform |
943
+ | ------------------------------------------- | ------------- | -------- |
944
+ | `(event: GestureResponderEvent) => unknown` | - | Both |
945
+
946
+ ### `hitSlop`
947
+
948
+ Extends the touchable area for the press handlers above. Same as `hitSlop` on React Native `TextInput`.
949
+
950
+ | Type | Default Value | Platform |
951
+ | ---------------------- | ------------- | -------- |
952
+ | `ViewProps['hitSlop']` | - | Both |
953
+
954
+ ### `rejectResponderTermination`
955
+
956
+ When `true`, a parent scroll view or pressable can't take over the touch responder while the input is being pressed. Same as React Native `TextInput`.
957
+
958
+ | Type | Default Value | Platform |
959
+ | --------- | ------------- | -------- |
960
+ | `boolean` | `true` | iOS |
961
+
938
962
  ### `onStartMention`
939
963
 
940
964
  Fires when a new mention flow starts. See [Mentions](MENTIONS.md#events).
@@ -5,6 +5,11 @@ This file tracks breaking changes and how to migrate for each. Entries are newes
5
5
 
6
6
  ## Unreleased
7
7
 
8
+ ## v1.1.1
9
+
10
+ No breaking changes. v1.1.1 is a patch release over v1.1.0 - every public prop, method, event and style
11
+ key from v1.1.0 keeps its name and behaviour, and no deprecation was introduced or removed.
12
+
8
13
  ## v1.1.0
9
14
 
10
15
  No breaking changes. v1.1.0 is additive over v1.0.2 - every public prop, method, event and style key
@@ -377,6 +377,7 @@ static char kENRMSegmentFadeAnimatorKey;
377
377
  view.allowFontScaling = _fontScaleObserver.allowFontScaling;
378
378
  view.lineBreakStrategy = _lineBreakStrategy;
379
379
  view.dynamicProps = _dynamicBlockProps;
380
+ view.accessibilityLabels = _accessibilityLabels;
380
381
 
381
382
  __weak EnrichedMarkdown *weakSelf = self;
382
383
  view.onCopyPress = ^(NSString *code, NSString *language) {
@@ -661,6 +662,8 @@ static char kENRMSegmentFadeAnimatorKey;
661
662
  ((EnrichedMarkdownInternalText *)segment).accessibilityLabels = _accessibilityLabels;
662
663
  } else if ([segment isKindOfClass:[TableContainerView class]]) {
663
664
  ((TableContainerView *)segment).accessibilityLabels = _accessibilityLabels;
665
+ } else if ([segment isKindOfClass:[ENRMBlockquoteContainerView class]]) {
666
+ ((ENRMBlockquoteContainerView *)segment).accessibilityLabels = _accessibilityLabels;
664
667
  }
665
668
  #if ENRICHED_MARKDOWN_MATH
666
669
  else if ([segment isKindOfClass:[ENRMMathContainerView class]]) {
@@ -70,8 +70,7 @@ static inline bool ENRMPropsNeedExactStreamingMeasurement(const PropsT &oldProps
70
70
  oldProps.md4cFlags.highlight != newProps.md4cFlags.highlight ||
71
71
  oldProps.md4cFlags.hardSoftBreaks != newProps.md4cFlags.hardSoftBreaks ||
72
72
  oldProps.md4cFlags.preserveBlankLines != newProps.md4cFlags.preserveBlankLines ||
73
- oldProps.isGFM != newProps.isGFM ||
74
- oldProps.md4cFlags.admonitions != newProps.md4cFlags.admonitions ||
73
+ oldProps.isGFM != newProps.isGFM || oldProps.md4cFlags.admonitions != newProps.md4cFlags.admonitions ||
75
74
  computeStyleFingerprint(oldProps.markdownStyle) != computeStyleFingerprint(newProps.markdownStyle);
76
75
  }
77
76
 
@@ -19,6 +19,41 @@ NSString *const TaskIndexAttribute = @"TaskIndex";
19
19
  @implementation ENRMListMarkerDescriptor
20
20
  @end
21
21
 
22
+ // NSArray's -hash is its count, so plain one-marker arrays all collide in the
23
+ // table that uniques attribute dictionaries, and each list item probes past
24
+ // every earlier one. Hashing by the item's own marker keeps rendering linear.
25
+ @interface ENRMListMarkerArray : NSArray
26
+ @end
27
+
28
+ @implementation ENRMListMarkerArray {
29
+ NSArray<ENRMListMarkerDescriptor *> *_markers;
30
+ }
31
+
32
+ - (instancetype)initWithMarkers:(NSArray<ENRMListMarkerDescriptor *> *)markers
33
+ {
34
+ if (self = [super init]) {
35
+ _markers = [markers copy];
36
+ }
37
+ return self;
38
+ }
39
+
40
+ - (NSUInteger)count
41
+ {
42
+ return _markers.count;
43
+ }
44
+
45
+ - (id)objectAtIndex:(NSUInteger)index
46
+ {
47
+ return _markers[index];
48
+ }
49
+
50
+ - (NSUInteger)hash
51
+ {
52
+ return _markers.lastObject.hash;
53
+ }
54
+
55
+ @end
56
+
22
57
  @interface ListItemRenderer ()
23
58
  - (void)applyCheckedDecorationsTo:(NSMutableAttributedString *)output
24
59
  range:(NSRange)range
@@ -184,7 +219,9 @@ NSString *const TaskIndexAttribute = @"TaskIndex";
184
219
  NSArray *existingMarkers = [output attribute:ListItemMarkerStartAttribute atIndex:anchorLocation effectiveRange:NULL];
185
220
  NSArray *markers =
186
221
  [existingMarkers isKindOfClass:[NSArray class]] ? [existingMarkers arrayByAddingObject:marker] : @[ marker ];
187
- [output addAttribute:ListItemMarkerStartAttribute value:markers range:anchorRange];
222
+ [output addAttribute:ListItemMarkerStartAttribute
223
+ value:[[ENRMListMarkerArray alloc] initWithMarkers:markers]
224
+ range:anchorRange];
188
225
 
189
226
  if (isTask && isChecked) {
190
227
  [self applyCheckedDecorationsTo:output range:itemRange nestingLevel:nestingLevel];
@@ -5,6 +5,7 @@
5
5
  #import "StyleConfig.h"
6
6
 
7
7
  @class MarkdownASTNode;
8
+ @class ENRMAccessibilityLabels;
8
9
 
9
10
  NS_ASSUME_NONNULL_BEGIN
10
11
 
@@ -79,6 +80,11 @@ typedef void (^ENRMBlockquoteLinkBlock)(NSString *url);
79
80
  // a toggle is born current with no per-toggle push. See ENRMDynamicBlockProps.
80
81
  @property (nonatomic, strong) ENRMDynamicBlockProps *dynamicProps;
81
82
 
83
+ // Resolved VoiceOver strings (list, quote, table and math announcements). Set by
84
+ // the host at creation and pushed to this quote's children, recursing into
85
+ // nested quotes, so they are labelled the same way top-level segments are.
86
+ @property (nonatomic, strong, nullable) ENRMAccessibilityLabels *accessibilityLabels;
87
+
82
88
  @end
83
89
 
84
90
  NS_ASSUME_NONNULL_END
@@ -152,6 +152,30 @@ static UIEdgeInsets ENRMBlockquoteContentInsets(StyleConfig *config)
152
152
  #endif
153
153
  }
154
154
 
155
+ - (void)setAccessibilityLabels:(ENRMAccessibilityLabels *)accessibilityLabels
156
+ {
157
+ if (_accessibilityLabels == accessibilityLabels) {
158
+ return;
159
+ }
160
+ _accessibilityLabels = accessibilityLabels;
161
+ // Children created before this point (or before a labels prop change) still
162
+ // hold the previous labels; nested quotes forward them to their own children.
163
+ for (RCTUIView *child in self.subviews) {
164
+ if ([child isKindOfClass:[EnrichedMarkdownInternalText class]]) {
165
+ ((EnrichedMarkdownInternalText *)child).accessibilityLabels = accessibilityLabels;
166
+ } else if ([child isKindOfClass:[TableContainerView class]]) {
167
+ ((TableContainerView *)child).accessibilityLabels = accessibilityLabels;
168
+ } else if ([child isKindOfClass:[ENRMBlockquoteContainerView class]]) {
169
+ ((ENRMBlockquoteContainerView *)child).accessibilityLabels = accessibilityLabels;
170
+ }
171
+ #if ENRICHED_MARKDOWN_MATH
172
+ else if ([child isKindOfClass:[ENRMMathContainerView class]]) {
173
+ ((ENRMMathContainerView *)child).accessibilityLabels = accessibilityLabels;
174
+ }
175
+ #endif
176
+ }
177
+ }
178
+
155
179
  // Child registry for this quote's own content. It reuses static creators for
156
180
  // every kind and, for a nested Blockquote, creates another
157
181
  // ENRMBlockquoteContainerView (the recursion). Streaming is static: no
@@ -172,6 +196,7 @@ static UIEdgeInsets ENRMBlockquoteContentInsets(StyleConfig *config)
172
196
  EnrichedMarkdownInternalText *view = [[EnrichedMarkdownInternalText alloc] initWithConfig:config];
173
197
  view.lastElementMarginBottom = segment.textResult.lastElementMarginBottom;
174
198
  view.accessibilityInfo = segment.textResult.accessibilityInfo;
199
+ view.accessibilityLabels = strongSelf.accessibilityLabels;
175
200
  [view applyAttributedText:segment.textResult.attributedText context:segment.textResult.context];
176
201
  if (strongSelf) {
177
202
  [strongSelf attachLinkTapToTextView:view];
@@ -195,6 +220,7 @@ static UIEdgeInsets ENRMBlockquoteContentInsets(StyleConfig *config)
195
220
  ENRMBlockquoteContainerView *strongSelf = weakSelf;
196
221
  if (strongSelf) {
197
222
  view.dynamicProps = strongSelf.dynamicProps;
223
+ view.accessibilityLabels = strongSelf.accessibilityLabels;
198
224
  view.onLinkPress = ^(NSString *url) {
199
225
  ENRMBlockquoteContainerView *s = weakSelf;
200
226
  if (s.onLinkPress && url)
@@ -252,6 +278,7 @@ static UIEdgeInsets ENRMBlockquoteContentInsets(StyleConfig *config)
252
278
  view.allowFontScaling = strongSelf.allowFontScaling;
253
279
  view.lineBreakStrategy = strongSelf.lineBreakStrategy;
254
280
  view.dynamicProps = strongSelf.dynamicProps;
281
+ view.accessibilityLabels = strongSelf.accessibilityLabels;
255
282
  view.onCopyPress = strongSelf.onCopyPress;
256
283
  view.onCodeBlockPress = strongSelf.onCodeBlockPress;
257
284
  view.onLinkPress = ^(NSString *url) {
@@ -283,6 +310,7 @@ static UIEdgeInsets ENRMBlockquoteContentInsets(StyleConfig *config)
283
310
  ENRMMathContainerView *view = [[ENRMMathContainerView alloc] initWithConfig:config];
284
311
  ENRMBlockquoteContainerView *strongSelf = weakSelf;
285
312
  view.dynamicProps = strongSelf.dynamicProps;
313
+ view.accessibilityLabels = strongSelf.accessibilityLabels;
286
314
  [view applyLatex:segment.mathSegment.latex];
287
315
  return view;
288
316
  }
@@ -87,6 +87,7 @@ static NSMutableAttributedString *ENRMTableRenderCellNode(MarkdownASTNode *cellN
87
87
 
88
88
  [context applyLinkAttributesToString:attributedText];
89
89
 
90
+ ENRMPinLineMetricsToStyledFonts(attributedText, NSMakeRange(0, attributedText.length));
90
91
  ENRMApplyWritingDirectionMode(attributedText, writingDirectionMode, resolvedLayoutDirection);
91
92
 
92
93
  if (alignment != NSTextAlignmentLeft && attributedText.length > 0) {
@@ -86,4 +86,6 @@ void ENRMApplyCodeBlockTextAttributes(NSMutableAttributedString *string, NSRange
86
86
  if (lineHeight > 0) {
87
87
  applyBaselineOffset(string, range);
88
88
  }
89
+
90
+ ENRMPinLineMetricsToStyledFonts(string, range);
89
91
  }
@@ -26,6 +26,7 @@ static ENRMRenderResult *ENRMRenderASTNodesCore(NSArray<MarkdownASTNode *> *node
26
26
  [context applyLinkAttributesToString:attributedText];
27
27
  [context applyImageAttributesToString:attributedText];
28
28
  ENRMApplyLineBreakStrategyToParagraphStyles(attributedText, lineBreakStrategy);
29
+ ENRMPinLineMetricsToStyledFonts(attributedText, NSMakeRange(0, attributedText.length));
29
30
 
30
31
  ENRMRenderResult *result = [[ENRMRenderResult alloc] init];
31
32
  result.attributedText = attributedText;
@@ -174,8 +174,10 @@ static const CGFloat kFocusRectPadding = 2.0;
174
174
  }
175
175
 
176
176
  NSMutableArray<NSString *> *valueParts = [NSMutableArray array];
177
- if (listInfo && type != ElementTypeImage) {
178
- [valueParts addObject:[self formatListAnnouncement:listInfo labels:labels]];
177
+ NSString *listAnnouncement =
178
+ (listInfo && type != ElementTypeImage) ? [self formatListAnnouncement:listInfo labels:labels] : nil;
179
+ if (listAnnouncement) {
180
+ [valueParts addObject:listAnnouncement];
179
181
  }
180
182
  NSString *blockquoteAnnouncement = [self blockquoteAnnouncementForRange:range textView:textView labels:labels];
181
183
  if (blockquoteAnnouncement) {
@@ -50,6 +50,24 @@ NSUInteger applyParagraphSpacingBefore(NSMutableAttributedString *output, NSRang
50
50
  NSUInteger applyBlockSpacingBefore(NSMutableAttributedString *output, NSUInteger insertionPoint, CGFloat marginTop);
51
51
  void applyBlockSpacingAfter(NSMutableAttributedString *output, CGFloat marginBottom);
52
52
  void applyLineHeight(NSMutableAttributedString *output, NSRange range, CGFloat lineHeight);
53
+
54
+ /// Stamps every styled run in `range` with `NSOriginalFont` set to its own
55
+ /// `NSFont`, so a line is sized from the font the renderer chose rather than
56
+ /// from whichever font ends up drawing the glyphs.
57
+ ///
58
+ /// UIKit writes this attribute itself, but only into a UITextView's storage, so
59
+ /// the view-free measurement stack never saw it and sized a line from the
60
+ /// fallback font instead. Stamping it here keeps measuring and rendering agreed.
61
+ ///
62
+ /// IMPORTANT:
63
+ /// Call this last, after every font in the range is final, on any attributed
64
+ /// string handed to a layout engine. A run whose `NSFont` changes after the
65
+ /// stamp is then sized from the stale font, in the measurement stack and in
66
+ /// `UITextView` alike, so the line comes out wrong in both.
67
+ /// `ENRMRenderASTNodes` and `ENRMRenderBlockquoteContentNodes` cover everything
68
+ /// built through the node renderers; the two paths that assemble their own
69
+ /// string (table cells, code block content) call it themselves.
70
+ void ENRMPinLineMetricsToStyledFonts(NSMutableAttributedString *output, NSRange range);
53
71
  void applyBaselineOffset(NSMutableAttributedString *output, NSRange range);
54
72
  void applyTextAlignment(NSMutableAttributedString *output, NSRange range, NSTextAlignment textAlign);
55
73
  NSTextAlignment textAlignmentFromString(NSString *textAlign);
@@ -264,6 +264,26 @@ void applyBlockSpacingAfter(NSMutableAttributedString *output, CGFloat marginBot
264
264
  [output addAttribute:NSParagraphStyleAttributeName value:spacerStyle range:NSMakeRange(spacerLocation, 1)];
265
265
  }
266
266
 
267
+ // UIKit's own key for the pre-substitution font. Not exported by any SDK header, so it is spelled out
268
+ // here; it is the same string UIKit writes into a UITextView's storage when it substitutes a font.
269
+ static NSString *const ENRMOriginalFontAttributeName = @"NSOriginalFont";
270
+
271
+ void ENRMPinLineMetricsToStyledFonts(NSMutableAttributedString *output, NSRange range)
272
+ {
273
+ if (range.length == 0 || NSMaxRange(range) > output.length) {
274
+ return;
275
+ }
276
+
277
+ [output enumerateAttribute:NSFontAttributeName
278
+ inRange:range
279
+ options:0
280
+ usingBlock:^(UIFont *font, NSRange fontRange, __unused BOOL *stop) {
281
+ if (font) {
282
+ [output addAttribute:ENRMOriginalFontAttributeName value:font range:fontRange];
283
+ }
284
+ }];
285
+ }
286
+
267
287
  // Floor, not clamp: minimumLineHeight keeps short lines at lineHeight, while maximumLineHeight = 0 lets
268
288
  // a line grow to fit a taller run (large inline code, math, images) instead of clipping it. We can
269
289
  // diverge from RN's clamp because we measure the real laid-out height, so grown lines are reserved.
@@ -44,6 +44,63 @@
44
44
  [markerDrawer drawMarkersForGlyphRange:glyphsToShow layoutManager:self textContainer:textContainer atPoint:origin];
45
45
  }
46
46
 
47
+ #pragma mark - Decoration baseline correction
48
+
49
+ /// Returns the NSBaselineOffsetAttributeName value for the first character in
50
+ /// the given glyph range, or 0 when the attribute is absent.
51
+ ///
52
+ /// applyBaselineOffset (ParagraphStyleUtils) shifts glyphs upward so text is
53
+ /// vertically centered within a line height larger than the font's natural
54
+ /// height. TextKit 1 does not account for this shift when drawing underline
55
+ /// and strikethrough decorations — it draws them at the original, unshifted
56
+ /// baseline. Reading the attribute here lets the draw overrides below
57
+ /// compensate by the same amount.
58
+ - (CGFloat)baselineShiftForGlyphRange:(NSRange)glyphRange
59
+ {
60
+ NSTextStorage *storage = self.textStorage;
61
+ if (!storage || storage.length == 0)
62
+ return 0;
63
+
64
+ NSUInteger charIndex = [self characterIndexForGlyphAtIndex:glyphRange.location];
65
+ if (charIndex >= storage.length)
66
+ return 0;
67
+
68
+ NSNumber *offset = [storage attribute:NSBaselineOffsetAttributeName atIndex:charIndex effectiveRange:NULL];
69
+ return offset ? offset.doubleValue : 0;
70
+ }
71
+
72
+ - (void)drawUnderlineForGlyphRange:(NSRange)glyphRange
73
+ underlineType:(NSUnderlineStyle)underlineVal
74
+ baselineOffset:(CGFloat)baselineOffset
75
+ lineFragmentRect:(CGRect)lineRect
76
+ lineFragmentGlyphRange:(NSRange)lineGlyphRange
77
+ containerOrigin:(CGPoint)containerOrigin
78
+ {
79
+ CGFloat shift = [self baselineShiftForGlyphRange:glyphRange];
80
+ [super drawUnderlineForGlyphRange:glyphRange
81
+ underlineType:underlineVal
82
+ baselineOffset:baselineOffset + shift
83
+ lineFragmentRect:lineRect
84
+ lineFragmentGlyphRange:lineGlyphRange
85
+ containerOrigin:containerOrigin];
86
+ }
87
+
88
+ - (void)drawStrikethroughForGlyphRange:(NSRange)glyphRange
89
+ strikethroughType:(NSUnderlineStyle)strikethroughVal
90
+ baselineOffset:(CGFloat)baselineOffset
91
+ lineFragmentRect:(CGRect)lineRect
92
+ lineFragmentGlyphRange:(NSRange)lineGlyphRange
93
+ containerOrigin:(CGPoint)containerOrigin
94
+ {
95
+ CGFloat shift = [self baselineShiftForGlyphRange:glyphRange];
96
+ [super drawStrikethroughForGlyphRange:glyphRange
97
+ strikethroughType:strikethroughVal
98
+ baselineOffset:baselineOffset + shift
99
+ lineFragmentRect:lineRect
100
+ lineFragmentGlyphRange:lineGlyphRange
101
+ containerOrigin:containerOrigin];
102
+ }
103
+
47
104
  #pragma mark - Safe Property Accessors
48
105
 
49
106
  // We split these into explicit methods to avoid the 'code 257' pointer corruption
@@ -2,11 +2,13 @@
2
2
 
3
3
  import { useCallback, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef } from 'react';
4
4
  import EnrichedMarkdownTextInputNativeComponent, { Commands } from './EnrichedMarkdownTextInputNativeComponent';
5
+ import { Platform } from 'react-native';
5
6
  import { normalizeMarkdownShortcuts } from "./normalizeMarkdownShortcuts.js";
6
7
  import { normalizeMarkdownTextInputStyle } from "./normalizeMarkdownTextInputStyle.js";
7
8
  import { normalizeMenuItem } from "./normalizeMenuItem.js";
8
9
  import { toNativeRegexConfig } from "./utils/regexParser.js";
9
10
  import { TextInputState } from "./utils/textInputState.js";
11
+ import { usePressability } from "./utils/usePressability.js";
10
12
  import { jsx as _jsx } from "react/jsx-runtime";
11
13
  const VALID_HEADING_LEVELS = new Set([1, 2, 3, 4, 5, 6]);
12
14
  function toHeadingLevel(n) {
@@ -59,6 +61,11 @@ export const EnrichedMarkdownTextInput = ({
59
61
  onEndMention,
60
62
  onFocus,
61
63
  onBlur,
64
+ onPress,
65
+ onPressIn,
66
+ onPressOut,
67
+ hitSlop,
68
+ rejectResponderTermination = true,
62
69
  contextMenuItems,
63
70
  selectionMenuConfig,
64
71
  formatMenuConfig,
@@ -244,6 +251,40 @@ export const EnrichedMarkdownTextInput = ({
244
251
  TextInputState.blurInput(nativeRef.current);
245
252
  onBlur?.();
246
253
  }, [onBlur]);
254
+
255
+ /**
256
+ * React Native TextInput attaches usePressability to the native host so taps
257
+ * claim the JS touch responder and ancestor Pressable handlers do not also
258
+ * run.
259
+ * https://github.com/react/react-native/blob/v0.86.2/packages/react-native/Libraries/Components/TextInput/TextInput.js#L582-L616
260
+ */
261
+ const pressabilityConfig = useMemo(() => ({
262
+ cancelable: Platform.OS === 'ios' ? !rejectResponderTermination : undefined,
263
+ hitSlop,
264
+ onPress: event => {
265
+ onPress?.(event);
266
+ if (editable !== false) {
267
+ // Same call TextInput's host focus() makes. A tap on the text view
268
+ // focuses it natively, which makes this a no-op; it matters when the
269
+ // press lands outside the native view, e.g. in the hitSlop area.
270
+ TextInputState.focusTextInput(nativeRef.current);
271
+ }
272
+ },
273
+ onPressIn,
274
+ onPressOut
275
+ }), [editable, hitSlop, onPress, onPressIn, onPressOut, rejectResponderTermination]);
276
+
277
+ // TextInput handles onBlur and onFocus events
278
+ // so omitting onBlur and onFocus pressability handlers here.
279
+ //
280
+ // Same logic as https://github.com/react/react-native/blob/v0.86.2/packages/react-native/Libraries/Components/TextInput/TextInput.js#L629
281
+ const {
282
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
283
+ onBlur: _onBlur,
284
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
285
+ onFocus: _onFocus,
286
+ ...pressabilityHandlers
287
+ } = usePressability(pressabilityConfig) ?? {};
247
288
  const handleRequestMarkdownResult = useCallback(e => {
248
289
  const {
249
290
  requestId,
@@ -380,8 +421,13 @@ export const EnrichedMarkdownTextInput = ({
380
421
  writingDirection: writingDirection,
381
422
  onStartMention: handleStartMention,
382
423
  onChangeMention: handleChangeMention,
383
- onEndMention: handleEndMention,
384
- ...rest
424
+ onEndMention: handleEndMention
425
+ // Explicitly pass through hitSlop because the native view subclasses
426
+ // RCTViewComponentView and makes use of hitSlop too
427
+ ,
428
+ hitSlop: hitSlop,
429
+ ...rest,
430
+ ...pressabilityHandlers
385
431
  });
386
432
  };
387
433
  export default EnrichedMarkdownTextInput;
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","useImperativeHandle","useLayoutEffect","useMemo","useRef","EnrichedMarkdownTextInputNativeComponent","Commands","normalizeMarkdownShortcuts","normalizeMarkdownTextInputStyle","normalizeMenuItem","toNativeRegexConfig","TextInputState","jsx","_jsx","VALID_HEADING_LEVELS","Set","toHeadingLevel","n","has","getNativeRef","ref","current","Error","EnrichedMarkdownTextInput","markdownStyle","style","defaultValue","placeholder","placeholderTextColor","editable","autoFocus","scrollEnabled","markdownShortcuts","autoCapitalize","multiline","cursorColor","selectionColor","onChangeText","onChangeMarkdown","onChangeSelection","onChangeState","onKeyPress","onCaretRectChange","onLinkDetected","mentionIndicators","onStartMention","onChangeMention","onEndMention","onFocus","onBlur","contextMenuItems","selectionMenuConfig","formatMenuConfig","linkRegex","_linkRegex","writingDirection","rest","nativeRef","initialDefaultValue","nextRequestId","pendingRequests","Map","pendingCaretRectRequests","contextMenuCallbacksRef","callbacksMap","item","set","text","onPress","nativeContextMenuItems","filter","visible","map","icon","pending","pendingCaretRect","err","forEach","reject","clear","instance","registerInput","currentlyFocusedInput","blurTextInput","unregisterInput","normalizedStyle","normalizedSelectionMenuConfig","format","copyAsMarkdown","enabled","formatLabel","label","copyAsMarkdownLabel","normalizedFormatMenuConfig","bold","italic","underline","strikethrough","spoiler","link","boldLabel","italicLabel","underlineLabel","strikethroughLabel","spoilerLabel","linkLabel","normalizedMarkdownShortcuts","handleLinkDetected","e","url","start","end","nativeEvent","handleChangeText","value","handleChangeMarkdown","handleChangeSelection","handleChangeState","heading","unorderedList","orderedList","level","handleCaretRectChange","x","y","width","height","handleStartMention","handleChangeMention","handleEndMention","handleFocus","focusInput","handleBlur","blurInput","handleRequestMarkdownResult","requestId","markdown","get","resolve","delete","handleRequestCaretRectResult","handleContextMenuItemPress","itemText","selectedText","selectionStart","selectionEnd","styleState","callback","selection","node","commandRef","measure","measureInWindow","measureLayout","relativeToNativeNode","onSuccess","onFail","focus","blur","setValue","setSelection","toggleBold","toggleItalic","toggleUnderline","toggleStrikethrough","toggleSpoiler","toggleHeading","toggleUnorderedList","toggleOrderedList","indentList","outdentList","setLink","insertLink","insertText","insertMention","displayText","startMention","indicator","removeLink","copyToClipboard","getMarkdown","Promise","requestMarkdown","getCaretRect","requestCaretRect","isOnChangeMarkdownSet","undefined","onInputKeyPress","onInputFocus","onInputBlur","onRequestMarkdownResult","onRequestCaretRectResult","onContextMenuItemPress"],"sourceRoot":"../../src","sources":["EnrichedMarkdownTextInput.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useEffect","useImperativeHandle","useLayoutEffect","useMemo","useRef","EnrichedMarkdownTextInputNativeComponent","Commands","Platform","normalizeMarkdownShortcuts","normalizeMarkdownTextInputStyle","normalizeMenuItem","toNativeRegexConfig","TextInputState","usePressability","jsx","_jsx","VALID_HEADING_LEVELS","Set","toHeadingLevel","n","has","getNativeRef","ref","current","Error","EnrichedMarkdownTextInput","markdownStyle","style","defaultValue","placeholder","placeholderTextColor","editable","autoFocus","scrollEnabled","markdownShortcuts","autoCapitalize","multiline","cursorColor","selectionColor","onChangeText","onChangeMarkdown","onChangeSelection","onChangeState","onKeyPress","onCaretRectChange","onLinkDetected","mentionIndicators","onStartMention","onChangeMention","onEndMention","onFocus","onBlur","onPress","onPressIn","onPressOut","hitSlop","rejectResponderTermination","contextMenuItems","selectionMenuConfig","formatMenuConfig","linkRegex","_linkRegex","writingDirection","rest","nativeRef","initialDefaultValue","nextRequestId","pendingRequests","Map","pendingCaretRectRequests","contextMenuCallbacksRef","callbacksMap","item","set","text","nativeContextMenuItems","filter","visible","map","icon","pending","pendingCaretRect","err","forEach","reject","clear","instance","registerInput","currentlyFocusedInput","blurTextInput","unregisterInput","normalizedStyle","normalizedSelectionMenuConfig","format","copyAsMarkdown","enabled","formatLabel","label","copyAsMarkdownLabel","normalizedFormatMenuConfig","bold","italic","underline","strikethrough","spoiler","link","boldLabel","italicLabel","underlineLabel","strikethroughLabel","spoilerLabel","linkLabel","normalizedMarkdownShortcuts","handleLinkDetected","e","url","start","end","nativeEvent","handleChangeText","value","handleChangeMarkdown","handleChangeSelection","handleChangeState","heading","unorderedList","orderedList","level","handleCaretRectChange","x","y","width","height","handleStartMention","handleChangeMention","handleEndMention","handleFocus","focusInput","handleBlur","blurInput","pressabilityConfig","cancelable","OS","undefined","event","focusTextInput","_onBlur","_onFocus","pressabilityHandlers","handleRequestMarkdownResult","requestId","markdown","get","resolve","delete","handleRequestCaretRectResult","handleContextMenuItemPress","itemText","selectedText","selectionStart","selectionEnd","styleState","callback","selection","node","commandRef","measure","measureInWindow","measureLayout","relativeToNativeNode","onSuccess","onFail","focus","blur","setValue","setSelection","toggleBold","toggleItalic","toggleUnderline","toggleStrikethrough","toggleSpoiler","toggleHeading","toggleUnorderedList","toggleOrderedList","indentList","outdentList","setLink","insertLink","insertText","insertMention","displayText","startMention","indicator","removeLink","copyToClipboard","getMarkdown","Promise","requestMarkdown","getCaretRect","requestCaretRect","isOnChangeMarkdownSet","onInputKeyPress","onInputFocus","onInputBlur","onRequestMarkdownResult","onRequestCaretRectResult","onContextMenuItemPress"],"sourceRoot":"../../src","sources":["EnrichedMarkdownTextInput.tsx"],"mappings":"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","ignoreList":[]}
@@ -5,9 +5,10 @@
5
5
  * registry so it participates in RN's keyboard-dismiss behavior (issue #577).
6
6
  *
7
7
  * Registering a non-TextInput host component is safe: TextInputState's
8
- * blurTextInput dispatches the built-in TextInput's "blur" command at the
9
- * registered instance, and Fabric command dispatch is name-based — it works
10
- * as long as the component ships a command with that name, which ours does.
8
+ * focusTextInput and blurTextInput dispatch the built-in TextInput's "focus"
9
+ * and "blur" commands at the given instance, and Fabric command dispatch is
10
+ * name-based — it works as long as the component ships commands with those
11
+ * names, which ours does.
11
12
  *
12
13
  * A deep import is required because the public TextInput.State API lacks the
13
14
  * registerInput/focusInput/blurInput bookkeeping functions.
@@ -1 +1 @@
1
- {"version":3,"names":["TextInputStateModuleImpl","require","TextInputState","default"],"sourceRoot":"../../../src","sources":["utils/textInputState.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAYA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,wBAAwB;AAC5B;AACAC,OAAO,CAAC,4DAA4D,CAAC;AAEvE,OAAO,MAAMC,cAAc,GAAIF,wBAAwB,CAACG,OAAO,IAC7DH,wBAAiD","ignoreList":[]}
1
+ {"version":3,"names":["TextInputStateModuleImpl","require","TextInputState","default"],"sourceRoot":"../../../src","sources":["utils/textInputState.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAaA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,wBAAwB;AAC5B;AACAC,OAAO,CAAC,4DAA4D,CAAC;AAEvE,OAAO,MAAMC,cAAc,GAAIF,wBAAwB,CAACG,OAAO,IAC7DH,wBAAiD","ignoreList":[]}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Deep import of React Native's `usePressability`.
5
+ *
6
+ * The hook only became a root `react-native` export around 0.84. The peer
7
+ * dependency is `react-native: "*"`, so a named root import is `undefined`
8
+ * before that.
9
+ *
10
+ * `Libraries/Pressability/usePressability.js` exists on those versions, so
11
+ * we use that deep import instead.
12
+ *
13
+ * The export shape has changed across versions: newer ones use `export
14
+ * default` (surfacing as `.default` after Metro's CJS transform) while older
15
+ * ones assigned `module.exports` directly. A raw require bypasses Babel's
16
+ * import interop, so both shapes are handled here.
17
+ */
18
+
19
+ /**
20
+ * Copied from the type for usePressability in
21
+ * packages/react-native-enriched-markdown/node_modules/react-native/types_generated/Libraries/Pressability/usePressability.d.ts
22
+ */
23
+
24
+ const usePressabilityModule =
25
+ // eslint-disable-next-line @react-native/no-deep-imports
26
+ require('react-native/Libraries/Pressability/usePressability');
27
+ export const usePressability = usePressabilityModule.default ?? usePressabilityModule;
28
+ //# sourceMappingURL=usePressability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["usePressabilityModule","require","usePressability","default"],"sourceRoot":"../../../src","sources":["utils/usePressability.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;;AAKA,MAAMA,qBAAqB;AACzB;AACAC,OAAO,CAAC,qDAAqD,CAAC;AAEhE,OAAO,MAAMC,eAAe,GAAIF,qBAAqB,CAACG,OAAO,IAC3DH,qBAAyC","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import { type OnKeyPressEvent, type OnLinkDetected, type OnStartMentionEvent, type OnChangeMentionEvent, type OnEndMentionEvent } from './EnrichedMarkdownTextInputNativeComponent';
2
2
  export type { OnKeyPressEvent, OnLinkDetected, OnStartMentionEvent, OnChangeMentionEvent, OnEndMentionEvent, } from './EnrichedMarkdownTextInputNativeComponent';
3
- import type { HostInstance, NativeSyntheticEvent, ViewProps, ViewStyle, TextStyle, ColorValue } from 'react-native';
3
+ import type { HostInstance, NativeSyntheticEvent, TextInputProps, ViewProps, ViewStyle, TextStyle, ColorValue } from 'react-native';
4
4
  import type { RefObject } from 'react';
5
5
  export interface LinkStyle {
6
6
  color?: string;
@@ -175,7 +175,7 @@ export interface MarkdownShortcutsConfig {
175
175
  /** `1.` or `1)` + space. @default false */
176
176
  orderedList?: boolean;
177
177
  }
178
- export interface EnrichedMarkdownTextInputProps extends Omit<ViewProps, 'style' | 'children'> {
178
+ export interface EnrichedMarkdownTextInputProps extends Omit<ViewProps, 'style' | 'children'>, Pick<TextInputProps, 'onPress' | 'onPressIn' | 'onPressOut' | 'rejectResponderTermination'> {
179
179
  ref?: RefObject<EnrichedMarkdownTextInputInstance | null>;
180
180
  defaultValue?: string;
181
181
  placeholder?: string;
@@ -252,6 +252,6 @@ export interface EnrichedMarkdownTextInputProps extends Omit<ViewProps, 'style'
252
252
  */
253
253
  writingDirection?: 'auto' | 'ltr' | 'rtl' | 'first-strong';
254
254
  }
255
- export declare const EnrichedMarkdownTextInput: ({ ref, markdownStyle, style, defaultValue, placeholder, placeholderTextColor, editable, autoFocus, scrollEnabled, markdownShortcuts, autoCapitalize, multiline, cursorColor, selectionColor, onChangeText, onChangeMarkdown, onChangeSelection, onChangeState, onKeyPress, onCaretRectChange, onLinkDetected, mentionIndicators, onStartMention, onChangeMention, onEndMention, onFocus, onBlur, contextMenuItems, selectionMenuConfig, formatMenuConfig, linkRegex: _linkRegex, writingDirection, ...rest }: EnrichedMarkdownTextInputProps) => import("react/jsx-runtime").JSX.Element;
255
+ export declare const EnrichedMarkdownTextInput: ({ ref, markdownStyle, style, defaultValue, placeholder, placeholderTextColor, editable, autoFocus, scrollEnabled, markdownShortcuts, autoCapitalize, multiline, cursorColor, selectionColor, onChangeText, onChangeMarkdown, onChangeSelection, onChangeState, onKeyPress, onCaretRectChange, onLinkDetected, mentionIndicators, onStartMention, onChangeMention, onEndMention, onFocus, onBlur, onPress, onPressIn, onPressOut, hitSlop, rejectResponderTermination, contextMenuItems, selectionMenuConfig, formatMenuConfig, linkRegex: _linkRegex, writingDirection, ...rest }: EnrichedMarkdownTextInputProps) => import("react/jsx-runtime").JSX.Element;
256
256
  export default EnrichedMarkdownTextInput;
257
257
  //# sourceMappingURL=EnrichedMarkdownTextInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EnrichedMarkdownTextInput.d.ts","sourceRoot":"","sources":["../../../src/EnrichedMarkdownTextInput.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EnrichedMarkdownTextInput.d.ts","sourceRoot":"","sources":["../../../src/EnrichedMarkdownTextInput.tsx"],"names":[],"mappings":"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"}
@@ -3,9 +3,10 @@
3
3
  * registry so it participates in RN's keyboard-dismiss behavior (issue #577).
4
4
  *
5
5
  * Registering a non-TextInput host component is safe: TextInputState's
6
- * blurTextInput dispatches the built-in TextInput's "blur" command at the
7
- * registered instance, and Fabric command dispatch is name-based — it works
8
- * as long as the component ships a command with that name, which ours does.
6
+ * focusTextInput and blurTextInput dispatch the built-in TextInput's "focus"
7
+ * and "blur" commands at the given instance, and Fabric command dispatch is
8
+ * name-based — it works as long as the component ships commands with those
9
+ * names, which ours does.
9
10
  *
10
11
  * A deep import is required because the public TextInput.State API lacks the
11
12
  * registerInput/focusInput/blurInput bookkeeping functions.
@@ -16,6 +17,7 @@ interface TextInputStateModule {
16
17
  unregisterInput(input: HostInstance): void;
17
18
  focusInput(input: HostInstance | null): void;
18
19
  blurInput(input: HostInstance | null): void;
20
+ focusTextInput(input: HostInstance | null): void;
19
21
  blurTextInput(input: HostInstance | null): void;
20
22
  currentlyFocusedInput(): HostInstance | null;
21
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"textInputState.d.ts","sourceRoot":"","sources":["../../../../src/utils/textInputState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,UAAU,oBAAoB;IAC5B,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACzC,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3C,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;IAC7C,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;IAC5C,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;IAChD,qBAAqB,IAAI,YAAY,GAAG,IAAI,CAAC;CAC9C;AAYD,eAAO,MAAM,cAAc,EACI,oBAAoB,CAAC"}
1
+ {"version":3,"file":"textInputState.d.ts","sourceRoot":"","sources":["../../../../src/utils/textInputState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,UAAU,oBAAoB;IAC5B,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACzC,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3C,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;IAC7C,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;IAC5C,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;IACjD,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;IAChD,qBAAqB,IAAI,YAAY,GAAG,IAAI,CAAC;CAC9C;AAYD,eAAO,MAAM,cAAc,EACI,oBAAoB,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Deep import of React Native's `usePressability`.
3
+ *
4
+ * The hook only became a root `react-native` export around 0.84. The peer
5
+ * dependency is `react-native: "*"`, so a named root import is `undefined`
6
+ * before that.
7
+ *
8
+ * `Libraries/Pressability/usePressability.js` exists on those versions, so
9
+ * we use that deep import instead.
10
+ *
11
+ * The export shape has changed across versions: newer ones use `export
12
+ * default` (surfacing as `.default` after Metro's CJS transform) while older
13
+ * ones assigned `module.exports` directly. A raw require bypasses Babel's
14
+ * import interop, so both shapes are handled here.
15
+ */
16
+ import type { PressabilityConfig, PressabilityEventHandlers } from 'react-native';
17
+ /**
18
+ * Copied from the type for usePressability in
19
+ * packages/react-native-enriched-markdown/node_modules/react-native/types_generated/Libraries/Pressability/usePressability.d.ts
20
+ */
21
+ type UsePressability = (config: null | undefined | PressabilityConfig) => null | PressabilityEventHandlers;
22
+ export declare const usePressability: UsePressability;
23
+ export {};
24
+ //# sourceMappingURL=usePressability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePressability.d.ts","sourceRoot":"","sources":["../../../../src/utils/usePressability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EACV,kBAAkB,EAClB,yBAAyB,EAC1B,MAAM,cAAc,CAAC;AAEtB;;;GAGG;AACH,KAAK,eAAe,GAAG,CACrB,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,kBAAkB,KAC1C,IAAI,GAAG,yBAAyB,CAAC;AAMtC,eAAO,MAAM,eAAe,EACA,eAAe,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-enriched-markdown",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "Markdown-based Rich Text solution for React Native",
5
5
  "main": "./lib/module/index",
6
6
  "module": "./lib/module/index",
@@ -32,18 +32,22 @@ export type {
32
32
  OnEndMentionEvent,
33
33
  } from './EnrichedMarkdownTextInputNativeComponent';
34
34
  import type {
35
+ GestureResponderEvent,
35
36
  HostInstance,
36
37
  NativeSyntheticEvent,
38
+ TextInputProps,
37
39
  ViewProps,
38
40
  ViewStyle,
39
41
  TextStyle,
40
42
  ColorValue,
41
43
  } from 'react-native';
44
+ import { Platform } from 'react-native';
42
45
  import { normalizeMarkdownShortcuts } from './normalizeMarkdownShortcuts';
43
46
  import { normalizeMarkdownTextInputStyle } from './normalizeMarkdownTextInputStyle';
44
47
  import { normalizeMenuItem } from './normalizeMenuItem';
45
48
  import { toNativeRegexConfig } from './utils/regexParser';
46
49
  import { TextInputState } from './utils/textInputState';
50
+ import { usePressability } from './utils/usePressability';
47
51
  import type { RefObject } from 'react';
48
52
 
49
53
  type NativeRef = HostInstance;
@@ -212,10 +216,14 @@ export interface MarkdownShortcutsConfig {
212
216
  orderedList?: boolean;
213
217
  }
214
218
 
215
- export interface EnrichedMarkdownTextInputProps extends Omit<
216
- ViewProps,
217
- 'style' | 'children'
218
- > {
219
+ export interface EnrichedMarkdownTextInputProps
220
+ extends
221
+ Omit<ViewProps, 'style' | 'children'>,
222
+ // Same press props as React Native TextInput; `hitSlop` comes from ViewProps.
223
+ Pick<
224
+ TextInputProps,
225
+ 'onPress' | 'onPressIn' | 'onPressOut' | 'rejectResponderTermination'
226
+ > {
219
227
  ref?: RefObject<EnrichedMarkdownTextInputInstance | null>;
220
228
  defaultValue?: string;
221
229
  placeholder?: string;
@@ -332,6 +340,11 @@ export const EnrichedMarkdownTextInput = ({
332
340
  onEndMention,
333
341
  onFocus,
334
342
  onBlur,
343
+ onPress,
344
+ onPressIn,
345
+ onPressOut,
346
+ hitSlop,
347
+ rejectResponderTermination = true,
335
348
  contextMenuItems,
336
349
  selectionMenuConfig,
337
350
  formatMenuConfig,
@@ -567,6 +580,51 @@ export const EnrichedMarkdownTextInput = ({
567
580
  onBlur?.();
568
581
  }, [onBlur]);
569
582
 
583
+ /**
584
+ * React Native TextInput attaches usePressability to the native host so taps
585
+ * claim the JS touch responder and ancestor Pressable handlers do not also
586
+ * run.
587
+ * https://github.com/react/react-native/blob/v0.86.2/packages/react-native/Libraries/Components/TextInput/TextInput.js#L582-L616
588
+ */
589
+ const pressabilityConfig = useMemo(
590
+ () => ({
591
+ cancelable:
592
+ Platform.OS === 'ios' ? !rejectResponderTermination : undefined,
593
+ hitSlop,
594
+ onPress: (event: GestureResponderEvent) => {
595
+ onPress?.(event);
596
+ if (editable !== false) {
597
+ // Same call TextInput's host focus() makes. A tap on the text view
598
+ // focuses it natively, which makes this a no-op; it matters when the
599
+ // press lands outside the native view, e.g. in the hitSlop area.
600
+ TextInputState.focusTextInput(nativeRef.current);
601
+ }
602
+ },
603
+ onPressIn,
604
+ onPressOut,
605
+ }),
606
+ [
607
+ editable,
608
+ hitSlop,
609
+ onPress,
610
+ onPressIn,
611
+ onPressOut,
612
+ rejectResponderTermination,
613
+ ]
614
+ );
615
+
616
+ // TextInput handles onBlur and onFocus events
617
+ // so omitting onBlur and onFocus pressability handlers here.
618
+ //
619
+ // Same logic as https://github.com/react/react-native/blob/v0.86.2/packages/react-native/Libraries/Components/TextInput/TextInput.js#L629
620
+ const {
621
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
622
+ onBlur: _onBlur,
623
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
624
+ onFocus: _onFocus,
625
+ ...pressabilityHandlers
626
+ } = usePressability(pressabilityConfig) ?? {};
627
+
570
628
  const handleRequestMarkdownResult = useCallback(
571
629
  (e: NativeSyntheticEvent<OnRequestMarkdownResultEvent>) => {
572
630
  const { requestId, markdown } = e.nativeEvent;
@@ -715,7 +773,11 @@ export const EnrichedMarkdownTextInput = ({
715
773
  onStartMention={handleStartMention as NativeProps['onStartMention']}
716
774
  onChangeMention={handleChangeMention as NativeProps['onChangeMention']}
717
775
  onEndMention={handleEndMention as NativeProps['onEndMention']}
776
+ // Explicitly pass through hitSlop because the native view subclasses
777
+ // RCTViewComponentView and makes use of hitSlop too
778
+ hitSlop={hitSlop}
718
779
  {...rest}
780
+ {...pressabilityHandlers}
719
781
  />
720
782
  );
721
783
  };
@@ -3,9 +3,10 @@
3
3
  * registry so it participates in RN's keyboard-dismiss behavior (issue #577).
4
4
  *
5
5
  * Registering a non-TextInput host component is safe: TextInputState's
6
- * blurTextInput dispatches the built-in TextInput's "blur" command at the
7
- * registered instance, and Fabric command dispatch is name-based — it works
8
- * as long as the component ships a command with that name, which ours does.
6
+ * focusTextInput and blurTextInput dispatch the built-in TextInput's "focus"
7
+ * and "blur" commands at the given instance, and Fabric command dispatch is
8
+ * name-based — it works as long as the component ships commands with those
9
+ * names, which ours does.
9
10
  *
10
11
  * A deep import is required because the public TextInput.State API lacks the
11
12
  * registerInput/focusInput/blurInput bookkeeping functions.
@@ -17,6 +18,7 @@ interface TextInputStateModule {
17
18
  unregisterInput(input: HostInstance): void;
18
19
  focusInput(input: HostInstance | null): void;
19
20
  blurInput(input: HostInstance | null): void;
21
+ focusTextInput(input: HostInstance | null): void;
20
22
  blurTextInput(input: HostInstance | null): void;
21
23
  currentlyFocusedInput(): HostInstance | null;
22
24
  }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Deep import of React Native's `usePressability`.
3
+ *
4
+ * The hook only became a root `react-native` export around 0.84. The peer
5
+ * dependency is `react-native: "*"`, so a named root import is `undefined`
6
+ * before that.
7
+ *
8
+ * `Libraries/Pressability/usePressability.js` exists on those versions, so
9
+ * we use that deep import instead.
10
+ *
11
+ * The export shape has changed across versions: newer ones use `export
12
+ * default` (surfacing as `.default` after Metro's CJS transform) while older
13
+ * ones assigned `module.exports` directly. A raw require bypasses Babel's
14
+ * import interop, so both shapes are handled here.
15
+ */
16
+ import type {
17
+ PressabilityConfig,
18
+ PressabilityEventHandlers,
19
+ } from 'react-native';
20
+
21
+ /**
22
+ * Copied from the type for usePressability in
23
+ * packages/react-native-enriched-markdown/node_modules/react-native/types_generated/Libraries/Pressability/usePressability.d.ts
24
+ */
25
+ type UsePressability = (
26
+ config: null | undefined | PressabilityConfig
27
+ ) => null | PressabilityEventHandlers;
28
+
29
+ const usePressabilityModule =
30
+ // eslint-disable-next-line @react-native/no-deep-imports
31
+ require('react-native/Libraries/Pressability/usePressability');
32
+
33
+ export const usePressability = (usePressabilityModule.default ??
34
+ usePressabilityModule) as UsePressability;