react-native-acoustic-connect 19.0.11 → 19.0.34

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 (380) hide show
  1. package/CHANGELOG.md +111 -0
  2. package/ConnectConfig.example.json +1 -1
  3. package/README.md +426 -3
  4. package/android/build.gradle +119 -3
  5. package/android/config.gradle +123 -13
  6. package/android/src/main/assets/ConnectAdvancedConfig.json +1 -1
  7. package/android/src/main/assets/EOCoreAdvancedConfig.json +1 -1
  8. package/android/src/main/assets/TealeafAdvancedConfig.json +1 -1
  9. package/android/src/main/java/com/acousticconnectrn/HybridAcousticConnectRN.kt +457 -37
  10. package/app.plugin.js +2 -2
  11. package/ios/AcousticConnectRNConfig.json +2 -2
  12. package/ios/ConnectRNParsing.swift +229 -0
  13. package/ios/HybridAcousticConnectRN.swift +290 -30
  14. package/lib/commonjs/TLTRN.js +116 -3
  15. package/lib/commonjs/TLTRN.js.map +1 -1
  16. package/lib/commonjs/components/Connect.js +145 -27
  17. package/lib/commonjs/components/Connect.js.map +1 -1
  18. package/lib/commonjs/index.js +3 -0
  19. package/lib/commonjs/index.js.map +1 -1
  20. package/lib/module/TLTRN.js +116 -3
  21. package/lib/module/TLTRN.js.map +1 -1
  22. package/lib/module/components/Connect.js +146 -28
  23. package/lib/module/components/Connect.js.map +1 -1
  24. package/lib/module/index.js +5 -0
  25. package/lib/module/index.js.map +1 -1
  26. package/lib/typescript/src/TLTRN.d.ts +85 -1
  27. package/lib/typescript/src/TLTRN.d.ts.map +1 -1
  28. package/lib/typescript/src/components/Connect.d.ts.map +1 -1
  29. package/lib/typescript/src/index.d.ts +1 -0
  30. package/lib/typescript/src/index.d.ts.map +1 -1
  31. package/lib/typescript/src/specs/react-native-acoustic-connect.nitro.d.ts +190 -10
  32. package/lib/typescript/src/specs/react-native-acoustic-connect.nitro.d.ts.map +1 -1
  33. package/nitrogen/generated/android/c++/JHybridAcousticConnectRNSpec.cpp +5 -9
  34. package/nitrogen/generated/android/c++/JHybridAcousticConnectRNSpec.hpp +1 -1
  35. package/nitrogen/generated/android/kotlin/com/margelo/nitro/acousticconnectrn/HybridAcousticConnectRNSpec.kt +2 -1
  36. package/nitrogen/generated/ios/AcousticConnectRN-Swift-Cxx-Umbrella.hpp +1 -0
  37. package/nitrogen/generated/ios/c++/HybridAcousticConnectRNSpecSwift.hpp +2 -1
  38. package/nitrogen/generated/ios/swift/HybridAcousticConnectRNSpec.swift +1 -1
  39. package/nitrogen/generated/ios/swift/HybridAcousticConnectRNSpec_cxx.swift +2 -25
  40. package/nitrogen/generated/shared/c++/HybridAcousticConnectRNSpec.hpp +2 -1
  41. package/package.json +6 -8
  42. package/plugin/build/withConnectAndroidConfig.d.ts +2 -2
  43. package/plugin/build/withConnectAndroidConfig.js +2 -2
  44. package/plugin/build/withConnectIosSigning.d.ts +1 -1
  45. package/plugin/build/withConnectIosSigning.js +1 -1
  46. package/plugin/src/withConnectAndroidConfig.ts +2 -2
  47. package/plugin/src/withConnectIosSigning.ts +1 -1
  48. package/scripts/gradleParser.js +1 -1
  49. package/src/TLTRN.ts +125 -4
  50. package/src/components/Connect.tsx +150 -27
  51. package/src/index.ts +5 -0
  52. package/src/specs/react-native-acoustic-connect.nitro.ts +192 -10
  53. package/Examples/SampleUI/.bundle/config +0 -2
  54. package/Examples/SampleUI/.detoxrc.js +0 -83
  55. package/Examples/SampleUI/.eslintrc.js +0 -4
  56. package/Examples/SampleUI/.prettierrc.js +0 -7
  57. package/Examples/SampleUI/.watchmanconfig +0 -1
  58. package/Examples/SampleUI/App.js +0 -1
  59. package/Examples/SampleUI/Gemfile +0 -10
  60. package/Examples/SampleUI/Gemfile.lock +0 -121
  61. package/Examples/SampleUI/README.md +0 -79
  62. package/Examples/SampleUI/__tests__/App.test.tsx +0 -17
  63. package/Examples/SampleUI/android/app/build.gradle +0 -129
  64. package/Examples/SampleUI/android/app/debug.keystore +0 -0
  65. package/Examples/SampleUI/android/app/proguard-rules.pro +0 -10
  66. package/Examples/SampleUI/android/app/src/debug/AndroidManifest.xml +0 -9
  67. package/Examples/SampleUI/android/app/src/main/AndroidManifest.xml +0 -31
  68. package/Examples/SampleUI/android/app/src/main/java/com/sampleui/MainActivity.kt +0 -30
  69. package/Examples/SampleUI/android/app/src/main/java/com/sampleui/MainApplication.kt +0 -53
  70. package/Examples/SampleUI/android/app/src/main/res/drawable/rn_edit_text_material.xml +0 -37
  71. package/Examples/SampleUI/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  72. package/Examples/SampleUI/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  73. package/Examples/SampleUI/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  74. package/Examples/SampleUI/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  75. package/Examples/SampleUI/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  76. package/Examples/SampleUI/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  77. package/Examples/SampleUI/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  78. package/Examples/SampleUI/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  79. package/Examples/SampleUI/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  80. package/Examples/SampleUI/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  81. package/Examples/SampleUI/android/app/src/main/res/values/strings.xml +0 -3
  82. package/Examples/SampleUI/android/app/src/main/res/values/styles.xml +0 -9
  83. package/Examples/SampleUI/android/build.gradle +0 -21
  84. package/Examples/SampleUI/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  85. package/Examples/SampleUI/android/gradle/wrapper/gradle-wrapper.properties +0 -7
  86. package/Examples/SampleUI/android/gradle.properties +0 -39
  87. package/Examples/SampleUI/android/gradlew +0 -252
  88. package/Examples/SampleUI/android/gradlew.bat +0 -94
  89. package/Examples/SampleUI/android/settings.gradle +0 -21
  90. package/Examples/SampleUI/app.json +0 -51
  91. package/Examples/SampleUI/assets/fonts/Abel-Regular.ttf +0 -0
  92. package/Examples/SampleUI/assets/fonts/NotoSans-Regular.ttf +0 -0
  93. package/Examples/SampleUI/assets/images/android-icon.png +0 -0
  94. package/Examples/SampleUI/assets/images/artist-1.jpg +0 -0
  95. package/Examples/SampleUI/assets/images/artist-2.jpg +0 -0
  96. package/Examples/SampleUI/assets/images/avatar.png +0 -0
  97. package/Examples/SampleUI/assets/images/beach.jpg +0 -0
  98. package/Examples/SampleUI/assets/images/bridge.jpg +0 -0
  99. package/Examples/SampleUI/assets/images/chameleon.jpg +0 -0
  100. package/Examples/SampleUI/assets/images/city.jpg +0 -0
  101. package/Examples/SampleUI/assets/images/email-icon.png +0 -0
  102. package/Examples/SampleUI/assets/images/favorite.png +0 -0
  103. package/Examples/SampleUI/assets/images/forest.jpg +0 -0
  104. package/Examples/SampleUI/assets/images/paper-icon.png +0 -0
  105. package/Examples/SampleUI/assets/images/players-2.jpg +0 -0
  106. package/Examples/SampleUI/assets/images/players.jpg +0 -0
  107. package/Examples/SampleUI/assets/images/restaurant-1.jpg +0 -0
  108. package/Examples/SampleUI/assets/images/restaurant-2.jpg +0 -0
  109. package/Examples/SampleUI/assets/images/song-1.jpg +0 -0
  110. package/Examples/SampleUI/assets/images/song-2.jpg +0 -0
  111. package/Examples/SampleUI/assets/images/splash.png +0 -0
  112. package/Examples/SampleUI/assets/images/strawberries.jpg +0 -0
  113. package/Examples/SampleUI/assets/images/wrecked-ship.jpg +0 -0
  114. package/Examples/SampleUI/assets/styles/fonts.css +0 -47
  115. package/Examples/SampleUI/babel.config.js +0 -22
  116. package/Examples/SampleUI/index.js +0 -9
  117. package/Examples/SampleUI/ios/.xcode.env +0 -11
  118. package/Examples/SampleUI/ios/Podfile +0 -71
  119. package/Examples/SampleUI/ios/Podfile.lock +0 -2276
  120. package/Examples/SampleUI/ios/SampleUI/AppDelegate.h +0 -7
  121. package/Examples/SampleUI/ios/SampleUI/AppDelegate.mm +0 -31
  122. package/Examples/SampleUI/ios/SampleUI/Images.xcassets/AppIcon.appiconset/Contents.json +0 -53
  123. package/Examples/SampleUI/ios/SampleUI/Images.xcassets/Contents.json +0 -6
  124. package/Examples/SampleUI/ios/SampleUI/Info.plist +0 -52
  125. package/Examples/SampleUI/ios/SampleUI/LaunchScreen.storyboard +0 -47
  126. package/Examples/SampleUI/ios/SampleUI/PrivacyInfo.xcprivacy +0 -48
  127. package/Examples/SampleUI/ios/SampleUI/main.m +0 -10
  128. package/Examples/SampleUI/ios/SampleUI.xcodeproj/project.pbxproj +0 -785
  129. package/Examples/SampleUI/ios/SampleUI.xcodeproj/xcshareddata/xcschemes/SampleUI.xcscheme +0 -105
  130. package/Examples/SampleUI/ios/SampleUI.xcworkspace/contents.xcworkspacedata +0 -10
  131. package/Examples/SampleUI/ios/SampleUITests/Info.plist +0 -24
  132. package/Examples/SampleUI/ios/SampleUITests/SampleUITests.m +0 -66
  133. package/Examples/SampleUI/jest.config.js +0 -3
  134. package/Examples/SampleUI/metro.config.js +0 -54
  135. package/Examples/SampleUI/package.json +0 -65
  136. package/Examples/SampleUI/scripts/integration-test-android.sh +0 -292
  137. package/Examples/SampleUI/src/DrawerItems.tsx +0 -322
  138. package/Examples/SampleUI/src/ExampleList.tsx +0 -175
  139. package/Examples/SampleUI/src/Examples/ActivityIndicatorExample.tsx +0 -73
  140. package/Examples/SampleUI/src/Examples/AnimatedFABExample/AnimatedFABExample.tsx +0 -220
  141. package/Examples/SampleUI/src/Examples/AnimatedFABExample/CustomFAB.tsx +0 -70
  142. package/Examples/SampleUI/src/Examples/AnimatedFABExample/CustomFABControls.tsx +0 -146
  143. package/Examples/SampleUI/src/Examples/AnimatedFABExample/index.ts +0 -1
  144. package/Examples/SampleUI/src/Examples/AppbarExample.tsx +0 -263
  145. package/Examples/SampleUI/src/Examples/AvatarExample.tsx +0 -76
  146. package/Examples/SampleUI/src/Examples/BadgeExample.tsx +0 -97
  147. package/Examples/SampleUI/src/Examples/BannerExample.tsx +0 -152
  148. package/Examples/SampleUI/src/Examples/BottomNavigationBarExample.tsx +0 -94
  149. package/Examples/SampleUI/src/Examples/BottomNavigationExample.tsx +0 -205
  150. package/Examples/SampleUI/src/Examples/ButtonExample.tsx +0 -405
  151. package/Examples/SampleUI/src/Examples/CardExample.tsx +0 -245
  152. package/Examples/SampleUI/src/Examples/CheckboxExample.tsx +0 -87
  153. package/Examples/SampleUI/src/Examples/CheckboxItemExample.tsx +0 -72
  154. package/Examples/SampleUI/src/Examples/ChipExample.tsx +0 -432
  155. package/Examples/SampleUI/src/Examples/DataTableExample.tsx +0 -128
  156. package/Examples/SampleUI/src/Examples/DialogExample.tsx +0 -217
  157. package/Examples/SampleUI/src/Examples/Dialogs/DialogTextComponent.tsx +0 -31
  158. package/Examples/SampleUI/src/Examples/Dialogs/DialogTrackingTest.tsx +0 -307
  159. package/Examples/SampleUI/src/Examples/Dialogs/DialogWithCustomColors.tsx +0 -57
  160. package/Examples/SampleUI/src/Examples/Dialogs/DialogWithDismissableBackButton.tsx +0 -38
  161. package/Examples/SampleUI/src/Examples/Dialogs/DialogWithIcon.tsx +0 -42
  162. package/Examples/SampleUI/src/Examples/Dialogs/DialogWithLoadingIndicator.tsx +0 -48
  163. package/Examples/SampleUI/src/Examples/Dialogs/DialogWithLongText.tsx +0 -81
  164. package/Examples/SampleUI/src/Examples/Dialogs/DialogWithRadioBtns.tsx +0 -111
  165. package/Examples/SampleUI/src/Examples/Dialogs/UndismissableDialog.tsx +0 -30
  166. package/Examples/SampleUI/src/Examples/Dialogs/index.tsx +0 -44
  167. package/Examples/SampleUI/src/Examples/DividerExample.tsx +0 -30
  168. package/Examples/SampleUI/src/Examples/FABExample.tsx +0 -226
  169. package/Examples/SampleUI/src/Examples/IconButtonExample.tsx +0 -230
  170. package/Examples/SampleUI/src/Examples/IconExample.tsx +0 -50
  171. package/Examples/SampleUI/src/Examples/ListAccordionExample.tsx +0 -65
  172. package/Examples/SampleUI/src/Examples/ListAccordionGroupExample.tsx +0 -80
  173. package/Examples/SampleUI/src/Examples/ListItemExample.tsx +0 -310
  174. package/Examples/SampleUI/src/Examples/ListSectionExample.tsx +0 -159
  175. package/Examples/SampleUI/src/Examples/MaterialBottomTabNavigatorExample.tsx +0 -87
  176. package/Examples/SampleUI/src/Examples/MenuExample.tsx +0 -211
  177. package/Examples/SampleUI/src/Examples/ProgressBarExample.tsx +0 -142
  178. package/Examples/SampleUI/src/Examples/RadioButtonExample.tsx +0 -104
  179. package/Examples/SampleUI/src/Examples/RadioButtonGroupExample.tsx +0 -67
  180. package/Examples/SampleUI/src/Examples/RadioButtonItemExample.tsx +0 -77
  181. package/Examples/SampleUI/src/Examples/SearchbarExample.tsx +0 -249
  182. package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonCustomColorCheck.tsx +0 -93
  183. package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonDefault.tsx +0 -49
  184. package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonDisabled.tsx +0 -47
  185. package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonMultiselect.tsx +0 -50
  186. package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonMultiselectIcons.tsx +0 -49
  187. package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonMultiselectRealCase.tsx +0 -114
  188. package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonOnlyIcons.tsx +0 -40
  189. package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonOnlyIconsWithCheck.tsx +0 -43
  190. package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonRealCase.tsx +0 -97
  191. package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonWithDensity.tsx +0 -47
  192. package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonWithSelectedCheck.tsx +0 -52
  193. package/Examples/SampleUI/src/Examples/SegmentedButtons/index.ts +0 -9
  194. package/Examples/SampleUI/src/Examples/SegmentedButtonsExample.tsx +0 -57
  195. package/Examples/SampleUI/src/Examples/SnackbarExample.tsx +0 -141
  196. package/Examples/SampleUI/src/Examples/SurfaceExample.tsx +0 -130
  197. package/Examples/SampleUI/src/Examples/SwitchExample.tsx +0 -105
  198. package/Examples/SampleUI/src/Examples/TeamDetails.tsx +0 -291
  199. package/Examples/SampleUI/src/Examples/TeamsList.tsx +0 -57
  200. package/Examples/SampleUI/src/Examples/TextExample.tsx +0 -132
  201. package/Examples/SampleUI/src/Examples/TextInputExample.tsx +0 -914
  202. package/Examples/SampleUI/src/Examples/ThemeExample.tsx +0 -41
  203. package/Examples/SampleUI/src/Examples/ThemingWithReactNavigation.tsx +0 -75
  204. package/Examples/SampleUI/src/Examples/ToggleButtonExample.tsx +0 -128
  205. package/Examples/SampleUI/src/Examples/TooltipExample.tsx +0 -191
  206. package/Examples/SampleUI/src/Examples/TouchableRippleExample.tsx +0 -37
  207. package/Examples/SampleUI/src/RootNavigator.tsx +0 -95
  208. package/Examples/SampleUI/src/ScreenWrapper.tsx +0 -67
  209. package/Examples/SampleUI/src/components/ActivityIndicator.tsx +0 -254
  210. package/Examples/SampleUI/src/components/Appbar/Appbar.tsx +0 -364
  211. package/Examples/SampleUI/src/components/Appbar/AppbarAction.tsx +0 -132
  212. package/Examples/SampleUI/src/components/Appbar/AppbarBackAction.tsx +0 -77
  213. package/Examples/SampleUI/src/components/Appbar/AppbarBackIcon.tsx +0 -52
  214. package/Examples/SampleUI/src/components/Appbar/AppbarContent.tsx +0 -249
  215. package/Examples/SampleUI/src/components/Appbar/AppbarHeader.tsx +0 -174
  216. package/Examples/SampleUI/src/components/Appbar/index.ts +0 -22
  217. package/Examples/SampleUI/src/components/Appbar/utils.ts +0 -188
  218. package/Examples/SampleUI/src/components/Avatar/Avatar.tsx +0 -8
  219. package/Examples/SampleUI/src/components/Avatar/AvatarIcon.tsx +0 -87
  220. package/Examples/SampleUI/src/components/Avatar/AvatarImage.tsx +0 -128
  221. package/Examples/SampleUI/src/components/Avatar/AvatarText.tsx +0 -127
  222. package/Examples/SampleUI/src/components/Badge.tsx +0 -138
  223. package/Examples/SampleUI/src/components/Banner.tsx +0 -302
  224. package/Examples/SampleUI/src/components/BottomNavigation/BottomNavigation.tsx +0 -643
  225. package/Examples/SampleUI/src/components/BottomNavigation/BottomNavigationBar.tsx +0 -1039
  226. package/Examples/SampleUI/src/components/BottomNavigation/BottomNavigationRouteScreen.tsx +0 -31
  227. package/Examples/SampleUI/src/components/BottomNavigation/utils.ts +0 -70
  228. package/Examples/SampleUI/src/components/Button/Button.tsx +0 -503
  229. package/Examples/SampleUI/src/components/Button/utils.tsx +0 -272
  230. package/Examples/SampleUI/src/components/Card/Card.tsx +0 -373
  231. package/Examples/SampleUI/src/components/Card/CardActions.tsx +0 -74
  232. package/Examples/SampleUI/src/components/Card/CardContent.tsx +0 -99
  233. package/Examples/SampleUI/src/components/Card/CardCover.tsx +0 -96
  234. package/Examples/SampleUI/src/components/Card/CardTitle.tsx +0 -236
  235. package/Examples/SampleUI/src/components/Card/utils.tsx +0 -110
  236. package/Examples/SampleUI/src/components/Checkbox/Checkbox.tsx +0 -78
  237. package/Examples/SampleUI/src/components/Checkbox/CheckboxAndroid.tsx +0 -180
  238. package/Examples/SampleUI/src/components/Checkbox/CheckboxIOS.tsx +0 -104
  239. package/Examples/SampleUI/src/components/Checkbox/CheckboxItem.tsx +0 -236
  240. package/Examples/SampleUI/src/components/Checkbox/index.ts +0 -19
  241. package/Examples/SampleUI/src/components/Checkbox/utils.ts +0 -183
  242. package/Examples/SampleUI/src/components/Chip/Chip.tsx +0 -513
  243. package/Examples/SampleUI/src/components/Chip/helpers.tsx +0 -322
  244. package/Examples/SampleUI/src/components/CrossFadeIcon.tsx +0 -140
  245. package/Examples/SampleUI/src/components/DataTable/DataTable.tsx +0 -138
  246. package/Examples/SampleUI/src/components/DataTable/DataTableCell.tsx +0 -132
  247. package/Examples/SampleUI/src/components/DataTable/DataTableHeader.tsx +0 -82
  248. package/Examples/SampleUI/src/components/DataTable/DataTablePagination.tsx +0 -407
  249. package/Examples/SampleUI/src/components/DataTable/DataTableRow.tsx +0 -107
  250. package/Examples/SampleUI/src/components/DataTable/DataTableTitle.tsx +0 -208
  251. package/Examples/SampleUI/src/components/Dialog/Dialog.tsx +0 -191
  252. package/Examples/SampleUI/src/components/Dialog/DialogActions.tsx +0 -94
  253. package/Examples/SampleUI/src/components/Dialog/DialogContent.tsx +0 -54
  254. package/Examples/SampleUI/src/components/Dialog/DialogIcon.tsx +0 -100
  255. package/Examples/SampleUI/src/components/Dialog/DialogScrollArea.tsx +0 -88
  256. package/Examples/SampleUI/src/components/Dialog/DialogTitle.tsx +0 -94
  257. package/Examples/SampleUI/src/components/Divider.tsx +0 -102
  258. package/Examples/SampleUI/src/components/Drawer/Drawer.tsx +0 -8
  259. package/Examples/SampleUI/src/components/Drawer/DrawerCollapsedItem.tsx +0 -282
  260. package/Examples/SampleUI/src/components/Drawer/DrawerItem.tsx +0 -209
  261. package/Examples/SampleUI/src/components/Drawer/DrawerSection.tsx +0 -138
  262. package/Examples/SampleUI/src/components/FAB/AnimatedFAB.tsx +0 -619
  263. package/Examples/SampleUI/src/components/FAB/FAB.tsx +0 -371
  264. package/Examples/SampleUI/src/components/FAB/FABGroup.tsx +0 -532
  265. package/Examples/SampleUI/src/components/FAB/index.ts +0 -13
  266. package/Examples/SampleUI/src/components/FAB/utils.ts +0 -474
  267. package/Examples/SampleUI/src/components/HelperText/HelperText.tsx +0 -168
  268. package/Examples/SampleUI/src/components/HelperText/utils.ts +0 -30
  269. package/Examples/SampleUI/src/components/Icon.tsx +0 -170
  270. package/Examples/SampleUI/src/components/IconButton/IconButton.tsx +0 -234
  271. package/Examples/SampleUI/src/components/IconButton/utils.ts +0 -190
  272. package/Examples/SampleUI/src/components/List/List.tsx +0 -20
  273. package/Examples/SampleUI/src/components/List/ListAccordion.tsx +0 -391
  274. package/Examples/SampleUI/src/components/List/ListAccordionGroup.tsx +0 -88
  275. package/Examples/SampleUI/src/components/List/ListIcon.tsx +0 -79
  276. package/Examples/SampleUI/src/components/List/ListImage.tsx +0 -89
  277. package/Examples/SampleUI/src/components/List/ListItem.tsx +0 -313
  278. package/Examples/SampleUI/src/components/List/ListSection.tsx +0 -87
  279. package/Examples/SampleUI/src/components/List/ListSubheader.tsx +0 -79
  280. package/Examples/SampleUI/src/components/List/utils.ts +0 -113
  281. package/Examples/SampleUI/src/components/MaterialCommunityIcon.tsx +0 -121
  282. package/Examples/SampleUI/src/components/Menu/Menu.tsx +0 -711
  283. package/Examples/SampleUI/src/components/Menu/MenuItem.tsx +0 -257
  284. package/Examples/SampleUI/src/components/Menu/utils.ts +0 -110
  285. package/Examples/SampleUI/src/components/Modal.tsx +0 -245
  286. package/Examples/SampleUI/src/components/Portal/Portal.tsx +0 -69
  287. package/Examples/SampleUI/src/components/Portal/PortalConsumer.tsx +0 -44
  288. package/Examples/SampleUI/src/components/Portal/PortalHost.tsx +0 -143
  289. package/Examples/SampleUI/src/components/Portal/PortalManager.tsx +0 -54
  290. package/Examples/SampleUI/src/components/ProgressBar.tsx +0 -292
  291. package/Examples/SampleUI/src/components/RadioButton/RadioButton.tsx +0 -86
  292. package/Examples/SampleUI/src/components/RadioButton/RadioButtonAndroid.tsx +0 -202
  293. package/Examples/SampleUI/src/components/RadioButton/RadioButtonGroup.tsx +0 -67
  294. package/Examples/SampleUI/src/components/RadioButton/RadioButtonIOS.tsx +0 -130
  295. package/Examples/SampleUI/src/components/RadioButton/RadioButtonItem.tsx +0 -268
  296. package/Examples/SampleUI/src/components/RadioButton/index.ts +0 -22
  297. package/Examples/SampleUI/src/components/RadioButton/utils.ts +0 -37
  298. package/Examples/SampleUI/src/components/Searchbar.tsx +0 -459
  299. package/Examples/SampleUI/src/components/SegmentedButtons/SegmentedButtonItem.tsx +0 -271
  300. package/Examples/SampleUI/src/components/SegmentedButtons/SegmentedButtons.tsx +0 -197
  301. package/Examples/SampleUI/src/components/SegmentedButtons/utils.ts +0 -179
  302. package/Examples/SampleUI/src/components/Snackbar.tsx +0 -430
  303. package/Examples/SampleUI/src/components/Surface.tsx +0 -376
  304. package/Examples/SampleUI/src/components/Switch/Switch.tsx +0 -108
  305. package/Examples/SampleUI/src/components/Switch/utils.ts +0 -113
  306. package/Examples/SampleUI/src/components/TextInput/Addons/Outline.tsx +0 -64
  307. package/Examples/SampleUI/src/components/TextInput/Addons/Underline.tsx +0 -78
  308. package/Examples/SampleUI/src/components/TextInput/Adornment/TextInputAdornment.tsx +0 -208
  309. package/Examples/SampleUI/src/components/TextInput/Adornment/TextInputAffix.tsx +0 -212
  310. package/Examples/SampleUI/src/components/TextInput/Adornment/TextInputIcon.tsx +0 -195
  311. package/Examples/SampleUI/src/components/TextInput/Adornment/enums.tsx +0 -12
  312. package/Examples/SampleUI/src/components/TextInput/Adornment/types.tsx +0 -11
  313. package/Examples/SampleUI/src/components/TextInput/Adornment/utils.ts +0 -48
  314. package/Examples/SampleUI/src/components/TextInput/Label/InputLabel.tsx +0 -217
  315. package/Examples/SampleUI/src/components/TextInput/Label/LabelBackground.tsx +0 -100
  316. package/Examples/SampleUI/src/components/TextInput/TextInput.tsx +0 -572
  317. package/Examples/SampleUI/src/components/TextInput/TextInputFlat.tsx +0 -475
  318. package/Examples/SampleUI/src/components/TextInput/TextInputOutlined.tsx +0 -450
  319. package/Examples/SampleUI/src/components/TextInput/constants.tsx +0 -48
  320. package/Examples/SampleUI/src/components/TextInput/helpers.tsx +0 -612
  321. package/Examples/SampleUI/src/components/TextInput/types.tsx +0 -155
  322. package/Examples/SampleUI/src/components/ToggleButton/ToggleButton.tsx +0 -187
  323. package/Examples/SampleUI/src/components/ToggleButton/ToggleButtonGroup.tsx +0 -72
  324. package/Examples/SampleUI/src/components/ToggleButton/ToggleButtonRow.tsx +0 -107
  325. package/Examples/SampleUI/src/components/ToggleButton/index.ts +0 -16
  326. package/Examples/SampleUI/src/components/ToggleButton/utils.ts +0 -26
  327. package/Examples/SampleUI/src/components/Tooltip/Tooltip.tsx +0 -249
  328. package/Examples/SampleUI/src/components/Tooltip/utils.ts +0 -129
  329. package/Examples/SampleUI/src/components/TouchableRipple/Pressable.tsx +0 -41
  330. package/Examples/SampleUI/src/components/TouchableRipple/TouchableRipple.native.tsx +0 -145
  331. package/Examples/SampleUI/src/components/TouchableRipple/TouchableRipple.tsx +0 -317
  332. package/Examples/SampleUI/src/components/TouchableRipple/utils.ts +0 -66
  333. package/Examples/SampleUI/src/components/Typography/AnimatedText.tsx +0 -107
  334. package/Examples/SampleUI/src/components/Typography/Text.tsx +0 -184
  335. package/Examples/SampleUI/src/components/Typography/types.tsx +0 -5
  336. package/Examples/SampleUI/src/components/Typography/v2/Caption.tsx +0 -50
  337. package/Examples/SampleUI/src/components/Typography/v2/Headline.tsx +0 -52
  338. package/Examples/SampleUI/src/components/Typography/v2/Paragraph.tsx +0 -49
  339. package/Examples/SampleUI/src/components/Typography/v2/StyledText.tsx +0 -56
  340. package/Examples/SampleUI/src/components/Typography/v2/Subheading.tsx +0 -50
  341. package/Examples/SampleUI/src/components/Typography/v2/Text.tsx +0 -62
  342. package/Examples/SampleUI/src/components/Typography/v2/Title.tsx +0 -49
  343. package/Examples/SampleUI/src/components/Typography/v2/index.ts +0 -5
  344. package/Examples/SampleUI/src/core/PaperProvider.tsx +0 -122
  345. package/Examples/SampleUI/src/core/SafeAreaProviderCompat.tsx +0 -65
  346. package/Examples/SampleUI/src/core/settings.tsx +0 -23
  347. package/Examples/SampleUI/src/core/theming.tsx +0 -170
  348. package/Examples/SampleUI/src/index.native.tsx +0 -285
  349. package/Examples/SampleUI/src/index.tsx +0 -226
  350. package/Examples/SampleUI/src/react-navigation/index.tsx +0 -19
  351. package/Examples/SampleUI/src/react-navigation/navigators/createMaterialBottomTabNavigator.tsx +0 -72
  352. package/Examples/SampleUI/src/react-navigation/types.tsx +0 -126
  353. package/Examples/SampleUI/src/react-navigation/views/MaterialBottomTabView.tsx +0 -140
  354. package/Examples/SampleUI/src/styles/__tests__/fonts.test.js +0 -290
  355. package/Examples/SampleUI/src/styles/fonts.tsx +0 -143
  356. package/Examples/SampleUI/src/styles/overlay.tsx +0 -70
  357. package/Examples/SampleUI/src/styles/shadow.tsx +0 -109
  358. package/Examples/SampleUI/src/styles/themes/index.ts +0 -4
  359. package/Examples/SampleUI/src/styles/themes/v2/DarkTheme.tsx +0 -30
  360. package/Examples/SampleUI/src/styles/themes/v2/LightTheme.tsx +0 -30
  361. package/Examples/SampleUI/src/styles/themes/v2/colors.tsx +0 -277
  362. package/Examples/SampleUI/src/styles/themes/v3/DarkTheme.tsx +0 -66
  363. package/Examples/SampleUI/src/styles/themes/v3/LightTheme.tsx +0 -69
  364. package/Examples/SampleUI/src/styles/themes/v3/tokens.tsx +0 -230
  365. package/Examples/SampleUI/src/utils/BackHandler/BackHandler.native.tsx +0 -3
  366. package/Examples/SampleUI/src/utils/BackHandler/BackHandler.tsx +0 -11
  367. package/Examples/SampleUI/src/utils/addEventListener.tsx +0 -56
  368. package/Examples/SampleUI/src/utils/forwardRef.tsx +0 -23
  369. package/Examples/SampleUI/src/utils/getContrastingColor.tsx +0 -15
  370. package/Examples/SampleUI/src/utils/hasTouchHandler.tsx +0 -23
  371. package/Examples/SampleUI/src/utils/roundLayoutSize.ts +0 -2
  372. package/Examples/SampleUI/src/utils/splitStyles.ts +0 -60
  373. package/Examples/SampleUI/src/utils/useAnimatedValue.tsx +0 -9
  374. package/Examples/SampleUI/src/utils/useAnimatedValueArray.tsx +0 -13
  375. package/Examples/SampleUI/src/utils/useIsKeyboardShown.tsx +0 -55
  376. package/Examples/SampleUI/src/utils/useLayout.tsx +0 -29
  377. package/Examples/SampleUI/src/utils/useLazyRef.tsx +0 -11
  378. package/Examples/SampleUI/tsconfig.json +0 -3
  379. package/Examples/SampleUI/utils/index.ts +0 -1426
  380. package/cli/__tests__/doctor.test.mjs +0 -88
