react-native-screens 3.8.0 → 3.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/README.md +61 -3
  2. package/android/build.gradle +0 -2
  3. package/android/src/main/java/com/swmansion/rnscreens/CustomSearchView.kt +71 -0
  4. package/android/src/main/java/com/swmansion/rnscreens/CustomToolbar.kt +7 -0
  5. package/android/src/main/java/com/swmansion/rnscreens/FragmentBackPressOverrider.kt +29 -0
  6. package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -1
  7. package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +7 -41
  8. package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +55 -40
  9. package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +19 -1
  10. package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +30 -5
  11. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +77 -12
  12. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +13 -4
  13. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +8 -0
  14. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +7 -1
  15. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +1 -0
  16. package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +90 -0
  17. package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +150 -0
  18. package/android/src/main/java/com/swmansion/rnscreens/SearchViewFormatter.kt +40 -0
  19. package/ios/RNSScreen.m +35 -0
  20. package/ios/RNSScreenStack.m +24 -6
  21. package/ios/RNSScreenStackHeaderConfig.m +41 -0
  22. package/lib/commonjs/index.js +24 -1
  23. package/lib/commonjs/index.js.map +1 -1
  24. package/lib/commonjs/index.native.js +101 -11
  25. package/lib/commonjs/index.native.js.map +1 -1
  26. package/lib/commonjs/native-stack/utils/useBackPressSubscription.js +67 -0
  27. package/lib/commonjs/native-stack/utils/useBackPressSubscription.js.map +1 -0
  28. package/lib/commonjs/native-stack/views/HeaderConfig.js +46 -4
  29. package/lib/commonjs/native-stack/views/HeaderConfig.js.map +1 -1
  30. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js +60 -0
  31. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js.map +1 -0
  32. package/lib/commonjs/reanimated/ReanimatedScreen.js +7 -79
  33. package/lib/commonjs/reanimated/ReanimatedScreen.js.map +1 -1
  34. package/lib/commonjs/reanimated/ReanimatedScreenProvider.js +61 -0
  35. package/lib/commonjs/reanimated/ReanimatedScreenProvider.js.map +1 -0
  36. package/lib/commonjs/reanimated/index.js +2 -2
  37. package/lib/commonjs/reanimated/index.js.map +1 -1
  38. package/lib/commonjs/utils.js +20 -0
  39. package/lib/commonjs/utils.js.map +1 -0
  40. package/lib/module/index.js +5 -0
  41. package/lib/module/index.js.map +1 -1
  42. package/lib/module/index.native.js +97 -13
  43. package/lib/module/index.native.js.map +1 -1
  44. package/lib/module/native-stack/utils/useBackPressSubscription.js +50 -0
  45. package/lib/module/native-stack/utils/useBackPressSubscription.js.map +1 -0
  46. package/lib/module/native-stack/views/HeaderConfig.js +46 -5
  47. package/lib/module/native-stack/views/HeaderConfig.js.map +1 -1
  48. package/lib/module/reanimated/ReanimatedNativeStackScreen.js +40 -0
  49. package/lib/module/reanimated/ReanimatedNativeStackScreen.js.map +1 -0
  50. package/lib/module/reanimated/ReanimatedScreen.js +6 -73
  51. package/lib/module/reanimated/ReanimatedScreen.js.map +1 -1
  52. package/lib/module/reanimated/ReanimatedScreenProvider.js +49 -0
  53. package/lib/module/reanimated/ReanimatedScreenProvider.js.map +1 -0
  54. package/lib/module/reanimated/index.js +1 -1
  55. package/lib/module/reanimated/index.js.map +1 -1
  56. package/lib/module/utils.js +8 -0
  57. package/lib/module/utils.js.map +1 -0
  58. package/lib/typescript/index.d.ts +2 -0
  59. package/lib/typescript/native-stack/types.d.ts +0 -2
  60. package/lib/typescript/native-stack/utils/useBackPressSubscription.d.ts +16 -0
  61. package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +5 -0
  62. package/lib/typescript/reanimated/ReanimatedScreen.d.ts +5 -2
  63. package/lib/typescript/reanimated/ReanimatedScreenProvider.d.ts +2 -0
  64. package/lib/typescript/reanimated/index.d.ts +1 -1
  65. package/lib/typescript/types.d.ts +46 -1
  66. package/lib/typescript/utils.d.ts +2 -0
  67. package/native-stack/README.md +35 -7
  68. package/package.json +5 -2
  69. package/src/index.native.tsx +134 -38
  70. package/src/index.tsx +10 -0
  71. package/src/native-stack/types.tsx +0 -2
  72. package/src/native-stack/utils/useBackPressSubscription.tsx +66 -0
  73. package/src/native-stack/views/HeaderConfig.tsx +46 -3
  74. package/src/reanimated/ReanimatedNativeStackScreen.tsx +61 -0
  75. package/src/reanimated/ReanimatedScreen.tsx +6 -84
  76. package/src/reanimated/ReanimatedScreenProvider.tsx +42 -0
  77. package/src/reanimated/index.tsx +1 -1
  78. package/src/types.tsx +46 -1
  79. package/src/utils.ts +12 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["index.native.tsx"],"names":["React","Animated","Image","Platform","requireNativeComponent","StyleSheet","UIManager","View","processColor","TransitionProgressContext","useTransitionProgress","isPlatformSupported","OS","ENABLE_SCREENS","enableScreens","shouldEnableScreens","getViewManagerConfig","console","error","shouldUseActivityState","screensEnabled","NativeScreenValue","NativeScreenContainerValue","NativeScreenNavigationContainerValue","NativeScreenStack","NativeScreenStackHeaderConfig","NativeScreenStackHeaderSubview","AnimatedNativeScreen","NativeSearchBar","NativeFullWindowOverlay","ScreensNativeModules","NativeScreen","NativeScreenContainer","NativeScreenNavigationContainer","Screen","Component","Value","ref","props","onComponentRef","setNativeProps","render","enabled","rest","createAnimatedComponent","active","activityState","children","isNativeStack","statusBarColor","undefined","warn","processedColor","setRef","event","nativeEvent","progress","closing","goingForward","useNativeDriver","style","display","ScreenContainer","hasTwoStates","styles","create","headerSubview","position","top","right","flexDirection","alignItems","justifyContent","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenContext","createContext","module","exports","ScreenStack","ScreenStackHeaderConfig","ScreenStackHeaderSubview","SearchBar","FullWindowOverlay"],"mappings":";;;;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SACEC,QADF,EAEEC,KAFF,EAIEC,QAJF,EAKEC,sBALF,EAMEC,UANF,EAOEC,SAPF,EAQEC,IARF,QAUO,cAVP,C,CAWA;AACA;;AACA,OAAOC,YAAP,MAAyB,gDAAzB;AAEA,OAAOC,yBAAP,MAAsC,6BAAtC;AACA,OAAOC,qBAAP,MAAkC,yBAAlC;AAeA;AACA,MAAMC,mBAAmB,GACvBR,QAAQ,CAACS,EAAT,KAAgB,KAAhB,IACAT,QAAQ,CAACS,EAAT,KAAgB,SADhB,IAEAT,QAAQ,CAACS,EAAT,KAAgB,SAHlB;AAKA,IAAIC,cAAc,GAAGF,mBAArB;;AAEA,SAASG,aAAT,CAAuBC,mBAAmB,GAAG,IAA7C,EAAyD;AACvDF,EAAAA,cAAc,GAAGF,mBAAmB,IAAII,mBAAxC;;AACA,MAAIF,cAAc,IAAI,CAACP,SAAS,CAACU,oBAAV,CAA+B,WAA/B,CAAvB,EAAoE;AAClEC,IAAAA,OAAO,CAACC,KAAR,CACG,wGADH;AAGD;AACF,C,CAED;;;AACA,MAAMC,sBAAsB,GAAG,IAA/B;;AAEA,SAASC,cAAT,GAAmC;AACjC,SAAOP,cAAP;AACD,C,CAED;AACA;;;AACA,IAAIQ,iBAAJ;AACA,IAAIC,0BAAJ;AACA,IAAIC,oCAAJ;AACA,IAAIC,iBAAJ;AACA,IAAIC,6BAAJ;AACA,IAAIC,8BAAJ;AAGA,IAAIC,oBAAJ;AACA,IAAIC,eAAJ;AACA,IAAIC,uBAAJ;AAEA,MAAMC,oBAAoB,GAAG;AAC3B,MAAIC,YAAJ,GAAmB;AACjBV,IAAAA,iBAAiB,GACfA,iBAAiB,IAAIjB,sBAAsB,CAAC,WAAD,CAD7C;AAEA,WAAOiB,iBAAP;AACD,GAL0B;;AAO3B,MAAIW,qBAAJ,GAA4B;AAC1BV,IAAAA,0BAA0B,GACxBA,0BAA0B,IAC1BlB,sBAAsB,CAAC,oBAAD,CAFxB;AAGA,WAAOkB,0BAAP;AACD,GAZ0B;;AAc3B,MAAIW,+BAAJ,GAAsC;AACpCV,IAAAA,oCAAoC,GAClCA,oCAAoC,KACnCpB,QAAQ,CAACS,EAAT,KAAgB,KAAhB,GACGR,sBAAsB,CAAC,8BAAD,CADzB,GAEG,KAAK4B,qBAH2B,CADtC;AAKA,WAAOT,oCAAP;AACD,GArB0B;;AAuB3B,MAAIC,iBAAJ,GAAwB;AACtBA,IAAAA,iBAAiB,GACfA,iBAAiB,IAAIpB,sBAAsB,CAAC,gBAAD,CAD7C;AAEA,WAAOoB,iBAAP;AACD,GA3B0B;;AA6B3B,MAAIC,6BAAJ,GAAoC;AAClCA,IAAAA,6BAA6B,GAC3BA,6BAA6B,IAC7BrB,sBAAsB,CAAC,4BAAD,CAFxB;AAGA,WAAOqB,6BAAP;AACD,GAlC0B;;AAoC3B,MAAIC,8BAAJ,GAAqC;AACnCA,IAAAA,8BAA8B,GAC5BA,8BAA8B,IAC9BtB,sBAAsB,CAAC,6BAAD,CAFxB;AAGA,WAAOsB,8BAAP;AACD,GAzC0B;;AA2C3B,MAAIE,eAAJ,GAAsB;AACpBA,IAAAA,eAAe,GAAGA,eAAe,IAAIxB,sBAAsB,CAAC,cAAD,CAA3D;AACA,WAAOwB,eAAP;AACD,GA9C0B;;AAgD3B,MAAIC,uBAAJ,GAA8B;AAC5BA,IAAAA,uBAAuB,GACrBA,uBAAuB,IAAIzB,sBAAsB,CAAC,sBAAD,CADnD;AAEA,WAAOyB,uBAAP;AACD;;AApD0B,CAA7B;;AAuDA,MAAMK,MAAN,SAAqBlC,KAAK,CAACmC,SAA3B,CAAkD;AAAA;AAAA;;AAAA,iCACI,IADJ;;AAAA,qCAE9B,IAAIlC,QAAQ,CAACmC,KAAb,CAAmB,CAAnB,CAF8B;;AAAA,sCAG7B,IAAInC,QAAQ,CAACmC,KAAb,CAAmB,CAAnB,CAH6B;;AAAA,0CAIzB,IAAInC,QAAQ,CAACmC,KAAb,CAAmB,CAAnB,CAJyB;;AAAA,oCAUtCC,GAAD,IAAqD;AAAA;;AAC5D,WAAKA,GAAL,GAAWA,GAAX;AACA,mDAAKC,KAAL,EAAWC,cAAX,kGAA4BF,GAA5B;AACD,KAb+C;AAAA;;AAMhDG,EAAAA,cAAc,CAACF,KAAD,EAA2B;AAAA;;AACvC,sBAAKD,GAAL,wDAAUG,cAAV,CAAyBF,KAAzB;AACD;;AAODG,EAAAA,MAAM,GAAG;AACP,UAAM;AAAEC,MAAAA,OAAO,GAAG7B,cAAZ;AAA4B,SAAG8B;AAA/B,QAAwC,KAAKL,KAAnD;;AAEA,QAAII,OAAO,IAAI/B,mBAAf,EAAoC;AAClCgB,MAAAA,oBAAoB,GAClBA,oBAAoB,IACpB1B,QAAQ,CAAC2C,uBAAT,CAAiCd,oBAAoB,CAACC,YAAtD,CAFF;AAIA,UAAI;AACF;AACA;AACA;AACAc,QAAAA,MAJE;AAKFC,QAAAA,aALE;AAMFC,QAAAA,QANE;AAOFC,QAAAA,aAPE;AAQFC,QAAAA,cARE;AASF,WAAGX;AATD,UAUAK,IAVJ;;AAYA,UAAIE,MAAM,KAAKK,SAAX,IAAwBJ,aAAa,KAAKI,SAA9C,EAAyD;AACvDjC,QAAAA,OAAO,CAACkC,IAAR,CACE,+QADF;AAGAL,QAAAA,aAAa,GAAGD,MAAM,KAAK,CAAX,GAAe,CAAf,GAAmB,CAAnC,CAJuD,CAIjB;AACvC;;AAED,YAAMO,cAAc,GAAG5C,YAAY,CAACyC,cAAD,CAAnC;AAEA,0BACE,oBAAC,oBAAD,eACMX,KADN;AAEE,QAAA,cAAc,EAAEc,cAFlB;AAGE,QAAA,aAAa,EAAEN,aAHjB;AAIE,QAAA,GAAG,EAAE,KAAKO,MAJZ;AAKE,QAAA,oBAAoB,EAClB,CAACL,aAAD,GACIE,SADJ,GAEIjD,QAAQ,CAACqD,KAAT,CACE,CACE;AACEC,UAAAA,WAAW,EAAE;AACXC,YAAAA,QAAQ,EAAE,KAAKA,QADJ;AAEXC,YAAAA,OAAO,EAAE,KAAKA,OAFH;AAGXC,YAAAA,YAAY,EAAE,KAAKA;AAHR;AADf,SADF,CADF,EAUE;AAAEC,UAAAA,eAAe,EAAE;AAAnB,SAVF;AARR,UAqBG,CAACX,aAAD,GAAmB;AAClBD,MAAAA,QADD,gBAGC,oBAAC,yBAAD,CAA2B,QAA3B;AACE,QAAA,KAAK,EAAE;AACLS,UAAAA,QAAQ,EAAE,KAAKA,QADV;AAELC,UAAAA,OAAO,EAAE,KAAKA,OAFT;AAGLC,UAAAA,YAAY,EAAE,KAAKA;AAHd;AADT,SAMGX,QANH,CAxBJ,CADF;AAoCD,KA9DD,MA8DO;AACL;AACA,UAAI;AACFF,QAAAA,MADE;AAEFC,QAAAA,aAFE;AAGFc,QAAAA,KAHE;AAIF;AACArB,QAAAA,cALE;AAMF,WAAGD;AAND,UAOAK,IAPJ;;AASA,UAAIE,MAAM,KAAKK,SAAX,IAAwBJ,aAAa,KAAKI,SAA9C,EAAyD;AACvDJ,QAAAA,aAAa,GAAGD,MAAM,KAAK,CAAX,GAAe,CAAf,GAAmB,CAAnC;AACD;;AACD,0BACE,oBAAC,QAAD,CAAU,IAAV;AACE,QAAA,KAAK,EAAE,CAACe,KAAD,EAAQ;AAAEC,UAAAA,OAAO,EAAEf,aAAa,KAAK,CAAlB,GAAsB,MAAtB,GAA+B;AAA1C,SAAR,CADT;AAEE,QAAA,GAAG,EAAE,KAAKO;AAFZ,SAGMf,KAHN,EADF;AAOD;AACF;;AAtG+C;;AAyGlD,SAASwB,eAAT,CAAyBxB,KAAzB,EAAsD;AACpD,QAAM;AAAEI,IAAAA,OAAO,GAAG7B,cAAZ;AAA4BkD,IAAAA,YAA5B;AAA0C,OAAGpB;AAA7C,MAAsDL,KAA5D;;AAEA,MAAII,OAAO,IAAI/B,mBAAf,EAAoC;AAClC,QAAIoD,YAAJ,EAAkB;AAChB,0BAAO,oBAAC,oBAAD,CAAsB,+BAAtB,EAA0DpB,IAA1D,CAAP;AACD;;AACD,wBAAO,oBAAC,oBAAD,CAAsB,qBAAtB,EAAgDA,IAAhD,CAAP;AACD;;AACD,sBAAO,oBAAC,IAAD,EAAUA,IAAV,CAAP;AACD;;AAED,MAAMqB,MAAM,GAAG3D,UAAU,CAAC4D,MAAX,CAAkB;AAC/BC,EAAAA,aAAa,EAAE;AACbC,IAAAA,QAAQ,EAAE,UADG;AAEbC,IAAAA,GAAG,EAAE,CAFQ;AAGbC,IAAAA,KAAK,EAAE,CAHM;AAIbC,IAAAA,aAAa,EAAE,KAJF;AAKbC,IAAAA,UAAU,EAAE,QALC;AAMbC,IAAAA,cAAc,EAAE;AANH;AADgB,CAAlB,CAAf;;AAWA,MAAMC,gCAAgC,GAAInC,KAAD,iBACvC,oBAAC,oBAAD,CAAsB,8BAAtB;AACE,EAAA,IAAI,EAAC,MADP;AAEE,EAAA,KAAK,EAAE0B,MAAM,CAACE;AAFhB,gBAGE,oBAAC,KAAD;AAAO,EAAA,UAAU,EAAC,QAAlB;AAA2B,EAAA,YAAY,EAAE;AAAzC,GAAgD5B,KAAhD,EAHF,CADF;;AAQA,MAAMoC,0BAA0B,GAC9BpC,KADiC,iBAGjC,oBAAC,oBAAD,CAAsB,8BAAtB,eACMA,KADN;AAEE,EAAA,IAAI,EAAC,OAFP;AAGE,EAAA,KAAK,EAAE0B,MAAM,CAACE;AAHhB,GAHF;;AAUA,MAAMS,yBAAyB,GAC7BrC,KADgC,iBAGhC,oBAAC,oBAAD,CAAsB,8BAAtB,eACMA,KADN;AAEE,EAAA,IAAI,EAAC,MAFP;AAGE,EAAA,KAAK,EAAE0B,MAAM,CAACE;AAHhB,GAHF;;AAUA,MAAMU,2BAA2B,GAC/BtC,KADkC,iBAGlC,oBAAC,oBAAD,CAAsB,8BAAtB,eACMA,KADN;AAEE,EAAA,IAAI,EAAC,QAFP;AAGE,EAAA,KAAK,EAAE0B,MAAM,CAACE;AAHhB,GAHF;;AAUA,MAAMW,8BAA8B,GAClCvC,KADqC,iBAGrC,oBAAC,oBAAD,CAAsB,8BAAtB,eACMA,KADN;AAEE,EAAA,IAAI,EAAC,WAFP;AAGE,EAAA,KAAK,EAAE0B,MAAM,CAACE;AAHhB,GAHF;;AAwBA;AACA;AACA,MAAMY,aAAa,gBAAG9E,KAAK,CAAC+E,aAAN,CAAoB7C,MAApB,CAAtB;AAEA8C,MAAM,CAACC,OAAP,GAAiB;AACf;AACA;AACA/C,EAAAA,MAHe;AAIf4B,EAAAA,eAJe;AAKfgB,EAAAA,aALe;;AAOf,MAAI/C,YAAJ,GAAmB;AACjB,WAAOD,oBAAoB,CAACC,YAA5B;AACD,GATc;;AAWf,MAAIC,qBAAJ,GAA4B;AAC1B,WAAOF,oBAAoB,CAACE,qBAA5B;AACD,GAbc;;AAef,MAAIC,+BAAJ,GAAsC;AACpC,WAAOH,oBAAoB,CAACG,+BAA5B;AACD,GAjBc;;AAmBf,MAAIiD,WAAJ,GAAkB;AAChB,WAAOpD,oBAAoB,CAACN,iBAA5B;AACD,GArBc;;AAsBf,MAAI2D,uBAAJ,GAA8B;AAC5B,WAAOrD,oBAAoB,CAACL,6BAA5B;AACD,GAxBc;;AAyBf,MAAI2D,wBAAJ,GAA+B;AAC7B,WAAOtD,oBAAoB,CAACJ,8BAA5B;AACD,GA3Bc;;AA4Bf,MAAI2D,SAAJ,GAAgB;AACd,QAAIlF,QAAQ,CAACS,EAAT,KAAgB,KAApB,EAA2B;AACzBK,MAAAA,OAAO,CAACkC,IAAR,CAAa,mDAAb;AACA,aAAO5C,IAAP;AACD;;AAED,WAAOuB,oBAAoB,CAACF,eAA5B;AACD,GAnCc;;AAoCf,MAAI0D,iBAAJ,GAAwB;AACtB,QAAInF,QAAQ,CAACS,EAAT,KAAgB,KAApB,EAA2B;AACzBK,MAAAA,OAAO,CAACkC,IAAR,CAAa,2DAAb;AACA,aAAO5C,IAAP;AACD;;AAED,WAAOuB,oBAAoB,CAACD,uBAA5B;AACD,GA3Cc;;AA4Cf;AACA;AACA4C,EAAAA,gCA9Ce;AA+CfC,EAAAA,0BA/Ce;AAgDfC,EAAAA,yBAhDe;AAiDfC,EAAAA,2BAjDe;AAkDfC,EAAAA,8BAlDe;AAoDf/D,EAAAA,aApDe;AAqDfM,EAAAA,cArDe;AAsDfD,EAAAA,sBAtDe;AAuDfT,EAAAA;AAvDe,CAAjB","sourcesContent":["import React from 'react';\nimport {\n Animated,\n Image,\n ImageProps,\n Platform,\n requireNativeComponent,\n StyleSheet,\n UIManager,\n View,\n ViewProps,\n} from 'react-native';\n// @ts-ignore Getting private component\n// eslint-disable-next-line import/default\nimport processColor from 'react-native/Libraries/StyleSheet/processColor';\n\nimport TransitionProgressContext from './TransitionProgressContext';\nimport useTransitionProgress from './useTransitionProgress';\nimport {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n} from './types';\n\n// web implementation is taken from `index.tsx`\nconst isPlatformSupported =\n Platform.OS === 'ios' ||\n Platform.OS === 'android' ||\n Platform.OS === 'windows';\n\nlet ENABLE_SCREENS = isPlatformSupported;\n\nfunction enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = isPlatformSupported && shouldEnableScreens;\n if (ENABLE_SCREENS && !UIManager.getViewManagerConfig('RNSScreen')) {\n console.error(\n `Screen native module hasn't been linked. Please check the react-native-screens README for more details`\n );\n }\n}\n\n// const that tells if the library should use new implementation, will be undefined for older versions\nconst shouldUseActivityState = true;\n\nfunction screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// We initialize these lazily so that importing the module doesn't throw error when not linked\n// This is necessary coz libraries such as React Navigation import the library where it may not be enabled\nlet NativeScreenValue: React.ComponentType<ScreenProps>;\nlet NativeScreenContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenNavigationContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenStack: React.ComponentType<ScreenStackProps>;\nlet NativeScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps>;\nlet NativeScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>>;\nlet AnimatedNativeScreen: React.ComponentType<ScreenProps>;\nlet NativeSearchBar: React.ComponentType<SearchBarProps>;\nlet NativeFullWindowOverlay: React.ComponentType<View>;\n\nconst ScreensNativeModules = {\n get NativeScreen() {\n NativeScreenValue =\n NativeScreenValue || requireNativeComponent('RNSScreen');\n return NativeScreenValue;\n },\n\n get NativeScreenContainer() {\n NativeScreenContainerValue =\n NativeScreenContainerValue ||\n requireNativeComponent('RNSScreenContainer');\n return NativeScreenContainerValue;\n },\n\n get NativeScreenNavigationContainer() {\n NativeScreenNavigationContainerValue =\n NativeScreenNavigationContainerValue ||\n (Platform.OS === 'ios'\n ? requireNativeComponent('RNSScreenNavigationContainer')\n : this.NativeScreenContainer);\n return NativeScreenNavigationContainerValue;\n },\n\n get NativeScreenStack() {\n NativeScreenStack =\n NativeScreenStack || requireNativeComponent('RNSScreenStack');\n return NativeScreenStack;\n },\n\n get NativeScreenStackHeaderConfig() {\n NativeScreenStackHeaderConfig =\n NativeScreenStackHeaderConfig ||\n requireNativeComponent('RNSScreenStackHeaderConfig');\n return NativeScreenStackHeaderConfig;\n },\n\n get NativeScreenStackHeaderSubview() {\n NativeScreenStackHeaderSubview =\n NativeScreenStackHeaderSubview ||\n requireNativeComponent('RNSScreenStackHeaderSubview');\n return NativeScreenStackHeaderSubview;\n },\n\n get NativeSearchBar() {\n NativeSearchBar = NativeSearchBar || requireNativeComponent('RNSSearchBar');\n return NativeSearchBar;\n },\n\n get NativeFullWindowOverlay() {\n NativeFullWindowOverlay =\n NativeFullWindowOverlay || requireNativeComponent('RNSFullWindowOverlay');\n return NativeFullWindowOverlay;\n },\n};\n\nclass Screen extends React.Component<ScreenProps> {\n private ref: React.ElementRef<typeof View> | null = null;\n private closing = new Animated.Value(0);\n private progress = new Animated.Value(0);\n private goingForward = new Animated.Value(0);\n\n setNativeProps(props: ScreenProps): void {\n this.ref?.setNativeProps(props);\n }\n\n setRef = (ref: React.ElementRef<typeof View> | null): void => {\n this.ref = ref;\n this.props.onComponentRef?.(ref);\n };\n\n render() {\n const { enabled = ENABLE_SCREENS, ...rest } = this.props;\n\n if (enabled && isPlatformSupported) {\n AnimatedNativeScreen =\n AnimatedNativeScreen ||\n Animated.createAnimatedComponent(ScreensNativeModules.NativeScreen);\n\n let {\n // Filter out active prop in this case because it is unused and\n // can cause problems depending on react-native version:\n // https://github.com/react-navigation/react-navigation/issues/4886\n active,\n activityState,\n children,\n isNativeStack,\n statusBarColor,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n console.warn(\n 'It appears that you are using old version of react-navigation library. Please update @react-navigation/bottom-tabs, @react-navigation/stack and @react-navigation/drawer to version 5.10.0 or above to take full advantage of new functionality added to react-native-screens'\n );\n activityState = active !== 0 ? 2 : 0; // in the new version, we need one of the screens to have value of 2 after the transition\n }\n\n const processedColor = processColor(statusBarColor);\n\n return (\n <AnimatedNativeScreen\n {...props}\n statusBarColor={processedColor}\n activityState={activityState}\n ref={this.setRef}\n onTransitionProgress={\n !isNativeStack\n ? undefined\n : Animated.event(\n [\n {\n nativeEvent: {\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n },\n },\n ],\n { useNativeDriver: true }\n )\n }>\n {!isNativeStack ? ( // see comment of this prop in types.tsx for information why it is needed\n children\n ) : (\n <TransitionProgressContext.Provider\n value={{\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n }}>\n {children}\n </TransitionProgressContext.Provider>\n )}\n </AnimatedNativeScreen>\n );\n } else {\n // same reason as above\n let {\n active,\n activityState,\n style,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onComponentRef,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0;\n }\n return (\n <Animated.View\n style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}\n ref={this.setRef}\n {...props}\n />\n );\n }\n }\n}\n\nfunction ScreenContainer(props: ScreenContainerProps) {\n const { enabled = ENABLE_SCREENS, hasTwoStates, ...rest } = props;\n\n if (enabled && isPlatformSupported) {\n if (hasTwoStates) {\n return <ScreensNativeModules.NativeScreenNavigationContainer {...rest} />;\n }\n return <ScreensNativeModules.NativeScreenContainer {...rest} />;\n }\n return <View {...rest} />;\n}\n\nconst styles = StyleSheet.create({\n headerSubview: {\n position: 'absolute',\n top: 0,\n right: 0,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nconst ScreenStackHeaderBackButtonImage = (props: ImageProps): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n type=\"back\"\n style={styles.headerSubview}>\n <Image resizeMode=\"center\" fadeDuration={0} {...props} />\n </ScreensNativeModules.NativeScreenStackHeaderSubview>\n);\n\nconst ScreenStackHeaderRightView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"right\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderLeftView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"left\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderCenterView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"center\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderSearchBarView = (\n props: React.PropsWithChildren<SearchBarProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"searchBar\"\n style={styles.headerSubview}\n />\n);\n\nexport type {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n};\n\n// context to be used when the user wants to use enhanced implementation\n// e.g. to use `react-native-reanimated` (see `reanimated` folder in repo)\nconst ScreenContext = React.createContext(Screen);\n\nmodule.exports = {\n // these are classes so they are not evaluated until used\n // so no need to use getters for them\n Screen,\n ScreenContainer,\n ScreenContext,\n\n get NativeScreen() {\n return ScreensNativeModules.NativeScreen;\n },\n\n get NativeScreenContainer() {\n return ScreensNativeModules.NativeScreenContainer;\n },\n\n get NativeScreenNavigationContainer() {\n return ScreensNativeModules.NativeScreenNavigationContainer;\n },\n\n get ScreenStack() {\n return ScreensNativeModules.NativeScreenStack;\n },\n get ScreenStackHeaderConfig() {\n return ScreensNativeModules.NativeScreenStackHeaderConfig;\n },\n get ScreenStackHeaderSubview() {\n return ScreensNativeModules.NativeScreenStackHeaderSubview;\n },\n get SearchBar() {\n if (Platform.OS !== 'ios') {\n console.warn('Importing SearchBar is only valid on iOS devices.');\n return View;\n }\n\n return ScreensNativeModules.NativeSearchBar;\n },\n get FullWindowOverlay() {\n if (Platform.OS !== 'ios') {\n console.warn('Importing FullWindowOverlay is only valid on iOS devices.');\n return View;\n }\n\n return ScreensNativeModules.NativeFullWindowOverlay;\n },\n // these are functions and will not be evaluated until used\n // so no need to use getters for them\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderRightView,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderSearchBarView,\n\n enableScreens,\n screensEnabled,\n shouldUseActivityState,\n useTransitionProgress,\n};\n"]}
