@stream-io/video-react-sdk 2.0.0-beta.0 → 2.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/dist/css/embedded.css +2592 -1498
- package/dist/css/embedded.css.map +1 -1
- package/dist/css/styles.css +2388 -1222
- package/dist/css/styles.css.map +1 -1
- package/dist/embedded.cjs.js +535 -476
- package/dist/embedded.cjs.js.map +1 -1
- package/dist/esm/index.js +10 -7
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/src/components/Avatar/Avatar.js +13 -5
- package/dist/esm/src/components/Avatar/Avatar.js.map +1 -1
- package/dist/esm/src/components/Badge/Badge.js +21 -0
- package/dist/esm/src/components/Badge/Badge.js.map +1 -0
- package/dist/esm/src/components/Button/Button.js +10 -0
- package/dist/esm/src/components/Button/Button.js.map +1 -0
- package/dist/esm/src/components/Button/CompositeButton.js +10 -17
- package/dist/esm/src/components/Button/CompositeButton.js.map +1 -1
- package/dist/esm/src/components/Button/IconButton.js +3 -9
- package/dist/esm/src/components/Button/IconButton.js.map +1 -1
- package/dist/esm/src/components/CallControls/AcceptCallButton.js +3 -2
- package/dist/esm/src/components/CallControls/AcceptCallButton.js.map +1 -1
- package/dist/esm/src/components/CallControls/CallControls.js +3 -0
- package/dist/esm/src/components/CallControls/CallControls.js.map +1 -1
- package/dist/esm/src/components/CallControls/CancelCallButton.js +11 -6
- package/dist/esm/src/components/CallControls/CancelCallButton.js.map +1 -1
- package/dist/esm/src/components/CallControls/ReactionsButton.js +7 -3
- package/dist/esm/src/components/CallControls/ReactionsButton.js.map +1 -1
- package/dist/esm/src/components/CallControls/RecordCallButton.js +17 -11
- package/dist/esm/src/components/CallControls/RecordCallButton.js.map +1 -1
- package/dist/esm/src/components/CallControls/ScreenShareButton.js +11 -4
- package/dist/esm/src/components/CallControls/ScreenShareButton.js.map +1 -1
- package/dist/esm/src/components/CallControls/ToggleAudioButton.js +28 -17
- package/dist/esm/src/components/CallControls/ToggleAudioButton.js.map +1 -1
- package/dist/esm/src/components/CallControls/ToggleAudioOutputButton.js +9 -4
- package/dist/esm/src/components/CallControls/ToggleAudioOutputButton.js.map +1 -1
- package/dist/esm/src/components/CallControls/ToggleVideoButton.js +32 -23
- package/dist/esm/src/components/CallControls/ToggleVideoButton.js.map +1 -1
- package/dist/esm/src/components/CallParticipantsList/BlockedUserListing.js +3 -3
- package/dist/esm/src/components/CallParticipantsList/BlockedUserListing.js.map +1 -1
- package/dist/esm/src/components/CallParticipantsList/CallParticipantListHeader.js +8 -3
- package/dist/esm/src/components/CallParticipantsList/CallParticipantListHeader.js.map +1 -1
- package/dist/esm/src/components/CallParticipantsList/CallParticipantListingItem.js +20 -7
- package/dist/esm/src/components/CallParticipantsList/CallParticipantListingItem.js.map +1 -1
- package/dist/esm/src/components/CallParticipantsList/CallParticipantsList.js +8 -5
- package/dist/esm/src/components/CallParticipantsList/CallParticipantsList.js.map +1 -1
- package/dist/esm/src/components/CallParticipantsList/EmptyParticipantSearchList.js +5 -2
- package/dist/esm/src/components/CallParticipantsList/EmptyParticipantSearchList.js.map +1 -1
- package/dist/esm/src/components/CallRecordingList/CallRecordingListHeader.js +7 -3
- package/dist/esm/src/components/CallRecordingList/CallRecordingListHeader.js.map +1 -1
- package/dist/esm/src/components/DeviceSettings/DeviceAudioPreviewItem.js +1 -1
- package/dist/esm/src/components/DeviceSettings/DeviceAudioPreviewItem.js.map +1 -1
- package/dist/esm/src/components/DeviceSettings/DeviceSelector.js +1 -1
- package/dist/esm/src/components/DeviceSettings/DeviceSelector.js.map +1 -1
- package/dist/esm/src/components/DeviceSettings/DeviceSelectorAudio.js +2 -2
- package/dist/esm/src/components/DeviceSettings/DeviceSelectorAudio.js.map +1 -1
- package/dist/esm/src/components/DeviceSettings/DeviceSettings.js +8 -5
- package/dist/esm/src/components/DeviceSettings/DeviceSettings.js.map +1 -1
- package/dist/esm/src/components/DeviceSettings/SpeakerTest.js +10 -4
- package/dist/esm/src/components/DeviceSettings/SpeakerTest.js.map +1 -1
- package/dist/esm/src/components/DropdownSelect/DropdownSelect.js +1 -1
- package/dist/esm/src/components/DropdownSelect/DropdownSelect.js.map +1 -1
- package/dist/esm/src/components/Menu/GenericMenu.js +2 -1
- package/dist/esm/src/components/Menu/GenericMenu.js.map +1 -1
- package/dist/esm/src/components/Menu/MenuToggle.js +3 -0
- package/dist/esm/src/components/Menu/MenuToggle.js.map +1 -1
- package/dist/esm/src/components/Notification/MicCaptureErrorNotification.js +6 -3
- package/dist/esm/src/components/Notification/MicCaptureErrorNotification.js.map +1 -1
- package/dist/esm/src/components/Notification/Notification.js +12 -3
- package/dist/esm/src/components/Notification/Notification.js.map +1 -1
- package/dist/esm/src/components/Notification/PermissionNotification.js +2 -2
- package/dist/esm/src/components/Notification/PermissionNotification.js.map +1 -1
- package/dist/esm/src/components/Notification/RecordingInProgressNotification.js +7 -3
- package/dist/esm/src/components/Notification/RecordingInProgressNotification.js.map +1 -1
- package/dist/esm/src/components/Notification/SpeakingWhileMutedNotification.js +7 -2
- package/dist/esm/src/components/Notification/SpeakingWhileMutedNotification.js.map +1 -1
- package/dist/esm/src/components/Permissions/PermissionRequests.js +13 -12
- package/dist/esm/src/components/Permissions/PermissionRequests.js.map +1 -1
- package/dist/esm/src/components/RingingCall/RingingCall.js +38 -14
- package/dist/esm/src/components/RingingCall/RingingCall.js.map +1 -1
- package/dist/esm/src/components/RingingCall/RingingCallControls.js +7 -3
- package/dist/esm/src/components/RingingCall/RingingCallControls.js.map +1 -1
- package/dist/esm/src/components/Search/SearchInput.js +1 -1
- package/dist/esm/src/components/Search/SearchInput.js.map +1 -1
- package/dist/esm/src/components/StreamTheme/StreamTheme.js +2 -2
- package/dist/esm/src/components/StreamTheme/StreamTheme.js.map +1 -1
- package/dist/esm/src/components/Tooltip/Tooltip.js +8 -8
- package/dist/esm/src/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/esm/src/components/VideoPreview/VideoPreview.js +36 -5
- package/dist/esm/src/components/VideoPreview/VideoPreview.js.map +1 -1
- package/dist/esm/src/core/components/CallLayout/LivestreamLayout.js +38 -12
- package/dist/esm/src/core/components/CallLayout/LivestreamLayout.js.map +1 -1
- package/dist/esm/src/core/components/CallLayout/PaginatedGridLayout.js +9 -5
- package/dist/esm/src/core/components/CallLayout/PaginatedGridLayout.js.map +1 -1
- package/dist/esm/src/core/components/CallLayout/PipLayout/Grid.js +9 -6
- package/dist/esm/src/core/components/CallLayout/PipLayout/Grid.js.map +1 -1
- package/dist/esm/src/core/components/CallLayout/PipLayout/Pip.js +9 -6
- package/dist/esm/src/core/components/CallLayout/PipLayout/Pip.js.map +1 -1
- package/dist/esm/src/core/components/CallLayout/SpeakerLayout.js +11 -6
- package/dist/esm/src/core/components/CallLayout/SpeakerLayout.js.map +1 -1
- package/dist/esm/src/core/components/ParticipantView/ConnectionQualityIndicator.js +25 -0
- package/dist/esm/src/core/components/ParticipantView/ConnectionQualityIndicator.js.map +1 -0
- package/dist/esm/src/core/components/ParticipantView/DefaultParticipantViewUI.js +17 -13
- package/dist/esm/src/core/components/ParticipantView/DefaultParticipantViewUI.js.map +1 -1
- package/dist/esm/src/core/components/ParticipantView/ParticipantActionsContextMenu.js +13 -8
- package/dist/esm/src/core/components/ParticipantView/ParticipantActionsContextMenu.js.map +1 -1
- package/dist/esm/src/core/components/StreamVideo/StreamVideo.js +24 -3
- package/dist/esm/src/core/components/StreamVideo/StreamVideo.js.map +1 -1
- package/dist/esm/src/core/components/Video/BaseVideoPlaceholder.js +3 -13
- package/dist/esm/src/core/components/Video/BaseVideoPlaceholder.js.map +1 -1
- package/dist/esm/src/core/components/Video/DefaultPictureInPicturePlaceholder.js +4 -2
- package/dist/esm/src/core/components/Video/DefaultPictureInPicturePlaceholder.js.map +1 -1
- package/dist/esm/src/core/components/Video/DefaultVideoPlaceholder.js +4 -2
- package/dist/esm/src/core/components/Video/DefaultVideoPlaceholder.js.map +1 -1
- package/dist/esm/src/embedded/EmbeddedClientProvider.js +7 -4
- package/dist/esm/src/embedded/EmbeddedClientProvider.js.map +1 -1
- package/dist/esm/src/embedded/call/CallControls.js +10 -6
- package/dist/esm/src/embedded/call/CallControls.js.map +1 -1
- package/dist/esm/src/embedded/call/CallHeader.js +10 -7
- package/dist/esm/src/embedded/call/CallHeader.js.map +1 -1
- package/dist/esm/src/embedded/call/CallLayout.js +8 -5
- package/dist/esm/src/embedded/call/CallLayout.js.map +1 -1
- package/dist/esm/src/embedded/call/CallStateRouter.js +7 -4
- package/dist/esm/src/embedded/call/CallStateRouter.js.map +1 -1
- package/dist/esm/src/embedded/hooks/useLayout.js +7 -4
- package/dist/esm/src/embedded/hooks/useLayout.js.map +1 -1
- package/dist/esm/src/embedded/livestream/host/HostLayout.js +12 -7
- package/dist/esm/src/embedded/livestream/host/HostLayout.js.map +1 -1
- package/dist/esm/src/embedded/livestream/host/HostStateRouter.js +12 -7
- package/dist/esm/src/embedded/livestream/host/HostStateRouter.js.map +1 -1
- package/dist/esm/src/embedded/livestream/viewer/ViewerLayout.js +9 -6
- package/dist/esm/src/embedded/livestream/viewer/ViewerLayout.js.map +1 -1
- package/dist/esm/src/embedded/livestream/viewer/ViewerLobby.js +12 -9
- package/dist/esm/src/embedded/livestream/viewer/ViewerLobby.js.map +1 -1
- package/dist/esm/src/embedded/livestream/viewer/ViewerStateRouter.js +7 -4
- package/dist/esm/src/embedded/livestream/viewer/ViewerStateRouter.js.map +1 -1
- package/dist/esm/src/embedded/shared/BlurToggleButton/BlurToggleButton.js +13 -9
- package/dist/esm/src/embedded/shared/BlurToggleButton/BlurToggleButton.js.map +1 -1
- package/dist/esm/src/embedded/shared/CallDuration/CallDuration.js +40 -0
- package/dist/esm/src/embedded/shared/CallDuration/CallDuration.js.map +1 -0
- package/dist/esm/src/embedded/shared/CallFeedback/CallEndedScreen.js +8 -6
- package/dist/esm/src/embedded/shared/CallFeedback/CallEndedScreen.js.map +1 -1
- package/dist/esm/src/embedded/shared/CallFeedback/RatingScreen.js +26 -2
- package/dist/esm/src/embedded/shared/CallFeedback/RatingScreen.js.map +1 -1
- package/dist/esm/src/embedded/shared/CallFeedback/StarRating.js +12 -6
- package/dist/esm/src/embedded/shared/CallFeedback/StarRating.js.map +1 -1
- package/dist/esm/src/embedded/shared/CallFeedback/ThankYouScreen.js +8 -6
- package/dist/esm/src/embedded/shared/CallFeedback/ThankYouScreen.js.map +1 -1
- package/dist/esm/src/embedded/shared/ConnectionNotification/ConnectionNotification.js +15 -14
- package/dist/esm/src/embedded/shared/ConnectionNotification/ConnectionNotification.js.map +1 -1
- package/dist/esm/src/embedded/shared/EmbeddedParticipantViewUI/EmbeddedParticipantViewUI.js +4 -0
- package/dist/esm/src/embedded/shared/EmbeddedParticipantViewUI/EmbeddedParticipantViewUI.js.map +1 -1
- package/dist/esm/src/embedded/shared/JoinError/JoinError.js +8 -6
- package/dist/esm/src/embedded/shared/JoinError/JoinError.js.map +1 -1
- package/dist/esm/src/embedded/shared/Lobby/DeviceControls.js +11 -7
- package/dist/esm/src/embedded/shared/Lobby/DeviceControls.js.map +1 -1
- package/dist/esm/src/embedded/shared/Lobby/DisabledDeviceButton.js +6 -4
- package/dist/esm/src/embedded/shared/Lobby/DisabledDeviceButton.js.map +1 -1
- package/dist/esm/src/embedded/shared/Lobby/Lobby.js +10 -9
- package/dist/esm/src/embedded/shared/Lobby/Lobby.js.map +1 -1
- package/dist/esm/src/embedded/shared/Lobby/ToggleCameraButton.js +6 -4
- package/dist/esm/src/embedded/shared/Lobby/ToggleCameraButton.js.map +1 -1
- package/dist/esm/src/embedded/shared/Lobby/ToggleMicButton.js +8 -6
- package/dist/esm/src/embedded/shared/Lobby/ToggleMicButton.js.map +1 -1
- package/dist/esm/src/embedded/shared/Lobby/VideoPreviewFallbacks.js +11 -9
- package/dist/esm/src/embedded/shared/Lobby/VideoPreviewFallbacks.js.map +1 -1
- package/dist/esm/src/embedded/shared/ViewersCount/ViewersCount.js +6 -4
- package/dist/esm/src/embedded/shared/ViewersCount/ViewersCount.js.map +1 -1
- package/dist/esm/src/hooks/useDeviceList.js +4 -2
- package/dist/esm/src/hooks/useDeviceList.js.map +1 -1
- package/dist/esm/src/i18n/Streami18n.js +58 -0
- package/dist/esm/src/i18n/Streami18n.js.map +1 -0
- package/dist/esm/src/i18n/TranslationContext.js +42 -0
- package/dist/esm/src/i18n/TranslationContext.js.map +1 -0
- package/dist/esm/src/i18n/runtimeDefaults.js +20 -0
- package/dist/esm/src/i18n/runtimeDefaults.js.map +1 -0
- package/dist/esm/src/i18n/useStreami18n.js +49 -0
- package/dist/esm/src/i18n/useStreami18n.js.map +1 -0
- package/dist/esm/src/wrappers/LivestreamPlayer/LivestreamPlayer.js +4 -0
- package/dist/esm/src/wrappers/LivestreamPlayer/LivestreamPlayer.js.map +1 -1
- package/dist/index.cjs.js +559 -623
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/src/components/Avatar/Avatar.d.ts +9 -4
- package/dist/src/components/Badge/Badge.d.ts +23 -0
- package/dist/src/components/Badge/index.d.ts +1 -0
- package/dist/src/components/Button/Button.d.ts +16 -0
- package/dist/src/components/Button/CompositeButton.d.ts +6 -3
- package/dist/src/components/Button/IconButton.d.ts +7 -7
- package/dist/src/components/Button/index.d.ts +2 -2
- package/dist/src/components/CallControls/CancelCallButton.d.ts +3 -1
- package/dist/src/components/CallControls/ToggleAudioButton.d.ts +3 -3
- package/dist/src/components/CallControls/ToggleAudioOutputButton.d.ts +2 -2
- package/dist/src/components/CallControls/ToggleVideoButton.d.ts +3 -3
- package/dist/src/components/CallControls/index.d.ts +0 -1
- package/dist/src/components/Menu/GenericMenu.d.ts +1 -0
- package/dist/src/components/Notification/Notification.d.ts +2 -1
- package/dist/src/components/StreamTheme/StreamTheme.d.ts +2 -1
- package/dist/src/components/VideoPreview/VideoPreview.d.ts +6 -1
- package/dist/src/components/index.d.ts +1 -1
- package/dist/src/core/components/ParticipantView/ConnectionQualityIndicator.d.ts +10 -0
- package/dist/src/core/components/ParticipantView/index.d.ts +1 -0
- package/dist/src/core/components/StreamVideo/StreamVideo.d.ts +18 -2
- package/dist/src/embedded/shared/CallDuration/CallDuration.d.ts +9 -0
- package/dist/src/embedded/shared/index.d.ts +1 -0
- package/dist/src/i18n/Streami18n.d.ts +56 -0
- package/dist/src/i18n/TranslationContext.d.ts +30 -0
- package/dist/src/i18n/index.d.ts +16 -0
- package/dist/src/i18n/keys.d.ts +164 -0
- package/dist/src/i18n/runtimeDefaults.d.ts +17 -0
- package/dist/src/i18n/types.d.ts +45 -0
- package/dist/src/i18n/useStreami18n.d.ts +19 -0
- package/index.ts +1 -1
- package/package.json +18 -13
- package/src/components/Avatar/Avatar.tsx +53 -19
- package/src/components/Badge/Badge.tsx +48 -0
- package/src/components/Badge/index.ts +1 -0
- package/src/components/Button/Button.tsx +49 -0
- package/src/components/Button/CompositeButton.tsx +82 -73
- package/src/components/Button/IconButton.tsx +19 -29
- package/src/components/Button/index.ts +2 -2
- package/src/components/CallControls/AcceptCallButton.tsx +3 -1
- package/src/components/CallControls/CancelCallButton.tsx +32 -24
- package/src/components/CallControls/ReactionsButton.tsx +7 -3
- package/src/components/CallControls/RecordCallButton.tsx +50 -23
- package/src/components/CallControls/ScreenShareButton.tsx +27 -6
- package/src/components/CallControls/ToggleAudioButton.tsx +62 -61
- package/src/components/CallControls/ToggleAudioOutputButton.tsx +7 -4
- package/src/components/CallControls/ToggleVideoButton.tsx +66 -66
- package/src/components/CallControls/index.ts +0 -1
- package/src/components/CallParticipantsList/BlockedUserListing.tsx +9 -2
- package/src/components/CallParticipantsList/CallParticipantListHeader.tsx +10 -3
- package/src/components/CallParticipantsList/CallParticipantListingItem.tsx +33 -8
- package/src/components/CallParticipantsList/CallParticipantsList.tsx +21 -5
- package/src/components/CallParticipantsList/EmptyParticipantSearchList.tsx +2 -2
- package/src/components/CallRecordingList/CallRecordingListHeader.tsx +11 -3
- package/src/components/DeviceSettings/DeviceAudioPreviewItem.tsx +3 -1
- package/src/components/DeviceSettings/DeviceSelector.tsx +1 -1
- package/src/components/DeviceSettings/DeviceSelectorAudio.tsx +2 -7
- package/src/components/DeviceSettings/DeviceSettings.tsx +14 -5
- package/src/components/DeviceSettings/SpeakerTest.tsx +7 -2
- package/src/components/DropdownSelect/DropdownSelect.tsx +3 -1
- package/src/components/Menu/GenericMenu.tsx +4 -0
- package/src/components/Notification/MicCaptureErrorNotification.tsx +7 -2
- package/src/components/Notification/Notification.tsx +20 -4
- package/src/components/Notification/PermissionNotification.tsx +2 -0
- package/src/components/Notification/RecordingInProgressNotification.tsx +5 -6
- package/src/components/Notification/SpeakingWhileMutedNotification.tsx +8 -2
- package/src/components/Permissions/PermissionRequests.tsx +50 -43
- package/src/components/RingingCall/RingingCall.tsx +40 -14
- package/src/components/RingingCall/RingingCallControls.tsx +2 -1
- package/src/components/Search/SearchInput.tsx +2 -3
- package/src/components/StreamTheme/StreamTheme.tsx +3 -1
- package/src/components/Tooltip/Tooltip.tsx +3 -10
- package/src/components/VideoPreview/VideoPreview.tsx +50 -5
- package/src/components/index.ts +1 -1
- package/src/core/components/CallLayout/LivestreamLayout.tsx +48 -18
- package/src/core/components/CallLayout/PaginatedGridLayout.tsx +14 -0
- package/src/core/components/CallLayout/PipLayout/Grid.tsx +10 -2
- package/src/core/components/CallLayout/PipLayout/Pip.tsx +6 -2
- package/src/core/components/CallLayout/SpeakerLayout.tsx +27 -0
- package/src/core/components/CallLayout/partcipantFilter.test.ts +38 -31
- package/src/core/components/ParticipantView/ConnectionQualityIndicator.tsx +54 -0
- package/src/core/components/ParticipantView/DefaultParticipantViewUI.tsx +60 -27
- package/src/core/components/ParticipantView/ParticipantActionsContextMenu.tsx +63 -22
- package/src/core/components/ParticipantView/index.ts +1 -0
- package/src/core/components/StreamVideo/StreamVideo.tsx +39 -4
- package/src/core/components/Video/BaseVideoPlaceholder.tsx +13 -30
- package/src/core/components/Video/DefaultPictureInPicturePlaceholder.tsx +5 -2
- package/src/core/components/Video/DefaultVideoPlaceholder.tsx +2 -2
- package/src/embedded/call/CallControls.tsx +9 -18
- package/src/embedded/call/CallHeader.tsx +3 -12
- package/src/embedded/call/CallLayout.tsx +1 -1
- package/src/embedded/livestream/host/HostLayout.tsx +26 -20
- package/src/embedded/livestream/host/HostStateRouter.tsx +12 -8
- package/src/embedded/livestream/viewer/ViewerLayout.tsx +8 -11
- package/src/embedded/livestream/viewer/ViewerLobby.tsx +31 -15
- package/src/embedded/shared/BlurToggleButton/BlurToggleButton.tsx +18 -12
- package/src/embedded/shared/CallDuration/CallDuration.tsx +32 -0
- package/src/embedded/shared/CallFeedback/CallEndedScreen.tsx +27 -13
- package/src/embedded/shared/CallFeedback/RatingScreen.tsx +20 -12
- package/src/embedded/shared/CallFeedback/StarRating.tsx +10 -3
- package/src/embedded/shared/CallFeedback/ThankYouScreen.tsx +6 -3
- package/src/embedded/shared/ConnectionNotification/ConnectionNotification.tsx +21 -14
- package/src/embedded/shared/JoinError/JoinError.tsx +7 -6
- package/src/embedded/shared/Lobby/DeviceControls.tsx +25 -3
- package/src/embedded/shared/Lobby/Lobby.tsx +19 -22
- package/src/embedded/shared/Lobby/ToggleMicButton.tsx +10 -3
- package/src/embedded/shared/Lobby/VideoPreviewFallbacks.tsx +4 -2
- package/src/embedded/shared/index.ts +1 -0
- package/src/hooks/useDeviceList.tsx +2 -2
- package/src/i18n/Streami18n.ts +67 -0
- package/src/i18n/TranslationContext.tsx +55 -0
- package/src/i18n/index.ts +22 -0
- package/src/i18n/keys.ts +169 -0
- package/src/i18n/runtimeDefaults.ts +17 -0
- package/src/i18n/types.ts +78 -0
- package/src/i18n/useStreami18n.ts +66 -0
- package/src/utilities/filter.test.ts +132 -124
- package/src/utilities/normalizeString.test.ts +50 -48
- package/dist/embedded-CallStatsLatencyChart-CpL1M_s0.cjs.js +0 -59
- package/dist/embedded-CallStatsLatencyChart-CpL1M_s0.cjs.js.map +0 -1
- package/dist/esm/src/components/Button/TextButton.js +0 -8
- package/dist/esm/src/components/Button/TextButton.js.map +0 -1
- package/dist/esm/src/components/CallControls/CallStatsButton.js +0 -18
- package/dist/esm/src/components/CallControls/CallStatsButton.js.map +0 -1
- package/dist/esm/src/components/CallStats/CallStats.js +0 -180
- package/dist/esm/src/components/CallStats/CallStats.js.map +0 -1
- package/dist/esm/src/components/CallStats/CallStatsLatencyChart.js +0 -57
- package/dist/esm/src/components/CallStats/CallStatsLatencyChart.js.map +0 -1
- package/dist/esm/src/translations/en.json.js +0 -177
- package/dist/esm/src/translations/en.json.js.map +0 -1
- package/dist/esm/src/translations/index.js +0 -6
- package/dist/esm/src/translations/index.js.map +0 -1
- package/dist/latency-chart-CpL1M_s0.cjs.js +0 -59
- package/dist/latency-chart-CpL1M_s0.cjs.js.map +0 -1
- package/dist/src/components/Button/TextButton.d.ts +0 -2
- package/dist/src/components/CallControls/CallStatsButton.d.ts +0 -4
- package/dist/src/components/CallStats/CallStats.d.ts +0 -22
- package/dist/src/components/CallStats/CallStatsLatencyChart.d.ts +0 -7
- package/dist/src/components/CallStats/index.d.ts +0 -1
- package/dist/src/translations/index.d.ts +0 -146
- package/src/components/Button/TextButton.tsx +0 -12
- package/src/components/CallControls/CallStatsButton.tsx +0 -37
- package/src/components/CallStats/CallStats.tsx +0 -439
- package/src/components/CallStats/CallStatsLatencyChart.tsx +0 -76
- package/src/components/CallStats/index.ts +0 -1
- package/src/translations/en.json +0 -154
- package/src/translations/index.ts +0 -3
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Streami18nState as CoreStreami18nState, LooseTranslationDictionaryOf, RelativeTimeCatalog, StreamTFunctionFor, TranslationDictionaryOf, TranslationKeyOf } from '@stream-io/i18n';
|
|
2
|
+
import type { TranslationCatalog as GeneratedCatalog } from './keys';
|
|
3
|
+
/**
|
|
4
|
+
* The SDK's i18n types, instantiated from the generic helpers in `@stream-io/i18n`.
|
|
5
|
+
*
|
|
6
|
+
* The derivations live in core so both video SDKs (and Chat) share one implementation; the *catalog*
|
|
7
|
+
* stays here, because it is generated from this package's own `t()` call sites. That split is why
|
|
8
|
+
* core's helpers are generic over the catalog rather than driven by module augmentation — two
|
|
9
|
+
* catalogs have to be able to coexist in one TypeScript program, which a monorepo typechecking the
|
|
10
|
+
* web and React Native SDKs in one pass does.
|
|
11
|
+
*
|
|
12
|
+
* `relativeTime.*` is intersected in because it is core's copy, not ours: `timestampFormatter`
|
|
13
|
+
* renders "Today" / "3d ago" through `t()`, and without these keys in the catalog an integrator
|
|
14
|
+
* could not type a dictionary that translates them.
|
|
15
|
+
*/
|
|
16
|
+
export type TranslationCatalog = GeneratedCatalog & RelativeTimeCatalog;
|
|
17
|
+
/**
|
|
18
|
+
* Keys resolved from bundled data rather than from an inline `defaultValue`.
|
|
19
|
+
*
|
|
20
|
+
* `never`, because `runtimeDefaults.ts` is empty — every key this SDK uses is written literally
|
|
21
|
+
* with its English copy at the call site. `timestamp.*` / `duration.*` are matched by prefix inside
|
|
22
|
+
* core and need no entry here.
|
|
23
|
+
*
|
|
24
|
+
* **It must never become `string`.** `string` collapses the prose overload in `StreamTFunctionFor`,
|
|
25
|
+
* which silently disables all key checking: every `t('typo.key', 'copy')` would compile. Widen it
|
|
26
|
+
* only to a literal prefix template (`` `foo.${string}` ``) when a real bundled key appears.
|
|
27
|
+
*/
|
|
28
|
+
export type BundledKey = never;
|
|
29
|
+
export type TranslationKey = TranslationKeyOf<TranslationCatalog>;
|
|
30
|
+
export type TranslationDictionary = TranslationDictionaryOf<TranslationCatalog>;
|
|
31
|
+
export type LooseTranslationDictionary = LooseTranslationDictionaryOf<TranslationCatalog>;
|
|
32
|
+
export type StreamTFunction = StreamTFunctionFor<TranslationCatalog, BundledKey>;
|
|
33
|
+
/**
|
|
34
|
+
* The value held by `Streami18n.state`, parameterized for this SDK's catalog.
|
|
35
|
+
*
|
|
36
|
+
* Exported because `state` is public: a consumer subscribing to it needs to name the type for a
|
|
37
|
+
* module-scope selector. Core's default-parameterized `Streami18nState` is not a substitute — `t` is
|
|
38
|
+
* contravariant in its key parameter, so that one is not assignable to this.
|
|
39
|
+
*/
|
|
40
|
+
export type Streami18nState = CoreStreami18nState<TranslationCatalog, BundledKey>;
|
|
41
|
+
/**
|
|
42
|
+
* Re-exported so an integrator can type a formatter, a locale config or a date parser without
|
|
43
|
+
* taking a direct dependency on `@stream-io/i18n`.
|
|
44
|
+
*/
|
|
45
|
+
export type { CustomFormatters, DateTimeParserModule, DayjsLocaleConfig, DurationFormatterOptions, DynamicTranslationKey, FormatterFactory, LooseTranslateFunction, PredefinedFormatters, TDateTimeParser, TDateTimeParserInput, TDateTimeParserOutput, TimestampFormatterOptions, } from '@stream-io/i18n';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Streami18n } from './Streami18n';
|
|
2
|
+
import type { TranslationContextValue } from './TranslationContext';
|
|
3
|
+
import type { LooseTranslationDictionary } from './types';
|
|
4
|
+
export type UseStreami18nParams = {
|
|
5
|
+
/** An instance the integrator configured. One is created when absent. */
|
|
6
|
+
i18nInstance?: Streami18n;
|
|
7
|
+
/** The language the SDK's copy renders in. Changing it switches languages in place. */
|
|
8
|
+
language?: string;
|
|
9
|
+
/** Dictionaries to register, keyed by language code. Partial dictionaries are safe. */
|
|
10
|
+
translations?: Record<string, LooseTranslationDictionary>;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Resolves the translation context value: creates or adopts a {@link Streami18n} instance,
|
|
14
|
+
* registers the supplied dictionaries, initializes it and keeps `t` fresh across language changes.
|
|
15
|
+
*
|
|
16
|
+
* `init()` and the store subscription belong to `useStreami18nState` in `@stream-io/i18n/react`,
|
|
17
|
+
* shared with the React Native SDK.
|
|
18
|
+
*/
|
|
19
|
+
export declare const useStreami18n: ({ i18nInstance, language, translations, }: UseStreami18nParams) => TranslationContextValue;
|
package/index.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stream-io/video-react-sdk",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.1",
|
|
4
4
|
"main": "./dist/index.cjs.js",
|
|
5
5
|
"module": "./dist/esm/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -21,8 +21,13 @@
|
|
|
21
21
|
"scripts": {
|
|
22
22
|
"clean": "rimraf dist",
|
|
23
23
|
"start": "rollup -c -w",
|
|
24
|
-
"build": "rimraf dist && NODE_ENV=production rollup -c && yarn copy-css",
|
|
25
|
-
"copy-css": "cp -R ../../node_modules/@stream-io/video-styling/dist/* dist/"
|
|
24
|
+
"build": "rimraf dist && yarn build-translations && NODE_ENV=production rollup -c && yarn copy-css",
|
|
25
|
+
"copy-css": "cp -R ../../node_modules/@stream-io/video-styling/dist/* dist/",
|
|
26
|
+
"build-translations": "node scripts/generate-i18n-keys.mts && yarn run -T prettier --write --log-level warn src/i18n/keys.ts",
|
|
27
|
+
"validate-translations": "yarn build-translations && git diff --exit-code -- src/i18n/keys.ts src/i18n/__tests__/catalog.fixture.json",
|
|
28
|
+
"i18n:export": "node scripts/generate-i18n-keys.mts --json en.json",
|
|
29
|
+
"test": "vitest",
|
|
30
|
+
"test-ci": "vitest run"
|
|
26
31
|
},
|
|
27
32
|
"repository": {
|
|
28
33
|
"type": "git",
|
|
@@ -32,6 +37,7 @@
|
|
|
32
37
|
"files": [
|
|
33
38
|
"dist",
|
|
34
39
|
"src",
|
|
40
|
+
"!src/**/__tests__",
|
|
35
41
|
"assets",
|
|
36
42
|
"index.ts",
|
|
37
43
|
"embedded.ts",
|
|
@@ -49,24 +55,22 @@
|
|
|
49
55
|
],
|
|
50
56
|
"dependencies": {
|
|
51
57
|
"@floating-ui/react": "^0.27.20",
|
|
52
|
-
"@stream-io/
|
|
53
|
-
"@stream-io/video-
|
|
54
|
-
"@stream-io/video-
|
|
55
|
-
"
|
|
56
|
-
"clsx": "^2.1.1"
|
|
57
|
-
"react-chartjs-2": "^5.3.1"
|
|
58
|
+
"@stream-io/i18n": "^1.0.2",
|
|
59
|
+
"@stream-io/video-client": "2.0.0-beta.1",
|
|
60
|
+
"@stream-io/video-filters-web": "1.0.0-beta.0",
|
|
61
|
+
"@stream-io/video-react-bindings": "2.0.0-beta.1",
|
|
62
|
+
"clsx": "^2.1.1"
|
|
58
63
|
},
|
|
59
64
|
"peerDependencies": {
|
|
60
65
|
"react": "^17 || ^18 || ^19",
|
|
61
66
|
"react-dom": "^17 || ^18 || ^19"
|
|
62
67
|
},
|
|
63
68
|
"devDependencies": {
|
|
64
|
-
"@rollup/plugin-json": "^6.1.0",
|
|
65
69
|
"@rollup/plugin-replace": "^6.0.3",
|
|
66
70
|
"@rollup/plugin-typescript": "^12.3.0",
|
|
67
|
-
"@stream-io/audio-filters-web": "^0.
|
|
71
|
+
"@stream-io/audio-filters-web": "^1.0.0-beta.0",
|
|
68
72
|
"@stream-io/typescript-config": "^0.0.0",
|
|
69
|
-
"@stream-io/video-styling": "^2.0.0-beta.
|
|
73
|
+
"@stream-io/video-styling": "^2.0.0-beta.1",
|
|
70
74
|
"@types/node": "^25.9.5",
|
|
71
75
|
"@types/react": "~19.2.18",
|
|
72
76
|
"@types/react-dom": "~19.2.4",
|
|
@@ -74,6 +78,7 @@
|
|
|
74
78
|
"react-dom": "19.2.8",
|
|
75
79
|
"rimraf": "^6.1.3",
|
|
76
80
|
"rollup": "^4.62.4",
|
|
77
|
-
"typescript": "^6.0.3"
|
|
81
|
+
"typescript": "^6.0.3",
|
|
82
|
+
"vitest": "^4.1.10"
|
|
78
83
|
}
|
|
79
84
|
}
|
|
@@ -1,39 +1,64 @@
|
|
|
1
1
|
import { ComponentProps, CSSProperties, useState } from 'react';
|
|
2
2
|
import clsx from 'clsx';
|
|
3
3
|
|
|
4
|
+
export type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl';
|
|
5
|
+
|
|
4
6
|
export type AvatarData = {
|
|
5
7
|
imageSrc?: string;
|
|
6
8
|
name?: string;
|
|
7
9
|
style?: CSSProperties & Record<string, string | number>;
|
|
8
10
|
};
|
|
9
11
|
|
|
10
|
-
export type
|
|
12
|
+
export type AvatarVariantProps = {
|
|
13
|
+
size?: AvatarSize;
|
|
14
|
+
showOutline?: boolean;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export type AvatarProps = AvatarData &
|
|
18
|
+
ComponentProps<'img'> &
|
|
19
|
+
AvatarVariantProps;
|
|
20
|
+
|
|
21
|
+
const variantClasses = ({ size = 'md', showOutline }: AvatarVariantProps) => [
|
|
22
|
+
`str-video__avatar--size-${size}`,
|
|
23
|
+
showOutline && 'str-video__avatar--outlined',
|
|
24
|
+
];
|
|
11
25
|
|
|
12
26
|
export const Avatar = ({
|
|
13
27
|
imageSrc,
|
|
14
28
|
name,
|
|
15
29
|
style,
|
|
16
30
|
className,
|
|
31
|
+
size = 'md',
|
|
32
|
+
showOutline,
|
|
17
33
|
...rest
|
|
18
34
|
}: AvatarProps) => {
|
|
19
35
|
const [error, setError] = useState(false);
|
|
20
36
|
|
|
37
|
+
if (!imageSrc || error) {
|
|
38
|
+
return name ? (
|
|
39
|
+
<AvatarFallback
|
|
40
|
+
className={className}
|
|
41
|
+
style={style}
|
|
42
|
+
names={name.split(/\s+/).filter(Boolean)}
|
|
43
|
+
size={size}
|
|
44
|
+
showOutline={showOutline}
|
|
45
|
+
/>
|
|
46
|
+
) : null;
|
|
47
|
+
}
|
|
48
|
+
|
|
21
49
|
return (
|
|
22
|
-
|
|
23
|
-
{(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
alt="avatar"
|
|
30
|
-
className={clsx('str-video__avatar', className)}
|
|
31
|
-
src={imageSrc}
|
|
32
|
-
style={style}
|
|
33
|
-
{...rest}
|
|
34
|
-
/>
|
|
50
|
+
<img
|
|
51
|
+
onError={() => setError(true)}
|
|
52
|
+
alt="avatar"
|
|
53
|
+
className={clsx(
|
|
54
|
+
'str-video__avatar',
|
|
55
|
+
variantClasses({ size, showOutline }),
|
|
56
|
+
className,
|
|
35
57
|
)}
|
|
36
|
-
|
|
58
|
+
src={imageSrc}
|
|
59
|
+
style={style}
|
|
60
|
+
{...rest}
|
|
61
|
+
/>
|
|
37
62
|
);
|
|
38
63
|
};
|
|
39
64
|
|
|
@@ -41,20 +66,29 @@ type AvatarFallbackProps = {
|
|
|
41
66
|
names: string[];
|
|
42
67
|
className?: string;
|
|
43
68
|
style?: CSSProperties & Record<string, string | number>;
|
|
44
|
-
};
|
|
69
|
+
} & AvatarVariantProps;
|
|
70
|
+
|
|
45
71
|
export const AvatarFallback = ({
|
|
46
72
|
className,
|
|
47
73
|
names,
|
|
48
74
|
style,
|
|
75
|
+
size = 'md',
|
|
76
|
+
showOutline,
|
|
49
77
|
}: AvatarFallbackProps) => {
|
|
78
|
+
const isCompact = size === 'xs' || size === 'sm';
|
|
79
|
+
|
|
50
80
|
return (
|
|
51
81
|
<div
|
|
52
|
-
className={clsx(
|
|
82
|
+
className={clsx(
|
|
83
|
+
'str-video__avatar--initials-fallback',
|
|
84
|
+
variantClasses({ size, showOutline }),
|
|
85
|
+
className,
|
|
86
|
+
)}
|
|
53
87
|
style={style}
|
|
54
88
|
>
|
|
55
89
|
<div>
|
|
56
|
-
{names[0][0]}
|
|
57
|
-
{names[1]?.[0]}
|
|
90
|
+
{names[0]?.[0]}
|
|
91
|
+
{!isCompact && names[1]?.[0]}
|
|
58
92
|
</div>
|
|
59
93
|
</div>
|
|
60
94
|
);
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ComponentPropsWithoutRef, forwardRef } from 'react';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
|
|
4
|
+
import { Icon } from '../Icon';
|
|
5
|
+
|
|
6
|
+
export type BadgeVariant =
|
|
7
|
+
'default' | 'primary' | 'error' | 'neutral' | 'inverse';
|
|
8
|
+
|
|
9
|
+
export type BadgeSize = 'xs' | 'sm' | 'md';
|
|
10
|
+
|
|
11
|
+
export type BadgeProps = ComponentPropsWithoutRef<'span'> & {
|
|
12
|
+
variant?: BadgeVariant;
|
|
13
|
+
size?: BadgeSize;
|
|
14
|
+
icon?: string;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* A compact badge for counts, notifications and error markers.
|
|
19
|
+
*
|
|
20
|
+
* Without `icon` it is a pill that grows with its content; with `icon` it is a
|
|
21
|
+
* circle of the size given by `size`.
|
|
22
|
+
*
|
|
23
|
+
* The badge carries no positioning of its own — whatever it annotates places
|
|
24
|
+
* it. For the call controls, rendering a badge among `CompositeButton`'s
|
|
25
|
+
* children anchors it to the top-right corner of the button.
|
|
26
|
+
*/
|
|
27
|
+
export const Badge = forwardRef<HTMLSpanElement, BadgeProps>(
|
|
28
|
+
function BadgeRender(
|
|
29
|
+
{ variant = 'default', size = 'sm', icon, className, children, ...rest },
|
|
30
|
+
ref,
|
|
31
|
+
) {
|
|
32
|
+
return (
|
|
33
|
+
<span
|
|
34
|
+
ref={ref}
|
|
35
|
+
className={clsx(
|
|
36
|
+
'str-video__badge',
|
|
37
|
+
`str-video__badge--${variant}`,
|
|
38
|
+
`str-video__badge--size-${size}`,
|
|
39
|
+
icon && 'str-video__badge--icon',
|
|
40
|
+
className,
|
|
41
|
+
)}
|
|
42
|
+
{...rest}
|
|
43
|
+
>
|
|
44
|
+
{icon ? <Icon icon={icon} /> : children}
|
|
45
|
+
</span>
|
|
46
|
+
);
|
|
47
|
+
},
|
|
48
|
+
);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Badge';
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { ComponentPropsWithoutRef, forwardRef } from 'react';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
|
|
4
|
+
export type ButtonVariant = 'primary' | 'secondary' | 'destructive';
|
|
5
|
+
|
|
6
|
+
export type ButtonAppearance = 'solid' | 'outline' | 'ghost';
|
|
7
|
+
|
|
8
|
+
export type ButtonSize = 'xs' | 'sm' | 'md' | 'lg';
|
|
9
|
+
|
|
10
|
+
export type ButtonProps = ComponentPropsWithoutRef<'button'> & {
|
|
11
|
+
variant?: ButtonVariant;
|
|
12
|
+
appearance?: ButtonAppearance;
|
|
13
|
+
size?: ButtonSize;
|
|
14
|
+
active?: boolean;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export const Button = forwardRef<HTMLButtonElement, ButtonProps>(
|
|
18
|
+
function ButtonRender(
|
|
19
|
+
{
|
|
20
|
+
variant = 'primary',
|
|
21
|
+
appearance = 'solid',
|
|
22
|
+
size = 'md',
|
|
23
|
+
active,
|
|
24
|
+
className,
|
|
25
|
+
type = 'button',
|
|
26
|
+
children,
|
|
27
|
+
...rest
|
|
28
|
+
},
|
|
29
|
+
ref,
|
|
30
|
+
) {
|
|
31
|
+
return (
|
|
32
|
+
<button
|
|
33
|
+
ref={ref}
|
|
34
|
+
type={type}
|
|
35
|
+
className={clsx(
|
|
36
|
+
'str-video__button',
|
|
37
|
+
`str-video__button--${variant}`,
|
|
38
|
+
`str-video__button--${appearance}`,
|
|
39
|
+
`str-video__button--size-${size}`,
|
|
40
|
+
className,
|
|
41
|
+
)}
|
|
42
|
+
{...rest}
|
|
43
|
+
aria-pressed={active ?? rest['aria-pressed']}
|
|
44
|
+
>
|
|
45
|
+
{children}
|
|
46
|
+
</button>
|
|
47
|
+
);
|
|
48
|
+
},
|
|
49
|
+
);
|
|
@@ -8,11 +8,13 @@ import {
|
|
|
8
8
|
ReactElement,
|
|
9
9
|
} from 'react';
|
|
10
10
|
import { Placement } from '@floating-ui/react';
|
|
11
|
+
import { useI18n } from '../../i18n';
|
|
11
12
|
|
|
13
|
+
import { Button, ButtonAppearance, ButtonSize, ButtonVariant } from './Button';
|
|
12
14
|
import { IconButton } from './IconButton';
|
|
13
15
|
import { isComponentType } from '../../utilities';
|
|
14
16
|
|
|
15
|
-
export type
|
|
17
|
+
export type CompositeButtonProps<E extends HTMLElement = HTMLButtonElement> =
|
|
16
18
|
PropsWithChildren<{
|
|
17
19
|
active?: boolean;
|
|
18
20
|
Menu?: ComponentType | ReactElement | null;
|
|
@@ -21,91 +23,98 @@ export type IconButtonWithMenuProps<E extends HTMLElement = HTMLButtonElement> =
|
|
|
21
23
|
menuPlacement?: Placement;
|
|
22
24
|
menuOffset?: number;
|
|
23
25
|
ToggleMenuButton?: ComponentType<ToggleMenuButtonProps<E>>;
|
|
24
|
-
variant?:
|
|
26
|
+
variant?: ButtonVariant;
|
|
27
|
+
appearance?: ButtonAppearance;
|
|
28
|
+
size?: Exclude<ButtonSize, 'xs'>;
|
|
25
29
|
onMenuToggle?: (menuShown: boolean) => void;
|
|
26
30
|
}> &
|
|
27
31
|
ComponentProps<'button'>;
|
|
28
32
|
|
|
29
|
-
export const CompositeButton = forwardRef<
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
return (
|
|
52
|
-
<div
|
|
53
|
-
className={clsx('str-video__composite-button', className, {
|
|
54
|
-
'str-video__composite-button--caption': caption,
|
|
55
|
-
'str-video__composite-button--menu': Menu,
|
|
56
|
-
})}
|
|
57
|
-
title={title}
|
|
58
|
-
ref={ref}
|
|
59
|
-
>
|
|
33
|
+
export const CompositeButton = forwardRef<HTMLDivElement, CompositeButtonProps>(
|
|
34
|
+
function CompositeButtonRender(
|
|
35
|
+
{
|
|
36
|
+
appearance,
|
|
37
|
+
caption,
|
|
38
|
+
children,
|
|
39
|
+
className,
|
|
40
|
+
disabled,
|
|
41
|
+
Menu,
|
|
42
|
+
menuOffset,
|
|
43
|
+
menuPlacement,
|
|
44
|
+
onMenuToggle,
|
|
45
|
+
active,
|
|
46
|
+
size = 'md',
|
|
47
|
+
title,
|
|
48
|
+
ToggleMenuButton = CompositeCaret,
|
|
49
|
+
variant = 'secondary',
|
|
50
|
+
...buttonProps
|
|
51
|
+
},
|
|
52
|
+
ref,
|
|
53
|
+
) {
|
|
54
|
+
return (
|
|
60
55
|
<div
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
56
|
+
ref={ref}
|
|
57
|
+
title={title}
|
|
58
|
+
className={clsx(
|
|
59
|
+
'str-video__composite-button',
|
|
60
|
+
`str-video__composite-button--${variant}`,
|
|
61
|
+
`str-video__composite-button--size-${size}`,
|
|
62
|
+
`str-video__composite-button--${appearance ?? 'solid'}`,
|
|
63
|
+
Menu && 'str-video__composite-button--menu',
|
|
64
|
+
className,
|
|
65
|
+
)}
|
|
69
66
|
>
|
|
70
|
-
<
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
>
|
|
80
|
-
{children}
|
|
81
|
-
</button>
|
|
82
|
-
{Menu && (
|
|
83
|
-
<MenuToggle
|
|
84
|
-
offset={menuOffset}
|
|
85
|
-
placement={menuPlacement}
|
|
86
|
-
ToggleButton={ToggleMenuButton}
|
|
87
|
-
onToggle={onMenuToggle}
|
|
67
|
+
<div className="str-video__composite-button__group">
|
|
68
|
+
<Button
|
|
69
|
+
variant={variant}
|
|
70
|
+
appearance={appearance}
|
|
71
|
+
size={size}
|
|
72
|
+
disabled={disabled}
|
|
73
|
+
active={active}
|
|
74
|
+
className="str-video__composite-button__action str-video__button--icon-only"
|
|
75
|
+
{...buttonProps}
|
|
88
76
|
>
|
|
89
|
-
{
|
|
90
|
-
</
|
|
77
|
+
{children}
|
|
78
|
+
</Button>
|
|
79
|
+
{Menu &&
|
|
80
|
+
(disabled ? (
|
|
81
|
+
<CompositeCaret menuShown={false} disabled />
|
|
82
|
+
) : (
|
|
83
|
+
<MenuToggle
|
|
84
|
+
offset={menuOffset}
|
|
85
|
+
placement={menuPlacement}
|
|
86
|
+
ToggleButton={ToggleMenuButton}
|
|
87
|
+
onToggle={onMenuToggle}
|
|
88
|
+
>
|
|
89
|
+
{isComponentType(Menu) ? <Menu /> : Menu}
|
|
90
|
+
</MenuToggle>
|
|
91
|
+
))}
|
|
92
|
+
</div>
|
|
93
|
+
{caption && (
|
|
94
|
+
<span className="str-video__composite-button__caption">
|
|
95
|
+
{caption}
|
|
96
|
+
</span>
|
|
91
97
|
)}
|
|
92
98
|
</div>
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
</div>
|
|
97
|
-
);
|
|
98
|
-
});
|
|
99
|
+
);
|
|
100
|
+
},
|
|
101
|
+
);
|
|
99
102
|
|
|
100
|
-
const
|
|
103
|
+
const CompositeCaret = forwardRef<
|
|
101
104
|
HTMLButtonElement,
|
|
102
|
-
|
|
103
|
-
>(function
|
|
105
|
+
{ menuShown: boolean; disabled?: boolean }
|
|
106
|
+
>(function CompositeCaretRender({ menuShown, disabled }, ref) {
|
|
107
|
+
const { t } = useI18n();
|
|
108
|
+
|
|
104
109
|
return (
|
|
105
110
|
<IconButton
|
|
106
|
-
className=
|
|
107
|
-
|
|
108
|
-
|
|
111
|
+
className="str-video__composite-button__caret"
|
|
112
|
+
size="xs"
|
|
113
|
+
appearance="ghost"
|
|
114
|
+
disabled={disabled}
|
|
115
|
+
aria-label={t('common.toggleMenu.ariaLabel', 'Toggle menu')}
|
|
116
|
+
aria-haspopup="menu"
|
|
117
|
+
aria-expanded={menuShown}
|
|
109
118
|
icon={menuShown ? 'caret-down' : 'caret-up'}
|
|
110
119
|
ref={ref}
|
|
111
120
|
/>
|
|
@@ -1,33 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { forwardRef } from 'react';
|
|
2
2
|
import clsx from 'clsx';
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import { Button, ButtonProps } from './Button';
|
|
5
|
+
import { Icon } from '../Icon';
|
|
5
6
|
|
|
6
|
-
export type
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
} & ComponentProps<'button'> &
|
|
10
|
-
IconProps;
|
|
7
|
+
export type IconButtonProps = Omit<ButtonProps, 'children'> & {
|
|
8
|
+
icon: string;
|
|
9
|
+
};
|
|
11
10
|
|
|
12
|
-
export const IconButton = forwardRef
|
|
13
|
-
props
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
onClick?.(e);
|
|
26
|
-
}}
|
|
27
|
-
ref={ref}
|
|
28
|
-
{...rest}
|
|
29
|
-
>
|
|
30
|
-
<Icon icon={icon} />
|
|
31
|
-
</button>
|
|
32
|
-
);
|
|
33
|
-
});
|
|
11
|
+
export const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(
|
|
12
|
+
function IconButtonRender({ icon, className, ...props }, ref) {
|
|
13
|
+
return (
|
|
14
|
+
<Button
|
|
15
|
+
ref={ref}
|
|
16
|
+
className={clsx('str-video__button--icon-only', className)}
|
|
17
|
+
{...props}
|
|
18
|
+
>
|
|
19
|
+
<Icon icon={icon} />
|
|
20
|
+
</Button>
|
|
21
|
+
);
|
|
22
|
+
},
|
|
23
|
+
);
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * from './
|
|
1
|
+
export * from './Button';
|
|
2
2
|
export * from './IconButton';
|
|
3
|
-
export * from './
|
|
3
|
+
export * from './CompositeButton';
|
|
@@ -32,9 +32,11 @@ export const AcceptCallButton = ({
|
|
|
32
32
|
);
|
|
33
33
|
return (
|
|
34
34
|
<IconButton
|
|
35
|
+
className="str-video__accept-call-button"
|
|
36
|
+
size="sm"
|
|
35
37
|
disabled={disabled}
|
|
36
38
|
icon="call-accept"
|
|
37
|
-
variant="
|
|
39
|
+
variant="secondary"
|
|
38
40
|
data-testid="accept-call-button"
|
|
39
41
|
onClick={handleClick}
|
|
40
42
|
/>
|