react-native-screens 4.5.0 → 4.6.0-beta.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 (68) hide show
  1. package/android/build.gradle +1 -1
  2. package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledHeaderConfigViewGroup.kt +31 -10
  3. package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledHeaderSubviewViewGroup.kt +51 -0
  4. package/android/src/main/java/com/swmansion/rnscreens/CustomToolbar.kt +12 -2
  5. package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +0 -26
  6. package/android/src/main/java/com/swmansion/rnscreens/ScreenModalFragment.kt +4 -1
  7. package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +16 -7
  8. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +5 -0
  9. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +1 -0
  10. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +12 -7
  11. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +13 -0
  12. package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +7 -0
  13. package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/BottomSheetBehaviorExt.kt +6 -3
  14. package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/BottomSheetDialogRootView.kt +1 -1
  15. package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/DimmingView.kt +1 -2
  16. package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/GestureTransparentViewGroup.kt +0 -1
  17. package/android/src/main/java/com/swmansion/rnscreens/bottomsheet/SheetUtils.kt +2 -2
  18. package/android/src/main/java/com/swmansion/rnscreens/utils/ScreenDummyLayoutHelper.kt +6 -3
  19. package/android/src/main/jni/rnscreens.h +1 -0
  20. package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledHeaderConfigViewGroup.kt +9 -1
  21. package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledHeaderSubviewViewGroup.kt +19 -0
  22. package/common/cpp/react/renderer/components/rnscreens/RNSFullWindowOverlayComponentDescriptor.h +17 -0
  23. package/common/cpp/react/renderer/components/rnscreens/RNSFullWindowOverlayShadowNode.cpp +7 -0
  24. package/common/cpp/react/renderer/components/rnscreens/RNSFullWindowOverlayShadowNode.h +35 -0
  25. package/common/cpp/react/renderer/components/rnscreens/RNSFullWindowOverlayState.h +30 -0
  26. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigComponentDescriptor.h +12 -2
  27. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigShadowNode.cpp +12 -0
  28. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigShadowNode.h +4 -0
  29. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigState.cpp +4 -10
  30. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigState.h +15 -9
  31. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewComponentDescriptor.h +20 -0
  32. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewShadowNode.cpp +14 -0
  33. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewShadowNode.h +2 -0
  34. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewState.cpp +3 -1
  35. package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewState.h +16 -2
  36. package/ios/RNSFullWindowOverlay.mm +10 -0
  37. package/ios/RNSScreenStack.mm +11 -7
  38. package/ios/RNSScreenStackHeaderConfig.h +21 -7
  39. package/ios/RNSScreenStackHeaderConfig.mm +77 -17
  40. package/ios/RNSScreenStackHeaderSubview.h +4 -0
  41. package/ios/RNSScreenStackHeaderSubview.mm +26 -1
  42. package/lib/commonjs/components/ScreenStackHeaderConfig.js +0 -1
  43. package/lib/commonjs/components/ScreenStackHeaderConfig.js.map +1 -1
  44. package/lib/commonjs/fabric/FullWindowOverlayNativeComponent.js +3 -1
  45. package/lib/commonjs/fabric/FullWindowOverlayNativeComponent.js.map +1 -1
  46. package/lib/commonjs/gesture-handler/ScreenGestureDetector.js +12 -0
  47. package/lib/commonjs/gesture-handler/ScreenGestureDetector.js.map +1 -1
  48. package/lib/commonjs/gesture-handler/defaults.js +1 -2
  49. package/lib/commonjs/gesture-handler/defaults.js.map +1 -1
  50. package/lib/module/components/ScreenStackHeaderConfig.js +0 -1
  51. package/lib/module/components/ScreenStackHeaderConfig.js.map +1 -1
  52. package/lib/module/fabric/FullWindowOverlayNativeComponent.js +3 -1
  53. package/lib/module/fabric/FullWindowOverlayNativeComponent.js.map +1 -1
  54. package/lib/module/gesture-handler/ScreenGestureDetector.js +12 -0
  55. package/lib/module/gesture-handler/ScreenGestureDetector.js.map +1 -1
  56. package/lib/module/gesture-handler/defaults.js +1 -2
  57. package/lib/module/gesture-handler/defaults.js.map +1 -1
  58. package/lib/typescript/fabric/FullWindowOverlayNativeComponent.d.ts.map +1 -1
  59. package/lib/typescript/gesture-handler/ScreenGestureDetector.d.ts.map +1 -1
  60. package/lib/typescript/gesture-handler/defaults.d.ts.map +1 -1
  61. package/lib/typescript/types.d.ts +25 -3
  62. package/lib/typescript/types.d.ts.map +1 -1
  63. package/package.json +10 -9
  64. package/src/components/ScreenStackHeaderConfig.tsx +0 -1
  65. package/src/fabric/FullWindowOverlayNativeComponent.ts +3 -1
  66. package/src/gesture-handler/ScreenGestureDetector.tsx +14 -2
  67. package/src/gesture-handler/defaults.ts +0 -1
  68. package/src/types.tsx +25 -3
