@ethora/chat-component-rn 26.10.9 → 26.10.11

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 (608) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +126 -1
  3. package/lib/commonjs/booking/index.js +44 -0
  4. package/lib/commonjs/booking/index.js.map +1 -0
  5. package/lib/commonjs/booking/pendingScheduledCall.js +275 -0
  6. package/lib/commonjs/booking/pendingScheduledCall.js.map +1 -0
  7. package/lib/commonjs/booking/scheduleForm.js +91 -0
  8. package/lib/commonjs/booking/scheduleForm.js.map +1 -0
  9. package/lib/commonjs/booking/scheduledCall.js +141 -0
  10. package/lib/commonjs/booking/scheduledCall.js.map +1 -0
  11. package/lib/commonjs/booking/scheduledCallActions.js +128 -0
  12. package/lib/commonjs/booking/scheduledCallActions.js.map +1 -0
  13. package/lib/commonjs/booking/scheduledCallLink.js +143 -0
  14. package/lib/commonjs/booking/scheduledCallLink.js.map +1 -0
  15. package/lib/commonjs/booking/scheduledCallStore.js +64 -0
  16. package/lib/commonjs/booking/scheduledCallStore.js.map +1 -0
  17. package/lib/commonjs/booking/startRoomCall.js +84 -0
  18. package/lib/commonjs/booking/startRoomCall.js.map +1 -0
  19. package/lib/commonjs/calls/callBusy.js +18 -0
  20. package/lib/commonjs/calls/callBusy.js.map +1 -0
  21. package/lib/commonjs/calls/callDisplay.js +73 -0
  22. package/lib/commonjs/calls/callDisplay.js.map +1 -0
  23. package/lib/commonjs/calls/callMode.js +175 -0
  24. package/lib/commonjs/calls/callMode.js.map +1 -0
  25. package/lib/commonjs/calls/declineReport.js +20 -0
  26. package/lib/commonjs/calls/declineReport.js.map +1 -0
  27. package/lib/commonjs/calls/p2p/P2PCallController.js +724 -0
  28. package/lib/commonjs/calls/p2p/P2PCallController.js.map +1 -0
  29. package/lib/commonjs/calls/p2p/icePolicy.js +107 -0
  30. package/lib/commonjs/calls/p2p/icePolicy.js.map +1 -0
  31. package/lib/commonjs/calls/p2p/negotiator.js +202 -0
  32. package/lib/commonjs/calls/p2p/negotiator.js.map +1 -0
  33. package/lib/commonjs/calls/p2p/p2pRuntime.js +147 -0
  34. package/lib/commonjs/calls/p2p/p2pRuntime.js.map +1 -0
  35. package/lib/commonjs/calls/p2p/signalInbox.js +98 -0
  36. package/lib/commonjs/calls/p2p/signalInbox.js.map +1 -0
  37. package/lib/commonjs/calls/p2p/signalStanza.js +141 -0
  38. package/lib/commonjs/calls/p2p/signalStanza.js.map +1 -0
  39. package/lib/commonjs/calls/p2p/webrtcRuntime.js +53 -0
  40. package/lib/commonjs/calls/p2p/webrtcRuntime.js.map +1 -0
  41. package/lib/commonjs/calls/senderTrust.js +43 -0
  42. package/lib/commonjs/calls/senderTrust.js.map +1 -0
  43. package/lib/commonjs/calls/startCall.js +51 -0
  44. package/lib/commonjs/calls/startCall.js.map +1 -0
  45. package/lib/commonjs/components/Booking/BookingIcons.js +55 -0
  46. package/lib/commonjs/components/Booking/BookingIcons.js.map +1 -0
  47. package/lib/commonjs/components/Booking/ScheduleCallButton.js +64 -0
  48. package/lib/commonjs/components/Booking/ScheduleCallButton.js.map +1 -0
  49. package/lib/commonjs/components/Booking/ScheduleCallSheet.js +351 -0
  50. package/lib/commonjs/components/Booking/ScheduleCallSheet.js.map +1 -0
  51. package/lib/commonjs/components/Booking/ScheduledCallCard.js +203 -0
  52. package/lib/commonjs/components/Booking/ScheduledCallCard.js.map +1 -0
  53. package/lib/commonjs/components/Booking/ScheduledCallHost.js +23 -0
  54. package/lib/commonjs/components/Booking/ScheduledCallHost.js.map +1 -0
  55. package/lib/commonjs/components/Booking/ScheduledCallMessage.js +55 -0
  56. package/lib/commonjs/components/Booking/ScheduledCallMessage.js.map +1 -0
  57. package/lib/commonjs/components/Booking/ScheduledCallPreJoin.js +235 -0
  58. package/lib/commonjs/components/Booking/ScheduledCallPreJoin.js.map +1 -0
  59. package/lib/commonjs/components/Booking/bookingShared.js +305 -0
  60. package/lib/commonjs/components/Booking/bookingShared.js.map +1 -0
  61. package/lib/commonjs/components/MainComponents/AlbumGrid.js +6 -2
  62. package/lib/commonjs/components/MainComponents/AlbumGrid.js.map +1 -1
  63. package/lib/commonjs/components/MainComponents/ChatHeader.js +18 -12
  64. package/lib/commonjs/components/MainComponents/ChatHeader.js.map +1 -1
  65. package/lib/commonjs/components/MainComponents/LanguageSelectorButton.js +5 -2
  66. package/lib/commonjs/components/MainComponents/LanguageSelectorButton.js.map +1 -1
  67. package/lib/commonjs/components/MainComponents/LanguageSelectorModal.js +6 -3
  68. package/lib/commonjs/components/MainComponents/LanguageSelectorModal.js.map +1 -1
  69. package/lib/commonjs/components/MainComponents/MediaMessage.js +13 -0
  70. package/lib/commonjs/components/MainComponents/MediaMessage.js.map +1 -1
  71. package/lib/commonjs/components/MainComponents/MessageContainer.js +13 -0
  72. package/lib/commonjs/components/MainComponents/MessageContainer.js.map +1 -1
  73. package/lib/commonjs/components/MainComponents/ReduxWrapper.js +10 -0
  74. package/lib/commonjs/components/MainComponents/ReduxWrapper.js.map +1 -1
  75. package/lib/commonjs/components/MainComponents/RoomList.js +7 -16
  76. package/lib/commonjs/components/MainComponents/RoomList.js.map +1 -1
  77. package/lib/commonjs/components/MessageBubble/Message.js +27 -1
  78. package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
  79. package/lib/commonjs/components/Modals/ChatProfileModal/ChatMediaGrid.js +159 -0
  80. package/lib/commonjs/components/Modals/ChatProfileModal/ChatMediaGrid.js.map +1 -0
  81. package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js +203 -134
  82. package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
  83. package/lib/commonjs/components/Modals/ChatProfileModal/LeaveChatModal.js +180 -0
  84. package/lib/commonjs/components/Modals/ChatProfileModal/LeaveChatModal.js.map +1 -0
  85. package/lib/commonjs/components/Modals/ChatProfileModal/ReportChatModal.js +19 -15
  86. package/lib/commonjs/components/Modals/ChatProfileModal/ReportChatModal.js.map +1 -1
  87. package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js +100 -162
  88. package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
  89. package/lib/commonjs/components/Modals/FilePreviewModal/MediaViewer.js +824 -0
  90. package/lib/commonjs/components/Modals/FilePreviewModal/MediaViewer.js.map +1 -0
  91. package/lib/commonjs/components/Modals/FilePreviewModal/useSaveFile.js +179 -0
  92. package/lib/commonjs/components/Modals/FilePreviewModal/useSaveFile.js.map +1 -0
  93. package/lib/commonjs/components/Modals/MessageSearchModal/MessageSearchModal.js +22 -5
  94. package/lib/commonjs/components/Modals/MessageSearchModal/MessageSearchModal.js.map +1 -1
  95. package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js +15 -8
  96. package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
  97. package/lib/commonjs/components/Modals/UserSettingsModal/LanguageCard.js +1 -1
  98. package/lib/commonjs/components/Modals/UserSettingsModal/LanguageCard.js.map +1 -1
  99. package/lib/commonjs/components/VideoCalls/ActiveCallBar.js +3 -2
  100. package/lib/commonjs/components/VideoCalls/ActiveCallBar.js.map +1 -1
  101. package/lib/commonjs/components/VideoCalls/CallButtons.js +19 -11
  102. package/lib/commonjs/components/VideoCalls/CallButtons.js.map +1 -1
  103. package/lib/commonjs/components/VideoCalls/CallControlBar.js +119 -0
  104. package/lib/commonjs/components/VideoCalls/CallControlBar.js.map +1 -0
  105. package/lib/commonjs/components/VideoCalls/CallVideo.js +49 -0
  106. package/lib/commonjs/components/VideoCalls/CallVideo.js.map +1 -0
  107. package/lib/commonjs/components/VideoCalls/GroupCallView.js +281 -0
  108. package/lib/commonjs/components/VideoCalls/GroupCallView.js.map +1 -0
  109. package/lib/commonjs/components/VideoCalls/P2PCallRunner.js +151 -0
  110. package/lib/commonjs/components/VideoCalls/P2PCallRunner.js.map +1 -0
  111. package/lib/commonjs/components/VideoCalls/VideoCallOverlay.js +38 -14
  112. package/lib/commonjs/components/VideoCalls/VideoCallOverlay.js.map +1 -1
  113. package/lib/commonjs/components/VideoCalls/VideoCallSession.js +57 -128
  114. package/lib/commonjs/components/VideoCalls/VideoCallSession.js.map +1 -1
  115. package/lib/commonjs/components/VideoCalls/callActions.js +3 -0
  116. package/lib/commonjs/components/VideoCalls/callActions.js.map +1 -1
  117. package/lib/commonjs/components/VideoCalls/callElapsed.js +38 -0
  118. package/lib/commonjs/components/VideoCalls/callElapsed.js.map +1 -0
  119. package/lib/commonjs/components/VideoCalls/callLive.js +15 -0
  120. package/lib/commonjs/components/VideoCalls/callLive.js.map +1 -0
  121. package/lib/commonjs/components/VideoCalls/callSessionController.js +81 -24
  122. package/lib/commonjs/components/VideoCalls/callSessionController.js.map +1 -1
  123. package/lib/commonjs/components/VideoCalls/callSessionTypes.js +41 -0
  124. package/lib/commonjs/components/VideoCalls/callSessionTypes.js.map +1 -0
  125. package/lib/commonjs/components/VideoCalls/groupLayout.js +43 -0
  126. package/lib/commonjs/components/VideoCalls/groupLayout.js.map +1 -0
  127. package/lib/commonjs/components/VideoCalls/p2pCallSession.js +272 -0
  128. package/lib/commonjs/components/VideoCalls/p2pCallSession.js.map +1 -0
  129. package/lib/commonjs/components/VideoCalls/useCallKeep.js +7 -2
  130. package/lib/commonjs/components/VideoCalls/useCallKeep.js.map +1 -1
  131. package/lib/commonjs/components/VideoCalls/useOngoingCallNotification.js +2 -1
  132. package/lib/commonjs/components/VideoCalls/useOngoingCallNotification.js.map +1 -1
  133. package/lib/commonjs/components/styled/MessageImage.js +4 -1
  134. package/lib/commonjs/components/styled/MessageImage.js.map +1 -1
  135. package/lib/commonjs/components/styled/VideoMessage.js +5 -1
  136. package/lib/commonjs/components/styled/VideoMessage.js.map +1 -1
  137. package/lib/commonjs/context/MediaSourceContext.js +18 -0
  138. package/lib/commonjs/context/MediaSourceContext.js.map +1 -0
  139. package/lib/commonjs/context/xmppProvider.js +2 -1
  140. package/lib/commonjs/context/xmppProvider.js.map +1 -1
  141. package/lib/commonjs/helpers/callPush.js +3 -1
  142. package/lib/commonjs/helpers/callPush.js.map +1 -1
  143. package/lib/commonjs/helpers/constants/MODAL_COMPONENTS.js +3 -1
  144. package/lib/commonjs/helpers/constants/MODAL_COMPONENTS.js.map +1 -1
  145. package/lib/commonjs/helpers/constants/MODAL_TYPES.js +2 -0
  146. package/lib/commonjs/helpers/constants/MODAL_TYPES.js.map +1 -1
  147. package/lib/commonjs/helpers/incomingCallFromPush.js +63 -7
  148. package/lib/commonjs/helpers/incomingCallFromPush.js.map +1 -1
  149. package/lib/commonjs/helpers/publicChatsEntry.js +8 -6
  150. package/lib/commonjs/helpers/publicChatsEntry.js.map +1 -1
  151. package/lib/commonjs/helpers/pushPayload.js +5 -0
  152. package/lib/commonjs/helpers/pushPayload.js.map +1 -1
  153. package/lib/commonjs/helpers/reportRoom.js +76 -0
  154. package/lib/commonjs/helpers/reportRoom.js.map +1 -0
  155. package/lib/commonjs/helpers/roomMedia.js +118 -0
  156. package/lib/commonjs/helpers/roomMedia.js.map +1 -0
  157. package/lib/commonjs/i18n/strings.js +480 -0
  158. package/lib/commonjs/i18n/strings.js.map +1 -1
  159. package/lib/commonjs/main.js +93 -0
  160. package/lib/commonjs/main.js.map +1 -1
  161. package/lib/commonjs/networking/api-requests/callState.api.js +75 -0
  162. package/lib/commonjs/networking/api-requests/callState.api.js.map +1 -0
  163. package/lib/commonjs/networking/api-requests/push.api.js +29 -6
  164. package/lib/commonjs/networking/api-requests/push.api.js.map +1 -1
  165. package/lib/commonjs/networking/api-requests/rooms.api.js +17 -15
  166. package/lib/commonjs/networking/api-requests/rooms.api.js.map +1 -1
  167. package/lib/commonjs/networking/api-requests/scheduledCalls.api.js +141 -0
  168. package/lib/commonjs/networking/api-requests/scheduledCalls.api.js.map +1 -0
  169. package/lib/commonjs/networking/callTokenStanza.js +210 -50
  170. package/lib/commonjs/networking/callTokenStanza.js.map +1 -1
  171. package/lib/commonjs/roomStore/callSlice.js +59 -4
  172. package/lib/commonjs/roomStore/callSlice.js.map +1 -1
  173. package/lib/commonjs/services/appBadge.js +80 -0
  174. package/lib/commonjs/services/appBadge.js.map +1 -0
  175. package/lib/commonjs/services/languageSettings.js +47 -15
  176. package/lib/commonjs/services/languageSettings.js.map +1 -1
  177. package/lib/commonjs/services/pushRegistration.js +21 -5
  178. package/lib/commonjs/services/pushRegistration.js.map +1 -1
  179. package/lib/commonjs/version.js +1 -1
  180. package/lib/commonjs/version.js.map +1 -1
  181. package/lib/module/booking/index.js +5 -0
  182. package/lib/module/booking/index.js.map +1 -0
  183. package/lib/module/booking/pendingScheduledCall.js +261 -0
  184. package/lib/module/booking/pendingScheduledCall.js.map +1 -0
  185. package/lib/module/booking/scheduleForm.js +79 -0
  186. package/lib/module/booking/scheduleForm.js.map +1 -0
  187. package/lib/module/booking/scheduledCall.js +129 -0
  188. package/lib/module/booking/scheduledCall.js.map +1 -0
  189. package/lib/module/booking/scheduledCallActions.js +118 -0
  190. package/lib/module/booking/scheduledCallActions.js.map +1 -0
  191. package/lib/module/booking/scheduledCallLink.js +136 -0
  192. package/lib/module/booking/scheduledCallLink.js.map +1 -0
  193. package/lib/module/booking/scheduledCallStore.js +60 -0
  194. package/lib/module/booking/scheduledCallStore.js.map +1 -0
  195. package/lib/module/booking/startRoomCall.js +80 -0
  196. package/lib/module/booking/startRoomCall.js.map +1 -0
  197. package/lib/module/calls/callBusy.js +13 -0
  198. package/lib/module/calls/callBusy.js.map +1 -0
  199. package/lib/module/calls/callDisplay.js +65 -0
  200. package/lib/module/calls/callDisplay.js.map +1 -0
  201. package/lib/module/calls/callMode.js +168 -0
  202. package/lib/module/calls/callMode.js.map +1 -0
  203. package/lib/module/calls/declineReport.js +16 -0
  204. package/lib/module/calls/declineReport.js.map +1 -0
  205. package/lib/module/calls/p2p/P2PCallController.js +718 -0
  206. package/lib/module/calls/p2p/P2PCallController.js.map +1 -0
  207. package/lib/module/calls/p2p/icePolicy.js +102 -0
  208. package/lib/module/calls/p2p/icePolicy.js.map +1 -0
  209. package/lib/module/calls/p2p/negotiator.js +197 -0
  210. package/lib/module/calls/p2p/negotiator.js.map +1 -0
  211. package/lib/module/calls/p2p/p2pRuntime.js +137 -0
  212. package/lib/module/calls/p2p/p2pRuntime.js.map +1 -0
  213. package/lib/module/calls/p2p/signalInbox.js +93 -0
  214. package/lib/module/calls/p2p/signalInbox.js.map +1 -0
  215. package/lib/module/calls/p2p/signalStanza.js +135 -0
  216. package/lib/module/calls/p2p/signalStanza.js.map +1 -0
  217. package/lib/module/calls/p2p/webrtcRuntime.js +46 -0
  218. package/lib/module/calls/p2p/webrtcRuntime.js.map +1 -0
  219. package/lib/module/calls/senderTrust.js +38 -0
  220. package/lib/module/calls/senderTrust.js.map +1 -0
  221. package/lib/module/calls/startCall.js +47 -0
  222. package/lib/module/calls/startCall.js.map +1 -0
  223. package/lib/module/components/Booking/BookingIcons.js +48 -0
  224. package/lib/module/components/Booking/BookingIcons.js.map +1 -0
  225. package/lib/module/components/Booking/ScheduleCallButton.js +59 -0
  226. package/lib/module/components/Booking/ScheduleCallButton.js.map +1 -0
  227. package/lib/module/components/Booking/ScheduleCallSheet.js +345 -0
  228. package/lib/module/components/Booking/ScheduleCallSheet.js.map +1 -0
  229. package/lib/module/components/Booking/ScheduledCallCard.js +197 -0
  230. package/lib/module/components/Booking/ScheduledCallCard.js.map +1 -0
  231. package/lib/module/components/Booking/ScheduledCallHost.js +18 -0
  232. package/lib/module/components/Booking/ScheduledCallHost.js.map +1 -0
  233. package/lib/module/components/Booking/ScheduledCallMessage.js +48 -0
  234. package/lib/module/components/Booking/ScheduledCallMessage.js.map +1 -0
  235. package/lib/module/components/Booking/ScheduledCallPreJoin.js +229 -0
  236. package/lib/module/components/Booking/ScheduledCallPreJoin.js.map +1 -0
  237. package/lib/module/components/Booking/bookingShared.js +291 -0
  238. package/lib/module/components/Booking/bookingShared.js.map +1 -0
  239. package/lib/module/components/MainComponents/AlbumGrid.js +6 -2
  240. package/lib/module/components/MainComponents/AlbumGrid.js.map +1 -1
  241. package/lib/module/components/MainComponents/ChatHeader.js +20 -14
  242. package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
  243. package/lib/module/components/MainComponents/LanguageSelectorButton.js +5 -2
  244. package/lib/module/components/MainComponents/LanguageSelectorButton.js.map +1 -1
  245. package/lib/module/components/MainComponents/LanguageSelectorModal.js +7 -4
  246. package/lib/module/components/MainComponents/LanguageSelectorModal.js.map +1 -1
  247. package/lib/module/components/MainComponents/MediaMessage.js +13 -0
  248. package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
  249. package/lib/module/components/MainComponents/MessageContainer.js +13 -0
  250. package/lib/module/components/MainComponents/MessageContainer.js.map +1 -1
  251. package/lib/module/components/MainComponents/ReduxWrapper.js +10 -0
  252. package/lib/module/components/MainComponents/ReduxWrapper.js.map +1 -1
  253. package/lib/module/components/MainComponents/RoomList.js +7 -16
  254. package/lib/module/components/MainComponents/RoomList.js.map +1 -1
  255. package/lib/module/components/MessageBubble/Message.js +27 -1
  256. package/lib/module/components/MessageBubble/Message.js.map +1 -1
  257. package/lib/module/components/Modals/ChatProfileModal/ChatMediaGrid.js +154 -0
  258. package/lib/module/components/Modals/ChatProfileModal/ChatMediaGrid.js.map +1 -0
  259. package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js +204 -136
  260. package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
  261. package/lib/module/components/Modals/ChatProfileModal/LeaveChatModal.js +175 -0
  262. package/lib/module/components/Modals/ChatProfileModal/LeaveChatModal.js.map +1 -0
  263. package/lib/module/components/Modals/ChatProfileModal/ReportChatModal.js +21 -15
  264. package/lib/module/components/Modals/ChatProfileModal/ReportChatModal.js.map +1 -1
  265. package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js +100 -163
  266. package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
  267. package/lib/module/components/Modals/FilePreviewModal/MediaViewer.js +819 -0
  268. package/lib/module/components/Modals/FilePreviewModal/MediaViewer.js.map +1 -0
  269. package/lib/module/components/Modals/FilePreviewModal/useSaveFile.js +172 -0
  270. package/lib/module/components/Modals/FilePreviewModal/useSaveFile.js.map +1 -0
  271. package/lib/module/components/Modals/MessageSearchModal/MessageSearchModal.js +20 -4
  272. package/lib/module/components/Modals/MessageSearchModal/MessageSearchModal.js.map +1 -1
  273. package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js +17 -10
  274. package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
  275. package/lib/module/components/Modals/UserSettingsModal/LanguageCard.js +1 -1
  276. package/lib/module/components/Modals/UserSettingsModal/LanguageCard.js.map +1 -1
  277. package/lib/module/components/VideoCalls/ActiveCallBar.js +3 -2
  278. package/lib/module/components/VideoCalls/ActiveCallBar.js.map +1 -1
  279. package/lib/module/components/VideoCalls/CallButtons.js +19 -11
  280. package/lib/module/components/VideoCalls/CallButtons.js.map +1 -1
  281. package/lib/module/components/VideoCalls/CallControlBar.js +113 -0
  282. package/lib/module/components/VideoCalls/CallControlBar.js.map +1 -0
  283. package/lib/module/components/VideoCalls/CallVideo.js +43 -0
  284. package/lib/module/components/VideoCalls/CallVideo.js.map +1 -0
  285. package/lib/module/components/VideoCalls/GroupCallView.js +275 -0
  286. package/lib/module/components/VideoCalls/GroupCallView.js.map +1 -0
  287. package/lib/module/components/VideoCalls/P2PCallRunner.js +147 -0
  288. package/lib/module/components/VideoCalls/P2PCallRunner.js.map +1 -0
  289. package/lib/module/components/VideoCalls/VideoCallOverlay.js +38 -14
  290. package/lib/module/components/VideoCalls/VideoCallOverlay.js.map +1 -1
  291. package/lib/module/components/VideoCalls/VideoCallSession.js +46 -127
  292. package/lib/module/components/VideoCalls/VideoCallSession.js.map +1 -1
  293. package/lib/module/components/VideoCalls/callActions.js +3 -0
  294. package/lib/module/components/VideoCalls/callActions.js.map +1 -1
  295. package/lib/module/components/VideoCalls/callElapsed.js +33 -0
  296. package/lib/module/components/VideoCalls/callElapsed.js.map +1 -0
  297. package/lib/module/components/VideoCalls/callLive.js +10 -0
  298. package/lib/module/components/VideoCalls/callLive.js.map +1 -0
  299. package/lib/module/components/VideoCalls/callSessionController.js +80 -24
  300. package/lib/module/components/VideoCalls/callSessionController.js.map +1 -1
  301. package/lib/module/components/VideoCalls/callSessionTypes.js +37 -0
  302. package/lib/module/components/VideoCalls/callSessionTypes.js.map +1 -0
  303. package/lib/module/components/VideoCalls/groupLayout.js +36 -0
  304. package/lib/module/components/VideoCalls/groupLayout.js.map +1 -0
  305. package/lib/module/components/VideoCalls/p2pCallSession.js +256 -0
  306. package/lib/module/components/VideoCalls/p2pCallSession.js.map +1 -0
  307. package/lib/module/components/VideoCalls/useCallKeep.js +8 -2
  308. package/lib/module/components/VideoCalls/useCallKeep.js.map +1 -1
  309. package/lib/module/components/VideoCalls/useOngoingCallNotification.js +2 -1
  310. package/lib/module/components/VideoCalls/useOngoingCallNotification.js.map +1 -1
  311. package/lib/module/components/styled/MessageImage.js +4 -1
  312. package/lib/module/components/styled/MessageImage.js.map +1 -1
  313. package/lib/module/components/styled/VideoMessage.js +5 -1
  314. package/lib/module/components/styled/VideoMessage.js.map +1 -1
  315. package/lib/module/context/MediaSourceContext.js +13 -0
  316. package/lib/module/context/MediaSourceContext.js.map +1 -0
  317. package/lib/module/context/xmppProvider.js +2 -1
  318. package/lib/module/context/xmppProvider.js.map +1 -1
  319. package/lib/module/helpers/callPush.js +3 -1
  320. package/lib/module/helpers/callPush.js.map +1 -1
  321. package/lib/module/helpers/constants/MODAL_COMPONENTS.js +2 -1
  322. package/lib/module/helpers/constants/MODAL_COMPONENTS.js.map +1 -1
  323. package/lib/module/helpers/constants/MODAL_TYPES.js +2 -0
  324. package/lib/module/helpers/constants/MODAL_TYPES.js.map +1 -1
  325. package/lib/module/helpers/incomingCallFromPush.js +63 -7
  326. package/lib/module/helpers/incomingCallFromPush.js.map +1 -1
  327. package/lib/module/helpers/publicChatsEntry.js +8 -6
  328. package/lib/module/helpers/publicChatsEntry.js.map +1 -1
  329. package/lib/module/helpers/pushPayload.js +5 -0
  330. package/lib/module/helpers/pushPayload.js.map +1 -1
  331. package/lib/module/helpers/reportRoom.js +70 -0
  332. package/lib/module/helpers/reportRoom.js.map +1 -0
  333. package/lib/module/helpers/roomMedia.js +112 -0
  334. package/lib/module/helpers/roomMedia.js.map +1 -0
  335. package/lib/module/i18n/strings.js +480 -0
  336. package/lib/module/i18n/strings.js.map +1 -1
  337. package/lib/module/main.js +5 -0
  338. package/lib/module/main.js.map +1 -1
  339. package/lib/module/networking/api-requests/callState.api.js +66 -0
  340. package/lib/module/networking/api-requests/callState.api.js.map +1 -0
  341. package/lib/module/networking/api-requests/push.api.js +29 -6
  342. package/lib/module/networking/api-requests/push.api.js.map +1 -1
  343. package/lib/module/networking/api-requests/rooms.api.js +17 -15
  344. package/lib/module/networking/api-requests/rooms.api.js.map +1 -1
  345. package/lib/module/networking/api-requests/scheduledCalls.api.js +130 -0
  346. package/lib/module/networking/api-requests/scheduledCalls.api.js.map +1 -0
  347. package/lib/module/networking/callTokenStanza.js +210 -50
  348. package/lib/module/networking/callTokenStanza.js.map +1 -1
  349. package/lib/module/roomStore/callSlice.js +57 -3
  350. package/lib/module/roomStore/callSlice.js.map +1 -1
  351. package/lib/module/services/appBadge.js +74 -0
  352. package/lib/module/services/appBadge.js.map +1 -0
  353. package/lib/module/services/languageSettings.js +44 -13
  354. package/lib/module/services/languageSettings.js.map +1 -1
  355. package/lib/module/services/pushRegistration.js +21 -5
  356. package/lib/module/services/pushRegistration.js.map +1 -1
  357. package/lib/module/version.js +1 -1
  358. package/lib/module/version.js.map +1 -1
  359. package/lib/typescript/booking/index.d.ts +3 -0
  360. package/lib/typescript/booking/index.d.ts.map +1 -0
  361. package/lib/typescript/booking/pendingScheduledCall.d.ts +80 -0
  362. package/lib/typescript/booking/pendingScheduledCall.d.ts.map +1 -0
  363. package/lib/typescript/booking/scheduleForm.d.ts +28 -0
  364. package/lib/typescript/booking/scheduleForm.d.ts.map +1 -0
  365. package/lib/typescript/booking/scheduledCall.d.ts +52 -0
  366. package/lib/typescript/booking/scheduledCall.d.ts.map +1 -0
  367. package/lib/typescript/booking/scheduledCallActions.d.ts +22 -0
  368. package/lib/typescript/booking/scheduledCallActions.d.ts.map +1 -0
  369. package/lib/typescript/booking/scheduledCallLink.d.ts +37 -0
  370. package/lib/typescript/booking/scheduledCallLink.d.ts.map +1 -0
  371. package/lib/typescript/booking/scheduledCallStore.d.ts +47 -0
  372. package/lib/typescript/booking/scheduledCallStore.d.ts.map +1 -0
  373. package/lib/typescript/booking/startRoomCall.d.ts +12 -0
  374. package/lib/typescript/booking/startRoomCall.d.ts.map +1 -0
  375. package/lib/typescript/calls/callBusy.d.ts +9 -0
  376. package/lib/typescript/calls/callBusy.d.ts.map +1 -0
  377. package/lib/typescript/calls/callDisplay.d.ts +23 -0
  378. package/lib/typescript/calls/callDisplay.d.ts.map +1 -0
  379. package/lib/typescript/calls/callMode.d.ts +106 -0
  380. package/lib/typescript/calls/callMode.d.ts.map +1 -0
  381. package/lib/typescript/calls/declineReport.d.ts +11 -0
  382. package/lib/typescript/calls/declineReport.d.ts.map +1 -0
  383. package/lib/typescript/calls/p2p/P2PCallController.d.ts +150 -0
  384. package/lib/typescript/calls/p2p/P2PCallController.d.ts.map +1 -0
  385. package/lib/typescript/calls/p2p/icePolicy.d.ts +37 -0
  386. package/lib/typescript/calls/p2p/icePolicy.d.ts.map +1 -0
  387. package/lib/typescript/calls/p2p/negotiator.d.ts +57 -0
  388. package/lib/typescript/calls/p2p/negotiator.d.ts.map +1 -0
  389. package/lib/typescript/calls/p2p/p2pRuntime.d.ts +41 -0
  390. package/lib/typescript/calls/p2p/p2pRuntime.d.ts.map +1 -0
  391. package/lib/typescript/calls/p2p/signalInbox.d.ts +35 -0
  392. package/lib/typescript/calls/p2p/signalInbox.d.ts.map +1 -0
  393. package/lib/typescript/calls/p2p/signalStanza.d.ts +52 -0
  394. package/lib/typescript/calls/p2p/signalStanza.d.ts.map +1 -0
  395. package/lib/typescript/calls/p2p/webrtcRuntime.d.ts +32 -0
  396. package/lib/typescript/calls/p2p/webrtcRuntime.d.ts.map +1 -0
  397. package/lib/typescript/calls/senderTrust.d.ts +8 -0
  398. package/lib/typescript/calls/senderTrust.d.ts.map +1 -0
  399. package/lib/typescript/calls/startCall.d.ts +17 -0
  400. package/lib/typescript/calls/startCall.d.ts.map +1 -0
  401. package/lib/typescript/components/Booking/BookingIcons.d.ts +9 -0
  402. package/lib/typescript/components/Booking/BookingIcons.d.ts.map +1 -0
  403. package/lib/typescript/components/Booking/ScheduleCallButton.d.ts +11 -0
  404. package/lib/typescript/components/Booking/ScheduleCallButton.d.ts.map +1 -0
  405. package/lib/typescript/components/Booking/ScheduleCallSheet.d.ts +4 -0
  406. package/lib/typescript/components/Booking/ScheduleCallSheet.d.ts.map +1 -0
  407. package/lib/typescript/components/Booking/ScheduledCallCard.d.ts +14 -0
  408. package/lib/typescript/components/Booking/ScheduledCallCard.d.ts.map +1 -0
  409. package/lib/typescript/components/Booking/ScheduledCallHost.d.ts +10 -0
  410. package/lib/typescript/components/Booking/ScheduledCallHost.d.ts.map +1 -0
  411. package/lib/typescript/components/Booking/ScheduledCallMessage.d.ts +20 -0
  412. package/lib/typescript/components/Booking/ScheduledCallMessage.d.ts.map +1 -0
  413. package/lib/typescript/components/Booking/ScheduledCallPreJoin.d.ts +8 -0
  414. package/lib/typescript/components/Booking/ScheduledCallPreJoin.d.ts.map +1 -0
  415. package/lib/typescript/components/Booking/bookingShared.d.ts +199 -0
  416. package/lib/typescript/components/Booking/bookingShared.d.ts.map +1 -0
  417. package/lib/typescript/components/MainComponents/AlbumGrid.d.ts.map +1 -1
  418. package/lib/typescript/components/MainComponents/ChatHeader.d.ts.map +1 -1
  419. package/lib/typescript/components/MainComponents/LanguageSelectorButton.d.ts +3 -1
  420. package/lib/typescript/components/MainComponents/LanguageSelectorButton.d.ts.map +1 -1
  421. package/lib/typescript/components/MainComponents/LanguageSelectorModal.d.ts.map +1 -1
  422. package/lib/typescript/components/MainComponents/MediaMessage.d.ts +3 -1
  423. package/lib/typescript/components/MainComponents/MediaMessage.d.ts.map +1 -1
  424. package/lib/typescript/components/MainComponents/MessageContainer.d.ts.map +1 -1
  425. package/lib/typescript/components/MainComponents/ReduxWrapper.d.ts.map +1 -1
  426. package/lib/typescript/components/MainComponents/RoomList.d.ts.map +1 -1
  427. package/lib/typescript/components/MessageBubble/Message.d.ts.map +1 -1
  428. package/lib/typescript/components/Modals/ChatProfileModal/ChatMediaGrid.d.ts +16 -0
  429. package/lib/typescript/components/Modals/ChatProfileModal/ChatMediaGrid.d.ts.map +1 -0
  430. package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts.map +1 -1
  431. package/lib/typescript/components/Modals/ChatProfileModal/LeaveChatModal.d.ts +18 -0
  432. package/lib/typescript/components/Modals/ChatProfileModal/LeaveChatModal.d.ts.map +1 -0
  433. package/lib/typescript/components/Modals/ChatProfileModal/ReportChatModal.d.ts.map +1 -1
  434. package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts +16 -0
  435. package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts.map +1 -1
  436. package/lib/typescript/components/Modals/FilePreviewModal/MediaViewer.d.ts +27 -0
  437. package/lib/typescript/components/Modals/FilePreviewModal/MediaViewer.d.ts.map +1 -0
  438. package/lib/typescript/components/Modals/FilePreviewModal/useSaveFile.d.ts +9 -0
  439. package/lib/typescript/components/Modals/FilePreviewModal/useSaveFile.d.ts.map +1 -0
  440. package/lib/typescript/components/Modals/MessageSearchModal/MessageSearchModal.d.ts +8 -0
  441. package/lib/typescript/components/Modals/MessageSearchModal/MessageSearchModal.d.ts.map +1 -1
  442. package/lib/typescript/components/Modals/UserProfileModal/UserProfileModal.d.ts.map +1 -1
  443. package/lib/typescript/components/Modals/UserSettingsModal/LanguageCard.d.ts.map +1 -1
  444. package/lib/typescript/components/VideoCalls/ActiveCallBar.d.ts.map +1 -1
  445. package/lib/typescript/components/VideoCalls/CallButtons.d.ts +2 -1
  446. package/lib/typescript/components/VideoCalls/CallButtons.d.ts.map +1 -1
  447. package/lib/typescript/components/VideoCalls/CallControlBar.d.ts +17 -0
  448. package/lib/typescript/components/VideoCalls/CallControlBar.d.ts.map +1 -0
  449. package/lib/typescript/components/VideoCalls/CallVideo.d.ts +23 -0
  450. package/lib/typescript/components/VideoCalls/CallVideo.d.ts.map +1 -0
  451. package/lib/typescript/components/VideoCalls/GroupCallView.d.ts +22 -0
  452. package/lib/typescript/components/VideoCalls/GroupCallView.d.ts.map +1 -0
  453. package/lib/typescript/components/VideoCalls/P2PCallRunner.d.ts +2 -0
  454. package/lib/typescript/components/VideoCalls/P2PCallRunner.d.ts.map +1 -0
  455. package/lib/typescript/components/VideoCalls/VideoCallOverlay.d.ts.map +1 -1
  456. package/lib/typescript/components/VideoCalls/VideoCallSession.d.ts +10 -12
  457. package/lib/typescript/components/VideoCalls/VideoCallSession.d.ts.map +1 -1
  458. package/lib/typescript/components/VideoCalls/callActions.d.ts.map +1 -1
  459. package/lib/typescript/components/VideoCalls/callElapsed.d.ts +8 -0
  460. package/lib/typescript/components/VideoCalls/callElapsed.d.ts.map +1 -0
  461. package/lib/typescript/components/VideoCalls/callLive.d.ts +9 -0
  462. package/lib/typescript/components/VideoCalls/callLive.d.ts.map +1 -0
  463. package/lib/typescript/components/VideoCalls/callSessionController.d.ts +10 -31
  464. package/lib/typescript/components/VideoCalls/callSessionController.d.ts.map +1 -1
  465. package/lib/typescript/components/VideoCalls/callSessionTypes.d.ts +60 -0
  466. package/lib/typescript/components/VideoCalls/callSessionTypes.d.ts.map +1 -0
  467. package/lib/typescript/components/VideoCalls/groupLayout.d.ts +23 -0
  468. package/lib/typescript/components/VideoCalls/groupLayout.d.ts.map +1 -0
  469. package/lib/typescript/components/VideoCalls/p2pCallSession.d.ts +31 -0
  470. package/lib/typescript/components/VideoCalls/p2pCallSession.d.ts.map +1 -0
  471. package/lib/typescript/components/VideoCalls/useCallKeep.d.ts.map +1 -1
  472. package/lib/typescript/components/VideoCalls/useOngoingCallNotification.d.ts.map +1 -1
  473. package/lib/typescript/components/styled/MessageImage.d.ts.map +1 -1
  474. package/lib/typescript/components/styled/VideoMessage.d.ts.map +1 -1
  475. package/lib/typescript/context/MediaSourceContext.d.ts +4 -0
  476. package/lib/typescript/context/MediaSourceContext.d.ts.map +1 -0
  477. package/lib/typescript/context/xmppProvider.d.ts.map +1 -1
  478. package/lib/typescript/helpers/callPush.d.ts +11 -1
  479. package/lib/typescript/helpers/callPush.d.ts.map +1 -1
  480. package/lib/typescript/helpers/constants/MODAL_COMPONENTS.d.ts.map +1 -1
  481. package/lib/typescript/helpers/constants/MODAL_TYPES.d.ts +2 -0
  482. package/lib/typescript/helpers/constants/MODAL_TYPES.d.ts.map +1 -1
  483. package/lib/typescript/helpers/incomingCallFromPush.d.ts.map +1 -1
  484. package/lib/typescript/helpers/publicChatsEntry.d.ts +7 -5
  485. package/lib/typescript/helpers/publicChatsEntry.d.ts.map +1 -1
  486. package/lib/typescript/helpers/pushPayload.d.ts +1 -1
  487. package/lib/typescript/helpers/pushPayload.d.ts.map +1 -1
  488. package/lib/typescript/helpers/reportRoom.d.ts +19 -0
  489. package/lib/typescript/helpers/reportRoom.d.ts.map +1 -0
  490. package/lib/typescript/helpers/roomMedia.d.ts +26 -0
  491. package/lib/typescript/helpers/roomMedia.d.ts.map +1 -0
  492. package/lib/typescript/i18n/strings.d.ts.map +1 -1
  493. package/lib/typescript/main.d.ts +6 -1
  494. package/lib/typescript/main.d.ts.map +1 -1
  495. package/lib/typescript/networking/api-requests/callState.api.d.ts +25 -0
  496. package/lib/typescript/networking/api-requests/callState.api.d.ts.map +1 -0
  497. package/lib/typescript/networking/api-requests/push.api.d.ts +9 -2
  498. package/lib/typescript/networking/api-requests/push.api.d.ts.map +1 -1
  499. package/lib/typescript/networking/api-requests/rooms.api.d.ts +8 -6
  500. package/lib/typescript/networking/api-requests/rooms.api.d.ts.map +1 -1
  501. package/lib/typescript/networking/api-requests/scheduledCalls.api.d.ts +86 -0
  502. package/lib/typescript/networking/api-requests/scheduledCalls.api.d.ts.map +1 -0
  503. package/lib/typescript/networking/callTokenStanza.d.ts.map +1 -1
  504. package/lib/typescript/roomStore/callSlice.d.ts +23 -1
  505. package/lib/typescript/roomStore/callSlice.d.ts.map +1 -1
  506. package/lib/typescript/services/appBadge.d.ts +3 -0
  507. package/lib/typescript/services/appBadge.d.ts.map +1 -0
  508. package/lib/typescript/services/languageSettings.d.ts +7 -0
  509. package/lib/typescript/services/languageSettings.d.ts.map +1 -1
  510. package/lib/typescript/services/pushRegistration.d.ts.map +1 -1
  511. package/lib/typescript/types/models/modal.model.d.ts +18 -0
  512. package/lib/typescript/types/models/modal.model.d.ts.map +1 -1
  513. package/lib/typescript/types/types.d.ts +85 -4
  514. package/lib/typescript/types/types.d.ts.map +1 -1
  515. package/lib/typescript/version.d.ts +1 -1
  516. package/lib/typescript/version.d.ts.map +1 -1
  517. package/package.json +9 -2
  518. package/src/booking/index.ts +10 -0
  519. package/src/booking/pendingScheduledCall.ts +272 -0
  520. package/src/booking/scheduleForm.ts +84 -0
  521. package/src/booking/scheduledCall.ts +163 -0
  522. package/src/booking/scheduledCallActions.ts +141 -0
  523. package/src/booking/scheduledCallLink.ts +145 -0
  524. package/src/booking/scheduledCallStore.ts +69 -0
  525. package/src/booking/startRoomCall.ts +103 -0
  526. package/src/calls/callBusy.ts +10 -0
  527. package/src/calls/callDisplay.ts +74 -0
  528. package/src/calls/callMode.ts +286 -0
  529. package/src/calls/declineReport.ts +16 -0
  530. package/src/calls/p2p/P2PCallController.ts +813 -0
  531. package/src/calls/p2p/icePolicy.ts +99 -0
  532. package/src/calls/p2p/negotiator.ts +186 -0
  533. package/src/calls/p2p/p2pRuntime.ts +164 -0
  534. package/src/calls/p2p/signalInbox.ts +117 -0
  535. package/src/calls/p2p/signalStanza.ts +205 -0
  536. package/src/calls/p2p/webrtcRuntime.ts +60 -0
  537. package/src/calls/senderTrust.ts +40 -0
  538. package/src/calls/startCall.ts +56 -0
  539. package/src/components/Booking/BookingIcons.tsx +44 -0
  540. package/src/components/Booking/ScheduleCallButton.tsx +66 -0
  541. package/src/components/Booking/ScheduleCallSheet.tsx +380 -0
  542. package/src/components/Booking/ScheduledCallCard.tsx +216 -0
  543. package/src/components/Booking/ScheduledCallHost.tsx +18 -0
  544. package/src/components/Booking/ScheduledCallMessage.tsx +62 -0
  545. package/src/components/Booking/ScheduledCallPreJoin.tsx +230 -0
  546. package/src/components/Booking/bookingShared.tsx +295 -0
  547. package/src/components/MainComponents/AlbumGrid.tsx +5 -1
  548. package/src/components/MainComponents/ChatHeader.tsx +18 -11
  549. package/src/components/MainComponents/LanguageSelectorButton.tsx +9 -2
  550. package/src/components/MainComponents/LanguageSelectorModal.tsx +10 -6
  551. package/src/components/MainComponents/MediaMessage.tsx +13 -2
  552. package/src/components/MainComponents/MessageContainer.tsx +15 -0
  553. package/src/components/MainComponents/ReduxWrapper.tsx +10 -0
  554. package/src/components/MainComponents/RoomList.tsx +8 -19
  555. package/src/components/MessageBubble/Message.tsx +24 -1
  556. package/src/components/Modals/ChatProfileModal/ChatMediaGrid.tsx +174 -0
  557. package/src/components/Modals/ChatProfileModal/ChatProfileModal.tsx +119 -48
  558. package/src/components/Modals/ChatProfileModal/LeaveChatModal.tsx +191 -0
  559. package/src/components/Modals/ChatProfileModal/ReportChatModal.tsx +22 -22
  560. package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +115 -185
  561. package/src/components/Modals/FilePreviewModal/MediaViewer.tsx +880 -0
  562. package/src/components/Modals/FilePreviewModal/useSaveFile.ts +207 -0
  563. package/src/components/Modals/MessageSearchModal/MessageSearchModal.tsx +56 -30
  564. package/src/components/Modals/UserProfileModal/UserProfileModal.tsx +28 -9
  565. package/src/components/Modals/UserSettingsModal/LanguageCard.tsx +9 -7
  566. package/src/components/VideoCalls/ActiveCallBar.tsx +6 -5
  567. package/src/components/VideoCalls/CallButtons.tsx +23 -12
  568. package/src/components/VideoCalls/CallControlBar.tsx +131 -0
  569. package/src/components/VideoCalls/CallVideo.tsx +59 -0
  570. package/src/components/VideoCalls/GroupCallView.tsx +324 -0
  571. package/src/components/VideoCalls/P2PCallRunner.tsx +192 -0
  572. package/src/components/VideoCalls/VideoCallOverlay.tsx +62 -17
  573. package/src/components/VideoCalls/VideoCallSession.tsx +55 -133
  574. package/src/components/VideoCalls/callActions.ts +3 -0
  575. package/src/components/VideoCalls/callElapsed.ts +27 -0
  576. package/src/components/VideoCalls/callLive.ts +13 -0
  577. package/src/components/VideoCalls/callSessionController.ts +130 -55
  578. package/src/components/VideoCalls/callSessionTypes.ts +80 -0
  579. package/src/components/VideoCalls/groupLayout.ts +48 -0
  580. package/src/components/VideoCalls/p2pCallSession.ts +291 -0
  581. package/src/components/VideoCalls/useCallKeep.ts +9 -2
  582. package/src/components/VideoCalls/useOngoingCallNotification.ts +2 -2
  583. package/src/components/styled/MessageImage.tsx +3 -1
  584. package/src/components/styled/VideoMessage.tsx +5 -1
  585. package/src/context/MediaSourceContext.tsx +14 -0
  586. package/src/context/xmppProvider.tsx +3 -0
  587. package/src/helpers/callPush.ts +13 -1
  588. package/src/helpers/constants/MODAL_COMPONENTS.tsx +4 -1
  589. package/src/helpers/constants/MODAL_TYPES.ts +2 -0
  590. package/src/helpers/incomingCallFromPush.ts +65 -7
  591. package/src/helpers/publicChatsEntry.ts +8 -7
  592. package/src/helpers/pushPayload.ts +9 -1
  593. package/src/helpers/reportRoom.ts +93 -0
  594. package/src/helpers/roomMedia.ts +126 -0
  595. package/src/i18n/strings.ts +480 -0
  596. package/src/main.ts +33 -0
  597. package/src/networking/api-requests/callState.api.ts +83 -0
  598. package/src/networking/api-requests/push.api.ts +28 -3
  599. package/src/networking/api-requests/rooms.api.ts +25 -15
  600. package/src/networking/api-requests/scheduledCalls.api.ts +232 -0
  601. package/src/networking/callTokenStanza.ts +247 -50
  602. package/src/roomStore/callSlice.ts +86 -2
  603. package/src/services/appBadge.ts +85 -0
  604. package/src/services/languageSettings.ts +43 -8
  605. package/src/services/pushRegistration.ts +34 -3
  606. package/src/types/models/modal.model.ts +16 -0
  607. package/src/types/types.ts +86 -4
  608. package/src/version.ts +1 -1
