@100mslive/roomkit-react 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (459) hide show
  1. package/README.md +1 -0
  2. package/dist/Accordion/Accordion.d.ts +964 -0
  3. package/dist/Accordion/index.d.ts +979 -0
  4. package/dist/ActiveSpeakerView-H3VYXANB.js +39 -0
  5. package/dist/ActiveSpeakerView-H3VYXANB.js.map +7 -0
  6. package/dist/ActiveSpeakerView-REZLWPPI.css +11 -0
  7. package/dist/ActiveSpeakerView-REZLWPPI.css.map +7 -0
  8. package/dist/AudioLevel/AudioLevel.d.ts +8 -0
  9. package/dist/AudioLevel/index.d.ts +1 -0
  10. package/dist/Avatar/Avatar.d.ts +487 -0
  11. package/dist/Avatar/getAvatarBg.d.ts +7 -0
  12. package/dist/Avatar/index.d.ts +1 -0
  13. package/dist/Button/Button.d.ts +488 -0
  14. package/dist/Button/index.d.ts +1 -0
  15. package/dist/Checkbox/Checkbox.d.ts +958 -0
  16. package/dist/Checkbox/index.d.ts +1 -0
  17. package/dist/Collapsible/Collapsible.d.ts +1434 -0
  18. package/dist/Collapsible/index.d.ts +1 -0
  19. package/dist/Divider/Divider.d.ts +958 -0
  20. package/dist/Divider/index.d.ts +1 -0
  21. package/dist/Dropdown/Dropdown.d.ts +5728 -0
  22. package/dist/Dropdown/index.d.ts +1 -0
  23. package/dist/Fieldset/Fieldset.d.ts +477 -0
  24. package/dist/Fieldset/index.d.ts +1 -0
  25. package/dist/Footer/Footer.d.ts +3834 -0
  26. package/dist/Footer/index.d.ts +1 -0
  27. package/dist/HLSView-3RDXRV7Y.js +689 -0
  28. package/dist/HLSView-3RDXRV7Y.js.map +7 -0
  29. package/dist/HLSView-6BVBCQM7.css +11 -0
  30. package/dist/HLSView-6BVBCQM7.css.map +7 -0
  31. package/dist/IconButton/IconButton.d.ts +479 -0
  32. package/dist/IconButton/index.d.ts +1 -0
  33. package/dist/Input/Input.d.ts +2917 -0
  34. package/dist/Input/index.d.ts +1 -0
  35. package/dist/Label/Label.d.ts +479 -0
  36. package/dist/Label/index.d.ts +1 -0
  37. package/dist/Layout/Box.d.ts +477 -0
  38. package/dist/Layout/Flex.d.ts +482 -0
  39. package/dist/Layout/index.d.ts +2 -0
  40. package/dist/Link/Link.d.ts +489 -0
  41. package/dist/Link/index.d.ts +2 -0
  42. package/dist/Loading/Loading.d.ts +14 -0
  43. package/dist/Loading/index.d.ts +1 -0
  44. package/dist/Modal/Dialog.d.ts +3826 -0
  45. package/dist/Modal/DialogContent.d.ts +3343 -0
  46. package/dist/Modal/index.d.ts +1 -0
  47. package/dist/Pagination/StyledPagination.d.ts +1918 -0
  48. package/dist/Pagination/index.d.ts +1 -0
  49. package/dist/PinnedTrackView-453PELNU.js +70 -0
  50. package/dist/PinnedTrackView-453PELNU.js.map +7 -0
  51. package/dist/PinnedTrackView-QQ5FDXJX.css +11 -0
  52. package/dist/PinnedTrackView-QQ5FDXJX.css.map +7 -0
  53. package/dist/Popover/index.d.ts +1436 -0
  54. package/dist/Progress/index.d.ts +957 -0
  55. package/dist/QRCode/QRCode.d.ts +3 -0
  56. package/dist/QRCode/index.d.ts +1 -0
  57. package/dist/RadioGroup/RadioGroup.d.ts +1435 -0
  58. package/dist/RadioGroup/index.d.ts +1 -0
  59. package/dist/ReactSelect/ReactSelect.d.ts +4778 -0
  60. package/dist/ReactSelect/index.d.ts +1 -0
  61. package/dist/Select/Select.d.ts +1437 -0
  62. package/dist/Select/index.d.ts +1 -0
  63. package/dist/Slider/Slider.d.ts +488 -0
  64. package/dist/Slider/index.d.ts +1 -0
  65. package/dist/Stats/Stats.d.ts +19 -0
  66. package/dist/Stats/StyledStats.d.ts +2872 -0
  67. package/dist/Stats/formatBytes.d.ts +1 -0
  68. package/dist/Stats/index.d.ts +1 -0
  69. package/dist/Switch/Switch.d.ts +482 -0
  70. package/dist/Switch/index.d.ts +1 -0
  71. package/dist/Tabs/Tabs.d.ts +1912 -0
  72. package/dist/Tabs/index.d.ts +1 -0
  73. package/dist/Text/Text.d.ts +605 -0
  74. package/dist/Text/index.d.ts +1 -0
  75. package/dist/Theme/ThemeProvider.d.ts +397 -0
  76. package/dist/Theme/base.config.d.ts +417 -0
  77. package/dist/Theme/index.d.ts +3 -0
  78. package/dist/Theme/stitches.config.d.ts +4702 -0
  79. package/dist/Theme/themes.d.ts +64 -0
  80. package/dist/Theme/useSSR.d.ts +6 -0
  81. package/dist/TileMenu/StyledMenuTile.d.ts +3351 -0
  82. package/dist/TileMenu/TileMenu.d.ts +6 -0
  83. package/dist/TileMenu/index.d.ts +1 -0
  84. package/dist/Toast/Toast.d.ts +2881 -0
  85. package/dist/Toast/index.d.ts +1 -0
  86. package/dist/Tooltip/Tooltip.d.ts +14 -0
  87. package/dist/Tooltip/index.d.ts +1 -0
  88. package/dist/Video/Video.d.ts +499 -0
  89. package/dist/Video/index.d.ts +1 -0
  90. package/dist/VideoList/StyledVideoList.d.ts +1438 -0
  91. package/dist/VideoList/index.d.ts +2 -0
  92. package/dist/VideoList/videoListUtils.d.ts +1 -0
  93. package/dist/VideoTile/StyledVideoTile.d.ts +4309 -0
  94. package/dist/VideoTile/index.d.ts +1 -0
  95. package/dist/VirtualBackground-LHYBWUT5.js +158 -0
  96. package/dist/VirtualBackground-LHYBWUT5.js.map +7 -0
  97. package/dist/chunk-7YUYZ64D.js +6843 -0
  98. package/dist/chunk-7YUYZ64D.js.map +7 -0
  99. package/dist/chunk-HCAGFNXW.js +8270 -0
  100. package/dist/chunk-HCAGFNXW.js.map +7 -0
  101. package/dist/chunk-KYYP6ZVK.js +907 -0
  102. package/dist/chunk-KYYP6ZVK.js.map +7 -0
  103. package/dist/chunk-ULXGBUSC.js +65 -0
  104. package/dist/chunk-ULXGBUSC.js.map +7 -0
  105. package/dist/chunk-XRJXE6UO.js +243 -0
  106. package/dist/chunk-XRJXE6UO.js.map +7 -0
  107. package/dist/conference-IDNRO4WK.js +3812 -0
  108. package/dist/conference-IDNRO4WK.js.map +7 -0
  109. package/dist/conference-KN6OKGDU.css +11 -0
  110. package/dist/conference-KN6OKGDU.css.map +7 -0
  111. package/dist/fixtures/chats.d.ts +4 -0
  112. package/dist/fixtures/peers.d.ts +3 -0
  113. package/dist/fixtures/tracks.d.ts +2 -0
  114. package/dist/index.cjs.css +11 -0
  115. package/dist/index.cjs.css.map +7 -0
  116. package/dist/index.cjs.js +22987 -0
  117. package/dist/index.cjs.js.map +7 -0
  118. package/dist/index.css +11 -0
  119. package/dist/index.css.map +7 -0
  120. package/dist/index.d.ts +38 -0
  121. package/dist/index.js +133 -0
  122. package/dist/index.js.map +7 -0
  123. package/dist/meta.cjs.json +13085 -0
  124. package/dist/meta.esbuild.json +13693 -0
  125. package/dist/transcription-BTSB7FZH.js +356 -0
  126. package/dist/transcription-BTSB7FZH.js.map +7 -0
  127. package/dist/utils/animations.d.ts +92 -0
  128. package/dist/utils/index.d.ts +2 -0
  129. package/dist/utils/styles.d.ts +21 -0
  130. package/package.json +116 -0
  131. package/src/Accordion/Accordion.stories.tsx +50 -0
  132. package/src/Accordion/Accordion.tsx +88 -0
  133. package/src/Accordion/index.ts +8 -0
  134. package/src/AudioLevel/AudioLevel.tsx +34 -0
  135. package/src/AudioLevel/index.ts +1 -0
  136. package/src/Avatar/Avatar.stories.tsx +33 -0
  137. package/src/Avatar/Avatar.tsx +55 -0
  138. package/src/Avatar/getAvatarBg.ts +46 -0
  139. package/src/Avatar/index.ts +1 -0
  140. package/src/Button/Button.mdx +43 -0
  141. package/src/Button/Button.stories.tsx +52 -0
  142. package/src/Button/Button.tsx +144 -0
  143. package/src/Button/index.tsx +1 -0
  144. package/src/Chat/Chat.mdx +39 -0
  145. package/src/Chat/Chat.stories.tsx +39 -0
  146. package/src/Checkbox/Checkbox.stories.tsx +61 -0
  147. package/src/Checkbox/Checkbox.tsx +33 -0
  148. package/src/Checkbox/index.tsx +1 -0
  149. package/src/Collapsible/Collapsible.tsx +34 -0
  150. package/src/Collapsible/index.tsx +1 -0
  151. package/src/Divider/Divider.tsx +45 -0
  152. package/src/Divider/HorizontalDivider.stories.tsx +34 -0
  153. package/src/Divider/VerticalDivider.stories.tsx +40 -0
  154. package/src/Divider/index.ts +1 -0
  155. package/src/Dropdown/Dropdown.stories.tsx +94 -0
  156. package/src/Dropdown/Dropdown.tsx +142 -0
  157. package/src/Dropdown/index.tsx +1 -0
  158. package/src/Fieldset/Fieldset.stories.tsx +29 -0
  159. package/src/Fieldset/Fieldset.tsx +11 -0
  160. package/src/Fieldset/index.tsx +1 -0
  161. package/src/Footer/Footer.stories.tsx +61 -0
  162. package/src/Footer/Footer.tsx +47 -0
  163. package/src/Footer/index.tsx +1 -0
  164. package/src/IconButton/IconButton.tsx +45 -0
  165. package/src/IconButton/index.tsx +1 -0
  166. package/src/Icons/Icons.stories.mdx +10 -0
  167. package/src/Icons/IconsList.jsx +17 -0
  168. package/src/Input/Input.stories.tsx +25 -0
  169. package/src/Input/Input.tsx +105 -0
  170. package/src/Input/PasswordInput.stories.tsx +53 -0
  171. package/src/Input/index.tsx +1 -0
  172. package/src/Introduction/Integrating.stories.mdx +100 -0
  173. package/src/Introduction/Introduction.stories.mdx +9 -0
  174. package/src/Label/Label.tsx +8 -0
  175. package/src/Label/index.ts +1 -0
  176. package/src/Layout/Box.tsx +3 -0
  177. package/src/Layout/Flex.tsx +76 -0
  178. package/src/Layout/index.tsx +2 -0
  179. package/src/Link/Link.stories.tsx +18 -0
  180. package/src/Link/Link.tsx +54 -0
  181. package/src/Link/index.tsx +2 -0
  182. package/src/Loading/Loading.mdx +15 -0
  183. package/src/Loading/Loading.stories.tsx +37 -0
  184. package/src/Loading/Loading.tsx +33 -0
  185. package/src/Loading/index.ts +1 -0
  186. package/src/Modal/Dialog.mdx +19 -0
  187. package/src/Modal/Dialog.stories.tsx +68 -0
  188. package/src/Modal/Dialog.tsx +26 -0
  189. package/src/Modal/DialogContent.tsx +63 -0
  190. package/src/Modal/index.ts +1 -0
  191. package/src/Pagination/StyledPagination.stories.tsx +80 -0
  192. package/src/Pagination/StyledPagination.tsx +68 -0
  193. package/src/Pagination/index.tsx +1 -0
  194. package/src/Popover/Popover.mdx +9 -0
  195. package/src/Popover/Popover.stories.tsx +95 -0
  196. package/src/Popover/index.tsx +26 -0
  197. package/src/Prebuilt/App.jsx +273 -0
  198. package/src/Prebuilt/AppContext.jsx +21 -0
  199. package/src/Prebuilt/IconButton.jsx +19 -0
  200. package/src/Prebuilt/Prebuilt.stories.tsx +20 -0
  201. package/src/Prebuilt/common/PeersSorter.js +89 -0
  202. package/src/Prebuilt/common/constants.js +208 -0
  203. package/src/Prebuilt/common/hooks.js +47 -0
  204. package/src/Prebuilt/common/roles.js +4 -0
  205. package/src/Prebuilt/common/useSortedPeers.js +28 -0
  206. package/src/Prebuilt/common/utils.js +91 -0
  207. package/src/Prebuilt/components/AppData/AppData.jsx +189 -0
  208. package/src/Prebuilt/components/AppData/useAppConfig.js +7 -0
  209. package/src/Prebuilt/components/AppData/useAppLayout.js +6 -0
  210. package/src/Prebuilt/components/AppData/useChatState.js +18 -0
  211. package/src/Prebuilt/components/AppData/useSidepane.js +49 -0
  212. package/src/Prebuilt/components/AppData/useUISettings.js +164 -0
  213. package/src/Prebuilt/components/AudioLevel/BeamSpeakerLabelsLogging.jsx +16 -0
  214. package/src/Prebuilt/components/AudioVideoToggle.jsx +67 -0
  215. package/src/Prebuilt/components/AuthToken.jsx +133 -0
  216. package/src/Prebuilt/components/BottomActionSheet/BottomActionSheet.jsx +96 -0
  217. package/src/Prebuilt/components/BottomActionSheet/BottomActionSheet.stories.tsx +46 -0
  218. package/src/Prebuilt/components/Chat/Chat.jsx +155 -0
  219. package/src/Prebuilt/components/Chat/ChatBody.jsx +370 -0
  220. package/src/Prebuilt/components/Chat/ChatFooter.jsx +150 -0
  221. package/src/Prebuilt/components/Chat/ChatHeader.jsx +67 -0
  222. package/src/Prebuilt/components/Chat/ChatSelector.jsx +162 -0
  223. package/src/Prebuilt/components/Chat/useEmojiPickerStyles.js +30 -0
  224. package/src/Prebuilt/components/Chat/useUnreadCount.js +17 -0
  225. package/src/Prebuilt/components/Connection/ConnectionIndicator.jsx +80 -0
  226. package/src/Prebuilt/components/Connection/TileConnection.jsx +40 -0
  227. package/src/Prebuilt/components/Connection/connectionQualityUtils.js +39 -0
  228. package/src/Prebuilt/components/EmojiReaction.jsx +138 -0
  229. package/src/Prebuilt/components/ErrorBoundary.jsx +105 -0
  230. package/src/Prebuilt/components/FirstPersonDisplay.jsx +50 -0
  231. package/src/Prebuilt/components/Footer/ChatToggle.jsx +27 -0
  232. package/src/Prebuilt/components/Footer/ConferencingFooter.jsx +104 -0
  233. package/src/Prebuilt/components/Footer/StreamingFooter.jsx +71 -0
  234. package/src/Prebuilt/components/Footer.jsx +8 -0
  235. package/src/Prebuilt/components/FullPageProgress.jsx +11 -0
  236. package/src/Prebuilt/components/GoLiveButton.jsx +45 -0
  237. package/src/Prebuilt/components/HMSVideo/Controls.jsx +21 -0
  238. package/src/Prebuilt/components/HMSVideo/FullscreenButton.jsx +18 -0
  239. package/src/Prebuilt/components/HMSVideo/HLSAutoplayBlockedPrompt.jsx +35 -0
  240. package/src/Prebuilt/components/HMSVideo/HLSQualitySelector.jsx +82 -0
  241. package/src/Prebuilt/components/HMSVideo/HMSVIdeoUtils.js +27 -0
  242. package/src/Prebuilt/components/HMSVideo/HMSVideo.jsx +11 -0
  243. package/src/Prebuilt/components/HMSVideo/PlayButton.jsx +13 -0
  244. package/src/Prebuilt/components/HMSVideo/VideoProgress.jsx +77 -0
  245. package/src/Prebuilt/components/HMSVideo/VideoTime.jsx +31 -0
  246. package/src/Prebuilt/components/HMSVideo/VolumeControl.jsx +39 -0
  247. package/src/Prebuilt/components/HMSVideo/index.js +19 -0
  248. package/src/Prebuilt/components/Header/AdditionalRoomState.jsx +217 -0
  249. package/src/Prebuilt/components/Header/AmbientMusic.jsx +88 -0
  250. package/src/Prebuilt/components/Header/ConferencingHeader.jsx +29 -0
  251. package/src/Prebuilt/components/Header/Header.jsx +8 -0
  252. package/src/Prebuilt/components/Header/HeaderComponents.jsx +41 -0
  253. package/src/Prebuilt/components/Header/ParticipantFilter.jsx +91 -0
  254. package/src/Prebuilt/components/Header/ParticipantList.jsx +337 -0
  255. package/src/Prebuilt/components/Header/StreamActions.jsx +225 -0
  256. package/src/Prebuilt/components/Header/StreamingHeader.jsx +55 -0
  257. package/src/Prebuilt/components/Header/index.jsx +1 -0
  258. package/src/Prebuilt/components/HlsStatsOverlay.jsx +101 -0
  259. package/src/Prebuilt/components/Image.jsx +7 -0
  260. package/src/Prebuilt/components/Input/KeyboardInputManager.js +107 -0
  261. package/src/Prebuilt/components/LeaveRoom.jsx +202 -0
  262. package/src/Prebuilt/components/MetaActions.jsx +45 -0
  263. package/src/Prebuilt/components/MoreSettings/BulkRoleChangeModal.jsx +139 -0
  264. package/src/Prebuilt/components/MoreSettings/ChangeNameModal.jsx +92 -0
  265. package/src/Prebuilt/components/MoreSettings/ChangeSelfRole.jsx +67 -0
  266. package/src/Prebuilt/components/MoreSettings/EmbedUrl.jsx +106 -0
  267. package/src/Prebuilt/components/MoreSettings/FullScreenItem.jsx +29 -0
  268. package/src/Prebuilt/components/MoreSettings/MoreSettings.jsx +225 -0
  269. package/src/Prebuilt/components/MoreSettings/MuteAllModal.jsx +90 -0
  270. package/src/Prebuilt/components/Notifications/AutoplayBlockedModal.jsx +38 -0
  271. package/src/Prebuilt/components/Notifications/InitErrorModal.jsx +39 -0
  272. package/src/Prebuilt/components/Notifications/MessageNotifications.jsx +25 -0
  273. package/src/Prebuilt/components/Notifications/Notifications.jsx +151 -0
  274. package/src/Prebuilt/components/Notifications/PeerNotifications.jsx +45 -0
  275. package/src/Prebuilt/components/Notifications/PermissionErrorModal.jsx +67 -0
  276. package/src/Prebuilt/components/Notifications/ReconnectNotifications.jsx +69 -0
  277. package/src/Prebuilt/components/Notifications/TrackBulkUnmuteModal.jsx +51 -0
  278. package/src/Prebuilt/components/Notifications/TrackNotifications.jsx +19 -0
  279. package/src/Prebuilt/components/Notifications/TrackUnmuteModal.jsx +49 -0
  280. package/src/Prebuilt/components/Notifications/index.jsx +1 -0
  281. package/src/Prebuilt/components/PIP/PIPComponent.jsx +82 -0
  282. package/src/Prebuilt/components/PIP/PIPManager.js +296 -0
  283. package/src/Prebuilt/components/PIP/SetupMediaSession.js +60 -0
  284. package/src/Prebuilt/components/PIP/index.jsx +11 -0
  285. package/src/Prebuilt/components/PIP/pip.test.js +72 -0
  286. package/src/Prebuilt/components/PIP/pipUtils.js +183 -0
  287. package/src/Prebuilt/components/Pagination.jsx +29 -0
  288. package/src/Prebuilt/components/Playlist/Playlist.jsx +129 -0
  289. package/src/Prebuilt/components/Playlist/PlaylistControls.jsx +172 -0
  290. package/src/Prebuilt/components/Playlist/PlaylistItem.jsx +51 -0
  291. package/src/Prebuilt/components/Playlist/VideoPlayer.jsx +95 -0
  292. package/src/Prebuilt/components/PostLeave.jsx +76 -0
  293. package/src/Prebuilt/components/Preview/PreviewContainer.jsx +51 -0
  294. package/src/Prebuilt/components/Preview/PreviewJoin.jsx +196 -0
  295. package/src/Prebuilt/components/Preview/PreviewName.jsx +37 -0
  296. package/src/Prebuilt/components/RoleChangeModal.jsx +185 -0
  297. package/src/Prebuilt/components/RoleChangeRequestModal.jsx +26 -0
  298. package/src/Prebuilt/components/ScreenShare.jsx +45 -0
  299. package/src/Prebuilt/components/ScreenshareDisplay.jsx +45 -0
  300. package/src/Prebuilt/components/ScreenshareHintModal.jsx +37 -0
  301. package/src/Prebuilt/components/ScreenshareTile.jsx +91 -0
  302. package/src/Prebuilt/components/Settings/DeviceSettings.jsx +220 -0
  303. package/src/Prebuilt/components/Settings/LayoutSettings.jsx +91 -0
  304. package/src/Prebuilt/components/Settings/NotificationSettings.jsx +61 -0
  305. package/src/Prebuilt/components/Settings/SettingsModal.jsx +171 -0
  306. package/src/Prebuilt/components/Settings/StartRecording.jsx +130 -0
  307. package/src/Prebuilt/components/Settings/SwitchWithLabel.jsx +40 -0
  308. package/src/Prebuilt/components/Settings/common.js +15 -0
  309. package/src/Prebuilt/components/ShareMenuIcon.jsx +26 -0
  310. package/src/Prebuilt/components/StatsForNerds.jsx +250 -0
  311. package/src/Prebuilt/components/Streaming/Common.jsx +132 -0
  312. package/src/Prebuilt/components/Streaming/HLSStreaming.jsx +226 -0
  313. package/src/Prebuilt/components/Streaming/RTMPIcon.jsx +24 -0
  314. package/src/Prebuilt/components/Streaming/RTMPStreaming.jsx +336 -0
  315. package/src/Prebuilt/components/Streaming/ResolutionInput.jsx +88 -0
  316. package/src/Prebuilt/components/Streaming/StreamingLanding.jsx +76 -0
  317. package/src/Prebuilt/components/TileMenu.jsx +275 -0
  318. package/src/Prebuilt/components/Toast/Toast.jsx +17 -0
  319. package/src/Prebuilt/components/Toast/ToastBatcher.js +57 -0
  320. package/src/Prebuilt/components/Toast/ToastConfig.jsx +134 -0
  321. package/src/Prebuilt/components/Toast/ToastContainer.jsx +30 -0
  322. package/src/Prebuilt/components/Toast/ToastManager.js +44 -0
  323. package/src/Prebuilt/components/VideoList.jsx +101 -0
  324. package/src/Prebuilt/components/VideoTile.jsx +177 -0
  325. package/src/Prebuilt/components/conference.jsx +164 -0
  326. package/src/Prebuilt/components/gridView.jsx +85 -0
  327. package/src/Prebuilt/components/hooks/useDropdownList.jsx +23 -0
  328. package/src/Prebuilt/components/hooks/useDropdownSelection.jsx +6 -0
  329. package/src/Prebuilt/components/hooks/useFeatures.js +22 -0
  330. package/src/Prebuilt/components/hooks/useFullscreen.js +43 -0
  331. package/src/Prebuilt/components/hooks/useMetadata.jsx +52 -0
  332. package/src/Prebuilt/components/hooks/useNavigation.js +19 -0
  333. package/src/Prebuilt/components/hooks/usePlaylist.js +25 -0
  334. package/src/Prebuilt/components/hooks/usePlaylistMusic.js +35 -0
  335. package/src/Prebuilt/components/hooks/useScreenshareAudio.js +28 -0
  336. package/src/Prebuilt/components/hooks/useSetPinnedMessage.js +38 -0
  337. package/src/Prebuilt/components/hooks/useSkipPreview.jsx +20 -0
  338. package/src/Prebuilt/components/hooks/useUserPreferences.jsx +25 -0
  339. package/src/Prebuilt/components/init/Init.jsx +58 -0
  340. package/src/Prebuilt/components/init/initUtils.js +90 -0
  341. package/src/Prebuilt/components/pdfAnnotator/pdfErrorView.jsx +29 -0
  342. package/src/Prebuilt/components/pdfAnnotator/pdfFileOptions.jsx +108 -0
  343. package/src/Prebuilt/components/pdfAnnotator/pdfHeader.jsx +31 -0
  344. package/src/Prebuilt/components/pdfAnnotator/pdfInfo.jsx +32 -0
  345. package/src/Prebuilt/components/pdfAnnotator/shareScreenOptions.jsx +233 -0
  346. package/src/Prebuilt/components/pdfAnnotator/submitPdf.jsx +89 -0
  347. package/src/Prebuilt/components/pdfAnnotator/uploadedFile.jsx +85 -0
  348. package/src/Prebuilt/components/peerTileUtils.jsx +27 -0
  349. package/src/Prebuilt/hms.js +7 -0
  350. package/src/Prebuilt/images/first_person.png +0 -0
  351. package/src/Prebuilt/index.d.ts +15 -0
  352. package/src/Prebuilt/index.js +2 -0
  353. package/src/Prebuilt/layouts/ActiveSpeakerView.jsx +34 -0
  354. package/src/Prebuilt/layouts/EmbedView.jsx +141 -0
  355. package/src/Prebuilt/layouts/HLSView.jsx +290 -0
  356. package/src/Prebuilt/layouts/InsetView.jsx +222 -0
  357. package/src/Prebuilt/layouts/NonPublisherView.jsx +51 -0
  358. package/src/Prebuilt/layouts/PDFView.jsx +122 -0
  359. package/src/Prebuilt/layouts/PinnedTrackView.jsx +59 -0
  360. package/src/Prebuilt/layouts/SidePane.jsx +51 -0
  361. package/src/Prebuilt/layouts/WaitingView.jsx +51 -0
  362. package/src/Prebuilt/layouts/WhiteboardView.jsx +66 -0
  363. package/src/Prebuilt/layouts/mainGridView.jsx +98 -0
  364. package/src/Prebuilt/layouts/mainView.jsx +113 -0
  365. package/src/Prebuilt/layouts/screenShareView.jsx +185 -0
  366. package/src/Prebuilt/plugins/FlyingEmoji.jsx +132 -0
  367. package/src/Prebuilt/plugins/RemoteStopScreenshare.jsx +18 -0
  368. package/src/Prebuilt/plugins/VirtualBackground/VirtualBackground.jsx +90 -0
  369. package/src/Prebuilt/plugins/VirtualBackground/vbutils.js +66 -0
  370. package/src/Prebuilt/plugins/confetti.jsx +60 -0
  371. package/src/Prebuilt/plugins/transcription/Transcriber.js +216 -0
  372. package/src/Prebuilt/plugins/transcription/TranscriptionButton.jsx +138 -0
  373. package/src/Prebuilt/plugins/transcription/index.jsx +1 -0
  374. package/src/Prebuilt/plugins/whiteboard/PusherCommunicationProvider.js +110 -0
  375. package/src/Prebuilt/plugins/whiteboard/README.md +29 -0
  376. package/src/Prebuilt/plugins/whiteboard/ToggleWhiteboard.jsx +43 -0
  377. package/src/Prebuilt/plugins/whiteboard/Whiteboard.css +12 -0
  378. package/src/Prebuilt/plugins/whiteboard/Whiteboard.jsx +11 -0
  379. package/src/Prebuilt/plugins/whiteboard/WhiteboardEvents.js +8 -0
  380. package/src/Prebuilt/plugins/whiteboard/index.js +3 -0
  381. package/src/Prebuilt/plugins/whiteboard/useMultiplayerState.js +212 -0
  382. package/src/Prebuilt/plugins/whiteboard/useWhiteboardMetadata.js +47 -0
  383. package/src/Prebuilt/primitives/DialogContent.jsx +280 -0
  384. package/src/Prebuilt/primitives/DropdownTrigger.jsx +46 -0
  385. package/src/Prebuilt/services/FeatureFlags.jsx +47 -0
  386. package/src/Prebuilt/services/tokenService.js +49 -0
  387. package/src/Progress/index.tsx +17 -0
  388. package/src/QRCode/QRCode.mdx +9 -0
  389. package/src/QRCode/QRCode.stories.tsx +29 -0
  390. package/src/QRCode/QRCode.tsx +6 -0
  391. package/src/QRCode/index.tsx +1 -0
  392. package/src/RadioGroup/RadioGroup.stories.tsx +32 -0
  393. package/src/RadioGroup/RadioGroup.tsx +33 -0
  394. package/src/RadioGroup/index.tsx +1 -0
  395. package/src/ReactSelect/ReactSelect.stories.tsx +83 -0
  396. package/src/ReactSelect/ReactSelect.tsx +97 -0
  397. package/src/ReactSelect/index.ts +1 -0
  398. package/src/Select/Select.stories.tsx +33 -0
  399. package/src/Select/Select.tsx +63 -0
  400. package/src/Select/index.ts +1 -0
  401. package/src/Slider/Slider.stories.tsx +21 -0
  402. package/src/Slider/Slider.tsx +70 -0
  403. package/src/Slider/index.ts +1 -0
  404. package/src/Stats/Stats.tsx +211 -0
  405. package/src/Stats/StyledStats.tsx +57 -0
  406. package/src/Stats/formatBytes.ts +19 -0
  407. package/src/Stats/index.tsx +1 -0
  408. package/src/Switch/Switch.mdx +11 -0
  409. package/src/Switch/Switch.stories.tsx +46 -0
  410. package/src/Switch/Switch.tsx +52 -0
  411. package/src/Switch/index.ts +1 -0
  412. package/src/Tabs/Tabs.stories.tsx +77 -0
  413. package/src/Tabs/Tabs.tsx +41 -0
  414. package/src/Tabs/index.tsx +1 -0
  415. package/src/Text/Text.stories.tsx +21 -0
  416. package/src/Text/Text.tsx +149 -0
  417. package/src/Text/index.tsx +1 -0
  418. package/src/Theme/Theme.stories.mdx +8 -0
  419. package/src/Theme/ThemeProvider.tsx +104 -0
  420. package/src/Theme/ThemeStory.jsx +58 -0
  421. package/src/Theme/base.config.ts +264 -0
  422. package/src/Theme/index.tsx +3 -0
  423. package/src/Theme/stitches.config.ts +100 -0
  424. package/src/Theme/themes.ts +70 -0
  425. package/src/Theme/useSSR.tsx +24 -0
  426. package/src/TileMenu/StyledMenuTile.tsx +101 -0
  427. package/src/TileMenu/TileMenu.tsx +96 -0
  428. package/src/TileMenu/index.tsx +1 -0
  429. package/src/Toast/AppToast.stories.tsx +56 -0
  430. package/src/Toast/Toast.mdx +19 -0
  431. package/src/Toast/Toast.stories.tsx +57 -0
  432. package/src/Toast/Toast.tsx +168 -0
  433. package/src/Toast/index.tsx +1 -0
  434. package/src/Tooltip/Tooltip.stories.tsx +62 -0
  435. package/src/Tooltip/Tooltip.tsx +79 -0
  436. package/src/Tooltip/index.ts +1 -0
  437. package/src/Video/UseVideo.mdx +22 -0
  438. package/src/Video/UseVideo.stories.tsx +26 -0
  439. package/src/Video/Video.mdx +24 -0
  440. package/src/Video/Video.stories.tsx +27 -0
  441. package/src/Video/Video.tsx +61 -0
  442. package/src/Video/index.tsx +1 -0
  443. package/src/VideoList/StyledVideoList.tsx +39 -0
  444. package/src/VideoList/VideoList.stories.tsx +92 -0
  445. package/src/VideoList/index.tsx +2 -0
  446. package/src/VideoList/videoListUtils.tsx +20 -0
  447. package/src/VideoTile/StyledVideoTile.tsx +148 -0
  448. package/src/VideoTile/VideoTile.mdx +28 -0
  449. package/src/VideoTile/VideoTile.stories.tsx +32 -0
  450. package/src/VideoTile/index.tsx +1 -0
  451. package/src/fixtures/chats.ts +25 -0
  452. package/src/fixtures/peers.ts +24 -0
  453. package/src/fixtures/tracks.ts +11 -0
  454. package/src/index.ts +38 -0
  455. package/src/store/SetupFakeStore.ts +33 -0
  456. package/src/store/StorybookSDK.ts +229 -0
  457. package/src/utils/animations.ts +90 -0
  458. package/src/utils/index.ts +2 -0
  459. package/src/utils/styles.ts +22 -0
