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 (