@stream-io/video-react-bindings 0.2.37 → 0.3.1

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,25 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ### [0.3.1](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-bindings-0.3.0...@stream-io/video-react-bindings-0.3.1) (2023-10-30)
6
+
7
+ ### Dependency Updates
8
+
9
+ * `@stream-io/video-client` updated to version `0.4.1`
10
+ ## [0.3.0](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-bindings-0.2.37...@stream-io/video-react-bindings-0.3.0) (2023-10-27)
11
+
12
+ ### Dependency Updates
13
+
14
+ * `@stream-io/video-client` updated to version `0.4.0`
15
+
16
+ ### ⚠ BREAKING CHANGES
17
+
18
+ * **react-sdk:** Universal Device Management API (#1127)
19
+
20
+ ### Features
21
+
22
+ * **react-sdk:** Universal Device Management API ([#1127](https://github.com/GetStream/stream-video-js/issues/1127)) ([aeb3561](https://github.com/GetStream/stream-video-js/commit/aeb35612745f45254b536281c5f81d1bcac2bab5))
23
+
5
24
  ### [0.2.37](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-bindings-0.2.36...@stream-io/video-react-bindings-0.2.37) (2023-10-25)
6
25
 
7
26
  ### Dependency Updates
package/dist/index.cjs.js CHANGED
@@ -7,23 +7,14 @@ var videoClient = require('@stream-io/video-client');
7
7
 
8
8
  const StreamCallContext = react.createContext(undefined);
9
9
  /**
10
- *
11
- * @param props
12
- * @returns
13
- *
14
- * @category Call State
15
- *
16
- * @react If you're using the React SDK we recommend using the `StreamCall` component that wraps the `StreamCallProvider`. You only need to use the `StreamCallProvider` for advanced use-cases.
10
+ * A provider for the call object.
17
11
  */
18
12
  const StreamCallProvider = (props) => {
19
13
  const { call, children } = props;
20
14
  return (jsxRuntime.jsx(StreamCallContext.Provider, { value: call, children: children }));
21
15
  };
22
16
  /**
23
- *
24
- * @returns
25
- *
26
- * @category Call State
17
+ * A hook to get the call object from the closest provider.
27
18
  */
28
19
  const useCall = () => {
29
20
  return react.useContext(StreamCallContext);
@@ -202,7 +193,7 @@ const useIsCallRecordingInProgress = () => {
202
193
  *
203
194
  * @category Call State
204
195
  */
205
- const useIsCallBroadcastingInProgress = () => {
196
+ const useIsCallHLSBroadcastingInProgress = () => {
206
197
  const { egress$ } = useCallState();
207
198
  const egress = useObservableValue(egress$);
208
199
  if (!egress)
@@ -447,11 +438,22 @@ const useCallThumbnail = () => {
447
438
  const useCameraState = () => {
448
439
  const call = useCall();
449
440
  const { camera } = call;
441
+ const devices$ = react.useMemo(() => camera.listDevices(), [camera]);
450
442
  const status = useObservableValue(camera.state.status$);
451
443
  const direction = useObservableValue(camera.state.direction$);
444
+ const mediaStream = useObservableValue(camera.state.mediaStream$);
445
+ const selectedDevice = useObservableValue(camera.state.selectedDevice$);
446
+ const devices = useObservableValue(devices$);
447
+ const isMute = status !== 'enabled';
452
448
  return {
449
+ camera,
453
450
  status,
451
+ isEnabled: status === 'enabled',
454
452
  direction,
453
+ mediaStream,
454
+ devices,
455
+ selectedDevice,
456
+ isMute,
455
457
  };
456
458
  };
457
459
  /**
@@ -462,19 +464,55 @@ const useCameraState = () => {
462
464
  const useMicrophoneState = () => {
463
465
  const call = useCall();
464
466
  const { microphone } = call;
465
- const status = useObservableValue(microphone.state.status$);
466
- const selectedDevice = useObservableValue(microphone.state.selectedDevice$);
467
+ const devices$ = react.useMemo(() => microphone.listDevices(), [microphone]);
468
+ const { state } = microphone;
469
+ const status = useObservableValue(state.status$);
470
+ const mediaStream = useObservableValue(state.mediaStream$);
471
+ const selectedDevice = useObservableValue(state.selectedDevice$);
472
+ const devices = useObservableValue(devices$);
473
+ const isSpeakingWhileMuted = useObservableValue(state.speakingWhileMuted$);
474
+ const isMute = status !== 'enabled';
467
475
  return {
476
+ microphone,
468
477
  status,
478
+ isEnabled: status === 'enabled',
479
+ mediaStream,
480
+ devices,
469
481
  selectedDevice,
482
+ isSpeakingWhileMuted,
483
+ isMute,
470
484
  };
471
485
  };
486
+ /**
487
+ * Returns the speaker state of the current call.
488
+ */
489
+ const useSpeakerState = () => {
490
+ const call = useCall();
491
+ const { speaker } = call;
492
+ const devices$ = react.useMemo(() => speaker.listDevices(), [speaker]);
493
+ const devices = useObservableValue(devices$);
494
+ const selectedDevice = useObservableValue(speaker.state.selectedDevice$);
495
+ return {
496
+ speaker,
497
+ devices,
498
+ selectedDevice,
499
+ isDeviceSelectionSupported: speaker.state.isDeviceSelectionSupported,
500
+ };
501
+ };
502
+ /**
503
+ * Returns the Screen Share state of the current call.
504
+ */
472
505
  const useScreenShareState = () => {
473
506
  const call = useCall();
474
507
  const { screenShare } = call;
475
508
  const status = useObservableValue(screenShare.state.status$);
509
+ const mediaStream = useObservableValue(screenShare.state.mediaStream$);
510
+ const isMute = status !== 'enabled';
476
511
  return {
512
+ screenShare,
513
+ mediaStream,
477
514
  status,
515
+ isMute,
478
516
  };
479
517
  };
480
518
 
@@ -502,7 +540,7 @@ var CallStateHooks = /*#__PURE__*/Object.freeze({
502
540
  useCameraState: useCameraState,
503
541
  useDominantSpeaker: useDominantSpeaker,
504
542
  useHasOngoingScreenShare: useHasOngoingScreenShare,
505
- useIsCallBroadcastingInProgress: useIsCallBroadcastingInProgress,
543
+ useIsCallHLSBroadcastingInProgress: useIsCallHLSBroadcastingInProgress,
506
544
  useIsCallLive: useIsCallLive,
507
545
  useIsCallRecordingInProgress: useIsCallRecordingInProgress,
508
546
  useIsCallTranscribingInProgress: useIsCallTranscribingInProgress,
@@ -511,7 +549,8 @@ var CallStateHooks = /*#__PURE__*/Object.freeze({
511
549
  useParticipantCount: useParticipantCount,
512
550
  useParticipants: useParticipants,
513
551
  useRemoteParticipants: useRemoteParticipants,
514
- useScreenShareState: useScreenShareState
552
+ useScreenShareState: useScreenShareState,
553
+ useSpeakerState: useSpeakerState
515
554
  });
516
555
 
517
556
  /**
@@ -576,10 +615,12 @@ const useCallStateHooks = () => CallStateHooks;
576
615
  const Restricted = ({ canRequestOnly, hasPermissionsOnly, requiredGrants, requireAll = true, children, }) => {
577
616
  const call = useCall();
578
617
  const ownCapabilities = useOwnCapabilities();
618
+ const { useCallSettings } = useCallStateHooks();
619
+ const settings = useCallSettings();
579
620
  const hasPermissions = requiredGrants[requireAll ? 'every' : 'some']((capability) => ownCapabilities?.includes(capability));
580
621
  if (hasPermissionsOnly)
581
622
  return hasPermissions ? jsxRuntime.jsx(jsxRuntime.Fragment, { children: children }) : null;
582
- const canRequest = requiredGrants.some((capability) => !!call && call.permissionsContext.canRequest(capability));
623
+ const canRequest = requiredGrants.some((capability) => call?.permissionsContext.canRequest(capability, settings));
583
624
  if (canRequestOnly)
584
625
  return canRequest ? jsxRuntime.jsx(jsxRuntime.Fragment, { children: children }) : null;
585
626
  if (hasPermissions || canRequest)
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../src/contexts/StreamCallContext.tsx","../../src/i18n/utils.ts","../../src/i18n/StreamI18n.ts","../../src/contexts/StreamI18nContext.tsx","../../src/contexts/StreamVideoContext.tsx","../../src/hooks/useObservableValue.ts","../../src/hooks/callStateHooks.ts","../../src/hooks/permissions.ts","../../src/hooks/store.ts","../../src/hooks/index.ts","../../src/wrappers/Restricted.tsx"],"sourcesContent":["import { createContext, PropsWithChildren, useContext } from 'react';\nimport { Call } from '@stream-io/video-client';\n\nconst StreamCallContext = createContext<Call | undefined>(undefined);\n\n/**\n *\n * We don't expose types in our docs site but we should still add doc comments\n * @internal\n */\nexport interface StreamCallProviderProps {\n call?: Call;\n}\n\n/**\n *\n * @param props\n * @returns\n *\n * @category Call State\n *\n * @react If you're using the React SDK we recommend using the `StreamCall` component that wraps the `StreamCallProvider`. You only need to use the `StreamCallProvider` for advanced use-cases.\n */\nexport const StreamCallProvider = (\n props: PropsWithChildren<StreamCallProviderProps>,\n) => {\n const { call, children } = props;\n return (\n <StreamCallContext.Provider value={call}>\n {children}\n </StreamCallContext.Provider>\n );\n};\n\n/**\n *\n * @returns\n *\n * @category Call State\n */\nexport const useCall = () => {\n return useContext(StreamCallContext);\n};\n","import { TranslationsMap, TranslationsRegistry } from './types';\n\nexport const mapToRegistry = (\n translationsMap: TranslationsMap,\n namespace: string,\n) =>\n Object.entries(translationsMap).reduce((acc, [lng, translations]) => {\n acc[lng] = { [namespace]: translations };\n return acc;\n }, {} as TranslationsRegistry);\n","import i18next from 'i18next';\nimport { mapToRegistry } from './utils';\nimport {\n TranslationLanguage,\n TranslationSheet,\n TranslationsMap,\n TranslatorFunction,\n} from './types';\n\nexport const DEFAULT_LANGUAGE = 'en';\nexport const DEFAULT_NAMESPACE = 'stream-video';\nconst DEFAULT_CONFIG = {\n debug: false,\n currentLanguage: DEFAULT_LANGUAGE,\n};\n\nconst DEFAULT_TRANSLATIONS_REGISTRY = mapToRegistry({}, DEFAULT_NAMESPACE);\n\nexport const defaultTranslationFunction = (key: string) => key;\n\nexport type StreamI18nConstructor = {\n /** Language into which the provided strings are translated */\n currentLanguage?: TranslationLanguage;\n /** Logs info level to console output. Helps find issues with loading not working. */\n debug?: boolean;\n /** Custom translations that will be merged with the defaults provided by the library. */\n translationsOverrides?: TranslationsMap;\n};\n\nexport class StreamI18n {\n /** Exposed i18n instance from the i18next library */\n i18nInstance;\n /** Translator function that converts the provided string into its equivalent in the current language. */\n t: TranslatorFunction = defaultTranslationFunction;\n /** Simple logger function */\n constructor(options: StreamI18nConstructor = {}) {\n const {\n debug = DEFAULT_CONFIG.debug,\n currentLanguage = DEFAULT_CONFIG.currentLanguage,\n translationsOverrides,\n } = options;\n\n this.i18nInstance = i18next.createInstance({\n debug,\n defaultNS: DEFAULT_NAMESPACE,\n fallbackLng: false,\n interpolation: { escapeValue: false },\n keySeparator: false,\n lng: currentLanguage,\n nsSeparator: false,\n parseMissingKeyHandler: (key) => {\n return key;\n },\n resources: DEFAULT_TRANSLATIONS_REGISTRY,\n });\n\n if (translationsOverrides) {\n this.i18nInstance.on('initialized', () => {\n Object.entries(translationsOverrides).forEach(([lng, translations]) => {\n this.registerTranslationsForLanguage({ lng, translations });\n });\n });\n }\n }\n\n get currentLanguage() {\n this._checkIsInitialized();\n return this.i18nInstance.language;\n }\n\n get isInitialized() {\n return this.i18nInstance.isInitialized;\n }\n\n init = async () => {\n try {\n this.t = await this.i18nInstance.init();\n } catch (e) {\n console.error(`Failed to initialize translations: ${JSON.stringify(e)}`);\n }\n return this;\n };\n\n changeLanguage = async (\n language?: TranslationLanguage,\n onChange?: (language: TranslationLanguage) => void,\n ) => {\n if (!this._checkIsInitialized()) return;\n // i18next detects the language, if none provided, but it is better\n // to show this detection here explicitly\n const browserLanguage =\n typeof window !== 'undefined' && window.navigator\n ? window.navigator.language\n : undefined;\n await this.i18nInstance.changeLanguage(language || browserLanguage);\n onChange?.(this.currentLanguage);\n };\n\n registerTranslationsForLanguage = ({\n lng,\n translations,\n }: {\n lng: TranslationLanguage;\n translations: TranslationSheet;\n }) => {\n if (!this._checkIsInitialized()) return;\n this.i18nInstance.addResourceBundle(\n lng,\n DEFAULT_NAMESPACE,\n translations,\n true,\n true,\n );\n };\n\n private _checkIsInitialized = () => {\n if (!this.i18nInstance.isInitialized) {\n console.warn(\n 'I18n instance is not initialized. Call yourStreamI18nInstance.init().',\n );\n }\n return this.i18nInstance.isInitialized;\n };\n}\n","import {\n createContext,\n PropsWithChildren,\n useContext,\n useEffect,\n useState,\n} from 'react';\nimport {\n defaultTranslationFunction,\n StreamI18n,\n TranslationsMap,\n} from '../i18n';\n\ntype StreamI18nContextValue = {\n t: StreamI18n['t'];\n i18n?: StreamI18n;\n};\n\nconst StreamI18nContext = createContext<StreamI18nContextValue>({\n t: defaultTranslationFunction,\n});\n\ntype CreateI18nParams = {\n i18nInstance?: StreamI18n;\n language?: string;\n translationsOverrides?: TranslationsMap;\n};\n\nexport type StreamI18nProviderProps = CreateI18nParams;\n\nexport const StreamI18nProvider = ({\n children,\n ...createI18nParams\n}: PropsWithChildren<StreamI18nProviderProps>) => {\n const { i18n, t } = useCreateI18n(createI18nParams);\n\n return (\n <StreamI18nContext.Provider value={{ t, i18n }}>\n {children}\n </StreamI18nContext.Provider>\n );\n};\n\nexport const useCreateI18n = ({\n i18nInstance,\n language,\n translationsOverrides,\n}: CreateI18nParams) => {\n const [i18n] = useState(\n () =>\n i18nInstance ||\n new StreamI18n({ currentLanguage: language, translationsOverrides }),\n );\n const [t, setTranslationFn] = useState<StreamI18n['t']>(\n () => defaultTranslationFunction,\n );\n\n useEffect(() => {\n const { isInitialized } = i18n;\n if (!isInitialized) {\n i18n.init().then((_i18n) => setTranslationFn(() => _i18n.i18nInstance.t));\n return;\n }\n if (language && i18n?.currentLanguage !== language) {\n i18n.changeLanguage(language).catch((err) => {\n console.log('Error while changing language', err);\n });\n }\n }, [i18n, i18nInstance, language, translationsOverrides]);\n\n return { i18n, t };\n};\n\nexport const useI18n = () => useContext(StreamI18nContext);\n","import { createContext, PropsWithChildren, useContext } from 'react';\nimport { StreamVideoClient } from '@stream-io/video-client';\nimport {\n StreamI18nProvider,\n StreamI18nProviderProps,\n} from './StreamI18nContext';\n\nconst StreamVideoContext = createContext<StreamVideoClient | undefined>(\n undefined,\n);\n\n/**\n * Exclude types from documentation site, but we should still add doc comments\n * @internal\n */\nexport type StreamVideoProps = StreamI18nProviderProps & {\n client: StreamVideoClient;\n};\n\n/**\n * StreamVideo is a provider component which should be used to wrap the entire application.\n * It provides the client object to all children components and initializes the i18n instance.\n * @param PropsWithChildren<StreamVideoProps>\n * @category Client State\n */\nexport const StreamVideoProvider = ({\n children,\n client,\n i18nInstance,\n language,\n translationsOverrides,\n}: PropsWithChildren<StreamVideoProps>) => {\n return (\n <StreamVideoContext.Provider value={client}>\n <StreamI18nProvider\n i18nInstance={i18nInstance}\n language={language}\n translationsOverrides={translationsOverrides}\n >\n {children}\n </StreamI18nProvider>\n </StreamVideoContext.Provider>\n );\n};\n\n/**\n *\n * @returns\n *\n * @category Client State\n */\nexport const useStreamVideoClient = () => {\n return useContext(StreamVideoContext);\n};\n","import type { Observable } from 'rxjs';\nimport { useEffect, useState } from 'react';\nimport { RxUtils } from '@stream-io/video-client';\n\n/**\n * Utility hook which provides the current value of the given observable.\n * @internal\n */\nexport const useObservableValue = <T>(observable$: Observable<T>) => {\n const [value, setValue] = useState<T>(() =>\n RxUtils.getCurrentValue(observable$),\n );\n useEffect(() => {\n const subscription = observable$.subscribe(setValue);\n return () => {\n subscription.unsubscribe();\n };\n }, [observable$]);\n\n return value;\n};\n","import { useMemo } from 'react';\nimport {\n Call,\n CallIngressResponse,\n CallSessionResponse,\n CallSettingsResponse,\n CallState,\n CallStatsReport,\n Comparator,\n EgressResponse,\n MemberResponse,\n StreamVideoParticipant,\n UserResponse,\n} from '@stream-io/video-client';\nimport { useCall } from '../contexts';\nimport { useObservableValue } from './useObservableValue';\n\n/**\n * Utility hook, which provides the current call's state.\n *\n * @category Call State\n */\nexport const useCallState = () => {\n const call = useCall();\n // return an empty and unlinked CallState object if there is no call in the provider\n // this ensures that the hooks always return a value and many null checks can be avoided\n if (!call) {\n const message =\n 'You are using useCallState() outside a Call context. ' +\n 'Please wrap your component in <StreamCall /> and provide a \"call\" instance.';\n console.warn(message);\n return new CallState();\n }\n return call.state;\n};\n\n/**\n * Utility hook which provides information whether the current call is being recorded. It will return `true` if the call is being recorded.\n *\n * @category Call State\n */\nexport const useIsCallRecordingInProgress = (): boolean => {\n const { recording$ } = useCallState();\n return useObservableValue(recording$);\n};\n\n/**\n * Utility hook which provides information whether the current call is broadcasting.\n *\n * @category Call State\n */\nexport const useIsCallBroadcastingInProgress = (): boolean => {\n const { egress$ } = useCallState();\n const egress = useObservableValue(egress$);\n if (!egress) return false;\n return egress.broadcasting;\n};\n\n/**\n * Utility hook which provides information whether the current call is live.\n *\n * @category Call State\n */\nexport const useIsCallLive = (): boolean => {\n const { backstage$ } = useCallState();\n const isBackstageOn = useObservableValue(backstage$);\n return !isBackstageOn;\n};\n\n/**\n * Returns the list of blocked users in the current call.\n */\nexport const useCallBlockedUserIds = (): string[] => {\n const { blockedUserIds$ } = useCallState();\n return useObservableValue(blockedUserIds$);\n};\n\n/**\n * Returns the timestamp when this call was created.\n */\nexport const useCallCreatedAt = (): Date | undefined => {\n const { createdAt$ } = useCallState();\n return useObservableValue(createdAt$);\n};\n\n/**\n * Returns the timestamp when this call was ended.\n */\nexport const useCallEndedAt = (): Date | undefined => {\n const { endedAt$ } = useCallState();\n return useObservableValue(endedAt$);\n};\n\n/**\n * Returns the timestamp telling when the call is scheduled to start.\n */\nexport const useCallStartsAt = (): Date | undefined => {\n const { startsAt$ } = useCallState();\n return useObservableValue(startsAt$);\n};\n\n/**\n * Returns the timestamp when this call was updated.\n */\nexport const useCallUpdatedAt = (): Date | undefined => {\n const { updatedAt$ } = useCallState();\n return useObservableValue(updatedAt$);\n};\n\n/**\n * Returns the information about the call's creator.\n */\nexport const useCallCreatedBy = (): UserResponse | undefined => {\n const { createdBy$ } = useCallState();\n return useObservableValue(createdBy$);\n};\n\n/**\n * Returns the call's custom data.\n */\nexport const useCallCustomData = (): Record<string, any> => {\n const { custom$ } = useCallState();\n return useObservableValue(custom$);\n};\n\n/**\n * Returns the call's Egress information.\n */\nexport const useCallEgress = (): EgressResponse | undefined => {\n const { egress$ } = useCallState();\n return useObservableValue(egress$);\n};\n\n/**\n * Returns the call's Ingress information.\n */\nexport const useCallIngress = (): CallIngressResponse | undefined => {\n const { ingress$ } = useCallState();\n return useObservableValue(ingress$);\n};\n\n/**\n * Returns the data for the current call session.\n */\nexport const useCallSession = (): CallSessionResponse | undefined => {\n const { session$ } = useCallState();\n return useObservableValue(session$);\n};\n\n/**\n * Returns the call's settings.\n */\nexport const useCallSettings = (): CallSettingsResponse | undefined => {\n const { settings$ } = useCallState();\n return useObservableValue(settings$);\n};\n\n/**\n * Returns whether the call has transcribing enabled.\n */\nexport const useIsCallTranscribingInProgress = (): boolean => {\n const { transcribing$ } = useCallState();\n return useObservableValue(transcribing$);\n};\n\n/**\n * Returns information about the user who has marked this call as ended.\n */\nexport const useCallEndedBy = (): UserResponse | undefined => {\n const { endedBy$ } = useCallState();\n return useObservableValue(endedBy$);\n};\n\n/**\n * Utility hook which provides a boolean indicating whether there is\n * a participant in the current call which shares their screen.\n *\n * @category Call State\n */\nexport const useHasOngoingScreenShare = (): boolean => {\n const { hasOngoingScreenShare$ } = useCallState();\n return useObservableValue(hasOngoingScreenShare$);\n};\n\n/**\n * Utility hook which provides the latest stats report of the current call.\n *\n * The latest stats report of the current call.\n * When stats gathering is enabled, this observable will emit a new value\n * at a regular (configurable) interval.\n *\n * Consumers of this observable can implement their own batching logic\n * in case they want to show historical stats data.\n *\n * @category Call State\n */\nexport const useCallStatsReport = (): CallStatsReport | undefined => {\n const { callStatsReport$ } = useCallState();\n return useObservableValue(callStatsReport$);\n};\n\n/**\n * Utility hook which provides the dominant speaker of the current call.\n *\n * @category Call State\n */\nexport const useDominantSpeaker = (): StreamVideoParticipant | undefined => {\n const { dominantSpeaker$ } = useCallState();\n return useObservableValue(dominantSpeaker$);\n};\n\n/**\n * Utility hook which provides a list of call members.\n *\n * @category Call State\n */\nexport const useCallMembers = (): MemberResponse[] => {\n const { members$ } = useCallState();\n return useObservableValue(members$);\n};\n\n/**\n * Utility hook providing the current calling state of the call. For example, `RINGING` or `JOINED`.\n *\n * @category Call State\n */\nexport const useCallCallingState = () => {\n const { callingState$ } = useCallState();\n return useObservableValue(callingState$);\n};\n\n/**\n * Utility hook providing the actual start time of the current session.\n * Useful for calculating the call duration.\n *\n * @category Call State\n */\nexport const useCallStartedAt = () => {\n const { startedAt$ } = useCallState();\n return useObservableValue(startedAt$);\n};\n\n/**\n * A hook which provides a list of all participants that have joined an active call.\n *\n * @category Call State\n *\n * @param options.sortBy - A comparator function to sort the participants by.\n * Make sure to memoize output of the `combineComparators` function\n * (or keep it out of component's scope if possible) before passing it down to this property.\n */\nexport const useParticipants = ({\n sortBy,\n}: {\n /**\n * Make sure to memoize output of the `combineComparators` function\n * (or keep it out of component's scope if possible) before passing it down to this property.\n */\n sortBy?: Comparator<StreamVideoParticipant>;\n} = {}) => {\n const { participants$ } = useCallState();\n const participants = useObservableValue(participants$);\n\n return useMemo(() => {\n if (sortBy) {\n return [...participants].sort(sortBy);\n }\n return participants;\n }, [participants, sortBy]);\n};\n\n/**\n * A hook which provides a StreamVideoLocalParticipant object.\n * It signals that I have joined a call.\n *\n * @category Call State\n */\nexport const useLocalParticipant = () => {\n const { localParticipant$ } = useCallState();\n return useObservableValue(localParticipant$);\n};\n\n/**\n * A hook which provides a list of all other participants than me that have joined an active call.\n *\n * @category Call State\n */\nexport const useRemoteParticipants = () => {\n const { remoteParticipants$ } = useCallState();\n return useObservableValue(remoteParticipants$);\n};\n\n/**\n * Returns the approximate participant count of the active call.\n * This includes the anonymous users as well, and it is computed on the server.\n *\n * @category Call State\n */\nexport const useParticipantCount = () => {\n const { participantCount$ } = useCallState();\n return useObservableValue(participantCount$);\n};\n\n/**\n * Returns the approximate anonymous participant count of the active call.\n * The regular participants are not included in this count. It is computed on the server.\n *\n * @category Call State\n */\nexport const useAnonymousParticipantCount = () => {\n const { anonymousParticipantCount$ } = useCallState();\n return useObservableValue(anonymousParticipantCount$);\n};\n\n/**\n * Returns the generated thumbnail of the current call, if enabled in settings.\n */\nexport const useCallThumbnail = () => {\n const { thumbnails$ } = useCallState();\n return useObservableValue(thumbnails$);\n};\n\n/**\n * Returns the camera state of the current call.\n *\n * @category Camera Manager State\n *\n */\nexport const useCameraState = () => {\n const call = useCall();\n const { camera } = call as Call;\n\n const status = useObservableValue(camera.state.status$);\n const direction = useObservableValue(camera.state.direction$);\n\n return {\n status,\n direction,\n };\n};\n\n/**\n * Returns the microphone state of the current call.\n *\n * @category Microphone Manager State\n */\nexport const useMicrophoneState = () => {\n const call = useCall();\n const { microphone } = call as Call;\n\n const status = useObservableValue(microphone.state.status$);\n const selectedDevice = useObservableValue(microphone.state.selectedDevice$);\n\n return {\n status,\n selectedDevice,\n };\n};\n\nexport const useScreenShareState = () => {\n const call = useCall();\n const { screenShare } = call as Call;\n\n const status = useObservableValue(screenShare.state.status$);\n\n return {\n status,\n };\n};\n","import { OwnCapability } from '@stream-io/video-client';\nimport { useCallState } from './callStateHooks';\nimport { useObservableValue } from './useObservableValue';\n\n/**\n * Hook that returns true if the local participant has all the given permissions.\n *\n * @param permissions the permissions to check.\n *\n * @category Call State\n */\nexport const useHasPermissions = (...permissions: OwnCapability[]): boolean => {\n const capabilities = useOwnCapabilities();\n return permissions.every((permission) => capabilities?.includes(permission));\n};\n\n/**\n * A hook which returns the local participant's own capabilities.\n *\n * @category Call State\n */\nexport const useOwnCapabilities = (): OwnCapability[] | undefined => {\n const { ownCapabilities$ } = useCallState();\n return useObservableValue(ownCapabilities$);\n};\n","import { useStreamVideoClient } from '../contexts';\nimport { useObservableValue } from './useObservableValue';\n\n/**\n * Utility hook which provides access to client's state store.\n */\nexport const useStore = () => {\n const client = useStreamVideoClient();\n if (!client) {\n throw new Error(\n `StreamVideoClient isn't initialized or this hook is called outside of <StreamVideo> context.`,\n );\n }\n return client.readOnlyStateStore;\n};\n\n/**\n * Utility hook which provides a list of all notifications about created calls.\n * In the ring call settings, these calls can be outgoing (I have called somebody)\n * or incoming (somebody has called me).\n *\n * @category Client State\n */\nexport const useCalls = () => {\n const { calls$ } = useStore();\n return useObservableValue(calls$);\n};\n\n/**\n * Returns the current connected user.\n *\n * @category Client State\n */\nexport const useConnectedUser = () => {\n const { connectedUser$ } = useStore();\n return useObservableValue(connectedUser$);\n};\n","import * as CallStateHooks from './callStateHooks';\n\nexport * from './permissions';\nexport * from './store';\n\n/**\n * A hook-alike function that exposes all call state hooks.\n *\n * @category Call State\n */\nexport const useCallStateHooks = () => CallStateHooks;\n","import { OwnCapability } from '@stream-io/video-client';\n\nimport { PropsWithChildren } from 'react';\nimport { useCall } from '../contexts';\nimport { useOwnCapabilities } from '../hooks';\n\ntype RestrictedProps = PropsWithChildren<{\n /**\n * Required grants for the component to be able to render supplied children elements\n */\n requiredGrants: OwnCapability[];\n /**\n * Render children only if user can request capability, but does not have it\n */\n canRequestOnly?: boolean;\n /**\n * Render children only if user has capability\n */\n hasPermissionsOnly?: boolean;\n /**\n * Require all grants specified in `requiredGrants` to be available in the `availableGrants`,\n * component by default requires only one grant to appear in both arrays to render its children\n */\n requireAll?: boolean;\n}>;\n\nexport const Restricted = ({\n canRequestOnly,\n hasPermissionsOnly,\n requiredGrants,\n requireAll = true,\n children,\n}: RestrictedProps) => {\n const call = useCall();\n const ownCapabilities = useOwnCapabilities();\n const hasPermissions = requiredGrants[requireAll ? 'every' : 'some'](\n (capability) => ownCapabilities?.includes(capability),\n );\n\n if (hasPermissionsOnly) return hasPermissions ? <>{children}</> : null;\n\n const canRequest = requiredGrants.some(\n (capability) => !!call && call.permissionsContext.canRequest(capability),\n );\n\n if (canRequestOnly) return canRequest ? <>{children}</> : null;\n\n if (hasPermissions || canRequest) return <>{children}</>;\n\n return null;\n};\n"],"names":["createContext","_jsx","useContext","useState","useEffect","RxUtils","CallState","useMemo","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../src/contexts/StreamCallContext.tsx","../../src/i18n/utils.ts","../../src/i18n/StreamI18n.ts","../../src/contexts/StreamI18nContext.tsx","../../src/contexts/StreamVideoContext.tsx","../../src/hooks/useObservableValue.ts","../../src/hooks/callStateHooks.ts","../../src/hooks/permissions.ts","../../src/hooks/store.ts","../../src/hooks/index.ts","../../src/wrappers/Restricted.tsx"],"sourcesContent":["import { createContext, PropsWithChildren, useContext } from 'react';\nimport { Call } from '@stream-io/video-client';\n\nconst StreamCallContext = createContext<Call | undefined>(undefined);\n\n/**\n * The props for the StreamCallProvider component.\n */\nexport interface StreamCallProviderProps {\n call?: Call;\n}\n\n/**\n * A provider for the call object.\n */\nexport const StreamCallProvider = (\n props: PropsWithChildren<StreamCallProviderProps>,\n) => {\n const { call, children } = props;\n return (\n <StreamCallContext.Provider value={call}>\n {children}\n </StreamCallContext.Provider>\n );\n};\n\n/**\n * A hook to get the call object from the closest provider.\n */\nexport const useCall = () => {\n return useContext(StreamCallContext);\n};\n","import { TranslationsMap, TranslationsRegistry } from './types';\n\nexport const mapToRegistry = (\n translationsMap: TranslationsMap,\n namespace: string,\n) =>\n Object.entries(translationsMap).reduce((acc, [lng, translations]) => {\n acc[lng] = { [namespace]: translations };\n return acc;\n }, {} as TranslationsRegistry);\n","import i18next from 'i18next';\nimport { mapToRegistry } from './utils';\nimport {\n TranslationLanguage,\n TranslationSheet,\n TranslationsMap,\n TranslatorFunction,\n} from './types';\n\nexport const DEFAULT_LANGUAGE = 'en';\nexport const DEFAULT_NAMESPACE = 'stream-video';\nconst DEFAULT_CONFIG = {\n debug: false,\n currentLanguage: DEFAULT_LANGUAGE,\n};\n\nconst DEFAULT_TRANSLATIONS_REGISTRY = mapToRegistry({}, DEFAULT_NAMESPACE);\n\nexport const defaultTranslationFunction = (key: string) => key;\n\nexport type StreamI18nConstructor = {\n /** Language into which the provided strings are translated */\n currentLanguage?: TranslationLanguage;\n /** Logs info level to console output. Helps find issues with loading not working. */\n debug?: boolean;\n /** Custom translations that will be merged with the defaults provided by the library. */\n translationsOverrides?: TranslationsMap;\n};\n\nexport class StreamI18n {\n /** Exposed i18n instance from the i18next library */\n i18nInstance;\n /** Translator function that converts the provided string into its equivalent in the current language. */\n t: TranslatorFunction = defaultTranslationFunction;\n /** Simple logger function */\n constructor(options: StreamI18nConstructor = {}) {\n const {\n debug = DEFAULT_CONFIG.debug,\n currentLanguage = DEFAULT_CONFIG.currentLanguage,\n translationsOverrides,\n } = options;\n\n this.i18nInstance = i18next.createInstance({\n debug,\n defaultNS: DEFAULT_NAMESPACE,\n fallbackLng: false,\n interpolation: { escapeValue: false },\n keySeparator: false,\n lng: currentLanguage,\n nsSeparator: false,\n parseMissingKeyHandler: (key) => {\n return key;\n },\n resources: DEFAULT_TRANSLATIONS_REGISTRY,\n });\n\n if (translationsOverrides) {\n this.i18nInstance.on('initialized', () => {\n Object.entries(translationsOverrides).forEach(([lng, translations]) => {\n this.registerTranslationsForLanguage({ lng, translations });\n });\n });\n }\n }\n\n get currentLanguage() {\n this._checkIsInitialized();\n return this.i18nInstance.language;\n }\n\n get isInitialized() {\n return this.i18nInstance.isInitialized;\n }\n\n init = async () => {\n try {\n this.t = await this.i18nInstance.init();\n } catch (e) {\n console.error(`Failed to initialize translations: ${JSON.stringify(e)}`);\n }\n return this;\n };\n\n changeLanguage = async (\n language?: TranslationLanguage,\n onChange?: (language: TranslationLanguage) => void,\n ) => {\n if (!this._checkIsInitialized()) return;\n // i18next detects the language, if none provided, but it is better\n // to show this detection here explicitly\n const browserLanguage =\n typeof window !== 'undefined' && window.navigator\n ? window.navigator.language\n : undefined;\n await this.i18nInstance.changeLanguage(language || browserLanguage);\n onChange?.(this.currentLanguage);\n };\n\n registerTranslationsForLanguage = ({\n lng,\n translations,\n }: {\n lng: TranslationLanguage;\n translations: TranslationSheet;\n }) => {\n if (!this._checkIsInitialized()) return;\n this.i18nInstance.addResourceBundle(\n lng,\n DEFAULT_NAMESPACE,\n translations,\n true,\n true,\n );\n };\n\n private _checkIsInitialized = () => {\n if (!this.i18nInstance.isInitialized) {\n console.warn(\n 'I18n instance is not initialized. Call yourStreamI18nInstance.init().',\n );\n }\n return this.i18nInstance.isInitialized;\n };\n}\n","import {\n createContext,\n PropsWithChildren,\n useContext,\n useEffect,\n useState,\n} from 'react';\nimport {\n defaultTranslationFunction,\n StreamI18n,\n TranslationsMap,\n} from '../i18n';\n\ntype StreamI18nContextValue = {\n t: StreamI18n['t'];\n i18n?: StreamI18n;\n};\n\nconst StreamI18nContext = createContext<StreamI18nContextValue>({\n t: defaultTranslationFunction,\n});\n\ntype CreateI18nParams = {\n i18nInstance?: StreamI18n;\n language?: string;\n translationsOverrides?: TranslationsMap;\n};\n\nexport type StreamI18nProviderProps = CreateI18nParams;\n\nexport const StreamI18nProvider = ({\n children,\n ...createI18nParams\n}: PropsWithChildren<StreamI18nProviderProps>) => {\n const { i18n, t } = useCreateI18n(createI18nParams);\n\n return (\n <StreamI18nContext.Provider value={{ t, i18n }}>\n {children}\n </StreamI18nContext.Provider>\n );\n};\n\nexport const useCreateI18n = ({\n i18nInstance,\n language,\n translationsOverrides,\n}: CreateI18nParams) => {\n const [i18n] = useState(\n () =>\n i18nInstance ||\n new StreamI18n({ currentLanguage: language, translationsOverrides }),\n );\n const [t, setTranslationFn] = useState<StreamI18n['t']>(\n () => defaultTranslationFunction,\n );\n\n useEffect(() => {\n const { isInitialized } = i18n;\n if (!isInitialized) {\n i18n.init().then((_i18n) => setTranslationFn(() => _i18n.i18nInstance.t));\n return;\n }\n if (language && i18n?.currentLanguage !== language) {\n i18n.changeLanguage(language).catch((err) => {\n console.log('Error while changing language', err);\n });\n }\n }, [i18n, i18nInstance, language, translationsOverrides]);\n\n return { i18n, t };\n};\n\nexport const useI18n = () => useContext(StreamI18nContext);\n","import { createContext, PropsWithChildren, useContext } from 'react';\nimport { StreamVideoClient } from '@stream-io/video-client';\nimport {\n StreamI18nProvider,\n StreamI18nProviderProps,\n} from './StreamI18nContext';\n\nconst StreamVideoContext = createContext<StreamVideoClient | undefined>(\n undefined,\n);\n\n/**\n * Exclude types from documentation site, but we should still add doc comments\n * @internal\n */\nexport type StreamVideoProps = StreamI18nProviderProps & {\n client: StreamVideoClient;\n};\n\n/**\n * StreamVideo is a provider component which should be used to wrap the entire application.\n * It provides the client object to all children components and initializes the i18n instance.\n * @param PropsWithChildren<StreamVideoProps>\n * @category Client State\n */\nexport const StreamVideoProvider = ({\n children,\n client,\n i18nInstance,\n language,\n translationsOverrides,\n}: PropsWithChildren<StreamVideoProps>) => {\n return (\n <StreamVideoContext.Provider value={client}>\n <StreamI18nProvider\n i18nInstance={i18nInstance}\n language={language}\n translationsOverrides={translationsOverrides}\n >\n {children}\n </StreamI18nProvider>\n </StreamVideoContext.Provider>\n );\n};\n\n/**\n *\n * @returns\n *\n * @category Client State\n */\nexport const useStreamVideoClient = () => {\n return useContext(StreamVideoContext);\n};\n","import type { Observable } from 'rxjs';\nimport { useEffect, useState } from 'react';\nimport { RxUtils } from '@stream-io/video-client';\n\n/**\n * Utility hook which provides the current value of the given observable.\n * @internal\n */\nexport const useObservableValue = <T>(observable$: Observable<T>) => {\n const [value, setValue] = useState<T>(() =>\n RxUtils.getCurrentValue(observable$),\n );\n useEffect(() => {\n const subscription = observable$.subscribe(setValue);\n return () => {\n subscription.unsubscribe();\n };\n }, [observable$]);\n\n return value;\n};\n","import { useMemo } from 'react';\nimport {\n Call,\n CallIngressResponse,\n CallSessionResponse,\n CallSettingsResponse,\n CallState,\n CallStatsReport,\n Comparator,\n EgressResponse,\n MemberResponse,\n StreamVideoParticipant,\n UserResponse,\n} from '@stream-io/video-client';\nimport { useCall } from '../contexts';\nimport { useObservableValue } from './useObservableValue';\n\n/**\n * Utility hook, which provides the current call's state.\n *\n * @category Call State\n */\nexport const useCallState = () => {\n const call = useCall();\n // return an empty and unlinked CallState object if there is no call in the provider\n // this ensures that the hooks always return a value and many null checks can be avoided\n if (!call) {\n const message =\n 'You are using useCallState() outside a Call context. ' +\n 'Please wrap your component in <StreamCall /> and provide a \"call\" instance.';\n console.warn(message);\n return new CallState();\n }\n return call.state;\n};\n\n/**\n * Utility hook which provides information whether the current call is being recorded. It will return `true` if the call is being recorded.\n *\n * @category Call State\n */\nexport const useIsCallRecordingInProgress = (): boolean => {\n const { recording$ } = useCallState();\n return useObservableValue(recording$);\n};\n\n/**\n * Utility hook which provides information whether the current call is broadcasting.\n *\n * @category Call State\n */\nexport const useIsCallHLSBroadcastingInProgress = (): boolean => {\n const { egress$ } = useCallState();\n const egress = useObservableValue(egress$);\n if (!egress) return false;\n return egress.broadcasting;\n};\n\n/**\n * Utility hook which provides information whether the current call is live.\n *\n * @category Call State\n */\nexport const useIsCallLive = (): boolean => {\n const { backstage$ } = useCallState();\n const isBackstageOn = useObservableValue(backstage$);\n return !isBackstageOn;\n};\n\n/**\n * Returns the list of blocked users in the current call.\n */\nexport const useCallBlockedUserIds = (): string[] => {\n const { blockedUserIds$ } = useCallState();\n return useObservableValue(blockedUserIds$);\n};\n\n/**\n * Returns the timestamp when this call was created.\n */\nexport const useCallCreatedAt = (): Date | undefined => {\n const { createdAt$ } = useCallState();\n return useObservableValue(createdAt$);\n};\n\n/**\n * Returns the timestamp when this call was ended.\n */\nexport const useCallEndedAt = (): Date | undefined => {\n const { endedAt$ } = useCallState();\n return useObservableValue(endedAt$);\n};\n\n/**\n * Returns the timestamp telling when the call is scheduled to start.\n */\nexport const useCallStartsAt = (): Date | undefined => {\n const { startsAt$ } = useCallState();\n return useObservableValue(startsAt$);\n};\n\n/**\n * Returns the timestamp when this call was updated.\n */\nexport const useCallUpdatedAt = (): Date | undefined => {\n const { updatedAt$ } = useCallState();\n return useObservableValue(updatedAt$);\n};\n\n/**\n * Returns the information about the call's creator.\n */\nexport const useCallCreatedBy = (): UserResponse | undefined => {\n const { createdBy$ } = useCallState();\n return useObservableValue(createdBy$);\n};\n\n/**\n * Returns the call's custom data.\n */\nexport const useCallCustomData = (): Record<string, any> => {\n const { custom$ } = useCallState();\n return useObservableValue(custom$);\n};\n\n/**\n * Returns the call's Egress information.\n */\nexport const useCallEgress = (): EgressResponse | undefined => {\n const { egress$ } = useCallState();\n return useObservableValue(egress$);\n};\n\n/**\n * Returns the call's Ingress information.\n */\nexport const useCallIngress = (): CallIngressResponse | undefined => {\n const { ingress$ } = useCallState();\n return useObservableValue(ingress$);\n};\n\n/**\n * Returns the data for the current call session.\n */\nexport const useCallSession = (): CallSessionResponse | undefined => {\n const { session$ } = useCallState();\n return useObservableValue(session$);\n};\n\n/**\n * Returns the call's settings.\n */\nexport const useCallSettings = (): CallSettingsResponse | undefined => {\n const { settings$ } = useCallState();\n return useObservableValue(settings$);\n};\n\n/**\n * Returns whether the call has transcribing enabled.\n */\nexport const useIsCallTranscribingInProgress = (): boolean => {\n const { transcribing$ } = useCallState();\n return useObservableValue(transcribing$);\n};\n\n/**\n * Returns information about the user who has marked this call as ended.\n */\nexport const useCallEndedBy = (): UserResponse | undefined => {\n const { endedBy$ } = useCallState();\n return useObservableValue(endedBy$);\n};\n\n/**\n * Utility hook which provides a boolean indicating whether there is\n * a participant in the current call which shares their screen.\n *\n * @category Call State\n */\nexport const useHasOngoingScreenShare = (): boolean => {\n const { hasOngoingScreenShare$ } = useCallState();\n return useObservableValue(hasOngoingScreenShare$);\n};\n\n/**\n * Utility hook which provides the latest stats report of the current call.\n *\n * The latest stats report of the current call.\n * When stats gathering is enabled, this observable will emit a new value\n * at a regular (configurable) interval.\n *\n * Consumers of this observable can implement their own batching logic\n * in case they want to show historical stats data.\n *\n * @category Call State\n */\nexport const useCallStatsReport = (): CallStatsReport | undefined => {\n const { callStatsReport$ } = useCallState();\n return useObservableValue(callStatsReport$);\n};\n\n/**\n * Utility hook which provides the dominant speaker of the current call.\n *\n * @category Call State\n */\nexport const useDominantSpeaker = (): StreamVideoParticipant | undefined => {\n const { dominantSpeaker$ } = useCallState();\n return useObservableValue(dominantSpeaker$);\n};\n\n/**\n * Utility hook which provides a list of call members.\n *\n * @category Call State\n */\nexport const useCallMembers = (): MemberResponse[] => {\n const { members$ } = useCallState();\n return useObservableValue(members$);\n};\n\n/**\n * Utility hook providing the current calling state of the call. For example, `RINGING` or `JOINED`.\n *\n * @category Call State\n */\nexport const useCallCallingState = () => {\n const { callingState$ } = useCallState();\n return useObservableValue(callingState$);\n};\n\n/**\n * Utility hook providing the actual start time of the current session.\n * Useful for calculating the call duration.\n *\n * @category Call State\n */\nexport const useCallStartedAt = () => {\n const { startedAt$ } = useCallState();\n return useObservableValue(startedAt$);\n};\n\n/**\n * A hook which provides a list of all participants that have joined an active call.\n *\n * @category Call State\n *\n * @param options.sortBy - A comparator function to sort the participants by.\n * Make sure to memoize output of the `combineComparators` function\n * (or keep it out of component's scope if possible) before passing it down to this property.\n */\nexport const useParticipants = ({\n sortBy,\n}: {\n /**\n * Make sure to memoize output of the `combineComparators` function\n * (or keep it out of component's scope if possible) before passing it down to this property.\n */\n sortBy?: Comparator<StreamVideoParticipant>;\n} = {}) => {\n const { participants$ } = useCallState();\n const participants = useObservableValue(participants$);\n\n return useMemo(() => {\n if (sortBy) {\n return [...participants].sort(sortBy);\n }\n return participants;\n }, [participants, sortBy]);\n};\n\n/**\n * A hook which provides a StreamVideoLocalParticipant object.\n * It signals that I have joined a call.\n *\n * @category Call State\n */\nexport const useLocalParticipant = () => {\n const { localParticipant$ } = useCallState();\n return useObservableValue(localParticipant$);\n};\n\n/**\n * A hook which provides a list of all other participants than me that have joined an active call.\n *\n * @category Call State\n */\nexport const useRemoteParticipants = () => {\n const { remoteParticipants$ } = useCallState();\n return useObservableValue(remoteParticipants$);\n};\n\n/**\n * Returns the approximate participant count of the active call.\n * This includes the anonymous users as well, and it is computed on the server.\n *\n * @category Call State\n */\nexport const useParticipantCount = () => {\n const { participantCount$ } = useCallState();\n return useObservableValue(participantCount$);\n};\n\n/**\n * Returns the approximate anonymous participant count of the active call.\n * The regular participants are not included in this count. It is computed on the server.\n *\n * @category Call State\n */\nexport const useAnonymousParticipantCount = () => {\n const { anonymousParticipantCount$ } = useCallState();\n return useObservableValue(anonymousParticipantCount$);\n};\n\n/**\n * Returns the generated thumbnail of the current call, if enabled in settings.\n */\nexport const useCallThumbnail = () => {\n const { thumbnails$ } = useCallState();\n return useObservableValue(thumbnails$);\n};\n\n/**\n * Returns the camera state of the current call.\n *\n * @category Camera Manager State\n *\n */\nexport const useCameraState = () => {\n const call = useCall();\n const { camera } = call as Call;\n\n const devices$ = useMemo(() => camera.listDevices(), [camera]);\n\n const status = useObservableValue(camera.state.status$);\n const direction = useObservableValue(camera.state.direction$);\n const mediaStream = useObservableValue(camera.state.mediaStream$);\n const selectedDevice = useObservableValue(camera.state.selectedDevice$);\n const devices = useObservableValue(devices$);\n const isMute = status !== 'enabled';\n\n return {\n camera,\n status,\n isEnabled: status === 'enabled',\n direction,\n mediaStream,\n devices,\n selectedDevice,\n isMute,\n };\n};\n\n/**\n * Returns the microphone state of the current call.\n *\n * @category Microphone Manager State\n */\nexport const useMicrophoneState = () => {\n const call = useCall();\n const { microphone } = call as Call;\n\n const devices$ = useMemo(() => microphone.listDevices(), [microphone]);\n\n const { state } = microphone;\n const status = useObservableValue(state.status$);\n const mediaStream = useObservableValue(state.mediaStream$);\n const selectedDevice = useObservableValue(state.selectedDevice$);\n const devices = useObservableValue(devices$);\n const isSpeakingWhileMuted = useObservableValue(state.speakingWhileMuted$);\n const isMute = status !== 'enabled';\n\n return {\n microphone,\n status,\n isEnabled: status === 'enabled',\n mediaStream,\n devices,\n selectedDevice,\n isSpeakingWhileMuted,\n isMute,\n };\n};\n\n/**\n * Returns the speaker state of the current call.\n */\nexport const useSpeakerState = () => {\n const call = useCall();\n const { speaker } = call as Call;\n\n const devices$ = useMemo(() => speaker.listDevices(), [speaker]);\n const devices = useObservableValue(devices$);\n const selectedDevice = useObservableValue(speaker.state.selectedDevice$);\n\n return {\n speaker,\n devices,\n selectedDevice,\n isDeviceSelectionSupported: speaker.state.isDeviceSelectionSupported,\n };\n};\n\n/**\n * Returns the Screen Share state of the current call.\n */\nexport const useScreenShareState = () => {\n const call = useCall();\n const { screenShare } = call as Call;\n\n const status = useObservableValue(screenShare.state.status$);\n const mediaStream = useObservableValue(screenShare.state.mediaStream$);\n const isMute = status !== 'enabled';\n\n return {\n screenShare,\n mediaStream,\n status,\n isMute,\n };\n};\n","import { OwnCapability } from '@stream-io/video-client';\nimport { useCallState } from './callStateHooks';\nimport { useObservableValue } from './useObservableValue';\n\n/**\n * Hook that returns true if the local participant has all the given permissions.\n *\n * @param permissions the permissions to check.\n *\n * @category Call State\n */\nexport const useHasPermissions = (...permissions: OwnCapability[]): boolean => {\n const capabilities = useOwnCapabilities();\n return permissions.every((permission) => capabilities?.includes(permission));\n};\n\n/**\n * A hook which returns the local participant's own capabilities.\n *\n * @category Call State\n */\nexport const useOwnCapabilities = (): OwnCapability[] | undefined => {\n const { ownCapabilities$ } = useCallState();\n return useObservableValue(ownCapabilities$);\n};\n","import { useStreamVideoClient } from '../contexts';\nimport { useObservableValue } from './useObservableValue';\n\n/**\n * Utility hook which provides access to client's state store.\n */\nexport const useStore = () => {\n const client = useStreamVideoClient();\n if (!client) {\n throw new Error(\n `StreamVideoClient isn't initialized or this hook is called outside of <StreamVideo> context.`,\n );\n }\n return client.readOnlyStateStore;\n};\n\n/**\n * Utility hook which provides a list of all notifications about created calls.\n * In the ring call settings, these calls can be outgoing (I have called somebody)\n * or incoming (somebody has called me).\n *\n * @category Client State\n */\nexport const useCalls = () => {\n const { calls$ } = useStore();\n return useObservableValue(calls$);\n};\n\n/**\n * Returns the current connected user.\n *\n * @category Client State\n */\nexport const useConnectedUser = () => {\n const { connectedUser$ } = useStore();\n return useObservableValue(connectedUser$);\n};\n","import * as CallStateHooks from './callStateHooks';\n\nexport * from './permissions';\nexport * from './store';\n\n/**\n * A hook-alike function that exposes all call state hooks.\n *\n * @category Call State\n */\nexport const useCallStateHooks = () => CallStateHooks;\n","import { OwnCapability } from '@stream-io/video-client';\n\nimport { PropsWithChildren } from 'react';\nimport { useCall } from '../contexts';\nimport { useCallStateHooks, useOwnCapabilities } from '../hooks';\n\ntype RestrictedProps = PropsWithChildren<{\n /**\n * Required grants for the component to be able to render supplied children elements\n */\n requiredGrants: OwnCapability[];\n /**\n * Render children only if user can request capability, but does not have it\n */\n canRequestOnly?: boolean;\n /**\n * Render children only if user has capability\n */\n hasPermissionsOnly?: boolean;\n /**\n * Require all grants specified in `requiredGrants` to be available in the `availableGrants`,\n * component by default requires only one grant to appear in both arrays to render its children\n */\n requireAll?: boolean;\n}>;\n\nexport const Restricted = ({\n canRequestOnly,\n hasPermissionsOnly,\n requiredGrants,\n requireAll = true,\n children,\n}: RestrictedProps) => {\n const call = useCall();\n const ownCapabilities = useOwnCapabilities();\n const { useCallSettings } = useCallStateHooks();\n const settings = useCallSettings();\n const hasPermissions = requiredGrants[requireAll ? 'every' : 'some'](\n (capability) => ownCapabilities?.includes(capability),\n );\n\n if (hasPermissionsOnly) return hasPermissions ? <>{children}</> : null;\n\n const canRequest = requiredGrants.some((capability) =>\n call?.permissionsContext.canRequest(capability, settings),\n );\n\n if (canRequestOnly) return canRequest ? <>{children}</> : null;\n\n if (hasPermissions || canRequest) return <>{children}</>;\n\n return null;\n};\n"],"names":["createContext","_jsx","useContext","useState","useEffect","RxUtils","CallState","useMemo","_Fragment"],"mappings":";;;;;;;AAGA,MAAM,iBAAiB,GAAGA,mBAAa,CAAmB,SAAS,CAAC,CAAC;AASrE;;AAEG;AACU,MAAA,kBAAkB,GAAG,CAChC,KAAiD,KAC/C;AACF,IAAA,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;AACjC,IAAA,QACEC,cAAA,CAAC,iBAAiB,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,IAAI,EAAA,QAAA,EACpC,QAAQ,EAAA,CACkB,EAC7B;AACJ,EAAE;AAEF;;AAEG;AACI,MAAM,OAAO,GAAG,MAAK;AAC1B,IAAA,OAAOC,gBAAU,CAAC,iBAAiB,CAAC,CAAC;AACvC;;AC7BO,MAAM,aAAa,GAAG,CAC3B,eAAgC,EAChC,SAAiB,KAEjB,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,YAAY,CAAC,KAAI;IAClE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,SAAS,GAAG,YAAY,EAAE,CAAC;AACzC,IAAA,OAAO,GAAG,CAAC;AACb,CAAC,EAAE,EAA0B;;ACAxB,MAAM,gBAAgB,GAAG,KAAK;AAC9B,MAAM,iBAAiB,GAAG,eAAe;AAChD,MAAM,cAAc,GAAG;AACrB,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,eAAe,EAAE,gBAAgB;CAClC,CAAC;AAEF,MAAM,6BAA6B,GAAG,aAAa,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;AAE9D,MAAA,0BAA0B,GAAG,CAAC,GAAW,KAAK,IAAI;MAWlD,UAAU,CAAA;;AAMrB,IAAA,WAAA,CAAY,UAAiC,EAAE,EAAA;;QAF/C,IAAC,CAAA,CAAA,GAAuB,0BAA0B,CAAC;QAyCnD,IAAI,CAAA,IAAA,GAAG,YAAW;YAChB,IAAI;gBACF,IAAI,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AACzC,aAAA;AAAC,YAAA,OAAO,CAAC,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,CAAA,mCAAA,EAAsC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,CAAA,CAAC,CAAC;AAC1E,aAAA;AACD,YAAA,OAAO,IAAI,CAAC;AACd,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,cAAc,GAAG,OACf,QAA8B,EAC9B,QAAkD,KAChD;AACF,YAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;gBAAE,OAAO;;;YAGxC,MAAM,eAAe,GACnB,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,SAAS;AAC/C,kBAAE,MAAM,CAAC,SAAS,CAAC,QAAQ;kBACzB,SAAS,CAAC;YAChB,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,IAAI,eAAe,CAAC,CAAC;AACpE,YAAA,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;AACnC,SAAC,CAAC;QAEF,IAA+B,CAAA,+BAAA,GAAG,CAAC,EACjC,GAAG,EACH,YAAY,GAIb,KAAI;AACH,YAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;gBAAE,OAAO;AACxC,YAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CACjC,GAAG,EACH,iBAAiB,EACjB,YAAY,EACZ,IAAI,EACJ,IAAI,CACL,CAAC;AACJ,SAAC,CAAC;QAEM,IAAmB,CAAA,mBAAA,GAAG,MAAK;AACjC,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;AACpC,gBAAA,OAAO,CAAC,IAAI,CACV,uEAAuE,CACxE,CAAC;AACH,aAAA;AACD,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;AACzC,SAAC,CAAC;AAtFA,QAAA,MAAM,EACJ,KAAK,GAAG,cAAc,CAAC,KAAK,EAC5B,eAAe,GAAG,cAAc,CAAC,eAAe,EAChD,qBAAqB,GACtB,GAAG,OAAO,CAAC;AAEZ,QAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;YACzC,KAAK;AACL,YAAA,SAAS,EAAE,iBAAiB;AAC5B,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,aAAa,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;AACrC,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,GAAG,EAAE,eAAe;AACpB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,sBAAsB,EAAE,CAAC,GAAG,KAAI;AAC9B,gBAAA,OAAO,GAAG,CAAC;aACZ;AACD,YAAA,SAAS,EAAE,6BAA6B;AACzC,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,qBAAqB,EAAE;YACzB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,aAAa,EAAE,MAAK;AACvC,gBAAA,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,YAAY,CAAC,KAAI;oBACpE,IAAI,CAAC,+BAA+B,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;AAC9D,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;AACJ,SAAA;KACF;AAED,IAAA,IAAI,eAAe,GAAA;QACjB,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3B,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;KACnC;AAED,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;KACxC;AAmDF;;ACzGD,MAAM,iBAAiB,GAAGF,mBAAa,CAAyB;AAC9D,IAAA,CAAC,EAAE,0BAA0B;AAC9B,CAAA,CAAC,CAAC;AAUI,MAAM,kBAAkB,GAAG,CAAC,EACjC,QAAQ,EACR,GAAG,gBAAgB,EACwB,KAAI;IAC/C,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC;AAEpD,IAAA,QACEC,cAAC,CAAA,iBAAiB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,YAC3C,QAAQ,EAAA,CACkB,EAC7B;AACJ,EAAE;AAEK,MAAM,aAAa,GAAG,CAAC,EAC5B,YAAY,EACZ,QAAQ,EACR,qBAAqB,GACJ,KAAI;IACrB,MAAM,CAAC,IAAI,CAAC,GAAGE,cAAQ,CACrB,MACE,YAAY;QACZ,IAAI,UAAU,CAAC,EAAE,eAAe,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAC,CACvE,CAAC;AACF,IAAA,MAAM,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAGA,cAAQ,CACpC,MAAM,0BAA0B,CACjC,CAAC;IAEFC,eAAS,CAAC,MAAK;AACb,QAAA,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,aAAa,EAAE;YAClB,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,gBAAgB,CAAC,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1E,OAAO;AACR,SAAA;AACD,QAAA,IAAI,QAAQ,IAAI,IAAI,EAAE,eAAe,KAAK,QAAQ,EAAE;YAClD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAI;AAC1C,gBAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;AACpD,aAAC,CAAC,CAAC;AACJ,SAAA;KACF,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC;AAE1D,IAAA,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACrB,EAAE;AAEW,MAAA,OAAO,GAAG,MAAMF,gBAAU,CAAC,iBAAiB;;AClEzD,MAAM,kBAAkB,GAAGF,mBAAa,CACtC,SAAS,CACV,CAAC;AAUF;;;;;AAKG;AACU,MAAA,mBAAmB,GAAG,CAAC,EAClC,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,qBAAqB,GACe,KAAI;AACxC,IAAA,QACEC,cAAA,CAAC,kBAAkB,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,MAAM,EAAA,QAAA,EACxCA,cAAC,CAAA,kBAAkB,EACjB,EAAA,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,QAAQ,EAClB,qBAAqB,EAAE,qBAAqB,EAE3C,QAAA,EAAA,QAAQ,EACU,CAAA,EAAA,CACO,EAC9B;AACJ,EAAE;AAEF;;;;;AAKG;AACI,MAAM,oBAAoB,GAAG,MAAK;AACvC,IAAA,OAAOC,gBAAU,CAAC,kBAAkB,CAAC,CAAC;AACxC;;ACjDA;;;AAGG;AACI,MAAM,kBAAkB,GAAG,CAAI,WAA0B,KAAI;AAClE,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGC,cAAQ,CAAI,MACpCE,mBAAO,CAAC,eAAe,CAAC,WAAW,CAAC,CACrC,CAAC;IACFD,eAAS,CAAC,MAAK;QACb,MAAM,YAAY,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACrD,QAAA,OAAO,MAAK;YACV,YAAY,CAAC,WAAW,EAAE,CAAC;AAC7B,SAAC,CAAC;AACJ,KAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;AAElB,IAAA,OAAO,KAAK,CAAC;AACf,CAAC;;ACHD;;;;AAIG;AACI,MAAM,YAAY,GAAG,MAAK;AAC/B,IAAA,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;;;IAGvB,IAAI,CAAC,IAAI,EAAE;QACT,MAAM,OAAO,GACX,uDAAuD;AACvD,YAAA,6EAA6E,CAAC;AAChF,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO,IAAIE,qBAAS,EAAE,CAAC;AACxB,KAAA;IACD,OAAO,IAAI,CAAC,KAAK,CAAC;AACpB,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,4BAA4B,GAAG,MAAc;AACxD,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE,CAAC;AACtC,IAAA,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,kCAAkC,GAAG,MAAc;AAC9D,IAAA,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,CAAC;AACnC,IAAA,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC3C,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,KAAK,CAAC;IAC1B,OAAO,MAAM,CAAC,YAAY,CAAC;AAC7B,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,aAAa,GAAG,MAAc;AACzC,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE,CAAC;AACtC,IAAA,MAAM,aAAa,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACrD,OAAO,CAAC,aAAa,CAAC;AACxB,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,qBAAqB,GAAG,MAAe;AAClD,IAAA,MAAM,EAAE,eAAe,EAAE,GAAG,YAAY,EAAE,CAAC;AAC3C,IAAA,OAAO,kBAAkB,CAAC,eAAe,CAAC,CAAC;AAC7C,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,gBAAgB,GAAG,MAAuB;AACrD,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE,CAAC;AACtC,IAAA,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,cAAc,GAAG,MAAuB;AACnD,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,CAAC;AACpC,IAAA,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,eAAe,GAAG,MAAuB;AACpD,IAAA,MAAM,EAAE,SAAS,EAAE,GAAG,YAAY,EAAE,CAAC;AACrC,IAAA,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,gBAAgB,GAAG,MAAuB;AACrD,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE,CAAC;AACtC,IAAA,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,gBAAgB,GAAG,MAA+B;AAC7D,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE,CAAC;AACtC,IAAA,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,iBAAiB,GAAG,MAA0B;AACzD,IAAA,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,CAAC;AACnC,IAAA,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,aAAa,GAAG,MAAiC;AAC5D,IAAA,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,CAAC;AACnC,IAAA,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,cAAc,GAAG,MAAsC;AAClE,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,CAAC;AACpC,IAAA,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,cAAc,GAAG,MAAsC;AAClE,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,CAAC;AACpC,IAAA,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,eAAe,GAAG,MAAuC;AACpE,IAAA,MAAM,EAAE,SAAS,EAAE,GAAG,YAAY,EAAE,CAAC;AACrC,IAAA,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,+BAA+B,GAAG,MAAc;AAC3D,IAAA,MAAM,EAAE,aAAa,EAAE,GAAG,YAAY,EAAE,CAAC;AACzC,IAAA,OAAO,kBAAkB,CAAC,aAAa,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,cAAc,GAAG,MAA+B;AAC3D,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,CAAC;AACpC,IAAA,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF;;;;;AAKG;AACI,MAAM,wBAAwB,GAAG,MAAc;AACpD,IAAA,MAAM,EAAE,sBAAsB,EAAE,GAAG,YAAY,EAAE,CAAC;AAClD,IAAA,OAAO,kBAAkB,CAAC,sBAAsB,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF;;;;;;;;;;;AAWG;AACI,MAAM,kBAAkB,GAAG,MAAkC;AAClE,IAAA,MAAM,EAAE,gBAAgB,EAAE,GAAG,YAAY,EAAE,CAAC;AAC5C,IAAA,OAAO,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,kBAAkB,GAAG,MAAyC;AACzE,IAAA,MAAM,EAAE,gBAAgB,EAAE,GAAG,YAAY,EAAE,CAAC;AAC5C,IAAA,OAAO,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,cAAc,GAAG,MAAuB;AACnD,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,CAAC;AACpC,IAAA,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,mBAAmB,GAAG,MAAK;AACtC,IAAA,MAAM,EAAE,aAAa,EAAE,GAAG,YAAY,EAAE,CAAC;AACzC,IAAA,OAAO,kBAAkB,CAAC,aAAa,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF;;;;;AAKG;AACI,MAAM,gBAAgB,GAAG,MAAK;AACnC,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE,CAAC;AACtC,IAAA,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF;;;;;;;;AAQG;AACI,MAAM,eAAe,GAAG,CAAC,EAC9B,MAAM,GAAA,GAOJ,EAAE,KAAI;AACR,IAAA,MAAM,EAAE,aAAa,EAAE,GAAG,YAAY,EAAE,CAAC;AACzC,IAAA,MAAM,YAAY,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAEvD,OAAOC,aAAO,CAAC,MAAK;AAClB,QAAA,IAAI,MAAM,EAAE;YACV,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvC,SAAA;AACD,QAAA,OAAO,YAAY,CAAC;AACtB,KAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF;;;;;AAKG;AACI,MAAM,mBAAmB,GAAG,MAAK;AACtC,IAAA,MAAM,EAAE,iBAAiB,EAAE,GAAG,YAAY,EAAE,CAAC;AAC7C,IAAA,OAAO,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,qBAAqB,GAAG,MAAK;AACxC,IAAA,MAAM,EAAE,mBAAmB,EAAE,GAAG,YAAY,EAAE,CAAC;AAC/C,IAAA,OAAO,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF;;;;;AAKG;AACI,MAAM,mBAAmB,GAAG,MAAK;AACtC,IAAA,MAAM,EAAE,iBAAiB,EAAE,GAAG,YAAY,EAAE,CAAC;AAC7C,IAAA,OAAO,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF;;;;;AAKG;AACI,MAAM,4BAA4B,GAAG,MAAK;AAC/C,IAAA,MAAM,EAAE,0BAA0B,EAAE,GAAG,YAAY,EAAE,CAAC;AACtD,IAAA,OAAO,kBAAkB,CAAC,0BAA0B,CAAC,CAAC;AACxD,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,gBAAgB,GAAG,MAAK;AACnC,IAAA,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,CAAC;AACvC,IAAA,OAAO,kBAAkB,CAAC,WAAW,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF;;;;;AAKG;AACI,MAAM,cAAc,GAAG,MAAK;AACjC,IAAA,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;AACvB,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAY,CAAC;AAEhC,IAAA,MAAM,QAAQ,GAAGA,aAAO,CAAC,MAAM,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAE/D,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAClE,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AACxE,IAAA,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAC7C,IAAA,MAAM,MAAM,GAAG,MAAM,KAAK,SAAS,CAAC;IAEpC,OAAO;QACL,MAAM;QACN,MAAM;QACN,SAAS,EAAE,MAAM,KAAK,SAAS;QAC/B,SAAS;QACT,WAAW;QACX,OAAO;QACP,cAAc;QACd,MAAM;KACP,CAAC;AACJ,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,kBAAkB,GAAG,MAAK;AACrC,IAAA,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;AACvB,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,IAAY,CAAC;AAEpC,IAAA,MAAM,QAAQ,GAAGA,aAAO,CAAC,MAAM,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AAEvE,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;IAC7B,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAG,kBAAkB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AACjE,IAAA,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAC3E,IAAA,MAAM,MAAM,GAAG,MAAM,KAAK,SAAS,CAAC;IAEpC,OAAO;QACL,UAAU;QACV,MAAM;QACN,SAAS,EAAE,MAAM,KAAK,SAAS;QAC/B,WAAW;QACX,OAAO;QACP,cAAc;QACd,oBAAoB;QACpB,MAAM;KACP,CAAC;AACJ,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,eAAe,GAAG,MAAK;AAClC,IAAA,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;AACvB,IAAA,MAAM,EAAE,OAAO,EAAE,GAAG,IAAY,CAAC;AAEjC,IAAA,MAAM,QAAQ,GAAGA,aAAO,CAAC,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AACjE,IAAA,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,cAAc,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAEzE,OAAO;QACL,OAAO;QACP,OAAO;QACP,cAAc;AACd,QAAA,0BAA0B,EAAE,OAAO,CAAC,KAAK,CAAC,0BAA0B;KACrE,CAAC;AACJ,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,mBAAmB,GAAG,MAAK;AACtC,IAAA,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;AACvB,IAAA,MAAM,EAAE,WAAW,EAAE,GAAG,IAAY,CAAC;IAErC,MAAM,MAAM,GAAG,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AACvE,IAAA,MAAM,MAAM,GAAG,MAAM,KAAK,SAAS,CAAC;IAEpC,OAAO;QACL,WAAW;QACX,WAAW;QACX,MAAM;QACN,MAAM;KACP,CAAC;AACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChaD;;;;;;AAMG;MACU,iBAAiB,GAAG,CAAC,GAAG,WAA4B,KAAa;AAC5E,IAAA,MAAM,YAAY,GAAG,kBAAkB,EAAE,CAAC;AAC1C,IAAA,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,UAAU,KAAK,YAAY,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/E,EAAE;AAEF;;;;AAIG;AACI,MAAM,kBAAkB,GAAG,MAAkC;AAClE,IAAA,MAAM,EAAE,gBAAgB,EAAE,GAAG,YAAY,EAAE,CAAC;AAC5C,IAAA,OAAO,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;AAC9C;;ACrBA;;AAEG;AACI,MAAM,QAAQ,GAAG,MAAK;AAC3B,IAAA,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;IACtC,IAAI,CAAC,MAAM,EAAE;AACX,QAAA,MAAM,IAAI,KAAK,CACb,CAAA,4FAAA,CAA8F,CAC/F,CAAC;AACH,KAAA;IACD,OAAO,MAAM,CAAC,kBAAkB,CAAC;AACnC,EAAE;AAEF;;;;;;AAMG;AACI,MAAM,QAAQ,GAAG,MAAK;AAC3B,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;AAC9B,IAAA,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACpC,EAAE;AAEF;;;;AAIG;AACI,MAAM,gBAAgB,GAAG,MAAK;AACnC,IAAA,MAAM,EAAE,cAAc,EAAE,GAAG,QAAQ,EAAE,CAAC;AACtC,IAAA,OAAO,kBAAkB,CAAC,cAAc,CAAC,CAAC;AAC5C;;AC/BA;;;;AAIG;MACU,iBAAiB,GAAG,MAAM;;ACgB1B,MAAA,UAAU,GAAG,CAAC,EACzB,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,UAAU,GAAG,IAAI,EACjB,QAAQ,GACQ,KAAI;AACpB,IAAA,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;AACvB,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;AAC7C,IAAA,MAAM,EAAE,eAAe,EAAE,GAAG,iBAAiB,EAAE,CAAC;AAChD,IAAA,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;IACnC,MAAM,cAAc,GAAG,cAAc,CAAC,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC,CAClE,CAAC,UAAU,KAAK,eAAe,EAAE,QAAQ,CAAC,UAAU,CAAC,CACtD,CAAC;AAEF,IAAA,IAAI,kBAAkB;QAAE,OAAO,cAAc,GAAGN,cAAA,CAAAO,mBAAA,EAAA,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAI,GAAG,IAAI,CAAC;IAEvE,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,UAAU,KAChD,IAAI,EAAE,kBAAkB,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,CAC1D,CAAC;AAEF,IAAA,IAAI,cAAc;QAAE,OAAO,UAAU,GAAGP,cAAA,CAAAO,mBAAA,EAAA,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAI,GAAG,IAAI,CAAC;IAE/D,IAAI,cAAc,IAAI,UAAU;QAAE,OAAOP,cAAA,CAAAO,mBAAA,EAAA,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAI,CAAC;AAEzD,IAAA,OAAO,IAAI,CAAC;AACd;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.es.js CHANGED
@@ -5,23 +5,14 @@ import { RxUtils, CallState } from '@stream-io/video-client';
5
5
 
6
6
  const StreamCallContext = createContext(undefined);
7
7
  /**
8
- *
9
- * @param props
10
- * @returns
11
- *
12
- * @category Call State
13
- *
14
- * @react If you're using the React SDK we recommend using the `StreamCall` component that wraps the `StreamCallProvider`. You only need to use the `StreamCallProvider` for advanced use-cases.
8
+ * A provider for the call object.
15
9
  */
16
10
  const StreamCallProvider = (props) => {
17
11
  const { call, children } = props;
18
12
  return (jsx(StreamCallContext.Provider, { value: call, children: children }));
19
13
  };
20
14
  /**
21
- *
22
- * @returns
23
- *
24
- * @category Call State
15
+ * A hook to get the call object from the closest provider.
25
16
  */
26
17
  const useCall = () => {
27
18
  return useContext(StreamCallContext);
@@ -200,7 +191,7 @@ const useIsCallRecordingInProgress = () => {
200
191
  *
201
192
  * @category Call State
202
193
  */
203
- const useIsCallBroadcastingInProgress = () => {
194
+ const useIsCallHLSBroadcastingInProgress = () => {
204
195
  const { egress$ } = useCallState();
205
196
  const egress = useObservableValue(egress$);
206
197
  if (!egress)
@@ -445,11 +436,22 @@ const useCallThumbnail = () => {
445
436
  const useCameraState = () => {
446
437
  const call = useCall();
447
438
  const { camera } = call;
439
+ const devices$ = useMemo(() => camera.listDevices(), [camera]);
448
440
  const status = useObservableValue(camera.state.status$);
449
441
  const direction = useObservableValue(camera.state.direction$);
442
+ const mediaStream = useObservableValue(camera.state.mediaStream$);
443
+ const selectedDevice = useObservableValue(camera.state.selectedDevice$);
444
+ const devices = useObservableValue(devices$);
445
+ const isMute = status !== 'enabled';
450
446
  return {
447
+ camera,
451
448
  status,
449
+ isEnabled: status === 'enabled',
452
450
  direction,
451
+ mediaStream,
452
+ devices,
453
+ selectedDevice,
454
+ isMute,
453
455
  };
454
456
  };
455
457
  /**
@@ -460,19 +462,55 @@ const useCameraState = () => {
460
462
  const useMicrophoneState = () => {
461
463
  const call = useCall();
462
464
  const { microphone } = call;
463
- const status = useObservableValue(microphone.state.status$);
464
- const selectedDevice = useObservableValue(microphone.state.selectedDevice$);
465
+ const devices$ = useMemo(() => microphone.listDevices(), [microphone]);
466
+ const { state } = microphone;
467
+ const status = useObservableValue(state.status$);
468
+ const mediaStream = useObservableValue(state.mediaStream$);
469
+ const selectedDevice = useObservableValue(state.selectedDevice$);
470
+ const devices = useObservableValue(devices$);
471
+ const isSpeakingWhileMuted = useObservableValue(state.speakingWhileMuted$);
472
+ const isMute = status !== 'enabled';
465
473
  return {
474
+ microphone,
466
475
  status,
476
+ isEnabled: status === 'enabled',
477
+ mediaStream,
478
+ devices,
467
479
  selectedDevice,
480
+ isSpeakingWhileMuted,
481
+ isMute,
468
482
  };
469
483
  };
484
+ /**
485
+ * Returns the speaker state of the current call.
486
+ */
487
+ const useSpeakerState = () => {
488
+ const call = useCall();
489
+ const { speaker } = call;
490
+ const devices$ = useMemo(() => speaker.listDevices(), [speaker]);
491
+ const devices = useObservableValue(devices$);
492
+ const selectedDevice = useObservableValue(speaker.state.selectedDevice$);
493
+ return {
494
+ speaker,
495
+ devices,
496
+ selectedDevice,
497
+ isDeviceSelectionSupported: speaker.state.isDeviceSelectionSupported,
498
+ };
499
+ };
500
+ /**
501
+ * Returns the Screen Share state of the current call.
502
+ */
470
503
  const useScreenShareState = () => {
471
504
  const call = useCall();
472
505
  const { screenShare } = call;
473
506
  const status = useObservableValue(screenShare.state.status$);
507
+ const mediaStream = useObservableValue(screenShare.state.mediaStream$);
508
+ const isMute = status !== 'enabled';
474
509
  return {
510
+ screenShare,
511
+ mediaStream,
475
512
  status,
513
+ isMute,
476
514
  };
477
515
  };
478
516
 
@@ -500,7 +538,7 @@ var CallStateHooks = /*#__PURE__*/Object.freeze({
500
538
  useCameraState: useCameraState,
501
539
  useDominantSpeaker: useDominantSpeaker,
502
540
  useHasOngoingScreenShare: useHasOngoingScreenShare,
503
- useIsCallBroadcastingInProgress: useIsCallBroadcastingInProgress,
541
+ useIsCallHLSBroadcastingInProgress: useIsCallHLSBroadcastingInProgress,
504
542
  useIsCallLive: useIsCallLive,
505
543
  useIsCallRecordingInProgress: useIsCallRecordingInProgress,
506
544
  useIsCallTranscribingInProgress: useIsCallTranscribingInProgress,
@@ -509,7 +547,8 @@ var CallStateHooks = /*#__PURE__*/Object.freeze({
509
547
  useParticipantCount: useParticipantCount,
510
548
  useParticipants: useParticipants,
511
549
  useRemoteParticipants: useRemoteParticipants,
512
- useScreenShareState: useScreenShareState
550
+ useScreenShareState: useScreenShareState,
551
+ useSpeakerState: useSpeakerState
513
552
  });
514
553
 
515
554
  /**
@@ -574,10 +613,12 @@ const useCallStateHooks = () => CallStateHooks;
574
613
  const Restricted = ({ canRequestOnly, hasPermissionsOnly, requiredGrants, requireAll = true, children, }) => {
575
614
  const call = useCall();
576
615
  const ownCapabilities = useOwnCapabilities();
616
+ const { useCallSettings } = useCallStateHooks();
617
+ const settings = useCallSettings();
577
618
  const hasPermissions = requiredGrants[requireAll ? 'every' : 'some']((capability) => ownCapabilities?.includes(capability));
578
619
  if (hasPermissionsOnly)
579
620
  return hasPermissions ? jsx(Fragment, { children: children }) : null;
580
- const canRequest = requiredGrants.some((capability) => !!call && call.permissionsContext.canRequest(capability));
621
+ const canRequest = requiredGrants.some((capability) => call?.permissionsContext.canRequest(capability, settings));
581
622
  if (canRequestOnly)
582
623
  return canRequest ? jsx(Fragment, { children: children }) : null;
583
624
  if (hasPermissions || canRequest)
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../../src/contexts/StreamCallContext.tsx","../../src/i18n/utils.ts","../../src/i18n/StreamI18n.ts","../../src/contexts/StreamI18nContext.tsx","../../src/contexts/StreamVideoContext.tsx","../../src/hooks/useObservableValue.ts","../../src/hooks/callStateHooks.ts","../../src/hooks/permissions.ts","../../src/hooks/store.ts","../../src/hooks/index.ts","../../src/wrappers/Restricted.tsx"],"sourcesContent":["import { createContext, PropsWithChildren, useContext } from 'react';\nimport { Call } from '@stream-io/video-client';\n\nconst StreamCallContext = createContext<Call | undefined>(undefined);\n\n/**\n *\n * We don't expose types in our docs site but we should still add doc comments\n * @internal\n */\nexport interface StreamCallProviderProps {\n call?: Call;\n}\n\n/**\n *\n * @param props\n * @returns\n *\n * @category Call State\n *\n * @react If you're using the React SDK we recommend using the `StreamCall` component that wraps the `StreamCallProvider`. You only need to use the `StreamCallProvider` for advanced use-cases.\n */\nexport const StreamCallProvider = (\n props: PropsWithChildren<StreamCallProviderProps>,\n) => {\n const { call, children } = props;\n return (\n <StreamCallContext.Provider value={call}>\n {children}\n </StreamCallContext.Provider>\n );\n};\n\n/**\n *\n * @returns\n *\n * @category Call State\n */\nexport const useCall = () => {\n return useContext(StreamCallContext);\n};\n","import { TranslationsMap, TranslationsRegistry } from './types';\n\nexport const mapToRegistry = (\n translationsMap: TranslationsMap,\n namespace: string,\n) =>\n Object.entries(translationsMap).reduce((acc, [lng, translations]) => {\n acc[lng] = { [namespace]: translations };\n return acc;\n }, {} as TranslationsRegistry);\n","import i18next from 'i18next';\nimport { mapToRegistry } from './utils';\nimport {\n TranslationLanguage,\n TranslationSheet,\n TranslationsMap,\n TranslatorFunction,\n} from './types';\n\nexport const DEFAULT_LANGUAGE = 'en';\nexport const DEFAULT_NAMESPACE = 'stream-video';\nconst DEFAULT_CONFIG = {\n debug: false,\n currentLanguage: DEFAULT_LANGUAGE,\n};\n\nconst DEFAULT_TRANSLATIONS_REGISTRY = mapToRegistry({}, DEFAULT_NAMESPACE);\n\nexport const defaultTranslationFunction = (key: string) => key;\n\nexport type StreamI18nConstructor = {\n /** Language into which the provided strings are translated */\n currentLanguage?: TranslationLanguage;\n /** Logs info level to console output. Helps find issues with loading not working. */\n debug?: boolean;\n /** Custom translations that will be merged with the defaults provided by the library. */\n translationsOverrides?: TranslationsMap;\n};\n\nexport class StreamI18n {\n /** Exposed i18n instance from the i18next library */\n i18nInstance;\n /** Translator function that converts the provided string into its equivalent in the current language. */\n t: TranslatorFunction = defaultTranslationFunction;\n /** Simple logger function */\n constructor(options: StreamI18nConstructor = {}) {\n const {\n debug = DEFAULT_CONFIG.debug,\n currentLanguage = DEFAULT_CONFIG.currentLanguage,\n translationsOverrides,\n } = options;\n\n this.i18nInstance = i18next.createInstance({\n debug,\n defaultNS: DEFAULT_NAMESPACE,\n fallbackLng: false,\n interpolation: { escapeValue: false },\n keySeparator: false,\n lng: currentLanguage,\n nsSeparator: false,\n parseMissingKeyHandler: (key) => {\n return key;\n },\n resources: DEFAULT_TRANSLATIONS_REGISTRY,\n });\n\n if (translationsOverrides) {\n this.i18nInstance.on('initialized', () => {\n Object.entries(translationsOverrides).forEach(([lng, translations]) => {\n this.registerTranslationsForLanguage({ lng, translations });\n });\n });\n }\n }\n\n get currentLanguage() {\n this._checkIsInitialized();\n return this.i18nInstance.language;\n }\n\n get isInitialized() {\n return this.i18nInstance.isInitialized;\n }\n\n init = async () => {\n try {\n this.t = await this.i18nInstance.init();\n } catch (e) {\n console.error(`Failed to initialize translations: ${JSON.stringify(e)}`);\n }\n return this;\n };\n\n changeLanguage = async (\n language?: TranslationLanguage,\n onChange?: (language: TranslationLanguage) => void,\n ) => {\n if (!this._checkIsInitialized()) return;\n // i18next detects the language, if none provided, but it is better\n // to show this detection here explicitly\n const browserLanguage =\n typeof window !== 'undefined' && window.navigator\n ? window.navigator.language\n : undefined;\n await this.i18nInstance.changeLanguage(language || browserLanguage);\n onChange?.(this.currentLanguage);\n };\n\n registerTranslationsForLanguage = ({\n lng,\n translations,\n }: {\n lng: TranslationLanguage;\n translations: TranslationSheet;\n }) => {\n if (!this._checkIsInitialized()) return;\n this.i18nInstance.addResourceBundle(\n lng,\n DEFAULT_NAMESPACE,\n translations,\n true,\n true,\n );\n };\n\n private _checkIsInitialized = () => {\n if (!this.i18nInstance.isInitialized) {\n console.warn(\n 'I18n instance is not initialized. Call yourStreamI18nInstance.init().',\n );\n }\n return this.i18nInstance.isInitialized;\n };\n}\n","import {\n createContext,\n PropsWithChildren,\n useContext,\n useEffect,\n useState,\n} from 'react';\nimport {\n defaultTranslationFunction,\n StreamI18n,\n TranslationsMap,\n} from '../i18n';\n\ntype StreamI18nContextValue = {\n t: StreamI18n['t'];\n i18n?: StreamI18n;\n};\n\nconst StreamI18nContext = createContext<StreamI18nContextValue>({\n t: defaultTranslationFunction,\n});\n\ntype CreateI18nParams = {\n i18nInstance?: StreamI18n;\n language?: string;\n translationsOverrides?: TranslationsMap;\n};\n\nexport type StreamI18nProviderProps = CreateI18nParams;\n\nexport const StreamI18nProvider = ({\n children,\n ...createI18nParams\n}: PropsWithChildren<StreamI18nProviderProps>) => {\n const { i18n, t } = useCreateI18n(createI18nParams);\n\n return (\n <StreamI18nContext.Provider value={{ t, i18n }}>\n {children}\n </StreamI18nContext.Provider>\n );\n};\n\nexport const useCreateI18n = ({\n i18nInstance,\n language,\n translationsOverrides,\n}: CreateI18nParams) => {\n const [i18n] = useState(\n () =>\n i18nInstance ||\n new StreamI18n({ currentLanguage: language, translationsOverrides }),\n );\n const [t, setTranslationFn] = useState<StreamI18n['t']>(\n () => defaultTranslationFunction,\n );\n\n useEffect(() => {\n const { isInitialized } = i18n;\n if (!isInitialized) {\n i18n.init().then((_i18n) => setTranslationFn(() => _i18n.i18nInstance.t));\n return;\n }\n if (language && i18n?.currentLanguage !== language) {\n i18n.changeLanguage(language).catch((err) => {\n console.log('Error while changing language', err);\n });\n }\n }, [i18n, i18nInstance, language, translationsOverrides]);\n\n return { i18n, t };\n};\n\nexport const useI18n = () => useContext(StreamI18nContext);\n","import { createContext, PropsWithChildren, useContext } from 'react';\nimport { StreamVideoClient } from '@stream-io/video-client';\nimport {\n StreamI18nProvider,\n StreamI18nProviderProps,\n} from './StreamI18nContext';\n\nconst StreamVideoContext = createContext<StreamVideoClient | undefined>(\n undefined,\n);\n\n/**\n * Exclude types from documentation site, but we should still add doc comments\n * @internal\n */\nexport type StreamVideoProps = StreamI18nProviderProps & {\n client: StreamVideoClient;\n};\n\n/**\n * StreamVideo is a provider component which should be used to wrap the entire application.\n * It provides the client object to all children components and initializes the i18n instance.\n * @param PropsWithChildren<StreamVideoProps>\n * @category Client State\n */\nexport const StreamVideoProvider = ({\n children,\n client,\n i18nInstance,\n language,\n translationsOverrides,\n}: PropsWithChildren<StreamVideoProps>) => {\n return (\n <StreamVideoContext.Provider value={client}>\n <StreamI18nProvider\n i18nInstance={i18nInstance}\n language={language}\n translationsOverrides={translationsOverrides}\n >\n {children}\n </StreamI18nProvider>\n </StreamVideoContext.Provider>\n );\n};\n\n/**\n *\n * @returns\n *\n * @category Client State\n */\nexport const useStreamVideoClient = () => {\n return useContext(StreamVideoContext);\n};\n","import type { Observable } from 'rxjs';\nimport { useEffect, useState } from 'react';\nimport { RxUtils } from '@stream-io/video-client';\n\n/**\n * Utility hook which provides the current value of the given observable.\n * @internal\n */\nexport const useObservableValue = <T>(observable$: Observable<T>) => {\n const [value, setValue] = useState<T>(() =>\n RxUtils.getCurrentValue(observable$),\n );\n useEffect(() => {\n const subscription = observable$.subscribe(setValue);\n return () => {\n subscription.unsubscribe();\n };\n }, [observable$]);\n\n return value;\n};\n","import { useMemo } from 'react';\nimport {\n Call,\n CallIngressResponse,\n CallSessionResponse,\n CallSettingsResponse,\n CallState,\n CallStatsReport,\n Comparator,\n EgressResponse,\n MemberResponse,\n StreamVideoParticipant,\n UserResponse,\n} from '@stream-io/video-client';\nimport { useCall } from '../contexts';\nimport { useObservableValue } from './useObservableValue';\n\n/**\n * Utility hook, which provides the current call's state.\n *\n * @category Call State\n */\nexport const useCallState = () => {\n const call = useCall();\n // return an empty and unlinked CallState object if there is no call in the provider\n // this ensures that the hooks always return a value and many null checks can be avoided\n if (!call) {\n const message =\n 'You are using useCallState() outside a Call context. ' +\n 'Please wrap your component in <StreamCall /> and provide a \"call\" instance.';\n console.warn(message);\n return new CallState();\n }\n return call.state;\n};\n\n/**\n * Utility hook which provides information whether the current call is being recorded. It will return `true` if the call is being recorded.\n *\n * @category Call State\n */\nexport const useIsCallRecordingInProgress = (): boolean => {\n const { recording$ } = useCallState();\n return useObservableValue(recording$);\n};\n\n/**\n * Utility hook which provides information whether the current call is broadcasting.\n *\n * @category Call State\n */\nexport const useIsCallBroadcastingInProgress = (): boolean => {\n const { egress$ } = useCallState();\n const egress = useObservableValue(egress$);\n if (!egress) return false;\n return egress.broadcasting;\n};\n\n/**\n * Utility hook which provides information whether the current call is live.\n *\n * @category Call State\n */\nexport const useIsCallLive = (): boolean => {\n const { backstage$ } = useCallState();\n const isBackstageOn = useObservableValue(backstage$);\n return !isBackstageOn;\n};\n\n/**\n * Returns the list of blocked users in the current call.\n */\nexport const useCallBlockedUserIds = (): string[] => {\n const { blockedUserIds$ } = useCallState();\n return useObservableValue(blockedUserIds$);\n};\n\n/**\n * Returns the timestamp when this call was created.\n */\nexport const useCallCreatedAt = (): Date | undefined => {\n const { createdAt$ } = useCallState();\n return useObservableValue(createdAt$);\n};\n\n/**\n * Returns the timestamp when this call was ended.\n */\nexport const useCallEndedAt = (): Date | undefined => {\n const { endedAt$ } = useCallState();\n return useObservableValue(endedAt$);\n};\n\n/**\n * Returns the timestamp telling when the call is scheduled to start.\n */\nexport const useCallStartsAt = (): Date | undefined => {\n const { startsAt$ } = useCallState();\n return useObservableValue(startsAt$);\n};\n\n/**\n * Returns the timestamp when this call was updated.\n */\nexport const useCallUpdatedAt = (): Date | undefined => {\n const { updatedAt$ } = useCallState();\n return useObservableValue(updatedAt$);\n};\n\n/**\n * Returns the information about the call's creator.\n */\nexport const useCallCreatedBy = (): UserResponse | undefined => {\n const { createdBy$ } = useCallState();\n return useObservableValue(createdBy$);\n};\n\n/**\n * Returns the call's custom data.\n */\nexport const useCallCustomData = (): Record<string, any> => {\n const { custom$ } = useCallState();\n return useObservableValue(custom$);\n};\n\n/**\n * Returns the call's Egress information.\n */\nexport const useCallEgress = (): EgressResponse | undefined => {\n const { egress$ } = useCallState();\n return useObservableValue(egress$);\n};\n\n/**\n * Returns the call's Ingress information.\n */\nexport const useCallIngress = (): CallIngressResponse | undefined => {\n const { ingress$ } = useCallState();\n return useObservableValue(ingress$);\n};\n\n/**\n * Returns the data for the current call session.\n */\nexport const useCallSession = (): CallSessionResponse | undefined => {\n const { session$ } = useCallState();\n return useObservableValue(session$);\n};\n\n/**\n * Returns the call's settings.\n */\nexport const useCallSettings = (): CallSettingsResponse | undefined => {\n const { settings$ } = useCallState();\n return useObservableValue(settings$);\n};\n\n/**\n * Returns whether the call has transcribing enabled.\n */\nexport const useIsCallTranscribingInProgress = (): boolean => {\n const { transcribing$ } = useCallState();\n return useObservableValue(transcribing$);\n};\n\n/**\n * Returns information about the user who has marked this call as ended.\n */\nexport const useCallEndedBy = (): UserResponse | undefined => {\n const { endedBy$ } = useCallState();\n return useObservableValue(endedBy$);\n};\n\n/**\n * Utility hook which provides a boolean indicating whether there is\n * a participant in the current call which shares their screen.\n *\n * @category Call State\n */\nexport const useHasOngoingScreenShare = (): boolean => {\n const { hasOngoingScreenShare$ } = useCallState();\n return useObservableValue(hasOngoingScreenShare$);\n};\n\n/**\n * Utility hook which provides the latest stats report of the current call.\n *\n * The latest stats report of the current call.\n * When stats gathering is enabled, this observable will emit a new value\n * at a regular (configurable) interval.\n *\n * Consumers of this observable can implement their own batching logic\n * in case they want to show historical stats data.\n *\n * @category Call State\n */\nexport const useCallStatsReport = (): CallStatsReport | undefined => {\n const { callStatsReport$ } = useCallState();\n return useObservableValue(callStatsReport$);\n};\n\n/**\n * Utility hook which provides the dominant speaker of the current call.\n *\n * @category Call State\n */\nexport const useDominantSpeaker = (): StreamVideoParticipant | undefined => {\n const { dominantSpeaker$ } = useCallState();\n return useObservableValue(dominantSpeaker$);\n};\n\n/**\n * Utility hook which provides a list of call members.\n *\n * @category Call State\n */\nexport const useCallMembers = (): MemberResponse[] => {\n const { members$ } = useCallState();\n return useObservableValue(members$);\n};\n\n/**\n * Utility hook providing the current calling state of the call. For example, `RINGING` or `JOINED`.\n *\n * @category Call State\n */\nexport const useCallCallingState = () => {\n const { callingState$ } = useCallState();\n return useObservableValue(callingState$);\n};\n\n/**\n * Utility hook providing the actual start time of the current session.\n * Useful for calculating the call duration.\n *\n * @category Call State\n */\nexport const useCallStartedAt = () => {\n const { startedAt$ } = useCallState();\n return useObservableValue(startedAt$);\n};\n\n/**\n * A hook which provides a list of all participants that have joined an active call.\n *\n * @category Call State\n *\n * @param options.sortBy - A comparator function to sort the participants by.\n * Make sure to memoize output of the `combineComparators` function\n * (or keep it out of component's scope if possible) before passing it down to this property.\n */\nexport const useParticipants = ({\n sortBy,\n}: {\n /**\n * Make sure to memoize output of the `combineComparators` function\n * (or keep it out of component's scope if possible) before passing it down to this property.\n */\n sortBy?: Comparator<StreamVideoParticipant>;\n} = {}) => {\n const { participants$ } = useCallState();\n const participants = useObservableValue(participants$);\n\n return useMemo(() => {\n if (sortBy) {\n return [...participants].sort(sortBy);\n }\n return participants;\n }, [participants, sortBy]);\n};\n\n/**\n * A hook which provides a StreamVideoLocalParticipant object.\n * It signals that I have joined a call.\n *\n * @category Call State\n */\nexport const useLocalParticipant = () => {\n const { localParticipant$ } = useCallState();\n return useObservableValue(localParticipant$);\n};\n\n/**\n * A hook which provides a list of all other participants than me that have joined an active call.\n *\n * @category Call State\n */\nexport const useRemoteParticipants = () => {\n const { remoteParticipants$ } = useCallState();\n return useObservableValue(remoteParticipants$);\n};\n\n/**\n * Returns the approximate participant count of the active call.\n * This includes the anonymous users as well, and it is computed on the server.\n *\n * @category Call State\n */\nexport const useParticipantCount = () => {\n const { participantCount$ } = useCallState();\n return useObservableValue(participantCount$);\n};\n\n/**\n * Returns the approximate anonymous participant count of the active call.\n * The regular participants are not included in this count. It is computed on the server.\n *\n * @category Call State\n */\nexport const useAnonymousParticipantCount = () => {\n const { anonymousParticipantCount$ } = useCallState();\n return useObservableValue(anonymousParticipantCount$);\n};\n\n/**\n * Returns the generated thumbnail of the current call, if enabled in settings.\n */\nexport const useCallThumbnail = () => {\n const { thumbnails$ } = useCallState();\n return useObservableValue(thumbnails$);\n};\n\n/**\n * Returns the camera state of the current call.\n *\n * @category Camera Manager State\n *\n */\nexport const useCameraState = () => {\n const call = useCall();\n const { camera } = call as Call;\n\n const status = useObservableValue(camera.state.status$);\n const direction = useObservableValue(camera.state.direction$);\n\n return {\n status,\n direction,\n };\n};\n\n/**\n * Returns the microphone state of the current call.\n *\n * @category Microphone Manager State\n */\nexport const useMicrophoneState = () => {\n const call = useCall();\n const { microphone } = call as Call;\n\n const status = useObservableValue(microphone.state.status$);\n const selectedDevice = useObservableValue(microphone.state.selectedDevice$);\n\n return {\n status,\n selectedDevice,\n };\n};\n\nexport const useScreenShareState = () => {\n const call = useCall();\n const { screenShare } = call as Call;\n\n const status = useObservableValue(screenShare.state.status$);\n\n return {\n status,\n };\n};\n","import { OwnCapability } from '@stream-io/video-client';\nimport { useCallState } from './callStateHooks';\nimport { useObservableValue } from './useObservableValue';\n\n/**\n * Hook that returns true if the local participant has all the given permissions.\n *\n * @param permissions the permissions to check.\n *\n * @category Call State\n */\nexport const useHasPermissions = (...permissions: OwnCapability[]): boolean => {\n const capabilities = useOwnCapabilities();\n return permissions.every((permission) => capabilities?.includes(permission));\n};\n\n/**\n * A hook which returns the local participant's own capabilities.\n *\n * @category Call State\n */\nexport const useOwnCapabilities = (): OwnCapability[] | undefined => {\n const { ownCapabilities$ } = useCallState();\n return useObservableValue(ownCapabilities$);\n};\n","import { useStreamVideoClient } from '../contexts';\nimport { useObservableValue } from './useObservableValue';\n\n/**\n * Utility hook which provides access to client's state store.\n */\nexport const useStore = () => {\n const client = useStreamVideoClient();\n if (!client) {\n throw new Error(\n `StreamVideoClient isn't initialized or this hook is called outside of <StreamVideo> context.`,\n );\n }\n return client.readOnlyStateStore;\n};\n\n/**\n * Utility hook which provides a list of all notifications about created calls.\n * In the ring call settings, these calls can be outgoing (I have called somebody)\n * or incoming (somebody has called me).\n *\n * @category Client State\n */\nexport const useCalls = () => {\n const { calls$ } = useStore();\n return useObservableValue(calls$);\n};\n\n/**\n * Returns the current connected user.\n *\n * @category Client State\n */\nexport const useConnectedUser = () => {\n const { connectedUser$ } = useStore();\n return useObservableValue(connectedUser$);\n};\n","import * as CallStateHooks from './callStateHooks';\n\nexport * from './permissions';\nexport * from './store';\n\n/**\n * A hook-alike function that exposes all call state hooks.\n *\n * @category Call State\n */\nexport const useCallStateHooks = () => CallStateHooks;\n","import { OwnCapability } from '@stream-io/video-client';\n\nimport { PropsWithChildren } from 'react';\nimport { useCall } from '../contexts';\nimport { useOwnCapabilities } from '../hooks';\n\ntype RestrictedProps = PropsWithChildren<{\n /**\n * Required grants for the component to be able to render supplied children elements\n */\n requiredGrants: OwnCapability[];\n /**\n * Render children only if user can request capability, but does not have it\n */\n canRequestOnly?: boolean;\n /**\n * Render children only if user has capability\n */\n hasPermissionsOnly?: boolean;\n /**\n * Require all grants specified in `requiredGrants` to be available in the `availableGrants`,\n * component by default requires only one grant to appear in both arrays to render its children\n */\n requireAll?: boolean;\n}>;\n\nexport const Restricted = ({\n canRequestOnly,\n hasPermissionsOnly,\n requiredGrants,\n requireAll = true,\n children,\n}: RestrictedProps) => {\n const call = useCall();\n const ownCapabilities = useOwnCapabilities();\n const hasPermissions = requiredGrants[requireAll ? 'every' : 'some'](\n (capability) => ownCapabilities?.includes(capability),\n );\n\n if (hasPermissionsOnly) return hasPermissions ? <>{children}</> : null;\n\n const canRequest = requiredGrants.some(\n (capability) => !!call && call.permissionsContext.canRequest(capability),\n );\n\n if (canRequestOnly) return canRequest ? <>{children}</> : null;\n\n if (hasPermissions || canRequest) return <>{children}</>;\n\n return null;\n};\n"],"names":["_jsx","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../../src/contexts/StreamCallContext.tsx","../../src/i18n/utils.ts","../../src/i18n/StreamI18n.ts","../../src/contexts/StreamI18nContext.tsx","../../src/contexts/StreamVideoContext.tsx","../../src/hooks/useObservableValue.ts","../../src/hooks/callStateHooks.ts","../../src/hooks/permissions.ts","../../src/hooks/store.ts","../../src/hooks/index.ts","../../src/wrappers/Restricted.tsx"],"sourcesContent":["import { createContext, PropsWithChildren, useContext } from 'react';\nimport { Call } from '@stream-io/video-client';\n\nconst StreamCallContext = createContext<Call | undefined>(undefined);\n\n/**\n * The props for the StreamCallProvider component.\n */\nexport interface StreamCallProviderProps {\n call?: Call;\n}\n\n/**\n * A provider for the call object.\n */\nexport const StreamCallProvider = (\n props: PropsWithChildren<StreamCallProviderProps>,\n) => {\n const { call, children } = props;\n return (\n <StreamCallContext.Provider value={call}>\n {children}\n </StreamCallContext.Provider>\n );\n};\n\n/**\n * A hook to get the call object from the closest provider.\n */\nexport const useCall = () => {\n return useContext(StreamCallContext);\n};\n","import { TranslationsMap, TranslationsRegistry } from './types';\n\nexport const mapToRegistry = (\n translationsMap: TranslationsMap,\n namespace: string,\n) =>\n Object.entries(translationsMap).reduce((acc, [lng, translations]) => {\n acc[lng] = { [namespace]: translations };\n return acc;\n }, {} as TranslationsRegistry);\n","import i18next from 'i18next';\nimport { mapToRegistry } from './utils';\nimport {\n TranslationLanguage,\n TranslationSheet,\n TranslationsMap,\n TranslatorFunction,\n} from './types';\n\nexport const DEFAULT_LANGUAGE = 'en';\nexport const DEFAULT_NAMESPACE = 'stream-video';\nconst DEFAULT_CONFIG = {\n debug: false,\n currentLanguage: DEFAULT_LANGUAGE,\n};\n\nconst DEFAULT_TRANSLATIONS_REGISTRY = mapToRegistry({}, DEFAULT_NAMESPACE);\n\nexport const defaultTranslationFunction = (key: string) => key;\n\nexport type StreamI18nConstructor = {\n /** Language into which the provided strings are translated */\n currentLanguage?: TranslationLanguage;\n /** Logs info level to console output. Helps find issues with loading not working. */\n debug?: boolean;\n /** Custom translations that will be merged with the defaults provided by the library. */\n translationsOverrides?: TranslationsMap;\n};\n\nexport class StreamI18n {\n /** Exposed i18n instance from the i18next library */\n i18nInstance;\n /** Translator function that converts the provided string into its equivalent in the current language. */\n t: TranslatorFunction = defaultTranslationFunction;\n /** Simple logger function */\n constructor(options: StreamI18nConstructor = {}) {\n const {\n debug = DEFAULT_CONFIG.debug,\n currentLanguage = DEFAULT_CONFIG.currentLanguage,\n translationsOverrides,\n } = options;\n\n this.i18nInstance = i18next.createInstance({\n debug,\n defaultNS: DEFAULT_NAMESPACE,\n fallbackLng: false,\n interpolation: { escapeValue: false },\n keySeparator: false,\n lng: currentLanguage,\n nsSeparator: false,\n parseMissingKeyHandler: (key) => {\n return key;\n },\n resources: DEFAULT_TRANSLATIONS_REGISTRY,\n });\n\n if (translationsOverrides) {\n this.i18nInstance.on('initialized', () => {\n Object.entries(translationsOverrides).forEach(([lng, translations]) => {\n this.registerTranslationsForLanguage({ lng, translations });\n });\n });\n }\n }\n\n get currentLanguage() {\n this._checkIsInitialized();\n return this.i18nInstance.language;\n }\n\n get isInitialized() {\n return this.i18nInstance.isInitialized;\n }\n\n init = async () => {\n try {\n this.t = await this.i18nInstance.init();\n } catch (e) {\n console.error(`Failed to initialize translations: ${JSON.stringify(e)}`);\n }\n return this;\n };\n\n changeLanguage = async (\n language?: TranslationLanguage,\n onChange?: (language: TranslationLanguage) => void,\n ) => {\n if (!this._checkIsInitialized()) return;\n // i18next detects the language, if none provided, but it is better\n // to show this detection here explicitly\n const browserLanguage =\n typeof window !== 'undefined' && window.navigator\n ? window.navigator.language\n : undefined;\n await this.i18nInstance.changeLanguage(language || browserLanguage);\n onChange?.(this.currentLanguage);\n };\n\n registerTranslationsForLanguage = ({\n lng,\n translations,\n }: {\n lng: TranslationLanguage;\n translations: TranslationSheet;\n }) => {\n if (!this._checkIsInitialized()) return;\n this.i18nInstance.addResourceBundle(\n lng,\n DEFAULT_NAMESPACE,\n translations,\n true,\n true,\n );\n };\n\n private _checkIsInitialized = () => {\n if (!this.i18nInstance.isInitialized) {\n console.warn(\n 'I18n instance is not initialized. Call yourStreamI18nInstance.init().',\n );\n }\n return this.i18nInstance.isInitialized;\n };\n}\n","import {\n createContext,\n PropsWithChildren,\n useContext,\n useEffect,\n useState,\n} from 'react';\nimport {\n defaultTranslationFunction,\n StreamI18n,\n TranslationsMap,\n} from '../i18n';\n\ntype StreamI18nContextValue = {\n t: StreamI18n['t'];\n i18n?: StreamI18n;\n};\n\nconst StreamI18nContext = createContext<StreamI18nContextValue>({\n t: defaultTranslationFunction,\n});\n\ntype CreateI18nParams = {\n i18nInstance?: StreamI18n;\n language?: string;\n translationsOverrides?: TranslationsMap;\n};\n\nexport type StreamI18nProviderProps = CreateI18nParams;\n\nexport const StreamI18nProvider = ({\n children,\n ...createI18nParams\n}: PropsWithChildren<StreamI18nProviderProps>) => {\n const { i18n, t } = useCreateI18n(createI18nParams);\n\n return (\n <StreamI18nContext.Provider value={{ t, i18n }}>\n {children}\n </StreamI18nContext.Provider>\n );\n};\n\nexport const useCreateI18n = ({\n i18nInstance,\n language,\n translationsOverrides,\n}: CreateI18nParams) => {\n const [i18n] = useState(\n () =>\n i18nInstance ||\n new StreamI18n({ currentLanguage: language, translationsOverrides }),\n );\n const [t, setTranslationFn] = useState<StreamI18n['t']>(\n () => defaultTranslationFunction,\n );\n\n useEffect(() => {\n const { isInitialized } = i18n;\n if (!isInitialized) {\n i18n.init().then((_i18n) => setTranslationFn(() => _i18n.i18nInstance.t));\n return;\n }\n if (language && i18n?.currentLanguage !== language) {\n i18n.changeLanguage(language).catch((err) => {\n console.log('Error while changing language', err);\n });\n }\n }, [i18n, i18nInstance, language, translationsOverrides]);\n\n return { i18n, t };\n};\n\nexport const useI18n = () => useContext(StreamI18nContext);\n","import { createContext, PropsWithChildren, useContext } from 'react';\nimport { StreamVideoClient } from '@stream-io/video-client';\nimport {\n StreamI18nProvider,\n StreamI18nProviderProps,\n} from './StreamI18nContext';\n\nconst StreamVideoContext = createContext<StreamVideoClient | undefined>(\n undefined,\n);\n\n/**\n * Exclude types from documentation site, but we should still add doc comments\n * @internal\n */\nexport type StreamVideoProps = StreamI18nProviderProps & {\n client: StreamVideoClient;\n};\n\n/**\n * StreamVideo is a provider component which should be used to wrap the entire application.\n * It provides the client object to all children components and initializes the i18n instance.\n * @param PropsWithChildren<StreamVideoProps>\n * @category Client State\n */\nexport const StreamVideoProvider = ({\n children,\n client,\n i18nInstance,\n language,\n translationsOverrides,\n}: PropsWithChildren<StreamVideoProps>) => {\n return (\n <StreamVideoContext.Provider value={client}>\n <StreamI18nProvider\n i18nInstance={i18nInstance}\n language={language}\n translationsOverrides={translationsOverrides}\n >\n {children}\n </StreamI18nProvider>\n </StreamVideoContext.Provider>\n );\n};\n\n/**\n *\n * @returns\n *\n * @category Client State\n */\nexport const useStreamVideoClient = () => {\n return useContext(StreamVideoContext);\n};\n","import type { Observable } from 'rxjs';\nimport { useEffect, useState } from 'react';\nimport { RxUtils } from '@stream-io/video-client';\n\n/**\n * Utility hook which provides the current value of the given observable.\n * @internal\n */\nexport const useObservableValue = <T>(observable$: Observable<T>) => {\n const [value, setValue] = useState<T>(() =>\n RxUtils.getCurrentValue(observable$),\n );\n useEffect(() => {\n const subscription = observable$.subscribe(setValue);\n return () => {\n subscription.unsubscribe();\n };\n }, [observable$]);\n\n return value;\n};\n","import { useMemo } from 'react';\nimport {\n Call,\n CallIngressResponse,\n CallSessionResponse,\n CallSettingsResponse,\n CallState,\n CallStatsReport,\n Comparator,\n EgressResponse,\n MemberResponse,\n StreamVideoParticipant,\n UserResponse,\n} from '@stream-io/video-client';\nimport { useCall } from '../contexts';\nimport { useObservableValue } from './useObservableValue';\n\n/**\n * Utility hook, which provides the current call's state.\n *\n * @category Call State\n */\nexport const useCallState = () => {\n const call = useCall();\n // return an empty and unlinked CallState object if there is no call in the provider\n // this ensures that the hooks always return a value and many null checks can be avoided\n if (!call) {\n const message =\n 'You are using useCallState() outside a Call context. ' +\n 'Please wrap your component in <StreamCall /> and provide a \"call\" instance.';\n console.warn(message);\n return new CallState();\n }\n return call.state;\n};\n\n/**\n * Utility hook which provides information whether the current call is being recorded. It will return `true` if the call is being recorded.\n *\n * @category Call State\n */\nexport const useIsCallRecordingInProgress = (): boolean => {\n const { recording$ } = useCallState();\n return useObservableValue(recording$);\n};\n\n/**\n * Utility hook which provides information whether the current call is broadcasting.\n *\n * @category Call State\n */\nexport const useIsCallHLSBroadcastingInProgress = (): boolean => {\n const { egress$ } = useCallState();\n const egress = useObservableValue(egress$);\n if (!egress) return false;\n return egress.broadcasting;\n};\n\n/**\n * Utility hook which provides information whether the current call is live.\n *\n * @category Call State\n */\nexport const useIsCallLive = (): boolean => {\n const { backstage$ } = useCallState();\n const isBackstageOn = useObservableValue(backstage$);\n return !isBackstageOn;\n};\n\n/**\n * Returns the list of blocked users in the current call.\n */\nexport const useCallBlockedUserIds = (): string[] => {\n const { blockedUserIds$ } = useCallState();\n return useObservableValue(blockedUserIds$);\n};\n\n/**\n * Returns the timestamp when this call was created.\n */\nexport const useCallCreatedAt = (): Date | undefined => {\n const { createdAt$ } = useCallState();\n return useObservableValue(createdAt$);\n};\n\n/**\n * Returns the timestamp when this call was ended.\n */\nexport const useCallEndedAt = (): Date | undefined => {\n const { endedAt$ } = useCallState();\n return useObservableValue(endedAt$);\n};\n\n/**\n * Returns the timestamp telling when the call is scheduled to start.\n */\nexport const useCallStartsAt = (): Date | undefined => {\n const { startsAt$ } = useCallState();\n return useObservableValue(startsAt$);\n};\n\n/**\n * Returns the timestamp when this call was updated.\n */\nexport const useCallUpdatedAt = (): Date | undefined => {\n const { updatedAt$ } = useCallState();\n return useObservableValue(updatedAt$);\n};\n\n/**\n * Returns the information about the call's creator.\n */\nexport const useCallCreatedBy = (): UserResponse | undefined => {\n const { createdBy$ } = useCallState();\n return useObservableValue(createdBy$);\n};\n\n/**\n * Returns the call's custom data.\n */\nexport const useCallCustomData = (): Record<string, any> => {\n const { custom$ } = useCallState();\n return useObservableValue(custom$);\n};\n\n/**\n * Returns the call's Egress information.\n */\nexport const useCallEgress = (): EgressResponse | undefined => {\n const { egress$ } = useCallState();\n return useObservableValue(egress$);\n};\n\n/**\n * Returns the call's Ingress information.\n */\nexport const useCallIngress = (): CallIngressResponse | undefined => {\n const { ingress$ } = useCallState();\n return useObservableValue(ingress$);\n};\n\n/**\n * Returns the data for the current call session.\n */\nexport const useCallSession = (): CallSessionResponse | undefined => {\n const { session$ } = useCallState();\n return useObservableValue(session$);\n};\n\n/**\n * Returns the call's settings.\n */\nexport const useCallSettings = (): CallSettingsResponse | undefined => {\n const { settings$ } = useCallState();\n return useObservableValue(settings$);\n};\n\n/**\n * Returns whether the call has transcribing enabled.\n */\nexport const useIsCallTranscribingInProgress = (): boolean => {\n const { transcribing$ } = useCallState();\n return useObservableValue(transcribing$);\n};\n\n/**\n * Returns information about the user who has marked this call as ended.\n */\nexport const useCallEndedBy = (): UserResponse | undefined => {\n const { endedBy$ } = useCallState();\n return useObservableValue(endedBy$);\n};\n\n/**\n * Utility hook which provides a boolean indicating whether there is\n * a participant in the current call which shares their screen.\n *\n * @category Call State\n */\nexport const useHasOngoingScreenShare = (): boolean => {\n const { hasOngoingScreenShare$ } = useCallState();\n return useObservableValue(hasOngoingScreenShare$);\n};\n\n/**\n * Utility hook which provides the latest stats report of the current call.\n *\n * The latest stats report of the current call.\n * When stats gathering is enabled, this observable will emit a new value\n * at a regular (configurable) interval.\n *\n * Consumers of this observable can implement their own batching logic\n * in case they want to show historical stats data.\n *\n * @category Call State\n */\nexport const useCallStatsReport = (): CallStatsReport | undefined => {\n const { callStatsReport$ } = useCallState();\n return useObservableValue(callStatsReport$);\n};\n\n/**\n * Utility hook which provides the dominant speaker of the current call.\n *\n * @category Call State\n */\nexport const useDominantSpeaker = (): StreamVideoParticipant | undefined => {\n const { dominantSpeaker$ } = useCallState();\n return useObservableValue(dominantSpeaker$);\n};\n\n/**\n * Utility hook which provides a list of call members.\n *\n * @category Call State\n */\nexport const useCallMembers = (): MemberResponse[] => {\n const { members$ } = useCallState();\n return useObservableValue(members$);\n};\n\n/**\n * Utility hook providing the current calling state of the call. For example, `RINGING` or `JOINED`.\n *\n * @category Call State\n */\nexport const useCallCallingState = () => {\n const { callingState$ } = useCallState();\n return useObservableValue(callingState$);\n};\n\n/**\n * Utility hook providing the actual start time of the current session.\n * Useful for calculating the call duration.\n *\n * @category Call State\n */\nexport const useCallStartedAt = () => {\n const { startedAt$ } = useCallState();\n return useObservableValue(startedAt$);\n};\n\n/**\n * A hook which provides a list of all participants that have joined an active call.\n *\n * @category Call State\n *\n * @param options.sortBy - A comparator function to sort the participants by.\n * Make sure to memoize output of the `combineComparators` function\n * (or keep it out of component's scope if possible) before passing it down to this property.\n */\nexport const useParticipants = ({\n sortBy,\n}: {\n /**\n * Make sure to memoize output of the `combineComparators` function\n * (or keep it out of component's scope if possible) before passing it down to this property.\n */\n sortBy?: Comparator<StreamVideoParticipant>;\n} = {}) => {\n const { participants$ } = useCallState();\n const participants = useObservableValue(participants$);\n\n return useMemo(() => {\n if (sortBy) {\n return [...participants].sort(sortBy);\n }\n return participants;\n }, [participants, sortBy]);\n};\n\n/**\n * A hook which provides a StreamVideoLocalParticipant object.\n * It signals that I have joined a call.\n *\n * @category Call State\n */\nexport const useLocalParticipant = () => {\n const { localParticipant$ } = useCallState();\n return useObservableValue(localParticipant$);\n};\n\n/**\n * A hook which provides a list of all other participants than me that have joined an active call.\n *\n * @category Call State\n */\nexport const useRemoteParticipants = () => {\n const { remoteParticipants$ } = useCallState();\n return useObservableValue(remoteParticipants$);\n};\n\n/**\n * Returns the approximate participant count of the active call.\n * This includes the anonymous users as well, and it is computed on the server.\n *\n * @category Call State\n */\nexport const useParticipantCount = () => {\n const { participantCount$ } = useCallState();\n return useObservableValue(participantCount$);\n};\n\n/**\n * Returns the approximate anonymous participant count of the active call.\n * The regular participants are not included in this count. It is computed on the server.\n *\n * @category Call State\n */\nexport const useAnonymousParticipantCount = () => {\n const { anonymousParticipantCount$ } = useCallState();\n return useObservableValue(anonymousParticipantCount$);\n};\n\n/**\n * Returns the generated thumbnail of the current call, if enabled in settings.\n */\nexport const useCallThumbnail = () => {\n const { thumbnails$ } = useCallState();\n return useObservableValue(thumbnails$);\n};\n\n/**\n * Returns the camera state of the current call.\n *\n * @category Camera Manager State\n *\n */\nexport const useCameraState = () => {\n const call = useCall();\n const { camera } = call as Call;\n\n const devices$ = useMemo(() => camera.listDevices(), [camera]);\n\n const status = useObservableValue(camera.state.status$);\n const direction = useObservableValue(camera.state.direction$);\n const mediaStream = useObservableValue(camera.state.mediaStream$);\n const selectedDevice = useObservableValue(camera.state.selectedDevice$);\n const devices = useObservableValue(devices$);\n const isMute = status !== 'enabled';\n\n return {\n camera,\n status,\n isEnabled: status === 'enabled',\n direction,\n mediaStream,\n devices,\n selectedDevice,\n isMute,\n };\n};\n\n/**\n * Returns the microphone state of the current call.\n *\n * @category Microphone Manager State\n */\nexport const useMicrophoneState = () => {\n const call = useCall();\n const { microphone } = call as Call;\n\n const devices$ = useMemo(() => microphone.listDevices(), [microphone]);\n\n const { state } = microphone;\n const status = useObservableValue(state.status$);\n const mediaStream = useObservableValue(state.mediaStream$);\n const selectedDevice = useObservableValue(state.selectedDevice$);\n const devices = useObservableValue(devices$);\n const isSpeakingWhileMuted = useObservableValue(state.speakingWhileMuted$);\n const isMute = status !== 'enabled';\n\n return {\n microphone,\n status,\n isEnabled: status === 'enabled',\n mediaStream,\n devices,\n selectedDevice,\n isSpeakingWhileMuted,\n isMute,\n };\n};\n\n/**\n * Returns the speaker state of the current call.\n */\nexport const useSpeakerState = () => {\n const call = useCall();\n const { speaker } = call as Call;\n\n const devices$ = useMemo(() => speaker.listDevices(), [speaker]);\n const devices = useObservableValue(devices$);\n const selectedDevice = useObservableValue(speaker.state.selectedDevice$);\n\n return {\n speaker,\n devices,\n selectedDevice,\n isDeviceSelectionSupported: speaker.state.isDeviceSelectionSupported,\n };\n};\n\n/**\n * Returns the Screen Share state of the current call.\n */\nexport const useScreenShareState = () => {\n const call = useCall();\n const { screenShare } = call as Call;\n\n const status = useObservableValue(screenShare.state.status$);\n const mediaStream = useObservableValue(screenShare.state.mediaStream$);\n const isMute = status !== 'enabled';\n\n return {\n screenShare,\n mediaStream,\n status,\n isMute,\n };\n};\n","import { OwnCapability } from '@stream-io/video-client';\nimport { useCallState } from './callStateHooks';\nimport { useObservableValue } from './useObservableValue';\n\n/**\n * Hook that returns true if the local participant has all the given permissions.\n *\n * @param permissions the permissions to check.\n *\n * @category Call State\n */\nexport const useHasPermissions = (...permissions: OwnCapability[]): boolean => {\n const capabilities = useOwnCapabilities();\n return permissions.every((permission) => capabilities?.includes(permission));\n};\n\n/**\n * A hook which returns the local participant's own capabilities.\n *\n * @category Call State\n */\nexport const useOwnCapabilities = (): OwnCapability[] | undefined => {\n const { ownCapabilities$ } = useCallState();\n return useObservableValue(ownCapabilities$);\n};\n","import { useStreamVideoClient } from '../contexts';\nimport { useObservableValue } from './useObservableValue';\n\n/**\n * Utility hook which provides access to client's state store.\n */\nexport const useStore = () => {\n const client = useStreamVideoClient();\n if (!client) {\n throw new Error(\n `StreamVideoClient isn't initialized or this hook is called outside of <StreamVideo> context.`,\n );\n }\n return client.readOnlyStateStore;\n};\n\n/**\n * Utility hook which provides a list of all notifications about created calls.\n * In the ring call settings, these calls can be outgoing (I have called somebody)\n * or incoming (somebody has called me).\n *\n * @category Client State\n */\nexport const useCalls = () => {\n const { calls$ } = useStore();\n return useObservableValue(calls$);\n};\n\n/**\n * Returns the current connected user.\n *\n * @category Client State\n */\nexport const useConnectedUser = () => {\n const { connectedUser$ } = useStore();\n return useObservableValue(connectedUser$);\n};\n","import * as CallStateHooks from './callStateHooks';\n\nexport * from './permissions';\nexport * from './store';\n\n/**\n * A hook-alike function that exposes all call state hooks.\n *\n * @category Call State\n */\nexport const useCallStateHooks = () => CallStateHooks;\n","import { OwnCapability } from '@stream-io/video-client';\n\nimport { PropsWithChildren } from 'react';\nimport { useCall } from '../contexts';\nimport { useCallStateHooks, useOwnCapabilities } from '../hooks';\n\ntype RestrictedProps = PropsWithChildren<{\n /**\n * Required grants for the component to be able to render supplied children elements\n */\n requiredGrants: OwnCapability[];\n /**\n * Render children only if user can request capability, but does not have it\n */\n canRequestOnly?: boolean;\n /**\n * Render children only if user has capability\n */\n hasPermissionsOnly?: boolean;\n /**\n * Require all grants specified in `requiredGrants` to be available in the `availableGrants`,\n * component by default requires only one grant to appear in both arrays to render its children\n */\n requireAll?: boolean;\n}>;\n\nexport const Restricted = ({\n canRequestOnly,\n hasPermissionsOnly,\n requiredGrants,\n requireAll = true,\n children,\n}: RestrictedProps) => {\n const call = useCall();\n const ownCapabilities = useOwnCapabilities();\n const { useCallSettings } = useCallStateHooks();\n const settings = useCallSettings();\n const hasPermissions = requiredGrants[requireAll ? 'every' : 'some'](\n (capability) => ownCapabilities?.includes(capability),\n );\n\n if (hasPermissionsOnly) return hasPermissions ? <>{children}</> : null;\n\n const canRequest = requiredGrants.some((capability) =>\n call?.permissionsContext.canRequest(capability, settings),\n );\n\n if (canRequestOnly) return canRequest ? <>{children}</> : null;\n\n if (hasPermissions || canRequest) return <>{children}</>;\n\n return null;\n};\n"],"names":["_jsx","_Fragment"],"mappings":"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"}
@@ -1,27 +1,16 @@
1
1
  import { PropsWithChildren } from 'react';
2
2
  import { Call } from '@stream-io/video-client';
3
3
  /**
4
- *
5
- * We don't expose types in our docs site but we should still add doc comments
6
- * @internal
4
+ * The props for the StreamCallProvider component.
7
5
  */
8
6
  export interface StreamCallProviderProps {
9
7
  call?: Call;
10
8
  }
11
9
  /**
12
- *
13
- * @param props
14
- * @returns
15
- *
16
- * @category Call State
17
- *
18
- * @react If you're using the React SDK we recommend using the `StreamCall` component that wraps the `StreamCallProvider`. You only need to use the `StreamCallProvider` for advanced use-cases.
10
+ * A provider for the call object.
19
11
  */
20
12
  export declare const StreamCallProvider: (props: PropsWithChildren<StreamCallProviderProps>) => import("react/jsx-runtime").JSX.Element;
21
13
  /**
22
- *
23
- * @returns
24
- *
25
- * @category Call State
14
+ * A hook to get the call object from the closest provider.
26
15
  */
27
16
  export declare const useCall: () => Call | undefined;
@@ -16,7 +16,7 @@ export declare const useIsCallRecordingInProgress: () => boolean;
16
16
  *
17
17
  * @category Call State
18
18
  */
19
- export declare const useIsCallBroadcastingInProgress: () => boolean;
19
+ export declare const useIsCallHLSBroadcastingInProgress: () => boolean;
20
20
  /**
21
21
  * Utility hook which provides information whether the current call is live.
22
22
  *
@@ -135,14 +135,14 @@ export declare const useParticipants: ({ sortBy, }?: {
135
135
  * (or keep it out of component's scope if possible) before passing it down to this property.
136
136
  */
137
137
  sortBy?: Comparator<StreamVideoParticipant> | undefined;
138
- }) => (StreamVideoParticipant | import("@stream-io/video-client").StreamVideoLocalParticipant)[];
138
+ }) => StreamVideoParticipant[];
139
139
  /**
140
140
  * A hook which provides a StreamVideoLocalParticipant object.
141
141
  * It signals that I have joined a call.
142
142
  *
143
143
  * @category Call State
144
144
  */
145
- export declare const useLocalParticipant: () => import("@stream-io/video-client").StreamVideoLocalParticipant | undefined;
145
+ export declare const useLocalParticipant: () => StreamVideoParticipant | undefined;
146
146
  /**
147
147
  * A hook which provides a list of all other participants than me that have joined an active call.
148
148
  *
@@ -174,8 +174,14 @@ export declare const useCallThumbnail: () => import("@stream-io/video-client").T
174
174
  *
175
175
  */
176
176
  export declare const useCameraState: () => {
177
+ camera: import("@stream-io/video-client").CameraManager;
177
178
  status: import("@stream-io/video-client").InputDeviceStatus;
179
+ isEnabled: boolean;
178
180
  direction: import("@stream-io/video-client").CameraDirection;
181
+ mediaStream: MediaStream | undefined;
182
+ devices: MediaDeviceInfo[] | undefined;
183
+ selectedDevice: string | undefined;
184
+ isMute: boolean;
179
185
  };
180
186
  /**
181
187
  * Returns the microphone state of the current call.
@@ -183,9 +189,30 @@ export declare const useCameraState: () => {
183
189
  * @category Microphone Manager State
184
190
  */
185
191
  export declare const useMicrophoneState: () => {
192
+ microphone: import("@stream-io/video-client").MicrophoneManager;
186
193
  status: import("@stream-io/video-client").InputDeviceStatus;
194
+ isEnabled: boolean;
195
+ mediaStream: MediaStream | undefined;
196
+ devices: MediaDeviceInfo[] | undefined;
187
197
  selectedDevice: string | undefined;
198
+ isSpeakingWhileMuted: boolean;
199
+ isMute: boolean;
200
+ };
201
+ /**
202
+ * Returns the speaker state of the current call.
203
+ */
204
+ export declare const useSpeakerState: () => {
205
+ speaker: import("@stream-io/video-client").SpeakerManager;
206
+ devices: MediaDeviceInfo[];
207
+ selectedDevice: string;
208
+ isDeviceSelectionSupported: boolean;
188
209
  };
210
+ /**
211
+ * Returns the Screen Share state of the current call.
212
+ */
189
213
  export declare const useScreenShareState: () => {
214
+ screenShare: import("@stream-io/video-client").ScreenShareManager;
215
+ mediaStream: MediaStream | undefined;
190
216
  status: import("@stream-io/video-client").InputDeviceStatus;
217
+ isMute: boolean;
191
218
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stream-io/video-react-bindings",
3
- "version": "0.2.37",
3
+ "version": "0.3.1",
4
4
  "packageManager": "yarn@3.2.4",
5
5
  "main": "./dist/index.cjs.js",
6
6
  "module": "./dist/index.es.js",
@@ -25,12 +25,12 @@
25
25
  "rxjs": "~7.8.1"
26
26
  },
27
27
  "peerDependencies": {
28
- "@stream-io/video-client": "^0.3.36",
28
+ "@stream-io/video-client": "^0.4.1",
29
29
  "react": ">=17.0.0"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@rollup/plugin-typescript": "^11.1.5",
33
- "@stream-io/video-client": "^0.3.36",
33
+ "@stream-io/video-client": "^0.4.1",
34
34
  "@types/react": "^18.2.28",
35
35
  "react": "^18.2.0",
36
36
  "rimraf": "^5.0.5",
@@ -4,22 +4,14 @@ import { Call } from '@stream-io/video-client';
4
4
  const StreamCallContext = createContext<Call | undefined>(undefined);
5
5
 
6
6
  /**
7
- *
8
- * We don't expose types in our docs site but we should still add doc comments
9
- * @internal
7
+ * The props for the StreamCallProvider component.
10
8
  */
11
9
  export interface StreamCallProviderProps {
12
10
  call?: Call;
13
11
  }
14
12
 
15
13
  /**
16
- *
17
- * @param props
18
- * @returns
19
- *
20
- * @category Call State
21
- *
22
- * @react If you're using the React SDK we recommend using the `StreamCall` component that wraps the `StreamCallProvider`. You only need to use the `StreamCallProvider` for advanced use-cases.
14
+ * A provider for the call object.
23
15
  */
24
16
  export const StreamCallProvider = (
25
17
  props: PropsWithChildren<StreamCallProviderProps>,
@@ -33,10 +25,7 @@ export const StreamCallProvider = (
33
25
  };
34
26
 
35
27
  /**
36
- *
37
- * @returns
38
- *
39
- * @category Call State
28
+ * A hook to get the call object from the closest provider.
40
29
  */
41
30
  export const useCall = () => {
42
31
  return useContext(StreamCallContext);
@@ -49,7 +49,7 @@ export const useIsCallRecordingInProgress = (): boolean => {
49
49
  *
50
50
  * @category Call State
51
51
  */
52
- export const useIsCallBroadcastingInProgress = (): boolean => {
52
+ export const useIsCallHLSBroadcastingInProgress = (): boolean => {
53
53
  const { egress$ } = useCallState();
54
54
  const egress = useObservableValue(egress$);
55
55
  if (!egress) return false;
@@ -330,12 +330,24 @@ export const useCameraState = () => {
330
330
  const call = useCall();
331
331
  const { camera } = call as Call;
332
332
 
333
+ const devices$ = useMemo(() => camera.listDevices(), [camera]);
334
+
333
335
  const status = useObservableValue(camera.state.status$);
334
336
  const direction = useObservableValue(camera.state.direction$);
337
+ const mediaStream = useObservableValue(camera.state.mediaStream$);
338
+ const selectedDevice = useObservableValue(camera.state.selectedDevice$);
339
+ const devices = useObservableValue(devices$);
340
+ const isMute = status !== 'enabled';
335
341
 
336
342
  return {
343
+ camera,
337
344
  status,
345
+ isEnabled: status === 'enabled',
338
346
  direction,
347
+ mediaStream,
348
+ devices,
349
+ selectedDevice,
350
+ isMute,
339
351
  };
340
352
  };
341
353
 
@@ -348,22 +360,62 @@ export const useMicrophoneState = () => {
348
360
  const call = useCall();
349
361
  const { microphone } = call as Call;
350
362
 
351
- const status = useObservableValue(microphone.state.status$);
352
- const selectedDevice = useObservableValue(microphone.state.selectedDevice$);
363
+ const devices$ = useMemo(() => microphone.listDevices(), [microphone]);
364
+
365
+ const { state } = microphone;
366
+ const status = useObservableValue(state.status$);
367
+ const mediaStream = useObservableValue(state.mediaStream$);
368
+ const selectedDevice = useObservableValue(state.selectedDevice$);
369
+ const devices = useObservableValue(devices$);
370
+ const isSpeakingWhileMuted = useObservableValue(state.speakingWhileMuted$);
371
+ const isMute = status !== 'enabled';
353
372
 
354
373
  return {
374
+ microphone,
355
375
  status,
376
+ isEnabled: status === 'enabled',
377
+ mediaStream,
378
+ devices,
356
379
  selectedDevice,
380
+ isSpeakingWhileMuted,
381
+ isMute,
357
382
  };
358
383
  };
359
384
 
385
+ /**
386
+ * Returns the speaker state of the current call.
387
+ */
388
+ export const useSpeakerState = () => {
389
+ const call = useCall();
390
+ const { speaker } = call as Call;
391
+
392
+ const devices$ = useMemo(() => speaker.listDevices(), [speaker]);
393
+ const devices = useObservableValue(devices$);
394
+ const selectedDevice = useObservableValue(speaker.state.selectedDevice$);
395
+
396
+ return {
397
+ speaker,
398
+ devices,
399
+ selectedDevice,
400
+ isDeviceSelectionSupported: speaker.state.isDeviceSelectionSupported,
401
+ };
402
+ };
403
+
404
+ /**
405
+ * Returns the Screen Share state of the current call.
406
+ */
360
407
  export const useScreenShareState = () => {
361
408
  const call = useCall();
362
409
  const { screenShare } = call as Call;
363
410
 
364
411
  const status = useObservableValue(screenShare.state.status$);
412
+ const mediaStream = useObservableValue(screenShare.state.mediaStream$);
413
+ const isMute = status !== 'enabled';
365
414
 
366
415
  return {
416
+ screenShare,
417
+ mediaStream,
367
418
  status,
419
+ isMute,
368
420
  };
369
421
  };
@@ -2,7 +2,7 @@ import { OwnCapability } from '@stream-io/video-client';
2
2
 
3
3
  import { PropsWithChildren } from 'react';
4
4
  import { useCall } from '../contexts';
5
- import { useOwnCapabilities } from '../hooks';
5
+ import { useCallStateHooks, useOwnCapabilities } from '../hooks';
6
6
 
7
7
  type RestrictedProps = PropsWithChildren<{
8
8
  /**
@@ -33,14 +33,16 @@ export const Restricted = ({
33
33
  }: RestrictedProps) => {
34
34
  const call = useCall();
35
35
  const ownCapabilities = useOwnCapabilities();
36
+ const { useCallSettings } = useCallStateHooks();
37
+ const settings = useCallSettings();
36
38
  const hasPermissions = requiredGrants[requireAll ? 'every' : 'some'](
37
39
  (capability) => ownCapabilities?.includes(capability),
38
40
  );
39
41
 
40
42
  if (hasPermissionsOnly) return hasPermissions ? <>{children}</> : null;
41
43
 
42
- const canRequest = requiredGrants.some(
43
- (capability) => !!call && call.permissionsContext.canRequest(capability),
44
+ const canRequest = requiredGrants.some((capability) =>
45
+ call?.permissionsContext.canRequest(capability, settings),
44
46
  );
45
47
 
46
48
  if (canRequestOnly) return canRequest ? <>{children}</> : null;