import { OpaqueObject } from '@legendapp/state'; import { DeepMaybeObservable, Supportable, ReadonlyObservable } from '@usels/core'; interface UseUserMediaOptions { /** Media constraints for getUserMedia. Default: { audio: false, video: true } */ constraints?: MediaStreamConstraints; /** Auto-start stream on mount. Default: false */ immediate?: boolean; } interface UseUserMediaReturn extends Supportable { /** Current media stream */ stream$: ReadonlyObservable | null>; /** Whether stream is currently active */ enabled$: ReadonlyObservable; /** Start the media stream. Throws if getUserMedia fails. */ start: () => Promise; /** Stop the media stream */ stop: () => void; /** Restart the media stream. Throws if getUserMedia fails. */ restart: () => Promise; } /** * Framework-agnostic reactive wrapper around * [MediaDevices.getUserMedia()](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia). * * Exposes the active `MediaStream` as an observable with `start()` / `stop()` / * `restart()` controls. Constraints are read at each `start()` call, so * reactive updates take effect on the next stream acquisition. Cleanup * (stopping all tracks) is registered via `onMount` so it fires on unmount. */ declare function createUserMedia(options?: DeepMaybeObservable): UseUserMediaReturn; export { type UseUserMediaOptions, type UseUserMediaReturn, createUserMedia };