@100mslive/roomkit-react 0.1.2-alpha.0 → 0.1.2-alpha.1

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 (44) hide show
  1. package/dist/{ActiveSpeakerView-4XPIRZOK.js → ActiveSpeakerView-N7C6WL27.js} +6 -6
  2. package/dist/{ActiveSpeakerView-ADEYHQMU.css → ActiveSpeakerView-ZOCC7LQW.css} +2 -2
  3. package/dist/{PinnedTrackView-5DPVVOZW.css.map → ActiveSpeakerView-ZOCC7LQW.css.map} +1 -1
  4. package/dist/{HLSView-I26CVF5U.js → HLSView-3ILTIGBT.js} +5 -5
  5. package/dist/{HLSView-DWEEMZ6Z.css → HLSView-OVDMVJX5.css} +2 -2
  6. package/dist/{HLSView-DWEEMZ6Z.css.map → HLSView-OVDMVJX5.css.map} +1 -1
  7. package/dist/{PinnedTrackView-GGTCNH5V.js → PinnedTrackView-6N6N5WOF.js} +6 -6
  8. package/dist/{PinnedTrackView-5DPVVOZW.css → PinnedTrackView-RIL5IW5A.css} +2 -2
  9. package/dist/{conference-BDCDGBIS.css.map → PinnedTrackView-RIL5IW5A.css.map} +1 -1
  10. package/dist/{VirtualBackground-ZRRE4DUA.js → VirtualBackground-R3JHARN5.js} +3 -3
  11. package/dist/{chunk-MYK3T45M.js → chunk-DH3QSV4E.js} +2 -2
  12. package/dist/{chunk-4ISMCWQA.js → chunk-DRKV2LAC.js} +2 -2
  13. package/dist/{chunk-4ISMCWQA.js.map → chunk-DRKV2LAC.js.map} +1 -1
  14. package/dist/{chunk-KKLZ7K2L.js → chunk-G56Z3JA5.js} +7 -7
  15. package/dist/{chunk-KKLZ7K2L.js.map → chunk-G56Z3JA5.js.map} +1 -1
  16. package/dist/{chunk-THORW2WT.js → chunk-INRXWU7L.js} +2 -2
  17. package/dist/{chunk-LUND6FLY.js → chunk-TZJCHZPD.js} +9 -9
  18. package/dist/{chunk-LUND6FLY.js.map → chunk-TZJCHZPD.js.map} +1 -1
  19. package/dist/{conference-BDCDGBIS.css → conference-AIOOA5ON.css} +2 -2
  20. package/dist/{ActiveSpeakerView-ADEYHQMU.css.map → conference-AIOOA5ON.css.map} +1 -1
  21. package/dist/{conference-5TDUAQ6K.js → conference-IKSFGLVK.js} +258 -434
  22. package/dist/conference-IKSFGLVK.js.map +7 -0
  23. package/dist/index.cjs.css +1 -1
  24. package/dist/index.cjs.css.map +1 -1
  25. package/dist/index.cjs.js +419 -614
  26. package/dist/index.cjs.js.map +4 -4
  27. package/dist/index.css +1 -1
  28. package/dist/index.css.map +1 -1
  29. package/dist/index.js +4 -4
  30. package/dist/meta.cjs.json +10 -128
  31. package/dist/meta.esbuild.json +94 -212
  32. package/dist/{transcription-PYTSSAOB.js → transcription-XYVVYRAS.js} +3 -3
  33. package/package.json +6 -6
  34. package/src/Prebuilt/AppContext.jsx +1 -1
  35. package/src/Prebuilt/components/Footer/ConferencingFooter.jsx +1 -4
  36. package/src/Prebuilt/components/Preview/PreviewJoin.jsx +2 -2
  37. package/dist/conference-5TDUAQ6K.js.map +0 -7
  38. /package/dist/{ActiveSpeakerView-4XPIRZOK.js.map → ActiveSpeakerView-N7C6WL27.js.map} +0 -0
  39. /package/dist/{HLSView-I26CVF5U.js.map → HLSView-3ILTIGBT.js.map} +0 -0
  40. /package/dist/{PinnedTrackView-GGTCNH5V.js.map → PinnedTrackView-6N6N5WOF.js.map} +0 -0
  41. /package/dist/{VirtualBackground-ZRRE4DUA.js.map → VirtualBackground-R3JHARN5.js.map} +0 -0
  42. /package/dist/{chunk-MYK3T45M.js.map → chunk-DH3QSV4E.js.map} +0 -0
  43. /package/dist/{chunk-THORW2WT.js.map → chunk-INRXWU7L.js.map} +0 -0
  44. /package/dist/{transcription-PYTSSAOB.js.map → transcription-XYVVYRAS.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/Prebuilt/components/conference.jsx", "../src/Prebuilt/components/Notifications/HLSFailureModal.jsx", "../src/Prebuilt/layouts/mainView.jsx", "../src/Prebuilt/layouts/EmbedView.jsx", "../src/Prebuilt/layouts/screenShareView.jsx", "../src/Prebuilt/components/Playlist/VideoPlayer.jsx", "../src/Prebuilt/components/Playlist/PlaylistControls.jsx", "../src/Prebuilt/components/hooks/usePlaylist.js", "../src/Prebuilt/components/ScreenshareDisplay.jsx", "../src/Prebuilt/layouts/InsetView.jsx", "../src/Prebuilt/layouts/mainGridView.jsx", "../src/Prebuilt/layouts/NonPublisherView.jsx", "../src/Prebuilt/components/AppData/useAppLayout.js", "../src/Prebuilt/layouts/PDFView.jsx", "../src/Prebuilt/layouts/WaitingView.jsx", "../src/Prebuilt/plugins/whiteboard/index.js", "../src/Prebuilt/components/Footer.jsx", "../src/Prebuilt/components/Footer/ConferencingFooter.jsx", "../src/Prebuilt/components/Playlist/Playlist.jsx", "../src/Prebuilt/components/Playlist/PlaylistItem.jsx", "../src/Prebuilt/components/MoreSettings/MoreSettings.jsx", "../src/Prebuilt/components/Settings/StartRecording.jsx", "../src/Prebuilt/components/StatsForNerds.jsx", "../src/Prebuilt/components/MoreSettings/BulkRoleChangeModal.jsx", "../src/Prebuilt/components/MoreSettings/ChangeNameModal.jsx", "../src/Prebuilt/components/MoreSettings/ChangeSelfRole.jsx", "../src/Prebuilt/components/MoreSettings/EmbedUrl.jsx", "../src/Prebuilt/components/MoreSettings/FullScreenItem.jsx", "../src/Prebuilt/components/hooks/useFullscreen.js", "../src/Prebuilt/components/MoreSettings/MuteAllModal.jsx", "../src/Prebuilt/components/PIP/index.jsx", "../src/Prebuilt/components/PIP/PIPComponent.jsx", "../src/Prebuilt/components/PIP/PIPManager.js", "../src/Prebuilt/components/PIP/pipUtils.js", "../src/Prebuilt/components/PIP/SetupMediaSession.js", "../src/Prebuilt/components/ScreenShare.jsx", "../src/Prebuilt/components/pdfAnnotator/shareScreenOptions.jsx", "../src/Prebuilt/components/ShareMenuIcon.jsx", "../src/Prebuilt/components/pdfAnnotator/pdfFileOptions.jsx", "../src/Prebuilt/components/pdfAnnotator/pdfErrorView.jsx", "../src/Prebuilt/components/pdfAnnotator/pdfHeader.jsx", "../src/Prebuilt/components/pdfAnnotator/pdfInfo.jsx", "../src/Prebuilt/components/pdfAnnotator/submitPdf.jsx", "../src/Prebuilt/components/pdfAnnotator/uploadedFile.jsx", "../src/Prebuilt/components/ScreenshareHintModal.jsx", "../src/Prebuilt/components/Footer/ChatToggle.jsx", "../src/Prebuilt/components/Footer/StreamingFooter.jsx", "../src/Prebuilt/components/RoleChangeRequestModal.jsx"],
4
- "sourcesContent": ["import React, { useEffect, useRef, useState } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { usePrevious } from 'react-use';\nimport {\n HMSRoomState,\n selectAppData,\n selectIsConnectedToRoom,\n selectRoomState,\n useHMSActions,\n useHMSStore,\n} from '@100mslive/react-sdk';\nimport { HLSFailureModal } from './Notifications/HLSFailureModal';\nimport { Box, Flex } from '../../Layout';\nimport { useHMSPrebuiltContext } from '../AppContext';\nimport { ConferenceMainView } from '../layouts/mainView';\nimport { Footer } from './Footer';\nimport FullPageProgress from './FullPageProgress';\nimport { Header } from './Header';\nimport { RoleChangeRequestModal } from './RoleChangeRequestModal';\nimport { useAuthToken, useIsHeadless, useSetAppDataByKey } from './AppData/useUISettings';\nimport { useNavigation } from './hooks/useNavigation';\nimport { useSkipPreview } from './hooks/useSkipPreview';\nimport { APP_DATA, EMOJI_REACTION_TYPE, isAndroid, isIOS, isIPadOS } from '../common/constants';\n\nconst Conference = () => {\n const navigate = useNavigation();\n const { roomId, role } = useParams();\n const isHeadless = useIsHeadless();\n const roomState = useHMSStore(selectRoomState);\n const prevState = usePrevious(roomState);\n const isConnectedToRoom = useHMSStore(selectIsConnectedToRoom);\n const hmsActions = useHMSActions();\n const [hideControls, setHideControls] = useState(false);\n const dropdownList = useHMSStore(selectAppData(APP_DATA.dropdownList));\n const skipPreview = useSkipPreview();\n const { showPreview } = useHMSPrebuiltContext();\n const authTokenInAppData = useAuthToken();\n const headerRef = useRef();\n const footerRef = useRef();\n const dropdownListRef = useRef();\n const performAutoHide = hideControls && (isAndroid || isIOS || isIPadOS);\n const [isHLSStarted] = useSetAppDataByKey(APP_DATA.hlsStarted);\n\n const toggleControls = () => {\n if (dropdownListRef.current?.length === 0) {\n setHideControls(value => !value);\n }\n };\n\n useEffect(() => {\n let timeout = null;\n dropdownListRef.current = dropdownList || [];\n if (dropdownListRef.current.length === 0) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n if (dropdownListRef.current.length === 0) {\n setHideControls(true);\n }\n }, 5000);\n }\n return () => {\n clearTimeout(timeout);\n };\n }, [dropdownList, hideControls]);\n\n useEffect(() => {\n if (!roomId) {\n navigate(`/`);\n return;\n }\n if (!showPreview) {\n return;\n }\n if (\n !prevState &&\n !(roomState === HMSRoomState.Connecting || roomState === HMSRoomState.Reconnecting || isConnectedToRoom)\n ) {\n if (role) navigate(`/preview/${roomId || ''}/${role}`);\n else navigate(`/preview/${roomId || ''}`);\n }\n }, [isConnectedToRoom, prevState, roomState, navigate, role, roomId, showPreview]);\n\n useEffect(() => {\n if (authTokenInAppData && !isConnectedToRoom && !showPreview && roomState !== HMSRoomState.Connecting) {\n hmsActions\n .join({\n userName: 'Test',\n authToken: authTokenInAppData,\n initEndpoint: process.env.REACT_APP_ENV\n ? `https://${process.env.REACT_APP_ENV}-init.100ms.live/init`\n : undefined,\n initialSettings: {\n isAudioMuted: skipPreview,\n isVideoMuted: skipPreview,\n speakerAutoSelectionBlacklist: ['Yeti Stereo Microphone'],\n },\n })\n .catch(console.error);\n }\n }, [authTokenInAppData, skipPreview, hmsActions, isConnectedToRoom, showPreview, roomState]);\n\n useEffect(() => {\n // beam doesn't need to store messages, saves on unnecessary store updates in large calls\n if (isHeadless) {\n hmsActions.ignoreMessageTypes(['chat', EMOJI_REACTION_TYPE]);\n }\n }, [isHeadless, hmsActions]);\n\n if (!isConnectedToRoom) {\n return <FullPageProgress loadingText=\"Joining...\" />;\n }\n\n if (isHLSStarted) {\n return <FullPageProgress loadingText=\"Starting live stream...\" />;\n }\n\n return (\n <Flex css={{ size: '100%', overflow: 'hidden' }} direction=\"column\">\n {!isHeadless && (\n <Box\n ref={headerRef}\n css={{\n h: '$18',\n transition: 'margin 0.3s ease-in-out',\n marginTop: performAutoHide ? `-${headerRef.current?.clientHeight}px` : 'none',\n '@md': {\n h: '$17',\n },\n }}\n data-testid=\"header\"\n >\n <Header />\n </Box>\n )}\n <Box\n css={{\n w: '100%',\n flex: '1 1 0',\n minHeight: 0,\n paddingBottom: 'env(safe-area-inset-bottom)',\n }}\n id=\"conferencing\"\n data-testid=\"conferencing\"\n onClick={toggleControls}\n >\n <ConferenceMainView />\n </Box>\n {!isHeadless && (\n <Box\n ref={footerRef}\n css={{\n flexShrink: 0,\n maxHeight: '$24',\n transition: 'margin 0.3s ease-in-out',\n marginBottom: performAutoHide ? `-${footerRef.current?.clientHeight}px` : undefined,\n '@md': {\n maxHeight: 'unset',\n },\n }}\n data-testid=\"footer\"\n >\n <Footer />\n </Box>\n )}\n <RoleChangeRequestModal />\n <HLSFailureModal />\n </Flex>\n );\n};\n\nexport default Conference;\n", "import React, { useCallback, useState } from 'react';\nimport { selectHLSState, useHMSActions, useHMSStore } from '@100mslive/react-sdk';\nimport { Button } from '../../../Button';\nimport { Flex } from '../../../Layout';\nimport { Dialog } from '../../../Modal';\nimport { Text } from '../../../Text';\nimport { useSetAppDataByKey } from '../AppData/useUISettings';\nimport { APP_DATA } from '../../common/constants';\n\nexport function HLSFailureModal() {\n const { hlsError } = useHMSStore(selectHLSState).error || false;\n const [openModal, setOpenModal] = useState(!!hlsError);\n const hmsActions = useHMSActions();\n const [isHLSStarted, setHLSStarted] = useSetAppDataByKey(APP_DATA.hlsStarted);\n const startHLS = useCallback(async () => {\n try {\n if (isHLSStarted) {\n return;\n }\n setHLSStarted(true);\n await hmsActions.startHLSStreaming({});\n } catch (error) {\n if (error.message.includes('invalid input')) {\n await startHLS();\n return;\n }\n setHLSStarted(false);\n }\n }, [hmsActions, isHLSStarted, setHLSStarted]);\n\n return hlsError ? (\n <Dialog.Root\n open={openModal}\n onOpenChange={value => {\n if (!value) {\n setOpenModal(false);\n }\n }}\n >\n <Dialog.Portal>\n <Dialog.Overlay />\n <Dialog.Content css={{ w: 'min(360px, 90%)' }}>\n <Dialog.Title\n css={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n borderBottom: '1px solid $border_default',\n mt: '$4',\n }}\n >\n <Text variant=\"h6\" css={{ fontWeight: '$semiBold' }}>\n Failed to Go Live\n </Text>\n </Dialog.Title>\n <Text variant=\"sm\" css={{ mb: '$10', color: '$on_surface_medium' }}>\n Something went wrong and your live broadcast failed. Please try again.\n </Text>\n <Flex align=\"center\" justify=\"between\" css={{ w: '100%', gap: '$8' }}>\n <Button outlined variant=\"standard\" css={{ w: '100%' }} onClick={() => setOpenModal(false)}>\n Dismiss\n </Button>\n <Button css={{ w: '100%' }}>Go Live</Button>\n </Flex>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n ) : null;\n}\n", "import React, { Suspense, useCallback, useEffect } from 'react';\nimport { JoinForm_JoinBtnType } from '@100mslive/types-prebuilt/elements/join_form';\nimport {\n selectIsConnectedToRoom,\n selectLocalPeerRoleName,\n selectPeerScreenSharing,\n selectPeerSharingAudio,\n selectPeerSharingVideoPlaylist,\n selectPermissions,\n selectTemplateAppData,\n useHMSActions,\n useHMSStore,\n useRecordingStreaming,\n} from '@100mslive/react-sdk';\nimport FullPageProgress from '../components/FullPageProgress';\nimport { Flex } from '../../Layout';\nimport { useRoomLayout } from '../provider/roomLayoutProvider';\nimport { EmbedView } from './EmbedView';\nimport { InsetView } from './InsetView';\nimport { MainGridView } from './mainGridView';\nimport { PDFView } from './PDFView';\nimport ScreenShareView from './screenShareView';\nimport SidePane from './SidePane';\nimport { WaitingView } from './WaitingView';\nimport { useWhiteboardMetadata } from '../plugins/whiteboard';\nimport { useAppConfig } from '../components/AppData/useAppConfig';\nimport {\n useHLSViewerRole,\n useIsHeadless,\n usePDFAnnotator,\n usePinnedTrack,\n useSetAppDataByKey,\n useUISettings,\n useUrlToEmbed,\n useWaitingViewerRole,\n} from '../components/AppData/useUISettings';\nimport { APP_DATA, SESSION_STORE_KEY, UI_MODE_ACTIVE_SPEAKER } from '../common/constants';\n\n// const WhiteboardView = React.lazy(() => import(\"./WhiteboardView\"));\nconst HLSView = React.lazy(() => import('./HLSView'));\nconst ActiveSpeakerView = React.lazy(() => import('./ActiveSpeakerView'));\nconst PinnedTrackView = React.lazy(() => import('./PinnedTrackView'));\n\nexport const ConferenceMainView = () => {\n const localPeerRole = useHMSStore(selectLocalPeerRoleName);\n const pinnedTrack = usePinnedTrack();\n const peerSharing = useHMSStore(selectPeerScreenSharing);\n const peerSharingAudio = useHMSStore(selectPeerSharingAudio);\n const peerSharingPlaylist = useHMSStore(selectPeerSharingVideoPlaylist);\n const { whiteboardOwner: whiteboardShared } = useWhiteboardMetadata();\n const isConnected = useHMSStore(selectIsConnectedToRoom);\n const uiMode = useHMSStore(selectTemplateAppData).uiMode;\n const hmsActions = useHMSActions();\n const isHeadless = useIsHeadless();\n const headlessUIMode = useAppConfig('headlessConfig', 'uiMode');\n const { uiViewMode, isAudioOnly } = useUISettings();\n const hlsViewerRole = useHLSViewerRole();\n const waitingViewerRole = useWaitingViewerRole();\n const urlToIframe = useUrlToEmbed();\n const pdfAnnotatorActive = usePDFAnnotator();\n\n const { isHLSRunning } = useRecordingStreaming();\n const [isHLSStarted, setHLSStarted] = useSetAppDataByKey(APP_DATA.hlsStarted);\n const permissions = useHMSStore(selectPermissions);\n const roomLayout = useRoomLayout();\n const { join_form: joinForm = {} } = roomLayout?.screens?.preview?.default?.elements || {};\n\n const startHLS = useCallback(async () => {\n try {\n if (isHLSStarted) {\n return;\n }\n setHLSStarted(true);\n await hmsActions.startHLSStreaming({});\n } catch (error) {\n if (error.message.includes('invalid input')) {\n await startHLS();\n return;\n }\n setHLSStarted(false);\n }\n }, [hmsActions, isHLSStarted, setHLSStarted]);\n\n useEffect(() => {\n if (!isConnected) {\n return;\n }\n const audioPlaylist = JSON.parse(process.env.REACT_APP_AUDIO_PLAYLIST || '[]');\n const videoPlaylist = JSON.parse(process.env.REACT_APP_VIDEO_PLAYLIST || '[]');\n if (videoPlaylist.length > 0) {\n hmsActions.videoPlaylist.setList(videoPlaylist);\n }\n if (audioPlaylist.length > 0) {\n hmsActions.audioPlaylist.setList(audioPlaylist);\n }\n\n // Is a streaming kit and broadcaster joins\n if (\n permissions?.hlsStreaming &&\n !isHLSRunning &&\n joinForm.join_btn_type === JoinForm_JoinBtnType.JOIN_BTN_TYPE_JOIN_AND_GO_LIVE\n ) {\n startHLS();\n }\n\n hmsActions.sessionStore.observe([SESSION_STORE_KEY.PINNED_MESSAGE, SESSION_STORE_KEY.SPOTLIGHT]);\n }, [isConnected, hmsActions, permissions, joinForm]);\n\n if (!localPeerRole) {\n // we don't know the role yet to decide how to render UI\n return null;\n }\n\n let ViewComponent;\n if (localPeerRole === hlsViewerRole) {\n ViewComponent = HLSView;\n } else if (localPeerRole === waitingViewerRole) {\n ViewComponent = WaitingView;\n } else if (pdfAnnotatorActive) {\n ViewComponent = PDFView;\n } else if (urlToIframe) {\n ViewComponent = EmbedView;\n } else if (whiteboardShared) {\n // ViewComponent = WhiteboardView;\n } else if (uiMode === 'inset') {\n ViewComponent = InsetView;\n } else if (((peerSharing && peerSharing.id !== peerSharingAudio?.id) || peerSharingPlaylist) && !isAudioOnly) {\n ViewComponent = ScreenShareView;\n } else if (pinnedTrack) {\n ViewComponent = PinnedTrackView;\n } else if (uiViewMode === UI_MODE_ACTIVE_SPEAKER || (isHeadless && headlessUIMode === UI_MODE_ACTIVE_SPEAKER)) {\n ViewComponent = ActiveSpeakerView;\n } else {\n ViewComponent = MainGridView;\n }\n\n return (\n <Suspense fallback={<FullPageProgress />}>\n <Flex\n css={{\n size: '100%',\n position: 'relative',\n }}\n >\n <ViewComponent />\n <SidePane />\n </Flex>\n </Suspense>\n );\n};\n", "import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useMedia } from 'react-use';\nimport {\n selectLocalPeerID,\n selectLocalPeerRoleName,\n selectPeers,\n selectPeerScreenSharing,\n throwErrorHandler,\n useHMSStore,\n useScreenShare,\n} from '@100mslive/react-sdk';\nimport { Box, Flex } from '../../Layout';\nimport { config as cssConfig } from '../../Theme';\nimport { SidePane } from './screenShareView';\nimport { useSetAppDataByKey } from '../components/AppData/useUISettings';\nimport { APP_DATA } from '../common/constants';\n\nexport const EmbedView = () => {\n return (\n <EmbebScreenShareView>\n <EmbedComponent />\n </EmbebScreenShareView>\n );\n};\n\nexport const EmbebScreenShareView = ({ children }) => {\n const peers = useHMSStore(selectPeers);\n\n const mediaQueryLg = cssConfig.media.xl;\n const showSidebarInBottom = useMedia(mediaQueryLg);\n const localPeerID = useHMSStore(selectLocalPeerID);\n const localPeerRole = useHMSStore(selectLocalPeerRoleName);\n const peerPresenting = useHMSStore(selectPeerScreenSharing);\n const isPresenterFromMyRole = peerPresenting?.roleName?.toLowerCase() === localPeerRole?.toLowerCase();\n const amIPresenting = localPeerID === peerPresenting?.id;\n const showPresenterInSmallTile = showSidebarInBottom || amIPresenting || isPresenterFromMyRole;\n\n const smallTilePeers = useMemo(() => {\n const smallTilePeers = peers.filter(peer => peer.id !== peerPresenting?.id);\n if (showPresenterInSmallTile && peerPresenting) {\n smallTilePeers.unshift(peerPresenting); // put presenter on first page\n }\n return smallTilePeers;\n }, [peers, peerPresenting, showPresenterInSmallTile]);\n return (\n <Flex css={{ size: '100%' }} direction={showSidebarInBottom ? 'column' : 'row'}>\n {children}\n <Flex\n direction={{ '@initial': 'column', '@lg': 'row' }}\n css={{\n overflow: 'hidden',\n p: '$4 $8',\n flex: '0 0 20%',\n '@xl': {\n flex: '1 1 0',\n },\n }}\n >\n <SidePane\n showSidebarInBottom={showSidebarInBottom}\n peerScreenSharing={peerPresenting}\n isPresenterInSmallTiles={showPresenterInSmallTile}\n smallTilePeers={smallTilePeers}\n totalPeers={peers.length}\n />\n </Flex>\n </Flex>\n );\n};\n\nconst EmbedComponent = () => {\n const { amIScreenSharing, toggleScreenShare } = useScreenShare(throwErrorHandler);\n const [embedConfig, setEmbedConfig] = useSetAppDataByKey(APP_DATA.embedConfig);\n const [wasScreenShared, setWasScreenShared] = useState(false);\n // to handle - https://github.com/facebook/react/issues/24502\n const screenShareAttemptInProgress = useRef(false);\n const src = embedConfig.url;\n const iframeRef = useRef();\n\n const resetEmbedConfig = useCallback(() => {\n if (src) {\n setEmbedConfig({ url: '' });\n }\n }, [src, setEmbedConfig]);\n\n useEffect(() => {\n if (embedConfig.shareScreen && !amIScreenSharing && !wasScreenShared && !screenShareAttemptInProgress.current) {\n screenShareAttemptInProgress.current = true;\n // start screenshare on load for others in the room to see\n toggleScreenShare({\n forceCurrentTab: true,\n cropElement: iframeRef.current,\n })\n .then(() => {\n setWasScreenShared(true);\n })\n .catch(resetEmbedConfig)\n .finally(() => {\n screenShareAttemptInProgress.current = false;\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n // reset embed when screenshare is closed from anywhere\n if (wasScreenShared && !amIScreenSharing) {\n resetEmbedConfig();\n }\n return () => {\n // close screenshare when this component is being unmounted\n if (wasScreenShared && amIScreenSharing) {\n resetEmbedConfig();\n toggleScreenShare(); // stop\n }\n };\n }, [wasScreenShared, amIScreenSharing, resetEmbedConfig, toggleScreenShare]);\n\n return (\n <Box\n ref={iframeRef}\n css={{\n mx: '$8',\n flex: '3 1 0',\n '@lg': {\n flex: '2 1 0',\n display: 'flex',\n alignItems: 'center',\n },\n }}\n >\n <iframe\n src={src}\n title={src}\n style={{ width: '100%', height: '100%', border: 0 }}\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture fullscreen\"\n referrerPolicy=\"no-referrer\"\n />\n </Box>\n );\n};\n", "import React, { Fragment, useCallback, useMemo } from 'react';\nimport { useMedia } from 'react-use';\nimport {\n selectLocalPeerID,\n selectLocalPeerRoleName,\n selectPeers,\n selectPeerScreenSharing,\n selectPeerSharingVideoPlaylist,\n selectScreenShareByPeerID,\n useHMSStore,\n} from '@100mslive/react-sdk';\nimport { VideoPlayer } from '../components/Playlist/VideoPlayer';\nimport { ScreenshareDisplay } from '../components/ScreenshareDisplay';\nimport ScreenshareTile from '../components/ScreenshareTile';\nimport VideoList from '../components/VideoList';\nimport VideoTile from '../components/VideoTile';\nimport { Box, Flex } from '../../Layout';\nimport { config as cssConfig } from '../../Theme';\n\nconst ScreenShareView = () => {\n // for smaller screen we will show sidebar in bottom\n const mediaQueryLg = cssConfig.media.xl;\n const showSidebarInBottom = useMedia(mediaQueryLg);\n const peers = useHMSStore(selectPeers);\n const localPeerID = useHMSStore(selectLocalPeerID);\n const localPeerRole = useHMSStore(selectLocalPeerRoleName);\n const peerPresenting = useHMSStore(selectPeerScreenSharing);\n const peerSharingPlaylist = useHMSStore(selectPeerSharingVideoPlaylist);\n const isPresenterFromMyRole = peerPresenting?.roleName?.toLowerCase() === localPeerRole?.toLowerCase();\n const amIPresenting = localPeerID === peerPresenting?.id;\n const showPresenterInSmallTile = showSidebarInBottom || amIPresenting || isPresenterFromMyRole;\n\n const smallTilePeers = useMemo(() => {\n const smallTilePeers = peers.filter(peer => peer.id !== peerPresenting?.id);\n if (showPresenterInSmallTile && peerPresenting) {\n smallTilePeers.unshift(peerPresenting); // put presenter on first page\n }\n return smallTilePeers;\n }, [peers, peerPresenting, showPresenterInSmallTile]);\n\n return (\n <Flex\n css={{\n size: '100%',\n }}\n direction={showSidebarInBottom ? 'column' : 'row'}\n >\n <ScreenShareComponent\n amIPresenting={amIPresenting}\n peerPresenting={peerPresenting}\n peerSharingPlaylist={peerSharingPlaylist}\n />\n <Flex\n direction={{ '@initial': 'column', '@lg': 'row' }}\n css={{\n overflow: 'hidden',\n p: '$4 $8',\n flex: '0 0 20%',\n '@xl': {\n flex: '1 1 0',\n },\n }}\n >\n <SidePane\n showSidebarInBottom={showSidebarInBottom}\n peerScreenSharing={peerPresenting}\n isPresenterInSmallTiles={showPresenterInSmallTile}\n smallTilePeers={smallTilePeers}\n totalPeers={peers.length}\n />\n </Flex>\n </Flex>\n );\n};\n\n// Sidepane will show the camera stream of the main peer who is screensharing\n// and both camera + screen(if applicable) of others\nexport const SidePane = ({\n isPresenterInSmallTiles,\n peerScreenSharing, // the peer who is screensharing\n smallTilePeers,\n showSidebarInBottom,\n}) => {\n // The main peer's screenshare is already being shown in center view\n const shouldShowScreenFn = useCallback(\n peer => peerScreenSharing && peer.id !== peerScreenSharing.id,\n [peerScreenSharing],\n );\n return (\n <Fragment>\n {!isPresenterInSmallTiles && <LargeTilePeerView peerScreenSharing={peerScreenSharing} />}\n <SmallTilePeersView\n showSidebarInBottom={showSidebarInBottom}\n smallTilePeers={smallTilePeers}\n shouldShowScreenFn={shouldShowScreenFn}\n />\n </Fragment>\n );\n};\n\nconst ScreenShareComponent = ({ amIPresenting, peerPresenting, peerSharingPlaylist }) => {\n const screenshareTrack = useHMSStore(selectScreenShareByPeerID(peerPresenting?.id));\n\n if (peerSharingPlaylist) {\n return (\n <Box\n css={{\n mx: '$8',\n flex: '3 1 0',\n '@xl': {\n flex: '2 1 0',\n display: 'flex',\n alignItems: 'center',\n },\n }}\n >\n <VideoPlayer peerId={peerSharingPlaylist.id} />\n </Box>\n );\n }\n\n return (\n <Box\n css={{\n flex: '3 1 0',\n mx: '$8',\n '@xl': { ml: '$4', maxHeight: '80%', minHeight: 0 },\n }}\n >\n {peerPresenting &&\n (amIPresenting && !['browser', 'window', 'application'].includes(screenshareTrack?.displaySurface) ? (\n <Box css={{ objectFit: 'contain', h: '100%' }}>\n <ScreenshareDisplay />\n </Box>\n ) : (\n <ScreenshareTile peerId={peerPresenting?.id} />\n ))}\n </Box>\n );\n};\n\nconst SmallTilePeersView = ({ smallTilePeers, shouldShowScreenFn, showSidebarInBottom }) => {\n return (\n <Flex\n css={{\n flex: '2 1 0',\n }}\n >\n {smallTilePeers && smallTilePeers.length > 0 && (\n <VideoList\n peers={smallTilePeers}\n maxColCount={showSidebarInBottom ? undefined : 1}\n maxRowCount={showSidebarInBottom ? 1 : undefined}\n includeScreenShareForPeer={shouldShowScreenFn}\n />\n )}\n </Flex>\n );\n};\n\nconst LargeTilePeerView = ({ peerScreenSharing, showStatsOnTiles }) => {\n return peerScreenSharing ? (\n <Box\n css={{\n flex: '1 1 0',\n minHeight: '25%',\n py: '$4',\n '@lg': {\n mr: '$4',\n minHeight: 'unset',\n py: 0,\n },\n '@sm': {\n height: '100%',\n maxHeight: '75%',\n alignSelf: 'center',\n },\n }}\n >\n <VideoTile showStatsOnTiles={showStatsOnTiles} width=\"100%\" height=\"100%\" peerId={peerScreenSharing.id} />\n </Box>\n ) : null;\n};\n\nexport default ScreenShareView;\n", "import React, { useRef } from 'react';\nimport { useFullscreen, useToggle } from 'react-use';\nimport screenfull from 'screenfull';\nimport {\n selectVideoPlaylist,\n selectVideoPlaylistAudioTrackByPeerID,\n selectVideoPlaylistVideoTrackByPeerID,\n useHMSActions,\n useHMSStore,\n} from '@100mslive/react-sdk';\nimport { CrossIcon, ExpandIcon, ShrinkIcon } from '@100mslive/react-icons';\nimport { Box, Flex, IconButton, Text, Video, VideoTileStats } from '../../../';\nimport { VideoPlaylistControls } from './PlaylistControls';\nimport { useUISettings } from '../AppData/useUISettings';\nimport { UI_SETTINGS } from '../../common/constants';\n\nexport const VideoPlayer = React.memo(({ peerId }) => {\n const videoTrack = useHMSStore(selectVideoPlaylistVideoTrackByPeerID(peerId));\n const audioTrack = useHMSStore(selectVideoPlaylistAudioTrackByPeerID(peerId));\n const active = useHMSStore(selectVideoPlaylist.selectedItem);\n const isAudioOnly = useUISettings(UI_SETTINGS.isAudioOnly);\n const hmsActions = useHMSActions();\n const ref = useRef(null);\n const [show, toggle] = useToggle(false);\n const isFullscreen = useFullscreen(ref, show, {\n onClose: () => toggle(false),\n });\n const showStatsOnTiles = useUISettings(UI_SETTINGS.showStatsOnTiles);\n\n return (\n <Flex direction=\"column\" justify=\"center\" css={{ w: '100%', h: '100%' }} ref={ref}>\n {active && (\n <Flex\n justify=\"between\"\n align=\"center\"\n css={{\n bg: '$surface_default',\n p: '$2 $2 $2 $6',\n borderTopLeftRadius: '$1',\n borderTopRightRadius: '$1',\n }}\n >\n <Text css={{ color: '$on_primary_high' }}>{active.name}</Text>\n <IconButton\n css={{\n color: '$on_primary_high',\n }}\n onClick={() => {\n hmsActions.videoPlaylist.stop();\n }}\n data-testid=\"videoplaylist_cross_btn\"\n >\n <CrossIcon />\n </IconButton>\n </Flex>\n )}\n {showStatsOnTiles ? (\n <Box css={{ '& > div': { top: '$14', left: '$8' } }}>\n <VideoTileStats\n audioTrackID={audioTrack?.id}\n videoTrackID={videoTrack?.id}\n peerID={peerId}\n isLocal={active}\n />\n </Box>\n ) : null}\n <Video\n trackId={videoTrack?.id}\n attach={!isAudioOnly}\n css={{\n objectFit: 'contain',\n h: 'auto',\n r: '$1',\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n }}\n />\n <VideoPlaylistControls>\n {screenfull.enabled && (\n <IconButton\n onClick={() => toggle()}\n css={{\n color: '$on_primary_high',\n height: 'max-content',\n alignSelf: 'center',\n cursor: 'pointer',\n }}\n >\n {isFullscreen ? <ShrinkIcon /> : <ExpandIcon />}\n </IconButton>\n )}\n </VideoPlaylistControls>\n </Flex>\n );\n});\n", "import React from 'react';\nimport {\n HMSPlaylistType,\n selectAudioPlaylist,\n selectAudioTrackVolume,\n selectPeerSharingVideoPlaylist,\n selectVideoPlaylist,\n selectVideoPlaylistAudioTrackByPeerID,\n useHMSActions,\n useHMSStore,\n} from '@100mslive/react-sdk';\nimport { NextIcon, PauseIcon, PlayIcon, PlaylistIcon, PrevIcon, SpeakerIcon } from '@100mslive/react-icons';\nimport { Box, Flex, IconButton, Slider, Text } from '../../../';\nimport { usePlaylist } from '../hooks/usePlaylist';\n\nconst Progress = ({ type, duration }) => {\n const selectPlaylist = type === HMSPlaylistType.audio ? selectAudioPlaylist : selectVideoPlaylist;\n const progress = useHMSStore(selectPlaylist.progress);\n const hmsActions = useHMSActions();\n const playlistAction = type === HMSPlaylistType.audio ? hmsActions.audioPlaylist : hmsActions.videoPlaylist;\n\n if (!duration) {\n return null;\n }\n\n return (\n <Slider\n step={1}\n value={[progress]}\n onValueChange={e => {\n playlistAction.seekTo(e[0] * 0.01 * duration);\n }}\n />\n );\n};\n\nexport const PlaylistActive = ({ type, onToggle }) => {\n const isAudioPlaylist = type === HMSPlaylistType.audio;\n const selector = isAudioPlaylist ? selectAudioPlaylist : selectVideoPlaylist;\n const active = useHMSStore(selector.selectedItem);\n if (!active) {\n return null;\n }\n return (\n <Box css={{ mt: '$8' }}>\n <Flex justify=\"between\" css={{ w: '100%' }}>\n <Box>\n <Text variant=\"md\">{active.name}</Text>\n {active.metadata?.description && <Text variant=\"xs\">{active.metadata?.description}</Text>}\n </Box>\n <IconButton onClick={onToggle} css={{ alignSelf: 'center' }} data-testid=\"playlist_collapse_btn\">\n <PlaylistIcon />\n </IconButton>\n </Flex>\n </Box>\n );\n};\n\nconst Controls = ({ type, css = {} }) => {\n const { active, hasNext, hasPrevious, actions } = usePlaylist(type);\n if (!active) {\n return null;\n }\n return (\n <Flex justify=\"center\" css={css}>\n <IconButton\n disabled={!hasPrevious}\n onClick={() => {\n actions.playPrevious();\n }}\n data-testid=\"playlist_prev_btn\"\n >\n <PrevIcon />\n </IconButton>\n <IconButton\n onClick={() => {\n active.playing ? actions.pause() : actions.play(active.id);\n }}\n data-testid=\"playlist_play_pause_btn\"\n >\n {active.playing ? <PauseIcon width={32} height={32} /> : <PlayIcon width={32} height={32} />}\n </IconButton>\n <IconButton\n disabled={!hasNext}\n onClick={() => {\n actions.playNext();\n }}\n data-testid=\"playlist_next_btn\"\n >\n <NextIcon />\n </IconButton>\n </Flex>\n );\n};\n\nconst VolumeControl = () => {\n const hmsActions = useHMSActions();\n const volume = useHMSStore(selectVideoPlaylist.volume);\n const active = useHMSStore(selectVideoPlaylist.selectedItem);\n const peerSharingPlaylist = useHMSStore(selectPeerSharingVideoPlaylist);\n const audioTrack = useHMSStore(selectVideoPlaylistAudioTrackByPeerID(peerSharingPlaylist?.id));\n const audioTrackVolume = useHMSStore(selectAudioTrackVolume(audioTrack?.id));\n const sliderVolume = active ? volume : audioTrackVolume;\n\n return (\n <Flex align=\"center\" css={{ color: '$on_primary_high' }}>\n <SpeakerIcon />\n <Slider\n css={{ mx: '$4', w: '$20' }}\n min={0}\n max={100}\n step={1}\n value={[Math.floor(sliderVolume ?? 100)]}\n onValueChange={e => {\n const value = e[0];\n if (active) {\n hmsActions.videoPlaylist.setVolume(value);\n } else if (audioTrack) {\n hmsActions.setVolume(value, audioTrack.id);\n }\n }}\n thumbStyles={{ w: '$6', h: '$6' }}\n />\n </Flex>\n );\n};\n\nexport const AudioPlaylistControls = ({ onToggle }) => {\n const { active } = usePlaylist(HMSPlaylistType.audio);\n if (!active) {\n return null;\n }\n return (\n <Box\n css={{\n p: '$8',\n borderTop: '1px solid $border_bright',\n bg: '$surface_default',\n }}\n >\n <Controls type={HMSPlaylistType.audio} />\n <Progress type={HMSPlaylistType.audio} duration={active.duration} />\n <PlaylistActive type={HMSPlaylistType.audio} onToggle={onToggle} />\n </Box>\n );\n};\n\nexport const VideoPlaylistControls = ({ children }) => {\n const { active } = usePlaylist(HMSPlaylistType.video);\n\n return (\n <Box\n css={{\n p: '$8',\n mt: '-$24',\n w: '100%',\n zIndex: 1,\n '@lg': {\n mt: 0,\n p: '$6',\n },\n }}\n >\n {active && <Progress type={HMSPlaylistType.video} duration={active.duration} />}\n <Flex align=\"center\" justify=\"between\">\n <VolumeControl />\n {active && <Controls css={{ flex: '1 1 0' }} />}\n {children}\n </Flex>\n </Box>\n );\n};\n", "import {\n HMSPlaylistType,\n selectAudioPlaylist,\n selectVideoPlaylist,\n useHMSActions,\n useHMSStore,\n} from '@100mslive/react-sdk';\n\nexport const usePlaylist = type => {\n const isAudioPlaylist = type === HMSPlaylistType.audio;\n const selector = isAudioPlaylist ? selectAudioPlaylist : selectVideoPlaylist;\n const active = useHMSStore(selector.selectedItem);\n const selection = useHMSStore(selector.selection);\n const playlist = useHMSStore(selector.list);\n const hmsActions = useHMSActions();\n const playlistAction = isAudioPlaylist ? hmsActions.audioPlaylist : hmsActions.videoPlaylist;\n\n return {\n active,\n hasNext: selection.hasNext,\n hasPrevious: selection.hasPrevious,\n actions: playlistAction,\n list: playlist,\n };\n};\n", "import React from 'react';\nimport { useHMSActions } from '@100mslive/react-sdk';\nimport { CrossIcon, ShareScreenIcon } from '@100mslive/react-icons';\nimport { Button } from '../../Button';\nimport { Flex } from '../../Layout';\nimport { Text } from '../../Text';\n\nexport const ScreenshareDisplay = () => {\n const hmsActions = useHMSActions();\n\n return (\n <Flex\n direction=\"column\"\n align=\"center\"\n justify=\"center\"\n css={{\n position: 'relative',\n overflow: 'hidden',\n w: '37.5rem',\n maxWidth: '80%',\n h: '100%',\n r: '$3',\n m: '0 auto',\n color: '$on_surface_high',\n bg: '$surface_default',\n textAlign: 'center',\n }}\n >\n <ShareScreenIcon width={48} height={48} />\n <Text variant=\"h5\" css={{ m: '$8 0' }}>\n You are sharing your screen\n </Text>\n <Button\n variant=\"danger\"\n onClick={async () => {\n await hmsActions.setScreenShareEnabled(false);\n }}\n data-testid=\"stop_screen_share_btn\"\n >\n <CrossIcon width={18} height={18} />\n &nbsp; Stop screen share\n </Button>\n </Flex>\n );\n};\n", "import React, { Fragment, useEffect, useRef } from 'react';\nimport Draggable from 'react-draggable';\nimport { useMedia } from 'react-use';\nimport { selectAppData, selectLocalPeer, selectRemotePeers, selectRolesMap, useHMSStore } from '@100mslive/react-sdk';\nimport { FirstPersonDisplay } from '../components/FirstPersonDisplay';\nimport VideoTile from '../components/VideoTile';\nimport { Box, Flex } from '../../Layout';\nimport { config as cssConfig } from '../../Theme';\nimport { useRolePreference } from '../components/hooks/useFeatures';\nimport { APP_DATA } from '../common/constants';\n\nconst getAspectRatio = ({ roleMap, roleName, isMobile }) => {\n const role = roleMap[roleName];\n const { width, height } = role.publishParams.video;\n return isMobile ? height / width : width / height;\n};\n\nexport function InsetView() {\n const remotePeers = useHMSStore(selectRemotePeers);\n const localPeer = useHMSStore(selectLocalPeer);\n const isMobile = useMedia(cssConfig.media.md);\n const isLandscape = useMedia(cssConfig.media.ls);\n const roleMap = useHMSStore(selectRolesMap);\n const rolePreference = useRolePreference();\n let centerPeers = [];\n let sidepanePeers = [];\n if (rolePreference) {\n const center = rolePreference[localPeer.roleName]?.split(',') || [];\n for (const peer of remotePeers) {\n if (center.includes(peer.roleName)) {\n centerPeers.push(peer);\n } else {\n sidepanePeers.push(peer);\n }\n }\n if (centerPeers.length === 0 && sidepanePeers.length > 0) {\n centerPeers = sidepanePeers;\n sidepanePeers = [];\n }\n } else {\n centerPeers = remotePeers;\n }\n const hideInset = sidepanePeers.length > 0 && (isMobile || isLandscape);\n\n return (\n <Fragment>\n <Box\n css={{\n display: 'grid',\n gridTemplateColumns: sidepanePeers.length > 0 ? '3fr 1fr' : '100%',\n gridTemplateRows: '1fr',\n gap: '$8',\n px: '$10',\n size: '100%',\n '@md': {\n gridTemplateColumns: '1fr',\n gridTemplateRows: sidepanePeers.length > 0 ? `3fr 1fr` : '100%',\n },\n }}\n >\n <Flex\n align=\"center\"\n justify=\"center\"\n css={{\n size: '100%',\n gap: '$8',\n flexWrap: 'wrap',\n placeContent: 'center',\n minHeight: 0,\n minWidth: 0,\n '@lg': { flexFlow: 'column' },\n '@ls': { flexFlow: 'row' },\n }}\n >\n {centerPeers.length > 0 ? (\n centerPeers.map(peer => (\n <VideoTile\n key={peer.videoTrack || peer.id}\n peerId={peer.id}\n trackId={peer.videoTrack}\n rootCSS={{\n aspectRatio: getAspectRatio({\n roleMap,\n roleName: peer.roleName,\n isMobile,\n }),\n padding: 0,\n height: '100%',\n maxWidth: '100%',\n minWidth: 0,\n minHeight: 0,\n flex: remotePeers.length === 1 ? undefined : '1 1 0',\n display: 'flex',\n alignItems: 'center',\n '@lg': {\n display: 'block',\n padding: '0 !important',\n width: '100%',\n },\n }}\n objectFit=\"contain\"\n />\n ))\n ) : (\n <FirstPersonDisplay />\n )}\n </Flex>\n {sidepanePeers.length > 0 && (\n <Flex\n align=\"center\"\n justify=\"center\"\n css={{\n size: '100%',\n gap: '$4',\n flexFlow: 'row wrap',\n placeContent: 'center',\n }}\n >\n {(hideInset ? [...sidepanePeers, localPeer] : sidepanePeers).map((peer, _, arr) => (\n <VideoTile\n key={peer.videoTrack || peer.id}\n peerId={peer.id}\n trackId={peer.videoTrack}\n rootCSS={{\n aspectRatio: getAspectRatio({\n roleMap,\n roleName: peer.roleName,\n isMobile: false,\n }),\n flexBasis: '100%',\n '@ls': {\n aspectRatio: 1,\n flexBasis: 'calc(50% - $4)',\n },\n '@md': {\n aspectRatio: 1,\n flexBasis: arr.length < 4 ? 'calc(50% - $4)' : 'calc(33% - $4)',\n },\n '@sm': {\n flexBasis: arr.length <= 4 ? 'calc(50% - $4)' : 'calc(33% - $4)',\n },\n padding: 0,\n }}\n objectFit=\"contain\"\n />\n ))}\n </Flex>\n )}\n </Box>\n {!hideInset && <InsetTile roleMap={roleMap} isMobile={isMobile} isLandscape={isLandscape} />}\n </Fragment>\n );\n}\n\nconst InsetTile = ({ isMobile, roleMap, isLandscape }) => {\n const localPeer = useHMSStore(selectLocalPeer);\n const sidepane = useHMSStore(selectAppData(APP_DATA.sidePane));\n const aspectRatio = getAspectRatio({\n roleMap,\n roleName: localPeer.roleName,\n isMobile,\n });\n let height = 180;\n let width = height * aspectRatio;\n if (isLandscape && width > 240) {\n width = 240;\n height = width / aspectRatio;\n }\n const nodeRef = useRef(null);\n\n useEffect(() => {\n if (!nodeRef.current || !window.ResizeObserver) {\n return;\n }\n const node = nodeRef.current;\n const resizeObserver = new ResizeObserver(entries => {\n entries.forEach(entry => {\n if (entry.target === node.parentElement) {\n // reset to original position on resize\n node.style.transform = `translate(0,0)`;\n }\n });\n });\n resizeObserver.observe(node.parentElement);\n return () => {\n node?.parentElement && resizeObserver?.unobserve(node.parentElement);\n resizeObserver?.disconnect();\n };\n }, []);\n\n return (\n <Draggable bounds=\"parent\" nodeRef={nodeRef}>\n <Box\n ref={nodeRef}\n css={{\n position: 'absolute',\n bottom: 0,\n right: sidepane ? '$100' : '$10',\n mr: sidepane ? '$14' : 0,\n boxShadow: '0 0 8px 0 rgba(0,0,0,0.3)',\n zIndex: 10,\n aspectRatio: aspectRatio,\n h: height,\n }}\n >\n <VideoTile\n peerId={localPeer.id}\n trackid={localPeer.videoTrack}\n rootCSS={{\n size: '100%',\n padding: 0,\n }}\n width={width}\n height={height}\n />\n </Box>\n </Draggable>\n );\n};\n", "import React, { useEffect, useState } from 'react';\nimport {\n selectLocalPeerID,\n selectLocalPeerRole,\n selectPeers,\n selectPeersByRoles,\n selectRolesMap,\n useHMSStore,\n} from '@100mslive/react-sdk';\nimport { GridCenterView, GridSidePaneView } from '../components/gridView';\nimport { Flex } from '../../Layout';\nimport { NonPublisherView } from './NonPublisherView';\nimport { useAppLayout } from '../components/AppData/useAppLayout';\nimport { useUISettings } from '../components/AppData/useUISettings';\nimport { UI_SETTINGS } from '../common/constants';\n\nexport const MainGridView = () => {\n const centerRoles = useAppLayout('center') || [];\n const sidepaneRoles = useAppLayout('sidepane') || [];\n const maxTileCount = useUISettings(UI_SETTINGS.maxTileCount);\n const peers = useHMSStore(selectPeers);\n const roles = useHMSStore(selectRolesMap);\n const localPeerId = useHMSStore(selectLocalPeerID);\n const centerPeers = peers.filter(peer => centerRoles.includes(peer.roleName));\n const sidebarPeers = peers.filter(peer => sidepaneRoles.includes(peer.roleName));\n const localRole = useHMSStore(selectLocalPeerRole);\n const peersByRoles = useHMSStore(selectPeersByRoles(localRole.subscribeParams.subscribeToRoles || []));\n const [placeholder, setPlaceholder] = useState('');\n\n useEffect(() => {\n const hasPublishingPeers = peers.some(peer => {\n // peer able to publish\n if (peer.roleName && roles[peer.roleName]) {\n return !!roles[peer.roleName].publishParams?.allowed.length;\n }\n return true;\n });\n const hasSubscribedRolePublishing = peersByRoles.some(peer => {\n if (peer.roleName && roles[peer.roleName]) {\n return !!roles[peer.roleName].publishParams?.allowed.length;\n }\n return true;\n });\n if (!hasPublishingPeers) {\n setPlaceholder('None of the roles can publish video, audio or screen');\n } else if (!localRole.subscribeParams.subscribeToRoles?.length) {\n setPlaceholder(\"This role isn't subscribed to any role\");\n } else if (!hasSubscribedRolePublishing) {\n setPlaceholder('This role subscribed to roles is not publishing');\n } else {\n setPlaceholder('');\n }\n }, [localRole.subscribeParams.subscribeToRoles?.length, peers, peersByRoles, roles]);\n /**\n * If there are peers from many publishing roles, then it's possible to divide\n * them into two parts, those who show in center and those who show in sidepane.\n * In case there is only one person in the room, then too sidepane will be shown\n * and center would be taken up by a banner image.\n * There is an issue currently, where the banner is still shown if there are\n * multiple viewers in the room but no publisher. Depending on the use case\n * this can be useful(for webinar) or look odd(for showing you're the only one).\n * Note that both center peers and sidebar peers have only publishing peers in them.\n */\n let showSidePane = centerPeers.length > 0 && sidebarPeers.length > 0;\n if (centerPeers.length === 0) {\n // we'll show the sidepane for banner in this case too if 1). it's only me\n // in the room. or 2). noone is publishing in the room\n const itsOnlyMeInTheRoom = peers.length === 1 && peers[0].id === localPeerId;\n const nooneIsPublishing = sidebarPeers.length === 0;\n showSidePane = itsOnlyMeInTheRoom || nooneIsPublishing;\n }\n return (\n <Flex\n css={{\n size: '100%',\n }}\n direction={{\n '@initial': 'row',\n '@md': 'column',\n }}\n >\n {placeholder ? (\n <NonPublisherView message={placeholder} />\n ) : (\n <>\n <GridCenterView\n peers={showSidePane ? centerPeers : peers}\n maxTileCount={maxTileCount}\n allowRemoteMute={false}\n hideSidePane={!showSidePane}\n totalPeers={peers.length}\n />\n {showSidePane && <GridSidePaneView peers={sidebarPeers} totalPeers={peers.length} />}\n </>\n )}\n </Flex>\n );\n};\n", "import React from 'react';\nimport { ShieldAlertIcon } from '@100mslive/react-icons';\nimport { Box, Flex } from '../../Layout';\nimport { Text } from '../../Text';\n\nexport const NonPublisherView = React.memo(({ message }) => {\n return (\n <Box\n css={{\n overflow: 'hidden',\n w: '96%',\n maxWidth: '96%',\n h: '100%',\n m: 'auto',\n background: '$surface_default',\n borderRadius: '$3',\n }}\n data-testid=\"non_publisher_view\"\n >\n <Flex\n align=\"center\"\n direction=\"column\"\n css={{\n w: '$96',\n textAlign: 'center',\n margin: 'auto',\n h: '100%',\n justifyContent: 'center',\n gap: '$8',\n }}\n >\n <ShieldAlertIcon color=\"#C3D0E5\" width=\"80px\" height=\"80px\" />\n <Flex\n direction=\"column\"\n css={{\n w: '$80',\n p: '$1',\n gap: '$4',\n }}\n >\n <Text color=\"white\" variant=\"h6\" css={{ '@md': { fontSize: '$md' } }}>\n {message}\n </Text>\n <Text color=\"$on_surface_medium\" css={{ mt: '$4', '@md': { fontSize: '$sm' } }}>\n Please go to dashboard and reconfigure role settings or contact the role admin.\n </Text>\n </Flex>\n </Flex>\n </Box>\n );\n});\n", "import { selectAppDataByPath, useHMSStore } from '@100mslive/react-sdk';\nimport { APP_DATA } from '../../common/constants';\n\nexport const useAppLayout = path => {\n return useHMSStore(selectAppDataByPath(APP_DATA.appLayout, path));\n};\n", "import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { throwErrorHandler, useScreenShare } from '@100mslive/react-sdk';\nimport { Box } from '../../Layout';\nimport { ThemeTypes, useTheme } from '../../Theme';\nimport { EmbebScreenShareView } from './EmbedView';\nimport { useSetAppDataByKey } from '../components/AppData/useUISettings';\nimport { APP_DATA, isChrome } from '../common/constants';\n\nexport const PDFView = () => {\n return (\n <EmbebScreenShareView>\n <PDFEmbedComponent />\n </EmbebScreenShareView>\n );\n};\n\nexport const PDFEmbedComponent = () => {\n const ref = useRef();\n const themeType = useTheme().themeType;\n const [isPDFLoaded, setIsPDFLoaded] = useState(false);\n let pdfJSURL = process.env.REACT_APP_PDFJS_IFRAME_URL;\n const { amIScreenSharing, toggleScreenShare } = useScreenShare(throwErrorHandler);\n const [pdfConfig, setPDFConfig] = useSetAppDataByKey(APP_DATA.pdfConfig);\n if (pdfConfig.url && !pdfConfig.file) {\n pdfJSURL = pdfJSURL + '?file=' + encodeURIComponent(pdfConfig.url);\n }\n const [wasScreenShared, setWasScreenShared] = useState(false);\n // to handle - https://github.com/facebook/react/issues/24502\n const screenShareAttemptInProgress = useRef(false);\n const iframeRef = useRef();\n\n const resetEmbedConfig = useCallback(() => {\n setPDFConfig({ state: false });\n }, [setPDFConfig]);\n useEffect(() => {\n if (isPDFLoaded && ref.current) {\n ref.current.contentWindow.postMessage(\n {\n theme: themeType === ThemeTypes.dark ? 2 : 1,\n },\n '*',\n );\n }\n }, [isPDFLoaded, themeType]);\n useEffect(() => {\n if (!amIScreenSharing && !wasScreenShared && !screenShareAttemptInProgress.current) {\n screenShareAttemptInProgress.current = true;\n // start screenshare on load for others in the room to see\n toggleScreenShare({\n forceCurrentTab: isChrome,\n cropElement: iframeRef.current,\n preferCurrentTab: isChrome,\n })\n .then(() => {\n setWasScreenShared(true);\n })\n .catch(resetEmbedConfig)\n .finally(() => {\n screenShareAttemptInProgress.current = false;\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n // reset embed when screenshare is closed from anywhere\n if (wasScreenShared && !amIScreenSharing) {\n resetEmbedConfig();\n }\n return () => {\n // close screenshare when this component is being unmounted\n if (wasScreenShared && amIScreenSharing) {\n resetEmbedConfig();\n toggleScreenShare(); // stop\n }\n };\n }, [wasScreenShared, amIScreenSharing, resetEmbedConfig, toggleScreenShare]);\n\n return (\n <Box\n ref={iframeRef}\n css={{\n mx: '$8',\n flex: '3 1 0',\n '@lg': {\n flex: '2 1 0',\n display: 'flex',\n alignItems: 'center',\n },\n }}\n >\n <iframe\n src={pdfJSURL}\n title=\"PDF Annotator\"\n ref={ref}\n style={{\n width: '100%',\n height: '100%',\n border: 0,\n borderRadius: '0.75rem',\n }}\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture fullscreen\"\n referrerPolicy=\"no-referrer\"\n onLoad={() => {\n if (ref.current && pdfConfig.file) {\n // setting theme dark -> 2 and light -> 1\n requestAnimationFrame(() => {\n ref.current.contentWindow.postMessage(\n {\n file: pdfConfig.file,\n theme: themeType === ThemeTypes.dark ? 2 : 1,\n },\n '*',\n );\n setIsPDFLoaded(true);\n }, 1000);\n }\n }}\n />\n </Box>\n );\n};\n", "import React from 'react';\nimport { ColoredTimeIcon } from '@100mslive/react-icons';\nimport { Box, Flex } from '../../Layout';\nimport { Text } from '../../Text';\n\nexport const WaitingView = React.memo(() => {\n return (\n <Box\n css={{\n overflow: 'hidden',\n w: '96%',\n maxWidth: '96%',\n h: '100%',\n m: 'auto',\n background: '$surface_default',\n borderRadius: '$3',\n }}\n data-testid=\"waiting_view\"\n >\n <Flex\n align=\"center\"\n direction=\"column\"\n css={{\n w: '$96',\n textAlign: 'center',\n margin: 'auto',\n h: '100%',\n justifyContent: 'center',\n gap: '$8',\n }}\n >\n <ColoredTimeIcon width=\"80px\" height=\"80px\" />\n <Flex\n direction=\"column\"\n css={{\n w: '$80',\n p: '$1',\n gap: '$4',\n }}\n >\n <Text color=\"white\" variant=\"h6\" css={{ '@md': { fontSize: '$md' } }}>\n Please wait\n </Text>\n <Text color=\"$on_surface_medium\" css={{ mt: '$4', '@md': { fontSize: '$sm' } }}>\n Sit back and relax till others let you join.\n </Text>\n </Flex>\n </Flex>\n </Box>\n );\n});\n", "export { Whiteboard } from './Whiteboard';\nexport { ToggleWhiteboard } from './ToggleWhiteboard';\nexport { useWhiteboardMetadata } from './useWhiteboardMetadata';\n", "import React from 'react';\nimport { ConferencingFooter } from './Footer/ConferencingFooter';\nimport { StreamingFooter } from './Footer/StreamingFooter';\nimport { isStreamingKit } from '../common/utils';\n\nexport const Footer = () => {\n return isStreamingKit() ? <StreamingFooter /> : <ConferencingFooter />;\n};\n", "import React, { Fragment, Suspense, useState } from 'react';\nimport { useMedia } from 'react-use';\nimport { HMSPlaylistType, selectIsAllowedToPublish, useHMSStore, useScreenShare } from '@100mslive/react-sdk';\nimport { MusicIcon } from '@100mslive/react-icons';\nimport { Playlist } from '../../components/Playlist/Playlist';\nimport { config as cssConfig, Flex, Footer as AppFooter, Tooltip } from '../../../';\nimport IconButton from '../../IconButton';\nimport { AudioVideoToggle } from '../AudioVideoToggle';\nimport { EmojiReaction } from '../EmojiReaction';\nimport { LeaveRoom } from '../LeaveRoom';\nimport MetaActions from '../MetaActions';\nimport { MoreSettings } from '../MoreSettings/MoreSettings';\nimport { PIP } from '../PIP';\nimport { ScreenshareToggle } from '../ScreenShare';\nimport { ScreenShareHintModal } from '../ScreenshareHintModal';\nimport { ChatToggle } from './ChatToggle';\nimport { useIsFeatureEnabled } from '../hooks/useFeatures';\nimport { isScreenshareSupported } from '../../common/utils';\nimport { FeatureFlags } from '../../services/FeatureFlags';\nimport { FEATURE_LIST } from '../../common/constants';\n\nconst TranscriptionButton = React.lazy(() => import('../../plugins/transcription'));\nconst VirtualBackground = React.lazy(() => import('../../plugins/VirtualBackground/VirtualBackground'));\n\nconst ScreenshareAudio = () => {\n const {\n amIScreenSharing,\n screenShareVideoTrackId: video,\n screenShareAudioTrackId: audio,\n toggleScreenShare,\n } = useScreenShare();\n const isAllowedToPublish = useHMSStore(selectIsAllowedToPublish);\n const isAudioScreenshare = amIScreenSharing && !video && !!audio;\n const [showModal, setShowModal] = useState(false);\n const isFeatureEnabled = useIsFeatureEnabled(FEATURE_LIST.AUDIO_ONLY_SCREENSHARE);\n if (!isFeatureEnabled || !isAllowedToPublish.screen || !isScreenshareSupported()) {\n return null;\n }\n return (\n <Fragment>\n <Tooltip title={`${!isAudioScreenshare ? 'Start' : 'Stop'} audio sharing`} key=\"shareAudio\">\n <IconButton\n active={!isAudioScreenshare}\n onClick={() => {\n if (amIScreenSharing) {\n toggleScreenShare();\n } else {\n setShowModal(true);\n }\n }}\n data-testid=\"screenshare_audio\"\n >\n <MusicIcon />\n </IconButton>\n </Tooltip>\n {showModal && <ScreenShareHintModal onClose={() => setShowModal(false)} />}\n </Fragment>\n );\n};\n\nexport const ConferencingFooter = () => {\n const isMobile = useMedia(cssConfig.media.md);\n return (\n <AppFooter.Root>\n <AppFooter.Left>\n <ScreenshareAudio />\n <Playlist type={HMSPlaylistType.audio} />\n <Playlist type={HMSPlaylistType.video} />\n <Suspense fallback=\"\">\n <VirtualBackground />\n </Suspense>\n {FeatureFlags.enableTranscription ? <TranscriptionButton /> : null}\n <Flex\n align=\"center\"\n css={{\n display: 'none',\n '@md': {\n display: 'flex',\n gap: '$8',\n },\n }}\n >\n {isMobile && <EmojiReaction />}\n <MetaActions isMobile />\n </Flex>\n </AppFooter.Left>\n <AppFooter.Center>\n <AudioVideoToggle />\n <ScreenshareToggle />\n <PIP />\n <MoreSettings />\n <Flex align=\"center\" css={{ display: 'none', '@md': { display: 'flex' } }}>\n <ChatToggle />\n </Flex>\n <LeaveRoom />\n </AppFooter.Center>\n <AppFooter.Right>\n {!isMobile && <EmojiReaction />}\n <MetaActions />\n <ChatToggle />\n </AppFooter.Right>\n </AppFooter.Root>\n );\n};\n", "import React, { Fragment, useState } from 'react';\nimport { HMSPlaylistType, selectIsAllowedToPublish, useHMSStore } from '@100mslive/react-sdk';\nimport { AudioPlayerIcon, CrossIcon, VideoPlayerIcon } from '@100mslive/react-icons';\nimport { Box, Dropdown, Flex, Text, Tooltip } from '../../../';\nimport IconButton from '../../IconButton';\nimport { AudioPlaylistControls } from './PlaylistControls';\nimport { PlaylistItem } from './PlaylistItem';\nimport { useIsFeatureEnabled } from '../hooks/useFeatures';\nimport { usePlaylist } from '../hooks/usePlaylist';\nimport { FEATURE_LIST } from '../../common/constants';\n\nconst BrowseAndPlayFromLocal = ({ type, actions }) => {\n return (\n <Fragment>\n <Text as=\"label\" htmlFor={`${type}PlaylistBrowse`} variant=\"sm\" css={{ cursor: 'pointer', mr: '$2' }}>\n Browse\n </Text>\n <input\n type=\"file\"\n id={`${type}PlaylistBrowse`}\n accept={type === HMSPlaylistType.audio ? 'audio/*' : 'video/*'}\n onChange={e => {\n const file = e.target.files[0];\n const id = file.lastModified;\n actions.setList([\n {\n type,\n id,\n name: file.name,\n url: URL.createObjectURL(file),\n },\n ]);\n actions.play(id);\n }}\n style={{ display: 'none' }}\n />\n </Fragment>\n );\n};\n\nexport const Playlist = ({ type }) => {\n const isAudioPlaylist = type === HMSPlaylistType.audio;\n const { active, list: playlist, actions } = usePlaylist(type);\n const [open, setOpen] = useState(false);\n const [collapse, setCollapse] = useState(false);\n const isAllowedToPublish = useHMSStore(selectIsAllowedToPublish);\n const isFeatureEnabled = useIsFeatureEnabled(\n isAudioPlaylist ? FEATURE_LIST.AUDIO_PLAYLIST : FEATURE_LIST.VIDEO_PLAYLIST,\n );\n if (!isAllowedToPublish.screen || playlist.length === 0 || !isFeatureEnabled) {\n return null;\n }\n\n return (\n <Fragment>\n <Dropdown.Root open={open} onOpenChange={setOpen}>\n <Dropdown.Trigger asChild data-testid={type === HMSPlaylistType.audio ? 'audio_playlist' : 'video_playlist'}>\n <IconButton active={!active}>\n <Tooltip title={isAudioPlaylist ? 'Audio Playlist' : 'Video Playlist'}>\n <Box>{isAudioPlaylist ? <AudioPlayerIcon /> : <VideoPlayerIcon />}</Box>\n </Tooltip>\n </IconButton>\n </Dropdown.Trigger>\n <Dropdown.Content\n sideOffset={5}\n align=\"center\"\n css={{\n maxHeight: 'unset',\n width: '$60',\n p: '$0',\n bg: '$surface_bright',\n border: '1px solid $border_default',\n }}\n >\n <Flex\n align=\"center\"\n css={{\n p: '$4 $8',\n borderBottom: '1px solid $border_bright',\n bg: '$surface_default',\n }}\n >\n <Text variant=\"md\" css={{ flex: '1 1 0' }}>\n {isAudioPlaylist ? 'Audio Player' : 'Video Playlist'}\n </Text>\n <BrowseAndPlayFromLocal type={type} actions={actions} />\n <IconButton\n css={{ mr: '-$4' }}\n onClick={async () => {\n if (active) {\n await actions.stop();\n }\n setOpen(false);\n setCollapse(false);\n }}\n >\n <CrossIcon width={24} height={24} />\n </IconButton>\n </Flex>\n {!collapse && (\n <Box css={{ maxHeight: '$96', overflowY: 'auto' }}>\n {playlist.map(playlistItem => {\n return (\n <PlaylistItem\n key={playlistItem.id}\n {...playlistItem}\n onClick={async e => {\n e.preventDefault();\n try {\n await actions.play(playlistItem.id);\n } catch (e) {\n // error in playlist, stop or play next\n }\n // Close the dropdown list for videoplaylist\n if (!isAudioPlaylist) {\n setOpen(false);\n }\n }}\n />\n );\n })}\n </Box>\n )}\n {isAudioPlaylist && <AudioPlaylistControls onToggle={() => setCollapse(value => !value)} />}\n </Dropdown.Content>\n </Dropdown.Root>\n </Fragment>\n );\n};\n", "import React from 'react';\nimport { Dropdown, Flex, Text } from '../../../';\n\nfunction formatDuration(duration) {\n if (!duration) {\n return '';\n }\n let mins = Math.floor(duration / 60);\n if (mins < 10) {\n mins = `0${String(mins)}`;\n }\n let secs = Math.floor(duration % 60);\n if (secs < 10) {\n secs = `0${String(secs)}`;\n }\n\n return `${mins}:${secs}`;\n}\n\nexport const PlaylistItem = React.memo(({ name, metadata, duration, selected, onClick }) => {\n return (\n <Dropdown.Item\n css={{\n flexDirection: 'column',\n alignItems: 'flex-start',\n h: '$18',\n p: '$8',\n '&:hover': {\n cursor: 'pointer',\n bg: '$surface_default',\n },\n '&:focus-visible': {\n bg: '$surface_default',\n },\n }}\n onClick={onClick}\n >\n <Flex align=\"center\" justify=\"between\" css={{ width: '100%', minHeight: 0 }}>\n <Text variant=\"md\" css={{ color: selected ? '$primary_default' : '$on_primary_high' }}>\n {name}\n </Text>\n <Text variant=\"xs\">{formatDuration(duration)}</Text>\n </Flex>\n {metadata?.description && (\n <Text variant=\"xs\" css={{ mt: '$4' }}>\n {metadata?.description}\n </Text>\n )}\n </Dropdown.Item>\n );\n});\n", "import React, { Fragment, useState } from 'react';\nimport { useMedia } from 'react-use';\nimport Hls from 'hls.js';\nimport {\n selectAppData,\n selectIsAllowedToPublish,\n selectLocalPeerID,\n selectLocalPeerRoleName,\n selectPermissions,\n useHMSActions,\n useHMSStore,\n useRecordingStreaming,\n} from '@100mslive/react-sdk';\nimport {\n ChangeRoleIcon,\n CheckIcon,\n InfoIcon,\n MicOffIcon,\n PencilIcon,\n RecordIcon,\n SettingsIcon,\n VerticalMenuIcon,\n} from '@100mslive/react-icons';\nimport { Box, Checkbox, config as cssConfig, Dropdown, Flex, Text, Tooltip } from '../../../';\nimport IconButton from '../../IconButton';\nimport { RoleChangeModal } from '../RoleChangeModal';\nimport SettingsModal from '../Settings/SettingsModal';\nimport StartRecording from '../Settings/StartRecording';\nimport { StatsForNerds } from '../StatsForNerds';\nimport { BulkRoleChangeModal } from './BulkRoleChangeModal';\nimport { ChangeNameModal } from './ChangeNameModal';\nimport { ChangeSelfRole } from './ChangeSelfRole';\nimport { EmbedUrl, EmbedUrlModal } from './EmbedUrl';\nimport { FullScreenItem } from './FullScreenItem';\nimport { MuteAllModal } from './MuteAllModal';\nimport { useDropdownList } from '../hooks/useDropdownList';\nimport { useIsFeatureEnabled } from '../hooks/useFeatures';\nimport { FeatureFlags } from '../../services/FeatureFlags';\nimport { APP_DATA, FEATURE_LIST, isAndroid, isIOS, isMacOS } from '../../common/constants';\n\nconst isMobileOS = isAndroid || isIOS;\n\nconst MODALS = {\n CHANGE_NAME: 'changeName',\n SELF_ROLE_CHANGE: 'selfRoleChange',\n MORE_SETTINGS: 'moreSettings',\n START_RECORDING: 'startRecording',\n DEVICE_SETTINGS: 'deviceSettings',\n STATS_FOR_NERDS: 'statsForNerds',\n BULK_ROLE_CHANGE: 'bulkRoleChange',\n MUTE_ALL: 'muteAll',\n EMBED_URL: 'embedUrl',\n};\n\nexport const MoreSettings = () => {\n const permissions = useHMSStore(selectPermissions);\n const isAllowedToPublish = useHMSStore(selectIsAllowedToPublish);\n const localPeerId = useHMSStore(selectLocalPeerID);\n const localPeerRole = useHMSStore(selectLocalPeerRoleName);\n const hmsActions = useHMSActions();\n const enablHlsStats = useHMSStore(selectAppData(APP_DATA.hlsStats));\n const isMobile = useMedia(cssConfig.media.md);\n const { isBrowserRecordingOn } = useRecordingStreaming();\n const isChangeNameEnabled = useIsFeatureEnabled(FEATURE_LIST.CHANGE_NAME);\n const isEmbedEnabled = useIsFeatureEnabled(FEATURE_LIST.EMBED_URL);\n const isSFNEnabled = useIsFeatureEnabled(FEATURE_LIST.STARTS_FOR_NERDS);\n const [openModals, setOpenModals] = useState(new Set());\n useDropdownList({ open: openModals.size > 0, name: 'MoreSettings' });\n\n const updateState = (modalName, value) => {\n setOpenModals(modals => {\n const copy = new Set(modals);\n if (value) {\n copy.add(modalName);\n } else {\n copy.delete(modalName);\n }\n return copy;\n });\n };\n\n return (\n <Fragment>\n <Dropdown.Root\n open={openModals.has(MODALS.MORE_SETTINGS)}\n onOpenChange={value => updateState(MODALS.MORE_SETTINGS, value)}\n >\n <Dropdown.Trigger asChild data-testid=\"more_settings_btn\">\n <IconButton>\n <Tooltip title=\"More options\">\n <Box>\n <VerticalMenuIcon />\n </Box>\n </Tooltip>\n </IconButton>\n </Dropdown.Trigger>\n\n <Dropdown.Content\n sideOffset={5}\n align=\"center\"\n css={{\n py: '$0',\n maxHeight: '$96',\n '@md': { w: '$64' },\n \"div[role='separator']:first-child\": {\n display: 'none',\n },\n }}\n >\n {isMobile && permissions?.browserRecording ? (\n <>\n <Dropdown.Item onClick={() => updateState(MODALS.START_RECORDING, true)}>\n <RecordIcon />\n <Text variant=\"sm\" css={{ ml: '$4' }}>\n {isBrowserRecordingOn ? 'Stop' : 'Start'} Recording\n </Text>\n </Dropdown.Item>\n <Dropdown.ItemSeparator />\n </>\n ) : null}\n {isChangeNameEnabled && (\n <Dropdown.Item onClick={() => updateState(MODALS.CHANGE_NAME, true)} data-testid=\"change_name_btn\">\n <PencilIcon />\n <Text variant=\"sm\" css={{ ml: '$4' }}>\n Change Name\n </Text>\n </Dropdown.Item>\n )}\n <ChangeSelfRole onClick={() => updateState(MODALS.SELF_ROLE_CHANGE, true)} />\n {permissions?.changeRole && (\n <Dropdown.Item\n onClick={() => updateState(MODALS.BULK_ROLE_CHANGE, true)}\n data-testid=\"bulk_role_change_btn\"\n >\n <ChangeRoleIcon />\n <Text variant=\"sm\" css={{ ml: '$4' }}>\n Bulk Role Change\n </Text>\n </Dropdown.Item>\n )}\n <FullScreenItem />\n {isAllowedToPublish.screen && isEmbedEnabled && (\n <EmbedUrl setShowOpenUrl={() => updateState(MODALS.EMBED_URL, true)} />\n )}\n {permissions.mute && (\n <Dropdown.Item onClick={() => updateState(MODALS.MUTE_ALL, true)} data-testid=\"mute_all_btn\">\n <MicOffIcon />\n <Text variant=\"sm\" css={{ ml: '$4' }}>\n Mute All\n </Text>\n </Dropdown.Item>\n )}\n <Dropdown.ItemSeparator />\n <Dropdown.Item onClick={() => updateState(MODALS.DEVICE_SETTINGS, true)} data-testid=\"device_settings_btn\">\n <SettingsIcon />\n <Text variant=\"sm\" css={{ ml: '$4' }}>\n Settings\n </Text>\n </Dropdown.Item>\n {FeatureFlags.enableStatsForNerds &&\n isSFNEnabled &&\n (localPeerRole === 'hls-viewer' ? (\n Hls.isSupported() ? (\n <Dropdown.Item\n onClick={() => hmsActions.setAppData(APP_DATA.hlsStats, !enablHlsStats)}\n data-testid=\"hls_stats\"\n >\n <Checkbox.Root\n css={{ margin: '$2' }}\n checked={enablHlsStats}\n onCheckedChange={() => hmsActions.setAppData(APP_DATA.hlsStats, !enablHlsStats)}\n >\n <Checkbox.Indicator>\n <CheckIcon width={16} height={16} />\n </Checkbox.Indicator>\n </Checkbox.Root>\n <Flex justify=\"between\" css={{ width: '100%' }}>\n <Text variant=\"sm\" css={{ ml: '$4' }}>\n Show HLS Stats\n </Text>\n {!isMobileOS ? (\n <Text variant=\"sm\" css={{ ml: '$4' }}>\n {`${isMacOS ? '\u2318' : 'ctrl'} + ]`}\n </Text>\n ) : null}\n </Flex>\n </Dropdown.Item>\n ) : null\n ) : (\n <Dropdown.Item\n onClick={() => updateState(MODALS.STATS_FOR_NERDS, true)}\n data-testid=\"stats_for_nreds_btn\"\n >\n <InfoIcon />\n <Text variant=\"sm\" css={{ ml: '$4' }}>\n Stats for Nerds\n </Text>\n </Dropdown.Item>\n ))}\n </Dropdown.Content>\n </Dropdown.Root>\n {openModals.has(MODALS.BULK_ROLE_CHANGE) && (\n <BulkRoleChangeModal onOpenChange={value => updateState(MODALS.BULK_ROLE_CHANGE, value)} />\n )}\n {openModals.has(MODALS.MUTE_ALL) && <MuteAllModal onOpenChange={value => updateState(MODALS.MUTE_ALL, value)} />}\n {openModals.has(MODALS.CHANGE_NAME) && (\n <ChangeNameModal onOpenChange={value => updateState(MODALS.CHANGE_NAME, value)} />\n )}\n {openModals.has(MODALS.DEVICE_SETTINGS) && (\n <SettingsModal open onOpenChange={value => updateState(MODALS.DEVICE_SETTINGS, value)} />\n )}\n {FeatureFlags.enableStatsForNerds && openModals.has(MODALS.STATS_FOR_NERDS) && (\n <StatsForNerds open onOpenChange={value => updateState(MODALS.STATS_FOR_NERDS, value)} />\n )}\n {openModals.has(MODALS.SELF_ROLE_CHANGE) && (\n <RoleChangeModal peerId={localPeerId} onOpenChange={value => updateState(MODALS.SELF_ROLE_CHANGE, value)} />\n )}\n {openModals.has(MODALS.START_RECORDING) && (\n <StartRecording open onOpenChange={value => updateState(MODALS.START_RECORDING, value)} />\n )}\n {openModals.has(MODALS.EMBED_URL) && (\n <EmbedUrlModal onOpenChange={value => updateState(MODALS.EMBED_URL, value)} />\n )}\n </Fragment>\n );\n};\n", "import React, { useState } from 'react';\nimport { selectPermissions, useHMSActions, useHMSStore, useRecordingStreaming } from '@100mslive/react-sdk';\nimport { AlertTriangleIcon } from '@100mslive/react-icons';\nimport { Button, Dialog, Flex, Text } from '../../../';\nimport { ResolutionInput } from '../Streaming/ResolutionInput';\nimport { getResolution } from '../Streaming/RTMPStreaming';\nimport { ToastManager } from '../Toast/ToastManager';\nimport { useSetAppDataByKey } from '../AppData/useUISettings';\nimport { APP_DATA, RTMP_RECORD_DEFAULT_RESOLUTION } from '../../common/constants';\n\nconst StartRecording = ({ open, onOpenChange }) => {\n const permissions = useHMSStore(selectPermissions);\n const [resolution, setResolution] = useState(RTMP_RECORD_DEFAULT_RESOLUTION);\n\n const [recordingStarted, setRecordingState] = useSetAppDataByKey(APP_DATA.recordingStarted);\n const { isBrowserRecordingOn, isStreamingOn, isHLSRunning } = useRecordingStreaming();\n const hmsActions = useHMSActions();\n if (!permissions?.browserRecording || isHLSRunning) {\n return null;\n }\n if (isBrowserRecordingOn) {\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Content\n css={{\n width: 'min(400px,80%)',\n p: '$10',\n bg: '#201617',\n }}\n >\n <Dialog.Title>\n <Flex gap={2} css={{ c: '$alert_error_default' }}>\n <AlertTriangleIcon />\n <Text css={{ c: 'inherit' }} variant=\"h6\">\n End Recording\n </Text>\n </Flex>\n </Dialog.Title>\n <Text variant=\"sm\" css={{ c: '$on_surface_medium', my: '$8' }}>\n Are you sure you want to end recording? You can\u2019t undo this action.\n </Text>\n <Flex justify=\"end\" css={{ mt: '$12' }}>\n <Dialog.Close asChild>\n <Button outlined css={{ borderColor: '$secondary_bright', mr: '$4' }}>\n Don't end\n </Button>\n </Dialog.Close>\n <Button\n data-testid=\"stop_recording_confirm_mobile\"\n variant=\"danger\"\n icon\n onClick={async () => {\n try {\n await hmsActions.stopRTMPAndRecording();\n } catch (error) {\n ToastManager.addToast({\n title: error.message,\n variant: 'error',\n });\n }\n onOpenChange(false);\n }}\n >\n End recording\n </Button>\n </Flex>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n }\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Content css={{ width: 'min(400px,80%)', p: '$10' }}>\n <Dialog.Title>\n <Text variant=\"h6\">Start Recording</Text>\n </Dialog.Title>\n <ResolutionInput\n testId=\"recording_resolution_mobile\"\n css={{ flexDirection: 'column', alignItems: 'start' }}\n onResolutionChange={setResolution}\n />\n <Button\n data-testid=\"start_recording_confirm_mobile\"\n variant=\"primary\"\n icon\n css={{ ml: 'auto' }}\n type=\"submit\"\n disabled={recordingStarted || isStreamingOn}\n onClick={async () => {\n try {\n setRecordingState(true);\n await hmsActions.startRTMPOrRecording({\n resolution: getResolution(resolution),\n record: true,\n });\n } catch (error) {\n if (error.message.includes('stream already running')) {\n ToastManager.addToast({\n title: 'Recording already running',\n variant: 'error',\n });\n } else {\n ToastManager.addToast({\n title: error.message,\n variant: 'error',\n });\n }\n setRecordingState(false);\n }\n onOpenChange(false);\n }}\n >\n Start\n </Button>\n </Dialog.Content>\n </Dialog.Root>\n );\n};\n\nexport default StartRecording;\n", "import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport {\n selectHMSStats,\n selectLocalPeerID,\n selectPeersMap,\n selectTracksMap,\n useHMSStatsStore,\n useHMSStore,\n} from '@100mslive/react-sdk';\nimport { HorizontalDivider } from '../../Divider';\nimport { Dropdown } from '../../Dropdown';\nimport { Label } from '../../Label';\nimport { Box, Flex } from '../../Layout';\nimport { Dialog } from '../../Modal';\nimport { Switch } from '../../Switch';\nimport { Text } from '../../Text';\nimport { DialogDropdownTrigger } from '../primitives/DropdownTrigger';\nimport { useSetUiSettings } from './AppData/useUISettings';\nimport { useDropdownSelection } from './hooks/useDropdownSelection';\nimport { UI_SETTINGS } from '../common/constants';\n\nexport const StatsForNerds = ({ onOpenChange }) => {\n const tracksWithLabels = useTracksWithLabel();\n const statsOptions = useMemo(\n () => [{ id: 'local-peer', label: 'Local Peer Stats' }, ...tracksWithLabels],\n [tracksWithLabels],\n );\n const [selectedStat, setSelectedStat] = useState(statsOptions[0]);\n const [showStatsOnTiles, setShowStatsOnTiles] = useSetUiSettings(UI_SETTINGS.showStatsOnTiles);\n const [open, setOpen] = useState(false);\n const ref = useRef();\n const selectionBg = useDropdownSelection();\n\n useEffect(() => {\n if (selectedStat.id !== 'local-peer' && !tracksWithLabels.find(track => track.id === selectedStat.id)) {\n setSelectedStat('local-peer');\n }\n }, [tracksWithLabels, selectedStat]);\n\n return (\n <Dialog.Root defaultOpen onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay />\n <Dialog.Content\n css={{\n width: 'min(500px, 95%)',\n maxHeight: '100%',\n overflowY: 'auto',\n }}\n >\n {/* Title */}\n <Dialog.Title css={{ p: '$4 0' }}>\n <Flex justify=\"between\">\n <Flex align=\"center\" css={{ mb: '$1' }}>\n <Text variant=\"h6\" inline>\n Stats For Nerds\n </Text>\n </Flex>\n <Dialog.DefaultClose data-testid=\"stats_dialog_close_icon\" />\n </Flex>\n </Dialog.Title>\n <HorizontalDivider css={{ mt: '0.8rem' }} />\n {/* Switch */}\n <Flex justify=\"start\" gap={4} css={{ m: '$10 0' }}>\n <Switch checked={showStatsOnTiles} onCheckedChange={setShowStatsOnTiles} />\n <Text variant=\"body2\" css={{ fontWeight: '$semiBold' }}>\n Show Stats on Tiles\n </Text>\n </Flex>\n {/* Select */}\n <Flex\n direction=\"column\"\n css={{\n mb: '$12',\n position: 'relative',\n minWidth: 0,\n }}\n >\n <Label variant=\"body2\">Stats For</Label>\n <Dropdown.Root data-testid=\"dialog_select_Stats For\" open={open} onOpenChange={setOpen}>\n <DialogDropdownTrigger\n title={selectedStat.label || 'Select Stats'}\n css={{ mt: '$4' }}\n titleCSS={{ mx: 0 }}\n open={open}\n ref={ref}\n />\n <Dropdown.Portal>\n <Dropdown.Content align=\"start\" sideOffset={8} css={{ w: ref.current?.clientWidth, zIndex: 1000 }}>\n {statsOptions.map(option => {\n const isSelected = option.id === selectedStat.id && option.layer === selectedStat.layer;\n return (\n <Dropdown.Item\n key={`${option.id}-${option.layer || ''}`}\n onClick={() => {\n setSelectedStat(option);\n }}\n css={{\n px: '$9',\n bg: isSelected ? selectionBg : undefined,\n c: isSelected ? '$on_primary_high' : '$on_primary_high',\n }}\n >\n {option.label}\n </Dropdown.Item>\n );\n })}\n </Dropdown.Content>\n </Dropdown.Portal>\n </Dropdown.Root>\n </Flex>\n {/* Stats */}\n {selectedStat.id === 'local-peer' ? (\n <LocalPeerStats />\n ) : (\n <TrackStats trackID={selectedStat.id} layer={selectedStat.layer} local={selectedStat.local} />\n )}\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n\nconst useTracksWithLabel = () => {\n const tracksMap = useHMSStore(selectTracksMap);\n const peersMap = useHMSStore(selectPeersMap);\n const localPeerID = useHMSStore(selectLocalPeerID);\n const tracksWithLabels = useMemo(\n () =>\n Object.values(tracksMap).reduce((res, track) => {\n const peerName = peersMap[track.peerId]?.name;\n const isLocalTrack = track.peerId === localPeerID;\n if (isLocalTrack && track.layerDefinitions?.length) {\n res = res.concat(\n track.layerDefinitions.map(({ layer }) => {\n return {\n id: track.id,\n layer,\n local: true,\n label: `${peerName} ${track.source} ${track.type} - ${layer}`,\n };\n }),\n );\n return res;\n }\n res.push({\n id: track.id,\n local: isLocalTrack,\n label: `${peerName} ${track.source} ${track.type}`,\n });\n return res;\n }, []),\n [tracksMap, peersMap, localPeerID],\n );\n return tracksWithLabels;\n};\n\nconst LocalPeerStats = () => {\n const stats = useHMSStatsStore(selectHMSStats.localPeerStats);\n\n if (!stats) {\n return null;\n }\n\n return (\n <Flex css={{ flexWrap: 'wrap', gap: '$10' }}>\n <StatsRow label=\"Packets Lost\" value={stats.subscribe?.packetsLost} />\n <StatsRow label=\"Jitter\" value={stats.subscribe?.jitter} />\n <StatsRow label=\"Publish Bitrate\" value={formatBytes(stats.publish?.bitrate, 'b/s')} />\n <StatsRow label=\"Subscribe Bitrate\" value={formatBytes(stats.subscribe?.bitrate, 'b/s')} />\n <StatsRow\n label=\"Available Outgoing Bitrate\"\n value={formatBytes(stats.publish?.availableOutgoingBitrate, 'b/s')}\n />\n <StatsRow label=\"Total Bytes Sent\" value={formatBytes(stats.publish?.bytesSent)} />\n <StatsRow label=\"Total Bytes Received\" value={formatBytes(stats.subscribe?.bytesReceived)} />\n <StatsRow\n label=\"Round Trip Time\"\n value={`${\n (((stats.publish?.currentRoundTripTime || 0) + (stats.subscribe?.currentRoundTripTime || 0)) / 2).toFixed(3) *\n 1000\n } ms`}\n />\n </Flex>\n );\n};\n\nconst TrackStats = ({ trackID, layer, local }) => {\n const selector = layer\n ? selectHMSStats.localVideoTrackStatsByLayer(layer)(trackID)\n : local\n ? selectHMSStats.localAudioTrackStatsByID(trackID)\n : selectHMSStats.trackStatsByID(trackID);\n const stats = useHMSStatsStore(selector);\n if (!stats) {\n return null;\n }\n const inbound = stats.type.includes('inbound');\n\n return (\n <Flex css={{ flexWrap: 'wrap', gap: '$10' }}>\n <StatsRow label=\"Type\" value={stats.type + ' ' + stats.kind} />\n <StatsRow label=\"Bitrate\" value={formatBytes(stats.bitrate, 'b/s')} />\n <StatsRow label=\"Packets Lost\" value={stats.packetsLost} />\n <StatsRow label=\"Jitter\" value={stats.jitter?.toFixed(3)} />\n <StatsRow\n label={inbound ? 'Bytes Received' : 'Bytes Sent'}\n value={formatBytes(inbound ? stats.bytesReceived : stats.bytesSent)}\n />\n {stats.kind === 'video' && (\n <>\n <StatsRow label=\"Framerate\" value={stats.framesPerSecond} />\n {!inbound && <StatsRow label=\"Quality Limitation Reason\" value={stats.qualityLimitationReason} />}\n </>\n )}\n <StatsRow label=\"Round Trip Time\" value={stats.roundTripTime ? `${stats.roundTripTime * 1000} ms` : '-'} />\n </Flex>\n );\n};\n\nconst StatsRow = React.memo(({ label, value }) => (\n <Box css={{ bg: '$surface_bright', w: 'calc(50% - $6)', p: '$8', r: '$3' }}>\n <Text\n variant=\"overline\"\n css={{\n fontWeight: '$semiBold',\n color: '$on_surface_medium',\n textTransform: 'uppercase',\n }}\n >\n {label}\n </Text>\n <Text variant=\"sub1\" css={{ fontWeight: '$semiBold', color: '$on_surface_high' }}>\n {value || '-'}\n </Text>\n </Box>\n));\n\nconst formatBytes = (bytes, unit = 'B', decimals = 2) => {\n if (bytes === undefined) return '-';\n if (bytes === 0) return '0 ' + unit;\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'].map(size => size + unit);\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\n};\n", "import React, { useCallback, useRef, useState } from 'react';\nimport { useHMSActions } from '@100mslive/react-sdk';\nimport { AlertTriangleIcon, ChangeRoleIcon, CheckIcon } from '@100mslive/react-icons';\nimport { Button, Checkbox, Dialog, Dropdown, Flex, Loading, Text } from '../../../';\nimport { DialogContent, DialogRow } from '../../primitives/DialogContent';\nimport { DialogDropdownTrigger } from '../../primitives/DropdownTrigger';\nimport { useFilteredRoles } from '../../common/hooks';\n\nexport const BulkRoleChangeModal = ({ onOpenChange }) => {\n const roles = useFilteredRoles();\n const hmsActions = useHMSActions();\n const ref = useRef(null);\n const roleRef = useRef(null);\n const [selectedBulkRole, setBulkRole] = useState([]);\n const [selectedRole, setRole] = useState('');\n const [bulkRoleDialog, setBulkRoleDialog] = useState(false);\n const [roleDialog, setRoleDialog] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const [isSubmiting, setIsSubmiting] = useState(false);\n\n const changeBulkRole = useCallback(async () => {\n if (selectedBulkRole.length > 0 && selectedRole) {\n try {\n setIsSubmiting(true);\n await hmsActions.changeRoleOfPeersWithRoles(selectedBulkRole, selectedRole);\n setIsSubmiting(false);\n setErrorMessage('');\n onOpenChange(false);\n } catch (err) {\n setErrorMessage(err?.message ? err?.message : 'Unknown error');\n setIsSubmiting(false);\n }\n }\n }, [selectedBulkRole, selectedRole, hmsActions, onOpenChange]);\n\n return (\n <Dialog.Root defaultOpen onOpenChange={onOpenChange}>\n <DialogContent title=\"Bulk Role Change\" Icon={ChangeRoleIcon}>\n <DialogRow>\n <Text>For Roles: </Text>\n <Dropdown.Root\n open={bulkRoleDialog}\n onOpenChange={value => {\n if (value) {\n setBulkRoleDialog(value);\n }\n }}\n modal={false}\n >\n <DialogDropdownTrigger\n ref={ref}\n title={selectedBulkRole.length === 0 ? 'Select Multiple Roles' : selectedBulkRole.toString()}\n css={{\n w: '70%',\n p: '$8',\n }}\n open={bulkRoleDialog}\n />\n <Dropdown.Content\n css={{ w: ref.current?.clientWidth, zIndex: 1000 }}\n onInteractOutside={() => {\n if (bulkRoleDialog) {\n setBulkRoleDialog(false);\n }\n }}\n >\n {roles &&\n roles.map(role => {\n return (\n <Dropdown.CheckboxItem\n key={role}\n checked={selectedBulkRole.includes(role)}\n onCheckedChange={value => {\n setBulkRole(selection => {\n return value ? [...selection, role] : selection.filter(selectedRole => selectedRole !== role);\n });\n setErrorMessage('');\n }}\n >\n <Checkbox.Root css={{ margin: '$2' }} checked={selectedBulkRole.includes(role)}>\n <Checkbox.Indicator>\n <CheckIcon width={16} height={16} />\n </Checkbox.Indicator>\n </Checkbox.Root>\n {role}\n </Dropdown.CheckboxItem>\n );\n })}\n </Dropdown.Content>\n </Dropdown.Root>\n </DialogRow>\n <DialogRow>\n <Text>To Role: </Text>\n <Dropdown.Root open={roleDialog} onOpenChange={value => setRoleDialog(value)}>\n <DialogDropdownTrigger\n ref={roleRef}\n title={selectedRole || 'Select Role'}\n css={{\n w: '70%',\n p: '$8',\n }}\n open={roleDialog}\n />\n <Dropdown.Content css={{ w: roleRef.current?.clientWidth, zIndex: 1000 }}>\n {roles &&\n roles.map(role => {\n return (\n <Dropdown.Item\n key={role}\n onSelect={() => {\n setRole(role);\n setErrorMessage('');\n }}\n >\n {role}\n </Dropdown.Item>\n );\n })}\n </Dropdown.Content>\n </Dropdown.Root>\n </DialogRow>\n <DialogRow>\n {errorMessage && (\n <Flex gap={2} css={{ c: '$alert_error_default', w: '70%', ml: 'auto' }}>\n <AlertTriangleIcon />\n <Text css={{ c: 'inherit' }}>{errorMessage}</Text>\n </Flex>\n )}\n </DialogRow>\n <DialogRow justify=\"end\">\n <Button variant=\"primary\" onClick={changeBulkRole} disabled={!(selectedRole && selectedBulkRole.length > 0)}>\n {isSubmiting && <Loading css={{ color: '$on_primary_medium' }} />}\n Apply\n </Button>\n </DialogRow>\n </DialogContent>\n </Dialog.Root>\n );\n};\n", "import React, { useState } from 'react';\nimport { selectLocalPeerName, useHMSActions, useHMSStore } from '@100mslive/react-sdk';\nimport { Box, Button, Dialog, Flex, Input, Text } from '../../../';\nimport { ToastManager } from '../Toast/ToastManager';\nimport { UserPreferencesKeys, useUserPreferences } from '../hooks/useUserPreferences';\n\nexport const ChangeNameModal = ({ onOpenChange }) => {\n const [previewPreference, setPreviewPreference] = useUserPreferences(UserPreferencesKeys.PREVIEW);\n const hmsActions = useHMSActions();\n const localPeerName = useHMSStore(selectLocalPeerName);\n const [currentName, setCurrentName] = useState(localPeerName);\n\n const changeName = async () => {\n const name = currentName.trim();\n if (!name || name === localPeerName) {\n return;\n }\n try {\n await hmsActions.changeName(name);\n setPreviewPreference({\n ...(previewPreference || {}),\n name,\n });\n } catch (error) {\n console.error('failed to update name', error);\n ToastManager.addToast({ title: error.message });\n } finally {\n onOpenChange(false);\n }\n };\n\n return (\n <Dialog.Root defaultOpen onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay />\n <Dialog.Content css={{ width: 'min(400px,80%)', p: '$10' }}>\n <Dialog.Title css={{ p: '0 $4' }}>\n <Text variant=\"h6\"> Change Name</Text>\n </Dialog.Title>\n <form\n onSubmit={async e => {\n e.preventDefault();\n await changeName();\n }}\n >\n <Flex justify=\"center\" align=\"center\" css={{ my: '$8', w: '100%' }}>\n <Input\n css={{ width: '100%' }}\n value={currentName}\n onChange={e => {\n setCurrentName(e.target.value);\n }}\n autoComplete=\"name\"\n required\n data-testid=\"change_name_field\"\n />\n </Flex>\n\n <Flex\n justify=\"between\"\n align=\"center\"\n css={{\n width: '100%',\n gap: '$md',\n mt: '$10',\n }}\n >\n <Box css={{ w: '50%' }}>\n <Dialog.Close css={{ w: '100%' }}>\n <Button variant=\"standard\" css={{ w: '100%' }} outlined type=\"submit\" disabled={!localPeerName}>\n Cancel\n </Button>\n </Dialog.Close>\n </Box>\n <Box css={{ w: '50%' }}>\n <Button\n variant=\"primary\"\n css={{ width: '100%' }}\n type=\"submit\"\n disabled={!currentName.trim() || currentName.trim() === localPeerName}\n data-testid=\"popup_change_btn\"\n >\n Change\n </Button>\n </Box>\n </Flex>\n </form>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n", "import React, { useMemo } from 'react';\nimport { useMedia } from 'react-use';\nimport {\n selectLocalPeerID,\n selectLocalPeerRoleName,\n selectPermissions,\n useHMSActions,\n useHMSStore,\n} from '@100mslive/react-sdk';\nimport { ArrowRightIcon, CheckIcon, PersonIcon } from '@100mslive/react-icons';\nimport { config, Dropdown, Text } from '../../../';\nimport { ToastManager } from '../Toast/ToastManager';\nimport { useAppLayout } from '../AppData/useAppLayout';\nimport { useFilteredRoles } from '../../common/hooks';\nimport { arrayIntersection } from '../../common/utils';\n\nexport const ChangeSelfRole = ({ onClick }) => {\n const roles = useFilteredRoles();\n const permissions = useHMSStore(selectPermissions);\n const localPeerId = useHMSStore(selectLocalPeerID);\n const localPeerRole = useHMSStore(selectLocalPeerRoleName);\n const hmsActions = useHMSActions();\n const hideTriggerItem = useMedia(config.media.sm);\n const selfRoleChangeTo = useAppLayout('selfRoleChangeTo');\n const availableSelfChangeRoles = useMemo(() => arrayIntersection(selfRoleChangeTo, roles), [roles, selfRoleChangeTo]);\n\n if (!permissions.changeRole) {\n return null;\n }\n return hideTriggerItem ? (\n <Dropdown.Item onClick={onClick}>\n <PersonIcon />\n <Text variant=\"sm\" css={{ mx: '$4' }}>\n Change My Role\n </Text>\n </Dropdown.Item>\n ) : (\n <Dropdown.SubMenu>\n <Dropdown.TriggerItem data-testid=\"change_my_role_btn\">\n <PersonIcon />\n <Text variant=\"sm\" css={{ flex: '1 1 0', mx: '$4' }}>\n Change My Role\n </Text>\n <ArrowRightIcon />\n </Dropdown.TriggerItem>\n <Dropdown.SubMenuContent sideOffset={8} alignOffset={-5} css={{ py: '$0', '@md': { w: '$64' } }}>\n {availableSelfChangeRoles.map(role => (\n <Dropdown.Item\n key={role}\n css={{ justifyContent: 'space-between' }}\n onClick={async () => {\n try {\n await hmsActions.changeRole(localPeerId, role, true);\n } catch (error) {\n ToastManager.addToast({ title: error.message });\n }\n }}\n data-testid={'change_to_role_' + role}\n >\n <Text variant=\"sm\">{role}</Text>\n {localPeerRole === role && <CheckIcon width={16} height={16} />}\n </Dropdown.Item>\n ))}\n </Dropdown.SubMenuContent>\n </Dropdown.SubMenu>\n );\n};\n", "import React, { useState } from 'react';\nimport { ViewIcon } from '@100mslive/react-icons';\nimport { Button, Dialog, Dropdown, Text } from '../../../';\nimport { DialogContent, DialogInput, DialogRow } from '../../primitives/DialogContent';\nimport { useSetAppDataByKey } from '../AppData/useUISettings';\nimport { APP_DATA } from '../../common/constants';\n\nexport const EmbedUrl = ({ setShowOpenUrl }) => {\n if (!window.CropTarget) {\n return null;\n }\n\n return (\n <Dropdown.Item\n onClick={() => {\n setShowOpenUrl(true);\n }}\n data-testid=\"embed_url_btn\"\n >\n <ViewIcon />\n <Text variant=\"sm\" css={{ ml: '$4' }}>\n Embed URL\n </Text>\n </Dropdown.Item>\n );\n};\n\nexport function EmbedUrlModal({ onOpenChange }) {\n const [embedConfig, setEmbedConfig] = useSetAppDataByKey(APP_DATA.embedConfig);\n const [url, setUrl] = useState(embedConfig?.url || '');\n\n const isAnythingEmbedded = !!embedConfig?.url;\n const isModifying = isAnythingEmbedded && url && url !== embedConfig.url;\n\n return (\n <Dialog.Root defaultOpen onOpenChange={onOpenChange}>\n <DialogContent title=\"Embed URL\" Icon={ViewIcon}>\n <DialogInput title=\"URL\" value={url} onChange={setUrl} placeholder=\"https://www.tldraw.com/\" type=\"url\" />\n <DialogRow>\n <Text>\n Embed a url and share with everyone in the room. Ensure that you're sharing the current tab when the prompt\n opens. Note that not all websites support being embedded.\n </Text>\n </DialogRow>\n <DialogRow justify=\"end\">\n {isAnythingEmbedded ? (\n <>\n <Button\n variant=\"primary\"\n type=\"submit\"\n disabled={!isModifying}\n onClick={() => {\n setEmbedConfig({ url, shareScreen: embedConfig.shareScreen });\n onOpenChange(false);\n }}\n data-testid=\"embed_url_btn\"\n css={{ mr: '$4' }}\n >\n Update Embed\n </Button>\n <Button\n variant=\"danger\"\n type=\"submit\"\n onClick={() => {\n setEmbedConfig({ url: '' });\n onOpenChange(false);\n }}\n data-testid=\"embed_url_btn\"\n >\n Stop Embed\n </Button>\n </>\n ) : (\n <>\n <Button\n variant=\"primary\"\n type=\"submit\"\n disabled={!url.trim()}\n onClick={() => {\n setEmbedConfig({ url });\n onOpenChange(false);\n }}\n data-testid=\"embed_url_btn\"\n css={{ mr: '$4' }}\n >\n Just Embed\n </Button>\n <Button\n variant=\"primary\"\n type=\"submit\"\n disabled={!url.trim()}\n onClick={() => {\n setEmbedConfig({ url, shareScreen: true });\n onOpenChange(false);\n }}\n data-testid=\"embed_url_btn\"\n >\n Embed and Share\n </Button>\n </>\n )}\n </DialogRow>\n </DialogContent>\n </Dialog.Root>\n );\n}\n", "import React from 'react';\nimport { ExpandIcon } from '@100mslive/react-icons';\nimport { Dropdown, Text } from '../../../';\nimport { useIsFeatureEnabled } from '../hooks/useFeatures';\nimport { useFullscreen } from '../hooks/useFullscreen';\nimport { FEATURE_LIST } from '../../common/constants';\n\nexport const FullScreenItem = () => {\n const { allowed, isFullscreen, toggleFullscreen } = useFullscreen();\n const isFullscreenEnabled = useIsFeatureEnabled(FEATURE_LIST.FULLSCREEN);\n\n if (!isFullscreenEnabled || !allowed) {\n return null;\n }\n\n return (\n <Dropdown.Item\n onClick={() => {\n toggleFullscreen();\n }}\n data-testid=\"full_screen_btn\"\n >\n <ExpandIcon />\n <Text variant=\"sm\" css={{ ml: '$4' }}>\n {isFullscreen ? 'Exit ' : 'Go '}Fullscreen\n </Text>\n </Dropdown.Item>\n );\n};\n", "import { useCallback, useEffect, useState } from 'react';\nimport screenfull from 'screenfull';\nimport { ToastManager } from '../Toast/ToastManager';\n\nexport const useFullscreen = () => {\n const [isFullScreenEnabled, setIsFullScreenEnabled] = useState(screenfull.isFullscreen);\n\n const toggle = useCallback(async () => {\n if (!screenfull.isEnabled) {\n ToastManager.addToast({ title: 'Fullscreen feature not supported' });\n return;\n }\n try {\n if (isFullScreenEnabled) {\n await screenfull.exit();\n } else {\n await screenfull.request();\n }\n } catch (err) {\n ToastManager.addToast({ title: err.message });\n }\n }, [isFullScreenEnabled]);\n\n useEffect(() => {\n const onChange = () => {\n setIsFullScreenEnabled(screenfull.isFullscreen);\n };\n if (screenfull.isEnabled) {\n screenfull.on('change', onChange);\n }\n return () => {\n if (screenfull.isEnabled) {\n screenfull.off('change', onChange);\n }\n };\n }, []);\n\n return {\n allowed: screenfull.isEnabled,\n isFullscreen: isFullScreenEnabled,\n toggleFullscreen: toggle,\n };\n};\n", "import React, { useCallback, useState } from 'react';\nimport { useHMSActions } from '@100mslive/react-sdk';\nimport { MicOffIcon } from '@100mslive/react-icons';\nimport { Button, Dialog, Flex, Label, RadioGroup, Text } from '../../../';\nimport { DialogContent, DialogRow, DialogSelect } from '../../primitives/DialogContent';\nimport { useFilteredRoles } from '../../common/hooks';\n\nconst trackSourceOptions = [\n { label: 'All Track Sources', value: '' },\n { label: 'regular', value: 'regular' },\n { label: 'screen', value: 'screen' },\n { label: 'audioplaylist', value: 'audioplaylist' },\n { label: 'videoplaylist', value: 'videoplaylist' },\n];\nconst trackTypeOptions = [\n { label: 'All Track Types', value: '' },\n { label: 'audio', value: 'audio' },\n { label: 'video', value: 'video' },\n];\nexport const MuteAllModal = ({ onOpenChange }) => {\n const roles = useFilteredRoles();\n const hmsActions = useHMSActions();\n const [enabled, setEnabled] = useState(false);\n const [trackType, setTrackType] = useState();\n const [selectedRole, setRole] = useState();\n const [selectedSource, setSource] = useState();\n\n const muteAll = useCallback(async () => {\n await hmsActions.setRemoteTracksEnabled({\n enabled: enabled,\n type: trackType,\n source: selectedSource,\n roles: selectedRole ? [selectedRole] : undefined,\n });\n onOpenChange(false);\n }, [selectedRole, enabled, trackType, selectedSource, hmsActions, onOpenChange]);\n\n return (\n <Dialog.Root defaultOpen onOpenChange={onOpenChange}>\n <DialogContent title=\"Mute/Unmute Remote Tracks\" Icon={MicOffIcon}>\n <DialogSelect\n title=\"Role\"\n options={[{ label: 'All Roles', value: '' }, ...roles.map(role => ({ label: role, value: role }))]}\n selected={selectedRole}\n keyField=\"value\"\n labelField=\"label\"\n onChange={setRole}\n />\n <DialogSelect\n title=\"Track type\"\n options={trackTypeOptions}\n selected={trackType}\n onChange={setTrackType}\n keyField=\"value\"\n labelField=\"label\"\n />\n <DialogSelect\n title=\"Track source\"\n options={trackSourceOptions}\n selected={selectedSource}\n onChange={setSource}\n keyField=\"value\"\n labelField=\"label\"\n />\n <DialogRow>\n <Text variant=\"md\">Track status</Text>\n <RadioGroup.Root value={enabled} onValueChange={setEnabled}>\n <Flex align=\"center\" css={{ mr: '$8' }}>\n <RadioGroup.Item value={false} id=\"trackDisableRadio\" css={{ mr: '$4' }}>\n <RadioGroup.Indicator />\n </RadioGroup.Item>\n <Label htmlFor=\"trackDisableRadio\">Mute</Label>\n </Flex>\n <Flex align=\"center\" css={{ cursor: 'pointer' }}>\n <RadioGroup.Item value={true} id=\"trackEnableRadio\" css={{ mr: '$4' }}>\n <RadioGroup.Indicator />\n </RadioGroup.Item>\n <Label htmlFor=\"trackEnableRadio\">Request Unmute</Label>\n </Flex>\n </RadioGroup.Root>\n </DialogRow>\n <DialogRow justify=\"end\">\n <Button variant=\"primary\" onClick={muteAll}>\n Apply\n </Button>\n </DialogRow>\n </DialogContent>\n </Dialog.Root>\n );\n};\n", "import React from 'react';\nimport PIPComponent from './PIPComponent';\nimport { usePinnedTrack } from '../AppData/useUISettings';\n\nexport const PIP = () => {\n const pinnedTrack = usePinnedTrack();\n\n return (\n <PIPComponent peers={pinnedTrack && pinnedTrack.enabled ? [pinnedTrack.peerId] : undefined} showLocalPeer={true} />\n );\n};\n", "import React, { useCallback, useEffect, useState } from 'react';\nimport {\n selectLocalPeerRoleName,\n selectPeers,\n selectRemotePeers,\n selectTracksMap,\n useHMSActions,\n useHMSStore,\n useHMSVanillaStore,\n} from '@100mslive/react-sdk';\nimport { PipIcon } from '@100mslive/react-icons';\nimport { Tooltip } from '../../../';\nimport IconButton from '../../IconButton';\nimport { PictureInPicture } from './PIPManager';\nimport { MediaSession } from './SetupMediaSession';\nimport { useIsFeatureEnabled } from '../hooks/useFeatures';\nimport { DEFAULT_HLS_VIEWER_ROLE, FEATURE_LIST } from '../../common/constants';\n\n/**\n * shows a button which when clicked shows some videos in PIP, clicking\n * again turns it off.\n */\nconst PIPComponent = ({ peers, showLocalPeer }) => {\n const localPeerRole = useHMSStore(selectLocalPeerRoleName);\n const [isPipOn, setIsPipOn] = useState(PictureInPicture.isOn());\n const hmsActions = useHMSActions();\n const store = useHMSVanillaStore();\n const isFeatureEnabled = useIsFeatureEnabled(FEATURE_LIST.PICTURE_IN_PICTURE);\n\n const onPipToggle = useCallback(() => {\n if (!isPipOn) {\n PictureInPicture.start(hmsActions, setIsPipOn).catch(err => console.error('error in starting pip', err));\n MediaSession.setup(hmsActions, store);\n } else {\n PictureInPicture.stop().catch(err => console.error('error in stopping pip', err));\n }\n }, [hmsActions, isPipOn, store]);\n\n // stop pip on unmount\n useEffect(() => {\n return () => {\n PictureInPicture.stop().catch(err => console.error('error in stopping pip on unmount', err));\n };\n }, []);\n\n if (!PictureInPicture.isSupported() || localPeerRole === DEFAULT_HLS_VIEWER_ROLE || !isFeatureEnabled) {\n return null;\n }\n return (\n <>\n <Tooltip title={`${isPipOn ? 'Deactivate' : 'Activate'} picture in picture view`}>\n <IconButton active={!isPipOn} key=\"pip\" onClick={() => onPipToggle()} data-testid=\"pip_btn\">\n <PipIcon />\n </IconButton>\n </Tooltip>\n {isPipOn && <ActivatedPIP showLocalPeer={showLocalPeer} peers={peers} />}\n </>\n );\n};\n\n/**\n * this is a separate component so it can be conditionally rendered and\n * the subscriptions to store are done only if required.\n */\nconst ActivatedPIP = ({ showLocalPeer, peers }) => {\n const tracksMap = useHMSStore(selectTracksMap);\n const storePeers = useHMSStore(showLocalPeer ? selectPeers : selectRemotePeers);\n\n useEffect(() => {\n let pipPeers = storePeers;\n if (peers) {\n pipPeers = storePeers.filter(peer => peers.includes(peer.id));\n }\n PictureInPicture.updatePeersAndTracks(pipPeers, tracksMap).catch(err => {\n console.error('error in updating pip', err);\n });\n }, [peers, storePeers, tracksMap]);\n\n return null;\n};\n\nexport default PIPComponent;\n", "import * as workerTimers from 'worker-timers';\nimport { drawVideoElementsOnCanvas, dummyChangeInCanvas, resetPIPCanvasColors } from './pipUtils';\nimport { isIOS, isMacOS, isSafari } from '../../common/constants';\nconst MAX_NUMBER_OF_TILES_IN_PIP = 4;\nconst DEFAULT_FPS = 30;\nconst DEFAULT_CANVAS_WIDTH = 480;\nconst DEFAULT_CANVAS_HEIGHT = 320;\nconst LEAVE_EVENT_NAME = 'leavepictureinpicture';\n\nconst PIPStates = {\n starting: 'starting',\n started: 'started',\n stopping: 'stopping',\n stopped: 'stopped',\n};\n\n/**\n * video elements are stitched together as a canvas which is converted to\n * another video element converted to PIP.\n * The task is split into two parts -\n * 1. a function which gets hit when the input changes and updates the tracks\n * to show\n * 2. an independent loop which updates the canvas periodically based on the current\n * tracks which should be shown.\n */\nclass PipManager {\n constructor() {\n this.reset();\n }\n\n /**\n * @private\n */\n reset() {\n console.debug('resetting PIP state');\n resetPIPCanvasColors();\n this.canvas = null; // where stitching will take place\n this.pipVideo = null; // the element which will be sent in PIP\n this.timeoutRef = null; // setTimeout reference so it can be cancelled\n this.hmsActions = null; // for attaching detaching\n this.videoElements = []; // for attaching tracks\n this.tracksToShow = [];\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n this.onStateChange = () => {}; // for user of this class to listen to changes\n this.state = PIPStates.stopped;\n }\n\n /**\n * check if PIP is supported in this browser env\n */\n isSupported() {\n return !!document.pictureInPictureEnabled && !isIOS && !(isMacOS && isSafari);\n }\n\n /**\n * check if pip is currently turned on\n */\n isOn() {\n return !!document.pictureInPictureElement;\n }\n\n /**\n * request browser to start pip and start the render loop updating the pip\n * video element with peer tracks.\n * @param hmsActions\n * @param onStateChangeFn {function(bool):void} callback called to notify change in pip state\n */\n async start(hmsActions, onStateChangeFn) {\n if (!this.isSupported()) {\n throw new Error('pip is not supported on this browser');\n }\n console.debug('starting PIP, current state', this.state);\n if (this.state === PIPStates.started) {\n await this.stop(); // if anything is already running\n } else if (this.state === PIPStates.starting) {\n return; // ignore double clicks\n }\n this.state = PIPStates.starting;\n try {\n await this.init(hmsActions, onStateChangeFn);\n // when user closes pip, call internal stop\n this.pipVideo.addEventListener(LEAVE_EVENT_NAME, this.stop);\n this.renderLoop();\n if (!this.isOn()) {\n await this.requestPIP();\n }\n console.debug('pip started');\n this.state = PIPStates.started;\n this.onStateChange(true);\n } catch (err) {\n console.error('error in request pip', err);\n this.state = PIPStates.stopped;\n }\n }\n\n stop = async () => {\n if (this.state === PIPStates.stopped) {\n return;\n }\n this.state = PIPStates.stopping;\n this.pipVideo?.removeEventListener(LEAVE_EVENT_NAME, this.stop);\n if (this.timeoutRef) {\n workerTimers.clearTimeout(this.timeoutRef);\n }\n if (this.isOn()) {\n this.exitPIP();\n }\n // detach all to avoid bandwidth consumption\n await this.detachOldAttachNewTracks(this.tracksToShow, []);\n this.onStateChange(false); // notify parent about this\n this.reset(); // cleanup\n this.state = PIPStates.stopped;\n };\n\n /**\n * @param peers {Array} All Remote Peers present in call.\n * @param tracksMap {Object} map of track id to track\n * */\n async updatePeersAndTracks(peers, tracksMap) {\n if (!this.canvas) {\n return;\n }\n const newTracksToShowUnordered = this.pickTracksToShow(peers, tracksMap);\n const currentTracksShowing = this.tracksToShow;\n this.tracksToShow = this.orderNewTracksToShow(newTracksToShowUnordered, currentTracksShowing);\n try {\n await this.detachOldAttachNewTracks(currentTracksShowing, this.tracksToShow, tracksMap);\n } catch (error) {\n console.error('error in detaching/attaching tracks', error);\n }\n }\n\n // ------- Private function --------------\n\n /**\n * @private\n */\n async init(hmsActions, onStateChangeFn) {\n await this.initMediaElements();\n this.hmsActions = hmsActions;\n this.onStateChange = onStateChangeFn;\n }\n\n async initMediaElements() {\n if (!this.canvas) {\n const { canvas, pipVideo } = this.initializeCanvasAndVideoElement();\n this.canvas = canvas; // where stitching will take place\n this.pipVideo = pipVideo; // the element which will be sent in PIP\n this.videoElements = this.initializeVideoElements(); // for attaching tracks\n const videoPlayPromise = this.pipVideo.play();\n dummyChangeInCanvas(this.canvas);\n await videoPlayPromise;\n }\n }\n\n initializeCanvasAndVideoElement() {\n const canvas = document.createElement('canvas');\n canvas.width = DEFAULT_CANVAS_WIDTH;\n canvas.height = DEFAULT_CANVAS_HEIGHT;\n const pipVideo = document.createElement('video');\n pipVideo.width = DEFAULT_CANVAS_WIDTH;\n pipVideo.height = DEFAULT_CANVAS_HEIGHT;\n pipVideo.muted = true;\n pipVideo.srcObject = canvas.captureStream();\n return { canvas, pipVideo };\n }\n\n initializeVideoElements() {\n let videoElements = [];\n for (let i = 0; i < MAX_NUMBER_OF_TILES_IN_PIP; i++) {\n const videoElement = document.createElement('video');\n videoElement.autoplay = true;\n videoElement.playsinline = true;\n videoElements.push(videoElement);\n }\n return videoElements;\n }\n\n /**\n * render loop is responsible for rendering the video elements on canvas/pip.\n * in each loop current video elements are stitched and painted on canvas\n */\n renderLoop() {\n const delay = 1000 / DEFAULT_FPS;\n this.timeoutRef = workerTimers.setTimeout(() => {\n if (this.state === PIPStates.stopping || this.state === PIPStates.stopped) {\n return;\n }\n if (this.state === PIPStates.started) {\n drawVideoElementsOnCanvas(this.videoElements, this.canvas);\n }\n this.renderLoop();\n }, delay);\n }\n\n async requestPIP() {\n try {\n if (this.isOn()) {\n this.exitPIP(); // is this really needed?\n }\n await this.pipVideo.requestPictureInPicture();\n } catch (error) {\n console.error('error in requestpip', error, 'state', this.state);\n throw error;\n }\n }\n\n exitPIP() {\n document.exitPictureInPicture();\n }\n\n /**\n * Logic - pick only enabled video tracks\n * @param peers {Array<any>}\n * @param tracksMap {Record<string, any>}\n */\n pickTracksToShow(peers, tracksMap) {\n const tracksToShow = [];\n for (const peer of peers) {\n if (tracksToShow.length === MAX_NUMBER_OF_TILES_IN_PIP) {\n break;\n } else if (peer.videoTrack && tracksMap[peer.videoTrack]?.enabled) {\n tracksToShow.push(peer.videoTrack);\n }\n }\n return tracksToShow;\n }\n\n /**\n * there has to be a smart reordering of new tracks based on currently showing\n * ones to reduce unnecessary displacement. If someone was showing up both\n * earlier and now, it's a better UX to keep their position same instead\n * of letting it change.\n * The returned array is a shuffled version of newTracks with position of\n * tracks present in the old tracks intact.\n * eg. old = [1,5,9,3], new = [3,8,2,9], result = [8,2,9,3]\n * @param oldTracks {Array}\n * @param newTracks {Array}\n * @return {Array}\n */\n orderNewTracksToShow(newTracks, oldTracks) {\n const betterNewTracks = [];\n const leftOvers = [];\n // put the common ones in right position\n newTracks.forEach(track => {\n const oldPosition = oldTracks.indexOf(track);\n if (oldPosition !== -1 && oldPosition < newTracks.length) {\n // if track is there currently and we can put it on the same position\n betterNewTracks[oldPosition] = track;\n } else {\n leftOvers.push(track);\n }\n });\n // put the left overs in remaining empty positions\n for (let i = 0; i < newTracks.length; i++) {\n if (!betterNewTracks[i]) {\n betterNewTracks[i] = leftOvers.shift();\n }\n }\n return betterNewTracks;\n }\n\n /**\n * call detach for tracks which no longer need to be shown and attach for\n * new ones which are to be shown now.\n * Note: oldTracks and newTracks are not necessarily of same length\n * @param oldTracks {Array<String>}\n * @param newTracks {Array<String>}\n * @param tracksMap {Record<String, any>}\n */\n // eslint-disable-next-line complexity\n async detachOldAttachNewTracks(oldTracks, newTracks, tracksMap = null) {\n const numTracks = Math.max(oldTracks.length, newTracks.length);\n for (let i = 0; i < numTracks; i++) {\n if (oldTracks[i] === newTracks[i]) {\n continue; // it would already have been attached previously\n } else if (oldTracks[i]) {\n // old track is there but not equal to new track, detach\n // no need to call detach if we know for sure track is no longer in store\n if (!tracksMap || tracksMap[oldTracks[i]]) {\n await this.hmsActions.detachVideo(oldTracks[i], this.videoElements[i]);\n }\n if (this.videoElements[i]) {\n // even if old track got removed from the room, element needs to be cleaned up\n this.videoElements[i].srcObject = null;\n }\n }\n if (newTracks[i]) {\n await this.hmsActions.attachVideo(newTracks[i], this.videoElements[i]);\n }\n }\n }\n}\n\nexport const PictureInPicture = new PipManager();\n// PictureInPicture.initMediaElements().catch(console.error); // for safari, init early\n", "let CANVAS_FILL_COLOR;\nlet CANVAS_STROKE_COLOR;\n\nfunction setPIPCanvasColors() {\n if (!CANVAS_FILL_COLOR) {\n CANVAS_FILL_COLOR = window\n .getComputedStyle(document.documentElement)\n .getPropertyValue('--hms-ui-colors-surface_bright');\n }\n if (!CANVAS_STROKE_COLOR) {\n CANVAS_STROKE_COLOR = window\n .getComputedStyle(document.documentElement)\n .getPropertyValue('--hms-ui-colors-border_bright');\n }\n}\n\nexport function resetPIPCanvasColors() {\n CANVAS_FILL_COLOR = '';\n CANVAS_STROKE_COLOR = '';\n}\n/**\n * no tile - blank canvas, black image\n * 1 tile - takes full space on canvas\n * 2 tile - stack two video adjacent to each other\n * 3 tile - two rows first row has two tile second row has one tile centered.\n * 4 tiles - two rows two columns - all equal size\n * All videos will respect their aspect ratios.\n */\nexport function drawVideoElementsOnCanvas(videoElements, canvas) {\n let videoTiles = videoElements.filter(videoElement => videoElement.srcObject !== null);\n\n const ctx = canvas.getContext('2d');\n setPIPCanvasColors();\n ctx.fillStyle = CANVAS_FILL_COLOR;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n if (videoTiles.length === 0) {\n // no tile to render, render black image\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n return;\n }\n\n fillGridTiles(videoTiles.slice(0, 4), ctx, canvas);\n}\n\n// this is to send some data for stream and resolve video element's play for a\n// video element rendering this canvas' capture stream\nexport function dummyChangeInCanvas(canvas) {\n const ctx = canvas.getContext('2d');\n setPIPCanvasColors();\n ctx.fillStyle = CANVAS_FILL_COLOR;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n}\n\n/**\n * Imagine the canvas as a grid with passed in number of rows and columns. Go\n * over the tiles in the grid in order while drawing the videoElements upon them.\n */\nfunction fillGridTiles(videoElements, ctx, canvas) {\n const offset = 8;\n canvas.width = 480;\n canvas.height = 320;\n\n ctx.fillStyle = CANVAS_FILL_COLOR;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n // Show borders only when there is atleast one video\n if (videoElements.length > 0) {\n ctx.strokeStyle = CANVAS_STROKE_COLOR;\n ctx.lineWidth = offset / 2;\n ctx.strokeRect(0, 0, canvas.width, canvas.height);\n }\n\n if (videoElements.length === 1) {\n const video = videoElements[0];\n const { width, height } = getRenderDimensions(video, canvas.width - offset, canvas.height - offset);\n /**\n * The x and y offset are to center the video tile horizontally and vertically\n * width and height are the aspect ratio constrained video tile dimensions\n */\n const xOffset = (canvas.width - width) / 2;\n const yOffset = (canvas.height - height) / 2;\n ctx.drawImage(video, xOffset, yOffset, width, height);\n }\n\n if (videoElements.length === 2) {\n videoElements.forEach((video, index) => {\n const { width, height } = getRenderDimensions(\n video,\n canvas.width / 2 - offset, // This will be the max available width for each tile\n canvas.height - offset,\n );\n /**\n * (canvas.width / 2 - width) / 2 This is to center width wise within in the box\n * (canvas.width / 2) * index This is the start offset\n * for 1st element it is 0, for second it will be canvas.width/2 which starts from the center\n */\n const xOffset = (canvas.width / 2 - width) / 2 + (canvas.width / 2) * index;\n /**\n * (canvas.height - height) / 2 This is to center height wise\n */\n const yOffset = (canvas.height - height) / 2;\n\n ctx.drawImage(video, xOffset, yOffset, width, height);\n });\n /**\n * Draw a border between tiles\n */\n const path = new Path2D();\n path.moveTo(canvas.width / 2, 0);\n path.lineTo(canvas.width / 2, canvas.height);\n ctx.stroke(path);\n }\n\n if (videoElements.length === 3) {\n videoElements.forEach((video, index) => {\n const { width, height } = getRenderDimensions(video, canvas.width / 2 - offset, canvas.height / 2 - offset);\n /**\n * for first two tiles, xOffset is similar to the 2 tiles calculation with only difference being the height. it is half now.\n */\n const xOffset =\n index < 2 ? (canvas.width / 2 - width) / 2 + (canvas.width / 2) * index : canvas.width / 2 - width / 2;\n const yOffset = (index < 2 ? 0 : canvas.height / 2) + (canvas.height / 2 - height) / 2;\n\n ctx.drawImage(video, xOffset, yOffset, width, height);\n });\n /**\n * Draw borders between tiles\n */\n const path = new Path2D();\n path.moveTo(canvas.width / 2, 0);\n path.lineTo(canvas.width / 2, canvas.height / 2);\n ctx.stroke(path);\n path.moveTo(0, canvas.height / 2);\n path.lineTo(canvas.width, canvas.height / 2);\n ctx.stroke(path);\n }\n if (videoElements.length === 4) {\n videoElements.forEach((video, index) => {\n const { width, height } = getRenderDimensions(video, canvas.width / 2 - offset, canvas.height / 2 - offset);\n /**\n * Similar to two tiles repeat after 2 tiles\n * (canvas.width / 2 - width) / 2 is to center horizontally\n */\n const xOffset = (canvas.width / 2 - width) / 2 + (canvas.width / 2) * (index % 2);\n /**\n * Similar to two tiles with the yOffset being height/2 for the 3rd and 4th tiles\n * (canvas.height / 2 - height) / 2 is to center vertically\n */\n const yOffset = (index < 2 ? 0 : canvas.height / 2) + (canvas.height / 2 - height) / 2;\n\n ctx.drawImage(video, xOffset, yOffset, width, height);\n });\n /**\n * Draw borders between tiles\n */\n const path = new Path2D();\n path.moveTo(canvas.width / 2, 0);\n path.lineTo(canvas.width / 2, canvas.height);\n ctx.stroke(path);\n path.moveTo(0, canvas.height / 2);\n path.lineTo(canvas.width, canvas.height / 2);\n ctx.stroke(path);\n }\n}\n\n/**\n * Restrict the dimensions within the available dimension with aspect ratio\n * constraint applied\n * @param {HTMLVideoElement} video\n * @param {number} width\n * @param {number} height\n * @returns { width: number, height: number }\n */\nfunction getRenderDimensions(video, width, height) {\n let finalWidth = (video.videoWidth / video.videoHeight) * height;\n let finalHeight = height;\n\n if (finalWidth > width) {\n finalWidth = width;\n finalHeight = (video.videoHeight / video.videoWidth) * width;\n }\n return { width: finalWidth, height: finalHeight };\n}\n", "import { selectIsLocalAudioEnabled, selectIsLocalVideoEnabled } from '@100mslive/react-sdk';\n\n/**\n * Media Session API allows for handling control actions on top of pip\n * https://web.dev/media-session/#video-conferencing-actions\n */\nclass SetupMediaSession {\n setup = (actions, store) => {\n this.actions = actions;\n this.store = store;\n this.initState();\n this.setUpHandlers();\n };\n\n initState = () => {\n const isMicActive = this.store.getState(selectIsLocalAudioEnabled);\n const isCamActive = this.store.getState(selectIsLocalVideoEnabled);\n navigator.mediaSession?.setMicrophoneActive?.(isMicActive);\n navigator.mediaSession?.setCameraActive?.(isCamActive);\n\n this.store.subscribe(isMicActive => {\n navigator.mediaSession?.setMicrophoneActive?.(isMicActive);\n }, selectIsLocalAudioEnabled);\n\n this.store.subscribe(isCamActive => {\n navigator.mediaSession?.setCameraActive?.(isCamActive);\n }, selectIsLocalVideoEnabled);\n };\n\n toggleMic = async () => {\n console.log('toggle mic clicked in pip');\n const current = this.store.getState(selectIsLocalAudioEnabled);\n await this.actions.setLocalAudioEnabled(!current);\n };\n\n toggleCam = async () => {\n console.log('toggle cam clicked in pip');\n const current = this.store.getState(selectIsLocalVideoEnabled);\n await this.actions.setLocalVideoEnabled(!current);\n };\n\n leave = () => {\n console.log('leave called from pip');\n this.actions.leave();\n };\n\n setUpHandlers = () => {\n if (navigator.mediaSession) {\n try {\n navigator.mediaSession.setActionHandler('togglemicrophone', this.toggleMic);\n navigator.mediaSession.setActionHandler('togglecamera', this.toggleCam);\n navigator.mediaSession.setActionHandler('hangup', this.leave);\n } catch (err) {\n console.error('error in setting media session handlers', err);\n }\n }\n };\n}\n\nexport const MediaSession = new SetupMediaSession();\n", "import React, { Fragment } from 'react';\nimport { selectIsAllowedToPublish, useHMSStore, useScreenShare } from '@100mslive/react-sdk';\nimport { ShareScreenIcon } from '@100mslive/react-icons';\nimport { ShareScreenOptions } from './pdfAnnotator/shareScreenOptions';\nimport { Box, Flex } from '../../Layout';\nimport { Tooltip } from '../../Tooltip';\nimport { ScreenShareButton } from './ShareMenuIcon';\nimport { useUISettings } from './AppData/useUISettings';\nimport { isScreenshareSupported } from '../common/utils';\nimport { UI_SETTINGS } from '../common/constants';\n\nexport const ScreenshareToggle = ({ css = {} }) => {\n const isAllowedToPublish = useHMSStore(selectIsAllowedToPublish);\n const isAudioOnly = useUISettings(UI_SETTINGS.isAudioOnly);\n\n const { amIScreenSharing, screenShareVideoTrackId: video, toggleScreenShare } = useScreenShare();\n const isVideoScreenshare = amIScreenSharing && !!video;\n if (!isAllowedToPublish.screen || !isScreenshareSupported()) {\n return null;\n }\n\n return (\n <Fragment>\n <Flex direction=\"row\">\n <ScreenShareButton\n variant=\"standard\"\n key=\"ShareScreen\"\n active={!isVideoScreenshare}\n css={css}\n disabled={isAudioOnly}\n onClick={() => {\n toggleScreenShare();\n }}\n >\n <Tooltip title={`${!isVideoScreenshare ? 'Start' : 'Stop'} screen sharing`}>\n <Box>\n <ShareScreenIcon />\n </Box>\n </Tooltip>\n </ScreenShareButton>\n <ShareScreenOptions />\n </Flex>\n </Fragment>\n );\n};\n", "import React, { Fragment, useState } from 'react';\nimport { useScreenShare } from '@100mslive/react-sdk';\nimport { PdfShare, ScreenShare, StarIcon, VerticalMenuIcon } from '@100mslive/react-icons';\nimport { Box, Button, Dropdown, Flex, IconButton, Text, Tooltip } from '../../../';\nimport { ShareMenuIcon } from '../ShareMenuIcon';\nimport { PDFFileOptions } from './pdfFileOptions';\n\nconst MODALS = {\n SHARE: 'share',\n SCREEN_SHARE: 'screenShare',\n PDF_SHARE: 'pdfShare',\n};\n\nexport function ShareScreenOptions() {\n const [openModals, setOpenModals] = useState(new Set());\n const { amIScreenSharing } = useScreenShare();\n const updateState = (modalName, value) => {\n setOpenModals(modals => {\n const copy = new Set(modals);\n if (value) {\n copy.add(modalName);\n } else {\n copy.delete(modalName);\n }\n return copy;\n });\n };\n const { toggleScreenShare } = useScreenShare();\n return (\n <Fragment>\n <Dropdown.Root open={openModals.has(MODALS.SHARE)} onOpenChange={value => updateState(MODALS.SHARE, value)}>\n <Dropdown.Trigger asChild data-testid=\"sharing_btn\" disabled={amIScreenSharing}>\n <ShareMenuIcon disabled={amIScreenSharing}>\n <Tooltip title=\"Share\">\n <Box>\n <VerticalMenuIcon />\n </Box>\n </Tooltip>\n </ShareMenuIcon>\n </Dropdown.Trigger>\n <Dropdown.Content\n sideOffset={5}\n css={{\n w: '$96',\n maxHeight: '$96',\n p: 0,\n }}\n >\n <Dropdown.Item\n css={{\n flexDirection: 'column',\n alignItems: 'flex-start',\n px: '$10',\n pt: '$10',\n pb: '$6',\n '&:hover': {\n bg: '$transparent',\n cursor: 'default',\n },\n }}\n >\n <Text variant=\"h6\">Start Sharing</Text>\n <Text variant=\"sm\">Choose what you want to share</Text>\n </Dropdown.Item>\n <Dropdown.Item\n css={{\n flexDirection: 'row',\n alignItems: 'flex-start',\n gap: '$8',\n px: '$10',\n py: '$6',\n '&:hover': {\n bg: '$transparent',\n cursor: 'default',\n },\n }}\n >\n <Flex\n direction=\"column\"\n align=\"center\"\n css={{\n gap: '$6',\n }}\n >\n <IconButton\n as=\"div\"\n onClick={() => toggleScreenShare()}\n css={{\n p: '$6',\n display: 'flex',\n justifyContent: 'center',\n border: '1px solid $border_bright',\n r: '$2',\n bg: '$surface_brighter',\n pb: '0',\n }}\n >\n <ScreenShare\n width=\"100%\"\n height=\"100%\"\n style={{\n borderTopLeftRadius: '$0',\n borderTopRightRadius: '$0',\n }}\n />\n </IconButton>\n <Flex direction=\"column\" align=\"center\">\n <Text variant=\"body2\">Share Screen</Text>\n <Text\n variant=\"caption\"\n css={{\n c: '$on_surface_low',\n textAlign: 'center',\n }}\n >\n Share your tab, window or your entire screen\n </Text>\n </Flex>\n </Flex>\n <Flex\n direction=\"column\"\n align=\"center\"\n css={{\n gap: '$6',\n }}\n >\n <IconButton\n onClick={() => {\n updateState(MODALS.PDF_SHARE, true);\n }}\n disabled={amIScreenSharing}\n css={{\n p: '$6',\n display: 'flex',\n justifyContent: 'center',\n border: '$border_bright 1px solid',\n r: '$2',\n bg: '$surface_bright',\n pb: '0',\n }}\n >\n <PdfShare\n width=\"100%\"\n height=\"100%\"\n style={{\n borderTopLeftRadius: '$0',\n borderTopRightRadius: '$0',\n }}\n />\n <Flex\n direction=\"row\"\n align=\"center\"\n css={{\n position: 'absolute',\n top: '29%',\n left: '54%',\n padding: '$2 $4',\n r: '$2',\n bg: '$primary_bright',\n zIndex: '2',\n gap: '$2',\n }}\n >\n <StarIcon height={14} width={14} />\n\n <Text\n variant=\"xs\"\n css={{\n fontWeight: '$semiBold',\n c: '$on_primary_high',\n pr: '$4',\n }}\n >\n New\n </Text>\n </Flex>\n </IconButton>\n <Flex direction=\"column\" align=\"center\">\n <Text variant=\"body2\">Share PDF</Text>\n <Text\n variant=\"caption\"\n css={{\n c: '$on_surface_low',\n textAlign: 'center',\n }}\n >\n Annotate, draw shapes, and more over PDFs\n </Text>\n </Flex>\n </Flex>\n </Dropdown.Item>\n <Dropdown.Item\n css={{\n px: '$10',\n pb: '$10',\n pt: '$6',\n '&:hover': {\n bg: '$transparent',\n cursor: 'default',\n },\n }}\n >\n <Button\n variant=\"standard\"\n outlined\n type=\"submit\"\n onClick={() => {\n updateState(MODALS.SHARE, false);\n }}\n data-testid=\"share_btn\"\n css={{\n w: '100%',\n }}\n >\n Cancel\n </Button>\n </Dropdown.Item>\n </Dropdown.Content>\n </Dropdown.Root>\n {openModals.has(MODALS.PDF_SHARE) && (\n <PDFFileOptions onOpenChange={value => updateState(MODALS.PDF_SHARE, value)} />\n )}\n </Fragment>\n );\n}\n", "import { styled } from '../../Theme';\nimport IconButton from '../IconButton';\n\nexport const ScreenShareButton = styled(IconButton, {\n h: '$14',\n px: '$8',\n r: '$1',\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n '@md': {\n px: '$4',\n mx: 0,\n },\n});\n\nexport const ShareMenuIcon = styled(ScreenShareButton, {\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n borderTopRightRadius: '$1',\n borderBottomRightRadius: '$1',\n borderLeftWidth: 0,\n w: '$4',\n '@md': {\n px: '$2',\n },\n});\n", "import React, { useState } from 'react';\nimport { Dialog, Flex, HorizontalDivider, Input, Text } from '../../../';\nimport { DialogInputFile, DialogRow } from '../../primitives/DialogContent';\nimport { PdfErrorView } from './pdfErrorView';\nimport { PDFHeader } from './pdfHeader';\nimport { PDFInfo } from './pdfInfo';\nimport { SubmitPDF } from './submitPdf';\nimport { UploadedFile } from './uploadedFile';\n\nexport function PDFFileOptions({ onOpenChange }) {\n const [isPDFUrlValid, setIsPDFUrlValid] = useState(true);\n const [isValidateProgress, setIsValidateProgress] = useState(false);\n const [pdfFile, setPDFFile] = useState(null);\n const [pdfURL, setPDFURL] = useState('');\n\n return !pdfFile ? (\n <Dialog.Root defaultOpen onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay />\n <Dialog.Content\n css={{\n w: 'min(420px,80%)',\n overflow: 'auto',\n p: '$10',\n }}\n >\n <Flex direction=\"column\">\n <PDFHeader />\n <DialogInputFile\n onChange={target => {\n setPDFFile(target.files[0]);\n }}\n placeholder=\"Click to upload\"\n type=\"file\"\n accept=\".pdf\"\n />\n <DialogRow\n css={{\n m: '$10 0',\n }}\n >\n <HorizontalDivider\n css={{\n mr: '$4',\n }}\n />\n <Text\n variant=\"tiny\"\n css={{\n color: '$on_surface_low',\n }}\n >\n OR\n </Text>\n <HorizontalDivider\n css={{\n ml: '$4',\n }}\n />\n </DialogRow>\n <Text\n variant=\"sm\"\n css={{\n py: '$2',\n }}\n >\n Import from URL\n </Text>\n <Input\n css={{ w: '100%', mb: '$10' }}\n value={pdfURL}\n onFocus={() => {\n setIsPDFUrlValid(true);\n setIsValidateProgress(false);\n }}\n onChange={e => {\n setPDFURL(e.target.value);\n }}\n placeholder=\"Add PDF URL\"\n type=\"text\"\n error={!isPDFUrlValid}\n />\n {!isPDFUrlValid && <PdfErrorView isPDFUrlValid={isPDFUrlValid} />}\n <PDFInfo />\n <SubmitPDF\n pdfFile={pdfFile}\n pdfURL={pdfURL}\n isValidateProgress={isValidateProgress}\n setIsPDFUrlValid={setIsPDFUrlValid}\n setIsValidateProgress={setIsValidateProgress}\n onOpenChange={onOpenChange}\n />\n </Flex>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n ) : (\n <UploadedFile\n pdfFile={pdfFile}\n pdfURL={pdfURL}\n isValidateProgress={isValidateProgress}\n setPDFFile={setPDFFile}\n setIsPDFUrlValid={setIsPDFUrlValid}\n setIsValidateProgress={setIsValidateProgress}\n onOpenChange={onOpenChange}\n />\n );\n}\n", "import React from 'react';\nimport { InfoIcon } from '@100mslive/react-icons';\nimport { Text } from '../../../';\nimport { DialogRow } from '../../primitives/DialogContent';\n\nexport const PdfErrorView = ({ isPDFUrlValid }) => {\n return (\n !isPDFUrlValid && (\n <DialogRow\n css={{\n mt: '-$8',\n color: '$alert_error_default',\n justifyContent: 'start',\n }}\n >\n <InfoIcon width=\"12px\" height=\"12px\" />\n <Text\n variant=\"caption\"\n css={{\n pl: '$1',\n color: '$alert_error_default',\n }}\n >\n Please enter a valid PDF URL\n </Text>\n </DialogRow>\n )\n );\n};\n", "import React from 'react';\nimport { Dialog, Text } from '../../../';\nimport { DialogCol } from '../../primitives/DialogContent';\n\nexport const PDFHeader = () => {\n return (\n <DialogCol\n align=\"start\"\n css={{\n mt: 0,\n mb: '$6',\n }}\n >\n <Dialog.Title asChild>\n <Text as=\"h6\" variant=\"h6\">\n Share PDF\n </Text>\n </Dialog.Title>\n <Dialog.Description asChild>\n <Text\n variant=\"sm\"\n css={{\n c: '$on_surface_medium',\n }}\n >\n Choose PDF you want to annotate and share\n </Text>\n </Dialog.Description>\n </DialogCol>\n );\n};\n", "import React from 'react';\nimport { InfoIcon } from '@100mslive/react-icons';\nimport { Text } from '../../../';\nimport { DialogRow } from '../../primitives/DialogContent';\n\nexport const PDFInfo = () => {\n return (\n <DialogRow\n css={{\n px: '$8',\n py: '$3',\n bg: '$surface_bright',\n r: '$1',\n outline: 'none',\n border: '1px solid $border_bright',\n minHeight: '$11',\n }}\n >\n <InfoIcon\n width=\"64px\"\n height=\"64px\"\n style={{\n paddingRight: '16px',\n }}\n />\n <Text variant=\"caption\">\n On the next screen, ensure you select \u201CThis Tab\u201D and click on share. Only the PDF viewer will be seen by other\n participants\n </Text>\n </DialogRow>\n );\n};\n", "import React, { useCallback } from 'react';\nimport { Button, Flex } from '../../../';\nimport { useSetAppDataByKey } from '../AppData/useUISettings';\nimport { APP_DATA } from '../../common/constants';\n\nexport const SubmitPDF = ({\n pdfFile,\n pdfURL,\n isValidateProgress,\n setIsPDFUrlValid,\n setIsValidateProgress,\n onOpenChange,\n}) => {\n const [, setPDFConfig] = useSetAppDataByKey(APP_DATA.pdfConfig);\n\n const isValidPDF = useCallback(\n pdfURL => {\n const extension = pdfURL.split('.').pop().toLowerCase();\n setIsValidateProgress(true);\n if (extension === 'pdf') {\n setIsPDFUrlValid(true);\n setIsValidateProgress(false);\n setPDFConfig({ state: true, file: pdfFile, url: pdfURL });\n onOpenChange(false);\n }\n\n fetch(pdfURL, { method: 'HEAD' })\n .then(response => response.headers.get('content-type'))\n .then(contentType => {\n if (contentType === 'application/pdf') {\n setIsPDFUrlValid(true);\n setIsValidateProgress(false);\n setPDFConfig({ state: true, file: pdfFile, url: pdfURL });\n onOpenChange(false);\n } else {\n setIsPDFUrlValid(false);\n setIsValidateProgress(false);\n }\n })\n .catch(() => {\n setIsPDFUrlValid(false);\n setIsValidateProgress(false);\n });\n },\n [onOpenChange, pdfFile, setIsPDFUrlValid, setIsValidateProgress, setPDFConfig],\n );\n return (\n <Flex\n direction=\"row\"\n css={{\n mb: '0',\n mt: 'auto',\n gap: '$8',\n }}\n >\n <Button\n variant=\"standard\"\n outlined\n type=\"submit\"\n onClick={() => {\n onOpenChange(false);\n }}\n css={{ w: '50%' }}\n >\n Cancel\n </Button>\n <Button\n variant=\"primary\"\n type=\"submit\"\n onClick={() => {\n if (pdfFile) {\n setPDFConfig({ state: true, file: pdfFile, url: pdfURL });\n onOpenChange(false);\n } else if (pdfURL) {\n isValidPDF(pdfURL);\n }\n }}\n disabled={!pdfFile && !pdfURL}\n loading={isValidateProgress}\n data-testid=\"share_pdf_btn\"\n css={{\n w: '50%',\n }}\n >\n Start Sharing\n </Button>\n </Flex>\n );\n};\n", "import React from 'react';\nimport { TrashIcon } from '@100mslive/react-icons';\nimport { Dialog, Flex, Text } from '../../../';\nimport { DialogRow } from '../../primitives/DialogContent';\nimport { PDFHeader } from './pdfHeader';\nimport { PDFInfo } from './pdfInfo';\nimport { SubmitPDF } from './submitPdf';\n\nexport const UploadedFile = ({\n pdfFile,\n pdfURL,\n isValidateProgress,\n setPDFFile,\n setIsPDFUrlValid,\n setIsValidateProgress,\n onOpenChange,\n}) => {\n const [fileName, ext] = pdfFile.name.split('.');\n return (\n <Dialog.Root defaultOpen onOpenChange={onOpenChange}>\n <Dialog.Portal>\n <Dialog.Overlay />\n <Dialog.Content\n css={{\n w: 'min(420px,80%)',\n overflow: 'auto',\n p: '$10',\n }}\n >\n <Flex direction=\"column\">\n <PDFHeader />\n <DialogRow\n css={{\n fontFamily: '$sans',\n bg: '$surface_bright',\n r: '$1',\n outline: 'none',\n border: '1px solid $border_bright',\n p: '$4 $6',\n minHeight: '$11',\n c: '$on_primary_high',\n fs: '$md',\n w: '100%',\n '&:focus': {\n boxShadow: '0 0 0 1px $colors$primary_default',\n border: '1px solid $transparent',\n },\n mb: 0,\n mt: '$6',\n }}\n >\n <Flex direction=\"row\" css={{ flexGrow: '1', maxWidth: '88%' }}>\n <Text\n css={{\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n }}\n >\n {fileName}\n </Text>\n <Text css={{ whiteSpace: 'nowrap' }}>.{ext}</Text>\n </Flex>\n <TrashIcon\n onClick={() => setPDFFile(null)}\n style={{\n cursor: 'pointer',\n }}\n />\n </DialogRow>\n <PDFInfo />\n <SubmitPDF\n pdfFile={pdfFile}\n pdfURL={pdfURL}\n isValidateProgress={isValidateProgress}\n setIsPDFUrlValid={setIsPDFUrlValid}\n setIsValidateProgress={setIsValidateProgress}\n onOpenChange={onOpenChange}\n />\n </Flex>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n", "import React from 'react';\nimport { useHMSActions } from '@100mslive/react-sdk';\nimport { Button } from '../../Button';\nimport { Dialog } from '../../Modal';\nimport { DialogContent, DialogRow } from '../primitives/DialogContent';\n\nexport const ScreenShareHintModal = ({ onClose }) => {\n const hmsActions = useHMSActions();\n return (\n <Dialog.Root defaultOpen onOpenChange={value => !value && onClose()}>\n <DialogContent title=\"AudioOnly Screenshare\">\n <img\n src=\"https://images.app.100ms.live/share-audio.png\"\n alt=\"AudioOnly Screenshare instructions\"\n width=\"100%\"\n />\n <DialogRow justify=\"end\">\n <Button\n variant=\"primary\"\n onClick={() => {\n hmsActions\n .setScreenShareEnabled(true, {\n audioOnly: true,\n displaySurface: 'browser',\n })\n .catch(console.error);\n onClose();\n }}\n data-testid=\"audio_screenshare_continue\"\n >\n Continue\n </Button>\n </DialogRow>\n </DialogContent>\n </Dialog.Root>\n );\n};\n", "import React from 'react';\nimport { selectUnreadHMSMessagesCount, useHMSStore } from '@100mslive/react-sdk';\nimport { ChatIcon, ChatUnreadIcon } from '@100mslive/react-icons';\nimport { Tooltip } from '../../../';\nimport IconButton from '../../IconButton';\nimport { useIsSidepaneTypeOpen, useSidepaneToggle } from '../AppData/useSidepane';\nimport { useIsFeatureEnabled } from '../hooks/useFeatures';\nimport { FEATURE_LIST, SIDE_PANE_OPTIONS } from '../../common/constants';\n\nexport const ChatToggle = () => {\n const countUnreadMessages = useHMSStore(selectUnreadHMSMessagesCount);\n const isChatOpen = useIsSidepaneTypeOpen(SIDE_PANE_OPTIONS.CHAT);\n const toggleChat = useSidepaneToggle(SIDE_PANE_OPTIONS.CHAT);\n const isFeatureEnabled = useIsFeatureEnabled(FEATURE_LIST.CHAT);\n\n if (!isFeatureEnabled) {\n return;\n }\n\n return (\n <Tooltip key=\"chat\" title={`${isChatOpen ? 'Close' : 'Open'} chat`}>\n <IconButton onClick={toggleChat} active={!isChatOpen} data-testid=\"chat_btn\">\n {countUnreadMessages === 0 ? <ChatIcon /> : <ChatUnreadIcon data-testid=\"chat_unread_btn\" />}\n </IconButton>\n </Tooltip>\n );\n};\n", "import React from 'react';\nimport { Box, Flex, Footer as AppFooter } from '../../../';\nimport { AudioVideoToggle } from '../AudioVideoToggle';\nimport { EmojiReaction } from '../EmojiReaction';\nimport { StreamActions } from '../Header/StreamActions';\nimport { LeaveRoom } from '../LeaveRoom';\nimport MetaActions from '../MetaActions';\nimport { MoreSettings } from '../MoreSettings/MoreSettings';\nimport { PIP } from '../PIP';\nimport { ScreenshareToggle } from '../ScreenShare';\nimport { ChatToggle } from './ChatToggle';\n\nexport const StreamingFooter = () => {\n return (\n <AppFooter.Root\n css={{\n flexWrap: 'nowrap',\n '@md': {\n justifyContent: 'center',\n },\n }}\n >\n <AppFooter.Left\n css={{\n '@md': {\n w: 'unset',\n p: '0',\n },\n }}\n >\n <AudioVideoToggle />\n </AppFooter.Left>\n <AppFooter.Center\n css={{\n '@md': {\n w: 'unset',\n },\n }}\n >\n <ScreenshareToggle css={{ '@sm': { display: 'none' } }} />\n <Box css={{ '@md': { display: 'none' } }}>\n <PIP />\n </Box>\n <Box\n css={{\n display: 'none',\n '@md': {\n display: 'flex',\n alignItems: 'center',\n mx: '$4',\n },\n }}\n >\n <StreamActions />\n </Box>\n <MoreSettings />\n <Box css={{ '@md': { display: 'none' } }}>\n <LeaveRoom />\n </Box>\n <Flex align=\"center\" css={{ display: 'none', '@md': { display: 'flex' } }}>\n <ChatToggle />\n </Flex>\n </AppFooter.Center>\n <AppFooter.Right>\n <EmojiReaction />\n <MetaActions />\n <ChatToggle />\n </AppFooter.Right>\n </AppFooter.Root>\n );\n};\n", "import React from 'react';\nimport { selectRoleChangeRequest, useHMSActions, useHMSStore } from '@100mslive/react-sdk';\nimport { RequestDialog } from '../primitives/DialogContent';\nimport { useIsHeadless } from './AppData/useUISettings';\n\nexport const RoleChangeRequestModal = () => {\n const hmsActions = useHMSActions();\n const isHeadless = useIsHeadless();\n const roleChangeRequest = useHMSStore(selectRoleChangeRequest);\n\n if (!roleChangeRequest?.role || isHeadless) {\n return null;\n }\n\n return (\n <RequestDialog\n title=\"Role Change Request\"\n onOpenChange={value => !value && hmsActions.rejectChangeRole(roleChangeRequest)}\n body={`${roleChangeRequest?.requestedBy?.name} has requested you to change your role to ${roleChangeRequest?.role?.name}.`}\n onAction={() => {\n hmsActions.acceptChangeRole(roleChangeRequest);\n }}\n actionText=\"Accept\"\n />\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["React", "useEffect", "useRef", "useState", "selectAppData", "selectIsConnectedToRoom", "useHMSActions", "useHMSStore", "React", "useCallback", "useEffect", "selectLocalPeerRoleName", "selectPeerScreenSharing", "selectPeerSharingVideoPlaylist", "useHMSActions", "useHMSStore", "React", "useCallback", "useMemo", "useRef", "useState", "useMedia", "selectLocalPeerID", "selectLocalPeerRoleName", "selectPeers", "selectPeerScreenSharing", "useHMSStore", "React", "useCallback", "selectPeerSharingVideoPlaylist", "useHMSStore", "React", "selectVideoPlaylist", "selectVideoPlaylistAudioTrackByPeerID", "useHMSActions", "useHMSStore", "React", "HMSPlaylistType", "selectAudioPlaylist", "selectVideoPlaylist", "useHMSActions", "useHMSStore", "useHMSActions", "useHMSStore", "HMSPlaylistType", "selectAudioPlaylist", "selectVideoPlaylist", "useHMSStore", "useHMSActions", "React", "React", "useHMSStore", "selectVideoPlaylistAudioTrackByPeerID", "selectVideoPlaylist", "useHMSActions", "React", "useHMSActions", "CrossIcon", "useHMSActions", "React", "CrossIcon", "useHMSStore", "selectPeerSharingVideoPlaylist", "smallTilePeers", "React", "useCallback", "React", "useHMSStore", "selectPeers", "useMedia", "selectLocalPeerID", "selectLocalPeerRoleName", "selectPeerScreenSharing", "useMemo", "smallTilePeers", "useState", "useRef", "useCallback", "React", "Fragment", "useEffect", "useRef", "useMedia", "useHMSStore", "useHMSStore", "useMedia", "React", "Fragment", "useRef", "useEffect", "React", "useEffect", "useState", "selectLocalPeerID", "selectPeers", "selectRolesMap", "useHMSStore", "React", "React", "useHMSStore", "useHMSStore", "useHMSStore", "selectPeers", "selectRolesMap", "selectLocalPeerID", "useState", "useEffect", "_a", "React", "React", "useCallback", "useEffect", "useRef", "useState", "throwErrorHandler", "useScreenShare", "React", "useRef", "useState", "useScreenShare", "throwErrorHandler", "useCallback", "useEffect", "React", "React", "React", "useHMSStore", "selectLocalPeerRoleName", "selectPeerScreenSharing", "selectPeerSharingVideoPlaylist", "useHMSActions", "useCallback", "useEffect", "React", "React", "Fragment", "Suspense", "useState", "useMedia", "HMSPlaylistType", "selectIsAllowedToPublish", "useHMSStore", "useScreenShare", "React", "Fragment", "useState", "HMSPlaylistType", "useHMSStore", "CrossIcon", "React", "React", "React", "Fragment", "HMSPlaylistType", "useState", "useHMSStore", "CrossIcon", "e", "React", "Fragment", "useState", "useMedia", "selectAppData", "selectIsAllowedToPublish", "selectLocalPeerID", "selectLocalPeerRoleName", "selectPermissions", "useHMSActions", "useHMSStore", "useRecordingStreaming", "ChangeRoleIcon", "CheckIcon", "MicOffIcon", "React", "useState", "selectPermissions", "useHMSActions", "useHMSStore", "useRecordingStreaming", "useHMSStore", "selectPermissions", "useState", "useRecordingStreaming", "useHMSActions", "React", "React", "useEffect", "useMemo", "useRef", "useState", "selectLocalPeerID", "useHMSStore", "useMemo", "useState", "useRef", "useEffect", "React", "useHMSStore", "selectLocalPeerID", "React", "useCallback", "useRef", "useState", "useHMSActions", "AlertTriangleIcon", "useHMSActions", "useRef", "useState", "useCallback", "React", "selectedRole", "AlertTriangleIcon", "React", "useState", "useHMSActions", "useHMSStore", "useHMSActions", "useHMSStore", "useState", "React", "React", "useMemo", "useMedia", "selectLocalPeerID", "selectLocalPeerRoleName", "selectPermissions", "useHMSActions", "useHMSStore", "CheckIcon", "useHMSStore", "selectPermissions", "selectLocalPeerID", "selectLocalPeerRoleName", "useHMSActions", "useMedia", "useMemo", "React", "CheckIcon", "React", "useState", "React", "useState", "React", "ExpandIcon", "useCallback", "useEffect", "useState", "screenfull", "useFullscreen", "useState", "screenfull", "useCallback", "useEffect", "useFullscreen", "React", "ExpandIcon", "React", "useCallback", "useState", "useHMSActions", "useHMSActions", "useState", "useCallback", "React", "useHMSStore", "selectPermissions", "selectIsAllowedToPublish", "selectLocalPeerID", "selectLocalPeerRoleName", "useHMSActions", "selectAppData", "useMedia", "useRecordingStreaming", "useState", "React", "Fragment", "ChangeRoleIcon", "MicOffIcon", "CheckIcon", "React", "React", "useCallback", "useEffect", "useState", "selectLocalPeerRoleName", "selectPeers", "selectRemotePeers", "selectTracksMap", "useHMSActions", "useHMSStore", "isMicActive", "_a", "_b", "isCamActive", "useHMSStore", "selectLocalPeerRoleName", "useState", "useHMSActions", "useCallback", "useEffect", "React", "selectTracksMap", "selectPeers", "selectRemotePeers", "React", "React", "Fragment", "selectIsAllowedToPublish", "useHMSStore", "useScreenShare", "ShareScreenIcon", "React", "Fragment", "useState", "useScreenShare", "VerticalMenuIcon", "React", "useState", "React", "InfoIcon", "React", "InfoIcon", "React", "React", "React", "InfoIcon", "React", "InfoIcon", "React", "useCallback", "useCallback", "pdfURL", "React", "React", "React", "useState", "React", "MODALS", "useState", "useScreenShare", "React", "Fragment", "VerticalMenuIcon", "useHMSStore", "selectIsAllowedToPublish", "useScreenShare", "React", "Fragment", "ShareScreenIcon", "React", "useHMSActions", "useHMSActions", "React", "React", "useHMSStore", "useHMSStore", "React", "React", "useScreenShare", "useHMSStore", "selectIsAllowedToPublish", "useState", "Fragment", "useMedia", "HMSPlaylistType", "Suspense", "React", "React", "Footer", "React", "React", "useHMSActions", "useHMSStore", "useHMSActions", "useHMSStore", "React", "useHMSStore", "selectIsConnectedToRoom", "useHMSActions", "useState", "selectAppData", "useRef", "_a", "useEffect", "React", "Footer"]
7
- }