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

Sign up to get free protection for your applications and to get access to all the features.
Files changed (194) hide show
  1. package/dist/Accordion/Accordion.d.ts +134 -322
  2. package/dist/Accordion/index.d.ts +134 -322
  3. package/dist/Avatar/Avatar.d.ts +47 -141
  4. package/dist/Button/Button.d.ts +47 -141
  5. package/dist/Checkbox/Checkbox.d.ts +134 -322
  6. package/dist/Collapsible/Collapsible.d.ts +201 -483
  7. package/dist/ConferenceScreen-CLPW3BGP.css +2780 -0
  8. package/dist/{HLSView-DDIGCKAW.css.map → ConferenceScreen-CLPW3BGP.css.map} +1 -1
  9. package/dist/ConferenceScreen-M6RBPTAJ.js +1774 -0
  10. package/dist/ConferenceScreen-M6RBPTAJ.js.map +7 -0
  11. package/dist/Divider/Divider.d.ts +134 -322
  12. package/dist/Dropdown/Dropdown.d.ts +804 -1932
  13. package/dist/EmbedView-DDSO7ZCV.js +17 -0
  14. package/dist/EmbedView-DDSO7ZCV.js.map +7 -0
  15. package/dist/EmbedView-HGIUZHKA.css +2780 -0
  16. package/dist/EmbedView-HGIUZHKA.css.map +7 -0
  17. package/dist/EmojiReaction-23JDKJD4.js +11 -0
  18. package/dist/EmojiReaction-23JDKJD4.js.map +7 -0
  19. package/dist/Fieldset/Fieldset.d.ts +47 -141
  20. package/dist/Footer/Footer.d.ts +536 -1288
  21. package/dist/{HLSView-DDIGCKAW.css → HLSView-OW77EAAO.css} +3 -3
  22. package/dist/HLSView-OW77EAAO.css.map +7 -0
  23. package/dist/{HLSView-QZO4JEB7.js → HLSView-Q6GEB3UM.js} +38 -24
  24. package/dist/HLSView-Q6GEB3UM.js.map +7 -0
  25. package/dist/IconButton/IconButton.d.ts +47 -141
  26. package/dist/Input/Input.d.ts +362 -926
  27. package/dist/Label/Label.d.ts +47 -141
  28. package/dist/Layout/Box.d.ts +47 -141
  29. package/dist/Layout/Flex.d.ts +47 -141
  30. package/dist/LeaveScreen-BYTE73MT.js +556 -0
  31. package/dist/LeaveScreen-BYTE73MT.js.map +7 -0
  32. package/dist/LeaveScreen-P7AATEIF.css +2780 -0
  33. package/dist/LeaveScreen-P7AATEIF.css.map +7 -0
  34. package/dist/Link/Link.d.ts +47 -141
  35. package/dist/Modal/Dialog.d.ts +329 -987
  36. package/dist/Modal/DialogContent.d.ts +469 -1127
  37. package/dist/MoreSettings-LV5X2U6K.css +2780 -0
  38. package/dist/MoreSettings-LV5X2U6K.css.map +7 -0
  39. package/dist/MoreSettings-WSHMMNOC.js +16 -0
  40. package/dist/MoreSettings-WSHMMNOC.js.map +7 -0
  41. package/dist/PDFView-RIPRIIH6.css +2780 -0
  42. package/dist/PDFView-RIPRIIH6.css.map +7 -0
  43. package/dist/PDFView-ZFSG2ESE.js +84 -0
  44. package/dist/PDFView-ZFSG2ESE.js.map +7 -0
  45. package/dist/Pagination/StyledPagination.d.ts +268 -644
  46. package/dist/Polls-QWW5LTTB.js +1584 -0
  47. package/dist/Polls-QWW5LTTB.js.map +7 -0
  48. package/dist/Polls-ULYGUPPF.css +2780 -0
  49. package/dist/Polls-ULYGUPPF.css.map +7 -0
  50. package/dist/Popover/index.d.ts +201 -483
  51. package/dist/Prebuilt/IconButton.d.ts +134 -322
  52. package/dist/Prebuilt/components/Chat/ChatBody.d.ts +134 -322
  53. package/dist/Prebuilt/components/Leave/LeaveAtoms.d.ts +335 -805
  54. package/dist/Prebuilt/components/Notifications/DeviceChangeNotifications.d.ts +1 -0
  55. package/dist/Prebuilt/components/Notifications/ErrorNotifications.d.ts +1 -0
  56. package/dist/Prebuilt/components/Notifications/MessageNotifications.d.ts +1 -0
  57. package/dist/Prebuilt/components/Notifications/PollNotificationModal.d.ts +1 -0
  58. package/dist/Prebuilt/components/Notifications/RoleChangeNotification.d.ts +1 -0
  59. package/dist/Prebuilt/components/Settings/common.d.ts +134 -322
  60. package/dist/Progress/index.d.ts +134 -322
  61. package/dist/RadioGroup/RadioGroup.d.ts +201 -483
  62. package/dist/RaiseHand-K7NFLH7H.js +10 -0
  63. package/dist/RaiseHand-K7NFLH7H.js.map +7 -0
  64. package/dist/ReactSelect/ReactSelect.d.ts +670 -1610
  65. package/dist/RoleProminence-235AFT7F.js +116 -0
  66. package/dist/RoleProminence-235AFT7F.js.map +7 -0
  67. package/dist/RoleProminence-6XN3POS5.css +2780 -0
  68. package/dist/RoleProminence-6XN3POS5.css.map +7 -0
  69. package/dist/RoomDetailsPane-O5TFMTPI.css +2780 -0
  70. package/dist/RoomDetailsPane-O5TFMTPI.css.map +7 -0
  71. package/dist/RoomDetailsPane-RF3D3TDR.js +53 -0
  72. package/dist/RoomDetailsPane-RF3D3TDR.js.map +7 -0
  73. package/dist/ScreenshareLayout-KNEB3AJJ.css +2780 -0
  74. package/dist/ScreenshareLayout-KNEB3AJJ.css.map +7 -0
  75. package/dist/ScreenshareLayout-PSQMS3NC.js +358 -0
  76. package/dist/ScreenshareLayout-PSQMS3NC.js.map +7 -0
  77. package/dist/Select/Select.d.ts +201 -483
  78. package/dist/Sheet/Sheet.d.ts +329 -987
  79. package/dist/SidePaneTabs-I6DECE5R.css +2780 -0
  80. package/dist/SidePaneTabs-I6DECE5R.css.map +7 -0
  81. package/dist/SidePaneTabs-NXHBI2JB.js +1354 -0
  82. package/dist/SidePaneTabs-NXHBI2JB.js.map +7 -0
  83. package/dist/Slider/Slider.d.ts +47 -141
  84. package/dist/Stats/StyledStats.d.ts +402 -966
  85. package/dist/Switch/Switch.d.ts +47 -141
  86. package/dist/Tabs/Tabs.d.ts +268 -644
  87. package/dist/Text/Text.d.ts +47 -141
  88. package/dist/TextArea/TextArea.d.ts +47 -141
  89. package/dist/Theme/base.config.d.ts +26 -78
  90. package/dist/Theme/stitches.config.d.ts +1046 -1493
  91. package/dist/TileMenu/StyledMenuTile.d.ts +469 -1127
  92. package/dist/Toast/Toast.d.ts +382 -946
  93. package/dist/VBPicker-2CQ3IIO7.js +322 -0
  94. package/dist/VBPicker-2CQ3IIO7.js.map +7 -0
  95. package/dist/VBPicker-DCNYGO23.css +2780 -0
  96. package/dist/VBPicker-DCNYGO23.css.map +7 -0
  97. package/dist/Video/Video.d.ts +47 -141
  98. package/dist/VideoList/StyledVideoList.d.ts +201 -483
  99. package/dist/VideoTile/StyledVideoTile.d.ts +670 -1610
  100. package/dist/WaitingView-NZIUOXBI.js +10 -0
  101. package/dist/WaitingView-NZIUOXBI.js.map +7 -0
  102. package/dist/WhiteboardLayout-4YLFM3EY.js +96 -0
  103. package/dist/WhiteboardLayout-4YLFM3EY.js.map +7 -0
  104. package/dist/WhiteboardLayout-JUOBDFKY.css +2780 -0
  105. package/dist/WhiteboardLayout-JUOBDFKY.css.map +7 -0
  106. package/dist/android-perm-1.png +0 -0
  107. package/dist/audio-level.png +0 -0
  108. package/dist/chunk-3C7IESSI.js +254 -0
  109. package/dist/chunk-3C7IESSI.js.map +7 -0
  110. package/dist/chunk-7FD3VT6Q.js +114 -0
  111. package/dist/chunk-7FD3VT6Q.js.map +7 -0
  112. package/dist/chunk-AHI4HCY3.js +62 -0
  113. package/dist/chunk-AHI4HCY3.js.map +7 -0
  114. package/dist/chunk-BGSYLCVD.js +6337 -0
  115. package/dist/chunk-BGSYLCVD.js.map +7 -0
  116. package/dist/chunk-DANANDDE.js +418 -0
  117. package/dist/chunk-DANANDDE.js.map +7 -0
  118. package/dist/chunk-ETRNLEWQ.js +2658 -0
  119. package/dist/chunk-ETRNLEWQ.js.map +7 -0
  120. package/dist/chunk-EWPHJFZJ.js +487 -0
  121. package/dist/chunk-EWPHJFZJ.js.map +7 -0
  122. package/dist/chunk-F63YJBI4.js +98 -0
  123. package/dist/chunk-F63YJBI4.js.map +7 -0
  124. package/dist/chunk-GLAJUP3O.js +576 -0
  125. package/dist/chunk-GLAJUP3O.js.map +7 -0
  126. package/dist/chunk-GOXRTCTY.js +90 -0
  127. package/dist/chunk-GOXRTCTY.js.map +7 -0
  128. package/dist/chunk-HMCBZI3A.js +59 -0
  129. package/dist/chunk-HMCBZI3A.js.map +7 -0
  130. package/dist/chunk-HVYTC3PX.js +171 -0
  131. package/dist/chunk-HVYTC3PX.js.map +7 -0
  132. package/dist/chunk-LJVP6AWF.js +262 -0
  133. package/dist/chunk-LJVP6AWF.js.map +7 -0
  134. package/dist/chunk-LXJGCRKM.js +30 -0
  135. package/dist/chunk-LXJGCRKM.js.map +7 -0
  136. package/dist/chunk-MG3UGW66.js +16800 -0
  137. package/dist/chunk-MG3UGW66.js.map +7 -0
  138. package/dist/chunk-MUKUP7JU.js +161 -0
  139. package/dist/chunk-MUKUP7JU.js.map +7 -0
  140. package/dist/chunk-OV6MVDCL.js +41 -0
  141. package/dist/chunk-OV6MVDCL.js.map +7 -0
  142. package/dist/chunk-P6NV2XO4.js +178 -0
  143. package/dist/chunk-P6NV2XO4.js.map +7 -0
  144. package/dist/chunk-REL3HBSD.js +71 -0
  145. package/dist/chunk-REL3HBSD.js.map +7 -0
  146. package/dist/chunk-U4SQBXPZ.js +830 -0
  147. package/dist/chunk-U4SQBXPZ.js.map +7 -0
  148. package/dist/chunk-YEL5ZTFU.js +136 -0
  149. package/dist/chunk-YEL5ZTFU.js.map +7 -0
  150. package/dist/empty-chat.svg +12 -0
  151. package/dist/index.cjs.css +2 -2
  152. package/dist/index.cjs.css.map +1 -1
  153. package/dist/index.cjs.js +21713 -21508
  154. package/dist/index.cjs.js.map +4 -4
  155. package/dist/index.css +2 -2
  156. package/dist/index.css.map +1 -1
  157. package/dist/index.js +25 -15
  158. package/dist/ios-perm-0.png +0 -0
  159. package/dist/meta.cjs.json +5515 -5153
  160. package/dist/meta.esbuild.json +8998 -6138
  161. package/dist/pdf-share.png +0 -0
  162. package/dist/screen-share.png +0 -0
  163. package/dist/transaction_error.svg +12 -0
  164. package/package.json +8 -8
  165. package/src/Avatar/Avatar.tsx +1 -1
  166. package/src/Popover/Popover.stories.tsx +1 -1
  167. package/src/Prebuilt/App.tsx +6 -2
  168. package/src/Prebuilt/components/Chat/Chat.tsx +12 -8
  169. package/src/Prebuilt/components/Chat/ChatFooter.tsx +1 -1
  170. package/src/Prebuilt/components/MoreSettings/SplitComponents/MwebOptions.tsx +14 -1
  171. package/src/Prebuilt/components/Notifications/DeviceChangeNotifications.tsx +18 -0
  172. package/src/Prebuilt/components/Notifications/ErrorNotifications.tsx +56 -0
  173. package/src/Prebuilt/components/Notifications/MessageNotifications.tsx +24 -0
  174. package/src/Prebuilt/components/Notifications/Notifications.tsx +13 -171
  175. package/src/Prebuilt/components/Notifications/PeerNotifications.tsx +9 -2
  176. package/src/Prebuilt/components/Notifications/PollNotificationModal.tsx +71 -0
  177. package/src/Prebuilt/components/Notifications/ReconnectNotifications.tsx +1 -5
  178. package/src/Prebuilt/components/Notifications/RoleChangeNotification.tsx +24 -0
  179. package/src/Prebuilt/components/Notifications/TrackBulkUnmuteModal.tsx +7 -5
  180. package/src/Prebuilt/components/Notifications/TrackNotifications.tsx +23 -1
  181. package/src/Prebuilt/components/Notifications/TrackUnmuteModal.tsx +13 -5
  182. package/src/Prebuilt/components/StatsForNerds.jsx +122 -9
  183. package/src/Prebuilt/components/VideoLayouts/GridLayout.tsx +43 -31
  184. package/src/Prebuilt/components/VideoLayouts/ProminenceLayout.tsx +2 -2
  185. package/src/Prebuilt/components/VirtualBackground/VBOption.tsx +3 -1
  186. package/src/Prebuilt/components/VirtualBackground/VBPicker.tsx +6 -0
  187. package/src/Prebuilt/layouts/HLSView.jsx +1 -0
  188. package/src/Prebuilt/layouts/PDFView.jsx +1 -0
  189. package/src/Prebuilt/layouts/SidePane.tsx +12 -6
  190. package/src/Prebuilt/layouts/VideoStreamingSection.tsx +35 -34
  191. package/src/Prebuilt/layouts/WaitingView.tsx +2 -2
  192. package/dist/HLSView-QZO4JEB7.js.map +0 -7
  193. package/dist/chunk-J2QT7G3M.js +0 -34759
  194. package/dist/chunk-J2QT7G3M.js.map +0 -7
