@100mslive/roomkit-react 0.3.3-alpha.2 → 0.3.3-alpha.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. package/dist/{HLSView-GI5NXBYN.js → HLSView-BCIIVR2T.js} +331 -166
  2. package/dist/HLSView-BCIIVR2T.js.map +7 -0
  3. package/dist/IconButton/IconButton.d.ts +1 -1
  4. package/dist/Modal/Dialog.d.ts +1 -1
  5. package/dist/Prebuilt/IconButton.d.ts +2 -3
  6. package/dist/Prebuilt/components/Footer/ChatToggle.d.ts +3 -1
  7. package/dist/Prebuilt/components/HMSVideo/PlayPauseButton.d.ts +2 -2
  8. package/dist/Prebuilt/components/HMSVideo/PlayPauseSeekControls.d.ts +14 -0
  9. package/dist/Prebuilt/components/HMSVideo/{SeekControls.d.ts → SeekControl.d.ts} +2 -2
  10. package/dist/Prebuilt/components/HMSVideo/index.d.ts +15 -11
  11. package/dist/Prebuilt/components/Leave/LeaveAtoms.d.ts +2 -2
  12. package/dist/Prebuilt/components/VideoLayouts/WhiteboardLayout.d.ts +3 -0
  13. package/dist/Sheet/Sheet.d.ts +1 -1
  14. package/dist/{chunk-KUFQ5ONV.js → chunk-W47ZJGSD.js} +207 -163
  15. package/dist/chunk-W47ZJGSD.js.map +7 -0
  16. package/dist/index.cjs.js +918 -694
  17. package/dist/index.cjs.js.map +4 -4
  18. package/dist/index.js +1 -1
  19. package/dist/meta.cjs.json +193 -109
  20. package/dist/meta.esbuild.json +207 -122
  21. package/package.json +6 -6
  22. package/src/IconButton/IconButton.tsx +2 -7
  23. package/src/Prebuilt/IconButton.tsx +6 -10
  24. package/src/Prebuilt/components/Footer/ChatToggle.tsx +2 -2
  25. package/src/Prebuilt/components/Footer/WhiteboardToggle.tsx +17 -3
  26. package/src/Prebuilt/components/HMSVideo/HMSVideo.jsx +1 -0
  27. package/src/Prebuilt/components/HMSVideo/PlayPauseButton.tsx +2 -2
  28. package/src/Prebuilt/components/HMSVideo/PlayPauseSeekControls.tsx +158 -0
  29. package/src/Prebuilt/components/HMSVideo/{SeekControls.tsx → SeekControl.tsx} +2 -2
  30. package/src/Prebuilt/components/HMSVideo/VideoProgress.tsx +7 -3
  31. package/src/Prebuilt/components/HMSVideo/index.ts +5 -4
  32. package/src/Prebuilt/components/IconButtonWithOptions/IconButtonWithOptions.tsx +7 -7
  33. package/src/Prebuilt/components/VideoLayouts/GridLayout.tsx +27 -4
  34. package/src/Prebuilt/components/VideoLayouts/WhiteboardLayout.tsx +95 -0
  35. package/src/Prebuilt/components/hooks/useCloseScreenshareWhiteboard.tsx +13 -5
  36. package/src/Prebuilt/layouts/HLSView.jsx +115 -78
  37. package/src/Prebuilt/layouts/VideoStreamingSection.tsx +1 -17
  38. package/dist/HLSView-GI5NXBYN.js.map +0 -7
  39. package/dist/Prebuilt/layouts/WhiteboardView.d.ts +0 -2
  40. package/dist/chunk-KUFQ5ONV.js.map +0 -7
  41. package/src/Prebuilt/layouts/WhiteboardView.tsx +0 -69
@@ -25,6 +25,7 @@ import {
25
25
  Tooltip,
26
26
  __async,
27
27
  __objRest,
28
+ __spreadProps,
28
29
  __spreadValues,
29
30
  config,
30
31
  init_define_process_env,
@@ -37,12 +38,12 @@ import {
37
38
  useRoomLayoutHeader,
38
39
  useSidepaneToggle,
39
40
  useTheme
40
- } from "./chunk-KUFQ5ONV.js";
41
+ } from "./chunk-W47ZJGSD.js";
41
42
 
42
43
  // src/Prebuilt/layouts/HLSView.jsx
43
44
  init_define_process_env();
44
- import React14, { useCallback as useCallback2, useEffect as useEffect3, useRef, useState as useState4 } from "react";
45
- import { useFullscreen, useMedia as useMedia3, usePrevious, useToggle } from "react-use";
45
+ import React15, { useCallback as useCallback2, useEffect as useEffect3, useRef, useState as useState4 } from "react";
46
+ import { useFullscreen, useMedia as useMedia4, usePrevious, useToggle } from "react-use";
46
47
  import { HLSPlaybackState, HMSHLSPlayer, HMSHLSPlayerEvents as HMSHLSPlayerEvents2 } from "@100mslive/hls-player";
47
48
  import screenfull from "screenfull";
48
49
  import { match, P } from "ts-pattern";
@@ -58,7 +59,7 @@ import {
58
59
  useHMSStore,
59
60
  useHMSVanillaStore
60
61
  } from "@100mslive/react-sdk";
61
- import { BackwardArrowIcon, ColoredHandIcon, ForwardArrowIcon, GoLiveIcon } from "@100mslive/react-icons";
62
+ import { ColoredHandIcon, GoLiveIcon } from "@100mslive/react-icons";
62
63
 
63
64
  // src/Prebuilt/components/HlsStatsOverlay.jsx
64
65
  init_define_process_env();
@@ -179,6 +180,7 @@ var HMSVideo = forwardRef((_a, videoRef) => {
179
180
  size: "100%",
180
181
  position: "relative",
181
182
  justifyContent: "center",
183
+ transition: "all 0.3s ease-in-out",
182
184
  "@md": {
183
185
  height: "auto",
184
186
  "& video": {
@@ -224,6 +226,12 @@ var HMSVideo = forwardRef((_a, videoRef) => {
224
226
  );
225
227
  });
226
228
 
229
+ // src/Prebuilt/components/HMSVideo/PlayPauseSeekControls.tsx
230
+ init_define_process_env();
231
+ import React6 from "react";
232
+ import { useMedia } from "react-use";
233
+ import { BackwardArrowIcon, ForwardArrowIcon } from "@100mslive/react-icons";
234
+
227
235
  // src/Prebuilt/components/HMSVideo/PlayPauseButton.tsx
228
236
  init_define_process_env();
229
237
  import React4 from "react";
@@ -254,10 +262,10 @@ var PlayPauseButton = ({
254
262
  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 })));
255
263
  };
256
264
 
257
- // src/Prebuilt/components/HMSVideo/SeekControls.tsx
265
+ // src/Prebuilt/components/HMSVideo/SeekControl.tsx
258
266
  init_define_process_env();
259
267
  import React5 from "react";
