diff --git a/.maestro/README.md b/.maestro/README.md
index 33abb1e4..8660c71d 100644
--- a/.maestro/README.md
+++ b/.maestro/README.md
@@ -19,6 +19,12 @@ bun run maestro:test:android
Use `bun run maestro:smoke` to run only the smoke flow.
`maestro:debug` writes failure artifacts to `.maestro/debug-output`.
-The smoke flow targets the example app ID `com.pagerviewexample` and verifies the Basic Example pager using stable `testID` selectors.
-Additional Basic Example regression flows live in `.maestro/basic_example`.
-Nested PagerView regression flows live in `.maestro/nested_pager_view_example`.
+The smoke flow targets the example app ID `com.pagerviewexample` and verifies the horizontal pager using stable `testID` selectors.
+
+Basic PagerView regression coverage is split into three deterministic flows:
+
+- `tests/pager_basic_example.yaml` verifies horizontal paging in LTR.
+- `tests/pager_vertical_basic_example.yaml` verifies vertical paging in LTR.
+- `tests/pager_rtl_example.yaml` switches to RTL before verifying the reversed horizontal gesture.
+
+Shared setup and assertions live in `flows/basic-pager`. Each flow resets the app to the required layout direction, so a failed RTL run cannot affect the next test.
diff --git a/.maestro/flows/basic-pager/ensure-ltr.yaml b/.maestro/flows/basic-pager/ensure-ltr.yaml
new file mode 100644
index 00000000..a60a4670
--- /dev/null
+++ b/.maestro/flows/basic-pager/ensure-ltr.yaml
@@ -0,0 +1,22 @@
+appId: com.pagerviewexample
+---
+- launchApp:
+ stopApp: true
+
+- extendedWaitUntil:
+ visible:
+ text: 'PagerView Example'
+ timeout: 15000
+
+- runFlow:
+ when:
+ visible:
+ id: 'layout-direction-rtl'
+ commands:
+ - tapOn:
+ id: 'layout-direction-rtl'
+
+- extendedWaitUntil:
+ visible:
+ id: 'layout-direction-ltr'
+ timeout: 15000
diff --git a/.maestro/flows/basic-pager/ensure-rtl.yaml b/.maestro/flows/basic-pager/ensure-rtl.yaml
new file mode 100644
index 00000000..7b02ea68
--- /dev/null
+++ b/.maestro/flows/basic-pager/ensure-rtl.yaml
@@ -0,0 +1,22 @@
+appId: com.pagerviewexample
+---
+- launchApp:
+ stopApp: true
+
+- extendedWaitUntil:
+ visible:
+ text: 'PagerView Example'
+ timeout: 15000
+
+- runFlow:
+ when:
+ visible:
+ id: 'layout-direction-ltr'
+ commands:
+ - tapOn:
+ id: 'layout-direction-ltr'
+
+- extendedWaitUntil:
+ visible:
+ id: 'layout-direction-rtl'
+ timeout: 15000
diff --git a/.maestro/flows/basic-pager/open.yaml b/.maestro/flows/basic-pager/open.yaml
new file mode 100644
index 00000000..da9d4350
--- /dev/null
+++ b/.maestro/flows/basic-pager/open.yaml
@@ -0,0 +1,12 @@
+appId: com.pagerviewexample
+---
+- tapOn:
+ id: ${EXAMPLE_ID}
+
+- extendedWaitUntil:
+ visible:
+ id: ${PAGER_ID}
+ timeout: 10000
+
+- assertVisible:
+ id: 'pageNumber0'
diff --git a/.maestro/flows/basic-pager/verify-controls.yaml b/.maestro/flows/basic-pager/verify-controls.yaml
new file mode 100644
index 00000000..1fcad56e
--- /dev/null
+++ b/.maestro/flows/basic-pager/verify-controls.yaml
@@ -0,0 +1,52 @@
+appId: com.pagerviewexample
+---
+- tapOn:
+ id: 'next-page-button'
+
+- extendedWaitUntil:
+ visible:
+ id: 'pageNumber2'
+ timeout: 5000
+
+- tapOn:
+ id: 'prev-page-button'
+
+- extendedWaitUntil:
+ visible:
+ id: 'pageNumber1'
+ timeout: 5000
+
+- tapOn:
+ id: 'start-page-button'
+
+- extendedWaitUntil:
+ visible:
+ id: 'pageNumber0'
+ timeout: 5000
+
+- tapOn:
+ id: 'last-page-button'
+
+- extendedWaitUntil:
+ visible:
+ id: 'pageNumber9'
+ timeout: 5000
+
+- tapOn:
+ id: 'remove-page-button'
+
+- extendedWaitUntil:
+ visible:
+ id: 'pageNumber8'
+ timeout: 5000
+
+- tapOn:
+ id: 'add-page-button'
+
+- tapOn:
+ id: 'next-page-button'
+
+- extendedWaitUntil:
+ visible:
+ id: 'pageNumber9'
+ timeout: 5000
diff --git a/.maestro/flows/basic-pager/verify-horizontal-ltr-swipe.yaml b/.maestro/flows/basic-pager/verify-horizontal-ltr-swipe.yaml
new file mode 100644
index 00000000..22fc19da
--- /dev/null
+++ b/.maestro/flows/basic-pager/verify-horizontal-ltr-swipe.yaml
@@ -0,0 +1,29 @@
+appId: com.pagerviewexample
+---
+- tapOn:
+ id: 'scroll-enabled-button'
+
+- swipe:
+ from:
+ id: 'pager-view-horizontal'
+ start: 90%, 50%
+ end: 10%, 50%
+ duration: 100
+
+- assertVisible:
+ id: 'pageNumber0'
+
+- tapOn:
+ id: 'scroll-enabled-button'
+
+- swipe:
+ from:
+ id: 'pager-view-horizontal'
+ start: 90%, 50%
+ end: 10%, 50%
+ duration: 100
+
+- extendedWaitUntil:
+ visible:
+ id: 'pageNumber1'
+ timeout: 5000
diff --git a/.maestro/flows/basic-pager/verify-horizontal-rtl-swipe.yaml b/.maestro/flows/basic-pager/verify-horizontal-rtl-swipe.yaml
new file mode 100644
index 00000000..fd8aa15d
--- /dev/null
+++ b/.maestro/flows/basic-pager/verify-horizontal-rtl-swipe.yaml
@@ -0,0 +1,29 @@
+appId: com.pagerviewexample
+---
+- tapOn:
+ id: 'scroll-enabled-button'
+
+- swipe:
+ from:
+ id: 'pager-view-horizontal'
+ start: 10%, 50%
+ end: 90%, 50%
+ duration: 100
+
+- assertVisible:
+ id: 'pageNumber0'
+
+- tapOn:
+ id: 'scroll-enabled-button'
+
+- swipe:
+ from:
+ id: 'pager-view-horizontal'
+ start: 10%, 50%
+ end: 90%, 50%
+ duration: 100
+
+- extendedWaitUntil:
+ visible:
+ id: 'pageNumber1'
+ timeout: 5000
diff --git a/.maestro/flows/basic-pager/verify-vertical-swipe.yaml b/.maestro/flows/basic-pager/verify-vertical-swipe.yaml
new file mode 100644
index 00000000..a160d576
--- /dev/null
+++ b/.maestro/flows/basic-pager/verify-vertical-swipe.yaml
@@ -0,0 +1,27 @@
+appId: com.pagerviewexample
+---
+- tapOn:
+ id: 'scroll-enabled-button'
+
+- swipe:
+ from:
+ id: 'pager-view-vertical'
+ direction: UP
+ duration: 100
+
+- assertVisible:
+ id: 'pageNumber0'
+
+- tapOn:
+ id: 'scroll-enabled-button'
+
+- swipe:
+ from:
+ id: 'pager-view-vertical'
+ direction: UP
+ duration: 100
+
+- extendedWaitUntil:
+ visible:
+ id: 'pageNumber1'
+ timeout: 5000
diff --git a/.maestro/setup/issue_1098_nested_pager_repro_setup.yaml b/.maestro/setup/issue_1098_nested_pager_repro_setup.yaml
new file mode 100644
index 00000000..9deeae23
--- /dev/null
+++ b/.maestro/setup/issue_1098_nested_pager_repro_setup.yaml
@@ -0,0 +1,20 @@
+appId: ${APP_ID}
+---
+- launchApp
+
+# The issue examples are below the fundamental examples on the home screen.
+- scrollUntilVisible:
+ element:
+ id: 'Issue #1098 Nested Pager Repro'
+ direction: DOWN
+
+- tapOn:
+ id: 'Issue #1098 Nested Pager Repro'
+
+- extendedWaitUntil:
+ visible:
+ id: 'issue-1098-outer-pager'
+ timeout: 10000
+
+- assertVisible:
+ id: 'issue-1098-refresh-outer-pages'
diff --git a/.maestro/setup/pager_basic_example_setup.yaml b/.maestro/setup/pager_basic_example_setup.yaml
deleted file mode 100644
index 1389cdce..00000000
--- a/.maestro/setup/pager_basic_example_setup.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-appId: ${APP_ID}
-# Nest PagerView Example tab is active and accessible
----
-- launchApp
-- assertVisible: 'PagerView Example'
-- tapOn: 'Basic Example'
-- assertVisible: '7 likes'
diff --git a/.maestro/setup/pager_vertical_basic_example_setup.yaml b/.maestro/setup/pager_vertical_basic_example_setup.yaml
deleted file mode 100644
index 2d6ad62e..00000000
--- a/.maestro/setup/pager_vertical_basic_example_setup.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-appId: ${APP_ID}
-# Vertical Basic Example tab is active and accessible
----
-- launchApp
-- assertVisible: 'PagerView Example'
-- tapOn: 'Vertical Basic Example'
-- assertVisible: '7 likes'
diff --git a/.maestro/smoke-test.yaml b/.maestro/smoke-test.yaml
index 3a162642..62cb0f67 100644
--- a/.maestro/smoke-test.yaml
+++ b/.maestro/smoke-test.yaml
@@ -10,15 +10,15 @@ tags:
- extendedWaitUntil:
visible:
- id: 'Basic Example'
+ id: 'example-basic-horizontal'
timeout: 15000
- tapOn:
- id: 'Basic Example'
+ id: 'example-basic-horizontal'
- extendedWaitUntil:
visible:
- id: 'pager-view'
+ id: 'pager-view-horizontal'
timeout: 10000
- assertVisible:
diff --git a/.maestro/tests/issue_1098_nested_pager_repro.yaml b/.maestro/tests/issue_1098_nested_pager_repro.yaml
new file mode 100644
index 00000000..52966488
--- /dev/null
+++ b/.maestro/tests/issue_1098_nested_pager_repro.yaml
@@ -0,0 +1,47 @@
+appId: com.pagerviewexample
+tags:
+ - ios
+ - regression
+---
+- runFlow: ../setup/issue_1098_nested_pager_repro_setup.yaml
+
+# Changing the outer page count remounts its SwiftUI page controllers while the
+# nested pager remains mounted. The app must remain responsive after each change.
+- tapOn:
+ id: 'issue-1098-refresh-outer-pages'
+
+- extendedWaitUntil:
+ visible: 'Refreshes: 1'
+ timeout: 5000
+
+- swipe:
+ from:
+ id: 'issue-1098-outer-pager'
+ # Percentages are screen-relative in Maestro. 40% is the outer page title,
+ # above the nested pager, so this gesture reaches the outer pager.
+ start: 90%, 40%
+ end: 10%, 40%
+ duration: 500
+
+- extendedWaitUntil:
+ visible: 'Outer page 2'
+ timeout: 5000
+
+- swipe:
+ from:
+ id: 'issue-1098-outer-pager'
+ start: 10%, 40%
+ end: 90%, 40%
+ duration: 500
+
+- extendedWaitUntil:
+ visible:
+ id: 'issue-1098-inner-pager'
+ timeout: 5000
+
+- tapOn:
+ id: 'issue-1098-refresh-outer-pages'
+
+- extendedWaitUntil:
+ visible: 'Refreshes: 2'
+ timeout: 5000
diff --git a/.maestro/tests/pager_basic_example.yaml b/.maestro/tests/pager_basic_example.yaml
index 16b4faa0..d6bdc1c9 100644
--- a/.maestro/tests/pager_basic_example.yaml
+++ b/.maestro/tests/pager_basic_example.yaml
@@ -1,47 +1,12 @@
appId: com.pagerviewexample
---
-- runFlow: ../setup/pager_basic_example_setup.yaml
-- tapOn: 'Scroll Enabled'
-- swipe:
- from:
- id: 'pager-view'
- start: 90%, 50%
- end: 10%, 50%
- duration: 100
-- assertVisible:
- text: 'page number 0'
-- tapOn: 'Scroll Disabled'
-- swipe:
- from:
- id: 'pager-view'
- start: 90%, 50%
- end: 10%, 50%
- duration: 100
-- assertVisible:
- text: 'page number 1'
-- tapOn:
- id: 'next-page-button'
-- assertVisible:
- text: 'page number 2'
-- tapOn:
- id: 'prev-page-button'
-- assertVisible:
- text: 'page number 1'
-- tapOn:
- id: 'start-page-button'
-- assertVisible:
- text: 'page number 0'
-- tapOn:
- id: 'last-page-button'
-- assertVisible:
- text: 'page number 9'
-- tapOn:
- id: 'remove-page-button'
-- assertVisible:
- text: 'page number 8'
-- tapOn:
- id: 'add-page-button'
-- tapOn:
- id: 'next-page-button'
-- assertVisible:
- text: 'page number 9'
+- runFlow: ../flows/basic-pager/ensure-ltr.yaml
+
+- runFlow:
+ file: ../flows/basic-pager/open.yaml
+ env:
+ EXAMPLE_ID: 'example-basic-horizontal'
+ PAGER_ID: 'pager-view-horizontal'
+
+- runFlow: ../flows/basic-pager/verify-horizontal-ltr-swipe.yaml
+- runFlow: ../flows/basic-pager/verify-controls.yaml
diff --git a/.maestro/tests/pager_rtl_example.yaml b/.maestro/tests/pager_rtl_example.yaml
new file mode 100644
index 00000000..7448acd1
--- /dev/null
+++ b/.maestro/tests/pager_rtl_example.yaml
@@ -0,0 +1,12 @@
+appId: com.pagerviewexample
+---
+- runFlow: ../flows/basic-pager/ensure-rtl.yaml
+
+- runFlow:
+ file: ../flows/basic-pager/open.yaml
+ env:
+ EXAMPLE_ID: 'example-basic-horizontal'
+ PAGER_ID: 'pager-view-horizontal'
+
+- runFlow: ../flows/basic-pager/verify-horizontal-rtl-swipe.yaml
+- runFlow: ../flows/basic-pager/verify-controls.yaml
diff --git a/.maestro/tests/pager_vertical_basic_example.yaml b/.maestro/tests/pager_vertical_basic_example.yaml
index b8907646..2e02b221 100644
--- a/.maestro/tests/pager_vertical_basic_example.yaml
+++ b/.maestro/tests/pager_vertical_basic_example.yaml
@@ -1,45 +1,12 @@
appId: com.pagerviewexample
---
-- runFlow: ../setup/pager_vertical_basic_example_setup.yaml
-- tapOn: 'Scroll Enabled'
-- swipe:
- from:
- id: 'pager-view'
- direction: UP
- duration: 100
-- assertVisible:
- text: 'page number 0'
-- tapOn: 'Scroll Disabled'
-- swipe:
- from:
- id: 'pager-view'
- direction: UP
- duration: 100
-- assertVisible:
- text: 'page number 1'
-- tapOn:
- id: 'next-page-button'
-- assertVisible:
- text: 'page number 2'
-- tapOn:
- id: 'prev-page-button'
-- assertVisible:
- text: 'page number 1'
-- tapOn:
- id: 'start-page-button'
-- assertVisible:
- text: 'page number 0'
-- tapOn:
- id: 'last-page-button'
-- assertVisible:
- text: 'page number 9'
-- tapOn:
- id: 'remove-page-button'
-- assertVisible:
- text: 'page number 8'
-- tapOn:
- id: 'add-page-button'
-- tapOn:
- id: 'next-page-button'
-- assertVisible:
- text: 'page number 9'
+- runFlow: ../flows/basic-pager/ensure-ltr.yaml
+
+- runFlow:
+ file: ../flows/basic-pager/open.yaml
+ env:
+ EXAMPLE_ID: 'example-basic-vertical'
+ PAGER_ID: 'pager-view-vertical'
+
+- runFlow: ../flows/basic-pager/verify-vertical-swipe.yaml
+- runFlow: ../flows/basic-pager/verify-controls.yaml
diff --git a/.maestro/tests/rtl/pager_basic_example_rtl.yaml b/.maestro/tests/rtl/pager_basic_example_rtl.yaml
deleted file mode 100644
index 933adb73..00000000
--- a/.maestro/tests/rtl/pager_basic_example_rtl.yaml
+++ /dev/null
@@ -1,115 +0,0 @@
-appId: com.pagerviewexample
----
-- launchApp
-
-- extendedWaitUntil:
- visible:
- text: 'PagerView Example'
- timeout: 15000
-
-- runFlow:
- when:
- visible: 'LTR'
- commands:
- - tapOn: 'LTR'
-
-- extendedWaitUntil:
- visible:
- text: 'PagerView Example'
- timeout: 15000
-
-- extendedWaitUntil:
- visible:
- text: 'RTL'
- timeout: 15000
-
-- tapOn: 'Basic Example'
-
-- extendedWaitUntil:
- visible:
- id: 'pager-view'
- timeout: 10000
-
-- assertVisible: '7 likes'
-
-- tapOn: 'Scroll Enabled'
-
-- swipe:
- from:
- id: 'pager-view'
- start: 10%, 50%
- end: 90%, 50%
- duration: 100
-
-- assertVisible:
- text: 'page number 0'
-
-- tapOn: 'Scroll Disabled'
-
-- swipe:
- from:
- id: 'pager-view'
- start: 10%, 50%
- end: 90%, 50%
- duration: 100
-
-- assertVisible:
- text: 'page number 1'
-
-- tapOn:
- id: 'next-page-button'
-
-- assertVisible:
- text: 'page number 2'
-
-- tapOn:
- id: 'prev-page-button'
-
-- assertVisible:
- text: 'page number 1'
-
-- tapOn:
- id: 'start-page-button'
-
-- assertVisible:
- text: 'page number 0'
-
-- tapOn:
- id: 'last-page-button'
-
-- assertVisible:
- text: 'page number 9'
-
-- tapOn:
- id: 'remove-page-button'
-
-- assertVisible:
- text: 'page number 8'
-
-- tapOn:
- id: 'add-page-button'
-
-- tapOn:
- id: 'next-page-button'
-
-- assertVisible:
- text: 'page number 9'
-
-- tapOn: 'Navigate up'
-
-- extendedWaitUntil:
- visible:
- text: 'PagerView Example'
- timeout: 10000
-
-- tapOn: 'RTL'
-
-- extendedWaitUntil:
- visible:
- text: 'PagerView Example'
- timeout: 15000
-
-- extendedWaitUntil:
- visible:
- text: 'LTR'
- timeout: 15000
diff --git a/.maestro/tests/rtl/pager_vertical_basic_example_rtl.yaml b/.maestro/tests/rtl/pager_vertical_basic_example_rtl.yaml
deleted file mode 100644
index d75a47ee..00000000
--- a/.maestro/tests/rtl/pager_vertical_basic_example_rtl.yaml
+++ /dev/null
@@ -1,113 +0,0 @@
-appId: com.pagerviewexample
----
-- launchApp
-
-- extendedWaitUntil:
- visible:
- text: 'PagerView Example'
- timeout: 15000
-
-- runFlow:
- when:
- visible: 'LTR'
- commands:
- - tapOn: 'LTR'
-
-- extendedWaitUntil:
- visible:
- text: 'PagerView Example'
- timeout: 15000
-
-- extendedWaitUntil:
- visible:
- text: 'RTL'
- timeout: 15000
-
-- tapOn: 'Vertical Basic Example'
-
-- extendedWaitUntil:
- visible:
- id: 'pager-view'
- timeout: 10000
-
-- assertVisible: '7 likes'
-
-- tapOn: 'Scroll Enabled'
-
-- swipe:
- from:
- id: 'pager-view'
- direction: UP
- duration: 100
-
-- assertVisible:
- text: 'page number 0'
-
-- tapOn: 'Scroll Disabled'
-
-- swipe:
- from:
- id: 'pager-view'
- direction: UP
- duration: 100
-
-- assertVisible:
- text: 'page number 1'
-
-- tapOn:
- id: 'next-page-button'
-
-- assertVisible:
- text: 'page number 2'
-
-- tapOn:
- id: 'prev-page-button'
-
-- assertVisible:
- text: 'page number 1'
-
-- tapOn:
- id: 'start-page-button'
-
-- assertVisible:
- text: 'page number 0'
-
-- tapOn:
- id: 'last-page-button'
-
-- assertVisible:
- text: 'page number 9'
-
-- tapOn:
- id: 'remove-page-button'
-
-- assertVisible:
- text: 'page number 8'
-
-- tapOn:
- id: 'add-page-button'
-
-- tapOn:
- id: 'next-page-button'
-
-- assertVisible:
- text: 'page number 9'
-
-- tapOn: 'Navigate up'
-
-- extendedWaitUntil:
- visible:
- text: 'PagerView Example'
- timeout: 10000
-
-- tapOn: 'RTL'
-
-- extendedWaitUntil:
- visible:
- text: 'PagerView Example'
- timeout: 15000
-
-- extendedWaitUntil:
- visible:
- text: 'LTR'
- timeout: 15000
diff --git a/example/bun.lock b/example/bun.lock
index 88ee5bef..e5340e1c 100644
--- a/example/bun.lock
+++ b/example/bun.lock
@@ -10,6 +10,7 @@
"@react-navigation/native": "^7.3.7",
"@react-navigation/native-stack": "^7.17.9",
"@react-navigation/stack": "^7.10.10",
+ "@rnx-kit/react-native-host": "0.5.21",
"babel-plugin-module-resolver": "^5.0.3",
"react": "19.2.3",
"react-native": "0.85.3",
@@ -482,7 +483,7 @@
"@rnx-kit/metro-config": ["@rnx-kit/metro-config@2.2.4", "", { "dependencies": { "@rnx-kit/tools-node": "^3.0.0", "@rnx-kit/tools-react-native": "^2.3.1", "@rnx-kit/tools-workspaces": "^0.2.0" }, "peerDependencies": { "@react-native/metro-config": "*", "react": "*", "react-native": "*" }, "optionalPeers": ["@react-native/metro-config"] }, "sha512-OPdGePL/RuzhbyM8hzUR3qcp1PVNju8G5D9f2evYfiowjorYRAP2lIey/zmbGDNezZSTbAzvHxN3BeEYWR4wKQ=="],
- "@rnx-kit/react-native-host": ["@rnx-kit/react-native-host@0.5.20", "", { "peerDependencies": { "react-native": ">=0.66" } }, "sha512-QOi/D+QuTT6ZCq3DVHiFXqna3uDWZIlpNgdBYT2D2eRspAVOssgkRAOxHMk0JvKUFa8iAh00y7y2sjEAELja/Q=="],
+ "@rnx-kit/react-native-host": ["@rnx-kit/react-native-host@0.5.21", "", { "peerDependencies": { "react-native": ">=0.66" } }, "sha512-iXB8o7j/ervwYQk7tPANpq7/3t6zmji1vt699MRpZR31d/aMfjXTyTogUXBaJxMQtqGlrE8HwGlkJn3F0j3MOw=="],
"@rnx-kit/tools-filesystem": ["@rnx-kit/tools-filesystem@0.2.0", "", { "peerDependencies": { "memfs": ">=4.0.0" }, "optionalPeers": ["memfs"] }, "sha512-r5YTy8yy8DWMGdM8yNFlFdX8gE71CHJ2KtpsdSAQN4mol9FFMoAYMwIHrz1i5TyUbtdLd7N/lwWCAK0ZxJYqyQ=="],
diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock
index 3be8049b..ca19358f 100644
--- a/example/ios/Podfile.lock
+++ b/example/ios/Podfile.lock
@@ -1402,7 +1402,7 @@ PODS:
- ReactCommon/turbomodule/core
- ReactNativeDependencies
- Yoga
- - react-native-pager-view (8.0.3):
+ - react-native-pager-view (9.0.0):
- hermes-engine
- RCTRequired
- RCTTypeSafety
@@ -1879,7 +1879,7 @@ PODS:
- React-utils (= 0.85.3)
- ReactNativeDependencies
- ReactNativeDependencies (0.85.3)
- - ReactNativeHost (0.5.19):
+ - ReactNativeHost (0.5.21):
- hermes-engine
- RCTRequired
- RCTTypeSafety
@@ -1903,7 +1903,7 @@ PODS:
- ReactCommon/turbomodule/core
- ReactNativeDependencies
- Yoga
- - ReactTestApp-DevSupport (5.4.1):
+ - ReactTestApp-DevSupport (5.4.4):
- React-Core
- React-jsi
- ReactTestApp-Resources (1.0.0-dev)
@@ -2496,7 +2496,7 @@ SPEC CHECKSUMS:
React-Mapbuffer: 1aa9126122d4247ffc24bf9d28d50ce923499a71
React-microtasksnativemodule: d86581169e9bb5bb6f5fc3c5052f890016c1bf21
React-mutationobservernativemodule: 9a0c4e866f1ef2a57acebc902ebacbdf469ae741
- react-native-pager-view: cf6b0a0ef69c1aca3eeec7c172daf427da4920d9
+ react-native-pager-view: 91a6d37f552b9c47445cc94792ad75cfa08487b2
react-native-safe-area-context: c1eb308f4b36372a4de4b3bdaa8ed695ec3dd461
React-NativeModulesApple: cc6ec4767844d610e92cc358bd3ea34937438d56
React-networking: a8ce15641ed7775d5b54a9d0d32defc367c2216e
@@ -2532,8 +2532,8 @@ SPEC CHECKSUMS:
ReactCodegen: 9af5798e943781fd2318dab7b60f25337388047c
ReactCommon: 3ec2a55999d296af90c24beb66c8a77dc660d3ef
ReactNativeDependencies: 15cf32e2807e82c7dca7ef543c5a095da41dc9e2
- ReactNativeHost: 4581e6dbba05390331bdf0958c660aad11a62f2a
- ReactTestApp-DevSupport: a139ca54333640557f2686c1ef85c625aa0677a2
+ ReactNativeHost: 035cd87713a3b8ce508f37d721fc4433011cc200
+ ReactTestApp-DevSupport: 754876d5c25e6dd12e321a87d54bf618c71cbbd1
ReactTestApp-Resources: 1bd9ff10e4c24f2ad87101a32023721ae923bccf
RNGestureHandler: 5cbe8c5f54204b2175c5d2b8fe6538b02da3aaf5
RNReanimated: 516d842d105966ae05a6a1ad7ad2a0dc1e968d6b
diff --git a/example/package.json b/example/package.json
index 41d35e74..5afe7406 100644
--- a/example/package.json
+++ b/example/package.json
@@ -4,7 +4,7 @@
"private": true,
"scripts": {
"start": "react-native start",
- "pods": "pod install --project-directory=ios",
+ "pods": "bundle install && cd ios && bundle exec pod install && cd ..",
"test": "jest",
"lint": "eslint .",
"mkdist": "node -e \"require('node:fs').mkdirSync('dist', { recursive: true, mode: 0o755 })\"",
@@ -21,6 +21,7 @@
"@react-navigation/native": "^7.3.7",
"@react-navigation/native-stack": "^7.17.9",
"@react-navigation/stack": "^7.10.10",
+ "@rnx-kit/react-native-host": "0.5.21",
"babel-plugin-module-resolver": "^5.0.3",
"react": "19.2.3",
"react-native": "0.85.3",
diff --git a/example/src/App.tsx b/example/src/App.tsx
index 5883964c..87920525 100644
--- a/example/src/App.tsx
+++ b/example/src/App.tsx
@@ -34,6 +34,8 @@ import { createNativeStackNavigator } from '@react-navigation/native-stack';
import { SafeAreaProvider } from 'react-native-safe-area-context';
import { PagerHookExample } from './PagerHookExample';
import { NestedHorizontalScrollViewExample } from './NestedHorizontalScrollViewExample';
+import { Issue1098NestedPagerRepro } from './Issue1098NestedPagerRepro';
+import { Issue1099SafeAreaRepro } from './Issue1099SafeAreaRepro';
function BasicPagerViewExampleScreen() {
return ;
@@ -43,14 +45,22 @@ function VerticalBasicPagerViewExampleScreen() {
return ;
}
-const examples = [
+type Example = {
+ component: React.ComponentType;
+ name: string;
+ testID?: string;
+};
+
+const examples: Example[] = [
{
component: BasicPagerViewExampleScreen,
name: 'Basic Example',
+ testID: 'example-basic-horizontal',
},
{
component: VerticalBasicPagerViewExampleScreen,
name: 'Vertical Basic Example',
+ testID: 'example-basic-vertical',
},
{ component: OnPageScrollExample, name: 'OnPageScroll Example' },
@@ -73,21 +83,20 @@ const examples = [
component: ScrollViewInsideExample,
name: 'ScrollView inside PagerView Example',
},
-
{
component: TabViewInsideScrollViewExample,
name: 'TabView inside ScrollView Example',
},
];
-const tabViewExamples = [
+const tabViewExamples: Example[] = [
{ component: MaterialTopBarExample, name: 'MaterialTopBarExample' },
{ component: TabBarIconExample, name: 'TabBarIconExample' },
{ component: CustomTabBarExample, name: 'CustomTabBarExample' },
{ component: CoverflowExample, name: 'CoverflowExample' },
];
-const additionalExamples = [
+const additionalExamples: Example[] = [
{ component: PagerHookExample, name: 'Pager Hook Example' },
{ component: KeyboardExample, name: 'Keyboard Example' },
{ component: HeadphonesCarouselExample, name: 'Headphones Carousel Example' },
@@ -98,7 +107,23 @@ const additionalExamples = [
},
];
-const allExamples = [...examples, ...tabViewExamples, ...additionalExamples];
+const ghIssues: Example[] = [
+ {
+ component: Issue1098NestedPagerRepro,
+ name: 'Issue #1098 Nested Pager Repro',
+ },
+ {
+ component: Issue1099SafeAreaRepro,
+ name: 'Issue #1099 Safe Area Repro',
+ },
+];
+
+const allExamples = [
+ ...examples,
+ ...tabViewExamples,
+ ...additionalExamples,
+ ...ghIssues,
+];
function App() {
const navigation = useNavigation();
@@ -108,7 +133,7 @@ function App() {
{examples.map((example) => (
{
//@ts-ignore
@@ -146,6 +171,20 @@ function App() {
{example.name}
))}
+ Github Issues Examples
+ {ghIssues.map((example) => (
+ {
+ //@ts-ignore
+ navigation.navigate(example.name);
+ }}
+ >
+ {example.name}
+
+ ))}
);
}
@@ -192,6 +231,9 @@ export function Navigation() {