@stream-io/video-react-bindings 1.5.5 → 1.5.7

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,21 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [1.5.7](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-bindings-1.5.6...@stream-io/video-react-bindings-1.5.7) (2025-03-12)
6
+
7
+ ### Dependency Updates
8
+
9
+ * `@stream-io/video-client` updated to version `1.18.5`
10
+
11
+ ### Bug Fixes
12
+
13
+ * add pending browser permission state ([#1718](https://github.com/GetStream/stream-video-js/issues/1718)) ([7f24be6](https://github.com/GetStream/stream-video-js/commit/7f24be63d33105d0688be7b5b625bc9b6aa0d3a9))
14
+
15
+ ## [1.5.6](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-bindings-1.5.5...@stream-io/video-react-bindings-1.5.6) (2025-03-10)
16
+
17
+ ### Dependency Updates
18
+
19
+ * `@stream-io/video-client` updated to version `1.18.4`
5
20
  ## [1.5.5](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-bindings-1.5.4...@stream-io/video-react-bindings-1.5.5) (2025-03-05)
6
21
 
7
22
  ### Dependency Updates
package/dist/index.cjs.js CHANGED
@@ -482,27 +482,21 @@ const useCameraState = () => {
482
482
  const { camera } = call;
483
483
  const devices$ = react.useMemo(() => camera.listDevices(), [camera]);
484
484
  const { state } = camera;
485
- const status = useObservableValue(state.status$);
486
- const optimisticStatus = useObservableValue(state.optimisticStatus$);
487
485
  const direction = useObservableValue(state.direction$);
488
486
  const mediaStream = useObservableValue(state.mediaStream$);
489
487
  const selectedDevice = useObservableValue(state.selectedDevice$);
490
488
  const devices = useObservableValue(devices$, EMPTY_DEVICES_ARRAY);
491
489
  const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);
492
- const isMute = status !== 'enabled';
493
- const optimisticIsMute = optimisticStatus !== 'enabled';
490
+ const isPromptingPermission = useObservableValue(state.isPromptingPermission$);
494
491
  return {
495
492
  camera,
496
- status,
497
- optimisticStatus,
498
- isEnabled: status === 'enabled',
499
493
  direction,
500
494
  mediaStream,
501
495
  devices,
502
496
  hasBrowserPermission,
497
+ isPromptingPermission,
503
498
  selectedDevice,
504
- isMute,
505
- optimisticIsMute,
499
+ ...getComputedStatus(useObservableValue(state.status$), useObservableValue(state.optimisticStatus$)),
506
500
  };
507
501
  };
508
502
  /**
@@ -515,27 +509,21 @@ const useMicrophoneState = () => {
515
509
  const { microphone } = call;
516
510
  const devices$ = react.useMemo(() => microphone.listDevices(), [microphone]);
517
511
  const { state } = microphone;
518
- const status = useObservableValue(state.status$);
519
- const optimisticStatus = useObservableValue(state.optimisticStatus$);
520
512
  const mediaStream = useObservableValue(state.mediaStream$);
521
513
  const selectedDevice = useObservableValue(state.selectedDevice$);
522
514
  const devices = useObservableValue(devices$, EMPTY_DEVICES_ARRAY);
523
515
  const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);
516
+ const isPromptingPermission = useObservableValue(state.isPromptingPermission$);
524
517
  const isSpeakingWhileMuted = useObservableValue(state.speakingWhileMuted$);
525
- const isMute = status !== 'enabled';
526
- const optimisticIsMute = optimisticStatus !== 'enabled';
527
518
  return {
528
519
  microphone,
529
- status,
530
- optimisticStatus,
531
- isEnabled: status === 'enabled',
532
520
  mediaStream,
533
521
  devices,
534
522
  selectedDevice,
535
523
  hasBrowserPermission,
524
+ isPromptingPermission,
536
525
  isSpeakingWhileMuted,
537
- isMute,
538
- optimisticIsMute,
526
+ ...getComputedStatus(useObservableValue(state.status$), useObservableValue(state.optimisticStatus$)),
539
527
  };
540
528
  };
541
529
  /**
@@ -565,19 +553,10 @@ const useSpeakerState = () => {
565
553
  const useScreenShareState = () => {
566
554
  const call = useCall();
567
555
  const { screenShare } = call;
568
- const status = useObservableValue(screenShare.state.status$);
569
- const pendingStatus = useObservableValue(screenShare.state.optimisticStatus$);
570
- const mediaStream = useObservableValue(screenShare.state.mediaStream$);
571
- const isMute = status !== 'enabled';
572
- const optimisticStatus = pendingStatus ?? status;
573
- const optimisticIsMute = optimisticStatus !== 'enabled';
574
556
  return {
575
557
  screenShare,
576
- mediaStream,
577
- status,
578
- optimisticStatus,
579
- isMute,
580
- optimisticIsMute,
558
+ mediaStream: useObservableValue(screenShare.state.mediaStream$),
559
+ ...getComputedStatus(useObservableValue(screenShare.state.status$), useObservableValue(screenShare.state.optimisticStatus$)),
581
560
  };
582
561
  };
583
562
  /**
@@ -603,6 +582,17 @@ const useIsCallCaptioningInProgress = () => {
603
582
  const { captioning$ } = useCallState();
604
583
  return useObservableValue(captioning$);
605
584
  };
585
+ function getComputedStatus(status, pendingStatus) {
586
+ const optimisticStatus = pendingStatus ?? status;
587
+ return {
588
+ status,
589
+ optimisticStatus,
590
+ isEnabled: status === 'enabled',
591
+ isMute: status !== 'enabled',
592
+ optimisticIsMute: optimisticStatus !== 'enabled',
593
+ isTogglePending: optimisticStatus !== status,
594
+ };
595
+ }
606
596
 
607
597
  var CallStateHooks = /*#__PURE__*/Object.freeze({
608
598
  __proto__: null,
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../src/contexts/StreamCallContext.tsx","../../src/i18n/StreamI18n.ts","../../src/contexts/StreamI18nContext.tsx","../../src/contexts/StreamVideoContext.tsx","../../src/hooks/useObservableValue.ts","../../src/helpers/platforms.ts","../../src/hooks/callStateHooks.ts","../../src/hooks/store.ts","../../src/hooks/callUtilHooks.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 i18next from 'i18next';\nimport {\n TranslationLanguage,\n TranslationSheet,\n TranslationsMap,\n TranslationsRegistry,\n TranslatorFunction,\n} from './types';\n\nconst DEFAULT_NAMESPACE = 'stream-video';\nconst DEFAULT_CONFIG = {\n debug: false,\n currentLanguage: 'en',\n fallbackLanguage: false,\n} as const;\n\nconst mapToRegistry = (translationsMap: TranslationsMap, namespace: string) =>\n Object.entries(translationsMap).reduce((acc, [lng, translations]) => {\n acc[lng] = { [namespace]: translations };\n return acc;\n }, {} as TranslationsRegistry);\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 /** Fallback language which will be used if no translation is found for current language */\n fallbackLanguage?: 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 fallbackLanguage = DEFAULT_CONFIG.fallbackLanguage,\n translationsOverrides,\n } = options;\n\n this.i18nInstance = i18next.createInstance({\n debug,\n defaultNS: DEFAULT_NAMESPACE,\n fallbackLng: fallbackLanguage,\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 fallbackLanguage?: 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 fallbackLanguage,\n translationsOverrides,\n}: CreateI18nParams) => {\n const [i18n] = useState(\n () =>\n i18nInstance ||\n new StreamI18n({\n currentLanguage: language,\n fallbackLanguage,\n translationsOverrides,\n }),\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 *\n * @param observable$ the observable to read data from.\n * @param defaultValue a default value. Used when the observable data can't be read or emits an error.\n */\nexport const useObservableValue = <T>(\n observable$: Observable<T>,\n defaultValue?: T,\n) => {\n const [value, setValue] = useState<T>(() => {\n try {\n return RxUtils.getCurrentValue(observable$);\n } catch (err) {\n if (typeof defaultValue === 'undefined') throw err;\n return defaultValue;\n }\n });\n\n useEffect(() => {\n return RxUtils.createSubscription(observable$, setValue, (err) => {\n console.log('An error occurred while reading an observable', err);\n if (defaultValue) setValue(defaultValue);\n });\n }, [defaultValue, observable$]);\n\n return value;\n};\n","/**\n * Checks whether we are using React Native\n */\nexport const isReactNative = () => {\n if (typeof navigator === 'undefined') return false;\n return navigator.product?.toLowerCase() === 'reactnative';\n};\n","import { useMemo } from 'react';\nimport {\n Call,\n CallClosedCaption,\n CallIngressResponse,\n CallSessionResponse,\n CallSettingsResponse,\n CallState,\n CallStatsReport,\n Comparator,\n EgressResponse,\n MemberResponse,\n OwnCapability,\n StreamVideoParticipant,\n UserResponse,\n} from '@stream-io/video-client';\nimport { useCall } from '../contexts';\nimport { useObservableValue } from './useObservableValue';\nimport { isReactNative } from '../helpers/platforms';\n\n// kind-of memoized, used as a default value\nconst EMPTY_DEVICES_ARRAY = Object.freeze([]) as unknown as MediaDeviceInfo[];\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 * A hook which returns the local participant's own capabilities.\n */\nexport const useOwnCapabilities = (): OwnCapability[] | undefined => {\n const { ownCapabilities$ } = useCallState();\n return useObservableValue(ownCapabilities$);\n};\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 */\nexport const useHasPermissions = (...permissions: OwnCapability[]): boolean => {\n const capabilities = useOwnCapabilities();\n return permissions.every((permission) => capabilities?.includes(permission));\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 { state } = camera;\n const status = useObservableValue(state.status$);\n const optimisticStatus = useObservableValue(state.optimisticStatus$);\n const direction = useObservableValue(state.direction$);\n const mediaStream = useObservableValue(state.mediaStream$);\n const selectedDevice = useObservableValue(state.selectedDevice$);\n const devices = useObservableValue(devices$, EMPTY_DEVICES_ARRAY);\n const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);\n const isMute = status !== 'enabled';\n const optimisticIsMute = optimisticStatus !== 'enabled';\n\n return {\n camera,\n status,\n optimisticStatus,\n isEnabled: status === 'enabled',\n direction,\n mediaStream,\n devices,\n hasBrowserPermission,\n selectedDevice,\n isMute,\n optimisticIsMute,\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 optimisticStatus = useObservableValue(state.optimisticStatus$);\n const mediaStream = useObservableValue(state.mediaStream$);\n const selectedDevice = useObservableValue(state.selectedDevice$);\n const devices = useObservableValue(devices$, EMPTY_DEVICES_ARRAY);\n const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);\n const isSpeakingWhileMuted = useObservableValue(state.speakingWhileMuted$);\n const isMute = status !== 'enabled';\n const optimisticIsMute = optimisticStatus !== 'enabled';\n\n return {\n microphone,\n status,\n optimisticStatus,\n isEnabled: status === 'enabled',\n mediaStream,\n devices,\n selectedDevice,\n hasBrowserPermission,\n isSpeakingWhileMuted,\n isMute,\n optimisticIsMute,\n };\n};\n\n/**\n * Returns the speaker state of the current call.\n *\n * Note: This hook is not supported in React Native\n */\nexport const useSpeakerState = () => {\n if (isReactNative()) {\n throw new Error(\n 'This feature is not supported in React Native. Please visit https://getstream.io/video/docs/reactnative/core/camera-and-microphone/#speaker-management for more details',\n );\n }\n const call = useCall();\n const { speaker } = call as Call;\n\n const devices$ = useMemo(() => speaker.listDevices(), [speaker]);\n const devices = useObservableValue(devices$, EMPTY_DEVICES_ARRAY);\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 pendingStatus = useObservableValue(screenShare.state.optimisticStatus$);\n const mediaStream = useObservableValue(screenShare.state.mediaStream$);\n const isMute = status !== 'enabled';\n const optimisticStatus = pendingStatus ?? status;\n const optimisticIsMute = optimisticStatus !== 'enabled';\n\n return {\n screenShare,\n mediaStream,\n status,\n optimisticStatus,\n isMute,\n optimisticIsMute,\n };\n};\n\n/**\n * Returns incoming video settings for the current call, including\n * global and per-participant manual video quality overrides.\n */\nexport const useIncomingVideoSettings = () => {\n const call = useCall() as Call;\n const settings = useObservableValue(\n call.dynascaleManager.incomingVideoSettings$,\n );\n return settings;\n};\n\n/**\n * Returns the current call's closed captions queue.\n */\nexport const useCallClosedCaptions = (): CallClosedCaption[] => {\n const { closedCaptions$ } = useCallState();\n return useObservableValue(closedCaptions$);\n};\n\n/**\n * Returns the current call's closed captions queue.\n */\nexport const useIsCallCaptioningInProgress = (): boolean => {\n const { captioning$ } = useCallState();\n return useObservableValue(captioning$);\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.state;\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 { useCallback, useEffect, useState } from 'react';\nimport { useCall } from '../contexts';\nimport { useIsCallRecordingInProgress } from './callStateHooks';\n\n/**\n * Custom hook for toggling call recording in a video call.\n *\n * This hook provides functionality to start and stop call recording,\n * along with state management for tracking the recording status\n * and the loading indicator while awaiting a response.\n */\nexport const useToggleCallRecording = () => {\n const call = useCall();\n const isCallRecordingInProgress = useIsCallRecordingInProgress();\n const [isAwaitingResponse, setIsAwaitingResponse] = useState(false);\n\n // TODO: add permissions\n\n useEffect(() => {\n // we wait until call.recording_started/stopped event to flips the\n // `isCallRecordingInProgress` state variable.\n // Once the flip happens, we remove the loading indicator\n setIsAwaitingResponse((isAwaiting) => {\n if (isAwaiting) return false;\n return isAwaiting;\n });\n }, [isCallRecordingInProgress]);\n\n const toggleCallRecording = useCallback(async () => {\n try {\n setIsAwaitingResponse(true);\n if (isCallRecordingInProgress) {\n await call?.stopRecording();\n } else {\n await call?.startRecording();\n }\n } catch (e) {\n console.error(`Failed start recording`, e);\n throw e;\n }\n }, [call, isCallRecordingInProgress]);\n\n return { toggleCallRecording, isAwaitingResponse, isCallRecordingInProgress };\n};\n","import * as CallStateHooks from './callStateHooks';\n\nexport * from './useObservableValue';\n\nexport * from './store';\nexport * from './callUtilHooks';\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 } 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 { useCallSettings, useOwnCapabilities } = useCallStateHooks();\n const ownCapabilities = useOwnCapabilities();\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","useCallback","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../src/contexts/StreamCallContext.tsx","../../src/i18n/StreamI18n.ts","../../src/contexts/StreamI18nContext.tsx","../../src/contexts/StreamVideoContext.tsx","../../src/hooks/useObservableValue.ts","../../src/helpers/platforms.ts","../../src/hooks/callStateHooks.ts","../../src/hooks/store.ts","../../src/hooks/callUtilHooks.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 i18next from 'i18next';\nimport {\n TranslationLanguage,\n TranslationSheet,\n TranslationsMap,\n TranslationsRegistry,\n TranslatorFunction,\n} from './types';\n\nconst DEFAULT_NAMESPACE = 'stream-video';\nconst DEFAULT_CONFIG = {\n debug: false,\n currentLanguage: 'en',\n fallbackLanguage: false,\n} as const;\n\nconst mapToRegistry = (translationsMap: TranslationsMap, namespace: string) =>\n Object.entries(translationsMap).reduce((acc, [lng, translations]) => {\n acc[lng] = { [namespace]: translations };\n return acc;\n }, {} as TranslationsRegistry);\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 /** Fallback language which will be used if no translation is found for current language */\n fallbackLanguage?: 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 fallbackLanguage = DEFAULT_CONFIG.fallbackLanguage,\n translationsOverrides,\n } = options;\n\n this.i18nInstance = i18next.createInstance({\n debug,\n defaultNS: DEFAULT_NAMESPACE,\n fallbackLng: fallbackLanguage,\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 fallbackLanguage?: 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 fallbackLanguage,\n translationsOverrides,\n}: CreateI18nParams) => {\n const [i18n] = useState(\n () =>\n i18nInstance ||\n new StreamI18n({\n currentLanguage: language,\n fallbackLanguage,\n translationsOverrides,\n }),\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 *\n * @param observable$ the observable to read data from.\n * @param defaultValue a default value. Used when the observable data can't be read or emits an error.\n */\nexport const useObservableValue = <T>(\n observable$: Observable<T>,\n defaultValue?: T,\n) => {\n const [value, setValue] = useState<T>(() => {\n try {\n return RxUtils.getCurrentValue(observable$);\n } catch (err) {\n if (typeof defaultValue === 'undefined') throw err;\n return defaultValue;\n }\n });\n\n useEffect(() => {\n return RxUtils.createSubscription(observable$, setValue, (err) => {\n console.log('An error occurred while reading an observable', err);\n if (defaultValue) setValue(defaultValue);\n });\n }, [defaultValue, observable$]);\n\n return value;\n};\n","/**\n * Checks whether we are using React Native\n */\nexport const isReactNative = () => {\n if (typeof navigator === 'undefined') return false;\n return navigator.product?.toLowerCase() === 'reactnative';\n};\n","import { useMemo } from 'react';\nimport {\n Call,\n CallClosedCaption,\n CallIngressResponse,\n CallSessionResponse,\n CallSettingsResponse,\n CallState,\n CallStatsReport,\n Comparator,\n EgressResponse,\n InputDeviceStatus,\n MemberResponse,\n OwnCapability,\n StreamVideoParticipant,\n UserResponse,\n} from '@stream-io/video-client';\nimport { useCall } from '../contexts';\nimport { useObservableValue } from './useObservableValue';\nimport { isReactNative } from '../helpers/platforms';\n\n// kind-of memoized, used as a default value\nconst EMPTY_DEVICES_ARRAY = Object.freeze([]) as unknown as MediaDeviceInfo[];\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 * A hook which returns the local participant's own capabilities.\n */\nexport const useOwnCapabilities = (): OwnCapability[] | undefined => {\n const { ownCapabilities$ } = useCallState();\n return useObservableValue(ownCapabilities$);\n};\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 */\nexport const useHasPermissions = (...permissions: OwnCapability[]): boolean => {\n const capabilities = useOwnCapabilities();\n return permissions.every((permission) => capabilities?.includes(permission));\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 { state } = camera;\n const direction = useObservableValue(state.direction$);\n const mediaStream = useObservableValue(state.mediaStream$);\n const selectedDevice = useObservableValue(state.selectedDevice$);\n const devices = useObservableValue(devices$, EMPTY_DEVICES_ARRAY);\n const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);\n const isPromptingPermission = useObservableValue(\n state.isPromptingPermission$,\n );\n\n return {\n camera,\n direction,\n mediaStream,\n devices,\n hasBrowserPermission,\n isPromptingPermission,\n selectedDevice,\n ...getComputedStatus(\n useObservableValue(state.status$),\n useObservableValue(state.optimisticStatus$),\n ),\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 mediaStream = useObservableValue(state.mediaStream$);\n const selectedDevice = useObservableValue(state.selectedDevice$);\n const devices = useObservableValue(devices$, EMPTY_DEVICES_ARRAY);\n const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);\n const isPromptingPermission = useObservableValue(\n state.isPromptingPermission$,\n );\n const isSpeakingWhileMuted = useObservableValue(state.speakingWhileMuted$);\n\n return {\n microphone,\n mediaStream,\n devices,\n selectedDevice,\n hasBrowserPermission,\n isPromptingPermission,\n isSpeakingWhileMuted,\n ...getComputedStatus(\n useObservableValue(state.status$),\n useObservableValue(state.optimisticStatus$),\n ),\n };\n};\n\n/**\n * Returns the speaker state of the current call.\n *\n * Note: This hook is not supported in React Native\n */\nexport const useSpeakerState = () => {\n if (isReactNative()) {\n throw new Error(\n 'This feature is not supported in React Native. Please visit https://getstream.io/video/docs/reactnative/core/camera-and-microphone/#speaker-management for more details',\n );\n }\n const call = useCall();\n const { speaker } = call as Call;\n\n const devices$ = useMemo(() => speaker.listDevices(), [speaker]);\n const devices = useObservableValue(devices$, EMPTY_DEVICES_ARRAY);\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 return {\n screenShare,\n mediaStream: useObservableValue(screenShare.state.mediaStream$),\n ...getComputedStatus(\n useObservableValue(screenShare.state.status$),\n useObservableValue(screenShare.state.optimisticStatus$),\n ),\n };\n};\n\n/**\n * Returns incoming video settings for the current call, including\n * global and per-participant manual video quality overrides.\n */\nexport const useIncomingVideoSettings = () => {\n const call = useCall() as Call;\n const settings = useObservableValue(\n call.dynascaleManager.incomingVideoSettings$,\n );\n return settings;\n};\n\n/**\n * Returns the current call's closed captions queue.\n */\nexport const useCallClosedCaptions = (): CallClosedCaption[] => {\n const { closedCaptions$ } = useCallState();\n return useObservableValue(closedCaptions$);\n};\n\n/**\n * Returns the current call's closed captions queue.\n */\nexport const useIsCallCaptioningInProgress = (): boolean => {\n const { captioning$ } = useCallState();\n return useObservableValue(captioning$);\n};\n\nfunction getComputedStatus(\n status: InputDeviceStatus,\n pendingStatus: InputDeviceStatus,\n) {\n const optimisticStatus = pendingStatus ?? status;\n\n return {\n status,\n optimisticStatus,\n isEnabled: status === 'enabled',\n isMute: status !== 'enabled',\n optimisticIsMute: optimisticStatus !== 'enabled',\n isTogglePending: optimisticStatus !== status,\n };\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.state;\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 { useCallback, useEffect, useState } from 'react';\nimport { useCall } from '../contexts';\nimport { useIsCallRecordingInProgress } from './callStateHooks';\n\n/**\n * Custom hook for toggling call recording in a video call.\n *\n * This hook provides functionality to start and stop call recording,\n * along with state management for tracking the recording status\n * and the loading indicator while awaiting a response.\n */\nexport const useToggleCallRecording = () => {\n const call = useCall();\n const isCallRecordingInProgress = useIsCallRecordingInProgress();\n const [isAwaitingResponse, setIsAwaitingResponse] = useState(false);\n\n // TODO: add permissions\n\n useEffect(() => {\n // we wait until call.recording_started/stopped event to flips the\n // `isCallRecordingInProgress` state variable.\n // Once the flip happens, we remove the loading indicator\n setIsAwaitingResponse((isAwaiting) => {\n if (isAwaiting) return false;\n return isAwaiting;\n });\n }, [isCallRecordingInProgress]);\n\n const toggleCallRecording = useCallback(async () => {\n try {\n setIsAwaitingResponse(true);\n if (isCallRecordingInProgress) {\n await call?.stopRecording();\n } else {\n await call?.startRecording();\n }\n } catch (e) {\n console.error(`Failed start recording`, e);\n throw e;\n }\n }, [call, isCallRecordingInProgress]);\n\n return { toggleCallRecording, isAwaitingResponse, isCallRecordingInProgress };\n};\n","import * as CallStateHooks from './callStateHooks';\n\nexport * from './useObservableValue';\n\nexport * from './store';\nexport * from './callUtilHooks';\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 } 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 { useCallSettings, useOwnCapabilities } = useCallStateHooks();\n const ownCapabilities = useOwnCapabilities();\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","useCallback","_Fragment"],"mappings":"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"}
package/dist/index.es.js CHANGED
@@ -480,27 +480,21 @@ const useCameraState = () => {
480
480
  const { camera } = call;
481
481
  const devices$ = useMemo(() => camera.listDevices(), [camera]);
482
482
  const { state } = camera;
483
- const status = useObservableValue(state.status$);
484
- const optimisticStatus = useObservableValue(state.optimisticStatus$);
485
483
  const direction = useObservableValue(state.direction$);
486
484
  const mediaStream = useObservableValue(state.mediaStream$);
487
485
  const selectedDevice = useObservableValue(state.selectedDevice$);
488
486
  const devices = useObservableValue(devices$, EMPTY_DEVICES_ARRAY);
489
487
  const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);
490
- const isMute = status !== 'enabled';
491
- const optimisticIsMute = optimisticStatus !== 'enabled';
488
+ const isPromptingPermission = useObservableValue(state.isPromptingPermission$);
492
489
  return {
493
490
  camera,
494
- status,
495
- optimisticStatus,
496
- isEnabled: status === 'enabled',
497
491
  direction,
498
492
  mediaStream,
499
493
  devices,
500
494
  hasBrowserPermission,
495
+ isPromptingPermission,
501
496
  selectedDevice,
502
- isMute,
503
- optimisticIsMute,
497
+ ...getComputedStatus(useObservableValue(state.status$), useObservableValue(state.optimisticStatus$)),
504
498
  };
505
499
  };
506
500
  /**
@@ -513,27 +507,21 @@ const useMicrophoneState = () => {
513
507
  const { microphone } = call;
514
508
  const devices$ = useMemo(() => microphone.listDevices(), [microphone]);
515
509
  const { state } = microphone;
516
- const status = useObservableValue(state.status$);
517
- const optimisticStatus = useObservableValue(state.optimisticStatus$);
518
510
  const mediaStream = useObservableValue(state.mediaStream$);
519
511
  const selectedDevice = useObservableValue(state.selectedDevice$);
520
512
  const devices = useObservableValue(devices$, EMPTY_DEVICES_ARRAY);
521
513
  const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);
514
+ const isPromptingPermission = useObservableValue(state.isPromptingPermission$);
522
515
  const isSpeakingWhileMuted = useObservableValue(state.speakingWhileMuted$);
523
- const isMute = status !== 'enabled';
524
- const optimisticIsMute = optimisticStatus !== 'enabled';
525
516
  return {
526
517
  microphone,
527
- status,
528
- optimisticStatus,
529
- isEnabled: status === 'enabled',
530
518
  mediaStream,
531
519
  devices,
532
520
  selectedDevice,
533
521
  hasBrowserPermission,
522
+ isPromptingPermission,
534
523
  isSpeakingWhileMuted,
535
- isMute,
536
- optimisticIsMute,
524
+ ...getComputedStatus(useObservableValue(state.status$), useObservableValue(state.optimisticStatus$)),
537
525
  };
538
526
  };
539
527
  /**
@@ -563,19 +551,10 @@ const useSpeakerState = () => {
563
551
  const useScreenShareState = () => {
564
552
  const call = useCall();
565
553
  const { screenShare } = call;
566
- const status = useObservableValue(screenShare.state.status$);
567
- const pendingStatus = useObservableValue(screenShare.state.optimisticStatus$);
568
- const mediaStream = useObservableValue(screenShare.state.mediaStream$);
569
- const isMute = status !== 'enabled';
570
- const optimisticStatus = pendingStatus ?? status;
571
- const optimisticIsMute = optimisticStatus !== 'enabled';
572
554
  return {
573
555
  screenShare,
574
- mediaStream,
575
- status,
576
- optimisticStatus,
577
- isMute,
578
- optimisticIsMute,
556
+ mediaStream: useObservableValue(screenShare.state.mediaStream$),
557
+ ...getComputedStatus(useObservableValue(screenShare.state.status$), useObservableValue(screenShare.state.optimisticStatus$)),
579
558
  };
580
559
  };
581
560
  /**
@@ -601,6 +580,17 @@ const useIsCallCaptioningInProgress = () => {
601
580
  const { captioning$ } = useCallState();
602
581
  return useObservableValue(captioning$);
603
582
  };
583
+ function getComputedStatus(status, pendingStatus) {
584
+ const optimisticStatus = pendingStatus ?? status;
585
+ return {
586
+ status,
587
+ optimisticStatus,
588
+ isEnabled: status === 'enabled',
589
+ isMute: status !== 'enabled',
590
+ optimisticIsMute: optimisticStatus !== 'enabled',
591
+ isTogglePending: optimisticStatus !== status,
592
+ };
593
+ }
604
594
 
605
595
  var CallStateHooks = /*#__PURE__*/Object.freeze({
606
596
  __proto__: null,
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../../src/contexts/StreamCallContext.tsx","../../src/i18n/StreamI18n.ts","../../src/contexts/StreamI18nContext.tsx","../../src/contexts/StreamVideoContext.tsx","../../src/hooks/useObservableValue.ts","../../src/helpers/platforms.ts","../../src/hooks/callStateHooks.ts","../../src/hooks/store.ts","../../src/hooks/callUtilHooks.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 i18next from 'i18next';\nimport {\n TranslationLanguage,\n TranslationSheet,\n TranslationsMap,\n TranslationsRegistry,\n TranslatorFunction,\n} from './types';\n\nconst DEFAULT_NAMESPACE = 'stream-video';\nconst DEFAULT_CONFIG = {\n debug: false,\n currentLanguage: 'en',\n fallbackLanguage: false,\n} as const;\n\nconst mapToRegistry = (translationsMap: TranslationsMap, namespace: string) =>\n Object.entries(translationsMap).reduce((acc, [lng, translations]) => {\n acc[lng] = { [namespace]: translations };\n return acc;\n }, {} as TranslationsRegistry);\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 /** Fallback language which will be used if no translation is found for current language */\n fallbackLanguage?: 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 fallbackLanguage = DEFAULT_CONFIG.fallbackLanguage,\n translationsOverrides,\n } = options;\n\n this.i18nInstance = i18next.createInstance({\n debug,\n defaultNS: DEFAULT_NAMESPACE,\n fallbackLng: fallbackLanguage,\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 fallbackLanguage?: 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 fallbackLanguage,\n translationsOverrides,\n}: CreateI18nParams) => {\n const [i18n] = useState(\n () =>\n i18nInstance ||\n new StreamI18n({\n currentLanguage: language,\n fallbackLanguage,\n translationsOverrides,\n }),\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 *\n * @param observable$ the observable to read data from.\n * @param defaultValue a default value. Used when the observable data can't be read or emits an error.\n */\nexport const useObservableValue = <T>(\n observable$: Observable<T>,\n defaultValue?: T,\n) => {\n const [value, setValue] = useState<T>(() => {\n try {\n return RxUtils.getCurrentValue(observable$);\n } catch (err) {\n if (typeof defaultValue === 'undefined') throw err;\n return defaultValue;\n }\n });\n\n useEffect(() => {\n return RxUtils.createSubscription(observable$, setValue, (err) => {\n console.log('An error occurred while reading an observable', err);\n if (defaultValue) setValue(defaultValue);\n });\n }, [defaultValue, observable$]);\n\n return value;\n};\n","/**\n * Checks whether we are using React Native\n */\nexport const isReactNative = () => {\n if (typeof navigator === 'undefined') return false;\n return navigator.product?.toLowerCase() === 'reactnative';\n};\n","import { useMemo } from 'react';\nimport {\n Call,\n CallClosedCaption,\n CallIngressResponse,\n CallSessionResponse,\n CallSettingsResponse,\n CallState,\n CallStatsReport,\n Comparator,\n EgressResponse,\n MemberResponse,\n OwnCapability,\n StreamVideoParticipant,\n UserResponse,\n} from '@stream-io/video-client';\nimport { useCall } from '../contexts';\nimport { useObservableValue } from './useObservableValue';\nimport { isReactNative } from '../helpers/platforms';\n\n// kind-of memoized, used as a default value\nconst EMPTY_DEVICES_ARRAY = Object.freeze([]) as unknown as MediaDeviceInfo[];\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 * A hook which returns the local participant's own capabilities.\n */\nexport const useOwnCapabilities = (): OwnCapability[] | undefined => {\n const { ownCapabilities$ } = useCallState();\n return useObservableValue(ownCapabilities$);\n};\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 */\nexport const useHasPermissions = (...permissions: OwnCapability[]): boolean => {\n const capabilities = useOwnCapabilities();\n return permissions.every((permission) => capabilities?.includes(permission));\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 { state } = camera;\n const status = useObservableValue(state.status$);\n const optimisticStatus = useObservableValue(state.optimisticStatus$);\n const direction = useObservableValue(state.direction$);\n const mediaStream = useObservableValue(state.mediaStream$);\n const selectedDevice = useObservableValue(state.selectedDevice$);\n const devices = useObservableValue(devices$, EMPTY_DEVICES_ARRAY);\n const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);\n const isMute = status !== 'enabled';\n const optimisticIsMute = optimisticStatus !== 'enabled';\n\n return {\n camera,\n status,\n optimisticStatus,\n isEnabled: status === 'enabled',\n direction,\n mediaStream,\n devices,\n hasBrowserPermission,\n selectedDevice,\n isMute,\n optimisticIsMute,\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 optimisticStatus = useObservableValue(state.optimisticStatus$);\n const mediaStream = useObservableValue(state.mediaStream$);\n const selectedDevice = useObservableValue(state.selectedDevice$);\n const devices = useObservableValue(devices$, EMPTY_DEVICES_ARRAY);\n const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);\n const isSpeakingWhileMuted = useObservableValue(state.speakingWhileMuted$);\n const isMute = status !== 'enabled';\n const optimisticIsMute = optimisticStatus !== 'enabled';\n\n return {\n microphone,\n status,\n optimisticStatus,\n isEnabled: status === 'enabled',\n mediaStream,\n devices,\n selectedDevice,\n hasBrowserPermission,\n isSpeakingWhileMuted,\n isMute,\n optimisticIsMute,\n };\n};\n\n/**\n * Returns the speaker state of the current call.\n *\n * Note: This hook is not supported in React Native\n */\nexport const useSpeakerState = () => {\n if (isReactNative()) {\n throw new Error(\n 'This feature is not supported in React Native. Please visit https://getstream.io/video/docs/reactnative/core/camera-and-microphone/#speaker-management for more details',\n );\n }\n const call = useCall();\n const { speaker } = call as Call;\n\n const devices$ = useMemo(() => speaker.listDevices(), [speaker]);\n const devices = useObservableValue(devices$, EMPTY_DEVICES_ARRAY);\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 pendingStatus = useObservableValue(screenShare.state.optimisticStatus$);\n const mediaStream = useObservableValue(screenShare.state.mediaStream$);\n const isMute = status !== 'enabled';\n const optimisticStatus = pendingStatus ?? status;\n const optimisticIsMute = optimisticStatus !== 'enabled';\n\n return {\n screenShare,\n mediaStream,\n status,\n optimisticStatus,\n isMute,\n optimisticIsMute,\n };\n};\n\n/**\n * Returns incoming video settings for the current call, including\n * global and per-participant manual video quality overrides.\n */\nexport const useIncomingVideoSettings = () => {\n const call = useCall() as Call;\n const settings = useObservableValue(\n call.dynascaleManager.incomingVideoSettings$,\n );\n return settings;\n};\n\n/**\n * Returns the current call's closed captions queue.\n */\nexport const useCallClosedCaptions = (): CallClosedCaption[] => {\n const { closedCaptions$ } = useCallState();\n return useObservableValue(closedCaptions$);\n};\n\n/**\n * Returns the current call's closed captions queue.\n */\nexport const useIsCallCaptioningInProgress = (): boolean => {\n const { captioning$ } = useCallState();\n return useObservableValue(captioning$);\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.state;\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 { useCallback, useEffect, useState } from 'react';\nimport { useCall } from '../contexts';\nimport { useIsCallRecordingInProgress } from './callStateHooks';\n\n/**\n * Custom hook for toggling call recording in a video call.\n *\n * This hook provides functionality to start and stop call recording,\n * along with state management for tracking the recording status\n * and the loading indicator while awaiting a response.\n */\nexport const useToggleCallRecording = () => {\n const call = useCall();\n const isCallRecordingInProgress = useIsCallRecordingInProgress();\n const [isAwaitingResponse, setIsAwaitingResponse] = useState(false);\n\n // TODO: add permissions\n\n useEffect(() => {\n // we wait until call.recording_started/stopped event to flips the\n // `isCallRecordingInProgress` state variable.\n // Once the flip happens, we remove the loading indicator\n setIsAwaitingResponse((isAwaiting) => {\n if (isAwaiting) return false;\n return isAwaiting;\n });\n }, [isCallRecordingInProgress]);\n\n const toggleCallRecording = useCallback(async () => {\n try {\n setIsAwaitingResponse(true);\n if (isCallRecordingInProgress) {\n await call?.stopRecording();\n } else {\n await call?.startRecording();\n }\n } catch (e) {\n console.error(`Failed start recording`, e);\n throw e;\n }\n }, [call, isCallRecordingInProgress]);\n\n return { toggleCallRecording, isAwaitingResponse, isCallRecordingInProgress };\n};\n","import * as CallStateHooks from './callStateHooks';\n\nexport * from './useObservableValue';\n\nexport * from './store';\nexport * from './callUtilHooks';\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 } 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 { useCallSettings, useOwnCapabilities } = useCallStateHooks();\n const ownCapabilities = useOwnCapabilities();\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
+ {"version":3,"file":"index.es.js","sources":["../../src/contexts/StreamCallContext.tsx","../../src/i18n/StreamI18n.ts","../../src/contexts/StreamI18nContext.tsx","../../src/contexts/StreamVideoContext.tsx","../../src/hooks/useObservableValue.ts","../../src/helpers/platforms.ts","../../src/hooks/callStateHooks.ts","../../src/hooks/store.ts","../../src/hooks/callUtilHooks.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 i18next from 'i18next';\nimport {\n TranslationLanguage,\n TranslationSheet,\n TranslationsMap,\n TranslationsRegistry,\n TranslatorFunction,\n} from './types';\n\nconst DEFAULT_NAMESPACE = 'stream-video';\nconst DEFAULT_CONFIG = {\n debug: false,\n currentLanguage: 'en',\n fallbackLanguage: false,\n} as const;\n\nconst mapToRegistry = (translationsMap: TranslationsMap, namespace: string) =>\n Object.entries(translationsMap).reduce((acc, [lng, translations]) => {\n acc[lng] = { [namespace]: translations };\n return acc;\n }, {} as TranslationsRegistry);\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 /** Fallback language which will be used if no translation is found for current language */\n fallbackLanguage?: 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 fallbackLanguage = DEFAULT_CONFIG.fallbackLanguage,\n translationsOverrides,\n } = options;\n\n this.i18nInstance = i18next.createInstance({\n debug,\n defaultNS: DEFAULT_NAMESPACE,\n fallbackLng: fallbackLanguage,\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 fallbackLanguage?: 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 fallbackLanguage,\n translationsOverrides,\n}: CreateI18nParams) => {\n const [i18n] = useState(\n () =>\n i18nInstance ||\n new StreamI18n({\n currentLanguage: language,\n fallbackLanguage,\n translationsOverrides,\n }),\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 *\n * @param observable$ the observable to read data from.\n * @param defaultValue a default value. Used when the observable data can't be read or emits an error.\n */\nexport const useObservableValue = <T>(\n observable$: Observable<T>,\n defaultValue?: T,\n) => {\n const [value, setValue] = useState<T>(() => {\n try {\n return RxUtils.getCurrentValue(observable$);\n } catch (err) {\n if (typeof defaultValue === 'undefined') throw err;\n return defaultValue;\n }\n });\n\n useEffect(() => {\n return RxUtils.createSubscription(observable$, setValue, (err) => {\n console.log('An error occurred while reading an observable', err);\n if (defaultValue) setValue(defaultValue);\n });\n }, [defaultValue, observable$]);\n\n return value;\n};\n","/**\n * Checks whether we are using React Native\n */\nexport const isReactNative = () => {\n if (typeof navigator === 'undefined') return false;\n return navigator.product?.toLowerCase() === 'reactnative';\n};\n","import { useMemo } from 'react';\nimport {\n Call,\n CallClosedCaption,\n CallIngressResponse,\n CallSessionResponse,\n CallSettingsResponse,\n CallState,\n CallStatsReport,\n Comparator,\n EgressResponse,\n InputDeviceStatus,\n MemberResponse,\n OwnCapability,\n StreamVideoParticipant,\n UserResponse,\n} from '@stream-io/video-client';\nimport { useCall } from '../contexts';\nimport { useObservableValue } from './useObservableValue';\nimport { isReactNative } from '../helpers/platforms';\n\n// kind-of memoized, used as a default value\nconst EMPTY_DEVICES_ARRAY = Object.freeze([]) as unknown as MediaDeviceInfo[];\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 * A hook which returns the local participant's own capabilities.\n */\nexport const useOwnCapabilities = (): OwnCapability[] | undefined => {\n const { ownCapabilities$ } = useCallState();\n return useObservableValue(ownCapabilities$);\n};\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 */\nexport const useHasPermissions = (...permissions: OwnCapability[]): boolean => {\n const capabilities = useOwnCapabilities();\n return permissions.every((permission) => capabilities?.includes(permission));\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 { state } = camera;\n const direction = useObservableValue(state.direction$);\n const mediaStream = useObservableValue(state.mediaStream$);\n const selectedDevice = useObservableValue(state.selectedDevice$);\n const devices = useObservableValue(devices$, EMPTY_DEVICES_ARRAY);\n const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);\n const isPromptingPermission = useObservableValue(\n state.isPromptingPermission$,\n );\n\n return {\n camera,\n direction,\n mediaStream,\n devices,\n hasBrowserPermission,\n isPromptingPermission,\n selectedDevice,\n ...getComputedStatus(\n useObservableValue(state.status$),\n useObservableValue(state.optimisticStatus$),\n ),\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 mediaStream = useObservableValue(state.mediaStream$);\n const selectedDevice = useObservableValue(state.selectedDevice$);\n const devices = useObservableValue(devices$, EMPTY_DEVICES_ARRAY);\n const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);\n const isPromptingPermission = useObservableValue(\n state.isPromptingPermission$,\n );\n const isSpeakingWhileMuted = useObservableValue(state.speakingWhileMuted$);\n\n return {\n microphone,\n mediaStream,\n devices,\n selectedDevice,\n hasBrowserPermission,\n isPromptingPermission,\n isSpeakingWhileMuted,\n ...getComputedStatus(\n useObservableValue(state.status$),\n useObservableValue(state.optimisticStatus$),\n ),\n };\n};\n\n/**\n * Returns the speaker state of the current call.\n *\n * Note: This hook is not supported in React Native\n */\nexport const useSpeakerState = () => {\n if (isReactNative()) {\n throw new Error(\n 'This feature is not supported in React Native. Please visit https://getstream.io/video/docs/reactnative/core/camera-and-microphone/#speaker-management for more details',\n );\n }\n const call = useCall();\n const { speaker } = call as Call;\n\n const devices$ = useMemo(() => speaker.listDevices(), [speaker]);\n const devices = useObservableValue(devices$, EMPTY_DEVICES_ARRAY);\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 return {\n screenShare,\n mediaStream: useObservableValue(screenShare.state.mediaStream$),\n ...getComputedStatus(\n useObservableValue(screenShare.state.status$),\n useObservableValue(screenShare.state.optimisticStatus$),\n ),\n };\n};\n\n/**\n * Returns incoming video settings for the current call, including\n * global and per-participant manual video quality overrides.\n */\nexport const useIncomingVideoSettings = () => {\n const call = useCall() as Call;\n const settings = useObservableValue(\n call.dynascaleManager.incomingVideoSettings$,\n );\n return settings;\n};\n\n/**\n * Returns the current call's closed captions queue.\n */\nexport const useCallClosedCaptions = (): CallClosedCaption[] => {\n const { closedCaptions$ } = useCallState();\n return useObservableValue(closedCaptions$);\n};\n\n/**\n * Returns the current call's closed captions queue.\n */\nexport const useIsCallCaptioningInProgress = (): boolean => {\n const { captioning$ } = useCallState();\n return useObservableValue(captioning$);\n};\n\nfunction getComputedStatus(\n status: InputDeviceStatus,\n pendingStatus: InputDeviceStatus,\n) {\n const optimisticStatus = pendingStatus ?? status;\n\n return {\n status,\n optimisticStatus,\n isEnabled: status === 'enabled',\n isMute: status !== 'enabled',\n optimisticIsMute: optimisticStatus !== 'enabled',\n isTogglePending: optimisticStatus !== status,\n };\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.state;\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 { useCallback, useEffect, useState } from 'react';\nimport { useCall } from '../contexts';\nimport { useIsCallRecordingInProgress } from './callStateHooks';\n\n/**\n * Custom hook for toggling call recording in a video call.\n *\n * This hook provides functionality to start and stop call recording,\n * along with state management for tracking the recording status\n * and the loading indicator while awaiting a response.\n */\nexport const useToggleCallRecording = () => {\n const call = useCall();\n const isCallRecordingInProgress = useIsCallRecordingInProgress();\n const [isAwaitingResponse, setIsAwaitingResponse] = useState(false);\n\n // TODO: add permissions\n\n useEffect(() => {\n // we wait until call.recording_started/stopped event to flips the\n // `isCallRecordingInProgress` state variable.\n // Once the flip happens, we remove the loading indicator\n setIsAwaitingResponse((isAwaiting) => {\n if (isAwaiting) return false;\n return isAwaiting;\n });\n }, [isCallRecordingInProgress]);\n\n const toggleCallRecording = useCallback(async () => {\n try {\n setIsAwaitingResponse(true);\n if (isCallRecordingInProgress) {\n await call?.stopRecording();\n } else {\n await call?.startRecording();\n }\n } catch (e) {\n console.error(`Failed start recording`, e);\n throw e;\n }\n }, [call, isCallRecordingInProgress]);\n\n return { toggleCallRecording, isAwaitingResponse, isCallRecordingInProgress };\n};\n","import * as CallStateHooks from './callStateHooks';\n\nexport * from './useObservableValue';\n\nexport * from './store';\nexport * from './callUtilHooks';\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 } 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 { useCallSettings, useOwnCapabilities } = useCallStateHooks();\n const ownCapabilities = useOwnCapabilities();\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,4 +1,4 @@
1
- import { CallClosedCaption, CallIngressResponse, CallSessionResponse, CallSettingsResponse, CallState, CallStatsReport, Comparator, EgressResponse, MemberResponse, OwnCapability, StreamVideoParticipant, UserResponse } from '@stream-io/video-client';
1
+ import { CallClosedCaption, CallIngressResponse, CallSessionResponse, CallSettingsResponse, CallState, CallStatsReport, Comparator, EgressResponse, InputDeviceStatus, MemberResponse, OwnCapability, StreamVideoParticipant, UserResponse } from '@stream-io/video-client';
2
2
  /**
3
3
  * Utility hook, which provides the current call's state.
4
4
  *
@@ -184,17 +184,19 @@ export declare const useHasPermissions: (...permissions: OwnCapability[]) => boo
184
184
  *
185
185
  */
186
186
  export declare const useCameraState: () => {
187
- camera: import("@stream-io/video-client").CameraManager;
188
- status: import("@stream-io/video-client").InputDeviceStatus;
189
- optimisticStatus: import("@stream-io/video-client").InputDeviceStatus;
187
+ status: InputDeviceStatus;
188
+ optimisticStatus: InputDeviceStatus;
190
189
  isEnabled: boolean;
190
+ isMute: boolean;
191
+ optimisticIsMute: boolean;
192
+ isTogglePending: boolean;
193
+ camera: import("@stream-io/video-client").CameraManager;
191
194
  direction: import("@stream-io/video-client").CameraDirection;
192
195
  mediaStream: MediaStream | undefined;
193
196
  devices: MediaDeviceInfo[];
194
197
  hasBrowserPermission: boolean;
198
+ isPromptingPermission: boolean;
195
199
  selectedDevice: string | undefined;
196
- isMute: boolean;
197
- optimisticIsMute: boolean;
198
200
  };
199
201
  /**
200
202
  * Returns the microphone state of the current call.
@@ -202,17 +204,19 @@ export declare const useCameraState: () => {
202
204
  * @category Microphone Manager State
203
205
  */
204
206
  export declare const useMicrophoneState: () => {
205
- microphone: import("@stream-io/video-client").MicrophoneManager;
206
- status: import("@stream-io/video-client").InputDeviceStatus;
207
- optimisticStatus: import("@stream-io/video-client").InputDeviceStatus;
207
+ status: InputDeviceStatus;
208
+ optimisticStatus: InputDeviceStatus;
208
209
  isEnabled: boolean;
210
+ isMute: boolean;
211
+ optimisticIsMute: boolean;
212
+ isTogglePending: boolean;
213
+ microphone: import("@stream-io/video-client").MicrophoneManager;
209
214
  mediaStream: MediaStream | undefined;
210
215
  devices: MediaDeviceInfo[];
211
216
  selectedDevice: string | undefined;
212
217
  hasBrowserPermission: boolean;
218
+ isPromptingPermission: boolean;
213
219
  isSpeakingWhileMuted: boolean;
214
- isMute: boolean;
215
- optimisticIsMute: boolean;
216
220
  };
217
221
  /**
218
222
  * Returns the speaker state of the current call.
@@ -229,12 +233,14 @@ export declare const useSpeakerState: () => {
229
233
  * Returns the Screen Share state of the current call.
230
234
  */
231
235
  export declare const useScreenShareState: () => {
232
- screenShare: import("@stream-io/video-client").ScreenShareManager;
233
- mediaStream: MediaStream | undefined;
234
- status: import("@stream-io/video-client").InputDeviceStatus;
235
- optimisticStatus: import("@stream-io/video-client").InputDeviceStatus;
236
+ status: InputDeviceStatus;
237
+ optimisticStatus: InputDeviceStatus;
238
+ isEnabled: boolean;
236
239
  isMute: boolean;
237
240
  optimisticIsMute: boolean;
241
+ isTogglePending: boolean;
242
+ screenShare: import("@stream-io/video-client").ScreenShareManager;
243
+ mediaStream: MediaStream | undefined;
238
244
  };
239
245
  /**
240
246
  * Returns incoming video settings for the current call, including
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stream-io/video-react-bindings",
3
- "version": "1.5.5",
3
+ "version": "1.5.7",
4
4
  "packageManager": "yarn@3.2.4",
5
5
  "main": "./dist/index.cjs.js",
6
6
  "module": "./dist/index.es.js",
@@ -26,12 +26,12 @@
26
26
  "rxjs": "~7.8.1"
27
27
  },
28
28
  "peerDependencies": {
29
- "@stream-io/video-client": "^1.18.3",
29
+ "@stream-io/video-client": "^1.18.5",
30
30
  "react": "^17 || ^18 || ^19"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@rollup/plugin-typescript": "^12.1.2",
34
- "@stream-io/video-client": "^1.18.3",
34
+ "@stream-io/video-client": "^1.18.5",
35
35
  "@types/react": "^18.3.2",
36
36
  "react": "^18.3.1",
37
37
  "rimraf": "^5.0.7",
@@ -9,6 +9,7 @@ import {
9
9
  CallStatsReport,
10
10
  Comparator,
11
11
  EgressResponse,
12
+ InputDeviceStatus,
12
13
  MemberResponse,
13
14
  OwnCapability,
14
15
  StreamVideoParticipant,
@@ -357,28 +358,27 @@ export const useCameraState = () => {
357
358
  const devices$ = useMemo(() => camera.listDevices(), [camera]);
358
359
 
359
360
  const { state } = camera;
360
- const status = useObservableValue(state.status$);
361
- const optimisticStatus = useObservableValue(state.optimisticStatus$);
362
361
  const direction = useObservableValue(state.direction$);
363
362
  const mediaStream = useObservableValue(state.mediaStream$);
364
363
  const selectedDevice = useObservableValue(state.selectedDevice$);
365
364
  const devices = useObservableValue(devices$, EMPTY_DEVICES_ARRAY);
366
365
  const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);
367
- const isMute = status !== 'enabled';
368
- const optimisticIsMute = optimisticStatus !== 'enabled';
366
+ const isPromptingPermission = useObservableValue(
367
+ state.isPromptingPermission$,
368
+ );
369
369
 
370
370
  return {
371
371
  camera,
372
- status,
373
- optimisticStatus,
374
- isEnabled: status === 'enabled',
375
372
  direction,
376
373
  mediaStream,
377
374
  devices,
378
375
  hasBrowserPermission,
376
+ isPromptingPermission,
379
377
  selectedDevice,
380
- isMute,
381
- optimisticIsMute,
378
+ ...getComputedStatus(
379
+ useObservableValue(state.status$),
380
+ useObservableValue(state.optimisticStatus$),
381
+ ),
382
382
  };
383
383
  };
384
384
 
@@ -394,28 +394,27 @@ export const useMicrophoneState = () => {
394
394
  const devices$ = useMemo(() => microphone.listDevices(), [microphone]);
395
395
 
396
396
  const { state } = microphone;
397
- const status = useObservableValue(state.status$);
398
- const optimisticStatus = useObservableValue(state.optimisticStatus$);
399
397
  const mediaStream = useObservableValue(state.mediaStream$);
400
398
  const selectedDevice = useObservableValue(state.selectedDevice$);
401
399
  const devices = useObservableValue(devices$, EMPTY_DEVICES_ARRAY);
402
400
  const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);
401
+ const isPromptingPermission = useObservableValue(
402
+ state.isPromptingPermission$,
403
+ );
403
404
  const isSpeakingWhileMuted = useObservableValue(state.speakingWhileMuted$);
404
- const isMute = status !== 'enabled';
405
- const optimisticIsMute = optimisticStatus !== 'enabled';
406
405
 
407
406
  return {
408
407
  microphone,
409
- status,
410
- optimisticStatus,
411
- isEnabled: status === 'enabled',
412
408
  mediaStream,
413
409
  devices,
414
410
  selectedDevice,
415
411
  hasBrowserPermission,
412
+ isPromptingPermission,
416
413
  isSpeakingWhileMuted,
417
- isMute,
418
- optimisticIsMute,
414
+ ...getComputedStatus(
415
+ useObservableValue(state.status$),
416
+ useObservableValue(state.optimisticStatus$),
417
+ ),
419
418
  };
420
419
  };
421
420
 
@@ -452,20 +451,13 @@ export const useScreenShareState = () => {
452
451
  const call = useCall();
453
452
  const { screenShare } = call as Call;
454
453
 
455
- const status = useObservableValue(screenShare.state.status$);
456
- const pendingStatus = useObservableValue(screenShare.state.optimisticStatus$);
457
- const mediaStream = useObservableValue(screenShare.state.mediaStream$);
458
- const isMute = status !== 'enabled';
459
- const optimisticStatus = pendingStatus ?? status;
460
- const optimisticIsMute = optimisticStatus !== 'enabled';
461
-
462
454
  return {
463
455
  screenShare,
464
- mediaStream,
465
- status,
466
- optimisticStatus,
467
- isMute,
468
- optimisticIsMute,
456
+ mediaStream: useObservableValue(screenShare.state.mediaStream$),
457
+ ...getComputedStatus(
458
+ useObservableValue(screenShare.state.status$),
459
+ useObservableValue(screenShare.state.optimisticStatus$),
460
+ ),
469
461
  };
470
462
  };
471
463
 
@@ -496,3 +488,19 @@ export const useIsCallCaptioningInProgress = (): boolean => {
496
488
  const { captioning$ } = useCallState();
497
489
  return useObservableValue(captioning$);
498
490
  };
491
+
492
+ function getComputedStatus(
493
+ status: InputDeviceStatus,
494
+ pendingStatus: InputDeviceStatus,
495
+ ) {
496
+ const optimisticStatus = pendingStatus ?? status;
497
+
498
+ return {
499
+ status,
500
+ optimisticStatus,
501
+ isEnabled: status === 'enabled',
502
+ isMute: status !== 'enabled',
503
+ optimisticIsMute: optimisticStatus !== 'enabled',
504
+ isTogglePending: optimisticStatus !== status,
505
+ };
506
+ }