@100mslive/roomkit-react 0.3.20-alpha.3 → 0.3.20

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 (39) hide show
  1. package/dist/{HLSView-YFTHW2VY.js → HLSView-6QAHWMQF.js} +47 -63
  2. package/dist/HLSView-6QAHWMQF.js.map +7 -0
  3. package/dist/{HLSView-KKVZM355.css → HLSView-E242LM6X.css} +3 -3
  4. package/dist/{HLSView-KKVZM355.css.map → HLSView-E242LM6X.css.map} +1 -1
  5. package/dist/Prebuilt/AppContext.d.ts +1 -1
  6. package/dist/Prebuilt/components/AuthToken.d.ts +1 -1
  7. package/dist/Prebuilt/components/VirtualBackground/VBHandler.d.ts +0 -1
  8. package/dist/{chunk-Y3UYAB6J.js → chunk-ACEDLM3B.js} +532 -561
  9. package/dist/chunk-ACEDLM3B.js.map +7 -0
  10. package/dist/index.cjs.css +2 -2
  11. package/dist/index.cjs.css.map +1 -1
  12. package/dist/index.cjs.js +573 -619
  13. package/dist/index.cjs.js.map +4 -4
  14. package/dist/index.css +2 -2
  15. package/dist/index.css.map +1 -1
  16. package/dist/index.js +1 -1
  17. package/dist/meta.cjs.json +66 -86
  18. package/dist/meta.esbuild.json +78 -98
  19. package/package.json +7 -7
  20. package/src/Prebuilt/App.tsx +5 -5
  21. package/src/Prebuilt/AppContext.tsx +1 -1
  22. package/src/Prebuilt/components/AuthToken.tsx +1 -1
  23. package/src/Prebuilt/components/HMSVideo/HMSVideo.jsx +4 -24
  24. package/src/Prebuilt/components/MoreSettings/ChangeNameContent.tsx +3 -13
  25. package/src/Prebuilt/components/MoreSettings/ChangeNameModal.tsx +1 -1
  26. package/src/Prebuilt/components/Notifications/TrackUnmuteModal.tsx +1 -1
  27. package/src/Prebuilt/components/ScreenshareTile.tsx +2 -2
  28. package/src/Prebuilt/components/Settings/SettingsModal.jsx +2 -1
  29. package/src/Prebuilt/components/TileMenu/TileMenu.tsx +6 -7
  30. package/src/Prebuilt/components/TileMenu/TileMenuContent.tsx +3 -3
  31. package/src/Prebuilt/components/VideoLayouts/EqualProminence.tsx +2 -4
  32. package/src/Prebuilt/components/VideoTile.tsx +2 -2
  33. package/src/Prebuilt/components/VirtualBackground/VBHandler.tsx +1 -13
  34. package/src/Prebuilt/components/VirtualBackground/VBPicker.tsx +2 -3
  35. package/src/Prebuilt/components/{peerTileUtils.tsx → peerTileUtils.jsx} +6 -21
  36. package/src/Prebuilt/layouts/HLSView.jsx +5 -2
  37. package/dist/HLSView-YFTHW2VY.js.map +0 -7
  38. package/dist/Prebuilt/components/peerTileUtils.d.ts +0 -7
  39. package/dist/chunk-Y3UYAB6J.js.map +0 -7
@@ -39,11 +39,11 @@ import {
39
39
  useRoomLayoutHeader,
40
40
  useSidepaneToggle,
41
41
  useTheme
42
- } from "./chunk-Y3UYAB6J.js";
42
+ } from "./chunk-ACEDLM3B.js";
43
43
 
44
44
  // src/Prebuilt/layouts/HLSView.jsx
45
45
  init_define_process_env();
46
- import React15, { useCallback as useCallback3, useEffect as useEffect4, useRef, useState as useState5 } from "react";
46
+ import React15, { useCallback as useCallback3, useEffect as useEffect3, useRef, useState as useState4 } from "react";
47
47
  import { useFullscreen, useMedia as useMedia4, usePrevious, useToggle } from "react-use";
48
48
  import { HLSPlaybackState, HMSHLSPlayer, HMSHLSPlayerEvents as HMSHLSPlayerEvents2 } from "@100mslive/hls-player";
49
49
  import screenfull from "screenfull";
