@stream-io/video-react-native-sdk 1.26.6 → 1.27.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 +10 -0
- package/dist/commonjs/contexts/BackgroundFilters.js +12 -16
- package/dist/commonjs/contexts/BackgroundFilters.js.map +1 -1
- package/dist/commonjs/contexts/internal/BackgroundFiltersContext.js +14 -0
- package/dist/commonjs/contexts/internal/BackgroundFiltersContext.js.map +1 -0
- package/dist/commonjs/hooks/index.js +11 -0
- package/dist/commonjs/hooks/index.js.map +1 -1
- package/dist/commonjs/hooks/useModeration.js +63 -0
- package/dist/commonjs/hooks/useModeration.js.map +1 -0
- package/dist/commonjs/version.js +1 -1
- package/dist/module/contexts/BackgroundFilters.js +12 -15
- package/dist/module/contexts/BackgroundFilters.js.map +1 -1
- package/dist/module/contexts/internal/BackgroundFiltersContext.js +9 -0
- package/dist/module/contexts/internal/BackgroundFiltersContext.js.map +1 -0
- package/dist/module/hooks/index.js +1 -0
- package/dist/module/hooks/index.js.map +1 -1
- package/dist/module/hooks/useModeration.js +56 -0
- package/dist/module/hooks/useModeration.js.map +1 -0
- package/dist/module/version.js +1 -1
- package/dist/typescript/contexts/BackgroundFilters.d.ts +2 -43
- package/dist/typescript/contexts/BackgroundFilters.d.ts.map +1 -1
- package/dist/typescript/contexts/internal/BackgroundFiltersContext.d.ts +44 -0
- package/dist/typescript/contexts/internal/BackgroundFiltersContext.d.ts.map +1 -0
- package/dist/typescript/hooks/index.d.ts +1 -0
- package/dist/typescript/hooks/index.d.ts.map +1 -1
- package/dist/typescript/hooks/useModeration.d.ts +9 -0
- package/dist/typescript/hooks/useModeration.d.ts.map +1 -0
- package/dist/typescript/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/contexts/BackgroundFilters.tsx +24 -68
- package/src/contexts/internal/BackgroundFiltersContext.tsx +52 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useModeration.ts +83 -0
- package/src/version.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
## [1.27.0](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-1.26.6...@stream-io/video-react-native-sdk-1.27.0) (2025-12-30)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- **react-native:** expose useModeration hook ([#2073](https://github.com/GetStream/stream-video-js/issues/2073)) ([4105ee7](https://github.com/GetStream/stream-video-js/commit/4105ee7c79aa1a1a35d75b4f5f70594eaa7eb33a)), closes [#1822](https://github.com/GetStream/stream-video-js/issues/1822)
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
- correctly restore background blur if available ([b16ffc0](https://github.com/GetStream/stream-video-js/commit/b16ffc0ade1b88437b09fe918deea30d314a530b))
|
|
14
|
+
|
|
5
15
|
## [1.26.6](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-1.26.5...@stream-io/video-react-native-sdk-1.26.6) (2025-12-30)
|
|
6
16
|
|
|
7
17
|
### Dependency Updates
|
|
@@ -7,8 +7,16 @@ exports.useBackgroundFilters = exports.BackgroundFiltersProvider = void 0;
|
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _videoReactBindings = require("@stream-io/video-react-bindings");
|
|
9
9
|
var _reactNative = require("react-native");
|
|
10
|
+
var _BackgroundFiltersContext = require("./internal/BackgroundFiltersContext");
|
|
10
11
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
12
|
+
// for maintaining backwards compatibility
|
|
13
|
+
|
|
14
|
+
let videoFiltersModule;
|
|
15
|
+
try {
|
|
16
|
+
videoFiltersModule = require('@stream-io/video-filters-react-native');
|
|
17
|
+
} catch {}
|
|
11
18
|
const isSupported = function () {
|
|
19
|
+
if (!videoFiltersModule) return false;
|
|
12
20
|
if (_reactNative.Platform.OS === 'ios') {
|
|
13
21
|
// only supported on ios 15 and above
|
|
14
22
|
const currentVersion = parseInt(_reactNative.Platform.Version, 10);
|
|
@@ -16,24 +24,12 @@ const isSupported = function () {
|
|
|
16
24
|
}
|
|
17
25
|
return _reactNative.Platform.OS === 'android';
|
|
18
26
|
}();
|
|
19
|
-
let videoFiltersModule;
|
|
20
|
-
try {
|
|
21
|
-
videoFiltersModule = require('@stream-io/video-filters-react-native');
|
|
22
|
-
} catch {}
|
|
23
|
-
const resolveAssetSourceFunc = _reactNative.Image.resolveAssetSource;
|
|
24
|
-
|
|
25
|
-
// excluding array of images and only allow one image
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* The context for the background filters.
|
|
29
|
-
*/
|
|
30
|
-
const BackgroundFiltersContext = /*#__PURE__*/(0, _react.createContext)(undefined);
|
|
31
27
|
|
|
32
28
|
/**
|
|
33
29
|
* A hook to access the background filters context API.
|
|
34
30
|
*/
|
|
35
31
|
const useBackgroundFilters = () => {
|
|
36
|
-
const context = (0, _react.useContext)(BackgroundFiltersContext);
|
|
32
|
+
const context = (0, _react.useContext)(_BackgroundFiltersContext.BackgroundFiltersContext);
|
|
37
33
|
if (!context) {
|
|
38
34
|
throw new Error('useBackgroundFilters must be used within a BackgroundFiltersProvider');
|
|
39
35
|
}
|
|
@@ -97,7 +93,7 @@ const BackgroundFiltersProvider = ({
|
|
|
97
93
|
} else if (blurIntensity === 'light') {
|
|
98
94
|
filterName = 'BlurLight';
|
|
99
95
|
}
|
|
100
|
-
call?.tracer.trace('
|
|
96
|
+
call?.tracer.trace('videoFilters.apply', filterName);
|
|
101
97
|
call?.camera.state.mediaStream?.getVideoTracks().forEach(track => {
|
|
102
98
|
track._setVideoEffect(filterName);
|
|
103
99
|
});
|
|
@@ -109,7 +105,7 @@ const BackgroundFiltersProvider = ({
|
|
|
109
105
|
if (!isSupported) {
|
|
110
106
|
return;
|
|
111
107
|
}
|
|
112
|
-
const source =
|
|
108
|
+
const source = _reactNative.Image.resolveAssetSource(imageSource);
|
|
113
109
|
const imageUri = source.uri;
|
|
114
110
|
const registeredImageFiltersSet = registeredImageFiltersSetRef.current;
|
|
115
111
|
if (!registeredImageFiltersSet.has(imageUri)) {
|
|
@@ -143,7 +139,7 @@ const BackgroundFiltersProvider = ({
|
|
|
143
139
|
applyVideoBlurFilter,
|
|
144
140
|
disableAllFilters
|
|
145
141
|
}), [applyBackgroundBlurFilter, applyBackgroundImageFilter, applyVideoBlurFilter, currentBackgroundFilter, disableAllFilters]);
|
|
146
|
-
return /*#__PURE__*/_react.default.createElement(BackgroundFiltersContext.Provider, {
|
|
142
|
+
return /*#__PURE__*/_react.default.createElement(_BackgroundFiltersContext.BackgroundFiltersContext.Provider, {
|
|
147
143
|
value: value
|
|
148
144
|
}, children);
|
|
149
145
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_videoReactBindings","_reactNative","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","isSupported","Platform","OS","currentVersion","parseInt","Version","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_videoReactBindings","_reactNative","_BackgroundFiltersContext","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","videoFiltersModule","isSupported","Platform","OS","currentVersion","parseInt","Version","useBackgroundFilters","context","useContext","BackgroundFiltersContext","Error","exports","BackgroundFiltersProvider","children","useCall","isBackgroundBlurRegisteredRef","useRef","isVideoBlurRegisteredRef","registeredImageFiltersSetRef","Set","currentBackgroundFilter","setCurrentBackgroundFilter","useState","applyBackgroundBlurFilter","useCallback","blurIntensity","current","registerBackgroundBlurVideoFilters","filterName","tracer","trace","camera","state","mediaStream","getVideoTracks","forEach","track","_setVideoEffect","blur","applyVideoBlurFilter","registerBlurVideoFilters","applyBackgroundImageFilter","imageSource","source","Image","resolveAssetSource","imageUri","uri","registeredImageFiltersSet","registerVirtualBackgroundFilter","add","image","disableAllFilters","undefined","value","useMemo","createElement","Provider"],"sourceRoot":"../../../src","sources":["contexts/BackgroundFilters.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.BackgroundFiltersContext = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
// excluding array of images and only allow one image
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The context for the background filters.
|
|
12
|
+
*/
|
|
13
|
+
const BackgroundFiltersContext = exports.BackgroundFiltersContext = /*#__PURE__*/(0, _react.createContext)(undefined);
|
|
14
|
+
//# sourceMappingURL=BackgroundFiltersContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","BackgroundFiltersContext","exports","createContext","undefined"],"sourceRoot":"../../../../src","sources":["contexts/internal/BackgroundFiltersContext.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAGA;;AA2CA;AACA;AACA;AACO,MAAMC,wBAAwB,GAAAC,OAAA,CAAAD,wBAAA,gBAAG,IAAAE,oBAAa,EAEnDC,SAAS,CAAC","ignoreList":[]}
|
|
@@ -124,4 +124,15 @@ Object.keys(_useSpeechDetection).forEach(function (key) {
|
|
|
124
124
|
}
|
|
125
125
|
});
|
|
126
126
|
});
|
|
127
|
+
var _useModeration = require("./useModeration");
|
|
128
|
+
Object.keys(_useModeration).forEach(function (key) {
|
|
129
|
+
if (key === "default" || key === "__esModule") return;
|
|
130
|
+
if (key in exports && exports[key] === _useModeration[key]) return;
|
|
131
|
+
Object.defineProperty(exports, key, {
|
|
132
|
+
enumerable: true,
|
|
133
|
+
get: function () {
|
|
134
|
+
return _useModeration[key];
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
});
|
|
127
138
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_usePermissionRequest","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_usePermissionNotification","_push","_useAndroidKeepCallAliveEffect","_useIsIosScreenshareBroadcastStarted","_useIsInPiPMode","_useAutoEnterPiPEffect","_useScreenShareButton","_useTrackDimensions","_useScreenshot","_useSpeechDetection"],"sourceRoot":"../../../src","sources":["hooks/index.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_usePermissionRequest","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_usePermissionNotification","_push","_useAndroidKeepCallAliveEffect","_useIsIosScreenshareBroadcastStarted","_useIsInPiPMode","_useAutoEnterPiPEffect","_useScreenShareButton","_useTrackDimensions","_useScreenshot","_useSpeechDetection","_useModeration"],"sourceRoot":"../../../src","sources":["hooks/index.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useModeration = void 0;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _videoReactBindings = require("@stream-io/video-react-bindings");
|
|
9
|
+
var _BackgroundFiltersContext = require("../contexts/internal/BackgroundFiltersContext");
|
|
10
|
+
const useModeration = options => {
|
|
11
|
+
const {
|
|
12
|
+
duration = 5000
|
|
13
|
+
} = options || {};
|
|
14
|
+
const call = (0, _videoReactBindings.useCall)();
|
|
15
|
+
|
|
16
|
+
// accessing the filters context directly, as it is optional, but our
|
|
17
|
+
// useBackgroundFilters() throws an error if used outside the provider
|
|
18
|
+
const filtersApi = (0, _react.useContext)(_BackgroundFiltersContext.BackgroundFiltersContext);
|
|
19
|
+
const {
|
|
20
|
+
isSupported = false,
|
|
21
|
+
currentBackgroundFilter,
|
|
22
|
+
applyBackgroundBlurFilter,
|
|
23
|
+
applyBackgroundImageFilter,
|
|
24
|
+
applyVideoBlurFilter,
|
|
25
|
+
disableAllFilters
|
|
26
|
+
} = filtersApi || {};
|
|
27
|
+
const blurTimeoutRef = (0, _react.useRef)(undefined);
|
|
28
|
+
const restoreRef = (0, _react.useRef)(undefined);
|
|
29
|
+
(0, _react.useEffect)(() => {
|
|
30
|
+
if (!call) return;
|
|
31
|
+
const unsubscribe = call.on('call.moderation_blur', () => {
|
|
32
|
+
const turnCameraOff = () => call.camera.disable().catch(err => {
|
|
33
|
+
console.error(`Failed to disable camera`, err);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
// not scheduling a timeout to enable the camera
|
|
37
|
+
clearTimeout(blurTimeoutRef.current);
|
|
38
|
+
if (!isSupported) return turnCameraOff();
|
|
39
|
+
restoreRef.current = (restoreRef.current || Promise.resolve()).then(() => applyVideoBlurFilter?.('heavy').then(() => {
|
|
40
|
+
if (duration <= 0) return;
|
|
41
|
+
const restore = () => {
|
|
42
|
+
const {
|
|
43
|
+
blur,
|
|
44
|
+
image
|
|
45
|
+
} = currentBackgroundFilter || {};
|
|
46
|
+
const action = blur ? applyBackgroundBlurFilter?.(blur) : image ? applyBackgroundImageFilter?.(image) : Promise.resolve(disableAllFilters?.());
|
|
47
|
+
action?.catch(err => {
|
|
48
|
+
console.error(`Failed to restore pre-moderation effect`, err);
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
blurTimeoutRef.current = setTimeout(restore, duration);
|
|
52
|
+
}, turnCameraOff));
|
|
53
|
+
});
|
|
54
|
+
return () => {
|
|
55
|
+
unsubscribe();
|
|
56
|
+
};
|
|
57
|
+
}, [applyBackgroundBlurFilter, applyBackgroundImageFilter, applyVideoBlurFilter, call, currentBackgroundFilter, disableAllFilters, duration, isSupported]);
|
|
58
|
+
(0, _react.useEffect)(() => () => {
|
|
59
|
+
restoreRef.current?.then(() => clearTimeout(blurTimeoutRef.current));
|
|
60
|
+
}, []);
|
|
61
|
+
};
|
|
62
|
+
exports.useModeration = useModeration;
|
|
63
|
+
//# sourceMappingURL=useModeration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","_videoReactBindings","_BackgroundFiltersContext","useModeration","options","duration","call","useCall","filtersApi","useContext","BackgroundFiltersContext","isSupported","currentBackgroundFilter","applyBackgroundBlurFilter","applyBackgroundImageFilter","applyVideoBlurFilter","disableAllFilters","blurTimeoutRef","useRef","undefined","restoreRef","useEffect","unsubscribe","on","turnCameraOff","camera","disable","catch","err","console","error","clearTimeout","current","Promise","resolve","then","restore","blur","image","action","setTimeout","exports"],"sourceRoot":"../../../src","sources":["hooks/useModeration.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAD,OAAA;AACA,IAAAE,yBAAA,GAAAF,OAAA;AAUO,MAAMG,aAAa,GAAIC,OAA2B,IAAK;EAC5D,MAAM;IAAEC,QAAQ,GAAG;EAAK,CAAC,GAAGD,OAAO,IAAI,CAAC,CAAC;EACzC,MAAME,IAAI,GAAG,IAAAC,2BAAO,EAAC,CAAC;;EAEtB;EACA;EACA,MAAMC,UAAU,GAAG,IAAAC,iBAAU,EAACC,kDAAwB,CAAC;EACvD,MAAM;IACJC,WAAW,GAAG,KAAK;IACnBC,uBAAuB;IACvBC,yBAAyB;IACzBC,0BAA0B;IAC1BC,oBAAoB;IACpBC;EACF,CAAC,GAAGR,UAAU,IAAI,CAAC,CAAC;EACpB,MAAMS,cAAc,GAAG,IAAAC,aAAM,EAAgCC,SAAS,CAAC;EACvE,MAAMC,UAAU,GAAG,IAAAF,aAAM,EAAgBC,SAAS,CAAC;EACnD,IAAAE,gBAAS,EAAC,MAAM;IACd,IAAI,CAACf,IAAI,EAAE;IACX,MAAMgB,WAAW,GAAGhB,IAAI,CAACiB,EAAE,CAAC,sBAAsB,EAAE,MAAM;MACxD,MAAMC,aAAa,GAAGA,CAAA,KACpBlB,IAAI,CAACmB,MAAM,CAACC,OAAO,CAAC,CAAC,CAACC,KAAK,CAAEC,GAAG,IAAK;QACnCC,OAAO,CAACC,KAAK,CAAC,0BAA0B,EAAEF,GAAG,CAAC;MAChD,CAAC,CAAC;;MAEJ;MACAG,YAAY,CAACd,cAAc,CAACe,OAAO,CAAC;MACpC,IAAI,CAACrB,WAAW,EAAE,OAAOa,aAAa,CAAC,CAAC;MAExCJ,UAAU,CAACY,OAAO,GAAG,CAACZ,UAAU,CAACY,OAAO,IAAIC,OAAO,CAACC,OAAO,CAAC,CAAC,EAAEC,IAAI,CAAC,MAClEpB,oBAAoB,GAAG,OAAO,CAAC,CAACoB,IAAI,CAAC,MAAM;QACzC,IAAI9B,QAAQ,IAAI,CAAC,EAAE;QAEnB,MAAM+B,OAAO,GAAGA,CAAA,KAAM;UACpB,MAAM;YAAEC,IAAI;YAAEC;UAAM,CAAC,GAAG1B,uBAAuB,IAAI,CAAC,CAAC;UACrD,MAAM2B,MAAM,GAAGF,IAAI,GACfxB,yBAAyB,GAAGwB,IAAI,CAAC,GACjCC,KAAK,GACHxB,0BAA0B,GAAGwB,KAAK,CAAC,GACnCL,OAAO,CAACC,OAAO,CAAClB,iBAAiB,GAAG,CAAC,CAAC;UAE5CuB,MAAM,EAAEZ,KAAK,CAAEC,GAAG,IAAK;YACrBC,OAAO,CAACC,KAAK,CAAC,yCAAyC,EAAEF,GAAG,CAAC;UAC/D,CAAC,CAAC;QACJ,CAAC;QAEDX,cAAc,CAACe,OAAO,GAAGQ,UAAU,CAACJ,OAAO,EAAE/B,QAAQ,CAAC;MACxD,CAAC,EAAEmB,aAAa,CAClB,CAAC;IACH,CAAC,CAAC;IACF,OAAO,MAAM;MACXF,WAAW,CAAC,CAAC;IACf,CAAC;EACH,CAAC,EAAE,CACDT,yBAAyB,EACzBC,0BAA0B,EAC1BC,oBAAoB,EACpBT,IAAI,EACJM,uBAAuB,EACvBI,iBAAiB,EACjBX,QAAQ,EACRM,WAAW,CACZ,CAAC;EAEF,IAAAU,gBAAS,EACP,MAAM,MAAM;IACVD,UAAU,CAACY,OAAO,EAAEG,IAAI,CAAC,MAAMJ,YAAY,CAACd,cAAc,CAACe,OAAO,CAAC,CAAC;EACtE,CAAC,EACD,EACF,CAAC;AACH,CAAC;AAACS,OAAA,CAAAtC,aAAA,GAAAA,aAAA","ignoreList":[]}
|
package/dist/commonjs/version.js
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, { useCallback, useContext, useMemo, useRef, useState } from 'react';
|
|
2
2
|
import { useCall } from '@stream-io/video-react-bindings';
|
|
3
3
|
import { Image, Platform } from 'react-native';
|
|
4
|
+
import { BackgroundFiltersContext } from './internal/BackgroundFiltersContext';
|
|
5
|
+
|
|
6
|
+
// for maintaining backwards compatibility
|
|
7
|
+
|
|
8
|
+
let videoFiltersModule;
|
|
9
|
+
try {
|
|
10
|
+
videoFiltersModule = require('@stream-io/video-filters-react-native');
|
|
11
|
+
} catch {}
|
|
4
12
|
const isSupported = function () {
|
|
13
|
+
if (!videoFiltersModule) return false;
|
|
5
14
|
if (Platform.OS === 'ios') {
|
|
6
15
|
// only supported on ios 15 and above
|
|
7
16
|
const currentVersion = parseInt(Platform.Version, 10);
|
|
@@ -9,18 +18,6 @@ const isSupported = function () {
|
|
|
9
18
|
}
|
|
10
19
|
return Platform.OS === 'android';
|
|
11
20
|
}();
|
|
12
|
-
let videoFiltersModule;
|
|
13
|
-
try {
|
|
14
|
-
videoFiltersModule = require('@stream-io/video-filters-react-native');
|
|
15
|
-
} catch {}
|
|
16
|
-
const resolveAssetSourceFunc = Image.resolveAssetSource;
|
|
17
|
-
|
|
18
|
-
// excluding array of images and only allow one image
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* The context for the background filters.
|
|
22
|
-
*/
|
|
23
|
-
const BackgroundFiltersContext = /*#__PURE__*/createContext(undefined);
|
|
24
21
|
|
|
25
22
|
/**
|
|
26
23
|
* A hook to access the background filters context API.
|
|
@@ -89,7 +86,7 @@ export const BackgroundFiltersProvider = ({
|
|
|
89
86
|
} else if (blurIntensity === 'light') {
|
|
90
87
|
filterName = 'BlurLight';
|
|
91
88
|
}
|
|
92
|
-
call?.tracer.trace('
|
|
89
|
+
call?.tracer.trace('videoFilters.apply', filterName);
|
|
93
90
|
call?.camera.state.mediaStream?.getVideoTracks().forEach(track => {
|
|
94
91
|
track._setVideoEffect(filterName);
|
|
95
92
|
});
|
|
@@ -101,7 +98,7 @@ export const BackgroundFiltersProvider = ({
|
|
|
101
98
|
if (!isSupported) {
|
|
102
99
|
return;
|
|
103
100
|
}
|
|
104
|
-
const source =
|
|
101
|
+
const source = Image.resolveAssetSource(imageSource);
|
|
105
102
|
const imageUri = source.uri;
|
|
106
103
|
const registeredImageFiltersSet = registeredImageFiltersSetRef.current;
|
|
107
104
|
if (!registeredImageFiltersSet.has(imageUri)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","
|
|
1
|
+
{"version":3,"names":["React","useCallback","useContext","useMemo","useRef","useState","useCall","Image","Platform","BackgroundFiltersContext","videoFiltersModule","require","isSupported","OS","currentVersion","parseInt","Version","useBackgroundFilters","context","Error","BackgroundFiltersProvider","children","call","isBackgroundBlurRegisteredRef","isVideoBlurRegisteredRef","registeredImageFiltersSetRef","Set","currentBackgroundFilter","setCurrentBackgroundFilter","applyBackgroundBlurFilter","blurIntensity","current","registerBackgroundBlurVideoFilters","filterName","tracer","trace","camera","state","mediaStream","getVideoTracks","forEach","track","_setVideoEffect","blur","applyVideoBlurFilter","registerBlurVideoFilters","applyBackgroundImageFilter","imageSource","source","resolveAssetSource","imageUri","uri","registeredImageFiltersSet","has","registerVirtualBackgroundFilter","add","image","disableAllFilters","undefined","value","createElement","Provider"],"sourceRoot":"../../../src","sources":["contexts/BackgroundFilters.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { createContext } from 'react';
|
|
2
|
+
|
|
3
|
+
// excluding array of images and only allow one image
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The context for the background filters.
|
|
7
|
+
*/
|
|
8
|
+
export const BackgroundFiltersContext = /*#__PURE__*/createContext(undefined);
|
|
9
|
+
//# sourceMappingURL=BackgroundFiltersContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createContext","BackgroundFiltersContext","undefined"],"sourceRoot":"../../../../src","sources":["contexts/internal/BackgroundFiltersContext.tsx"],"mappings":"AAAA,SAASA,aAAa,QAAQ,OAAO;;AAGrC;;AA2CA;AACA;AACA;AACA,OAAO,MAAMC,wBAAwB,gBAAGD,aAAa,CAEnDE,SAAS,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["hooks/index.ts"],"mappings":"AAAA,cAAc,wBAAwB;AACtC,cAAc,6BAA6B;AAC3C,cAAc,QAAQ;AACtB,cAAc,iCAAiC;AAC/C,cAAc,uCAAuC;AACrD,cAAc,kBAAkB;AAChC,cAAc,yBAAyB;AACvC,cAAc,wBAAwB;AACtC,cAAc,sBAAsB;AACpC,cAAc,iBAAiB;AAC/B,cAAc,sBAAsB","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../src","sources":["hooks/index.ts"],"mappings":"AAAA,cAAc,wBAAwB;AACtC,cAAc,6BAA6B;AAC3C,cAAc,QAAQ;AACtB,cAAc,iCAAiC;AAC/C,cAAc,uCAAuC;AACrD,cAAc,kBAAkB;AAChC,cAAc,yBAAyB;AACvC,cAAc,wBAAwB;AACtC,cAAc,sBAAsB;AACpC,cAAc,iBAAiB;AAC/B,cAAc,sBAAsB;AACpC,cAAc,iBAAiB","ignoreList":[]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { useContext, useEffect, useRef } from 'react';
|
|
2
|
+
import { useCall } from '@stream-io/video-react-bindings';
|
|
3
|
+
import { BackgroundFiltersContext } from '../contexts/internal/BackgroundFiltersContext';
|
|
4
|
+
export const useModeration = options => {
|
|
5
|
+
const {
|
|
6
|
+
duration = 5000
|
|
7
|
+
} = options || {};
|
|
8
|
+
const call = useCall();
|
|
9
|
+
|
|
10
|
+
// accessing the filters context directly, as it is optional, but our
|
|
11
|
+
// useBackgroundFilters() throws an error if used outside the provider
|
|
12
|
+
const filtersApi = useContext(BackgroundFiltersContext);
|
|
13
|
+
const {
|
|
14
|
+
isSupported = false,
|
|
15
|
+
currentBackgroundFilter,
|
|
16
|
+
applyBackgroundBlurFilter,
|
|
17
|
+
applyBackgroundImageFilter,
|
|
18
|
+
applyVideoBlurFilter,
|
|
19
|
+
disableAllFilters
|
|
20
|
+
} = filtersApi || {};
|
|
21
|
+
const blurTimeoutRef = useRef(undefined);
|
|
22
|
+
const restoreRef = useRef(undefined);
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
if (!call) return;
|
|
25
|
+
const unsubscribe = call.on('call.moderation_blur', () => {
|
|
26
|
+
const turnCameraOff = () => call.camera.disable().catch(err => {
|
|
27
|
+
console.error(`Failed to disable camera`, err);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
// not scheduling a timeout to enable the camera
|
|
31
|
+
clearTimeout(blurTimeoutRef.current);
|
|
32
|
+
if (!isSupported) return turnCameraOff();
|
|
33
|
+
restoreRef.current = (restoreRef.current || Promise.resolve()).then(() => applyVideoBlurFilter?.('heavy').then(() => {
|
|
34
|
+
if (duration <= 0) return;
|
|
35
|
+
const restore = () => {
|
|
36
|
+
const {
|
|
37
|
+
blur,
|
|
38
|
+
image
|
|
39
|
+
} = currentBackgroundFilter || {};
|
|
40
|
+
const action = blur ? applyBackgroundBlurFilter?.(blur) : image ? applyBackgroundImageFilter?.(image) : Promise.resolve(disableAllFilters?.());
|
|
41
|
+
action?.catch(err => {
|
|
42
|
+
console.error(`Failed to restore pre-moderation effect`, err);
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
blurTimeoutRef.current = setTimeout(restore, duration);
|
|
46
|
+
}, turnCameraOff));
|
|
47
|
+
});
|
|
48
|
+
return () => {
|
|
49
|
+
unsubscribe();
|
|
50
|
+
};
|
|
51
|
+
}, [applyBackgroundBlurFilter, applyBackgroundImageFilter, applyVideoBlurFilter, call, currentBackgroundFilter, disableAllFilters, duration, isSupported]);
|
|
52
|
+
useEffect(() => () => {
|
|
53
|
+
restoreRef.current?.then(() => clearTimeout(blurTimeoutRef.current));
|
|
54
|
+
}, []);
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=useModeration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useContext","useEffect","useRef","useCall","BackgroundFiltersContext","useModeration","options","duration","call","filtersApi","isSupported","currentBackgroundFilter","applyBackgroundBlurFilter","applyBackgroundImageFilter","applyVideoBlurFilter","disableAllFilters","blurTimeoutRef","undefined","restoreRef","unsubscribe","on","turnCameraOff","camera","disable","catch","err","console","error","clearTimeout","current","Promise","resolve","then","restore","blur","image","action","setTimeout"],"sourceRoot":"../../../src","sources":["hooks/useModeration.ts"],"mappings":"AAAA,SAASA,UAAU,EAAEC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACrD,SAASC,OAAO,QAAQ,iCAAiC;AACzD,SAASC,wBAAwB,QAAQ,+CAA+C;AAUxF,OAAO,MAAMC,aAAa,GAAIC,OAA2B,IAAK;EAC5D,MAAM;IAAEC,QAAQ,GAAG;EAAK,CAAC,GAAGD,OAAO,IAAI,CAAC,CAAC;EACzC,MAAME,IAAI,GAAGL,OAAO,CAAC,CAAC;;EAEtB;EACA;EACA,MAAMM,UAAU,GAAGT,UAAU,CAACI,wBAAwB,CAAC;EACvD,MAAM;IACJM,WAAW,GAAG,KAAK;IACnBC,uBAAuB;IACvBC,yBAAyB;IACzBC,0BAA0B;IAC1BC,oBAAoB;IACpBC;EACF,CAAC,GAAGN,UAAU,IAAI,CAAC,CAAC;EACpB,MAAMO,cAAc,GAAGd,MAAM,CAAgCe,SAAS,CAAC;EACvE,MAAMC,UAAU,GAAGhB,MAAM,CAAgBe,SAAS,CAAC;EACnDhB,SAAS,CAAC,MAAM;IACd,IAAI,CAACO,IAAI,EAAE;IACX,MAAMW,WAAW,GAAGX,IAAI,CAACY,EAAE,CAAC,sBAAsB,EAAE,MAAM;MACxD,MAAMC,aAAa,GAAGA,CAAA,KACpBb,IAAI,CAACc,MAAM,CAACC,OAAO,CAAC,CAAC,CAACC,KAAK,CAAEC,GAAG,IAAK;QACnCC,OAAO,CAACC,KAAK,CAAC,0BAA0B,EAAEF,GAAG,CAAC;MAChD,CAAC,CAAC;;MAEJ;MACAG,YAAY,CAACZ,cAAc,CAACa,OAAO,CAAC;MACpC,IAAI,CAACnB,WAAW,EAAE,OAAOW,aAAa,CAAC,CAAC;MAExCH,UAAU,CAACW,OAAO,GAAG,CAACX,UAAU,CAACW,OAAO,IAAIC,OAAO,CAACC,OAAO,CAAC,CAAC,EAAEC,IAAI,CAAC,MAClElB,oBAAoB,GAAG,OAAO,CAAC,CAACkB,IAAI,CAAC,MAAM;QACzC,IAAIzB,QAAQ,IAAI,CAAC,EAAE;QAEnB,MAAM0B,OAAO,GAAGA,CAAA,KAAM;UACpB,MAAM;YAAEC,IAAI;YAAEC;UAAM,CAAC,GAAGxB,uBAAuB,IAAI,CAAC,CAAC;UACrD,MAAMyB,MAAM,GAAGF,IAAI,GACftB,yBAAyB,GAAGsB,IAAI,CAAC,GACjCC,KAAK,GACHtB,0BAA0B,GAAGsB,KAAK,CAAC,GACnCL,OAAO,CAACC,OAAO,CAAChB,iBAAiB,GAAG,CAAC,CAAC;UAE5CqB,MAAM,EAAEZ,KAAK,CAAEC,GAAG,IAAK;YACrBC,OAAO,CAACC,KAAK,CAAC,yCAAyC,EAAEF,GAAG,CAAC;UAC/D,CAAC,CAAC;QACJ,CAAC;QAEDT,cAAc,CAACa,OAAO,GAAGQ,UAAU,CAACJ,OAAO,EAAE1B,QAAQ,CAAC;MACxD,CAAC,EAAEc,aAAa,CAClB,CAAC;IACH,CAAC,CAAC;IACF,OAAO,MAAM;MACXF,WAAW,CAAC,CAAC;IACf,CAAC;EACH,CAAC,EAAE,CACDP,yBAAyB,EACzBC,0BAA0B,EAC1BC,oBAAoB,EACpBN,IAAI,EACJG,uBAAuB,EACvBI,iBAAiB,EACjBR,QAAQ,EACRG,WAAW,CACZ,CAAC;EAEFT,SAAS,CACP,MAAM,MAAM;IACViB,UAAU,CAACW,OAAO,EAAEG,IAAI,CAAC,MAAMJ,YAAY,CAACZ,cAAc,CAACa,OAAO,CAAC,CAAC;EACtE,CAAC,EACD,EACF,CAAC;AACH,CAAC","ignoreList":[]}
|
package/dist/module/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '1.
|
|
1
|
+
export const version = '1.27.0';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -1,49 +1,9 @@
|
|
|
1
1
|
import React, { type PropsWithChildren } from 'react';
|
|
2
|
-
|
|
3
|
-
declare const resolveAssetSourceFunc: typeof Image.resolveAssetSource;
|
|
4
|
-
type ImageSourceType = Exclude<Parameters<typeof resolveAssetSourceFunc>[0], Array<any>>;
|
|
5
|
-
export type BlurIntensity = 'light' | 'medium' | 'heavy';
|
|
6
|
-
export type BackgroundFilterType = 'blur' | 'image';
|
|
7
|
-
export type CurrentBackgroundFilter = {
|
|
8
|
-
blur?: BlurIntensity;
|
|
9
|
-
image?: ImageSourceType;
|
|
10
|
-
};
|
|
11
|
-
export type BackgroundFiltersAPI = {
|
|
12
|
-
/**
|
|
13
|
-
* The currently applied background filter. Undefined value indicates that no filter is applied.
|
|
14
|
-
*/
|
|
15
|
-
currentBackgroundFilter: CurrentBackgroundFilter | undefined;
|
|
16
|
-
/**
|
|
17
|
-
* Whether the current device supports the background filters.
|
|
18
|
-
*/
|
|
19
|
-
isSupported: boolean;
|
|
20
|
-
/**
|
|
21
|
-
* Applies a background image filter to the video.
|
|
22
|
-
*
|
|
23
|
-
* @param imageSource the URL of the image to use as the background.
|
|
24
|
-
*/
|
|
25
|
-
applyBackgroundImageFilter: (imageSource: ImageSourceType) => void;
|
|
26
|
-
/**
|
|
27
|
-
* Applies a background blur filter to the video.
|
|
28
|
-
*
|
|
29
|
-
* @param blurLevel the level of blur to apply to the background.
|
|
30
|
-
*/
|
|
31
|
-
applyBackgroundBlurFilter: (blurIntensity: BlurIntensity) => void;
|
|
32
|
-
/**
|
|
33
|
-
* Applies a video blur filter to the video.
|
|
34
|
-
*
|
|
35
|
-
* @param blurIntensity the level of blur to apply to the video.
|
|
36
|
-
*/
|
|
37
|
-
applyVideoBlurFilter: (blurIntensity: BlurIntensity) => void;
|
|
38
|
-
/**
|
|
39
|
-
* Disables all filters applied to the video.
|
|
40
|
-
*/
|
|
41
|
-
disableAllFilters: () => void;
|
|
42
|
-
};
|
|
2
|
+
export type { BlurIntensity, CurrentBackgroundFilter, BackgroundFiltersAPI, } from './internal/BackgroundFiltersContext';
|
|
43
3
|
/**
|
|
44
4
|
* A hook to access the background filters context API.
|
|
45
5
|
*/
|
|
46
|
-
export declare const useBackgroundFilters: () => BackgroundFiltersAPI;
|
|
6
|
+
export declare const useBackgroundFilters: () => import("./internal/BackgroundFiltersContext").BackgroundFiltersAPI;
|
|
47
7
|
/**
|
|
48
8
|
* A provider component that enables the use of background filters in your app.
|
|
49
9
|
*
|
|
@@ -51,5 +11,4 @@ export declare const useBackgroundFilters: () => BackgroundFiltersAPI;
|
|
|
51
11
|
* in your project before using this component.
|
|
52
12
|
*/
|
|
53
13
|
export declare const BackgroundFiltersProvider: ({ children }: PropsWithChildren) => React.JSX.Element;
|
|
54
|
-
export {};
|
|
55
14
|
//# sourceMappingURL=BackgroundFilters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackgroundFilters.d.ts","sourceRoot":"","sources":["../../../src/contexts/BackgroundFilters.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"BackgroundFilters.d.ts","sourceRoot":"","sources":["../../../src/contexts/BackgroundFilters.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EACZ,KAAK,iBAAiB,EAMvB,MAAM,OAAO,CAAC;AAYf,YAAY,EACV,aAAa,EACb,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,qCAAqC,CAAC;AAqB7C;;GAEG;AACH,eAAO,MAAM,oBAAoB,0EAahC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,GAAI,cAAc,iBAAiB,sBA8HxE,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type ImageSourcePropType } from 'react-native';
|
|
2
|
+
export type ImageSourceType = Exclude<ImageSourcePropType, Array<any>>;
|
|
3
|
+
export type BlurIntensity = 'light' | 'medium' | 'heavy';
|
|
4
|
+
export type CurrentBackgroundFilter = {
|
|
5
|
+
blur?: BlurIntensity;
|
|
6
|
+
image?: ImageSourceType;
|
|
7
|
+
};
|
|
8
|
+
export type BackgroundFiltersAPI = {
|
|
9
|
+
/**
|
|
10
|
+
* The currently applied background filter. Undefined value indicates that no filter is applied.
|
|
11
|
+
*/
|
|
12
|
+
currentBackgroundFilter: CurrentBackgroundFilter | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Whether the current device supports the background filters.
|
|
15
|
+
*/
|
|
16
|
+
isSupported: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Applies a background image filter to the video.
|
|
19
|
+
*
|
|
20
|
+
* @param imageSource the URL of the image to use as the background.
|
|
21
|
+
*/
|
|
22
|
+
applyBackgroundImageFilter: (imageSource: ImageSourceType) => Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Applies a background blur filter to the video.
|
|
25
|
+
*
|
|
26
|
+
* @param blurLevel the level of blur to apply to the background.
|
|
27
|
+
*/
|
|
28
|
+
applyBackgroundBlurFilter: (blurIntensity: BlurIntensity) => Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Applies a video blur filter to the video.
|
|
31
|
+
*
|
|
32
|
+
* @param blurIntensity the level of blur to apply to the video.
|
|
33
|
+
*/
|
|
34
|
+
applyVideoBlurFilter: (blurIntensity: BlurIntensity) => Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Disables all filters applied to the video.
|
|
37
|
+
*/
|
|
38
|
+
disableAllFilters: () => void;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* The context for the background filters.
|
|
42
|
+
*/
|
|
43
|
+
export declare const BackgroundFiltersContext: import("react").Context<BackgroundFiltersAPI | undefined>;
|
|
44
|
+
//# sourceMappingURL=BackgroundFiltersContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BackgroundFiltersContext.d.ts","sourceRoot":"","sources":["../../../../src/contexts/internal/BackgroundFiltersContext.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGxD,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,mBAAmB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAEvE,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEzD,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC;;OAEG;IACH,uBAAuB,EAAE,uBAAuB,GAAG,SAAS,CAAC;IAC7D;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,0BAA0B,EAAE,CAAC,WAAW,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E;;;;OAIG;IACH,yBAAyB,EAAE,CAAC,aAAa,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E;;;;OAIG;IACH,oBAAoB,EAAE,CAAC,aAAa,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE;;OAEG;IACH,iBAAiB,EAAE,MAAM,IAAI,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,2DAEzB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,QAAQ,CAAC;AACvB,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AACtD,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,QAAQ,CAAC;AACvB,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AACtD,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface ModerationOptions {
|
|
2
|
+
/**
|
|
3
|
+
* How long the moderation effect should stay active before being disabled.
|
|
4
|
+
* Set to `0` to keep it active indefinitely. Defaults to 5000 ms.
|
|
5
|
+
*/
|
|
6
|
+
duration?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare const useModeration: (options?: ModerationOptions) => void;
|
|
9
|
+
//# sourceMappingURL=useModeration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useModeration.d.ts","sourceRoot":"","sources":["../../../src/hooks/useModeration.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,aAAa,GAAI,UAAU,iBAAiB,SAsExD,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "1.
|
|
1
|
+
export declare const version = "1.27.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import React, {
|
|
2
|
-
createContext,
|
|
3
2
|
type PropsWithChildren,
|
|
4
3
|
useCallback,
|
|
5
4
|
useContext,
|
|
@@ -10,15 +9,19 @@ import React, {
|
|
|
10
9
|
import { MediaStream } from '@stream-io/react-native-webrtc';
|
|
11
10
|
import { useCall } from '@stream-io/video-react-bindings';
|
|
12
11
|
import { Image, Platform } from 'react-native';
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
12
|
+
import {
|
|
13
|
+
BackgroundFiltersContext,
|
|
14
|
+
type BlurIntensity,
|
|
15
|
+
type CurrentBackgroundFilter,
|
|
16
|
+
type ImageSourceType,
|
|
17
|
+
} from './internal/BackgroundFiltersContext';
|
|
18
|
+
|
|
19
|
+
// for maintaining backwards compatibility
|
|
20
|
+
export type {
|
|
21
|
+
BlurIntensity,
|
|
22
|
+
CurrentBackgroundFilter,
|
|
23
|
+
BackgroundFiltersAPI,
|
|
24
|
+
} from './internal/BackgroundFiltersContext';
|
|
22
25
|
|
|
23
26
|
type VideoFiltersModuleType =
|
|
24
27
|
typeof import('@stream-io/video-filters-react-native');
|
|
@@ -29,62 +32,15 @@ try {
|
|
|
29
32
|
videoFiltersModule = require('@stream-io/video-filters-react-native');
|
|
30
33
|
} catch {}
|
|
31
34
|
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
export type BackgroundFilterType = 'blur' | 'image';
|
|
43
|
-
|
|
44
|
-
export type CurrentBackgroundFilter = {
|
|
45
|
-
blur?: BlurIntensity;
|
|
46
|
-
image?: ImageSourceType;
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
export type BackgroundFiltersAPI = {
|
|
50
|
-
/**
|
|
51
|
-
* The currently applied background filter. Undefined value indicates that no filter is applied.
|
|
52
|
-
*/
|
|
53
|
-
currentBackgroundFilter: CurrentBackgroundFilter | undefined;
|
|
54
|
-
/**
|
|
55
|
-
* Whether the current device supports the background filters.
|
|
56
|
-
*/
|
|
57
|
-
isSupported: boolean;
|
|
58
|
-
/**
|
|
59
|
-
* Applies a background image filter to the video.
|
|
60
|
-
*
|
|
61
|
-
* @param imageSource the URL of the image to use as the background.
|
|
62
|
-
*/
|
|
63
|
-
applyBackgroundImageFilter: (imageSource: ImageSourceType) => void;
|
|
64
|
-
/**
|
|
65
|
-
* Applies a background blur filter to the video.
|
|
66
|
-
*
|
|
67
|
-
* @param blurLevel the level of blur to apply to the background.
|
|
68
|
-
*/
|
|
69
|
-
applyBackgroundBlurFilter: (blurIntensity: BlurIntensity) => void;
|
|
70
|
-
/**
|
|
71
|
-
* Applies a video blur filter to the video.
|
|
72
|
-
*
|
|
73
|
-
* @param blurIntensity the level of blur to apply to the video.
|
|
74
|
-
*/
|
|
75
|
-
applyVideoBlurFilter: (blurIntensity: BlurIntensity) => void;
|
|
76
|
-
/**
|
|
77
|
-
* Disables all filters applied to the video.
|
|
78
|
-
*/
|
|
79
|
-
disableAllFilters: () => void;
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* The context for the background filters.
|
|
84
|
-
*/
|
|
85
|
-
const BackgroundFiltersContext = createContext<
|
|
86
|
-
BackgroundFiltersAPI | undefined
|
|
87
|
-
>(undefined);
|
|
35
|
+
const isSupported = (function () {
|
|
36
|
+
if (!videoFiltersModule) return false;
|
|
37
|
+
if (Platform.OS === 'ios') {
|
|
38
|
+
// only supported on ios 15 and above
|
|
39
|
+
const currentVersion = parseInt(Platform.Version, 10);
|
|
40
|
+
return currentVersion >= 15;
|
|
41
|
+
}
|
|
42
|
+
return Platform.OS === 'android';
|
|
43
|
+
})();
|
|
88
44
|
|
|
89
45
|
/**
|
|
90
46
|
* A hook to access the background filters context API.
|
|
@@ -165,7 +121,7 @@ export const BackgroundFiltersProvider = ({ children }: PropsWithChildren) => {
|
|
|
165
121
|
} else if (blurIntensity === 'light') {
|
|
166
122
|
filterName = 'BlurLight';
|
|
167
123
|
}
|
|
168
|
-
call?.tracer.trace('
|
|
124
|
+
call?.tracer.trace('videoFilters.apply', filterName);
|
|
169
125
|
(call?.camera.state.mediaStream as MediaStream | undefined)
|
|
170
126
|
?.getVideoTracks()
|
|
171
127
|
.forEach((track) => {
|
|
@@ -181,7 +137,7 @@ export const BackgroundFiltersProvider = ({ children }: PropsWithChildren) => {
|
|
|
181
137
|
if (!isSupported) {
|
|
182
138
|
return;
|
|
183
139
|
}
|
|
184
|
-
const source =
|
|
140
|
+
const source = Image.resolveAssetSource(imageSource);
|
|
185
141
|
const imageUri = source.uri;
|
|
186
142
|
const registeredImageFiltersSet = registeredImageFiltersSetRef.current;
|
|
187
143
|
if (!registeredImageFiltersSet.has(imageUri)) {
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { createContext } from 'react';
|
|
2
|
+
import { type ImageSourcePropType } from 'react-native';
|
|
3
|
+
|
|
4
|
+
// excluding array of images and only allow one image
|
|
5
|
+
export type ImageSourceType = Exclude<ImageSourcePropType, Array<any>>;
|
|
6
|
+
|
|
7
|
+
export type BlurIntensity = 'light' | 'medium' | 'heavy';
|
|
8
|
+
|
|
9
|
+
export type CurrentBackgroundFilter = {
|
|
10
|
+
blur?: BlurIntensity;
|
|
11
|
+
image?: ImageSourceType;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export type BackgroundFiltersAPI = {
|
|
15
|
+
/**
|
|
16
|
+
* The currently applied background filter. Undefined value indicates that no filter is applied.
|
|
17
|
+
*/
|
|
18
|
+
currentBackgroundFilter: CurrentBackgroundFilter | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Whether the current device supports the background filters.
|
|
21
|
+
*/
|
|
22
|
+
isSupported: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Applies a background image filter to the video.
|
|
25
|
+
*
|
|
26
|
+
* @param imageSource the URL of the image to use as the background.
|
|
27
|
+
*/
|
|
28
|
+
applyBackgroundImageFilter: (imageSource: ImageSourceType) => Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Applies a background blur filter to the video.
|
|
31
|
+
*
|
|
32
|
+
* @param blurLevel the level of blur to apply to the background.
|
|
33
|
+
*/
|
|
34
|
+
applyBackgroundBlurFilter: (blurIntensity: BlurIntensity) => Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Applies a video blur filter to the video.
|
|
37
|
+
*
|
|
38
|
+
* @param blurIntensity the level of blur to apply to the video.
|
|
39
|
+
*/
|
|
40
|
+
applyVideoBlurFilter: (blurIntensity: BlurIntensity) => Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Disables all filters applied to the video.
|
|
43
|
+
*/
|
|
44
|
+
disableAllFilters: () => void;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The context for the background filters.
|
|
49
|
+
*/
|
|
50
|
+
export const BackgroundFiltersContext = createContext<
|
|
51
|
+
BackgroundFiltersAPI | undefined
|
|
52
|
+
>(undefined);
|
package/src/hooks/index.ts
CHANGED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { useContext, useEffect, useRef } from 'react';
|
|
2
|
+
import { useCall } from '@stream-io/video-react-bindings';
|
|
3
|
+
import { BackgroundFiltersContext } from '../contexts/internal/BackgroundFiltersContext';
|
|
4
|
+
|
|
5
|
+
export interface ModerationOptions {
|
|
6
|
+
/**
|
|
7
|
+
* How long the moderation effect should stay active before being disabled.
|
|
8
|
+
* Set to `0` to keep it active indefinitely. Defaults to 5000 ms.
|
|
9
|
+
*/
|
|
10
|
+
duration?: number;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const useModeration = (options?: ModerationOptions) => {
|
|
14
|
+
const { duration = 5000 } = options || {};
|
|
15
|
+
const call = useCall();
|
|
16
|
+
|
|
17
|
+
// accessing the filters context directly, as it is optional, but our
|
|
18
|
+
// useBackgroundFilters() throws an error if used outside the provider
|
|
19
|
+
const filtersApi = useContext(BackgroundFiltersContext);
|
|
20
|
+
const {
|
|
21
|
+
isSupported = false,
|
|
22
|
+
currentBackgroundFilter,
|
|
23
|
+
applyBackgroundBlurFilter,
|
|
24
|
+
applyBackgroundImageFilter,
|
|
25
|
+
applyVideoBlurFilter,
|
|
26
|
+
disableAllFilters,
|
|
27
|
+
} = filtersApi || {};
|
|
28
|
+
const blurTimeoutRef = useRef<ReturnType<typeof setTimeout>>(undefined);
|
|
29
|
+
const restoreRef = useRef<Promise<void>>(undefined);
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
if (!call) return;
|
|
32
|
+
const unsubscribe = call.on('call.moderation_blur', () => {
|
|
33
|
+
const turnCameraOff = () =>
|
|
34
|
+
call.camera.disable().catch((err) => {
|
|
35
|
+
console.error(`Failed to disable camera`, err);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// not scheduling a timeout to enable the camera
|
|
39
|
+
clearTimeout(blurTimeoutRef.current);
|
|
40
|
+
if (!isSupported) return turnCameraOff();
|
|
41
|
+
|
|
42
|
+
restoreRef.current = (restoreRef.current || Promise.resolve()).then(() =>
|
|
43
|
+
applyVideoBlurFilter?.('heavy').then(() => {
|
|
44
|
+
if (duration <= 0) return;
|
|
45
|
+
|
|
46
|
+
const restore = () => {
|
|
47
|
+
const { blur, image } = currentBackgroundFilter || {};
|
|
48
|
+
const action = blur
|
|
49
|
+
? applyBackgroundBlurFilter?.(blur)
|
|
50
|
+
: image
|
|
51
|
+
? applyBackgroundImageFilter?.(image)
|
|
52
|
+
: Promise.resolve(disableAllFilters?.());
|
|
53
|
+
|
|
54
|
+
action?.catch((err) => {
|
|
55
|
+
console.error(`Failed to restore pre-moderation effect`, err);
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
blurTimeoutRef.current = setTimeout(restore, duration);
|
|
60
|
+
}, turnCameraOff),
|
|
61
|
+
);
|
|
62
|
+
});
|
|
63
|
+
return () => {
|
|
64
|
+
unsubscribe();
|
|
65
|
+
};
|
|
66
|
+
}, [
|
|
67
|
+
applyBackgroundBlurFilter,
|
|
68
|
+
applyBackgroundImageFilter,
|
|
69
|
+
applyVideoBlurFilter,
|
|
70
|
+
call,
|
|
71
|
+
currentBackgroundFilter,
|
|
72
|
+
disableAllFilters,
|
|
73
|
+
duration,
|
|
74
|
+
isSupported,
|
|
75
|
+
]);
|
|
76
|
+
|
|
77
|
+
useEffect(
|
|
78
|
+
() => () => {
|
|
79
|
+
restoreRef.current?.then(() => clearTimeout(blurTimeoutRef.current));
|
|
80
|
+
},
|
|
81
|
+
[],
|
|
82
|
+
);
|
|
83
|
+
};
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '1.
|
|
1
|
+
export const version = '1.27.0';
|