@stream-io/video-react-sdk 1.12.6 → 1.12.8
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 +22 -0
- package/dist/index.cjs.js +11 -10
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +11 -10
- package/dist/index.es.js.map +1 -1
- package/package.json +3 -3
- package/src/components/CallControls/ToggleAudioButton.tsx +27 -4
- package/src/components/CallControls/ToggleVideoButton.tsx +27 -2
- package/src/core/components/ParticipantView/ParticipantActionsContextMenu.tsx +8 -7
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,28 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
## [1.12.8](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-1.12.7...@stream-io/video-react-sdk-1.12.8) (2025-03-12)
|
|
6
|
+
|
|
7
|
+
### Dependency Updates
|
|
8
|
+
|
|
9
|
+
* `@stream-io/video-client` updated to version `1.18.5`
|
|
10
|
+
* `@stream-io/video-react-bindings` updated to version `1.5.7`
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
* add pending browser permission state ([#1718](https://github.com/GetStream/stream-video-js/issues/1718)) ([7f24be6](https://github.com/GetStream/stream-video-js/commit/7f24be63d33105d0688be7b5b625bc9b6aa0d3a9))
|
|
15
|
+
|
|
16
|
+
## [1.12.7](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-1.12.6...@stream-io/video-react-sdk-1.12.7) (2025-03-10)
|
|
17
|
+
|
|
18
|
+
### Dependency Updates
|
|
19
|
+
|
|
20
|
+
* `@stream-io/video-client` updated to version `1.18.4`
|
|
21
|
+
* `@stream-io/video-react-bindings` updated to version `1.5.6`
|
|
22
|
+
|
|
23
|
+
### Bug Fixes
|
|
24
|
+
|
|
25
|
+
* disable the "Enter full screen" option on unsupported platforms ([#1715](https://github.com/GetStream/stream-video-js/issues/1715)) ([97da8d8](https://github.com/GetStream/stream-video-js/commit/97da8d8decf9d3a04d31d07a9f4259e4b712736d))
|
|
26
|
+
|
|
5
27
|
## [1.12.6](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-1.12.5...@stream-io/video-react-sdk-1.12.6) (2025-03-05)
|
|
6
28
|
|
|
7
29
|
### Dependency Updates
|
package/dist/index.cjs.js
CHANGED
|
@@ -519,7 +519,8 @@ const ParticipantActionsContextMenu = () => {
|
|
|
519
519
|
return document.exitPictureInPicture().catch(console.error);
|
|
520
520
|
};
|
|
521
521
|
const { close } = useMenuContext() || {};
|
|
522
|
-
return (jsxRuntime.jsxs(GenericMenu, { onItemClick: close, children: [jsxRuntime.jsxs(GenericMenuButtonItem, { onClick: toggleParticipantPin, disabled: pin && !pin.isLocalPin, children: [jsxRuntime.jsx(Icon, { icon: "pin" }), pin ? t('Unpin') : t('Pin')] }), jsxRuntime.jsxs(videoReactBindings.Restricted, { requiredGrants: [videoClient.OwnCapability.PIN_FOR_EVERYONE], children: [jsxRuntime.jsxs(GenericMenuButtonItem, { onClick: pinForEveryone, disabled: pin && !pin.isLocalPin, children: [jsxRuntime.jsx(Icon, { icon: "pin" }), t('Pin for everyone')] }), jsxRuntime.jsxs(GenericMenuButtonItem, { onClick: unpinForEveryone, disabled: !pin || pin.isLocalPin, children: [jsxRuntime.jsx(Icon, { icon: "pin" }), t('Unpin for everyone')] })] }), jsxRuntime.jsx(videoReactBindings.Restricted, { requiredGrants: [videoClient.OwnCapability.BLOCK_USERS], children: jsxRuntime.jsxs(GenericMenuButtonItem, { onClick: blockUser, children: [jsxRuntime.jsx(Icon, { icon: "not-allowed" }), t('Block')] }) }), jsxRuntime.jsxs(videoReactBindings.Restricted, { requiredGrants: [videoClient.OwnCapability.MUTE_USERS], children: [hasVideoTrack && (jsxRuntime.jsxs(GenericMenuButtonItem, { onClick: muteVideo, children: [jsxRuntime.jsx(Icon, { icon: "camera-off-outline" }), t('Turn off video')] })), hasScreenShareTrack && (jsxRuntime.jsxs(GenericMenuButtonItem, { onClick: muteScreenShare, children: [jsxRuntime.jsx(Icon, { icon: "screen-share-off" }), t('Turn off screen share')] })), hasAudioTrack && (jsxRuntime.jsxs(GenericMenuButtonItem, { onClick: muteAudio, children: [jsxRuntime.jsx(Icon, { icon: "no-audio" }), t('Mute audio')] })), hasScreenShareAudioTrack && (jsxRuntime.jsxs(GenericMenuButtonItem, { onClick: muteScreenShareAudio, children: [jsxRuntime.jsx(Icon, { icon: "no-audio" }), t('Mute screen share audio')] }))] }), participantViewElement &&
|
|
522
|
+
return (jsxRuntime.jsxs(GenericMenu, { onItemClick: close, children: [jsxRuntime.jsxs(GenericMenuButtonItem, { onClick: toggleParticipantPin, disabled: pin && !pin.isLocalPin, children: [jsxRuntime.jsx(Icon, { icon: "pin" }), pin ? t('Unpin') : t('Pin')] }), jsxRuntime.jsxs(videoReactBindings.Restricted, { requiredGrants: [videoClient.OwnCapability.PIN_FOR_EVERYONE], children: [jsxRuntime.jsxs(GenericMenuButtonItem, { onClick: pinForEveryone, disabled: pin && !pin.isLocalPin, children: [jsxRuntime.jsx(Icon, { icon: "pin" }), t('Pin for everyone')] }), jsxRuntime.jsxs(GenericMenuButtonItem, { onClick: unpinForEveryone, disabled: !pin || pin.isLocalPin, children: [jsxRuntime.jsx(Icon, { icon: "pin" }), t('Unpin for everyone')] })] }), jsxRuntime.jsx(videoReactBindings.Restricted, { requiredGrants: [videoClient.OwnCapability.BLOCK_USERS], children: jsxRuntime.jsxs(GenericMenuButtonItem, { onClick: blockUser, children: [jsxRuntime.jsx(Icon, { icon: "not-allowed" }), t('Block')] }) }), jsxRuntime.jsxs(videoReactBindings.Restricted, { requiredGrants: [videoClient.OwnCapability.MUTE_USERS], children: [hasVideoTrack && (jsxRuntime.jsxs(GenericMenuButtonItem, { onClick: muteVideo, children: [jsxRuntime.jsx(Icon, { icon: "camera-off-outline" }), t('Turn off video')] })), hasScreenShareTrack && (jsxRuntime.jsxs(GenericMenuButtonItem, { onClick: muteScreenShare, children: [jsxRuntime.jsx(Icon, { icon: "screen-share-off" }), t('Turn off screen share')] })), hasAudioTrack && (jsxRuntime.jsxs(GenericMenuButtonItem, { onClick: muteAudio, children: [jsxRuntime.jsx(Icon, { icon: "no-audio" }), t('Mute audio')] })), hasScreenShareAudioTrack && (jsxRuntime.jsxs(GenericMenuButtonItem, { onClick: muteScreenShareAudio, children: [jsxRuntime.jsx(Icon, { icon: "no-audio" }), t('Mute screen share audio')] }))] }), participantViewElement &&
|
|
523
|
+
typeof participantViewElement.requestFullscreen !== 'undefined' && (jsxRuntime.jsx(GenericMenuButtonItem, { onClick: toggleFullscreenMode, children: t('{{ direction }} fullscreen', {
|
|
523
524
|
direction: fullscreenModeOn ? t('Leave') : t('Enter'),
|
|
524
525
|
}) })), videoElement && document.pictureInPictureEnabled && (jsxRuntime.jsx(GenericMenuButtonItem, { onClick: togglePictureInPicture, children: t('{{ direction }} picture-in-picture', {
|
|
525
526
|
direction: isPiP ? t('Leave') : t('Enter'),
|
|
@@ -1333,7 +1334,7 @@ const ToggleAudioPreviewButton = (props) => {
|
|
|
1333
1334
|
const { caption, onMenuToggle, ...restCompositeButtonProps } = props;
|
|
1334
1335
|
const { t } = videoReactBindings.useI18n();
|
|
1335
1336
|
const { useMicrophoneState } = videoReactBindings.useCallStateHooks();
|
|
1336
|
-
const { microphone, optimisticIsMute, hasBrowserPermission } = useMicrophoneState();
|
|
1337
|
+
const { microphone, optimisticIsMute, hasBrowserPermission, isPromptingPermission, } = useMicrophoneState();
|
|
1337
1338
|
const [tooltipDisabled, setTooltipDisabled] = react.useState(false);
|
|
1338
1339
|
const handleClick = createCallControlHandler(props, () => microphone.toggle());
|
|
1339
1340
|
return (jsxRuntime.jsx(WithTooltip, { title: !hasBrowserPermission
|
|
@@ -1343,14 +1344,14 @@ const ToggleAudioPreviewButton = (props) => {
|
|
|
1343
1344
|
: 'preview-audio-mute-button', onClick: handleClick, ...restCompositeButtonProps, onMenuToggle: (shown) => {
|
|
1344
1345
|
setTooltipDisabled(shown);
|
|
1345
1346
|
onMenuToggle?.(shown);
|
|
1346
|
-
}, children: [jsxRuntime.jsx(Icon, { icon: !optimisticIsMute ? 'mic' : 'mic-off' }), !hasBrowserPermission && (jsxRuntime.jsx("span", { className: "str-video__no-media-permission", title: t('Check your browser audio permissions'), children: "!" }))] }) }));
|
|
1347
|
+
}, children: [jsxRuntime.jsx(Icon, { icon: !optimisticIsMute ? 'mic' : 'mic-off' }), !hasBrowserPermission && (jsxRuntime.jsx("span", { className: "str-video__no-media-permission", title: t('Check your browser audio permissions'), children: "!" })), isPromptingPermission && (jsxRuntime.jsx("span", { className: "str-video__pending-permission", title: t('Waiting for permission'), children: "?" }))] }) }));
|
|
1347
1348
|
};
|
|
1348
1349
|
const ToggleAudioPublishingButton = (props) => {
|
|
1349
1350
|
const { t } = videoReactBindings.useI18n();
|
|
1350
1351
|
const { caption, Menu = jsxRuntime.jsx(DeviceSelectorAudioInput, { visualType: "list" }), menuPlacement = 'top', onMenuToggle, ...restCompositeButtonProps } = props;
|
|
1351
1352
|
const { hasPermission, requestPermission, isAwaitingPermission } = useRequestPermission(videoClient.OwnCapability.SEND_AUDIO);
|
|
1352
1353
|
const { useMicrophoneState } = videoReactBindings.useCallStateHooks();
|
|
1353
|
-
const { microphone, optimisticIsMute, hasBrowserPermission } = useMicrophoneState();
|
|
1354
|
+
const { microphone, optimisticIsMute, hasBrowserPermission, isPromptingPermission, } = useMicrophoneState();
|
|
1354
1355
|
const [tooltipDisabled, setTooltipDisabled] = react.useState(false);
|
|
1355
1356
|
const handleClick = createCallControlHandler(props, async () => {
|
|
1356
1357
|
if (!hasPermission) {
|
|
@@ -1367,14 +1368,14 @@ const ToggleAudioPublishingButton = (props) => {
|
|
|
1367
1368
|
: caption ?? t('Mic'), tooltipDisabled: tooltipDisabled, children: jsxRuntime.jsxs(CompositeButton, { active: optimisticIsMute, caption: caption, variant: "secondary", disabled: !hasBrowserPermission || !hasPermission, "data-testid": optimisticIsMute ? 'audio-unmute-button' : 'audio-mute-button', onClick: handleClick, Menu: Menu, menuPlacement: menuPlacement, menuOffset: 16, ...restCompositeButtonProps, onMenuToggle: (shown) => {
|
|
1368
1369
|
setTooltipDisabled(shown);
|
|
1369
1370
|
onMenuToggle?.(shown);
|
|
1370
|
-
}, children: [jsxRuntime.jsx(Icon, { icon: optimisticIsMute ? 'mic-off' : 'mic' }), (!hasBrowserPermission || !hasPermission) && (jsxRuntime.jsx("span", { className: "str-video__no-media-permission", children: "!" }))] }) }) }) }));
|
|
1371
|
+
}, children: [jsxRuntime.jsx(Icon, { icon: optimisticIsMute ? 'mic-off' : 'mic' }), (!hasBrowserPermission || !hasPermission) && (jsxRuntime.jsx("span", { className: "str-video__no-media-permission", children: "!" })), isPromptingPermission && (jsxRuntime.jsx("span", { className: "str-video__pending-permission", title: t('Waiting for permission'), children: "?" }))] }) }) }) }));
|
|
1371
1372
|
};
|
|
1372
1373
|
|
|
1373
1374
|
const ToggleVideoPreviewButton = (props) => {
|
|
1374
1375
|
const { caption, Menu = DeviceSelectorVideo, menuPlacement = 'top', onMenuToggle, ...restCompositeButtonProps } = props;
|
|
1375
1376
|
const { t } = videoReactBindings.useI18n();
|
|
1376
1377
|
const { useCameraState } = videoReactBindings.useCallStateHooks();
|
|
1377
|
-
const { camera, optimisticIsMute, hasBrowserPermission } = useCameraState();
|
|
1378
|
+
const { camera, optimisticIsMute, hasBrowserPermission, isPromptingPermission, } = useCameraState();
|
|
1378
1379
|
const [tooltipDisabled, setTooltipDisabled] = react.useState(false);
|
|
1379
1380
|
const handleClick = createCallControlHandler(props, () => camera.toggle());
|
|
1380
1381
|
return (jsxRuntime.jsx(WithTooltip, { title: !hasBrowserPermission
|
|
@@ -1384,14 +1385,14 @@ const ToggleVideoPreviewButton = (props) => {
|
|
|
1384
1385
|
: 'preview-video-mute-button', onClick: handleClick, disabled: !hasBrowserPermission, Menu: Menu, menuPlacement: menuPlacement, ...restCompositeButtonProps, onMenuToggle: (shown) => {
|
|
1385
1386
|
setTooltipDisabled(shown);
|
|
1386
1387
|
onMenuToggle?.(shown);
|
|
1387
|
-
}, children: [jsxRuntime.jsx(Icon, { icon: !optimisticIsMute ? 'camera' : 'camera-off' }), !hasBrowserPermission && (jsxRuntime.jsx("span", { className: "str-video__no-media-permission", title: t('Check your browser video permissions'), children: "!" }))] }) }));
|
|
1388
|
+
}, children: [jsxRuntime.jsx(Icon, { icon: !optimisticIsMute ? 'camera' : 'camera-off' }), !hasBrowserPermission && (jsxRuntime.jsx("span", { className: "str-video__no-media-permission", title: t('Check your browser video permissions'), children: "!" })), isPromptingPermission && (jsxRuntime.jsx("span", { className: "str-video__pending-permission", title: t('Waiting for permission'), children: "?" }))] }) }));
|
|
1388
1389
|
};
|
|
1389
1390
|
const ToggleVideoPublishingButton = (props) => {
|
|
1390
1391
|
const { t } = videoReactBindings.useI18n();
|
|
1391
1392
|
const { caption, Menu = jsxRuntime.jsx(DeviceSelectorVideo, { visualType: "list" }), menuPlacement = 'top', onMenuToggle, ...restCompositeButtonProps } = props;
|
|
1392
1393
|
const { hasPermission, requestPermission, isAwaitingPermission } = useRequestPermission(videoClient.OwnCapability.SEND_VIDEO);
|
|
1393
1394
|
const { useCameraState, useCallSettings } = videoReactBindings.useCallStateHooks();
|
|
1394
|
-
const { camera, optimisticIsMute, hasBrowserPermission } = useCameraState();
|
|
1395
|
+
const { camera, optimisticIsMute, hasBrowserPermission, isPromptingPermission, } = useCameraState();
|
|
1395
1396
|
const callSettings = useCallSettings();
|
|
1396
1397
|
const isPublishingVideoAllowed = callSettings?.video.enabled;
|
|
1397
1398
|
const [tooltipDisabled, setTooltipDisabled] = react.useState(false);
|
|
@@ -1416,7 +1417,7 @@ const ToggleVideoPublishingButton = (props) => {
|
|
|
1416
1417
|
onMenuToggle?.(shown);
|
|
1417
1418
|
}, children: [jsxRuntime.jsx(Icon, { icon: optimisticIsMute ? 'camera-off' : 'camera' }), (!hasBrowserPermission ||
|
|
1418
1419
|
!hasPermission ||
|
|
1419
|
-
!isPublishingVideoAllowed) && (jsxRuntime.jsx("span", { className: "str-video__no-media-permission", children: "!" }))] }) }) }) }));
|
|
1420
|
+
!isPublishingVideoAllowed) && (jsxRuntime.jsx("span", { className: "str-video__no-media-permission", children: "!" })), isPromptingPermission && (jsxRuntime.jsx("span", { className: "str-video__pending-permission", title: t('Waiting for permission'), children: "?" }))] }) }) }) }));
|
|
1420
1421
|
};
|
|
1421
1422
|
|
|
1422
1423
|
const EndCallMenu = (props) => {
|
|
@@ -2679,7 +2680,7 @@ const LivestreamPlayer = (props) => {
|
|
|
2679
2680
|
return (jsxRuntime.jsx(StreamCall, { call: call, children: jsxRuntime.jsx(LivestreamLayout, { ...layoutProps }) }));
|
|
2680
2681
|
};
|
|
2681
2682
|
|
|
2682
|
-
const [major, minor, patch] = ("1.12.
|
|
2683
|
+
const [major, minor, patch] = ("1.12.8").split('.');
|
|
2683
2684
|
videoClient.setSdkInfo({
|
|
2684
2685
|
type: videoClient.SfuModels.SdkType.REACT,
|
|
2685
2686
|
major,
|