package/CHANGELOG.md CHANGED
@@ -1,3 +1,114 @@
1
+ ## 19.0.34 (2026-09-22)
2
+
3
+ ### Reverts
4
+
5
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
6
+ ## 19.0.33 (2026-09-22)
7
+
8
+ ### Reverts
9
+
10
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
11
+ ## 19.0.32 (2026-09-22)
12
+
13
+ ### Reverts
14
+
15
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
16
+ ## 19.0.31 (2026-09-22)
17
+
18
+ ### Reverts
19
+
20
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
21
+ ## 19.0.30 (2026-09-21)
22
+
23
+ ### Reverts
24
+
25
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
26
+ ## 19.0.29 (2026-09-17)
27
+
28
+ ### Reverts
29
+
30
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
31
+ ## 19.0.28 (2026-09-14)
32
+
33
+ ### Reverts
34
+
35
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
36
+ ## 19.0.27 (2026-09-14)
37
+
38
+ ### Reverts
39
+
40
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
41
+ ## 19.0.26 (2026-09-11)
42
+
43
+ ### Reverts
44
+
45
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
46
+ ## 19.0.25 (2026-09-11)
47
+
48
+ ### Reverts
49
+
50
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
51
+ ## 19.0.24 (2026-09-11)
52
+
53
+ ### Reverts
54
+
55
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
56
+ ## 19.0.23 (2026-09-10)
57
+
58
+ ### Reverts
59
+
60
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
61
+ ## 19.0.22 (2026-09-10)
62
+
63
+ ### Reverts
64
+
65
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
66
+ ## 19.0.21 (2026-09-09)
67
+
68
+ ### Reverts
69
+
70
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
71
+ ## 19.0.20 (2026-09-09)
72
+
73
+ ### Reverts
74
+
75
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
76
+ ## 19.0.19 (2026-09-08)
77
+
78
+ ### Reverts
79
+
80
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
81
+ ## 19.0.18 (2026-09-07)
82
+
83
+ ### Reverts
84
+
85
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
86
+ ## 19.0.17 (2026-09-02)
87
+
88
+ ### Reverts
89
+
90
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
91
+ ## 19.0.16 (2026-08-31)
92
+
93
+ ### Reverts
94
+
95
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
96
+ ## [19.0.15](https://github.com/go-acoustic/react-native-acoustic-connect/compare/19.0.14...19.0.15) (2026-08-24)
97
+ ## 19.0.14 (2026-07-31)
98
+
99
+ ### Reverts
100
+
101
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
102
+ ## 19.0.13 (2026-07-30)
103
+
104
+ ### Reverts
105
+
106
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
107
+ ## 19.0.12 (2026-07-09)
108
+
109
+ ### Reverts
110
+
111
+ * Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
1
112
  ## 19.0.11 (2026-07-07)
