agora-appbuilder-core 3.0.9 → 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 (305) hide show
  1. package/Readme.md +6 -0
  2. package/package.json +2 -2
  3. package/template/_package-lock.json +5871 -4728
  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 -106
  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/src/Contexts/RenderContext.tsx +0 -10
  301. package/template/src/assets/icons.ts +0 -102
  302. package/template/src/components/chat-ui/useChatUIControl.tsx +0 -69
  303. package/template/src/components/participants/MeParticipant.tsx +0 -38
  304. package/template/src/components/participants/RemoteParticipants.tsx +0 -71
  305. package/template/src/pages/video-call/CustomUserContextHolder.tsx +0 -20
@@ -4,15 +4,15 @@ buildscript {
4
4
  ext {
5
5
  buildToolsVersion = "29.0.2"
6
6
  minSdkVersion = 21
7
- compileSdkVersion = 29
8
- targetSdkVersion = 29
7
+ compileSdkVersion = 33
8
+ targetSdkVersion = 33
9
9
  }
10
10
  repositories {
11
11
  google()
12
12
  jcenter()
13
13
  }
14
14
  dependencies {
15
- classpath("com.android.tools.build:gradle:3.5.3")
15
+ classpath("com.android.tools.build:gradle:4.1.2")
16
16
  // NOTE: Do not place your application dependencies here; they belong
17
17
  // in the individual module build.gradle files
18
18
  }
@@ -29,5 +29,6 @@ module.exports = {
29
29
  },
30
30
  },
31
31
  ],
32
+ 'react-native-reanimated/plugin'
32
33
  ],
33
34
  };
@@ -23,6 +23,8 @@ import AgoraRTC, {
23
23
  EncryptionMode,
24
24
  ILocalTrack,
25
25
  ClientRoleOptions,
26
+ CameraVideoTrackInitConfig,
27
+ MicrophoneAudioTrackInitConfig,
26
28
  } from 'agora-rtc-sdk-ng';