1
+ {"version":3,"sources":["index.native.tsx"],"names":["React","Animated","Image","Platform","requireNativeComponent","StyleSheet","UIManager","View","Freeze","processColor","version","TransitionProgressContext","useTransitionProgress","isSearchBarAvailableForCurrentPlatform","executeNativeBackPress","isPlatformSupported","OS","ENABLE_SCREENS","enableScreens","shouldEnableScreens","getViewManagerConfig","console","error","ENABLE_FREEZE","enableFreeze","shouldEnableReactFreeze","minor","parseInt","split","warn","shouldUseActivityState","screensEnabled","NativeScreenValue","NativeScreenContainerValue","NativeScreenNavigationContainerValue","NativeScreenStack","NativeScreenStackHeaderConfig","NativeScreenStackHeaderSubview","AnimatedNativeScreen","NativeSearchBar","NativeFullWindowOverlay","ScreensNativeModules","NativeScreen","NativeScreenContainer","NativeScreenNavigationContainer","DelayedFreeze","freeze","children","freezeState","setFreezeState","useState","setImmediate","MaybeFreeze","ScreenStack","props","rest","size","Children","count","childrenWithFreeze","map","child","index","Screen","Component","Value","ref","onComponentRef","setNativeProps","render","enabled","createAnimatedComponent","active","activityState","isNativeStack","statusBarColor","undefined","processedColor","viewConfig","validAttributes","style","display","setRef","event","nativeEvent","progress","closing","goingForward","useNativeDriver","ScreenContainer","hasTwoStates","styles","create","headerSubview","position","top","right","flexDirection","alignItems","justifyContent","ScreenStackHeaderBackButtonImage","ScreenStackHeaderRightView","ScreenStackHeaderLeftView","ScreenStackHeaderCenterView","ScreenStackHeaderSearchBarView","ScreenContext","createContext","module","exports","ScreenStackHeaderConfig","ScreenStackHeaderSubview","SearchBar","FullWindowOverlay"],"mappings":"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","sourcesContent":["import React from 'react';\nimport {\n Animated,\n Image,\n ImageProps,\n Platform,\n requireNativeComponent,\n StyleSheet,\n UIManager,\n View,\n ViewProps,\n} from 'react-native';\nimport { Freeze } from 'react-freeze';\n// @ts-ignore Getting private component\n// eslint-disable-next-line import/default\nimport processColor from 'react-native/Libraries/StyleSheet/processColor';\nimport { version } from 'react-native/package.json';\n\nimport TransitionProgressContext from './TransitionProgressContext';\nimport useTransitionProgress from './useTransitionProgress';\nimport {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n} from './types';\nimport {\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n} from './utils';\n\n// web implementation is taken from `index.tsx`\nconst isPlatformSupported =\n Platform.OS === 'ios' ||\n Platform.OS === 'android' ||\n Platform.OS === 'windows';\n\nlet ENABLE_SCREENS = isPlatformSupported;\n\nfunction enableScreens(shouldEnableScreens = true): void {\n ENABLE_SCREENS = isPlatformSupported && shouldEnableScreens;\n if (ENABLE_SCREENS && !UIManager.getViewManagerConfig('RNSScreen')) {\n console.error(\n `Screen native module hasn't been linked. Please check the react-native-screens README for more details`\n );\n }\n}\n\nlet ENABLE_FREEZE = false;\n\nfunction enableFreeze(shouldEnableReactFreeze = true): void {\n const minor = parseInt(version.split('.')[1]); // eg. takes 66 from '0.66.0'\n\n // react-freeze requires react-native >=0.64, react-native from main is 0.0.0\n if (!(minor === 0 || minor >= 64) && shouldEnableReactFreeze) {\n console.warn(\n 'react-freeze library requires at least react-native 0.64. Please upgrade your react-native version in order to use this feature.'\n );\n }\n\n ENABLE_FREEZE = shouldEnableReactFreeze;\n}\n\n// const that tells if the library should use new implementation, will be undefined for older versions\nconst shouldUseActivityState = true;\n\nfunction screensEnabled(): boolean {\n return ENABLE_SCREENS;\n}\n\n// We initialize these lazily so that importing the module doesn't throw error when not linked\n// This is necessary coz libraries such as React Navigation import the library where it may not be enabled\nlet NativeScreenValue: React.ComponentType<ScreenProps>;\nlet NativeScreenContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenNavigationContainerValue: React.ComponentType<ScreenContainerProps>;\nlet NativeScreenStack: React.ComponentType<ScreenStackProps>;\nlet NativeScreenStackHeaderConfig: React.ComponentType<ScreenStackHeaderConfigProps>;\nlet NativeScreenStackHeaderSubview: React.ComponentType<React.PropsWithChildren<\n ViewProps & { type?: HeaderSubviewTypes }\n>>;\nlet AnimatedNativeScreen: React.ComponentType<ScreenProps>;\nlet NativeSearchBar: React.ComponentType<SearchBarProps>;\nlet NativeFullWindowOverlay: React.ComponentType<View>;\n\nconst ScreensNativeModules = {\n get NativeScreen() {\n NativeScreenValue =\n NativeScreenValue || requireNativeComponent('RNSScreen');\n return NativeScreenValue;\n },\n\n get NativeScreenContainer() {\n NativeScreenContainerValue =\n NativeScreenContainerValue ||\n requireNativeComponent('RNSScreenContainer');\n return NativeScreenContainerValue;\n },\n\n get NativeScreenNavigationContainer() {\n NativeScreenNavigationContainerValue =\n NativeScreenNavigationContainerValue ||\n (Platform.OS === 'ios'\n ? requireNativeComponent('RNSScreenNavigationContainer')\n : this.NativeScreenContainer);\n return NativeScreenNavigationContainerValue;\n },\n\n get NativeScreenStack() {\n NativeScreenStack =\n NativeScreenStack || requireNativeComponent('RNSScreenStack');\n return NativeScreenStack;\n },\n\n get NativeScreenStackHeaderConfig() {\n NativeScreenStackHeaderConfig =\n NativeScreenStackHeaderConfig ||\n requireNativeComponent('RNSScreenStackHeaderConfig');\n return NativeScreenStackHeaderConfig;\n },\n\n get NativeScreenStackHeaderSubview() {\n NativeScreenStackHeaderSubview =\n NativeScreenStackHeaderSubview ||\n requireNativeComponent('RNSScreenStackHeaderSubview');\n return NativeScreenStackHeaderSubview;\n },\n\n get NativeSearchBar() {\n NativeSearchBar = NativeSearchBar || requireNativeComponent('RNSSearchBar');\n return NativeSearchBar;\n },\n\n get NativeFullWindowOverlay() {\n NativeFullWindowOverlay =\n NativeFullWindowOverlay || requireNativeComponent('RNSFullWindowOverlay');\n return NativeFullWindowOverlay;\n },\n};\n\ninterface FreezeWrapperProps {\n freeze: boolean;\n children: React.ReactNode;\n}\n\n// This component allows one more render before freezing the screen.\n// Allows activityState to reach the native side and useIsFocused to work correctly.\nfunction DelayedFreeze({ freeze, children }: FreezeWrapperProps) {\n // flag used for determining whether freeze should be enabled\n const [freezeState, setFreezeState] = React.useState(false);\n\n if (freeze !== freezeState) {\n // setImmediate is executed at the end of the JS execution block.\n // Used here for changing the state right after the render.\n setImmediate(() => {\n setFreezeState(freeze);\n });\n }\n\n return <Freeze freeze={freeze ? freezeState : false}>{children}</Freeze>;\n}\n\nfunction MaybeFreeze({ freeze, children }: FreezeWrapperProps) {\n if (ENABLE_FREEZE) {\n return <DelayedFreeze freeze={freeze}>{children}</DelayedFreeze>;\n } else {\n return <>{children}</>;\n }\n}\n\nfunction ScreenStack(props: ScreenStackProps) {\n if (ENABLE_FREEZE) {\n const { children, ...rest } = props;\n const size = React.Children.count(children);\n // freezes all screens except the top one\n const childrenWithFreeze = React.Children.map(children, (child, index) => (\n <DelayedFreeze freeze={size - index > 1}>{child}</DelayedFreeze>\n ));\n return (\n <ScreensNativeModules.NativeScreenStack {...rest}>\n {childrenWithFreeze}\n </ScreensNativeModules.NativeScreenStack>\n );\n }\n return <ScreensNativeModules.NativeScreenStack {...props} />;\n}\n\n// Incomplete type, all accessible properties available at:\n// react-native/Libraries/Components/View/ReactNativeViewViewConfig.js\ninterface ViewConfig extends View {\n viewConfig: {\n validAttributes: {\n style: {\n display: boolean;\n };\n };\n };\n}\n\nclass Screen extends React.Component<ScreenProps> {\n private ref: React.ElementRef<typeof View> | null = null;\n private closing = new Animated.Value(0);\n private progress = new Animated.Value(0);\n private goingForward = new Animated.Value(0);\n\n setNativeProps(props: ScreenProps): void {\n this.ref?.setNativeProps(props);\n }\n\n setRef = (ref: React.ElementRef<typeof View> | null): void => {\n this.ref = ref;\n this.props.onComponentRef?.(ref);\n };\n\n render() {\n const { enabled = ENABLE_SCREENS, ...rest } = this.props;\n\n if (enabled && isPlatformSupported) {\n AnimatedNativeScreen =\n AnimatedNativeScreen ||\n Animated.createAnimatedComponent(ScreensNativeModules.NativeScreen);\n\n let {\n // Filter out active prop in this case because it is unused and\n // can cause problems depending on react-native version:\n // https://github.com/react-navigation/react-navigation/issues/4886\n active,\n activityState,\n children,\n isNativeStack,\n statusBarColor,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n console.warn(\n 'It appears that you are using old version of react-navigation library. Please update @react-navigation/bottom-tabs, @react-navigation/stack and @react-navigation/drawer to version 5.10.0 or above to take full advantage of new functionality added to react-native-screens'\n );\n activityState = active !== 0 ? 2 : 0; // in the new version, we need one of the screens to have value of 2 after the transition\n }\n\n const processedColor = processColor(statusBarColor);\n\n return (\n <MaybeFreeze freeze={activityState === 0}>\n <AnimatedNativeScreen\n {...props}\n statusBarColor={processedColor}\n activityState={activityState}\n // This prevents showing blank screen when navigating between multiple screens with freezing\n // https://github.com/software-mansion/react-native-screens/pull/1208\n ref={(ref: ViewConfig) => {\n if (ref?.viewConfig?.validAttributes?.style) {\n ref.viewConfig.validAttributes.style = {\n ...ref.viewConfig.validAttributes.style,\n display: false,\n };\n }\n this.setRef(ref);\n }}\n onTransitionProgress={\n !isNativeStack\n ? undefined\n : Animated.event(\n [\n {\n nativeEvent: {\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n },\n },\n ],\n { useNativeDriver: true }\n )\n }>\n {!isNativeStack ? ( // see comment of this prop in types.tsx for information why it is needed\n children\n ) : (\n <TransitionProgressContext.Provider\n value={{\n progress: this.progress,\n closing: this.closing,\n goingForward: this.goingForward,\n }}>\n {children}\n </TransitionProgressContext.Provider>\n )}\n </AnimatedNativeScreen>\n </MaybeFreeze>\n );\n } else {\n // same reason as above\n let {\n active,\n activityState,\n style,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onComponentRef,\n ...props\n } = rest;\n\n if (active !== undefined && activityState === undefined) {\n activityState = active !== 0 ? 2 : 0;\n }\n return (\n <Animated.View\n style={[style, { display: activityState !== 0 ? 'flex' : 'none' }]}\n ref={this.setRef}\n {...props}\n />\n );\n }\n }\n}\n\nfunction ScreenContainer(props: ScreenContainerProps) {\n const { enabled = ENABLE_SCREENS, hasTwoStates, ...rest } = props;\n\n if (enabled && isPlatformSupported) {\n if (hasTwoStates) {\n return <ScreensNativeModules.NativeScreenNavigationContainer {...rest} />;\n }\n return <ScreensNativeModules.NativeScreenContainer {...rest} />;\n }\n return <View {...rest} />;\n}\n\nconst styles = StyleSheet.create({\n headerSubview: {\n position: 'absolute',\n top: 0,\n right: 0,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nconst ScreenStackHeaderBackButtonImage = (props: ImageProps): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n type=\"back\"\n style={styles.headerSubview}>\n <Image resizeMode=\"center\" fadeDuration={0} {...props} />\n </ScreensNativeModules.NativeScreenStackHeaderSubview>\n);\n\nconst ScreenStackHeaderRightView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"right\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderLeftView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"left\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderCenterView = (\n props: React.PropsWithChildren<ViewProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"center\"\n style={styles.headerSubview}\n />\n);\n\nconst ScreenStackHeaderSearchBarView = (\n props: React.PropsWithChildren<SearchBarProps>\n): JSX.Element => (\n <ScreensNativeModules.NativeScreenStackHeaderSubview\n {...props}\n type=\"searchBar\"\n style={styles.headerSubview}\n />\n);\n\nexport type {\n StackPresentationTypes,\n StackAnimationTypes,\n BlurEffectTypes,\n ScreenReplaceTypes,\n ScreenOrientationTypes,\n HeaderSubviewTypes,\n ScreenProps,\n ScreenContainerProps,\n ScreenStackProps,\n ScreenStackHeaderConfigProps,\n SearchBarProps,\n};\n\n// context to be used when the user wants to use enhanced implementation\n// e.g. to use `react-native-reanimated` (see `reanimated` folder in repo)\nconst ScreenContext = React.createContext(Screen);\n\nmodule.exports = {\n // these are classes so they are not evaluated until used\n // so no need to use getters for them\n Screen,\n ScreenContainer,\n ScreenContext,\n ScreenStack,\n\n get NativeScreen() {\n return ScreensNativeModules.NativeScreen;\n },\n\n get NativeScreenContainer() {\n return ScreensNativeModules.NativeScreenContainer;\n },\n\n get NativeScreenNavigationContainer() {\n return ScreensNativeModules.NativeScreenNavigationContainer;\n },\n\n get ScreenStackHeaderConfig() {\n return ScreensNativeModules.NativeScreenStackHeaderConfig;\n },\n get ScreenStackHeaderSubview() {\n return ScreensNativeModules.NativeScreenStackHeaderSubview;\n },\n get SearchBar() {\n if (!isSearchBarAvailableForCurrentPlatform) {\n console.warn(\n 'Importing SearchBar is only valid on iOS and Android devices.'\n );\n return View;\n }\n\n return ScreensNativeModules.NativeSearchBar;\n },\n get FullWindowOverlay() {\n if (Platform.OS !== 'ios') {\n console.warn('Importing FullWindowOverlay is only valid on iOS devices.');\n return View;\n }\n\n return ScreensNativeModules.NativeFullWindowOverlay;\n },\n // these are functions and will not be evaluated until used\n // so no need to use getters for them\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderRightView,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderSearchBarView,\n\n enableScreens,\n enableFreeze,\n screensEnabled,\n shouldUseActivityState,\n useTransitionProgress,\n\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n};\n"]}
@@ -0,0 +1,50 @@
1
+ import React from 'react';
2
+ import { BackHandler } from 'react-native';
3
+
4
+ /**
5
+ * This hook is an abstraction for keeping back press subscription
6
+ * logic in one place.
7
+ */
8
+ export function useBackPressSubscription({
9
+ onBackPress,
10
+ isDisabled
11
+ }) {
12
+ const [isActive, setIsActive] = React.useState(false);
13
+ const subscription = React.useRef();
14
+ const clearSubscription = React.useCallback((shouldSetActive = true) => {
15
+ var _subscription$current;
16
+
17
+ (_subscription$current = subscription.current) === null || _subscription$current === void 0 ? void 0 : _subscription$current.remove();
18
+ subscription.current = undefined;
19
+ if (shouldSetActive) setIsActive(false);
20
+ }, []);
21
+ const createSubscription = React.useCallback(() => {
22
+ if (!isDisabled) {
23
+ var _subscription$current2;
24
+
25
+ (_subscription$current2 = subscription.current) === null || _subscription$current2 === void 0 ? void 0 : _subscription$current2.remove();
26
+ subscription.current = BackHandler.addEventListener('hardwareBackPress', onBackPress);
27
+ setIsActive(true);
28
+ }
29
+ }, [isDisabled, onBackPress]);
30
+ const handleAttached = React.useCallback(() => {
31
+ if (isActive) {
32
+ createSubscription();
33
+ }
34
+ }, [createSubscription, isActive]);
35
+ const handleDetached = React.useCallback(() => {
36
+ clearSubscription(false);
37
+ }, [clearSubscription]);
38
+ React.useEffect(() => {
39
+ if (isDisabled) {
40
+ clearSubscription();
41
+ }
42
+ }, [isDisabled, clearSubscription]);
43
+ return {
44
+ handleAttached,
45
+ handleDetached,
46
+ createSubscription,
47
+ clearSubscription
48
+ };
49
+ }
50
+ //# sourceMappingURL=useBackPressSubscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["useBackPressSubscription.tsx"],"names":["React","BackHandler","useBackPressSubscription","onBackPress","isDisabled","isActive","setIsActive","useState","subscription","useRef","clearSubscription","useCallback","shouldSetActive","current","remove","undefined","createSubscription","addEventListener","handleAttached","handleDetached","useEffect"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,WAAT,QAAqD,cAArD;;AAcA;AACA;AACA;AACA;AACA,OAAO,SAASC,wBAAT,CAAkC;AACvCC,EAAAA,WADuC;AAEvCC,EAAAA;AAFuC,CAAlC,EAG4B;AACjC,QAAM,CAACC,QAAD,EAAWC,WAAX,IAA0BN,KAAK,CAACO,QAAN,CAAe,KAAf,CAAhC;AACA,QAAMC,YAAY,GAAGR,KAAK,CAACS,MAAN,EAArB;AAEA,QAAMC,iBAAiB,GAAGV,KAAK,CAACW,WAAN,CAAkB,CAACC,eAAe,GAAG,IAAnB,KAA4B;AAAA;;AACtE,6BAAAJ,YAAY,CAACK,OAAb,gFAAsBC,MAAtB;AACAN,IAAAA,YAAY,CAACK,OAAb,GAAuBE,SAAvB;AACA,QAAIH,eAAJ,EAAqBN,WAAW,CAAC,KAAD,CAAX;AACtB,GAJyB,EAIvB,EAJuB,CAA1B;AAMA,QAAMU,kBAAkB,GAAGhB,KAAK,CAACW,WAAN,CAAkB,MAAM;AACjD,QAAI,CAACP,UAAL,EAAiB;AAAA;;AACf,gCAAAI,YAAY,CAACK,OAAb,kFAAsBC,MAAtB;AACAN,MAAAA,YAAY,CAACK,OAAb,GAAuBZ,WAAW,CAACgB,gBAAZ,CACrB,mBADqB,EAErBd,WAFqB,CAAvB;AAIAG,MAAAA,WAAW,CAAC,IAAD,CAAX;AACD;AACF,GAT0B,EASxB,CAACF,UAAD,EAAaD,WAAb,CATwB,CAA3B;AAWA,QAAMe,cAAc,GAAGlB,KAAK,CAACW,WAAN,CAAkB,MAAM;AAC7C,QAAIN,QAAJ,EAAc;AACZW,MAAAA,kBAAkB;AACnB;AACF,GAJsB,EAIpB,CAACA,kBAAD,EAAqBX,QAArB,CAJoB,CAAvB;AAMA,QAAMc,cAAc,GAAGnB,KAAK,CAACW,WAAN,CAAkB,MAAM;AAC7CD,IAAAA,iBAAiB,CAAC,KAAD,CAAjB;AACD,GAFsB,EAEpB,CAACA,iBAAD,CAFoB,CAAvB;AAIAV,EAAAA,KAAK,CAACoB,SAAN,CAAgB,MAAM;AACpB,QAAIhB,UAAJ,EAAgB;AACdM,MAAAA,iBAAiB;AAClB;AACF,GAJD,EAIG,CAACN,UAAD,EAAaM,iBAAb,CAJH;AAMA,SAAO;AACLQ,IAAAA,cADK;AAELC,IAAAA,cAFK;AAGLH,IAAAA,kBAHK;AAILN,IAAAA;AAJK,GAAP;AAMD","sourcesContent":["import React from 'react';\nimport { BackHandler, NativeEventSubscription } from 'react-native';\n\ninterface Args {\n onBackPress: () => boolean;\n isDisabled: boolean;\n}\n\ninterface UseBackPressSubscription {\n handleAttached: () => void;\n handleDetached: () => void;\n createSubscription: () => void;\n clearSubscription: () => void;\n}\n\n/**\n * This hook is an abstraction for keeping back press subscription\n * logic in one place.\n */\nexport function useBackPressSubscription({\n onBackPress,\n isDisabled,\n}: Args): UseBackPressSubscription {\n const [isActive, setIsActive] = React.useState(false);\n const subscription = React.useRef<NativeEventSubscription | undefined>();\n\n const clearSubscription = React.useCallback((shouldSetActive = true) => {\n subscription.current?.remove();\n subscription.current = undefined;\n if (shouldSetActive) setIsActive(false);\n }, []);\n\n const createSubscription = React.useCallback(() => {\n if (!isDisabled) {\n subscription.current?.remove();\n subscription.current = BackHandler.addEventListener(\n 'hardwareBackPress',\n onBackPress\n );\n setIsActive(true);\n }\n }, [isDisabled, onBackPress]);\n\n const handleAttached = React.useCallback(() => {\n if (isActive) {\n createSubscription();\n }\n }, [createSubscription, isActive]);\n\n const handleDetached = React.useCallback(() => {\n clearSubscription(false);\n }, [clearSubscription]);\n\n React.useEffect(() => {\n if (isDisabled) {\n clearSubscription();\n }\n }, [isDisabled, clearSubscription]);\n\n return {\n handleAttached,\n handleDetached,\n createSubscription,\n clearSubscription,\n };\n}\n"]}
@@ -1,7 +1,8 @@
1
1
  import { useTheme } from '@react-navigation/native';