@@ -5,6 +5,18 @@ namespace facebook::react {
5
5
  extern const char RNSScreenStackHeaderConfigComponentName[] =
6
6
  "RNSScreenStackHeaderConfig";
7
7
 
8
+ void RNSScreenStackHeaderConfigShadowNode::layout(LayoutContext layoutContext) {
9
+ YogaLayoutableShadowNode::layout(layoutContext);
10
+ applyFrameCorrections();
11
+ }
12
+
13
+ void RNSScreenStackHeaderConfigShadowNode::applyFrameCorrections() {
14
+ ensureUnsealed();
15
+
16
+ const auto &stateData = getStateData();
17
+ layoutMetrics_.frame.origin.y = -stateData.frameSize.height;
18
+ }
19
+
8
20
  #if !defined(ANDROID) && !defined(NDEBUG)
9
21
  void RNSScreenStackHeaderConfigShadowNode::setImageLoader(
10
22
  std::weak_ptr<void> imageLoader) {
@@ -25,13 +25,17 @@ class JSI_EXPORT RNSScreenStackHeaderConfigShadowNode final
25
25
  using StateData = ConcreteViewShadowNode::ConcreteStateData;
26
26
 
27
27
  #pragma mark - ShadowNode overrides
28
+ void layout(LayoutContext layoutContext) override;
28
29
 
29
30
  #pragma mark - Custom interface
31
+
30
32
  #if !defined(ANDROID) && !defined(NDEBUG)
31
33
  void setImageLoader(std::weak_ptr<void> imageLoader);
32
34
  #endif // !ANDROID && !NDEBUG
33
35
 
34
36
  private:
37
+ void applyFrameCorrections();
38
+
35
39
  #if !defined(ANDROID) && !defined(NDEBUG)
36
40
  StateData &getStateDataMutable();
37
41
  #endif // !ANDROID && !NDEBUG
@@ -1,3 +1,4 @@
1
+
1
2
  #include "RNSScreenStackHeaderConfigState.h"
2
3
 
3
4
  namespace facebook {
@@ -5,8 +6,9 @@ namespace react {
5
6
 
6
7
  #ifdef ANDROID
7
8
  folly::dynamic RNSScreenStackHeaderConfigState::getDynamic() const {
8
- return folly::dynamic::object("paddingStart", paddingStart_)(
9
- "paddingEnd_", paddingEnd_);
9
+ return folly::dynamic::object("frameWidth", frameSize.width)(
10
+ "frameHeight", frameSize.height)("paddingStart", paddingStart)(
11
+ "paddingEnd", paddingEnd);
10
12
  }
11
13
  #else // ANDROID
12
14
  #ifndef NDEBUG
@@ -22,13 +24,5 @@ std::weak_ptr<void> RNSScreenStackHeaderConfigState::getImageLoader()
22
24
  #endif // !NDEBUG
23
25
  #endif // ANDROID
24
26
 
25
- Float RNSScreenStackHeaderConfigState::getPaddingStart() const noexcept {
26
- return paddingStart_;
27
- }
28
-
29
- Float RNSScreenStackHeaderConfigState::getPaddingEnd() const noexcept {
30
- return paddingEnd_;
31
- }
32
-
33
27
  } // namespace react
34
28
  } // namespace facebook
@@ -17,15 +17,20 @@ class JSI_EXPORT RNSScreenStackHeaderConfigState final {
17
17
 
18
18
  RNSScreenStackHeaderConfigState() = default;
19
19
 
20
- RNSScreenStackHeaderConfigState(Float paddingStart, Float paddingEnd)
21
- : paddingStart_{paddingStart}, paddingEnd_{paddingEnd} {}
20
+ // Used in iOS code
21
+ RNSScreenStackHeaderConfigState(Size frameSize_) : frameSize{frameSize_} {}
22
22
 
23
23
  #ifdef ANDROID
24
24
  RNSScreenStackHeaderConfigState(
25
25
  RNSScreenStackHeaderConfigState const &previousState,
26
26
  folly::dynamic data)
27
- : paddingStart_{static_cast<Float>(data["paddingStart"].getDouble())},
28
- paddingEnd_{static_cast<Float>(data["paddingEnd"].getDouble())} {}
27
+ : frameSize{
28
+ static_cast<Float>(data["frameWidth"].getDouble()),
29
+ static_cast<Float>(data["frameHeight"].getDouble())
30
+ },
31
+ paddingStart{static_cast<Float>(data["paddingStart"].getDouble())},
32
+ paddingEnd{static_cast<Float>(data["paddingEnd"].getDouble())}
33
+ {}
29
34
  #endif
30
35
 
31
36
  #ifdef ANDROID
@@ -40,15 +45,16 @@ class JSI_EXPORT RNSScreenStackHeaderConfigState final {
40
45
  #endif // !NDEBUG
41
46
  #endif // ANDROID
42
47
 
43
- #pragma mark - Getters
48
+ const Size frameSize{};
44
49
 
45
- [[nodiscard]] Float getPaddingStart() const noexcept;
50
+ #ifdef ANDROID
51
+ Float paddingStart{0.f};
52
+ Float paddingEnd{0.f};
53
+ #endif // ANDROID
46
54
 
47
- [[nodiscard]] Float getPaddingEnd() const noexcept;
55
+ #pragma mark - Getters
48
56
 
49
57
  private:
50
- Float paddingStart_{0.f};
51
- Float paddingEnd_{0.f};
52
58
  #if !defined(ANDROID) && !defined(NDEBUG)
53
59
  std::weak_ptr<void> imageLoader_;
54
60
  #endif // !ANDROID && !NDEBUG
@@ -20,6 +20,26 @@ class RNSScreenStackHeaderSubviewComponentDescriptor final
20
20
  using ConcreteComponentDescriptor::ConcreteComponentDescriptor;
21
21
 
22
22
  void adopt(ShadowNode &shadowNode) const override {
23
+ react_native_assert(
24
+ dynamic_cast<RNSScreenStackHeaderSubviewShadowNode *>(&shadowNode));
25
+ auto &subviewShadowNode =
26
+ static_cast<RNSScreenStackHeaderSubviewShadowNode &>(shadowNode);
27
+
28
+ react_native_assert(
29
+ dynamic_cast<YogaLayoutableShadowNode *>(&subviewShadowNode));
30
+ auto &layoutableShadowNode =
31
+ dynamic_cast<YogaLayoutableShadowNode &>(subviewShadowNode);
32
+
33
+ auto state = std::static_pointer_cast<
34
+ const RNSScreenStackHeaderSubviewShadowNode::ConcreteState>(
35
+ shadowNode.getState());
36
+ auto stateData = state->getData();
37
+
38
+ if (stateData.frameSize.width != 0 && stateData.frameSize.height != 0) {
39
+ layoutableShadowNode.setSize(
40
+ Size{stateData.frameSize.width, stateData.frameSize.height});
41
+ }
42
+
23
43
  ConcreteComponentDescriptor::adopt(shadowNode);
24
44
  }
25
45
  };
@@ -5,4 +5,18 @@ namespace facebook::react {
5
5
  extern const char RNSScreenStackHeaderSubviewComponentName[] =
6
6
  "RNSScreenStackHeaderSubview";
7
7
 
8
+ void RNSScreenStackHeaderSubviewShadowNode::layout(
9
+ LayoutContext layoutContext) {
10
+ YogaLayoutableShadowNode::layout(layoutContext);
11
+ applyFrameCorrections();
12
+ }
13
+
14
+ void RNSScreenStackHeaderSubviewShadowNode::applyFrameCorrections() {
15
+ ensureUnsealed();
16
+
17
+ const auto &stateData = getStateData();
18
+ layoutMetrics_.frame.origin.x = stateData.contentOffset.x;
19
+ layoutMetrics_.frame.origin.y = stateData.contentOffset.y;
20
+ }
21
+
8
22
  } // namespace facebook::react
@@ -24,8 +24,10 @@ class JSI_EXPORT RNSScreenStackHeaderSubviewShadowNode final
24
24
  using ConcreteViewShadowNode::ConcreteViewShadowNode;
25
25
  using StateData = ConcreteViewShadowNode::ConcreteStateData;
26
26
  #pragma mark - ShadowNode overrides
27
+ void layout(LayoutContext layoutContext) override;
27
28
 
28
29
  #pragma mark - Custom interface
30
+ void applyFrameCorrections();
29
31
  };
30
32
 
31
33
  } // namespace facebook::react
@@ -7,7 +7,9 @@ using namespace rnscreens;
7
7
 
8
8
  #ifdef ANDROID
9
9
  folly::dynamic RNSScreenStackHeaderSubviewState::getDynamic() const {
10
- return folly::dynamic::object();
10
+ return folly::dynamic::object("frameWidth", frameSize.width)(
11
+ "frameHeight", frameSize.height)("contentOffsetX", contentOffset.x)(
12
+ "contentOffsetY", contentOffset.y);
11
13
  }
12
14
  #endif // ANDROID
13
15
 
@@ -21,18 +21,32 @@ class JSI_EXPORT RNSScreenStackHeaderSubviewState final {
21
21
 
22
22
  RNSScreenStackHeaderSubviewState() = default;
23
23
 
24
+ RNSScreenStackHeaderSubviewState(Size frameSize_, Point contentOffset_)
25
+ : frameSize(frameSize_), contentOffset(contentOffset_){};
26
+
24
27
  #ifdef ANDROID
25
28
  RNSScreenStackHeaderSubviewState(
26
29
  RNSScreenStackHeaderSubviewState const &previousState,
27
- folly::dynamic data) {}
28
- #endif
30
+ folly::dynamic data)
31
+ : frameSize(Size{
32
+ (Float)data["frameWidth"].getDouble(),
33
+ (Float)data["frameHeight"].getDouble()}),
34
+ contentOffset(Point{
35
+ (Float)data["contentOffsetX"].getDouble(),
36
+ (Float)data["contentOffsetY"].getDouble()}) {}
37
+ #endif // ANDROID
29
38
 
30
39
  #ifdef ANDROID
31
40
  folly::dynamic getDynamic() const;
32
41
  MapBuffer getMapBuffer() const {
33
42
  return MapBufferBuilder::EMPTY();
34
43
  };
44
+
35
45
  #endif // ANDROID
46
+
47
+ const Size frameSize{};
48
+ Point contentOffset{};
49
+
36
50
  #pragma mark - Getters
37
51
  };
