agora-appbuilder-core 3.0.9 → 3.0.10

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 (248) 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/Contexts/LocalUserContext.tsx +4 -0
  5. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +18 -0
  6. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +2 -0
  7. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +30 -26
  8. package/template/agora-rn-uikit/src/Controls/Icons.ts +30 -83
  9. package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +6 -6
  10. package/template/agora-rn-uikit/src/Reducer/ActiveSpeakerDetected.ts +11 -0
  11. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +1 -0
  12. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +1 -0
  13. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +24 -0
  14. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +1 -0
  15. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +1 -0
  16. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +1 -0
  17. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +2 -0
  18. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +1 -0
  19. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +1 -0
  20. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +1 -0
  21. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +11 -0
  22. package/template/agora-rn-uikit/src/Reducer/index.ts +3 -0
  23. package/template/agora-rn-uikit/src/Rtc/Create.tsx +89 -1
  24. package/template/agora-rn-uikit/src/RtcConfigure.tsx +39 -2
  25. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +15 -5
  26. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +15 -9
  27. package/template/agora-rn-uikit/src/index.ts +3 -1
  28. package/template/android/app/build.gradle +1 -0
  29. package/template/android/app/src/main/AndroidManifest.xml +22 -15
  30. package/template/android/app/src/main/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  31. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  32. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +50 -0
  33. package/template/android/app/src/main/res/values/colors.xml +7 -0
  34. package/template/android/build.gradle +3 -3
  35. package/template/babel.config.js +1 -0
  36. package/template/bridge/rtc/webNg/RtcEngine.ts +110 -17
  37. package/template/customization-api/sub-components.ts +1 -1
  38. package/template/customization-api/typeDefinition.ts +2 -1
  39. package/template/electron/index.html +27 -27
  40. package/template/electron/renderer/index.js +1 -0
  41. package/template/global.d.ts +25 -4
  42. package/template/index.rsdk.tsx +1 -0
  43. package/template/index.web.js +2 -1
  44. package/template/index.wsdk.tsx +1 -1
  45. package/template/ios/HelloWorld/Info.plist +14 -1
  46. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +17 -0
  47. package/template/metro.config.js +1 -1
  48. package/template/package.json +18 -7
  49. package/template/react-native-toast-message/index.d.ts +43 -43
  50. package/template/react-native-toast-message/src/colors/index.js +3 -2
  51. package/template/react-native-toast-message/src/components/base/index.js +46 -59
  52. package/template/react-native-toast-message/src/components/base/styles.js +16 -32
  53. package/template/react-native-toast-message/src/components/checkbox.js +178 -0
  54. package/template/react-native-toast-message/src/components/error.js +3 -2
  55. package/template/react-native-toast-message/src/components/info.js +3 -2
  56. package/template/react-native-toast-message/src/components/success.js +3 -2
  57. package/template/react-native-toast-message/src/index.js +122 -31
  58. package/template/react-native-toast-message/src/index.sdk.tsx +125 -35
  59. package/template/react-native-toast-message/src/styles.js +3 -4
  60. package/template/react-native-toast-message/src/styles.sdk.ts +3 -4
  61. package/template/react-native.config.js +7 -0
  62. package/template/src/App.tsx +6 -0
  63. package/template/src/AppWrapper.tsx +63 -28
  64. package/template/src/assets/font-styles.css +329 -0
  65. package/template/src/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  66. package/template/src/assets/fonts/icomoon.ttf +0 -0
  67. package/template/src/assets/permission.png +0 -0
  68. package/template/src/assets/selection.json +1 -0
  69. package/template/src/atoms/ActionMenu.tsx +236 -0
  70. package/template/src/atoms/AnimatedActiveSpeaker.native.tsx +71 -0
  71. package/template/src/atoms/AnimatedActiveSpeaker.tsx +84 -0
  72. package/template/src/atoms/AnimatedRings.native.tsx +68 -0
  73. package/template/src/atoms/AnimatedRings.tsx +70 -0
  74. package/template/src/atoms/Card.tsx +61 -0
  75. package/template/src/atoms/CircularProgress.native.tsx +121 -0
  76. package/template/src/atoms/CircularProgress.tsx +102 -0
  77. package/template/src/atoms/CustomIcon.tsx +88 -0
  78. package/template/src/atoms/CustomSwitch.tsx +287 -0
  79. package/template/src/atoms/Dropdown.tsx +306 -0
  80. package/template/src/atoms/HorizontalRule.tsx +3 -1
  81. package/template/src/atoms/IconButton.tsx +162 -0
  82. package/template/src/atoms/ImageIcon.tsx +98 -0
  83. package/template/src/atoms/InfoBubble.tsx +291 -0
  84. package/template/src/atoms/Input.tsx +87 -0
  85. package/template/src/atoms/InviteInfo.tsx +166 -0
  86. package/template/src/atoms/LinkButton.tsx +28 -0
  87. package/template/src/atoms/OutlineButton.tsx +61 -0
  88. package/template/src/atoms/ParticipantsCount.tsx +73 -0
  89. package/template/src/atoms/Popup.tsx +147 -0
  90. package/template/src/atoms/PrimaryButton.tsx +51 -26
  91. package/template/src/atoms/RecordingInfo.tsx +49 -0
  92. package/template/src/atoms/SecondaryButton.tsx +8 -5
  93. package/template/src/atoms/Spacer.tsx +22 -0
  94. package/template/src/atoms/TertiaryButton.tsx +78 -0
  95. package/template/src/atoms/TextInput.tsx +12 -14
  96. package/template/src/atoms/Toggle.tsx +47 -0
  97. package/template/src/atoms/Tooltip.native.tsx +65 -0
  98. package/template/src/atoms/Tooltip.tsx +94 -0
  99. package/template/src/atoms/UserAvatar.tsx +60 -0
  100. package/template/src/components/Chat.tsx +86 -214
  101. package/template/src/components/ChatContext.ts +8 -1
  102. package/template/src/components/ColorConfigure.tsx +1 -1
  103. package/template/src/components/ColorContext.ts +1 -1
  104. package/template/src/components/CommonStyles.ts +44 -0
  105. package/template/src/components/Controls.tsx +342 -42
  106. package/template/src/components/{Controls.native.tsx → Controls1.native.tsx} +6 -4
  107. package/template/src/components/DeviceConfigure.tsx +461 -101
  108. package/template/src/components/DeviceContext.tsx +8 -4
  109. package/template/src/components/EventsConfigure.tsx +144 -7
  110. package/template/src/components/GraphQLProvider.tsx +1 -1
  111. package/template/src/components/GridVideo.tsx +59 -44
  112. package/template/src/components/HostControlView.tsx +114 -35
  113. package/template/src/components/Navbar.tsx +216 -398
  114. package/template/src/components/NetworkQualityContext.tsx +20 -20
  115. package/template/src/components/ParticipantsView.tsx +177 -154
  116. package/template/src/components/PinnedVideo.tsx +207 -120
  117. package/template/src/components/Precall.native.tsx +358 -119
  118. package/template/src/components/Precall.tsx +269 -135
  119. package/template/src/components/RTMConfigure.tsx +27 -4
  120. package/template/src/components/Router.electron.ts +1 -0
  121. package/template/src/components/Router.native.ts +1 -0
  122. package/template/src/components/Router.sdk.ts +1 -0
  123. package/template/src/components/Router.ts +1 -0
  124. package/template/src/components/Settings.tsx +26 -95
  125. package/template/src/components/SettingsView.tsx +251 -56
  126. package/template/src/components/Share.tsx +302 -273
  127. package/template/src/components/StorageContext.tsx +30 -3
  128. package/template/src/components/ToastComponent.tsx +8 -0
  129. package/template/src/components/chat-messages/useChatMessages.tsx +69 -23
  130. package/template/src/components/chat-ui/useChatUIControl.tsx +7 -0
  131. package/template/src/components/common/Error.tsx +20 -6
  132. package/template/src/components/common/Logo.tsx +16 -15
  133. package/template/src/components/contexts/LiveStreamDataContext.tsx +10 -5
  134. package/template/src/components/contexts/VideoMeetingDataContext.tsx +37 -7
  135. package/template/src/components/livestream/LiveStreamContext.tsx +270 -36
  136. package/template/src/components/livestream/Types.ts +39 -14
  137. package/template/src/components/livestream/index.ts +1 -0
  138. package/template/src/components/livestream/views/LiveStreamControls.tsx +12 -4
  139. package/template/src/components/participants/AllAudienceParticipants.tsx +101 -30
  140. package/template/src/components/participants/AllHostParticipants.tsx +103 -34
  141. package/template/src/components/participants/Participant.tsx +302 -0
  142. package/template/src/components/participants/ParticipantName.tsx +13 -7
  143. package/template/src/components/participants/ParticipantSectionTitle.tsx +35 -10
  144. package/template/src/components/participants/ScreenshareParticipants.tsx +144 -12
  145. package/template/src/components/participants/UserActionMenuOptions.tsx +398 -0
  146. package/template/src/components/popups/InvitePopup.tsx +115 -0
  147. package/template/src/components/popups/StopRecordingPopup.tsx +114 -0
  148. package/template/src/components/precall/LocalMute.tsx +84 -14
  149. package/template/src/components/precall/{LocalMute.native.tsx → LocalMute1.native.tsx} +21 -5
  150. package/template/src/components/precall/PermissionHelper.native.tsx +5 -0
  151. package/template/src/components/precall/PermissionHelper.tsx +126 -0
  152. package/template/src/components/precall/PreCallSettings.tsx +52 -0
  153. package/template/src/components/precall/VideoPreview.native.tsx +48 -3
  154. package/template/src/components/precall/VideoPreview.tsx +163 -7
  155. package/template/src/components/precall/joinCallBtn.tsx +15 -2
  156. package/template/src/components/precall/meetingTitle.tsx +15 -12
  157. package/template/src/components/precall/selectDevice.tsx +1 -21
  158. package/template/src/components/precall/textInput.tsx +32 -4
  159. package/template/src/components/precall/usePreCall.tsx +16 -0
  160. package/template/src/components/styles.ts +42 -21
  161. package/template/src/components/useShareLink.tsx +12 -14
  162. package/template/src/components/useToast.tsx +41 -0
  163. package/template/src/components/useVideoCall.tsx +65 -0
  164. package/template/src/language/default-labels/precallScreenLabels.ts +3 -3
  165. package/template/src/pages/Authenticate.tsx +5 -15
  166. package/template/src/pages/Create.tsx +293 -165
  167. package/template/src/pages/Endcall.tsx +148 -0
  168. package/template/src/pages/Join.tsx +93 -67
  169. package/template/src/pages/VideoCall.tsx +89 -64
  170. package/template/src/pages/video-call/ActionSheet.native.tsx +215 -0
  171. package/template/src/pages/video-call/ActionSheet.tsx +226 -0
  172. package/template/src/pages/video-call/ActionSheetContent.tsx +479 -0
  173. package/template/src/pages/video-call/ActionSheetHandle.tsx +38 -0
  174. package/template/src/pages/video-call/ActionSheetStyles.css +138 -0
  175. package/template/src/pages/video-call/DefaultLayouts.ts +4 -4
  176. package/template/src/pages/video-call/NameWithMicIcon.tsx +120 -44
  177. package/template/src/pages/video-call/RenderComponent.tsx +3 -2
  178. package/template/src/pages/video-call/SidePanelHeader.tsx +190 -0
  179. package/template/src/pages/video-call/VideoCallMobileView.tsx +139 -0
  180. package/template/src/pages/video-call/VideoCallScreen.native.tsx +37 -0
  181. package/template/src/pages/video-call/VideoCallScreen.tsx +45 -9
  182. package/template/src/pages/video-call/VideoComponent.tsx +18 -3
  183. package/template/src/pages/video-call/VideoRenderer.tsx +218 -60
  184. package/template/src/rtm-events/constants.ts +2 -0
  185. package/template/src/subComponents/ChatBubble.tsx +123 -83
  186. package/template/src/subComponents/ChatContainer.tsx +257 -84
  187. package/template/src/subComponents/ChatInput.ios.tsx +237 -0
  188. package/template/src/subComponents/ChatInput.tsx +61 -46
  189. package/template/src/subComponents/Checkbox.native.tsx +16 -5
  190. package/template/src/subComponents/Checkbox.tsx +2 -2
  191. package/template/src/subComponents/CopyJoinInfo.tsx +36 -58
  192. package/template/src/subComponents/EndcallPopup.tsx +107 -0
  193. package/template/src/subComponents/FallbackLogo.tsx +122 -40
  194. package/template/src/subComponents/LanguageSelector.tsx +1 -1
  195. package/template/src/subComponents/LayoutIconButton.tsx +201 -0
  196. package/template/src/subComponents/LayoutIconDropdown.tsx +131 -134
  197. package/template/src/subComponents/{LayoutIconDropdown.native.tsx → LayoutIconDropdown1.native.tsx} +4 -18
  198. package/template/src/subComponents/LocalAudioMute.tsx +119 -27
  199. package/template/src/subComponents/LocalEndCall.tsx +71 -33
  200. package/template/src/subComponents/LocalSwitchCamera.tsx +17 -30
  201. package/template/src/subComponents/LocalVideoMute.tsx +117 -27
  202. package/template/src/subComponents/Logo.tsx +3 -4
  203. package/template/src/subComponents/LogoutButton.tsx +1 -1
  204. package/template/src/subComponents/NetworkQualityPill.tsx +60 -63
  205. package/template/src/subComponents/OpenInNativeButton.tsx +3 -3
  206. package/template/src/subComponents/Recording.tsx +28 -29
  207. package/template/src/subComponents/RemoteAudioMute.tsx +83 -29
  208. package/template/src/subComponents/RemoteEndCall.tsx +8 -5
  209. package/template/src/subComponents/RemoteMutePopup.tsx +193 -0
  210. package/template/src/subComponents/RemoteVideoMute.tsx +74 -21
  211. package/template/src/subComponents/RemoveMeetingPopup.tsx +109 -0
  212. package/template/src/subComponents/RemoveScreensharePopup.tsx +109 -0
  213. package/template/src/subComponents/ScreenShareNotice.tsx +83 -8
  214. package/template/src/subComponents/SelectDevice.tsx +404 -61
  215. package/template/src/subComponents/SelectDeviceSettings.backup.tsx +207 -0
  216. package/template/src/subComponents/SelectOAuth.tsx +9 -8
  217. package/template/src/subComponents/SidePanelHeader.tsx +112 -0
  218. package/template/src/subComponents/ToastConfig.tsx +150 -10
  219. package/template/src/subComponents/chat/ChatParticipants.tsx +187 -78
  220. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +95 -32
  221. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +29 -33
  222. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +6 -6
  223. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +24 -11
  224. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +17 -10
  225. package/template/src/subComponents/recording/useRecording.tsx +79 -27
  226. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +52 -70
  227. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +11 -2
  228. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +26 -4
  229. package/template/src/theme/index.ts +46 -0
  230. package/template/src/utils/PlatformWrapper.tsx +21 -0
  231. package/template/src/utils/common.tsx +155 -1
  232. package/template/src/utils/hexadecimalTransparency.ts +108 -0
  233. package/template/src/utils/index.tsx +19 -0
  234. package/template/src/utils/isMobileOrTablet.ts +7 -2
  235. package/template/src/utils/pendingStateUpdateHelper.ts +19 -0
  236. package/template/src/utils/useButtonTemplate.tsx +1 -0
  237. package/template/src/utils/useFocus.tsx +46 -0
  238. package/template/src/utils/useIsActiveSpeaker.ts +27 -0
  239. package/template/src/utils/useIsHandRaised.ts +13 -0
  240. package/template/src/utils/useMuteToggleLocal.ts +54 -3
  241. package/template/src/utils/useRemoteEndScreenshare.ts +26 -0
  242. package/template/src/utils/useRemoteRequest.ts +84 -0
  243. package/template/web/index.html +5 -0
  244. package/template/webpack.commons.js +13 -8
  245. package/template/webpack.web.config.js +1 -0
  246. package/template/src/assets/icons.ts +0 -102
  247. package/template/src/components/participants/MeParticipant.tsx +0 -38
  248. package/template/src/components/participants/RemoteParticipants.tsx +0 -71
