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

Sign up to get free protection for your applications and to get access to all the features.
Files changed (123) hide show
  1. package/dist/Theme/ThemeProvider.d.ts +1 -0
  2. package/dist/index.cjs.css +2 -2
  3. package/dist/index.cjs.css.map +1 -1
  4. package/dist/index.cjs.js +34109 -37488
  5. package/dist/index.cjs.js.map +4 -4
  6. package/dist/index.css +2 -2
  7. package/dist/index.css.map +1 -1
  8. package/dist/index.js +36389 -73
  9. package/dist/index.js.map +4 -4
  10. package/dist/meta.cjs.json +5568 -5617
  11. package/dist/meta.esbuild.json +6032 -8744
  12. package/package.json +7 -7
  13. package/src/Prebuilt/App.tsx +3 -6
  14. package/src/Prebuilt/components/Chat/Chat.tsx +8 -12
  15. package/src/Prebuilt/components/Footer/WhiteboardToggle.tsx +11 -4
  16. package/src/Prebuilt/components/HMSVideo/HMSVideo.jsx +3 -3
  17. package/src/Prebuilt/components/MoreSettings/SplitComponents/DesktopOptions.tsx +3 -0
  18. package/src/Prebuilt/components/Preview/PreviewJoin.tsx +3 -2
  19. package/src/Prebuilt/components/VideoLayouts/GridLayout.tsx +30 -43
  20. package/src/Prebuilt/layouts/HLSView.jsx +2 -3
  21. package/src/Prebuilt/layouts/SidePane.tsx +6 -12
  22. package/src/Prebuilt/layouts/VideoStreamingSection.tsx +64 -69
  23. package/src/Theme/ThemeProvider.tsx +9 -3
  24. package/dist/ConferenceScreen-CLPW3BGP.css +0 -2780
  25. package/dist/ConferenceScreen-CLPW3BGP.css.map +0 -7
  26. package/dist/ConferenceScreen-M6RBPTAJ.js +0 -1774
  27. package/dist/ConferenceScreen-M6RBPTAJ.js.map +0 -7
  28. package/dist/EmbedView-DDSO7ZCV.js +0 -17
  29. package/dist/EmbedView-DDSO7ZCV.js.map +0 -7
  30. package/dist/EmbedView-HGIUZHKA.css +0 -2780
  31. package/dist/EmbedView-HGIUZHKA.css.map +0 -7
  32. package/dist/EmojiReaction-23JDKJD4.js +0 -11
  33. package/dist/EmojiReaction-23JDKJD4.js.map +0 -7
  34. package/dist/HLSView-OW77EAAO.css +0 -2780
  35. package/dist/HLSView-OW77EAAO.css.map +0 -7
  36. package/dist/HLSView-Q6GEB3UM.js +0 -1666
  37. package/dist/HLSView-Q6GEB3UM.js.map +0 -7
  38. package/dist/LeaveScreen-BYTE73MT.js +0 -556
  39. package/dist/LeaveScreen-BYTE73MT.js.map +0 -7
  40. package/dist/LeaveScreen-P7AATEIF.css +0 -2780
  41. package/dist/LeaveScreen-P7AATEIF.css.map +0 -7
  42. package/dist/MoreSettings-LV5X2U6K.css +0 -2780
  43. package/dist/MoreSettings-LV5X2U6K.css.map +0 -7
  44. package/dist/MoreSettings-WSHMMNOC.js +0 -16
  45. package/dist/MoreSettings-WSHMMNOC.js.map +0 -7
  46. package/dist/PDFView-RIPRIIH6.css +0 -2780
  47. package/dist/PDFView-RIPRIIH6.css.map +0 -7
  48. package/dist/PDFView-ZFSG2ESE.js +0 -84
  49. package/dist/PDFView-ZFSG2ESE.js.map +0 -7
  50. package/dist/Polls-QWW5LTTB.js +0 -1584
  51. package/dist/Polls-QWW5LTTB.js.map +0 -7
  52. package/dist/Polls-ULYGUPPF.css +0 -2780
  53. package/dist/Polls-ULYGUPPF.css.map +0 -7
  54. package/dist/RaiseHand-K7NFLH7H.js +0 -10
  55. package/dist/RaiseHand-K7NFLH7H.js.map +0 -7
  56. package/dist/RoleProminence-235AFT7F.js +0 -116
  57. package/dist/RoleProminence-235AFT7F.js.map +0 -7
  58. package/dist/RoleProminence-6XN3POS5.css +0 -2780
  59. package/dist/RoleProminence-6XN3POS5.css.map +0 -7
  60. package/dist/RoomDetailsPane-O5TFMTPI.css +0 -2780
  61. package/dist/RoomDetailsPane-O5TFMTPI.css.map +0 -7
  62. package/dist/RoomDetailsPane-RF3D3TDR.js +0 -53
  63. package/dist/RoomDetailsPane-RF3D3TDR.js.map +0 -7
  64. package/dist/ScreenshareLayout-KNEB3AJJ.css +0 -2780
  65. package/dist/ScreenshareLayout-KNEB3AJJ.css.map +0 -7
  66. package/dist/ScreenshareLayout-PSQMS3NC.js +0 -358
  67. package/dist/ScreenshareLayout-PSQMS3NC.js.map +0 -7
  68. package/dist/SidePaneTabs-I6DECE5R.css +0 -2780
  69. package/dist/SidePaneTabs-I6DECE5R.css.map +0 -7
  70. package/dist/SidePaneTabs-NXHBI2JB.js +0 -1354
  71. package/dist/SidePaneTabs-NXHBI2JB.js.map +0 -7
  72. package/dist/VBPicker-2CQ3IIO7.js +0 -322
  73. package/dist/VBPicker-2CQ3IIO7.js.map +0 -7
  74. package/dist/VBPicker-DCNYGO23.css +0 -2780
  75. package/dist/VBPicker-DCNYGO23.css.map +0 -7
  76. package/dist/WaitingView-NZIUOXBI.js +0 -10
  77. package/dist/WaitingView-NZIUOXBI.js.map +0 -7
  78. package/dist/WhiteboardLayout-4YLFM3EY.js +0 -96
  79. package/dist/WhiteboardLayout-4YLFM3EY.js.map +0 -7
  80. package/dist/WhiteboardLayout-JUOBDFKY.css +0 -2780
  81. package/dist/WhiteboardLayout-JUOBDFKY.css.map +0 -7
  82. package/dist/chunk-3C7IESSI.js +0 -254
  83. package/dist/chunk-3C7IESSI.js.map +0 -7
  84. package/dist/chunk-7FD3VT6Q.js +0 -114
  85. package/dist/chunk-7FD3VT6Q.js.map +0 -7
  86. package/dist/chunk-AHI4HCY3.js +0 -62
  87. package/dist/chunk-AHI4HCY3.js.map +0 -7
  88. package/dist/chunk-BGSYLCVD.js +0 -6337
  89. package/dist/chunk-BGSYLCVD.js.map +0 -7
  90. package/dist/chunk-DANANDDE.js +0 -418
  91. package/dist/chunk-DANANDDE.js.map +0 -7
  92. package/dist/chunk-ETRNLEWQ.js +0 -2658
  93. package/dist/chunk-ETRNLEWQ.js.map +0 -7
  94. package/dist/chunk-EWPHJFZJ.js +0 -487
  95. package/dist/chunk-EWPHJFZJ.js.map +0 -7
  96. package/dist/chunk-F63YJBI4.js +0 -98
  97. package/dist/chunk-F63YJBI4.js.map +0 -7
  98. package/dist/chunk-GLAJUP3O.js +0 -576
  99. package/dist/chunk-GLAJUP3O.js.map +0 -7
  100. package/dist/chunk-GOXRTCTY.js +0 -90
  101. package/dist/chunk-GOXRTCTY.js.map +0 -7
  102. package/dist/chunk-HMCBZI3A.js +0 -59
  103. package/dist/chunk-HMCBZI3A.js.map +0 -7
  104. package/dist/chunk-HVYTC3PX.js +0 -171
  105. package/dist/chunk-HVYTC3PX.js.map +0 -7
  106. package/dist/chunk-LJVP6AWF.js +0 -262
  107. package/dist/chunk-LJVP6AWF.js.map +0 -7
  108. package/dist/chunk-LXJGCRKM.js +0 -30
  109. package/dist/chunk-LXJGCRKM.js.map +0 -7
  110. package/dist/chunk-MG3UGW66.js +0 -16800
  111. package/dist/chunk-MG3UGW66.js.map +0 -7
  112. package/dist/chunk-MUKUP7JU.js +0 -161
  113. package/dist/chunk-MUKUP7JU.js.map +0 -7
  114. package/dist/chunk-OV6MVDCL.js +0 -41
  115. package/dist/chunk-OV6MVDCL.js.map +0 -7
  116. package/dist/chunk-P6NV2XO4.js +0 -178
  117. package/dist/chunk-P6NV2XO4.js.map +0 -7
  118. package/dist/chunk-REL3HBSD.js +0 -71
  119. package/dist/chunk-REL3HBSD.js.map +0 -7
  120. package/dist/chunk-U4SQBXPZ.js +0 -830
  121. package/dist/chunk-U4SQBXPZ.js.map +0 -7
  122. package/dist/chunk-YEL5ZTFU.js +0 -136
  123. package/dist/chunk-YEL5ZTFU.js.map +0 -7
