@stream-io/video-react-sdk 1.35.1 → 1.36.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 CHANGED
@@ -2,6 +2,32 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [1.36.0](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-1.35.2...@stream-io/video-react-sdk-1.36.0) (2026-04-28)
6
+
7
+ ### Dependency Updates
8
+
9
+ - `@stream-io/video-client` updated to version `1.48.0`
10
+ - `@stream-io/video-react-bindings` updated to version `1.15.0`
11
+
12
+ ### Features
13
+
14
+ - audio connecting hook in bindings and RN UI ([#2214](https://github.com/GetStream/stream-video-js/issues/2214)) ([44c38fa](https://github.com/GetStream/stream-video-js/commit/44c38faaccb5327f6cd5cd6e70781bad93deafaf))
15
+
16
+ ### Bug Fixes
17
+
18
+ - **egress-composite:** adjust PaginatedGrid sizing ([#1966](https://github.com/GetStream/stream-video-js/issues/1966)) ([9c7009f](https://github.com/GetStream/stream-video-js/commit/9c7009f26d63ef4fcbc8441746e5cd3c2b1935b6))
19
+
20
+ ## [1.35.2](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-1.35.1...@stream-io/video-react-sdk-1.35.2) (2026-04-15)
21
+
22
+ ### Dependency Updates
23
+
24
+ - `@stream-io/video-client` updated to version `1.47.0`
25
+ - `@stream-io/video-react-bindings` updated to version `1.14.2`
26
+
27
+ ### Bug Fixes
28
+
29
+ - **pronto:** use list visualType for device selection mobile devices ([#2202](https://github.com/GetStream/stream-video-js/issues/2202)) ([f6b6cd2](https://github.com/GetStream/stream-video-js/commit/f6b6cd2eeef3e776167cae515cc7beb2d566ccde))
30
+
5
31
  ## [1.35.1](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-1.35.0...@stream-io/video-react-sdk-1.35.1) (2026-04-09)
6
32
 
7
33
  ### Dependency Updates
@@ -1207,7 +1207,7 @@ const SpeakerTest = (props) => {
1207
1207
  const audioElementRef = react.useRef(null);
1208
1208
  const [isPlaying, setIsPlaying] = react.useState(false);
1209
1209
  const { t } = videoReactBindings.useI18n();
1210
- const { audioUrl = `https://unpkg.com/${"@stream-io/video-react-sdk"}@${"1.35.1"}/assets/piano.mp3`, } = props;
1210
+ const { audioUrl = `https://unpkg.com/${"@stream-io/video-react-sdk"}@${"1.36.0"}/assets/piano.mp3`, } = props;
1211
1211
  // Update audio output device when selection changes
1212
1212
  react.useEffect(() => {
1213
1213
  const audio = audioElementRef.current;
@@ -1884,8 +1884,7 @@ const ParticipantDetails = ({ indicatorsVisible = true, }) => {
1884
1884
  const hasVideoTrack = videoClient.hasVideo(participant);
1885
1885
  const canUnpin = !!pin && pin.isLocalPin;
1886
1886
  const isTrackPaused = trackType !== 'none' ? videoClient.hasPausedTrack(participant, trackType) : false;
1887
- const isAudioTrackUnmuted = useIsTrackUnmuted(participant);
1888
- const isAudioConnecting = hasAudioTrack && !isAudioTrackUnmuted;
1887
+ const isAudioConnecting = videoReactBindings.useIsAudioConnecting(participant);
1889
1888
  return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { className: "str-video__participant-details", children: jsxRuntime.jsxs("div", { className: "str-video__participant-details__name", children: [name || userId, indicatorsVisible && isAudioConnecting && (jsxRuntime.jsx(LoadingIndicator, { className: "str-video__participant-details__name--audio-connecting", tooltip: t('Audio is connecting...') })), indicatorsVisible && !hasAudioTrack && (jsxRuntime.jsx("span", { className: "str-video__participant-details__name--audio-muted" })), indicatorsVisible && !hasVideoTrack && (jsxRuntime.jsx("span", { className: "str-video__participant-details__name--video-muted" })), indicatorsVisible && isTrackPaused && (jsxRuntime.jsx("span", { title: t('Video paused due to insufficient bandwidth'), className: "str-video__participant-details__name--track-paused" })), indicatorsVisible && pin && (jsxRuntime.jsx("span", { title: canUnpin ? t('Unpin') : t('Pinned'), onClick: canUnpin ? () => call?.unpin(sessionId) : undefined, className: "str-video__participant-details__name--pinned" })), indicatorsVisible && jsxRuntime.jsx(SpeechIndicator, {})] }) }), indicatorsVisible && (jsxRuntime.jsx(Notification, { isVisible: isLocalParticipant &&
1890
1889
  connectionQuality === videoClient.SfuModels.ConnectionQuality.POOR, message: t('Poor connection quality'), children: connectionQualityAsString && (jsxRuntime.jsx("span", { className: clsx('str-video__participant-details__connection-quality', `str-video__participant-details__connection-quality--${connectionQualityAsString}`), title: connectionQualityAsString })) }))] }));
1891
1890
  };
@@ -1894,29 +1893,6 @@ const SpeechIndicator = () => {
1894
1893
  const { isSpeaking, isDominantSpeaker } = participant;
1895
1894
  return (jsxRuntime.jsxs("span", { className: clsx('str-video__speech-indicator', isSpeaking && 'str-video__speech-indicator--speaking', isDominantSpeaker && 'str-video__speech-indicator--dominant'), children: [jsxRuntime.jsx("span", { className: "str-video__speech-indicator__bar" }), jsxRuntime.jsx("span", { className: "str-video__speech-indicator__bar" }), jsxRuntime.jsx("span", { className: "str-video__speech-indicator__bar" })] }));
1896
1895
  };
1897
- const useIsTrackUnmuted = (participant) => {
1898
- const audioStream = participant.audioStream;
1899
- const [unmuted, setUnmuted] = react.useState(() => {
1900
- const track = audioStream?.getAudioTracks()[0];
1901
- return !!track && !track.muted;
1902
- });
1903
- react.useEffect(() => {
1904
- const track = audioStream?.getAudioTracks()[0];
1905
- if (!track)
1906
- return;
1907
- setUnmuted(!track.muted);
1908
- const handler = () => {
1909
- setUnmuted(!track.muted);
1910
- };
1911
- track.addEventListener('mute', handler);
1912
- track.addEventListener('unmute', handler);
1913
- return () => {
1914
- track.removeEventListener('mute', handler);
1915
- track.removeEventListener('unmute', handler);
1916
- };
1917
- }, [audioStream]);
1918
- return unmuted;
1919
- };
1920
1896
 
1921
1897
  const ParticipantView = react.forwardRef(function ParticipantView({ participant, trackType = 'videoTrack', mirror, muteAudio, refs: { setVideoElement, setVideoPlaceholderElement } = {}, className, VideoPlaceholder, PictureInPicturePlaceholder, ParticipantViewUI = DefaultParticipantViewUI, }, ref) {
1922
1898
  const { isLocalParticipant, isSpeaking, isDominantSpeaker, sessionId } = participant;
@@ -2422,7 +2398,7 @@ const formatDuration = (durationInMs) => {
2422
2398
 
2423
2399
  const GROUP_SIZE = 16;
2424
2400
  const PaginatedGridLayoutGroup = ({ group, mirror, VideoPlaceholder, PictureInPicturePlaceholder, ParticipantViewUI, }) => {
2425
- return (jsxRuntime.jsx("div", { className: clsx('str-video__paginated-grid-layout__group', {
2401
+ return (jsxRuntime.jsx("div", { "data-group-size": group.length, className: clsx('str-video__paginated-grid-layout__group', {
2426
2402
  'str-video__paginated-grid-layout--one': group.length === 1,
2427
2403
  'str-video__paginated-grid-layout--two-four': group.length >= 2 && group.length <= 4,
2428
2404
  'str-video__paginated-grid-layout--five-nine': group.length >= 5 && group.length <= 9,