@100mslive/roomkit-react 0.2.8-alpha.7 → 0.2.8-alpha.9

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 (54) hide show
  1. package/dist/{HLSView-MYKM5AXS.js → HLSView-TOMPA4E4.js} +191 -188
  2. package/dist/HLSView-TOMPA4E4.js.map +7 -0
  3. package/dist/Prebuilt/components/HMSVideo/HLSQualitySelector.d.ts +3 -2
  4. package/dist/Prebuilt/components/HMSVideo/VideoProgress.d.ts +1 -3
  5. package/dist/Prebuilt/components/HMSVideo/index.d.ts +1 -3
  6. package/dist/Prebuilt/components/HMSVideo/utils.d.ts +0 -1
  7. package/dist/Prebuilt/components/Leave/DesktopLeaveRoom.d.ts +2 -1
  8. package/dist/Prebuilt/components/Leave/LeaveRoom.d.ts +2 -1
  9. package/dist/Prebuilt/components/Leave/MwebLeaveRoom.d.ts +2 -1
  10. package/dist/Prebuilt/components/RaiseHand.d.ts +4 -1
  11. package/dist/Sheet/Sheet.d.ts +1 -0
  12. package/dist/{chunk-DRBTAFKN.js → chunk-FUDX3LDB.js} +820 -723
  13. package/dist/chunk-FUDX3LDB.js.map +7 -0
  14. package/dist/index.cjs.js +1324 -1220
  15. package/dist/index.cjs.js.map +4 -4
  16. package/dist/index.js +1 -1
  17. package/dist/meta.cjs.json +274 -209
  18. package/dist/meta.esbuild.json +283 -216
  19. package/package.json +6 -6
  20. package/src/Button/Button.tsx +4 -4
  21. package/src/Fieldset/Fieldset.tsx +1 -1
  22. package/src/Input/PasswordInput.stories.tsx +1 -1
  23. package/src/Pagination/StyledPagination.stories.tsx +2 -2
  24. package/src/Prebuilt/IconButton.tsx +1 -1
  25. package/src/Prebuilt/components/Chat/Chat.tsx +41 -1
  26. package/src/Prebuilt/components/Chat/ChatFooter.tsx +19 -15
  27. package/src/Prebuilt/components/EmojiReaction.jsx +32 -22
  28. package/src/Prebuilt/components/Footer/RoleOptions.tsx +125 -126
  29. package/src/Prebuilt/components/HMSVideo/HLSQualitySelector.tsx +85 -78
  30. package/src/Prebuilt/components/HMSVideo/HMSVideo.jsx +3 -4
  31. package/src/Prebuilt/components/HMSVideo/MwebHLSViewTitle.tsx +49 -56
  32. package/src/Prebuilt/components/HMSVideo/VideoProgress.tsx +6 -6
  33. package/src/Prebuilt/components/HMSVideo/VideoTime.tsx +2 -1
  34. package/src/Prebuilt/components/HMSVideo/utils.ts +0 -8
  35. package/src/Prebuilt/components/IconButtonWithOptions/IconButtonWithOptions.tsx +1 -1
  36. package/src/Prebuilt/components/Leave/DesktopLeaveRoom.tsx +50 -46
  37. package/src/Prebuilt/components/Leave/LeaveRoom.tsx +10 -5
  38. package/src/Prebuilt/components/Leave/MwebLeaveRoom.tsx +12 -6
  39. package/src/Prebuilt/components/MoreSettings/SplitComponents/MwebOptions.tsx +5 -2
  40. package/src/Prebuilt/components/Notifications/HandRaisedNotifications.tsx +4 -1
  41. package/src/Prebuilt/components/Polls/Voting/Voting.tsx +3 -2
  42. package/src/Prebuilt/components/Polls/common/OptionInputWithDelete.tsx +1 -1
  43. package/src/Prebuilt/components/Polls/common/utils.ts +2 -2
  44. package/src/Prebuilt/components/RaiseHand.tsx +8 -2
  45. package/src/Prebuilt/components/RoomDetails/RoomDetailsPane.tsx +41 -14
  46. package/src/Prebuilt/components/pdfAnnotator/shareScreenOptions.jsx +2 -2
  47. package/src/Prebuilt/components/pdfAnnotator/uploadedFile.jsx +1 -1
  48. package/src/Prebuilt/layouts/HLSView.jsx +58 -47
  49. package/src/Prebuilt/layouts/SidePane.tsx +1 -2
  50. package/src/Prebuilt/layouts/VideoStreamingSection.tsx +3 -2
  51. package/src/Prebuilt/primitives/DialogContent.jsx +1 -1
  52. package/src/Sheet/Sheet.tsx +3 -3
  53. package/dist/HLSView-MYKM5AXS.js.map +0 -7
  54. package/dist/chunk-DRBTAFKN.js.map +0 -7
@@ -14,6 +14,7 @@ import {
14
14
  LeaveRoom,
15
15
  Loading,
16
16
  Logo,
17
+ RoomDetailsRow,
17
18
  SIDE_PANE_OPTIONS,
18
19
  Sheet,
19
20
  Slider,
@@ -24,20 +25,21 @@ import {
24
25
  __objRest,
25
26
  __spreadValues,
26
27
  config,
27
- getFormattedCount,
28
28
  init_define_process_env,
29
29
  styled,
30
30
  theme,
31
31
  useIsLandscape,
32
+ useIsSidepaneTypeOpen,
32
33
  usePollViewToggle,
33
34
  useRoomLayoutConferencingScreen,
35
+ useRoomLayoutHeader,
34
36
  useSidepaneToggle,
35
37
  useTheme
36
- } from "./chunk-DRBTAFKN.js";
38
+ } from "./chunk-FUDX3LDB.js";
37
39
 
