@100mslive/roomkit-react 0.1.6-alpha.0 → 0.1.6-alpha.1

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 (130) hide show
  1. package/dist/{HLSView-PY2FKWX3.js → HLSView-HNVYG5VE.js} +208 -118
  2. package/dist/HLSView-HNVYG5VE.js.map +7 -0
  3. package/dist/Prebuilt/AppContext.d.ts +1 -1
  4. package/dist/Prebuilt/components/Chat/ChatFooter.d.ts +7 -0
  5. package/dist/Prebuilt/components/Connection/ConnectionIndicator.d.ts +6 -0
  6. package/dist/Prebuilt/components/Connection/TileConnection.d.ts +10 -0
  7. package/dist/Prebuilt/components/Footer/ChatToggle.d.ts +4 -0
  8. package/dist/Prebuilt/components/Footer/RoleAccordion.d.ts +14 -0
  9. package/dist/Prebuilt/components/Footer/RoleOptions.d.ts +6 -0
  10. package/dist/Prebuilt/components/Header/StreamActions.d.ts +11 -0
  11. package/dist/Prebuilt/components/Leave/DesktopLeaveRoom.d.ts +4 -3
  12. package/dist/Prebuilt/components/Leave/EndSessionContent.d.ts +4 -3
  13. package/dist/Prebuilt/components/Leave/LeaveCard.d.ts +1 -2
  14. package/dist/Prebuilt/components/Leave/LeaveSessionContent.d.ts +3 -1
  15. package/dist/Prebuilt/components/Leave/MwebLeaveRoom.d.ts +4 -3
  16. package/dist/Prebuilt/components/MoreSettings/SplitComponents/MwebOptions.d.ts +6 -0
  17. package/dist/Prebuilt/components/Preview/PreviewContainer.d.ts +3 -0
  18. package/dist/Prebuilt/components/Preview/PreviewJoin.d.ts +16 -0
  19. package/dist/Prebuilt/components/RoleChangeRequestModal.d.ts +2 -0
  20. package/dist/Prebuilt/components/SecondaryTiles.d.ts +1 -1
  21. package/dist/Prebuilt/components/VideoLayouts/EqualProminence.d.ts +1 -1
  22. package/dist/Prebuilt/components/VideoLayouts/Grid.d.ts +1 -0
  23. package/dist/Prebuilt/components/VideoLayouts/GridLayout.d.ts +5 -3
  24. package/dist/Prebuilt/components/VideoLayouts/ProminenceLayout.d.ts +6 -3
  25. package/dist/Prebuilt/components/VideoLayouts/RoleProminence.d.ts +1 -1
  26. package/dist/Prebuilt/components/VideoLayouts/ScreenshareLayout.d.ts +1 -1
  27. package/dist/Prebuilt/components/VideoLayouts/interface.d.ts +1 -0
  28. package/dist/Prebuilt/components/hooks/useAutoStartStreaming.d.ts +1 -0
  29. package/dist/Prebuilt/components/hooks/useRedirectToLeave.d.ts +3 -0
  30. package/dist/Prebuilt/components/hooks/useTileLayout.d.ts +2 -1
  31. package/dist/Prebuilt/components/hooks/useVideoTileLayout.d.ts +2 -0
  32. package/dist/Prebuilt/layouts/SidePane.d.ts +4 -1
  33. package/dist/Prebuilt/layouts/VideoStreamingSection.d.ts +2 -1
  34. package/dist/{VirtualBackground-AYDHYLIZ.js → VirtualBackground-UM2FOUHQ.js} +3 -3
  35. package/dist/{chunk-E2M2ZSOL.js → chunk-364HP22I.js} +2 -2
  36. package/dist/{chunk-RXTHJUMZ.js → chunk-LYSAET4G.js} +946 -390
  37. package/dist/chunk-LYSAET4G.js.map +7 -0
  38. package/dist/{chunk-GQD2AGWW.js → chunk-POE7H4IE.js} +12 -2
  39. package/dist/{chunk-GQD2AGWW.js.map → chunk-POE7H4IE.js.map} +2 -2
  40. package/dist/{conference-V2XZGTKU.js → conference-UWLJHMB2.js} +1116 -1316
  41. package/dist/conference-UWLJHMB2.js.map +7 -0
  42. package/dist/index.cjs.js +6080 -5631
  43. package/dist/index.cjs.js.map +4 -4
  44. package/dist/index.js +2 -2
  45. package/dist/meta.cjs.json +741 -493
  46. package/dist/meta.esbuild.json +782 -529
  47. package/package.json +8 -7
  48. package/src/Prebuilt/App.tsx +10 -21
  49. package/src/Prebuilt/AppContext.tsx +1 -1
  50. package/src/Prebuilt/IconButton.jsx +10 -0
  51. package/src/Prebuilt/common/PeersSorter.ts +1 -1
  52. package/src/Prebuilt/common/constants.js +1 -2
  53. package/src/Prebuilt/common/utils.js +1 -1
  54. package/src/Prebuilt/components/AppData/AppData.jsx +8 -2
  55. package/src/Prebuilt/components/AppData/useUISettings.js +6 -6
  56. package/src/Prebuilt/components/AudioVideoToggle.jsx +8 -6
  57. package/src/Prebuilt/components/Chat/Chat.jsx +23 -6
  58. package/src/Prebuilt/components/Chat/ChatBody.jsx +20 -21
  59. package/src/Prebuilt/components/Chat/{ChatFooter.jsx → ChatFooter.tsx} +38 -13
  60. package/src/Prebuilt/components/Chat/ChatParticipantHeader.jsx +38 -27
  61. package/src/Prebuilt/components/Chat/useEmojiPickerStyles.js +5 -4
  62. package/src/Prebuilt/components/Connection/{ConnectionIndicator.jsx → ConnectionIndicator.tsx} +12 -4
  63. package/src/Prebuilt/components/Connection/{TileConnection.jsx → TileConnection.tsx} +20 -6
  64. package/src/Prebuilt/components/EmojiReaction.jsx +2 -6
  65. package/src/Prebuilt/components/Footer/{ChatToggle.jsx → ChatToggle.tsx} +13 -3
  66. package/src/Prebuilt/components/Footer/Footer.tsx +15 -6
  67. package/src/Prebuilt/components/Footer/ParticipantList.jsx +15 -47
  68. package/src/Prebuilt/components/Footer/{RoleAccordion.jsx → RoleAccordion.tsx} +33 -17
  69. package/src/Prebuilt/components/Footer/RoleOptions.tsx +155 -0
  70. package/src/Prebuilt/components/FullPageProgress.jsx +3 -3
  71. package/src/Prebuilt/components/HMSVideo/Controls.jsx +1 -0
  72. package/src/Prebuilt/components/HMSVideo/HLSQualitySelector.jsx +39 -17
  73. package/src/Prebuilt/components/HMSVideo/HMSVideo.jsx +2 -2
  74. package/src/Prebuilt/components/HMSVideo/VideoProgress.jsx +5 -6
  75. package/src/Prebuilt/components/HMSVideo/VolumeControl.jsx +1 -1
  76. package/src/Prebuilt/components/Header/{StreamActions.jsx → StreamActions.tsx} +23 -9
  77. package/src/Prebuilt/components/Header/common.jsx +5 -2
  78. package/src/Prebuilt/components/IconButtonWithOptions/IconButtonWithOptions.jsx +6 -1
  79. package/src/Prebuilt/components/InsetTile.tsx +14 -8
  80. package/src/Prebuilt/components/Leave/DesktopLeaveRoom.tsx +21 -11
  81. package/src/Prebuilt/components/Leave/EndSessionContent.tsx +2 -5
  82. package/src/Prebuilt/components/Leave/LeaveCard.tsx +1 -3
  83. package/src/Prebuilt/components/Leave/LeaveRoom.tsx +28 -25
  84. package/src/Prebuilt/components/Leave/LeaveSessionContent.tsx +8 -2
  85. package/src/Prebuilt/components/Leave/MwebLeaveRoom.tsx +8 -8
  86. package/src/Prebuilt/components/MoreSettings/ChangeNameContent.jsx +4 -0
  87. package/src/Prebuilt/components/MoreSettings/MoreSettings.tsx +1 -1
  88. package/src/Prebuilt/components/MoreSettings/SplitComponents/DesktopOptions.tsx +9 -23
  89. package/src/Prebuilt/components/MoreSettings/SplitComponents/{MwebOptions.jsx → MwebOptions.tsx} +88 -27
  90. package/src/Prebuilt/components/Notifications/Notifications.jsx +30 -21
  91. package/src/Prebuilt/components/Notifications/ReconnectNotifications.jsx +5 -11
  92. package/src/Prebuilt/components/Pagination.tsx +14 -12
  93. package/src/Prebuilt/components/Preview/{PreviewContainer.jsx → PreviewContainer.tsx} +11 -2
  94. package/src/Prebuilt/components/Preview/PreviewForm.tsx +6 -8
  95. package/src/Prebuilt/components/Preview/{PreviewJoin.jsx → PreviewJoin.tsx} +43 -19
  96. package/src/Prebuilt/components/{RoleChangeRequestModal.jsx → RoleChangeRequestModal.tsx} +32 -15
  97. package/src/Prebuilt/components/ScreenshareTile.jsx +6 -7
  98. package/src/Prebuilt/components/SecondaryTiles.tsx +12 -10
  99. package/src/Prebuilt/components/TileMenu/TileMenu.jsx +1 -1
  100. package/src/Prebuilt/components/TileMenu/TileMenuContent.jsx +14 -10
  101. package/src/Prebuilt/components/Toast/ToastConfig.jsx +5 -4
  102. package/src/Prebuilt/components/VideoLayouts/EqualProminence.tsx +13 -10
  103. package/src/Prebuilt/components/VideoLayouts/Grid.tsx +36 -34
  104. package/src/Prebuilt/components/VideoLayouts/GridLayout.tsx +33 -15
  105. package/src/Prebuilt/components/VideoLayouts/ProminenceLayout.tsx +45 -31
  106. package/src/Prebuilt/components/VideoLayouts/RoleProminence.tsx +12 -9
  107. package/src/Prebuilt/components/VideoLayouts/ScreenshareLayout.tsx +25 -9
  108. package/src/Prebuilt/components/VideoLayouts/interface.ts +1 -0
  109. package/src/Prebuilt/components/VideoTile.jsx +45 -53
  110. package/src/Prebuilt/components/conference.jsx +71 -74
  111. package/src/Prebuilt/components/hooks/useAutoStartStreaming.tsx +57 -0
  112. package/src/Prebuilt/components/hooks/useMetadata.jsx +12 -3
  113. package/src/Prebuilt/components/hooks/useRedirectToLeave.tsx +34 -0
  114. package/src/Prebuilt/components/hooks/useRoleProminencePeers.tsx +1 -1
  115. package/src/Prebuilt/components/hooks/useTileLayout.tsx +24 -18
  116. package/src/Prebuilt/components/hooks/useVideoTileLayout.ts +4 -0
  117. package/src/Prebuilt/layouts/EmbedView.jsx +1 -11
  118. package/src/Prebuilt/layouts/HLSView.jsx +152 -82
  119. package/src/Prebuilt/layouts/SidePane.tsx +15 -3
  120. package/src/Prebuilt/layouts/VideoStreamingSection.tsx +11 -47
  121. package/src/Prebuilt/plugins/FlyingEmoji.jsx +14 -2
  122. package/src/Prebuilt/services/FeatureFlags.jsx +0 -1
  123. package/src/VideoTile/StyledVideoTile.tsx +1 -0
  124. package/dist/HLSView-PY2FKWX3.js.map +0 -7
  125. package/dist/chunk-RXTHJUMZ.js.map +0 -7
  126. package/dist/conference-V2XZGTKU.js.map +0 -7
  127. package/src/Prebuilt/components/AudioLevel/BeamSpeakerLabelsLogging.jsx +0 -16
  128. package/src/Prebuilt/components/VideoList.jsx +0 -73
  129. /package/dist/{VirtualBackground-AYDHYLIZ.js.map → VirtualBackground-UM2FOUHQ.js.map} +0 -0
  130. /package/dist/{chunk-E2M2ZSOL.js.map → chunk-364HP22I.js.map} +0 -0