@@ -10,66 +10,72 @@
10
10
  *********************************************
11
11
  */
12
12
  import React, {useContext, useState} from 'react';
13
- import {View, Text, StyleSheet, ViewStyle, TextStyle} from 'react-native';
14
- import icons from '../assets/icons';
13
+ import {
14
+ View,
15
+ Text,
16
+ StyleSheet,
17
+ TextStyle,
18
+ useWindowDimensions,
19
+ } from 'react-native';
15
20
  import Settings, {
16
21
  SettingsWithViewWrapper,
17
22
  SettingsIconButtonProps,
18
23
  } from './Settings';
19
24
  import CopyJoinInfo, {CopyJoinInfoProps} from '../subComponents/CopyJoinInfo';
20
25
  import {SidePanelType} from '../subComponents/SidePanelEnum';
21
- import {navHolder} from '../../theme.json';
22
26
  import ChatContext from '../components/ChatContext';
23
27
  import isMobileOrTablet from '../utils/isMobileOrTablet';
24
- import {
25
- BtnTemplate,
26
- BtnTemplateInterface,
27
- ImageIcon,
28
- } from '../../agora-rn-uikit';
29
28
  import LiveStreamContext from './livestream';
30
29
  import {numFormatter} from '../utils/index';
31
30
  import {useLayout} from '../utils/useLayout';