2
2
  import * as React from 'react';
3
3
  import { Platform } from 'react-native';
4
- import { ScreenStackHeaderBackButtonImage, ScreenStackHeaderCenterView, ScreenStackHeaderConfig, ScreenStackHeaderLeftView, ScreenStackHeaderRightView, ScreenStackHeaderSearchBarView, SearchBar } from 'react-native-screens';
4
+ import { ScreenStackHeaderBackButtonImage, ScreenStackHeaderCenterView, ScreenStackHeaderConfig, ScreenStackHeaderLeftView, ScreenStackHeaderRightView, ScreenStackHeaderSearchBarView, SearchBar, isSearchBarAvailableForCurrentPlatform, executeNativeBackPress } from 'react-native-screens';
5
+ import { useBackPressSubscription } from '../utils/useBackPressSubscription';
5
6
  import { processFonts } from './FontProcessor';
6
7
  export default function HeaderConfig({
7
8
  backButtonImage,
@@ -34,8 +35,46 @@ export default function HeaderConfig({
34
35
  const {
35
36
  colors
36
37
  } = useTheme();
37
- const tintColor = headerTintColor !== null && headerTintColor !== void 0 ? headerTintColor : colors.primary;
38
- const [backTitleFontFamily, largeTitleFontFamily, titleFontFamily] = processFonts([headerBackTitleStyle.fontFamily, headerLargeTitleStyle.fontFamily, headerTitleStyle.fontFamily]);
38
+ const tintColor = headerTintColor !== null && headerTintColor !== void 0 ? headerTintColor : colors.primary; // We need to use back press subscription here to override back button behavior on JS side.
39
+ // Because screens are usually used with react-navigation and this library overrides back button
40
+ // we need to handle it first in case when search bar is open
41
+
42
+ const {
43
+ handleAttached,
44
+ handleDetached,
45
+ clearSubscription,
46
+ createSubscription
47
+ } = useBackPressSubscription({
48
+ onBackPress: executeNativeBackPress,
49
+ isDisabled: !searchBar || !!searchBar.disableBackButtonOverride
50
+ });
51
+ const [backTitleFontFamily, largeTitleFontFamily, titleFontFamily] = processFonts([headerBackTitleStyle.fontFamily, headerLargeTitleStyle.fontFamily, headerTitleStyle.fontFamily]); // We want to clear clearSubscription only when components unmounts or search bar changes
52
+
53
+ React.useEffect(() => clearSubscription, [searchBar]);
54
+ const processedSearchBarOptions = React.useMemo(() => {
55
+ if (Platform.OS === 'android' && searchBar && !searchBar.disableBackButtonOverride) {
56
+ const onFocus = (...args) => {
57
+ var _searchBar$onFocus;
58
+
59
+ createSubscription();
60
+ (_searchBar$onFocus = searchBar.onFocus) === null || _searchBar$onFocus === void 0 ? void 0 : _searchBar$onFocus.call(searchBar, ...args);
61
+ };
62
+
63
+ const onClose = (...args) => {
64
+ var _searchBar$onClose;
65
+
66
+ clearSubscription();
67
+ (_searchBar$onClose = searchBar.onClose) === null || _searchBar$onClose === void 0 ? void 0 : _searchBar$onClose.call(searchBar, ...args);
68
+ };
69
+
70
+ return { ...searchBar,
71
+ onFocus,
72
+ onClose
73
+ };
74
+ }
75
+
76
+ return searchBar;
77
+ }, [searchBar, createSubscription, clearSubscription]);
39
78
  return /*#__PURE__*/React.createElement(ScreenStackHeaderConfig, {
40
79
  backButtonInCustomView: backButtonInCustomView,
41
80
  backgroundColor: headerStyle.backgroundColor ? headerStyle.backgroundColor : colors.card,
@@ -62,7 +101,9 @@ export default function HeaderConfig({
62
101
  titleFontSize: headerTitleStyle.fontSize,
63
102
  titleFontWeight: headerTitleStyle.fontWeight,
64
103
  topInsetEnabled: headerTopInsetEnabled,
65
- translucent: headerTranslucent === true
104
+ translucent: headerTranslucent === true,
105
+ onAttached: handleAttached,
106
+ onDetached: handleDetached
66
107
  }, headerRight !== undefined ? /*#__PURE__*/React.createElement(ScreenStackHeaderRightView, null, headerRight({
67
108
  tintColor
68
109
  })) : null, backButtonImage !== undefined ? /*#__PURE__*/React.createElement(ScreenStackHeaderBackButtonImage, {
@@ -72,6 +113,6 @@ export default function HeaderConfig({
72
113
  tintColor
73
114
  })) : null, headerCenter !== undefined ? /*#__PURE__*/React.createElement(ScreenStackHeaderCenterView, null, headerCenter({
74
115
  tintColor
75
- })) : null, Platform.OS === 'ios' && searchBar !== undefined ? /*#__PURE__*/React.createElement(ScreenStackHeaderSearchBarView, null, /*#__PURE__*/React.createElement(SearchBar, searchBar)) : null);
116
+ })) : null, isSearchBarAvailableForCurrentPlatform && processedSearchBarOptions !== undefined ? /*#__PURE__*/React.createElement(ScreenStackHeaderSearchBarView, null, /*#__PURE__*/React.createElement(SearchBar, processedSearchBarOptions)) : null);
76
117
  }
77
118
  //# sourceMappingURL=HeaderConfig.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["HeaderConfig.tsx"],"names":["useTheme","React","Platform","ScreenStackHeaderBackButtonImage","ScreenStackHeaderCenterView","ScreenStackHeaderConfig","ScreenStackHeaderLeftView","ScreenStackHeaderRightView","ScreenStackHeaderSearchBarView","SearchBar","processFonts","HeaderConfig","backButtonImage","backButtonInCustomView","direction","disableBackButtonMenu","headerBackTitle","headerBackTitleStyle","headerBackTitleVisible","headerCenter","headerHideBackButton","headerHideShadow","headerLargeStyle","headerLargeTitle","headerLargeTitleHideShadow","headerLargeTitleStyle","headerLeft","headerRight","headerShown","headerStyle","headerTintColor","headerTitle","headerTitleStyle","headerTopInsetEnabled","headerTranslucent","route","searchBar","title","colors","tintColor","primary","backTitleFontFamily","largeTitleFontFamily","titleFontFamily","fontFamily","backgroundColor","card","fontSize","blurEffect","color","fontWeight","undefined","name","text","OS"],"mappings":"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","sourcesContent":["import { Route, useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport { Platform } from 'react-native';\nimport {\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderConfig,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderRightView,\n ScreenStackHeaderSearchBarView,\n SearchBar,\n} from 'react-native-screens';\nimport { NativeStackNavigationOptions } from '../types';\nimport { processFonts } from './FontProcessor';\n\ntype Props = NativeStackNavigationOptions & {\n route: Route<string>;\n};\n\nexport default function HeaderConfig({\n backButtonImage,\n backButtonInCustomView,\n direction,\n disableBackButtonMenu,\n headerBackTitle,\n headerBackTitleStyle = {},\n headerBackTitleVisible = true,\n headerCenter,\n headerHideBackButton,\n headerHideShadow,\n headerLargeStyle = {},\n headerLargeTitle,\n headerLargeTitleHideShadow,\n headerLargeTitleStyle = {},\n headerLeft,\n headerRight,\n headerShown,\n headerStyle = {},\n headerTintColor,\n headerTitle,\n headerTitleStyle = {},\n headerTopInsetEnabled = true,\n headerTranslucent,\n route,\n searchBar,\n title,\n}: Props): JSX.Element {\n const { colors } = useTheme();\n const tintColor = headerTintColor ?? colors.primary;\n\n const [\n backTitleFontFamily,\n largeTitleFontFamily,\n titleFontFamily,\n ] = processFonts([\n headerBackTitleStyle.fontFamily,\n headerLargeTitleStyle.fontFamily,\n headerTitleStyle.fontFamily,\n ]);\n\n return (\n <ScreenStackHeaderConfig\n backButtonInCustomView={backButtonInCustomView}\n backgroundColor={\n headerStyle.backgroundColor ? headerStyle.backgroundColor : colors.card\n }\n backTitle={headerBackTitleVisible ? headerBackTitle : ' '}\n backTitleFontFamily={backTitleFontFamily}\n backTitleFontSize={headerBackTitleStyle.fontSize}\n blurEffect={headerStyle.blurEffect}\n color={tintColor}\n direction={direction}\n disableBackButtonMenu={disableBackButtonMenu}\n hidden={headerShown === false}\n hideBackButton={headerHideBackButton}\n hideShadow={headerHideShadow}\n largeTitle={headerLargeTitle}\n largeTitleBackgroundColor={headerLargeStyle.backgroundColor}\n largeTitleColor={headerLargeTitleStyle.color}\n largeTitleFontFamily={largeTitleFontFamily}\n largeTitleFontSize={headerLargeTitleStyle.fontSize}\n largeTitleFontWeight={headerLargeTitleStyle.fontWeight}\n largeTitleHideShadow={headerLargeTitleHideShadow}\n title={\n headerTitle !== undefined\n ? headerTitle\n : title !== undefined\n ? title\n : route.name\n }\n titleColor={\n headerTitleStyle.color !== undefined\n ? headerTitleStyle.color\n : headerTintColor !== undefined\n ? headerTintColor\n : colors.text\n }\n titleFontFamily={titleFontFamily}\n titleFontSize={headerTitleStyle.fontSize}\n titleFontWeight={headerTitleStyle.fontWeight}\n topInsetEnabled={headerTopInsetEnabled}\n translucent={headerTranslucent === true}>\n {headerRight !== undefined ? (\n <ScreenStackHeaderRightView>\n {headerRight({ tintColor })}\n </ScreenStackHeaderRightView>\n ) : null}\n {backButtonImage !== undefined ? (\n <ScreenStackHeaderBackButtonImage\n key=\"backImage\"\n source={backButtonImage}\n />\n ) : null}\n {headerLeft !== undefined ? (\n <ScreenStackHeaderLeftView>\n {headerLeft({ tintColor })}\n </ScreenStackHeaderLeftView>\n ) : null}\n {headerCenter !== undefined ? (\n <ScreenStackHeaderCenterView>\n {headerCenter({ tintColor })}\n </ScreenStackHeaderCenterView>\n ) : null}\n {Platform.OS === 'ios' && searchBar !== undefined ? (\n <ScreenStackHeaderSearchBarView>\n <SearchBar {...searchBar} />\n </ScreenStackHeaderSearchBarView>\n ) : null}\n </ScreenStackHeaderConfig>\n );\n}\n"]}
1
+ {"version":3,"sources":["HeaderConfig.tsx"],"names":["useTheme","React","Platform","ScreenStackHeaderBackButtonImage","ScreenStackHeaderCenterView","ScreenStackHeaderConfig","ScreenStackHeaderLeftView","ScreenStackHeaderRightView","ScreenStackHeaderSearchBarView","SearchBar","isSearchBarAvailableForCurrentPlatform","executeNativeBackPress","useBackPressSubscription","processFonts","HeaderConfig","backButtonImage","backButtonInCustomView","direction","disableBackButtonMenu","headerBackTitle","headerBackTitleStyle","headerBackTitleVisible","headerCenter","headerHideBackButton","headerHideShadow","headerLargeStyle","headerLargeTitle","headerLargeTitleHideShadow","headerLargeTitleStyle","headerLeft","headerRight","headerShown","headerStyle","headerTintColor","headerTitle","headerTitleStyle","headerTopInsetEnabled","headerTranslucent","route","searchBar","title","colors","tintColor","primary","handleAttached","handleDetached","clearSubscription","createSubscription","onBackPress","isDisabled","disableBackButtonOverride","backTitleFontFamily","largeTitleFontFamily","titleFontFamily","fontFamily","useEffect","processedSearchBarOptions","useMemo","OS","onFocus","args","onClose","backgroundColor","card","fontSize","blurEffect","color","fontWeight","undefined","name","text"],"mappings":"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","sourcesContent":["import { Route, useTheme } from '@react-navigation/native';\nimport * as React from 'react';\nimport { Platform } from 'react-native';\nimport {\n ScreenStackHeaderBackButtonImage,\n ScreenStackHeaderCenterView,\n ScreenStackHeaderConfig,\n ScreenStackHeaderLeftView,\n ScreenStackHeaderRightView,\n ScreenStackHeaderSearchBarView,\n SearchBar,\n SearchBarProps,\n isSearchBarAvailableForCurrentPlatform,\n executeNativeBackPress,\n} from 'react-native-screens';\nimport { NativeStackNavigationOptions } from '../types';\nimport { useBackPressSubscription } from '../utils/useBackPressSubscription';\nimport { processFonts } from './FontProcessor';\n\ntype Props = NativeStackNavigationOptions & {\n route: Route<string>;\n};\n\nexport default function HeaderConfig({\n backButtonImage,\n backButtonInCustomView,\n direction,\n disableBackButtonMenu,\n headerBackTitle,\n headerBackTitleStyle = {},\n headerBackTitleVisible = true,\n headerCenter,\n headerHideBackButton,\n headerHideShadow,\n headerLargeStyle = {},\n headerLargeTitle,\n headerLargeTitleHideShadow,\n headerLargeTitleStyle = {},\n headerLeft,\n headerRight,\n headerShown,\n headerStyle = {},\n headerTintColor,\n headerTitle,\n headerTitleStyle = {},\n headerTopInsetEnabled = true,\n headerTranslucent,\n route,\n searchBar,\n title,\n}: Props): JSX.Element {\n const { colors } = useTheme();\n const tintColor = headerTintColor ?? colors.primary;\n\n // We need to use back press subscription here to override back button behavior on JS side.\n // Because screens are usually used with react-navigation and this library overrides back button\n // we need to handle it first in case when search bar is open\n const {\n handleAttached,\n handleDetached,\n clearSubscription,\n createSubscription,\n } = useBackPressSubscription({\n onBackPress: executeNativeBackPress,\n isDisabled: !searchBar || !!searchBar.disableBackButtonOverride,\n });\n\n const [\n backTitleFontFamily,\n largeTitleFontFamily,\n titleFontFamily,\n ] = processFonts([\n headerBackTitleStyle.fontFamily,\n headerLargeTitleStyle.fontFamily,\n headerTitleStyle.fontFamily,\n ]);\n\n // We want to clear clearSubscription only when components unmounts or search bar changes\n React.useEffect(() => clearSubscription, [searchBar]);\n\n const processedSearchBarOptions = React.useMemo(() => {\n if (\n Platform.OS === 'android' &&\n searchBar &&\n !searchBar.disableBackButtonOverride\n ) {\n const onFocus: SearchBarProps['onFocus'] = (...args) => {\n createSubscription();\n searchBar.onFocus?.(...args);\n };\n const onClose: SearchBarProps['onClose'] = (...args) => {\n clearSubscription();\n searchBar.onClose?.(...args);\n };\n\n return { ...searchBar, onFocus, onClose };\n }\n return searchBar;\n }, [searchBar, createSubscription, clearSubscription]);\n\n return (\n <ScreenStackHeaderConfig\n backButtonInCustomView={backButtonInCustomView}\n backgroundColor={\n headerStyle.backgroundColor ? headerStyle.backgroundColor : colors.card\n }\n backTitle={headerBackTitleVisible ? headerBackTitle : ' '}\n backTitleFontFamily={backTitleFontFamily}\n backTitleFontSize={headerBackTitleStyle.fontSize}\n blurEffect={headerStyle.blurEffect}\n color={tintColor}\n direction={direction}\n disableBackButtonMenu={disableBackButtonMenu}\n hidden={headerShown === false}\n hideBackButton={headerHideBackButton}\n hideShadow={headerHideShadow}\n largeTitle={headerLargeTitle}\n largeTitleBackgroundColor={headerLargeStyle.backgroundColor}\n largeTitleColor={headerLargeTitleStyle.color}\n largeTitleFontFamily={largeTitleFontFamily}\n largeTitleFontSize={headerLargeTitleStyle.fontSize}\n largeTitleFontWeight={headerLargeTitleStyle.fontWeight}\n largeTitleHideShadow={headerLargeTitleHideShadow}\n title={\n headerTitle !== undefined\n ? headerTitle\n : title !== undefined\n ? title\n : route.name\n }\n titleColor={\n headerTitleStyle.color !== undefined\n ? headerTitleStyle.color\n : headerTintColor !== undefined\n ? headerTintColor\n : colors.text\n }\n titleFontFamily={titleFontFamily}\n titleFontSize={headerTitleStyle.fontSize}\n titleFontWeight={headerTitleStyle.fontWeight}\n topInsetEnabled={headerTopInsetEnabled}\n translucent={headerTranslucent === true}\n onAttached={handleAttached}\n onDetached={handleDetached}>\n {headerRight !== undefined ? (\n <ScreenStackHeaderRightView>\n {headerRight({ tintColor })}\n </ScreenStackHeaderRightView>\n ) : null}\n {backButtonImage !== undefined ? (\n <ScreenStackHeaderBackButtonImage\n key=\"backImage\"\n source={backButtonImage}\n />\n ) : null}\n {headerLeft !== undefined ? (\n <ScreenStackHeaderLeftView>\n {headerLeft({ tintColor })}\n </ScreenStackHeaderLeftView>\n ) : null}\n {headerCenter !== undefined ? (\n <ScreenStackHeaderCenterView>\n {headerCenter({ tintColor })}\n </ScreenStackHeaderCenterView>\n ) : null}\n {isSearchBarAvailableForCurrentPlatform &&\n processedSearchBarOptions !== undefined ? (\n <ScreenStackHeaderSearchBarView>\n <SearchBar {...processedSearchBarOptions} />\n </ScreenStackHeaderSearchBarView>\n ) : null}\n </ScreenStackHeaderConfig>\n );\n}\n"]}
@@ -0,0 +1,40 @@
1
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+
3
+ import React from 'react';
4
+ import { Platform } from 'react-native';
5
+ import { Screen } from 'react-native-screens'; // @ts-ignore file to be used only if `react-native-reanimated` available in the project
6
+
7
+ import Animated, { useEvent, useSharedValue } from 'react-native-reanimated';
8
+ import ReanimatedTransitionProgressContext from './ReanimatedTransitionProgressContext';
9
+ const AnimatedScreen = Animated.createAnimatedComponent(Screen);
10
+ const ReanimatedNativeStackScreen = /*#__PURE__*/React.forwardRef((props, ref) => {
11
+ const {
12
+ children,
13
+ ...rest
14
+ } = props;
15
+ const progress = useSharedValue(0);
16
+ const closing = useSharedValue(0);
17
+ const goingForward = useSharedValue(0);
18
+ return /*#__PURE__*/React.createElement(AnimatedScreen // @ts-ignore some problems with ref and onTransitionProgressReanimated being "fake" prop for parsing of `useEvent` return value
19
+ , _extends({
20
+ ref: ref,
21
+ onTransitionProgressReanimated: useEvent(event => {
22
+ 'worklet';
23
+
24
+ progress.value = event.progress;
25
+ closing.value = event.closing;
26
+ goingForward.value = event.goingForward;
27
+ }, [// This should not be necessary, but is not properly managed by `react-native-reanimated`
28
+ // @ts-ignore wrong type
29
+ Platform.OS === 'android' ? 'onTransitionProgress' : 'topTransitionProgress'])
30
+ }, rest), /*#__PURE__*/React.createElement(ReanimatedTransitionProgressContext.Provider, {
31
+ value: {
32
+ progress: progress,
33
+ closing: closing,
34
+ goingForward: goingForward
35
+ }
36
+ }, children));
37
+ });
38
+ ReanimatedNativeStackScreen.displayName = 'ReanimatedNativeStackScreen';
39
+ export default ReanimatedNativeStackScreen;
40
+ //# sourceMappingURL=ReanimatedNativeStackScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ReanimatedNativeStackScreen.tsx"],"names":["React","Platform","Screen","Animated","useEvent","useSharedValue","ReanimatedTransitionProgressContext","AnimatedScreen","createAnimatedComponent","ReanimatedNativeStackScreen","forwardRef","props","ref","children","rest","progress","closing","goingForward","event","value","OS","displayName"],"mappings":";;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,QAAT,QAAyB,cAAzB;AACA,SACEC,MADF,QAIO,sBAJP,C,CAMA;;AACA,OAAOC,QAAP,IAAmBC,QAAnB,EAA6BC,cAA7B,QAAmD,yBAAnD;AACA,OAAOC,mCAAP,MAAgD,uCAAhD;AAEA,MAAMC,cAAc,GAAGJ,QAAQ,CAACK,uBAAT,CACpBN,MADoB,CAAvB;AAIA,MAAMO,2BAA2B,gBAAGT,KAAK,CAACU,UAAN,CAGlC,CAACC,KAAD,EAAQC,GAAR,KAAgB;AAChB,QAAM;AAAEC,IAAAA,QAAF;AAAY,OAAGC;AAAf,MAAwBH,KAA9B;AAEA,QAAMI,QAAQ,GAAGV,cAAc,CAAC,CAAD,CAA/B;AACA,QAAMW,OAAO,GAAGX,cAAc,CAAC,CAAD,CAA9B;AACA,QAAMY,YAAY,GAAGZ,cAAc,CAAC,CAAD,CAAnC;AAEA,sBACE,oBAAC,cAAD,CACE;AADF;AAEE,IAAA,GAAG,EAAEO,GAFP;AAGE,IAAA,8BAA8B,EAAER,QAAQ,CACrCc,KAAD,IAAwC;AACtC;;AACAH,MAAAA,QAAQ,CAACI,KAAT,GAAiBD,KAAK,CAACH,QAAvB;AACAC,MAAAA,OAAO,CAACG,KAAR,GAAgBD,KAAK,CAACF,OAAtB;AACAC,MAAAA,YAAY,CAACE,KAAb,GAAqBD,KAAK,CAACD,YAA3B;AACD,KANqC,EAOtC,CACE;AACA;AACAhB,IAAAA,QAAQ,CAACmB,EAAT,KAAgB,SAAhB,GACI,sBADJ,GAEI,uBALN,CAPsC;AAH1C,KAkBMN,IAlBN,gBAmBE,oBAAC,mCAAD,CAAqC,QAArC;AACE,IAAA,KAAK,EAAE;AACLC,MAAAA,QAAQ,EAAEA,QADL;AAELC,MAAAA,OAAO,EAAEA,OAFJ;AAGLC,MAAAA,YAAY,EAAEA;AAHT;AADT,KAMGJ,QANH,CAnBF,CADF;AA8BD,CAxCmC,CAApC;AA0CAJ,2BAA2B,CAACY,WAA5B,GAA0C,6BAA1C;AAEA,eAAeZ,2BAAf","sourcesContent":["import React from 'react';\nimport { Platform } from 'react-native';\nimport {\n Screen,\n ScreenProps,\n TransitionProgressEventType,\n} from 'react-native-screens';\n\n// @ts-ignore file to be used only if `react-native-reanimated` available in the project\nimport Animated, { useEvent, useSharedValue } from 'react-native-reanimated';\nimport ReanimatedTransitionProgressContext from './ReanimatedTransitionProgressContext';\n\nconst AnimatedScreen = Animated.createAnimatedComponent(\n (Screen as unknown) as React.ComponentClass\n);\n\nconst ReanimatedNativeStackScreen = React.forwardRef<\n typeof AnimatedScreen,\n ScreenProps\n>((props, ref) => {\n const { children, ...rest } = props;\n\n const progress = useSharedValue(0);\n const closing = useSharedValue(0);\n const goingForward = useSharedValue(0);\n\n return (\n <AnimatedScreen\n // @ts-ignore some problems with ref and onTransitionProgressReanimated being \"fake\" prop for parsing of `useEvent` return value\n ref={ref}\n onTransitionProgressReanimated={useEvent(\n (event: TransitionProgressEventType) => {\n 'worklet';\n progress.value = event.progress;\n closing.value = event.closing;\n goingForward.value = event.goingForward;\n },\n [\n // This should not be necessary, but is not properly managed by `react-native-reanimated`\n // @ts-ignore wrong type\n Platform.OS === 'android'\n ? 'onTransitionProgress'\n : 'topTransitionProgress',\n ]\n )}\n {...rest}>\n <ReanimatedTransitionProgressContext.Provider\n value={{\n progress: progress,\n closing: closing,\n goingForward: goingForward,\n }}>\n {children}\n </ReanimatedTransitionProgressContext.Provider>\n </AnimatedScreen>\n );\n});\n\nReanimatedNativeStackScreen.displayName = 'ReanimatedNativeStackScreen';\n\nexport default ReanimatedNativeStackScreen;\n"]}
@@ -1,83 +1,16 @@
1
1
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
2
 
3
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
-
5
3
  import React from 'react';
6
- import { Platform } from 'react-native';
7
- import { Screen, ScreenContext } from 'react-native-screens'; // @ts-ignore file to be used only if `react-native-reanimated` available in the project
4
+ import { Screen } from 'react-native-screens'; // @ts-ignore file to be used only if `react-native-reanimated` available in the project
8
5
 
9
- import Animated, { useEvent, useSharedValue } from 'react-native-reanimated';
10
- import ReanimatedTransitionProgressContext from './ReanimatedTransitionProgressContext';
6
+ import Animated from 'react-native-reanimated';
11
7
  const AnimatedScreen = Animated.createAnimatedComponent(Screen);
12
-
13
- class ReanimatedScreenWrapper extends React.Component {
14
- constructor(...args) {
15
- super(...args);
16
-
17
- _defineProperty(this, "ref", null);
18
-
19
- _defineProperty(this, "setRef", ref => {
20
- var _this$props$onCompone, _this$props;
21
-
22
- this.ref = ref;
23
- (_this$props$onCompone = (_this$props = this.props).onComponentRef) === null || _this$props$onCompone === void 0 ? void 0 : _this$props$onCompone.call(_this$props, ref);
24
- });
25
- }
26
-
27
- setNativeProps(props) {
28
- var _this$ref;
29
-
30
- (_this$ref = this.ref) === null || _this$ref === void 0 ? void 0 : _this$ref.setNativeProps(props);
31
- }
32
-
33
- render() {
34
- return /*#__PURE__*/React.createElement(ReanimatedScreen, _extends({}, this.props, {
35
- // @ts-ignore some problems with ref
36
- ref: this.setRef
37
- }));
38
- }
39
-
40
- }
41
-
42
8
  const ReanimatedScreen = /*#__PURE__*/React.forwardRef((props, ref) => {
43
- const {
44
- children,
45
- ...rest
46
- } = props;
47
- const progress = useSharedValue(0);
48
- const closing = useSharedValue(0);
49
- const goingForward = useSharedValue(0);
50
9
  return /*#__PURE__*/React.createElement(AnimatedScreen // @ts-ignore some problems with ref and onTransitionProgressReanimated being "fake" prop for parsing of `useEvent` return value
51
10
  , _extends({
52
- ref: ref // ReanimatedScreen.tsx should only be used by Screens of native-stack, but it always better to check
53
- ,
54
- onTransitionProgressReanimated: !props.isNativeStack ? undefined : useEvent(event => {
55
- 'worklet';
56
-
57
- progress.value = event.progress;
58
- closing.value = event.closing;
59
- goingForward.value = event.goingForward;
60
- }, [// This should not be necessary, but is not properly managed by `react-native-reanimated`
61
- // @ts-ignore wrong type
62
- Platform.OS === 'android' ? 'onTransitionProgress' : 'topTransitionProgress'])
63
- }, rest), !props.isNativeStack ? // see comment of this prop in types.tsx for information why it is needed
64
- children : /*#__PURE__*/React.createElement(ReanimatedTransitionProgressContext.Provider, {
65
- value: {
66
- progress: progress,
67
- closing: closing,
68
- goingForward: goingForward
69
- }
70
- }, children));
71
- }); // used to silence error "Component definition is missing display name"
72
-
11
+ ref: ref
12
+ }, props));
13
+ });
73
14
  ReanimatedScreen.displayName = 'ReanimatedScreen';
