@100mslive/roomkit-react 0.1.4-alpha.1 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/{HLSView-F2K5VSTS.js → HLSView-P57IRMAR.js} +7 -11
- package/dist/{HLSView-F2K5VSTS.js.map → HLSView-P57IRMAR.js.map} +1 -1
- package/dist/PinnedTrackView-4FYJEBTB.js +102 -0
- package/dist/PinnedTrackView-4FYJEBTB.js.map +7 -0
- package/dist/Popover/index.d.ts +1 -0
- package/dist/Prebuilt/App.d.ts +25 -0
- package/dist/Prebuilt/index.d.ts +1 -0
- package/dist/Prebuilt/provider/roomLayoutProvider/index.d.ts +1 -1
- package/dist/Sheet/Sheet.d.ts +3093 -0
- package/dist/Sheet/index.d.ts +1 -0
- package/dist/Theme/ThemeProvider.d.ts +4 -286
- package/dist/Theme/stitches.config.d.ts +1 -1
- package/dist/{VirtualBackground-S3XEPZ2T.js → VirtualBackground-GGCQJ5JM.js} +31 -7
- package/dist/VirtualBackground-GGCQJ5JM.js.map +7 -0
- package/dist/chunk-IVTWKQI3.js +827 -0
- package/dist/chunk-IVTWKQI3.js.map +7 -0
- package/dist/{chunk-42SWPN2C.js → chunk-OSM4QEQG.js} +3020 -2189
- package/dist/chunk-OSM4QEQG.js.map +7 -0
- package/dist/chunk-P5X32KOD.js +67 -0
- package/dist/chunk-P5X32KOD.js.map +7 -0
- package/dist/chunk-RVCZPPTL.js +1100 -0
- package/dist/chunk-RVCZPPTL.js.map +7 -0
- package/dist/{chunk-ESUJK7AT.js → conference-P6I6ESVF.js} +3136 -653
- package/dist/conference-P6I6ESVF.js.map +7 -0
- package/dist/index.cjs.js +15733 -15498
- package/dist/index.cjs.js.map +4 -4
- package/dist/index.js +4 -8
- package/dist/meta.cjs.json +3355 -3017
- package/dist/meta.esbuild.json +3534 -3329
- package/dist/utils/animations.d.ts +16 -0
- package/package.json +8 -10
- package/src/Button/Button.tsx +4 -4
- package/src/Dropdown/Dropdown.tsx +2 -2
- package/src/IconButton/IconButton.tsx +4 -2
- package/src/Pagination/StyledPagination.tsx +1 -0
- package/src/Popover/index.tsx +2 -1
- package/src/Prebuilt/{App.jsx → App.tsx} +95 -48
- package/src/Prebuilt/Prebuilt.stories.tsx +22 -8
- package/src/Prebuilt/common/constants.js +1 -2
- package/src/Prebuilt/common/hooks.js +8 -0
- package/src/Prebuilt/common/utils.js +15 -0
- package/src/Prebuilt/components/AppData/AppData.jsx +1 -2
- package/src/Prebuilt/components/AppData/useUISettings.js +0 -5
- package/src/Prebuilt/components/AudioVideoToggle.jsx +69 -26
- package/src/Prebuilt/components/AuthToken.jsx +3 -2
- package/src/Prebuilt/components/Chat/ChatSelector.jsx +1 -1
- package/src/Prebuilt/components/Connection/TileConnection.jsx +0 -1
- package/src/Prebuilt/components/EmojiReaction.jsx +23 -73
- package/src/Prebuilt/components/EndSessionContent.jsx +57 -0
- package/src/Prebuilt/components/EqualProminence.jsx +180 -0
- package/src/Prebuilt/components/ErrorBoundary.jsx +4 -10
- package/src/Prebuilt/components/Footer/EmojiCard.jsx +34 -0
- package/src/Prebuilt/components/Footer/Footer.jsx +73 -0
- package/src/Prebuilt/components/{Header → Footer}/ParticipantList.jsx +5 -5
- package/src/Prebuilt/components/Header/ConferencingHeader.jsx +27 -7
- package/src/Prebuilt/components/Header/HeaderComponents.jsx +16 -14
- package/src/Prebuilt/components/Header/StreamActions.jsx +101 -36
- package/src/Prebuilt/components/Header/StreamingHeader.jsx +1 -1
- package/src/Prebuilt/components/Header/common.jsx +164 -0
- package/src/Prebuilt/components/IconButtonWithOptions/IconButtonWithOptions.jsx +1 -2
- package/src/Prebuilt/components/LeaveCard.jsx +19 -0
- package/src/Prebuilt/components/LeaveRoom.jsx +35 -143
- package/src/Prebuilt/components/LeaveSessionContent.jsx +45 -0
- package/src/Prebuilt/components/MoreSettings/ActionTile.jsx +55 -0
- package/src/Prebuilt/components/MoreSettings/ChangeNameContent.jsx +96 -0
- package/src/Prebuilt/components/MoreSettings/ChangeNameModal.jsx +31 -54
- package/src/Prebuilt/components/MoreSettings/EmbedUrl.jsx +48 -73
- package/src/Prebuilt/components/MoreSettings/MoreSettings.jsx +5 -221
- package/src/Prebuilt/components/MoreSettings/MuteAllContent.jsx +61 -0
- package/src/Prebuilt/components/MoreSettings/MuteAllModal.jsx +32 -49
- package/src/Prebuilt/components/MoreSettings/SplitComponents/DesktopLeaveRoom.jsx +129 -0
- package/src/Prebuilt/components/MoreSettings/SplitComponents/DesktopOptions.jsx +219 -0
- package/src/Prebuilt/components/MoreSettings/SplitComponents/MwebLeaveRoom.jsx +100 -0
- package/src/Prebuilt/components/MoreSettings/SplitComponents/MwebOptions.jsx +259 -0
- package/src/Prebuilt/components/Notifications/Notifications.jsx +0 -2
- package/src/Prebuilt/components/Notifications/ReconnectNotifications.jsx +0 -4
- package/src/Prebuilt/components/PIP/PIPComponent.jsx +30 -26
- package/src/Prebuilt/components/PIP/PIPManager.js +13 -0
- package/src/Prebuilt/components/PIP/index.jsx +2 -7
- package/src/Prebuilt/components/Pagination.jsx +4 -4
- package/src/Prebuilt/components/Preview/PreviewContainer.jsx +5 -13
- package/src/Prebuilt/components/Preview/PreviewForm.jsx +9 -5
- package/src/Prebuilt/components/Preview/PreviewJoin.jsx +20 -27
- package/src/Prebuilt/components/RaiseHand.jsx +27 -0
- package/src/Prebuilt/components/ScreenShare.jsx +1 -1
- package/src/Prebuilt/components/ScreenshareDisplay.jsx +2 -2
- package/src/Prebuilt/components/ScreenshareTile.jsx +2 -2
- package/src/Prebuilt/components/Settings/DeviceSettings.jsx +2 -1
- package/src/Prebuilt/components/Settings/LayoutSettings.jsx +1 -24
- package/src/Prebuilt/components/Settings/SettingsModal.jsx +152 -17
- package/src/Prebuilt/components/ShareMenuIcon.jsx +1 -0
- package/src/Prebuilt/components/TileMenu/TileMenu.jsx +133 -0
- package/src/Prebuilt/components/TileMenu/TileMenuContent.jsx +313 -0
- package/src/Prebuilt/components/VideoList.jsx +5 -33
- package/src/Prebuilt/components/VideoTile.jsx +30 -8
- package/src/Prebuilt/components/conference.jsx +14 -1
- package/src/Prebuilt/components/init/Init.jsx +0 -27
- package/src/Prebuilt/components/init/initUtils.js +0 -23
- package/src/Prebuilt/components/pdfAnnotator/pdfFileOptions.jsx +2 -1
- package/src/Prebuilt/components/pdfAnnotator/pdfInfo.jsx +1 -1
- package/src/Prebuilt/components/pdfAnnotator/shareScreenOptions.jsx +19 -8
- package/src/Prebuilt/components/pdfAnnotator/uploadedFile.jsx +1 -0
- package/src/Prebuilt/images/pdf-share.png +0 -0
- package/src/Prebuilt/images/screen-share.png +0 -0
- package/src/Prebuilt/index.ts +1 -0
- package/src/Prebuilt/layouts/EmbedView.jsx +0 -1
- package/src/Prebuilt/layouts/InsetView.jsx +65 -24
- package/src/Prebuilt/layouts/PDFView.jsx +0 -1
- package/src/Prebuilt/layouts/SidePane.jsx +8 -7
- package/src/Prebuilt/layouts/mainView.jsx +22 -31
- package/src/Prebuilt/layouts/screenShareView.jsx +0 -2
- package/src/Prebuilt/plugins/VirtualBackground/VirtualBackground.jsx +25 -1
- package/src/Prebuilt/primitives/DialogContent.jsx +1 -1
- package/src/Prebuilt/provider/roomLayoutProvider/index.tsx +1 -1
- package/src/Sheet/Sheet.mdx +19 -0
- package/src/Sheet/Sheet.stories.tsx +103 -0
- package/src/Sheet/Sheet.tsx +118 -0
- package/src/Sheet/index.ts +1 -0
- package/src/Theme/ThemeProvider.tsx +10 -13
- package/src/Theme/base.config.ts +1 -1
- package/src/Theme/stitches.config.ts +1 -1
- package/src/TileMenu/StyledMenuTile.tsx +2 -2
- package/src/TileMenu/TileMenu.tsx +2 -0
- package/src/VideoTile/StyledVideoTile.tsx +5 -0
- package/src/utils/animations.ts +18 -0
- package/dist/ActiveSpeakerView-V6O4K3BV.js +0 -39
- package/dist/ActiveSpeakerView-V6O4K3BV.js.map +0 -7
- package/dist/PinnedTrackView-7YQG4QKC.js +0 -70
- package/dist/PinnedTrackView-7YQG4QKC.js.map +0 -7
- package/dist/VirtualBackground-S3XEPZ2T.js.map +0 -7
- package/dist/chunk-42SWPN2C.js.map +0 -7
- package/dist/chunk-4NEZLVVH.js +0 -811
- package/dist/chunk-4NEZLVVH.js.map +0 -7
- package/dist/chunk-4ZBEFSRC.js +0 -58
- package/dist/chunk-4ZBEFSRC.js.map +0 -7
- package/dist/chunk-ESUJK7AT.js.map +0 -7
- package/dist/chunk-R6PDR5WZ.js +0 -243
- package/dist/chunk-R6PDR5WZ.js.map +0 -7
- package/dist/conference-7QKOMJPP.js +0 -3697
- package/dist/conference-7QKOMJPP.js.map +0 -7
- package/dist/transcription-RJA4V6PC.js +0 -356
- package/dist/transcription-RJA4V6PC.js.map +0 -7
- package/src/Prebuilt/common/useSortedPeers.js +0 -28
- package/src/Prebuilt/components/BottomActionSheet/BottomActionSheet.jsx +0 -96
- package/src/Prebuilt/components/BottomActionSheet/BottomActionSheet.stories.tsx +0 -46
- package/src/Prebuilt/components/Footer/ConferencingFooter.jsx +0 -101
- package/src/Prebuilt/components/Footer/StreamingFooter.jsx +0 -71
- package/src/Prebuilt/components/Footer.jsx +0 -8
- package/src/Prebuilt/components/MoreSettings/ChangeSelfRole.jsx +0 -67
- package/src/Prebuilt/components/TileMenu.jsx +0 -268
- package/src/Prebuilt/index.d.ts +0 -20
- package/src/Prebuilt/index.js +0 -2
@@ -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/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 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 { selectIsAllowedToPublish, useHMSStore, useScreenShare } from '@100mslive/react-sdk';\nimport { MusicIcon } from '@100mslive/react-icons';\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 <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 { 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", "useHMSActions", "useHMSStore", "selectVideoPlaylist", "HMSPlaylistType", "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", "selectIsAllowedToPublish", "useHMSStore", "useScreenShare", "React", "Fragment", "useState", "useMedia", "selectAppData", "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", "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", "Suspense", "React", "React", "Footer", "React", "React", "useHMSActions", "useHMSStore", "useHMSActions", "useHMSStore", "React", "useHMSStore", "selectIsConnectedToRoom", "useHMSActions", "useState", "selectAppData", "useRef", "_a", "useEffect", "React", "Footer"]
|
7
|
-
}
|