@stream-io/video-react-native-sdk 1.39.0 → 1.40.0

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 (692) hide show
  1. package/CHANGELOG.md +24 -6
  2. package/android/src/main/java/com/streamvideo/reactnative/StreamVideoReactNativeModule.kt +81 -0
  3. package/android/src/main/java/com/streamvideo/reactnative/recorder/AudioPipeline.kt +436 -0
  4. package/android/src/main/java/com/streamvideo/reactnative/recorder/EncoderConstants.kt +17 -0
  5. package/android/src/main/java/com/streamvideo/reactnative/recorder/PipelineHost.kt +36 -0
  6. package/android/src/main/java/com/streamvideo/reactnative/recorder/RecorderPlaybackSamplesSink.kt +60 -0
  7. package/android/src/main/java/com/streamvideo/reactnative/recorder/RecorderVideoSink.kt +31 -0
  8. package/android/src/main/java/com/streamvideo/reactnative/recorder/TracksRecorderManager.kt +338 -0
  9. package/android/src/main/java/com/streamvideo/reactnative/recorder/VideoPipeline.kt +472 -0
  10. package/dist/commonjs/components/Call/CallContent/CallContent.js +93 -48
  11. package/dist/commonjs/components/Call/CallContent/CallContent.js.map +1 -1
  12. package/dist/commonjs/components/Call/CallContent/RTCViewPipIOS.js +22 -20
  13. package/dist/commonjs/components/Call/CallContent/RTCViewPipIOS.js.map +1 -1
  14. package/dist/commonjs/components/Call/CallContent/RTCViewPipNative.js +2 -1
  15. package/dist/commonjs/components/Call/CallContent/RTCViewPipNative.js.map +1 -1
  16. package/dist/commonjs/components/Call/CallControls/AcceptCallButton.js +10 -6
  17. package/dist/commonjs/components/Call/CallControls/AcceptCallButton.js.map +1 -1
  18. package/dist/commonjs/components/Call/CallControls/CallControls.js +7 -5
  19. package/dist/commonjs/components/Call/CallControls/CallControls.js.map +1 -1
  20. package/dist/commonjs/components/Call/CallControls/CallControlsButton.js +11 -8
  21. package/dist/commonjs/components/Call/CallControls/CallControlsButton.js.map +1 -1
  22. package/dist/commonjs/components/Call/CallControls/HangupCallButton.js +10 -6
  23. package/dist/commonjs/components/Call/CallControls/HangupCallButton.js.map +1 -1
  24. package/dist/commonjs/components/Call/CallControls/IncomingCallControls.js +11 -9
  25. package/dist/commonjs/components/Call/CallControls/IncomingCallControls.js.map +1 -1
  26. package/dist/commonjs/components/Call/CallControls/LobbyControls.js +5 -3
  27. package/dist/commonjs/components/Call/CallControls/LobbyControls.js.map +1 -1
  28. package/dist/commonjs/components/Call/CallControls/OutgoingCallControls.js +12 -9
  29. package/dist/commonjs/components/Call/CallControls/OutgoingCallControls.js.map +1 -1
  30. package/dist/commonjs/components/Call/CallControls/ReactionsButton.js +22 -15
  31. package/dist/commonjs/components/Call/CallControls/ReactionsButton.js.map +1 -1
  32. package/dist/commonjs/components/Call/CallControls/RejectCallButton.js +10 -6
  33. package/dist/commonjs/components/Call/CallControls/RejectCallButton.js.map +1 -1
  34. package/dist/commonjs/components/Call/CallControls/ScreenShareToggleButton.js +15 -11
  35. package/dist/commonjs/components/Call/CallControls/ScreenShareToggleButton.js.map +1 -1
  36. package/dist/commonjs/components/Call/CallControls/ToggleAudioPreviewButton.js +13 -9
  37. package/dist/commonjs/components/Call/CallControls/ToggleAudioPreviewButton.js.map +1 -1
  38. package/dist/commonjs/components/Call/CallControls/ToggleAudioPublishingButton.js +18 -13
  39. package/dist/commonjs/components/Call/CallControls/ToggleAudioPublishingButton.js.map +1 -1
  40. package/dist/commonjs/components/Call/CallControls/ToggleCameraFaceButton.js +17 -12
  41. package/dist/commonjs/components/Call/CallControls/ToggleCameraFaceButton.js.map +1 -1
  42. package/dist/commonjs/components/Call/CallControls/ToggleVideoPreviewButton.js +13 -9
  43. package/dist/commonjs/components/Call/CallControls/ToggleVideoPreviewButton.js.map +1 -1
  44. package/dist/commonjs/components/Call/CallControls/ToggleVideoPublishingButton.js +17 -12
  45. package/dist/commonjs/components/Call/CallControls/ToggleVideoPublishingButton.js.map +1 -1
  46. package/dist/commonjs/components/Call/CallControls/internal/ReactionsPicker.js +39 -34
  47. package/dist/commonjs/components/Call/CallControls/internal/ReactionsPicker.js.map +1 -1
  48. package/dist/commonjs/components/Call/CallLayout/CallParticipantsGrid.js +17 -12
  49. package/dist/commonjs/components/Call/CallLayout/CallParticipantsGrid.js.map +1 -1
  50. package/dist/commonjs/components/Call/CallLayout/CallParticipantsSpotlight.js +36 -24
  51. package/dist/commonjs/components/Call/CallLayout/CallParticipantsSpotlight.js.map +1 -1
  52. package/dist/commonjs/components/Call/CallParticipantsList/CallParticipantsList.js +30 -28
  53. package/dist/commonjs/components/Call/CallParticipantsList/CallParticipantsList.js.map +1 -1
  54. package/dist/commonjs/components/Call/Lobby/JoinCallButton.js +10 -7
  55. package/dist/commonjs/components/Call/Lobby/JoinCallButton.js.map +1 -1
  56. package/dist/commonjs/components/Call/Lobby/Lobby.js +45 -35
  57. package/dist/commonjs/components/Call/Lobby/Lobby.js.map +1 -1
  58. package/dist/commonjs/components/Call/Lobby/LobbyFooter.js +21 -16
  59. package/dist/commonjs/components/Call/Lobby/LobbyFooter.js.map +1 -1
  60. package/dist/commonjs/components/Call/RingingCallContent/CallLeftIndicator.js +2 -1
  61. package/dist/commonjs/components/Call/RingingCallContent/CallLeftIndicator.js.map +1 -1
  62. package/dist/commonjs/components/Call/RingingCallContent/CallPreparingIndicator.js +2 -1
  63. package/dist/commonjs/components/Call/RingingCallContent/CallPreparingIndicator.js.map +1 -1
  64. package/dist/commonjs/components/Call/RingingCallContent/IncomingCall.js +32 -22
  65. package/dist/commonjs/components/Call/RingingCallContent/IncomingCall.js.map +1 -1
  66. package/dist/commonjs/components/Call/RingingCallContent/OutgoingCall.js +37 -27
  67. package/dist/commonjs/components/Call/RingingCallContent/OutgoingCall.js.map +1 -1
  68. package/dist/commonjs/components/Call/RingingCallContent/RingingCallContent.js +13 -11
  69. package/dist/commonjs/components/Call/RingingCallContent/RingingCallContent.js.map +1 -1
  70. package/dist/commonjs/components/Call/RingingCallContent/TextBasedIndicator.js +28 -22
  71. package/dist/commonjs/components/Call/RingingCallContent/TextBasedIndicator.js.map +1 -1
  72. package/dist/commonjs/components/Call/RingingCallContent/UserInfo.js +25 -22
  73. package/dist/commonjs/components/Call/RingingCallContent/UserInfo.js.map +1 -1
  74. package/dist/commonjs/components/Livestream/HostLivestream/HostLivestream.js +38 -34
  75. package/dist/commonjs/components/Livestream/HostLivestream/HostLivestream.js.map +1 -1
  76. package/dist/commonjs/components/Livestream/LivestreamControls/HostLivestreamControls.js +16 -12
  77. package/dist/commonjs/components/Livestream/LivestreamControls/HostLivestreamControls.js.map +1 -1
  78. package/dist/commonjs/components/Livestream/LivestreamControls/HostStartStreamButton.js +16 -12
  79. package/dist/commonjs/components/Livestream/LivestreamControls/HostStartStreamButton.js.map +1 -1
  80. package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamAudioControlButton.js +19 -14
  81. package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamAudioControlButton.js.map +1 -1
  82. package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamMediaControls.js +5 -3
  83. package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamMediaControls.js.map +1 -1
  84. package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamScreenShareToggleButton.js +19 -16
  85. package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamScreenShareToggleButton.js.map +1 -1
  86. package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamVideoControlButton.js +19 -14
  87. package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamVideoControlButton.js.map +1 -1
  88. package/dist/commonjs/components/Livestream/LivestreamControls/ViewerLeaveStreamButton.js +11 -8
  89. package/dist/commonjs/components/Livestream/LivestreamControls/ViewerLeaveStreamButton.js.map +1 -1
  90. package/dist/commonjs/components/Livestream/LivestreamControls/ViewerLivestreamControls.js +78 -57
  91. package/dist/commonjs/components/Livestream/LivestreamControls/ViewerLivestreamControls.js.map +1 -1
  92. package/dist/commonjs/components/Livestream/LivestreamLayout/LivestreamLayout.js +13 -46
  93. package/dist/commonjs/components/Livestream/LivestreamLayout/LivestreamLayout.js.map +1 -1
  94. package/dist/commonjs/components/Livestream/LivestreamPlayer/LivestreamEnded.js +48 -22
  95. package/dist/commonjs/components/Livestream/LivestreamPlayer/LivestreamEnded.js.map +1 -1
  96. package/dist/commonjs/components/Livestream/LivestreamPlayer/LivestreamPlayer.js +7 -5
  97. package/dist/commonjs/components/Livestream/LivestreamPlayer/LivestreamPlayer.js.map +1 -1
  98. package/dist/commonjs/components/Livestream/LivestreamTopView/DurationBadge.js +12 -9
  99. package/dist/commonjs/components/Livestream/LivestreamTopView/DurationBadge.js.map +1 -1
  100. package/dist/commonjs/components/Livestream/LivestreamTopView/FollowerCount.js +11 -7
  101. package/dist/commonjs/components/Livestream/LivestreamTopView/FollowerCount.js.map +1 -1
  102. package/dist/commonjs/components/Livestream/LivestreamTopView/HostLivestreamTopView.js +18 -13
  103. package/dist/commonjs/components/Livestream/LivestreamTopView/HostLivestreamTopView.js.map +1 -1
  104. package/dist/commonjs/components/Livestream/LivestreamTopView/LiveIndicator.js +10 -7
  105. package/dist/commonjs/components/Livestream/LivestreamTopView/LiveIndicator.js.map +1 -1
  106. package/dist/commonjs/components/Livestream/LivestreamTopView/ViewerLivestreamTopView.js +18 -13
  107. package/dist/commonjs/components/Livestream/LivestreamTopView/ViewerLivestreamTopView.js.map +1 -1
  108. package/dist/commonjs/components/Livestream/ViewerLivestream/ViewerLivestream.js +41 -37
  109. package/dist/commonjs/components/Livestream/ViewerLivestream/ViewerLivestream.js.map +1 -1
  110. package/dist/commonjs/components/Livestream/ViewerLivestream/ViewerLobby.js +33 -23
  111. package/dist/commonjs/components/Livestream/ViewerLivestream/ViewerLobby.js.map +1 -1
  112. package/dist/commonjs/components/Participant/FloatingParticipantView/FloatingView/AnimatedFloatingView.js +18 -15
  113. package/dist/commonjs/components/Participant/FloatingParticipantView/FloatingView/AnimatedFloatingView.js.map +1 -1
  114. package/dist/commonjs/components/Participant/FloatingParticipantView/FloatingView/ReanimatedFloatingView.js +20 -16
  115. package/dist/commonjs/components/Participant/FloatingParticipantView/FloatingView/ReanimatedFloatingView.js.map +1 -1
  116. package/dist/commonjs/components/Participant/FloatingParticipantView/index.js +55 -48
  117. package/dist/commonjs/components/Participant/FloatingParticipantView/index.js.map +1 -1
  118. package/dist/commonjs/components/Participant/ParticipantView/ParticipantLabel.js +64 -52
  119. package/dist/commonjs/components/Participant/ParticipantView/ParticipantLabel.js.map +1 -1
  120. package/dist/commonjs/components/Participant/ParticipantView/ParticipantNetworkQualityIndicator.js +30 -27
  121. package/dist/commonjs/components/Participant/ParticipantView/ParticipantNetworkQualityIndicator.js.map +1 -1
  122. package/dist/commonjs/components/Participant/ParticipantView/ParticipantReaction.js +11 -7
  123. package/dist/commonjs/components/Participant/ParticipantView/ParticipantReaction.js.map +1 -1
  124. package/dist/commonjs/components/Participant/ParticipantView/ParticipantVideoFallback.js +17 -14
  125. package/dist/commonjs/components/Participant/ParticipantView/ParticipantVideoFallback.js.map +1 -1
  126. package/dist/commonjs/components/Participant/ParticipantView/ParticipantView.js +27 -24
  127. package/dist/commonjs/components/Participant/ParticipantView/ParticipantView.js.map +1 -1
  128. package/dist/commonjs/components/Participant/ParticipantView/SpeechIndicator.js +8 -7
  129. package/dist/commonjs/components/Participant/ParticipantView/SpeechIndicator.js.map +1 -1
  130. package/dist/commonjs/components/Participant/ParticipantView/VideoRenderer/index.js +35 -32
  131. package/dist/commonjs/components/Participant/ParticipantView/VideoRenderer/index.js.map +1 -1
  132. package/dist/commonjs/components/utility/Avatar.js +18 -15
  133. package/dist/commonjs/components/utility/Avatar.js.map +1 -1
  134. package/dist/commonjs/components/utility/ScreenShareOverlay.js +35 -29
  135. package/dist/commonjs/components/utility/ScreenShareOverlay.js.map +1 -1
  136. package/dist/commonjs/contexts/BackgroundFilters.js +5 -3
  137. package/dist/commonjs/contexts/BackgroundFilters.js.map +1 -1
  138. package/dist/commonjs/contexts/ThemeContext.js +5 -3
  139. package/dist/commonjs/contexts/ThemeContext.js.map +1 -1
  140. package/dist/commonjs/contexts/internal/ScreenshotIosContext.js +5 -3
  141. package/dist/commonjs/contexts/internal/ScreenshotIosContext.js.map +1 -1
  142. package/dist/commonjs/hooks/index.js +11 -0
  143. package/dist/commonjs/hooks/index.js.map +1 -1
  144. package/dist/commonjs/hooks/useAutoEnterPiPEffect.js +5 -10
  145. package/dist/commonjs/hooks/useAutoEnterPiPEffect.js.map +1 -1
  146. package/dist/commonjs/hooks/useLoopbackRecording.js +263 -0
  147. package/dist/commonjs/hooks/useLoopbackRecording.js.map +1 -0
  148. package/dist/commonjs/hooks/useModeration.js +4 -1
  149. package/dist/commonjs/hooks/useModeration.js.map +1 -1
  150. package/dist/commonjs/icons/Back.js +8 -6
  151. package/dist/commonjs/icons/Back.js.map +1 -1
  152. package/dist/commonjs/icons/BadNetwork.js +11 -9
  153. package/dist/commonjs/icons/BadNetwork.js.map +1 -1
  154. package/dist/commonjs/icons/CameraSwitch.js +8 -6
  155. package/dist/commonjs/icons/CameraSwitch.js.map +1 -1
  156. package/dist/commonjs/icons/EndStreamIcon.js +8 -6
  157. package/dist/commonjs/icons/EndStreamIcon.js.map +1 -1
  158. package/dist/commonjs/icons/Eye.js +8 -6
  159. package/dist/commonjs/icons/Eye.js.map +1 -1
  160. package/dist/commonjs/icons/IconWrapper.js +5 -3
  161. package/dist/commonjs/icons/IconWrapper.js.map +1 -1
  162. package/dist/commonjs/icons/LivestreamControls.js +44 -39
  163. package/dist/commonjs/icons/LivestreamControls.js.map +1 -1
  164. package/dist/commonjs/icons/Lock.js +8 -6
  165. package/dist/commonjs/icons/Lock.js.map +1 -1
  166. package/dist/commonjs/icons/Maximize.js +33 -31
  167. package/dist/commonjs/icons/Maximize.js.map +1 -1
  168. package/dist/commonjs/icons/Mic.js +8 -6
  169. package/dist/commonjs/icons/Mic.js.map +1 -1
  170. package/dist/commonjs/icons/MicOff.js +8 -6
  171. package/dist/commonjs/icons/MicOff.js.map +1 -1
  172. package/dist/commonjs/icons/Phone.js +8 -6
  173. package/dist/commonjs/icons/Phone.js.map +1 -1
  174. package/dist/commonjs/icons/PhoneDown.js +8 -6
  175. package/dist/commonjs/icons/PhoneDown.js.map +1 -1
  176. package/dist/commonjs/icons/PinVertical.js +8 -6
  177. package/dist/commonjs/icons/PinVertical.js.map +1 -1
  178. package/dist/commonjs/icons/Reaction.js +8 -6
  179. package/dist/commonjs/icons/Reaction.js.map +1 -1
  180. package/dist/commonjs/icons/ScreenShare.js +8 -6
  181. package/dist/commonjs/icons/ScreenShare.js.map +1 -1
  182. package/dist/commonjs/icons/ScreenShareIndicator.js +21 -18
  183. package/dist/commonjs/icons/ScreenShareIndicator.js.map +1 -1
  184. package/dist/commonjs/icons/StartStreamIcon.js +8 -6
  185. package/dist/commonjs/icons/StartStreamIcon.js.map +1 -1
  186. package/dist/commonjs/icons/StopScreenShare.js +11 -9
  187. package/dist/commonjs/icons/StopScreenShare.js.map +1 -1
  188. package/dist/commonjs/icons/Video.js +8 -6
  189. package/dist/commonjs/icons/Video.js.map +1 -1
  190. package/dist/commonjs/icons/VideoSlash.js +8 -6
  191. package/dist/commonjs/icons/VideoSlash.js.map +1 -1
  192. package/dist/commonjs/icons/index.js +0 -66
  193. package/dist/commonjs/icons/index.js.map +1 -1
  194. package/dist/commonjs/package.json +1 -0
  195. package/dist/commonjs/providers/BusyTonePlayer.js +7 -7
  196. package/dist/commonjs/providers/BusyTonePlayer.js.map +1 -1
  197. package/dist/commonjs/providers/NoiseCancellation/NoiseCancellationProvider.js +5 -3
  198. package/dist/commonjs/providers/NoiseCancellation/NoiseCancellationProvider.js.map +1 -1
  199. package/dist/commonjs/providers/StreamCall/AppStateListener.js +3 -0
  200. package/dist/commonjs/providers/StreamCall/AppStateListener.js.map +1 -1
  201. package/dist/commonjs/providers/StreamCall/DeviceStats.js +1 -1
  202. package/dist/commonjs/providers/StreamCall/DeviceStats.js.map +1 -1
  203. package/dist/commonjs/providers/StreamCall/index.js +5 -3
  204. package/dist/commonjs/providers/StreamCall/index.js.map +1 -1
  205. package/dist/commonjs/providers/StreamVideo.js +10 -5
  206. package/dist/commonjs/providers/StreamVideo.js.map +1 -1
  207. package/dist/commonjs/utils/StreamVideoRN/index.js +0 -1
  208. package/dist/commonjs/utils/StreamVideoRN/index.js.map +1 -1
  209. package/dist/commonjs/utils/internal/callingx/callingx.js +4 -4
  210. package/dist/commonjs/utils/internal/callingx/callingx.js.map +1 -1
  211. package/dist/commonjs/utils/internal/registerSDKGlobals.js +2 -2
  212. package/dist/commonjs/utils/internal/registerSDKGlobals.js.map +1 -1
  213. package/dist/commonjs/utils/push/libs/firebaseMessaging/index.js.map +1 -1
  214. package/dist/commonjs/version.js +1 -1
  215. package/dist/module/components/Call/CallContent/CallContent.js +95 -48
  216. package/dist/module/components/Call/CallContent/CallContent.js.map +1 -1
  217. package/dist/module/components/Call/CallContent/RTCViewPipIOS.js +24 -20
  218. package/dist/module/components/Call/CallContent/RTCViewPipIOS.js.map +1 -1
  219. package/dist/module/components/Call/CallContent/RTCViewPipNative.js +4 -1
  220. package/dist/module/components/Call/CallContent/RTCViewPipNative.js.map +1 -1
  221. package/dist/module/components/Call/CallContent/index.js +2 -0
  222. package/dist/module/components/Call/CallContent/index.js.map +1 -1
  223. package/dist/module/components/Call/CallControls/AcceptCallButton.js +12 -7
  224. package/dist/module/components/Call/CallControls/AcceptCallButton.js.map +1 -1
  225. package/dist/module/components/Call/CallControls/CallControls.js +9 -6
  226. package/dist/module/components/Call/CallControls/CallControls.js.map +1 -1
  227. package/dist/module/components/Call/CallControls/CallControlsButton.js +13 -8
  228. package/dist/module/components/Call/CallControls/CallControlsButton.js.map +1 -1
  229. package/dist/module/components/Call/CallControls/HangupCallButton.js +12 -7
  230. package/dist/module/components/Call/CallControls/HangupCallButton.js.map +1 -1
  231. package/dist/module/components/Call/CallControls/IncomingCallControls.js +13 -10
  232. package/dist/module/components/Call/CallControls/IncomingCallControls.js.map +1 -1
  233. package/dist/module/components/Call/CallControls/LobbyControls.js +7 -3
  234. package/dist/module/components/Call/CallControls/LobbyControls.js.map +1 -1
  235. package/dist/module/components/Call/CallControls/OutgoingCallControls.js +14 -10
  236. package/dist/module/components/Call/CallControls/OutgoingCallControls.js.map +1 -1
  237. package/dist/module/components/Call/CallControls/ReactionsButton.js +24 -16
  238. package/dist/module/components/Call/CallControls/ReactionsButton.js.map +1 -1
  239. package/dist/module/components/Call/CallControls/RejectCallButton.js +12 -7
  240. package/dist/module/components/Call/CallControls/RejectCallButton.js.map +1 -1
  241. package/dist/module/components/Call/CallControls/ScreenShareToggleButton.js +17 -12
  242. package/dist/module/components/Call/CallControls/ScreenShareToggleButton.js.map +1 -1
  243. package/dist/module/components/Call/CallControls/ToggleAudioPreviewButton.js +15 -10
  244. package/dist/module/components/Call/CallControls/ToggleAudioPreviewButton.js.map +1 -1
  245. package/dist/module/components/Call/CallControls/ToggleAudioPublishingButton.js +20 -14
  246. package/dist/module/components/Call/CallControls/ToggleAudioPublishingButton.js.map +1 -1
  247. package/dist/module/components/Call/CallControls/ToggleCameraFaceButton.js +19 -13
  248. package/dist/module/components/Call/CallControls/ToggleCameraFaceButton.js.map +1 -1
  249. package/dist/module/components/Call/CallControls/ToggleVideoPreviewButton.js +15 -10
  250. package/dist/module/components/Call/CallControls/ToggleVideoPreviewButton.js.map +1 -1
  251. package/dist/module/components/Call/CallControls/ToggleVideoPublishingButton.js +19 -13
  252. package/dist/module/components/Call/CallControls/ToggleVideoPublishingButton.js.map +1 -1
  253. package/dist/module/components/Call/CallControls/index.js +2 -0
  254. package/dist/module/components/Call/CallControls/index.js.map +1 -1
  255. package/dist/module/components/Call/CallControls/internal/ReactionsPicker.js +41 -34
  256. package/dist/module/components/Call/CallControls/internal/ReactionsPicker.js.map +1 -1
  257. package/dist/module/components/Call/CallLayout/CallParticipantsGrid.js +19 -13
  258. package/dist/module/components/Call/CallLayout/CallParticipantsGrid.js.map +1 -1
  259. package/dist/module/components/Call/CallLayout/CallParticipantsSpotlight.js +38 -25
  260. package/dist/module/components/Call/CallLayout/CallParticipantsSpotlight.js.map +1 -1
  261. package/dist/module/components/Call/CallLayout/index.js +2 -0
  262. package/dist/module/components/Call/CallLayout/index.js.map +1 -1
  263. package/dist/module/components/Call/CallParticipantsList/CallParticipantsList.js +32 -28
  264. package/dist/module/components/Call/CallParticipantsList/CallParticipantsList.js.map +1 -1
  265. package/dist/module/components/Call/CallParticipantsList/index.js +2 -0
  266. package/dist/module/components/Call/CallParticipantsList/index.js.map +1 -1
  267. package/dist/module/components/Call/Lobby/JoinCallButton.js +12 -8
  268. package/dist/module/components/Call/Lobby/JoinCallButton.js.map +1 -1
  269. package/dist/module/components/Call/Lobby/Lobby.js +47 -36
  270. package/dist/module/components/Call/Lobby/Lobby.js.map +1 -1
  271. package/dist/module/components/Call/Lobby/LobbyFooter.js +23 -17
  272. package/dist/module/components/Call/Lobby/LobbyFooter.js.map +1 -1
  273. package/dist/module/components/Call/Lobby/index.js +2 -0
  274. package/dist/module/components/Call/Lobby/index.js.map +1 -1
  275. package/dist/module/components/Call/RingingCallContent/CallLeftIndicator.js +4 -1
  276. package/dist/module/components/Call/RingingCallContent/CallLeftIndicator.js.map +1 -1
  277. package/dist/module/components/Call/RingingCallContent/CallPreparingIndicator.js +4 -1
  278. package/dist/module/components/Call/RingingCallContent/CallPreparingIndicator.js.map +1 -1
  279. package/dist/module/components/Call/RingingCallContent/IncomingCall.js +34 -23
  280. package/dist/module/components/Call/RingingCallContent/IncomingCall.js.map +1 -1
  281. package/dist/module/components/Call/RingingCallContent/OutgoingCall.js +39 -28
  282. package/dist/module/components/Call/RingingCallContent/OutgoingCall.js.map +1 -1
  283. package/dist/module/components/Call/RingingCallContent/RingingCallContent.js +15 -12
  284. package/dist/module/components/Call/RingingCallContent/RingingCallContent.js.map +1 -1
  285. package/dist/module/components/Call/RingingCallContent/TextBasedIndicator.js +30 -22
  286. package/dist/module/components/Call/RingingCallContent/TextBasedIndicator.js.map +1 -1
  287. package/dist/module/components/Call/RingingCallContent/UserInfo.js +27 -22
  288. package/dist/module/components/Call/RingingCallContent/UserInfo.js.map +1 -1
  289. package/dist/module/components/Call/RingingCallContent/index.js +2 -0
  290. package/dist/module/components/Call/RingingCallContent/index.js.map +1 -1
  291. package/dist/module/components/Call/index.js +2 -0
  292. package/dist/module/components/Call/index.js.map +1 -1
  293. package/dist/module/components/Livestream/HostLivestream/HostLivestream.js +40 -35
  294. package/dist/module/components/Livestream/HostLivestream/HostLivestream.js.map +1 -1
  295. package/dist/module/components/Livestream/HostLivestream/index.js +2 -0
  296. package/dist/module/components/Livestream/HostLivestream/index.js.map +1 -1
  297. package/dist/module/components/Livestream/LivestreamControls/HostLivestreamControls.js +18 -13
  298. package/dist/module/components/Livestream/LivestreamControls/HostLivestreamControls.js.map +1 -1
  299. package/dist/module/components/Livestream/LivestreamControls/HostStartStreamButton.js +18 -13
  300. package/dist/module/components/Livestream/LivestreamControls/HostStartStreamButton.js.map +1 -1
  301. package/dist/module/components/Livestream/LivestreamControls/LivestreamAudioControlButton.js +21 -14
  302. package/dist/module/components/Livestream/LivestreamControls/LivestreamAudioControlButton.js.map +1 -1
  303. package/dist/module/components/Livestream/LivestreamControls/LivestreamMediaControls.js +7 -4
  304. package/dist/module/components/Livestream/LivestreamControls/LivestreamMediaControls.js.map +1 -1
  305. package/dist/module/components/Livestream/LivestreamControls/LivestreamScreenShareToggleButton.js +21 -16
  306. package/dist/module/components/Livestream/LivestreamControls/LivestreamScreenShareToggleButton.js.map +1 -1
  307. package/dist/module/components/Livestream/LivestreamControls/LivestreamVideoControlButton.js +21 -14
  308. package/dist/module/components/Livestream/LivestreamControls/LivestreamVideoControlButton.js.map +1 -1
  309. package/dist/module/components/Livestream/LivestreamControls/ViewerLeaveStreamButton.js +13 -9
  310. package/dist/module/components/Livestream/LivestreamControls/ViewerLeaveStreamButton.js.map +1 -1
  311. package/dist/module/components/Livestream/LivestreamControls/ViewerLivestreamControls.js +80 -58
  312. package/dist/module/components/Livestream/LivestreamControls/ViewerLivestreamControls.js.map +1 -1
  313. package/dist/module/components/Livestream/LivestreamControls/index.js +2 -0
  314. package/dist/module/components/Livestream/LivestreamControls/index.js.map +1 -1
  315. package/dist/module/components/Livestream/LivestreamLayout/LivestreamLayout.js +14 -46
  316. package/dist/module/components/Livestream/LivestreamLayout/LivestreamLayout.js.map +1 -1
  317. package/dist/module/components/Livestream/LivestreamLayout/index.js +2 -0
  318. package/dist/module/components/Livestream/LivestreamLayout/index.js.map +1 -1
  319. package/dist/module/components/Livestream/LivestreamPlayer/LivestreamEnded.js +52 -25
  320. package/dist/module/components/Livestream/LivestreamPlayer/LivestreamEnded.js.map +1 -1
  321. package/dist/module/components/Livestream/LivestreamPlayer/LivestreamPlayer.js +9 -5
  322. package/dist/module/components/Livestream/LivestreamPlayer/LivestreamPlayer.js.map +1 -1
  323. package/dist/module/components/Livestream/LivestreamPlayer/index.js +2 -0
  324. package/dist/module/components/Livestream/LivestreamPlayer/index.js.map +1 -1
  325. package/dist/module/components/Livestream/LivestreamTopView/DurationBadge.js +14 -10
  326. package/dist/module/components/Livestream/LivestreamTopView/DurationBadge.js.map +1 -1
  327. package/dist/module/components/Livestream/LivestreamTopView/FollowerCount.js +13 -8
  328. package/dist/module/components/Livestream/LivestreamTopView/FollowerCount.js.map +1 -1
  329. package/dist/module/components/Livestream/LivestreamTopView/HostLivestreamTopView.js +20 -14
  330. package/dist/module/components/Livestream/LivestreamTopView/HostLivestreamTopView.js.map +1 -1
  331. package/dist/module/components/Livestream/LivestreamTopView/LiveIndicator.js +12 -8
  332. package/dist/module/components/Livestream/LivestreamTopView/LiveIndicator.js.map +1 -1
  333. package/dist/module/components/Livestream/LivestreamTopView/ViewerLivestreamTopView.js +20 -14
  334. package/dist/module/components/Livestream/LivestreamTopView/ViewerLivestreamTopView.js.map +1 -1
  335. package/dist/module/components/Livestream/LivestreamTopView/index.js +2 -0
  336. package/dist/module/components/Livestream/LivestreamTopView/index.js.map +1 -1
  337. package/dist/module/components/Livestream/ViewerLivestream/ViewerLivestream.js +43 -38
  338. package/dist/module/components/Livestream/ViewerLivestream/ViewerLivestream.js.map +1 -1
  339. package/dist/module/components/Livestream/ViewerLivestream/ViewerLobby.js +35 -23
  340. package/dist/module/components/Livestream/ViewerLivestream/ViewerLobby.js.map +1 -1
  341. package/dist/module/components/Livestream/ViewerLivestream/index.js +2 -0
  342. package/dist/module/components/Livestream/ViewerLivestream/index.js.map +1 -1
  343. package/dist/module/components/Livestream/index.js +2 -0
  344. package/dist/module/components/Livestream/index.js.map +1 -1
  345. package/dist/module/components/Participant/FloatingParticipantView/FloatingView/AnimatedFloatingView.js +20 -15
  346. package/dist/module/components/Participant/FloatingParticipantView/FloatingView/AnimatedFloatingView.js.map +1 -1
  347. package/dist/module/components/Participant/FloatingParticipantView/FloatingView/ReanimatedFloatingView.js +22 -16
  348. package/dist/module/components/Participant/FloatingParticipantView/FloatingView/ReanimatedFloatingView.js.map +1 -1
  349. package/dist/module/components/Participant/FloatingParticipantView/FloatingView/common.js +2 -0
  350. package/dist/module/components/Participant/FloatingParticipantView/FloatingView/common.js.map +1 -1
  351. package/dist/module/components/Participant/FloatingParticipantView/FloatingView/index.js +2 -0
  352. package/dist/module/components/Participant/FloatingParticipantView/FloatingView/index.js.map +1 -1
  353. package/dist/module/components/Participant/FloatingParticipantView/index.js +56 -49
  354. package/dist/module/components/Participant/FloatingParticipantView/index.js.map +1 -1
  355. package/dist/module/components/Participant/FloatingParticipantView/useFloatingVideoDimensions.js +2 -0
  356. package/dist/module/components/Participant/FloatingParticipantView/useFloatingVideoDimensions.js.map +1 -1
  357. package/dist/module/components/Participant/ParticipantView/ParticipantLabel.js +66 -53
  358. package/dist/module/components/Participant/ParticipantView/ParticipantLabel.js.map +1 -1
  359. package/dist/module/components/Participant/ParticipantView/ParticipantNetworkQualityIndicator.js +32 -28
  360. package/dist/module/components/Participant/ParticipantView/ParticipantNetworkQualityIndicator.js.map +1 -1
  361. package/dist/module/components/Participant/ParticipantView/ParticipantReaction.js +13 -8
  362. package/dist/module/components/Participant/ParticipantView/ParticipantReaction.js.map +1 -1
  363. package/dist/module/components/Participant/ParticipantView/ParticipantVideoFallback.js +19 -15
  364. package/dist/module/components/Participant/ParticipantView/ParticipantVideoFallback.js.map +1 -1
  365. package/dist/module/components/Participant/ParticipantView/ParticipantView.js +29 -24
  366. package/dist/module/components/Participant/ParticipantView/ParticipantView.js.map +1 -1
  367. package/dist/module/components/Participant/ParticipantView/SpeechIndicator.js +10 -8
  368. package/dist/module/components/Participant/ParticipantView/SpeechIndicator.js.map +1 -1
  369. package/dist/module/components/Participant/ParticipantView/VideoRenderer/TrackSubscriber.js +2 -0
  370. package/dist/module/components/Participant/ParticipantView/VideoRenderer/TrackSubscriber.js.map +1 -1
  371. package/dist/module/components/Participant/ParticipantView/VideoRenderer/index.js +37 -31
  372. package/dist/module/components/Participant/ParticipantView/VideoRenderer/index.js.map +1 -1
  373. package/dist/module/components/Participant/ParticipantView/index.js +2 -0
  374. package/dist/module/components/Participant/ParticipantView/index.js.map +1 -1
  375. package/dist/module/components/Participant/index.js +2 -0
  376. package/dist/module/components/Participant/index.js.map +1 -1
  377. package/dist/module/components/index.js +2 -0
  378. package/dist/module/components/index.js.map +1 -1
  379. package/dist/module/components/utility/Avatar.js +20 -16
  380. package/dist/module/components/utility/Avatar.js.map +1 -1
  381. package/dist/module/components/utility/ScreenShareOverlay.js +37 -30
  382. package/dist/module/components/utility/ScreenShareOverlay.js.map +1 -1
  383. package/dist/module/components/utility/index.js +2 -0
  384. package/dist/module/components/utility/index.js.map +1 -1
  385. package/dist/module/constants/TestIds.js +2 -0
  386. package/dist/module/constants/TestIds.js.map +1 -1
  387. package/dist/module/constants/index.js +2 -0
  388. package/dist/module/constants/index.js.map +1 -1
  389. package/dist/module/contexts/BackgroundFilters.js +7 -4
  390. package/dist/module/contexts/BackgroundFilters.js.map +1 -1
  391. package/dist/module/contexts/ThemeContext.js +7 -4
  392. package/dist/module/contexts/ThemeContext.js.map +1 -1
  393. package/dist/module/contexts/index.js +2 -0
  394. package/dist/module/contexts/index.js.map +1 -1
  395. package/dist/module/contexts/internal/BackgroundFiltersContext.js +2 -0
  396. package/dist/module/contexts/internal/BackgroundFiltersContext.js.map +1 -1
  397. package/dist/module/contexts/internal/ScreenshotIosContext.js +7 -3
  398. package/dist/module/contexts/internal/ScreenshotIosContext.js.map +1 -1
  399. package/dist/module/hooks/index.js +3 -0
  400. package/dist/module/hooks/index.js.map +1 -1
  401. package/dist/module/hooks/push/index.js +2 -0
  402. package/dist/module/hooks/push/index.js.map +1 -1
  403. package/dist/module/hooks/push/useCallingExpWithCallingStateEffect.js +2 -0
  404. package/dist/module/hooks/push/useCallingExpWithCallingStateEffect.js.map +1 -1
  405. package/dist/module/hooks/push/useInitAndroidTokenAndRest.js +2 -0
  406. package/dist/module/hooks/push/useInitAndroidTokenAndRest.js.map +1 -1
  407. package/dist/module/hooks/push/useIosVoipPushEventsSetupEffect.js +2 -0
  408. package/dist/module/hooks/push/useIosVoipPushEventsSetupEffect.js.map +1 -1
  409. package/dist/module/hooks/useAndroidKeepCallAliveEffect.js +2 -0
  410. package/dist/module/hooks/useAndroidKeepCallAliveEffect.js.map +1 -1
  411. package/dist/module/hooks/useAutoEnterPiPEffect.js +7 -10
  412. package/dist/module/hooks/useAutoEnterPiPEffect.js.map +1 -1
  413. package/dist/module/hooks/useIsInPiPMode.js +2 -0
  414. package/dist/module/hooks/useIsInPiPMode.js.map +1 -1
  415. package/dist/module/hooks/useIsIosScreenshareBroadcastStarted.js +2 -0
  416. package/dist/module/hooks/useIsIosScreenshareBroadcastStarted.js.map +1 -1
  417. package/dist/module/hooks/useLoopbackRecording.js +260 -0
  418. package/dist/module/hooks/useLoopbackRecording.js.map +1 -0
  419. package/dist/module/hooks/useModeration.js +6 -1
  420. package/dist/module/hooks/useModeration.js.map +1 -1
  421. package/dist/module/hooks/usePaginatedLayoutSortPreset.js +2 -0
  422. package/dist/module/hooks/usePaginatedLayoutSortPreset.js.map +1 -1
  423. package/dist/module/hooks/usePermissionNotification.js +2 -0
  424. package/dist/module/hooks/usePermissionNotification.js.map +1 -1
  425. package/dist/module/hooks/usePermissionRequest.js +2 -0
  426. package/dist/module/hooks/usePermissionRequest.js.map +1 -1
  427. package/dist/module/hooks/useScreenShareAudioMixing.js +2 -0
  428. package/dist/module/hooks/useScreenShareAudioMixing.js.map +1 -1
  429. package/dist/module/hooks/useScreenShareButton.js +2 -0
  430. package/dist/module/hooks/useScreenShareButton.js.map +1 -1
  431. package/dist/module/hooks/useScreenshot.js +2 -0
  432. package/dist/module/hooks/useScreenshot.js.map +1 -1
  433. package/dist/module/hooks/useTrackDimensions.js +2 -0
  434. package/dist/module/hooks/useTrackDimensions.js.map +1 -1
  435. package/dist/module/icons/Back.js +10 -6
  436. package/dist/module/icons/Back.js.map +1 -1
  437. package/dist/module/icons/BadNetwork.js +13 -9
  438. package/dist/module/icons/BadNetwork.js.map +1 -1
  439. package/dist/module/icons/CameraSwitch.js +10 -6
  440. package/dist/module/icons/CameraSwitch.js.map +1 -1
  441. package/dist/module/icons/EndStreamIcon.js +10 -6
  442. package/dist/module/icons/EndStreamIcon.js.map +1 -1
  443. package/dist/module/icons/Eye.js +10 -6
  444. package/dist/module/icons/Eye.js.map +1 -1
  445. package/dist/module/icons/IconWrapper.js +7 -3
  446. package/dist/module/icons/IconWrapper.js.map +1 -1
  447. package/dist/module/icons/LivestreamControls.js +46 -39
  448. package/dist/module/icons/LivestreamControls.js.map +1 -1
  449. package/dist/module/icons/Lock.js +10 -6
  450. package/dist/module/icons/Lock.js.map +1 -1
  451. package/dist/module/icons/Maximize.js +35 -31
  452. package/dist/module/icons/Maximize.js.map +1 -1
  453. package/dist/module/icons/Mic.js +10 -6
  454. package/dist/module/icons/Mic.js.map +1 -1
  455. package/dist/module/icons/MicOff.js +10 -6
  456. package/dist/module/icons/MicOff.js.map +1 -1
  457. package/dist/module/icons/Phone.js +10 -6
  458. package/dist/module/icons/Phone.js.map +1 -1
  459. package/dist/module/icons/PhoneDown.js +10 -6
  460. package/dist/module/icons/PhoneDown.js.map +1 -1
  461. package/dist/module/icons/PinVertical.js +10 -6
  462. package/dist/module/icons/PinVertical.js.map +1 -1
  463. package/dist/module/icons/Reaction.js +10 -6
  464. package/dist/module/icons/Reaction.js.map +1 -1
  465. package/dist/module/icons/ScreenShare.js +10 -6
  466. package/dist/module/icons/ScreenShare.js.map +1 -1
  467. package/dist/module/icons/ScreenShareIndicator.js +23 -18
  468. package/dist/module/icons/ScreenShareIndicator.js.map +1 -1
  469. package/dist/module/icons/StartStreamIcon.js +10 -6
  470. package/dist/module/icons/StartStreamIcon.js.map +1 -1
  471. package/dist/module/icons/StopScreenShare.js +13 -9
  472. package/dist/module/icons/StopScreenShare.js.map +1 -1
  473. package/dist/module/icons/Video.js +10 -6
  474. package/dist/module/icons/Video.js.map +1 -1
  475. package/dist/module/icons/VideoSlash.js +10 -6
  476. package/dist/module/icons/VideoSlash.js.map +1 -1
  477. package/dist/module/icons/index.js +2 -6
  478. package/dist/module/icons/index.js.map +1 -1
  479. package/dist/module/index.js +2 -0
  480. package/dist/module/index.js.map +1 -1
  481. package/dist/module/modules/ScreenShareAudioManager.js +2 -0
  482. package/dist/module/modules/ScreenShareAudioManager.js.map +1 -1
  483. package/dist/module/modules/call-manager/CallManager.js +2 -0
  484. package/dist/module/modules/call-manager/CallManager.js.map +1 -1
  485. package/dist/module/modules/call-manager/PrevLibDetection.js +2 -0
  486. package/dist/module/modules/call-manager/PrevLibDetection.js.map +1 -1
  487. package/dist/module/modules/call-manager/index.js +2 -0
  488. package/dist/module/modules/call-manager/index.js.map +1 -1
  489. package/dist/module/modules/call-manager/native-module.d.js +2 -0
  490. package/dist/module/modules/call-manager/native-module.d.js.map +1 -1
  491. package/dist/module/modules/call-manager/types.js +1 -1
  492. package/dist/module/providers/BusyTonePlayer.js +9 -7
  493. package/dist/module/providers/BusyTonePlayer.js.map +1 -1
  494. package/dist/module/providers/NoiseCancellation/NoiseCancellationProvider.js +7 -4
  495. package/dist/module/providers/NoiseCancellation/NoiseCancellationProvider.js.map +1 -1
  496. package/dist/module/providers/NoiseCancellation/index.js +2 -0
  497. package/dist/module/providers/NoiseCancellation/index.js.map +1 -1
  498. package/dist/module/providers/NoiseCancellation/lib.js +2 -0
  499. package/dist/module/providers/NoiseCancellation/lib.js.map +1 -1
  500. package/dist/module/providers/StreamCall/AppStateListener.js +5 -0
  501. package/dist/module/providers/StreamCall/AppStateListener.js.map +1 -1
  502. package/dist/module/providers/StreamCall/AudioInterruptionTracer.js +2 -0
  503. package/dist/module/providers/StreamCall/AudioInterruptionTracer.js.map +1 -1
  504. package/dist/module/providers/StreamCall/DeviceStats.js +3 -1
  505. package/dist/module/providers/StreamCall/DeviceStats.js.map +1 -1
  506. package/dist/module/providers/StreamCall/index.js +7 -4
  507. package/dist/module/providers/StreamCall/index.js.map +1 -1
  508. package/dist/module/providers/StreamVideo.js +12 -5
  509. package/dist/module/providers/StreamVideo.js.map +1 -1
  510. package/dist/module/theme/colors.js +2 -0
  511. package/dist/module/theme/colors.js.map +1 -1
  512. package/dist/module/theme/constants.js +2 -0
  513. package/dist/module/theme/constants.js.map +1 -1
  514. package/dist/module/theme/index.js +2 -0
  515. package/dist/module/theme/index.js.map +1 -1
  516. package/dist/module/theme/theme.js +2 -0
  517. package/dist/module/theme/theme.js.map +1 -1
  518. package/dist/module/theme/types.js +2 -0
  519. package/dist/module/translations/index.js +2 -0
  520. package/dist/module/translations/index.js.map +1 -1
  521. package/dist/module/utils/StreamVideoRN/index.js +2 -1
  522. package/dist/module/utils/StreamVideoRN/index.js.map +1 -1
  523. package/dist/module/utils/StreamVideoRN/types.js +2 -0
  524. package/dist/module/utils/enterPiPAndroid.js +2 -0
  525. package/dist/module/utils/enterPiPAndroid.js.map +1 -1
  526. package/dist/module/utils/getAndroidDefaultRingtoneUrl.js +2 -0
  527. package/dist/module/utils/getAndroidDefaultRingtoneUrl.js.map +1 -1
  528. package/dist/module/utils/hooks/index.js +2 -0
  529. package/dist/module/utils/hooks/index.js.map +1 -1
  530. package/dist/module/utils/hooks/usePrevious.js +2 -0
  531. package/dist/module/utils/hooks/usePrevious.js.map +1 -1
  532. package/dist/module/utils/index.js +2 -0
  533. package/dist/module/utils/index.js.map +1 -1
  534. package/dist/module/utils/internal/callingx/audioSessionPromise.js +2 -0
  535. package/dist/module/utils/internal/callingx/audioSessionPromise.js.map +1 -1
  536. package/dist/module/utils/internal/callingx/callingx.js +6 -4
  537. package/dist/module/utils/internal/callingx/callingx.js.map +1 -1
  538. package/dist/module/utils/internal/optionallibs/gestureHandler.js +2 -0
  539. package/dist/module/utils/internal/optionallibs/gestureHandler.js.map +1 -1
  540. package/dist/module/utils/internal/optionallibs/index.js +2 -0
  541. package/dist/module/utils/internal/optionallibs/index.js.map +1 -1
  542. package/dist/module/utils/internal/optionallibs/reanimated.js +2 -0
  543. package/dist/module/utils/internal/optionallibs/reanimated.js.map +1 -1
  544. package/dist/module/utils/internal/pushLogoutCallback.js +2 -0
  545. package/dist/module/utils/internal/pushLogoutCallback.js.map +1 -1
  546. package/dist/module/utils/internal/registerSDKGlobals.js +4 -2
  547. package/dist/module/utils/internal/registerSDKGlobals.js.map +1 -1
  548. package/dist/module/utils/internal/rxSubjects.js +2 -0
  549. package/dist/module/utils/internal/rxSubjects.js.map +1 -1
  550. package/dist/module/utils/internal/shouldDisableIOSLocalVideoOnBackground.js +2 -0
  551. package/dist/module/utils/internal/shouldDisableIOSLocalVideoOnBackground.js.map +1 -1
  552. package/dist/module/utils/keepCallAliveHeadlessTask.js +2 -0
  553. package/dist/module/utils/keepCallAliveHeadlessTask.js.map +1 -1
  554. package/dist/module/utils/push/android.js +2 -0
  555. package/dist/module/utils/push/android.js.map +1 -1
  556. package/dist/module/utils/push/index.js +2 -0
  557. package/dist/module/utils/push/index.js.map +1 -1
  558. package/dist/module/utils/push/internal/constants.js +2 -0
  559. package/dist/module/utils/push/internal/constants.js.map +1 -1
  560. package/dist/module/utils/push/internal/ios.js +2 -0
  561. package/dist/module/utils/push/internal/ios.js.map +1 -1
  562. package/dist/module/utils/push/internal/utils.js +2 -0
  563. package/dist/module/utils/push/internal/utils.js.map +1 -1
  564. package/dist/module/utils/push/libs/callingx.js +2 -0
  565. package/dist/module/utils/push/libs/callingx.js.map +1 -1
  566. package/dist/module/utils/push/libs/firebaseMessaging/index.js +2 -0
  567. package/dist/module/utils/push/libs/firebaseMessaging/index.js.map +1 -1
  568. package/dist/module/utils/push/libs/firebaseMessaging/lib.js +2 -0
  569. package/dist/module/utils/push/libs/firebaseMessaging/lib.js.map +1 -1
  570. package/dist/module/utils/push/libs/index.js +2 -0
  571. package/dist/module/utils/push/libs/index.js.map +1 -1
  572. package/dist/module/utils/push/setupCallingExpEvents.js +2 -0
  573. package/dist/module/utils/push/setupCallingExpEvents.js.map +1 -1
  574. package/dist/module/utils/push/setupIosVoipPushEvents.js +2 -0
  575. package/dist/module/utils/push/setupIosVoipPushEvents.js.map +1 -1
  576. package/dist/module/utils/push/utils.js +2 -0
  577. package/dist/module/utils/push/utils.js.map +1 -1
  578. package/dist/module/utils/setClientDetails.js +2 -0
  579. package/dist/module/utils/setClientDetails.js.map +1 -1
  580. package/dist/module/version.js +3 -1
  581. package/dist/module/version.js.map +1 -1
  582. package/dist/typescript/components/Call/CallContent/CallContent.d.ts.map +1 -1
  583. package/dist/typescript/components/Call/CallLayout/CallParticipantsGrid.d.ts.map +1 -1
  584. package/dist/typescript/components/Call/CallLayout/CallParticipantsSpotlight.d.ts.map +1 -1
  585. package/dist/typescript/components/Call/CallParticipantsList/CallParticipantsList.d.ts.map +1 -1
  586. package/dist/typescript/components/Call/Lobby/Lobby.d.ts.map +1 -1
  587. package/dist/typescript/components/Livestream/HostLivestream/HostLivestream.d.ts.map +1 -1
  588. package/dist/typescript/components/Livestream/LivestreamLayout/LivestreamLayout.d.ts.map +1 -1
  589. package/dist/typescript/components/Livestream/LivestreamPlayer/LivestreamEnded.d.ts.map +1 -1
  590. package/dist/typescript/components/Livestream/ViewerLivestream/ViewerLivestream.d.ts.map +1 -1
  591. package/dist/typescript/components/Participant/FloatingParticipantView/index.d.ts.map +1 -1
  592. package/dist/typescript/components/Participant/ParticipantView/ParticipantView.d.ts +1 -1
  593. package/dist/typescript/components/Participant/ParticipantView/ParticipantView.d.ts.map +1 -1
  594. package/dist/typescript/components/Participant/ParticipantView/VideoRenderer/index.d.ts +1 -1
  595. package/dist/typescript/components/Participant/ParticipantView/VideoRenderer/index.d.ts.map +1 -1
  596. package/dist/typescript/contexts/BackgroundFilters.d.ts +1 -1
  597. package/dist/typescript/contexts/BackgroundFilters.d.ts.map +1 -1
  598. package/dist/typescript/hooks/index.d.ts +1 -0
  599. package/dist/typescript/hooks/index.d.ts.map +1 -1
  600. package/dist/typescript/hooks/useAutoEnterPiPEffect.d.ts.map +1 -1
  601. package/dist/typescript/hooks/useLoopbackRecording.d.ts +85 -0
  602. package/dist/typescript/hooks/useLoopbackRecording.d.ts.map +1 -0
  603. package/dist/typescript/hooks/useModeration.d.ts.map +1 -1
  604. package/dist/typescript/icons/index.d.ts +0 -6
  605. package/dist/typescript/icons/index.d.ts.map +1 -1
  606. package/dist/typescript/providers/StreamCall/AppStateListener.d.ts.map +1 -1
  607. package/dist/typescript/providers/StreamCall/DeviceStats.d.ts.map +1 -1
  608. package/dist/typescript/utils/StreamVideoRN/index.d.ts +0 -1
  609. package/dist/typescript/utils/StreamVideoRN/index.d.ts.map +1 -1
  610. package/dist/typescript/utils/internal/callingx/callingx.d.ts.map +1 -1
  611. package/dist/typescript/utils/push/libs/firebaseMessaging/index.d.ts +2 -16
  612. package/dist/typescript/utils/push/libs/firebaseMessaging/index.d.ts.map +1 -1
  613. package/dist/typescript/version.d.ts +1 -1
  614. package/ios/StreamVideoReactNative-Bridging-Header.h +2 -0
  615. package/ios/StreamVideoReactNative.m +81 -0
  616. package/ios/TracksRecorder/AudioPipeline.swift +270 -0
  617. package/ios/TracksRecorder/PipelineHost.swift +56 -0
  618. package/ios/TracksRecorder/RecorderAudioRenderTap.swift +144 -0
  619. package/ios/TracksRecorder/RecorderVideoSink.swift +137 -0
  620. package/ios/TracksRecorder/TracksRecorderManager.swift +333 -0
  621. package/ios/TracksRecorder/VideoPipeline.swift +297 -0
  622. package/package.json +10 -8
  623. package/src/components/Call/CallContent/CallContent.tsx +69 -39
  624. package/src/components/Call/CallLayout/CallParticipantsGrid.tsx +4 -6
  625. package/src/components/Call/CallLayout/CallParticipantsSpotlight.tsx +30 -21
  626. package/src/components/Call/CallParticipantsList/CallParticipantsList.tsx +23 -9
  627. package/src/components/Call/Lobby/Lobby.tsx +9 -5
  628. package/src/components/Livestream/HostLivestream/HostLivestream.tsx +5 -6
  629. package/src/components/Livestream/LivestreamControls/ViewerLivestreamControls.tsx +1 -1
  630. package/src/components/Livestream/LivestreamLayout/LivestreamLayout.tsx +4 -64
  631. package/src/components/Livestream/LivestreamPlayer/LivestreamEnded.tsx +54 -18
  632. package/src/components/Livestream/LivestreamTopView/DurationBadge.tsx +2 -2
  633. package/src/components/Livestream/ViewerLivestream/ViewerLivestream.tsx +10 -12
  634. package/src/components/Participant/FloatingParticipantView/index.tsx +26 -18
  635. package/src/components/Participant/ParticipantView/ParticipantReaction.tsx +1 -1
  636. package/src/components/Participant/ParticipantView/ParticipantView.tsx +68 -64
  637. package/src/components/Participant/ParticipantView/VideoRenderer/index.tsx +192 -179
  638. package/src/hooks/index.ts +1 -0
  639. package/src/hooks/useAutoEnterPiPEffect.tsx +5 -11
  640. package/src/hooks/useLoopbackRecording.ts +448 -0
  641. package/src/hooks/useModeration.ts +4 -1
  642. package/src/icons/index.tsx +0 -6
  643. package/src/providers/BusyTonePlayer.tsx +11 -11
  644. package/src/providers/StreamCall/AppStateListener.tsx +3 -0
  645. package/src/providers/StreamCall/DeviceStats.tsx +2 -1
  646. package/src/utils/StreamVideoRN/index.ts +0 -1
  647. package/src/utils/internal/callingx/callingx.ts +20 -10
  648. package/src/utils/internal/registerSDKGlobals.ts +2 -2
  649. package/src/utils/push/libs/firebaseMessaging/index.ts +4 -2
  650. package/src/version.ts +1 -1
  651. package/dist/commonjs/icons/LeaveStreamIcon.js +0 -20
  652. package/dist/commonjs/icons/LeaveStreamIcon.js.map +0 -1
  653. package/dist/commonjs/icons/Settings.js +0 -22
  654. package/dist/commonjs/icons/Settings.js.map +0 -1
  655. package/dist/commonjs/icons/ShieldBadge.js +0 -20
  656. package/dist/commonjs/icons/ShieldBadge.js.map +0 -1
  657. package/dist/commonjs/icons/Spotlight.js +0 -21
  658. package/dist/commonjs/icons/Spotlight.js.map +0 -1
  659. package/dist/commonjs/icons/ThreeDots.js +0 -31
  660. package/dist/commonjs/icons/ThreeDots.js.map +0 -1
  661. package/dist/commonjs/icons/TopViewBackground.js +0 -35
  662. package/dist/commonjs/icons/TopViewBackground.js.map +0 -1
  663. package/dist/module/icons/LeaveStreamIcon.js +0 -12
  664. package/dist/module/icons/LeaveStreamIcon.js.map +0 -1
  665. package/dist/module/icons/Settings.js +0 -13
  666. package/dist/module/icons/Settings.js.map +0 -1
  667. package/dist/module/icons/ShieldBadge.js +0 -12
  668. package/dist/module/icons/ShieldBadge.js.map +0 -1
  669. package/dist/module/icons/Spotlight.js +0 -13
  670. package/dist/module/icons/Spotlight.js.map +0 -1
  671. package/dist/module/icons/ThreeDots.js +0 -23
  672. package/dist/module/icons/ThreeDots.js.map +0 -1
  673. package/dist/module/icons/TopViewBackground.js +0 -27
  674. package/dist/module/icons/TopViewBackground.js.map +0 -1
  675. package/dist/typescript/icons/LeaveStreamIcon.d.ts +0 -3
  676. package/dist/typescript/icons/LeaveStreamIcon.d.ts.map +0 -1
  677. package/dist/typescript/icons/Settings.d.ts +0 -7
  678. package/dist/typescript/icons/Settings.d.ts.map +0 -1
  679. package/dist/typescript/icons/ShieldBadge.d.ts +0 -3
  680. package/dist/typescript/icons/ShieldBadge.d.ts.map +0 -1
  681. package/dist/typescript/icons/Spotlight.d.ts +0 -8
  682. package/dist/typescript/icons/Spotlight.d.ts.map +0 -1
  683. package/dist/typescript/icons/ThreeDots.d.ts +0 -7
  684. package/dist/typescript/icons/ThreeDots.d.ts.map +0 -1
  685. package/dist/typescript/icons/TopViewBackground.d.ts +0 -15
  686. package/dist/typescript/icons/TopViewBackground.d.ts.map +0 -1
  687. package/src/icons/LeaveStreamIcon.tsx +0 -13
  688. package/src/icons/Settings.tsx +0 -14
  689. package/src/icons/ShieldBadge.tsx +0 -13
  690. package/src/icons/Spotlight.tsx +0 -18
  691. package/src/icons/ThreeDots.tsx +0 -14
  692. package/src/icons/TopViewBackground.tsx +0 -43