74
- export default function ReanimatedScreenProvider(props) {
75
- return (
76
- /*#__PURE__*/
77
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
78
- React.createElement(ScreenContext.Provider, {
79
- value: ReanimatedScreenWrapper
80
- }, props.children)
81
- );
82
- }
15
+ export default ReanimatedScreen;
83
16
  //# sourceMappingURL=ReanimatedScreen.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["ReanimatedScreen.tsx"],"names":["React","Platform","Screen","ScreenContext","Animated","useEvent","useSharedValue","ReanimatedTransitionProgressContext","AnimatedScreen","createAnimatedComponent","ReanimatedScreenWrapper","Component","ref","props","onComponentRef","setNativeProps","render","setRef","ReanimatedScreen","forwardRef","children","rest","progress","closing","goingForward","isNativeStack","undefined","event","value","OS","displayName","ReanimatedScreenProvider"],"mappings":";;;;AAAA,OAAOA,KAAP,MAAyC,OAAzC;AACA,SAASC,QAAT,QAA+B,cAA/B;AACA,SACEC,MADF,EAGEC,aAHF,QAKO,sBALP,C,CAOA;;AACA,OAAOC,QAAP,IAAmBC,QAAnB,EAA6BC,cAA7B,QAAmD,yBAAnD;AACA,OAAOC,mCAAP,MAAgD,uCAAhD;AAEA,MAAMC,cAAc,GAAGJ,QAAQ,CAACK,uBAAT,CACpBP,MADoB,CAAvB;;AAIA,MAAMQ,uBAAN,SAAsCV,KAAK,CAACW,SAA5C,CAAmE;AAAA;AAAA;;AAAA,iCACb,IADa;;AAAA,oCAOvDC,GAAD,IAAqD;AAAA;;AAC5D,WAAKA,GAAL,GAAWA,GAAX;AACA,mDAAKC,KAAL,EAAWC,cAAX,kGAA4BF,GAA5B;AACD,KAVgE;AAAA;;AAGjEG,EAAAA,cAAc,CAACF,KAAD,EAA2B;AAAA;;AACvC,sBAAKD,GAAL,wDAAUG,cAAV,CAAyBF,KAAzB;AACD;;AAODG,EAAAA,MAAM,GAAG;AACP,wBACE,oBAAC,gBAAD,eACM,KAAKH,KADX;AAEE;AACA,MAAA,GAAG,EAAE,KAAKI;AAHZ,OADF;AAOD;;AApBgE;;AAuBnE,MAAMC,gBAAgB,gBAAGlB,KAAK,CAACmB,UAAN,CACvB,CAACN,KAAD,EAAQD,GAAR,KAAgB;AACd,QAAM;AAAEQ,IAAAA,QAAF;AAAY,OAAGC;AAAf,MAAwBR,KAA9B;AAEA,QAAMS,QAAQ,GAAGhB,cAAc,CAAC,CAAD,CAA/B;AACA,QAAMiB,OAAO,GAAGjB,cAAc,CAAC,CAAD,CAA9B;AACA,QAAMkB,YAAY,GAAGlB,cAAc,CAAC,CAAD,CAAnC;AAEA,sBACE,oBAAC,cAAD,CACE;AADF;AAEE,IAAA,GAAG,EAAEM,GAFP,CAGE;AAHF;AAIE,IAAA,8BAA8B,EAC5B,CAACC,KAAK,CAACY,aAAP,GACIC,SADJ,GAEIrB,QAAQ,CACLsB,KAAD,IAAwC;AACtC;;AACAL,MAAAA,QAAQ,CAACM,KAAT,GAAiBD,KAAK,CAACL,QAAvB;AACAC,MAAAA,OAAO,CAACK,KAAR,GAAgBD,KAAK,CAACJ,OAAtB;AACAC,MAAAA,YAAY,CAACI,KAAb,GAAqBD,KAAK,CAACH,YAA3B;AACD,KANK,EAON,CACE;AACA;AACAvB,IAAAA,QAAQ,CAAC4B,EAAT,KAAgB,SAAhB,GACI,sBADJ,GAEI,uBALN,CAPM;AAPhB,KAuBMR,IAvBN,GAwBG,CAACR,KAAK,CAACY,aAAP,GAAyB;AACxBL,EAAAA,QADD,gBAGC,oBAAC,mCAAD,CAAqC,QAArC;AACE,IAAA,KAAK,EAAE;AACLE,MAAAA,QAAQ,EAAEA,QADL;AAELC,MAAAA,OAAO,EAAEA,OAFJ;AAGLC,MAAAA,YAAY,EAAEA;AAHT;AADT,KAMGJ,QANH,CA3BJ,CADF;AAuCD,CA/CsB,CAAzB,C,CAkDA;;AACAF,gBAAgB,CAACY,WAAjB,GAA+B,kBAA/B;AAEA,eAAe,SAASC,wBAAT,CACblB,KADa,EAEb;AACA;AAAA;AACE;AACA,wBAAC,aAAD,CAAe,QAAf;AAAwB,MAAA,KAAK,EAAEH;AAA/B,OACGG,KAAK,CAACO,QADT;AAFF;AAMD","sourcesContent":["import React, { PropsWithChildren } from 'react';\nimport { Platform, View } from 'react-native';\nimport {\n Screen,\n ScreenProps,\n ScreenContext,\n TransitionProgressEventType,\n} from 'react-native-screens';\n\n// @ts-ignore file to be used only if `react-native-reanimated` available in the project\nimport Animated, { useEvent, useSharedValue } from 'react-native-reanimated';\nimport ReanimatedTransitionProgressContext from './ReanimatedTransitionProgressContext';\n\nconst AnimatedScreen = Animated.createAnimatedComponent(\n (Screen as unknown) as React.ComponentClass\n);\n\nclass ReanimatedScreenWrapper extends React.Component<ScreenProps> {\n private ref: React.ElementRef<typeof View> | null = null;\n\n setNativeProps(props: ScreenProps): void {\n this.ref?.setNativeProps(props);\n }\n\n setRef = (ref: React.ElementRef<typeof View> | null): void => {\n this.ref = ref;\n this.props.onComponentRef?.(ref);\n };\n\n render() {\n return (\n <ReanimatedScreen\n {...this.props}\n // @ts-ignore some problems with ref\n ref={this.setRef}\n />\n );\n }\n}\n\nconst ReanimatedScreen = React.forwardRef<typeof AnimatedScreen, ScreenProps>(\n (props, ref) => {\n const { children, ...rest } = props;\n\n const progress = useSharedValue(0);\n const closing = useSharedValue(0);\n const goingForward = useSharedValue(0);\n\n return (\n <AnimatedScreen\n // @ts-ignore some problems with ref and onTransitionProgressReanimated being \"fake\" prop for parsing of `useEvent` return value\n ref={ref}\n // ReanimatedScreen.tsx should only be used by Screens of native-stack, but it always better to check\n onTransitionProgressReanimated={\n !props.isNativeStack\n ? undefined\n : useEvent(\n (event: TransitionProgressEventType) => {\n 'worklet';\n progress.value = event.progress;\n closing.value = event.closing;\n goingForward.value = event.goingForward;\n },\n [\n // This should not be necessary, but is not properly managed by `react-native-reanimated`\n // @ts-ignore wrong type\n Platform.OS === 'android'\n ? 'onTransitionProgress'\n : 'topTransitionProgress',\n ]\n )\n }\n {...rest}>\n {!props.isNativeStack ? ( // see comment of this prop in types.tsx for information why it is needed\n children\n ) : (\n <ReanimatedTransitionProgressContext.Provider\n value={{\n progress: progress,\n closing: closing,\n goingForward: goingForward,\n }}>\n {children}\n </ReanimatedTransitionProgressContext.Provider>\n )}\n </AnimatedScreen>\n );\n }\n);\n\n// used to silence error \"Component definition is missing display name\"\nReanimatedScreen.displayName = 'ReanimatedScreen';\n\nexport default function ReanimatedScreenProvider(\n props: PropsWithChildren<unknown>\n) {\n return (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n <ScreenContext.Provider value={ReanimatedScreenWrapper as any}>\n {props.children}\n </ScreenContext.Provider>\n );\n}\n"]}