@@ -1,2658 +0,0 @@
1
- import {
2
- StopRecordingInSheet
3
- } from "./chunk-3C7IESSI.js";
4
- import {
5
- EmojiReaction
6
- } from "./chunk-7FD3VT6Q.js";
7
- import {
8
- useMyMetadata
9
- } from "./chunk-AHI4HCY3.js";
10
- import {
11
- Accordion,
12
- ActionTile,
13
- Button,
14
- ChangeNameModal,
15
- Checkbox,
16
- Dialog,
17
- DialogContent,
18
- DialogDropdownTrigger,
19
- DialogRow,
20
- DialogSelect,
21
- Ee,
22
- HorizontalDivider,
23
- Input,
24
- Label,
25
- Loading,
26
- NoiseCancellation,
27
- PictureInPicture,
28
- RadioGroup,
29
- RoleChangeModal,
30
- SettingsModal_default,
31
- Sheet,
32
- Switch,
33
- TextArea,
34
- formatBytes,
35
- trackSourceOptions,
36
- trackTypeOptions,
37
- useDropdownSelection,
38
- useIsSidepaneTypeOpen,
39
- usePIPWindow,
40
- usePollViewToggle,
41
- useSheetToggle,
42
- useSidepaneToggle
43
- } from "./chunk-MG3UGW66.js";
44
- import {
45
- Text
46
- } from "./chunk-MUKUP7JU.js";
47
- import {
48
- Dropdown,
49
- ToastManager,
50
- useDropdownList,
51
- useFilteredRoles,
52
- useLandscapeHLSStream,
53
- useMobileHLSStream,
54
- useRecordingHandler
55
- } from "./chunk-DANANDDE.js";
56
- import {
57
- Box,
58
- Flex
59
- } from "./chunk-GOXRTCTY.js";
60
- import {
61
- IconButton,
62
- IconButton_default,
63
- Tooltip,
64
- getFormattedCount,
65
- usePinnedTrack,
66
- useRoomLayoutConferencingScreen,
67
- useRoomLayoutHeader,
68
- useSetAppDataByKey,
69
- useSetIsCaptionEnabled,
70
- useSetSubscribedChatSelector,
71
- useSetUiSettings,
72
- useShowPolls
73
- } from "./chunk-BGSYLCVD.js";
74
- import {
75
- APP_DATA,
76
- CAPTION_TOAST,
77
- CHAT_SELECTOR,
78
- DEFAULT_PORTAL_CONTAINER,
79
- RTMP_RECORD_DEFAULT_RESOLUTION,
80
- RTMP_RECORD_RESOLUTION_MAX,
81
- RTMP_RECORD_RESOLUTION_MIN,
82
- SHEET_OPTIONS,
83
- SIDE_PANE_OPTIONS,
84
- UI_SETTINGS,
85
- __async,
86
- __publicField,
87
- __spreadValues,
88
- config,
89
- getCssText,
90
- init_define_process_env,
91
- isMacOS,
92
- styled
93
- } from "./chunk-GLAJUP3O.js";
94
-
95
- // src/Prebuilt/components/MoreSettings/MoreSettings.tsx
96
- init_define_process_env();
97
- import React20 from "react";
98
- import { useMedia as useMedia5 } from "react-use";
99
-
100
- // src/Prebuilt/components/MoreSettings/SplitComponents/DesktopOptions.tsx
101
- init_define_process_env();
102
- import React18, { Fragment as Fragment2, useState as useState12 } from "react";
103
- import { HMSHLSPlayer } from "@100mslive/hls-player";
104
- import { match as match2 } from "ts-pattern";
105
- import {
106
- HMSTranscriptionMode as HMSTranscriptionMode2,
107
- selectAppData,
108
- selectIsTranscriptionAllowedByMode,
109
- selectIsTranscriptionEnabled as selectIsTranscriptionEnabled2,
110
- selectLocalPeerID as selectLocalPeerID4,
111
- useHMSActions as useHMSActions12,
112
- useHMSStore as useHMSStore11
113
- } from "@100mslive/react-sdk";
114
- import {
115
- BrbIcon,
116
- CheckIcon as CheckIcon2,
117
- HamburgerMenuIcon,
118
- InfoIcon as InfoIcon2,
119
- OpenCaptionIcon,
120
- PipIcon as PipIcon2,
121
- SettingsIcon
122
- } from "@100mslive/react-icons";
123
-
124
- // src/Prebuilt/components/PIP/index.jsx
125
- init_define_process_env();
126
- import React2 from "react";
127
-
128
- // src/Prebuilt/components/PIP/PIPComponent.tsx
129
- init_define_process_env();
130
- import React, { useCallback, useEffect, useState } from "react";
131
- import { selectPeers, selectTracksMap, useHMSActions, useHMSVanillaStore } from "@100mslive/react-sdk";
132
- import { PipIcon } from "@100mslive/react-icons";
133
-
134
- // src/Prebuilt/components/PIP/SetupMediaSession.js
135
- init_define_process_env();
136
- import { selectIsLocalAudioEnabled, selectIsLocalVideoEnabled } from "@100mslive/react-sdk";
137
- var SetupMediaSession = class {
138
- constructor() {
139
- __publicField(this, "setup", (actions, store) => {
140
- this.actions = actions;
141
- this.store = store;
142
- this.initState();
143
- this.setUpHandlers();
144
- });
145
- __publicField(this, "initState", () => {
146
- var _a, _b, _c, _d;
147
- const isMicActive = this.store.getState(selectIsLocalAudioEnabled);
148
- const isCamActive = this.store.getState(selectIsLocalVideoEnabled);
149
- (_b = (_a = navigator.mediaSession) == null ? void 0 : _a.setMicrophoneActive) == null ? void 0 : _b.call(_a, isMicActive);
150
- (_d = (_c = navigator.mediaSession) == null ? void 0 : _c.setCameraActive) == null ? void 0 : _d.call(_c, isCamActive);
151
- this.store.subscribe((isMicActive2) => {
152
- var _a2, _b2;
153
- (_b2 = (_a2 = navigator.mediaSession) == null ? void 0 : _a2.setMicrophoneActive) == null ? void 0 : _b2.call(_a2, isMicActive2);
154
- }, selectIsLocalAudioEnabled);
155
- this.store.subscribe((isCamActive2) => {
156
- var _a2, _b2;
157
- (_b2 = (_a2 = navigator.mediaSession) == null ? void 0 : _a2.setCameraActive) == null ? void 0 : _b2.call(_a2, isCamActive2);
158
- }, selectIsLocalVideoEnabled);
159
- });
160
- __publicField(this, "toggleMic", () => __async(this, null, function* () {
161
- console.log("toggle mic clicked in pip");
162
- const current = this.store.getState(selectIsLocalAudioEnabled);
163
- yield this.actions.setLocalAudioEnabled(!current);
164
- }));
165
- __publicField(this, "toggleCam", () => __async(this, null, function* () {
166
- console.log("toggle cam clicked in pip");
167
- const current = this.store.getState(selectIsLocalVideoEnabled);
168
- yield this.actions.setLocalVideoEnabled(!current);
169
- }));
170
- __publicField(this, "leave", () => {
171
- console.log("leave called from pip");
172
- this.actions.leave();
173
- });
174
- __publicField(this, "setUpHandlers", () => {
175
- if (navigator.mediaSession) {
176
- try {
177
- navigator.mediaSession.setActionHandler("togglemicrophone", this.toggleMic);
178
- navigator.mediaSession.setActionHandler("togglecamera", this.toggleCam);
179
- navigator.mediaSession.setActionHandler("hangup", this.leave);
180
- } catch (err) {
181
- console.error("error in setting media session handlers", err);
182
- }
183
- }
184
- });
185
- }
186
- };
187
- var MediaSession = new SetupMediaSession();
188
-
189
- // src/Prebuilt/components/PIP/PIPComponent.tsx
190
- var PIPComponent = ({ content = null }) => {
191
- const [isPipOn, setIsPipOn] = useState(PictureInPicture.isOn());
192
- const hmsActions = useHMSActions();
193
- const store = useHMSVanillaStore();
194
- const onPipToggle = useCallback(() => {
195
- if (!isPipOn) {
196
- PictureInPicture.start(hmsActions, setIsPipOn).catch((err) => console.error("error in starting pip", err));
197
- MediaSession.setup(hmsActions, store);
198
- } else {
199
- PictureInPicture.stop().catch((err) => console.error("error in stopping pip", err));
200
- }
201
- }, [hmsActions, isPipOn, store]);
202
- if (!PictureInPicture.isSupported()) {
203
- return null;
204
- }
205
- return /* @__PURE__ */ React.createElement(React.Fragment, null, content ? /* @__PURE__ */ React.createElement(Flex, { css: { w: "100%" }, onClick: () => onPipToggle(), "data-testid": "pip_btn" }, content) : /* @__PURE__ */ React.createElement(Tooltip, { title: `${isPipOn ? "Deactivate" : "Activate"} picture in picture view` }, /* @__PURE__ */ React.createElement(IconButton_default, { active: !isPipOn, key: "pip", onClick: () => onPipToggle(), "data-testid": "pip_btn" }, /* @__PURE__ */ React.createElement(PipIcon, null))));
206
- };
207
- var ActivatedPIP = () => {
208
- const store = useHMSVanillaStore();
209
- const pinnedTrack = usePinnedTrack();
210
- useEffect(() => {
211
- function subscribeToStore() {
212
- return store.subscribe((tracksMap) => {
213
- let pipPeers = store.getState(selectPeers);
214
- if (pinnedTrack) {
215
- pipPeers = pipPeers.filter((peer) => pinnedTrack.peerId === peer.id);
216
- }
217
- PictureInPicture.updatePeersAndTracks(pipPeers, tracksMap).catch((err) => {
218
- console.error("error in updating pip", err);
219
- });
220
- }, selectTracksMap);
221
- }
222
- let unsubscribe = PictureInPicture.isOn() ? subscribeToStore() : void 0;
223
- PictureInPicture.listenToStateChange((isOn) => {
224
- if (isOn) {
225
- if (!unsubscribe) {
226
- unsubscribe = subscribeToStore();
227
- }
228
- } else {
229
- unsubscribe == null ? void 0 : unsubscribe();
230
- unsubscribe = void 0;
231
- }
232
- });
233
- return () => {
234
- unsubscribe == null ? void 0 : unsubscribe();
235
- unsubscribe = void 0;
236
- };
237
- }, [pinnedTrack, store]);
238
- return /* @__PURE__ */ React.createElement(React.Fragment, null);
239
- };
240
- var PIPComponent_default = PIPComponent;
241
-
242
- // src/Prebuilt/components/PIP/index.jsx
243
- var PIP = ({ content = null }) => {
244
- return /* @__PURE__ */ React2.createElement(PIPComponent_default, { content });
245
- };
246
-
247
- // src/Prebuilt/components/PIP/PIPChat.tsx
248
- init_define_process_env();
249
- import React7, { useCallback as useCallback6, useEffect as useEffect4, useMemo as useMemo2, useState as useState5 } from "react";
250
- import {
251
- selectHMSMessages as selectHMSMessages2,
252
- selectLocalPeerID as selectLocalPeerID2,
253
- selectPeerNameByID as selectPeerNameByID3,
254
- selectSessionStore as selectSessionStore5,
255
- selectUnreadHMSMessagesCount as selectUnreadHMSMessagesCount2,
256
- useHMSStore as useHMSStore5
257
- } from "@100mslive/react-sdk";
258
- import { SendIcon } from "@100mslive/react-icons";
259
-
260
- // src/Prebuilt/components/Chat/ChatBody.tsx
261
- init_define_process_env();
262
- import React6, { Fragment, useCallback as useCallback5, useEffect as useEffect3, useLayoutEffect, useMemo, useRef, useState as useState4 } from "react";
263
- import { useMedia as useMedia2 } from "react-use";
264
- import AutoSizer from "react-virtualized-auto-sizer";
265
- import { VariableSizeList } from "react-window";
266
- import {
267
- selectHMSMessages,
268
- selectLocalPeerID,
269
- selectLocalPeerName as selectLocalPeerName2,
270
- selectLocalPeerRoleName,
271
- selectPeerNameByID as selectPeerNameByID2,
272
- selectSessionStore as selectSessionStore4,
273
- selectUnreadHMSMessagesCount,
274
- useHMSActions as useHMSActions5,
275
- useHMSStore as useHMSStore4,
276
- useHMSVanillaStore as useHMSVanillaStore3
277
- } from "@100mslive/react-sdk";
278
- import { SolidPinIcon } from "@100mslive/react-icons";
279
-
280
- // src/Prebuilt/components/Chat/ChatActions.tsx
281
- init_define_process_env();
282
- import React4, { useCallback as useCallback4, useState as useState2 } from "react";
283
- import { selectLocalPeerName, selectPermissions, useHMSActions as useHMSActions4, useHMSStore as useHMSStore2 } from "@100mslive/react-sdk";
284
- import {
285
- CopyIcon,
286
- CrossCircleIcon,
287
- CrossIcon,
288
- EyeCloseIcon,
289
- PeopleRemoveIcon,
290
- PinIcon,
291
- ReplyGroupIcon,
292
- ReplyIcon,
293
- VerticalMenuIcon
294
- } from "@100mslive/react-icons";
295
-
296
- // src/Prebuilt/components/Chat/MwebChatOption.tsx
297
- init_define_process_env();
298
- import React3 from "react";
299
- var MwebChatOption = ({
300
- icon,
301
- text,
302
- onClick,
303
- color = "$on_surface_high"
304
- }) => {
305
- return /* @__PURE__ */ React3.createElement(Flex, { align: "center", css: { w: "100%", color, cursor: "pointer", gap: "$4", p: "$8" }, onClick }, icon, /* @__PURE__ */ React3.createElement(Text, { variant: "sm", css: { color, fontWeight: "$semiBold" } }, text));
306
- };
307
-
308
- // src/Prebuilt/components/hooks/useChatBlacklist.ts
309
- init_define_process_env();
310
- import { useCallback as useCallback2 } from "react";
311
- import { selectLocalPeer, selectSessionStore, useHMSActions as useHMSActions2, useHMSStore } from "@100mslive/react-sdk";
312
- var useChatBlacklist = (sessionStoreKey) => {
313
- const hmsActions = useHMSActions2();
314
- const blacklistedIDs = useHMSStore(selectSessionStore(sessionStoreKey));
315
- const blacklistItem = useCallback2(
316
- (blacklistID) => __async(void 0, null, function* () {
317
- yield hmsActions.sessionStore.set(sessionStoreKey, [...blacklistedIDs || [], blacklistID]).catch((err) => ToastManager.addToast({ title: err.description }));
318
- }),
319
- [hmsActions, sessionStoreKey, blacklistedIDs]
320
- );
321
- return { blacklistItem, blacklistedIDs };
322
- };
323
- var useIsPeerBlacklisted = ({ local = false, peerCustomerUserId = "" }) => {
324
- const localPeer = useHMSStore(selectLocalPeer);
325
- const blacklistedPeerIDs = useHMSStore(selectSessionStore("chatPeerBlacklist" /* CHAT_PEER_BLACKLIST */)) || [];
326
- return blacklistedPeerIDs == null ? void 0 : blacklistedPeerIDs.includes(local ? localPeer == null ? void 0 : localPeer.customerUserId : peerCustomerUserId);
327
- };
328
-
329
- // src/Prebuilt/components/hooks/usePinnedMessages.ts
330
- init_define_process_env();
331
- import { useCallback as useCallback3 } from "react";
332
- import {
333
- selectPeerNameByID,
334
- selectSessionStore as selectSessionStore2,
335
- useHMSActions as useHMSActions3,
336
- useHMSVanillaStore as useHMSVanillaStore2
337
- } from "@100mslive/react-sdk";
338
- var usePinnedMessages = () => {
339
- const hmsActions = useHMSActions3();
340
- const vanillaStore = useHMSVanillaStore2();
341
- const setPinnedMessages = useCallback3(
342
- (message, pinnedBy) => __async(void 0, null, function* () {
343
- const peerName = vanillaStore.getState(selectPeerNameByID(message == null ? void 0 : message.sender)) || (message == null ? void 0 : message.senderName);
344
- const newPinnedMessage = { text: "", id: message.id, pinnedBy };
345
- if (message && peerName) {
346
- newPinnedMessage["text"] = `${peerName}: ${message.message}`;
347
- } else if (message) {
348
- newPinnedMessage["text"] = message.message;
349
- }
350
- const pinnedMessages = vanillaStore.getState(selectSessionStore2("pinnedMessages" /* PINNED_MESSAGES */)) || [];
351
- if (!(pinnedMessages == null ? void 0 : pinnedMessages.find((pinnedMessage) => pinnedMessage.id === newPinnedMessage.id))) {
352
- yield hmsActions.sessionStore.set("pinnedMessages" /* PINNED_MESSAGES */, [...pinnedMessages, newPinnedMessage].slice(-3)).catch((err) => ToastManager.addToast({ title: err.description }));
353
- }
354
- }),
355
- [hmsActions, vanillaStore]
356
- );
357
- const removePinnedMessage = useCallback3(
358
- (indexToRemove) => __async(void 0, null, function* () {
359
- const pinnedMessages = vanillaStore.getState(selectSessionStore2("pinnedMessages" /* PINNED_MESSAGES */)) || [];
360
- if (pinnedMessages[indexToRemove]) {
361
- yield hmsActions.sessionStore.set(
362
- "pinnedMessages" /* PINNED_MESSAGES */,
363
- pinnedMessages.filter((_, index) => index !== indexToRemove)
364
- ).catch((err) => ToastManager.addToast({ title: err.description }));
365
- }
366
- }),
367
- [hmsActions, vanillaStore]
368
- );
369
- const unpinBlacklistedMessages = useCallback3(
370
- (blacklistedMessageIDSet) => __async(void 0, null, function* () {
371
- const pinnedMessages = vanillaStore.getState(selectSessionStore2("pinnedMessages" /* PINNED_MESSAGES */)) || [];
372
- const filteredPinnedMessages = pinnedMessages == null ? void 0 : pinnedMessages.filter(
373
- (pinnedMessage) => !(blacklistedMessageIDSet == null ? void 0 : blacklistedMessageIDSet.has(pinnedMessage.id))
374
- );
375
- yield hmsActions.sessionStore.set("pinnedMessages" /* PINNED_MESSAGES */, filteredPinnedMessages).catch((err) => ToastManager.addToast({ title: err.description }));
376
- }),
377
- [hmsActions, vanillaStore]
378
- );
379
- return { setPinnedMessages, removePinnedMessage, unpinBlacklistedMessages };
380
- };
381
-
382
- // src/Prebuilt/components/Chat/ChatActions.tsx
383
- var iconStyle = { height: "1.125rem", width: "1.125rem" };
384
- var tooltipBoxCSS = {
385
- fontSize: "$xs",
386
- backgroundColor: "$surface_default",
387
- p: "$1 $5",
388
- fontWeight: "$regular",
389
- borderRadius: "$3"
390
- };
391
- var ChatActions = ({
392
- showPinAction,
393
- onReply,
394
- onReplyGroup,
395
- showReply,
396
- message,
397
- sentByLocalPeer,
398
- isMobile,
399
- openSheet,
400
- setOpenSheet
401
- }) => {
402
- var _a, _b;
403
- const { elements } = useRoomLayoutConferencingScreen();
404
- const { can_hide_message = false, can_block_user = false } = ((_a = elements == null ? void 0 : elements.chat) == null ? void 0 : _a.real_time_controls) || {};
405
- const { roles_whitelist = [] } = (elements == null ? void 0 : elements.chat) || {};
406
- const [open, setOpen] = useState2(false);
407
- const actions = useHMSActions4();
408
- const canRemoveOthers = (_b = useHMSStore2(selectPermissions)) == null ? void 0 : _b.removeOthers;
409
- const { blacklistItem: blacklistPeer } = useChatBlacklist("chatPeerBlacklist" /* CHAT_PEER_BLACKLIST */);
410
- const localPeerName = useHMSStore2(selectLocalPeerName);
411
- const { setPinnedMessages, unpinBlacklistedMessages } = usePinnedMessages();
412
- const { blacklistItem: blacklistMessage, blacklistedIDs: blacklistedMessageIDs } = useChatBlacklist(
413
- "chatMessageBlacklist" /* CHAT_MESSAGE_BLACKLIST */
414
- );
415
- const isSenderBlocked = useIsPeerBlacklisted({ peerCustomerUserId: message.senderUserId });
416
- const updatePinnedMessages = useCallback4(
417
- (messageID = "") => {
418
- const blacklistedMessageIDSet = /* @__PURE__ */ new Set([...blacklistedMessageIDs || [], messageID]);
419
- unpinBlacklistedMessages(blacklistedMessageIDSet);
420
- },
421
- [blacklistedMessageIDs, unpinBlacklistedMessages]
422
- );
423
- const copyMessageContent = useCallback4(() => {
424
- try {
425
- navigator == null ? void 0 : navigator.clipboard.writeText(message.message);
426
- ToastManager.addToast({
427
- title: "Message copied successfully"
428
- });
429
- } catch (e) {
430
- console.log(e);
431
- ToastManager.addToast({
432
- title: "Could not copy message"
433
- });
434
- }
435
- }, [message]);
436
- const options = {
437
- reply: {
438
- text: "Reply privately",
439
- tooltipText: "Reply privately",
440
- icon: /* @__PURE__ */ React4.createElement(ReplyIcon, { style: iconStyle }),
441
- onClick: onReply,
442
- show: showReply
443
- },
444
- replyGroup: {
445
- text: "Reply to group",
446
- tooltipText: "Reply to group",
447
- icon: /* @__PURE__ */ React4.createElement(ReplyGroupIcon, { style: iconStyle }),
448
- onClick: onReplyGroup,
449
- show: !!message.senderRole && roles_whitelist.includes(message.senderRole)
450
- },
451
- pin: {
452
- text: "Pin message",
453
- tooltipText: "Pin",
454
- icon: /* @__PURE__ */ React4.createElement(PinIcon, { style: iconStyle }),
455
- onClick: () => setPinnedMessages(message, localPeerName || ""),
456
- show: showPinAction
457
- },
458
- copy: {
459
- text: "Copy text",
460
- tooltipText: "Copy",
461
- icon: /* @__PURE__ */ React4.createElement(CopyIcon, { style: iconStyle }),
462
- onClick: copyMessageContent,
463
- show: true
464
- },
465
- hide: {
466
- text: message.recipientPeer ? "Hide for both" : "Hide for everyone",
467
- icon: /* @__PURE__ */ React4.createElement(EyeCloseIcon, { style: iconStyle }),
468
- onClick: () => __async(void 0, null, function* () {
469
- blacklistMessage(message.id);
470
- updatePinnedMessages(message.id);
471
- }),
472
- show: !!can_hide_message
473
- },
474
- block: {
475
- text: "Block from chat",
476
- icon: /* @__PURE__ */ React4.createElement(CrossCircleIcon, { style: iconStyle }),
477
- onClick: () => __async(void 0, null, function* () {
478
- if (message.senderUserId) {
479
- blacklistPeer(message.senderUserId);
480
- }
481
- }),
482
- color: "$alert_error_default",
483
- show: !!can_block_user && !sentByLocalPeer && !isSenderBlocked
484
- },
485
- remove: {
486
- text: "Remove participant",
487
- icon: /* @__PURE__ */ React4.createElement(PeopleRemoveIcon, { style: iconStyle }),
488
- color: "$alert_error_default",
489
- show: !!canRemoveOthers && !sentByLocalPeer,
490
- onClick: () => __async(void 0, null, function* () {
491
- if (!message.sender) {
492
- return;
493
- }
494
- try {
495
- yield actions.removePeer(message.sender, "");
496
- } catch (error) {
497
- ToastManager.addToast({ title: error.message, variant: "error" });
498
- }
499
- })
500
- }
501
- };
502
- if (isMobile) {
503
- return /* @__PURE__ */ React4.createElement(Sheet.Root, { open: openSheet, onOpenChange: setOpenSheet }, /* @__PURE__ */ React4.createElement(Sheet.Content, { css: { bg: "$surface_default", pb: "$14" }, onClick: (e) => setOpenSheet(false, e) }, /* @__PURE__ */ React4.createElement(
504
- Sheet.Title,
505
- {
506
- css: {
507
- display: "flex",
508
- color: "$on_surface_high",
509
- w: "100%",
510
- justifyContent: "space-between",
511
- mt: "$8",
512
- fontSize: "$md",
513
- px: "$10",
514
- pb: "$8",
515
- borderBottom: "1px solid $border_bright",
516
- alignItems: "center"
517
- }
518
- },
519
- "Message options",
520
- /* @__PURE__ */ React4.createElement(Sheet.Close, { css: { color: "$on_surface_high" }, onClick: (e) => setOpenSheet(false, e) }, /* @__PURE__ */ React4.createElement(CrossIcon, null))
521
- ), Object.keys(options).map((optionKey) => {
522
- const option = options[optionKey];
523
- return option.show ? /* @__PURE__ */ React4.createElement(
524
- MwebChatOption,
525
- {
526
- key: optionKey,
527
- text: option.text,
528
- icon: option.icon,
529
- onClick: option.onClick,
530
- color: option == null ? void 0 : option.color
531
- }
532
- ) : null;
533
- })));
534
- }
535
- return /* @__PURE__ */ React4.createElement(Dropdown.Root, { open, onOpenChange: setOpen, css: { "@md": { display: "none" } } }, /* @__PURE__ */ React4.createElement(
536
- Flex,
537
- {
538
- className: "chat_actions",
539
- css: {
540
- background: "$surface_bright",
541
- borderRadius: "$1",
542
- p: "$2",
543
- opacity: open ? 1 : 0,
544
- position: "absolute",
545
- top: 0,
546
- right: 0,
547
- zIndex: 1,
548
- "@md": { opacity: 1 }
549
- }
550
- },
551
- options.reply.show ? /* @__PURE__ */ React4.createElement(Tooltip, { boxCss: tooltipBoxCSS, title: options.reply.tooltipText }, /* @__PURE__ */ React4.createElement(IconButton, { "data-testid": "reply_message_btn", onClick: options.reply.onClick }, options.reply.icon)) : null,
552
- options.replyGroup.show ? /* @__PURE__ */ React4.createElement(Tooltip, { boxCss: tooltipBoxCSS, title: options.replyGroup.tooltipText }, /* @__PURE__ */ React4.createElement(IconButton, { "data-testid": "reply_group_message_btn", onClick: options.replyGroup.onClick }, options.replyGroup.icon)) : null,
553
- options.pin.show ? /* @__PURE__ */ React4.createElement(Tooltip, { boxCss: tooltipBoxCSS, title: options.pin.tooltipText }, /* @__PURE__ */ React4.createElement(IconButton, { "data-testid": "pin_message_btn", onClick: options.pin.onClick }, options.pin.icon)) : null,
554
- options.copy.show ? /* @__PURE__ */ React4.createElement(Tooltip, { boxCss: tooltipBoxCSS, title: options.copy.tooltipText }, /* @__PURE__ */ React4.createElement(IconButton, { onClick: options.copy.onClick, "data-testid": "copy_message_btn" }, /* @__PURE__ */ React4.createElement(CopyIcon, { style: iconStyle }))) : null,
555
- options.block.show || options.hide.show || options.remove.show ? /* @__PURE__ */ React4.createElement(Tooltip, { boxCss: tooltipBoxCSS, title: "More actions" }, /* @__PURE__ */ React4.createElement(Dropdown.Trigger, { asChild: true }, /* @__PURE__ */ React4.createElement(IconButton, null, /* @__PURE__ */ React4.createElement(VerticalMenuIcon, { style: iconStyle })))) : null
556
- ), /* @__PURE__ */ React4.createElement(Dropdown.Portal, null, /* @__PURE__ */ React4.createElement(
557
- Dropdown.Content,
558
- {
559
- sideOffset: 5,
560
- align: "end",
561
- css: { width: "$48", backgroundColor: "$surface_bright", py: "$0", border: "1px solid $border_bright" }
562
- },
563
- options.hide.show ? /* @__PURE__ */ React4.createElement(Dropdown.Item, { "data-testid": "hide_message_btn", onClick: options.hide.onClick }, options.hide.icon, /* @__PURE__ */ React4.createElement(Text, { variant: "sm", css: { ml: "$4", fontWeight: "$semiBold" } }, options.hide.text)) : null,
564
- options.block.show ? /* @__PURE__ */ React4.createElement(
565
- Dropdown.Item,
566
- {
567
- "data-testid": "block_peer_btn",
568
- onClick: options.block.onClick,
569
- css: { color: options.block.color }
570
- },
571
- options.block.icon,
572
- /* @__PURE__ */ React4.createElement(Text, { variant: "sm", css: { ml: "$4", color: "inherit", fontWeight: "$semiBold" } }, options.block.text)
573
- ) : null,
574
- options.remove.show ? /* @__PURE__ */ React4.createElement(
575
- Dropdown.Item,
576
- {
577
- "data-testid": "remove_peer_btn",
578
- onClick: options.remove.onClick,
579
- css: { color: options.remove.color }
580
- },
581
- options.remove.icon,
582
- /* @__PURE__ */ React4.createElement(Text, { variant: "sm", css: { ml: "$4", color: "inherit", fontWeight: "$semiBold" } }, options.remove.text)
583
- ) : null
584
- )));
585
- };
586
-
587
- // src/Prebuilt/components/Chat/EmptyChat.tsx
588
- init_define_process_env();
589
- import React5 from "react";
590
- import { useMedia } from "react-use";
591
- import emptyChat from "./empty-chat.svg";
592
- var EmptyChat = () => {
593
- var _a;
594
- const { elements } = useRoomLayoutConferencingScreen();
595
- const isLocalPeerBlacklisted = useIsPeerBlacklisted({ local: true });
596
- const isMobile = useMedia(config.media.md);
597
- const canSendMessages = elements.chat && (elements.chat.public_chat_enabled || elements.chat.private_chat_enabled || elements.chat.roles_whitelist && elements.chat.roles_whitelist.length) && !isLocalPeerBlacklisted;
598
- const isMobileHLSStream = useMobileHLSStream();
599
- const isLandscapeStream = useLandscapeHLSStream();
600
- const streaming = isMobileHLSStream || isLandscapeStream;
601
- if (isMobile && ((_a = elements == null ? void 0 : elements.chat) == null ? void 0 : _a.is_overlay) && !streaming)
602
- return /* @__PURE__ */ React5.createElement(React5.Fragment, null);
603
- return /* @__PURE__ */ React5.createElement(
604
- Flex,
605
- {
606
- css: {
607
- width: "100%",
608
- flex: "1 1 0",
609
- textAlign: "center",
610
- px: "$4"
611
- },
612
- align: "center",
613
- justify: "center"
614
- },
615
- /* @__PURE__ */ React5.createElement(Box, null, /* @__PURE__ */ React5.createElement(Box, { css: { m: "0 auto", mt: "$4", "@media (max-height: 575px)": { display: "none" } } }, /* @__PURE__ */ React5.createElement("img", { src: emptyChat, style: { display: "inline" }, alt: "Empty Chat", height: 132, width: 185 })), /* @__PURE__ */ React5.createElement(Text, { variant: "h5", css: { mt: "$8", c: "$on_surface_high" } }, canSendMessages ? "Start a conversation" : "No messages yet"), canSendMessages ? /* @__PURE__ */ React5.createElement(
616
- Text,
617
- {
618
- variant: "sm",
619
- css: { mt: "$4", maxWidth: "80%", textAlign: "center", mx: "auto", c: "$on_surface_medium" }
620
- },
621
- "There are no messages here yet. Start a conversation by sending a message."
622
- ) : null)
623
- );
624
- };
625
-
626
- // src/Prebuilt/components/hooks/usePinnedBy.tsx
627
- init_define_process_env();
628
- import { useEffect as useEffect2, useState as useState3 } from "react";
629
- import { selectSessionStore as selectSessionStore3, useHMSStore as useHMSStore3 } from "@100mslive/react-sdk";
630
- var usePinnedBy = (messageId) => {
631
- const pinnedMessages = useHMSStore3(selectSessionStore3("pinnedMessages" /* PINNED_MESSAGES */));
632
- const [pinnedBy, setPinnedBy] = useState3("");
633
- useEffect2(() => {
634
- let match4 = "";
635
- pinnedMessages == null ? void 0 : pinnedMessages.forEach((pinnedMessage) => {
636
- if (pinnedMessage.id === messageId) {
637
- match4 = pinnedMessage.pinnedBy;
638
- }
639
- });
640
- setPinnedBy(match4);
641
- }, [messageId, pinnedMessages]);
642
- return pinnedBy;
643
- };
644
-
645
- // src/Prebuilt/components/Chat/utils.ts
646
- init_define_process_env();
647
- var formatTime = (date) => {
648
- if (!(date instanceof Date)) {
649
- return "";
650
- }
651
- const hours = date.getHours();
652
- const minutes = date.getMinutes();
653
- const suffix = hours > 11 ? "PM" : "AM";
654
- return `${hours < 10 ? "0" : ""}${hours}:${minutes < 10 ? "0" : ""}${minutes} ${suffix}`;
655
- };
656
- var CHAT_MESSAGE_LIMIT = 2e3;
657
-
658
- // src/Prebuilt/components/Chat/ChatBody.tsx
659
- var rowHeights = {};
660
- var listInstance = null;
661
- function getRowHeight(index) {
662
- var _a;
663
- return ((_a = rowHeights[index]) == null ? void 0 : _a.size) || 72;
664
- }
665
- var setRowHeight = (index, id, size) => {
666
- var _a, _b;
667
- if (((_a = rowHeights[index]) == null ? void 0 : _a.id) === id && ((_b = rowHeights[index]) == null ? void 0 : _b.size) === size) {
668
- return;
669
- }
670
- listInstance == null ? void 0 : listInstance.resetAfterIndex(Math.max(index - 1, 0));
671
- Object.assign(rowHeights, { [index]: { size, id } });
672
- };
673
- var getMessageBackgroundColor = (messageType, selectedPeerID, selectedRole, isOverlay) => {
674
- if (messageType && !(selectedPeerID || selectedRole)) {
675
- return isOverlay ? "rgba(0, 0, 0, 0.64)" : "$surface_default";
676
- }
677
- return "";
678
- };
679
- var MessageTypeContainer = ({ left, right }) => {
680
- return /* @__PURE__ */ React6.createElement(
681
- Flex,
682
- {
683
- align: "center",
684
- css: {
685
- ml: "$2",
686
- mr: "$4",
687
- gap: "$space$2",
688
- flexWrap: "nowrap"
689
- }
690
- },
691
- left && /* @__PURE__ */ React6.createElement(
692
- Text,
693
- {
694
- variant: "xs",
695
- as: "span",
696
- css: {
697
- color: "$on_surface_medium",
698
- textTransform: "capitalize",
699
- fontWeight: "$regular",
700
- whiteSpace: "nowrap"
701
- }
702
- },
703
- left
704
- ),
705
- right && /* @__PURE__ */ React6.createElement(
706
- Text,
707
- {
708
- as: "span",
709
- variant: "overline",
710
- css: {
711
- color: "$on_surface_medium",
712
- fontWeight: "$regular",
713
- whiteSpace: "nowrap"
714
- }
715
- },
716
- right
717
- )
718
- );
719
- };
720
- var MessageType = ({
721
- roles,
722
- hasCurrentUserSent,
723
- receiver
724
- }) => {
725
- const peerName = useHMSStore4(selectPeerNameByID2(receiver));
726
- const localPeerRoleName = useHMSStore4(selectLocalPeerRoleName);
727
- if (receiver) {
728
- return /* @__PURE__ */ React6.createElement(MessageTypeContainer, { left: hasCurrentUserSent ? `${peerName ? `to ${peerName}` : ""}` : "to You", right: "(DM)" });
729
- }
730
- if (roles && roles.length) {
731
- return /* @__PURE__ */ React6.createElement(MessageTypeContainer, { left: `to ${hasCurrentUserSent ? roles[0] : localPeerRoleName}`, right: "(Group)" });
732
- }
733
- return null;
734
- };
735
- var URL_REGEX = /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/;
736
- var Link = styled("a", {
737
- color: "$primary_default",
738
- wordBreak: "break-word",
739
- "&:hover": {
740
- textDecoration: "underline"
741
- }
742
- });
743
- var AnnotisedMessage = ({ message, length }) => {
744
- if (!message) {
745
- return /* @__PURE__ */ React6.createElement(Fragment, null);
746
- }
747
- return /* @__PURE__ */ React6.createElement(Fragment, null, message.trim().split(/(\s)/).map(
748
- (part) => URL_REGEX.test(part) ? /* @__PURE__ */ React6.createElement(Link, { href: part, key: part, target: "_blank", rel: "noopener noreferrer" }, part.slice(0, length)) : part.slice(0, length)
749
- ));
750
- };
751
- var getMessageType = ({ roles, receiver }) => {
752
- if (roles && roles.length > 0) {
753
- return "role";
754
- }
755
- return receiver ? "private" : "";
756
- };
757
- var SenderName = styled(Text, {
758
- overflow: "hidden",
759
- textOverflow: "ellipsis",
760
- whiteSpace: "nowrap",
761
- width: "100%",
762
- minWidth: 0,
763
- color: "$on_surface_high",
764
- fontWeight: "$semiBold"
765
- });
766
- var ChatMessage = React6.memo(
767
- ({ index, style = {}, message }) => {
768
- var _a, _b, _c;
769
- const { elements } = useRoomLayoutConferencingScreen();
770
- const rowRef = useRef(null);
771
- const isMobile = useMedia2(config.media.md);
772
- const isPrivateChatEnabled = !!((_a = elements == null ? void 0 : elements.chat) == null ? void 0 : _a.private_chat_enabled);
773
- const isOverlay = ((_b = elements == null ? void 0 : elements.chat) == null ? void 0 : _b.is_overlay) && isMobile;
774
- const localPeerId = useHMSStore4(selectLocalPeerID);
775
- const [selectedRole, setRoleSelector] = useSetSubscribedChatSelector(CHAT_SELECTOR.ROLE);
776
- const [selectedPeer, setPeerSelector] = useSetSubscribedChatSelector(CHAT_SELECTOR.PEER);
777
- const messageType = getMessageType({
778
- roles: message.recipientRoles,
779
- receiver: message.recipientPeer
780
- });
781
- const [openSheet, setOpenSheetBare] = useState4(false);
782
- const showPinAction = !!((_c = elements == null ? void 0 : elements.chat) == null ? void 0 : _c.allow_pinning_messages);
783
- const showReply = message.sender !== selectedPeer.id && message.sender !== localPeerId && isPrivateChatEnabled;
784
- useLayoutEffect(() => {
785
- if (rowRef.current) {
786
- setRowHeight(index, message.id, rowRef.current.clientHeight);
787
- }
788
- }, [index, message.id]);
789
- const setOpenSheet = (value, e) => {
790
- e == null ? void 0 : e.stopPropagation();
791
- setOpenSheetBare(value);
792
- };
793
- return /* @__PURE__ */ React6.createElement(
794
- Box,
795
- {
796
- css: {
797
- mb: "$5",
798
- pr: "$10",
799
- mt: "$4",
800
- "&:not(:hover} .chat_actions": { display: "none" },
801
- "&:hover .chat_actions": { display: "flex", opacity: 1 }
802
- },
803
- style
804
- },
805
- /* @__PURE__ */ React6.createElement(
806
- Flex,
807
- {
808
- ref: rowRef,
809
- align: "center",
810
- css: {
811
- flexWrap: "wrap",
812
- position: "relative",
813
- // Theme independent color, token should not be used for transparent chat
814
- background: getMessageBackgroundColor(messageType, selectedPeer.id, selectedRole, !!isOverlay),
815
- r: "$1",
816
- p: "$4",
817
- userSelect: "none",
818
- "@md": {
819
- cursor: "pointer"
820
- },
821
- "&:hover": {
822
- background: "linear-gradient(277deg, $surface_default 0%, $surface_dim 60.87%)"
823
- }
824
- },
825
- "data-testid": "chat_msg",
826
- onClick: (e) => {
827
- if (isMobile) {
828
- setOpenSheet(true, e);
829
- }
830
- }
831
- },
832
- /* @__PURE__ */ React6.createElement(PinnedBy, { messageId: message.id, index, rowRef }),
833
- /* @__PURE__ */ React6.createElement(
834
- Text,
835
- {
836
- css: {
837
- color: isOverlay ? "#FFF" : "$on_surface_high",
838
- fontWeight: "$semiBold",
839
- display: "flex",
840
- alignItems: "center",
841
- alignSelf: "stretch",
842
- width: "100%"
843
- },
844
- as: "div"
845
- },
846
- /* @__PURE__ */ React6.createElement(
847
- Flex,
848
- {
849
- align: "baseline",
850
- css: {
851
- flexWrap: "nowrap",
852
- maxWidth: "calc(100% - 10ch)",
853
- textOverflow: "ellipsis",
854
- whiteSpace: "nowrap"
855
- }
856
- },
857
- message.senderName === "You" || !message.senderName ? /* @__PURE__ */ React6.createElement(
858
- SenderName,
859
- {
860
- as: "span",
861
- variant: "sub2",
862
- css: { color: isOverlay ? "#FFF" : "$on_surface_high", fontWeight: "$semiBold" }
863
- },
864
- message.senderName || "Anonymous"
865
- ) : /* @__PURE__ */ React6.createElement(Tooltip, { title: message.senderName, side: "top", align: "start", boxCss: { zIndex: 50 } }, /* @__PURE__ */ React6.createElement(
866
- SenderName,
867
- {
868
- as: "span",
869
- variant: "sub2",
870
- css: { color: isOverlay ? "#FFF" : "$on_surface_high", fontWeight: "$semiBold" }
871
- },
872
- message.sender === localPeerId ? `${message.senderName} (You)` : message.senderName
873
- )),
874
- /* @__PURE__ */ React6.createElement(
875
- MessageType,
876
- {
877
- hasCurrentUserSent: message.sender === localPeerId,
878
- receiver: message.recipientPeer,
879
- roles: message.recipientRoles
880
- }
881
- )
882
- ),
883
- !isOverlay ? /* @__PURE__ */ React6.createElement(
884
- Text,
885
- {
886
- as: "span",
887
- variant: "caption",
888
- css: {
889
- color: "$on_surface_medium",
890
- flexShrink: 0,
891
- position: "absolute",
892
- right: 0,
893
- zIndex: 1,
894
- mr: "$4",
895
- p: "$2"
896
- }
897
- },
898
- formatTime(message.time)
899
- ) : null,
900
- /* @__PURE__ */ React6.createElement(
901
- ChatActions,
902
- {
903
- showPinAction,
904
- message,
905
- sentByLocalPeer: message.sender === localPeerId,
906
- onReply: () => {
907
- setRoleSelector("");
908
- setPeerSelector({ id: message.sender, name: message.senderName });
909
- },
910
- onReplyGroup: () => {
911
- if (message.senderRole) {
912
- setRoleSelector(message.senderRole);
913
- setPeerSelector({});
914
- }
915
- },
916
- showReply,
917
- isMobile,
918
- openSheet,
919
- setOpenSheet
920
- }
921
- )
922
- ),
923
- /* @__PURE__ */ React6.createElement(
924
- Text,
925
- {
926
- variant: "sm",
927
- css: {
928
- w: "100%",
929
- mt: "$2",
930
- wordBreak: "break-word",
931
- whiteSpace: "pre-wrap",
932
- userSelect: "all",
933
- color: isOverlay ? "#FFF" : "$on_surface_high"
934
- },
935
- onClick: (e) => {
936
- setOpenSheet(true, e);
937
- }
938
- },
939
- /* @__PURE__ */ React6.createElement(AnnotisedMessage, { message: message.message })
940
- )
941
- )
942
- );
943
- }
944
- );
945
- var MessageWrapper = React6.memo(
946
- ({ index, style, data }) => {
947
- return /* @__PURE__ */ React6.createElement(ChatMessage, { style, index, key: data[index].id, message: data[index] });
948
- }
949
- );
950
- var VirtualizedChatMessages = React6.forwardRef(({ messages, scrollToBottom }, listRef) => {
951
- const hmsActions = useHMSActions5();
952
- const itemKey = useCallback5((index, data) => {
953
- return data[index].id;
954
- }, []);
955
- useEffect3(() => {
956
- requestAnimationFrame(() => scrollToBottom(1));
957
- }, [scrollToBottom]);
958
- return /* @__PURE__ */ React6.createElement(
959
- Box,
960
- {
961
- css: {
962
- mr: "-$10",
963
- h: "100%"
964
- }
965
- },
966
- /* @__PURE__ */ React6.createElement(
967
- AutoSizer,
968
- {
969
- style: {
970
- width: "90%"
971
- }
972
- },
973
- ({ height, width }) => /* @__PURE__ */ React6.createElement(
974
- VariableSizeList,
975
- {
976
- ref: (node) => {
977
- if (node) {
978
- listRef.current = node;
979
- listInstance = node;
980
- }
981
- },
982
- itemCount: messages.length,
983
- itemSize: getRowHeight,
984
- itemData: messages,
985
- width,
986
- height,
987
- style: {
988
- overflowX: "hidden"
989
- },
990
- itemKey,
991
- onItemsRendered: ({ visibleStartIndex, visibleStopIndex }) => {
992
- for (let i = visibleStartIndex; i <= visibleStopIndex; i++) {
993
- if (!messages[i].read) {
994
- hmsActions.setMessageRead(true, messages[i].id);
995
- }
996
- }
997
- }
998
- },
999
- MessageWrapper
1000
- )
1001
- )
1002
- );
1003
- });
1004
- var ChatBody = React6.forwardRef(
1005
- ({ scrollToBottom }, listRef) => {
1006
- const messages = useHMSStore4(selectHMSMessages);
1007
- const blacklistedMessageIDs = useHMSStore4(selectSessionStore4("chatMessageBlacklist" /* CHAT_MESSAGE_BLACKLIST */));
1008
- const filteredMessages = useMemo(() => {
1009
- const blacklistedMessageIDSet = new Set(blacklistedMessageIDs || []);
1010
- return (messages == null ? void 0 : messages.filter((message) => message.type === "chat" && !blacklistedMessageIDSet.has(message.id))) || [];
1011
- }, [blacklistedMessageIDs, messages]);
1012
- const vanillaStore = useHMSVanillaStore3();
1013
- const rerenderOnFirstMount = useRef(false);
1014
- useEffect3(() => {
1015
- const unsubscribe = vanillaStore.subscribe(() => {
1016
- if (!listRef.current) {
1017
- return;
1018
- }
1019
- const outerElement = listRef.current._outerRef;
1020
- if (outerElement && outerElement.clientHeight + outerElement.scrollTop + outerElement.offsetTop >= outerElement.scrollHeight) {
1021
- requestAnimationFrame(() => scrollToBottom(1));
1022
- }
1023
- }, selectUnreadHMSMessagesCount);
1024
- return unsubscribe;
1025
- }, [vanillaStore, listRef, scrollToBottom]);
1026
- useEffect3(() => {
1027
- if (filteredMessages.length > 0 && (listRef == null ? void 0 : listRef.current) && !rerenderOnFirstMount.current) {
1028
- rerenderOnFirstMount.current = true;
1029
- listRef.current.resetAfterIndex(0);
1030
- }
1031
- }, [listRef, filteredMessages]);
1032
- return filteredMessages.length === 0 ? /* @__PURE__ */ React6.createElement(EmptyChat, null) : /* @__PURE__ */ React6.createElement(VirtualizedChatMessages, { messages: filteredMessages, ref: listRef, scrollToBottom });
1033
- }
1034
- );
1035
- var PinnedBy = ({
1036
- messageId,
1037
- index,
1038
- rowRef
1039
- }) => {
1040
- const pinnedBy = usePinnedBy(messageId);
1041
- const localPeerName = useHMSStore4(selectLocalPeerName2);
1042
- useLayoutEffect(() => {
1043
- if (rowRef == null ? void 0 : rowRef.current) {
1044
- if (pinnedBy) {
1045
- rowRef.current.style.background = "linear-gradient(277deg, var(--hms-ui-colors-surface_default) 0%, var(--hms-ui-colors-surface_dim) 60.87%)";
1046
- } else {
1047
- rowRef.current.style.background = "";
1048
- }
1049
- setRowHeight(index, messageId, rowRef == null ? void 0 : rowRef.current.clientHeight);
1050
- }
1051
- }, [index, messageId, pinnedBy, rowRef]);
1052
- if (!pinnedBy) {
1053
- return null;
1054
- }
1055
- return /* @__PURE__ */ React6.createElement(Flex, { align: "center", css: { gap: "$2", mb: "$2", color: "$on_surface_low" } }, /* @__PURE__ */ React6.createElement(SolidPinIcon, { height: 12, width: 12 }), /* @__PURE__ */ React6.createElement(Text, { variant: "xs", css: { color: "inherit" } }, "Pinned by ", localPeerName === pinnedBy ? "you" : pinnedBy));
1056
- };
1057
-
1058
- // src/Prebuilt/components/PIP/PIPChat.tsx
1059
- var PIPChat = () => {
1060
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
1061
- const messages = useHMSStore5(selectHMSMessages2);
1062
- const localPeerID = useHMSStore5(selectLocalPeerID2);
1063
- const count = useHMSStore5(selectUnreadHMSMessagesCount2);
1064
- const [unreadMessageCount, setUnreadMessageCount] = useState5(0);
1065
- const getSenderName = useCallback6(
1066
- (senderName, senderID) => {
1067
- const slicedName = senderName.length > 10 ? senderName.slice(0, 10) + "..." : senderName;
1068
- return slicedName + (senderID === localPeerID ? " (You)" : "");
1069
- },
1070
- [localPeerID]
1071
- );
1072
- useEffect4(() => {
1073
- const timeoutId = setTimeout(() => {
1074
- setUnreadMessageCount(count);
1075
- }, 100);
1076
- return () => clearTimeout(timeoutId);
1077
- }, [count]);
1078
- const blacklistedMessageIDs = useHMSStore5(selectSessionStore5("chatMessageBlacklist" /* CHAT_MESSAGE_BLACKLIST */));
1079
- const filteredMessages = useMemo2(() => {
1080
- const blacklistedMessageIDSet = new Set(blacklistedMessageIDs || []);
1081
- return (messages == null ? void 0 : messages.filter((message) => message.type === "chat" && !blacklistedMessageIDSet.has(message.id))) || [];
1082
- }, [blacklistedMessageIDs, messages]);
1083
- const { enabled: isChatEnabled = true, updatedBy: chatStateUpdatedBy = "" } = useHMSStore5(selectSessionStore5("chatState" /* CHAT_STATE */)) || {};
1084
- const isLocalPeerBlacklisted = useIsPeerBlacklisted({ local: true });
1085
- const { elements } = useRoomLayoutConferencingScreen();
1086
- const message_placeholder = ((_a = elements == null ? void 0 : elements.chat) == null ? void 0 : _a.message_placeholder) || "Send a message";
1087
- const canSendChatMessages = !!((_b = elements == null ? void 0 : elements.chat) == null ? void 0 : _b.public_chat_enabled) || !!((_d = (_c = elements == null ? void 0 : elements.chat) == null ? void 0 : _c.roles_whitelist) == null ? void 0 : _d.length) || !!((_e = elements == null ? void 0 : elements.chat) == null ? void 0 : _e.private_chat_enabled);
1088
- const getChatStatus = useCallback6(() => {
1089
- if (isLocalPeerBlacklisted)
1090
- return "You've been blocked from sending messages";
1091
- if (!isChatEnabled)
1092
- return `Chat has been paused by ${chatStateUpdatedBy.peerId === localPeerID ? "you" : chatStateUpdatedBy == null ? void 0 : chatStateUpdatedBy.userName}`;
1093
- return message_placeholder;
1094
- }, [
1095
- chatStateUpdatedBy.peerId,
1096
- chatStateUpdatedBy == null ? void 0 : chatStateUpdatedBy.userName,
1097
- isChatEnabled,
1098
- isLocalPeerBlacklisted,
1099
- localPeerID,
1100
- message_placeholder
1101
- ]);
1102
- return /* @__PURE__ */ React7.createElement("div", { style: { height: "100%" } }, /* @__PURE__ */ React7.createElement(
1103
- Box,
1104
- {
1105
- id: "chat-container",
1106
- css: {
1107
- bg: "$surface_dim",
1108
- overflowY: "auto",
1109
- // Subtracting height of footer
1110
- h: canSendChatMessages ? "calc(100% - 87px)" : "100%",
1111
- position: "relative"
1112
- }
1113
- },
1114
- unreadMessageCount ? /* @__PURE__ */ React7.createElement(
1115
- Box,
1116
- {
1117
- id: "new-message-notif",
1118
- style: {
1119
- position: "fixed",
1120
- bottom: "76px",
1121
- right: "4px"
1122
- }
1123
- },
1124
- /* @__PURE__ */ React7.createElement(
1125
- Text,
1126
- {
1127
- variant: "xs",
1128
- css: { cursor: "pointer" },
1129
- style: { color: "white", background: "gray", padding: "4px", borderRadius: "4px" }
1130
- },
1131
- unreadMessageCount === 1 ? "New message" : `${unreadMessageCount} new messages`
1132
- )
1133
- ) : "",
1134
- filteredMessages.length === 0 ? /* @__PURE__ */ React7.createElement(
1135
- "div",
1136
- {
1137
- style: {
1138
- display: "flex",
1139
- flexDirection: "column",
1140
- height: "100%",
1141
- width: "100%",
1142
- alignItems: "center",
1143
- justifyContent: "center"
1144
- }
1145
- },
1146
- /* @__PURE__ */ React7.createElement(Text, { variant: "h5", css: { mt: "$8", c: "$on_surface_high" } }, canSendChatMessages ? "Start a conversation" : "No messages yet"),
1147
- canSendChatMessages ? /* @__PURE__ */ React7.createElement(Text, { variant: "sm", style: { maxWidth: "80%", textAlign: "center", marginTop: "4px" } }, "There are no messages here yet. Start a conversation by sending a message.") : ""
1148
- ) : filteredMessages.map((message) => /* @__PURE__ */ React7.createElement(Box, { className: "pip-message", key: message.id, id: message.id, style: { padding: "8px 0.75rem" } }, /* @__PURE__ */ React7.createElement(Flex, { style: { width: "100%", alignItems: "center", justifyContent: "between" } }, /* @__PURE__ */ React7.createElement(
1149
- Text,
1150
- {
1151
- style: { display: "flex", justifyContent: "between", width: "100%", alignItems: "center" },
1152
- css: {
1153
- color: "$on_surface_high",
1154
- fontWeight: "$semiBold"
1155
- }
1156
- },
1157
- /* @__PURE__ */ React7.createElement(Flex, { style: { flexGrow: 1, gap: "2px", alignItems: "center" } }, message.senderName === "You" || !message.senderName ? /* @__PURE__ */ React7.createElement(Text, { as: "span", variant: "sub2", css: { color: "$on_surface_high", fontWeight: "$semiBold" } }, message.senderName || "Anonymous") : /* @__PURE__ */ React7.createElement(Tooltip, { title: message.senderName, side: "top", align: "start" }, /* @__PURE__ */ React7.createElement(Text, { as: "span", variant: "sub2", css: { color: "$on_surface_high", fontWeight: "$semiBold" } }, getSenderName(message.senderName, message == null ? void 0 : message.sender))), /* @__PURE__ */ React7.createElement(
1158
- MessageTitle,
1159
- {
1160
- localPeerID,
1161
- recipientPeer: message.recipientPeer,
1162
- recipientRoles: message.recipientRoles
1163
- }
1164
- )),
1165
- /* @__PURE__ */ React7.createElement(
1166
- Text,
1167
- {
1168
- variant: "xs",
1169
- css: {
1170
- color: "$on_surface_medium",
1171
- flexShrink: 0,
1172
- p: "$2",
1173
- whitespace: "nowrap"
1174
- }
1175
- },
1176
- formatTime(message.time)
1177
- )
1178
- )), /* @__PURE__ */ React7.createElement(
1179
- Text,
1180
- {
1181
- variant: "sm",
1182
- css: {
1183
- w: "100%",
1184
- mt: "$2",
1185
- wordBreak: "break-word",
1186
- whiteSpace: "pre-wrap",
1187
- userSelect: "all",
1188
- color: "$on_surface_high"
1189
- }
1190
- },
1191
- /* @__PURE__ */ React7.createElement(AnnotisedMessage, { message: message.message })
1192
- ))),
1193
- /* @__PURE__ */ React7.createElement("div", { id: "marker", style: { height: filteredMessages.length ? "1px" : 0 } })
1194
- ), canSendChatMessages && /* @__PURE__ */ React7.createElement(Box, { css: { bg: "$surface_dim" } }, /* @__PURE__ */ React7.createElement(Flex, { css: { px: "$4", pb: "3px", gap: "$2", alignItems: "center" } }, /* @__PURE__ */ React7.createElement(Text, { variant: "caption" }, "To:"), /* @__PURE__ */ React7.createElement(Flex, { css: { bg: "$primary_bright", color: "$on_primary_high", r: "$2" } }, /* @__PURE__ */ React7.createElement(
1195
- "select",
1196
- {
1197
- id: "selector",
1198
- style: {
1199
- background: "inherit",
1200
- color: "inherit",
1201
- border: "none",
1202
- outline: "none",
1203
- borderRadius: "4px",
1204
- padding: "0 2px"
1205
- },
1206
- defaultValue: ((_f = elements.chat) == null ? void 0 : _f.public_chat_enabled) ? "Everyone" : (_h = (_g = elements.chat) == null ? void 0 : _g.roles_whitelist) == null ? void 0 : _h[0]
1207
- },
1208
- (_j = (_i = elements.chat) == null ? void 0 : _i.roles_whitelist) == null ? void 0 : _j.map((role) => /* @__PURE__ */ React7.createElement("option", { key: role, value: role }, role)),
1209
- ((_k = elements.chat) == null ? void 0 : _k.public_chat_enabled) ? /* @__PURE__ */ React7.createElement("option", { value: "Everyone" }, "Everyone") : ""
1210
- ))), /* @__PURE__ */ React7.createElement(
1211
- Flex,
1212
- {
1213
- align: "center",
1214
- css: {
1215
- bg: "$surface_default",
1216
- minHeight: "$16",
1217
- width: "100%",
1218
- py: "$6",
1219
- pl: "$4",
1220
- boxSizing: "border-box",
1221
- gap: "$2",
1222
- r: "$2"
1223
- }
1224
- },
1225
- /* @__PURE__ */ React7.createElement(
1226
- TextArea,
1227
- {
1228
- id: "chat-input",
1229
- maxLength: CHAT_MESSAGE_LIMIT,
1230
- disabled: !isChatEnabled || isLocalPeerBlacklisted,
1231
- rows: 1,
1232
- css: {
1233
- w: "100%",
1234
- c: "$on_surface_high",
1235
- p: "0.75rem 0.75rem !important",
1236
- border: "none",
1237
- resize: "none"
1238
- },
1239
- placeholder: getChatStatus(),
1240
- required: true,
1241
- autoComplete: "off",
1242
- "aria-autocomplete": "none"
1243
- }
1244
- ),
1245
- /* @__PURE__ */ React7.createElement(
1246
- IconButton_default,
1247
- {
1248
- id: "send-btn",
1249
- disabled: !isChatEnabled || isLocalPeerBlacklisted,
1250
- title: getChatStatus(),
1251
- css: {
1252
- ml: "auto",
1253
- height: "max-content",
1254
- mr: "$4",
1255
- "&:hover": { c: "$on_surface_medium" }
1256
- },
1257
- "data-testid": "send_msg_btn"
1258
- },
1259
- /* @__PURE__ */ React7.createElement(SendIcon, null)
1260
- )
1261
- )));
1262
- };
1263
- var MessageTitle = ({
1264
- recipientPeer,
1265
- recipientRoles,
1266
- localPeerID
1267
- }) => {
1268
- const peerName = useHMSStore5(selectPeerNameByID3(recipientPeer));
1269
- return /* @__PURE__ */ React7.createElement(React7.Fragment, null, recipientRoles ? /* @__PURE__ */ React7.createElement(Text, { as: "span", variant: "sub2", css: { color: "$on_surface_high", fontWeight: "$semiBold" } }, "to ", recipientRoles, " (Group)") : null, recipientPeer ? /* @__PURE__ */ React7.createElement(Text, { as: "span", variant: "sub2", css: { color: "$on_surface_high", fontWeight: "$semiBold" } }, "to ", recipientPeer === localPeerID ? "You" : peerName, " (DM)") : null);
1270
- };
1271
-
1272
- // src/Prebuilt/components/PIP/PIPChatOption.tsx
1273
- init_define_process_env();
1274
- import React8 from "react";
1275
- import { ExternalLinkIcon } from "@100mslive/react-icons";
1276
- var PIPChatOption = ({ openChat, showPIPChat }) => {
1277
- if (!showPIPChat) {
1278
- return /* @__PURE__ */ React8.createElement(React8.Fragment, null);
1279
- }
1280
- return /* @__PURE__ */ React8.createElement(Dropdown.Item, { onClick: openChat, "data-testid": "pip_chat_btn" }, /* @__PURE__ */ React8.createElement(ExternalLinkIcon, null), /* @__PURE__ */ React8.createElement(Text, { variant: "sm", css: { ml: "$4", color: "$on_surface_high" } }, "Pop out Chat"));
1281
- };
1282
-
1283
- // src/Prebuilt/components/PIP/PIPWindow.tsx
1284
- init_define_process_env();
1285
- import { createPortal } from "react-dom";
1286
- var PIPWindow = ({ pipWindow, children }) => {
1287
- pipWindow.document.body.style.margin = "0";
1288
- pipWindow.document.body.style.overflow = "clip";
1289
- return createPortal(children, pipWindow.document.body);
1290
- };
1291
-
1292
- // src/Prebuilt/components/Settings/StartRecording.jsx
1293
- init_define_process_env();
1294
- import React10, { useState as useState7 } from "react";
1295
- import { selectPermissions as selectPermissions2, useHMSActions as useHMSActions6, useHMSStore as useHMSStore6, useRecordingStreaming } from "@100mslive/react-sdk";
1296
- import { AlertTriangleIcon } from "@100mslive/react-icons";
1297
-
1298
- // src/Prebuilt/components/Streaming/ResolutionInput.jsx
1299
- init_define_process_env();
1300
- import React9, { useCallback as useCallback7, useState as useState6 } from "react";
1301
- import { InfoIcon } from "@100mslive/react-icons";
1302
- var ResolutionInput = ({ onResolutionChange, disabled, tooltipText, css, testId }) => {
1303
- const [resolution, setResolution] = useState6(RTMP_RECORD_DEFAULT_RESOLUTION);
1304
- const resolutionChangeHandler = useCallback7(
1305
- (event) => {
1306
- const { name, value } = event.target;
1307
- let width = name === "resWidth" ? Number(value) : resolution.width;
1308
- let height = name === "resHeight" ? Number(value) : resolution.height;
1309
- if (width === 0) {
1310
- width = null;
1311
- }
1312
- if (height === 0) {
1313
- height = null;
1314
- }
1315
- const newResolution = {
1316
- width: !isNaN(width) ? width : RTMP_RECORD_DEFAULT_RESOLUTION.width,
1317
- height: !isNaN(height) ? height : RTMP_RECORD_DEFAULT_RESOLUTION.height
1318
- };
1319
- setResolution(newResolution);
1320
- },
1321
- [resolution]
1322
- );
1323
- return /* @__PURE__ */ React9.createElement(DialogRow, { breakSm: true, css }, /* @__PURE__ */ React9.createElement(Flex, { gap: 1 }, /* @__PURE__ */ React9.createElement(Label, { css: { mb: "$8" } }, "Resolution"), tooltipText && /* @__PURE__ */ React9.createElement(Tooltip, { title: tooltipText }, /* @__PURE__ */ React9.createElement("div", null, /* @__PURE__ */ React9.createElement(InfoIcon, { color: "#B0C3DB" })))), /* @__PURE__ */ React9.createElement(
1324
- Flex,
1325
- {
1326
- justify: "between",
1327
- css: { width: !tooltipText ? "100%" : "70%", "@sm": { width: "100%" } },
1328
- gap: 2,
1329
- direction: "column"
1330
- },
1331
- /* @__PURE__ */ React9.createElement(Flex, { justify: "between", gap: 2 }, /* @__PURE__ */ React9.createElement(Flex, { direction: "column", css: { width: "50%" } }, /* @__PURE__ */ React9.createElement(Text, { variant: "xs" }, "Width"), /* @__PURE__ */ React9.createElement(
1332
- Input,
1333
- {
1334
- "data-testid": `${testId}_width`,
1335
- css: { width: "100%", mt: "$4" },
1336
- name: "resWidth",
1337
- value: resolution.width,
1338
- onChange: resolutionChangeHandler,
1339
- readOnly: disabled,
1340
- min: RTMP_RECORD_RESOLUTION_MIN,
1341
- max: RTMP_RECORD_RESOLUTION_MAX,
1342
- onBlur: () => onResolutionChange(resolution),
1343
- type: "number"
1344
- }
1345
- )), /* @__PURE__ */ React9.createElement(Flex, { direction: "column", css: { width: "50%" } }, /* @__PURE__ */ React9.createElement(Text, { variant: "xs" }, "Height"), /* @__PURE__ */ React9.createElement(
1346
- Input,
1347
- {
1348
- "data-testid": `${testId}_height`,
1349
- css: { width: "100%", mt: "$4" },
1350
- name: "resHeight",
1351
- value: resolution.height,
1352
- onChange: resolutionChangeHandler,
1353
- onBlur: () => onResolutionChange(resolution),
1354
- readOnly: disabled,
1355
- min: RTMP_RECORD_RESOLUTION_MIN,
1356
- max: RTMP_RECORD_RESOLUTION_MAX,
1357
- type: "number"
1358
- }
1359
- )))
1360
- ));
1361
- };
1362
-
1363
- // src/Prebuilt/components/Settings/StartRecording.jsx
1364
- var StartRecording = ({ open, onOpenChange }) => {
1365
- const permissions = useHMSStore6(selectPermissions2);
1366
- const [resolution, setResolution] = useState7(RTMP_RECORD_DEFAULT_RESOLUTION);
1367
- const { startRecording, recordingStarted } = useRecordingHandler();
1368
- const { isBrowserRecordingOn, isStreamingOn, isHLSRunning } = useRecordingStreaming();
1369
- const hmsActions = useHMSActions6();
1370
- if (!(permissions == null ? void 0 : permissions.browserRecording) || isHLSRunning) {
1371
- return null;
1372
- }
1373
- if (isBrowserRecordingOn) {
1374
- return /* @__PURE__ */ React10.createElement(Dialog.Root, { open, onOpenChange }, /* @__PURE__ */ React10.createElement(Dialog.Portal, null, /* @__PURE__ */ React10.createElement(
1375
- Dialog.Content,
1376
- {
1377
- css: {
1378
- width: "min(400px,80%)",
1379
- p: "$10",
1380
- bg: "#201617"
1381
- }
1382
- },
1383
- /* @__PURE__ */ React10.createElement(Dialog.Title, null, /* @__PURE__ */ React10.createElement(Flex, { gap: 2, css: { c: "$alert_error_default" } }, /* @__PURE__ */ React10.createElement(AlertTriangleIcon, null), /* @__PURE__ */ React10.createElement(Text, { css: { c: "inherit" }, variant: "h6" }, "End Recording"))),
1384
- /* @__PURE__ */ React10.createElement(Text, { variant: "sm", css: { c: "$on_surface_medium", my: "$8" } }, "Are you sure you want to end recording? You can\u2019t undo this action."),
1385
- /* @__PURE__ */ React10.createElement(Flex, { justify: "end", css: { mt: "$12" } }, /* @__PURE__ */ React10.createElement(Dialog.Close, { asChild: true }, /* @__PURE__ */ React10.createElement(Button, { outlined: true, css: { borderColor: "$secondary_bright", mr: "$4" } }, "Don't end")), /* @__PURE__ */ React10.createElement(
1386
- Button,
1387
- {
1388
- "data-testid": "stop_recording_confirm_mobile",
1389
- variant: "danger",
1390
- icon: true,
1391
- onClick: () => __async(void 0, null, function* () {
1392
- try {
1393
- yield hmsActions.stopRTMPAndRecording();
1394
- } catch (error) {
1395
- ToastManager.addToast({
1396
- title: error.message,
1397
- variant: "error"
1398
- });
1399
- }
1400
- onOpenChange(false);
1401
- })
1402
- },
1403
- "End recording"
1404
- ))
1405
- )));
1406
- }
1407
- return /* @__PURE__ */ React10.createElement(Dialog.Root, { open, onOpenChange }, /* @__PURE__ */ React10.createElement(Dialog.Content, { css: { width: "min(400px,80%)", p: "$10" } }, /* @__PURE__ */ React10.createElement(Dialog.Title, null, /* @__PURE__ */ React10.createElement(Text, { variant: "h6" }, "Start Recording")), /* @__PURE__ */ React10.createElement(
1408
- ResolutionInput,
1409
- {
1410
- testId: "recording_resolution_mobile",
1411
- css: { flexDirection: "column", alignItems: "start" },
1412
- onResolutionChange: setResolution
1413
- }
1414
- ), /* @__PURE__ */ React10.createElement(
1415
- Button,
1416
- {
1417
- "data-testid": "start_recording_confirm_mobile",
1418
- variant: "primary",
1419
- icon: true,
1420
- css: { ml: "auto" },
1421
- type: "submit",
1422
- disabled: recordingStarted || isStreamingOn,
1423
- onClick: () => __async(void 0, null, function* () {
1424
- yield startRecording(resolution);
1425
- onOpenChange(false);
1426
- })
1427
- },
1428
- "Start"
1429
- )));
1430
- };
1431
- var StartRecording_default = StartRecording;
1432
-
1433
- // src/Prebuilt/components/StatsForNerds.jsx
1434
- init_define_process_env();
1435
- import React11, { useEffect as useEffect5, useMemo as useMemo3, useRef as useRef2, useState as useState8 } from "react";
1436
- import { useMedia as useMedia3 } from "react-use";
1437
- import { match, P } from "ts-pattern";
1438
- import {
1439
- selectHMSStats,
1440
- selectLocalPeerID as selectLocalPeerID3,
1441
- selectPeersMap,
1442
- selectTracksMap as selectTracksMap2,
1443
- useHMSActions as useHMSActions7,
1444
- useHMSStatsStore,
1445
- useHMSStore as useHMSStore7
1446
- } from "@100mslive/react-sdk";
1447
- var StatsForNerds = ({ open, onOpenChange }) => {
1448
- var _a, _b;
1449
- const mediaQueryLg = config.media.md;
1450
- const isMobile = useMedia3(mediaQueryLg);
1451
- const tracksWithLabels = useTracksWithLabel();
1452
- const statsOptions = useMemo3(
1453
- () => [{ id: "local-peer", label: "Local Peer Stats" }, ...tracksWithLabels],
1454
- [tracksWithLabels]
1455
- );
1456
- const hmsActions = useHMSActions7();
1457
- const details = hmsActions.getDebugInfo();
1458
- const [selectedStat, setSelectedStat] = useState8(statsOptions[0]);
1459
- const [showStatsOnTiles, setShowStatsOnTiles] = useSetUiSettings(UI_SETTINGS.showStatsOnTiles);
1460
- const [openDropdown, setOpenDropdown] = useState8(false);
1461
- const ref = useRef2();
1462
- const selectionBg = useDropdownSelection();
1463
- useEffect5(() => {
1464
- if (selectedStat.id !== "local-peer" && !tracksWithLabels.find((track) => track.id === selectedStat.id)) {
1465
- setSelectedStat("local-peer");
1466
- }
1467
- }, [tracksWithLabels, selectedStat]);
1468
- return isMobile ? /* @__PURE__ */ React11.createElement(Sheet.Root, { open, onOpenChange }, /* @__PURE__ */ React11.createElement(
1469
- Sheet.Content,
1470
- {
1471
- css: {
1472
- bg: "$surface_dim",
1473
- overflowY: "auto",
1474
- px: "$4"
1475
- }
1476
- },
1477
- /* @__PURE__ */ React11.createElement(Sheet.Title, { css: { py: "$10", px: "$8", alignItems: "center" } }, /* @__PURE__ */ React11.createElement(Flex, { justify: "between" }, /* @__PURE__ */ React11.createElement(Flex, { align: "center", css: { mb: "$1" } }, /* @__PURE__ */ React11.createElement(Text, { variant: "h6", inline: true }, "Stats For Nerds")), /* @__PURE__ */ React11.createElement(Dialog.DefaultClose, { "data-testid": "stats_dialog_close_icon" }))),
1478
- /* @__PURE__ */ React11.createElement(HorizontalDivider, null),
1479
- /* @__PURE__ */ React11.createElement(Flex, { justify: "start", gap: 4, css: { m: "$10 0" } }, /* @__PURE__ */ React11.createElement(Switch, { checked: showStatsOnTiles, onCheckedChange: setShowStatsOnTiles }), /* @__PURE__ */ React11.createElement(Text, { variant: "body2", css: { fontWeight: "$semiBold" } }, "Show Stats on Tiles")),
1480
- /* @__PURE__ */ React11.createElement(
1481
- Flex,
1482
- {
1483
- direction: "column",
1484
- css: {
1485
- mb: "$12",
1486
- position: "relative",
1487
- minWidth: 0
1488
- }
1489
- },
1490
- /* @__PURE__ */ React11.createElement(Label, { variant: "body2", css: { c: "$on_surface_high" } }, "Stats For"),
1491
- /* @__PURE__ */ React11.createElement(Dropdown.Root, { "data-testid": "dialog_select_Stats For", open: openDropdown, onOpenChange: setOpenDropdown }, /* @__PURE__ */ React11.createElement(
1492
- DialogDropdownTrigger,
1493
- {
1494
- title: selectedStat.label || "Select Stats",
1495
- css: { mt: "$4" },
1496
- titleCSS: { mx: 0 },
1497
- open: openDropdown,
1498
- ref
1499
- }
1500
- ), /* @__PURE__ */ React11.createElement(Dropdown.Portal, null, /* @__PURE__ */ React11.createElement(Dropdown.Content, { align: "start", sideOffset: 8, css: { w: (_a = ref.current) == null ? void 0 : _a.clientWidth, zIndex: 1e3 } }, statsOptions.map((option) => {
1501
- const isSelected = option.id === selectedStat.id && option.layer === selectedStat.layer;
1502
- return /* @__PURE__ */ React11.createElement(
1503
- Dropdown.Item,
1504
- {
1505
- key: `${option.id}-${option.layer || ""}`,
1506
- onClick: () => {
1507
- setSelectedStat(option);
1508
- },
1509
- css: {
1510
- px: "$9",
1511
- bg: isSelected ? selectionBg : void 0,
1512
- c: isSelected ? "$on_primary_high" : "$on_primary_high"
1513
- }
1514
- },
1515
- option.label
1516
- );
1517
- }))))
1518
- ),
1519
- selectedStat.id === "local-peer" ? /* @__PURE__ */ React11.createElement(LocalPeerStats, null) : /* @__PURE__ */ React11.createElement(TrackStats, { trackID: selectedStat.id, layer: selectedStat.layer, local: selectedStat.local })
1520
- )) : /* @__PURE__ */ React11.createElement(Dialog.Root, { open, onOpenChange }, /* @__PURE__ */ React11.createElement(Dialog.Portal, null, /* @__PURE__ */ React11.createElement(Dialog.Overlay, null), /* @__PURE__ */ React11.createElement(
1521
- Dialog.Content,
1522
- {
1523
- css: {
1524
- width: "min(500px, 95%)",
1525
- height: "min(656px, 90%)",
1526
- overflowY: "auto"
1527
- }
1528
- },
1529
- /* @__PURE__ */ React11.createElement(Dialog.Title, { css: { p: "$4 0" } }, /* @__PURE__ */ React11.createElement(Flex, { justify: "between" }, /* @__PURE__ */ React11.createElement(Flex, { align: "center", css: { mb: "$1" } }, /* @__PURE__ */ React11.createElement(Text, { variant: "h6", inline: true }, "Stats For Nerds")), /* @__PURE__ */ React11.createElement(Dialog.DefaultClose, { "data-testid": "stats_dialog_close_icon" }))),
1530
- /* @__PURE__ */ React11.createElement(HorizontalDivider, { css: { mt: "0.8rem" } }),
1531
- /* @__PURE__ */ React11.createElement(Flex, { justify: "start", gap: 4, css: { m: "$10 0" } }, /* @__PURE__ */ React11.createElement(Switch, { checked: showStatsOnTiles, onCheckedChange: setShowStatsOnTiles }), /* @__PURE__ */ React11.createElement(Text, { variant: "body2", css: { fontWeight: "$semiBold" } }, "Show Stats on Tiles")),
1532
- /* @__PURE__ */ React11.createElement(
1533
- Flex,
1534
- {
1535
- direction: "column",
1536
- css: {
1537
- mb: "$12",
1538
- position: "relative",
1539
- minWidth: 0
1540
- }
1541
- },
1542
- /* @__PURE__ */ React11.createElement(Label, { variant: "body2", css: { c: "$on_surface_high" } }, "Stats For"),
1543
- /* @__PURE__ */ React11.createElement(Dropdown.Root, { "data-testid": "dialog_select_Stats For", open: openDropdown, onOpenChange: setOpenDropdown }, /* @__PURE__ */ React11.createElement(
1544
- DialogDropdownTrigger,
1545
- {
1546
- title: selectedStat.label || "Select Stats",
1547
- css: { mt: "$4" },
1548
- titleCSS: { mx: 0 },
1549
- open: openDropdown,
1550
- ref
1551
- }
1552
- ), /* @__PURE__ */ React11.createElement(Dropdown.Portal, null, /* @__PURE__ */ React11.createElement(Dropdown.Content, { align: "start", sideOffset: 8, css: { w: (_b = ref.current) == null ? void 0 : _b.clientWidth, zIndex: 1e3 } }, statsOptions.map((option) => {
1553
- const isSelected = option.id === selectedStat.id && option.layer === selectedStat.layer;
1554
- return /* @__PURE__ */ React11.createElement(
1555
- Dropdown.Item,
1556
- {
1557
- key: `${option.id}-${option.layer || ""}`,
1558
- onClick: () => {
1559
- setSelectedStat(option);
1560
- },
1561
- css: {
1562
- px: "$9",
1563
- bg: isSelected ? selectionBg : void 0,
1564
- c: isSelected ? "$on_primary_high" : "$on_primary_high"
1565
- }
1566
- },
1567
- option.label
1568
- );
1569
- }))))
1570
- ),
1571
- selectedStat.id === "local-peer" ? /* @__PURE__ */ React11.createElement(LocalPeerStats, null) : /* @__PURE__ */ React11.createElement(TrackStats, { trackID: selectedStat.id, layer: selectedStat.layer, local: selectedStat.local }),
1572
- /* @__PURE__ */ React11.createElement(Flex, { justify: "start", gap: 4, css: { m: "$10 0", w: "100%" } }, /* @__PURE__ */ React11.createElement(DebugInfo, { details }))
1573
- )));
1574
- };
1575
- var useTracksWithLabel = () => {
1576
- const tracksMap = useHMSStore7(selectTracksMap2);
1577
- const peersMap = useHMSStore7(selectPeersMap);
1578
- const localPeerID = useHMSStore7(selectLocalPeerID3);
1579
- const tracksWithLabels = useMemo3(
1580
- () => Object.values(tracksMap).reduce((res, track) => {
1581
- var _a, _b;
1582
- const peerName = (_a = peersMap[track.peerId]) == null ? void 0 : _a.name;
1583
- const isLocalTrack = track.peerId === localPeerID;
1584
- if (isLocalTrack && ((_b = track.layerDefinitions) == null ? void 0 : _b.length)) {
1585
- res = res.concat(
1586
- track.layerDefinitions.map(({ layer }) => {
1587
- return {
1588
- id: track.id,
1589
- layer,
1590
- local: true,
1591
- label: `${peerName} ${track.source} ${track.type} - ${layer}`
1592
- };
1593
- })
1594
- );
1595
- return res;
1596
- }
1597
- res.push({
1598
- id: track.id,
1599
- local: isLocalTrack,
1600
- label: `${peerName} ${track.source} ${track.type}`
1601
- });
1602
- return res;
1603
- }, []),
1604
- [tracksMap, peersMap, localPeerID]
1605
- );
1606
- return tracksWithLabels;
1607
- };
1608
- var LocalPeerStats = () => {
1609
- var _a, _b, _c, _d, _e, _f, _g, _h, _i;
1610
- const stats = useHMSStatsStore(selectHMSStats.localPeerStats);
1611
- if (!stats) {
1612
- return null;
1613
- }
1614
- return /* @__PURE__ */ React11.createElement(Flex, { css: { flexWrap: "wrap", gap: "$10" } }, /* @__PURE__ */ React11.createElement(StatsRow, { label: "Packets Lost", value: (_a = stats.subscribe) == null ? void 0 : _a.packetsLost }), /* @__PURE__ */ React11.createElement(StatsRow, { label: "Jitter", value: (_b = stats.subscribe) == null ? void 0 : _b.jitter }), /* @__PURE__ */ React11.createElement(StatsRow, { label: "Publish Bitrate", value: formatBytes((_c = stats.publish) == null ? void 0 : _c.bitrate, "b/s") }), /* @__PURE__ */ React11.createElement(StatsRow, { label: "Subscribe Bitrate", value: formatBytes((_d = stats.subscribe) == null ? void 0 : _d.bitrate, "b/s") }), /* @__PURE__ */ React11.createElement(
1615
- StatsRow,
1616
- {
1617
- label: "Available Outgoing Bitrate",
1618
- value: formatBytes((_e = stats.publish) == null ? void 0 : _e.availableOutgoingBitrate, "b/s")
1619
- }
1620
- ), /* @__PURE__ */ React11.createElement(StatsRow, { label: "Total Bytes Sent", value: formatBytes((_f = stats.publish) == null ? void 0 : _f.bytesSent) }), /* @__PURE__ */ React11.createElement(StatsRow, { label: "Total Bytes Received", value: formatBytes((_g = stats.subscribe) == null ? void 0 : _g.bytesReceived) }), /* @__PURE__ */ React11.createElement(
1621
- StatsRow,
1622
- {
1623
- label: "Round Trip Time",
1624
- value: `${(((((_h = stats.publish) == null ? void 0 : _h.currentRoundTripTime) || 0) + (((_i = stats.subscribe) == null ? void 0 : _i.currentRoundTripTime) || 0)) / 2).toFixed(3) * 1e3} ms`
1625
- }
1626
- ));
1627
- };
1628
- var TrackStats = ({ trackID, layer, local }) => {
1629
- var _a;
1630
- const selector = match({ trackID, layer, local }).with(
1631
- {
1632
- layer: P.when((layer2) => !!layer2)
1633
- },
1634
- () => selectHMSStats.localVideoTrackStatsByLayer(layer)(trackID)
1635
- ).with({ local: P.when((local2) => !!local2) }, () => selectHMSStats.localAudioTrackStatsByID(trackID)).otherwise(() => selectHMSStats.trackStatsByID(trackID));
1636
- const stats = useHMSStatsStore(selector);
1637
- if (!stats) {
1638
- return null;
1639
- }
1640
- const inbound = stats.type.includes("inbound");
1641
- return /* @__PURE__ */ React11.createElement(Flex, { css: { flexWrap: "wrap", gap: "$10" } }, /* @__PURE__ */ React11.createElement(StatsRow, { label: "Type", value: stats.type + " " + stats.kind }), /* @__PURE__ */ React11.createElement(StatsRow, { label: "Bitrate", value: formatBytes(stats.bitrate, "b/s") }), /* @__PURE__ */ React11.createElement(StatsRow, { label: "Packets Lost", value: stats.packetsLost }), /* @__PURE__ */ React11.createElement(StatsRow, { label: "Jitter", value: (_a = stats.jitter) == null ? void 0 : _a.toFixed(3) }), /* @__PURE__ */ React11.createElement(
1642
- StatsRow,
1643
- {
1644
- label: inbound ? "Bytes Received" : "Bytes Sent",
1645
- value: formatBytes(inbound ? stats.bytesReceived : stats.bytesSent)
1646
- }
1647
- ), stats.kind === "video" && /* @__PURE__ */ React11.createElement(React11.Fragment, null, /* @__PURE__ */ React11.createElement(StatsRow, { label: "Framerate", value: stats.framesPerSecond }), !inbound && /* @__PURE__ */ React11.createElement(StatsRow, { label: "Quality Limitation Reason", value: stats.qualityLimitationReason })), /* @__PURE__ */ React11.createElement(
1648
- StatsRow,
1649
- {
1650
- label: "Round Trip Time",
1651
- value: stats.roundTripTime ? `${(stats.roundTripTime * 1e3).toFixed(3)} ms` : "-"
1652
- }
1653
- ));
1654
- };
1655
- var DebugInfo = ({ details }) => {
1656
- var _a;
1657
- return /* @__PURE__ */ React11.createElement(Accordion.Root, { type: "single", collapsible: true, css: { w: "100%" } }, /* @__PURE__ */ React11.createElement(Accordion.Item, { value: "Debug Info" }, /* @__PURE__ */ React11.createElement(Accordion.Header, null, /* @__PURE__ */ React11.createElement(Label, { variant: "body2", css: { c: "$on_surface_high" } }, "Debug Info")), /* @__PURE__ */ React11.createElement(Accordion.Content, null, /* @__PURE__ */ React11.createElement(Flex, { css: { flexWrap: "wrap", mt: "$10", gap: "$10" } }, /* @__PURE__ */ React11.createElement(StatsRow, { css: { w: "100%" }, label: "Websocket URL", value: details == null ? void 0 : details.websocketURL }), /* @__PURE__ */ React11.createElement(StatsRow, { css: { w: "100%" }, label: "Init Endpoint", value: details == null ? void 0 : details.initEndpoint }), /* @__PURE__ */ React11.createElement(StatsRow, { css: { w: "100%" }, label: "Enabled flags", value: (_a = details == null ? void 0 : details.enabledFlags) == null ? void 0 : _a.join(", ") })))));
1658
- };
1659
- var StatsRow = React11.memo(({ label, value, css }) => /* @__PURE__ */ React11.createElement(Box, { css: __spreadValues({ bg: "$surface_bright", w: "calc(50% - $6)", p: "$8", r: "$3" }, css) }, /* @__PURE__ */ React11.createElement(
1660
- Text,
1661
- {
1662
- variant: "overline",
1663
- css: {
1664
- fontWeight: "$semiBold",
1665
- color: "$on_surface_medium",
1666
- textTransform: "uppercase"
1667
- }
1668
- },
1669
- label
1670
- ), /* @__PURE__ */ React11.createElement(Text, { variant: "sub1", css: { fontWeight: "$semiBold", color: "$on_surface_high" } }, value || "-")));
1671
-
1672
- // src/Prebuilt/components/MoreSettings/BulkRoleChangeModal.jsx
1673
- init_define_process_env();
1674
- import React12, { useCallback as useCallback8, useRef as useRef3, useState as useState9 } from "react";
1675
- import { useHMSActions as useHMSActions8 } from "@100mslive/react-sdk";
1676
- import { AlertTriangleIcon as AlertTriangleIcon2, ChangeRoleIcon, CheckIcon } from "@100mslive/react-icons";
1677
- var BulkRoleChangeModal = ({ onOpenChange }) => {
1678
- var _a, _b;
1679
- const roles = useFilteredRoles();
1680
- const hmsActions = useHMSActions8();
1681
- const ref = useRef3(null);
1682
- const roleRef = useRef3(null);
1683
- const [selectedBulkRole, setBulkRole] = useState9([]);
1684
- const [selectedRole, setRole] = useState9("");
1685
- const [bulkRoleDialog, setBulkRoleDialog] = useState9(false);
1686
- const [roleDialog, setRoleDialog] = useState9(false);
1687
- const [errorMessage, setErrorMessage] = useState9("");
1688
- const [isSubmiting, setIsSubmiting] = useState9(false);
1689
- const changeBulkRole = useCallback8(() => __async(void 0, null, function* () {
1690
- if (selectedBulkRole.length > 0 && selectedRole) {
1691
- try {
1692
- setIsSubmiting(true);
1693
- yield hmsActions.changeRoleOfPeersWithRoles(selectedBulkRole, selectedRole);
1694
- setIsSubmiting(false);
1695
- setErrorMessage("");
1696
- onOpenChange(false);
1697
- } catch (err) {
1698
- setErrorMessage((err == null ? void 0 : err.message) ? err == null ? void 0 : err.message : "Unknown error");
1699
- setIsSubmiting(false);
1700
- }
1701
- }
1702
- }), [selectedBulkRole, selectedRole, hmsActions, onOpenChange]);
1703
- return /* @__PURE__ */ React12.createElement(Dialog.Root, { defaultOpen: true, onOpenChange }, /* @__PURE__ */ React12.createElement(DialogContent, { title: "Bulk Role Change", Icon: ChangeRoleIcon }, /* @__PURE__ */ React12.createElement(DialogRow, null, /* @__PURE__ */ React12.createElement(Text, null, "For Roles: "), /* @__PURE__ */ React12.createElement(
1704
- Dropdown.Root,
1705
- {
1706
- open: bulkRoleDialog,
1707
- onOpenChange: (value) => {
1708
- if (value) {
1709
- setBulkRoleDialog(value);
1710
- }
1711
- },
1712
- modal: false
1713
- },
1714
- /* @__PURE__ */ React12.createElement(
1715
- DialogDropdownTrigger,
1716
- {
1717
- ref,
1718
- title: selectedBulkRole.length === 0 ? "Select Multiple Roles" : selectedBulkRole.toString(),
1719
- css: {
1720
- w: "70%",
1721
- p: "$8"
1722
- },
1723
- open: bulkRoleDialog
1724
- }
1725
- ),
1726
- /* @__PURE__ */ React12.createElement(
1727
- Dropdown.Content,
1728
- {
1729
- css: { w: (_a = ref.current) == null ? void 0 : _a.clientWidth, zIndex: 1e3 },
1730
- onInteractOutside: () => {
1731
- if (bulkRoleDialog) {
1732
- setBulkRoleDialog(false);
1733
- }
1734
- }
1735
- },
1736
- roles && roles.map((role) => {
1737
- return /* @__PURE__ */ React12.createElement(
1738
- Dropdown.CheckboxItem,
1739
- {
1740
- key: role,
1741
- checked: selectedBulkRole.includes(role),
1742
- onCheckedChange: (value) => {
1743
- setBulkRole((selection) => {
1744
- return value ? [...selection, role] : selection.filter((selectedRole2) => selectedRole2 !== role);
1745
- });
1746
- setErrorMessage("");
1747
- }
1748
- },
1749
- /* @__PURE__ */ React12.createElement(Checkbox.Root, { css: { margin: "$2" }, checked: selectedBulkRole.includes(role) }, /* @__PURE__ */ React12.createElement(Checkbox.Indicator, null, /* @__PURE__ */ React12.createElement(CheckIcon, { width: 16, height: 16 }))),
1750
- role
1751
- );
1752
- })
1753
- )
1754
- )), /* @__PURE__ */ React12.createElement(DialogRow, null, /* @__PURE__ */ React12.createElement(Text, null, "To Role: "), /* @__PURE__ */ React12.createElement(Dropdown.Root, { open: roleDialog, onOpenChange: (value) => setRoleDialog(value) }, /* @__PURE__ */ React12.createElement(
1755
- DialogDropdownTrigger,
1756
- {
1757
- ref: roleRef,
1758
- title: selectedRole || "Select Role",
1759
- css: {
1760
- w: "70%",
1761
- p: "$8"
1762
- },
1763
- open: roleDialog
1764
- }
1765
- ), /* @__PURE__ */ React12.createElement(Dropdown.Content, { css: { w: (_b = roleRef.current) == null ? void 0 : _b.clientWidth, zIndex: 1e3 } }, roles && roles.map((role) => {
1766
- return /* @__PURE__ */ React12.createElement(
1767
- Dropdown.Item,
1768
- {
1769
- key: role,
1770
- onSelect: () => {
1771
- setRole(role);
1772
- setErrorMessage("");
1773
- }
1774
- },
1775
- role
1776
- );
1777
- })))), /* @__PURE__ */ React12.createElement(DialogRow, null, errorMessage && /* @__PURE__ */ React12.createElement(Flex, { gap: 2, css: { c: "$alert_error_default", w: "70%", ml: "auto" } }, /* @__PURE__ */ React12.createElement(AlertTriangleIcon2, null), /* @__PURE__ */ React12.createElement(Text, { css: { c: "inherit" } }, errorMessage))), /* @__PURE__ */ React12.createElement(DialogRow, { justify: "end" }, /* @__PURE__ */ React12.createElement(Button, { variant: "primary", onClick: changeBulkRole, disabled: !(selectedRole && selectedBulkRole.length > 0) }, isSubmiting && /* @__PURE__ */ React12.createElement(Loading, { css: { color: "$on_primary_medium" } }), "Apply"))));
1778
- };
1779
-
1780
- // src/Prebuilt/components/MoreSettings/CaptionModal.tsx
1781
- init_define_process_env();
1782
- import React14 from "react";
1783
- import { useMedia as useMedia4 } from "react-use";
1784
-
1785
- // src/Prebuilt/components/MoreSettings/CaptionContent.tsx
1786
- init_define_process_env();
1787
- import React13 from "react";
1788
- import { HMSTranscriptionMode, selectIsTranscriptionEnabled, useHMSActions as useHMSActions9, useHMSStore as useHMSStore8 } from "@100mslive/react-sdk";
1789
- import { AlertTriangleIcon as AlertTriangleIcon3, CrossIcon as CrossIcon2 } from "@100mslive/react-icons";
1790
- var CaptionContent = ({ isMobile, onExit }) => {
1791
- const DURATION = 2e3;
1792
- const actions = useHMSActions9();
1793
- const isTranscriptionEnabled = useHMSStore8(selectIsTranscriptionEnabled);
1794
- const [toastId, setToastId] = useSetAppDataByKey(CAPTION_TOAST.captionToast);
1795
- const [isCaptionEnabled, setIsCaptionEnabled] = useSetIsCaptionEnabled();
1796
- return /* @__PURE__ */ React13.createElement(React13.Fragment, null, /* @__PURE__ */ React13.createElement(
1797
- Text,
1798
- {
1799
- variant: isMobile ? "md" : "lg",
1800
- css: {
1801
- color: "$on_surface_high",
1802
- fontWeight: "$semiBold",
1803
- display: "flex",
1804
- "@md": { px: "$8" }
1805
- }
1806
- },
1807
- isTranscriptionEnabled ? "Disable" : "Enable",
1808
- " Closed Caption (CC) for this session?",
1809
- /* @__PURE__ */ React13.createElement(
1810
- Box,
1811
- {
1812
- css: { color: "inherit", ml: "auto", "&:hover": { color: "$on_surface_medium", cursor: "pointer" } },
1813
- onClick: onExit
1814
- },
1815
- /* @__PURE__ */ React13.createElement(CrossIcon2, null)
1816
- )
1817
- ), !isMobile ? /* @__PURE__ */ React13.createElement(Text, { variant: "sm", css: { color: "$on_surface_medium", mt: "$4", "@md": { px: "$8" } } }, "This will ", isTranscriptionEnabled ? "disable" : "enable", " Closed Captions for everyone in this room. You can\xA0", isTranscriptionEnabled ? "enable" : "disable", " it later.") : null, /* @__PURE__ */ React13.createElement(
1818
- Flex,
1819
- {
1820
- justify: "between",
1821
- align: "center",
1822
- css: {
1823
- width: "100%",
1824
- gap: "$md",
1825
- mt: "$10",
1826
- "@md": { px: "$4" }
1827
- }
1828
- },
1829
- isMobile ? null : /* @__PURE__ */ React13.createElement(Button, { variant: "standard", css: { w: "100%" }, outlined: true, onClick: onExit }, "Cancel"),
1830
- /* @__PURE__ */ React13.createElement(
1831
- Flex,
1832
- {
1833
- direction: "column",
1834
- justify: "between",
1835
- align: "center",
1836
- css: {
1837
- width: "100%",
1838
- "@md": { px: "$4" }
1839
- }
1840
- },
1841
- isMobile && isTranscriptionEnabled ? /* @__PURE__ */ React13.createElement(
1842
- Button,
1843
- {
1844
- variant: "standard",
1845
- css: { w: "100%", mb: "$4" },
1846
- outlined: true,
1847
- onClick: () => {
1848
- setIsCaptionEnabled(!isCaptionEnabled);
1849
- onExit();
1850
- }
1851
- },
1852
- isCaptionEnabled ? "Hide For Me" : "Show For Me"
1853
- ) : null,
1854
- /* @__PURE__ */ React13.createElement(
1855
- Button,
1856
- {
1857
- variant: isTranscriptionEnabled ? "danger" : "primary",
1858
- css: { width: "100%" },
1859
- "data-testid": "popup_change_btn",
1860
- onClick: () => __async(void 0, null, function* () {
1861
- try {
1862
- if (isTranscriptionEnabled) {
1863
- yield actions.stopTranscription({
1864
- mode: HMSTranscriptionMode.CAPTION
1865
- });
1866
- setIsCaptionEnabled(false);
1867
- const id2 = ToastManager.replaceToast(toastId, {
1868
- title: `Disabling Closed Caption for everyone.`,
1869
- variant: "standard",
1870
- duration: DURATION,
1871
- icon: /* @__PURE__ */ React13.createElement(Loading, { color: "currentColor" })
1872
- });
1873
- setToastId(id2);
1874
- onExit();
1875
- return;
1876
- }
1877
- yield actions.startTranscription({
1878
- mode: HMSTranscriptionMode.CAPTION
1879
- });
1880
- const id = ToastManager.replaceToast(toastId, {
1881
- title: `Enabling Closed Caption for everyone.`,
1882
- variant: "standard",
1883
- duration: DURATION,
1884
- icon: /* @__PURE__ */ React13.createElement(Loading, { color: "currentColor" })
1885
- });
1886
- setToastId(id);
1887
- } catch (err) {
1888
- const id = ToastManager.replaceToast(toastId, {
1889
- title: `Failed to ${isTranscriptionEnabled ? "disable" : "enable"} closed caption`,
1890
- variant: "error",
1891
- icon: /* @__PURE__ */ React13.createElement(AlertTriangleIcon3, { style: { marginRight: "0.5rem" } })
1892
- });
1893
- setToastId(id);
1894
- } finally {
1895
- setIsCaptionEnabled(true);
1896
- }
1897
- onExit();
1898
- })
1899
- },
1900
- isTranscriptionEnabled ? "Disable" : "Enable",
1901
- " for Everyone"
1902
- )
1903
- )
1904
- ), isMobile && /* @__PURE__ */ React13.createElement(Text, { variant: "sm", css: { color: "$on_surface_medium", pb: "$4", mb: "$8", "@md": { px: "$8", mt: "$4" } } }, "This will ", isTranscriptionEnabled ? "disable" : "enable", " Closed Captions for everyone in this room. You can\xA0", isTranscriptionEnabled ? "enable" : "disable", " it later."));
1905
- };
1906
-
1907
- // src/Prebuilt/components/MoreSettings/CaptionModal.tsx
1908
- var CaptionModal = ({ onOpenChange }) => {
1909
- const isMobile = useMedia4(config.media.md);
1910
- const props = {
1911
- isMobile,
1912
- onExit: () => {
1913
- onOpenChange(false);
1914
- }
1915
- };
1916
- if (isMobile) {
1917
- return /* @__PURE__ */ React14.createElement(Sheet.Root, { defaultOpen: true, onOpenChange }, /* @__PURE__ */ React14.createElement(Sheet.Content, { css: { bg: "$surface_dim", p: "$8 0" } }, /* @__PURE__ */ React14.createElement(CaptionContent, __spreadValues({}, props))));
1918
- }
1919
- return /* @__PURE__ */ React14.createElement(Dialog.Root, { defaultOpen: true, onOpenChange }, /* @__PURE__ */ React14.createElement(Dialog.Portal, null, /* @__PURE__ */ React14.createElement(Dialog.Overlay, null), /* @__PURE__ */ React14.createElement(Dialog.Content, { css: { bg: "$surface_dim", width: "min(400px,80%)", p: "$10" } }, /* @__PURE__ */ React14.createElement(CaptionContent, __spreadValues({}, props)))));
1920
- };
1921
-
1922
- // src/Prebuilt/components/MoreSettings/FullScreenItem.tsx
1923
- init_define_process_env();
1924
- import React15 from "react";
1925
- import { ExpandIcon } from "@100mslive/react-icons";
1926
-
1927
- // src/Prebuilt/components/hooks/useFullscreen.ts
1928
- init_define_process_env();
1929
- import { useCallback as useCallback9, useEffect as useEffect6, useState as useState10 } from "react";
1930
- import screenfull from "screenfull";
1931
- var useFullscreen = () => {
1932
- const [isFullScreenEnabled, setIsFullScreenEnabled] = useState10(screenfull.isFullscreen);
1933
- const toggle = useCallback9(() => __async(void 0, null, function* () {
1934
- if (!screenfull.isEnabled) {
1935
- ToastManager.addToast({ title: "Fullscreen feature not supported" });
1936
- return;
1937
- }
1938
- try {
1939
- const container = document.querySelector(DEFAULT_PORTAL_CONTAINER);
1940
- if (isFullScreenEnabled) {
1941
- yield screenfull.exit();
1942
- } else if (container) {
1943
- yield screenfull.request(container);
1944
- }
1945
- } catch (err) {
1946
- ToastManager.addToast({ title: err.message });
1947
- }
1948
- }), [isFullScreenEnabled]);
1949
- useEffect6(() => {
1950
- const onChange = () => {
1951
- setIsFullScreenEnabled(screenfull.isFullscreen);
1952
- };
1953
- if (screenfull.isEnabled) {
1954
- screenfull.on("change", onChange);
1955
- }
1956
- return () => {
1957
- if (screenfull.isEnabled) {
1958
- screenfull.off("change", onChange);
1959
- }
1960
- };
1961
- }, []);
1962
- return {
1963
- allowed: screenfull.isEnabled,
1964
- isFullscreen: isFullScreenEnabled,
1965
- toggleFullscreen: toggle
1966
- };
1967
- };
1968
-
1969
- // src/Prebuilt/components/MoreSettings/FullScreenItem.tsx
1970
- var FullScreenItem = () => {
1971
- const { allowed, isFullscreen, toggleFullscreen } = useFullscreen();
1972
- if (!allowed) {
1973
- return null;
1974
- }
1975
- return /* @__PURE__ */ React15.createElement(
1976
- Dropdown.Item,
1977
- {
1978
- onClick: () => {
1979
- toggleFullscreen();
1980
- },
1981
- "data-testid": "full_screen_btn"
1982
- },
1983
- /* @__PURE__ */ React15.createElement(ExpandIcon, null),
1984
- /* @__PURE__ */ React15.createElement(Text, { variant: "sm", css: { ml: "$4" } }, isFullscreen ? "Exit " : "Go ", "Fullscreen")
1985
- );
1986
- };
1987
-
1988
- // src/Prebuilt/components/MoreSettings/MuteAllModal.tsx
1989
- init_define_process_env();
1990
- import React17, { useCallback as useCallback10, useState as useState11 } from "react";
1991
- import {
1992
- selectAvailableRoleNames,
1993
- useHMSActions as useHMSActions10,
1994
- useHMSStore as useHMSStore10
1995
- } from "@100mslive/react-sdk";
1996
- import { MicOffIcon } from "@100mslive/react-icons";
1997
-
1998
- // src/Prebuilt/components/MoreSettings/MuteAllContent.tsx
1999
- init_define_process_env();
2000
- import React16 from "react";
2001
- import { selectPermissions as selectPermissions3, useHMSStore as useHMSStore9 } from "@100mslive/react-sdk";
2002
- var MuteAllContent = (props) => {
2003
- const roles = props.roles || [];
2004
- const permissions = useHMSStore9(selectPermissions3);
2005
- return /* @__PURE__ */ React16.createElement(React16.Fragment, null, /* @__PURE__ */ React16.createElement(
2006
- DialogSelect,
2007
- {
2008
- title: "Role",
2009
- options: [{ label: "All Roles", value: "" }, ...roles.map((role) => ({ label: role, value: role }))],
2010
- selected: props.selectedRole,
2011
- keyField: "value",
2012
- labelField: "label",
2013
- onChange: props.setRole
2014
- }
2015
- ), /* @__PURE__ */ React16.createElement(
2016
- DialogSelect,
2017
- {
2018
- title: "Track type",
2019
- options: trackTypeOptions,
2020
- selected: props.trackType,
2021
- onChange: props.setTrackType,
2022
- keyField: "value",
2023
- labelField: "label"
2024
- }
2025
- ), /* @__PURE__ */ React16.createElement(
2026
- DialogSelect,
2027
- {
2028
- title: "Track source",
2029
- options: trackSourceOptions,
2030
- selected: props.selectedSource,
2031
- onChange: props.setSource,
2032
- keyField: "value",
2033
- labelField: "label"
2034
- }
2035
- ), /* @__PURE__ */ React16.createElement(DialogRow, null, /* @__PURE__ */ React16.createElement(Text, { variant: "md" }, "Track status"), /* @__PURE__ */ React16.createElement(RadioGroup.Root, { value: String(props.enabled), onValueChange: (value) => props.setEnabled(value === "true") }, (permissions == null ? void 0 : permissions.mute) && /* @__PURE__ */ React16.createElement(Flex, { align: "center", css: { mr: "$8" } }, /* @__PURE__ */ React16.createElement(RadioGroup.Item, { value: "false", id: "trackDisableRadio", css: { mr: "$4" } }, /* @__PURE__ */ React16.createElement(RadioGroup.Indicator, null)), /* @__PURE__ */ React16.createElement(Label, { htmlFor: "trackDisableRadio" }, "Mute")), (permissions == null ? void 0 : permissions.unmute) && /* @__PURE__ */ React16.createElement(Flex, { align: "center", css: { cursor: "pointer" } }, /* @__PURE__ */ React16.createElement(RadioGroup.Item, { value: "true", id: "trackEnableRadio", css: { mr: "$4" } }, /* @__PURE__ */ React16.createElement(RadioGroup.Indicator, null)), /* @__PURE__ */ React16.createElement(Label, { htmlFor: "trackEnableRadio" }, "Request Unmute")))), /* @__PURE__ */ React16.createElement(DialogRow, { justify: "end" }, /* @__PURE__ */ React16.createElement(Button, { variant: "primary", onClick: props.muteAll, css: { w: (props == null ? void 0 : props.isMobile) ? "100%" : "" } }, "Apply")));
2036
- };
2037
-
2038
- // src/Prebuilt/components/MoreSettings/MuteAllModal.tsx
2039
- var MuteAllModal = ({
2040
- onOpenChange,
2041
- isMobile = false
2042
- }) => {
2043
- const roles = useHMSStore10(selectAvailableRoleNames);
2044
- const hmsActions = useHMSActions10();
2045
- const [enabled, setEnabled] = useState11(false);
2046
- const [trackType, setTrackType] = useState11();
2047
- const [selectedRole, setRole] = useState11();
2048
- const [selectedSource, setSource] = useState11();
2049
- const muteAll = useCallback10(() => __async(void 0, null, function* () {
2050
- yield hmsActions.setRemoteTracksEnabled({
2051
- enabled,
2052
- type: trackType,
2053
- source: selectedSource,
2054
- roles: selectedRole ? [selectedRole] : void 0
2055
- });
2056
- onOpenChange(false);
2057
- }), [selectedRole, enabled, trackType, selectedSource, hmsActions, onOpenChange]);
2058
- const props = {
2059
- muteAll,
2060
- roles,
2061
- enabled,
2062
- setEnabled,
2063
- trackType,
2064
- setTrackType,
2065
- selectedRole,
2066
- setRole,
2067
- selectedSource,
2068
- setSource,
2069
- isMobile
2070
- };
2071
- if (isMobile) {
2072
- return /* @__PURE__ */ React17.createElement(Sheet.Root, { defaultOpen: true, onOpenChange }, /* @__PURE__ */ React17.createElement(Sheet.Content, { css: { px: "$10" } }, /* @__PURE__ */ React17.createElement(MuteAllContent, __spreadValues({}, props))));
2073
- }
2074
- return /* @__PURE__ */ React17.createElement(Dialog.Root, { defaultOpen: true, onOpenChange }, /* @__PURE__ */ React17.createElement(DialogContent, { title: "Mute/Unmute Remote Tracks", Icon: MicOffIcon }, /* @__PURE__ */ React17.createElement(MuteAllContent, __spreadValues({}, props))));
2075
- };
2076
-
2077
- // src/Prebuilt/components/PIP/usePIPChat.tsx
2078
- init_define_process_env();
2079
- import { useEffect as useEffect7 } from "react";
2080
- import { useHMSActions as useHMSActions11 } from "@100mslive/react-sdk";
2081
- var usePIPChat = () => {
2082
- const hmsActions = useHMSActions11();
2083
- const { isSupported, requestPipWindow, pipWindow, closePipWindow } = usePIPWindow();
2084
- useEffect7(() => {
2085
- if (document && pipWindow) {
2086
- const style = document.createElement("style");
2087
- style.id = "stitches";
2088
- style.textContent = getCssText();
2089
- pipWindow.document.head.appendChild(style);
2090
- }
2091
- }, [pipWindow]);
2092
- useEffect7(() => {
2093
- if (pipWindow) {
2094
- const chatContainer = pipWindow.document.getElementById("chat-container");
2095
- const selector = pipWindow.document.getElementById("selector");
2096
- const sendBtn = pipWindow.document.getElementById("send-btn");
2097
- const pipChatInput = pipWindow.document.getElementById("chat-input");
2098
- const marker = pipWindow.document.getElementById("marker");
2099
- marker == null ? void 0 : marker.scrollIntoView({ block: "end" });
2100
- const observer = new IntersectionObserver(
2101
- (entries) => {
2102
- entries.forEach((entry) => {
2103
- if (entry.isIntersecting && entry.target.id) {
2104
- hmsActions.setMessageRead(true, entry.target.id);
2105
- }
2106
- });
2107
- },
2108
- {
2109
- root: chatContainer,
2110
- threshold: 0.8
2111
- }
2112
- );
2113
- const mutationObserver = new MutationObserver((mutations) => {
2114
- mutations.forEach((mutation) => {
2115
- if (mutation.addedNodes.length > 0) {
2116
- const newMessages = mutation.addedNodes;
2117
- newMessages.forEach((message) => {
2118
- const messageId = message == null ? void 0 : message.id;
2119
- if (messageId === "new-message-notif") {
2120
- message.addEventListener(
2121
- "click",
2122
- () => setTimeout(() => marker == null ? void 0 : marker.scrollIntoView({ block: "end", behavior: "smooth" }), 0)
2123
- );
2124
- } else if (messageId)
2125
- observer.observe(message);
2126
- });
2127
- }
2128
- });
2129
- });
2130
- mutationObserver.observe(chatContainer, {
2131
- childList: true
2132
- });
2133
- const sendMessage = () => __async(void 0, null, function* () {
2134
- const selection = (selector == null ? void 0 : selector.value) || "Everyone";
2135
- if (selection === "Everyone") {
2136
- yield hmsActions.sendBroadcastMessage(pipChatInput.value.trim());
2137
- } else {
2138
- yield hmsActions.sendGroupMessage(pipChatInput.value.trim(), [selection]);
2139
- }
2140
- pipChatInput.value = "";
2141
- setTimeout(() => marker == null ? void 0 : marker.scrollIntoView({ block: "end", behavior: "smooth" }), 0);
2142
- });
2143
- if (sendBtn && hmsActions && pipChatInput) {
2144
- const pipMessages = pipWindow.document.getElementsByClassName("pip-message");
2145
- [...pipMessages].forEach((message) => {
2146
- if (message.id) {
2147
- hmsActions.setMessageRead(true, message.id);
2148
- }
2149
- });
2150
- const sendOnEnter = (e) => {
2151
- if (e.key === "Enter")
2152
- sendMessage();
2153
- };
2154
- sendBtn.addEventListener("click", sendMessage);
2155
- pipChatInput.addEventListener("keypress", sendOnEnter);
2156
- return () => {
2157
- sendBtn.removeEventListener("click", sendMessage);
2158
- pipChatInput.removeEventListener("keypress", sendOnEnter);
2159
- mutationObserver.disconnect();
2160
- observer.disconnect();
2161
- };
2162
- }
2163
- }
2164
- }, [pipWindow, hmsActions]);
2165
- useEffect7(() => {
2166
- return () => {
2167
- pipWindow && closePipWindow();
2168
- };
2169
- }, [closePipWindow, pipWindow]);
2170
- return { isSupported, requestPipWindow, pipWindow };
2171
- };
2172
-
2173
- // src/Prebuilt/components/MoreSettings/SplitComponents/DesktopOptions.tsx
2174
- var MODALS = {
2175
- CHANGE_NAME: "changeName",
2176
- SELF_ROLE_CHANGE: "selfRoleChange",
2177
- MORE_SETTINGS: "moreSettings",
2178
- START_RECORDING: "startRecording",
2179
- DEVICE_SETTINGS: "deviceSettings",
2180
- STATS_FOR_NERDS: "statsForNerds",
2181
- BULK_ROLE_CHANGE: "bulkRoleChange",
2182
- MUTE_ALL: "muteAll",
2183
- EMBED_URL: "embedUrl",
2184
- CAPTION: "caption"
2185
- };
2186
- var DesktopOptions = ({
2187
- elements,
2188
- screenType
2189
- }) => {
2190
- const localPeerId = useHMSStore11(selectLocalPeerID4);
2191
- const hmsActions = useHMSActions12();
2192
- const enablHlsStats = useHMSStore11(selectAppData(APP_DATA.hlsStats));
2193
- const [openModals, setOpenModals] = useState12(/* @__PURE__ */ new Set());
2194
- const { isBRBOn, toggleBRB } = useMyMetadata();
2195
- const isPipOn = PictureInPicture.isOn();
2196
- const isBRBEnabled = !!(elements == null ? void 0 : elements.brb);
2197
- const isTranscriptionAllowed = useHMSStore11(selectIsTranscriptionAllowedByMode(HMSTranscriptionMode2.CAPTION));
2198
- const isTranscriptionEnabled = useHMSStore11(selectIsTranscriptionEnabled2);
2199
- const { isSupported, pipWindow, requestPipWindow } = usePIPChat();
2200
- const isChatOpen = useIsSidepaneTypeOpen(SIDE_PANE_OPTIONS.CHAT);
2201
- const toggleChat = useSidepaneToggle(SIDE_PANE_OPTIONS.CHAT);
2202
- const showPipChatOption = !!(elements == null ? void 0 : elements.chat) && isSupported && !pipWindow;
2203
- useDropdownList({ open: openModals.size > 0, name: "MoreSettings" });
2204
- const updateState = (modalName, value) => {
2205
- setOpenModals((modals) => {
2206
- const copy = new Set(modals);
2207
- if (value) {
2208
- copy.clear();
2209
- copy.add(modalName);
2210
- } else {
2211
- copy.delete(modalName);
2212
- }
2213
- return copy;
2214
- });
2215
- };
2216
- return /* @__PURE__ */ React18.createElement(Fragment2, null, isSupported && pipWindow ? /* @__PURE__ */ React18.createElement(PIPWindow, { pipWindow }, /* @__PURE__ */ React18.createElement(PIPChat, null)) : null, /* @__PURE__ */ React18.createElement(
2217
- Dropdown.Root,
2218
- {
2219
- open: openModals.has(MODALS.MORE_SETTINGS),
2220
- onOpenChange: (value) => updateState(MODALS.MORE_SETTINGS, value),
2221
- modal: false
2222
- },
2223
- /* @__PURE__ */ React18.createElement(Tooltip, { title: "More options" }, /* @__PURE__ */ React18.createElement(Dropdown.Trigger, { asChild: true, "data-testid": "more_settings_btn" }, /* @__PURE__ */ React18.createElement(IconButton_default, null, /* @__PURE__ */ React18.createElement(HamburgerMenuIcon, null)))),
2224
- /* @__PURE__ */ React18.createElement(
2225
- Dropdown.Content,
2226
- {
2227
- sideOffset: 5,
2228
- align: "end",
2229
- css: {
2230
- py: "$0",
2231
- maxHeight: "unset",
2232
- "@md": { w: "$64" },
2233
- "div[role='separator']:first-child": {
2234
- display: "none"
2235
- }
2236
- }
2237
- },
2238
- isBRBEnabled && screenType !== "hls_live_streaming" ? /* @__PURE__ */ React18.createElement(Dropdown.Item, { onClick: toggleBRB, "data-testid": "brb_btn" }, /* @__PURE__ */ React18.createElement(BrbIcon, null), /* @__PURE__ */ React18.createElement(Text, { variant: "sm", css: { ml: "$4", color: "$on_surface_high" } }, "Be Right Back"), /* @__PURE__ */ React18.createElement(Flex, { justify: "end", css: { color: "$on_surface_high", flexGrow: "1" } }, isBRBOn ? /* @__PURE__ */ React18.createElement(CheckIcon2, null) : null)) : null,
2239
- isTranscriptionAllowed ? /* @__PURE__ */ React18.createElement(
2240
- Dropdown.Item,
2241
- {
2242
- "data-testid": "closed_caption_admin",
2243
- onClick: () => {
2244
- updateState(MODALS.CAPTION, true);
2245
- }
2246
- },
2247
- /* @__PURE__ */ React18.createElement(OpenCaptionIcon, null),
2248
- /* @__PURE__ */ React18.createElement(Flex, { direction: "column", css: { flexGrow: "1" } }, /* @__PURE__ */ React18.createElement(Text, { variant: "sm", css: { ml: "$4", color: "$on_surface_high" } }, "Closed Captions"), /* @__PURE__ */ React18.createElement(Text, { variant: "caption", css: { ml: "$4", color: "$on_surface_medium" } }, isTranscriptionEnabled ? "Enabled" : "Disabled")),
2249
- /* @__PURE__ */ React18.createElement(Switch, { id: "closed_caption_start_stop", checked: isTranscriptionEnabled, disabled: false })
2250
- ) : null,
2251
- screenType !== "hls_live_streaming" ? /* @__PURE__ */ React18.createElement(Dropdown.Item, { css: { p: 0, "&:empty": { display: "none" } } }, /* @__PURE__ */ React18.createElement(
2252
- PIP,
2253
- {
2254
- content: /* @__PURE__ */ React18.createElement(Flex, { css: { w: "100%", h: "100%", p: "$8" } }, /* @__PURE__ */ React18.createElement(PipIcon2, null), /* @__PURE__ */ React18.createElement(Text, { variant: "sm", css: { ml: "$4" } }, isPipOn ? "Disable" : "Enable", " Picture-in-Picture"))
2255
- }
2256
- )) : null,
2257
- /* @__PURE__ */ React18.createElement(
2258
- PIPChatOption,
2259
- {
2260
- showPIPChat: showPipChatOption,
2261
- openChat: () => __async(void 0, null, function* () {
2262
- isChatOpen && toggleChat();
2263
- yield requestPipWindow(350, 500);
2264
- })
2265
- }
2266
- ),
2267
- /* @__PURE__ */ React18.createElement(FullScreenItem, null),
2268
- /* @__PURE__ */ React18.createElement(Dropdown.ItemSeparator, { css: { mx: 0 } }),
2269
- /* @__PURE__ */ React18.createElement(Dropdown.Item, { onClick: () => updateState(MODALS.DEVICE_SETTINGS, true), "data-testid": "device_settings_btn" }, /* @__PURE__ */ React18.createElement(SettingsIcon, null), /* @__PURE__ */ React18.createElement(Text, { variant: "sm", css: { ml: "$4" } }, "Settings")),
2270
- match2({ screenType, isSupported: HMSHLSPlayer.isSupported() }).with({ screenType: "hls_live_streaming", isSupported: false }, () => null).with({ screenType: "hls_live_streaming", isSupported: true }, () => {
2271
- return /* @__PURE__ */ React18.createElement(
2272
- Dropdown.Item,
2273
- {
2274
- onClick: () => hmsActions.setAppData(APP_DATA.hlsStats, !enablHlsStats),
2275
- "data-testid": "hls_stats"
2276
- },
2277
- /* @__PURE__ */ React18.createElement(
2278
- Checkbox.Root,
2279
- {
2280
- css: { margin: "$2" },
2281
- checked: enablHlsStats,
2282
- onCheckedChange: () => hmsActions.setAppData(APP_DATA.hlsStats, !enablHlsStats)
2283
- },
2284
- /* @__PURE__ */ React18.createElement(Checkbox.Indicator, null, /* @__PURE__ */ React18.createElement(CheckIcon2, { width: 16, height: 16 }))
2285
- ),
2286
- /* @__PURE__ */ React18.createElement(Flex, { justify: "between", css: { width: "100%" } }, /* @__PURE__ */ React18.createElement(Text, { variant: "sm", css: { ml: "$4" } }, "Show HLS Stats"), /* @__PURE__ */ React18.createElement(Text, { variant: "sm", css: { ml: "$4" } }, `${isMacOS ? "\u2318" : "ctrl"} + ]`))
2287
- );
2288
- }).otherwise(() => /* @__PURE__ */ React18.createElement(
2289
- Dropdown.Item,
2290
- {
2291
- onClick: () => updateState(MODALS.STATS_FOR_NERDS, true),
2292
- "data-testid": "stats_for_nerds_btn"
2293
- },
2294
- /* @__PURE__ */ React18.createElement(InfoIcon2, null),
2295
- /* @__PURE__ */ React18.createElement(Text, { variant: "sm", css: { ml: "$4" } }, "Stats for Nerds")
2296
- ))
2297
- )
2298
- ), openModals.has(MODALS.BULK_ROLE_CHANGE) && /* @__PURE__ */ React18.createElement(BulkRoleChangeModal, { onOpenChange: (value) => updateState(MODALS.BULK_ROLE_CHANGE, value) }), openModals.has(MODALS.MUTE_ALL) && /* @__PURE__ */ React18.createElement(MuteAllModal, { onOpenChange: (value) => updateState(MODALS.MUTE_ALL, value) }), openModals.has(MODALS.START_RECORDING) && /* @__PURE__ */ React18.createElement(StartRecording_default, { open: true, onOpenChange: (value) => updateState(MODALS.START_RECORDING, value) }), openModals.has(MODALS.DEVICE_SETTINGS) && /* @__PURE__ */ React18.createElement(
2299
- SettingsModal_default,
2300
- {
2301
- open: true,
2302
- onOpenChange: (value) => updateState(MODALS.DEVICE_SETTINGS, value),
2303
- screenType
2304
- }
2305
- ), openModals.has(MODALS.STATS_FOR_NERDS) && /* @__PURE__ */ React18.createElement(StatsForNerds, { open: true, onOpenChange: (value) => updateState(MODALS.STATS_FOR_NERDS, value) }), openModals.has(MODALS.SELF_ROLE_CHANGE) && /* @__PURE__ */ React18.createElement(
2306
- RoleChangeModal,
2307
- {
2308
- peerId: localPeerId,
2309
- onOpenChange: (value) => updateState(MODALS.SELF_ROLE_CHANGE, value)
2310
- }
2311
- ), openModals.has(MODALS.CAPTION) && /* @__PURE__ */ React18.createElement(CaptionModal, { onOpenChange: (value) => updateState(MODALS.CAPTION, value) }));
2312
- };
2313
-
2314
- // src/Prebuilt/components/MoreSettings/SplitComponents/MwebOptions.tsx
2315
- init_define_process_env();
2316
- import React19, { useRef as useRef4, useState as useState14 } from "react";
2317
- import { useClickAway } from "react-use";
2318
- import { match as match3 } from "ts-pattern";
2319
- import {
2320
- HMSTranscriptionMode as HMSTranscriptionMode3,
2321
- selectIsConnectedToRoom,
2322
- selectIsLocalVideoEnabled as selectIsLocalVideoEnabled2,
2323
- selectIsTranscriptionAllowedByMode as selectIsTranscriptionAllowedByMode2,
2324
- selectIsTranscriptionEnabled as selectIsTranscriptionEnabled3,
2325
- selectPeerCount,
2326
- selectPermissions as selectPermissions4,
2327
- useHMSActions as useHMSActions13,
2328
- useHMSStore as useHMSStore13,
2329
- useRecordingStreaming as useRecordingStreaming2
2330
- } from "@100mslive/react-sdk";
2331
- import {
2332
- BrbIcon as BrbIcon2,
2333
- ClosedCaptionIcon,
2334
- CrossIcon as CrossIcon3,
2335
- EmojiIcon,
2336
- HamburgerMenuIcon as HamburgerMenuIcon2,
2337
- HandIcon,
2338
- HandRaiseSlashedIcon,
2339
- InfoIcon as InfoIcon3,
2340
- OpenCaptionIcon as OpenCaptionIcon2,
2341
- PeopleIcon,
2342
- QuizActiveIcon,
2343
- QuizIcon,
2344
- RecordIcon,
2345
- SettingsIcon as SettingsIcon2,
2346
- VirtualBackgroundIcon
2347
- } from "@100mslive/react-icons";
2348
-
2349
- // src/Prebuilt/components/hooks/useUnreadPollQuizPresent.tsx
2350
- init_define_process_env();
2351
- import { useEffect as useEffect8, useState as useState13 } from "react";
2352
- import { HMSNotificationTypes, useHMSNotifications, useHMSStore as useHMSStore12 } from "@100mslive/react-sdk";
2353
- var useUnreadPollQuizPresent = () => {
2354
- const localPeerID = useHMSStore12(Ee);
2355
- const notification = useHMSNotifications(HMSNotificationTypes.POLL_STARTED);
2356
- const [unreadPollQuiz, setUnreadPollQuiz] = useState13(false);
2357
- useEffect8(() => {
2358
- if (!notification) {
2359
- return;
2360
- }
2361
- setUnreadPollQuiz(notification.data.startedBy !== localPeerID);
2362
- }, [localPeerID, notification]);
2363
- return { unreadPollQuiz, setUnreadPollQuiz };
2364
- };
2365
-
2366
- // src/Prebuilt/components/MoreSettings/SplitComponents/MwebOptions.tsx
2367
- var MODALS2 = {
2368
- CHANGE_NAME: "changeName",
2369
- SELF_ROLE_CHANGE: "selfRoleChange",
2370
- MORE_SETTINGS: "moreSettings",
2371
- START_RECORDING: "startRecording",
2372
- DEVICE_SETTINGS: "deviceSettings",
2373
- STATS_FOR_NERDS: "statsForNerds",
2374
- BULK_ROLE_CHANGE: "bulkRoleChange",
2375
- MUTE_ALL: "muteAll",
2376
- EMBED_URL: "embedUrl",
2377
- CAPTION: "caption"
2378
- };
2379
- var MwebOptions = ({
2380
- elements,
2381
- screenType
2382
- }) => {
2383
- const hmsActions = useHMSActions13();
2384
- const permissions = useHMSStore13(selectPermissions4);
2385
- const isConnected = useHMSStore13(selectIsConnectedToRoom);
2386
- const { isBrowserRecordingOn, isStreamingOn, isHLSRunning } = useRecordingStreaming2();
2387
- const [openModals, setOpenModals] = useState14(/* @__PURE__ */ new Set());
2388
- const [openOptionsSheet, setOpenOptionsSheet] = useState14(false);
2389
- const [openSettingsSheet, setOpenSettingsSheet] = useState14(false);
2390
- const [openStatsForNerdsSheet, setOpenStatsForNerdsSheet] = useState14(false);
2391
- const [showEmojiCard, setShowEmojiCard] = useState14(false);
2392
- const [showRecordingOn, setShowRecordingOn] = useState14(false);
2393
- const toggleParticipants = useSidepaneToggle(SIDE_PANE_OPTIONS.PARTICIPANTS);
2394
- const { showPolls } = useShowPolls();
2395
- const togglePollView = usePollViewToggle();
2396
- const peerCount = useHMSStore13(selectPeerCount);
2397
- const emojiCardRef = useRef4(null);
2398
- const { isBRBOn, toggleBRB, isHandRaised, toggleHandRaise } = useMyMetadata();
2399
- const { unreadPollQuiz, setUnreadPollQuiz } = useUnreadPollQuizPresent();
2400
- const { title, description } = useRoomLayoutHeader();
2401
- const toggleDetailsSheet = useSheetToggle(SHEET_OPTIONS.ROOM_DETAILS);
2402
- const isMobileHLSStream = useMobileHLSStream();
2403
- const isLandscapeHLSStream = useLandscapeHLSStream();
2404
- const toggleVB = useSidepaneToggle(SIDE_PANE_OPTIONS.VB);
2405
- const isLocalVideoEnabled = useHMSStore13(selectIsLocalVideoEnabled2);
2406
- const { startRecording, isRecordingLoading } = useRecordingHandler();
2407
- const isTranscriptionAllowed = useHMSStore13(selectIsTranscriptionAllowedByMode2(HMSTranscriptionMode3.CAPTION));
2408
- const isTranscriptionEnabled = useHMSStore13(selectIsTranscriptionEnabled3);
2409
- const [isCaptionEnabled] = useSetIsCaptionEnabled();
2410
- useDropdownList({ open: openModals.size > 0 || openOptionsSheet || openSettingsSheet, name: "MoreSettings" });
2411
- const updateState = (modalName, value) => {
2412
- setOpenModals((modals) => {
2413
- const copy = new Set(modals);
2414
- if (value) {
2415
- copy.add(modalName);
2416
- } else {
2417
- copy.delete(modalName);
2418
- }
2419
- return copy;
2420
- });
2421
- };
2422
- useClickAway(emojiCardRef, () => setShowEmojiCard(false));
2423
- return /* @__PURE__ */ React19.createElement(React19.Fragment, null, /* @__PURE__ */ React19.createElement(Sheet.Root, { open: openOptionsSheet, onOpenChange: setOpenOptionsSheet }, /* @__PURE__ */ React19.createElement(Tooltip, { title: "More options" }, /* @__PURE__ */ React19.createElement(Sheet.Trigger, { asChild: true, "data-testid": "more_settings_btn" }, /* @__PURE__ */ React19.createElement(IconButton_default, { css: { bg: isMobileHLSStream || isLandscapeHLSStream ? "$surface_default" : "" } }, /* @__PURE__ */ React19.createElement(HamburgerMenuIcon2, null)))), /* @__PURE__ */ React19.createElement(Sheet.Content, { css: { bg: "$surface_dim", pb: "$14" } }, /* @__PURE__ */ React19.createElement(
2424
- Sheet.Title,
2425
- {
2426
- css: {
2427
- display: "flex",
2428
- color: "$on_surface_high",
2429
- w: "100%",
2430
- justifyContent: "space-between",
2431
- fontSize: "$md",
2432
- mt: "$8",
2433
- px: "$10",
2434
- pb: "$8",
2435
- borderBottom: "1px solid $border_default",
2436
- mb: "$8",
2437
- alignItems: "center"
2438
- }
2439
- },
2440
- "Options",
2441
- /* @__PURE__ */ React19.createElement(Sheet.Close, null, /* @__PURE__ */ React19.createElement(Box, { css: { color: "$on_surface_high" } }, /* @__PURE__ */ React19.createElement(CrossIcon3, null)))
2442
- ), /* @__PURE__ */ React19.createElement(
2443
- Box,
2444
- {
2445
- css: {
2446
- display: "grid",
2447
- gridTemplateColumns: "1fr 1fr 1fr",
2448
- gridTemplateRows: "auto",
2449
- gridColumnGap: "$6",
2450
- gridRowGap: "$8",
2451
- px: "$9"
2452
- }
2453
- },
2454
- (elements == null ? void 0 : elements.participant_list) && /* @__PURE__ */ React19.createElement(
2455
- ActionTile.Root,
2456
- {
2457
- onClick: () => {
2458
- toggleParticipants();
2459
- setOpenOptionsSheet(false);
2460
- }
2461
- },
2462
- /* @__PURE__ */ React19.createElement(ActionTile.Count, null, getFormattedCount(peerCount)),
2463
- /* @__PURE__ */ React19.createElement(PeopleIcon, null),
2464
- /* @__PURE__ */ React19.createElement(ActionTile.Title, null, "Participants")
2465
- ),
2466
- elements.hand_raise ? /* @__PURE__ */ React19.createElement(
2467
- ActionTile.Root,
2468
- {
2469
- active: isHandRaised,
2470
- onClick: () => {
2471
- toggleHandRaise();
2472
- setOpenOptionsSheet(false);
2473
- }
2474
- },
2475
- isHandRaised ? /* @__PURE__ */ React19.createElement(HandRaiseSlashedIcon, null) : /* @__PURE__ */ React19.createElement(HandIcon, null),
2476
- /* @__PURE__ */ React19.createElement(ActionTile.Title, null, isHandRaised ? "Lower" : "Raise", " Hand")
2477
- ) : null,
2478
- /* @__PURE__ */ React19.createElement(NoiseCancellation, { setOpenOptionsSheet, actionTile: true }),
2479
- isTranscriptionAllowed ? /* @__PURE__ */ React19.createElement(
2480
- ActionTile.Root,
2481
- {
2482
- onClick: () => {
2483
- setOpenOptionsSheet(false);
2484
- updateState(MODALS2.CAPTION, true);
2485
- }
2486
- },
2487
- isTranscriptionEnabled && isCaptionEnabled ? /* @__PURE__ */ React19.createElement(ClosedCaptionIcon, null) : /* @__PURE__ */ React19.createElement(OpenCaptionIcon2, null),
2488
- /* @__PURE__ */ React19.createElement(ActionTile.Title, null, "Closed Caption")
2489
- ) : null,
2490
- isLocalVideoEnabled && !!(elements == null ? void 0 : elements.virtual_background) ? /* @__PURE__ */ React19.createElement(
2491
- ActionTile.Root,
2492
- {
2493
- onClick: () => {
2494
- toggleVB();
2495
- setOpenOptionsSheet(false);
2496
- }
2497
- },
2498
- /* @__PURE__ */ React19.createElement(VirtualBackgroundIcon, null),
2499
- /* @__PURE__ */ React19.createElement(ActionTile.Title, null, "Virtual Background")
2500
- ) : null,
2501
- (elements == null ? void 0 : elements.emoji_reactions) && !(isLandscapeHLSStream || isMobileHLSStream) && /* @__PURE__ */ React19.createElement(
2502
- ActionTile.Root,
2503
- {
2504
- onClick: () => {
2505
- setShowEmojiCard(true);
2506
- setOpenOptionsSheet(false);
2507
- }
2508
- },
2509
- /* @__PURE__ */ React19.createElement(EmojiIcon, null),
2510
- /* @__PURE__ */ React19.createElement(ActionTile.Title, null, "Emoji Reactions")
2511
- ),
2512
- showPolls && /* @__PURE__ */ React19.createElement(
2513
- ActionTile.Root,
2514
- {
2515
- onClick: () => {
2516
- togglePollView();
2517
- setOpenOptionsSheet(false);
2518
- setUnreadPollQuiz(false);
2519
- }
2520
- },
2521
- unreadPollQuiz ? /* @__PURE__ */ React19.createElement(QuizActiveIcon, null) : /* @__PURE__ */ React19.createElement(QuizIcon, null),
2522
- /* @__PURE__ */ React19.createElement(ActionTile.Title, null, "Polls and Quizzes")
2523
- ),
2524
- (elements == null ? void 0 : elements.brb) && /* @__PURE__ */ React19.createElement(
2525
- ActionTile.Root,
2526
- {
2527
- active: isBRBOn,
2528
- onClick: () => {
2529
- toggleBRB();
2530
- setOpenOptionsSheet(false);
2531
- }
2532
- },
2533
- /* @__PURE__ */ React19.createElement(BrbIcon2, null),
2534
- /* @__PURE__ */ React19.createElement(ActionTile.Title, null, "Be Right Back")
2535
- ),
2536
- /* @__PURE__ */ React19.createElement(
2537
- ActionTile.Root,
2538
- {
2539
- onClick: () => {
2540
- setOpenSettingsSheet(true);
2541
- setOpenOptionsSheet(false);
2542
- }
2543
- },
2544
- /* @__PURE__ */ React19.createElement(SettingsIcon2, null),
2545
- /* @__PURE__ */ React19.createElement(ActionTile.Title, null, "Settings")
2546
- ),
2547
- /* @__PURE__ */ React19.createElement(
2548
- ActionTile.Root,
2549
- {
2550
- onClick: () => {
2551
- setOpenStatsForNerdsSheet(true);
2552
- setOpenOptionsSheet(false);
2553
- }
2554
- },
2555
- /* @__PURE__ */ React19.createElement(InfoIcon3, null),
2556
- /* @__PURE__ */ React19.createElement(ActionTile.Title, null, "Stats For Nerds")
2557
- ),
2558
- isConnected && (permissions == null ? void 0 : permissions.browserRecording) ? /* @__PURE__ */ React19.createElement(
2559
- ActionTile.Root,
2560
- {
2561
- disabled: isHLSRunning,
2562
- onClick: () => __async(void 0, null, function* () {
2563
- if (isRecordingLoading) {
2564
- return;
2565
- }
2566
- if (isBrowserRecordingOn || isStreamingOn) {
2567
- setOpenOptionsSheet(false);
2568
- setShowRecordingOn(true);
2569
- } else {
2570
- yield startRecording();
2571
- setOpenOptionsSheet(false);
2572
- }
2573
- if (isHLSRunning) {
2574
- setOpenOptionsSheet(false);
2575
- }
2576
- })
2577
- },
2578
- isRecordingLoading ? /* @__PURE__ */ React19.createElement(Loading, null) : /* @__PURE__ */ React19.createElement(RecordIcon, null),
2579
- /* @__PURE__ */ React19.createElement(ActionTile.Title, null, match3({ isBrowserRecordingOn, isRecordingLoading }).with({ isBrowserRecordingOn: true, isRecordingLoading: false }, () => "Recording On").with({ isRecordingLoading: true }, () => "Starting Recording").with({ isRecordingLoading: false }, () => "Start Recording").otherwise(() => null))
2580
- ) : null,
2581
- title || description ? /* @__PURE__ */ React19.createElement(
2582
- ActionTile.Root,
2583
- {
2584
- onClick: () => {
2585
- setOpenOptionsSheet(false);
2586
- toggleDetailsSheet();
2587
- }
2588
- },
2589
- /* @__PURE__ */ React19.createElement(InfoIcon3, null),
2590
- /* @__PURE__ */ React19.createElement(ActionTile.Title, null, "About Session")
2591
- ) : null
2592
- ))), /* @__PURE__ */ React19.createElement(SettingsModal_default, { open: openSettingsSheet, onOpenChange: setOpenSettingsSheet, screenType }), /* @__PURE__ */ React19.createElement(StatsForNerds, { open: openStatsForNerdsSheet, onOpenChange: setOpenStatsForNerdsSheet }), openModals.has(MODALS2.MUTE_ALL) && /* @__PURE__ */ React19.createElement(MuteAllModal, { onOpenChange: (value) => updateState(MODALS2.MUTE_ALL, value), isMobile: true }), openModals.has(MODALS2.CHANGE_NAME) && /* @__PURE__ */ React19.createElement(
2593
- ChangeNameModal,
2594
- {
2595
- onOpenChange: (value) => updateState(MODALS2.CHANGE_NAME, value),
2596
- openParentSheet: () => setOpenOptionsSheet(true)
2597
- }
2598
- ), openModals.has(MODALS2.CAPTION) && /* @__PURE__ */ React19.createElement(CaptionModal, { onOpenChange: (value) => updateState(MODALS2.CAPTION, value) }), showEmojiCard && /* @__PURE__ */ React19.createElement(
2599
- Box,
2600
- {
2601
- ref: emojiCardRef,
2602
- css: {
2603
- maxWidth: "100%",
2604
- w: "100%",
2605
- position: "absolute",
2606
- left: 0,
2607
- right: 0,
2608
- bottom: "$18",
2609
- bg: "$surface_default",
2610
- zIndex: "10",
2611
- p: "$8",
2612
- pb: 0,
2613
- r: "$1",
2614
- mx: "$4"
2615
- }
2616
- },
2617
- /* @__PURE__ */ React19.createElement(EmojiReaction, { showCard: true })
2618
- ), showRecordingOn && /* @__PURE__ */ React19.createElement(
2619
- StopRecordingInSheet,
2620
- {
2621
- onClose: () => setShowRecordingOn(false),
2622
- onStopRecording: () => __async(void 0, null, function* () {
2623
- try {
2624
- yield hmsActions.stopRTMPAndRecording();
2625
- setShowRecordingOn(false);
2626
- } catch (error) {
2627
- ToastManager.addToast({
2628
- // @ts-ignore
2629
- title: error.message,
2630
- variant: "error"
2631
- });
2632
- }
2633
- })
2634
- }
2635
- ));
2636
- };
2637
-
2638
- // src/Prebuilt/components/MoreSettings/MoreSettings.tsx
2639
- var MoreSettings = ({
2640
- elements,
2641
- screenType
2642
- }) => {
2643
- const isMobile = useMedia5(config.media.md);
2644
- const isLandscapeHLSStream = useLandscapeHLSStream();
2645
- return isMobile || isLandscapeHLSStream ? /* @__PURE__ */ React20.createElement(MwebOptions, { elements, screenType }) : /* @__PURE__ */ React20.createElement(DesktopOptions, { elements, screenType });
2646
- };
2647
-
2648
- export {
2649
- useIsPeerBlacklisted,
2650
- usePinnedMessages,
2651
- CHAT_MESSAGE_LIMIT,
2652
- AnnotisedMessage,
2653
- ChatBody,
2654
- ActivatedPIP,
2655
- useUnreadPollQuizPresent,
2656
- MoreSettings
2657
- };
2658
- //# sourceMappingURL=chunk-ETRNLEWQ.js.map