@@ -0,0 +1,297 @@
1
+ //
2
+ // Copyright © 2026 Stream.io Inc. All rights reserved.
3
+ //
4
+
5
+ import AVFoundation
6
+ import CoreMedia
7
+ import CoreVideo
8
+ import Foundation
9
+ import WebRTC
10
+
11
+ /// Video pipeline owned by `TracksRecorderManager`. Encapsulates the H.264
12
+ /// video path:
13
+ /// - the `RecorderVideoSink` attached to the source `RTCVideoTrack`,
14
+ /// - an `AVAssetWriterInput` configured for H.264 encoding (codec, bitrate,
15
+ /// profile, key-frame interval) paired with an
16
+ /// `AVAssetWriterInputPixelBufferAdaptor` — AVFoundation owns the encoder
17
+ /// and picks hardware/software automatically. No manual VT session.
18
+ /// - per-recording counters / PTS range surfaced via `logSummary` at stop.
19
+ ///
20
+ /// All state mutation runs on the host's serial queue. Frames arrive on the
21
+ /// WebRTC sink thread and re-dispatch onto `host.queue` before touching
22
+ /// pipeline state.
23
+ internal final class VideoPipeline {
24
+
25
+ private static let bitRate: NSNumber = NSNumber(value: 1_000_000)
26
+
27
+ private weak var host: PipelineHost?
28
+ private let videoTrack: RTCVideoTrack
29
+ private let targetWidth: Int32
30
+ private let targetHeight: Int32
31
+
32
+ private var sink: RecorderVideoSink?
33
+ private var videoInput: AVAssetWriterInput?
34
+ private var pixelBufferAdaptor: AVAssetWriterInputPixelBufferAdaptor?
35
+ private var inputAdded = false
36
+
37
+ // Diagnostic counters + PTS range, surfaced via [logSummary] at stop.
38
+ private var framesReceived = 0
39
+ private var samplesAppended = 0
40
+ private var frameAppendFailures = 0
41
+ private var framesDropped = 0
42
+ private var firstSamplePtsUs: Int64 = -1
43
+ private var lastSamplePtsUs: Int64 = -1
44
+
45
+ // MARK: - Init
46
+
47
+ init(
48
+ host: PipelineHost,
49
+ videoTrack: RTCVideoTrack,
50
+ targetWidth: Int32 = 0,
51
+ targetHeight: Int32 = 0
52
+ ) {
53
+ self.host = host
54
+ self.videoTrack = videoTrack
55
+ self.targetWidth = targetWidth
56
+ self.targetHeight = targetHeight
57
+ }
58
+
59
+ // MARK: - Public API
60
+
61
+ /// Attach the sink to the source track. Future frames post to
62
+ /// `host.queue` and run through the per-frame handler.
63
+ func start() {
64
+ let sink = RecorderVideoSink { [weak self] pixelBuffer, width, height, timestampNs in
65
+ self?.handleVideoFrame(
66
+ pixelBuffer: pixelBuffer,
67
+ width: width,
68
+ height: height,
69
+ timestampNs: timestampNs
70
+ )
71
+ }
72
+ self.sink = sink
73
+ videoTrack.add(sink)
74
+ }
75
+
76
+ /// On-queue. Remove the sink from the source track so no more frames
77
+ /// arrive. Idempotent.
78
+ func detachSink() {
79
+ if let sink = sink {
80
+ videoTrack.remove(sink)
81
+ }
82
+ sink = nil
83
+ }
84
+
85
+ /// On-queue. Marks the asset-writer input as finished so the writer
86
+ /// can finalise. AVFoundation's `finishWriting` flushes any pending
87
+ /// encoded samples internally; no separate drain step is required.
88
+ func markInputAsFinished() {
89
+ videoInput?.markAsFinished()
90
+ }
91
+
92
+ /// On-queue. Logs the pipeline's diagnostic summary — call once at the
93
+ /// end of a recording.
94
+ func logSummary() {
95
+ let durationMs: Int64
96
+ if firstSamplePtsUs >= 0 && lastSamplePtsUs >= firstSamplePtsUs {
97
+ durationMs = (lastSamplePtsUs - firstSamplePtsUs) / 1000
98
+ } else {
99
+ durationMs = -1
100
+ }
101
+ let writerStatus = host?.assetWriter?.status.rawValue ?? -1
102
+ let writerErr = (host?.assetWriter?.error as NSError?)?.localizedDescription ?? "nil"
103
+ NSLog(
104
+ "[TracksRecorder.Video] summary received=%d appended=%d appendFailures=%d dropped=%d firstPtsUs=%lld lastPtsUs=%lld durationMs=%lld writerStatus=%ld writerErr=%@",
105
+ framesReceived,
106
+ samplesAppended,
107
+ frameAppendFailures,
108
+ framesDropped,
109
+ firstSamplePtsUs,
110
+ lastSamplePtsUs,
111
+ durationMs,
112
+ writerStatus,
113
+ writerErr
114
+ )
115
+ }
116
+
117
+ // MARK: - Sink → queue bridge
118
+
119
+ private func handleVideoFrame(
120
+ pixelBuffer: CVPixelBuffer,
121
+ width: Int32,
122
+ height: Int32,
123
+ timestampNs: Int64
124
+ ) {
125
+ guard let host = host else { return }
126
+
127
+ // Pixel buffer is borrowed from the sink — it must be retained
128
+ // across the queue hop. The closure capture pins it for the
129
+ // duration of the async block (ARC retains it as part of the
130
+ // closure's captured state).
131
+ host.queue.async { [weak self, pixelBuffer] in
132
+ self?.handleVideoFrameOnQueue(
133
+ pixelBuffer: pixelBuffer,
134
+ width: width,
135
+ height: height,
136
+ timestampNs: timestampNs
137
+ )
138
+ }
139
+ }
140
+
141
+ private func handleVideoFrameOnQueue(
142
+ pixelBuffer: CVPixelBuffer,
143
+ width: Int32,
144
+ height: Int32,
145
+ timestampNs: Int64
146
+ ) {
147
+ guard let host = host, host.isRecording, let writer = host.assetWriter else { return }
148
+
149
+ framesReceived += 1
150
+
151
+ // Lazy-create the writer's video input on the first frame.
152
+ // Prefer the publisher's max video dimensions so the encoder
153
+ // is sized for the highest layer the SFU might ever forward;
154
+ // fall back to the first frame's actual dimensions when no
155
+ // target is supplied.
156
+ if videoInput == nil {
157
+ let actualW = Int32(CVPixelBufferGetWidth(pixelBuffer))
158
+ let actualH = Int32(CVPixelBufferGetHeight(pixelBuffer))
159
+ let (encW, encH) = resolveEncoderDimensions(
160
+ targetW: targetWidth,
161
+ targetH: targetHeight,
162
+ frameW: actualW,
163
+ frameH: actualH
164
+ )
165
+ let pixelFormat = CVPixelBufferGetPixelFormatType(pixelBuffer)
166
+ configureVideoInput(
167
+ width: encW,
168
+ height: encH,
169
+ pixelFormat: pixelFormat,
170
+ writer: writer
171
+ )
172
+ }
173
+
174
+ let pts = presentationTime(host: host, timestampNs: UInt64(bitPattern: timestampNs))
175
+
176
+ guard
177
+ writer.status == .writing,
178
+ let input = videoInput,
179
+ let adaptor = pixelBufferAdaptor
180
+ else {
181
+ if writer.status == .failed {
182
+ let err = writer.error as NSError?
183
+ NSLog("[TracksRecorder.Video] writer FAILED in frame handler: domain=%@ code=%ld desc=%@",
184
+ err?.domain ?? "nil", err?.code ?? 0,
185
+ err?.localizedDescription ?? "nil")
186
+ }
187
+ return
188
+ }
189
+
190
+ if !input.isReadyForMoreMediaData {
191
+ framesDropped += 1
192
+ if framesDropped % 30 == 1 {
193
+ NSLog("[TracksRecorder.Video] input not ready, dropped=%d", framesDropped)
194
+ }
195
+ return
196
+ }
197
+
198
+ let appended = adaptor.append(pixelBuffer, withPresentationTime: pts)
199
+ if appended {
200
+ samplesAppended += 1
201
+ let ptsUs = Int64(CMTimeGetSeconds(pts) * 1_000_000)
202
+ if firstSamplePtsUs < 0 || ptsUs < firstSamplePtsUs {
203
+ firstSamplePtsUs = ptsUs
204
+ }
205
+ if ptsUs > lastSamplePtsUs {
206
+ lastSamplePtsUs = ptsUs
207
+ }
208
+ if samplesAppended == 1 {
209
+ NSLog("[TracksRecorder.Video] first frame appended OK pts=%lldus", ptsUs)
210
+ }
211
+ } else {
212
+ // `adaptor.append` returns false without a direct reason —
213
+ // inspect `writer.error` and the input's ready flag for
214
+ // diagnostics.
215
+ frameAppendFailures += 1
216
+ let writerErr = writer.error as NSError?
217
+ NSLog(
218
+ "[TracksRecorder.Video] adaptor.append FAILED #%d writerStatus=%ld writerErr domain=%@ code=%ld desc=%@ inputReady=%@",
219
+ frameAppendFailures,
220
+ writer.status.rawValue,
221
+ writerErr?.domain ?? "nil",
222
+ writerErr?.code ?? 0,
223
+ writerErr?.localizedDescription ?? "nil",
224
+ input.isReadyForMoreMediaData ? "YES" : "NO"
225
+ )
226
+ }
227
+ }
228
+
229
+ // MARK: - Asset writer input setup
230
+
231
+ /// Picks the encoder dimensions, preferring the caller-supplied
232
+ /// target but oriented to match the frame buffer. Publish options
233
+ /// are expressed in WebRTC's canonical landscape form; the buffer
234
+ /// may be portrait — swap target axes when they disagree. Falls
235
+ /// back to the frame's own dimensions if no target was supplied.
236
+ private func resolveEncoderDimensions(
237
+ targetW: Int32,
238
+ targetH: Int32,
239
+ frameW: Int32,
240
+ frameH: Int32
241
+ ) -> (Int32, Int32) {
242
+ guard targetW > 0 && targetH > 0 else { return (frameW, frameH) }
243
+ let framePortrait = frameH > frameW
244
+ let targetPortrait = targetH > targetW
245
+ if framePortrait == targetPortrait {
246
+ return (targetW, targetH)
247
+ }
248
+ return (targetH, targetW)
249
+ }
250
+
251
+ /// Builds the H.264 `AVAssetWriterInput` and its pixel-buffer
252
+ /// adaptor. AVFoundation owns the encoder and falls back from
253
+ /// hardware to software if the H.264 pool is contended.
254
+ private func configureVideoInput(
255
+ width: Int32,
256
+ height: Int32,
257
+ pixelFormat: OSType,
258
+ writer: AVAssetWriter
259
+ ) {
260
+ // `AVVideoScalingModeResizeAspect` lets AVFoundation scale
261
+ // incoming pixel buffers to the encoder's output dimensions
262
+ // while preserving aspect ratio.
263
+ let settings: [String: Any] = [
264
+ AVVideoCodecKey: AVVideoCodecType.h264,
265
+ AVVideoWidthKey: width,
266
+ AVVideoHeightKey: height,
267
+ AVVideoScalingModeKey: AVVideoScalingModeResizeAspect,
268
+ AVVideoCompressionPropertiesKey: [
269
+ AVVideoAverageBitRateKey: VideoPipeline.bitRate,
270
+ ],
271
+ ]
272
+ let input = AVAssetWriterInput(mediaType: .video, outputSettings: settings)
273
+ input.expectsMediaDataInRealTime = true
274
+
275
+ // Omit width/height in source attributes so the adaptor
276
+ // accepts buffers at any layer resolution the SFU forwards.
277
+ let pbAttributes: [String: Any] = [
278
+ kCVPixelBufferPixelFormatTypeKey as String: pixelFormat,
279
+ ]
280
+ let adaptor = AVAssetWriterInputPixelBufferAdaptor(
281
+ assetWriterInput: input,
282
+ sourcePixelBufferAttributes: pbAttributes
283
+ )
284
+
285
+ guard writer.canAdd(input) else {
286
+ NSLog("[TracksRecorder.Video] writer cannot add encoding video input")
287
+ host?.onFatalError(makeRecorderError("video_input_add_failed", code: 4))
288
+ return
289
+ }
290
+
291
+ writer.add(input)
292
+ videoInput = input
293
+ pixelBufferAdaptor = adaptor
294
+ inputAdded = true
295
+ host?.onTrackAdded()
296
+ }
297
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stream-io/video-react-native-sdk",
3
- "version": "1.39.0",
3
+ "version": "1.40.0",
4
4
  "description": "Stream Video SDK for React Native",
5
5
  "author": "https://getstream.io",
6
6
  "homepage": "https://getstream.io/video/docs/react-native/",
@@ -51,8 +51,8 @@
51
51
  "!**/.*"
52
52
  ],