27
29
  import type {
28
30
  RtcEngineEvents,
@@ -46,9 +48,12 @@ type callbackType = (uid?: UID) => void;
46
48
  declare global {
47
49
  interface Window {
48
50
  engine: RtcEngine;
51
+ AgoraRTC: typeof AgoraRTC;
49
52
  }
50
53
  }
51
54
 
55
+ window.AgoraRTC = AgoraRTC;
56
+
52
57
  export enum AREAS {
53
58
  /**
54
59
  * China.
@@ -166,6 +171,7 @@ if ($config.LOG_ENABLED) {
166
171
  }
167
172
 
168
173
  export default class RtcEngine {
174
+ private activeSpeakerUid: number;
169
175
  public appId: string;
170
176
  // public AgoraRTC: any;
171
177
  public client: any | IAgoraRTCClient;
@@ -178,6 +184,7 @@ export default class RtcEngine {
178
184
  ['RemoteAudioStateChanged', () => null],
179
185
  ['RemoteVideoStateChanged', () => null],
180
186
  ['NetworkQuality', () => null],
187
+ ['ActiveSpeaker', () => null],
181
188
  ]);
182
189
  public localStream: LocalStream = {};
183
190
  public screenStream: ScreenStream = {};
@@ -185,15 +192,16 @@ export default class RtcEngine {
185
192
  private inScreenshare: Boolean = false;
186
193
  private videoProfile: VideoProfile = '480p_9';
187
194
  private isPublished = false;
188
- private isAudioEnabled = true;
189
- private isVideoEnabled = true;
195
+ private isAudioEnabled = false;
196
+ private isVideoEnabled = false;
190
197
  private isAudioPublished = false;
191
198
  private isVideoPublished = false;
192
199
  private isJoined = false;
193
- private deviceId = '';
200
+ private videoDeviceId = undefined;
201
+ private audioDeviceId = undefined;
194
202
  private muteLocalVideoMutex = false;
195
203
  private muteLocalAudioMutex = false;
196
-
204
+ private speakerDeviceId = '';
197
205
  // Create channel profile and set it here
198
206
 
199
207
  // Create channel profile and set it here
@@ -214,9 +222,17 @@ export default class RtcEngine {
214
222
  }
215
223
 
216
224
  async enableAudio(): Promise<void> {
225
+ const audioConfig: MicrophoneAudioTrackInitConfig = {
226
+ bypassWebAudio: Platform.OS == 'web' && isMobileOrTablet(),
227
+ // microphoneId: this.audioDeviceId,
228
+ };
217
229
  try {
218
- let localAudio = await AgoraRTC.createMicrophoneAudioTrack({});
230
+ let localAudio = await AgoraRTC.createMicrophoneAudioTrack(audioConfig);
219
231
  this.localStream.audio = localAudio;
232
+ this.audioDeviceId = localAudio
233
+ ?.getMediaStreamTrack()
234
+ .getSettings().deviceId;
235
+ this.isAudioEnabled = true;
220
236
  } catch (e) {
221
237
  let audioError = e;
222
238
  e.status = {audioError};
@@ -234,15 +250,30 @@ export default class RtcEngine {
234
250
  * The Web SDK directly publishes the local audio stream without processing it through WebAudio.
235
251
  */
236
252
 
237
- const audioConfig =
238
- Platform.OS == 'web' && isMobileOrTablet() ? {bypassWebAudio: true} : {};
253
+ const audioConfig: MicrophoneAudioTrackInitConfig = {
254
+ bypassWebAudio: Platform.OS == 'web' && isMobileOrTablet(),
255
+ // microphoneId: this.audioDeviceId,
256
+ };
257
+ const videoConfig: CameraVideoTrackInitConfig = {
258
+ encoderConfig: this.videoProfile,
259
+ // cameraId: this.videoDeviceId,
260
+ };
239
261
  try {
240
262
  let [localAudio, localVideo] =
241
- await AgoraRTC.createMicrophoneAndCameraTracks(audioConfig, {
242
- encoderConfig: this.videoProfile,
243
- });
263
+ await AgoraRTC.createMicrophoneAndCameraTracks(
264
+ audioConfig,
265
+ videoConfig,
266
+ );
244
267
  this.localStream.audio = localAudio;
245
268
  this.localStream.video = localVideo;
269
+ this.audioDeviceId = localAudio
270
+ ?.getMediaStreamTrack()
271
+ .getSettings().deviceId;
272
+ this.videoDeviceId = localVideo
273
+ ?.getMediaStreamTrack()
274
+ .getSettings().deviceId;
275
+ this.isVideoEnabled = true;
276
+ this.isAudioEnabled = true;
246
277
  } catch (e) {
247
278
  let audioError = false;
248
279
  let videoError = false;
@@ -250,14 +281,20 @@ export default class RtcEngine {
250
281
  let localAudio = await AgoraRTC.createMicrophoneAudioTrack(audioConfig);
251
282
 
252
283
  this.localStream.audio = localAudio;
284
+ this.audioDeviceId = localAudio
285
+ ?.getMediaStreamTrack()
286
+ .getSettings().deviceId;
287
+ this.isAudioEnabled = true;
253
288
  } catch (error) {
254
289
  audioError = error;
255
290
  }
256
291
  try {
257
- let localVideo = await AgoraRTC.createCameraVideoTrack({
258
- encoderConfig: this.videoProfile,
259
- });
292
+ let localVideo = await AgoraRTC.createCameraVideoTrack(videoConfig);
260
293
  this.localStream.video = localVideo;
294
+ this.videoDeviceId = localVideo
295
+ ?.getMediaStreamTrack()
296
+ .getSettings().deviceId;
297
+ this.isVideoEnabled = true;
261
298
  } catch (error) {
262
299
  videoError = error;
263
300
  }
@@ -271,6 +308,11 @@ export default class RtcEngine {
271
308
  }
272
309
  }
273
310
 
311
+ async enableAudioVolumeIndication(interval, smooth, isLocal) {
312
+ AgoraRTC.setParameter('AUDIO_VOLUME_INDICATION_INTERVAL', interval);
313
+ this.client.enableAudioVolumeIndicator();
314
+ }
315
+
274
316
  async publish() {
275
317
  if (this.localStream.audio || this.localStream.video) {
276
318
  try {
@@ -360,6 +402,12 @@ export default class RtcEngine {
360
402
  ...this.remoteStreams.get(user.uid),
361
403
  audio: audioTrack,
362
404
  });
405
+ if (this.speakerDeviceId) {
406
+ // setting sepeaker for all remote stream (newly joining user)
407
+ this.remoteStreams
408
+ .get(user.uid)
409
+ ?.audio?.setPlaybackDevice(this.speakerDeviceId);
410
+ }
363
411
  (this.eventsMap.get('RemoteAudioStateChanged') as callbackType)(
364
412
  user.uid,
365
413
  2,
@@ -404,6 +452,36 @@ export default class RtcEngine {
404
452
  }
405
453
  });
406
454
 
455
+ this.client.on('volume-indicator', (volumes) => {
456
+ const highestvolumeObj = volumes.reduce(
457
+ (highestVolume, volume, index) => {
458
+ if (highestVolume === null) {
459
+ return volume;
460
+ } else {
461
+ if (volume.level > highestVolume.level) {
462
+ return volume;
463
+ }
464
+ return highestVolume;
465
+ }
466
+ // console.log(`${index} UID ${volume.uid} Level ${volume.level}`);
467
+ },
468
+ null,
469
+ );
470
+ const activeSpeakerUid =
471
+ highestvolumeObj && highestvolumeObj?.level > 0 && highestvolumeObj?.uid
472
+ ? highestvolumeObj.uid
473
+ : undefined;
474
+
475
+ //To avoid infinite calling dispatch checking if condition.
476
+ if (this.activeSpeakerUid !== activeSpeakerUid) {
477
+ const activeSpeakerCallBack = this.eventsMap.get(
478
+ 'ActiveSpeaker',
479
+ ) as callbackType;
480
+ activeSpeakerCallBack(activeSpeakerUid);
481
+ this.activeSpeakerUid = activeSpeakerUid;
482
+ }
483
+ });
484
+
407
485
  // this.client.on('stream-fallback', (evt))
408
486
  this.client.on('stream-type-changed', function (uid, streamType) {
409
487
  console.log('[fallback]: ', uid, streamType);
@@ -468,7 +546,8 @@ export default class RtcEngine {
468
546
  event === 'ScreenshareStopped' ||
469
547
  event === 'RemoteAudioStateChanged' ||
470
548
  event === 'RemoteVideoStateChanged' ||
471
- event === 'NetworkQuality'
549
+ event === 'NetworkQuality' ||
550
+ event === 'ActiveSpeaker'
472
551
  ) {
473
552
  this.eventsMap.set(event, listener as callbackType);
474
553
  }
@@ -616,7 +695,7 @@ export default class RtcEngine {
616
695
  async changeCamera(cameraId, callback, error): Promise<void> {
617
696
  try {
618
697
  await this.localStream.video?.setDevice(cameraId);
619
- this.deviceId = cameraId;
698
+ this.videoDeviceId = cameraId;
620
699
  callback(cameraId);
621
700
  } catch (e) {
622
701
  error(e);
@@ -628,9 +707,9 @@ export default class RtcEngine {
628
707
  const devices = await AgoraRTC.getDevices(true);
629
708
  for (let i = 0; i < devices.length; i++) {
630
709
  let d = devices[i];
631
- if (d.kind === 'videoinput' && d.deviceId !== this.deviceId) {
710
+ if (d.kind === 'videoinput' && d.deviceId !== this.videoDeviceId) {
632
711
  await this.localStream.video?.setDevice(d.deviceId);
633
- this.deviceId = d.deviceId;
712
+ this.videoDeviceId = d.deviceId;
634
713
  break;
635
714
  }
636
715
  }
@@ -642,12 +721,26 @@ export default class RtcEngine {
642
721
  async changeMic(micId, callback, error) {
643
722
  try {
644
723
  await this.localStream.audio?.setDevice(micId);
724
+ this.audioDeviceId = micId;
645
725
  callback(micId);
646
726
  } catch (e) {
647
727
  error(e);
648
728
  }
649
729
  }
650
730
 
731
+ async changeSpeaker(speakerId, callback, error) {
732
+ try {
733
+ this.speakerDeviceId = speakerId;
734
+ // setting sepeaker for all remote stream (previously joined users)
735
+ this.remoteStreams?.forEach((stream, uid, map) => {
736
+ stream?.audio?.setPlaybackDevice(speakerId);
737
+ });
738
+ callback(speakerId);
739
+ } catch (e) {
740
+ error(e);
741
+ }
742
+ }
743
+
651
744
  async enableDualStreamMode(enable: boolean) {
652
745
  return this.client[enable ? 'enableDualStream' : 'disableDualStream']();
653
746
  // enable
@@ -1,22 +1,18 @@
1
1
  //hooks used for create/join meeting
2
- export {default as useCreateMeeting} from '../src/utils/useCreateMeeting';
3
- export {default as useJoinMeeting} from '../src/utils/useJoinMeeting';
4
-
5
- //mute local audio state
6
- export {
7
- MUTE_LOCAL_TYPE,
8
- default as useMuteToggleLocal,
9
- } from '../src/utils/useMuteToggleLocal';
2
+ export {default as useCreateRoom} from '../src/utils/useCreateRoom';
3
+ export {default as useJoinRoom} from '../src/utils/useJoinRoom';
10
4
 
11
5
  //remove remote user from the call
12
6
  export {default as useRemoteEndcall} from '../src/utils/useRemoteEndCall';
13
-
14
- //mute remote user audio/video
15
- export {
16
- default as useRemoteMute,
17
- MUTE_REMOTE_TYPE,
18
- } from '../src/utils/useRemoteMute';
7
+ //switch camera
8
+ export {default as useSwitchCamera} from '../src/utils/useSwitchCamera';
19
9
 
20
10
  export {controlMessageEnum} from '../src/components/ChatContext';
21
11
  //audio/video toggle state
22
12
  export {ToggleState} from '../agora-rn-uikit/src/Contexts/PropsContext';
13
+
14
+ export {
15
+ useChatUIControls,
16
+ ChatType,
17
+ } from '../src/components/chat-ui/useChatUIControls';
18
+ export type {ChatUIControlsInterface} from '../src/components/chat-ui/useChatUIControls';
@@ -2,7 +2,7 @@
2
2
  * Core contexts
3
3
  */
4
4
  import {createHook} from 'customization-implementation';
5
- import {RtcContext, RenderContext} from '../agora-rn-uikit';
5
+ import {RtcContext, ContentContext} from '../agora-rn-uikit';
6
6
 
7
7
  // commented for v1 release
8
8
  //import {default as DeviceContext} from '../src/components/DeviceContext';
@@ -14,7 +14,7 @@ export const useRtc = createHook(RtcContext);
14
14
  /**
15
15
  * The Render app state governs the information necessary to render each user content view displayed in the videocall screen.
16
16
  */
17
- export const useRender = createHook(RenderContext);
17
+ export const useContent = createHook(ContentContext);
18
18
 
19
19
  export {useLocalUserInfo} from '../src/app-state/useLocalUserInfo';
20
20
 
@@ -40,10 +40,8 @@ export type {LayoutContextInterface} from '../src/utils/useLayout';
40
40
  // export type {ScreenshareContextInterface} from '../src/subComponents/screenshare/useScreenshare';
41
41
  export {useRecording} from '../src/subComponents/recording/useRecording';
42
42
  export type {RecordingContextInterface} from '../src/subComponents/recording/useRecording';
43
- export {useMeetingInfo} from '../src/components/meeting-info/useMeetingInfo';
44
- export type {MeetingInfoContextInterface} from '../src/components/meeting-info/useMeetingInfo';
45
- export {useChatUIControl} from '../src/components/chat-ui/useChatUIControl';
46
- export type {ChatUIControlInterface} from '../src/components/chat-ui/useChatUIControl';
43
+ export {useRoomInfo} from '../src/components/room-info/useRoomInfo';
44
+ export type {RoomInfoContextInterface} from '../src/components/room-info/useRoomInfo';
47
45
  export {useMessages} from '../src/app-state/useMessages';
48
46
  export type {messageInterface} from '../src/app-state/useMessages';
49
47
  export {SidePanelType} from '../src/subComponents/SidePanelEnum';
@@ -1,9 +1,9 @@
1
1
  // 1. Import Events
2
2
  import Events from '../src/rtm-events-api/Events';
3
- import {EventSource} from '../src/rtm-events-api';
3
+ import {EventSource, PersistanceLevel} from '../src/rtm-events-api';
4
4
 
5
5
  // 2. Initialize with source "fpe"
6
6
  const customEvents = new Events(EventSource.fpe);
7
7
 
8
8
  // 3. export
9
- export {customEvents};
9
+ export {customEvents, PersistanceLevel};
@@ -46,7 +46,7 @@ function isComponent(data: any) {
46
46
  }
47
47
 
48
48
  //These keys value are not react component. so doing indexOf and checking whether its function or not
49
- const ignoreTheseKeys = ['customLayout', 'useUserContext'];
49
+ const ignoreTheseKeys = ['customLayout'];
50
50
 
51
51
  function validateComponents(components: any) {
52
52
  for (const key in components) {
@@ -1,10 +1,7 @@
1
1
  //Common components
2
- export {default as HorizontalRule} from '../src/atoms/HorizontalRule';
3
- export {default as PrimaryButton} from '../src/atoms/PrimaryButton';
4
- export {default as SecondaryButton} from '../src/atoms/SecondaryButton';
5
2
  export {default as TextInput} from '../src/atoms/TextInput';
6
3
  //Icons
7
- export {default as icons} from '../src/assets/icons';
4
+ export {Icons} from '../agora-rn-uikit';
8
5
 
9
6
  // commented for v1 release
10
7
  //create screen
@@ -22,24 +19,22 @@ export {default as icons} from '../src/assets/icons';
22
19
  export {
23
20
  ParticipantsView,
24
21
  Controls,
25
- ControlsComponentsArray,
26
22
  Navbar,
27
- NavBarComponentsArray,
28
23
  ChatBubble,
29
- ChatSendButton,
30
- ChatTextInput,
24
+ ChatInput,
31
25
  Chat,
32
26
  SettingsView,
27
+ ToolbarComponents,
33
28
  } from '../src/pages/video-call/index';
34
29
  export {default as GridLayout} from '../src/components/GridVideo';
35
30
  export {default as PinnedLayout} from '../src/components/PinnedVideo';
36
31
  export {default as VideoComponent} from '../src/pages/video-call/VideoComponent';
37
32
  export {default as MaxVideoView} from '../src/pages/video-call/VideoRenderer';
38
- export {default as RenderComponent} from '../src/pages/video-call/RenderComponent';
39
33
  export {default as NameWithMicIcon} from '../src/pages/video-call/NameWithMicIcon';
40
34
  export {default as NetworkQualityPill} from '../src/subComponents/NetworkQualityPill';
41
35
  //videocall screen
42
36
  export {default as VideocallScreen} from '../src/pages/video-call/VideoCallScreen';
37
+ export {default as PrecallScreen} from '../src/components/Precall';
43
38
 
44
39
  // commented for v1 release
45
40
  //Settings screen
@@ -53,10 +48,7 @@ export {default as VideocallScreen} from '../src/pages/video-call/VideoCallScree
53
48
  //Sidepanel buttons
54
49
  export {SidePanelButtonsArray} from '../src/subComponents/SidePanelButtons';
55
50
  export {
56
- ImageIcon as UiKitImageIcon,
57
51
  MaxVideoView as UiKitMaxVideoView,
58
- BtnTemplate as UiKitBtnTemplate,
59
52
  ClientRole as UikitClientRole,
60
53
  ChannelProfile as UikitChannelProfile,
61
54
  } from '../agora-rn-uikit';
62
- export type {BtnTemplateInterface as UikitBtnTemplateInterface} from '../agora-rn-uikit';
@@ -13,21 +13,15 @@ import React from 'react';
13
13
  export type {ChatBubbleProps} from '../src/components/ChatContext';
14
14
  import {ChatBubbleProps} from '../src/components/ChatContext';
15
15
  import {
16
- RenderInterface,
17
- RenderStateInterface,
16
+ ContentInterface,
17
+ ContentStateInterface,
18
18
  UidType,
19
19
  } from '../agora-rn-uikit';
20
20
  import {I18nInterface} from '../src/language/i18nTypes';
21
- import {IconsInterface} from '../agora-rn-uikit/src/Controls/Icons';
22
- export type {RenderInterface, RenderStateInterface, UidType};
23
- export type {
24
- ChatTextInputProps,
25
- ChatSendButtonProps,
26
- } from '../src/subComponents/ChatInput';
27
- import {
28
- ChatTextInputProps,
29
- ChatSendButtonProps,
30
- } from '../src/subComponents/ChatInput';
21
+ import {IconsInterface} from '../src/atoms/CustomIcon';
22
+ export type {ContentInterface, ContentStateInterface, UidType};
23
+ export type {ChatTextInputProps} from '../src/subComponents/ChatInput';
24
+ import {ChatTextInputProps} from '../src/subComponents/ChatInput';
31
25
 
32
26
  export const CUSTOM_ROUTES_PREFIX = '/r/';
33
27
 
@@ -51,47 +45,30 @@ export interface ChatCmpInterface {
51
45
  //extends BeforeAndAfterInterface
52
46
  chatBubble?: React.ComponentType<ChatBubbleProps>;
53
47
  chatInput?: React.ComponentType<ChatTextInputProps>;
54
- chatSendButton?: React.ComponentType<ChatSendButtonProps>;
55
- }
56
-
57
- export interface renderComponentInterface {
58
- user: RenderInterface;
59
- }
60
-
61
- export interface renderComponentObjectInterface {
62
- [key: string]: React.ComponentType<renderComponentInterface>;
63
48
  }
64
49
 
65
50
  export type layoutComponent = React.ComponentType<{
66
- renderData: RenderStateInterface['activeUids'];
51
+ renderData: ContentStateInterface['activeUids'];
67
52
  }>;
68
53
 
69
- export interface layoutObjectBase {
54
+ export interface layoutItem {
70
55
  name: string;
71
56
  label: string;
72
- component: layoutComponent;
73
- }
74
-
75
- export interface layoutObjectWithIcon extends layoutObjectBase {
76
- icon: string;
77
- iconName?: never;
78
- }
79
- export interface layoutObjectWithIconName extends layoutObjectBase {
80
- icon?: never;
57
+ //todo: hari change iconName into icon and refactor icon lib
81
58
  iconName: keyof IconsInterface;
59
+ component: layoutComponent;
82
60
  }
83
- export type layoutObjectType = layoutObjectWithIcon | layoutObjectWithIconName;
84
61
 
85
62
  export interface VideoCallInterface extends BeforeAndAfterInterface {
86
63
  // commented for v1 release
87
- topBar?: React.ComponentType;
64
+ topToolBar?: React.ComponentType;
65
+ bottomToolBar?: React.ComponentType;
66
+ leftToolBar?: React.ComponentType;
67
+ rightToolBar?: React.ComponentType;
88
68
  //settingsPanel?: React.ComponentType;
89
69
  participantsPanel?: React.ComponentType;
90
- bottomBar?: React.ComponentType;
91
70
  chat?: ChatCmpInterface;
92
- customContent?: renderComponentObjectInterface;
93
- customLayout?: (layouts: layoutObjectType[]) => layoutObjectType[];
94
- useUserContext?: () => void;
71
+ customLayout?: (layouts: layoutItem[]) => layoutItem[];
95
72
  }
96
73
 
97
74
  export type ComponentsInterface = {
@@ -9,25 +9,43 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import React, { useContext } from 'react';
12
+ import React, {useContext} from 'react';
13
13
  /**
14
- *
14
+ *
15
15
  * @param context - any context data which we want to extract the data.
16
16
  * @returns useContextWithSelector in which we can pass selector function to extract data from the context that we passed.
17
17
  */
18
18
  function createHook<T>(context: React.Context<T>) {
19
-
20
19
  function useContextWithSelector<U>(contextSelector: (data: T) => U): U;
21
20
  function useContextWithSelector(): T;
22
21
  /**
23
- *
22
+ *
24
23
  * @param contextSelector is used to pass callback function used to select data from the context data
25
24
  * @returns the data selected from the context
26
25
  */
27
26
  function useContextWithSelector<U>(contextSelector?: (data: T) => U): U | T {
28
27
  const data = useContext(context);
29
- return contextSelector ? contextSelector(data) : data
28
+ return contextSelector ? contextSelector(data) : data;
30
29
  }
31
30
  return useContextWithSelector;
32
31
  }
33
- export default createHook;
32
+
33
+ export function createConcealedHook<T, V>(
34
+ context: React.Context<T>,
35
+ preselect: (data: T) => V,
36
+ ) {
37
+ function useContextWithSelector<U>(contextSelector: (data: V) => U): U;
38
+ function useContextWithSelector(): V;
39
+ /**
40
+ *
41
+ * @param contextSelector is used to pass callback function used to select data from the context data
42
+ * @returns the data selected from the context
43
+ */
44
+ function useContextWithSelector<U>(contextSelector?: (data: V) => U): U | V {
45
+ const data = useContext(context);
46
+ return contextSelector ? contextSelector(preselect(data)) : preselect(data);
47
+ }
48
+ return useContextWithSelector;
49
+ }
50
+
51
+ export default createHook;
@@ -1,4 +1,4 @@
1
- export {default as createHook} from './createHook';
1
+ export {default as createHook, createConcealedHook} from './createHook';
2
2
  export {CustomizationProvider, useCustomization} from './useCustomization';
3
3
  export type {CustomizationProviderProps} from './useCustomization';
4
4
  export {default as customizationConfig} from 'customization';
@@ -9,22 +9,20 @@
9
9
  information visit https://appbuilder.agora.io.
10
10
  *********************************************
11
11
  */
12
- import React from 'react';
12
+ import React, {useContext} from 'react';
13
13
  import {CustomizationApiInterface} from 'customization-api';
14
14
  import customizationConfig from 'customization';
15
15
  import createHook from './createHook';
16
+ import {SdkApiContext} from '../src/components/SdkApiContext';
16
17
 
17
18
  const CustomizationContext: React.Context<CustomizationApiInterface> =
18
19
  React.createContext(customizationConfig);
19
20
 
20
- export interface CustomizationProviderProps {
21
- children: React.ReactNode;
22
- value: CustomizationApiInterface;
23
- }
21
+ const CustomizationProvider: React.FC = (props) => {
22
+ const {customize: userCustomization} = useContext(SdkApiContext);
24
23
 
25
- const CustomizationProvider = (props: CustomizationProviderProps) => {
26
24
  return (
27
- <CustomizationContext.Provider value={props.value}>
25
+ <CustomizationContext.Provider value={userCustomization.customization}>
28
26
  {props.children}
29
27
  </CustomizationContext.Provider>
30
28
  );
@@ -1,29 +1,29 @@
1
1
  <!DOCTYPE html>
2
2
  <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
-
7
- <base href="./">
8
- <title><%= htmlWebpackPlugin.options.title %></title>
9
- </head>
10
- <body>
11
- <style>
12
- .video-container > *{
13
- background-color: #000 !important;
14
-
15
- }
16
- .video-container video{
17
- background-color: #000;
18
- }
19
- .video-container{
20
- background-color: #000;
21
- }
22
- </style>
23
- <div id="react-app" style="
24
- height: 100vh;
25
- display: flex;
26
- ">
27
- </div>
28
- </body>
29
- </html>
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
7
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
8
+ <link
9
+ href="https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@400;600;700&display=swap"
10
+ rel="stylesheet"
11
+ />
12
+ <base href="./" />
13
+ <title><%= htmlWebpackPlugin.options.title %></title>
14
+ </head>
15
+ <body>
16
+ <style>
17
+ .video-container > * {
18
+ background-color: #000 !important;
19
+ }
20
+ .video-container video {
21
+ background-color: #000;
22
+ }
23
+ .video-container {
24
+ background-color: #000;
25
+ }
26
+ </style>
27
+ <div id="react-app" style="height: 100vh; display: flex"></div>
28
+ </body>
29
+ </html>
@@ -1,5 +1,6 @@
1
1
  import Video from '../../src/App';
2
2
  import {AppRegistry} from 'react-native';
3
+ import '../../src/assets/font-styles.css';
3
4
  // import React from 'react';
4
5
 
5
6
  // const Video = () => <div>Hello </div>;