@@ -170,29 +170,9 @@ var RightControls = styled(Flex, {
170
170
 
171
171
  // src/Prebuilt/components/HMSVideo/HMSVideo.jsx
172
172
  init_define_process_env();
173
- import React2, { forwardRef, useEffect, useState } from "react";
173
+ import React2, { forwardRef } from "react";
174
174
  var HMSVideo = forwardRef((_a, videoRef) => {
175
175
  var _b = _a, { children } = _b, props = __objRest(_b, ["children"]);
176
- const [width, setWidth] = useState("auto");
177
- useEffect(() => {
178
- const updatingVideoWidth = () => {
179
- const videoEl2 = videoRef.current;
180
- if (!videoEl2) {
181
- return;
182
- }
183
- if (videoEl2.videoWidth > videoEl2.videoHeight && width !== "100%") {
184
- setWidth("100%");
185
- }
186
- };
187
- const videoEl = videoRef.current;
188
- if (!videoEl) {
189
- return;
190
- }
191
- videoEl.addEventListener("loadedmetadata", updatingVideoWidth);
192
- return () => {
193
- videoEl.removeEventListener("loadedmetadata", updatingVideoWidth);
194
- };
195
- }, []);
196
176
  return /* @__PURE__ */ React2.createElement(
197
177
  Flex,
198
178
  __spreadValues({
@@ -203,8 +183,9 @@ var HMSVideo = forwardRef((_a, videoRef) => {
203
183
  justifyContent: "center",
204
184
  transition: "all 0.3s ease-in-out",
205
185
  "@md": {
186
+ height: "auto",
206
187
  "& video": {
207
- height: props.isFullScreen ? "" : "$60 !important"
188
+ height: "$60 !important"
208
189
  }
209
190
  },
210
191
  "& video::cue": {
@@ -233,7 +214,7 @@ var HMSVideo = forwardRef((_a, videoRef) => {
233
214
  style: {
234
215
  margin: "0 auto",
235
216
  objectFit: "contain",
236
- width,
217
+ width: "auto",
237
218
  height: "100%",
238
219
  maxWidth: "100%"
239
220
  },
@@ -425,7 +406,7 @@ var PlayPauseSeekOverlayControls = ({
425
406
 
426
407
  // src/Prebuilt/components/HMSVideo/VideoProgress.tsx
427
408
  init_define_process_env();
428
- import React7, { useCallback, useEffect as useEffect2, useState as useState2 } from "react";
409
+ import React7, { useCallback, useEffect, useState } from "react";
429
410
 
430
411
  // src/Prebuilt/components/HMSVideo/utils.ts
431
412
  init_define_process_env();
@@ -463,8 +444,8 @@ var VideoProgress = ({
463
444
  setSeekProgress
464
445
  }) => {
465
446
  const { hlsPlayer: hlsPlayer2 } = useHMSPlayerContext();
466
- const [videoProgress, setVideoProgress] = useState2(0);
467
- const [bufferProgress, setBufferProgress] = useState2(0);
447
+ const [videoProgress, setVideoProgress] = useState(0);
448
+ const [bufferProgress, setBufferProgress] = useState(0);
468
449
  const videoEl = hlsPlayer2 == null ? void 0 : hlsPlayer2.getVideoElement();
469
450
  const setProgress = useCallback(() => {
470
451
  var _a;
@@ -490,7 +471,7 @@ var VideoProgress = ({
490
471
  }
491
472
  setProgress();
492
473
  }, [seekProgress, setProgress, videoEl]);
493
- useEffect2(() => {
474
+ useEffect(() => {
494
475
  if (!videoEl) {
495
476
  return;
496
477
  }
@@ -553,11 +534,11 @@ var VideoProgress = ({
553
534
 
554
535
  // src/Prebuilt/components/HMSVideo/VideoTime.tsx
555
536
  init_define_process_env();
556
- import React8, { useCallback as useCallback2, useEffect as useEffect3, useState as useState3 } from "react";
537
+ import React8, { useCallback as useCallback2, useEffect as useEffect2, useState as useState2 } from "react";
557
538
  import { HMSHLSPlayerEvents } from "@100mslive/hls-player";
558
539
  var VideoTime = () => {
559
540
  const { hlsPlayer: hlsPlayer2 } = useHMSPlayerContext();
560
- const [videoTime, setVideoTime] = useState3(getDurationFromSeconds2(0));
541
+ const [videoTime, setVideoTime] = useState2(getDurationFromSeconds2(0));
561
542
  const updateTime = useCallback2(
562
543
  (currentTime) => {
563
544
  const videoEl = hlsPlayer2 == null ? void 0 : hlsPlayer2.getVideoElement();
@@ -570,7 +551,7 @@ var VideoTime = () => {
570
551
  },
571
552
  [hlsPlayer2]
572
553
  );
573
- useEffect3(() => {
554
+ useEffect2(() => {
574
555
  const timeupdateHandler = (currentTime) => {
575
556
  updateTime(currentTime);
576
557
  };
@@ -602,13 +583,13 @@ var VideoTime = () => {
602
583
 
603
584
  // src/Prebuilt/components/HMSVideo/VolumeControl.tsx
604
585
  init_define_process_env();
605
- import React9, { useState as useState4 } from "react";
586
+ import React9, { useState as useState3 } from "react";
606
587
  import { VolumeOneIcon, VolumeTwoIcon, VolumeZeroIcon } from "@100mslive/react-icons";
607
588
  var VolumeControl = () => {
608
589
  var _a;
609
590
  const { hlsPlayer: hlsPlayer2 } = useHMSPlayerContext();
610
- const [volume, setVolume] = useState4((_a = hlsPlayer2 == null ? void 0 : hlsPlayer2.volume) != null ? _a : 100);
611
- const [showSlider, setShowSlider] = useState4(false);
591
+ const [volume, setVolume] = useState3((_a = hlsPlayer2 == null ? void 0 : hlsPlayer2.volume) != null ? _a : 100);
592
+ const [showSlider, setShowSlider] = useState3(false);
612
593
  return /* @__PURE__ */ React9.createElement(
613
594
  Flex,
614
595
  {
@@ -1046,7 +1027,7 @@ var ToggleChat = ({ isFullScreen = false }) => {
1046
1027
  const showChat = !!(elements == null ? void 0 : elements.chat);
1047
1028
  const isMobile = useMedia4(config.media.md);
1048
1029
  const hmsActions = useHMSActions();
1049
- useEffect4(() => {
1030
+ useEffect3(() => {
1050
1031
  match({ sidepane, isMobile, showChat, isFullScreen }).with({ isFullScreen: true }, () => {
1051
1032
  hmsActions.setAppData(APP_DATA.sidePane, "");
1052
1033
  }).with({ isMobile: true, showChat: true, sidepane: P.when((value) => !value) }, () => {
@@ -1068,30 +1049,30 @@ var HLSView = () => {
1068
1049
  const notification = useHMSNotifications(HMSNotificationTypes.POLL_STOPPED);
1069
1050
  const hmsActions = useHMSActions();
1070
1051
  const { themeType } = useTheme();
1071
- const [streamEnded, setStreamEnded] = useState5(false);
1072
- let [hlsStatsState, setHlsStatsState] = useState5(null);
1052
+ const [streamEnded, setStreamEnded] = useState4(false);
1053
+ let [hlsStatsState, setHlsStatsState] = useState4(null);
1073
1054
  const hlsUrl = (_a = hlsState.variants[0]) == null ? void 0 : _a.url;
1074
- const [availableLayers, setAvailableLayers] = useState5([]);
1075
- const [isVideoLive, setIsVideoLive] = useState5(true);
1076
- const [isCaptionEnabled, setIsCaptionEnabled] = useState5(true);
1077
- const [hasCaptions, setHasCaptions] = useState5(false);
1078
- const [currentSelectedQuality, setCurrentSelectedQuality] = useState5(null);
1079
- const [isHlsAutoplayBlocked, setIsHlsAutoplayBlocked] = useState5(false);
1080
- const [hoverControlsVisible, setHoverControlsVisible] = useState5({
1055
+ const [availableLayers, setAvailableLayers] = useState4([]);
1056
+ const [isVideoLive, setIsVideoLive] = useState4(true);
1057
+ const [isCaptionEnabled, setIsCaptionEnabled] = useState4(true);
1058
+ const [hasCaptions, setHasCaptions] = useState4(false);
1059
+ const [currentSelectedQuality, setCurrentSelectedQuality] = useState4(null);
1060
+ const [isHlsAutoplayBlocked, setIsHlsAutoplayBlocked] = useState4(false);
1061
+ const [hoverControlsVisible, setHoverControlsVisible] = useState4({
1081
1062
  seekForward: false,
1082
1063
  pausePlay: false,
1083
1064
  seekBackward: false
1084
1065
  });
1085
- const [isPaused, setIsPaused] = useState5(false);
1066
+ const [isPaused, setIsPaused] = useState4(false);
1086
1067
  const [show, toggle] = useToggle(false);
1087
1068
  const lastHlsUrl = usePrevious(hlsUrl);
1088
1069
  const vanillaStore = useHMSVanillaStore();
1089
- const [controlsVisible, setControlsVisible] = useState5(true);
1090
- const [isUserSelectedAuto, setIsUserSelectedAuto] = useState5(true);
1091
- const [qualityDropDownOpen, setQualityDropDownOpen] = useState5(false);
1070
+ const [controlsVisible, setControlsVisible] = useState4(true);
1071
+ const [isUserSelectedAuto, setIsUserSelectedAuto] = useState4(true);
1072
+ const [qualityDropDownOpen, setQualityDropDownOpen] = useState4(false);
1092
1073
  const controlsRef = useRef(null);
1093
1074
  const controlsTimerRef = useRef();
1094
- const [seekProgress, setSeekProgress] = useState5(false);
1075
+ const [seekProgress, setSeekProgress] = useState4(false);
1095
1076
  const isFullScreenSupported = screenfull.isEnabled;
1096
1077
  const toggleChat = useSidepaneToggle(SIDE_PANE_OPTIONS.CHAT);
1097
1078
  const showChat = !!(elements == null ? void 0 : elements.chat);
@@ -1100,8 +1081,8 @@ var HLSView = () => {
1100
1081
  const isFullScreen = useFullscreen(hlsViewRef, show, {
1101
1082
  onClose: () => toggle(false)
1102
1083
  });
1103
- const [showLoader, setShowLoader] = useState5(false);
1104
- useEffect4(() => {
1084
+ const [showLoader, setShowLoader] = useState4(false);
1085
+ useEffect3(() => {
1105
1086
  const videoEl = videoRef.current;
1106
1087
  const showLoader2 = () => setShowLoader(true);
1107
1088
  const hideLoader = () => setShowLoader(false);
@@ -1112,12 +1093,12 @@ var HLSView = () => {
1112
1093
  videoEl == null ? void 0 : videoEl.removeEventListener("waiting", showLoader2);
1113
1094
  };
1114
1095
  }, []);
1115
- useEffect4(() => {
1096
+ useEffect3(() => {
1116
1097
  if (streamEnded && lastHlsUrl !== hlsUrl) {
1117
1098
  setStreamEnded(false);
1118
1099
  }
1119
1100
  }, [hlsUrl, streamEnded, lastHlsUrl]);
1120
- useEffect4(() => {
1101
+ useEffect3(() => {
1121
1102
  if (!notification)
1122
1103
  return;
1123
1104
  const toastID = toastMap == null ? void 0 : toastMap[notification.data.id];
@@ -1126,7 +1107,7 @@ var HLSView = () => {
1126
1107
  delete toastMap[notification.data.id];
1127
1108
  }
1128
1109
  }, [notification]);
1129
- useEffect4(() => {
1110
+ useEffect3(() => {
1130
1111
  const videoElem = videoRef.current;
1131
1112
  const setStreamEndedCallback = () => {
1132
1113
  setStreamEnded(true);
@@ -1148,7 +1129,7 @@ var HLSView = () => {
1148
1129
  [availableLayers]
1149
1130
  //eslint-disable-line
1150
1131
  );
1151
- useEffect4(() => {
1132
+ useEffect3(() => {
1152
1133
  let videoEl = videoRef.current;
1153
1134
  const manifestLoadedHandler = ({ layers }) => {
1154
1135
  setAvailableLayers(layers);
@@ -1261,7 +1242,7 @@ var HLSView = () => {
1261
1242
  };
1262
1243
  }
1263
1244
  }, [hlsUrl, vanillaStore, hmsActions]);
1264
- useEffect4(() => {
1245
+ useEffect3(() => {
1265
1246
  const onHLSStats = (state) => setHlsStatsState(state);
1266
1247
  if (enablHlsStats) {
1267
1248
  hlsPlayer == null ? void 0 : hlsPlayer.on(HMSHLSPlayerEvents2.STATS, onHLSStats);
@@ -1283,7 +1264,7 @@ var HLSView = () => {
1283
1264
  const sfnOverlayClose = () => {
1284
1265
  hmsActions.setAppData(APP_DATA.hlsStats, !enablHlsStats);
1285
1266
  };
1286
- useEffect4(() => {
1267
+ useEffect3(() => {
1287
1268
  if (controlsVisible && isFullScreen && !qualityDropDownOpen) {
1288
1269
  if (controlsTimerRef.current) {
1289
1270
  clearTimeout(controlsTimerRef.current);
@@ -1432,7 +1413,12 @@ var HLSView = () => {
1432
1413
  justify: "center",
1433
1414
  css: {
1434
1415
  flex: isLandscape ? "2 1 0" : "1 1 0",
1435
- transition: "all 0.3s ease-in-out"
1416
+ transition: "all 0.3s ease-in-out",
1417
+ "&:fullscreen": {
1418
+ "& video": {
1419
+ height: "unset !important"
1420
+ }
1421
+ }
1436
1422
  }
1437
1423
  },
1438
1424
  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 })),
@@ -1478,7 +1464,6 @@ var HLSView = () => {
1478
1464
  onMouseMove: onHoverHandler,
1479
1465
  onMouseLeave: onHoverHandler,
1480
1466
  onClick: onClickHandler,
1481
- isFullScreen,
1482
1467
  onDoubleClick: (e) => {
1483
1468
  onDoubleClickHandler(e);
1484
1469
  }
@@ -1633,8 +1618,7 @@ var HLSView = () => {
1633
1618
  open: qualityDropDownOpen,
1634
1619
  selection: currentSelectedQuality,
1635
1620
  onQualityChange: handleQuality,
1636
- isAuto: isUserSelectedAuto,
1637
- containerRef: hlsViewRef.current
1621
+ isAuto: isUserSelectedAuto
1638
1622
  }
1639
1623
  ) : null, isFullScreenSupported ? /* @__PURE__ */ React15.createElement(FullScreenButton, { isFullScreen, onToggle: toggle }) : null)
1640
1624
  )
@@ -1649,4 +1633,4 @@ var HLSView_default = HLSView;
1649
1633
  export {
1650
1634
  HLSView_default as default
1651
1635
  };
1652
- //# sourceMappingURL=HLSView-YFTHW2VY.js.map
1636
+ //# sourceMappingURL=HLSView-6QAHWMQF.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/Prebuilt/layouts/HLSView.jsx", "../src/Prebuilt/components/HlsStatsOverlay.jsx", "../src/Prebuilt/components/HMSVideo/index.ts", "../src/Prebuilt/components/HMSVideo/Controls.jsx", "../src/Prebuilt/components/HMSVideo/HMSVideo.jsx", "../src/Prebuilt/components/HMSVideo/PlayPauseSeekControls.tsx", "../src/Prebuilt/components/HMSVideo/PlayPauseButton.tsx", "../src/Prebuilt/components/HMSVideo/PlayerContext.tsx", "../src/Prebuilt/components/HMSVideo/SeekControl.tsx", "../src/Prebuilt/components/HMSVideo/VideoProgress.tsx", "../src/Prebuilt/components/HMSVideo/utils.ts", "../src/Prebuilt/components/HMSVideo/VideoTime.tsx", "../src/Prebuilt/components/HMSVideo/VolumeControl.tsx", "../src/Prebuilt/components/HMSVideo/FullscreenButton.tsx", "../src/Prebuilt/components/HMSVideo/HLSAutoplayBlockedPrompt.tsx", "../src/Prebuilt/components/HMSVideo/HLSCaptionSelector.tsx", "../src/Prebuilt/components/HMSVideo/HLSQualitySelector.tsx", "../src/Prebuilt/components/HMSVideo/MwebHLSViewTitle.tsx"],
4
+ "sourcesContent": ["import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { useFullscreen, useMedia, usePrevious, useToggle } from 'react-use';\nimport { HLSPlaybackState, HMSHLSPlayer, HMSHLSPlayerEvents } from '@100mslive/hls-player';\nimport screenfull from 'screenfull';\nimport { match, P } from 'ts-pattern';\nimport {\n HLSPlaylistType,\n HMSNotificationTypes,\n selectAppData,\n selectHLSState,\n selectPeerNameByID,\n selectPollByID,\n useHMSActions,\n useHMSNotifications,\n useHMSStore,\n useHMSVanillaStore,\n} from '@100mslive/react-sdk';\nimport { ColoredHandIcon, GoLiveIcon } from '@100mslive/react-icons';\nimport { ChatToggle } from '../components/Footer/ChatToggle';\nimport { HlsStatsOverlay } from '../components/HlsStatsOverlay';\nimport { HMSVideoPlayer } from '../components/HMSVideo';\nimport { FullScreenButton } from '../components/HMSVideo/FullscreenButton';\nimport { HLSAutoplayBlockedPrompt } from '../components/HMSVideo/HLSAutoplayBlockedPrompt';\nimport { HLSCaptionSelector } from '../components/HMSVideo/HLSCaptionSelector';\nimport { HLSQualitySelector } from '../components/HMSVideo/HLSQualitySelector';\nimport { HLSViewTitle } from '../components/HMSVideo/MwebHLSViewTitle';\nimport { HMSPlayerContext } from '../components/HMSVideo/PlayerContext';\nimport { LeaveRoom } from '../components/Leave/LeaveRoom';\nimport { ToastManager } from '../components/Toast/ToastManager';\nimport { Button } from '../../Button';\nimport { IconButton } from '../../IconButton';\nimport { Box, Flex } from '../../Layout';\nimport { Loading } from '../../Loading';\nimport { Text } from '../../Text';\nimport { config, theme, useTheme } from '../../Theme';\nimport { Tooltip } from '../../Tooltip';\nimport { WaitingView } from './WaitingView';\nimport { useSidepaneToggle } from '../components/AppData/useSidepane';\nimport { useRoomLayoutConferencingScreen } from '../provider/roomLayoutProvider/hooks/useRoomLayoutScreen';\nimport { useIsLandscape, useKeyboardHandler } from '../common/hooks';\nimport { APP_DATA, EMOJI_REACTION_TYPE, POLL_STATE, POLL_VIEWS, SIDE_PANE_OPTIONS } from '../common/constants';\n\nlet hlsPlayer;\nconst toastMap = {};\n\nconst ToggleChat = ({ isFullScreen = false }) => {\n const { elements } = useRoomLayoutConferencingScreen();\n const sidepane = useHMSStore(selectAppData(APP_DATA.sidePane));\n const toggleChat = useSidepaneToggle(SIDE_PANE_OPTIONS.CHAT);\n const showChat = !!elements?.chat;\n const isMobile = useMedia(config.media.md);\n const hmsActions = useHMSActions();\n\n useEffect(() => {\n match({ sidepane, isMobile, showChat, isFullScreen })\n .with({ isFullScreen: true }, () => {\n hmsActions.setAppData(APP_DATA.sidePane, '');\n })\n .with({ isMobile: true, showChat: true, sidepane: P.when(value => !value) }, () => {\n toggleChat();\n })\n .with({ showChat: false, isMobile: true, sidepane: SIDE_PANE_OPTIONS.CHAT }, () => {\n hmsActions.setAppData(APP_DATA.sidePane, '');\n })\n .otherwise(() => {\n //do nothing\n });\n }, [sidepane, isMobile, toggleChat, showChat, hmsActions, isFullScreen]);\n return null;\n};\nconst HLSView = () => {\n const videoRef = useRef(null);\n const hlsViewRef = useRef();\n const { elements } = useRoomLayoutConferencingScreen();\n const hlsState = useHMSStore(selectHLSState);\n const enablHlsStats = useHMSStore(selectAppData(APP_DATA.hlsStats));\n const notification = useHMSNotifications(HMSNotificationTypes.POLL_STOPPED);\n const hmsActions = useHMSActions();\n const { themeType } = useTheme();\n const [streamEnded, setStreamEnded] = useState(false);\n let [hlsStatsState, setHlsStatsState] = useState(null);\n const hlsUrl = hlsState.variants[0]?.url;\n const [availableLayers, setAvailableLayers] = useState([]);\n const [isVideoLive, setIsVideoLive] = useState(true);\n const [isCaptionEnabled, setIsCaptionEnabled] = useState(true);\n const [hasCaptions, setHasCaptions] = useState(false);\n const [currentSelectedQuality, setCurrentSelectedQuality] = useState(null);\n const [isHlsAutoplayBlocked, setIsHlsAutoplayBlocked] = useState(false);\n const [hoverControlsVisible, setHoverControlsVisible] = useState({\n seekForward: false,\n pausePlay: false,\n seekBackward: false,\n });\n const [isPaused, setIsPaused] = useState(false);\n const [show, toggle] = useToggle(false);\n const lastHlsUrl = usePrevious(hlsUrl);\n const vanillaStore = useHMSVanillaStore();\n const [controlsVisible, setControlsVisible] = useState(true);\n const [isUserSelectedAuto, setIsUserSelectedAuto] = useState(true);\n const [qualityDropDownOpen, setQualityDropDownOpen] = useState(false);\n const controlsRef = useRef(null);\n const controlsTimerRef = useRef();\n const [seekProgress, setSeekProgress] = useState(false);\n const isFullScreenSupported = screenfull.isEnabled;\n const toggleChat = useSidepaneToggle(SIDE_PANE_OPTIONS.CHAT);\n const showChat = !!elements?.chat;\n\n const isMobile = useMedia(config.media.md);\n const isLandscape = useIsLandscape();\n\n const isFullScreen = useFullscreen(hlsViewRef, show, {\n onClose: () => toggle(false),\n });\n const [showLoader, setShowLoader] = useState(false);\n\n // FIXME: move this logic to player controller in next release\n useEffect(() => {\n /**\n * @type {HTMLVideoElement} videoEl\n */\n const videoEl = videoRef.current;\n const showLoader = () => setShowLoader(true);\n const hideLoader = () => setShowLoader(false);\n videoEl?.addEventListener('playing', hideLoader);\n videoEl?.addEventListener('waiting', showLoader);\n return () => {\n videoEl?.removeEventListener('playing', hideLoader);\n videoEl?.removeEventListener('waiting', showLoader);\n };\n }, []);\n useEffect(() => {\n if (streamEnded && lastHlsUrl !== hlsUrl) {\n setStreamEnded(false);\n }\n }, [hlsUrl, streamEnded, lastHlsUrl]);\n\n useEffect(() => {\n if (!notification) return;\n const toastID = toastMap?.[notification.data.id];\n if (toastID) {\n ToastManager.removeToast(toastMap[notification.data.id]);\n delete toastMap[notification.data.id];\n }\n }, [notification]);\n\n useEffect(() => {\n const videoElem = videoRef.current;\n const setStreamEndedCallback = () => {\n setStreamEnded(true);\n // no point keeping the callback attached once the streaming is ended\n videoElem?.removeEventListener('ended', setStreamEndedCallback);\n };\n videoElem?.addEventListener('ended', setStreamEndedCallback);\n return () => {\n videoElem?.removeEventListener('ended', setStreamEndedCallback);\n };\n }, [hlsUrl]);\n\n const handleQuality = useCallback(\n quality => {\n if (hlsPlayer) {\n setIsUserSelectedAuto(quality.height?.toString().toLowerCase() === 'auto');\n hlsPlayer?.setLayer(quality);\n }\n },\n [availableLayers], //eslint-disable-line\n );\n /**\n * initialize HMSHLSPlayer and add event listeners.\n */\n useEffect(() => {\n let videoEl = videoRef.current;\n const manifestLoadedHandler = ({ layers }) => {\n setAvailableLayers(layers);\n setHasCaptions(hlsPlayer?.hasCaptions());\n };\n const layerUpdatedHandler = ({ layer }) => {\n setCurrentSelectedQuality(layer);\n };\n const metadataLoadedHandler = ({ payload, ...rest }) => {\n const parsePayload = str => {\n try {\n return JSON.parse(str);\n } catch (e) {\n return str;\n }\n };\n const duration = rest.duration;\n const parsedPayload = parsePayload(payload);\n // check if poll happened\n if (parsedPayload.startsWith('poll:')) {\n const pollId = parsedPayload.substr(parsedPayload.indexOf(':') + 1);\n const poll = vanillaStore.getState(selectPollByID(pollId));\n const pollStartedBy = vanillaStore.getState(selectPeerNameByID(poll.startedBy)) || 'Participant';\n // launch poll\n if (!toastMap[pollId]) {\n const toastID = ToastManager.addToast({\n title: `${pollStartedBy} started a ${poll.type}: ${poll.title}`,\n action: (\n <Button\n onClick={() => {\n hmsActions.setAppData(APP_DATA.pollState, {\n [POLL_STATE.pollInView]: pollId,\n [POLL_STATE.view]: POLL_VIEWS.VOTE,\n });\n hmsActions.setAppData(APP_DATA.sidePane, SIDE_PANE_OPTIONS.POLLS);\n }}\n variant=\"standard\"\n css={{\n backgroundColor: '$surface_bright',\n fontWeight: '$semiBold',\n color: '$on_surface_high',\n p: '$xs $md',\n }}\n >\n {poll.type === 'quiz' ? 'Answer' : 'Vote'}\n </Button>\n ),\n duration: Infinity,\n });\n toastMap[pollId] = toastID;\n }\n return;\n }\n switch (parsedPayload.type) {\n case EMOJI_REACTION_TYPE:\n window.showFlyingEmoji?.({ emojiId: parsedPayload?.emojiId, senderId: parsedPayload?.senderId });\n break;\n default: {\n const toast = {\n title: `Payload from timed Metadata ${parsedPayload}`,\n duration: duration || 3000,\n };\n console.debug('Added toast ', JSON.stringify(toast));\n ToastManager.addToast(toast);\n break;\n }\n }\n };\n const handleError = data => {\n console.error('[HLSView] error in hls', `${data}`);\n };\n const handleNoLongerLive = ({ isLive }) => {\n setIsVideoLive(isLive);\n };\n\n const playbackEventHandler = data => {\n setIsPaused(data.state === HLSPlaybackState.paused);\n setHoverControlsVisible({\n ...hoverControlsVisible,\n pausePlay: true,\n });\n setTimeout(() => {\n setHoverControlsVisible({\n ...hoverControlsVisible,\n pausePlay: false,\n });\n }, 2000);\n };\n const captionEnabledEventHandler = isCaptionEnabled => {\n setIsCaptionEnabled(isCaptionEnabled);\n };\n\n const handleAutoplayBlock = data => setIsHlsAutoplayBlocked(!!data);\n if (videoEl && hlsUrl) {\n hlsPlayer = new HMSHLSPlayer(hlsUrl, videoEl);\n hlsPlayer.on(HMSHLSPlayerEvents.SEEK_POS_BEHIND_LIVE_EDGE, handleNoLongerLive);\n hlsPlayer.on(HMSHLSPlayerEvents.TIMED_METADATA_LOADED, metadataLoadedHandler);\n hlsPlayer.on(HMSHLSPlayerEvents.ERROR, handleError);\n hlsPlayer.on(HMSHLSPlayerEvents.PLAYBACK_STATE, playbackEventHandler);\n hlsPlayer.on(HMSHLSPlayerEvents.CAPTION_ENABLED, captionEnabledEventHandler);\n hlsPlayer.on(HMSHLSPlayerEvents.AUTOPLAY_BLOCKED, handleAutoplayBlock);\n\n hlsPlayer.on(HMSHLSPlayerEvents.MANIFEST_LOADED, manifestLoadedHandler);\n hlsPlayer.on(HMSHLSPlayerEvents.LAYER_UPDATED, layerUpdatedHandler);\n return () => {\n hlsPlayer.off(HMSHLSPlayerEvents.SEEK_POS_BEHIND_LIVE_EDGE, handleNoLongerLive);\n hlsPlayer.off(HMSHLSPlayerEvents.ERROR, handleError);\n hlsPlayer.off(HMSHLSPlayerEvents.TIMED_METADATA_LOADED, metadataLoadedHandler);\n hlsPlayer.off(HMSHLSPlayerEvents.PLAYBACK_STATE, playbackEventHandler);\n hlsPlayer.off(HMSHLSPlayerEvents.CAPTION_ENABLED, captionEnabledEventHandler);\n\n hlsPlayer.off(HMSHLSPlayerEvents.AUTOPLAY_BLOCKED, handleAutoplayBlock);\n hlsPlayer.off(HMSHLSPlayerEvents.MANIFEST_LOADED, manifestLoadedHandler);\n hlsPlayer.off(HMSHLSPlayerEvents.LAYER_UPDATED, layerUpdatedHandler);\n hlsPlayer.reset();\n };\n }\n }, [hlsUrl, vanillaStore, hmsActions]);\n\n /**\n * initialize and subscribe to hlsState\n */\n useEffect(() => {\n const onHLSStats = state => setHlsStatsState(state);\n if (enablHlsStats) {\n hlsPlayer?.on(HMSHLSPlayerEvents.STATS, onHLSStats);\n } else {\n hlsPlayer?.off(HMSHLSPlayerEvents.STATS, onHLSStats);\n }\n return () => {\n hlsPlayer?.off(HMSHLSPlayerEvents.STATS, onHLSStats);\n };\n }, [enablHlsStats]);\n\n const unblockAutoPlay = async () => {\n try {\n await hlsPlayer.play();\n setIsHlsAutoplayBlocked(false);\n } catch (error) {\n console.error('Tried to unblock Autoplay failed with', error.message);\n }\n };\n\n const sfnOverlayClose = () => {\n hmsActions.setAppData(APP_DATA.hlsStats, !enablHlsStats);\n };\n\n useEffect(() => {\n if (controlsVisible && isFullScreen && !qualityDropDownOpen) {\n if (controlsTimerRef.current) {\n clearTimeout(controlsTimerRef.current);\n }\n }\n if (!isFullScreen && controlsTimerRef.current) {\n clearTimeout(controlsTimerRef.current);\n }\n controlsTimerRef.current = setTimeout(() => {\n if (!seekProgress) {\n setControlsVisible(false);\n }\n }, 5000);\n return () => {\n if (controlsTimerRef.current) {\n clearTimeout(controlsTimerRef.current);\n }\n };\n }, [controlsVisible, isFullScreen, seekProgress, qualityDropDownOpen]);\n\n const onSeekTo = useCallback(\n seek => {\n match({ isLandscape, isMobile, seek })\n .with({ seek: -10, isMobile: false, isLandscape: false }, () => {\n setHoverControlsVisible({ ...hoverControlsVisible, seekBackward: true });\n setTimeout(() => {\n setHoverControlsVisible({\n ...hoverControlsVisible,\n seekBackward: false,\n });\n }, 1000);\n })\n .with({ seek: 10, isMobile: false, isLandscape: false }, () => {\n setHoverControlsVisible({ ...hoverControlsVisible, seekForward: true });\n setTimeout(() => {\n setHoverControlsVisible({\n ...hoverControlsVisible,\n seekForward: false,\n });\n }, 1000);\n })\n .otherwise(() => null);\n hlsPlayer?.seekTo(videoRef.current?.currentTime + seek);\n },\n [hoverControlsVisible, isLandscape, isMobile],\n );\n const onDoubleClickHandler = useCallback(\n event => {\n if (!(isMobile || isLandscape) || hlsState?.variants[0]?.playlist_type !== HLSPlaylistType.DVR) {\n return;\n }\n const sidePercentage = (event.screenX * 100) / event.target.clientWidth;\n // there is space for pause/unpause button\n if (sidePercentage < 45) {\n setHoverControlsVisible({\n ...hoverControlsVisible,\n seekBackward: true,\n });\n onSeekTo(-10);\n } else {\n setHoverControlsVisible({\n ...hoverControlsVisible,\n seekForward: true,\n });\n onSeekTo(10);\n }\n setTimeout(() => {\n setHoverControlsVisible({\n ...hoverControlsVisible,\n seekForward: false,\n seekBackward: false,\n });\n }, 1000);\n },\n [hlsState?.variants, hoverControlsVisible, isLandscape, isMobile, onSeekTo],\n );\n\n const onClickHandler = useCallback(async () => {\n match({ isMobile, isLandscape, playlist_type: hlsState?.variants[0]?.playlist_type })\n .with({ playlist_type: HLSPlaylistType.DVR, isMobile: false, isLandscape: false }, async () => {\n if (isPaused) {\n await hlsPlayer?.play();\n } else {\n hlsPlayer?.pause();\n }\n })\n .when(\n ({ isMobile, isLandscape }) => isMobile || isLandscape,\n () => {\n setControlsVisible(value => !value);\n if (controlsTimerRef.current) {\n clearTimeout(controlsTimerRef.current);\n }\n },\n )\n .otherwise(() => null);\n }, [hlsState?.variants, isLandscape, isMobile, isPaused]);\n\n const onHoverHandler = useCallback(\n event => {\n event.preventDefault();\n if (isMobile || isLandscape) {\n return;\n }\n if (event.type === 'mouseenter' || qualityDropDownOpen) {\n setControlsVisible(true);\n return;\n }\n if (event.type === 'mouseleave' && !seekProgress) {\n setControlsVisible(false);\n } else if (!controlsVisible && event.type === 'mousemove') {\n setControlsVisible(true);\n if (controlsTimerRef.current) {\n clearTimeout(controlsTimerRef.current);\n }\n }\n },\n [controlsVisible, isLandscape, isMobile, qualityDropDownOpen, seekProgress],\n );\n\n const keyHandler = useKeyboardHandler(isPaused, hlsPlayer);\n\n if (!hlsUrl || streamEnded) {\n return (\n <>\n <ToggleChat />\n {hlsViewRef.current && (isMobile || isLandscape) && (\n <Box css={{ position: 'fixed', left: '$4', top: '$4', zIndex: 11 }}>\n <LeaveRoom screenType=\"hls_live_streaming\" container={hlsViewRef.current} />\n </Box>\n )}\n <Flex\n key=\"hls-viewer\"\n id={`hls-viewer-${themeType}`}\n ref={hlsViewRef}\n direction={isMobile || isLandscape ? 'column' : 'row'}\n justify=\"center\"\n css={{\n flex: isLandscape ? '2 1 0' : '1 1 0',\n }}\n >\n {streamEnded ? (\n <WaitingView\n icon={<ColoredHandIcon height={56} width={56} />}\n title=\"Stream has ended\"\n subtitle=\"Have a nice day!\"\n />\n ) : (\n <WaitingView\n icon={<GoLiveIcon height={56} width={56} style={{ color: 'white' }} />}\n title=\"Stream yet to start\"\n subtitle=\"Sit back and relax\"\n />\n )}\n </Flex>\n </>\n );\n }\n return (\n <Flex\n key=\"hls-viewer\"\n id={`hls-viewer-${themeType}`}\n ref={hlsViewRef}\n direction={isMobile || isLandscape ? 'column' : 'row'}\n justify=\"center\"\n css={{\n flex: isLandscape ? '2 1 0' : '1 1 0',\n transition: 'all 0.3s ease-in-out',\n '&:fullscreen': {\n '& video': {\n height: 'unset !important',\n },\n },\n }}\n >\n {hlsViewRef.current && (isMobile || isLandscape) && (\n <Box css={{ position: 'fixed', left: '$4', top: '$4', zIndex: 11 }}>\n <LeaveRoom screenType=\"hls_live_streaming\" container={hlsViewRef.current} />\n </Box>\n )}\n\n <HMSPlayerContext.Provider value={{ hlsPlayer }}>\n {hlsStatsState?.url && enablHlsStats && !(isMobile || isLandscape) ? (\n <HlsStatsOverlay hlsStatsState={hlsStatsState} onClose={sfnOverlayClose} />\n ) : null}\n <Flex\n id=\"hls-player-container\"\n align=\"center\"\n justify=\"center\"\n css={{\n size: '100%',\n margin: '0 auto',\n '@md': {\n height: 'auto',\n },\n outline: 'none',\n }}\n onKeyDown={async event => {\n if (hlsState?.variants[0]?.playlist_type === HLSPlaylistType.DVR) {\n await keyHandler(event);\n }\n }}\n tabIndex=\"0\"\n >\n {!(isMobile || isLandscape) && (\n <HLSAutoplayBlockedPrompt open={isHlsAutoplayBlocked} unblockAutoPlay={unblockAutoPlay} />\n )}\n {showLoader && (\n <Flex\n align=\"center\"\n justify=\"center\"\n css={{\n position: 'absolute',\n }}\n >\n <Loading width={72} height={72} />\n </Flex>\n )}\n <HMSVideoPlayer.Root\n ref={videoRef}\n onMouseEnter={onHoverHandler}\n onMouseMove={onHoverHandler}\n onMouseLeave={onHoverHandler}\n onClick={onClickHandler}\n onDoubleClick={e => {\n onDoubleClickHandler(e);\n }}\n >\n <>\n {!(isMobile || isLandscape) && (\n <Flex\n align=\"center\"\n justify=\"between\"\n css={{\n position: 'absolute',\n bg: `${\n hoverControlsVisible.pausePlay ||\n hoverControlsVisible.seekBackward ||\n hoverControlsVisible.seekForward\n ? '#00000066'\n : ''\n }`,\n display: 'inline-flex',\n gap: '$2',\n zIndex: 1,\n size: '100%',\n }}\n >\n {!showLoader && hlsState?.variants[0]?.playlist_type === HLSPlaylistType.DVR && (\n <HMSVideoPlayer.PlayPauseSeekControls.Overlay\n isPaused={isPaused}\n showControls={controlsVisible}\n hoverControlsVisible={hoverControlsVisible}\n />\n )}\n </Flex>\n )}\n {isMobile || isLandscape ? (\n <>\n {!showLoader && hlsState?.variants[0]?.playlist_type === HLSPlaylistType.DVR && (\n <HMSVideoPlayer.PlayPauseSeekControls.Overlay\n isPaused={isPaused}\n showControls={controlsVisible}\n hoverControlsVisible={hoverControlsVisible}\n />\n )}\n <Flex\n ref={controlsRef}\n direction=\"column\"\n justify=\"start\"\n align=\"start\"\n css={{\n position: 'absolute',\n top: '0',\n left: '0',\n width: '100%',\n flexShrink: 0,\n zIndex: 1,\n visibility: controlsVisible ? `` : `hidden`,\n opacity: controlsVisible ? `1` : '0',\n }}\n >\n <HMSVideoPlayer.Controls.Root\n css={{\n p: '$4 $8',\n }}\n onClick={e => e.stopPropagation()}\n >\n <HMSVideoPlayer.Controls.Right>\n {(isLandscape || (isMobile && isFullScreen)) && showChat && (\n <ChatToggle\n onClick={() => {\n if (isFullScreen) {\n toggle();\n }\n // toggle and closing fullscreen takes few ms, to make it synced we are calling settimeout\n setTimeout(() => {\n toggleChat();\n }, 0);\n }}\n />\n )}\n {hasCaptions && !isHlsAutoplayBlocked && <HLSCaptionSelector isEnabled={isCaptionEnabled} />}\n {hlsViewRef.current && availableLayers.length > 0 && !isHlsAutoplayBlocked ? (\n <HLSQualitySelector\n layers={availableLayers}\n onOpenChange={setQualityDropDownOpen}\n open={qualityDropDownOpen}\n selection={currentSelectedQuality}\n onQualityChange={handleQuality}\n isAuto={isUserSelectedAuto}\n containerRef={hlsViewRef.current}\n />\n ) : null}\n <HLSAutoplayBlockedPrompt open={isHlsAutoplayBlocked} unblockAutoPlay={unblockAutoPlay} />\n </HMSVideoPlayer.Controls.Right>\n </HMSVideoPlayer.Controls.Root>\n </Flex>\n </>\n ) : null}\n {controlsVisible && (\n <Flex\n ref={controlsRef}\n direction={isMobile ? 'columnReverse' : 'column'}\n justify=\"end\"\n align=\"start\"\n css={{\n position: 'absolute',\n bottom: isFullScreen && hlsState?.variants[0]?.playlist_type === HLSPlaylistType.DVR ? '$8' : '0',\n left: '0',\n zIndex: 1,\n background:\n isMobile || isLandscape\n ? ''\n : `linear-gradient(180deg, ${theme.colors.background_dim.value}00 29.46%, ${theme.colors.background_dim.value}A3 100%);`,\n width: '100%',\n pt: '$8',\n flexShrink: 0,\n transition: 'visibility 0s 0.5s, opacity 0.5s linear',\n }}\n >\n {hlsState?.variants[0]?.playlist_type === HLSPlaylistType.DVR ? (\n <HMSVideoPlayer.Progress seekProgress={seekProgress} setSeekProgress={setSeekProgress} />\n ) : null}\n <HMSVideoPlayer.Controls.Root\n css={{\n p: '$4 $8',\n }}\n onClick={e => e.stopPropagation()}\n >\n <HMSVideoPlayer.Controls.Left>\n {!(isMobile || isLandscape) && (\n <>\n {hlsState?.variants[0]?.playlist_type === HLSPlaylistType.DVR ? (\n <>\n <HMSVideoPlayer.PlayPauseSeekControls.Button isPaused={isPaused} onSeekTo={onSeekTo} />\n {!isVideoLive ? <HMSVideoPlayer.Duration /> : null}\n </>\n ) : null}\n <HMSVideoPlayer.Volume />\n </>\n )}\n <IconButton\n css={{ px: '$2' }}\n onClick={async e => {\n e.stopPropagation();\n await hlsPlayer?.seekToLivePosition();\n setIsVideoLive(true);\n }}\n key=\"jump-to-live_btn\"\n data-testid=\"jump-to-live_btn\"\n >\n <Tooltip title={isVideoLive ? 'Live' : 'Go to Live'} side=\"top\">\n <Flex justify=\"center\" gap={2} align=\"center\">\n <Box\n css={{\n height: '$4',\n width: '$4',\n background: isVideoLive ? '$alert_error_default' : '$on_primary_medium',\n r: '$1',\n }}\n />\n <Text\n variant=\"$body1\"\n css={{\n c: isVideoLive ? '$on_surface_high' : '$on_surface_medium',\n fontWeight: '$semiBold',\n }}\n >\n {isVideoLive ? 'LIVE' : 'GO LIVE'}\n </Text>\n </Flex>\n </Tooltip>\n </IconButton>\n {(isMobile || isLandscape) &&\n !isVideoLive &&\n hlsState?.variants[0]?.playlist_type === HLSPlaylistType.DVR ? (\n <HMSVideoPlayer.Duration />\n ) : null}\n </HMSVideoPlayer.Controls.Left>\n\n <HMSVideoPlayer.Controls.Right>\n {hasCaptions && !(isMobile || isLandscape) && <HLSCaptionSelector isEnabled={isCaptionEnabled} />}\n {availableLayers.length > 0 && !(isMobile || isLandscape) ? (\n <HLSQualitySelector\n layers={availableLayers}\n onOpenChange={setQualityDropDownOpen}\n open={qualityDropDownOpen}\n selection={currentSelectedQuality}\n onQualityChange={handleQuality}\n isAuto={isUserSelectedAuto}\n />\n ) : null}\n {isFullScreenSupported ? (\n <FullScreenButton isFullScreen={isFullScreen} onToggle={toggle} />\n ) : null}\n </HMSVideoPlayer.Controls.Right>\n </HMSVideoPlayer.Controls.Root>\n </Flex>\n )}\n </>\n </HMSVideoPlayer.Root>\n </Flex>\n </HMSPlayerContext.Provider>\n <ToggleChat isFullScreen={isFullScreen} />\n {isMobile && !isFullScreen && <HLSViewTitle />}\n </Flex>\n );\n};\n\nexport default HLSView;\n", "import React, { memo } from 'react';\nimport { CrossIcon } from '@100mslive/react-icons';\nimport { Flex } from '../../Layout';\nimport { Text } from '../../Text';\nimport IconButton from '../IconButton';\n\nexport function HlsStatsOverlay({ hlsStatsState, onClose }) {\n return (\n <Flex\n css={{\n position: 'absolute',\n width: '$80',\n marginLeft: '$8',\n padding: '$8 $8 $10',\n zIndex: 10,\n backgroundColor: '$surface_brighter',\n borderRadius: '$1',\n }}\n direction=\"column\"\n >\n <IconButton css={{ position: 'absolute', top: '$2', right: '$2' }} onClick={onClose}>\n <CrossIcon />\n </IconButton>\n <HlsStatsRow label=\"URL\">\n <Flex align=\"center\">\n <a\n style={{ cursor: 'pointer', textDecoration: 'underline' }}\n href={hlsStatsState?.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n Stream url\n </a>\n </Flex>\n </HlsStatsRow>\n <HlsStatsRow label=\"Video size\">\n {` ${hlsStatsState?.videoSize?.width}x${hlsStatsState?.videoSize?.height}`}\n </HlsStatsRow>\n <HlsStatsRow label=\"Buffer duration\">{hlsStatsState?.bufferedDuration?.toFixed(2)} </HlsStatsRow>\n <HlsStatsRow label=\"Connection speed\">\n {`${(hlsStatsState?.bandwidthEstimate / (1000 * 1000)).toFixed(2)} Mbps`}\n </HlsStatsRow>\n <HlsStatsRow label=\"Bitrate\">{`${(hlsStatsState?.bitrate / (1000 * 1000)).toFixed(2)} Mbps`}</HlsStatsRow>\n <HlsStatsRow label=\"distance from live\">\n {getDurationFromSeconds(hlsStatsState.distanceFromLive / 1000)}\n </HlsStatsRow>\n <HlsStatsRow label=\"Dropped frames\">{hlsStatsState?.droppedFrames}</HlsStatsRow>\n </Flex>\n );\n}\n\n/**\n * Extracted from HLS new Player PR.\n * TODO: remove this and use HMSVideoUtils.js\n * when that code is merged\n */\nexport function getDurationFromSeconds(timeInSeconds) {\n let time = Math.floor(timeInSeconds);\n const hours = Math.floor(time / 3600);\n time = time - hours * 3600;\n const minutes = Math.floor(time / 60);\n const seconds = Math.floor(time - minutes * 60);\n\n const prefixedMinutes = `${minutes < 10 ? '0' + minutes : minutes}`;\n const prefixedSeconds = `${seconds < 10 ? '0' + seconds : seconds}`;\n\n let videoTimeStr = `${prefixedMinutes}:${prefixedSeconds}`;\n if (hours) {\n const prefixedHours = `${hours < 10 ? '0' + hours : hours}`;\n videoTimeStr = `${prefixedHours}:${prefixedMinutes}:${prefixedSeconds}`;\n }\n return videoTimeStr;\n}\n\nconst HlsStatsRow = memo(({ label, children }) => {\n return (\n <Flex gap={4} justify=\"center\" css={{ width: '100%' }}>\n <Text\n css={{\n width: '50%',\n '@md': { fontSize: '$md' },\n '@sm': { fontSize: '$sm' },\n // textAlign: \"right\",\n }}\n >\n {label}\n </Text>\n <Text\n css={{\n '@md': { fontSize: '$md' },\n '@sm': { fontSize: '$sm' },\n width: '50%',\n overflowWrap: 'break-word',\n // textAlign: \"left\",\n }}\n >\n {children}\n </Text>\n </Flex>\n );\n});\n", "// @ts-ignore\nimport { LeftControls, RightControls, VideoControls } from './Controls';\n// @ts-ignore\nimport { HMSVideo } from './HMSVideo';\nimport { PlayPauseSeekControls, PlayPauseSeekOverlayControls } from './PlayPauseSeekControls';\nimport { VideoProgress } from './VideoProgress';\nimport { VideoTime } from './VideoTime';\nimport { VolumeControl } from './VolumeControl';\n\nexport const HMSVideoPlayer = {\n Root: HMSVideo,\n Progress: VideoProgress,\n Duration: VideoTime,\n Volume: VolumeControl,\n Controls: {\n Root: VideoControls,\n Left: LeftControls,\n Right: RightControls,\n },\n PlayPauseSeekControls: {\n Overlay: PlayPauseSeekOverlayControls,\n Button: PlayPauseSeekControls,\n },\n};\n", "import { Flex, styled } from '../../..';\n\nexport const VideoControls = styled(Flex, {\n justifyContent: 'center',\n alignItems: 'center',\n alignSelf: 'stretch',\n width: '100%',\n gap: '$2',\n});\n\nexport const LeftControls = styled(Flex, {\n justifyContent: 'flex-start',\n alignItems: 'center',\n width: '100%',\n gap: '$4',\n});\nexport const RightControls = styled(Flex, {\n justifyContent: 'flex-end',\n alignItems: 'center',\n width: '100%',\n gap: '$4',\n});\n", "import React, { forwardRef } from 'react';\nimport { Flex } from '../../../Layout';\n\nexport const HMSVideo = forwardRef(({ children, ...props }, videoRef) => {\n return (\n <Flex\n data-testid=\"hms-video\"\n css={{\n size: '100%',\n position: 'relative',\n justifyContent: 'center',\n transition: 'all 0.3s ease-in-out',\n '@md': {\n height: 'auto',\n '& video': {\n height: '$60 !important',\n },\n },\n '& video::cue': {\n // default for on-surface-high\n color: '#EFF0FA',\n whiteSpace: 'pre-line',\n fontSize: '$sm',\n fontStyle: 'normal',\n fontWeight: '$regular',\n lineHeight: '$sm',\n letterSpacing: '0.25px',\n },\n '& video::-webkit-media-text-track-display': {\n padding: '0 $4',\n boxShadow: '0px 1px 3px 0px #000000A3',\n },\n '& video::-webkit-media-text-track-container': {\n fontSize: '$space$10 !important',\n },\n }}\n direction=\"column\"\n {...props}\n >\n <video\n style={{\n margin: '0 auto',\n objectFit: 'contain',\n width: 'auto',\n height: '100%',\n maxWidth: '100%',\n }}\n ref={videoRef}\n playsInline\n disablePictureInPicture\n />\n {children}\n </Flex>\n );\n});\n", "import React from 'react';\nimport { useMedia } from 'react-use';\nimport { BackwardArrowIcon, ForwardArrowIcon } from '@100mslive/react-icons';\nimport { Box, Flex } from '../../../Layout';\nimport { Text } from '../../../Text';\nimport { config } from '../../../Theme';\nimport { PlayPauseButton } from './PlayPauseButton';\nimport { SeekControl } from './SeekControl';\nimport { useIsLandscape } from '../../common/hooks';\n\n// desktop buttons\nexport const PlayPauseSeekControls = ({\n isPaused,\n onSeekTo,\n}: {\n isPaused: boolean;\n onSeekTo: (value: number) => void;\n}) => {\n return (\n <>\n <SeekControl\n onClick={e => {\n e.stopPropagation();\n onSeekTo(-10);\n }}\n title=\"backward\"\n >\n <BackwardArrowIcon width={20} height={20} />\n </SeekControl>\n <PlayPauseButton isPaused={isPaused} />\n <SeekControl\n onClick={e => {\n e.stopPropagation();\n onSeekTo(10);\n }}\n title=\"forward\"\n >\n <ForwardArrowIcon width={20} height={20} />\n </SeekControl>\n </>\n );\n};\n\n// overlay handlers\nexport const PlayPauseSeekOverlayControls = ({\n isPaused,\n showControls,\n hoverControlsVisible,\n}: {\n isPaused: boolean;\n showControls: boolean;\n hoverControlsVisible: {\n seekBackward: boolean;\n seekForward: boolean;\n pausePlay: boolean;\n };\n}) => {\n const isMobile = useMedia(config.media.md);\n const isLandscape = useIsLandscape();\n\n if (!isMobile && !isLandscape) {\n // show desktopOverflow icons\n return (\n <>\n <Flex\n css={{\n bg: 'rgba(0, 0, 0, 0.6)',\n r: '$round',\n size: '$24',\n visibility: hoverControlsVisible.seekBackward ? `` : `hidden`,\n opacity: hoverControlsVisible.seekBackward ? `1` : '0',\n }}\n direction=\"column\"\n align=\"center\"\n >\n <SeekControl title=\"backward\">\n <BackwardArrowIcon width={52} height={52} />\n </SeekControl>\n <Text variant=\"body2\" css={{ fontWeight: '$regular' }}>\n 10 secs\n </Text>\n </Flex>\n <Box\n css={{\n bg: 'rgba(0, 0, 0, 0.6)',\n r: '$round',\n visibility: hoverControlsVisible.pausePlay ? `` : `hidden`,\n opacity: hoverControlsVisible.pausePlay ? `1` : '0',\n }}\n >\n <PlayPauseButton isPaused={isPaused} width={48} height={48} />\n </Box>\n <Flex\n css={{\n bg: 'rgba(0, 0, 0, 0.6)',\n r: '$round',\n size: '$24',\n visibility: hoverControlsVisible.seekForward ? `` : `hidden`,\n opacity: hoverControlsVisible.seekForward ? `1` : '0',\n }}\n direction=\"column\"\n align=\"center\"\n >\n <SeekControl title=\"forward\">\n <ForwardArrowIcon width={52} height={52} />\n </SeekControl>\n <Text variant=\"body2\" css={{ fontWeight: '$regular' }}>\n 10 secs\n </Text>\n </Flex>\n </>\n );\n }\n\n return (\n <Flex\n align=\"center\"\n justify=\"center\"\n css={{\n position: 'absolute',\n bg: '#00000066',\n display: 'inline-flex',\n gap: '$2',\n zIndex: 1,\n size: '100%',\n visibility: showControls ? `` : `hidden`,\n opacity: showControls ? `1` : '0',\n }}\n >\n <SeekControl\n title=\"backward\"\n css={{\n visibility: hoverControlsVisible.seekBackward ? `` : `hidden`,\n opacity: hoverControlsVisible.seekBackward ? `1` : '0',\n }}\n >\n <BackwardArrowIcon width={32} height={32} />\n </SeekControl>\n <Box\n css={{\n bg: 'rgba(0, 0, 0, 0.6)',\n r: '$round',\n }}\n >\n <PlayPauseButton isPaused={isPaused} width={48} height={48} />\n </Box>\n <SeekControl\n title=\"forward\"\n css={{\n visibility: hoverControlsVisible.seekForward ? `` : `hidden`,\n opacity: hoverControlsVisible.seekForward ? `1` : '0',\n }}\n >\n <ForwardArrowIcon width={32} height={32} />\n </SeekControl>\n </Flex>\n );\n};\n", "import React, { MouseEvent } from 'react';\nimport { PauseIcon, PlayIcon } from '@100mslive/react-icons';\nimport { IconButton, Tooltip } from '../../..';\nimport { useHMSPlayerContext } from './PlayerContext';\n\nexport const PlayPauseButton = ({\n isPaused,\n width = 20,\n height = 20,\n}: {\n isPaused: boolean;\n width?: number;\n height?: number;\n}) => {\n const { hlsPlayer } = useHMSPlayerContext();\n const onClick = async (event: MouseEvent) => {\n event?.stopPropagation();\n isPaused ? await hlsPlayer?.play() : hlsPlayer?.pause();\n };\n return (\n <Tooltip title={isPaused ? 'Play' : 'Pause'} side=\"top\">\n <IconButton onClick={onClick} data-testid=\"play_pause_btn\">\n {isPaused ? <PlayIcon width={width} height={height} /> : <PauseIcon width={width} height={height} />}\n </IconButton>\n </Tooltip>\n );\n};\n", "import React, { useContext } from 'react';\nimport { HMSHLSPlayer } from '@100mslive/hls-player';\n\ntype IHMSPlayerContext = {\n hlsPlayer?: HMSHLSPlayer;\n};\n\nexport const HMSPlayerContext = React.createContext<IHMSPlayerContext>({\n hlsPlayer: undefined,\n});\n\nexport const useHMSPlayerContext = () => {\n const context = useContext(HMSPlayerContext);\n return context;\n};\n", "import React, { MouseEventHandler } from 'react';\nimport { IconButton, Tooltip } from '../../..';\n\nexport const SeekControl = ({\n title,\n onClick,\n children,\n css,\n}: {\n title: string;\n onClick?: MouseEventHandler<HTMLButtonElement>;\n css?: any;\n children: React.ReactNode;\n}) => {\n return (\n <Tooltip title={title} side=\"top\">\n <IconButton onClick={onClick} data-testid=\"backward_forward_arrow_btn\" css={css}>\n {children}\n </IconButton>\n </Tooltip>\n );\n};\n", "import React, { useCallback, useEffect, useState } from 'react';\nimport { Box, Flex, Slider } from '../../..';\nimport { useHMSPlayerContext } from './PlayerContext';\nimport { getDuration, getPercentage } from './utils';\n\nexport const VideoProgress = ({\n seekProgress,\n setSeekProgress,\n}: {\n seekProgress: boolean;\n setSeekProgress: (value: boolean) => void;\n}) => {\n const { hlsPlayer } = useHMSPlayerContext();\n const [videoProgress, setVideoProgress] = useState<number>(0);\n const [bufferProgress, setBufferProgress] = useState(0);\n const videoEl = hlsPlayer?.getVideoElement();\n\n const setProgress = useCallback(() => {\n if (!videoEl) {\n return;\n }\n const duration = getDuration(videoEl);\n const videoProgress = Math.floor(getPercentage(videoEl.currentTime, duration));\n let bufferProgress = 0;\n if (videoEl.buffered.length > 0) {\n bufferProgress = Math.floor(getPercentage(videoEl.buffered?.end(0), duration));\n }\n if (!isNaN(videoProgress)) {\n setVideoProgress(videoProgress);\n }\n if (!isNaN(bufferProgress)) {\n setBufferProgress(bufferProgress);\n }\n }, [videoEl]);\n const timeupdateHandler = useCallback(() => {\n if (!videoEl || seekProgress) {\n return;\n }\n setProgress();\n }, [seekProgress, setProgress, videoEl]);\n useEffect(() => {\n if (!videoEl) {\n return;\n }\n setProgress();\n videoEl.addEventListener('timeupdate', timeupdateHandler);\n return function cleanup() {\n videoEl?.removeEventListener('timeupdate', timeupdateHandler);\n };\n }, [setProgress, timeupdateHandler, videoEl]);\n\n const onProgress = (progress: number[]) => {\n const progress1 = Math.floor(getPercentage(progress[0], 100));\n const videoEl = hlsPlayer?.getVideoElement();\n if (!videoEl) {\n return;\n }\n const duration = isFinite(videoEl.duration) ? videoEl.duration : videoEl.seekable?.end(0) || 0;\n const currentTime = (progress1 * duration) / 100;\n hlsPlayer?.seekTo(currentTime);\n setProgress();\n };\n\n if (!videoEl) {\n return null;\n }\n return (\n <Flex align=\"center\" css={{ cursor: 'pointer', h: '$2', alignSelf: 'stretch' }}>\n <Slider\n id=\"video-actual-rest\"\n css={{\n cursor: 'pointer',\n h: '$2',\n zIndex: 1,\n transition: `all .2s ease .5s`,\n }}\n min={0}\n max={100}\n step={1}\n value={[videoProgress]}\n showTooltip={false}\n onValueChange={onProgress}\n onPointerDown={() => setSeekProgress(true)}\n onPointerUp={() => setSeekProgress(false)}\n thumbStyles={{ w: '$6', h: '$6' }}\n />\n <Box\n id=\"video-buffer\"\n css={{\n h: '$2',\n width: `${bufferProgress - videoProgress}%`,\n background: '$on_surface_high',\n position: 'absolute',\n left: `${videoProgress}%`,\n opacity: '25%',\n }}\n />\n </Flex>\n );\n};\n", "export function getPercentage(a: number, b: number) {\n return (a / b) * 100;\n}\n\n/**\n * Take a time in seconds and return its equivalent time in hh:mm:ss format\n * @param {number} timeInSeconds if given as floating point value, it is floored.\n *\n * @returns a string representing timeInSeconds in HH:MM:SS format.\n */\nexport function getDurationFromSeconds(timeInSeconds: number) {\n let time = Math.floor(timeInSeconds);\n const hours = Math.floor(time / 3600);\n time = time - hours * 3600;\n const minutes = Math.floor(time / 60);\n const seconds = Math.floor(time - minutes * 60);\n\n const prefixedMinutes = `${minutes < 10 ? `0${minutes}` : minutes}`;\n const prefixedSeconds = `${seconds < 10 ? `0${seconds}` : seconds}`;\n\n let videoTimeStr = `${prefixedMinutes}:${prefixedSeconds}`;\n if (hours) {\n const prefixedHours = `${hours < 10 ? `0${hours}` : hours}`;\n videoTimeStr = `${prefixedHours}:${prefixedMinutes}:${prefixedSeconds}`;\n }\n return videoTimeStr;\n}\n\nexport function getDuration(videoEl: HTMLVideoElement): number {\n if (isFinite(videoEl.duration)) {\n return videoEl.duration;\n }\n if (videoEl.seekable.length > 0) {\n return videoEl.seekable.end(0);\n }\n return 0;\n}\n", "import React, { useCallback, useEffect, useState } from 'react';\nimport { HMSHLSPlayerEvents } from '@100mslive/hls-player';\nimport { Text } from '../../../Text';\nimport { useHMSPlayerContext } from './PlayerContext';\nimport { getDuration, getDurationFromSeconds } from './utils';\n\nexport const VideoTime = () => {\n const { hlsPlayer } = useHMSPlayerContext();\n\n const [videoTime, setVideoTime] = useState(getDurationFromSeconds(0));\n\n const updateTime = useCallback(\n (currentTime: number) => {\n const videoEl = hlsPlayer?.getVideoElement();\n if (videoEl) {\n const duration = getDuration(videoEl);\n setVideoTime(getDurationFromSeconds(duration - currentTime));\n } else {\n setVideoTime(getDurationFromSeconds(currentTime));\n }\n },\n [hlsPlayer],\n );\n useEffect(() => {\n const timeupdateHandler = (currentTime: number) => {\n updateTime(currentTime);\n };\n if (hlsPlayer) {\n hlsPlayer.on(HMSHLSPlayerEvents.CURRENT_TIME, timeupdateHandler);\n const videoEl = hlsPlayer?.getVideoElement();\n updateTime(videoEl.currentTime);\n }\n return function cleanup() {\n hlsPlayer?.off(HMSHLSPlayerEvents.CURRENT_TIME, timeupdateHandler);\n };\n }, [hlsPlayer, updateTime]);\n\n return hlsPlayer ? (\n <Text\n variant=\"body1\"\n css={{\n minWidth: '$16',\n c: '$on_surface_medium',\n display: 'flex',\n justifyContent: 'center',\n fontWeight: '$regular',\n }}\n >\n -{videoTime}\n </Text>\n ) : null;\n};\n", "import React, { useState } from 'react';\nimport { VolumeOneIcon, VolumeTwoIcon, VolumeZeroIcon } from '@100mslive/react-icons';\nimport { Flex, Slider } from '../../..';\nimport { useHMSPlayerContext } from './PlayerContext';\n\nexport const VolumeControl = () => {\n const { hlsPlayer } = useHMSPlayerContext();\n const [volume, setVolume] = useState(hlsPlayer?.volume ?? 100);\n const [showSlider, setShowSlider] = useState(false);\n\n return (\n <Flex\n align=\"center\"\n css={{ color: '$on_surface_high' }}\n onMouseOver={event => {\n event.stopPropagation();\n setShowSlider(true);\n }}\n onMouseLeave={event => {\n event.stopPropagation();\n setShowSlider(false);\n }}\n >\n <VolumeIcon\n volume={volume}\n onClick={() => {\n if (volume > 0) {\n setVolume(0);\n hlsPlayer?.setVolume(0);\n } else {\n setVolume(100);\n hlsPlayer?.setVolume(100);\n }\n }}\n />\n <Slider\n css={{\n mx: '$4',\n w: '$20',\n cursor: 'pointer',\n '@sm': { w: '$14' },\n '@xs': { w: '$14' },\n opacity: showSlider ? '1' : '0',\n display: showSlider ? '' : 'none',\n transition: `all .2s ease .5s`,\n }}\n min={0}\n max={100}\n step={1}\n value={[volume]}\n onValueChange={volume => {\n hlsPlayer?.setVolume(volume[0]);\n setVolume(volume[0]);\n }}\n thumbStyles={{ w: '$6', h: '$6' }}\n />\n </Flex>\n );\n};\n\nconst VolumeIcon = ({ volume, onClick }: { volume: number; onClick: () => void }) => {\n if (volume === 0) {\n return <VolumeZeroIcon style={{ cursor: 'pointer', transition: 'color 0.3s' }} onClick={onClick} />;\n }\n return volume < 50 ? (\n <VolumeOneIcon style={{ cursor: 'pointer', transition: 'color 0.3s' }} onClick={onClick} />\n ) : (\n <VolumeTwoIcon style={{ cursor: 'pointer', transition: 'color 0.3s' }} onClick={onClick} />\n );\n};\n", "import React from 'react';\nimport { ExpandIcon, ShrinkIcon } from '@100mslive/react-icons';\nimport { Flex, IconButton, Tooltip } from '../../..';\n\nexport const FullScreenButton = ({ isFullScreen, onToggle }: { isFullScreen: boolean; onToggle: () => void }) => {\n return (\n <Tooltip title={`${isFullScreen ? 'Exit' : 'Go'} fullscreen`} side=\"top\">\n <IconButton css={{ margin: '0px' }} onClick={onToggle} key=\"fullscreen_btn\" data-testid=\"fullscreen_btn\">\n <Flex>{isFullScreen ? <ShrinkIcon /> : <ExpandIcon />}</Flex>\n </IconButton>\n </Tooltip>\n );\n};\n", "import React from 'react';\nimport { useMedia } from 'react-use';\nimport { VolumeTwoIcon } from '@100mslive/react-icons';\nimport { Button, config, Dialog, IconButton, Text } from '../../..';\n// @ts-ignore\nimport { DialogContent, DialogRow } from '../../primitives/DialogContent';\nimport { useIsLandscape } from '../../common/hooks';\n\nexport function HLSAutoplayBlockedPrompt({\n open,\n unblockAutoPlay,\n}: {\n open: boolean;\n unblockAutoPlay: () => Promise<void>;\n}) {\n const isLandscape = useIsLandscape();\n const isMobile = useMedia(config.media.md);\n if ((isMobile || isLandscape) && open) {\n return (\n <IconButton\n css={{\n border: '1px solid white',\n bg: 'white',\n color: '#000',\n r: '$2',\n }}\n onClick={async () => await unblockAutoPlay()}\n >\n <VolumeTwoIcon width=\"32\" height=\"32\" />\n <Text\n variant=\"body1\"\n css={{\n fontWeight: '$semiBold',\n px: '$2',\n color: '#000',\n }}\n >\n Tap To Unmute\n </Text>\n </IconButton>\n );\n }\n return (\n <Dialog.Root\n open={open}\n onOpenChange={async value => {\n if (!value) {\n await unblockAutoPlay();\n }\n }}\n >\n <DialogContent title=\"Attention\" closeable={false}>\n <DialogRow>\n <Text variant=\"md\">\n The browser wants us to get a confirmation for playing the HLS Stream. Please click \"play stream\" to\n proceed.\n </Text>\n </DialogRow>\n <DialogRow justify=\"end\">\n <Button\n variant=\"primary\"\n onClick={async () => {\n await unblockAutoPlay();\n }}\n >\n Play stream\n </Button>\n </DialogRow>\n </DialogContent>\n </Dialog.Root>\n );\n}\n", "import React from 'react';\nimport { ClosedCaptionIcon, OpenCaptionIcon } from '@100mslive/react-icons';\nimport { IconButton, Tooltip } from '../../../';\nimport { useHMSPlayerContext } from './PlayerContext';\n\nexport function HLSCaptionSelector({ isEnabled }: { isEnabled: boolean }) {\n const { hlsPlayer } = useHMSPlayerContext();\n return (\n <Tooltip title=\"Subtitles/closed captions\" side=\"top\">\n <IconButton css={{ p: '$2' }} onClick={() => hlsPlayer?.toggleCaption()}>\n {isEnabled ? <ClosedCaptionIcon width=\"20\" height=\"20px\" /> : <OpenCaptionIcon width=\"20\" height=\"20px\" />}\n </IconButton>\n </Tooltip>\n );\n}\n", "import React from 'react';\nimport { useMedia } from 'react-use';\nimport { HMSHLSLayer } from '@100mslive/hls-player';\nimport { CheckIcon, CrossIcon, SettingsIcon } from '@100mslive/react-icons';\nimport { Box, Dropdown, Flex, Text, Tooltip } from '../../..';\nimport { Sheet } from '../../../Sheet';\nimport { config } from '../../../Theme';\nimport { useIsLandscape } from '../../common/hooks';\n\nexport function HLSQualitySelector({\n open,\n onOpenChange,\n layers,\n onQualityChange,\n selection,\n isAuto,\n containerRef,\n}: {\n open: boolean;\n onOpenChange: (value: boolean) => void;\n layers: HMSHLSLayer[];\n onQualityChange: (quality: { [key: string]: string | number } | HMSHLSLayer) => void;\n selection: HMSHLSLayer;\n isAuto: boolean;\n containerRef?: HTMLDivElement;\n}) {\n const isMobile = useMedia(config.media.md);\n const isLandscape = useIsLandscape();\n\n if (layers.length === 0) {\n return null;\n }\n if (isMobile || isLandscape) {\n return (\n <Sheet.Root open={open} onOpenChange={onOpenChange}>\n <Sheet.Trigger asChild data-testid=\"quality_selector\">\n <Flex\n css={{\n color: '$on_primary_high',\n r: '$1',\n cursor: 'pointer',\n p: '$2',\n }}\n >\n <SettingsIcon />\n </Flex>\n </Sheet.Trigger>\n <Sheet.Content\n container={containerRef}\n css={{ bg: '$surface_default', pb: '$1' }}\n onClick={() => onOpenChange(false)}\n >\n <Sheet.Title\n css={{\n display: 'flex',\n color: '$on_surface_high',\n w: '100%',\n justifyContent: 'space-between',\n mt: '$8',\n fontSize: '$md',\n px: '$10',\n pb: '$8',\n borderBottom: '1px solid $border_bright',\n alignItems: 'center',\n }}\n >\n Quality\n <Sheet.Close css={{ color: '$on_surface_high' }} onClick={() => onOpenChange(false)}>\n <CrossIcon />\n </Sheet.Close>\n </Sheet.Title>\n {layers.map(layer => {\n return (\n <Flex\n align=\"center\"\n css={{\n w: '100%',\n bg: '$surface_default',\n '&:hover': {\n bg: '$surface_brighter',\n },\n cursor: 'pointer',\n gap: '$4',\n py: '$8',\n px: '$10',\n }}\n key={layer.width}\n onClick={() => onQualityChange(layer)}\n >\n <Text variant=\"caption\" css={{ fontWeight: '$semiBold' }}>\n {getQualityText(layer)}\n </Text>\n <Text variant=\"caption\" css={{ flex: '1 1 0', c: '$on_surface_low', pl: '$2' }}>\n {getBitrateText(layer)}\n </Text>\n {!isAuto && layer.width === selection?.width && layer.height === selection?.height && (\n <CheckIcon width=\"16px\" height=\"16px\" />\n )}\n </Flex>\n );\n })}\n <Flex\n align=\"center\"\n css={{\n w: '100%',\n bg: '$surface_default',\n '&:hover': {\n bg: '$surface_brighter',\n },\n cursor: 'pointer',\n gap: '$4',\n py: '$8',\n px: '$10',\n }}\n key=\"auto\"\n onClick={() => onQualityChange({ height: 'auto' })}\n >\n <Text variant=\"caption\" css={{ fontWeight: '$semiBold', flex: '1 1 0' }}>\n Auto\n </Text>\n {isAuto && <CheckIcon width=\"16px\" height=\"16px\" />}\n </Flex>\n </Sheet.Content>\n </Sheet.Root>\n );\n }\n return (\n <Dropdown.Root open={open} onOpenChange={value => onOpenChange(value)} modal={false}>\n <Dropdown.Trigger asChild data-testid=\"quality_selector\">\n <Flex\n css={{\n color: '$on_primary_high',\n r: '$1',\n cursor: 'pointer',\n p: '$2',\n }}\n >\n <Tooltip title=\"Select Quality\" side=\"top\">\n <Flex align=\"center\">\n <Box\n css={{\n w: '$9',\n h: '$9',\n display: 'inline-flex',\n alignItems: 'center',\n c: '$on_surface_high',\n }}\n >\n <SettingsIcon />\n </Box>\n <Text\n variant={{\n '@md': 'sm',\n '@sm': 'xs',\n '@xs': 'tiny',\n }}\n css={{ display: 'flex', alignItems: 'center', ml: '$2', c: '$on_surface_medium' }}\n >\n {isAuto && (\n <>\n Auto\n <Box\n css={{\n mx: '$2',\n w: '$2',\n h: '$2',\n background: '$on_surface_medium',\n r: '$1',\n }}\n />\n </>\n )}\n {selection && Math.min(selection.width || 0, selection.height || 0)}p\n </Text>\n </Flex>\n </Tooltip>\n </Flex>\n </Dropdown.Trigger>\n <Dropdown.Portal container={containerRef}>\n <Dropdown.Content\n sideOffset={5}\n align=\"end\"\n css={{\n height: 'auto',\n maxHeight: '$52',\n w: '$40',\n bg: '$surface_bright',\n py: '$4',\n gap: '$4',\n display: 'grid',\n }}\n >\n {layers.map(layer => {\n return (\n <Dropdown.Item\n onClick={() => onQualityChange(layer)}\n key={layer.width}\n css={{\n bg:\n !isAuto && layer.width === selection?.width && layer.height === selection?.height\n ? '$surface_default'\n : '$surface_bright',\n '&:hover': {\n bg: '$surface_brighter',\n },\n p: '$2 $4 $2 $8',\n h: '$12',\n gap: '$2',\n }}\n >\n <Text variant=\"caption\" css={{ fontWeight: '$semiBold' }}>\n {getQualityText(layer)}\n </Text>\n <Text variant=\"caption\" css={{ flex: '1 1 0', c: '$on_surface_low', pl: '$2' }}>\n {getBitrateText(layer)}\n </Text>\n {!isAuto && layer.width === selection?.width && layer.height === selection?.height && (\n <CheckIcon width=\"16px\" height=\"16px\" />\n )}\n </Dropdown.Item>\n );\n })}\n <Dropdown.Item\n onClick={() => onQualityChange({ height: 'auto' })}\n key=\"auto\"\n css={{\n bg: !isAuto ? '$surface_bright' : '$surface_default',\n '&:hover': {\n bg: '$surface_brighter',\n },\n p: '$2 $4 $2 $8',\n h: '$12',\n gap: '$2',\n }}\n >\n <Text variant=\"caption\" css={{ fontWeight: '$semiBold', flex: '1 1 0' }}>\n Auto\n </Text>\n {isAuto && <CheckIcon width=\"16px\" height=\"16px\" />}\n </Dropdown.Item>\n </Dropdown.Content>\n </Dropdown.Portal>\n </Dropdown.Root>\n );\n}\n\nconst getQualityText = (layer: HMSHLSLayer) => `${Math.min(layer.height || 0, layer.width || 0)}p `;\nconst getBitrateText = (layer: HMSHLSLayer) => `(${(Number(layer.bitrate / 1000) / 1000).toFixed(2)} Mbps)`;\n", "import React from 'react';\nimport { ChevronDownIcon } from '@100mslive/react-icons';\nimport { Flex } from '../../../Layout';\nimport { Text } from '../../../Text';\n// @ts-ignore: No implicit any\nimport { Logo } from '../Header/HeaderComponents';\nimport { RoomDetailsRow } from '../RoomDetails/RoomDetailsRow';\nimport { useRoomLayoutHeader } from '../../provider/roomLayoutProvider/hooks/useRoomLayoutScreen';\n// @ts-ignore\nimport { useIsSidepaneTypeOpen, useSidepaneToggle } from '../AppData/useSidepane';\nimport { SIDE_PANE_OPTIONS } from '../../common/constants';\n\n/*\n\tplayer handler --> left -> go live with timer or live, right -> expand icon \n\tinbetween -> play pause icon, double tap to go back/forward\n\tseekbar\n\thalf page will have chat or participant view\n*/\nexport const HLSViewTitle = () => {\n const { title, details, description } = useRoomLayoutHeader();\n const toggleDetailsPane = useSidepaneToggle(SIDE_PANE_OPTIONS.ROOM_DETAILS);\n const isDetailSidepaneOpen = useIsSidepaneTypeOpen(SIDE_PANE_OPTIONS.ROOM_DETAILS);\n\n if (isDetailSidepaneOpen) {\n return (\n <Flex\n gap=\"4\"\n align=\"center\"\n justify=\"between\"\n css={{\n position: 'relative',\n h: 'fit-content',\n w: '100%',\n borderBottom: '1px solid $border_bright',\n p: '$8',\n backgroundColor: '$surface_dim',\n }}\n >\n <Text variant=\"sub2\" css={{ fontWeight: '$semiBold' }}>\n About Session\n </Text>\n <Flex\n onClick={toggleDetailsPane}\n css={{\n color: '$on_surface_high',\n cursor: 'pointer',\n '&:hover': { opacity: '0.8' },\n }}\n >\n <ChevronDownIcon />\n </Flex>\n </Flex>\n );\n }\n return (\n <Flex\n gap=\"4\"\n align=\"center\"\n css={{\n position: 'relative',\n h: 'fit-content',\n w: '100%',\n borderBottom: '1px solid $border_bright',\n p: '$8',\n backgroundColor: '$surface_dim',\n }}\n >\n <Logo />\n <Flex direction=\"column\">\n {title ? (\n <Text variant=\"sub2\" css={{ fontWeight: '$semiBold' }}>\n {title}\n </Text>\n ) : null}\n <Flex>\n <RoomDetailsRow details={details} />\n {description ? (\n <Text variant=\"caption\" css={{ color: '$on_surface_medium' }} onClick={toggleDetailsPane}>\n &nbsp;...more\n </Text>\n ) : null}\n </Flex>\n </Flex>\n </Flex>\n );\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,OAAOA,WAAS,eAAAC,cAAa,aAAAC,YAAW,QAAQ,YAAAC,iBAAgB;AAChE,SAAS,eAAe,YAAAC,WAAU,aAAa,iBAAiB;AAChE,SAAS,kBAAkB,cAAc,sBAAAC,2BAA0B;AACnE,OAAO,gBAAgB;AACvB,SAAS,OAAO,SAAS;AACzB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB,kBAAkB;;;ACjB5C;AAAA,OAAO,SAAS,YAAY;AAC5B,SAAS,iBAAiB;AAKnB,SAAS,gBAAgB,EAAE,eAAe,QAAQ,GAAG;AAN5D;AAOE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,QACH,UAAU;AAAA,QACV,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,iBAAiB;AAAA,QACjB,cAAc;AAAA,MAChB;AAAA,MACA,WAAU;AAAA;AAAA,IAEV,oCAAC,sBAAW,KAAK,EAAE,UAAU,YAAY,KAAK,MAAM,OAAO,KAAK,GAAG,SAAS,WAC1E,oCAAC,eAAU,CACb;AAAA,IACA,oCAAC,eAAY,OAAM,SACjB,oCAAC,QAAK,OAAM,YACV;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,EAAE,QAAQ,WAAW,gBAAgB,YAAY;AAAA,QACxD,MAAM,+CAAe;AAAA,QACrB,QAAO;AAAA,QACP,KAAI;AAAA;AAAA,MACL;AAAA,IAED,CACF,CACF;AAAA,IACA,oCAAC,eAAY,OAAM,gBAChB,KAAI,oDAAe,cAAf,mBAA0B,KAAK,KAAI,oDAAe,cAAf,mBAA0B,MAAM,EAC1E;AAAA,IACA,oCAAC,eAAY,OAAM,sBAAmB,oDAAe,qBAAf,mBAAiC,QAAQ,IAAG,GAAC;AAAA,IACnF,oCAAC,eAAY,OAAM,sBAChB,KAAI,+CAAe,sBAAqB,MAAO,MAAO,QAAQ,CAAC,CAAC,OACnE;AAAA,IACA,oCAAC,eAAY,OAAM,aAAW,KAAI,+CAAe,YAAW,MAAO,MAAO,QAAQ,CAAC,CAAC,OAAQ;AAAA,IAC5F,oCAAC,eAAY,OAAM,wBAChB,uBAAuB,cAAc,mBAAmB,GAAI,CAC/D;AAAA,IACA,oCAAC,eAAY,OAAM,oBAAkB,+CAAe,aAAc;AAAA,EACpE;AAEJ;AAOO,SAAS,uBAAuB,eAAe;AACpD,MAAI,OAAO,KAAK,MAAM,aAAa;AACnC,QAAM,QAAQ,KAAK,MAAM,OAAO,IAAI;AACpC,SAAO,OAAO,QAAQ;AACtB,QAAM,UAAU,KAAK,MAAM,OAAO,EAAE;AACpC,QAAM,UAAU,KAAK,MAAM,OAAO,UAAU,EAAE;AAE9C,QAAM,kBAAkB,GAAG,UAAU,KAAK,MAAM,UAAU,OAAO;AACjE,QAAM,kBAAkB,GAAG,UAAU,KAAK,MAAM,UAAU,OAAO;AAEjE,MAAI,eAAe,GAAG,eAAe,IAAI,eAAe;AACxD,MAAI,OAAO;AACT,UAAM,gBAAgB,GAAG,QAAQ,KAAK,MAAM,QAAQ,KAAK;AACzD,mBAAe,GAAG,aAAa,IAAI,eAAe,IAAI,eAAe;AAAA,EACvE;AACA,SAAO;AACT;AAEA,IAAM,cAAc,KAAK,CAAC,EAAE,OAAO,SAAS,MAAM;AAChD,SACE,oCAAC,QAAK,KAAK,GAAG,SAAQ,UAAS,KAAK,EAAE,OAAO,OAAO,KAClD;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,QACH,OAAO;AAAA,QACP,OAAO,EAAE,UAAU,MAAM;AAAA,QACzB,OAAO,EAAE,UAAU,MAAM;AAAA;AAAA,MAE3B;AAAA;AAAA,IAEC;AAAA,EACH,GACA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,QACH,OAAO,EAAE,UAAU,MAAM;AAAA,QACzB,OAAO,EAAE,UAAU,MAAM;AAAA,QACzB,OAAO;AAAA,QACP,cAAc;AAAA;AAAA,MAEhB;AAAA;AAAA,IAEC;AAAA,EACH,CACF;AAEJ,CAAC;;;ACpGD;;;ACAA;AAEO,IAAM,gBAAgB,OAAO,MAAM;AAAA,EACxC,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,OAAO;AAAA,EACP,KAAK;AACP,CAAC;AAEM,IAAM,eAAe,OAAO,MAAM;AAAA,EACvC,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,KAAK;AACP,CAAC;AACM,IAAM,gBAAgB,OAAO,MAAM;AAAA,EACxC,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,KAAK;AACP,CAAC;;;ACrBD;AAAA,OAAOC,UAAS,kBAAkB;AAG3B,IAAM,WAAW,WAAW,CAAC,IAAwB,aAAa;AAArC,eAAE,WAHtC,IAGoC,IAAe,kBAAf,IAAe,CAAb;AACpC,SACE,gBAAAC,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,eAAY;AAAA,MACZ,KAAK;AAAA,QACH,MAAM;AAAA,QACN,UAAU;AAAA,QACV,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,WAAW;AAAA,YACT,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,QACA,gBAAgB;AAAA;AAAA,UAEd,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,WAAW;AAAA,UACX,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,eAAe;AAAA,QACjB;AAAA,QACA,6CAA6C;AAAA,UAC3C,SAAS;AAAA,UACT,WAAW;AAAA,QACb;AAAA,QACA,+CAA+C;AAAA,UAC7C,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,MACA,WAAU;AAAA,OACN;AAAA,IAEJ,gBAAAA,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,UAAU;AAAA,QACZ;AAAA,QACA,KAAK;AAAA,QACL,aAAW;AAAA,QACX,yBAAuB;AAAA;AAAA,IACzB;AAAA,IACC;AAAA,EACH;AAEJ,CAAC;;;ACtDD;AAAA,OAAOC,YAAW;AAClB,SAAS,gBAAgB;AACzB,SAAS,mBAAmB,wBAAwB;;;ACFpD;AAAA,OAAOC,YAA2B;AAClC,SAAS,WAAW,gBAAgB;;;ACDpC;AAAA,OAAOC,UAAS,kBAAkB;AAO3B,IAAM,mBAAmBA,OAAM,cAAiC;AAAA,EACrE,WAAW;AACb,CAAC;AAEM,IAAM,sBAAsB,MAAM;AACvC,QAAM,UAAU,WAAW,gBAAgB;AAC3C,SAAO;AACT;;;ADTO,IAAM,kBAAkB,CAAC;AAAA,EAC9B;AAAA,EACA,QAAQ;AAAA,EACR,SAAS;AACX,MAIM;AACJ,QAAM,EAAE,WAAAC,WAAU,IAAI,oBAAoB;AAC1C,QAAM,UAAU,CAAO,UAAsB;AAC3C,mCAAO;AACP,eAAW,MAAMA,cAAA,gBAAAA,WAAW,SAASA,cAAA,gBAAAA,WAAW;AAAA,EAClD;AACA,SACE,gBAAAC,OAAA,cAAC,WAAQ,OAAO,WAAW,SAAS,SAAS,MAAK,SAChD,gBAAAA,OAAA,cAAC,cAAW,SAAkB,eAAY,oBACvC,WAAW,gBAAAA,OAAA,cAAC,YAAS,OAAc,QAAgB,IAAK,gBAAAA,OAAA,cAAC,aAAU,OAAc,QAAgB,CACpG,CACF;AAEJ;;;AE1BA;AAAA,OAAOC,YAAkC;AAGlC,IAAM,cAAc,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAKM;AACJ,SACE,gBAAAC,OAAA,cAAC,WAAQ,OAAc,MAAK,SAC1B,gBAAAA,OAAA,cAAC,cAAW,SAAkB,eAAY,8BAA6B,OACpE,QACH,CACF;AAEJ;;;AHVO,IAAM,wBAAwB,CAAC;AAAA,EACpC;AAAA,EACA;AACF,MAGM;AACJ,SACE,gBAAAC,OAAA,cAAAA,OAAA,gBACE,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAS,OAAK;AACZ,UAAE,gBAAgB;AAClB,iBAAS,GAAG;AAAA,MACd;AAAA,MACA,OAAM;AAAA;AAAA,IAEN,gBAAAA,OAAA,cAAC,qBAAkB,OAAO,IAAI,QAAQ,IAAI;AAAA,EAC5C,GACA,gBAAAA,OAAA,cAAC,mBAAgB,UAAoB,GACrC,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAS,OAAK;AACZ,UAAE,gBAAgB;AAClB,iBAAS,EAAE;AAAA,MACb;AAAA,MACA,OAAM;AAAA;AAAA,IAEN,gBAAAA,OAAA,cAAC,oBAAiB,OAAO,IAAI,QAAQ,IAAI;AAAA,EAC3C,CACF;AAEJ;AAGO,IAAM,+BAA+B,CAAC;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AACF,MAQM;AACJ,QAAM,WAAW,SAAS,OAAO,MAAM,EAAE;AACzC,QAAM,cAAc,eAAe;AAEnC,MAAI,CAAC,YAAY,CAAC,aAAa;AAE7B,WACE,gBAAAA,OAAA,cAAAA,OAAA,gBACE,gBAAAA,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,UACH,IAAI;AAAA,UACJ,GAAG;AAAA,UACH,MAAM;AAAA,UACN,YAAY,qBAAqB,eAAe,KAAK;AAAA,UACrD,SAAS,qBAAqB,eAAe,MAAM;AAAA,QACrD;AAAA,QACA,WAAU;AAAA,QACV,OAAM;AAAA;AAAA,MAEN,gBAAAA,OAAA,cAAC,eAAY,OAAM,cACjB,gBAAAA,OAAA,cAAC,qBAAkB,OAAO,IAAI,QAAQ,IAAI,CAC5C;AAAA,MACA,gBAAAA,OAAA,cAAC,QAAK,SAAQ,SAAQ,KAAK,EAAE,YAAY,WAAW,KAAG,SAEvD;AAAA,IACF,GACA,gBAAAA,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,UACH,IAAI;AAAA,UACJ,GAAG;AAAA,UACH,YAAY,qBAAqB,YAAY,KAAK;AAAA,UAClD,SAAS,qBAAqB,YAAY,MAAM;AAAA,QAClD;AAAA;AAAA,MAEA,gBAAAA,OAAA,cAAC,mBAAgB,UAAoB,OAAO,IAAI,QAAQ,IAAI;AAAA,IAC9D,GACA,gBAAAA,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,UACH,IAAI;AAAA,UACJ,GAAG;AAAA,UACH,MAAM;AAAA,UACN,YAAY,qBAAqB,cAAc,KAAK;AAAA,UACpD,SAAS,qBAAqB,cAAc,MAAM;AAAA,QACpD;AAAA,QACA,WAAU;AAAA,QACV,OAAM;AAAA;AAAA,MAEN,gBAAAA,OAAA,cAAC,eAAY,OAAM,aACjB,gBAAAA,OAAA,cAAC,oBAAiB,OAAO,IAAI,QAAQ,IAAI,CAC3C;AAAA,MACA,gBAAAA,OAAA,cAAC,QAAK,SAAQ,SAAQ,KAAK,EAAE,YAAY,WAAW,KAAG,SAEvD;AAAA,IACF,CACF;AAAA,EAEJ;AAEA,SACE,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,SAAQ;AAAA,MACR,KAAK;AAAA,QACH,UAAU;AAAA,QACV,IAAI;AAAA,QACJ,SAAS;AAAA,QACT,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,YAAY,eAAe,KAAK;AAAA,QAChC,SAAS,eAAe,MAAM;AAAA,MAChC;AAAA;AAAA,IAEA,gBAAAA,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,KAAK;AAAA,UACH,YAAY,qBAAqB,eAAe,KAAK;AAAA,UACrD,SAAS,qBAAqB,eAAe,MAAM;AAAA,QACrD;AAAA;AAAA,MAEA,gBAAAA,OAAA,cAAC,qBAAkB,OAAO,IAAI,QAAQ,IAAI;AAAA,IAC5C;AAAA,IACA,gBAAAA,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,UACH,IAAI;AAAA,UACJ,GAAG;AAAA,QACL;AAAA;AAAA,MAEA,gBAAAA,OAAA,cAAC,mBAAgB,UAAoB,OAAO,IAAI,QAAQ,IAAI;AAAA,IAC9D;AAAA,IACA,gBAAAA,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,KAAK;AAAA,UACH,YAAY,qBAAqB,cAAc,KAAK;AAAA,UACpD,SAAS,qBAAqB,cAAc,MAAM;AAAA,QACpD;AAAA;AAAA,MAEA,gBAAAA,OAAA,cAAC,oBAAiB,OAAO,IAAI,QAAQ,IAAI;AAAA,IAC3C;AAAA,EACF;AAEJ;;;AI7JA;AAAA,OAAOC,UAAS,aAAa,WAAW,gBAAgB;;;ACAxD;AAAO,SAAS,cAAc,GAAW,GAAW;AAClD,SAAQ,IAAI,IAAK;AACnB;AAQO,SAASC,wBAAuB,eAAuB;AAC5D,MAAI,OAAO,KAAK,MAAM,aAAa;AACnC,QAAM,QAAQ,KAAK,MAAM,OAAO,IAAI;AACpC,SAAO,OAAO,QAAQ;AACtB,QAAM,UAAU,KAAK,MAAM,OAAO,EAAE;AACpC,QAAM,UAAU,KAAK,MAAM,OAAO,UAAU,EAAE;AAE9C,QAAM,kBAAkB,GAAG,UAAU,KAAK,IAAI,OAAO,KAAK,OAAO;AACjE,QAAM,kBAAkB,GAAG,UAAU,KAAK,IAAI,OAAO,KAAK,OAAO;AAEjE,MAAI,eAAe,GAAG,eAAe,IAAI,eAAe;AACxD,MAAI,OAAO;AACT,UAAM,gBAAgB,GAAG,QAAQ,KAAK,IAAI,KAAK,KAAK,KAAK;AACzD,mBAAe,GAAG,aAAa,IAAI,eAAe,IAAI,eAAe;AAAA,EACvE;AACA,SAAO;AACT;AAEO,SAAS,YAAY,SAAmC;AAC7D,MAAI,SAAS,QAAQ,QAAQ,GAAG;AAC9B,WAAO,QAAQ;AAAA,EACjB;AACA,MAAI,QAAQ,SAAS,SAAS,GAAG;AAC/B,WAAO,QAAQ,SAAS,IAAI,CAAC;AAAA,EAC/B;AACA,SAAO;AACT;;;AD/BO,IAAM,gBAAgB,CAAC;AAAA,EAC5B;AAAA,EACA;AACF,MAGM;AACJ,QAAM,EAAE,WAAAC,WAAU,IAAI,oBAAoB;AAC1C,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAiB,CAAC;AAC5D,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,CAAC;AACtD,QAAM,UAAUA,cAAA,gBAAAA,WAAW;AAE3B,QAAM,cAAc,YAAY,MAAM;AAjBxC;AAkBI,QAAI,CAAC,SAAS;AACZ;AAAA,IACF;AACA,UAAM,WAAW,YAAY,OAAO;AACpC,UAAMC,iBAAgB,KAAK,MAAM,cAAc,QAAQ,aAAa,QAAQ,CAAC;AAC7E,QAAIC,kBAAiB;AACrB,QAAI,QAAQ,SAAS,SAAS,GAAG;AAC/B,MAAAA,kBAAiB,KAAK,MAAM,eAAc,aAAQ,aAAR,mBAAkB,IAAI,IAAI,QAAQ,CAAC;AAAA,IAC/E;AACA,QAAI,CAAC,MAAMD,cAAa,GAAG;AACzB,uBAAiBA,cAAa;AAAA,IAChC;AACA,QAAI,CAAC,MAAMC,eAAc,GAAG;AAC1B,wBAAkBA,eAAc;AAAA,IAClC;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AACZ,QAAM,oBAAoB,YAAY,MAAM;AAC1C,QAAI,CAAC,WAAW,cAAc;AAC5B;AAAA,IACF;AACA,gBAAY;AAAA,EACd,GAAG,CAAC,cAAc,aAAa,OAAO,CAAC;AACvC,YAAU,MAAM;AACd,QAAI,CAAC,SAAS;AACZ;AAAA,IACF;AACA,gBAAY;AACZ,YAAQ,iBAAiB,cAAc,iBAAiB;AACxD,WAAO,SAAS,UAAU;AACxB,yCAAS,oBAAoB,cAAc;AAAA,IAC7C;AAAA,EACF,GAAG,CAAC,aAAa,mBAAmB,OAAO,CAAC;AAE5C,QAAM,aAAa,CAAC,aAAuB;AAnD7C;AAoDI,UAAM,YAAY,KAAK,MAAM,cAAc,SAAS,CAAC,GAAG,GAAG,CAAC;AAC5D,UAAMC,WAAUH,cAAA,gBAAAA,WAAW;AAC3B,QAAI,CAACG,UAAS;AACZ;AAAA,IACF;AACA,UAAM,WAAW,SAASA,SAAQ,QAAQ,IAAIA,SAAQ,aAAW,KAAAA,SAAQ,aAAR,mBAAkB,IAAI,OAAM;AAC7F,UAAM,cAAe,YAAY,WAAY;AAC7C,IAAAH,cAAA,gBAAAA,WAAW,OAAO;AAClB,gBAAY;AAAA,EACd;AAEA,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AACA,SACE,gBAAAI,OAAA,cAAC,QAAK,OAAM,UAAS,KAAK,EAAE,QAAQ,WAAW,GAAG,MAAM,WAAW,UAAU,KAC3E,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,IAAG;AAAA,MACH,KAAK;AAAA,QACH,QAAQ;AAAA,QACR,GAAG;AAAA,QACH,QAAQ;AAAA,QACR,YAAY;AAAA,MACd;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,MAAM;AAAA,MACN,OAAO,CAAC,aAAa;AAAA,MACrB,aAAa;AAAA,MACb,eAAe;AAAA,MACf,eAAe,MAAM,gBAAgB,IAAI;AAAA,MACzC,aAAa,MAAM,gBAAgB,KAAK;AAAA,MACxC,aAAa,EAAE,GAAG,MAAM,GAAG,KAAK;AAAA;AAAA,EAClC,GACA,gBAAAA,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,IAAG;AAAA,MACH,KAAK;AAAA,QACH,GAAG;AAAA,QACH,OAAO,GAAG,iBAAiB,aAAa;AAAA,QACxC,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,MAAM,GAAG,aAAa;AAAA,QACtB,SAAS;AAAA,MACX;AAAA;AAAA,EACF,CACF;AAEJ;;;AEnGA;AAAA,OAAOC,UAAS,eAAAC,cAAa,aAAAC,YAAW,YAAAC,iBAAgB;AACxD,SAAS,0BAA0B;AAK5B,IAAM,YAAY,MAAM;AAC7B,QAAM,EAAE,WAAAC,WAAU,IAAI,oBAAoB;AAE1C,QAAM,CAAC,WAAW,YAAY,IAAIC,UAASC,wBAAuB,CAAC,CAAC;AAEpE,QAAM,aAAaC;AAAA,IACjB,CAAC,gBAAwB;AACvB,YAAM,UAAUH,cAAA,gBAAAA,WAAW;AAC3B,UAAI,SAAS;AACX,cAAM,WAAW,YAAY,OAAO;AACpC,qBAAaE,wBAAuB,WAAW,WAAW,CAAC;AAAA,MAC7D,OAAO;AACL,qBAAaA,wBAAuB,WAAW,CAAC;AAAA,MAClD;AAAA,IACF;AAAA,IACA,CAACF,UAAS;AAAA,EACZ;AACA,EAAAI,WAAU,MAAM;AACd,UAAM,oBAAoB,CAAC,gBAAwB;AACjD,iBAAW,WAAW;AAAA,IACxB;AACA,QAAIJ,YAAW;AACb,MAAAA,WAAU,GAAG,mBAAmB,cAAc,iBAAiB;AAC/D,YAAM,UAAUA,cAAA,gBAAAA,WAAW;AAC3B,iBAAW,QAAQ,WAAW;AAAA,IAChC;AACA,WAAO,SAAS,UAAU;AACxB,MAAAA,cAAA,gBAAAA,WAAW,IAAI,mBAAmB,cAAc;AAAA,IAClD;AAAA,EACF,GAAG,CAACA,YAAW,UAAU,CAAC;AAE1B,SAAOA,aACL,gBAAAK,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,KAAK;AAAA,QACH,UAAU;AAAA,QACV,GAAG;AAAA,QACH,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB,YAAY;AAAA,MACd;AAAA;AAAA,IACD;AAAA,IACG;AAAA,EACJ,IACE;AACN;;;ACnDA;AAAA,OAAOC,UAAS,YAAAC,iBAAgB;AAChC,SAAS,eAAe,eAAe,sBAAsB;AAItD,IAAM,gBAAgB,MAAM;AALnC;AAME,QAAM,EAAE,WAAAC,WAAU,IAAI,oBAAoB;AAC1C,QAAM,CAAC,QAAQ,SAAS,IAAIC,WAAS,KAAAD,cAAA,gBAAAA,WAAW,WAAX,YAAqB,GAAG;AAC7D,QAAM,CAAC,YAAY,aAAa,IAAIC,UAAS,KAAK;AAElD,SACE,gBAAAC,OAAA;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,KAAK,EAAE,OAAO,mBAAmB;AAAA,MACjC,aAAa,WAAS;AACpB,cAAM,gBAAgB;AACtB,sBAAc,IAAI;AAAA,MACpB;AAAA,MACA,cAAc,WAAS;AACrB,cAAM,gBAAgB;AACtB,sBAAc,KAAK;AAAA,MACrB;AAAA;AAAA,IAEA,gBAAAA,OAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,SAAS,MAAM;AACb,cAAI,SAAS,GAAG;AACd,sBAAU,CAAC;AACX,YAAAF,cAAA,gBAAAA,WAAW,UAAU;AAAA,UACvB,OAAO;AACL,sBAAU,GAAG;AACb,YAAAA,cAAA,gBAAAA,WAAW,UAAU;AAAA,UACvB;AAAA,QACF;AAAA;AAAA,IACF;AAAA,IACA,gBAAAE,OAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,UACH,IAAI;AAAA,UACJ,GAAG;AAAA,UACH,QAAQ;AAAA,UACR,OAAO,EAAE,GAAG,MAAM;AAAA,UAClB,OAAO,EAAE,GAAG,MAAM;AAAA,UAClB,SAAS,aAAa,MAAM;AAAA,UAC5B,SAAS,aAAa,KAAK;AAAA,UAC3B,YAAY;AAAA,QACd;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,QACL,MAAM;AAAA,QACN,OAAO,CAAC,MAAM;AAAA,QACd,eAAe,CAAAC,YAAU;AACvB,UAAAH,cAAA,gBAAAA,WAAW,UAAUG,QAAO,CAAC;AAC7B,oBAAUA,QAAO,CAAC,CAAC;AAAA,QACrB;AAAA,QACA,aAAa,EAAE,GAAG,MAAM,GAAG,KAAK;AAAA;AAAA,IAClC;AAAA,EACF;AAEJ;AAEA,IAAM,aAAa,CAAC,EAAE,QAAQ,QAAQ,MAA+C;AACnF,MAAI,WAAW,GAAG;AAChB,WAAO,gBAAAD,OAAA,cAAC,kBAAe,OAAO,EAAE,QAAQ,WAAW,YAAY,aAAa,GAAG,SAAkB;AAAA,EACnG;AACA,SAAO,SAAS,KACd,gBAAAA,OAAA,cAAC,iBAAc,OAAO,EAAE,QAAQ,WAAW,YAAY,aAAa,GAAG,SAAkB,IAEzF,gBAAAA,OAAA,cAAC,iBAAc,OAAO,EAAE,QAAQ,WAAW,YAAY,aAAa,GAAG,SAAkB;AAE7F;;;AV5DO,IAAM,iBAAiB;AAAA,EAC5B,MAAM;AAAA,EACN,UAAU;AAAA,EACV,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,UAAU;AAAA,IACR,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA,uBAAuB;AAAA,IACrB,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AACF;;;AWvBA;AAAA,OAAOE,aAAW;AAClB,SAAS,YAAY,kBAAkB;AAGhC,IAAM,mBAAmB,CAAC,EAAE,cAAc,SAAS,MAAuD;AAC/G,SACE,gBAAAC,QAAA,cAAC,WAAQ,OAAO,GAAG,eAAe,SAAS,IAAI,eAAe,MAAK,SACjE,gBAAAA,QAAA,cAAC,cAAW,KAAK,EAAE,QAAQ,MAAM,GAAG,SAAS,UAAU,KAAI,kBAAiB,eAAY,oBACtF,gBAAAA,QAAA,cAAC,YAAM,eAAe,gBAAAA,QAAA,cAAC,gBAAW,IAAK,gBAAAA,QAAA,cAAC,gBAAW,CAAG,CACxD,CACF;AAEJ;;;ACZA;AAAA,OAAOC,aAAW;AAClB,SAAS,YAAAC,iBAAgB;AACzB,SAAS,iBAAAC,sBAAqB;AAMvB,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AACF,GAGG;AACD,QAAM,cAAc,eAAe;AACnC,QAAM,WAAWC,UAAS,OAAO,MAAM,EAAE;AACzC,OAAK,YAAY,gBAAgB,MAAM;AACrC,WACE,gBAAAC,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,UACH,QAAQ;AAAA,UACR,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,GAAG;AAAA,QACL;AAAA,QACA,SAAS,MAAS;AAAG,uBAAM,gBAAgB;AAAA;AAAA;AAAA,MAE3C,gBAAAA,QAAA,cAACC,gBAAA,EAAc,OAAM,MAAK,QAAO,MAAK;AAAA,MACtC,gBAAAD,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,KAAK;AAAA,YACH,YAAY;AAAA,YACZ,IAAI;AAAA,YACJ,OAAO;AAAA,UACT;AAAA;AAAA,QACD;AAAA,MAED;AAAA,IACF;AAAA,EAEJ;AACA,SACE,gBAAAA,QAAA;AAAA,IAAC,OAAO;AAAA,IAAP;AAAA,MACC;AAAA,MACA,cAAc,CAAM,UAAS;AAC3B,YAAI,CAAC,OAAO;AACV,gBAAM,gBAAgB;AAAA,QACxB;AAAA,MACF;AAAA;AAAA,IAEA,gBAAAA,QAAA,cAAC,iBAAc,OAAM,aAAY,WAAW,SAC1C,gBAAAA,QAAA,cAAC,iBACC,gBAAAA,QAAA,cAAC,QAAK,SAAQ,QAAK,+GAGnB,CACF,GACA,gBAAAA,QAAA,cAAC,aAAU,SAAQ,SACjB,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,SAAS,MAAY;AACnB,gBAAM,gBAAgB;AAAA,QACxB;AAAA;AAAA,MACD;AAAA,IAED,CACF,CACF;AAAA,EACF;AAEJ;;;ACvEA;AAAA,OAAOE,aAAW;AAClB,SAAS,mBAAmB,uBAAuB;AAI5C,SAAS,mBAAmB,EAAE,UAAU,GAA2B;AACxE,QAAM,EAAE,WAAAC,WAAU,IAAI,oBAAoB;AAC1C,SACE,gBAAAC,QAAA,cAAC,WAAQ,OAAM,6BAA4B,MAAK,SAC9C,gBAAAA,QAAA,cAAC,cAAW,KAAK,EAAE,GAAG,KAAK,GAAG,SAAS,MAAMD,cAAA,gBAAAA,WAAW,mBACrD,YAAY,gBAAAC,QAAA,cAAC,qBAAkB,OAAM,MAAK,QAAO,QAAO,IAAK,gBAAAA,QAAA,cAAC,mBAAgB,OAAM,MAAK,QAAO,QAAO,CAC1G,CACF;AAEJ;;;ACdA;AAAA,OAAOC,aAAW;AAClB,SAAS,YAAAC,iBAAgB;AAEzB,SAAS,WAAW,aAAAC,YAAW,oBAAoB;AAM5C,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAQG;AACD,QAAM,WAAWC,UAAS,OAAO,MAAM,EAAE;AACzC,QAAM,cAAc,eAAe;AAEnC,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO;AAAA,EACT;AACA,MAAI,YAAY,aAAa;AAC3B,WACE,gBAAAC,QAAA,cAAC,MAAM,MAAN,EAAW,MAAY,gBACtB,gBAAAA,QAAA,cAAC,MAAM,SAAN,EAAc,SAAO,MAAC,eAAY,sBACjC,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,UACH,OAAO;AAAA,UACP,GAAG;AAAA,UACH,QAAQ;AAAA,UACR,GAAG;AAAA,QACL;AAAA;AAAA,MAEA,gBAAAA,QAAA,cAAC,kBAAa;AAAA,IAChB,CACF,GACA,gBAAAA,QAAA;AAAA,MAAC,MAAM;AAAA,MAAN;AAAA,QACC,WAAW;AAAA,QACX,KAAK,EAAE,IAAI,oBAAoB,IAAI,KAAK;AAAA,QACxC,SAAS,MAAM,aAAa,KAAK;AAAA;AAAA,MAEjC,gBAAAA,QAAA;AAAA,QAAC,MAAM;AAAA,QAAN;AAAA,UACC,KAAK;AAAA,YACH,SAAS;AAAA,YACT,OAAO;AAAA,YACP,GAAG;AAAA,YACH,gBAAgB;AAAA,YAChB,IAAI;AAAA,YACJ,UAAU;AAAA,YACV,IAAI;AAAA,YACJ,IAAI;AAAA,YACJ,cAAc;AAAA,YACd,YAAY;AAAA,UACd;AAAA;AAAA,QACD;AAAA,QAEC,gBAAAA,QAAA,cAAC,MAAM,OAAN,EAAY,KAAK,EAAE,OAAO,mBAAmB,GAAG,SAAS,MAAM,aAAa,KAAK,KAChF,gBAAAA,QAAA,cAACC,YAAA,IAAU,CACb;AAAA,MACF;AAAA,MACC,OAAO,IAAI,WAAS;AACnB,eACE,gBAAAD,QAAA;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,KAAK;AAAA,cACH,GAAG;AAAA,cACH,IAAI;AAAA,cACJ,WAAW;AAAA,gBACT,IAAI;AAAA,cACN;AAAA,cACA,QAAQ;AAAA,cACR,KAAK;AAAA,cACL,IAAI;AAAA,cACJ,IAAI;AAAA,YACN;AAAA,YACA,KAAK,MAAM;AAAA,YACX,SAAS,MAAM,gBAAgB,KAAK;AAAA;AAAA,UAEpC,gBAAAA,QAAA,cAAC,QAAK,SAAQ,WAAU,KAAK,EAAE,YAAY,YAAY,KACpD,eAAe,KAAK,CACvB;AAAA,UACA,gBAAAA,QAAA,cAAC,QAAK,SAAQ,WAAU,KAAK,EAAE,MAAM,SAAS,GAAG,mBAAmB,IAAI,KAAK,KAC1E,eAAe,KAAK,CACvB;AAAA,UACC,CAAC,UAAU,MAAM,WAAU,uCAAW,UAAS,MAAM,YAAW,uCAAW,WAC1E,gBAAAA,QAAA,cAAC,aAAU,OAAM,QAAO,QAAO,QAAO;AAAA,QAE1C;AAAA,MAEJ,CAAC;AAAA,MACD,gBAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,KAAK;AAAA,YACH,GAAG;AAAA,YACH,IAAI;AAAA,YACJ,WAAW;AAAA,cACT,IAAI;AAAA,YACN;AAAA,YACA,QAAQ;AAAA,YACR,KAAK;AAAA,YACL,IAAI;AAAA,YACJ,IAAI;AAAA,UACN;AAAA,UACA,KAAI;AAAA,UACJ,SAAS,MAAM,gBAAgB,EAAE,QAAQ,OAAO,CAAC;AAAA;AAAA,QAEjD,gBAAAA,QAAA,cAAC,QAAK,SAAQ,WAAU,KAAK,EAAE,YAAY,aAAa,MAAM,QAAQ,KAAG,MAEzE;AAAA,QACC,UAAU,gBAAAA,QAAA,cAAC,aAAU,OAAM,QAAO,QAAO,QAAO;AAAA,MACnD;AAAA,IACF,CACF;AAAA,EAEJ;AACA,SACE,gBAAAA,QAAA,cAAC,SAAS,MAAT,EAAc,MAAY,cAAc,WAAS,aAAa,KAAK,GAAG,OAAO,SAC5E,gBAAAA,QAAA,cAAC,SAAS,SAAT,EAAiB,SAAO,MAAC,eAAY,sBACpC,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,QACH,OAAO;AAAA,QACP,GAAG;AAAA,QACH,QAAQ;AAAA,QACR,GAAG;AAAA,MACL;AAAA;AAAA,IAEA,gBAAAA,QAAA,cAAC,WAAQ,OAAM,kBAAiB,MAAK,SACnC,gBAAAA,QAAA,cAAC,QAAK,OAAM,YACV,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,UACH,GAAG;AAAA,UACH,GAAG;AAAA,UACH,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,GAAG;AAAA,QACL;AAAA;AAAA,MAEA,gBAAAA,QAAA,cAAC,kBAAa;AAAA,IAChB,GACA,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,UACP,OAAO;AAAA,UACP,OAAO;AAAA,UACP,OAAO;AAAA,QACT;AAAA,QACA,KAAK,EAAE,SAAS,QAAQ,YAAY,UAAU,IAAI,MAAM,GAAG,qBAAqB;AAAA;AAAA,MAE/E,UACC,gBAAAA,QAAA,cAAAA,QAAA,gBAAE,QAEA,gBAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,YACH,IAAI;AAAA,YACJ,GAAG;AAAA,YACH,GAAG;AAAA,YACH,YAAY;AAAA,YACZ,GAAG;AAAA,UACL;AAAA;AAAA,MACF,CACF;AAAA,MAED,aAAa,KAAK,IAAI,UAAU,SAAS,GAAG,UAAU,UAAU,CAAC;AAAA,MAAE;AAAA,IACtE,CACF,CACF;AAAA,EACF,CACF,GACA,gBAAAA,QAAA,cAAC,SAAS,QAAT,EAAgB,WAAW,gBAC1B,gBAAAA,QAAA;AAAA,IAAC,SAAS;AAAA,IAAT;AAAA,MACC,YAAY;AAAA,MACZ,OAAM;AAAA,MACN,KAAK;AAAA,QACH,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,GAAG;AAAA,QACH,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,KAAK;AAAA,QACL,SAAS;AAAA,MACX;AAAA;AAAA,IAEC,OAAO,IAAI,WAAS;AACnB,aACE,gBAAAA,QAAA;AAAA,QAAC,SAAS;AAAA,QAAT;AAAA,UACC,SAAS,MAAM,gBAAgB,KAAK;AAAA,UACpC,KAAK,MAAM;AAAA,UACX,KAAK;AAAA,YACH,IACE,CAAC,UAAU,MAAM,WAAU,uCAAW,UAAS,MAAM,YAAW,uCAAW,UACvE,qBACA;AAAA,YACN,WAAW;AAAA,cACT,IAAI;AAAA,YACN;AAAA,YACA,GAAG;AAAA,YACH,GAAG;AAAA,YACH,KAAK;AAAA,UACP;AAAA;AAAA,QAEA,gBAAAA,QAAA,cAAC,QAAK,SAAQ,WAAU,KAAK,EAAE,YAAY,YAAY,KACpD,eAAe,KAAK,CACvB;AAAA,QACA,gBAAAA,QAAA,cAAC,QAAK,SAAQ,WAAU,KAAK,EAAE,MAAM,SAAS,GAAG,mBAAmB,IAAI,KAAK,KAC1E,eAAe,KAAK,CACvB;AAAA,QACC,CAAC,UAAU,MAAM,WAAU,uCAAW,UAAS,MAAM,YAAW,uCAAW,WAC1E,gBAAAA,QAAA,cAAC,aAAU,OAAM,QAAO,QAAO,QAAO;AAAA,MAE1C;AAAA,IAEJ,CAAC;AAAA,IACD,gBAAAA,QAAA;AAAA,MAAC,SAAS;AAAA,MAAT;AAAA,QACC,SAAS,MAAM,gBAAgB,EAAE,QAAQ,OAAO,CAAC;AAAA,QACjD,KAAI;AAAA,QACJ,KAAK;AAAA,UACH,IAAI,CAAC,SAAS,oBAAoB;AAAA,UAClC,WAAW;AAAA,YACT,IAAI;AAAA,UACN;AAAA,UACA,GAAG;AAAA,UACH,GAAG;AAAA,UACH,KAAK;AAAA,QACP;AAAA;AAAA,MAEA,gBAAAA,QAAA,cAAC,QAAK,SAAQ,WAAU,KAAK,EAAE,YAAY,aAAa,MAAM,QAAQ,KAAG,MAEzE;AAAA,MACC,UAAU,gBAAAA,QAAA,cAAC,aAAU,OAAM,QAAO,QAAO,QAAO;AAAA,IACnD;AAAA,EACF,CACF,CACF;AAEJ;AAEA,IAAM,iBAAiB,CAAC,UAAuB,GAAG,KAAK,IAAI,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,CAAC;AAC/F,IAAM,iBAAiB,CAAC,UAAuB,KAAK,OAAO,MAAM,UAAU,GAAI,IAAI,KAAM,QAAQ,CAAC,CAAC;;;ACvPnG;AAAA,OAAOE,aAAW;AAClB,SAAS,uBAAuB;AAiBzB,IAAM,eAAe,MAAM;AAChC,QAAM,EAAE,OAAO,SAAS,YAAY,IAAI,oBAAoB;AAC5D,QAAM,oBAAoB,kBAAkB,kBAAkB,YAAY;AAC1E,QAAM,uBAAuB,sBAAsB,kBAAkB,YAAY;AAEjF,MAAI,sBAAsB;AACxB,WACE,gBAAAC,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAI;AAAA,QACJ,OAAM;AAAA,QACN,SAAQ;AAAA,QACR,KAAK;AAAA,UACH,UAAU;AAAA,UACV,GAAG;AAAA,UACH,GAAG;AAAA,UACH,cAAc;AAAA,UACd,GAAG;AAAA,UACH,iBAAiB;AAAA,QACnB;AAAA;AAAA,MAEA,gBAAAA,QAAA,cAAC,QAAK,SAAQ,QAAO,KAAK,EAAE,YAAY,YAAY,KAAG,eAEvD;AAAA,MACA,gBAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAS;AAAA,UACT,KAAK;AAAA,YACH,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,WAAW,EAAE,SAAS,MAAM;AAAA,UAC9B;AAAA;AAAA,QAEA,gBAAAA,QAAA,cAAC,qBAAgB;AAAA,MACnB;AAAA,IACF;AAAA,EAEJ;AACA,SACE,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAI;AAAA,MACJ,OAAM;AAAA,MACN,KAAK;AAAA,QACH,UAAU;AAAA,QACV,GAAG;AAAA,QACH,GAAG;AAAA,QACH,cAAc;AAAA,QACd,GAAG;AAAA,QACH,iBAAiB;AAAA,MACnB;AAAA;AAAA,IAEA,gBAAAA,QAAA,cAAC,UAAK;AAAA,IACN,gBAAAA,QAAA,cAAC,QAAK,WAAU,YACb,QACC,gBAAAA,QAAA,cAAC,QAAK,SAAQ,QAAO,KAAK,EAAE,YAAY,YAAY,KACjD,KACH,IACE,MACJ,gBAAAA,QAAA,cAAC,YACC,gBAAAA,QAAA,cAAC,kBAAe,SAAkB,GACjC,cACC,gBAAAA,QAAA,cAAC,QAAK,SAAQ,WAAU,KAAK,EAAE,OAAO,qBAAqB,GAAG,SAAS,qBAAmB,aAE1F,IACE,IACN,CACF;AAAA,EACF;AAEJ;;;AjB3CA,IAAI;AACJ,IAAM,WAAW,CAAC;AAElB,IAAM,aAAa,CAAC,EAAE,eAAe,MAAM,MAAM;AAC/C,QAAM,EAAE,SAAS,IAAI,gCAAgC;AACrD,QAAM,WAAW,YAAY,cAAc,SAAS,QAAQ,CAAC;AAC7D,QAAM,aAAa,kBAAkB,kBAAkB,IAAI;AAC3D,QAAM,WAAW,CAAC,EAAC,qCAAU;AAC7B,QAAM,WAAWC,UAAS,OAAO,MAAM,EAAE;AACzC,QAAM,aAAa,cAAc;AAEjC,EAAAC,WAAU,MAAM;AACd,UAAM,EAAE,UAAU,UAAU,UAAU,aAAa,CAAC,EACjD,KAAK,EAAE,cAAc,KAAK,GAAG,MAAM;AAClC,iBAAW,WAAW,SAAS,UAAU,EAAE;AAAA,IAC7C,CAAC,EACA,KAAK,EAAE,UAAU,MAAM,UAAU,MAAM,UAAU,EAAE,KAAK,WAAS,CAAC,KAAK,EAAE,GAAG,MAAM;AACjF,iBAAW;AAAA,IACb,CAAC,EACA,KAAK,EAAE,UAAU,OAAO,UAAU,MAAM,UAAU,kBAAkB,KAAK,GAAG,MAAM;AACjF,iBAAW,WAAW,SAAS,UAAU,EAAE;AAAA,IAC7C,CAAC,EACA,UAAU,MAAM;AAAA,IAEjB,CAAC;AAAA,EACL,GAAG,CAAC,UAAU,UAAU,YAAY,UAAU,YAAY,YAAY,CAAC;AACvE,SAAO;AACT;AACA,IAAM,UAAU,MAAM;AAtEtB;AAuEE,QAAM,WAAW,OAAO,IAAI;AAC5B,QAAM,aAAa,OAAO;AAC1B,QAAM,EAAE,SAAS,IAAI,gCAAgC;AACrD,QAAM,WAAW,YAAY,cAAc;AAC3C,QAAM,gBAAgB,YAAY,cAAc,SAAS,QAAQ,CAAC;AAClE,QAAM,eAAe,oBAAoB,qBAAqB,YAAY;AAC1E,QAAM,aAAa,cAAc;AACjC,QAAM,EAAE,UAAU,IAAI,SAAS;AAC/B,QAAM,CAAC,aAAa,cAAc,IAAIC,UAAS,KAAK;AACpD,MAAI,CAAC,eAAe,gBAAgB,IAAIA,UAAS,IAAI;AACrD,QAAM,UAAS,cAAS,SAAS,CAAC,MAAnB,mBAAsB;AACrC,QAAM,CAAC,iBAAiB,kBAAkB,IAAIA,UAAS,CAAC,CAAC;AACzD,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,IAAI;AACnD,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA,UAAS,IAAI;AAC7D,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,KAAK;AACpD,QAAM,CAAC,wBAAwB,yBAAyB,IAAIA,UAAS,IAAI;AACzE,QAAM,CAAC,sBAAsB,uBAAuB,IAAIA,UAAS,KAAK;AACtE,QAAM,CAAC,sBAAsB,uBAAuB,IAAIA,UAAS;AAAA,IAC/D,aAAa;AAAA,IACb,WAAW;AAAA,IACX,cAAc;AAAA,EAChB,CAAC;AACD,QAAM,CAAC,UAAU,WAAW,IAAIA,UAAS,KAAK;AAC9C,QAAM,CAAC,MAAM,MAAM,IAAI,UAAU,KAAK;AACtC,QAAM,aAAa,YAAY,MAAM;AACrC,QAAM,eAAe,mBAAmB;AACxC,QAAM,CAAC,iBAAiB,kBAAkB,IAAIA,UAAS,IAAI;AAC3D,QAAM,CAAC,oBAAoB,qBAAqB,IAAIA,UAAS,IAAI;AACjE,QAAM,CAAC,qBAAqB,sBAAsB,IAAIA,UAAS,KAAK;AACpE,QAAM,cAAc,OAAO,IAAI;AAC/B,QAAM,mBAAmB,OAAO;AAChC,QAAM,CAAC,cAAc,eAAe,IAAIA,UAAS,KAAK;AACtD,QAAM,wBAAwB,WAAW;AACzC,QAAM,aAAa,kBAAkB,kBAAkB,IAAI;AAC3D,QAAM,WAAW,CAAC,EAAC,qCAAU;AAE7B,QAAM,WAAWF,UAAS,OAAO,MAAM,EAAE;AACzC,QAAM,cAAc,eAAe;AAEnC,QAAM,eAAe,cAAc,YAAY,MAAM;AAAA,IACnD,SAAS,MAAM,OAAO,KAAK;AAAA,EAC7B,CAAC;AACD,QAAM,CAAC,YAAY,aAAa,IAAIE,UAAS,KAAK;AAGlD,EAAAD,WAAU,MAAM;AAId,UAAM,UAAU,SAAS;AACzB,UAAME,cAAa,MAAM,cAAc,IAAI;AAC3C,UAAM,aAAa,MAAM,cAAc,KAAK;AAC5C,uCAAS,iBAAiB,WAAW;AACrC,uCAAS,iBAAiB,WAAWA;AACrC,WAAO,MAAM;AACX,yCAAS,oBAAoB,WAAW;AACxC,yCAAS,oBAAoB,WAAWA;AAAA,IAC1C;AAAA,EACF,GAAG,CAAC,CAAC;AACL,EAAAF,WAAU,MAAM;AACd,QAAI,eAAe,eAAe,QAAQ;AACxC,qBAAe,KAAK;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,QAAQ,aAAa,UAAU,CAAC;AAEpC,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC;AAAc;AACnB,UAAM,UAAU,qCAAW,aAAa,KAAK;AAC7C,QAAI,SAAS;AACX,mBAAa,YAAY,SAAS,aAAa,KAAK,EAAE,CAAC;AACvD,aAAO,SAAS,aAAa,KAAK,EAAE;AAAA,IACtC;AAAA,EACF,GAAG,CAAC,YAAY,CAAC;AAEjB,EAAAA,WAAU,MAAM;AACd,UAAM,YAAY,SAAS;AAC3B,UAAM,yBAAyB,MAAM;AACnC,qBAAe,IAAI;AAEnB,6CAAW,oBAAoB,SAAS;AAAA,IAC1C;AACA,2CAAW,iBAAiB,SAAS;AACrC,WAAO,MAAM;AACX,6CAAW,oBAAoB,SAAS;AAAA,IAC1C;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,gBAAgBG;AAAA,IACpB,aAAW;AA/Jf,UAAAC;AAgKM,UAAI,WAAW;AACb,gCAAsBA,MAAA,QAAQ,WAAR,gBAAAA,IAAgB,WAAW,mBAAkB,MAAM;AACzE,+CAAW,SAAS;AAAA,MACtB;AAAA,IACF;AAAA,IACA,CAAC,eAAe;AAAA;AAAA,EAClB;AAIA,EAAAJ,WAAU,MAAM;AACd,QAAI,UAAU,SAAS;AACvB,UAAM,wBAAwB,CAAC,EAAE,OAAO,MAAM;AAC5C,yBAAmB,MAAM;AACzB,qBAAe,uCAAW,aAAa;AAAA,IACzC;AACA,UAAM,sBAAsB,CAAC,EAAE,MAAM,MAAM;AACzC,gCAA0B,KAAK;AAAA,IACjC;AACA,UAAM,wBAAwB,CAACI,QAAyB;AAAzB,UAAAC,MAAAD,KAAE,UAnLrC,IAmLmCC,KAAc,iBAAdA,KAAc,CAAZ;AAnLrC,UAAAD;AAoLM,YAAM,eAAe,SAAO;AAC1B,YAAI;AACF,iBAAO,KAAK,MAAM,GAAG;AAAA,QACvB,SAAS,GAAG;AACV,iBAAO;AAAA,QACT;AAAA,MACF;AACA,YAAM,WAAW,KAAK;AACtB,YAAM,gBAAgB,aAAa,OAAO;AAE1C,UAAI,cAAc,WAAW,OAAO,GAAG;AACrC,cAAM,SAAS,cAAc,OAAO,cAAc,QAAQ,GAAG,IAAI,CAAC;AAClE,cAAM,OAAO,aAAa,SAAS,eAAe,MAAM,CAAC;AACzD,cAAM,gBAAgB,aAAa,SAAS,mBAAmB,KAAK,SAAS,CAAC,KAAK;AAEnF,YAAI,CAAC,SAAS,MAAM,GAAG;AACrB,gBAAM,UAAU,aAAa,SAAS;AAAA,YACpC,OAAO,GAAG,aAAa,cAAc,KAAK,IAAI,KAAK,KAAK,KAAK;AAAA,YAC7D,QACE,gBAAAE,QAAA;AAAA,cAAC;AAAA;AAAA,gBACC,SAAS,MAAM;AACb,6BAAW,WAAW,SAAS,WAAW;AAAA,oBACxC,CAAC,WAAW,UAAU,GAAG;AAAA,oBACzB,CAAC,WAAW,IAAI,GAAG,WAAW;AAAA,kBAChC,CAAC;AACD,6BAAW,WAAW,SAAS,UAAU,kBAAkB,KAAK;AAAA,gBAClE;AAAA,gBACA,SAAQ;AAAA,gBACR,KAAK;AAAA,kBACH,iBAAiB;AAAA,kBACjB,YAAY;AAAA,kBACZ,OAAO;AAAA,kBACP,GAAG;AAAA,gBACL;AAAA;AAAA,cAEC,KAAK,SAAS,SAAS,WAAW;AAAA,YACrC;AAAA,YAEF,UAAU;AAAA,UACZ,CAAC;AACD,mBAAS,MAAM,IAAI;AAAA,QACrB;AACA;AAAA,MACF;AACA,cAAQ,cAAc,MAAM;AAAA,QAC1B,KAAK;AACH,WAAAF,MAAA,OAAO,oBAAP,gBAAAA,IAAA,aAAyB,EAAE,SAAS,+CAAe,SAAS,UAAU,+CAAe,SAAS;AAC9F;AAAA,QACF,SAAS;AACP,gBAAM,QAAQ;AAAA,YACZ,OAAO,+BAA+B,aAAa;AAAA,YACnD,UAAU,YAAY;AAAA,UACxB;AACA,kBAAQ,MAAM,gBAAgB,KAAK,UAAU,KAAK,CAAC;AACnD,uBAAa,SAAS,KAAK;AAC3B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,UAAM,cAAc,UAAQ;AAC1B,cAAQ,MAAM,0BAA0B,GAAG,IAAI,EAAE;AAAA,IACnD;AACA,UAAM,qBAAqB,CAAC,EAAE,OAAO,MAAM;AACzC,qBAAe,MAAM;AAAA,IACvB;AAEA,UAAM,uBAAuB,UAAQ;AACnC,kBAAY,KAAK,UAAU,iBAAiB,MAAM;AAClD,8BAAwB,iCACnB,uBADmB;AAAA,QAEtB,WAAW;AAAA,MACb,EAAC;AACD,iBAAW,MAAM;AACf,gCAAwB,iCACnB,uBADmB;AAAA,UAEtB,WAAW;AAAA,QACb,EAAC;AAAA,MACH,GAAG,GAAI;AAAA,IACT;AACA,UAAM,6BAA6B,CAAAG,sBAAoB;AACrD,0BAAoBA,iBAAgB;AAAA,IACtC;AAEA,UAAM,sBAAsB,UAAQ,wBAAwB,CAAC,CAAC,IAAI;AAClE,QAAI,WAAW,QAAQ;AACrB,kBAAY,IAAI,aAAa,QAAQ,OAAO;AAC5C,gBAAU,GAAGC,oBAAmB,2BAA2B,kBAAkB;AAC7E,gBAAU,GAAGA,oBAAmB,uBAAuB,qBAAqB;AAC5E,gBAAU,GAAGA,oBAAmB,OAAO,WAAW;AAClD,gBAAU,GAAGA,oBAAmB,gBAAgB,oBAAoB;AACpE,gBAAU,GAAGA,oBAAmB,iBAAiB,0BAA0B;AAC3E,gBAAU,GAAGA,oBAAmB,kBAAkB,mBAAmB;AAErE,gBAAU,GAAGA,oBAAmB,iBAAiB,qBAAqB;AACtE,gBAAU,GAAGA,oBAAmB,eAAe,mBAAmB;AAClE,aAAO,MAAM;AACX,kBAAU,IAAIA,oBAAmB,2BAA2B,kBAAkB;AAC9E,kBAAU,IAAIA,oBAAmB,OAAO,WAAW;AACnD,kBAAU,IAAIA,oBAAmB,uBAAuB,qBAAqB;AAC7E,kBAAU,IAAIA,oBAAmB,gBAAgB,oBAAoB;AACrE,kBAAU,IAAIA,oBAAmB,iBAAiB,0BAA0B;AAE5E,kBAAU,IAAIA,oBAAmB,kBAAkB,mBAAmB;AACtE,kBAAU,IAAIA,oBAAmB,iBAAiB,qBAAqB;AACvE,kBAAU,IAAIA,oBAAmB,eAAe,mBAAmB;AACnE,kBAAU,MAAM;AAAA,MAClB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,QAAQ,cAAc,UAAU,CAAC;AAKrC,EAAAR,WAAU,MAAM;AACd,UAAM,aAAa,WAAS,iBAAiB,KAAK;AAClD,QAAI,eAAe;AACjB,6CAAW,GAAGQ,oBAAmB,OAAO;AAAA,IAC1C,OAAO;AACL,6CAAW,IAAIA,oBAAmB,OAAO;AAAA,IAC3C;AACA,WAAO,MAAM;AACX,6CAAW,IAAIA,oBAAmB,OAAO;AAAA,IAC3C;AAAA,EACF,GAAG,CAAC,aAAa,CAAC;AAElB,QAAM,kBAAkB,MAAY;AAClC,QAAI;AACF,YAAM,UAAU,KAAK;AACrB,8BAAwB,KAAK;AAAA,IAC/B,SAAS,OAAO;AACd,cAAQ,MAAM,yCAAyC,MAAM,OAAO;AAAA,IACtE;AAAA,EACF;AAEA,QAAM,kBAAkB,MAAM;AAC5B,eAAW,WAAW,SAAS,UAAU,CAAC,aAAa;AAAA,EACzD;AAEA,EAAAR,WAAU,MAAM;AACd,QAAI,mBAAmB,gBAAgB,CAAC,qBAAqB;AAC3D,UAAI,iBAAiB,SAAS;AAC5B,qBAAa,iBAAiB,OAAO;AAAA,MACvC;AAAA,IACF;AACA,QAAI,CAAC,gBAAgB,iBAAiB,SAAS;AAC7C,mBAAa,iBAAiB,OAAO;AAAA,IACvC;AACA,qBAAiB,UAAU,WAAW,MAAM;AAC1C,UAAI,CAAC,cAAc;AACjB,2BAAmB,KAAK;AAAA,MAC1B;AAAA,IACF,GAAG,GAAI;AACP,WAAO,MAAM;AACX,UAAI,iBAAiB,SAAS;AAC5B,qBAAa,iBAAiB,OAAO;AAAA,MACvC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,iBAAiB,cAAc,cAAc,mBAAmB,CAAC;AAErE,QAAM,WAAWG;AAAA,IACf,UAAQ;AApVZ,UAAAC;AAqVM,YAAM,EAAE,aAAa,UAAU,KAAK,CAAC,EAClC,KAAK,EAAE,MAAM,KAAK,UAAU,OAAO,aAAa,MAAM,GAAG,MAAM;AAC9D,gCAAwB,iCAAK,uBAAL,EAA2B,cAAc,KAAK,EAAC;AACvE,mBAAW,MAAM;AACf,kCAAwB,iCACnB,uBADmB;AAAA,YAEtB,cAAc;AAAA,UAChB,EAAC;AAAA,QACH,GAAG,GAAI;AAAA,MACT,CAAC,EACA,KAAK,EAAE,MAAM,IAAI,UAAU,OAAO,aAAa,MAAM,GAAG,MAAM;AAC7D,gCAAwB,iCAAK,uBAAL,EAA2B,aAAa,KAAK,EAAC;AACtE,mBAAW,MAAM;AACf,kCAAwB,iCACnB,uBADmB;AAAA,YAEtB,aAAa;AAAA,UACf,EAAC;AAAA,QACH,GAAG,GAAI;AAAA,MACT,CAAC,EACA,UAAU,MAAM,IAAI;AACvB,6CAAW,SAAOA,MAAA,SAAS,YAAT,gBAAAA,IAAkB,eAAc;AAAA,IACpD;AAAA,IACA,CAAC,sBAAsB,aAAa,QAAQ;AAAA,EAC9C;AACA,QAAM,uBAAuBD;AAAA,IAC3B,WAAS;AA9Wb,UAAAC;AA+WM,UAAI,EAAE,YAAY,kBAAgBA,MAAA,qCAAU,SAAS,OAAnB,gBAAAA,IAAuB,mBAAkB,gBAAgB,KAAK;AAC9F;AAAA,MACF;AACA,YAAM,iBAAkB,MAAM,UAAU,MAAO,MAAM,OAAO;AAE5D,UAAI,iBAAiB,IAAI;AACvB,gCAAwB,iCACnB,uBADmB;AAAA,UAEtB,cAAc;AAAA,QAChB,EAAC;AACD,iBAAS,GAAG;AAAA,MACd,OAAO;AACL,gCAAwB,iCACnB,uBADmB;AAAA,UAEtB,aAAa;AAAA,QACf,EAAC;AACD,iBAAS,EAAE;AAAA,MACb;AACA,iBAAW,MAAM;AACf,gCAAwB,iCACnB,uBADmB;AAAA,UAEtB,aAAa;AAAA,UACb,cAAc;AAAA,QAChB,EAAC;AAAA,MACH,GAAG,GAAI;AAAA,IACT;AAAA,IACA,CAAC,qCAAU,UAAU,sBAAsB,aAAa,UAAU,QAAQ;AAAA,EAC5E;AAEA,QAAM,iBAAiBD,aAAY,MAAY;AA5YjD,QAAAC;AA6YI,UAAM,EAAE,UAAU,aAAa,gBAAeA,MAAA,qCAAU,SAAS,OAAnB,gBAAAA,IAAuB,cAAc,CAAC,EACjF,KAAK,EAAE,eAAe,gBAAgB,KAAK,UAAU,OAAO,aAAa,MAAM,GAAG,MAAY;AAC7F,UAAI,UAAU;AACZ,cAAM,uCAAW;AAAA,MACnB,OAAO;AACL,+CAAW;AAAA,MACb;AAAA,IACF,EAAC,EACA;AAAA,MACC,CAAC,EAAE,UAAAK,WAAU,aAAAC,aAAY,MAAMD,aAAYC;AAAA,MAC3C,MAAM;AACJ,2BAAmB,WAAS,CAAC,KAAK;AAClC,YAAI,iBAAiB,SAAS;AAC5B,uBAAa,iBAAiB,OAAO;AAAA,QACvC;AAAA,MACF;AAAA,IACF,EACC,UAAU,MAAM,IAAI;AAAA,EACzB,IAAG,CAAC,qCAAU,UAAU,aAAa,UAAU,QAAQ,CAAC;AAExD,QAAM,iBAAiBP;AAAA,IACrB,WAAS;AACP,YAAM,eAAe;AACrB,UAAI,YAAY,aAAa;AAC3B;AAAA,MACF;AACA,UAAI,MAAM,SAAS,gBAAgB,qBAAqB;AACtD,2BAAmB,IAAI;AACvB;AAAA,MACF;AACA,UAAI,MAAM,SAAS,gBAAgB,CAAC,cAAc;AAChD,2BAAmB,KAAK;AAAA,MAC1B,WAAW,CAAC,mBAAmB,MAAM,SAAS,aAAa;AACzD,2BAAmB,IAAI;AACvB,YAAI,iBAAiB,SAAS;AAC5B,uBAAa,iBAAiB,OAAO;AAAA,QACvC;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,iBAAiB,aAAa,UAAU,qBAAqB,YAAY;AAAA,EAC5E;AAEA,QAAM,aAAa,mBAAmB,UAAU,SAAS;AAEzD,MAAI,CAAC,UAAU,aAAa;AAC1B,WACE,gBAAAG,QAAA,cAAAA,QAAA,gBACE,gBAAAA,QAAA,cAAC,gBAAW,GACX,WAAW,YAAY,YAAY,gBAClC,gBAAAA,QAAA,cAAC,OAAI,KAAK,EAAE,UAAU,SAAS,MAAM,MAAM,KAAK,MAAM,QAAQ,GAAG,KAC/D,gBAAAA,QAAA,cAAC,aAAU,YAAW,sBAAqB,WAAW,WAAW,SAAS,CAC5E,GAEF,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAI;AAAA,QACJ,IAAI,cAAc,SAAS;AAAA,QAC3B,KAAK;AAAA,QACL,WAAW,YAAY,cAAc,WAAW;AAAA,QAChD,SAAQ;AAAA,QACR,KAAK;AAAA,UACH,MAAM,cAAc,UAAU;AAAA,QAChC;AAAA;AAAA,MAEC,cACC,gBAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,gBAAAA,QAAA,cAAC,mBAAgB,QAAQ,IAAI,OAAO,IAAI;AAAA,UAC9C,OAAM;AAAA,UACN,UAAS;AAAA;AAAA,MACX,IAEA,gBAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,gBAAAA,QAAA,cAAC,cAAW,QAAQ,IAAI,OAAO,IAAI,OAAO,EAAE,OAAO,QAAQ,GAAG;AAAA,UACpE,OAAM;AAAA,UACN,UAAS;AAAA;AAAA,MACX;AAAA,IAEJ,CACF;AAAA,EAEJ;AACA,SACE,gBAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAI;AAAA,MACJ,IAAI,cAAc,SAAS;AAAA,MAC3B,KAAK;AAAA,MACL,WAAW,YAAY,cAAc,WAAW;AAAA,MAChD,SAAQ;AAAA,MACR,KAAK;AAAA,QACH,MAAM,cAAc,UAAU;AAAA,QAC9B,YAAY;AAAA,QACZ,gBAAgB;AAAA,UACd,WAAW;AAAA,YACT,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA;AAAA,IAEC,WAAW,YAAY,YAAY,gBAClC,gBAAAA,QAAA,cAAC,OAAI,KAAK,EAAE,UAAU,SAAS,MAAM,MAAM,KAAK,MAAM,QAAQ,GAAG,KAC/D,gBAAAA,QAAA,cAAC,aAAU,YAAW,sBAAqB,WAAW,WAAW,SAAS,CAC5E;AAAA,IAGF,gBAAAA,QAAA,cAAC,iBAAiB,UAAjB,EAA0B,OAAO,EAAE,UAAU,MAC3C,+CAAe,QAAO,iBAAiB,EAAE,YAAY,eACpD,gBAAAA,QAAA,cAAC,mBAAgB,eAA8B,SAAS,iBAAiB,IACvE,MACJ,gBAAAA,QAAA;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QACH,OAAM;AAAA,QACN,SAAQ;AAAA,QACR,KAAK;AAAA,UACH,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,OAAO;AAAA,YACL,QAAQ;AAAA,UACV;AAAA,UACA,SAAS;AAAA,QACX;AAAA,QACA,WAAW,CAAM,UAAS;AApgBpC,cAAAF;AAqgBY,gBAAIA,MAAA,qCAAU,SAAS,OAAnB,gBAAAA,IAAuB,mBAAkB,gBAAgB,KAAK;AAChE,kBAAM,WAAW,KAAK;AAAA,UACxB;AAAA,QACF;AAAA,QACA,UAAS;AAAA;AAAA,MAER,EAAE,YAAY,gBACb,gBAAAE,QAAA,cAAC,4BAAyB,MAAM,sBAAsB,iBAAkC;AAAA,MAEzF,cACC,gBAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,SAAQ;AAAA,UACR,KAAK;AAAA,YACH,UAAU;AAAA,UACZ;AAAA;AAAA,QAEA,gBAAAA,QAAA,cAAC,WAAQ,OAAO,IAAI,QAAQ,IAAI;AAAA,MAClC;AAAA,MAEF,gBAAAA,QAAA;AAAA,QAAC,eAAe;AAAA,QAAf;AAAA,UACC,KAAK;AAAA,UACL,cAAc;AAAA,UACd,aAAa;AAAA,UACb,cAAc;AAAA,UACd,SAAS;AAAA,UACT,eAAe,OAAK;AAClB,iCAAqB,CAAC;AAAA,UACxB;AAAA;AAAA,QAEA,gBAAAA,QAAA,cAAAA,QAAA,gBACG,EAAE,YAAY,gBACb,gBAAAA,QAAA;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,SAAQ;AAAA,YACR,KAAK;AAAA,cACH,UAAU;AAAA,cACV,IAAI,GACF,qBAAqB,aACrB,qBAAqB,gBACrB,qBAAqB,cACjB,cACA,EACN;AAAA,cACA,SAAS;AAAA,cACT,KAAK;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YACR;AAAA;AAAA,UAEC,CAAC,gBAAc,0CAAU,SAAS,OAAnB,mBAAuB,mBAAkB,gBAAgB,OACvE,gBAAAA,QAAA;AAAA,YAAC,eAAe,sBAAsB;AAAA,YAArC;AAAA,cACC;AAAA,cACA,cAAc;AAAA,cACd;AAAA;AAAA,UACF;AAAA,QAEJ,GAED,YAAY,cACX,gBAAAA,QAAA,cAAAA,QAAA,gBACG,CAAC,gBAAc,0CAAU,SAAS,OAAnB,mBAAuB,mBAAkB,gBAAgB,OACvE,gBAAAA,QAAA;AAAA,UAAC,eAAe,sBAAsB;AAAA,UAArC;AAAA,YACC;AAAA,YACA,cAAc;AAAA,YACd;AAAA;AAAA,QACF,GAEF,gBAAAA,QAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,WAAU;AAAA,YACV,SAAQ;AAAA,YACR,OAAM;AAAA,YACN,KAAK;AAAA,cACH,UAAU;AAAA,cACV,KAAK;AAAA,cACL,MAAM;AAAA,cACN,OAAO;AAAA,cACP,YAAY;AAAA,cACZ,QAAQ;AAAA,cACR,YAAY,kBAAkB,KAAK;AAAA,cACnC,SAAS,kBAAkB,MAAM;AAAA,YACnC;AAAA;AAAA,UAEA,gBAAAA,QAAA;AAAA,YAAC,eAAe,SAAS;AAAA,YAAxB;AAAA,cACC,KAAK;AAAA,gBACH,GAAG;AAAA,cACL;AAAA,cACA,SAAS,OAAK,EAAE,gBAAgB;AAAA;AAAA,YAEhC,gBAAAA,QAAA,cAAC,eAAe,SAAS,OAAxB,OACG,eAAgB,YAAY,iBAAkB,YAC9C,gBAAAA,QAAA;AAAA,cAAC;AAAA;AAAA,gBACC,SAAS,MAAM;AACb,sBAAI,cAAc;AAChB,2BAAO;AAAA,kBACT;AAEA,6BAAW,MAAM;AACf,+BAAW;AAAA,kBACb,GAAG,CAAC;AAAA,gBACN;AAAA;AAAA,YACF,GAED,eAAe,CAAC,wBAAwB,gBAAAA,QAAA,cAAC,sBAAmB,WAAW,kBAAkB,GACzF,WAAW,WAAW,gBAAgB,SAAS,KAAK,CAAC,uBACpD,gBAAAA,QAAA;AAAA,cAAC;AAAA;AAAA,gBACC,QAAQ;AAAA,gBACR,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,WAAW;AAAA,gBACX,iBAAiB;AAAA,gBACjB,QAAQ;AAAA,gBACR,cAAc,WAAW;AAAA;AAAA,YAC3B,IACE,MACJ,gBAAAA,QAAA,cAAC,4BAAyB,MAAM,sBAAsB,iBAAkC,CAC1F;AAAA,UACF;AAAA,QACF,CACF,IACE,MACH,mBACC,gBAAAA,QAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,WAAW,WAAW,kBAAkB;AAAA,YACxC,SAAQ;AAAA,YACR,OAAM;AAAA,YACN,KAAK;AAAA,cACH,UAAU;AAAA,cACV,QAAQ,kBAAgB,0CAAU,SAAS,OAAnB,mBAAuB,mBAAkB,gBAAgB,MAAM,OAAO;AAAA,cAC9F,MAAM;AAAA,cACN,QAAQ;AAAA,cACR,YACE,YAAY,cACR,KACA,2BAA2B,MAAM,OAAO,eAAe,KAAK,cAAc,MAAM,OAAO,eAAe,KAAK;AAAA,cACjH,OAAO;AAAA,cACP,IAAI;AAAA,cACJ,YAAY;AAAA,cACZ,YAAY;AAAA,YACd;AAAA;AAAA,YAEC,0CAAU,SAAS,OAAnB,mBAAuB,mBAAkB,gBAAgB,MACxD,gBAAAA,QAAA,cAAC,eAAe,UAAf,EAAwB,cAA4B,iBAAkC,IACrF;AAAA,UACJ,gBAAAA,QAAA;AAAA,YAAC,eAAe,SAAS;AAAA,YAAxB;AAAA,cACC,KAAK;AAAA,gBACH,GAAG;AAAA,cACL;AAAA,cACA,SAAS,OAAK,EAAE,gBAAgB;AAAA;AAAA,YAEhC,gBAAAA,QAAA,cAAC,eAAe,SAAS,MAAxB,MACE,EAAE,YAAY,gBACb,gBAAAA,QAAA,cAAAA,QAAA,kBACG,0CAAU,SAAS,OAAnB,mBAAuB,mBAAkB,gBAAgB,MACxD,gBAAAA,QAAA,cAAAA,QAAA,gBACE,gBAAAA,QAAA,cAAC,eAAe,sBAAsB,QAArC,EAA4C,UAAoB,UAAoB,GACpF,CAAC,cAAc,gBAAAA,QAAA,cAAC,eAAe,UAAf,IAAwB,IAAK,IAChD,IACE,MACJ,gBAAAA,QAAA,cAAC,eAAe,QAAf,IAAsB,CACzB,GAEF,gBAAAA,QAAA;AAAA,cAAC;AAAA;AAAA,gBACC,KAAK,EAAE,IAAI,KAAK;AAAA,gBAChB,SAAS,CAAM,MAAK;AAClB,oBAAE,gBAAgB;AAClB,wBAAM,uCAAW;AACjB,iCAAe,IAAI;AAAA,gBACrB;AAAA,gBACA,KAAI;AAAA,gBACJ,eAAY;AAAA;AAAA,cAEZ,gBAAAA,QAAA,cAAC,WAAQ,OAAO,cAAc,SAAS,cAAc,MAAK,SACxD,gBAAAA,QAAA,cAAC,QAAK,SAAQ,UAAS,KAAK,GAAG,OAAM,YACnC,gBAAAA,QAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,KAAK;AAAA,oBACH,QAAQ;AAAA,oBACR,OAAO;AAAA,oBACP,YAAY,cAAc,yBAAyB;AAAA,oBACnD,GAAG;AAAA,kBACL;AAAA;AAAA,cACF,GACA,gBAAAA,QAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,KAAK;AAAA,oBACH,GAAG,cAAc,qBAAqB;AAAA,oBACtC,YAAY;AAAA,kBACd;AAAA;AAAA,gBAEC,cAAc,SAAS;AAAA,cAC1B,CACF,CACF;AAAA,YACF,IACE,YAAY,gBACd,CAAC,iBACD,0CAAU,SAAS,OAAnB,mBAAuB,mBAAkB,gBAAgB,MACvD,gBAAAA,QAAA,cAAC,eAAe,UAAf,IAAwB,IACvB,IACN;AAAA,YAEA,gBAAAA,QAAA,cAAC,eAAe,SAAS,OAAxB,MACE,eAAe,EAAE,YAAY,gBAAgB,gBAAAA,QAAA,cAAC,sBAAmB,WAAW,kBAAkB,GAC9F,gBAAgB,SAAS,KAAK,EAAE,YAAY,eAC3C,gBAAAA,QAAA;AAAA,cAAC;AAAA;AAAA,gBACC,QAAQ;AAAA,gBACR,cAAc;AAAA,gBACd,MAAM;AAAA,gBACN,WAAW;AAAA,gBACX,iBAAiB;AAAA,gBACjB,QAAQ;AAAA;AAAA,YACV,IACE,MACH,wBACC,gBAAAA,QAAA,cAAC,oBAAiB,cAA4B,UAAU,QAAQ,IAC9D,IACN;AAAA,UACF;AAAA,QACF,CAEJ;AAAA,MACF;AAAA,IACF,CACF;AAAA,IACA,gBAAAA,QAAA,cAAC,cAAW,cAA4B;AAAA,IACvC,YAAY,CAAC,gBAAgB,gBAAAA,QAAA,cAAC,kBAAa;AAAA,EAC9C;AAEJ;AAEA,IAAO,kBAAQ;",
6
+ "names": ["React", "useCallback", "useEffect", "useState", "useMedia", "HMSHLSPlayerEvents", "React", "React", "React", "React", "React", "hlsPlayer", "React", "React", "React", "React", "React", "getDurationFromSeconds", "hlsPlayer", "videoProgress", "bufferProgress", "videoEl", "React", "React", "useCallback", "useEffect", "useState", "hlsPlayer", "useState", "getDurationFromSeconds", "useCallback", "useEffect", "React", "React", "useState", "hlsPlayer", "useState", "React", "volume", "React", "React", "React", "useMedia", "VolumeTwoIcon", "useMedia", "React", "VolumeTwoIcon", "React", "hlsPlayer", "React", "React", "useMedia", "CrossIcon", "useMedia", "React", "CrossIcon", "React", "React", "useMedia", "useEffect", "useState", "showLoader", "useCallback", "_a", "_b", "React", "isCaptionEnabled", "HMSHLSPlayerEvents", "isMobile", "isLandscape"]
7
+ }
@@ -1,6 +1,6 @@
1
1
  @import "https://fonts.googleapis.com/css2?family=Inter:wght@400;500&display=swap";
2
2
 
3
- /* ../../../../../../../tmp/tmp-2877-AOYuo6PDc2oK/19203e066563/tldraw.css */
3
+ /* ../../../../../../../tmp/tmp-2828-8M1VZ2zrMhWy/1920591f20d3/tldraw.css */
4
4
  .tl-container {
5
5
  width: 100%;
6
6
  height: 100%;
@@ -2756,7 +2756,7 @@ input,
2756
2756
  font-size: 12px;
2757
2757
  }
2758
2758
 
2759
- /* ../../../../../../../tmp/tmp-2877-AOYuo6PDc2oK/19203e065fe1/index.css */
2759
+ /* ../../../../../../../tmp/tmp-2828-8M1VZ2zrMhWy/1920591f18f0/index.css */
2760
2760
  .tlui-navigation-zone,
2761
2761
  .tlui-navigation-panel {
2762
2762
  display: none;
@@ -2777,4 +2777,4 @@ input,
2777
2777
  --layer-toasts: 10;
2778
2778
  --layer-cursor: 11;
2779
2779
  }
2780
- /*# sourceMappingURL=HLSView-KKVZM355.css.map */
2780
+ /*# sourceMappingURL=HLSView-E242LM6X.css.map */