32
31
  import {useChatNotification} from '../components/chat-notification/useChatNotification';
33
32
  import useLayoutsData from '../pages/video-call/useLayoutsData';
34
33
  import {
34
+ BREAKPOINTS,
35
35
  isAndroid,
36
36
  isIOS,
37
+ isMobileUA,
37
38
  isValidReactComponent,
38
39
  isWebInternal,
40
+ trimText,
41
+ useIsDesktop,
39
42
  } from '../utils/common';
40
43
  import {useChangeDefaultLayout} from '../pages/video-call/DefaultLayouts';
41
44
  import {useRecording} from '../subComponents/recording/useRecording';
42
45
  import LayoutIconDropdown from '../subComponents/LayoutIconDropdown';
43
- import DimensionContext from './dimension/DimensionContext';
44
46
  import {useString} from '../utils/useString';
45
47
  import {useMeetingInfo} from './meeting-info/useMeetingInfo';
46
48
  import {useSidePanel} from '../utils/useSidePanel';
47
49
  import {useChatUIControl} from './chat-ui/useChatUIControl';
50
+ import LayoutIconButton from '../subComponents/LayoutIconButton';
48
51
  import {
49
52
  ButtonTemplateName,
50
53
  useButtonTemplate,
51
54
  } from '../utils/useButtonTemplate';
