react-native-acoustic-connect 19.0.9 → 19.0.28

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 (378) hide show
  1. package/CHANGELOG.md +91 -0
  2. package/ConnectConfig.example.json +1 -1
  3. package/README.md +390 -1
  4. package/android/build.gradle +86 -3
  5. package/android/config.gradle +137 -13
  6. package/android/src/main/assets/ConnectAdvancedConfig.json +1 -1
  7. package/android/src/main/java/com/acousticconnectrn/HybridAcousticConnectRN.kt +407 -34
  8. package/app.plugin.js +2 -2
  9. package/ios/AcousticConnectRNConfig.json +2 -2
  10. package/ios/ConnectRNParsing.swift +229 -0
  11. package/ios/HybridAcousticConnectRN.swift +290 -30
  12. package/lib/commonjs/TLTRN.js +116 -3
  13. package/lib/commonjs/TLTRN.js.map +1 -1
  14. package/lib/commonjs/components/Connect.js +145 -27
  15. package/lib/commonjs/components/Connect.js.map +1 -1
  16. package/lib/commonjs/index.js +3 -0
  17. package/lib/commonjs/index.js.map +1 -1
  18. package/lib/module/TLTRN.js +116 -3
  19. package/lib/module/TLTRN.js.map +1 -1
  20. package/lib/module/components/Connect.js +146 -28
  21. package/lib/module/components/Connect.js.map +1 -1
  22. package/lib/module/index.js +5 -0
  23. package/lib/module/index.js.map +1 -1
  24. package/lib/typescript/src/TLTRN.d.ts +85 -1
  25. package/lib/typescript/src/TLTRN.d.ts.map +1 -1
  26. package/lib/typescript/src/components/Connect.d.ts.map +1 -1
  27. package/lib/typescript/src/index.d.ts +1 -0
  28. package/lib/typescript/src/index.d.ts.map +1 -1
  29. package/lib/typescript/src/specs/react-native-acoustic-connect.nitro.d.ts +178 -10
  30. package/lib/typescript/src/specs/react-native-acoustic-connect.nitro.d.ts.map +1 -1
  31. package/nitrogen/generated/android/c++/JHybridAcousticConnectRNSpec.cpp +5 -9
  32. package/nitrogen/generated/android/c++/JHybridAcousticConnectRNSpec.hpp +1 -1
  33. package/nitrogen/generated/android/kotlin/com/margelo/nitro/acousticconnectrn/HybridAcousticConnectRNSpec.kt +2 -1
  34. package/nitrogen/generated/ios/AcousticConnectRN-Swift-Cxx-Umbrella.hpp +1 -0
  35. package/nitrogen/generated/ios/c++/HybridAcousticConnectRNSpecSwift.hpp +2 -1
  36. package/nitrogen/generated/ios/swift/HybridAcousticConnectRNSpec.swift +1 -1
  37. package/nitrogen/generated/ios/swift/HybridAcousticConnectRNSpec_cxx.swift +2 -25
  38. package/nitrogen/generated/shared/c++/HybridAcousticConnectRNSpec.hpp +2 -1
  39. package/package.json +4 -7
  40. package/plugin/build/withConnectAndroidConfig.d.ts +2 -2
  41. package/plugin/build/withConnectAndroidConfig.js +2 -2
  42. package/plugin/build/withConnectIosSigning.d.ts +1 -1
  43. package/plugin/build/withConnectIosSigning.js +1 -1
  44. package/plugin/src/withConnectAndroidConfig.ts +2 -2
  45. package/plugin/src/withConnectIosSigning.ts +1 -1
  46. package/scripts/gradleParser.js +1 -1
  47. package/src/TLTRN.ts +125 -4
  48. package/src/components/Connect.tsx +150 -27
  49. package/src/index.ts +5 -0
  50. package/src/specs/react-native-acoustic-connect.nitro.ts +180 -10
  51. package/Examples/SampleUI/.bundle/config +0 -2
  52. package/Examples/SampleUI/.detoxrc.js +0 -83
  53. package/Examples/SampleUI/.eslintrc.js +0 -4
  54. package/Examples/SampleUI/.prettierrc.js +0 -7
  55. package/Examples/SampleUI/.watchmanconfig +0 -1
  56. package/Examples/SampleUI/App.js +0 -1
  57. package/Examples/SampleUI/Gemfile +0 -10
  58. package/Examples/SampleUI/Gemfile.lock +0 -121
  59. package/Examples/SampleUI/README.md +0 -79
  60. package/Examples/SampleUI/__tests__/App.test.tsx +0 -17
  61. package/Examples/SampleUI/android/app/build.gradle +0 -129
  62. package/Examples/SampleUI/android/app/debug.keystore +0 -0
  63. package/Examples/SampleUI/android/app/proguard-rules.pro +0 -10
  64. package/Examples/SampleUI/android/app/src/debug/AndroidManifest.xml +0 -9
  65. package/Examples/SampleUI/android/app/src/main/AndroidManifest.xml +0 -31
  66. package/Examples/SampleUI/android/app/src/main/java/com/sampleui/MainActivity.kt +0 -30
  67. package/Examples/SampleUI/android/app/src/main/java/com/sampleui/MainApplication.kt +0 -53
  68. package/Examples/SampleUI/android/app/src/main/res/drawable/rn_edit_text_material.xml +0 -37
  69. package/Examples/SampleUI/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  70. package/Examples/SampleUI/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  71. package/Examples/SampleUI/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  72. package/Examples/SampleUI/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  73. package/Examples/SampleUI/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  74. package/Examples/SampleUI/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  75. package/Examples/SampleUI/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  76. package/Examples/SampleUI/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  77. package/Examples/SampleUI/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  78. package/Examples/SampleUI/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  79. package/Examples/SampleUI/android/app/src/main/res/values/strings.xml +0 -3
  80. package/Examples/SampleUI/android/app/src/main/res/values/styles.xml +0 -9
  81. package/Examples/SampleUI/android/build.gradle +0 -21
  82. package/Examples/SampleUI/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  83. package/Examples/SampleUI/android/gradle/wrapper/gradle-wrapper.properties +0 -7
  84. package/Examples/SampleUI/android/gradle.properties +0 -39
  85. package/Examples/SampleUI/android/gradlew +0 -252
  86. package/Examples/SampleUI/android/gradlew.bat +0 -94
  87. package/Examples/SampleUI/android/settings.gradle +0 -21
  88. package/Examples/SampleUI/app.json +0 -51
  89. package/Examples/SampleUI/assets/fonts/Abel-Regular.ttf +0 -0
  90. package/Examples/SampleUI/assets/fonts/NotoSans-Regular.ttf +0 -0
  91. package/Examples/SampleUI/assets/images/android-icon.png +0 -0
  92. package/Examples/SampleUI/assets/images/artist-1.jpg +0 -0
  93. package/Examples/SampleUI/assets/images/artist-2.jpg +0 -0
  94. package/Examples/SampleUI/assets/images/avatar.png +0 -0
  95. package/Examples/SampleUI/assets/images/beach.jpg +0 -0
  96. package/Examples/SampleUI/assets/images/bridge.jpg +0 -0
  97. package/Examples/SampleUI/assets/images/chameleon.jpg +0 -0
  98. package/Examples/SampleUI/assets/images/city.jpg +0 -0
  99. package/Examples/SampleUI/assets/images/email-icon.png +0 -0
  100. package/Examples/SampleUI/assets/images/favorite.png +0 -0
  101. package/Examples/SampleUI/assets/images/forest.jpg +0 -0
  102. package/Examples/SampleUI/assets/images/paper-icon.png +0 -0
  103. package/Examples/SampleUI/assets/images/players-2.jpg +0 -0
  104. package/Examples/SampleUI/assets/images/players.jpg +0 -0
  105. package/Examples/SampleUI/assets/images/restaurant-1.jpg +0 -0
  106. package/Examples/SampleUI/assets/images/restaurant-2.jpg +0 -0
  107. package/Examples/SampleUI/assets/images/song-1.jpg +0 -0
  108. package/Examples/SampleUI/assets/images/song-2.jpg +0 -0
  109. package/Examples/SampleUI/assets/images/splash.png +0 -0
  110. package/Examples/SampleUI/assets/images/strawberries.jpg +0 -0
  111. package/Examples/SampleUI/assets/images/wrecked-ship.jpg +0 -0
  112. package/Examples/SampleUI/assets/styles/fonts.css +0 -47
  113. package/Examples/SampleUI/babel.config.js +0 -22
  114. package/Examples/SampleUI/index.js +0 -9
  115. package/Examples/SampleUI/ios/.xcode.env +0 -11
  116. package/Examples/SampleUI/ios/Podfile +0 -71
  117. package/Examples/SampleUI/ios/Podfile.lock +0 -2276
  118. package/Examples/SampleUI/ios/SampleUI/AppDelegate.h +0 -7
  119. package/Examples/SampleUI/ios/SampleUI/AppDelegate.mm +0 -31
  120. package/Examples/SampleUI/ios/SampleUI/Images.xcassets/AppIcon.appiconset/Contents.json +0 -53
  121. package/Examples/SampleUI/ios/SampleUI/Images.xcassets/Contents.json +0 -6
  122. package/Examples/SampleUI/ios/SampleUI/Info.plist +0 -52
  123. package/Examples/SampleUI/ios/SampleUI/LaunchScreen.storyboard +0 -47
  124. package/Examples/SampleUI/ios/SampleUI/PrivacyInfo.xcprivacy +0 -48
  125. package/Examples/SampleUI/ios/SampleUI/main.m +0 -10
  126. package/Examples/SampleUI/ios/SampleUI.xcodeproj/project.pbxproj +0 -785
  127. package/Examples/SampleUI/ios/SampleUI.xcodeproj/xcshareddata/xcschemes/SampleUI.xcscheme +0 -105
  128. package/Examples/SampleUI/ios/SampleUI.xcworkspace/contents.xcworkspacedata +0 -10
  129. package/Examples/SampleUI/ios/SampleUITests/Info.plist +0 -24
  130. package/Examples/SampleUI/ios/SampleUITests/SampleUITests.m +0 -66
  131. package/Examples/SampleUI/jest.config.js +0 -3
  132. package/Examples/SampleUI/metro.config.js +0 -54
  133. package/Examples/SampleUI/package.json +0 -65
  134. package/Examples/SampleUI/scripts/integration-test-android.sh +0 -292
  135. package/Examples/SampleUI/src/DrawerItems.tsx +0 -322
  136. package/Examples/SampleUI/src/ExampleList.tsx +0 -175
  137. package/Examples/SampleUI/src/Examples/ActivityIndicatorExample.tsx +0 -73
  138. package/Examples/SampleUI/src/Examples/AnimatedFABExample/AnimatedFABExample.tsx +0 -220
  139. package/Examples/SampleUI/src/Examples/AnimatedFABExample/CustomFAB.tsx +0 -70
  140. package/Examples/SampleUI/src/Examples/AnimatedFABExample/CustomFABControls.tsx +0 -146
  141. package/Examples/SampleUI/src/Examples/AnimatedFABExample/index.ts +0 -1
  142. package/Examples/SampleUI/src/Examples/AppbarExample.tsx +0 -263
  143. package/Examples/SampleUI/src/Examples/AvatarExample.tsx +0 -76
  144. package/Examples/SampleUI/src/Examples/BadgeExample.tsx +0 -97
  145. package/Examples/SampleUI/src/Examples/BannerExample.tsx +0 -152
  146. package/Examples/SampleUI/src/Examples/BottomNavigationBarExample.tsx +0 -94
  147. package/Examples/SampleUI/src/Examples/BottomNavigationExample.tsx +0 -205
  148. package/Examples/SampleUI/src/Examples/ButtonExample.tsx +0 -405
  149. package/Examples/SampleUI/src/Examples/CardExample.tsx +0 -245
  150. package/Examples/SampleUI/src/Examples/CheckboxExample.tsx +0 -87
  151. package/Examples/SampleUI/src/Examples/CheckboxItemExample.tsx +0 -72
  152. package/Examples/SampleUI/src/Examples/ChipExample.tsx +0 -432
  153. package/Examples/SampleUI/src/Examples/DataTableExample.tsx +0 -128
  154. package/Examples/SampleUI/src/Examples/DialogExample.tsx +0 -217
  155. package/Examples/SampleUI/src/Examples/Dialogs/DialogTextComponent.tsx +0 -31
  156. package/Examples/SampleUI/src/Examples/Dialogs/DialogTrackingTest.tsx +0 -307
  157. package/Examples/SampleUI/src/Examples/Dialogs/DialogWithCustomColors.tsx +0 -57
  158. package/Examples/SampleUI/src/Examples/Dialogs/DialogWithDismissableBackButton.tsx +0 -38
  159. package/Examples/SampleUI/src/Examples/Dialogs/DialogWithIcon.tsx +0 -42
  160. package/Examples/SampleUI/src/Examples/Dialogs/DialogWithLoadingIndicator.tsx +0 -48
  161. package/Examples/SampleUI/src/Examples/Dialogs/DialogWithLongText.tsx +0 -81
  162. package/Examples/SampleUI/src/Examples/Dialogs/DialogWithRadioBtns.tsx +0 -111
  163. package/Examples/SampleUI/src/Examples/Dialogs/UndismissableDialog.tsx +0 -30
  164. package/Examples/SampleUI/src/Examples/Dialogs/index.tsx +0 -44
  165. package/Examples/SampleUI/src/Examples/DividerExample.tsx +0 -30
  166. package/Examples/SampleUI/src/Examples/FABExample.tsx +0 -226
  167. package/Examples/SampleUI/src/Examples/IconButtonExample.tsx +0 -230
  168. package/Examples/SampleUI/src/Examples/IconExample.tsx +0 -50
  169. package/Examples/SampleUI/src/Examples/ListAccordionExample.tsx +0 -65
  170. package/Examples/SampleUI/src/Examples/ListAccordionGroupExample.tsx +0 -80
  171. package/Examples/SampleUI/src/Examples/ListItemExample.tsx +0 -310
  172. package/Examples/SampleUI/src/Examples/ListSectionExample.tsx +0 -159
  173. package/Examples/SampleUI/src/Examples/MaterialBottomTabNavigatorExample.tsx +0 -87
  174. package/Examples/SampleUI/src/Examples/MenuExample.tsx +0 -211
  175. package/Examples/SampleUI/src/Examples/ProgressBarExample.tsx +0 -142
  176. package/Examples/SampleUI/src/Examples/RadioButtonExample.tsx +0 -104
  177. package/Examples/SampleUI/src/Examples/RadioButtonGroupExample.tsx +0 -67
  178. package/Examples/SampleUI/src/Examples/RadioButtonItemExample.tsx +0 -77
  179. package/Examples/SampleUI/src/Examples/SearchbarExample.tsx +0 -249
  180. package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonCustomColorCheck.tsx +0 -93
  181. package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonDefault.tsx +0 -49
  182. package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonDisabled.tsx +0 -47
  183. package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonMultiselect.tsx +0 -50
  184. package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonMultiselectIcons.tsx +0 -49
  185. package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonMultiselectRealCase.tsx +0 -114
  186. package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonOnlyIcons.tsx +0 -40
  187. package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonOnlyIconsWithCheck.tsx +0 -43
  188. package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonRealCase.tsx +0 -97
  189. package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonWithDensity.tsx +0 -47
  190. package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonWithSelectedCheck.tsx +0 -52
  191. package/Examples/SampleUI/src/Examples/SegmentedButtons/index.ts +0 -9
  192. package/Examples/SampleUI/src/Examples/SegmentedButtonsExample.tsx +0 -57
  193. package/Examples/SampleUI/src/Examples/SnackbarExample.tsx +0 -141
  194. package/Examples/SampleUI/src/Examples/SurfaceExample.tsx +0 -130
  195. package/Examples/SampleUI/src/Examples/SwitchExample.tsx +0 -105
  196. package/Examples/SampleUI/src/Examples/TeamDetails.tsx +0 -291
  197. package/Examples/SampleUI/src/Examples/TeamsList.tsx +0 -57
  198. package/Examples/SampleUI/src/Examples/TextExample.tsx +0 -132
  199. package/Examples/SampleUI/src/Examples/TextInputExample.tsx +0 -914
  200. package/Examples/SampleUI/src/Examples/ThemeExample.tsx +0 -41
  201. package/Examples/SampleUI/src/Examples/ThemingWithReactNavigation.tsx +0 -75
  202. package/Examples/SampleUI/src/Examples/ToggleButtonExample.tsx +0 -128
  203. package/Examples/SampleUI/src/Examples/TooltipExample.tsx +0 -191
  204. package/Examples/SampleUI/src/Examples/TouchableRippleExample.tsx +0 -37
  205. package/Examples/SampleUI/src/RootNavigator.tsx +0 -95
  206. package/Examples/SampleUI/src/ScreenWrapper.tsx +0 -67
  207. package/Examples/SampleUI/src/components/ActivityIndicator.tsx +0 -254
  208. package/Examples/SampleUI/src/components/Appbar/Appbar.tsx +0 -364
  209. package/Examples/SampleUI/src/components/Appbar/AppbarAction.tsx +0 -132
  210. package/Examples/SampleUI/src/components/Appbar/AppbarBackAction.tsx +0 -77
  211. package/Examples/SampleUI/src/components/Appbar/AppbarBackIcon.tsx +0 -52
  212. package/Examples/SampleUI/src/components/Appbar/AppbarContent.tsx +0 -249
  213. package/Examples/SampleUI/src/components/Appbar/AppbarHeader.tsx +0 -174
  214. package/Examples/SampleUI/src/components/Appbar/index.ts +0 -22
  215. package/Examples/SampleUI/src/components/Appbar/utils.ts +0 -188
  216. package/Examples/SampleUI/src/components/Avatar/Avatar.tsx +0 -8
  217. package/Examples/SampleUI/src/components/Avatar/AvatarIcon.tsx +0 -87
  218. package/Examples/SampleUI/src/components/Avatar/AvatarImage.tsx +0 -128
  219. package/Examples/SampleUI/src/components/Avatar/AvatarText.tsx +0 -127
  220. package/Examples/SampleUI/src/components/Badge.tsx +0 -138
  221. package/Examples/SampleUI/src/components/Banner.tsx +0 -302
  222. package/Examples/SampleUI/src/components/BottomNavigation/BottomNavigation.tsx +0 -643
  223. package/Examples/SampleUI/src/components/BottomNavigation/BottomNavigationBar.tsx +0 -1039
  224. package/Examples/SampleUI/src/components/BottomNavigation/BottomNavigationRouteScreen.tsx +0 -31
  225. package/Examples/SampleUI/src/components/BottomNavigation/utils.ts +0 -70
  226. package/Examples/SampleUI/src/components/Button/Button.tsx +0 -503
  227. package/Examples/SampleUI/src/components/Button/utils.tsx +0 -272
  228. package/Examples/SampleUI/src/components/Card/Card.tsx +0 -373
  229. package/Examples/SampleUI/src/components/Card/CardActions.tsx +0 -74
  230. package/Examples/SampleUI/src/components/Card/CardContent.tsx +0 -99
  231. package/Examples/SampleUI/src/components/Card/CardCover.tsx +0 -96
  232. package/Examples/SampleUI/src/components/Card/CardTitle.tsx +0 -236
  233. package/Examples/SampleUI/src/components/Card/utils.tsx +0 -110
  234. package/Examples/SampleUI/src/components/Checkbox/Checkbox.tsx +0 -78
  235. package/Examples/SampleUI/src/components/Checkbox/CheckboxAndroid.tsx +0 -180
  236. package/Examples/SampleUI/src/components/Checkbox/CheckboxIOS.tsx +0 -104
  237. package/Examples/SampleUI/src/components/Checkbox/CheckboxItem.tsx +0 -236
  238. package/Examples/SampleUI/src/components/Checkbox/index.ts +0 -19
  239. package/Examples/SampleUI/src/components/Checkbox/utils.ts +0 -183
  240. package/Examples/SampleUI/src/components/Chip/Chip.tsx +0 -513
  241. package/Examples/SampleUI/src/components/Chip/helpers.tsx +0 -322
  242. package/Examples/SampleUI/src/components/CrossFadeIcon.tsx +0 -140
  243. package/Examples/SampleUI/src/components/DataTable/DataTable.tsx +0 -138
  244. package/Examples/SampleUI/src/components/DataTable/DataTableCell.tsx +0 -132
  245. package/Examples/SampleUI/src/components/DataTable/DataTableHeader.tsx +0 -82
  246. package/Examples/SampleUI/src/components/DataTable/DataTablePagination.tsx +0 -407
  247. package/Examples/SampleUI/src/components/DataTable/DataTableRow.tsx +0 -107
  248. package/Examples/SampleUI/src/components/DataTable/DataTableTitle.tsx +0 -208
  249. package/Examples/SampleUI/src/components/Dialog/Dialog.tsx +0 -191
  250. package/Examples/SampleUI/src/components/Dialog/DialogActions.tsx +0 -94
  251. package/Examples/SampleUI/src/components/Dialog/DialogContent.tsx +0 -54
  252. package/Examples/SampleUI/src/components/Dialog/DialogIcon.tsx +0 -100
  253. package/Examples/SampleUI/src/components/Dialog/DialogScrollArea.tsx +0 -88
  254. package/Examples/SampleUI/src/components/Dialog/DialogTitle.tsx +0 -94
  255. package/Examples/SampleUI/src/components/Divider.tsx +0 -102
  256. package/Examples/SampleUI/src/components/Drawer/Drawer.tsx +0 -8
  257. package/Examples/SampleUI/src/components/Drawer/DrawerCollapsedItem.tsx +0 -282
  258. package/Examples/SampleUI/src/components/Drawer/DrawerItem.tsx +0 -209
  259. package/Examples/SampleUI/src/components/Drawer/DrawerSection.tsx +0 -138
  260. package/Examples/SampleUI/src/components/FAB/AnimatedFAB.tsx +0 -619
  261. package/Examples/SampleUI/src/components/FAB/FAB.tsx +0 -371
  262. package/Examples/SampleUI/src/components/FAB/FABGroup.tsx +0 -532
  263. package/Examples/SampleUI/src/components/FAB/index.ts +0 -13
  264. package/Examples/SampleUI/src/components/FAB/utils.ts +0 -474
  265. package/Examples/SampleUI/src/components/HelperText/HelperText.tsx +0 -168
  266. package/Examples/SampleUI/src/components/HelperText/utils.ts +0 -30
  267. package/Examples/SampleUI/src/components/Icon.tsx +0 -170
  268. package/Examples/SampleUI/src/components/IconButton/IconButton.tsx +0 -234
  269. package/Examples/SampleUI/src/components/IconButton/utils.ts +0 -190
  270. package/Examples/SampleUI/src/components/List/List.tsx +0 -20
  271. package/Examples/SampleUI/src/components/List/ListAccordion.tsx +0 -391
  272. package/Examples/SampleUI/src/components/List/ListAccordionGroup.tsx +0 -88
  273. package/Examples/SampleUI/src/components/List/ListIcon.tsx +0 -79
  274. package/Examples/SampleUI/src/components/List/ListImage.tsx +0 -89
  275. package/Examples/SampleUI/src/components/List/ListItem.tsx +0 -313
  276. package/Examples/SampleUI/src/components/List/ListSection.tsx +0 -87
  277. package/Examples/SampleUI/src/components/List/ListSubheader.tsx +0 -79
  278. package/Examples/SampleUI/src/components/List/utils.ts +0 -113
  279. package/Examples/SampleUI/src/components/MaterialCommunityIcon.tsx +0 -121
  280. package/Examples/SampleUI/src/components/Menu/Menu.tsx +0 -711
  281. package/Examples/SampleUI/src/components/Menu/MenuItem.tsx +0 -257
  282. package/Examples/SampleUI/src/components/Menu/utils.ts +0 -110
  283. package/Examples/SampleUI/src/components/Modal.tsx +0 -245
  284. package/Examples/SampleUI/src/components/Portal/Portal.tsx +0 -69
  285. package/Examples/SampleUI/src/components/Portal/PortalConsumer.tsx +0 -44
  286. package/Examples/SampleUI/src/components/Portal/PortalHost.tsx +0 -143
  287. package/Examples/SampleUI/src/components/Portal/PortalManager.tsx +0 -54
  288. package/Examples/SampleUI/src/components/ProgressBar.tsx +0 -292
  289. package/Examples/SampleUI/src/components/RadioButton/RadioButton.tsx +0 -86
  290. package/Examples/SampleUI/src/components/RadioButton/RadioButtonAndroid.tsx +0 -202
  291. package/Examples/SampleUI/src/components/RadioButton/RadioButtonGroup.tsx +0 -67
  292. package/Examples/SampleUI/src/components/RadioButton/RadioButtonIOS.tsx +0 -130
  293. package/Examples/SampleUI/src/components/RadioButton/RadioButtonItem.tsx +0 -268
  294. package/Examples/SampleUI/src/components/RadioButton/index.ts +0 -22
  295. package/Examples/SampleUI/src/components/RadioButton/utils.ts +0 -37
  296. package/Examples/SampleUI/src/components/Searchbar.tsx +0 -459
  297. package/Examples/SampleUI/src/components/SegmentedButtons/SegmentedButtonItem.tsx +0 -271
  298. package/Examples/SampleUI/src/components/SegmentedButtons/SegmentedButtons.tsx +0 -197
  299. package/Examples/SampleUI/src/components/SegmentedButtons/utils.ts +0 -179
  300. package/Examples/SampleUI/src/components/Snackbar.tsx +0 -430
  301. package/Examples/SampleUI/src/components/Surface.tsx +0 -376
  302. package/Examples/SampleUI/src/components/Switch/Switch.tsx +0 -108
  303. package/Examples/SampleUI/src/components/Switch/utils.ts +0 -113
  304. package/Examples/SampleUI/src/components/TextInput/Addons/Outline.tsx +0 -64
  305. package/Examples/SampleUI/src/components/TextInput/Addons/Underline.tsx +0 -78
  306. package/Examples/SampleUI/src/components/TextInput/Adornment/TextInputAdornment.tsx +0 -208
  307. package/Examples/SampleUI/src/components/TextInput/Adornment/TextInputAffix.tsx +0 -212
  308. package/Examples/SampleUI/src/components/TextInput/Adornment/TextInputIcon.tsx +0 -195
  309. package/Examples/SampleUI/src/components/TextInput/Adornment/enums.tsx +0 -12
  310. package/Examples/SampleUI/src/components/TextInput/Adornment/types.tsx +0 -11
  311. package/Examples/SampleUI/src/components/TextInput/Adornment/utils.ts +0 -48
  312. package/Examples/SampleUI/src/components/TextInput/Label/InputLabel.tsx +0 -217
  313. package/Examples/SampleUI/src/components/TextInput/Label/LabelBackground.tsx +0 -100
  314. package/Examples/SampleUI/src/components/TextInput/TextInput.tsx +0 -572
  315. package/Examples/SampleUI/src/components/TextInput/TextInputFlat.tsx +0 -475
  316. package/Examples/SampleUI/src/components/TextInput/TextInputOutlined.tsx +0 -450
  317. package/Examples/SampleUI/src/components/TextInput/constants.tsx +0 -48
  318. package/Examples/SampleUI/src/components/TextInput/helpers.tsx +0 -612
  319. package/Examples/SampleUI/src/components/TextInput/types.tsx +0 -155
  320. package/Examples/SampleUI/src/components/ToggleButton/ToggleButton.tsx +0 -187
  321. package/Examples/SampleUI/src/components/ToggleButton/ToggleButtonGroup.tsx +0 -72
  322. package/Examples/SampleUI/src/components/ToggleButton/ToggleButtonRow.tsx +0 -107
  323. package/Examples/SampleUI/src/components/ToggleButton/index.ts +0 -16
  324. package/Examples/SampleUI/src/components/ToggleButton/utils.ts +0 -26
  325. package/Examples/SampleUI/src/components/Tooltip/Tooltip.tsx +0 -249
  326. package/Examples/SampleUI/src/components/Tooltip/utils.ts +0 -129
  327. package/Examples/SampleUI/src/components/TouchableRipple/Pressable.tsx +0 -41
  328. package/Examples/SampleUI/src/components/TouchableRipple/TouchableRipple.native.tsx +0 -145
  329. package/Examples/SampleUI/src/components/TouchableRipple/TouchableRipple.tsx +0 -317
  330. package/Examples/SampleUI/src/components/TouchableRipple/utils.ts +0 -66
  331. package/Examples/SampleUI/src/components/Typography/AnimatedText.tsx +0 -107
  332. package/Examples/SampleUI/src/components/Typography/Text.tsx +0 -184
  333. package/Examples/SampleUI/src/components/Typography/types.tsx +0 -5
  334. package/Examples/SampleUI/src/components/Typography/v2/Caption.tsx +0 -50
  335. package/Examples/SampleUI/src/components/Typography/v2/Headline.tsx +0 -52
  336. package/Examples/SampleUI/src/components/Typography/v2/Paragraph.tsx +0 -49
  337. package/Examples/SampleUI/src/components/Typography/v2/StyledText.tsx +0 -56
  338. package/Examples/SampleUI/src/components/Typography/v2/Subheading.tsx +0 -50
  339. package/Examples/SampleUI/src/components/Typography/v2/Text.tsx +0 -62
  340. package/Examples/SampleUI/src/components/Typography/v2/Title.tsx +0 -49
  341. package/Examples/SampleUI/src/components/Typography/v2/index.ts +0 -5
  342. package/Examples/SampleUI/src/core/PaperProvider.tsx +0 -122
  343. package/Examples/SampleUI/src/core/SafeAreaProviderCompat.tsx +0 -65
  344. package/Examples/SampleUI/src/core/settings.tsx +0 -23
  345. package/Examples/SampleUI/src/core/theming.tsx +0 -170
  346. package/Examples/SampleUI/src/index.native.tsx +0 -285
  347. package/Examples/SampleUI/src/index.tsx +0 -226
  348. package/Examples/SampleUI/src/react-navigation/index.tsx +0 -19
  349. package/Examples/SampleUI/src/react-navigation/navigators/createMaterialBottomTabNavigator.tsx +0 -72
  350. package/Examples/SampleUI/src/react-navigation/types.tsx +0 -126
  351. package/Examples/SampleUI/src/react-navigation/views/MaterialBottomTabView.tsx +0 -140
  352. package/Examples/SampleUI/src/styles/__tests__/fonts.test.js +0 -290
  353. package/Examples/SampleUI/src/styles/fonts.tsx +0 -143
  354. package/Examples/SampleUI/src/styles/overlay.tsx +0 -70
  355. package/Examples/SampleUI/src/styles/shadow.tsx +0 -109
  356. package/Examples/SampleUI/src/styles/themes/index.ts +0 -4
  357. package/Examples/SampleUI/src/styles/themes/v2/DarkTheme.tsx +0 -30
  358. package/Examples/SampleUI/src/styles/themes/v2/LightTheme.tsx +0 -30
  359. package/Examples/SampleUI/src/styles/themes/v2/colors.tsx +0 -277
  360. package/Examples/SampleUI/src/styles/themes/v3/DarkTheme.tsx +0 -66
  361. package/Examples/SampleUI/src/styles/themes/v3/LightTheme.tsx +0 -69
  362. package/Examples/SampleUI/src/styles/themes/v3/tokens.tsx +0 -230
  363. package/Examples/SampleUI/src/utils/BackHandler/BackHandler.native.tsx +0 -3
  364. package/Examples/SampleUI/src/utils/BackHandler/BackHandler.tsx +0 -11
  365. package/Examples/SampleUI/src/utils/addEventListener.tsx +0 -56
  366. package/Examples/SampleUI/src/utils/forwardRef.tsx +0 -23
  367. package/Examples/SampleUI/src/utils/getContrastingColor.tsx +0 -15
  368. package/Examples/SampleUI/src/utils/hasTouchHandler.tsx +0 -23
  369. package/Examples/SampleUI/src/utils/roundLayoutSize.ts +0 -2
  370. package/Examples/SampleUI/src/utils/splitStyles.ts +0 -60
  371. package/Examples/SampleUI/src/utils/useAnimatedValue.tsx +0 -9
  372. package/Examples/SampleUI/src/utils/useAnimatedValueArray.tsx +0 -13
  373. package/Examples/SampleUI/src/utils/useIsKeyboardShown.tsx +0 -55
  374. package/Examples/SampleUI/src/utils/useLayout.tsx +0 -29
  375. package/Examples/SampleUI/src/utils/useLazyRef.tsx +0 -11
  376. package/Examples/SampleUI/tsconfig.json +0 -3
  377. package/Examples/SampleUI/utils/index.ts +0 -1426
  378. package/cli/__tests__/doctor.test.mjs +0 -88
