agora-appbuilder-core 4.0.0-api.5 → 4.0.0-api.6

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 (406) hide show
  1. package/package.json +2 -2
  2. package/template/.bundle/config +2 -0
  3. package/template/Gemfile +4 -0
  4. package/template/Gulpfile.js +29 -29
  5. package/template/_eslintrc.js +3 -3
  6. package/template/_gitignore +12 -11
  7. package/template/_package-lock.json +26471 -22749
  8. package/template/_prettierrc.js +2 -2
  9. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +30 -10
  10. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +19 -0
  11. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +1 -0
  12. package/template/agora-rn-uikit/src/Controls/Icons.ts +45 -0
  13. package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -4
  14. package/template/agora-rn-uikit/src/Controls/Local/FullScreen.tsx +3 -1
  15. package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +1 -0
  16. package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +1 -0
  17. package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +1 -0
  18. package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +1 -0
  19. package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +3 -1
  20. package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +1 -0
  21. package/template/agora-rn-uikit/src/Reducer/ActiveSpeaker.ts +30 -0
  22. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +3 -1
  23. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +3 -1
  24. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +1 -1
  25. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +3 -3
  26. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +5 -4
  27. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +1 -1
  28. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +8 -5
  29. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +1 -1
  30. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +1 -1
  31. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +1 -1
  32. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +18 -1
  33. package/template/agora-rn-uikit/src/Reducer/UserSecondaryPin.ts +23 -0
  34. package/template/agora-rn-uikit/src/Reducer/index.ts +2 -0
  35. package/template/agora-rn-uikit/src/Rtc/Create.tsx +47 -21
  36. package/template/agora-rn-uikit/src/Rtc/Join.tsx +37 -15
  37. package/template/agora-rn-uikit/src/RtcConfigure.tsx +122 -12
  38. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +32 -4
  39. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +21 -2
  40. package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +2 -0
  41. package/template/android/app/build.gradle +59 -156
  42. package/template/android/app/src/debug/AndroidManifest.xml +6 -1
  43. package/template/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java +7 -4
  44. package/template/android/app/src/main/AndroidManifest.xml +6 -19
  45. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  46. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +17 -0
  47. package/template/android/app/src/main/java/com/helloworld/MainApplication.java +19 -36
  48. package/template/android/app/src/release/java/com/helloworld/ReactNativeFlipper.java +20 -0
  49. package/template/android/build.gradle +19 -33
  50. package/template/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  51. package/template/android/gradle/wrapper/gradle-wrapper.properties +3 -2
  52. package/template/android/gradle.properties +18 -4
  53. package/template/android/gradlew +165 -104
  54. package/template/android/gradlew.bat +12 -23
  55. package/template/android/settings.gradle +1 -0
  56. package/template/bridge/rtc/webNg/RtcEngine.ts +131 -16
  57. package/template/bridge/rtc/webNg/index.ts +72 -1
  58. package/template/bridge/rtm/web/index.ts +5 -3
  59. package/template/configTransform.js +16 -1
  60. package/template/customization-api/action-library.ts +0 -8
  61. package/template/customization-api/app-state.ts +11 -2
  62. package/template/customization-api/customEvents.ts +6 -1
  63. package/template/customization-api/index.ts +4 -0
  64. package/template/customization-api/sub-components.ts +6 -3
  65. package/template/customization-api/temp.ts +50 -0
  66. package/template/customization-api/typeDefinition.ts +26 -14
  67. package/template/customization-api/types.ts +26 -0
  68. package/template/customization-api/utils.ts +2 -0
  69. package/template/customization-implementation/index.ts +0 -1
  70. package/template/defaultConfig.js +72 -0
  71. package/template/global.d.ts +13 -1
  72. package/template/index.js +0 -4
  73. package/template/index.web.js +0 -5
  74. package/template/index.wsdk.tsx +1 -19
  75. package/template/ios/.xcode.env +11 -0
  76. package/template/ios/HelloWorld/AppDelegate.h +2 -4
  77. package/template/ios/HelloWorld/AppDelegate.mm +42 -0
  78. package/template/ios/HelloWorld/Info.plist +1 -1
  79. package/template/ios/HelloWorld/main.m +2 -1
  80. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +529 -17
  81. package/template/ios/HelloWorld.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  82. package/template/ios/HelloWorld.xcworkspace/contents.xcworkspacedata +10 -0
  83. package/template/ios/HelloWorld.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  84. package/template/ios/HelloWorldTests/HelloWorldTests.m +14 -13
  85. package/template/ios/HelloWorldTests/Info.plist +2 -2
  86. package/template/ios/Podfile +53 -20
  87. package/template/ios/Podfile.lock +873 -0
  88. package/template/ios/ScreenSharing/Info.plist +15 -0
  89. package/template/ios/ScreenSharing/SampleHandler.h +9 -0
  90. package/template/ios/ScreenSharing/SampleHandler.m +70 -0
  91. package/template/jest.config.js +4 -0
  92. package/template/metro.config.js +7 -32
  93. package/template/package.json +52 -39
  94. package/template/react-native-toast-message/index.d.ts +3 -1
  95. package/template/react-native-toast-message/index.js +1 -0
  96. package/template/react-native-toast-message/src/components/base/index.js +20 -32
  97. package/template/react-native-toast-message/src/components/base/styles.js +18 -21
  98. package/template/react-native-toast-message/src/components/checkbox.js +24 -19
  99. package/template/react-native-toast-message/src/index.js +3 -1
  100. package/template/react-native-toast-message/src/index.sdk.tsx +4 -1
  101. package/template/src/App.tsx +13 -85
  102. package/template/src/AppRoutes.tsx +77 -0
  103. package/template/src/AppWrapper.tsx +38 -33
  104. package/template/src/SDKAppWrapper.tsx +79 -43
  105. package/template/src/app-state/useNoiseSupression.native.tsx +67 -0
  106. package/template/src/app-state/useNoiseSupression.tsx +107 -0
  107. package/template/src/app-state/useVideoQuality.tsx +39 -0
  108. package/template/src/assets/font-styles.css +171 -3
  109. package/template/src/assets/fonts/icomoon.ttf +0 -0
  110. package/template/src/assets/selection.json +1 -1
  111. package/template/src/atoms/ActionMenu.tsx +50 -11
  112. package/template/src/atoms/Avatar.tsx +51 -0
  113. package/template/src/atoms/Card.tsx +21 -8
  114. package/template/src/atoms/Carousel.native.tsx +105 -0
  115. package/template/src/atoms/Carousel.tsx +103 -0
  116. package/template/src/atoms/Checkbox.tsx +98 -0
  117. package/template/src/atoms/CircularProgress.tsx +0 -1
  118. package/template/src/atoms/ClipboardIconButton.tsx +91 -0
  119. package/template/src/atoms/CustomIcon.tsx +45 -0
  120. package/template/src/atoms/DropDownMulti.tsx +349 -0
  121. package/template/src/atoms/Dropdown.tsx +3 -3
  122. package/template/src/atoms/IconButton.tsx +52 -9
  123. package/template/src/atoms/ImageIcon.tsx +6 -3
  124. package/template/src/atoms/InlineNotification.tsx +81 -0
  125. package/template/src/atoms/MeetingLink.tsx +160 -0
  126. package/template/src/atoms/ParticipantsCount.tsx +18 -7
  127. package/template/src/atoms/Popup.tsx +49 -27
  128. package/template/src/atoms/PrimaryButton.tsx +19 -5
  129. package/template/src/atoms/RecordingInfo.tsx +2 -2
  130. package/template/src/atoms/SecondaryButton.tsx +2 -0
  131. package/template/src/atoms/Spacer.tsx +1 -0
  132. package/template/src/atoms/TertiaryButton.tsx +35 -5
  133. package/template/src/atoms/TextInput.tsx +2 -1
  134. package/template/src/atoms/Toolbar.tsx +64 -30
  135. package/template/src/atoms/ToolbarItem.tsx +11 -5
  136. package/template/src/atoms/ToolbarPreset.tsx +13 -2
  137. package/template/src/atoms/Tooltip.tsx +26 -4
  138. package/template/src/auth/AuthProvider.tsx +500 -0
  139. package/template/src/auth/AuthRoute.tsx +94 -0
  140. package/template/src/auth/IDPAuth.electron.tsx +31 -0
  141. package/template/src/auth/IDPAuth.tsx +67 -0
  142. package/template/src/auth/IDPLogoutComponent.tsx +158 -0
  143. package/template/src/auth/UserCancelPopup.tsx +115 -0
  144. package/template/src/auth/config.ts +52 -0
  145. package/template/src/auth/openIDPURL.electron.tsx +39 -0
  146. package/template/src/auth/openIDPURL.native.tsx +51 -0
  147. package/template/src/auth/openIDPURL.tsx +20 -0
  148. package/template/src/auth/useIDPAuth.electron.tsx +65 -0
  149. package/template/src/auth/useIDPAuth.native.tsx +70 -0
  150. package/template/src/auth/useIDPAuth.tsx +63 -0
  151. package/template/src/auth/useTokenAuth.tsx +194 -0
  152. package/template/src/components/Chat.tsx +5 -8
  153. package/template/src/components/ChatContext.ts +4 -0
  154. package/template/src/components/ColorConfigure.tsx +0 -1
  155. package/template/src/components/CommonStyles.ts +9 -2
  156. package/template/src/components/Controls.tsx +659 -52
  157. package/template/src/components/DeviceConfigure.tsx +362 -156
  158. package/template/src/components/DeviceContext.tsx +2 -0
  159. package/template/src/components/EventsConfigure.tsx +713 -109
  160. package/template/src/components/GraphQLProvider.tsx +62 -36
  161. package/template/src/components/GridVideo.tsx +23 -13
  162. package/template/src/components/HostControlView.tsx +11 -14
  163. package/template/src/components/JoinPhrase.tsx +0 -1
  164. package/template/src/components/Leftbar.tsx +4 -3
  165. package/template/src/components/Navbar.tsx +110 -42
  166. package/template/src/components/NavbarMobile.tsx +47 -36
  167. package/template/src/components/Navigation.native.tsx +1 -15
  168. package/template/src/{subComponents/screenshare/ScreenshareButton.native.tsx → components/Navigation.sdk.tsx} +17 -3
  169. package/template/src/components/Navigation.tsx +1 -15
  170. package/template/src/components/ParticipantsView.tsx +56 -48
  171. package/template/src/components/PinnedVideo.tsx +188 -114
  172. package/template/src/components/Precall.native.tsx +169 -67
  173. package/template/src/components/Precall.tsx +237 -71
  174. package/template/src/components/RTMConfigure.tsx +167 -55
  175. package/template/src/components/Rightbar.tsx +4 -3
  176. package/template/src/components/Router.electron.ts +1 -0
  177. package/template/src/components/Router.native.ts +1 -0
  178. package/template/src/components/Router.sdk.ts +1 -0
  179. package/template/src/components/Router.ts +1 -0
  180. package/template/src/components/SdkApiContext.tsx +179 -27
  181. package/template/src/components/SdkMuteToggleListener.tsx +88 -0
  182. package/template/src/components/SessionContext.tsx +0 -1
  183. package/template/src/components/Settings.tsx +25 -3
  184. package/template/src/components/SettingsView.tsx +44 -9
  185. package/template/src/components/Share.tsx +149 -71
  186. package/template/src/components/StorageContext.tsx +19 -5
  187. package/template/src/components/ToastComponent.tsx +3 -0
  188. package/template/src/components/WhiteboardLayout.tsx +291 -0
  189. package/template/src/components/chat-messages/useChatMessages.tsx +420 -207
  190. package/template/src/components/common/Error.tsx +2 -0
  191. package/template/src/components/common/Logo.tsx +2 -2
  192. package/template/src/components/contexts/LiveStreamDataContext.tsx +5 -4
  193. package/template/src/components/contexts/ScreenShareContext.tsx +15 -1
  194. package/template/src/components/contexts/WaitingRoomContext.tsx +50 -0
  195. package/template/src/components/contexts/WhiteboardContext.tsx +54 -54
  196. package/template/src/components/disable-chat/useDisableChat.tsx +32 -0
  197. package/template/src/components/livestream/LiveStreamContext.tsx +262 -177
  198. package/template/src/components/livestream/Types.ts +34 -18
  199. package/template/src/components/livestream/views/LiveStreamAttendeeLandingTile.tsx +295 -0
  200. package/template/src/components/livestream/views/LiveStreamControls.tsx +2 -4
  201. package/template/src/components/meeting-info-invite/MeetingInfo.tsx +82 -0
  202. package/template/src/components/meeting-info-invite/MeetingInfoCardHeader.tsx +86 -0
  203. package/template/src/components/meeting-info-invite/MeetingInfoGridTile.tsx +218 -0
  204. package/template/src/components/meeting-info-invite/MeetingInfoLinks.tsx +122 -0
  205. package/template/src/components/participants/AllAudienceParticipants.tsx +4 -5
  206. package/template/src/components/participants/AllHostParticipants.tsx +5 -6
  207. package/template/src/components/participants/Participant.tsx +40 -9
  208. package/template/src/components/participants/ParticipantSectionTitle.tsx +5 -2
  209. package/template/src/components/participants/ScreenshareParticipants.tsx +15 -17
  210. package/template/src/components/participants/UserActionMenuOptions.tsx +157 -49
  211. package/template/src/components/participants/WaitingRoomParticipants.tsx +74 -0
  212. package/template/src/components/popups/InvitePopup.tsx +110 -45
  213. package/template/src/components/popups/StartScreenSharePopup.native.tsx +182 -0
  214. package/template/src/components/popups/StartScreenSharePopup.tsx +6 -0
  215. package/template/src/components/popups/StopRecordingPopup.tsx +11 -5
  216. package/template/src/components/popups/StopScreenSharePopup.native.tsx +135 -0
  217. package/template/src/components/popups/StopScreenSharePopup.tsx +6 -0
  218. package/template/src/components/popups/WhiteboardClearAllPopup.tsx +123 -0
  219. package/template/src/components/precall/LocalMute.tsx +69 -45
  220. package/template/src/components/precall/PermissionHelper.tsx +52 -24
  221. package/template/src/components/precall/PreCallSettings.tsx +1 -0
  222. package/template/src/components/precall/VideoFallback.tsx +173 -0
  223. package/template/src/components/precall/VideoPreview.native.tsx +16 -50
  224. package/template/src/components/precall/VideoPreview.tsx +27 -162
  225. package/template/src/components/precall/index.tsx +2 -0
  226. package/template/src/components/precall/joinCallBtn.native.tsx +10 -3
  227. package/template/src/components/precall/joinCallBtn.tsx +11 -2
  228. package/template/src/components/precall/joinWaitingRoomBtn.native.tsx +210 -0
  229. package/template/src/components/precall/joinWaitingRoomBtn.tsx +250 -0
  230. package/template/src/components/precall/meetingTitle.tsx +35 -9
  231. package/template/src/components/precall/selectDevice.tsx +5 -5
  232. package/template/src/components/precall/textInput.tsx +16 -18
  233. package/template/src/components/precall/usePreCall.tsx +14 -4
  234. package/template/src/components/room-info/useRoomInfo.tsx +34 -0
  235. package/template/src/components/useShareLink.tsx +24 -59
  236. package/template/src/components/useUserPreference.tsx +73 -10
  237. package/template/src/components/useVideoCall.tsx +76 -3
  238. package/template/src/components/virtual-background/VBButton.tsx +64 -0
  239. package/template/src/components/virtual-background/VBCard.native.tsx +282 -0
  240. package/template/src/components/virtual-background/VBCard.tsx +272 -0
  241. package/template/src/components/virtual-background/VBPanel.tsx +279 -0
  242. package/template/src/components/virtual-background/VButils.native.ts +37 -0
  243. package/template/src/components/virtual-background/VButils.ts +104 -0
  244. package/template/src/components/virtual-background/VideoPreview.native.tsx +43 -0
  245. package/template/src/components/virtual-background/VideoPreview.tsx +106 -0
  246. package/template/src/components/virtual-background/imagePaths.ts +87 -0
  247. package/template/src/components/virtual-background/images/beachImageBase64.ts +1 -0
  248. package/template/src/components/virtual-background/images/bedroomImageBase64.ts +1 -0
  249. package/template/src/components/virtual-background/images/bookImageBase64.ts +1 -0
  250. package/template/src/components/virtual-background/images/earthImageBase64.ts +1 -0
  251. package/template/src/components/virtual-background/images/index.ts +37 -0
  252. package/template/src/components/virtual-background/images/lampImageBase64.ts +1 -0
  253. package/template/src/components/virtual-background/images/mountainsImageBase64.ts +1 -0
  254. package/template/src/components/virtual-background/images/office1ImageBase64.ts +1 -0
  255. package/template/src/components/virtual-background/images/officeImageBase64.ts +1 -0
  256. package/template/src/components/virtual-background/images/plantsImageBase64.ts +1 -0
  257. package/template/src/components/virtual-background/images/skyImageBase64.ts +1 -0
  258. package/template/src/components/virtual-background/images/wallImageBase64.ts +1 -0
  259. package/template/src/components/virtual-background/useVB.native.tsx +188 -0
  260. package/template/src/components/virtual-background/useVB.tsx +267 -0
  261. package/template/src/components/whiteboard/StrokeWidthTool.tsx +137 -0
  262. package/template/src/components/whiteboard/WhiteboardButton.tsx +93 -0
  263. package/template/src/components/whiteboard/WhiteboardCanvas.tsx +99 -0
  264. package/template/src/components/whiteboard/WhiteboardConfigure.native.tsx +137 -0
  265. package/template/src/components/whiteboard/WhiteboardConfigure.tsx +441 -0
  266. package/template/src/components/whiteboard/WhiteboardCursor.tsx +152 -0
  267. package/template/src/components/whiteboard/WhiteboardToolBox.tsx +1246 -0
  268. package/template/src/components/whiteboard/WhiteboardView.native.tsx +109 -0
  269. package/template/src/components/whiteboard/WhiteboardView.tsx +81 -0
  270. package/template/src/components/whiteboard/WhiteboardWidget.tsx +674 -0
  271. package/template/src/components/whiteboard/WhiteboardWrapper.tsx +38 -0
  272. package/template/src/language/default-labels/commonLabels.ts +51 -14
  273. package/template/src/language/default-labels/createScreenLabels.ts +97 -17
  274. package/template/src/language/default-labels/joinScreenLabels.ts +45 -6
  275. package/template/src/language/default-labels/precallScreenLabels.ts +145 -23
  276. package/template/src/language/default-labels/shareLinkScreenLabels.ts +85 -37
  277. package/template/src/language/default-labels/videoCallScreenLabels.ts +1137 -158
  278. package/template/src/pages/Create.tsx +125 -80
  279. package/template/src/pages/Join.tsx +76 -34
  280. package/template/src/pages/Login.tsx +26 -0
  281. package/template/src/pages/VideoCall.tsx +229 -114
  282. package/template/src/pages/video-call/ActionSheet.native.tsx +54 -7
  283. package/template/src/pages/video-call/ActionSheet.tsx +55 -16
  284. package/template/src/pages/video-call/ActionSheetContent.tsx +366 -291
  285. package/template/src/pages/video-call/ActionSheetHandle.tsx +7 -1
  286. package/template/src/pages/video-call/DefaultLayouts.ts +11 -5
  287. package/template/src/pages/video-call/NameWithMicIcon.tsx +17 -9
  288. package/template/src/pages/video-call/PinchableView.tsx +119 -0
  289. package/template/src/pages/video-call/RenderComponent.tsx +12 -3
  290. package/template/src/pages/video-call/SidePanelHeader.tsx +208 -6
  291. package/template/src/pages/video-call/VideoCallMobileView.tsx +140 -106
  292. package/template/src/pages/video-call/VideoCallScreen.native.tsx +3 -2
  293. package/template/src/pages/video-call/VideoCallScreen.tsx +113 -66
  294. package/template/src/pages/video-call/VideoComponent.tsx +53 -5
  295. package/template/src/pages/video-call/VideoRenderer.tsx +309 -52
  296. package/template/src/pages/video-call/VisibilitySensor.tsx +104 -0
  297. package/template/src/pages/video-call/ZoomableWrapper.native.tsx +34 -0
  298. package/template/src/pages/video-call/ZoomableWrapper.tsx +5 -0
  299. package/template/src/pages/video-call/index.ts +2 -0
  300. package/template/src/rtm/RTMEngine.ts +9 -4
  301. package/template/src/rtm-events/constants.ts +20 -0
  302. package/template/src/rtm-events-api/Events.ts +2 -0
  303. package/template/src/rtm-events-api/LocalEvents.ts +8 -0
  304. package/template/src/selection.json +1 -0
  305. package/template/src/subComponents/ChatBubble.tsx +81 -64
  306. package/template/src/subComponents/ChatContainer.tsx +20 -13
  307. package/template/src/subComponents/ChatInput.ios.tsx +11 -2
  308. package/template/src/subComponents/ChatInput.tsx +12 -3
  309. package/template/src/subComponents/Checkbox.native.tsx +46 -46
  310. package/template/src/subComponents/Checkbox.tsx +7 -6
  311. package/template/src/subComponents/CopyJoinInfo.tsx +26 -11
  312. package/template/src/subComponents/EndcallPopup.tsx +83 -12
  313. package/template/src/subComponents/LanguageSelector.tsx +34 -30
  314. package/template/src/subComponents/LayoutIconButton.tsx +30 -8
  315. package/template/src/subComponents/LayoutIconDropdown.tsx +19 -3
  316. package/template/src/subComponents/Loading.tsx +60 -0
  317. package/template/src/subComponents/LocalAudioMute.tsx +106 -30
  318. package/template/src/subComponents/LocalEndCall.tsx +91 -15
  319. package/template/src/subComponents/LocalSwitchCamera.tsx +50 -11
  320. package/template/src/subComponents/LocalVideoMute.tsx +126 -32
  321. package/template/src/subComponents/LogoutButton.tsx +1 -1
  322. package/template/src/subComponents/NetworkQualityPill.tsx +14 -31
  323. package/template/src/subComponents/Recording.tsx +23 -6
  324. package/template/src/subComponents/RemoteAudioMute.tsx +3 -3
  325. package/template/src/subComponents/RemoteMutePopup.tsx +55 -14
  326. package/template/src/subComponents/RemoteVideoMute.tsx +3 -3
  327. package/template/src/subComponents/RemoveMeetingPopup.tsx +19 -6
  328. package/template/src/subComponents/RemoveScreensharePopup.tsx +20 -5
  329. package/template/src/subComponents/ScreenShareNotice.tsx +11 -6
  330. package/template/src/subComponents/SelectDevice.tsx +98 -32
  331. package/template/src/subComponents/SidePanelEnum.tsx +2 -0
  332. package/template/src/subComponents/SidePanelHeader.tsx +97 -63
  333. package/template/src/subComponents/ToastConfig.tsx +70 -61
  334. package/template/src/subComponents/caption/Caption.tsx +130 -0
  335. package/template/src/subComponents/caption/CaptionContainer.tsx +302 -0
  336. package/template/src/subComponents/caption/CaptionIcon.tsx +111 -0
  337. package/template/src/subComponents/caption/CaptionText.tsx +182 -0
  338. package/template/src/subComponents/caption/DownloadTranscriptBtn.tsx +65 -0
  339. package/template/src/subComponents/caption/LanguageSelectorPopup.tsx +192 -0
  340. package/template/src/subComponents/caption/Transcript.tsx +449 -0
  341. package/template/src/subComponents/caption/TranscriptIcon.tsx +123 -0
  342. package/template/src/subComponents/caption/TranscriptText.tsx +98 -0
  343. package/template/src/subComponents/caption/index.ts +3 -0
  344. package/template/src/subComponents/caption/proto/ptoto.js +91 -0
  345. package/template/src/subComponents/caption/proto/test.proto +23 -0
  346. package/template/src/subComponents/caption/useCaption.tsx +123 -0
  347. package/template/src/subComponents/caption/useCaptionWidth.ts +27 -0
  348. package/template/src/subComponents/caption/useSTTAPI.tsx +179 -0
  349. package/template/src/subComponents/caption/useStreamMessageUtils.native.ts +211 -0
  350. package/template/src/subComponents/caption/useStreamMessageUtils.ts +235 -0
  351. package/template/src/subComponents/caption/useTranscriptDownload.native.ts +68 -0
  352. package/template/src/subComponents/caption/useTranscriptDownload.ts +52 -0
  353. package/template/src/subComponents/caption/utils.ts +125 -0
  354. package/template/src/subComponents/chat/ChatParticipants.tsx +53 -17
  355. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +11 -13
  356. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +33 -9
  357. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +1 -0
  358. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +10 -6
  359. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +28 -19
  360. package/template/src/subComponents/recording/useRecording.tsx +49 -20
  361. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +0 -1
  362. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +29 -10
  363. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +270 -66
  364. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +182 -95
  365. package/template/src/subComponents/screenshare/useScreenshare.tsx +2 -0
  366. package/template/src/subComponents/waiting-rooms/WaitingRoomControls.tsx +85 -0
  367. package/template/src/subComponents/waiting-rooms/useWaitingRoomAPI.ts +75 -0
  368. package/template/src/theme/index.ts +9 -0
  369. package/template/src/utils/SdkEvents.ts +14 -0
  370. package/template/src/utils/SdkMethodEvents.ts +23 -3
  371. package/template/src/utils/axiomLogger.ts +117 -0
  372. package/template/src/utils/book.jpg +0 -0
  373. package/template/src/utils/common.tsx +118 -6
  374. package/template/src/utils/endCallEveryOne.ts +7 -0
  375. package/template/src/utils/getCustomRoute.ts +7 -0
  376. package/template/src/utils/index.tsx +23 -0
  377. package/template/src/utils/useActionSheet.tsx +50 -0
  378. package/template/src/utils/useActiveSpeaker.ts +3 -7
  379. package/template/src/utils/useAppState.ts +17 -0
  380. package/template/src/utils/useAsyncEffect.ts +138 -0
  381. package/template/src/utils/useCreateRoom.ts +8 -12
  382. package/template/src/utils/useDisableButton.tsx +37 -0
  383. package/template/src/utils/useFindActiveSpeaker.native.ts +4 -0
  384. package/template/src/utils/useFindActiveSpeaker.ts +335 -0
  385. package/template/src/utils/useIsLocalUserSpeaking.native.ts +4 -0
  386. package/template/src/utils/useIsLocalUserSpeaking.ts +98 -0
  387. package/template/src/utils/useJoinRoom.ts +97 -36
  388. package/template/src/utils/useMuteToggleLocal.ts +114 -96
  389. package/template/src/utils/useString.ts +13 -3
  390. package/template/static.d.ts +42 -0
  391. package/template/tsconfig_rsdk_index.json +3 -3
  392. package/template/tsconfig_wsdk_index.json +1 -1
  393. package/template/web/index.html +20 -0
  394. package/template/webpack.commons.js +21 -10
  395. package/template/webpack.web.config.js +7 -3
  396. package/template/_buckconfig +0 -6
  397. package/template/_gitattributes +0 -1
  398. package/template/android/app/_BUCK +0 -55
  399. package/template/android/app/build_defs.bzl +0 -19
  400. package/template/ios/HelloWorld/AppDelegate.m +0 -74
  401. package/template/src/components/OAuth.electron.tsx +0 -41
  402. package/template/src/components/OAuth.native.tsx +0 -55
  403. package/template/src/components/OAuth.tsx +0 -30
  404. package/template/src/components/OAuthConfig.ts +0 -77
  405. package/template/src/components/Settings.native.tsx +0 -21
  406. package/template/src/components/StoreToken.tsx +0 -39
