@stream-io/video-react-sdk 1.41.0 → 1.43.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -6
- package/dist/{embedded-BackgroundFilters-folwWrgs.cjs.js → background-filters-DMStbSEg.cjs.js} +97 -71
- package/dist/background-filters-DMStbSEg.cjs.js.map +1 -0
- package/dist/{background-filters-folwWrgs.cjs.js → embedded-BackgroundFilters-DMStbSEg.cjs.js} +97 -71
- package/dist/embedded-BackgroundFilters-DMStbSEg.cjs.js.map +1 -0
- package/dist/embedded.cjs.js +2 -2
- package/dist/esm/embedded.js +3 -0
- package/dist/esm/embedded.js.map +1 -0
- package/dist/esm/index.js +92 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/src/components/Avatar/Avatar.js +14 -0
- package/dist/esm/src/components/Avatar/Avatar.js.map +1 -0
- package/dist/{background-filters-D2U5UBbH.es.js → esm/src/components/BackgroundFilters/BackgroundFilters.js} +97 -71
- package/dist/esm/src/components/BackgroundFilters/BackgroundFilters.js.map +1 -0
- package/dist/esm/src/components/BackgroundFilters/BackgroundFiltersProvider.js +33 -0
- package/dist/esm/src/components/BackgroundFilters/BackgroundFiltersProvider.js.map +1 -0
- package/dist/esm/src/components/Button/CompositeButton.js +29 -0
- package/dist/esm/src/components/Button/CompositeButton.js.map +1 -0
- package/dist/esm/src/components/Button/IconButton.js +18 -0
- package/dist/esm/src/components/Button/IconButton.js.map +1 -0
- package/dist/esm/src/components/Button/TextButton.js +8 -0
- package/dist/esm/src/components/Button/TextButton.js.map +1 -0
- package/dist/esm/src/components/CallControls/AcceptCallButton.js +28 -0
- package/dist/esm/src/components/CallControls/AcceptCallButton.js.map +1 -0
- package/dist/esm/src/components/CallControls/CallControls.js +21 -0
- package/dist/esm/src/components/CallControls/CallControls.js.map +1 -0
- package/dist/esm/src/components/CallControls/CallStatsButton.js +18 -0
- package/dist/esm/src/components/CallControls/CallStatsButton.js.map +1 -0
- package/dist/esm/src/components/CallControls/CancelCallButton.js +78 -0
- package/dist/esm/src/components/CallControls/CancelCallButton.js.map +1 -0
- package/dist/esm/src/components/CallControls/ReactionsButton.js +61 -0
- package/dist/esm/src/components/CallControls/ReactionsButton.js.map +1 -0
- package/dist/esm/src/components/CallControls/RecordCallButton.js +64 -0
- package/dist/esm/src/components/CallControls/RecordCallButton.js.map +1 -0
- package/dist/esm/src/components/CallControls/ScreenShareButton.js +44 -0
- package/dist/esm/src/components/CallControls/ScreenShareButton.js.map +1 -0
- package/dist/esm/src/components/CallControls/ToggleAudioButton.js +72 -0
- package/dist/esm/src/components/CallControls/ToggleAudioButton.js.map +1 -0
- package/dist/esm/src/components/CallControls/ToggleAudioOutputButton.js +27 -0
- package/dist/esm/src/components/CallControls/ToggleAudioOutputButton.js.map +1 -0
- package/dist/esm/src/components/CallControls/ToggleVideoButton.js +81 -0
- package/dist/esm/src/components/CallControls/ToggleVideoButton.js.map +1 -0
- package/dist/esm/src/components/CallParticipantsList/BlockedUserListing.js +23 -0
- package/dist/esm/src/components/CallParticipantsList/BlockedUserListing.js.map +1 -0
- package/dist/esm/src/components/CallParticipantsList/CallParticipantListHeader.js +15 -0
- package/dist/esm/src/components/CallParticipantsList/CallParticipantListHeader.js.map +1 -0
- package/dist/esm/src/components/CallParticipantsList/CallParticipantListing.js +7 -0
- package/dist/esm/src/components/CallParticipantsList/CallParticipantListing.js.map +1 -0
- package/dist/esm/src/components/CallParticipantsList/CallParticipantListingItem.js +46 -0
- package/dist/esm/src/components/CallParticipantsList/CallParticipantListingItem.js.map +1 -0
- package/dist/esm/src/components/CallParticipantsList/CallParticipantsList.js +81 -0
- package/dist/esm/src/components/CallParticipantsList/CallParticipantsList.js.map +1 -0
- package/dist/esm/src/components/CallParticipantsList/EmptyParticipantSearchList.js +10 -0
- package/dist/esm/src/components/CallParticipantsList/EmptyParticipantSearchList.js.map +1 -0
- package/dist/esm/src/components/CallPreview/CallPreview.js +24 -0
- package/dist/esm/src/components/CallPreview/CallPreview.js.map +1 -0
- package/dist/esm/src/components/CallRecordingList/CallRecordingList.js +12 -0
- package/dist/esm/src/components/CallRecordingList/CallRecordingList.js.map +1 -0
- package/dist/esm/src/components/CallRecordingList/CallRecordingListHeader.js +12 -0
- package/dist/esm/src/components/CallRecordingList/CallRecordingListHeader.js.map +1 -0
- package/dist/esm/src/components/CallRecordingList/CallRecordingListItem.js +14 -0
- package/dist/esm/src/components/CallRecordingList/CallRecordingListItem.js.map +1 -0
- package/dist/esm/src/components/CallRecordingList/EmptyCallRecordingListing.js +8 -0
- package/dist/esm/src/components/CallRecordingList/EmptyCallRecordingListing.js.map +1 -0
- package/dist/esm/src/components/CallRecordingList/LoadingCallRecordingListing.js +10 -0
- package/dist/esm/src/components/CallRecordingList/LoadingCallRecordingListing.js.map +1 -0
- package/dist/esm/src/components/CallStats/CallStats.js +180 -0
- package/dist/esm/src/components/CallStats/CallStats.js.map +1 -0
- package/dist/{latency-chart-Bj5OSYzg.es.js → esm/src/components/CallStats/CallStatsLatencyChart.js} +1 -1
- package/dist/esm/src/components/CallStats/CallStatsLatencyChart.js.map +1 -0
- package/dist/esm/src/components/DeviceSettings/AudioVolumeIndicator.js +27 -0
- package/dist/esm/src/components/DeviceSettings/AudioVolumeIndicator.js.map +1 -0
- package/dist/esm/src/components/DeviceSettings/DeviceAudioPreviewItem.js +42 -0
- package/dist/esm/src/components/DeviceSettings/DeviceAudioPreviewItem.js.map +1 -0
- package/dist/esm/src/components/DeviceSettings/DeviceSelector.js +67 -0
- package/dist/esm/src/components/DeviceSettings/DeviceSelector.js.map +1 -0
- package/dist/esm/src/components/DeviceSettings/DeviceSelectorAudio.js +26 -0
- package/dist/esm/src/components/DeviceSettings/DeviceSelectorAudio.js.map +1 -0
- package/dist/esm/src/components/DeviceSettings/DeviceSelectorVideo.js +15 -0
- package/dist/esm/src/components/DeviceSettings/DeviceSelectorVideo.js.map +1 -0
- package/dist/esm/src/components/DeviceSettings/DeviceSettings.js +26 -0
- package/dist/esm/src/components/DeviceSettings/DeviceSettings.js.map +1 -0
- package/dist/esm/src/components/DeviceSettings/DeviceVideoPreviewItem.js +42 -0
- package/dist/esm/src/components/DeviceSettings/DeviceVideoPreviewItem.js.map +1 -0
- package/dist/esm/src/components/DeviceSettings/SpeakerTest.js +57 -0
- package/dist/esm/src/components/DeviceSettings/SpeakerTest.js.map +1 -0
- package/dist/esm/src/components/DropdownSelect/DropdownSelect.js +79 -0
- package/dist/esm/src/components/DropdownSelect/DropdownSelect.js.map +1 -0
- package/dist/esm/src/components/Icon/Icon.js +7 -0
- package/dist/esm/src/components/Icon/Icon.js.map +1 -0
- package/dist/esm/src/components/LoadingIndicator/LoadingIndicator.js +9 -0
- package/dist/esm/src/components/LoadingIndicator/LoadingIndicator.js.map +1 -0
- package/dist/esm/src/components/Menu/GenericMenu.js +19 -0
- package/dist/esm/src/components/Menu/GenericMenu.js.map +1 -0
- package/dist/esm/src/components/Menu/MenuToggle.js +75 -0
- package/dist/esm/src/components/Menu/MenuToggle.js.map +1 -0
- package/dist/esm/src/components/NoiseCancellation/NoiseCancellationProvider.js +96 -0
- package/dist/esm/src/components/NoiseCancellation/NoiseCancellationProvider.js.map +1 -0
- package/dist/esm/src/components/Notification/MicCaptureErrorNotification.js +23 -0
- package/dist/esm/src/components/Notification/MicCaptureErrorNotification.js.map +1 -0
- package/dist/esm/src/components/Notification/Notification.js +31 -0
- package/dist/esm/src/components/Notification/Notification.js.map +1 -0
- package/dist/esm/src/components/Notification/PermissionNotification.js +32 -0
- package/dist/esm/src/components/Notification/PermissionNotification.js.map +1 -0
- package/dist/esm/src/components/Notification/RecordingInProgressNotification.js +23 -0
- package/dist/esm/src/components/Notification/RecordingInProgressNotification.js.map +1 -0
- package/dist/esm/src/components/Notification/SpeakingWhileMutedNotification.js +14 -0
- package/dist/esm/src/components/Notification/SpeakingWhileMutedNotification.js.map +1 -0
- package/dist/esm/src/components/Permissions/PermissionRequests.js +99 -0
- package/dist/esm/src/components/Permissions/PermissionRequests.js.map +1 -0
- package/dist/esm/src/components/Reaction/Reaction.js +32 -0
- package/dist/esm/src/components/Reaction/Reaction.js.map +1 -0
- package/dist/esm/src/components/RingingCall/RingingCall.js +48 -0
- package/dist/esm/src/components/RingingCall/RingingCall.js.map +1 -0
- package/dist/esm/src/components/RingingCall/RingingCallControls.js +34 -0
- package/dist/esm/src/components/RingingCall/RingingCallControls.js.map +1 -0
- package/dist/esm/src/components/Search/SearchInput.js +27 -0
- package/dist/esm/src/components/Search/SearchInput.js.map +1 -0
- package/dist/esm/src/components/Search/SearchResults.js +15 -0
- package/dist/esm/src/components/Search/SearchResults.js.map +1 -0
- package/dist/esm/src/components/Search/hooks/useSearch.js +38 -0
- package/dist/esm/src/components/Search/hooks/useSearch.js.map +1 -0
- package/dist/esm/src/components/StreamTheme/StreamTheme.js +9 -0
- package/dist/esm/src/components/StreamTheme/StreamTheme.js.map +1 -0
- package/dist/esm/src/components/Tooltip/Tooltip.js +29 -0
- package/dist/esm/src/components/Tooltip/Tooltip.js.map +1 -0
- package/dist/esm/src/components/Tooltip/WithTooltip.js +15 -0
- package/dist/esm/src/components/Tooltip/WithTooltip.js.map +1 -0
- package/dist/esm/src/components/Tooltip/hooks/useEnterLeaveHandlers.js +17 -0
- package/dist/esm/src/components/Tooltip/hooks/useEnterLeaveHandlers.js.map +1 -0
- package/dist/esm/src/components/VideoPreview/VideoPreview.js +37 -0
- package/dist/esm/src/components/VideoPreview/VideoPreview.js.map +1 -0
- package/dist/esm/src/core/components/Audio/Audio.js +22 -0
- package/dist/esm/src/core/components/Audio/Audio.js.map +1 -0
- package/dist/esm/src/core/components/Audio/ParticipantsAudio.js +23 -0
- package/dist/esm/src/core/components/Audio/ParticipantsAudio.js.map +1 -0
- package/dist/esm/src/core/components/CallLayout/LivestreamLayout.js +150 -0
- package/dist/esm/src/core/components/CallLayout/LivestreamLayout.js.map +1 -0
- package/dist/esm/src/core/components/CallLayout/PaginatedGridLayout.js +79 -0
- package/dist/esm/src/core/components/CallLayout/PaginatedGridLayout.js.map +1 -0
- package/dist/esm/src/core/components/CallLayout/PipLayout/Grid.js +80 -0
- package/dist/esm/src/core/components/CallLayout/PipLayout/Grid.js.map +1 -0
- package/dist/esm/src/core/components/CallLayout/PipLayout/Host.js +13 -0
- package/dist/esm/src/core/components/CallLayout/PipLayout/Host.js.map +1 -0
- package/dist/esm/src/core/components/CallLayout/PipLayout/Pip.js +57 -0
- package/dist/esm/src/core/components/CallLayout/PipLayout/Pip.js.map +1 -0
- package/dist/esm/src/core/components/CallLayout/PipLayout/index.js +8 -0
- package/dist/esm/src/core/components/CallLayout/PipLayout/index.js.map +1 -0
- package/dist/esm/src/core/components/CallLayout/SpeakerLayout.js +103 -0
- package/dist/esm/src/core/components/CallLayout/SpeakerLayout.js.map +1 -0
- package/dist/esm/src/core/components/CallLayout/hooks.js +62 -0
- package/dist/esm/src/core/components/CallLayout/hooks.js.map +1 -0
- package/dist/esm/src/core/components/ParticipantView/DefaultParticipantViewUI.js +94 -0
- package/dist/esm/src/core/components/ParticipantView/DefaultParticipantViewUI.js.map +1 -0
- package/dist/esm/src/core/components/ParticipantView/ParticipantActionsContextMenu.js +97 -0
- package/dist/esm/src/core/components/ParticipantView/ParticipantActionsContextMenu.js.map +1 -0
- package/dist/esm/src/core/components/ParticipantView/ParticipantView.js +65 -0
- package/dist/esm/src/core/components/ParticipantView/ParticipantView.js.map +1 -0
- package/dist/esm/src/core/components/ParticipantView/ParticipantViewContext.js +7 -0
- package/dist/esm/src/core/components/ParticipantView/ParticipantViewContext.js.map +1 -0
- package/dist/esm/src/core/components/StreamCall/StreamCall.js +8 -0
- package/dist/esm/src/core/components/StreamCall/StreamCall.js.map +1 -0
- package/dist/esm/src/core/components/StreamVideo/StreamVideo.js +11 -0
- package/dist/esm/src/core/components/StreamVideo/StreamVideo.js.map +1 -0
- package/dist/esm/src/core/components/Video/BaseVideo.js +41 -0
- package/dist/esm/src/core/components/Video/BaseVideo.js.map +1 -0
- package/dist/esm/src/core/components/Video/BaseVideoPlaceholder.js +21 -0
- package/dist/esm/src/core/components/Video/BaseVideoPlaceholder.js.map +1 -0
- package/dist/esm/src/core/components/Video/DefaultPictureInPicturePlaceholder.js +12 -0
- package/dist/esm/src/core/components/Video/DefaultPictureInPicturePlaceholder.js.map +1 -0
- package/dist/esm/src/core/components/Video/DefaultVideoPlaceholder.js +12 -0
- package/dist/esm/src/core/components/Video/DefaultVideoPlaceholder.js.map +1 -0
- package/dist/esm/src/core/components/Video/Video.js +88 -0
- package/dist/esm/src/core/components/Video/Video.js.map +1 -0
- package/dist/esm/src/core/hooks/useCalculateHardLimit.js +59 -0
- package/dist/esm/src/core/hooks/useCalculateHardLimit.js.map +1 -0
- package/dist/esm/src/core/hooks/usePictureInPictureState.js +24 -0
- package/dist/esm/src/core/hooks/usePictureInPictureState.js.map +1 -0
- package/dist/esm/src/core/hooks/useTrackElementVisibility.js +14 -0
- package/dist/esm/src/core/hooks/useTrackElementVisibility.js.map +1 -0
- package/dist/esm/src/embedded/EmbeddedClientProvider.js +83 -0
- package/dist/esm/src/embedded/EmbeddedClientProvider.js.map +1 -0
- package/dist/esm/src/embedded/call/CallControls.js +65 -0
- package/dist/esm/src/embedded/call/CallControls.js.map +1 -0
- package/dist/esm/src/embedded/call/CallHeader.js +57 -0
- package/dist/esm/src/embedded/call/CallHeader.js.map +1 -0
- package/dist/esm/src/embedded/call/CallLayout.js +63 -0
- package/dist/esm/src/embedded/call/CallLayout.js.map +1 -0
- package/dist/esm/src/embedded/call/CallStateRouter.js +87 -0
- package/dist/esm/src/embedded/call/CallStateRouter.js.map +1 -0
- package/dist/esm/src/embedded/call/EmbeddedCall.js +12 -0
- package/dist/esm/src/embedded/call/EmbeddedCall.js.map +1 -0
- package/dist/esm/src/embedded/context/ConfigurationContext.js +21 -0
- package/dist/esm/src/embedded/context/ConfigurationContext.js.map +1 -0
- package/dist/esm/src/embedded/hooks/useCallDuration.js +32 -0
- package/dist/esm/src/embedded/hooks/useCallDuration.js.map +1 -0
- package/dist/esm/src/embedded/hooks/useEmbeddedClient.js +40 -0
- package/dist/esm/src/embedded/hooks/useEmbeddedClient.js.map +1 -0
- package/dist/esm/src/embedded/hooks/useInitializeCall.js +39 -0
- package/dist/esm/src/embedded/hooks/useInitializeCall.js.map +1 -0
- package/dist/esm/src/embedded/hooks/useInitializeVideoClient.js +93 -0
- package/dist/esm/src/embedded/hooks/useInitializeVideoClient.js.map +1 -0
- package/dist/esm/src/embedded/hooks/useIsLivestreamPaused.js +42 -0
- package/dist/esm/src/embedded/hooks/useIsLivestreamPaused.js.map +1 -0
- package/dist/esm/src/embedded/hooks/useLayout.js +122 -0
- package/dist/esm/src/embedded/hooks/useLayout.js.map +1 -0
- package/dist/esm/src/embedded/hooks/useNoiseCancellationLoader.js +48 -0
- package/dist/esm/src/embedded/hooks/useNoiseCancellationLoader.js.map +1 -0
- package/dist/esm/src/embedded/hooks/useWakeLock.js +34 -0
- package/dist/esm/src/embedded/hooks/useWakeLock.js.map +1 -0
- package/dist/esm/src/embedded/livestream/EmbeddedLivestream.js +11 -0
- package/dist/esm/src/embedded/livestream/EmbeddedLivestream.js.map +1 -0
- package/dist/esm/src/embedded/livestream/LivestreamUI.js +17 -0
- package/dist/esm/src/embedded/livestream/LivestreamUI.js.map +1 -0
- package/dist/esm/src/embedded/livestream/host/HostLayout.js +76 -0
- package/dist/esm/src/embedded/livestream/host/HostLayout.js.map +1 -0
- package/dist/esm/src/embedded/livestream/host/HostStateRouter.js +110 -0
- package/dist/esm/src/embedded/livestream/host/HostStateRouter.js.map +1 -0
- package/dist/esm/src/embedded/livestream/viewer/ViewerLayout.js +74 -0
- package/dist/esm/src/embedded/livestream/viewer/ViewerLayout.js.map +1 -0
- package/dist/esm/src/embedded/livestream/viewer/ViewerLobby.js +109 -0
- package/dist/esm/src/embedded/livestream/viewer/ViewerLobby.js.map +1 -0
- package/dist/esm/src/embedded/livestream/viewer/ViewerStateRouter.js +105 -0
- package/dist/esm/src/embedded/livestream/viewer/ViewerStateRouter.js.map +1 -0
- package/dist/esm/src/embedded/shared/BlurToggleButton/BlurToggleButton.js +65 -0
- package/dist/esm/src/embedded/shared/BlurToggleButton/BlurToggleButton.js.map +1 -0
- package/dist/esm/src/embedded/shared/CallFeedback/CallEndedScreen.js +34 -0
- package/dist/esm/src/embedded/shared/CallFeedback/CallEndedScreen.js.map +1 -0
- package/dist/esm/src/embedded/shared/CallFeedback/CallFeedback.js +35 -0
- package/dist/esm/src/embedded/shared/CallFeedback/CallFeedback.js.map +1 -0
- package/dist/esm/src/embedded/shared/CallFeedback/RatingScreen.js +18 -0
- package/dist/esm/src/embedded/shared/CallFeedback/RatingScreen.js.map +1 -0
- package/dist/esm/src/embedded/shared/CallFeedback/StarRating.js +37 -0
- package/dist/esm/src/embedded/shared/CallFeedback/StarRating.js.map +1 -0
- package/dist/esm/src/embedded/shared/CallFeedback/ThankYouScreen.js +34 -0
- package/dist/esm/src/embedded/shared/CallFeedback/ThankYouScreen.js.map +1 -0
- package/dist/esm/src/embedded/shared/ConnectionNotification/ConnectionNotification.js +56 -0
- package/dist/esm/src/embedded/shared/ConnectionNotification/ConnectionNotification.js.map +1 -0
- package/dist/esm/src/embedded/shared/EmbeddedParticipantViewUI/EmbeddedParticipantViewUI.js +42 -0
- package/dist/esm/src/embedded/shared/EmbeddedParticipantViewUI/EmbeddedParticipantViewUI.js.map +1 -0
- package/dist/esm/src/embedded/shared/JoinError/JoinError.js +34 -0
- package/dist/esm/src/embedded/shared/JoinError/JoinError.js.map +1 -0
- package/dist/esm/src/embedded/shared/Lobby/DeviceControls.js +44 -0
- package/dist/esm/src/embedded/shared/Lobby/DeviceControls.js.map +1 -0
- package/dist/esm/src/embedded/shared/Lobby/DisabledDeviceButton.js +31 -0
- package/dist/esm/src/embedded/shared/Lobby/DisabledDeviceButton.js.map +1 -0
- package/dist/esm/src/embedded/shared/Lobby/Lobby.js +45 -0
- package/dist/esm/src/embedded/shared/Lobby/Lobby.js.map +1 -0
- package/dist/esm/src/embedded/shared/Lobby/ToggleCameraButton.js +40 -0
- package/dist/esm/src/embedded/shared/Lobby/ToggleCameraButton.js.map +1 -0
- package/dist/esm/src/embedded/shared/Lobby/ToggleMicButton.js +41 -0
- package/dist/esm/src/embedded/shared/Lobby/ToggleMicButton.js.map +1 -0
- package/dist/esm/src/embedded/shared/Lobby/VideoPreviewFallbacks.js +50 -0
- package/dist/esm/src/embedded/shared/Lobby/VideoPreviewFallbacks.js.map +1 -0
- package/dist/esm/src/embedded/shared/ViewersCount/ViewersCount.js +31 -0
- package/dist/esm/src/embedded/shared/ViewersCount/ViewersCount.js.map +1 -0
- package/dist/esm/src/hooks/useDeviceList.js +40 -0
- package/dist/esm/src/hooks/useDeviceList.js.map +1 -0
- package/dist/esm/src/hooks/useDragToScroll.js +116 -0
- package/dist/esm/src/hooks/useDragToScroll.js.map +1 -0
- package/dist/esm/src/hooks/useFloatingUIPreset.js +34 -0
- package/dist/esm/src/hooks/useFloatingUIPreset.js.map +1 -0
- package/dist/esm/src/hooks/useLoopbackRecording.js +138 -0
- package/dist/esm/src/hooks/useLoopbackRecording.js.map +1 -0
- package/dist/esm/src/hooks/useModeration.js +135 -0
- package/dist/esm/src/hooks/useModeration.js.map +1 -0
- package/dist/esm/src/hooks/usePersistedDevicePreferences.js +16 -0
- package/dist/esm/src/hooks/usePersistedDevicePreferences.js.map +1 -0
- package/dist/esm/src/hooks/useRequestPermission.js +41 -0
- package/dist/esm/src/hooks/useRequestPermission.js.map +1 -0
- package/dist/esm/src/hooks/useScrollPosition.js +66 -0
- package/dist/esm/src/hooks/useScrollPosition.js.map +1 -0
- package/dist/esm/src/translations/en.json.js +177 -0
- package/dist/esm/src/translations/en.json.js.map +1 -0
- package/dist/esm/src/translations/index.js +6 -0
- package/dist/esm/src/translations/index.js.map +1 -0
- package/dist/esm/src/utilities/applyElementToRef.js +10 -0
- package/dist/esm/src/utilities/applyElementToRef.js.map +1 -0
- package/dist/esm/src/utilities/callControlHandler.js +29 -0
- package/dist/esm/src/utilities/callControlHandler.js.map +1 -0
- package/dist/esm/src/utilities/chunk.js +7 -0
- package/dist/esm/src/utilities/chunk.js.map +1 -0
- package/dist/esm/src/utilities/filter.js +94 -0
- package/dist/esm/src/utilities/filter.js.map +1 -0
- package/dist/esm/src/utilities/isComponentType.js +10 -0
- package/dist/esm/src/utilities/isComponentType.js.map +1 -0
- package/dist/esm/src/utilities/normalizeString.js +11 -0
- package/dist/esm/src/utilities/normalizeString.js.map +1 -0
- package/dist/esm/src/wrappers/LivestreamPlayer/LivestreamPlayer.js +105 -0
- package/dist/esm/src/wrappers/LivestreamPlayer/LivestreamPlayer.js.map +1 -0
- package/dist/index.cjs.js +136 -3
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/src/hooks/index.d.ts +1 -0
- package/dist/src/hooks/useLoopbackRecording.d.ts +23 -0
- package/index.ts +4 -0
- package/package.json +14 -10
- package/src/components/BackgroundFilters/BackgroundFilters.tsx +139 -103
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useLoopbackRecording.ts +207 -0
- package/dist/background-filters-D2U5UBbH.es.js.map +0 -1
- package/dist/background-filters-folwWrgs.cjs.js.map +0 -1
- package/dist/embedded-BackgroundFilters-D2U5UBbH.es.js +0 -420
- package/dist/embedded-BackgroundFilters-D2U5UBbH.es.js.map +0 -1
- package/dist/embedded-BackgroundFilters-folwWrgs.cjs.js.map +0 -1
- package/dist/embedded-CallStatsLatencyChart-Bj5OSYzg.es.js +0 -57
- package/dist/embedded-CallStatsLatencyChart-Bj5OSYzg.es.js.map +0 -1
- package/dist/embedded.es.js +0 -3536
- package/dist/embedded.es.js.map +0 -1
- package/dist/index.es.js +0 -3291
- package/dist/index.es.js.map +0 -1
- package/dist/latency-chart-Bj5OSYzg.es.js.map +0 -1
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
var Joining = "Joining";
|
|
2
|
+
var Mic = "Mic";
|
|
3
|
+
var Ringing = "Ringing";
|
|
4
|
+
var Speakers = "Speakers";
|
|
5
|
+
var Video = "Video";
|
|
6
|
+
var Live = "Live";
|
|
7
|
+
var Reactions = "Reactions";
|
|
8
|
+
var Statistics = "Statistics";
|
|
9
|
+
var Invite = "Invite";
|
|
10
|
+
var Join = "Join";
|
|
11
|
+
var You = "You";
|
|
12
|
+
var Me = "Me";
|
|
13
|
+
var Unknown = "Unknown";
|
|
14
|
+
var Default = "Default";
|
|
15
|
+
var Refresh = "Refresh";
|
|
16
|
+
var Allow = "Allow";
|
|
17
|
+
var Revoke = "Revoke";
|
|
18
|
+
var Dismiss = "Dismiss";
|
|
19
|
+
var Pinned = "Pinned";
|
|
20
|
+
var Unpin = "Unpin";
|
|
21
|
+
var Pin = "Pin";
|
|
22
|
+
var Block = "Block";
|
|
23
|
+
var Kick = "Kick";
|
|
24
|
+
var Enter = "Enter";
|
|
25
|
+
var Leave = "Leave";
|
|
26
|
+
var Participants = "Participants";
|
|
27
|
+
var Anonymous = ", and ({{ count }}) anonymous";
|
|
28
|
+
var Speaker = "Speaker";
|
|
29
|
+
var Microphone = "Microphone";
|
|
30
|
+
var Backstage = "Backstage";
|
|
31
|
+
var en = {
|
|
32
|
+
Joining: Joining,
|
|
33
|
+
Mic: Mic,
|
|
34
|
+
"No internet connection": "No internet connection",
|
|
35
|
+
"Re-connecting": "Re-connecting",
|
|
36
|
+
Ringing: Ringing,
|
|
37
|
+
"Screen Share": "Screen Share",
|
|
38
|
+
"Select a Camera": "Select a Camera",
|
|
39
|
+
"Select a Mic": "Select a Mic",
|
|
40
|
+
"Select Speakers": "Select Speakers",
|
|
41
|
+
Speakers: Speakers,
|
|
42
|
+
Video: Video,
|
|
43
|
+
"You are muted. Unmute to speak.": "You are muted. Unmute to speak.",
|
|
44
|
+
"Background filters performance is degraded. Consider disabling filters for better performance.": "Background filters performance is degraded. Consider disabling filters for better performance.",
|
|
45
|
+
Live: Live,
|
|
46
|
+
"Livestream starts soon": "Livestream starts soon",
|
|
47
|
+
"Livestream starts at {{ time }}": "Livestream starts at {{ time }}",
|
|
48
|
+
"{{ count }} participants joined early_one": "{{ count }} participant joined early",
|
|
49
|
+
"{{ count }} participants joined early_other": "{{ count }} participants joined early",
|
|
50
|
+
"You can now speak.": "You can now speak.",
|
|
51
|
+
"Awaiting for an approval to speak.": "Awaiting for an approval to speak.",
|
|
52
|
+
"You can no longer speak.": "You can no longer speak.",
|
|
53
|
+
"You can now share your video.": "You can now share your video.",
|
|
54
|
+
"Awaiting for an approval to share your video.": "Awaiting for an approval to share your video.",
|
|
55
|
+
"You can no longer share your video.": "You can no longer share your video.",
|
|
56
|
+
"Waiting for recording to stop...": "Waiting for recording to stop...",
|
|
57
|
+
"Waiting for recording to start...": "Waiting for recording to start...",
|
|
58
|
+
"Record call": "Record call",
|
|
59
|
+
Reactions: Reactions,
|
|
60
|
+
Statistics: Statistics,
|
|
61
|
+
"You can now share your screen.": "You can now share your screen.",
|
|
62
|
+
"Awaiting for an approval to share screen.": "Awaiting for an approval to share screen.",
|
|
63
|
+
"You can no longer share your screen.": "You can no longer share your screen.",
|
|
64
|
+
"Share screen": "Share screen",
|
|
65
|
+
"Incoming Call...": "Incoming Call...",
|
|
66
|
+
"Calling...": "Calling...",
|
|
67
|
+
"Mute All": "Mute All",
|
|
68
|
+
Invite: Invite,
|
|
69
|
+
Join: Join,
|
|
70
|
+
You: You,
|
|
71
|
+
Me: Me,
|
|
72
|
+
Unknown: Unknown,
|
|
73
|
+
"Toggle device menu": "Toggle device menu",
|
|
74
|
+
Default: Default,
|
|
75
|
+
"Call Recordings": "Call Recordings",
|
|
76
|
+
Refresh: Refresh,
|
|
77
|
+
"Check your browser video permissions": "Check your browser video permissions",
|
|
78
|
+
"Video publishing is disabled by the system": "Video publishing is disabled by the system",
|
|
79
|
+
"You have no permission to share your video": "You have no permission to share your video",
|
|
80
|
+
"You have no permission to share your audio": "You have no permission to share your audio",
|
|
81
|
+
"You are presenting your screen": "You are presenting your screen",
|
|
82
|
+
"Stop Screen Sharing": "Stop Screen Sharing",
|
|
83
|
+
"Audio is blocked by your system": "Audio is blocked by your system",
|
|
84
|
+
"Click or tap to play audio": "Click or tap to play audio",
|
|
85
|
+
Allow: Allow,
|
|
86
|
+
Revoke: Revoke,
|
|
87
|
+
Dismiss: Dismiss,
|
|
88
|
+
"Microphone on": "Microphone on",
|
|
89
|
+
"Microphone off": "Microphone off",
|
|
90
|
+
"Microphone is paused by your system": "Microphone is paused by your system",
|
|
91
|
+
"Camera on": "Camera on",
|
|
92
|
+
"Camera off": "Camera off",
|
|
93
|
+
"Camera is paused by your system": "Camera is paused by your system",
|
|
94
|
+
"No camera found": "No camera found",
|
|
95
|
+
"Video is disabled": "Video is disabled",
|
|
96
|
+
Pinned: Pinned,
|
|
97
|
+
Unpin: Unpin,
|
|
98
|
+
Pin: Pin,
|
|
99
|
+
"Pin for everyone": "Pin for everyone",
|
|
100
|
+
"Unpin for everyone": "Unpin for everyone",
|
|
101
|
+
Block: Block,
|
|
102
|
+
Kick: Kick,
|
|
103
|
+
"Turn off video": "Turn off video",
|
|
104
|
+
"Turn off screen share": "Turn off screen share",
|
|
105
|
+
"Mute audio": "Mute audio",
|
|
106
|
+
"Mute screen share audio": "Mute screen share audio",
|
|
107
|
+
"Allow audio": "Allow audio",
|
|
108
|
+
"Allow video": "Allow video",
|
|
109
|
+
"Allow screen sharing": "Allow screen sharing",
|
|
110
|
+
"Disable audio": "Disable audio",
|
|
111
|
+
"Disable video": "Disable video",
|
|
112
|
+
"Disable screen sharing": "Disable screen sharing",
|
|
113
|
+
Enter: Enter,
|
|
114
|
+
Leave: Leave,
|
|
115
|
+
"Leave call": "Leave call",
|
|
116
|
+
"End call for all": "End call for all",
|
|
117
|
+
"{{ direction }} fullscreen": "{{ direction }} fullscreen",
|
|
118
|
+
"{{ direction }} picture-in-picture": "{{ direction }} picture-in-picture",
|
|
119
|
+
"Dominant Speaker": "Dominant Speaker",
|
|
120
|
+
"Poor connection quality": "Poor connection quality. Please check your internet connection.",
|
|
121
|
+
"Video paused due to insufficient bandwidth": "Video paused due to insufficient bandwidth",
|
|
122
|
+
"Audio is connecting...": "Audio is connecting...",
|
|
123
|
+
"Video is connecting...": "Video is connecting...",
|
|
124
|
+
Participants: Participants,
|
|
125
|
+
Anonymous: Anonymous,
|
|
126
|
+
"No participants found": "No participants found",
|
|
127
|
+
"Participants ({{ numberOfParticipants }})": "Participants ({{ numberOfParticipants }})",
|
|
128
|
+
"{{ userName }} is sharing their screen": "{{ userName }} is sharing their screen",
|
|
129
|
+
"{{ userName }} is requesting to speak": "{{ userName }} is requesting to speak",
|
|
130
|
+
"{{ userName }} is requesting to share their camera": "{{ userName }} is requesting to share their camera",
|
|
131
|
+
"{{ userName }} is requesting to present their screen": "{{ userName }} is requesting to present their screen",
|
|
132
|
+
"{{ userName }} is requesting permission: {{ permission }}": "{{ userName }} is requesting permission: {{ permission }}",
|
|
133
|
+
"Applying...": "Applying...",
|
|
134
|
+
"Disable blur": "Disable blur",
|
|
135
|
+
"Blur background": "Blur background",
|
|
136
|
+
"Migrating...": "Migrating...",
|
|
137
|
+
"Reconnecting...": "Reconnecting...",
|
|
138
|
+
"You are offline. Check your internet connection.": "You are offline. Check your internet connection.",
|
|
139
|
+
"Failed to restore connection. Please try again.": "Failed to restore connection. Please try again.",
|
|
140
|
+
"Failed to join. Please try again.": "Failed to join. Please try again.",
|
|
141
|
+
"Set up your call before joining": "Set up your call before joining",
|
|
142
|
+
"Please grant your browser permission to access your camera and microphone.": "Please grant your browser permission to access your camera and microphone.",
|
|
143
|
+
"Start call": "Start call",
|
|
144
|
+
Speaker: Speaker,
|
|
145
|
+
Microphone: Microphone,
|
|
146
|
+
Backstage: Backstage,
|
|
147
|
+
"Go Live": "Go Live",
|
|
148
|
+
"Stop Live": "End Live",
|
|
149
|
+
"Enter Backstage": "Enter Backstage",
|
|
150
|
+
"Prepare your livestream": "Prepare your livestream",
|
|
151
|
+
"Ready to go live": "Ready to go live",
|
|
152
|
+
"Stream is ready!": "Stream is ready!",
|
|
153
|
+
"Waiting for the livestream to start": "Waiting for the livestream to start",
|
|
154
|
+
"{{ count }} waiting": "{{ count }} waiting",
|
|
155
|
+
"Join Stream": "Join Stream",
|
|
156
|
+
"Join automatically when stream starts": "Join automatically when stream starts",
|
|
157
|
+
"Display name": "Display name",
|
|
158
|
+
"Permission needed": "Permission needed",
|
|
159
|
+
"Call ended": "Call ended",
|
|
160
|
+
"Rejoin call": "Rejoin call",
|
|
161
|
+
"Left by mistake?": "Left by mistake?",
|
|
162
|
+
"Help us improve": "Help us improve",
|
|
163
|
+
"Leave feedback": "Leave feedback",
|
|
164
|
+
"Failed to rejoin. Please try again.": "Failed to rejoin. Please try again.",
|
|
165
|
+
"Share your feedback": "Share your feedback",
|
|
166
|
+
"Tell us about your experience...": "Tell us about your experience...",
|
|
167
|
+
"Submit feedback": "Submit feedback",
|
|
168
|
+
"Feedback message": "Feedback message",
|
|
169
|
+
"How was your call quality?": "How was your call quality?",
|
|
170
|
+
"Rate {{ count }} star_one": "Rate {{ count }} star",
|
|
171
|
+
"Rate {{ count }} star_other": "Rate {{ count }} stars",
|
|
172
|
+
"Thank you!": "Thank you!",
|
|
173
|
+
"Your feedback helps improve call quality.": "Your feedback helps improve call quality."
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
export { Allow, Anonymous, Backstage, Block, Default, Dismiss, Enter, Invite, Join, Joining, Kick, Leave, Live, Me, Mic, Microphone, Participants, Pin, Pinned, Reactions, Refresh, Revoke, Ringing, Speaker, Speakers, Statistics, Unknown, Unpin, Video, You, en as default };
|
|
177
|
+
//# sourceMappingURL=en.json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../src/translations/index.ts"],"sourcesContent":["import en from './en.json';\n\nexport const translations = { en };\n"],"names":[],"mappings":";;AAEO,MAAM,YAAY,GAAG,EAAE,EAAE;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"applyElementToRef.js","sources":["../../../../../../src/utilities/applyElementToRef.ts"],"sourcesContent":["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"],"names":[],"mappings":"MAEa,iBAAiB,GAAG,CAC/B,GAAoB,EACpB,OAAU,KACR;AACF,IAAA,IAAI,CAAC,GAAG;QAAE;IAEV,IAAI,OAAO,GAAG,KAAK,UAAU;AAAE,QAAA,OAAO,GAAG,CAAC,OAAO,CAAC;AAElD,IAAA,GAAG,CAAC,OAAO,GAAG,OAAO;AACvB;;;;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wraps an event handler, silencing and logging exceptions (excluding the NotAllowedError
|
|
3
|
+
* DOMException, which is a normal situation handled by the SDK)
|
|
4
|
+
*
|
|
5
|
+
* @param props component props, including the onError callback
|
|
6
|
+
* @param handler event handler to wrap
|
|
7
|
+
*/
|
|
8
|
+
const createCallControlHandler = (props, handler) => {
|
|
9
|
+
return async () => {
|
|
10
|
+
try {
|
|
11
|
+
await handler();
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
if (props.onError) {
|
|
15
|
+
props.onError(error);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (!isNotAllowedError(error)) {
|
|
19
|
+
console.error('Call control handler failed', error);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
function isNotAllowedError(error) {
|
|
25
|
+
return error instanceof DOMException && error.name === 'NotAllowedError';
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { createCallControlHandler };
|
|
29
|
+
//# sourceMappingURL=callControlHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callControlHandler.js","sources":["../../../../../../src/utilities/callControlHandler.ts"],"sourcesContent":["export type PropsWithErrorHandler<T = unknown> = T & {\n /**\n * Will be called if the call control action failed with an error (e.g. user didn't grant a\n * browser permission to enable a media device). If no callback is provided, just logs the error.\n * @param error Exception which caused call control action to fail\n */\n onError?: (error: unknown) => void;\n};\n\n/**\n * Wraps an event handler, silencing and logging exceptions (excluding the NotAllowedError\n * DOMException, which is a normal situation handled by the SDK)\n *\n * @param props component props, including the onError callback\n * @param handler event handler to wrap\n */\nexport const createCallControlHandler = (\n props: PropsWithErrorHandler,\n handler: () => Promise<void>,\n): (() => Promise<void>) => {\n return async () => {\n try {\n await handler();\n } catch (error) {\n if (props.onError) {\n props.onError(error);\n return;\n }\n\n if (!isNotAllowedError(error)) {\n console.error('Call control handler failed', error);\n }\n }\n };\n};\n\nfunction isNotAllowedError(error: unknown): error is DOMException {\n return error instanceof DOMException && error.name === 'NotAllowedError';\n}\n"],"names":[],"mappings":"AASA;;;;;;AAMG;MACU,wBAAwB,GAAG,CACtC,KAA4B,EAC5B,OAA4B,KACH;IACzB,OAAO,YAAW;AAChB,QAAA,IAAI;YACF,MAAM,OAAO,EAAE;QACjB;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,IAAI,KAAK,CAAC,OAAO,EAAE;AACjB,gBAAA,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACpB;YACF;AAEA,YAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;AAC7B,gBAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC;YACrD;QACF;AACF,IAAA,CAAC;AACH;AAEA,SAAS,iBAAiB,CAAC,KAAc,EAAA;IACvC,OAAO,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB;AAC1E;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk.js","sources":["../../../../../../src/utilities/chunk.ts"],"sourcesContent":["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"],"names":[],"mappings":"MAAa,KAAK,GAAG,CAAsB,KAAQ,EAAE,IAAY,KAAI;AACnE,IAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;AAEjD,IAAA,OAAO,KAAK,CAAC,IAAI,CACf,EAAE,MAAM,EAAE,UAAU,EAAE,EACtB,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,GAAG,IAAI,CAAM,CAClE;AACH;;;;"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
function applyFilter(obj, filter) {
|
|
2
|
+
if ('$and' in filter) {
|
|
3
|
+
return filter.$and.every((f) => applyFilter(obj, f));
|
|
4
|
+
}
|
|
5
|
+
if ('$or' in filter) {
|
|
6
|
+
return filter.$or.some((f) => applyFilter(obj, f));
|
|
7
|
+
}
|
|
8
|
+
if ('$not' in filter) {
|
|
9
|
+
return !applyFilter(obj, filter.$not);
|
|
10
|
+
}
|
|
11
|
+
return checkConditions(obj, filter);
|
|
12
|
+
}
|
|
13
|
+
const isDateString = (value) => typeof value === 'string' &&
|
|
14
|
+
/^((?:(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2}(?:\.\d+)?))(Z|[+-]\d{2}:\d{2})?)$/.test(value);
|
|
15
|
+
function checkConditions(obj, conditions) {
|
|
16
|
+
let match = true;
|
|
17
|
+
for (const key of Object.keys(conditions)) {
|
|
18
|
+
const operator = conditions[key];
|
|
19
|
+
const maybeOperator = operator && typeof operator === 'object';
|
|
20
|
+
let value = obj[key];
|
|
21
|
+
if (value instanceof Date) {
|
|
22
|
+
value = value.getTime();
|
|
23
|
+
}
|
|
24
|
+
else if (isDateString(value)) {
|
|
25
|
+
value = new Date(value).getTime();
|
|
26
|
+
}
|
|
27
|
+
if (maybeOperator && '$eq' in operator) {
|
|
28
|
+
const eqOperator = operator;
|
|
29
|
+
const eqOperatorValue = isDateString(eqOperator.$eq)
|
|
30
|
+
? new Date(eqOperator.$eq).getTime()
|
|
31
|
+
: eqOperator.$eq;
|
|
32
|
+
match &&= eqOperatorValue === value;
|
|
33
|
+
}
|
|
34
|
+
else if (maybeOperator && '$neq' in operator) {
|
|
35
|
+
const neqOperator = operator;
|
|
36
|
+
match &&= neqOperator.$neq !== value;
|
|
37
|
+
}
|
|
38
|
+
else if (maybeOperator && '$in' in operator) {
|
|
39
|
+
const inOperator = operator;
|
|
40
|
+
match &&= inOperator.$in.includes(value);
|
|
41
|
+
}
|
|
42
|
+
else if (maybeOperator && '$contains' in operator) {
|
|
43
|
+
if (Array.isArray(value)) {
|
|
44
|
+
const containsOperator = operator;
|
|
45
|
+
match &&= value.includes(containsOperator.$contains);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
match = false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else if (maybeOperator && '$gt' in operator) {
|
|
52
|
+
const gtOperator = operator;
|
|
53
|
+
const gtOperatorValue = isDateString(gtOperator.$gt)
|
|
54
|
+
? new Date(gtOperator.$gt).getTime()
|
|
55
|
+
: gtOperator.$gt;
|
|
56
|
+
match &&= value > gtOperatorValue;
|
|
57
|
+
}
|
|
58
|
+
else if (maybeOperator && '$gte' in operator) {
|
|
59
|
+
const gteOperator = operator;
|
|
60
|
+
const gteOperatorValue = isDateString(gteOperator.$gte)
|
|
61
|
+
? new Date(gteOperator.$gte).getTime()
|
|
62
|
+
: gteOperator.$gte;
|
|
63
|
+
match &&= value >= gteOperatorValue;
|
|
64
|
+
}
|
|
65
|
+
else if (maybeOperator && '$lt' in operator) {
|
|
66
|
+
const ltOperator = operator;
|
|
67
|
+
const ltOperatorValue = isDateString(ltOperator.$lt)
|
|
68
|
+
? new Date(ltOperator.$lt).getTime()
|
|
69
|
+
: ltOperator.$lt;
|
|
70
|
+
match &&= value < ltOperatorValue;
|
|
71
|
+
}
|
|
72
|
+
else if (maybeOperator && '$lte' in operator) {
|
|
73
|
+
const lteOperator = operator;
|
|
74
|
+
const lteOperatorValue = isDateString(lteOperator.$lte)
|
|
75
|
+
? new Date(lteOperator.$lte).getTime()
|
|
76
|
+
: lteOperator.$lte;
|
|
77
|
+
match &&= value <= lteOperatorValue;
|
|
78
|
+
// } else if (maybeOperator && '$autocomplete' in operator) {
|
|
79
|
+
// TODO: regexp solution maybe?
|
|
80
|
+
// match &&= false;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
const eqValue = operator;
|
|
84
|
+
match &&= eqValue === value;
|
|
85
|
+
}
|
|
86
|
+
if (!match) {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export { applyFilter };
|
|
94
|
+
//# sourceMappingURL=filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.js","sources":["../../../../../../src/utilities/filter.ts"],"sourcesContent":["export type Filter<T> =\n | { $and: Array<Filter<T>> }\n | { $or: Array<Filter<T>> }\n | { $not: Filter<T> }\n | Conditions<T>;\n\ntype Conditions<T> = {\n [K in keyof T]?: T[K] extends Array<infer E>\n ? ArrayOperator<E>\n : ScalarOperator<T[K]>;\n};\n\nexport type ScalarOperator<T> =\n | EqOperator<T>\n | NeqOperator<T>\n | InOperator<T>\n | GtOperator<T>\n | GteOperator<T>\n | LtOperator<T>\n | LteOperator<T>\n | T;\n\nexport type ArrayOperator<T> = ContainsOperator<T>;\n\nexport type AutocompleteOperator<T> = { $autocomplete: T };\nexport type EqOperator<T> = { $eq: T };\nexport type GtOperator<T> = { $gt: T };\nexport type GteOperator<T> = { $gte: T };\nexport type LtOperator<T> = { $lt: T };\nexport type LteOperator<T> = { $lte: T };\nexport type NeqOperator<T> = { $neq: T };\nexport type InOperator<T> = { $in: Array<T> };\nexport type ContainsOperator<T> = { $contains: T };\n\nexport function applyFilter<T>(obj: T, filter: Filter<T>): boolean {\n if ('$and' in filter) {\n return filter.$and.every((f) => applyFilter(obj, f));\n }\n\n if ('$or' in filter) {\n return filter.$or.some((f) => applyFilter(obj, f));\n }\n\n if ('$not' in filter) {\n return !applyFilter(obj, filter.$not);\n }\n\n return checkConditions(obj, filter);\n}\n\ntype DateString = string;\nconst isDateString = (value: unknown): value is DateString =>\n typeof value === 'string' &&\n /^((?:(\\d{4}-\\d{2}-\\d{2})T(\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?))(Z|[+-]\\d{2}:\\d{2})?)$/.test(\n value,\n );\n\nfunction checkConditions<T>(obj: T, conditions: Conditions<T>): boolean {\n let match = true;\n\n for (const key of Object.keys(conditions) as Array<keyof T>) {\n const operator = conditions[key];\n const maybeOperator = operator && typeof operator === 'object';\n let value: T[keyof T] | number = obj[key];\n\n if (value instanceof Date) {\n value = value.getTime();\n } else if (isDateString(value)) {\n value = new Date(value).getTime();\n }\n\n if (maybeOperator && '$eq' in operator) {\n const eqOperator = operator as EqOperator<typeof value>;\n const eqOperatorValue = isDateString(eqOperator.$eq)\n ? new Date(eqOperator.$eq).getTime()\n : eqOperator.$eq;\n match &&= eqOperatorValue === value;\n } else if (maybeOperator && '$neq' in operator) {\n const neqOperator = operator as NeqOperator<typeof value>;\n match &&= neqOperator.$neq !== value;\n } else if (maybeOperator && '$in' in operator) {\n const inOperator = operator as InOperator<typeof value>;\n match &&= inOperator.$in.includes(value);\n } else if (maybeOperator && '$contains' in operator) {\n if (Array.isArray(value)) {\n const containsOperator = operator as ContainsOperator<\n (typeof value)[number]\n >;\n match &&= value.includes(containsOperator.$contains);\n } else {\n match = false;\n }\n } else if (maybeOperator && '$gt' in operator) {\n const gtOperator = operator as GtOperator<typeof value>;\n const gtOperatorValue = isDateString(gtOperator.$gt)\n ? new Date(gtOperator.$gt).getTime()\n : gtOperator.$gt;\n match &&= value > gtOperatorValue;\n } else if (maybeOperator && '$gte' in operator) {\n const gteOperator = operator as GteOperator<typeof value>;\n const gteOperatorValue = isDateString(gteOperator.$gte)\n ? new Date(gteOperator.$gte).getTime()\n : gteOperator.$gte;\n match &&= value >= gteOperatorValue;\n } else if (maybeOperator && '$lt' in operator) {\n const ltOperator = operator as LtOperator<typeof value>;\n const ltOperatorValue = isDateString(ltOperator.$lt)\n ? new Date(ltOperator.$lt).getTime()\n : ltOperator.$lt;\n match &&= value < ltOperatorValue;\n } else if (maybeOperator && '$lte' in operator) {\n const lteOperator = operator as LteOperator<typeof value>;\n const lteOperatorValue = isDateString(lteOperator.$lte)\n ? new Date(lteOperator.$lte).getTime()\n : lteOperator.$lte;\n match &&= value <= lteOperatorValue;\n // } else if (maybeOperator && '$autocomplete' in operator) {\n // TODO: regexp solution maybe?\n // match &&= false;\n } else {\n const eqValue = operator as typeof value;\n match &&= eqValue === value;\n }\n\n if (!match) {\n return false;\n }\n }\n\n return true;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { isValidElement } from 'react';
|
|
2
|
+
|
|
3
|
+
const isComponentType = (elementOrComponent) => {
|
|
4
|
+
return elementOrComponent === null
|
|
5
|
+
? false
|
|
6
|
+
: !isValidElement(elementOrComponent);
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export { isComponentType };
|
|
10
|
+
//# sourceMappingURL=isComponentType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"isComponentType.js","sources":["../../../../../../src/utilities/isComponentType.ts"],"sourcesContent":["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"],"names":[],"mappings":";;AAEO,MAAM,eAAe,GAAG,CAC7B,kBAA2D,KACjB;IAC1C,OAAO,kBAAkB,KAAK;AAC5B,UAAE;AACF,UAAE,CAAC,cAAc,CAAC,kBAAkB,CAAC;AACzC;;;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalizes a string for diacritic-insensitive comparison.
|
|
3
|
+
* E.g., "Éva" becomes "eva", allowing "eva" to match "Éva".
|
|
4
|
+
*/
|
|
5
|
+
const normalizeString = (value) => value
|
|
6
|
+
.normalize('NFD')
|
|
7
|
+
.replace(/\p{Diacritic}/gu, '')
|
|
8
|
+
.toLowerCase();
|
|
9
|
+
|
|
10
|
+
export { normalizeString };
|
|
11
|
+
//# sourceMappingURL=normalizeString.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizeString.js","sources":["../../../../../../src/utilities/normalizeString.ts"],"sourcesContent":["/**\n * Normalizes a string for diacritic-insensitive comparison.\n * E.g., \"Éva\" becomes \"eva\", allowing \"eva\" to match \"Éva\".\n */\nexport const normalizeString = (value: string) =>\n value\n .normalize('NFD')\n .replace(/\\p{Diacritic}/gu, '')\n .toLowerCase();\n"],"names":[],"mappings":"AAAA;;;AAGG;MACU,eAAe,GAAG,CAAC,KAAa,KAC3C;KACG,SAAS,CAAC,KAAK;AACf,KAAA,OAAO,CAAC,iBAAiB,EAAE,EAAE;AAC7B,KAAA,WAAW;;;;"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useEffect } from 'react';
|
|
3
|
+
import { CallingState } from '@stream-io/video-client';
|
|
4
|
+
import { useStreamVideoClient, useEffectEvent, useCallStateHooks, useCall } from '@stream-io/video-react-bindings';
|
|
5
|
+
import '../../core/components/Audio/Audio.js';
|
|
6
|
+
import '../../core/components/Audio/ParticipantsAudio.js';
|
|
7
|
+
import '../../core/components/ParticipantView/ParticipantViewContext.js';
|
|
8
|
+
import '../../components/Menu/MenuToggle.js';
|
|
9
|
+
import 'clsx';
|
|
10
|
+
import '../../core/components/ParticipantView/ParticipantView.js';
|
|
11
|
+
import '../../core/components/ParticipantView/DefaultParticipantViewUI.js';
|
|
12
|
+
import { StreamCall } from '../../core/components/StreamCall/StreamCall.js';
|
|
13
|
+
import '../../core/components/StreamVideo/StreamVideo.js';
|
|
14
|
+
import '../../core/components/Video/BaseVideo.js';
|
|
15
|
+
import '../../core/components/Video/Video.js';
|
|
16
|
+
import { LivestreamLayout, BackstageLayout } from '../../core/components/CallLayout/LivestreamLayout.js';
|
|
17
|
+
import '../../core/components/CallLayout/PaginatedGridLayout.js';
|
|
18
|
+
import '../../core/components/CallLayout/SpeakerLayout.js';
|
|
19
|
+
import '../../core/components/CallLayout/PipLayout/Pip.js';
|
|
20
|
+
import '../../core/components/CallLayout/PipLayout/Host.js';
|
|
21
|
+
import '../../core/components/CallLayout/PipLayout/Grid.js';
|
|
22
|
+
|
|
23
|
+
const LivestreamPlayer = (props) => {
|
|
24
|
+
const { callType, callId, children, ...restProps } = props;
|
|
25
|
+
const client = useStreamVideoClient();
|
|
26
|
+
const [call, setCall] = useState();
|
|
27
|
+
const onError = useEffectEvent(props.onError ?? (() => { }));
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
if (!client)
|
|
30
|
+
return;
|
|
31
|
+
const myCall = client.call(callType, callId);
|
|
32
|
+
setCall(myCall);
|
|
33
|
+
myCall.get().catch((e) => {
|
|
34
|
+
console.error('Failed to fetch call', e);
|
|
35
|
+
onError(e);
|
|
36
|
+
});
|
|
37
|
+
return () => {
|
|
38
|
+
myCall.leave().catch((e) => {
|
|
39
|
+
console.error('Failed to leave call', e);
|
|
40
|
+
});
|
|
41
|
+
setCall(undefined);
|
|
42
|
+
};
|
|
43
|
+
}, [callId, callType, client]);
|
|
44
|
+
if (!call) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
return (jsxs(StreamCall, { call: call, children: [jsx(LivestreamCall, { ...restProps }), children] }));
|
|
48
|
+
};
|
|
49
|
+
const LivestreamCall = (props) => {
|
|
50
|
+
const call = useLivestreamCall(props);
|
|
51
|
+
const { useIsCallLive } = useCallStateHooks();
|
|
52
|
+
const isLive = useIsCallLive();
|
|
53
|
+
if (!call)
|
|
54
|
+
return null;
|
|
55
|
+
if (isLive) {
|
|
56
|
+
return jsx(LivestreamLayout, { ...props.layoutProps });
|
|
57
|
+
}
|
|
58
|
+
return jsx(BackstageLayout, { ...props.backstageProps });
|
|
59
|
+
};
|
|
60
|
+
const useLivestreamCall = (props) => {
|
|
61
|
+
const call = useCall();
|
|
62
|
+
const { useIsCallLive, useOwnCapabilities } = useCallStateHooks();
|
|
63
|
+
const canJoinLive = useIsCallLive();
|
|
64
|
+
const canJoinEarly = useCanJoinEarly();
|
|
65
|
+
const canJoinBackstage = useOwnCapabilities()?.includes('join-backstage') ?? false;
|
|
66
|
+
const canJoinAsap = canJoinLive || canJoinEarly || canJoinBackstage;
|
|
67
|
+
const joinBehavior = props.joinBehavior ?? 'asap';
|
|
68
|
+
const canJoin = (joinBehavior === 'asap' && canJoinAsap) ||
|
|
69
|
+
(joinBehavior === 'live' && canJoinLive);
|
|
70
|
+
const onError = useEffectEvent(props.onError ?? (() => { }));
|
|
71
|
+
useEffect(() => {
|
|
72
|
+
if (call && call.state.callingState === CallingState.IDLE && canJoin) {
|
|
73
|
+
call.join().catch((e) => {
|
|
74
|
+
console.error('Failed to join call', e);
|
|
75
|
+
onError(e);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}, [call, canJoin]);
|
|
79
|
+
return call;
|
|
80
|
+
};
|
|
81
|
+
const useCanJoinEarly = () => {
|
|
82
|
+
const { useCallStartsAt, useCallSettings } = useCallStateHooks();
|
|
83
|
+
const startsAt = useCallStartsAt();
|
|
84
|
+
const settings = useCallSettings();
|
|
85
|
+
const joinAheadTimeSeconds = settings?.backstage.join_ahead_time_seconds;
|
|
86
|
+
const [canJoinEarly, setCanJoinEarly] = useState(() => checkCanJoinEarly(startsAt, joinAheadTimeSeconds));
|
|
87
|
+
useEffect(() => {
|
|
88
|
+
if (canJoinEarly)
|
|
89
|
+
return;
|
|
90
|
+
const handle = setInterval(() => {
|
|
91
|
+
setCanJoinEarly(checkCanJoinEarly(startsAt, joinAheadTimeSeconds));
|
|
92
|
+
}, 1000);
|
|
93
|
+
return () => clearInterval(handle);
|
|
94
|
+
}, [canJoinEarly, startsAt, joinAheadTimeSeconds]);
|
|
95
|
+
return canJoinEarly;
|
|
96
|
+
};
|
|
97
|
+
const checkCanJoinEarly = (startsAt, joinAheadTimeSeconds) => {
|
|
98
|
+
if (!startsAt) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
return Date.now() >= +startsAt - (joinAheadTimeSeconds ?? 0) * 1000;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
export { LivestreamPlayer };
|
|
105
|
+
//# sourceMappingURL=LivestreamPlayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LivestreamPlayer.js","sources":["../../../../../../../src/wrappers/LivestreamPlayer/LivestreamPlayer.tsx"],"sourcesContent":["import { PropsWithChildren, useEffect, useState } from 'react';\nimport { Call, CallingState } from '@stream-io/video-client';\nimport {\n useCall,\n useCallStateHooks,\n useEffectEvent,\n useStreamVideoClient,\n} from '@stream-io/video-react-bindings';\nimport {\n BackstageLayout,\n BackstageLayoutProps,\n LivestreamLayout,\n LivestreamLayoutProps,\n StreamCall,\n} from '../../core';\n\nexport type LivestreamPlayerProps = {\n /**\n * The call type. Usually `livestream`.\n */\n callType: string;\n /**\n * The call ID.\n */\n callId: string;\n /**\n * Determines when the viewer joins the call.\n *\n * `\"asap\"` behavior means joining the call as soon as it is possible\n * (either the `join_ahead_time_seconds` setting allows it, or the user\n * has the capability to join backstage).\n *\n * `\"live\"` behavior means joining the call when it goes live.\n *\n * @default \"asap\"\n */\n joinBehavior?: 'asap' | 'live';\n /**\n * The props for the {@link LivestreamLayout} component.\n */\n layoutProps?: LivestreamLayoutProps;\n /**\n * The props for the {@link BackstageLayout} component.\n */\n backstageProps?: BackstageLayoutProps;\n /**\n * Callback to handle errors while fetching or joining livestream.\n */\n onError?: (error: any) => void;\n};\n\nexport const LivestreamPlayer = (\n props: PropsWithChildren<LivestreamPlayerProps>,\n) => {\n const { callType, callId, children, ...restProps } = props;\n const client = useStreamVideoClient();\n const [call, setCall] = useState<Call>();\n const onError = useEffectEvent(props.onError ?? (() => {}));\n\n useEffect(() => {\n if (!client) return;\n const myCall = client.call(callType, callId);\n setCall(myCall);\n myCall.get().catch((e) => {\n console.error('Failed to fetch call', e);\n onError(e);\n });\n return () => {\n myCall.leave().catch((e) => {\n console.error('Failed to leave call', e);\n });\n setCall(undefined);\n };\n }, [callId, callType, client]);\n\n if (!call) {\n return null;\n }\n\n return (\n <StreamCall call={call}>\n <LivestreamCall {...restProps} />\n {children}\n </StreamCall>\n );\n};\n\nconst LivestreamCall = (props: {\n joinBehavior?: 'asap' | 'live';\n layoutProps?: LivestreamLayoutProps;\n backstageProps?: BackstageLayoutProps;\n onError?: (error: any) => void;\n}) => {\n const call = useLivestreamCall(props);\n const { useIsCallLive } = useCallStateHooks();\n const isLive = useIsCallLive();\n\n if (!call) return null;\n\n if (isLive) {\n return <LivestreamLayout {...props.layoutProps} />;\n }\n\n return <BackstageLayout {...props.backstageProps} />;\n};\n\nconst useLivestreamCall = (props: {\n joinBehavior?: 'asap' | 'live';\n onError?: (error: any) => void;\n}) => {\n const call = useCall();\n const { useIsCallLive, useOwnCapabilities } = useCallStateHooks();\n const canJoinLive = useIsCallLive();\n const canJoinEarly = useCanJoinEarly();\n const canJoinBackstage =\n useOwnCapabilities()?.includes('join-backstage') ?? false;\n const canJoinAsap = canJoinLive || canJoinEarly || canJoinBackstage;\n const joinBehavior = props.joinBehavior ?? 'asap';\n const canJoin =\n (joinBehavior === 'asap' && canJoinAsap) ||\n (joinBehavior === 'live' && canJoinLive);\n const onError = useEffectEvent(props.onError ?? (() => {}));\n\n useEffect(() => {\n if (call && call.state.callingState === CallingState.IDLE && canJoin) {\n call.join().catch((e) => {\n console.error('Failed to join call', e);\n onError(e);\n });\n }\n }, [call, canJoin]);\n\n return call;\n};\n\nconst useCanJoinEarly = () => {\n const { useCallStartsAt, useCallSettings } = useCallStateHooks();\n const startsAt = useCallStartsAt();\n const settings = useCallSettings();\n const joinAheadTimeSeconds = settings?.backstage.join_ahead_time_seconds;\n const [canJoinEarly, setCanJoinEarly] = useState(() =>\n checkCanJoinEarly(startsAt, joinAheadTimeSeconds),\n );\n\n useEffect(() => {\n if (canJoinEarly) return;\n const handle = setInterval(() => {\n setCanJoinEarly(checkCanJoinEarly(startsAt, joinAheadTimeSeconds));\n }, 1000);\n\n return () => clearInterval(handle);\n }, [canJoinEarly, startsAt, joinAheadTimeSeconds]);\n\n return canJoinEarly;\n};\n\nconst checkCanJoinEarly = (\n startsAt: Date | undefined,\n joinAheadTimeSeconds: number | undefined,\n) => {\n if (!startsAt) {\n return false;\n }\n\n return Date.now() >= +startsAt - (joinAheadTimeSeconds ?? 0) * 1000;\n};\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|