@@ -0,0 +1,49 @@
1
+ import { useCallback } from 'react';
2
+ import { selectAppData, useHMSActions, useHMSStore, useHMSVanillaStore } from '@100mslive/react-sdk';
3
+ import { APP_DATA } from '../../common/constants';
4
+
5
+ /**
6
+ * Gives a boolean value if the sidepaneType matches current sidepane value in store
7
+ * @param {string} sidepaneType
8
+ * @returns {boolean} - if the sidepaneType is passed returns boolean else the current value
9
+ */
10
+ export const useIsSidepaneTypeOpen = sidepaneType => {
11
+ if (!sidepaneType) {
12
+ throw Error('Pass one of the side pane options');
13
+ }
14
+ return useHMSStore(selectAppData(APP_DATA.sidePane)) === sidepaneType;
15
+ };
16
+
17
+ /**
18
+ * Gives the current value of sidepane in store
19
+ * @returns {string} - if the sidepaneType is passed returns boolean else the current value
20
+ */
21
+ export const useSidepaneState = () => {
22
+ const sidePane = useHMSStore(selectAppData(APP_DATA.sidePane));
23
+ return sidePane;
24
+ };
25
+
26
+ /**
27
+ * Toggle the sidepane value between passed sidePaneType and '';
28
+ * @param {string} sidepaneType
29
+ */
30
+ export const useSidepaneToggle = sidepaneType => {
31
+ const hmsActions = useHMSActions();
32
+ const vanillaStore = useHMSVanillaStore();
33
+ const toggleSidepane = useCallback(() => {
34
+ const isOpen = vanillaStore.getState(selectAppData(APP_DATA.sidePane)) === sidepaneType;
35
+ hmsActions.setAppData(APP_DATA.sidePane, !isOpen ? sidepaneType : '');
36
+ }, [vanillaStore, hmsActions, sidepaneType]);
37
+ return toggleSidepane;
38
+ };
39
+
40
+ /**
41
+ * reset's the sidepane value
42
+ */
43
+ export const useSidepaneReset = () => {
44
+ const hmsActions = useHMSActions();
45
+ const resetSidepane = useCallback(() => {
46
+ hmsActions.setAppData(APP_DATA.sidePane, '');
47
+ }, [hmsActions]);
48
+ return resetSidepane;
49
+ };
@@ -0,0 +1,164 @@
1
+ import { useCallback } from 'react';
2
+ import {
3
+ selectAppData,
4
+ selectAppDataByPath,
5
+ selectSessionStore,
6
+ selectTrackByID,
7
+ useHMSActions,
8
+ useHMSStore,
9
+ useHMSVanillaStore,
10
+ } from '@100mslive/react-sdk';
11
+ import { UserPreferencesKeys, useUserPreferences } from '../hooks/useUserPreferences';
12
+ import { APP_DATA, SESSION_STORE_KEY, UI_SETTINGS } from '../../common/constants';
13
+
14
+ /**
15
+ * fields saved related to UI settings in store's app data can be
16
+ * accessed using this hook. key is optional if not passed
17
+ * the whole UI settings object is returned. Usage -
18
+ * 1. val = useUiSettings("isAudioOnly");
19
+ * console.log(val); // false
20
+ * 2. val = useUISettings();
21
+ * console.log(val); // {isAudioOnly: false}
22
+ * @param {string | undefined} uiSettingKey
23
+ */
24
+ export const useUISettings = uiSettingKey => {
25
+ const uiSettings = useHMSStore(selectAppDataByPath(APP_DATA.uiSettings, uiSettingKey));
26
+ return uiSettings;
27
+ };
28
+
29
+ /**
30
+ * fields saved related to UI settings in store's app data can be
31
+ * accessed using this hook. key is optional if not passed
32
+ * the whole UI settings object is returned. Usage -
33
+ * [val, setVal] = useUiSettings("isAudioOnly");
34
+ * console.log(val); // false
35
+ * setVal(true);
36
+ * @param {string} uiSettingKey
37
+ */
38
+ export const useSetUiSettings = uiSettingKey => {
39
+ const value = useUISettings(uiSettingKey);
40
+ const setValue = useSetAppData({
41
+ key1: APP_DATA.uiSettings,
42
+ key2: uiSettingKey,
43
+ });
44
+ return [value, setValue];
45
+ };
46
+
47
+ export const useIsHeadless = () => {
48
+ const isHeadless = useUISettings(UI_SETTINGS.isHeadless);
49
+ return isHeadless;
50
+ };
51
+
52
+ export const useActiveSpeakerSorting = () => {
53
+ const activeSpeakerSorting = useUISettings(UI_SETTINGS.activeSpeakerSorting);
54
+ return activeSpeakerSorting;
55
+ };
56
+
57
+ export const useHLSViewerRole = () => {
58
+ return useHMSStore(selectAppData(APP_DATA.hlsViewerRole));
59
+ };
60
+
61
+ export const useWaitingViewerRole = () => {
62
+ return useHMSStore(selectAppData(APP_DATA.waitingViewerRole));
63
+ };
64
+ export const useIsHLSStartedFromUI = () => {
65
+ return useHMSStore(selectAppData(APP_DATA.hlsStarted));
66
+ };
67
+
68
+ export const useIsRTMPStartedFromUI = () => {
69
+ return useHMSStore(selectAppData(APP_DATA.rtmpStarted));
70
+ };
71
+
72
+ export const useTokenEndpoint = () => {
73
+ return useHMSStore(selectAppData(APP_DATA.tokenEndpoint));
74
+ };
75
+
76
+ export const useAuthToken = () => {
77
+ return useHMSStore(selectAppData(APP_DATA.authToken));
78
+ };
79
+
80
+ export const useLogo = () => {
81
+ return useHMSStore(selectAppData(APP_DATA.logo));
82
+ };
83
+
84
+ export const useUrlToEmbed = () => {
85
+ return useHMSStore(selectAppData(APP_DATA.embedConfig))?.url;
86
+ };
87
+
88
+ export const usePDFAnnotator = () => {
89
+ return useHMSStore(selectAppData(APP_DATA.pdfConfig))?.state;
90
+ };
91
+ export const usePinnedTrack = () => {
92
+ const pinnedTrackId = useHMSStore(selectAppData(APP_DATA.pinnedTrackId));
93
+ const spotlightTrackId = useHMSStore(selectSessionStore(SESSION_STORE_KEY.SPOTLIGHT));
94
+ return useHMSStore(selectTrackByID(pinnedTrackId || spotlightTrackId));
95
+ };
96
+
97
+ export const useSubscribedNotifications = notificationKey => {
98
+ const notificationPreference = useHMSStore(selectAppDataByPath(APP_DATA.subscribedNotifications, notificationKey));
99
+ return notificationPreference;
100
+ };
101
+
102
+ export const useSetSubscribedNotifications = notificationKey => {
103
+ const value = useSubscribedNotifications(notificationKey);
104
+ const setValue = useSetAppData({
105
+ key1: APP_DATA.subscribedNotifications,
106
+ key2: notificationKey,
107
+ });
108
+ return [value, setValue];
109
+ };
110
+
111
+ export const useSubscribeChatSelector = chatSelectorKey => {
112
+ const chatSelectorPreference = useHMSStore(selectAppDataByPath(APP_DATA.chatSelector, chatSelectorKey));
113
+ return chatSelectorPreference;
114
+ };
115
+
116
+ export const useSetSubscribedChatSelector = chatSelectorKey => {
117
+ const value = useSubscribeChatSelector(chatSelectorKey);
118
+ const setValue = useSetAppData({
119
+ key1: APP_DATA.chatSelector,
120
+ key2: chatSelectorKey,
121
+ });
122
+ return [value, setValue];
123
+ };
124
+
125
+ export const useSetAppDataByKey = appDataKey => {
126
+ const value = useHMSStore(selectAppData(appDataKey));
127
+ const actions = useHMSActions();
128
+ const setValue = useCallback(
129
+ value => {
130
+ actions.setAppData(appDataKey, value);
131
+ },
132
+ [actions, appDataKey],
133
+ );
134
+ return [value, setValue];
135
+ };
136
+
137
+ const useSetAppData = ({ key1, key2 }) => {
138
+ const actions = useHMSActions();
139
+ const store = useHMSVanillaStore();
140
+ const [, setPreferences] = useUserPreferences(UserPreferencesKeys.UI_SETTINGS);
141
+ const setValue = useCallback(
142
+ value => {
143
+ if (!key1) {
144
+ return;
145
+ }
146
+ actions.setAppData(
147
+ key1,
148
+ key2
149
+ ? {
150
+ [key2]: value,
151
+ }
152
+ : value,
153
+ true,
154
+ );
155
+ const appData = store.getState(selectAppData());
156
+ setPreferences({
157
+ ...appData.uiSettings,
158
+ subscribedNotifications: appData.subscribedNotifications,
159
+ });
160
+ },
161
+ [actions, key1, key2, store, setPreferences],
162
+ );
163
+ return setValue;
164
+ };
@@ -0,0 +1,16 @@
1
+ import { useEffect } from 'react';
2
+ import { useHMSActions } from '@100mslive/react-sdk';
3
+ import { useIsHeadless } from '../AppData/useUISettings';
4
+ import { FeatureFlags } from '../../services/FeatureFlags';
5
+
6
+ export function BeamSpeakerLabelsLogging() {
7
+ const hmsActions = useHMSActions();
8
+ const isHeadless = useIsHeadless();
9
+
10
+ useEffect(() => {
11
+ if (FeatureFlags.enableBeamSpeakersLogging && isHeadless) {
12
+ hmsActions.enableBeamSpeakerLabelsLogging();
13
+ }
14
+ }, [hmsActions, isHeadless]);
15
+ return null;
16
+ }
@@ -0,0 +1,67 @@
1
+ import React, { Fragment } from 'react';
2
+ import {
3
+ selectIsConnectedToRoom,
4
+ selectLocalVideoTrackID,
5
+ selectVideoTrackByID,
6
+ useAVToggle,
7
+ useHMSActions,
8
+ useHMSStore,
9
+ } from '@100mslive/react-sdk';
10
+ import { CameraFlipIcon, MicOffIcon, MicOnIcon, VideoOffIcon, VideoOnIcon } from '@100mslive/react-icons';
11
+ import { ToastManager } from './Toast/ToastManager';
12
+ import { Tooltip } from '../../Tooltip';
13
+ import IconButton from '../IconButton';
14
+ import { isMacOS } from '../common/constants';
15
+
16
+ export const AudioVideoToggle = () => {
17
+ const { isLocalVideoEnabled, isLocalAudioEnabled, toggleAudio, toggleVideo } = useAVToggle();
18
+ const actions = useHMSActions();
19
+ const videoTracKId = useHMSStore(selectLocalVideoTrackID);
20
+ const localVideoTrack = useHMSStore(selectVideoTrackByID(videoTracKId));
21
+ const isConnectedToRoom = useHMSStore(selectIsConnectedToRoom);
22
+
23
+ return (
24
+ <Fragment>
25
+ {toggleAudio ? (
26
+ <Tooltip title={`Turn ${isLocalAudioEnabled ? 'off' : 'on'} audio (${isMacOS ? '⌘' : 'ctrl'} + d)`}>
27
+ <IconButton active={isLocalAudioEnabled} onClick={toggleAudio} key="toggleAudio" data-testid="audio_btn">
28
+ {!isLocalAudioEnabled ? (
29
+ <MicOffIcon data-testid="audio_off_btn" />
30
+ ) : (
31
+ <MicOnIcon data-testid="audio_on_btn" />
32
+ )}
33
+ </IconButton>
34
+ </Tooltip>
35
+ ) : null}
36
+ {toggleVideo ? (
37
+ <Tooltip title={`Turn ${isLocalVideoEnabled ? 'off' : 'on'} video (${isMacOS ? '⌘' : 'ctrl'} + e)`}>
38
+ <IconButton key="toggleVideo" active={isLocalVideoEnabled} onClick={toggleVideo} data-testid="video_btn">
39
+ {!isLocalVideoEnabled ? (
40
+ <VideoOffIcon data-testid="video_off_btn" />
41
+ ) : (
42
+ <VideoOnIcon data-testid="video_on_btn" />
43
+ )}
44
+ </IconButton>
45
+ </Tooltip>
46
+ ) : null}
47
+ {localVideoTrack?.facingMode && isConnectedToRoom ? (
48
+ <Tooltip title="Switch Camera" key="switchCamera">
49
+ <IconButton
50
+ onClick={async () => {
51
+ try {
52
+ await actions.switchCamera();
53
+ } catch (e) {
54
+ ToastManager.addToast({
55
+ title: `Error while flipping camera ${e.message || ''}`,
56
+ variant: 'error',
57
+ });
58
+ }
59
+ }}
60
+ >
61
+ <CameraFlipIcon />
62
+ </IconButton>
63
+ </Tooltip>
64
+ ) : null}
65
+ </Fragment>
66
+ );
67
+ };
@@ -0,0 +1,133 @@
1
+ import React, { useEffect, useMemo, useState } from 'react';
2
+ import { matchPath, useLocation } from 'react-router-dom';
3
+ import { useSearchParam } from 'react-use';
4
+ import { v4 as uuid } from 'uuid';
5
+ import { useHMSActions } from '@100mslive/react-sdk';
6
+ import { styled } from '../../Theme';
7
+ import { useHMSPrebuiltContext } from '../AppContext';
8
+ import { ErrorDialog } from '../primitives/DialogContent';
9
+ import { useSetAppDataByKey, useTokenEndpoint } from './AppData/useUISettings';
10
+ import getToken from '../services/tokenService';
11
+ import { APP_DATA, QUERY_PARAM_AUTH_TOKEN } from '../common/constants';
12
+
13
+ /**
14
+ * query params exposed -
15
+ * skip_preview=true => used by recording and streaming service, skips preview and directly joins
16
+ * header and footer don't show up in this case
17
+ * skip_preview_headful=true => used by automation testing to skip preview without impacting the UI
18
+ * name=abc => gives the initial name for the peer joining
19
+ * auth_token=123 => uses the passed in token to join instead of fetching from token endpoint
20
+ * ui_mode=activespeaker => lands in active speaker mode after joining the room
21
+ */
22
+ const AuthToken = React.memo(({ authTokenByRoomCodeEndpoint }) => {
23
+ const hmsActions = useHMSActions();
24
+ const tokenEndpoint = useTokenEndpoint();
25
+ const { showPreview, roomCode } = useHMSPrebuiltContext();
26
+ const location = useLocation();
27
+ const matches = useMemo(
28
+ () =>
29
+ matchPath(`${showPreview ? 'preview' : 'meeting'}/:roomId/:role`, location.pathname) ||
30
+ matchPath(`${showPreview ? 'preview' : 'meeting'}/:roomCode/`, location.pathname),
31
+ [location, showPreview],
32
+ );
33
+ const { roomCode: urlRoomCode, roomId: urlRoomId, role: userRole } = matches?.params || {};
34
+ const [error, setError] = useState({ title: '', body: '' });
35
+ let authToken = useSearchParam(QUERY_PARAM_AUTH_TOKEN);
36
+ const [, setAuthTokenInAppData] = useSetAppDataByKey(APP_DATA.authToken);
37
+
38
+ useEffect(() => {
39
+ if (authToken) {
40
+ setAuthTokenInAppData(authToken);
41
+ return;
42
+ }
43
+ if (!tokenEndpoint && !urlRoomId && !roomCode && !urlRoomCode) {
44
+ return;
45
+ }
46
+ const code = !userRole && (roomCode || urlRoomCode);
47
+
48
+ const getTokenFn = code
49
+ ? () => hmsActions.getAuthTokenByRoomCode({ roomCode: code }, { endpoint: authTokenByRoomCodeEndpoint })
50
+ : () => getToken(tokenEndpoint, uuid(), userRole, urlRoomId);
51
+
52
+ getTokenFn()
53
+ .then(token => {
54
+ setAuthTokenInAppData(token);
55
+ })
56
+ .catch(error => {
57
+ setError(convertError(error));
58
+ });
59
+ }, [
60
+ hmsActions,
61
+ tokenEndpoint,
62
+ urlRoomId,
63
+ urlRoomCode,
64
+ userRole,
65
+ authToken,
66
+ authTokenByRoomCodeEndpoint,
67
+ setAuthTokenInAppData,
68
+ roomCode,
69
+ ]);
70
+
71
+ if (error.title) {
72
+ return <ErrorDialog title={error.title}>{error.body}</ErrorDialog>;
73
+ }
74
+ return null;
75
+ });
76
+
77
+ const convertError = error => {
78
+ console.error('[error]', { error });
79
+ if (error.action === 'GET_TOKEN' && error.code === 403) {
80
+ return {
81
+ title: 'Room code is disabled',
82
+ body: ErrorWithSupportLink('Room code corresponding to this link is no more active.'),
83
+ };
84
+ } else if (error.action === 'GET_TOKEN' && error.code === 404) {
85
+ return {
86
+ title: 'Room code does not exist',
87
+ body: ErrorWithSupportLink('We could not find a room code corresponding to this link.'),
88
+ };
89
+ } else if (error.action === 'GET_TOKEN' && error.code === 2003) {
90
+ return {
91
+ title: 'Endpoint is not reachable',
92
+ body: ErrorWithSupportLink(`Endpoint is not reachable. ${error.description}.`),
93
+ };
94
+ } else if (error.response && error.response.status === 404) {
95
+ return {
96
+ title: 'Room does not exist',
97
+ body: ErrorWithSupportLink('We could not find a room corresponding to this link.'),
98
+ };
99
+ } else if (error.response && error.response.status === 403) {
100
+ return {
101
+ title: 'Accessing room using this link format is disabled',
102
+ body: ErrorWithSupportLink('You can re-enable this from the developer section in Dashboard.'),
103
+ };
104
+ } else {
105
+ console.error('Token API Error', error);
106
+ return {
107
+ title: 'Error fetching token',
108
+ body: ErrorWithSupportLink(
109
+ 'An error occurred while fetching the app token. Please look into logs for more details.',
110
+ ),
111
+ };
112
+ }
113
+ };
114
+
115
+ const Link = styled('a', {
116
+ color: '#2f80e1',
117
+ });
118
+
119
+ export const ErrorWithSupportLink = errorMessage => (
120
+ <div>
121
+ {errorMessage} If you think this is a mistake on our side, please create{' '}
122
+ <Link target="_blank" href="https://github.com/100mslive/100ms-web/issues" rel="noreferrer">
123
+ an issue
124
+ </Link>{' '}
125
+ or reach out over{' '}
126
+ <Link target="_blank" href="https://discord.com/invite/kGdmszyzq2" rel="noreferrer">
127
+ Discord
128
+ </Link>
129
+ .
130
+ </div>
131
+ );
132
+
133
+ export default AuthToken;
@@ -0,0 +1,96 @@
1
+ import React, { useEffect, useRef, useState } from 'react';
2
+ import { CrossIcon } from '@100mslive/react-icons';
3
+ import { Box, Flex, Popover, Text } from '../../..';
4
+ import { getUpdatedHeight } from '../../common/utils';
5
+
6
+ const BottomActionSheet = ({
7
+ title = '',
8
+ children = <></>,
9
+ triggerContent,
10
+ containerCSS = {},
11
+ // By default the component starts just above the trigger.
12
+ // A negative offset allows it to start from the bottom of the screen.
13
+ sideOffset = -50,
14
+ defaultHeight = 50,
15
+ }) => {
16
+ const MINIMUM_HEIGHT = 20; // vh
17
+ const [sheetOpen, setSheetOpen] = useState(false);
18
+ const [sheetHeight, setSheetHeight] = useState(`${Math.min(Math.max(MINIMUM_HEIGHT, defaultHeight), 100)}vh`);
19
+ const closeRef = useRef(null);
20
+
21
+ // Close the sheet if height goes under MINIMUM_HEIGHT
22
+ useEffect(() => {
23
+ if (closeRef?.current && parseFloat(sheetHeight.slice(0, -2)) <= MINIMUM_HEIGHT) {
24
+ setSheetOpen(false);
25
+ // Delay for showing the opacity animation, can be removed if not needed
26
+ setTimeout(() => closeRef.current?.click(), 200);
27
+ }
28
+ }, [sheetHeight]);
29
+
30
+ return (
31
+ <>
32
+ <Popover.Root
33
+ onOpenChange={open => {
34
+ if (!open) {
35
+ setSheetHeight('0');
36
+ }
37
+ setSheetOpen(open);
38
+ }}
39
+ >
40
+ <Popover.Trigger asChild>{triggerContent}</Popover.Trigger>
41
+ <Popover.Portal>
42
+ <Popover.Content sideOffset={sideOffset} style={{ zIndex: '2' }}>
43
+ <Box
44
+ css={{
45
+ w: '100vw',
46
+ py: '$8',
47
+ opacity: sheetOpen ? '1' : '0.5',
48
+ h: sheetHeight,
49
+ minHeight: '50vh',
50
+ overflowY: 'auto',
51
+ backgroundColor: '$surface_default',
52
+ transition: 'all 0.2s linear',
53
+ ...containerCSS,
54
+ }}
55
+ >
56
+ <Flex
57
+ justify="between"
58
+ onTouchMove={e => {
59
+ const updatedSheetHeight = getUpdatedHeight(e, MINIMUM_HEIGHT);
60
+ setSheetHeight(updatedSheetHeight);
61
+ }}
62
+ css={{
63
+ borderBottom: '1px solid $border_bright',
64
+ px: '$8',
65
+ pb: '$4',
66
+ mb: '$4',
67
+ w: '100%',
68
+ }}
69
+ >
70
+ <Text variant="h6" css={{ color: '$on_surface_high' }}>
71
+ {title}
72
+ </Text>
73
+ <Popover.Close aria-label="Close">
74
+ <Box
75
+ ref={closeRef}
76
+ css={{
77
+ color: '$on_surface_high',
78
+ bg: '$surface_bright',
79
+ p: '$2',
80
+ borderRadius: '$round',
81
+ }}
82
+ >
83
+ <CrossIcon />
84
+ </Box>
85
+ </Popover.Close>
86
+ </Flex>
87
+ <Box css={{ px: '$8', maxHeight: '100%', overflowY: 'auto' }}>{children}</Box>
88
+ </Box>
89
+ </Popover.Content>
90
+ </Popover.Portal>
91
+ </Popover.Root>
92
+ </>
93
+ );
94
+ };
95
+
96
+ export default BottomActionSheet;
@@ -0,0 +1,46 @@
1
+ import React, { ReactElement } from 'react';
2
+ import { Meta } from '@storybook/react';
3
+ import { Button } from '../../../Button';
4
+ import { Box } from '../../../Layout';
5
+ import { Text } from '../../../Text';
6
+ import { CSS } from '../../../Theme';
7
+ import BottomActionSheet from './BottomActionSheet';
8
+
9
+ // WIP
10
+
11
+ export default {
12
+ title: 'Components/BottomActionSheet',
13
+ component: BottomActionSheet,
14
+ argTypes: {
15
+ title: { control: 'text' },
16
+ triggerContent: { control: 'jsx' },
17
+ containerCSS: { control: 'object' },
18
+ sideOffset: { control: 'number' },
19
+ defaultHeight: { control: 'number' },
20
+ },
21
+ } as Meta;
22
+
23
+ interface BottomActionSheetProps {
24
+ title: string;
25
+ triggerContent: ReactElement;
26
+ children: ReactElement;
27
+ containerCSS: CSS;
28
+ sideOffset: number;
29
+ defaultHeight: number;
30
+ }
31
+
32
+ const Template = (args: BottomActionSheetProps) => (
33
+ <BottomActionSheet {...args}>
34
+ <Box>
35
+ <Text>This is the content of the BottomActionSheet.</Text>
36
+ <Text>You can put any content you like here.</Text>
37
+ </Box>
38
+ </BottomActionSheet>
39
+ );
40
+
41
+ // Example story with default props
42
+ export const Default = Template.bind({});
43
+ Default.args = {
44
+ title: 'Example BottomActionSheet',
45
+ triggerContent: <Button>Open BottomActionSheet</Button>,
46
+ };