53
53
  "dependencies": {
54
- "@stream-io/video-client": "1.54.0",
55
- "@stream-io/video-react-bindings": "1.17.0",
54
+ "@stream-io/video-client": "1.55.0",
55
+ "@stream-io/video-react-bindings": "1.18.0",
56
56
  "intl-pluralrules": "2.0.1",
57
57
  "react-native-url-polyfill": "^3.0.0",
58
58
  "rxjs": "~7.8.2",
@@ -117,14 +117,16 @@
117
117
  "@react-native-firebase/messaging": "^24.0.0",
118
118
  "@react-native/babel-preset": "0.85.3",
119
119
  "@react-native/metro-config": "0.85.3",
120
- "@stream-io/noise-cancellation-react-native": "^0.8.0",
121
- "@stream-io/react-native-callingx": "^0.5.1",
120
+ "@stream-io/noise-cancellation-react-native": "^0.9.0",
121
+ "@stream-io/react-native-callingx": "^0.6.0",
122
122
  "@stream-io/react-native-webrtc": "145.0.0",
123
- "@stream-io/video-filters-react-native": "^0.13.0",
123
+ "@stream-io/typescript-config": "^0.0.0",
124
+ "@stream-io/video-filters-react-native": "^0.14.0",
124
125
  "@testing-library/jest-native": "^5.4.3",
125
126
  "@testing-library/react-native": "13.3.3",
126
127
  "@tsconfig/node18": "^18.2.6",
127
128
  "@types/jest": "^29.5.14",
129
+ "@types/node": "^25.9.3",
128
130
  "@types/react": "~19.2.15",
129
131
  "@types/react-test-renderer": "^19.1.0",
130
132
  "expo": "~56.0.9",
@@ -134,14 +136,14 @@
134
136
  "jest": "^29.7.0",
135
137
  "react": "19.2.3",
136
138
  "react-native": "0.85.3",
137
- "react-native-builder-bob": "~0.23",
139
+ "react-native-builder-bob": "^0.41.0",
138
140
  "react-native-gesture-handler": "~2.31.2",
139
141
  "react-native-reanimated": "4.3.1",
140
142
  "react-native-svg": "15.15.5",
141
143
  "react-native-worklets": "0.8.3",
142
144
  "react-test-renderer": "19.2.3",
143
145
  "rimraf": "^6.1.3",
144
- "typescript": "^5.9.3"
146
+ "typescript": "^6.0.3"
145
147
  },