1
+ {"version":3,"sources":["ReanimatedScreen.tsx"],"names":["React","Screen","Animated","AnimatedScreen","createAnimatedComponent","ReanimatedScreen","forwardRef","props","ref","displayName"],"mappings":";;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,MAAT,QAAoC,sBAApC,C,CAEA;;AACA,OAAOC,QAAP,MAAqB,yBAArB;AAEA,MAAMC,cAAc,GAAGD,QAAQ,CAACE,uBAAT,CACpBH,MADoB,CAAvB;AAIA,MAAMI,gBAAgB,gBAAGL,KAAK,CAACM,UAAN,CACvB,CAACC,KAAD,EAAQC,GAAR,KAAgB;AACd,sBACE,oBAAC,cAAD,CACE;AADF;AAEE,IAAA,GAAG,EAAEA;AAFP,KAGMD,KAHN,EADF;AAOD,CATsB,CAAzB;AAYAF,gBAAgB,CAACI,WAAjB,GAA+B,kBAA/B;AAEA,eAAeJ,gBAAf","sourcesContent":["import React from 'react';\nimport { Screen, ScreenProps } from 'react-native-screens';\n\n// @ts-ignore file to be used only if `react-native-reanimated` available in the project\nimport Animated from 'react-native-reanimated';\n\nconst AnimatedScreen = Animated.createAnimatedComponent(\n (Screen as unknown) as React.ComponentClass\n);\n\nconst ReanimatedScreen = React.forwardRef<typeof AnimatedScreen, ScreenProps>(\n (props, ref) => {\n return (\n <AnimatedScreen\n // @ts-ignore some problems with ref and onTransitionProgressReanimated being \"fake\" prop for parsing of `useEvent` return value\n ref={ref}\n {...props}\n />\n );\n }\n);\n\nReanimatedScreen.displayName = 'ReanimatedScreen';\n\nexport default ReanimatedScreen;\n"]}
@@ -0,0 +1,49 @@
1
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
+
3
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
+
5
+ import React from 'react';
6
+ import { ScreenContext } from 'react-native-screens';
7
+ import ReanimatedNativeStackScreen from './ReanimatedNativeStackScreen';
8
+ import AnimatedScreen from './ReanimatedScreen';
9
+
10
+ class ReanimatedScreenWrapper extends React.Component {
11
+ constructor(...args) {
12
+ super(...args);
13
+
14
+ _defineProperty(this, "ref", null);
15
+
16
+ _defineProperty(this, "setRef", ref => {
17
+ var _this$props$onCompone, _this$props;
18
+
19
+ this.ref = ref;
20
+ (_this$props$onCompone = (_this$props = this.props).onComponentRef) === null || _this$props$onCompone === void 0 ? void 0 : _this$props$onCompone.call(_this$props, ref);
21
+ });
22
+ }
23
+
24
+ setNativeProps(props) {
25
+ var _this$ref;
26
+
27
+ (_this$ref = this.ref) === null || _this$ref === void 0 ? void 0 : _this$ref.setNativeProps(props);
28
+ }
29
+
30
+ render() {
31
+ const ReanimatedScreen = this.props.isNativeStack ? ReanimatedNativeStackScreen : AnimatedScreen;
32
+ return /*#__PURE__*/React.createElement(ReanimatedScreen, _extends({}, this.props, {
33
+ // @ts-ignore some problems with ref
34
+ ref: this.setRef
35
+ }));
36
+ }
37
+
38
+ }
39
+
40
+ export default function ReanimatedScreenProvider(props) {
41
+ return (
42
+ /*#__PURE__*/
43
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
44
+ React.createElement(ScreenContext.Provider, {
45
+ value: ReanimatedScreenWrapper
46
+ }, props.children)
47
+ );
48
+ }
49
+ //# sourceMappingURL=ReanimatedScreenProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["ReanimatedScreenProvider.tsx"],"names":["React","ScreenContext","ReanimatedNativeStackScreen","AnimatedScreen","ReanimatedScreenWrapper","Component","ref","props","onComponentRef","setNativeProps","render","ReanimatedScreen","isNativeStack","setRef","ReanimatedScreenProvider","children"],"mappings":";;;;AAAA,OAAOA,KAAP,MAAyC,OAAzC;AAEA,SAAsBC,aAAtB,QAA2C,sBAA3C;AACA,OAAOC,2BAAP,MAAwC,+BAAxC;AACA,OAAOC,cAAP,MAA2B,oBAA3B;;AAEA,MAAMC,uBAAN,SAAsCJ,KAAK,CAACK,SAA5C,CAAmE;AAAA;AAAA;;AAAA,iCACb,IADa;;AAAA,oCAOvDC,GAAD,IAAqD;AAAA;;AAC5D,WAAKA,GAAL,GAAWA,GAAX;AACA,mDAAKC,KAAL,EAAWC,cAAX,kGAA4BF,GAA5B;AACD,KAVgE;AAAA;;AAGjEG,EAAAA,cAAc,CAACF,KAAD,EAA2B;AAAA;;AACvC,sBAAKD,GAAL,wDAAUG,cAAV,CAAyBF,KAAzB;AACD;;AAODG,EAAAA,MAAM,GAAG;AACP,UAAMC,gBAAgB,GAAG,KAAKJ,KAAL,CAAWK,aAAX,GACrBV,2BADqB,GAErBC,cAFJ;AAGA,wBACE,oBAAC,gBAAD,eACM,KAAKI,KADX;AAEE;AACA,MAAA,GAAG,EAAE,KAAKM;AAHZ,OADF;AAOD;;AAvBgE;;AA0BnE,eAAe,SAASC,wBAAT,CACbP,KADa,EAEb;AACA;AAAA;AACE;AACA,wBAAC,aAAD,CAAe,QAAf;AAAwB,MAAA,KAAK,EAAEH;AAA/B,OACGG,KAAK,CAACQ,QADT;AAFF;AAMD","sourcesContent":["import React, { PropsWithChildren } from 'react';\nimport { View } from 'react-native';\nimport { ScreenProps, ScreenContext } from 'react-native-screens';\nimport ReanimatedNativeStackScreen from './ReanimatedNativeStackScreen';\nimport AnimatedScreen from './ReanimatedScreen';\n\nclass ReanimatedScreenWrapper extends React.Component<ScreenProps> {\n private ref: React.ElementRef<typeof View> | null = null;\n\n setNativeProps(props: ScreenProps): void {\n this.ref?.setNativeProps(props);\n }\n\n setRef = (ref: React.ElementRef<typeof View> | null): void => {\n this.ref = ref;\n this.props.onComponentRef?.(ref);\n };\n\n render() {\n const ReanimatedScreen = this.props.isNativeStack\n ? ReanimatedNativeStackScreen\n : AnimatedScreen;\n return (\n <ReanimatedScreen\n {...this.props}\n // @ts-ignore some problems with ref\n ref={this.setRef}\n />\n );\n }\n}\n\nexport default function ReanimatedScreenProvider(\n props: PropsWithChildren<unknown>\n) {\n return (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n <ScreenContext.Provider value={ReanimatedScreenWrapper as any}>\n {props.children}\n </ScreenContext.Provider>\n );\n}\n"]}
@@ -1,3 +1,3 @@
1
- export { default as ReanimatedScreenProvider } from './ReanimatedScreen';
1
+ export { default as ReanimatedScreenProvider } from './ReanimatedScreenProvider';
2
2
  export { default as useReanimatedTransitionProgress } from './useReanimatedTransitionProgress';
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["index.tsx"],"names":["default","ReanimatedScreenProvider","useReanimatedTransitionProgress"],"mappings":"AAAA,SAASA,OAAO,IAAIC,wBAApB,QAAoD,oBAApD;AACA,SAASD,OAAO,IAAIE,+BAApB,QAA2D,mCAA3D","sourcesContent":["export { default as ReanimatedScreenProvider } from './ReanimatedScreen';\nexport { default as useReanimatedTransitionProgress } from './useReanimatedTransitionProgress';\n"]}
1
+ {"version":3,"sources":["index.tsx"],"names":["default","ReanimatedScreenProvider","useReanimatedTransitionProgress"],"mappings":"AAAA,SAASA,OAAO,IAAIC,wBAApB,QAAoD,4BAApD;AACA,SAASD,OAAO,IAAIE,+BAApB,QAA2D,mCAA3D","sourcesContent":["export { default as ReanimatedScreenProvider } from './ReanimatedScreenProvider';\nexport { default as useReanimatedTransitionProgress } from './useReanimatedTransitionProgress';\n"]}
@@ -0,0 +1,8 @@
1
+ import { BackHandler, Platform } from 'react-native';
2
+ export const isSearchBarAvailableForCurrentPlatform = ['ios', 'android'].includes(Platform.OS);
3
+ export function executeNativeBackPress() {
4
+ // This function invokes the native back press event
5
+ BackHandler.exitApp();
6
+ return true;
7
+ }
8
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["utils.ts"],"names":["BackHandler","Platform","isSearchBarAvailableForCurrentPlatform","includes","OS","executeNativeBackPress","exitApp"],"mappings":"AAAA,SAASA,WAAT,EAAsBC,QAAtB,QAAsC,cAAtC;AAEA,OAAO,MAAMC,sCAAsC,GAAG,CACpD,KADoD,EAEpD,SAFoD,EAGpDC,QAHoD,CAG3CF,QAAQ,CAACG,EAHkC,CAA/C;AAKP,OAAO,SAASC,sBAAT,GAAkC;AACvC;AACAL,EAAAA,WAAW,CAACM,OAAZ;AACA,SAAO,IAAP;AACD","sourcesContent":["import { BackHandler, Platform } from 'react-native';\n\nexport const isSearchBarAvailableForCurrentPlatform = [\n 'ios',\n 'android',\n].includes(Platform.OS);\n\nexport function executeNativeBackPress() {\n // This function invokes the native back press event\n BackHandler.exitApp();\n return true;\n}\n"]}
@@ -3,8 +3,10 @@ import { Animated, View, ViewProps, ImageProps } from 'react-native';
3
3
  import { ScreenProps, ScreenContainerProps, ScreenStackProps, ScreenStackHeaderConfigProps, HeaderSubviewTypes, SearchBarProps } from './types';