52
55
  import Styles from './styles';
56
+ import IconButton, {IconButtonProps} from '../atoms/IconButton';
57
+ import ThemeConfig from '../theme';
58
+ import hexadecimalTransparency from '../utils/hexadecimalTransparency';
59
+ import Spacer from '../atoms/Spacer';
60
+ import {useLiveStreamDataContext} from './contexts/LiveStreamDataContext';
61
+ import ParticipantsCount from '../atoms/ParticipantsCount';
62
+ import styles from 'react-native-toast-message/src/styles';
63
+ import RecordingInfo from '../atoms/RecordingInfo';
53
64
 
54
- const RenderSeparator = () => {
55
- const {getDimensionData} = useContext(DimensionContext);
56
- const {isDesktop} = getDimensionData();
57
- return isWebInternal() && isDesktop ? (
58
- <View style={style.navItem}>
59
- <View style={style.navItemSeparator}></View>
60
- </View>
61
- ) : (
62
- <View style={{marginHorizontal: 2}}></View>
63
- );
64
- };
65
-
66
- const ParticipantsCountView = () => {
65
+ export const ParticipantsCountView = ({
66
+ isMobileView = false,
67
+ }: {
68
+ isMobileView?: boolean;
69
+ }) => {
67
70
  const {onlineUsersCount} = useContext(ChatContext);
68
-
69
- return (
71
+ return isMobileView ? (
72
+ <Text>
73
+ People {'\n'} ({numFormatter(onlineUsersCount)})
74
+ </Text>
75
+ ) : (
70
76
  <>
71
77
  {onlineUsersCount !== 0 && (
72
- <View style={[style.navItem, {justifyContent: 'center'}]}>
78
+ <View style={[{justifyContent: 'center'}]}>
73
79
  <View style={style.chip}>
74
80
  {onlineUsersCount > 0 && (
75
81
  <Text style={style.chipText}>
@@ -90,54 +96,61 @@ interface ParticipantsIconButtonProps {
90
96
  left?: number;
91
97
  bottom?: number;
92
98
  };
93
- buttonTemplateName?: ButtonTemplateName;
94
- render?: (
95
- onPress: () => void,
96
- isPanelActive: boolean,
97
- buttonTemplateName?: ButtonTemplateName,
98
- ) => JSX.Element;
99
+ isOnActionSheet?: boolean;
100
+ render?: (onPress: () => void, isPanelActive: boolean) => JSX.Element;
99
101
  }
100
- const ParticipantsIconButton = (props: ParticipantsIconButtonProps) => {
102
+ export const ParticipantsIconButton = (props: ParticipantsIconButtonProps) => {
101
103
  const {
102
104
  liveStreamingRequestAlertIconPosition = {
103
- top: isWebInternal() ? -10 : 2,
105
+ top: 0,
106
+ right: 0,
104
107
  left: undefined,
105
- right: undefined,
106
108
  bottom: undefined,
107
109
  },
110
+ isOnActionSheet = false,
108
111
  } = props;
109
112
  const {sidePanel, setSidePanel} = useSidePanel();
110
113
  const {isPendingRequestToReview, setLastCheckedRequestTimestamp} =
111
114
  useContext(LiveStreamContext);
112
115
  //commented for v1 release
113
116
  //const participantsLabel = useString('participantsLabel')();
114
- const participantsLabel = 'Participants';
115
- const defaultTemplateValue = useButtonTemplate().buttonTemplateName;
116
- const {buttonTemplateName = defaultTemplateValue} = props;
117
+ const {onlineUsersCount} = useContext(ChatContext);
118
+ //const participantsLabel = `Participants (${numFormatter(onlineUsersCount)})`;
119
+ const participantsLabel = `People`;
117
120
  const isPanelActive = sidePanel === SidePanelType.Participants;
121
+
118
122
  const onPress = () => {
119
123
  isPanelActive
120
124
  ? setSidePanel(SidePanelType.None)
121
125
  : setSidePanel(SidePanelType.Participants);
122
- $config.EVENT_MODE && $config.RAISE_HAND;
123
- setLastCheckedRequestTimestamp(new Date().getTime());
126
+ // $config.EVENT_MODE && $config.RAISE_HAND;
127
+ //setLastCheckedRequestTimestamp(new Date().getTime());
124
128
  };
125
- let btnTemplateProps: BtnTemplateInterface = {
129
+ let iconButtonProps: IconButtonProps = {
126
130
  onPress: onPress,
127
- name: isPanelActive ? 'participantFilledIcon' : 'participantIcon',
131
+ iconProps: {
132
+ name: 'participants',
133
+ tintColor: isPanelActive
134
+ ? $config.PRIMARY_ACTION_TEXT_COLOR
135
+ : $config.SECONDARY_ACTION_COLOR,
136
+ iconBackgroundColor: isPanelActive
137
+ ? $config.PRIMARY_ACTION_BRAND_COLOR
138
+ : '',
139
+ },
140
+ btnTextProps: {
141
+ text: isOnActionSheet || !$config.ICON_TEXT ? '' : participantsLabel,
142
+ textColor: $config.FONT_COLOR,
143
+ },
128
144
  };
145
+ iconButtonProps.isOnActionSheet = isOnActionSheet;
129
146
 
130
- if (buttonTemplateName === ButtonTemplateName.bottomBar) {
131
- btnTemplateProps.btnText = participantsLabel;
132
- btnTemplateProps.style = Styles.localButtonWithoutBG as Object;
133
- } else {
134
- btnTemplateProps.style = style.btnHolder;
135
- }
136
147
  return props?.render ? (
137
- props.render(onPress, isPanelActive, buttonTemplateName)
148
+ props.render(onPress, isPanelActive)
138
149
  ) : (
139
150
  <>
140
- <BtnTemplate {...btnTemplateProps} />
151
+ <View>
152
+ <IconButton {...iconButtonProps} />
153
+ </View>
141
154
  {$config.EVENT_MODE && $config.RAISE_HAND && isPendingRequestToReview && (
142
155
  <View
143
156
  style={{
@@ -146,14 +159,11 @@ const ParticipantsIconButton = (props: ParticipantsIconButtonProps) => {
146
159
  bottom: liveStreamingRequestAlertIconPosition.bottom,
147
160
  right: liveStreamingRequestAlertIconPosition.right,
148
161
  left: liveStreamingRequestAlertIconPosition.left,
149
- }}>
150
- <View style={[style.badge, {paddingHorizontal: 3}]}>
151
- <ImageIcon
152
- icon={icons['exclamationIcon']}
153
- color={$config.SECONDARY_FONT_COLOR}
154
- />
155
- </View>
156
- </View>
162
+ backgroundColor: $config.SEMANTIC_ERROR,
163
+ width: 12,
164
+ height: 12,
165
+ borderRadius: 10,
166
+ }}></View>
157
167
  )}
158
168
  </>
159
169
  );
@@ -167,61 +177,99 @@ interface ChatIconButtonProps {
167
177
  bottom?: number;
168
178
  };
169
179
  badgeTextStyle?: TextStyle;
170
- buttonTemplateName?: ButtonTemplateName;
171
180
  render?: (
172
181
  onPress: () => void,
173
182
  isPanelActive: boolean,
174
183
  totalUnreadCount: number,
175
- buttonTemplateName?: ButtonTemplateName,
176
184
  ) => JSX.Element;
185
+ isMobileView?: boolean;
186
+ isOnActionSheet?: boolean;
177
187
  }
178
188
 
179
- const ChatIconButton = (props: ChatIconButtonProps) => {
189
+ export const ChatIconButton = (props: ChatIconButtonProps) => {
190
+ const {sidePanel, setSidePanel} = useSidePanel();
180
191
  const {
181
192
  badgeContainerPosition = {
182
- top: isWebInternal() ? -10 : 2,
193
+ top: 0,
194
+ right: 0,
183
195
  left: undefined,
184
- right: undefined,
185
196
  bottom: undefined,
197
+ zIndex: 999,
186
198
  },
187
199
  badgeTextStyle = {
188
- color: $config.SECONDARY_FONT_COLOR,
200
+ color: $config.PRIMARY_ACTION_TEXT_COLOR,
189
201
  fontSize: 12,
202
+ textAlign: 'center',
190
203
  },
204
+ isOnActionSheet = false,
191
205
  } = props;
192
206
  const {setUnreadGroupMessageCount, totalUnreadCount} = useChatNotification();
193
207
  const {setGroupActive, setPrivateActive, setSelectedChatUserId} =
194
208
  useChatUIControl();
195
- const {sidePanel, setSidePanel} = useSidePanel();
209
+
196
210
  //commented for v1 release
197
211
  //const chatLabel = useString('chatLabel')();
198
212
  const chatLabel = 'Chat';
199
- const defaultTemplateValue = useButtonTemplate().buttonTemplateName;
200
- const {buttonTemplateName = defaultTemplateValue} = props;
201
213
  const isPanelActive = sidePanel === SidePanelType.Chat;
202
214
  const onPress = () => {
203
- if (isPanelActive) {
204
- setSidePanel(SidePanelType.None);
205
- setGroupActive(false);
206
- setPrivateActive(false);
207
- setSelectedChatUserId(0);
208
- } else {
209
- setUnreadGroupMessageCount(0);
210
- setGroupActive(true);
211
- setSidePanel(SidePanelType.Chat);
215
+ {
216
+ if (isPanelActive) {
217
+ setSidePanel(SidePanelType.None);
218
+ setGroupActive(false);
219
+ setPrivateActive(false);
220
+ setSelectedChatUserId(0);
221
+ } else {
222
+ //move this logic into ChatContainer
223
+ //setUnreadGroupMessageCount(0);
224
+ setGroupActive(true);
225
+ setSidePanel(SidePanelType.Chat);
226
+ }
212
227
  }
213
228
  };
214
- let btnTemplateProps: BtnTemplateInterface = {
229
+ let iconButtonProps: IconButtonProps = {
215
230
  onPress: onPress,
216
- name: isPanelActive ? 'chatIconFilled' : 'chatIcon',
231
+ iconProps: {
232
+ name: 'chat-nav',
233
+ tintColor: isPanelActive
234
+ ? $config.PRIMARY_ACTION_TEXT_COLOR
235
+ : $config.SECONDARY_ACTION_COLOR,
236
+ iconBackgroundColor: isPanelActive
237
+ ? $config.PRIMARY_ACTION_BRAND_COLOR
238
+ : '',
239
+ },
240
+ btnTextProps: {
241
+ text: isOnActionSheet || !$config.ICON_TEXT ? '' : chatLabel,
242
+ textColor: $config.FONT_COLOR,
243
+ },
217
244
  };
218
- if (buttonTemplateName === ButtonTemplateName.bottomBar) {
219
- btnTemplateProps.btnText = chatLabel;
220
- btnTemplateProps.style = Styles.localButtonWithoutBG as Object;
221
- } else {
222
- btnTemplateProps.style = style.btnHolder;
223
- }
224
- const renderBadge = (badgeCount: any) => {
245
+
246
+ iconButtonProps.isOnActionSheet = isOnActionSheet;
247
+
248
+ // const renderBadgeOld = (badgeCount: any) => {
249
+ // return (
250
+ // <View
251
+ // style={{
252
+ // position: 'absolute',
253
+ // top: badgeContainerPosition?.top,
254
+ // bottom: badgeContainerPosition?.bottom,
255
+ // left: badgeContainerPosition?.left,
256
+ // right: badgeContainerPosition?.right,
257
+ // borderRadius: 10,
258
+ // width: 20,
259
+ // height: 20,
260
+ // backgroundColor: $config.PRIMARY_ACTION_BRAND_COLOR,
261
+ // justifyContent: 'center',
262
+ // }}>
263
+ // <Text
264
+ // style={{
265
+ // ...badgeTextStyle,
266
+ // }}>
267
+ // {numFormatter(badgeCount)}
268
+ // </Text>
269
+ // </View>
270
+ // );
271
+ // };
272
+ const renderUnreadMessageIndicator = () => {
225
273
  return (
226
274
  <View
227
275
  style={{
@@ -230,26 +278,21 @@ const ChatIconButton = (props: ChatIconButtonProps) => {
230
278
  bottom: badgeContainerPosition?.bottom,
231
279
  left: badgeContainerPosition?.left,
232
280
  right: badgeContainerPosition?.right,
233
- }}>
234
- <View style={style.badge}>
235
- <Text
236
- style={{
237
- ...badgeTextStyle,
238
- }}>
239
- {numFormatter(badgeCount)}
240
- </Text>
241
- </View>
242
- </View>
281
+ borderRadius: 10,
282
+ width: 12,
283
+ height: 12,
284
+ backgroundColor: $config.SEMANTIC_ERROR,
285
+ }}></View>
243
286
  );
244
287
  };
245
288
  return props?.render ? (
246
- props.render(onPress, isPanelActive, totalUnreadCount, buttonTemplateName)
289
+ props.render(onPress, isPanelActive, totalUnreadCount)
247
290
  ) : (
248
291
  <>
249
- <BtnTemplate {...btnTemplateProps} />
250
- {sidePanel !== SidePanelType.Chat &&
251
- totalUnreadCount !== 0 &&
252
- renderBadge(totalUnreadCount)}
292
+ <View>
293
+ <IconButton {...iconButtonProps} />
294
+ {totalUnreadCount !== 0 && renderUnreadMessageIndicator()}
295
+ </View>
253
296
  </>
254
297
  );
255
298
  };
@@ -261,88 +304,9 @@ interface LayoutIconButtonProps {
261
304
  left?: number;
262
305
  bottom?: number;
263
306
  };
264
- buttonTemplateName?: ButtonTemplateName;
265
- render?: (
266
- onPress: () => void,
267
- buttonTemplateName?: ButtonTemplateName,
268
- ) => JSX.Element;
269
- }
270
-
271
- const LayoutIconButton = (props: LayoutIconButtonProps) => {
272
- const {modalPosition} = props;
273
307
 
274
- //commented for v1 release
275
- //const layoutLabel = useString('layoutLabel')('');
276
- const layoutLabel = 'Layouts';
277
- const defaultTemplateValue = useButtonTemplate().buttonTemplateName;
278
- const {buttonTemplateName = defaultTemplateValue} = props;
279
- const [showDropdown, setShowDropdown] = useState(false);
280
- const layouts = useLayoutsData();
281
- const changeLayout = useChangeDefaultLayout();
282
- const {currentLayout} = useLayout();
283
- const layout = layouts.findIndex((item) => item.name === currentLayout);
284
- const renderLayoutIcon = (showDropdown?: boolean) => {
285
- let onPress = () => {};
286
- let renderContent = [];
287
- if (!showDropdown) {
288
- onPress = () => {
289
- changeLayout();
290
- };
291
- } else {
292
- onPress = () => {
293
- setShowDropdown(true);
294
- };
295
- }
296
- let btnTemplateProps = {
297
- onPress: onPress,
298
- style: {},
299
- btnText: '',
300
- };
301
- if (buttonTemplateName === ButtonTemplateName.bottomBar) {
302
- btnTemplateProps.style = Styles.localButtonWithoutBG as Object;
303
- btnTemplateProps.btnText = layoutLabel;
304
- } else {
305
- btnTemplateProps.style = style.btnHolder;
306
- delete btnTemplateProps['btnText'];
307
- }
308
- renderContent.push(
309
- props?.render ? (
310
- props.render(onPress, buttonTemplateName)
311
- ) : layouts[layout]?.iconName ? (
312
- <BtnTemplate
313
- key={'defaultLayoutIconWithName'}
314
- name={layouts[layout]?.iconName}
315
- {...btnTemplateProps}
316
- />
317
- ) : (
318
- <BtnTemplate
319
- key={'defaultLayoutIconWithIcon'}
320
- icon={layouts[layout]?.icon}
321
- {...btnTemplateProps}
322
- />
323
- ),
324
- );
325
- return renderContent;
326
- };
327
- return (
328
- <>
329
- {/**
330
- * Based on the flag. it will render the dropdown
331
- */}
332
- <LayoutIconDropdown
333
- showDropdown={showDropdown}
334
- setShowDropdown={setShowDropdown}
335
- modalPosition={modalPosition}
336
- />
337
- {/**
338
- * If layout contains more than 2 data. it will render the dropdown.
339
- */}
340
- {layouts && Array.isArray(layouts) && layouts.length > 2
341
- ? renderLayoutIcon(true)
342
- : renderLayoutIcon(false)}
343
- </>
344
- );
345
- };
308
+ render?: (onPress: () => void) => JSX.Element;
309
+ }
346
310
 
347
311
  const SettingsIconButton = (props: SettingsIconButtonProps) => {
348
312
  return <Settings {...props} />;
@@ -355,158 +319,62 @@ const Navbar = () => {
355
319
  //commented for v1 release
356
320
  //const recordingLabel = useString('recordingLabel')();
357
321
  const recordingLabel = 'Recording';
322
+ const isDesktop = useIsDesktop();
323
+ const {audienceUids, hostUids} = useLiveStreamDataContext();
358
324
  const {
359
325
  data: {meetingTitle},
360
326
  } = useMeetingInfo();
361
327
 
362
328
  const {isRecordingActive} = useRecording();
363
- const {getDimensionData} = useContext(DimensionContext);
364
- const {isDesktop} = getDimensionData();
365
- const layoutsData = useLayoutsData();
366
- const isNative = isIOS() || isAndroid();
367
-
329
+ const {onlineUsersCount} = useContext(ChatContext);
330
+ const {width} = useWindowDimensions();
368
331
  return (
369
332
  <View
333
+ testID="videocall-topbar"
370
334
  style={[
371
335
  isWebInternal() ? style.navHolder : style.navHolderNative,
372
- {backgroundColor: $config.SECONDARY_FONT_COLOR + 80},
373
- isWebInternal()
374
- ? {
375
- justifyContent: isMobileOrTablet() ? 'space-between' : 'flex-end',
376
- }
377
- : {},
336
+ {
337
+ paddingHorizontal: isDesktop('toolbar') ? 32 : 10,
338
+ zIndex: 999,
339
+ },
378
340
  ]}>
379
- {isRecordingActive ? (
380
- <View
381
- style={[
382
- style.recordingView,
383
- {backgroundColor: $config.SECONDARY_FONT_COLOR},
384
- ]}>
385
- <ImageIcon
386
- name={'recordingActiveIcon'}
387
- style={{
388
- width: 20,
389
- height: 20,
390
- margin: 1,
391
- }}
392
- color="#FD0845"
393
- />
394
- {!isMobileOrTablet() && (
395
- <Text
396
- style={{
397
- fontSize: isWebInternal() ? 16 : 12,
398
- color: '#FD0845',
399
- fontWeight: '400',
400
- alignSelf: 'center',
401
- textAlign: 'center',
402
- flex: 1,
403
- }}>
404
- {recordingLabel}
405
- </Text>
341
+ <View style={style.titleContainer}>
342
+ <Text
343
+ style={style.roomNameText}
344
+ testID="videocall-meetingName"
345
+ numberOfLines={1}
346
+ ellipsizeMode="tail">
347
+ {trimText(meetingTitle)}
348
+ </Text>
349
+ <Spacer size={8} horizontal={true} />
350
+ <View style={style.countContainer}>
351
+ <ParticipantsCount />
352
+ {isRecordingActive ? (
353
+ <RecordingInfo recordingLabel={recordingLabel} />
354
+ ) : (
355
+ <></>
406
356
  )}
407
357
  </View>
408
- ) : (
409
- <></>
410
- )}
411
- <View
412
- style={[
413
- style.roomNameContainer,
414
- // @ts-ignore
415
- isWebInternal() && !isMobileOrTablet()
416
- ? {transform: [{translateX: '50%'}]}
417
- : {},
418
- ]}>
419
- {isWebInternal() ? (
420
- <View
421
- style={{
422
- flexDirection: 'row',
423
- justifyContent: 'flex-start',
424
- paddingLeft: 5,
425
- }}>
426
- <View>
427
- <Text style={style.roomNameText}>
428
- {isMobileOrTablet()
429
- ? meetingTitle.length > 13
430
- ? meetingTitle.slice(0, 13) + '..'
431
- : meetingTitle
432
- : meetingTitle}
433
- </Text>
434
- </View>
435
- <View />
436
- <View
437
- style={{
438
- backgroundColor: $config.PRIMARY_FONT_COLOR + '80',
439
- width: 1,
440
- height: 'auto',
441
- marginHorizontal: 10,
442
- }}
443
- />
444
- <View style={{width: 30}}>
445
- <CopyJoinInfo />
446
- </View>
447
- </View>
448
- ) : (
449
- <View>
450
- <Text style={style.roomNameText}>
451
- {meetingTitle.length > 13
452
- ? meetingTitle.slice(0, 13) + '..'
453
- : meetingTitle}
454
- </Text>
455
- </View>
456
- )}
457
358
  </View>
458
- <View style={style.navControlBar}>
459
- <View
460
- style={[
461
- style.navContainer,
462
- {
463
- minWidth:
464
- isWebInternal() && isDesktop
465
- ? 300
466
- : isMobileOrTablet()
467
- ? //In native - if only one layout is provided then we are hiding the layout icon. so we need less space. otherwise there will empty space around the icon
468
- layoutsData && layoutsData.length === 1 && isNative
469
- ? 130
470
- : 160
471
- : 200,
472
- },
473
- ]}>
474
- <ParticipantsCountView />
475
- <View style={[style.navItem, style.navSmItem]}>
359
+ {width > BREAKPOINTS.sm || isMobileUA() ? (
360
+ <View style={style.navControlBar} testID="videocall-navcontrols">
361
+ <View testID="videocall-participantsicon" style={{marginRight: 10}}>
476
362
  <ParticipantsIconButton />
477
363
  </View>
478
- {$config.CHAT ? (
364
+ {$config.CHAT && (
479
365
  <>
480
- <RenderSeparator />
481
- <View style={[style.navItem, style.navSmItem]}>
366
+ <View testID="videocall-chaticon" style={{marginHorizontal: 10}}>
482
367
  <ChatIconButton />
483
368
  </View>
484
369
  </>
485
- ) : (
486
- <></>
487
- )}
488
- {/**
489
- * In custom-layout - show the layout icon if more than 1 layout provided otherwise hide it from the ui
490
- */}
491
- {layoutsData && layoutsData.length > 1 && (
492
- <>
493
- <RenderSeparator />
494
- <View
495
- style={[style.navItem, style.navSmItem]}
496
- /**
497
- * .measure returns undefined on Android unless collapsable=false or onLayout are specified
498
- * so added collapsable property
499
- * https://github.com/facebook/react-native/issues/29712
500
- * */
501
- collapsable={false}>
502
- <LayoutIconButton />
503
- </View>
504
- </>
505
370
  )}
506
- <RenderSeparator />
507
- <SettingsIconButtonWithWrapper />
371
+ <View testID="videocall-settingsicon" style={{marginLeft: 10}}>
372
+ <SettingsIconButtonWithWrapper />
373
+ </View>
508
374
  </View>
509
- </View>
375
+ ) : (
376
+ <></>
377
+ )}
510
378
  </View>
511
379
  );
512
380
  };
@@ -528,43 +396,41 @@ export const NavBarComponentsArray: NavBarComponentsArrayProps = [
528
396
  ];
529
397
 
530
398
  const style = StyleSheet.create({
531
- backDrop: {
532
- position: 'absolute',
533
- top: 0,
534
- bottom: 0,
535
- left: 0,
536
- right: 0,
537
- backgroundColor: 'rgba(0,0,0,0.3)',
399
+ participantCountView: {
400
+ flexDirection: 'row',
401
+ padding: 12,
402
+ backgroundColor: $config.ICON_BG_COLOR,
403
+ borderRadius: 25,
404
+ borderWidth: 1,
405
+ borderColor: $config.CARD_LAYER_3_COLOR,
406
+ shadowColor: $config.HARD_CODED_BLACK_COLOR,
407
+ shadowOffset: {width: 0, height: 4},
408
+ shadowOpacity: 0.1,
409
+ shadowRadius: 20,
410
+ },
411
+ countContainer: {
412
+ flexDirection: 'row',
413
+ },
414
+ navHolder: {
415
+ backgroundColor: $config.TOOLBAR_COLOR,
416
+ width: '100%',
417
+ paddingTop: 8,
418
+ paddingBottom: 10,
419
+ flexDirection: 'row',
420
+ alignItems: 'center',
421
+ justifyContent: 'space-between',
538
422
  },
539
- navHolder: navHolder as ViewStyle,
540
423
  navHolderNative: {
541
424
  position: 'relative',
542
425
  width: '100%',
543
426
  height: '8%',
544
- backgroundColor: $config.SECONDARY_FONT_COLOR + '80',
427
+ backgroundColor:
428
+ $config.SECONDARY_ACTION_COLOR + hexadecimalTransparency['80%'],
545
429
  flexDirection: 'row',
546
430
  alignItems: 'center',
547
431
  paddingHorizontal: 10,
548
432
  justifyContent: 'space-between',
549
433
  },
550
- recordingView: {
551
- height: 35,
552
- maxHeight: 30,
553
- position: 'absolute',
554
- left: isMobileOrTablet() ? '48%' : 10,
555
- paddingHorizontal: 5,
556
- flexDirection: 'row',
557
- alignItems: 'center',
558
- alignContent: 'center',
559
- justifyContent: 'center',
560
- borderRadius: 10,
561
- },
562
- recordingIcon: {
563
- width: 20,
564
- height: 20,
565
- margin: 1,
566
- resizeMode: 'contain',
567
- },
568
434
  btnHolder: {
569
435
  marginHorizontal: isMobileOrTablet() ? 2 : 0,
570
436
  width: '100%',
@@ -577,38 +443,23 @@ const style = StyleSheet.create({
577
443
  resizeMode: 'contain',
578
444
  },
579
445
  roomNameContainer: {
580
- paddingHorizontal: 1,
581
- marginHorizontal: 1,
582
- height: 35,
583
- maxHeight: 30,
446
+ zIndex: 10,
447
+ flex: 1,
584
448
  flexDirection: 'row',
585
- justifyContent: 'flex-end',
586
449
  alignItems: 'center',
587
- zIndex: 10,
588
450
  },
589
- roomNameText: {
590
- fontSize: 18,
591
- color: $config.PRIMARY_FONT_COLOR,
592
- fontWeight: '500',
451
+ titleContainer: {
452
+ flexDirection: 'row',
593
453
  },
594
- badge: {
595
- lineHeight: 1,
596
- height: 20,
597
- minWidth: 20,
598
- display: 'flex',
599
- alignItems: 'center',
600
- justifyContent: 'center',
601
- backgroundColor: $config.PRIMARY_COLOR,
602
- color: $config.SECONDARY_FONT_COLOR,
603
- fontFamily: isIOS() ? 'Helvetica' : 'sans-serif',
604
- borderRadius: 10,
605
- position: 'absolute',
606
- paddingHorizontal: 5,
607
- top: 0,
608
- left: -2,
454
+ roomNameText: {
455
+ alignSelf: 'center',
456
+ fontSize: ThemeConfig.FontSize.normal,
457
+ color: $config.FONT_COLOR,
458
+ fontWeight: '600',
459
+ fontFamily: ThemeConfig.FontFamily.sansPro,
609
460
  },
610
461
  chip: {
611
- backgroundColor: $config.PRIMARY_COLOR,
462
+ backgroundColor: $config.PRIMARY_ACTION_BRAND_COLOR,
612
463
  borderRadius: 2.5,
613
464
  paddingHorizontal: 5,
614
465
  marginLeft: 5,
@@ -621,7 +472,7 @@ const style = StyleSheet.create({
621
472
  chipText: {
622
473
  fontFamily: isIOS() ? 'Helvetica' : 'sans-serif',
623
474
  fontSize: 12,
624
- color: $config.SECONDARY_FONT_COLOR,
475
+ color: $config.SECONDARY_ACTION_COLOR,
625
476
  },
626
477
  navControlBar: {
627
478
  width: '50%',
@@ -629,44 +480,11 @@ const style = StyleSheet.create({
629
480
  justifyContent: 'flex-end',
630
481
  zIndex: 9,
631
482
  },
632
- navContainer: {
633
- display: 'flex',
634
- flexDirection: 'row',
635
- justifyContent: 'space-around',
636
- backgroundColor: isWebInternal()
637
- ? $config.SECONDARY_FONT_COLOR
638
- : $config.SECONDARY_FONT_COLOR + '00',
639
- paddingVertical: 4,
640
- paddingHorizontal: isMobileOrTablet() ? 0 : 10,
641
- minHeight: 35,
642
- borderRadius: 10,
643
- },
644
- navItem: {
645
- height: '100%',
646
- alignItems: 'center',
647
- position: 'relative',
648
- },
649
483
  navSmItem: {
650
484
  flexGrow: 0,
651
485
  flexShrink: 0,
652
486
  flexBasis: '15%',
653
487
  },
654
- navItemSeparator: {
655
- backgroundColor: $config.PRIMARY_FONT_COLOR + '80',
656
- width: 1,
657
- height: '100%',
658
- marginHorizontal: 10,
659
- alignSelf: 'center',
660
- opacity: 0.8,
661
- },
662
- navItemSeparatorHorizontal: {
663
- backgroundColor: $config.PRIMARY_FONT_COLOR + '80',
664
- width: '100%',
665
- height: 1,
666
- marginVertical: 10,
667
- alignSelf: 'center',
668
- opacity: 0.8,
669
- },
670
488
  dropdownIconContainer: {
671
489
  flex: 1,
672
490
  paddingHorizontal: 5,