38
40
  // src/Prebuilt/layouts/HLSView.jsx
39
41
  init_define_process_env();
40
- import React14, { useCallback as useCallback2, useEffect as useEffect4, useRef as useRef2, useState as useState5 } from "react";
42
+ import React14, { useCallback, useEffect as useEffect3, useRef, useState as useState4 } from "react";
41
43
  import { useFullscreen, useMedia as useMedia4, usePrevious, useToggle } from "react-use";
42
44
  import { HLSPlaybackState, HMSHLSPlayer, HMSHLSPlayerEvents as HMSHLSPlayerEvents2 } from "@100mslive/hls-player";
43
45
  import screenfull from "screenfull";
@@ -45,12 +47,12 @@ import {
45
47
  HLSPlaylistType,
46
48
  HMSNotificationTypes,
47
49
  selectAppData,
48
- selectHLSState as selectHLSState2,
50
+ selectHLSState,
49
51
  selectPeerNameByID,
50
52
  selectPollByID,
51
53
  useHMSActions,
52
54
  useHMSNotifications,
53
- useHMSStore as useHMSStore2,
55
+ useHMSStore,
54
56
  useHMSVanillaStore
55
57
  } from "@100mslive/react-sdk";
56
58
  import { BackwardArrowIcon, ColoredHandIcon, ForwardArrowIcon, GoLiveIcon } from "@100mslive/react-icons";
