···11+diff --git a/node_modules/react-native/Libraries/Text/TextInput/RCTBaseTextInputView.mm b/node_modules/react-native/Libraries/Text/TextInput/RCTBaseTextInputView.mm
22+index b0d71dc..9974932 100644
33+--- a/node_modules/react-native/Libraries/Text/TextInput/RCTBaseTextInputView.mm
44++++ b/node_modules/react-native/Libraries/Text/TextInput/RCTBaseTextInputView.mm
55+@@ -377,10 +377,6 @@ - (void)textInputDidBeginEditing
66+ self.backedTextInputView.attributedText = [NSAttributedString new];
77+ }
88+99+- if (_selectTextOnFocus) {
1010+- [self.backedTextInputView selectAll:nil];
1111+- }
1212+-
1313+ [_eventDispatcher sendTextEventWithType:RCTTextEventTypeFocus
1414+ reactTag:self.reactTag
1515+ text:[self.backedTextInputView.attributedText.string copy]
1616+@@ -611,6 +607,10 @@ - (UIView *)reactAccessibilityElement
1717+ - (void)reactFocus
1818+ {
1919+ [self.backedTextInputView reactFocus];
2020++
2121++ if (_selectTextOnFocus) {
2222++ [self.backedTextInputView selectAll:nil];
2323++ }
2424+ }
2525+2626+ - (void)reactBlur
127diff --git a/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.h b/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.h
228index e9b330f..1ecdf0a 100644
329--- a/node_modules/react-native/React/Views/RefreshControl/RCTRefreshControl.h
···531@@ -16,4 +16,6 @@
632 @property (nonatomic, copy) RCTDirectEventBlock onRefresh;
733 @property (nonatomic, weak) UIScrollView *scrollView;
88-3434+935+- (void)forwarderBeginRefreshing;
1036+
1137 @end
···1642@@ -198,9 +198,53 @@ - (void)refreshControlValueChanged
1743 [self setCurrentRefreshingState:super.refreshing];
1844 _refreshingProgrammatically = NO;
1919-4545+2046+ if (@available(iOS 17.4, *)) {
2147+ if (_currentRefreshingState) {
2248+ UIImpactFeedbackGenerator *feedbackGenerator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleLight];
···2955 _onRefresh(nil);
3056 }
3157 }
3232-5858+3359+/*
3460+ This method is used by Bluesky's ExpoScrollForwarder. This allows other React Native
3561+ libraries to perform a refresh of a scrollview and access the refresh control's onRefresh
···3864+- (void)forwarderBeginRefreshing
3965+{
4066+ _refreshingProgrammatically = NO;
4141-+
6767++
4268+ [self sizeToFit];
4343-+
6969++
4470+ if (!self.scrollView) {
4571+ return;
4672+ }
4747-+
7373++
4874+ UIScrollView *scrollView = (UIScrollView *)self.scrollView;
4949-+
7575++
5076+ [UIView animateWithDuration:0.3
5177+ delay:0
5278+ options:UIViewAnimationOptionBeginFromCurrentState
···5884+ completion:^(__unused BOOL finished) {
5985+ [super beginRefreshing];
6086+ [self setCurrentRefreshingState:super.refreshing];
6161-+
8787++
6288+ if (self->_onRefresh) {
6389+ self->_onRefresh(nil);
6490+ }
···7399+++ b/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/core/JavaTimerManager.java
74100@@ -99,8 +99,9 @@ public class JavaTimerManager {
75101 }
7676-102102+77103 // If the JS thread is busy for multiple frames we cancel any other pending runnable.
78104- if (mCurrentIdleCallbackRunnable != null) {
79105- mCurrentIdleCallbackRunnable.cancel();
···81107+ if (currentRunnable != null) {
82108+ currentRunnable.cancel();
83109 }
8484-110110+85111 mCurrentIdleCallbackRunnable = new IdleCallbackRunnable(frameTimeNanos);
+7
patches/react-native+0.74.1.patch.md
···1111Patching `RCTRefreshControl.m` and `RCTRefreshControl.h` to add a new `forwarderBeginRefreshing` method to the class.
1212This method is used by `ExpoScrollForwarder` to initiate a refresh of the underlying `UIScrollView` from inside that
1313module.
1414+1515+1616+## TextInput Patch - `selectTextOnFocus` fix
1717+1818+Patching `RCTBaseTextInputView.m` to fix an issue where `selectTextOnFocus` does not work as expected on iOS 17. This
1919+patch _only_ fixes the Paper version of `TextInput`. If we migrate to Fabric and the fix has not been made upstream,
2020+we can apply the same fix. See https://github.com/facebook/react-native/pull/44307.
+1-7
src/view/screens/Search/Search.tsx
···3030import {NavigationProp} from '#/lib/routes/types'
3131import {augmentSearchQuery} from '#/lib/strings/helpers'
3232import {logger} from '#/logger'
3333-import {isIOS, isNative, isWeb} from '#/platform/detection'
3333+import {isNative, isWeb} from '#/platform/detection'
3434import {listenSoftReset} from '#/state/events'
3535import {useModerationOpts} from '#/state/preferences/moderation-opts'
3636import {useActorAutocompleteQuery} from '#/state/queries/actor-autocomplete'
···802802 })
803803 } else {
804804 setShowAutocomplete(true)
805805- if (isIOS) {
806806- // We rely on selectTextOnFocus, but it's broken on iOS:
807807- // https://github.com/facebook/react-native/issues/41988
808808- textInput.current?.setSelection(0, searchText.length)
809809- // We still rely on selectTextOnFocus for it to be instant on Android.
810810- }
811805 }
812806 }}
813807 onChangeText={onChangeText}