4
4
  export * from './types';
5
5
  export { default as useTransitionProgress } from './useTransitionProgress';
6
+ export { isSearchBarAvailableForCurrentPlatform, executeNativeBackPress, } from './utils';
6
7
  export declare function enableScreens(shouldEnableScreens?: boolean): void;
7
8
  export declare function screensEnabled(): boolean;
9
+ export declare function enableFreeze(shouldEnableReactFreeze?: boolean): void;
8
10
  export declare class NativeScreen extends React.Component<ScreenProps> {
9
11
  render(): JSX.Element;
10
12
  }
@@ -253,8 +253,6 @@ export declare type NativeStackNavigationOptions = {
253
253
  screenOrientation?: ScreenProps['screenOrientation'];
254
254
  /**
255
255
  * Object in which you should pass props in order to render native iOS searchBar.
256
- *
257
- * @platform ios
258
256
  */
259
257
  searchBar?: SearchBarProps;
260
258
  /**
@@ -0,0 +1,16 @@
1
+ interface Args {
2
+ onBackPress: () => boolean;
3
+ isDisabled: boolean;
4
+ }
5
+ interface UseBackPressSubscription {
6
+ handleAttached: () => void;
7
+ handleDetached: () => void;
8
+ createSubscription: () => void;
9
+ clearSubscription: () => void;
10
+ }
11
+ /**
12
+ * This hook is an abstraction for keeping back press subscription
13
+ * logic in one place.
14
+ */
15
+ export declare function useBackPressSubscription({ onBackPress, isDisabled, }: Args): UseBackPressSubscription;
16
+ export {};
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import { ScreenProps } from 'react-native-screens';
3
+ import Animated from 'react-native-reanimated';
4
+ declare const ReanimatedNativeStackScreen: React.ForwardRefExoticComponent<Pick<ScreenProps, "children" | "active" | "activityState" | "customAnimationOnSwipe" | "enabled" | "isNativeStack" | "fullScreenSwipeEnabled" | "gestureEnabled" | "nativeBackButtonDismissalEnabled" | "onAppear" | "onComponentRef" | "onDisappear" | "onDismissed" | "onHeaderBackButtonClicked" | "onTransitionProgress" | "onWillAppear" | "onWillDisappear" | "replaceAnimation" | "screenOrientation" | "stackAnimation" | "stackPresentation" | "statusBarAnimation" | "statusBarColor" | "statusBarHidden" | "statusBarStyle" | "statusBarTranslucent" | "hitSlop" | "onLayout" | "pointerEvents" | "removeClippedSubviews" | "style" | "testID" | "nativeID" | "collapsable" | "needsOffscreenAlphaCompositing" | "renderToHardwareTextureAndroid" | "focusable" | "shouldRasterizeIOS" | "isTVSelectable" | "hasTVPreferredFocus" | "tvParallaxProperties" | "tvParallaxShiftDistanceX" | "tvParallaxShiftDistanceY" | "tvParallaxTiltAngle" | "tvParallaxMagnification" | "onStartShouldSetResponder" | "onMoveShouldSetResponder" | "onResponderEnd" | "onResponderGrant" | "onResponderReject" | "onResponderMove" | "onResponderRelease" | "onResponderStart" | "onResponderTerminationRequest" | "onResponderTerminate" | "onStartShouldSetResponderCapture" | "onMoveShouldSetResponderCapture" | "onTouchStart" | "onTouchMove" | "onTouchEnd" | "onTouchCancel" | "onTouchEndCapture" | "accessible" | "accessibilityActions" | "accessibilityLabel" | "accessibilityRole" | "accessibilityState" | "accessibilityHint" | "accessibilityValue" | "onAccessibilityAction" | "accessibilityComponentType" | "accessibilityLiveRegion" | "importantForAccessibility" | "accessibilityElementsHidden" | "accessibilityTraits" | "accessibilityViewIsModal" | "onAccessibilityEscape" | "onAccessibilityTap" | "onMagicTap" | "accessibilityIgnoresInvertColors"> & React.RefAttributes<React.ComponentClass<Animated.AnimateProps<{}>, any>>>;
5
+ export default ReanimatedNativeStackScreen;