38
52
 
@@ -10,6 +10,7 @@
10
10
  #import <react/renderer/components/rnscreens/ComponentDescriptors.h>
11
11
  #import <react/renderer/components/rnscreens/Props.h>
12
12
  #import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
13
+ #import <rnscreens/RNSFullWindowOverlayComponentDescriptor.h>
13
14
  #else
14
15
  #import <React/RCTTouchHandler.h>
15
16
  #endif // RCT_NEW_ARCH_ENABLED
@@ -205,9 +206,18 @@ RNS_IGNORE_SUPER_CALL_BEGIN
205
206
  oldLayoutMetrics:(react::LayoutMetrics const &)oldLayoutMetrics
206
207
  {
207
208
  CGRect frame = RCTCGRectFromRect(layoutMetrics.frame);
209
+
210
+ // Due to view flattening on new architecture there are situations
211
+ // when we receive frames with origin different from (0, 0).
212
+ // We account for this frame manipulation in shadow node by setting
213
+ // RootNodeKind trait for the shadow node making state consistent
214
+ // between Host & Shadow Tree
215
+ frame.origin = CGPointZero;
216
+
208
217
  _reactFrame = frame;
209
218
  [_container setFrame:frame];
210
219
  }
220
+
211
221
  RNS_IGNORE_SUPER_CALL_END
212
222
 
213
223
  #else
@@ -86,7 +86,7 @@ namespace react = facebook::react;
86
86
  [screenController calculateAndNotifyHeaderHeightChangeIsModal:NO];
87
87
  }
88
88
 
89
- [self maybeUpdateHeaderInsetsInShadowTreeForScreen:screenController];
89
+ [self maybeUpdateHeaderLayoutInfoInShadowTree:screenController];
90
90
  }
91
91
  }
92
92
 
@@ -100,7 +100,7 @@ namespace react = facebook::react;
100
100
  return [self topViewController];
101
101
  }
102
102
 
103
- - (void)maybeUpdateHeaderInsetsInShadowTreeForScreen:(RNSScreen *)screenController
103
+ - (void)maybeUpdateHeaderLayoutInfoInShadowTree:(RNSScreen *)screenController
104
104
  {
105
105
  // This might happen e.g. if there is only native title present in navigation bar.
106
106
  if (self.navigationBar.subviews.count < 2) {
@@ -112,6 +112,9 @@ namespace react = facebook::react;
112
112
  return;
113
113
  }
114
114
 
115
+ #ifdef RCT_NEW_ARCH_ENABLED
116
+ [headerConfig updateHeaderStateInShadowTreeInContextOfNavigationBar:self.navigationBar];
117
+ #else
115
118
  NSDirectionalEdgeInsets navBarMargins = [self.navigationBar directionalLayoutMargins];
116
119
  NSDirectionalEdgeInsets navBarContentMargins =
117
120
  [self.navigationBar.rnscreens_findContentView directionalLayoutMargins];
@@ -122,11 +125,12 @@ namespace react = facebook::react;
122
125
  UIView *barButtonView = isDisplayingBackButton ? self.navigationBar.rnscreens_findBackButtonWrapperView : nil;
123
126
  CGFloat platformBackButtonWidth = barButtonView != nil ? barButtonView.frame.size.width : 44.0f;
124
127
 
125
- [headerConfig updateHeaderInsetsInShadowTreeTo:NSDirectionalEdgeInsets{
126
- .leading = navBarMargins.leading + navBarContentMargins.leading +
127
- (isDisplayingBackButton ? platformBackButtonWidth : 0),
128
- .trailing = navBarMargins.trailing + navBarContentMargins.trailing,
129
- }];
128
+ [headerConfig updateHeaderConfigState:NSDirectionalEdgeInsets{
129
+ .leading = navBarMargins.leading + navBarContentMargins.leading +
130
+ (isDisplayingBackButton ? platformBackButtonWidth : 0),
131
+ .trailing = navBarMargins.trailing + navBarContentMargins.trailing,
132
+ }];
133
+ #endif // RCT_NEW_ARCH_ENABLED
130
134
  }
131
135
  #endif
132
136
 
@@ -66,12 +66,6 @@ NS_ASSUME_NONNULL_END
66
66
  animated:(BOOL)animated
67
67
  withConfig:(nonnull RNSScreenStackHeaderConfig *)config;
68
68
 
