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

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 (136) hide show
  1. package/dist/{HLSView-PY2FKWX3.js → HLSView-QMU5JK7U.js} +208 -118
  2. package/dist/HLSView-QMU5JK7U.js.map +7 -0
  3. package/dist/Prebuilt/AppContext.d.ts +1 -1
  4. package/dist/Prebuilt/components/Chat/ChatFooter.d.ts +7 -0
  5. package/dist/Prebuilt/components/Connection/ConnectionIndicator.d.ts +6 -0
  6. package/dist/Prebuilt/components/Connection/TileConnection.d.ts +10 -0
  7. package/dist/Prebuilt/components/Footer/ChatToggle.d.ts +2 -0
  8. package/dist/Prebuilt/components/Footer/RoleAccordion.d.ts +14 -0
  9. package/dist/Prebuilt/components/Footer/RoleOptions.d.ts +6 -0
  10. package/dist/Prebuilt/components/Header/StreamActions.d.ts +11 -0
  11. package/dist/Prebuilt/components/Leave/DesktopLeaveRoom.d.ts +4 -3
  12. package/dist/Prebuilt/components/Leave/EndSessionContent.d.ts +4 -3
  13. package/dist/Prebuilt/components/Leave/LeaveCard.d.ts +1 -2
  14. package/dist/Prebuilt/components/Leave/LeaveSessionContent.d.ts +3 -1
  15. package/dist/Prebuilt/components/Leave/MwebLeaveRoom.d.ts +4 -3
  16. package/dist/Prebuilt/components/MoreSettings/SplitComponents/MwebOptions.d.ts +6 -0
  17. package/dist/Prebuilt/components/Preview/PreviewContainer.d.ts +3 -0
  18. package/dist/Prebuilt/components/Preview/PreviewJoin.d.ts +16 -0
  19. package/dist/Prebuilt/components/RoleChangeRequestModal.d.ts +2 -0
  20. package/dist/Prebuilt/components/SecondaryTiles.d.ts +1 -1
  21. package/dist/Prebuilt/components/SidePaneTabs.d.ts +7 -0
  22. package/dist/Prebuilt/components/VideoLayouts/EqualProminence.d.ts +1 -1
  23. package/dist/Prebuilt/components/VideoLayouts/Grid.d.ts +1 -0
  24. package/dist/Prebuilt/components/VideoLayouts/GridLayout.d.ts +5 -3
  25. package/dist/Prebuilt/components/VideoLayouts/ProminenceLayout.d.ts +6 -3
  26. package/dist/Prebuilt/components/VideoLayouts/RoleProminence.d.ts +1 -1
  27. package/dist/Prebuilt/components/VideoLayouts/ScreenshareLayout.d.ts +1 -1
  28. package/dist/Prebuilt/components/VideoLayouts/interface.d.ts +1 -0
  29. package/dist/Prebuilt/components/hooks/useAutoStartStreaming.d.ts +1 -0
  30. package/dist/Prebuilt/components/hooks/useRedirectToLeave.d.ts +3 -0
  31. package/dist/Prebuilt/components/hooks/useTileLayout.d.ts +2 -1
  32. package/dist/Prebuilt/components/hooks/useVideoTileLayout.d.ts +2 -0
  33. package/dist/Prebuilt/layouts/SidePane.d.ts +4 -1
  34. package/dist/Prebuilt/layouts/VideoStreamingSection.d.ts +2 -1
  35. package/dist/{VirtualBackground-AYDHYLIZ.js → VirtualBackground-37FXUPYO.js} +6 -6
  36. package/dist/VirtualBackground-37FXUPYO.js.map +7 -0
  37. package/dist/{chunk-GQD2AGWW.js → chunk-KBVIZGYW.js} +12 -2
  38. package/dist/{chunk-GQD2AGWW.js.map → chunk-KBVIZGYW.js.map} +2 -2
  39. package/dist/{chunk-RXTHJUMZ.js → chunk-WVGGQZK4.js} +986 -436
  40. package/dist/chunk-WVGGQZK4.js.map +7 -0
  41. package/dist/{chunk-E2M2ZSOL.js → chunk-ZKE2N5LH.js} +2 -2
  42. package/dist/{conference-V2XZGTKU.js → conference-FJJQ4TXX.js} +1136 -1301
  43. package/dist/conference-FJJQ4TXX.js.map +7 -0
  44. package/dist/index.cjs.js +3565 -3092
  45. package/dist/index.cjs.js.map +4 -4
  46. package/dist/index.js +2 -2
  47. package/dist/meta.cjs.json +773 -525
  48. package/dist/meta.esbuild.json +833 -579
  49. package/package.json +8 -7
  50. package/src/Prebuilt/App.tsx +10 -21
  51. package/src/Prebuilt/AppContext.tsx +1 -1
  52. package/src/Prebuilt/IconButton.jsx +10 -0
  53. package/src/Prebuilt/common/PeersSorter.ts +1 -1
  54. package/src/Prebuilt/common/constants.js +1 -2
  55. package/src/Prebuilt/common/utils.js +1 -1
  56. package/src/Prebuilt/components/AppData/AppData.jsx +8 -2
  57. package/src/Prebuilt/components/AppData/useUISettings.js +6 -6
  58. package/src/Prebuilt/components/AudioVideoToggle.jsx +8 -6
  59. package/src/Prebuilt/components/Chat/Chat.jsx +24 -11
  60. package/src/Prebuilt/components/Chat/ChatBody.jsx +20 -21
  61. package/src/Prebuilt/components/Chat/{ChatFooter.jsx → ChatFooter.tsx} +38 -13
  62. package/src/Prebuilt/components/Chat/useEmojiPickerStyles.js +5 -4
  63. package/src/Prebuilt/components/Connection/{ConnectionIndicator.jsx → ConnectionIndicator.tsx} +12 -4
  64. package/src/Prebuilt/components/Connection/{TileConnection.jsx → TileConnection.tsx} +20 -6
  65. package/src/Prebuilt/components/EmojiReaction.jsx +2 -6
  66. package/src/Prebuilt/components/Footer/{ChatToggle.jsx → ChatToggle.tsx} +4 -1
  67. package/src/Prebuilt/components/Footer/Footer.tsx +30 -5
  68. package/src/Prebuilt/components/Footer/ParticipantList.jsx +15 -49
  69. package/src/Prebuilt/components/Footer/{RoleAccordion.jsx → RoleAccordion.tsx} +33 -17
  70. package/src/Prebuilt/components/Footer/RoleOptions.tsx +155 -0
  71. package/src/Prebuilt/components/FullPageProgress.jsx +3 -3
  72. package/src/Prebuilt/components/HMSVideo/Controls.jsx +1 -0
  73. package/src/Prebuilt/components/HMSVideo/HLSQualitySelector.jsx +39 -17
  74. package/src/Prebuilt/components/HMSVideo/HMSVideo.jsx +2 -2
  75. package/src/Prebuilt/components/HMSVideo/VideoProgress.jsx +5 -6
  76. package/src/Prebuilt/components/HMSVideo/VolumeControl.jsx +1 -1
  77. package/src/Prebuilt/components/Header/HeaderComponents.jsx +8 -1
  78. package/src/Prebuilt/components/Header/{StreamActions.jsx → StreamActions.tsx} +23 -9
  79. package/src/Prebuilt/components/Header/common.jsx +5 -2
  80. package/src/Prebuilt/components/IconButtonWithOptions/IconButtonWithOptions.jsx +6 -1
  81. package/src/Prebuilt/components/InsetTile.tsx +15 -8
  82. package/src/Prebuilt/components/Leave/DesktopLeaveRoom.tsx +21 -11
  83. package/src/Prebuilt/components/Leave/EndSessionContent.tsx +2 -5
  84. package/src/Prebuilt/components/Leave/LeaveCard.tsx +1 -3
  85. package/src/Prebuilt/components/Leave/LeaveRoom.tsx +28 -25
  86. package/src/Prebuilt/components/Leave/LeaveSessionContent.tsx +8 -2
  87. package/src/Prebuilt/components/Leave/MwebLeaveRoom.tsx +8 -8
  88. package/src/Prebuilt/components/MoreSettings/ChangeNameContent.jsx +4 -0
  89. package/src/Prebuilt/components/MoreSettings/MoreSettings.tsx +1 -1
  90. package/src/Prebuilt/components/MoreSettings/SplitComponents/DesktopOptions.tsx +9 -23
  91. package/src/Prebuilt/components/MoreSettings/SplitComponents/{MwebOptions.jsx → MwebOptions.tsx} +89 -28
  92. package/src/Prebuilt/components/Notifications/Notifications.jsx +44 -28
  93. package/src/Prebuilt/components/Notifications/ReconnectNotifications.jsx +5 -11
  94. package/src/Prebuilt/components/Pagination.tsx +14 -12
  95. package/src/Prebuilt/components/Preview/{PreviewContainer.jsx → PreviewContainer.tsx} +11 -2
  96. package/src/Prebuilt/components/Preview/PreviewForm.tsx +6 -8
  97. package/src/Prebuilt/components/Preview/{PreviewJoin.jsx → PreviewJoin.tsx} +44 -21
  98. package/src/Prebuilt/components/{RoleChangeRequestModal.jsx → RoleChangeRequestModal.tsx} +36 -17
  99. package/src/Prebuilt/components/ScreenshareTile.jsx +6 -7
  100. package/src/Prebuilt/components/SecondaryTiles.tsx +12 -10
  101. package/src/Prebuilt/components/SidePaneTabs.tsx +120 -0
  102. package/src/Prebuilt/components/TileMenu/TileMenu.jsx +1 -1
  103. package/src/Prebuilt/components/TileMenu/TileMenuContent.jsx +14 -10
  104. package/src/Prebuilt/components/Toast/ToastConfig.jsx +5 -4
  105. package/src/Prebuilt/components/VideoLayouts/EqualProminence.tsx +13 -10
  106. package/src/Prebuilt/components/VideoLayouts/Grid.tsx +36 -34
  107. package/src/Prebuilt/components/VideoLayouts/GridLayout.tsx +33 -15
  108. package/src/Prebuilt/components/VideoLayouts/ProminenceLayout.tsx +45 -31
  109. package/src/Prebuilt/components/VideoLayouts/RoleProminence.tsx +12 -9
  110. package/src/Prebuilt/components/VideoLayouts/ScreenshareLayout.tsx +25 -9
  111. package/src/Prebuilt/components/VideoLayouts/interface.ts +1 -0
  112. package/src/Prebuilt/components/VideoTile.jsx +45 -53
  113. package/src/Prebuilt/components/conference.jsx +71 -74
  114. package/src/Prebuilt/components/hooks/useAutoStartStreaming.tsx +57 -0
  115. package/src/Prebuilt/components/hooks/useMetadata.jsx +19 -28
  116. package/src/Prebuilt/components/hooks/useRedirectToLeave.tsx +34 -0
  117. package/src/Prebuilt/components/hooks/useRoleProminencePeers.tsx +1 -1
  118. package/src/Prebuilt/components/hooks/useTileLayout.tsx +24 -18
  119. package/src/Prebuilt/components/hooks/useVideoTileLayout.ts +4 -0
  120. package/src/Prebuilt/layouts/EmbedView.jsx +1 -11
  121. package/src/Prebuilt/layouts/HLSView.jsx +152 -82
  122. package/src/Prebuilt/layouts/SidePane.tsx +25 -11
  123. package/src/Prebuilt/layouts/VideoStreamingSection.tsx +11 -47
  124. package/src/Prebuilt/plugins/FlyingEmoji.jsx +14 -2
  125. package/src/Prebuilt/plugins/VirtualBackground/VirtualBackground.jsx +3 -3
  126. package/src/Prebuilt/provider/roomLayoutProvider/hooks/useFetchRoomLayout.ts +2 -2
  127. package/src/Prebuilt/services/FeatureFlags.jsx +0 -1
  128. package/src/VideoTile/StyledVideoTile.tsx +1 -0
  129. package/dist/HLSView-PY2FKWX3.js.map +0 -7
  130. package/dist/VirtualBackground-AYDHYLIZ.js.map +0 -7
  131. package/dist/chunk-RXTHJUMZ.js.map +0 -7
  132. package/dist/conference-V2XZGTKU.js.map +0 -7
  133. package/src/Prebuilt/components/AudioLevel/BeamSpeakerLabelsLogging.jsx +0 -16
  134. package/src/Prebuilt/components/Chat/ChatParticipantHeader.jsx +0 -73
  135. package/src/Prebuilt/components/VideoList.jsx +0 -73
  136. /package/dist/{chunk-E2M2ZSOL.js.map → chunk-ZKE2N5LH.js.map} +0 -0
@@ -35,7 +35,7 @@ import {
35
35
  textEllipsis,
36
36
  theme,
37
37
  toastAnimation
38
- } from "./chunk-GQD2AGWW.js";
38
+ } from "./chunk-KBVIZGYW.js";
39
39
 
40
40
  // src/Button/Button.tsx
41
41
  import React2 from "react";
