@100mslive/roomkit-react 0.2.8-alpha.2 → 0.2.8-alpha.4

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 (62) hide show
  1. package/dist/{HLSView-CEPQ23TO.js → HLSView-UIPDGADR.js} +509 -234
  2. package/dist/HLSView-UIPDGADR.js.map +7 -0
  3. package/dist/Prebuilt/common/hooks.d.ts +3 -0
  4. package/dist/Prebuilt/components/HMSVideo/FullscreenButton.d.ts +5 -0
  5. package/dist/Prebuilt/components/HMSVideo/HLSAutoplayBlockedPrompt.d.ts +5 -0
  6. package/dist/Prebuilt/components/HMSVideo/HLSCaptionSelector.d.ts +1 -2
  7. package/dist/Prebuilt/components/HMSVideo/HLSQualitySelector.d.ts +12 -0
  8. package/dist/Prebuilt/components/HMSVideo/MwebHLSViewTitle.d.ts +2 -0
  9. package/dist/Prebuilt/components/HMSVideo/PlayButton.d.ts +6 -0
  10. package/dist/Prebuilt/components/HMSVideo/PlayerContext.d.ts +8 -0
  11. package/dist/Prebuilt/components/HMSVideo/VideoProgress.d.ts +2 -0
  12. package/dist/Prebuilt/components/HMSVideo/VideoTime.d.ts +2 -0
  13. package/dist/Prebuilt/components/HMSVideo/VolumeControl.d.ts +2 -0
  14. package/dist/Prebuilt/components/HMSVideo/index.d.ts +17 -0
  15. package/dist/Prebuilt/components/HMSVideo/utils.d.ts +9 -0
  16. package/dist/Prebuilt/components/Leave/MwebLeaveRoom.d.ts +1 -3
  17. package/dist/Prebuilt/components/MwebLandscapePrompt.d.ts +1 -1
  18. package/dist/Prebuilt/components/RaiseHand.d.ts +2 -0
  19. package/dist/Prebuilt/components/SidePaneTabs.d.ts +1 -0
  20. package/dist/{chunk-2Y4FJB25.js → chunk-J4NOQ2YL.js} +562 -450
  21. package/dist/chunk-J4NOQ2YL.js.map +7 -0
  22. package/dist/index.cjs.js +1556 -1145
  23. package/dist/index.cjs.js.map +4 -4
  24. package/dist/index.js +1 -1
  25. package/dist/meta.cjs.json +429 -156
  26. package/dist/meta.esbuild.json +445 -164
  27. package/package.json +6 -6
  28. package/src/Prebuilt/common/hooks.ts +21 -0
  29. package/src/Prebuilt/components/Chat/ChatFooter.tsx +26 -10
  30. package/src/Prebuilt/components/ConferenceScreen.tsx +34 -2
  31. package/src/Prebuilt/components/Footer/Footer.tsx +0 -1
  32. package/src/Prebuilt/components/HMSVideo/Controls.jsx +1 -1
  33. package/src/Prebuilt/components/HMSVideo/FullscreenButton.tsx +13 -0
  34. package/src/Prebuilt/components/HMSVideo/{HLSAutoplayBlockedPrompt.jsx → HLSAutoplayBlockedPrompt.tsx} +13 -6
  35. package/src/Prebuilt/components/HMSVideo/HLSCaptionSelector.tsx +4 -2
  36. package/src/Prebuilt/components/HMSVideo/HLSQualitySelector.tsx +241 -0
  37. package/src/Prebuilt/components/HMSVideo/HMSVideo.jsx +3 -0
  38. package/src/Prebuilt/components/HMSVideo/MwebHLSViewTitle.tsx +91 -0
  39. package/src/Prebuilt/components/HMSVideo/PlayButton.tsx +27 -0
  40. package/src/Prebuilt/components/HMSVideo/PlayerContext.tsx +15 -0
  41. package/src/Prebuilt/components/HMSVideo/VideoProgress.tsx +81 -0
  42. package/src/Prebuilt/components/HMSVideo/VideoTime.tsx +42 -0
  43. package/src/Prebuilt/components/HMSVideo/{VolumeControl.jsx → VolumeControl.tsx} +7 -5
  44. package/src/Prebuilt/components/HMSVideo/{index.js → index.ts} +2 -0
  45. package/src/Prebuilt/components/HMSVideo/utils.ts +35 -0
  46. package/src/Prebuilt/components/Leave/LeaveRoom.tsx +7 -1
  47. package/src/Prebuilt/components/Leave/MwebLeaveRoom.tsx +38 -25
  48. package/src/Prebuilt/components/MoreSettings/MoreSettings.tsx +3 -1
  49. package/src/Prebuilt/components/MoreSettings/SplitComponents/MwebOptions.tsx +1 -1
  50. package/src/Prebuilt/components/MwebLandscapePrompt.tsx +5 -0
  51. package/src/Prebuilt/components/{RaiseHand.jsx → RaiseHand.tsx} +3 -2
  52. package/src/Prebuilt/components/SidePaneTabs.tsx +29 -10
  53. package/src/Prebuilt/layouts/HLSView.jsx +272 -156
  54. package/src/Prebuilt/layouts/SidePane.tsx +21 -10
  55. package/src/Prebuilt/layouts/VideoStreamingSection.tsx +11 -1
  56. package/dist/HLSView-CEPQ23TO.js.map +0 -7
  57. package/dist/chunk-2Y4FJB25.js.map +0 -7
  58. package/src/Prebuilt/components/HMSVideo/FullscreenButton.jsx +0 -18
  59. package/src/Prebuilt/components/HMSVideo/HLSQualitySelector.jsx +0 -127
  60. package/src/Prebuilt/components/HMSVideo/HMSVIdeoUtils.js +0 -27
  61. package/src/Prebuilt/components/HMSVideo/VideoProgress.jsx +0 -76
  62. package/src/Prebuilt/components/HMSVideo/VideoTime.jsx +0 -33
@@ -2,6 +2,7 @@ import {
2
2
  APP_DATA,
3
3
  Box,
4
4
  Button,
5
+ ChatToggle,
5
6
  Dialog,
6
7
  DialogContent,
7
8
  DialogRow,
@@ -11,6 +12,9 @@ import {
11
12
  IconButton,
12
13
  IconButton_default,
13
14
  Loading,
15
+ Logo,
16
+ SIDE_PANE_OPTIONS,
17
+ Sheet,
14
18
  Slider,
15
19
  Text,
16
20
  ToastManager,
@@ -19,30 +23,36 @@ import {
19
23
  __objRest,
20
24
  __spreadValues,
21
25
  config,
26
+ getFormattedCount,
22
27
  init_define_process_env,
23
28
  styled,
29
+ theme,
30
+ useIsLandscape,
24
31
  usePollViewToggle,
32
+ useRoomLayoutConferencingScreen,
33
+ useSidepaneToggle,
25
34
  useTheme
26
- } from "./chunk-2Y4FJB25.js";
35
+ } from "./chunk-J4NOQ2YL.js";
27
36
 
28
37
  // src/Prebuilt/layouts/HLSView.jsx
29
38
  init_define_process_env();
30
- import React11, { useCallback, useEffect as useEffect3, useRef as useRef2, useState as useState4 } from "react";
31
- import { useFullscreen, useMedia, usePrevious, useToggle } from "react-use";
39
+ import React13, { useCallback as useCallback2, useEffect as useEffect4, useRef as useRef2, useState as useState5 } from "react";
40
+ import { useFullscreen, useMedia as useMedia2, usePrevious, useToggle } from "react-use";
32
41
  import { HLSPlaybackState, HMSHLSPlayer, HMSHLSPlayerEvents as HMSHLSPlayerEvents2 } from "@100mslive/hls-player";
33
42
  import screenfull from "screenfull";
34
43
  import {
44
+ HLSPlaylistType,
35
45
  HMSNotificationTypes,
36
46
  selectAppData,
37
- selectHLSState,
47
+ selectHLSState as selectHLSState2,
38
48
  selectPeerNameByID,
39
49
  selectPollByID,
40
50
  useHMSActions,
41
51
  useHMSNotifications,
42
- useHMSStore,
52
+ useHMSStore as useHMSStore2,
43
53
  useHMSVanillaStore
44
54
  } from "@100mslive/react-sdk";
45
- import { ColoredHandIcon, ExpandIcon, GoLiveIcon, PlayIcon as PlayIcon2, ShrinkIcon } from "@100mslive/react-icons";
55
+ import { ColoredHandIcon, GoLiveIcon, PauseIcon as PauseIcon2, PlayIcon as PlayIcon2 } from "@100mslive/react-icons";
46
56
 
47
57
  // src/Prebuilt/components/HlsStatsOverlay.jsx
48
58
  init_define_process_env();
@@ -125,7 +135,7 @@ var HlsStatsRow = memo(({ label, children }) => {
125
135
  ));
126
136
  });
127
137
 
128
- // src/Prebuilt/components/HMSVideo/index.js
138
+ // src/Prebuilt/components/HMSVideo/index.ts
129
139
  init_define_process_env();
130
140
 
131
141
  // src/Prebuilt/components/HMSVideo/Controls.jsx