@@ -0,0 +1,1774 @@
1
+ import {
2
+ Header
3
+ } from "./chunk-LJVP6AWF.js";
4
+ import {
5
+ Grid
6
+ } from "./chunk-HMCBZI3A.js";
7
+ import {
8
+ InsetTile
9
+ } from "./chunk-YEL5ZTFU.js";
10
+ import {
11
+ ChatToggle,
12
+ LeaveRoom
13
+ } from "./chunk-EWPHJFZJ.js";
14
+ import {
15
+ WaitingView
16
+ } from "./chunk-REL3HBSD.js";
17
+ import {
18
+ Pagination,
19
+ VideoTileContext,
20
+ usePagesWithTiles,
21
+ useTileLayout
22
+ } from "./chunk-P6NV2XO4.js";
23
+ import {
24
+ ParticipantCount
25
+ } from "./chunk-U4SQBXPZ.js";
26
+ import {
27
+ ActivatedPIP,
28
+ MoreSettings,
29
+ useUnreadPollQuizPresent
30
+ } from "./chunk-ETRNLEWQ.js";
31
+ import "./chunk-3C7IESSI.js";
32
+ import {
33
+ EmojiReaction
34
+ } from "./chunk-7FD3VT6Q.js";
35
+ import {
36
+ RaiseHand
37
+ } from "./chunk-OV6MVDCL.js";
38
+ import {
39
+ useMyMetadata
40
+ } from "./chunk-AHI4HCY3.js";
41
+ import "./chunk-LXJGCRKM.js";
42
+ import {
43
+ AudioVideoToggle,
44
+ Button,
45
+ Dialog,
46
+ DialogCol,
47
+ DialogInputFile,
48
+ DialogRow,
49
+ Footer,
50
+ FullPageProgress_default,
51
+ PictureInPicture,
52
+ PreviewControls,
53
+ PreviewTile,
54
+ Sheet,
55
+ SidePane_default,
56
+ VBToggle,
57
+ useHMSPrebuiltContext,
58
+ useIsSidepaneTypeOpen,
59
+ usePollViewToggle,
60
+ useSidepaneToggle
61
+ } from "./chunk-MG3UGW66.js";
62
+ import {
63
+ Text
64
+ } from "./chunk-MUKUP7JU.js";
65
+ import {
66
+ Dropdown,
67
+ ToastManager,
68
+ useLandscapeHLSStream,
69
+ useMobileHLSStream,
70
+ useWaitingRoomInfo
71
+ } from "./chunk-DANANDDE.js";
72
+ import {
73
+ Box,
74
+ Flex
75
+ } from "./chunk-GOXRTCTY.js";
76
+ import {
77
+ IconButton,
78
+ IconButton_default,
79
+ Tooltip,
80
+ isScreenshareSupported,
81
+ useAuthToken,
82
+ useIsCaptionEnabled,
83
+ usePDFConfig,
84
+ usePinnedTrack,
85
+ useRoomLayoutConferencingScreen,
86
+ useRoomLayoutPreviewScreen,
87
+ useSetAppDataByKey,
88
+ useSetIsCaptionEnabled,
89
+ useShowPolls,
90
+ useUISettings,
91
+ useUrlToEmbed
92
+ } from "./chunk-BGSYLCVD.js";
93
+ import {
94
+ APP_DATA,
95
+ ROLE_CHANGE_DECLINED,
96
+ SIDE_PANE_OPTIONS,
97
+ UI_SETTINGS,
98
+ __async,
99
+ __spreadProps,
100
+ __spreadValues,
101
+ config,
102
+ init_define_process_env,
103
+ isAndroid,
104
+ isIOS,
105
+ isIPadOS,
106
+ styled
107
+ } from "./chunk-GLAJUP3O.js";
108
+
109
+ // src/Prebuilt/components/ConferenceScreen.tsx
110
+ init_define_process_env();
111
+ import React19, { useEffect as useEffect10, useRef as useRef2, useState as useState8 } from "react";
112
+ import { v4 as uuid } from "uuid";
113
+ import {
114
+ HMSRoomState,
115
+ selectAppData,
116
+ selectIsConnectedToRoom as selectIsConnectedToRoom2,
117
+ selectRoomState,
118
+ useAwayNotifications as useAwayNotifications2,
119
+ useHMSActions as useHMSActions4,
120
+ useHMSStore as useHMSStore10
121
+ } from "@100mslive/react-sdk";
122
+
123
+ // src/Prebuilt/components/Footer/Footer.tsx
124
+ init_define_process_env();
125
+ import React11, { useEffect as useEffect2 } from "react";
126
+ import { useMedia } from "react-use";
127
+ import { Chat_ChatState } from "@100mslive/types-prebuilt/elements/chat";
128
+
129
+ // src/Prebuilt/components/CaptionIcon.tsx
130
+ init_define_process_env();
131
+ import React from "react";
132
+ import { selectIsTranscriptionEnabled, useHMSStore } from "@100mslive/react-sdk";
133
+ import { ClosedCaptionIcon, OpenCaptionIcon } from "@100mslive/react-icons";
134
+ var CaptionIcon = () => {
135
+ const isCaptionPresent = useHMSStore(selectIsTranscriptionEnabled);
136
+ const [isCaption, setIsCaption] = useSetIsCaptionEnabled();
137
+ const onClick = () => {
138
+ setIsCaption(!isCaption);
139
+ };
140
+ if (!isCaptionPresent) {
141
+ return null;
142
+ }
143
+ return /* @__PURE__ */ React.createElement(Tooltip, { title: isCaption ? "Hide closed captions" : "Show closed captions" }, /* @__PURE__ */ React.createElement(IconButton_default, { "data-testid": "caption_btn", onClick }, isCaption ? /* @__PURE__ */ React.createElement(ClosedCaptionIcon, { width: "20", height: "20px" }) : /* @__PURE__ */ React.createElement(OpenCaptionIcon, { width: "20", height: "20px" })));
144
+ };
145
+
146
+ // src/Prebuilt/components/ScreenShareToggle.jsx
147
+ init_define_process_env();
148
+ import React8, { Fragment as Fragment2 } from "react";
149
+ import { selectIsAllowedToPublish, useAwayNotifications, useHMSStore as useHMSStore2, useScreenShare as useScreenShare2 } from "@100mslive/react-sdk";
150
+ import { ShareScreenIcon } from "@100mslive/react-icons";
151
+
152
+ // src/Prebuilt/components/pdfAnnotator/shareScreenOptions.jsx
153
+ init_define_process_env();
154
+ import React7, { Fragment, useState as useState2 } from "react";
155
+ import { useScreenShare } from "@100mslive/react-sdk";
156
+ import { StarIcon, VerticalMenuIcon } from "@100mslive/react-icons";
157
+ import PDFShareImg from "./pdf-share.png";
158
+ import ScreenShareImg from "./screen-share.png";
159
+
160
+ // src/Prebuilt/components/ShareMenuIcon.jsx
161
+ init_define_process_env();
162
+ var ScreenShareButton = styled(IconButton_default, {
163
+ h: "$14",
164
+ px: "$8",
165
+ r: "$1",
166
+ borderTopRightRadius: 0,
167
+ borderBottomRightRadius: 0,
168
+ "@md": {
169
+ px: "$4",
170
+ mx: 0
171
+ }
172
+ });
173
+ var ShareMenuIcon = styled(ScreenShareButton, {
174
+ borderTopLeftRadius: 0,
175
+ borderBottomLeftRadius: 0,
176
+ borderTopRightRadius: "$1",
177
+ borderBottomRightRadius: "$1",
178
+ borderLeftWidth: 0,
179
+ w: "$4",
180
+ "@md": {
181
+ w: "unset",
182
+ px: "$2"
183
+ }
184
+ });
185
+
186
+ // src/Prebuilt/components/pdfAnnotator/pdfFileOptions.jsx
187
+ init_define_process_env();
188
+ import React6, { useState } from "react";
189
+
190
+ // src/Prebuilt/components/pdfAnnotator/pdfHeader.jsx
191
+ init_define_process_env();
192
+ import React2 from "react";
193
+ var PDFHeader = () => {
194
+ return /* @__PURE__ */ React2.createElement(
195
+ DialogCol,
196
+ {
197
+ align: "start",
198
+ css: {
199
+ mt: 0,
200
+ mb: "$6"
201
+ }
202
+ },
203
+ /* @__PURE__ */ React2.createElement(Dialog.Title, { asChild: true }, /* @__PURE__ */ React2.createElement(Text, { as: "h6", variant: "h6" }, "Share PDF")),
204
+ /* @__PURE__ */ React2.createElement(Dialog.Description, { asChild: true }, /* @__PURE__ */ React2.createElement(
205
+ Text,
206
+ {
207
+ variant: "sm",
208
+ css: {
209
+ c: "$on_surface_medium"
210
+ }
211
+ },
212
+ "Choose PDF you want to annotate and share"
213
+ ))
214
+ );
215
+ };
216
+
217
+ // src/Prebuilt/components/pdfAnnotator/submitPdf.jsx
218
+ init_define_process_env();
219
+ import React3 from "react";
220
+ var SubmitPDF = ({ pdfFile, onOpenChange }) => {
221
+ const [, setPDFConfig] = useSetAppDataByKey(APP_DATA.pdfConfig);
222
+ return /* @__PURE__ */ React3.createElement(
223
+ Flex,
224
+ {
225
+ direction: "row",
226
+ css: {
227
+ mb: "0",
228
+ mt: "auto",
229
+ gap: "$8"
230
+ }
231
+ },
232
+ /* @__PURE__ */ React3.createElement(
233
+ Button,
234
+ {
235
+ variant: "standard",
236
+ outlined: true,
237
+ type: "submit",
238
+ onClick: () => {
239
+ onOpenChange(false);
240
+ },
241
+ css: { w: "50%" }
242
+ },
243
+ "Cancel"
244
+ ),
245
+ /* @__PURE__ */ React3.createElement(
246
+ Button,
247
+ {
248
+ variant: "primary",
249
+ type: "submit",
250
+ onClick: () => {
251
+ if (pdfFile) {
252
+ setPDFConfig(pdfFile);
253
+ onOpenChange(false);
254
+ }
255
+ },
256
+ disabled: !pdfFile,
257
+ "data-testid": "share_pdf_btn",
258
+ css: {
259
+ w: "50%"
260
+ }
261
+ },
262
+ "Start Sharing"
263
+ )
264
+ );
265
+ };
266
+
267
+ // src/Prebuilt/components/pdfAnnotator/uploadedFile.jsx
268
+ init_define_process_env();
269
+ import React5 from "react";
270
+ import { TrashIcon } from "@100mslive/react-icons";
271
+
272
+ // src/Prebuilt/components/pdfAnnotator/pdfInfo.jsx
273
+ init_define_process_env();
274
+ import React4 from "react";
275
+ import { InfoIcon } from "@100mslive/react-icons";
276
+ var PDFInfo = () => {
277
+ return /* @__PURE__ */ React4.createElement(
278
+ DialogRow,
279
+ {
280
+ css: {
281
+ px: "$8",
282
+ py: "$3",
283
+ bg: "$surface_default",
284
+ r: "$1",
285
+ outline: "none",
286
+ border: "1px solid $border_bright",
287
+ minHeight: "$11"
288
+ }
289
+ },
290
+ /* @__PURE__ */ React4.createElement(
291
+ InfoIcon,
292
+ {
293
+ width: "64px",
294
+ height: "64px",
295
+ style: {
296
+ paddingRight: "16px"
297
+ }
298
+ }
299
+ ),
300
+ /* @__PURE__ */ React4.createElement(Text, { variant: "caption" }, "On the next screen, ensure you select \u201CThis Tab\u201D and click on share. Only the PDF viewer will be seen by other participants")
301
+ );
302
+ };
303
+
304
+ // src/Prebuilt/components/pdfAnnotator/uploadedFile.jsx
305
+ var UploadedFile = ({ pdfFile, setPDFFile, onOpenChange }) => {
306
+ const [fileName, ext] = pdfFile.name.split(".");
307
+ return /* @__PURE__ */ React5.createElement(Dialog.Root, { defaultOpen: true, onOpenChange }, /* @__PURE__ */ React5.createElement(Dialog.Portal, null, /* @__PURE__ */ React5.createElement(Dialog.Overlay, null), /* @__PURE__ */ React5.createElement(
308
+ Dialog.Content,
309
+ {
310
+ css: {
311
+ w: "min(420px,80%)",
312
+ overflow: "auto",
313
+ p: "$10",
314
+ bg: "$surface_dim"
315
+ }
316
+ },
317
+ /* @__PURE__ */ React5.createElement(Flex, { direction: "column" }, /* @__PURE__ */ React5.createElement(PDFHeader, null), /* @__PURE__ */ React5.createElement(
318
+ DialogRow,
319
+ {
320
+ css: {
321
+ fontFamily: "$sans",
322
+ bg: "$surface_bright",
323
+ r: "$1",
324
+ outline: "none",
325
+ border: "1px solid $border_bright",
326
+ p: "$4 $6",
327
+ minHeight: "$11",
328
+ c: "$on_primary_high",
329
+ fs: "$md",
330
+ w: "100%",
331
+ "&:focus": {
332
+ boxShadow: "0 0 0 1px $colors$primary_default",
333
+ border: "1px solid transparent"
334
+ },
335
+ mb: 0,
336
+ mt: "$6"
337
+ }
338
+ },
339
+ /* @__PURE__ */ React5.createElement(Flex, { direction: "row", css: { flexGrow: "1", maxWidth: "88%" } }, /* @__PURE__ */ React5.createElement(
340
+ Text,
341
+ {
342
+ css: {
343
+ textOverflow: "ellipsis",
344
+ overflow: "hidden",
345
+ whiteSpace: "nowrap"
346
+ }
347
+ },
348
+ fileName
349
+ ), /* @__PURE__ */ React5.createElement(Text, { css: { whiteSpace: "nowrap" } }, ".", ext)),
350
+ /* @__PURE__ */ React5.createElement(
351
+ TrashIcon,
352
+ {
353
+ onClick: () => setPDFFile(null),
354
+ style: {
355
+ cursor: "pointer"
356
+ }
357
+ }
358
+ )
359
+ ), /* @__PURE__ */ React5.createElement(PDFInfo, null), /* @__PURE__ */ React5.createElement(SubmitPDF, { pdfFile, onOpenChange }))
360
+ )));
361
+ };
362
+
363
+ // src/Prebuilt/components/pdfAnnotator/pdfFileOptions.jsx
364
+ function PDFFileOptions({ onOpenChange }) {
365
+ const [pdfFile, setPDFFile] = useState(null);
366
+ return !pdfFile ? /* @__PURE__ */ React6.createElement(Dialog.Root, { defaultOpen: true, onOpenChange }, /* @__PURE__ */ React6.createElement(Dialog.Portal, null, /* @__PURE__ */ React6.createElement(Dialog.Overlay, null), /* @__PURE__ */ React6.createElement(
367
+ Dialog.Content,
368
+ {
369
+ css: {
370
+ w: "min(420px,80%)",
371
+ overflow: "auto",
372
+ p: "$10",
373
+ bg: "$surface_dim"
374
+ }
375
+ },
376
+ /* @__PURE__ */ React6.createElement(Flex, { direction: "column" }, /* @__PURE__ */ React6.createElement(PDFHeader, null), /* @__PURE__ */ React6.createElement(
377
+ DialogInputFile,
378
+ {
379
+ onChange: (target) => {
380
+ setPDFFile(target.files[0]);
381
+ },
382
+ placeholder: "Click to upload",
383
+ type: "file",
384
+ accept: ".pdf"
385
+ }
386
+ ), /* @__PURE__ */ React6.createElement(SubmitPDF, { pdfFile, onOpenChange }))
387
+ ))) : /* @__PURE__ */ React6.createElement(UploadedFile, { pdfFile, setPDFFile, onOpenChange });
388
+ }
389
+
390
+ // src/Prebuilt/components/pdfAnnotator/shareScreenOptions.jsx
391
+ var MODALS = {
392
+ SHARE: "share",
393
+ SCREEN_SHARE: "screenShare",
394
+ PDF_SHARE: "pdfShare"
395
+ };
396
+ function ShareScreenOptions() {
397
+ const [openModals, setOpenModals] = useState2(/* @__PURE__ */ new Set());
398
+ const { amIScreenSharing } = useScreenShare();
399
+ const updateState = (modalName, value) => {
400
+ setOpenModals((modals) => {
401
+ const copy = new Set(modals);
402
+ if (value) {
403
+ copy.add(modalName);
404
+ } else {
405
+ copy.delete(modalName);
406
+ }
407
+ return copy;
408
+ });
409
+ };
410
+ const { toggleScreenShare } = useScreenShare();
411
+ return /* @__PURE__ */ React7.createElement(Fragment, null, /* @__PURE__ */ React7.createElement(
412
+ Dropdown.Root,
413
+ {
414
+ open: openModals.has(MODALS.SHARE),
415
+ onOpenChange: (value) => updateState(MODALS.SHARE, value),
416
+ modal: false
417
+ },
418
+ /* @__PURE__ */ React7.createElement(Dropdown.Trigger, { asChild: true, "data-testid": "sharing_btn", disabled: amIScreenSharing }, /* @__PURE__ */ React7.createElement(ShareMenuIcon, { disabled: amIScreenSharing }, /* @__PURE__ */ React7.createElement(Tooltip, { title: "Share" }, /* @__PURE__ */ React7.createElement(Box, null, /* @__PURE__ */ React7.createElement(VerticalMenuIcon, null))))),
419
+ /* @__PURE__ */ React7.createElement(
420
+ Dropdown.Content,
421
+ {
422
+ sideOffset: 5,
423
+ css: {
424
+ w: "$96",
425
+ maxHeight: "$96",
426
+ p: 0,
427
+ bg: "$surface_dim"
428
+ }
429
+ },
430
+ /* @__PURE__ */ React7.createElement(
431
+ Dropdown.Item,
432
+ {
433
+ css: {
434
+ flexDirection: "column",
435
+ alignItems: "flex-start",
436
+ px: "$10",
437
+ pt: "$10",
438
+ pb: "$6",
439
+ "&:hover": {
440
+ bg: "transparent",
441
+ cursor: "default"
442
+ }
443
+ }
444
+ },
445
+ /* @__PURE__ */ React7.createElement(Text, { variant: "h6" }, "Start Sharing"),
446
+ /* @__PURE__ */ React7.createElement(Text, { variant: "sm" }, "Choose what you want to share")
447
+ ),
448
+ /* @__PURE__ */ React7.createElement(
449
+ Dropdown.Item,
450
+ {
451
+ css: {
452
+ flexDirection: "row",
453
+ alignItems: "flex-start",
454
+ gap: "$8",
455
+ px: "$10",
456
+ pt: "$6",
457
+ pb: "$10",
458
+ "&:hover": {
459
+ bg: "transparent",
460
+ cursor: "default"
461
+ }
462
+ }
463
+ },
464
+ /* @__PURE__ */ React7.createElement(
465
+ Flex,
466
+ {
467
+ direction: "column",
468
+ align: "center",
469
+ css: {
470
+ gap: "$6"
471
+ }
472
+ },
473
+ /* @__PURE__ */ React7.createElement(
474
+ IconButton,
475
+ {
476
+ as: "div",
477
+ onClick: toggleScreenShare,
478
+ css: {
479
+ p: "$6",
480
+ display: "flex",
481
+ justifyContent: "center",
482
+ border: "1px solid $border_bright",
483
+ r: "$2",
484
+ bg: "$surface_brighter",
485
+ pb: "0"
486
+ }
487
+ },
488
+ /* @__PURE__ */ React7.createElement(
489
+ "img",
490
+ {
491
+ src: ScreenShareImg,
492
+ alt: "screen-share",
493
+ width: "100%",
494
+ height: "100%",
495
+ style: {
496
+ borderTopLeftRadius: "0.5rem",
497
+ // TODO: create image component to solve for style hardcoding
498
+ borderTopRightRadius: "0.5rem"
499
+ }
500
+ }
501
+ )
502
+ ),
503
+ /* @__PURE__ */ React7.createElement(Flex, { direction: "column", align: "center" }, /* @__PURE__ */ React7.createElement(Text, { variant: "body2" }, "Share Screen"), /* @__PURE__ */ React7.createElement(
504
+ Text,
505
+ {
506
+ variant: "caption",
507
+ css: {
508
+ c: "$on_surface_low",
509
+ textAlign: "center"
510
+ }
511
+ },
512
+ "Share your tab, window or your entire screen"
513
+ ))
514
+ ),
515
+ /* @__PURE__ */ React7.createElement(
516
+ Flex,
517
+ {
518
+ direction: "column",
519
+ align: "center",
520
+ css: {
521
+ gap: "$6"
522
+ }
523
+ },
524
+ /* @__PURE__ */ React7.createElement(
525
+ IconButton,
526
+ {
527
+ onClick: () => {
528
+ updateState(MODALS.PDF_SHARE, true);
529
+ },
530
+ disabled: amIScreenSharing,
531
+ css: {
532
+ p: "$6",
533
+ display: "flex",
534
+ justifyContent: "center",
535
+ border: "$border_bright 1px solid",
536
+ r: "$2",
537
+ bg: "$surface_bright",
538
+ pb: "0"
539
+ }
540
+ },
541
+ /* @__PURE__ */ React7.createElement(
542
+ "img",
543
+ {
544
+ src: PDFShareImg,
545
+ alt: "pdf-share",
546
+ width: "100%",
547
+ height: "100%",
548
+ style: {
549
+ borderTopLeftRadius: "0.5rem",
550
+ // TODO: create image component to solve for style hardcoding
551
+ borderTopRightRadius: "0.5rem"
552
+ }
553
+ }
554
+ ),
555
+ /* @__PURE__ */ React7.createElement(
556
+ Flex,
557
+ {
558
+ direction: "row",
559
+ align: "center",
560
+ css: {
561
+ position: "absolute",
562
+ top: "35%",
563
+ left: "54%",
564
+ padding: "$2 $4",
565
+ r: "$2",
566
+ bg: "$primary_bright",
567
+ zIndex: "2",
568
+ gap: "$2"
569
+ }
570
+ },
571
+ /* @__PURE__ */ React7.createElement(StarIcon, { height: 14, width: 14 }),
572
+ /* @__PURE__ */ React7.createElement(
573
+ Text,
574
+ {
575
+ variant: "xs",
576
+ css: {
577
+ fontWeight: "$semiBold",
578
+ c: "$on_primary_high",
579
+ pr: "$4"
580
+ }
581
+ },
582
+ "New"
583
+ )
584
+ )
585
+ ),
586
+ /* @__PURE__ */ React7.createElement(Flex, { direction: "column", align: "center" }, /* @__PURE__ */ React7.createElement(Text, { variant: "body2" }, "Share PDF"), /* @__PURE__ */ React7.createElement(
587
+ Text,
588
+ {
589
+ variant: "caption",
590
+ css: {
591
+ c: "$on_surface_low",
592
+ textAlign: "center"
593
+ }
594
+ },
595
+ "Annotate, draw shapes, and more over PDFs"
596
+ ))
597
+ )
598
+ )
599
+ )
600
+ ), openModals.has(MODALS.PDF_SHARE) && /* @__PURE__ */ React7.createElement(PDFFileOptions, { onOpenChange: (value) => updateState(MODALS.PDF_SHARE, value) }));
601
+ }
602
+
603
+ // src/Prebuilt/components/ScreenShareToggle.jsx
604
+ var ScreenshareToggle = ({ css = {} }) => {
605
+ const isAllowedToPublish = useHMSStore2(selectIsAllowedToPublish);
606
+ const isAudioOnly = useUISettings(UI_SETTINGS.isAudioOnly);
607
+ const {
608
+ amIScreenSharing,
609
+ screenShareVideoTrackId: video,
610
+ toggleScreenShare
611
+ } = useScreenShare2((error) => {
612
+ ToastManager.addToast({
613
+ title: error.message,
614
+ variant: "error",
615
+ duration: 2e3
616
+ });
617
+ });
618
+ const { requestPermission } = useAwayNotifications();
619
+ const isVideoScreenshare = amIScreenSharing && !!video;
620
+ if (!isAllowedToPublish.screen || !isScreenshareSupported()) {
621
+ return null;
622
+ }
623
+ return /* @__PURE__ */ React8.createElement(Fragment2, null, /* @__PURE__ */ React8.createElement(Flex, { direction: "row" }, /* @__PURE__ */ React8.createElement(
624
+ ScreenShareButton,
625
+ {
626
+ variant: "standard",
627
+ key: "ShareScreen",
628
+ active: !isVideoScreenshare,
629
+ css,
630
+ disabled: isAudioOnly,
631
+ onClick: () => __async(void 0, null, function* () {
632
+ yield toggleScreenShare();
633
+ yield requestPermission();
634
+ })
635
+ },
636
+ /* @__PURE__ */ React8.createElement(Tooltip, { title: `${!isVideoScreenshare ? "Start" : "Stop"} screen sharing` }, /* @__PURE__ */ React8.createElement(Box, null, /* @__PURE__ */ React8.createElement(ShareScreenIcon, null)))
637
+ ), /* @__PURE__ */ React8.createElement(ShareScreenOptions, null)));
638
+ };
639
+
640
+ // src/Prebuilt/components/Footer/PollsToggle.tsx
641
+ init_define_process_env();
642
+ import React9, { useEffect } from "react";
643
+ import { QuizActiveIcon, QuizIcon } from "@100mslive/react-icons";
644
+ var PollsToggle = () => {
645
+ const isPollsOpen = useIsSidepaneTypeOpen(SIDE_PANE_OPTIONS.POLLS);
646
+ const togglePollView = usePollViewToggle();
647
+ const { unreadPollQuiz, setUnreadPollQuiz } = useUnreadPollQuizPresent();
648
+ useEffect(() => {
649
+ if (unreadPollQuiz && isPollsOpen) {
650
+ setUnreadPollQuiz(false);
651
+ }
652
+ }, [isPollsOpen, unreadPollQuiz, setUnreadPollQuiz]);
653
+ return /* @__PURE__ */ React9.createElement(Tooltip, { key: "polls", title: `${isPollsOpen ? "Close" : "Open"} polls and quizzes` }, /* @__PURE__ */ React9.createElement(
654
+ IconButton_default,
655
+ {
656
+ onClick: () => {
657
+ togglePollView();
658
+ setUnreadPollQuiz(false);
659
+ },
660
+ css: { bg: isPollsOpen ? "$surface_brighter" : "" },
661
+ "data-testid": "polls_btn"
662
+ },
663
+ unreadPollQuiz ? /* @__PURE__ */ React9.createElement(QuizActiveIcon, null) : /* @__PURE__ */ React9.createElement(QuizIcon, null)
664
+ ));
665
+ };
666
+
667
+ // src/Prebuilt/components/Footer/WhiteboardToggle.tsx
668
+ init_define_process_env();
669
+ import React10 from "react";
670
+ import { selectPeerScreenSharing, useHMSStore as useHMSStore3, useWhiteboard } from "@100mslive/react-sdk";
671
+ import { PencilDrawIcon } from "@100mslive/react-icons";
672
+ var WhiteboardToggle = () => {
673
+ const { toggle, open, isOwner } = useWhiteboard();
674
+ const peerSharing = useHMSStore3(selectPeerScreenSharing);
675
+ const disabled = !!peerSharing || open && !isOwner;
676
+ if (!toggle) {
677
+ return null;
678
+ }
679
+ return /* @__PURE__ */ React10.createElement(
680
+ Tooltip,
681
+ {
682
+ key: "whiteboard",
683
+ title: peerSharing ? "Cannot open whiteboard when viewing a shared screen" : `${open ? "Close" : "Open"} Whiteboard`
684
+ },
685
+ /* @__PURE__ */ React10.createElement(
686
+ IconButton_default,
687
+ {
688
+ onClick: () => __async(void 0, null, function* () {
689
+ if (disabled) {
690
+ return;
691
+ }
692
+ try {
693
+ yield toggle();
694
+ } catch (error) {
695
+ ToastManager.addToast({ title: error.message, variant: "error" });
696
+ }
697
+ }),
698
+ active: !open,
699
+ disabled,
700
+ "data-testid": "whiteboard_btn"
701
+ },
702
+ /* @__PURE__ */ React10.createElement(PencilDrawIcon, null)
703
+ )
704
+ );
705
+ };
706
+
707
+ // src/Prebuilt/components/Footer/Footer.tsx
708
+ var Footer2 = ({
709
+ screenType,
710
+ elements
711
+ }) => {
712
+ var _a, _b;
713
+ const isMobile = useMedia(config.media.md);
714
+ const isOverlayChat = !!((_a = elements == null ? void 0 : elements.chat) == null ? void 0 : _a.is_overlay);
715
+ const openByDefault = ((_b = elements == null ? void 0 : elements.chat) == null ? void 0 : _b.initial_state) === Chat_ChatState.CHAT_STATE_OPEN;
716
+ const isChatOpen = useIsSidepaneTypeOpen(SIDE_PANE_OPTIONS.CHAT);
717
+ const toggleChat = useSidepaneToggle(SIDE_PANE_OPTIONS.CHAT);
718
+ const { showPolls } = useShowPolls();
719
+ useEffect2(() => {
720
+ if (!isChatOpen && openByDefault) {
721
+ toggleChat();
722
+ }
723
+ }, [toggleChat, openByDefault]);
724
+ return /* @__PURE__ */ React11.createElement(
725
+ Footer.Root,
726
+ {
727
+ css: {
728
+ flexWrap: "nowrap",
729
+ "@md": {
730
+ justifyContent: "center",
731
+ gap: "$10",
732
+ position: "relative",
733
+ // To prevent it from showing over the sidepane if chat type is not overlay
734
+ zIndex: isOverlayChat && isChatOpen ? 20 : 1
735
+ }
736
+ }
737
+ },
738
+ /* @__PURE__ */ React11.createElement(
739
+ Footer.Left,
740
+ {
741
+ css: {
742
+ "@md": {
743
+ w: "unset",
744
+ p: "0",
745
+ gap: "$10"
746
+ }
747
+ }
748
+ },
749
+ isMobile ? /* @__PURE__ */ React11.createElement(LeaveRoom, { screenType }) : null,
750
+ /* @__PURE__ */ React11.createElement(AudioVideoToggle, null),
751
+ !isMobile && elements.virtual_background ? /* @__PURE__ */ React11.createElement(VBToggle, null) : null
752
+ ),
753
+ /* @__PURE__ */ React11.createElement(
754
+ Footer.Center,
755
+ {
756
+ css: {
757
+ "@md": {
758
+ w: "unset",
759
+ gap: "$10"
760
+ }
761
+ }
762
+ },
763
+ isMobile ? /* @__PURE__ */ React11.createElement(React11.Fragment, null, /* @__PURE__ */ React11.createElement(ScreenshareToggle, null), /* @__PURE__ */ React11.createElement(RaiseHand, null), (elements == null ? void 0 : elements.chat) && /* @__PURE__ */ React11.createElement(ChatToggle, null), /* @__PURE__ */ React11.createElement(MoreSettings, { elements, screenType })) : /* @__PURE__ */ React11.createElement(React11.Fragment, null, /* @__PURE__ */ React11.createElement(ScreenshareToggle, null), /* @__PURE__ */ React11.createElement(RaiseHand, null), screenType !== "hls_live_streaming" && /* @__PURE__ */ React11.createElement(CaptionIcon, null), (elements == null ? void 0 : elements.emoji_reactions) && /* @__PURE__ */ React11.createElement(EmojiReaction, null), /* @__PURE__ */ React11.createElement(LeaveRoom, { screenType }))
764
+ ),
765
+ /* @__PURE__ */ React11.createElement(Footer.Right, null, /* @__PURE__ */ React11.createElement(WhiteboardToggle, null), showPolls && /* @__PURE__ */ React11.createElement(PollsToggle, null), !isMobile && (elements == null ? void 0 : elements.chat) && /* @__PURE__ */ React11.createElement(ChatToggle, null), (elements == null ? void 0 : elements.participant_list) && /* @__PURE__ */ React11.createElement(ParticipantCount, null), /* @__PURE__ */ React11.createElement(MoreSettings, { elements, screenType }))
766
+ );
767
+ };
768
+
769
+ // src/Prebuilt/components/Notifications/HLSFailureModal.tsx
770
+ init_define_process_env();
771
+ import React12, { useCallback, useState as useState3 } from "react";
772
+ import { selectHLSState, useHMSActions, useHMSStore as useHMSStore4, useRecordingStreaming } from "@100mslive/react-sdk";
773
+ function HLSFailureModal() {
774
+ const hlsError = useHMSStore4(selectHLSState).error || false;
775
+ const [openModal, setOpenModal] = useState3(!!hlsError);
776
+ const hmsActions = useHMSActions();
777
+ const { isRTMPRunning } = useRecordingStreaming();
778
+ const [isHLSStarted, setHLSStarted] = useSetAppDataByKey(APP_DATA.hlsStarted);
779
+ const startHLS = useCallback(() => __async(this, null, function* () {
780
+ try {
781
+ if (isHLSStarted || isRTMPRunning) {
782
+ return;
783
+ }
784
+ setHLSStarted(true);
785
+ yield hmsActions.startHLSStreaming({});
786
+ } catch (error) {
787
+ console.error(error);
788
+ setHLSStarted(false);
789
+ }
790
+ }), [hmsActions, isHLSStarted, setHLSStarted, isRTMPRunning]);
791
+ return hlsError ? /* @__PURE__ */ React12.createElement(
792
+ Dialog.Root,
793
+ {
794
+ open: openModal,
795
+ onOpenChange: (value) => {
796
+ if (!value) {
797
+ setOpenModal(false);
798
+ }
799
+ }
800
+ },
801
+ /* @__PURE__ */ React12.createElement(Dialog.Portal, null, /* @__PURE__ */ React12.createElement(Dialog.Overlay, null), /* @__PURE__ */ React12.createElement(Dialog.Content, { css: { w: "min(360px, 90%)" } }, /* @__PURE__ */ React12.createElement(
802
+ Dialog.Title,
803
+ {
804
+ css: {
805
+ display: "flex",
806
+ alignItems: "center",
807
+ justifyContent: "space-between",
808
+ borderBottom: "1px solid $border_default",
809
+ mt: "$4"
810
+ }
811
+ },
812
+ /* @__PURE__ */ React12.createElement(Text, { variant: "h6", css: { fontWeight: "$semiBold" } }, "Failed to Go Live")
813
+ ), /* @__PURE__ */ React12.createElement(Text, { variant: "sm", css: { mb: "$10", color: "$on_surface_medium" } }, "Something went wrong and your live broadcast failed. Please try again."), /* @__PURE__ */ React12.createElement(Flex, { align: "center", justify: "between", css: { w: "100%", gap: "$8" } }, /* @__PURE__ */ React12.createElement(Button, { outlined: true, variant: "standard", css: { w: "100%" }, onClick: () => setOpenModal(false) }, "Dismiss"), /* @__PURE__ */ React12.createElement(Button, { css: { w: "100%" }, onClick: startHLS }, "Go Live"))))
814
+ ) : null;
815
+ }
816
+
817
+ // src/Prebuilt/components/RoleChangeRequest/RoleChangeRequestModal.tsx
818
+ init_define_process_env();
819
+ import React14, { useEffect as useEffect3 } from "react";
820
+ import {
821
+ selectIsInPreview,
822
+ selectLocalPeerName,
823
+ selectLocalPeerRoleName,
824
+ selectRoleChangeRequest,
825
+ useCustomEvent,
826
+ useHMSActions as useHMSActions2,
827
+ useHMSStore as useHMSStore5
828
+ } from "@100mslive/react-sdk";
829
+
830
+ // src/Prebuilt/components/RoleChangeRequest/RequestPrompt.tsx
831
+ init_define_process_env();
832
+ import React13 from "react";
833
+ import { useMedia as useMedia2 } from "react-use";
834
+ var RequestPrompt = ({
835
+ open = true,
836
+ onOpenChange,
837
+ title,
838
+ body,
839
+ actionText = "Accept",
840
+ onAction,
841
+ disableActions = false
842
+ }) => {
843
+ const isMobile = useMedia2(config.media.md);
844
+ if (isMobile) {
845
+ return /* @__PURE__ */ React13.createElement(Sheet.Root, { open, onOpenChange }, /* @__PURE__ */ React13.createElement(Sheet.Content, { css: { py: "$8" } }, /* @__PURE__ */ React13.createElement(Text, { css: { fontWeight: "$semiBold", c: "$on_surface_high", "@md": { px: "$8" } } }, title), body, /* @__PURE__ */ React13.createElement(RequestActions, { actionText, onAction, disabled: disableActions })));
846
+ }
847
+ return /* @__PURE__ */ React13.createElement(Dialog.Root, { open, modal: false, onOpenChange }, /* @__PURE__ */ React13.createElement(Dialog.Portal, null, /* @__PURE__ */ React13.createElement(Dialog.Content, { css: { p: "$10" }, onInteractOutside: (e) => e.preventDefault() }, /* @__PURE__ */ React13.createElement(Dialog.Title, { css: { p: 0, display: "flex", flexDirection: "row", gap: "$md", justifyContent: "center" } }, /* @__PURE__ */ React13.createElement(Text, { variant: "h6" }, title)), /* @__PURE__ */ React13.createElement(Box, { css: { mt: "$4", mb: "$10" } }, body), /* @__PURE__ */ React13.createElement(RequestActions, { actionText, onAction, disabled: disableActions }))));
848
+ };
849
+ var RequestActions = ({
850
+ onAction,
851
+ actionText,
852
+ disabled = false
853
+ }) => /* @__PURE__ */ React13.createElement(Flex, { justify: "center", align: "center", css: { width: "100%", gap: "$md", "@md": { mt: "$8", px: "$8" } } }, /* @__PURE__ */ React13.createElement(Box, { css: { width: "50%" } }, /* @__PURE__ */ React13.createElement(Dialog.Close, { css: { width: "100%", height: "100%" }, asChild: true }, /* @__PURE__ */ React13.createElement(Button, { variant: "standard", outlined: true, css: { width: "100%", p: "$4 $8" }, disabled }, "Decline"))), /* @__PURE__ */ React13.createElement(Box, { css: { width: "50%" } }, /* @__PURE__ */ React13.createElement(Button, { variant: "primary", css: { width: "100%" }, onClick: onAction, disabled }, actionText)));
854
+
855
+ // src/Prebuilt/components/RoleChangeRequest/RoleChangeRequestModal.tsx
856
+ var RoleChangeRequestModal = () => {
857
+ const hmsActions = useHMSActions2();
858
+ const { updateMetaData } = useMyMetadata();
859
+ const isPreview = useHMSStore5(selectIsInPreview);
860
+ const currentRole = useHMSStore5(selectLocalPeerRoleName);
861
+ const roleChangeRequest = useHMSStore5(selectRoleChangeRequest);
862
+ const name = useHMSStore5(selectLocalPeerName);
863
+ const { sendEvent } = useCustomEvent({ type: ROLE_CHANGE_DECLINED });
864
+ const { elements = {} } = useRoomLayoutPreviewScreen();
865
+ const { virtual_background } = elements || {};
866
+ useEffect3(() => {
867
+ if (!(roleChangeRequest == null ? void 0 : roleChangeRequest.role)) {
868
+ return;
869
+ }
870
+ (() => __async(void 0, null, function* () {
871
+ yield hmsActions.preview({ asRole: roleChangeRequest.role.name });
872
+ }))();
873
+ }, [hmsActions, roleChangeRequest, currentRole, updateMetaData]);
874
+ if (!(roleChangeRequest == null ? void 0 : roleChangeRequest.role)) {
875
+ return null;
876
+ }
877
+ const body = /* @__PURE__ */ React14.createElement(React14.Fragment, null, /* @__PURE__ */ React14.createElement(
878
+ Text,
879
+ {
880
+ variant: "xs",
881
+ css: {
882
+ c: "$on_surface_medium",
883
+ textAlign: "center",
884
+ "@md": { textAlign: "left", borderBottom: "1px solid $border_bright", pb: "$4", px: "$8" }
885
+ }
886
+ },
887
+ "Setup your audio and video before joining"
888
+ ), /* @__PURE__ */ React14.createElement(
889
+ Flex,
890
+ {
891
+ align: "center",
892
+ justify: "center",
893
+ css: {
894
+ "@sm": { width: "100%" },
895
+ flexDirection: "column",
896
+ mt: "$6",
897
+ "@md": { px: "$8" }
898
+ }
899
+ },
900
+ /* @__PURE__ */ React14.createElement(PreviewTile, { name: name || "" }),
901
+ /* @__PURE__ */ React14.createElement(PreviewControls, { hideSettings: true, vbEnabled: !!virtual_background })
902
+ ));
903
+ return /* @__PURE__ */ React14.createElement(
904
+ RequestPrompt,
905
+ {
906
+ title: "You're invited to join the stage",
907
+ onOpenChange: (value) => __async(void 0, null, function* () {
908
+ var _a;
909
+ if (!value) {
910
+ hmsActions.rejectChangeRole(roleChangeRequest);
911
+ sendEvent(__spreadProps(__spreadValues({}, roleChangeRequest), { peerName: name }), { peerId: (_a = roleChangeRequest.requestedBy) == null ? void 0 : _a.id });
912
+ yield hmsActions.cancelMidCallPreview();
913
+ yield hmsActions.lowerLocalPeerHand();
914
+ }
915
+ }),
916
+ body,
917
+ onAction: () => __async(void 0, null, function* () {
918
+ yield hmsActions.acceptChangeRole(roleChangeRequest);
919
+ yield updateMetaData({ prevRole: currentRole });
920
+ yield hmsActions.lowerLocalPeerHand();
921
+ }),
922
+ actionText: "Accept",
923
+ disableActions: !isPreview
924
+ }
925
+ );
926
+ };
927
+
928
+ // src/Prebuilt/layouts/VideoStreamingSection.tsx
929
+ init_define_process_env();
930
+ import React18, { Suspense as Suspense2, useEffect as useEffect8, useState as useState7 } from "react";
931
+ import { useMedia as useMedia5 } from "react-use";
932
+ import { match } from "ts-pattern";
933
+ import {
934
+ selectIsConnectedToRoom,
935
+ selectIsLocalScreenShared,
936
+ selectLocalPeerRoleName as selectLocalPeerRoleName3,
937
+ useHMSActions as useHMSActions3,
938
+ useHMSStore as useHMSStore9
939
+ } from "@100mslive/react-sdk";
940
+ import { PeopleAddIcon as PeopleAddIcon2, ShareScreenIcon as ShareScreenIcon2 } from "@100mslive/react-icons";
941
+
942
+ // src/Prebuilt/components/VideoLayouts/GridLayout.tsx
943
+ init_define_process_env();
944
+ import React16, { Suspense, useEffect as useEffect5, useMemo, useState as useState5 } from "react";
945
+ import {
946
+ selectLocalPeerID,
947
+ selectLocalPeerRoleName as selectLocalPeerRoleName2,
948
+ selectPeers,
949
+ selectPeerScreenSharing as selectPeerScreenSharing2,
950
+ selectWhiteboard,
951
+ useHMSStore as useHMSStore6,
952
+ useHMSVanillaStore
953
+ } from "@100mslive/react-sdk";
954
+
955
+ // src/Prebuilt/components/VideoLayouts/EqualProminence.tsx
956
+ init_define_process_env();
957
+ import React15, { useEffect as useEffect4, useState as useState4 } from "react";
958
+ import { useMedia as useMedia3 } from "react-use";
959
+ import { PeopleAddIcon } from "@100mslive/react-icons";
960
+ function EqualProminence({ isInsetEnabled = false, peers, onPageChange, onPageSize, edgeToEdge }) {
961
+ var _a;
962
+ const isMobile = useMedia3(config.media.md);
963
+ let maxTileCount = useUISettings(UI_SETTINGS.maxTileCount);
964
+ maxTileCount = isMobile ? Math.min(maxTileCount, 6) : maxTileCount;
965
+ const pageList = usePagesWithTiles({
966
+ peers,
967
+ maxTileCount
968
+ });
969
+ const { ref, pagesWithTiles } = useTileLayout({
970
+ pageList,
971
+ maxTileCount,
972
+ edgeToEdge
973
+ });
974
+ const [page, setPage] = useState4(0);
975
+ const pageSize = ((_a = pagesWithTiles[0]) == null ? void 0 : _a.length) || 0;
976
+ useEffect4(() => {
977
+ if (pageSize > 0) {
978
+ onPageSize == null ? void 0 : onPageSize(pageSize);
979
+ }
980
+ }, [pageSize, onPageSize]);
981
+ return /* @__PURE__ */ React15.createElement(Flex, { direction: "column", css: { flex: "1 1 0", h: "100%", position: "relative", minWidth: 0 } }, /* @__PURE__ */ React15.createElement(Grid, { tiles: pagesWithTiles[page], ref, edgeToEdge }), !edgeToEdge && /* @__PURE__ */ React15.createElement(
982
+ Pagination,
983
+ {
984
+ page,
985
+ onPageChange: (page2) => {
986
+ setPage(page2);
987
+ onPageChange == null ? void 0 : onPageChange(page2);
988
+ },
989
+ numPages: pagesWithTiles.length
990
+ }
991
+ ), pageList.length === 0 ? /* @__PURE__ */ React15.createElement(
992
+ WaitingView,
993
+ {
994
+ title: "You're the only one here",
995
+ subtitle: "Sit back and relax till others join",
996
+ icon: /* @__PURE__ */ React15.createElement(PeopleAddIcon, { width: "56px", height: "56px", style: { color: "white" } })
997
+ }
998
+ ) : null, isInsetEnabled && /* @__PURE__ */ React15.createElement(InsetTile, null));
999
+ }
1000
+
1001
+ // src/Prebuilt/common/PeersSorter.ts
1002
+ init_define_process_env();
1003
+ import { selectDominantSpeaker } from "@100mslive/react-sdk";
1004
+ var PeersSorter = class {
1005
+ constructor(store) {
1006
+ this.storeUnsubscribe = void 0;
1007
+ this.setPeersAndTilesPerPage = ({ peers, tilesPerPage }) => {
1008
+ this.speaker = void 0;
1009
+ this.tilesPerPage = tilesPerPage;
1010
+ const peerIds = new Set(peers.map((peer) => peer.id));
1011
+ this.peers.forEach((_, key) => {
1012
+ if (!peerIds.has(key)) {
1013
+ this.peers.delete(key);
1014
+ }
1015
+ });
1016
+ this.lruPeers = new Set([...this.lruPeers].filter((peerId) => peerIds.has(peerId)));
1017
+ peers.forEach((peer) => {
1018
+ this.peers.set(peer.id, peer);
1019
+ if (this.lruPeers.size < tilesPerPage) {
1020
+ this.lruPeers.add(peer.id);
1021
+ }
1022
+ });
1023
+ if (!this.storeUnsubscribe) {
1024
+ this.storeUnsubscribe = this.store.subscribe(this.onDominantSpeakerChange, selectDominantSpeaker);
1025
+ }
1026
+ this.moveSpeakerToFront(this.speaker);
1027
+ };
1028
+ this.onUpdate = (cb) => {
1029
+ this.listeners.add(cb);
1030
+ };
1031
+ this.stop = () => {
1032
+ var _a;
1033
+ this.updateListeners();
1034
+ this.listeners.clear();
1035
+ (_a = this.storeUnsubscribe) == null ? void 0 : _a.call(this);
1036
+ this.storeUnsubscribe = void 0;
1037
+ this.speaker = void 0;
1038
+ };
1039
+ this.moveSpeakerToFront = (speaker) => {
1040
+ if (!speaker) {
1041
+ this.maintainLruSize(this.tilesPerPage);
1042
+ this.updateListeners();
1043
+ return;
1044
+ }
1045
+ if (this.lruPeers.has(speaker.id) && this.lruPeers.size <= this.tilesPerPage) {
1046
+ this.updateListeners();
1047
+ return;
1048
+ }
1049
+ this.lruPeers.delete(speaker.id);
1050
+ this.maintainLruSize(this.tilesPerPage - 1);
1051
+ this.lruPeers = /* @__PURE__ */ new Set([speaker.id, ...this.lruPeers]);
1052
+ this.updateListeners();
1053
+ };
1054
+ this.onDominantSpeakerChange = (speaker) => {
1055
+ var _a;
1056
+ if (!speaker || speaker.id === ((_a = this.speaker) == null ? void 0 : _a.id)) {
1057
+ return;
1058
+ }
1059
+ if (!this.peers.has(speaker.id)) {
1060
+ return;
1061
+ }
1062
+ this.speaker = speaker;
1063
+ this.moveSpeakerToFront(speaker);
1064
+ };
1065
+ this.updateListeners = () => {
1066
+ const orderedPeers = [];
1067
+ this.lruPeers.forEach((key) => {
1068
+ const peer = this.peers.get(key);
1069
+ if (peer) {
1070
+ orderedPeers.push(peer);
1071
+ }
1072
+ });
1073
+ this.peers.forEach((peer) => {
1074
+ if (!this.lruPeers.has(peer.id) && peer) {
1075
+ orderedPeers.push(peer);
1076
+ }
1077
+ });
1078
+ this.listeners.forEach((listener) => listener == null ? void 0 : listener(orderedPeers));
1079
+ };
1080
+ this.maintainLruSize = (size) => {
1081
+ const lruPeerArray = Array.from(this.lruPeers);
1082
+ while (lruPeerArray.length > size && lruPeerArray.length) {
1083
+ lruPeerArray.pop();
1084
+ }
1085
+ this.lruPeers = new Set(lruPeerArray);
1086
+ };
1087
+ this.store = store;
1088
+ this.peers = /* @__PURE__ */ new Map();
1089
+ this.lruPeers = /* @__PURE__ */ new Set();
1090
+ this.speaker = void 0;
1091
+ this.listeners = /* @__PURE__ */ new Set();
1092
+ }
1093
+ };
1094
+ var PeersSorter_default = PeersSorter;
1095
+
1096
+ // src/Prebuilt/components/VideoLayouts/GridLayout.tsx
1097
+ var RoleProminence = React16.lazy(
1098
+ () => import("./RoleProminence-235AFT7F.js").then((module) => ({ default: module.RoleProminence }))
1099
+ );
1100
+ var ScreenshareLayout = React16.lazy(
1101
+ () => import("./ScreenshareLayout-PSQMS3NC.js").then((module) => ({ default: module.ScreenshareLayout }))
1102
+ );
1103
+ var WhiteboardLayout = React16.lazy(
1104
+ () => import("./WhiteboardLayout-4YLFM3EY.js").then((module) => ({ default: module.WhiteboardLayout }))
1105
+ );
1106
+ var GridLayout = ({
1107
+ enable_local_tile_inset: isInsetEnabled = false,
1108
+ prominent_roles: prominentRoles = [],
1109
+ enable_spotlighting_peer = false,
1110
+ hide_participant_name_on_tile = false,
1111
+ rounded_video_tile = true,
1112
+ hide_audio_mute_on_tile = false,
1113
+ video_object_fit = "contain",
1114
+ edge_to_edge = false,
1115
+ hide_metadata_on_tile = false
1116
+ }) => {
1117
+ const peerSharing = useHMSStore6(selectPeerScreenSharing2);
1118
+ const whiteboard = useHMSStore6(selectWhiteboard);
1119
+ const pinnedTrack = usePinnedTrack();
1120
+ const peers = useHMSStore6(selectPeers);
1121
+ const localPeerRole = useHMSStore6(selectLocalPeerRoleName2);
1122
+ const localPeerID = useHMSStore6(selectLocalPeerID);
1123
+ const [activeScreensharePeerId] = useSetAppDataByKey(APP_DATA.activeScreensharePeerId);
1124
+ const isRoleProminence = prominentRoles.length && peers.some(
1125
+ (peer) => peer.roleName && prominentRoles.includes(peer.roleName) && (peer.videoTrack || peer.audioTrack)
1126
+ ) || pinnedTrack;
1127
+ const updatedPeers = useMemo(() => {
1128
+ if (activeScreensharePeerId || (whiteboard == null ? void 0 : whiteboard.open)) {
1129
+ return peers.filter((peer) => peer.id !== activeScreensharePeerId || peer.customerUserId !== (whiteboard == null ? void 0 : whiteboard.owner));
1130
+ }
1131
+ if (isInsetEnabled) {
1132
+ const isLocalPeerPinned = localPeerID === (pinnedTrack == null ? void 0 : pinnedTrack.peerId);
1133
+ if (localPeerRole && prominentRoles.includes(localPeerRole) || isLocalPeerPinned) {
1134
+ return peers;
1135
+ } else {
1136
+ return peers.filter((peer) => !peer.isLocal);
1137
+ }
1138
+ }
1139
+ return peers;
1140
+ }, [
1141
+ isInsetEnabled,
1142
+ whiteboard,
1143
+ activeScreensharePeerId,
1144
+ localPeerRole,
1145
+ localPeerID,
1146
+ prominentRoles,
1147
+ peers,
1148
+ pinnedTrack
1149
+ ]);
1150
+ const vanillaStore = useHMSVanillaStore();
1151
+ const [sortedPeers, setSortedPeers] = useState5(updatedPeers);
1152
+ const peersSorter = useMemo(() => new PeersSorter_default(vanillaStore), [vanillaStore]);
1153
+ const [pageSize, setPageSize] = useState5(0);
1154
+ const [mainPage, setMainPage] = useState5(0);
1155
+ const tileLayout = {
1156
+ enableSpotlightingPeer: enable_spotlighting_peer,
1157
+ hideParticipantNameOnTile: hide_participant_name_on_tile,
1158
+ roundedVideoTile: rounded_video_tile,
1159
+ hideAudioMuteOnTile: hide_audio_mute_on_tile,
1160
+ hideMetadataOnTile: hide_metadata_on_tile,
1161
+ objectFit: video_object_fit
1162
+ };
1163
+ useEffect5(() => {
1164
+ if (mainPage !== 0) {
1165
+ return;
1166
+ }
1167
+ peersSorter.setPeersAndTilesPerPage({
1168
+ peers: updatedPeers,
1169
+ tilesPerPage: pageSize
1170
+ });
1171
+ peersSorter.onUpdate(setSortedPeers);
1172
+ }, [mainPage, peersSorter, updatedPeers, pageSize]);
1173
+ if (peerSharing) {
1174
+ return /* @__PURE__ */ React16.createElement(Suspense, { fallback: /* @__PURE__ */ React16.createElement(FullPageProgress_default, null) }, /* @__PURE__ */ React16.createElement(VideoTileContext.Provider, { value: tileLayout }, /* @__PURE__ */ React16.createElement(
1175
+ ScreenshareLayout,
1176
+ {
1177
+ peers: sortedPeers,
1178
+ onPageSize: setPageSize,
1179
+ onPageChange: setMainPage,
1180
+ edgeToEdge: edge_to_edge
1181
+ }
1182
+ )));
1183
+ } else if (whiteboard == null ? void 0 : whiteboard.open) {
1184
+ return /* @__PURE__ */ React16.createElement(Suspense, { fallback: /* @__PURE__ */ React16.createElement(FullPageProgress_default, null) }, /* @__PURE__ */ React16.createElement(VideoTileContext.Provider, { value: tileLayout }, /* @__PURE__ */ React16.createElement(
1185
+ WhiteboardLayout,
1186
+ {
1187
+ peers: sortedPeers,
1188
+ onPageSize: setPageSize,
1189
+ onPageChange: setMainPage,
1190
+ edgeToEdge: edge_to_edge
1191
+ }
1192
+ )));
1193
+ } else if (isRoleProminence) {
1194
+ return /* @__PURE__ */ React16.createElement(Suspense, { fallback: /* @__PURE__ */ React16.createElement(FullPageProgress_default, null) }, /* @__PURE__ */ React16.createElement(VideoTileContext.Provider, { value: tileLayout }, /* @__PURE__ */ React16.createElement(
1195
+ RoleProminence,
1196
+ {
1197
+ peers: sortedPeers,
1198
+ onPageSize: setPageSize,
1199
+ onPageChange: setMainPage,
1200
+ prominentRoles,
1201
+ isInsetEnabled,
1202
+ edgeToEdge: edge_to_edge
1203
+ }
1204
+ )));
1205
+ }
1206
+ return /* @__PURE__ */ React16.createElement(VideoTileContext.Provider, { value: tileLayout }, /* @__PURE__ */ React16.createElement(
1207
+ EqualProminence,
1208
+ {
1209
+ peers: sortedPeers,
1210
+ onPageSize: setPageSize,
1211
+ onPageChange: setMainPage,
1212
+ isInsetEnabled,
1213
+ edgeToEdge: edge_to_edge
1214
+ }
1215
+ ));
1216
+ };
1217
+
1218
+ // src/Prebuilt/plugins/CaptionsViewer.tsx
1219
+ init_define_process_env();
1220
+ import React17, { useEffect as useEffect6, useRef, useState as useState6 } from "react";
1221
+ import Draggable from "react-draggable";
1222
+ import { useMedia as useMedia4 } from "react-use";
1223
+ import {
1224
+ selectIsTranscriptionEnabled as selectIsTranscriptionEnabled2,
1225
+ selectPeerNameByID,
1226
+ useHMSStore as useHMSStore7,
1227
+ useTranscript
1228
+ } from "@100mslive/react-sdk";
1229
+ var SimpleQueue = class {
1230
+ constructor(capacity = 3, MAX_STORAGE_TIME = 5e3) {
1231
+ this.capacity = capacity;
1232
+ this.MAX_STORAGE_TIME = MAX_STORAGE_TIME;
1233
+ this.storage = [];
1234
+ }
1235
+ enqueue(data) {
1236
+ var _a;
1237
+ if (!data.transcript.trim()) {
1238
+ return;
1239
+ }
1240
+ if (this.size() === this.capacity && this.storage[this.size() - 1].final) {
1241
+ this.dequeue(this.storage[this.size() - 1]);
1242
+ }
1243
+ if (this.size() === 0) {
1244
+ this.storage.push(data);
1245
+ this.addTimeout(this.storage[this.size() - 1], data.final);
1246
+ return;
1247
+ }
1248
+ if (this.size() > 0 && ((_a = this.storage[this.size() - 1]) == null ? void 0 : _a.final) === true) {
1249
+ this.storage.push(data);
1250
+ this.addTimeout(this.storage[this.size() - 1], data.final);
1251
+ return;
1252
+ }
1253
+ this.storage[this.size() - 1].transcript = data.transcript;
1254
+ this.storage[this.size() - 1].final = data.final;
1255
+ this.storage[this.size() - 1].end = data.end;
1256
+ this.addTimeout(this.storage[this.size() - 1], data.final);
1257
+ }
1258
+ addTimeout(item, isFinal) {
1259
+ if (!isFinal) {
1260
+ return;
1261
+ }
1262
+ item.timeout = setTimeout(() => {
1263
+ this.dequeue(item);
1264
+ }, this.MAX_STORAGE_TIME);
1265
+ }
1266
+ dequeue(item) {
1267
+ const index = this.storage.indexOf(item);
1268
+ if (index === -1) {
1269
+ return void 0;
1270
+ }
1271
+ const removedItem = this.storage.splice(index, 1);
1272
+ if (removedItem.length <= 0) {
1273
+ return void 0;
1274
+ }
1275
+ this.clearTimeout(removedItem[0]);
1276
+ return item;
1277
+ }
1278
+ clearTimeout(item) {
1279
+ if (!item.timeout) {
1280
+ return;
1281
+ }
1282
+ clearTimeout(item.timeout);
1283
+ }
1284
+ peek() {
1285
+ if (this.size() <= 0) {
1286
+ return void 0;
1287
+ }
1288
+ return this.storage[0];
1289
+ }
1290
+ getTranscription() {
1291
+ let script = "";
1292
+ this.storage.forEach((value) => script += value.transcript + " ");
1293
+ return script;
1294
+ }
1295
+ reset() {
1296
+ this.storage.length = 0;
1297
+ }
1298
+ size() {
1299
+ return this.storage.length;
1300
+ }
1301
+ };
1302
+ var Queue = class {
1303
+ constructor(capacity = 3) {
1304
+ this.capacity = capacity;
1305
+ this.storage = {};
1306
+ }
1307
+ enqueue(data) {
1308
+ if (this.size() === this.capacity) {
1309
+ this.dequeue();
1310
+ }
1311
+ if (!this.storage[data.peer_id]) {
1312
+ this.storage[data.peer_id] = {
1313
+ peer_id: data.peer_id,
1314
+ transcript: data.transcript,
1315
+ final: data.final,
1316
+ transcriptQueue: new SimpleQueue(),
1317
+ start: data.start,
1318
+ end: data.end
1319
+ };
1320
+ this.storage[data.peer_id].transcriptQueue.enqueue(data);
1321
+ return;
1322
+ }
1323
+ this.storage[data.peer_id].transcriptQueue.enqueue(data);
1324
+ }
1325
+ dequeue() {
1326
+ const key = Object.keys(this.storage).shift() || "";
1327
+ const captionData = this.storage[key];
1328
+ captionData.transcriptQueue.reset();
1329
+ delete this.storage[key];
1330
+ return captionData;
1331
+ }
1332
+ peek() {
1333
+ if (this.size() <= 0)
1334
+ return void 0;
1335
+ const key = Object.keys(this.storage).shift() || "";
1336
+ return this.storage[key];
1337
+ }
1338
+ findPeerData() {
1339
+ const keys = Object.keys(this.storage);
1340
+ const data = keys.map((key) => {
1341
+ const data2 = this.storage[key];
1342
+ const word = data2.transcriptQueue.getTranscription();
1343
+ return { [key]: word };
1344
+ });
1345
+ return data;
1346
+ }
1347
+ size() {
1348
+ return Object.keys(this.storage).length;
1349
+ }
1350
+ };
1351
+ var CaptionMaintainerQueue = class {
1352
+ constructor() {
1353
+ this.captionData = new Queue();
1354
+ }
1355
+ push(data = []) {
1356
+ data.forEach((value) => {
1357
+ this.captionData.enqueue(value);
1358
+ });
1359
+ }
1360
+ };
1361
+ var TranscriptView = ({ peer_id, data }) => {
1362
+ const peerName = useHMSStore7(selectPeerNameByID(peer_id)) || "Participant";
1363
+ data = data.trim();
1364
+ if (!data)
1365
+ return null;
1366
+ return /* @__PURE__ */ React17.createElement(
1367
+ Text,
1368
+ {
1369
+ variant: "body2",
1370
+ css: {
1371
+ fontWeight: "$normal"
1372
+ }
1373
+ },
1374
+ /* @__PURE__ */ React17.createElement("b", null, peerName, ": "),
1375
+ data
1376
+ );
1377
+ };
1378
+ var CaptionsViewer = ({
1379
+ defaultPosition,
1380
+ setDefaultPosition
1381
+ }) => {
1382
+ var _a;
1383
+ const { elements, screenType } = useRoomLayoutConferencingScreen();
1384
+ const isMobile = useMedia4(config.media.md);
1385
+ const isChatOpen = useIsSidepaneTypeOpen(SIDE_PANE_OPTIONS.CHAT);
1386
+ const showCaptionAtTop = ((_a = elements == null ? void 0 : elements.chat) == null ? void 0 : _a.is_overlay) && isChatOpen && isMobile;
1387
+ const [captionQueue] = useState6(new CaptionMaintainerQueue());
1388
+ const [currentData, setCurrentData] = useState6([]);
1389
+ const isCaptionEnabled = useIsCaptionEnabled();
1390
+ const isTranscriptionEnabled = useHMSStore7(selectIsTranscriptionEnabled2);
1391
+ const nodeRef = useRef(null);
1392
+ useEffect6(() => {
1393
+ const timeInterval = setInterval(() => {
1394
+ var _a2;
1395
+ if (!captionQueue) {
1396
+ return;
1397
+ }
1398
+ const data = (_a2 = captionQueue.captionData) == null ? void 0 : _a2.findPeerData();
1399
+ setCurrentData(data);
1400
+ }, 1e3);
1401
+ return () => clearInterval(timeInterval);
1402
+ }, [captionQueue]);
1403
+ useTranscript({
1404
+ onTranscript: (data) => {
1405
+ captionQueue && captionQueue.push(data);
1406
+ }
1407
+ });
1408
+ const dataToShow = currentData.filter((data) => {
1409
+ const key = Object.keys(data)[0];
1410
+ if (data[key]) {
1411
+ return true;
1412
+ }
1413
+ return false;
1414
+ });
1415
+ if (dataToShow.length <= 0 || screenType === "hls_live_streaming" || !isCaptionEnabled || !isTranscriptionEnabled) {
1416
+ return null;
1417
+ }
1418
+ return /* @__PURE__ */ React17.createElement(
1419
+ Draggable,
1420
+ {
1421
+ bounds: "parent",
1422
+ nodeRef,
1423
+ defaultPosition,
1424
+ onStop: (_, data) => {
1425
+ setDefaultPosition({ x: data.lastX, y: data.lastY });
1426
+ }
1427
+ },
1428
+ /* @__PURE__ */ React17.createElement(
1429
+ Box,
1430
+ {
1431
+ ref: nodeRef,
1432
+ css: {
1433
+ position: "absolute",
1434
+ w: isMobile ? "100%" : "40%",
1435
+ bottom: showCaptionAtTop ? "" : "0",
1436
+ top: showCaptionAtTop ? "0" : "",
1437
+ left: isMobile ? 0 : "50%",
1438
+ transform: isMobile ? "" : "translateX(-50%)",
1439
+ background: "#000000A3",
1440
+ overflow: "clip",
1441
+ zIndex: 10,
1442
+ height: "fit-content",
1443
+ r: "$1",
1444
+ p: "$6",
1445
+ transition: "bottom 0.3s ease-in-out",
1446
+ "&:empty": { display: "none" }
1447
+ }
1448
+ },
1449
+ /* @__PURE__ */ React17.createElement(Flex, { direction: "column" }, dataToShow.map((data, index) => {
1450
+ const key = Object.keys(data)[0];
1451
+ return /* @__PURE__ */ React17.createElement(TranscriptView, { key: index, peer_id: key, data: data[key] });
1452
+ }))
1453
+ )
1454
+ );
1455
+ };
1456
+
1457
+ // src/Prebuilt/components/hooks/useCloseScreenshareWhiteboard.tsx
1458
+ init_define_process_env();
1459
+ import { useEffect as useEffect7 } from "react";
1460
+ import { selectPeerScreenSharing as selectPeerScreenSharing3, useHMSStore as useHMSStore8, useWhiteboard as useWhiteboard2 } from "@100mslive/react-sdk";
1461
+ var useCloseScreenshareWhiteboard = () => {
1462
+ const peerSharing = useHMSStore8(selectPeerScreenSharing3);
1463
+ const { isOwner: isWhiteboardOwner, toggle: toggleWhiteboard } = useWhiteboard2();
1464
+ useEffect7(() => {
1465
+ if (isWhiteboardOwner && peerSharing) {
1466
+ toggleWhiteboard == null ? void 0 : toggleWhiteboard();
1467
+ }
1468
+ }, [isWhiteboardOwner, toggleWhiteboard, peerSharing]);
1469
+ };
1470
+
1471
+ // src/Prebuilt/layouts/VideoStreamingSection.tsx
1472
+ var HLSView = React18.lazy(() => import("./HLSView-Q6GEB3UM.js"));
1473
+ var EmbedView = React18.lazy(() => import("./EmbedView-DDSO7ZCV.js").then((module) => ({ default: module.EmbedView })));
1474
+ var PDFView = React18.lazy(() => import("./PDFView-ZFSG2ESE.js").then((module) => ({ default: module.PDFView })));
1475
+ var WaitingView2 = React18.lazy(() => import("./WaitingView-NZIUOXBI.js").then((module) => ({ default: module.WaitingView })));
1476
+ var VideoStreamingSection = ({
1477
+ screenType,
1478
+ elements,
1479
+ hideControls = false
1480
+ }) => {
1481
+ var _a;
1482
+ const localPeerRoleName = useHMSStore9(selectLocalPeerRoleName3);
1483
+ const isConnected = useHMSStore9(selectIsConnectedToRoom);
1484
+ const isSharingScreen = useHMSStore9(selectIsLocalScreenShared);
1485
+ const hmsActions = useHMSActions3();
1486
+ const urlToIframe = useUrlToEmbed();
1487
+ const pdfAnnotatorActive = usePDFConfig();
1488
+ const isMobileHLSStream = useMobileHLSStream();
1489
+ const isLandscapeHLSStream = useLandscapeHLSStream();
1490
+ const isMobile = useMedia5(config.media.md);
1491
+ const [captionPosition, setCaptionPosition] = useState7({ x: isMobile ? 0 : -200, y: 0 });
1492
+ useCloseScreenshareWhiteboard();
1493
+ const { isNotAllowedToPublish, isScreenOnlyPublishParams, hasSubscribedRolePublishing } = useWaitingRoomInfo();
1494
+ useEffect8(() => {
1495
+ if (!isConnected) {
1496
+ return;
1497
+ }
1498
+ hmsActions.sessionStore.observe([
1499
+ "pinnedMessages" /* PINNED_MESSAGES */,
1500
+ "spotlight" /* SPOTLIGHT */,
1501
+ "chatState" /* CHAT_STATE */,
1502
+ "chatMessageBlacklist" /* CHAT_MESSAGE_BLACKLIST */,
1503
+ "chatPeerBlacklist" /* CHAT_PEER_BLACKLIST */
1504
+ ]);
1505
+ }, [isConnected, hmsActions]);
1506
+ if (!localPeerRoleName) {
1507
+ return null;
1508
+ }
1509
+ return /* @__PURE__ */ React18.createElement(
1510
+ Flex,
1511
+ {
1512
+ css: {
1513
+ size: "100%",
1514
+ position: "relative",
1515
+ gap: isMobileHLSStream || isLandscapeHLSStream ? "0" : "$4"
1516
+ },
1517
+ direction: match({ isLandscapeHLSStream, isMobileHLSStream }).with({ isLandscapeHLSStream: true }, () => "row").with({ isMobileHLSStream: true }, () => "column").otherwise(() => "row")
1518
+ },
1519
+ /* @__PURE__ */ React18.createElement(Suspense2, { fallback: /* @__PURE__ */ React18.createElement(FullPageProgress_default, null) }, match({
1520
+ screenType,
1521
+ isNotAllowedToPublish,
1522
+ isScreenOnlyPublishParams,
1523
+ hasSubscribedRolePublishing,
1524
+ isSharingScreen,
1525
+ pdfAnnotatorActive,
1526
+ urlToIframe
1527
+ }).with(
1528
+ {
1529
+ screenType: "hls_live_streaming"
1530
+ },
1531
+ () => /* @__PURE__ */ React18.createElement(HLSView, null)
1532
+ ).when(
1533
+ ({ isNotAllowedToPublish: isNotAllowedToPublish2, hasSubscribedRolePublishing: hasSubscribedRolePublishing2 }) => isNotAllowedToPublish2 && !hasSubscribedRolePublishing2,
1534
+ () => /* @__PURE__ */ React18.createElement(
1535
+ WaitingView2,
1536
+ {
1537
+ title: "Waiting for Host to join",
1538
+ subtitle: "Sit back and relax",
1539
+ icon: /* @__PURE__ */ React18.createElement(PeopleAddIcon2, { width: "56px", height: "56px", style: { color: "white" } })
1540
+ }
1541
+ )
1542
+ ).when(
1543
+ ({ isScreenOnlyPublishParams: isScreenOnlyPublishParams2, isSharingScreen: isSharingScreen2, hasSubscribedRolePublishing: hasSubscribedRolePublishing2 }) => isScreenOnlyPublishParams2 && !isSharingScreen2 && !hasSubscribedRolePublishing2,
1544
+ () => /* @__PURE__ */ React18.createElement(
1545
+ WaitingView2,
1546
+ {
1547
+ title: "Ready to present",
1548
+ subtitle: "Select the Screenshare button to start presenting",
1549
+ icon: /* @__PURE__ */ React18.createElement(ShareScreenIcon2, { width: "56px", height: "56px", style: { color: "white" } })
1550
+ }
1551
+ )
1552
+ ).when(
1553
+ ({ pdfAnnotatorActive: pdfAnnotatorActive2 }) => !!pdfAnnotatorActive2,
1554
+ () => /* @__PURE__ */ React18.createElement(PDFView, null)
1555
+ ).when(
1556
+ ({ urlToIframe: urlToIframe2 }) => !!urlToIframe2,
1557
+ () => /* @__PURE__ */ React18.createElement(EmbedView, null)
1558
+ ).otherwise(() => {
1559
+ var _a2;
1560
+ return /* @__PURE__ */ React18.createElement(GridLayout, __spreadValues({}, (_a2 = elements == null ? void 0 : elements.video_tile_layout) == null ? void 0 : _a2.grid));
1561
+ }), /* @__PURE__ */ React18.createElement(CaptionsViewer, { setDefaultPosition: setCaptionPosition, defaultPosition: captionPosition })),
1562
+ /* @__PURE__ */ React18.createElement(
1563
+ Box,
1564
+ {
1565
+ css: {
1566
+ flex: match({ isLandscapeHLSStream, isMobileHLSStream }).with({ isLandscapeHLSStream: true }, () => "1 1 0").with({ isMobileHLSStream: true }, () => "2 1 0").otherwise(() => void 0),
1567
+ position: "relative",
1568
+ height: !isMobileHLSStream ? "100%" : void 0,
1569
+ maxHeight: "100%",
1570
+ "&:empty": { display: "none" },
1571
+ overflowY: "clip"
1572
+ }
1573
+ },
1574
+ /* @__PURE__ */ React18.createElement(Suspense2, { fallback: /* @__PURE__ */ React18.createElement(React18.Fragment, null) }, /* @__PURE__ */ React18.createElement(
1575
+ SidePane_default,
1576
+ {
1577
+ screenType,
1578
+ tileProps: (_a = elements == null ? void 0 : elements.video_tile_layout) == null ? void 0 : _a.grid,
1579
+ hideControls
1580
+ }
1581
+ ))
1582
+ )
1583
+ );
1584
+ };
1585
+
1586
+ // src/Prebuilt/components/PreviousRoleInMetadata.tsx
1587
+ init_define_process_env();
1588
+ import { useEffect as useEffect9 } from "react";
1589
+ import { selectLocalPeerRoleName as selectLocalPeerRoleName4, useHMSVanillaStore as useHMSVanillaStore2 } from "@100mslive/react-sdk";
1590
+ var PreviousRoleInMetadata = () => {
1591
+ const vanillaStore = useHMSVanillaStore2();
1592
+ const { updateMetaData } = useMyMetadata();
1593
+ useEffect9(() => {
1594
+ let previousRole = vanillaStore.getState(selectLocalPeerRoleName4);
1595
+ const unsubscribe = vanillaStore.subscribe((currentRole) => {
1596
+ if (previousRole !== currentRole && currentRole) {
1597
+ updateMetaData({ prevRole: previousRole });
1598
+ previousRole = currentRole;
1599
+ }
1600
+ }, selectLocalPeerRoleName4);
1601
+ return unsubscribe;
1602
+ }, [vanillaStore]);
1603
+ return null;
1604
+ };
1605
+
1606
+ // src/Prebuilt/components/ConferenceScreen.tsx
1607
+ var ConferenceScreen = () => {
1608
+ var _a, _b, _c, _d, _e, _f;
1609
+ const { userName, endpoints, onJoin: onJoinFunc } = useHMSPrebuiltContext();
1610
+ const screenProps = useRoomLayoutConferencingScreen();
1611
+ const { isPreviewScreenEnabled } = useRoomLayoutPreviewScreen();
1612
+ const roomState = useHMSStore10(selectRoomState);
1613
+ const isConnectedToRoom = useHMSStore10(selectIsConnectedToRoom2);
1614
+ const hmsActions = useHMSActions4();
1615
+ const [hideControls, setHideControls] = useState8(false);
1616
+ const dropdownList = useHMSStore10(selectAppData(APP_DATA.dropdownList));
1617
+ const authTokenInAppData = useAuthToken();
1618
+ const headerRef = useRef2(null);
1619
+ const footerRef = useRef2(null);
1620
+ const isMobileDevice = isAndroid || isIOS || isIPadOS;
1621
+ const dropdownListRef = useRef2();
1622
+ const [isHLSStarted] = useSetAppDataByKey(APP_DATA.hlsStarted);
1623
+ const { requestPermission } = useAwayNotifications2();
1624
+ const showChat = !!((_a = screenProps.elements) == null ? void 0 : _a.chat);
1625
+ const autoRoomJoined = useRef2(isPreviewScreenEnabled);
1626
+ const isMobileHLSStream = useMobileHLSStream();
1627
+ const isLandscapeHLSStream = useLandscapeHLSStream();
1628
+ const isMwebHLSStream = isMobileHLSStream || isLandscapeHLSStream;
1629
+ const toggleControls = () => {
1630
+ var _a2;
1631
+ if (((_a2 = dropdownListRef.current) == null ? void 0 : _a2.length) === 0 && isMobileDevice && !isMwebHLSStream) {
1632
+ setHideControls((value) => !value);
1633
+ }
1634
+ };
1635
+ useEffect10(() => {
1636
+ let timeout;
1637
+ dropdownListRef.current = dropdownList || [];
1638
+ if (dropdownListRef.current && dropdownListRef.current.length === 0) {
1639
+ clearTimeout(timeout);
1640
+ timeout = setTimeout(() => {
1641
+ if (dropdownListRef.current && dropdownListRef.current.length === 0) {
1642
+ setHideControls(isMobileDevice);
1643
+ }
1644
+ }, 5e3);
1645
+ }
1646
+ return () => {
1647
+ clearTimeout(timeout);
1648
+ };
1649
+ }, [dropdownList, hideControls, isMobileDevice]);
1650
+ useEffect10(() => {
1651
+ if (authTokenInAppData && !isConnectedToRoom && !isPreviewScreenEnabled && roomState !== HMSRoomState.Connecting && !autoRoomJoined.current) {
1652
+ hmsActions.join({
1653
+ userName: userName || uuid(),
1654
+ authToken: authTokenInAppData,
1655
+ initEndpoint: endpoints == null ? void 0 : endpoints.init,
1656
+ settings: {
1657
+ isAudioMuted: !isPreviewScreenEnabled,
1658
+ isVideoMuted: !isPreviewScreenEnabled,
1659
+ speakerAutoSelectionBlacklist: ["Yeti Stereo Microphone"]
1660
+ }
1661
+ }).then(() => requestPermission()).catch(console.error);
1662
+ autoRoomJoined.current = true;
1663
+ }
1664
+ }, [
1665
+ authTokenInAppData,
1666
+ endpoints == null ? void 0 : endpoints.init,
1667
+ hmsActions,
1668
+ isConnectedToRoom,
1669
+ isPreviewScreenEnabled,
1670
+ roomState,
1671
+ userName,
1672
+ requestPermission
1673
+ ]);
1674
+ useEffect10(() => {
1675
+ onJoinFunc == null ? void 0 : onJoinFunc();
1676
+ return () => {
1677
+ PictureInPicture.stop().catch((error) => console.error("stopping pip", error.message));
1678
+ };
1679
+ }, [onJoinFunc]);
1680
+ if (!isConnectedToRoom && ![HMSRoomState.Reconnecting, HMSRoomState.Disconnected].includes(roomState)) {
1681
+ return /* @__PURE__ */ React19.createElement(FullPageProgress_default, { text: roomState === HMSRoomState.Connecting ? "Joining..." : "" });
1682
+ }
1683
+ const hideControlsForStreaming = isMwebHLSStream ? true : hideControls;
1684
+ return /* @__PURE__ */ React19.createElement(React19.Fragment, null, isHLSStarted ? /* @__PURE__ */ React19.createElement(Box, { css: { position: "fixed", zIndex: 100, w: "100%", h: "100%", left: 0, top: 0 } }, /* @__PURE__ */ React19.createElement(FullPageProgress_default, { text: "Starting live stream...", css: { opacity: 0.8, bg: "$background_dim" } })) : null, /* @__PURE__ */ React19.createElement(Flex, { css: { size: "100%", overflow: "hidden" }, direction: "column" }, !(screenProps.hideSections.includes("header") || isMwebHLSStream) && /* @__PURE__ */ React19.createElement(
1685
+ Box,
1686
+ {
1687
+ ref: headerRef,
1688
+ css: {
1689
+ h: "$18",
1690
+ transition: "margin 0.3s ease-in-out",
1691
+ marginTop: hideControlsForStreaming ? `-${(_b = headerRef.current) == null ? void 0 : _b.clientHeight}px` : "none",
1692
+ "@md": {
1693
+ h: "$17"
1694
+ }
1695
+ },
1696
+ "data-testid": "header"
1697
+ },
1698
+ /* @__PURE__ */ React19.createElement(Header, null)
1699
+ ), /* @__PURE__ */ React19.createElement(
1700
+ Box,
1701
+ {
1702
+ css: {
1703
+ w: "100%",
1704
+ flex: "1 1 0",
1705
+ minHeight: 0,
1706
+ // @ts-ignore
1707
+ px: ((_e = (_d = (_c = screenProps == null ? void 0 : screenProps.elements) == null ? void 0 : _c.video_tile_layout) == null ? void 0 : _d.grid) == null ? void 0 : _e.edge_to_edge) ? 0 : "$10",
1708
+ // TODO: padding to be controlled by section/element
1709
+ paddingBottom: "env(safe-area-inset-bottom)",
1710
+ "@lg": {
1711
+ px: 0
1712
+ }
1713
+ },
1714
+ id: "conferencing",
1715
+ "data-testid": "conferencing",
1716
+ onClick: toggleControls
1717
+ },
1718
+ screenProps.elements ? /* @__PURE__ */ React19.createElement(
1719
+ VideoStreamingSection,
1720
+ {
1721
+ screenType: screenProps.screenType,
1722
+ elements: screenProps.elements,
1723
+ hideControls: hideControlsForStreaming
1724
+ }
1725
+ ) : null
1726
+ ), !screenProps.hideSections.includes("footer") && screenProps.elements && !isMwebHLSStream && /* @__PURE__ */ React19.createElement(
1727
+ Box,
1728
+ {
1729
+ ref: footerRef,
1730
+ css: {
1731
+ flexShrink: 0,
1732
+ maxHeight: "$24",
1733
+ transition: "margin 0.3s ease-in-out",
1734
+ bg: "$background_dim",
1735
+ marginBottom: hideControlsForStreaming ? `-${(_f = footerRef.current) == null ? void 0 : _f.clientHeight}px` : void 0,
1736
+ "@md": {
1737
+ maxHeight: "unset",
1738
+ bg: screenProps.screenType === "hls_live_streaming" ? "transparent" : "$background_dim"
1739
+ }
1740
+ },
1741
+ "data-testid": "footer"
1742
+ },
1743
+ /* @__PURE__ */ React19.createElement(Footer2, { elements: screenProps.elements, screenType: screenProps.screenType })
1744
+ ), isMwebHLSStream && !showChat && /* @__PURE__ */ React19.createElement(
1745
+ Flex,
1746
+ {
1747
+ css: {
1748
+ alignItems: "center",
1749
+ pr: "$4",
1750
+ pb: "$4",
1751
+ position: "relative"
1752
+ },
1753
+ justify: "end",
1754
+ gap: "2"
1755
+ },
1756
+ /* @__PURE__ */ React19.createElement(RaiseHand, null),
1757
+ /* @__PURE__ */ React19.createElement(MoreSettings, { elements: screenProps.elements, screenType: screenProps.screenType }),
1758
+ /* @__PURE__ */ React19.createElement(
1759
+ Box,
1760
+ {
1761
+ css: {
1762
+ position: "absolute",
1763
+ bottom: "100%",
1764
+ mb: "$4"
1765
+ }
1766
+ },
1767
+ /* @__PURE__ */ React19.createElement(EmojiReaction, null)
1768
+ )
1769
+ ), /* @__PURE__ */ React19.createElement(RoleChangeRequestModal, null), /* @__PURE__ */ React19.createElement(HLSFailureModal, null), /* @__PURE__ */ React19.createElement(ActivatedPIP, null), /* @__PURE__ */ React19.createElement(PreviousRoleInMetadata, null)));
1770
+ };
1771
+ export {
1772
+ ConferenceScreen
1773
+ };
1774
+ //# sourceMappingURL=ConferenceScreen-M6RBPTAJ.js.map