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.
- package/README.md +1 -1
- package/android/src/main/java/com/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputView.kt +43 -5
- package/android/src/main/java/com/swmansion/enriched/markdown/input/layout/InputEventEmitter.kt +9 -8
- package/docs/API_REFERENCE.md +24 -0
- package/docs/BREAKING_CHANGES.md +5 -0
- package/ios/EnrichedMarkdown.mm +3 -0
- package/ios/internals/ShadowMeasurementUtils.h +1 -2
- package/ios/renderer/ListItemRenderer.m +38 -1
- package/ios/segments/ENRMBlockquoteContainerView.h +6 -0
- package/ios/segments/ENRMBlockquoteContainerView.mm +28 -0
- package/ios/segments/TableContainerView.m +1 -0
- package/ios/utils/ENRMCodeBlockContent.mm +2 -0
- package/ios/utils/ENRMTextRenderer.m +1 -0
- package/ios/utils/MarkdownAccessibilityElementBuilder.m +4 -2
- package/ios/utils/ParagraphStyleUtils.h +18 -0
- package/ios/utils/ParagraphStyleUtils.m +20 -0
- package/ios/utils/TextViewLayoutManager.mm +57 -0
- package/lib/module/EnrichedMarkdownTextInput.js +48 -2
- package/lib/module/EnrichedMarkdownTextInput.js.map +1 -1
- package/lib/module/utils/textInputState.js +4 -3
- package/lib/module/utils/textInputState.js.map +1 -1
- package/lib/module/utils/usePressability.js +28 -0
- package/lib/module/utils/usePressability.js.map +1 -0
- package/lib/typescript/src/EnrichedMarkdownTextInput.d.ts +3 -3
- package/lib/typescript/src/EnrichedMarkdownTextInput.d.ts.map +1 -1
- package/lib/typescript/src/utils/textInputState.d.ts +5 -3
- package/lib/typescript/src/utils/textInputState.d.ts.map +1 -1
- package/lib/typescript/src/utils/usePressability.d.ts +24 -0
- package/lib/typescript/src/utils/usePressability.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/EnrichedMarkdownTextInput.tsx +66 -4
- package/src/utils/textInputState.ts +5 -3
- 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.
|
|
265
|
+
| **1.1.x** | ⛔ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
266
266
|
| **1.0.x** | ⛔ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
267
267
|
| **0.7.0** | ⛔ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
|
268
268
|
| **0.6.0** | ⛔ | ✅ | ✅ | ✅ | ⛔ | ⛔ |
|
package/android/src/main/java/com/swmansion/enriched/markdown/input/EnrichedMarkdownTextInputView.kt
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
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() {
|
package/android/src/main/java/com/swmansion/enriched/markdown/input/layout/InputEventEmitter.kt
CHANGED
|
@@ -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
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
val
|
|
243
|
-
dispatcher
|
|
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
|
}
|
package/docs/API_REFERENCE.md
CHANGED
|
@@ -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).
|
package/docs/BREAKING_CHANGES.md
CHANGED
|
@@ -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
|
package/ios/EnrichedMarkdown.mm
CHANGED
|
@@ -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
|
|
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) {
|
|
@@ -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
|
-
|
|
178
|
-
|
|
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
|
-
|
|
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
|
|
9
|
-
*
|
|
10
|
-
* as long as the component ships
|
|
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;;
|
|
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":"AASA,OAAiD,EAO/C,KAAK,eAAe,EAKpB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACvB,MAAM,4CAA4C,CAAC;AACpD,YAAY,EACV,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,
|
|
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
|
|
7
|
-
*
|
|
8
|
-
* as long as the component ships
|
|
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
|
|
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
|
@@ -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
|
|
216
|
-
|
|
217
|
-
|
|
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
|
|
7
|
-
*
|
|
8
|
-
* as long as the component ships
|
|
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;
|