@@ -173,7 +183,8 @@ var HMSVideo = forwardRef((_a, videoRef) => {
173
183
  letterSpacing: "0.5px"
174
184
  },
175
185
  "& video::-webkit-media-text-track-display": {
176
- padding: "0 $4"
186
+ padding: "0 $4",
187
+ boxShadow: "0px 1px 3px 0px #000000A3"
177
188
  },
178
189
  "& video::-webkit-media-text-track-container": {
179
190
  fontSize: "$space$10 !important"
@@ -187,7 +198,9 @@ var HMSVideo = forwardRef((_a, videoRef) => {
187
198
  style: {
188
199
  flex: "1 1 0",
189
200
  margin: "0 auto",
190
- minHeight: "0"
201
+ minHeight: "0",
202
+ objectFit: "contain",
203
+ width: "inherit"
191
204
  },
192
205
  ref: videoRef,
193
206
  playsInline: true
@@ -197,19 +210,41 @@ var HMSVideo = forwardRef((_a, videoRef) => {
197
210
  );
198
211
  });
199
212
 
200
- // src/Prebuilt/components/HMSVideo/PlayButton.jsx
213
+ // src/Prebuilt/components/HMSVideo/PlayButton.tsx
201
214
  init_define_process_env();
202
- import React3 from "react";
215
+ import React4 from "react";
203
216
  import { PauseIcon, PlayIcon } from "@100mslive/react-icons";
204
- var PlayButton = ({ onClick, isPaused }) => {
205
- return /* @__PURE__ */ React3.createElement(Tooltip, { title: isPaused ? "Play" : "Pause", side: "top" }, /* @__PURE__ */ React3.createElement(IconButton, { onClick, "data-testid": "play_pause_btn" }, isPaused ? /* @__PURE__ */ React3.createElement(PlayIcon, { width: 20, height: 20 }) : /* @__PURE__ */ React3.createElement(PauseIcon, { width: 20, height: 20 })));
217
+
218
+ // src/Prebuilt/components/HMSVideo/PlayerContext.tsx
219
+ init_define_process_env();
220
+ import React3, { useContext } from "react";
221
+ var HMSPlayerContext = React3.createContext({
222
+ hlsPlayer: void 0
223
+ });
224
+ var useHMSPlayerContext = () => {
225
+ const context = useContext(HMSPlayerContext);
226
+ return context;
206
227
  };
207
228
 
208
- // src/Prebuilt/components/HMSVideo/VideoProgress.jsx
229
+ // src/Prebuilt/components/HMSVideo/PlayButton.tsx
230
+ var PlayButton = ({
231
+ isPaused,
232
+ width = 20,
233
+ height = 20
234
+ }) => {
235
+ const { hlsPlayer: hlsPlayer2 } = useHMSPlayerContext();
236
+ const onClick = (event) => __async(void 0, null, function* () {
237
+ event == null ? void 0 : event.stopPropagation();
238
+ isPaused ? yield hlsPlayer2 == null ? void 0 : hlsPlayer2.play() : hlsPlayer2 == null ? void 0 : hlsPlayer2.pause();
239
+ });
240
+ return /* @__PURE__ */ React4.createElement(Tooltip, { title: isPaused ? "Play" : "Pause", side: "top" }, /* @__PURE__ */ React4.createElement(IconButton, { onClick, "data-testid": "play_pause_btn" }, isPaused ? /* @__PURE__ */ React4.createElement(PlayIcon, { width, height }) : /* @__PURE__ */ React4.createElement(PauseIcon, { width, height })));
241
+ };
242
+
243
+ // src/Prebuilt/components/HMSVideo/VideoProgress.tsx
209
244
  init_define_process_env();
210
- import React4, { useEffect, useRef, useState } from "react";
245
+ import React5, { useEffect, useState } from "react";
211
246
 
212
- // src/Prebuilt/components/HMSVideo/HMSVIdeoUtils.js
247
+ // src/Prebuilt/components/HMSVideo/utils.ts
213
248
  init_define_process_env();
214
249
  function getPercentage(a, b) {
215
250
  return a / b * 100;
@@ -229,16 +264,32 @@ function getDurationFromSeconds2(timeInSeconds) {
229
264
  }
230
265
  return videoTimeStr;
231
266
  }
267
+ function getTime(timeInMilles) {
268
+ const timeInSeconds = Math.floor(timeInMilles / 1e3);
269
+ const hours = Math.floor(timeInSeconds / 3600);
270
+ const minutes = Math.floor(timeInSeconds % 3600 / 60);
271
+ const hour = hours !== 0 ? `${hours < 10 ? "0" : ""}${hours}` : "";
272
+ return hour + `${hour ? "h:" : ""}` + minutes + "m";
273
+ }
232
274
 
233
- // src/Prebuilt/components/HMSVideo/VideoProgress.jsx
234
- var VideoProgress = ({ onValueChange, hlsPlayer: hlsPlayer2 }) => {
275
+ // src/Prebuilt/components/HMSVideo/VideoProgress.tsx
276
+ var VideoProgress = () => {
277
+ const { hlsPlayer: hlsPlayer2 } = useHMSPlayerContext();
235
278
  const [videoProgress, setVideoProgress] = useState(0);
236
279
  const [bufferProgress, setBufferProgress] = useState(0);
237
- const progressRootRef = useRef();
280
+ const videoEl = hlsPlayer2 == null ? void 0 : hlsPlayer2.getVideoElement();
281
+ const onValueChange = (time) => {
282
+ hlsPlayer2 == null ? void 0 : hlsPlayer2.seekTo(time);
283
+ };
238
284
  useEffect(() => {
239
- const videoEl = hlsPlayer2.getVideoElement();
285
+ if (!videoEl) {
286
+ return;
287
+ }
240
288
  const timeupdateHandler = () => {
241
289
  var _a;
290
+ if (!videoEl) {
291
+ return;
292
+ }
242
293
  const videoProgress2 = Math.floor(getPercentage(videoEl.currentTime, videoEl.duration));
243
294
  let bufferProgress2 = 0;
244
295
  if (videoEl.buffered.length > 0) {
@@ -247,108 +298,105 @@ var VideoProgress = ({ onValueChange, hlsPlayer: hlsPlayer2 }) => {
247
298
  setVideoProgress(isNaN(videoProgress2) ? 0 : videoProgress2);
248
299
  setBufferProgress(isNaN(bufferProgress2) ? 0 : bufferProgress2);
249
300
  };
250
- if (videoEl) {
251
- videoEl.addEventListener("timeupdate", timeupdateHandler);
252
- }
301
+ videoEl.addEventListener("timeupdate", timeupdateHandler);
253
302
  return function cleanup() {
254
- if (videoEl) {
255
- videoEl.removeEventListener("timeupdate", timeupdateHandler);
256
- }
303
+ videoEl == null ? void 0 : videoEl.removeEventListener("timeupdate", timeupdateHandler);
257
304
  };
258
- }, [hlsPlayer2]);
259
- const onProgressChangeHandler = (e) => {
260
- const userClickedX = e.clientX - progressRootRef.current.offsetLeft;
261
- const progressBarWidth = progressRootRef.current.offsetWidth;
262
- const progress = Math.floor(getPercentage(userClickedX, progressBarWidth));
263
- const videoEl = hlsPlayer2.getVideoElement();
264
- const currentTime = progress * videoEl.duration / 100;
305
+ }, [videoEl]);
306
+ const onProgress = (progress) => {
307
+ const progress1 = Math.floor(getPercentage(progress[0], 100));
308
+ const videoEl2 = hlsPlayer2 == null ? void 0 : hlsPlayer2.getVideoElement();
309
+ const currentTime = progress1 * ((videoEl2 == null ? void 0 : videoEl2.duration) || 0) / 100;
265
310
  if (onValueChange) {
266
311
  onValueChange(currentTime);
267
312
  }
268
313
  };
269
- return hlsPlayer2.getVideoElement() ? /* @__PURE__ */ React4.createElement(
270
- Flex,
314
+ if (!videoEl) {
315
+ return null;
316
+ }
317
+ return /* @__PURE__ */ React5.createElement(Flex, { align: "center", css: { cursor: "pointer", h: "$2", alignSelf: "stretch" } }, /* @__PURE__ */ React5.createElement(
318
+ Slider,
271
319
  {
272
- ref: progressRootRef,
273
- css: { cursor: "pointer", h: "$2", alignSelf: "stretch" },
274
- onClick: onProgressChangeHandler
275
- },
276
- /* @__PURE__ */ React4.createElement(
277
- Box,
278
- {
279
- id: "video-actual",
280
- css: {
281
- display: "inline",
282
- width: `${videoProgress}%`,
283
- background: "$primary_default"
284
- }
285
- }
286
- ),
287
- /* @__PURE__ */ React4.createElement(
288
- Box,
289
- {
290
- id: "video-buffer",
291
- css: {
292
- width: `${bufferProgress - videoProgress}%`,
293
- background: "$on_surface_high",
294
- opacity: "25%"
295
- }
296
- }
297
- ),
298
- /* @__PURE__ */ React4.createElement(
299
- Box,
300
- {
301
- id: "video-rest",
302
- css: {
303
- width: `${100 - bufferProgress}%`,
304
- background: "$on_surface_high",
305
- opacity: "10%"
306
- }
320
+ id: "video-actual-rest",
321
+ css: {
322
+ cursor: "pointer",
323
+ h: "$2",
324
+ zIndex: 1,
325
+ transition: `all .2s ease .5s`
326
+ },
327
+ min: 0,
328
+ max: 100,
329
+ step: 1,
330
+ value: [videoProgress],
331
+ showTooltip: false,
332
+ onValueChange: onProgress,
333
+ thumbStyles: { w: "$6", h: "$6" }
334
+ }
335
+ ), /* @__PURE__ */ React5.createElement(
336
+ Box,
337
+ {
338
+ id: "video-buffer",
339
+ css: {
340
+ h: "$2",
341
+ width: `${bufferProgress - videoProgress}%`,
342
+ background: "$on_surface_high",
343
+ position: "absolute",
344
+ left: `${videoProgress}%`,
345
+ opacity: "25%"
307
346
  }
308
- )
309
- ) : null;
347
+ }
348
+ ));
310
349
  };
311
350
 
312
- // src/Prebuilt/components/HMSVideo/VideoTime.jsx
351
+ // src/Prebuilt/components/HMSVideo/VideoTime.tsx
313
352
  init_define_process_env();
314
- import React5, { useEffect as useEffect2, useState as useState2 } from "react";
353
+ import React6, { useEffect as useEffect2, useState as useState2 } from "react";
315
354
  import { HMSHLSPlayerEvents } from "@100mslive/hls-player";
316
- var VideoTime = ({ hlsPlayer: hlsPlayer2 }) => {
355
+ var VideoTime = () => {
356
+ const { hlsPlayer: hlsPlayer2 } = useHMSPlayerContext();
317
357
  const [videoTime, setVideoTime] = useState2("");
318
358
  useEffect2(() => {
319
- const timeupdateHandler = (currentTime) => setVideoTime(getDurationFromSeconds2(currentTime));
359
+ const timeupdateHandler = (currentTime) => {
360
+ const videoEl = hlsPlayer2 == null ? void 0 : hlsPlayer2.getVideoElement();
361
+ if (videoEl) {
362
+ setVideoTime(getDurationFromSeconds2(videoEl.duration - currentTime));
363
+ } else {
364
+ setVideoTime(getDurationFromSeconds2(currentTime));
365
+ }
366
+ };
320
367
  if (hlsPlayer2) {
321
368
  hlsPlayer2.on(HMSHLSPlayerEvents.CURRENT_TIME, timeupdateHandler);
322
369
  }
323
370
  return function cleanup() {
324
- if (hlsPlayer2) {
325
- hlsPlayer2.off(HMSHLSPlayerEvents.CURRENT_TIME, timeupdateHandler);
326
- }
371
+ hlsPlayer2 == null ? void 0 : hlsPlayer2.off(HMSHLSPlayerEvents.CURRENT_TIME, timeupdateHandler);
327
372
  };
328
373
  }, [hlsPlayer2]);
329
- return hlsPlayer2 ? /* @__PURE__ */ React5.createElement(
374
+ return hlsPlayer2 ? /* @__PURE__ */ React6.createElement(
330
375
  Text,
331
376
  {
377
+ variant: "body1",
332
378
  css: {
333
379
  minWidth: "$16",
334
380
  c: "$on_surface_medium",
335
381
  display: "flex",
336
- justifyContent: "center"
382
+ justifyContent: "center",
383
+ fontWeight: "$regular"
337
384
  }
338
385
  },
386
+ "-",
339
387
  videoTime
340
388
  ) : null;
341
389
  };
342
390
 
343
- // src/Prebuilt/components/HMSVideo/VolumeControl.jsx
391
+ // src/Prebuilt/components/HMSVideo/VolumeControl.tsx
344
392
  init_define_process_env();
345
- import React6, { useState as useState3 } from "react";
393
+ import React7, { useState as useState3 } from "react";
346
394
  import { VolumeOneIcon, VolumeTwoIcon, VolumeZeroIcon } from "@100mslive/react-icons";
347
- var VolumeControl = ({ hlsPlayer: hlsPlayer2 }) => {
348
- var _a;
349
- const [volume, setVolume] = useState3((_a = hlsPlayer2 == null ? void 0 : hlsPlayer2.volume) != null ? _a : 100);
395
+ var VolumeControl = () => {
396
+ const { hlsPlayer: hlsPlayer2 } = useHMSPlayerContext();
397
+ const [volume, setVolume] = useState3((hlsPlayer2 == null ? void 0 : hlsPlayer2.volume) || 0);
350
398
  const [showSlider, setShowSlider] = useState3(false);
351
- return /* @__PURE__ */ React6.createElement(
399
+ return /* @__PURE__ */ React7.createElement(
352
400
  Flex,
353
401
  {
354
402
  align: "center",
@@ -362,7 +410,7 @@ var VolumeControl = ({ hlsPlayer: hlsPlayer2 }) => {
362
410
  setShowSlider(false);
363
411
  }
364
412
  },
365
- /* @__PURE__ */ React6.createElement(
413
+ /* @__PURE__ */ React7.createElement(
366
414
  VolumeIcon,
367
415
  {
368
416
  volume,
@@ -377,7 +425,7 @@ var VolumeControl = ({ hlsPlayer: hlsPlayer2 }) => {
377
425
  }
378
426
  }
379
427
  ),
380
- /* @__PURE__ */ React6.createElement(
428
+ /* @__PURE__ */ React7.createElement(
381
429
  Slider,
382
430
  {
383
431
  css: {
@@ -395,7 +443,7 @@ var VolumeControl = ({ hlsPlayer: hlsPlayer2 }) => {
395
443
  step: 1,
396
444
  value: [volume],
397
445
  onValueChange: (volume2) => {
398
- hlsPlayer2.setVolume(volume2[0]);
446
+ hlsPlayer2 == null ? void 0 : hlsPlayer2.setVolume(volume2[0]);
399
447
  setVolume(volume2[0]);
400
448
  },
401
449
  thumbStyles: { w: "$6", h: "$6" }
@@ -405,12 +453,12 @@ var VolumeControl = ({ hlsPlayer: hlsPlayer2 }) => {
405
453
  };
406
454
  var VolumeIcon = ({ volume, onClick }) => {
407
455
  if (volume === 0) {
408
- return /* @__PURE__ */ React6.createElement(VolumeZeroIcon, { style: { cursor: "pointer", transition: "color 0.3s" }, onClick });
456
+ return /* @__PURE__ */ React7.createElement(VolumeZeroIcon, { style: { cursor: "pointer", transition: "color 0.3s" }, onClick });
409
457
  }
410
- return volume < 50 ? /* @__PURE__ */ React6.createElement(VolumeOneIcon, { style: { cursor: "pointer", transition: "color 0.3s" }, onClick }) : /* @__PURE__ */ React6.createElement(VolumeTwoIcon, { style: { cursor: "pointer", transition: "color 0.3s" }, onClick });
458
+ return volume < 50 ? /* @__PURE__ */ React7.createElement(VolumeOneIcon, { style: { cursor: "pointer", transition: "color 0.3s" }, onClick }) : /* @__PURE__ */ React7.createElement(VolumeTwoIcon, { style: { cursor: "pointer", transition: "color 0.3s" }, onClick });
411
459
  };
412
460
 
413
- // src/Prebuilt/components/HMSVideo/index.js
461
+ // src/Prebuilt/components/HMSVideo/index.ts
414
462
  var HMSVideoPlayer = {
415
463
  Root: HMSVideo,
416
464
  PlayButton,
@@ -424,44 +472,38 @@ var HMSVideoPlayer = {
424
472
  }
425
473
  };
426
474
 
427
- // src/Prebuilt/components/HMSVideo/FullscreenButton.jsx
475
+ // src/Prebuilt/components/HMSVideo/FullscreenButton.tsx
428
476
  init_define_process_env();
429
- import React7 from "react";
430
- var FullScreenButton = ({ isFullScreen, icon, onToggle }) => {
431
- return /* @__PURE__ */ React7.createElement(Tooltip, { title: `${isFullScreen ? "Exit" : "Go"} fullscreen`, side: "top" }, /* @__PURE__ */ React7.createElement(
432
- IconButton,
433
- {
434
- variant: "standard",
435
- css: { margin: "0px" },
436
- onClick: onToggle,
437
- key: "fullscreen_btn",
438
- "data-testid": "fullscreen_btn"
439
- },
440
- /* @__PURE__ */ React7.createElement(Flex, null, icon)
441
- ));
477
+ import React8 from "react";
478
+ import { ExpandIcon, ShrinkIcon } from "@100mslive/react-icons";
479
+ var FullScreenButton = ({ isFullScreen, onToggle }) => {
480
+ return /* @__PURE__ */ React8.createElement(Tooltip, { title: `${isFullScreen ? "Exit" : "Go"} fullscreen`, side: "top" }, /* @__PURE__ */ React8.createElement(IconButton, { css: { margin: "0px" }, onClick: onToggle, key: "fullscreen_btn", "data-testid": "fullscreen_btn" }, /* @__PURE__ */ React8.createElement(Flex, null, isFullScreen ? /* @__PURE__ */ React8.createElement(ShrinkIcon, null) : /* @__PURE__ */ React8.createElement(ExpandIcon, null))));
442
481
  };
443
482
 
444
- // src/Prebuilt/components/HMSVideo/HLSAutoplayBlockedPrompt.jsx
483
+ // src/Prebuilt/components/HMSVideo/HLSAutoplayBlockedPrompt.tsx
445
484
  init_define_process_env();
446
- import React8 from "react";
447
- function HLSAutoplayBlockedPrompt({ open, unblockAutoPlay }) {
448
- return /* @__PURE__ */ React8.createElement(
485
+ import React9 from "react";
486
+ function HLSAutoplayBlockedPrompt({
487
+ open,
488
+ unblockAutoPlay
489
+ }) {
490
+ return /* @__PURE__ */ React9.createElement(
449
491
  Dialog.Root,
450
492
  {
451
493
  open,
452
- onOpenChange: (value) => {
494
+ onOpenChange: (value) => __async(this, null, function* () {
453
495
  if (!value) {
454
- unblockAutoPlay();
496
+ yield unblockAutoPlay();
455
497
  }
456
- }
498
+ })
457
499
  },
458
- /* @__PURE__ */ React8.createElement(DialogContent, { title: "Attention", closeable: false }, /* @__PURE__ */ React8.createElement(DialogRow, null, /* @__PURE__ */ React8.createElement(Text, { variant: "md" }, 'The browser wants us to get a confirmation for playing the HLS Stream. Please click "play stream" to proceed.')), /* @__PURE__ */ React8.createElement(DialogRow, { justify: "end" }, /* @__PURE__ */ React8.createElement(
500
+ /* @__PURE__ */ React9.createElement(DialogContent, { title: "Attention", closeable: false }, /* @__PURE__ */ React9.createElement(DialogRow, null, /* @__PURE__ */ React9.createElement(Text, { variant: "md" }, 'The browser wants us to get a confirmation for playing the HLS Stream. Please click "play stream" to proceed.')), /* @__PURE__ */ React9.createElement(DialogRow, { justify: "end" }, /* @__PURE__ */ React9.createElement(
459
501
  Button,
460
502
  {
461
503
  variant: "primary",
462
- onClick: () => {
463
- unblockAutoPlay();
464
- }
504
+ onClick: () => __async(this, null, function* () {
505
+ yield unblockAutoPlay();
506
+ })
465
507
  },
466
508
  "Play stream"
467
509
  )))
@@ -470,18 +512,104 @@ function HLSAutoplayBlockedPrompt({ open, unblockAutoPlay }) {
470
512
 
471
513
  // src/Prebuilt/components/HMSVideo/HLSCaptionSelector.tsx
472
514
  init_define_process_env();
473
- import React9 from "react";
515
+ import React10 from "react";
474
516
  import { ClosedCaptionIcon, OpenCaptionIcon } from "@100mslive/react-icons";
475
- function HLSCaptionSelector({ isEnabled, onClick }) {
476
- return /* @__PURE__ */ React9.createElement(Tooltip, { title: "Subtitles/closed captions", side: "top" }, /* @__PURE__ */ React9.createElement(IconButton, { css: { p: "$2" }, onClick: () => onClick() }, isEnabled ? /* @__PURE__ */ React9.createElement(ClosedCaptionIcon, { width: "20", height: "20px" }) : /* @__PURE__ */ React9.createElement(OpenCaptionIcon, { width: "20", height: "20px" })));
517
+ function HLSCaptionSelector({ isEnabled }) {
518
+ const { hlsPlayer: hlsPlayer2 } = useHMSPlayerContext();
519
+ return /* @__PURE__ */ React10.createElement(Tooltip, { title: "Subtitles/closed captions", side: "top" }, /* @__PURE__ */ React10.createElement(IconButton, { css: { p: "$2" }, onClick: () => hlsPlayer2 == null ? void 0 : hlsPlayer2.toggleCaption() }, isEnabled ? /* @__PURE__ */ React10.createElement(ClosedCaptionIcon, { width: "20", height: "20px" }) : /* @__PURE__ */ React10.createElement(OpenCaptionIcon, { width: "20", height: "20px" })));
477
520
  }
478
521
 
479
- // src/Prebuilt/components/HMSVideo/HLSQualitySelector.jsx
522
+ // src/Prebuilt/components/HMSVideo/HLSQualitySelector.tsx
480
523
  init_define_process_env();
481
- import React10 from "react";
482
- import { CheckIcon, SettingsIcon } from "@100mslive/react-icons";
483
- function HLSQualitySelector({ open, onOpen, layers, onQualityChange, selection, isAuto }) {
484
- return /* @__PURE__ */ React10.createElement(Dropdown.Root, { open, onOpenChange: (value) => onOpen(value) }, /* @__PURE__ */ React10.createElement(Dropdown.Trigger, { asChild: true, "data-testid": "quality_selector" }, /* @__PURE__ */ React10.createElement(
524
+ import React11 from "react";
525
+ import { useMedia } from "react-use";
526
+ import { CheckIcon, CrossIcon as CrossIcon2, SettingsIcon } from "@100mslive/react-icons";
527
+ function HLSQualitySelector({
528
+ open,
529
+ onOpenChange,
530
+ layers,
531
+ onQualityChange,
532
+ selection,
533
+ isAuto
534
+ }) {
535
+ const isMobile = useMedia(config.media.md);
536
+ const isLandscape = useIsLandscape();
537
+ if (isMobile || isLandscape) {
538
+ return /* @__PURE__ */ React11.createElement(Sheet.Root, { open, onOpenChange }, /* @__PURE__ */ React11.createElement(Sheet.Trigger, { asChild: true, "data-testid": "quality_selector" }, /* @__PURE__ */ React11.createElement(
539
+ Flex,
540
+ {
541
+ css: {
542
+ color: "$on_primary_high",
543
+ r: "$1",
544
+ cursor: "pointer",
545
+ p: "$2"
546
+ }
547
+ },
548
+ /* @__PURE__ */ React11.createElement(SettingsIcon, null)
549
+ )), layers.length > 0 && /* @__PURE__ */ React11.createElement(Sheet.Content, { css: { bg: "$surface_default", pb: "$1" }, onClick: () => onOpenChange(false) }, /* @__PURE__ */ React11.createElement(
550
+ Sheet.Title,
551
+ {
552
+ css: {
553
+ display: "flex",
554
+ color: "$on_surface_high",
555
+ w: "100%",
556
+ justifyContent: "space-between",
557
+ mt: "$8",
558
+ fontSize: "$md",
559
+ px: "$10",
560
+ pb: "$8",
561
+ borderBottom: "1px solid $border_bright",
562
+ alignItems: "center"
563
+ }
564
+ },
565
+ "Quality",
566
+ /* @__PURE__ */ React11.createElement(Sheet.Close, { css: { color: "$on_surface_high" }, onClick: () => onOpenChange(false) }, /* @__PURE__ */ React11.createElement(CrossIcon2, null))
567
+ ), layers.map((layer) => {
568
+ return /* @__PURE__ */ React11.createElement(
569
+ Flex,
570
+ {
571
+ align: "center",
572
+ css: {
573
+ w: "100%",
574
+ bg: "$surface_default",
575
+ "&:hover": {
576
+ bg: "$surface_brighter"
577
+ },
578
+ cursor: "pointer",
579
+ gap: "$4",
580
+ py: "$8",
581
+ px: "$10"
582
+ },
583
+ key: layer.width,
584
+ onClick: () => onQualityChange(layer)
585
+ },
586
+ /* @__PURE__ */ React11.createElement(Text, { variant: "caption", css: { fontWeight: "$semiBold" } }, getQualityText(layer)),
587
+ /* @__PURE__ */ React11.createElement(Text, { variant: "caption", css: { flex: "1 1 0", c: "$on_surface_low", pl: "$2" } }, getBitrateText(layer)),
588
+ !isAuto && layer.width === (selection == null ? void 0 : selection.width) && layer.height === (selection == null ? void 0 : selection.height) && /* @__PURE__ */ React11.createElement(CheckIcon, { width: "16px", height: "16px" })
589
+ );
590
+ }), /* @__PURE__ */ React11.createElement(
591
+ Flex,
592
+ {
593
+ align: "center",
594
+ css: {
595
+ w: "100%",
596
+ bg: "$surface_default",
597
+ "&:hover": {
598
+ bg: "$surface_brighter"
599
+ },
600
+ cursor: "pointer",
601
+ gap: "$4",
602
+ py: "$8",
603
+ px: "$10"
604
+ },
605
+ key: "auto",
606
+ onClick: () => onQualityChange({ height: "auto" })
607
+ },
608
+ /* @__PURE__ */ React11.createElement(Text, { variant: "caption", css: { fontWeight: "$semiBold", flex: "1 1 0" } }, "Auto"),
609
+ isAuto && /* @__PURE__ */ React11.createElement(CheckIcon, { width: "16px", height: "16px" })
610
+ )));
611
+ }
612
+ return /* @__PURE__ */ React11.createElement(Dropdown.Root, { open, onOpenChange: (value) => onOpenChange(value) }, /* @__PURE__ */ React11.createElement(Dropdown.Trigger, { asChild: true, "data-testid": "quality_selector" }, /* @__PURE__ */ React11.createElement(
485
613
  Flex,
486
614
  {
487
615
  css: {
@@ -491,7 +619,7 @@ function HLSQualitySelector({ open, onOpen, layers, onQualityChange, selection,
491
619
  p: "$2"
492
620
  }
493
621
  },
494
- /* @__PURE__ */ React10.createElement(Tooltip, { title: "Select Quality", side: "top" }, /* @__PURE__ */ React10.createElement(Flex, { align: "center" }, /* @__PURE__ */ React10.createElement(
622
+ /* @__PURE__ */ React11.createElement(Tooltip, { title: "Select Quality", side: "top" }, /* @__PURE__ */ React11.createElement(Flex, { align: "center" }, /* @__PURE__ */ React11.createElement(
495
623
  Box,
496
624
  {
497
625
  css: {
@@ -502,8 +630,8 @@ function HLSQualitySelector({ open, onOpen, layers, onQualityChange, selection,
502
630
  c: "$on_surface_high"
503
631
  }
504
632
  },
505
- /* @__PURE__ */ React10.createElement(SettingsIcon, null)
506
- ), /* @__PURE__ */ React10.createElement(
633
+ /* @__PURE__ */ React11.createElement(SettingsIcon, null)
634
+ ), /* @__PURE__ */ React11.createElement(
507
635
  Text,
508
636
  {
509
637
  variant: {
@@ -513,7 +641,7 @@ function HLSQualitySelector({ open, onOpen, layers, onQualityChange, selection,
513
641
  },
514
642
  css: { display: "flex", alignItems: "center", ml: "$2", c: "$on_surface_medium" }
515
643
  },
516
- isAuto && /* @__PURE__ */ React10.createElement(React10.Fragment, null, "Auto", /* @__PURE__ */ React10.createElement(
644
+ isAuto && /* @__PURE__ */ React11.createElement(React11.Fragment, null, "Auto", /* @__PURE__ */ React11.createElement(
517
645
  Box,
518
646
  {
519
647
  css: {
@@ -525,10 +653,10 @@ function HLSQualitySelector({ open, onOpen, layers, onQualityChange, selection,
525
653
  }
526
654
  }
527
655
  )),
528
- selection && Math.min(selection.width, selection.height),
656
+ selection && Math.min(selection.width || 0, selection.height || 0),
529
657
  "p"
530
658
  )))
531
- )), layers.length > 0 && /* @__PURE__ */ React10.createElement(
659
+ )), layers.length > 0 && /* @__PURE__ */ React11.createElement(
532
660
  Dropdown.Content,
533
661
  {
534
662
  sideOffset: 5,
@@ -544,7 +672,7 @@ function HLSQualitySelector({ open, onOpen, layers, onQualityChange, selection,
544
672
  }
545
673
  },
546
674
  layers.map((layer) => {
547
- return /* @__PURE__ */ React10.createElement(
675
+ return /* @__PURE__ */ React11.createElement(
548
676
  Dropdown.Item,
549
677
  {
550
678
  onClick: () => onQualityChange(layer),
@@ -559,12 +687,12 @@ function HLSQualitySelector({ open, onOpen, layers, onQualityChange, selection,
559
687
  gap: "$2"
560
688
  }
561
689
  },
562
- /* @__PURE__ */ React10.createElement(Text, { variant: "caption", css: { fontWeight: "$semiBold" } }, getQualityText(layer)),
563
- /* @__PURE__ */ React10.createElement(Text, { variant: "caption", css: { flex: "1 1 0", c: "$on_surface_low", pl: "$2" } }, getBitrateText(layer)),
564
- !isAuto && layer.width === (selection == null ? void 0 : selection.width) && layer.height === (selection == null ? void 0 : selection.height) && /* @__PURE__ */ React10.createElement(CheckIcon, { width: "16px", height: "16px" })
690
+ /* @__PURE__ */ React11.createElement(Text, { variant: "caption", css: { fontWeight: "$semiBold" } }, getQualityText(layer)),
691
+ /* @__PURE__ */ React11.createElement(Text, { variant: "caption", css: { flex: "1 1 0", c: "$on_surface_low", pl: "$2" } }, getBitrateText(layer)),
692
+ !isAuto && layer.width === (selection == null ? void 0 : selection.width) && layer.height === (selection == null ? void 0 : selection.height) && /* @__PURE__ */ React11.createElement(CheckIcon, { width: "16px", height: "16px" })
565
693
  );
566
694
  }),
567
- /* @__PURE__ */ React10.createElement(
695
+ /* @__PURE__ */ React11.createElement(
568
696
  Dropdown.Item,
569
697
  {
570
698
  onClick: () => onQualityChange({ height: "auto" }),
@@ -579,52 +707,131 @@ function HLSQualitySelector({ open, onOpen, layers, onQualityChange, selection,
579
707
  gap: "$2"
580
708
  }
581
709
  },
582
- /* @__PURE__ */ React10.createElement(Text, { variant: "caption", css: { fontWeight: "$semiBold", flex: "1 1 0" } }, "Auto"),
583
- isAuto && /* @__PURE__ */ React10.createElement(CheckIcon, { width: "16px", height: "16px" })
710
+ /* @__PURE__ */ React11.createElement(Text, { variant: "caption", css: { fontWeight: "$semiBold", flex: "1 1 0" } }, "Auto"),
711
+ isAuto && /* @__PURE__ */ React11.createElement(CheckIcon, { width: "16px", height: "16px" })
584
712
  )
585
713
  ));
586
714
  }
587
- var getQualityText = (layer) => `${Math.min(layer.height, layer.width)}p `;
715
+ var getQualityText = (layer) => `${Math.min(layer.height || 0, layer.width || 0)}p `;
588
716
  var getBitrateText = (layer) => `(${(Number(layer.bitrate / 1e3) / 1e3).toFixed(2)} Mbps)`;
589
717
 
718
+ // src/Prebuilt/components/HMSVideo/MwebHLSViewTitle.tsx
719
+ init_define_process_env();
720
+ import React12, { useCallback, useEffect as useEffect3, useRef, useState as useState4 } from "react";
721
+ import { selectHLSState, selectPeerCount, useHMSStore } from "@100mslive/react-sdk";
722
+ var HLSViewTitle = () => {
723
+ const peerCount = useHMSStore(selectPeerCount);
724
+ const hlsState = useHMSStore(selectHLSState);
725
+ const intervalRef = useRef(null);
726
+ const { screenType } = useRoomLayoutConferencingScreen();
727
+ const [liveTime, setLiveTime] = useState4(0);
728
+ const startTimer = useCallback(() => {
729
+ intervalRef.current = setInterval(() => {
730
+ var _a;
731
+ const timeStamp = (_a = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _a[screenType === "hls_live_streaming" ? "startedAt" : "initialisedAt"];
732
+ if ((hlsState == null ? void 0 : hlsState.running) && timeStamp) {
733
+ setLiveTime(Date.now() - timeStamp.getTime());
734
+ }
735
+ }, 6e4);
736
+ }, [hlsState == null ? void 0 : hlsState.running, hlsState == null ? void 0 : hlsState.variants, screenType]);
737
+ useEffect3(() => {
738
+ var _a;
739
+ if (hlsState == null ? void 0 : hlsState.running) {
740
+ startTimer();
741
+ const timeStamp = (_a = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _a[screenType === "hls_live_streaming" ? "startedAt" : "initialisedAt"];
742
+ if ((hlsState == null ? void 0 : hlsState.running) && timeStamp) {
743
+ setLiveTime(Date.now() - timeStamp.getTime());
744
+ }
745
+ }
746
+ if (!(hlsState == null ? void 0 : hlsState.running) && intervalRef.current) {
747
+ clearInterval(intervalRef.current);
748
+ }
749
+ return () => {
750
+ if (intervalRef.current) {
751
+ clearInterval(intervalRef.current);
752
+ }
753
+ };
754
+ }, [hlsState == null ? void 0 : hlsState.running, hlsState == null ? void 0 : hlsState.variants, screenType, startTimer]);
755
+ return /* @__PURE__ */ React12.createElement(
756
+ Flex,
757
+ {
758
+ gap: "4",
759
+ align: "center",
760
+ css: {
761
+ position: "relative",
762
+ h: "fit-content",
763
+ w: "100%",
764
+ borderBottom: "1px solid $border_bright",
765
+ p: "$8",
766
+ backgroundColor: "$surface_dim"
767
+ }
768
+ },
769
+ /* @__PURE__ */ React12.createElement(Logo, null),
770
+ /* @__PURE__ */ React12.createElement(Flex, { direction: "column" }, /* @__PURE__ */ React12.createElement(Text, { variant: "sub2", css: { fontWeight: "$semiBold" } }, "Tech Talk"), /* @__PURE__ */ React12.createElement(Flex, { gap: "1" }, /* @__PURE__ */ React12.createElement(Text, { variant: "caption", css: { color: "$on_surface_medium" } }, getFormattedCount(peerCount) + " watching"), /* @__PURE__ */ React12.createElement(
771
+ Flex,
772
+ {
773
+ direction: "column",
774
+ css: {
775
+ w: "$3",
776
+ h: "$3",
777
+ backgroundColor: "$on_surface_medium",
778
+ borderRadius: "50%",
779
+ alignSelf: "center"
780
+ }
781
+ }
782
+ ), /* @__PURE__ */ React12.createElement(Text, { variant: "caption", css: { color: "$on_surface_medium" } }, "Started " + getTime(liveTime) + " ago")))
783
+ );
784
+ };
785
+
590
786
  // src/Prebuilt/layouts/HLSView.jsx
591
787
  var hlsPlayer;
592
788
  var toastMap = {};
593
789
  var HLSView = () => {
594
- var _a;
790
+ var _a, _b, _c;
595
791
  const videoRef = useRef2(null);
596
792
  const hlsViewRef = useRef2(null);
597
- const hlsState = useHMSStore(selectHLSState);
598
- const enablHlsStats = useHMSStore(selectAppData(APP_DATA.hlsStats));
793
+ const hlsState = useHMSStore2(selectHLSState2);
794
+ const enablHlsStats = useHMSStore2(selectAppData(APP_DATA.hlsStats));
795
+ const { elements, screenType } = useRoomLayoutConferencingScreen();
599
796
  const notification = useHMSNotifications(HMSNotificationTypes.POLL_STOPPED);
600
797
  const hmsActions = useHMSActions();
601
- const { themeType, theme } = useTheme();
602
- const [streamEnded, setStreamEnded] = useState4(false);
603
- let [hlsStatsState, setHlsStatsState] = useState4(null);
798
+ const { themeType } = useTheme();
799
+ const [streamEnded, setStreamEnded] = useState5(false);
800
+ let [hlsStatsState, setHlsStatsState] = useState5(null);
604
801
  const hlsUrl = (_a = hlsState.variants[0]) == null ? void 0 : _a.url;
605
- const [availableLayers, setAvailableLayers] = useState4([]);
606
- const [isVideoLive, setIsVideoLive] = useState4(true);
607
- const [isUserSelectedAuto, setIsUserSelectedAuto] = useState4(true);
608
- const [isCaptionEnabled, setIsCaptionEnabled] = useState4(true);
609
- const [hasCaptions, setHasCaptions] = useState4(false);
610
- const [currentSelectedQuality, setCurrentSelectedQuality] = useState4(null);
611
- const [isHlsAutoplayBlocked, setIsHlsAutoplayBlocked] = useState4(false);
612
- const [isPaused, setIsPaused] = useState4(false);
613
- const isFullScreenSupported = screenfull.isEnabled;
802
+ const [availableLayers, setAvailableLayers] = useState5([]);
803
+ const [isVideoLive, setIsVideoLive] = useState5(true);
804
+ const [isCaptionEnabled, setIsCaptionEnabled] = useState5(true);
805
+ const [hasCaptions, setHasCaptions] = useState5(false);
806
+ const [currentSelectedQuality, setCurrentSelectedQuality] = useState5(null);
807
+ const [isHlsAutoplayBlocked, setIsHlsAutoplayBlocked] = useState5(false);
808
+ const [isPaused, setIsPaused] = useState5(false);
614
809
  const [show, toggle] = useToggle(false);
615
- const [controlsVisible, setControlsVisible] = useState4(true);
616
- const controlsRef = useRef2();
617
- const controlsTimerRef = useRef2();
618
- const [qualityDropDownOpen, setQualityDropDownOpen] = useState4(false);
619
810
  const lastHlsUrl = usePrevious(hlsUrl);
620
811
  const togglePollView = usePollViewToggle();
621
812
  const vanillaStore = useHMSVanillaStore();
622
- const isMobile = useMedia(config.media.md);
813
+ const [controlsVisible, setControlsVisible] = useState5(true);
814
+ const [isUserSelectedAuto, setIsUserSelectedAuto] = useState5(true);
815
+ const [qualityDropDownOpen, setQualityDropDownOpen] = useState5(false);
816
+ const controlsRef = useRef2(null);
817
+ const controlsTimerRef = useRef2();
818
+ const sidepane = useHMSStore2(selectAppData(APP_DATA.sidePane));
819
+ const toggleChat = useSidepaneToggle(SIDE_PANE_OPTIONS.CHAT);
820
+ const showChat = !!(elements == null ? void 0 : elements.chat);
821
+ const isFullScreenSupported = screenfull.isEnabled;
822
+ const isMobile = useMedia2(config.media.md);
823
+ const isLandscape = useIsLandscape();
623
824
  const isFullScreen = useFullscreen(hlsViewRef, show, {
624
825
  onClose: () => toggle(false)
625
826
  });
626
- const [showLoader, setShowLoader] = useState4(false);
627
- useEffect3(() => {
827
+ const [showLoader, setShowLoader] = useState5(false);
828
+ const isMwebHLSStream = screenType === "hls_live_streaming" && isMobile;
829
+ useEffect4(() => {
830
+ if (sidepane === "" && isMwebHLSStream && showChat) {
831
+ toggleChat();
832
+ }
833
+ }, [sidepane, isMwebHLSStream, toggleChat, showChat]);
834
+ useEffect4(() => {
628
835
  const videoEl = videoRef.current;
629
836
  const showLoader2 = () => setShowLoader(true);
630
837
  const hideLoader = () => setShowLoader(false);
@@ -635,12 +842,12 @@ var HLSView = () => {
635
842
  videoEl == null ? void 0 : videoEl.removeEventListener("waiting", showLoader2);
636
843
  };
637
844
  }, []);
638
- useEffect3(() => {
845
+ useEffect4(() => {
639
846
  if (streamEnded && lastHlsUrl !== hlsUrl) {
640
847
  setStreamEnded(false);
641
848
  }
642
849
  }, [hlsUrl, streamEnded, lastHlsUrl]);
643
- useEffect3(() => {
850
+ useEffect4(() => {
644
851
  if (!notification)
645
852
  return;
646
853
  const toastID = toastMap == null ? void 0 : toastMap[notification.data.id];
@@ -649,7 +856,7 @@ var HLSView = () => {
649
856
  delete toastMap[notification.data.id];
650
857
  }
651
858
  }, [notification]);
652
- useEffect3(() => {
859
+ useEffect4(() => {
653
860
  const videoElem = videoRef.current;
654
861
  const setStreamEndedCallback = () => {
655
862
  setStreamEnded(true);
@@ -660,7 +867,18 @@ var HLSView = () => {
660
867
  videoElem == null ? void 0 : videoElem.removeEventListener("ended", setStreamEndedCallback);
661
868
  };
662
869
  }, [hlsUrl]);
663
- useEffect3(() => {
870
+ const handleQuality = useCallback2(
871
+ (quality) => {
872
+ var _a2;
873
+ if (hlsPlayer) {
874
+ setIsUserSelectedAuto(((_a2 = quality.height) == null ? void 0 : _a2.toString().toLowerCase()) === "auto");
875
+ hlsPlayer == null ? void 0 : hlsPlayer.setLayer(quality);
876
+ }
877
+ },
878
+ [availableLayers]
879
+ //eslint-disable-line
880
+ );
881
+ useEffect4(() => {
664
882
  let videoEl = videoRef.current;
665
883
  const manifestLoadedHandler = ({ layers }) => {
666
884
  setAvailableLayers(layers);
@@ -670,7 +888,7 @@ var HLSView = () => {
670
888
  setCurrentSelectedQuality(layer);
671
889
  };
672
890
  const metadataLoadedHandler = (_a2) => {
673
- var _b = _a2, { payload } = _b, rest = __objRest(_b, ["payload"]);
891
+ var _b2 = _a2, { payload } = _b2, rest = __objRest(_b2, ["payload"]);
674
892
  var _a3;
675
893
  const parsePayload = (str) => {
676
894
  try {
@@ -687,7 +905,7 @@ var HLSView = () => {
687
905
  const pollStartedBy = vanillaStore.getState(selectPeerNameByID(poll.startedBy)) || "Participant";
688
906
  const toastID = ToastManager.addToast({
689
907
  title: `${pollStartedBy} started a ${poll.type}: ${poll.title}`,
690
- action: /* @__PURE__ */ React11.createElement(
908
+ action: /* @__PURE__ */ React13.createElement(
691
909
  Button,
692
910
  {
693
911
  onClick: () => togglePollView(pollId),
@@ -752,11 +970,10 @@ var HLSView = () => {
752
970
  hlsPlayer.off(HMSHLSPlayerEvents2.MANIFEST_LOADED, manifestLoadedHandler);
753
971
  hlsPlayer.off(HMSHLSPlayerEvents2.LAYER_UPDATED, layerUpdatedHandler);
754
972
  hlsPlayer.reset();
755
- hlsPlayer = null;
756
973
  };
757
974
  }
758
- }, [hlsUrl]);
759
- useEffect3(() => {
975
+ }, [hlsUrl, togglePollView, vanillaStore]);
976
+ useEffect4(() => {
760
977
  const onHLSStats = (state) => setHlsStatsState(state);
761
978
  if (enablHlsStats) {
762
979
  hlsPlayer == null ? void 0 : hlsPlayer.on(HMSHLSPlayerEvents2.STATS, onHLSStats);
@@ -775,20 +992,10 @@ var HLSView = () => {
775
992
  console.error("Tried to unblock Autoplay failed with", error.message);
776
993
  }
777
994
  });
778
- const handleQuality = useCallback(
779
- (quality) => {
780
- if (hlsPlayer) {
781
- setIsUserSelectedAuto(quality.height.toString().toLowerCase() === "auto");
782
- hlsPlayer.setLayer(quality);
783
- }
784
- },
785
- [availableLayers]
786
- //eslint-disable-line
787
- );
788
995
  const sfnOverlayClose = () => {
789
996
  hmsActions.setAppData(APP_DATA.hlsStats, !enablHlsStats);
790
997
  };
791
- useEffect3(() => {
998
+ useEffect4(() => {
792
999
  if (controlsVisible && isFullScreen && !qualityDropDownOpen) {
793
1000
  if (controlsTimerRef.current) {
794
1001
  clearTimeout(controlsTimerRef.current);
@@ -806,7 +1013,27 @@ var HLSView = () => {
806
1013
  }
807
1014
  };
808
1015
  }, [controlsVisible, isFullScreen, qualityDropDownOpen]);
809
- const onHoverHandler = useCallback(
1016
+ const onTouchHandler = useCallback2(
1017
+ (event) => {
1018
+ event.preventDefault();
1019
+ if (event.type === "ontouchstart" && controlsVisible) {
1020
+ setControlsVisible(false);
1021
+ return;
1022
+ }
1023
+ if (event.type === "ontouchstart" || qualityDropDownOpen) {
1024
+ setControlsVisible(true);
1025
+ return;
1026
+ }
1027
+ if (isFullScreen && !controlsVisible && event.type === "touchmove") {
1028
+ setControlsVisible(true);
1029
+ if (controlsTimerRef.current) {
1030
+ clearTimeout(controlsTimerRef.current);
1031
+ }
1032
+ }
1033
+ },
1034
+ [controlsVisible, isFullScreen, qualityDropDownOpen]
1035
+ );
1036
+ const onHoverHandler = useCallback2(
810
1037
  (event) => {
811
1038
  if (event.type === "mouseenter" || qualityDropDownOpen) {
812
1039
  setControlsVisible(true);
@@ -823,31 +1050,31 @@ var HLSView = () => {
823
1050
  },
824
1051
  [controlsVisible, isFullScreen, qualityDropDownOpen]
825
1052
  );
826
- return /* @__PURE__ */ React11.createElement(
1053
+ return /* @__PURE__ */ React13.createElement(
827
1054
  Flex,
828
1055
  {
829
1056
  key: "hls-viewer",
830
1057
  id: `hls-viewer-${themeType}`,
831
1058
  ref: hlsViewRef,
1059
+ direction: isMobile || isLandscape ? "column" : "row",
832
1060
  css: {
833
- size: "100%"
1061
+ w: sidepane !== "" && isLandscape ? "55%" : "100%",
1062
+ h: sidepane !== "" && isMobile ? "36%" : "100%"
834
1063
  }
835
1064
  },
836
- (hlsStatsState == null ? void 0 : hlsStatsState.url) && enablHlsStats ? /* @__PURE__ */ React11.createElement(HlsStatsOverlay, { hlsStatsState, onClose: sfnOverlayClose }) : null,
837
- hlsUrl && !streamEnded ? /* @__PURE__ */ React11.createElement(
1065
+ hlsUrl && !streamEnded ? /* @__PURE__ */ React13.createElement(React13.Fragment, null, /* @__PURE__ */ React13.createElement(HMSPlayerContext.Provider, { value: { hlsPlayer } }, (hlsStatsState == null ? void 0 : hlsStatsState.url) && enablHlsStats && !(isMobile || isLandscape) ? /* @__PURE__ */ React13.createElement(HlsStatsOverlay, { hlsStatsState, onClose: sfnOverlayClose }) : null, /* @__PURE__ */ React13.createElement(
838
1066
  Flex,
839
1067
  {
840
1068
  id: "hls-player-container",
841
1069
  align: "center",
842
1070
  justify: "center",
843
1071
  css: {
844
- width: "100%",
845
- margin: "0 auto",
846
- height: "100%"
1072
+ size: "100%",
1073
+ margin: "0 auto"
847
1074
  }
848
1075
  },
849
- /* @__PURE__ */ React11.createElement(HLSAutoplayBlockedPrompt, { open: isHlsAutoplayBlocked, unblockAutoPlay }),
850
- showLoader && /* @__PURE__ */ React11.createElement(
1076
+ /* @__PURE__ */ React13.createElement(HLSAutoplayBlockedPrompt, { open: isHlsAutoplayBlocked, unblockAutoPlay }),
1077
+ showLoader && /* @__PURE__ */ React13.createElement(
851
1078
  Flex,
852
1079
  {
853
1080
  align: "center",
@@ -856,17 +1083,19 @@ var HLSView = () => {
856
1083
  position: "absolute"
857
1084
  }
858
1085
  },
859
- /* @__PURE__ */ React11.createElement(Loading, { width: 72, height: 72 })
1086
+ /* @__PURE__ */ React13.createElement(Loading, { width: 72, height: 72 })
860
1087
  ),
861
- /* @__PURE__ */ React11.createElement(
1088
+ /* @__PURE__ */ React13.createElement(
862
1089
  HMSVideoPlayer.Root,
863
1090
  {
864
1091
  ref: videoRef,
865
1092
  onMouseEnter: onHoverHandler,
866
1093
  onMouseMove: onHoverHandler,
867
- onMouseLeave: onHoverHandler
1094
+ onMouseLeave: onHoverHandler,
1095
+ onTouchStart: onTouchHandler,
1096
+ onTouchMove: onTouchHandler
868
1097
  },
869
- isMobile && isPaused && /* @__PURE__ */ React11.createElement(
1098
+ /* @__PURE__ */ React13.createElement(React13.Fragment, null, isMobile || isLandscape ? /* @__PURE__ */ React13.createElement(React13.Fragment, null, !showLoader && /* @__PURE__ */ React13.createElement(
870
1099
  Box,
871
1100
  {
872
1101
  css: {
@@ -874,30 +1103,83 @@ var HLSView = () => {
874
1103
  top: "40%",
875
1104
  left: "50%",
876
1105
  transform: "translateY(-40%) translateX(-50%)",
877
- padding: "$8 14px $8 18px",
1106
+ padding: "$4",
878
1107
  display: "inline-flex",
879
- r: "50%",
1108
+ r: "$round",
880
1109
  gap: "$1",
881
- bg: "$primary_default",
882
- zIndex: 21
1110
+ bg: "rgba(0, 0, 0, 0.6)",
1111
+ zIndex: 1,
1112
+ visibility: controlsVisible ? `` : `hidden`,
1113
+ opacity: controlsVisible ? `1` : "0"
1114
+ }
1115
+ },
1116
+ isPaused ? /* @__PURE__ */ React13.createElement(
1117
+ IconButton,
1118
+ {
1119
+ onClick: () => __async(void 0, null, function* () {
1120
+ yield hlsPlayer == null ? void 0 : hlsPlayer.play();
1121
+ }),
1122
+ "data-testid": "play_btn"
1123
+ },
1124
+ /* @__PURE__ */ React13.createElement(PlayIcon2, { width: "48px", height: "48px" })
1125
+ ) : /* @__PURE__ */ React13.createElement(
1126
+ IconButton,
1127
+ {
1128
+ onClick: () => __async(void 0, null, function* () {
1129
+ yield hlsPlayer == null ? void 0 : hlsPlayer.pause();
1130
+ }),
1131
+ "data-testid": "pause_btn"
1132
+ },
1133
+ /* @__PURE__ */ React13.createElement(PauseIcon2, { width: "48px", height: "48px" })
1134
+ )
1135
+ ), /* @__PURE__ */ React13.createElement(
1136
+ Flex,
1137
+ {
1138
+ ref: controlsRef,
1139
+ direction: "column",
1140
+ justify: "start",
1141
+ align: "start",
1142
+ css: {
1143
+ position: "absolute",
1144
+ top: "0",
1145
+ left: "0",
1146
+ width: "100%",
1147
+ flexShrink: 0,
1148
+ visibility: controlsVisible ? `` : `hidden`,
1149
+ opacity: controlsVisible ? `1` : "0"
883
1150
  }
884
1151
  },
885
- /* @__PURE__ */ React11.createElement(IconButton, { onClick: () => __async(void 0, null, function* () {
886
- return yield hlsPlayer == null ? void 0 : hlsPlayer.play();
887
- }), "data-testid": "play_btn" }, /* @__PURE__ */ React11.createElement(PlayIcon2, { width: "60px", height: "60px" }))
888
- ),
889
- /* @__PURE__ */ React11.createElement(
1152
+ /* @__PURE__ */ React13.createElement(
1153
+ HMSVideoPlayer.Controls.Root,
1154
+ {
1155
+ css: {
1156
+ p: "$4 $8"
1157
+ }
1158
+ },
1159
+ /* @__PURE__ */ React13.createElement(HMSVideoPlayer.Controls.Right, null, isLandscape && /* @__PURE__ */ React13.createElement(ChatToggle, null), hasCaptions && /* @__PURE__ */ React13.createElement(HLSCaptionSelector, { isEnabled: isCaptionEnabled }), availableLayers.length > 0 ? /* @__PURE__ */ React13.createElement(
1160
+ HLSQualitySelector,
1161
+ {
1162
+ layers: availableLayers,
1163
+ onOpenChange: setQualityDropDownOpen,
1164
+ open: qualityDropDownOpen,
1165
+ selection: currentSelectedQuality,
1166
+ onQualityChange: handleQuality,
1167
+ isAuto: isUserSelectedAuto
1168
+ }
1169
+ ) : null)
1170
+ )
1171
+ )) : null, /* @__PURE__ */ React13.createElement(
890
1172
  Flex,
891
1173
  {
892
1174
  ref: controlsRef,
893
1175
  direction: "column",
894
- justify: "flex-end",
895
- align: "flex-start",
1176
+ justify: "end",
1177
+ align: "start",
896
1178
  css: {
897
1179
  position: "absolute",
898
1180
  bottom: "0",
899
1181
  left: "0",
900
- background: `linear-gradient(180deg, ${theme.colors.background_dim.value}00 29.46%, ${theme.colors.background_dim.value}A3 100%);`,
1182
+ background: isMobile || isLandscape ? "" : `linear-gradient(180deg, ${theme.colors.background_dim.value}00 29.46%, ${theme.colors.background_dim.value}A3 100%);`,
901
1183
  width: "100%",
902
1184
  pt: "$8",
903
1185
  flexShrink: 0,
@@ -906,14 +1188,15 @@ var HLSView = () => {
906
1188
  opacity: controlsVisible ? `1` : "0"
907
1189
  }
908
1190
  },
909
- !isMobile && /* @__PURE__ */ React11.createElement(
1191
+ !(isMobile || isLandscape) && ((_b = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _b.playlist_type) === HLSPlaylistType.DVR && /* @__PURE__ */ React13.createElement(HMSVideoPlayer.Progress, null),
1192
+ /* @__PURE__ */ React13.createElement(
910
1193
  HMSVideoPlayer.Controls.Root,
911
1194
  {
912
1195
  css: {
913
1196
  p: "$4 $8"
914
1197
  }
915
1198
  },
916
- /* @__PURE__ */ React11.createElement(HMSVideoPlayer.Controls.Left, null, /* @__PURE__ */ React11.createElement(
1199
+ /* @__PURE__ */ React13.createElement(HMSVideoPlayer.Controls.Left, null, !(isMobile || isLandscape) && /* @__PURE__ */ React13.createElement(React13.Fragment, null, /* @__PURE__ */ React13.createElement(
917
1200
  HMSVideoPlayer.PlayButton,
918
1201
  {
919
1202
  onClick: () => __async(void 0, null, function* () {
@@ -921,19 +1204,18 @@ var HLSView = () => {
921
1204
  }),
922
1205
  isPaused
923
1206
  }
924
- ), /* @__PURE__ */ React11.createElement(HMSVideoPlayer.Duration, { hlsPlayer }), /* @__PURE__ */ React11.createElement(HMSVideoPlayer.Volume, { hlsPlayer }), /* @__PURE__ */ React11.createElement(
1207
+ ), !isVideoLive ? /* @__PURE__ */ React13.createElement(HMSVideoPlayer.Duration, null) : null, /* @__PURE__ */ React13.createElement(HMSVideoPlayer.Volume, null)), /* @__PURE__ */ React13.createElement(
925
1208
  IconButton,
926
1209
  {
927
- variant: "standard",
928
1210
  css: { px: "$2" },
929
1211
  onClick: () => __async(void 0, null, function* () {
930
- yield hlsPlayer.seekToLivePosition();
1212
+ yield hlsPlayer == null ? void 0 : hlsPlayer.seekToLivePosition();
931
1213
  setIsVideoLive(true);
932
1214
  }),
933
1215
  key: "jump-to-live_btn",
934
1216
  "data-testid": "jump-to-live_btn"
935
1217
  },
936
- /* @__PURE__ */ React11.createElement(Tooltip, { title: "Go to Live", side: "top" }, /* @__PURE__ */ React11.createElement(Flex, { justify: "center", gap: 2, align: "center" }, /* @__PURE__ */ React11.createElement(
1218
+ /* @__PURE__ */ React13.createElement(Tooltip, { title: isVideoLive ? "Live" : "Go to Live", side: "top" }, /* @__PURE__ */ React13.createElement(Flex, { justify: "center", gap: 2, align: "center" }, /* @__PURE__ */ React13.createElement(
937
1219
  Box,
938
1220
  {
939
1221
  css: {
@@ -943,45 +1225,38 @@ var HLSView = () => {
943
1225
  r: "$1"
944
1226
  }
945
1227
  }
946
- ), /* @__PURE__ */ React11.createElement(
1228
+ ), /* @__PURE__ */ React13.createElement(
947
1229
  Text,
948
1230
  {
949
- variant: {
950
- "@sm": "xs"
951
- },
1231
+ variant: "$body1",
952
1232
  css: {
953
- c: isVideoLive ? "$on_surface_high" : "$on_surface_medium"
1233
+ c: isVideoLive ? "$on_surface_high" : "$on_surface_medium",
1234
+ fontWeight: "$semiBold"
954
1235
  }
955
1236
  },
956
1237
  isVideoLive ? "LIVE" : "GO LIVE"
957
1238
  )))
958
- )),
959
- /* @__PURE__ */ React11.createElement(HMSVideoPlayer.Controls.Right, null, hasCaptions && /* @__PURE__ */ React11.createElement(HLSCaptionSelector, { onClick: () => hlsPlayer == null ? void 0 : hlsPlayer.toggleCaption(), isEnabled: isCaptionEnabled }), availableLayers.length > 0 ? /* @__PURE__ */ React11.createElement(
1239
+ ), (isMobile || isLandscape) && !isVideoLive ? /* @__PURE__ */ React13.createElement(HMSVideoPlayer.Duration, null) : null),
1240
+ /* @__PURE__ */ React13.createElement(HMSVideoPlayer.Controls.Right, null, hasCaptions && !(isMobile || isLandscape) && /* @__PURE__ */ React13.createElement(HLSCaptionSelector, { isEnabled: isCaptionEnabled }), availableLayers.length > 0 && !(isMobile || isLandscape) ? /* @__PURE__ */ React13.createElement(
960
1241
  HLSQualitySelector,
961
1242
  {
962
1243
  layers: availableLayers,
963
- onOpen: setQualityDropDownOpen,
1244
+ onOpenChange: setQualityDropDownOpen,
964
1245
  open: qualityDropDownOpen,
965
1246
  selection: currentSelectedQuality,
966
1247
  onQualityChange: handleQuality,
967
1248
  isAuto: isUserSelectedAuto
968
1249
  }
969
- ) : null, isFullScreenSupported ? /* @__PURE__ */ React11.createElement(
970
- FullScreenButton,
971
- {
972
- isFullScreen,
973
- onToggle: toggle,
974
- icon: isFullScreen ? /* @__PURE__ */ React11.createElement(ShrinkIcon, null) : /* @__PURE__ */ React11.createElement(ExpandIcon, null)
975
- }
976
- ) : null)
977
- )
978
- )
1250
+ ) : null, isFullScreenSupported ? /* @__PURE__ */ React13.createElement(FullScreenButton, { isFullScreen, onToggle: toggle }) : null)
1251
+ ),
1252
+ (isMobile || isLandscape) && ((_c = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _c.playlist_type) === HLSPlaylistType.DVR ? /* @__PURE__ */ React13.createElement(HMSVideoPlayer.Progress, null) : null
1253
+ ))
979
1254
  )
980
- ) : /* @__PURE__ */ React11.createElement(Flex, { align: "center", justify: "center", direction: "column", css: { size: "100%", px: "$10" } }, /* @__PURE__ */ React11.createElement(Flex, { css: { c: "$on_surface_high", r: "$round", bg: "$surface_default", p: "$2" } }, streamEnded ? /* @__PURE__ */ React11.createElement(ColoredHandIcon, { height: 56, width: 56 }) : /* @__PURE__ */ React11.createElement(GoLiveIcon, { height: 56, width: 56 })), /* @__PURE__ */ React11.createElement(Text, { variant: "h5", css: { c: "$on_surface_high", mt: "$10", mb: 0, textAlign: "center" } }, streamEnded ? "Stream has ended" : "Stream yet to start"), /* @__PURE__ */ React11.createElement(Text, { variant: "md", css: { textAlign: "center", mt: "$4", c: "$on_surface_medium" } }, streamEnded ? "Have a nice day!" : "Sit back and relax"))
1255
+ )), isMobile && !isFullScreen && /* @__PURE__ */ React13.createElement(HLSViewTitle, null)) : /* @__PURE__ */ React13.createElement(Flex, { align: "center", justify: "center", direction: "column", css: { size: "100%", px: "$10" } }, /* @__PURE__ */ React13.createElement(Flex, { css: { c: "$on_surface_high", r: "$round", bg: "$surface_default", p: "$2" } }, streamEnded ? /* @__PURE__ */ React13.createElement(ColoredHandIcon, { height: 56, width: 56 }) : /* @__PURE__ */ React13.createElement(GoLiveIcon, { height: 56, width: 56 })), /* @__PURE__ */ React13.createElement(Text, { variant: "h5", css: { c: "$on_surface_high", mt: "$10", mb: 0, textAlign: "center" } }, streamEnded ? "Stream has ended" : "Stream yet to start"), /* @__PURE__ */ React13.createElement(Text, { variant: "md", css: { textAlign: "center", mt: "$4", c: "$on_surface_medium" } }, streamEnded ? "Have a nice day!" : "Sit back and relax"))
981
1256
  );
982
1257
  };
983
1258
  var HLSView_default = HLSView;
984
1259
  export {
985
1260
  HLSView_default as default
986
1261
  };
987
- //# sourceMappingURL=HLSView-CEPQ23TO.js.map
1262
+ //# sourceMappingURL=HLSView-UIPDGADR.js.map