69
- /**
70
- * Allows to send information with insets to the corresponding node in shadow tree.
71
- * Currently only horizontal insets are send through. Vertical ones are filtered out.
72
- */
73
- - (void)updateHeaderInsetsInShadowTreeTo:(NSDirectionalEdgeInsets)insets;
74
-
75
69
  /**
76
70
  * Returns true iff subview of given `type` is present.
77
71
  *
@@ -99,11 +93,31 @@ NS_ASSUME_NONNULL_END
99
93
  - (BOOL)shouldHeaderBeVisible;
100
94
 
101
95
  /**
102
- * @returns`true` iff the applying this header config instance to a view controller will
96
+ * Returns `true` iff the applying this header config instance to a view controller will
103
97
  * result in visible back button if feasible.
104
98
  */
105
99
  - (BOOL)shouldBackButtonBeVisibleInNavigationBar:(nullable UINavigationBar *)navBar;
106
100
 
101
+ #ifdef RCT_NEW_ARCH_ENABLED
102
+ /**
103
+ * Allows to send information with size to the corresponding node in shadow tree.
104
+ * This method updates state of header config shadow node only.
105
+ */
106
+ - (void)updateHeaderConfigState:(CGSize)size;
107
+
108
+ /**
109
+ * Updates state of header config shadow node and all subview shadow nodes in context of given UINavigationBar.
110
+ * When `navBar == nil` this method does nothing.
111
+ */
112
+ - (void)updateHeaderStateInShadowTreeInContextOfNavigationBar:(nullable UINavigationBar *)navBar;
113
+ #else
114
+ /**
115
+ * Allows to send information with insets to the corresponding node in shadow tree.
116
+ * Currently only horizontal insets are send through. Vertical ones are filtered out.
117
+ */
118
+ - (void)updateHeaderConfigState:(NSDirectionalEdgeInsets)insets;
119
+ #endif
120
+
107
121
  @end
108
122
 
109
123
  @interface RNSScreenStackHeaderConfigManager : RCTViewManager
@@ -2,6 +2,7 @@
2
2
  #import <React/RCTConversions.h>
3
3
  #import <React/RCTFabricComponentsPlugins.h>
4
4
  #import <React/RCTImageComponentView.h>
5
+ #import <React/RCTMountingTransactionObserving.h>
5
6
  #import <React/UIView+React.h>
6
7
  #import <react/renderer/components/image/ImageProps.h>
7
8
  #import <react/renderer/components/rnscreens/ComponentDescriptors.h>
@@ -58,16 +59,26 @@ namespace react = facebook::react;
58
59
 
59
60
  @end
60
61
 
62
+ #ifdef RCT_NEW_ARCH_ENABLED
63
+ @interface RNSScreenStackHeaderConfig () <RCTMountingTransactionObserving>
64
+ @end
65
+ #endif // RCT_NEW_ARCH_ENABLED
66
+
61
67
  @implementation RNSScreenStackHeaderConfig {
62
68
  NSMutableArray<RNSScreenStackHeaderSubview *> *_reactSubviews;
63
- NSDirectionalEdgeInsets _lastHeaderInsets;
64
69
  #ifdef RCT_NEW_ARCH_ENABLED
65
70
  BOOL _initialPropsSet;
71
+ CGSize _lastSize;
66
72
  react::RNSScreenStackHeaderConfigShadowNode::ConcreteState::Shared _state;
73
+
74
+ /// Whether a react subview has been added / removed in current transaction. This flag is reset after each react
75
+ /// transaction via RCTMountingTransactionObserving protocol.
76
+ bool _addedReactSubviewsInCurrentTransaction;
67
77
  #ifndef NDEBUG
68
78
  RCTImageLoader *imageLoader;
69
79
  #endif // !NDEBUG
70
80
  #else
81
+ NSDirectionalEdgeInsets _lastHeaderInsets;
71
82
  __weak RCTBridge *_bridge;
72
83
  #endif
73
84
  }
@@ -87,6 +98,7 @@ namespace react = facebook::react;
87
98
  _props = defaultProps;
88
99
  _show = YES;
89
100
  _translucent = NO;
101
+ _addedReactSubviewsInCurrentTransaction = false;
90
102
  [self initProps];
91
103
  }
92
104
  return self;
@@ -145,15 +157,18 @@ RNS_IGNORE_SUPER_CALL_END
145
157
  for (RNSScreenStackHeaderSubview *subview in _reactSubviews) {
146
158
  if (subview.type == RNSScreenStackHeaderSubviewTypeLeft || subview.type == RNSScreenStackHeaderSubviewTypeRight) {
147
159
  // we wrap the headerLeft/Right component in a UIBarButtonItem
148
- // so we need to use the only subview of it to retrieve the correct view
149
- UIView *headerComponent = subview.subviews.firstObject;
150
- // we convert the point to RNSScreenStackView since it always contains the header inside it
151
- CGPoint convertedPoint = [_screenView.reactSuperview convertPoint:point toView:headerComponent];
152
-
153
- UIView *hitTestResult = [headerComponent hitTest:convertedPoint withEvent:event];
154
- if (hitTestResult != nil) {
155
- return hitTestResult;
160
+ // so we need to hit test subviews from left to right, because of the view flattening
161
+ UIView *headerComponent = nil;
162
+ for (UIView *headerComponentSubview in subview.subviews) {
163
+ CGPoint convertedPoint = [self convertPoint:point toView:headerComponentSubview];
164
+ UIView *hitTestResult = [headerComponentSubview hitTest:convertedPoint withEvent:event];
165
+
166
+ if (hitTestResult != nil) {
167
+ headerComponent = hitTestResult;
168
+ }
156
169
  }
170
+
171
+ return headerComponent;
157
172
  }
158
173
  }
159
174
  return nil;
@@ -195,19 +210,37 @@ RNS_IGNORE_SUPER_CALL_END
195
210
  [navctr.view setNeedsLayout];
196
211
  }
197
212
 