2
113
 
3
114
  ### Reverts
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "Connect": {
3
3
  "AndroidNotificationIconResName": "ic_notification",
4
- "AndroidVersion": "11.0.13",
4
+ "AndroidVersion": "11.0.36",
5
5
  "AppKey": "YOUR_CONNECT_APP_KEY_HERE",
6
6
  "KillSwitchUrl": "YOUR_KILL_SWITCH_URL_HERE",
7
7
  "PostMessageUrl": "YOUR_POST_MESSAGE_URL_HERE",
package/README.md CHANGED
@@ -13,6 +13,8 @@ For the full product overview see the
13
13
  - React 19.1.1 or newer (or whatever your RN version pins)
14
14
  - `react-native-nitro-modules` at the **exact** version this package pins in `peerDependencies` (currently **`0.35.9`**) — your app must resolve exactly this version; see [Nitro version pin](#nitro-version-pin)
15
15
  - Node 20 or newer
16
+ - JDK 17 or newer for Android builds — the same JDK React Native 0.82 itself
17
+ requires. The Android module compiles at Java 17; newer JDKs work.
16
18
  - iOS deployment target ≥ 15.1, AcousticConnect / AcousticConnectDebug pod ≥ 2.0.5
17
19
  - Android `minSdk` ≥ 26, `compileSdk` ≥ 35, `io.github.go-acoustic:connect` in `[11.0.11, 12.0.0)`
18
20
  - **Expo SDK 55+ is supported** via the bundled Expo Config Plugin —
@@ -104,6 +106,29 @@ directories, and re-running either command is safe. After install, run
104
106
  `npx acoustic-connect doctor` to validate the result — see
105
107
  [Setup CLI](#setup-cli-acoustic-connect) below.
106
108
 
109
+ ### Where the Android Connect SDK is resolved from
110
+
111
+ You don't need to add any repositories. This package's `android/build.gradle`
112
+ declares both of the ones it needs, and your app inherits them:
113
+
114
+ | Repository | Carries |
115
+ | --- | --- |
116
+ | [`go-acoustic/Android_Maven`](https://github.com/go-acoustic/Android_Maven) | Beta builds (`-beta` versions) |
117
+ | Maven Central | Release builds and the older version history |
118
+
119
+ Beta artifacts are published only to the GitHub-hosted repository, so a build
120
+ that does not declare it never sees them. When `AndroidVersion` is empty the
121
+ version is resolved dynamically, and Gradle takes the newest match across
122
+ *both* repositories — the beta repository does not need to be consulted first
123
+ for a new beta to win. It is scoped to the `io.github.go-acoustic` group, so
124
+ nothing else in your build is routed through it, and Maven Central still
125
+ answers for any version the beta repository does not carry.
126
+
127
+ This matters when you pin. Leaving `AndroidVersion` empty resolves the newest
128
+ version in the supported range across **both** repositories — which, for as
129
+ long as betas are the newest builds, means a `-beta`. Pin `AndroidVersion` to
130
+ a specific release if you would rather track Maven Central's release line.
131
+
107
132
  ## Setup CLI (`acoustic-connect`)
108
133
 
109
134
  The package ships a small CLI, installed as `acoustic-connect` (invoke it with
@@ -361,13 +386,26 @@ screen / touch / keyboard tracking) can skip it entirely.
361
386
  ### 3. Log events (imperative, anywhere)
362
387
 
363
388
  ```ts
364
- import AcousticConnectRN from 'react-native-acoustic-connect'
389
+ import AcousticConnectRN, { TLTRN } from 'react-native-acoustic-connect'
365
390
 
366
- // Custom application event
391
+ // Custom application event (flat key/value pairs)
367
392
  AcousticConnectRN.logCustomEvent('checkout_started', { cartId: 'abc' }, 1)
368
393
 
369
- // Force a logical screen name (e.g. for non-NavigationContainer screens)
394
+ // Signal — accepts arbitrary JSON, including nested objects and arrays
395
+ AcousticConnectRN.logSignal(
396
+ {
397
+ signalContent: { signalType: 'pageview', pageCategory: 'checkout' },
398
+ audience: [{ name: 'Account ID', value: '4815162342' }],
399
+ },
400
+ 1
401
+ )
402
+
403
+ // Force a logical screen name (e.g. for non-NavigationContainer screens).
404
+ // Sets the name that later events are attributed to — it does not itself emit
405
+ // a screen view or capture a layout. For a screen <Connect> cannot see, follow
406
+ // it with logScreenLayout, which does both.
370
407
  AcousticConnectRN.setCurrentScreenName('CheckoutScreen')
408
+ TLTRN.logScreenLayout('CheckoutScreen')
371
409
 
372
410
  // Manual exception capture
373
411
  AcousticConnectRN.logExceptionEvent(
@@ -385,6 +423,26 @@ for details.
385
423
 
386
424
  ## API reference
387
425
 
426
+ > **What the logging methods' `boolean` means.** Every `log*` method returns
427
+ > whether the native SDK **accepted the event for delivery** — never whether
428
+ > the collector received it, and never whether the collector kept it. Events
429
+ > are queued on device and posted in batches later, so no return value from
430
+ > these calls can attest to delivery, and a server-side rejection (a signal
431
+ > that fails schema validation, say) happens long after you have already been
432
+ > told `true`. Treat the value as "the SDK took this", and use the collector or
433
+ > the platform log as the source of truth for what shipped.
434
+ >
435
+ > A `false` means the SDK rejected the call outright and nothing was queued.
436
+ > The bridge also writes that to `logcat` (tag `AcousticConnectRN`) and
437
+ > `os_log` (subsystem `com.acoustic.AcousticConnectRN`, category `bridge`), so
438
+ > a rejection is visible without inspecting return values you would otherwise
439
+ > never read.
440
+ >
441
+ > `logScreenLayout` is weaker still: with the configured delay — the normal
442
+ > case — a `true` means only that the capture was **scheduled**. What the
443
+ > capture found when it eventually ran, and whether it produced a layout
444
+ > message at all, is reported in the platform log only.
445
+
388
446
  ### `AcousticConnectRN.enable(): boolean`
389
447
 
390
448
  Re-enables the SDK after a prior `disable()`. Reads all configuration from
@@ -401,6 +459,86 @@ already running.
401
459
 
402
460
  Stops data capture, flushes pending messages, releases push state. Idempotent.
403
461
 
462
+ ### `AcousticConnectRN.logSignal(values, level): boolean`
463
+
464
+ Logs a signal. `values` accepts **arbitrary JSON** — nested objects and arrays,
465
+ not just scalars — and the payload is carried through without flattening or
466
+ reshaping:
467
+
468
+ ```ts
469
+ AcousticConnectRN.logSignal(
470
+ {
471
+ signalContent: {
472
+ signalType: 'pageview',
473
+ url: 'https://app.example.com/dashboard',
474
+ pageCategory: 'dashboard',
475
+ },
476
+ audience: [
477
+ { name: 'Account Name', value: 'Acme Corp' },
478
+ { name: 'Account ID', value: '4815162342' },
479
+ ],
480
+ },
481
+ 1
482
+ )
483
+ ```
484
+
485
+ Flat scalar payloads keep working unchanged — the type is a superset of
486
+ `Record<string, string | number | boolean>`.
487
+
488
+ An object literal needs no type import. If you want to *name* a payload — a
489
+ shared constant, a helper parameter — the package exports `SignalValues` for it:
490
+
491
+ ```ts
492
+ import AcousticConnectRN, {
493
+ type SignalValues,
494
+ } from 'react-native-acoustic-connect'
495
+
496
+ const pageView: SignalValues = {
497
+ signalContent: { signalType: 'pageview', pageCategory: 'checkout' },
498
+ }
499
+
500
+ AcousticConnectRN.logSignal(pageView, 1)
501
+ ```
502
+
503
+ > **Android: top-level numbers need Connect Android 11.0.24-beta or newer.**
504
+ > Android's signal serializer gained a number branch in Connect Android
505
+ > **11.0.24-beta**; from that version a top-level numeric value is carried, the
506
+ > same as on iOS. Earlier versions carried strings, booleans, objects and arrays
507
+ > at the top level but dropped a top-level number. Numbers nested inside an
508
+ > object or array were never affected on either platform.
509
+ >
510
+ > Both versions sit inside the `[11.0.11, 12.0.0)` range this package accepts,
511
+ > and the Android dependency floats to the newest published build unless you pin
512
+ > it, so most integrations get the new behaviour. Nest the number if you pin an
513
+ > older one:
514
+ >
515
+ > ```ts
516
+ > AcousticConnectRN.logSignal({ cart: { items: 3 } }, 1) // any supported version
517
+ > AcousticConnectRN.logSignal({ items: 3 }, 1) // iOS, + Android 11.0.24-beta and newer
518
+ > ```
519
+
520
+ ### `AcousticConnectRN.logCustomEvent(eventName, values, level): boolean`
521
+
522
+ Logs a named custom event. Unlike `logSignal`, `values` is **flat** — strings,
523
+ numbers and booleans only. The Android SDK's custom-event path is typed for
524
+ string values end to end, so there is no native route for nested JSON; widening
525
+ it would preserve the nesting on iOS and silently drop it on Android. Use
526
+ `logSignal` when the payload needs structure.
527
+
528
+ TypeScript will reject a nested value, but types are erased at runtime — a
529
+ payload built from an API response or widened through `any` still reaches the
530
+ bridge nested, gets reshaped by the native SDK, and returns `true`. The wrapper
531
+ logs a `console.warn` naming the offending keys when that happens (once per
532
+ call site, in dev and in production; the payload itself is passed through
533
+ unchanged). If you see it, move the payload to `logSignal`.
534
+
535
+ Numbers are rendered the same way on both platforms — a JS `2` arrives as `2`,
536
+ not `2.0`. Note the remaining difference in *type*: because the Android path is
537
+ string-typed, an Android custom-event number lands on the wire as a JSON string
538
+ (`"2"`) where iOS sends a JSON number (`2`). `logSignal` carries native types on
539
+ both platforms; reach for it when a dashboard or Composer rule compares the
540
+ value numerically.
541
+
404
542
  ### Push configuration (`ConnectConfig.json`)
405
543
 
406
544
  | Field | Type | Default | Semantics |
@@ -436,6 +574,284 @@ The Android push-forwarding API itself is wired under follow-up work — until
436
574
  that lands, `PushEnabled: true` on Android only changes which artifact is on
437
575
  the classpath; the host-side token forwarding API is not yet exposed.
438
576
 
577
+ ### Screen-capture configuration (`ConnectConfig.json`)
578
+
579
+ Screen layout and screenshot capture are configured per platform, because the
580
+ two native SDKs read their defaults from different places.
581
+
582
+ | Field | Type | Default | Semantics |
583
+ | --- | --- | --- | --- |
584
+ | `layoutConfig` | object \| absent | absent | Shared baseline for both platforms. Supports `AutoLayout` (screen capture rules) and `AppendMapIds`. |
585
+ | `layoutConfigIos` | object \| absent | absent | iOS-specific overrides, deep-merged over `layoutConfig`. |
586
+ | `layoutConfigAndroid` | object \| absent | absent | Android-specific overrides, deep-merged over `layoutConfig`. |
587
+ | `GetImageDataOnScreenLayout` | boolean | SDK default | Cross-platform. When `false`, layout messages carry no screenshot image data. |
588
+
589
+ `AutoLayout` holds a `GlobalScreenSettings` object plus optional per-screen
590
+ overrides keyed by screen name, where a per-screen value wins over the global
591
+ one. To turn screenshot capture off on both platforms:
592
+
593
+ ```json
594
+ {
595
+ "Connect": {
596
+ "layoutConfig": {
597
+ "AutoLayout": {
598
+ "GlobalScreenSettings": { "ScreenShot": false }
599
+ }
600
+ }
601
+ }
602
+ }
603
+ ```
604
+
605
+ `ScreenShot` is the cross-platform switch — set it in `layoutConfig` (or per
606
+ platform) and both native SDKs honour it. `CaptureScreenshotOn` is a related
607
+ but **iOS-only** key: iOS's native auto-instrumentation reads it, but on
608
+ Android the equivalent reader has no callers, so `CaptureScreenshotOn` is
609
+ accepted wherever you put it and does nothing there. Set it only under
610
+ `layoutConfigIos` if you want it; leaving it out of `layoutConfigAndroid` (or
611
+ the shared `layoutConfig`) costs nothing on Android and avoids implying it
612
+ does something it doesn't.
613
+
614
+ Put anything common in `layoutConfig` and use `layoutConfigIos` /
615
+ `layoutConfigAndroid` only for what differs. The platform block is **deep-merged**
616
+ over the shared one, so it refines the baseline rather than replacing it: an
617
+ iOS block setting just `ScreenShot` keeps the shared `Masking`, per-screen
618
+ rules, and every other shared value. Arrays are replaced outright rather than
619
+ concatenated, so a platform block can shorten or clear a shared list such as
620
+ `MaskIdList`.
621
+
622
+ #### Masking is selection, then redaction — an unmatched pattern leaves data unmasked
623
+
624
+ A screen rule's `Masking` block works in two independent steps: a control is
625
+ first **selected** by a matching `MaskIdList` (control id), `MaskValueList`
626
+ (control value), `MaskAccessibilityIdList` (accessibility id), or
627
+ `MaskAccessibilityLabelList` (accessibility label) pattern, and only a
628
+ *selected* control is redacted — its value, and (Connect iOS 2.1.22+ / Android
629
+ 11.0.23-beta+ only — older SDKs serialised the accessibility object verbatim
630
+ regardless of masking) its accessibility label and hint. A control whose value
631
+ never matches any pattern in any of the four lists is not masked in any field.
632
+ That's by design, not a bug — but it means a client whose patterns don't
633
+ happen to match a given value can believe that value is masked when it never
634
+ was.
635
+
636
+ Email addresses are an easy miss: they rarely match a card-number or
637
+ `SECRET-`-style pattern, and free-text fields (bios, support messages,
638
+ usernames) routinely contain one. For any screen that collects email
639
+ addresses, add a pattern to `MaskValueList`:
640
+
641
+ ```json
642
+ { "MaskValueList": ["[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"] }
643
+ ```
644
+
645
+ (The `bare-workflow` and `expo` sample `ConnectConfig.example.json` already
646
+ ship this pattern on `GlobalScreenSettings`.)
647
+
648
+ When no block applies, each native SDK keeps the defaults from its own bundled
649
+ layout config:
650
+
651
+ - **iOS** — the defaults ship inside the Connect pod's `ConnectResources.bundle`
652
+ and are copied into your `.app`, so `pod install` replaces them on every run.
653
+ There is no app-level override file, which is why `ConnectConfig.json` is the
654
+ only supported route — do not edit anything under `Pods/`.
655
+ - **Android** — the plugin writes your merged block to its own
656
+ `ConnectLayoutConfig.json` asset. If your app ships
657
+ `android/app/src/main/assets/ConnectLayoutConfig.json`, Android asset merging
658
+ gives **your** copy priority and the `ConnectConfig.json` block is ignored;
659
+ the build prints a warning when both exist. Keep one or the other.
660
+
661
+ > Turning screenshots off does not disable behavioural capture: screen views,
662
+ > clicks, and custom events still flow. It only drops the image data, which is
663
+ > what a subscription without session replay has no consumer for.
664
+
665
+ #### `NumberOfWebViews` turns off iOS layout capture — leave it at `0`
666
+
667
+ `AutoLayout` rules accept a `NumberOfWebViews` key. On iOS, any value greater
668
+ than zero marks the screens that rule covers as web-view screens, and the SDK's
669
+ automatic layout capture is skipped for a web-view screen. Its effect is not
670
+ limited to screens that actually host a `WebView`: the value is read as a
671
+ declaration about the rule, not a count that gets verified.
672
+
673
+ The trap is where it is usually set. `GlobalScreenSettings` is the rule that
674
+ applies to **every** screen with no more specific rule of its own, and React
675
+ Native screens are all in that position — they are hosted by the same generic
676
+ container class, so no per-screen native rule matches them. So a single
677
+ `"NumberOfWebViews": 1` under `GlobalScreenSettings` switches off
678
+ auto-instrumented layout capture for the entire app on iOS, including screens
679
+ with no web content at all:
680
+
681
+ ```json
682
+ {
683
+ "Connect": {
684
+ "layoutConfigIos": {
685
+ "AutoLayout": {
686
+ "GlobalScreenSettings": { "NumberOfWebViews": 0 }
687
+ }
688
+ }
689
+ }
690
+ }
691
+ ```
692
+
693
+ Screen views, clicks, and custom events are unaffected — the symptom is layout
694
+ messages going missing while everything else keeps arriving, which reads like a
695
+ capture failure rather than a setting. Keep `NumberOfWebViews` at `0`, the value
696
+ every shipped template uses. To stand layout capture down deliberately, set
697
+ `CaptureLayoutOn: 0` on the rule instead — it is the key that means that, and it
698
+ leaves `NumberOfWebViews` free to describe the screen.
699
+
700
+ #### WebView capture on Android: prerequisites and two open limitations
701
+
702
+ A screen that hosts a `react-native-webview` `WebView` has capture behaviour
703
+ beyond the config above:
704
+
705
+ - **The WebView must be scrolled on screen.** A capture only records what is
706
+ currently visible — the native tree-walk skips subtrees outside the
707
+ viewport by design. A `WebView` sitting below the fold at the default
708
+ scroll position yields a layout with no WebView nodes at all, which looks
709
+ exactly like WebView capture never engaged. Scroll it fully into view
710
+ before triggering (or waiting on) a capture.
711
+ - **`GoogleWebViewEnabled`** is a top-level `Connect` key (Android only,
712
+ default `true`) that gates whether the SDK instruments WebViews at all:
713
+
714
+ ```json
715
+ { "Connect": { "GoogleWebViewEnabled": false } }
716
+ ```
717
+
718
+ Set to `false`, the SDK does not discover or walk into any `WebView` on the
719
+ screen — the rest of that screen still captures normally. It does not gate
720
+ anything else on this list: screen views, clicks, and non-WebView layout
721
+ content are unaffected either way.
722
+ - **A discovered WebView currently drops that screen's whole layout
723
+ message.** Once the SDK finds a `WebView`, it waits for a DOM-capture
724
+ correlation id from the page before it can finish and post the layout — and
725
+ a React Native-hosted `WebView` never supplies one, so the wait never
726
+ resolves and the *entire* screen's layout message is dropped, not just the
727
+ WebView's portion. Confirmed present in Android Connect **11.0.23-beta**, the
728
+ newest published artifact at the time of writing, and in every earlier version
729
+ in the supported range — measured on an emulator, where a capture on a screen
730
+ with a visible `WebView` posted **no messages at all** for that session, since
731
+ the layout's queue placeholder blocks the batch it sits in. There is no
732
+ client-side fix; `GoogleWebViewEnabled: false` (below) avoids it by not
733
+ instrumenting the `WebView` in the first place. A fix exists in the native SDK
734
+ but is not in any published artifact yet — check the Android Connect release
735
+ notes for a version above 11.0.23-beta before assuming this still applies.
736
+ - **Enabling WebView capture replaces the app's `WebViewClient`.** The native
737
+ SDK installs its own `WebViewClient` on that `WebView` to instrument it, in
738
+ place of the one `react-native-webview` had set — so callbacks such as
739
+ `onHttpError` and `onNavigationStateChange` on that `WebView` stop firing
740
+ while capture is active. Same status as the item above: present through Android
741
+ Connect **11.0.23-beta**, fixed in the native SDK but not yet published, and
742
+ the rest of the screen is unaffected either way.
743
+
744
+ Both of the limitations above only occur once the SDK is instrumenting a
745
+ `WebView`, so `GoogleWebViewEnabled: false` avoids both — at the cost of
746
+ getting no WebView capture on that screen at all.
747
+
748
+ #### Capture timing (`CaptureLayoutDelay`)
749
+
750
+ `AutoLayout.GlobalScreenSettings.CaptureLayoutDelay` is how long, in
751
+ milliseconds, the SDK waits before capturing the layout. It matters more in
752
+ React Native than in a native app: the wrapper triggers capture from React
753
+ Navigation's state change, which fires at the *start* of a screen transition,
754
+ whereas a native app captures from the view-controller lifecycle, after it. Too
755
+ short a delay and the capture catches a half-drawn screen.
756
+
757
+ The templates ship `500`, which clears a typical transition animation on both
758
+ platforms. Tune it globally, or per screen for one that is slower than the
759
+ rest:
760
+
761
+ ```json
762
+ {
763
+ "Connect": {
764
+ "layoutConfig": {
765
+ "AutoLayout": {
766
+ "GlobalScreenSettings": { "CaptureLayoutDelay": 500 },
767
+ "Checkout": { "CaptureLayoutDelay": 900 }
768
+ }
769
+ }
770
+ }
771
+ }
772
+ ```
773
+
774
+ `TLTRN.logScreenLayout(name)` uses the configured value. Pass a second argument
775
+ to override it for one call — `TLTRN.logScreenLayout(name, 0)` captures
776
+ immediately, `TLTRN.logScreenLayout(name, 900)` waits 900 ms.
777
+
778
+ A fixed delay cannot cover a screen whose content arrives asynchronously: if
779
+ data lands after the delay elapses, the capture shows the screen without it.
780
+ Raising the global delay to cover the slowest fetch delays every other screen
781
+ too. Call `TLTRN.logScreenLayout(name)` again when the content is on screen
782
+ instead — each call captures the layout as it stands at that moment.
783
+
784
+ Leaving the block out entirely gives you 500 ms as well. That is the wrapper's
785
+ default, chosen so both platforms behave the same; the native SDKs' own bundled
786
+ defaults differ from each other and are tuned for the lifecycle trigger rather
787
+ than the React Navigation one. Internally, omitting the second argument to
788
+ `TLTRN.logScreenLayout` sends a sentinel (`-1`) that both bridges resolve to
789
+ this configured value; any value the caller passes explicitly (`>= 0`) is used
790
+ as-is instead, bypassing the config lookup for that one call.
791
+
792
+ A near-zero value is not a request for faster captures. On iOS the
793
+ auto-instrumentation capture is triggered off the view-controller lifecycle,
794
+ and a delay close to `0` lets that trigger re-fire against the same screen far
795
+ faster than the app can settle — hundreds of captures within a couple of
796
+ hundred milliseconds while the app just sits idle, rather than one per actual
797
+ transition. The visible symptom is a runaway capture loop: a "Refreshing…"
798
+ indicator that stays up continuously instead of the brief one after a normal
799
+ transition. The SDK enforces no floor on this value, so `1` (millisecond) is
800
+ accepted and is exactly what produces the loop. Keep `CaptureLayoutDelay` at
801
+ `500` or raise it per screen — never lower it toward `0`.
802
+
803
+ #### Where screen-view and layout messages come from, and how to reduce duplicates
804
+
805
+ The two message kinds have different sources, and they differ per platform:
806
+
807
+ **Screen views (one source per platform).** On Android, the `<Connect>` wrapper
808
+ is the *only* source — it emits on React Navigation's `state` event. On iOS,
809
+ the native SDK's auto-instrumentation is the *only* source — it emits when a
810
+ screen's view controller reports its appearance. The wrapper never emits a
811
+ screen view on iOS; its role there is to hand the current *route name* to the
812
+ native SDK (which is what makes messages read `Checkout` rather than a native
813
+ container class) and to drive referrer chaining across transitions.
814
+
815
+ Duplicate screen views observed on iOS are therefore not two sources
816
+ overlapping — they are the single native source firing more than once when the
817
+ same screen's view controller reports several appearances for one transition.
818
+ They inflate event volumes and skew per-screen counts; they do not lose data.
819
+ There is no configuration key that collapses them today; a native-side dedupe
820
+ is under investigation. Do not try to solve it by removing the wrapper: on iOS
821
+ that costs route-based names and referrer chaining, and on Android it removes
822
+ screen views entirely. A same-name filter in the wrapper would not help either
823
+ — the wrapper is not the emitter on iOS, and such a filter would swallow
824
+ legitimate repeats like a stack pushing the same screen name twice.
825
+
826
+ **Layouts (two sources on iOS).** With automatic layout capture enabled in
827
+ config, an iOS transition can produce two layout messages: one from the
828
+ wrapper's `logScreenLayout` call and one from the native auto-instrumentation.
829
+ Control it from config, on the native side that has the duplicate:
830
+
831
+ ```json
832
+ {
833
+ "Connect": {
834
+ "layoutConfigIos": {
835
+ "AutoLayout": {
836
+ "GlobalScreenSettings": { "CaptureLayoutOn": 0 }
837
+ }
838
+ }
839
+ }
840
+ }
841
+ ```
842
+
843
+ `CaptureLayoutOn: 0` stands the **native** automatic layout capture down and
844
+ leaves the wrapper's route-named captures as the single source. Set it per
845
+ screen rather than globally if only some screens are noisy. Screen views,
846
+ clicks, and custom events are unaffected by this key.
847
+
848
+ If you would rather keep the native captures and have the wrapper stay out of
849
+ the way, omit `navigationRef` and do not rely on `<Connect>` for screen naming
850
+ — but expect native container class names in place of your route names.
851
+
852
+ Measure before changing either default: the volume depends on your navigator
853
+ structure, and both defaults are what every shipped sample uses.
854
+
439
855
  ### `<Connect>` props
440
856
 
441
857
  | Prop | Type | Required | Description |
@@ -564,6 +980,13 @@ leave it empty for the newest 11.x available). 12.x is intentionally outside
564
980
  the supported range pending compatibility validation — track that work
565
981
  separately if you need it.
566
982
 
983
+ If the version you pinned is a `-beta`, check that your build can reach
984
+ [`go-acoustic/Android_Maven`](https://github.com/go-acoustic/Android_Maven) —
985
+ beta artifacts live there rather than on Maven Central. This package declares
986
+ that repository for you, so a failure here usually means the build is offline
987
+ or behind a proxy that blocks `raw.githubusercontent.com`. See
988
+ [Where the Android Connect SDK is resolved from](#where-the-android-connect-sdk-is-resolved-from).
989
+
567
990
  ### Gradle can't find `node`
568
991
 
569
992
  Common when Gradle is launched outside an NVM-loaded shell. Either: