@onekeyfe/react-native-pager-view 3.0.179-alpha.2026101502 → 3.0.179-alpha.2026101503

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/docs/SPEC.md CHANGED
@@ -36,7 +36,9 @@ outer PagerView transition
36
36
  releases the current edge interaction before moving its shared headers and
37
37
  applying visible-page masks; completion or cancellation reattaches the actual
38
38
  settled owner. An inactive inner pager retains the external header inset while
39
- its edge interaction is released.
39
+ its edge interaction is released. Without an outer PagerView, a standalone
40
+ external-overlay pager owns its edge interaction directly; page-activity and
41
+ transition gates apply only while an outer PagerView is registered.
40
42
 
41
43
  `topOverlayColorScheme` is optional (`"light" | "dark"`) and coordinates the
42
44
  fixed overlay's effective appearance with React theme commits. It does not
@@ -2050,6 +2050,7 @@ static void RNCLogNativeTabScrollBoundary(NSString *owner,
2050
2050
  if (@available(iOS 26.0, *)) {
2051
2051
  if (_pendingTopOverlayAppearanceCommit) scrollView = nil;
2052
2052
  BOOL externalOwnerReady = _externalTopOverlayTag <= 0 ||
2053
+ _externalOuterPager == nil ||
2053
2054
  (_externalOuterPageActive && !_externalOuterTransitioning);
2054
2055
  BOOL hasOverlay = _topScrollEdgeHard && self.hasFixedTopOverlay &&
2055
2056
  externalOwnerReady && self.window != nil;
@@ -1,10 +1,15 @@
1
1
  #import <XCTest/XCTest.h>
2
2
 
3
3
  #import "RNCCollapsiblePagerViewComponentView.h"
4
+ #import "RNCPagerViewComponentView.h"
4
5
  #import <react/renderer/components/pagerview/Props.h>
5
6
 
6
7
  using namespace facebook::react;
7
8
 
9
+ @interface RNCCollapsiblePagerViewComponentView (ScrollEdgeTesting)
10
+ - (void)updateTopScrollEdgeForScrollView:(UIScrollView *)scrollView;
11
+ @end
12
+
8
13
  @interface RNCCollapsiblePagerHitTestTests : XCTestCase
9
14
  @property (nonatomic, strong) UIView *root;
10
15
  @property (nonatomic, strong) UIButton *toolbar;
@@ -77,4 +82,48 @@ using namespace facebook::react;
77
82
  XCTAssertNil([self.pager hitTest:CGPointMake(20, 90) withEvent:nil]);
78
83
  }
79
84
 
85
+ - (void)testExternalOverlayWithoutOuterPagerOwnsItsEdgeAndRegisteredOuterStillGates
86
+ {
87
+ if (@available(iOS 26.0, *)) {
88
+ UIWindow *window = [[UIWindow alloc] initWithFrame:self.root.bounds];
89
+ [window addSubview:self.root];
90
+ UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.pager.bounds];
91
+ [self.pager addSubview:scrollView];
92
+ UIScrollEdgeEffectStyle *originalStyle = scrollView.topEdgeEffect.style;
93
+ [self.pager setValue:@YES forKey:@"topScrollEdgeHard"];
94
+ [self.pager setValue:@123 forKey:@"externalTopOverlayTag"];
95
+ [self.pager setValue:@64 forKey:@"externalTopOverlayHeight"];
96
+ [self.pager updateTopScrollEdgeForScrollView:scrollView];
97
+ XCTAssertEqual([self.pager valueForKey:@"topEdgeScrollView"], scrollView);
98
+ UIScrollEdgeElementContainerInteraction *interaction =
99
+ [self.pager valueForKey:@"topEdgeInteraction"];
100
+ XCTAssertEqual(interaction.scrollView, scrollView);
101
+ UIView *host = [self.pager valueForKey:@"topEdgeInteractionHost"];
102
+ XCTAssertTrue([host.interactions containsObject:interaction]);
103
+
104
+ RNCPagerViewComponentView *outer = [RNCPagerViewComponentView new];
105
+ [self.pager setValue:outer forKey:@"externalOuterPager"];
106
+ [self.pager setValue:@NO forKey:@"externalOuterPageActive"];
107
+ [self.pager updateTopScrollEdgeForScrollView:scrollView];
108
+ XCTAssertNil([self.pager valueForKey:@"topEdgeInteraction"]);
109
+ [self.pager setValue:@YES forKey:@"externalOuterPageActive"];
110
+ [self.pager updateTopScrollEdgeForScrollView:scrollView];
111
+ XCTAssertNotNil([self.pager valueForKey:@"topEdgeInteraction"]);
112
+ [self.pager setValue:@YES forKey:@"externalOuterTransitioning"];
113
+ [self.pager updateTopScrollEdgeForScrollView:scrollView];
114
+ XCTAssertNil([self.pager valueForKey:@"topEdgeInteraction"]);
115
+
116
+ [self.pager setValue:nil forKey:@"externalOuterPager"];
117
+ [self.pager updateTopScrollEdgeForScrollView:scrollView];
118
+ XCTAssertNotNil([self.pager valueForKey:@"topEdgeInteraction"]);
119
+ [self.pager removeFromSuperview];
120
+ XCTAssertNil([self.pager valueForKey:@"topEdgeInteraction"]);
121
+ XCTAssertNil([self.pager valueForKey:@"topEdgeScrollView"]);
122
+ XCTAssertEqual(scrollView.topEdgeEffect.style, originalStyle);
123
+ [self.root removeFromSuperview];
124
+ } else {
125
+ XCTSkip(@"Scroll-edge interactions require iOS 26 or newer");
126
+ }
127
+ }
128
+
80
129
  @end
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onekeyfe/react-native-pager-view",
3
- "version": "3.0.179-alpha.2026101502",
3
+ "version": "3.0.179-alpha.2026101503",
4
4
  "description": "React Native wrapper for Android and iOS ViewPager",
5
5
  "source": "./src/index.tsx",
6
6
  "main": "./lib/module/index.js",
@@ -72,7 +72,7 @@
72
72
  "typescript": "^5.9.2"
73
73
  },
74
74
  "peerDependencies": {
75
- "@onekeyfe/react-native-native-logger": "3.0.179-alpha.2026101502",
75
+ "@onekeyfe/react-native-native-logger": "3.0.179-alpha.2026101503",
76
76
  "react": "*",
77
77
  "react-native": "*"
78
78
  },