198
- - (void)updateHeaderInsetsInShadowTreeTo:(NSDirectionalEdgeInsets)insets
199
- {
200
- if (_lastHeaderInsets.leading != insets.leading || _lastHeaderInsets.trailing != insets.trailing) {
201
213
  #ifdef RCT_NEW_ARCH_ENABLED
202
- auto newState = react::RNSScreenStackHeaderConfigState{insets.leading, insets.trailing};
214
+ - (void)updateHeaderConfigState:(CGSize)size
215
+ {
216
+ if (!CGSizeEqualToSize(size, _lastSize)) {
217
+ auto newState = react::RNSScreenStackHeaderConfigState(RCTSizeFromCGSize(size));
203
218
  _state->updateState(std::move(newState));
204
- _lastHeaderInsets = std::move(insets);
219
+ _lastSize = size;
220
+ }
221
+ }
222
+
223
+ - (void)updateHeaderStateInShadowTreeInContextOfNavigationBar:(nullable UINavigationBar *)navigationBar
224
+ {
225
+ if (!navigationBar) {
226
+ return;
227
+ }
228
+
229
+ [self updateHeaderConfigState:navigationBar.frame.size];
230
+ for (RNSScreenStackHeaderSubview *subview in self.reactSubviews) {
231
+ CGRect frameInNavBarCoordinates = [subview convertRect:subview.frame toView:navigationBar];
232
+ [subview updateHeaderSubviewFrameInShadowTree:frameInNavBarCoordinates];
233
+ }
234
+ }
205
235
  #else
236
+ - (void)updateHeaderConfigState:(NSDirectionalEdgeInsets)insets
237
+ {
238
+ if (_lastHeaderInsets.leading != insets.leading || _lastHeaderInsets.trailing != insets.trailing) {
206
239
  [_bridge.uiManager setLocalData:[[RNSHeaderConfigInsetsPayload alloc] initWithInsets:insets] forView:self];
207
240
  _lastHeaderInsets = std::move(insets);
208
- #endif // RCT_NEW_ARCH_ENABLED
209
241
  }
210
242
  }
243
+ #endif // RCT_NEW_ARCH_ENABLED
211
244
 
212
245
  - (BOOL)hasSubviewOfType:(RNSScreenStackHeaderSubviewType)type
213
246
  {
@@ -849,25 +882,47 @@ RNS_IGNORE_SUPER_CALL_BEGIN
849
882
  // [_reactSubviews insertObject:(RNSScreenStackHeaderSubview *)childComponentView atIndex:index];
850
883
  [self insertReactSubview:(RNSScreenStackHeaderSubview *)childComponentView atIndex:index];
851
884
 
852
- // TODO: This could be called only once per transaction.
853
- [self updateViewControllerIfNeeded];
885
+ _addedReactSubviewsInCurrentTransaction = true;
854
886
  }
855
887
 
856
888
  - (void)unmountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView index:(NSInteger)index
857
889
  {
858
890
  BOOL isGoingToBeRemoved = _screenView.isMarkedForUnmountInCurrentTransaction;
891
+
859
892
  if (isGoingToBeRemoved) {
860
893
  // For explanation of why we can make a snapshot here despite the fact that our children are already
861
894
  // unmounted see https://github.com/software-mansion/react-native-screens/pull/2261
862
895
  [self replaceNavigationBarViewsWithSnapshotOfSubview:(RNSScreenStackHeaderSubview *)childComponentView];
863
896
  }
897
+
864
898
  [_reactSubviews removeObject:(RNSScreenStackHeaderSubview *)childComponentView];
865
899
  [childComponentView removeFromSuperview];
900
+
866
901
  if (!isGoingToBeRemoved) {
867
902
  [self updateViewControllerIfNeeded];
868
903
  }
869
904
  }
870
905
 
906
+ - (void)mountingTransactionDidMount:(const facebook::react::MountingTransaction &)transaction
907
+ withSurfaceTelemetry:(const facebook::react::SurfaceTelemetry &)surfaceTelemetry
908
+ {
909
+ if (_addedReactSubviewsInCurrentTransaction) {
910
+ [self updateViewControllerIfNeeded];
911
+
912
+ // This call is made for the sake of https://github.com/software-mansion/react-native-screens/pull/2466.
913
+ // In case header subview is added **after initial screen render** the system positions it correctly,
914
+ // however `viewDidLayoutSubviews` is not called on `RNSNavigationController` and updated frame sizes of the
915
+ // subviews are not sent to ShadowTree leading to issues with pressables.
916
+ // Sending state update to ShadowTree from here is not enough, because native layout has not yet
917
+ // happened after the child had been added. Requesting layout on navigation bar does not trigger layout callbacks
918
+ // either, however doing so on main view of navigation controller does the trick.
919
+ if (self.shouldHeaderBeVisible) {
920
+ [self layoutNavigationControllerView];
921
+ }
922
+ }
923
+ _addedReactSubviewsInCurrentTransaction = false;
924
+ }
925
+
871
926
  - (void)replaceNavigationBarViewsWithSnapshotOfSubview:(RNSScreenStackHeaderSubview *)childComponentView
872
927
  {
873
928
  if (childComponentView.window != nil) {
@@ -938,7 +993,12 @@ static RCTResizeMode resizeModeFromCppEquiv(react::ImageResizeMode resizeMode)
938
993
  {
939
994
  [super prepareForRecycle];
940
995
  _initialPropsSet = NO;
996
+
997
+ #ifdef RCT_NEW_ARCH_ENABLED
998
+ _lastSize = CGSizeZero;
999
+ #else
941
1000
  _lastHeaderInsets = NSDirectionalEdgeInsets{};
1001
+ #endif
942
1002
  }
943
1003
 
944
1004
  - (NSNumber *)getFontSizePropValue:(int)value
@@ -20,6 +20,10 @@ NS_ASSUME_NONNULL_BEGIN
20
20
 
21
21
  @property (nonatomic, weak) UIView *reactSuperview;
22
22
 
23
+ #ifdef RCT_NEW_ARCH_ENABLED
24
+ - (void)updateHeaderSubviewFrameInShadowTree:(CGRect)frame;
25
+ #endif
26
+
23
27
  @end
24
28
 
25
29
  @interface RNSScreenStackHeaderSubviewManager : RCTViewManager
@@ -18,7 +18,12 @@
18
18
  namespace react = facebook::react;
19
19
  #endif // RCT_NEW_ARCH_ENABLED
20
20
 
21
- @implementation RNSScreenStackHeaderSubview
21
+ @implementation RNSScreenStackHeaderSubview {
22
+ #ifdef RCT_NEW_ARCH_ENABLED
23
+ react::RNSScreenStackHeaderSubviewShadowNode::ConcreteState::Shared _state;
24
+ CGRect _lastScheduledFrame;
25
+ #endif
26
+ }
22
27
 
23
28
  #pragma mark - Common
24
29
 
@@ -74,6 +79,7 @@ namespace react = facebook::react;
74
79
  if (self = [super initWithFrame:frame]) {
75
80
  static const auto defaultProps = std::make_shared<const react::RNSScreenStackHeaderSubviewProps>();
76
81
  _props = defaultProps;
82
+ _lastScheduledFrame = CGRectZero;
77
83
  }
78
84
 
79
85
  return self;
@@ -127,6 +133,25 @@ RNS_IGNORE_SUPER_CALL_BEGIN
127
133
  return NO;
128
134
  }
129
135
 
136
+ - (void)updateState:(const facebook::react::State::Shared &)state
137
+ oldState:(const facebook::react::State::Shared &)oldState
138
+ {
139
+ _state = std::static_pointer_cast<const react::RNSScreenStackHeaderSubviewShadowNode::ConcreteState>(state);
140
+ }
141
+
142
+ - (void)updateHeaderSubviewFrameInShadowTree:(CGRect)frame
143
+ {
144
+ if (_state == nullptr) {
145
+ return;
146
+ }
147
+
148
+ if (!CGRectEqualToRect(frame, _lastScheduledFrame)) {
149
+ auto newState =
150
+ react::RNSScreenStackHeaderSubviewState(RCTSizeFromCGSize(frame.size), RCTPointFromCGPoint(frame.origin));
151
+ _state->updateState(std::move(newState));
152
+ _lastScheduledFrame = frame;
153
+ }
154
+ }
130
155
  #else // RCT_NEW_ARCH_ENABLED
131
156
  #pragma mark - Paper specific
132
157
 
@@ -78,7 +78,6 @@ const styles = _reactNative.StyleSheet.create({
78
78
  },
79
79
  headerConfig: {
80
80
  position: 'absolute',
81
- top: '-100%',
82
81
  width: '100%',
83
82
  flexDirection: 'row',
84
83
  justifyContent: 'space-between',
@@ -1 +1 @@
1
- {"version":3,"names":["Object","defineProperty","exports","value","ScreenStackHeaderSubview","ScreenStackHeaderSearchBarView","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderConfig","ScreenStackHeaderCenterView","ScreenStackHeaderBackButtonImage","_react","_interopRequireDefault","require","_reactNative","_ScreenStackHeaderConfigNativeComponent","_ScreenStackHeaderSubviewNativeComponent","e","__esModule","default","_extends","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","ScreenStackHeaderSubviewNativeComponent","React","forwardRef","props","ref","createElement","style","styles","headerConfig","pointerEvents","displayName","type","headerSubview","Image","resizeMode","fadeDuration","rest","headerSubviewCenter","StyleSheet","create","flexDirection","alignItems","justifyContent","flexShrink","position","top","width","Platform","OS","undefined"],"sourceRoot":"../../../src","sources":["components/ScreenStackHeaderConfig.tsx"],"mappings":";AAAA,YAAY;;AAACA,MAAA,CAAAC,cAAA,CAAAC,OAAA;EAAAC,KAAA;AAAA;AAAAD,OAAA,CAAAE,wBAAA,GAAAF,OAAA,CAAAG,8BAAA,GAAAH,OAAA,CAAAI,0BAAA,GAAAJ,OAAA,CAAAK,yBAAA,GAAAL,OAAA,CAAAM,uBAAA,GAAAN,OAAA,CAAAO,2BAAA,GAAAP,OAAA,CAAAQ,gCAAA;AAEb,IAAAC,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAMA,IAAAC,YAAA,GAAAD,OAAA;AAUA,IAAAE,uCAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,wCAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAAwG,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,SAAA,WAAAA,QAAA,GAAApB,MAAA,CAAAqB,MAAA,GAAArB,MAAA,CAAAqB,MAAA,CAAAC,IAAA,eAAAC,CAAA,aAAAN,CAAA,MAAAA,CAAA,GAAAO,SAAA,CAAAC,MAAA,EAAAR,CAAA,UAAAS,CAAA,GAAAF,SAAA,CAAAP,CAAA,YAAAU,CAAA,IAAAD,CAAA,OAAAE,cAAA,CAAAC,IAAA,CAAAH,CAAA,EAAAC,CAAA,MAAAJ,CAAA,CAAAI,CAAA,IAAAD,CAAA,CAAAC,CAAA,aAAAJ,CAAA,KAAAH,QAAA,CAAAU,KAAA,OAAAN,SAAA,KAFxG;AAIO,MAAMpB,wBAEZ,GAAAF,OAAA,CAAAE,wBAAA,GAAG2B,gDAA8C;AAE3C,MAAMvB,uBAAuB,GAAAN,OAAA,CAAAM,uBAAA,gBAAGwB,cAAK,CAACC,UAAU,CAGrD,CAACC,KAAK,EAAEC,GAAG,kBACXxB,MAAA,CAAAQ,OAAA,CAAAiB,aAAA,CAACrB,uCAAA,CAAAI,OAAsC,EAAAC,QAAA,KACjCc,KAAK;EACTC,GAAG,EAAEA,GAAI;EACTE,KAAK,EAAEC,MAAM,CAACC,YAAa;EAC3BC,aAAa,EAAC;AAAU,EACzB,CACF,CAAC;AAEFhC,uBAAuB,CAACiC,WAAW,GAAG,yBAAyB;AAExD,MAAM/B,gCAAgC,GAC3CwB,KAAiB,iBAEjBvB,MAAA,CAAAQ,OAAA,CAAAiB,aAAA,CAAChC,wBAAwB;EAACsC,IAAI,EAAC,MAAM;EAACL,KAAK,EAAEC,MAAM,CAACK;AAAc,gBAChEhC,MAAA,CAAAQ,OAAA,CAAAiB,aAAA,CAACtB,YAAA,CAAA8B,KAAK,EAAAxB,QAAA;EAACyB,UAAU,EAAC,QAAQ;EAACC,YAAY,EAAE;AAAE,GAAKZ,KAAK,CAAG,CAChC,CAC3B;AAAChC,OAAA,CAAAQ,gCAAA,GAAAA,gCAAA;AAEK,MAAMJ,0BAA0B,GACrC4B,KAAyC,IACzB;EAChB,MAAM;IAAEG,KAAK;IAAE,GAAGU;EAAK,CAAC,GAAGb,KAAK;EAEhC,oBACEvB,MAAA,CAAAQ,OAAA,CAAAiB,aAAA,CAAChC,wBAAwB,EAAAgB,QAAA,KACnB2B,IAAI;IACRL,IAAI,EAAC,OAAO;IACZL,KAAK,EAAE,CAACC,MAAM,CAACK,aAAa,EAAEN,KAAK;EAAE,EACtC,CAAC;AAEN,CAAC;AAACnC,OAAA,CAAAI,0BAAA,GAAAA,0BAAA;AAEK,MAAMC,yBAAyB,GACpC2B,KAAyC,IACzB;EAChB,MAAM;IAAEG,KAAK;IAAE,GAAGU;EAAK,CAAC,GAAGb,KAAK;EAEhC,oBACEvB,MAAA,CAAAQ,OAAA,CAAAiB,aAAA,CAAChC,wBAAwB,EAAAgB,QAAA,KACnB2B,IAAI;IACRL,IAAI,EAAC,MAAM;IACXL,KAAK,EAAE,CAACC,MAAM,CAACK,aAAa,EAAEN,KAAK;EAAE,EACtC,CAAC;AAEN,CAAC;AAACnC,OAAA,CAAAK,yBAAA,GAAAA,yBAAA;AAEK,MAAME,2BAA2B,GACtCyB,KAAyC,IACzB;EAChB,MAAM;IAAEG,KAAK;IAAE,GAAGU;EAAK,CAAC,GAAGb,KAAK;EAEhC,oBACEvB,MAAA,CAAAQ,OAAA,CAAAiB,aAAA,CAAChC,wBAAwB,EAAAgB,QAAA,KACnB2B,IAAI;IACRL,IAAI,EAAC,QAAQ;IACbL,KAAK,EAAE,CAACC,MAAM,CAACU,mBAAmB,EAAEX,KAAK;EAAE,EAC5C,CAAC;AAEN,CAAC;AAACnC,OAAA,CAAAO,2BAAA,GAAAA,2BAAA;AAEK,MAAMJ,8BAA8B,GACzC6B,KAA8C,iBAE9CvB,MAAA,CAAAQ,OAAA,CAAAiB,aAAA,CAAChC,wBAAwB,EAAAgB,QAAA,KACnBc,KAAK;EACTQ,IAAI,EAAC,WAAW;EAChBL,KAAK,EAAEC,MAAM,CAACK;AAAc,EAC7B,CACF;AAACzC,OAAA,CAAAG,8BAAA,GAAAA,8BAAA;AAEF,MAAMiC,MAAM,GAAGW,uBAAU,CAACC,MAAM,CAAC;EAC/BP,aAAa,EAAE;IACbQ,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE;EAClB,CAAC;EACDL,mBAAmB,EAAE;IACnBG,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE;EACd,CAAC;EACDf,YAAY,EAAE;IACZgB,QAAQ,EAAE,UAAU;IACpBC,GAAG,EAAE,OAAO;IACZC,KAAK,EAAE,MAAM;IACbN,aAAa,EAAE,KAAK;IACpBE,cAAc,EAAE,eAAe;IAC/B;IACA;IACAD,UAAU,EAAEM,qBAAQ,CAACC,EAAE,KAAK,KAAK,GAAG,QAAQ,GAAGC;EACjD;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Object","defineProperty","exports","value","ScreenStackHeaderSubview","ScreenStackHeaderSearchBarView","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderConfig","ScreenStackHeaderCenterView","ScreenStackHeaderBackButtonImage","_react","_interopRequireDefault","require","_reactNative","_ScreenStackHeaderConfigNativeComponent","_ScreenStackHeaderSubviewNativeComponent","e","__esModule","default","_extends","assign","bind","n","arguments","length","t","r","hasOwnProperty","call","apply","ScreenStackHeaderSubviewNativeComponent","React","forwardRef","props","ref","createElement","style","styles","headerConfig","pointerEvents","displayName","type","headerSubview","Image","resizeMode","fadeDuration","rest","headerSubviewCenter","StyleSheet","create","flexDirection","alignItems","justifyContent","flexShrink","position","width","Platform","OS","undefined"],"sourceRoot":"../../../src","sources":["components/ScreenStackHeaderConfig.tsx"],"mappings":";AAAA,YAAY;;AAACA,MAAA,CAAAC,cAAA,CAAAC,OAAA;EAAAC,KAAA;AAAA;AAAAD,OAAA,CAAAE,wBAAA,GAAAF,OAAA,CAAAG,8BAAA,GAAAH,OAAA,CAAAI,0BAAA,GAAAJ,OAAA,CAAAK,yBAAA,GAAAL,OAAA,CAAAM,uBAAA,GAAAN,OAAA,CAAAO,2BAAA,GAAAP,OAAA,CAAAQ,gCAAA;AAEb,IAAAC,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAMA,IAAAC,YAAA,GAAAD,OAAA;AAUA,IAAAE,uCAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,wCAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAAwG,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAG,SAAA,WAAAA,QAAA,GAAApB,MAAA,CAAAqB,MAAA,GAAArB,MAAA,CAAAqB,MAAA,CAAAC,IAAA,eAAAC,CAAA,aAAAN,CAAA,MAAAA,CAAA,GAAAO,SAAA,CAAAC,MAAA,EAAAR,CAAA,UAAAS,CAAA,GAAAF,SAAA,CAAAP,CAAA,YAAAU,CAAA,IAAAD,CAAA,OAAAE,cAAA,CAAAC,IAAA,CAAAH,CAAA,EAAAC,CAAA,MAAAJ,CAAA,CAAAI,CAAA,IAAAD,CAAA,CAAAC,CAAA,aAAAJ,CAAA,KAAAH,QAAA,CAAAU,KAAA,OAAAN,SAAA,KAFxG;AAIO,MAAMpB,wBAEZ,GAAAF,OAAA,CAAAE,wBAAA,GAAG2B,gDAA8C;AAE3C,MAAMvB,uBAAuB,GAAAN,OAAA,CAAAM,uBAAA,gBAAGwB,cAAK,CAACC,UAAU,CAGrD,CAACC,KAAK,EAAEC,GAAG,kBACXxB,MAAA,CAAAQ,OAAA,CAAAiB,aAAA,CAACrB,uCAAA,CAAAI,OAAsC,EAAAC,QAAA,KACjCc,KAAK;EACTC,GAAG,EAAEA,GAAI;EACTE,KAAK,EAAEC,MAAM,CAACC,YAAa;EAC3BC,aAAa,EAAC;AAAU,EACzB,CACF,CAAC;AAEFhC,uBAAuB,CAACiC,WAAW,GAAG,yBAAyB;AAExD,MAAM/B,gCAAgC,GAC3CwB,KAAiB,iBAEjBvB,MAAA,CAAAQ,OAAA,CAAAiB,aAAA,CAAChC,wBAAwB;EAACsC,IAAI,EAAC,MAAM;EAACL,KAAK,EAAEC,MAAM,CAACK;AAAc,gBAChEhC,MAAA,CAAAQ,OAAA,CAAAiB,aAAA,CAACtB,YAAA,CAAA8B,KAAK,EAAAxB,QAAA;EAACyB,UAAU,EAAC,QAAQ;EAACC,YAAY,EAAE;AAAE,GAAKZ,KAAK,CAAG,CAChC,CAC3B;AAAChC,OAAA,CAAAQ,gCAAA,GAAAA,gCAAA;AAEK,MAAMJ,0BAA0B,GACrC4B,KAAyC,IACzB;EAChB,MAAM;IAAEG,KAAK;IAAE,GAAGU;EAAK,CAAC,GAAGb,KAAK;EAEhC,oBACEvB,MAAA,CAAAQ,OAAA,CAAAiB,aAAA,CAAChC,wBAAwB,EAAAgB,QAAA,KACnB2B,IAAI;IACRL,IAAI,EAAC,OAAO;IACZL,KAAK,EAAE,CAACC,MAAM,CAACK,aAAa,EAAEN,KAAK;EAAE,EACtC,CAAC;AAEN,CAAC;AAACnC,OAAA,CAAAI,0BAAA,GAAAA,0BAAA;AAEK,MAAMC,yBAAyB,GACpC2B,KAAyC,IACzB;EAChB,MAAM;IAAEG,KAAK;IAAE,GAAGU;EAAK,CAAC,GAAGb,KAAK;EAEhC,oBACEvB,MAAA,CAAAQ,OAAA,CAAAiB,aAAA,CAAChC,wBAAwB,EAAAgB,QAAA,KACnB2B,IAAI;IACRL,IAAI,EAAC,MAAM;IACXL,KAAK,EAAE,CAACC,MAAM,CAACK,aAAa,EAAEN,KAAK;EAAE,EACtC,CAAC;AAEN,CAAC;AAACnC,OAAA,CAAAK,yBAAA,GAAAA,yBAAA;AAEK,MAAME,2BAA2B,GACtCyB,KAAyC,IACzB;EAChB,MAAM;IAAEG,KAAK;IAAE,GAAGU;EAAK,CAAC,GAAGb,KAAK;EAEhC,oBACEvB,MAAA,CAAAQ,OAAA,CAAAiB,aAAA,CAAChC,wBAAwB,EAAAgB,QAAA,KACnB2B,IAAI;IACRL,IAAI,EAAC,QAAQ;IACbL,KAAK,EAAE,CAACC,MAAM,CAACU,mBAAmB,EAAEX,KAAK;EAAE,EAC5C,CAAC;AAEN,CAAC;AAACnC,OAAA,CAAAO,2BAAA,GAAAA,2BAAA;AAEK,MAAMJ,8BAA8B,GACzC6B,KAA8C,iBAE9CvB,MAAA,CAAAQ,OAAA,CAAAiB,aAAA,CAAChC,wBAAwB,EAAAgB,QAAA,KACnBc,KAAK;EACTQ,IAAI,EAAC,WAAW;EAChBL,KAAK,EAAEC,MAAM,CAACK;AAAc,EAC7B,CACF;AAACzC,OAAA,CAAAG,8BAAA,GAAAA,8BAAA;AAEF,MAAMiC,MAAM,GAAGW,uBAAU,CAACC,MAAM,CAAC;EAC/BP,aAAa,EAAE;IACbQ,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE;EAClB,CAAC;EACDL,mBAAmB,EAAE;IACnBG,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,QAAQ;IACxBC,UAAU,EAAE;EACd,CAAC;EACDf,YAAY,EAAE;IACZgB,QAAQ,EAAE,UAAU;IACpBC,KAAK,EAAE,MAAM;IACbL,aAAa,EAAE,KAAK;IACpBE,cAAc,EAAE,eAAe;IAC/B;IACA;IACAD,UAAU,EAAEK,qBAAQ,CAACC,EAAE,KAAK,KAAK,GAAG,QAAQ,GAAGC;EACjD;AACF,CAAC,CAAC","ignoreList":[]}
@@ -7,5 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.default = void 0;
8
8
  var _codegenNativeComponent = _interopRequireDefault(require("react-native/Libraries/Utilities/codegenNativeComponent"));
9
9
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
- var _default = exports.default = (0, _codegenNativeComponent.default)('RNSFullWindowOverlay', {});
10
+ var _default = exports.default = (0, _codegenNativeComponent.default)('RNSFullWindowOverlay', {
11
+ interfaceOnly: true
12
+ });
11
13
  //# sourceMappingURL=FullWindowOverlayNativeComponent.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Object","defineProperty","exports","value","default","_codegenNativeComponent","_interopRequireDefault","require","e","__esModule","_default","codegenNativeComponent"],"sourceRoot":"../../../src","sources":["fabric/FullWindowOverlayNativeComponent.ts"],"mappings":";AAAA,YAAY;;AAACA,MAAA,CAAAC,cAAA,CAAAC,OAAA;EAAAC,KAAA;AAAA;AAAAD,OAAA,CAAAE,OAAA;AAEb,IAAAC,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAJ,OAAA,EAAAI,CAAA;AAAA,IAAAE,QAAA,GAAAR,OAAA,CAAAE,OAAA,GAK9E,IAAAO,+BAAsB,EAAc,sBAAsB,EAAE,CAAC,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["Object","defineProperty","exports","value","default","_codegenNativeComponent","_interopRequireDefault","require","e","__esModule","_default","codegenNativeComponent","interfaceOnly"],"sourceRoot":"../../../src","sources":["fabric/FullWindowOverlayNativeComponent.ts"],"mappings":";AAAA,YAAY;;AAACA,MAAA,CAAAC,cAAA,CAAAC,OAAA;EAAAC,KAAA;AAAA;AAAAD,OAAA,CAAAE,OAAA;AAEb,IAAAC,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAJ,OAAA,EAAAI,CAAA;AAAA,IAAAE,QAAA,GAAAR,OAAA,CAAAE,OAAA,GAK9E,IAAAO,+BAAsB,EAAc,sBAAsB,EAAE;EACzEC,aAAa,EAAE;AACjB,CAAC,CAAC","ignoreList":[]}
@@ -129,6 +129,12 @@ const ScreenGestureDetector = ({
129
129
  return;
130
130
  }
131
131
  transitionConfig.screenDimensions = screenSize;
132
+ // Gesture Handler added `pointerType` to event payload back in 2.16.0,
133
+ // see: https://github.com/software-mansion/react-native-gesture-handler/pull/2760
134
+ // and this causes type errors here. Proper solution would be to patch parameter types
135
+ // of this function in reanimated. This should not cause runtime errors as the payload
136
+ // has correct shape, only the types are incorrect.
137
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
132
138
  (0, _reactNativeReanimated.startScreenTransition)(transitionConfig);
133
139
  canPerformUpdates.value = true;
134
140
  }
@@ -162,6 +168,12 @@ const ScreenGestureDetector = ({
162
168
  _RNScreensTurboModule.RNScreensTurboModule.finishTransition(stackTag, isTransitionCanceled);
163
169
  };
164
170
  screenTransitionConfig.value.isTransitionCanceled = isTransitionCanceled;
171
+ // Gesture Handler added `pointerType` to event payload back in 2.16.0,
172
+ // see: https://github.com/software-mansion/react-native-gesture-handler/pull/2760
173
+ // and this causes type errors here. Proper solution would be to patch parameter types
174
+ // of this function in reanimated. This should not cause runtime errors as the payload
175
+ // has correct shape, only the types are incorrect.
176
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
165
177
  (0, _reactNativeReanimated.finishScreenTransition)(screenTransitionConfig.value);
166
178
  }
167
179
  let panGesture = _reactNativeGestureHandler.Gesture.Pan().onStart(onStart).onUpdate(onUpdate).onEnd(onEnd);