agora-appbuilder-core 3.0.10 → 3.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) hide show
  1. package/Readme.md +0 -6
  2. package/package.json +2 -2
  3. package/template/_package-lock.json +4719 -5862
  4. package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +0 -4
  5. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +0 -18
  6. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +0 -2
  7. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +26 -30
  8. package/template/agora-rn-uikit/src/Controls/Icons.ts +83 -30
  9. package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +6 -6
  10. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +0 -1
  11. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +0 -1
  12. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +0 -1
  13. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +0 -1
  14. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +0 -1
  15. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +0 -2
  16. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +0 -1
  17. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +0 -1
  18. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +0 -1
  19. package/template/agora-rn-uikit/src/Reducer/index.ts +0 -3
  20. package/template/agora-rn-uikit/src/Rtc/Create.tsx +1 -89
  21. package/template/agora-rn-uikit/src/RtcConfigure.tsx +2 -39
  22. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +5 -15
  23. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +9 -15
  24. package/template/agora-rn-uikit/src/index.ts +1 -3
  25. package/template/android/app/build.gradle +0 -1
  26. package/template/android/app/src/main/AndroidManifest.xml +15 -22
  27. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +0 -50
  28. package/template/android/build.gradle +3 -3
  29. package/template/babel.config.js +0 -1
  30. package/template/bridge/rtc/webNg/RtcEngine.ts +17 -110
  31. package/template/customization-api/sub-components.ts +1 -1
  32. package/template/customization-api/typeDefinition.ts +1 -2
  33. package/template/electron/index.html +27 -27
  34. package/template/electron/renderer/index.js +0 -1
  35. package/template/global.d.ts +4 -25
  36. package/template/index.rsdk.tsx +0 -1
  37. package/template/index.web.js +1 -2
  38. package/template/index.wsdk.tsx +1 -1
  39. package/template/ios/HelloWorld/Info.plist +1 -14
  40. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +0 -17
  41. package/template/metro.config.js +1 -1
  42. package/template/package.json +7 -18
  43. package/template/react-native-toast-message/index.d.ts +43 -43
  44. package/template/react-native-toast-message/src/colors/index.js +2 -3
  45. package/template/react-native-toast-message/src/components/base/index.js +59 -46
  46. package/template/react-native-toast-message/src/components/base/styles.js +32 -16
  47. package/template/react-native-toast-message/src/components/error.js +2 -3
  48. package/template/react-native-toast-message/src/components/info.js +2 -3
  49. package/template/react-native-toast-message/src/components/success.js +2 -3
  50. package/template/react-native-toast-message/src/index.js +31 -122
  51. package/template/react-native-toast-message/src/index.sdk.tsx +35 -125
  52. package/template/react-native-toast-message/src/styles.js +4 -3
  53. package/template/react-native-toast-message/src/styles.sdk.ts +4 -3
  54. package/template/src/App.tsx +0 -6
  55. package/template/src/AppWrapper.tsx +28 -63
  56. package/template/src/assets/icons.ts +102 -0
  57. package/template/src/atoms/HorizontalRule.tsx +1 -3
  58. package/template/src/atoms/PrimaryButton.tsx +26 -51
  59. package/template/src/atoms/SecondaryButton.tsx +5 -8
  60. package/template/src/atoms/TextInput.tsx +14 -12
  61. package/template/src/components/Chat.tsx +214 -86
  62. package/template/src/components/ChatContext.ts +1 -8
  63. package/template/src/components/ColorConfigure.tsx +1 -1
  64. package/template/src/components/ColorContext.ts +1 -1
  65. package/template/src/components/{Controls1.native.tsx → Controls.native.tsx} +4 -6
  66. package/template/src/components/Controls.tsx +42 -342
  67. package/template/src/components/DeviceConfigure.tsx +101 -461
  68. package/template/src/components/DeviceContext.tsx +4 -8
  69. package/template/src/components/EventsConfigure.tsx +7 -144
  70. package/template/src/components/GraphQLProvider.tsx +1 -1
  71. package/template/src/components/GridVideo.tsx +44 -59
  72. package/template/src/components/HostControlView.tsx +35 -114
  73. package/template/src/components/Navbar.tsx +398 -216
  74. package/template/src/components/NetworkQualityContext.tsx +20 -20
  75. package/template/src/components/ParticipantsView.tsx +154 -177
  76. package/template/src/components/PinnedVideo.tsx +120 -207
  77. package/template/src/components/Precall.native.tsx +119 -358
  78. package/template/src/components/Precall.tsx +135 -269
  79. package/template/src/components/RTMConfigure.tsx +4 -27
  80. package/template/src/components/Router.electron.ts +0 -1
  81. package/template/src/components/Router.native.ts +0 -1
  82. package/template/src/components/Router.sdk.ts +0 -1
  83. package/template/src/components/Router.ts +0 -1
  84. package/template/src/components/Settings.tsx +95 -26
  85. package/template/src/components/SettingsView.tsx +56 -251
  86. package/template/src/components/Share.tsx +273 -302
  87. package/template/src/components/StorageContext.tsx +3 -30
  88. package/template/src/components/chat-messages/useChatMessages.tsx +23 -69
  89. package/template/src/components/chat-ui/useChatUIControl.tsx +0 -7
  90. package/template/src/components/common/Error.tsx +6 -20
  91. package/template/src/components/common/Logo.tsx +15 -16
  92. package/template/src/components/contexts/LiveStreamDataContext.tsx +5 -10
  93. package/template/src/components/contexts/VideoMeetingDataContext.tsx +7 -37
  94. package/template/src/components/livestream/LiveStreamContext.tsx +36 -270
  95. package/template/src/components/livestream/Types.ts +14 -39
  96. package/template/src/components/livestream/index.ts +0 -1
  97. package/template/src/components/livestream/views/LiveStreamControls.tsx +4 -12
  98. package/template/src/components/participants/AllAudienceParticipants.tsx +30 -101
  99. package/template/src/components/participants/AllHostParticipants.tsx +34 -103
  100. package/template/src/components/participants/MeParticipant.tsx +38 -0
  101. package/template/src/components/participants/ParticipantName.tsx +7 -13
  102. package/template/src/components/participants/ParticipantSectionTitle.tsx +10 -35
  103. package/template/src/components/participants/RemoteParticipants.tsx +71 -0
  104. package/template/src/components/participants/ScreenshareParticipants.tsx +12 -144
  105. package/template/src/components/precall/{LocalMute1.native.tsx → LocalMute.native.tsx} +5 -21
  106. package/template/src/components/precall/LocalMute.tsx +14 -84
  107. package/template/src/components/precall/VideoPreview.native.tsx +3 -48
  108. package/template/src/components/precall/VideoPreview.tsx +7 -163
  109. package/template/src/components/precall/joinCallBtn.tsx +2 -15
  110. package/template/src/components/precall/meetingTitle.tsx +12 -15
  111. package/template/src/components/precall/selectDevice.tsx +21 -1
  112. package/template/src/components/precall/textInput.tsx +4 -32
  113. package/template/src/components/precall/usePreCall.tsx +0 -16
  114. package/template/src/components/styles.ts +21 -42
  115. package/template/src/components/useShareLink.tsx +14 -12
  116. package/template/src/language/default-labels/precallScreenLabels.ts +3 -3
  117. package/template/src/pages/Authenticate.tsx +15 -5
  118. package/template/src/pages/Create.tsx +165 -293
  119. package/template/src/pages/Join.tsx +67 -93
  120. package/template/src/pages/VideoCall.tsx +64 -89
  121. package/template/src/pages/video-call/DefaultLayouts.ts +4 -4
  122. package/template/src/pages/video-call/NameWithMicIcon.tsx +44 -120
  123. package/template/src/pages/video-call/RenderComponent.tsx +2 -3
  124. package/template/src/pages/video-call/VideoCallScreen.tsx +9 -45
  125. package/template/src/pages/video-call/VideoComponent.tsx +3 -18
  126. package/template/src/pages/video-call/VideoRenderer.tsx +60 -218
  127. package/template/src/rtm-events/constants.ts +0 -2
  128. package/template/src/subComponents/ChatBubble.tsx +83 -123
  129. package/template/src/subComponents/ChatContainer.tsx +84 -257
  130. package/template/src/subComponents/ChatInput.tsx +46 -61
  131. package/template/src/subComponents/Checkbox.native.tsx +5 -16
  132. package/template/src/subComponents/Checkbox.tsx +2 -2
  133. package/template/src/subComponents/CopyJoinInfo.tsx +58 -36
  134. package/template/src/subComponents/FallbackLogo.tsx +40 -122
  135. package/template/src/subComponents/LanguageSelector.tsx +1 -1
  136. package/template/src/subComponents/{LayoutIconDropdown1.native.tsx → LayoutIconDropdown.native.tsx} +18 -4
  137. package/template/src/subComponents/LayoutIconDropdown.tsx +134 -131
  138. package/template/src/subComponents/LocalAudioMute.tsx +27 -119
  139. package/template/src/subComponents/LocalEndCall.tsx +33 -71
  140. package/template/src/subComponents/LocalSwitchCamera.tsx +30 -17
  141. package/template/src/subComponents/LocalVideoMute.tsx +27 -117
  142. package/template/src/subComponents/Logo.tsx +4 -3
  143. package/template/src/subComponents/LogoutButton.tsx +1 -1
  144. package/template/src/subComponents/NetworkQualityPill.tsx +63 -60
  145. package/template/src/subComponents/OpenInNativeButton.tsx +3 -3
  146. package/template/src/subComponents/Recording.tsx +29 -28
  147. package/template/src/subComponents/RemoteAudioMute.tsx +29 -83
  148. package/template/src/subComponents/RemoteEndCall.tsx +5 -8
  149. package/template/src/subComponents/RemoteVideoMute.tsx +21 -74
  150. package/template/src/subComponents/ScreenShareNotice.tsx +8 -83
  151. package/template/src/subComponents/SelectDevice.tsx +61 -404
  152. package/template/src/subComponents/SelectOAuth.tsx +8 -9
  153. package/template/src/subComponents/ToastConfig.tsx +10 -150
  154. package/template/src/subComponents/chat/ChatParticipants.tsx +78 -187
  155. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +32 -95
  156. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +33 -29
  157. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +6 -6
  158. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +11 -24
  159. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +10 -17
  160. package/template/src/subComponents/recording/useRecording.tsx +27 -79
  161. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +70 -52
  162. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +2 -11
  163. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +4 -26
  164. package/template/src/utils/common.tsx +1 -155
  165. package/template/src/utils/index.tsx +0 -19
  166. package/template/src/utils/isMobileOrTablet.ts +2 -7
  167. package/template/src/utils/useButtonTemplate.tsx +0 -1
  168. package/template/src/utils/useMuteToggleLocal.ts +3 -54
  169. package/template/web/index.html +0 -5
  170. package/template/webpack.commons.js +8 -13
  171. package/template/webpack.web.config.js +0 -1
  172. package/template/agora-rn-uikit/src/Reducer/ActiveSpeakerDetected.ts +0 -11
  173. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +0 -24
  174. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +0 -11
  175. package/template/android/app/src/main/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  176. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  177. package/template/android/app/src/main/res/values/colors.xml +0 -7
  178. package/template/react-native-toast-message/src/components/checkbox.js +0 -178
  179. package/template/react-native.config.js +0 -7
  180. package/template/src/assets/font-styles.css +0 -329
  181. package/template/src/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  182. package/template/src/assets/fonts/icomoon.ttf +0 -0
  183. package/template/src/assets/permission.png +0 -0
  184. package/template/src/assets/selection.json +0 -1
  185. package/template/src/atoms/ActionMenu.tsx +0 -236
  186. package/template/src/atoms/AnimatedActiveSpeaker.native.tsx +0 -71
  187. package/template/src/atoms/AnimatedActiveSpeaker.tsx +0 -84
  188. package/template/src/atoms/AnimatedRings.native.tsx +0 -68
  189. package/template/src/atoms/AnimatedRings.tsx +0 -70
  190. package/template/src/atoms/Card.tsx +0 -61
  191. package/template/src/atoms/CircularProgress.native.tsx +0 -121
  192. package/template/src/atoms/CircularProgress.tsx +0 -102
  193. package/template/src/atoms/CustomIcon.tsx +0 -88
  194. package/template/src/atoms/CustomSwitch.tsx +0 -287
  195. package/template/src/atoms/Dropdown.tsx +0 -306
  196. package/template/src/atoms/IconButton.tsx +0 -162
  197. package/template/src/atoms/ImageIcon.tsx +0 -98
  198. package/template/src/atoms/InfoBubble.tsx +0 -291
  199. package/template/src/atoms/Input.tsx +0 -87
  200. package/template/src/atoms/InviteInfo.tsx +0 -166
  201. package/template/src/atoms/LinkButton.tsx +0 -28
  202. package/template/src/atoms/OutlineButton.tsx +0 -61
  203. package/template/src/atoms/ParticipantsCount.tsx +0 -73
  204. package/template/src/atoms/Popup.tsx +0 -147
  205. package/template/src/atoms/RecordingInfo.tsx +0 -49
  206. package/template/src/atoms/Spacer.tsx +0 -22
  207. package/template/src/atoms/TertiaryButton.tsx +0 -78
  208. package/template/src/atoms/Toggle.tsx +0 -47
  209. package/template/src/atoms/Tooltip.native.tsx +0 -65
  210. package/template/src/atoms/Tooltip.tsx +0 -94
  211. package/template/src/atoms/UserAvatar.tsx +0 -60
  212. package/template/src/components/CommonStyles.ts +0 -44
  213. package/template/src/components/ToastComponent.tsx +0 -8
  214. package/template/src/components/participants/Participant.tsx +0 -302
  215. package/template/src/components/participants/UserActionMenuOptions.tsx +0 -398
  216. package/template/src/components/popups/InvitePopup.tsx +0 -115
  217. package/template/src/components/popups/StopRecordingPopup.tsx +0 -114
  218. package/template/src/components/precall/PermissionHelper.native.tsx +0 -5
  219. package/template/src/components/precall/PermissionHelper.tsx +0 -126
  220. package/template/src/components/precall/PreCallSettings.tsx +0 -52
  221. package/template/src/components/useToast.tsx +0 -41
  222. package/template/src/components/useVideoCall.tsx +0 -65
  223. package/template/src/pages/Endcall.tsx +0 -148
  224. package/template/src/pages/video-call/ActionSheet.native.tsx +0 -215
  225. package/template/src/pages/video-call/ActionSheet.tsx +0 -226
  226. package/template/src/pages/video-call/ActionSheetContent.tsx +0 -479
  227. package/template/src/pages/video-call/ActionSheetHandle.tsx +0 -38
  228. package/template/src/pages/video-call/ActionSheetStyles.css +0 -138
  229. package/template/src/pages/video-call/SidePanelHeader.tsx +0 -190
  230. package/template/src/pages/video-call/VideoCallMobileView.tsx +0 -139
  231. package/template/src/pages/video-call/VideoCallScreen.native.tsx +0 -37
  232. package/template/src/subComponents/ChatInput.ios.tsx +0 -237
  233. package/template/src/subComponents/EndcallPopup.tsx +0 -107
  234. package/template/src/subComponents/LayoutIconButton.tsx +0 -201
  235. package/template/src/subComponents/RemoteMutePopup.tsx +0 -193
  236. package/template/src/subComponents/RemoveMeetingPopup.tsx +0 -109
  237. package/template/src/subComponents/RemoveScreensharePopup.tsx +0 -109
  238. package/template/src/subComponents/SelectDeviceSettings.backup.tsx +0 -207
  239. package/template/src/subComponents/SidePanelHeader.tsx +0 -112
  240. package/template/src/theme/index.ts +0 -46
  241. package/template/src/utils/PlatformWrapper.tsx +0 -21
  242. package/template/src/utils/hexadecimalTransparency.ts +0 -108
  243. package/template/src/utils/pendingStateUpdateHelper.ts +0 -19
  244. package/template/src/utils/useFocus.tsx +0 -46
  245. package/template/src/utils/useIsActiveSpeaker.ts +0 -27
  246. package/template/src/utils/useIsHandRaised.ts +0 -13
  247. package/template/src/utils/useRemoteEndScreenshare.ts +0 -26
  248. package/template/src/utils/useRemoteRequest.ts +0 -84
