@stream-io/video-react-sdk 0.3.42 → 0.3.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../src/core/components/Audio/Audio.tsx","../../src/core/components/Audio/ParticipantsAudio.tsx","../../src/utilities/isComponentType.ts","../../src/utilities/chunk.ts","../../src/utilities/applyElementToRef.ts","../../src/core/components/Video/BaseVideo.tsx","../../src/core/components/Video/DefaultVideoPlaceholder.tsx","../../src/core/components/Video/Video.tsx","../../src/core/hooks/useDevices.ts","../../src/core/hooks/useAudioPublisher.ts","../../src/components/Debug/useIsDebugMode.ts","../../src/core/hooks/useVideoPublisher.ts","../../src/core/hooks/useTrackElementVisibility.ts","../../src/components/Avatar/Avatar.tsx","../../src/hooks/useFloatingUIPreset.ts","../../src/hooks/useScrollPosition.ts","../../src/hooks/useRequestPermission.ts","../../src/hooks/useToggleAudioMuteState.ts","../../src/hooks/useToggleVideoMuteState.ts","../../src/hooks/useToggleScreenShare.ts","../../src/hooks/useToggleCallRecording.ts","../../src/components/Menu/MenuToggle.tsx","../../src/components/Menu/GenericMenu.tsx","../../src/components/Icon/Icon.tsx","../../src/components/Button/IconButton.tsx","../../src/components/Button/CompositeButton.tsx","../../src/components/Tooltip/Tooltip.tsx","../../src/components/Tooltip/hooks/useEnterLeaveHandlers.ts","../../src/components/Tooltip/WithTooltip.tsx","../../src/components/Button/CopyToClipboardButton.tsx","../../src/components/Button/TextButton.tsx","../../src/components/CallControls/AcceptCallButton.tsx","../../src/components/Notification/Notification.tsx","../../src/components/Notification/PermissionNotification.tsx","../../src/components/Notification/SpeakingWhileMutedNotification.tsx","../../src/components/CallControls/CallControls.tsx","../../src/components/CallStats/CallStatsLatencyChart.tsx","../../src/components/CallStats/CallStats.tsx","../../src/components/CallControls/CallStatsButton.tsx","../../src/components/CallControls/CancelCallButton.tsx","../../src/components/Reaction/Reaction.tsx","../../src/components/CallControls/ReactionsButton.tsx","../../src/components/LoadingIndicator/LoadingIndicator.tsx","../../src/components/CallControls/RecordCallButton.tsx","../../src/components/CallControls/ScreenShareButton.tsx","../../src/components/DeviceSettings/DeviceSelector.tsx","../../src/components/DeviceSettings/DeviceSelectorAudio.tsx","../../src/components/DeviceSettings/DeviceSelectorVideo.tsx","../../src/components/DeviceSettings/DeviceSettings.tsx","../../src/components/CallControls/ToggleAudioButton.tsx","../../src/components/CallControls/ToggleAudioOutputButton.tsx","../../src/components/CallControls/ToggleVideoButton.tsx","../../src/components/CallParticipantsList/BlockedUserListing.tsx","../../src/components/CallParticipantsList/CallParticipantListHeader.tsx","../../src/components/CallParticipantsList/CallParticipantListingItem.tsx","../../src/components/CallParticipantsList/CallParticipantListing.tsx","../../src/components/CallParticipantsList/EmptyParticipantSearchList.tsx","../../src/components/Search/SearchInput.tsx","../../src/components/Search/SearchResults.tsx","../../src/components/Search/hooks/useSearch.ts","../../src/components/CallParticipantsList/CallParticipantsList.tsx","../../src/components/CallPreview/CallPreview.tsx","../../src/components/CallRecordingList/CallRecordingListHeader.tsx","../../src/components/CallRecordingList/CallRecordingListItem.tsx","../../src/components/CallRecordingList/EmptyCallRecordingListing.tsx","../../src/components/CallRecordingList/LoadingCallRecordingListing.tsx","../../src/components/CallRecordingList/CallRecordingList.tsx","../../src/components/RingingCall/RingingCallControls.tsx","../../src/components/RingingCall/RingingCall.tsx","../../src/components/Permissions/PermissionRequests.tsx","../../src/components/StreamTheme/StreamTheme.tsx","../../src/components/Video/VideoPreview.tsx","../../src/components/Debug/DebugParticipantPublishQuality.tsx","../../src/components/Debug/DebugStatsView.tsx","../../src/core/components/ParticipantView/DefaultParticipantViewUI.tsx","../../src/core/components/ParticipantView/ParticipantView.tsx","../../src/core/contexts/MediaDevicesContext.tsx","../../src/core/components/StreamCall/StreamCall.tsx","../../src/translations/index.ts","../../src/core/components/StreamVideo/StreamVideo.tsx","../../src/core/components/CallLayout/hooks.ts","../../src/core/components/CallLayout/LivestreamLayout.tsx","../../src/core/components/CallLayout/PaginatedGridLayout.tsx","../../src/core/hooks/useCalculateHardLimit.ts","../../src/core/components/CallLayout/SpeakerLayout.tsx","../../index.ts"],"sourcesContent":["import { ComponentPropsWithoutRef, useEffect, useState } from 'react';\nimport {\n AudioTrackType,\n StreamVideoParticipant,\n} from '@stream-io/video-client';\nimport { useCall } from '@stream-io/video-react-bindings';\n\nexport type AudioProps = ComponentPropsWithoutRef<'audio'> & {\n /**\n * The participant whose audio stream we want to play.\n */\n participant: StreamVideoParticipant;\n\n /**\n * The type of audio stream to play for the given participant.\n * The default value is `audioTrack`.\n */\n trackType?: AudioTrackType;\n};\n\nexport const Audio = ({\n participant,\n trackType = 'audioTrack',\n ...rest\n}: AudioProps) => {\n const call = useCall();\n const [audioElement, setAudioElement] = useState<HTMLAudioElement | null>(\n null,\n );\n const { userId, sessionId } = participant;\n\n useEffect(() => {\n if (!call || !audioElement) return;\n const cleanup = call.bindAudioElement(audioElement, sessionId, trackType);\n return () => {\n cleanup?.();\n };\n }, [call, sessionId, audioElement, trackType]);\n\n return (\n <audio\n autoPlay\n {...rest}\n ref={setAudioElement}\n data-user-id={userId}\n data-session-id={sessionId}\n data-track-type={trackType}\n />\n );\n};\n","import { ComponentProps } from 'react';\nimport { SfuModels, StreamVideoParticipant } from '@stream-io/video-client';\nimport { Audio } from './Audio';\n\nexport type ParticipantsAudioProps = {\n /**\n * The participants to play audio for.\n */\n participants: StreamVideoParticipant[];\n\n /**\n * Props to pass to the underlying `Audio` components.\n */\n audioProps?: ComponentProps<typeof Audio>;\n};\n\nexport const ParticipantsAudio = (props: ParticipantsAudioProps) => {\n const { participants, audioProps } = props;\n return (\n <>\n {participants.map((participant) => {\n if (participant.isLocalParticipant) return null;\n const hasAudio = participant.publishedTracks.includes(\n SfuModels.TrackType.AUDIO,\n );\n const hasScreenShareAudio = participant.publishedTracks.includes(\n SfuModels.TrackType.SCREEN_SHARE_AUDIO,\n );\n if (hasAudio && participant.audioStream) {\n return (\n <Audio\n {...audioProps}\n trackType=\"audioTrack\"\n participant={participant}\n key={participant.sessionId}\n />\n );\n }\n if (hasScreenShareAudio && participant.screenShareAudioStream) {\n return (\n <Audio\n {...audioProps}\n trackType=\"screenShareAudioTrack\"\n participant={participant}\n key={participant.sessionId}\n />\n );\n }\n return null;\n })}\n </>\n );\n};\n","import { ComponentType, isValidElement, ReactElement } from 'react';\n\nexport const isComponentType = <T extends {}>(\n elementOrComponent?: ComponentType<T> | ReactElement | null,\n): elementOrComponent is ComponentType<T> => {\n return elementOrComponent === null\n ? false\n : !isValidElement(elementOrComponent);\n};\n","export const chunk = <T extends unknown[]>(array: T, size: number) => {\n const chunkCount = Math.ceil(array.length / size);\n\n return Array.from(\n { length: chunkCount },\n (_, index) => array.slice(size * index, size * index + size) as T,\n );\n};\n","import type { ForwardedRef } from 'react';\n\nexport const applyElementToRef = <T extends HTMLElement | null>(\n ref: ForwardedRef<T>,\n element: T,\n) => {\n if (!ref) return;\n\n if (typeof ref === 'function') return ref(element);\n\n ref.current = element;\n};\n","import { ComponentPropsWithRef, forwardRef, useEffect, useState } from 'react';\nimport { Browsers } from '@stream-io/video-client';\n\nimport { applyElementToRef } from '../../../utilities';\n\nexport type BaseVideoProps = ComponentPropsWithRef<'video'> & {\n stream?: MediaStream;\n};\n\n/**\n * @description Extends video element with `stream` property\n * (`srcObject`) to reactively handle stream changes\n */\nexport const BaseVideo = forwardRef<HTMLVideoElement, BaseVideoProps>(\n ({ stream, ...rest }, ref) => {\n const [videoElement, setVideoElement] = useState<HTMLVideoElement | null>(\n null,\n );\n\n useEffect(() => {\n if (!videoElement || !stream) return;\n if (stream === videoElement.srcObject) return;\n\n videoElement.srcObject = stream;\n if (Browsers.isSafari() || Browsers.isFirefox()) {\n // Firefox and Safari have some timing issue\n setTimeout(() => {\n videoElement.srcObject = stream;\n videoElement.play().catch((e) => {\n console.error(`Failed to play stream`, e);\n });\n }, 0);\n }\n\n return () => {\n videoElement.pause();\n videoElement.srcObject = null;\n };\n }, [stream, videoElement]);\n\n return (\n <video\n autoPlay\n playsInline\n {...rest}\n ref={(element) => {\n applyElementToRef(ref, element);\n setVideoElement(element);\n }}\n />\n );\n },\n);\n","import { ComponentPropsWithRef, forwardRef, useState } from 'react';\nimport type { StreamVideoParticipant } from '@stream-io/video-client';\n\nexport type VideoPlaceholderProps = {\n participant: StreamVideoParticipant;\n} & ComponentPropsWithRef<'div'>;\n\nexport const DefaultVideoPlaceholder = forwardRef<\n HTMLDivElement,\n VideoPlaceholderProps\n>(({ participant, style }, ref) => {\n const [error, setError] = useState(false);\n const name = participant.name || participant.userId;\n return (\n <div className=\"str-video__video-placeholder\" style={style} ref={ref}>\n {(!participant.image || error) &&\n (name ? (\n <div className=\"str-video__video-placeholder__initials-fallback\">\n <div>{name[0]}</div>\n </div>\n ) : (\n <div>Video is disabled</div>\n ))}\n {participant.image && !error && (\n <img\n onError={() => setError(true)}\n alt=\"video-placeholder\"\n className=\"str-video__video-placeholder__avatar\"\n src={participant.image}\n />\n )}\n </div>\n );\n});\n","import {\n ComponentPropsWithoutRef,\n ComponentType,\n useEffect,\n useLayoutEffect,\n useState,\n} from 'react';\nimport {\n SfuModels,\n StreamVideoParticipant,\n VideoTrackType,\n VisibilityState,\n} from '@stream-io/video-client';\nimport clsx from 'clsx';\nimport {\n DefaultVideoPlaceholder,\n VideoPlaceholderProps,\n} from './DefaultVideoPlaceholder';\nimport { useCall } from '@stream-io/video-react-bindings';\n\nexport type VideoProps = ComponentPropsWithoutRef<'video'> & {\n /**\n * The track type to display.\n */\n trackType: VideoTrackType | 'none';\n /**\n * The participant represented by this video element.\n */\n participant: StreamVideoParticipant;\n /**\n * Override the default UI that's visible when a participant turned off their video.\n */\n VideoPlaceholder?: ComponentType<VideoPlaceholderProps>;\n refs?: {\n setVideoElement?: (element: HTMLVideoElement | null) => void;\n setVideoPlaceholderElement?: (element: HTMLDivElement | null) => void;\n };\n};\n\nexport const Video = ({\n trackType,\n participant,\n className,\n VideoPlaceholder = DefaultVideoPlaceholder,\n refs,\n ...rest\n}: VideoProps) => {\n const {\n sessionId,\n videoStream,\n screenShareStream,\n publishedTracks,\n viewportVisibilityState,\n isLocalParticipant,\n userId,\n } = participant;\n\n const call = useCall();\n const [videoElement, setVideoElement] = useState<HTMLVideoElement | null>(\n null,\n );\n // start with true, will flip once the video starts playing\n const [isVideoPaused, setIsVideoPaused] = useState(true);\n const [isWideMode, setIsWideMode] = useState(true);\n\n const stream =\n trackType === 'videoTrack'\n ? videoStream\n : trackType === 'screenShareTrack'\n ? screenShareStream\n : undefined;\n\n useLayoutEffect(() => {\n if (!call || !videoElement || trackType === 'none') return;\n\n const cleanup = call.bindVideoElement(videoElement, sessionId, trackType);\n\n return () => {\n cleanup?.();\n };\n }, [call, trackType, sessionId, videoElement]);\n\n useEffect(() => {\n if (!stream || !videoElement) return;\n\n const [track] = stream.getVideoTracks();\n if (!track) return;\n\n const handlePlayPause = () => {\n setIsVideoPaused(videoElement.paused);\n\n const { width = 0, height = 0 } = track.getSettings();\n setIsWideMode(width >= height);\n };\n\n videoElement.addEventListener('play', handlePlayPause);\n videoElement.addEventListener('pause', handlePlayPause);\n track.addEventListener('unmute', handlePlayPause);\n return () => {\n videoElement.removeEventListener('play', handlePlayPause);\n videoElement.removeEventListener('pause', handlePlayPause);\n track.removeEventListener('unmute', handlePlayPause);\n };\n }, [stream, videoElement]);\n\n if (!call) return null;\n\n const isPublishingTrack =\n trackType === 'videoTrack'\n ? publishedTracks.includes(SfuModels.TrackType.VIDEO)\n : trackType === 'screenShareTrack'\n ? publishedTracks.includes(SfuModels.TrackType.SCREEN_SHARE)\n : false;\n\n const isInvisible =\n trackType === 'none' ||\n viewportVisibilityState?.[trackType] === VisibilityState.INVISIBLE;\n\n const hasNoVideoOrInvisible = !isPublishingTrack || isInvisible;\n const mirrorVideo = isLocalParticipant && trackType === 'videoTrack';\n const isScreenShareTrack = trackType === 'screenShareTrack';\n return (\n <>\n {!hasNoVideoOrInvisible && (\n <video\n {...rest}\n className={clsx(className, 'str-video__video', {\n 'str-video__video--not-playing': isVideoPaused,\n 'str-video__video--tall': !isWideMode,\n 'str-video__video--mirror': mirrorVideo,\n 'str-video__video--screen-share': isScreenShareTrack,\n })}\n data-user-id={userId}\n data-session-id={sessionId}\n ref={(element) => {\n setVideoElement(element);\n refs?.setVideoElement?.(element);\n }}\n />\n )}\n {/* TODO: add condition to \"hold\" the placeholder until track unmutes as well */}\n {(hasNoVideoOrInvisible || isVideoPaused) && (\n <VideoPlaceholder\n style={{ position: 'absolute' }}\n participant={participant}\n ref={refs?.setVideoPlaceholderElement}\n />\n )}\n </>\n );\n};\n","import { ChangeEvent, useEffect, useState } from 'react';\nimport { Observable, pairwise } from 'rxjs';\nimport {\n getAudioDevices,\n getAudioOutputDevices,\n getVideoDevices,\n} from '@stream-io/video-client';\n\nexport const useHasBrowserPermissions = (permissionName: PermissionName) => {\n const [canSubscribe, enableSubscription] = useState(false);\n\n useEffect(() => {\n let permissionState: PermissionStatus;\n const handlePermissionChange = (e: Event) => {\n const { state } = (e as unknown as ChangeEvent<PermissionStatus>).target;\n enableSubscription(state === 'granted');\n };\n const checkPermissions = async () => {\n try {\n permissionState = await navigator.permissions.query({\n name: permissionName,\n });\n permissionState.addEventListener('change', handlePermissionChange);\n enableSubscription(permissionState.state === 'granted');\n } catch (e) {\n // permission does not exist - cannot be queried\n // an example would be Firefox - camera, neither microphone perms can be queried\n enableSubscription(true);\n }\n };\n checkPermissions();\n\n return () => {\n permissionState?.removeEventListener('change', handlePermissionChange);\n };\n }, [permissionName]);\n\n return canSubscribe;\n};\n\n/**\n * Observes changes in connected devices and maintains an up-to-date array of connected MediaDeviceInfo objects.\n * @param observeDevices\n * @category Device Management\n */\nexport const useDevices = (\n observeDevices: () => Observable<MediaDeviceInfo[]>,\n) => {\n const [devices, setDevices] = useState<MediaDeviceInfo[]>([]);\n\n useEffect(() => {\n const subscription = observeDevices().subscribe(setDevices);\n\n return () => {\n subscription.unsubscribe();\n };\n }, [observeDevices]);\n\n return devices;\n};\n\n/**\n * Observes changes and maintains an array of connected video input devices\n * @category Device Management\n */\nexport const useVideoDevices = () => useDevices(getVideoDevices);\n\n/**\n * Observes changes and maintains an array of connected audio input devices\n * @category Device Management\n */\nexport const useAudioInputDevices = () => useDevices(getAudioDevices);\n\n/**\n * Observes changes and maintains an array of connected audio output devices\n * @category Device Management\n */\nexport const useAudioOutputDevices = () => useDevices(getAudioOutputDevices);\n\n/**\n * Verifies that newly selected device id exists among the registered devices.\n * If the selected device id is not found among existing devices, switches to the default device.\n * The media devices are observed only if a given permission ('camera' resp. 'microphone') is granted in browser.\n * Regardless of current permissions settings, an intent to observe devices will take place in Firefox.\n * This is due to the fact that Firefox does not allow to query for 'camera' and 'microphone' permissions.\n * @param canObserve\n * @param devices$\n * @param switchToDefaultDevice\n * @param selectedDeviceId\n * @category Device Management\n */\nexport const useDeviceFallback = (\n canObserve: boolean,\n devices$: Observable<MediaDeviceInfo[]>,\n switchToDefaultDevice: () => void,\n selectedDeviceId?: string,\n) => {\n useEffect(() => {\n if (!canObserve) return;\n const validateDeviceId = devices$.pipe().subscribe((devices) => {\n const deviceFound = devices.find(\n (device) => device.deviceId === selectedDeviceId,\n );\n if (!deviceFound) switchToDefaultDevice();\n });\n\n return () => {\n validateDeviceId.unsubscribe();\n };\n }, [canObserve, devices$, selectedDeviceId, switchToDefaultDevice]);\n};\n\n/**\n * Verifies that newly selected video device id exists among the registered devices.\n * If the selected device id is not found among existing devices, switches to the default video device.\n * The media devices are observed only if 'camera' permission is granted in browser.\n * It is integrators responsibility to instruct users how to enable required permissions.\n * Regardless of current permissions settings, an intent to observe devices will take place in Firefox.\n * This is due to the fact that Firefox does not allow to query for 'camera' and 'microphone' permissions.\n * @param switchToDefaultDevice\n * @param canObserve\n * @param selectedDeviceId\n * @category Device Management\n */\nexport const useVideoDeviceFallback = (\n switchToDefaultDevice: () => void,\n canObserve: boolean,\n selectedDeviceId?: string,\n) =>\n useDeviceFallback(\n canObserve,\n getVideoDevices(),\n switchToDefaultDevice,\n selectedDeviceId,\n );\n\n/**\n * Verifies that newly selected audio input device id exists among the registered devices.\n * If the selected device id is not found among existing devices, switches to the default audio input device.\n * The media devices are observed only if 'microphone' permission is granted in browser.\n * It is integrators responsibility to instruct users how to enable required permissions.\n * Regardless of current permissions settings, an intent to observe devices will take place in Firefox.\n * This is due to the fact that Firefox does not allow to query for 'camera' and 'microphone' permissions.\n * @param switchToDefaultDevice\n * @param canObserve\n * @param selectedDeviceId\n * @category Device Management\n */\nexport const useAudioInputDeviceFallback = (\n switchToDefaultDevice: () => void,\n canObserve: boolean,\n selectedDeviceId?: string,\n) =>\n useDeviceFallback(\n canObserve,\n getAudioDevices(),\n switchToDefaultDevice,\n selectedDeviceId,\n );\n\n/**\n * Verifies that newly selected audio output device id exists among the registered devices.\n * If the selected device id is not found among existing devices, switches to the default audio output device.\n * The media devices are observed only if 'microphone' permission is granted in browser.\n * It is integrators responsibility to instruct users how to enable required permissions.\n * Regardless of current permissions settings, an intent to observe devices will take place in Firefox.\n * This is due to the fact that Firefox does not allow to query for 'camera' and 'microphone' permissions.\n * @param switchToDefaultDevice\n * @param canObserve\n * @param selectedDeviceId\n * @category Device Management\n */\nexport const useAudioOutputDeviceFallback = (\n switchToDefaultDevice: () => void,\n canObserve: boolean,\n selectedDeviceId?: string,\n) =>\n useDeviceFallback(\n canObserve,\n getAudioOutputDevices(),\n switchToDefaultDevice,\n selectedDeviceId,\n );\n\n/**\n * Observes devices of certain kind are made unavailable and executes onDisconnect callback.\n * @param observeDevices\n * @param onDisconnect\n * @category Device Management\n */\nexport const useOnUnavailableDevices = (\n observeDevices: Observable<MediaDeviceInfo[]>,\n onDisconnect: () => void,\n) => {\n useEffect(() => {\n const subscription = observeDevices\n .pipe(pairwise())\n .subscribe(([prev, current]) => {\n if (prev.length > 0 && current.length === 0) onDisconnect();\n });\n\n return () => subscription.unsubscribe();\n }, [observeDevices, onDisconnect]);\n};\n\n/**\n * Observes disconnect of all video devices and executes onDisconnect callback.\n * @param onDisconnect\n * @category Device Management\n */\nexport const useOnUnavailableVideoDevices = (onDisconnect: () => void) =>\n useOnUnavailableDevices(getVideoDevices(), onDisconnect);\n\n/**\n * Observes disconnect of all audio input devices and executes onDisconnect callback.\n * @param onDisconnect\n * @category Device Management\n */\nexport const useOnUnavailableAudioInputDevices = (onDisconnect: () => void) =>\n useOnUnavailableDevices(getAudioDevices(), onDisconnect);\n\n/**\n * Observes disconnect of all audio output devices and executes onDisconnect callback.\n * @param onDisconnect\n * @category Device Management\n */\nexport const useOnUnavailableAudioOutputDevices = (onDisconnect: () => void) =>\n useOnUnavailableDevices(getAudioOutputDevices(), onDisconnect);\n","import { useCallback, useEffect, useRef } from 'react';\nimport { map } from 'rxjs';\nimport {\n CallingState,\n getAudioStream,\n OwnCapability,\n SfuModels,\n watchForAddedDefaultAudioDevice,\n watchForDisconnectedAudioDevice,\n} from '@stream-io/video-client';\nimport { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';\nimport { useHasBrowserPermissions } from './useDevices';\n\n/**\n * @internal\n */\nexport type AudioPublisherInit = {\n initialAudioMuted?: boolean;\n audioDeviceId?: string;\n};\n\n/**\n * @internal\n * @category Device Management\n */\nexport const useAudioPublisher = ({\n initialAudioMuted,\n audioDeviceId,\n}: AudioPublisherInit) => {\n const call = useCall();\n const { useCallState, useCallCallingState, useLocalParticipant } =\n useCallStateHooks();\n const callState = useCallState();\n const callingState = useCallCallingState();\n const participant = useLocalParticipant();\n const hasBrowserPermissionAudioInput = useHasBrowserPermissions(\n 'microphone' as PermissionName,\n );\n const { localParticipant$ } = callState;\n\n const isPublishingAudio = participant?.publishedTracks.includes(\n SfuModels.TrackType.AUDIO,\n );\n\n const publishAudioStream = useCallback(async () => {\n if (!call) return;\n if (!call.permissionsContext.hasPermission(OwnCapability.SEND_AUDIO)) {\n throw new Error(`No permission to publish audio`);\n }\n try {\n const audioStream = await getAudioStream({\n deviceId: audioDeviceId,\n });\n await call.publishAudioStream(audioStream);\n } catch (e) {\n console.log('Failed to publish audio stream', e);\n }\n }, [audioDeviceId, call]);\n\n const lastAudioDeviceId = useRef(audioDeviceId);\n useEffect(() => {\n if (\n callingState === CallingState.JOINED &&\n audioDeviceId !== lastAudioDeviceId.current\n ) {\n lastAudioDeviceId.current = audioDeviceId;\n publishAudioStream().catch((e) => {\n console.error('Failed to publish audio stream', e);\n });\n }\n }, [audioDeviceId, callingState, publishAudioStream]);\n\n const initialPublishRun = useRef(false);\n useEffect(() => {\n if (\n callingState === CallingState.JOINED &&\n !initialPublishRun.current &&\n !initialAudioMuted\n ) {\n // automatic publishing should happen only when joining the call\n // from the lobby, and the audio is not muted\n publishAudioStream().catch((e) => {\n console.error('Failed to publish audio stream', e);\n });\n initialPublishRun.current = true;\n }\n }, [callingState, initialAudioMuted, publishAudioStream]);\n\n useEffect(() => {\n if (!localParticipant$ || !hasBrowserPermissionAudioInput) return;\n const subscription = watchForDisconnectedAudioDevice(\n localParticipant$.pipe(map((p) => p?.audioDeviceId)),\n ).subscribe(async () => {\n if (!call) return;\n call.setAudioDevice(undefined);\n await call.stopPublish(SfuModels.TrackType.AUDIO);\n });\n return () => {\n subscription.unsubscribe();\n };\n }, [hasBrowserPermissionAudioInput, localParticipant$, call]);\n\n useEffect(() => {\n if (!participant?.audioStream || !call || !isPublishingAudio) return;\n\n const [track] = participant.audioStream.getAudioTracks();\n const selectedAudioDeviceId = track.getSettings().deviceId;\n\n const republishDefaultDevice = watchForAddedDefaultAudioDevice().subscribe(\n async () => {\n if (\n !(\n call &&\n participant.audioStream &&\n selectedAudioDeviceId === 'default'\n )\n )\n return;\n // We need to stop the original track first in order\n // we can retrieve the new default device stream\n track.stop();\n const audioStream = await getAudioStream({\n deviceId: 'default',\n });\n await call.publishAudioStream(audioStream);\n },\n );\n\n const handleTrackEnded = async () => {\n if (selectedAudioDeviceId === audioDeviceId) {\n const audioStream = await getAudioStream({\n deviceId: audioDeviceId,\n });\n await call.publishAudioStream(audioStream);\n }\n };\n\n track.addEventListener('ended', handleTrackEnded);\n return () => {\n track.removeEventListener('ended', handleTrackEnded);\n republishDefaultDevice.unsubscribe();\n };\n }, [audioDeviceId, call, participant?.audioStream, isPublishingAudio]);\n\n return publishAudioStream;\n};\n","import { useMemo } from 'react';\n\nconst useQueryParams = () => {\n return useMemo(\n () =>\n typeof window === 'undefined'\n ? null\n : new URLSearchParams(window.location.search),\n [],\n );\n};\n\n/**\n * Internal purpose hook. Enables certain development mode tools.\n */\nexport const useIsDebugMode = () => {\n const params = useQueryParams();\n return !!params?.get('debug');\n};\n\nexport const useDebugPreferredVideoCodec = () => {\n const params = useQueryParams();\n return params?.get('video_codec');\n};\n","import { useCallback, useEffect, useRef } from 'react';\nimport { map } from 'rxjs/operators';\nimport {\n CallingState,\n getVideoStream,\n OwnCapability,\n SfuModels,\n VideoSettingsCameraFacingEnum,\n watchForAddedDefaultVideoDevice,\n watchForDisconnectedVideoDevice,\n} from '@stream-io/video-client';\nimport { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';\nimport { useDebugPreferredVideoCodec } from '../../components/Debug/useIsDebugMode';\nimport { useHasBrowserPermissions } from './useDevices';\n\n/**\n * @internal\n */\nexport type VideoPublisherInit = {\n initialVideoMuted?: boolean;\n videoDeviceId?: string;\n};\n\n/**\n * @internal\n * @category Device Management\n */\nexport const useVideoPublisher = ({\n initialVideoMuted,\n videoDeviceId,\n}: VideoPublisherInit) => {\n const call = useCall();\n const {\n useCallState,\n useCallCallingState,\n useLocalParticipant,\n useCallSettings,\n } = useCallStateHooks();\n const callState = useCallState();\n const callingState = useCallCallingState();\n const participant = useLocalParticipant();\n const hasBrowserPermissionVideoInput = useHasBrowserPermissions(\n 'camera' as PermissionName,\n );\n const { localParticipant$ } = callState;\n\n const preferredCodec = useDebugPreferredVideoCodec();\n const isPublishingVideo = participant?.publishedTracks.includes(\n SfuModels.TrackType.VIDEO,\n );\n\n const settings = useCallSettings();\n const videoSettings = settings?.video;\n const targetResolution = videoSettings?.target_resolution;\n const publishVideoStream = useCallback(async () => {\n if (!call) return;\n if (!call.permissionsContext.hasPermission(OwnCapability.SEND_VIDEO)) {\n throw new Error(`No permission to publish video`);\n }\n try {\n const videoStream = await getVideoStream({\n deviceId: videoDeviceId,\n width: targetResolution?.width,\n height: targetResolution?.height,\n facingMode: toFacingMode(videoSettings?.camera_facing),\n });\n await call.publishVideoStream(videoStream, { preferredCodec });\n } catch (e) {\n console.log('Failed to publish video stream', e);\n }\n }, [\n call,\n preferredCodec,\n targetResolution?.height,\n targetResolution?.width,\n videoDeviceId,\n videoSettings?.camera_facing,\n ]);\n\n const lastVideoDeviceId = useRef(videoDeviceId);\n useEffect(() => {\n if (\n callingState === CallingState.JOINED &&\n videoDeviceId !== lastVideoDeviceId.current\n ) {\n lastVideoDeviceId.current = videoDeviceId;\n publishVideoStream().catch((e) => {\n console.error('Failed to publish video stream', e);\n });\n }\n }, [publishVideoStream, videoDeviceId, callingState]);\n\n const initialPublishRun = useRef(false);\n useEffect(() => {\n if (\n callingState === CallingState.JOINED &&\n !initialPublishRun.current &&\n !initialVideoMuted\n ) {\n // automatic publishing should happen only when joining the call\n // from the lobby, and the video is not muted\n publishVideoStream().catch((e) => {\n console.error('Failed to publish video stream', e);\n });\n initialPublishRun.current = true;\n }\n }, [callingState, initialVideoMuted, publishVideoStream]);\n\n useEffect(() => {\n if (!localParticipant$ || !hasBrowserPermissionVideoInput) return;\n const subscription = watchForDisconnectedVideoDevice(\n localParticipant$.pipe(map((p) => p?.videoDeviceId)),\n ).subscribe(async () => {\n if (!call) return;\n call.setVideoDevice(undefined);\n await call.stopPublish(SfuModels.TrackType.VIDEO);\n });\n return () => {\n subscription.unsubscribe();\n };\n }, [hasBrowserPermissionVideoInput, localParticipant$, call]);\n\n useEffect(() => {\n if (!participant?.videoStream || !call || !isPublishingVideo) return;\n\n const [track] = participant.videoStream.getVideoTracks();\n const selectedVideoDeviceId = track.getSettings().deviceId;\n\n const republishDefaultDevice = watchForAddedDefaultVideoDevice().subscribe(\n async () => {\n if (\n !(\n call &&\n participant.videoStream &&\n selectedVideoDeviceId === 'default'\n )\n )\n return;\n // We need to stop the original track first in order\n // we can retrieve the new default device stream\n track.stop();\n const videoStream = await getVideoStream({\n deviceId: 'default',\n });\n await call.publishVideoStream(videoStream);\n },\n );\n\n const handleTrackEnded = async () => {\n if (selectedVideoDeviceId === videoDeviceId) {\n const videoStream = await getVideoStream({\n deviceId: videoDeviceId,\n });\n await call.publishVideoStream(videoStream);\n }\n };\n\n track.addEventListener('ended', handleTrackEnded);\n return () => {\n track.removeEventListener('ended', handleTrackEnded);\n republishDefaultDevice.unsubscribe();\n };\n }, [videoDeviceId, call, participant?.videoStream, isPublishingVideo]);\n\n return publishVideoStream;\n};\n\nconst toFacingMode = (value: VideoSettingsCameraFacingEnum | undefined) => {\n switch (value) {\n case VideoSettingsCameraFacingEnum.FRONT:\n return 'user';\n case VideoSettingsCameraFacingEnum.BACK:\n return 'environment';\n default:\n return undefined;\n }\n};\n","import { useEffect } from 'react';\nimport { DynascaleManager, VideoTrackType } from '@stream-io/video-client';\nimport { useCall } from '@stream-io/video-react-bindings';\n\nexport const useTrackElementVisibility = <T extends HTMLElement>({\n trackedElement,\n dynascaleManager: propsDynascaleManager,\n sessionId,\n trackType,\n}: {\n trackedElement: T | null;\n sessionId: string;\n dynascaleManager?: DynascaleManager;\n trackType: VideoTrackType | 'none';\n}) => {\n const call = useCall();\n const manager = propsDynascaleManager ?? call?.dynascaleManager;\n useEffect(() => {\n if (!trackedElement || !manager || !call || trackType === 'none') return;\n const unobserve = manager.trackElementVisibility(\n trackedElement,\n sessionId,\n trackType,\n );\n return () => {\n unobserve();\n };\n }, [trackedElement, manager, call, sessionId, trackType]);\n};\n","import { ComponentProps, CSSProperties, useState } from 'react';\nimport clsx from 'clsx';\n\nexport type AvatarData = {\n imageSrc?: string;\n name?: string;\n style?: CSSProperties & Record<string, string | number>;\n};\n\nexport type AvatarProps = AvatarData & ComponentProps<'img'>;\n\nexport const Avatar = ({\n imageSrc,\n name,\n style,\n className,\n ...rest\n}: AvatarProps) => {\n const [error, setError] = useState(false);\n\n return (\n <>\n {(!imageSrc || error) && name && (\n <AvatarFallback className={className} style={style} names={[name]} />\n )}\n {imageSrc && !error && (\n <img\n onError={() => setError(true)}\n alt=\"avatar\"\n className={clsx('str-video__avatar', className)}\n src={imageSrc}\n style={style}\n {...rest}\n />\n )}\n </>\n );\n};\n\ntype AvatarFallbackProps = {\n names: string[];\n className?: string;\n style?: CSSProperties & Record<string, string | number>;\n};\nexport const AvatarFallback = ({\n className,\n names,\n style,\n}: AvatarFallbackProps) => {\n return (\n <div\n className={clsx('str-video__avatar--initials-fallback', className)}\n style={style}\n >\n <div>\n {names[0][0]}\n {names[1]?.[0]}\n </div>\n </div>\n );\n};\n","import { useEffect } from 'react';\nimport {\n offset,\n autoUpdate,\n size,\n useFloating,\n shift,\n flip,\n} from '@floating-ui/react';\nimport type { UseFloatingProps } from '@floating-ui/react';\n\nexport const useFloatingUIPreset = ({\n placement,\n strategy,\n}: Pick<UseFloatingProps, 'placement' | 'strategy'>) => {\n const {\n refs,\n x,\n y,\n update,\n elements: { domReference, floating },\n } = useFloating({\n placement,\n strategy,\n middleware: [\n offset(10),\n shift(),\n flip(),\n size({\n padding: 10,\n apply: ({ availableHeight, elements }) => {\n Object.assign(elements.floating.style, {\n maxHeight: `${availableHeight}px`,\n });\n },\n }),\n ],\n });\n\n // handle window resizing\n useEffect(() => {\n if (!domReference || !floating) return;\n\n const cleanup = autoUpdate(domReference, floating, update);\n\n return () => cleanup();\n }, [domReference, floating, update]);\n\n return { refs, x, y, domReference, floating, strategy };\n};\n","import { useEffect, useState } from 'react';\n\nconst SCROLL_THRESHOLD = 10;\n\n/**\n * Hook which observes element's scroll position and returns text value based on the\n * position of the scrollbar (`top`, `bottom`, `between` and `null` if no scrollbar is available)\n */\nexport const useVerticalScrollPosition = (\n scrollElement: HTMLElement | null,\n threshold: number = SCROLL_THRESHOLD,\n) => {\n const [scrollPosition, setScrollPosition] = useState<\n 'top' | 'bottom' | 'between' | null\n >(null);\n\n useEffect(() => {\n if (!scrollElement) return;\n\n const scrollHandler = () => {\n const element = scrollElement;\n\n const hasVerticalScrollbar = element.scrollHeight > element.clientHeight;\n\n if (!hasVerticalScrollbar) return setScrollPosition(null);\n\n const isAtTheTop = element.scrollTop <= threshold;\n if (isAtTheTop) return setScrollPosition('top');\n\n const isAtTheBottom =\n Math.abs(\n element.scrollHeight - element.scrollTop - element.clientHeight,\n ) <= threshold;\n\n if (isAtTheBottom) return setScrollPosition('bottom');\n\n setScrollPosition('between');\n };\n\n const resizeObserver = new ResizeObserver(scrollHandler);\n resizeObserver.observe(scrollElement);\n\n scrollElement.addEventListener('scroll', scrollHandler);\n return () => {\n scrollElement.removeEventListener('scroll', scrollHandler);\n resizeObserver.disconnect();\n };\n }, [scrollElement, threshold]);\n\n return scrollPosition;\n};\n\nexport const useHorizontalScrollPosition = (\n scrollElement: HTMLElement | null,\n threshold: number = SCROLL_THRESHOLD,\n) => {\n const [scrollPosition, setScrollPosition] = useState<\n 'start' | 'end' | 'between' | null\n >(null);\n\n useEffect(() => {\n if (!scrollElement) return;\n\n const scrollHandler = () => {\n const element = scrollElement;\n\n const hasHorizontalScrollbar = element.scrollWidth > element.clientWidth;\n\n if (!hasHorizontalScrollbar) return setScrollPosition(null);\n\n const isAtTheStart = element.scrollLeft <= threshold;\n if (isAtTheStart) return setScrollPosition('start');\n\n const isAtTheEnd =\n Math.abs(\n element.scrollWidth - element.scrollLeft - element.clientWidth,\n ) <= threshold;\n\n if (isAtTheEnd) return setScrollPosition('end');\n\n setScrollPosition('between');\n };\n\n const resizeObserver = new ResizeObserver(scrollHandler);\n resizeObserver.observe(scrollElement);\n\n scrollElement.addEventListener('scroll', scrollHandler);\n return () => {\n scrollElement.removeEventListener('scroll', scrollHandler);\n resizeObserver.disconnect();\n };\n }, [scrollElement, threshold]);\n\n return scrollPosition;\n};\n","import { useCallback, useEffect, useState } from 'react';\nimport { OwnCapability } from '@stream-io/video-client';\nimport { useCall, useHasPermissions } from '@stream-io/video-react-bindings';\n\nexport const useRequestPermission = (permission: OwnCapability) => {\n const call = useCall();\n const hasPermission = useHasPermissions(permission);\n const [isAwaitingPermission, setIsAwaitingPermission] = useState(false); // TODO: load with possibly pending state\n\n useEffect(() => {\n const reset = () => setIsAwaitingPermission(false);\n\n if (hasPermission) reset();\n }, [hasPermission]);\n\n const requestPermission = useCallback(async () => {\n if (hasPermission) return true;\n\n const canRequestPermission =\n !!call?.permissionsContext.canRequest(permission);\n if (isAwaitingPermission || !canRequestPermission) return false;\n\n setIsAwaitingPermission(true);\n\n try {\n await call?.requestPermissions({\n permissions: [permission],\n });\n } catch (error) {\n setIsAwaitingPermission(false);\n throw new Error(`requestPermission failed: ${error}`);\n }\n\n return false;\n }, [call, hasPermission, isAwaitingPermission, permission]);\n\n return {\n requestPermission,\n hasPermission,\n canRequestPermission: !!call?.permissionsContext.canRequest(permission),\n isAwaitingPermission,\n };\n};\n","import { useCallback, useRef } from 'react';\nimport { useCallStateHooks } from '@stream-io/video-react-bindings';\nimport { OwnCapability, SfuModels } from '@stream-io/video-client';\n\nimport { useMediaDevices } from '../core';\nimport { useRequestPermission } from './useRequestPermission';\n\nexport const useToggleAudioMuteState = () => {\n const { publishAudioStream, stopPublishingAudio } = useMediaDevices();\n const { useLocalParticipant } = useCallStateHooks();\n const localParticipant = useLocalParticipant();\n\n const { isAwaitingPermission, requestPermission } = useRequestPermission(\n OwnCapability.SEND_AUDIO,\n );\n\n // to keep the toggle function as stable as possible\n const isAudioMutedReference = useRef(false);\n\n isAudioMutedReference.current = !localParticipant?.publishedTracks.includes(\n SfuModels.TrackType.AUDIO,\n );\n\n const toggleAudioMuteState = useCallback(async () => {\n if (isAudioMutedReference.current) {\n const canPublish = await requestPermission();\n if (canPublish) return publishAudioStream();\n }\n\n if (!isAudioMutedReference.current) await stopPublishingAudio();\n }, [publishAudioStream, requestPermission, stopPublishingAudio]);\n\n return { toggleAudioMuteState, isAwaitingPermission };\n};\n","import { useCallback, useRef } from 'react';\nimport { useCallStateHooks } from '@stream-io/video-react-bindings';\nimport { OwnCapability, SfuModels } from '@stream-io/video-client';\n\nimport { useMediaDevices } from '../core';\nimport { useRequestPermission } from './useRequestPermission';\n\nexport const useToggleVideoMuteState = () => {\n const { publishVideoStream, stopPublishingVideo } = useMediaDevices();\n const { useLocalParticipant } = useCallStateHooks();\n const localParticipant = useLocalParticipant();\n\n const { isAwaitingPermission, requestPermission } = useRequestPermission(\n OwnCapability.SEND_VIDEO,\n );\n\n // to keep the toggle function as stable as possible\n const isVideoMutedReference = useRef(false);\n\n isVideoMutedReference.current = !localParticipant?.publishedTracks.includes(\n SfuModels.TrackType.VIDEO,\n );\n\n const toggleVideoMuteState = useCallback(async () => {\n if (isVideoMutedReference.current) {\n const canPublish = await requestPermission();\n if (canPublish) return publishVideoStream();\n }\n\n if (!isVideoMutedReference.current) await stopPublishingVideo();\n }, [publishVideoStream, requestPermission, stopPublishingVideo]);\n\n return { toggleVideoMuteState, isAwaitingPermission };\n};\n","import { useCallback, useRef } from 'react';\nimport { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';\nimport {\n getScreenShareStream,\n OwnCapability,\n SfuModels,\n} from '@stream-io/video-client';\nimport { useRequestPermission } from './useRequestPermission';\n\nexport const useToggleScreenShare = () => {\n const { useLocalParticipant } = useCallStateHooks();\n const localParticipant = useLocalParticipant();\n const call = useCall();\n const isScreenSharingReference = useRef(false);\n const { isAwaitingPermission, requestPermission } = useRequestPermission(\n OwnCapability.SCREENSHARE,\n );\n\n const isScreenSharing = !!localParticipant?.publishedTracks.includes(\n SfuModels.TrackType.SCREEN_SHARE,\n );\n\n isScreenSharingReference.current = isScreenSharing;\n\n const toggleScreenShare = useCallback(async () => {\n if (!isScreenSharingReference.current) {\n const canPublish = await requestPermission();\n if (!canPublish) return;\n\n const stream = await getScreenShareStream().catch((e) => {\n console.log(`Can't share screen: ${e}`);\n });\n\n if (stream) {\n return call?.publishScreenShareStream(stream);\n }\n }\n\n await call?.stopPublish(SfuModels.TrackType.SCREEN_SHARE);\n }, [call, requestPermission]);\n\n return { toggleScreenShare, isAwaitingPermission, isScreenSharing };\n};\n","import { useCallback, useEffect, useState } from 'react';\nimport { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';\n\nexport const useToggleCallRecording = () => {\n const call = useCall();\n const { useIsCallRecordingInProgress } = useCallStateHooks();\n const isCallRecordingInProgress = useIsCallRecordingInProgress();\n const [isAwaitingResponse, setIsAwaitingResponse] = useState(false);\n\n // TODO: add permissions\n\n useEffect(() => {\n // we wait until call.recording_started/stopped event to flips the\n // `isCallRecordingInProgress` state variable.\n // Once the flip happens, we remove the loading indicator\n setIsAwaitingResponse((isAwaiting) => {\n if (isAwaiting) return false;\n return isAwaiting;\n });\n }, [isCallRecordingInProgress]);\n\n const toggleCallRecording = useCallback(async () => {\n try {\n setIsAwaitingResponse(true);\n if (isCallRecordingInProgress) {\n await call?.stopRecording();\n } else {\n await call?.startRecording();\n }\n } catch (e) {\n console.error(`Failed start recording`, e);\n }\n }, [call, isCallRecordingInProgress]);\n\n return { toggleCallRecording, isAwaitingResponse, isCallRecordingInProgress };\n};\n","import {\n ComponentType,\n PropsWithChildren,\n useEffect,\n useState,\n ForwardedRef,\n} from 'react';\nimport { Placement, Strategy } from '@floating-ui/react';\n\nimport { useFloatingUIPreset } from '../../hooks';\n\nexport type ToggleMenuButtonProps<E extends HTMLElement = HTMLButtonElement> = {\n menuShown: boolean;\n ref: ForwardedRef<E>;\n};\n\nexport type MenuToggleProps<E extends HTMLElement> = PropsWithChildren<{\n ToggleButton: ComponentType<ToggleMenuButtonProps<E>>;\n placement?: Placement;\n strategy?: Strategy;\n}>;\n\nexport const MenuToggle = <E extends HTMLElement>({\n ToggleButton,\n placement = 'top-start',\n strategy = 'absolute',\n children,\n}: MenuToggleProps<E>) => {\n const [menuShown, setMenuShown] = useState(false);\n\n const { floating, domReference, refs, x, y } = useFloatingUIPreset({\n placement,\n strategy,\n });\n\n useEffect(() => {\n const handleClick = (event: MouseEvent) => {\n if (!floating && domReference?.contains(event.target as Node)) {\n setMenuShown(true);\n } else if (floating && !floating?.contains(event.target as Node)) {\n setMenuShown(false);\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key.toLowerCase() === 'escape' &&\n !event.altKey &&\n !event.ctrlKey\n ) {\n setMenuShown(false);\n }\n };\n document?.addEventListener('click', handleClick, { capture: true });\n document?.addEventListener('keydown', handleKeyDown);\n return () => {\n document?.removeEventListener('click', handleClick, { capture: true });\n document?.removeEventListener('keydown', handleKeyDown);\n };\n }, [floating, domReference]);\n\n return (\n <>\n {menuShown && (\n <div\n className=\"str-video__menu-container\"\n ref={refs.setFloating}\n style={{\n position: strategy,\n top: y ?? 0,\n left: x ?? 0,\n overflowY: 'auto',\n }}\n >\n {children}\n </div>\n )}\n <ToggleButton menuShown={menuShown} ref={refs.setReference} />\n </>\n );\n};\n","import { ComponentProps, PropsWithChildren } from 'react';\n\nexport const GenericMenu = ({ children }: PropsWithChildren) => {\n return <ul className=\"str-video__generic-menu\">{children}</ul>;\n};\n\nexport const GenericMenuButtonItem = ({\n children,\n ...rest\n}: Omit<ComponentProps<'button'>, 'ref'>) => {\n return (\n <li className=\"str-video__generic-menu--item\">\n <button {...rest}>{children}</button>\n </li>\n );\n};\n","import { clsx } from 'clsx';\n\nexport type IconProps = {\n icon: string;\n};\n\nexport const Icon = ({ icon }: IconProps) => (\n <span\n className={clsx('str-video__icon', icon && `str-video__icon--${icon}`)}\n />\n);\n","import { ComponentProps, ForwardedRef, forwardRef } from 'react';\nimport clsx from 'clsx';\n\nimport { Icon, IconProps } from '../Icon';\n\nexport type ButtonWithIconProps = {\n enabled?: boolean;\n variant?: string;\n} & ComponentProps<'button'> &\n IconProps;\n\nexport const IconButton = forwardRef(\n (props: ButtonWithIconProps, ref: ForwardedRef<HTMLButtonElement>) => {\n const { icon, enabled, variant, onClick, className, ...rest } = props;\n return (\n <button\n className={clsx('str-video__call-controls__button', className, {\n [`str-video__call-controls__button--variant-${variant}`]: variant,\n 'str-video__call-controls__button--enabled': enabled,\n })}\n onClick={(e) => {\n e.preventDefault();\n onClick?.(e);\n }}\n ref={ref}\n {...rest}\n >\n <Icon icon={icon} />\n </button>\n );\n },\n);\n","import clsx from 'clsx';\nimport { MenuToggle, ToggleMenuButtonProps } from '../Menu';\nimport { ComponentType, forwardRef, PropsWithChildren } from 'react';\nimport { Placement } from '@floating-ui/react';\n\nimport { IconButton } from './IconButton';\nimport { isComponentType } from '../../utilities';\n\nexport type IconButtonWithMenuProps = PropsWithChildren<{\n active?: boolean;\n Menu?: ComponentType | JSX.Element;\n caption?: string;\n menuPlacement?: Placement;\n}>;\n\nexport const CompositeButton = forwardRef<\n HTMLDivElement,\n IconButtonWithMenuProps\n>(({ caption, children, active, Menu, menuPlacement }, ref) => {\n return (\n <div className=\"str-video__composite-button\" ref={ref}>\n <div\n className={clsx('str-video__composite-button__button-group', {\n 'str-video__composite-button__button-group--active': active,\n })}\n >\n {children}\n {Menu && (\n <MenuToggle placement={menuPlacement} ToggleButton={ToggleMenuButton}>\n {isComponentType(Menu) ? <Menu /> : Menu}\n </MenuToggle>\n )}\n </div>\n {caption && (\n <div className=\"str-video__composite-button__caption\">{caption}</div>\n )}\n </div>\n );\n});\n\nconst ToggleMenuButton = forwardRef<HTMLButtonElement, ToggleMenuButtonProps>(\n ({ menuShown }, ref) => (\n <IconButton\n className={'str-video__menu-toggle-button'}\n icon={menuShown ? 'caret-down' : 'caret-up'}\n title=\"Toggle device menu\"\n ref={ref}\n />\n ),\n);\n","import { PropsWithChildren, useEffect } from 'react';\nimport clsx from 'clsx';\nimport { useFloatingUIPreset } from '../../hooks';\nimport { Placement } from '@floating-ui/react';\n\nexport type TooltipProps<T extends HTMLElement> = PropsWithChildren<{\n /** Reference element to which the tooltip should attach to */\n referenceElement: T | null;\n /** Additional class applied to the tooltip root element */\n tooltipClassName?: string;\n /** Popper's modifier (offset) property - [xAxis offset, yAxis offset], default [0, 10] */\n offset?: [number, number];\n /** Popper's placement property defining default position of the tooltip, default 'top' */\n tooltipPlacement?: Placement;\n /** Tells component whether to render its contents */\n visible?: boolean;\n}>;\n\nexport const Tooltip = <T extends HTMLElement>({\n children,\n referenceElement,\n tooltipClassName,\n tooltipPlacement = 'top',\n visible = false,\n}: TooltipProps<T>) => {\n const { refs, x, y, strategy } = useFloatingUIPreset({\n placement: tooltipPlacement,\n strategy: 'absolute',\n });\n\n useEffect(() => {\n refs.setReference(referenceElement);\n }, [referenceElement, refs]);\n\n if (!visible) return null;\n\n return (\n <div\n className={clsx('str-video__tooltip', tooltipClassName)}\n ref={refs.setFloating}\n style={{\n position: strategy,\n top: y ?? 0,\n left: x ?? 0,\n overflowY: 'auto',\n }}\n >\n {children}\n </div>\n );\n};\n","import { MouseEventHandler, useCallback, useState } from 'react';\n\nexport const useEnterLeaveHandlers = <T extends HTMLElement>({\n onMouseEnter,\n onMouseLeave,\n}: Partial<\n Record<'onMouseEnter' | 'onMouseLeave', MouseEventHandler<T>>\n> = {}) => {\n const [tooltipVisible, setTooltipVisible] = useState(false);\n\n const handleMouseEnter: MouseEventHandler<T> = useCallback(\n (e) => {\n setTooltipVisible(true);\n onMouseEnter?.(e);\n },\n [onMouseEnter],\n );\n\n const handleMouseLeave: MouseEventHandler<T> = useCallback(\n (e) => {\n setTooltipVisible(false);\n onMouseLeave?.(e);\n },\n [onMouseLeave],\n );\n\n return { handleMouseEnter, handleMouseLeave, tooltipVisible };\n};\n","import { ComponentProps, useState } from 'react';\nimport { Tooltip, TooltipProps } from './Tooltip';\nimport { useEnterLeaveHandlers } from './hooks';\n\ntype WithPopupProps = ComponentProps<'div'> &\n Omit<TooltipProps<HTMLDivElement>, 'referenceElement'>;\n\n// todo: duplicate of CallParticipantList.tsx#MediaIndicator - refactor to a single component\nexport const WithTooltip = ({\n title,\n tooltipClassName,\n tooltipPlacement,\n ...props\n}: WithPopupProps) => {\n const { handleMouseEnter, handleMouseLeave, tooltipVisible } =\n useEnterLeaveHandlers<HTMLDivElement>();\n const [tooltipAnchor, setTooltipAnchor] = useState<HTMLDivElement | null>(\n null,\n );\n\n return (\n <>\n <Tooltip\n referenceElement={tooltipAnchor}\n visible={tooltipVisible}\n tooltipClassName={tooltipClassName}\n tooltipPlacement={tooltipPlacement}\n >\n {title || ''}\n </Tooltip>\n <div\n ref={setTooltipAnchor}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...props}\n />\n </>\n );\n};\n","import {\n ComponentProps,\n ComponentPropsWithRef,\n ComponentType,\n ForwardedRef,\n forwardRef,\n MouseEventHandler,\n useCallback,\n useState,\n} from 'react';\nimport clsx from 'clsx';\nimport { Placement } from '@floating-ui/react';\n\nimport { Tooltip } from '../Tooltip';\n\ntype CopyToClipboardButtonProps = ComponentProps<'button'> & {\n /** Custom button component implementation. Will be rendered instead of native button element */\n Button?: ComponentType<\n ComponentPropsWithRef<'button'> & { ref: ForwardedRef<HTMLButtonElement> }\n >;\n /** Custom function to override the logic of generating the call invitation link */\n copyValue: (() => string) | string;\n /** Callback invoked if the copy-to-clipboard action fails */\n onError?: (button: HTMLButtonElement, e: Error) => void;\n /** Callback invoked if the copy-to-clipboard action succeeds */\n onSuccess?: (button: HTMLButtonElement) => void;\n};\n\nexport const CopyToClipboardButton = forwardRef<\n HTMLButtonElement,\n CopyToClipboardButtonProps\n>(\n (\n { Button, className, copyValue, onClick, onError, onSuccess, ...restProps },\n ref,\n ) => {\n const handleClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n async (event) => {\n if (onClick) onClick(event);\n const value = typeof copyValue === 'function' ? copyValue() : copyValue;\n try {\n await navigator?.clipboard.writeText(value);\n onSuccess?.(event.target as HTMLButtonElement);\n } catch (error) {\n onError?.(event.target as HTMLButtonElement, error as Error);\n }\n },\n [copyValue, onClick, onError, onSuccess],\n );\n\n const props = {\n ...restProps,\n ref: ref,\n className: clsx('str-video__copy-to-clipboard-button', className),\n onClick: handleClick,\n };\n\n return Button ? <Button {...props} /> : <button {...props} />;\n },\n);\n\ntype CopyToClipboardButtonWithPopupProps = Exclude<\n CopyToClipboardButtonProps,\n 'onError' | 'onSuccess'\n> & {\n dismissAfterMs?: number;\n /** String displayed when copy-to-clipboard action fails */\n onErrorMessage?: string;\n /** String displayed when copy-to-clipboard succeeds fails */\n onSuccessMessage?: string;\n /** Class applied to the popup container element */\n popupClassName?: string;\n // todo: We should replace Placement for internal type\n popupPlacement?: Placement;\n};\n\nexport const CopyToClipboardButtonWithPopup = ({\n dismissAfterMs = 1500,\n onErrorMessage = 'Failed to copy',\n onSuccessMessage = 'Copied to clipboard',\n popupClassName,\n popupPlacement,\n ...restProps\n}: CopyToClipboardButtonWithPopupProps) => {\n const [tooltipText, setTooltipText] = useState('');\n const [tooltipAnchor, setTooltipAnchor] = useState<HTMLButtonElement | null>(\n null,\n );\n\n const setTemporaryPopup = useCallback(\n (popupText: string) => {\n setTooltipText(popupText);\n setTimeout(() => setTooltipText(''), dismissAfterMs);\n },\n [dismissAfterMs],\n );\n\n const onSuccess = useCallback(\n () => setTemporaryPopup(onSuccessMessage),\n [onSuccessMessage, setTemporaryPopup],\n );\n\n const onError = useCallback(\n () => setTemporaryPopup(onErrorMessage),\n [onErrorMessage, setTemporaryPopup],\n );\n\n return (\n <>\n <Tooltip\n tooltipClassName={clsx(\n 'str-video__copy-to-clipboard-button__popup',\n popupClassName,\n )}\n tooltipPlacement={popupPlacement}\n referenceElement={tooltipAnchor}\n visible={!!tooltipText}\n >\n {tooltipText}\n </Tooltip>\n <CopyToClipboardButton\n {...restProps}\n onError={onError}\n onSuccess={onSuccess}\n ref={setTooltipAnchor}\n />\n </>\n );\n};\n","import { ComponentProps } from 'react';\n\nexport const TextButton = ({\n children,\n ...rest\n}: Omit<ComponentProps<'button'>, 'ref' | 'className'>) => {\n return (\n <button {...rest} className=\"str-video__text-button\">\n {children}\n </button>\n );\n};\n","import { MouseEventHandler, useCallback } from 'react';\nimport { IconButton } from '../Button';\nimport { useCall } from '@stream-io/video-react-bindings';\n\nexport type AcceptCallButtonProps = {\n disabled?: boolean;\n onClick?: MouseEventHandler<HTMLButtonElement>;\n onAccept?: () => void;\n};\n\nexport const AcceptCallButton = ({\n disabled,\n onAccept,\n onClick,\n}: AcceptCallButtonProps) => {\n const call = useCall();\n const handleClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n async (e) => {\n if (onClick) {\n onClick(e);\n } else if (call) {\n await call.join();\n onAccept?.();\n }\n },\n [onClick, onAccept, call],\n );\n return (\n <IconButton\n disabled={disabled}\n icon=\"call-accept\"\n variant=\"success\"\n onClick={handleClick}\n />\n );\n};\n","import { PropsWithChildren, ReactNode, useEffect } from 'react';\nimport { Placement } from '@floating-ui/react';\n\nimport { useFloatingUIPreset } from '../../hooks';\n\nexport type NotificationProps = {\n message?: ReactNode;\n isVisible?: boolean;\n visibilityTimeout?: number;\n resetIsVisible?: () => void;\n placement?: Placement;\n iconClassName?: string | null;\n};\n\nexport const Notification = (props: PropsWithChildren<NotificationProps>) => {\n const {\n isVisible,\n message,\n children,\n visibilityTimeout,\n resetIsVisible,\n placement = 'top',\n iconClassName = 'str-video__notification__icon',\n } = props;\n\n const { refs, x, y, strategy } = useFloatingUIPreset({\n placement,\n strategy: 'absolute',\n });\n\n useEffect(() => {\n if (!isVisible || !visibilityTimeout || !resetIsVisible) return;\n\n const timeout = setTimeout(() => {\n resetIsVisible();\n }, visibilityTimeout);\n\n return () => clearTimeout(timeout);\n }, [isVisible, resetIsVisible, visibilityTimeout]);\n\n return (\n <div ref={refs.setReference}>\n {isVisible && (\n <div\n className=\"str-video__notification\"\n ref={refs.setFloating}\n style={{\n position: strategy,\n top: y ?? 0,\n left: x ?? 0,\n overflowY: 'auto',\n }}\n >\n {iconClassName && <i className={iconClassName} />}\n <span className=\"str-video__notification__message\">{message}</span>\n </div>\n )}\n {children}\n </div>\n );\n};\n","import { Notification } from './Notification';\nimport { OwnCapability } from '@stream-io/video-client';\nimport {\n PropsWithChildren,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { useHasPermissions } from '@stream-io/video-react-bindings';\n\nexport type PermissionNotificationProps = PropsWithChildren<{\n /**\n * Set this to true if there is ongoing request for the permission.\n */\n isAwaitingApproval: boolean;\n\n /**\n * The message to display in the notification once\n * the requested permission is granted.\n */\n messageApproved: string;\n\n /**\n * The message to display in the notification once a permission\n * is revoked.\n */\n messageRevoked: string;\n\n /**\n * The message to display in the notification while\n * the requested permission is awaiting approval.\n */\n messageAwaitingApproval: string;\n\n /**\n * The permission to check for.\n */\n permission: OwnCapability;\n\n /**\n * The time in milliseconds to display the notification.\n * Defaults to 3500ms.\n */\n visibilityTimeout?: number;\n}>;\n\nexport const PermissionNotification = (props: PermissionNotificationProps) => {\n const {\n permission,\n isAwaitingApproval,\n messageApproved,\n messageAwaitingApproval,\n messageRevoked,\n visibilityTimeout = 3500,\n children,\n } = props;\n const hasPermission = useHasPermissions(permission);\n const prevHasPermission = useRef(hasPermission);\n const [showNotification, setShowNotification] = useState<\n 'granted' | 'revoked'\n >();\n useEffect(() => {\n if (hasPermission && !prevHasPermission.current) {\n setShowNotification('granted');\n prevHasPermission.current = true;\n } else if (!hasPermission && prevHasPermission.current) {\n setShowNotification('revoked');\n prevHasPermission.current = false;\n }\n }, [hasPermission]);\n\n const resetIsVisible = useCallback(() => setShowNotification(undefined), []);\n if (isAwaitingApproval) {\n return (\n <Notification\n isVisible={isAwaitingApproval && !hasPermission}\n message={messageAwaitingApproval}\n >\n {children}\n </Notification>\n );\n }\n\n return (\n <Notification\n isVisible={!!showNotification}\n visibilityTimeout={visibilityTimeout}\n resetIsVisible={resetIsVisible}\n message={\n showNotification === 'granted' ? messageApproved : messageRevoked\n }\n >\n {children}\n </Notification>\n );\n};\n","import { PropsWithChildren, useEffect, useState } from 'react';\nimport { createSoundDetector, SfuModels } from '@stream-io/video-client';\nimport { useCallStateHooks, useI18n } from '@stream-io/video-react-bindings';\n\nimport { useMediaDevices } from '../../core';\nimport { Notification } from './Notification';\n\nexport type SpeakingWhileMutedNotificationProps = {\n /*\n Text message displayed by the notification.\n */\n text?: string;\n};\n\nexport const SpeakingWhileMutedNotification = ({\n children,\n text,\n}: PropsWithChildren<SpeakingWhileMutedNotificationProps>) => {\n const { useLocalParticipant } = useCallStateHooks();\n const localParticipant = useLocalParticipant();\n const { getAudioStream } = useMediaDevices();\n const { t } = useI18n();\n\n const message = text ?? t('You are muted. Unmute to speak.');\n const isAudioMute = !localParticipant?.publishedTracks.includes(\n SfuModels.TrackType.AUDIO,\n );\n const audioDeviceId = localParticipant?.audioDeviceId;\n const [isSpeakingWhileMuted, setIsSpeakingWhileMuted] = useState(false);\n useEffect(() => {\n // do nothing when not muted\n if (!isAudioMute) return;\n const disposeSoundDetector = getAudioStream({\n deviceId: audioDeviceId,\n }).then((audioStream) =>\n createSoundDetector(audioStream, ({ isSoundDetected }) => {\n setIsSpeakingWhileMuted((isNotified) =>\n isNotified ? isNotified : isSoundDetected,\n );\n }),\n );\n disposeSoundDetector.catch((err) => {\n console.error('Error while creating sound detector', err);\n });\n return () => {\n disposeSoundDetector\n .then((dispose) => dispose())\n .catch((err) => {\n console.error('Error while disposing sound detector', err);\n });\n setIsSpeakingWhileMuted(false);\n };\n }, [audioDeviceId, getAudioStream, isAudioMute]);\n\n useEffect(() => {\n if (!isSpeakingWhileMuted) return;\n const timeout = setTimeout(() => {\n setIsSpeakingWhileMuted(false);\n }, 3500);\n return () => {\n clearTimeout(timeout);\n setIsSpeakingWhileMuted(false);\n };\n }, [isSpeakingWhileMuted]);\n return (\n <Notification message={message} isVisible={isSpeakingWhileMuted}>\n {children}\n </Notification>\n );\n};\n","import {\n CallStatsButton,\n CancelCallButton,\n RecordCallButton,\n ScreenShareButton,\n ToggleAudioPublishingButton,\n ToggleVideoPublishingButton,\n} from './index';\nimport { SpeakingWhileMutedNotification } from '../Notification';\n\nexport type CallControlsProps = {\n onLeave?: () => void;\n};\n\nexport const CallControls = ({ onLeave }: CallControlsProps) => (\n <div className=\"str-video__call-controls\">\n <RecordCallButton />\n <CallStatsButton />\n <ScreenShareButton />\n <SpeakingWhileMutedNotification>\n <ToggleAudioPublishingButton />\n </SpeakingWhileMutedNotification>\n <ToggleVideoPublishingButton />\n <CancelCallButton onLeave={onLeave} />\n </div>\n);\n","import { ResponsiveLine } from '@nivo/line';\n\nexport const CallStatsLatencyChart = (props: {\n values: Array<{ x: number; y: number }>;\n}) => {\n const { values } = props;\n let max = 0;\n const data = values.map((point) => {\n const { y } = point;\n max = Math.max(max, y);\n return point;\n });\n return (\n <div className=\"str-video__call-stats-line-chart-container\">\n <ResponsiveLine\n colors={{ scheme: 'blues' }}\n data={[\n {\n id: 'Latency',\n data: data,\n },\n ]}\n animate={false}\n margin={{ top: 10, right: 5, bottom: 5, left: 30 }}\n enablePoints\n enableGridX={false}\n enableGridY\n enableSlices=\"x\"\n isInteractive\n useMesh={false}\n xScale={{ type: 'point' }}\n yScale={{\n type: 'linear',\n min: 0,\n max: max < 220 ? 220 : max + 30,\n nice: true,\n }}\n theme={{\n axis: {\n ticks: {\n text: {\n fill: '#FCFCFD',\n },\n line: {\n stroke: '#FCFCFD',\n },\n },\n },\n grid: {\n line: {\n strokeWidth: 0.1,\n },\n },\n }}\n />\n </div>\n );\n};\n","import { useEffect, useRef, useState } from 'react';\nimport {\n AggregatedStatsReport,\n CallStatsReport,\n} from '@stream-io/video-client';\nimport { useCallStateHooks } from '@stream-io/video-react-bindings';\nimport { CallStatsLatencyChart } from './CallStatsLatencyChart';\n\nexport const CallStats = () => {\n const [latencyBuffer, setLatencyBuffer] = useState<\n Array<{ x: number; y: number }>\n >(() => {\n const now = Date.now();\n return Array.from({ length: 20 }, (_, i) => ({ x: now + i, y: 0 }));\n });\n\n const [publishBitrate, setPublishBitrate] = useState('-');\n const [subscribeBitrate, setSubscribeBitrate] = useState('-');\n const previousStats = useRef<CallStatsReport>();\n const { useCallStatsReport } = useCallStateHooks();\n const callStatsReport = useCallStatsReport();\n\n useEffect(() => {\n if (!callStatsReport) return;\n if (!previousStats.current) {\n previousStats.current = callStatsReport;\n return;\n }\n const previousCallStatsReport = previousStats.current;\n setPublishBitrate(() => {\n return calculatePublishBitrate(previousCallStatsReport, callStatsReport);\n });\n setSubscribeBitrate(() => {\n return calculateSubscribeBitrate(\n previousCallStatsReport,\n callStatsReport,\n );\n });\n\n setLatencyBuffer((latencyBuf) => {\n const newLatencyBuffer = latencyBuf.slice(-19);\n newLatencyBuffer.push({\n x: callStatsReport.timestamp,\n y: callStatsReport.publisherStats.averageRoundTripTimeInMs,\n });\n return newLatencyBuffer;\n });\n\n previousStats.current = callStatsReport;\n }, [callStatsReport]);\n\n return (\n <div className=\"str-video__call-stats\">\n {callStatsReport && (\n <>\n <h3>Call Latency</h3>\n <CallStatsLatencyChart values={latencyBuffer} />\n\n <h3>Call performance</h3>\n <div className=\"str-video__call-stats__card-container\">\n <StatCard label=\"Region\" value={callStatsReport.datacenter} />\n <StatCard\n label=\"Latency\"\n value={`${callStatsReport.publisherStats.averageRoundTripTimeInMs} ms.`}\n />\n <StatCard\n label=\"Receive jitter\"\n value={`${callStatsReport.subscriberStats.averageJitterInMs} ms.`}\n />\n <StatCard\n label=\"Publish jitter\"\n value={`${callStatsReport.publisherStats.averageJitterInMs} ms.`}\n />\n <StatCard\n label=\"Publish resolution\"\n value={toFrameSize(callStatsReport.publisherStats)}\n />\n <StatCard\n label=\"Publish quality drop reason\"\n value={callStatsReport.publisherStats.qualityLimitationReasons}\n />\n <StatCard\n label=\"Receiving resolution\"\n value={toFrameSize(callStatsReport.subscriberStats)}\n />\n <StatCard\n label=\"Receive quality drop reason\"\n value={callStatsReport.subscriberStats.qualityLimitationReasons}\n />\n <StatCard label=\"Publish bitrate\" value={publishBitrate} />\n <StatCard label=\"Receiving bitrate\" value={subscribeBitrate} />\n </div>\n </>\n )}\n </div>\n );\n};\n\nexport const StatCard = (props: { label: string; value: string }) => {\n const { label, value } = props;\n return (\n <div className=\"str-video__call-stats__card\">\n <div className=\"str-video__call-stats__card_label\">{label}</div>\n <div className=\"str-video__call-stats__card_value\">{value}</div>\n </div>\n );\n};\n\nconst toFrameSize = (stats: AggregatedStatsReport) => {\n const {\n highestFrameWidth: w,\n highestFrameHeight: h,\n highestFramesPerSecond: fps,\n } = stats;\n let size = `-`;\n if (w && h) {\n size = `${w}x${h}`;\n if (fps) {\n size += `@${fps}fps.`;\n }\n }\n return size;\n};\n\nconst calculatePublishBitrate = (\n previousCallStatsReport: CallStatsReport,\n callStatsReport: CallStatsReport,\n) => {\n const {\n publisherStats: {\n totalBytesSent: previousTotalBytesSent,\n timestamp: previousTimestamp,\n },\n } = previousCallStatsReport;\n\n const {\n publisherStats: { totalBytesSent, timestamp },\n } = callStatsReport;\n\n const bytesSent = totalBytesSent - previousTotalBytesSent;\n const timeElapsed = timestamp - previousTimestamp;\n return `${((bytesSent * 8) / timeElapsed).toFixed(2)} kbps`;\n};\n\nconst calculateSubscribeBitrate = (\n previousCallStatsReport: CallStatsReport,\n callStatsReport: CallStatsReport,\n) => {\n const {\n subscriberStats: {\n totalBytesReceived: previousTotalBytesReceived,\n timestamp: previousTimestamp,\n },\n } = previousCallStatsReport;\n\n const {\n subscriberStats: { totalBytesReceived, timestamp },\n } = callStatsReport;\n\n const bytesReceived = totalBytesReceived - previousTotalBytesReceived;\n const timeElapsed = timestamp - previousTimestamp;\n return `${((bytesReceived * 8) / timeElapsed).toFixed(2)} kbps`;\n};\n","import { forwardRef } from 'react';\n\nimport { CallStats } from '../CallStats';\nimport { CompositeButton, IconButton } from '../Button/';\nimport { MenuToggle, ToggleMenuButtonProps } from '../Menu';\n\nexport const CallStatsButton = () => (\n <MenuToggle placement=\"top-end\" ToggleButton={ToggleMenuButton}>\n <CallStats />\n </MenuToggle>\n);\n\nconst ToggleMenuButton = forwardRef<\n HTMLDivElement,\n ToggleMenuButtonProps<HTMLDivElement>\n>(({ menuShown }, ref) => (\n <CompositeButton ref={ref} active={menuShown} caption={'Stats'}>\n <IconButton icon=\"stats\" title=\"Statistics\" />\n </CompositeButton>\n));\n","import { MouseEventHandler, useCallback } from 'react';\nimport { IconButton } from '../Button/';\nimport { useCall } from '@stream-io/video-react-bindings';\n\nexport type CancelCallButtonProps = {\n disabled?: boolean;\n onClick?: MouseEventHandler<HTMLButtonElement>;\n onLeave?: () => void;\n};\n\nexport const CancelCallButton = ({\n disabled,\n onClick,\n onLeave,\n}: CancelCallButtonProps) => {\n const call = useCall();\n const handleClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n async (e) => {\n if (onClick) {\n onClick(e);\n } else if (call) {\n await call.leave();\n onLeave?.();\n }\n },\n [onClick, onLeave, call],\n );\n return (\n <IconButton\n disabled={disabled}\n icon=\"call-end\"\n variant=\"danger\"\n onClick={handleClick}\n />\n );\n};\n","import { useEffect } from 'react';\nimport { StreamVideoParticipant } from '@stream-io/video-client';\nimport { useCall } from '@stream-io/video-react-bindings';\n\nexport type ReactionProps = {\n participant: StreamVideoParticipant;\n hideAfterTimeoutInMs?: number;\n emojiReactionMap?: Record<string, string>;\n};\n\nexport const defaultEmojiReactionMap: Record<string, string> = {\n ':like:': '👍',\n ':raise-hand:': '✋',\n ':fireworks:': '🎉',\n ':dislike:': '👎',\n ':heart:': '❤️',\n ':smile:': '😀',\n};\n\nexport const Reaction = ({\n participant: { reaction, sessionId },\n hideAfterTimeoutInMs = 5500,\n emojiReactionMap = defaultEmojiReactionMap,\n}: ReactionProps) => {\n const call = useCall();\n\n useEffect(() => {\n if (!call || !reaction) return;\n\n const timeoutId = setTimeout(() => {\n call.resetReaction(sessionId);\n }, hideAfterTimeoutInMs);\n\n return () => {\n clearTimeout(timeoutId);\n };\n }, [call, hideAfterTimeoutInMs, reaction, sessionId]);\n\n if (!reaction) return null;\n\n const { emoji_code: emojiCode } = reaction;\n\n return (\n <div className=\"str-video__reaction\">\n <span className=\"str-video__reaction__emoji\">\n {emojiCode && emojiReactionMap[emojiCode]}\n </span>\n </div>\n );\n};\n","import { OwnCapability, StreamReaction } from '@stream-io/video-client';\nimport { Restricted, useCall, useI18n } from '@stream-io/video-react-bindings';\n\nimport { CompositeButton, IconButton } from '../Button';\nimport { defaultEmojiReactionMap } from '../Reaction';\n\nexport const defaultReactions: StreamReaction[] = [\n {\n type: 'reaction',\n emoji_code: ':like:',\n },\n {\n // TODO OL: use `prompt` type?\n type: 'raised-hand',\n emoji_code: ':raise-hand:',\n },\n {\n type: 'reaction',\n emoji_code: ':fireworks:',\n },\n {\n type: 'reaction',\n emoji_code: ':dislike:',\n },\n {\n type: 'reaction',\n emoji_code: ':heart:',\n },\n {\n type: 'reaction',\n emoji_code: ':smile:',\n },\n];\n\nexport interface ReactionsButtonProps {\n reactions?: StreamReaction[];\n}\n\nexport const ReactionsButton = ({\n reactions = defaultReactions,\n}: ReactionsButtonProps) => {\n const { t } = useI18n();\n\n return (\n <Restricted requiredGrants={[OwnCapability.CREATE_REACTION]}>\n <CompositeButton\n active={false}\n caption={t('Reactions')}\n menuPlacement=\"top-start\"\n Menu={<DefaultReactionsMenu reactions={reactions} />}\n >\n <IconButton\n icon=\"reactions\"\n title={t('Reactions')}\n onClick={() => {\n console.log('Reactions');\n }}\n />\n </CompositeButton>\n </Restricted>\n );\n};\n\nexport interface DefaultReactionsMenuProps {\n reactions: StreamReaction[];\n}\n\nexport const DefaultReactionsMenu = ({\n reactions,\n}: DefaultReactionsMenuProps) => {\n const call = useCall();\n return (\n <div className=\"str-video__reactions-menu\">\n {reactions.map((reaction) => (\n <button\n key={reaction.emoji_code}\n type=\"button\"\n className=\"str-video__reactions-menu__button\"\n onClick={() => {\n call?.sendReaction(reaction);\n }}\n >\n {reaction.emoji_code && defaultEmojiReactionMap[reaction.emoji_code]}\n </button>\n ))}\n </div>\n );\n};\n","import clsx from 'clsx';\n\nexport type LoadingIndicatorProps = {\n className?: string;\n /** String will be injected into class and later used to apply as a CSS mask-image to an element as data URL */\n type?: string;\n /** Text to be displayed under the loading indicator icon */\n text?: string;\n /** Tooltip to be displayed on hover */\n tooltip?: string;\n};\n\nexport const LoadingIndicator = ({\n className,\n type = 'spinner',\n text,\n tooltip,\n}: LoadingIndicatorProps) => {\n return (\n <div\n className={clsx('str-video__loading-indicator', className)}\n title={tooltip}\n >\n <div className={clsx('str-video__loading-indicator__icon', type)}></div>\n {text && <p className=\"str-video__loading-indicator-text\">{text}</p>}\n </div>\n );\n};\n","import { OwnCapability } from '@stream-io/video-client';\nimport { Restricted, useCall, useI18n } from '@stream-io/video-react-bindings';\nimport { CompositeButton, IconButton } from '../Button/';\nimport { LoadingIndicator } from '../LoadingIndicator';\nimport { useToggleCallRecording } from '../../hooks/useToggleCallRecording';\n\nexport type RecordCallButtonProps = {\n caption?: string;\n};\n\nexport const RecordCallButton = ({\n caption = 'Record',\n}: RecordCallButtonProps) => {\n const call = useCall();\n\n const { t } = useI18n();\n const { toggleCallRecording, isAwaitingResponse, isCallRecordingInProgress } =\n useToggleCallRecording();\n\n return (\n <Restricted\n requiredGrants={[\n OwnCapability.START_RECORD_CALL,\n OwnCapability.STOP_RECORD_CALL,\n ]}\n >\n <CompositeButton active={isCallRecordingInProgress} caption={caption}>\n {isAwaitingResponse ? (\n <LoadingIndicator\n tooltip={\n isCallRecordingInProgress\n ? t('Waiting for recording to stop...')\n : t('Waiting for recording to start...')\n }\n />\n ) : (\n <IconButton\n // FIXME OL: sort out this ambiguity\n enabled={!!call}\n disabled={!call}\n icon={isCallRecordingInProgress ? 'recording-on' : 'recording-off'}\n title={t('Record call')}\n onClick={toggleCallRecording}\n />\n )}\n </CompositeButton>\n </Restricted>\n );\n};\n","import { OwnCapability } from '@stream-io/video-client';\nimport {\n Restricted,\n useCall,\n useCallStateHooks,\n useI18n,\n} from '@stream-io/video-react-bindings';\nimport { CompositeButton, IconButton } from '../Button/';\nimport { PermissionNotification } from '../Notification';\nimport { useToggleScreenShare } from '../../hooks';\n\nexport type ScreenShareButtonProps = {\n caption?: string;\n};\n\nexport const ScreenShareButton = ({\n caption = 'Screen Share',\n}: ScreenShareButtonProps) => {\n const call = useCall();\n const { useHasOngoingScreenShare } = useCallStateHooks();\n const isSomeoneScreenSharing = useHasOngoingScreenShare();\n\n const { t } = useI18n();\n const { toggleScreenShare, isAwaitingPermission, isScreenSharing } =\n useToggleScreenShare();\n\n return (\n <Restricted requiredGrants={[OwnCapability.SCREENSHARE]}>\n <PermissionNotification\n permission={OwnCapability.SCREENSHARE}\n isAwaitingApproval={isAwaitingPermission}\n messageApproved={t('You can now share your screen.')}\n messageAwaitingApproval={t('Awaiting for an approval to share screen.')}\n messageRevoked={t('You can no longer share your screen.')}\n >\n <CompositeButton active={isSomeoneScreenSharing} caption={caption}>\n <IconButton\n icon={isScreenSharing ? 'screen-share-on' : 'screen-share-off'}\n title={t('Share screen')}\n disabled={(!isScreenSharing && isSomeoneScreenSharing) || !call}\n onClick={toggleScreenShare}\n />\n </CompositeButton>\n </PermissionNotification>\n </Restricted>\n );\n};\n","import clsx from 'clsx';\nimport { ChangeEventHandler } from 'react';\n\ntype DeviceSelectorOptionProps = {\n id: string;\n label: string;\n name: string;\n selected?: boolean;\n value: string;\n disabled?: boolean;\n defaultChecked?: boolean;\n onChange?: ChangeEventHandler<HTMLInputElement>;\n};\n\nconst DeviceSelectorOption = ({\n disabled,\n id,\n label,\n onChange,\n name,\n selected,\n defaultChecked,\n value,\n}: DeviceSelectorOptionProps) => {\n return (\n <label\n className={clsx('str-video__device-settings__option', {\n 'str-video__device-settings__option--selected': selected,\n 'str-video__device-settings__option--disabled': disabled,\n })}\n htmlFor={id}\n >\n <input\n type=\"radio\"\n name={name}\n onChange={onChange}\n value={value}\n id={id}\n checked={selected}\n defaultChecked={defaultChecked}\n disabled={disabled}\n />\n {label}\n </label>\n );\n};\nexport const DeviceSelector = (props: {\n devices: MediaDeviceInfo[];\n selectedDeviceId?: string;\n title: string;\n onChange?: (deviceId: string) => void;\n}) => {\n const {\n devices = [],\n selectedDeviceId: selectedDeviceFromProps,\n title,\n onChange,\n } = props;\n const inputGroupName = title.replace(' ', '-').toLowerCase();\n\n // sometimes the browser (Chrome) will report the system-default device\n // with an id of 'default'. In case when it doesn't, we'll select the first\n // available device.\n let selectedDeviceId = selectedDeviceFromProps;\n if (\n devices.length > 0 &&\n !devices.find((d) => d.deviceId === selectedDeviceId)\n ) {\n selectedDeviceId = devices[0].deviceId;\n }\n\n return (\n <div className=\"str-video__device-settings__device-kind\">\n <div className=\"str-video__device-settings__device-selector-title\">\n {title}\n </div>\n {!devices.length ? (\n <DeviceSelectorOption\n id={`${inputGroupName}--default`}\n label=\"Default\"\n name={inputGroupName}\n defaultChecked\n value=\"default\"\n />\n ) : (\n devices.map((device) => {\n return (\n <DeviceSelectorOption\n id={`${inputGroupName}--${device.deviceId}`}\n value={device.deviceId}\n label={device.label}\n key={device.deviceId}\n onChange={(e) => {\n onChange?.(e.target.value);\n }}\n name={inputGroupName}\n selected={\n device.deviceId === selectedDeviceId || devices.length === 1\n }\n />\n );\n })\n )}\n </div>\n );\n};\n","import { DeviceSelector } from './DeviceSelector';\nimport {\n useMediaDevices,\n useAudioInputDevices,\n useAudioOutputDevices,\n} from '../../core';\n\nexport type DeviceSelectorAudioInputProps = {\n title?: string;\n};\n\nexport const DeviceSelectorAudioInput = ({\n title = 'Select a Mic',\n}: DeviceSelectorAudioInputProps) => {\n const { selectedAudioInputDeviceId, switchDevice } = useMediaDevices();\n const audioInputDevices = useAudioInputDevices();\n\n return (\n <DeviceSelector\n devices={audioInputDevices}\n selectedDeviceId={selectedAudioInputDeviceId}\n onChange={(deviceId) => {\n switchDevice('audioinput', deviceId);\n }}\n title={title}\n />\n );\n};\n\nexport type DeviceSelectorAudioOutputProps = {\n title?: string;\n};\n\nexport const DeviceSelectorAudioOutput = ({\n title = 'Select Speakers',\n}: DeviceSelectorAudioOutputProps) => {\n const {\n isAudioOutputChangeSupported,\n selectedAudioOutputDeviceId,\n switchDevice,\n } = useMediaDevices();\n\n const audioOutputDevices = useAudioOutputDevices();\n\n if (!isAudioOutputChangeSupported) return null;\n\n return (\n <DeviceSelector\n devices={audioOutputDevices}\n selectedDeviceId={selectedAudioOutputDeviceId}\n onChange={(deviceId) => {\n switchDevice('audiooutput', deviceId);\n }}\n title={title}\n />\n );\n};\n","import { DeviceSelector } from './DeviceSelector';\nimport { useMediaDevices, useVideoDevices } from '../../core';\n\nexport type DeviceSelectorVideoProps = {\n title?: string;\n};\n\nexport const DeviceSelectorVideo = ({ title }: DeviceSelectorVideoProps) => {\n const { selectedVideoDeviceId, switchDevice } = useMediaDevices();\n const videoDevices = useVideoDevices();\n\n return (\n <DeviceSelector\n devices={videoDevices}\n selectedDeviceId={selectedVideoDeviceId}\n onChange={(deviceId) => {\n switchDevice('videoinput', deviceId);\n }}\n title={title || 'Select a Camera'}\n />\n );\n};\n","import { forwardRef } from 'react';\nimport { MenuToggle, ToggleMenuButtonProps } from '../Menu';\nimport {\n DeviceSelectorAudioInput,\n DeviceSelectorAudioOutput,\n} from './DeviceSelectorAudio';\nimport { DeviceSelectorVideo } from './DeviceSelectorVideo';\nimport { IconButton } from '../Button';\nimport clsx from 'clsx';\n\nexport const DeviceSettings = () => {\n return (\n <MenuToggle placement=\"bottom-end\" ToggleButton={ToggleMenuButton}>\n <Menu />\n </MenuToggle>\n );\n};\n\nconst Menu = () => (\n <div className=\"str-video__device-settings\">\n <DeviceSelectorVideo />\n <DeviceSelectorAudioInput />\n <DeviceSelectorAudioOutput />\n </div>\n);\n\nconst ToggleMenuButton = forwardRef<HTMLButtonElement, ToggleMenuButtonProps>(\n ({ menuShown }, ref) => (\n <IconButton\n className={clsx('str-video__device-settings__button', {\n 'str-video__device-settings__button--active': menuShown,\n })}\n title=\"Toggle device menu\"\n icon=\"device-settings\"\n ref={ref}\n // tabindex={0}\n />\n ),\n);\n","import { ComponentType } from 'react';\nimport { OwnCapability, SfuModels } from '@stream-io/video-client';\nimport {\n Restricted,\n useCallStateHooks,\n useI18n,\n} from '@stream-io/video-react-bindings';\n\nimport { useMediaDevices } from '../../core';\nimport { DeviceSelectorAudioInput } from '../DeviceSettings';\nimport { CompositeButton, IconButton } from '../Button';\nimport { PermissionNotification } from '../Notification';\nimport { useToggleAudioMuteState } from '../../hooks';\n\nexport type ToggleAudioPreviewButtonProps = {\n caption?: string;\n Menu?: ComponentType;\n};\n\nexport const ToggleAudioPreviewButton = (\n props: ToggleAudioPreviewButtonProps,\n) => {\n const { initialAudioEnabled, toggleInitialAudioMuteState } =\n useMediaDevices();\n const { t } = useI18n();\n const { caption = t('Mic'), Menu = DeviceSelectorAudioInput } = props;\n\n return (\n <CompositeButton\n Menu={Menu}\n active={!initialAudioEnabled}\n caption={caption || t('Mic')}\n >\n <IconButton\n icon={initialAudioEnabled ? 'mic' : 'mic-off'}\n onClick={toggleInitialAudioMuteState}\n />\n </CompositeButton>\n );\n};\n\nexport type ToggleAudioPublishingButtonProps = {\n caption?: string;\n Menu?: ComponentType;\n};\n\nexport const ToggleAudioPublishingButton = (\n props: ToggleAudioPublishingButtonProps,\n) => {\n const { useLocalParticipant } = useCallStateHooks();\n const localParticipant = useLocalParticipant();\n const { t } = useI18n();\n\n const { caption = t('Mic'), Menu = DeviceSelectorAudioInput } = props;\n\n const isAudioMute = !localParticipant?.publishedTracks.includes(\n SfuModels.TrackType.AUDIO,\n );\n\n const { toggleAudioMuteState: handleClick, isAwaitingPermission } =\n useToggleAudioMuteState();\n\n return (\n <Restricted requiredGrants={[OwnCapability.SEND_AUDIO]}>\n <PermissionNotification\n permission={OwnCapability.SEND_AUDIO}\n isAwaitingApproval={isAwaitingPermission}\n messageApproved={t('You can now speak.')}\n messageAwaitingApproval={t('Awaiting for an approval to speak.')}\n messageRevoked={t('You can no longer speak.')}\n >\n <CompositeButton Menu={Menu} active={isAudioMute} caption={caption}>\n <IconButton\n icon={isAudioMute ? 'mic-off' : 'mic'}\n onClick={handleClick}\n />\n </CompositeButton>\n </PermissionNotification>\n </Restricted>\n );\n};\n","import { CompositeButton, IconButton } from '../Button';\nimport { DeviceSelectorAudioOutput } from '../DeviceSettings';\nimport { useI18n } from '@stream-io/video-react-bindings';\nimport { ComponentType } from 'react';\n\nexport type ToggleAudioOutputButtonProps = {\n caption?: string;\n Menu?: ComponentType;\n};\n\nexport const ToggleAudioOutputButton = (\n props: ToggleAudioOutputButtonProps,\n) => {\n const { t } = useI18n();\n const { caption = t('Speakers'), Menu = DeviceSelectorAudioOutput } = props;\n\n return (\n <CompositeButton Menu={Menu} active caption={caption}>\n <IconButton icon=\"speaker\" />\n </CompositeButton>\n );\n};\n","import { ComponentType } from 'react';\nimport {\n Restricted,\n useCallStateHooks,\n useI18n,\n} from '@stream-io/video-react-bindings';\n\nimport { OwnCapability, SfuModels } from '@stream-io/video-client';\nimport { CompositeButton, IconButton } from '../Button/';\nimport { useMediaDevices } from '../../core';\nimport { DeviceSelectorVideo } from '../DeviceSettings';\nimport { PermissionNotification } from '../Notification';\nimport { useToggleVideoMuteState } from '../../hooks';\n\nexport type ToggleVideoPreviewButtonProps = {\n caption?: string;\n Menu?: ComponentType;\n};\n\nexport const ToggleVideoPreviewButton = (\n props: ToggleVideoPreviewButtonProps,\n) => {\n const { toggleInitialVideoMuteState, initialVideoState } = useMediaDevices();\n const { t } = useI18n();\n const { caption = t('Video'), Menu = DeviceSelectorVideo } = props;\n\n return (\n <CompositeButton\n Menu={Menu}\n active={!initialVideoState.enabled}\n caption={caption}\n >\n <IconButton\n icon={initialVideoState.enabled ? 'camera' : 'camera-off'}\n onClick={toggleInitialVideoMuteState}\n />\n </CompositeButton>\n );\n};\n\ntype ToggleVideoPublishingButtonProps = {\n caption?: string;\n Menu?: ComponentType;\n};\n\nexport const ToggleVideoPublishingButton = (\n props: ToggleVideoPublishingButtonProps,\n) => {\n const { useLocalParticipant } = useCallStateHooks();\n const localParticipant = useLocalParticipant();\n const { t } = useI18n();\n\n const { caption = t('Video'), Menu = DeviceSelectorVideo } = props;\n\n const isVideoMute = !localParticipant?.publishedTracks.includes(\n SfuModels.TrackType.VIDEO,\n );\n\n const { toggleVideoMuteState: handleClick, isAwaitingPermission } =\n useToggleVideoMuteState();\n\n return (\n <Restricted requiredGrants={[OwnCapability.SEND_VIDEO]}>\n <PermissionNotification\n permission={OwnCapability.SEND_VIDEO}\n isAwaitingApproval={isAwaitingPermission}\n messageApproved={t('You can now share your video.')}\n messageAwaitingApproval={t(\n 'Awaiting for an approval to share your video.',\n )}\n messageRevoked={t('You can no longer share your video.')}\n >\n <CompositeButton Menu={Menu} active={isVideoMute} caption={caption}>\n <IconButton\n icon={isVideoMute ? 'camera-off' : 'camera'}\n onClick={handleClick}\n />\n </CompositeButton>\n </PermissionNotification>\n </Restricted>\n );\n};\n","import { Restricted, useCall } from '@stream-io/video-react-bindings';\nimport { OwnCapability } from '@stream-io/video-client';\n\nimport { TextButton } from '../Button';\n\nexport const BlockedUserListing = ({ data }: { data: string[] }) => {\n if (!data.length) return null;\n\n return (\n <>\n <div className=\"str-video__participant-listing\">\n {data.map((userId) => (\n <BlockedUserListingItem key={userId} userId={userId} />\n ))}\n </div>\n </>\n );\n};\n\nconst BlockedUserListingItem = ({ userId }: { userId: string }) => {\n const call = useCall();\n\n const unblockUserClickHandler = () => {\n if (userId) call?.unblockUser(userId);\n };\n\n return (\n <div className=\"str-video__participant-listing-item\">\n <div className=\"str-video__participant-listing-item__display-name\">\n {userId}\n </div>\n <Restricted requiredGrants={[OwnCapability.BLOCK_USERS]}>\n <TextButton onClick={unblockUserClickHandler}>Unblock</TextButton>\n </Restricted>\n </div>\n );\n};\n","import { useCallStateHooks, useI18n } from '@stream-io/video-react-bindings';\n\nexport type CallParticipantListHeaderProps = {\n /** Click event listener function to be invoked in order to dismiss / hide the CallParticipantsList from the UI */\n onClose: () => void;\n};\n\nexport const CallParticipantListHeader = ({\n onClose,\n}: CallParticipantListHeaderProps) => {\n const { useParticipants, useAnonymousParticipantCount } = useCallStateHooks();\n const participants = useParticipants();\n const anonymousParticipantCount = useAnonymousParticipantCount();\n const { t } = useI18n();\n\n return (\n <div className=\"str-video__participant-list-header\">\n <div className=\"str-video__participant-list-header__title\">\n {t('Participants')}{' '}\n <span className=\"str-video__participant-list-header__title-count\">\n ({participants.length})\n </span>\n {anonymousParticipantCount > 0 && (\n <span className=\"str-video__participant-list-header__title-anonymous\">\n {t('Anonymous', { count: anonymousParticipantCount })}\n </span>\n )}\n </div>\n <button\n onClick={onClose}\n className=\"str-video__participant-list-header__close-button\"\n >\n <span className=\"str-video__participant-list-header__close-button--icon\" />\n </button>\n </div>\n );\n};\n","import clsx from 'clsx';\nimport {\n ComponentProps,\n ComponentType,\n forwardRef,\n useEffect,\n useState,\n} from 'react';\nimport {\n Restricted,\n useCall,\n useConnectedUser,\n useI18n,\n} from '@stream-io/video-react-bindings';\nimport {\n OwnCapability,\n SfuModels,\n StreamVideoParticipant,\n} from '@stream-io/video-client';\nimport { IconButton } from '../Button';\nimport {\n GenericMenu,\n GenericMenuButtonItem,\n MenuToggle,\n ToggleMenuButtonProps,\n} from '../Menu';\nimport { WithTooltip } from '../Tooltip';\nimport { Icon } from '../Icon';\n\ntype CallParticipantListingItemProps = {\n /** Participant object be rendered */\n participant: StreamVideoParticipant;\n /** Custom component used to display participant's name */\n DisplayName?: ComponentType<{ participant: StreamVideoParticipant }>;\n};\nexport const CallParticipantListingItem = ({\n participant,\n DisplayName = DefaultDisplayName,\n}: CallParticipantListingItemProps) => {\n const isAudioOn = participant.publishedTracks.includes(\n SfuModels.TrackType.AUDIO,\n );\n const isVideoOn = participant.publishedTracks.includes(\n SfuModels.TrackType.VIDEO,\n );\n const isPinned = !!participant.pin;\n\n const { t } = useI18n();\n\n return (\n <div className=\"str-video__participant-listing-item\">\n <DisplayName participant={participant} />\n <div className=\"str-video__participant-listing-item__media-indicator-group\">\n <MediaIndicator\n title={isAudioOn ? t('Microphone on') : t('Microphone off')}\n className={clsx(\n 'str-video__participant-listing-item__icon',\n `str-video__participant-listing-item__icon-${\n isAudioOn ? 'mic' : 'mic-off'\n }`,\n )}\n />\n <MediaIndicator\n title={isVideoOn ? t('Camera on') : t('Camera off')}\n className={clsx(\n 'str-video__participant-listing-item__icon',\n `str-video__participant-listing-item__icon-${\n isVideoOn ? 'camera' : 'camera-off'\n }`,\n )}\n />\n {isPinned && (\n <MediaIndicator\n title={t('Pinned')}\n className={clsx(\n 'str-video__participant-listing-item__icon',\n 'str-video__participant-listing-item__icon-pinned',\n )}\n />\n )}\n\n <MenuToggle placement=\"bottom-end\" ToggleButton={ToggleButton}>\n <ParticipantActionsContextMenu participant={participant} />\n </MenuToggle>\n </div>\n </div>\n );\n};\n\nconst MediaIndicator = (props: ComponentProps<'div'>) => (\n <WithTooltip {...props} />\n);\n\ntype DisplayNameProps = {\n /** Participant object that provides the data from which display name can be generated */\n participant: StreamVideoParticipant;\n};\n// todo: implement display device flag\nconst DefaultDisplayName = ({ participant }: DisplayNameProps) => {\n const connectedUser = useConnectedUser();\n const { t } = useI18n();\n\n const meFlag = participant.userId === connectedUser?.id ? t('Me') : '';\n const nameOrId = participant.name || participant.userId || t('Unknown');\n let displayName;\n if (!participant.name) {\n displayName = meFlag || nameOrId || t('Unknown');\n } else if (meFlag) {\n displayName = `${nameOrId} (${meFlag})`;\n } else {\n displayName = nameOrId;\n }\n\n return (\n <WithTooltip\n className=\"str-video__participant-listing-item__display-name\"\n title={displayName}\n >\n {displayName}\n </WithTooltip>\n );\n};\n\nconst ToggleButton = forwardRef<HTMLButtonElement, ToggleMenuButtonProps>(\n (props, ref) => {\n return <IconButton enabled={props.menuShown} icon=\"ellipsis\" ref={ref} />;\n },\n);\n\nexport const ParticipantActionsContextMenu = ({\n participant,\n participantViewElement,\n videoElement,\n}: {\n participant: StreamVideoParticipant;\n participantViewElement?: HTMLDivElement | null;\n videoElement?: HTMLVideoElement | null;\n}) => {\n const [fullscreenModeOn, setFullscreenModeOn] = useState(\n !!document.fullscreenElement,\n );\n const [pictureInPictureElement, setPictureInPictureElement] = useState(\n document.pictureInPictureElement,\n );\n const call = useCall();\n const { t } = useI18n();\n\n const { pin, publishedTracks, sessionId, userId } = participant;\n\n const hasAudio = publishedTracks.includes(SfuModels.TrackType.AUDIO);\n const hasVideo = publishedTracks.includes(SfuModels.TrackType.VIDEO);\n const hasScreenShare = publishedTracks.includes(\n SfuModels.TrackType.SCREEN_SHARE,\n );\n const hasScreenShareAudio = publishedTracks.includes(\n SfuModels.TrackType.SCREEN_SHARE_AUDIO,\n );\n\n const blockUser = () => call?.blockUser(userId);\n const muteAudio = () => call?.muteUser(userId, 'audio');\n const muteVideo = () => call?.muteUser(userId, 'video');\n const muteScreenShare = () => call?.muteUser(userId, 'screenshare');\n const muteScreenShareAudio = () =>\n call?.muteUser(userId, 'screenshare_audio');\n\n const grantPermission = (permission: string) => () => {\n call?.updateUserPermissions({\n user_id: userId,\n grant_permissions: [permission],\n });\n };\n\n const revokePermission = (permission: string) => () => {\n call?.updateUserPermissions({\n user_id: userId,\n revoke_permissions: [permission],\n });\n };\n\n const toggleParticipantPinnedAt = () => {\n if (pin) {\n call?.unpin(sessionId);\n } else {\n call?.pin(sessionId);\n }\n };\n\n const pinForEveryone = () => {\n call\n ?.pinForEveryone({\n user_id: userId,\n session_id: sessionId,\n })\n .catch((err) => {\n console.error(`Failed to pin participant ${userId}`, err);\n });\n };\n\n const unpinForEveryone = () => {\n call\n ?.unpinForEveryone({\n user_id: userId,\n session_id: sessionId,\n })\n .catch((err) => {\n console.error(`Failed to unpin participant ${userId}`, err);\n });\n };\n\n const toggleFullscreenMode = () => {\n if (!fullscreenModeOn) {\n return participantViewElement\n ?.requestFullscreen()\n .then(() => setFullscreenModeOn(true))\n .catch(console.error);\n }\n\n document\n .exitFullscreen()\n .catch(console.error)\n .finally(() => setFullscreenModeOn(false));\n };\n\n useEffect(() => {\n if (!videoElement) return;\n\n const handlePictureInPicture = () => {\n setPictureInPictureElement(document.pictureInPictureElement);\n };\n\n videoElement.addEventListener(\n 'enterpictureinpicture',\n handlePictureInPicture,\n );\n videoElement.addEventListener(\n 'leavepictureinpicture',\n handlePictureInPicture,\n );\n\n return () => {\n videoElement.removeEventListener(\n 'enterpictureinpicture',\n handlePictureInPicture,\n );\n videoElement.removeEventListener(\n 'leavepictureinpicture',\n handlePictureInPicture,\n );\n };\n }, [videoElement]);\n\n const togglePictureInPicture = () => {\n if (videoElement && pictureInPictureElement !== videoElement) {\n return videoElement\n .requestPictureInPicture()\n .catch(console.error) as Promise<void>;\n }\n\n document.exitPictureInPicture().catch(console.error);\n };\n\n return (\n <GenericMenu>\n <GenericMenuButtonItem\n onClick={toggleParticipantPinnedAt}\n disabled={pin && !pin.isLocalPin}\n >\n <Icon icon=\"pin\" />\n {pin ? t('Unpin') : t('Pin')}\n </GenericMenuButtonItem>\n <Restricted requiredGrants={[OwnCapability.PIN_FOR_EVERYONE]}>\n <GenericMenuButtonItem\n onClick={pinForEveryone}\n disabled={pin && !pin.isLocalPin}\n >\n <Icon icon=\"pin\" />\n {t('Pin for everyone')}\n </GenericMenuButtonItem>\n <GenericMenuButtonItem\n onClick={unpinForEveryone}\n disabled={!pin || pin.isLocalPin}\n >\n <Icon icon=\"pin\" />\n {t('Unpin for everyone')}\n </GenericMenuButtonItem>\n </Restricted>\n <Restricted requiredGrants={[OwnCapability.BLOCK_USERS]}>\n <GenericMenuButtonItem onClick={blockUser}>\n <Icon icon=\"not-allowed\" />\n {t('Block')}\n </GenericMenuButtonItem>\n </Restricted>\n <Restricted requiredGrants={[OwnCapability.MUTE_USERS]}>\n <GenericMenuButtonItem disabled={!hasVideo} onClick={muteVideo}>\n <Icon icon=\"camera-off-outline\" />\n {t('Turn off video')}\n </GenericMenuButtonItem>\n <GenericMenuButtonItem\n disabled={!hasScreenShare}\n onClick={muteScreenShare}\n >\n <Icon icon=\"screen-share-off\" />\n {t('Turn off screen share')}\n </GenericMenuButtonItem>\n <GenericMenuButtonItem disabled={!hasAudio} onClick={muteAudio}>\n <Icon icon=\"no-audio\" />\n {t('Mute audio')}\n </GenericMenuButtonItem>\n <GenericMenuButtonItem\n disabled={!hasScreenShareAudio}\n onClick={muteScreenShareAudio}\n >\n <Icon icon=\"no-audio\" />\n {t('Mute screen share audio')}\n </GenericMenuButtonItem>\n </Restricted>\n {participantViewElement && (\n <GenericMenuButtonItem onClick={toggleFullscreenMode}>\n {t('{{ direction }} fullscreen', {\n direction: fullscreenModeOn ? t('Leave') : t('Enter'),\n })}\n </GenericMenuButtonItem>\n )}\n {videoElement && document.pictureInPictureEnabled && (\n <GenericMenuButtonItem onClick={togglePictureInPicture}>\n {t('{{ direction }} picture-in-picture', {\n direction:\n pictureInPictureElement === videoElement\n ? t('Leave')\n : t('Enter'),\n })}\n </GenericMenuButtonItem>\n )}\n <Restricted requiredGrants={[OwnCapability.UPDATE_CALL_PERMISSIONS]}>\n <GenericMenuButtonItem\n onClick={grantPermission(OwnCapability.SEND_AUDIO)}\n >\n {t('Allow audio')}\n </GenericMenuButtonItem>\n <GenericMenuButtonItem\n onClick={grantPermission(OwnCapability.SEND_VIDEO)}\n >\n {t('Allow video')}\n </GenericMenuButtonItem>\n <GenericMenuButtonItem\n onClick={grantPermission(OwnCapability.SCREENSHARE)}\n >\n {t('Allow screen sharing')}\n </GenericMenuButtonItem>\n\n <GenericMenuButtonItem\n onClick={revokePermission(OwnCapability.SEND_AUDIO)}\n >\n {t('Disable audio')}\n </GenericMenuButtonItem>\n <GenericMenuButtonItem\n onClick={revokePermission(OwnCapability.SEND_VIDEO)}\n >\n {t('Disable video')}\n </GenericMenuButtonItem>\n <GenericMenuButtonItem\n onClick={revokePermission(OwnCapability.SCREENSHARE)}\n >\n {t('Disable screen sharing')}\n </GenericMenuButtonItem>\n </Restricted>\n </GenericMenu>\n );\n};\n","import { ComponentType } from 'react';\nimport { StreamVideoParticipant } from '@stream-io/video-client';\nimport { CallParticipantListingItem } from './CallParticipantListingItem';\n\nexport type CallParticipantListingProps = {\n /** Array of participant objects to be rendered */\n data: StreamVideoParticipant[];\n Header?: ComponentType;\n};\n\nexport const CallParticipantListing = ({\n data,\n}: CallParticipantListingProps) => (\n <div className=\"str-video__participant-listing\">\n {data.map((participant) => (\n <CallParticipantListingItem\n key={participant.sessionId}\n participant={participant}\n />\n ))}\n </div>\n);\n","import { useI18n } from '@stream-io/video-react-bindings';\n\nexport const EmptyParticipantSearchList = () => {\n const { t } = useI18n();\n return (\n <div className=\"str-video__participant-list--empty\">\n {t('No participants found')}\n </div>\n );\n};\n","import { ComponentProps, useEffect, useState } from 'react';\nimport clsx from 'clsx';\n\ntype SearchInputProps = ComponentProps<'input'> & {\n /**\n * Resets the search to its initial state.\n * The function is called when Esc key or inputs clear button are pressed\n */\n exitSearch: () => void;\n /**\n * Flag to signal, whether search input elements should be rendered as active\n */\n isActive: boolean;\n};\nexport const SearchInput = ({\n exitSearch,\n isActive,\n ...rest\n}: SearchInputProps) => {\n const [inputElement, setInputElement] = useState<HTMLInputElement | null>(\n null,\n );\n useEffect(() => {\n if (!inputElement) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key.toLowerCase() === 'escape') exitSearch();\n };\n\n inputElement.addEventListener('keydown', handleKeyDown);\n\n return () => {\n inputElement.removeEventListener('keydown', handleKeyDown);\n };\n }, [exitSearch, inputElement]);\n\n return (\n <div\n className={clsx('str-video__search-input__container', {\n 'str-video__search-input__container--active': isActive,\n })}\n >\n <input placeholder=\"Search\" {...rest} ref={setInputElement} />\n {isActive ? (\n <button\n className=\"str-video__search-input__clear-btn\"\n onClick={exitSearch}\n >\n <span className=\"str-video__search-input__icon--active\" />\n </button>\n ) : (\n <span className=\"str-video__search-input__icon\" />\n )}\n </div>\n );\n};\n","import { ComponentType } from 'react';\nimport { LoadingIndicator as DefaultLoadingIndicator } from '../LoadingIndicator';\nimport { SearchController } from './hooks';\n\nexport type SearchResultListProps<T> = {\n data: T[];\n};\n\nexport type SearchResultsProps<T> = Pick<\n SearchController<T>,\n 'searchResults' | 'searchQueryInProgress'\n> & {\n /** Component to be displayed, when empty array of search results is provided */\n EmptySearchResultComponent: ComponentType;\n /** Component will be used to render non-empty array of search results */\n SearchResultList: ComponentType<SearchResultListProps<T>>;\n /** Component to be displayed while the search query request is in progress */\n LoadingIndicator?: ComponentType;\n};\n\nexport const SearchResults = <T extends unknown>({\n EmptySearchResultComponent,\n LoadingIndicator = DefaultLoadingIndicator,\n searchQueryInProgress,\n searchResults,\n SearchResultList,\n}: SearchResultsProps<T>) => {\n if (searchQueryInProgress) {\n return (\n <div className=\"str-video__search-results--loading\">\n <LoadingIndicator />\n </div>\n );\n }\n if (!searchResults.length) {\n return <EmptySearchResultComponent />;\n }\n\n return <SearchResultList data={searchResults} />;\n};\n","import { useEffect, useState } from 'react';\n\nexport type SearchController<T> = {\n /** Flag signals that the search request is flight await the response */\n searchQueryInProgress: boolean;\n /** Array of items returned by the search query */\n searchResults: T[];\n};\n\nexport type UseSearchParams<T> = {\n /** Search function performing the search request */\n searchFn: (searchQuery: string) => Promise<T[]>;\n /** Debounce interval applied to the search function */\n debounceInterval: number;\n /** Search query string */\n searchQuery?: string;\n};\n\nexport const useSearch = <T>({\n debounceInterval,\n searchFn,\n searchQuery = '',\n}: UseSearchParams<T>): SearchController<T> => {\n const [searchResults, setSearchResults] = useState<T[]>([]);\n const [searchQueryInProgress, setSearchQueryInProgress] = useState(false);\n\n useEffect(() => {\n if (!searchQuery.length) return setSearchResults([]);\n\n setSearchQueryInProgress(true);\n\n const timeout = setTimeout(async () => {\n try {\n const results = await searchFn(searchQuery);\n setSearchResults(results);\n } catch (error) {\n console.error(error);\n } finally {\n setSearchQueryInProgress(false);\n }\n }, debounceInterval);\n\n return () => {\n clearTimeout(timeout);\n };\n }, [debounceInterval, searchFn, searchQuery]);\n\n return {\n searchQueryInProgress,\n searchResults,\n };\n};\n","import {\n ComponentProps,\n Dispatch,\n ForwardedRef,\n forwardRef,\n SetStateAction,\n useCallback,\n useState,\n} from 'react';\nimport {\n Restricted,\n useCall,\n useCallStateHooks,\n} from '@stream-io/video-react-bindings';\nimport {\n name,\n OwnCapability,\n StreamVideoParticipant,\n} from '@stream-io/video-client';\nimport { clsx } from 'clsx';\n\nimport { BlockedUserListing } from './BlockedUserListing';\nimport {\n CopyToClipboardButtonWithPopup,\n IconButton,\n TextButton,\n} from '../Button';\nimport { CallParticipantListHeader } from './CallParticipantListHeader';\nimport { CallParticipantListing } from './CallParticipantListing';\nimport { EmptyParticipantSearchList } from './EmptyParticipantSearchList';\nimport { LoadingIndicator } from '../LoadingIndicator';\nimport { SearchInput, SearchResults } from '../Search';\nimport { useSearch, UseSearchParams } from '../Search/hooks';\nimport {\n GenericMenu,\n GenericMenuButtonItem,\n MenuToggle,\n ToggleMenuButtonProps,\n} from '../Menu';\n\ntype CallParticipantListProps = {\n /** Click event listener function to be invoked in order to dismiss/hide the CallParticipantsList from the UI */\n onClose: () => void;\n /** Custom function to override the searching logic of active participants */\n activeUsersSearchFn?: UseSearchParams<StreamVideoParticipant>['searchFn'];\n /** Custom function to override the searching logic of blocked users */\n blockedUsersSearchFn?: UseSearchParams<string>['searchFn'];\n /** Interval in ms, during which the participant search calls will be debounced. The default value is 200ms. */\n debounceSearchInterval?: number;\n};\n\nconst UserListTypes = {\n active: 'Active users',\n blocked: 'Blocked users',\n} as const;\n\nconst DEFAULT_DEBOUNCE_SEARCH_INTERVAL = 200 as const;\n\nexport const CallParticipantsList = ({\n onClose,\n activeUsersSearchFn,\n blockedUsersSearchFn,\n debounceSearchInterval,\n}: CallParticipantListProps) => {\n const [searchQuery, setSearchQuery] = useState('');\n const [userListType, setUserListType] =\n useState<keyof typeof UserListTypes>('active');\n\n const exitSearch = useCallback(() => setSearchQuery(''), []);\n\n return (\n <div className=\"str-video__participant-list\">\n <CallParticipantListHeader onClose={onClose} />\n <SearchInput\n value={searchQuery}\n onChange={({ currentTarget }) => setSearchQuery(currentTarget.value)}\n exitSearch={exitSearch}\n isActive={!!searchQuery}\n />\n <CallParticipantListContentHeader\n userListType={userListType}\n setUserListType={setUserListType}\n />\n <div className=\"str-video__participant-list__content\">\n {userListType === 'active' && (\n <ActiveUsersSearchResults\n searchQuery={searchQuery}\n activeUsersSearchFn={activeUsersSearchFn}\n debounceSearchInterval={debounceSearchInterval}\n />\n )}\n {userListType === 'blocked' && (\n <BlockedUsersSearchResults\n searchQuery={searchQuery}\n blockedUsersSearchFn={blockedUsersSearchFn}\n debounceSearchInterval={debounceSearchInterval}\n />\n )}\n </div>\n <div className=\"str-video__participant-list__footer\">\n <CopyToClipboardButtonWithPopup\n Button={InviteLinkButton}\n copyValue={typeof window !== 'undefined' ? window.location.href : ''}\n />\n </div>\n </div>\n );\n};\n\nconst CallParticipantListContentHeader = ({\n userListType,\n setUserListType,\n}: {\n userListType: keyof typeof UserListTypes;\n setUserListType: Dispatch<SetStateAction<keyof typeof UserListTypes>>;\n}) => {\n const call = useCall();\n\n const muteAll = () => {\n call?.muteAllUsers('audio');\n };\n\n return (\n <div className=\"str-video__participant-list__content-header\">\n <div className=\"str-video__participant-list__content-header-title\">\n <span>{UserListTypes[userListType]}</span>\n {userListType === 'active' && (\n <Restricted\n requiredGrants={[OwnCapability.MUTE_USERS]}\n hasPermissionsOnly\n >\n <TextButton onClick={muteAll}>Mute all</TextButton>\n </Restricted>\n )}\n </div>\n <MenuToggle placement=\"bottom-end\" ToggleButton={ToggleButton}>\n <GenericMenu>\n {(\n Object.keys(UserListTypes) as Array<keyof typeof UserListTypes>\n ).map((lt) => (\n <GenericMenuButtonItem\n key={lt}\n aria-selected={lt === userListType}\n onClick={() => setUserListType(lt)}\n >\n {UserListTypes[lt]}\n </GenericMenuButtonItem>\n ))}\n </GenericMenu>\n </MenuToggle>\n </div>\n );\n};\n\nconst ActiveUsersSearchResults = ({\n searchQuery,\n activeUsersSearchFn: activeUsersSearchFnFromProps,\n debounceSearchInterval = DEFAULT_DEBOUNCE_SEARCH_INTERVAL,\n}: Pick<\n CallParticipantListProps,\n 'activeUsersSearchFn' | 'debounceSearchInterval'\n> & { searchQuery: string }) => {\n const { useParticipants } = useCallStateHooks();\n const participants = useParticipants({ sortBy: name });\n\n const activeUsersSearchFn = useCallback(\n (queryString: string) => {\n const queryRegExp = new RegExp(queryString, 'i');\n return Promise.resolve(\n participants.filter((participant) => {\n return participant.name.match(queryRegExp);\n }),\n );\n },\n [participants],\n );\n\n const { searchQueryInProgress, searchResults } =\n useSearch<StreamVideoParticipant>({\n searchFn: activeUsersSearchFnFromProps ?? activeUsersSearchFn,\n debounceInterval: debounceSearchInterval,\n searchQuery,\n });\n\n return (\n <SearchResults<StreamVideoParticipant>\n EmptySearchResultComponent={EmptyParticipantSearchList}\n LoadingIndicator={LoadingIndicator}\n searchQueryInProgress={searchQueryInProgress}\n searchResults={searchQuery ? searchResults : participants}\n SearchResultList={CallParticipantListing}\n />\n );\n};\n\nconst BlockedUsersSearchResults = ({\n blockedUsersSearchFn: blockedUsersSearchFnFromProps,\n debounceSearchInterval = DEFAULT_DEBOUNCE_SEARCH_INTERVAL,\n searchQuery,\n}: Pick<\n CallParticipantListProps,\n 'blockedUsersSearchFn' | 'debounceSearchInterval'\n> & { searchQuery: string }) => {\n const { useCallBlockedUserIds } = useCallStateHooks();\n const blockedUsers = useCallBlockedUserIds();\n\n const blockedUsersSearchFn = useCallback(\n (queryString: string) => {\n const queryRegExp = new RegExp(queryString, 'i');\n return Promise.resolve(\n blockedUsers.filter((blockedUser) => {\n return blockedUser.match(queryRegExp);\n }),\n );\n },\n [blockedUsers],\n );\n\n const { searchQueryInProgress, searchResults } = useSearch<string>({\n searchFn: blockedUsersSearchFnFromProps ?? blockedUsersSearchFn,\n debounceInterval: debounceSearchInterval,\n searchQuery,\n });\n\n return (\n <SearchResults<string>\n EmptySearchResultComponent={EmptyParticipantSearchList}\n LoadingIndicator={LoadingIndicator}\n searchQueryInProgress={searchQueryInProgress}\n searchResults={searchQuery ? searchResults : blockedUsers}\n SearchResultList={BlockedUserListing}\n />\n );\n};\n\nconst ToggleButton = forwardRef<HTMLButtonElement, ToggleMenuButtonProps>(\n (props, ref) => {\n return <IconButton enabled={props.menuShown} icon=\"filter\" ref={ref} />;\n },\n);\n\nconst InviteLinkButton = forwardRef(\n (\n { className, ...props }: ComponentProps<'button'>,\n ref: ForwardedRef<HTMLButtonElement>,\n ) => (\n <button\n {...props}\n className={clsx('str-video__invite-link-button', className)}\n ref={ref}\n >\n <div className=\"str-video__invite-participant-icon\" />\n <div className=\"str-video__invite-link-button__text\">Invite Link</div>\n </button>\n ),\n);\n","import clsx from 'clsx';\nimport { CSSProperties, useEffect, useState } from 'react';\nimport { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';\n\nexport type CallPreviewProps = {\n /**\n * Additional CSS class name to apply to the CallPreview element.\n */\n className?: string;\n\n /**\n * Additional CSS properties to apply to the CallPreview element.\n */\n style?: CSSProperties;\n};\n\nexport const CallPreview = (props: CallPreviewProps) => {\n const { className, style } = props;\n const call = useCall();\n const { useCallThumbnail } = useCallStateHooks();\n const thumbnail = useCallThumbnail();\n\n const [imageRef, setImageRef] = useState<HTMLImageElement | null>(null);\n useEffect(() => {\n if (!imageRef || !call) return;\n const cleanup = call.bindCallThumbnailElement(imageRef);\n return () => cleanup();\n }, [imageRef, call]);\n\n if (!thumbnail) return null;\n\n return (\n <img\n className={clsx('str-video__call-preview', className)}\n style={style}\n alt=\"Call Preview Thumbnail\"\n ref={setImageRef}\n />\n );\n};\n","import { CallRecording } from '@stream-io/video-client';\nimport { IconButton } from '../Button';\n\nexport type CallRecordingListHeaderProps = {\n /** Array of CallRecording objects */\n callRecordings: CallRecording[];\n /** Callback to be invoked when the refresh button is clicked */\n onRefresh?: () => void;\n};\n\nexport const CallRecordingListHeader = ({\n callRecordings,\n onRefresh,\n}: CallRecordingListHeaderProps) => {\n return (\n <div className=\"str-video__call-recording-list__header\">\n <div className=\"str-video__call-recording-list__title\">\n <span>Call Recordings</span>\n {callRecordings.length ? <span>({callRecordings.length})</span> : null}\n </div>\n <IconButton icon=\"refresh\" title=\"Refresh\" onClick={onRefresh} />\n </div>\n );\n};\n","import clsx from 'clsx';\nimport { ComponentProps, ForwardedRef, forwardRef } from 'react';\nimport { CallRecording } from '@stream-io/video-client';\nimport { CopyToClipboardButtonWithPopup } from '../Button';\n\nexport type CallRecordingListItemProps = {\n /** CallRecording object to represent */\n recording: CallRecording;\n};\nexport const CallRecordingListItem = ({\n recording,\n}: CallRecordingListItemProps) => {\n return (\n <div className=\"str-video__call-recording-list-item\">\n <div className=\"str-video__call-recording-list-item__info\">\n <div className=\"str-video__call-recording-list-item__created\">\n {new Date(recording.end_time).toLocaleString()}\n </div>\n </div>\n <div className=\"str-video__call-recording-list-item__actions\">\n <a\n className={clsx(\n 'str-video__call-recording-list-item__action-button',\n 'str-video__call-recording-list-item__action-button--download',\n )}\n role=\"button\"\n href={recording.url}\n download={recording.filename}\n title=\"Download the recording\"\n >\n <span\n className={clsx(\n 'str-video__call-recording-list-item__action-button-icon',\n 'str-video__download-button--icon',\n )}\n />\n </a>\n <CopyToClipboardButtonWithPopup\n Button={CopyUrlButton}\n copyValue={recording.url}\n />\n </div>\n </div>\n );\n};\nconst CopyUrlButton = forwardRef(\n (props: ComponentProps<'button'>, ref: ForwardedRef<HTMLButtonElement>) => {\n return (\n <button\n {...props}\n className={clsx(\n 'str-video__call-recording-list-item__action-button',\n 'str-video__call-recording-list-item__action-button--copy-link',\n )}\n ref={ref}\n title=\"Copy the recording link\"\n >\n <span\n className={clsx(\n 'str-video__call-recording-list-item__action-button-icon',\n 'str-video__copy-button--icon',\n )}\n />\n </button>\n );\n },\n);\n","export const EmptyCallRecordingListing = () => {\n return (\n <div className=\"str-video__call-recording-list__listing str-video__call-recording-list__listing--empty\">\n <div className=\"str-video__call-recording-list__listing--icon-empty\" />\n <p className=\"str-video__call-recording-list__listing--text-empty\">\n {/* todo: introduce i18n to enable text customization */}\n No recordings available\n </p>\n </div>\n );\n};\n","import { CallRecording } from '@stream-io/video-client';\nimport { CallRecordingListItem } from './CallRecordingListItem';\nimport { LoadingIndicator } from '../LoadingIndicator';\n\nexport type LoadingCallRecordingListProps = {\n /** Array of CallRecording objects */\n callRecordings: CallRecording[];\n};\n\nexport const LoadingCallRecordingListing = ({\n callRecordings,\n}: LoadingCallRecordingListProps) => {\n return (\n <>\n {callRecordings.map((recording) => (\n <CallRecordingListItem recording={recording} key={recording.filename} />\n ))}\n <LoadingIndicator text=\"Recording getting ready\" />\n </>\n );\n};\n","import { ComponentType } from 'react';\nimport { CallRecording } from '@stream-io/video-client';\n\nimport {\n CallRecordingListHeader as DefaultCallRecordingListHeader,\n CallRecordingListHeaderProps,\n} from './CallRecordingListHeader';\nimport {\n CallRecordingListItem as DefaultCallRecordingListItem,\n CallRecordingListItemProps,\n} from './CallRecordingListItem';\nimport { EmptyCallRecordingListing as DefaultEmptyCallRecordingList } from './EmptyCallRecordingListing';\nimport {\n LoadingCallRecordingListing as DefaultLoadingCallRecordingList,\n LoadingCallRecordingListProps,\n} from './LoadingCallRecordingListing';\n\nexport type CallRecordingListProps = {\n /** Array of CallRecording objects to be displayed */\n callRecordings: CallRecording[];\n /** Custom component to replace the default header implementation */\n CallRecordingListHeader?: ComponentType<CallRecordingListHeaderProps>;\n /** Custom component to replace the default list item implementation */\n CallRecordingListItem?: ComponentType<CallRecordingListItemProps>;\n /** Custom component to replace the default empty list component implementation */\n EmptyCallRecordingList?: ComponentType;\n /** Signals that a request for new list of CallRecording object has been initiated */\n loading?: boolean;\n /** Custom component to be rendered when loading is true */\n LoadingCallRecordingList?: ComponentType<LoadingCallRecordingListProps>;\n /** Callback to be invoked when the refresh button is clicked */\n onRefresh?: () => void;\n};\n\nexport const CallRecordingList = ({\n callRecordings,\n CallRecordingListHeader = DefaultCallRecordingListHeader,\n CallRecordingListItem = DefaultCallRecordingListItem,\n EmptyCallRecordingList = DefaultEmptyCallRecordingList,\n loading,\n LoadingCallRecordingList = DefaultLoadingCallRecordingList,\n onRefresh,\n}: CallRecordingListProps) => {\n return (\n <div className=\"str-video__call-recording-list\">\n <CallRecordingListHeader\n callRecordings={callRecordings}\n onRefresh={onRefresh}\n />\n <div className=\"str-video__call-recording-list__listing\">\n {loading ? (\n <LoadingCallRecordingList callRecordings={callRecordings} />\n ) : callRecordings.length ? (\n callRecordings.map((recording) => (\n <CallRecordingListItem\n recording={recording}\n key={recording.filename}\n />\n ))\n ) : (\n <EmptyCallRecordingList />\n )}\n </div>\n </div>\n );\n};\n","import { CallingState } from '@stream-io/video-client';\nimport { AcceptCallButton, CancelCallButton } from '../CallControls';\nimport { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';\n\nexport const RingingCallControls = () => {\n const call = useCall();\n const { useCallCallingState } = useCallStateHooks();\n const callCallingState = useCallCallingState();\n\n if (!call) return null;\n\n const buttonsDisabled = callCallingState !== CallingState.RINGING;\n return (\n <div className=\"str-video__pending-call-controls\">\n {call.isCreatedByMe ? (\n <CancelCallButton disabled={buttonsDisabled} />\n ) : (\n <>\n <AcceptCallButton disabled={buttonsDisabled} />\n <CancelCallButton\n onClick={() => call.leave({ reject: true })}\n disabled={buttonsDisabled}\n />\n </>\n )}\n </div>\n );\n};\n","import { CallingState, UserResponse } from '@stream-io/video-client';\nimport {\n useCall,\n useCallStateHooks,\n useConnectedUser,\n useI18n,\n} from '@stream-io/video-react-bindings';\nimport { Avatar } from '../Avatar';\nimport { RingingCallControls } from './RingingCallControls';\n\nconst CALLING_STATE_TO_LABEL: Record<CallingState, string> = {\n [CallingState.JOINING]: 'Joining',\n [CallingState.RINGING]: 'Ringing',\n [CallingState.MIGRATING]: 'Migrating',\n [CallingState.RECONNECTING]: 'Re-connecting',\n [CallingState.RECONNECTING_FAILED]: 'Failed',\n [CallingState.OFFLINE]: 'No internet connection',\n [CallingState.IDLE]: '',\n [CallingState.UNKNOWN]: '',\n [CallingState.JOINED]: 'Joined',\n [CallingState.LEFT]: 'Left call',\n};\n\nexport type RingingCallProps = {\n /**\n * Whether to include the current user in the list of members to show.\n * @default false.\n */\n includeSelf?: boolean;\n\n /**\n * The maximum number of members to show.\n * @default 3.\n */\n totalMembersToShow?: number;\n};\n\nexport const RingingCall = (props: RingingCallProps) => {\n const { includeSelf = false, totalMembersToShow = 3 } = props;\n const call = useCall();\n const { t } = useI18n();\n const { useCallCallingState, useCallMembers } = useCallStateHooks();\n const callingState = useCallCallingState();\n const members = useCallMembers();\n const connectedUser = useConnectedUser();\n\n if (!call) return null;\n\n // take the first N members to show their avatars\n const membersToShow: UserResponse[] = (members || [])\n .slice(0, totalMembersToShow)\n .map(({ user }) => user)\n .filter((user) => user.id !== connectedUser?.id || includeSelf);\n if (\n includeSelf &&\n !membersToShow.find((user) => user.id === connectedUser?.id)\n ) {\n // if the current user is not in the initial batch of members,\n // replace the first item in membersToShow array with the current user\n const self = members.find(({ user }) => user.id === connectedUser?.id);\n if (self) {\n membersToShow.splice(0, 1, self.user);\n }\n }\n\n const callingStateLabel = CALLING_STATE_TO_LABEL[callingState];\n\n return (\n <div className=\"str-video__call-panel str-video__call-panel--ringing\">\n <div className=\"str-video__call-panel__members-list\">\n {membersToShow.map((user) => (\n <div key={user.id} className=\"str-video__call-panel__member-box\">\n <Avatar name={user.name} imageSrc={user.image} />\n {user.name && (\n <div className=\"str-video__member_details\">\n <span className=\"str-video__member_name\">{user.name}</span>\n </div>\n )}\n </div>\n ))}\n </div>\n\n {callingStateLabel && (\n <div className=\"str-video__call-panel__calling-state-label\">\n {t(callingStateLabel)}\n </div>\n )}\n\n {[CallingState.RINGING, CallingState.JOINING].includes(callingState) && (\n <RingingCallControls />\n )}\n </div>\n );\n};\n","import {\n ButtonHTMLAttributes,\n ComponentProps,\n forwardRef,\n Fragment,\n PropsWithChildren,\n useEffect,\n useState,\n} from 'react';\nimport {\n OwnCapability,\n PermissionRequestEvent,\n StreamVideoEvent,\n UserResponse,\n} from '@stream-io/video-client';\nimport {\n TranslatorFunction,\n useCall,\n useCallStateHooks,\n useHasPermissions,\n useI18n,\n} from '@stream-io/video-react-bindings';\nimport clsx from 'clsx';\n\nimport { useFloatingUIPreset } from '../../hooks';\n\nconst byNameOrId = (a: UserResponse, b: UserResponse) => {\n if (a.name && b.name && a.name < b.name) return -1;\n if (a.name && b.name && a.name > b.name) return 1;\n if (a.id < b.id) return -1;\n if (a.id > b.id) return 1;\n return 0;\n};\n\ntype HandleUpdatePermission = (\n request: PermissionRequestEvent,\n type: 'grant' | 'revoke' | 'dismiss',\n) => () => Promise<void>;\n\nexport const PermissionRequests = () => {\n const call = useCall();\n const { useLocalParticipant } = useCallStateHooks();\n const localParticipant = useLocalParticipant();\n const [expanded, setExpanded] = useState(false);\n const [permissionRequests, setPermissionRequests] = useState<\n PermissionRequestEvent[]\n >([]);\n const canUpdateCallPermissions = useHasPermissions(\n OwnCapability.UPDATE_CALL_PERMISSIONS,\n );\n\n useEffect(() => {\n if (!call || !canUpdateCallPermissions) return;\n\n const unsubscribe = call.on(\n 'call.permission_request',\n (event: StreamVideoEvent) => {\n if (event.type !== 'call.permission_request') return;\n\n if (event.user.id !== localParticipant?.userId) {\n setPermissionRequests((requests) =>\n [...requests, event as PermissionRequestEvent].sort((a, b) =>\n byNameOrId(a.user, b.user),\n ),\n );\n }\n },\n );\n return () => {\n unsubscribe();\n };\n }, [call, canUpdateCallPermissions, localParticipant]);\n\n const handleUpdatePermission: HandleUpdatePermission = (request, type) => {\n return async () => {\n const { user, permissions } = request;\n switch (type) {\n case 'grant':\n await call?.grantPermissions(user.id, permissions);\n break;\n case 'revoke':\n await call?.revokePermissions(user.id, permissions);\n break;\n default:\n break;\n }\n setPermissionRequests((requests) =>\n requests.filter((r) => r !== request),\n );\n };\n };\n\n const { refs, x, y, strategy } = useFloatingUIPreset({\n placement: 'bottom',\n strategy: 'absolute',\n });\n\n // don't render anything if there are no permission requests\n if (permissionRequests.length === 0) return null;\n\n return (\n <div className=\"str-video__permission-requests\" ref={refs.setReference}>\n <div className=\"str-video__permission-requests__notification\">\n <span className=\"str-video__permission-requests__notification__message\">\n {permissionRequests.length} pending permission requests\n </span>\n <Button\n type=\"button\"\n onClick={() => {\n setExpanded((e) => !e);\n }}\n >\n {expanded ? 'Hide requests' : 'Show requests'}\n </Button>\n </div>\n {expanded && (\n <PermissionRequestList\n ref={refs.setFloating}\n style={{\n position: strategy,\n top: y ?? 0,\n left: x ?? 0,\n overflowY: 'auto',\n }}\n permissionRequests={permissionRequests}\n handleUpdatePermission={handleUpdatePermission}\n />\n )}\n </div>\n );\n};\n\nexport type PermissionRequestListProps = ComponentProps<'div'> & {\n permissionRequests: PermissionRequestEvent[];\n handleUpdatePermission: HandleUpdatePermission;\n};\n\nexport const PermissionRequestList = forwardRef<\n HTMLDivElement,\n PermissionRequestListProps\n>((props, ref) => {\n const { permissionRequests, handleUpdatePermission, ...rest } = props;\n\n const { t } = useI18n();\n\n return (\n <div className=\"str-video__permission-requests-list\" ref={ref} {...rest}>\n {permissionRequests.map((request, reqIndex) => {\n const { user, permissions } = request;\n return (\n <Fragment key={`${user.id}/${reqIndex}`}>\n {permissions.map((permission) => (\n <div className=\"str-video__permission-request\" key={permission}>\n <div className=\"str-video__permission-request__message\">\n {messageForPermission(user.name || user.id, permission, t)}\n </div>\n <Button\n className=\"str-video__permission-request__button--allow\"\n type=\"button\"\n onClick={handleUpdatePermission(request, 'grant')}\n >\n {t('Allow')}\n </Button>\n <Button\n className=\"str-video__permission-request__button--reject\"\n type=\"button\"\n onClick={handleUpdatePermission(request, 'revoke')}\n >\n {t('Revoke')}\n </Button>\n <Button\n className=\"str-video__permission-request__button--reject\"\n type=\"button\"\n onClick={handleUpdatePermission(request, 'dismiss')}\n >\n {t('Dismiss')}\n </Button>\n </div>\n ))}\n </Fragment>\n );\n })}\n </div>\n );\n});\n\nconst Button = (\n props: PropsWithChildren<ButtonHTMLAttributes<HTMLButtonElement>>,\n) => {\n const { className, ...rest } = props;\n return (\n <button\n className={clsx('str-video__permission-request__button', className)}\n {...rest}\n />\n );\n};\n\nconst messageForPermission = (\n userName: string,\n permission: string,\n t: TranslatorFunction,\n) => {\n switch (permission) {\n case OwnCapability.SEND_AUDIO:\n return t('{{ userName }} is requesting to speak', { userName });\n case OwnCapability.SEND_VIDEO:\n return t('{{ userName }} is requesting to share their camera', {\n userName,\n });\n case OwnCapability.SCREENSHARE:\n return t('{{ userName }} is requesting to present their screen', {\n userName,\n });\n default:\n return t('{{ userName }} is requesting permission: {{ permission }}', {\n userName,\n permission,\n });\n }\n};\n","import { ElementType, HTMLProps, PropsWithChildren } from 'react';\nimport clsx from 'clsx';\n\nexport type StreamThemeProps = HTMLProps<HTMLElement> & {\n as?: ElementType;\n};\n\nexport const StreamTheme = ({\n as: Component = 'div',\n className,\n children,\n ...props\n}: PropsWithChildren<StreamThemeProps>) => {\n return (\n <Component {...props} className={clsx('str-video', className)}>\n {children}\n </Component>\n );\n};\n","import {\n ComponentType,\n ReactEventHandler,\n useCallback,\n useEffect,\n useState,\n} from 'react';\nimport clsx from 'clsx';\nimport { disposeOfMediaStream } from '@stream-io/video-client';\nimport { BaseVideo } from '../../core/components/Video';\nimport {\n DEVICE_STATE,\n useMediaDevices,\n useOnUnavailableVideoDevices,\n useVideoDevices,\n} from '../../core';\nimport { LoadingIndicator } from '../LoadingIndicator';\n\nconst DefaultDisabledVideoPreview = () => {\n return <div>Video is disabled</div>;\n};\n\nconst DefaultNoCameraPreview = () => {\n return <div>No camera found</div>;\n};\n\ntype VideoErrorPreviewProps = {\n message?: string;\n};\nconst DefaultVideoErrorPreview = ({ message }: VideoErrorPreviewProps) => {\n return (\n <>\n <div>Error:</div>\n <p>{message || 'Unexpected error happened'}</p>\n </>\n );\n};\n\nexport type VideoPreviewProps = {\n /**\n * Component rendered when user turns off the video.\n */\n DisabledVideoPreview?: ComponentType;\n /**\n * Enforces mirroring of the video on the X axis. Defaults to true.\n */\n mirror?: boolean;\n /**\n * Component rendered when no camera devices are available.\n */\n NoCameraPreview?: ComponentType;\n /**\n * Component rendered above the BaseVideo until the video is ready (meaning until the play event is emitted).\n */\n StartingCameraPreview?: ComponentType;\n /**\n * Component rendered when the video stream could not be retrieved.\n */\n VideoErrorPreview?: ComponentType<VideoErrorPreviewProps>;\n};\n\nexport const VideoPreview = ({\n mirror = true,\n DisabledVideoPreview = DefaultDisabledVideoPreview,\n NoCameraPreview = DefaultNoCameraPreview,\n StartingCameraPreview = LoadingIndicator,\n VideoErrorPreview = DefaultVideoErrorPreview,\n}: VideoPreviewProps) => {\n const [stream, setStream] = useState<MediaStream>();\n const {\n selectedVideoDeviceId,\n getVideoStream,\n initialVideoState,\n setInitialVideoState,\n } = useMediaDevices();\n // When there are 0 video devices (e.g. when laptop lid closed),\n // we do not restart the video automatically when the device is again available,\n // but rather leave turning the video on manually to the user.\n useOnUnavailableVideoDevices(() =>\n setInitialVideoState(DEVICE_STATE.stopped),\n );\n const videoDevices = useVideoDevices();\n\n useEffect(() => {\n if (!initialVideoState.enabled) return;\n\n getVideoStream({ deviceId: selectedVideoDeviceId })\n .then((s) => {\n setStream((previousStream) => {\n if (previousStream) {\n disposeOfMediaStream(previousStream);\n }\n return s;\n });\n })\n .catch((e) =>\n setInitialVideoState({\n ...DEVICE_STATE.error,\n message: (e as Error).message,\n }),\n );\n return () => {\n setStream(undefined);\n };\n }, [\n initialVideoState,\n getVideoStream,\n selectedVideoDeviceId,\n setInitialVideoState,\n videoDevices.length,\n ]);\n\n useEffect(() => {\n if (initialVideoState.type === 'stopped') {\n setStream(undefined);\n }\n }, [initialVideoState]);\n\n const handleOnPlay: ReactEventHandler<HTMLVideoElement> = useCallback(() => {\n setInitialVideoState(DEVICE_STATE.playing);\n }, [setInitialVideoState]);\n\n let contents;\n if (initialVideoState.type === 'error') {\n contents = <VideoErrorPreview />;\n } else if (initialVideoState.type === 'stopped' && !videoDevices.length) {\n contents = <NoCameraPreview />;\n } else if (initialVideoState.enabled) {\n const loading = initialVideoState.type === 'starting';\n contents = (\n <>\n {stream && (\n <BaseVideo\n stream={stream}\n className={clsx('str-video__video-preview', {\n 'str-video__video-preview--mirror': mirror,\n 'str-video__video-preview--loading': loading,\n })}\n onPlay={handleOnPlay}\n />\n )}\n {loading && <StartingCameraPreview />}\n </>\n );\n } else {\n contents = <DisabledVideoPreview />;\n }\n\n return (\n <div className={clsx('str-video__video-preview-container')}>{contents}</div>\n );\n};\n","import { useEffect, useState } from 'react';\nimport { Call, StreamVideoParticipant } from '@stream-io/video-client';\n\nexport const DebugParticipantPublishQuality = (props: {\n participant: StreamVideoParticipant;\n call: Call;\n}) => {\n const { call, participant } = props;\n const [quality, setQuality] = useState<string>();\n const [publishStats, setPublishStats] = useState(() => ({\n f: true,\n h: true,\n q: true,\n }));\n\n useEffect(() => {\n return call.on('changePublishQuality', (event) => {\n if (event.eventPayload.oneofKind !== 'changePublishQuality') return;\n const { videoSenders } = event.eventPayload.changePublishQuality;\n // FIXME OL: support additional layers (like screenshare)\n const [videoLayer] = videoSenders.map(({ layers }) => {\n return layers.map((l) => ({ [l.name]: l.active }));\n });\n setPublishStats((s) => ({\n ...s,\n ...videoLayer,\n }));\n });\n }, [call]);\n\n return (\n <select\n title={`Published tracks: ${JSON.stringify(publishStats)}`}\n value={quality}\n onChange={(e) => {\n const value = e.target.value;\n setQuality(value);\n let w = 960;\n let h = 540;\n if (value === 'h') {\n w = w / 2; // 480\n h = h / 2; // 270\n } else if (value === 'q') {\n w = w / 4; // 240\n h = h / 4; // 135\n }\n call.updateSubscriptionsPartial('video', {\n [participant.sessionId]: {\n dimension: {\n width: w,\n height: h,\n },\n },\n });\n }}\n >\n <option value=\"f\">High (f)</option>\n <option value=\"h\">Medium (h)</option>\n <option value=\"q\">Low (q)</option>\n </select>\n );\n};\n","import { useEffect, useRef, useState } from 'react';\nimport { Call } from '@stream-io/video-client';\nimport { useFloatingUIPreset } from '../../hooks';\nimport { StatCard } from '../CallStats';\nimport { useCallStateHooks } from '@stream-io/video-react-bindings';\n\nexport const DebugStatsView = (props: {\n call: Call;\n mediaStream?: MediaStream;\n sessionId: string;\n userId: string;\n}) => {\n const { call, mediaStream, sessionId, userId } = props;\n const { useCallStatsReport } = useCallStateHooks();\n const callStatsReport = useCallStatsReport();\n\n useEffect(() => {\n call.startReportingStatsFor(sessionId);\n return () => {\n call.stopReportingStatsFor(sessionId);\n };\n }, [call, sessionId]);\n\n const reportForTracks = callStatsReport?.participants[sessionId];\n const trackStats = reportForTracks?.flatMap((report) => report.streams);\n\n const previousWidth = useRef<Record<string, number>>({ f: 0, h: 0, q: 0 });\n const previousHeight = useRef<Record<string, number>>({ f: 0, h: 0, q: 0 });\n trackStats?.forEach((track) => {\n if (track.kind !== 'video') return;\n const { frameWidth = 0, frameHeight = 0, rid = '' } = track;\n if (\n frameWidth !== previousWidth.current[rid] ||\n frameHeight !== previousHeight.current[rid]\n ) {\n const trackSize = `${frameWidth}x${frameHeight}`;\n console.log(`Track stats (${userId}/${sessionId}): ${rid}(${trackSize})`);\n previousWidth.current[rid] = frameWidth;\n previousHeight.current[rid] = frameHeight;\n }\n });\n\n const { refs, strategy, y, x } = useFloatingUIPreset({\n placement: 'top',\n strategy: 'absolute',\n });\n\n const [isPopperOpen, setIsPopperOpen] = useState(false);\n\n const [videoTrack] = mediaStream?.getVideoTracks() ?? [];\n const settings = videoTrack?.getSettings();\n return (\n <>\n <span\n className=\"str-video__debug__track-stats-icon\"\n tabIndex={0}\n ref={refs.setReference}\n title={\n settings &&\n `${settings.width}x${settings.height}@${Math.round(\n settings.frameRate || 0,\n )}`\n }\n onClick={() => {\n setIsPopperOpen((v) => !v);\n }}\n />\n {isPopperOpen && (\n <div\n className=\"str-video__debug__track-stats str-video__call-stats\"\n ref={refs.setFloating}\n style={{\n position: strategy,\n top: y ?? 0,\n left: x ?? 0,\n overflowY: 'auto',\n }}\n >\n <h3>Participant stats</h3>\n <div className=\"str-video__call-stats__card-container\">\n {trackStats\n ?.map((track) => {\n if (track.kind === 'video') {\n return (\n <StatCard\n key={`${track.rid}/${track.ssrc}/${track.codec}/${track.kind}`}\n label={\n `${track.kind}: ${track.codec} ` +\n (track.rid ? ` (${track.rid})` : '')\n }\n value={`${track.frameWidth || 0}x${\n track.frameHeight || 0\n }@${track.framesPerSecond || 0}fps`}\n />\n );\n } else if (track.kind === 'audio') {\n return (\n <StatCard\n key={`${track.ssrc}/${track.codec}/${track.kind}`}\n label={track.codec || 'N/A'}\n value={`Jitter: ${track.jitter || 0}ms`}\n />\n );\n }\n return null;\n })\n .filter(Boolean)}\n </div>\n {reportForTracks?.map((report, index) => (\n <pre key={index}>\n {JSON.stringify(unwrapStats(report.rawStats), null, 2)}\n </pre>\n ))}\n </div>\n )}\n </>\n );\n};\n\nconst unwrapStats = (rawStats?: RTCStatsReport) => {\n const decodedStats: Record<string, string> = {};\n rawStats?.forEach((s) => {\n decodedStats[s.id] = s;\n });\n return decodedStats;\n};\n","import { forwardRef } from 'react';\nimport { Placement } from '@floating-ui/react';\nimport { SfuModels } from '@stream-io/video-client';\nimport { useCall } from '@stream-io/video-react-bindings';\nimport { clsx } from 'clsx';\n\nimport {\n Icon,\n IconButton,\n MenuToggle,\n Notification,\n ParticipantActionsContextMenu,\n ToggleMenuButtonProps,\n} from '../../../components';\nimport { Reaction } from '../../../components/Reaction';\n\nimport { DebugParticipantPublishQuality } from '../../../components/Debug/DebugParticipantPublishQuality';\nimport { DebugStatsView } from '../../../components/Debug/DebugStatsView';\nimport { useIsDebugMode } from '../../../components/Debug/useIsDebugMode';\nimport { useParticipantViewContext } from './ParticipantView';\n\nexport type DefaultParticipantViewUIProps = {\n /**\n * Turns on/off the status indicator icons (mute, connection quality, etc...).\n */\n indicatorsVisible?: boolean;\n /**\n * Placement of the context menu component when opened\n */\n menuPlacement?: Placement;\n /**\n * Option to show/hide menu button component\n */\n showMenuButton?: boolean;\n};\n\nconst ToggleButton = forwardRef<HTMLButtonElement, ToggleMenuButtonProps>(\n (props, ref) => {\n return <IconButton enabled={props.menuShown} icon=\"ellipsis\" ref={ref} />;\n },\n);\n\nexport const DefaultScreenShareOverlay = () => {\n const call = useCall();\n\n const stopScreenShare = () => {\n call?.stopPublish(SfuModels.TrackType.SCREEN_SHARE).catch(console.error);\n };\n\n return (\n <div className=\"str-video__screen-share-overlay\">\n <Icon icon=\"screen-share-off\" />\n <span className=\"str-video__screen-share-overlay__title\">\n You are presenting your screen\n </span>\n <button\n onClick={stopScreenShare}\n className=\"str-video__screen-share-overlay__button\"\n >\n <Icon icon=\"close\" /> Stop Screen Sharing\n </button>\n </div>\n );\n};\n\nexport const DefaultParticipantViewUI = ({\n indicatorsVisible = true,\n menuPlacement = 'bottom-end',\n showMenuButton = true,\n}: DefaultParticipantViewUIProps) => {\n const { participant, participantViewElement, trackType, videoElement } =\n useParticipantViewContext();\n const { publishedTracks } = participant;\n\n const hasScreenShare = publishedTracks.includes(\n SfuModels.TrackType.SCREEN_SHARE,\n );\n\n if (\n participant.isLocalParticipant &&\n hasScreenShare &&\n trackType === 'screenShareTrack'\n ) {\n return (\n <>\n <DefaultScreenShareOverlay />\n <ParticipantDetails indicatorsVisible={indicatorsVisible} />\n </>\n );\n }\n\n return (\n <>\n {showMenuButton && (\n <MenuToggle\n strategy=\"fixed\"\n placement={menuPlacement}\n ToggleButton={ToggleButton}\n >\n <ParticipantActionsContextMenu\n participantViewElement={participantViewElement}\n participant={participant}\n videoElement={videoElement}\n />\n </MenuToggle>\n )}\n <Reaction participant={participant} />\n <ParticipantDetails indicatorsVisible={indicatorsVisible} />\n </>\n );\n};\n\nexport const ParticipantDetails = ({\n indicatorsVisible = true,\n}: Pick<DefaultParticipantViewUIProps, 'indicatorsVisible'>) => {\n const { participant } = useParticipantViewContext();\n const {\n isDominantSpeaker,\n isLocalParticipant,\n connectionQuality,\n publishedTracks,\n pin,\n sessionId,\n name,\n userId,\n videoStream,\n } = participant;\n const call = useCall()!;\n\n const connectionQualityAsString =\n !!connectionQuality &&\n SfuModels.ConnectionQuality[connectionQuality].toLowerCase();\n\n const hasAudio = publishedTracks.includes(SfuModels.TrackType.AUDIO);\n const hasVideo = publishedTracks.includes(SfuModels.TrackType.VIDEO);\n const canUnpin = !!pin && pin.isLocalPin;\n\n const isDebugMode = useIsDebugMode();\n\n return (\n <div className=\"str-video__participant-details\">\n <span className=\"str-video__participant-details__name\">\n {name || userId}\n {indicatorsVisible && isDominantSpeaker && (\n <span\n className=\"str-video__participant-details__name--dominant_speaker\"\n title=\"Dominant speaker\"\n />\n )}\n {indicatorsVisible && (\n <Notification\n isVisible={\n isLocalParticipant &&\n connectionQuality === SfuModels.ConnectionQuality.POOR\n }\n message=\"Poor connection quality. Please check your internet connection.\"\n >\n {connectionQualityAsString && (\n <span\n className={clsx(\n 'str-video__participant-details__connection-quality',\n `str-video__participant-details__connection-quality--${connectionQualityAsString}`,\n )}\n title={connectionQualityAsString}\n />\n )}\n </Notification>\n )}\n {indicatorsVisible && !hasAudio && (\n <span className=\"str-video__participant-details__name--audio-muted\" />\n )}\n {indicatorsVisible && !hasVideo && (\n <span className=\"str-video__participant-details__name--video-muted\" />\n )}\n {indicatorsVisible && canUnpin && (\n // TODO: remove this monstrosity once we have a proper design\n <span\n title=\"Unpin\"\n onClick={() => call?.unpin(sessionId)}\n style={{ cursor: 'pointer' }}\n className=\"str-video__participant-details__name--pinned\"\n />\n )}\n </span>\n {isDebugMode && (\n <>\n <DebugParticipantPublishQuality\n participant={participant}\n call={call}\n />\n <DebugStatsView\n call={call}\n sessionId={sessionId}\n userId={userId}\n mediaStream={videoStream}\n />\n </>\n )}\n </div>\n );\n};\n","import {\n ComponentType,\n createContext,\n forwardRef,\n ReactElement,\n useContext,\n useMemo,\n useState,\n} from 'react';\nimport clsx from 'clsx';\nimport {\n SfuModels,\n StreamVideoLocalParticipant,\n StreamVideoParticipant,\n VideoTrackType,\n} from '@stream-io/video-client';\n\nimport { Audio } from '../Audio';\nimport { Video, VideoProps } from '../Video';\nimport { useTrackElementVisibility } from '../../hooks';\nimport { DefaultParticipantViewUI } from './DefaultParticipantViewUI';\nimport { applyElementToRef, isComponentType } from '../../../utilities';\n\nexport type ParticipantViewContextValue = Required<\n Pick<ParticipantViewProps, 'participant' | 'trackType'>\n> & {\n participantViewElement: HTMLDivElement | null;\n videoElement: HTMLVideoElement | null;\n videoPlaceholderElement: HTMLDivElement | null;\n};\n\nconst ParticipantViewContext = createContext<\n ParticipantViewContextValue | undefined\n>(undefined);\n\nexport const useParticipantViewContext = () =>\n useContext(ParticipantViewContext) as ParticipantViewContextValue;\n\nexport type ParticipantViewProps = {\n /**\n * The participant whose video/audio stream we want to play.\n */\n participant: StreamVideoParticipant | StreamVideoLocalParticipant;\n\n /**\n * Override the default UI for rendering participant information/actions.\n * pass `null` if you wish to not render anything\n * @default DefaultParticipantViewUI\n */\n ParticipantViewUI?: ComponentType | ReactElement | null;\n\n /**\n * The kind of video stream to play for the given participant. The default value is `video`. You can use `none` if you're building an audio-only call.\n */\n trackType?: VideoTrackType | 'none';\n\n /**\n * This prop is only useful for advanced use-cases (for example building your own paginated layout). When set to `true` it will mute the give participant's audio stream on the client side. The local participant is always muted.\n */\n muteAudio?: boolean;\n\n /**\n * An object with set functions meant for exposing the video\n * and video placeholder elements to the integrators. It's useful when you want to attach custom event handlers to these elements.\n * - `refs.setVideoElement`\n * - `refs.setVideoPlaceholderElement`\n */\n refs?: VideoProps['refs'];\n\n /**\n * Custom class applied to the root DOM element.\n */\n className?: string;\n} & Pick<VideoProps, 'VideoPlaceholder'>;\n\nexport const ParticipantView = forwardRef<HTMLDivElement, ParticipantViewProps>(\n (\n {\n participant,\n trackType = 'videoTrack',\n muteAudio,\n refs: { setVideoElement, setVideoPlaceholderElement } = {},\n className,\n VideoPlaceholder,\n ParticipantViewUI = DefaultParticipantViewUI as ComponentType,\n },\n ref,\n ) => {\n const {\n isLocalParticipant,\n isSpeaking,\n isDominantSpeaker,\n publishedTracks,\n sessionId,\n } = participant;\n\n const hasAudio = publishedTracks.includes(SfuModels.TrackType.AUDIO);\n const hasVideo = publishedTracks.includes(SfuModels.TrackType.VIDEO);\n const hasScreenShareAudio = publishedTracks.includes(\n SfuModels.TrackType.SCREEN_SHARE_AUDIO,\n );\n\n const [trackedElement, setTrackedElement] = useState<HTMLDivElement | null>(\n null,\n );\n\n const [contextVideoElement, setContextVideoElement] =\n useState<HTMLVideoElement | null>(null);\n\n const [contextVideoPlaceholderElement, setContextVideoPlaceholderElement] =\n useState<HTMLDivElement | null>(null);\n\n // TODO: allow to pass custom ViewportTracker instance from props\n useTrackElementVisibility({\n sessionId,\n trackedElement,\n trackType,\n });\n\n const participantViewContextValue = useMemo(\n () => ({\n participant,\n participantViewElement: trackedElement,\n videoElement: contextVideoElement,\n videoPlaceholderElement: contextVideoPlaceholderElement,\n trackType,\n }),\n [\n contextVideoElement,\n contextVideoPlaceholderElement,\n participant,\n trackedElement,\n trackType,\n ],\n );\n\n const videoRefs: VideoProps['refs'] = useMemo(\n () => ({\n setVideoElement: (element) => {\n setVideoElement?.(element);\n setContextVideoElement(element);\n },\n setVideoPlaceholderElement: (element) => {\n setVideoPlaceholderElement?.(element);\n setContextVideoPlaceholderElement(element);\n },\n }),\n [setVideoElement, setVideoPlaceholderElement],\n );\n\n return (\n <div\n data-testid=\"participant-view\"\n ref={(element) => {\n applyElementToRef(ref, element);\n setTrackedElement(element);\n }}\n className={clsx(\n 'str-video__participant-view',\n isDominantSpeaker && 'str-video__participant-view--dominant-speaker',\n isSpeaking && 'str-video__participant-view--speaking',\n !hasVideo && 'str-video__participant-view--no-video',\n !hasAudio && 'str-video__participant-view--no-audio',\n className,\n )}\n >\n <ParticipantViewContext.Provider value={participantViewContextValue}>\n {/* mute the local participant, as we don't want to hear ourselves */}\n {!isLocalParticipant && !muteAudio && (\n <>\n {hasAudio && (\n <Audio participant={participant} trackType=\"audioTrack\" />\n )}\n {hasScreenShareAudio && (\n <Audio\n participant={participant}\n trackType=\"screenShareAudioTrack\"\n />\n )}\n </>\n )}\n <Video\n VideoPlaceholder={VideoPlaceholder}\n participant={participant}\n trackType={trackType}\n refs={videoRefs}\n autoPlay\n />\n {isComponentType(ParticipantViewUI) ? (\n <ParticipantViewUI />\n ) : (\n ParticipantViewUI\n )}\n </ParticipantViewContext.Provider>\n </div>\n );\n },\n);\n","import {\n createContext,\n PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from 'react';\nimport { map } from 'rxjs';\nimport {\n CallingState,\n checkIfAudioOutputChangeSupported,\n disposeOfMediaStream,\n getAudioStream,\n getVideoStream,\n SfuModels,\n watchForDisconnectedAudioOutputDevice,\n} from '@stream-io/video-client';\nimport { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';\n\nimport {\n useAudioInputDeviceFallback,\n useAudioOutputDeviceFallback,\n useAudioPublisher,\n useHasBrowserPermissions,\n useVideoDeviceFallback,\n useVideoPublisher,\n} from '../hooks';\n\ntype EnabledStateType = 'starting' | 'playing';\ntype DisabledStateType = 'uninitialized' | 'stopped';\ntype ErrorStateType = 'error';\ntype DeviceStateType = EnabledStateType | DisabledStateType | ErrorStateType;\n\ntype EnabledDeviceState<T extends EnabledStateType> = {\n type: T;\n enabled: true;\n};\ntype DisabledDeviceState<T extends DisabledStateType> = {\n type: T;\n enabled: false;\n};\ntype ErrorDeviceState = {\n type: 'error';\n message: string;\n enabled: false;\n};\n\ntype DeviceState =\n | EnabledDeviceState<EnabledStateType>\n | DisabledDeviceState<DisabledStateType>\n | ErrorDeviceState;\n\nconst DEVICE_STATE_TOGGLE: Record<DeviceStateType, 'starting' | 'stopped'> = {\n starting: 'stopped',\n playing: 'stopped',\n stopped: 'starting',\n uninitialized: 'starting',\n error: 'starting',\n};\n\n/**\n * Exclude types from documentation site, but we should still add doc comments\n * @internal\n */\nexport const DEVICE_STATE: {\n starting: EnabledDeviceState<'starting'>;\n playing: EnabledDeviceState<'playing'>;\n stopped: DisabledDeviceState<'stopped'>;\n uninitialized: DisabledDeviceState<'uninitialized'>;\n error: ErrorDeviceState;\n} = {\n starting: { type: 'starting', enabled: true },\n playing: { type: 'playing', enabled: true },\n stopped: { type: 'stopped', enabled: false },\n uninitialized: { type: 'uninitialized', enabled: false },\n error: { type: 'error', message: '', enabled: false },\n};\n\nconst DEFAULT_DEVICE_ID = 'default';\n\n/**\n * API to control device enablement, device selection and media stream access for a call.\n * @category Device Management\n */\nexport type MediaDevicesContextAPI = {\n /**\n * Deactivates MediaStream (stops and removes tracks) to be later garbage collected\n *\n * @param stream MediaStream\n * @returns void\n */\n disposeOfMediaStream: (stream: MediaStream) => void;\n /**\n * Returns an 'audioinput' media stream with the given `deviceId`, if no `deviceId` is provided, it uses the first available device.\n *\n * @param deviceId\n * @returns\n */\n getAudioStream: typeof getAudioStream;\n /**\n * Returns a 'videoinput' media stream with the given `deviceId`, if no `deviceId` is provided, it uses the first available device.\n *\n * @param deviceId\n * @returns\n */\n getVideoStream: typeof getVideoStream;\n /**\n * [Tells if the browser supports audio output change on 'audio' elements](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/setSinkId).\n */\n isAudioOutputChangeSupported: boolean;\n /**\n * Signals whether audio stream will be published when the call is joined.\n */\n initialAudioEnabled: boolean;\n /**\n * Signals whether audio stream will be published when the call is joined.\n */\n initialVideoState: DeviceState;\n /**\n * Publishes audio stream for currently selected audio input (microphone) device to other call participants.\n */\n publishAudioStream: () => Promise<void>;\n /**\n * Publishes video stream for currently selected video input (camera) device to other call participants.\n */\n publishVideoStream: () => Promise<void>;\n /**\n * Stops publishing audio stream for currently selected audio input (microphone) device to other call participants.\n */\n stopPublishingAudio: () => Promise<void>;\n /**\n * Stops publishing video stream for currently selected video input (camera) device to other call participants.\n */\n stopPublishingVideo: () => Promise<void>;\n /**\n * Sets the initialAudioEnabled flag to a given boolean value.\n * The latest value set will be used to decide, whether audio stream will be published when joining a call.\n * @param enabled\n */\n setInitialAudioEnabled: (enabled: boolean) => void;\n\n /**\n * Sets the initialVideoState to a given DeviceState value.\n * The latest value set will be used to decide, whether video stream will be published when joining a call.\n * @param enabled\n */\n setInitialVideoState: (state: DeviceState) => void;\n /**\n * Stores audio input device (microphone) id which is used to publish user's sound to other call participants.\n */\n selectedAudioInputDeviceId?: string;\n /**\n * Stores audio output device (speaker) id used to reproduce incoming audio from other call participants.\n */\n selectedAudioOutputDeviceId?: string;\n /**\n * Stores video input device (camera) id which is used to publish user's video to other call participants.\n */\n selectedVideoDeviceId?: string;\n /**\n * Function should be used to change selected device id.\n * The change is later reflected in selectedAudioInputDeviceId, selectedAudioOutputDeviceId or selectedVideoDeviceId depending on kind parameter.\n * @param kind\n * @param deviceId\n */\n switchDevice: (kind: MediaDeviceKind, deviceId?: string) => void;\n /**\n * Sets the initialAudioEnabled flag by negating the current state value.\n * The latest value set will be used to decide, whether audio stream will be published when joining a call.\n * @param enabled\n */\n toggleInitialAudioMuteState: () => void;\n /**\n * Sets the initialVideoState by toggling the current state DeviceState value.\n * The latest value set will be used to decide, whether video stream will be published when joining a call.\n * @param enabled\n */\n toggleInitialVideoMuteState: () => void;\n};\n\nconst MediaDevicesContext = createContext<MediaDevicesContextAPI | null>(null);\n\n/**\n * Configuration parameters for MediaDevicesProvider.\n * @category Device Management\n */\nexport type MediaDevicesProviderProps = {\n /**\n * Provides external control over the initial audio input (microphone) enablement. Overrides the default false.\n */\n initialAudioEnabled?: boolean;\n /**\n * Provides external control over the initial video input (camera) enablement. Overrides the default false.\n */\n initialVideoEnabled?: boolean;\n /**\n * Allows to override the default audio input (microphone) stream to be published. Overrides the default string 'default'.\n */\n initialAudioInputDeviceId?: string;\n /**\n * Allows to override the default audio output (speaker) device to reproduce incoming audio from the SFU. Overrides the default string 'default'.\n */\n initialAudioOutputDeviceId?: string;\n /**\n * Allows to override the default video input (camera) stream to be published. Overrides the default string 'default'.\n */\n initialVideoInputDeviceId?: string;\n};\n\n/**\n * Context provider that internally puts in place mechanisms that:\n * 1. fall back to selecting a default device when trying to switch to a non-existent device\n * 2. fall back to a default device when an active device is disconnected\n * 3. stop publishing a media stream when a non-default device is disconnected\n * 4. republish a media stream from the newly connected default device\n * 5. republish a media stream when a new device is selected\n *\n * Provides `MediaDevicesContextAPI` that allow the integrators to handle:\n * 1. the initial device state enablement (for example apt for lobby scenario)\n * 2. media stream retrieval and disposal\n * 3. media stream publishing\n * 4. specific device selection\n * @param params\n * @returns\n *\n * @category Device Management\n */\nexport const MediaDevicesProvider = ({\n children,\n initialAudioEnabled,\n initialVideoEnabled,\n initialVideoInputDeviceId = DEFAULT_DEVICE_ID,\n initialAudioOutputDeviceId = DEFAULT_DEVICE_ID,\n initialAudioInputDeviceId = DEFAULT_DEVICE_ID,\n}: PropsWithChildren<MediaDevicesProviderProps>) => {\n const call = useCall();\n const { useCallCallingState, useCallState, useCallSettings } =\n useCallStateHooks();\n const callingState = useCallCallingState();\n const callState = useCallState();\n const { localParticipant$ } = callState;\n const hasBrowserPermissionVideoInput = useHasBrowserPermissions(\n 'camera' as PermissionName,\n );\n const hasBrowserPermissionAudioInput = useHasBrowserPermissions(\n 'microphone' as PermissionName,\n );\n const [selectedAudioInputDeviceId, selectAudioInputDeviceId] = useState<\n MediaDevicesContextAPI['selectedAudioInputDeviceId']\n >(initialAudioInputDeviceId);\n const [selectedAudioOutputDeviceId, selectAudioOutputDeviceId] = useState<\n MediaDevicesContextAPI['selectedAudioOutputDeviceId']\n >(initialAudioOutputDeviceId);\n const [selectedVideoDeviceId, selectVideoDeviceId] = useState<\n MediaDevicesContextAPI['selectedVideoDeviceId']\n >(initialVideoInputDeviceId);\n\n const [isAudioOutputChangeSupported] = useState<boolean>(() =>\n checkIfAudioOutputChangeSupported(),\n );\n const [initAudioEnabled, setInitialAudioEnabled] = useState<boolean>(\n !!initialAudioEnabled,\n );\n const [initialVideoState, setInitialVideoState] = useState<DeviceState>(() =>\n initialVideoEnabled ? DEVICE_STATE.starting : DEVICE_STATE.uninitialized,\n );\n\n const settings = useCallSettings();\n useEffect(() => {\n if (!settings) return;\n const { audio, video } = settings;\n if (typeof initialAudioEnabled === 'undefined' && audio.mic_default_on) {\n setInitialAudioEnabled(audio.mic_default_on);\n }\n if (typeof initialVideoEnabled === 'undefined' && video.camera_default_on) {\n setInitialVideoState(DEVICE_STATE.starting);\n }\n }, [initialAudioEnabled, initialVideoEnabled, settings]);\n\n const publishVideoStream = useVideoPublisher({\n initialVideoMuted: !initialVideoState.enabled,\n videoDeviceId: selectedVideoDeviceId,\n });\n const publishAudioStream = useAudioPublisher({\n initialAudioMuted: !initAudioEnabled,\n audioDeviceId: selectedAudioInputDeviceId,\n });\n\n const stopPublishingAudio = useCallback(async () => {\n if (\n callingState === CallingState.IDLE ||\n callingState === CallingState.RINGING\n ) {\n setInitialAudioEnabled(false);\n } else {\n call?.stopPublish(SfuModels.TrackType.AUDIO);\n }\n }, [call, callingState]);\n\n const stopPublishingVideo = useCallback(async () => {\n if (\n callingState === CallingState.IDLE ||\n callingState === CallingState.RINGING\n ) {\n setInitialVideoState(DEVICE_STATE.stopped);\n } else {\n call?.stopPublish(SfuModels.TrackType.VIDEO);\n }\n }, [call, callingState]);\n\n const toggleInitialAudioMuteState = useCallback(\n () => setInitialAudioEnabled((prev) => !prev),\n [],\n );\n const toggleInitialVideoMuteState = useCallback(\n () =>\n setInitialVideoState((prev) => {\n const newType = DEVICE_STATE_TOGGLE[prev.type];\n return DEVICE_STATE[newType];\n }),\n [],\n );\n\n const switchDevice = useCallback(\n (kind: MediaDeviceKind, deviceId?: string) => {\n if (kind === 'videoinput') {\n selectVideoDeviceId(deviceId);\n }\n if (kind === 'audioinput') {\n selectAudioInputDeviceId(deviceId);\n }\n if (kind === 'audiooutput') {\n selectAudioOutputDeviceId(deviceId);\n }\n },\n [],\n );\n\n useAudioInputDeviceFallback(\n () => switchDevice('audioinput', DEFAULT_DEVICE_ID),\n hasBrowserPermissionAudioInput,\n selectedAudioInputDeviceId,\n );\n useAudioOutputDeviceFallback(\n () => switchDevice('audiooutput', DEFAULT_DEVICE_ID),\n // audiooutput devices can be enumerated only with microphone permissions\n hasBrowserPermissionAudioInput,\n selectedAudioOutputDeviceId,\n );\n useVideoDeviceFallback(\n () => switchDevice('videoinput', DEFAULT_DEVICE_ID),\n hasBrowserPermissionVideoInput,\n selectedVideoDeviceId,\n );\n\n useEffect(() => {\n if (!call || callingState !== CallingState.JOINED) return;\n call.setAudioOutputDevice(selectedAudioOutputDeviceId);\n }, [call, callingState, selectedAudioOutputDeviceId]);\n\n useEffect(() => {\n // audiooutput devices can be enumerated only with microphone permissions\n if (!localParticipant$ || !hasBrowserPermissionAudioInput) return;\n\n const subscription = watchForDisconnectedAudioOutputDevice(\n localParticipant$.pipe(map((p) => p?.audioOutputDeviceId)),\n ).subscribe(async () => {\n selectAudioOutputDeviceId(DEFAULT_DEVICE_ID);\n });\n return () => {\n subscription.unsubscribe();\n };\n }, [hasBrowserPermissionAudioInput, localParticipant$]);\n\n const contextValue: MediaDevicesContextAPI = {\n disposeOfMediaStream,\n getAudioStream,\n getVideoStream,\n isAudioOutputChangeSupported,\n selectedAudioInputDeviceId,\n selectedAudioOutputDeviceId,\n selectedVideoDeviceId,\n switchDevice,\n initialAudioEnabled: initAudioEnabled,\n initialVideoState,\n setInitialAudioEnabled,\n setInitialVideoState,\n toggleInitialAudioMuteState,\n toggleInitialVideoMuteState,\n publishAudioStream,\n publishVideoStream,\n stopPublishingAudio,\n stopPublishingVideo,\n };\n\n return (\n <MediaDevicesContext.Provider value={contextValue}>\n {children}\n </MediaDevicesContext.Provider>\n );\n};\n\n/**\n * Context consumer retrieving MediaDevicesContextAPI.\n * @returns\n *\n * @category Device Management\n */\nexport const useMediaDevices = () => {\n const value = useContext(MediaDevicesContext);\n if (!value) {\n console.warn(`Null MediaDevicesContext`);\n }\n return value as MediaDevicesContextAPI;\n};\n","import { PropsWithChildren } from 'react';\nimport { Call } from '@stream-io/video-client';\nimport { StreamCallProvider } from '@stream-io/video-react-bindings';\nimport {\n MediaDevicesProvider,\n MediaDevicesProviderProps,\n} from '../../contexts';\n\nexport type StreamCallProps = {\n call: Call;\n\n /**\n * An optional props to pass to the `MediaDevicesProvider`.\n */\n mediaDevicesProviderProps?: MediaDevicesProviderProps;\n};\n\nexport const StreamCall = ({\n children,\n call,\n mediaDevicesProviderProps,\n}: PropsWithChildren<StreamCallProps>) => {\n return (\n <StreamCallProvider call={call}>\n <MediaDevicesProvider {...mediaDevicesProviderProps}>\n {children}\n </MediaDevicesProvider>\n </StreamCallProvider>\n );\n};\n","import en from './en.json';\n\nexport const translations = { en };\n","import {\n StreamVideoProvider,\n StreamVideoProps,\n} from '@stream-io/video-react-bindings';\nimport { PropsWithChildren } from 'react';\nimport { translations } from '../../../translations';\n\nexport const StreamVideo = (props: PropsWithChildren<StreamVideoProps>) => {\n return (\n <StreamVideoProvider translationsOverrides={translations} {...props} />\n );\n};\n","import { useEffect } from 'react';\nimport {\n Call,\n CallTypes,\n combineComparators,\n Comparator,\n defaultSortPreset,\n paginatedLayoutSortPreset,\n screenSharing,\n speakerLayoutSortPreset,\n StreamVideoParticipant,\n} from '@stream-io/video-client';\n\nexport const usePaginatedLayoutSortPreset = (call: Call | undefined) => {\n useEffect(() => {\n if (!call) return;\n call.setSortParticipantsBy(paginatedLayoutSortPreset);\n return () => {\n resetSortPreset(call);\n };\n }, [call]);\n};\n\nexport const useSpeakerLayoutSortPreset = (\n call: Call | undefined,\n isOneOnOneCall: boolean,\n) => {\n useEffect(() => {\n if (!call) return;\n // always show the remote participant in the spotlight\n if (isOneOnOneCall) {\n call.setSortParticipantsBy(combineComparators(screenSharing, loggedIn));\n } else {\n call.setSortParticipantsBy(speakerLayoutSortPreset);\n }\n return () => {\n resetSortPreset(call);\n };\n }, [call, isOneOnOneCall]);\n};\n\nconst resetSortPreset = (call: Call) => {\n // reset the sorting to the default for the call type\n const callConfig = CallTypes.get(call.type);\n call.setSortParticipantsBy(\n callConfig.options.sortParticipantsBy || defaultSortPreset,\n );\n};\n\nconst loggedIn: Comparator<StreamVideoParticipant> = (a, b) => {\n if (a.isLocalParticipant) return 1;\n if (b.isLocalParticipant) return -1;\n return 0;\n};\n","import clsx from 'clsx';\nimport { useCallback, useEffect, useState } from 'react';\nimport {\n useCall,\n useCallStateHooks,\n useI18n,\n} from '@stream-io/video-react-bindings';\nimport { SfuModels, StreamVideoParticipant } from '@stream-io/video-client';\nimport { ParticipantView, useParticipantViewContext } from '../ParticipantView';\nimport { ParticipantsAudio } from '../Audio';\nimport { usePaginatedLayoutSortPreset } from './hooks';\n\n/**\n * The props for the {@link LivestreamLayout} component.\n */\nexport type LivestreamLayoutProps = {\n /**\n * Whether the livestream is muted. Defaults to `false`.\n */\n muted?: boolean;\n\n /**\n * Whether to show the participant count. Defaults to `true`.\n */\n showParticipantCount?: boolean;\n\n /**\n * Whether to enable fullscreen mode. Defaults to `true`.\n */\n enableFullScreen?: boolean;\n\n /**\n * Whether to show the duration of the call. Defaults to `true`.\n */\n showDuration?: boolean;\n\n /**\n * Whether to show the live badge. Defaults to `true`.\n */\n showLiveBadge?: boolean;\n\n /**\n * Whether to show the speaker name. Defaults to `false`.\n */\n showSpeakerName?: boolean;\n\n /**\n * The props to pass to the floating participant element.\n */\n floatingParticipantProps?: LivestreamLayoutProps & {\n /**\n * The position of the floating participant element. Defaults to `top-right`.\n */\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n };\n};\n\nexport const LivestreamLayout = (props: LivestreamLayoutProps) => {\n const { useParticipants, useRemoteParticipants, useHasOngoingScreenShare } =\n useCallStateHooks();\n const call = useCall();\n const [currentSpeaker, ...otherParticipants] = useParticipants();\n const remoteParticipants = useRemoteParticipants();\n const hasOngoingScreenShare = useHasOngoingScreenShare();\n const presenter = hasOngoingScreenShare\n ? hasScreenShare(currentSpeaker) && currentSpeaker\n : otherParticipants.find(hasScreenShare);\n\n usePaginatedLayoutSortPreset(call);\n\n const Overlay = (\n <ParticipantOverlay\n showParticipantCount={props.showParticipantCount}\n showDuration={props.showDuration}\n showLiveBadge={props.showLiveBadge}\n showSpeakerName={props.showSpeakerName}\n />\n );\n\n const { floatingParticipantProps } = props;\n const FloatingParticipantOverlay = hasOngoingScreenShare && (\n <ParticipantOverlay\n // these elements aren't needed for the video feed\n showParticipantCount={\n floatingParticipantProps?.showParticipantCount ?? false\n }\n showDuration={floatingParticipantProps?.showDuration ?? false}\n showLiveBadge={floatingParticipantProps?.showLiveBadge ?? false}\n showSpeakerName={floatingParticipantProps?.showSpeakerName ?? true}\n />\n );\n\n return (\n <div className=\"str-video__livestream-layout__wrapper\">\n <ParticipantsAudio participants={remoteParticipants} />\n {hasOngoingScreenShare && presenter && (\n <ParticipantView\n className=\"str-video__livestream-layout__screen-share\"\n participant={presenter}\n ParticipantViewUI={Overlay}\n trackType=\"screenShareTrack\"\n muteAudio // audio is rendered by ParticipantsAudio\n />\n )}\n {currentSpeaker && (\n <ParticipantView\n className={clsx(\n hasOngoingScreenShare &&\n clsx(\n 'str-video__livestream-layout__floating-participant',\n `str-video__livestream-layout__floating-participant--${\n floatingParticipantProps?.position ?? 'top-right'\n }`,\n ),\n )}\n participant={currentSpeaker}\n ParticipantViewUI={FloatingParticipantOverlay || Overlay}\n muteAudio // audio is rendered by ParticipantsAudio\n />\n )}\n </div>\n );\n};\n\nconst hasScreenShare = (p?: StreamVideoParticipant) =>\n !!p?.publishedTracks.includes(SfuModels.TrackType.SCREEN_SHARE);\n\nconst ParticipantOverlay = (props: {\n enableFullScreen?: boolean;\n showParticipantCount?: boolean;\n showDuration?: boolean;\n showLiveBadge?: boolean;\n showSpeakerName?: boolean;\n}) => {\n const {\n enableFullScreen = true,\n showParticipantCount = true,\n showDuration = true,\n showLiveBadge = true,\n showSpeakerName = false,\n } = props;\n const { participant } = useParticipantViewContext();\n const { useParticipantCount } = useCallStateHooks();\n const participantCount = useParticipantCount();\n const duration = useUpdateCallDuration();\n const toggleFullScreen = useToggleFullScreen();\n const { t } = useI18n();\n return (\n <div className=\"str-video__livestream-layout__overlay\">\n <div className=\"str-video__livestream-layout__overlay__bar\">\n {showLiveBadge && (\n <span className=\"str-video__livestream-layout__live-badge\">\n {t('Live')}\n </span>\n )}\n {showParticipantCount && (\n <span className=\"str-video__livestream-layout__viewers-count\">\n {participantCount}\n </span>\n )}\n {showSpeakerName && (\n <span\n className=\"str-video__livestream-layout__speaker-name\"\n title={participant.name || participant.userId || ''}\n >\n {participant.name || participant.userId || ''}\n </span>\n )}\n {showDuration && (\n <span className=\"str-video__livestream-layout__duration\">\n {formatDuration(duration)}\n </span>\n )}\n {enableFullScreen && (\n <span\n className=\"str-video__livestream-layout__go-fullscreen\"\n onClick={toggleFullScreen}\n />\n )}\n </div>\n </div>\n );\n};\n\nconst useUpdateCallDuration = () => {\n const { useIsCallLive, useCallSession } = useCallStateHooks();\n const isCallLive = useIsCallLive();\n const session = useCallSession();\n const [duration, setDuration] = useState(() => {\n if (!session || !session.live_started_at) return 0;\n const liveStartTime = new Date(session.live_started_at);\n const now = new Date();\n return Math.floor((now.getTime() - liveStartTime.getTime()) / 1000);\n });\n\n useEffect(() => {\n if (!isCallLive) return;\n const interval = setInterval(() => {\n setDuration((d) => d + 1);\n }, 1000);\n return () => {\n clearInterval(interval);\n };\n }, [isCallLive]);\n\n return duration;\n};\n\nconst useToggleFullScreen = () => {\n const { participantViewElement } = useParticipantViewContext();\n const [isFullscreen, setIsFullscreen] = useState(false);\n return useCallback(() => {\n if (isFullscreen) {\n document.exitFullscreen().then(() => {\n setIsFullscreen(false);\n });\n } else {\n participantViewElement?.requestFullscreen().then(() => {\n setIsFullscreen(true);\n });\n }\n }, [isFullscreen, participantViewElement]);\n};\n\nconst formatDuration = (durationInMs: number) => {\n const days = Math.floor(durationInMs / 86400);\n const hours = Math.floor(durationInMs / 3600);\n const minutes = Math.floor((durationInMs % 3600) / 60);\n const seconds = durationInMs % 60;\n\n return `${days ? days + ' ' : ''}${hours ? hours + ':' : ''}${\n minutes < 10 ? '0' : ''\n }${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;\n};\n","import { useEffect, useMemo, useState } from 'react';\nimport { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';\nimport {\n StreamVideoLocalParticipant,\n StreamVideoParticipant,\n} from '@stream-io/video-client';\nimport clsx from 'clsx';\n\nimport {\n DefaultParticipantViewUI,\n ParticipantView,\n ParticipantViewProps,\n} from '../ParticipantView';\nimport { ParticipantsAudio } from '../Audio';\nimport { IconButton } from '../../../components';\nimport { chunk } from '../../../utilities';\nimport { usePaginatedLayoutSortPreset } from './hooks';\n\nconst GROUP_SIZE = 16;\n\ntype PaginatedGridLayoutGroupProps = {\n /**\n * The group of participants to render.\n */\n group: Array<StreamVideoParticipant | StreamVideoLocalParticipant>;\n} & Pick<ParticipantViewProps, 'VideoPlaceholder'> &\n Required<Pick<ParticipantViewProps, 'ParticipantViewUI'>>;\n\nconst PaginatedGridLayoutGroup = ({\n group,\n VideoPlaceholder,\n ParticipantViewUI,\n}: PaginatedGridLayoutGroupProps) => {\n return (\n <div\n className={clsx('str-video__paginated-grid-layout__group', {\n 'str-video__paginated-grid-layout--one': group.length === 1,\n 'str-video__paginated-grid-layout--two-four':\n group.length >= 2 && group.length <= 4,\n 'str-video__paginated-grid-layout--five-nine':\n group.length >= 5 && group.length <= 9,\n })}\n >\n {group.map((participant) => (\n <ParticipantView\n key={participant.sessionId}\n participant={participant}\n muteAudio\n VideoPlaceholder={VideoPlaceholder}\n ParticipantViewUI={ParticipantViewUI}\n />\n ))}\n </div>\n );\n};\n\nexport type PaginatedGridLayoutProps = {\n /**\n * The number of participants to display per page.\n */\n groupSize?: number;\n\n /**\n * Whether to exclude the local participant from the grid.\n */\n excludeLocalParticipant?: boolean;\n\n /**\n * Turns on/off the pagination arrows.\n */\n pageArrowsVisible?: boolean;\n} & Pick<ParticipantViewProps, 'ParticipantViewUI' | 'VideoPlaceholder'>;\n\nexport const PaginatedGridLayout = ({\n groupSize = GROUP_SIZE,\n excludeLocalParticipant = false,\n pageArrowsVisible = true,\n VideoPlaceholder,\n ParticipantViewUI = DefaultParticipantViewUI,\n}: PaginatedGridLayoutProps) => {\n const [page, setPage] = useState(0);\n const [\n paginatedGridLayoutWrapperElement,\n setPaginatedGridLayoutWrapperElement,\n ] = useState<HTMLDivElement | null>(null);\n\n const call = useCall();\n const { useParticipants, useRemoteParticipants } = useCallStateHooks();\n const participants = useParticipants();\n // used to render audio elements\n const remoteParticipants = useRemoteParticipants();\n\n usePaginatedLayoutSortPreset(call);\n\n useEffect(() => {\n if (!paginatedGridLayoutWrapperElement || !call) return;\n\n const cleanup = call.setViewport(paginatedGridLayoutWrapperElement);\n\n return () => cleanup();\n }, [paginatedGridLayoutWrapperElement, call]);\n\n // only used to render video elements\n const participantGroups = useMemo(\n () =>\n chunk(\n excludeLocalParticipant ? remoteParticipants : participants,\n groupSize,\n ),\n [excludeLocalParticipant, remoteParticipants, participants, groupSize],\n );\n\n const pageCount = participantGroups.length;\n\n // update page when page count is reduced and selected page no longer exists\n useEffect(() => {\n if (page > pageCount - 1) {\n setPage(Math.max(0, pageCount - 1));\n }\n }, [page, pageCount]);\n\n const selectedGroup = participantGroups[page];\n\n if (!call) return null;\n\n return (\n <div\n className=\"str-video__paginated-grid-layout__wrapper\"\n ref={setPaginatedGridLayoutWrapperElement}\n >\n <ParticipantsAudio participants={remoteParticipants} />\n <div className=\"str-video__paginated-grid-layout\">\n {pageArrowsVisible && pageCount > 1 && (\n <IconButton\n icon=\"caret-left\"\n disabled={page === 0}\n onClick={() =>\n setPage((currentPage) => Math.max(0, currentPage - 1))\n }\n />\n )}\n {selectedGroup && (\n <PaginatedGridLayoutGroup\n group={participantGroups[page]}\n VideoPlaceholder={VideoPlaceholder}\n ParticipantViewUI={ParticipantViewUI}\n />\n )}\n {pageArrowsVisible && pageCount > 1 && (\n <IconButton\n disabled={page === pageCount - 1}\n icon=\"caret-right\"\n onClick={() =>\n setPage((currentPage) => Math.min(pageCount - 1, currentPage + 1))\n }\n />\n )}\n </div>\n </div>\n );\n};\n","import { useEffect, useState } from 'react';\n\nexport const useCalculateHardLimit = (\n /**\n * Element that stretches to 100% of the whole layout component\n */\n wrapperElement: HTMLDivElement | null,\n /**\n * Element that directly hosts individual `ParticipantView` (or wrapper) elements\n */\n hostElement: HTMLDivElement | null,\n limit?: 'dynamic' | number,\n) => {\n const [calculatedLimit, setCalculatedLimit] = useState<{\n vertical: number | null;\n horizontal: number | null;\n }>({\n vertical: typeof limit === 'number' ? limit : null,\n horizontal: typeof limit === 'number' ? limit : null,\n });\n\n useEffect(() => {\n if (\n !hostElement ||\n !wrapperElement ||\n typeof limit === 'number' ||\n typeof limit === 'undefined'\n )\n return;\n\n let childWidth: number | null = null;\n let childHeight: number | null = null;\n\n const resizeObserver = new ResizeObserver((entries, observer) => {\n // this part should ideally run as little times as possible\n // get child measurements and disconnect\n // does not consider dynamically sized children\n // this hook is for SpeakerLayout use only, where children in the bar are fixed size\n if (entries.length > 1) {\n const child = hostElement.firstChild as HTMLElement | null;\n\n if (child) {\n childHeight = child.clientHeight;\n childWidth = child.clientWidth;\n observer.unobserve(hostElement);\n }\n }\n\n // keep the state at { vertical: 1, horizontal: 1 }\n // until we get the proper child measurements\n if (childHeight === null || childWidth === null) return;\n\n const vertical = Math.floor(wrapperElement.clientHeight / childHeight);\n const horizontal = Math.floor(wrapperElement.clientWidth / childWidth);\n\n setCalculatedLimit((pv) => {\n if (pv.vertical !== vertical || pv.horizontal !== horizontal)\n return { vertical, horizontal };\n return pv;\n });\n });\n\n resizeObserver.observe(wrapperElement);\n resizeObserver.observe(hostElement);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [hostElement, limit, wrapperElement]);\n\n return calculatedLimit;\n};\n","import { useEffect, useState } from 'react';\nimport clsx from 'clsx';\nimport { SfuModels, StreamVideoParticipant } from '@stream-io/video-client';\nimport { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';\n\nimport {\n DefaultParticipantViewUI,\n ParticipantView,\n ParticipantViewProps,\n} from '../ParticipantView';\nimport { IconButton } from '../../../components';\nimport {\n useHorizontalScrollPosition,\n useVerticalScrollPosition,\n} from '../../../hooks';\nimport { useSpeakerLayoutSortPreset } from './hooks';\nimport { useCalculateHardLimit } from '../../hooks/useCalculateHardLimit';\nimport { ParticipantsAudio } from '../Audio';\n\nexport type SpeakerLayoutProps = {\n ParticipantViewUISpotlight?: ParticipantViewProps['ParticipantViewUI'];\n ParticipantViewUIBar?: ParticipantViewProps['ParticipantViewUI'];\n /**\n * The position of the participants who are not in focus.\n * Providing `null` will hide the bar.\n */\n participantsBarPosition?: 'top' | 'bottom' | 'left' | 'right' | null;\n /**\n * Hard limits the number of the participants rendered in the participants bar.\n * Providing string `dynamic` will calculate hard limit based on screen width/height.\n */\n participantsBarLimit?: 'dynamic' | number;\n} & Pick<ParticipantViewProps, 'VideoPlaceholder'>;\n\nconst DefaultParticipantViewUIBar = () => (\n <DefaultParticipantViewUI menuPlacement=\"top-end\" />\n);\n\nconst DefaultParticipantViewUISpotlight = () => <DefaultParticipantViewUI />;\n\nexport const SpeakerLayout = ({\n ParticipantViewUIBar = DefaultParticipantViewUIBar,\n ParticipantViewUISpotlight = DefaultParticipantViewUISpotlight,\n VideoPlaceholder,\n participantsBarPosition = 'bottom',\n participantsBarLimit,\n}: SpeakerLayoutProps) => {\n const call = useCall();\n const { useParticipants, useRemoteParticipants } = useCallStateHooks();\n const [participantInSpotlight, ...otherParticipants] = useParticipants();\n const remoteParticipants = useRemoteParticipants();\n const [participantsBarWrapperElement, setParticipantsBarWrapperElement] =\n useState<HTMLDivElement | null>(null);\n const [participantsBarElement, setParticipantsBarElement] =\n useState<HTMLDivElement | null>(null);\n const [buttonsWrapperElement, setButtonsWrapperElement] =\n useState<HTMLDivElement | null>(null);\n\n const isSpeakerScreenSharing = hasScreenShare(participantInSpotlight);\n const hardLimit = useCalculateHardLimit(\n buttonsWrapperElement,\n participantsBarElement,\n participantsBarLimit,\n );\n\n const isVertical =\n participantsBarPosition === 'left' || participantsBarPosition === 'right';\n const isHorizontal =\n participantsBarPosition === 'top' || participantsBarPosition === 'bottom';\n\n useEffect(() => {\n if (!participantsBarWrapperElement || !call) return;\n\n const cleanup = call.setViewport(participantsBarWrapperElement);\n\n return () => cleanup();\n }, [participantsBarWrapperElement, call]);\n\n const isOneOnOneCall = otherParticipants.length === 1;\n useSpeakerLayoutSortPreset(call, isOneOnOneCall);\n\n let participantsWithAppliedLimit = otherParticipants;\n\n const hardLimitToApply = isVertical\n ? hardLimit.vertical\n : hardLimit.horizontal;\n\n if (\n typeof participantsBarLimit !== 'undefined' &&\n hardLimitToApply !== null\n ) {\n participantsWithAppliedLimit = otherParticipants.slice(\n 0,\n // subtract 1 if speaker is sharing screen as\n // that one is rendered independently from otherParticipants array\n hardLimitToApply - (isSpeakerScreenSharing ? 1 : 0),\n );\n }\n\n if (!call) return null;\n\n return (\n <div className=\"str-video__speaker-layout__wrapper\">\n <ParticipantsAudio participants={remoteParticipants} />\n <div\n className={clsx(\n 'str-video__speaker-layout',\n participantsBarPosition &&\n `str-video__speaker-layout--variant-${participantsBarPosition}`,\n )}\n >\n <div className=\"str-video__speaker-layout__spotlight\">\n {participantInSpotlight && (\n <ParticipantView\n participant={participantInSpotlight}\n muteAudio={true}\n trackType={\n isSpeakerScreenSharing ? 'screenShareTrack' : 'videoTrack'\n }\n ParticipantViewUI={ParticipantViewUISpotlight}\n VideoPlaceholder={VideoPlaceholder}\n />\n )}\n </div>\n {participantsWithAppliedLimit.length > 0 && participantsBarPosition && (\n <div\n ref={setButtonsWrapperElement}\n className=\"str-video__speaker-layout__participants-bar-buttons-wrapper\"\n >\n <div\n className=\"str-video__speaker-layout__participants-bar-wrapper\"\n ref={setParticipantsBarWrapperElement}\n >\n <div\n ref={setParticipantsBarElement}\n className=\"str-video__speaker-layout__participants-bar\"\n >\n {isSpeakerScreenSharing && (\n <div\n className=\"str-video__speaker-layout__participant-tile\"\n key={participantInSpotlight.sessionId}\n >\n <ParticipantView\n participant={participantInSpotlight}\n ParticipantViewUI={ParticipantViewUIBar}\n VideoPlaceholder={VideoPlaceholder}\n muteAudio={true}\n />\n </div>\n )}\n {participantsWithAppliedLimit.map((participant) => (\n <div\n className=\"str-video__speaker-layout__participant-tile\"\n key={participant.sessionId}\n >\n <ParticipantView\n participant={participant}\n ParticipantViewUI={ParticipantViewUIBar}\n VideoPlaceholder={VideoPlaceholder}\n muteAudio={true}\n />\n </div>\n ))}\n </div>\n </div>\n {isVertical && (\n <VerticalScrollButtons\n scrollWrapper={participantsBarWrapperElement}\n />\n )}\n {isHorizontal && (\n <HorizontalScrollButtons\n scrollWrapper={participantsBarWrapperElement}\n />\n )}\n </div>\n )}\n </div>\n </div>\n );\n};\n\ntype ScrollButtonsProps<T extends HTMLElement> = {\n scrollWrapper: T | null;\n};\n\nconst HorizontalScrollButtons = <T extends HTMLElement>({\n scrollWrapper,\n}: ScrollButtonsProps<T>) => {\n const scrollPosition = useHorizontalScrollPosition(scrollWrapper);\n\n const scrollStartClickHandler = () => {\n scrollWrapper?.scrollBy({ left: -150, behavior: 'smooth' });\n };\n\n const scrollEndClickHandler = () => {\n scrollWrapper?.scrollBy({ left: 150, behavior: 'smooth' });\n };\n return (\n <>\n {scrollPosition && scrollPosition !== 'start' && (\n <IconButton\n onClick={scrollStartClickHandler}\n icon=\"caret-left\"\n className=\"str-video__speaker-layout__participants-bar--button-left\"\n />\n )}\n {scrollPosition && scrollPosition !== 'end' && (\n <IconButton\n onClick={scrollEndClickHandler}\n icon=\"caret-right\"\n className=\"str-video__speaker-layout__participants-bar--button-right\"\n />\n )}\n </>\n );\n};\n\nconst VerticalScrollButtons = <T extends HTMLElement>({\n scrollWrapper,\n}: ScrollButtonsProps<T>) => {\n const scrollPosition = useVerticalScrollPosition(scrollWrapper);\n\n const scrollTopClickHandler = () => {\n scrollWrapper?.scrollBy({ top: -150, behavior: 'smooth' });\n };\n\n const scrollBottomClickHandler = () => {\n scrollWrapper?.scrollBy({ top: 150, behavior: 'smooth' });\n };\n return (\n <>\n {scrollPosition && scrollPosition !== 'top' && (\n <IconButton\n onClick={scrollTopClickHandler}\n icon=\"caret-up\"\n className=\"str-video__speaker-layout__participants-bar--button-top\"\n />\n )}\n {scrollPosition && scrollPosition !== 'bottom' && (\n <IconButton\n onClick={scrollBottomClickHandler}\n icon=\"caret-down\"\n className=\"str-video__speaker-layout__participants-bar--button-bottom\"\n />\n )}\n </>\n );\n};\n\nconst hasScreenShare = (p?: StreamVideoParticipant) =>\n !!p?.publishedTracks.includes(SfuModels.TrackType.SCREEN_SHARE);\n","import { setSdkInfo, SfuModels } from '@stream-io/video-client';\n\nexport * from '@stream-io/video-client';\nexport * from '@stream-io/video-react-bindings';\n\nexport * from './src/core';\n\nexport * from './src/components';\nexport * from './src/types';\nexport * from './src/translations';\nexport {\n useHorizontalScrollPosition,\n useVerticalScrollPosition,\n useToggleAudioMuteState,\n useToggleVideoMuteState,\n} from './src/hooks';\n\nconst [major, minor, patch] = (\n process.env.PKG_VERSION || '0.0.0-development'\n).split('.');\n\nsetSdkInfo({\n type: SfuModels.SdkType.REACT,\n major,\n minor,\n patch,\n});\n"],"names":["useCall","useState","useEffect","_jsx","SfuModels","_createElement","isValidElement","forwardRef","Browsers","_jsxs","Video","useLayoutEffect","VisibilityState","_Fragment","getVideoDevices","getAudioDevices","getAudioOutputDevices","pairwise","useCallStateHooks","useCallback","OwnCapability","getAudioStream","useRef","CallingState","watchForDisconnectedAudioDevice","map","watchForAddedDefaultAudioDevice","useMemo","getVideoStream","watchForDisconnectedVideoDevice","watchForAddedDefaultVideoDevice","VideoSettingsCameraFacingEnum","useFloating","offset","shift","flip","size","autoUpdate","useHasPermissions","getScreenShareStream","clsx","ToggleMenuButton","useI18n","createSoundDetector","ResponsiveLine","Restricted","ToggleButton","useConnectedUser","LoadingIndicator","DefaultLoadingIndicator","name","CallRecordingListHeader","DefaultCallRecordingListHeader","CallRecordingListItem","DefaultCallRecordingListItem","DefaultEmptyCallRecordingList","DefaultLoadingCallRecordingList","Fragment","disposeOfMediaStream","createContext","useContext","checkIfAudioOutputChangeSupported","watchForDisconnectedAudioOutputDevice","StreamCallProvider","StreamVideoProvider","paginatedLayoutSortPreset","combineComparators","screenSharing","speakerLayoutSortPreset","CallTypes","defaultSortPreset","hasScreenShare","setSdkInfo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../src/core/components/Audio/Audio.tsx","../../src/core/components/Audio/ParticipantsAudio.tsx","../../src/utilities/isComponentType.ts","../../src/utilities/chunk.ts","../../src/utilities/applyElementToRef.ts","../../src/core/components/Video/BaseVideo.tsx","../../src/core/components/Video/DefaultVideoPlaceholder.tsx","../../src/core/components/Video/Video.tsx","../../src/core/hooks/useDevices.ts","../../src/core/hooks/useAudioPublisher.ts","../../src/components/Debug/useIsDebugMode.ts","../../src/core/hooks/useVideoPublisher.ts","../../src/core/hooks/useTrackElementVisibility.ts","../../src/components/Avatar/Avatar.tsx","../../src/hooks/useFloatingUIPreset.ts","../../src/hooks/useScrollPosition.ts","../../src/hooks/useRequestPermission.ts","../../src/hooks/useToggleAudioMuteState.ts","../../src/hooks/useToggleVideoMuteState.ts","../../src/hooks/useToggleScreenShare.ts","../../src/hooks/useToggleCallRecording.ts","../../src/components/Menu/MenuToggle.tsx","../../src/components/Menu/GenericMenu.tsx","../../src/components/Icon/Icon.tsx","../../src/components/Button/IconButton.tsx","../../src/components/Button/CompositeButton.tsx","../../src/components/Tooltip/Tooltip.tsx","../../src/components/Tooltip/hooks/useEnterLeaveHandlers.ts","../../src/components/Tooltip/WithTooltip.tsx","../../src/components/Button/CopyToClipboardButton.tsx","../../src/components/Button/TextButton.tsx","../../src/components/CallControls/AcceptCallButton.tsx","../../src/components/Notification/Notification.tsx","../../src/components/Notification/PermissionNotification.tsx","../../src/components/Notification/SpeakingWhileMutedNotification.tsx","../../src/components/CallControls/CallControls.tsx","../../src/components/CallStats/CallStatsLatencyChart.tsx","../../src/components/CallStats/CallStats.tsx","../../src/components/CallControls/CallStatsButton.tsx","../../src/components/CallControls/CancelCallButton.tsx","../../src/components/Reaction/Reaction.tsx","../../src/components/CallControls/ReactionsButton.tsx","../../src/components/LoadingIndicator/LoadingIndicator.tsx","../../src/components/CallControls/RecordCallButton.tsx","../../src/components/CallControls/ScreenShareButton.tsx","../../src/components/DeviceSettings/DeviceSelector.tsx","../../src/components/DeviceSettings/DeviceSelectorAudio.tsx","../../src/components/DeviceSettings/DeviceSelectorVideo.tsx","../../src/components/DeviceSettings/DeviceSettings.tsx","../../src/components/CallControls/ToggleAudioButton.tsx","../../src/components/CallControls/ToggleAudioOutputButton.tsx","../../src/components/CallControls/ToggleVideoButton.tsx","../../src/components/CallParticipantsList/BlockedUserListing.tsx","../../src/components/CallParticipantsList/CallParticipantListHeader.tsx","../../src/components/CallParticipantsList/CallParticipantListingItem.tsx","../../src/components/CallParticipantsList/CallParticipantListing.tsx","../../src/components/CallParticipantsList/EmptyParticipantSearchList.tsx","../../src/components/Search/SearchInput.tsx","../../src/components/Search/SearchResults.tsx","../../src/components/Search/hooks/useSearch.ts","../../src/components/CallParticipantsList/CallParticipantsList.tsx","../../src/components/CallPreview/CallPreview.tsx","../../src/components/CallRecordingList/CallRecordingListHeader.tsx","../../src/components/CallRecordingList/CallRecordingListItem.tsx","../../src/components/CallRecordingList/EmptyCallRecordingListing.tsx","../../src/components/CallRecordingList/LoadingCallRecordingListing.tsx","../../src/components/CallRecordingList/CallRecordingList.tsx","../../src/components/RingingCall/RingingCallControls.tsx","../../src/components/RingingCall/RingingCall.tsx","../../src/components/Permissions/PermissionRequests.tsx","../../src/components/StreamTheme/StreamTheme.tsx","../../src/components/Video/VideoPreview.tsx","../../src/components/Debug/DebugParticipantPublishQuality.tsx","../../src/components/Debug/DebugStatsView.tsx","../../src/core/components/ParticipantView/DefaultParticipantViewUI.tsx","../../src/core/components/ParticipantView/ParticipantView.tsx","../../src/core/contexts/MediaDevicesContext.tsx","../../src/core/components/StreamCall/StreamCall.tsx","../../src/translations/index.ts","../../src/core/components/StreamVideo/StreamVideo.tsx","../../src/core/components/CallLayout/hooks.ts","../../src/core/components/CallLayout/LivestreamLayout.tsx","../../src/core/components/CallLayout/PaginatedGridLayout.tsx","../../src/core/hooks/useCalculateHardLimit.ts","../../src/core/components/CallLayout/SpeakerLayout.tsx","../../index.ts"],"sourcesContent":["import { ComponentPropsWithoutRef, useEffect, useState } from 'react';\nimport {\n AudioTrackType,\n StreamVideoParticipant,\n} from '@stream-io/video-client';\nimport { useCall } from '@stream-io/video-react-bindings';\n\nexport type AudioProps = ComponentPropsWithoutRef<'audio'> & {\n /**\n * The participant whose audio stream we want to play.\n */\n participant: StreamVideoParticipant;\n\n /**\n * The type of audio stream to play for the given participant.\n * The default value is `audioTrack`.\n */\n trackType?: AudioTrackType;\n};\n\nexport const Audio = ({\n participant,\n trackType = 'audioTrack',\n ...rest\n}: AudioProps) => {\n const call = useCall();\n const [audioElement, setAudioElement] = useState<HTMLAudioElement | null>(\n null,\n );\n const { userId, sessionId } = participant;\n\n useEffect(() => {\n if (!call || !audioElement) return;\n const cleanup = call.bindAudioElement(audioElement, sessionId, trackType);\n return () => {\n cleanup?.();\n };\n }, [call, sessionId, audioElement, trackType]);\n\n return (\n <audio\n autoPlay\n {...rest}\n ref={setAudioElement}\n data-user-id={userId}\n data-session-id={sessionId}\n data-track-type={trackType}\n />\n );\n};\n","import { ComponentProps } from 'react';\nimport { SfuModels, StreamVideoParticipant } from '@stream-io/video-client';\nimport { Audio } from './Audio';\n\nexport type ParticipantsAudioProps = {\n /**\n * The participants to play audio for.\n */\n participants: StreamVideoParticipant[];\n\n /**\n * Props to pass to the underlying `Audio` components.\n */\n audioProps?: ComponentProps<typeof Audio>;\n};\n\nexport const ParticipantsAudio = (props: ParticipantsAudioProps) => {\n const { participants, audioProps } = props;\n return (\n <>\n {participants.map((participant) => {\n if (participant.isLocalParticipant) return null;\n const hasAudio = participant.publishedTracks.includes(\n SfuModels.TrackType.AUDIO,\n );\n const hasScreenShareAudio = participant.publishedTracks.includes(\n SfuModels.TrackType.SCREEN_SHARE_AUDIO,\n );\n if (hasAudio && participant.audioStream) {\n return (\n <Audio\n {...audioProps}\n trackType=\"audioTrack\"\n participant={participant}\n key={participant.sessionId}\n />\n );\n }\n if (hasScreenShareAudio && participant.screenShareAudioStream) {\n return (\n <Audio\n {...audioProps}\n trackType=\"screenShareAudioTrack\"\n participant={participant}\n key={participant.sessionId}\n />\n );\n }\n return null;\n })}\n </>\n );\n};\n","import { ComponentType, isValidElement, ReactElement } from 'react';\n\nexport const isComponentType = <T extends {}>(\n elementOrComponent?: ComponentType<T> | ReactElement | null,\n): elementOrComponent is ComponentType<T> => {\n return elementOrComponent === null\n ? false\n : !isValidElement(elementOrComponent);\n};\n","export const chunk = <T extends unknown[]>(array: T, size: number) => {\n const chunkCount = Math.ceil(array.length / size);\n\n return Array.from(\n { length: chunkCount },\n (_, index) => array.slice(size * index, size * index + size) as T,\n );\n};\n","import type { ForwardedRef } from 'react';\n\nexport const applyElementToRef = <T extends HTMLElement | null>(\n ref: ForwardedRef<T>,\n element: T,\n) => {\n if (!ref) return;\n\n if (typeof ref === 'function') return ref(element);\n\n ref.current = element;\n};\n","import { ComponentPropsWithRef, forwardRef, useEffect, useState } from 'react';\nimport { Browsers } from '@stream-io/video-client';\n\nimport { applyElementToRef } from '../../../utilities';\n\nexport type BaseVideoProps = ComponentPropsWithRef<'video'> & {\n stream?: MediaStream;\n};\n\n/**\n * @description Extends video element with `stream` property\n * (`srcObject`) to reactively handle stream changes\n */\nexport const BaseVideo = forwardRef<HTMLVideoElement, BaseVideoProps>(\n ({ stream, ...rest }, ref) => {\n const [videoElement, setVideoElement] = useState<HTMLVideoElement | null>(\n null,\n );\n\n useEffect(() => {\n if (!videoElement || !stream) return;\n if (stream === videoElement.srcObject) return;\n\n videoElement.srcObject = stream;\n if (Browsers.isSafari() || Browsers.isFirefox()) {\n // Firefox and Safari have some timing issue\n setTimeout(() => {\n videoElement.srcObject = stream;\n videoElement.play().catch((e) => {\n console.error(`Failed to play stream`, e);\n });\n }, 0);\n }\n\n return () => {\n videoElement.pause();\n videoElement.srcObject = null;\n };\n }, [stream, videoElement]);\n\n return (\n <video\n autoPlay\n playsInline\n {...rest}\n ref={(element) => {\n applyElementToRef(ref, element);\n setVideoElement(element);\n }}\n />\n );\n },\n);\n","import { ComponentPropsWithRef, forwardRef, useState } from 'react';\nimport type { StreamVideoParticipant } from '@stream-io/video-client';\n\nexport type VideoPlaceholderProps = {\n participant: StreamVideoParticipant;\n} & ComponentPropsWithRef<'div'>;\n\nexport const DefaultVideoPlaceholder = forwardRef<\n HTMLDivElement,\n VideoPlaceholderProps\n>(({ participant, style }, ref) => {\n const [error, setError] = useState(false);\n const name = participant.name || participant.userId;\n return (\n <div className=\"str-video__video-placeholder\" style={style} ref={ref}>\n {(!participant.image || error) &&\n (name ? (\n <div className=\"str-video__video-placeholder__initials-fallback\">\n <div>{name[0]}</div>\n </div>\n ) : (\n <div>Video is disabled</div>\n ))}\n {participant.image && !error && (\n <img\n onError={() => setError(true)}\n alt=\"video-placeholder\"\n className=\"str-video__video-placeholder__avatar\"\n src={participant.image}\n />\n )}\n </div>\n );\n});\n","import {\n ComponentPropsWithoutRef,\n ComponentType,\n useEffect,\n useLayoutEffect,\n useState,\n} from 'react';\nimport {\n SfuModels,\n StreamVideoParticipant,\n VideoTrackType,\n VisibilityState,\n} from '@stream-io/video-client';\nimport clsx from 'clsx';\nimport {\n DefaultVideoPlaceholder,\n VideoPlaceholderProps,\n} from './DefaultVideoPlaceholder';\nimport { useCall } from '@stream-io/video-react-bindings';\n\nexport type VideoProps = ComponentPropsWithoutRef<'video'> & {\n /**\n * The track type to display.\n */\n trackType: VideoTrackType | 'none';\n /**\n * The participant represented by this video element.\n */\n participant: StreamVideoParticipant;\n /**\n * Override the default UI that's visible when a participant turned off their video.\n */\n VideoPlaceholder?: ComponentType<VideoPlaceholderProps>;\n /**\n * An object with setRef functions\n * meant for exposing some of the internal elements of this component.\n */\n refs?: {\n /**\n * The video element that's used to play the video stream.\n * @param element the video element.\n */\n setVideoElement?: (element: HTMLVideoElement | null) => void;\n /**\n * The video placeholder element that's used when the video stream is not playing.\n * @param element the video placeholder element.\n */\n setVideoPlaceholderElement?: (element: HTMLDivElement | null) => void;\n };\n};\n\nexport const Video = ({\n trackType,\n participant,\n className,\n VideoPlaceholder = DefaultVideoPlaceholder,\n refs,\n ...rest\n}: VideoProps) => {\n const {\n sessionId,\n videoStream,\n screenShareStream,\n publishedTracks,\n viewportVisibilityState,\n isLocalParticipant,\n userId,\n } = participant;\n\n const call = useCall();\n const [videoElement, setVideoElement] = useState<HTMLVideoElement | null>(\n null,\n );\n // start with true, will flip once the video starts playing\n const [isVideoPaused, setIsVideoPaused] = useState(true);\n const [isWideMode, setIsWideMode] = useState(true);\n\n const stream =\n trackType === 'videoTrack'\n ? videoStream\n : trackType === 'screenShareTrack'\n ? screenShareStream\n : undefined;\n\n useLayoutEffect(() => {\n if (!call || !videoElement || trackType === 'none') return;\n\n const cleanup = call.bindVideoElement(videoElement, sessionId, trackType);\n\n return () => {\n cleanup?.();\n };\n }, [call, trackType, sessionId, videoElement]);\n\n useEffect(() => {\n if (!stream || !videoElement) return;\n\n const [track] = stream.getVideoTracks();\n if (!track) return;\n\n const handlePlayPause = () => {\n setIsVideoPaused(videoElement.paused);\n\n const { width = 0, height = 0 } = track.getSettings();\n setIsWideMode(width >= height);\n };\n\n // playback may have started before we had a chance to\n // attach the 'play/pause' event listener, so we set the state\n // here to make sure it's in sync\n setIsVideoPaused(videoElement.paused);\n\n videoElement.addEventListener('play', handlePlayPause);\n videoElement.addEventListener('pause', handlePlayPause);\n track.addEventListener('unmute', handlePlayPause);\n return () => {\n videoElement.removeEventListener('play', handlePlayPause);\n videoElement.removeEventListener('pause', handlePlayPause);\n track.removeEventListener('unmute', handlePlayPause);\n\n // reset the 'pause' state once we unmount the video element\n setIsVideoPaused(true);\n };\n }, [stream, videoElement]);\n\n if (!call) return null;\n\n const isPublishingTrack =\n trackType === 'videoTrack'\n ? publishedTracks.includes(SfuModels.TrackType.VIDEO)\n : trackType === 'screenShareTrack'\n ? publishedTracks.includes(SfuModels.TrackType.SCREEN_SHARE)\n : false;\n\n const isInvisible =\n trackType === 'none' ||\n viewportVisibilityState?.[trackType] === VisibilityState.INVISIBLE;\n\n const hasNoVideoOrInvisible = !isPublishingTrack || isInvisible;\n const mirrorVideo = isLocalParticipant && trackType === 'videoTrack';\n const isScreenShareTrack = trackType === 'screenShareTrack';\n return (\n <>\n {!hasNoVideoOrInvisible && (\n <video\n {...rest}\n className={clsx(className, 'str-video__video', {\n 'str-video__video--not-playing': isVideoPaused,\n 'str-video__video--tall': !isWideMode,\n 'str-video__video--mirror': mirrorVideo,\n 'str-video__video--screen-share': isScreenShareTrack,\n })}\n data-user-id={userId}\n data-session-id={sessionId}\n ref={(element) => {\n setVideoElement(element);\n refs?.setVideoElement?.(element);\n }}\n />\n )}\n {/* TODO: add condition to \"hold\" the placeholder until track unmutes as well */}\n {(hasNoVideoOrInvisible || isVideoPaused) && (\n <VideoPlaceholder\n style={{ position: 'absolute' }}\n participant={participant}\n ref={refs?.setVideoPlaceholderElement}\n />\n )}\n </>\n );\n};\n","import { ChangeEvent, useEffect, useState } from 'react';\nimport { Observable, pairwise } from 'rxjs';\nimport {\n getAudioDevices,\n getAudioOutputDevices,\n getVideoDevices,\n} from '@stream-io/video-client';\n\nexport const useHasBrowserPermissions = (permissionName: PermissionName) => {\n const [canSubscribe, enableSubscription] = useState(false);\n\n useEffect(() => {\n let permissionState: PermissionStatus;\n const handlePermissionChange = (e: Event) => {\n const { state } = (e as unknown as ChangeEvent<PermissionStatus>).target;\n enableSubscription(state === 'granted');\n };\n const checkPermissions = async () => {\n try {\n permissionState = await navigator.permissions.query({\n name: permissionName,\n });\n permissionState.addEventListener('change', handlePermissionChange);\n enableSubscription(permissionState.state === 'granted');\n } catch (e) {\n // permission does not exist - cannot be queried\n // an example would be Firefox - camera, neither microphone perms can be queried\n enableSubscription(true);\n }\n };\n checkPermissions();\n\n return () => {\n permissionState?.removeEventListener('change', handlePermissionChange);\n };\n }, [permissionName]);\n\n return canSubscribe;\n};\n\n/**\n * Observes changes in connected devices and maintains an up-to-date array of connected MediaDeviceInfo objects.\n * @param observeDevices\n * @category Device Management\n */\nexport const useDevices = (\n observeDevices: () => Observable<MediaDeviceInfo[]>,\n) => {\n const [devices, setDevices] = useState<MediaDeviceInfo[]>([]);\n\n useEffect(() => {\n const subscription = observeDevices().subscribe(setDevices);\n\n return () => {\n subscription.unsubscribe();\n };\n }, [observeDevices]);\n\n return devices;\n};\n\n/**\n * Observes changes and maintains an array of connected video input devices\n * @category Device Management\n */\nexport const useVideoDevices = () => useDevices(getVideoDevices);\n\n/**\n * Observes changes and maintains an array of connected audio input devices\n * @category Device Management\n */\nexport const useAudioInputDevices = () => useDevices(getAudioDevices);\n\n/**\n * Observes changes and maintains an array of connected audio output devices\n * @category Device Management\n */\nexport const useAudioOutputDevices = () => useDevices(getAudioOutputDevices);\n\n/**\n * Verifies that newly selected device id exists among the registered devices.\n * If the selected device id is not found among existing devices, switches to the default device.\n * The media devices are observed only if a given permission ('camera' resp. 'microphone') is granted in browser.\n * Regardless of current permissions settings, an intent to observe devices will take place in Firefox.\n * This is due to the fact that Firefox does not allow to query for 'camera' and 'microphone' permissions.\n * @param canObserve\n * @param devices$\n * @param switchToDefaultDevice\n * @param selectedDeviceId\n * @category Device Management\n */\nexport const useDeviceFallback = (\n canObserve: boolean,\n devices$: Observable<MediaDeviceInfo[]>,\n switchToDefaultDevice: () => void,\n selectedDeviceId?: string,\n) => {\n useEffect(() => {\n if (!canObserve) return;\n const validateDeviceId = devices$.pipe().subscribe((devices) => {\n const deviceFound = devices.find(\n (device) => device.deviceId === selectedDeviceId,\n );\n if (!deviceFound) switchToDefaultDevice();\n });\n\n return () => {\n validateDeviceId.unsubscribe();\n };\n }, [canObserve, devices$, selectedDeviceId, switchToDefaultDevice]);\n};\n\n/**\n * Verifies that newly selected video device id exists among the registered devices.\n * If the selected device id is not found among existing devices, switches to the default video device.\n * The media devices are observed only if 'camera' permission is granted in browser.\n * It is integrators responsibility to instruct users how to enable required permissions.\n * Regardless of current permissions settings, an intent to observe devices will take place in Firefox.\n * This is due to the fact that Firefox does not allow to query for 'camera' and 'microphone' permissions.\n * @param switchToDefaultDevice\n * @param canObserve\n * @param selectedDeviceId\n * @category Device Management\n */\nexport const useVideoDeviceFallback = (\n switchToDefaultDevice: () => void,\n canObserve: boolean,\n selectedDeviceId?: string,\n) =>\n useDeviceFallback(\n canObserve,\n getVideoDevices(),\n switchToDefaultDevice,\n selectedDeviceId,\n );\n\n/**\n * Verifies that newly selected audio input device id exists among the registered devices.\n * If the selected device id is not found among existing devices, switches to the default audio input device.\n * The media devices are observed only if 'microphone' permission is granted in browser.\n * It is integrators responsibility to instruct users how to enable required permissions.\n * Regardless of current permissions settings, an intent to observe devices will take place in Firefox.\n * This is due to the fact that Firefox does not allow to query for 'camera' and 'microphone' permissions.\n * @param switchToDefaultDevice\n * @param canObserve\n * @param selectedDeviceId\n * @category Device Management\n */\nexport const useAudioInputDeviceFallback = (\n switchToDefaultDevice: () => void,\n canObserve: boolean,\n selectedDeviceId?: string,\n) =>\n useDeviceFallback(\n canObserve,\n getAudioDevices(),\n switchToDefaultDevice,\n selectedDeviceId,\n );\n\n/**\n * Verifies that newly selected audio output device id exists among the registered devices.\n * If the selected device id is not found among existing devices, switches to the default audio output device.\n * The media devices are observed only if 'microphone' permission is granted in browser.\n * It is integrators responsibility to instruct users how to enable required permissions.\n * Regardless of current permissions settings, an intent to observe devices will take place in Firefox.\n * This is due to the fact that Firefox does not allow to query for 'camera' and 'microphone' permissions.\n * @param switchToDefaultDevice\n * @param canObserve\n * @param selectedDeviceId\n * @category Device Management\n */\nexport const useAudioOutputDeviceFallback = (\n switchToDefaultDevice: () => void,\n canObserve: boolean,\n selectedDeviceId?: string,\n) =>\n useDeviceFallback(\n canObserve,\n getAudioOutputDevices(),\n switchToDefaultDevice,\n selectedDeviceId,\n );\n\n/**\n * Observes devices of certain kind are made unavailable and executes onDisconnect callback.\n * @param observeDevices\n * @param onDisconnect\n * @category Device Management\n */\nexport const useOnUnavailableDevices = (\n observeDevices: Observable<MediaDeviceInfo[]>,\n onDisconnect: () => void,\n) => {\n useEffect(() => {\n const subscription = observeDevices\n .pipe(pairwise())\n .subscribe(([prev, current]) => {\n if (prev.length > 0 && current.length === 0) onDisconnect();\n });\n\n return () => subscription.unsubscribe();\n }, [observeDevices, onDisconnect]);\n};\n\n/**\n * Observes disconnect of all video devices and executes onDisconnect callback.\n * @param onDisconnect\n * @category Device Management\n */\nexport const useOnUnavailableVideoDevices = (onDisconnect: () => void) =>\n useOnUnavailableDevices(getVideoDevices(), onDisconnect);\n\n/**\n * Observes disconnect of all audio input devices and executes onDisconnect callback.\n * @param onDisconnect\n * @category Device Management\n */\nexport const useOnUnavailableAudioInputDevices = (onDisconnect: () => void) =>\n useOnUnavailableDevices(getAudioDevices(), onDisconnect);\n\n/**\n * Observes disconnect of all audio output devices and executes onDisconnect callback.\n * @param onDisconnect\n * @category Device Management\n */\nexport const useOnUnavailableAudioOutputDevices = (onDisconnect: () => void) =>\n useOnUnavailableDevices(getAudioOutputDevices(), onDisconnect);\n","import { useCallback, useEffect, useRef } from 'react';\nimport { map } from 'rxjs';\nimport {\n CallingState,\n getAudioStream,\n OwnCapability,\n SfuModels,\n watchForAddedDefaultAudioDevice,\n watchForDisconnectedAudioDevice,\n} from '@stream-io/video-client';\nimport { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';\nimport { useHasBrowserPermissions } from './useDevices';\n\n/**\n * @internal\n */\nexport type AudioPublisherInit = {\n initialAudioMuted?: boolean;\n audioDeviceId?: string;\n};\n\n/**\n * @internal\n * @category Device Management\n */\nexport const useAudioPublisher = ({\n initialAudioMuted,\n audioDeviceId,\n}: AudioPublisherInit) => {\n const call = useCall();\n const { useCallState, useCallCallingState, useLocalParticipant } =\n useCallStateHooks();\n const callState = useCallState();\n const callingState = useCallCallingState();\n const participant = useLocalParticipant();\n const hasBrowserPermissionAudioInput = useHasBrowserPermissions(\n 'microphone' as PermissionName,\n );\n const { localParticipant$ } = callState;\n\n const isPublishingAudio = participant?.publishedTracks.includes(\n SfuModels.TrackType.AUDIO,\n );\n\n const publishAudioStream = useCallback(async () => {\n if (!call) return;\n if (!call.permissionsContext.hasPermission(OwnCapability.SEND_AUDIO)) {\n throw new Error(`No permission to publish audio`);\n }\n try {\n const audioStream = await getAudioStream({\n deviceId: audioDeviceId,\n });\n await call.publishAudioStream(audioStream);\n } catch (e) {\n console.log('Failed to publish audio stream', e);\n }\n }, [audioDeviceId, call]);\n\n const lastAudioDeviceId = useRef(audioDeviceId);\n useEffect(() => {\n if (\n callingState === CallingState.JOINED &&\n audioDeviceId !== lastAudioDeviceId.current\n ) {\n lastAudioDeviceId.current = audioDeviceId;\n publishAudioStream().catch((e) => {\n console.error('Failed to publish audio stream', e);\n });\n }\n }, [audioDeviceId, callingState, publishAudioStream]);\n\n const initialPublishRun = useRef(false);\n useEffect(() => {\n if (\n callingState === CallingState.JOINED &&\n !initialPublishRun.current &&\n !initialAudioMuted\n ) {\n // automatic publishing should happen only when joining the call\n // from the lobby, and the audio is not muted\n publishAudioStream().catch((e) => {\n console.error('Failed to publish audio stream', e);\n });\n initialPublishRun.current = true;\n }\n }, [callingState, initialAudioMuted, publishAudioStream]);\n\n useEffect(() => {\n if (!localParticipant$ || !hasBrowserPermissionAudioInput) return;\n const subscription = watchForDisconnectedAudioDevice(\n localParticipant$.pipe(map((p) => p?.audioDeviceId)),\n ).subscribe(async () => {\n if (!call) return;\n call.setAudioDevice(undefined);\n await call.stopPublish(SfuModels.TrackType.AUDIO);\n });\n return () => {\n subscription.unsubscribe();\n };\n }, [hasBrowserPermissionAudioInput, localParticipant$, call]);\n\n useEffect(() => {\n if (!participant?.audioStream || !call || !isPublishingAudio) return;\n\n const [track] = participant.audioStream.getAudioTracks();\n const selectedAudioDeviceId = track.getSettings().deviceId;\n\n const republishDefaultDevice = watchForAddedDefaultAudioDevice().subscribe(\n async () => {\n if (\n !(\n call &&\n participant.audioStream &&\n selectedAudioDeviceId === 'default'\n )\n )\n return;\n // We need to stop the original track first in order\n // we can retrieve the new default device stream\n track.stop();\n const audioStream = await getAudioStream({\n deviceId: 'default',\n });\n await call.publishAudioStream(audioStream);\n },\n );\n\n const handleTrackEnded = async () => {\n if (selectedAudioDeviceId === audioDeviceId) {\n const audioStream = await getAudioStream({\n deviceId: audioDeviceId,\n });\n await call.publishAudioStream(audioStream);\n }\n };\n\n track.addEventListener('ended', handleTrackEnded);\n return () => {\n track.removeEventListener('ended', handleTrackEnded);\n republishDefaultDevice.unsubscribe();\n };\n }, [audioDeviceId, call, participant?.audioStream, isPublishingAudio]);\n\n return publishAudioStream;\n};\n","import { useMemo } from 'react';\n\nconst useQueryParams = () => {\n return useMemo(\n () =>\n typeof window === 'undefined'\n ? null\n : new URLSearchParams(window.location.search),\n [],\n );\n};\n\n/**\n * Internal purpose hook. Enables certain development mode tools.\n */\nexport const useIsDebugMode = () => {\n const params = useQueryParams();\n return !!params?.get('debug');\n};\n\nexport const useDebugPreferredVideoCodec = () => {\n const params = useQueryParams();\n return params?.get('video_codec');\n};\n","import { useCallback, useEffect, useRef } from 'react';\nimport { map } from 'rxjs/operators';\nimport {\n CallingState,\n getVideoStream,\n OwnCapability,\n SfuModels,\n VideoSettingsCameraFacingEnum,\n watchForAddedDefaultVideoDevice,\n watchForDisconnectedVideoDevice,\n} from '@stream-io/video-client';\nimport { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';\nimport { useDebugPreferredVideoCodec } from '../../components/Debug/useIsDebugMode';\nimport { useHasBrowserPermissions } from './useDevices';\n\n/**\n * @internal\n */\nexport type VideoPublisherInit = {\n initialVideoMuted?: boolean;\n videoDeviceId?: string;\n};\n\n/**\n * @internal\n * @category Device Management\n */\nexport const useVideoPublisher = ({\n initialVideoMuted,\n videoDeviceId,\n}: VideoPublisherInit) => {\n const call = useCall();\n const {\n useCallState,\n useCallCallingState,\n useLocalParticipant,\n useCallSettings,\n } = useCallStateHooks();\n const callState = useCallState();\n const callingState = useCallCallingState();\n const participant = useLocalParticipant();\n const hasBrowserPermissionVideoInput = useHasBrowserPermissions(\n 'camera' as PermissionName,\n );\n const { localParticipant$ } = callState;\n\n const preferredCodec = useDebugPreferredVideoCodec();\n const isPublishingVideo = participant?.publishedTracks.includes(\n SfuModels.TrackType.VIDEO,\n );\n\n const settings = useCallSettings();\n const videoSettings = settings?.video;\n const targetResolution = videoSettings?.target_resolution;\n const publishVideoStream = useCallback(async () => {\n if (!call) return;\n if (!call.permissionsContext.hasPermission(OwnCapability.SEND_VIDEO)) {\n throw new Error(`No permission to publish video`);\n }\n try {\n const videoStream = await getVideoStream({\n deviceId: videoDeviceId,\n width: targetResolution?.width,\n height: targetResolution?.height,\n facingMode: toFacingMode(videoSettings?.camera_facing),\n });\n await call.publishVideoStream(videoStream, { preferredCodec });\n } catch (e) {\n console.log('Failed to publish video stream', e);\n }\n }, [\n call,\n preferredCodec,\n targetResolution?.height,\n targetResolution?.width,\n videoDeviceId,\n videoSettings?.camera_facing,\n ]);\n\n const lastVideoDeviceId = useRef(videoDeviceId);\n useEffect(() => {\n if (\n callingState === CallingState.JOINED &&\n videoDeviceId !== lastVideoDeviceId.current\n ) {\n lastVideoDeviceId.current = videoDeviceId;\n publishVideoStream().catch((e) => {\n console.error('Failed to publish video stream', e);\n });\n }\n }, [publishVideoStream, videoDeviceId, callingState]);\n\n const initialPublishRun = useRef(false);\n useEffect(() => {\n if (\n callingState === CallingState.JOINED &&\n !initialPublishRun.current &&\n !initialVideoMuted\n ) {\n // automatic publishing should happen only when joining the call\n // from the lobby, and the video is not muted\n publishVideoStream().catch((e) => {\n console.error('Failed to publish video stream', e);\n });\n initialPublishRun.current = true;\n }\n }, [callingState, initialVideoMuted, publishVideoStream]);\n\n useEffect(() => {\n if (!localParticipant$ || !hasBrowserPermissionVideoInput) return;\n const subscription = watchForDisconnectedVideoDevice(\n localParticipant$.pipe(map((p) => p?.videoDeviceId)),\n ).subscribe(async () => {\n if (!call) return;\n call.setVideoDevice(undefined);\n await call.stopPublish(SfuModels.TrackType.VIDEO);\n });\n return () => {\n subscription.unsubscribe();\n };\n }, [hasBrowserPermissionVideoInput, localParticipant$, call]);\n\n useEffect(() => {\n if (!participant?.videoStream || !call || !isPublishingVideo) return;\n\n const [track] = participant.videoStream.getVideoTracks();\n const selectedVideoDeviceId = track.getSettings().deviceId;\n\n const republishDefaultDevice = watchForAddedDefaultVideoDevice().subscribe(\n async () => {\n if (\n !(\n call &&\n participant.videoStream &&\n selectedVideoDeviceId === 'default'\n )\n )\n return;\n // We need to stop the original track first in order\n // we can retrieve the new default device stream\n track.stop();\n const videoStream = await getVideoStream({\n deviceId: 'default',\n });\n await call.publishVideoStream(videoStream);\n },\n );\n\n const handleTrackEnded = async () => {\n if (selectedVideoDeviceId === videoDeviceId) {\n const videoStream = await getVideoStream({\n deviceId: videoDeviceId,\n });\n await call.publishVideoStream(videoStream);\n }\n };\n\n track.addEventListener('ended', handleTrackEnded);\n return () => {\n track.removeEventListener('ended', handleTrackEnded);\n republishDefaultDevice.unsubscribe();\n };\n }, [videoDeviceId, call, participant?.videoStream, isPublishingVideo]);\n\n return publishVideoStream;\n};\n\nconst toFacingMode = (value: VideoSettingsCameraFacingEnum | undefined) => {\n switch (value) {\n case VideoSettingsCameraFacingEnum.FRONT:\n return 'user';\n case VideoSettingsCameraFacingEnum.BACK:\n return 'environment';\n default:\n return undefined;\n }\n};\n","import { useEffect } from 'react';\nimport { DynascaleManager, VideoTrackType } from '@stream-io/video-client';\nimport { useCall } from '@stream-io/video-react-bindings';\n\nexport const useTrackElementVisibility = <T extends HTMLElement>({\n trackedElement,\n dynascaleManager: propsDynascaleManager,\n sessionId,\n trackType,\n}: {\n trackedElement: T | null;\n sessionId: string;\n dynascaleManager?: DynascaleManager;\n trackType: VideoTrackType | 'none';\n}) => {\n const call = useCall();\n const manager = propsDynascaleManager ?? call?.dynascaleManager;\n useEffect(() => {\n if (!trackedElement || !manager || !call || trackType === 'none') return;\n const unobserve = manager.trackElementVisibility(\n trackedElement,\n sessionId,\n trackType,\n );\n return () => {\n unobserve();\n };\n }, [trackedElement, manager, call, sessionId, trackType]);\n};\n","import { ComponentProps, CSSProperties, useState } from 'react';\nimport clsx from 'clsx';\n\nexport type AvatarData = {\n imageSrc?: string;\n name?: string;\n style?: CSSProperties & Record<string, string | number>;\n};\n\nexport type AvatarProps = AvatarData & ComponentProps<'img'>;\n\nexport const Avatar = ({\n imageSrc,\n name,\n style,\n className,\n ...rest\n}: AvatarProps) => {\n const [error, setError] = useState(false);\n\n return (\n <>\n {(!imageSrc || error) && name && (\n <AvatarFallback className={className} style={style} names={[name]} />\n )}\n {imageSrc && !error && (\n <img\n onError={() => setError(true)}\n alt=\"avatar\"\n className={clsx('str-video__avatar', className)}\n src={imageSrc}\n style={style}\n {...rest}\n />\n )}\n </>\n );\n};\n\ntype AvatarFallbackProps = {\n names: string[];\n className?: string;\n style?: CSSProperties & Record<string, string | number>;\n};\nexport const AvatarFallback = ({\n className,\n names,\n style,\n}: AvatarFallbackProps) => {\n return (\n <div\n className={clsx('str-video__avatar--initials-fallback', className)}\n style={style}\n >\n <div>\n {names[0][0]}\n {names[1]?.[0]}\n </div>\n </div>\n );\n};\n","import { useEffect } from 'react';\nimport {\n offset,\n autoUpdate,\n size,\n useFloating,\n shift,\n flip,\n} from '@floating-ui/react';\nimport type { UseFloatingProps } from '@floating-ui/react';\n\nexport const useFloatingUIPreset = ({\n placement,\n strategy,\n}: Pick<UseFloatingProps, 'placement' | 'strategy'>) => {\n const {\n refs,\n x,\n y,\n update,\n elements: { domReference, floating },\n } = useFloating({\n placement,\n strategy,\n middleware: [\n offset(10),\n shift(),\n flip(),\n size({\n padding: 10,\n apply: ({ availableHeight, elements }) => {\n Object.assign(elements.floating.style, {\n maxHeight: `${availableHeight}px`,\n });\n },\n }),\n ],\n });\n\n // handle window resizing\n useEffect(() => {\n if (!domReference || !floating) return;\n\n const cleanup = autoUpdate(domReference, floating, update);\n\n return () => cleanup();\n }, [domReference, floating, update]);\n\n return { refs, x, y, domReference, floating, strategy };\n};\n","import { useEffect, useState } from 'react';\n\nconst SCROLL_THRESHOLD = 10;\n\n/**\n * Hook which observes element's scroll position and returns text value based on the\n * position of the scrollbar (`top`, `bottom`, `between` and `null` if no scrollbar is available)\n */\nexport const useVerticalScrollPosition = (\n scrollElement: HTMLElement | null,\n threshold: number = SCROLL_THRESHOLD,\n) => {\n const [scrollPosition, setScrollPosition] = useState<\n 'top' | 'bottom' | 'between' | null\n >(null);\n\n useEffect(() => {\n if (!scrollElement) return;\n\n const scrollHandler = () => {\n const element = scrollElement;\n\n const hasVerticalScrollbar = element.scrollHeight > element.clientHeight;\n\n if (!hasVerticalScrollbar) return setScrollPosition(null);\n\n const isAtTheTop = element.scrollTop <= threshold;\n if (isAtTheTop) return setScrollPosition('top');\n\n const isAtTheBottom =\n Math.abs(\n element.scrollHeight - element.scrollTop - element.clientHeight,\n ) <= threshold;\n\n if (isAtTheBottom) return setScrollPosition('bottom');\n\n setScrollPosition('between');\n };\n\n const resizeObserver = new ResizeObserver(scrollHandler);\n resizeObserver.observe(scrollElement);\n\n scrollElement.addEventListener('scroll', scrollHandler);\n return () => {\n scrollElement.removeEventListener('scroll', scrollHandler);\n resizeObserver.disconnect();\n };\n }, [scrollElement, threshold]);\n\n return scrollPosition;\n};\n\nexport const useHorizontalScrollPosition = (\n scrollElement: HTMLElement | null,\n threshold: number = SCROLL_THRESHOLD,\n) => {\n const [scrollPosition, setScrollPosition] = useState<\n 'start' | 'end' | 'between' | null\n >(null);\n\n useEffect(() => {\n if (!scrollElement) return;\n\n const scrollHandler = () => {\n const element = scrollElement;\n\n const hasHorizontalScrollbar = element.scrollWidth > element.clientWidth;\n\n if (!hasHorizontalScrollbar) return setScrollPosition(null);\n\n const isAtTheStart = element.scrollLeft <= threshold;\n if (isAtTheStart) return setScrollPosition('start');\n\n const isAtTheEnd =\n Math.abs(\n element.scrollWidth - element.scrollLeft - element.clientWidth,\n ) <= threshold;\n\n if (isAtTheEnd) return setScrollPosition('end');\n\n setScrollPosition('between');\n };\n\n const resizeObserver = new ResizeObserver(scrollHandler);\n resizeObserver.observe(scrollElement);\n\n scrollElement.addEventListener('scroll', scrollHandler);\n return () => {\n scrollElement.removeEventListener('scroll', scrollHandler);\n resizeObserver.disconnect();\n };\n }, [scrollElement, threshold]);\n\n return scrollPosition;\n};\n","import { useCallback, useEffect, useState } from 'react';\nimport { OwnCapability } from '@stream-io/video-client';\nimport { useCall, useHasPermissions } from '@stream-io/video-react-bindings';\n\nexport const useRequestPermission = (permission: OwnCapability) => {\n const call = useCall();\n const hasPermission = useHasPermissions(permission);\n const [isAwaitingPermission, setIsAwaitingPermission] = useState(false); // TODO: load with possibly pending state\n\n useEffect(() => {\n const reset = () => setIsAwaitingPermission(false);\n\n if (hasPermission) reset();\n }, [hasPermission]);\n\n const requestPermission = useCallback(async () => {\n if (hasPermission) return true;\n\n const canRequestPermission =\n !!call?.permissionsContext.canRequest(permission);\n if (isAwaitingPermission || !canRequestPermission) return false;\n\n setIsAwaitingPermission(true);\n\n try {\n await call?.requestPermissions({\n permissions: [permission],\n });\n } catch (error) {\n setIsAwaitingPermission(false);\n throw new Error(`requestPermission failed: ${error}`);\n }\n\n return false;\n }, [call, hasPermission, isAwaitingPermission, permission]);\n\n return {\n requestPermission,\n hasPermission,\n canRequestPermission: !!call?.permissionsContext.canRequest(permission),\n isAwaitingPermission,\n };\n};\n","import { useCallback, useRef } from 'react';\nimport { useCallStateHooks } from '@stream-io/video-react-bindings';\nimport { OwnCapability, SfuModels } from '@stream-io/video-client';\n\nimport { useMediaDevices } from '../core';\nimport { useRequestPermission } from './useRequestPermission';\n\nexport const useToggleAudioMuteState = () => {\n const { publishAudioStream, stopPublishingAudio } = useMediaDevices();\n const { useLocalParticipant } = useCallStateHooks();\n const localParticipant = useLocalParticipant();\n\n const { isAwaitingPermission, requestPermission } = useRequestPermission(\n OwnCapability.SEND_AUDIO,\n );\n\n // to keep the toggle function as stable as possible\n const isAudioMutedReference = useRef(false);\n\n isAudioMutedReference.current = !localParticipant?.publishedTracks.includes(\n SfuModels.TrackType.AUDIO,\n );\n\n const toggleAudioMuteState = useCallback(async () => {\n if (isAudioMutedReference.current) {\n const canPublish = await requestPermission();\n if (canPublish) return publishAudioStream();\n }\n\n if (!isAudioMutedReference.current) await stopPublishingAudio();\n }, [publishAudioStream, requestPermission, stopPublishingAudio]);\n\n return { toggleAudioMuteState, isAwaitingPermission };\n};\n","import { useCallback, useRef } from 'react';\nimport { useCallStateHooks } from '@stream-io/video-react-bindings';\nimport { OwnCapability, SfuModels } from '@stream-io/video-client';\n\nimport { useMediaDevices } from '../core';\nimport { useRequestPermission } from './useRequestPermission';\n\nexport const useToggleVideoMuteState = () => {\n const { publishVideoStream, stopPublishingVideo } = useMediaDevices();\n const { useLocalParticipant } = useCallStateHooks();\n const localParticipant = useLocalParticipant();\n\n const { isAwaitingPermission, requestPermission } = useRequestPermission(\n OwnCapability.SEND_VIDEO,\n );\n\n // to keep the toggle function as stable as possible\n const isVideoMutedReference = useRef(false);\n\n isVideoMutedReference.current = !localParticipant?.publishedTracks.includes(\n SfuModels.TrackType.VIDEO,\n );\n\n const toggleVideoMuteState = useCallback(async () => {\n if (isVideoMutedReference.current) {\n const canPublish = await requestPermission();\n if (canPublish) return publishVideoStream();\n }\n\n if (!isVideoMutedReference.current) await stopPublishingVideo();\n }, [publishVideoStream, requestPermission, stopPublishingVideo]);\n\n return { toggleVideoMuteState, isAwaitingPermission };\n};\n","import { useCallback, useRef } from 'react';\nimport { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';\nimport {\n getScreenShareStream,\n OwnCapability,\n SfuModels,\n} from '@stream-io/video-client';\nimport { useRequestPermission } from './useRequestPermission';\n\nexport const useToggleScreenShare = () => {\n const { useLocalParticipant } = useCallStateHooks();\n const localParticipant = useLocalParticipant();\n const call = useCall();\n const isScreenSharingReference = useRef(false);\n const { isAwaitingPermission, requestPermission } = useRequestPermission(\n OwnCapability.SCREENSHARE,\n );\n\n const isScreenSharing = !!localParticipant?.publishedTracks.includes(\n SfuModels.TrackType.SCREEN_SHARE,\n );\n\n isScreenSharingReference.current = isScreenSharing;\n\n const toggleScreenShare = useCallback(async () => {\n if (!isScreenSharingReference.current) {\n const canPublish = await requestPermission();\n if (!canPublish) return;\n\n const stream = await getScreenShareStream().catch((e) => {\n console.log(`Can't share screen: ${e}`);\n });\n\n if (stream) {\n return call?.publishScreenShareStream(stream);\n }\n }\n\n await call?.stopPublish(SfuModels.TrackType.SCREEN_SHARE);\n }, [call, requestPermission]);\n\n return { toggleScreenShare, isAwaitingPermission, isScreenSharing };\n};\n","import { useCallback, useEffect, useState } from 'react';\nimport { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';\n\nexport const useToggleCallRecording = () => {\n const call = useCall();\n const { useIsCallRecordingInProgress } = useCallStateHooks();\n const isCallRecordingInProgress = useIsCallRecordingInProgress();\n const [isAwaitingResponse, setIsAwaitingResponse] = useState(false);\n\n // TODO: add permissions\n\n useEffect(() => {\n // we wait until call.recording_started/stopped event to flips the\n // `isCallRecordingInProgress` state variable.\n // Once the flip happens, we remove the loading indicator\n setIsAwaitingResponse((isAwaiting) => {\n if (isAwaiting) return false;\n return isAwaiting;\n });\n }, [isCallRecordingInProgress]);\n\n const toggleCallRecording = useCallback(async () => {\n try {\n setIsAwaitingResponse(true);\n if (isCallRecordingInProgress) {\n await call?.stopRecording();\n } else {\n await call?.startRecording();\n }\n } catch (e) {\n console.error(`Failed start recording`, e);\n }\n }, [call, isCallRecordingInProgress]);\n\n return { toggleCallRecording, isAwaitingResponse, isCallRecordingInProgress };\n};\n","import {\n ComponentType,\n PropsWithChildren,\n useEffect,\n useState,\n ForwardedRef,\n} from 'react';\nimport { Placement, Strategy } from '@floating-ui/react';\n\nimport { useFloatingUIPreset } from '../../hooks';\n\nexport type ToggleMenuButtonProps<E extends HTMLElement = HTMLButtonElement> = {\n menuShown: boolean;\n ref: ForwardedRef<E>;\n};\n\nexport type MenuToggleProps<E extends HTMLElement> = PropsWithChildren<{\n ToggleButton: ComponentType<ToggleMenuButtonProps<E>>;\n placement?: Placement;\n strategy?: Strategy;\n}>;\n\nexport const MenuToggle = <E extends HTMLElement>({\n ToggleButton,\n placement = 'top-start',\n strategy = 'absolute',\n children,\n}: MenuToggleProps<E>) => {\n const [menuShown, setMenuShown] = useState(false);\n\n const { floating, domReference, refs, x, y } = useFloatingUIPreset({\n placement,\n strategy,\n });\n\n useEffect(() => {\n const handleClick = (event: MouseEvent) => {\n if (!floating && domReference?.contains(event.target as Node)) {\n setMenuShown(true);\n } else if (floating && !floating?.contains(event.target as Node)) {\n setMenuShown(false);\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (\n event.key.toLowerCase() === 'escape' &&\n !event.altKey &&\n !event.ctrlKey\n ) {\n setMenuShown(false);\n }\n };\n document?.addEventListener('click', handleClick, { capture: true });\n document?.addEventListener('keydown', handleKeyDown);\n return () => {\n document?.removeEventListener('click', handleClick, { capture: true });\n document?.removeEventListener('keydown', handleKeyDown);\n };\n }, [floating, domReference]);\n\n return (\n <>\n {menuShown && (\n <div\n className=\"str-video__menu-container\"\n ref={refs.setFloating}\n style={{\n position: strategy,\n top: y ?? 0,\n left: x ?? 0,\n overflowY: 'auto',\n }}\n >\n {children}\n </div>\n )}\n <ToggleButton menuShown={menuShown} ref={refs.setReference} />\n </>\n );\n};\n","import { ComponentProps, PropsWithChildren } from 'react';\n\nexport const GenericMenu = ({ children }: PropsWithChildren) => {\n return <ul className=\"str-video__generic-menu\">{children}</ul>;\n};\n\nexport const GenericMenuButtonItem = ({\n children,\n ...rest\n}: Omit<ComponentProps<'button'>, 'ref'>) => {\n return (\n <li className=\"str-video__generic-menu--item\">\n <button {...rest}>{children}</button>\n </li>\n );\n};\n","import { clsx } from 'clsx';\n\nexport type IconProps = {\n icon: string;\n};\n\nexport const Icon = ({ icon }: IconProps) => (\n <span\n className={clsx('str-video__icon', icon && `str-video__icon--${icon}`)}\n />\n);\n","import { ComponentProps, ForwardedRef, forwardRef } from 'react';\nimport clsx from 'clsx';\n\nimport { Icon, IconProps } from '../Icon';\n\nexport type ButtonWithIconProps = {\n enabled?: boolean;\n variant?: string;\n} & ComponentProps<'button'> &\n IconProps;\n\nexport const IconButton = forwardRef(\n (props: ButtonWithIconProps, ref: ForwardedRef<HTMLButtonElement>) => {\n const { icon, enabled, variant, onClick, className, ...rest } = props;\n return (\n <button\n className={clsx('str-video__call-controls__button', className, {\n [`str-video__call-controls__button--variant-${variant}`]: variant,\n 'str-video__call-controls__button--enabled': enabled,\n })}\n onClick={(e) => {\n e.preventDefault();\n onClick?.(e);\n }}\n ref={ref}\n {...rest}\n >\n <Icon icon={icon} />\n </button>\n );\n },\n);\n","import clsx from 'clsx';\nimport { MenuToggle, ToggleMenuButtonProps } from '../Menu';\nimport { ComponentType, forwardRef, PropsWithChildren } from 'react';\nimport { Placement } from '@floating-ui/react';\n\nimport { IconButton } from './IconButton';\nimport { isComponentType } from '../../utilities';\n\nexport type IconButtonWithMenuProps = PropsWithChildren<{\n active?: boolean;\n Menu?: ComponentType | JSX.Element;\n caption?: string;\n menuPlacement?: Placement;\n}>;\n\nexport const CompositeButton = forwardRef<\n HTMLDivElement,\n IconButtonWithMenuProps\n>(({ caption, children, active, Menu, menuPlacement }, ref) => {\n return (\n <div className=\"str-video__composite-button\" ref={ref}>\n <div\n className={clsx('str-video__composite-button__button-group', {\n 'str-video__composite-button__button-group--active': active,\n })}\n >\n {children}\n {Menu && (\n <MenuToggle placement={menuPlacement} ToggleButton={ToggleMenuButton}>\n {isComponentType(Menu) ? <Menu /> : Menu}\n </MenuToggle>\n )}\n </div>\n {caption && (\n <div className=\"str-video__composite-button__caption\">{caption}</div>\n )}\n </div>\n );\n});\n\nconst ToggleMenuButton = forwardRef<HTMLButtonElement, ToggleMenuButtonProps>(\n ({ menuShown }, ref) => (\n <IconButton\n className={'str-video__menu-toggle-button'}\n icon={menuShown ? 'caret-down' : 'caret-up'}\n title=\"Toggle device menu\"\n ref={ref}\n />\n ),\n);\n","import { PropsWithChildren, useEffect } from 'react';\nimport clsx from 'clsx';\nimport { useFloatingUIPreset } from '../../hooks';\nimport { Placement } from '@floating-ui/react';\n\nexport type TooltipProps<T extends HTMLElement> = PropsWithChildren<{\n /** Reference element to which the tooltip should attach to */\n referenceElement: T | null;\n /** Additional class applied to the tooltip root element */\n tooltipClassName?: string;\n /** Popper's modifier (offset) property - [xAxis offset, yAxis offset], default [0, 10] */\n offset?: [number, number];\n /** Popper's placement property defining default position of the tooltip, default 'top' */\n tooltipPlacement?: Placement;\n /** Tells component whether to render its contents */\n visible?: boolean;\n}>;\n\nexport const Tooltip = <T extends HTMLElement>({\n children,\n referenceElement,\n tooltipClassName,\n tooltipPlacement = 'top',\n visible = false,\n}: TooltipProps<T>) => {\n const { refs, x, y, strategy } = useFloatingUIPreset({\n placement: tooltipPlacement,\n strategy: 'absolute',\n });\n\n useEffect(() => {\n refs.setReference(referenceElement);\n }, [referenceElement, refs]);\n\n if (!visible) return null;\n\n return (\n <div\n className={clsx('str-video__tooltip', tooltipClassName)}\n ref={refs.setFloating}\n style={{\n position: strategy,\n top: y ?? 0,\n left: x ?? 0,\n overflowY: 'auto',\n }}\n >\n {children}\n </div>\n );\n};\n","import { MouseEventHandler, useCallback, useState } from 'react';\n\nexport const useEnterLeaveHandlers = <T extends HTMLElement>({\n onMouseEnter,\n onMouseLeave,\n}: Partial<\n Record<'onMouseEnter' | 'onMouseLeave', MouseEventHandler<T>>\n> = {}) => {\n const [tooltipVisible, setTooltipVisible] = useState(false);\n\n const handleMouseEnter: MouseEventHandler<T> = useCallback(\n (e) => {\n setTooltipVisible(true);\n onMouseEnter?.(e);\n },\n [onMouseEnter],\n );\n\n const handleMouseLeave: MouseEventHandler<T> = useCallback(\n (e) => {\n setTooltipVisible(false);\n onMouseLeave?.(e);\n },\n [onMouseLeave],\n );\n\n return { handleMouseEnter, handleMouseLeave, tooltipVisible };\n};\n","import { ComponentProps, useState } from 'react';\nimport { Tooltip, TooltipProps } from './Tooltip';\nimport { useEnterLeaveHandlers } from './hooks';\n\ntype WithPopupProps = ComponentProps<'div'> &\n Omit<TooltipProps<HTMLDivElement>, 'referenceElement'>;\n\n// todo: duplicate of CallParticipantList.tsx#MediaIndicator - refactor to a single component\nexport const WithTooltip = ({\n title,\n tooltipClassName,\n tooltipPlacement,\n ...props\n}: WithPopupProps) => {\n const { handleMouseEnter, handleMouseLeave, tooltipVisible } =\n useEnterLeaveHandlers<HTMLDivElement>();\n const [tooltipAnchor, setTooltipAnchor] = useState<HTMLDivElement | null>(\n null,\n );\n\n return (\n <>\n <Tooltip\n referenceElement={tooltipAnchor}\n visible={tooltipVisible}\n tooltipClassName={tooltipClassName}\n tooltipPlacement={tooltipPlacement}\n >\n {title || ''}\n </Tooltip>\n <div\n ref={setTooltipAnchor}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...props}\n />\n </>\n );\n};\n","import {\n ComponentProps,\n ComponentPropsWithRef,\n ComponentType,\n ForwardedRef,\n forwardRef,\n MouseEventHandler,\n useCallback,\n useState,\n} from 'react';\nimport clsx from 'clsx';\nimport { Placement } from '@floating-ui/react';\n\nimport { Tooltip } from '../Tooltip';\n\ntype CopyToClipboardButtonProps = ComponentProps<'button'> & {\n /** Custom button component implementation. Will be rendered instead of native button element */\n Button?: ComponentType<\n ComponentPropsWithRef<'button'> & { ref: ForwardedRef<HTMLButtonElement> }\n >;\n /** Custom function to override the logic of generating the call invitation link */\n copyValue: (() => string) | string;\n /** Callback invoked if the copy-to-clipboard action fails */\n onError?: (button: HTMLButtonElement, e: Error) => void;\n /** Callback invoked if the copy-to-clipboard action succeeds */\n onSuccess?: (button: HTMLButtonElement) => void;\n};\n\nexport const CopyToClipboardButton = forwardRef<\n HTMLButtonElement,\n CopyToClipboardButtonProps\n>(\n (\n { Button, className, copyValue, onClick, onError, onSuccess, ...restProps },\n ref,\n ) => {\n const handleClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n async (event) => {\n if (onClick) onClick(event);\n const value = typeof copyValue === 'function' ? copyValue() : copyValue;\n try {\n await navigator?.clipboard.writeText(value);\n onSuccess?.(event.target as HTMLButtonElement);\n } catch (error) {\n onError?.(event.target as HTMLButtonElement, error as Error);\n }\n },\n [copyValue, onClick, onError, onSuccess],\n );\n\n const props = {\n ...restProps,\n ref: ref,\n className: clsx('str-video__copy-to-clipboard-button', className),\n onClick: handleClick,\n };\n\n return Button ? <Button {...props} /> : <button {...props} />;\n },\n);\n\ntype CopyToClipboardButtonWithPopupProps = Exclude<\n CopyToClipboardButtonProps,\n 'onError' | 'onSuccess'\n> & {\n dismissAfterMs?: number;\n /** String displayed when copy-to-clipboard action fails */\n onErrorMessage?: string;\n /** String displayed when copy-to-clipboard succeeds fails */\n onSuccessMessage?: string;\n /** Class applied to the popup container element */\n popupClassName?: string;\n // todo: We should replace Placement for internal type\n popupPlacement?: Placement;\n};\n\nexport const CopyToClipboardButtonWithPopup = ({\n dismissAfterMs = 1500,\n onErrorMessage = 'Failed to copy',\n onSuccessMessage = 'Copied to clipboard',\n popupClassName,\n popupPlacement,\n ...restProps\n}: CopyToClipboardButtonWithPopupProps) => {\n const [tooltipText, setTooltipText] = useState('');\n const [tooltipAnchor, setTooltipAnchor] = useState<HTMLButtonElement | null>(\n null,\n );\n\n const setTemporaryPopup = useCallback(\n (popupText: string) => {\n setTooltipText(popupText);\n setTimeout(() => setTooltipText(''), dismissAfterMs);\n },\n [dismissAfterMs],\n );\n\n const onSuccess = useCallback(\n () => setTemporaryPopup(onSuccessMessage),\n [onSuccessMessage, setTemporaryPopup],\n );\n\n const onError = useCallback(\n () => setTemporaryPopup(onErrorMessage),\n [onErrorMessage, setTemporaryPopup],\n );\n\n return (\n <>\n <Tooltip\n tooltipClassName={clsx(\n 'str-video__copy-to-clipboard-button__popup',\n popupClassName,\n )}\n tooltipPlacement={popupPlacement}\n referenceElement={tooltipAnchor}\n visible={!!tooltipText}\n >\n {tooltipText}\n </Tooltip>\n <CopyToClipboardButton\n {...restProps}\n onError={onError}\n onSuccess={onSuccess}\n ref={setTooltipAnchor}\n />\n </>\n );\n};\n","import { ComponentProps } from 'react';\n\nexport const TextButton = ({\n children,\n ...rest\n}: Omit<ComponentProps<'button'>, 'ref' | 'className'>) => {\n return (\n <button {...rest} className=\"str-video__text-button\">\n {children}\n </button>\n );\n};\n","import { MouseEventHandler, useCallback } from 'react';\nimport { IconButton } from '../Button';\nimport { useCall } from '@stream-io/video-react-bindings';\n\nexport type AcceptCallButtonProps = {\n disabled?: boolean;\n onClick?: MouseEventHandler<HTMLButtonElement>;\n onAccept?: () => void;\n};\n\nexport const AcceptCallButton = ({\n disabled,\n onAccept,\n onClick,\n}: AcceptCallButtonProps) => {\n const call = useCall();\n const handleClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n async (e) => {\n if (onClick) {\n onClick(e);\n } else if (call) {\n await call.join();\n onAccept?.();\n }\n },\n [onClick, onAccept, call],\n );\n return (\n <IconButton\n disabled={disabled}\n icon=\"call-accept\"\n variant=\"success\"\n onClick={handleClick}\n />\n );\n};\n","import { PropsWithChildren, ReactNode, useEffect } from 'react';\nimport { Placement } from '@floating-ui/react';\n\nimport { useFloatingUIPreset } from '../../hooks';\n\nexport type NotificationProps = {\n message?: ReactNode;\n isVisible?: boolean;\n visibilityTimeout?: number;\n resetIsVisible?: () => void;\n placement?: Placement;\n iconClassName?: string | null;\n};\n\nexport const Notification = (props: PropsWithChildren<NotificationProps>) => {\n const {\n isVisible,\n message,\n children,\n visibilityTimeout,\n resetIsVisible,\n placement = 'top',\n iconClassName = 'str-video__notification__icon',\n } = props;\n\n const { refs, x, y, strategy } = useFloatingUIPreset({\n placement,\n strategy: 'absolute',\n });\n\n useEffect(() => {\n if (!isVisible || !visibilityTimeout || !resetIsVisible) return;\n\n const timeout = setTimeout(() => {\n resetIsVisible();\n }, visibilityTimeout);\n\n return () => clearTimeout(timeout);\n }, [isVisible, resetIsVisible, visibilityTimeout]);\n\n return (\n <div ref={refs.setReference}>\n {isVisible && (\n <div\n className=\"str-video__notification\"\n ref={refs.setFloating}\n style={{\n position: strategy,\n top: y ?? 0,\n left: x ?? 0,\n overflowY: 'auto',\n }}\n >\n {iconClassName && <i className={iconClassName} />}\n <span className=\"str-video__notification__message\">{message}</span>\n </div>\n )}\n {children}\n </div>\n );\n};\n","import { Notification } from './Notification';\nimport { OwnCapability } from '@stream-io/video-client';\nimport {\n PropsWithChildren,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { useHasPermissions } from '@stream-io/video-react-bindings';\n\nexport type PermissionNotificationProps = PropsWithChildren<{\n /**\n * Set this to true if there is ongoing request for the permission.\n */\n isAwaitingApproval: boolean;\n\n /**\n * The message to display in the notification once\n * the requested permission is granted.\n */\n messageApproved: string;\n\n /**\n * The message to display in the notification once a permission\n * is revoked.\n */\n messageRevoked: string;\n\n /**\n * The message to display in the notification while\n * the requested permission is awaiting approval.\n */\n messageAwaitingApproval: string;\n\n /**\n * The permission to check for.\n */\n permission: OwnCapability;\n\n /**\n * The time in milliseconds to display the notification.\n * Defaults to 3500ms.\n */\n visibilityTimeout?: number;\n}>;\n\nexport const PermissionNotification = (props: PermissionNotificationProps) => {\n const {\n permission,\n isAwaitingApproval,\n messageApproved,\n messageAwaitingApproval,\n messageRevoked,\n visibilityTimeout = 3500,\n children,\n } = props;\n const hasPermission = useHasPermissions(permission);\n const prevHasPermission = useRef(hasPermission);\n const [showNotification, setShowNotification] = useState<\n 'granted' | 'revoked'\n >();\n useEffect(() => {\n if (hasPermission && !prevHasPermission.current) {\n setShowNotification('granted');\n prevHasPermission.current = true;\n } else if (!hasPermission && prevHasPermission.current) {\n setShowNotification('revoked');\n prevHasPermission.current = false;\n }\n }, [hasPermission]);\n\n const resetIsVisible = useCallback(() => setShowNotification(undefined), []);\n if (isAwaitingApproval) {\n return (\n <Notification\n isVisible={isAwaitingApproval && !hasPermission}\n message={messageAwaitingApproval}\n >\n {children}\n </Notification>\n );\n }\n\n return (\n <Notification\n isVisible={!!showNotification}\n visibilityTimeout={visibilityTimeout}\n resetIsVisible={resetIsVisible}\n message={\n showNotification === 'granted' ? messageApproved : messageRevoked\n }\n >\n {children}\n </Notification>\n );\n};\n","import { PropsWithChildren, useEffect, useState } from 'react';\nimport { createSoundDetector, SfuModels } from '@stream-io/video-client';\nimport { useCallStateHooks, useI18n } from '@stream-io/video-react-bindings';\n\nimport { useMediaDevices } from '../../core';\nimport { Notification } from './Notification';\n\nexport type SpeakingWhileMutedNotificationProps = {\n /*\n Text message displayed by the notification.\n */\n text?: string;\n};\n\nexport const SpeakingWhileMutedNotification = ({\n children,\n text,\n}: PropsWithChildren<SpeakingWhileMutedNotificationProps>) => {\n const { useLocalParticipant } = useCallStateHooks();\n const localParticipant = useLocalParticipant();\n const { getAudioStream } = useMediaDevices();\n const { t } = useI18n();\n\n const message = text ?? t('You are muted. Unmute to speak.');\n const isAudioMute = !localParticipant?.publishedTracks.includes(\n SfuModels.TrackType.AUDIO,\n );\n const audioDeviceId = localParticipant?.audioDeviceId;\n const [isSpeakingWhileMuted, setIsSpeakingWhileMuted] = useState(false);\n useEffect(() => {\n // do nothing when not muted\n if (!isAudioMute) return;\n const disposeSoundDetector = getAudioStream({\n deviceId: audioDeviceId,\n }).then((audioStream) =>\n createSoundDetector(audioStream, ({ isSoundDetected }) => {\n setIsSpeakingWhileMuted((isNotified) =>\n isNotified ? isNotified : isSoundDetected,\n );\n }),\n );\n disposeSoundDetector.catch((err) => {\n console.error('Error while creating sound detector', err);\n });\n return () => {\n disposeSoundDetector\n .then((dispose) => dispose())\n .catch((err) => {\n console.error('Error while disposing sound detector', err);\n });\n setIsSpeakingWhileMuted(false);\n };\n }, [audioDeviceId, getAudioStream, isAudioMute]);\n\n useEffect(() => {\n if (!isSpeakingWhileMuted) return;\n const timeout = setTimeout(() => {\n setIsSpeakingWhileMuted(false);\n }, 3500);\n return () => {\n clearTimeout(timeout);\n setIsSpeakingWhileMuted(false);\n };\n }, [isSpeakingWhileMuted]);\n return (\n <Notification message={message} isVisible={isSpeakingWhileMuted}>\n {children}\n </Notification>\n );\n};\n","import {\n CallStatsButton,\n CancelCallButton,\n RecordCallButton,\n ScreenShareButton,\n ToggleAudioPublishingButton,\n ToggleVideoPublishingButton,\n} from './index';\nimport { SpeakingWhileMutedNotification } from '../Notification';\n\nexport type CallControlsProps = {\n onLeave?: () => void;\n};\n\nexport const CallControls = ({ onLeave }: CallControlsProps) => (\n <div className=\"str-video__call-controls\">\n <RecordCallButton />\n <CallStatsButton />\n <ScreenShareButton />\n <SpeakingWhileMutedNotification>\n <ToggleAudioPublishingButton />\n </SpeakingWhileMutedNotification>\n <ToggleVideoPublishingButton />\n <CancelCallButton onLeave={onLeave} />\n </div>\n);\n","import { ResponsiveLine } from '@nivo/line';\n\nexport const CallStatsLatencyChart = (props: {\n values: Array<{ x: number; y: number }>;\n}) => {\n const { values } = props;\n let max = 0;\n const data = values.map((point) => {\n const { y } = point;\n max = Math.max(max, y);\n return point;\n });\n return (\n <div className=\"str-video__call-stats-line-chart-container\">\n <ResponsiveLine\n colors={{ scheme: 'blues' }}\n data={[\n {\n id: 'Latency',\n data: data,\n },\n ]}\n animate={false}\n margin={{ top: 10, right: 5, bottom: 5, left: 30 }}\n enablePoints\n enableGridX={false}\n enableGridY\n enableSlices=\"x\"\n isInteractive\n useMesh={false}\n xScale={{ type: 'point' }}\n yScale={{\n type: 'linear',\n min: 0,\n max: max < 220 ? 220 : max + 30,\n nice: true,\n }}\n theme={{\n axis: {\n ticks: {\n text: {\n fill: '#FCFCFD',\n },\n line: {\n stroke: '#FCFCFD',\n },\n },\n },\n grid: {\n line: {\n strokeWidth: 0.1,\n },\n },\n }}\n />\n </div>\n );\n};\n","import { useEffect, useRef, useState } from 'react';\nimport {\n AggregatedStatsReport,\n CallStatsReport,\n} from '@stream-io/video-client';\nimport { useCallStateHooks } from '@stream-io/video-react-bindings';\nimport { CallStatsLatencyChart } from './CallStatsLatencyChart';\n\nexport const CallStats = () => {\n const [latencyBuffer, setLatencyBuffer] = useState<\n Array<{ x: number; y: number }>\n >(() => {\n const now = Date.now();\n return Array.from({ length: 20 }, (_, i) => ({ x: now + i, y: 0 }));\n });\n\n const [publishBitrate, setPublishBitrate] = useState('-');\n const [subscribeBitrate, setSubscribeBitrate] = useState('-');\n const previousStats = useRef<CallStatsReport>();\n const { useCallStatsReport } = useCallStateHooks();\n const callStatsReport = useCallStatsReport();\n\n useEffect(() => {\n if (!callStatsReport) return;\n if (!previousStats.current) {\n previousStats.current = callStatsReport;\n return;\n }\n const previousCallStatsReport = previousStats.current;\n setPublishBitrate(() => {\n return calculatePublishBitrate(previousCallStatsReport, callStatsReport);\n });\n setSubscribeBitrate(() => {\n return calculateSubscribeBitrate(\n previousCallStatsReport,\n callStatsReport,\n );\n });\n\n setLatencyBuffer((latencyBuf) => {\n const newLatencyBuffer = latencyBuf.slice(-19);\n newLatencyBuffer.push({\n x: callStatsReport.timestamp,\n y: callStatsReport.publisherStats.averageRoundTripTimeInMs,\n });\n return newLatencyBuffer;\n });\n\n previousStats.current = callStatsReport;\n }, [callStatsReport]);\n\n return (\n <div className=\"str-video__call-stats\">\n {callStatsReport && (\n <>\n <h3>Call Latency</h3>\n <CallStatsLatencyChart values={latencyBuffer} />\n\n <h3>Call performance</h3>\n <div className=\"str-video__call-stats__card-container\">\n <StatCard label=\"Region\" value={callStatsReport.datacenter} />\n <StatCard\n label=\"Latency\"\n value={`${callStatsReport.publisherStats.averageRoundTripTimeInMs} ms.`}\n />\n <StatCard\n label=\"Receive jitter\"\n value={`${callStatsReport.subscriberStats.averageJitterInMs} ms.`}\n />\n <StatCard\n label=\"Publish jitter\"\n value={`${callStatsReport.publisherStats.averageJitterInMs} ms.`}\n />\n <StatCard\n label=\"Publish resolution\"\n value={toFrameSize(callStatsReport.publisherStats)}\n />\n <StatCard\n label=\"Publish quality drop reason\"\n value={callStatsReport.publisherStats.qualityLimitationReasons}\n />\n <StatCard\n label=\"Receiving resolution\"\n value={toFrameSize(callStatsReport.subscriberStats)}\n />\n <StatCard\n label=\"Receive quality drop reason\"\n value={callStatsReport.subscriberStats.qualityLimitationReasons}\n />\n <StatCard label=\"Publish bitrate\" value={publishBitrate} />\n <StatCard label=\"Receiving bitrate\" value={subscribeBitrate} />\n </div>\n </>\n )}\n </div>\n );\n};\n\nexport const StatCard = (props: { label: string; value: string }) => {\n const { label, value } = props;\n return (\n <div className=\"str-video__call-stats__card\">\n <div className=\"str-video__call-stats__card_label\">{label}</div>\n <div className=\"str-video__call-stats__card_value\">{value}</div>\n </div>\n );\n};\n\nconst toFrameSize = (stats: AggregatedStatsReport) => {\n const {\n highestFrameWidth: w,\n highestFrameHeight: h,\n highestFramesPerSecond: fps,\n } = stats;\n let size = `-`;\n if (w && h) {\n size = `${w}x${h}`;\n if (fps) {\n size += `@${fps}fps.`;\n }\n }\n return size;\n};\n\nconst calculatePublishBitrate = (\n previousCallStatsReport: CallStatsReport,\n callStatsReport: CallStatsReport,\n) => {\n const {\n publisherStats: {\n totalBytesSent: previousTotalBytesSent,\n timestamp: previousTimestamp,\n },\n } = previousCallStatsReport;\n\n const {\n publisherStats: { totalBytesSent, timestamp },\n } = callStatsReport;\n\n const bytesSent = totalBytesSent - previousTotalBytesSent;\n const timeElapsed = timestamp - previousTimestamp;\n return `${((bytesSent * 8) / timeElapsed).toFixed(2)} kbps`;\n};\n\nconst calculateSubscribeBitrate = (\n previousCallStatsReport: CallStatsReport,\n callStatsReport: CallStatsReport,\n) => {\n const {\n subscriberStats: {\n totalBytesReceived: previousTotalBytesReceived,\n timestamp: previousTimestamp,\n },\n } = previousCallStatsReport;\n\n const {\n subscriberStats: { totalBytesReceived, timestamp },\n } = callStatsReport;\n\n const bytesReceived = totalBytesReceived - previousTotalBytesReceived;\n const timeElapsed = timestamp - previousTimestamp;\n return `${((bytesReceived * 8) / timeElapsed).toFixed(2)} kbps`;\n};\n","import { forwardRef } from 'react';\n\nimport { CallStats } from '../CallStats';\nimport { CompositeButton, IconButton } from '../Button/';\nimport { MenuToggle, ToggleMenuButtonProps } from '../Menu';\n\nexport const CallStatsButton = () => (\n <MenuToggle placement=\"top-end\" ToggleButton={ToggleMenuButton}>\n <CallStats />\n </MenuToggle>\n);\n\nconst ToggleMenuButton = forwardRef<\n HTMLDivElement,\n ToggleMenuButtonProps<HTMLDivElement>\n>(({ menuShown }, ref) => (\n <CompositeButton ref={ref} active={menuShown} caption={'Stats'}>\n <IconButton icon=\"stats\" title=\"Statistics\" />\n </CompositeButton>\n));\n","import { MouseEventHandler, useCallback } from 'react';\nimport { IconButton } from '../Button/';\nimport { useCall } from '@stream-io/video-react-bindings';\n\nexport type CancelCallButtonProps = {\n disabled?: boolean;\n onClick?: MouseEventHandler<HTMLButtonElement>;\n onLeave?: () => void;\n};\n\nexport const CancelCallButton = ({\n disabled,\n onClick,\n onLeave,\n}: CancelCallButtonProps) => {\n const call = useCall();\n const handleClick: MouseEventHandler<HTMLButtonElement> = useCallback(\n async (e) => {\n if (onClick) {\n onClick(e);\n } else if (call) {\n await call.leave();\n onLeave?.();\n }\n },\n [onClick, onLeave, call],\n );\n return (\n <IconButton\n disabled={disabled}\n icon=\"call-end\"\n variant=\"danger\"\n onClick={handleClick}\n />\n );\n};\n","import { useEffect } from 'react';\nimport { StreamVideoParticipant } from '@stream-io/video-client';\nimport { useCall } from '@stream-io/video-react-bindings';\n\nexport type ReactionProps = {\n participant: StreamVideoParticipant;\n hideAfterTimeoutInMs?: number;\n emojiReactionMap?: Record<string, string>;\n};\n\nexport const defaultEmojiReactionMap: Record<string, string> = {\n ':like:': '👍',\n ':raise-hand:': '✋',\n ':fireworks:': '🎉',\n ':dislike:': '👎',\n ':heart:': '❤️',\n ':smile:': '😀',\n};\n\nexport const Reaction = ({\n participant: { reaction, sessionId },\n hideAfterTimeoutInMs = 5500,\n emojiReactionMap = defaultEmojiReactionMap,\n}: ReactionProps) => {\n const call = useCall();\n\n useEffect(() => {\n if (!call || !reaction) return;\n\n const timeoutId = setTimeout(() => {\n call.resetReaction(sessionId);\n }, hideAfterTimeoutInMs);\n\n return () => {\n clearTimeout(timeoutId);\n };\n }, [call, hideAfterTimeoutInMs, reaction, sessionId]);\n\n if (!reaction) return null;\n\n const { emoji_code: emojiCode } = reaction;\n\n return (\n <div className=\"str-video__reaction\">\n <span className=\"str-video__reaction__emoji\">\n {emojiCode && emojiReactionMap[emojiCode]}\n </span>\n </div>\n );\n};\n","import { OwnCapability, StreamReaction } from '@stream-io/video-client';\nimport { Restricted, useCall, useI18n } from '@stream-io/video-react-bindings';\n\nimport { CompositeButton, IconButton } from '../Button';\nimport { defaultEmojiReactionMap } from '../Reaction';\n\nexport const defaultReactions: StreamReaction[] = [\n {\n type: 'reaction',\n emoji_code: ':like:',\n },\n {\n // TODO OL: use `prompt` type?\n type: 'raised-hand',\n emoji_code: ':raise-hand:',\n },\n {\n type: 'reaction',\n emoji_code: ':fireworks:',\n },\n {\n type: 'reaction',\n emoji_code: ':dislike:',\n },\n {\n type: 'reaction',\n emoji_code: ':heart:',\n },\n {\n type: 'reaction',\n emoji_code: ':smile:',\n },\n];\n\nexport interface ReactionsButtonProps {\n reactions?: StreamReaction[];\n}\n\nexport const ReactionsButton = ({\n reactions = defaultReactions,\n}: ReactionsButtonProps) => {\n const { t } = useI18n();\n\n return (\n <Restricted requiredGrants={[OwnCapability.CREATE_REACTION]}>\n <CompositeButton\n active={false}\n caption={t('Reactions')}\n menuPlacement=\"top-start\"\n Menu={<DefaultReactionsMenu reactions={reactions} />}\n >\n <IconButton\n icon=\"reactions\"\n title={t('Reactions')}\n onClick={() => {\n console.log('Reactions');\n }}\n />\n </CompositeButton>\n </Restricted>\n );\n};\n\nexport interface DefaultReactionsMenuProps {\n reactions: StreamReaction[];\n}\n\nexport const DefaultReactionsMenu = ({\n reactions,\n}: DefaultReactionsMenuProps) => {\n const call = useCall();\n return (\n <div className=\"str-video__reactions-menu\">\n {reactions.map((reaction) => (\n <button\n key={reaction.emoji_code}\n type=\"button\"\n className=\"str-video__reactions-menu__button\"\n onClick={() => {\n call?.sendReaction(reaction);\n }}\n >\n {reaction.emoji_code && defaultEmojiReactionMap[reaction.emoji_code]}\n </button>\n ))}\n </div>\n );\n};\n","import clsx from 'clsx';\n\nexport type LoadingIndicatorProps = {\n className?: string;\n /** String will be injected into class and later used to apply as a CSS mask-image to an element as data URL */\n type?: string;\n /** Text to be displayed under the loading indicator icon */\n text?: string;\n /** Tooltip to be displayed on hover */\n tooltip?: string;\n};\n\nexport const LoadingIndicator = ({\n className,\n type = 'spinner',\n text,\n tooltip,\n}: LoadingIndicatorProps) => {\n return (\n <div\n className={clsx('str-video__loading-indicator', className)}\n title={tooltip}\n >\n <div className={clsx('str-video__loading-indicator__icon', type)}></div>\n {text && <p className=\"str-video__loading-indicator-text\">{text}</p>}\n </div>\n );\n};\n","import { OwnCapability } from '@stream-io/video-client';\nimport { Restricted, useCall, useI18n } from '@stream-io/video-react-bindings';\nimport { CompositeButton, IconButton } from '../Button/';\nimport { LoadingIndicator } from '../LoadingIndicator';\nimport { useToggleCallRecording } from '../../hooks/useToggleCallRecording';\n\nexport type RecordCallButtonProps = {\n caption?: string;\n};\n\nexport const RecordCallButton = ({\n caption = 'Record',\n}: RecordCallButtonProps) => {\n const call = useCall();\n\n const { t } = useI18n();\n const { toggleCallRecording, isAwaitingResponse, isCallRecordingInProgress } =\n useToggleCallRecording();\n\n return (\n <Restricted\n requiredGrants={[\n OwnCapability.START_RECORD_CALL,\n OwnCapability.STOP_RECORD_CALL,\n ]}\n >\n <CompositeButton active={isCallRecordingInProgress} caption={caption}>\n {isAwaitingResponse ? (\n <LoadingIndicator\n tooltip={\n isCallRecordingInProgress\n ? t('Waiting for recording to stop...')\n : t('Waiting for recording to start...')\n }\n />\n ) : (\n <IconButton\n // FIXME OL: sort out this ambiguity\n enabled={!!call}\n disabled={!call}\n icon={isCallRecordingInProgress ? 'recording-on' : 'recording-off'}\n title={t('Record call')}\n onClick={toggleCallRecording}\n />\n )}\n </CompositeButton>\n </Restricted>\n );\n};\n","import { OwnCapability } from '@stream-io/video-client';\nimport {\n Restricted,\n useCall,\n useCallStateHooks,\n useI18n,\n} from '@stream-io/video-react-bindings';\nimport { CompositeButton, IconButton } from '../Button/';\nimport { PermissionNotification } from '../Notification';\nimport { useToggleScreenShare } from '../../hooks';\n\nexport type ScreenShareButtonProps = {\n caption?: string;\n};\n\nexport const ScreenShareButton = ({\n caption = 'Screen Share',\n}: ScreenShareButtonProps) => {\n const call = useCall();\n const { useHasOngoingScreenShare } = useCallStateHooks();\n const isSomeoneScreenSharing = useHasOngoingScreenShare();\n\n const { t } = useI18n();\n const { toggleScreenShare, isAwaitingPermission, isScreenSharing } =\n useToggleScreenShare();\n\n return (\n <Restricted requiredGrants={[OwnCapability.SCREENSHARE]}>\n <PermissionNotification\n permission={OwnCapability.SCREENSHARE}\n isAwaitingApproval={isAwaitingPermission}\n messageApproved={t('You can now share your screen.')}\n messageAwaitingApproval={t('Awaiting for an approval to share screen.')}\n messageRevoked={t('You can no longer share your screen.')}\n >\n <CompositeButton active={isSomeoneScreenSharing} caption={caption}>\n <IconButton\n icon={isScreenSharing ? 'screen-share-on' : 'screen-share-off'}\n title={t('Share screen')}\n disabled={(!isScreenSharing && isSomeoneScreenSharing) || !call}\n onClick={toggleScreenShare}\n />\n </CompositeButton>\n </PermissionNotification>\n </Restricted>\n );\n};\n","import clsx from 'clsx';\nimport { ChangeEventHandler } from 'react';\n\ntype DeviceSelectorOptionProps = {\n id: string;\n label: string;\n name: string;\n selected?: boolean;\n value: string;\n disabled?: boolean;\n defaultChecked?: boolean;\n onChange?: ChangeEventHandler<HTMLInputElement>;\n};\n\nconst DeviceSelectorOption = ({\n disabled,\n id,\n label,\n onChange,\n name,\n selected,\n defaultChecked,\n value,\n}: DeviceSelectorOptionProps) => {\n return (\n <label\n className={clsx('str-video__device-settings__option', {\n 'str-video__device-settings__option--selected': selected,\n 'str-video__device-settings__option--disabled': disabled,\n })}\n htmlFor={id}\n >\n <input\n type=\"radio\"\n name={name}\n onChange={onChange}\n value={value}\n id={id}\n checked={selected}\n defaultChecked={defaultChecked}\n disabled={disabled}\n />\n {label}\n </label>\n );\n};\nexport const DeviceSelector = (props: {\n devices: MediaDeviceInfo[];\n selectedDeviceId?: string;\n title: string;\n onChange?: (deviceId: string) => void;\n}) => {\n const {\n devices = [],\n selectedDeviceId: selectedDeviceFromProps,\n title,\n onChange,\n } = props;\n const inputGroupName = title.replace(' ', '-').toLowerCase();\n\n // sometimes the browser (Chrome) will report the system-default device\n // with an id of 'default'. In case when it doesn't, we'll select the first\n // available device.\n let selectedDeviceId = selectedDeviceFromProps;\n if (\n devices.length > 0 &&\n !devices.find((d) => d.deviceId === selectedDeviceId)\n ) {\n selectedDeviceId = devices[0].deviceId;\n }\n\n return (\n <div className=\"str-video__device-settings__device-kind\">\n <div className=\"str-video__device-settings__device-selector-title\">\n {title}\n </div>\n {!devices.length ? (\n <DeviceSelectorOption\n id={`${inputGroupName}--default`}\n label=\"Default\"\n name={inputGroupName}\n defaultChecked\n value=\"default\"\n />\n ) : (\n devices.map((device) => {\n return (\n <DeviceSelectorOption\n id={`${inputGroupName}--${device.deviceId}`}\n value={device.deviceId}\n label={device.label}\n key={device.deviceId}\n onChange={(e) => {\n onChange?.(e.target.value);\n }}\n name={inputGroupName}\n selected={\n device.deviceId === selectedDeviceId || devices.length === 1\n }\n />\n );\n })\n )}\n </div>\n );\n};\n","import { DeviceSelector } from './DeviceSelector';\nimport {\n useMediaDevices,\n useAudioInputDevices,\n useAudioOutputDevices,\n} from '../../core';\n\nexport type DeviceSelectorAudioInputProps = {\n title?: string;\n};\n\nexport const DeviceSelectorAudioInput = ({\n title = 'Select a Mic',\n}: DeviceSelectorAudioInputProps) => {\n const { selectedAudioInputDeviceId, switchDevice } = useMediaDevices();\n const audioInputDevices = useAudioInputDevices();\n\n return (\n <DeviceSelector\n devices={audioInputDevices}\n selectedDeviceId={selectedAudioInputDeviceId}\n onChange={(deviceId) => {\n switchDevice('audioinput', deviceId);\n }}\n title={title}\n />\n );\n};\n\nexport type DeviceSelectorAudioOutputProps = {\n title?: string;\n};\n\nexport const DeviceSelectorAudioOutput = ({\n title = 'Select Speakers',\n}: DeviceSelectorAudioOutputProps) => {\n const {\n isAudioOutputChangeSupported,\n selectedAudioOutputDeviceId,\n switchDevice,\n } = useMediaDevices();\n\n const audioOutputDevices = useAudioOutputDevices();\n\n if (!isAudioOutputChangeSupported) return null;\n\n return (\n <DeviceSelector\n devices={audioOutputDevices}\n selectedDeviceId={selectedAudioOutputDeviceId}\n onChange={(deviceId) => {\n switchDevice('audiooutput', deviceId);\n }}\n title={title}\n />\n );\n};\n","import { DeviceSelector } from './DeviceSelector';\nimport { useMediaDevices, useVideoDevices } from '../../core';\n\nexport type DeviceSelectorVideoProps = {\n title?: string;\n};\n\nexport const DeviceSelectorVideo = ({ title }: DeviceSelectorVideoProps) => {\n const { selectedVideoDeviceId, switchDevice } = useMediaDevices();\n const videoDevices = useVideoDevices();\n\n return (\n <DeviceSelector\n devices={videoDevices}\n selectedDeviceId={selectedVideoDeviceId}\n onChange={(deviceId) => {\n switchDevice('videoinput', deviceId);\n }}\n title={title || 'Select a Camera'}\n />\n );\n};\n","import { forwardRef } from 'react';\nimport { MenuToggle, ToggleMenuButtonProps } from '../Menu';\nimport {\n DeviceSelectorAudioInput,\n DeviceSelectorAudioOutput,\n} from './DeviceSelectorAudio';\nimport { DeviceSelectorVideo } from './DeviceSelectorVideo';\nimport { IconButton } from '../Button';\nimport clsx from 'clsx';\n\nexport const DeviceSettings = () => {\n return (\n <MenuToggle placement=\"bottom-end\" ToggleButton={ToggleMenuButton}>\n <Menu />\n </MenuToggle>\n );\n};\n\nconst Menu = () => (\n <div className=\"str-video__device-settings\">\n <DeviceSelectorVideo />\n <DeviceSelectorAudioInput />\n <DeviceSelectorAudioOutput />\n </div>\n);\n\nconst ToggleMenuButton = forwardRef<HTMLButtonElement, ToggleMenuButtonProps>(\n ({ menuShown }, ref) => (\n <IconButton\n className={clsx('str-video__device-settings__button', {\n 'str-video__device-settings__button--active': menuShown,\n })}\n title=\"Toggle device menu\"\n icon=\"device-settings\"\n ref={ref}\n // tabindex={0}\n />\n ),\n);\n","import { ComponentType } from 'react';\nimport { OwnCapability, SfuModels } from '@stream-io/video-client';\nimport {\n Restricted,\n useCallStateHooks,\n useI18n,\n} from '@stream-io/video-react-bindings';\n\nimport { useMediaDevices } from '../../core';\nimport { DeviceSelectorAudioInput } from '../DeviceSettings';\nimport { CompositeButton, IconButton } from '../Button';\nimport { PermissionNotification } from '../Notification';\nimport { useToggleAudioMuteState } from '../../hooks';\n\nexport type ToggleAudioPreviewButtonProps = {\n caption?: string;\n Menu?: ComponentType;\n};\n\nexport const ToggleAudioPreviewButton = (\n props: ToggleAudioPreviewButtonProps,\n) => {\n const { initialAudioEnabled, toggleInitialAudioMuteState } =\n useMediaDevices();\n const { t } = useI18n();\n const { caption = t('Mic'), Menu = DeviceSelectorAudioInput } = props;\n\n return (\n <CompositeButton\n Menu={Menu}\n active={!initialAudioEnabled}\n caption={caption || t('Mic')}\n >\n <IconButton\n icon={initialAudioEnabled ? 'mic' : 'mic-off'}\n onClick={toggleInitialAudioMuteState}\n />\n </CompositeButton>\n );\n};\n\nexport type ToggleAudioPublishingButtonProps = {\n caption?: string;\n Menu?: ComponentType;\n};\n\nexport const ToggleAudioPublishingButton = (\n props: ToggleAudioPublishingButtonProps,\n) => {\n const { useLocalParticipant } = useCallStateHooks();\n const localParticipant = useLocalParticipant();\n const { t } = useI18n();\n\n const { caption = t('Mic'), Menu = DeviceSelectorAudioInput } = props;\n\n const isAudioMute = !localParticipant?.publishedTracks.includes(\n SfuModels.TrackType.AUDIO,\n );\n\n const { toggleAudioMuteState: handleClick, isAwaitingPermission } =\n useToggleAudioMuteState();\n\n return (\n <Restricted requiredGrants={[OwnCapability.SEND_AUDIO]}>\n <PermissionNotification\n permission={OwnCapability.SEND_AUDIO}\n isAwaitingApproval={isAwaitingPermission}\n messageApproved={t('You can now speak.')}\n messageAwaitingApproval={t('Awaiting for an approval to speak.')}\n messageRevoked={t('You can no longer speak.')}\n >\n <CompositeButton Menu={Menu} active={isAudioMute} caption={caption}>\n <IconButton\n icon={isAudioMute ? 'mic-off' : 'mic'}\n onClick={handleClick}\n />\n </CompositeButton>\n </PermissionNotification>\n </Restricted>\n );\n};\n","import { CompositeButton, IconButton } from '../Button';\nimport { DeviceSelectorAudioOutput } from '../DeviceSettings';\nimport { useI18n } from '@stream-io/video-react-bindings';\nimport { ComponentType } from 'react';\n\nexport type ToggleAudioOutputButtonProps = {\n caption?: string;\n Menu?: ComponentType;\n};\n\nexport const ToggleAudioOutputButton = (\n props: ToggleAudioOutputButtonProps,\n) => {\n const { t } = useI18n();\n const { caption = t('Speakers'), Menu = DeviceSelectorAudioOutput } = props;\n\n return (\n <CompositeButton Menu={Menu} active caption={caption}>\n <IconButton icon=\"speaker\" />\n </CompositeButton>\n );\n};\n","import { ComponentType } from 'react';\nimport {\n Restricted,\n useCallStateHooks,\n useI18n,\n} from '@stream-io/video-react-bindings';\n\nimport { OwnCapability, SfuModels } from '@stream-io/video-client';\nimport { CompositeButton, IconButton } from '../Button/';\nimport { useMediaDevices } from '../../core';\nimport { DeviceSelectorVideo } from '../DeviceSettings';\nimport { PermissionNotification } from '../Notification';\nimport { useToggleVideoMuteState } from '../../hooks';\n\nexport type ToggleVideoPreviewButtonProps = {\n caption?: string;\n Menu?: ComponentType;\n};\n\nexport const ToggleVideoPreviewButton = (\n props: ToggleVideoPreviewButtonProps,\n) => {\n const { toggleInitialVideoMuteState, initialVideoState } = useMediaDevices();\n const { t } = useI18n();\n const { caption = t('Video'), Menu = DeviceSelectorVideo } = props;\n\n return (\n <CompositeButton\n Menu={Menu}\n active={!initialVideoState.enabled}\n caption={caption}\n >\n <IconButton\n icon={initialVideoState.enabled ? 'camera' : 'camera-off'}\n onClick={toggleInitialVideoMuteState}\n />\n </CompositeButton>\n );\n};\n\ntype ToggleVideoPublishingButtonProps = {\n caption?: string;\n Menu?: ComponentType;\n};\n\nexport const ToggleVideoPublishingButton = (\n props: ToggleVideoPublishingButtonProps,\n) => {\n const { useLocalParticipant } = useCallStateHooks();\n const localParticipant = useLocalParticipant();\n const { t } = useI18n();\n\n const { caption = t('Video'), Menu = DeviceSelectorVideo } = props;\n\n const isVideoMute = !localParticipant?.publishedTracks.includes(\n SfuModels.TrackType.VIDEO,\n );\n\n const { toggleVideoMuteState: handleClick, isAwaitingPermission } =\n useToggleVideoMuteState();\n\n return (\n <Restricted requiredGrants={[OwnCapability.SEND_VIDEO]}>\n <PermissionNotification\n permission={OwnCapability.SEND_VIDEO}\n isAwaitingApproval={isAwaitingPermission}\n messageApproved={t('You can now share your video.')}\n messageAwaitingApproval={t(\n 'Awaiting for an approval to share your video.',\n )}\n messageRevoked={t('You can no longer share your video.')}\n >\n <CompositeButton Menu={Menu} active={isVideoMute} caption={caption}>\n <IconButton\n icon={isVideoMute ? 'camera-off' : 'camera'}\n onClick={handleClick}\n />\n </CompositeButton>\n </PermissionNotification>\n </Restricted>\n );\n};\n","import { Restricted, useCall } from '@stream-io/video-react-bindings';\nimport { OwnCapability } from '@stream-io/video-client';\n\nimport { TextButton } from '../Button';\n\nexport const BlockedUserListing = ({ data }: { data: string[] }) => {\n if (!data.length) return null;\n\n return (\n <>\n <div className=\"str-video__participant-listing\">\n {data.map((userId) => (\n <BlockedUserListingItem key={userId} userId={userId} />\n ))}\n </div>\n </>\n );\n};\n\nconst BlockedUserListingItem = ({ userId }: { userId: string }) => {\n const call = useCall();\n\n const unblockUserClickHandler = () => {\n if (userId) call?.unblockUser(userId);\n };\n\n return (\n <div className=\"str-video__participant-listing-item\">\n <div className=\"str-video__participant-listing-item__display-name\">\n {userId}\n </div>\n <Restricted requiredGrants={[OwnCapability.BLOCK_USERS]}>\n <TextButton onClick={unblockUserClickHandler}>Unblock</TextButton>\n </Restricted>\n </div>\n );\n};\n","import { useCallStateHooks, useI18n } from '@stream-io/video-react-bindings';\n\nexport type CallParticipantListHeaderProps = {\n /** Click event listener function to be invoked in order to dismiss / hide the CallParticipantsList from the UI */\n onClose: () => void;\n};\n\nexport const CallParticipantListHeader = ({\n onClose,\n}: CallParticipantListHeaderProps) => {\n const { useParticipants, useAnonymousParticipantCount } = useCallStateHooks();\n const participants = useParticipants();\n const anonymousParticipantCount = useAnonymousParticipantCount();\n const { t } = useI18n();\n\n return (\n <div className=\"str-video__participant-list-header\">\n <div className=\"str-video__participant-list-header__title\">\n {t('Participants')}{' '}\n <span className=\"str-video__participant-list-header__title-count\">\n ({participants.length})\n </span>\n {anonymousParticipantCount > 0 && (\n <span className=\"str-video__participant-list-header__title-anonymous\">\n {t('Anonymous', { count: anonymousParticipantCount })}\n </span>\n )}\n </div>\n <button\n onClick={onClose}\n className=\"str-video__participant-list-header__close-button\"\n >\n <span className=\"str-video__participant-list-header__close-button--icon\" />\n </button>\n </div>\n );\n};\n","import clsx from 'clsx';\nimport {\n ComponentProps,\n ComponentType,\n forwardRef,\n useEffect,\n useState,\n} from 'react';\nimport {\n Restricted,\n useCall,\n useConnectedUser,\n useI18n,\n} from '@stream-io/video-react-bindings';\nimport {\n OwnCapability,\n SfuModels,\n StreamVideoParticipant,\n} from '@stream-io/video-client';\nimport { IconButton } from '../Button';\nimport {\n GenericMenu,\n GenericMenuButtonItem,\n MenuToggle,\n ToggleMenuButtonProps,\n} from '../Menu';\nimport { WithTooltip } from '../Tooltip';\nimport { Icon } from '../Icon';\n\ntype CallParticipantListingItemProps = {\n /** Participant object be rendered */\n participant: StreamVideoParticipant;\n /** Custom component used to display participant's name */\n DisplayName?: ComponentType<{ participant: StreamVideoParticipant }>;\n};\nexport const CallParticipantListingItem = ({\n participant,\n DisplayName = DefaultDisplayName,\n}: CallParticipantListingItemProps) => {\n const isAudioOn = participant.publishedTracks.includes(\n SfuModels.TrackType.AUDIO,\n );\n const isVideoOn = participant.publishedTracks.includes(\n SfuModels.TrackType.VIDEO,\n );\n const isPinned = !!participant.pin;\n\n const { t } = useI18n();\n\n return (\n <div className=\"str-video__participant-listing-item\">\n <DisplayName participant={participant} />\n <div className=\"str-video__participant-listing-item__media-indicator-group\">\n <MediaIndicator\n title={isAudioOn ? t('Microphone on') : t('Microphone off')}\n className={clsx(\n 'str-video__participant-listing-item__icon',\n `str-video__participant-listing-item__icon-${\n isAudioOn ? 'mic' : 'mic-off'\n }`,\n )}\n />\n <MediaIndicator\n title={isVideoOn ? t('Camera on') : t('Camera off')}\n className={clsx(\n 'str-video__participant-listing-item__icon',\n `str-video__participant-listing-item__icon-${\n isVideoOn ? 'camera' : 'camera-off'\n }`,\n )}\n />\n {isPinned && (\n <MediaIndicator\n title={t('Pinned')}\n className={clsx(\n 'str-video__participant-listing-item__icon',\n 'str-video__participant-listing-item__icon-pinned',\n )}\n />\n )}\n\n <MenuToggle placement=\"bottom-end\" ToggleButton={ToggleButton}>\n <ParticipantActionsContextMenu participant={participant} />\n </MenuToggle>\n </div>\n </div>\n );\n};\n\nconst MediaIndicator = (props: ComponentProps<'div'>) => (\n <WithTooltip {...props} />\n);\n\ntype DisplayNameProps = {\n /** Participant object that provides the data from which display name can be generated */\n participant: StreamVideoParticipant;\n};\n// todo: implement display device flag\nconst DefaultDisplayName = ({ participant }: DisplayNameProps) => {\n const connectedUser = useConnectedUser();\n const { t } = useI18n();\n\n const meFlag = participant.userId === connectedUser?.id ? t('Me') : '';\n const nameOrId = participant.name || participant.userId || t('Unknown');\n let displayName;\n if (!participant.name) {\n displayName = meFlag || nameOrId || t('Unknown');\n } else if (meFlag) {\n displayName = `${nameOrId} (${meFlag})`;\n } else {\n displayName = nameOrId;\n }\n\n return (\n <WithTooltip\n className=\"str-video__participant-listing-item__display-name\"\n title={displayName}\n >\n {displayName}\n </WithTooltip>\n );\n};\n\nconst ToggleButton = forwardRef<HTMLButtonElement, ToggleMenuButtonProps>(\n (props, ref) => {\n return <IconButton enabled={props.menuShown} icon=\"ellipsis\" ref={ref} />;\n },\n);\n\nexport const ParticipantActionsContextMenu = ({\n participant,\n participantViewElement,\n videoElement,\n}: {\n participant: StreamVideoParticipant;\n participantViewElement?: HTMLDivElement | null;\n videoElement?: HTMLVideoElement | null;\n}) => {\n const [fullscreenModeOn, setFullscreenModeOn] = useState(\n !!document.fullscreenElement,\n );\n const [pictureInPictureElement, setPictureInPictureElement] = useState(\n document.pictureInPictureElement,\n );\n const call = useCall();\n const { t } = useI18n();\n\n const { pin, publishedTracks, sessionId, userId } = participant;\n\n const hasAudio = publishedTracks.includes(SfuModels.TrackType.AUDIO);\n const hasVideo = publishedTracks.includes(SfuModels.TrackType.VIDEO);\n const hasScreenShare = publishedTracks.includes(\n SfuModels.TrackType.SCREEN_SHARE,\n );\n const hasScreenShareAudio = publishedTracks.includes(\n SfuModels.TrackType.SCREEN_SHARE_AUDIO,\n );\n\n const blockUser = () => call?.blockUser(userId);\n const muteAudio = () => call?.muteUser(userId, 'audio');\n const muteVideo = () => call?.muteUser(userId, 'video');\n const muteScreenShare = () => call?.muteUser(userId, 'screenshare');\n const muteScreenShareAudio = () =>\n call?.muteUser(userId, 'screenshare_audio');\n\n const grantPermission = (permission: string) => () => {\n call?.updateUserPermissions({\n user_id: userId,\n grant_permissions: [permission],\n });\n };\n\n const revokePermission = (permission: string) => () => {\n call?.updateUserPermissions({\n user_id: userId,\n revoke_permissions: [permission],\n });\n };\n\n const toggleParticipantPinnedAt = () => {\n if (pin) {\n call?.unpin(sessionId);\n } else {\n call?.pin(sessionId);\n }\n };\n\n const pinForEveryone = () => {\n call\n ?.pinForEveryone({\n user_id: userId,\n session_id: sessionId,\n })\n .catch((err) => {\n console.error(`Failed to pin participant ${userId}`, err);\n });\n };\n\n const unpinForEveryone = () => {\n call\n ?.unpinForEveryone({\n user_id: userId,\n session_id: sessionId,\n })\n .catch((err) => {\n console.error(`Failed to unpin participant ${userId}`, err);\n });\n };\n\n const toggleFullscreenMode = () => {\n if (!fullscreenModeOn) {\n return participantViewElement\n ?.requestFullscreen()\n .then(() => setFullscreenModeOn(true))\n .catch(console.error);\n }\n\n document\n .exitFullscreen()\n .catch(console.error)\n .finally(() => setFullscreenModeOn(false));\n };\n\n useEffect(() => {\n if (!videoElement) return;\n\n const handlePictureInPicture = () => {\n setPictureInPictureElement(document.pictureInPictureElement);\n };\n\n videoElement.addEventListener(\n 'enterpictureinpicture',\n handlePictureInPicture,\n );\n videoElement.addEventListener(\n 'leavepictureinpicture',\n handlePictureInPicture,\n );\n\n return () => {\n videoElement.removeEventListener(\n 'enterpictureinpicture',\n handlePictureInPicture,\n );\n videoElement.removeEventListener(\n 'leavepictureinpicture',\n handlePictureInPicture,\n );\n };\n }, [videoElement]);\n\n const togglePictureInPicture = () => {\n if (videoElement && pictureInPictureElement !== videoElement) {\n return videoElement\n .requestPictureInPicture()\n .catch(console.error) as Promise<void>;\n }\n\n document.exitPictureInPicture().catch(console.error);\n };\n\n return (\n <GenericMenu>\n <GenericMenuButtonItem\n onClick={toggleParticipantPinnedAt}\n disabled={pin && !pin.isLocalPin}\n >\n <Icon icon=\"pin\" />\n {pin ? t('Unpin') : t('Pin')}\n </GenericMenuButtonItem>\n <Restricted requiredGrants={[OwnCapability.PIN_FOR_EVERYONE]}>\n <GenericMenuButtonItem\n onClick={pinForEveryone}\n disabled={pin && !pin.isLocalPin}\n >\n <Icon icon=\"pin\" />\n {t('Pin for everyone')}\n </GenericMenuButtonItem>\n <GenericMenuButtonItem\n onClick={unpinForEveryone}\n disabled={!pin || pin.isLocalPin}\n >\n <Icon icon=\"pin\" />\n {t('Unpin for everyone')}\n </GenericMenuButtonItem>\n </Restricted>\n <Restricted requiredGrants={[OwnCapability.BLOCK_USERS]}>\n <GenericMenuButtonItem onClick={blockUser}>\n <Icon icon=\"not-allowed\" />\n {t('Block')}\n </GenericMenuButtonItem>\n </Restricted>\n <Restricted requiredGrants={[OwnCapability.MUTE_USERS]}>\n <GenericMenuButtonItem disabled={!hasVideo} onClick={muteVideo}>\n <Icon icon=\"camera-off-outline\" />\n {t('Turn off video')}\n </GenericMenuButtonItem>\n <GenericMenuButtonItem\n disabled={!hasScreenShare}\n onClick={muteScreenShare}\n >\n <Icon icon=\"screen-share-off\" />\n {t('Turn off screen share')}\n </GenericMenuButtonItem>\n <GenericMenuButtonItem disabled={!hasAudio} onClick={muteAudio}>\n <Icon icon=\"no-audio\" />\n {t('Mute audio')}\n </GenericMenuButtonItem>\n <GenericMenuButtonItem\n disabled={!hasScreenShareAudio}\n onClick={muteScreenShareAudio}\n >\n <Icon icon=\"no-audio\" />\n {t('Mute screen share audio')}\n </GenericMenuButtonItem>\n </Restricted>\n {participantViewElement && (\n <GenericMenuButtonItem onClick={toggleFullscreenMode}>\n {t('{{ direction }} fullscreen', {\n direction: fullscreenModeOn ? t('Leave') : t('Enter'),\n })}\n </GenericMenuButtonItem>\n )}\n {videoElement && document.pictureInPictureEnabled && (\n <GenericMenuButtonItem onClick={togglePictureInPicture}>\n {t('{{ direction }} picture-in-picture', {\n direction:\n pictureInPictureElement === videoElement\n ? t('Leave')\n : t('Enter'),\n })}\n </GenericMenuButtonItem>\n )}\n <Restricted requiredGrants={[OwnCapability.UPDATE_CALL_PERMISSIONS]}>\n <GenericMenuButtonItem\n onClick={grantPermission(OwnCapability.SEND_AUDIO)}\n >\n {t('Allow audio')}\n </GenericMenuButtonItem>\n <GenericMenuButtonItem\n onClick={grantPermission(OwnCapability.SEND_VIDEO)}\n >\n {t('Allow video')}\n </GenericMenuButtonItem>\n <GenericMenuButtonItem\n onClick={grantPermission(OwnCapability.SCREENSHARE)}\n >\n {t('Allow screen sharing')}\n </GenericMenuButtonItem>\n\n <GenericMenuButtonItem\n onClick={revokePermission(OwnCapability.SEND_AUDIO)}\n >\n {t('Disable audio')}\n </GenericMenuButtonItem>\n <GenericMenuButtonItem\n onClick={revokePermission(OwnCapability.SEND_VIDEO)}\n >\n {t('Disable video')}\n </GenericMenuButtonItem>\n <GenericMenuButtonItem\n onClick={revokePermission(OwnCapability.SCREENSHARE)}\n >\n {t('Disable screen sharing')}\n </GenericMenuButtonItem>\n </Restricted>\n </GenericMenu>\n );\n};\n","import { ComponentType } from 'react';\nimport { StreamVideoParticipant } from '@stream-io/video-client';\nimport { CallParticipantListingItem } from './CallParticipantListingItem';\n\nexport type CallParticipantListingProps = {\n /** Array of participant objects to be rendered */\n data: StreamVideoParticipant[];\n Header?: ComponentType;\n};\n\nexport const CallParticipantListing = ({\n data,\n}: CallParticipantListingProps) => (\n <div className=\"str-video__participant-listing\">\n {data.map((participant) => (\n <CallParticipantListingItem\n key={participant.sessionId}\n participant={participant}\n />\n ))}\n </div>\n);\n","import { useI18n } from '@stream-io/video-react-bindings';\n\nexport const EmptyParticipantSearchList = () => {\n const { t } = useI18n();\n return (\n <div className=\"str-video__participant-list--empty\">\n {t('No participants found')}\n </div>\n );\n};\n","import { ComponentProps, useEffect, useState } from 'react';\nimport clsx from 'clsx';\n\ntype SearchInputProps = ComponentProps<'input'> & {\n /**\n * Resets the search to its initial state.\n * The function is called when Esc key or inputs clear button are pressed\n */\n exitSearch: () => void;\n /**\n * Flag to signal, whether search input elements should be rendered as active\n */\n isActive: boolean;\n};\nexport const SearchInput = ({\n exitSearch,\n isActive,\n ...rest\n}: SearchInputProps) => {\n const [inputElement, setInputElement] = useState<HTMLInputElement | null>(\n null,\n );\n useEffect(() => {\n if (!inputElement) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key.toLowerCase() === 'escape') exitSearch();\n };\n\n inputElement.addEventListener('keydown', handleKeyDown);\n\n return () => {\n inputElement.removeEventListener('keydown', handleKeyDown);\n };\n }, [exitSearch, inputElement]);\n\n return (\n <div\n className={clsx('str-video__search-input__container', {\n 'str-video__search-input__container--active': isActive,\n })}\n >\n <input placeholder=\"Search\" {...rest} ref={setInputElement} />\n {isActive ? (\n <button\n className=\"str-video__search-input__clear-btn\"\n onClick={exitSearch}\n >\n <span className=\"str-video__search-input__icon--active\" />\n </button>\n ) : (\n <span className=\"str-video__search-input__icon\" />\n )}\n </div>\n );\n};\n","import { ComponentType } from 'react';\nimport { LoadingIndicator as DefaultLoadingIndicator } from '../LoadingIndicator';\nimport { SearchController } from './hooks';\n\nexport type SearchResultListProps<T> = {\n data: T[];\n};\n\nexport type SearchResultsProps<T> = Pick<\n SearchController<T>,\n 'searchResults' | 'searchQueryInProgress'\n> & {\n /** Component to be displayed, when empty array of search results is provided */\n EmptySearchResultComponent: ComponentType;\n /** Component will be used to render non-empty array of search results */\n SearchResultList: ComponentType<SearchResultListProps<T>>;\n /** Component to be displayed while the search query request is in progress */\n LoadingIndicator?: ComponentType;\n};\n\nexport const SearchResults = <T extends unknown>({\n EmptySearchResultComponent,\n LoadingIndicator = DefaultLoadingIndicator,\n searchQueryInProgress,\n searchResults,\n SearchResultList,\n}: SearchResultsProps<T>) => {\n if (searchQueryInProgress) {\n return (\n <div className=\"str-video__search-results--loading\">\n <LoadingIndicator />\n </div>\n );\n }\n if (!searchResults.length) {\n return <EmptySearchResultComponent />;\n }\n\n return <SearchResultList data={searchResults} />;\n};\n","import { useEffect, useState } from 'react';\n\nexport type SearchController<T> = {\n /** Flag signals that the search request is flight await the response */\n searchQueryInProgress: boolean;\n /** Array of items returned by the search query */\n searchResults: T[];\n};\n\nexport type UseSearchParams<T> = {\n /** Search function performing the search request */\n searchFn: (searchQuery: string) => Promise<T[]>;\n /** Debounce interval applied to the search function */\n debounceInterval: number;\n /** Search query string */\n searchQuery?: string;\n};\n\nexport const useSearch = <T>({\n debounceInterval,\n searchFn,\n searchQuery = '',\n}: UseSearchParams<T>): SearchController<T> => {\n const [searchResults, setSearchResults] = useState<T[]>([]);\n const [searchQueryInProgress, setSearchQueryInProgress] = useState(false);\n\n useEffect(() => {\n if (!searchQuery.length) return setSearchResults([]);\n\n setSearchQueryInProgress(true);\n\n const timeout = setTimeout(async () => {\n try {\n const results = await searchFn(searchQuery);\n setSearchResults(results);\n } catch (error) {\n console.error(error);\n } finally {\n setSearchQueryInProgress(false);\n }\n }, debounceInterval);\n\n return () => {\n clearTimeout(timeout);\n };\n }, [debounceInterval, searchFn, searchQuery]);\n\n return {\n searchQueryInProgress,\n searchResults,\n };\n};\n","import {\n ComponentProps,\n Dispatch,\n ForwardedRef,\n forwardRef,\n SetStateAction,\n useCallback,\n useState,\n} from 'react';\nimport {\n Restricted,\n useCall,\n useCallStateHooks,\n} from '@stream-io/video-react-bindings';\nimport {\n name,\n OwnCapability,\n StreamVideoParticipant,\n} from '@stream-io/video-client';\nimport { clsx } from 'clsx';\n\nimport { BlockedUserListing } from './BlockedUserListing';\nimport {\n CopyToClipboardButtonWithPopup,\n IconButton,\n TextButton,\n} from '../Button';\nimport { CallParticipantListHeader } from './CallParticipantListHeader';\nimport { CallParticipantListing } from './CallParticipantListing';\nimport { EmptyParticipantSearchList } from './EmptyParticipantSearchList';\nimport { LoadingIndicator } from '../LoadingIndicator';\nimport { SearchInput, SearchResults } from '../Search';\nimport { useSearch, UseSearchParams } from '../Search/hooks';\nimport {\n GenericMenu,\n GenericMenuButtonItem,\n MenuToggle,\n ToggleMenuButtonProps,\n} from '../Menu';\n\ntype CallParticipantListProps = {\n /** Click event listener function to be invoked in order to dismiss/hide the CallParticipantsList from the UI */\n onClose: () => void;\n /** Custom function to override the searching logic of active participants */\n activeUsersSearchFn?: UseSearchParams<StreamVideoParticipant>['searchFn'];\n /** Custom function to override the searching logic of blocked users */\n blockedUsersSearchFn?: UseSearchParams<string>['searchFn'];\n /** Interval in ms, during which the participant search calls will be debounced. The default value is 200ms. */\n debounceSearchInterval?: number;\n};\n\nconst UserListTypes = {\n active: 'Active users',\n blocked: 'Blocked users',\n} as const;\n\nconst DEFAULT_DEBOUNCE_SEARCH_INTERVAL = 200 as const;\n\nexport const CallParticipantsList = ({\n onClose,\n activeUsersSearchFn,\n blockedUsersSearchFn,\n debounceSearchInterval,\n}: CallParticipantListProps) => {\n const [searchQuery, setSearchQuery] = useState('');\n const [userListType, setUserListType] =\n useState<keyof typeof UserListTypes>('active');\n\n const exitSearch = useCallback(() => setSearchQuery(''), []);\n\n return (\n <div className=\"str-video__participant-list\">\n <CallParticipantListHeader onClose={onClose} />\n <SearchInput\n value={searchQuery}\n onChange={({ currentTarget }) => setSearchQuery(currentTarget.value)}\n exitSearch={exitSearch}\n isActive={!!searchQuery}\n />\n <CallParticipantListContentHeader\n userListType={userListType}\n setUserListType={setUserListType}\n />\n <div className=\"str-video__participant-list__content\">\n {userListType === 'active' && (\n <ActiveUsersSearchResults\n searchQuery={searchQuery}\n activeUsersSearchFn={activeUsersSearchFn}\n debounceSearchInterval={debounceSearchInterval}\n />\n )}\n {userListType === 'blocked' && (\n <BlockedUsersSearchResults\n searchQuery={searchQuery}\n blockedUsersSearchFn={blockedUsersSearchFn}\n debounceSearchInterval={debounceSearchInterval}\n />\n )}\n </div>\n <div className=\"str-video__participant-list__footer\">\n <CopyToClipboardButtonWithPopup\n Button={InviteLinkButton}\n copyValue={typeof window !== 'undefined' ? window.location.href : ''}\n />\n </div>\n </div>\n );\n};\n\nconst CallParticipantListContentHeader = ({\n userListType,\n setUserListType,\n}: {\n userListType: keyof typeof UserListTypes;\n setUserListType: Dispatch<SetStateAction<keyof typeof UserListTypes>>;\n}) => {\n const call = useCall();\n\n const muteAll = () => {\n call?.muteAllUsers('audio');\n };\n\n return (\n <div className=\"str-video__participant-list__content-header\">\n <div className=\"str-video__participant-list__content-header-title\">\n <span>{UserListTypes[userListType]}</span>\n {userListType === 'active' && (\n <Restricted\n requiredGrants={[OwnCapability.MUTE_USERS]}\n hasPermissionsOnly\n >\n <TextButton onClick={muteAll}>Mute all</TextButton>\n </Restricted>\n )}\n </div>\n <MenuToggle placement=\"bottom-end\" ToggleButton={ToggleButton}>\n <GenericMenu>\n {(\n Object.keys(UserListTypes) as Array<keyof typeof UserListTypes>\n ).map((lt) => (\n <GenericMenuButtonItem\n key={lt}\n aria-selected={lt === userListType}\n onClick={() => setUserListType(lt)}\n >\n {UserListTypes[lt]}\n </GenericMenuButtonItem>\n ))}\n </GenericMenu>\n </MenuToggle>\n </div>\n );\n};\n\nconst ActiveUsersSearchResults = ({\n searchQuery,\n activeUsersSearchFn: activeUsersSearchFnFromProps,\n debounceSearchInterval = DEFAULT_DEBOUNCE_SEARCH_INTERVAL,\n}: Pick<\n CallParticipantListProps,\n 'activeUsersSearchFn' | 'debounceSearchInterval'\n> & { searchQuery: string }) => {\n const { useParticipants } = useCallStateHooks();\n const participants = useParticipants({ sortBy: name });\n\n const activeUsersSearchFn = useCallback(\n (queryString: string) => {\n const queryRegExp = new RegExp(queryString, 'i');\n return Promise.resolve(\n participants.filter((participant) => {\n return participant.name.match(queryRegExp);\n }),\n );\n },\n [participants],\n );\n\n const { searchQueryInProgress, searchResults } =\n useSearch<StreamVideoParticipant>({\n searchFn: activeUsersSearchFnFromProps ?? activeUsersSearchFn,\n debounceInterval: debounceSearchInterval,\n searchQuery,\n });\n\n return (\n <SearchResults<StreamVideoParticipant>\n EmptySearchResultComponent={EmptyParticipantSearchList}\n LoadingIndicator={LoadingIndicator}\n searchQueryInProgress={searchQueryInProgress}\n searchResults={searchQuery ? searchResults : participants}\n SearchResultList={CallParticipantListing}\n />\n );\n};\n\nconst BlockedUsersSearchResults = ({\n blockedUsersSearchFn: blockedUsersSearchFnFromProps,\n debounceSearchInterval = DEFAULT_DEBOUNCE_SEARCH_INTERVAL,\n searchQuery,\n}: Pick<\n CallParticipantListProps,\n 'blockedUsersSearchFn' | 'debounceSearchInterval'\n> & { searchQuery: string }) => {\n const { useCallBlockedUserIds } = useCallStateHooks();\n const blockedUsers = useCallBlockedUserIds();\n\n const blockedUsersSearchFn = useCallback(\n (queryString: string) => {\n const queryRegExp = new RegExp(queryString, 'i');\n return Promise.resolve(\n blockedUsers.filter((blockedUser) => {\n return blockedUser.match(queryRegExp);\n }),\n );\n },\n [blockedUsers],\n );\n\n const { searchQueryInProgress, searchResults } = useSearch<string>({\n searchFn: blockedUsersSearchFnFromProps ?? blockedUsersSearchFn,\n debounceInterval: debounceSearchInterval,\n searchQuery,\n });\n\n return (\n <SearchResults<string>\n EmptySearchResultComponent={EmptyParticipantSearchList}\n LoadingIndicator={LoadingIndicator}\n searchQueryInProgress={searchQueryInProgress}\n searchResults={searchQuery ? searchResults : blockedUsers}\n SearchResultList={BlockedUserListing}\n />\n );\n};\n\nconst ToggleButton = forwardRef<HTMLButtonElement, ToggleMenuButtonProps>(\n (props, ref) => {\n return <IconButton enabled={props.menuShown} icon=\"filter\" ref={ref} />;\n },\n);\n\nconst InviteLinkButton = forwardRef(\n (\n { className, ...props }: ComponentProps<'button'>,\n ref: ForwardedRef<HTMLButtonElement>,\n ) => (\n <button\n {...props}\n className={clsx('str-video__invite-link-button', className)}\n ref={ref}\n >\n <div className=\"str-video__invite-participant-icon\" />\n <div className=\"str-video__invite-link-button__text\">Invite Link</div>\n </button>\n ),\n);\n","import clsx from 'clsx';\nimport { CSSProperties, useEffect, useState } from 'react';\nimport { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';\n\nexport type CallPreviewProps = {\n /**\n * Additional CSS class name to apply to the CallPreview element.\n */\n className?: string;\n\n /**\n * Additional CSS properties to apply to the CallPreview element.\n */\n style?: CSSProperties;\n};\n\nexport const CallPreview = (props: CallPreviewProps) => {\n const { className, style } = props;\n const call = useCall();\n const { useCallThumbnail } = useCallStateHooks();\n const thumbnail = useCallThumbnail();\n\n const [imageRef, setImageRef] = useState<HTMLImageElement | null>(null);\n useEffect(() => {\n if (!imageRef || !call) return;\n const cleanup = call.bindCallThumbnailElement(imageRef);\n return () => cleanup();\n }, [imageRef, call]);\n\n if (!thumbnail) return null;\n\n return (\n <img\n className={clsx('str-video__call-preview', className)}\n style={style}\n alt=\"Call Preview Thumbnail\"\n ref={setImageRef}\n />\n );\n};\n","import { CallRecording } from '@stream-io/video-client';\nimport { IconButton } from '../Button';\n\nexport type CallRecordingListHeaderProps = {\n /** Array of CallRecording objects */\n callRecordings: CallRecording[];\n /** Callback to be invoked when the refresh button is clicked */\n onRefresh?: () => void;\n};\n\nexport const CallRecordingListHeader = ({\n callRecordings,\n onRefresh,\n}: CallRecordingListHeaderProps) => {\n return (\n <div className=\"str-video__call-recording-list__header\">\n <div className=\"str-video__call-recording-list__title\">\n <span>Call Recordings</span>\n {callRecordings.length ? <span>({callRecordings.length})</span> : null}\n </div>\n <IconButton icon=\"refresh\" title=\"Refresh\" onClick={onRefresh} />\n </div>\n );\n};\n","import clsx from 'clsx';\nimport { ComponentProps, ForwardedRef, forwardRef } from 'react';\nimport { CallRecording } from '@stream-io/video-client';\nimport { CopyToClipboardButtonWithPopup } from '../Button';\n\nexport type CallRecordingListItemProps = {\n /** CallRecording object to represent */\n recording: CallRecording;\n};\nexport const CallRecordingListItem = ({\n recording,\n}: CallRecordingListItemProps) => {\n return (\n <div className=\"str-video__call-recording-list-item\">\n <div className=\"str-video__call-recording-list-item__info\">\n <div className=\"str-video__call-recording-list-item__created\">\n {new Date(recording.end_time).toLocaleString()}\n </div>\n </div>\n <div className=\"str-video__call-recording-list-item__actions\">\n <a\n className={clsx(\n 'str-video__call-recording-list-item__action-button',\n 'str-video__call-recording-list-item__action-button--download',\n )}\n role=\"button\"\n href={recording.url}\n download={recording.filename}\n title=\"Download the recording\"\n >\n <span\n className={clsx(\n 'str-video__call-recording-list-item__action-button-icon',\n 'str-video__download-button--icon',\n )}\n />\n </a>\n <CopyToClipboardButtonWithPopup\n Button={CopyUrlButton}\n copyValue={recording.url}\n />\n </div>\n </div>\n );\n};\nconst CopyUrlButton = forwardRef(\n (props: ComponentProps<'button'>, ref: ForwardedRef<HTMLButtonElement>) => {\n return (\n <button\n {...props}\n className={clsx(\n 'str-video__call-recording-list-item__action-button',\n 'str-video__call-recording-list-item__action-button--copy-link',\n )}\n ref={ref}\n title=\"Copy the recording link\"\n >\n <span\n className={clsx(\n 'str-video__call-recording-list-item__action-button-icon',\n 'str-video__copy-button--icon',\n )}\n />\n </button>\n );\n },\n);\n","export const EmptyCallRecordingListing = () => {\n return (\n <div className=\"str-video__call-recording-list__listing str-video__call-recording-list__listing--empty\">\n <div className=\"str-video__call-recording-list__listing--icon-empty\" />\n <p className=\"str-video__call-recording-list__listing--text-empty\">\n {/* todo: introduce i18n to enable text customization */}\n No recordings available\n </p>\n </div>\n );\n};\n","import { CallRecording } from '@stream-io/video-client';\nimport { CallRecordingListItem } from './CallRecordingListItem';\nimport { LoadingIndicator } from '../LoadingIndicator';\n\nexport type LoadingCallRecordingListProps = {\n /** Array of CallRecording objects */\n callRecordings: CallRecording[];\n};\n\nexport const LoadingCallRecordingListing = ({\n callRecordings,\n}: LoadingCallRecordingListProps) => {\n return (\n <>\n {callRecordings.map((recording) => (\n <CallRecordingListItem recording={recording} key={recording.filename} />\n ))}\n <LoadingIndicator text=\"Recording getting ready\" />\n </>\n );\n};\n","import { ComponentType } from 'react';\nimport { CallRecording } from '@stream-io/video-client';\n\nimport {\n CallRecordingListHeader as DefaultCallRecordingListHeader,\n CallRecordingListHeaderProps,\n} from './CallRecordingListHeader';\nimport {\n CallRecordingListItem as DefaultCallRecordingListItem,\n CallRecordingListItemProps,\n} from './CallRecordingListItem';\nimport { EmptyCallRecordingListing as DefaultEmptyCallRecordingList } from './EmptyCallRecordingListing';\nimport {\n LoadingCallRecordingListing as DefaultLoadingCallRecordingList,\n LoadingCallRecordingListProps,\n} from './LoadingCallRecordingListing';\n\nexport type CallRecordingListProps = {\n /** Array of CallRecording objects to be displayed */\n callRecordings: CallRecording[];\n /** Custom component to replace the default header implementation */\n CallRecordingListHeader?: ComponentType<CallRecordingListHeaderProps>;\n /** Custom component to replace the default list item implementation */\n CallRecordingListItem?: ComponentType<CallRecordingListItemProps>;\n /** Custom component to replace the default empty list component implementation */\n EmptyCallRecordingList?: ComponentType;\n /** Signals that a request for new list of CallRecording object has been initiated */\n loading?: boolean;\n /** Custom component to be rendered when loading is true */\n LoadingCallRecordingList?: ComponentType<LoadingCallRecordingListProps>;\n /** Callback to be invoked when the refresh button is clicked */\n onRefresh?: () => void;\n};\n\nexport const CallRecordingList = ({\n callRecordings,\n CallRecordingListHeader = DefaultCallRecordingListHeader,\n CallRecordingListItem = DefaultCallRecordingListItem,\n EmptyCallRecordingList = DefaultEmptyCallRecordingList,\n loading,\n LoadingCallRecordingList = DefaultLoadingCallRecordingList,\n onRefresh,\n}: CallRecordingListProps) => {\n return (\n <div className=\"str-video__call-recording-list\">\n <CallRecordingListHeader\n callRecordings={callRecordings}\n onRefresh={onRefresh}\n />\n <div className=\"str-video__call-recording-list__listing\">\n {loading ? (\n <LoadingCallRecordingList callRecordings={callRecordings} />\n ) : callRecordings.length ? (\n callRecordings.map((recording) => (\n <CallRecordingListItem\n recording={recording}\n key={recording.filename}\n />\n ))\n ) : (\n <EmptyCallRecordingList />\n )}\n </div>\n </div>\n );\n};\n","import { CallingState } from '@stream-io/video-client';\nimport { AcceptCallButton, CancelCallButton } from '../CallControls';\nimport { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';\n\nexport const RingingCallControls = () => {\n const call = useCall();\n const { useCallCallingState } = useCallStateHooks();\n const callCallingState = useCallCallingState();\n\n if (!call) return null;\n\n const buttonsDisabled = callCallingState !== CallingState.RINGING;\n return (\n <div className=\"str-video__pending-call-controls\">\n {call.isCreatedByMe ? (\n <CancelCallButton disabled={buttonsDisabled} />\n ) : (\n <>\n <AcceptCallButton disabled={buttonsDisabled} />\n <CancelCallButton\n onClick={() => call.leave({ reject: true })}\n disabled={buttonsDisabled}\n />\n </>\n )}\n </div>\n );\n};\n","import { CallingState, UserResponse } from '@stream-io/video-client';\nimport {\n useCall,\n useCallStateHooks,\n useConnectedUser,\n useI18n,\n} from '@stream-io/video-react-bindings';\nimport { Avatar } from '../Avatar';\nimport { RingingCallControls } from './RingingCallControls';\n\nconst CALLING_STATE_TO_LABEL: Record<CallingState, string> = {\n [CallingState.JOINING]: 'Joining',\n [CallingState.RINGING]: 'Ringing',\n [CallingState.MIGRATING]: 'Migrating',\n [CallingState.RECONNECTING]: 'Re-connecting',\n [CallingState.RECONNECTING_FAILED]: 'Failed',\n [CallingState.OFFLINE]: 'No internet connection',\n [CallingState.IDLE]: '',\n [CallingState.UNKNOWN]: '',\n [CallingState.JOINED]: 'Joined',\n [CallingState.LEFT]: 'Left call',\n};\n\nexport type RingingCallProps = {\n /**\n * Whether to include the current user in the list of members to show.\n * @default false.\n */\n includeSelf?: boolean;\n\n /**\n * The maximum number of members to show.\n * @default 3.\n */\n totalMembersToShow?: number;\n};\n\nexport const RingingCall = (props: RingingCallProps) => {\n const { includeSelf = false, totalMembersToShow = 3 } = props;\n const call = useCall();\n const { t } = useI18n();\n const { useCallCallingState, useCallMembers } = useCallStateHooks();\n const callingState = useCallCallingState();\n const members = useCallMembers();\n const connectedUser = useConnectedUser();\n\n if (!call) return null;\n\n // take the first N members to show their avatars\n const membersToShow: UserResponse[] = (members || [])\n .slice(0, totalMembersToShow)\n .map(({ user }) => user)\n .filter((user) => user.id !== connectedUser?.id || includeSelf);\n if (\n includeSelf &&\n !membersToShow.find((user) => user.id === connectedUser?.id)\n ) {\n // if the current user is not in the initial batch of members,\n // replace the first item in membersToShow array with the current user\n const self = members.find(({ user }) => user.id === connectedUser?.id);\n if (self) {\n membersToShow.splice(0, 1, self.user);\n }\n }\n\n const callingStateLabel = CALLING_STATE_TO_LABEL[callingState];\n\n return (\n <div className=\"str-video__call-panel str-video__call-panel--ringing\">\n <div className=\"str-video__call-panel__members-list\">\n {membersToShow.map((user) => (\n <div key={user.id} className=\"str-video__call-panel__member-box\">\n <Avatar name={user.name} imageSrc={user.image} />\n {user.name && (\n <div className=\"str-video__member_details\">\n <span className=\"str-video__member_name\">{user.name}</span>\n </div>\n )}\n </div>\n ))}\n </div>\n\n {callingStateLabel && (\n <div className=\"str-video__call-panel__calling-state-label\">\n {t(callingStateLabel)}\n </div>\n )}\n\n {[CallingState.RINGING, CallingState.JOINING].includes(callingState) && (\n <RingingCallControls />\n )}\n </div>\n );\n};\n","import {\n ButtonHTMLAttributes,\n ComponentProps,\n forwardRef,\n Fragment,\n PropsWithChildren,\n useEffect,\n useState,\n} from 'react';\nimport {\n OwnCapability,\n PermissionRequestEvent,\n StreamVideoEvent,\n UserResponse,\n} from '@stream-io/video-client';\nimport {\n TranslatorFunction,\n useCall,\n useCallStateHooks,\n useHasPermissions,\n useI18n,\n} from '@stream-io/video-react-bindings';\nimport clsx from 'clsx';\n\nimport { useFloatingUIPreset } from '../../hooks';\n\nconst byNameOrId = (a: UserResponse, b: UserResponse) => {\n if (a.name && b.name && a.name < b.name) return -1;\n if (a.name && b.name && a.name > b.name) return 1;\n if (a.id < b.id) return -1;\n if (a.id > b.id) return 1;\n return 0;\n};\n\ntype HandleUpdatePermission = (\n request: PermissionRequestEvent,\n type: 'grant' | 'revoke' | 'dismiss',\n) => () => Promise<void>;\n\nexport const PermissionRequests = () => {\n const call = useCall();\n const { useLocalParticipant } = useCallStateHooks();\n const localParticipant = useLocalParticipant();\n const [expanded, setExpanded] = useState(false);\n const [permissionRequests, setPermissionRequests] = useState<\n PermissionRequestEvent[]\n >([]);\n const canUpdateCallPermissions = useHasPermissions(\n OwnCapability.UPDATE_CALL_PERMISSIONS,\n );\n\n useEffect(() => {\n if (!call || !canUpdateCallPermissions) return;\n\n const unsubscribe = call.on(\n 'call.permission_request',\n (event: StreamVideoEvent) => {\n if (event.type !== 'call.permission_request') return;\n\n if (event.user.id !== localParticipant?.userId) {\n setPermissionRequests((requests) =>\n [...requests, event as PermissionRequestEvent].sort((a, b) =>\n byNameOrId(a.user, b.user),\n ),\n );\n }\n },\n );\n return () => {\n unsubscribe();\n };\n }, [call, canUpdateCallPermissions, localParticipant]);\n\n const handleUpdatePermission: HandleUpdatePermission = (request, type) => {\n return async () => {\n const { user, permissions } = request;\n switch (type) {\n case 'grant':\n await call?.grantPermissions(user.id, permissions);\n break;\n case 'revoke':\n await call?.revokePermissions(user.id, permissions);\n break;\n default:\n break;\n }\n setPermissionRequests((requests) =>\n requests.filter((r) => r !== request),\n );\n };\n };\n\n const { refs, x, y, strategy } = useFloatingUIPreset({\n placement: 'bottom',\n strategy: 'absolute',\n });\n\n // don't render anything if there are no permission requests\n if (permissionRequests.length === 0) return null;\n\n return (\n <div className=\"str-video__permission-requests\" ref={refs.setReference}>\n <div className=\"str-video__permission-requests__notification\">\n <span className=\"str-video__permission-requests__notification__message\">\n {permissionRequests.length} pending permission requests\n </span>\n <Button\n type=\"button\"\n onClick={() => {\n setExpanded((e) => !e);\n }}\n >\n {expanded ? 'Hide requests' : 'Show requests'}\n </Button>\n </div>\n {expanded && (\n <PermissionRequestList\n ref={refs.setFloating}\n style={{\n position: strategy,\n top: y ?? 0,\n left: x ?? 0,\n overflowY: 'auto',\n }}\n permissionRequests={permissionRequests}\n handleUpdatePermission={handleUpdatePermission}\n />\n )}\n </div>\n );\n};\n\nexport type PermissionRequestListProps = ComponentProps<'div'> & {\n permissionRequests: PermissionRequestEvent[];\n handleUpdatePermission: HandleUpdatePermission;\n};\n\nexport const PermissionRequestList = forwardRef<\n HTMLDivElement,\n PermissionRequestListProps\n>((props, ref) => {\n const { permissionRequests, handleUpdatePermission, ...rest } = props;\n\n const { t } = useI18n();\n\n return (\n <div className=\"str-video__permission-requests-list\" ref={ref} {...rest}>\n {permissionRequests.map((request, reqIndex) => {\n const { user, permissions } = request;\n return (\n <Fragment key={`${user.id}/${reqIndex}`}>\n {permissions.map((permission) => (\n <div className=\"str-video__permission-request\" key={permission}>\n <div className=\"str-video__permission-request__message\">\n {messageForPermission(user.name || user.id, permission, t)}\n </div>\n <Button\n className=\"str-video__permission-request__button--allow\"\n type=\"button\"\n onClick={handleUpdatePermission(request, 'grant')}\n >\n {t('Allow')}\n </Button>\n <Button\n className=\"str-video__permission-request__button--reject\"\n type=\"button\"\n onClick={handleUpdatePermission(request, 'revoke')}\n >\n {t('Revoke')}\n </Button>\n <Button\n className=\"str-video__permission-request__button--reject\"\n type=\"button\"\n onClick={handleUpdatePermission(request, 'dismiss')}\n >\n {t('Dismiss')}\n </Button>\n </div>\n ))}\n </Fragment>\n );\n })}\n </div>\n );\n});\n\nconst Button = (\n props: PropsWithChildren<ButtonHTMLAttributes<HTMLButtonElement>>,\n) => {\n const { className, ...rest } = props;\n return (\n <button\n className={clsx('str-video__permission-request__button', className)}\n {...rest}\n />\n );\n};\n\nconst messageForPermission = (\n userName: string,\n permission: string,\n t: TranslatorFunction,\n) => {\n switch (permission) {\n case OwnCapability.SEND_AUDIO:\n return t('{{ userName }} is requesting to speak', { userName });\n case OwnCapability.SEND_VIDEO:\n return t('{{ userName }} is requesting to share their camera', {\n userName,\n });\n case OwnCapability.SCREENSHARE:\n return t('{{ userName }} is requesting to present their screen', {\n userName,\n });\n default:\n return t('{{ userName }} is requesting permission: {{ permission }}', {\n userName,\n permission,\n });\n }\n};\n","import { ElementType, HTMLProps, PropsWithChildren } from 'react';\nimport clsx from 'clsx';\n\nexport type StreamThemeProps = HTMLProps<HTMLElement> & {\n as?: ElementType;\n};\n\nexport const StreamTheme = ({\n as: Component = 'div',\n className,\n children,\n ...props\n}: PropsWithChildren<StreamThemeProps>) => {\n return (\n <Component {...props} className={clsx('str-video', className)}>\n {children}\n </Component>\n );\n};\n","import {\n ComponentType,\n ReactEventHandler,\n useCallback,\n useEffect,\n useState,\n} from 'react';\nimport clsx from 'clsx';\nimport { disposeOfMediaStream } from '@stream-io/video-client';\nimport { BaseVideo } from '../../core/components/Video';\nimport {\n DEVICE_STATE,\n useMediaDevices,\n useOnUnavailableVideoDevices,\n useVideoDevices,\n} from '../../core';\nimport { LoadingIndicator } from '../LoadingIndicator';\n\nconst DefaultDisabledVideoPreview = () => {\n return <div>Video is disabled</div>;\n};\n\nconst DefaultNoCameraPreview = () => {\n return <div>No camera found</div>;\n};\n\ntype VideoErrorPreviewProps = {\n message?: string;\n};\nconst DefaultVideoErrorPreview = ({ message }: VideoErrorPreviewProps) => {\n return (\n <>\n <div>Error:</div>\n <p>{message || 'Unexpected error happened'}</p>\n </>\n );\n};\n\nexport type VideoPreviewProps = {\n /**\n * Component rendered when user turns off the video.\n */\n DisabledVideoPreview?: ComponentType;\n /**\n * Enforces mirroring of the video on the X axis. Defaults to true.\n */\n mirror?: boolean;\n /**\n * Component rendered when no camera devices are available.\n */\n NoCameraPreview?: ComponentType;\n /**\n * Component rendered above the BaseVideo until the video is ready (meaning until the play event is emitted).\n */\n StartingCameraPreview?: ComponentType;\n /**\n * Component rendered when the video stream could not be retrieved.\n */\n VideoErrorPreview?: ComponentType<VideoErrorPreviewProps>;\n};\n\nexport const VideoPreview = ({\n mirror = true,\n DisabledVideoPreview = DefaultDisabledVideoPreview,\n NoCameraPreview = DefaultNoCameraPreview,\n StartingCameraPreview = LoadingIndicator,\n VideoErrorPreview = DefaultVideoErrorPreview,\n}: VideoPreviewProps) => {\n const [stream, setStream] = useState<MediaStream>();\n const {\n selectedVideoDeviceId,\n getVideoStream,\n initialVideoState,\n setInitialVideoState,\n } = useMediaDevices();\n // When there are 0 video devices (e.g. when laptop lid closed),\n // we do not restart the video automatically when the device is again available,\n // but rather leave turning the video on manually to the user.\n useOnUnavailableVideoDevices(() =>\n setInitialVideoState(DEVICE_STATE.stopped),\n );\n const videoDevices = useVideoDevices();\n\n useEffect(() => {\n if (!initialVideoState.enabled) return;\n\n getVideoStream({ deviceId: selectedVideoDeviceId })\n .then((s) => {\n setStream((previousStream) => {\n if (previousStream) {\n disposeOfMediaStream(previousStream);\n }\n return s;\n });\n })\n .catch((e) =>\n setInitialVideoState({\n ...DEVICE_STATE.error,\n message: (e as Error).message,\n }),\n );\n return () => {\n setStream(undefined);\n };\n }, [\n initialVideoState,\n getVideoStream,\n selectedVideoDeviceId,\n setInitialVideoState,\n videoDevices.length,\n ]);\n\n useEffect(() => {\n if (initialVideoState.type === 'stopped') {\n setStream(undefined);\n }\n }, [initialVideoState]);\n\n const handleOnPlay: ReactEventHandler<HTMLVideoElement> = useCallback(() => {\n setInitialVideoState(DEVICE_STATE.playing);\n }, [setInitialVideoState]);\n\n let contents;\n if (initialVideoState.type === 'error') {\n contents = <VideoErrorPreview />;\n } else if (initialVideoState.type === 'stopped' && !videoDevices.length) {\n contents = <NoCameraPreview />;\n } else if (initialVideoState.enabled) {\n const loading = initialVideoState.type === 'starting';\n contents = (\n <>\n {stream && (\n <BaseVideo\n stream={stream}\n className={clsx('str-video__video-preview', {\n 'str-video__video-preview--mirror': mirror,\n 'str-video__video-preview--loading': loading,\n })}\n onPlay={handleOnPlay}\n />\n )}\n {loading && <StartingCameraPreview />}\n </>\n );\n } else {\n contents = <DisabledVideoPreview />;\n }\n\n return (\n <div className={clsx('str-video__video-preview-container')}>{contents}</div>\n );\n};\n","import { useEffect, useState } from 'react';\nimport { Call, StreamVideoParticipant } from '@stream-io/video-client';\n\nexport const DebugParticipantPublishQuality = (props: {\n participant: StreamVideoParticipant;\n call: Call;\n}) => {\n const { call, participant } = props;\n const [quality, setQuality] = useState<string>();\n const [publishStats, setPublishStats] = useState(() => ({\n f: true,\n h: true,\n q: true,\n }));\n\n useEffect(() => {\n return call.on('changePublishQuality', (event) => {\n if (event.eventPayload.oneofKind !== 'changePublishQuality') return;\n const { videoSenders } = event.eventPayload.changePublishQuality;\n // FIXME OL: support additional layers (like screenshare)\n const [videoLayer] = videoSenders.map(({ layers }) => {\n return layers.map((l) => ({ [l.name]: l.active }));\n });\n setPublishStats((s) => ({\n ...s,\n ...videoLayer,\n }));\n });\n }, [call]);\n\n return (\n <select\n title={`Published tracks: ${JSON.stringify(publishStats)}`}\n value={quality}\n onChange={(e) => {\n const value = e.target.value;\n setQuality(value);\n let w = 960;\n let h = 540;\n if (value === 'h') {\n w = w / 2; // 480\n h = h / 2; // 270\n } else if (value === 'q') {\n w = w / 4; // 240\n h = h / 4; // 135\n }\n call.updateSubscriptionsPartial('video', {\n [participant.sessionId]: {\n dimension: {\n width: w,\n height: h,\n },\n },\n });\n }}\n >\n <option value=\"f\">High (f)</option>\n <option value=\"h\">Medium (h)</option>\n <option value=\"q\">Low (q)</option>\n </select>\n );\n};\n","import { useEffect, useRef, useState } from 'react';\nimport { Call } from '@stream-io/video-client';\nimport { useFloatingUIPreset } from '../../hooks';\nimport { StatCard } from '../CallStats';\nimport { useCallStateHooks } from '@stream-io/video-react-bindings';\n\nexport const DebugStatsView = (props: {\n call: Call;\n mediaStream?: MediaStream;\n sessionId: string;\n userId: string;\n}) => {\n const { call, mediaStream, sessionId, userId } = props;\n const { useCallStatsReport } = useCallStateHooks();\n const callStatsReport = useCallStatsReport();\n\n useEffect(() => {\n call.startReportingStatsFor(sessionId);\n return () => {\n call.stopReportingStatsFor(sessionId);\n };\n }, [call, sessionId]);\n\n const reportForTracks = callStatsReport?.participants[sessionId];\n const trackStats = reportForTracks?.flatMap((report) => report.streams);\n\n const previousWidth = useRef<Record<string, number>>({ f: 0, h: 0, q: 0 });\n const previousHeight = useRef<Record<string, number>>({ f: 0, h: 0, q: 0 });\n trackStats?.forEach((track) => {\n if (track.kind !== 'video') return;\n const { frameWidth = 0, frameHeight = 0, rid = '' } = track;\n if (\n frameWidth !== previousWidth.current[rid] ||\n frameHeight !== previousHeight.current[rid]\n ) {\n const trackSize = `${frameWidth}x${frameHeight}`;\n console.log(`Track stats (${userId}/${sessionId}): ${rid}(${trackSize})`);\n previousWidth.current[rid] = frameWidth;\n previousHeight.current[rid] = frameHeight;\n }\n });\n\n const { refs, strategy, y, x } = useFloatingUIPreset({\n placement: 'top',\n strategy: 'absolute',\n });\n\n const [isPopperOpen, setIsPopperOpen] = useState(false);\n\n const [videoTrack] = mediaStream?.getVideoTracks() ?? [];\n const settings = videoTrack?.getSettings();\n return (\n <>\n <span\n className=\"str-video__debug__track-stats-icon\"\n tabIndex={0}\n ref={refs.setReference}\n title={\n settings &&\n `${settings.width}x${settings.height}@${Math.round(\n settings.frameRate || 0,\n )}`\n }\n onClick={() => {\n setIsPopperOpen((v) => !v);\n }}\n />\n {isPopperOpen && (\n <div\n className=\"str-video__debug__track-stats str-video__call-stats\"\n ref={refs.setFloating}\n style={{\n position: strategy,\n top: y ?? 0,\n left: x ?? 0,\n overflowY: 'auto',\n }}\n >\n <h3>Participant stats</h3>\n <div className=\"str-video__call-stats__card-container\">\n {trackStats\n ?.map((track) => {\n if (track.kind === 'video') {\n return (\n <StatCard\n key={`${track.rid}/${track.ssrc}/${track.codec}/${track.kind}`}\n label={\n `${track.kind}: ${track.codec} ` +\n (track.rid ? ` (${track.rid})` : '')\n }\n value={`${track.frameWidth || 0}x${\n track.frameHeight || 0\n }@${track.framesPerSecond || 0}fps`}\n />\n );\n } else if (track.kind === 'audio') {\n return (\n <StatCard\n key={`${track.ssrc}/${track.codec}/${track.kind}`}\n label={track.codec || 'N/A'}\n value={`Jitter: ${track.jitter || 0}ms`}\n />\n );\n }\n return null;\n })\n .filter(Boolean)}\n </div>\n {reportForTracks?.map((report, index) => (\n <pre key={index}>\n {JSON.stringify(unwrapStats(report.rawStats), null, 2)}\n </pre>\n ))}\n </div>\n )}\n </>\n );\n};\n\nconst unwrapStats = (rawStats?: RTCStatsReport) => {\n const decodedStats: Record<string, string> = {};\n rawStats?.forEach((s) => {\n decodedStats[s.id] = s;\n });\n return decodedStats;\n};\n","import { forwardRef } from 'react';\nimport { Placement } from '@floating-ui/react';\nimport { SfuModels } from '@stream-io/video-client';\nimport { useCall } from '@stream-io/video-react-bindings';\nimport { clsx } from 'clsx';\n\nimport {\n Icon,\n IconButton,\n MenuToggle,\n Notification,\n ParticipantActionsContextMenu,\n ToggleMenuButtonProps,\n} from '../../../components';\nimport { Reaction } from '../../../components/Reaction';\n\nimport { DebugParticipantPublishQuality } from '../../../components/Debug/DebugParticipantPublishQuality';\nimport { DebugStatsView } from '../../../components/Debug/DebugStatsView';\nimport { useIsDebugMode } from '../../../components/Debug/useIsDebugMode';\nimport { useParticipantViewContext } from './ParticipantView';\n\nexport type DefaultParticipantViewUIProps = {\n /**\n * Turns on/off the status indicator icons (mute, connection quality, etc...).\n */\n indicatorsVisible?: boolean;\n /**\n * Placement of the context menu component when opened\n */\n menuPlacement?: Placement;\n /**\n * Option to show/hide menu button component\n */\n showMenuButton?: boolean;\n};\n\nconst ToggleButton = forwardRef<HTMLButtonElement, ToggleMenuButtonProps>(\n (props, ref) => {\n return <IconButton enabled={props.menuShown} icon=\"ellipsis\" ref={ref} />;\n },\n);\n\nexport const DefaultScreenShareOverlay = () => {\n const call = useCall();\n\n const stopScreenShare = () => {\n call?.stopPublish(SfuModels.TrackType.SCREEN_SHARE).catch(console.error);\n };\n\n return (\n <div className=\"str-video__screen-share-overlay\">\n <Icon icon=\"screen-share-off\" />\n <span className=\"str-video__screen-share-overlay__title\">\n You are presenting your screen\n </span>\n <button\n onClick={stopScreenShare}\n className=\"str-video__screen-share-overlay__button\"\n >\n <Icon icon=\"close\" /> Stop Screen Sharing\n </button>\n </div>\n );\n};\n\nexport const DefaultParticipantViewUI = ({\n indicatorsVisible = true,\n menuPlacement = 'bottom-end',\n showMenuButton = true,\n}: DefaultParticipantViewUIProps) => {\n const { participant, participantViewElement, trackType, videoElement } =\n useParticipantViewContext();\n const { publishedTracks } = participant;\n\n const hasScreenShare = publishedTracks.includes(\n SfuModels.TrackType.SCREEN_SHARE,\n );\n\n if (\n participant.isLocalParticipant &&\n hasScreenShare &&\n trackType === 'screenShareTrack'\n ) {\n return (\n <>\n <DefaultScreenShareOverlay />\n <ParticipantDetails indicatorsVisible={indicatorsVisible} />\n </>\n );\n }\n\n return (\n <>\n {showMenuButton && (\n <MenuToggle\n strategy=\"fixed\"\n placement={menuPlacement}\n ToggleButton={ToggleButton}\n >\n <ParticipantActionsContextMenu\n participantViewElement={participantViewElement}\n participant={participant}\n videoElement={videoElement}\n />\n </MenuToggle>\n )}\n <Reaction participant={participant} />\n <ParticipantDetails indicatorsVisible={indicatorsVisible} />\n </>\n );\n};\n\nexport const ParticipantDetails = ({\n indicatorsVisible = true,\n}: Pick<DefaultParticipantViewUIProps, 'indicatorsVisible'>) => {\n const { participant } = useParticipantViewContext();\n const {\n isDominantSpeaker,\n isLocalParticipant,\n connectionQuality,\n publishedTracks,\n pin,\n sessionId,\n name,\n userId,\n videoStream,\n } = participant;\n const call = useCall()!;\n\n const connectionQualityAsString =\n !!connectionQuality &&\n SfuModels.ConnectionQuality[connectionQuality].toLowerCase();\n\n const hasAudio = publishedTracks.includes(SfuModels.TrackType.AUDIO);\n const hasVideo = publishedTracks.includes(SfuModels.TrackType.VIDEO);\n const canUnpin = !!pin && pin.isLocalPin;\n\n const isDebugMode = useIsDebugMode();\n\n return (\n <div className=\"str-video__participant-details\">\n <span className=\"str-video__participant-details__name\">\n {name || userId}\n {indicatorsVisible && isDominantSpeaker && (\n <span\n className=\"str-video__participant-details__name--dominant_speaker\"\n title=\"Dominant speaker\"\n />\n )}\n {indicatorsVisible && (\n <Notification\n isVisible={\n isLocalParticipant &&\n connectionQuality === SfuModels.ConnectionQuality.POOR\n }\n message=\"Poor connection quality. Please check your internet connection.\"\n >\n {connectionQualityAsString && (\n <span\n className={clsx(\n 'str-video__participant-details__connection-quality',\n `str-video__participant-details__connection-quality--${connectionQualityAsString}`,\n )}\n title={connectionQualityAsString}\n />\n )}\n </Notification>\n )}\n {indicatorsVisible && !hasAudio && (\n <span className=\"str-video__participant-details__name--audio-muted\" />\n )}\n {indicatorsVisible && !hasVideo && (\n <span className=\"str-video__participant-details__name--video-muted\" />\n )}\n {indicatorsVisible && canUnpin && (\n // TODO: remove this monstrosity once we have a proper design\n <span\n title=\"Unpin\"\n onClick={() => call?.unpin(sessionId)}\n style={{ cursor: 'pointer' }}\n className=\"str-video__participant-details__name--pinned\"\n />\n )}\n </span>\n {isDebugMode && (\n <>\n <DebugParticipantPublishQuality\n participant={participant}\n call={call}\n />\n <DebugStatsView\n call={call}\n sessionId={sessionId}\n userId={userId}\n mediaStream={videoStream}\n />\n </>\n )}\n </div>\n );\n};\n","import {\n ComponentType,\n createContext,\n forwardRef,\n ReactElement,\n useContext,\n useMemo,\n useState,\n} from 'react';\nimport clsx from 'clsx';\nimport {\n SfuModels,\n StreamVideoLocalParticipant,\n StreamVideoParticipant,\n VideoTrackType,\n} from '@stream-io/video-client';\n\nimport { Audio } from '../Audio';\nimport { Video, VideoProps } from '../Video';\nimport { useTrackElementVisibility } from '../../hooks';\nimport { DefaultParticipantViewUI } from './DefaultParticipantViewUI';\nimport { applyElementToRef, isComponentType } from '../../../utilities';\n\nexport type ParticipantViewContextValue = Required<\n Pick<ParticipantViewProps, 'participant' | 'trackType'>\n> & {\n participantViewElement: HTMLDivElement | null;\n videoElement: HTMLVideoElement | null;\n videoPlaceholderElement: HTMLDivElement | null;\n};\n\nconst ParticipantViewContext = createContext<\n ParticipantViewContextValue | undefined\n>(undefined);\n\nexport const useParticipantViewContext = () =>\n useContext(ParticipantViewContext) as ParticipantViewContextValue;\n\nexport type ParticipantViewProps = {\n /**\n * The participant whose video/audio stream we want to play.\n */\n participant: StreamVideoParticipant | StreamVideoLocalParticipant;\n\n /**\n * Override the default UI for rendering participant information/actions.\n * pass `null` if you wish to not render anything\n * @default DefaultParticipantViewUI\n */\n ParticipantViewUI?: ComponentType | ReactElement | null;\n\n /**\n * The kind of video stream to play for the given participant. The default value is `video`. You can use `none` if you're building an audio-only call.\n */\n trackType?: VideoTrackType | 'none';\n\n /**\n * This prop is only useful for advanced use-cases (for example building your own paginated layout). When set to `true` it will mute the give participant's audio stream on the client side. The local participant is always muted.\n */\n muteAudio?: boolean;\n\n /**\n * An object with set functions meant for exposing the video\n * and video placeholder elements to the integrators. It's useful when you want to attach custom event handlers to these elements.\n * - `refs.setVideoElement`\n * - `refs.setVideoPlaceholderElement`\n */\n refs?: VideoProps['refs'];\n\n /**\n * Custom class applied to the root DOM element.\n */\n className?: string;\n} & Pick<VideoProps, 'VideoPlaceholder'>;\n\nexport const ParticipantView = forwardRef<HTMLDivElement, ParticipantViewProps>(\n (\n {\n participant,\n trackType = 'videoTrack',\n muteAudio,\n refs: { setVideoElement, setVideoPlaceholderElement } = {},\n className,\n VideoPlaceholder,\n ParticipantViewUI = DefaultParticipantViewUI as ComponentType,\n },\n ref,\n ) => {\n const {\n isLocalParticipant,\n isSpeaking,\n isDominantSpeaker,\n publishedTracks,\n sessionId,\n } = participant;\n\n const hasAudio = publishedTracks.includes(SfuModels.TrackType.AUDIO);\n const hasVideo = publishedTracks.includes(SfuModels.TrackType.VIDEO);\n const hasScreenShareAudio = publishedTracks.includes(\n SfuModels.TrackType.SCREEN_SHARE_AUDIO,\n );\n\n const [trackedElement, setTrackedElement] = useState<HTMLDivElement | null>(\n null,\n );\n\n const [contextVideoElement, setContextVideoElement] =\n useState<HTMLVideoElement | null>(null);\n\n const [contextVideoPlaceholderElement, setContextVideoPlaceholderElement] =\n useState<HTMLDivElement | null>(null);\n\n // TODO: allow to pass custom ViewportTracker instance from props\n useTrackElementVisibility({\n sessionId,\n trackedElement,\n trackType,\n });\n\n const participantViewContextValue = useMemo(\n () => ({\n participant,\n participantViewElement: trackedElement,\n videoElement: contextVideoElement,\n videoPlaceholderElement: contextVideoPlaceholderElement,\n trackType,\n }),\n [\n contextVideoElement,\n contextVideoPlaceholderElement,\n participant,\n trackedElement,\n trackType,\n ],\n );\n\n const videoRefs: VideoProps['refs'] = useMemo(\n () => ({\n setVideoElement: (element) => {\n setVideoElement?.(element);\n setContextVideoElement(element);\n },\n setVideoPlaceholderElement: (element) => {\n setVideoPlaceholderElement?.(element);\n setContextVideoPlaceholderElement(element);\n },\n }),\n [setVideoElement, setVideoPlaceholderElement],\n );\n\n return (\n <div\n data-testid=\"participant-view\"\n ref={(element) => {\n applyElementToRef(ref, element);\n setTrackedElement(element);\n }}\n className={clsx(\n 'str-video__participant-view',\n isDominantSpeaker && 'str-video__participant-view--dominant-speaker',\n isSpeaking && 'str-video__participant-view--speaking',\n !hasVideo && 'str-video__participant-view--no-video',\n !hasAudio && 'str-video__participant-view--no-audio',\n className,\n )}\n >\n <ParticipantViewContext.Provider value={participantViewContextValue}>\n {/* mute the local participant, as we don't want to hear ourselves */}\n {!isLocalParticipant && !muteAudio && (\n <>\n {hasAudio && (\n <Audio participant={participant} trackType=\"audioTrack\" />\n )}\n {hasScreenShareAudio && (\n <Audio\n participant={participant}\n trackType=\"screenShareAudioTrack\"\n />\n )}\n </>\n )}\n <Video\n VideoPlaceholder={VideoPlaceholder}\n participant={participant}\n trackType={trackType}\n refs={videoRefs}\n autoPlay\n />\n {isComponentType(ParticipantViewUI) ? (\n <ParticipantViewUI />\n ) : (\n ParticipantViewUI\n )}\n </ParticipantViewContext.Provider>\n </div>\n );\n },\n);\n","import {\n createContext,\n PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from 'react';\nimport { map } from 'rxjs';\nimport {\n CallingState,\n checkIfAudioOutputChangeSupported,\n disposeOfMediaStream,\n getAudioStream,\n getVideoStream,\n SfuModels,\n watchForDisconnectedAudioOutputDevice,\n} from '@stream-io/video-client';\nimport { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';\n\nimport {\n useAudioInputDeviceFallback,\n useAudioOutputDeviceFallback,\n useAudioPublisher,\n useHasBrowserPermissions,\n useVideoDeviceFallback,\n useVideoPublisher,\n} from '../hooks';\n\ntype EnabledStateType = 'starting' | 'playing';\ntype DisabledStateType = 'uninitialized' | 'stopped';\ntype ErrorStateType = 'error';\ntype DeviceStateType = EnabledStateType | DisabledStateType | ErrorStateType;\n\ntype EnabledDeviceState<T extends EnabledStateType> = {\n type: T;\n enabled: true;\n};\ntype DisabledDeviceState<T extends DisabledStateType> = {\n type: T;\n enabled: false;\n};\ntype ErrorDeviceState = {\n type: 'error';\n message: string;\n enabled: false;\n};\n\ntype DeviceState =\n | EnabledDeviceState<EnabledStateType>\n | DisabledDeviceState<DisabledStateType>\n | ErrorDeviceState;\n\nconst DEVICE_STATE_TOGGLE: Record<DeviceStateType, 'starting' | 'stopped'> = {\n starting: 'stopped',\n playing: 'stopped',\n stopped: 'starting',\n uninitialized: 'starting',\n error: 'starting',\n};\n\n/**\n * Exclude types from documentation site, but we should still add doc comments\n * @internal\n */\nexport const DEVICE_STATE: {\n starting: EnabledDeviceState<'starting'>;\n playing: EnabledDeviceState<'playing'>;\n stopped: DisabledDeviceState<'stopped'>;\n uninitialized: DisabledDeviceState<'uninitialized'>;\n error: ErrorDeviceState;\n} = {\n starting: { type: 'starting', enabled: true },\n playing: { type: 'playing', enabled: true },\n stopped: { type: 'stopped', enabled: false },\n uninitialized: { type: 'uninitialized', enabled: false },\n error: { type: 'error', message: '', enabled: false },\n};\n\nconst DEFAULT_DEVICE_ID = 'default';\n\n/**\n * API to control device enablement, device selection and media stream access for a call.\n * @category Device Management\n */\nexport type MediaDevicesContextAPI = {\n /**\n * Deactivates MediaStream (stops and removes tracks) to be later garbage collected\n *\n * @param stream MediaStream\n * @returns void\n */\n disposeOfMediaStream: (stream: MediaStream) => void;\n /**\n * Returns an 'audioinput' media stream with the given `deviceId`, if no `deviceId` is provided, it uses the first available device.\n *\n * @param deviceId\n * @returns\n */\n getAudioStream: typeof getAudioStream;\n /**\n * Returns a 'videoinput' media stream with the given `deviceId`, if no `deviceId` is provided, it uses the first available device.\n *\n * @param deviceId\n * @returns\n */\n getVideoStream: typeof getVideoStream;\n /**\n * [Tells if the browser supports audio output change on 'audio' elements](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/setSinkId).\n */\n isAudioOutputChangeSupported: boolean;\n /**\n * Signals whether audio stream will be published when the call is joined.\n */\n initialAudioEnabled: boolean;\n /**\n * Signals whether audio stream will be published when the call is joined.\n */\n initialVideoState: DeviceState;\n /**\n * Publishes audio stream for currently selected audio input (microphone) device to other call participants.\n */\n publishAudioStream: () => Promise<void>;\n /**\n * Publishes video stream for currently selected video input (camera) device to other call participants.\n */\n publishVideoStream: () => Promise<void>;\n /**\n * Stops publishing audio stream for currently selected audio input (microphone) device to other call participants.\n */\n stopPublishingAudio: () => Promise<void>;\n /**\n * Stops publishing video stream for currently selected video input (camera) device to other call participants.\n */\n stopPublishingVideo: () => Promise<void>;\n /**\n * Sets the initialAudioEnabled flag to a given boolean value.\n * The latest value set will be used to decide, whether audio stream will be published when joining a call.\n * @param enabled\n */\n setInitialAudioEnabled: (enabled: boolean) => void;\n\n /**\n * Sets the initialVideoState to a given DeviceState value.\n * The latest value set will be used to decide, whether video stream will be published when joining a call.\n * @param enabled\n */\n setInitialVideoState: (state: DeviceState) => void;\n /**\n * Stores audio input device (microphone) id which is used to publish user's sound to other call participants.\n */\n selectedAudioInputDeviceId?: string;\n /**\n * Stores audio output device (speaker) id used to reproduce incoming audio from other call participants.\n */\n selectedAudioOutputDeviceId?: string;\n /**\n * Stores video input device (camera) id which is used to publish user's video to other call participants.\n */\n selectedVideoDeviceId?: string;\n /**\n * Function should be used to change selected device id.\n * The change is later reflected in selectedAudioInputDeviceId, selectedAudioOutputDeviceId or selectedVideoDeviceId depending on kind parameter.\n * @param kind\n * @param deviceId\n */\n switchDevice: (kind: MediaDeviceKind, deviceId?: string) => void;\n /**\n * Sets the initialAudioEnabled flag by negating the current state value.\n * The latest value set will be used to decide, whether audio stream will be published when joining a call.\n * @param enabled\n */\n toggleInitialAudioMuteState: () => void;\n /**\n * Sets the initialVideoState by toggling the current state DeviceState value.\n * The latest value set will be used to decide, whether video stream will be published when joining a call.\n * @param enabled\n */\n toggleInitialVideoMuteState: () => void;\n};\n\nconst MediaDevicesContext = createContext<MediaDevicesContextAPI | null>(null);\n\n/**\n * Configuration parameters for MediaDevicesProvider.\n * @category Device Management\n */\nexport type MediaDevicesProviderProps = {\n /**\n * Provides external control over the initial audio input (microphone) enablement. Overrides the default false.\n */\n initialAudioEnabled?: boolean;\n /**\n * Provides external control over the initial video input (camera) enablement. Overrides the default false.\n */\n initialVideoEnabled?: boolean;\n /**\n * Allows to override the default audio input (microphone) stream to be published. Overrides the default string 'default'.\n */\n initialAudioInputDeviceId?: string;\n /**\n * Allows to override the default audio output (speaker) device to reproduce incoming audio from the SFU. Overrides the default string 'default'.\n */\n initialAudioOutputDeviceId?: string;\n /**\n * Allows to override the default video input (camera) stream to be published. Overrides the default string 'default'.\n */\n initialVideoInputDeviceId?: string;\n};\n\n/**\n * Context provider that internally puts in place mechanisms that:\n * 1. fall back to selecting a default device when trying to switch to a non-existent device\n * 2. fall back to a default device when an active device is disconnected\n * 3. stop publishing a media stream when a non-default device is disconnected\n * 4. republish a media stream from the newly connected default device\n * 5. republish a media stream when a new device is selected\n *\n * Provides `MediaDevicesContextAPI` that allow the integrators to handle:\n * 1. the initial device state enablement (for example apt for lobby scenario)\n * 2. media stream retrieval and disposal\n * 3. media stream publishing\n * 4. specific device selection\n * @param params\n * @returns\n *\n * @category Device Management\n */\nexport const MediaDevicesProvider = ({\n children,\n initialAudioEnabled,\n initialVideoEnabled,\n initialVideoInputDeviceId = DEFAULT_DEVICE_ID,\n initialAudioOutputDeviceId = DEFAULT_DEVICE_ID,\n initialAudioInputDeviceId = DEFAULT_DEVICE_ID,\n}: PropsWithChildren<MediaDevicesProviderProps>) => {\n const call = useCall();\n const { useCallCallingState, useCallState, useCallSettings } =\n useCallStateHooks();\n const callingState = useCallCallingState();\n const callState = useCallState();\n const { localParticipant$ } = callState;\n const hasBrowserPermissionVideoInput = useHasBrowserPermissions(\n 'camera' as PermissionName,\n );\n const hasBrowserPermissionAudioInput = useHasBrowserPermissions(\n 'microphone' as PermissionName,\n );\n const [selectedAudioInputDeviceId, selectAudioInputDeviceId] = useState<\n MediaDevicesContextAPI['selectedAudioInputDeviceId']\n >(initialAudioInputDeviceId);\n const [selectedAudioOutputDeviceId, selectAudioOutputDeviceId] = useState<\n MediaDevicesContextAPI['selectedAudioOutputDeviceId']\n >(initialAudioOutputDeviceId);\n const [selectedVideoDeviceId, selectVideoDeviceId] = useState<\n MediaDevicesContextAPI['selectedVideoDeviceId']\n >(initialVideoInputDeviceId);\n\n const [isAudioOutputChangeSupported] = useState<boolean>(() =>\n checkIfAudioOutputChangeSupported(),\n );\n const [initAudioEnabled, setInitialAudioEnabled] = useState<boolean>(\n !!initialAudioEnabled,\n );\n const [initialVideoState, setInitialVideoState] = useState<DeviceState>(() =>\n initialVideoEnabled ? DEVICE_STATE.starting : DEVICE_STATE.uninitialized,\n );\n\n const settings = useCallSettings();\n useEffect(() => {\n if (!settings) return;\n const { audio, video } = settings;\n if (typeof initialAudioEnabled === 'undefined' && audio.mic_default_on) {\n setInitialAudioEnabled(audio.mic_default_on);\n }\n if (typeof initialVideoEnabled === 'undefined' && video.camera_default_on) {\n setInitialVideoState(DEVICE_STATE.starting);\n }\n }, [initialAudioEnabled, initialVideoEnabled, settings]);\n\n const publishVideoStream = useVideoPublisher({\n initialVideoMuted: !initialVideoState.enabled,\n videoDeviceId: selectedVideoDeviceId,\n });\n const publishAudioStream = useAudioPublisher({\n initialAudioMuted: !initAudioEnabled,\n audioDeviceId: selectedAudioInputDeviceId,\n });\n\n const stopPublishingAudio = useCallback(async () => {\n if (\n callingState === CallingState.IDLE ||\n callingState === CallingState.RINGING\n ) {\n setInitialAudioEnabled(false);\n } else {\n call?.stopPublish(SfuModels.TrackType.AUDIO);\n }\n }, [call, callingState]);\n\n const stopPublishingVideo = useCallback(async () => {\n if (\n callingState === CallingState.IDLE ||\n callingState === CallingState.RINGING\n ) {\n setInitialVideoState(DEVICE_STATE.stopped);\n } else {\n call?.stopPublish(SfuModels.TrackType.VIDEO);\n }\n }, [call, callingState]);\n\n const toggleInitialAudioMuteState = useCallback(\n () => setInitialAudioEnabled((prev) => !prev),\n [],\n );\n const toggleInitialVideoMuteState = useCallback(\n () =>\n setInitialVideoState((prev) => {\n const newType = DEVICE_STATE_TOGGLE[prev.type];\n return DEVICE_STATE[newType];\n }),\n [],\n );\n\n const switchDevice = useCallback(\n (kind: MediaDeviceKind, deviceId?: string) => {\n if (kind === 'videoinput') {\n selectVideoDeviceId(deviceId);\n }\n if (kind === 'audioinput') {\n selectAudioInputDeviceId(deviceId);\n }\n if (kind === 'audiooutput') {\n selectAudioOutputDeviceId(deviceId);\n }\n },\n [],\n );\n\n useAudioInputDeviceFallback(\n () => switchDevice('audioinput', DEFAULT_DEVICE_ID),\n hasBrowserPermissionAudioInput,\n selectedAudioInputDeviceId,\n );\n useAudioOutputDeviceFallback(\n () => switchDevice('audiooutput', DEFAULT_DEVICE_ID),\n // audiooutput devices can be enumerated only with microphone permissions\n hasBrowserPermissionAudioInput,\n selectedAudioOutputDeviceId,\n );\n useVideoDeviceFallback(\n () => switchDevice('videoinput', DEFAULT_DEVICE_ID),\n hasBrowserPermissionVideoInput,\n selectedVideoDeviceId,\n );\n\n useEffect(() => {\n if (!call || callingState !== CallingState.JOINED) return;\n call.setAudioOutputDevice(selectedAudioOutputDeviceId);\n }, [call, callingState, selectedAudioOutputDeviceId]);\n\n useEffect(() => {\n // audiooutput devices can be enumerated only with microphone permissions\n if (!localParticipant$ || !hasBrowserPermissionAudioInput) return;\n\n const subscription = watchForDisconnectedAudioOutputDevice(\n localParticipant$.pipe(map((p) => p?.audioOutputDeviceId)),\n ).subscribe(async () => {\n selectAudioOutputDeviceId(DEFAULT_DEVICE_ID);\n });\n return () => {\n subscription.unsubscribe();\n };\n }, [hasBrowserPermissionAudioInput, localParticipant$]);\n\n const contextValue: MediaDevicesContextAPI = {\n disposeOfMediaStream,\n getAudioStream,\n getVideoStream,\n isAudioOutputChangeSupported,\n selectedAudioInputDeviceId,\n selectedAudioOutputDeviceId,\n selectedVideoDeviceId,\n switchDevice,\n initialAudioEnabled: initAudioEnabled,\n initialVideoState,\n setInitialAudioEnabled,\n setInitialVideoState,\n toggleInitialAudioMuteState,\n toggleInitialVideoMuteState,\n publishAudioStream,\n publishVideoStream,\n stopPublishingAudio,\n stopPublishingVideo,\n };\n\n return (\n <MediaDevicesContext.Provider value={contextValue}>\n {children}\n </MediaDevicesContext.Provider>\n );\n};\n\n/**\n * Context consumer retrieving MediaDevicesContextAPI.\n * @returns\n *\n * @category Device Management\n */\nexport const useMediaDevices = () => {\n const value = useContext(MediaDevicesContext);\n if (!value) {\n console.warn(`Null MediaDevicesContext`);\n }\n return value as MediaDevicesContextAPI;\n};\n","import { PropsWithChildren } from 'react';\nimport { Call } from '@stream-io/video-client';\nimport { StreamCallProvider } from '@stream-io/video-react-bindings';\nimport {\n MediaDevicesProvider,\n MediaDevicesProviderProps,\n} from '../../contexts';\n\nexport type StreamCallProps = {\n call: Call;\n\n /**\n * An optional props to pass to the `MediaDevicesProvider`.\n */\n mediaDevicesProviderProps?: MediaDevicesProviderProps;\n};\n\nexport const StreamCall = ({\n children,\n call,\n mediaDevicesProviderProps,\n}: PropsWithChildren<StreamCallProps>) => {\n return (\n <StreamCallProvider call={call}>\n <MediaDevicesProvider {...mediaDevicesProviderProps}>\n {children}\n </MediaDevicesProvider>\n </StreamCallProvider>\n );\n};\n","import en from './en.json';\n\nexport const translations = { en };\n","import {\n StreamVideoProvider,\n StreamVideoProps,\n} from '@stream-io/video-react-bindings';\nimport { PropsWithChildren } from 'react';\nimport { translations } from '../../../translations';\n\nexport const StreamVideo = (props: PropsWithChildren<StreamVideoProps>) => {\n return (\n <StreamVideoProvider translationsOverrides={translations} {...props} />\n );\n};\n","import { useEffect } from 'react';\nimport {\n Call,\n CallTypes,\n combineComparators,\n Comparator,\n defaultSortPreset,\n paginatedLayoutSortPreset,\n screenSharing,\n speakerLayoutSortPreset,\n StreamVideoParticipant,\n} from '@stream-io/video-client';\n\nexport const usePaginatedLayoutSortPreset = (call: Call | undefined) => {\n useEffect(() => {\n if (!call) return;\n call.setSortParticipantsBy(paginatedLayoutSortPreset);\n return () => {\n resetSortPreset(call);\n };\n }, [call]);\n};\n\nexport const useSpeakerLayoutSortPreset = (\n call: Call | undefined,\n isOneOnOneCall: boolean,\n) => {\n useEffect(() => {\n if (!call) return;\n // always show the remote participant in the spotlight\n if (isOneOnOneCall) {\n call.setSortParticipantsBy(combineComparators(screenSharing, loggedIn));\n } else {\n call.setSortParticipantsBy(speakerLayoutSortPreset);\n }\n return () => {\n resetSortPreset(call);\n };\n }, [call, isOneOnOneCall]);\n};\n\nconst resetSortPreset = (call: Call) => {\n // reset the sorting to the default for the call type\n const callConfig = CallTypes.get(call.type);\n call.setSortParticipantsBy(\n callConfig.options.sortParticipantsBy || defaultSortPreset,\n );\n};\n\nconst loggedIn: Comparator<StreamVideoParticipant> = (a, b) => {\n if (a.isLocalParticipant) return 1;\n if (b.isLocalParticipant) return -1;\n return 0;\n};\n","import clsx from 'clsx';\nimport { useCallback, useEffect, useState } from 'react';\nimport {\n useCall,\n useCallStateHooks,\n useI18n,\n} from '@stream-io/video-react-bindings';\nimport { SfuModels, StreamVideoParticipant } from '@stream-io/video-client';\nimport { ParticipantView, useParticipantViewContext } from '../ParticipantView';\nimport { ParticipantsAudio } from '../Audio';\nimport { usePaginatedLayoutSortPreset } from './hooks';\n\n/**\n * The props for the {@link LivestreamLayout} component.\n */\nexport type LivestreamLayoutProps = {\n /**\n * Whether the livestream is muted. Defaults to `false`.\n */\n muted?: boolean;\n\n /**\n * Whether to show the participant count. Defaults to `true`.\n */\n showParticipantCount?: boolean;\n\n /**\n * Whether to enable fullscreen mode. Defaults to `true`.\n */\n enableFullScreen?: boolean;\n\n /**\n * Whether to show the duration of the call. Defaults to `true`.\n */\n showDuration?: boolean;\n\n /**\n * Whether to show the live badge. Defaults to `true`.\n */\n showLiveBadge?: boolean;\n\n /**\n * Whether to show the speaker name. Defaults to `false`.\n */\n showSpeakerName?: boolean;\n\n /**\n * The props to pass to the floating participant element.\n */\n floatingParticipantProps?: LivestreamLayoutProps & {\n /**\n * The position of the floating participant element. Defaults to `top-right`.\n */\n position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n };\n};\n\nexport const LivestreamLayout = (props: LivestreamLayoutProps) => {\n const { useParticipants, useRemoteParticipants, useHasOngoingScreenShare } =\n useCallStateHooks();\n const call = useCall();\n const [currentSpeaker, ...otherParticipants] = useParticipants();\n const remoteParticipants = useRemoteParticipants();\n const hasOngoingScreenShare = useHasOngoingScreenShare();\n const presenter = hasOngoingScreenShare\n ? hasScreenShare(currentSpeaker) && currentSpeaker\n : otherParticipants.find(hasScreenShare);\n\n usePaginatedLayoutSortPreset(call);\n\n const Overlay = (\n <ParticipantOverlay\n showParticipantCount={props.showParticipantCount}\n showDuration={props.showDuration}\n showLiveBadge={props.showLiveBadge}\n showSpeakerName={props.showSpeakerName}\n />\n );\n\n const { floatingParticipantProps } = props;\n const FloatingParticipantOverlay = hasOngoingScreenShare && (\n <ParticipantOverlay\n // these elements aren't needed for the video feed\n showParticipantCount={\n floatingParticipantProps?.showParticipantCount ?? false\n }\n showDuration={floatingParticipantProps?.showDuration ?? false}\n showLiveBadge={floatingParticipantProps?.showLiveBadge ?? false}\n showSpeakerName={floatingParticipantProps?.showSpeakerName ?? true}\n />\n );\n\n return (\n <div className=\"str-video__livestream-layout__wrapper\">\n <ParticipantsAudio participants={remoteParticipants} />\n {hasOngoingScreenShare && presenter && (\n <ParticipantView\n className=\"str-video__livestream-layout__screen-share\"\n participant={presenter}\n ParticipantViewUI={Overlay}\n trackType=\"screenShareTrack\"\n muteAudio // audio is rendered by ParticipantsAudio\n />\n )}\n {currentSpeaker && (\n <ParticipantView\n className={clsx(\n hasOngoingScreenShare &&\n clsx(\n 'str-video__livestream-layout__floating-participant',\n `str-video__livestream-layout__floating-participant--${\n floatingParticipantProps?.position ?? 'top-right'\n }`,\n ),\n )}\n participant={currentSpeaker}\n ParticipantViewUI={FloatingParticipantOverlay || Overlay}\n muteAudio // audio is rendered by ParticipantsAudio\n />\n )}\n </div>\n );\n};\n\nconst hasScreenShare = (p?: StreamVideoParticipant) =>\n !!p?.publishedTracks.includes(SfuModels.TrackType.SCREEN_SHARE);\n\nconst ParticipantOverlay = (props: {\n enableFullScreen?: boolean;\n showParticipantCount?: boolean;\n showDuration?: boolean;\n showLiveBadge?: boolean;\n showSpeakerName?: boolean;\n}) => {\n const {\n enableFullScreen = true,\n showParticipantCount = true,\n showDuration = true,\n showLiveBadge = true,\n showSpeakerName = false,\n } = props;\n const { participant } = useParticipantViewContext();\n const { useParticipantCount } = useCallStateHooks();\n const participantCount = useParticipantCount();\n const duration = useUpdateCallDuration();\n const toggleFullScreen = useToggleFullScreen();\n const { t } = useI18n();\n return (\n <div className=\"str-video__livestream-layout__overlay\">\n <div className=\"str-video__livestream-layout__overlay__bar\">\n {showLiveBadge && (\n <span className=\"str-video__livestream-layout__live-badge\">\n {t('Live')}\n </span>\n )}\n {showParticipantCount && (\n <span className=\"str-video__livestream-layout__viewers-count\">\n {participantCount}\n </span>\n )}\n {showSpeakerName && (\n <span\n className=\"str-video__livestream-layout__speaker-name\"\n title={participant.name || participant.userId || ''}\n >\n {participant.name || participant.userId || ''}\n </span>\n )}\n {showDuration && (\n <span className=\"str-video__livestream-layout__duration\">\n {formatDuration(duration)}\n </span>\n )}\n {enableFullScreen && (\n <span\n className=\"str-video__livestream-layout__go-fullscreen\"\n onClick={toggleFullScreen}\n />\n )}\n </div>\n </div>\n );\n};\n\nconst useUpdateCallDuration = () => {\n const { useIsCallLive, useCallSession } = useCallStateHooks();\n const isCallLive = useIsCallLive();\n const session = useCallSession();\n const [duration, setDuration] = useState(() => {\n if (!session || !session.live_started_at) return 0;\n const liveStartTime = new Date(session.live_started_at);\n const now = new Date();\n return Math.floor((now.getTime() - liveStartTime.getTime()) / 1000);\n });\n\n useEffect(() => {\n if (!isCallLive) return;\n const interval = setInterval(() => {\n setDuration((d) => d + 1);\n }, 1000);\n return () => {\n clearInterval(interval);\n };\n }, [isCallLive]);\n\n return duration;\n};\n\nconst useToggleFullScreen = () => {\n const { participantViewElement } = useParticipantViewContext();\n const [isFullscreen, setIsFullscreen] = useState(false);\n return useCallback(() => {\n if (isFullscreen) {\n document.exitFullscreen().then(() => {\n setIsFullscreen(false);\n });\n } else {\n participantViewElement?.requestFullscreen().then(() => {\n setIsFullscreen(true);\n });\n }\n }, [isFullscreen, participantViewElement]);\n};\n\nconst formatDuration = (durationInMs: number) => {\n const days = Math.floor(durationInMs / 86400);\n const hours = Math.floor(durationInMs / 3600);\n const minutes = Math.floor((durationInMs % 3600) / 60);\n const seconds = durationInMs % 60;\n\n return `${days ? days + ' ' : ''}${hours ? hours + ':' : ''}${\n minutes < 10 ? '0' : ''\n }${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;\n};\n","import { useEffect, useMemo, useState } from 'react';\nimport { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';\nimport {\n StreamVideoLocalParticipant,\n StreamVideoParticipant,\n} from '@stream-io/video-client';\nimport clsx from 'clsx';\n\nimport {\n DefaultParticipantViewUI,\n ParticipantView,\n ParticipantViewProps,\n} from '../ParticipantView';\nimport { ParticipantsAudio } from '../Audio';\nimport { IconButton } from '../../../components';\nimport { chunk } from '../../../utilities';\nimport { usePaginatedLayoutSortPreset } from './hooks';\n\nconst GROUP_SIZE = 16;\n\ntype PaginatedGridLayoutGroupProps = {\n /**\n * The group of participants to render.\n */\n group: Array<StreamVideoParticipant | StreamVideoLocalParticipant>;\n} & Pick<ParticipantViewProps, 'VideoPlaceholder'> &\n Required<Pick<ParticipantViewProps, 'ParticipantViewUI'>>;\n\nconst PaginatedGridLayoutGroup = ({\n group,\n VideoPlaceholder,\n ParticipantViewUI,\n}: PaginatedGridLayoutGroupProps) => {\n return (\n <div\n className={clsx('str-video__paginated-grid-layout__group', {\n 'str-video__paginated-grid-layout--one': group.length === 1,\n 'str-video__paginated-grid-layout--two-four':\n group.length >= 2 && group.length <= 4,\n 'str-video__paginated-grid-layout--five-nine':\n group.length >= 5 && group.length <= 9,\n })}\n >\n {group.map((participant) => (\n <ParticipantView\n key={participant.sessionId}\n participant={participant}\n muteAudio\n VideoPlaceholder={VideoPlaceholder}\n ParticipantViewUI={ParticipantViewUI}\n />\n ))}\n </div>\n );\n};\n\nexport type PaginatedGridLayoutProps = {\n /**\n * The number of participants to display per page.\n */\n groupSize?: number;\n\n /**\n * Whether to exclude the local participant from the grid.\n */\n excludeLocalParticipant?: boolean;\n\n /**\n * Turns on/off the pagination arrows.\n */\n pageArrowsVisible?: boolean;\n} & Pick<ParticipantViewProps, 'ParticipantViewUI' | 'VideoPlaceholder'>;\n\nexport const PaginatedGridLayout = ({\n groupSize = GROUP_SIZE,\n excludeLocalParticipant = false,\n pageArrowsVisible = true,\n VideoPlaceholder,\n ParticipantViewUI = DefaultParticipantViewUI,\n}: PaginatedGridLayoutProps) => {\n const [page, setPage] = useState(0);\n const [\n paginatedGridLayoutWrapperElement,\n setPaginatedGridLayoutWrapperElement,\n ] = useState<HTMLDivElement | null>(null);\n\n const call = useCall();\n const { useParticipants, useRemoteParticipants } = useCallStateHooks();\n const participants = useParticipants();\n // used to render audio elements\n const remoteParticipants = useRemoteParticipants();\n\n usePaginatedLayoutSortPreset(call);\n\n useEffect(() => {\n if (!paginatedGridLayoutWrapperElement || !call) return;\n\n const cleanup = call.setViewport(paginatedGridLayoutWrapperElement);\n\n return () => cleanup();\n }, [paginatedGridLayoutWrapperElement, call]);\n\n // only used to render video elements\n const participantGroups = useMemo(\n () =>\n chunk(\n excludeLocalParticipant ? remoteParticipants : participants,\n groupSize,\n ),\n [excludeLocalParticipant, remoteParticipants, participants, groupSize],\n );\n\n const pageCount = participantGroups.length;\n\n // update page when page count is reduced and selected page no longer exists\n useEffect(() => {\n if (page > pageCount - 1) {\n setPage(Math.max(0, pageCount - 1));\n }\n }, [page, pageCount]);\n\n const selectedGroup = participantGroups[page];\n\n if (!call) return null;\n\n return (\n <div\n className=\"str-video__paginated-grid-layout__wrapper\"\n ref={setPaginatedGridLayoutWrapperElement}\n >\n <ParticipantsAudio participants={remoteParticipants} />\n <div className=\"str-video__paginated-grid-layout\">\n {pageArrowsVisible && pageCount > 1 && (\n <IconButton\n icon=\"caret-left\"\n disabled={page === 0}\n onClick={() =>\n setPage((currentPage) => Math.max(0, currentPage - 1))\n }\n />\n )}\n {selectedGroup && (\n <PaginatedGridLayoutGroup\n group={participantGroups[page]}\n VideoPlaceholder={VideoPlaceholder}\n ParticipantViewUI={ParticipantViewUI}\n />\n )}\n {pageArrowsVisible && pageCount > 1 && (\n <IconButton\n disabled={page === pageCount - 1}\n icon=\"caret-right\"\n onClick={() =>\n setPage((currentPage) => Math.min(pageCount - 1, currentPage + 1))\n }\n />\n )}\n </div>\n </div>\n );\n};\n","import { useEffect, useState } from 'react';\n\nexport const useCalculateHardLimit = (\n /**\n * Element that stretches to 100% of the whole layout component\n */\n wrapperElement: HTMLDivElement | null,\n /**\n * Element that directly hosts individual `ParticipantView` (or wrapper) elements\n */\n hostElement: HTMLDivElement | null,\n limit?: 'dynamic' | number,\n) => {\n const [calculatedLimit, setCalculatedLimit] = useState<{\n vertical: number | null;\n horizontal: number | null;\n }>({\n vertical: typeof limit === 'number' ? limit : null,\n horizontal: typeof limit === 'number' ? limit : null,\n });\n\n useEffect(() => {\n if (\n !hostElement ||\n !wrapperElement ||\n typeof limit === 'number' ||\n typeof limit === 'undefined'\n )\n return;\n\n let childWidth: number | null = null;\n let childHeight: number | null = null;\n\n const resizeObserver = new ResizeObserver((entries, observer) => {\n // this part should ideally run as little times as possible\n // get child measurements and disconnect\n // does not consider dynamically sized children\n // this hook is for SpeakerLayout use only, where children in the bar are fixed size\n if (entries.length > 1) {\n const child = hostElement.firstChild as HTMLElement | null;\n\n if (child) {\n childHeight = child.clientHeight;\n childWidth = child.clientWidth;\n observer.unobserve(hostElement);\n }\n }\n\n // keep the state at { vertical: 1, horizontal: 1 }\n // until we get the proper child measurements\n if (childHeight === null || childWidth === null) return;\n\n const vertical = Math.floor(wrapperElement.clientHeight / childHeight);\n const horizontal = Math.floor(wrapperElement.clientWidth / childWidth);\n\n setCalculatedLimit((pv) => {\n if (pv.vertical !== vertical || pv.horizontal !== horizontal)\n return { vertical, horizontal };\n return pv;\n });\n });\n\n resizeObserver.observe(wrapperElement);\n resizeObserver.observe(hostElement);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [hostElement, limit, wrapperElement]);\n\n return calculatedLimit;\n};\n","import { useEffect, useState } from 'react';\nimport clsx from 'clsx';\nimport { SfuModels, StreamVideoParticipant } from '@stream-io/video-client';\nimport { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';\n\nimport {\n DefaultParticipantViewUI,\n ParticipantView,\n ParticipantViewProps,\n} from '../ParticipantView';\nimport { IconButton } from '../../../components';\nimport {\n useHorizontalScrollPosition,\n useVerticalScrollPosition,\n} from '../../../hooks';\nimport { useSpeakerLayoutSortPreset } from './hooks';\nimport { useCalculateHardLimit } from '../../hooks/useCalculateHardLimit';\nimport { ParticipantsAudio } from '../Audio';\n\nexport type SpeakerLayoutProps = {\n ParticipantViewUISpotlight?: ParticipantViewProps['ParticipantViewUI'];\n ParticipantViewUIBar?: ParticipantViewProps['ParticipantViewUI'];\n /**\n * The position of the participants who are not in focus.\n * Providing `null` will hide the bar.\n */\n participantsBarPosition?: 'top' | 'bottom' | 'left' | 'right' | null;\n /**\n * Hard limits the number of the participants rendered in the participants bar.\n * Providing string `dynamic` will calculate hard limit based on screen width/height.\n */\n participantsBarLimit?: 'dynamic' | number;\n} & Pick<ParticipantViewProps, 'VideoPlaceholder'>;\n\nconst DefaultParticipantViewUIBar = () => (\n <DefaultParticipantViewUI menuPlacement=\"top-end\" />\n);\n\nconst DefaultParticipantViewUISpotlight = () => <DefaultParticipantViewUI />;\n\nexport const SpeakerLayout = ({\n ParticipantViewUIBar = DefaultParticipantViewUIBar,\n ParticipantViewUISpotlight = DefaultParticipantViewUISpotlight,\n VideoPlaceholder,\n participantsBarPosition = 'bottom',\n participantsBarLimit,\n}: SpeakerLayoutProps) => {\n const call = useCall();\n const { useParticipants, useRemoteParticipants } = useCallStateHooks();\n const [participantInSpotlight, ...otherParticipants] = useParticipants();\n const remoteParticipants = useRemoteParticipants();\n const [participantsBarWrapperElement, setParticipantsBarWrapperElement] =\n useState<HTMLDivElement | null>(null);\n const [participantsBarElement, setParticipantsBarElement] =\n useState<HTMLDivElement | null>(null);\n const [buttonsWrapperElement, setButtonsWrapperElement] =\n useState<HTMLDivElement | null>(null);\n\n const isSpeakerScreenSharing = hasScreenShare(participantInSpotlight);\n const hardLimit = useCalculateHardLimit(\n buttonsWrapperElement,\n participantsBarElement,\n participantsBarLimit,\n );\n\n const isVertical =\n participantsBarPosition === 'left' || participantsBarPosition === 'right';\n const isHorizontal =\n participantsBarPosition === 'top' || participantsBarPosition === 'bottom';\n\n useEffect(() => {\n if (!participantsBarWrapperElement || !call) return;\n\n const cleanup = call.setViewport(participantsBarWrapperElement);\n\n return () => cleanup();\n }, [participantsBarWrapperElement, call]);\n\n const isOneOnOneCall = otherParticipants.length === 1;\n useSpeakerLayoutSortPreset(call, isOneOnOneCall);\n\n let participantsWithAppliedLimit = otherParticipants;\n\n const hardLimitToApply = isVertical\n ? hardLimit.vertical\n : hardLimit.horizontal;\n\n if (\n typeof participantsBarLimit !== 'undefined' &&\n hardLimitToApply !== null\n ) {\n participantsWithAppliedLimit = otherParticipants.slice(\n 0,\n // subtract 1 if speaker is sharing screen as\n // that one is rendered independently from otherParticipants array\n hardLimitToApply - (isSpeakerScreenSharing ? 1 : 0),\n );\n }\n\n if (!call) return null;\n\n return (\n <div className=\"str-video__speaker-layout__wrapper\">\n <ParticipantsAudio participants={remoteParticipants} />\n <div\n className={clsx(\n 'str-video__speaker-layout',\n participantsBarPosition &&\n `str-video__speaker-layout--variant-${participantsBarPosition}`,\n )}\n >\n <div className=\"str-video__speaker-layout__spotlight\">\n {participantInSpotlight && (\n <ParticipantView\n participant={participantInSpotlight}\n muteAudio={true}\n trackType={\n isSpeakerScreenSharing ? 'screenShareTrack' : 'videoTrack'\n }\n ParticipantViewUI={ParticipantViewUISpotlight}\n VideoPlaceholder={VideoPlaceholder}\n />\n )}\n </div>\n {participantsWithAppliedLimit.length > 0 && participantsBarPosition && (\n <div\n ref={setButtonsWrapperElement}\n className=\"str-video__speaker-layout__participants-bar-buttons-wrapper\"\n >\n <div\n className=\"str-video__speaker-layout__participants-bar-wrapper\"\n ref={setParticipantsBarWrapperElement}\n >\n <div\n ref={setParticipantsBarElement}\n className=\"str-video__speaker-layout__participants-bar\"\n >\n {isSpeakerScreenSharing && (\n <div\n className=\"str-video__speaker-layout__participant-tile\"\n key={participantInSpotlight.sessionId}\n >\n <ParticipantView\n participant={participantInSpotlight}\n ParticipantViewUI={ParticipantViewUIBar}\n VideoPlaceholder={VideoPlaceholder}\n muteAudio={true}\n />\n </div>\n )}\n {participantsWithAppliedLimit.map((participant) => (\n <div\n className=\"str-video__speaker-layout__participant-tile\"\n key={participant.sessionId}\n >\n <ParticipantView\n participant={participant}\n ParticipantViewUI={ParticipantViewUIBar}\n VideoPlaceholder={VideoPlaceholder}\n muteAudio={true}\n />\n </div>\n ))}\n </div>\n </div>\n {isVertical && (\n <VerticalScrollButtons\n scrollWrapper={participantsBarWrapperElement}\n />\n )}\n {isHorizontal && (\n <HorizontalScrollButtons\n scrollWrapper={participantsBarWrapperElement}\n />\n )}\n </div>\n )}\n </div>\n </div>\n );\n};\n\ntype ScrollButtonsProps<T extends HTMLElement> = {\n scrollWrapper: T | null;\n};\n\nconst HorizontalScrollButtons = <T extends HTMLElement>({\n scrollWrapper,\n}: ScrollButtonsProps<T>) => {\n const scrollPosition = useHorizontalScrollPosition(scrollWrapper);\n\n const scrollStartClickHandler = () => {\n scrollWrapper?.scrollBy({ left: -150, behavior: 'smooth' });\n };\n\n const scrollEndClickHandler = () => {\n scrollWrapper?.scrollBy({ left: 150, behavior: 'smooth' });\n };\n return (\n <>\n {scrollPosition && scrollPosition !== 'start' && (\n <IconButton\n onClick={scrollStartClickHandler}\n icon=\"caret-left\"\n className=\"str-video__speaker-layout__participants-bar--button-left\"\n />\n )}\n {scrollPosition && scrollPosition !== 'end' && (\n <IconButton\n onClick={scrollEndClickHandler}\n icon=\"caret-right\"\n className=\"str-video__speaker-layout__participants-bar--button-right\"\n />\n )}\n </>\n );\n};\n\nconst VerticalScrollButtons = <T extends HTMLElement>({\n scrollWrapper,\n}: ScrollButtonsProps<T>) => {\n const scrollPosition = useVerticalScrollPosition(scrollWrapper);\n\n const scrollTopClickHandler = () => {\n scrollWrapper?.scrollBy({ top: -150, behavior: 'smooth' });\n };\n\n const scrollBottomClickHandler = () => {\n scrollWrapper?.scrollBy({ top: 150, behavior: 'smooth' });\n };\n return (\n <>\n {scrollPosition && scrollPosition !== 'top' && (\n <IconButton\n onClick={scrollTopClickHandler}\n icon=\"caret-up\"\n className=\"str-video__speaker-layout__participants-bar--button-top\"\n />\n )}\n {scrollPosition && scrollPosition !== 'bottom' && (\n <IconButton\n onClick={scrollBottomClickHandler}\n icon=\"caret-down\"\n className=\"str-video__speaker-layout__participants-bar--button-bottom\"\n />\n )}\n </>\n );\n};\n\nconst hasScreenShare = (p?: StreamVideoParticipant) =>\n !!p?.publishedTracks.includes(SfuModels.TrackType.SCREEN_SHARE);\n","import { setSdkInfo, SfuModels } from '@stream-io/video-client';\n\nexport * from '@stream-io/video-client';\nexport * from '@stream-io/video-react-bindings';\n\nexport * from './src/core';\n\nexport * from './src/components';\nexport * from './src/types';\nexport * from './src/translations';\nexport {\n useHorizontalScrollPosition,\n useVerticalScrollPosition,\n useToggleAudioMuteState,\n useToggleVideoMuteState,\n} from './src/hooks';\n\nconst [major, minor, patch] = (\n process.env.PKG_VERSION || '0.0.0-development'\n).split('.');\n\nsetSdkInfo({\n type: SfuModels.SdkType.REACT,\n major,\n minor,\n patch,\n});\n"],"names":["useCall","useState","useEffect","_jsx","SfuModels","_createElement","isValidElement","forwardRef","Browsers","_jsxs","Video","useLayoutEffect","VisibilityState","_Fragment","getVideoDevices","getAudioDevices","getAudioOutputDevices","pairwise","useCallStateHooks","useCallback","OwnCapability","getAudioStream","useRef","CallingState","watchForDisconnectedAudioDevice","map","watchForAddedDefaultAudioDevice","useMemo","getVideoStream","watchForDisconnectedVideoDevice","watchForAddedDefaultVideoDevice","VideoSettingsCameraFacingEnum","useFloating","offset","shift","flip","size","autoUpdate","useHasPermissions","getScreenShareStream","clsx","ToggleMenuButton","useI18n","createSoundDetector","ResponsiveLine","Restricted","ToggleButton","useConnectedUser","LoadingIndicator","DefaultLoadingIndicator","name","CallRecordingListHeader","DefaultCallRecordingListHeader","CallRecordingListItem","DefaultCallRecordingListItem","DefaultEmptyCallRecordingList","DefaultLoadingCallRecordingList","Fragment","disposeOfMediaStream","createContext","useContext","checkIfAudioOutputChangeSupported","watchForDisconnectedAudioOutputDevice","StreamCallProvider","StreamVideoProvider","paginatedLayoutSortPreset","combineComparators","screenSharing","speakerLayoutSortPreset","CallTypes","defaultSortPreset","hasScreenShare","setSdkInfo"],"mappings":"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"}
|