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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/dist/{HLSView-P57IRMAR.js → HLSView-PY2FKWX3.js} +191 -123
  2. package/dist/HLSView-PY2FKWX3.js.map +7 -0
  3. package/dist/Prebuilt/App.d.ts +3 -0
  4. package/dist/Prebuilt/AppContext.d.ts +13 -0
  5. package/dist/Prebuilt/common/PeersSorter.d.ts +21 -0
  6. package/dist/Prebuilt/components/Footer/Footer.d.ts +6 -0
  7. package/dist/Prebuilt/components/Header/Header.d.ts +2 -0
  8. package/dist/Prebuilt/components/InsetTile.d.ts +2 -0
  9. package/dist/Prebuilt/components/Leave/DesktopLeaveRoom.d.ts +7 -0
  10. package/dist/Prebuilt/components/Leave/EndSessionContent.d.ts +8 -0
  11. package/dist/Prebuilt/components/Leave/LeaveAtoms.d.ts +2196 -0
  12. package/dist/Prebuilt/components/Leave/LeaveCard.d.ts +12 -0
  13. package/dist/Prebuilt/components/Leave/LeaveRoom.d.ts +5 -0
  14. package/dist/Prebuilt/components/Leave/LeaveSessionContent.d.ts +6 -0
  15. package/dist/Prebuilt/components/Leave/MwebLeaveRoom.d.ts +7 -0
  16. package/dist/Prebuilt/components/MoreSettings/MoreSettings.d.ts +6 -0
  17. package/dist/Prebuilt/components/MoreSettings/SplitComponents/DesktopOptions.d.ts +6 -0
  18. package/dist/Prebuilt/components/Pagination.d.ts +6 -0
  19. package/dist/Prebuilt/components/Preview/PreviewForm.d.ts +10 -0
  20. package/dist/Prebuilt/components/SecondaryTiles.d.ts +3 -0
  21. package/dist/Prebuilt/components/VideoLayouts/EqualProminence.d.ts +3 -0
  22. package/dist/Prebuilt/components/VideoLayouts/Grid.d.ts +5 -0
  23. package/dist/Prebuilt/components/VideoLayouts/GridLayout.d.ts +10 -0
  24. package/dist/Prebuilt/components/VideoLayouts/ProminenceLayout.d.ts +12 -0
  25. package/dist/Prebuilt/components/VideoLayouts/RoleProminence.d.ts +3 -0
  26. package/dist/Prebuilt/components/VideoLayouts/ScreenshareLayout.d.ts +3 -0
  27. package/dist/Prebuilt/components/VideoLayouts/interface.d.ts +8 -0
  28. package/dist/Prebuilt/components/hooks/useRoleProminencePeers.d.ts +5 -0
  29. package/dist/Prebuilt/components/hooks/useTileLayout.d.ts +12 -0
  30. package/dist/Prebuilt/components/hooks/useVideoTileLayout.d.ts +11 -0
  31. package/dist/Prebuilt/layouts/SidePane.d.ts +6 -0
  32. package/dist/Prebuilt/layouts/VideoStreamingSection.d.ts +6 -0
  33. package/dist/Prebuilt/plugins/whiteboard/ToggleWhiteboard.d.ts +5 -0
  34. package/dist/Prebuilt/provider/roomLayoutProvider/hooks/useFetchRoomLayout.d.ts +1 -0
  35. package/dist/Prebuilt/provider/roomLayoutProvider/hooks/useInsetEnabled.d.ts +1 -0
  36. package/dist/Prebuilt/provider/roomLayoutProvider/hooks/useRoomLayoutScreen.d.ts +17 -0
  37. package/dist/Prebuilt/provider/roomLayoutProvider/index.d.ts +6 -1
  38. package/dist/{VirtualBackground-GGCQJ5JM.js → VirtualBackground-AYDHYLIZ.js} +5 -11
  39. package/dist/VirtualBackground-AYDHYLIZ.js.map +7 -0
  40. package/dist/{chunk-P5X32KOD.js → chunk-E2M2ZSOL.js} +8 -5
  41. package/dist/chunk-E2M2ZSOL.js.map +7 -0
  42. package/dist/chunk-GQD2AGWW.js +888 -0
  43. package/dist/chunk-GQD2AGWW.js.map +7 -0
  44. package/dist/{chunk-OSM4QEQG.js → chunk-RXTHJUMZ.js} +2462 -4738
  45. package/dist/chunk-RXTHJUMZ.js.map +7 -0
  46. package/dist/conference-V2XZGTKU.js +5927 -0
  47. package/dist/conference-V2XZGTKU.js.map +7 -0
  48. package/dist/index.cjs.js +9414 -15534
  49. package/dist/index.cjs.js.map +4 -4
  50. package/dist/index.js +2 -2
  51. package/dist/meta.cjs.json +2156 -3347
  52. package/dist/meta.esbuild.json +2601 -3885
  53. package/package.json +7 -7
  54. package/src/Button/Button.tsx +2 -2
  55. package/src/Prebuilt/App.tsx +49 -33
  56. package/src/Prebuilt/{AppContext.jsx → AppContext.tsx} +11 -3
  57. package/src/Prebuilt/IconButton.jsx +1 -0
  58. package/src/Prebuilt/Prebuilt.stories.tsx +1 -0
  59. package/src/Prebuilt/common/{PeersSorter.js → PeersSorter.ts} +15 -10
  60. package/src/Prebuilt/common/constants.js +3 -112
  61. package/src/Prebuilt/common/hooks.js +34 -1
  62. package/src/Prebuilt/common/utils.js +0 -8
  63. package/src/Prebuilt/components/AppData/AppData.jsx +3 -13
  64. package/src/Prebuilt/components/AppData/useUISettings.js +0 -4
  65. package/src/Prebuilt/components/AudioVideoToggle.jsx +6 -0
  66. package/src/Prebuilt/components/AuthToken.jsx +11 -42
  67. package/src/Prebuilt/components/Chat/Chat.jsx +57 -26
  68. package/src/Prebuilt/components/Chat/ChatBody.jsx +92 -32
  69. package/src/Prebuilt/components/Chat/ChatFooter.jsx +72 -48
  70. package/src/Prebuilt/components/Chat/ChatParticipantHeader.jsx +73 -0
  71. package/src/Prebuilt/components/Chat/ChatSelector.jsx +16 -17
  72. package/src/Prebuilt/components/Chat/ChatSelectorContainer.jsx +81 -0
  73. package/src/Prebuilt/components/Connection/TileConnection.jsx +30 -12
  74. package/src/Prebuilt/components/EmojiReaction.jsx +18 -17
  75. package/src/Prebuilt/components/Footer/ChatToggle.jsx +1 -7
  76. package/src/Prebuilt/components/Footer/Footer.tsx +89 -0
  77. package/src/Prebuilt/components/Footer/ParticipantList.jsx +213 -173
  78. package/src/Prebuilt/components/Footer/RoleAccordion.jsx +78 -0
  79. package/src/Prebuilt/components/HMSVideo/Controls.jsx +2 -2
  80. package/src/Prebuilt/components/HMSVideo/HLSQualitySelector.jsx +33 -10
  81. package/src/Prebuilt/components/HMSVideo/PlayButton.jsx +1 -1
  82. package/src/Prebuilt/components/HMSVideo/VideoTime.jsx +3 -3
  83. package/src/Prebuilt/components/HMSVideo/VolumeControl.jsx +38 -9
  84. package/src/Prebuilt/components/Header/{ConferencingHeader.jsx → Header.tsx} +9 -7
  85. package/src/Prebuilt/components/Header/HeaderComponents.jsx +13 -4
  86. package/src/Prebuilt/components/Header/StreamActions.jsx +33 -60
  87. package/src/Prebuilt/components/Header/index.tsx +1 -0
  88. package/src/Prebuilt/components/IconButtonWithOptions/IconButtonWithOptions.jsx +17 -3
  89. package/src/Prebuilt/components/InsetTile.tsx +122 -0
  90. package/src/Prebuilt/components/{MoreSettings/SplitComponents/DesktopLeaveRoom.jsx → Leave/DesktopLeaveRoom.tsx} +50 -18
  91. package/src/Prebuilt/components/{EndSessionContent.jsx → Leave/EndSessionContent.tsx} +19 -9
  92. package/src/Prebuilt/components/Leave/LeaveAtoms.tsx +26 -0
  93. package/src/Prebuilt/components/{LeaveCard.jsx → Leave/LeaveCard.tsx} +22 -3
  94. package/src/Prebuilt/components/Leave/LeaveRoom.tsx +63 -0
  95. package/src/Prebuilt/components/{LeaveSessionContent.jsx → Leave/LeaveSessionContent.tsx} +13 -5
  96. package/src/Prebuilt/components/{MoreSettings/SplitComponents/MwebLeaveRoom.jsx → Leave/MwebLeaveRoom.tsx} +38 -13
  97. package/src/Prebuilt/components/MetaActions.jsx +15 -23
  98. package/src/Prebuilt/components/MoreSettings/ActionTile.jsx +5 -0
  99. package/src/Prebuilt/components/MoreSettings/ChangeNameContent.jsx +12 -7
  100. package/src/Prebuilt/components/MoreSettings/ChangeNameModal.jsx +1 -1
  101. package/src/Prebuilt/components/MoreSettings/FullScreenItem.jsx +1 -4
  102. package/src/Prebuilt/components/MoreSettings/MoreSettings.tsx +27 -0
  103. package/src/Prebuilt/components/MoreSettings/SplitComponents/{DesktopOptions.jsx → DesktopOptions.tsx} +86 -75
  104. package/src/Prebuilt/components/MoreSettings/SplitComponents/MwebOptions.jsx +20 -19
  105. package/src/Prebuilt/components/Notifications/HLSFailureModal.jsx +3 -1
  106. package/src/Prebuilt/components/Notifications/Notifications.jsx +18 -11
  107. package/src/Prebuilt/components/Notifications/PeerNotifications.jsx +14 -2
  108. package/src/Prebuilt/components/Notifications/PermissionErrorModal.jsx +10 -4
  109. package/src/Prebuilt/components/PIP/PIPComponent.jsx +7 -16
  110. package/src/Prebuilt/components/PIP/PIPManager.js +1 -0
  111. package/src/Prebuilt/components/{Pagination.jsx → Pagination.tsx} +35 -6
  112. package/src/Prebuilt/components/Playlist/Playlist.jsx +1 -6
  113. package/src/Prebuilt/components/PostLeave.jsx +7 -7
  114. package/src/Prebuilt/components/Preview/PreviewContainer.jsx +5 -13
  115. package/src/Prebuilt/components/Preview/{PreviewForm.jsx → PreviewForm.tsx} +14 -4
  116. package/src/Prebuilt/components/Preview/PreviewJoin.jsx +9 -7
  117. package/src/Prebuilt/components/RaiseHand.jsx +0 -7
  118. package/src/Prebuilt/components/RoleChangeRequestModal.jsx +82 -6
  119. package/src/Prebuilt/components/ScreenshareDisplay.jsx +4 -10
  120. package/src/Prebuilt/components/ScreenshareTile.jsx +41 -33
  121. package/src/Prebuilt/components/SecondaryTiles.tsx +34 -0
  122. package/src/Prebuilt/components/Settings/LayoutSettings.jsx +2 -12
  123. package/src/Prebuilt/components/Settings/NotificationSettings.jsx +3 -9
  124. package/src/Prebuilt/components/Settings/SettingsModal.jsx +3 -9
  125. package/src/Prebuilt/components/StatsForNerds.jsx +3 -1
  126. package/src/Prebuilt/components/TileMenu/TileMenu.jsx +15 -16
  127. package/src/Prebuilt/components/TileMenu/TileMenuContent.jsx +21 -19
  128. package/src/Prebuilt/components/Toast/ToastConfig.jsx +53 -11
  129. package/src/Prebuilt/components/VideoLayouts/EqualProminence.tsx +62 -0
  130. package/src/Prebuilt/components/VideoLayouts/Grid.tsx +41 -0
  131. package/src/Prebuilt/components/VideoLayouts/GridLayout.tsx +92 -0
  132. package/src/Prebuilt/components/VideoLayouts/ProminenceLayout.tsx +60 -0
  133. package/src/Prebuilt/components/VideoLayouts/RoleProminence.tsx +56 -0
  134. package/src/Prebuilt/components/VideoLayouts/ScreenshareLayout.tsx +36 -0
  135. package/src/Prebuilt/components/VideoLayouts/interface.ts +9 -0
  136. package/src/Prebuilt/components/VideoTile.jsx +93 -43
  137. package/src/Prebuilt/components/conference.jsx +24 -20
  138. package/src/Prebuilt/components/hooks/useMetadata.jsx +7 -0
  139. package/src/Prebuilt/components/hooks/useRoleProminencePeers.tsx +38 -0
  140. package/src/Prebuilt/components/hooks/useTileLayout.tsx +121 -0
  141. package/src/Prebuilt/components/hooks/useVideoTileLayout.ts +22 -0
  142. package/src/Prebuilt/components/pdfAnnotator/pdfFileOptions.jsx +5 -72
  143. package/src/Prebuilt/components/pdfAnnotator/submitPdf.jsx +4 -45
  144. package/src/Prebuilt/components/pdfAnnotator/uploadedFile.jsx +2 -17
  145. package/src/Prebuilt/components/peerTileUtils.jsx +1 -1
  146. package/src/Prebuilt/images/empty-chat.svg +12 -0
  147. package/src/Prebuilt/layouts/EmbedView.jsx +17 -40
  148. package/src/Prebuilt/layouts/HLSView.jsx +83 -66
  149. package/src/Prebuilt/layouts/PDFView.jsx +1 -11
  150. package/src/Prebuilt/layouts/SidePane.tsx +96 -0
  151. package/src/Prebuilt/layouts/{mainView.jsx → VideoStreamingSection.tsx} +38 -47
  152. package/src/Prebuilt/layouts/WhiteboardView.jsx +10 -34
  153. package/src/Prebuilt/plugins/VirtualBackground/VirtualBackground.jsx +1 -4
  154. package/src/Prebuilt/plugins/whiteboard/{ToggleWhiteboard.jsx → ToggleWhiteboard.tsx} +5 -9
  155. package/src/Prebuilt/primitives/DialogContent.jsx +15 -11
  156. package/src/Prebuilt/provider/roomLayoutProvider/constants/index.ts +17 -2
  157. package/src/Prebuilt/provider/roomLayoutProvider/hooks/useFetchRoomLayout.ts +36 -13
  158. package/src/Prebuilt/provider/roomLayoutProvider/hooks/useInsetEnabled.ts +10 -0
  159. package/src/Prebuilt/provider/roomLayoutProvider/hooks/useRoomLayoutScreen.ts +65 -0
  160. package/src/Prebuilt/provider/roomLayoutProvider/index.tsx +17 -6
  161. package/dist/HLSView-P57IRMAR.js.map +0 -7
  162. package/dist/PinnedTrackView-4FYJEBTB.js +0 -102
  163. package/dist/PinnedTrackView-4FYJEBTB.js.map +0 -7
  164. package/dist/VirtualBackground-GGCQJ5JM.js.map +0 -7
  165. package/dist/chunk-IVTWKQI3.js +0 -827
  166. package/dist/chunk-IVTWKQI3.js.map +0 -7
  167. package/dist/chunk-OSM4QEQG.js.map +0 -7
  168. package/dist/chunk-P5X32KOD.js.map +0 -7
  169. package/dist/chunk-RVCZPPTL.js +0 -1100
  170. package/dist/chunk-RVCZPPTL.js.map +0 -7
  171. package/dist/conference-P6I6ESVF.js +0 -8995
  172. package/dist/conference-P6I6ESVF.js.map +0 -7
  173. package/src/Prebuilt/components/Chat/ChatHeader.jsx +0 -67
  174. package/src/Prebuilt/components/EqualProminence.jsx +0 -180
  175. package/src/Prebuilt/components/FirstPersonDisplay.jsx +0 -50
  176. package/src/Prebuilt/components/Footer/Footer.jsx +0 -73
  177. package/src/Prebuilt/components/Header/Header.jsx +0 -8
  178. package/src/Prebuilt/components/Header/StreamingHeader.jsx +0 -54
  179. package/src/Prebuilt/components/LeaveRoom.jsx +0 -94
  180. package/src/Prebuilt/components/MoreSettings/MoreSettings.jsx +0 -10
  181. package/src/Prebuilt/components/Notifications/MessageNotifications.jsx +0 -25
  182. package/src/Prebuilt/components/gridView.jsx +0 -85
  183. package/src/Prebuilt/components/hooks/useFeatures.js +0 -22
  184. package/src/Prebuilt/components/hooks/useNavigation.js +0 -19
  185. package/src/Prebuilt/components/hooks/useSkipPreview.jsx +0 -20
  186. package/src/Prebuilt/components/pdfAnnotator/pdfErrorView.jsx +0 -29
  187. package/src/Prebuilt/images/Logo.svg +0 -8
  188. package/src/Prebuilt/layouts/ActiveSpeakerView.jsx +0 -34
  189. package/src/Prebuilt/layouts/InsetView.jsx +0 -260
  190. package/src/Prebuilt/layouts/PinnedTrackView.jsx +0 -59
  191. package/src/Prebuilt/layouts/SidePane.jsx +0 -52
  192. package/src/Prebuilt/layouts/mainGridView.jsx +0 -98
  193. package/src/Prebuilt/layouts/screenShareView.jsx +0 -183
  194. /package/{src/Prebuilt/components/Header/index.jsx → dist/Prebuilt/components/Header/index.d.ts} +0 -0
  195. /package/src/Prebuilt/components/{ScreenShare.jsx → ScreenShareToggle.jsx} +0 -0
  196. /package/src/{assets → Prebuilt/images}/android-perm-1.png +0 -0
  197. /package/src/{assets → Prebuilt/images}/ios-perm-0.png +0 -0