@@ -10,72 +10,66 @@
10
10
  *********************************************
11
11
  */
12
12
  import React, {useContext, useState} from 'react';
13
- import {
14
- View,
15
- Text,
16
- StyleSheet,
17
- TextStyle,
18
- useWindowDimensions,
19
- } from 'react-native';
13
+ import {View, Text, StyleSheet, ViewStyle, TextStyle} from 'react-native';
14
+ import icons from '../assets/icons';
20
15
  import Settings, {
21
16
  SettingsWithViewWrapper,
22
17
  SettingsIconButtonProps,
23
18
  } from './Settings';
24
19
  import CopyJoinInfo, {CopyJoinInfoProps} from '../subComponents/CopyJoinInfo';
25
20
  import {SidePanelType} from '../subComponents/SidePanelEnum';
21
+ import {navHolder} from '../../theme.json';
26
22
  import ChatContext from '../components/ChatContext';
27
23
  import isMobileOrTablet from '../utils/isMobileOrTablet';
24
+ import {
25
+ BtnTemplate,
26
+ BtnTemplateInterface,
27
+ ImageIcon,
28
+ } from '../../agora-rn-uikit';
28
29
  import LiveStreamContext from './livestream';
29
30
  import {numFormatter} from '../utils/index';
30
31
  import {useLayout} from '../utils/useLayout';
