@stream-io/video-react-bindings 0.4.27 → 0.4.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/dist/index.cjs.js +13 -0
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.es.js +13 -0
- package/dist/index.es.js.map +1 -1
- package/dist/src/hooks/callStateHooks.d.ts +6 -0
- package/package.json +3 -3
- package/src/hooks/callStateHooks.ts +13 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
### [0.4.28](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-bindings-0.4.27...@stream-io/video-react-bindings-0.4.28) (2024-05-13)
|
|
6
|
+
|
|
7
|
+
### Dependency Updates
|
|
8
|
+
|
|
9
|
+
* `@stream-io/video-client` updated to version `1.0.2`
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* optimistically toggle device status ([#1342](https://github.com/GetStream/stream-video-js/issues/1342)) ([2e4e470](https://github.com/GetStream/stream-video-js/commit/2e4e470347fce7c7499dd21a931e5dec74bf9618))
|
|
14
|
+
|
|
5
15
|
### [0.4.27](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-bindings-0.4.26...@stream-io/video-react-bindings-0.4.27) (2024-05-07)
|
|
6
16
|
|
|
7
17
|
### Dependency Updates
|
package/dist/index.cjs.js
CHANGED
|
@@ -471,15 +471,18 @@ const useCameraState = () => {
|
|
|
471
471
|
const devices$ = react.useMemo(() => camera.listDevices(), [camera]);
|
|
472
472
|
const { state } = camera;
|
|
473
473
|
const status = useObservableValue(state.status$);
|
|
474
|
+
const optimisticStatus = useObservableValue(state.optimisticStatus$);
|
|
474
475
|
const direction = useObservableValue(state.direction$);
|
|
475
476
|
const mediaStream = useObservableValue(state.mediaStream$);
|
|
476
477
|
const selectedDevice = useObservableValue(state.selectedDevice$);
|
|
477
478
|
const devices = useObservableValue(devices$);
|
|
478
479
|
const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);
|
|
479
480
|
const isMute = status !== 'enabled';
|
|
481
|
+
const optimisticIsMute = optimisticStatus !== 'enabled';
|
|
480
482
|
return {
|
|
481
483
|
camera,
|
|
482
484
|
status,
|
|
485
|
+
optimisticStatus,
|
|
483
486
|
isEnabled: status === 'enabled',
|
|
484
487
|
direction,
|
|
485
488
|
mediaStream,
|
|
@@ -487,6 +490,7 @@ const useCameraState = () => {
|
|
|
487
490
|
hasBrowserPermission,
|
|
488
491
|
selectedDevice,
|
|
489
492
|
isMute,
|
|
493
|
+
optimisticIsMute,
|
|
490
494
|
};
|
|
491
495
|
};
|
|
492
496
|
/**
|
|
@@ -500,15 +504,18 @@ const useMicrophoneState = () => {
|
|
|
500
504
|
const devices$ = react.useMemo(() => microphone.listDevices(), [microphone]);
|
|
501
505
|
const { state } = microphone;
|
|
502
506
|
const status = useObservableValue(state.status$);
|
|
507
|
+
const optimisticStatus = useObservableValue(state.optimisticStatus$);
|
|
503
508
|
const mediaStream = useObservableValue(state.mediaStream$);
|
|
504
509
|
const selectedDevice = useObservableValue(state.selectedDevice$);
|
|
505
510
|
const devices = useObservableValue(devices$);
|
|
506
511
|
const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);
|
|
507
512
|
const isSpeakingWhileMuted = useObservableValue(state.speakingWhileMuted$);
|
|
508
513
|
const isMute = status !== 'enabled';
|
|
514
|
+
const optimisticIsMute = optimisticStatus !== 'enabled';
|
|
509
515
|
return {
|
|
510
516
|
microphone,
|
|
511
517
|
status,
|
|
518
|
+
optimisticStatus,
|
|
512
519
|
isEnabled: status === 'enabled',
|
|
513
520
|
mediaStream,
|
|
514
521
|
devices,
|
|
@@ -516,6 +523,7 @@ const useMicrophoneState = () => {
|
|
|
516
523
|
hasBrowserPermission,
|
|
517
524
|
isSpeakingWhileMuted,
|
|
518
525
|
isMute,
|
|
526
|
+
optimisticIsMute,
|
|
519
527
|
};
|
|
520
528
|
};
|
|
521
529
|
/**
|
|
@@ -546,13 +554,18 @@ const useScreenShareState = () => {
|
|
|
546
554
|
const call = useCall();
|
|
547
555
|
const { screenShare } = call;
|
|
548
556
|
const status = useObservableValue(screenShare.state.status$);
|
|
557
|
+
const pendingStatus = useObservableValue(screenShare.state.optimisticStatus$);
|
|
549
558
|
const mediaStream = useObservableValue(screenShare.state.mediaStream$);
|
|
550
559
|
const isMute = status !== 'enabled';
|
|
560
|
+
const optimisticStatus = pendingStatus ?? status;
|
|
561
|
+
const optimisticIsMute = optimisticStatus !== 'enabled';
|
|
551
562
|
return {
|
|
552
563
|
screenShare,
|
|
553
564
|
mediaStream,
|
|
554
565
|
status,
|
|
566
|
+
optimisticStatus,
|
|
555
567
|
isMute,
|
|
568
|
+
optimisticIsMute,
|
|
556
569
|
};
|
|
557
570
|
};
|
|
558
571
|
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../src/contexts/StreamCallContext.tsx","../../src/i18n/utils.ts","../../src/i18n/StreamI18n.ts","../../src/contexts/StreamI18nContext.tsx","../../src/contexts/StreamVideoContext.tsx","../../src/hooks/useObservableValue.ts","../../src/helpers/platforms.ts","../../src/hooks/callStateHooks.ts","../../src/hooks/store.ts","../../src/hooks/index.ts","../../src/wrappers/Restricted.tsx"],"sourcesContent":["import { createContext, PropsWithChildren, useContext } from 'react';\nimport { Call } from '@stream-io/video-client';\n\nconst StreamCallContext = createContext<Call | undefined>(undefined);\n\n/**\n * The props for the StreamCallProvider component.\n */\nexport interface StreamCallProviderProps {\n call?: Call;\n}\n\n/**\n * A provider for the call object.\n */\nexport const StreamCallProvider = (\n props: PropsWithChildren<StreamCallProviderProps>,\n) => {\n const { call, children } = props;\n return (\n <StreamCallContext.Provider value={call}>\n {children}\n </StreamCallContext.Provider>\n );\n};\n\n/**\n * A hook to get the call object from the closest provider.\n */\nexport const useCall = () => {\n return useContext(StreamCallContext);\n};\n","import { TranslationsMap, TranslationsRegistry } from './types';\n\nexport const mapToRegistry = (\n translationsMap: TranslationsMap,\n namespace: string,\n) =>\n Object.entries(translationsMap).reduce((acc, [lng, translations]) => {\n acc[lng] = { [namespace]: translations };\n return acc;\n }, {} as TranslationsRegistry);\n","import i18next from 'i18next';\nimport { mapToRegistry } from './utils';\nimport {\n TranslationLanguage,\n TranslationSheet,\n TranslationsMap,\n TranslatorFunction,\n} from './types';\n\nexport const DEFAULT_LANGUAGE = 'en';\nexport const DEFAULT_NAMESPACE = 'stream-video';\nconst DEFAULT_CONFIG = {\n debug: false,\n currentLanguage: DEFAULT_LANGUAGE,\n fallbackLanguage: false,\n} as const;\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 * @internal\n */\nexport const useObservableValue = <T>(observable$: Observable<T>) => {\n const [value, setValue] = useState<T>(() =>\n RxUtils.getCurrentValue(observable$),\n );\n useEffect(() => {\n const subscription = observable$.subscribe(setValue);\n return () => {\n subscription.unsubscribe();\n };\n }, [observable$]);\n\n return value;\n};\n","/**\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 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/**\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 direction = useObservableValue(state.direction$);\n const mediaStream = useObservableValue(state.mediaStream$);\n const selectedDevice = useObservableValue(state.selectedDevice$);\n const devices = useObservableValue(devices$);\n const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);\n const isMute = status !== 'enabled';\n\n return {\n camera,\n status,\n isEnabled: status === 'enabled',\n direction,\n mediaStream,\n devices,\n hasBrowserPermission,\n selectedDevice,\n isMute,\n };\n};\n\n/**\n * Returns the microphone state of the current call.\n *\n * @category Microphone Manager State\n */\nexport const useMicrophoneState = () => {\n const call = useCall();\n const { microphone } = call as Call;\n\n const devices$ = useMemo(() => microphone.listDevices(), [microphone]);\n\n const { state } = microphone;\n const status = useObservableValue(state.status$);\n const mediaStream = useObservableValue(state.mediaStream$);\n const selectedDevice = useObservableValue(state.selectedDevice$);\n const devices = useObservableValue(devices$);\n const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);\n const isSpeakingWhileMuted = useObservableValue(state.speakingWhileMuted$);\n const isMute = status !== 'enabled';\n\n return {\n microphone,\n status,\n isEnabled: status === 'enabled',\n mediaStream,\n devices,\n selectedDevice,\n hasBrowserPermission,\n isSpeakingWhileMuted,\n isMute,\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$);\n const selectedDevice = useObservableValue(speaker.state.selectedDevice$);\n\n return {\n speaker,\n devices,\n selectedDevice,\n isDeviceSelectionSupported: speaker.state.isDeviceSelectionSupported,\n };\n};\n\n/**\n * Returns the Screen Share state of the current call.\n */\nexport const useScreenShareState = () => {\n const call = useCall();\n const { screenShare } = call as Call;\n\n const status = useObservableValue(screenShare.state.status$);\n const mediaStream = useObservableValue(screenShare.state.mediaStream$);\n const isMute = status !== 'enabled';\n\n return {\n screenShare,\n mediaStream,\n status,\n isMute,\n };\n};\n","import { useStreamVideoClient } from '../contexts';\nimport { useObservableValue } from './useObservableValue';\n\n/**\n * Utility hook which provides access to client's state store.\n */\nexport const useStore = () => {\n const client = useStreamVideoClient();\n if (!client) {\n throw new Error(\n `StreamVideoClient isn't initialized or this hook is called outside of <StreamVideo> context.`,\n );\n }\n return client.readOnlyStateStore;\n};\n\n/**\n * Utility hook which provides a list of all notifications about created calls.\n * In the ring call settings, these calls can be outgoing (I have called somebody)\n * or incoming (somebody has called me).\n *\n * @category Client State\n */\nexport const useCalls = () => {\n const { calls$ } = useStore();\n return useObservableValue(calls$);\n};\n\n/**\n * Returns the current connected user.\n *\n * @category Client State\n */\nexport const useConnectedUser = () => {\n const { connectedUser$ } = useStore();\n return useObservableValue(connectedUser$);\n};\n","import * as CallStateHooks from './callStateHooks';\n\nexport * from './store';\n\n/**\n * A hook-alike function that exposes all call state hooks.\n *\n * @category Call State\n */\nexport const useCallStateHooks = () => CallStateHooks;\n","import { OwnCapability } from '@stream-io/video-client';\n\nimport { PropsWithChildren } from 'react';\nimport { useCall } from '../contexts';\nimport { useCallStateHooks } 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","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../src/contexts/StreamCallContext.tsx","../../src/i18n/utils.ts","../../src/i18n/StreamI18n.ts","../../src/contexts/StreamI18nContext.tsx","../../src/contexts/StreamVideoContext.tsx","../../src/hooks/useObservableValue.ts","../../src/helpers/platforms.ts","../../src/hooks/callStateHooks.ts","../../src/hooks/store.ts","../../src/hooks/index.ts","../../src/wrappers/Restricted.tsx"],"sourcesContent":["import { createContext, PropsWithChildren, useContext } from 'react';\nimport { Call } from '@stream-io/video-client';\n\nconst StreamCallContext = createContext<Call | undefined>(undefined);\n\n/**\n * The props for the StreamCallProvider component.\n */\nexport interface StreamCallProviderProps {\n call?: Call;\n}\n\n/**\n * A provider for the call object.\n */\nexport const StreamCallProvider = (\n props: PropsWithChildren<StreamCallProviderProps>,\n) => {\n const { call, children } = props;\n return (\n <StreamCallContext.Provider value={call}>\n {children}\n </StreamCallContext.Provider>\n );\n};\n\n/**\n * A hook to get the call object from the closest provider.\n */\nexport const useCall = () => {\n return useContext(StreamCallContext);\n};\n","import { TranslationsMap, TranslationsRegistry } from './types';\n\nexport const mapToRegistry = (\n translationsMap: TranslationsMap,\n namespace: string,\n) =>\n Object.entries(translationsMap).reduce((acc, [lng, translations]) => {\n acc[lng] = { [namespace]: translations };\n return acc;\n }, {} as TranslationsRegistry);\n","import i18next from 'i18next';\nimport { mapToRegistry } from './utils';\nimport {\n TranslationLanguage,\n TranslationSheet,\n TranslationsMap,\n TranslatorFunction,\n} from './types';\n\nexport const DEFAULT_LANGUAGE = 'en';\nexport const DEFAULT_NAMESPACE = 'stream-video';\nconst DEFAULT_CONFIG = {\n debug: false,\n currentLanguage: DEFAULT_LANGUAGE,\n fallbackLanguage: false,\n} as const;\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 * @internal\n */\nexport const useObservableValue = <T>(observable$: Observable<T>) => {\n const [value, setValue] = useState<T>(() =>\n RxUtils.getCurrentValue(observable$),\n );\n useEffect(() => {\n const subscription = observable$.subscribe(setValue);\n return () => {\n subscription.unsubscribe();\n };\n }, [observable$]);\n\n return value;\n};\n","/**\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 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/**\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$);\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$);\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$);\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","import { useStreamVideoClient } from '../contexts';\nimport { useObservableValue } from './useObservableValue';\n\n/**\n * Utility hook which provides access to client's state store.\n */\nexport const useStore = () => {\n const client = useStreamVideoClient();\n if (!client) {\n throw new Error(\n `StreamVideoClient isn't initialized or this hook is called outside of <StreamVideo> context.`,\n );\n }\n return client.readOnlyStateStore;\n};\n\n/**\n * Utility hook which provides a list of all notifications about created calls.\n * In the ring call settings, these calls can be outgoing (I have called somebody)\n * or incoming (somebody has called me).\n *\n * @category Client State\n */\nexport const useCalls = () => {\n const { calls$ } = useStore();\n return useObservableValue(calls$);\n};\n\n/**\n * Returns the current connected user.\n *\n * @category Client State\n */\nexport const useConnectedUser = () => {\n const { connectedUser$ } = useStore();\n return useObservableValue(connectedUser$);\n};\n","import * as CallStateHooks from './callStateHooks';\n\nexport * from './store';\n\n/**\n * A hook-alike function that exposes all call state hooks.\n *\n * @category Call State\n */\nexport const useCallStateHooks = () => CallStateHooks;\n","import { OwnCapability } from '@stream-io/video-client';\n\nimport { PropsWithChildren } from 'react';\nimport { useCall } from '../contexts';\nimport { useCallStateHooks } 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","_Fragment"],"mappings":"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"}
|
package/dist/index.es.js
CHANGED
|
@@ -469,15 +469,18 @@ const useCameraState = () => {
|
|
|
469
469
|
const devices$ = useMemo(() => camera.listDevices(), [camera]);
|
|
470
470
|
const { state } = camera;
|
|
471
471
|
const status = useObservableValue(state.status$);
|
|
472
|
+
const optimisticStatus = useObservableValue(state.optimisticStatus$);
|
|
472
473
|
const direction = useObservableValue(state.direction$);
|
|
473
474
|
const mediaStream = useObservableValue(state.mediaStream$);
|
|
474
475
|
const selectedDevice = useObservableValue(state.selectedDevice$);
|
|
475
476
|
const devices = useObservableValue(devices$);
|
|
476
477
|
const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);
|
|
477
478
|
const isMute = status !== 'enabled';
|
|
479
|
+
const optimisticIsMute = optimisticStatus !== 'enabled';
|
|
478
480
|
return {
|
|
479
481
|
camera,
|
|
480
482
|
status,
|
|
483
|
+
optimisticStatus,
|
|
481
484
|
isEnabled: status === 'enabled',
|
|
482
485
|
direction,
|
|
483
486
|
mediaStream,
|
|
@@ -485,6 +488,7 @@ const useCameraState = () => {
|
|
|
485
488
|
hasBrowserPermission,
|
|
486
489
|
selectedDevice,
|
|
487
490
|
isMute,
|
|
491
|
+
optimisticIsMute,
|
|
488
492
|
};
|
|
489
493
|
};
|
|
490
494
|
/**
|
|
@@ -498,15 +502,18 @@ const useMicrophoneState = () => {
|
|
|
498
502
|
const devices$ = useMemo(() => microphone.listDevices(), [microphone]);
|
|
499
503
|
const { state } = microphone;
|
|
500
504
|
const status = useObservableValue(state.status$);
|
|
505
|
+
const optimisticStatus = useObservableValue(state.optimisticStatus$);
|
|
501
506
|
const mediaStream = useObservableValue(state.mediaStream$);
|
|
502
507
|
const selectedDevice = useObservableValue(state.selectedDevice$);
|
|
503
508
|
const devices = useObservableValue(devices$);
|
|
504
509
|
const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);
|
|
505
510
|
const isSpeakingWhileMuted = useObservableValue(state.speakingWhileMuted$);
|
|
506
511
|
const isMute = status !== 'enabled';
|
|
512
|
+
const optimisticIsMute = optimisticStatus !== 'enabled';
|
|
507
513
|
return {
|
|
508
514
|
microphone,
|
|
509
515
|
status,
|
|
516
|
+
optimisticStatus,
|
|
510
517
|
isEnabled: status === 'enabled',
|
|
511
518
|
mediaStream,
|
|
512
519
|
devices,
|
|
@@ -514,6 +521,7 @@ const useMicrophoneState = () => {
|
|
|
514
521
|
hasBrowserPermission,
|
|
515
522
|
isSpeakingWhileMuted,
|
|
516
523
|
isMute,
|
|
524
|
+
optimisticIsMute,
|
|
517
525
|
};
|
|
518
526
|
};
|
|
519
527
|
/**
|
|
@@ -544,13 +552,18 @@ const useScreenShareState = () => {
|
|
|
544
552
|
const call = useCall();
|
|
545
553
|
const { screenShare } = call;
|
|
546
554
|
const status = useObservableValue(screenShare.state.status$);
|
|
555
|
+
const pendingStatus = useObservableValue(screenShare.state.optimisticStatus$);
|
|
547
556
|
const mediaStream = useObservableValue(screenShare.state.mediaStream$);
|
|
548
557
|
const isMute = status !== 'enabled';
|
|
558
|
+
const optimisticStatus = pendingStatus ?? status;
|
|
559
|
+
const optimisticIsMute = optimisticStatus !== 'enabled';
|
|
549
560
|
return {
|
|
550
561
|
screenShare,
|
|
551
562
|
mediaStream,
|
|
552
563
|
status,
|
|
564
|
+
optimisticStatus,
|
|
553
565
|
isMute,
|
|
566
|
+
optimisticIsMute,
|
|
554
567
|
};
|
|
555
568
|
};
|
|
556
569
|
|
package/dist/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../../src/contexts/StreamCallContext.tsx","../../src/i18n/utils.ts","../../src/i18n/StreamI18n.ts","../../src/contexts/StreamI18nContext.tsx","../../src/contexts/StreamVideoContext.tsx","../../src/hooks/useObservableValue.ts","../../src/helpers/platforms.ts","../../src/hooks/callStateHooks.ts","../../src/hooks/store.ts","../../src/hooks/index.ts","../../src/wrappers/Restricted.tsx"],"sourcesContent":["import { createContext, PropsWithChildren, useContext } from 'react';\nimport { Call } from '@stream-io/video-client';\n\nconst StreamCallContext = createContext<Call | undefined>(undefined);\n\n/**\n * The props for the StreamCallProvider component.\n */\nexport interface StreamCallProviderProps {\n call?: Call;\n}\n\n/**\n * A provider for the call object.\n */\nexport const StreamCallProvider = (\n props: PropsWithChildren<StreamCallProviderProps>,\n) => {\n const { call, children } = props;\n return (\n <StreamCallContext.Provider value={call}>\n {children}\n </StreamCallContext.Provider>\n );\n};\n\n/**\n * A hook to get the call object from the closest provider.\n */\nexport const useCall = () => {\n return useContext(StreamCallContext);\n};\n","import { TranslationsMap, TranslationsRegistry } from './types';\n\nexport const mapToRegistry = (\n translationsMap: TranslationsMap,\n namespace: string,\n) =>\n Object.entries(translationsMap).reduce((acc, [lng, translations]) => {\n acc[lng] = { [namespace]: translations };\n return acc;\n }, {} as TranslationsRegistry);\n","import i18next from 'i18next';\nimport { mapToRegistry } from './utils';\nimport {\n TranslationLanguage,\n TranslationSheet,\n TranslationsMap,\n TranslatorFunction,\n} from './types';\n\nexport const DEFAULT_LANGUAGE = 'en';\nexport const DEFAULT_NAMESPACE = 'stream-video';\nconst DEFAULT_CONFIG = {\n debug: false,\n currentLanguage: DEFAULT_LANGUAGE,\n fallbackLanguage: false,\n} as const;\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 * @internal\n */\nexport const useObservableValue = <T>(observable$: Observable<T>) => {\n const [value, setValue] = useState<T>(() =>\n RxUtils.getCurrentValue(observable$),\n );\n useEffect(() => {\n const subscription = observable$.subscribe(setValue);\n return () => {\n subscription.unsubscribe();\n };\n }, [observable$]);\n\n return value;\n};\n","/**\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 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/**\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 direction = useObservableValue(state.direction$);\n const mediaStream = useObservableValue(state.mediaStream$);\n const selectedDevice = useObservableValue(state.selectedDevice$);\n const devices = useObservableValue(devices$);\n const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);\n const isMute = status !== 'enabled';\n\n return {\n camera,\n status,\n isEnabled: status === 'enabled',\n direction,\n mediaStream,\n devices,\n hasBrowserPermission,\n selectedDevice,\n isMute,\n };\n};\n\n/**\n * Returns the microphone state of the current call.\n *\n * @category Microphone Manager State\n */\nexport const useMicrophoneState = () => {\n const call = useCall();\n const { microphone } = call as Call;\n\n const devices$ = useMemo(() => microphone.listDevices(), [microphone]);\n\n const { state } = microphone;\n const status = useObservableValue(state.status$);\n const mediaStream = useObservableValue(state.mediaStream$);\n const selectedDevice = useObservableValue(state.selectedDevice$);\n const devices = useObservableValue(devices$);\n const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);\n const isSpeakingWhileMuted = useObservableValue(state.speakingWhileMuted$);\n const isMute = status !== 'enabled';\n\n return {\n microphone,\n status,\n isEnabled: status === 'enabled',\n mediaStream,\n devices,\n selectedDevice,\n hasBrowserPermission,\n isSpeakingWhileMuted,\n isMute,\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$);\n const selectedDevice = useObservableValue(speaker.state.selectedDevice$);\n\n return {\n speaker,\n devices,\n selectedDevice,\n isDeviceSelectionSupported: speaker.state.isDeviceSelectionSupported,\n };\n};\n\n/**\n * Returns the Screen Share state of the current call.\n */\nexport const useScreenShareState = () => {\n const call = useCall();\n const { screenShare } = call as Call;\n\n const status = useObservableValue(screenShare.state.status$);\n const mediaStream = useObservableValue(screenShare.state.mediaStream$);\n const isMute = status !== 'enabled';\n\n return {\n screenShare,\n mediaStream,\n status,\n isMute,\n };\n};\n","import { useStreamVideoClient } from '../contexts';\nimport { useObservableValue } from './useObservableValue';\n\n/**\n * Utility hook which provides access to client's state store.\n */\nexport const useStore = () => {\n const client = useStreamVideoClient();\n if (!client) {\n throw new Error(\n `StreamVideoClient isn't initialized or this hook is called outside of <StreamVideo> context.`,\n );\n }\n return client.readOnlyStateStore;\n};\n\n/**\n * Utility hook which provides a list of all notifications about created calls.\n * In the ring call settings, these calls can be outgoing (I have called somebody)\n * or incoming (somebody has called me).\n *\n * @category Client State\n */\nexport const useCalls = () => {\n const { calls$ } = useStore();\n return useObservableValue(calls$);\n};\n\n/**\n * Returns the current connected user.\n *\n * @category Client State\n */\nexport const useConnectedUser = () => {\n const { connectedUser$ } = useStore();\n return useObservableValue(connectedUser$);\n};\n","import * as CallStateHooks from './callStateHooks';\n\nexport * from './store';\n\n/**\n * A hook-alike function that exposes all call state hooks.\n *\n * @category Call State\n */\nexport const useCallStateHooks = () => CallStateHooks;\n","import { OwnCapability } from '@stream-io/video-client';\n\nimport { PropsWithChildren } from 'react';\nimport { useCall } from '../contexts';\nimport { useCallStateHooks } 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":";;;;;AAGA,MAAM,iBAAiB,GAAG,aAAa,CAAmB,SAAS,CAAC,CAAC;AASrE;;AAEG;AACU,MAAA,kBAAkB,GAAG,CAChC,KAAiD,KAC/C;AACF,IAAA,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;AACjC,IAAA,QACEA,GAAA,CAAC,iBAAiB,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,IAAI,EAAA,QAAA,EACpC,QAAQ,EAAA,CACkB,EAC7B;AACJ,EAAE;AAEF;;AAEG;AACI,MAAM,OAAO,GAAG,MAAK;AAC1B,IAAA,OAAO,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACvC;;AC7BO,MAAM,aAAa,GAAG,CAC3B,eAAgC,EAChC,SAAiB,KAEjB,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,YAAY,CAAC,KAAI;IAClE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,SAAS,GAAG,YAAY,EAAE,CAAC;AACzC,IAAA,OAAO,GAAG,CAAC;AACb,CAAC,EAAE,EAA0B;;ACAxB,MAAM,gBAAgB,GAAG,KAAK;AAC9B,MAAM,iBAAiB,GAAG,eAAe;AAChD,MAAM,cAAc,GAAG;AACrB,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,eAAe,EAAE,gBAAgB;AACjC,IAAA,gBAAgB,EAAE,KAAK;CACf,CAAC;AAEX,MAAM,6BAA6B,GAAG,aAAa,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;AAE9D,MAAA,0BAA0B,GAAG,CAAC,GAAW,KAAK,IAAI;MAalD,UAAU,CAAA;;AAMrB,IAAA,WAAA,CAAY,UAAiC,EAAE,EAAA;;QAF/C,IAAC,CAAA,CAAA,GAAuB,0BAA0B,CAAC;QA0CnD,IAAI,CAAA,IAAA,GAAG,YAAW;AAChB,YAAA,IAAI;gBACF,IAAI,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;aACzC;YAAC,OAAO,CAAC,EAAE;AACV,gBAAA,OAAO,CAAC,KAAK,CAAC,CAAA,mCAAA,EAAsC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,CAAA,CAAC,CAAC;aAC1E;AACD,YAAA,OAAO,IAAI,CAAC;AACd,SAAC,CAAC;AAEF,QAAA,IAAA,CAAA,cAAc,GAAG,OACf,QAA8B,EAC9B,QAAkD,KAChD;AACF,YAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;gBAAE,OAAO;;;YAGxC,MAAM,eAAe,GACnB,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,SAAS;AAC/C,kBAAE,MAAM,CAAC,SAAS,CAAC,QAAQ;kBACzB,SAAS,CAAC;YAChB,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,IAAI,eAAe,CAAC,CAAC;AACpE,YAAA,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;AACnC,SAAC,CAAC;QAEF,IAA+B,CAAA,+BAAA,GAAG,CAAC,EACjC,GAAG,EACH,YAAY,GAIb,KAAI;AACH,YAAA,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;gBAAE,OAAO;AACxC,YAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CACjC,GAAG,EACH,iBAAiB,EACjB,YAAY,EACZ,IAAI,EACJ,IAAI,CACL,CAAC;AACJ,SAAC,CAAC;QAEM,IAAmB,CAAA,mBAAA,GAAG,MAAK;AACjC,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;AACpC,gBAAA,OAAO,CAAC,IAAI,CACV,uEAAuE,CACxE,CAAC;aACH;AACD,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;AACzC,SAAC,CAAC;QAvFA,MAAM,EACJ,KAAK,GAAG,cAAc,CAAC,KAAK,EAC5B,eAAe,GAAG,cAAc,CAAC,eAAe,EAChD,gBAAgB,GAAG,cAAc,CAAC,gBAAgB,EAClD,qBAAqB,GACtB,GAAG,OAAO,CAAC;AAEZ,QAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;YACzC,KAAK;AACL,YAAA,SAAS,EAAE,iBAAiB;AAC5B,YAAA,WAAW,EAAE,gBAAgB;AAC7B,YAAA,aAAa,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;AACrC,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,GAAG,EAAE,eAAe;AACpB,YAAA,WAAW,EAAE,KAAK;AAClB,YAAA,sBAAsB,EAAE,CAAC,GAAG,KAAI;AAC9B,gBAAA,OAAO,GAAG,CAAC;aACZ;AACD,YAAA,SAAS,EAAE,6BAA6B;AACzC,SAAA,CAAC,CAAC;QAEH,IAAI,qBAAqB,EAAE;YACzB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,aAAa,EAAE,MAAK;AACvC,gBAAA,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,YAAY,CAAC,KAAI;oBACpE,IAAI,CAAC,+BAA+B,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;AAC9D,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC,CAAC;SACJ;KACF;AAED,IAAA,IAAI,eAAe,GAAA;QACjB,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3B,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;KACnC;AAED,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;KACxC;AAmDF;;AC7GD,MAAM,iBAAiB,GAAG,aAAa,CAAyB;AAC9D,IAAA,CAAC,EAAE,0BAA0B;AAC9B,CAAA,CAAC,CAAC;AAWI,MAAM,kBAAkB,GAAG,CAAC,EACjC,QAAQ,EACR,GAAG,gBAAgB,EACwB,KAAI;IAC/C,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC;AAEpD,IAAA,QACEA,GAAC,CAAA,iBAAiB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,YAC3C,QAAQ,EAAA,CACkB,EAC7B;AACJ,EAAE;AAEK,MAAM,aAAa,GAAG,CAAC,EAC5B,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAChB,qBAAqB,GACJ,KAAI;IACrB,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CACrB,MACE,YAAY;AACZ,QAAA,IAAI,UAAU,CAAC;AACb,YAAA,eAAe,EAAE,QAAQ;YACzB,gBAAgB;YAChB,qBAAqB;AACtB,SAAA,CAAC,CACL,CAAC;AACF,IAAA,MAAM,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CACpC,MAAM,0BAA0B,CACjC,CAAC;IAEF,SAAS,CAAC,MAAK;AACb,QAAA,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,aAAa,EAAE;YAClB,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,gBAAgB,CAAC,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1E,OAAO;SACR;QACD,IAAI,QAAQ,IAAI,IAAI,EAAE,eAAe,KAAK,QAAQ,EAAE;YAClD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAI;AAC1C,gBAAA,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;AACpD,aAAC,CAAC,CAAC;SACJ;KACF,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC;AAE1D,IAAA,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACrB,EAAE;AAEW,MAAA,OAAO,GAAG,MAAM,UAAU,CAAC,iBAAiB;;ACxEzD,MAAM,kBAAkB,GAAG,aAAa,CACtC,SAAS,CACV,CAAC;AAUF;;;;;AAKG;AACU,MAAA,mBAAmB,GAAG,CAAC,EAClC,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,qBAAqB,GACe,KAAI;AACxC,IAAA,QACEA,GAAA,CAAC,kBAAkB,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,MAAM,EAAA,QAAA,EACxCA,GAAC,CAAA,kBAAkB,EACjB,EAAA,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,QAAQ,EAClB,qBAAqB,EAAE,qBAAqB,EAE3C,QAAA,EAAA,QAAQ,EACU,CAAA,EAAA,CACO,EAC9B;AACJ,EAAE;AAEF;;;;;AAKG;AACI,MAAM,oBAAoB,GAAG,MAAK;AACvC,IAAA,OAAO,UAAU,CAAC,kBAAkB,CAAC,CAAC;AACxC;;ACjDA;;;AAGG;AACI,MAAM,kBAAkB,GAAG,CAAI,WAA0B,KAAI;AAClE,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAI,MACpC,OAAO,CAAC,eAAe,CAAC,WAAW,CAAC,CACrC,CAAC;IACF,SAAS,CAAC,MAAK;QACb,MAAM,YAAY,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACrD,QAAA,OAAO,MAAK;YACV,YAAY,CAAC,WAAW,EAAE,CAAC;AAC7B,SAAC,CAAC;AACJ,KAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;AAElB,IAAA,OAAO,KAAK,CAAC;AACf,CAAC;;ACpBD;;AAEG;AACI,MAAM,aAAa,GAAG,MAAK;IAChC,IAAI,OAAO,SAAS,KAAK,WAAW;AAAE,QAAA,OAAO,KAAK,CAAC;IACnD,OAAO,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,aAAa,CAAC;AAC5D,CAAC;;ACaD;;;;AAIG;AACI,MAAM,YAAY,GAAG,MAAK;AAC/B,IAAA,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;;;IAGvB,IAAI,CAAC,IAAI,EAAE;QACT,MAAM,OAAO,GACX,uDAAuD;AACvD,YAAA,6EAA6E,CAAC;AAChF,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO,IAAI,SAAS,EAAE,CAAC;KACxB;IACD,OAAO,IAAI,CAAC,KAAK,CAAC;AACpB,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,4BAA4B,GAAG,MAAc;AACxD,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE,CAAC;AACtC,IAAA,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,kCAAkC,GAAG,MAAc;AAC9D,IAAA,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,CAAC;AACnC,IAAA,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC3C,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,KAAK,CAAC;IAC1B,OAAO,MAAM,CAAC,YAAY,CAAC;AAC7B,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,aAAa,GAAG,MAAc;AACzC,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE,CAAC;AACtC,IAAA,MAAM,aAAa,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACrD,OAAO,CAAC,aAAa,CAAC;AACxB,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,qBAAqB,GAAG,MAAe;AAClD,IAAA,MAAM,EAAE,eAAe,EAAE,GAAG,YAAY,EAAE,CAAC;AAC3C,IAAA,OAAO,kBAAkB,CAAC,eAAe,CAAC,CAAC;AAC7C,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,gBAAgB,GAAG,MAAuB;AACrD,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE,CAAC;AACtC,IAAA,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,cAAc,GAAG,MAAuB;AACnD,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,CAAC;AACpC,IAAA,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,eAAe,GAAG,MAAuB;AACpD,IAAA,MAAM,EAAE,SAAS,EAAE,GAAG,YAAY,EAAE,CAAC;AACrC,IAAA,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,gBAAgB,GAAG,MAAuB;AACrD,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE,CAAC;AACtC,IAAA,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,gBAAgB,GAAG,MAA+B;AAC7D,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE,CAAC;AACtC,IAAA,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,iBAAiB,GAAG,MAA0B;AACzD,IAAA,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,CAAC;AACnC,IAAA,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,aAAa,GAAG,MAAiC;AAC5D,IAAA,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,CAAC;AACnC,IAAA,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,cAAc,GAAG,MAAsC;AAClE,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,CAAC;AACpC,IAAA,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,cAAc,GAAG,MAAsC;AAClE,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,CAAC;AACpC,IAAA,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,eAAe,GAAG,MAAuC;AACpE,IAAA,MAAM,EAAE,SAAS,EAAE,GAAG,YAAY,EAAE,CAAC;AACrC,IAAA,OAAO,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,+BAA+B,GAAG,MAAc;AAC3D,IAAA,MAAM,EAAE,aAAa,EAAE,GAAG,YAAY,EAAE,CAAC;AACzC,IAAA,OAAO,kBAAkB,CAAC,aAAa,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,cAAc,GAAG,MAA+B;AAC3D,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,CAAC;AACpC,IAAA,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF;;;;;AAKG;AACI,MAAM,wBAAwB,GAAG,MAAc;AACpD,IAAA,MAAM,EAAE,sBAAsB,EAAE,GAAG,YAAY,EAAE,CAAC;AAClD,IAAA,OAAO,kBAAkB,CAAC,sBAAsB,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF;;;;;;;;;;;AAWG;AACI,MAAM,kBAAkB,GAAG,MAAkC;AAClE,IAAA,MAAM,EAAE,gBAAgB,EAAE,GAAG,YAAY,EAAE,CAAC;AAC5C,IAAA,OAAO,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,kBAAkB,GAAG,MAAyC;AACzE,IAAA,MAAM,EAAE,gBAAgB,EAAE,GAAG,YAAY,EAAE,CAAC;AAC5C,IAAA,OAAO,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,cAAc,GAAG,MAAuB;AACnD,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,YAAY,EAAE,CAAC;AACpC,IAAA,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,mBAAmB,GAAG,MAAK;AACtC,IAAA,MAAM,EAAE,aAAa,EAAE,GAAG,YAAY,EAAE,CAAC;AACzC,IAAA,OAAO,kBAAkB,CAAC,aAAa,CAAC,CAAC;AAC3C,CAAC,CAAC;AAEF;;;;;AAKG;AACI,MAAM,gBAAgB,GAAG,MAAK;AACnC,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE,CAAC;AACtC,IAAA,OAAO,kBAAkB,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF;;;;;;;;AAQG;AACI,MAAM,eAAe,GAAG,CAAC,EAC9B,MAAM,GAAA,GAOJ,EAAE,KAAI;AACR,IAAA,MAAM,EAAE,aAAa,EAAE,GAAG,YAAY,EAAE,CAAC;AACzC,IAAA,MAAM,YAAY,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAEvD,OAAO,OAAO,CAAC,MAAK;QAClB,IAAI,MAAM,EAAE;YACV,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACvC;AACD,QAAA,OAAO,YAAY,CAAC;AACtB,KAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF;;;;;AAKG;AACI,MAAM,mBAAmB,GAAG,MAAK;AACtC,IAAA,MAAM,EAAE,iBAAiB,EAAE,GAAG,YAAY,EAAE,CAAC;AAC7C,IAAA,OAAO,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,qBAAqB,GAAG,MAAK;AACxC,IAAA,MAAM,EAAE,mBAAmB,EAAE,GAAG,YAAY,EAAE,CAAC;AAC/C,IAAA,OAAO,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;AACjD,CAAC,CAAC;AAEF;;;;;AAKG;AACI,MAAM,mBAAmB,GAAG,MAAK;AACtC,IAAA,MAAM,EAAE,iBAAiB,EAAE,GAAG,YAAY,EAAE,CAAC;AAC7C,IAAA,OAAO,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF;;;;;AAKG;AACI,MAAM,4BAA4B,GAAG,MAAK;AAC/C,IAAA,MAAM,EAAE,0BAA0B,EAAE,GAAG,YAAY,EAAE,CAAC;AACtD,IAAA,OAAO,kBAAkB,CAAC,0BAA0B,CAAC,CAAC;AACxD,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,gBAAgB,GAAG,MAAK;AACnC,IAAA,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,CAAC;AACvC,IAAA,OAAO,kBAAkB,CAAC,WAAW,CAAC,CAAC;AACzC,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,kBAAkB,GAAG,MAAkC;AAClE,IAAA,MAAM,EAAE,gBAAgB,EAAE,GAAG,YAAY,EAAE,CAAC;AAC5C,IAAA,OAAO,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,iBAAiB,GAAG,CAAC,GAAG,WAA4B,KAAa;AAC5E,IAAA,MAAM,YAAY,GAAG,kBAAkB,EAAE,CAAC;AAC1C,IAAA,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,UAAU,KAAK,YAAY,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AAC/E,CAAC,CAAC;AAEF;;;;;AAKG;AACI,MAAM,cAAc,GAAG,MAAK;AACjC,IAAA,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;AACvB,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAY,CAAC;AAEhC,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAE/D,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IACzB,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAG,kBAAkB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AACjE,IAAA,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;AAC7E,IAAA,MAAM,MAAM,GAAG,MAAM,KAAK,SAAS,CAAC;IAEpC,OAAO;QACL,MAAM;QACN,MAAM;QACN,SAAS,EAAE,MAAM,KAAK,SAAS;QAC/B,SAAS;QACT,WAAW;QACX,OAAO;QACP,oBAAoB;QACpB,cAAc;QACd,MAAM;KACP,CAAC;AACJ,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,kBAAkB,GAAG,MAAK;AACrC,IAAA,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;AACvB,IAAA,MAAM,EAAE,UAAU,EAAE,GAAG,IAAY,CAAC;AAEpC,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AAEvE,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;IAC7B,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAG,kBAAkB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AACjE,IAAA,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC7E,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAC3E,IAAA,MAAM,MAAM,GAAG,MAAM,KAAK,SAAS,CAAC;IAEpC,OAAO;QACL,UAAU;QACV,MAAM;QACN,SAAS,EAAE,MAAM,KAAK,SAAS;QAC/B,WAAW;QACX,OAAO;QACP,cAAc;QACd,oBAAoB;QACpB,oBAAoB;QACpB,MAAM;KACP,CAAC;AACJ,CAAC,CAAC;AAEF;;;;AAIG;AACI,MAAM,eAAe,GAAG,MAAK;IAClC,IAAI,aAAa,EAAE,EAAE;AACnB,QAAA,MAAM,IAAI,KAAK,CACb,yKAAyK,CAC1K,CAAC;KACH;AACD,IAAA,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;AACvB,IAAA,MAAM,EAAE,OAAO,EAAE,GAAG,IAAY,CAAC;AAEjC,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AACjE,IAAA,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,cAAc,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAEzE,OAAO;QACL,OAAO;QACP,OAAO;QACP,cAAc;AACd,QAAA,0BAA0B,EAAE,OAAO,CAAC,KAAK,CAAC,0BAA0B;KACrE,CAAC;AACJ,CAAC,CAAC;AAEF;;AAEG;AACI,MAAM,mBAAmB,GAAG,MAAK;AACtC,IAAA,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;AACvB,IAAA,MAAM,EAAE,WAAW,EAAE,GAAG,IAAY,CAAC;IAErC,MAAM,MAAM,GAAG,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AACvE,IAAA,MAAM,MAAM,GAAG,MAAM,KAAK,SAAS,CAAC;IAEpC,OAAO;QACL,WAAW;QACX,WAAW;QACX,MAAM;QACN,MAAM;KACP,CAAC;AACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjcD;;AAEG;AACI,MAAM,QAAQ,GAAG,MAAK;AAC3B,IAAA,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAC;IACtC,IAAI,CAAC,MAAM,EAAE;AACX,QAAA,MAAM,IAAI,KAAK,CACb,CAAA,4FAAA,CAA8F,CAC/F,CAAC;KACH;IACD,OAAO,MAAM,CAAC,kBAAkB,CAAC;AACnC,EAAE;AAEF;;;;;;AAMG;AACI,MAAM,QAAQ,GAAG,MAAK;AAC3B,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;AAC9B,IAAA,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACpC,EAAE;AAEF;;;;AAIG;AACI,MAAM,gBAAgB,GAAG,MAAK;AACnC,IAAA,MAAM,EAAE,cAAc,EAAE,GAAG,QAAQ,EAAE,CAAC;AACtC,IAAA,OAAO,kBAAkB,CAAC,cAAc,CAAC,CAAC;AAC5C;;AChCA;;;;AAIG;MACU,iBAAiB,GAAG,MAAM;;ACiB1B,MAAA,UAAU,GAAG,CAAC,EACzB,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,UAAU,GAAG,IAAI,EACjB,QAAQ,GACQ,KAAI;AACpB,IAAA,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,EAAE,eAAe,EAAE,kBAAkB,EAAE,GAAG,iBAAiB,EAAE,CAAC;AACpE,IAAA,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;AAC7C,IAAA,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;IACnC,MAAM,cAAc,GAAG,cAAc,CAAC,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC,CAClE,CAAC,UAAU,KAAK,eAAe,EAAE,QAAQ,CAAC,UAAU,CAAC,CACtD,CAAC;AAEF,IAAA,IAAI,kBAAkB;QAAE,OAAO,cAAc,GAAGA,GAAA,CAAAC,QAAA,EAAA,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAI,GAAG,IAAI,CAAC;IAEvE,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,UAAU,KAChD,IAAI,EAAE,kBAAkB,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,CAC1D,CAAC;AAEF,IAAA,IAAI,cAAc;QAAE,OAAO,UAAU,GAAGD,GAAA,CAAAC,QAAA,EAAA,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAI,GAAG,IAAI,CAAC;IAE/D,IAAI,cAAc,IAAI,UAAU;QAAE,OAAOD,GAAA,CAAAC,QAAA,EAAA,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAI,CAAC;AAEzD,IAAA,OAAO,IAAI,CAAC;AACd;;;;"}
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../src/contexts/StreamCallContext.tsx","../../src/i18n/utils.ts","../../src/i18n/StreamI18n.ts","../../src/contexts/StreamI18nContext.tsx","../../src/contexts/StreamVideoContext.tsx","../../src/hooks/useObservableValue.ts","../../src/helpers/platforms.ts","../../src/hooks/callStateHooks.ts","../../src/hooks/store.ts","../../src/hooks/index.ts","../../src/wrappers/Restricted.tsx"],"sourcesContent":["import { createContext, PropsWithChildren, useContext } from 'react';\nimport { Call } from '@stream-io/video-client';\n\nconst StreamCallContext = createContext<Call | undefined>(undefined);\n\n/**\n * The props for the StreamCallProvider component.\n */\nexport interface StreamCallProviderProps {\n call?: Call;\n}\n\n/**\n * A provider for the call object.\n */\nexport const StreamCallProvider = (\n props: PropsWithChildren<StreamCallProviderProps>,\n) => {\n const { call, children } = props;\n return (\n <StreamCallContext.Provider value={call}>\n {children}\n </StreamCallContext.Provider>\n );\n};\n\n/**\n * A hook to get the call object from the closest provider.\n */\nexport const useCall = () => {\n return useContext(StreamCallContext);\n};\n","import { TranslationsMap, TranslationsRegistry } from './types';\n\nexport const mapToRegistry = (\n translationsMap: TranslationsMap,\n namespace: string,\n) =>\n Object.entries(translationsMap).reduce((acc, [lng, translations]) => {\n acc[lng] = { [namespace]: translations };\n return acc;\n }, {} as TranslationsRegistry);\n","import i18next from 'i18next';\nimport { mapToRegistry } from './utils';\nimport {\n TranslationLanguage,\n TranslationSheet,\n TranslationsMap,\n TranslatorFunction,\n} from './types';\n\nexport const DEFAULT_LANGUAGE = 'en';\nexport const DEFAULT_NAMESPACE = 'stream-video';\nconst DEFAULT_CONFIG = {\n debug: false,\n currentLanguage: DEFAULT_LANGUAGE,\n fallbackLanguage: false,\n} as const;\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 * @internal\n */\nexport const useObservableValue = <T>(observable$: Observable<T>) => {\n const [value, setValue] = useState<T>(() =>\n RxUtils.getCurrentValue(observable$),\n );\n useEffect(() => {\n const subscription = observable$.subscribe(setValue);\n return () => {\n subscription.unsubscribe();\n };\n }, [observable$]);\n\n return value;\n};\n","/**\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 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/**\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$);\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$);\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$);\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","import { useStreamVideoClient } from '../contexts';\nimport { useObservableValue } from './useObservableValue';\n\n/**\n * Utility hook which provides access to client's state store.\n */\nexport const useStore = () => {\n const client = useStreamVideoClient();\n if (!client) {\n throw new Error(\n `StreamVideoClient isn't initialized or this hook is called outside of <StreamVideo> context.`,\n );\n }\n return client.readOnlyStateStore;\n};\n\n/**\n * Utility hook which provides a list of all notifications about created calls.\n * In the ring call settings, these calls can be outgoing (I have called somebody)\n * or incoming (somebody has called me).\n *\n * @category Client State\n */\nexport const useCalls = () => {\n const { calls$ } = useStore();\n return useObservableValue(calls$);\n};\n\n/**\n * Returns the current connected user.\n *\n * @category Client State\n */\nexport const useConnectedUser = () => {\n const { connectedUser$ } = useStore();\n return useObservableValue(connectedUser$);\n};\n","import * as CallStateHooks from './callStateHooks';\n\nexport * from './store';\n\n/**\n * A hook-alike function that exposes all call state hooks.\n *\n * @category Call State\n */\nexport const useCallStateHooks = () => CallStateHooks;\n","import { OwnCapability } from '@stream-io/video-client';\n\nimport { PropsWithChildren } from 'react';\nimport { useCall } from '../contexts';\nimport { useCallStateHooks } 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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"}
|
|
@@ -186,6 +186,7 @@ export declare const useHasPermissions: (...permissions: OwnCapability[]) => boo
|
|
|
186
186
|
export declare const useCameraState: () => {
|
|
187
187
|
camera: import("@stream-io/video-client").CameraManager;
|
|
188
188
|
status: import("@stream-io/video-client").InputDeviceStatus;
|
|
189
|
+
optimisticStatus: import("@stream-io/video-client").InputDeviceStatus;
|
|
189
190
|
isEnabled: boolean;
|
|
190
191
|
direction: import("@stream-io/video-client").CameraDirection;
|
|
191
192
|
mediaStream: MediaStream | undefined;
|
|
@@ -193,6 +194,7 @@ export declare const useCameraState: () => {
|
|
|
193
194
|
hasBrowserPermission: boolean;
|
|
194
195
|
selectedDevice: string | undefined;
|
|
195
196
|
isMute: boolean;
|
|
197
|
+
optimisticIsMute: boolean;
|
|
196
198
|
};
|
|
197
199
|
/**
|
|
198
200
|
* Returns the microphone state of the current call.
|
|
@@ -202,6 +204,7 @@ export declare const useCameraState: () => {
|
|
|
202
204
|
export declare const useMicrophoneState: () => {
|
|
203
205
|
microphone: import("@stream-io/video-client").MicrophoneManager;
|
|
204
206
|
status: import("@stream-io/video-client").InputDeviceStatus;
|
|
207
|
+
optimisticStatus: import("@stream-io/video-client").InputDeviceStatus;
|
|
205
208
|
isEnabled: boolean;
|
|
206
209
|
mediaStream: MediaStream | undefined;
|
|
207
210
|
devices: MediaDeviceInfo[] | undefined;
|
|
@@ -209,6 +212,7 @@ export declare const useMicrophoneState: () => {
|
|
|
209
212
|
hasBrowserPermission: boolean;
|
|
210
213
|
isSpeakingWhileMuted: boolean;
|
|
211
214
|
isMute: boolean;
|
|
215
|
+
optimisticIsMute: boolean;
|
|
212
216
|
};
|
|
213
217
|
/**
|
|
214
218
|
* Returns the speaker state of the current call.
|
|
@@ -228,5 +232,7 @@ export declare const useScreenShareState: () => {
|
|
|
228
232
|
screenShare: import("@stream-io/video-client").ScreenShareManager;
|
|
229
233
|
mediaStream: MediaStream | undefined;
|
|
230
234
|
status: import("@stream-io/video-client").InputDeviceStatus;
|
|
235
|
+
optimisticStatus: import("@stream-io/video-client").InputDeviceStatus;
|
|
231
236
|
isMute: boolean;
|
|
237
|
+
optimisticIsMute: boolean;
|
|
232
238
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stream-io/video-react-bindings",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.28",
|
|
4
4
|
"packageManager": "yarn@3.2.4",
|
|
5
5
|
"main": "./dist/index.cjs.js",
|
|
6
6
|
"module": "./dist/index.es.js",
|
|
@@ -25,12 +25,12 @@
|
|
|
25
25
|
"rxjs": "~7.8.1"
|
|
26
26
|
},
|
|
27
27
|
"peerDependencies": {
|
|
28
|
-
"@stream-io/video-client": "^1.0.
|
|
28
|
+
"@stream-io/video-client": "^1.0.2",
|
|
29
29
|
"react": ">=17.0.0"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@rollup/plugin-typescript": "^11.1.6",
|
|
33
|
-
"@stream-io/video-client": "^1.0.
|
|
33
|
+
"@stream-io/video-client": "^1.0.2",
|
|
34
34
|
"@types/react": "^18.2.28",
|
|
35
35
|
"react": "^18.2.0",
|
|
36
36
|
"rimraf": "^5.0.5",
|
|
@@ -354,16 +354,19 @@ export const useCameraState = () => {
|
|
|
354
354
|
|
|
355
355
|
const { state } = camera;
|
|
356
356
|
const status = useObservableValue(state.status$);
|
|
357
|
+
const optimisticStatus = useObservableValue(state.optimisticStatus$);
|
|
357
358
|
const direction = useObservableValue(state.direction$);
|
|
358
359
|
const mediaStream = useObservableValue(state.mediaStream$);
|
|
359
360
|
const selectedDevice = useObservableValue(state.selectedDevice$);
|
|
360
361
|
const devices = useObservableValue(devices$);
|
|
361
362
|
const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);
|
|
362
363
|
const isMute = status !== 'enabled';
|
|
364
|
+
const optimisticIsMute = optimisticStatus !== 'enabled';
|
|
363
365
|
|
|
364
366
|
return {
|
|
365
367
|
camera,
|
|
366
368
|
status,
|
|
369
|
+
optimisticStatus,
|
|
367
370
|
isEnabled: status === 'enabled',
|
|
368
371
|
direction,
|
|
369
372
|
mediaStream,
|
|
@@ -371,6 +374,7 @@ export const useCameraState = () => {
|
|
|
371
374
|
hasBrowserPermission,
|
|
372
375
|
selectedDevice,
|
|
373
376
|
isMute,
|
|
377
|
+
optimisticIsMute,
|
|
374
378
|
};
|
|
375
379
|
};
|
|
376
380
|
|
|
@@ -387,16 +391,19 @@ export const useMicrophoneState = () => {
|
|
|
387
391
|
|
|
388
392
|
const { state } = microphone;
|
|
389
393
|
const status = useObservableValue(state.status$);
|
|
394
|
+
const optimisticStatus = useObservableValue(state.optimisticStatus$);
|
|
390
395
|
const mediaStream = useObservableValue(state.mediaStream$);
|
|
391
396
|
const selectedDevice = useObservableValue(state.selectedDevice$);
|
|
392
397
|
const devices = useObservableValue(devices$);
|
|
393
398
|
const hasBrowserPermission = useObservableValue(state.hasBrowserPermission$);
|
|
394
399
|
const isSpeakingWhileMuted = useObservableValue(state.speakingWhileMuted$);
|
|
395
400
|
const isMute = status !== 'enabled';
|
|
401
|
+
const optimisticIsMute = optimisticStatus !== 'enabled';
|
|
396
402
|
|
|
397
403
|
return {
|
|
398
404
|
microphone,
|
|
399
405
|
status,
|
|
406
|
+
optimisticStatus,
|
|
400
407
|
isEnabled: status === 'enabled',
|
|
401
408
|
mediaStream,
|
|
402
409
|
devices,
|
|
@@ -404,6 +411,7 @@ export const useMicrophoneState = () => {
|
|
|
404
411
|
hasBrowserPermission,
|
|
405
412
|
isSpeakingWhileMuted,
|
|
406
413
|
isMute,
|
|
414
|
+
optimisticIsMute,
|
|
407
415
|
};
|
|
408
416
|
};
|
|
409
417
|
|
|
@@ -441,13 +449,18 @@ export const useScreenShareState = () => {
|
|
|
441
449
|
const { screenShare } = call as Call;
|
|
442
450
|
|
|
443
451
|
const status = useObservableValue(screenShare.state.status$);
|
|
452
|
+
const pendingStatus = useObservableValue(screenShare.state.optimisticStatus$);
|
|
444
453
|
const mediaStream = useObservableValue(screenShare.state.mediaStream$);
|
|
445
454
|
const isMute = status !== 'enabled';
|
|
455
|
+
const optimisticStatus = pendingStatus ?? status;
|
|
456
|
+
const optimisticIsMute = optimisticStatus !== 'enabled';
|
|
446
457
|
|
|
447
458
|
return {
|
|
448
459
|
screenShare,
|
|
449
460
|
mediaStream,
|
|
450
461
|
status,
|
|
462
|
+
optimisticStatus,
|
|
451
463
|
isMute,
|
|
464
|
+
optimisticIsMute,
|
|
452
465
|
};
|
|
453
466
|
};
|