├── .buckconfig ├── .clang-format ├── .eslintrc.js ├── .flowconfig ├── .gitattributes ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug-report.yml │ └── config.yml ├── PULL_REQUEST_TEMPLATE.md └── workflows │ ├── android-build-test-fabric.yml │ ├── android-build-test.yml │ ├── android-e2e-test-fabric.yml │ ├── android-e2e-test.yml │ ├── check-archs-consistency.yml │ ├── close-when-stale.yml │ ├── docs-check.yml │ ├── helper │ └── clear-annotations.sh │ ├── ios-build-test-fabric.yml │ ├── ios-build-test.yml │ ├── ios-e2e-test-fabric.yml │ ├── ios-e2e-test.yml │ ├── main.yml │ ├── needs-more-info.yml │ ├── needs-repro.yml │ ├── npm-screens-publish-nightly.yml │ ├── platforms.yml │ ├── tv-os-build-test.yml │ └── windows-build-test.yml ├── .gitignore ├── .gitmodules ├── .husky ├── .gitignore └── pre-commit ├── .npmignore ├── .nvmrc ├── .prettierrc.js ├── .watchmanconfig ├── .yarn └── releases │ └── yarn-4.1.1.cjs ├── .yarnrc.yml ├── Example ├── .bundle │ └── config ├── .detoxrc.js ├── .eslintrc.js ├── .gitignore ├── .watchmanconfig ├── App.tsx ├── Gemfile ├── Gemfile.lock ├── android │ ├── app │ │ ├── build.gradle │ │ ├── debug.keystore │ │ ├── proguard-rules.pro │ │ ├── rns-example-keystore.jks │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── swmansion │ │ │ │ └── rnscreens │ │ │ │ └── example │ │ │ │ └── DetoxTest.java │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── ic_launcher-playstore.png │ │ │ ├── java │ │ │ └── com │ │ │ │ └── swmansion │ │ │ │ └── rnscreens │ │ │ │ └── example │ │ │ │ ├── MainActivity.kt │ │ │ │ └── MainApplication.kt │ │ │ └── res │ │ │ ├── drawable │ │ │ └── rn_edit_text_material.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── values │ │ │ ├── ic_launcher_background.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ │ └── xml │ │ │ └── network_security_config.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── keystores │ │ ├── BUCK │ │ └── debug.keystore.properties │ └── settings.gradle ├── app.json ├── babel.config.js ├── e2e │ ├── apps │ │ └── test-butler-app-2.2.1.apk │ ├── examplesTests │ │ ├── bottomTabs.e2e.ts │ │ ├── events.e2e.ts │ │ ├── simpleNativeStack.e2e.ts │ │ └── stackPresentation.e2e.ts │ ├── firstTest.e2e.ts │ ├── jest.config.js │ └── jest.setup.ts ├── index.js ├── ios │ ├── .xcode.env │ ├── AppDelegate.swift │ ├── Podfile │ ├── Podfile.lock │ ├── ScreensExample.xcodeproj │ │ ├── project.pbxproj │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── ScreensExample.xcscheme │ ├── ScreensExample.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── ScreensExample │ │ ├── Images.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── 100.png │ │ │ │ ├── 1024.png │ │ │ │ ├── 114.png │ │ │ │ ├── 120.png │ │ │ │ ├── 144.png │ │ │ │ ├── 152.png │ │ │ │ ├── 167.png │ │ │ │ ├── 180.png │ │ │ │ ├── 20.png │ │ │ │ ├── 29.png │ │ │ │ ├── 40.png │ │ │ │ ├── 50.png │ │ │ │ ├── 57.png │ │ │ │ ├── 58.png │ │ │ │ ├── 60.png │ │ │ │ ├── 72.png │ │ │ │ ├── 76.png │ │ │ │ ├── 80.png │ │ │ │ ├── 87.png │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ └── react-native-screens-logo.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── react-native-screens-logo.png │ │ ├── Info.plist │ │ ├── LaunchScreen.storyboard │ │ ├── PrivacyInfo.xcprivacy │ │ └── RNSSampleLifecycleAwareView.m │ └── ScreensExampleTests │ │ ├── Info.plist │ │ └── ScreensExampleTests.m ├── jest.config.js ├── metro.config.js ├── package.json ├── tsconfig.json └── yarn.lock ├── FabricExample ├── .bundle │ └── config ├── .detoxrc.js ├── .eslintrc.js ├── .gitignore ├── .watchmanconfig ├── App.tsx ├── Gemfile ├── Gemfile.lock ├── README.md ├── __tests__ │ └── App.test.tsx ├── android │ ├── app │ │ ├── build.gradle │ │ ├── debug.keystore │ │ ├── proguard-rules.pro │ │ ├── rns-example-keystore.jks │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── swmansion │ │ │ │ └── rnscreens │ │ │ │ └── DetoxTest.java │ │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── ic_launcher-playstore.png │ │ │ ├── java │ │ │ └── com │ │ │ │ └── fabricexample │ │ │ │ ├── MainActivity.kt │ │ │ │ └── MainApplication.kt │ │ │ └── res │ │ │ ├── drawable │ │ │ └── rn_edit_text_material.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_background.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_background.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_background.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_background.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_background.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── values │ │ │ ├── ic_launcher_background.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ │ └── xml │ │ │ └── network_security_config.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle ├── app.json ├── babel.config.js ├── e2e │ ├── e2e-utils.ts │ ├── examplesTests │ │ ├── bottomTabs.e2e.ts │ │ ├── events.e2e.ts │ │ ├── simpleNativeStack.e2e.ts │ │ └── stackPresentation.e2e.ts │ ├── firstTest.e2e.ts │ ├── issuesTests │ │ ├── Test2543.e2e.ts │ │ ├── Test2809.e2e.ts │ │ ├── Test2842.e2e.ts │ │ ├── Test2877.e2e.ts │ │ ├── Test2926.e2e.ts │ │ ├── Test432.e2e.ts │ │ ├── Test528.e2e.ts │ │ ├── Test577.e2e.ts │ │ ├── Test593.e2e.ts │ │ ├── Test640.e2e.ts │ │ ├── Test645.e2e.ts │ │ ├── Test649.e2e.ts │ │ ├── Test654.e2e.ts │ │ ├── Test658.e2e.ts │ │ ├── Test691.e2e.ts │ │ ├── Test726.e2e.ts │ │ └── Test791.e2e.ts │ ├── jest.config.js │ └── jest.setup.ts ├── index.js ├── ios │ ├── .xcode.env │ ├── AppDelegate.swift │ ├── FabricExample-Bridging-Header.h │ ├── FabricExample.xcodeproj │ │ ├── project.pbxproj │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── FabricExample.xcscheme │ ├── FabricExample.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── FabricExample │ │ ├── AppDelegate.swift │ │ ├── FabricExample-Bridging-Header.h │ │ ├── Images.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── AppIcon-20@2x.png │ │ │ │ ├── AppIcon-20@2x~ipad.png │ │ │ │ ├── AppIcon-20@3x.png │ │ │ │ ├── AppIcon-20~ipad.png │ │ │ │ ├── AppIcon-29.png │ │ │ │ ├── AppIcon-29@2x.png │ │ │ │ ├── AppIcon-29@2x~ipad.png │ │ │ │ ├── AppIcon-29@3x.png │ │ │ │ ├── AppIcon-29~ipad.png │ │ │ │ ├── AppIcon-40@2x.png │ │ │ │ ├── AppIcon-40@2x~ipad.png │ │ │ │ ├── AppIcon-40@3x.png │ │ │ │ ├── AppIcon-40~ipad.png │ │ │ │ ├── AppIcon-60@2x~car.png │ │ │ │ ├── AppIcon-60@3x~car.png │ │ │ │ ├── AppIcon-83.5@2x~ipad.png │ │ │ │ ├── AppIcon@2x.png │ │ │ │ ├── AppIcon@2x~ipad.png │ │ │ │ ├── AppIcon@3x.png │ │ │ │ ├── AppIcon~ios-marketing.png │ │ │ │ ├── AppIcon~ipad.png │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ └── react-native-screens-logo.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── react-native-screens-logo.png │ │ ├── Info.plist │ │ ├── LaunchScreen.storyboard │ │ └── PrivacyInfo.xcprivacy │ ├── Podfile │ └── Podfile.lock ├── jest.config.js ├── metro.config.js ├── package.json ├── tsconfig.json └── yarn.lock ├── LICENSE ├── README-Fabric.md ├── README.md ├── RNScreens.podspec ├── TVOSExample ├── .bundle │ └── config ├── .eslintrc.js ├── .gitignore ├── .watchmanconfig ├── App.tsx ├── Gemfile ├── Gemfile.lock ├── __tests__ │ └── App.test.tsx ├── android │ ├── app │ │ ├── build.gradle │ │ ├── debug.keystore │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ └── com │ │ │ │ └── tvosexample │ │ │ │ ├── MainActivity.kt │ │ │ │ └── MainApplication.kt │ │ │ └── res │ │ │ ├── drawable │ │ │ ├── rn_edit_text_material.xml │ │ │ └── tv_banner.png │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ └── values │ │ │ ├── strings.xml │ │ │ └── styles.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle ├── app.json ├── babel.config.js ├── index.js ├── ios │ ├── .xcode.env │ ├── AppDelegate.swift │ ├── Podfile │ ├── Podfile.lock │ ├── TVOSExample-Bridging-Header.h │ ├── TVOSExample.xcodeproj │ │ ├── project.pbxproj │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── TVOSExample.xcscheme │ ├── TVOSExample.xcworkspace │ │ └── contents.xcworkspacedata │ └── TVOSExample │ │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ │ ├── Info.plist │ │ ├── LaunchScreen.storyboard │ │ └── PrivacyInfo.xcprivacy ├── jest.config.js ├── metro.config.js ├── package.json ├── tsconfig.json └── yarn.lock ├── android ├── CMakeLists.txt ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle ├── spotless.gradle └── src │ ├── fabric │ └── java │ │ └── com │ │ └── swmansion │ │ └── rnscreens │ │ ├── FabricEnabledHeaderConfigViewGroup.kt │ │ ├── FabricEnabledHeaderSubviewViewGroup.kt │ │ ├── FabricEnabledViewGroup.kt │ │ └── NativeProxy.kt │ ├── main │ ├── AndroidManifest.xml │ ├── cpp │ │ ├── NativeProxy.cpp │ │ ├── NativeProxy.h │ │ ├── OnLoad.cpp │ │ └── jni-adapter.cpp │ ├── java │ │ └── com │ │ │ └── swmansion │ │ │ └── rnscreens │ │ │ ├── CustomSearchView.kt │ │ │ ├── CustomToolbar.kt │ │ │ ├── FragmentBackPressOverrider.kt │ │ │ ├── FragmentHolder.kt │ │ │ ├── InsetsObserverProxy.kt │ │ │ ├── LifecycleHelper.kt │ │ │ ├── ModalScreenViewManager.kt │ │ │ ├── RNScreensPackage.kt │ │ │ ├── Screen.kt │ │ │ ├── ScreenContainer.kt │ │ │ ├── ScreenContainerViewManager.kt │ │ │ ├── ScreenContentWrapper.kt │ │ │ ├── ScreenContentWrapperManager.kt │ │ │ ├── ScreenEventDispatcher.kt │ │ │ ├── ScreenFooter.kt │ │ │ ├── ScreenFooterManager.kt │ │ │ ├── ScreenFragment.kt │ │ │ ├── ScreenFragmentWrapper.kt │ │ │ ├── ScreenModalFragment.kt │ │ │ ├── ScreenStack.kt │ │ │ ├── ScreenStackFragment.kt │ │ │ ├── ScreenStackFragmentWrapper.kt │ │ │ ├── ScreenStackHeaderConfig.kt │ │ │ ├── ScreenStackHeaderConfigShadowNode.kt │ │ │ ├── ScreenStackHeaderConfigViewManager.kt │ │ │ ├── ScreenStackHeaderSubview.kt │ │ │ ├── ScreenStackHeaderSubviewManager.kt │ │ │ ├── ScreenStackViewManager.kt │ │ │ ├── ScreenViewManager.kt │ │ │ ├── ScreenWindowTraits.kt │ │ │ ├── ScreensModule.kt │ │ │ ├── ScreensShadowNode.kt │ │ │ ├── SearchBarManager.kt │ │ │ ├── SearchBarView.kt │ │ │ ├── SearchViewFormatter.kt │ │ │ ├── bottomsheet │ │ │ ├── BottomSheetBehaviorExt.kt │ │ │ ├── BottomSheetDialogRootView.kt │ │ │ ├── BottomSheetDialogScreen.kt │ │ │ ├── DimmingView.kt │ │ │ ├── DimmingViewManager.kt │ │ │ ├── SheetDelegate.kt │ │ │ └── SheetUtils.kt │ │ │ ├── events │ │ │ ├── HeaderAttachedEvent.kt │ │ │ ├── HeaderBackButtonClickedEvent.kt │ │ │ ├── HeaderDetachedEvent.kt │ │ │ ├── HeaderHeightChangeEvent.kt │ │ │ ├── ScreenAnimationDelegate.kt │ │ │ ├── ScreenAppearEvent.kt │ │ │ ├── ScreenDisappearEvent.kt │ │ │ ├── ScreenDismissedEvent.kt │ │ │ ├── ScreenEventEmitter.kt │ │ │ ├── ScreenTransitionProgressEvent.kt │ │ │ ├── ScreenWillAppearEvent.kt │ │ │ ├── ScreenWillDisappearEvent.kt │ │ │ ├── SearchBarBlurEvent.kt │ │ │ ├── SearchBarChangeTextEvent.kt │ │ │ ├── SearchBarCloseEvent.kt │ │ │ ├── SearchBarFocusEvent.kt │ │ │ ├── SearchBarOpenEvent.kt │ │ │ ├── SearchBarSearchButtonPressEvent.kt │ │ │ ├── SheetDetentChangedEvent.kt │ │ │ └── StackFinishTransitioningEvent.kt │ │ │ ├── ext │ │ │ ├── FragmentExt.kt │ │ │ ├── NumericExt.kt │ │ │ └── ViewExt.kt │ │ │ ├── stack │ │ │ ├── anim │ │ │ │ └── ScreensAnimation.kt │ │ │ └── views │ │ │ │ ├── ChildDrawingOrderStrategyImpl.kt │ │ │ │ ├── ChildrenDrawingOrderStrategy.kt │ │ │ │ └── ScreensCoordinatorLayout.kt │ │ │ ├── transition │ │ │ └── ExternalBoundaryValuesEvaluator.kt │ │ │ └── utils │ │ │ ├── DeviceUtils.kt │ │ │ ├── EdgeToEdgePackageDetector.kt │ │ │ ├── FragmentTransactionKt.kt │ │ │ ├── InsetsKt.kt │ │ │ ├── PaddingBundle.kt │ │ │ └── ScreenDummyLayoutHelper.kt │ ├── jni │ │ ├── CMakeLists.txt │ │ ├── rnscreens.cpp │ │ └── rnscreens.h │ └── res │ │ ├── base │ │ ├── anim │ │ │ ├── rns_default_enter_in.xml │ │ │ ├── rns_default_enter_out.xml │ │ │ ├── rns_default_exit_in.xml │ │ │ ├── rns_default_exit_out.xml │ │ │ ├── rns_fade_from_bottom.xml │ │ │ ├── rns_fade_in.xml │ │ │ ├── rns_fade_out.xml │ │ │ ├── rns_fade_to_bottom.xml │ │ │ ├── rns_ios_from_left_background_close.xml │ │ │ ├── rns_ios_from_left_background_open.xml │ │ │ ├── rns_ios_from_left_foreground_close.xml │ │ │ ├── rns_ios_from_left_foreground_open.xml │ │ │ ├── rns_ios_from_right_background_close.xml │ │ │ ├── rns_ios_from_right_background_open.xml │ │ │ ├── rns_ios_from_right_foreground_close.xml │ │ │ ├── rns_ios_from_right_foreground_open.xml │ │ │ ├── rns_no_animation_20.xml │ │ │ ├── rns_no_animation_250.xml │ │ │ ├── rns_no_animation_350.xml │ │ │ ├── rns_no_animation_medium.xml │ │ │ ├── rns_slide_in_from_bottom.xml │ │ │ ├── rns_slide_in_from_left.xml │ │ │ ├── rns_slide_in_from_right.xml │ │ │ ├── rns_slide_out_to_bottom.xml │ │ │ ├── rns_slide_out_to_left.xml │ │ │ ├── rns_slide_out_to_right.xml │ │ │ └── rns_standard_accelerate_interpolator.xml │ │ └── drawable │ │ │ └── rns_rounder_top_corners_shape.xml │ │ └── v33 │ │ └── anim-v33 │ │ ├── rns_default_enter_in.xml │ │ ├── rns_default_enter_out.xml │ │ ├── rns_default_exit_in.xml │ │ └── rns_default_exit_out.xml │ ├── paper │ └── java │ │ └── com │ │ ├── facebook │ │ └── react │ │ │ └── viewmanagers │ │ │ ├── RNSScreenContainerManagerDelegate.java │ │ │ ├── RNSScreenContainerManagerInterface.java │ │ │ ├── RNSScreenContentWrapperManagerDelegate.java │ │ │ ├── RNSScreenContentWrapperManagerInterface.java │ │ │ ├── RNSScreenFooterManagerDelegate.java │ │ │ ├── RNSScreenFooterManagerInterface.java │ │ │ ├── RNSScreenManagerDelegate.java │ │ │ ├── RNSScreenManagerInterface.java │ │ │ ├── RNSScreenStackHeaderConfigManagerDelegate.java │ │ │ ├── RNSScreenStackHeaderConfigManagerInterface.java │ │ │ ├── RNSScreenStackHeaderSubviewManagerDelegate.java │ │ │ ├── RNSScreenStackHeaderSubviewManagerInterface.java │ │ │ ├── RNSScreenStackManagerDelegate.java │ │ │ ├── RNSScreenStackManagerInterface.java │ │ │ ├── RNSSearchBarManagerDelegate.java │ │ │ └── RNSSearchBarManagerInterface.java │ │ └── swmansion │ │ └── rnscreens │ │ ├── FabricEnabledHeaderConfigViewGroup.kt │ │ ├── FabricEnabledHeaderSubviewViewGroup.kt │ │ ├── FabricEnabledViewGroup.kt │ │ ├── NativeProxy.kt │ │ └── NativeScreensModuleSpec.java │ └── versioned │ ├── backgroundcolor │ ├── 74 │ │ └── ViewBackgroundUtils.kt │ ├── 76 │ │ └── ViewBackgroundUtils.kt │ └── latest │ │ └── ViewBackgroundUtils.kt │ └── pointerevents │ ├── 77 │ └── com │ │ └── swmansion │ │ └── rnscreens │ │ ├── PointerEventsBoxNoneImpl.kt │ │ └── bottomsheet │ │ └── DimmingViewPointerEvents.kt │ └── latest │ └── com │ └── swmansion │ └── rnscreens │ ├── PointerEventsBoxNoneImpl.kt │ └── bottomsheet │ └── DimmingViewPointerEvents.kt ├── apps ├── .eslintrc.js ├── App.tsx ├── Example.tsx ├── index.ts ├── src │ ├── assets │ │ ├── backButton.png │ │ ├── search_black.png │ │ ├── search_white.png │ │ └── trees.jpg │ ├── screens │ │ ├── Animations.tsx │ │ ├── BottomTabsAndStack.tsx │ │ ├── Events.tsx │ │ ├── Gestures.tsx │ │ ├── HeaderOptions.tsx │ │ ├── Modals.tsx │ │ ├── Orientation.tsx │ │ ├── PreventRemove.tsx │ │ ├── SearchBar.tsx │ │ ├── SimpleNativeStack.tsx │ │ ├── StackPresentation.tsx │ │ ├── StatusBar.tsx │ │ └── SwipeBackAnimation.tsx │ ├── shared │ │ ├── Alert.tsx │ │ ├── Button.tsx │ │ ├── Choose.tsx │ │ ├── Dialog.tsx │ │ ├── Form.tsx │ │ ├── ListItem.tsx │ │ ├── PressableWithFeedback.tsx │ │ ├── Rectangle.tsx │ │ ├── SettingsInput.tsx │ │ ├── SettingsMultiInput.tsx │ │ ├── SettingsPicker.tsx │ │ ├── SettingsSwitch.tsx │ │ ├── Snack.tsx │ │ ├── Spacer.tsx │ │ ├── Square.tsx │ │ ├── ThemedText.tsx │ │ ├── ThemedTextInput.tsx │ │ ├── ThemedView.tsx │ │ ├── Toast.tsx │ │ ├── index.ts │ │ ├── styles.tsx │ │ └── styling │ │ │ ├── Colors.ts │ │ │ └── adapter │ │ │ └── react-navigation │ │ │ ├── index.ts │ │ │ └── useColorPallette.tsx │ └── tests │ │ ├── Test1017.tsx │ │ ├── Test1031.tsx │ │ ├── Test1032.tsx │ │ ├── Test1036.tsx │ │ ├── Test1072.tsx │ │ ├── Test1084.tsx │ │ ├── Test1091.tsx │ │ ├── Test1096.tsx │ │ ├── Test1097.tsx │ │ ├── Test111.js │ │ ├── Test1153.tsx │ │ ├── Test1157.tsx │ │ ├── Test1162.tsx │ │ ├── Test1166 │ │ ├── AndroidDifferentScreenSearch.tsx │ │ ├── AndroidSearchBarCustomization.tsx │ │ ├── AndroidSearchBarEvents.tsx │ │ ├── AndroidSearchTypes.tsx │ │ └── index.tsx │ │ ├── Test1188.tsx │ │ ├── Test1190.tsx │ │ ├── Test1198.tsx │ │ ├── Test1204.tsx │ │ ├── Test1209.tsx │ │ ├── Test1213.tsx │ │ ├── Test1214.tsx │ │ ├── Test1227.tsx │ │ ├── Test1228.tsx │ │ ├── Test1259.tsx │ │ ├── Test1260.tsx │ │ ├── Test1296.tsx │ │ ├── Test1299.tsx │ │ ├── Test1391.tsx │ │ ├── Test1419.tsx │ │ ├── Test1463.tsx │ │ ├── Test1473.tsx │ │ ├── Test1476.tsx │ │ ├── Test1509.tsx │ │ ├── Test1539.tsx │ │ ├── Test1645.js │ │ ├── Test1646.tsx │ │ ├── Test1649 │ │ ├── components │ │ │ ├── CommonSheetContent.tsx │ │ │ ├── Footer.tsx │ │ │ └── GestureHandlerButton.tsx │ │ ├── index.tsx │ │ ├── routes.tsx │ │ ├── screens │ │ │ ├── Home.tsx │ │ │ ├── ModalScreen.tsx │ │ │ ├── PushWithScrollView.tsx │ │ │ ├── Second.tsx │ │ │ ├── SheetScreen.tsx │ │ │ ├── SheetScreenWithScrollView.tsx │ │ │ ├── SheetScreenWithTextInput.tsx │ │ │ └── Third.tsx │ │ ├── state.tsx │ │ └── types.tsx │ │ ├── Test1671.tsx │ │ ├── Test1683.tsx │ │ ├── Test1726.tsx │ │ ├── Test1791.tsx │ │ ├── Test1802.tsx │ │ ├── Test1829 │ │ ├── index.tsx │ │ ├── navigation │ │ │ └── Stacks.tsx │ │ └── screens │ │ │ ├── CardView.tsx │ │ │ ├── HomeView.tsx │ │ │ ├── InnerModal.tsx │ │ │ ├── InnerView.tsx │ │ │ └── ModalView.tsx │ │ ├── Test1844.tsx │ │ ├── Test1864.tsx │ │ ├── Test1970.jsx │ │ ├── Test1975.tsx │ │ ├── Test1981.tsx │ │ ├── Test2002.tsx │ │ ├── Test2008.tsx │ │ ├── Test2028.tsx │ │ ├── Test2048.tsx │ │ ├── Test2069.tsx │ │ ├── Test2118.tsx │ │ ├── Test2167.tsx │ │ ├── Test2175.tsx │ │ ├── Test2184.tsx │ │ ├── Test2223.tsx │ │ ├── Test2227.tsx │ │ ├── Test2229.tsx │ │ ├── Test2232.tsx │ │ ├── Test2235.tsx │ │ ├── Test2252.tsx │ │ ├── Test2271.tsx │ │ ├── Test2282.tsx │ │ ├── Test2317.tsx │ │ ├── Test2320.tsx │ │ ├── Test2332.tsx │ │ ├── Test2379.tsx │ │ ├── Test2395.tsx │ │ ├── Test2466.tsx │ │ ├── Test2538.tsx │ │ ├── Test2543.tsx │ │ ├── Test2552.tsx │ │ ├── Test2611.tsx │ │ ├── Test263.js │ │ ├── Test2631.tsx │ │ ├── Test2668.tsx │ │ ├── Test2675.tsx │ │ ├── Test2714.tsx │ │ ├── Test2717.tsx │ │ ├── Test2767.tsx │ │ ├── Test2789.tsx │ │ ├── Test2809 │ │ ├── Shared.tsx │ │ └── index.tsx │ │ ├── Test2811.tsx │ │ ├── Test2819.tsx │ │ ├── Test2842.tsx │ │ ├── Test2855.tsx │ │ ├── Test2877.tsx │ │ ├── Test2895.tsx │ │ ├── Test2899.tsx │ │ ├── Test2926.tsx │ │ ├── Test2949.tsx │ │ ├── Test349.js │ │ ├── Test364.js │ │ ├── Test42.tsx │ │ ├── Test432.tsx │ │ ├── Test528.js │ │ ├── Test550.js │ │ ├── Test556.tsx │ │ ├── Test564.js │ │ ├── Test577.js │ │ ├── Test593.tsx │ │ ├── Test619.js │ │ ├── Test624.js │ │ ├── Test640.js │ │ ├── Test642.tsx │ │ ├── Test645.js │ │ ├── Test648.js │ │ ├── Test649.js │ │ ├── Test654.js │ │ ├── Test658.js │ │ ├── Test662.tsx │ │ ├── Test691.js │ │ ├── Test702.js │ │ ├── Test706.js │ │ ├── Test713.js │ │ ├── Test726.js │ │ ├── Test748.tsx │ │ ├── Test750.js │ │ ├── Test758.tsx │ │ ├── Test761.tsx │ │ ├── Test779.tsx │ │ ├── Test780.tsx │ │ ├── Test791.tsx │ │ ├── Test800.tsx │ │ ├── Test817.tsx │ │ ├── Test830.tsx │ │ ├── Test831.tsx │ │ ├── Test844.tsx │ │ ├── Test852.tsx │ │ ├── Test860.tsx │ │ ├── Test861.tsx │ │ ├── Test865.tsx │ │ ├── Test881.tsx │ │ ├── Test887.tsx │ │ ├── Test913.tsx │ │ ├── Test999.tsx │ │ ├── TestActivityStateProgression.tsx │ │ ├── TestAndroidTransitions.tsx │ │ ├── TestAnimation.tsx │ │ ├── TestFormSheet.tsx │ │ ├── TestFreeze.tsx │ │ ├── TestHeader.tsx │ │ ├── TestHeaderTitle.tsx │ │ ├── TestMemoryLeak.tsx │ │ ├── TestModalNavigation.tsx │ │ ├── TestPreload.tsx │ │ ├── TestScreenAnimation.tsx │ │ ├── TestScreenAnimationV5.tsx │ │ └── index.ts └── tsconfig.json ├── babel.config.js ├── common └── cpp │ └── react │ └── renderer │ └── components │ └── rnscreens │ ├── FrameCorrectionModes.h │ ├── RNSFullWindowOverlayComponentDescriptor.h │ ├── RNSFullWindowOverlayShadowNode.cpp │ ├── RNSFullWindowOverlayShadowNode.h │ ├── RNSFullWindowOverlayState.h │ ├── RNSModalScreenComponentDescriptor.h │ ├── RNSModalScreenShadowNode.cpp │ ├── RNSModalScreenShadowNode.h │ ├── RNSScreenComponentDescriptor.h │ ├── RNSScreenShadowNode.cpp │ ├── RNSScreenShadowNode.h │ ├── RNSScreenStackHeaderConfigComponentDescriptor.h │ ├── RNSScreenStackHeaderConfigShadowNode.cpp │ ├── RNSScreenStackHeaderConfigShadowNode.h │ ├── RNSScreenStackHeaderConfigState.cpp │ ├── RNSScreenStackHeaderConfigState.h │ ├── RNSScreenStackHeaderSubviewComponentDescriptor.h │ ├── RNSScreenStackHeaderSubviewShadowNode.cpp │ ├── RNSScreenStackHeaderSubviewShadowNode.h │ ├── RNSScreenStackHeaderSubviewState.cpp │ ├── RNSScreenStackHeaderSubviewState.h │ ├── RNSScreenState.cpp │ ├── RNSScreenState.h │ └── utils │ └── RectUtil.h ├── cpp ├── RNSScreenRemovalListener.cpp ├── RNSScreenRemovalListener.h ├── RNScreensTurboModule.cpp └── RNScreensTurboModule.h ├── docs ├── .gitignore ├── README.md ├── babel.config.js ├── docs │ └── intro.md ├── docusaurus.config.js ├── package.json ├── sidebars.js ├── src │ ├── components │ │ ├── Downloads │ │ │ ├── index.tsx │ │ │ └── styles.module.css │ │ ├── FooterBackground │ │ │ ├── index.tsx │ │ │ └── styles.module.css │ │ ├── Hero │ │ │ ├── LandingBackground │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ ├── ScreenSequence │ │ │ │ ├── Sequence │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.module.css │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ └── StartScreen │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ ├── HomepageButton │ │ │ ├── index.tsx │ │ │ └── styles.module.css │ │ ├── LearnMore │ │ │ ├── index.tsx │ │ │ └── styles.module.css │ │ ├── Overview │ │ │ ├── Multiplatform │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ ├── OverviewTile │ │ │ │ ├── index.tsx │ │ │ │ └── styles.module.css │ │ │ ├── index.tsx │ │ │ └── styles.module.css │ │ ├── Sponsors │ │ │ ├── index.tsx │ │ │ └── styles.module.css │ │ └── Testimonials │ │ │ ├── TestimonialItem │ │ │ ├── QuoteIcon │ │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ └── styles.module.css │ │ │ ├── TestimonialList │ │ │ ├── index.tsx │ │ │ └── styles.module.css │ │ │ ├── index.tsx │ │ │ └── styles.module.css │ ├── css │ │ ├── colors.css │ │ ├── custom.css │ │ ├── overrides.css │ │ └── typography.css │ ├── hooks │ │ ├── usePageType.tsx │ │ └── useScreenSize.tsx │ ├── pages │ │ ├── index.js │ │ └── styles.module.css │ └── theme │ │ ├── Footer │ │ └── index.js │ │ ├── Navbar │ │ └── index.js │ │ ├── Root.js │ │ └── muiTheme.tsx ├── static │ ├── .nojekyll │ ├── fonts │ │ ├── Aeonik-Bold.otf │ │ ├── Aeonik-Medium.otf │ │ ├── Aeonik-Regular.otf │ │ └── DMMono-Regular.ttf │ └── img │ │ ├── arrow-right-hero.svg │ │ ├── expo-dark.svg │ │ ├── expo-router.svg │ │ ├── expo.svg │ │ ├── favicon.ico │ │ ├── github.svg │ │ ├── laptop.svg │ │ ├── logo-dark.svg │ │ ├── logo.svg │ │ ├── og-image.png │ │ ├── overview-customisable.png │ │ ├── overview-multiplatform.png │ │ ├── overview-native.png │ │ ├── phone.svg │ │ ├── react-navigation.svg │ │ ├── shopify-dark.svg │ │ ├── shopify.svg │ │ ├── tv.svg │ │ └── vr.svg └── yarn.lock ├── gesture-handler └── package.json ├── guides ├── CONTRIBUTING.md ├── GUIDE_FOR_LIBRARY_AUTHORS.md ├── android_studio.png └── xcode.png ├── ios ├── RCTImageComponentView+RNSScreenStackHeaderConfig.h ├── RCTImageComponentView+RNSScreenStackHeaderConfig.mm ├── RNSConvert.h ├── RNSConvert.mm ├── RNSEnums.h ├── RNSFullWindowOverlay.h ├── RNSFullWindowOverlay.mm ├── RNSModalScreen.h ├── RNSModalScreen.mm ├── RNSModule.h ├── RNSModule.mm ├── RNSPercentDrivenInteractiveTransition.h ├── RNSPercentDrivenInteractiveTransition.mm ├── RNSScreen.h ├── RNSScreen.mm ├── RNSScreenContainer.h ├── RNSScreenContainer.mm ├── RNSScreenContentWrapper.h ├── RNSScreenContentWrapper.mm ├── RNSScreenFooter.h ├── RNSScreenFooter.mm ├── RNSScreenNavigationContainer.h ├── RNSScreenNavigationContainer.mm ├── RNSScreenStack.h ├── RNSScreenStack.mm ├── RNSScreenStackAnimator.h ├── RNSScreenStackAnimator.mm ├── RNSScreenStackHeaderConfig.h ├── RNSScreenStackHeaderConfig.mm ├── RNSScreenStackHeaderSubview.h ├── RNSScreenStackHeaderSubview.mm ├── RNSScreenWindowTraits.h ├── RNSScreenWindowTraits.mm ├── RNSSearchBar.h ├── RNSSearchBar.mm ├── RNScreens.xcodeproj │ └── project.pbxproj ├── UIViewController+RNScreens.h ├── UIViewController+RNScreens.mm ├── UIWindow+RNScreens.h ├── UIWindow+RNScreens.mm ├── events │ ├── RNSHeaderHeightChangeEvent.h │ ├── RNSHeaderHeightChangeEvent.mm │ ├── RNSScreenViewEvent.h │ └── RNSScreenViewEvent.mm └── utils │ ├── RCTSurfaceTouchHandler+RNSUtility.h │ ├── RCTSurfaceTouchHandler+RNSUtility.mm │ ├── RCTTouchHandler+RNSUtility.h │ ├── RCTTouchHandler+RNSUtility.mm │ ├── RNSDefines.h │ ├── RNSUIBarButtonItem.h │ ├── RNSUIBarButtonItem.mm │ ├── UINavigationBar+RNSUtility.h │ ├── UINavigationBar+RNSUtility.mm │ ├── UIView+RNSUtility.h │ └── UIView+RNSUtility.mm ├── jest.config.js ├── native-stack ├── README.md └── package.json ├── package.json ├── react-native.config.js ├── reanimated └── package.json ├── scripts ├── codegen-check-consistency.js ├── codegen-sync-archs.js ├── codegen-utils.js ├── create-npm-package.sh ├── detox-utils.cjs ├── format-android.js ├── releasing.js └── set-version.js ├── src ├── TransitionProgressContext.tsx ├── components │ ├── DebugContainer.tsx │ ├── DebugContainer.web.tsx │ ├── FullWindowOverlay.tsx │ ├── FullWindowOverlay.web.tsx │ ├── Screen.tsx │ ├── Screen.web.tsx │ ├── ScreenContainer.tsx │ ├── ScreenContainer.web.tsx │ ├── ScreenContentWrapper.tsx │ ├── ScreenContentWrapper.web.tsx │ ├── ScreenContentWrapper.windows.tsx │ ├── ScreenFooter.tsx │ ├── ScreenFooter.web.tsx │ ├── ScreenFooter.windows.tsx │ ├── ScreenStack.tsx │ ├── ScreenStack.web.tsx │ ├── ScreenStackHeaderConfig.tsx │ ├── ScreenStackHeaderConfig.web.tsx │ ├── ScreenStackItem.tsx │ ├── SearchBar.tsx │ ├── SearchBar.web.tsx │ └── helpers │ │ ├── DelayedFreeze.tsx │ │ ├── edge-to-edge.tsx │ │ ├── sheet.tsx │ │ └── usePrevious.tsx ├── contexts.tsx ├── core.ts ├── fabric │ ├── FullWindowOverlayNativeComponent.ts │ ├── ModalScreenNativeComponent.ts │ ├── NativeScreensModule.ts │ ├── NativeScreensModule.web.ts │ ├── ScreenContainerNativeComponent.ts │ ├── ScreenContentWrapperNativeComponent.ts │ ├── ScreenFooterNativeComponent.ts │ ├── ScreenNativeComponent.ts │ ├── ScreenNavigationContainerNativeComponent.ts │ ├── ScreenStackHeaderConfigNativeComponent.ts │ ├── ScreenStackHeaderSubviewNativeComponent.ts │ ├── ScreenStackNativeComponent.ts │ └── SearchBarNativeComponent.ts ├── gesture-handler │ ├── GestureDetectorProvider.tsx │ ├── RNScreensTurboModule.ts │ ├── ScreenGestureDetector.tsx │ ├── constraints.ts │ ├── defaults.ts │ ├── fabricUtils.ts │ ├── fabricUtils.web.ts │ └── index.tsx ├── index.tsx ├── native-stack │ ├── contexts │ │ └── GHContext.tsx │ ├── index.tsx │ ├── navigators │ │ └── createNativeStackNavigator.tsx │ ├── types.tsx │ ├── utils │ │ ├── AnimatedHeaderHeightContext.tsx │ │ ├── HeaderHeightContext.tsx │ │ ├── SafeAreaProviderCompat.tsx │ │ ├── getDefaultHeaderHeight.tsx │ │ ├── getStatusBarHeight.tsx │ │ ├── useAnimatedHeaderHeight.tsx │ │ ├── useBackPressSubscription.tsx │ │ └── useHeaderHeight.tsx │ └── views │ │ ├── FontProcessor.tsx │ │ ├── FooterComponent.tsx │ │ ├── HeaderConfig.tsx │ │ └── NativeStackView.tsx ├── reanimated │ ├── ReanimatedHeaderHeightContext.tsx │ ├── ReanimatedNativeStackScreen.tsx │ ├── ReanimatedScreen.tsx │ ├── ReanimatedScreenProvider.tsx │ ├── ReanimatedTransitionProgressContext.tsx │ ├── index.tsx │ ├── useReanimatedHeaderHeight.tsx │ └── useReanimatedTransitionProgress.tsx ├── types.tsx ├── useTransitionProgress.tsx └── utils.ts ├── tsconfig.build.json ├── tsconfig.json ├── windows ├── .gitignore ├── README.md ├── RNScreens │ ├── ModalScreenViewManager.cpp │ ├── ModalScreenViewManager.h │ ├── PropertySheet.props │ ├── RNScreens.cpp │ ├── RNScreens.def │ ├── RNScreens.h │ ├── RNScreens.idl │ ├── RNScreens.vcxproj │ ├── RNScreens.vcxproj.filters │ ├── ReactPackageProvider.cpp │ ├── ReactPackageProvider.h │ ├── ReactPackageProvider.idl │ ├── Screen.cpp │ ├── Screen.h │ ├── ScreenContainer.cpp │ ├── ScreenContainer.h │ ├── ScreenContainerViewManager.cpp │ ├── ScreenContainerViewManager.h │ ├── ScreenStack.cpp │ ├── ScreenStack.h │ ├── ScreenStackHeaderConfig.cpp │ ├── ScreenStackHeaderConfig.h │ ├── ScreenStackHeaderConfigViewManager.cpp │ ├── ScreenStackHeaderConfigViewManager.h │ ├── ScreenStackHeaderSubview.cpp │ ├── ScreenStackHeaderSubview.h │ ├── ScreenStackHeaderSubviewViewManager.cpp │ ├── ScreenStackHeaderSubviewViewManager.h │ ├── ScreenStackViewManager.cpp │ ├── ScreenStackViewManager.h │ ├── ScreenViewManager.cpp │ ├── ScreenViewManager.h │ ├── SearchBar.cpp │ ├── SearchBar.h │ ├── SearchBarViewManager.cpp │ ├── SearchBarViewManager.h │ ├── packages.config │ ├── pch.cpp │ └── pch.h ├── RNScreens62.sln ├── RNScreens63.sln └── RNScreens65.sln └── yarn.lock /.buckconfig: -------------------------------------------------------------------------------- 1 | 2 | [android] 3 | target = Google Inc.:Google APIs:23 4 | 5 | [maven_repositories] 6 | central = https://repo1.maven.org/maven2 7 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # specific for windows script files 2 | *.bat text eol=crlf 3 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: software-mansion 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Question 4 | url: https://github.com/software-mansion/react-native-screens/discussions/categories/q-a 5 | about: Please ask and answer questions here. 6 | - name: Feature request 7 | url: https://github.com/software-mansion/react-native-screens/discussions/categories/ideas 8 | about: Please submit feature requests here. 9 | -------------------------------------------------------------------------------- /.github/workflows/close-when-stale.yml: -------------------------------------------------------------------------------- 1 | name: Check for stale issues 2 | on: 3 | schedule: 4 | - cron: '37 21 * * *' # at 21:37 every day 5 | issues: 6 | types: [edited] 7 | issue_comment: 8 | types: [created, edited] 9 | workflow_dispatch: 10 | 11 | jobs: 12 | main: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - name: Checkout Actions 16 | uses: actions/checkout@v4 17 | with: 18 | repository: 'software-mansion-labs/swmansion-bot' 19 | ref: stable 20 | 21 | - uses: actions/cache@v4 22 | with: 23 | path: '**/node_modules' 24 | key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }} 25 | 26 | - name: Install Actions 27 | run: yarn install 28 | 29 | - name: Close when stale 30 | uses: ./close-when-stale 31 | with: 32 | close-when-stale-label: 'Close when stale' 33 | days-to-close: 14 34 | -------------------------------------------------------------------------------- /.github/workflows/helper/clear-annotations.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Eliminate those annoying annotations from GitHub Actions 3 | echo "::remove-matcher owner=eslint-compact::" 4 | echo "::remove-matcher owner=eslint-stylish::" 5 | echo "::remove-matcher owner=tsc::" 6 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Lint 2 | on: 3 | push: 4 | branches: 5 | - main 6 | pull_request: 7 | branches: 8 | - main 9 | workflow_dispatch: 10 | jobs: 11 | install-and-lint: 12 | runs-on: ubuntu-latest 13 | concurrency: 14 | group: install-and-lint-${{ github.ref }} 15 | cancel-in-progress: true 16 | steps: 17 | - name: checkout 18 | uses: actions/checkout@v4 19 | - name: Setup Node.js (version from .nvmrc) 20 | uses: actions/setup-node@v4 21 | with: 22 | node-version-file: '.nvmrc' 23 | cache: 'yarn' 24 | - name: Install node dependencies 25 | run: yarn 26 | - name: Format code 27 | run: | 28 | yarn format 29 | - name: Run linter 30 | run: | 31 | yarn lint 32 | - name: Check types 33 | run: | 34 | yarn check-types 35 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | # 3 | .DS_Store 4 | 5 | # Xcode 6 | # 7 | build/ 8 | *.pbxuser 9 | !default.pbxuser 10 | *.mode1v3 11 | !default.mode1v3 12 | *.mode2v3 13 | !default.mode2v3 14 | *.perspectivev3 15 | !default.perspectivev3 16 | xcuserdata 17 | *.xccheckout 18 | *.moved-aside 19 | DerivedData 20 | *.hmap 21 | *.ipa 22 | *.xcuserstate 23 | project.xcworkspace 24 | 25 | # Android/IJ 26 | # 27 | *.iml 28 | .idea 29 | .gradle 30 | local.properties 31 | 32 | # node.js 33 | # 34 | node_modules/ 35 | npm-debug.log 36 | package-lock.json 37 | 38 | # vscode 39 | jsconfig.json 40 | .project 41 | .vscode 42 | 43 | # Kotlin (since 2.0 compiler) 44 | .kotlin/ 45 | 46 | # BUCK 47 | buck-out/ 48 | bin/ 49 | \.buckd/ 50 | android/app/libs 51 | android/keystores/debug.keystore 52 | 53 | # generated by bob 54 | lib/ 55 | 56 | # CMake cache 57 | .cxx/ 58 | 59 | android/.settings 60 | 61 | # yarn 62 | **/.yarn/install-state.gz 63 | 64 | # Local environment (direnv) 65 | .envrc 66 | 67 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "react-navigation"] 2 | path = react-navigation 3 | url = https://github.com/react-navigation/react-navigation.git 4 | -------------------------------------------------------------------------------- /.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | yarn lint-staged 5 | yarn check-types 6 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | Example/ 2 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | v23.11.0 2 | -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | arrowParens: 'avoid', 3 | bracketSameLine: true, 4 | bracketSpacing: true, 5 | singleQuote: true, 6 | trailingComma: 'all', 7 | }; 8 | -------------------------------------------------------------------------------- /.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nodeLinker: node-modules 2 | 3 | yarnPath: .yarn/releases/yarn-4.1.1.cjs 4 | -------------------------------------------------------------------------------- /Example/.bundle/config: -------------------------------------------------------------------------------- 1 | BUNDLE_PATH: "vendor/bundle" 2 | BUNDLE_FORCE_RUBY_PLATFORM: 1 -------------------------------------------------------------------------------- /Example/.detoxrc.js: -------------------------------------------------------------------------------- 1 | const utils = require('../scripts/detox-utils.cjs'); 2 | module.exports = utils.commonDetoxConfigFactory('ScreensExample'); 3 | -------------------------------------------------------------------------------- /Example/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: '@react-native', 4 | }; 5 | -------------------------------------------------------------------------------- /Example/.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /Example/App.tsx: -------------------------------------------------------------------------------- 1 | import App from '../apps'; 2 | 3 | export default App; 4 | -------------------------------------------------------------------------------- /Example/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version 4 | ruby ">= 2.6.10" 5 | 6 | # Exclude problematic versions of cocoapods and activesupport that causes build failures. 7 | gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1' 8 | gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0' 9 | gem 'xcodeproj', '< 1.26.0' 10 | -------------------------------------------------------------------------------- /Example/android/app/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/android/app/debug.keystore -------------------------------------------------------------------------------- /Example/android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /Example/android/app/rns-example-keystore.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/android/app/rns-example-keystore.jks -------------------------------------------------------------------------------- /Example/android/app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/android/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /Example/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Example/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /Example/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /Example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /Example/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /Example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /Example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /Example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /Example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /Example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /Example/android/app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #E1F3FA 4 | -------------------------------------------------------------------------------- /Example/android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | ScreensExample 3 | 4 | -------------------------------------------------------------------------------- /Example/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /Example/android/app/src/main/res/xml/network_security_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10.0.2.2 5 | localhost 6 | 7 | -------------------------------------------------------------------------------- /Example/android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /Example/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /Example/android/keystores/BUCK: -------------------------------------------------------------------------------- 1 | keystore( 2 | name = "debug", 3 | properties = "debug.keystore.properties", 4 | store = "debug.keystore", 5 | visibility = [ 6 | "PUBLIC", 7 | ], 8 | ) 9 | -------------------------------------------------------------------------------- /Example/android/keystores/debug.keystore.properties: -------------------------------------------------------------------------------- 1 | key.store=debug.keystore 2 | key.alias=androiddebugkey 3 | key.store.password=android 4 | key.alias.password=android 5 | -------------------------------------------------------------------------------- /Example/android/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") } 2 | plugins { id("com.facebook.react.settings") } 3 | extensions.configure(com.facebook.react.ReactSettingsExtension) { ex -> ex.autolinkLibrariesFromCommand() } 4 | rootProject.name = 'ScreensExample' 5 | include ':app' 6 | includeBuild('../node_modules/@react-native/gradle-plugin') 7 | 8 | -------------------------------------------------------------------------------- /Example/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ScreensExample", 3 | "displayName": "ScreensExample" 4 | } 5 | -------------------------------------------------------------------------------- /Example/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['module:@react-native/babel-preset'], 3 | plugins: ['react-native-reanimated/plugin'], 4 | }; 5 | -------------------------------------------------------------------------------- /Example/e2e/apps/test-butler-app-2.2.1.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/e2e/apps/test-butler-app-2.2.1.apk -------------------------------------------------------------------------------- /Example/e2e/jest.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('@jest/types').Config.InitialOptions} */ 2 | module.exports = { 3 | rootDir: '..', 4 | testMatch: ['/e2e/**/*.e2e.ts'], 5 | testTimeout: 120000, 6 | maxWorkers: 1, 7 | globalSetup: 'detox/runners/jest/globalSetup', 8 | globalTeardown: 'detox/runners/jest/globalTeardown', 9 | reporters: ['detox/runners/jest/reporter'], 10 | testEnvironment: 'detox/runners/jest/testEnvironment', 11 | verbose: true, 12 | preset: 'ts-jest', 13 | setupFilesAfterEnv: ['/e2e/jest.setup.ts'], 14 | }; 15 | -------------------------------------------------------------------------------- /Example/e2e/jest.setup.ts: -------------------------------------------------------------------------------- 1 | import { device } from 'detox'; 2 | 3 | beforeAll(async () => { 4 | await device.launchApp(); 5 | }); 6 | 7 | afterAll(async () => { 8 | await device.terminateApp(); 9 | }); 10 | -------------------------------------------------------------------------------- /Example/index.js: -------------------------------------------------------------------------------- 1 | import 'react-native-gesture-handler'; 2 | import { AppRegistry } from 'react-native'; 3 | import App from './App'; 4 | import { name as appName } from './app.json'; 5 | 6 | AppRegistry.registerComponent(appName, () => App); 7 | -------------------------------------------------------------------------------- /Example/ios/.xcode.env: -------------------------------------------------------------------------------- 1 | # This `.xcode.env` file is versioned and is used to source the environment 2 | # used when running script phases inside Xcode. 3 | # To customize your local environment, you can create an `.xcode.env.local` 4 | # file that is not versioned. 5 | # NODE_BINARY variable contains the PATH to the node executable. 6 | # 7 | # Customize the NODE_BINARY variable here. 8 | # For example, to use nvm with brew, add the following line 9 | # . "$(brew --prefix nvm)/nvm.sh" --no-use 10 | export NODE_BINARY=$(command -v node) 11 | -------------------------------------------------------------------------------- /Example/ios/ScreensExample.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/ios/ScreensExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/100.png -------------------------------------------------------------------------------- /Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/1024.png -------------------------------------------------------------------------------- /Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/114.png -------------------------------------------------------------------------------- /Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/120.png -------------------------------------------------------------------------------- /Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/144.png -------------------------------------------------------------------------------- /Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/152.png -------------------------------------------------------------------------------- /Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/167.png -------------------------------------------------------------------------------- /Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/180.png -------------------------------------------------------------------------------- /Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/20.png -------------------------------------------------------------------------------- /Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/29.png -------------------------------------------------------------------------------- /Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/40.png -------------------------------------------------------------------------------- /Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/50.png -------------------------------------------------------------------------------- /Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/57.png -------------------------------------------------------------------------------- /Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/58.png -------------------------------------------------------------------------------- /Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/60.png -------------------------------------------------------------------------------- /Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/72.png -------------------------------------------------------------------------------- /Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/76.png -------------------------------------------------------------------------------- /Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/80.png -------------------------------------------------------------------------------- /Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/ios/ScreensExample/Images.xcassets/AppIcon.appiconset/87.png -------------------------------------------------------------------------------- /Example/ios/ScreensExample/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Example/ios/ScreensExample/Images.xcassets/react-native-screens-logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "react-native-screens-logo.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Example/ios/ScreensExample/Images.xcassets/react-native-screens-logo.imageset/react-native-screens-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/Example/ios/ScreensExample/Images.xcassets/react-native-screens-logo.imageset/react-native-screens-logo.png -------------------------------------------------------------------------------- /Example/ios/ScreensExample/RNSSampleLifecycleAwareView.m: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @interface RNSLifecycleAwareView : UIView 4 | @end 5 | 6 | @implementation RNSLifecycleAwareView 7 | 8 | - (void)didMoveToWindow 9 | { 10 | [super didMoveToWindow]; 11 | BOOL isVisible = self.superview && self.window; 12 | if (isVisible) { 13 | NSLog(@"ATTACHED"); 14 | } else { 15 | NSLog(@"DETTACHED"); 16 | } 17 | } 18 | 19 | @end 20 | 21 | @interface RNSLifecycleAwareViewManager : RCTViewManager 22 | @end 23 | 24 | @implementation RNSLifecycleAwareViewManager 25 | 26 | RCT_EXPORT_MODULE() 27 | 28 | - (UIView *)view 29 | { 30 | return [RNSLifecycleAwareView new]; 31 | } 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /Example/ios/ScreensExampleTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Example/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'react-native', 3 | }; 4 | -------------------------------------------------------------------------------- /Example/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json" 3 | } 4 | -------------------------------------------------------------------------------- /FabricExample/.bundle/config: -------------------------------------------------------------------------------- 1 | BUNDLE_PATH: "vendor/bundle" 2 | BUNDLE_FORCE_RUBY_PLATFORM: 1 3 | -------------------------------------------------------------------------------- /FabricExample/.detoxrc.js: -------------------------------------------------------------------------------- 1 | const utils = require('../scripts/detox-utils.cjs'); 2 | module.exports = utils.commonDetoxConfigFactory('FabricExample'); 3 | 4 | -------------------------------------------------------------------------------- /FabricExample/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: '@react-native', 4 | }; 5 | -------------------------------------------------------------------------------- /FabricExample/.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /FabricExample/App.tsx: -------------------------------------------------------------------------------- 1 | import App from '../apps'; 2 | 3 | export default App; 4 | -------------------------------------------------------------------------------- /FabricExample/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version 4 | ruby ">= 2.6.10" 5 | 6 | # Exclude problematic versions of cocoapods and activesupport that causes build failures. 7 | gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1' 8 | gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0' 9 | gem 'xcodeproj', '< 1.26.0' 10 | -------------------------------------------------------------------------------- /FabricExample/README.md: -------------------------------------------------------------------------------- 1 | # React Native Screens example app that uses fabric architecture 2 | 3 | ## Installing & running application 4 | 5 | Before running application you need to install all dependencies. To do that: 6 | 7 | - In project's root directory run `yarn install` 8 | - In FabricExample directory run `yarn install` 9 | 10 | ### Android 11 | 12 | To run this application on Android you need to have Java 11 active on your computer. You can check which version you are using by running `javac --version`. You can change it by changing `JAVA_HOME` environment variable or in Android Studio settings. 13 | 14 | Then you can run this application by `yarn android` or from Android Studio. 15 | 16 | ### iOS 17 | 18 | To run on iOS first go to `FabricExample/ios` and run `pod install`. This will install pods for Fabric architecture. 19 | 20 | Then in `FabricExample` run `yarn ios` or run application from Xcode. 21 | -------------------------------------------------------------------------------- /FabricExample/__tests__/App.test.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * @format 3 | */ 4 | 5 | 6 | import React from 'react'; 7 | import ReactTestRenderer from 'react-test-renderer'; 8 | import App from '../App'; 9 | 10 | test('renders correctly', async () => { 11 | await ReactTestRenderer.act(() => { 12 | ReactTestRenderer.create(); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /FabricExample/android/app/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/debug.keystore -------------------------------------------------------------------------------- /FabricExample/android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | -------------------------------------------------------------------------------- /FabricExample/android/app/rns-example-keystore.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/rns-example-keystore.jks -------------------------------------------------------------------------------- /FabricExample/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #1B2445 4 | -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | FabricExample 3 | 4 | -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /FabricExample/android/app/src/main/res/xml/network_security_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10.0.2.2 5 | localhost 6 | 7 | -------------------------------------------------------------------------------- /FabricExample/android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /FabricExample/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /FabricExample/android/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") } 2 | plugins { id("com.facebook.react.settings") } 3 | extensions.configure(com.facebook.react.ReactSettingsExtension) { ex -> ex.autolinkLibrariesFromCommand() } 4 | rootProject.name = 'FabricExample' 5 | include ':app' 6 | includeBuild('../node_modules/@react-native/gradle-plugin') 7 | -------------------------------------------------------------------------------- /FabricExample/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "FabricExample", 3 | "displayName": "FabricExample" 4 | } 5 | -------------------------------------------------------------------------------- /FabricExample/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['module:@react-native/babel-preset'], 3 | plugins: ['react-native-reanimated/plugin'], 4 | }; 5 | -------------------------------------------------------------------------------- /FabricExample/e2e/issuesTests/Test640.e2e.ts: -------------------------------------------------------------------------------- 1 | import { device, expect, element, by } from 'detox'; 2 | import { selectTestScreen } from '../e2e-utils'; 3 | 4 | describe('Test640', () => { 5 | beforeAll(async () => { 6 | await device.reloadReactNative(); 7 | }); 8 | 9 | it('Test640 should exist', async () => { 10 | await selectTestScreen('Test640'); 11 | }); 12 | 13 | it('scrolling down on modal should not close the modal but activate refresh', async () => { 14 | await element(by.id('home-button-go-to-modal')).tap(); 15 | await element(by.text('Scroll to 4')).swipe('down', 'fast'); 16 | 17 | if (device.getPlatform() === 'android') { 18 | await expect(element(by.id('modal-refresh-control'))).toBeVisible(); 19 | } else { 20 | await expect(element(by.type('UIRefreshControl'))).toBeVisible(); 21 | } 22 | 23 | await expect(element(by.id('home-button-go-to-modal'))).not.toBeVisible(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /FabricExample/e2e/issuesTests/Test654.e2e.ts: -------------------------------------------------------------------------------- 1 | import { device, expect, element, by } from 'detox'; 2 | import { describeIfiOS, selectTestScreen } from '../e2e-utils'; 3 | 4 | // issue related to iOS native back button 5 | describeIfiOS('Test654', () => { 6 | beforeAll(async () => { 7 | await device.reloadReactNative(); 8 | await element(by.id('root-screen-switch-rtl')).tap(); 9 | }); 10 | 11 | it('Test654 should exist', async () => { 12 | await selectTestScreen('Test654'); 13 | }); 14 | 15 | it('back button should be visible on Second screen', async () => { 16 | await element(by.id('first-button-go-to-second')).tap(); 17 | await expect(element(by.type('_UIButtonBarButton'))).toBeVisible(100); 18 | await expect(element(by.id('chevron.backward'))).toBeVisible(100); 19 | }); 20 | }); 21 | -------------------------------------------------------------------------------- /FabricExample/e2e/jest.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('@jest/types').Config.InitialOptions} */ 2 | module.exports = { 3 | rootDir: '..', 4 | testMatch: ['/e2e/**/*.e2e.ts'], 5 | testTimeout: 120000, 6 | maxWorkers: 1, 7 | globalSetup: 'detox/runners/jest/globalSetup', 8 | globalTeardown: 'detox/runners/jest/globalTeardown', 9 | reporters: ['detox/runners/jest/reporter'], 10 | testEnvironment: 'detox/runners/jest/testEnvironment', 11 | verbose: true, 12 | preset: 'ts-jest', 13 | setupFilesAfterEnv: ['/e2e/jest.setup.ts'], 14 | }; 15 | -------------------------------------------------------------------------------- /FabricExample/e2e/jest.setup.ts: -------------------------------------------------------------------------------- 1 | import { device } from 'detox'; 2 | 3 | beforeAll(async () => { 4 | await device.launchApp(); 5 | }); 6 | 7 | afterAll(async () => { 8 | await device.terminateApp(); 9 | }); 10 | -------------------------------------------------------------------------------- /FabricExample/index.js: -------------------------------------------------------------------------------- 1 | import { AppRegistry } from 'react-native'; 2 | import App from './App'; 3 | import { name as appName } from './app.json'; 4 | 5 | AppRegistry.registerComponent(appName, () => App); 6 | -------------------------------------------------------------------------------- /FabricExample/ios/.xcode.env: -------------------------------------------------------------------------------- 1 | export NODE_BINARY=$(command -v node) 2 | -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | /** Could not get it to build w/o this file */ 2 | -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/FabricExample-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | /** Could not get it to build w/o this file */ 2 | -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-20@2x.png -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-20@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-20@2x~ipad.png -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-20@3x.png -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-20~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-20~ipad.png -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-29.png -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-29@2x.png -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-29@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-29@2x~ipad.png -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-29@3x.png -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-29~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-29~ipad.png -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-40@2x.png -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-40@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-40@2x~ipad.png -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-40@3x.png -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-40~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-40~ipad.png -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-60@2x~car.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-60@2x~car.png -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-60@3x~car.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-60@3x~car.png -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-83.5@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon-83.5@2x~ipad.png -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon@2x.png -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon@2x~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon@2x~ipad.png -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon@3x.png -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon~ios-marketing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon~ios-marketing.png -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/AppIcon~ipad.png -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/react-native-screens-logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "react-native-screens-logo.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /FabricExample/ios/FabricExample/Images.xcassets/react-native-screens-logo.imageset/react-native-screens-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/FabricExample/ios/FabricExample/Images.xcassets/react-native-screens-logo.imageset/react-native-screens-logo.png -------------------------------------------------------------------------------- /FabricExample/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'react-native', 3 | }; 4 | -------------------------------------------------------------------------------- /FabricExample/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json" 3 | } 4 | -------------------------------------------------------------------------------- /README-Fabric.md: -------------------------------------------------------------------------------- 1 | # React Native Screens - Fabric version 2 | 3 | To use this library with your Fabric application, you have to: 4 | 5 | 1. Add latest react-native-screens 6 | 2. on iOS 7 | - Install pods using `RCT_NEW_ARCH_ENABLED=1 pod install` – this is the same command you run to prepare a Fabric build but you also need to run it after a new native library gets added. 8 | 3. on Android 9 | - There are no additional steps required so long you app is configured to build with Fabric – this is typically configured by setting `newArchEnabled=true` in `gradle.properties` file in your project. 10 | -------------------------------------------------------------------------------- /TVOSExample/.bundle/config: -------------------------------------------------------------------------------- 1 | BUNDLE_PATH: "vendor/bundle" 2 | BUNDLE_FORCE_RUBY_PLATFORM: 1 3 | -------------------------------------------------------------------------------- /TVOSExample/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: '@react-native', 4 | }; 5 | -------------------------------------------------------------------------------- /TVOSExample/.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /TVOSExample/App.tsx: -------------------------------------------------------------------------------- 1 | import App from '../apps'; 2 | 3 | export default App; 4 | -------------------------------------------------------------------------------- /TVOSExample/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version 4 | ruby ">= 2.6.10" 5 | 6 | # Exclude problematic versions of cocoapods and activesupport that causes build failures. 7 | gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1' 8 | gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0' 9 | -------------------------------------------------------------------------------- /TVOSExample/__tests__/App.test.tsx: -------------------------------------------------------------------------------- 1 | /** 2 | * @format 3 | */ 4 | 5 | import React from 'react'; 6 | import ReactTestRenderer from 'react-test-renderer'; 7 | import App from '../App'; 8 | 9 | test('renders correctly', async () => { 10 | await ReactTestRenderer.act(() => { 11 | ReactTestRenderer.create(); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /TVOSExample/android/app/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/TVOSExample/android/app/debug.keystore -------------------------------------------------------------------------------- /TVOSExample/android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | -------------------------------------------------------------------------------- /TVOSExample/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /TVOSExample/android/app/src/main/res/drawable/tv_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/TVOSExample/android/app/src/main/res/drawable/tv_banner.png -------------------------------------------------------------------------------- /TVOSExample/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/TVOSExample/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /TVOSExample/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/TVOSExample/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /TVOSExample/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/TVOSExample/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /TVOSExample/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/TVOSExample/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /TVOSExample/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/TVOSExample/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /TVOSExample/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/TVOSExample/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /TVOSExample/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/TVOSExample/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /TVOSExample/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/TVOSExample/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /TVOSExample/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/TVOSExample/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /TVOSExample/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/TVOSExample/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /TVOSExample/android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | TVOSExample 3 | 4 | -------------------------------------------------------------------------------- /TVOSExample/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /TVOSExample/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext { 3 | buildToolsVersion = "35.0.0" 4 | minSdkVersion = 24 5 | compileSdkVersion = 35 6 | targetSdkVersion = 35 7 | ndkVersion = "27.1.12297006" 8 | kotlinVersion = "2.0.21" 9 | } 10 | repositories { 11 | google() 12 | mavenCentral() 13 | } 14 | dependencies { 15 | classpath("com.android.tools.build:gradle") 16 | classpath("com.facebook.react:react-native-gradle-plugin") 17 | classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") 18 | } 19 | } 20 | 21 | apply plugin: "com.facebook.react.rootproject" 22 | 23 | // Custom configuration. This is done in order to simplify process 24 | // of upgrading the wrapper, eliminating necessity to manually specify CLI options 25 | // to ensure that we use distribution of type `ALL`. 26 | tasks.named("wrapper") { 27 | it.distributionType = Wrapper.DistributionType.ALL 28 | } 29 | -------------------------------------------------------------------------------- /TVOSExample/android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/TVOSExample/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /TVOSExample/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /TVOSExample/android/settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") } 2 | plugins { id("com.facebook.react.settings") } 3 | extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand() } 4 | rootProject.name = 'TVOSExample' 5 | include ':app' 6 | includeBuild('../node_modules/@react-native/gradle-plugin') 7 | -------------------------------------------------------------------------------- /TVOSExample/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TVOSExample", 3 | "displayName": "TVOSExample" 4 | } 5 | -------------------------------------------------------------------------------- /TVOSExample/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['module:@react-native/babel-preset'], 3 | plugins: ['react-native-reanimated/plugin'], 4 | }; 5 | -------------------------------------------------------------------------------- /TVOSExample/index.js: -------------------------------------------------------------------------------- 1 | import { AppRegistry } from 'react-native'; 2 | import App from './App'; 3 | import { name as appName } from './app.json'; 4 | 5 | AppRegistry.registerComponent(appName, () => App); 6 | -------------------------------------------------------------------------------- /TVOSExample/ios/.xcode.env: -------------------------------------------------------------------------------- 1 | # This `.xcode.env` file is versioned and is used to source the environment 2 | # used when running script phases inside Xcode. 3 | # To customize your local environment, you can create an `.xcode.env.local` 4 | # file that is not versioned. 5 | 6 | # NODE_BINARY variable contains the PATH to the node executable. 7 | # 8 | # Customize the NODE_BINARY variable here. 9 | # For example, to use nvm with brew, add the following line 10 | # . "$(brew --prefix nvm)/nvm.sh" --no-use 11 | export NODE_BINARY=$(command -v node) 12 | -------------------------------------------------------------------------------- /TVOSExample/ios/TVOSExample-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | -------------------------------------------------------------------------------- /TVOSExample/ios/TVOSExample.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /TVOSExample/ios/TVOSExample/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /TVOSExample/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: 'react-native', 3 | }; 4 | -------------------------------------------------------------------------------- /TVOSExample/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json" 3 | } 4 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include 'lib' -------------------------------------------------------------------------------- /android/spotless.gradle: -------------------------------------------------------------------------------- 1 | // formatter & linter configuration for kotlin 2 | apply plugin: 'com.diffplug.spotless' 3 | 4 | spotless { 5 | kotlin { 6 | target 'src/**/*.kt' 7 | ktlint("1.3.0") 8 | trimTrailingWhitespace() 9 | indentWithSpaces() 10 | endWithNewline() 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /android/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/src/main/cpp/OnLoad.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "NativeProxy.h" 4 | 5 | JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) { 6 | return facebook::jni::initialize( 7 | vm, [] { rnscreens::NativeProxy::registerNatives(); }); 8 | } 9 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/FragmentHolder.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens 2 | 3 | import androidx.fragment.app.Fragment 4 | 5 | interface FragmentHolder { 6 | val fragment: Fragment 7 | } 8 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/ModalScreenViewManager.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens 2 | 3 | import com.facebook.react.module.annotations.ReactModule 4 | 5 | @ReactModule(name = ModalScreenViewManager.REACT_CLASS) 6 | class ModalScreenViewManager : ScreenViewManager() { 7 | override fun getName() = REACT_CLASS 8 | 9 | companion object { 10 | const val REACT_CLASS = "RNSModalScreen" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/ScreenStackFragmentWrapper.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens 2 | 3 | import androidx.appcompat.widget.Toolbar 4 | 5 | interface ScreenStackFragmentWrapper : ScreenFragmentWrapper { 6 | // Toolbar management 7 | fun removeToolbar() 8 | 9 | fun setToolbar(toolbar: Toolbar) 10 | 11 | fun setToolbarShadowHidden(hidden: Boolean) 12 | 13 | fun setToolbarTranslucent(translucent: Boolean) 14 | 15 | // Navigation 16 | fun canNavigateBack(): Boolean 17 | 18 | /** 19 | * Removes this fragment from the container it/it's screen belongs to. 20 | */ 21 | fun dismissFromContainer() 22 | } 23 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/events/HeaderAttachedEvent.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.events 2 | 3 | import com.facebook.react.bridge.Arguments 4 | import com.facebook.react.bridge.WritableMap 5 | import com.facebook.react.uimanager.events.Event 6 | 7 | class HeaderAttachedEvent( 8 | surfaceId: Int, 9 | viewId: Int, 10 | ) : Event(surfaceId, viewId) { 11 | override fun getEventName(): String = EVENT_NAME 12 | 13 | // All events for a given view can be coalesced. 14 | override fun getCoalescingKey(): Short = 0 15 | 16 | override fun getEventData(): WritableMap? = Arguments.createMap() 17 | 18 | companion object { 19 | const val EVENT_NAME = "topAttached" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/events/HeaderBackButtonClickedEvent.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.events 2 | 3 | import com.facebook.react.bridge.Arguments 4 | import com.facebook.react.bridge.WritableMap 5 | import com.facebook.react.uimanager.events.Event 6 | 7 | class HeaderBackButtonClickedEvent( 8 | surfaceId: Int, 9 | viewId: Int, 10 | ) : Event(surfaceId, viewId) { 11 | override fun getEventName(): String = EVENT_NAME 12 | 13 | // All events for a given view can be coalesced. 14 | override fun getCoalescingKey(): Short = 0 15 | 16 | override fun getEventData(): WritableMap? = Arguments.createMap() 17 | 18 | companion object { 19 | const val EVENT_NAME = "topHeaderBackButtonClicked" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/events/HeaderDetachedEvent.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.events 2 | 3 | import com.facebook.react.bridge.Arguments 4 | import com.facebook.react.bridge.WritableMap 5 | import com.facebook.react.uimanager.events.Event 6 | 7 | class HeaderDetachedEvent( 8 | surfaceId: Int, 9 | viewId: Int, 10 | ) : Event(surfaceId, viewId) { 11 | override fun getEventName(): String = EVENT_NAME 12 | 13 | // All events for a given view can be coalesced. 14 | override fun getCoalescingKey(): Short = 0 15 | 16 | override fun getEventData(): WritableMap? = Arguments.createMap() 17 | 18 | companion object { 19 | const val EVENT_NAME = "topDetached" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/events/HeaderHeightChangeEvent.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.events 2 | 3 | import com.facebook.react.bridge.Arguments 4 | import com.facebook.react.bridge.WritableMap 5 | import com.facebook.react.uimanager.events.Event 6 | 7 | class HeaderHeightChangeEvent( 8 | surfaceId: Int, 9 | viewId: Int, 10 | private val headerHeight: Int, 11 | ) : Event(surfaceId, viewId) { 12 | override fun getEventName() = EVENT_NAME 13 | 14 | // As the same header height could appear twice, use header height as a coalescing key. 15 | override fun getCoalescingKey(): Short = headerHeight.toShort() 16 | 17 | override fun getEventData(): WritableMap? = 18 | Arguments.createMap().apply { 19 | putDouble("headerHeight", headerHeight.toDouble()) 20 | } 21 | 22 | companion object { 23 | const val EVENT_NAME = "topHeaderHeightChange" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/events/ScreenAppearEvent.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.events 2 | 3 | import com.facebook.react.bridge.Arguments 4 | import com.facebook.react.bridge.WritableMap 5 | import com.facebook.react.uimanager.events.Event 6 | 7 | class ScreenAppearEvent( 8 | surfaceId: Int, 9 | viewId: Int, 10 | ) : Event(surfaceId, viewId) { 11 | override fun getEventName() = EVENT_NAME 12 | 13 | // All events for a given view can be coalesced. 14 | override fun getCoalescingKey(): Short = 0 15 | 16 | override fun getEventData(): WritableMap? = Arguments.createMap() 17 | 18 | companion object { 19 | const val EVENT_NAME = "topAppear" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/events/ScreenDisappearEvent.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.events 2 | 3 | import com.facebook.react.bridge.Arguments 4 | import com.facebook.react.bridge.WritableMap 5 | import com.facebook.react.uimanager.events.Event 6 | 7 | class ScreenDisappearEvent( 8 | surfaceId: Int, 9 | viewId: Int, 10 | ) : Event(surfaceId, viewId) { 11 | override fun getEventName() = EVENT_NAME 12 | 13 | // All events for a given view can be coalesced. 14 | override fun getCoalescingKey(): Short = 0 15 | 16 | override fun getEventData(): WritableMap? = Arguments.createMap() 17 | 18 | companion object { 19 | const val EVENT_NAME = "topDisappear" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/events/ScreenDismissedEvent.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.events 2 | 3 | import com.facebook.react.bridge.Arguments 4 | import com.facebook.react.bridge.WritableMap 5 | import com.facebook.react.uimanager.events.Event 6 | 7 | class ScreenDismissedEvent( 8 | surfaceId: Int, 9 | viewId: Int, 10 | ) : Event(surfaceId, viewId) { 11 | override fun getEventName() = EVENT_NAME 12 | 13 | // All events for a given view can be coalesced. 14 | override fun getCoalescingKey(): Short = 0 15 | 16 | override fun getEventData(): WritableMap? = 17 | Arguments.createMap().apply { 18 | putInt("dismissCount", 1) 19 | } 20 | 21 | companion object { 22 | const val EVENT_NAME = "topDismissed" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/events/ScreenWillAppearEvent.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.events 2 | 3 | import com.facebook.react.bridge.Arguments 4 | import com.facebook.react.bridge.WritableMap 5 | import com.facebook.react.uimanager.events.Event 6 | 7 | class ScreenWillAppearEvent( 8 | surfaceId: Int, 9 | viewId: Int, 10 | ) : Event(surfaceId, viewId) { 11 | override fun getEventName() = EVENT_NAME 12 | 13 | // All events for a given view can be coalesced. 14 | override fun getCoalescingKey(): Short = 0 15 | 16 | override fun getEventData(): WritableMap? = Arguments.createMap() 17 | 18 | companion object { 19 | const val EVENT_NAME = "topWillAppear" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/events/ScreenWillDisappearEvent.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.events 2 | 3 | import com.facebook.react.bridge.Arguments 4 | import com.facebook.react.bridge.WritableMap 5 | import com.facebook.react.uimanager.events.Event 6 | 7 | class ScreenWillDisappearEvent( 8 | surfaceId: Int, 9 | viewId: Int, 10 | ) : Event(surfaceId, viewId) { 11 | override fun getEventName() = EVENT_NAME 12 | 13 | // All events for a given view can be coalesced. 14 | override fun getCoalescingKey(): Short = 0 15 | 16 | override fun getEventData(): WritableMap? = Arguments.createMap() 17 | 18 | companion object { 19 | const val EVENT_NAME = "topWillDisappear" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/events/SearchBarBlurEvent.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.events 2 | 3 | import com.facebook.react.bridge.Arguments 4 | import com.facebook.react.bridge.WritableMap 5 | import com.facebook.react.uimanager.events.Event 6 | 7 | class SearchBarBlurEvent( 8 | surfaceId: Int, 9 | viewId: Int, 10 | ) : Event(surfaceId, viewId) { 11 | override fun getEventName(): String = EVENT_NAME 12 | 13 | // All events for a given view can be coalesced. 14 | override fun getCoalescingKey(): Short = 0 15 | 16 | override fun getEventData(): WritableMap? = Arguments.createMap() 17 | 18 | companion object { 19 | const val EVENT_NAME = "topSearchBlur" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/events/SearchBarChangeTextEvent.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.events 2 | 3 | import com.facebook.react.bridge.Arguments 4 | import com.facebook.react.bridge.WritableMap 5 | import com.facebook.react.uimanager.events.Event 6 | 7 | class SearchBarChangeTextEvent( 8 | surfaceId: Int, 9 | viewId: Int, 10 | private val text: String?, 11 | ) : Event(surfaceId, viewId) { 12 | override fun getEventName(): String = EVENT_NAME 13 | 14 | // All events for a given view can be coalesced. 15 | override fun getCoalescingKey(): Short = 0 16 | 17 | override fun getEventData(): WritableMap? = 18 | Arguments.createMap().apply { 19 | putString("text", text) 20 | } 21 | 22 | companion object { 23 | const val EVENT_NAME = "topChangeText" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/events/SearchBarCloseEvent.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.events 2 | 3 | import com.facebook.react.bridge.Arguments 4 | import com.facebook.react.bridge.WritableMap 5 | import com.facebook.react.uimanager.events.Event 6 | 7 | class SearchBarCloseEvent( 8 | surfaceId: Int, 9 | viewId: Int, 10 | ) : Event(surfaceId, viewId) { 11 | override fun getEventName(): String = EVENT_NAME 12 | 13 | // All events for a given view can be coalesced. 14 | override fun getCoalescingKey(): Short = 0 15 | 16 | override fun getEventData(): WritableMap? = Arguments.createMap() 17 | 18 | companion object { 19 | const val EVENT_NAME = "topClose" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/events/SearchBarFocusEvent.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.events 2 | 3 | import com.facebook.react.bridge.Arguments 4 | import com.facebook.react.bridge.WritableMap 5 | import com.facebook.react.uimanager.events.Event 6 | 7 | class SearchBarFocusEvent( 8 | surfaceId: Int, 9 | viewId: Int, 10 | ) : Event(surfaceId, viewId) { 11 | override fun getEventName(): String = EVENT_NAME 12 | 13 | // All events for a given view can be coalesced. 14 | override fun getCoalescingKey(): Short = 0 15 | 16 | override fun getEventData(): WritableMap? = Arguments.createMap() 17 | 18 | companion object { 19 | const val EVENT_NAME = "topSearchFocus" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/events/SearchBarOpenEvent.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.events 2 | 3 | import com.facebook.react.bridge.Arguments 4 | import com.facebook.react.bridge.WritableMap 5 | import com.facebook.react.uimanager.events.Event 6 | 7 | class SearchBarOpenEvent( 8 | surfaceId: Int, 9 | viewId: Int, 10 | ) : Event(surfaceId, viewId) { 11 | override fun getEventName(): String = EVENT_NAME 12 | 13 | // All events for a given view can be coalesced. 14 | override fun getCoalescingKey(): Short = 0 15 | 16 | override fun getEventData(): WritableMap? = Arguments.createMap() 17 | 18 | companion object { 19 | const val EVENT_NAME = "topOpen" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/events/SearchBarSearchButtonPressEvent.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.events 2 | 3 | import com.facebook.react.bridge.Arguments 4 | import com.facebook.react.bridge.WritableMap 5 | import com.facebook.react.uimanager.events.Event 6 | 7 | class SearchBarSearchButtonPressEvent( 8 | surfaceId: Int, 9 | viewId: Int, 10 | private val text: String?, 11 | ) : Event(surfaceId, viewId) { 12 | override fun getEventName(): String = EVENT_NAME 13 | 14 | // All events for a given view can be coalesced. 15 | override fun getCoalescingKey(): Short = 0 16 | 17 | override fun getEventData(): WritableMap? = 18 | Arguments.createMap().apply { 19 | putString("text", text) 20 | } 21 | 22 | companion object { 23 | const val EVENT_NAME = "topSearchButtonPress" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/events/SheetDetentChangedEvent.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.events 2 | 3 | import com.facebook.react.bridge.Arguments 4 | import com.facebook.react.bridge.WritableMap 5 | import com.facebook.react.uimanager.events.Event 6 | 7 | class SheetDetentChangedEvent( 8 | surfaceId: Int, 9 | viewId: Int, 10 | val index: Int, 11 | val isStable: Boolean, 12 | ) : Event(surfaceId, viewId) { 13 | override fun getEventName() = EVENT_NAME 14 | 15 | // All events for a given view can be coalesced. 16 | override fun getCoalescingKey(): Short = 0 17 | 18 | override fun getEventData(): WritableMap? = 19 | Arguments.createMap().apply { 20 | putInt("index", index) 21 | putBoolean("isStable", isStable) 22 | } 23 | 24 | companion object { 25 | const val EVENT_NAME = "topSheetDetentChanged" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/events/StackFinishTransitioningEvent.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.events 2 | 3 | import com.facebook.react.bridge.Arguments 4 | import com.facebook.react.bridge.WritableMap 5 | import com.facebook.react.uimanager.events.Event 6 | 7 | class StackFinishTransitioningEvent( 8 | surfaceId: Int, 9 | viewId: Int, 10 | ) : Event(surfaceId, viewId) { 11 | override fun getEventName() = EVENT_NAME 12 | 13 | // All events for a given view can be coalesced. 14 | override fun getCoalescingKey(): Short = 0 15 | 16 | override fun getEventData(): WritableMap? = Arguments.createMap() 17 | 18 | companion object { 19 | const val EVENT_NAME = "topFinishTransitioning" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/ext/FragmentExt.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.ext 2 | 3 | import androidx.fragment.app.Fragment 4 | import com.swmansion.rnscreens.ScreenStackFragment 5 | 6 | internal fun Fragment.asScreenStackFragment() = this as ScreenStackFragment 7 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/ext/NumericExt.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.ext 2 | 3 | import kotlin.math.abs 4 | 5 | /** 6 | * 1e-4 should be a reasonable default value for graphic-related use cases. 7 | * You should always make sure that it is feasible in your particular use case. 8 | */ 9 | internal fun Float.equalWithRespectToEps( 10 | other: Float, 11 | eps: Float = 1e-4F, 12 | ) = abs(this - other) <= eps 13 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/stack/anim/ScreensAnimation.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.stack.anim 2 | 3 | import android.view.animation.Animation 4 | import android.view.animation.Transformation 5 | import com.swmansion.rnscreens.ScreenFragment 6 | 7 | internal class ScreensAnimation( 8 | private val mFragment: ScreenFragment, 9 | ) : Animation() { 10 | override fun applyTransformation( 11 | interpolatedTime: Float, 12 | t: Transformation, 13 | ) { 14 | super.applyTransformation(interpolatedTime, t) 15 | // interpolated time should be the progress of the current transition 16 | mFragment.dispatchTransitionProgressEvent(interpolatedTime, !mFragment.isResumed) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/stack/views/ChildrenDrawingOrderStrategy.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.stack.views 2 | 3 | import com.swmansion.rnscreens.ScreenStack 4 | 5 | internal interface ChildrenDrawingOrderStrategy { 6 | /** 7 | * Mutates the list of draw operations **in-place**. 8 | */ 9 | fun apply(drawingOperations: MutableList) 10 | 11 | /** 12 | * Enables the given strategy. When enabled - the strategy **might** mutate the operations 13 | * list passed to `apply` method. 14 | */ 15 | fun enable() 16 | 17 | /** 18 | * Disables the given strategy - even when `apply` is called it **must not** produce 19 | * any side effect (it must not manipulate the drawing operations list passed to `apply` method). 20 | */ 21 | fun disable() 22 | 23 | fun isEnabled(): Boolean 24 | } 25 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/utils/DeviceUtils.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.utils 2 | 3 | import android.content.Context 4 | import android.content.pm.PackageManager 5 | 6 | object DeviceUtils { 7 | fun isPlatformAndroidTV(context: Context?): Boolean = context?.packageManager?.hasSystemFeature(PackageManager.FEATURE_LEANBACK) == true 8 | } 9 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/utils/EdgeToEdgePackageDetector.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.utils 2 | 3 | // https://github.com/zoontek/react-native-edge-to-edge/blob/main/react-native-is-edge-to-edge/README.md 4 | object EdgeToEdgePackageDetector { 5 | // we cannot detect edge-to-edge, but we can detect react-native-edge-to-edge install 6 | val ENABLED: Boolean = 7 | try { 8 | Class.forName("com.zoontek.rnedgetoedge.EdgeToEdgePackage") 9 | true 10 | } catch (exception: ClassNotFoundException) { 11 | false 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /android/src/main/java/com/swmansion/rnscreens/utils/PaddingBundle.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.utils 2 | 3 | // Used only on Paper together with `setLocalData` mechanism to pass 4 | // the information on header paddings to shadow node. 5 | data class PaddingBundle( 6 | val height: Float, 7 | val paddingStart: Float, 8 | val paddingEnd: Float, 9 | ) 10 | -------------------------------------------------------------------------------- /android/src/main/jni/rnscreens.cpp: -------------------------------------------------------------------------------- 1 | /** 2 | * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). 3 | * @generated by codegen project: GenerateModuleJniCpp.js 4 | */ 5 | #include "rnscreens.h" 6 | 7 | namespace facebook { 8 | namespace react { 9 | 10 | 11 | std::shared_ptr rnscreens_ModuleProvider(const std::string &moduleName, const JavaTurboModule::InitParams ¶ms) { 12 | return nullptr; 13 | } 14 | 15 | } // namespace react 16 | } // namespace facebook 17 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_default_enter_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 18 | 19 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_default_enter_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 19 | 20 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_default_exit_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 17 | 18 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_default_exit_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 10 | 18 | 19 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_fade_from_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_fade_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_fade_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_fade_to_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 10 | 15 | 16 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_ios_from_left_background_close.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_ios_from_left_background_open.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_ios_from_left_foreground_close.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_ios_from_left_foreground_open.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_ios_from_right_background_close.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_ios_from_right_background_open.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_ios_from_right_foreground_close.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_ios_from_right_foreground_open.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_no_animation_20.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_no_animation_250.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_no_animation_350.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_no_animation_medium.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_slide_in_from_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_slide_in_from_left.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_slide_in_from_right.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_slide_out_to_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_slide_out_to_left.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_slide_out_to_right.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /android/src/main/res/base/anim/rns_standard_accelerate_interpolator.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /android/src/main/res/base/drawable/rns_rounder_top_corners_shape.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContainerManagerInterface.java: -------------------------------------------------------------------------------- 1 | /** 2 | * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). 3 | * 4 | * Do not edit this file as changes may cause incorrect behavior and will be lost 5 | * once the code is regenerated. 6 | * 7 | * @generated by codegen project: GeneratePropsJavaInterface.js 8 | */ 9 | 10 | package com.facebook.react.viewmanagers; 11 | 12 | import android.view.View; 13 | 14 | 15 | public interface RNSScreenContainerManagerInterface { 16 | // No props 17 | } 18 | -------------------------------------------------------------------------------- /android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContentWrapperManagerInterface.java: -------------------------------------------------------------------------------- 1 | /** 2 | * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). 3 | * 4 | * Do not edit this file as changes may cause incorrect behavior and will be lost 5 | * once the code is regenerated. 6 | * 7 | * @generated by codegen project: GeneratePropsJavaInterface.js 8 | */ 9 | 10 | package com.facebook.react.viewmanagers; 11 | 12 | import android.view.View; 13 | 14 | 15 | public interface RNSScreenContentWrapperManagerInterface { 16 | // No props 17 | } 18 | -------------------------------------------------------------------------------- /android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenFooterManagerInterface.java: -------------------------------------------------------------------------------- 1 | /** 2 | * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). 3 | * 4 | * Do not edit this file as changes may cause incorrect behavior and will be lost 5 | * once the code is regenerated. 6 | * 7 | * @generated by codegen project: GeneratePropsJavaInterface.js 8 | */ 9 | 10 | package com.facebook.react.viewmanagers; 11 | 12 | import android.view.View; 13 | 14 | 15 | public interface RNSScreenFooterManagerInterface { 16 | // No props 17 | } 18 | -------------------------------------------------------------------------------- /android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderSubviewManagerInterface.java: -------------------------------------------------------------------------------- 1 | /** 2 | * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). 3 | * 4 | * Do not edit this file as changes may cause incorrect behavior and will be lost 5 | * once the code is regenerated. 6 | * 7 | * @generated by codegen project: GeneratePropsJavaInterface.js 8 | */ 9 | 10 | package com.facebook.react.viewmanagers; 11 | 12 | import android.view.View; 13 | import androidx.annotation.Nullable; 14 | 15 | 16 | public interface RNSScreenStackHeaderSubviewManagerInterface { 17 | void setType(T view, @Nullable String value); 18 | } 19 | -------------------------------------------------------------------------------- /android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackManagerInterface.java: -------------------------------------------------------------------------------- 1 | /** 2 | * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). 3 | * 4 | * Do not edit this file as changes may cause incorrect behavior and will be lost 5 | * once the code is regenerated. 6 | * 7 | * @generated by codegen project: GeneratePropsJavaInterface.js 8 | */ 9 | 10 | package com.facebook.react.viewmanagers; 11 | 12 | import android.view.View; 13 | 14 | 15 | public interface RNSScreenStackManagerInterface { 16 | // No props 17 | } 18 | -------------------------------------------------------------------------------- /android/src/paper/java/com/swmansion/rnscreens/FabricEnabledHeaderSubviewViewGroup.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens 2 | 3 | import android.content.Context 4 | import android.view.ViewGroup 5 | import com.facebook.react.uimanager.StateWrapper 6 | 7 | abstract class FabricEnabledHeaderSubviewViewGroup( 8 | context: Context?, 9 | ) : ViewGroup(context) { 10 | fun setStateWrapper(wrapper: StateWrapper?) = Unit 11 | 12 | // Fabric only 13 | protected fun updateSubviewFrameState( 14 | width: Int, 15 | height: Int, 16 | offsetX: Int, 17 | offsetY: Int, 18 | ) = Unit 19 | } 20 | -------------------------------------------------------------------------------- /android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens 2 | 3 | import android.view.ViewGroup 4 | import com.facebook.react.bridge.ReactContext 5 | import com.facebook.react.uimanager.StateWrapper 6 | 7 | abstract class FabricEnabledViewGroup( 8 | context: ReactContext?, 9 | ) : ViewGroup(context) { 10 | fun setStateWrapper(wrapper: StateWrapper?) = Unit 11 | 12 | protected fun updateScreenSizeFabric( 13 | width: Int, 14 | height: Int, 15 | headerHeight: Int, 16 | ) { 17 | // do nothing 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /android/src/paper/java/com/swmansion/rnscreens/NativeProxy.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens 2 | 3 | import com.facebook.react.fabric.FabricUIManager 4 | 5 | class NativeProxy { 6 | // do nothing on Paper 7 | fun nativeAddMutationsListener(fabricUIManager: FabricUIManager) = Unit 8 | 9 | fun invalidateNative() = Unit 10 | 11 | companion object { 12 | fun addScreenToMap( 13 | tag: Int, 14 | view: Screen, 15 | ) = Unit 16 | 17 | fun removeScreenFromMap(tag: Int) = Unit 18 | 19 | fun clearMapOnInvalidate() = Unit 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /android/src/versioned/backgroundcolor/74/ViewBackgroundUtils.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.utils 2 | 3 | import com.facebook.react.views.view.ReactViewBackgroundDrawable 4 | import com.facebook.react.views.view.ReactViewGroup 5 | 6 | internal fun ReactViewGroup.resolveBackgroundColor(): Int? = (this.background as? ReactViewBackgroundDrawable)?.color 7 | -------------------------------------------------------------------------------- /android/src/versioned/backgroundcolor/76/ViewBackgroundUtils.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.utils 2 | 3 | import com.facebook.react.common.annotations.UnstableReactNativeAPI 4 | import com.facebook.react.uimanager.drawable.CSSBackgroundDrawable 5 | import com.facebook.react.views.view.ReactViewGroup 6 | 7 | @OptIn(UnstableReactNativeAPI::class) 8 | internal fun ReactViewGroup.resolveBackgroundColor(): Int? = (this.background as? CSSBackgroundDrawable)?.color 9 | 10 | -------------------------------------------------------------------------------- /android/src/versioned/backgroundcolor/latest/ViewBackgroundUtils.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.utils 2 | 3 | import com.facebook.react.common.annotations.UnstableReactNativeAPI 4 | import com.facebook.react.uimanager.BackgroundStyleApplicator 5 | import com.facebook.react.uimanager.drawable.CSSBackgroundDrawable 6 | import com.facebook.react.views.view.ReactViewGroup 7 | 8 | internal fun ReactViewGroup.resolveBackgroundColor(): Int? = BackgroundStyleApplicator.getBackgroundColor(this) 9 | 10 | -------------------------------------------------------------------------------- /android/src/versioned/pointerevents/77/com/swmansion/rnscreens/PointerEventsBoxNoneImpl.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens 2 | 3 | import com.facebook.react.uimanager.PointerEvents 4 | import com.facebook.react.uimanager.ReactPointerEventsView 5 | 6 | internal class PointerEventsBoxNoneImpl() : ReactPointerEventsView { 7 | // We set pointer events to BOX_NONE, because we don't want the ScreensCoordinatorLayout 8 | // to be target of react gestures and effectively prevent interaction with screens 9 | // underneath the current screen (useful in `modal` & `formSheet` presentation). 10 | override fun getPointerEvents(): PointerEvents = PointerEvents.BOX_NONE 11 | } 12 | -------------------------------------------------------------------------------- /android/src/versioned/pointerevents/77/com/swmansion/rnscreens/bottomsheet/DimmingViewPointerEvents.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.bottomsheet 2 | 3 | import com.facebook.react.uimanager.PointerEvents 4 | import com.facebook.react.uimanager.ReactPointerEventsView 5 | 6 | internal class DimmingViewPointerEventsImpl( 7 | val dimmingView: DimmingView, 8 | ) : ReactPointerEventsView { 9 | override fun getPointerEvents(): PointerEvents = if (dimmingView.blockGestures) PointerEvents.AUTO else PointerEvents.NONE 10 | } 11 | 12 | internal class DimmingViewPointerEventsProxy( 13 | var pointerEventsImpl: DimmingViewPointerEventsImpl?, 14 | ) : ReactPointerEventsView { 15 | override fun getPointerEvents(): PointerEvents = pointerEventsImpl?.pointerEvents ?: PointerEvents.NONE 16 | } 17 | -------------------------------------------------------------------------------- /android/src/versioned/pointerevents/latest/com/swmansion/rnscreens/PointerEventsBoxNoneImpl.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens 2 | 3 | import com.facebook.react.uimanager.PointerEvents 4 | import com.facebook.react.uimanager.ReactPointerEventsView 5 | 6 | internal class PointerEventsBoxNoneImpl() : ReactPointerEventsView { 7 | // We set pointer events to BOX_NONE, because we don't want the ScreensCoordinatorLayout 8 | // to be target of react gestures and effectively prevent interaction with screens 9 | // underneath the current screen (useful in `modal` & `formSheet` presentation). 10 | override val pointerEvents: PointerEvents = PointerEvents.BOX_NONE 11 | } 12 | -------------------------------------------------------------------------------- /android/src/versioned/pointerevents/latest/com/swmansion/rnscreens/bottomsheet/DimmingViewPointerEvents.kt: -------------------------------------------------------------------------------- 1 | package com.swmansion.rnscreens.bottomsheet 2 | 3 | import com.facebook.react.uimanager.PointerEvents 4 | import com.facebook.react.uimanager.ReactPointerEventsView 5 | 6 | internal class DimmingViewPointerEventsImpl( 7 | val dimmingView: DimmingView, 8 | ) : ReactPointerEventsView { 9 | override val pointerEvents: PointerEvents 10 | get() = if (dimmingView.blockGestures) PointerEvents.AUTO else PointerEvents.NONE 11 | } 12 | 13 | internal class DimmingViewPointerEventsProxy( 14 | var pointerEventsImpl: DimmingViewPointerEventsImpl?, 15 | ) : ReactPointerEventsView { 16 | override val pointerEvents: PointerEvents 17 | get() = pointerEventsImpl?.pointerEvents ?: PointerEvents.NONE 18 | } 19 | -------------------------------------------------------------------------------- /apps/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: '@react-native', 4 | overrides: [ 5 | { 6 | files: ['*.tsx', '*.js'], 7 | rules: { 8 | 'react-native/no-inline-styles': 'off', 9 | }, 10 | }, 11 | ], 12 | }; 13 | -------------------------------------------------------------------------------- /apps/App.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { enableFreeze } from 'react-native-screens'; 3 | import Example from './Example'; 4 | //import * as Test from './src/tests'; 5 | 6 | enableFreeze(true); 7 | 8 | export default function App() { 9 | return ; 10 | //return ; 11 | } 12 | -------------------------------------------------------------------------------- /apps/index.ts: -------------------------------------------------------------------------------- 1 | import App from './App'; 2 | 3 | export default App; 4 | -------------------------------------------------------------------------------- /apps/src/assets/backButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/apps/src/assets/backButton.png -------------------------------------------------------------------------------- /apps/src/assets/search_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/apps/src/assets/search_black.png -------------------------------------------------------------------------------- /apps/src/assets/search_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/apps/src/assets/search_white.png -------------------------------------------------------------------------------- /apps/src/assets/trees.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/software-mansion/react-native-screens/5fcb545c9a76a9a2c6ad1177777612b391e524fb/apps/src/assets/trees.jpg -------------------------------------------------------------------------------- /apps/src/shared/Button.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Button as RNButton } from 'react-native'; 3 | import { Spacer } from './Spacer'; 4 | 5 | interface Props { 6 | title: string; 7 | accessibilityLabel?: string; 8 | onPress: () => void; 9 | testID?: string; 10 | } 11 | 12 | export const Button = ({ 13 | title, 14 | accessibilityLabel, 15 | onPress, 16 | testID, 17 | }: Props): React.JSX.Element => ( 18 | 19 | 25 | 26 | ); 27 | -------------------------------------------------------------------------------- /apps/src/shared/Rectangle.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { ColorValue, View, ViewProps, ViewStyle } from 'react-native'; 3 | 4 | export interface RectangleProps extends ViewProps { 5 | color?: ColorValue, 6 | width?: ViewStyle['width'], 7 | height?: ViewStyle['height'], 8 | } 9 | 10 | export function Rectangle(props: RectangleProps) { 11 | const { color, width, height, style, ...remainingProps } = props; 12 | return ; 13 | } 14 | 15 | -------------------------------------------------------------------------------- /apps/src/shared/Spacer.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode } from 'react'; 2 | import { View } from 'react-native'; 3 | 4 | interface Props { 5 | children?: ReactNode; 6 | space?: number 7 | } 8 | 9 | export const Spacer = ({ children, space }: Props): React.JSX.Element => ( 10 | {children} 11 | ); 12 | -------------------------------------------------------------------------------- /apps/src/shared/Square.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { ColorValue, View } from 'react-native'; 3 | import Colors from './styling/Colors'; 4 | 5 | interface Props { 6 | color?: ColorValue; 7 | size?: number; 8 | testID?: string; 9 | } 10 | 11 | export const Square = ({ 12 | size = 100, 13 | color = Colors.primary, 14 | testID, 15 | }: Props): React.JSX.Element => ( 16 | 17 | ); 18 | -------------------------------------------------------------------------------- /apps/src/shared/ThemedText.tsx: -------------------------------------------------------------------------------- 1 | import { useTheme } from '@react-navigation/native'; 2 | import React from 'react'; 3 | import { Text, TextProps } from 'react-native'; 4 | 5 | export const ThemedText = ({ children, style, ...props }: TextProps) => { 6 | const { colors } = useTheme(); 7 | 8 | return ( 9 | 10 | {children} 11 | 12 | ); 13 | }; 14 | -------------------------------------------------------------------------------- /apps/src/shared/ThemedTextInput.tsx: -------------------------------------------------------------------------------- 1 | import { useTheme } from '@react-navigation/native'; 2 | import React from 'react'; 3 | import { TextInput, TextInputProps } from 'react-native'; 4 | 5 | export const ThemedTextInput = ({ style, ...props }: TextInputProps) => { 6 | const { colors } = useTheme(); 7 | 8 | return ( 9 | 13 | ); 14 | }; 15 | -------------------------------------------------------------------------------- /apps/src/shared/ThemedView.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { View, ViewProps } from 'react-native'; 3 | import useThemeColorPallette from './styling/adapter/react-navigation/useColorPallette'; 4 | 5 | export const ThemedView = ({ children, style, ...props }: ViewProps) => { 6 | const { colors } = useThemeColorPallette(); 7 | return ( 8 | 9 | {children} 10 | 11 | ); 12 | }; 13 | -------------------------------------------------------------------------------- /apps/src/shared/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ListItem'; 2 | export * from './Square'; 3 | export * from './Spacer'; 4 | export * from './SettingsSwitch'; 5 | export * from './SettingsPicker'; 6 | export * from './SettingsInput'; 7 | export * from './Button'; 8 | export * from './Alert'; 9 | export * from './Form'; 10 | export * from './Choose'; 11 | export * from './Dialog'; 12 | export * from './Snack'; 13 | export * from './Toast'; 14 | export * from './ThemedText'; 15 | export * from './ThemedView'; 16 | export * from './ThemedTextInput'; 17 | -------------------------------------------------------------------------------- /apps/src/shared/styles.tsx: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native'; 2 | 3 | export const styles = StyleSheet.create({ 4 | flexContainer: { 5 | flex: 1, 6 | }, 7 | }); 8 | -------------------------------------------------------------------------------- /apps/src/shared/styling/adapter/react-navigation/index.ts: -------------------------------------------------------------------------------- 1 | import { DarkTheme, DefaultTheme } from '@react-navigation/native'; 2 | import { DarkColors, LightColors } from '../../Colors'; 3 | 4 | export const ScreensLightTheme = { 5 | ...DefaultTheme, 6 | colors: { 7 | ...DefaultTheme.colors, 8 | primary: LightColors.primary as string, 9 | background: LightColors.background as string, 10 | card: LightColors.cardBackground as string, 11 | border: LightColors.cardBorder as string, 12 | }, 13 | }; 14 | 15 | export const ScreensDarkTheme = { 16 | ...DarkTheme, 17 | colors: { 18 | ...DarkTheme.colors, 19 | primary: DarkColors.primary as string, 20 | background: DarkColors.background as string, 21 | card: DarkColors.cardBackground as string, 22 | border: DarkColors.cardBorder as string, 23 | }, 24 | }; 25 | 26 | -------------------------------------------------------------------------------- /apps/src/shared/styling/adapter/react-navigation/useColorPallette.tsx: -------------------------------------------------------------------------------- 1 | import { Theme, useTheme } from '@react-navigation/native'; 2 | import { ColorPallette, DarkColors, LightColors } from '../../Colors'; 3 | 4 | /** 5 | * Requires `ThemeContext` (from react-navigation) presence. 6 | * Use this to get whole collor pallete current theme is based on. 7 | */ 8 | export default function useThemeColorPallette(): { theme: Theme, colors: ColorPallette } { 9 | const theme = useTheme(); 10 | return { 11 | theme, 12 | colors: theme.dark ? DarkColors : LightColors, 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /apps/src/tests/Test1036.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { NavigationContainer } from '@react-navigation/native'; 3 | import { createNativeStackNavigator } from '@react-navigation/native-stack'; 4 | 5 | const Stack = createNativeStackNavigator(); 6 | 7 | const Screen = () => { 8 | return null; 9 | }; 10 | 11 | const App = () => { 12 | return ( 13 | 14 | { 20 | console.log('cancel button press'); 21 | }, 22 | }, 23 | }}> 24 | 25 | 26 | 27 | ); 28 | }; 29 | 30 | export default App; 31 | -------------------------------------------------------------------------------- /apps/src/tests/Test1649/components/GestureHandlerButton.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { 3 | Text, 4 | } from 'react-native'; 5 | 6 | import { TouchableOpacity } from 'react-native-gesture-handler'; 7 | 8 | export default function GestureHandlerButton() { 9 | const [color, setColor] = React.useState('goldenrod'); 10 | 11 | const toggleColor = React.useCallback(function() { 12 | setColor(oldColor => oldColor === 'goldenrod' ? 'green' : 'goldenrod'); 13 | }, [setColor]); 14 | 15 | 16 | return ( 17 | { 20 | console.log('GestureHandler button clicked') 21 | toggleColor(); 22 | }}> 23 | GestureHandler driven button 24 | 25 | ); 26 | } 27 | 28 | -------------------------------------------------------------------------------- /apps/src/tests/Test1649/screens/Home.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { 3 | Button, 4 | View, 5 | } from 'react-native'; 6 | 7 | import { NavPropObj } from '../types'; 8 | 9 | export default function Home({ navigation }: NavPropObj) { 10 | return ( 11 | 12 |