package/package.json CHANGED
@@ -10,7 +10,7 @@
10
10
  "prebuilt",
11
11
  "roomkit"
12
12
  ],
13
- "version": "0.1.5",
13
+ "version": "0.1.6-alpha.0",
14
14
  "author": "100ms",
15
15
  "license": "MIT",
16
16
  "files": [
@@ -75,11 +75,11 @@
75
75
  "react": ">=17.0.2 <19.0.0"
76
76
  },
77
77
  "dependencies": {
78
- "@100mslive/hls-player": "0.1.14",
79
- "@100mslive/hms-virtual-background": "1.11.14",
80
- "@100mslive/react-icons": "0.8.14",
81
- "@100mslive/react-sdk": "0.8.14",
82
- "@100mslive/types-prebuilt": "0.10.0",
78
+ "@100mslive/hls-player": "0.1.15-alpha.0",
79
+ "@100mslive/hms-virtual-background": "1.11.15-alpha.0",
80
+ "@100mslive/react-icons": "0.8.15-alpha.0",
81
+ "@100mslive/react-sdk": "0.8.15-alpha.0",
82
+ "@100mslive/types-prebuilt": "0.11.0",
83
83
  "@emoji-mart/data": "^1.0.6",
84
84
  "@emoji-mart/react": "^1.0.1",
85
85
  "@radix-ui/react-accordion": "1.0.0",
@@ -114,5 +114,5 @@
114
114
  "uuid": "^8.3.2",
115
115
  "worker-timers": "^7.0.40"
116
116
  },