@@ -1,643 +0,0 @@
1
- import * as React from 'react';
2
- import {
3
- Animated,
4
- ColorValue,
5
- EasingFunction,
6
- Platform,
7
- StyleProp,
8
- StyleSheet,
9
- View,
10
- ViewStyle,
11
- } from 'react-native';
12
-
13
- import useLatestCallback from 'use-latest-callback';
14
-
15
- import BottomNavigationBar from './BottomNavigationBar';
16
- import BottomNavigationRouteScreen from './BottomNavigationRouteScreen';
17
- import { useInternalTheme } from '../../core/theming';
18
- import type { ThemeProp } from '../../types';
19
- import useAnimatedValueArray from '../../utils/useAnimatedValueArray';
20
- import type { IconSource } from '../Icon';
21
- import { Props as TouchableRippleProps } from '../TouchableRipple/TouchableRipple';
22
-
23
- export type BaseRoute = {
24
- key: string;
25
- title?: string;
26
- focusedIcon?: IconSource;
27
- unfocusedIcon?: IconSource;
28
- badge?: string | number | boolean;
29
- /**
30
- * @deprecated In v5.x works only with theme version 2.
31
- */
32
- color?: string;
33
- accessibilityLabel?: string;
34
- testID?: string;
35
- lazy?: boolean;
36
- };
37
-
38
- type NavigationState<Route extends BaseRoute> = {
39
- index: number;
40
- routes: Route[];
41
- };
42
-
43
- type TabPressEvent = {
44
- defaultPrevented: boolean;
45
- preventDefault(): void;
46
- };
47
-
48
- type TouchableProps<Route extends BaseRoute> = TouchableRippleProps & {
49
- key: string;
50
- route: Route;
51
- children: React.ReactNode;
52
- borderless?: boolean;
53
- centered?: boolean;
54
- rippleColor?: ColorValue;
55
- };
56
-
57
- export type Props<Route extends BaseRoute> = {
58
- /**
59
- * Whether the shifting style is used, the active tab icon shifts up to show the label and the inactive tabs won't have a label.
60
- *
61
- * By default, this is `false` with theme version 3 and `true` when you have more than 3 tabs.
62
- * Pass `shifting={false}` to explicitly disable this animation, or `shifting={true}` to always use this animation.
63
- * Note that you need at least 2 tabs be able to run this animation.
64
- */
65
- shifting?: boolean;
66
- /**
67
- * Whether to show labels in tabs. When `false`, only icons will be displayed.
68
- */
69
- labeled?: boolean;
70
- /**
71
- * Whether tabs should be spread across the entire width.
72
- */
73
- compact?: boolean;
74
- /**
75
- * State for the bottom navigation. The state should contain the following properties:
76
- *
77
- * - `index`: a number representing the index of the active route in the `routes` array
78
- * - `routes`: an array containing a list of route objects used for rendering the tabs
79
- *
80
- * Each route object should contain the following properties:
81
- *
82
- * - `key`: a unique key to identify the route (required)
83
- * - `title`: title of the route to use as the tab label
84
- * - `focusedIcon`: icon to use as the focused tab icon, can be a string, an image source or a react component @renamed Renamed from 'icon' to 'focusedIcon' in v5.x
85
- * - `unfocusedIcon`: icon to use as the unfocused tab icon, can be a string, an image source or a react component @supported Available in v5.x with theme version 3
86
- * - `color`: color to use as background color for shifting bottom navigation @deprecatedProperty In v5.x works only with theme version 2.
87
- * - `badge`: badge to show on the tab icon, can be `true` to show a dot, `string` or `number` to show text.
88
- * - `accessibilityLabel`: accessibility label for the tab button
89
- * - `testID`: test id for the tab button
90
- *
91
- * Example:
92
- *
93
- * ```js
94
- * {
95
- * index: 1,
96
- * routes: [
97
- * { key: 'music', title: 'Favorites', focusedIcon: 'heart', unfocusedIcon: 'heart-outline'},
98
- * { key: 'albums', title: 'Albums', focusedIcon: 'album' },
99
- * { key: 'recents', title: 'Recents', focusedIcon: 'history' },
100
- * { key: 'notifications', title: 'Notifications', focusedIcon: 'bell', unfocusedIcon: 'bell-outline' },
101
- * ]
102
- * }
103
- * ```
104
- *
105
- * `BottomNavigation` is a controlled component, which means the `index` needs to be updated via the `onIndexChange` callback.
106
- */
107
- navigationState: NavigationState<Route>;
108
- /**
109
- * Callback which is called on tab change, receives the index of the new tab as argument.
110
- * The navigation state needs to be updated when it's called, otherwise the change is dropped.
111
- */
112
- onIndexChange: (index: number) => void;
113
- /**
114
- * Callback which returns a react element to render as the page for the tab. Receives an object containing the route as the argument:
115
- *
116
- * ```js
117
- * renderScene = ({ route, jumpTo }) => {
118
- * switch (route.key) {
119
- * case 'music':
120
- * return <MusicRoute jumpTo={jumpTo} />;
121
- * case 'albums':
122
- * return <AlbumsRoute jumpTo={jumpTo} />;
123
- * }
124
- * }
125
- * ```
126
- *
127
- * Pages are lazily rendered, which means that a page will be rendered the first time you navigate to it.
128
- * After initial render, all the pages stay rendered to preserve their state.
129
- *
130
- * You need to make sure that your individual routes implement a `shouldComponentUpdate` to improve the performance.
131
- * To make it easier to specify the components, you can use the `SceneMap` helper:
132
- *
133
- * ```js
134
- * renderScene = BottomNavigation.SceneMap({
135
- * music: MusicRoute,
136
- * albums: AlbumsRoute,
137
- * });
138
- * ```
139
- *
140
- * Specifying the components this way is easier and takes care of implementing a `shouldComponentUpdate` method.
141
- * Each component will receive the current route and a `jumpTo` method as it's props.
142
- * The `jumpTo` method can be used to navigate to other tabs programmatically:
143
- *
144
- * ```js
145
- * this.props.jumpTo('albums')
146
- * ```
147
- */
148
- renderScene: (props: {
149
- route: Route;
150
- jumpTo: (key: string) => void;
151
- }) => React.ReactNode | null;
152
- /**
153
- * Callback which returns a React Element to be used as tab icon.
154
- */
155
- renderIcon?: (props: {
156
- route: Route;
157
- focused: boolean;
158
- color: string;
159
- }) => React.ReactNode;
160
- /**
161
- * Callback which React Element to be used as tab label.
162
- */
163
- renderLabel?: (props: {
164
- route: Route;
165
- focused: boolean;
166
- color: string;
167
- }) => React.ReactNode;
168
- /**
169
- * Callback which returns a React element to be used as the touchable for the tab item.
170
- * Renders a `TouchableRipple` on Android and `Pressable` on iOS.
171
- */
172
- renderTouchable?: (props: TouchableProps<Route>) => React.ReactNode;
173
- /**
174
- * Get accessibility label for the tab button. This is read by the screen reader when the user taps the tab.
175
- * Uses `route.accessibilityLabel` by default.
176
- */
177
- getAccessibilityLabel?: (props: { route: Route }) => string | undefined;
178
- /**
179
- * Get badge for the tab, uses `route.badge` by default.
180
- */
181
- getBadge?: (props: { route: Route }) => boolean | number | string | undefined;
182
- /**
183
- * Get color for the tab, uses `route.color` by default.
184
- */
185
- getColor?: (props: { route: Route }) => string | undefined;
186
- /**
187
- * Get label text for the tab, uses `route.title` by default. Use `renderLabel` to replace label component.
188
- */
189
- getLabelText?: (props: { route: Route }) => string | undefined;
190
- /**
191
- * Get lazy for the current screen. Uses true by default.
192
- */
193
- getLazy?: (props: { route: Route }) => boolean | undefined;
194
- /**
195
- * Get the id to locate this tab button in tests, uses `route.testID` by default.
196
- */
197
- getTestID?: (props: { route: Route }) => string | undefined;
198
- /**
199
- * Function to execute on tab press. It receives the route for the pressed tab, useful for things like scroll to top.
200
- */
201
- onTabPress?: (props: { route: Route } & TabPressEvent) => void;
202
- /**
203
- * Function to execute on tab long press. It receives the route for the pressed tab, useful for things like custom action when longed pressed.
204
- */
205
- onTabLongPress?: (props: { route: Route } & TabPressEvent) => void;
206
- /**
207
- * Custom color for icon and label in the active tab.
208
- */
209
- activeColor?: string;
210
- /**
211
- * Custom color for icon and label in the inactive tab.
212
- */
213
- inactiveColor?: string;
214
- /**
215
- * Whether animation is enabled for scenes transitions in `shifting` mode.
216
- * By default, the scenes cross-fade during tab change when `shifting` is enabled.
217
- * Specify `sceneAnimationEnabled` as `false` to disable the animation.
218
- */
219
- sceneAnimationEnabled?: boolean;
220
- /**
221
- * The scene animation effect. Specify `'shifting'` for a different effect.
222
- * By default, 'opacity' will be used.
223
- */
224
- sceneAnimationType?: 'opacity' | 'shifting';
225
- /**
226
- * The scene animation Easing.
227
- */
228
- sceneAnimationEasing?: EasingFunction | undefined;
229
- /**
230
- * Whether the bottom navigation bar is hidden when keyboard is shown.
231
- * On Android, this works best when [`windowSoftInputMode`](https://developer.android.com/guide/topics/manifest/activity-element#wsoft) is set to `adjustResize`.
232
- */
233
- keyboardHidesNavigationBar?: boolean;
234
- /**
235
- * Safe area insets for the tab bar. This can be used to avoid elements like the navigation bar on Android and bottom safe area on iOS.
236
- * The bottom insets for iOS is added by default. You can override the behavior with this option.
237
- */
238
- safeAreaInsets?: {
239
- top?: number;
240
- right?: number;
241
- bottom?: number;
242
- left?: number;
243
- };
244
- /**
245
- * Style for the bottom navigation bar. You can pass a custom background color here:
246
- *
247
- * ```js
248
- * barStyle={{ backgroundColor: '#694fad' }}
249
- * ```
250
- */
251
- barStyle?: Animated.WithAnimatedValue<StyleProp<ViewStyle>>;
252
- /**
253
- * Specifies the largest possible scale a label font can reach.
254
- */
255
- labelMaxFontSizeMultiplier?: number;
256
- style?: StyleProp<ViewStyle>;
257
- activeIndicatorStyle?: StyleProp<ViewStyle>;
258
- /**
259
- * @optional
260
- */
261
- theme?: ThemeProp;
262
- /**
263
- * TestID used for testing purposes
264
- */
265
- testID?: string;
266
- };
267
-
268
- const FAR_FAR_AWAY = Platform.OS === 'web' ? 0 : 9999;
269
-
270
- const SceneComponent = React.memo(({ component, ...rest }: any) =>
271
- React.createElement(component, rest)
272
- );
273
-
274
- /**
275
- * BottomNavigation provides quick navigation between top-level views of an app with a bottom navigation bar.
276
- * It is primarily designed for use on mobile. If you want to use the navigation bar only see [`BottomNavigation.Bar`](BottomNavigationBar).
277
- *
278
- * By default BottomNavigation uses primary color as a background, in dark theme with `adaptive` mode it will use surface colour instead.
279
- * See [Dark Theme](https://callstack.github.io/react-native-paper/docs/guides/theming#dark-theme) for more information.
280
- *
281
- * ## Usage
282
- * ```js
283
- * import * as React from 'react';
284
- * import { BottomNavigation, Text } from 'react-native-paper';
285
- *
286
- * const MusicRoute = () => <Text>Music</Text>;
287
- *
288
- * const AlbumsRoute = () => <Text>Albums</Text>;
289
- *
290
- * const RecentsRoute = () => <Text>Recents</Text>;
291
- *
292
- * const NotificationsRoute = () => <Text>Notifications</Text>;
293
- *
294
- * const MyComponent = () => {
295
- * const [index, setIndex] = React.useState(0);
296
- * const [routes] = React.useState([
297
- * { key: 'music', title: 'Favorites', focusedIcon: 'heart', unfocusedIcon: 'heart-outline'},
298
- * { key: 'albums', title: 'Albums', focusedIcon: 'album' },
299
- * { key: 'recents', title: 'Recents', focusedIcon: 'history' },
300
- * { key: 'notifications', title: 'Notifications', focusedIcon: 'bell', unfocusedIcon: 'bell-outline' },
301
- * ]);
302
- *
303
- * const renderScene = BottomNavigation.SceneMap({
304
- * music: MusicRoute,
305
- * albums: AlbumsRoute,
306
- * recents: RecentsRoute,
307
- * notifications: NotificationsRoute,
308
- * });
309
- *
310
- * return (
311
- * <BottomNavigation
312
- * navigationState={{ index, routes }}
313
- * onIndexChange={setIndex}
314
- * renderScene={renderScene}
315
- * />
316
- * );
317
- * };
318
- *
319
- * export default MyComponent;
320
- * ```
321
- */
322
- const BottomNavigation = <Route extends BaseRoute>({
323
- navigationState,
324
- renderScene,
325
- renderIcon,
326
- renderLabel,
327
- renderTouchable,
328
- getLabelText,
329
- getBadge,
330
- getColor,
331
- getAccessibilityLabel,
332
- getTestID,
333
- activeColor,
334
- inactiveColor,
335
- keyboardHidesNavigationBar = Platform.OS === 'android',
336
- barStyle,
337
- labeled = true,
338
- style,
339
- activeIndicatorStyle,
340
- sceneAnimationEnabled = false,
341
- sceneAnimationType = 'opacity',
342
- sceneAnimationEasing,
343
- onTabPress,
344
- onTabLongPress,
345
- onIndexChange,
346
- shifting: shiftingProp,
347
- safeAreaInsets,
348
- labelMaxFontSizeMultiplier = 1,
349
- compact: compactProp,
350
- testID = 'bottom-navigation',
351
- theme: themeOverrides,
352
- getLazy = ({ route }: { route: Route }) => route.lazy,
353
- }: Props<Route>) => {
354
- const theme = useInternalTheme(themeOverrides);
355
- const { scale } = theme.animation;
356
- const compact = compactProp ?? !theme.isV3;
357
- let shifting =
358
- shiftingProp ?? (theme.isV3 ? false : navigationState.routes.length > 3);
359
-
360
- if (shifting && navigationState.routes.length < 2) {
361
- shifting = false;
362
- console.warn(
363
- 'BottomNavigation needs at least 2 tabs to run shifting animation'
364
- );
365
- }
366
-
367
- const focusedKey = navigationState.routes[navigationState.index].key;
368
-
369
- /**
370
- * Active state of individual tab item positions:
371
- * -1 if they're before the active tab, 0 if they're active, 1 if they're after the active tab
372
- */
373
- const tabsPositionAnims = useAnimatedValueArray(
374
- navigationState.routes.map((_, i) =>
375
- i === navigationState.index ? 0 : i >= navigationState.index ? 1 : -1
376
- )
377
- );
378
-
379
- /**
380
- * The top offset for each tab item to position it offscreen.
381
- * Placing items offscreen helps to save memory usage for inactive screens with removeClippedSubviews.
382
- * We use animated values for this to prevent unnecessary re-renders.
383
- */
384
- const offsetsAnims = useAnimatedValueArray(
385
- navigationState.routes.map(
386
- // offscreen === 1, normal === 0
387
- (_, i) => (i === navigationState.index ? 0 : 1)
388
- )
389
- );
390
-
391
- /**
392
- * List of loaded tabs, tabs will be loaded when navigated to.
393
- */
394
- const [loaded, setLoaded] = React.useState<string[]>([focusedKey]);
395
-
396
- if (!loaded.includes(focusedKey)) {
397
- // Set the current tab to be loaded if it was not loaded before
398
- setLoaded((loaded) => [...loaded, focusedKey]);
399
- }
400
-
401
- const animateToIndex = React.useCallback(
402
- (index: number) => {
403
- Animated.parallel([
404
- ...navigationState.routes.map((_, i) =>
405
- Animated.timing(tabsPositionAnims[i], {
406
- toValue: i === index ? 0 : i >= index ? 1 : -1,
407
- duration: theme.isV3 || shifting ? 150 * scale : 0,
408
- useNativeDriver: true,
409
- easing: sceneAnimationEasing,
410
- })
411
- ),
412
- ]).start(({ finished }) => {
413
- if (finished) {
414
- // Position all inactive screens offscreen to save memory usage
415
- // Only do it when animation has finished to avoid glitches mid-transition if switching fast
416
- offsetsAnims.forEach((offset, i) => {
417
- if (i === index) {
418
- offset.setValue(0);
419
- } else {
420
- offset.setValue(1);
421
- }
422
- });
423
- }
424
- });
425
- },
426
- [
427
- shifting,
428
- navigationState.routes,
429
- offsetsAnims,
430
- scale,
431
- tabsPositionAnims,
432
- sceneAnimationEasing,
433
- theme,
434
- ]
435
- );
436
-
437
- React.useEffect(() => {
438
- // Workaround for native animated bug in react-native@^0.57
439
- // Context: https://github.com/callstack/react-native-paper/pull/637
440
- animateToIndex(navigationState.index);
441
- // eslint-disable-next-line react-hooks/exhaustive-deps
442
- }, []);
443
-
444
- const prevNavigationState = React.useRef<NavigationState<Route>>();
445
-
446
- React.useEffect(() => {
447
- // Reset offsets of previous and current tabs before animation
448
- offsetsAnims.forEach((offset, i) => {
449
- if (
450
- i === navigationState.index ||
451
- i === prevNavigationState.current?.index
452
- ) {
453
- offset.setValue(0);
454
- }
455
- });
456
-
457
- animateToIndex(navigationState.index);
458
- }, [navigationState.index, animateToIndex, offsetsAnims]);
459
-
460
- const handleTabPress = useLatestCallback(
461
- (event: { route: Route } & TabPressEvent) => {
462
- onTabPress?.(event);
463
-
464
- if (event.defaultPrevented) {
465
- return;
466
- }
467
-
468
- const index = navigationState.routes.findIndex(
469
- (route) => event.route.key === route.key
470
- );
471
-
472
- if (index !== navigationState.index) {
473
- prevNavigationState.current = navigationState;
474
- onIndexChange(index);
475
- }
476
- }
477
- );
478
-
479
- const jumpTo = useLatestCallback((key: string) => {
480
- const index = navigationState.routes.findIndex(
481
- (route) => route.key === key
482
- );
483
-
484
- prevNavigationState.current = navigationState;
485
- onIndexChange(index);
486
- });
487
-
488
- const { routes } = navigationState;
489
- const { colors } = theme;
490
-
491
- return (
492
- <View style={[styles.container, style]} testID={testID}>
493
- <View style={[styles.content, { backgroundColor: colors?.background }]}>
494
- {routes.map((route, index) => {
495
- if (getLazy({ route }) !== false && !loaded.includes(route.key)) {
496
- // Don't render a screen if we've never navigated to it
497
- return null;
498
- }
499
-
500
- const focused = navigationState.index === index;
501
- const previouslyFocused =
502
- prevNavigationState.current?.index === index;
503
- const countAlphaOffscreen =
504
- sceneAnimationEnabled && (focused || previouslyFocused);
505
- const renderToHardwareTextureAndroid =
506
- sceneAnimationEnabled && focused;
507
-
508
- const opacity = sceneAnimationEnabled
509
- ? tabsPositionAnims[index].interpolate({
510
- inputRange: [-1, 0, 1],
511
- outputRange: [0, 1, 0],
512
- })
513
- : focused
514
- ? 1
515
- : 0;
516
-
517
- const offsetTarget = focused ? 0 : FAR_FAR_AWAY;
518
-
519
- const top = sceneAnimationEnabled
520
- ? offsetsAnims[index].interpolate({
521
- inputRange: [0, 1],
522
- outputRange: [0, offsetTarget],
523
- })
524
- : offsetTarget;
525
-
526
- const left =
527
- sceneAnimationType === 'shifting'
528
- ? tabsPositionAnims[index].interpolate({
529
- inputRange: [-1, 0, 1],
530
- outputRange: [-50, 0, 50],
531
- })
532
- : 0;
533
-
534
- const zIndex = focused ? 1 : 0;
535
-
536
- return (
537
- <BottomNavigationRouteScreen
538
- key={route.key}
539
- pointerEvents={focused ? 'auto' : 'none'}
540
- accessibilityElementsHidden={!focused}
541
- importantForAccessibility={
542
- focused ? 'auto' : 'no-hide-descendants'
543
- }
544
- index={index}
545
- visibility={opacity}
546
- style={[StyleSheet.absoluteFill, { zIndex }]}
547
- collapsable={false}
548
- removeClippedSubviews={
549
- // On iOS, set removeClippedSubviews to true only when not focused
550
- // This is an workaround for a bug where the clipped view never re-appears
551
- Platform.OS === 'ios' ? navigationState.index !== index : true
552
- }
553
- >
554
- <Animated.View
555
- {...(Platform.OS === 'android' && {
556
- needsOffscreenAlphaCompositing: countAlphaOffscreen,
557
- })}
558
- renderToHardwareTextureAndroid={renderToHardwareTextureAndroid}
559
- style={[
560
- styles.content,
561
- {
562
- opacity,
563
- transform: [{ translateX: left }, { translateY: top }],
564
- },
565
- ]}
566
- >
567
- {renderScene({ route, jumpTo })}
568
- </Animated.View>
569
- </BottomNavigationRouteScreen>
570
- );
571
- })}
572
- </View>
573
- <BottomNavigationBar
574
- navigationState={navigationState}
575
- renderIcon={renderIcon}
576
- renderLabel={renderLabel}
577
- renderTouchable={renderTouchable}
578
- getLabelText={getLabelText}
579
- getBadge={getBadge}
580
- getColor={getColor}
581
- getAccessibilityLabel={getAccessibilityLabel}
582
- getTestID={getTestID}
583
- activeColor={activeColor}
584
- inactiveColor={inactiveColor}
585
- keyboardHidesNavigationBar={keyboardHidesNavigationBar}
586
- style={barStyle}
587
- activeIndicatorStyle={activeIndicatorStyle}
588
- labeled={labeled}
589
- animationEasing={sceneAnimationEasing}
590
- onTabPress={handleTabPress}
591
- onTabLongPress={onTabLongPress}
592
- shifting={shifting}
593
- safeAreaInsets={safeAreaInsets}
594
- labelMaxFontSizeMultiplier={labelMaxFontSizeMultiplier}
595
- compact={compact}
596
- testID={`${testID}-bar`}
597
- theme={theme}
598
- />
599
- </View>
600
- );
601
- };
602
-
603
- /**
604
- * Function which takes a map of route keys to components.
605
- * Pure components are used to minimize re-rendering of the pages.
606
- * This drastically improves the animation performance.
607
- */
608
- BottomNavigation.SceneMap = <Route extends BaseRoute>(scenes: {
609
- [key: string]: React.ComponentType<{
610
- route: Route;
611
- jumpTo: (key: string) => void;
612
- }>;
613
- }) => {
614
- return ({
615
- route,
616
- jumpTo,
617
- }: {
618
- route: Route;
619
- jumpTo: (key: string) => void;
620
- }) => (
621
- <SceneComponent
622
- key={route.key}
623
- component={scenes[route.key ? route.key : '']}
624
- route={route}
625
- jumpTo={jumpTo}
626
- />
627
- );
628
- };
629
-
630
- // @component ./BottomNavigationBar.tsx
631
- BottomNavigation.Bar = BottomNavigationBar;
632
-
633
- export default BottomNavigation;
634
-
635
- const styles = StyleSheet.create({
636
- container: {
637
- flex: 1,
638
- overflow: 'hidden',
639
- },
640
- content: {
641
- flex: 1,
642
- },
643
- });