31
32
  import {useChatNotification} from '../components/chat-notification/useChatNotification';
32
33
  import useLayoutsData from '../pages/video-call/useLayoutsData';
33
34
  import {
34
- BREAKPOINTS,
35
35
  isAndroid,
36
36
  isIOS,
37
- isMobileUA,
38
37
  isValidReactComponent,
39
38
  isWebInternal,
40
- trimText,
41
- useIsDesktop,
42
39
  } from '../utils/common';
43
40
  import {useChangeDefaultLayout} from '../pages/video-call/DefaultLayouts';
44
41
  import {useRecording} from '../subComponents/recording/useRecording';
45
42
  import LayoutIconDropdown from '../subComponents/LayoutIconDropdown';
43
+ import DimensionContext from './dimension/DimensionContext';
46
44
  import {useString} from '../utils/useString';
47
45
  import {useMeetingInfo} from './meeting-info/useMeetingInfo';
48
46
  import {useSidePanel} from '../utils/useSidePanel';
49
47
  import {useChatUIControl} from './chat-ui/useChatUIControl';
50
- import LayoutIconButton from '../subComponents/LayoutIconButton';
51
48
  import {
52
49
  ButtonTemplateName,
53
50
  useButtonTemplate,
54
51
  } from '../utils/useButtonTemplate';
