From 147fe0a2b63a064c659c04c1cc953864f9edb8a6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kacper=20Roz=CC=87niata?=
<56474758+krozniata@users.noreply.github.com>
Date: Tue, 13 Oct 2026 09:43:35 +0200
Subject: [PATCH 1/2] chore: remove unnecessary dependencies from example app
---
bun.lock | 35 ----
example/ios/Podfile | 10 --
example/ios/Podfile.lock | 78 +--------
example/package.json | 3 -
example/src/App.tsx | 89 +++++-----
example/src/PaginationDotsExample.tsx | 77 +++------
.../component/NavigationPanel/LogsPanel.tsx | 3 +-
example/src/component/PaginationDots.tsx | 163 ++++++++++++++++++
8 files changed, 228 insertions(+), 230 deletions(-)
create mode 100644 example/src/component/PaginationDots.tsx
diff --git a/bun.lock b/bun.lock
index dfbe0e25..9c4e4127 100644
--- a/bun.lock
+++ b/bun.lock
@@ -47,12 +47,9 @@
"@react-navigation/native-stack": "^7.20.0",
"react": "19.2.3",
"react-native": "0.87.1",
- "react-native-animated-pagination-dots": "^0.1.73",
- "react-native-gesture-handler": "3.3.0",
"react-native-reanimated": "4.7.1",
"react-native-safe-area-context": "5.10.1",
"react-native-screens": "4.28.0",
- "react-native-svg": "15.15.5",
"react-native-tab-view": "4.3.3",
"react-native-worklets": "0.13.0",
},
@@ -675,8 +672,6 @@
"@types/react": ["@types/react@19.3.0", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg=="],
- "@types/react-test-renderer": ["@types/react-test-renderer@19.3.0", "", { "dependencies": { "@types/react": "*" } }, "sha512-TX4p2D4Z2oigM3SXU7+QyLSUnSR0vR1S1Pfxm/qFL9nHQ3jclgi6ioGoWQmlIr1DeKRVmPJrmNlhgM0JlWlLUg=="],
-
"@types/stack-utils": ["@types/stack-utils@2.0.3", "", {}, "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw=="],
"@types/yargs": ["@types/yargs@17.0.35", "", { "dependencies": { "@types/yargs-parser": "*" } }, "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg=="],
@@ -873,8 +868,6 @@
"body-parser": ["body-parser@2.3.0", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^2.0.0", "debug": "^4.4.3", "http-errors": "^2.0.1", "iconv-lite": "^0.7.2", "on-finished": "^2.4.1", "qs": "^6.15.2", "raw-body": "^3.0.2", "type-is": "^2.1.0" } }, "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw=="],
- "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="],
-
"boxen": ["boxen@5.1.2", "", { "dependencies": { "ansi-align": "^3.0.0", "camelcase": "^6.2.0", "chalk": "^4.1.0", "cli-boxes": "^2.2.1", "string-width": "^4.2.2", "type-fest": "^0.20.2", "widest-line": "^3.1.0", "wrap-ansi": "^7.0.0" } }, "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ=="],
"brace-expansion": ["brace-expansion@1.1.21", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9zeA+KLZNNzglF2TPKRQEDyx6Yby7daAkuy8MiPzpXPsYDWi/DRM8jmwUDxokQjYqBpv5DgPiwD4h4ZZSy1Ujw=="],
@@ -1019,12 +1012,6 @@
"crypto-random-string": ["crypto-random-string@2.0.0", "", {}, "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA=="],
- "css-select": ["css-select@5.2.2", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw=="],
-
- "css-tree": ["css-tree@1.1.3", "", { "dependencies": { "mdn-data": "2.0.14", "source-map": "^0.6.1" } }, "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q=="],
-
- "css-what": ["css-what@6.2.2", "", {}, "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="],
-
"csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="],
"dargs": ["dargs@7.0.0", "", {}, "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg=="],
@@ -1087,14 +1074,6 @@
"doctrine": ["doctrine@2.1.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="],
- "dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="],
-
- "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="],
-
- "domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="],
-
- "domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="],
-
"dot-prop": ["dot-prop@5.3.0", "", { "dependencies": { "is-obj": "^2.0.0" } }, "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q=="],
"dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="],
@@ -1115,8 +1094,6 @@
"end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="],
- "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
-
"env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="],
"envinfo": ["envinfo@7.21.0", "", { "bin": { "envinfo": "dist/cli.js" } }, "sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow=="],
@@ -1663,8 +1640,6 @@
"math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="],
- "mdn-data": ["mdn-data@2.0.14", "", {}, "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow=="],
-
"media-typer": ["media-typer@1.1.1", "", {}, "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ=="],
"memoize-one": ["memoize-one@5.2.1", "", {}, "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q=="],
@@ -1765,8 +1740,6 @@
"npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="],
- "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="],
-
"nullthrows": ["nullthrows@1.1.1", "", {}, "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw=="],
"ob1": ["ob1@0.87.1", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-i8iA8uij0g1YQzS8uOJPSRCgwDjO9warIHUAu1Fqj877Wc3wlfxDYBioYWgKTBF2+URVJttyDWSEpmd99nlvtQ=="],
@@ -1925,12 +1898,8 @@
"react-native": ["react-native@0.87.1", "", { "dependencies": { "@react-native/asset-utils": "0.87.1", "@react-native/codegen": "0.87.1", "@react-native/community-cli-plugin": "0.87.1", "@react-native/gradle-plugin": "0.87.1", "@react-native/normalize-colors": "0.87.1", "@react-native/virtualized-lists": "0.87.1", "anser": "^1.4.9", "ansi-regex": "^5.0.0", "babel-plugin-syntax-hermes-parser": "0.36.1", "base64-js": "^1.5.1", "commander": "^12.0.0", "flow-enums-runtime": "^0.0.6", "hermes-compiler": "250829098.0.17", "invariant": "^2.2.4", "memoize-one": "^5.0.0", "metro-runtime": "^0.87.0", "metro-source-map": "^0.87.0", "nullthrows": "^1.1.1", "pretty-format": "^29.7.0", "promise": "^8.3.0", "react-devtools-core": "^6.1.5", "react-refresh": "^0.14.0", "regenerator-runtime": "^0.13.2", "scheduler": "0.27.0", "semver": "^7.1.3", "stacktrace-parser": "^0.1.10", "tinyglobby": "^0.2.15", "whatwg-fetch": "^3.0.0", "ws": "^7.5.10", "yargs": "^17.6.2" }, "peerDependencies": { "@types/react": "^19.1.1", "react": "^19.2.3" }, "optionalPeers": ["@types/react"], "bin": { "react-native": "cli.js" } }, "sha512-DJKG6ANoD7BtrE4z9DewiSD7/RxCX73lK5Pu49aUr85P3333Dm2roTiP0rRjQNDZdVizHSOmstWfwF/o9EjCRA=="],
- "react-native-animated-pagination-dots": ["react-native-animated-pagination-dots@0.1.73", "", { "peerDependencies": { "react": "*", "react-native": "*", "react-native-svg": "*" } }, "sha512-yg6RL0ph3UN+KHX5NDa1iPVxh0J6h9dIn4zoColhJeAGV9TTl8SlaucwcBWaLd7DeUoJgkPxB/O4zJMAcpI/FQ=="],
-
"react-native-builder-bob": ["react-native-builder-bob@0.43.1", "", { "dependencies": { "@babel/core": "^7.29.0", "@babel/plugin-transform-flow-strip-types": "^7.27.1", "@babel/plugin-transform-strict-mode": "^7.27.1", "@babel/preset-env": "^7.29.2", "@babel/preset-react": "^7.28.5", "@babel/preset-typescript": "^7.28.5", "@jridgewell/sourcemap-codec": "^1.5.5", "arktype": "^2.2.0", "babel-plugin-syntax-hermes-parser": "^0.34.0", "browserslist": "^4.28.2", "cross-spawn": "^7.0.6", "dedent": "^1.7.2", "del": "^8.0.1", "escape-string-regexp": "^5.0.0", "fs-extra": "^11.3.4", "glob": "^13.0.6", "json5": "^2.2.3", "kleur": "^4.1.5", "prompts": "^2.4.2", "typescript": "^6.0.3", "which": "^6.0.1", "yargs": "^18.0.0" }, "bin": { "bob": "bin/bob" } }, "sha512-TRGDmaAI72gMyRXFbNhWVODLe9YOydJ9HV+SCdLp+BjHnUJLeAImFCnZUmlO/2pUQUC1+yS+S4EMlRZ4rGCwBg=="],
- "react-native-gesture-handler": ["react-native-gesture-handler@3.3.0", "", { "dependencies": { "@types/react-test-renderer": "^19.1.0", "invariant": "^2.2.4" }, "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-ZCTlJ09nE3GPbm7J74lvwpxmx1TQ/7MDlHZNLARVYTN82k21mJUJ7BmI9eWjEi8eevHiAudI5O1Cpnt0rJfoJA=="],
-
"react-native-is-edge-to-edge": ["react-native-is-edge-to-edge@1.3.1", "", { "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-NIXU/iT5+ORyCc7p0z2nnlkouYKX425vuU1OEm6bMMtWWR9yvb+Xg5AZmImTKoF9abxCPqrKC3rOZsKzUYgYZA=="],
"react-native-monorepo-config": ["react-native-monorepo-config@0.4.0", "", { "dependencies": { "escape-string-regexp": "^5.0.0", "fast-glob": "^3.3.3" } }, "sha512-TsUsysuqfw/sZ5yF9VDnd+7S6yThmaTjt1ZCKPeMyJfI34UBd9oRTrUHVqyonRQ8PtAdjWta2Dn6npW+UIYWiw=="],
@@ -1945,8 +1914,6 @@
"react-native-screens": ["react-native-screens@4.28.0", "", { "dependencies": { "react-freeze": "^1.0.0", "warn-once": "^0.1.0" }, "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-0/79Z8RCibuaAHti+DJ2Dq0m6UFWh4+p1bH58K3cjiQ7IDWs5kU9tCAj4lXcJMHHonbF2mIE2BeaPSEvOpIiFg=="],
- "react-native-svg": ["react-native-svg@15.15.5", "", { "dependencies": { "css-select": "^5.1.0", "css-tree": "^1.1.3" }, "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-L4go5jA+GWutdJ/JucuN20cjAbMg1HmMtAP+wZ+3JLCf6Jd0bhXQHxciRP/AQm/FlrIEZwkMcHNZP+FXAiic0w=="],
-
"react-native-tab-view": ["react-native-tab-view@4.3.3", "", { "dependencies": { "use-latest-callback": "^0.2.4" }, "peerDependencies": { "react": ">= 18.2.0", "react-native": "*", "react-native-pager-view": ">= 6.0.0" } }, "sha512-K8cxG2r5YGh4bT/YM+3bdHz1KXzLqesIuCC8BoHRINajtyvNWltI415P+i+MOg7iCpmV8B+yLS9oNg5pO/3klw=="],
"react-native-worklets": ["react-native-worklets@0.13.0", "", { "dependencies": { "@babel/generator": "^7.27.1", "@babel/plugin-transform-arrow-functions": "^7.27.1", "@babel/plugin-transform-class-properties": "^7.28.6", "@babel/plugin-transform-classes": "^7.28.6", "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", "@babel/plugin-transform-optional-chaining": "^7.28.6", "@babel/plugin-transform-shorthand-properties": "^7.27.1", "@babel/plugin-transform-template-literals": "^7.27.1", "@babel/plugin-transform-unicode-regex": "^7.27.1", "@babel/preset-typescript": "^7.28.5", "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "semver": "^7.7.4", "whatwg-fetch": "^3.6.20" }, "peerDependencies": { "@babel/core": "*", "@react-native/metro-config": "*", "react": "*", "react-native": "0.86 - 0.88" } }, "sha512-1OrhAeAKaZF4XrBa4YbPQbKzNOpjh52HDlId8e6ete1OCHNdAlrQHzG4gznJ225EAj3dgQXHViJvK51M9B52jQ=="],
@@ -2429,8 +2396,6 @@
"cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
- "css-tree/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="],
-
"decamelize-keys/map-obj": ["map-obj@1.0.1", "", {}, "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg=="],
"del/globby": ["globby@14.1.0", "", { "dependencies": { "@sindresorhus/merge-streams": "^2.1.0", "fast-glob": "^3.3.3", "ignore": "^7.0.3", "path-type": "^6.0.0", "slash": "^5.1.0", "unicorn-magic": "^0.3.0" } }, "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA=="],
diff --git a/example/ios/Podfile b/example/ios/Podfile
index ab7e80f1..0db2cd89 100644
--- a/example/ios/Podfile
+++ b/example/ios/Podfile
@@ -30,15 +30,5 @@ target 'PagerViewExample' do
:mac_catalyst_enabled => false,
# :ccache_enabled => true
)
-
- # Xcode rejects deployment targets below 15.0, and RN's own post_install
- # skips resource-bundle targets, so RNSVG's bundles keep the podspec's 12.4.
- installer.pods_project.targets.each do |target|
- target.build_configurations.each do |config|
- if config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'].to_f < 15.1
- config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.1'
- end
- end
- end
end
end
diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock
index fad8b9b4..eb9c26f1 100644
--- a/example/ios/Podfile.lock
+++ b/example/ios/Podfile.lock
@@ -1696,29 +1696,6 @@ PODS:
- React-utils (= 0.87.1)
- ReactNativeDependencies
- ReactNativeDependencies (0.87.1)
- - RNGestureHandler (3.3.0):
- - hermes-engine
- - RCTRequired
- - RCTTypeSafety
- - React-bridging
- - React-Core
- - React-Core-prebuilt
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-jsi
- - React-NativeModulesApple
- - React-RCTFabric
- - React-renderercss
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/core
- - ReactNativeDependencies
- - RNWorklets (>= 0.8.0)
- - Yoga
- RNReanimated (4.7.1):
- hermes-engine
- RCTRequired
@@ -1865,51 +1842,6 @@ PODS:
- ReactCommon/turbomodule/core
- ReactNativeDependencies
- Yoga
- - RNSVG (15.15.5):
- - hermes-engine
- - RCTRequired
- - RCTTypeSafety
- - React-bridging
- - React-Core
- - React-Core-prebuilt
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-jsi
- - React-NativeModulesApple
- - React-RCTFabric
- - React-renderercss
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/core
- - ReactNativeDependencies
- - RNSVG/common (= 15.15.5)
- - Yoga
- - RNSVG/common (15.15.5):
- - hermes-engine
- - RCTRequired
- - RCTTypeSafety
- - React-bridging
- - React-Core
- - React-Core-prebuilt
- - React-debug
- - React-Fabric
- - React-featureflags
- - React-graphics
- - React-ImageManager
- - React-jsi
- - React-NativeModulesApple
- - React-RCTFabric
- - React-renderercss
- - React-rendererdebug
- - React-utils
- - ReactCodegen
- - ReactCommon/turbomodule/core
- - ReactNativeDependencies
- - Yoga
- RNWorklets (0.13.0):
- hermes-engine
- RCTRequired
@@ -2074,10 +2006,8 @@ DEPENDENCIES:
- ReactCodegen (from `build/generated/ios/ReactCodegen`)
- ReactCommon/turbomodule/core (from `../../node_modules/react-native/ReactCommon`)
- ReactNativeDependencies (from `../../node_modules/react-native/third-party-podspecs/ReactNativeDependencies.podspec`)
- - RNGestureHandler (from `../../node_modules/react-native-gesture-handler`)
- RNReanimated (from `../../node_modules/react-native-reanimated`)
- RNScreens (from `../../node_modules/react-native-screens`)
- - RNSVG (from `../../node_modules/react-native-svg`)
- RNWorklets (from `../../node_modules/react-native-worklets`)
- SocketRocket (from `build/rndeps-facades/SocketRocket`)
- Yoga (from `build/rncore-facades/Yoga`)
@@ -2258,14 +2188,10 @@ EXTERNAL SOURCES:
:path: "../../node_modules/react-native/ReactCommon"
ReactNativeDependencies:
:podspec: "../../node_modules/react-native/third-party-podspecs/ReactNativeDependencies.podspec"
- RNGestureHandler:
- :path: "../../node_modules/react-native-gesture-handler"
RNReanimated:
:path: "../../node_modules/react-native-reanimated"
RNScreens:
:path: "../../node_modules/react-native-screens"
- RNSVG:
- :path: "../../node_modules/react-native-svg"
RNWorklets:
:path: "../../node_modules/react-native-worklets"
SocketRocket:
@@ -2359,15 +2285,13 @@ SPEC CHECKSUMS:
ReactCodegen: 4c37f4e08e5f07a42571c9121381ce113c7fa447
ReactCommon: 749169e12aa3461a3df3656a00e48dbe0456b2d6
ReactNativeDependencies: 94c922c39e0e6150ee9ad05e2ca1946e0ef55783
- RNGestureHandler: eb4c031b22e791851742d29384ddcad30f3ee49d
RNReanimated: ed120ab46e6c23b98484e9832a51cceeb4a99724
RNScreens: 038dc998fe1ab34778d9e8f4a33318a6c7a5bde8
- RNSVG: 6c9bcbf53822153be6f6c1484f6b0b57c0040d21
RNWorklets: 75edbf2dd8509c1cce82e60d2d527a616d59240c
SocketRocket: 37aec555668fb852ec12e3c0de59a86ca58f0871
SwiftUIIntrospect: fee9aa07293ee280373a591e1824e8ddc869ba5d
Yoga: d1c536142c5ff8ec8cd856ab2a7c227a1d875c8e
-PODFILE CHECKSUM: cbcc9224eaa3d62e5c6f42ad9bcb11207fb4b007
+PODFILE CHECKSUM: afa7d0e3fbdff0d26b7633845fbe98429f748599
COCOAPODS: 1.15.2
diff --git a/example/package.json b/example/package.json
index af86bded..fb664fd7 100644
--- a/example/package.json
+++ b/example/package.json
@@ -21,12 +21,9 @@
"@react-navigation/native-stack": "^7.20.0",
"react": "19.2.3",
"react-native": "0.87.1",
- "react-native-animated-pagination-dots": "^0.1.73",
- "react-native-gesture-handler": "3.3.0",
"react-native-reanimated": "4.7.1",
"react-native-safe-area-context": "5.10.1",
"react-native-screens": "4.28.0",
- "react-native-svg": "15.15.5",
"react-native-tab-view": "4.3.3",
"react-native-worklets": "0.13.0"
},
diff --git a/example/src/App.tsx b/example/src/App.tsx
index 874a309d..5264c21b 100644
--- a/example/src/App.tsx
+++ b/example/src/App.tsx
@@ -37,7 +37,6 @@ import ReanimatedOnPageScrollExample from './ReanimatedOnPageScrollExample';
import { MaterialTopBarExample } from './MaterialTopTabExample';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import { SafeAreaProvider } from 'react-native-safe-area-context';
-import { GestureHandlerRootView } from 'react-native-gesture-handler';
import { PagerHookExample } from './PagerHookExample';
import { NestedHorizontalScrollViewExample } from './NestedHorizontalScrollViewExample';
import { Issue1096KeyboardShrinkRepro } from './gh-issues/Issue1096KeyboardShrinkRepro';
@@ -251,54 +250,52 @@ const NavigationStack = createNativeStackNavigator();
export function Navigation() {
return (
-
-
-
-
-
+
+
+
+
+ />
+ {allExamples.map((example, index) => (
- {allExamples.map((example, index) => (
-
- ))}
-
-
-
-
-
-
-
+ ))}
+
+
+
+
+
+
);
}
diff --git a/example/src/PaginationDotsExample.tsx b/example/src/PaginationDotsExample.tsx
index 6bba8a61..8d65ff91 100644
--- a/example/src/PaginationDotsExample.tsx
+++ b/example/src/PaginationDotsExample.tsx
@@ -1,22 +1,15 @@
import React from 'react';
-import {
- StyleSheet,
- Text,
- View,
- SafeAreaView,
- Animated,
- Dimensions,
-} from 'react-native';
+import { StyleSheet, Text, View, SafeAreaView, Animated } from 'react-native';
import PagerView, {
PagerViewOnPageScrollEventData,
} from 'react-native-pager-view';
import {
- ScalingDot,
+ ExpandingDots,
+ ScalingDots,
SlidingBorder,
- ExpandingDot,
SlidingDot,
-} from 'react-native-animated-pagination-dots';
+} from './component/PaginationDots';
const AnimatedPagerView = Animated.createAnimatedComponent(PagerView);
@@ -48,18 +41,13 @@ const INTRO_DATA = [
];
export default function PaginationDotsExample() {
- const width = Dimensions.get('window').width;
const ref = React.useRef(null);
const scrollOffsetAnimatedValue = React.useRef(new Animated.Value(0)).current;
const positionAnimatedValue = React.useRef(new Animated.Value(0)).current;
- const inputRange = [0, INTRO_DATA.length];
- const scrollX = Animated.add(
+ const progress = Animated.add(
scrollOffsetAnimatedValue,
positionAnimatedValue
- ).interpolate({
- inputRange,
- outputRange: [0, INTRO_DATA.length * width],
- });
+ );
const onPageScroll = React.useMemo(
() =>
@@ -102,59 +90,34 @@ export default function PaginationDotsExample() {
Expanding Dot
-
Scaling Dot
-
-
Sliding Border
Sliding Dot
diff --git a/example/src/component/NavigationPanel/LogsPanel.tsx b/example/src/component/NavigationPanel/LogsPanel.tsx
index 0fe0ab79..f62160c1 100644
--- a/example/src/component/NavigationPanel/LogsPanel.tsx
+++ b/example/src/component/NavigationPanel/LogsPanel.tsx
@@ -1,6 +1,5 @@
import React from 'react';
-import { StyleSheet, Text, View } from 'react-native';
-import { FlatList } from 'react-native-gesture-handler';
+import { FlatList, StyleSheet, Text, View } from 'react-native';
import type { LogsPanelProps } from './types';
import type { EventLog } from '../../hook/useNavigationPanel';
import { colors, radius } from '../../theme';
diff --git a/example/src/component/PaginationDots.tsx b/example/src/component/PaginationDots.tsx
new file mode 100644
index 00000000..de11836f
--- /dev/null
+++ b/example/src/component/PaginationDots.tsx
@@ -0,0 +1,163 @@
+import React from 'react';
+import { Animated, StyleSheet, View } from 'react-native';
+
+const ACTIVE_COLOR = '#347af0';
+const INACTIVE_COLOR = '#000';
+
+interface Props {
+ // Fractional page index: position + offset from onPageScroll.
+ progress: ReturnType;
+ count: number;
+ testID?: string;
+}
+
+const pageRange = (index: number) => [index - 1, index, index + 1];
+
+const interpolate = (
+ progress: Props['progress'],
+ index: number,
+ inactive: T,
+ active: T
+) =>
+ progress.interpolate({
+ inputRange: pageRange(index),
+ outputRange: [inactive, active, inactive],
+ extrapolate: 'clamp',
+ });
+
+export function ExpandingDots({ progress, count, testID }: Props) {
+ return (
+
+ {Array.from({ length: count }, (_, index) => (
+
+ ))}
+
+ );
+}
+
+export function ScalingDots({ progress, count, testID }: Props) {
+ return (
+
+ {Array.from({ length: count }, (_, index) => (
+
+ ))}
+
+ );
+}
+
+const BORDER_SIZE = 20;
+
+export function SlidingBorder({ progress, count, testID }: Props) {
+ const translateX = Animated.multiply(progress, BORDER_SIZE);
+ return (
+
+
+ {Array.from({ length: count }, (_, index) => (
+
+
+
+ ))}
+
+ );
+}
+
+const SLIDING_DOT_SIZE = 12;
+const SLIDING_DOT_MARGIN = 3;
+
+export function SlidingDot({ progress, count, testID }: Props) {
+ const translateX = Animated.multiply(
+ progress,
+ SLIDING_DOT_SIZE + SLIDING_DOT_MARGIN * 2
+ );
+ return (
+
+ {Array.from({ length: count }, (_, index) => (
+
+ ))}
+
+
+ );
+}
+
+const styles = StyleSheet.create({
+ row: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ alignSelf: 'center',
+ marginTop: 12,
+ },
+ dot: {
+ width: 10,
+ height: 10,
+ borderRadius: 5,
+ marginHorizontal: 5,
+ },
+ inactive: {
+ backgroundColor: ACTIVE_COLOR,
+ opacity: 0.3,
+ },
+ slidingBorder: {
+ position: 'absolute',
+ width: BORDER_SIZE,
+ height: BORDER_SIZE,
+ borderRadius: BORDER_SIZE / 2,
+ borderWidth: 1,
+ borderColor: ACTIVE_COLOR,
+ },
+ borderSlot: {
+ width: BORDER_SIZE,
+ height: BORDER_SIZE,
+ alignItems: 'center',
+ justifyContent: 'center',
+ },
+ smallDot: {
+ width: 10,
+ height: 10,
+ borderRadius: 5,
+ backgroundColor: ACTIVE_COLOR,
+ },
+ slidingDot: {
+ width: SLIDING_DOT_SIZE,
+ height: SLIDING_DOT_SIZE,
+ borderRadius: SLIDING_DOT_SIZE / 2,
+ marginHorizontal: SLIDING_DOT_MARGIN,
+ },
+ slidingDotActive: {
+ position: 'absolute',
+ left: 0,
+ backgroundColor: ACTIVE_COLOR,
+ },
+});
From b5e3c3f34db1ac3af3e45a076ee5a3edfb5e64cc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kacper=20Roz=CC=87niata?=
<56474758+krozniata@users.noreply.github.com>
Date: Tue, 13 Oct 2026 10:11:17 +0200
Subject: [PATCH 2/2] fix: rtl
---
example/src/component/PaginationDots.tsx | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/example/src/component/PaginationDots.tsx b/example/src/component/PaginationDots.tsx
index de11836f..3eb88db5 100644
--- a/example/src/component/PaginationDots.tsx
+++ b/example/src/component/PaginationDots.tsx
@@ -1,5 +1,5 @@
import React from 'react';
-import { Animated, StyleSheet, View } from 'react-native';
+import { Animated, I18nManager, StyleSheet, View } from 'react-native';
const ACTIVE_COLOR = '#347af0';
const INACTIVE_COLOR = '#000';
@@ -13,6 +13,9 @@ interface Props {
const pageRange = (index: number) => [index - 1, index, index + 1];
+const slideX = (progress: Props['progress'], step: number) =>
+ Animated.multiply(progress, I18nManager.isRTL ? -step : step);
+
const interpolate = (
progress: Props['progress'],
index: number,
@@ -73,7 +76,7 @@ export function ScalingDots({ progress, count, testID }: Props) {
const BORDER_SIZE = 20;
export function SlidingBorder({ progress, count, testID }: Props) {
- const translateX = Animated.multiply(progress, BORDER_SIZE);
+ const translateX = slideX(progress, BORDER_SIZE);
return (