agora-appbuilder-core 3.0.8 → 4.0.0-api.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (341) hide show
  1. package/Readme.md +6 -0
  2. package/package.json +2 -2
  3. package/template/_package-lock.json +32828 -2777
  4. package/template/agora-rn-uikit/src/AgoraUIKit.tsx +6 -6
  5. package/template/agora-rn-uikit/src/Contexts/ContentContext.tsx +10 -0
  6. package/template/agora-rn-uikit/src/Contexts/DispatchContext.tsx +22 -0
  7. package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +10 -6
  8. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +28 -8
  9. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +7 -15
  10. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +30 -26
  11. package/template/agora-rn-uikit/src/Controls/Icons.ts +30 -83
  12. package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +6 -6
  13. package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +4 -2
  14. package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +4 -2
  15. package/template/agora-rn-uikit/src/Controls/Local/Recording.tsx +0 -2
  16. package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +6 -6
  17. package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +5 -5
  18. package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +4 -4
  19. package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +4 -4
  20. package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +2 -2
  21. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +6 -6
  22. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +6 -6
  23. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +23 -0
  24. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +6 -6
  25. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +7 -7
  26. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +7 -7
  27. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +10 -10
  28. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +6 -6
  29. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +6 -6
  30. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +5 -5
  31. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +11 -0
  32. package/template/agora-rn-uikit/src/Reducer/index.ts +2 -0
  33. package/template/agora-rn-uikit/src/Rtc/Create.tsx +74 -7
  34. package/template/agora-rn-uikit/src/Rtc/Join.tsx +5 -4
  35. package/template/agora-rn-uikit/src/RtcConfigure.tsx +76 -49
  36. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +17 -7
  37. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +17 -11
  38. package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +2 -2
  39. package/template/agora-rn-uikit/src/index.ts +17 -9
  40. package/template/android/app/build.gradle +1 -0
  41. package/template/android/app/src/main/AndroidManifest.xml +22 -15
  42. package/template/android/app/src/main/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  43. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  44. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +50 -0
  45. package/template/android/app/src/main/res/values/colors.xml +7 -0
  46. package/template/android/build.gradle +3 -3
  47. package/template/babel.config.js +1 -0
  48. package/template/bridge/rtc/webNg/RtcEngine.ts +110 -17
  49. package/template/customization-api/action-library.ts +10 -14
  50. package/template/customization-api/app-state.ts +4 -6
  51. package/template/customization-api/customEvents.ts +2 -2
  52. package/template/customization-api/customize.ts +1 -1
  53. package/template/customization-api/sub-components.ts +4 -12
  54. package/template/customization-api/typeDefinition.ts +15 -38
  55. package/template/customization-implementation/createHook.ts +24 -6
  56. package/template/customization-implementation/index.ts +1 -1
  57. package/template/customization-implementation/useCustomization.tsx +5 -7
  58. package/template/electron/index.html +27 -27
  59. package/template/electron/renderer/index.js +1 -0
  60. package/template/global.d.ts +26 -4
  61. package/template/index.rsdk.tsx +1 -0
  62. package/template/index.web.js +2 -1
  63. package/template/index.wsdk.tsx +9 -2
  64. package/template/ios/HelloWorld/Info.plist +14 -1
  65. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +17 -0
  66. package/template/metro.config.js +1 -1
  67. package/template/package.json +18 -7
  68. package/template/react-native-toast-message/index.d.ts +43 -43
  69. package/template/react-native-toast-message/src/colors/index.js +3 -2
  70. package/template/react-native-toast-message/src/components/base/index.js +46 -59
  71. package/template/react-native-toast-message/src/components/base/styles.js +16 -32
  72. package/template/react-native-toast-message/src/components/checkbox.js +178 -0
  73. package/template/react-native-toast-message/src/components/error.js +3 -2
  74. package/template/react-native-toast-message/src/components/info.js +3 -2
  75. package/template/react-native-toast-message/src/components/success.js +3 -2
  76. package/template/react-native-toast-message/src/index.js +122 -31
  77. package/template/react-native-toast-message/src/index.sdk.tsx +125 -35
  78. package/template/react-native-toast-message/src/styles.js +3 -4
  79. package/template/react-native-toast-message/src/styles.sdk.ts +3 -4
  80. package/template/react-native.config.js +7 -0
  81. package/template/src/App.tsx +19 -14
  82. package/template/src/AppWrapper.tsx +74 -29
  83. package/template/src/SDKAppWrapper.tsx +60 -64
  84. package/template/src/app-state/useLocalUserInfo.ts +3 -3
  85. package/template/src/assets/font-styles.css +329 -0
  86. package/template/src/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  87. package/template/src/assets/fonts/icomoon.ttf +0 -0
  88. package/template/src/assets/permission.png +0 -0
  89. package/template/src/assets/selection.json +1 -0
  90. package/template/src/atoms/ActionMenu.tsx +236 -0
  91. package/template/src/atoms/AnimatedActiveSpeaker.native.tsx +71 -0
  92. package/template/src/atoms/AnimatedActiveSpeaker.tsx +84 -0
  93. package/template/src/atoms/AnimatedRings.native.tsx +68 -0
  94. package/template/src/atoms/AnimatedRings.tsx +70 -0
  95. package/template/src/atoms/Card.tsx +61 -0
  96. package/template/src/atoms/CircularProgress.native.tsx +121 -0
  97. package/template/src/atoms/CircularProgress.tsx +102 -0
  98. package/template/src/atoms/CustomIcon.tsx +88 -0
  99. package/template/src/atoms/CustomSwitch.tsx +287 -0
  100. package/template/src/atoms/Dropdown.tsx +306 -0
  101. package/template/src/atoms/HorizontalRule.tsx +3 -1
  102. package/template/src/atoms/IconButton.tsx +162 -0
  103. package/template/src/atoms/ImageIcon.tsx +98 -0
  104. package/template/src/atoms/InfoBubble.tsx +291 -0
  105. package/template/src/atoms/Input.tsx +87 -0
  106. package/template/src/atoms/InviteInfo.tsx +166 -0
  107. package/template/src/atoms/LinkButton.tsx +28 -0
  108. package/template/src/atoms/OutlineButton.tsx +61 -0
  109. package/template/src/atoms/ParticipantsCount.tsx +74 -0
  110. package/template/src/atoms/Popup.tsx +147 -0
  111. package/template/src/atoms/PrimaryButton.tsx +51 -26
  112. package/template/src/atoms/RecordingInfo.tsx +52 -0
  113. package/template/src/atoms/SecondaryButton.tsx +8 -5
  114. package/template/src/atoms/Spacer.tsx +22 -0
  115. package/template/src/atoms/TertiaryButton.tsx +78 -0
  116. package/template/src/atoms/TextInput.tsx +12 -14
  117. package/template/src/atoms/Toggle.tsx +47 -0
  118. package/template/src/atoms/Toolbar.tsx +68 -0
  119. package/template/src/atoms/ToolbarItem.tsx +63 -0
  120. package/template/src/atoms/Tooltip.native.tsx +65 -0
  121. package/template/src/atoms/Tooltip.tsx +94 -0
  122. package/template/src/atoms/UserAvatar.tsx +60 -0
  123. package/template/src/components/Chat.tsx +164 -278
  124. package/template/src/components/ChatContext.ts +8 -1
  125. package/template/src/components/ColorConfigure.tsx +1 -1
  126. package/template/src/components/ColorContext.ts +1 -1
  127. package/template/src/components/CommonStyles.ts +44 -0
  128. package/template/src/components/Controls.tsx +331 -73
  129. package/template/src/components/{Controls.native.tsx → Controls1.native.tsx} +8 -6
  130. package/template/src/components/DeviceConfigure.tsx +511 -102
  131. package/template/src/components/DeviceContext.tsx +8 -4
  132. package/template/src/components/EventsConfigure.tsx +192 -10
  133. package/template/src/components/GraphQLProvider.tsx +1 -1
  134. package/template/src/components/GridVideo.tsx +60 -45
  135. package/template/src/components/HostControlView.tsx +114 -35
  136. package/template/src/components/Navbar.tsx +219 -437
  137. package/template/src/components/Navigation.tsx +15 -1
  138. package/template/src/components/NetworkQualityContext.tsx +22 -22
  139. package/template/src/components/ParticipantsView.tsx +178 -156
  140. package/template/src/components/PinnedVideo.tsx +206 -121
  141. package/template/src/components/Precall.native.tsx +358 -119
  142. package/template/src/components/Precall.tsx +272 -138
  143. package/template/src/components/RTMConfigure.tsx +66 -19
  144. package/template/src/components/Router.electron.ts +1 -0
  145. package/template/src/components/Router.native.ts +1 -0
  146. package/template/src/components/Router.sdk.ts +1 -0
  147. package/template/src/components/Router.ts +1 -0
  148. package/template/src/components/SdkApiContext.tsx +161 -0
  149. package/template/src/components/Settings.tsx +26 -95
  150. package/template/src/components/SettingsView.tsx +251 -56
  151. package/template/src/components/Share.tsx +305 -276
  152. package/template/src/components/StorageContext.tsx +30 -3
  153. package/template/src/components/ToastComponent.tsx +8 -0
  154. package/template/src/components/chat-messages/useChatMessages.tsx +97 -50
  155. package/template/src/components/chat-ui/useChatUIControls.tsx +76 -0
  156. package/template/src/components/common/Error.tsx +20 -6
  157. package/template/src/components/common/Logo.tsx +16 -15
  158. package/template/src/components/contexts/LiveStreamDataContext.tsx +16 -11
  159. package/template/src/components/contexts/VideoMeetingDataContext.tsx +41 -11
  160. package/template/src/components/contexts/WhiteboardContext.tsx +3 -3
  161. package/template/src/components/livestream/LiveStreamContext.tsx +284 -50
  162. package/template/src/components/livestream/Types.ts +39 -14
  163. package/template/src/components/livestream/index.ts +1 -0
  164. package/template/src/components/livestream/views/LiveStreamControls.tsx +9 -4
  165. package/template/src/components/participants/AllAudienceParticipants.tsx +102 -31
  166. package/template/src/components/participants/AllHostParticipants.tsx +106 -35
  167. package/template/src/components/participants/Participant.tsx +300 -0
  168. package/template/src/components/participants/ParticipantName.tsx +13 -7
  169. package/template/src/components/participants/ParticipantSectionTitle.tsx +35 -10
  170. package/template/src/components/participants/ScreenshareParticipants.tsx +144 -12
  171. package/template/src/components/participants/UserActionMenuOptions.tsx +396 -0
  172. package/template/src/components/popups/InvitePopup.tsx +115 -0
  173. package/template/src/components/popups/StopRecordingPopup.tsx +114 -0
  174. package/template/src/components/precall/LocalMute.tsx +84 -14
  175. package/template/src/components/precall/{LocalMute.native.tsx → LocalMute1.native.tsx} +21 -5
  176. package/template/src/components/precall/PermissionHelper.native.tsx +5 -0
  177. package/template/src/components/precall/PermissionHelper.tsx +126 -0
  178. package/template/src/components/precall/PreCallSettings.tsx +52 -0
  179. package/template/src/components/precall/VideoPreview.native.tsx +51 -6
  180. package/template/src/components/precall/VideoPreview.tsx +164 -8
  181. package/template/src/components/precall/joinCallBtn.native.tsx +2 -2
  182. package/template/src/components/precall/joinCallBtn.tsx +17 -4
  183. package/template/src/components/precall/meetingTitle.tsx +17 -14
  184. package/template/src/components/precall/selectDevice.tsx +1 -21
  185. package/template/src/components/precall/textInput.tsx +34 -6
  186. package/template/src/components/precall/usePreCall.tsx +39 -1
  187. package/template/src/components/{meeting-info/useMeetingInfo.tsx → room-info/useRoomInfo.tsx} +34 -10
  188. package/template/src/components/{meeting-info/useSetMeetingInfo.tsx → room-info/useSetRoomInfo.tsx} +12 -12
  189. package/template/src/components/styles.ts +42 -21
  190. package/template/src/components/useShareLink.tsx +19 -21
  191. package/template/src/components/useToast.tsx +41 -0
  192. package/template/src/components/useUserPreference.tsx +9 -6
  193. package/template/src/components/useVideoCall.tsx +84 -0
  194. package/template/src/language/default-labels/createScreenLabels.ts +3 -3
  195. package/template/src/language/default-labels/joinScreenLabels.ts +2 -2
  196. package/template/src/language/default-labels/precallScreenLabels.ts +3 -3
  197. package/template/src/language/default-labels/shareLinkScreenLabels.ts +5 -5
  198. package/template/src/language/default-labels/videoCallScreenLabels.ts +5 -5
  199. package/template/src/pages/Authenticate.tsx +5 -15
  200. package/template/src/pages/Create.tsx +304 -191
  201. package/template/src/pages/Endcall.tsx +148 -0
  202. package/template/src/pages/Join.tsx +96 -70
  203. package/template/src/pages/VideoCall.tsx +179 -69
  204. package/template/src/pages/video-call/ActionSheet.native.tsx +215 -0
  205. package/template/src/pages/video-call/ActionSheet.tsx +226 -0
  206. package/template/src/pages/video-call/ActionSheetContent.tsx +479 -0
  207. package/template/src/pages/video-call/ActionSheetHandle.tsx +38 -0
  208. package/template/src/pages/video-call/ActionSheetStyles.css +138 -0
  209. package/template/src/pages/video-call/DefaultLayouts.ts +6 -6
  210. package/template/src/pages/video-call/NameWithMicIcon.tsx +93 -49
  211. package/template/src/pages/video-call/RenderComponent.tsx +6 -30
  212. package/template/src/pages/video-call/SidePanelHeader.tsx +186 -0
  213. package/template/src/pages/video-call/VideoCallMobileView.tsx +138 -0
  214. package/template/src/pages/video-call/VideoCallScreen.native.tsx +37 -0
  215. package/template/src/pages/video-call/VideoCallScreen.tsx +109 -66
  216. package/template/src/pages/video-call/VideoComponent.tsx +20 -4
  217. package/template/src/pages/video-call/VideoRenderer.tsx +227 -61
  218. package/template/src/pages/video-call/index.ts +35 -7
  219. package/template/src/rtm/RTMEngine.ts +8 -0
  220. package/template/src/rtm-events/constants.ts +3 -1
  221. package/template/src/rtm-events-api/Events.ts +5 -4
  222. package/template/src/rtm-events-api/LocalEvents.ts +6 -0
  223. package/template/src/rtm-events-api/types.ts +5 -5
  224. package/template/src/subComponents/ChatBubble.tsx +125 -84
  225. package/template/src/subComponents/ChatContainer.tsx +280 -93
  226. package/template/src/subComponents/ChatInput.ios.tsx +175 -0
  227. package/template/src/subComponents/ChatInput.tsx +72 -115
  228. package/template/src/subComponents/Checkbox.native.tsx +16 -5
  229. package/template/src/subComponents/Checkbox.tsx +2 -2
  230. package/template/src/subComponents/CopyJoinInfo.tsx +36 -58
  231. package/template/src/subComponents/EndcallPopup.tsx +107 -0
  232. package/template/src/subComponents/FallbackLogo.tsx +122 -40
  233. package/template/src/subComponents/LanguageSelector.tsx +1 -1
  234. package/template/src/subComponents/LayoutIconButton.tsx +201 -0
  235. package/template/src/subComponents/LayoutIconDropdown.tsx +131 -134
  236. package/template/src/subComponents/{LayoutIconDropdown.native.tsx → LayoutIconDropdown1.native.tsx} +4 -18
  237. package/template/src/subComponents/LocalAudioMute.tsx +119 -27
  238. package/template/src/subComponents/LocalEndCall.tsx +73 -35
  239. package/template/src/subComponents/LocalSwitchCamera.tsx +19 -32
  240. package/template/src/subComponents/LocalVideoMute.tsx +117 -27
  241. package/template/src/subComponents/Logo.tsx +3 -4
  242. package/template/src/subComponents/LogoutButton.tsx +1 -1
  243. package/template/src/subComponents/NetworkQualityPill.tsx +66 -68
  244. package/template/src/subComponents/OpenInNativeButton.tsx +3 -3
  245. package/template/src/subComponents/Recording.tsx +28 -29
  246. package/template/src/subComponents/RemoteAudioMute.tsx +83 -29
  247. package/template/src/subComponents/RemoteEndCall.tsx +8 -5
  248. package/template/src/subComponents/RemoteMutePopup.tsx +193 -0
  249. package/template/src/subComponents/RemoteVideoMute.tsx +74 -21
  250. package/template/src/subComponents/RemoveMeetingPopup.tsx +109 -0
  251. package/template/src/subComponents/RemoveScreensharePopup.tsx +109 -0
  252. package/template/src/subComponents/ScreenShareNotice.tsx +83 -8
  253. package/template/src/subComponents/SelectDevice.tsx +404 -61
  254. package/template/src/subComponents/SelectDeviceSettings.backup.tsx +207 -0
  255. package/template/src/subComponents/SelectOAuth.tsx +9 -8
  256. package/template/src/subComponents/SidePanelButtons.ts +0 -3
  257. package/template/src/subComponents/SidePanelHeader.tsx +112 -0
  258. package/template/src/subComponents/ToastConfig.tsx +150 -10
  259. package/template/src/subComponents/chat/ChatParticipants.tsx +188 -79
  260. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +97 -34
  261. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +29 -33
  262. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +8 -8
  263. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +24 -11
  264. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +17 -10
  265. package/template/src/subComponents/recording/useRecording.tsx +81 -29
  266. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +52 -70
  267. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +23 -12
  268. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +44 -19
  269. package/template/src/theme/index.ts +46 -0
  270. package/template/src/utils/PlatformWrapper.tsx +21 -0
  271. package/template/src/utils/SdkEvents.ts +23 -14
  272. package/template/src/utils/SdkMethodEvents.ts +81 -0
  273. package/template/src/utils/common.tsx +155 -1
  274. package/template/src/utils/hexadecimalTransparency.ts +108 -0
  275. package/template/src/utils/index.tsx +19 -0
  276. package/template/src/utils/isMobileOrTablet.ts +7 -2
  277. package/template/src/utils/pendingStateUpdateHelper.ts +19 -0
  278. package/template/src/utils/useActiveSpeaker.ts +42 -0
  279. package/template/src/utils/{useCreateMeeting.ts → useCreateRoom.ts} +19 -14
  280. package/template/src/utils/{useButtonTemplate.tsx → useFocus.tsx} +19 -16
  281. package/template/src/utils/useGetMeetingPhrase.ts +10 -10
  282. package/template/src/utils/useIsAudioEnabled.ts +3 -3
  283. package/template/src/utils/useIsHandRaised.ts +13 -0
  284. package/template/src/utils/useIsPSTN.ts +3 -3
  285. package/template/src/utils/useIsVideoEnabled.ts +3 -3
  286. package/template/src/utils/{useJoinMeeting.ts → useJoinRoom.ts} +27 -21
  287. package/template/src/utils/useMutePSTN.ts +2 -2
  288. package/template/src/utils/useMuteToggleLocal.ts +58 -5
  289. package/template/src/utils/useRemoteEndCall.ts +4 -4
  290. package/template/src/utils/useRemoteEndScreenshare.ts +26 -0
  291. package/template/src/utils/useRemoteMute.ts +7 -7
  292. package/template/src/utils/useRemoteRequest.ts +84 -0
  293. package/template/src/utils/useSwitchCamera.native.tsx +25 -0
  294. package/template/src/utils/useSwitchCamera.tsx +19 -0
  295. package/template/src/utils/useToolbar.tsx +59 -0
  296. package/template/web/index.html +5 -0
  297. package/template/webpack.commons.js +13 -8
  298. package/template/webpack.rsdk.config.js +1 -2
  299. package/template/webpack.web.config.js +1 -0
  300. package/template/agora-rn-uikit/.git/HEAD +0 -1
  301. package/template/agora-rn-uikit/.git/config +0 -16
  302. package/template/agora-rn-uikit/.git/description +0 -1
  303. package/template/agora-rn-uikit/.git/hooks/applypatch-msg.sample +0 -15
  304. package/template/agora-rn-uikit/.git/hooks/commit-msg.sample +0 -24
  305. package/template/agora-rn-uikit/.git/hooks/fsmonitor-watchman.sample +0 -174
  306. package/template/agora-rn-uikit/.git/hooks/post-update.sample +0 -8
  307. package/template/agora-rn-uikit/.git/hooks/pre-applypatch.sample +0 -14
  308. package/template/agora-rn-uikit/.git/hooks/pre-commit.sample +0 -49
  309. package/template/agora-rn-uikit/.git/hooks/pre-merge-commit.sample +0 -13
  310. package/template/agora-rn-uikit/.git/hooks/pre-push.sample +0 -53
  311. package/template/agora-rn-uikit/.git/hooks/pre-rebase.sample +0 -169
  312. package/template/agora-rn-uikit/.git/hooks/pre-receive.sample +0 -24
  313. package/template/agora-rn-uikit/.git/hooks/prepare-commit-msg.sample +0 -42
  314. package/template/agora-rn-uikit/.git/hooks/push-to-checkout.sample +0 -78
  315. package/template/agora-rn-uikit/.git/hooks/update.sample +0 -128
  316. package/template/agora-rn-uikit/.git/index +0 -0
  317. package/template/agora-rn-uikit/.git/info/exclude +0 -6
  318. package/template/agora-rn-uikit/.git/logs/HEAD +0 -2
  319. package/template/agora-rn-uikit/.git/logs/refs/heads/master +0 -1
  320. package/template/agora-rn-uikit/.git/logs/refs/heads/release/fpe-1.0.1 +0 -1
  321. package/template/agora-rn-uikit/.git/logs/refs/remotes/origin/HEAD +0 -1
  322. package/template/agora-rn-uikit/.git/objects/pack/pack-baa9cf4109c3e8528f39535764621cee252b2b77.idx +0 -0
  323. package/template/agora-rn-uikit/.git/objects/pack/pack-baa9cf4109c3e8528f39535764621cee252b2b77.pack +0 -0
  324. package/template/agora-rn-uikit/.git/packed-refs +0 -49
  325. package/template/agora-rn-uikit/.git/refs/heads/master +0 -1
  326. package/template/agora-rn-uikit/.git/refs/heads/release/fpe-1.0.1 +0 -1
  327. package/template/agora-rn-uikit/.git/refs/remotes/origin/HEAD +0 -1
  328. package/template/agora-rn-uikit/.gitignore +0 -63
  329. package/template/agora-rn-uikit/package-lock.json +0 -7612
  330. package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +0 -10
  331. package/template/package-lock.json +0 -22543
  332. package/template/react-native-toast-message/.gitignore +0 -5
  333. package/template/react-native-toast-message/.npmignore +0 -5
  334. package/template/react-native-toast-message/package-lock.json +0 -10553
  335. package/template/src/.DS_Store +0 -0
  336. package/template/src/assets/icons.ts +0 -102
  337. package/template/src/components/chat-ui/useChatUIControl.tsx +0 -69
  338. package/template/src/components/participants/MeParticipant.tsx +0 -38
  339. package/template/src/components/participants/RemoteParticipants.tsx +0 -71
  340. package/template/src/pages/video-call/CustomUserContextHolder.tsx +0 -20
  341. package/template/src/subComponents/.DS_Store +0 -0