146
148
  "react-native-builder-bob": {
147
149
  "source": "src",
@@ -1,11 +1,5 @@
1
1
  import React, { useEffect, useMemo, useRef, useState } from 'react';
2
- import {
3
- NativeModules,
4
- Platform,
5
- StyleSheet,
6
- View,
7
- type ViewStyle,
8
- } from 'react-native';
2
+ import { NativeModules, Platform, StyleSheet, View } from 'react-native';
9
3
  import {
10
4
  CallParticipantsGrid,
11
5
  type CallParticipantsGridProps,
@@ -139,17 +133,44 @@ export const CallContent = ({
139
133
 
140
134
  useAutoEnterPiPEffect(disablePictureInPicture);
141
135
 
142
- const [remoteParticipants, setRemoteParticipants] = useState<
143
- StreamVideoParticipant[]
144
- >(() => call?.state.remoteParticipants ?? []);
136
+ // CallContent only needs to know whether to show the floating view (0 / 1-2 / 3+
137
+ // remote participants) and the single participant to render in it. Storing a count
138
+ // bucket plus that one participant - instead of the whole array - means CallContent
139
+ // re-renders only on bucket-boundary crossings, not on every debounced emission.
140
+ const [floatingViewState, setFloatingViewState] = useState<{
141
+ remoteCountBucket: number;
142
+ firstRemoteParticipant: StreamVideoParticipant | undefined;
143
+ }>(() => {
144
+ const remote = call?.state.remoteParticipants ?? [];
145
+ return {
146
+ remoteCountBucket: Math.min(remote.length, 3),
147
+ firstRemoteParticipant: remote.length === 1 ? remote[0] : undefined,
148
+ };
149
+ });
145
150
  useEffect(() => {
146
151
  if (!call) {
147
- setRemoteParticipants([]);
152
+ setFloatingViewState({
153
+ remoteCountBucket: 0,
154
+ firstRemoteParticipant: undefined,
155
+ });
148
156
  return;
149
157
  }
150
158
  const sub = call.state.remoteParticipants$
151
159
  .pipe(debounceTime(300))
152
- .subscribe(setRemoteParticipants);
160
+ .subscribe((remoteParticipants) => {
161
+ const remoteCountBucket = Math.min(remoteParticipants.length, 3);
162
+ const firstRemoteParticipant =
163
+ remoteParticipants.length === 1 ? remoteParticipants[0] : undefined;
164
+ setFloatingViewState((prev) => {
165
+ if (
166
+ prev.remoteCountBucket === remoteCountBucket &&
167
+ prev.firstRemoteParticipant === firstRemoteParticipant
168
+ ) {
169
+ return prev;
170
+ }
171
+ return { remoteCountBucket, firstRemoteParticipant };
172
+ });
173
+ });
153
174
  return () => sub.unsubscribe();
154
175
  }, [call]);
155
176
  const localParticipant = useLocalParticipant();
@@ -158,38 +179,39 @@ export const CallContent = ({
158
179
  const showSpotlightLayout = hasScreenShare || layout === 'spotlight';
159
180
 
160
181
  useEffect(() => {
161
- if (isInPiPMode && Platform.OS === 'android') {
162
- const unsubFunc = call?.on('call.ended', () => {
182
+ if (!isInPiPMode || Platform.OS !== 'android') return;
183
+ const unsubFunc = call?.on('call.ended', () => {
184
+ videoLoggerSystem
185
+ .getLogger('CallContent')
186
+ .debug(`exiting PiP mode due to call.ended`);
187
+ NativeModules.StreamVideoReactNative.exitPipMode();
188
+ });
189
+ const subscription = call?.state.callingState$.subscribe((state) => {
190
+ if (state === CallingState.LEFT) {
163
191
  videoLoggerSystem
164
192
  .getLogger('CallContent')
165
- .debug(`exiting PiP mode due to call.ended`);
193
+ .debug(`exiting PiP mode due to callingState: LEFT`);
166
194
  NativeModules.StreamVideoReactNative.exitPipMode();
167
- });
168
- const subscription = call?.state.callingState$.subscribe((state) => {
169
- if (state === CallingState.LEFT) {
170
- videoLoggerSystem
171
- .getLogger('CallContent')
172
- .debug(`exiting PiP mode due to callingState: LEFT`);
173
- NativeModules.StreamVideoReactNative.exitPipMode();
174
- }
175
- });
176
- return () => {
177
- unsubFunc?.();
178
- subscription?.unsubscribe();
179
- };
180
- }
195
+ }
196
+ });
197
+ return () => {
198
+ unsubFunc?.();
199
+ subscription?.unsubscribe();
200
+ };
181
201
  }, [isInPiPMode, call]);
182
202
 
203
+ const { remoteCountBucket, firstRemoteParticipant } = floatingViewState;
204
+
183
205
  const showFloatingView =
184
206
  !showSpotlightLayout &&
185
207
  !isInPiPMode &&
186
- remoteParticipants.length > 0 &&
187
- remoteParticipants.length < 3;
208
+ remoteCountBucket > 0 &&
209
+ remoteCountBucket < 3;
188
210
 
189
211
  const isRemoteParticipantInFloatingView =
190
212
  showFloatingView &&
191
213
  showRemoteParticipantInFloatingView &&
192
- remoteParticipants.length === 1;
214
+ remoteCountBucket === 1;
193
215
 
194
216
  /**
195
217
  * This hook is used to handle IncallManager specs of the application.
@@ -203,10 +225,11 @@ export const CallContent = ({
203
225
  prevInCallManager.stop();
204
226
  };
205
227
  }
228
+ return undefined;
206
229
  }, []);
207
230
 
208
231
  const handleFloatingViewParticipantSwitch = () => {
209
- if (remoteParticipants.length !== 1) {
232
+ if (remoteCountBucket !== 1) {
210
233
  return;
211
234
  }
212
235
  setShowRemoteParticipantInFloatingView((prevState) => !prevState);
@@ -242,10 +265,6 @@ export const CallContent = ({
242
265
  supportedReactions,
243
266
  };
244
267
 
245
- const landscapeStyles: ViewStyle = {
246
- flexDirection: landscape ? 'row' : 'column',
247
- };
248
-
249
268
  return (
250
269
  <>
251
270
  {!disablePictureInPicture && (
@@ -254,7 +273,13 @@ export const CallContent = ({
254
273
  mirror={mirror}
255
274
  />
256
275
  )}
257
- <View style={[styles.container, landscapeStyles, callContent.container]}>
276
+ <View
277
+ style={[
278
+ styles.container,
279
+ landscape ? landscapeStyles.row : landscapeStyles.column,
280
+ callContent.container,
281
+ ]}
282
+ >
258
283
  <View style={[styles.content, callContent.callParticipantsContainer]}>
259
284
  <View
260
285
  style={[
@@ -270,7 +295,7 @@ export const CallContent = ({
270
295
  <FloatingParticipantView
271
296
  participant={
272
297
  isRemoteParticipantInFloatingView
273
- ? remoteParticipants[0]
298
+ ? firstRemoteParticipant
274
299
  : localParticipant
275
300
  }
276
301
  onPressHandler={handleFloatingViewParticipantSwitch}
@@ -299,6 +324,11 @@ export const CallContent = ({
299
324
  );
300
325
  };
301
326
 
327
+ const landscapeStyles = StyleSheet.create({
328
+ row: { flexDirection: 'row' },
329
+ column: { flexDirection: 'column' },
330
+ });
331
+
302
332
  const useStyles = () => {
303
333
  const { theme } = useTheme();
304
334
  return useMemo(
@@ -1,5 +1,5 @@
1
1
  import React, { useEffect, useState } from 'react';
2
- import { StyleSheet, View, type ViewStyle } from 'react-native';
2
+ import { StyleSheet, View } from 'react-native';
3
3
  import { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';
4
4
  import { debounceTime } from 'rxjs';
5
5
  import {
@@ -76,10 +76,6 @@ export const CallParticipantsGrid = ({
76
76
  sub2.unsubscribe();
77
77
  };
78
78
  }, [call]);
79
- const landscapeStyles: ViewStyle = {
80
- flexDirection: landscape ? 'row' : 'column',
81
- };
82
-
83
79
  const isInPiPMode = useIsInPiPMode();
84
80
 
85
81
  const showFloatingView =
@@ -125,7 +121,7 @@ export const CallParticipantsGrid = ({
125
121
  <View
126
122
  style={[
127
123
  styles.container,
128
- landscapeStyles,
124
+ landscape ? styles.row : styles.column,
129
125
  { backgroundColor: colors.sheetPrimary },
130
126
  callParticipantsGrid.container,
131
127
  ]}
@@ -145,4 +141,6 @@ export const CallParticipantsGrid = ({
145
141
 
146
142
  const styles = StyleSheet.create({
147
143
  container: { flex: 1 },
144
+ row: { flexDirection: 'row' },
145
+ column: { flexDirection: 'column' },
148
146
  });
@@ -4,7 +4,7 @@ import {
4
4
  type StreamVideoParticipant,
5
5
  } from '@stream-io/video-client';
6
6
  import { useCall } from '@stream-io/video-react-bindings';
7
- import { StyleSheet, View, type ViewStyle } from 'react-native';
7
+ import { StyleSheet, View } from 'react-native';
8
8
  import { debounceTime } from 'rxjs';
9
9
  import { ComponentTestIds } from '../../../constants/TestIds';
10
10
  import {
@@ -91,13 +91,28 @@ export const CallParticipantsSpotlight = ({
91
91
  mirror,
92
92
  };
93
93
 
94
- const landscapeStyles: ViewStyle = {
95
- flexDirection: landscape ? 'row' : 'column',
96
- };
97
-
98
- const spotlightContainerLandscapeStyles: ViewStyle = {
99
- marginHorizontal: landscape ? 0 : variants.spacingSizes.xs,
100
- };
94
+ // Memoized so the spotlight tile's `style` prop stays referentially stable;
95
+ // otherwise the fresh array literal defeats ParticipantView's React.memo.
96
+ const spotlightParticipantStyle = useMemo(
97
+ () =>
98
+ isUserAloneInCall
99
+ ? [
100
+ styles.fullScreenSpotlightContainer,
101
+ callParticipantsSpotlight.fullScreenSpotlightContainer,
102
+ ]
103
+ : [
104
+ styles.spotlightContainer,
105
+ { marginHorizontal: landscape ? 0 : variants.spacingSizes.xs },
106
+ callParticipantsSpotlight.spotlightContainer,
107
+ ],
108
+ [
109
+ isUserAloneInCall,
110
+ landscape,
111
+ styles,
112
+ callParticipantsSpotlight,
113
+ variants.spacingSizes.xs,
114
+ ],
115
+ );
101
116
 
102
117
  const showShareScreenOverlay =
103
118
  participantInSpotlight?.isLocalParticipant &&
@@ -109,7 +124,7 @@ export const CallParticipantsSpotlight = ({
109
124
  testID={ComponentTestIds.CALL_PARTICIPANTS_SPOTLIGHT}
110
125
  style={[
111
126
  styles.container,
112
- landscapeStyles,
127
+ landscape ? landscapeStyles.row : landscapeStyles.column,
113
128
  callParticipantsSpotlight.container,
114
129
  ]}
115
130
  >
@@ -120,18 +135,7 @@ export const CallParticipantsSpotlight = ({
120
135
  ) : (
121
136
  <ParticipantView
122
137
  participant={participantInSpotlight}
123
- style={
124
- isUserAloneInCall
125
- ? [
126
- styles.fullScreenSpotlightContainer,
127
- callParticipantsSpotlight.fullScreenSpotlightContainer,
128
- ]
129
- : [
130
- styles.spotlightContainer,
131
- spotlightContainerLandscapeStyles,
132
- callParticipantsSpotlight.spotlightContainer,
133
- ]
134
- }
138
+ style={spotlightParticipantStyle}
135
139
  objectFit={isScreenShareOnSpotlight ? 'contain' : 'cover'}
136
140
  trackType={
137
141
  isScreenShareOnSpotlight ? 'screenShareTrack' : 'videoTrack'
@@ -166,6 +170,11 @@ export const CallParticipantsSpotlight = ({
166
170
  );
167
171
  };
168
172
 
173
+ const landscapeStyles = StyleSheet.create({
174
+ row: { flexDirection: 'row' },
175
+ column: { flexDirection: 'column' },
176
+ });
177
+
169
178
  const useStyles = () => {
170
179
  const { theme } = useTheme();
171
180
  return useMemo(