117
- "gitHead": "d93341f90d2fde19d31afc0e1982da0767bb079b"
117
+ "gitHead": "447c3c90520aec5943d996050e263de842a61be2"
118
118
  }
@@ -151,8 +151,8 @@ const StyledButton = styled('button', {
151
151
  '$alert_error_bright',
152
152
  '$alert_error_dim',
153
153
  '$alert_error_dim',
154
- '$on_surface_high',
155
- '$on_surface_low',
154
+ '$alert_error_brighter',
155
+ '$on_primary_low',
156
156
  ),
157
157
  primary: getButtonVariants(
158
158
  '$primary_default',
@@ -32,17 +32,18 @@ import PostLeave from './components/PostLeave';
32
32
  import PreviewContainer from './components/Preview/PreviewContainer';
33
33
  // @ts-ignore: No implicit Any
34
34
  import { ToastContainer } from './components/Toast/ToastContainer';
35
- import { RoomLayoutContext, RoomLayoutProvider } from './provider/roomLayoutProvider';
35
+ import { RoomLayoutContext, RoomLayoutProvider, useRoomLayout } from './provider/roomLayoutProvider';
36
36
  import { Box } from '../Layout';
37
37
  import { globalStyles, HMSThemeProvider } from '../Theme';
38
- // @ts-ignore: No implicit Any
39
38
  import { HMSPrebuiltContext, useHMSPrebuiltContext } from './AppContext';
40
39
  // @ts-ignore: No implicit Any
41
40
  import { FlyingEmoji } from './plugins/FlyingEmoji';
42
41
  // @ts-ignore: No implicit Any
43
42
  import { RemoteStopScreenshare } from './plugins/RemoteStopScreenshare';
44
- // @ts-ignore: No implicit Any
45
- import { getRoutePrefix } from './common/utils';
43
+ import {
44
+ useRoomLayoutLeaveScreen,
45
+ useRoomLayoutPreviewScreen,
46
+ } from './provider/roomLayoutProvider/hooks/useRoomLayoutScreen';
46
47
  // @ts-ignore: No implicit Any
47
48
  import { FeatureFlags } from './services/FeatureFlags';
48
49
 
@@ -62,6 +63,9 @@ export type HMSPrebuiltProps = {
62
63
  themes?: Theme[];
63
64
  options?: HMSPrebuiltOptions;
64
65
  screens?: Screens;
66
+ authToken?: string;
67
+ roomId?: string;
68
+ role?: string;
65
69
  onLeave?: () => void;
66
70
  };
67
71
 
@@ -86,6 +90,9 @@ export const HMSPrebuilt = React.forwardRef<HMSPrebuiltRefType, HMSPrebuiltProps
86
90
  (
87
91
  {
88
92
  roomCode = '',
93
+ authToken = '',
94
+ roomId = '',
95
+ role = '',
89
96
  logo,
90
97
  typography,
91
98
  themes,
@@ -108,6 +115,7 @@ export const HMSPrebuilt = React.forwardRef<HMSPrebuiltRefType, HMSPrebuiltProps
108
115
  const hmsActions = hms.getActions();
109
116
  const hmsNotifications = hms.getNotifications();
110
117
  const hmsStats = hms.getStats();
118
+ hms.triggerOnSubscribe();
111
119
 
112
120
  reactiveStore.current = {
113
121
  hmsActions,
@@ -152,6 +160,15 @@ export const HMSPrebuilt = React.forwardRef<HMSPrebuiltRefType, HMSPrebuiltProps
152
160
  screens,
153
161
  };
154
162
 
163
+ if (!roomCode && !(authToken && roomId && role)) {
164
+ console.error(`
165
+ HMSPrebuilt can be initialised by providing:
166
+ either just "roomCode" or "authToken" and "roomId" and "role".
167
+ Please check if you are providing the above values for initialising prebuilt.
168
+ `);
169
+ throw Error('Incorrect initializing params for HMSPrebuilt component');
170
+ }
171
+
155
172
  if (!hydrated) {
156
173
  return null;
157
174
  }
@@ -163,8 +180,8 @@ export const HMSPrebuilt = React.forwardRef<HMSPrebuiltRefType, HMSPrebuiltProps
163
180
  <HMSPrebuiltContext.Provider
164
181
  value={{
165
182
  roomCode,
166
- showPreview: true,
167
- showLeave: true,
183
+ roomId,
184
+ role,
168
185
  onLeave,
169
186
  userName,
170
187
  userId,
@@ -185,7 +202,8 @@ export const HMSPrebuilt = React.forwardRef<HMSPrebuiltRefType, HMSPrebuiltProps
185
202
  >
186
203
  <RoomLayoutProvider roomLayoutEndpoint={roomLayoutEndpoint} overrideLayout={overrideLayout}>
187
204
  <RoomLayoutContext.Consumer>
188
- {layout => {
205
+ {data => {
206
+ const layout = data?.layout;
189
207
  const theme: Theme = layout?.themes?.[0] || ({} as Theme);
190
208
  const { typography } = layout || {};
191
209
  let fontFamily = ['sans-serif'];
@@ -219,7 +237,7 @@ export const HMSPrebuilt = React.forwardRef<HMSPrebuiltRefType, HMSPrebuiltProps
219
237
  '-webkit-text-size-adjust': '100%',
220
238
  }}
221
239
  >
222
- <AppRoutes authTokenByRoomCodeEndpoint={tokenByRoomCodeEndpoint} />
240
+ <AppRoutes authTokenByRoomCodeEndpoint={tokenByRoomCodeEndpoint} defaultAuthToken={authToken} />
223
241
  </Box>
224
242
  </HMSThemeProvider>
225
243
  );
@@ -237,26 +255,15 @@ HMSPrebuilt.displayName = 'HMSPrebuilt';
237
255
 
238
256
  const Redirector = ({ showPreview }: { showPreview: boolean }) => {
239
257
  const { roomId, role } = useParams();
240
-
241
- if (!roomId && !role) {
242
- return <Navigate to="/" />;
243
- }
244
- if (!roomId) {
245
- return <Navigate to="/" />;
246
- }
247
- if (['streaming', 'preview', 'meeting', 'leave'].includes(roomId) && !role) {
248
- return <Navigate to="/" />;
249
- }
250
-
251
- return <Navigate to={`${getRoutePrefix()}/${showPreview ? 'preview' : 'meeting'}/${roomId}/${role || ''}`} />;
258
+ return <Navigate to={`/${showPreview ? 'preview' : 'meeting'}/${roomId}/${role || ''}`} />;
252
259
  };
253
260
 
254
261
  const RouteList = () => {
255
- const { showPreview, showLeave } = useHMSPrebuiltContext();
256
-
262
+ const { isPreviewScreenEnabled } = useRoomLayoutPreviewScreen();
263
+ const { isLeaveScreenEnabled } = useRoomLayoutLeaveScreen();
257
264
  return (
258
265
  <Routes>
259
- {showPreview && (
266
+ {isPreviewScreenEnabled ? (
260
267
  <Route path="preview">
261
268
  <Route
262
269
  path=":roomId/:role"
@@ -275,7 +282,7 @@ const RouteList = () => {
275
282
  }
276
283
  />
277
284
  </Route>
278
- )}
285
+ ) : null}
279
286
  <Route path="meeting">
280
287
  <Route
281
288
  path=":roomId/:role"
@@ -294,15 +301,15 @@ const RouteList = () => {
294
301
  }
295
302
  />
296
303
  </Route>
297
- {showLeave && (
304
+ {isLeaveScreenEnabled ? (
298
305
  <Route path="leave">
299
306
  <Route path=":roomId/:role" element={<PostLeave />} />
300
307
  <Route path=":roomId" element={<PostLeave />} />
301
308
  </Route>
302
- )}
309
+ ) : null}
303
310
 
304
- <Route path="/:roomId/:role" element={<Redirector showPreview={showPreview} />} />
305
- <Route path="/:roomId/" element={<Redirector showPreview={showPreview} />} />
311
+ <Route path="/:roomId/:role" element={<Redirector showPreview={isPreviewScreenEnabled} />} />
312
+ <Route path="/:roomId/" element={<Redirector showPreview={isPreviewScreenEnabled} />} />
306
313
  </Routes>
307
314
  );
308
315
  };
@@ -335,7 +342,14 @@ const Router = ({ children }: { children: ReactElement }) => {
335
342
  );
336
343
  };
337
344
 
338
- function AppRoutes({ authTokenByRoomCodeEndpoint }: { authTokenByRoomCodeEndpoint: string }) {
345
+ function AppRoutes({
346
+ authTokenByRoomCodeEndpoint,
347
+ defaultAuthToken,
348
+ }: {
349
+ authTokenByRoomCodeEndpoint: string;
350
+ defaultAuthToken?: string;
351
+ }) {
352
+ const roomLayout = useRoomLayout();
339
353
  return (
340
354
  <Router>
341
355
  <>
@@ -346,10 +360,12 @@ function AppRoutes({ authTokenByRoomCodeEndpoint }: { authTokenByRoomCodeEndpoin
346
360
  <RemoteStopScreenshare />
347
361
  <KeyboardHandler />
348
362
  <BeamSpeakerLabelsLogging />
349
- <AuthToken authTokenByRoomCodeEndpoint={authTokenByRoomCodeEndpoint} />
350
- <Routes>
351
- <Route path="/*" element={<RouteList />} />
352
- </Routes>
363
+ <AuthToken authTokenByRoomCodeEndpoint={authTokenByRoomCodeEndpoint} defaultAuthToken={defaultAuthToken} />
364
+ {roomLayout && (
365
+ <Routes>
366
+ <Route path="/*" element={<RouteList />} />
367
+ </Routes>
368
+ )}
353
369
  </>
354
370
  </Router>
355
371
  );
@@ -1,8 +1,16 @@
1
1
  import React, { useContext } from 'react';
2
2
 
3
- export const HMSPrebuiltContext = React.createContext({
4
- showPreview: true,
5
- showLeave: true,
3
+ type HMSPrebuiltContextType = {
4
+ roomCode: string;
5
+ roomId?: string;
6
+ role?: string;
7
+ userName?: string;
8
+ userId?: string;
9
+ endpoints?: object;
10
+ onLeave?: () => void;
11
+ };
12
+
13
+ export const HMSPrebuiltContext = React.createContext<HMSPrebuiltContextType>({
6
14
  roomCode: '',
7
15
  userName: '',
8
16
  userId: '',
@@ -5,6 +5,7 @@ const IconButton = styled(BaseIconButton, {
5
5
  width: '$14',
6
6
  height: '$14',
7
7
  border: '1px solid $border_bright',
8
+ bg: '$background_dim',
8
9
  r: '$1',
9
10
  variants: {
10
11
  active: {
@@ -9,6 +9,7 @@ export default {
9
9
  roomCode: { control: { type: 'text' }, defaultValue: '' },
10
10
  logo: { control: { type: 'object' }, defaultValue: null },
11
11
  typography: { control: { type: 'object' }, defaultValue: 'Roboto' },
12
+ options: { control: { type: 'object' }, defaultValue: {} },
12
13
  },
13
14
  } as Meta<typeof HMSPrebuilt>;
14
15
 
@@ -1,17 +1,22 @@
1
- import { selectDominantSpeaker } from '@100mslive/hms-video-store';
1
+ import { HMSPeer, HMSPeerID, IStoreReadOnly, selectDominantSpeaker } from '@100mslive/react-sdk';
2
2
 
3
3
  class PeersSorter {
4
- listeners = new Set();
5
- storeUnsubscribe;
4
+ storeUnsubscribe: undefined | (() => void) = undefined;
5
+ store: IStoreReadOnly<any>;
6
+ peers: Map<string, HMSPeer>;
7
+ lruPeers: Set<HMSPeerID>;
8
+ tilesPerPage!: number;
9
+ speaker?: HMSPeer;
10
+ listeners: Set<(peers: HMSPeer[]) => void> = new Set();
6
11
 
7
- constructor(store) {
12
+ constructor(store: IStoreReadOnly<any>) {
8
13
  this.store = store;
9
14
  this.peers = new Map();
10
15
  this.lruPeers = new Set();
11
16
  this.speaker = undefined;
12
17
  }
13
18
 
14
- setPeersAndTilesPerPage = ({ peers, tilesPerPage }) => {
19
+ setPeersAndTilesPerPage = ({ peers, tilesPerPage }: { peers: HMSPeer[]; tilesPerPage: number }) => {
15
20
  this.tilesPerPage = tilesPerPage;
16
21
  const peerIds = new Set(peers.map(peer => peer.id));
17
22
  // remove existing peers which are no longer provided
@@ -33,7 +38,7 @@ class PeersSorter {
33
38
  this.moveSpeakerToFront(this.speaker);
34
39
  };
35
40
 
36
- onUpdate = cb => {
41
+ onUpdate = (cb: (peers: HMSPeer[]) => void) => {
37
42
  this.listeners.add(cb);
38
43
  };
39
44
 
@@ -43,7 +48,7 @@ class PeersSorter {
43
48
  this.storeUnsubscribe?.();
44
49
  };
45
50
 
46
- moveSpeakerToFront = speaker => {
51
+ moveSpeakerToFront = (speaker?: HMSPeer) => {
47
52
  if (!speaker) {
48
53
  this.updateListeners();
49
54
  return;
@@ -54,7 +59,7 @@ class PeersSorter {
54
59
  }
55
60
  // delete to insert at beginning
56
61
  this.lruPeers.delete(speaker.id);
57
- let lruPeerArray = Array.from(this.lruPeers);
62
+ const lruPeerArray = Array.from(this.lruPeers);
58
63
  while (lruPeerArray.length >= this.tilesPerPage) {
59
64
  lruPeerArray.pop();
60
65
  }
@@ -62,7 +67,7 @@ class PeersSorter {
62
67
  this.updateListeners();
63
68
  };
64
69
 
65
- onDominantSpeakerChange = speaker => {
70
+ onDominantSpeakerChange = (speaker: HMSPeer | null) => {
66
71
  if (speaker && speaker.id !== this?.speaker?.id) {
67
72
  this.speaker = speaker;
68
73
  this.moveSpeakerToFront(speaker);
@@ -70,7 +75,7 @@ class PeersSorter {
70
75
  };
71
76
 
72
77
  updateListeners = () => {
73
- const orderedPeers = [];
78
+ const orderedPeers: HMSPeer[] = [];
74
79
  this.lruPeers.forEach(key => {
75
80
  const peer = this.peers.get(key);
76
81
  if (peer) {
@@ -1,102 +1,11 @@
1
1
  import { parsedUserAgent } from '@100mslive/react-sdk';
2
2
 
3
- export const defaultAudioList = [
4
- {
5
- name: 'Audio1',
6
- id: 'audio1',
7
- metadata: {
8
- description: 'Artist1',
9
- },
10
- url: 'https://bc-public-static-assets.s3.ap-south-1.amazonaws.com/webapp/playlist/audio1.mp3',
11
- type: 'audio',
12
- },
13
- {
14
- name: 'Audio2',
15
- id: 'audio2',
16
- metadata: {
17
- description: 'Artist2',
18
- },
19
- url: 'https://bc-public-static-assets.s3.ap-south-1.amazonaws.com/webapp/playlist/audio2.mp3',
20
- type: 'audio',
21
- },
22
- {
23
- name: 'Audio3',
24
- id: 'audio3',
25
- metadata: {
26
- description: 'Artist3',
27
- },
28
- url: 'https://bc-public-static-assets.s3.ap-south-1.amazonaws.com/webapp/playlist/audio3.mp3',
29
- type: 'audio',
30
- },
31
- {
32
- name: 'Audio4',
33
- id: 'audio4',
34
- metadata: {
35
- description: 'Artist4',
36
- },
37
- url: 'https://bc-public-static-assets.s3.ap-south-1.amazonaws.com/webapp/playlist/audio4.mp3',
38
- type: 'audio',
39
- },
40
- {
41
- name: 'Audio5',
42
- id: 'audio5',
43
- metadata: {
44
- description: 'Artist5',
45
- },
46
- url: 'https://bc-public-static-assets.s3.ap-south-1.amazonaws.com/webapp/playlist/audio5.mp3',
47
- type: 'audio',
48
- },
49
- {
50
- name: 'Audio6',
51
- id: 'audio6',
52
- metadata: {
53
- description: 'Artist6',
54
- },
55
- url: 'https://bc-public-static-assets.s3.ap-south-1.amazonaws.com/webapp/playlist/audio6.mp3',
56
- type: 'audio',
57
- },
58
- ];
59
-
60
- export const defaultVideoList = [
61
- {
62
- name: 'Video1',
63
- id: 'video1',
64
- metadata: {
65
- description: 'Artist1',
66
- },
67
- url: 'https://bc-public-static-assets.s3.ap-south-1.amazonaws.com/webapp/playlist/video1.mp4',
68
- type: 'video',
69
- },
70
- {
71
- name: 'Video2',
72
- id: 'video2',
73
- metadata: {
74
- description: 'Artist2',
75
- },
76
- url: 'https://bc-public-static-assets.s3.ap-south-1.amazonaws.com/webapp/playlist/video2.mp4',
77
- type: 'video',
78
- },
79
- {
80
- name: 'Video3',
81
- id: 'video3',
82
- metadata: {
83
- description: 'Artist2',
84
- },
85
- url: 'https://bc-public-static-assets.s3.ap-south-1.amazonaws.com/webapp/playlist/video3.mp4',
86
- type: 'video',
87
- },
88
- ];
89
-
90
- export const DEFAULT_HLS_ROLE_KEY = 'HLS_VIEWER_ROLE';
91
- export const DEFAULT_HLS_VIEWER_ROLE = 'hls-viewer';
92
3
  export const DEFAULT_WAITING_VIEWER_ROLE = 'waiting-room';
93
4
  export const QUERY_PARAM_SKIP_PREVIEW = 'skip_preview';
94
5
  export const QUERY_PARAM_SKIP_PREVIEW_HEADFUL = 'skip_preview_headful';
95
6
  export const QUERY_PARAM_NAME = 'name';
96
7
  export const QUERY_PARAM_VIEW_MODE = 'ui_mode';
97
- export const QUERY_PARAM_AUTH_TOKEN = 'auth_token';
98
8
  export const QUERY_PARAM_PREVIEW_AS_ROLE = 'preview_as_role';
99
- export const UI_MODE_ACTIVE_SPEAKER = 'activespeaker';
100
9
  export const UI_MODE_GRID = 'grid';
101
10
  export const MAX_TOASTS = 5;
102
11
  export const RTMP_RECORD_RESOLUTION_MIN = 480;
@@ -135,6 +44,7 @@ export const APP_DATA = {
135
44
  authToken: 'authToken',
136
45
  pdfConfig: 'pdfConfig',
137
46
  minimiseInset: 'minimiseInset',
47
+ activeScreensharePeerId: 'activeScreensharePeerId',
138
48
  };
139
49
  export const UI_SETTINGS = {
140
50
  isAudioOnly: 'isAudioOnly',
@@ -150,8 +60,6 @@ export const SIDE_PANE_OPTIONS = {
150
60
  PARTICIPANTS: 'Participants',
151
61
  CHAT: 'Chat',
152
62
  STREAMING: 'STREAMING',
153
- TILES: 'TILES',
154
- SCREEN_TILES: 'SCREEN_TILES',
155
63
  };
156
64
 
157
65
  export const SUBSCRIBED_NOTIFICATIONS = {
@@ -180,27 +88,10 @@ export const isIPadOS = false;
180
88
  // navigator?.maxTouchPoints > 2 &&
181
89
  // navigator?.userAgent?.match(/Mac/);
182
90
 
183
- export const FEATURE_LIST = {
184
- AUDIO_ONLY_SCREENSHARE: 'audioscreenshare',
185
- AUDIO_PLAYLIST: 'audioplaylist',
186
- VIDEO_PLAYLIST: 'videoplaylist',
187
- EMOJI_REACTION: 'emojireaction',
188
- AUDIO_PLUGINS: 'audioplugins',
189
- VIDEO_PLUGINS: 'videoplugins',
190
- WHITEBOARD: 'whiteboard',
191
- CHANGE_NAME: 'changename',
192
- FULLSCREEN: 'fullscreen',
193
- PICTURE_IN_PICTURE: 'pip',
194
- STARTS_FOR_NERDS: 'statsfornerds',
195
- EMBED_URL: 'embedurl',
196
- BRB: 'brb',
197
- HAND_RAISE: 'handraise',
198
- CHAT: 'chat',
199
- PIN_TILE: 'pintile',
200
- };
201
-
202
91
  export const SESSION_STORE_KEY = {
203
92
  TRANSCRIPTION_STATE: 'transcriptionState',
204
93
  PINNED_MESSAGE: 'pinnedMessage',
205
94
  SPOTLIGHT: 'spotlight',
206
95
  };
96
+
97
+ export const ROLE_CHANGE_DECLINED = 'role_change_declined';
@@ -1,7 +1,16 @@
1
1
  // @ts-check
2
2
  import { useEffect, useRef, useState } from 'react';
3
3
  import { JoinForm_JoinBtnType } from '@100mslive/types-prebuilt/elements/join_form';
4
- import { selectAvailableRoleNames, selectIsConnectedToRoom, selectPeerCount, useHMSStore } from '@100mslive/react-sdk';
4
+ import {
5
+ selectAvailableRoleNames,
6
+ selectIsConnectedToRoom,
7
+ selectPeerCount,
8
+ selectPeerMetadata,
9
+ selectPeers,
10
+ selectRemotePeers,
11
+ useHMSStore,
12
+ useHMSVanillaStore,
13
+ } from '@100mslive/react-sdk';
5
14
  import { useRoomLayout } from '../provider/roomLayoutProvider';
6
15
  import { isInternalRole } from './utils';
7
16
 
@@ -53,3 +62,27 @@ export const useShowStreamingUI = () => {
53
62
  const { join_form } = layout?.screens?.preview?.default?.elements || {};
54
63
  return join_form?.join_btn_type === JoinForm_JoinBtnType.JOIN_BTN_TYPE_JOIN_AND_GO_LIVE;
55
64
  };
65
+
66
+ // The search results should not have role name matches
67
+ export const useParticipants = params => {
68
+ const isConnected = useHMSStore(selectIsConnectedToRoom);
69
+ const peerCount = useHMSStore(selectPeerCount);
70
+ const availableRoles = useHMSStore(selectAvailableRoleNames);
71
+ let participantList = useHMSStore(isConnected ? selectPeers : selectRemotePeers);
72
+ const rolesWithParticipants = Array.from(new Set(participantList.map(peer => peer.roleName)));
73
+ const vanillaStore = useHMSVanillaStore();
74
+ if (params?.metadata?.isHandRaised) {
75
+ participantList = participantList.filter(peer => {
76
+ return vanillaStore.getState(selectPeerMetadata(peer.id)).isHandRaised;
77
+ });
78
+ }
79
+ if (params?.role && availableRoles.includes(params.role)) {
80
+ participantList = participantList.filter(peer => peer.roleName === params.role);
81
+ }
82
+ if (params?.search) {
83
+ const search = params.search;
84
+ // Removed peer.roleName?.toLowerCase().includes(search)
85
+ participantList = participantList.filter(peer => peer.name.toLowerCase().includes(search));
86
+ }
87
+ return { participants: participantList, isConnected, peerCount, rolesWithParticipants };
88
+ };
@@ -56,14 +56,6 @@ export const isScreenshareSupported = () => {
56
56
  return typeof navigator.mediaDevices.getDisplayMedia !== 'undefined';
57
57
  };
58
58
 
59
- export const getRoutePrefix = () => {
60
- return window.location.pathname.startsWith('/streaming') ? '/streaming' : '';
61
- };
62
-
63
- export const isStreamingKit = () => {
64
- return window.location.pathname.startsWith('/streaming');
65
- };
66
-
67
59
  export const isInternalRole = role => role && role.startsWith('__internal');
68
60
 
69
61
  export const metadataPayloadParser = payload => {
@@ -1,5 +1,4 @@
1
1
  import React, { useEffect } from 'react';
2
- import { useSearchParam } from 'react-use';
3
2
  import {
4
3
  HMSRoomState,
5
4
  selectAvailableRoleNames,
@@ -17,16 +16,11 @@ import { normalizeAppPolicyConfig } from '../init/initUtils';
17
16
  import { UserPreferencesKeys, useUserPreferences } from '../hooks/useUserPreferences';
18
17
  import { useIsSidepaneTypeOpen, useSidepaneReset, useSidepaneState, useSidepaneToggle } from './useSidepane';
19
18
  import { useSetAppDataByKey } from './useUISettings';
20
- import { getMetadata } from '../../common/utils';
21
19
  import {
22
20
  APP_DATA,
23
21
  CHAT_SELECTOR,
24
- DEFAULT_HLS_ROLE_KEY,
25
- DEFAULT_HLS_VIEWER_ROLE,
26
22
  DEFAULT_WAITING_VIEWER_ROLE,
27
- QUERY_PARAM_VIEW_MODE,
28
23
  SIDE_PANE_OPTIONS,
29
- UI_MODE_ACTIVE_SPEAKER,
30
24
  UI_MODE_GRID,
31
25
  UI_SETTINGS,
32
26
  } from '../../common/constants';
@@ -66,11 +60,11 @@ const initialAppData = {
66
60
  [APP_DATA.hlsStarted]: false,
67
61
  [APP_DATA.rtmpStarted]: false,
68
62
  [APP_DATA.recordingStarted]: false,
69
- [APP_DATA.hlsViewerRole]: DEFAULT_HLS_VIEWER_ROLE,
70
63
  [APP_DATA.waitingViewerRole]: DEFAULT_WAITING_VIEWER_ROLE,
71
64
  [APP_DATA.dropdownList]: [],
72
65
  [APP_DATA.authToken]: '',
73
66
  [APP_DATA.minimiseInset]: false,
67
+ [APP_DATA.activeScreensharePeerId]: '',
74
68
  };
75
69
 
76
70
  export const AppData = React.memo(({ appDetails, tokenEndpoint }) => {
@@ -82,7 +76,6 @@ export const AppData = React.memo(({ appDetails, tokenEndpoint }) => {
82
76
  const roleNames = useHMSStore(selectAvailableRoleNames);
83
77
  const rolesMap = useHMSStore(selectRolesMap);
84
78
  const localPeerRole = useHMSStore(selectLocalPeerRoleName);
85
- const isDefaultModeActiveSpeaker = useSearchParam(QUERY_PARAM_VIEW_MODE) === UI_MODE_ACTIVE_SPEAKER;
86
79
 
87
80
  useEffect(() => {
88
81
  if (!isConnected && sidePane && sidePane !== SIDE_PANE_OPTIONS.PARTICIPANTS) {
@@ -103,17 +96,14 @@ export const AppData = React.memo(({ appDetails, tokenEndpoint }) => {
103
96
  const uiSettings = preferences || {};
104
97
  const updatedSettings = {
105
98
  ...uiSettings,
106
- [UI_SETTINGS.uiViewMode]: isDefaultModeActiveSpeaker
107
- ? UI_MODE_ACTIVE_SPEAKER
108
- : uiSettings.uiViewMode || UI_MODE_GRID,
99
+ [UI_SETTINGS.uiViewMode]: uiSettings.uiViewMode || UI_MODE_GRID,
109
100
  };
110
101
  hmsActions.setAppData(APP_DATA.uiSettings, updatedSettings, true);
111
- }, [preferences, isDefaultModeActiveSpeaker, hmsActions]);
102
+ }, [preferences, hmsActions]);
112
103
 
113
104
  useEffect(() => {
114
105
  const appData = {
115
106
  [APP_DATA.tokenEndpoint]: tokenEndpoint,
116
- [APP_DATA.hlsViewerRole]: getMetadata(appDetails)[DEFAULT_HLS_ROLE_KEY] || DEFAULT_HLS_VIEWER_ROLE,
117
107
  [APP_DATA.appConfig]: getAppDetails(appDetails),
118
108
  };
119
109
  for (const key in appData) {
@@ -51,10 +51,6 @@ export const useIsHeadless = () => {
51
51
  return isHeadless;
52
52
  };
53
53
 
54
- export const useHLSViewerRole = () => {
55
- return useHMSStore(selectAppData(APP_DATA.hlsViewerRole));
56
- };
57
-
58
54
  export const useWaitingViewerRole = () => {
59
55
  return useHMSStore(selectAppData(APP_DATA.waitingViewerRole));
60
56
  };
@@ -67,6 +67,8 @@ export const AudioVideoToggle = ({ hideOptions = false }) => {
67
67
  const videoTrackId = useHMSStore(selectLocalVideoTrackID);
68
68
  const localVideoTrack = useHMSStore(selectVideoTrackByID(videoTrackId));
69
69
  const roomState = useHMSStore(selectRoomState);
70
+ const isAudioPermitted = toggleAudio && audioInput?.length > 0;
71
+ const isVideoPermitted = toggleVideo && videoInput?.length > 0;
70
72
 
71
73
  return (
72
74
  <Fragment>
@@ -90,6 +92,8 @@ export const AudioVideoToggle = ({ hideOptions = false }) => {
90
92
  ) : (
91
93
  <IconButtonWithOptions
92
94
  options={formattedAudioInputList}
95
+ disabled={!isAudioPermitted}
96
+ onDisabledClick={toggleAudio}
93
97
  tooltipMessage={`Turn ${isLocalAudioEnabled ? 'off' : 'on'} audio (${isMacOS ? '⌘' : 'ctrl'} + d)`}
94
98
  icon={
95
99
  !isLocalAudioEnabled ? (
@@ -124,6 +128,8 @@ export const AudioVideoToggle = ({ hideOptions = false }) => {
124
128
  </Tooltip>
125
129
  ) : (
126
130
  <IconButtonWithOptions
131
+ disabled={!isVideoPermitted}
132
+ onDisabledClick={toggleVideo}
127
133
  options={formattedVideoInputList}
128
134
  tooltipMessage={`Turn ${isLocalVideoEnabled ? 'off' : 'on'} video (${isMacOS ? '⌘' : 'ctrl'} + e)`}
129
135
  icon={