55
52
  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';
64
53
 
65
- export const ParticipantsCountView = ({
66
- isMobileView = false,
67
- }: {
68
- isMobileView?: boolean;
69
- }) => {
70
- const {onlineUsersCount} = useContext(ChatContext);
71
- return isMobileView ? (
72
- <Text>
73
- People {'\n'} ({numFormatter(onlineUsersCount)})
74
- </Text>
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>
75
61
  ) : (
62
+ <View style={{marginHorizontal: 2}}></View>
63
+ );
64
+ };
65
+
66
+ const ParticipantsCountView = () => {
67
+ const {onlineUsersCount} = useContext(ChatContext);
68
+
69
+ return (
76
70
  <>
77
71
  {onlineUsersCount !== 0 && (
78
- <View style={[{justifyContent: 'center'}]}>
72
+ <View style={[style.navItem, {justifyContent: 'center'}]}>
79
73
  <View style={style.chip}>
80
74
  {onlineUsersCount > 0 && (
81
75
  <Text style={style.chipText}>
@@ -96,61 +90,54 @@ interface ParticipantsIconButtonProps {
96
90
  left?: number;
97
91
  bottom?: number;
98
92
  };
99
- isOnActionSheet?: boolean;
100
- render?: (onPress: () => void, isPanelActive: boolean) => JSX.Element;
93
+ buttonTemplateName?: ButtonTemplateName;
94
+ render?: (
95
+ onPress: () => void,
96
+ isPanelActive: boolean,
97
+ buttonTemplateName?: ButtonTemplateName,
98
+ ) => JSX.Element;
101
99
  }
102
- export const ParticipantsIconButton = (props: ParticipantsIconButtonProps) => {
100
+ const ParticipantsIconButton = (props: ParticipantsIconButtonProps) => {
103
101
  const {
104
102
  liveStreamingRequestAlertIconPosition = {
105
- top: 0,
106
- right: 0,
103
+ top: isWebInternal() ? -10 : 2,
107
104
  left: undefined,
105
+ right: undefined,
108
106
  bottom: undefined,
109
107
  },
110
- isOnActionSheet = false,
111
108
  } = props;
112
109
  const {sidePanel, setSidePanel} = useSidePanel();
113
110
  const {isPendingRequestToReview, setLastCheckedRequestTimestamp} =
114
111
  useContext(LiveStreamContext);
115
112
  //commented for v1 release
116
113
  //const participantsLabel = useString('participantsLabel')();
117
- const {onlineUsersCount} = useContext(ChatContext);
118
- //const participantsLabel = `Participants (${numFormatter(onlineUsersCount)})`;
119
- const participantsLabel = `People`;
114
+ const participantsLabel = 'Participants';
115
+ const defaultTemplateValue = useButtonTemplate().buttonTemplateName;
116
+ const {buttonTemplateName = defaultTemplateValue} = props;
120
117
  const isPanelActive = sidePanel === SidePanelType.Participants;
121
-
122
118
  const onPress = () => {
123
119
  isPanelActive
124
120
  ? setSidePanel(SidePanelType.None)
125
121
  : setSidePanel(SidePanelType.Participants);
126
- // $config.EVENT_MODE && $config.RAISE_HAND;
127
- //setLastCheckedRequestTimestamp(new Date().getTime());
122
+ $config.EVENT_MODE && $config.RAISE_HAND;
123
+ setLastCheckedRequestTimestamp(new Date().getTime());
128
124
  };
129
- let iconButtonProps: IconButtonProps = {
125
+ let btnTemplateProps: BtnTemplateInterface = {
130
126
  onPress: onPress,
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
- },
127
+ name: isPanelActive ? 'participantFilledIcon' : 'participantIcon',
144
128
  };
145
- iconButtonProps.isOnActionSheet = isOnActionSheet;
146
129
 
130
+ if (buttonTemplateName === ButtonTemplateName.bottomBar) {
131
+ btnTemplateProps.btnText = participantsLabel;
132
+ btnTemplateProps.style = Styles.localButtonWithoutBG as Object;
133
+ } else {
134
+ btnTemplateProps.style = style.btnHolder;
135
+ }
147
136
  return props?.render ? (
148
- props.render(onPress, isPanelActive)
137
+ props.render(onPress, isPanelActive, buttonTemplateName)
149
138
  ) : (
150
139
  <>
151
- <View>
152
- <IconButton {...iconButtonProps} />
153
- </View>
140
+ <BtnTemplate {...btnTemplateProps} />
154
141
  {$config.EVENT_MODE && $config.RAISE_HAND && isPendingRequestToReview && (
155
142
  <View
156
143
  style={{
@@ -159,11 +146,14 @@ export const ParticipantsIconButton = (props: ParticipantsIconButtonProps) => {
159
146
  bottom: liveStreamingRequestAlertIconPosition.bottom,
160
147
  right: liveStreamingRequestAlertIconPosition.right,
161
148
  left: liveStreamingRequestAlertIconPosition.left,
162
- backgroundColor: $config.SEMANTIC_ERROR,
163
- width: 12,
164
- height: 12,
165
- borderRadius: 10,
166
- }}></View>
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>
167
157
  )}
168
158
  </>
169
159
  );
@@ -177,99 +167,61 @@ interface ChatIconButtonProps {
177
167
  bottom?: number;
178
168
  };
179
169
  badgeTextStyle?: TextStyle;
170
+ buttonTemplateName?: ButtonTemplateName;
180
171
  render?: (
181
172
  onPress: () => void,
182
173
  isPanelActive: boolean,
183
174
  totalUnreadCount: number,
175
+ buttonTemplateName?: ButtonTemplateName,
184
176
  ) => JSX.Element;
185
- isMobileView?: boolean;
186
- isOnActionSheet?: boolean;
187
177
  }
188
178
 
189
- export const ChatIconButton = (props: ChatIconButtonProps) => {
190
- const {sidePanel, setSidePanel} = useSidePanel();
179
+ const ChatIconButton = (props: ChatIconButtonProps) => {
191
180
  const {
192
181
  badgeContainerPosition = {
193
- top: 0,
194
- right: 0,
182
+ top: isWebInternal() ? -10 : 2,
195
183
  left: undefined,
184
+ right: undefined,
196
185
  bottom: undefined,
197
- zIndex: 999,
198
186
  },
199
187
  badgeTextStyle = {
200
- color: $config.PRIMARY_ACTION_TEXT_COLOR,
188
+ color: $config.SECONDARY_FONT_COLOR,
201
189
  fontSize: 12,
202
- textAlign: 'center',
203
190
  },
204
- isOnActionSheet = false,
205
191
  } = props;
206
192
  const {setUnreadGroupMessageCount, totalUnreadCount} = useChatNotification();
207
193
  const {setGroupActive, setPrivateActive, setSelectedChatUserId} =
208
194
  useChatUIControl();
209
-
195
+ const {sidePanel, setSidePanel} = useSidePanel();
210
196
  //commented for v1 release
211
197
  //const chatLabel = useString('chatLabel')();
212
198
  const chatLabel = 'Chat';
199
+ const defaultTemplateValue = useButtonTemplate().buttonTemplateName;
200
+ const {buttonTemplateName = defaultTemplateValue} = props;
213
201
  const isPanelActive = sidePanel === SidePanelType.Chat;
214
202
  const onPress = () => {
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
- }
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);
227
212
  }
228
213
  };
229
- let iconButtonProps: IconButtonProps = {
214
+ let btnTemplateProps: BtnTemplateInterface = {
230
215
  onPress: onPress,
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
- },
216
+ name: isPanelActive ? 'chatIconFilled' : 'chatIcon',
244
217
  };
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 = () => {
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) => {
273
225
  return (
274
226
  <View
275
227
  style={{
@@ -278,21 +230,26 @@ export const ChatIconButton = (props: ChatIconButtonProps) => {
278
230
  bottom: badgeContainerPosition?.bottom,
279
231
  left: badgeContainerPosition?.left,
280
232
  right: badgeContainerPosition?.right,
281
- borderRadius: 10,
282
- width: 12,
283
- height: 12,
284
- backgroundColor: $config.SEMANTIC_ERROR,
285
- }}></View>
233
+ }}>
234
+ <View style={style.badge}>
235
+ <Text
236
+ style={{
237
+ ...badgeTextStyle,
238
+ }}>
239
+ {numFormatter(badgeCount)}
240
+ </Text>
241
+ </View>
242
+ </View>
286
243
  );
287
244
  };
288
245
  return props?.render ? (
289
- props.render(onPress, isPanelActive, totalUnreadCount)
246
+ props.render(onPress, isPanelActive, totalUnreadCount, buttonTemplateName)
290
247
  ) : (
291
248
  <>
292
- <View>
293
- <IconButton {...iconButtonProps} />
294
- {totalUnreadCount !== 0 && renderUnreadMessageIndicator()}
295
- </View>
249
+ <BtnTemplate {...btnTemplateProps} />
250
+ {sidePanel !== SidePanelType.Chat &&
251
+ totalUnreadCount !== 0 &&
252
+ renderBadge(totalUnreadCount)}
296
253
  </>
297
254
  );
298
255
  };
@@ -304,10 +261,89 @@ interface LayoutIconButtonProps {
304
261
  left?: number;
305
262
  bottom?: number;
306
263
  };
307
-
308
- render?: (onPress: () => void) => JSX.Element;
264
+ buttonTemplateName?: ButtonTemplateName;
265
+ render?: (
266
+ onPress: () => void,
267
+ buttonTemplateName?: ButtonTemplateName,
268
+ ) => JSX.Element;
309
269
  }
310
270
 
271
+ const LayoutIconButton = (props: LayoutIconButtonProps) => {
272
+ const {modalPosition} = props;
273
+
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
+ };
346
+
311
347
  const SettingsIconButton = (props: SettingsIconButtonProps) => {
312
348
  return <Settings {...props} />;
313
349
  };
@@ -319,62 +355,158 @@ const Navbar = () => {
319
355
  //commented for v1 release
320
356
  //const recordingLabel = useString('recordingLabel')();
321
357
  const recordingLabel = 'Recording';
322
- const isDesktop = useIsDesktop();
323
- const {audienceUids, hostUids} = useLiveStreamDataContext();
324
358
  const {
325
359
  data: {meetingTitle},
326
360
  } = useMeetingInfo();
327
361
 
328
362
  const {isRecordingActive} = useRecording();
329
- const {onlineUsersCount} = useContext(ChatContext);
330
- const {width} = useWindowDimensions();
363
+ const {getDimensionData} = useContext(DimensionContext);
364
+ const {isDesktop} = getDimensionData();
365
+ const layoutsData = useLayoutsData();
366
+ const isNative = isIOS() || isAndroid();
367
+
331
368
  return (
332
369
  <View
333
- testID="videocall-topbar"
334
370
  style={[
335
371
  isWebInternal() ? style.navHolder : style.navHolderNative,
336
- {
337
- paddingHorizontal: isDesktop('toolbar') ? 32 : 10,
338
- zIndex: 999,
339
- },
372
+ {backgroundColor: $config.SECONDARY_FONT_COLOR + 80},
373
+ isWebInternal()
374
+ ? {
375
+ justifyContent: isMobileOrTablet() ? 'space-between' : 'flex-end',
376
+ }
377
+ : {},
340
378
  ]}>
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
- <></>
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>
356
406
  )}
357
407
  </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
+ )}
358
457
  </View>
359
- {width > BREAKPOINTS.sm || isMobileUA() ? (
360
- <View style={style.navControlBar} testID="videocall-navcontrols">
361
- <View testID="videocall-participantsicon" style={{marginRight: 10}}>
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]}>
362
476
  <ParticipantsIconButton />
363
477
  </View>
364
- {$config.CHAT && (
478
+ {$config.CHAT ? (
365
479
  <>
366
- <View testID="videocall-chaticon" style={{marginHorizontal: 10}}>
480
+ <RenderSeparator />
481
+ <View style={[style.navItem, style.navSmItem]}>
367
482
  <ChatIconButton />
368
483
  </View>
369
484
  </>
485
+ ) : (
486
+ <></>
370
487
  )}
371
- <View testID="videocall-settingsicon" style={{marginLeft: 10}}>
372
- <SettingsIconButtonWithWrapper />
373
- </View>
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
+ )}
506
+ <RenderSeparator />
507
+ <SettingsIconButtonWithWrapper />
374
508
  </View>
375
- ) : (
376
- <></>
377
- )}
509
+ </View>
378
510
  </View>