@@ -0,0 +1,824 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _reactNativeSafeAreaContext = require("react-native-safe-area-context");
10
+ var _reactNativeGestureHandler = require("react-native-gesture-handler");
11
+ var _expoVideo = require("expo-video");
12
+ var _reactRedux = require("react-redux");
13
+ var _icons = require("../../../assets/icons");
14
+ var _secureFileUrl = require("../../../helpers/secureFileUrl");
15
+ var _videoCache = require("../../../helpers/videoCache");
16
+ var _chatSettingsSlice = require("../../../roomStore/chatSettingsSlice");
17
+ var _roomsSlice = require("../../../roomStore/roomsSlice");
18
+ var _useT = require("../../../i18n/useT");
19
+ var _jsxRuntime = require("react/jsx-runtime");
20
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
21
+ /** @format */
22
+
23
+ const WHITE = '#FFFFFF';
24
+ const BAR_BACKGROUND = 'rgba(0, 0, 0, 0.45)';
25
+ /** Drag (fraction of the height) or fling speed that closes the viewer. */
26
+ const CLOSE_DISTANCE = 0.15;
27
+ const CLOSE_VELOCITY = 900;
28
+ /** Swipe (fraction of the width) or fling speed that turns the page. */
29
+ const PAGE_DISTANCE = 0.25;
30
+ const PAGE_VELOCITY = 700;
31
+ /** A playing video takes the chrome away after this long without a touch. */
32
+ const AUTO_HIDE_MS = 3000;
33
+ const formatTime = seconds => {
34
+ const total = Math.max(0, Math.floor(seconds || 0));
35
+ const m = Math.floor(total / 60);
36
+ const s = total % 60;
37
+ return `${m}:${s < 10 ? '0' : ''}${s}`;
38
+ };
39
+ /**
40
+ * Full-screen photo / video viewer that behaves like Telegram's. A tap shows
41
+ * or hides everything but the media (a fade both ways); a drag up or down
42
+ * pulls the media off with the backdrop fading behind it, and a long enough
43
+ * drag or a fling closes the viewer; a sideways swipe turns the page in an
44
+ * album. The bottom bar carries Reply (where replies are on) and Delete (on
45
+ * one's own message). A video has its own controls in the chrome: tapping
46
+ * them works the player instead of hiding the chrome, and while it plays the
47
+ * chrome goes away by itself after a few seconds.
48
+ */
49
+ const MediaViewer = ({
50
+ file,
51
+ onClose,
52
+ onPage,
53
+ onSave,
54
+ onReplyOpened
55
+ }) => {
56
+ const t = (0, _useT.useT)();
57
+ const locale = (0, _useT.useUiLocale)();
58
+ const dispatch = (0, _reactRedux.useDispatch)();
59
+ const insets = (0, _reactNativeSafeAreaContext.useSafeAreaInsets)();
60
+ const {
61
+ width,
62
+ height
63
+ } = (0, _reactNative.useWindowDimensions)();
64
+ const appear = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
65
+ const dragX = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
66
+ const dragY = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
67
+ const chrome = (0, _react.useRef)(new _reactNative.Animated.Value(1)).current;
68
+ const [chromeVisible, setChromeVisible] = (0, _react.useState)(true);
69
+ const [bottomBarHeight, setBottomBarHeight] = (0, _react.useState)(0);
70
+ const closing = (0, _react.useRef)(false);
71
+ const axis = (0, _react.useRef)(null);
72
+ const pendingSlide = (0, _react.useRef)(0);
73
+ const playing = (0, _react.useRef)(false);
74
+ const hideTimer = (0, _react.useRef)(null);
75
+ const siblings = file.siblings ?? [];
76
+ const index = file.index ?? 0;
77
+ const hasPrev = siblings.length > 1 && index > 0;
78
+ const hasNext = siblings.length > 1 && index < siblings.length - 1;
79
+ const isVideo = (file.mimetype || '').startsWith('video/');
80
+ const source = file.source;
81
+ const canReply = !!source?.replyTo;
82
+ const canDelete = !!source?.own;
83
+ (0, _react.useEffect)(() => {
84
+ _reactNative.Animated.timing(appear, {
85
+ toValue: 1,
86
+ duration: 220,
87
+ useNativeDriver: true
88
+ }).start();
89
+ }, [appear]);
90
+
91
+ // ---- chrome ------------------------------------------------------------
92
+
93
+ const cancelAutoHide = (0, _react.useCallback)(() => {
94
+ if (hideTimer.current) {
95
+ clearTimeout(hideTimer.current);
96
+ }
97
+ hideTimer.current = null;
98
+ }, []);
99
+ const showChrome = (0, _react.useCallback)(visible => {
100
+ setChromeVisible(visible);
101
+ _reactNative.Animated.timing(chrome, {
102
+ toValue: visible ? 1 : 0,
103
+ duration: 180,
104
+ useNativeDriver: true
105
+ }).start();
106
+ }, [chrome]);
107
+ const scheduleAutoHide = (0, _react.useCallback)(() => {
108
+ cancelAutoHide();
109
+ if (!playing.current) {
110
+ return;
111
+ }
112
+ hideTimer.current = setTimeout(() => showChrome(false), AUTO_HIDE_MS);
113
+ }, [cancelAutoHide, showChrome]);
114
+ (0, _react.useEffect)(() => cancelAutoHide, [cancelAutoHide]);
115
+ const toggleChrome = () => {
116
+ const next = !chromeVisible;
117
+ showChrome(next);
118
+ if (next) {
119
+ scheduleAutoHide();
120
+ } else {
121
+ cancelAutoHide();
122
+ }
123
+ };
124
+ const handlePlayback = (0, _react.useCallback)(isPlaying => {
125
+ playing.current = isPlaying;
126
+ if (isPlaying) {
127
+ scheduleAutoHide();
128
+ } else {
129
+ cancelAutoHide();
130
+ }
131
+ }, [cancelAutoHide, scheduleAutoHide]);
132
+
133
+ // ---- close / page --------------------------------------------------------
134
+
135
+ const close = (0, _react.useCallback)((direction = 0) => {
136
+ if (closing.current) {
137
+ return;
138
+ }
139
+ closing.current = true;
140
+ cancelAutoHide();
141
+ const animations = [_reactNative.Animated.timing(appear, {
142
+ toValue: 0,
143
+ duration: 200,
144
+ useNativeDriver: true
145
+ })];
146
+ if (direction !== 0) {
147
+ animations.push(_reactNative.Animated.timing(dragY, {
148
+ toValue: direction * height,
149
+ duration: 200,
150
+ useNativeDriver: true
151
+ }));
152
+ }
153
+ _reactNative.Animated.parallel(animations).start(() => onClose());
154
+ }, [appear, cancelAutoHide, dragY, height, onClose]);
155
+ (0, _react.useEffect)(() => {
156
+ const sub = _reactNative.BackHandler.addEventListener('hardwareBackPress', () => {
157
+ close();
158
+ return true;
159
+ });
160
+ return () => sub.remove();
161
+ }, [close]);
162
+ const springBack = value => _reactNative.Animated.spring(value, {
163
+ toValue: 0,
164
+ useNativeDriver: true,
165
+ bounciness: 4
166
+ }).start();
167
+ const turnPage = (0, _react.useCallback)(direction => {
168
+ _reactNative.Animated.timing(dragX, {
169
+ toValue: -direction * width,
170
+ duration: 160,
171
+ useNativeDriver: true
172
+ }).start(() => {
173
+ pendingSlide.current = direction;
174
+ onPage?.(index + direction);
175
+ });
176
+ }, [dragX, index, onPage, width]);
177
+
178
+ // The new file mounts off-screen on the side it comes from, then slides in.
179
+ (0, _react.useEffect)(() => {
180
+ const direction = pendingSlide.current;
181
+ if (!direction) {
182
+ return;
183
+ }
184
+ pendingSlide.current = 0;
185
+ playing.current = false;
186
+ dragX.setValue(direction * width);
187
+ _reactNative.Animated.timing(dragX, {
188
+ toValue: 0,
189
+ duration: 180,
190
+ useNativeDriver: true
191
+ }).start();
192
+ }, [dragX, file.fileURL, width]);
193
+
194
+ // ---- gestures ------------------------------------------------------------
195
+
196
+ const latest = (0, _react.useRef)({
197
+ hasPrev,
198
+ hasNext,
199
+ width,
200
+ height,
201
+ close,
202
+ turnPage
203
+ });
204
+ latest.current = {
205
+ hasPrev,
206
+ hasNext,
207
+ width,
208
+ height,
209
+ close,
210
+ turnPage
211
+ };
212
+ const pageable = siblings.length > 1;
213
+ const pan = (0, _react.useMemo)(() => _reactNativeGestureHandler.Gesture.Pan().runOnJS(true).activeOffsetY([-12, 12]).activeOffsetX(pageable ? [-12, 12] : [-10000, 10000]).onStart(e => {
214
+ axis.current = pageable && Math.abs(e.translationX) > Math.abs(e.translationY) ? 'x' : 'y';
215
+ }).onUpdate(e => {
216
+ const l = latest.current;
217
+ if (axis.current === 'x') {
218
+ // Past the first or last file the page only gives a little.
219
+ const edge = e.translationX > 0 && !l.hasPrev || e.translationX < 0 && !l.hasNext;
220
+ dragX.setValue(edge ? e.translationX * 0.3 : e.translationX);
221
+ } else {
222
+ dragY.setValue(e.translationY);
223
+ }
224
+ }).onEnd(e => {
225
+ const l = latest.current;
226
+ if (axis.current === 'x') {
227
+ if ((e.translationX < -l.width * PAGE_DISTANCE || e.velocityX < -PAGE_VELOCITY) && l.hasNext) {
228
+ l.turnPage(1);
229
+ } else if ((e.translationX > l.width * PAGE_DISTANCE || e.velocityX > PAGE_VELOCITY) && l.hasPrev) {
230
+ l.turnPage(-1);
231
+ } else {
232
+ springBack(dragX);
233
+ }
234
+ } else if (Math.abs(e.translationY) > l.height * CLOSE_DISTANCE || Math.abs(e.velocityY) > CLOSE_VELOCITY) {
235
+ l.close(Math.sign(e.translationY || e.velocityY) || 1);
236
+ } else {
237
+ springBack(dragY);
238
+ }
239
+ axis.current = null;
240
+ }),
241
+ // eslint-disable-next-line react-hooks/exhaustive-deps
242
+ [pageable]);
243
+
244
+ // ---- actions -------------------------------------------------------------
245
+
246
+ const handleReply = () => {
247
+ if (!source?.replyTo) {
248
+ return;
249
+ }
250
+ const target = source.replyTo;
251
+ close();
252
+ dispatch((0, _roomsSlice.setEditAction)({
253
+ isEdit: false
254
+ }));
255
+ dispatch((0, _roomsSlice.setActiveMessage)({
256
+ id: target.id,
257
+ chatJID: target.chatJID
258
+ }));
259
+ onReplyOpened?.();
260
+ };
261
+ const handleDelete = () => {
262
+ if (!source?.own) {
263
+ return;
264
+ }
265
+ const {
266
+ roomJid,
267
+ messageId
268
+ } = source;
269
+ close();
270
+ dispatch((0, _chatSettingsSlice.setDeleteModal)({
271
+ isDeleteModal: true,
272
+ roomJid,
273
+ messageId
274
+ }));
275
+ };
276
+
277
+ // ---- styles from the animated values -------------------------------------
278
+
279
+ const dragFade = dragY.interpolate({
280
+ inputRange: [-height / 2, 0, height / 2],
281
+ outputRange: [0.15, 1, 0.15],
282
+ extrapolate: 'clamp'
283
+ });
284
+ const dragShrink = dragY.interpolate({
285
+ inputRange: [-height, 0, height],
286
+ outputRange: [0.85, 1, 0.85],
287
+ extrapolate: 'clamp'
288
+ });
289
+ const backdropOpacity = _reactNative.Animated.multiply(appear, dragFade);
290
+ const mediaStyle = {
291
+ transform: [{
292
+ translateX: dragX
293
+ }, {
294
+ translateY: dragY
295
+ }, {
296
+ scale: _reactNative.Animated.multiply(appear.interpolate({
297
+ inputRange: [0, 1],
298
+ outputRange: [0.92, 1]
299
+ }), dragShrink)
300
+ }],
301
+ opacity: appear
302
+ };
303
+ // The chrome steps aside while the media is being dragged.
304
+ const chromeOpacity = _reactNative.Animated.multiply(_reactNative.Animated.multiply(chrome, appear), dragY.interpolate({
305
+ inputRange: [-60, 0, 60],
306
+ outputRange: [0, 1, 0],
307
+ extrapolate: 'clamp'
308
+ }));
309
+ const chromePointerEvents = chromeVisible ? 'box-none' : 'none';
310
+ const subtitle = [source?.timestamp ? new Date(source.timestamp).toLocaleString(locale, {
311
+ day: 'numeric',
312
+ month: 'short',
313
+ hour: '2-digit',
314
+ minute: '2-digit'
315
+ }) : null, siblings.length > 1 ? t('attachment.position', {
316
+ index: index + 1,
317
+ total: siblings.length
318
+ }) : null].filter(Boolean).join(' · ');
319
+ const showBottomBar = canReply || canDelete;
320
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
321
+ style: _reactNative.StyleSheet.absoluteFill,
322
+ testID: "media-viewer",
323
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.StatusBar, {
324
+ barStyle: "light-content",
325
+ hidden: !chromeVisible,
326
+ animated: true
327
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
328
+ style: [_reactNative.StyleSheet.absoluteFill, styles.backdrop, {
329
+ opacity: backdropOpacity
330
+ }]
331
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector, {
332
+ gesture: pan,
333
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
334
+ style: _reactNative.StyleSheet.absoluteFill,
335
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
336
+ testID: "media-viewer-surface",
337
+ style: _reactNative.StyleSheet.absoluteFill,
338
+ onPress: toggleChrome,
339
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
340
+ style: [_reactNative.StyleSheet.absoluteFill, mediaStyle],
341
+ pointerEvents: "none",
342
+ children: isVideo ? null : /*#__PURE__*/(0, _jsxRuntime.jsx)(ViewerImage, {
343
+ uri: file.fileURL
344
+ }, file.fileURL)
345
+ })
346
+ }), isVideo && /*#__PURE__*/(0, _jsxRuntime.jsx)(ViewerVideo, {
347
+ uri: (0, _secureFileUrl.withFileToken)(file.fileURL),
348
+ mimetype: file.mimetype,
349
+ mediaStyle: mediaStyle,
350
+ chromeOpacity: chromeOpacity,
351
+ chromePointerEvents: chromePointerEvents,
352
+ bottomOffset: (showBottomBar ? bottomBarHeight : insets.bottom) + 8,
353
+ outerGesture: pan,
354
+ onPlayback: handlePlayback,
355
+ onActivity: scheduleAutoHide
356
+ }, file.fileURL), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
357
+ pointerEvents: chromePointerEvents,
358
+ style: [styles.topBar, {
359
+ paddingTop: insets.top + 6,
360
+ opacity: chromeOpacity
361
+ }],
362
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
363
+ testID: "media-viewer-back",
364
+ accessibilityRole: "button",
365
+ accessibilityLabel: t('action.close'),
366
+ hitSlop: 12,
367
+ style: styles.iconButton,
368
+ onPress: () => close(),
369
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.BackIcon, {
370
+ color: WHITE
371
+ })
372
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
373
+ style: styles.titleBlock,
374
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
375
+ numberOfLines: 1,
376
+ style: styles.title,
377
+ children: source?.senderName || t('modal.filePreview.title')
378
+ }), !!subtitle && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
379
+ numberOfLines: 1,
380
+ style: styles.subtitle,
381
+ children: subtitle
382
+ })]
383
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
384
+ testID: "media-viewer-save",
385
+ accessibilityRole: "button",
386
+ accessibilityLabel: t('action.save'),
387
+ hitSlop: 12,
388
+ style: styles.iconButton,
389
+ onPress: onSave,
390
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.SaveIcon, {
391
+ color: WHITE
392
+ })
393
+ })]
394
+ }), showBottomBar && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
395
+ pointerEvents: chromePointerEvents,
396
+ onLayout: e => setBottomBarHeight(e.nativeEvent.layout.height),
397
+ style: [styles.bottomBar, {
398
+ paddingBottom: insets.bottom + 8,
399
+ opacity: chromeOpacity
400
+ }],
401
+ children: [canReply ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
402
+ testID: "media-viewer-reply",
403
+ accessibilityRole: "button",
404
+ accessibilityLabel: t('action.reply'),
405
+ hitSlop: 12,
406
+ style: styles.iconButton,
407
+ onPress: handleReply,
408
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.ReplyIcon, {
409
+ color: WHITE
410
+ })
411
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
412
+ style: styles.iconButton
413
+ }), canDelete && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
414
+ testID: "media-viewer-delete",
415
+ accessibilityRole: "button",
416
+ accessibilityLabel: t('action.delete'),
417
+ hitSlop: 12,
418
+ style: styles.iconButton,
419
+ onPress: handleDelete,
420
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.DeleteIcon, {
421
+ fill: WHITE
422
+ })
423
+ })]
424
+ })]
425
+ })
426
+ })]
427
+ });
428
+ };
429
+ const ViewerImage = ({
430
+ uri
431
+ }) => {
432
+ const [loaded, setLoaded] = (0, _react.useState)(false);
433
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
434
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, {
435
+ source: {
436
+ uri: (0, _secureFileUrl.withFileToken)(uri)
437
+ },
438
+ style: _reactNative.StyleSheet.absoluteFill,
439
+ resizeMode: "contain",
440
+ onLoad: () => setLoaded(true),
441
+ onError: () => setLoaded(true)
442
+ }), !loaded && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
443
+ style: styles.center,
444
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
445
+ color: WHITE
446
+ })
447
+ })]
448
+ });
449
+ };
450
+ /**
451
+ * The video page: the surface in the media layer, the play / pause button
452
+ * and the scrubber in the chrome layer. Streams when the server allows it
453
+ * and falls back to a downloaded copy (AVPlayer refuses servers that ignore
454
+ * byte ranges), which is also what a reopened video plays from.
455
+ */
456
+ const ViewerVideo = ({
457
+ uri,
458
+ mimetype,
459
+ mediaStyle,
460
+ chromeOpacity,
461
+ chromePointerEvents,
462
+ bottomOffset,
463
+ outerGesture,
464
+ onPlayback,
465
+ onActivity
466
+ }) => {
467
+ const t = (0, _useT.useT)();
468
+ const remote = (0, _videoCache.isRemoteUrl)(uri);
469
+ // What the player is given; null until we know where to play from.
470
+ const [source, setSource] = (0, _react.useState)(remote ? null : uri);
471
+ // null = not downloading, otherwise 0..1 (0 while the size is unknown).
472
+ const [progress, setProgress] = (0, _react.useState)(null);
473
+ const [failed, setFailed] = (0, _react.useState)(false);
474
+ const [isPlaying, setIsPlaying] = (0, _react.useState)(false);
475
+ const [time, setTime] = (0, _react.useState)(0);
476
+ const [duration, setDuration] = (0, _react.useState)(0);
477
+ const [scrubTime, setScrubTime] = (0, _react.useState)(null);
478
+ const [trackWidth, setTrackWidth] = (0, _react.useState)(0);
479
+ const ended = (0, _react.useRef)(false);
480
+ // Opens playing, like Telegram; a pause sticks across a fallback copy.
481
+ const wantsPlay = (0, _react.useRef)(true);
482
+ const downloadStarted = (0, _react.useRef)(false);
483
+ const mounted = (0, _react.useRef)(true);
484
+ (0, _react.useEffect)(() => () => {
485
+ mounted.current = false;
486
+ }, []);
487
+ const download = (0, _react.useCallback)(() => {
488
+ if (downloadStarted.current) {
489
+ return;
490
+ }
491
+ downloadStarted.current = true;
492
+ setProgress(0);
493
+ (0, _videoCache.downloadVideoToCache)(uri, mimetype, fraction => {
494
+ if (mounted.current) {
495
+ setProgress(fraction);
496
+ }
497
+ }).then(localUri => {
498
+ if (!mounted.current) {
499
+ return;
500
+ }
501
+ setProgress(null);
502
+ setSource(localUri);
503
+ }).catch(err => {
504
+ console.warn('video download failed', err);
505
+ if (!mounted.current) {
506
+ return;
507
+ }
508
+ setProgress(null);
509
+ setFailed(true);
510
+ });
511
+ }, [mimetype, uri]);
512
+ (0, _react.useEffect)(() => {
513
+ if (!remote) {
514
+ return;
515
+ }
516
+ let active = true;
517
+ (0, _videoCache.findCachedVideo)(uri, mimetype).then(cached => {
518
+ if (!active) {
519
+ return;
520
+ }
521
+ if (cached) {
522
+ setSource(cached);
523
+ } else if ((0, _videoCache.isStreamingUnsupported)(uri)) {
524
+ download();
525
+ } else {
526
+ setSource(uri);
527
+ }
528
+ });
529
+ return () => {
530
+ active = false;
531
+ };
532
+ }, [download, mimetype, remote, uri]);
533
+ const player = (0, _expoVideo.useVideoPlayer)(source, p => {
534
+ p.muted = false;
535
+ p.timeUpdateEventInterval = 0.25;
536
+ if (wantsPlay.current) {
537
+ p.play();
538
+ }
539
+ });
540
+ (0, _react.useEffect)(() => {
541
+ const subs = [player.addListener('playingChange', ({
542
+ isPlaying: next
543
+ }) => {
544
+ setIsPlaying(next);
545
+ onPlayback(next);
546
+ }), player.addListener('timeUpdate', ({
547
+ currentTime
548
+ }) => setTime(currentTime)), player.addListener('playToEnd', () => {
549
+ ended.current = true;
550
+ }), player.addListener('statusChange', event => {
551
+ if (event.status === 'readyToPlay') {
552
+ setDuration(player.duration || 0);
553
+ return;
554
+ }
555
+ if (event.status !== 'error') {
556
+ return;
557
+ }
558
+ if (source === uri && remote) {
559
+ (0, _videoCache.markStreamingUnsupported)(uri);
560
+ download();
561
+ } else {
562
+ setFailed(true);
563
+ }
564
+ })];
565
+ return () => subs.forEach(sub => sub.remove());
566
+ }, [download, onPlayback, player, remote, source, uri]);
567
+ (0, _react.useEffect)(() => () => onPlayback(false), [onPlayback]);
568
+ const togglePlay = () => {
569
+ onActivity();
570
+ if (isPlaying) {
571
+ wantsPlay.current = false;
572
+ player.pause();
573
+ return;
574
+ }
575
+ if (ended.current) {
576
+ ended.current = false;
577
+ player.currentTime = 0;
578
+ }
579
+ wantsPlay.current = true;
580
+ player.play();
581
+ };
582
+ const latest = (0, _react.useRef)({
583
+ trackWidth,
584
+ duration,
585
+ player,
586
+ onActivity
587
+ });
588
+ latest.current = {
589
+ trackWidth,
590
+ duration,
591
+ player,
592
+ onActivity
593
+ };
594
+ const timeAt = x => {
595
+ const l = latest.current;
596
+ if (l.trackWidth <= 0 || l.duration <= 0) {
597
+ return 0;
598
+ }
599
+ return Math.min(1, Math.max(0, x / l.trackWidth)) * l.duration;
600
+ };
601
+ const seek = seconds => {
602
+ const l = latest.current;
603
+ ended.current = false;
604
+ l.player.currentTime = seconds;
605
+ setTime(seconds);
606
+ l.onActivity();
607
+ };
608
+ const scrub = (0, _react.useMemo)(() => {
609
+ const drag = _reactNativeGestureHandler.Gesture.Pan().runOnJS(true).activeOffsetX([-2, 2]).onUpdate(e => setScrubTime(timeAt(e.x))).onEnd(e => seek(timeAt(e.x))).onFinalize(() => setScrubTime(null)).blocksExternalGesture(outerGesture);
610
+ const tap = _reactNativeGestureHandler.Gesture.Tap().runOnJS(true).onEnd(e => seek(timeAt(e.x))).blocksExternalGesture(outerGesture);
611
+ return _reactNativeGestureHandler.Gesture.Exclusive(drag, tap);
612
+ }, [outerGesture]);
613
+ const loading = progress !== null || source === null;
614
+ const shown = scrubTime ?? time;
615
+ const fraction = duration > 0 ? Math.min(1, shown / duration) : 0;
616
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
617
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
618
+ style: [_reactNative.StyleSheet.absoluteFill, mediaStyle],
619
+ pointerEvents: "none",
620
+ children: !loading && !failed && /*#__PURE__*/(0, _jsxRuntime.jsx)(_expoVideo.VideoView, {
621
+ player: player,
622
+ style: _reactNative.StyleSheet.absoluteFill,
623
+ contentFit: "contain",
624
+ nativeControls: false,
625
+ surfaceType: "textureView"
626
+ })
627
+ }), failed ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
628
+ style: styles.center,
629
+ pointerEvents: "none",
630
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
631
+ style: styles.failedTitle,
632
+ children: t('video.cantPlay')
633
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
634
+ style: styles.failedHint,
635
+ children: t('video.cantPlayHint')
636
+ })]
637
+ }) : loading ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
638
+ style: styles.center,
639
+ pointerEvents: "none",
640
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
641
+ style: styles.playButton,
642
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
643
+ color: WHITE
644
+ })
645
+ }), !!progress && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
646
+ style: styles.progress,
647
+ children: [Math.round(progress * 100), "%"]
648
+ })]
649
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
650
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
651
+ pointerEvents: chromePointerEvents,
652
+ style: [styles.center, {
653
+ opacity: chromeOpacity
654
+ }],
655
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
656
+ testID: "media-viewer-play",
657
+ accessibilityRole: "button",
658
+ activeOpacity: 0.8,
659
+ style: styles.playButton,
660
+ onPress: togglePlay,
661
+ children: isPlaying ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.PauseIcon, {
662
+ width: 30,
663
+ height: 30,
664
+ color: WHITE
665
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.PlayIcon, {
666
+ width: 30,
667
+ height: 30,
668
+ color: WHITE
669
+ })
670
+ })
671
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
672
+ pointerEvents: chromePointerEvents,
673
+ style: [styles.scrubberRow, {
674
+ bottom: bottomOffset,
675
+ opacity: chromeOpacity
676
+ }],
677
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
678
+ style: styles.time,
679
+ children: formatTime(shown)
680
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeGestureHandler.GestureDetector, {
681
+ gesture: scrub,
682
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
683
+ testID: "media-viewer-scrubber",
684
+ style: styles.track,
685
+ onLayout: e => setTrackWidth(e.nativeEvent.layout.width),
686
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
687
+ style: styles.trackLine,
688
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
689
+ style: [styles.trackFill, {
690
+ width: `${fraction * 100}%`
691
+ }]
692
+ })
693
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
694
+ style: [styles.thumb, {
695
+ left: fraction * trackWidth - 7
696
+ }]
697
+ })]
698
+ })
699
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
700
+ style: styles.time,
701
+ children: formatTime(duration)
702
+ })]
703
+ })]
704
+ })]
705
+ });
706
+ };
707
+ const styles = _reactNative.StyleSheet.create({
708
+ backdrop: {
709
+ backgroundColor: '#000000'
710
+ },
711
+ center: {
712
+ ..._reactNative.StyleSheet.absoluteFill,
713
+ alignItems: 'center',
714
+ justifyContent: 'center'
715
+ },
716
+ topBar: {
717
+ position: 'absolute',
718
+ top: 0,
719
+ left: 0,
720
+ right: 0,
721
+ flexDirection: 'row',
722
+ alignItems: 'center',
723
+ paddingHorizontal: 8,
724
+ paddingBottom: 10,
725
+ backgroundColor: BAR_BACKGROUND
726
+ },
727
+ bottomBar: {
728
+ position: 'absolute',
729
+ left: 0,
730
+ right: 0,
731
+ bottom: 0,
732
+ flexDirection: 'row',
733
+ alignItems: 'center',
734
+ justifyContent: 'space-between',
735
+ paddingHorizontal: 8,
736
+ paddingTop: 10,
737
+ backgroundColor: BAR_BACKGROUND
738
+ },
739
+ iconButton: {
740
+ width: 44,
741
+ height: 44,
742
+ alignItems: 'center',
743
+ justifyContent: 'center'
744
+ },
745
+ titleBlock: {
746
+ flex: 1,
747
+ alignItems: 'center',
748
+ paddingHorizontal: 8
749
+ },
750
+ title: {
751
+ color: WHITE,
752
+ fontSize: 16,
753
+ fontWeight: '600'
754
+ },
755
+ subtitle: {
756
+ color: 'rgba(255, 255, 255, 0.7)',
757
+ fontSize: 13,
758
+ marginTop: 2
759
+ },
760
+ playButton: {
761
+ width: 64,
762
+ height: 64,
763
+ borderRadius: 32,
764
+ backgroundColor: 'rgba(0, 0, 0, 0.55)',
765
+ alignItems: 'center',
766
+ justifyContent: 'center'
767
+ },
768
+ progress: {
769
+ marginTop: 10,
770
+ color: WHITE,
771
+ fontSize: 13,
772
+ fontWeight: '600'
773
+ },
774
+ failedTitle: {
775
+ color: WHITE,
776
+ fontSize: 16,
777
+ fontWeight: '600'
778
+ },
779
+ failedHint: {
780
+ marginTop: 8,
781
+ color: 'rgba(255, 255, 255, 0.7)',
782
+ textAlign: 'center',
783
+ paddingHorizontal: 32
784
+ },
785
+ scrubberRow: {
786
+ position: 'absolute',
787
+ left: 12,
788
+ right: 12,
789
+ flexDirection: 'row',
790
+ alignItems: 'center',
791
+ gap: 10
792
+ },
793
+ time: {
794
+ color: WHITE,
795
+ fontSize: 12,
796
+ fontVariant: ['tabular-nums'],
797
+ minWidth: 36,
798
+ textAlign: 'center'
799
+ },
800
+ track: {
801
+ flex: 1,
802
+ height: 32,
803
+ justifyContent: 'center'
804
+ },
805
+ trackLine: {
806
+ height: 3,
807
+ borderRadius: 1.5,
808
+ backgroundColor: 'rgba(255, 255, 255, 0.35)',
809
+ overflow: 'hidden'
810
+ },
811
+ trackFill: {
812
+ height: '100%',
813
+ backgroundColor: WHITE
814
+ },
815
+ thumb: {
816
+ position: 'absolute',
817
+ width: 14,
818
+ height: 14,
819
+ borderRadius: 7,
820
+ backgroundColor: WHITE
821
+ }
822
+ });
823
+ var _default = exports.default = MediaViewer;
824
+ //# sourceMappingURL=MediaViewer.js.map