@@ -9,8 +9,8 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import React, {useState, useContext} from 'react';
13
- import {View, Dimensions, StyleSheet} from 'react-native';
12
+ import React, {useState, useContext, useEffect, useRef} from 'react';
13
+ import {View, StyleSheet, Text, useWindowDimensions} from 'react-native';
14
14
  import {PropsContext} from '../../agora-rn-uikit';
15
15
  import LocalAudioMute, {
16
16
  LocalAudioMuteProps,
@@ -25,112 +25,370 @@ import LocalSwitchCamera, {
25
25
  import ScreenshareButton, {
26
26
  ScreenshareButtonProps,
27
27
  } from '../subComponents/screenshare/ScreenshareButton';
28
- import {controlsHolder} from '../../theme.json';
29
28
  import isMobileOrTablet from '../utils/isMobileOrTablet';
30
29
  import {ClientRole} from '../../agora-rn-uikit';
31
30
  import LiveStreamControls, {
32
31
  LiveStreamControlsProps,
33
32
  } from './livestream/views/LiveStreamControls';
34
- import {isWebInternal} from '../utils/common';
35
- import {useMeetingInfo} from './meeting-info/useMeetingInfo';
33
+ import {
34
+ BREAKPOINTS,
35
+ calculatePosition,
36
+ isWebInternal,
37
+ useIsDesktop,
38
+ } from '../utils/common';
39
+ import {useRoomInfo} from './room-info/useRoomInfo';
36
40
  import LocalEndcall, {LocalEndcallProps} from '../subComponents/LocalEndCall';
41
+ import Spacer from '../atoms/Spacer';
42
+ import LayoutIconButton from '../subComponents/LayoutIconButton';
43
+ import CopyJoinInfo from '../subComponents/CopyJoinInfo';
44
+ import hexadecimalTransparency from '../utils/hexadecimalTransparency';
45
+ import IconButton from '../atoms/IconButton';
46
+ import ActionMenu, {ActionMenuItem} from '../atoms/ActionMenu';
47
+ import useLayoutsData from '../pages/video-call/useLayoutsData';
48
+ import {
49
+ ChatType,
50
+ SidePanelType,
51
+ useChatUIControls,
52
+ useLayout,
53
+ useRecording,
54
+ useSidePanel,
55
+ } from 'customization-api';
56
+ import {useVideoCall} from './useVideoCall';
57
+ import {useScreenshare} from '../subComponents/screenshare/useScreenshare';
58
+ import LayoutIconDropdown from '../subComponents/LayoutIconDropdown';
59
+ import Toolbar from '../atoms/Toolbar';
60
+ import {ToolbarPosition, useToolbar} from '../utils/useToolbar';
61
+ import ToolbarItem from '../atoms/ToolbarItem';
37
62
 
38
- const Controls = () => {
63
+ const MoreButton = () => {
39
64
  const {rtcProps} = useContext(PropsContext);
65
+ const [actionMenuVisible, setActionMenuVisible] = React.useState(false);
66
+ const [isHovered, setIsHovered] = useState(false);
67
+ const [isHoveredOnModal, setIsHoveredOnModal] = useState(false);
68
+ const moreBtnRef = useRef(null);
69
+ const {width: globalWidth, height: globalHeight} = useWindowDimensions();
70
+ const layouts = useLayoutsData();
71
+ const {currentLayout, setLayout} = useLayout();
72
+ const layout = layouts.findIndex((item) => item.name === currentLayout);
73
+ const {setSidePanel, sidePanel} = useSidePanel();
74
+ const {
75
+ data: {isHost},
76
+ } = useRoomInfo();
77
+ const {
78
+ showLayoutOption,
79
+ setShowInvitePopup,
80
+ setShowStopRecordingPopup,
81
+ setShowLayoutOption,
82
+ } = useVideoCall();
83
+ const {isScreenshareActive, startUserScreenshare, stopUserScreenShare} =
84
+ useScreenshare();
85
+ const {isRecordingActive, startRecording, inProgress} = useRecording();
86
+ const {setChatType} = useChatUIControls();
87
+ const actionMenuitems: ActionMenuItem[] = [];
88
+
89
+ if (globalWidth <= BREAKPOINTS.sm) {
90
+ actionMenuitems.push({
91
+ icon: 'participants',
92
+ iconColor: $config.SECONDARY_ACTION_COLOR,
93
+ textColor: $config.FONT_COLOR,
94
+ title: 'People',
95
+ callback: () => {
96
+ setActionMenuVisible(false);
97
+ setSidePanel(SidePanelType.Participants);
98
+ },
99
+ });
100
+ actionMenuitems.push({
101
+ icon: 'chat-nav',
102
+ iconColor: $config.SECONDARY_ACTION_COLOR,
103
+ textColor: $config.FONT_COLOR,
104
+ title: 'Chat',
105
+ callback: () => {
106
+ setActionMenuVisible(false);
107
+ setChatType(ChatType.Group);
108
+ setSidePanel(SidePanelType.Chat);
109
+ },
110
+ });
111
+
112
+ if ($config.SCREEN_SHARING) {
113
+ if (
114
+ !(
115
+ rtcProps.role == ClientRole.Audience &&
116
+ $config.EVENT_MODE &&
117
+ !$config.RAISE_HAND
118
+ )
119
+ ) {
120
+ actionMenuitems.push({
121
+ disabled:
122
+ rtcProps.role == ClientRole.Audience &&
123
+ $config.EVENT_MODE &&
124
+ $config.RAISE_HAND &&
125
+ !isHost,
126
+ icon: isScreenshareActive ? 'stop-screen-share' : 'screen-share',
127
+ iconColor: isScreenshareActive
128
+ ? $config.SEMANTIC_ERROR
129
+ : $config.SECONDARY_ACTION_COLOR,
130
+ textColor: isScreenshareActive
131
+ ? $config.SEMANTIC_ERROR
132
+ : $config.FONT_COLOR,
133
+ title: isScreenshareActive ? 'Stop Share' : 'Share',
134
+ callback: () => {
135
+ setActionMenuVisible(false);
136
+ isScreenshareActive
137
+ ? stopUserScreenShare()
138
+ : startUserScreenshare();
139
+ },
140
+ });
141
+ }
142
+ }
143
+ if (isHost && $config.CLOUD_RECORDING) {
144
+ actionMenuitems.push({
145
+ disabled: inProgress,
146
+ icon: isRecordingActive ? 'stop-recording' : 'recording',
147
+ iconColor: isRecordingActive
148
+ ? $config.SEMANTIC_ERROR
149
+ : $config.SECONDARY_ACTION_COLOR,
150
+ textColor: isRecordingActive
151
+ ? $config.SEMANTIC_ERROR
152
+ : $config.FONT_COLOR,
153
+ title: isRecordingActive ? 'Stop Recording' : 'Record',
154
+ callback: () => {
155
+ setActionMenuVisible(false);
156
+ if (!isRecordingActive) {
157
+ startRecording();
158
+ } else {
159
+ setShowStopRecordingPopup(true);
160
+ }
161
+ },
162
+ });
163
+ }
164
+ }
40
165
 
41
- let onLayout = (e: any) => {
42
- setDim([e.nativeEvent.layout.width, e.nativeEvent.layout.height]);
43
- };
44
- const [dim, setDim] = useState([
45
- Dimensions.get('window').width,
46
- Dimensions.get('window').height,
47
- Dimensions.get('window').width > Dimensions.get('window').height,
48
- ]);
49
- const isDesktop = dim[0] > 1224;
166
+ if (globalWidth <= BREAKPOINTS.md) {
167
+ actionMenuitems.push({
168
+ icon: layouts[layout]?.iconName,
169
+ iconColor: $config.SECONDARY_ACTION_COLOR,
170
+ textColor: $config.FONT_COLOR,
171
+ title: 'Layout',
172
+ callback: () => {
173
+ //setShowLayoutOption(true);
174
+ },
175
+ onHoverCallback: (isHovered) => {
176
+ setShowLayoutOption(isHovered);
177
+ },
178
+ onHoverContent: (
179
+ <LayoutIconDropdown
180
+ onHoverPlaceHolder="vertical"
181
+ setShowDropdown={() => {}}
182
+ showDropdown={true}
183
+ modalPosition={
184
+ globalWidth <= BREAKPOINTS.sm
185
+ ? {bottom: 65, left: -150}
186
+ : {bottom: 20, left: -150}
187
+ }
188
+ caretPosition={{bottom: 45, right: -10}}
189
+ />
190
+ ),
191
+ });
192
+ actionMenuitems.push({
193
+ icon: 'share',
194
+ iconColor: $config.SECONDARY_ACTION_COLOR,
195
+ textColor: $config.FONT_COLOR,
196
+ title: 'Invite',
197
+ callback: () => {
198
+ setActionMenuVisible(false);
199
+ setShowInvitePopup(true);
200
+ },
201
+ });
202
+ }
203
+
204
+ if (globalWidth <= BREAKPOINTS.sm) {
205
+ actionMenuitems.push({
206
+ icon: 'settings',
207
+ iconColor: $config.SECONDARY_ACTION_COLOR,
208
+ textColor: $config.FONT_COLOR,
209
+ title: 'Settings',
210
+ callback: () => {
211
+ setActionMenuVisible(false);
212
+ setSidePanel(SidePanelType.Settings);
213
+ },
214
+ });
215
+ }
216
+
217
+ useEffect(() => {
218
+ if (isHovered) {
219
+ setActionMenuVisible(true);
220
+ }
221
+ }, [isHovered]);
222
+
223
+ useEffect(() => {
224
+ //hide action menu when user change layout
225
+ setActionMenuVisible(false);
226
+ }, [currentLayout]);
227
+
228
+ return (
229
+ <>
230
+ <ActionMenu
231
+ containerStyle={{width: 180}}
232
+ hoverMode={true}
233
+ onHover={(isVisible) => setIsHoveredOnModal(isVisible)}
234
+ from={'control-bar'}
235
+ actionMenuVisible={(isHovered || isHoveredOnModal) && actionMenuVisible}
236
+ setActionMenuVisible={setActionMenuVisible}
237
+ modalPosition={{
238
+ bottom: 8,
239
+ left: 0,
240
+ }}
241
+ items={actionMenuitems}
242
+ />
243
+ <div
244
+ onMouseEnter={() => {
245
+ setIsHovered(true);
246
+ }}
247
+ onMouseLeave={() => {
248
+ setIsHovered(false);
249
+ }}>
250
+ {/** placeholder to hovering */}
251
+ <View
252
+ style={{
253
+ position: 'absolute',
254
+ top: -20,
255
+ zIndex: -1,
256
+ height: '50%',
257
+ width: '100%',
258
+ backgroundColor: 'transparent',
259
+ }}
260
+ />
261
+ <IconButton
262
+ setRef={(ref) => {
263
+ moreBtnRef.current = ref;
264
+ }}
265
+ onPress={() => {
266
+ //setActionMenuVisible(true);
267
+ }}
268
+ iconProps={{
269
+ name: 'more-menu',
270
+ tintColor: $config.SECONDARY_ACTION_COLOR,
271
+ }}
272
+ btnTextProps={{
273
+ text: $config.ICON_TEXT ? 'More' : '',
274
+ textColor: $config.FONT_COLOR,
275
+ }}
276
+ />
277
+ </div>
278
+ </>
279
+ );
280
+ };
281
+ const Controls = () => {
282
+ const {rtcProps} = useContext(PropsContext);
283
+ const isDesktop = useIsDesktop();
50
284
  const {
51
285
  data: {isHost},
52
- } = useMeetingInfo();
286
+ } = useRoomInfo();
287
+ const {isHorizontal} = useToolbar();
288
+ const {width} = useWindowDimensions();
53
289
  return (
54
- <View
55
- style={[
56
- style.controlsHolder,
57
- {
58
- paddingHorizontal: isDesktop ? '25%' : '1%',
59
- backgroundColor: $config.SECONDARY_FONT_COLOR + 80,
60
- },
61
- ]}
62
- onLayout={onLayout}>
63
- {$config.EVENT_MODE && rtcProps.role == ClientRole.Audience ? (
64
- <LiveStreamControls showControls={true} />
65
- ) : (
290
+ <Toolbar>
291
+ {width >= BREAKPOINTS.md && (
292
+ <View
293
+ style={[
294
+ style.leftContent,
295
+ isHorizontal ? {flexDirection: 'row'} : {flexDirection: 'column'},
296
+ ]}>
297
+ <ToolbarItem testID="layout-btn" collapsable={false}>
298
+ {/**
299
+ * .measure returns undefined on Android unless collapsable=false or onLayout are specified
300
+ * so added collapsable property
301
+ * https://github.com/facebook/react-native/issues/29712
302
+ * */}
303
+ <LayoutIconButton />
304
+ </ToolbarItem>
305
+ <ToolbarItem testID="invite-btn">
306
+ <CopyJoinInfo />
307
+ </ToolbarItem>
308
+ </View>
309
+ )}
310
+ <View
311
+ style={[
312
+ style.centerContent,
313
+ isHorizontal ? {flexDirection: 'row'} : {flexDirection: 'column'},
314
+ ]}>
315
+ {$config.EVENT_MODE && rtcProps.role == ClientRole.Audience ? (
316
+ <LiveStreamControls
317
+ showControls={true}
318
+ isDesktop={isDesktop('toolbar')}
319
+ />
320
+ ) : (
321
+ <></>
322
+ )}
66
323
  <>
67
324
  {/**
68
325
  * In event mode when raise hand feature is active
69
326
  * and audience is promoted to host, the audience can also
70
327
  * demote himself
71
328
  */}
72
- {$config.EVENT_MODE && (
329
+ {$config.EVENT_MODE ? (
73
330
  <LiveStreamControls
331
+ isDesktop={isDesktop('toolbar')}
74
332
  showControls={rtcProps?.role == ClientRole.Broadcaster && !isHost}
75
333
  />
334
+ ) : (
335
+ <></>
76
336
  )}
77
- <View style={{alignSelf: 'center'}}>
78
- <LocalAudioMute />
79
- </View>
337
+ <ToolbarItem testID="localAudio-btn">
338
+ <LocalAudioMute showToolTip={true} />
339
+ </ToolbarItem>
80
340
  {!$config.AUDIO_ROOM && (
81
- <View style={{alignSelf: 'center'}}>
82
- <LocalVideoMute />
83
- </View>
341
+ <ToolbarItem testID="localVideo-btn">
342
+ <LocalVideoMute showToolTip={true} />
343
+ </ToolbarItem>
84
344
  )}
85
345
  {!$config.AUDIO_ROOM && isMobileOrTablet() && (
86
- <View style={{alignSelf: 'center'}}>
346
+ <ToolbarItem testID="switchCamera-btn">
87
347
  <LocalSwitchCamera />
88
- </View>
89
- )}
90
- {$config.SCREEN_SHARING && !isMobileOrTablet() && (
91
- <View style={{alignSelf: 'center'}}>
92
- <ScreenshareButton />
93
- </View>
348
+ </ToolbarItem>
94
349
  )}
95
- {isHost && $config.CLOUD_RECORDING && (
96
- <View style={{alignSelf: 'center'}}>
350
+ {width > BREAKPOINTS.sm &&
351
+ $config.SCREEN_SHARING &&
352
+ !isMobileOrTablet() && (
353
+ <ToolbarItem testID="screenShare-btn">
354
+ <ScreenshareButton />
355
+ </ToolbarItem>
356
+ )}
357
+ {width > BREAKPOINTS.sm && isHost && $config.CLOUD_RECORDING && (
358
+ <ToolbarItem testID="recording-btn">
97
359
  <Recording />
98
- </View>
360
+ </ToolbarItem>
99
361
  )}
100
362
  </>
101
- )}
102
- <View style={{alignSelf: 'center'}}>
103
- <LocalEndcall />
363
+ {width < BREAKPOINTS.md && (
364
+ <ToolbarItem testID="more-btn">
365
+ <MoreButton />
366
+ </ToolbarItem>
367
+ )}
368
+ <ToolbarItem testID="endCall-btn">
369
+ <LocalEndcall />
370
+ </ToolbarItem>
104
371
  </View>
105
- </View>
372
+ {width >= BREAKPOINTS.md && <View style={style.rightContent}></View>}
373
+ </Toolbar>
106
374
  );
107
375
  };
108
376
 
109
- type ControlsComponentsArrayProps = [
110
- (props: LocalAudioMuteProps) => JSX.Element,
111
- (props: LocalVideoMuteProps) => JSX.Element,
112
- (props: LocalSwitchCameraProps) => JSX.Element,
113
- (props: ScreenshareButtonProps) => JSX.Element,
114
- (props: RecordingButtonProps) => JSX.Element,
115
- (props: LocalEndcallProps) => JSX.Element,
116
- (props: LiveStreamControlsProps) => JSX.Element,
117
- ];
118
-
119
- export const ControlsComponentsArray: ControlsComponentsArrayProps = [
120
- LocalAudioMute,
121
- LocalVideoMute,
122
- LocalSwitchCamera,
123
- ScreenshareButton,
124
- Recording,
125
- LocalEndcall,
126
- LiveStreamControls,
127
- ];
128
-
129
377
  const style = StyleSheet.create({
130
- // @ts-ignore
131
- controlsHolder: {
132
- flex: isWebInternal() ? 1.3 : 1.6,
133
- ...controlsHolder,
378
+ leftContent: {
379
+ flex: 1,
380
+
381
+ justifyContent: 'flex-start',
382
+ alignItems: 'center',
383
+ },
384
+ centerContent: {
385
+ zIndex: 2,
386
+ flex: 1,
387
+ justifyContent: 'center',
388
+ alignItems: 'center',
389
+ },
390
+ rightContent: {
391
+ flex: 1,
134
392
  },
135
393
  });
136
394
 
@@ -22,7 +22,7 @@ import Recording, {RecordingButtonProps} from '../subComponents/Recording';
22
22
  import LiveStreamControls, {
23
23
  LiveStreamControlsProps,
24
24
  } from './livestream/views/LiveStreamControls';
25
- import {useMeetingInfo} from './meeting-info/useMeetingInfo';
25
+ import {useRoomInfo} from './room-info/useRoomInfo';
26
26
  import ScreenshareButton, {
27
27
  ScreenshareButtonProps,
28
28
  } from '../subComponents/screenshare/ScreenshareButton';
@@ -30,11 +30,12 @@ import LocalEndcall, {LocalEndcallProps} from '../subComponents/LocalEndCall';
30
30
  import LocalSwitchCamera, {
31
31
  LocalSwitchCameraProps,
32
32
  } from '../subComponents/LocalSwitchCamera';
33
+ import hexadecimalTransparency from '../utils/hexadecimalTransparency';
33
34
 
34
35
  const Controls = () => {
35
36
  const {
36
37
  data: {isHost},
37
- } = useMeetingInfo();
38
+ } = useRoomInfo();
38
39
  const {rtcProps} = useContext(PropsContext);
39
40
 
40
41
  return (
@@ -100,7 +101,8 @@ const style = StyleSheet.create({
100
101
  bottomBar: {
101
102
  flex: 1,
102
103
  paddingHorizontal: '1%',
103
- backgroundColor: $config.SECONDARY_FONT_COLOR + '80',
104
+ backgroundColor:
105
+ $config.SECONDARY_ACTION_COLOR + hexadecimalTransparency['80%'],
104
106
  flexDirection: 'row',
105
107
  justifyContent: 'space-evenly',
106
108
  position: 'relative',
@@ -109,9 +111,9 @@ const style = StyleSheet.create({
109
111
  bottom: 0,
110
112
  },
111
113
  localButton: {
112
- backgroundColor: $config.SECONDARY_FONT_COLOR,
114
+ backgroundColor: $config.SECONDARY_ACTION_COLOR,
113
115
  borderRadius: 2,
114
- borderColor: $config.PRIMARY_COLOR,
116
+ borderColor: $config.PRIMARY_ACTION_BRAND_COLOR,
115
117
  width: 40,
116
118
  height: 40,
117
119
  display: 'flex',
@@ -122,7 +124,7 @@ const style = StyleSheet.create({
122
124
  buttonIcon: {
123
125
  width: 35,
124
126
  height: 35,
125
- tintColor: $config.PRIMARY_COLOR,
127
+ tintColor: $config.PRIMARY_ACTION_BRAND_COLOR,
126
128
  },
127
129
  });
128
130