260
- var SeekControls = ({
268
+ var SeekControl = ({
261
269
  title,
262
270
  onClick,
263
271
  children,
@@ -266,9 +274,138 @@ var SeekControls = ({
266
274
  return /* @__PURE__ */ React5.createElement(Tooltip, { title, side: "top" }, /* @__PURE__ */ React5.createElement(IconButton, { onClick, "data-testid": "backward_forward_arrow_btn", css }, children));
267
275
  };
268
276
 
277
+ // src/Prebuilt/components/HMSVideo/PlayPauseSeekControls.tsx
278
+ var PlayPauseSeekControls = ({
279
+ isPaused,
280
+ onSeekTo
281
+ }) => {
282
+ return /* @__PURE__ */ React6.createElement(React6.Fragment, null, /* @__PURE__ */ React6.createElement(
283
+ SeekControl,
284
+ {
285
+ onClick: (e) => {
286
+ e.stopPropagation();
287
+ onSeekTo(-10);
288
+ },
289
+ title: "backward"
290
+ },
291
+ /* @__PURE__ */ React6.createElement(BackwardArrowIcon, { width: 20, height: 20 })
292
+ ), /* @__PURE__ */ React6.createElement(PlayPauseButton, { isPaused }), /* @__PURE__ */ React6.createElement(
293
+ SeekControl,
294
+ {
295
+ onClick: (e) => {
296
+ e.stopPropagation();
297
+ onSeekTo(10);
298
+ },
299
+ title: "forward"
300
+ },
301
+ /* @__PURE__ */ React6.createElement(ForwardArrowIcon, { width: 20, height: 20 })
302
+ ));
303
+ };
304
+ var PlayPauseSeekOverlayControls = ({
305
+ isPaused,
306
+ showControls,
307
+ hoverControlsVisible
308
+ }) => {
309
+ const isMobile = useMedia(config.media.md);
310
+ const isLandscape = useIsLandscape();
311
+ if (!isMobile && !isLandscape) {
312
+ return /* @__PURE__ */ React6.createElement(React6.Fragment, null, /* @__PURE__ */ React6.createElement(
313
+ Flex,
314
+ {
315
+ css: {
316
+ bg: "rgba(0, 0, 0, 0.6)",
317
+ r: "$round",
318
+ size: "$24",
319
+ visibility: hoverControlsVisible.seekBackward ? `` : `hidden`,
320
+ opacity: hoverControlsVisible.seekBackward ? `1` : "0"
321
+ },
322
+ direction: "column",
323
+ align: "center"
324
+ },
325
+ /* @__PURE__ */ React6.createElement(SeekControl, { title: "backward" }, /* @__PURE__ */ React6.createElement(BackwardArrowIcon, { width: 52, height: 52 })),
326
+ /* @__PURE__ */ React6.createElement(Text, { variant: "body2", css: { fontWeight: "$regular" } }, "10 secs")
327
+ ), /* @__PURE__ */ React6.createElement(
328
+ Box,
329
+ {
330
+ css: {
331
+ bg: "rgba(0, 0, 0, 0.6)",
332
+ r: "$round",
333
+ visibility: hoverControlsVisible.pausePlay ? `` : `hidden`,
334
+ opacity: hoverControlsVisible.pausePlay ? `1` : "0"
335
+ }
336
+ },
337
+ /* @__PURE__ */ React6.createElement(PlayPauseButton, { isPaused, width: 48, height: 48 })
338
+ ), /* @__PURE__ */ React6.createElement(
339
+ Flex,
340
+ {
341
+ css: {
342
+ bg: "rgba(0, 0, 0, 0.6)",
343
+ r: "$round",
344
+ size: "$24",
345
+ visibility: hoverControlsVisible.seekForward ? `` : `hidden`,
346
+ opacity: hoverControlsVisible.seekForward ? `1` : "0"
347
+ },
348
+ direction: "column",
349
+ align: "center"
350
+ },
351
+ /* @__PURE__ */ React6.createElement(SeekControl, { title: "forward" }, /* @__PURE__ */ React6.createElement(ForwardArrowIcon, { width: 52, height: 52 })),
352
+ /* @__PURE__ */ React6.createElement(Text, { variant: "body2", css: { fontWeight: "$regular" } }, "10 secs")
353
+ ));
354
+ }
355
+ return /* @__PURE__ */ React6.createElement(
356
+ Flex,
357
+ {
358
+ align: "center",
359
+ justify: "center",
360
+ css: {
361
+ position: "absolute",
362
+ bg: "#00000066",
363
+ display: "inline-flex",
364
+ gap: "$2",
365
+ zIndex: 1,
366
+ size: "100%",
367
+ visibility: showControls ? `` : `hidden`,
368
+ opacity: showControls ? `1` : "0"
369
+ }
370
+ },
371
+ /* @__PURE__ */ React6.createElement(
372
+ SeekControl,
373
+ {
374
+ title: "backward",
375
+ css: {
376
+ visibility: hoverControlsVisible.seekBackward ? `` : `hidden`,
377
+ opacity: hoverControlsVisible.seekBackward ? `1` : "0"
378
+ }
379
+ },
380
+ /* @__PURE__ */ React6.createElement(BackwardArrowIcon, { width: 32, height: 32 })
381
+ ),
382
+ /* @__PURE__ */ React6.createElement(
383
+ Box,
384
+ {
385
+ css: {
386
+ bg: "rgba(0, 0, 0, 0.6)",
387
+ r: "$round"
388
+ }
389
+ },
390
+ /* @__PURE__ */ React6.createElement(PlayPauseButton, { isPaused, width: 48, height: 48 })
391
+ ),
392
+ /* @__PURE__ */ React6.createElement(
393
+ SeekControl,
394
+ {
395
+ title: "forward",
396
+ css: {
397
+ visibility: hoverControlsVisible.seekForward ? `` : `hidden`,
398
+ opacity: hoverControlsVisible.seekForward ? `1` : "0"
399
+ }
400
+ },
401
+ /* @__PURE__ */ React6.createElement(ForwardArrowIcon, { width: 32, height: 32 })
402
+ )
403
+ );
404
+ };
405
+
269
406
  // src/Prebuilt/components/HMSVideo/VideoProgress.tsx
270
407
  init_define_process_env();
271
- import React6, { useCallback, useEffect, useState } from "react";
408
+ import React7, { useCallback, useEffect, useState } from "react";
272
409
 
273
410
  // src/Prebuilt/components/HMSVideo/utils.ts
274
411
  init_define_process_env();
@@ -311,8 +448,12 @@ var VideoProgress = ({
311
448
  if (videoEl.buffered.length > 0) {
312
449
  bufferProgress2 = Math.floor(getPercentage((_b = videoEl.buffered) == null ? void 0 : _b.end(0), duration));
313
450
  }
314
- setVideoProgress(isNaN(videoProgress2) ? 0 : videoProgress2);
315
- setBufferProgress(isNaN(bufferProgress2) ? 0 : bufferProgress2);
451
+ if (!isNaN(videoProgress2)) {
452
+ setVideoProgress(videoProgress2);
453
+ }
454
+ if (!isNaN(bufferProgress2)) {
455
+ setBufferProgress(bufferProgress2);
456
+ }
316
457
  }, [videoEl]);
317
458
  const timeupdateHandler = useCallback(() => {
318
459
  if (!videoEl || seekProgress) {
@@ -328,7 +469,7 @@ var VideoProgress = ({
328
469
  return function cleanup() {
329
470
  videoEl == null ? void 0 : videoEl.removeEventListener("timeupdate", timeupdateHandler);
330
471
  };
331
- }, [timeupdateHandler, videoEl]);
472
+ }, [setProgress, timeupdateHandler, videoEl]);
332
473
  const onProgress = (progress) => {
333
474
  var _a;
334
475
  const progress1 = Math.floor(getPercentage(progress[0], 100));
@@ -344,7 +485,7 @@ var VideoProgress = ({
344
485
  if (!videoEl) {
345
486
  return null;
346
487
  }
347
- return /* @__PURE__ */ React6.createElement(Flex, { align: "center", css: { cursor: "pointer", h: "$2", alignSelf: "stretch" } }, /* @__PURE__ */ React6.createElement(
488
+ return /* @__PURE__ */ React7.createElement(Flex, { align: "center", css: { cursor: "pointer", h: "$2", alignSelf: "stretch" } }, /* @__PURE__ */ React7.createElement(
348
489
  Slider,
349
490
  {
350
491
  id: "video-actual-rest",
@@ -364,7 +505,7 @@ var VideoProgress = ({
364
505
  onPointerUp: () => setSeekProgress(false),
365
506
  thumbStyles: { w: "$6", h: "$6" }
366
507
  }
367
- ), /* @__PURE__ */ React6.createElement(
508
+ ), /* @__PURE__ */ React7.createElement(
368
509
  Box,
369
510
  {
370
511
  id: "video-buffer",
@@ -382,7 +523,7 @@ var VideoProgress = ({
382
523
 
383
524
  // src/Prebuilt/components/HMSVideo/VideoTime.tsx
384
525
  init_define_process_env();
385
- import React7, { useEffect as useEffect2, useState as useState2 } from "react";
526
+ import React8, { useEffect as useEffect2, useState as useState2 } from "react";
386
527
  import { HMSHLSPlayerEvents } from "@100mslive/hls-player";
387
528
  var VideoTime = () => {
388
529
  const { hlsPlayer: hlsPlayer2 } = useHMSPlayerContext();
@@ -404,7 +545,7 @@ var VideoTime = () => {
404
545
  hlsPlayer2 == null ? void 0 : hlsPlayer2.off(HMSHLSPlayerEvents.CURRENT_TIME, timeupdateHandler);
405
546
  };
406
547
  }, [hlsPlayer2]);
407
- return hlsPlayer2 ? /* @__PURE__ */ React7.createElement(
548
+ return hlsPlayer2 ? /* @__PURE__ */ React8.createElement(
408
549
  Text,
409
550
  {
410
551
  variant: "body1",
@@ -423,14 +564,14 @@ var VideoTime = () => {
423
564
 
424
565
  // src/Prebuilt/components/HMSVideo/VolumeControl.tsx
425
566
  init_define_process_env();
426
- import React8, { useState as useState3 } from "react";
567
+ import React9, { useState as useState3 } from "react";
427
568
  import { VolumeOneIcon, VolumeTwoIcon, VolumeZeroIcon } from "@100mslive/react-icons";
428
569
  var VolumeControl = () => {
429
570
  var _a;
430
571
  const { hlsPlayer: hlsPlayer2 } = useHMSPlayerContext();
431
572
  const [volume, setVolume] = useState3((_a = hlsPlayer2 == null ? void 0 : hlsPlayer2.volume) != null ? _a : 100);
432
573
  const [showSlider, setShowSlider] = useState3(false);
433
- return /* @__PURE__ */ React8.createElement(
574
+ return /* @__PURE__ */ React9.createElement(
434
575
  Flex,
435
576
  {
436
577
  align: "center",
@@ -444,7 +585,7 @@ var VolumeControl = () => {
444
585
  setShowSlider(false);
445
586
  }
446
587
  },
447
- /* @__PURE__ */ React8.createElement(
588
+ /* @__PURE__ */ React9.createElement(
448
589
  VolumeIcon,
449
590
  {
450
591
  volume,
@@ -459,7 +600,7 @@ var VolumeControl = () => {
459
600
  }
460
601
  }
461
602
  ),
462
- /* @__PURE__ */ React8.createElement(
603
+ /* @__PURE__ */ React9.createElement(
463
604
  Slider,
464
605
  {
465
606
  css: {
@@ -487,15 +628,14 @@ var VolumeControl = () => {
487
628
  };
488
629
  var VolumeIcon = ({ volume, onClick }) => {
489
630
  if (volume === 0) {
490
- return /* @__PURE__ */ React8.createElement(VolumeZeroIcon, { style: { cursor: "pointer", transition: "color 0.3s" }, onClick });
631
+ return /* @__PURE__ */ React9.createElement(VolumeZeroIcon, { style: { cursor: "pointer", transition: "color 0.3s" }, onClick });
491
632
  }
492
- return volume < 50 ? /* @__PURE__ */ React8.createElement(VolumeOneIcon, { style: { cursor: "pointer", transition: "color 0.3s" }, onClick }) : /* @__PURE__ */ React8.createElement(VolumeTwoIcon, { style: { cursor: "pointer", transition: "color 0.3s" }, onClick });
633
+ return volume < 50 ? /* @__PURE__ */ React9.createElement(VolumeOneIcon, { style: { cursor: "pointer", transition: "color 0.3s" }, onClick }) : /* @__PURE__ */ React9.createElement(VolumeTwoIcon, { style: { cursor: "pointer", transition: "color 0.3s" }, onClick });
493
634
  };
494
635
 
495
636
  // src/Prebuilt/components/HMSVideo/index.ts
496
637
  var HMSVideoPlayer = {
497
638
  Root: HMSVideo,
498
- PlayPauseButton,
499
639
  Progress: VideoProgress,
500
640
  Duration: VideoTime,
501
641
  Volume: VolumeControl,
@@ -504,30 +644,33 @@ var HMSVideoPlayer = {
504
644
  Left: LeftControls,
505
645
  Right: RightControls
506
646
  },
507
- Seeker: SeekControls
647
+ PlayPauseSeekControls: {
648
+ Overlay: PlayPauseSeekOverlayControls,
649
+ Button: PlayPauseSeekControls
650
+ }
508
651
  };
509
652
 
510
653
  // src/Prebuilt/components/HMSVideo/FullscreenButton.tsx
511
654
  init_define_process_env();
512
- import React9 from "react";
655
+ import React10 from "react";
513
656
  import { ExpandIcon, ShrinkIcon } from "@100mslive/react-icons";
514
657
  var FullScreenButton = ({ isFullScreen, onToggle }) => {
515
- return /* @__PURE__ */ React9.createElement(Tooltip, { title: `${isFullScreen ? "Exit" : "Go"} fullscreen`, side: "top" }, /* @__PURE__ */ React9.createElement(IconButton, { css: { margin: "0px" }, onClick: onToggle, key: "fullscreen_btn", "data-testid": "fullscreen_btn" }, /* @__PURE__ */ React9.createElement(Flex, null, isFullScreen ? /* @__PURE__ */ React9.createElement(ShrinkIcon, null) : /* @__PURE__ */ React9.createElement(ExpandIcon, null))));
658
+ return /* @__PURE__ */ React10.createElement(Tooltip, { title: `${isFullScreen ? "Exit" : "Go"} fullscreen`, side: "top" }, /* @__PURE__ */ React10.createElement(IconButton, { css: { margin: "0px" }, onClick: onToggle, key: "fullscreen_btn", "data-testid": "fullscreen_btn" }, /* @__PURE__ */ React10.createElement(Flex, null, isFullScreen ? /* @__PURE__ */ React10.createElement(ShrinkIcon, null) : /* @__PURE__ */ React10.createElement(ExpandIcon, null))));
516
659
  };
517
660
 
518
661
  // src/Prebuilt/components/HMSVideo/HLSAutoplayBlockedPrompt.tsx
519
662
  init_define_process_env();
520
- import React10 from "react";
521
- import { useMedia } from "react-use";
663
+ import React11 from "react";
664
+ import { useMedia as useMedia2 } from "react-use";
522
665
  import { VolumeTwoIcon as VolumeTwoIcon2 } from "@100mslive/react-icons";
523
666
  function HLSAutoplayBlockedPrompt({
524
667
  open,
525
668
  unblockAutoPlay
526
669
  }) {
527
670
  const isLandscape = useIsLandscape();
528
- const isMobile = useMedia(config.media.md);
671
+ const isMobile = useMedia2(config.media.md);
529
672
  if ((isMobile || isLandscape) && open) {
530
- return /* @__PURE__ */ React10.createElement(
673
+ return /* @__PURE__ */ React11.createElement(
531
674
  IconButton,
532
675
  {
533
676
  css: {
@@ -540,8 +683,8 @@ function HLSAutoplayBlockedPrompt({
540
683
  return yield unblockAutoPlay();
541
684
  })
542
685
  },
543
- /* @__PURE__ */ React10.createElement(VolumeTwoIcon2, { width: "32", height: "32" }),
544
- /* @__PURE__ */ React10.createElement(
686
+ /* @__PURE__ */ React11.createElement(VolumeTwoIcon2, { width: "32", height: "32" }),
687
+ /* @__PURE__ */ React11.createElement(
545
688
  Text,
546
689
  {
547
690
  variant: "body1",
@@ -555,7 +698,7 @@ function HLSAutoplayBlockedPrompt({
555
698
  )
556
699
  );
557
700
  }
558
- return /* @__PURE__ */ React10.createElement(
701
+ return /* @__PURE__ */ React11.createElement(
559
702
  Dialog.Root,
560
703
  {
561
704
  open,
@@ -565,7 +708,7 @@ function HLSAutoplayBlockedPrompt({
565
708
  }
566
709
  })
567
710
  },
568
- /* @__PURE__ */ React10.createElement(DialogContent, { title: "Attention", closeable: false }, /* @__PURE__ */ React10.createElement(DialogRow, null, /* @__PURE__ */ React10.createElement(Text, { variant: "md" }, 'The browser wants us to get a confirmation for playing the HLS Stream. Please click "play stream" to proceed.')), /* @__PURE__ */ React10.createElement(DialogRow, { justify: "end" }, /* @__PURE__ */ React10.createElement(
711
+ /* @__PURE__ */ React11.createElement(DialogContent, { title: "Attention", closeable: false }, /* @__PURE__ */ React11.createElement(DialogRow, null, /* @__PURE__ */ React11.createElement(Text, { variant: "md" }, 'The browser wants us to get a confirmation for playing the HLS Stream. Please click "play stream" to proceed.')), /* @__PURE__ */ React11.createElement(DialogRow, { justify: "end" }, /* @__PURE__ */ React11.createElement(
569
712
  Button,
570
713
  {
571
714
  variant: "primary",
@@ -580,17 +723,17 @@ function HLSAutoplayBlockedPrompt({
580
723
 
581
724
  // src/Prebuilt/components/HMSVideo/HLSCaptionSelector.tsx
582
725
  init_define_process_env();
583
- import React11 from "react";
726
+ import React12 from "react";
584
727
  import { ClosedCaptionIcon, OpenCaptionIcon } from "@100mslive/react-icons";
585
728
  function HLSCaptionSelector({ isEnabled }) {
586
729
  const { hlsPlayer: hlsPlayer2 } = useHMSPlayerContext();
587
- return /* @__PURE__ */ React11.createElement(Tooltip, { title: "Subtitles/closed captions", side: "top" }, /* @__PURE__ */ React11.createElement(IconButton, { css: { p: "$2" }, onClick: () => hlsPlayer2 == null ? void 0 : hlsPlayer2.toggleCaption() }, isEnabled ? /* @__PURE__ */ React11.createElement(ClosedCaptionIcon, { width: "20", height: "20px" }) : /* @__PURE__ */ React11.createElement(OpenCaptionIcon, { width: "20", height: "20px" })));
730
+ return /* @__PURE__ */ React12.createElement(Tooltip, { title: "Subtitles/closed captions", side: "top" }, /* @__PURE__ */ React12.createElement(IconButton, { css: { p: "$2" }, onClick: () => hlsPlayer2 == null ? void 0 : hlsPlayer2.toggleCaption() }, isEnabled ? /* @__PURE__ */ React12.createElement(ClosedCaptionIcon, { width: "20", height: "20px" }) : /* @__PURE__ */ React12.createElement(OpenCaptionIcon, { width: "20", height: "20px" })));
588
731
  }
589
732
 
590
733
  // src/Prebuilt/components/HMSVideo/HLSQualitySelector.tsx
591
734
  init_define_process_env();
592
- import React12 from "react";
593
- import { useMedia as useMedia2 } from "react-use";
735
+ import React13 from "react";
736
+ import { useMedia as useMedia3 } from "react-use";
594
737
  import { CheckIcon, CrossIcon as CrossIcon2, SettingsIcon } from "@100mslive/react-icons";
595
738
  function HLSQualitySelector({
596
739
  open,
@@ -601,13 +744,13 @@ function HLSQualitySelector({
601
744
  isAuto,
602
745
  containerRef
603
746
  }) {
604
- const isMobile = useMedia2(config.media.md);
747
+ const isMobile = useMedia3(config.media.md);
605
748
  const isLandscape = useIsLandscape();
606
749
  if (layers.length === 0) {
607
750
  return null;
608
751
  }
609
752
  if (isMobile || isLandscape) {
610
- return /* @__PURE__ */ React12.createElement(Sheet.Root, { open, onOpenChange }, /* @__PURE__ */ React12.createElement(Sheet.Trigger, { asChild: true, "data-testid": "quality_selector" }, /* @__PURE__ */ React12.createElement(
753
+ return /* @__PURE__ */ React13.createElement(Sheet.Root, { open, onOpenChange }, /* @__PURE__ */ React13.createElement(Sheet.Trigger, { asChild: true, "data-testid": "quality_selector" }, /* @__PURE__ */ React13.createElement(
611
754
  Flex,
612
755
  {
613
756
  css: {
@@ -617,15 +760,15 @@ function HLSQualitySelector({
617
760
  p: "$2"
618
761
  }
619
762
  },
620
- /* @__PURE__ */ React12.createElement(SettingsIcon, null)
621
- )), /* @__PURE__ */ React12.createElement(
763
+ /* @__PURE__ */ React13.createElement(SettingsIcon, null)
764
+ )), /* @__PURE__ */ React13.createElement(
622
765
  Sheet.Content,
623
766
  {
624
767
  container: containerRef,
625
768
  css: { bg: "$surface_default", pb: "$1" },
626
769
  onClick: () => onOpenChange(false)
627
770
  },
628
- /* @__PURE__ */ React12.createElement(
771
+ /* @__PURE__ */ React13.createElement(
629
772
  Sheet.Title,
630
773
  {
631
774
  css: {
@@ -642,10 +785,10 @@ function HLSQualitySelector({
642
785
  }
643
786
  },
644
787
  "Quality",
645
- /* @__PURE__ */ React12.createElement(Sheet.Close, { css: { color: "$on_surface_high" }, onClick: () => onOpenChange(false) }, /* @__PURE__ */ React12.createElement(CrossIcon2, null))
788
+ /* @__PURE__ */ React13.createElement(Sheet.Close, { css: { color: "$on_surface_high" }, onClick: () => onOpenChange(false) }, /* @__PURE__ */ React13.createElement(CrossIcon2, null))
646
789
  ),
647
790
  layers.map((layer) => {
648
- return /* @__PURE__ */ React12.createElement(
791
+ return /* @__PURE__ */ React13.createElement(
649
792
  Flex,
650
793
  {
651
794
  align: "center",
@@ -663,12 +806,12 @@ function HLSQualitySelector({
663
806
  key: layer.width,
664
807
  onClick: () => onQualityChange(layer)
665
808
  },
666
- /* @__PURE__ */ React12.createElement(Text, { variant: "caption", css: { fontWeight: "$semiBold" } }, getQualityText(layer)),
667
- /* @__PURE__ */ React12.createElement(Text, { variant: "caption", css: { flex: "1 1 0", c: "$on_surface_low", pl: "$2" } }, getBitrateText(layer)),
668
- !isAuto && layer.width === (selection == null ? void 0 : selection.width) && layer.height === (selection == null ? void 0 : selection.height) && /* @__PURE__ */ React12.createElement(CheckIcon, { width: "16px", height: "16px" })
809
+ /* @__PURE__ */ React13.createElement(Text, { variant: "caption", css: { fontWeight: "$semiBold" } }, getQualityText(layer)),
810
+ /* @__PURE__ */ React13.createElement(Text, { variant: "caption", css: { flex: "1 1 0", c: "$on_surface_low", pl: "$2" } }, getBitrateText(layer)),
811
+ !isAuto && layer.width === (selection == null ? void 0 : selection.width) && layer.height === (selection == null ? void 0 : selection.height) && /* @__PURE__ */ React13.createElement(CheckIcon, { width: "16px", height: "16px" })
669
812
  );
670
813
  }),
671
- /* @__PURE__ */ React12.createElement(
814
+ /* @__PURE__ */ React13.createElement(
672
815
  Flex,
673
816
  {
674
817
  align: "center",
@@ -686,12 +829,12 @@ function HLSQualitySelector({
686
829
  key: "auto",
687
830
  onClick: () => onQualityChange({ height: "auto" })
688
831
  },
689
- /* @__PURE__ */ React12.createElement(Text, { variant: "caption", css: { fontWeight: "$semiBold", flex: "1 1 0" } }, "Auto"),
690
- isAuto && /* @__PURE__ */ React12.createElement(CheckIcon, { width: "16px", height: "16px" })
832
+ /* @__PURE__ */ React13.createElement(Text, { variant: "caption", css: { fontWeight: "$semiBold", flex: "1 1 0" } }, "Auto"),
833
+ isAuto && /* @__PURE__ */ React13.createElement(CheckIcon, { width: "16px", height: "16px" })
691
834
  )
692
835
  ));
693
836
  }
694
- return /* @__PURE__ */ React12.createElement(Dropdown.Root, { open, onOpenChange: (value) => onOpenChange(value), modal: false }, /* @__PURE__ */ React12.createElement(Dropdown.Trigger, { asChild: true, "data-testid": "quality_selector" }, /* @__PURE__ */ React12.createElement(
837
+ return /* @__PURE__ */ React13.createElement(Dropdown.Root, { open, onOpenChange: (value) => onOpenChange(value), modal: false }, /* @__PURE__ */ React13.createElement(Dropdown.Trigger, { asChild: true, "data-testid": "quality_selector" }, /* @__PURE__ */ React13.createElement(
695
838
  Flex,
696
839
  {
697
840
  css: {
@@ -701,7 +844,7 @@ function HLSQualitySelector({
701
844
  p: "$2"
702
845
  }
703
846
  },
704
- /* @__PURE__ */ React12.createElement(Tooltip, { title: "Select Quality", side: "top" }, /* @__PURE__ */ React12.createElement(Flex, { align: "center" }, /* @__PURE__ */ React12.createElement(
847
+ /* @__PURE__ */ React13.createElement(Tooltip, { title: "Select Quality", side: "top" }, /* @__PURE__ */ React13.createElement(Flex, { align: "center" }, /* @__PURE__ */ React13.createElement(
705
848
  Box,
706
849
  {
707
850
  css: {
@@ -712,8 +855,8 @@ function HLSQualitySelector({
712
855
  c: "$on_surface_high"
713
856
  }
714
857
  },
715
- /* @__PURE__ */ React12.createElement(SettingsIcon, null)
716
- ), /* @__PURE__ */ React12.createElement(
858
+ /* @__PURE__ */ React13.createElement(SettingsIcon, null)
859
+ ), /* @__PURE__ */ React13.createElement(
717
860
  Text,
718
861
  {
719
862
  variant: {
@@ -723,7 +866,7 @@ function HLSQualitySelector({
723
866
  },
724
867
  css: { display: "flex", alignItems: "center", ml: "$2", c: "$on_surface_medium" }
725
868
  },
726
- isAuto && /* @__PURE__ */ React12.createElement(React12.Fragment, null, "Auto", /* @__PURE__ */ React12.createElement(
869
+ isAuto && /* @__PURE__ */ React13.createElement(React13.Fragment, null, "Auto", /* @__PURE__ */ React13.createElement(
727
870
  Box,
728
871
  {
729
872
  css: {
@@ -738,7 +881,7 @@ function HLSQualitySelector({
738
881
  selection && Math.min(selection.width || 0, selection.height || 0),
739
882
  "p"
740
883
  )))
741
- )), /* @__PURE__ */ React12.createElement(Dropdown.Portal, { container: containerRef }, /* @__PURE__ */ React12.createElement(
884
+ )), /* @__PURE__ */ React13.createElement(Dropdown.Portal, { container: containerRef }, /* @__PURE__ */ React13.createElement(
742
885
  Dropdown.Content,
743
886
  {
744
887
  sideOffset: 5,
@@ -754,7 +897,7 @@ function HLSQualitySelector({
754
897
  }
755
898
  },
756
899
  layers.map((layer) => {
757
- return /* @__PURE__ */ React12.createElement(
900
+ return /* @__PURE__ */ React13.createElement(
758
901
  Dropdown.Item,
759
902
  {
760
903
  onClick: () => onQualityChange(layer),
@@ -769,12 +912,12 @@ function HLSQualitySelector({
769
912
  gap: "$2"
770
913
  }
771
914
  },
772
- /* @__PURE__ */ React12.createElement(Text, { variant: "caption", css: { fontWeight: "$semiBold" } }, getQualityText(layer)),
773
- /* @__PURE__ */ React12.createElement(Text, { variant: "caption", css: { flex: "1 1 0", c: "$on_surface_low", pl: "$2" } }, getBitrateText(layer)),
774
- !isAuto && layer.width === (selection == null ? void 0 : selection.width) && layer.height === (selection == null ? void 0 : selection.height) && /* @__PURE__ */ React12.createElement(CheckIcon, { width: "16px", height: "16px" })
915
+ /* @__PURE__ */ React13.createElement(Text, { variant: "caption", css: { fontWeight: "$semiBold" } }, getQualityText(layer)),
916
+ /* @__PURE__ */ React13.createElement(Text, { variant: "caption", css: { flex: "1 1 0", c: "$on_surface_low", pl: "$2" } }, getBitrateText(layer)),
917
+ !isAuto && layer.width === (selection == null ? void 0 : selection.width) && layer.height === (selection == null ? void 0 : selection.height) && /* @__PURE__ */ React13.createElement(CheckIcon, { width: "16px", height: "16px" })
775
918
  );
776
919
  }),
777
- /* @__PURE__ */ React12.createElement(
920
+ /* @__PURE__ */ React13.createElement(
778
921
  Dropdown.Item,
779
922
  {
780
923
  onClick: () => onQualityChange({ height: "auto" }),
@@ -789,8 +932,8 @@ function HLSQualitySelector({
789
932
  gap: "$2"
790
933
  }
791
934
  },
792
- /* @__PURE__ */ React12.createElement(Text, { variant: "caption", css: { fontWeight: "$semiBold", flex: "1 1 0" } }, "Auto"),
793
- isAuto && /* @__PURE__ */ React12.createElement(CheckIcon, { width: "16px", height: "16px" })
935
+ /* @__PURE__ */ React13.createElement(Text, { variant: "caption", css: { fontWeight: "$semiBold", flex: "1 1 0" } }, "Auto"),
936
+ isAuto && /* @__PURE__ */ React13.createElement(CheckIcon, { width: "16px", height: "16px" })
794
937
  )
795
938
  )));
796
939
  }
@@ -799,14 +942,14 @@ var getBitrateText = (layer) => `(${(Number(layer.bitrate / 1e3) / 1e3).toFixed(
799
942
 
800
943
  // src/Prebuilt/components/HMSVideo/MwebHLSViewTitle.tsx
801
944
  init_define_process_env();
802
- import React13 from "react";
945
+ import React14 from "react";
803
946
  import { ChevronDownIcon } from "@100mslive/react-icons";
804
947
  var HLSViewTitle = () => {
805
948
  const { title, details, description } = useRoomLayoutHeader();
806
949
  const toggleDetailsPane = useSidepaneToggle(SIDE_PANE_OPTIONS.ROOM_DETAILS);
807
950
  const isDetailSidepaneOpen = useIsSidepaneTypeOpen(SIDE_PANE_OPTIONS.ROOM_DETAILS);
808
951
  if (isDetailSidepaneOpen) {
809
- return /* @__PURE__ */ React13.createElement(
952
+ return /* @__PURE__ */ React14.createElement(
810
953
  Flex,
811
954
  {
812
955
  gap: "4",
@@ -821,8 +964,8 @@ var HLSViewTitle = () => {
821
964
  backgroundColor: "$surface_dim"
822
965
  }
823
966
  },
824
- /* @__PURE__ */ React13.createElement(Text, { variant: "sub2", css: { fontWeight: "$semiBold" } }, "About Session"),
825
- /* @__PURE__ */ React13.createElement(
967
+ /* @__PURE__ */ React14.createElement(Text, { variant: "sub2", css: { fontWeight: "$semiBold" } }, "About Session"),
968
+ /* @__PURE__ */ React14.createElement(
826
969
  Flex,
827
970
  {
828
971
  onClick: toggleDetailsPane,
@@ -832,11 +975,11 @@ var HLSViewTitle = () => {
832
975
  "&:hover": { opacity: "0.8" }
833
976
  }
834
977
  },
835
- /* @__PURE__ */ React13.createElement(ChevronDownIcon, null)
978
+ /* @__PURE__ */ React14.createElement(ChevronDownIcon, null)
836
979
  )
837
980
  );
838
981
  }
839
- return /* @__PURE__ */ React13.createElement(
982
+ return /* @__PURE__ */ React14.createElement(
840
983
  Flex,
841
984
  {
842
985
  gap: "4",
@@ -850,35 +993,38 @@ var HLSViewTitle = () => {
850
993
  backgroundColor: "$surface_dim"
851
994
  }
852
995
  },
853
- /* @__PURE__ */ React13.createElement(Logo, null),
854
- /* @__PURE__ */ React13.createElement(Flex, { direction: "column" }, title ? /* @__PURE__ */ React13.createElement(Text, { variant: "sub2", css: { fontWeight: "$semiBold" } }, title) : null, /* @__PURE__ */ React13.createElement(Flex, null, /* @__PURE__ */ React13.createElement(RoomDetailsRow, { details }), description ? /* @__PURE__ */ React13.createElement(Text, { variant: "caption", css: { color: "$on_surface_medium" }, onClick: toggleDetailsPane }, "\xA0...more") : null))
996
+ /* @__PURE__ */ React14.createElement(Logo, null),
997
+ /* @__PURE__ */ React14.createElement(Flex, { direction: "column" }, title ? /* @__PURE__ */ React14.createElement(Text, { variant: "sub2", css: { fontWeight: "$semiBold" } }, title) : null, /* @__PURE__ */ React14.createElement(Flex, null, /* @__PURE__ */ React14.createElement(RoomDetailsRow, { details }), description ? /* @__PURE__ */ React14.createElement(Text, { variant: "caption", css: { color: "$on_surface_medium" }, onClick: toggleDetailsPane }, "\xA0...more") : null))
855
998
  );
856
999
  };
857
1000
 
858
1001
  // src/Prebuilt/layouts/HLSView.jsx
859
1002
  var hlsPlayer;
860
1003
  var toastMap = {};
861
- var ToggleChat = () => {
1004
+ var ToggleChat = ({ isFullScreen = false }) => {
862
1005
  const { elements } = useRoomLayoutConferencingScreen();
863
1006
  const sidepane = useHMSStore(selectAppData(APP_DATA.sidePane));
864
1007
  const toggleChat = useSidepaneToggle(SIDE_PANE_OPTIONS.CHAT);
865
1008
  const showChat = !!(elements == null ? void 0 : elements.chat);
866
- const isMobile = useMedia3(config.media.md);
1009
+ const isMobile = useMedia4(config.media.md);
867
1010
  const hmsActions = useHMSActions();
868
1011
  useEffect3(() => {
869
- match({ sidepane, isMobile, showChat }).with({ isMobile: true, showChat: true, sidepane: P.when((value) => !value) }, () => {
1012
+ match({ sidepane, isMobile, showChat, isFullScreen }).with({ isFullScreen: true }, () => {
1013
+ hmsActions.setAppData(APP_DATA.sidePane, "");
1014
+ }).with({ isMobile: true, showChat: true, sidepane: P.when((value) => !value) }, () => {
870
1015
  toggleChat();
871
1016
  }).with({ showChat: false, isMobile: true, sidepane: SIDE_PANE_OPTIONS.CHAT }, () => {
872
1017
  hmsActions.setAppData(APP_DATA.sidePane, "");
873
1018
  }).otherwise(() => {
874
1019
  });
875
- }, [sidepane, isMobile, toggleChat, showChat, hmsActions]);
1020
+ }, [sidepane, isMobile, toggleChat, showChat, hmsActions, isFullScreen]);
876
1021
  return null;
877
1022
  };
878
1023
  var HLSView = () => {
879
- var _a, _b, _c, _d, _e, _f;
1024
+ var _a, _b, _c, _d, _e, _f, _g;
880
1025
  const videoRef = useRef(null);
881
1026
  const hlsViewRef = useRef();
1027
+ const { elements } = useRoomLayoutConferencingScreen();
882
1028
  const hlsState = useHMSStore(selectHLSState);
883
1029
  const enablHlsStats = useHMSStore(selectAppData(APP_DATA.hlsStats));
884
1030
  const notification = useHMSNotifications(HMSNotificationTypes.POLL_STOPPED);
@@ -893,7 +1039,11 @@ var HLSView = () => {
893
1039
  const [hasCaptions, setHasCaptions] = useState4(false);
894
1040
  const [currentSelectedQuality, setCurrentSelectedQuality] = useState4(null);
895
1041
  const [isHlsAutoplayBlocked, setIsHlsAutoplayBlocked] = useState4(false);
896
- const [isSeekEnabled, setIsSeekEnabled] = useState4(false);
1042
+ const [hoverControlsVisible, setHoverControlsVisible] = useState4({
1043
+ seekForward: false,
1044
+ pausePlay: false,
1045
+ seekBackward: false
1046
+ });
897
1047
  const [isPaused, setIsPaused] = useState4(false);
898
1048
  const [show, toggle] = useToggle(false);
899
1049
  const lastHlsUrl = usePrevious(hlsUrl);
@@ -905,7 +1055,9 @@ var HLSView = () => {
905
1055
  const controlsTimerRef = useRef();
906
1056
  const [seekProgress, setSeekProgress] = useState4(false);
907
1057
  const isFullScreenSupported = screenfull.isEnabled;
908
- const isMobile = useMedia3(config.media.md);
1058
+ const toggleChat = useSidepaneToggle(SIDE_PANE_OPTIONS.CHAT);
1059
+ const showChat = !!(elements == null ? void 0 : elements.chat);
1060
+ const isMobile = useMedia4(config.media.md);
909
1061
  const isLandscape = useIsLandscape();
910
1062
  const isFullScreen = useFullscreen(hlsViewRef, show, {
911
1063
  onClose: () => toggle(false)
@@ -986,7 +1138,7 @@ var HLSView = () => {
986
1138
  if (!toastMap[pollId]) {
987
1139
  const toastID = ToastManager.addToast({
988
1140
  title: `${pollStartedBy} started a ${poll.type}: ${poll.title}`,
989
- action: /* @__PURE__ */ React14.createElement(
1141
+ action: /* @__PURE__ */ React15.createElement(
990
1142
  Button,
991
1143
  {
992
1144
  onClick: () => {
@@ -1033,7 +1185,17 @@ var HLSView = () => {
1033
1185
  const handleNoLongerLive = ({ isLive }) => {
1034
1186
  setIsVideoLive(isLive);
1035
1187
  };
1036
- const playbackEventHandler = (data) => setIsPaused(data.state === HLSPlaybackState.paused);
1188
+ const playbackEventHandler = (data) => {
1189
+ setIsPaused(data.state === HLSPlaybackState.paused);
1190
+ setHoverControlsVisible(__spreadProps(__spreadValues({}, hoverControlsVisible), {
1191
+ pausePlay: true
1192
+ }));
1193
+ setTimeout(() => {
1194
+ setHoverControlsVisible(__spreadProps(__spreadValues({}, hoverControlsVisible), {
1195
+ pausePlay: false
1196
+ }));
1197
+ }, 2e3);
1198
+ };
1037
1199
  const captionEnabledEventHandler = (isCaptionEnabled2) => {
1038
1200
  setIsCaptionEnabled(isCaptionEnabled2);
1039
1201
  };
@@ -1103,10 +1265,28 @@ var HLSView = () => {
1103
1265
  }
1104
1266
  };
1105
1267
  }, [controlsVisible, isFullScreen, seekProgress, qualityDropDownOpen]);
1106
- const onSeekTo = useCallback2((seek) => {
1107
- var _a2;
1108
- hlsPlayer == null ? void 0 : hlsPlayer.seekTo(((_a2 = videoRef.current) == null ? void 0 : _a2.currentTime) + seek);
1109
- }, []);
1268
+ const onSeekTo = useCallback2(
1269
+ (seek) => {
1270
+ var _a2;
1271
+ match({ isLandscape, isMobile, seek }).with({ seek: -10, isMobile: false, isLandscape: false }, () => {
1272
+ setHoverControlsVisible(__spreadProps(__spreadValues({}, hoverControlsVisible), { seekBackward: true }));
1273
+ setTimeout(() => {
1274
+ setHoverControlsVisible(__spreadProps(__spreadValues({}, hoverControlsVisible), {
1275
+ seekBackward: false
1276
+ }));
1277
+ }, 1e3);
1278
+ }).with({ seek: 10, isMobile: false, isLandscape: false }, () => {
1279
+ setHoverControlsVisible(__spreadProps(__spreadValues({}, hoverControlsVisible), { seekForward: true }));
1280
+ setTimeout(() => {
1281
+ setHoverControlsVisible(__spreadProps(__spreadValues({}, hoverControlsVisible), {
1282
+ seekForward: false
1283
+ }));
1284
+ }, 1e3);
1285
+ }).otherwise(() => null);
1286
+ hlsPlayer == null ? void 0 : hlsPlayer.seekTo(((_a2 = videoRef.current) == null ? void 0 : _a2.currentTime) + seek);
1287
+ },
1288
+ [hoverControlsVisible, isLandscape, isMobile]
1289
+ );
1110
1290
  const onDoubleClickHandler = useCallback2(
1111
1291
  (event) => {
1112
1292
  var _a2;
@@ -1114,17 +1294,25 @@ var HLSView = () => {
1114
1294
  return;
1115
1295
  }
1116
1296
  const sidePercentage = event.screenX * 100 / event.target.clientWidth;
1117
- setIsSeekEnabled(true);
1118
1297
  if (sidePercentage < 45) {
1298
+ setHoverControlsVisible(__spreadProps(__spreadValues({}, hoverControlsVisible), {
1299
+ seekBackward: true
1300
+ }));
1119
1301
  onSeekTo(-10);
1120
1302
  } else {
1303
+ setHoverControlsVisible(__spreadProps(__spreadValues({}, hoverControlsVisible), {
1304
+ seekForward: true
1305
+ }));
1121
1306
  onSeekTo(10);
1122
1307
  }
1123
1308
  setTimeout(() => {
1124
- setIsSeekEnabled(false);
1125
- }, 200);
1309
+ setHoverControlsVisible(__spreadProps(__spreadValues({}, hoverControlsVisible), {
1310
+ seekForward: false,
1311
+ seekBackward: false
1312
+ }));
1313
+ }, 1e3);
1126
1314
  },
1127
- [hlsState == null ? void 0 : hlsState.variants, isLandscape, isMobile, onSeekTo]
1315
+ [hlsState == null ? void 0 : hlsState.variants, hoverControlsVisible, isLandscape, isMobile, onSeekTo]
1128
1316
  );
1129
1317
  const onClickHandler = useCallback2(() => __async(void 0, null, function* () {
1130
1318
  var _a2;
@@ -1167,7 +1355,7 @@ var HLSView = () => {
1167
1355
  );
1168
1356
  const keyHandler = useKeyboardHandler(isPaused, hlsPlayer);
1169
1357
  if (!hlsUrl || streamEnded) {
1170
- return /* @__PURE__ */ React14.createElement(React14.Fragment, null, /* @__PURE__ */ React14.createElement(ToggleChat, null), hlsViewRef.current && (isMobile || isLandscape) && /* @__PURE__ */ React14.createElement(Box, { css: { position: "fixed", left: "$4", top: "$4", zIndex: 11 } }, /* @__PURE__ */ React14.createElement(LeaveRoom, { screenType: "hls_live_streaming", container: hlsViewRef.current })), /* @__PURE__ */ React14.createElement(
1358
+ return /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(ToggleChat, null), hlsViewRef.current && (isMobile || isLandscape) && /* @__PURE__ */ React15.createElement(Box, { css: { position: "fixed", left: "$4", top: "$4", zIndex: 11 } }, /* @__PURE__ */ React15.createElement(LeaveRoom, { screenType: "hls_live_streaming", container: hlsViewRef.current })), /* @__PURE__ */ React15.createElement(
1171
1359
  Flex,
1172
1360
  {
1173
1361
  key: "hls-viewer",
@@ -1179,10 +1367,10 @@ var HLSView = () => {
1179
1367
  flex: isLandscape ? "2 1 0" : "1 1 0"
1180
1368
  }
1181
1369
  },
1182
- /* @__PURE__ */ React14.createElement(Flex, { align: "center", justify: "center", direction: "column", css: { size: "100%", px: "$10" } }, /* @__PURE__ */ React14.createElement(Flex, { css: { c: "$on_surface_high", r: "$round", bg: "$surface_default", p: "$2" } }, streamEnded ? /* @__PURE__ */ React14.createElement(ColoredHandIcon, { height: 56, width: 56 }) : /* @__PURE__ */ React14.createElement(GoLiveIcon, { height: 56, width: 56 })), /* @__PURE__ */ React14.createElement(Text, { variant: "h5", css: { c: "$on_surface_high", mt: "$10", mb: 0, textAlign: "center" } }, streamEnded ? "Stream has ended" : "Stream yet to start"), /* @__PURE__ */ React14.createElement(Text, { variant: "md", css: { textAlign: "center", mt: "$4", c: "$on_surface_medium" } }, streamEnded ? "Have a nice day!" : "Sit back and relax"))
1370
+ /* @__PURE__ */ React15.createElement(Flex, { align: "center", justify: "center", direction: "column", css: { size: "100%", px: "$10" } }, /* @__PURE__ */ React15.createElement(Flex, { css: { c: "$on_surface_high", r: "$round", bg: "$surface_default", p: "$2" } }, streamEnded ? /* @__PURE__ */ React15.createElement(ColoredHandIcon, { height: 56, width: 56 }) : /* @__PURE__ */ React15.createElement(GoLiveIcon, { height: 56, width: 56 })), /* @__PURE__ */ React15.createElement(Text, { variant: "h5", css: { c: "$on_surface_high", mt: "$10", mb: 0, textAlign: "center" } }, streamEnded ? "Stream has ended" : "Stream yet to start"), /* @__PURE__ */ React15.createElement(Text, { variant: "md", css: { textAlign: "center", mt: "$4", c: "$on_surface_medium" } }, streamEnded ? "Have a nice day!" : "Sit back and relax"))
1183
1371
  ));
1184
1372
  }
1185
- return /* @__PURE__ */ React14.createElement(
1373
+ return /* @__PURE__ */ React15.createElement(
1186
1374
  Flex,
1187
1375
  {
1188
1376
  key: "hls-viewer",
@@ -1192,6 +1380,7 @@ var HLSView = () => {
1192
1380
  justify: "center",
1193
1381
  css: {
1194
1382
  flex: isLandscape ? "2 1 0" : "1 1 0",
1383
+ transition: "all 0.3s ease-in-out",
1195
1384
  "&:fullscreen": {
1196
1385
  "& video": {
1197
1386
  height: "unset !important"
@@ -1199,8 +1388,8 @@ var HLSView = () => {
1199
1388
  }
1200
1389
  }
1201
1390
  },
1202
- hlsViewRef.current && (isMobile || isLandscape) && /* @__PURE__ */ React14.createElement(Box, { css: { position: "fixed", left: "$4", top: "$4", zIndex: 11 } }, /* @__PURE__ */ React14.createElement(LeaveRoom, { screenType: "hls_live_streaming", container: hlsViewRef.current })),
1203
- /* @__PURE__ */ React14.createElement(HMSPlayerContext.Provider, { value: { hlsPlayer } }, (hlsStatsState == null ? void 0 : hlsStatsState.url) && enablHlsStats && !(isMobile || isLandscape) ? /* @__PURE__ */ React14.createElement(HlsStatsOverlay, { hlsStatsState, onClose: sfnOverlayClose }) : null, /* @__PURE__ */ React14.createElement(
1391
+ hlsViewRef.current && (isMobile || isLandscape) && /* @__PURE__ */ React15.createElement(Box, { css: { position: "fixed", left: "$4", top: "$4", zIndex: 11 } }, /* @__PURE__ */ React15.createElement(LeaveRoom, { screenType: "hls_live_streaming", container: hlsViewRef.current })),
1392
+ /* @__PURE__ */ React15.createElement(HMSPlayerContext.Provider, { value: { hlsPlayer } }, (hlsStatsState == null ? void 0 : hlsStatsState.url) && enablHlsStats && !(isMobile || isLandscape) ? /* @__PURE__ */ React15.createElement(HlsStatsOverlay, { hlsStatsState, onClose: sfnOverlayClose }) : null, /* @__PURE__ */ React15.createElement(
1204
1393
  Flex,
1205
1394
  {
1206
1395
  id: "hls-player-container",
@@ -1222,8 +1411,8 @@ var HLSView = () => {
1222
1411
  }),
1223
1412
  tabIndex: "0"
1224
1413
  },
1225
- !(isMobile || isLandscape) && /* @__PURE__ */ React14.createElement(HLSAutoplayBlockedPrompt, { open: isHlsAutoplayBlocked, unblockAutoPlay }),
1226
- showLoader && /* @__PURE__ */ React14.createElement(
1414
+ !(isMobile || isLandscape) && /* @__PURE__ */ React15.createElement(HLSAutoplayBlockedPrompt, { open: isHlsAutoplayBlocked, unblockAutoPlay }),
1415
+ showLoader && /* @__PURE__ */ React15.createElement(
1227
1416
  Flex,
1228
1417
  {
1229
1418
  align: "center",
@@ -1232,9 +1421,9 @@ var HLSView = () => {
1232
1421
  position: "absolute"
1233
1422
  }
1234
1423
  },
1235
- /* @__PURE__ */ React14.createElement(Loading, { width: 72, height: 72 })
1424
+ /* @__PURE__ */ React15.createElement(Loading, { width: 72, height: 72 })
1236
1425
  ),
1237
- /* @__PURE__ */ React14.createElement(
1426
+ /* @__PURE__ */ React15.createElement(
1238
1427
  HMSVideoPlayer.Root,
1239
1428
  {
1240
1429
  ref: videoRef,
@@ -1246,53 +1435,36 @@ var HLSView = () => {
1246
1435
  onDoubleClickHandler(e);
1247
1436
  }
1248
1437
  },
1249
- /* @__PURE__ */ React14.createElement(React14.Fragment, null, isMobile || isLandscape ? /* @__PURE__ */ React14.createElement(React14.Fragment, null, /* @__PURE__ */ React14.createElement(
1438
+ /* @__PURE__ */ React15.createElement(React15.Fragment, null, !(isMobile || isLandscape) && /* @__PURE__ */ React15.createElement(
1250
1439
  Flex,
1251
1440
  {
1252
1441
  align: "center",
1253
- justify: "center",
1442
+ justify: "between",
1254
1443
  css: {
1255
1444
  position: "absolute",
1256
1445
  bg: "#00000066",
1257
1446
  display: "inline-flex",
1258
1447
  gap: "$2",
1259
1448
  zIndex: 1,
1260
- size: "100%",
1261
- visibility: controlsVisible ? `` : `hidden`,
1262
- opacity: controlsVisible ? `1` : "0"
1449
+ size: "100%"
1263
1450
  }
1264
1451
  },
1265
- !showLoader && ((_b = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _b.playlist_type) === HLSPlaylistType.DVR && /* @__PURE__ */ React14.createElement(React14.Fragment, null, /* @__PURE__ */ React14.createElement(
1266
- HMSVideoPlayer.Seeker,
1267
- {
1268
- title: "backward",
1269
- css: {
1270
- visibility: isSeekEnabled ? `` : `hidden`,
1271
- opacity: isSeekEnabled ? `1` : "0"
1272
- }
1273
- },
1274
- /* @__PURE__ */ React14.createElement(BackwardArrowIcon, { width: 32, height: 32 })
1275
- ), /* @__PURE__ */ React14.createElement(
1276
- Box,
1452
+ !showLoader && ((_b = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _b.playlist_type) === HLSPlaylistType.DVR && /* @__PURE__ */ React15.createElement(
1453
+ HMSVideoPlayer.PlayPauseSeekControls.Overlay,
1277
1454
  {
1278
- css: {
1279
- bg: "rgba(0, 0, 0, 0.6)",
1280
- r: "$round"
1281
- }
1282
- },
1283
- /* @__PURE__ */ React14.createElement(HMSVideoPlayer.PlayPauseButton, { isPaused, width: 48, height: 48 })
1284
- ), /* @__PURE__ */ React14.createElement(
1285
- HMSVideoPlayer.Seeker,
1286
- {
1287
- title: "forward",
1288
- css: {
1289
- visibility: isSeekEnabled ? `` : `hidden`,
1290
- opacity: isSeekEnabled ? `1` : "0"
1291
- }
1292
- },
1293
- /* @__PURE__ */ React14.createElement(ForwardArrowIcon, { width: 32, height: 32 })
1294
- ))
1295
- ), /* @__PURE__ */ React14.createElement(
1455
+ isPaused,
1456
+ showControls: controlsVisible,
1457
+ hoverControlsVisible
1458
+ }
1459
+ )
1460
+ ), isMobile || isLandscape ? /* @__PURE__ */ React15.createElement(React15.Fragment, null, !showLoader && ((_c = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _c.playlist_type) === HLSPlaylistType.DVR && /* @__PURE__ */ React15.createElement(
1461
+ HMSVideoPlayer.PlayPauseSeekControls.Overlay,
1462
+ {
1463
+ isPaused,
1464
+ showControls: controlsVisible,
1465
+ hoverControlsVisible
1466
+ }
1467
+ ), /* @__PURE__ */ React15.createElement(
1296
1468
  Flex,
1297
1469
  {
1298
1470
  ref: controlsRef,
@@ -1310,14 +1482,24 @@ var HLSView = () => {
1310
1482
  opacity: controlsVisible ? `1` : "0"
1311
1483
  }
1312
1484
  },
1313
- /* @__PURE__ */ React14.createElement(
1485
+ /* @__PURE__ */ React15.createElement(
1314
1486
  HMSVideoPlayer.Controls.Root,
1315
1487
  {
1316
1488
  css: {
1317
1489
  p: "$4 $8"
1318
1490
  }
1319
1491
  },
1320
- /* @__PURE__ */ React14.createElement(HMSVideoPlayer.Controls.Right, null, isLandscape && /* @__PURE__ */ React14.createElement(ChatToggle, null), hasCaptions && !isHlsAutoplayBlocked && /* @__PURE__ */ React14.createElement(HLSCaptionSelector, { isEnabled: isCaptionEnabled }), hlsViewRef.current && availableLayers.length > 0 && !isHlsAutoplayBlocked ? /* @__PURE__ */ React14.createElement(
1492
+ /* @__PURE__ */ React15.createElement(HMSVideoPlayer.Controls.Right, null, (isLandscape || isMobile && isFullScreen) && showChat && /* @__PURE__ */ React15.createElement(
1493
+ ChatToggle,
1494
+ {
1495
+ onClick: () => {
1496
+ if (isFullScreen) {
1497
+ toggle();
1498
+ }
1499
+ toggleChat();
1500
+ }
1501
+ }
1502
+ ), hasCaptions && !isHlsAutoplayBlocked && /* @__PURE__ */ React15.createElement(HLSCaptionSelector, { isEnabled: isCaptionEnabled }), hlsViewRef.current && availableLayers.length > 0 && !isHlsAutoplayBlocked ? /* @__PURE__ */ React15.createElement(
1321
1503
  HLSQualitySelector,
1322
1504
  {
1323
1505
  layers: availableLayers,
@@ -1328,9 +1510,9 @@ var HLSView = () => {
1328
1510
  isAuto: isUserSelectedAuto,
1329
1511
  containerRef: hlsViewRef.current
1330
1512
  }
1331
- ) : null, /* @__PURE__ */ React14.createElement(HLSAutoplayBlockedPrompt, { open: isHlsAutoplayBlocked, unblockAutoPlay }))
1513
+ ) : null, /* @__PURE__ */ React15.createElement(HLSAutoplayBlockedPrompt, { open: isHlsAutoplayBlocked, unblockAutoPlay }))
1332
1514
  )
1333
- )) : null, controlsVisible && /* @__PURE__ */ React14.createElement(
1515
+ )) : null, controlsVisible && /* @__PURE__ */ React15.createElement(
1334
1516
  Flex,
1335
1517
  {
1336
1518
  ref: controlsRef,
@@ -1339,7 +1521,7 @@ var HLSView = () => {
1339
1521
  align: "start",
1340
1522
  css: {
1341
1523
  position: "absolute",
1342
- bottom: isFullScreen && ((_c = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _c.playlist_type) === HLSPlaylistType.DVR ? "$8" : "0",
1524
+ bottom: isFullScreen && ((_d = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _d.playlist_type) === HLSPlaylistType.DVR ? "$8" : "0",
1343
1525
  left: "0",
1344
1526
  zIndex: 1,
1345
1527
  background: isMobile || isLandscape ? "" : `linear-gradient(180deg, ${theme.colors.background_dim.value}00 29.46%, ${theme.colors.background_dim.value}A3 100%);`,
@@ -1349,44 +1531,27 @@ var HLSView = () => {
1349
1531
  transition: "visibility 0s 0.5s, opacity 0.5s linear"
1350
1532
  }
1351
1533
  },
1352
- ((_d = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _d.playlist_type) === HLSPlaylistType.DVR ? /* @__PURE__ */ React14.createElement(HMSVideoPlayer.Progress, { seekProgress, setSeekProgress }) : null,
1353
- /* @__PURE__ */ React14.createElement(
1534
+ ((_e = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _e.playlist_type) === HLSPlaylistType.DVR ? /* @__PURE__ */ React15.createElement(HMSVideoPlayer.Progress, { seekProgress, setSeekProgress }) : null,
1535
+ /* @__PURE__ */ React15.createElement(
1354
1536
  HMSVideoPlayer.Controls.Root,
1355
1537
  {
1356
1538
  css: {
1357
1539
  p: "$4 $8"
1358
1540
  }
1359
1541
  },
1360
- /* @__PURE__ */ React14.createElement(HMSVideoPlayer.Controls.Left, null, !(isMobile || isLandscape) && /* @__PURE__ */ React14.createElement(React14.Fragment, null, ((_e = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _e.playlist_type) === HLSPlaylistType.DVR ? /* @__PURE__ */ React14.createElement(React14.Fragment, null, /* @__PURE__ */ React14.createElement(
1361
- HMSVideoPlayer.Seeker,
1362
- {
1363
- onClick: () => {
1364
- onSeekTo(-10);
1365
- },
1366
- title: "backward"
1367
- },
1368
- /* @__PURE__ */ React14.createElement(BackwardArrowIcon, { width: 20, height: 20 })
1369
- ), /* @__PURE__ */ React14.createElement(HMSVideoPlayer.PlayPauseButton, { isPaused }), /* @__PURE__ */ React14.createElement(
1370
- HMSVideoPlayer.Seeker,
1371
- {
1372
- onClick: () => {
1373
- onSeekTo(10);
1374
- },
1375
- title: "forward"
1376
- },
1377
- /* @__PURE__ */ React14.createElement(ForwardArrowIcon, { width: 20, height: 20 })
1378
- ), !isVideoLive ? /* @__PURE__ */ React14.createElement(HMSVideoPlayer.Duration, null) : null) : null, /* @__PURE__ */ React14.createElement(HMSVideoPlayer.Volume, null)), /* @__PURE__ */ React14.createElement(
1542
+ /* @__PURE__ */ React15.createElement(HMSVideoPlayer.Controls.Left, null, !(isMobile || isLandscape) && /* @__PURE__ */ React15.createElement(React15.Fragment, null, ((_f = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _f.playlist_type) === HLSPlaylistType.DVR ? /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(HMSVideoPlayer.PlayPauseSeekControls.Button, { isPaused, onSeekTo }), !isVideoLive ? /* @__PURE__ */ React15.createElement(HMSVideoPlayer.Duration, null) : null) : null, /* @__PURE__ */ React15.createElement(HMSVideoPlayer.Volume, null)), /* @__PURE__ */ React15.createElement(
1379
1543
  IconButton,
1380
1544
  {
1381
1545
  css: { px: "$2" },
1382
- onClick: () => __async(void 0, null, function* () {
1546
+ onClick: (e) => __async(void 0, null, function* () {
1547
+ e.stopPropagation();
1383
1548
  yield hlsPlayer == null ? void 0 : hlsPlayer.seekToLivePosition();
1384
1549
  setIsVideoLive(true);
1385
1550
  }),
1386
1551
  key: "jump-to-live_btn",
1387
1552
  "data-testid": "jump-to-live_btn"
1388
1553
  },
1389
- /* @__PURE__ */ React14.createElement(Tooltip, { title: isVideoLive ? "Live" : "Go to Live", side: "top" }, /* @__PURE__ */ React14.createElement(Flex, { justify: "center", gap: 2, align: "center" }, /* @__PURE__ */ React14.createElement(
1554
+ /* @__PURE__ */ React15.createElement(Tooltip, { title: isVideoLive ? "Live" : "Go to Live", side: "top" }, /* @__PURE__ */ React15.createElement(Flex, { justify: "center", gap: 2, align: "center" }, /* @__PURE__ */ React15.createElement(
1390
1555
  Box,
1391
1556
  {
1392
1557
  css: {
@@ -1396,7 +1561,7 @@ var HLSView = () => {
1396
1561
  r: "$1"
1397
1562
  }
1398
1563
  }
1399
- ), /* @__PURE__ */ React14.createElement(
1564
+ ), /* @__PURE__ */ React15.createElement(
1400
1565
  Text,
1401
1566
  {
1402
1567
  variant: "$body1",
@@ -1407,8 +1572,8 @@ var HLSView = () => {
1407
1572
  },
1408
1573
  isVideoLive ? "LIVE" : "GO LIVE"
1409
1574
  )))
1410
- ), (isMobile || isLandscape) && !isVideoLive && ((_f = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _f.playlist_type) === HLSPlaylistType.DVR ? /* @__PURE__ */ React14.createElement(HMSVideoPlayer.Duration, null) : null),
1411
- /* @__PURE__ */ React14.createElement(HMSVideoPlayer.Controls.Right, null, hasCaptions && !(isMobile || isLandscape) && /* @__PURE__ */ React14.createElement(HLSCaptionSelector, { isEnabled: isCaptionEnabled }), availableLayers.length > 0 && !(isMobile || isLandscape) ? /* @__PURE__ */ React14.createElement(
1575
+ ), (isMobile || isLandscape) && !isVideoLive && ((_g = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _g.playlist_type) === HLSPlaylistType.DVR ? /* @__PURE__ */ React15.createElement(HMSVideoPlayer.Duration, null) : null),
1576
+ /* @__PURE__ */ React15.createElement(HMSVideoPlayer.Controls.Right, null, hasCaptions && !(isMobile || isLandscape) && /* @__PURE__ */ React15.createElement(HLSCaptionSelector, { isEnabled: isCaptionEnabled }), availableLayers.length > 0 && !(isMobile || isLandscape) ? /* @__PURE__ */ React15.createElement(
1412
1577
  HLSQualitySelector,
1413
1578
  {
1414
1579
  layers: availableLayers,
@@ -1418,17 +1583,17 @@ var HLSView = () => {
1418
1583
  onQualityChange: handleQuality,
1419
1584
  isAuto: isUserSelectedAuto
1420
1585
  }
1421
- ) : null, isFullScreenSupported ? /* @__PURE__ */ React14.createElement(FullScreenButton, { isFullScreen, onToggle: toggle }) : null)
1586
+ ) : null, isFullScreenSupported ? /* @__PURE__ */ React15.createElement(FullScreenButton, { isFullScreen, onToggle: toggle }) : null)
1422
1587
  )
1423
1588
  ))
1424
1589
  )
1425
1590
  )),
1426
- /* @__PURE__ */ React14.createElement(ToggleChat, null),
1427
- isMobile && !isFullScreen && /* @__PURE__ */ React14.createElement(HLSViewTitle, null)
1591
+ /* @__PURE__ */ React15.createElement(ToggleChat, { isFullScreen }),
1592
+ isMobile && !isFullScreen && /* @__PURE__ */ React15.createElement(HLSViewTitle, null)
1428
1593
  );
1429
1594
  };
1430
1595
  var HLSView_default = HLSView;
1431
1596
  export {
1432
1597
  HLSView_default as default
1433
1598
  };
1434
- //# sourceMappingURL=HLSView-GI5NXBYN.js.map
1599
+ //# sourceMappingURL=HLSView-BCIIVR2T.js.map