@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 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 && (jsxRuntime.jsx(GenericMenuButtonItem, { onClick: toggleFullscreenMode, children: t('{{ direction }} fullscreen', {
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.6").split('.');
2683
+ const [major, minor, patch] = ("1.12.8").split('.');
2683
2684
  videoClient.setSdkInfo({
2684
2685
  type: videoClient.SfuModels.SdkType.REACT,
2685
2686
  major,