@@ -15,11 +15,9 @@ import { useDropdownList } from '../hooks/useDropdownList';
15
15
 
16
16
  export const DesktopLeaveRoom = ({
17
17
  leaveRoom,
18
- stopStream,
19
18
  screenType,
20
19
  }: {
21
- leaveRoom: () => void;
22
- stopStream: () => Promise<void>;
20
+ leaveRoom: (args: { endstream: boolean }) => void;
23
21
  screenType: keyof ConferencingScreen;
24
22
  }) => {
25
23
  const [open, setOpen] = useState(false);
@@ -51,7 +49,7 @@ export const DesktopLeaveRoom = ({
51
49
  if (screenType === 'hls_live_streaming') {
52
50
  setShowLeaveRoomAlert(true);
53
51
  } else {
54
- leaveRoom();
52
+ leaveRoom({ endstream: false });
55
53
  }
56
54
  }}
57
55
  >
@@ -75,7 +73,15 @@ export const DesktopLeaveRoom = ({
75
73
  </MenuTriggerButton>
76
74
  </Dropdown.Trigger>
77
75
  <Dropdown.Content css={{ p: 0, w: '$100' }} alignOffset={-50} sideOffset={10}>
78
- <Dropdown.Item css={{ bg: '$surface_default' }} onClick={leaveRoom} data-testid="just_leave_btn">
76
+ <Dropdown.Item
77
+ css={{
78
+ bg: '$surface_dim',
79
+ color: '$on_surface_low',
80
+ '&:hover': { bg: '$surface_default', color: '$on_surface_high' },
81
+ }}
82
+ onClick={() => leaveRoom({ endstream: false })}
83
+ data-testid="just_leave_btn"
84
+ >
79
85
  <LeaveCard
80
86
  title={showStream ? 'Leave Stream' : 'Leave Session'}
81
87
  subtitle={`Others will continue after you leave. You can join the ${
@@ -83,14 +89,20 @@ export const DesktopLeaveRoom = ({
83
89
  } again.`}
84
90
  bg=""
85
91
  titleColor="$on_surface_high"
86
- subtitleColor="$on_surface_low"
87
92
  icon={<ExitIcon height={24} width={24} style={{ transform: 'rotate(180deg)' }} />}
88
- onClick={leaveRoom}
93
+ onClick={() => leaveRoom({ endstream: false })}
89
94
  css={{ p: 0 }}
90
95
  />
91
96
  </Dropdown.Item>
92
97
  {isStreamingOn && permissions?.hlsStreaming ? (
93
- <Dropdown.Item css={{ bg: '$alert_error_dim' }} data-testid="end_room_btn">
98
+ <Dropdown.Item
99
+ css={{
100
+ bg: '$alert_error_dim',
101
+ color: '$alert_error_bright',
102
+ '&:hover': { bg: '$alert_error_dim', color: '$alert_error_brighter' },
103
+ }}
104
+ data-testid="end_room_btn"
105
+ >
94
106
  <LeaveCard
95
107
  title={showStream ? 'End Stream' : 'End Session'}
96
108
  subtitle={`The ${
@@ -98,7 +110,6 @@ export const DesktopLeaveRoom = ({
98
110
  } will end for everyone. You can't undo this action.`}
99
111
  bg=""
100
112
  titleColor="$alert_error_brighter"
101
- subtitleColor="$alert_error_bright"
102
113
  icon={<StopIcon height={24} width={24} />}
103
114
  onClick={() => {
104
115
  setOpen(false);
@@ -117,7 +128,7 @@ export const DesktopLeaveRoom = ({
117
128
  if (screenType === 'hls_live_streaming') {
118
129
  setShowLeaveRoomAlert(true);
119
130
  } else {
120
- leaveRoom();
131
+ leaveRoom({ endstream: false });
121
132
  }
122
133
  }}
123
134
  key="LeaveRoom"
@@ -137,7 +148,6 @@ export const DesktopLeaveRoom = ({
137
148
  <Dialog.Content css={{ w: 'min(420px, 90%)', p: '$8', bg: '$surface_dim' }}>
138
149
  <EndSessionContent
139
150
  setShowEndStreamAlert={setShowEndStreamAlert}
140
- stopStream={stopStream}
141
151
  leaveRoom={leaveRoom}
142
152
  isStreamingOn={isStreamingOn}
143
153
  isModal
@@ -6,14 +6,12 @@ import { Text } from '../../../Text';
6
6
 
7
7
  export const EndSessionContent = ({
8
8
  setShowEndStreamAlert,
9
- stopStream,
10
9
  leaveRoom,
11
10
  isModal = false,
12
11
  isStreamingOn = false,
13
12
  }: {
14
13
  setShowEndStreamAlert: (value: boolean) => void;
15
- stopStream: () => Promise<void>;
16
- leaveRoom: () => void;
14
+ leaveRoom: (args: { endstream: boolean }) => void;
17
15
  isModal?: boolean;
18
16
  isStreamingOn: boolean;
19
17
  }) => {
@@ -52,8 +50,7 @@ export const EndSessionContent = ({
52
50
  variant="danger"
53
51
  css={{ w: '100%' }}
54
52
  onClick={async () => {
55
- await stopStream();
56
- leaveRoom();
53
+ await leaveRoom({ endstream: true });
57
54
  setShowEndStreamAlert(false);
58
55
  }}
59
56
  id="stopStream"
@@ -10,7 +10,6 @@ export const LeaveCard = ({
10
10
  onClick,
11
11
  bg,
12
12
  titleColor,
13
- subtitleColor,
14
13
  css = {},
15
14
  }: {
16
15
  icon: React.JSX.Element;
@@ -18,7 +17,6 @@ export const LeaveCard = ({
18
17
  subtitle: string;
19
18
  onClick: () => void;
20
19
  titleColor: string;
21
- subtitleColor: string;
22
20
  bg: string;
23
21
  css?: CSS;
24
22
  }) => {
@@ -29,7 +27,7 @@ export const LeaveCard = ({
29
27
  <Text variant="lg" css={{ color: titleColor }}>
30
28
  {title}
31
29
  </Text>
32
- <Text variant="sm" css={{ color: subtitleColor }}>
30
+ <Text variant="sm" css={{ c: 'inherit' }}>
33
31
  {subtitle}
34
32
  </Text>
35
33
  </Box>
@@ -1,28 +1,40 @@
1
1
  import React from 'react';
2
- import { useNavigate, useParams } from 'react-router-dom';
3
2
  import { useMedia } from 'react-use';
4
3
  import { ConferencingScreen } from '@100mslive/types-prebuilt';
5
- import { selectIsConnectedToRoom, selectPermissions, useHMSActions, useHMSStore } from '@100mslive/react-sdk';
4
+ import {
5
+ HMSPeer,
6
+ HMSRole,
7
+ selectHLSState,
8
+ selectIsConnectedToRoom,
9
+ selectPeersByCondition,
10
+ selectPermissions,
11
+ selectRolesMap,
12
+ useHMSActions,
13
+ useHMSStore,
14
+ } from '@100mslive/react-sdk';
6
15
  import { config as cssConfig } from '../../../Theme';
7
16
  // @ts-ignore: No implicit Any
8
- import { useHMSPrebuiltContext } from '../../AppContext';
9
- // @ts-ignore: No implicit Any
10
- import { PictureInPicture } from '../PIP/PIPManager';
11
17
  // @ts-ignore: No implicit Any
12
18
  import { ToastManager } from '../Toast/ToastManager';
13
19
  import { DesktopLeaveRoom } from './DesktopLeaveRoom';
14
20
  import { MwebLeaveRoom } from './MwebLeaveRoom';
15
- import { useRoomLayoutLeaveScreen } from '../../provider/roomLayoutProvider/hooks/useRoomLayoutScreen';
21
+ import { useRedirectToLeave } from '../hooks/useRedirectToLeave';
16
22
 
17
23
  export const LeaveRoom = ({ screenType }: { screenType: keyof ConferencingScreen }) => {
18
- const navigate = useNavigate();
19
- const params = useParams();
20
24
  const isConnected = useHMSStore(selectIsConnectedToRoom);
21
25
  const permissions = useHMSStore(selectPermissions);
22
26
  const isMobile = useMedia(cssConfig.media.md);
27
+ const rolesMap: Record<string, HMSRole> = useHMSStore(selectRolesMap);
28
+ const streamingPermissionRoles = Object.keys(rolesMap).filter(roleName => {
29
+ const roleObj = rolesMap[roleName];
30
+ return roleObj.permissions.hlsStreaming;
31
+ });
32
+ const peersWithStreamingRights = useHMSStore(
33
+ selectPeersByCondition((peer: HMSPeer) => streamingPermissionRoles.includes(peer.roleName || '')),
34
+ );
35
+ const hlsState = useHMSStore(selectHLSState);
23
36
  const hmsActions = useHMSActions();
24
- const { onLeave } = useHMSPrebuiltContext();
25
- const { isLeaveScreenEnabled } = useRoomLayoutLeaveScreen();
37
+ const { redirectToLeave } = useRedirectToLeave();
26
38
 
27
39
  const stopStream = async () => {
28
40
  try {
@@ -35,29 +47,20 @@ export const LeaveRoom = ({ screenType }: { screenType: keyof ConferencingScreen
35
47
  }
36
48
  };
37
49
 
38
- const redirectToLeavePage = () => {
39
- const prefix = isLeaveScreenEnabled ? '/leave/' : '/';
40
- if (params.role) {
41
- navigate(prefix + params.roomId + '/' + params.role);
42
- } else {
43
- navigate(prefix + params.roomId);
50
+ const leaveRoom = async ({ endstream = false }) => {
51
+ if (endstream || (hlsState.running && peersWithStreamingRights.length === 1)) {
52
+ await stopStream();
44
53
  }
45
- PictureInPicture.stop().catch(() => console.error('stopping pip'));
46
- ToastManager.clearAllToast();
47
- onLeave?.();
48
- };
49
-
50
- const leaveRoom = () => {
51
54
  hmsActions.leave();
52
- redirectToLeavePage();
55
+ redirectToLeave();
53
56
  };
54
57
 
55
58
  if (!permissions || !isConnected) {
56
59
  return null;
57
60
  }
58
61
  return isMobile ? (
59
- <MwebLeaveRoom leaveRoom={leaveRoom} stopStream={stopStream} screenType={screenType} />
62
+ <MwebLeaveRoom leaveRoom={leaveRoom} screenType={screenType} />
60
63
  ) : (
61
- <DesktopLeaveRoom leaveRoom={leaveRoom} stopStream={stopStream} screenType={screenType} />
64
+ <DesktopLeaveRoom leaveRoom={leaveRoom} screenType={screenType} />
62
65
  );
63
66
  };
@@ -10,7 +10,7 @@ export const LeaveSessionContent = ({
10
10
  isModal = false,
11
11
  }: {
12
12
  setShowLeaveRoomAlert: (value: boolean) => void;
13
- leaveRoom: () => void;
13
+ leaveRoom: (args: { endstream: boolean }) => void;
14
14
  isModal?: boolean;
15
15
  }) => {
16
16
  return (
@@ -44,7 +44,13 @@ export const LeaveSessionContent = ({
44
44
  >
45
45
  Cancel
46
46
  </Button>
47
- <Button variant="danger" css={{ w: '100%' }} onClick={leaveRoom} id="leaveRoom" data-testid="leave_room">
47
+ <Button
48
+ variant="danger"
49
+ css={{ w: '100%' }}
50
+ onClick={() => leaveRoom({ endstream: false })}
51
+ id="leaveRoom"
52
+ data-testid="leave_room"
53
+ >
48
54
  Leave Session
49
55
  </Button>
50
56
  </Flex>
@@ -1,6 +1,8 @@
1
1
  import React, { Fragment, useState } from 'react';
2
2
  import { ConferencingScreen } from '@100mslive/types-prebuilt';
3
+ // @ts-ignore: No implicit Any
3
4
  import { selectIsConnectedToRoom, selectPermissions, useHMSStore, useRecordingStreaming } from '@100mslive/react-sdk';
5
+ // @ts-ignore: No implicit Any
4
6
  import { ExitIcon, StopIcon } from '@100mslive/react-icons';
5
7
  import { Box } from '../../../Layout';
6
8
  import { Sheet } from '../../../Sheet';
@@ -14,11 +16,9 @@ import { useDropdownList } from '../hooks/useDropdownList';
14
16
 
15
17
  export const MwebLeaveRoom = ({
16
18
  leaveRoom,
17
- stopStream,
18
19
  screenType,
19
20
  }: {
20
- leaveRoom: () => void;
21
- stopStream: () => Promise<void>;
21
+ leaveRoom: (args: { endstream: boolean }) => void;
22
22
  screenType: keyof ConferencingScreen;
23
23
  }) => {
24
24
  const [open, setOpen] = useState(false);
@@ -63,10 +63,9 @@ export const MwebLeaveRoom = ({
63
63
  } again.`}
64
64
  bg="$surface_default"
65
65
  titleColor="$on_surface_high"
66
- subtitleColor="$on_surface_low"
67
66
  icon={<ExitIcon height={24} width={24} style={{ transform: 'rotate(180deg)' }} />}
68
- onClick={leaveRoom}
69
- css={{ pt: 0, mt: '$10' }}
67
+ onClick={() => leaveRoom({ endstream: false })}
68
+ css={{ pt: 0, mt: '$10', color: '$on_surface_low', '&:hover': { color: '$on_surface_high' } }}
70
69
  />
71
70
  {isStreamingOn && permissions?.hlsStreaming ? (
72
71
  <LeaveCard
@@ -76,7 +75,7 @@ export const MwebLeaveRoom = ({
76
75
  } for everyone. You can't undo this action.`}
77
76
  bg="$alert_error_dim"
78
77
  titleColor="$alert_error_brighter"
79
- subtitleColor="$alert_error_bright"
78
+ css={{ color: '$alert_error_bright', '&:hover': { color: '$alert_error_brighter' } }}
80
79
  icon={<StopIcon height={24} width={24} />}
81
80
  onClick={() => {
82
81
  setOpen(false);
@@ -93,6 +92,8 @@ export const MwebLeaveRoom = ({
93
92
  onClick={() => {
94
93
  if (screenType === 'hls_live_streaming') {
95
94
  setShowLeaveRoomAlert(true);
95
+ } else {
96
+ leaveRoom({ endstream: false });
96
97
  }
97
98
  }}
98
99
  >
@@ -107,7 +108,6 @@ export const MwebLeaveRoom = ({
107
108
  <Sheet.Content css={{ bg: '$surface_dim', p: '$10', pb: '$12' }}>
108
109
  <EndSessionContent
109
110
  setShowEndStreamAlert={setShowEndStreamAlert}
110
- stopStream={stopStream}
111
111
  leaveRoom={leaveRoom}
112
112
  isStreamingOn={isStreamingOn}
113
113
  />
@@ -27,6 +27,7 @@ export const ChangeNameContent = ({
27
27
  color: '$on_surface_high',
28
28
  fontWeight: '$semiBold',
29
29
  display: 'flex',
30
+ pb: '$4',
30
31
  '@md': { px: '$8', borderBottom: '1px solid $border_default' },
31
32
  }}
32
33
  >
@@ -57,6 +58,9 @@ export const ChangeNameContent = ({
57
58
  onKeyDown={async e => {
58
59
  if (e.key === 'Enter' && currentName.trim().length > 0 && currentName !== localPeerName) {
59
60
  e.preventDefault();
61
+ if (isMobile) {
62
+ return;
63
+ }
60
64
  changeName();
61
65
  }
62
66
  }}
@@ -20,7 +20,7 @@ export const MoreSettings = ({
20
20
  }) => {
21
21
  const isMobile = useMedia(cssConfig.media.md);
22
22
  return isMobile ? (
23
- <MwebOptions elements={elements} streamType={screenType} />
23
+ <MwebOptions elements={elements} screenType={screenType} />
24
24
  ) : (
25
25
  <DesktopOptions elements={elements} screenType={screenType} />
26
26
  );
@@ -6,7 +6,7 @@ import {
6
6
  HLSLiveStreamingScreen_Elements,
7
7
  } from '@100mslive/types-prebuilt';
8
8
  import { selectAppData, selectLocalPeerID, useHMSActions, useHMSStore } from '@100mslive/react-sdk';
9
- import { BrbIcon, CheckIcon, DragHandleIcon, HandIcon, InfoIcon, PipIcon, SettingsIcon } from '@100mslive/react-icons';
9
+ import { BrbIcon, CheckIcon, DragHandleIcon, InfoIcon, PipIcon, SettingsIcon } from '@100mslive/react-icons';
10
10
  import { Checkbox, Dropdown, Flex, Text, Tooltip } from '../../../..';
11
11
  // @ts-ignore: No implicit any
12
12
  import IconButton from '../../../IconButton';
@@ -58,7 +58,7 @@ export const DesktopOptions = ({
58
58
  const hmsActions = useHMSActions();
59
59
  const enablHlsStats = useHMSStore(selectAppData(APP_DATA.hlsStats));
60
60
  const [openModals, setOpenModals] = useState(new Set());
61
- const { isHandRaised, isBRBOn, toggleHandRaise, toggleBRB } = useMyMetadata();
61
+ const { isBRBOn, toggleBRB } = useMyMetadata();
62
62
  const isPipOn = PictureInPicture.isOn();
63
63
  const isBRBEnabled = !!elements?.brb;
64
64
 
@@ -85,13 +85,13 @@ export const DesktopOptions = ({
85
85
  onOpenChange={value => updateState(MODALS.MORE_SETTINGS, value)}
86
86
  modal={false}
87
87
  >
88
- <Dropdown.Trigger asChild data-testid="more_settings_btn">
89
- <IconButton>
90
- <Tooltip title="More options">
88
+ <Tooltip title="More options">
89
+ <Dropdown.Trigger asChild data-testid="more_settings_btn">
90
+ <IconButton>
91
91
  <DragHandleIcon />
92
- </Tooltip>
93
- </IconButton>
94
- </Dropdown.Trigger>
92
+ </IconButton>
93
+ </Dropdown.Trigger>
94
+ </Tooltip>
95
95
 
96
96
  <Dropdown.Content
97
97
  sideOffset={5}
@@ -105,19 +105,7 @@ export const DesktopOptions = ({
105
105
  },
106
106
  }}
107
107
  >
108
- {screenType !== 'hls_live_streaming' ? (
109
- <Dropdown.Item onClick={toggleHandRaise} data-testid="raise_hand_btn">
110
- <HandIcon />
111
- <Text variant="sm" css={{ ml: '$4', color: '$on_surface_high' }}>
112
- Raise Hand
113
- </Text>
114
- <Flex justify="end" css={{ color: '$on_surface_high', flexGrow: '1' }}>
115
- {isHandRaised ? <CheckIcon /> : null}
116
- </Flex>
117
- </Dropdown.Item>
118
- ) : null}
119
-
120
- {isBRBEnabled && screenType === 'hls_live_streaming' ? (
108
+ {isBRBEnabled && screenType !== 'hls_live_streaming' ? (
121
109
  <Dropdown.Item onClick={toggleBRB} data-testid="brb_btn">
122
110
  <BrbIcon />
123
111
  <Text variant="sm" css={{ ml: '$4', color: '$on_surface_high' }}>
@@ -129,8 +117,6 @@ export const DesktopOptions = ({
129
117
  </Dropdown.Item>
130
118
  ) : null}
131
119
 
132
- {isBRBEnabled && screenType === 'hls_live_streaming' ? <Dropdown.ItemSeparator css={{ mx: '0' }} /> : null}
133
-
134
120
  {screenType !== 'hls_live_streaming' ? (
135
121
  <Dropdown.Item>
136
122
  <PIP
@@ -1,5 +1,6 @@
1
1
  import React, { useRef, useState } from 'react';
2
2
  import { useClickAway } from 'react-use';
3
+ import { ConferencingScreen, DefaultConferencingScreen_Elements } from '@100mslive/types-prebuilt';
3
4
  import {
4
5
  selectIsConnectedToRoom,
5
6
  selectPeerCount,
@@ -8,20 +9,44 @@ import {
8
9
  useHMSStore,
9
10
  useRecordingStreaming,
10
11
  } from '@100mslive/react-sdk';
11
- import { CrossIcon, DragHandleIcon, EmojiIcon, PeopleIcon, RecordIcon, SettingsIcon } from '@100mslive/react-icons';
12
- import { Box, Loading, Tooltip } from '../../../../';
12
+ import {
13
+ BrbIcon,
14
+ CrossIcon,
15
+ DragHandleIcon,
16
+ EmojiIcon,
17
+ HandIcon,
18
+ HandRaiseSlashedIcon,
19
+ PeopleIcon,
20
+ RecordIcon,
21
+ SettingsIcon,
22
+ } from '@100mslive/react-icons';
23
+ import { Box, Loading, Tooltip } from '../../../..';
13
24
  import { Sheet } from '../../../../Sheet';
25
+ // @ts-ignore: No implicit any
14
26
  import IconButton from '../../../IconButton';
27
+ // @ts-ignore: No implicit any
15
28
  import { EmojiReaction } from '../../EmojiReaction';
29
+ // @ts-ignore: No implicit any
16
30
  import { StopRecordingInSheet } from '../../Header/StreamActions';
31
+ // @ts-ignore: No implicit any
17
32
  import SettingsModal from '../../Settings/SettingsModal';
33
+ // @ts-ignore: No implicit any
18
34
  import { ToastManager } from '../../Toast/ToastManager';
19
- import { ActionTile } from '.././ActionTile';
20
- import { ChangeNameModal } from '.././ChangeNameModal';
21
- import { MuteAllModal } from '.././MuteAllModal';
35
+ // @ts-ignore: No implicit any
36
+ import { ActionTile } from '../ActionTile';
37
+ // @ts-ignore: No implicit any
38
+ import { ChangeNameModal } from '../ChangeNameModal';
39
+ // @ts-ignore: No implicit any
40
+ import { MuteAllModal } from '../MuteAllModal';
41
+ // @ts-ignore: No implicit any
22
42
  import { useSidepaneToggle } from '../../AppData/useSidepane';
43
+ // @ts-ignore: No implicit any
23
44
  import { useDropdownList } from '../../hooks/useDropdownList';
45
+ // @ts-ignore: No implicit any
46
+ import { useMyMetadata } from '../../hooks/useMetadata';
47
+ // @ts-ignore: No implicit any
24
48
  import { getFormattedCount } from '../../../common/utils';
49
+ // @ts-ignore: No implicit any
25
50
  import { SIDE_PANE_OPTIONS } from '../../../common/constants';
26
51
 
27
52
  // const VirtualBackground = React.lazy(() => import('../../../plugins/VirtualBackground/VirtualBackground'));
@@ -38,14 +63,18 @@ const MODALS = {
38
63
  EMBED_URL: 'embedUrl',
39
64
  };
40
65
 
41
- export const MwebOptions = ({ elements }) => {
66
+ export const MwebOptions = ({
67
+ elements,
68
+ screenType,
69
+ }: {
70
+ elements: DefaultConferencingScreen_Elements;
71
+ screenType: keyof ConferencingScreen;
72
+ }) => {
42
73
  const hmsActions = useHMSActions();
43
74
  const permissions = useHMSStore(selectPermissions);
44
75
  const isConnected = useHMSStore(selectIsConnectedToRoom);
45
76
  const { isBrowserRecordingOn, isStreamingOn, isHLSRunning } = useRecordingStreaming();
46
-
47
77
  const [openModals, setOpenModals] = useState(new Set());
48
-
49
78
  const [openOptionsSheet, setOpenOptionsSheet] = useState(false);
50
79
  const [openSettingsSheet, setOpenSettingsSheet] = useState(false);
51
80
  const [showEmojiCard, setShowEmojiCard] = useState(false);
@@ -54,11 +83,12 @@ export const MwebOptions = ({ elements }) => {
54
83
  const toggleParticipants = useSidepaneToggle(SIDE_PANE_OPTIONS.PARTICIPANTS);
55
84
  const peerCount = useHMSStore(selectPeerCount);
56
85
  const emojiCardRef = useRef(null);
86
+ const { isBRBOn, toggleBRB, isHandRaised, toggleHandRaise } = useMyMetadata();
57
87
  // const isVideoOn = useHMSStore(selectIsLocalVideoEnabled);
58
88
 
59
89
  useDropdownList({ open: openModals.size > 0 || openOptionsSheet || openSettingsSheet, name: 'MoreSettings' });
60
90
 
61
- const updateState = (modalName, value) => {
91
+ const updateState = (modalName: string, value: boolean) => {
62
92
  setOpenModals(modals => {
63
93
  const copy = new Set(modals);
64
94
  if (value) {
@@ -75,13 +105,13 @@ export const MwebOptions = ({ elements }) => {
75
105
  return (
76
106
  <>
77
107
  <Sheet.Root open={openOptionsSheet} onOpenChange={setOpenOptionsSheet}>
78
- <Sheet.Trigger asChild data-testid="more_settings_btn">
79
- <IconButton>
80
- <Tooltip title="More options">
108
+ <Tooltip title="More options">
109
+ <Sheet.Trigger asChild data-testid="more_settings_btn">
110
+ <IconButton>
81
111
  <DragHandleIcon />
82
- </Tooltip>
83
- </IconButton>
84
- </Sheet.Trigger>
112
+ </IconButton>
113
+ </Sheet.Trigger>
114
+ </Tooltip>
85
115
  <Sheet.Content css={{ bg: '$surface_dim', pb: '$14' }}>
86
116
  <Sheet.Title
87
117
  css={{
@@ -115,16 +145,31 @@ export const MwebOptions = ({ elements }) => {
115
145
  px: '$9',
116
146
  }}
117
147
  >
118
- <ActionTile.Root
119
- onClick={() => {
120
- toggleParticipants();
121
- setOpenOptionsSheet(false);
122
- }}
123
- >
124
- <ActionTile.Count>{getFormattedCount(peerCount)}</ActionTile.Count>
125
- <PeopleIcon />
126
- <ActionTile.Title>Participants</ActionTile.Title>
127
- </ActionTile.Root>
148
+ {elements?.participant_list && (
149
+ <ActionTile.Root
150
+ onClick={() => {
151
+ toggleParticipants();
152
+ setOpenOptionsSheet(false);
153
+ }}
154
+ >
155
+ <ActionTile.Count>{getFormattedCount(peerCount)}</ActionTile.Count>
156
+ <PeopleIcon />
157
+ <ActionTile.Title>Participants</ActionTile.Title>
158
+ </ActionTile.Root>
159
+ )}
160
+
161
+ {screenType !== 'hls_live_streaming' ? (
162
+ <ActionTile.Root
163
+ active={isHandRaised}
164
+ onClick={() => {
165
+ toggleHandRaise();
166
+ setOpenOptionsSheet(false);
167
+ }}
168
+ >
169
+ {isHandRaised ? <HandRaiseSlashedIcon /> : <HandIcon />}
170
+ <ActionTile.Title>{isHandRaised ? 'Lower' : 'Raise'} Hand</ActionTile.Title>
171
+ </ActionTile.Root>
172
+ ) : null}
128
173
 
129
174
  {/* {isVideoOn ? (
130
175
  <Suspense fallback="">
@@ -144,6 +189,19 @@ export const MwebOptions = ({ elements }) => {
144
189
  </ActionTile.Root>
145
190
  )}
146
191
 
192
+ {elements?.brb && (
193
+ <ActionTile.Root
194
+ active={isBRBOn}
195
+ onClick={() => {
196
+ toggleBRB();
197
+ setOpenOptionsSheet(false);
198
+ }}
199
+ >
200
+ <BrbIcon />
201
+ <ActionTile.Title>Be Right Back</ActionTile.Title>
202
+ </ActionTile.Root>
203
+ )}
204
+
147
205
  <ActionTile.Root
148
206
  onClick={() => {
149
207
  setOpenSettingsSheet(true);
@@ -174,6 +232,7 @@ export const MwebOptions = ({ elements }) => {
174
232
  setOpenOptionsSheet(false);
175
233
  setIsRecordingLoading(false);
176
234
  } catch (error) {
235
+ // @ts-ignore
177
236
  if (error.message.includes('stream already running')) {
178
237
  ToastManager.addToast({
179
238
  title: 'Recording already running',
@@ -181,6 +240,7 @@ export const MwebOptions = ({ elements }) => {
181
240
  });
182
241
  } else {
183
242
  ToastManager.addToast({
243
+ // @ts-ignore
184
244
  title: error.message,
185
245
  variant: 'error',
186
246
  });
@@ -208,11 +268,11 @@ export const MwebOptions = ({ elements }) => {
208
268
  </Sheet.Root>
209
269
  <SettingsModal open={openSettingsSheet} onOpenChange={setOpenSettingsSheet} />
210
270
  {openModals.has(MODALS.MUTE_ALL) && (
211
- <MuteAllModal onOpenChange={value => updateState(MODALS.MUTE_ALL, value)} isMobile />
271
+ <MuteAllModal onOpenChange={(value: boolean) => updateState(MODALS.MUTE_ALL, value)} isMobile />
212
272
  )}
213
273
  {openModals.has(MODALS.CHANGE_NAME) && (
214
274
  <ChangeNameModal
215
- onOpenChange={value => updateState(MODALS.CHANGE_NAME, value)}
275
+ onOpenChange={(value: boolean) => updateState(MODALS.CHANGE_NAME, value)}
216
276
  openParentSheet={() => setOpenOptionsSheet(true)}
217
277
  />
218
278
  )}
@@ -248,6 +308,7 @@ export const MwebOptions = ({ elements }) => {
248
308
  setShowRecordingOn(false);
249
309
  } catch (error) {
250
310
  ToastManager.addToast({
311
+ // @ts-ignore
251
312
  title: error.message,
252
313
  variant: 'error',
253
314
  });