@stream-io/video-react-sdk 1.21.3 → 1.23.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,33 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [1.23.0](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-1.22.0...@stream-io/video-react-sdk-1.23.0) (2025-09-30)
6
+
7
+ ### Dependency Updates
8
+
9
+ - `@stream-io/audio-filters-web` updated to version `0.5.0`
10
+ - `@stream-io/video-client` updated to version `1.33.0`
11
+ - `@stream-io/video-react-bindings` updated to version `1.9.0`
12
+
13
+ ### Features
14
+
15
+ - Audio profiles and Hi-Fi stereo audio ([#1887](https://github.com/GetStream/stream-video-js/issues/1887)) ([3b60c89](https://github.com/GetStream/stream-video-js/commit/3b60c89b8c0dbc40544fe13be79c10e93bbddd3d))
16
+
17
+ ## [1.22.0](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-1.21.3...@stream-io/video-react-sdk-1.22.0) (2025-09-29)
18
+
19
+ ### Dependency Updates
20
+
21
+ - `@stream-io/video-client` updated to version `1.32.0`
22
+ - `@stream-io/video-react-bindings` updated to version `1.8.4`
23
+
24
+ ### Features
25
+
26
+ - **egress-composite:** custom actions ([#1926](https://github.com/GetStream/stream-video-js/issues/1926)) ([760a35a](https://github.com/GetStream/stream-video-js/commit/760a35a5a5b450d9cde9398f011b5efba8b44458))
27
+
28
+ ### Bug Fixes
29
+
30
+ - make `mute all` label translatable ([#1930](https://github.com/GetStream/stream-video-js/issues/1930)) ([1f49368](https://github.com/GetStream/stream-video-js/commit/1f49368643ccf9a4cec643e4bd9e10ddf7635232))
31
+
5
32
  ## [1.21.3](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-sdk-1.21.2...@stream-io/video-react-sdk-1.21.3) (2025-09-17)
6
33
 
7
34
  ### Dependency Updates
package/README.md CHANGED
@@ -92,6 +92,7 @@ Here are some of the features we support:
92
92
  - [x] Hardware-accelerated video encoding on supported platforms
93
93
  - [x] Dynascale 2.0 (codec switching)
94
94
  - [x] Improved stat collection and device performance metrics
95
+ - [x] HiFi audio and stereo
95
96
  - [ ] E2E testing platform
96
97
  - [ ] Dynascale: turn off incoming video when the browser is in the background
97
98
 
package/dist/index.cjs.js CHANGED
@@ -1901,10 +1901,11 @@ const CallParticipantsList = ({ onClose, activeUsersSearchFn, blockedUsersSearch
1901
1901
  };
1902
1902
  const CallParticipantListContentHeader = ({ userListType, setUserListType, }) => {
1903
1903
  const call = videoReactBindings.useCall();
1904
+ const { t } = videoReactBindings.useI18n();
1904
1905
  const muteAll = react.useCallback(() => {
1905
1906
  call?.muteAllUsers('audio');
1906
1907
  }, [call]);
1907
- return (jsxRuntime.jsxs("div", { className: "str-video__participant-list__content-header", children: [jsxRuntime.jsx("div", { className: "str-video__participant-list__content-header-title", children: userListType === 'active' && (jsxRuntime.jsx(videoReactBindings.Restricted, { requiredGrants: [videoClient.OwnCapability.MUTE_USERS], hasPermissionsOnly: true, children: jsxRuntime.jsx(TextButton, { onClick: muteAll, children: "Mute all" }) })) }), jsxRuntime.jsx(MenuToggle, { placement: "bottom-end", ToggleButton: ToggleButton$1, children: jsxRuntime.jsx(GenericMenu, { children: Object.keys(UserListTypes).map((lt) => (jsxRuntime.jsx(GenericMenuButtonItem, { "aria-selected": lt === userListType, onClick: () => setUserListType(lt), children: UserListTypes[lt] }, lt))) }) })] }));
1908
+ return (jsxRuntime.jsxs("div", { className: "str-video__participant-list__content-header", children: [jsxRuntime.jsx("div", { className: "str-video__participant-list__content-header-title", children: userListType === 'active' && (jsxRuntime.jsx(videoReactBindings.Restricted, { requiredGrants: [videoClient.OwnCapability.MUTE_USERS], hasPermissionsOnly: true, children: jsxRuntime.jsx(TextButton, { onClick: muteAll, children: t('Mute all') }) })) }), jsxRuntime.jsx(MenuToggle, { placement: "bottom-end", ToggleButton: ToggleButton$1, children: jsxRuntime.jsx(GenericMenu, { children: Object.keys(UserListTypes).map((lt) => (jsxRuntime.jsx(GenericMenuButtonItem, { "aria-selected": lt === userListType, onClick: () => setUserListType(lt), children: UserListTypes[lt] }, lt))) }) })] }));
1908
1909
  };
1909
1910
  const ActiveUsersSearchResults = ({ searchQuery, activeUsersSearchFn: activeUsersSearchFnFromProps, debounceSearchInterval, }) => {
1910
1911
  const { useParticipants } = videoReactBindings.useCallStateHooks();
@@ -2473,15 +2474,26 @@ function applyFilter(obj, filter) {
2473
2474
  }
2474
2475
  return checkConditions(obj, filter);
2475
2476
  }
2477
+ const isDateString = (value) => typeof value === 'string' &&
2478
+ /^((?:(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2}(?:\.\d+)?))(Z|[+-]\d{2}:\d{2})?)$/.test(value);
2476
2479
  function checkConditions(obj, conditions) {
2477
2480
  let match = true;
2478
2481
  for (const key of Object.keys(conditions)) {
2479
2482
  const operator = conditions[key];
2480
2483
  const maybeOperator = operator && typeof operator === 'object';
2481
- const value = obj[key];
2484
+ let value = obj[key];
2485
+ if (value instanceof Date) {
2486
+ value = value.getTime();
2487
+ }
2488
+ else if (isDateString(value)) {
2489
+ value = new Date(value).getTime();
2490
+ }
2482
2491
  if (maybeOperator && '$eq' in operator) {
2483
2492
  const eqOperator = operator;
2484
- match && (match = eqOperator.$eq === value);
2493
+ const eqOperatorValue = isDateString(eqOperator.$eq)
2494
+ ? new Date(eqOperator.$eq).getTime()
2495
+ : eqOperator.$eq;
2496
+ match && (match = eqOperatorValue === value);
2485
2497
  }
2486
2498
  else if (maybeOperator && '$neq' in operator) {
2487
2499
  const neqOperator = operator;
@@ -2500,6 +2512,37 @@ function checkConditions(obj, conditions) {
2500
2512
  match = false;
2501
2513
  }
2502
2514
  }
2515
+ else if (maybeOperator && '$gt' in operator) {
2516
+ const gtOperator = operator;
2517
+ const gtOperatorValue = isDateString(gtOperator.$gt)
2518
+ ? new Date(gtOperator.$gt).getTime()
2519
+ : gtOperator.$gt;
2520
+ match && (match = value > gtOperatorValue);
2521
+ }
2522
+ else if (maybeOperator && '$gte' in operator) {
2523
+ const gteOperator = operator;
2524
+ const gteOperatorValue = isDateString(gteOperator.$gte)
2525
+ ? new Date(gteOperator.$gte).getTime()
2526
+ : gteOperator.$gte;
2527
+ match && (match = value >= gteOperatorValue);
2528
+ }
2529
+ else if (maybeOperator && '$lt' in operator) {
2530
+ const ltOperator = operator;
2531
+ const ltOperatorValue = isDateString(ltOperator.$lt)
2532
+ ? new Date(ltOperator.$lt).getTime()
2533
+ : ltOperator.$lt;
2534
+ match && (match = value < ltOperatorValue);
2535
+ }
2536
+ else if (maybeOperator && '$lte' in operator) {
2537
+ const lteOperator = operator;
2538
+ const lteOperatorValue = isDateString(lteOperator.$lte)
2539
+ ? new Date(lteOperator.$lte).getTime()
2540
+ : lteOperator.$lte;
2541
+ match && (match = value <= lteOperatorValue);
2542
+ // } else if (maybeOperator && '$autocomplete' in operator) {
2543
+ // TODO: regexp solution maybe?
2544
+ // match &&= false;
2545
+ }
2503
2546
  else {
2504
2547
  const eqValue = operator;
2505
2548
  match && (match = eqValue === value);
@@ -2973,7 +3016,7 @@ const checkCanJoinEarly = (startsAt, joinAheadTimeSeconds) => {
2973
3016
  return Date.now() >= +startsAt - (joinAheadTimeSeconds ?? 0) * 1000;
2974
3017
  };
2975
3018
 
2976
- const [major, minor, patch] = ("1.21.3").split('.');
3019
+ const [major, minor, patch] = ("1.23.0").split('.');
2977
3020
  videoClient.setSdkInfo({
2978
3021
  type: videoClient.SfuModels.SdkType.REACT,
2979
3022
  major,
@@ -3061,6 +3104,7 @@ exports.Tooltip = Tooltip;
3061
3104
  exports.Video = Video$1;
3062
3105
  exports.VideoPreview = VideoPreview;
3063
3106
  exports.WithTooltip = WithTooltip;
3107
+ exports.applyFilter = applyFilter;
3064
3108
  exports.defaultEmojiReactionMap = defaultEmojiReactionMap;
3065
3109
  exports.defaultReactions = defaultReactions;
3066
3110
  exports.translations = translations;