@@ -1,15 +1,16 @@
1
1
  /*
2
2
  ********************************************
3
3
  Copyright © 2021 Agora Lab, Inc., all rights reserved.
4
- AppBuilder and all associated components, source code, APIs, services, and documentation
5
- (the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
6
- accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
7
- Use without a license or in violation of any license terms and conditions (including use for
8
- any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
9
- information visit https://appbuilder.agora.io.
4
+ AppBuilder and all associated components, source code, APIs, services, and documentation
5
+ (the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
6
+ accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
7
+ Use without a license or in violation of any license terms and conditions (including use for
8
+ any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
9
+ information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import React, {useContext, useEffect, useRef} from 'react';
12
+ import React, {useContext, useEffect, useRef, useState} from 'react';
13
+ import {Platform} from 'react-native';
13
14
  import KeepAwake from 'react-native-keep-awake';
14
15
  import {DispatchContext, UidType} from '../../../agora-rn-uikit';
15
16
  import {
@@ -19,34 +20,57 @@ import {
19
20
  useSetPinnedLayout,
20
21
  } from '../../pages/video-call/DefaultLayouts';
21
22
  import {useScreenContext} from '../../components/contexts/ScreenShareContext';
22
- import {useString} from '../../utils/useString';
23
23
  import events from '../../rtm-events-api';
24
24
  import {EventNames, EventActions} from '../../rtm-events';
25
- import {useLayout, useContent} from 'customization-api';
25
+ import {useLayout, useContent, useRtc} from 'customization-api';
26
26
  import {filterObject} from '../../utils';
27
+ import {ScreenshareContext} from './useScreenshare';
28
+ import useMuteToggleLocal, {
29
+ MUTE_LOCAL_TYPE,
30
+ } from '../../utils/useMuteToggleLocal';
31
+ import {useLocalUserInfo} from '../../app-state/useLocalUserInfo';
32
+ import {LocalVideoStreamError} from 'react-native-agora';
33
+ import useAppState from '../../utils/useAppState';
34
+
35
+ export const ScreenshareContextConsumer = ScreenshareContext.Consumer;
27
36
 
28
37
  export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
38
+ const [isScreenshareActive, setScreenshareActive] = useState(false);
39
+ const isAndroidScreenShareStarted = useRef(false);
40
+ const appState = useAppState();
41
+ const processRef = useRef(false);
42
+ const enableVideoRef = useRef(false);
43
+ const {RtcEngineUnsafe} = useRtc();
29
44
  const {dispatch} = useContext(DispatchContext);
30
- const {defaultContent, activeUids, lastJoinedUid, pinnedUid} = useContent();
45
+ const {defaultContent, activeUids, pinnedUid, secondaryPinnedUid} =
46
+ useContent();
31
47
  const isPinned = useRef(0);
32
- const {setScreenShareData, screenShareData} = useScreenContext();
33
- // commented for v1 release
34
- // const getScreenShareName = useString('screenshareUserName');
35
- // const userText = useString('remoteUserDefaultLabel')();
36
- const getScreenShareName = (name: string) => `${name}'s screenshare`;
37
- const userText = 'User';
48
+ const {setScreenShareData, screenShareData, setScreenShareOnFullView} =
49
+ useScreenContext();
38
50
  const setPinnedLayout = useSetPinnedLayout();
39
51
  const changeLayout = useChangeDefaultLayout();
40
52
  const {currentLayout} = useLayout();
41
53
  const defaultContentRef = useRef({defaultContent: defaultContent});
42
54
  const currentLayoutRef = useRef({currentLayout: currentLayout});
43
-
44
55
  const pinnedUidRef = useRef({pinnedUid: pinnedUid});
45
-
56
+ const secondaryPinnedUidRef = useRef({
57
+ secondaryPinnedUid: secondaryPinnedUid,
58
+ });
59
+ const screenShareDataRef = useRef({screenShareData: screenShareData});
60
+ const localMute = useMuteToggleLocal();
61
+ const {video} = useLocalUserInfo();
46
62
  useEffect(() => {
47
63
  pinnedUidRef.current.pinnedUid = pinnedUid;
48
64
  }, [pinnedUid]);
49
65
 
66
+ useEffect(() => {
67
+ secondaryPinnedUidRef.current.secondaryPinnedUid = secondaryPinnedUid;
68
+ }, [secondaryPinnedUid]);
69
+
70
+ useEffect(() => {
71
+ screenShareDataRef.current.screenShareData = screenShareData;
72
+ }, [screenShareData]);
73
+
50
74
  useEffect(() => {
51
75
  defaultContentRef.current.defaultContent = defaultContent;
52
76
  }, [defaultContent]);
@@ -59,7 +83,7 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
59
83
  const data = filterObject(screenShareData, ([k, v]) => v?.isActive);
60
84
  if (data) {
61
85
  const recentScreenshare = Object.keys(data)
62
- .map((i) => parseInt(i))
86
+ .map(i => parseInt(i))
63
87
  .sort((a, b) => {
64
88
  return data[a].ts - data[b].ts;
65
89
  });
@@ -69,21 +93,44 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
69
93
  isPinned.current !== recentScreenshare[0] &&
70
94
  activeUids.indexOf(recentScreenshare[0]) !== -1
71
95
  ) {
72
- triggerChangeLayout(true, recentScreenshare[0]);
96
+ triggerChangeLayout(
97
+ true,
98
+ recentScreenshare[0],
99
+ defaultContentRef.current.defaultContent[recentScreenshare[0]]
100
+ ?.parentUid,
101
+ );
73
102
  }
74
103
  }
75
104
  }
76
105
  }, [activeUids, screenShareData]);
77
106
 
78
- const triggerChangeLayout = (pinned: boolean, screenShareUid?: UidType) => {
107
+ const triggerChangeLayout = (
108
+ pinned: boolean,
109
+ screenShareUid?: UidType,
110
+ parentUid?: UidType,
111
+ ) => {
79
112
  let layout = currentLayoutRef.current.currentLayout;
80
113
  //screenshare is started set the layout to Pinned View
81
114
  if (pinned && screenShareUid) {
82
115
  isPinned.current = screenShareUid;
83
116
  dispatch({
84
- type: 'SwapVideo',
117
+ type: 'UserPin',
85
118
  value: [screenShareUid],
86
119
  });
120
+ if (parentUid && !secondaryPinnedUidRef.current.secondaryPinnedUid) {
121
+ dispatch({
122
+ type: 'UserSecondaryPin',
123
+ value: [parentUid],
124
+ });
125
+ } else if (
126
+ parentUid &&
127
+ secondaryPinnedUidRef.current.secondaryPinnedUid
128
+ ) {
129
+ dispatch({
130
+ type: 'ActiveSpeaker',
131
+ value: [parentUid],
132
+ });
133
+ }
87
134
  layout !== getPinnedLayoutName() && setPinnedLayout();
88
135
  } else {
89
136
  isPinned.current = 0;
@@ -93,56 +140,213 @@ export const ScreenshareConfigure = (props: {children: React.ReactNode}) => {
93
140
  };
94
141
 
95
142
  useEffect(() => {
96
- events.on(EventNames.SCREENSHARE_ATTRIBUTE, (data) => {
97
- const payload = JSON.parse(data.payload);
98
- const action = payload.action;
99
- const value = payload.value;
100
-
101
- const screenUidOfUser =
102
- defaultContentRef.current.defaultContent[data.sender].screenUid;
103
- switch (action) {
104
- case EventActions.SCREENSHARE_STARTED:
105
- setScreenShareData((prevState) => {
106
- return {
107
- ...prevState,
108
- [screenUidOfUser]: {
109
- name: defaultContentRef.current.defaultContent[screenUidOfUser]
110
- ?.name,
111
- isActive: true,
112
- ts: value || 0,
113
- },
114
- };
115
- });
116
- break;
117
- case EventActions.SCREENSHARE_STOPPED:
118
- setScreenShareData((prevState) => {
119
- return {
120
- ...prevState,
121
- [screenUidOfUser]: {
122
- name: defaultContentRef.current.defaultContent[screenUidOfUser]
123
- ?.name,
124
- isActive: false,
125
- ts: value || 0,
126
- },
127
- };
128
- });
129
- //if remote user started/stopped the screenshare then change the layout to pinned/grid
130
- //if user pinned somebody then don't triggerlayout change
131
- if (!pinnedUidRef.current.pinnedUid) {
132
- triggerChangeLayout(false);
143
+ RtcEngineUnsafe?.addListener(
144
+ 'LocalVideoStateChanged',
145
+ (localVideoState, error) => {
146
+ if (Platform.OS === 'android') {
147
+ switch (error) {
148
+ case LocalVideoStreamError.ScreenCapturePermissionDenied:
149
+ isAndroidScreenShareStarted.current = false;
150
+ break;
133
151
  }
134
- break;
135
- default:
136
- break;
137
- }
138
- });
152
+ } else {
153
+ switch (error) {
154
+ case LocalVideoStreamError.ExtensionCaptureStarted:
155
+ processRef.current = true;
156
+ setScreenshareActive(true);
157
+ break;
158
+ case LocalVideoStreamError.ExtensionCaptureStoped:
159
+ case LocalVideoStreamError.ExtensionCaptureDisconnected:
160
+ case LocalVideoStreamError.ScreenCapturePermissionDenied:
161
+ processRef.current = true;
162
+ setScreenshareActive(false);
163
+ break;
164
+ default:
165
+ break;
166
+ }
167
+ }
168
+ },
169
+ );
170
+ const unsubScreenShareAttribute = events.on(
171
+ EventNames.SCREENSHARE_ATTRIBUTE,
172
+ data => {
173
+ const payload = JSON.parse(data.payload);
174
+ const action = payload.action;
175
+ const value = payload.value;
176
+
177
+ const screenUidOfUser =
178
+ defaultContentRef.current.defaultContent[data.sender].screenUid;
179
+ switch (action) {
180
+ case EventActions.SCREENSHARE_STARTED:
181
+ setScreenShareData(prevState => {
182
+ return {
183
+ ...prevState,
184
+ [screenUidOfUser]: {
185
+ ...prevState[screenUidOfUser],
186
+ name: defaultContentRef.current.defaultContent[
187
+ screenUidOfUser
188
+ ]?.name,
189
+ isActive: true,
190
+ ts: value || 0,
191
+ },
192
+ };
193
+ });
194
+ break;
195
+ case EventActions.SCREENSHARE_STOPPED:
196
+ //if user pinned some remote screenshare view as fullscreen view on native and remote stop the screenshare
197
+ //then we need to exit the fullscreen view
198
+ if (
199
+ screenShareDataRef.current.screenShareData[screenUidOfUser] &&
200
+ screenShareDataRef.current.screenShareData[screenUidOfUser]
201
+ ?.isExpanded
202
+ ) {
203
+ setScreenShareOnFullView(false);
204
+ }
205
+ setScreenShareData(prevState => {
206
+ return {
207
+ ...prevState,
208
+ [screenUidOfUser]: {
209
+ ...prevState[screenUidOfUser],
210
+ isExpanded: false,
211
+ name: defaultContentRef.current.defaultContent[
212
+ screenUidOfUser
213
+ ]?.name,
214
+ isActive: false,
215
+ ts: value || 0,
216
+ },
217
+ };
218
+ });
219
+ //if remote user started/stopped the screenshare then change the layout to pinned/grid
220
+ //if user pinned somebody then don't triggerlayout change
221
+ if (!pinnedUidRef.current.pinnedUid) {
222
+ triggerChangeLayout(false);
223
+ }
224
+ if (screenUidOfUser === pinnedUidRef.current.pinnedUid) {
225
+ triggerChangeLayout(false);
226
+ dispatch({
227
+ type: 'UserPin',
228
+ value: [0],
229
+ });
230
+ }
231
+ break;
232
+ default:
233
+ break;
234
+ }
235
+ },
236
+ );
237
+
238
+ return () => {
239
+ unsubScreenShareAttribute();
240
+ };
139
241
  }, []);
140
242
 
243
+ const startUserScreenshare = async (captureAudio: boolean = false) => {
244
+ if (!isScreenshareActive) {
245
+ // either user can publish local video or screenshare stream
246
+ // so if user video is turned on then we are turning off video before screenshare
247
+ await RtcEngineUnsafe?.startScreenCapture({
248
+ captureVideo: true,
249
+ captureAudio,
250
+ });
251
+ /**
252
+ * android -> user will see the confirmation popup from the system,
253
+ * if user denied permission we will update isAndroidScreenShareStarted.current as false in the video state change callback
254
+ * if user allowed permission we will update screenshare as active in appState useeffect
255
+ */
256
+ if (Platform.OS === 'android') {
257
+ isAndroidScreenShareStarted.current = true;
258
+ }
259
+ //For ios will update state in the video state changed callback
260
+ } else {
261
+ console.log('screenshare is already active');
262
+ }
263
+ };
264
+
265
+ useEffect(() => {
266
+ setTimeout(() => {
267
+ if (
268
+ appState === 'active' &&
269
+ isAndroidScreenShareStarted.current === true
270
+ ) {
271
+ isAndroidScreenShareStarted.current = false;
272
+ processRef.current = true;
273
+ setScreenshareActive(true);
274
+ }
275
+ }, 1000);
276
+ }, [appState]);
277
+
278
+ const stopUserScreenShare = async (
279
+ enableVideo: boolean = false,
280
+ forceStop: boolean = false,
281
+ ) => {
282
+ if (isScreenshareActive || forceStop) {
283
+ enableVideoRef.current = enableVideo;
284
+ await RtcEngineUnsafe?.stopScreenCapture();
285
+ if (Platform.OS === 'android') {
286
+ processRef.current = true;
287
+ setScreenshareActive(false);
288
+ }
289
+ //For ios will update state in the video state changed callback
290
+ } else {
291
+ console.log('no screenshare is active');
292
+ }
293
+ };
294
+
295
+ useEffect(() => {
296
+ if (processRef.current) {
297
+ //native screenshare is started
298
+ if (isScreenshareActive) {
299
+ //to increase the performance - stop incoming video stream
300
+ RtcEngineUnsafe.muteAllRemoteVideoStreams(true);
301
+
302
+ //since native screenshare uses local user video
303
+ //we need to turn on video if its off.
304
+ //otherwise remote user can't see the screen shared from the mobile
305
+ if (!video) {
306
+ localMute(MUTE_LOCAL_TYPE.video);
307
+ }
308
+ }
309
+ //native screenshare is stopped
310
+ else {
311
+ //resume the incoming video stream
312
+ RtcEngineUnsafe.muteAllRemoteVideoStreams(false);
313
+
314
+ //edge case - if screenshare is going on and user want to enable the video
315
+ //then we will inform the user to stop screenshare and start camera
316
+ //in that case if video is off then turned it on.
317
+ //if video is on - that's fine
318
+ if (enableVideoRef.current) {
319
+ enableVideoRef.current = false;
320
+ if (!video) {
321
+ localMute(MUTE_LOCAL_TYPE.video);
322
+ }
323
+ }
324
+ //regular usecase - once screenshare stopped will stop user video - since screenshare uses local user video
325
+ else {
326
+ //
327
+ if (video) {
328
+ localMute(MUTE_LOCAL_TYPE.video);
329
+ }
330
+ }
331
+ }
332
+ processRef.current = false;
333
+ }
334
+ }, [isScreenshareActive]);
335
+
336
+ const ScreenshareStoppedCallback = () => {};
337
+
141
338
  return (
142
- <>
339
+ <ScreenshareContext.Provider
340
+ value={{
341
+ isScreenshareActive,
342
+ startUserScreenshare,
343
+ stopUserScreenShare,
344
+ //@ts-ignore
345
+ ScreenshareStoppedCallback,
346
+ }}>
143
347
  {props.children}
144
348
  <KeepAwake />
145
- </>
349
+ </ScreenshareContext.Provider>
146
350
  );
147
351
  };
148
352