@@ -741,6 +741,7 @@ var Container = styled("div", {
741
741
  width: "100%",
742
742
  height: "100%",
743
743
  position: "relative",
744
+ overflow: "hidden",
744
745
  borderRadius: "$2",
745
746
  display: "flex",
746
747
  justifyContent: "center",
@@ -1989,14 +1990,14 @@ var Collapsible = {
1989
1990
  };
1990
1991
 
1991
1992
  // src/Prebuilt/App.tsx
1992
- import React61, { Suspense as Suspense2, useEffect as useEffect27, useRef as useRef8 } from "react";
1993
- import { BrowserRouter, MemoryRouter, Navigate, Route, Routes, useParams as useParams3 } from "react-router-dom";
1993
+ import React61, { Suspense as Suspense2, useEffect as useEffect29, useRef as useRef10 } from "react";
1994
+ import { BrowserRouter, MemoryRouter, Navigate, Route, Routes, useParams as useParams5 } from "react-router-dom";
1994
1995
  import {
1995
1996
  HMSReactiveStore,
1996
1997
  HMSRoomProvider,
1997
- selectIsConnectedToRoom as selectIsConnectedToRoom5,
1998
+ selectIsConnectedToRoom as selectIsConnectedToRoom7,
1998
1999
  useHMSActions as useHMSActions20,
1999
- useHMSStore as useHMSStore30
2000
+ useHMSStore as useHMSStore31
2000
2001
  } from "@100mslive/react-sdk";
2001
2002
 
2002
2003
  // src/Prebuilt/components/AppData/AppData.jsx
@@ -2004,6 +2005,7 @@ import React15, { useEffect as useEffect3 } from "react";
2004
2005
  import {
2005
2006
  HMSRoomState,
2006
2007
  selectAvailableRoleNames,
2008
+ selectFullAppData,
2007
2009
  selectHLSState,
2008
2010
  selectIsConnectedToRoom,
2009
2011
  selectLocalPeerRoleName,
@@ -2112,7 +2114,6 @@ var APP_DATA = {
2112
2114
  appConfig: "appConfig",
2113
2115
  sidePane: "sidePane",
2114
2116
  hlsStats: "hlsStats",
2115
- hlsViewerRole: "hlsViewerRole",
2116
2117
  waitingViewerRole: "waitingViewerRole",
2117
2118
  subscribedNotifications: "subscribedNotifications",
2118
2119
  logo: "logo",
@@ -2127,11 +2128,11 @@ var APP_DATA = {
2127
2128
  authToken: "authToken",
2128
2129
  pdfConfig: "pdfConfig",
2129
2130
  minimiseInset: "minimiseInset",
2130
- activeScreensharePeerId: "activeScreensharePeerId"
2131
+ activeScreensharePeerId: "activeScreensharePeerId",
2132
+ disableNotificiations: "disableNotificiations"
2131
2133
  };
2132
2134
  var UI_SETTINGS = {
2133
2135
  isAudioOnly: "isAudioOnly",
2134
- isHeadless: "isHeadless",
2135
2136
  maxTileCount: "maxTileCount",
2136
2137
  uiViewMode: "uiViewMode",
2137
2138
  showStatsOnTiles: "showStatsOnTiles",
@@ -2224,10 +2225,6 @@ var useSetUiSettings = (uiSettingKey) => {
2224
2225
  });
2225
2226
  return [value, setValue];
2226
2227
  };
2227
- var useIsHeadless = () => {
2228
- const isHeadless = useUISettings(UI_SETTINGS.isHeadless);
2229
- return isHeadless;
2230
- };
2231
2228
  var useWaitingViewerRole = () => {
2232
2229
  return useHMSStore3(selectAppData2(APP_DATA.waitingViewerRole));
2233
2230
  };
@@ -2257,6 +2254,10 @@ var useSubscribedNotifications = (notificationKey) => {
2257
2254
  const notificationPreference = useHMSStore3(selectAppDataByPath(APP_DATA.subscribedNotifications, notificationKey));
2258
2255
  return notificationPreference;
2259
2256
  };
2257
+ var useIsNotificationDisabled = () => {
2258
+ const notificationPreference = useHMSStore3(selectAppDataByPath(APP_DATA.disableNotificiations));
2259
+ return notificationPreference;
2260
+ };
2260
2261
  var useSetSubscribedNotifications = (notificationKey) => {
2261
2262
  const value = useSubscribedNotifications(notificationKey);
2262
2263
  const setValue = useSetAppData({
@@ -2325,7 +2326,6 @@ var getAppDetails = (appDetails) => {
2325
2326
  var initialAppData = {
2326
2327
  [APP_DATA.uiSettings]: {
2327
2328
  [UI_SETTINGS.isAudioOnly]: false,
2328
- [UI_SETTINGS.isHeadless]: false,
2329
2329
  [UI_SETTINGS.maxTileCount]: 9,
2330
2330
  [UI_SETTINGS.showStatsOnTiles]: false,
2331
2331
  [UI_SETTINGS.enableAmbientMusic]: false,
@@ -2353,7 +2353,8 @@ var initialAppData = {
2353
2353
  [APP_DATA.dropdownList]: [],
2354
2354
  [APP_DATA.authToken]: "",
2355
2355
  [APP_DATA.minimiseInset]: false,
2356
- [APP_DATA.activeScreensharePeerId]: ""
2356
+ [APP_DATA.activeScreensharePeerId]: "",
2357
+ [APP_DATA.disableNotificiations]: false
2357
2358
  };
2358
2359
  var AppData = React15.memo(({ appDetails, tokenEndpoint }) => {
2359
2360
  const hmsActions = useHMSActions3();
@@ -2364,13 +2365,14 @@ var AppData = React15.memo(({ appDetails, tokenEndpoint }) => {
2364
2365
  const roleNames = useHMSStore4(selectAvailableRoleNames);
2365
2366
  const rolesMap = useHMSStore4(selectRolesMap);
2366
2367
  const localPeerRole = useHMSStore4(selectLocalPeerRoleName);
2368
+ const appData = useHMSStore4(selectFullAppData);
2367
2369
  useEffect3(() => {
2368
2370
  if (!isConnected && sidePane && sidePane !== SIDE_PANE_OPTIONS.PARTICIPANTS) {
2369
2371
  resetSidePane();
2370
2372
  }
2371
2373
  }, [isConnected, sidePane, resetSidePane]);
2372
2374
  useEffect3(() => {
2373
- hmsActions.initAppData(initialAppData);
2375
+ hmsActions.initAppData(__spreadValues(__spreadValues({}, initialAppData), appData));
2374
2376
  hmsActions.setFrameworkInfo({
2375
2377
  type: "react-web",
2376
2378
  isPrebuilt: true,
@@ -2385,12 +2387,12 @@ var AppData = React15.memo(({ appDetails, tokenEndpoint }) => {
2385
2387
  hmsActions.setAppData(APP_DATA.uiSettings, updatedSettings, true);
2386
2388
  }, [preferences, hmsActions]);
2387
2389
  useEffect3(() => {
2388
- const appData = {
2390
+ const appData2 = {
2389
2391
  [APP_DATA.tokenEndpoint]: tokenEndpoint,
2390
2392
  [APP_DATA.appConfig]: getAppDetails(appDetails)
2391
2393
  };
2392
- for (const key in appData) {
2393
- hmsActions.setAppData([key], appData[key]);
2394
+ for (const key in appData2) {
2395
+ hmsActions.setAppData([key], appData2[key]);
2394
2396
  }
2395
2397
  }, [appDetails, tokenEndpoint, hmsActions]);
2396
2398
  useEffect3(() => {
@@ -2452,62 +2454,9 @@ var ResetStreamingStart = () => {
2452
2454
  return null;
2453
2455
  };
2454
2456
 
2455
- // src/Prebuilt/components/AudioLevel/BeamSpeakerLabelsLogging.jsx
2456
- import { useEffect as useEffect5 } from "react";
2457
- import { useHMSActions as useHMSActions4 } from "@100mslive/react-sdk";
2458
-
2459
- // src/Prebuilt/services/FeatureFlags.jsx
2460
- import { useEffect as useEffect4 } from "react";
2461
- import { selectRoomID, useHMSStore as useHMSStore5 } from "@100mslive/react-sdk";
2462
- var FeatureFlags = class {
2463
- static init(roomId) {
2464
- if (!window.HMS) {
2465
- window.HMS = {};
2466
- }
2467
- window.HMS.OPTIMISE_HLS_LATENCY = false;
2468
- window.HMS.ALWAYS_REQUEST_PERMISSIONS = false;
2469
- window.HMS.SHOW_NS = define_process_env_default.REACT_APP_ENV !== "prod";
2470
- this.enableTranscription = define_process_env_default.REACT_APP_TRANSCRIPTION_ROOM_ID === roomId;
2471
- }
2472
- static showNS() {
2473
- return window.HMS.SHOW_NS;
2474
- }
2475
- static optimiseHLSLatency() {
2476
- return window.HMS.OPTIMISE_HLS_LATENCY;
2477
- }
2478
- static alwaysRequestPermissions() {
2479
- return window.HMS.ALWAYS_REQUEST_PERMISSIONS;
2480
- }
2481
- };
2482
- __publicField(FeatureFlags, "enableTranscription", define_process_env_default.REACT_APP_ENABLE_TRANSCRIPTION === "true");
2483
- __publicField(FeatureFlags, "enableStatsForNerds", define_process_env_default.REACT_APP_ENABLE_STATS_FOR_NERDS === "true");
2484
- __publicField(FeatureFlags, "enableWhiteboard", define_process_env_default.REACT_APP_ENABLE_WHITEBOARD && define_process_env_default.REACT_APP_PUSHER_APP_KEY && define_process_env_default.REACT_APP_PUSHER_AUTHENDPOINT);
2485
- __publicField(FeatureFlags, "enableBeamSpeakersLogging", define_process_env_default.REACT_APP_ENABLE_BEAM_SPEAKERS_LOGGING === "true");
2486
- function FeatureFlagsInit() {
2487
- const roomId = useHMSStore5(selectRoomID);
2488
- useEffect4(() => {
2489
- if (roomId) {
2490
- FeatureFlags.init(roomId);
2491
- }
2492
- }, [roomId]);
2493
- return null;
2494
- }
2495
-
2496
- // src/Prebuilt/components/AudioLevel/BeamSpeakerLabelsLogging.jsx
2497
- function BeamSpeakerLabelsLogging() {
2498
- const hmsActions = useHMSActions4();
2499
- const isHeadless = useIsHeadless();
2500
- useEffect5(() => {
2501
- if (FeatureFlags.enableBeamSpeakersLogging && isHeadless) {
2502
- hmsActions.enableBeamSpeakerLabelsLogging();
2503
- }
2504
- }, [hmsActions, isHeadless]);
2505
- return null;
2506
- }
2507
-
2508
2457
  // src/Prebuilt/components/AuthToken.jsx
2509
- import React18, { useEffect as useEffect6, useState as useState4 } from "react";
2510
- import { useHMSActions as useHMSActions5 } from "@100mslive/react-sdk";
2458
+ import React18, { useEffect as useEffect4, useState as useState4 } from "react";
2459
+ import { useHMSActions as useHMSActions4 } from "@100mslive/react-sdk";
2511
2460
 
2512
2461
  // src/Prebuilt/AppContext.tsx
2513
2462
  import React16, { useContext } from "react";
@@ -2684,13 +2633,13 @@ var DialogInputFile = (_a7) => {
2684
2633
 
2685
2634
  // src/Prebuilt/components/AuthToken.jsx
2686
2635
  var AuthToken = React18.memo(({ authTokenByRoomCodeEndpoint, defaultAuthToken }) => {
2687
- const hmsActions = useHMSActions5();
2636
+ const hmsActions = useHMSActions4();
2688
2637
  const tokenEndpoint = useTokenEndpoint();
2689
2638
  const { roomCode, userId } = useHMSPrebuiltContext();
2690
2639
  const [error, setError] = useState4({ title: "", body: "" });
2691
2640
  let authToken = defaultAuthToken;
2692
2641
  const [, setAuthTokenInAppData] = useSetAppDataByKey(APP_DATA.authToken);
2693
- useEffect6(() => {
2642
+ useEffect4(() => {
2694
2643
  if (authToken) {
2695
2644
  setAuthTokenInAppData(authToken);
2696
2645
  return;
@@ -2830,17 +2779,55 @@ var ErrorBoundary = class extends Component {
2830
2779
 
2831
2780
  // src/Prebuilt/components/FullPageProgress.jsx
2832
2781
  import React20 from "react";
2833
- var FullPageProgress = ({ loaderColor = "$primary_default", loadingText = "" }) => /* @__PURE__ */ React20.createElement(Flex, { direction: "column", justify: "center", align: "center", css: { size: "100%", color: loaderColor } }, /* @__PURE__ */ React20.createElement(Loading, { color: "currentColor", size: 100 }), loadingText ? /* @__PURE__ */ React20.createElement(Text, { css: { mt: "$10", color: "$on_surface_high" } }, loadingText) : null);
2782
+ var FullPageProgress = ({ loaderColor = "$primary_default", text = "", css: css2 = {} }) => /* @__PURE__ */ React20.createElement(Flex, { direction: "column", justify: "center", align: "center", css: __spreadValues({ size: "100%", color: loaderColor }, css2) }, /* @__PURE__ */ React20.createElement(Loading, { color: "currentColor", size: 100 }), text ? /* @__PURE__ */ React20.createElement(Text, { css: { mt: "$10", color: "$on_surface_high" } }, text) : null);
2834
2783
  var FullPageProgress_default = FullPageProgress;
2835
2784
 
2836
2785
  // src/Prebuilt/components/init/Init.jsx
2837
- import React21, { useEffect as useEffect7 } from "react";
2786
+ import React21, { useEffect as useEffect6 } from "react";
2787
+
2788
+ // src/Prebuilt/services/FeatureFlags.jsx
2789
+ import { useEffect as useEffect5 } from "react";
2790
+ import { selectRoomID, useHMSStore as useHMSStore5 } from "@100mslive/react-sdk";
2791
+ var FeatureFlags = class {
2792
+ static init(roomId) {
2793
+ if (!window.HMS) {
2794
+ window.HMS = {};
2795
+ }
2796
+ window.HMS.OPTIMISE_HLS_LATENCY = false;
2797
+ window.HMS.ALWAYS_REQUEST_PERMISSIONS = false;
2798
+ window.HMS.SHOW_NS = define_process_env_default.REACT_APP_ENV !== "prod";
2799
+ this.enableTranscription = define_process_env_default.REACT_APP_TRANSCRIPTION_ROOM_ID === roomId;
2800
+ }
2801
+ static showNS() {
2802
+ return window.HMS.SHOW_NS;
2803
+ }
2804
+ static optimiseHLSLatency() {
2805
+ return window.HMS.OPTIMISE_HLS_LATENCY;
2806
+ }
2807
+ static alwaysRequestPermissions() {
2808
+ return window.HMS.ALWAYS_REQUEST_PERMISSIONS;
2809
+ }
2810
+ };
2811
+ __publicField(FeatureFlags, "enableTranscription", define_process_env_default.REACT_APP_ENABLE_TRANSCRIPTION === "true");
2812
+ __publicField(FeatureFlags, "enableStatsForNerds", define_process_env_default.REACT_APP_ENABLE_STATS_FOR_NERDS === "true");
2813
+ __publicField(FeatureFlags, "enableWhiteboard", define_process_env_default.REACT_APP_ENABLE_WHITEBOARD && define_process_env_default.REACT_APP_PUSHER_APP_KEY && define_process_env_default.REACT_APP_PUSHER_AUTHENDPOINT);
2814
+ function FeatureFlagsInit() {
2815
+ const roomId = useHMSStore5(selectRoomID);
2816
+ useEffect5(() => {
2817
+ if (roomId) {
2818
+ FeatureFlags.init(roomId);
2819
+ }
2820
+ }, [roomId]);
2821
+ return null;
2822
+ }
2823
+
2824
+ // src/Prebuilt/components/init/Init.jsx
2838
2825
  var Init = () => {
2839
2826
  const { toggleTheme } = useTheme();
2840
- useEffect7(() => {
2827
+ useEffect6(() => {
2841
2828
  window.toggleUiTheme = toggleTheme;
2842
2829
  }, [toggleTheme]);
2843
- useEffect7(() => {
2830
+ useEffect6(() => {
2844
2831
  function resetHeight() {
2845
2832
  var _a7;
2846
2833
  document.body.style.height = `${((_a7 = window.visualViewport) == null ? void 0 : _a7.height) || window.innerHeight}px`;
@@ -2855,12 +2842,12 @@ var Init = () => {
2855
2842
  };
2856
2843
 
2857
2844
  // src/Prebuilt/components/Input/KeyboardInputManager.js
2858
- import { useEffect as useEffect8 } from "react";
2845
+ import { useEffect as useEffect7 } from "react";
2859
2846
  import {
2860
2847
  selectAppData as selectAppData3,
2861
2848
  selectIsLocalAudioEnabled,
2862
2849
  selectIsLocalVideoEnabled,
2863
- useHMSActions as useHMSActions6,
2850
+ useHMSActions as useHMSActions5,
2864
2851
  useHMSVanillaStore as useHMSVanillaStore3
2865
2852
  } from "@100mslive/react-sdk";
2866
2853
  var isEvenListenersAttached = false;
@@ -2949,8 +2936,8 @@ _bind = new WeakMap();
2949
2936
  _unbind = new WeakMap();
2950
2937
  var KeyboardHandler = () => {
2951
2938
  const store = useHMSVanillaStore3();
2952
- const actions = useHMSActions6();
2953
- useEffect8(() => {
2939
+ const actions = useHMSActions5();
2940
+ useEffect7(() => {
2954
2941
  const keyboardManager = new KeyboardInputManager(store, actions);
2955
2942
  keyboardManager.bindAllShortcuts();
2956
2943
  return keyboardManager.unbindAllShortcuts;
@@ -2959,14 +2946,17 @@ var KeyboardHandler = () => {
2959
2946
  };
2960
2947
 
2961
2948
  // src/Prebuilt/components/Notifications/Notifications.jsx
2962
- import React30, { useEffect as useEffect17 } from "react";
2963
- import { useNavigate } from "react-router-dom";
2949
+ import React30, { useCallback as useCallback8, useEffect as useEffect16 } from "react";
2950
+ import { useNavigate as useNavigate2, useParams as useParams2 } from "react-router-dom";
2964
2951
  import {
2965
2952
  HMSNotificationTypes as HMSNotificationTypes7,
2966
2953
  HMSRoomState as HMSRoomState3,
2954
+ selectPeerMetadata,
2967
2955
  selectRoomState as selectRoomState3,
2956
+ useCustomEvent,
2968
2957
  useHMSNotifications as useHMSNotifications7,
2969
- useHMSStore as useHMSStore8
2958
+ useHMSStore as useHMSStore8,
2959
+ useHMSVanillaStore as useHMSVanillaStore4
2970
2960
  } from "@100mslive/react-sdk";
2971
2961
 
2972
2962
  // src/Prebuilt/provider/roomLayoutProvider/index.tsx
@@ -2974,7 +2964,7 @@ import React22 from "react";
2974
2964
  import merge from "lodash.merge";
2975
2965
 
2976
2966
  // src/Prebuilt/provider/roomLayoutProvider/hooks/useFetchRoomLayout.ts
2977
- import { useCallback as useCallback5, useEffect as useEffect9, useRef as useRef4, useState as useState5 } from "react";
2967
+ import { useCallback as useCallback5, useEffect as useEffect8, useRef as useRef4, useState as useState5 } from "react";
2978
2968
 
2979
2969
  // src/Prebuilt/provider/roomLayoutProvider/constants/index.ts
2980
2970
  import { JoinForm_JoinBtnType } from "@100mslive/types-prebuilt/elements/join_form";
@@ -3039,7 +3029,7 @@ var fetchWithRetry = (..._0) => __async(void 0, [..._0], function* (url = "", op
3039
3029
  throw error;
3040
3030
  });
3041
3031
  var useFetchRoomLayout = ({
3042
- endpoint = "https://api.100ms.live/v2/layouts/ui",
3032
+ endpoint = "",
3043
3033
  authToken = ""
3044
3034
  }) => {
3045
3035
  const [layout, setLayout] = useState5(void 0);
@@ -3055,7 +3045,7 @@ var useFetchRoomLayout = ({
3055
3045
  setLayout(layout2);
3056
3046
  }
3057
3047
  }, []);
3058
- useEffect9(() => {
3048
+ useEffect8(() => {
3059
3049
  (() => __async(void 0, null, function* () {
3060
3050
  var _a7, _b7;
3061
3051
  if (isFetchInProgress.current || !authToken) {
@@ -3063,7 +3053,7 @@ var useFetchRoomLayout = ({
3063
3053
  }
3064
3054
  isFetchInProgress.current = true;
3065
3055
  try {
3066
- const resp = yield fetchWithRetry(endpoint, {
3056
+ const resp = yield fetchWithRetry(endpoint || "https://api.100ms.live/v2/layouts/ui", {
3067
3057
  headers: {
3068
3058
  Authorization: `Bearer ${authToken}`
3069
3059
  }
@@ -3113,7 +3103,7 @@ var useUpdateRoomLayout = () => {
3113
3103
 
3114
3104
  // src/Prebuilt/components/Toast/ToastConfig.jsx
3115
3105
  import React23, { useCallback as useCallback6 } from "react";
3116
- import { selectPeerByID, useHMSActions as useHMSActions7, useHMSStore as useHMSStore6 } from "@100mslive/react-sdk";
3106
+ import { selectPeerByID, useHMSActions as useHMSActions6, useHMSStore as useHMSStore6 } from "@100mslive/react-sdk";
3117
3107
  import {
3118
3108
  ChatUnreadIcon,
3119
3109
  ConnectivityIcon,
@@ -3132,7 +3122,7 @@ var ChatAction = React23.forwardRef((_, ref) => {
3132
3122
  });
3133
3123
  var HandRaiseAction = React23.forwardRef(({ id = "", isSingleHandRaise = true }, ref) => {
3134
3124
  var _a7, _b7, _c;
3135
- const hmsActions = useHMSActions7();
3125
+ const hmsActions = useHMSActions6();
3136
3126
  const toggleSidepane = useSidepaneToggle(SIDE_PANE_OPTIONS.PARTICIPANTS);
3137
3127
  const isParticipantsOpen = useIsSidepaneTypeOpen(SIDE_PANE_OPTIONS.PARTICIPANTS);
3138
3128
  const peer = useHMSStore6(selectPeerByID(id));
@@ -3206,7 +3196,7 @@ var ToastConfig = {
3206
3196
  };
3207
3197
  }
3208
3198
  },
3209
- METADATA_UPDATED: {
3199
+ RAISE_HAND: {
3210
3200
  single: (notification) => {
3211
3201
  var _a7, _b7;
3212
3202
  return {
@@ -3217,8 +3207,12 @@ var ToastConfig = {
3217
3207
  },
3218
3208
  multiple: (notifications) => {
3219
3209
  var _a7;
3210
+ const count = new Set(notifications.map((notification) => {
3211
+ var _a8;
3212
+ return (_a8 = notification.data) == null ? void 0 : _a8.id;
3213
+ })).size;
3220
3214
  return {
3221
- title: `${(_a7 = notifications[notifications.length - 1].data) == null ? void 0 : _a7.name} and ${notifications.length - 1} others raised hand`,
3215
+ title: `${(_a7 = notifications[notifications.length - 1].data) == null ? void 0 : _a7.name} ${count > 1 ? `${count} and others` : ""} raised hand`,
3222
3216
  icon: /* @__PURE__ */ React23.createElement(HandIcon, null),
3223
3217
  action: /* @__PURE__ */ React23.createElement(HandRaiseAction, { isSingleHandRaise: false })
3224
3218
  };
@@ -3392,11 +3386,11 @@ function AutoplayBlockedModal() {
3392
3386
  }
3393
3387
 
3394
3388
  // src/Prebuilt/components/Notifications/InitErrorModal.jsx
3395
- import React25, { useEffect as useEffect10, useState as useState6 } from "react";
3389
+ import React25, { useEffect as useEffect9, useState as useState6 } from "react";
3396
3390
  var InitErrorModal = ({ notification }) => {
3397
3391
  const [showModal, setShowModal] = useState6(false);
3398
3392
  const [info, setInfo] = useState6({ title: "Init Error", description: "" });
3399
- useEffect10(() => {
3393
+ useEffect9(() => {
3400
3394
  const data = notification == null ? void 0 : notification.data;
3401
3395
  if (!data || data.action !== "INIT") {
3402
3396
  return;
@@ -3420,7 +3414,7 @@ var InitErrorModal = ({ notification }) => {
3420
3414
  };
3421
3415
 
3422
3416
  // src/Prebuilt/components/Notifications/PeerNotifications.jsx
3423
- import { useEffect as useEffect11 } from "react";
3417
+ import { useEffect as useEffect10 } from "react";
3424
3418
  import {
3425
3419
  HMSNotificationTypes,
3426
3420
  HMSRoomState as HMSRoomState2,
@@ -3432,7 +3426,7 @@ import {
3432
3426
  // src/Prebuilt/common/utils.js
3433
3427
  var getMetadata = (metadataString) => {
3434
3428
  try {
3435
- return metadataString === "" ? {} : JSON.parse(metadataString);
3429
+ return !metadataString ? {} : JSON.parse(metadataString);
3436
3430
  } catch (error) {
3437
3431
  return {};
3438
3432
  }
@@ -3466,7 +3460,7 @@ var PeerNotifications = () => {
3466
3460
  const isPeerJoinSubscribed = useSubscribedNotifications(SUBSCRIBED_NOTIFICATIONS.PEER_JOINED);
3467
3461
  const isPeerLeftSubscribed = useSubscribedNotifications(SUBSCRIBED_NOTIFICATIONS.PEER_LEFT);
3468
3462
  const roomState = useHMSStore7(selectRoomState2);
3469
- useEffect11(() => {
3463
+ useEffect10(() => {
3470
3464
  var _a7, _b7;
3471
3465
  if (roomState !== HMSRoomState2.Connected) {
3472
3466
  return;
@@ -3500,7 +3494,7 @@ var PeerNotifications = () => {
3500
3494
  };
3501
3495
 
3502
3496
  // src/Prebuilt/components/Notifications/PermissionErrorModal.jsx
3503
- import React26, { useEffect as useEffect12, useState as useState7 } from "react";
3497
+ import React26, { useEffect as useEffect11, useState as useState7 } from "react";
3504
3498
  import { useMedia } from "react-use";
3505
3499
  import { HMSNotificationTypes as HMSNotificationTypes2, useHMSNotifications as useHMSNotifications2 } from "@100mslive/react-sdk";
3506
3500
 
@@ -3516,7 +3510,7 @@ function PermissionErrorModal() {
3516
3510
  const [deviceType, setDeviceType] = useState7("");
3517
3511
  const [isSystemError, setIsSystemError] = useState7(false);
3518
3512
  const isMobile = useMedia(config.media.md);
3519
- useEffect12(() => {
3513
+ useEffect11(() => {
3520
3514
  var _a7, _b7, _c, _d, _e;
3521
3515
  if (!notification || ((_a7 = notification.data) == null ? void 0 : _a7.code) !== 3001 && ((_b7 = notification.data) == null ? void 0 : _b7.code) !== 3011 || ((_c = notification.data) == null ? void 0 : _c.code) === 3001 && ((_d = notification.data) == null ? void 0 : _d.message.includes("screen"))) {
3522
3516
  return;
@@ -3558,7 +3552,7 @@ function PermissionErrorModal() {
3558
3552
  }
3559
3553
 
3560
3554
  // src/Prebuilt/components/Notifications/ReconnectNotifications.jsx
3561
- import React27, { useEffect as useEffect13, useState as useState8 } from "react";
3555
+ import React27, { useEffect as useEffect12, useState as useState8 } from "react";
3562
3556
  import { HMSNotificationTypes as HMSNotificationTypes3, useHMSNotifications as useHMSNotifications3 } from "@100mslive/react-sdk";
3563
3557
  var notificationTypes2 = [
3564
3558
  HMSNotificationTypes3.RECONNECTED,
@@ -3566,11 +3560,10 @@ var notificationTypes2 = [
3566
3560
  HMSNotificationTypes3.ERROR
3567
3561
  ];
3568
3562
  var notificationId = null;
3569
- var isQA = define_process_env_default.REACT_APP_ENV === "qa";
3570
3563
  var ReconnectNotifications = () => {
3571
3564
  const notification = useHMSNotifications3(notificationTypes2);
3572
3565
  const [open, setOpen] = useState8(false);
3573
- useEffect13(() => {
3566
+ useEffect12(() => {
3574
3567
  var _a7;
3575
3568
  if ((notification == null ? void 0 : notification.type) === HMSNotificationTypes3.ERROR && ((_a7 = notification == null ? void 0 : notification.data) == null ? void 0 : _a7.isTerminal)) {
3576
3569
  setOpen(false);
@@ -3578,18 +3571,13 @@ var ReconnectNotifications = () => {
3578
3571
  notificationId = ToastManager.replaceToast(notificationId, ToastConfig.RECONNECTED.single());
3579
3572
  setOpen(false);
3580
3573
  } else if ((notification == null ? void 0 : notification.type) === HMSNotificationTypes3.RECONNECTING) {
3581
- if (isQA) {
3582
- ToastManager.removeToast(notificationId);
3583
- setOpen(true);
3584
- } else {
3585
- notificationId = ToastManager.replaceToast(
3586
- notificationId,
3587
- ToastConfig.RECONNECTING.single(notification.data.message)
3588
- );
3589
- }
3574
+ notificationId = ToastManager.replaceToast(
3575
+ notificationId,
3576
+ ToastConfig.RECONNECTING.single(notification.data.message)
3577
+ );
3590
3578
  }
3591
3579
  }, [notification]);
3592
- if (!open || !isQA)
3580
+ if (!open)
3593
3581
  return null;
3594
3582
  return /* @__PURE__ */ React27.createElement(Dialog.Root, { open, modal: true }, /* @__PURE__ */ React27.createElement(Dialog.Portal, { container: document.getElementById("conferencing") }, /* @__PURE__ */ React27.createElement(Dialog.Overlay, null), /* @__PURE__ */ React27.createElement(
3595
3583
  Dialog.Content,
@@ -3610,18 +3598,18 @@ var ReconnectNotifications = () => {
3610
3598
  };
3611
3599
 
3612
3600
  // src/Prebuilt/components/Notifications/TrackBulkUnmuteModal.jsx
3613
- import React28, { useEffect as useEffect14, useState as useState9 } from "react";
3614
- import { HMSNotificationTypes as HMSNotificationTypes4, useHMSActions as useHMSActions8, useHMSNotifications as useHMSNotifications4 } from "@100mslive/react-sdk";
3601
+ import React28, { useEffect as useEffect13, useState as useState9 } from "react";
3602
+ import { HMSNotificationTypes as HMSNotificationTypes4, useHMSActions as useHMSActions7, useHMSNotifications as useHMSNotifications4 } from "@100mslive/react-sdk";
3615
3603
  import { MicOnIcon } from "@100mslive/react-icons";
3616
3604
  var TrackBulkUnmuteModal = () => {
3617
- const hmsActions = useHMSActions8();
3605
+ const hmsActions = useHMSActions7();
3618
3606
  const [muteNotification, setMuteNotification] = useState9(null);
3619
3607
  const notification = useHMSNotifications4([
3620
3608
  HMSNotificationTypes4.CHANGE_MULTI_TRACK_STATE_REQUEST,
3621
3609
  HMSNotificationTypes4.ROOM_ENDED,
3622
3610
  HMSNotificationTypes4.REMOVED_FROM_ROOM
3623
3611
  ]);
3624
- useEffect14(() => {
3612
+ useEffect13(() => {
3625
3613
  switch (notification == null ? void 0 : notification.type) {
3626
3614
  case HMSNotificationTypes4.REMOVED_FROM_ROOM:
3627
3615
  case HMSNotificationTypes4.ROOM_ENDED:
@@ -3658,7 +3646,7 @@ var TrackBulkUnmuteModal = () => {
3658
3646
  };
3659
3647
 
3660
3648
  // src/Prebuilt/components/Notifications/TrackNotifications.jsx
3661
- import { useEffect as useEffect15 } from "react";
3649
+ import { useEffect as useEffect14 } from "react";
3662
3650
  import { HMSNotificationTypes as HMSNotificationTypes5, useHMSNotifications as useHMSNotifications5 } from "@100mslive/react-sdk";
3663
3651
  var notificationTypes3 = [
3664
3652
  HMSNotificationTypes5.TRACK_ADDED,
@@ -3668,7 +3656,7 @@ var notificationTypes3 = [
3668
3656
  ];
3669
3657
  var TrackNotifications = () => {
3670
3658
  const notification = useHMSNotifications5(notificationTypes3);
3671
- useEffect15(() => {
3659
+ useEffect14(() => {
3672
3660
  if (notification) {
3673
3661
  console.debug(`[${notification.type}]`, notification);
3674
3662
  }
@@ -3677,18 +3665,18 @@ var TrackNotifications = () => {
3677
3665
  };
3678
3666
 
3679
3667
  // src/Prebuilt/components/Notifications/TrackUnmuteModal.jsx
3680
- import React29, { useEffect as useEffect16, useState as useState10 } from "react";
3681
- import { HMSNotificationTypes as HMSNotificationTypes6, useHMSActions as useHMSActions9, useHMSNotifications as useHMSNotifications6 } from "@100mslive/react-sdk";
3668
+ import React29, { useEffect as useEffect15, useState as useState10 } from "react";
3669
+ import { HMSNotificationTypes as HMSNotificationTypes6, useHMSActions as useHMSActions8, useHMSNotifications as useHMSNotifications6 } from "@100mslive/react-sdk";
3682
3670
  import { MicOnIcon as MicOnIcon2 } from "@100mslive/react-icons";
3683
3671
  var TrackUnmuteModal = () => {
3684
- const hmsActions = useHMSActions9();
3672
+ const hmsActions = useHMSActions8();
3685
3673
  const notification = useHMSNotifications6([
3686
3674
  HMSNotificationTypes6.CHANGE_TRACK_STATE_REQUEST,
3687
3675
  HMSNotificationTypes6.ROOM_ENDED,
3688
3676
  HMSNotificationTypes6.REMOVED_FROM_ROOM
3689
3677
  ]);
3690
3678
  const [muteNotification, setMuteNotification] = useState10(null);
3691
- useEffect16(() => {
3679
+ useEffect15(() => {
3692
3680
  switch (notification == null ? void 0 : notification.type) {
3693
3681
  case HMSNotificationTypes6.REMOVED_FROM_ROOM:
3694
3682
  case HMSNotificationTypes6.ROOM_ENDED:
@@ -3722,17 +3710,497 @@ var TrackUnmuteModal = () => {
3722
3710
  );
3723
3711
  };
3724
3712
 
3713
+ // src/Prebuilt/components/hooks/useRedirectToLeave.tsx
3714
+ import { useCallback as useCallback7 } from "react";
3715
+ import { useNavigate, useParams } from "react-router-dom";
3716
+
3717
+ // src/Prebuilt/components/PIP/PIPManager.js
3718
+ import * as workerTimers from "worker-timers";
3719
+
3720
+ // src/Prebuilt/components/PIP/pipUtils.js
3721
+ var CANVAS_FILL_COLOR;
3722
+ var CANVAS_STROKE_COLOR;
3723
+ function setPIPCanvasColors() {
3724
+ if (!CANVAS_FILL_COLOR) {
3725
+ CANVAS_FILL_COLOR = window.getComputedStyle(document.documentElement).getPropertyValue("--hms-ui-colors-surface_bright");
3726
+ }
3727
+ if (!CANVAS_STROKE_COLOR) {
3728
+ CANVAS_STROKE_COLOR = window.getComputedStyle(document.documentElement).getPropertyValue("--hms-ui-colors-border_bright");
3729
+ }
3730
+ }
3731
+ function resetPIPCanvasColors() {
3732
+ CANVAS_FILL_COLOR = "";
3733
+ CANVAS_STROKE_COLOR = "";
3734
+ }
3735
+ function drawVideoElementsOnCanvas(videoElements, canvas) {
3736
+ let videoTiles = videoElements.filter((videoElement) => videoElement.srcObject !== null);
3737
+ const ctx = canvas.getContext("2d");
3738
+ setPIPCanvasColors();
3739
+ ctx.fillStyle = CANVAS_FILL_COLOR;
3740
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
3741
+ if (videoTiles.length === 0) {
3742
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
3743
+ return;
3744
+ }
3745
+ fillGridTiles(videoTiles.slice(0, 4), ctx, canvas);
3746
+ }
3747
+ function dummyChangeInCanvas(canvas) {
3748
+ const ctx = canvas.getContext("2d");
3749
+ setPIPCanvasColors();
3750
+ ctx.fillStyle = CANVAS_FILL_COLOR;
3751
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
3752
+ }
3753
+ function fillGridTiles(videoElements, ctx, canvas) {
3754
+ const offset = 8;
3755
+ canvas.width = 480;
3756
+ canvas.height = 320;
3757
+ ctx.fillStyle = CANVAS_FILL_COLOR;
3758
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
3759
+ if (videoElements.length > 0) {
3760
+ ctx.strokeStyle = CANVAS_STROKE_COLOR;
3761
+ ctx.lineWidth = offset / 2;
3762
+ ctx.strokeRect(0, 0, canvas.width, canvas.height);
3763
+ }
3764
+ if (videoElements.length === 1) {
3765
+ const video = videoElements[0];
3766
+ const { width, height } = getRenderDimensions(video, canvas.width - offset, canvas.height - offset);
3767
+ const xOffset = (canvas.width - width) / 2;
3768
+ const yOffset = (canvas.height - height) / 2;
3769
+ ctx.drawImage(video, xOffset, yOffset, width, height);
3770
+ }
3771
+ if (videoElements.length === 2) {
3772
+ videoElements.forEach((video, index) => {
3773
+ const { width, height } = getRenderDimensions(
3774
+ video,
3775
+ canvas.width / 2 - offset,
3776
+ // This will be the max available width for each tile
3777
+ canvas.height - offset
3778
+ );
3779
+ const xOffset = (canvas.width / 2 - width) / 2 + canvas.width / 2 * index;
3780
+ const yOffset = (canvas.height - height) / 2;
3781
+ ctx.drawImage(video, xOffset, yOffset, width, height);
3782
+ });
3783
+ const path = new Path2D();
3784
+ path.moveTo(canvas.width / 2, 0);
3785
+ path.lineTo(canvas.width / 2, canvas.height);
3786
+ ctx.stroke(path);
3787
+ }
3788
+ if (videoElements.length === 3) {
3789
+ videoElements.forEach((video, index) => {
3790
+ const { width, height } = getRenderDimensions(video, canvas.width / 2 - offset, canvas.height / 2 - offset);
3791
+ const xOffset = index < 2 ? (canvas.width / 2 - width) / 2 + canvas.width / 2 * index : canvas.width / 2 - width / 2;
3792
+ const yOffset = (index < 2 ? 0 : canvas.height / 2) + (canvas.height / 2 - height) / 2;
3793
+ ctx.drawImage(video, xOffset, yOffset, width, height);
3794
+ });
3795
+ const path = new Path2D();
3796
+ path.moveTo(canvas.width / 2, 0);
3797
+ path.lineTo(canvas.width / 2, canvas.height / 2);
3798
+ ctx.stroke(path);
3799
+ path.moveTo(0, canvas.height / 2);
3800
+ path.lineTo(canvas.width, canvas.height / 2);
3801
+ ctx.stroke(path);
3802
+ }
3803
+ if (videoElements.length === 4) {
3804
+ videoElements.forEach((video, index) => {
3805
+ const { width, height } = getRenderDimensions(video, canvas.width / 2 - offset, canvas.height / 2 - offset);
3806
+ const xOffset = (canvas.width / 2 - width) / 2 + canvas.width / 2 * (index % 2);
3807
+ const yOffset = (index < 2 ? 0 : canvas.height / 2) + (canvas.height / 2 - height) / 2;
3808
+ ctx.drawImage(video, xOffset, yOffset, width, height);
3809
+ });
3810
+ const path = new Path2D();
3811
+ path.moveTo(canvas.width / 2, 0);
3812
+ path.lineTo(canvas.width / 2, canvas.height);
3813
+ ctx.stroke(path);
3814
+ path.moveTo(0, canvas.height / 2);
3815
+ path.lineTo(canvas.width, canvas.height / 2);
3816
+ ctx.stroke(path);
3817
+ }
3818
+ }
3819
+ function getRenderDimensions(video, width, height) {
3820
+ let finalWidth = video.videoWidth / video.videoHeight * height;
3821
+ let finalHeight = height;
3822
+ if (finalWidth > width) {
3823
+ finalWidth = width;
3824
+ finalHeight = video.videoHeight / video.videoWidth * width;
3825
+ }
3826
+ return { width: finalWidth, height: finalHeight };
3827
+ }
3828
+
3829
+ // src/Prebuilt/components/PIP/PIPManager.js
3830
+ var MAX_NUMBER_OF_TILES_IN_PIP = 4;
3831
+ var DEFAULT_FPS = 30;
3832
+ var DEFAULT_CANVAS_WIDTH = 480;
3833
+ var DEFAULT_CANVAS_HEIGHT = 320;
3834
+ var LEAVE_EVENT_NAME = "leavepictureinpicture";
3835
+ var PIPStates = {
3836
+ starting: "starting",
3837
+ started: "started",
3838
+ stopping: "stopping",
3839
+ stopped: "stopped"
3840
+ };
3841
+ var PipManager = class {
3842
+ constructor() {
3843
+ __publicField(this, "listeners", /* @__PURE__ */ new Set());
3844
+ __publicField(this, "stop", () => __async(this, null, function* () {
3845
+ var _a7;
3846
+ if (this.state === PIPStates.stopped) {
3847
+ return;
3848
+ }
3849
+ this.state = PIPStates.stopping;
3850
+ (_a7 = this.pipVideo) == null ? void 0 : _a7.removeEventListener(LEAVE_EVENT_NAME, this.stop);
3851
+ if (this.timeoutRef) {
3852
+ workerTimers.clearTimeout(this.timeoutRef);
3853
+ this.timeoutRef = null;
3854
+ }
3855
+ if (this.isOn()) {
3856
+ this.exitPIP();
3857
+ }
3858
+ yield this.detachOldAttachNewTracks(this.tracksToShow, []);
3859
+ this.onStateChange(false);
3860
+ this.callListeners(false);
3861
+ this.reset();
3862
+ this.state = PIPStates.stopped;
3863
+ }));
3864
+ // ------- Private function --------------
3865
+ /**
3866
+ * @private {boolean} on - whether pip is on/off
3867
+ */
3868
+ __publicField(this, "callListeners", (on) => {
3869
+ this.listeners.forEach((listener) => listener == null ? void 0 : listener(on));
3870
+ });
3871
+ this.reset();
3872
+ }
3873
+ listenToStateChange(cb) {
3874
+ this.listeners.add(cb);
3875
+ }
3876
+ /**
3877
+ * @private
3878
+ */
3879
+ reset() {
3880
+ console.debug("resetting PIP state");
3881
+ resetPIPCanvasColors();
3882
+ this.canvas = null;
3883
+ this.pipVideo = null;
3884
+ this.timeoutRef = null;
3885
+ this.hmsActions = null;
3886
+ this.videoElements = [];
3887
+ this.tracksToShow = [];
3888
+ this.onStateChange = () => {
3889
+ };
3890
+ this.state = PIPStates.stopped;
3891
+ }
3892
+ /**
3893
+ * check if PIP is supported in this browser env
3894
+ */
3895
+ isSupported() {
3896
+ return !!document.pictureInPictureEnabled && !isIOS && !(isMacOS && isSafari);
3897
+ }
3898
+ /**
3899
+ * check if pip is currently turned on
3900
+ */
3901
+ isOn() {
3902
+ return !!document.pictureInPictureElement;
3903
+ }
3904
+ /**
3905
+ * request browser to start pip and start the render loop updating the pip
3906
+ * video element with peer tracks.
3907
+ * @param hmsActions
3908
+ * @param onStateChangeFn {function(bool):void} callback called to notify change in pip state
3909
+ */
3910
+ start(hmsActions, onStateChangeFn) {
3911
+ return __async(this, null, function* () {
3912
+ if (!this.isSupported()) {
3913
+ throw new Error("pip is not supported on this browser");
3914
+ }
3915
+ console.debug("starting PIP, current state", this.state);
3916
+ if (this.state === PIPStates.started) {
3917
+ yield this.stop();
3918
+ } else if (this.state === PIPStates.starting) {
3919
+ return;
3920
+ }
3921
+ this.state = PIPStates.starting;
3922
+ try {
3923
+ yield this.init(hmsActions, onStateChangeFn);
3924
+ this.pipVideo.addEventListener(LEAVE_EVENT_NAME, this.stop);
3925
+ this.renderLoop();
3926
+ if (!this.isOn()) {
3927
+ yield this.requestPIP();
3928
+ }
3929
+ console.debug("pip started");
3930
+ this.state = PIPStates.started;
3931
+ this.onStateChange(true);
3932
+ this.callListeners(true);
3933
+ } catch (err) {
3934
+ console.error("error in request pip", err);
3935
+ this.state = PIPStates.stopped;
3936
+ }
3937
+ });
3938
+ }
3939
+ /**
3940
+ * @param peers {Array} All Remote Peers present in call.
3941
+ * @param tracksMap {Object} map of track id to track
3942
+ * */
3943
+ updatePeersAndTracks(peers, tracksMap) {
3944
+ return __async(this, null, function* () {
3945
+ if (!this.canvas) {
3946
+ return;
3947
+ }
3948
+ const newTracksToShowUnordered = this.pickTracksToShow(peers, tracksMap);
3949
+ const currentTracksShowing = this.tracksToShow;
3950
+ this.tracksToShow = this.orderNewTracksToShow(newTracksToShowUnordered, currentTracksShowing);
3951
+ try {
3952
+ yield this.detachOldAttachNewTracks(currentTracksShowing, this.tracksToShow, tracksMap);
3953
+ } catch (error) {
3954
+ console.error("error in detaching/attaching tracks", error);
3955
+ }
3956
+ });
3957
+ }
3958
+ /**
3959
+ * @private
3960
+ */
3961
+ init(hmsActions, onStateChangeFn) {
3962
+ return __async(this, null, function* () {
3963
+ yield this.initMediaElements();
3964
+ this.hmsActions = hmsActions;
3965
+ this.onStateChange = onStateChangeFn;
3966
+ });
3967
+ }
3968
+ initMediaElements() {
3969
+ return __async(this, null, function* () {
3970
+ if (!this.canvas) {
3971
+ const { canvas, pipVideo } = this.initializeCanvasAndVideoElement();
3972
+ this.canvas = canvas;
3973
+ this.pipVideo = pipVideo;
3974
+ this.videoElements = this.initializeVideoElements();
3975
+ const videoPlayPromise = this.pipVideo.play();
3976
+ dummyChangeInCanvas(this.canvas);
3977
+ yield videoPlayPromise;
3978
+ }
3979
+ });
3980
+ }
3981
+ initializeCanvasAndVideoElement() {
3982
+ const canvas = document.createElement("canvas");
3983
+ canvas.width = DEFAULT_CANVAS_WIDTH;
3984
+ canvas.height = DEFAULT_CANVAS_HEIGHT;
3985
+ const pipVideo = document.createElement("video");
3986
+ pipVideo.width = DEFAULT_CANVAS_WIDTH;
3987
+ pipVideo.height = DEFAULT_CANVAS_HEIGHT;
3988
+ pipVideo.muted = true;
3989
+ pipVideo.srcObject = canvas.captureStream();
3990
+ return { canvas, pipVideo };
3991
+ }
3992
+ initializeVideoElements() {
3993
+ let videoElements = [];
3994
+ for (let i = 0; i < MAX_NUMBER_OF_TILES_IN_PIP; i++) {
3995
+ const videoElement = document.createElement("video");
3996
+ videoElement.autoplay = true;
3997
+ videoElement.playsinline = true;
3998
+ videoElements.push(videoElement);
3999
+ }
4000
+ return videoElements;
4001
+ }
4002
+ /**
4003
+ * render loop is responsible for rendering the video elements on canvas/pip.
4004
+ * in each loop current video elements are stitched and painted on canvas
4005
+ */
4006
+ renderLoop() {
4007
+ const delay = 1e3 / DEFAULT_FPS;
4008
+ this.timeoutRef = workerTimers.setTimeout(() => {
4009
+ if (this.state === PIPStates.stopping || this.state === PIPStates.stopped) {
4010
+ return;
4011
+ }
4012
+ if (this.state === PIPStates.started) {
4013
+ drawVideoElementsOnCanvas(this.videoElements, this.canvas);
4014
+ }
4015
+ this.renderLoop();
4016
+ }, delay);
4017
+ }
4018
+ requestPIP() {
4019
+ return __async(this, null, function* () {
4020
+ try {
4021
+ if (this.isOn()) {
4022
+ this.exitPIP();
4023
+ }
4024
+ yield this.pipVideo.requestPictureInPicture();
4025
+ } catch (error) {
4026
+ console.error("error in requestpip", error, "state", this.state);
4027
+ throw error;
4028
+ }
4029
+ });
4030
+ }
4031
+ exitPIP() {
4032
+ document.exitPictureInPicture();
4033
+ }
4034
+ /**
4035
+ * Logic - pick only enabled video tracks
4036
+ * @param peers {Array<any>}
4037
+ * @param tracksMap {Record<string, any>}
4038
+ */
4039
+ pickTracksToShow(peers, tracksMap) {
4040
+ var _a7;
4041
+ const tracksToShow = [];
4042
+ for (const peer of peers) {
4043
+ if (tracksToShow.length === MAX_NUMBER_OF_TILES_IN_PIP) {
4044
+ break;
4045
+ } else if (peer.videoTrack && ((_a7 = tracksMap[peer.videoTrack]) == null ? void 0 : _a7.enabled)) {
4046
+ tracksToShow.push(peer.videoTrack);
4047
+ }
4048
+ }
4049
+ return tracksToShow;
4050
+ }
4051
+ /**
4052
+ * there has to be a smart reordering of new tracks based on currently showing
4053
+ * ones to reduce unnecessary displacement. If someone was showing up both
4054
+ * earlier and now, it's a better UX to keep their position same instead
4055
+ * of letting it change.
4056
+ * The returned array is a shuffled version of newTracks with position of
4057
+ * tracks present in the old tracks intact.
4058
+ * eg. old = [1,5,9,3], new = [3,8,2,9], result = [8,2,9,3]
4059
+ * @param oldTracks {Array}
4060
+ * @param newTracks {Array}
4061
+ * @return {Array}
4062
+ */
4063
+ orderNewTracksToShow(newTracks, oldTracks) {
4064
+ const betterNewTracks = [];
4065
+ const leftOvers = [];
4066
+ newTracks.forEach((track) => {
4067
+ const oldPosition = oldTracks.indexOf(track);
4068
+ if (oldPosition !== -1 && oldPosition < newTracks.length) {
4069
+ betterNewTracks[oldPosition] = track;
4070
+ } else {
4071
+ leftOvers.push(track);
4072
+ }
4073
+ });
4074
+ for (let i = 0; i < newTracks.length; i++) {
4075
+ if (!betterNewTracks[i]) {
4076
+ betterNewTracks[i] = leftOvers.shift();
4077
+ }
4078
+ }
4079
+ return betterNewTracks;
4080
+ }
4081
+ /**
4082
+ * call detach for tracks which no longer need to be shown and attach for
4083
+ * new ones which are to be shown now.
4084
+ * Note: oldTracks and newTracks are not necessarily of same length
4085
+ * @param oldTracks {Array<String>}
4086
+ * @param newTracks {Array<String>}
4087
+ * @param tracksMap {Record<String, any>}
4088
+ */
4089
+ // eslint-disable-next-line complexity
4090
+ detachOldAttachNewTracks(oldTracks, newTracks, tracksMap = null) {
4091
+ return __async(this, null, function* () {
4092
+ const numTracks = Math.max(oldTracks.length, newTracks.length);
4093
+ for (let i = 0; i < numTracks; i++) {
4094
+ if (oldTracks[i] === newTracks[i]) {
4095
+ continue;
4096
+ } else if (oldTracks[i]) {
4097
+ if (!tracksMap || tracksMap[oldTracks[i]]) {
4098
+ yield this.hmsActions.detachVideo(oldTracks[i], this.videoElements[i]);
4099
+ }
4100
+ if (this.videoElements[i]) {
4101
+ this.videoElements[i].srcObject = null;
4102
+ }
4103
+ }
4104
+ if (newTracks[i]) {
4105
+ yield this.hmsActions.attachVideo(newTracks[i], this.videoElements[i]);
4106
+ }
4107
+ }
4108
+ });
4109
+ }
4110
+ };
4111
+ var PictureInPicture = new PipManager();
4112
+
4113
+ // src/Prebuilt/provider/roomLayoutProvider/hooks/useRoomLayoutScreen.ts
4114
+ function useRoomLayoutScreen({
4115
+ screen
4116
+ }) {
4117
+ var _a7;
4118
+ const roomLayout = useRoomLayout();
4119
+ const screenProps = (_a7 = roomLayout == null ? void 0 : roomLayout.screens) == null ? void 0 : _a7[screen];
4120
+ return screenProps;
4121
+ }
4122
+ function useRoomLayoutPreviewScreen() {
4123
+ var _a7;
4124
+ const screenProps = useRoomLayoutScreen({ screen: "preview" });
4125
+ const isPreviewScreenEnabled = !!screenProps;
4126
+ let elements;
4127
+ let screenType;
4128
+ if (isPreviewScreenEnabled) {
4129
+ screenType = Object.keys(screenProps)[0];
4130
+ elements = (_a7 = screenProps[screenType]) == null ? void 0 : _a7.elements;
4131
+ }
4132
+ return {
4133
+ isPreviewScreenEnabled,
4134
+ elements,
4135
+ screenType
4136
+ };
4137
+ }
4138
+ function useRoomLayoutConferencingScreen() {
4139
+ var _a7, _b7;
4140
+ const screenProps = useRoomLayoutScreen({ screen: "conferencing" }) || {};
4141
+ const screenType = Object.keys(screenProps)[0];
4142
+ const elements = (_a7 = screenProps[screenType]) == null ? void 0 : _a7.elements;
4143
+ const hideSections = ((_b7 = screenProps[screenType]) == null ? void 0 : _b7.hideSections) || [];
4144
+ return {
4145
+ hideSections,
4146
+ elements,
4147
+ screenType
4148
+ };
4149
+ }
4150
+ function useRoomLayoutLeaveScreen() {
4151
+ const screenProps = useRoomLayoutScreen({ screen: "leave" });
4152
+ const isLeaveScreenEnabled = !!screenProps;
4153
+ return {
4154
+ isLeaveScreenEnabled
4155
+ };
4156
+ }
4157
+
4158
+ // src/Prebuilt/components/hooks/useRedirectToLeave.tsx
4159
+ var useRedirectToLeave = () => {
4160
+ const { isLeaveScreenEnabled } = useRoomLayoutLeaveScreen();
4161
+ const { onLeave } = useHMSPrebuiltContext();
4162
+ const params = useParams();
4163
+ const navigate = useNavigate();
4164
+ const redirect = useCallback7(
4165
+ (timeout = 0) => {
4166
+ setTimeout(() => {
4167
+ const prefix = isLeaveScreenEnabled ? "/leave/" : "/";
4168
+ if (params.role) {
4169
+ navigate(prefix + params.roomId + "/" + params.role);
4170
+ } else {
4171
+ navigate(prefix + params.roomId);
4172
+ }
4173
+ PictureInPicture.stop().catch(() => console.error("stopping pip"));
4174
+ ToastManager.clearAllToast();
4175
+ onLeave == null ? void 0 : onLeave();
4176
+ }, timeout);
4177
+ },
4178
+ [isLeaveScreenEnabled, navigate, onLeave, params.role, params.roomId]
4179
+ );
4180
+ return { redirectToLeave: redirect };
4181
+ };
4182
+
3725
4183
  // src/Prebuilt/components/Notifications/Notifications.jsx
3726
4184
  function Notifications() {
3727
4185
  const notification = useHMSNotifications7();
3728
- const navigate = useNavigate();
4186
+ const navigate = useNavigate2();
4187
+ const params = useParams2();
4188
+ const vanillaStore = useHMSVanillaStore4();
3729
4189
  const subscribedNotifications = useSubscribedNotifications() || {};
3730
- const isHeadless = useIsHeadless();
3731
4190
  const roomState = useHMSStore8(selectRoomState3);
3732
4191
  const updateRoomLayoutForRole = useUpdateRoomLayout();
3733
- useEffect17(() => {
3734
- var _a7, _b7, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o;
3735
- if (!notification) {
4192
+ const isNotificationDisabled = useIsNotificationDisabled();
4193
+ const { redirectToLeave } = useRedirectToLeave();
4194
+ const handleRoleChangeDenied = useCallback8((request) => {
4195
+ ToastManager.addToast({
4196
+ title: `${request.peerName} denied your request to join the ${request.role.name} role`,
4197
+ variant: "error"
4198
+ });
4199
+ }, []);
4200
+ useCustomEvent({ type: ROLE_CHANGE_DECLINED, onEvent: handleRoleChangeDenied });
4201
+ useEffect16(() => {
4202
+ var _a7, _b7, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;
4203
+ if (!notification || isNotificationDisabled) {
3736
4204
  return;
3737
4205
  }
3738
4206
  switch (notification.type) {
@@ -3741,12 +4209,12 @@ function Notifications() {
3741
4209
  return;
3742
4210
  }
3743
4211
  const metadata = getMetadata((_a7 = notification.data) == null ? void 0 : _a7.metadata);
3744
- if (!(metadata == null ? void 0 : metadata.isHandRaised) || notification.data.isLocal || isHeadless)
4212
+ if (!(metadata == null ? void 0 : metadata.isHandRaised) || notification.data.isLocal)
3745
4213
  return;
3746
4214
  console.debug("Metadata updated", notification.data);
3747
4215
  if (!subscribedNotifications.METADATA_UPDATED)
3748
4216
  return;
3749
- ToastBatcher.showToast({ notification });
4217
+ ToastBatcher.showToast({ notification, type: "RAISE_HAND" });
3750
4218
  break;
3751
4219
  case HMSNotificationTypes7.NAME_UPDATED:
3752
4220
  console.log(notification.data.id + " changed their name to " + notification.data.name);
@@ -3766,7 +4234,7 @@ function Notifications() {
3766
4234
  {
3767
4235
  onClick: () => {
3768
4236
  ToastManager.removeToast(toastId);
3769
- window.location.reload();
4237
+ navigate(`/${params.roomId}${params.role ? `/${params.role}` : ""}`);
3770
4238
  }
3771
4239
  },
3772
4240
  "Rejoin"
@@ -3774,11 +4242,7 @@ function Notifications() {
3774
4242
  close: false
3775
4243
  });
3776
4244
  }
3777
- setTimeout(() => {
3778
- const previewLocation = window.location.pathname.replace("meeting", "leave");
3779
- ToastManager.clearAllToast();
3780
- navigate(previewLocation);
3781
- }, 2e3);
4245
+ redirectToLeave(1e3);
3782
4246
  return;
3783
4247
  }
3784
4248
  if (((_g = notification.data) == null ? void 0 : _g.code) === 3008 || ((_h = notification.data) == null ? void 0 : _h.code) === 3001 || ((_i = notification.data) == null ? void 0 : _i.code) === 3011) {
@@ -3793,20 +4257,24 @@ function Notifications() {
3793
4257
  title: `Error: ${(_k = notification.data) == null ? void 0 : _k.message} - ${(_l = notification.data) == null ? void 0 : _l.description}`
3794
4258
  });
3795
4259
  break;
3796
- case HMSNotificationTypes7.ROLE_UPDATED:
4260
+ case HMSNotificationTypes7.ROLE_UPDATED: {
3797
4261
  if ((_m = notification.data) == null ? void 0 : _m.isLocal) {
3798
- ToastManager.addToast({
3799
- title: `You are now a ${notification.data.roleName}`
3800
- });
3801
- updateRoomLayoutForRole(notification.data.roleName);
4262
+ const { prevRole } = vanillaStore.getState(selectPeerMetadata((_n = notification.data) == null ? void 0 : _n.id));
4263
+ if (prevRole !== ((_o = notification == null ? void 0 : notification.data) == null ? void 0 : _o.roleName)) {
4264
+ ToastManager.addToast({
4265
+ title: `You are now a ${notification.data.roleName}`
4266
+ });
4267
+ updateRoomLayoutForRole(notification.data.roleName);
4268
+ }
3802
4269
  }
3803
4270
  break;
4271
+ }
3804
4272
  case HMSNotificationTypes7.CHANGE_TRACK_STATE_REQUEST:
3805
- const track = (_n = notification.data) == null ? void 0 : _n.track;
4273
+ const track = (_p = notification.data) == null ? void 0 : _p.track;
3806
4274
  if (!notification.data.enabled) {
3807
4275
  ToastManager.addToast({
3808
4276
  title: `Your ${track.source} ${track.type} was muted by
3809
- ${(_o = notification.data.requestedBy) == null ? void 0 : _o.name}.`
4277
+ ${(_q = notification.data.requestedBy) == null ? void 0 : _q.name}.`
3810
4278
  });
3811
4279
  }
3812
4280
  break;
@@ -3816,11 +4284,7 @@ function Notifications() {
3816
4284
  title: `${notification.message}.
3817
4285
  ${notification.data.reason && `Reason: ${notification.data.reason}`}`
3818
4286
  });
3819
- setTimeout(() => {
3820
- const leaveLocation = window.location.pathname.replace("meeting", "leave");
3821
- navigate(leaveLocation);
3822
- ToastManager.clearAllToast();
3823
- }, 2e3);
4287
+ redirectToLeave(1e3);
3824
4288
  break;
3825
4289
  case HMSNotificationTypes7.DEVICE_CHANGE_UPDATE:
3826
4290
  ToastManager.addToast({
@@ -3831,12 +4295,15 @@ function Notifications() {
3831
4295
  break;
3832
4296
  }
3833
4297
  }, [notification, subscribedNotifications.ERROR, subscribedNotifications.METADATA_UPDATED]);
3834
- return /* @__PURE__ */ React30.createElement(React30.Fragment, null, !isHeadless && /* @__PURE__ */ React30.createElement(TrackUnmuteModal, null), !isHeadless && /* @__PURE__ */ React30.createElement(TrackBulkUnmuteModal, null), /* @__PURE__ */ React30.createElement(TrackNotifications, null), /* @__PURE__ */ React30.createElement(PeerNotifications, null), /* @__PURE__ */ React30.createElement(ReconnectNotifications, null), /* @__PURE__ */ React30.createElement(AutoplayBlockedModal, null), /* @__PURE__ */ React30.createElement(PermissionErrorModal, null), /* @__PURE__ */ React30.createElement(InitErrorModal, { notification }));
4298
+ if (isNotificationDisabled) {
4299
+ return null;
4300
+ }
4301
+ return /* @__PURE__ */ React30.createElement(React30.Fragment, null, /* @__PURE__ */ React30.createElement(TrackUnmuteModal, null), /* @__PURE__ */ React30.createElement(TrackBulkUnmuteModal, null), /* @__PURE__ */ React30.createElement(TrackNotifications, null), /* @__PURE__ */ React30.createElement(PeerNotifications, null), /* @__PURE__ */ React30.createElement(ReconnectNotifications, null), /* @__PURE__ */ React30.createElement(AutoplayBlockedModal, null), /* @__PURE__ */ React30.createElement(PermissionErrorModal, null), /* @__PURE__ */ React30.createElement(InitErrorModal, { notification }));
3835
4302
  }
3836
4303
 
3837
4304
  // src/Prebuilt/components/PostLeave.jsx
3838
4305
  import React37 from "react";
3839
- import { useNavigate as useNavigate2, useParams } from "react-router-dom";
4306
+ import { useNavigate as useNavigate3, useParams as useParams3 } from "react-router-dom";
3840
4307
  import { ExitIcon } from "@100mslive/react-icons";
3841
4308
 
3842
4309
  // src/Prebuilt/components/Header/Header.tsx
@@ -3845,7 +4312,7 @@ import { useMedia as useMedia4 } from "react-use";
3845
4312
  import { HMSRoomState as HMSRoomState5, selectRoomState as selectRoomState5, useHMSStore as useHMSStore17 } from "@100mslive/react-sdk";
3846
4313
 
3847
4314
  // src/Prebuilt/components/Header/HeaderComponents.jsx
3848
- import React31, { useState as useState11 } from "react";
4315
+ import React31, { useEffect as useEffect17, useState as useState11 } from "react";
3849
4316
  import { useMedia as useMedia2 } from "react-use";
3850
4317
  import { selectDominantSpeaker, selectIsConnectedToRoom as selectIsConnectedToRoom2, useHMSStore as useHMSStore9 } from "@100mslive/react-sdk";
3851
4318
  import { VolumeOneIcon } from "@100mslive/react-icons";
@@ -3878,6 +4345,11 @@ var Logo = () => {
3878
4345
  const isMobile = useMedia2(config.media.md);
3879
4346
  const isConnected = useHMSStore9(selectIsConnectedToRoom2);
3880
4347
  const [hideImage, setHideImage] = useState11(false);
4348
+ useEffect17(() => {
4349
+ if (hideImage) {
4350
+ setHideImage(false);
4351
+ }
4352
+ }, [logo]);
3881
4353
  if (isConnected && isMobile) {
3882
4354
  return null;
3883
4355
  }
@@ -3894,8 +4366,8 @@ var Logo = () => {
3894
4366
  ) : null;
3895
4367
  };
3896
4368
 
3897
- // src/Prebuilt/components/Header/StreamActions.jsx
3898
- import React34, { useCallback as useCallback11, useEffect as useEffect19, useRef as useRef5, useState as useState14 } from "react";
4369
+ // src/Prebuilt/components/Header/StreamActions.tsx
4370
+ import React34, { useCallback as useCallback13, useEffect as useEffect19, useRef as useRef5, useState as useState13 } from "react";
3899
4371
  import { useMedia as useMedia3 } from "react-use";
3900
4372
  import {
3901
4373
  HMSRoomState as HMSRoomState4,
@@ -3903,7 +4375,7 @@ import {
3903
4375
  selectIsConnectedToRoom as selectIsConnectedToRoom3,
3904
4376
  selectPermissions,
3905
4377
  selectRoomState as selectRoomState4,
3906
- useHMSActions as useHMSActions13,
4378
+ useHMSActions as useHMSActions12,
3907
4379
  useHMSStore as useHMSStore15,
3908
4380
  useRecordingStreaming as useRecordingStreaming2
3909
4381
  } from "@100mslive/react-sdk";
@@ -4007,7 +4479,7 @@ var Sheet = {
4007
4479
  };
4008
4480
 
4009
4481
  // src/Prebuilt/components/Header/AdditionalRoomState.jsx
4010
- import React33, { useState as useState13 } from "react";
4482
+ import React33, { useState as useState12 } from "react";
4011
4483
  import { selectLocalPeerID as selectLocalPeerID3, selectPeerSharingVideoPlaylist, useHMSStore as useHMSStore14, useScreenShare } from "@100mslive/react-sdk";
4012
4484
  import {
4013
4485
  AudioPlayerIcon,
@@ -4020,56 +4492,46 @@ import {
4020
4492
  } from "@100mslive/react-icons";
4021
4493
 
4022
4494
  // src/Prebuilt/plugins/whiteboard/useWhiteboardMetadata.js
4023
- import { useCallback as useCallback8, useEffect as useEffect18, useMemo as useMemo2 } from "react";
4495
+ import { useCallback as useCallback10, useEffect as useEffect18, useMemo as useMemo2 } from "react";
4024
4496
  import { selectLocalPeerID as selectLocalPeerID2, selectPeerByCondition, useHMSStore as useHMSStore11 } from "@100mslive/react-sdk";
4025
4497
 
4026
4498
  // src/Prebuilt/components/hooks/useMetadata.jsx
4027
- import { useCallback as useCallback7, useState as useState12 } from "react";
4028
- import { selectLocalPeerID, selectPeerMetadata, useHMSActions as useHMSActions10, useHMSStore as useHMSStore10 } from "@100mslive/react-sdk";
4499
+ import { useCallback as useCallback9 } from "react";
4500
+ import {
4501
+ selectLocalPeerID,
4502
+ selectPeerMetadata as selectPeerMetadata2,
4503
+ useHMSActions as useHMSActions9,
4504
+ useHMSStore as useHMSStore10,
4505
+ useHMSVanillaStore as useHMSVanillaStore5
4506
+ } from "@100mslive/react-sdk";
4029
4507
  var useMyMetadata = () => {
4030
- const hmsActions = useHMSActions10();
4508
+ const hmsActions = useHMSActions9();
4031
4509
  const localPeerId = useHMSStore10(selectLocalPeerID);
4032
- const metaData = useHMSStore10(selectPeerMetadata(localPeerId));
4033
- const [isHandRaised, setHandRaised] = useState12((metaData == null ? void 0 : metaData.isHandRaised) || false);
4034
- const [isBRBOn, setBRBOn] = useState12((metaData == null ? void 0 : metaData.isBRBOn) || false);
4510
+ const vanillaStore = useHMSVanillaStore5();
4511
+ const metaData = useHMSStore10(selectPeerMetadata2(localPeerId));
4035
4512
  const update = (updatedFields) => __async(void 0, null, function* () {
4036
4513
  try {
4037
- yield hmsActions.changeMetadata(Object.assign(metaData, updatedFields));
4514
+ const currentMetadata = vanillaStore.getState(selectPeerMetadata2(localPeerId));
4515
+ yield hmsActions.changeMetadata(Object.assign(currentMetadata, updatedFields));
4038
4516
  return true;
4039
4517
  } catch (error) {
4040
- console.error("failed to update metadata ", metaData, updatedFields);
4518
+ console.error("failed to update metadata ", updatedFields);
4041
4519
  }
4042
4520
  });
4043
- const toggleHandRaise = useCallback7(() => __async(void 0, null, function* () {
4044
- const brbUpdate = !isHandRaised ? false : isBRBOn;
4045
- const success = yield update({
4046
- isHandRaised: !isHandRaised,
4047
- isBRBOn: brbUpdate
4048
- });
4049
- if (success) {
4050
- setBRBOn(brbUpdate);
4051
- setHandRaised(!isHandRaised);
4052
- }
4053
- }), [isHandRaised, isBRBOn]);
4054
- const toggleBRB = useCallback7(() => __async(void 0, null, function* () {
4055
- const handRaiseUpdate = !isBRBOn ? false : isHandRaised;
4056
- const success = yield update({
4057
- isHandRaised: handRaiseUpdate,
4058
- isBRBOn: !isBRBOn
4059
- });
4060
- if (success) {
4061
- setBRBOn(!isBRBOn);
4062
- setHandRaised(handRaiseUpdate);
4063
- }
4064
- }), [isHandRaised, isBRBOn]);
4521
+ const toggleHandRaise = useCallback9(() => __async(void 0, null, function* () {
4522
+ yield update({ isHandRaised: !(metaData == null ? void 0 : metaData.isHandRaised), isBRBOn: false });
4523
+ }), [metaData == null ? void 0 : metaData.isHandRaised]);
4524
+ const toggleBRB = useCallback9(() => __async(void 0, null, function* () {
4525
+ yield update({ isBRBOn: !(metaData == null ? void 0 : metaData.isBRBOn), isHandRaised: false });
4526
+ }), [metaData == null ? void 0 : metaData.isBRBOn]);
4065
4527
  const setPrevRole = (role) => __async(void 0, null, function* () {
4066
4528
  yield update({
4067
4529
  prevRole: role
4068
4530
  });
4069
4531
  });
4070
4532
  return {
4071
- isHandRaised,
4072
- isBRBOn,
4533
+ isHandRaised: !!(metaData == null ? void 0 : metaData.isHandRaised),
4534
+ isBRBOn: !!(metaData == null ? void 0 : metaData.isBRBOn),
4073
4535
  metaData,
4074
4536
  updateMetaData: update,
4075
4537
  toggleHandRaise,
@@ -4087,7 +4549,7 @@ var useWhiteboardMetadata = () => {
4087
4549
  const { updateMetaData } = useMyMetadata();
4088
4550
  const whiteboardOwner = useHMSStore11(selectPeerByCondition(isWhiteboardOwner));
4089
4551
  const amIWhiteboardOwner = useMemo2(() => localPeerID === (whiteboardOwner == null ? void 0 : whiteboardOwner.id), [localPeerID, whiteboardOwner]);
4090
- const toggleWhiteboard = useCallback8(() => __async(void 0, null, function* () {
4552
+ const toggleWhiteboard = useCallback10(() => __async(void 0, null, function* () {
4091
4553
  if (!define_process_env_default.REACT_APP_PUSHER_APP_KEY) {
4092
4554
  console.error("Cannot start whiteboard - Pusher Key unavailable");
4093
4555
  }
@@ -4115,29 +4577,29 @@ var useWhiteboardMetadata = () => {
4115
4577
  };
4116
4578
 
4117
4579
  // src/Prebuilt/components/hooks/usePlaylistMusic.js
4118
- import { useCallback as useCallback9 } from "react";
4580
+ import { useCallback as useCallback11 } from "react";
4119
4581
  import {
4120
4582
  selectAudioPlaylist,
4121
4583
  selectAudioPlaylistTrackByPeerID,
4122
4584
  selectPeerSharingAudioPlaylist,
4123
- useHMSActions as useHMSActions11,
4585
+ useHMSActions as useHMSActions10,
4124
4586
  useHMSStore as useHMSStore12
4125
4587
  } from "@100mslive/react-sdk";
4126
4588
  var usePlaylistMusic = () => {
4127
4589
  const peer = useHMSStore12(selectPeerSharingAudioPlaylist);
4128
4590
  const track = useHMSStore12(selectAudioPlaylistTrackByPeerID(peer == null ? void 0 : peer.id));
4129
4591
  const selection = useHMSStore12(selectAudioPlaylist.selectedItem);
4130
- const hmsActions = useHMSActions11();
4131
- const play = useCallback9(
4592
+ const hmsActions = useHMSActions10();
4593
+ const play = useCallback11(
4132
4594
  (selectedId) => __async(void 0, null, function* () {
4133
4595
  yield hmsActions.audioPlaylist.play(selectedId);
4134
4596
  }),
4135
4597
  [hmsActions]
4136
4598
  );
4137
- const pause = useCallback9(() => {
4599
+ const pause = useCallback11(() => {
4138
4600
  hmsActions.audioPlaylist.pause();
4139
4601
  }, [hmsActions]);
4140
- const setVolume = useCallback9(
4602
+ const setVolume = useCallback11(
4141
4603
  (value) => {
4142
4604
  hmsActions.setVolume(value, track == null ? void 0 : track.id);
4143
4605
  },
@@ -4147,18 +4609,18 @@ var usePlaylistMusic = () => {
4147
4609
  };
4148
4610
 
4149
4611
  // src/Prebuilt/components/hooks/useScreenshareAudio.js
4150
- import { useCallback as useCallback10 } from "react";
4612
+ import { useCallback as useCallback12 } from "react";
4151
4613
  import {
4152
4614
  selectPeerSharingAudio,
4153
4615
  selectScreenShareAudioByPeerID,
4154
- useHMSActions as useHMSActions12,
4616
+ useHMSActions as useHMSActions11,
4155
4617
  useHMSStore as useHMSStore13
4156
4618
  } from "@100mslive/react-sdk";
4157
4619
  var useScreenshareAudio = () => {
4158
- const hmsActions = useHMSActions12();
4620
+ const hmsActions = useHMSActions11();
4159
4621
  const peer = useHMSStore13(selectPeerSharingAudio);
4160
4622
  const track = useHMSStore13(selectScreenShareAudioByPeerID(peer == null ? void 0 : peer.id));
4161
- const handleMute = useCallback10(() => {
4623
+ const handleMute = useCallback12(() => {
4162
4624
  if (!peer.isLocal) {
4163
4625
  hmsActions.setVolume(!track.volume ? 100 : 0, track.id);
4164
4626
  } else {
@@ -4194,7 +4656,7 @@ var AdditionalRoomState = () => {
4194
4656
  const playlist = usePlaylistMusic();
4195
4657
  const isAudioOnly = useUISettings(UI_SETTINGS.isAudioOnly);
4196
4658
  const screenshareAudio = useScreenshareAudio();
4197
- const [open, setOpen] = useState13(false);
4659
+ const [open, setOpen] = useState12(false);
4198
4660
  const isPlaylistInactive = [
4199
4661
  !playlist.peer || !playlist.track,
4200
4662
  !((_a7 = playlist.peer) == null ? void 0 : _a7.isLocal) && !((_b7 = playlist.track) == null ? void 0 : _b7.enabled),
@@ -4281,19 +4743,19 @@ var AdditionalRoomState = () => {
4281
4743
  ))));
4282
4744
  };
4283
4745
 
4284
- // src/Prebuilt/components/Header/StreamActions.jsx
4746
+ // src/Prebuilt/components/Header/StreamActions.tsx
4285
4747
  var LiveStatus = () => {
4286
4748
  var _a7;
4287
4749
  const { isHLSRunning, isRTMPRunning } = useRecordingStreaming2();
4288
4750
  const hlsState = useHMSStore15(selectHLSState2);
4289
4751
  const isMobile = useMedia3(config.media.md);
4290
4752
  const intervalRef = useRef5(null);
4291
- const [liveTime, setLiveTime] = useState14(0);
4292
- const startTimer = useCallback11(() => {
4753
+ const [liveTime, setLiveTime] = useState13(0);
4754
+ const startTimer = useCallback13(() => {
4293
4755
  intervalRef.current = setInterval(() => {
4294
4756
  var _a8;
4295
- if (hlsState == null ? void 0 : hlsState.running) {
4296
- setLiveTime(Date.now() - ((_a8 = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _a8.startedAt.getTime()));
4757
+ if ((hlsState == null ? void 0 : hlsState.running) && ((_a8 = hlsState == null ? void 0 : hlsState.variants[0]) == null ? void 0 : _a8.startedAt)) {
4758
+ setLiveTime(Date.now() - hlsState.variants[0].startedAt.getTime());
4297
4759
  }
4298
4760
  }, 1e3);
4299
4761
  }, [hlsState == null ? void 0 : hlsState.running, hlsState == null ? void 0 : hlsState.variants]);
@@ -4343,6 +4805,7 @@ var RecordingStatus = () => {
4343
4805
  return /* @__PURE__ */ React34.createElement(
4344
4806
  Tooltip,
4345
4807
  {
4808
+ boxCss: { zIndex: 1 },
4346
4809
  title: getRecordingText({
4347
4810
  isBrowserRecordingOn,
4348
4811
  isServerRecordingOn,
@@ -4363,15 +4826,15 @@ var RecordingStatus = () => {
4363
4826
  };
4364
4827
  var StartRecording = () => {
4365
4828
  const permissions = useHMSStore15(selectPermissions);
4366
- const [open, setOpen] = useState14(false);
4829
+ const [open, setOpen] = useState13(false);
4367
4830
  const [recordingStarted, setRecordingState] = useSetAppDataByKey(APP_DATA.recordingStarted);
4368
4831
  const { isBrowserRecordingOn, isStreamingOn, isHLSRunning } = useRecordingStreaming2();
4369
- const hmsActions = useHMSActions13();
4832
+ const hmsActions = useHMSActions12();
4370
4833
  if (!(permissions == null ? void 0 : permissions.browserRecording) || isHLSRunning) {
4371
4834
  return null;
4372
4835
  }
4373
4836
  if (isBrowserRecordingOn) {
4374
- return /* @__PURE__ */ React34.createElement(Popover2.Root, { open, onOpenChange: setOpen }, /* @__PURE__ */ React34.createElement(Popover2.Trigger, { asChild: true }, /* @__PURE__ */ React34.createElement(Button, { variant: "danger", "data-testid": "stop_recording", icon: true, outlined: true, onClick: () => setOpen(true) }, /* @__PURE__ */ React34.createElement(RecordIcon, null), /* @__PURE__ */ React34.createElement(Text, { as: "span", css: { "@md": { display: "none" }, color: "currentColor" } }, "Stop Recording"))), /* @__PURE__ */ React34.createElement(Popover2.Portal, null, /* @__PURE__ */ React34.createElement(Popover2.Content, { align: "end", sideOffset: 8, css: { w: "$64" } }, /* @__PURE__ */ React34.createElement(Text, { variant: "body", css: { color: "$on_surface_medium" } }, "Are you sure you want to end the recording?"), /* @__PURE__ */ React34.createElement(
4837
+ return /* @__PURE__ */ React34.createElement(Popover2.Root, { open, onOpenChange: setOpen }, /* @__PURE__ */ React34.createElement(Popover2.Trigger, { asChild: true }, /* @__PURE__ */ React34.createElement(Button, { variant: "danger", "data-testid": "stop_recording", icon: true, outlined: true, onClick: () => setOpen(true) }, /* @__PURE__ */ React34.createElement(RecordIcon, null), /* @__PURE__ */ React34.createElement(Text, { as: "span", css: { "@md": { display: "none" }, color: "currentColor" } }, "Stop Recording"))), /* @__PURE__ */ React34.createElement(Popover2.Portal, null, /* @__PURE__ */ React34.createElement(Popover2.Content, { align: "end", sideOffset: 8, css: { w: "$64" } }, /* @__PURE__ */ React34.createElement(Text, { variant: "body1", css: { color: "$on_surface_medium" } }, "Are you sure you want to end the recording?"), /* @__PURE__ */ React34.createElement(
4375
4838
  Button,
4376
4839
  {
4377
4840
  "data-testid": "stop_recording_confirm",
@@ -4382,8 +4845,9 @@ var StartRecording = () => {
4382
4845
  try {
4383
4846
  yield hmsActions.stopRTMPAndRecording();
4384
4847
  } catch (error) {
4848
+ const err = error;
4385
4849
  ToastManager.addToast({
4386
- title: error.message,
4850
+ title: err.message,
4387
4851
  variant: "error"
4388
4852
  });
4389
4853
  }
@@ -4407,14 +4871,15 @@ var StartRecording = () => {
4407
4871
  record: true
4408
4872
  });
4409
4873
  } catch (error) {
4410
- if (error.message.includes("stream already running")) {
4874
+ const err = error;
4875
+ if (err.message.includes("stream already running")) {
4411
4876
  ToastManager.addToast({
4412
4877
  title: "Recording already running",
4413
4878
  variant: "error"
4414
4879
  });
4415
4880
  } else {
4416
4881
  ToastManager.addToast({
4417
- title: error.message,
4882
+ title: err.message,
4418
4883
  variant: "error"
4419
4884
  });
4420
4885
  }
@@ -4432,7 +4897,10 @@ var StreamActions = () => {
4432
4897
  const roomState = useHMSStore15(selectRoomState4);
4433
4898
  return /* @__PURE__ */ React34.createElement(Flex, { align: "center", css: { gap: "$4" } }, /* @__PURE__ */ React34.createElement(AdditionalRoomState, null), !isMobile && /* @__PURE__ */ React34.createElement(Flex, { align: "center", css: { gap: "$4" } }, /* @__PURE__ */ React34.createElement(RecordingStatus, null), roomState !== HMSRoomState4.Preview ? /* @__PURE__ */ React34.createElement(LiveStatus, null) : null), isConnected && !isMobile ? /* @__PURE__ */ React34.createElement(StartRecording, null) : null);
4434
4899
  };
4435
- var StopRecordingInSheet = ({ onStopRecording, onClose }) => {
4900
+ var StopRecordingInSheet = ({
4901
+ onStopRecording,
4902
+ onClose
4903
+ }) => {
4436
4904
  return /* @__PURE__ */ React34.createElement(Sheet.Root, { open: true }, /* @__PURE__ */ React34.createElement(Sheet.Content, null, /* @__PURE__ */ React34.createElement(Sheet.Title, { css: { p: "$10" } }, /* @__PURE__ */ React34.createElement(Flex, { direction: "row", justify: "between", css: { w: "100%", c: "$alert_error_default" } }, /* @__PURE__ */ React34.createElement(Flex, { justify: "start", align: "center", gap: "3" }, /* @__PURE__ */ React34.createElement(AlertTriangleIcon, null), /* @__PURE__ */ React34.createElement(Text, { variant: "h5", css: { c: "$alert_error_default" } }, "Stop Recording")), /* @__PURE__ */ React34.createElement(Sheet.Close, { css: { color: "white" }, onClick: onClose }, /* @__PURE__ */ React34.createElement(CrossIcon4, null)))), /* @__PURE__ */ React34.createElement(HorizontalDivider, null), /* @__PURE__ */ React34.createElement(Box, { as: "div", css: { p: "$10", overflowY: "scroll", maxHeight: "70vh" } }, /* @__PURE__ */ React34.createElement(Text, { variant: "caption", css: { c: "$on_surface_medium", pb: "$8" } }, "Are you sure you want to stop recording? You can\u2019t undo this action."), /* @__PURE__ */ React34.createElement(
4437
4905
  Button,
4438
4906
  {
@@ -4454,21 +4922,24 @@ import {
4454
4922
  selectLocalVideoTrackID,
4455
4923
  selectVideoTrackByID,
4456
4924
  useDevices,
4457
- useHMSActions as useHMSActions14,
4925
+ useHMSActions as useHMSActions13,
4458
4926
  useHMSStore as useHMSStore16
4459
4927
  } from "@100mslive/react-sdk";
4460
4928
  import { CameraFlipIcon, CheckIcon as CheckIcon2, CrossIcon as CrossIcon5, SpeakerIcon } from "@100mslive/react-icons";
4461
4929
  var CamaraFlipActions = () => {
4462
- const actions = useHMSActions14();
4930
+ const actions = useHMSActions13();
4463
4931
  const { allDevices } = useDevices();
4464
4932
  const { videoInput } = allDevices;
4465
4933
  const isVideoOn = useHMSStore16(selectIsLocalVideoEnabled2);
4466
4934
  const videoTrackId = useHMSStore16(selectLocalVideoTrackID);
4467
4935
  const localVideoTrack = useHMSStore16(selectVideoTrackByID(videoTrackId));
4936
+ if (!videoInput || !(videoInput == null ? void 0 : videoInput.length) || !(localVideoTrack == null ? void 0 : localVideoTrack.facingMode)) {
4937
+ return null;
4938
+ }
4468
4939
  return /* @__PURE__ */ React35.createElement(Box, null, /* @__PURE__ */ React35.createElement(
4469
4940
  IconButton_default,
4470
4941
  {
4471
- disabled: !(videoInput == null ? void 0 : videoInput.length) || !isVideoOn || !(localVideoTrack == null ? void 0 : localVideoTrack.facingMode),
4942
+ disabled: !isVideoOn,
4472
4943
  onClick: () => __async(void 0, null, function* () {
4473
4944
  try {
4474
4945
  yield actions.switchCamera();
@@ -4529,6 +5000,7 @@ var AudioOutputSelectionSheet = ({ outputDevices, outputSelected, onChange, chil
4529
5000
  return /* @__PURE__ */ React35.createElement(
4530
5001
  SelectWithLabel,
4531
5002
  {
5003
+ key: audioDevice.deviceId,
4532
5004
  label: audioDevice.label,
4533
5005
  id: audioDevice.deviceId,
4534
5006
  checked: audioDevice.deviceId === outputSelected,
@@ -4595,57 +5067,12 @@ var Header2 = () => {
4595
5067
  ));
4596
5068
  };
4597
5069
 
4598
- // src/Prebuilt/provider/roomLayoutProvider/hooks/useRoomLayoutScreen.ts
4599
- function useRoomLayoutScreen({
4600
- screen
4601
- }) {
4602
- var _a7;
4603
- const roomLayout = useRoomLayout();
4604
- const screenProps = (_a7 = roomLayout == null ? void 0 : roomLayout.screens) == null ? void 0 : _a7[screen];
4605
- return screenProps;
4606
- }
4607
- function useRoomLayoutPreviewScreen() {
4608
- var _a7;
4609
- const screenProps = useRoomLayoutScreen({ screen: "preview" });
4610
- const isPreviewScreenEnabled = !!screenProps;
4611
- let elements;
4612
- let screenType;
4613
- if (isPreviewScreenEnabled) {
4614
- screenType = Object.keys(screenProps)[0];
4615
- elements = (_a7 = screenProps[screenType]) == null ? void 0 : _a7.elements;
4616
- }
4617
- return {
4618
- isPreviewScreenEnabled,
4619
- elements,
4620
- screenType
4621
- };
4622
- }
4623
- function useRoomLayoutConferencingScreen() {
4624
- var _a7, _b7;
4625
- const screenProps = useRoomLayoutScreen({ screen: "conferencing" }) || {};
4626
- const screenType = Object.keys(screenProps)[0];
4627
- const elements = (_a7 = screenProps[screenType]) == null ? void 0 : _a7.elements;
4628
- const hideSections = ((_b7 = screenProps[screenType]) == null ? void 0 : _b7.hideSections) || [];
4629
- return {
4630
- hideSections,
4631
- elements,
4632
- screenType
4633
- };
4634
- }
4635
- function useRoomLayoutLeaveScreen() {
4636
- const screenProps = useRoomLayoutScreen({ screen: "leave" });
4637
- const isLeaveScreenEnabled = !!screenProps;
4638
- return {
4639
- isLeaveScreenEnabled
4640
- };
4641
- }
4642
-
4643
5070
  // src/Prebuilt/components/PostLeave.jsx
4644
5071
  var PostLeave = () => {
4645
- const navigate = useNavigate2();
5072
+ const navigate = useNavigate3();
4646
5073
  const { isPreviewScreenEnabled } = useRoomLayoutPreviewScreen();
4647
5074
  const { roomCode } = useHMSPrebuiltContext();
4648
- const { roomId, role } = useParams();
5075
+ const { roomId, role } = useParams3();
4649
5076
  const [previewPreference] = useUserPreferences(UserPreferencesKeys.PREVIEW, defaultPreviewPreference);
4650
5077
  return /* @__PURE__ */ React37.createElement(Flex, { direction: "column", css: { size: "100%" } }, /* @__PURE__ */ React37.createElement(Box, { css: { h: "$18", "@md": { h: "$17" } }, "data-testid": "header" }, /* @__PURE__ */ React37.createElement(Header2, null)), /* @__PURE__ */ React37.createElement(
4651
5078
  Flex,
@@ -4691,13 +5118,14 @@ var PostLeave = () => {
4691
5118
  };
4692
5119
  var PostLeave_default = PostLeave;
4693
5120
 
4694
- // src/Prebuilt/components/Preview/PreviewContainer.jsx
5121
+ // src/Prebuilt/components/Preview/PreviewContainer.tsx
4695
5122
  import React56 from "react";
4696
- import { useNavigate as useNavigate3, useParams as useParams2 } from "react-router-dom";
5123
+ import { useNavigate as useNavigate4, useParams as useParams4 } from "react-router-dom";
4697
5124
  import { useSearchParam } from "react-use";
4698
5125
 
4699
- // src/Prebuilt/components/Preview/PreviewJoin.jsx
4700
- import React55, { Fragment as Fragment6, Suspense, useCallback as useCallback15, useEffect as useEffect24, useState as useState20 } from "react";
5126
+ // src/Prebuilt/components/Preview/PreviewJoin.tsx
5127
+ import React55, { Fragment as Fragment6, Suspense, useCallback as useCallback17, useEffect as useEffect24, useState as useState19 } from "react";
5128
+ import { useMedia as useMedia10 } from "react-use";
4701
5129
  import {
4702
5130
  HMSRoomState as HMSRoomState7,
4703
5131
  selectIsLocalVideoEnabled as selectIsLocalVideoEnabled5,
@@ -4705,7 +5133,7 @@ import {
4705
5133
  selectRoomState as selectRoomState7,
4706
5134
  selectVideoTrackByID as selectVideoTrackByID5,
4707
5135
  useAVToggle as useAVToggle2,
4708
- useHMSStore as useHMSStore27,
5136
+ useHMSStore as useHMSStore26,
4709
5137
  useParticipants,
4710
5138
  usePreviewJoin,
4711
5139
  useRecordingStreaming as useRecordingStreaming4
@@ -4722,7 +5150,7 @@ import {
4722
5150
  selectVideoTrackByID as selectVideoTrackByID2,
4723
5151
  useAVToggle,
4724
5152
  useDevices as useDevices2,
4725
- useHMSActions as useHMSActions15,
5153
+ useHMSActions as useHMSActions14,
4726
5154
  useHMSStore as useHMSStore18
4727
5155
  } from "@100mslive/react-sdk";
4728
5156
  import { CameraFlipIcon as CameraFlipIcon2, MicOffIcon, MicOnIcon as MicOnIcon3, VideoOffIcon, VideoOnIcon } from "@100mslive/react-icons";
@@ -4738,6 +5166,10 @@ var IconSection = styled(IconButton_default, {
4738
5166
  borderTopRightRadius: 0,
4739
5167
  borderColor: "$border_default",
4740
5168
  borderBottomRightRadius: 0,
5169
+ position: "relative",
5170
+ "&:not([disabled]):focus-visible": {
5171
+ zIndex: 1
5172
+ },
4741
5173
  "@md": {
4742
5174
  mx: 0,
4743
5175
  borderTopRightRadius: "$1",
@@ -4753,8 +5185,9 @@ var OptionsSection = styled(IconButton_default, {
4753
5185
  borderColor: "$border_default",
4754
5186
  borderBottomLeftRadius: 0,
4755
5187
  borderLeftWidth: 0,
5188
+ position: "relative",
4756
5189
  "&:not([disabled]):focus-visible": {
4757
- boxShadow: "none"
5190
+ zIndex: 1
4758
5191
  },
4759
5192
  "@md": {
4760
5193
  display: "none"
@@ -4857,16 +5290,17 @@ var AudioVideoToggle = ({ hideOptions = false }) => {
4857
5290
  title: audioInput2.label
4858
5291
  }));
4859
5292
  const { isLocalVideoEnabled, isLocalAudioEnabled, toggleAudio, toggleVideo } = useAVToggle();
4860
- const actions = useHMSActions15();
5293
+ const actions = useHMSActions14();
4861
5294
  const videoTrackId = useHMSStore18(selectLocalVideoTrackID2);
4862
5295
  const localVideoTrack = useHMSStore18(selectVideoTrackByID2(videoTrackId));
4863
5296
  const roomState = useHMSStore18(selectRoomState6);
4864
- const isAudioPermitted = toggleAudio && (audioInput == null ? void 0 : audioInput.length) > 0;
4865
- const isVideoPermitted = toggleVideo && (videoInput == null ? void 0 : videoInput.length) > 0;
4866
- return /* @__PURE__ */ React39.createElement(Fragment2, null, toggleAudio ? hideOptions ? /* @__PURE__ */ React39.createElement(Tooltip, { title: `Turn ${isLocalAudioEnabled ? "off" : "on"} audio (${isMacOS ? "\u2318" : "ctrl"} + d)` }, /* @__PURE__ */ React39.createElement(
5297
+ const hasAudioDevices = (audioInput == null ? void 0 : audioInput.length) > 0;
5298
+ const hasVideoDevices = (videoInput == null ? void 0 : videoInput.length) > 0;
5299
+ return /* @__PURE__ */ React39.createElement(Fragment2, null, toggleAudio ? hideOptions || !hasAudioDevices ? /* @__PURE__ */ React39.createElement(Tooltip, { title: `Turn ${isLocalAudioEnabled ? "off" : "on"} audio (${isMacOS ? "\u2318" : "ctrl"} + d)` }, /* @__PURE__ */ React39.createElement(
4867
5300
  IconButton_default,
4868
5301
  {
4869
5302
  active: isLocalAudioEnabled,
5303
+ disabled: !toggleAudio,
4870
5304
  onClick: toggleAudio,
4871
5305
  key: "toggleAudio",
4872
5306
  "data-testid": "audio_btn",
@@ -4877,7 +5311,7 @@ var AudioVideoToggle = ({ hideOptions = false }) => {
4877
5311
  IconButtonWithOptions,
4878
5312
  {
4879
5313
  options: formattedAudioInputList,
4880
- disabled: !isAudioPermitted,
5314
+ disabled: !toggleAudio,
4881
5315
  onDisabledClick: toggleAudio,
4882
5316
  tooltipMessage: `Turn ${isLocalAudioEnabled ? "off" : "on"} audio (${isMacOS ? "\u2318" : "ctrl"} + d)`,
4883
5317
  icon: !isLocalAudioEnabled ? /* @__PURE__ */ React39.createElement(MicOffIcon, { "data-testid": "audio_off_btn" }) : /* @__PURE__ */ React39.createElement(MicOnIcon3, { "data-testid": "audio_on_btn" }),
@@ -4885,11 +5319,12 @@ var AudioVideoToggle = ({ hideOptions = false }) => {
4885
5319
  onClick: toggleAudio,
4886
5320
  key: "toggleAudio"
4887
5321
  }
4888
- ) : null, toggleVideo ? hideOptions ? /* @__PURE__ */ React39.createElement(Tooltip, { title: `Turn ${isLocalVideoEnabled ? "off" : "on"} video (${isMacOS ? "\u2318" : "ctrl"} + e)` }, /* @__PURE__ */ React39.createElement(
5322
+ ) : null, toggleVideo ? hideOptions || !hasVideoDevices ? /* @__PURE__ */ React39.createElement(Tooltip, { title: `Turn ${isLocalVideoEnabled ? "off" : "on"} video (${isMacOS ? "\u2318" : "ctrl"} + e)` }, /* @__PURE__ */ React39.createElement(
4889
5323
  IconButton_default,
4890
5324
  {
4891
5325
  key: "toggleVideo",
4892
5326
  active: isLocalVideoEnabled,
5327
+ disabled: !toggleVideo,
4893
5328
  onClick: toggleVideo,
4894
5329
  "data-testid": "video_btn",
4895
5330
  className: "__cancel-drag-event"
@@ -4898,7 +5333,7 @@ var AudioVideoToggle = ({ hideOptions = false }) => {
4898
5333
  )) : /* @__PURE__ */ React39.createElement(
4899
5334
  IconButtonWithOptions,
4900
5335
  {
4901
- disabled: !isVideoPermitted,
5336
+ disabled: !toggleVideo,
4902
5337
  onDisabledClick: toggleVideo,
4903
5338
  options: formattedVideoInputList,
4904
5339
  tooltipMessage: `Turn ${isLocalVideoEnabled ? "off" : "on"} video (${isMacOS ? "\u2318" : "ctrl"} + e)`,
@@ -4941,11 +5376,11 @@ var Chip = ({
4941
5376
  };
4942
5377
  var Chip_default = Chip;
4943
5378
 
4944
- // src/Prebuilt/components/Connection/TileConnection.jsx
5379
+ // src/Prebuilt/components/Connection/TileConnection.tsx
4945
5380
  import React42 from "react";
4946
5381
  import { PinIcon, SpotlightIcon } from "@100mslive/react-icons";
4947
5382
 
4948
- // src/Prebuilt/components/Connection/ConnectionIndicator.jsx
5383
+ // src/Prebuilt/components/Connection/ConnectionIndicator.tsx
4949
5384
  import React41 from "react";
4950
5385
  import { selectConnectionQualityByPeerID as selectConnectionQualityByPeerID2, useHMSStore as useHMSStore19 } from "@100mslive/react-sdk";
4951
5386
  import { PoorConnectivityIcon as PoorConnectivityIcon2 } from "@100mslive/react-icons";
@@ -4978,14 +5413,13 @@ var getColor = (position, connectionScore, defaultColor, theme2) => {
4978
5413
  return defaultColor;
4979
5414
  };
4980
5415
 
4981
- // src/Prebuilt/components/Connection/ConnectionIndicator.jsx
5416
+ // src/Prebuilt/components/Connection/ConnectionIndicator.tsx
4982
5417
  var Wrapper = styled("span", {
4983
5418
  width: "28px",
4984
5419
  height: "28px",
4985
5420
  display: "flex",
4986
5421
  alignItems: "center",
4987
5422
  justifyContent: "center",
4988
- backgroundColor: "$background_dim",
4989
5423
  borderRadius: "$round",
4990
5424
  variants: {
4991
5425
  isTile: {
@@ -4996,7 +5430,11 @@ var Wrapper = styled("span", {
4996
5430
  }
4997
5431
  }
4998
5432
  });
4999
- var ConnectionIndicator = ({ peerId, isTile = false }) => {
5433
+ var ConnectionIndicator = ({
5434
+ peerId,
5435
+ isTile = false,
5436
+ hideBg = false
5437
+ }) => {
5000
5438
  var _a7;
5001
5439
  const downlinkQuality = (_a7 = useHMSStore19(selectConnectionQualityByPeerID2(peerId))) == null ? void 0 : _a7.downlinkQuality;
5002
5440
  const { theme: theme2 } = useTheme();
@@ -5008,7 +5446,7 @@ var ConnectionIndicator = ({ peerId, isTile = false }) => {
5008
5446
  return /* @__PURE__ */ React41.createElement(Tooltip, { title: getTooltipText(downlinkQuality) }, /* @__PURE__ */ React41.createElement(Wrapper, { isTile, css: { color: "#ED4C5A" }, "data-testid": "tile_network" }, /* @__PURE__ */ React41.createElement(PoorConnectivityIcon2, null)));
5009
5447
  }
5010
5448
  const size = isTile ? 12 : 16;
5011
- return /* @__PURE__ */ React41.createElement(Tooltip, { title: getTooltipText(downlinkQuality) }, /* @__PURE__ */ React41.createElement(Wrapper, { isTile, "data-testid": "tile_network" }, /* @__PURE__ */ React41.createElement(
5449
+ return /* @__PURE__ */ React41.createElement(Tooltip, { title: getTooltipText(downlinkQuality) }, /* @__PURE__ */ React41.createElement(Wrapper, { isTile, "data-testid": "tile_network", css: { backgroundColor: hideBg ? "" : "$surface_bright" } }, /* @__PURE__ */ React41.createElement(
5012
5450
  "svg",
5013
5451
  {
5014
5452
  width: size,
@@ -5056,19 +5494,26 @@ var ConnectionIndicator = ({ peerId, isTile = false }) => {
5056
5494
  )));
5057
5495
  };
5058
5496
 
5059
- // src/Prebuilt/components/Connection/TileConnection.jsx
5060
- var TileConnection = ({ name, peerId, hideLabel, width, spotlighted, pinned }) => {
5061
- return /* @__PURE__ */ React42.createElement(Wrapper2, null, !hideLabel ? /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.createElement(Flex, { align: "center" }, pinned && /* @__PURE__ */ React42.createElement(IconWrapper, null, /* @__PURE__ */ React42.createElement(PinIcon, { width: "15", height: "15", css: { display: "block" } })), spotlighted && /* @__PURE__ */ React42.createElement(IconWrapper, null, /* @__PURE__ */ React42.createElement(SpotlightIcon, { width: "15", height: "15", css: { display: "block" } })), /* @__PURE__ */ React42.createElement(
5497
+ // src/Prebuilt/components/Connection/TileConnection.tsx
5498
+ var TileConnection = ({
5499
+ name,
5500
+ peerId,
5501
+ hideLabel,
5502
+ width,
5503
+ spotlighted,
5504
+ pinned
5505
+ }) => {
5506
+ return /* @__PURE__ */ React42.createElement(Wrapper2, null, !hideLabel ? /* @__PURE__ */ React42.createElement(React42.Fragment, null, /* @__PURE__ */ React42.createElement(Flex, { align: "center" }, pinned && /* @__PURE__ */ React42.createElement(IconWrapper, null, /* @__PURE__ */ React42.createElement(PinIcon, { width: "15", height: "15" })), spotlighted && /* @__PURE__ */ React42.createElement(IconWrapper, null, /* @__PURE__ */ React42.createElement(SpotlightIcon, { width: "15", height: "15" })), /* @__PURE__ */ React42.createElement(
5062
5507
  Text,
5063
5508
  {
5064
5509
  css: __spreadValues({
5065
5510
  c: "$on_surface_high",
5066
5511
  verticalAlign: "baseline"
5067
- }, textEllipsis(width - 60)),
5512
+ }, width ? textEllipsis(width - 60) : {}),
5068
5513
  variant: "xs"
5069
5514
  },
5070
5515
  name
5071
- )), /* @__PURE__ */ React42.createElement(ConnectionIndicator, { isTile: true, peerId })) : null);
5516
+ )), /* @__PURE__ */ React42.createElement(ConnectionIndicator, { isTile: true, peerId, hideBg: true })) : null);
5072
5517
  };
5073
5518
  var IconWrapper = styled("div", { c: "$on_surface_high", ml: "$3", mt: "$1" });
5074
5519
  var Wrapper2 = styled("div", {
@@ -5088,7 +5533,7 @@ var Wrapper2 = styled("div", {
5088
5533
  var TileConnection_default = TileConnection;
5089
5534
 
5090
5535
  // src/Prebuilt/components/Settings/SettingsModal.jsx
5091
- import React48, { useCallback as useCallback13, useEffect as useEffect21, useState as useState16 } from "react";
5536
+ import React48, { useCallback as useCallback15, useEffect as useEffect21, useState as useState15 } from "react";
5092
5537
  import { useMedia as useMedia5 } from "react-use";
5093
5538
  import { ChevronLeftIcon, CrossIcon as CrossIcon6 } from "@100mslive/react-icons";
5094
5539
 
@@ -5096,7 +5541,7 @@ import { ChevronLeftIcon, CrossIcon as CrossIcon6 } from "@100mslive/react-icons
5096
5541
  import { GridFourIcon, NotificationsIcon, SettingsIcon } from "@100mslive/react-icons";
5097
5542
 
5098
5543
  // src/Prebuilt/components/Settings/DeviceSettings.jsx
5099
- import React44, { Fragment as Fragment3, useEffect as useEffect20, useRef as useRef6, useState as useState15 } from "react";
5544
+ import React44, { Fragment as Fragment3, useEffect as useEffect20, useRef as useRef6, useState as useState14 } from "react";
5100
5545
  import {
5101
5546
  DeviceType as DeviceType3,
5102
5547
  selectIsLocalVideoEnabled as selectIsLocalVideoEnabled3,
@@ -5226,7 +5671,7 @@ var Settings = ({ setHide }) => {
5226
5671
  };
5227
5672
  var DeviceSelector = ({ title, devices, selection, onChange, icon, children = null }) => {
5228
5673
  var _a7, _b7;
5229
- const [open, setOpen] = useState15(false);
5674
+ const [open, setOpen] = useState14(false);
5230
5675
  const selectionBg = useDropdownSelection();
5231
5676
  const ref = useRef6(null);
5232
5677
  return /* @__PURE__ */ React44.createElement(Box, { css: { mb: "$10" } }, /* @__PURE__ */ React44.createElement(Text, { css: { mb: "$4" } }, title), /* @__PURE__ */ React44.createElement(
@@ -5284,7 +5729,7 @@ var DeviceSelector = ({ title, devices, selection, onChange, icon, children = nu
5284
5729
  var TEST_AUDIO_URL = "https://100ms.live/test-audio.wav";
5285
5730
  var TestAudio = ({ id }) => {
5286
5731
  const audioRef = useRef6(null);
5287
- const [playing, setPlaying] = useState15(false);
5732
+ const [playing, setPlaying] = useState14(false);
5288
5733
  useEffect20(() => {
5289
5734
  if (audioRef.current && id) {
5290
5735
  try {
@@ -5322,8 +5767,8 @@ var TestAudio = ({ id }) => {
5322
5767
  var DeviceSettings_default = Settings;
5323
5768
 
5324
5769
  // src/Prebuilt/components/Settings/LayoutSettings.jsx
5325
- import React46, { useCallback as useCallback12 } from "react";
5326
- import { selectIsLocalScreenShared, selectIsLocalVideoEnabled as selectIsLocalVideoEnabled4, useHMSActions as useHMSActions16, useHMSStore as useHMSStore21 } from "@100mslive/react-sdk";
5770
+ import React46, { useCallback as useCallback14 } from "react";
5771
+ import { selectIsLocalScreenShared, selectIsLocalVideoEnabled as selectIsLocalVideoEnabled4, useHMSActions as useHMSActions15, useHMSStore as useHMSStore21 } from "@100mslive/react-sdk";
5327
5772
 
5328
5773
  // src/Prebuilt/components/Settings/SwitchWithLabel.jsx
5329
5774
  import React45 from "react";
@@ -5365,11 +5810,11 @@ var SwitchWithLabel_default = SwitchWithLabel;
5365
5810
 
5366
5811
  // src/Prebuilt/components/Settings/LayoutSettings.jsx
5367
5812
  var LayoutSettings = () => {
5368
- const hmsActions = useHMSActions16();
5813
+ const hmsActions = useHMSActions15();
5369
5814
  const isLocalVideoEnabled = useHMSStore21(selectIsLocalVideoEnabled4);
5370
5815
  const isLocalScreenShared = useHMSStore21(selectIsLocalScreenShared);
5371
5816
  const [{ isAudioOnly, maxTileCount, mirrorLocalVideo }, setUISettings] = useSetUiSettings();
5372
- const toggleIsAudioOnly = useCallback12(
5817
+ const toggleIsAudioOnly = useCallback14(
5373
5818
  (isAudioOnlyModeOn) => __async(void 0, null, function* () {
5374
5819
  if (isAudioOnlyModeOn) {
5375
5820
  isLocalVideoEnabled && (yield hmsActions.setLocalVideoEnabled(false));
@@ -5500,10 +5945,10 @@ var settingsList = [
5500
5945
  var SettingsModal = ({ open, onOpenChange, screenType, children = /* @__PURE__ */ React48.createElement(React48.Fragment, null) }) => {
5501
5946
  const mediaQueryLg = config.media.md;
5502
5947
  const isMobile = useMedia5(mediaQueryLg);
5503
- const [showSetting, setShowSetting] = useState16(
5948
+ const [showSetting, setShowSetting] = useState15(
5504
5949
  () => settingsList.reduce((obj, { tabName }) => __spreadProps(__spreadValues({}, obj), { [tabName]: true }), {})
5505
5950
  );
5506
- const hideSettingByTabName = useCallback13(
5951
+ const hideSettingByTabName = useCallback15(
5507
5952
  (key) => (hide) => setShowSetting((prev) => __spreadProps(__spreadValues({}, prev), { [key]: !hide })),
5508
5953
  [setShowSetting]
5509
5954
  );
@@ -5512,11 +5957,11 @@ var SettingsModal = ({ open, onOpenChange, screenType, children = /* @__PURE__ *
5512
5957
  hideSettingByTabName("layout")(true);
5513
5958
  }
5514
5959
  }, [screenType, hideSettingByTabName]);
5515
- const [selection, setSelection] = useState16(() => {
5960
+ const [selection, setSelection] = useState15(() => {
5516
5961
  var _a7;
5517
5962
  return (_a7 = Object.keys(showSetting).find((key) => showSetting[key])) != null ? _a7 : "";
5518
5963
  });
5519
- const resetSelection = useCallback13(() => {
5964
+ const resetSelection = useCallback15(() => {
5520
5965
  setSelection("");
5521
5966
  }, []);
5522
5967
  useEffect21(() => {
@@ -5700,26 +6145,25 @@ var SettingsContentHeader = ({ children, isMobile, onBack }) => {
5700
6145
  var SettingsModal_default = SettingsModal;
5701
6146
 
5702
6147
  // src/Prebuilt/components/VideoTile.jsx
5703
- import React53, { Fragment as Fragment5, useCallback as useCallback14, useEffect as useEffect23, useMemo as useMemo3, useRef as useRef7, useState as useState19 } from "react";
5704
- import { useMedia as useMedia8 } from "react-use";
6148
+ import React53, { Fragment as Fragment5, useCallback as useCallback16, useEffect as useEffect23, useMemo as useMemo3, useRef as useRef7, useState as useState18 } from "react";
5705
6149
  import {
5706
6150
  selectAudioTrackByPeerID as selectAudioTrackByPeerID2,
5707
6151
  selectIsPeerAudioEnabled,
5708
6152
  selectLocalPeerID as selectLocalPeerID5,
5709
- selectPeerMetadata as selectPeerMetadata2,
6153
+ selectPeerMetadata as selectPeerMetadata3,
5710
6154
  selectPeerNameByID,
5711
6155
  selectSessionStore as selectSessionStore3,
5712
6156
  selectTrackAudioByID,
5713
6157
  selectVideoTrackByID as selectVideoTrackByID4,
5714
6158
  selectVideoTrackByPeerID as selectVideoTrackByPeerID3,
5715
6159
  useHMSStore as useHMSStore25,
5716
- useHMSVanillaStore as useHMSVanillaStore4
6160
+ useHMSVanillaStore as useHMSVanillaStore6
5717
6161
  } from "@100mslive/react-sdk";
5718
6162
  import { BrbTileIcon, HandIcon as HandIcon3, MicOffIcon as MicOffIcon3 } from "@100mslive/react-icons";
5719
6163
 
5720
6164
  // src/Prebuilt/components/TileMenu/TileMenu.jsx
5721
- import React52, { useState as useState18 } from "react";
5722
- import { useMedia as useMedia7 } from "react-use";
6165
+ import React52, { useState as useState17 } from "react";
6166
+ import { useMedia as useMedia8 } from "react-use";
5723
6167
  import {
5724
6168
  selectLocalPeerID as selectLocalPeerID4,
5725
6169
  selectPeerByID as selectPeerByID2,
@@ -5732,9 +6176,9 @@ import {
5732
6176
  import { CrossIcon as CrossIcon8, VerticalMenuIcon as VerticalMenuIcon2 } from "@100mslive/react-icons";
5733
6177
 
5734
6178
  // src/Prebuilt/components/MoreSettings/ChangeNameModal.jsx
5735
- import React50, { useState as useState17 } from "react";
6179
+ import React50, { useState as useState16 } from "react";
5736
6180
  import { useMedia as useMedia6 } from "react-use";
5737
- import { selectLocalPeerName, useHMSActions as useHMSActions17, useHMSStore as useHMSStore22 } from "@100mslive/react-sdk";
6181
+ import { selectLocalPeerName, useHMSActions as useHMSActions16, useHMSStore as useHMSStore22 } from "@100mslive/react-sdk";
5738
6182
 
5739
6183
  // src/Prebuilt/components/MoreSettings/ChangeNameContent.jsx
5740
6184
  import React49 from "react";
@@ -5764,6 +6208,7 @@ var ChangeNameContent = ({
5764
6208
  color: "$on_surface_high",
5765
6209
  fontWeight: "$semiBold",
5766
6210
  display: "flex",
6211
+ pb: "$4",
5767
6212
  "@md": { px: "$8", borderBottom: "1px solid $border_default" }
5768
6213
  }
5769
6214
  },
@@ -5794,6 +6239,9 @@ var ChangeNameContent = ({
5794
6239
  onKeyDown: (e) => __async(void 0, null, function* () {
5795
6240
  if (e.key === "Enter" && currentName.trim().length > 0 && currentName !== localPeerName) {
5796
6241
  e.preventDefault();
6242
+ if (isMobile) {
6243
+ return;
6244
+ }
5797
6245
  changeName();
5798
6246
  }
5799
6247
  })
@@ -5841,9 +6289,9 @@ var ChangeNameContent = ({
5841
6289
  // src/Prebuilt/components/MoreSettings/ChangeNameModal.jsx
5842
6290
  var ChangeNameModal = ({ onOpenChange, openParentSheet = null }) => {
5843
6291
  const [previewPreference, setPreviewPreference] = useUserPreferences(UserPreferencesKeys.PREVIEW);
5844
- const hmsActions = useHMSActions17();
6292
+ const hmsActions = useHMSActions16();
5845
6293
  const localPeerName = useHMSStore22(selectLocalPeerName);
5846
- const [currentName, setCurrentName] = useState17(localPeerName);
6294
+ const [currentName, setCurrentName] = useState16(localPeerName);
5847
6295
  const isMobile = useMedia6(config.media.md);
5848
6296
  const changeName = () => __async(void 0, null, function* () {
5849
6297
  const name = currentName.trim();
@@ -5882,12 +6330,13 @@ var ChangeNameModal = ({ onOpenChange, openParentSheet = null }) => {
5882
6330
 
5883
6331
  // src/Prebuilt/components/TileMenu/TileMenuContent.jsx
5884
6332
  import React51, { Fragment as Fragment4 } from "react";
6333
+ import { useMedia as useMedia7 } from "react-use";
5885
6334
  import {
5886
6335
  selectPermissions as selectPermissions2,
5887
6336
  selectSessionStore as selectSessionStore2,
5888
6337
  selectTrackByID as selectTrackByID2,
5889
- useCustomEvent,
5890
- useHMSActions as useHMSActions18,
6338
+ useCustomEvent as useCustomEvent2,
6339
+ useHMSActions as useHMSActions17,
5891
6340
  useHMSStore as useHMSStore23,
5892
6341
  useRemoteAVToggle
5893
6342
  } from "@100mslive/react-sdk";
@@ -5912,7 +6361,7 @@ var SpotlightActions = ({
5912
6361
  return;
5913
6362
  }
5914
6363
  }) => {
5915
- const hmsActions = useHMSActions18();
6364
+ const hmsActions = useHMSActions17();
5916
6365
  const spotlightPeerId = useHMSStore23(selectSessionStore2(SESSION_STORE_KEY.SPOTLIGHT));
5917
6366
  const isTileSpotlighted = spotlightPeerId === peerId;
5918
6367
  const setSpotlightPeerId = (peer) => hmsActions.sessionStore.set(SESSION_STORE_KEY.SPOTLIGHT, peer).catch((err) => ToastManager.addToast({ title: err.description }));
@@ -5929,7 +6378,7 @@ var SpotlightActions = ({
5929
6378
  onSpotLightClick();
5930
6379
  }
5931
6380
  },
5932
- /* @__PURE__ */ React51.createElement(StarIcon, null),
6381
+ /* @__PURE__ */ React51.createElement(StarIcon, { height: 20, width: 20 }),
5933
6382
  /* @__PURE__ */ React51.createElement("span", null, isTileSpotlighted ? "Remove from Spotlight" : "Spotlight Tile for everyone")
5934
6383
  );
5935
6384
  };
@@ -5946,18 +6395,18 @@ var PinActions = ({ audioTrackID, videoTrackID }) => {
5946
6395
  css: spacingCSS,
5947
6396
  onClick: () => isTilePinned ? setPinnedTrackId() : setPinnedTrackId(videoTrackID || audioTrackID)
5948
6397
  },
5949
- /* @__PURE__ */ React51.createElement(PinIcon2, null),
6398
+ /* @__PURE__ */ React51.createElement(PinIcon2, { height: 20, width: 20 }),
5950
6399
  /* @__PURE__ */ React51.createElement("span", null, isTilePinned ? "Unpin" : "Pin", " Tile for myself")
5951
6400
  ));
5952
6401
  };
5953
6402
  var MinimiseInset = () => {
5954
6403
  const [minimised, setMinimised] = useSetAppDataByKey(APP_DATA.minimiseInset);
5955
- return /* @__PURE__ */ React51.createElement(React51.Fragment, null, /* @__PURE__ */ React51.createElement(StyledMenuTile.ItemButton, { css: spacingCSS, onClick: () => setMinimised(!minimised) }, /* @__PURE__ */ React51.createElement(ShrinkIcon, null), /* @__PURE__ */ React51.createElement("span", null, minimised ? "Show" : "Minimise", " your video")));
6404
+ return /* @__PURE__ */ React51.createElement(React51.Fragment, null, /* @__PURE__ */ React51.createElement(StyledMenuTile.ItemButton, { css: spacingCSS, onClick: () => setMinimised(!minimised) }, /* @__PURE__ */ React51.createElement(ShrinkIcon, { height: 20, width: 20 }), /* @__PURE__ */ React51.createElement("span", null, minimised ? "Show" : "Minimise", " your video")));
5956
6405
  };
5957
6406
  var SimulcastLayers = ({ trackId }) => {
5958
6407
  var _a7;
5959
6408
  const track = useHMSStore23(selectTrackByID2(trackId));
5960
- const actions = useHMSActions18();
6409
+ const actions = useHMSActions17();
5961
6410
  const bg = useDropdownSelection();
5962
6411
  if (!((_a7 = track == null ? void 0 : track.layerDefinitions) == null ? void 0 : _a7.length) || track.degraded || !track.enabled) {
5963
6412
  return null;
@@ -6022,7 +6471,7 @@ var SimulcastLayers = ({ trackId }) => {
6022
6471
  ))));
6023
6472
  };
6024
6473
  var TileMenuContent = (props) => {
6025
- const actions = useHMSActions18();
6474
+ const actions = useHMSActions17();
6026
6475
  const { removeOthers } = useHMSStore23(selectPermissions2);
6027
6476
  const {
6028
6477
  videoTrackID,
@@ -6044,9 +6493,10 @@ var TileMenuContent = (props) => {
6044
6493
  audioTrackID,
6045
6494
  videoTrackID
6046
6495
  );
6047
- const { sendEvent } = useCustomEvent({
6496
+ const { sendEvent } = useCustomEvent2({
6048
6497
  type: REMOTE_STOP_SCREENSHARE_TYPE
6049
6498
  });
6499
+ const isMobile = useMedia7(config.media.md);
6050
6500
  return isLocal ? (showPinAction || canMinimise) && /* @__PURE__ */ React51.createElement(React51.Fragment, null, showPinAction && /* @__PURE__ */ React51.createElement(PinActions, { audioTrackID, videoTrackID }), showSpotlight && /* @__PURE__ */ React51.createElement(SpotlightActions, { peerId: peerID, onSpotLightClick: () => closeSheetOnClick() }), canMinimise && /* @__PURE__ */ React51.createElement(MinimiseInset, null), /* @__PURE__ */ React51.createElement(
6051
6501
  StyledMenuTile.ItemButton,
6052
6502
  {
@@ -6055,7 +6505,7 @@ var TileMenuContent = (props) => {
6055
6505
  closeSheetOnClick();
6056
6506
  }
6057
6507
  },
6058
- /* @__PURE__ */ React51.createElement(PencilIcon, null),
6508
+ /* @__PURE__ */ React51.createElement(PencilIcon, { height: 20, width: 20 }),
6059
6509
  /* @__PURE__ */ React51.createElement(Text, { variant: "sm", css: { "@md": { fontWeight: "$semiBold" }, c: "$on_surface_high" } }, "Change Name")
6060
6510
  )) : /* @__PURE__ */ React51.createElement(React51.Fragment, null, toggleVideo ? /* @__PURE__ */ React51.createElement(
6061
6511
  StyledMenuTile.ItemButton,
@@ -6067,7 +6517,7 @@ var TileMenuContent = (props) => {
6067
6517
  },
6068
6518
  "data-testid": isVideoEnabled ? "mute_video_participant_btn" : "unmute_video_participant_btn"
6069
6519
  },
6070
- isVideoEnabled ? /* @__PURE__ */ React51.createElement(VideoOnIcon3, null) : /* @__PURE__ */ React51.createElement(VideoOffIcon2, null),
6520
+ isVideoEnabled ? /* @__PURE__ */ React51.createElement(VideoOnIcon3, { height: 20, width: 20 }) : /* @__PURE__ */ React51.createElement(VideoOffIcon2, { height: 20, width: 20 }),
6071
6521
  /* @__PURE__ */ React51.createElement("span", null, isVideoEnabled ? "Mute" : "Request Unmute")
6072
6522
  ) : null, toggleAudio ? /* @__PURE__ */ React51.createElement(
6073
6523
  StyledMenuTile.ItemButton,
@@ -6079,9 +6529,9 @@ var TileMenuContent = (props) => {
6079
6529
  },
6080
6530
  "data-testid": isVideoEnabled ? "mute_audio_participant_btn" : "unmute_audio_participant_btn"
6081
6531
  },
6082
- isAudioEnabled ? /* @__PURE__ */ React51.createElement(MicOnIcon5, null) : /* @__PURE__ */ React51.createElement(MicOffIcon2, null),
6532
+ isAudioEnabled ? /* @__PURE__ */ React51.createElement(MicOnIcon5, { height: 20, width: 20 }) : /* @__PURE__ */ React51.createElement(MicOffIcon2, { height: 20, width: 20 }),
6083
6533
  /* @__PURE__ */ React51.createElement("span", null, isAudioEnabled ? "Mute" : "Request Unmute")
6084
- ) : null, audioTrackID ? /* @__PURE__ */ React51.createElement(StyledMenuTile.VolumeItem, { "data-testid": "participant_volume_slider", css: __spreadProps(__spreadValues({}, spacingCSS), { mb: "$0" }) }, /* @__PURE__ */ React51.createElement(Flex, { align: "center", gap: 1 }, /* @__PURE__ */ React51.createElement(SpeakerIcon3, null), /* @__PURE__ */ React51.createElement(Box, { as: "span", css: { ml: "$4" } }, "Volume (", volume, ")")), /* @__PURE__ */ React51.createElement(Slider, { css: { my: "0.5rem" }, step: 5, value: [volume], onValueChange: (e) => setVolume(e[0]) })) : null, showPinAction && /* @__PURE__ */ React51.createElement(React51.Fragment, null, /* @__PURE__ */ React51.createElement(PinActions, { audioTrackID, videoTrackID }), showSpotlight && /* @__PURE__ */ React51.createElement(SpotlightActions, { peerId: peerID, onSpotLightClick: () => closeSheetOnClick() })), /* @__PURE__ */ React51.createElement(SimulcastLayers, { trackId: videoTrackID }), removeOthers ? /* @__PURE__ */ React51.createElement(
6534
+ ) : null, audioTrackID ? /* @__PURE__ */ React51.createElement(StyledMenuTile.VolumeItem, { "data-testid": "participant_volume_slider", css: __spreadProps(__spreadValues({}, spacingCSS), { mb: "$0" }) }, /* @__PURE__ */ React51.createElement(Flex, { align: "center", gap: 1 }, /* @__PURE__ */ React51.createElement(SpeakerIcon3, { height: 20, width: 20 }), /* @__PURE__ */ React51.createElement(Box, { as: "span", css: { ml: "$4" } }, "Volume (", volume, ")")), /* @__PURE__ */ React51.createElement(Slider, { css: { my: "0.5rem" }, step: 5, value: [volume], onValueChange: (e) => setVolume(e[0]) })) : null, showPinAction && /* @__PURE__ */ React51.createElement(React51.Fragment, null, /* @__PURE__ */ React51.createElement(PinActions, { audioTrackID, videoTrackID }), showSpotlight && /* @__PURE__ */ React51.createElement(SpotlightActions, { peerId: peerID, onSpotLightClick: () => closeSheetOnClick() })), isMobile ? null : /* @__PURE__ */ React51.createElement(SimulcastLayers, { trackId: videoTrackID }), removeOthers ? /* @__PURE__ */ React51.createElement(
6085
6535
  StyledMenuTile.RemoveItem,
6086
6536
  {
6087
6537
  css: __spreadProps(__spreadValues({}, spacingCSS), { borderTop: "none" }),
@@ -6094,7 +6544,7 @@ var TileMenuContent = (props) => {
6094
6544
  }),
6095
6545
  "data-testid": "remove_participant_btn"
6096
6546
  },
6097
- /* @__PURE__ */ React51.createElement(RemoveUserIcon, null),
6547
+ /* @__PURE__ */ React51.createElement(RemoveUserIcon, { height: 20, width: 20 }),
6098
6548
  /* @__PURE__ */ React51.createElement("span", null, "Remove Participant")
6099
6549
  ) : null, removeOthers && isScreenshare ? /* @__PURE__ */ React51.createElement(
6100
6550
  StyledMenuTile.RemoveItem,
@@ -6105,7 +6555,7 @@ var TileMenuContent = (props) => {
6105
6555
  },
6106
6556
  css: spacingCSS
6107
6557
  },
6108
- /* @__PURE__ */ React51.createElement(ShareScreenIcon2, null),
6558
+ /* @__PURE__ */ React51.createElement(ShareScreenIcon2, { height: 20, width: 20 }),
6109
6559
  /* @__PURE__ */ React51.createElement("span", null, "Stop Screenshare")
6110
6560
  ) : null);
6111
6561
  };
@@ -6140,7 +6590,7 @@ var TileMenu = ({
6140
6590
  enableSpotlightingPeer = true
6141
6591
  }) => {
6142
6592
  var _a7, _b7;
6143
- const [open, setOpen] = useState18(false);
6593
+ const [open, setOpen] = useState17(false);
6144
6594
  const { theme: theme2 } = useTheme();
6145
6595
  const localPeerID = useHMSStore24(selectLocalPeerID4);
6146
6596
  const isLocal = localPeerID === peerID;
@@ -6151,9 +6601,9 @@ var TileMenu = ({
6151
6601
  const showPinAction = audioTrackID || videoTrackID && isPrimaryVideoTrack;
6152
6602
  const track = useHMSStore24(selectTrackByID3(videoTrackID));
6153
6603
  const hideSimulcastLayers = !((_b7 = track == null ? void 0 : track.layerDefinitions) == null ? void 0 : _b7.length) || track.degraded || !track.enabled;
6154
- const isMobile = useMedia7(config.media.md);
6604
+ const isMobile = useMedia8(config.media.md);
6155
6605
  const peer = useHMSStore24(selectPeerByID2(peerID));
6156
- const [showNameChangeModal, setShowNameChangeModal] = useState18(false);
6606
+ const [showNameChangeModal, setShowNameChangeModal] = useState17(false);
6157
6607
  useDropdownList({ open, name: "TileMenu" });
6158
6608
  if (!(removeOthers || toggleAudio || toggleVideo || setVolume || showPinAction) && hideSimulcastLayers) {
6159
6609
  return null;
@@ -6175,7 +6625,7 @@ var TileMenu = ({
6175
6625
  StyledMenuTile.Trigger,
6176
6626
  {
6177
6627
  "data-testid": "participant_menu_btn",
6178
- css: { bg: `${theme2.colors.background_dim.value}A3` },
6628
+ css: { bg: `${theme2.colors.background_dim.value}A3`, p: "$2", w: "unset", h: "unset" },
6179
6629
  onClick: (e) => e.stopPropagation(),
6180
6630
  className: isMobile ? "__cancel-drag-event" : ""
6181
6631
  },
@@ -6239,7 +6689,8 @@ var Tile = ({
6239
6689
  enableSpotlightingPeer = true,
6240
6690
  hideParticipantNameOnTile = false,
6241
6691
  roundedVideoTile = true,
6242
- hideAudioMuteOnTile = false
6692
+ hideAudioMuteOnTile = false,
6693
+ hideMetadataOnTile = false
6243
6694
  }) => {
6244
6695
  const trackSelector = trackId ? selectVideoTrackByID4(trackId) : selectVideoTrackByPeerID3(peerId);
6245
6696
  const track = useHMSStore25(trackSelector);
@@ -6251,7 +6702,7 @@ var Tile = ({
6251
6702
  const showStatsOnTiles = useUISettings(UI_SETTINGS.showStatsOnTiles);
6252
6703
  const isAudioMuted = !useHMSStore25(selectIsPeerAudioEnabled(peerId));
6253
6704
  const isVideoMuted = !(track == null ? void 0 : track.enabled);
6254
- const [isMouseHovered, setIsMouseHovered] = useState19(false);
6705
+ const [isMouseHovered, setIsMouseHovered] = useState18(false);
6255
6706
  const isVideoDegraded = track == null ? void 0 : track.degraded;
6256
6707
  const isLocal = localPeerID === peerId;
6257
6708
  const [pinnedTrackId] = useSetAppDataByKey(APP_DATA.pinnedTrackId);
@@ -6266,7 +6717,7 @@ var Tile = ({
6266
6717
  track,
6267
6718
  isLocal
6268
6719
  });
6269
- const onHoverHandler = useCallback14((event) => {
6720
+ const onHoverHandler = useCallback16((event) => {
6270
6721
  setIsMouseHovered(event.type === "mouseenter");
6271
6722
  }, []);
6272
6723
  const isTileBigEnoughToShowStats = height >= 180 && width >= 180;
@@ -6281,7 +6732,6 @@ var Tile = ({
6281
6732
  }
6282
6733
  return "large";
6283
6734
  }, [width, height]);
6284
- const isMobile = useMedia8(config.media.md);
6285
6735
  return /* @__PURE__ */ React53.createElement(
6286
6736
  StyledVideoTile.Root,
6287
6737
  {
@@ -6300,7 +6750,7 @@ var Tile = ({
6300
6750
  css: containerCSS
6301
6751
  },
6302
6752
  showStatsOnTiles && isTileBigEnoughToShowStats ? /* @__PURE__ */ React53.createElement(VideoTileStats, { audioTrackID: audioTrack == null ? void 0 : audioTrack.id, videoTrackID: track == null ? void 0 : track.id, peerID: peerId, isLocal }) : null,
6303
- track ? /* @__PURE__ */ React53.createElement(
6753
+ /* @__PURE__ */ React53.createElement(
6304
6754
  Video,
6305
6755
  {
6306
6756
  trackId: track == null ? void 0 : track.id,
@@ -6314,19 +6764,16 @@ var Tile = ({
6314
6764
  bg: "transparent"
6315
6765
  }
6316
6766
  }
6317
- ) : null,
6767
+ ),
6318
6768
  isVideoMuted || !isLocal && isAudioOnly ? /* @__PURE__ */ React53.createElement(StyledVideoTile.AvatarContainer, null, /* @__PURE__ */ React53.createElement(Avatar, { name: peerName || "", "data-testid": "participant_avatar_icon", size: avatarSize })) : null,
6319
- showAudioMuted({
6320
- hideAudioMute: hideAudioMuteOnTile,
6321
- isAudioMuted
6322
- }) ? /* @__PURE__ */ React53.createElement(
6769
+ !hideAudioMuteOnTile ? isAudioMuted ? /* @__PURE__ */ React53.createElement(
6323
6770
  StyledVideoTile.AudioIndicator,
6324
6771
  {
6325
6772
  "data-testid": "participant_audio_mute_icon",
6326
6773
  size: width && height && (width < 180 || height < 180) ? "small" : "medium"
6327
6774
  },
6328
6775
  /* @__PURE__ */ React53.createElement(MicOffIcon3, null)
6329
- ) : /* @__PURE__ */ React53.createElement(AudioLevel, { trackId: audioTrack == null ? void 0 : audioTrack.id }),
6776
+ ) : /* @__PURE__ */ React53.createElement(AudioLevel, { trackId: audioTrack == null ? void 0 : audioTrack.id }) : null,
6330
6777
  isMouseHovered || isDragabble ? /* @__PURE__ */ React53.createElement(
6331
6778
  TileMenu_default,
6332
6779
  {
@@ -6337,8 +6784,8 @@ var Tile = ({
6337
6784
  enableSpotlightingPeer
6338
6785
  }
6339
6786
  ) : null,
6340
- /* @__PURE__ */ React53.createElement(PeerMetadata, { peerId }),
6341
- isMobile ? null : /* @__PURE__ */ React53.createElement(
6787
+ !hideMetadataOnTile && /* @__PURE__ */ React53.createElement(PeerMetadata, { peerId }),
6788
+ /* @__PURE__ */ React53.createElement(
6342
6789
  TileConnection_default,
6343
6790
  {
6344
6791
  hideLabel: hideParticipantNameOnTile,
@@ -6353,7 +6800,7 @@ var Tile = ({
6353
6800
  ) : null
6354
6801
  );
6355
6802
  };
6356
- var metaStyles = { top: "$4", left: "$4" };
6803
+ var metaStyles = { top: "$4", left: "$4", width: "$14", height: "$14" };
6357
6804
  var heightAnimation = (value) => keyframes({
6358
6805
  "50%": {
6359
6806
  transform: `scale3d(1,${value},1)`
@@ -6363,7 +6810,7 @@ var heightAnimation = (value) => keyframes({
6363
6810
  }
6364
6811
  });
6365
6812
  var AudioLevelIndicator = ({ trackId, value, delay }) => {
6366
- const vanillaStore = useHMSVanillaStore4();
6813
+ const vanillaStore = useHMSVanillaStore6();
6367
6814
  const ref = useRef7();
6368
6815
  useEffect23(() => {
6369
6816
  const unsubscribe = vanillaStore.subscribe((audioLevel) => {
@@ -6392,22 +6839,19 @@ var AudioLevel = ({ trackId }) => {
6392
6839
  return /* @__PURE__ */ React53.createElement(StyledVideoTile.AudioIndicator, null, /* @__PURE__ */ React53.createElement(Flex, { align: "center", justify: "center", css: { gap: "$2" } }, [3, 2, 3].map((v, i) => /* @__PURE__ */ React53.createElement(AudioLevelIndicator, { trackId, value: v, delay: i * 0.15, key: i }))));
6393
6840
  };
6394
6841
  var PeerMetadata = ({ peerId }) => {
6395
- const metaData = useHMSStore25(selectPeerMetadata2(peerId));
6842
+ const metaData = useHMSStore25(selectPeerMetadata3(peerId));
6396
6843
  const isHandRaised = (metaData == null ? void 0 : metaData.isHandRaised) || false;
6397
6844
  const isBRB = (metaData == null ? void 0 : metaData.isBRBOn) || false;
6398
- return /* @__PURE__ */ React53.createElement(Fragment5, null, isHandRaised ? /* @__PURE__ */ React53.createElement(StyledVideoTile.AttributeBox, { css: metaStyles, "data-testid": "raiseHand_icon_onTile" }, /* @__PURE__ */ React53.createElement(HandIcon3, { width: 24, height: 24 })) : null, isBRB ? /* @__PURE__ */ React53.createElement(StyledVideoTile.AttributeBox, { css: metaStyles, "data-testid": "brb_icon_onTile" }, /* @__PURE__ */ React53.createElement(BrbTileIcon, { width: 24, height: 24 })) : null);
6845
+ return /* @__PURE__ */ React53.createElement(Fragment5, null, isHandRaised ? /* @__PURE__ */ React53.createElement(StyledVideoTile.AttributeBox, { css: metaStyles, "data-testid": "raiseHand_icon_onTile" }, /* @__PURE__ */ React53.createElement(HandIcon3, { width: 24, height: 24 })) : null, isBRB ? /* @__PURE__ */ React53.createElement(StyledVideoTile.AttributeBox, { css: metaStyles, "data-testid": "brb_icon_onTile" }, /* @__PURE__ */ React53.createElement(BrbTileIcon, { width: 22, height: 22 })) : null);
6399
6846
  };
6400
6847
  var VideoTile = React53.memo(Tile);
6401
- var showAudioMuted = ({ hideAudioMute, isAudioMuted }) => {
6402
- return isAudioMuted && !hideAudioMute;
6403
- };
6404
6848
  var VideoTile_default = VideoTile;
6405
6849
 
6406
6850
  // src/Prebuilt/components/Preview/PreviewForm.tsx
6407
6851
  import React54 from "react";
6408
6852
  import { useMedia as useMedia9 } from "react-use";
6409
6853
  import { JoinForm_JoinBtnType as JoinForm_JoinBtnType2 } from "@100mslive/types-prebuilt/elements/join_form";
6410
- import { selectPermissions as selectPermissions4, useHMSStore as useHMSStore26, useRecordingStreaming as useRecordingStreaming3 } from "@100mslive/react-sdk";
6854
+ import { useRecordingStreaming as useRecordingStreaming3 } from "@100mslive/react-sdk";
6411
6855
  import { RadioIcon } from "@100mslive/react-icons";
6412
6856
  var PreviewForm = ({
6413
6857
  name,
@@ -6421,13 +6865,11 @@ var PreviewForm = ({
6421
6865
  const formSubmit = (e) => {
6422
6866
  e.preventDefault();
6423
6867
  };
6424
- const mediaQueryLg = config.media.md;
6425
- const isMobile = useMedia9(mediaQueryLg);
6868
+ const isMobile = useMedia9(config.media.md);
6426
6869
  const { isHLSRunning } = useRecordingStreaming3();
6427
- const permissions = useHMSStore26(selectPermissions4);
6428
6870
  const layout = useRoomLayout();
6429
6871
  const { join_form: joinForm = {} } = ((_c = (_b7 = (_a7 = layout == null ? void 0 : layout.screens) == null ? void 0 : _a7.preview) == null ? void 0 : _b7.default) == null ? void 0 : _c.elements) || {};
6430
- const showGoLive = (joinForm == null ? void 0 : joinForm.join_btn_type) === JoinForm_JoinBtnType2.JOIN_BTN_TYPE_JOIN_AND_GO_LIVE && !isHLSRunning && (permissions == null ? void 0 : permissions.hlsStreaming);
6872
+ const showGoLive = (joinForm == null ? void 0 : joinForm.join_btn_type) === JoinForm_JoinBtnType2.JOIN_BTN_TYPE_JOIN_AND_GO_LIVE && !isHLSRunning;
6431
6873
  return /* @__PURE__ */ React54.createElement(
6432
6874
  Form,
6433
6875
  {
@@ -6448,6 +6890,9 @@ var PreviewForm = ({
6448
6890
  onKeyDown: (e) => {
6449
6891
  if (e.key === "Enter" && name.trim().length > 0) {
6450
6892
  e.preventDefault();
6893
+ if (isMobile) {
6894
+ return;
6895
+ }
6451
6896
  onJoin();
6452
6897
  }
6453
6898
  }
@@ -6469,8 +6914,8 @@ var Form = styled("form", {
6469
6914
  });
6470
6915
  var PreviewForm_default = PreviewForm;
6471
6916
 
6472
- // src/Prebuilt/components/Preview/PreviewJoin.jsx
6473
- var VirtualBackground = React55.lazy(() => import("./VirtualBackground-AYDHYLIZ.js"));
6917
+ // src/Prebuilt/components/Preview/PreviewJoin.tsx
6918
+ var VirtualBackground = React55.lazy(() => import("./VirtualBackground-37FXUPYO.js"));
6474
6919
  var getParticipantChipContent = (peerCount = 0) => {
6475
6920
  if (peerCount === 0) {
6476
6921
  return "You are the first to join";
@@ -6478,7 +6923,12 @@ var getParticipantChipContent = (peerCount = 0) => {
6478
6923
  const formattedNum = getFormattedCount(peerCount);
6479
6924
  return `${formattedNum} other${parseInt(formattedNum) === 1 ? "" : "s"} in the session`;
6480
6925
  };
6481
- var PreviewJoin = ({ onJoin, skipPreview, initialName, asRole }) => {
6926
+ var PreviewJoin = ({
6927
+ onJoin,
6928
+ skipPreview,
6929
+ initialName,
6930
+ asRole
6931
+ }) => {
6482
6932
  var _a7, _b7, _c;
6483
6933
  const [previewPreference, setPreviewPreference] = useUserPreferences(
6484
6934
  UserPreferencesKeys.PREVIEW,
@@ -6486,9 +6936,9 @@ var PreviewJoin = ({ onJoin, skipPreview, initialName, asRole }) => {
6486
6936
  );
6487
6937
  const { isStreamingOn } = useRecordingStreaming4();
6488
6938
  const authToken = useAuthToken();
6489
- const [name, setName] = useState20(initialName || previewPreference.name);
6490
- const { isLocalAudioEnabled, isLocalVideoEnabled, toggleAudio, toggleVideo } = useAVToggle2();
6491
- const [previewError, setPreviewError] = useState20(false);
6939
+ const [name, setName] = useState19(initialName || previewPreference.name);
6940
+ const { toggleAudio, toggleVideo } = useAVToggle2();
6941
+ const [previewError, setPreviewError] = useState19(false);
6492
6942
  const { endpoints } = useHMSPrebuiltContext();
6493
6943
  const { peerCount } = useParticipants();
6494
6944
  const { enableJoin, preview, join } = usePreviewJoin({
@@ -6508,16 +6958,14 @@ var PreviewJoin = ({ onJoin, skipPreview, initialName, asRole }) => {
6508
6958
  },
6509
6959
  asRole
6510
6960
  });
6511
- const roomState = useHMSStore27(selectRoomState7);
6512
- const savePreferenceAndJoin = useCallback15(() => {
6961
+ const roomState = useHMSStore26(selectRoomState7);
6962
+ const savePreferenceAndJoin = useCallback17(() => {
6513
6963
  setPreviewPreference({
6514
- name,
6515
- isAudioMuted: !isLocalAudioEnabled,
6516
- isVideoMuted: !isLocalVideoEnabled
6964
+ name
6517
6965
  });
6518
6966
  join();
6519
6967
  onJoin && onJoin();
6520
- }, [join, isLocalAudioEnabled, isLocalVideoEnabled, name, setPreviewPreference, onJoin]);
6968
+ }, [join, name, setPreviewPreference, onJoin]);
6521
6969
  const roomLayout = useRoomLayout();
6522
6970
  const { preview_header: previewHeader = {} } = ((_c = (_b7 = (_a7 = roomLayout == null ? void 0 : roomLayout.screens) == null ? void 0 : _a7.preview) == null ? void 0 : _b7.default) == null ? void 0 : _c.elements) || {};
6523
6971
  useEffect24(() => {
@@ -6569,14 +7017,7 @@ var PreviewJoin = ({ onJoin, skipPreview, initialName, asRole }) => {
6569
7017
  }
6570
7018
  },
6571
7019
  /* @__PURE__ */ React55.createElement(PreviewTile, { name, error: previewError })
6572
- ) : null, /* @__PURE__ */ React55.createElement(Box, { css: { w: "100%", maxWidth: "640px" } }, /* @__PURE__ */ React55.createElement(
6573
- PreviewControls,
6574
- {
6575
- enableJoin,
6576
- savePreferenceAndJoin,
6577
- hideSettings: !toggleVideo && !toggleAudio
6578
- }
6579
- ), /* @__PURE__ */ React55.createElement(
7020
+ ) : null, /* @__PURE__ */ React55.createElement(Box, { css: { w: "100%", maxWidth: "640px" } }, /* @__PURE__ */ React55.createElement(PreviewControls, { hideSettings: !toggleVideo && !toggleAudio }), /* @__PURE__ */ React55.createElement(
6580
7021
  PreviewForm_default,
6581
7022
  {
6582
7023
  name,
@@ -6595,23 +7036,26 @@ var Container3 = styled("div", __spreadProps(__spreadValues({
6595
7036
  px: "$10"
6596
7037
  }));
6597
7038
  var PreviewTile = ({ name, error }) => {
6598
- const localPeer = useHMSStore27(selectLocalPeer);
7039
+ const localPeer = useHMSStore26(selectLocalPeer);
6599
7040
  const { isLocalAudioEnabled, toggleAudio } = useAVToggle2();
6600
- const isVideoOn = useHMSStore27(selectIsLocalVideoEnabled5);
7041
+ const isVideoOn = useHMSStore26(selectIsLocalVideoEnabled5);
6601
7042
  const mirrorLocalVideo = useUISettings(UI_SETTINGS.mirrorLocalVideo);
6602
7043
  const trackSelector = selectVideoTrackByID5(localPeer == null ? void 0 : localPeer.videoTrack);
6603
- const track = useHMSStore27(trackSelector);
7044
+ const track = useHMSStore26(trackSelector);
6604
7045
  const showMuteIcon = !isLocalAudioEnabled || !toggleAudio;
7046
+ const videoTrack = useHMSStore26(selectVideoTrackByID5(localPeer == null ? void 0 : localPeer.videoTrack));
7047
+ const isMobile = useMedia10(config.media.md);
7048
+ const aspectRatio = (videoTrack == null ? void 0 : videoTrack.width) && (videoTrack == null ? void 0 : videoTrack.height) ? videoTrack.width / videoTrack.height : isMobile ? 9 / 16 : 16 / 9;
6605
7049
  return /* @__PURE__ */ React55.createElement(
6606
7050
  StyledVideoTile.Container,
6607
7051
  {
6608
7052
  css: {
6609
7053
  bg: "$surface_default",
6610
- aspectRatio: 16 / 9,
6611
- width: "min(640px, 80vw)",
7054
+ aspectRatio,
7055
+ height: "min(640px, 40vh)",
7056
+ maxWidth: "640px",
6612
7057
  overflow: "clip",
6613
7058
  "@md": {
6614
- aspectRatio: 9 / 16,
6615
7059
  width: "min(220px, 70vw)",
6616
7060
  maxWidth: "100%",
6617
7061
  my: "$4"
@@ -6626,11 +7070,11 @@ var PreviewTile = ({ name, error }) => {
6626
7070
  "data-testid": "preview_tile"
6627
7071
  }
6628
7072
  ), !isVideoOn ? /* @__PURE__ */ React55.createElement(StyledVideoTile.AvatarContainer, null, /* @__PURE__ */ React55.createElement(Avatar, { name, "data-testid": "preview_avatar_tile" })) : null) : !error ? /* @__PURE__ */ React55.createElement(FullPageProgress_default, null) : null,
6629
- showMuteIcon ? /* @__PURE__ */ React55.createElement(StyledVideoTile.AudioIndicator, { size: "medium" }, /* @__PURE__ */ React55.createElement(MicOffIcon4, null)) : /* @__PURE__ */ React55.createElement(AudioLevel, { trackId: localPeer.audioTrack })
7073
+ showMuteIcon ? /* @__PURE__ */ React55.createElement(StyledVideoTile.AudioIndicator, { size: "medium" }, /* @__PURE__ */ React55.createElement(MicOffIcon4, null)) : /* @__PURE__ */ React55.createElement(AudioLevel, { trackId: localPeer == null ? void 0 : localPeer.audioTrack })
6630
7074
  );
6631
7075
  };
6632
7076
  var PreviewControls = ({ hideSettings }) => {
6633
- const isVideoOn = useHMSStore27(selectIsLocalVideoEnabled5);
7077
+ const isMobile = useMedia10(config.media.md);
6634
7078
  return /* @__PURE__ */ React55.createElement(
6635
7079
  Flex,
6636
7080
  {
@@ -6640,26 +7084,26 @@ var PreviewControls = ({ hideSettings }) => {
6640
7084
  mt: "$8"
6641
7085
  }
6642
7086
  },
6643
- /* @__PURE__ */ React55.createElement(Flex, { css: { gap: "$4" } }, /* @__PURE__ */ React55.createElement(AudioVideoToggle, { compact: true }), /* @__PURE__ */ React55.createElement(Suspense, { fallback: "" }, isVideoOn ? /* @__PURE__ */ React55.createElement(VirtualBackground, null) : null)),
7087
+ /* @__PURE__ */ React55.createElement(Flex, { css: { gap: "$4" } }, /* @__PURE__ */ React55.createElement(AudioVideoToggle, null), /* @__PURE__ */ React55.createElement(Suspense, { fallback: "" }, !isMobile ? /* @__PURE__ */ React55.createElement(VirtualBackground, null) : null)),
6644
7088
  !hideSettings ? /* @__PURE__ */ React55.createElement(PreviewSettings, null) : null
6645
7089
  );
6646
7090
  };
6647
7091
  var PreviewSettings = React55.memo(() => {
6648
- const [open, setOpen] = useState20(false);
7092
+ const [open, setOpen] = useState19(false);
6649
7093
  return /* @__PURE__ */ React55.createElement(Fragment6, null, /* @__PURE__ */ React55.createElement(IconButton_default, { "data-testid": "preview_setting_btn", css: { flexShrink: 0 }, onClick: () => setOpen((value) => !value) }, /* @__PURE__ */ React55.createElement(SettingsIcon2, null)), open && /* @__PURE__ */ React55.createElement(SettingsModal_default, { open, onOpenChange: setOpen }));
6650
7094
  });
6651
7095
  var PreviewJoin_default = PreviewJoin;
6652
7096
 
6653
- // src/Prebuilt/components/Preview/PreviewContainer.jsx
7097
+ // src/Prebuilt/components/Preview/PreviewContainer.tsx
6654
7098
  var PreviewContainer = () => {
6655
7099
  var _a7, _b7, _c;
6656
- const navigate = useNavigate3();
7100
+ const navigate = useNavigate4();
6657
7101
  const { isPreviewScreenEnabled } = useRoomLayoutPreviewScreen();
6658
7102
  const skipPreview = !isPreviewScreenEnabled;
6659
7103
  const previewAsRole = useSearchParam(QUERY_PARAM_PREVIEW_AS_ROLE);
6660
7104
  const { userName } = useHMSPrebuiltContext();
6661
7105
  const initialName = userName || (skipPreview ? "Beam" : "");
6662
- const { roomId: urlRoomId, role: userRole } = useParams2();
7106
+ const { roomId: urlRoomId, role: userRole } = useParams4();
6663
7107
  const authToken = useAuthToken();
6664
7108
  const roomLayout = useRoomLayout();
6665
7109
  const { preview_header: previewHeader = {} } = ((_c = (_b7 = (_a7 = roomLayout == null ? void 0 : roomLayout.screens) == null ? void 0 : _a7.preview) == null ? void 0 : _b7.default) == null ? void 0 : _c.elements) || {};
@@ -6677,14 +7121,22 @@ var PreviewContainer = () => {
6677
7121
  justify: "center",
6678
7122
  align: "center"
6679
7123
  },
6680
- authToken && Object.keys(previewHeader).length > 0 ? /* @__PURE__ */ React56.createElement(PreviewJoin_default, { initialName, skipPreview, asRole: previewAsRole, onJoin }) : /* @__PURE__ */ React56.createElement(FullPageProgress_default, null)
7124
+ authToken && Object.keys(previewHeader).length > 0 ? /* @__PURE__ */ React56.createElement(
7125
+ PreviewJoin_default,
7126
+ {
7127
+ initialName,
7128
+ skipPreview,
7129
+ asRole: previewAsRole != null ? previewAsRole : void 0,
7130
+ onJoin
7131
+ }
7132
+ ) : /* @__PURE__ */ React56.createElement(FullPageProgress_default, null)
6681
7133
  ));
6682
7134
  };
6683
7135
  var PreviewContainer_default = PreviewContainer;
6684
7136
 
6685
7137
  // src/Prebuilt/components/Toast/ToastContainer.jsx
6686
- import React58, { useEffect as useEffect25, useState as useState21 } from "react";
6687
- import { selectIsConnectedToRoom as selectIsConnectedToRoom4, useHMSStore as useHMSStore28 } from "@100mslive/react-sdk";
7138
+ import React58, { useEffect as useEffect25, useState as useState20 } from "react";
7139
+ import { selectIsConnectedToRoom as selectIsConnectedToRoom4, useHMSStore as useHMSStore27 } from "@100mslive/react-sdk";
6688
7140
 
6689
7141
  // src/Prebuilt/components/Toast/Toast.jsx
6690
7142
  import React57 from "react";
@@ -6706,8 +7158,8 @@ var Toast2 = (_a7) => {
6706
7158
 
6707
7159
  // src/Prebuilt/components/Toast/ToastContainer.jsx
6708
7160
  var ToastContainer = () => {
6709
- const isConnected = useHMSStore28(selectIsConnectedToRoom4);
6710
- const [toasts, setToast] = useState21([]);
7161
+ const isConnected = useHMSStore27(selectIsConnectedToRoom4);
7162
+ const [toasts, setToast] = useState20([]);
6711
7163
  useEffect25(() => {
6712
7164
  ToastManager.addListener(setToast);
6713
7165
  return () => {
@@ -6727,9 +7179,15 @@ var ToastContainer = () => {
6727
7179
  };
6728
7180
 
6729
7181
  // src/Prebuilt/plugins/FlyingEmoji.jsx
6730
- import React59, { useCallback as useCallback16, useEffect as useEffect26, useMemo as useMemo4, useState as useState22 } from "react";
6731
- import { useMedia as useMedia10 } from "react-use";
6732
- import { selectLocalPeerID as selectLocalPeerID6, selectPeerNameByID as selectPeerNameByID2, useHMSStore as useHMSStore29, useHMSVanillaStore as useHMSVanillaStore5 } from "@100mslive/react-sdk";
7182
+ import React59, { useCallback as useCallback18, useEffect as useEffect26, useMemo as useMemo4, useState as useState21 } from "react";
7183
+ import { useMedia as useMedia11 } from "react-use";
7184
+ import {
7185
+ selectLocalPeerID as selectLocalPeerID6,
7186
+ selectPeerNameByID as selectPeerNameByID2,
7187
+ useCustomEvent as useCustomEvent3,
7188
+ useHMSStore as useHMSStore28,
7189
+ useHMSVanillaStore as useHMSVanillaStore7
7190
+ } from "@100mslive/react-sdk";
6733
7191
  var emojiCount = 1;
6734
7192
  var flyAndFade = keyframes({
6735
7193
  "20%": { opacity: 1 },
@@ -6754,13 +7212,13 @@ var getStartingPoints = (isMobile) => {
6754
7212
  return arr;
6755
7213
  };
6756
7214
  function FlyingEmoji() {
6757
- const localPeerId = useHMSStore29(selectLocalPeerID6);
6758
- const vanillaStore = useHMSVanillaStore5();
6759
- const [emojis, setEmojis] = useState22([]);
6760
- const isMobile = useMedia10(config.media.md);
7215
+ const localPeerId = useHMSStore28(selectLocalPeerID6);
7216
+ const vanillaStore = useHMSVanillaStore7();
7217
+ const [emojis, setEmojis] = useState21([]);
7218
+ const isMobile = useMedia11(config.media.md);
6761
7219
  const startingPoints = useMemo4(() => getStartingPoints(isMobile), [isMobile]);
6762
- const showFlyingEmoji = useCallback16(
6763
- (emojiId, senderId) => {
7220
+ const showFlyingEmoji = useCallback18(
7221
+ ({ emojiId, senderId }) => {
6764
7222
  if (!emojiId || !senderId || document.hidden) {
6765
7223
  return;
6766
7224
  }
@@ -6783,6 +7241,10 @@ function FlyingEmoji() {
6783
7241
  },
6784
7242
  [localPeerId, vanillaStore, startingPoints]
6785
7243
  );
7244
+ useCustomEvent3({
7245
+ type: EMOJI_REACTION_TYPE,
7246
+ onEvent: showFlyingEmoji
7247
+ });
6786
7248
  useEffect26(() => {
6787
7249
  window.showFlyingEmoji = showFlyingEmoji;
6788
7250
  }, [showFlyingEmoji]);
@@ -6847,30 +7309,117 @@ function FlyingEmoji() {
6847
7309
  }
6848
7310
 
6849
7311
  // src/Prebuilt/plugins/RemoteStopScreenshare.jsx
6850
- import React60, { useCallback as useCallback17 } from "react";
6851
- import { useCustomEvent as useCustomEvent2, useHMSActions as useHMSActions19 } from "@100mslive/react-sdk";
7312
+ import React60, { useCallback as useCallback19 } from "react";
7313
+ import { useCustomEvent as useCustomEvent4, useHMSActions as useHMSActions18 } from "@100mslive/react-sdk";
6852
7314
  function RemoteStopScreenshare() {
6853
- const actions = useHMSActions19();
6854
- const onRemoteStopScreenshare = useCallback17(() => __async(this, null, function* () {
7315
+ const actions = useHMSActions18();
7316
+ const onRemoteStopScreenshare = useCallback19(() => __async(this, null, function* () {
6855
7317
  yield actions.setScreenShareEnabled(false);
6856
7318
  }), [actions]);
6857
- useCustomEvent2({
7319
+ useCustomEvent4({
6858
7320
  type: REMOTE_STOP_SCREENSHARE_TYPE,
6859
7321
  onEvent: onRemoteStopScreenshare
6860
7322
  });
6861
7323
  return /* @__PURE__ */ React60.createElement(React60.Fragment, null);
6862
7324
  }
6863
7325
 
6864
- // src/Prebuilt/App.tsx
6865
- var Conference = React61.lazy(() => import("./conference-V2XZGTKU.js"));
6866
- var getAspectRatio = ({ width, height }) => {
6867
- const host = define_process_env_default.REACT_APP_HOST_NAME || "";
6868
- const portraitDomains = (define_process_env_default.REACT_APP_PORTRAIT_MODE_DOMAINS || "").split(",");
6869
- if (portraitDomains.includes(host) && width > height) {
6870
- return { width: height, height: width };
7326
+ // src/Prebuilt/components/hooks/useAutoStartStreaming.tsx
7327
+ import { useCallback as useCallback20, useEffect as useEffect28, useRef as useRef9 } from "react";
7328
+ import {
7329
+ selectIsConnectedToRoom as selectIsConnectedToRoom6,
7330
+ selectPermissions as selectPermissions4,
7331
+ useHMSActions as useHMSActions19,
7332
+ useHMSStore as useHMSStore30,
7333
+ useRecordingStreaming as useRecordingStreaming5
7334
+ } from "@100mslive/react-sdk";
7335
+
7336
+ // src/Prebuilt/common/hooks.js
7337
+ import { useEffect as useEffect27, useRef as useRef8, useState as useState22 } from "react";
7338
+ import { JoinForm_JoinBtnType as JoinForm_JoinBtnType3 } from "@100mslive/types-prebuilt/elements/join_form";
7339
+ import {
7340
+ selectAvailableRoleNames as selectAvailableRoleNames2,
7341
+ selectIsConnectedToRoom as selectIsConnectedToRoom5,
7342
+ selectPeerCount,
7343
+ selectPeerMetadata as selectPeerMetadata4,
7344
+ selectPeers,
7345
+ selectRemotePeers,
7346
+ useHMSStore as useHMSStore29,
7347
+ useHMSVanillaStore as useHMSVanillaStore8
7348
+ } from "@100mslive/react-sdk";
7349
+ var useFilteredRoles = () => {
7350
+ const roles = useHMSStore29(selectAvailableRoleNames2).filter((role) => !isInternalRole(role));
7351
+ return roles;
7352
+ };
7353
+ var useShowStreamingUI = () => {
7354
+ var _a7, _b7, _c;
7355
+ const layout = useRoomLayout();
7356
+ const { join_form } = ((_c = (_b7 = (_a7 = layout == null ? void 0 : layout.screens) == null ? void 0 : _a7.preview) == null ? void 0 : _b7.default) == null ? void 0 : _c.elements) || {};
7357
+ return (join_form == null ? void 0 : join_form.join_btn_type) === JoinForm_JoinBtnType3.JOIN_BTN_TYPE_JOIN_AND_GO_LIVE;
7358
+ };
7359
+ var useParticipants2 = (params) => {
7360
+ var _a7;
7361
+ const isConnected = useHMSStore29(selectIsConnectedToRoom5);
7362
+ const peerCount = useHMSStore29(selectPeerCount);
7363
+ const availableRoles = useHMSStore29(selectAvailableRoleNames2);
7364
+ let participantList = useHMSStore29(isConnected ? selectPeers : selectRemotePeers);
7365
+ const rolesWithParticipants = Array.from(new Set(participantList.map((peer) => peer.roleName)));
7366
+ const vanillaStore = useHMSVanillaStore8();
7367
+ if ((_a7 = params == null ? void 0 : params.metadata) == null ? void 0 : _a7.isHandRaised) {
7368
+ participantList = participantList.filter((peer) => {
7369
+ return vanillaStore.getState(selectPeerMetadata4(peer.id)).isHandRaised;
7370
+ });
6871
7371
  }
6872
- return { width, height };
7372
+ if ((params == null ? void 0 : params.role) && availableRoles.includes(params.role)) {
7373
+ participantList = participantList.filter((peer) => peer.roleName === params.role);
7374
+ }
7375
+ if (params == null ? void 0 : params.search) {
7376
+ const search = params.search;
7377
+ participantList = participantList.filter((peer) => peer.name.toLowerCase().includes(search));
7378
+ }
7379
+ return { participants: participantList, isConnected, peerCount, rolesWithParticipants };
7380
+ };
7381
+
7382
+ // src/Prebuilt/components/hooks/useAutoStartStreaming.tsx
7383
+ var useAutoStartStreaming = () => {
7384
+ const [isHLSStarted, setHLSStarted] = useSetAppDataByKey(APP_DATA.hlsStarted);
7385
+ const permissions = useHMSStore30(selectPermissions4);
7386
+ const showStreamingUI = useShowStreamingUI();
7387
+ const hmsActions = useHMSActions19();
7388
+ const isConnected = useHMSStore30(selectIsConnectedToRoom6);
7389
+ const { isHLSRunning } = useRecordingStreaming5();
7390
+ const streamStartedRef = useRef9(false);
7391
+ const startHLS = useCallback20(() => __async(void 0, null, function* () {
7392
+ var _a7;
7393
+ try {
7394
+ if (isHLSStarted || !showStreamingUI || isHLSRunning) {
7395
+ return;
7396
+ }
7397
+ setHLSStarted(true);
7398
+ streamStartedRef.current = true;
7399
+ yield hmsActions.startHLSStreaming();
7400
+ } catch (error) {
7401
+ if ((_a7 = error.message) == null ? void 0 : _a7.includes("beam already started")) {
7402
+ return;
7403
+ }
7404
+ streamStartedRef.current = false;
7405
+ setHLSStarted(false);
7406
+ }
7407
+ }), [hmsActions, isHLSRunning, isHLSStarted, setHLSStarted, showStreamingUI]);
7408
+ useEffect28(() => {
7409
+ if (!isHLSStarted && !isHLSRunning) {
7410
+ streamStartedRef.current = false;
7411
+ }
7412
+ }, [isHLSStarted, isHLSRunning]);
7413
+ useEffect28(() => {
7414
+ if (!isConnected || streamStartedRef.current || !(permissions == null ? void 0 : permissions.hlsStreaming)) {
7415
+ return;
7416
+ }
7417
+ startHLS();
7418
+ }, [isConnected]);
6873
7419
  };
7420
+
7421
+ // src/Prebuilt/App.tsx
7422
+ var Conference = React61.lazy(() => import("./conference-FJJQ4TXX.js"));
6874
7423
  var HMSPrebuilt = React61.forwardRef(
6875
7424
  ({
6876
7425
  roomCode = "",
@@ -6885,12 +7434,10 @@ var HMSPrebuilt = React61.forwardRef(
6885
7434
  onLeave
6886
7435
  }, ref) => {
6887
7436
  var _a7, _b7, _c, _d;
6888
- const aspectRatio = "1-1";
6889
7437
  const metadata = "";
6890
- const { 0: width, 1: height } = aspectRatio.split("-").map((el) => parseInt(el));
6891
- const reactiveStore = useRef8();
7438
+ const reactiveStore = useRef10();
6892
7439
  const [hydrated, setHydrated] = React61.useState(false);
6893
- useEffect27(() => {
7440
+ useEffect29(() => {
6894
7441
  setHydrated(true);
6895
7442
  const hms = new HMSReactiveStore();
6896
7443
  const hmsStore = hms.getStore();
@@ -6905,13 +7452,13 @@ var HMSPrebuilt = React61.forwardRef(
6905
7452
  hmsNotifications
6906
7453
  };
6907
7454
  }, []);
6908
- useEffect27(() => {
7455
+ useEffect29(() => {
6909
7456
  if (!ref || !reactiveStore.current) {
6910
7457
  return;
6911
7458
  }
6912
7459
  ref.current = __spreadValues({}, reactiveStore.current);
6913
7460
  }, [ref]);
6914
- useEffect27(
7461
+ useEffect29(
6915
7462
  () => () => {
6916
7463
  var _a8;
6917
7464
  (_a8 = reactiveStore == null ? void 0 : reactiveStore.current) == null ? void 0 : _a8.hmsActions.leave();
@@ -6981,7 +7528,6 @@ var HMSPrebuilt = React61.forwardRef(
6981
7528
  HMSThemeProvider,
6982
7529
  {
6983
7530
  themeType: `${theme2.name}-${Date.now()}`,
6984
- aspectRatio: getAspectRatio({ width, height }),
6985
7531
  theme: {
6986
7532
  //@ts-ignore: Prebuilt theme to match stiches theme
6987
7533
  colors: theme2.palette,
@@ -7013,42 +7559,43 @@ var HMSPrebuilt = React61.forwardRef(
7013
7559
  );
7014
7560
  HMSPrebuilt.displayName = "HMSPrebuilt";
7015
7561
  var Redirector = ({ showPreview }) => {
7016
- const { roomId, role } = useParams3();
7562
+ const { roomId, role } = useParams5();
7017
7563
  return /* @__PURE__ */ React61.createElement(Navigate, { to: `/${showPreview ? "preview" : "meeting"}/${roomId}/${role || ""}` });
7018
7564
  };
7019
7565
  var RouteList = () => {
7020
7566
  const { isPreviewScreenEnabled } = useRoomLayoutPreviewScreen();
7021
7567
  const { isLeaveScreenEnabled } = useRoomLayoutLeaveScreen();
7568
+ useAutoStartStreaming();
7022
7569
  return /* @__PURE__ */ React61.createElement(Routes, null, isPreviewScreenEnabled ? /* @__PURE__ */ React61.createElement(Route, { path: "preview" }, /* @__PURE__ */ React61.createElement(
7023
7570
  Route,
7024
7571
  {
7025
7572
  path: ":roomId/:role",
7026
- element: /* @__PURE__ */ React61.createElement(Suspense2, { fallback: /* @__PURE__ */ React61.createElement(FullPageProgress_default, { loadingText: "Loading preview..." }) }, /* @__PURE__ */ React61.createElement(PreviewContainer_default, null))
7573
+ element: /* @__PURE__ */ React61.createElement(Suspense2, { fallback: /* @__PURE__ */ React61.createElement(FullPageProgress_default, { text: "Loading preview..." }) }, /* @__PURE__ */ React61.createElement(PreviewContainer_default, null))
7027
7574
  }
7028
7575
  ), /* @__PURE__ */ React61.createElement(
7029
7576
  Route,
7030
7577
  {
7031
7578
  path: ":roomId",
7032
- element: /* @__PURE__ */ React61.createElement(Suspense2, { fallback: /* @__PURE__ */ React61.createElement(FullPageProgress_default, { loadingText: "Loading preview..." }) }, /* @__PURE__ */ React61.createElement(PreviewContainer_default, null))
7579
+ element: /* @__PURE__ */ React61.createElement(Suspense2, { fallback: /* @__PURE__ */ React61.createElement(FullPageProgress_default, { text: "Loading preview..." }) }, /* @__PURE__ */ React61.createElement(PreviewContainer_default, null))
7033
7580
  }
7034
7581
  )) : null, /* @__PURE__ */ React61.createElement(Route, { path: "meeting" }, /* @__PURE__ */ React61.createElement(
7035
7582
  Route,
7036
7583
  {
7037
7584
  path: ":roomId/:role",
7038
- element: /* @__PURE__ */ React61.createElement(Suspense2, { fallback: /* @__PURE__ */ React61.createElement(FullPageProgress_default, { loadingText: "Joining..." }) }, /* @__PURE__ */ React61.createElement(Conference, null))
7585
+ element: /* @__PURE__ */ React61.createElement(Suspense2, { fallback: /* @__PURE__ */ React61.createElement(FullPageProgress_default, { text: "Joining..." }) }, /* @__PURE__ */ React61.createElement(Conference, null))
7039
7586
  }
7040
7587
  ), /* @__PURE__ */ React61.createElement(
7041
7588
  Route,
7042
7589
  {
7043
7590
  path: ":roomId",
7044
- element: /* @__PURE__ */ React61.createElement(Suspense2, { fallback: /* @__PURE__ */ React61.createElement(FullPageProgress_default, { loadingText: "Joining..." }) }, /* @__PURE__ */ React61.createElement(Conference, null))
7591
+ element: /* @__PURE__ */ React61.createElement(Suspense2, { fallback: /* @__PURE__ */ React61.createElement(FullPageProgress_default, { text: "Joining..." }) }, /* @__PURE__ */ React61.createElement(Conference, null))
7045
7592
  }
7046
7593
  )), isLeaveScreenEnabled ? /* @__PURE__ */ React61.createElement(Route, { path: "leave" }, /* @__PURE__ */ React61.createElement(Route, { path: ":roomId/:role", element: /* @__PURE__ */ React61.createElement(PostLeave_default, null) }), /* @__PURE__ */ React61.createElement(Route, { path: ":roomId", element: /* @__PURE__ */ React61.createElement(PostLeave_default, null) })) : null, /* @__PURE__ */ React61.createElement(Route, { path: "/:roomId/:role", element: /* @__PURE__ */ React61.createElement(Redirector, { showPreview: isPreviewScreenEnabled }) }), /* @__PURE__ */ React61.createElement(Route, { path: "/:roomId/", element: /* @__PURE__ */ React61.createElement(Redirector, { showPreview: isPreviewScreenEnabled }) }));
7047
7594
  };
7048
7595
  var BackSwipe = () => {
7049
- const isConnectedToRoom = useHMSStore30(selectIsConnectedToRoom5);
7596
+ const isConnectedToRoom = useHMSStore31(selectIsConnectedToRoom7);
7050
7597
  const hmsActions = useHMSActions20();
7051
- useEffect27(() => {
7598
+ useEffect29(() => {
7052
7599
  const onRouteLeave = () => __async(void 0, null, function* () {
7053
7600
  if (isConnectedToRoom) {
7054
7601
  yield hmsActions.leave();
@@ -7070,7 +7617,8 @@ function AppRoutes({
7070
7617
  defaultAuthToken
7071
7618
  }) {
7072
7619
  const roomLayout = useRoomLayout();
7073
- return /* @__PURE__ */ React61.createElement(Router, null, /* @__PURE__ */ React61.createElement(React61.Fragment, null, /* @__PURE__ */ React61.createElement(ToastContainer, null), /* @__PURE__ */ React61.createElement(Notifications, null), /* @__PURE__ */ React61.createElement(BackSwipe, null), /* @__PURE__ */ React61.createElement(FlyingEmoji, null), /* @__PURE__ */ React61.createElement(RemoteStopScreenshare, null), /* @__PURE__ */ React61.createElement(KeyboardHandler, null), /* @__PURE__ */ React61.createElement(BeamSpeakerLabelsLogging, null), /* @__PURE__ */ React61.createElement(AuthToken_default, { authTokenByRoomCodeEndpoint, defaultAuthToken }), roomLayout && /* @__PURE__ */ React61.createElement(Routes, null, /* @__PURE__ */ React61.createElement(Route, { path: "/*", element: /* @__PURE__ */ React61.createElement(RouteList, null) }))));
7620
+ const isNotificationsDisabled = useIsNotificationDisabled();
7621
+ return /* @__PURE__ */ React61.createElement(Router, null, /* @__PURE__ */ React61.createElement(React61.Fragment, null, /* @__PURE__ */ React61.createElement(ToastContainer, null), /* @__PURE__ */ React61.createElement(Notifications, null), /* @__PURE__ */ React61.createElement(BackSwipe, null), !isNotificationsDisabled && /* @__PURE__ */ React61.createElement(FlyingEmoji, null), /* @__PURE__ */ React61.createElement(RemoteStopScreenshare, null), /* @__PURE__ */ React61.createElement(KeyboardHandler, null), /* @__PURE__ */ React61.createElement(AuthToken_default, { authTokenByRoomCodeEndpoint, defaultAuthToken }), roomLayout && /* @__PURE__ */ React61.createElement(Routes, null, /* @__PURE__ */ React61.createElement(Route, { path: "/*", element: /* @__PURE__ */ React61.createElement(RouteList, null) }))));
7074
7622
  }
7075
7623
 
7076
7624
  // src/Progress/index.tsx
@@ -7138,7 +7686,6 @@ export {
7138
7686
  UI_SETTINGS,
7139
7687
  SIDE_PANE_OPTIONS,
7140
7688
  isChrome,
7141
- isSafari,
7142
7689
  isIOS,
7143
7690
  isMacOS,
7144
7691
  isAndroid,
@@ -7147,9 +7694,9 @@ export {
7147
7694
  ROLE_CHANGE_DECLINED,
7148
7695
  useIsSidepaneTypeOpen,
7149
7696
  useSidepaneToggle,
7697
+ useSidepaneReset,
7150
7698
  useUISettings,
7151
7699
  useSetUiSettings,
7152
- useIsHeadless,
7153
7700
  useWaitingViewerRole,
7154
7701
  useAuthToken,
7155
7702
  useUrlToEmbed,
@@ -7164,18 +7711,19 @@ export {
7164
7711
  DialogSelect,
7165
7712
  DialogInputFile,
7166
7713
  FullPageProgress_default,
7167
- useRoomLayout,
7168
7714
  ToastManager,
7715
+ getMetadata,
7169
7716
  isScreenshareSupported,
7170
7717
  isInternalRole,
7171
7718
  getFormattedCount,
7719
+ PictureInPicture,
7720
+ useRoomLayoutPreviewScreen,
7721
+ useRoomLayoutConferencingScreen,
7722
+ useRedirectToLeave,
7172
7723
  Sheet,
7173
7724
  useMyMetadata,
7174
7725
  StopRecordingInSheet,
7175
7726
  Header2 as Header,
7176
- useRoomLayoutPreviewScreen,
7177
- useRoomLayoutConferencingScreen,
7178
- useRoomLayoutLeaveScreen,
7179
7727
  AudioVideoToggle,
7180
7728
  ConnectionIndicator,
7181
7729
  DialogDropdownTrigger,
@@ -7188,7 +7736,9 @@ export {
7188
7736
  VideoTile_default,
7189
7737
  PreviewTile,
7190
7738
  PreviewControls,
7739
+ useFilteredRoles,
7740
+ useParticipants2 as useParticipants,
7191
7741
  HMSPrebuilt,
7192
7742
  Progress
7193
7743
  };
7194
- //# sourceMappingURL=chunk-RXTHJUMZ.js.map
7744
+ //# sourceMappingURL=chunk-WVGGQZK4.js.map