379
511
  );
380
512
  };
@@ -396,41 +528,43 @@ export const NavBarComponentsArray: NavBarComponentsArrayProps = [
396
528
  ];
397
529
 
398
530
  const style = StyleSheet.create({
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',
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)',
422
538
  },
539
+ navHolder: navHolder as ViewStyle,
423
540
  navHolderNative: {
424
541
  position: 'relative',
425
542
  width: '100%',
426
543
  height: '8%',
427
- backgroundColor:
428
- $config.SECONDARY_ACTION_COLOR + hexadecimalTransparency['80%'],
544
+ backgroundColor: $config.SECONDARY_FONT_COLOR + '80',
429
545
  flexDirection: 'row',
430
546
  alignItems: 'center',
431
547
  paddingHorizontal: 10,
432
548
  justifyContent: 'space-between',
433
549
  },
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
+ },
434
568
  btnHolder: {
435
569
  marginHorizontal: isMobileOrTablet() ? 2 : 0,
436
570
  width: '100%',
@@ -443,23 +577,38 @@ const style = StyleSheet.create({
443
577
  resizeMode: 'contain',
444
578
  },
445
579
  roomNameContainer: {
446
- zIndex: 10,
447
- flex: 1,
580
+ paddingHorizontal: 1,
581
+ marginHorizontal: 1,
582
+ height: 35,
583
+ maxHeight: 30,
448
584
  flexDirection: 'row',
585
+ justifyContent: 'flex-end',
449
586
  alignItems: 'center',
450
- },
451
- titleContainer: {
452
- flexDirection: 'row',
587
+ zIndex: 10,
453
588
  },
454
589
  roomNameText: {
455
- alignSelf: 'center',
456
- fontSize: ThemeConfig.FontSize.normal,
457
- color: $config.FONT_COLOR,
458
- fontWeight: '600',
459
- fontFamily: ThemeConfig.FontFamily.sansPro,
590
+ fontSize: 18,
591
+ color: $config.PRIMARY_FONT_COLOR,
592
+ fontWeight: '500',
593
+ },
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,
460
609
  },
461
610
  chip: {
462
- backgroundColor: $config.PRIMARY_ACTION_BRAND_COLOR,
611
+ backgroundColor: $config.PRIMARY_COLOR,
463
612
  borderRadius: 2.5,
464
613
  paddingHorizontal: 5,
465
614
  marginLeft: 5,
@@ -472,7 +621,7 @@ const style = StyleSheet.create({
472
621
  chipText: {
473
622
  fontFamily: isIOS() ? 'Helvetica' : 'sans-serif',
474
623
  fontSize: 12,
475
- color: $config.SECONDARY_ACTION_COLOR,
624
+ color: $config.SECONDARY_FONT_COLOR,
476
625
  },
477
626
  navControlBar: {
478
627
  width: '50%',
@@ -480,11 +629,44 @@ const style = StyleSheet.create({
480
629
  justifyContent: 'flex-end',
481
630
  zIndex: 9,
482
631
  },
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
+ },
483
649
  navSmItem: {
484
650
  flexGrow: 0,
485
651
  flexShrink: 0,
486
652
  flexBasis: '15%',
487
653
  },
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
+ },
488
670
  dropdownIconContainer: {
489
671
  flex: 1,
490
672
  paddingHorizontal: 5,