@@ -178,13 +180,12 @@ var HMSVideo = forwardRef((_a, videoRef) => {
178
180
  position: "relative",
179
181
  "& video::cue": {
180
182
  color: "white",
181
- // textShadow: '0px 0px 4px #000',
182
183
  whiteSpace: "pre-line",
183
- fontSize: "$lg",
184
+ fontSize: "$sm",
184
185
  fontStyle: "normal",
185
- fontWeight: "$semiBold",
186
+ fontWeight: "$regular",
186
187
  lineHeight: "$sm",
187
- letterSpacing: "0.5px"
188
+ letterSpacing: "0.25px"
188
189
  },
189
190
  "& video::-webkit-media-text-track-display": {
190
191
  padding: "0 $4",
@@ -282,16 +283,9 @@ function getDurationFromSeconds2(timeInSeconds) {
282
283
  }
283
284
  return videoTimeStr;
284
285
  }
285
- function getTime(timeInMilles) {
286
- const timeInSeconds = Math.floor(timeInMilles / 1e3);
287
- const hours = Math.floor(timeInSeconds / 3600);
288
- const minutes = Math.floor(timeInSeconds % 3600 / 60);
289
- const hour = hours !== 0 ? `${hours < 10 ? "0" : ""}${hours}` : "";
290
- return hour + `${hour ? "h:" : ""}` + minutes + "m";
291
- }
292
286
 
293
287
  // src/Prebuilt/components/HMSVideo/VideoProgress.tsx
294
- var VideoProgress = ({ isDvr = true }) => {
288
+ var VideoProgress = () => {
295
289
  const { hlsPlayer: hlsPlayer2 } = useHMSPlayerContext();
296
290
  const [videoProgress, setVideoProgress] = useState(0);
297
291
  const [bufferProgress, setBufferProgress] = useState(0);
@@ -304,14 +298,15 @@ var VideoProgress = ({ isDvr = true }) => {
304
298
  return;
305
299
  }
306
300
  const timeupdateHandler = () => {
307
- var _a;
301
+ var _a, _b;
308
302
  if (!videoEl) {
309
303
  return;
310
304
  }
311
- const videoProgress2 = Math.floor(getPercentage(videoEl.currentTime, videoEl.duration));
305
+ const duration = isFinite(videoEl.duration) ? videoEl.duration : ((_a = videoEl.seekable) == null ? void 0 : _a.end(0)) || 0;
306
+ const videoProgress2 = Math.floor(getPercentage(videoEl.currentTime, duration));
312
307
  let bufferProgress2 = 0;
313
308
  if (videoEl.buffered.length > 0) {
314
- bufferProgress2 = Math.floor(getPercentage((_a = videoEl.buffered) == null ? void 0 : _a.end(0), videoEl.duration));
309
+ bufferProgress2 = Math.floor(getPercentage((_b = videoEl.buffered) == null ? void 0 : _b.end(0), duration));
315
310
  }
316
311
  setVideoProgress(isNaN(videoProgress2) ? 0 : videoProgress2);
317
312
  setBufferProgress(isNaN(bufferProgress2) ? 0 : bufferProgress2);
@@ -332,7 +327,7 @@ var VideoProgress = ({ isDvr = true }) => {
332
327
  if (!videoEl) {
333
328
  return null;
334
329
  }
335
- return /* @__PURE__ */ React6.createElement(Flex, { align: "center", css: { cursor: "pointer", h: "$2", alignSelf: "stretch", pointerEvents: isDvr ? "" : "none" } }, /* @__PURE__ */ React6.createElement(
330
+ return /* @__PURE__ */ React6.createElement(Flex, { align: "center", css: { cursor: "pointer", h: "$2", alignSelf: "stretch" } }, /* @__PURE__ */ React6.createElement(
336
331
  Slider,
337
332
  {
338
333
  id: "video-actual-rest",
@@ -340,8 +335,7 @@ var VideoProgress = ({ isDvr = true }) => {
340
335
  cursor: "pointer",
341
336
  h: "$2",
342
337
  zIndex: 1,
343
- transition: `all .2s ease .5s`,
344
- pointerEvents: isDvr ? "" : "none"
338
+ transition: `all .2s ease .5s`
345
339
  },
346
340
  min: 0,
347
341
  max: 100,
@@ -349,7 +343,7 @@ var VideoProgress = ({ isDvr = true }) => {
349
343
  value: [videoProgress],
350
344
  showTooltip: false,
351
345
  onValueChange: onProgress,
352
- thumbStyles: { w: "$6", h: "$6", display: isDvr ? "" : "none" }
346
+ thumbStyles: { w: "$6", h: "$6" }
353
347
  }
354
348
  ), /* @__PURE__ */ React6.createElement(
355
349
  Box,
@@ -378,7 +372,8 @@ var VideoTime = () => {
378
372
  const timeupdateHandler = (currentTime) => {
379
373
  const videoEl = hlsPlayer2 == null ? void 0 : hlsPlayer2.getVideoElement();
380
374
  if (videoEl) {
381
- setVideoTime(getDurationFromSeconds2(videoEl.duration - currentTime));
375
+ const duration = isFinite(videoEl.duration) ? videoEl.duration : videoEl.seekable.end(0) || 0;
376
+ setVideoTime(getDurationFromSeconds2(duration - currentTime));
382
377
  } else {
383
378
  setVideoTime(getDurationFromSeconds2(currentTime));
384
379
  }
@@ -584,10 +579,14 @@ function HLSQualitySelector({
584
579
  layers,
585
580
  onQualityChange,
586
581
  selection,
587
- isAuto
582
+ isAuto,
583
+ containerRef
588
584
  }) {
589
585
  const isMobile = useMedia3(config.media.md);
590
586
  const isLandscape = useIsLandscape();
587
+ if (layers.length === 0) {
588
+ return null;
589
+ }
591
590
  if (isMobile || isLandscape) {
592
591
  return /* @__PURE__ */ React12.createElement(Sheet.Root, { open, onOpenChange }, /* @__PURE__ */ React12.createElement(Sheet.Trigger, { asChild: true, "data-testid": "quality_selector" }, /* @__PURE__ */ React12.createElement(
593
592
  Flex,
@@ -600,26 +599,57 @@ function HLSQualitySelector({
600
599
  }
601
600
  },
602
601
  /* @__PURE__ */ React12.createElement(SettingsIcon, null)
603
- )), layers.length > 0 && /* @__PURE__ */ React12.createElement(Sheet.Content, { css: { bg: "$surface_default", pb: "$1" }, onClick: () => onOpenChange(false) }, /* @__PURE__ */ React12.createElement(
604
- Sheet.Title,
602
+ )), /* @__PURE__ */ React12.createElement(
603
+ Sheet.Content,
605
604
  {
606
- css: {
607
- display: "flex",
608
- color: "$on_surface_high",
609
- w: "100%",
610
- justifyContent: "space-between",
611
- mt: "$8",
612
- fontSize: "$md",
613
- px: "$10",
614
- pb: "$8",
615
- borderBottom: "1px solid $border_bright",
616
- alignItems: "center"
617
- }
605
+ container: containerRef,
606
+ css: { bg: "$surface_default", pb: "$1" },
607
+ onClick: () => onOpenChange(false)
618
608
  },
619
- "Quality",
620
- /* @__PURE__ */ React12.createElement(Sheet.Close, { css: { color: "$on_surface_high" }, onClick: () => onOpenChange(false) }, /* @__PURE__ */ React12.createElement(CrossIcon2, null))
621
- ), layers.map((layer) => {
622
- return /* @__PURE__ */ React12.createElement(
609
+ /* @__PURE__ */ React12.createElement(
610
+ Sheet.Title,
611
+ {
612
+ css: {
613
+ display: "flex",
614
+ color: "$on_surface_high",
615
+ w: "100%",
616
+ justifyContent: "space-between",
617
+ mt: "$8",
618
+ fontSize: "$md",
619
+ px: "$10",
620
+ pb: "$8",
621
+ borderBottom: "1px solid $border_bright",
622
+ alignItems: "center"
623
+ }
624
+ },
625
+ "Quality",
626
+ /* @__PURE__ */ React12.createElement(Sheet.Close, { css: { color: "$on_surface_high" }, onClick: () => onOpenChange(false) }, /* @__PURE__ */ React12.createElement(CrossIcon2, null))
627
+ ),
628
+ layers.map((layer) => {
629
+ return /* @__PURE__ */ React12.createElement(
630
+ Flex,
631
+ {
632
+ align: "center",
633
+ css: {
634
+ w: "100%",
635
+ bg: "$surface_default",
636
+ "&:hover": {
637
+ bg: "$surface_brighter"
638
+ },
639
+ cursor: "pointer",
640
+ gap: "$4",
641
+ py: "$8",
642
+ px: "$10"
643
+ },
644
+ key: layer.width,
645
+ onClick: () => onQualityChange(layer)
646
+ },
647
+ /* @__PURE__ */ React12.createElement(Text, { variant: "caption", css: { fontWeight: "$semiBold" } }, getQualityText(layer)),
648
+ /* @__PURE__ */ React12.createElement(Text, { variant: "caption", css: { flex: "1 1 0", c: "$on_surface_low", pl: "$2" } }, getBitrateText(layer)),
649
+ !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" })
650
+ );
651
+ }),
652
+ /* @__PURE__ */ React12.createElement(
623
653
  Flex,
624
654
  {
625
655
  align: "center",
@@ -634,36 +664,15 @@ function HLSQualitySelector({
634
664
  py: "$8",
635
665
  px: "$10"
636
666
  },
637
- key: layer.width,
638
- onClick: () => onQualityChange(layer)
667
+ key: "auto",
668
+ onClick: () => onQualityChange({ height: "auto" })
639
669
  },
640
- /* @__PURE__ */ React12.createElement(Text, { variant: "caption", css: { fontWeight: "$semiBold" } }, getQualityText(layer)),
641
- /* @__PURE__ */ React12.createElement(Text, { variant: "caption", css: { flex: "1 1 0", c: "$on_surface_low", pl: "$2" } }, getBitrateText(layer)),
642
- !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" })
643
- );
644
- }), /* @__PURE__ */ React12.createElement(
645
- Flex,
646
- {
647
- align: "center",
648
- css: {
649
- w: "100%",
650
- bg: "$surface_default",
651
- "&:hover": {
652
- bg: "$surface_brighter"
653
- },
654
- cursor: "pointer",
655
- gap: "$4",
656
- py: "$8",
657
- px: "$10"
658
- },
659
- key: "auto",
660
- onClick: () => onQualityChange({ height: "auto" })
661
- },
662
- /* @__PURE__ */ React12.createElement(Text, { variant: "caption", css: { fontWeight: "$semiBold", flex: "1 1 0" } }, "Auto"),
663
- isAuto && /* @__PURE__ */ React12.createElement(CheckIcon, { width: "16px", height: "16px" })
664
- )));
670
+ /* @__PURE__ */ React12.createElement(Text, { variant: "caption", css: { fontWeight: "$semiBold", flex: "1 1 0" } }, "Auto"),
671
+ isAuto && /* @__PURE__ */ React12.createElement(CheckIcon, { width: "16px", height: "16px" })
672
+ )
673
+ ));
665
674
  }
666
- return /* @__PURE__ */ React12.createElement(Dropdown.Root, { open, onOpenChange: (value) => onOpenChange(value) }, /* @__PURE__ */ React12.createElement(Dropdown.Trigger, { asChild: true, "data-testid": "quality_selector" }, /* @__PURE__ */ React12.createElement(
675
+ 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(
667
676
  Flex,
668
677
  {
669
678
  css: {
@@ -710,7 +719,7 @@ function HLSQualitySelector({
710
719
  selection && Math.min(selection.width || 0, selection.height || 0),
711
720
  "p"
712
721
  )))
713
- )), layers.length > 0 && /* @__PURE__ */ React12.createElement(
722
+ )), /* @__PURE__ */ React12.createElement(Dropdown.Portal, { container: containerRef }, /* @__PURE__ */ React12.createElement(
714
723
  Dropdown.Content,
715
724
  {
716
725
  sideOffset: 5,
@@ -764,48 +773,50 @@ function HLSQualitySelector({
764
773
  /* @__PURE__ */ React12.createElement(Text, { variant: "caption", css: { fontWeight: "$semiBold", flex: "1 1 0" } }, "Auto"),
765
774
  isAuto && /* @__PURE__ */ React12.createElement(CheckIcon, { width: "16px", height: "16px" })
766
775
  )
767
- ));
776
+ )));
768
777
  }
769
778
  var getQualityText = (layer) => `${Math.min(layer.height || 0, layer.width || 0)}p `;
770
779
  var getBitrateText = (layer) => `(${(Number(layer.bitrate / 1e3) / 1e3).toFixed(2)} Mbps)`;
771
780
 
772
781
  // src/Prebuilt/components/HMSVideo/MwebHLSViewTitle.tsx
773
782
  init_define_process_env();
774
- import React13, { useCallback, useEffect as useEffect3, useRef, useState as useState4 } from "react";
775
- import { selectHLSState, selectPeerCount, useHMSStore } from "@100mslive/react-sdk";
783
+ import React13 from "react";
784
+ import { ChevronDownIcon } from "@100mslive/react-icons";
776
785
  var HLSViewTitle = () => {
777
- const peerCount = useHMSStore(selectPeerCount);
778
- const hlsState = useHMSStore(selectHLSState);
779
- const intervalRef = useRef(null);
780
- const { screenType } = useRoomLayoutConferencingScreen();
781
- const [liveTime, setLiveTime] = useState4(0);
782
- const startTimer = useCallback(() => {
783
- intervalRef.current = setInterval(() => {
784
- var _a;
785
- const timeStamp = (_a = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _a[screenType === "hls_live_streaming" ? "startedAt" : "initialisedAt"];
786
- if ((hlsState == null ? void 0 : hlsState.running) && timeStamp) {
787
- setLiveTime(Date.now() - timeStamp.getTime());
788
- }
789
- }, 6e4);
790
- }, [hlsState == null ? void 0 : hlsState.running, hlsState == null ? void 0 : hlsState.variants, screenType]);
791
- useEffect3(() => {
792
- var _a;
793
- if (hlsState == null ? void 0 : hlsState.running) {
794
- startTimer();
795
- const timeStamp = (_a = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _a[screenType === "hls_live_streaming" ? "startedAt" : "initialisedAt"];
796
- if ((hlsState == null ? void 0 : hlsState.running) && timeStamp) {
797
- setLiveTime(Date.now() - timeStamp.getTime());
798
- }
799
- }
800
- if (!(hlsState == null ? void 0 : hlsState.running) && intervalRef.current) {
801
- clearInterval(intervalRef.current);
802
- }
803
- return () => {
804
- if (intervalRef.current) {
805
- clearInterval(intervalRef.current);
806
- }
807
- };
808
- }, [hlsState == null ? void 0 : hlsState.running, hlsState == null ? void 0 : hlsState.variants, screenType, startTimer]);
786
+ const { title, details } = useRoomLayoutHeader();
787
+ const toggleDetailsPane = useSidepaneToggle(SIDE_PANE_OPTIONS.ROOM_DETAILS);
788
+ const isDetailSidepaneOpen = useIsSidepaneTypeOpen(SIDE_PANE_OPTIONS.ROOM_DETAILS);
789
+ if (isDetailSidepaneOpen) {
790
+ return /* @__PURE__ */ React13.createElement(
791
+ Flex,
792
+ {
793
+ gap: "4",
794
+ align: "center",
795
+ justify: "between",
796
+ css: {
797
+ position: "relative",
798
+ h: "fit-content",
799
+ w: "100%",
800
+ borderBottom: "1px solid $border_bright",
801
+ p: "$8",
802
+ backgroundColor: "$surface_dim"
803
+ }
804
+ },
805
+ /* @__PURE__ */ React13.createElement(Text, { variant: "sub2", css: { fontWeight: "$semiBold" } }, "About Session"),
806
+ /* @__PURE__ */ React13.createElement(
807
+ Flex,
808
+ {
809
+ onClick: toggleDetailsPane,
810
+ css: {
811
+ color: "$on_surface_high",
812
+ cursor: "pointer",
813
+ "&:hover": { opacity: "0.8" }
814
+ }
815
+ },
816
+ /* @__PURE__ */ React13.createElement(ChevronDownIcon, null)
817
+ )
818
+ );
819
+ }
809
820
  return /* @__PURE__ */ React13.createElement(
810
821
  Flex,
811
822
  {
@@ -821,19 +832,7 @@ var HLSViewTitle = () => {
821
832
  }
822
833
  },
823
834
  /* @__PURE__ */ React13.createElement(Logo, null),
824
- /* @__PURE__ */ React13.createElement(Flex, { direction: "column" }, /* @__PURE__ */ React13.createElement(Text, { variant: "sub2", css: { fontWeight: "$semiBold" } }, "Tech Talk"), /* @__PURE__ */ React13.createElement(Flex, { gap: "1" }, /* @__PURE__ */ React13.createElement(Text, { variant: "caption", css: { color: "$on_surface_medium" } }, getFormattedCount(peerCount) + " watching"), /* @__PURE__ */ React13.createElement(
825
- Flex,
826
- {
827
- direction: "column",
828
- css: {
829
- w: "$3",
830
- h: "$3",
831
- backgroundColor: "$on_surface_medium",
832
- borderRadius: "50%",
833
- alignSelf: "center"
834
- }
835
- }
836
- ), /* @__PURE__ */ React13.createElement(Text, { variant: "caption", css: { color: "$on_surface_medium" } }, "Started " + getTime(liveTime) + " ago")))
835
+ /* @__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 }), /* @__PURE__ */ React13.createElement(Text, { variant: "caption", css: { color: "$on_surface_medium" }, onClick: toggleDetailsPane }, "\xA0...more")))
837
836
  );
838
837
  };
839
838
 
@@ -841,36 +840,36 @@ var HLSViewTitle = () => {
841
840
  var hlsPlayer;
842
841
  var toastMap = {};
843
842
  var HLSView = () => {
844
- var _a, _b;
845
- const videoRef = useRef2(null);
846
- const hlsViewRef = useRef2(null);
847
- const hlsState = useHMSStore2(selectHLSState2);
848
- const enablHlsStats = useHMSStore2(selectAppData(APP_DATA.hlsStats));
843
+ var _a, _b, _c, _d, _e, _f;
844
+ const videoRef = useRef(null);
845
+ const hlsViewRef = useRef();
846
+ const hlsState = useHMSStore(selectHLSState);
847
+ const enablHlsStats = useHMSStore(selectAppData(APP_DATA.hlsStats));
849
848
  const { elements, screenType } = useRoomLayoutConferencingScreen();
850
849
  const notification = useHMSNotifications(HMSNotificationTypes.POLL_STOPPED);
851
850
  const hmsActions = useHMSActions();
852
851
  const { themeType } = useTheme();
853
- const [streamEnded, setStreamEnded] = useState5(false);
854
- let [hlsStatsState, setHlsStatsState] = useState5(null);
852
+ const [streamEnded, setStreamEnded] = useState4(false);
853
+ let [hlsStatsState, setHlsStatsState] = useState4(null);
855
854
  const hlsUrl = (_a = hlsState.variants[0]) == null ? void 0 : _a.url;
856
- const [availableLayers, setAvailableLayers] = useState5([]);
857
- const [isVideoLive, setIsVideoLive] = useState5(true);
858
- const [isCaptionEnabled, setIsCaptionEnabled] = useState5(true);
859
- const [hasCaptions, setHasCaptions] = useState5(false);
860
- const [currentSelectedQuality, setCurrentSelectedQuality] = useState5(null);
861
- const [isHlsAutoplayBlocked, setIsHlsAutoplayBlocked] = useState5(false);
862
- const [isSeekEnabled, setIsSeekEnabled] = useState5(false);
863
- const [isPaused, setIsPaused] = useState5(false);
855
+ const [availableLayers, setAvailableLayers] = useState4([]);
856
+ const [isVideoLive, setIsVideoLive] = useState4(true);
857
+ const [isCaptionEnabled, setIsCaptionEnabled] = useState4(true);
858
+ const [hasCaptions, setHasCaptions] = useState4(false);
859
+ const [currentSelectedQuality, setCurrentSelectedQuality] = useState4(null);
860
+ const [isHlsAutoplayBlocked, setIsHlsAutoplayBlocked] = useState4(false);
861
+ const [isSeekEnabled, setIsSeekEnabled] = useState4(false);
862
+ const [isPaused, setIsPaused] = useState4(false);
864
863
  const [show, toggle] = useToggle(false);
865
864
  const lastHlsUrl = usePrevious(hlsUrl);
866
865
  const togglePollView = usePollViewToggle();
867
866
  const vanillaStore = useHMSVanillaStore();
868
- const [controlsVisible, setControlsVisible] = useState5(true);
869
- const [isUserSelectedAuto, setIsUserSelectedAuto] = useState5(true);
870
- const [qualityDropDownOpen, setQualityDropDownOpen] = useState5(false);
871
- const controlsRef = useRef2(null);
872
- const controlsTimerRef = useRef2();
873
- const sidepane = useHMSStore2(selectAppData(APP_DATA.sidePane));
867
+ const [controlsVisible, setControlsVisible] = useState4(true);
868
+ const [isUserSelectedAuto, setIsUserSelectedAuto] = useState4(true);
869
+ const [qualityDropDownOpen, setQualityDropDownOpen] = useState4(false);
870
+ const controlsRef = useRef(null);
871
+ const controlsTimerRef = useRef();
872
+ const sidepane = useHMSStore(selectAppData(APP_DATA.sidePane));
874
873
  const toggleChat = useSidepaneToggle(SIDE_PANE_OPTIONS.CHAT);
875
874
  const showChat = !!(elements == null ? void 0 : elements.chat);
876
875
  const isFullScreenSupported = screenfull.isEnabled;
@@ -879,14 +878,14 @@ var HLSView = () => {
879
878
  const isFullScreen = useFullscreen(hlsViewRef, show, {
880
879
  onClose: () => toggle(false)
881
880
  });
882
- const [showLoader, setShowLoader] = useState5(false);
881
+ const [showLoader, setShowLoader] = useState4(false);
883
882
  const isMwebHLSStream = screenType === "hls_live_streaming" && isMobile;
884
- useEffect4(() => {
883
+ useEffect3(() => {
885
884
  if (sidepane === "" && isMwebHLSStream && showChat) {
886
885
  toggleChat();
887
886
  }
888
887
  }, [sidepane, isMwebHLSStream, toggleChat, showChat]);
889
- useEffect4(() => {
888
+ useEffect3(() => {
890
889
  const videoEl = videoRef.current;
891
890
  const showLoader2 = () => setShowLoader(true);
892
891
  const hideLoader = () => setShowLoader(false);
@@ -897,12 +896,12 @@ var HLSView = () => {
897
896
  videoEl == null ? void 0 : videoEl.removeEventListener("waiting", showLoader2);
898
897
  };
899
898
  }, []);
900
- useEffect4(() => {
899
+ useEffect3(() => {
901
900
  if (streamEnded && lastHlsUrl !== hlsUrl) {
902
901
  setStreamEnded(false);
903
902
  }
904
903
  }, [hlsUrl, streamEnded, lastHlsUrl]);
905
- useEffect4(() => {
904
+ useEffect3(() => {
906
905
  if (!notification)
907
906
  return;
908
907
  const toastID = toastMap == null ? void 0 : toastMap[notification.data.id];
@@ -911,7 +910,7 @@ var HLSView = () => {
911
910
  delete toastMap[notification.data.id];
912
911
  }
913
912
  }, [notification]);
914
- useEffect4(() => {
913
+ useEffect3(() => {
915
914
  const videoElem = videoRef.current;
916
915
  const setStreamEndedCallback = () => {
917
916
  setStreamEnded(true);
@@ -922,7 +921,7 @@ var HLSView = () => {
922
921
  videoElem == null ? void 0 : videoElem.removeEventListener("ended", setStreamEndedCallback);
923
922
  };
924
923
  }, [hlsUrl]);
925
- const handleQuality = useCallback2(
924
+ const handleQuality = useCallback(
926
925
  (quality) => {
927
926
  var _a2;
928
927
  if (hlsPlayer) {
@@ -933,7 +932,7 @@ var HLSView = () => {
933
932
  [availableLayers]
934
933
  //eslint-disable-line
935
934
  );
936
- useEffect4(() => {
935
+ useEffect3(() => {
937
936
  let videoEl = videoRef.current;
938
937
  const manifestLoadedHandler = ({ layers }) => {
939
938
  setAvailableLayers(layers);
@@ -958,25 +957,27 @@ var HLSView = () => {
958
957
  const pollId = parsedPayload.substr(parsedPayload.indexOf(":") + 1);
959
958
  const poll = vanillaStore.getState(selectPollByID(pollId));
960
959
  const pollStartedBy = vanillaStore.getState(selectPeerNameByID(poll.startedBy)) || "Participant";
961
- const toastID = ToastManager.addToast({
962
- title: `${pollStartedBy} started a ${poll.type}: ${poll.title}`,
963
- action: /* @__PURE__ */ React14.createElement(
964
- Button,
965
- {
966
- onClick: () => togglePollView(pollId),
967
- variant: "standard",
968
- css: {
969
- backgroundColor: "$surface_bright",
970
- fontWeight: "$semiBold",
971
- color: "$on_surface_high",
972
- p: "$xs $md"
973
- }
974
- },
975
- poll.type === "quiz" ? "Answer" : "Vote"
976
- ),
977
- duration: Infinity
978
- });
979
- toastMap[pollId] = toastID;
960
+ if (!toastMap[pollId]) {
961
+ const toastID = ToastManager.addToast({
962
+ title: `${pollStartedBy} started a ${poll.type}: ${poll.title}`,
963
+ action: /* @__PURE__ */ React14.createElement(
964
+ Button,
965
+ {
966
+ onClick: () => togglePollView(pollId),
967
+ variant: "standard",
968
+ css: {
969
+ backgroundColor: "$surface_bright",
970
+ fontWeight: "$semiBold",
971
+ color: "$on_surface_high",
972
+ p: "$xs $md"
973
+ }
974
+ },
975
+ poll.type === "quiz" ? "Answer" : "Vote"
976
+ ),
977
+ duration: Infinity
978
+ });
979
+ toastMap[pollId] = toastID;
980
+ }
980
981
  return;
981
982
  }
982
983
  switch (parsedPayload.type) {
@@ -1028,7 +1029,7 @@ var HLSView = () => {
1028
1029
  };
1029
1030
  }
1030
1031
  }, [hlsUrl, togglePollView, vanillaStore]);
1031
- useEffect4(() => {
1032
+ useEffect3(() => {
1032
1033
  const onHLSStats = (state) => setHlsStatsState(state);
1033
1034
  if (enablHlsStats) {
1034
1035
  hlsPlayer == null ? void 0 : hlsPlayer.on(HMSHLSPlayerEvents2.STATS, onHLSStats);
@@ -1050,7 +1051,7 @@ var HLSView = () => {
1050
1051
  const sfnOverlayClose = () => {
1051
1052
  hmsActions.setAppData(APP_DATA.hlsStats, !enablHlsStats);
1052
1053
  };
1053
- useEffect4(() => {
1054
+ useEffect3(() => {
1054
1055
  if (controlsVisible && isFullScreen && !qualityDropDownOpen) {
1055
1056
  if (controlsTimerRef.current) {
1056
1057
  clearTimeout(controlsTimerRef.current);
@@ -1068,13 +1069,14 @@ var HLSView = () => {
1068
1069
  }
1069
1070
  };
1070
1071
  }, [controlsVisible, isFullScreen, qualityDropDownOpen]);
1071
- const onSeekTo = useCallback2((seek) => {
1072
+ const onSeekTo = useCallback((seek) => {
1072
1073
  var _a2;
1073
1074
  hlsPlayer == null ? void 0 : hlsPlayer.seekTo(((_a2 = videoRef.current) == null ? void 0 : _a2.currentTime) + seek);
1074
1075
  }, []);
1075
- const onDoubleClickHandler = useCallback2(
1076
+ const onDoubleClickHandler = useCallback(
1076
1077
  (event) => {
1077
- if (!(isMobile || isLandscape)) {
1078
+ var _a2;
1079
+ if (!(isMobile || isLandscape) || ((_a2 = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _a2.playlist_type) !== HLSPlaylistType.DVR) {
1078
1080
  return;
1079
1081
  }
1080
1082
  const sidePercentage = event.screenX * 100 / event.target.clientWidth;
@@ -1088,9 +1090,9 @@ var HLSView = () => {
1088
1090
  setIsSeekEnabled(false);
1089
1091
  }, 200);
1090
1092
  },
1091
- [isLandscape, isMobile, onSeekTo]
1093
+ [hlsState == null ? void 0 : hlsState.variants, isLandscape, isMobile, onSeekTo]
1092
1094
  );
1093
- const onClickHandler = useCallback2(() => {
1095
+ const onClickHandler = useCallback(() => {
1094
1096
  if (!(isMobile || isLandscape)) {
1095
1097
  return;
1096
1098
  }
@@ -1099,7 +1101,7 @@ var HLSView = () => {
1099
1101
  clearTimeout(controlsTimerRef.current);
1100
1102
  }
1101
1103
  }, [isLandscape, isMobile]);
1102
- const onHoverHandler = useCallback2(
1104
+ const onHoverHandler = useCallback(
1103
1105
  (event) => {
1104
1106
  event.preventDefault();
1105
1107
  if (isMobile || isLandscape) {
@@ -1168,7 +1170,7 @@ var HLSView = () => {
1168
1170
  onDoubleClickHandler(e);
1169
1171
  }
1170
1172
  },
1171
- /* @__PURE__ */ React14.createElement(React14.Fragment, null, isMobile || isLandscape ? /* @__PURE__ */ React14.createElement(React14.Fragment, null, !showLoader && /* @__PURE__ */ React14.createElement(
1173
+ /* @__PURE__ */ React14.createElement(React14.Fragment, null, isMobile || isLandscape ? /* @__PURE__ */ React14.createElement(React14.Fragment, null, !showLoader && ((_b = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _b.playlist_type) === HLSPlaylistType.DVR && /* @__PURE__ */ React14.createElement(
1172
1174
  Flex,
1173
1175
  {
1174
1176
  align: "center",
@@ -1240,8 +1242,8 @@ var HLSView = () => {
1240
1242
  p: "$4 $8"
1241
1243
  }
1242
1244
  },
1243
- /* @__PURE__ */ React14.createElement(HMSVideoPlayer.Controls.Left, null, /* @__PURE__ */ React14.createElement(LeaveRoom, { screenType })),
1244
- /* @__PURE__ */ React14.createElement(HMSVideoPlayer.Controls.Right, null, isLandscape && /* @__PURE__ */ React14.createElement(ChatToggle, null), hasCaptions && !isHlsAutoplayBlocked && /* @__PURE__ */ React14.createElement(HLSCaptionSelector, { isEnabled: isCaptionEnabled }), availableLayers.length > 0 && !isHlsAutoplayBlocked ? /* @__PURE__ */ React14.createElement(
1245
+ /* @__PURE__ */ React14.createElement(HMSVideoPlayer.Controls.Left, null, hlsViewRef.current && /* @__PURE__ */ React14.createElement(LeaveRoom, { screenType, container: hlsViewRef.current })),
1246
+ /* @__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(
1245
1247
  HLSQualitySelector,
1246
1248
  {
1247
1249
  layers: availableLayers,
@@ -1249,7 +1251,8 @@ var HLSView = () => {
1249
1251
  open: qualityDropDownOpen,
1250
1252
  selection: currentSelectedQuality,
1251
1253
  onQualityChange: handleQuality,
1252
- isAuto: isUserSelectedAuto
1254
+ isAuto: isUserSelectedAuto,
1255
+ containerRef: hlsViewRef.current
1253
1256
  }
1254
1257
  ) : null, /* @__PURE__ */ React14.createElement(HLSAutoplayBlockedPrompt, { open: isHlsAutoplayBlocked, unblockAutoPlay }))
1255
1258
  )
@@ -1262,7 +1265,7 @@ var HLSView = () => {
1262
1265
  align: "start",
1263
1266
  css: {
1264
1267
  position: "absolute",
1265
- bottom: "0",
1268
+ bottom: isFullScreen && ((_c = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _c.playlist_type) === HLSPlaylistType.DVR ? "$8" : "0",
1266
1269
  left: "0",
1267
1270
  zIndex: 1,
1268
1271
  background: isMobile || isLandscape ? "" : `linear-gradient(180deg, ${theme.colors.background_dim.value}00 29.46%, ${theme.colors.background_dim.value}A3 100%);`,
@@ -1274,7 +1277,7 @@ var HLSView = () => {
1274
1277
  opacity: controlsVisible ? `1` : "0"
1275
1278
  }
1276
1279
  },
1277
- /* @__PURE__ */ React14.createElement(HMSVideoPlayer.Progress, { isDvr: ((_b = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _b.playlist_type) === HLSPlaylistType.DVR }),
1280
+ ((_d = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _d.playlist_type) === HLSPlaylistType.DVR ? /* @__PURE__ */ React14.createElement(HMSVideoPlayer.Progress, null) : null,
1278
1281
  /* @__PURE__ */ React14.createElement(
1279
1282
  HMSVideoPlayer.Controls.Root,
1280
1283
  {
@@ -1282,7 +1285,7 @@ var HLSView = () => {
1282
1285
  p: "$4 $8"
1283
1286
  }
1284
1287
  },
1285
- /* @__PURE__ */ React14.createElement(HMSVideoPlayer.Controls.Left, null, !(isMobile || isLandscape) && /* @__PURE__ */ React14.createElement(React14.Fragment, null, /* @__PURE__ */ React14.createElement(
1288
+ /* @__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(
1286
1289
  HMSVideoPlayer.Seeker,
1287
1290
  {
1288
1291
  onClick: () => {
@@ -1300,7 +1303,7 @@ var HLSView = () => {
1300
1303
  title: "forward"
1301
1304
  },
1302
1305
  /* @__PURE__ */ React14.createElement(ForwardArrowIcon, { width: 20, height: 20 })
1303
- ), !isVideoLive ? /* @__PURE__ */ React14.createElement(HMSVideoPlayer.Duration, null) : null, /* @__PURE__ */ React14.createElement(HMSVideoPlayer.Volume, null)), /* @__PURE__ */ React14.createElement(
1306
+ ), !isVideoLive ? /* @__PURE__ */ React14.createElement(HMSVideoPlayer.Duration, null) : null) : null, /* @__PURE__ */ React14.createElement(HMSVideoPlayer.Volume, null)), /* @__PURE__ */ React14.createElement(
1304
1307
  IconButton,
1305
1308
  {
1306
1309
  css: { px: "$2" },
@@ -1332,7 +1335,7 @@ var HLSView = () => {
1332
1335
  },
1333
1336
  isVideoLive ? "LIVE" : "GO LIVE"
1334
1337
  )))
1335
- ), (isMobile || isLandscape) && !isVideoLive ? /* @__PURE__ */ React14.createElement(HMSVideoPlayer.Duration, null) : null),
1338
+ ), (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),
1336
1339
  /* @__PURE__ */ React14.createElement(HMSVideoPlayer.Controls.Right, null, hasCaptions && !(isMobile || isLandscape) && /* @__PURE__ */ React14.createElement(HLSCaptionSelector, { isEnabled: isCaptionEnabled }), availableLayers.length > 0 && !(isMobile || isLandscape) ? /* @__PURE__ */ React14.createElement(
1337
1340
  HLSQualitySelector,
1338
1341
  {
@@ -1347,11 +1350,11 @@ var HLSView = () => {
1347
1350
  )
1348
1351
  ))
1349
1352
  )
1350
- )), isMobile && !isFullScreen && /* @__PURE__ */ React14.createElement(HLSViewTitle, null)) : /* @__PURE__ */ React14.createElement(Flex, { align: "center", justify: "center", direction: "column", css: { size: "100%", px: "$10" } }, /* @__PURE__ */ React14.createElement(Flex, { align: "center", gap: "2", css: { position: "absolute", left: "$4", top: "$4", zIndex: 1 } }, /* @__PURE__ */ React14.createElement(LeaveRoom, { screenType })), /* @__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"))
1353
+ )), isMobile && !isFullScreen && /* @__PURE__ */ React14.createElement(HLSViewTitle, null)) : /* @__PURE__ */ React14.createElement(Flex, { align: "center", justify: "center", direction: "column", css: { size: "100%", px: "$10" } }, /* @__PURE__ */ React14.createElement(Flex, { align: "center", gap: "2", css: { position: "absolute", left: "$4", top: "$4", zIndex: 1 } }, isMobile || isLandscape ? /* @__PURE__ */ React14.createElement(LeaveRoom, { screenType }) : null), /* @__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"))
1351
1354
  );
1352
1355
  };
1353
1356
  var HLSView_default = HLSView;
1354
1357
  export {
1355
1358
  HLSView_default as default
1356
1359
  };
1357
- //# sourceMappingURL=HLSView-MYKM5AXS.js.map
1360
+ //# sourceMappingURL=HLSView-TOMPA4E4.js.map