@webcam/react 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("./hooks/useWebcam.cjs");let n=require("@webcam/core"),r=require("react");r=e.__toESM(r,1);let i=require("react/jsx-runtime");var a=({ref:e,stream:a,cameraResolutionMode:o,cameraResolutionType:s,videoConstraints:c,audioConstraints:l,requestTimeLimit:u,applyConstraints:d,frontCamera:f,mainCamera:p,mirrored:m=!0,muted:h=!0,style:g={},children:_,onLoadedMetadata:v,onRequest:y,onError:b,onStart:x,onStop:S,...C})=>{let w=(0,r.useRef)(null),T=e??w;return t.useWebcam(T,{stream:a,applyConstraints:d,requestTimeLimit:u,onRequest:y,onError:b,onStart:x,onStop:S,videoConstraints:c,audioConstraints:l,cameraResolutionMode:o,cameraResolutionType:s,frontCamera:f,mainCamera:p,muted:h}),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`video`,{autoPlay:!0,playsInline:!0,ref:T,style:{...g,...m&&{transform:`${g.transform?`${g.transform} `:``}scaleX(-1)`}},controls:!1,muted:h,onLoadedMetadata:e=>{v?.(e),e.currentTarget.play()},...C}),typeof _==`function`?_({element:T.current,getCanvas:e=>T.current?(0,n.getVideoFrameCanvas)(T.current,{...e,mirrored:m}):void 0,getSnapshot:e=>T.current?(0,n.getWebcamSnapshot)(T.current,{...e,mirrored:m}):void 0}):_]})};exports.Webcam=a;
1
+ const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("./hooks/useWebcam.cjs");let n=require("@webcam/core"),r=require("react");r=e.__toESM(r,1);let i=require("react/jsx-runtime");var a=({ref:e,stream:a,cameraResolutionMode:o,cameraResolutionType:s,videoConstraints:c,audioConstraints:l,requestTimeLimit:u,frontCamera:d,mainCamera:f,mirrored:p=!0,muted:m=!0,style:h={},children:g,onLoadedMetadata:_,onRequest:v,onError:y,onStart:b,onStop:x,...S})=>{let C=(0,r.useRef)(null),w=e??C;return t.useWebcam(w,{stream:a,requestTimeLimit:u,onRequest:v,onError:y,onStart:b,onStop:x,videoConstraints:c,audioConstraints:l,cameraResolutionMode:o,cameraResolutionType:s,frontCamera:d,mainCamera:f,muted:m}),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(`video`,{autoPlay:!0,playsInline:!0,ref:w,style:{...h,...p&&{transform:`${h.transform?`${h.transform} `:``}scaleX(-1)`}},controls:!1,muted:m,onLoadedMetadata:e=>{_?.(e),e.currentTarget.play()},...S}),typeof g==`function`?g({element:w.current,getCanvas:e=>w.current?(0,n.getVideoFrameCanvas)(w.current,{...e,mirrored:p}):void 0,getSnapshot:e=>w.current?(0,n.getWebcamSnapshot)(w.current,{...e,mirrored:p}):void 0}):g]})};exports.Webcam=a;
2
2
  //# sourceMappingURL=Webcam.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Webcam.cjs","names":[],"sources":["../../../../src/components/Webcam/Webcam.tsx"],"sourcesContent":["import type {\n GetVideoFrameCanvasOptions,\n GetWebcamSnapshotOptions,\n MediaTrackConstraintsOptions\n} from '@webcam/core';\nimport type { ComponentProps, ReactNode, RefObject } from 'react';\n\nimport { getVideoFrameCanvas, getWebcamSnapshot } from '@webcam/core';\nimport React, { useRef } from 'react';\n\nimport { useWebcam } from './hooks';\n\nexport type WebcamRenderProps = (options: {\n getCanvas: (options?: GetVideoFrameCanvasOptions) => HTMLCanvasElement | undefined;\n getSnapshot: (options?: GetWebcamSnapshotOptions) => string | undefined;\n element: HTMLVideoElement | null;\n}) => ReactNode;\n\ninterface BaseWebcamProps\n extends Omit<ComponentProps<'video'>, 'children' | 'onError'>, MediaTrackConstraintsOptions {\n applyConstraints?: boolean;\n audioConstraints?: MediaTrackConstraints;\n children?: ReactNode | WebcamRenderProps;\n innerRef?: RefObject<HTMLVideoElement>;\n mirrored?: boolean;\n ref?: RefObject<HTMLVideoElement>;\n requestTimeLimit?: number;\n videoConstraints?: MediaTrackConstraints;\n onError?: (error: Error) => void;\n onRequest?: () => void;\n onStart?: (stream: MediaStream) => void;\n onStop?: (stream?: MediaStream) => void;\n}\n\ninterface WebcamPropsWithInternalStream extends BaseWebcamProps {\n stream?: undefined;\n}\n\ninterface WebcamPropsWithExternalStream extends BaseWebcamProps {\n stream?: MediaStream;\n}\n\nexport type WebcamProps = WebcamPropsWithExternalStream | WebcamPropsWithInternalStream;\n\n/**\n * Renders the Webcam component and handles the requesting and displaying of the media stream\n *\n * @param {WebcamProps} props - The props for the Webcam component\n * @return {ReactElement} The rendered Webcam component\n */\nexport const Webcam = ({\n ref: externalVideoRef,\n stream: externalStream,\n cameraResolutionMode,\n cameraResolutionType,\n videoConstraints,\n audioConstraints,\n requestTimeLimit,\n applyConstraints,\n frontCamera,\n mainCamera,\n mirrored = true,\n muted = true,\n style = {},\n children,\n onLoadedMetadata,\n onRequest,\n onError,\n onStart,\n onStop,\n ...props\n}: WebcamProps) => {\n const internalVideoRef = useRef<HTMLVideoElement | null>(null);\n const videoRef = externalVideoRef ?? internalVideoRef;\n\n useWebcam(videoRef, {\n stream: externalStream,\n // STREAM PARAMS:\n applyConstraints,\n requestTimeLimit,\n // STREAM HANDLERS:\n onRequest,\n onError,\n onStart,\n onStop,\n // DEFAULT CONSTRAINTS:\n videoConstraints,\n audioConstraints,\n // CUSTOM CONSTRAINTS:\n cameraResolutionMode,\n cameraResolutionType,\n frontCamera,\n mainCamera,\n muted\n });\n\n return (\n <>\n <video\n autoPlay\n playsInline\n ref={videoRef}\n style={{\n ...style,\n ...(mirrored && {\n transform: `${style.transform ? `${style.transform} ` : ''}scaleX(-1)`\n })\n }}\n controls={false}\n muted={muted}\n onLoadedMetadata={(event) => {\n onLoadedMetadata?.(event);\n event.currentTarget.play();\n }}\n {...props}\n />\n {typeof children === 'function'\n ? children({\n element: videoRef.current,\n getCanvas: (options?: GetVideoFrameCanvasOptions) =>\n videoRef.current\n ? getVideoFrameCanvas(videoRef.current, { ...options, mirrored })\n : undefined,\n getSnapshot: (options?: GetWebcamSnapshotOptions) =>\n videoRef.current\n ? getWebcamSnapshot(videoRef.current, { ...options, mirrored })\n : undefined\n })\n : children}\n </>\n );\n};\n"],"mappings":"gMAkDA,IAAa,GAAU,CACrB,IAAK,EACL,OAAQ,EACR,uBACA,uBACA,mBACA,mBACA,mBACA,mBACA,cACA,aACA,WAAW,GACX,QAAQ,GACR,QAAQ,CAAC,EACT,WACA,mBACA,YACA,UACA,UACA,SACA,GAAG,KACc,CACjB,IAAM,GAAA,EAAA,EAAA,OAAA,CAAmD,IAAI,EACvD,EAAW,GAAoB,EAuBrC,OArBA,EAAA,UAAU,EAAU,CAClB,OAAQ,EAER,mBACA,mBAEA,YACA,UACA,UACA,SAEA,mBACA,mBAEA,uBACA,uBACA,cACA,aACA,OACF,CAAC,GAGC,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,QAAD,CACE,SAAA,GACA,YAAA,GACA,IAAK,EACL,MAAO,CACL,GAAG,EACH,GAAI,GAAY,CACd,UAAW,GAAG,EAAM,UAAY,GAAG,EAAM,UAAU,GAAK,GAAG,WAC7D,CACF,EACA,SAAU,GACH,QACP,iBAAmB,GAAU,CAC3B,IAAmB,CAAK,EACxB,EAAM,cAAc,KAAK,CAC3B,EACA,GAAI,CACL,CAAA,EACA,OAAO,GAAa,WACjB,EAAS,CACP,QAAS,EAAS,QAClB,UAAY,GACV,EAAS,SAAA,EAAA,EAAA,oBAAA,CACe,EAAS,QAAS,CAAE,GAAG,EAAS,UAAS,CAAC,EAC9D,IAAA,GACN,YAAc,GACZ,EAAS,SAAA,EAAA,EAAA,kBAAA,CACa,EAAS,QAAS,CAAE,GAAG,EAAS,UAAS,CAAC,EAC5D,IAAA,EACR,CAAC,EACD,CACJ,CAAA,CAAA,CAEN"}
1
+ {"version":3,"file":"Webcam.cjs","names":[],"sources":["../../../../src/components/Webcam/Webcam.tsx"],"sourcesContent":["import type {\n GetVideoFrameCanvasOptions,\n GetWebcamSnapshotOptions,\n MediaTrackConstraintsOptions\n} from '@webcam/core';\nimport type { ComponentProps, ReactNode, RefObject } from 'react';\n\nimport { getVideoFrameCanvas, getWebcamSnapshot } from '@webcam/core';\nimport React, { useRef } from 'react';\n\nimport { useWebcam } from './hooks';\n\nexport type WebcamRenderProps = (options: {\n getCanvas: (options?: GetVideoFrameCanvasOptions) => HTMLCanvasElement | undefined;\n getSnapshot: (options?: GetWebcamSnapshotOptions) => string | undefined;\n element: HTMLVideoElement | null;\n}) => ReactNode;\n\ninterface BaseWebcamProps\n extends Omit<ComponentProps<'video'>, 'children' | 'onError'>, MediaTrackConstraintsOptions {\n audioConstraints?: MediaTrackConstraints;\n children?: ReactNode | WebcamRenderProps;\n mirrored?: boolean;\n ref?: RefObject<HTMLVideoElement>;\n requestTimeLimit?: number;\n videoConstraints?: MediaTrackConstraints;\n onError?: (error: Error) => void;\n onRequest?: () => void;\n onStart?: (stream: MediaStream) => void;\n onStop?: (stream?: MediaStream) => void;\n}\n\ninterface WebcamPropsWithInternalStream extends BaseWebcamProps {\n stream?: undefined;\n}\n\ninterface WebcamPropsWithExternalStream extends BaseWebcamProps {\n stream?: MediaStream;\n}\n\nexport type WebcamProps = WebcamPropsWithExternalStream | WebcamPropsWithInternalStream;\n\n/**\n * Renders the Webcam component and handles the requesting and displaying of the media stream\n *\n * @param {WebcamProps} props - The props for the Webcam component\n * @return {ReactElement} The rendered Webcam component\n */\nexport const Webcam = ({\n ref,\n stream,\n cameraResolutionMode,\n cameraResolutionType,\n videoConstraints,\n audioConstraints,\n requestTimeLimit,\n frontCamera,\n mainCamera,\n mirrored = true,\n muted = true,\n style = {},\n children,\n onLoadedMetadata,\n onRequest,\n onError,\n onStart,\n onStop,\n ...props\n}: WebcamProps) => {\n const internalVideoRef = useRef<HTMLVideoElement | null>(null);\n const videoRef = ref ?? internalVideoRef;\n\n useWebcam(videoRef, {\n stream,\n requestTimeLimit,\n onRequest,\n onError,\n onStart,\n onStop,\n videoConstraints,\n audioConstraints,\n cameraResolutionMode,\n cameraResolutionType,\n frontCamera,\n mainCamera,\n muted\n });\n\n return (\n <>\n <video\n autoPlay\n playsInline\n ref={videoRef}\n style={{\n ...style,\n ...(mirrored && {\n transform: `${style.transform ? `${style.transform} ` : ''}scaleX(-1)`\n })\n }}\n controls={false}\n muted={muted}\n onLoadedMetadata={(event) => {\n onLoadedMetadata?.(event);\n event.currentTarget.play();\n }}\n {...props}\n />\n {typeof children === 'function'\n ? children({\n element: videoRef.current,\n getCanvas: (options?: GetVideoFrameCanvasOptions) =>\n videoRef.current\n ? getVideoFrameCanvas(videoRef.current, { ...options, mirrored })\n : undefined,\n getSnapshot: (options?: GetWebcamSnapshotOptions) =>\n videoRef.current\n ? getWebcamSnapshot(videoRef.current, { ...options, mirrored })\n : undefined\n })\n : children}\n </>\n );\n};\n"],"mappings":"gMAgDA,IAAa,GAAU,CACrB,MACA,SACA,uBACA,uBACA,mBACA,mBACA,mBACA,cACA,aACA,WAAW,GACX,QAAQ,GACR,QAAQ,CAAC,EACT,WACA,mBACA,YACA,UACA,UACA,SACA,GAAG,KACc,CACjB,IAAM,GAAA,EAAA,EAAA,OAAA,CAAmD,IAAI,EACvD,EAAW,GAAO,EAkBxB,OAhBA,EAAA,UAAU,EAAU,CAClB,SACA,mBACA,YACA,UACA,UACA,SACA,mBACA,mBACA,uBACA,uBACA,cACA,aACA,OACF,CAAC,GAGC,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,QAAD,CACE,SAAA,GACA,YAAA,GACA,IAAK,EACL,MAAO,CACL,GAAG,EACH,GAAI,GAAY,CACd,UAAW,GAAG,EAAM,UAAY,GAAG,EAAM,UAAU,GAAK,GAAG,WAC7D,CACF,EACA,SAAU,GACH,QACP,iBAAmB,GAAU,CAC3B,IAAmB,CAAK,EACxB,EAAM,cAAc,KAAK,CAC3B,EACA,GAAI,CACL,CAAA,EACA,OAAO,GAAa,WACjB,EAAS,CACP,QAAS,EAAS,QAClB,UAAY,GACV,EAAS,SAAA,EAAA,EAAA,oBAAA,CACe,EAAS,QAAS,CAAE,GAAG,EAAS,UAAS,CAAC,EAC9D,IAAA,GACN,YAAc,GACZ,EAAS,SAAA,EAAA,EAAA,kBAAA,CACa,EAAS,QAAS,CAAE,GAAG,EAAS,UAAS,CAAC,EAC5D,IAAA,EACR,CAAC,EACD,CACJ,CAAA,CAAA,CAEN"}
@@ -1,2 +1,2 @@
1
- let e=require("@siberiacancode/reactuse"),t=require("@webcam/core"),n=require("react");var r=((...r)=>{let i=(0,e.isTarget)(r[0])?r[0]:void 0,{stream:a,applyConstraints:o,videoConstraints:s,audioConstraints:c,cameraResolutionMode:l,cameraResolutionType:u,frontCamera:d,mainCamera:f,muted:p,onRequest:m,onError:h,onStart:g,onStop:_}=(i?r[1]:r[0])??{},v=(0,e.useRefState)(),y=i??v,b=(0,e.useMediaStream)(y,{immediately:!1,onStart:g,onStop:_,onError:h}),x=()=>(0,t.getMediaStreamConstraints)({constraints:{video:s,audio:c},options:{cameraResolutionMode:l,cameraResolutionType:u,frontCamera:d,mainCamera:f,muted:p}});return(0,e.useMount)(()=>{a||(async()=>{m?.();let e=await x();b.start(e)})()}),(0,e.useDidUpdate)(()=>{a||(async()=>{m?.();let e=await x();if(o&&b.stream){await b.apply(e)||b.start(e);return}b.start(e)})()},[o,s,c,l,u,d,f,p]),(0,n.useEffect)(()=>{if(!a)return;let t=e.isTarget.getElement(y);if(t)return t.srcObject=a,g?.(a),()=>{_?.(a)}},[a,i&&e.isTarget.getRawElement(i),v.state]),(0,e.useUnmount)(()=>{a||b.stop()}),i?{stream:a??b.stream,start:b.start,apply:b.apply,stop:b.stop}:{stream:a??b.stream,start:b.start,apply:b.apply,stop:b.stop,ref:v}});exports.useWebcam=r;
1
+ let e=require("@siberiacancode/reactuse"),t=require("@webcam/core"),n=require("react");var r=((...r)=>{let i=(0,e.isTarget)(r[0])?r[0]:void 0,{stream:a,videoConstraints:o,audioConstraints:s,cameraResolutionMode:c,cameraResolutionType:l,frontCamera:u,mainCamera:d,muted:f,onRequest:p,onError:m,onStart:h,onStop:g}=(i?r[1]:r[0])??{},_=(0,e.useRefState)(),v=i??_,y=(0,e.useMediaStream)(v,{immediately:!1,onStart:h,onStop:g,onError:m}),b=()=>(0,t.getMediaStreamConstraints)({constraints:{video:o,audio:s},options:{cameraResolutionMode:c,cameraResolutionType:l,frontCamera:u,mainCamera:d,muted:f}});return(0,e.useMount)(()=>{a||(async()=>{p?.();let e=await b();y.start(e)})()}),(0,e.useDidUpdate)(()=>{a||(async()=>{p?.();let e=await b();if(y.stream){await y.apply(e)||y.start(e);return}y.start(e)})()},[o,s,c,l,u,d,f]),(0,n.useEffect)(()=>{if(!a)return;let t=e.isTarget.getElement(v);if(t)return t.srcObject=a,h?.(a),()=>{g?.(a)}},[a,i&&e.isTarget.getRawElement(i),_.state]),(0,e.useUnmount)(()=>{a||y.stop()}),i?{stream:a??y.stream,start:y.start,apply:y.apply,stop:y.stop}:{stream:a??y.stream,start:y.start,apply:y.apply,stop:y.stop,ref:_}});exports.useWebcam=r;
2
2
  //# sourceMappingURL=useWebcam.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useWebcam.cjs","names":[],"sources":["../../../../../src/components/Webcam/hooks/useWebcam.ts"],"sourcesContent":["import type { HookTarget, StateRef, UseMediaStreamOptions } from '@siberiacancode/reactuse';\nimport type { MediaTrackConstraintsOptions } from '@webcam/core';\n\nimport {\n isTarget,\n useDidUpdate,\n useMediaStream,\n useMount,\n useRefState,\n useUnmount\n} from '@siberiacancode/reactuse';\nimport { getMediaStreamConstraints } from '@webcam/core';\nimport { useEffect } from 'react';\n\nexport interface UseWebcamParams extends MediaTrackConstraintsOptions {\n applyConstraints?: boolean;\n audioConstraints?: MediaTrackConstraints;\n requestTimeLimit?: number;\n stream?: MediaStream;\n videoConstraints?: MediaTrackConstraints;\n onError?: (error: Error) => void;\n onRequest?: () => void;\n onStart?: (stream: MediaStream) => void;\n onStop?: (stream?: MediaStream) => void;\n}\n\nexport interface UseWebcamReturn {\n stream?: MediaStream;\n apply: (constraints: MediaStreamConstraints) => Promise<boolean>;\n start: (constraints?: MediaStreamConstraints) => Promise<MediaStream | undefined>;\n stop: () => void;\n}\n\nexport interface UseWebcam {\n (target: HookTarget, params?: UseWebcamParams): UseWebcamReturn;\n\n (params?: UseWebcamParams): UseWebcamReturn & {\n ref: StateRef<HTMLVideoElement>;\n };\n}\n\n/**\n * @name useWebcam\n * @description - Hook that manages a webcam media stream for a video element\n *\n * @overload\n * @param {HookTarget} target The target video element the stream will be attached to\n * @param {UseWebcamParams} [params] The webcam parameters\n * @returns {UseWebcamReturn} An object containing the stream and controls\n *\n * @overload\n * @param {UseWebcamParams} [params] The webcam parameters\n * @returns {UseWebcamReturn & { ref: StateRef<HTMLVideoElement> }} An object containing the stream, controls and ref\n */\nexport const useWebcam = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = ((target ? params[1] : params[0]) as UseWebcamParams) ?? {};\n\n const {\n stream: externalStream,\n applyConstraints,\n videoConstraints,\n audioConstraints,\n cameraResolutionMode,\n cameraResolutionType,\n frontCamera,\n mainCamera,\n muted,\n onRequest,\n onError,\n onStart,\n onStop\n } = options;\n\n const internalRef = useRefState<HTMLVideoElement>();\n const resolvedTarget = (target ?? internalRef) as HookTarget;\n\n const mediaStream = useMediaStream(resolvedTarget, {\n immediately: false,\n onStart,\n onStop,\n onError\n } satisfies UseMediaStreamOptions);\n\n const createConstraints = () =>\n getMediaStreamConstraints({\n constraints: {\n video: videoConstraints,\n audio: audioConstraints\n },\n options: {\n cameraResolutionMode,\n cameraResolutionType,\n frontCamera,\n mainCamera,\n muted\n }\n });\n\n useMount(() => {\n if (externalStream) return;\n const run = async () => {\n onRequest?.();\n const constraints = await createConstraints();\n\n mediaStream.start(constraints);\n };\n\n run();\n });\n\n useDidUpdate(() => {\n if (externalStream) return;\n\n const run = async () => {\n onRequest?.();\n const constraints = await createConstraints();\n\n if (applyConstraints && mediaStream.stream) {\n const ok = await mediaStream.apply(constraints);\n if (!ok) mediaStream.start(constraints);\n return;\n }\n\n mediaStream.start(constraints);\n };\n\n run();\n }, [\n applyConstraints,\n videoConstraints,\n audioConstraints,\n cameraResolutionMode,\n cameraResolutionType,\n frontCamera,\n mainCamera,\n muted\n ]);\n\n useEffect(() => {\n if (!externalStream) return;\n\n const element = isTarget.getElement(resolvedTarget) as HTMLVideoElement | null;\n if (!element) return;\n\n element.srcObject = externalStream;\n onStart?.(externalStream);\n\n return () => {\n onStop?.(externalStream);\n };\n }, [externalStream, target && isTarget.getRawElement(target), internalRef.state]);\n\n useUnmount(() => {\n if (externalStream) return;\n mediaStream.stop();\n });\n\n if (target)\n return {\n stream: externalStream ?? mediaStream.stream,\n start: mediaStream.start,\n apply: mediaStream.apply,\n stop: mediaStream.stop\n };\n return {\n stream: externalStream ?? mediaStream.stream,\n start: mediaStream.start,\n apply: mediaStream.apply,\n stop: mediaStream.stop,\n ref: internalRef\n };\n}) as UseWebcam;\n"],"mappings":"uFAsDA,IAAa,IAAc,GAAG,IAAkB,CAC9C,IAAM,GAAA,EAAA,EAAA,SAAA,CAAmB,EAAO,EAAE,EAAI,EAAO,GAAK,IAAA,GAG5C,CACJ,OAAQ,EACR,mBACA,mBACA,mBACA,uBACA,uBACA,cACA,aACA,QACA,YACA,UACA,UACA,WAfgB,EAAS,EAAO,GAAK,EAAO,KAA2B,CAAC,EAkBpE,GAAA,EAAA,EAAA,YAAA,CAA4C,EAC5C,EAAkB,GAAU,EAE5B,GAAA,EAAA,EAAA,eAAA,CAA6B,EAAgB,CACjD,YAAa,GACb,UACA,SACA,SACF,CAAiC,EAE3B,OAAA,EAAA,EAAA,0BAAA,CACsB,CACxB,YAAa,CACX,MAAO,EACP,MAAO,CACT,EACA,QAAS,CACP,uBACA,uBACA,cACA,aACA,OACF,CACF,CAAC,EAoEH,OAlEA,EAAA,EAAA,SAAA,KAAe,CACT,IAQJ,SAPwB,CACtB,IAAY,EACZ,IAAM,EAAc,MAAM,EAAkB,EAE5C,EAAY,MAAM,CAAW,CAC/B,EAEA,CAAI,CACN,CAAC,GAED,EAAA,EAAA,aAAA,KAAmB,CACb,IAeJ,SAbwB,CACtB,IAAY,EACZ,IAAM,EAAc,MAAM,EAAkB,EAE5C,GAAI,GAAoB,EAAY,OAAQ,CAErC,MADY,EAAY,MAAM,CAAW,GACrC,EAAY,MAAM,CAAW,EACtC,MACF,CAEA,EAAY,MAAM,CAAW,CAC/B,EAEA,CAAI,CACN,EAAG,CACD,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACF,CAAC,GAED,EAAA,EAAA,UAAA,KAAgB,CACd,GAAI,CAAC,EAAgB,OAErB,IAAM,EAAU,EAAA,SAAS,WAAW,CAAc,EAC7C,KAKL,MAHA,GAAQ,UAAY,EACpB,IAAU,CAAc,MAEX,CACX,IAAS,CAAc,CACzB,CACF,EAAG,CAAC,EAAgB,GAAU,EAAA,SAAS,cAAc,CAAM,EAAG,EAAY,KAAK,CAAC,GAEhF,EAAA,EAAA,WAAA,KAAiB,CACX,GACJ,EAAY,KAAK,CACnB,CAAC,EAEG,EACK,CACL,OAAQ,GAAkB,EAAY,OACtC,MAAO,EAAY,MACnB,MAAO,EAAY,MACnB,KAAM,EAAY,IACpB,EACK,CACL,OAAQ,GAAkB,EAAY,OACtC,MAAO,EAAY,MACnB,MAAO,EAAY,MACnB,KAAM,EAAY,KAClB,IAAK,CACP,CACF"}
1
+ {"version":3,"file":"useWebcam.cjs","names":[],"sources":["../../../../../src/components/Webcam/hooks/useWebcam.ts"],"sourcesContent":["import type { HookTarget, StateRef, UseMediaStreamOptions } from '@siberiacancode/reactuse';\nimport type { MediaTrackConstraintsOptions } from '@webcam/core';\n\nimport {\n isTarget,\n useDidUpdate,\n useMediaStream,\n useMount,\n useRefState,\n useUnmount\n} from '@siberiacancode/reactuse';\nimport { getMediaStreamConstraints } from '@webcam/core';\nimport { useEffect } from 'react';\n\nexport interface UseWebcamParams extends MediaTrackConstraintsOptions {\n audioConstraints?: MediaTrackConstraints;\n requestTimeLimit?: number;\n stream?: MediaStream;\n videoConstraints?: MediaTrackConstraints;\n onError?: (error: Error) => void;\n onRequest?: () => void;\n onStart?: (stream: MediaStream) => void;\n onStop?: (stream?: MediaStream) => void;\n}\n\nexport interface UseWebcamReturn {\n stream?: MediaStream;\n apply: (constraints: MediaStreamConstraints) => Promise<boolean>;\n start: (constraints?: MediaStreamConstraints) => Promise<MediaStream | undefined>;\n stop: () => void;\n}\n\nexport interface UseWebcam {\n (target: HookTarget, params?: UseWebcamParams): UseWebcamReturn;\n\n (params?: UseWebcamParams): UseWebcamReturn & {\n ref: StateRef<HTMLVideoElement>;\n };\n}\n\n/**\n * @name useWebcam\n * @description - Hook that manages a webcam media stream for a video element\n *\n * @overload\n * @param {HookTarget} target The target video element the stream will be attached to\n * @param {UseWebcamParams} [params] The webcam parameters\n * @returns {UseWebcamReturn} An object containing the stream and controls\n *\n * @overload\n * @param {UseWebcamParams} [params] The webcam parameters\n * @returns {UseWebcamReturn & { ref: StateRef<HTMLVideoElement> }} An object containing the stream, controls and ref\n */\nexport const useWebcam = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = ((target ? params[1] : params[0]) as UseWebcamParams) ?? {};\n\n const {\n stream: externalStream,\n videoConstraints,\n audioConstraints,\n cameraResolutionMode,\n cameraResolutionType,\n frontCamera,\n mainCamera,\n muted,\n onRequest,\n onError,\n onStart,\n onStop\n } = options;\n\n const internalRef = useRefState<HTMLVideoElement>();\n const resolvedRef = (target ?? internalRef) as HookTarget;\n\n const mediaStream = useMediaStream(resolvedRef, {\n immediately: false,\n onStart,\n onStop,\n onError\n } satisfies UseMediaStreamOptions);\n\n const createConstraints = () =>\n getMediaStreamConstraints({\n constraints: {\n video: videoConstraints,\n audio: audioConstraints\n },\n options: {\n cameraResolutionMode,\n cameraResolutionType,\n frontCamera,\n mainCamera,\n muted\n }\n });\n\n useMount(() => {\n if (externalStream) return;\n const run = async () => {\n onRequest?.();\n const constraints = await createConstraints();\n mediaStream.start(constraints);\n };\n\n run();\n });\n\n useDidUpdate(() => {\n if (externalStream) return;\n\n const run = async () => {\n onRequest?.();\n const constraints = await createConstraints();\n\n if (mediaStream.stream) {\n const ok = await mediaStream.apply(constraints);\n if (!ok) mediaStream.start(constraints);\n return;\n }\n\n mediaStream.start(constraints);\n };\n\n run();\n }, [\n videoConstraints,\n audioConstraints,\n cameraResolutionMode,\n cameraResolutionType,\n frontCamera,\n mainCamera,\n muted\n ]);\n\n useEffect(() => {\n if (!externalStream) return;\n\n const element = isTarget.getElement(resolvedRef) as HTMLVideoElement | null;\n if (!element) return;\n\n element.srcObject = externalStream;\n onStart?.(externalStream);\n\n return () => {\n onStop?.(externalStream);\n };\n }, [externalStream, target && isTarget.getRawElement(target), internalRef.state]);\n\n useUnmount(() => {\n if (externalStream) return;\n mediaStream.stop();\n });\n\n if (target)\n return {\n stream: externalStream ?? mediaStream.stream,\n start: mediaStream.start,\n apply: mediaStream.apply,\n stop: mediaStream.stop\n };\n return {\n stream: externalStream ?? mediaStream.stream,\n start: mediaStream.start,\n apply: mediaStream.apply,\n stop: mediaStream.stop,\n ref: internalRef\n };\n}) as UseWebcam;\n"],"mappings":"uFAqDA,IAAa,IAAc,GAAG,IAAkB,CAC9C,IAAM,GAAA,EAAA,EAAA,SAAA,CAAmB,EAAO,EAAE,EAAI,EAAO,GAAK,IAAA,GAG5C,CACJ,OAAQ,EACR,mBACA,mBACA,uBACA,uBACA,cACA,aACA,QACA,YACA,UACA,UACA,WAdgB,EAAS,EAAO,GAAK,EAAO,KAA2B,CAAC,EAiBpE,GAAA,EAAA,EAAA,YAAA,CAA4C,EAC5C,EAAe,GAAU,EAEzB,GAAA,EAAA,EAAA,eAAA,CAA6B,EAAa,CAC9C,YAAa,GACb,UACA,SACA,SACF,CAAiC,EAE3B,OAAA,EAAA,EAAA,0BAAA,CACsB,CACxB,YAAa,CACX,MAAO,EACP,MAAO,CACT,EACA,QAAS,CACP,uBACA,uBACA,cACA,aACA,OACF,CACF,CAAC,EAkEH,OAhEA,EAAA,EAAA,SAAA,KAAe,CACT,IAOJ,SANwB,CACtB,IAAY,EACZ,IAAM,EAAc,MAAM,EAAkB,EAC5C,EAAY,MAAM,CAAW,CAC/B,EAEA,CAAI,CACN,CAAC,GAED,EAAA,EAAA,aAAA,KAAmB,CACb,IAeJ,SAbwB,CACtB,IAAY,EACZ,IAAM,EAAc,MAAM,EAAkB,EAE5C,GAAI,EAAY,OAAQ,CAEjB,MADY,EAAY,MAAM,CAAW,GACrC,EAAY,MAAM,CAAW,EACtC,MACF,CAEA,EAAY,MAAM,CAAW,CAC/B,EAEA,CAAI,CACN,EAAG,CACD,EACA,EACA,EACA,EACA,EACA,EACA,CACF,CAAC,GAED,EAAA,EAAA,UAAA,KAAgB,CACd,GAAI,CAAC,EAAgB,OAErB,IAAM,EAAU,EAAA,SAAS,WAAW,CAAW,EAC1C,KAKL,MAHA,GAAQ,UAAY,EACpB,IAAU,CAAc,MAEX,CACX,IAAS,CAAc,CACzB,CACF,EAAG,CAAC,EAAgB,GAAU,EAAA,SAAS,cAAc,CAAM,EAAG,EAAY,KAAK,CAAC,GAEhF,EAAA,EAAA,WAAA,KAAiB,CACX,GACJ,EAAY,KAAK,CACnB,CAAC,EAEG,EACK,CACL,OAAQ,GAAkB,EAAY,OACtC,MAAO,EAAY,MACnB,MAAO,EAAY,MACnB,KAAM,EAAY,IACpB,EACK,CACL,OAAQ,GAAkB,EAAY,OACtC,MAAO,EAAY,MACnB,MAAO,EAAY,MACnB,KAAM,EAAY,KAClB,IAAK,CACP,CACF"}
@@ -6,10 +6,8 @@ export type WebcamRenderProps = (options: {
6
6
  element: HTMLVideoElement | null;
7
7
  }) => ReactNode;
8
8
  interface BaseWebcamProps extends Omit<ComponentProps<'video'>, 'children' | 'onError'>, MediaTrackConstraintsOptions {
9
- applyConstraints?: boolean;
10
9
  audioConstraints?: MediaTrackConstraints;
11
10
  children?: ReactNode | WebcamRenderProps;
12
- innerRef?: RefObject<HTMLVideoElement>;
13
11
  mirrored?: boolean;
14
12
  ref?: RefObject<HTMLVideoElement>;
15
13
  requestTimeLimit?: number;
@@ -32,5 +30,5 @@ export type WebcamProps = WebcamPropsWithExternalStream | WebcamPropsWithInterna
32
30
  * @param {WebcamProps} props - The props for the Webcam component
33
31
  * @return {ReactElement} The rendered Webcam component
34
32
  */
35
- export declare const Webcam: ({ ref: externalVideoRef, stream: externalStream, cameraResolutionMode, cameraResolutionType, videoConstraints, audioConstraints, requestTimeLimit, applyConstraints, frontCamera, mainCamera, mirrored, muted, style, children, onLoadedMetadata, onRequest, onError, onStart, onStop, ...props }: WebcamProps) => React.JSX.Element;
33
+ export declare const Webcam: ({ ref, stream, cameraResolutionMode, cameraResolutionType, videoConstraints, audioConstraints, requestTimeLimit, frontCamera, mainCamera, mirrored, muted, style, children, onLoadedMetadata, onRequest, onError, onStart, onStop, ...props }: WebcamProps) => React.JSX.Element;
36
34
  export {};
@@ -1,7 +1,6 @@
1
1
  import { HookTarget, StateRef } from '@siberiacancode/reactuse';
2
2
  import { MediaTrackConstraintsOptions } from '@webcam/core';
3
3
  export interface UseWebcamParams extends MediaTrackConstraintsOptions {
4
- applyConstraints?: boolean;
5
4
  audioConstraints?: MediaTrackConstraints;
6
5
  requestTimeLimit?: number;
7
6
  stream?: MediaStream;
@@ -3,48 +3,47 @@ import { getVideoFrameCanvas as t, getWebcamSnapshot as n } from "@webcam/core";
3
3
  import { useRef as r } from "react";
4
4
  import { Fragment as i, jsx as a, jsxs as o } from "react/jsx-runtime";
5
5
  //#region src/components/Webcam/Webcam.tsx
6
- var s = ({ ref: s, stream: c, cameraResolutionMode: l, cameraResolutionType: u, videoConstraints: d, audioConstraints: f, requestTimeLimit: p, applyConstraints: m, frontCamera: h, mainCamera: g, mirrored: _ = !0, muted: v = !0, style: y = {}, children: b, onLoadedMetadata: x, onRequest: S, onError: C, onStart: w, onStop: T, ...E }) => {
7
- let D = r(null), O = s ?? D;
8
- return e(O, {
6
+ var s = ({ ref: s, stream: c, cameraResolutionMode: l, cameraResolutionType: u, videoConstraints: d, audioConstraints: f, requestTimeLimit: p, frontCamera: m, mainCamera: h, mirrored: g = !0, muted: _ = !0, style: v = {}, children: y, onLoadedMetadata: b, onRequest: x, onError: S, onStart: C, onStop: w, ...T }) => {
7
+ let E = r(null), D = s ?? E;
8
+ return e(D, {
9
9
  stream: c,
10
- applyConstraints: m,
11
10
  requestTimeLimit: p,
12
- onRequest: S,
13
- onError: C,
14
- onStart: w,
15
- onStop: T,
11
+ onRequest: x,
12
+ onError: S,
13
+ onStart: C,
14
+ onStop: w,
16
15
  videoConstraints: d,
17
16
  audioConstraints: f,
18
17
  cameraResolutionMode: l,
19
18
  cameraResolutionType: u,
20
- frontCamera: h,
21
- mainCamera: g,
22
- muted: v
19
+ frontCamera: m,
20
+ mainCamera: h,
21
+ muted: _
23
22
  }), /* @__PURE__ */ o(i, { children: [/* @__PURE__ */ a("video", {
24
23
  autoPlay: !0,
25
24
  playsInline: !0,
26
- ref: O,
25
+ ref: D,
27
26
  style: {
28
- ...y,
29
- ..._ && { transform: `${y.transform ? `${y.transform} ` : ""}scaleX(-1)` }
27
+ ...v,
28
+ ...g && { transform: `${v.transform ? `${v.transform} ` : ""}scaleX(-1)` }
30
29
  },
31
30
  controls: !1,
32
- muted: v,
31
+ muted: _,
33
32
  onLoadedMetadata: (e) => {
34
- x?.(e), e.currentTarget.play();
33
+ b?.(e), e.currentTarget.play();
35
34
  },
36
- ...E
37
- }), typeof b == "function" ? b({
38
- element: O.current,
39
- getCanvas: (e) => O.current ? t(O.current, {
35
+ ...T
36
+ }), typeof y == "function" ? y({
37
+ element: D.current,
38
+ getCanvas: (e) => D.current ? t(D.current, {
40
39
  ...e,
41
- mirrored: _
40
+ mirrored: g
42
41
  }) : void 0,
43
- getSnapshot: (e) => O.current ? n(O.current, {
42
+ getSnapshot: (e) => D.current ? n(D.current, {
44
43
  ...e,
45
- mirrored: _
44
+ mirrored: g
46
45
  }) : void 0
47
- }) : b] });
46
+ }) : y] });
48
47
  };
49
48
  //#endregion
50
49
  export { s as Webcam };
@@ -1 +1 @@
1
- {"version":3,"file":"Webcam.mjs","names":[],"sources":["../../../../src/components/Webcam/Webcam.tsx"],"sourcesContent":["import type {\n GetVideoFrameCanvasOptions,\n GetWebcamSnapshotOptions,\n MediaTrackConstraintsOptions\n} from '@webcam/core';\nimport type { ComponentProps, ReactNode, RefObject } from 'react';\n\nimport { getVideoFrameCanvas, getWebcamSnapshot } from '@webcam/core';\nimport React, { useRef } from 'react';\n\nimport { useWebcam } from './hooks';\n\nexport type WebcamRenderProps = (options: {\n getCanvas: (options?: GetVideoFrameCanvasOptions) => HTMLCanvasElement | undefined;\n getSnapshot: (options?: GetWebcamSnapshotOptions) => string | undefined;\n element: HTMLVideoElement | null;\n}) => ReactNode;\n\ninterface BaseWebcamProps\n extends Omit<ComponentProps<'video'>, 'children' | 'onError'>, MediaTrackConstraintsOptions {\n applyConstraints?: boolean;\n audioConstraints?: MediaTrackConstraints;\n children?: ReactNode | WebcamRenderProps;\n innerRef?: RefObject<HTMLVideoElement>;\n mirrored?: boolean;\n ref?: RefObject<HTMLVideoElement>;\n requestTimeLimit?: number;\n videoConstraints?: MediaTrackConstraints;\n onError?: (error: Error) => void;\n onRequest?: () => void;\n onStart?: (stream: MediaStream) => void;\n onStop?: (stream?: MediaStream) => void;\n}\n\ninterface WebcamPropsWithInternalStream extends BaseWebcamProps {\n stream?: undefined;\n}\n\ninterface WebcamPropsWithExternalStream extends BaseWebcamProps {\n stream?: MediaStream;\n}\n\nexport type WebcamProps = WebcamPropsWithExternalStream | WebcamPropsWithInternalStream;\n\n/**\n * Renders the Webcam component and handles the requesting and displaying of the media stream\n *\n * @param {WebcamProps} props - The props for the Webcam component\n * @return {ReactElement} The rendered Webcam component\n */\nexport const Webcam = ({\n ref: externalVideoRef,\n stream: externalStream,\n cameraResolutionMode,\n cameraResolutionType,\n videoConstraints,\n audioConstraints,\n requestTimeLimit,\n applyConstraints,\n frontCamera,\n mainCamera,\n mirrored = true,\n muted = true,\n style = {},\n children,\n onLoadedMetadata,\n onRequest,\n onError,\n onStart,\n onStop,\n ...props\n}: WebcamProps) => {\n const internalVideoRef = useRef<HTMLVideoElement | null>(null);\n const videoRef = externalVideoRef ?? internalVideoRef;\n\n useWebcam(videoRef, {\n stream: externalStream,\n // STREAM PARAMS:\n applyConstraints,\n requestTimeLimit,\n // STREAM HANDLERS:\n onRequest,\n onError,\n onStart,\n onStop,\n // DEFAULT CONSTRAINTS:\n videoConstraints,\n audioConstraints,\n // CUSTOM CONSTRAINTS:\n cameraResolutionMode,\n cameraResolutionType,\n frontCamera,\n mainCamera,\n muted\n });\n\n return (\n <>\n <video\n autoPlay\n playsInline\n ref={videoRef}\n style={{\n ...style,\n ...(mirrored && {\n transform: `${style.transform ? `${style.transform} ` : ''}scaleX(-1)`\n })\n }}\n controls={false}\n muted={muted}\n onLoadedMetadata={(event) => {\n onLoadedMetadata?.(event);\n event.currentTarget.play();\n }}\n {...props}\n />\n {typeof children === 'function'\n ? children({\n element: videoRef.current,\n getCanvas: (options?: GetVideoFrameCanvasOptions) =>\n videoRef.current\n ? getVideoFrameCanvas(videoRef.current, { ...options, mirrored })\n : undefined,\n getSnapshot: (options?: GetWebcamSnapshotOptions) =>\n videoRef.current\n ? getWebcamSnapshot(videoRef.current, { ...options, mirrored })\n : undefined\n })\n : children}\n </>\n );\n};\n"],"mappings":";;;;;AAkDA,IAAa,KAAU,EACrB,KAAK,GACL,QAAQ,GACR,yBACA,yBACA,qBACA,qBACA,qBACA,qBACA,gBACA,eACA,cAAW,IACX,WAAQ,IACR,WAAQ,CAAC,GACT,aACA,qBACA,cACA,YACA,YACA,WACA,GAAG,QACc;CACjB,IAAM,IAAmB,EAAgC,IAAI,GACvD,IAAW,KAAoB;CAuBrC,OArBA,EAAU,GAAU;EAClB,QAAQ;EAER;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EACA;CACF,CAAC,GAGC,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,SAAD;EACE,UAAA;EACA,aAAA;EACA,KAAK;EACL,OAAO;GACL,GAAG;GACH,GAAI,KAAY,EACd,WAAW,GAAG,EAAM,YAAY,GAAG,EAAM,UAAU,KAAK,GAAG,YAC7D;EACF;EACA,UAAU;EACH;EACP,mBAAmB,MAAU;GAE3B,AADA,IAAmB,CAAK,GACxB,EAAM,cAAc,KAAK;EAC3B;EACA,GAAI;CACL,CAAA,GACA,OAAO,KAAa,aACjB,EAAS;EACP,SAAS,EAAS;EAClB,YAAY,MACV,EAAS,UACL,EAAoB,EAAS,SAAS;GAAE,GAAG;GAAS;EAAS,CAAC,IAC9D,KAAA;EACN,cAAc,MACZ,EAAS,UACL,EAAkB,EAAS,SAAS;GAAE,GAAG;GAAS;EAAS,CAAC,IAC5D,KAAA;CACR,CAAC,IACD,CACJ,EAAA,CAAA;AAEN"}
1
+ {"version":3,"file":"Webcam.mjs","names":[],"sources":["../../../../src/components/Webcam/Webcam.tsx"],"sourcesContent":["import type {\n GetVideoFrameCanvasOptions,\n GetWebcamSnapshotOptions,\n MediaTrackConstraintsOptions\n} from '@webcam/core';\nimport type { ComponentProps, ReactNode, RefObject } from 'react';\n\nimport { getVideoFrameCanvas, getWebcamSnapshot } from '@webcam/core';\nimport React, { useRef } from 'react';\n\nimport { useWebcam } from './hooks';\n\nexport type WebcamRenderProps = (options: {\n getCanvas: (options?: GetVideoFrameCanvasOptions) => HTMLCanvasElement | undefined;\n getSnapshot: (options?: GetWebcamSnapshotOptions) => string | undefined;\n element: HTMLVideoElement | null;\n}) => ReactNode;\n\ninterface BaseWebcamProps\n extends Omit<ComponentProps<'video'>, 'children' | 'onError'>, MediaTrackConstraintsOptions {\n audioConstraints?: MediaTrackConstraints;\n children?: ReactNode | WebcamRenderProps;\n mirrored?: boolean;\n ref?: RefObject<HTMLVideoElement>;\n requestTimeLimit?: number;\n videoConstraints?: MediaTrackConstraints;\n onError?: (error: Error) => void;\n onRequest?: () => void;\n onStart?: (stream: MediaStream) => void;\n onStop?: (stream?: MediaStream) => void;\n}\n\ninterface WebcamPropsWithInternalStream extends BaseWebcamProps {\n stream?: undefined;\n}\n\ninterface WebcamPropsWithExternalStream extends BaseWebcamProps {\n stream?: MediaStream;\n}\n\nexport type WebcamProps = WebcamPropsWithExternalStream | WebcamPropsWithInternalStream;\n\n/**\n * Renders the Webcam component and handles the requesting and displaying of the media stream\n *\n * @param {WebcamProps} props - The props for the Webcam component\n * @return {ReactElement} The rendered Webcam component\n */\nexport const Webcam = ({\n ref,\n stream,\n cameraResolutionMode,\n cameraResolutionType,\n videoConstraints,\n audioConstraints,\n requestTimeLimit,\n frontCamera,\n mainCamera,\n mirrored = true,\n muted = true,\n style = {},\n children,\n onLoadedMetadata,\n onRequest,\n onError,\n onStart,\n onStop,\n ...props\n}: WebcamProps) => {\n const internalVideoRef = useRef<HTMLVideoElement | null>(null);\n const videoRef = ref ?? internalVideoRef;\n\n useWebcam(videoRef, {\n stream,\n requestTimeLimit,\n onRequest,\n onError,\n onStart,\n onStop,\n videoConstraints,\n audioConstraints,\n cameraResolutionMode,\n cameraResolutionType,\n frontCamera,\n mainCamera,\n muted\n });\n\n return (\n <>\n <video\n autoPlay\n playsInline\n ref={videoRef}\n style={{\n ...style,\n ...(mirrored && {\n transform: `${style.transform ? `${style.transform} ` : ''}scaleX(-1)`\n })\n }}\n controls={false}\n muted={muted}\n onLoadedMetadata={(event) => {\n onLoadedMetadata?.(event);\n event.currentTarget.play();\n }}\n {...props}\n />\n {typeof children === 'function'\n ? children({\n element: videoRef.current,\n getCanvas: (options?: GetVideoFrameCanvasOptions) =>\n videoRef.current\n ? getVideoFrameCanvas(videoRef.current, { ...options, mirrored })\n : undefined,\n getSnapshot: (options?: GetWebcamSnapshotOptions) =>\n videoRef.current\n ? getWebcamSnapshot(videoRef.current, { ...options, mirrored })\n : undefined\n })\n : children}\n </>\n );\n};\n"],"mappings":";;;;;AAgDA,IAAa,KAAU,EACrB,QACA,WACA,yBACA,yBACA,qBACA,qBACA,qBACA,gBACA,eACA,cAAW,IACX,WAAQ,IACR,WAAQ,CAAC,GACT,aACA,qBACA,cACA,YACA,YACA,WACA,GAAG,QACc;CACjB,IAAM,IAAmB,EAAgC,IAAI,GACvD,IAAW,KAAO;CAkBxB,OAhBA,EAAU,GAAU;EAClB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC,GAGC,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,SAAD;EACE,UAAA;EACA,aAAA;EACA,KAAK;EACL,OAAO;GACL,GAAG;GACH,GAAI,KAAY,EACd,WAAW,GAAG,EAAM,YAAY,GAAG,EAAM,UAAU,KAAK,GAAG,YAC7D;EACF;EACA,UAAU;EACH;EACP,mBAAmB,MAAU;GAE3B,AADA,IAAmB,CAAK,GACxB,EAAM,cAAc,KAAK;EAC3B;EACA,GAAI;CACL,CAAA,GACA,OAAO,KAAa,aACjB,EAAS;EACP,SAAS,EAAS;EAClB,YAAY,MACV,EAAS,UACL,EAAoB,EAAS,SAAS;GAAE,GAAG;GAAS;EAAS,CAAC,IAC9D,KAAA;EACN,cAAc,MACZ,EAAS,UACL,EAAkB,EAAS,SAAS;GAAE,GAAG;GAAS;EAAS,CAAC,IAC5D,KAAA;CACR,CAAC,IACD,CACJ,EAAA,CAAA;AAEN"}
@@ -3,39 +3,39 @@ import { getMediaStreamConstraints as o } from "@webcam/core";
3
3
  import { useEffect as s } from "react";
4
4
  //#region src/components/Webcam/hooks/useWebcam.ts
5
5
  var c = ((...c) => {
6
- let l = e(c[0]) ? c[0] : void 0, { stream: u, applyConstraints: d, videoConstraints: f, audioConstraints: p, cameraResolutionMode: m, cameraResolutionType: h, frontCamera: g, mainCamera: _, muted: v, onRequest: y, onError: b, onStart: x, onStop: S } = (l ? c[1] : c[0]) ?? {}, C = i(), w = l ?? C, T = n(w, {
6
+ let l = e(c[0]) ? c[0] : void 0, { stream: u, videoConstraints: d, audioConstraints: f, cameraResolutionMode: p, cameraResolutionType: m, frontCamera: h, mainCamera: g, muted: _, onRequest: v, onError: y, onStart: b, onStop: x } = (l ? c[1] : c[0]) ?? {}, S = i(), C = l ?? S, w = n(C, {
7
7
  immediately: !1,
8
- onStart: x,
9
- onStop: S,
10
- onError: b
11
- }), E = () => o({
8
+ onStart: b,
9
+ onStop: x,
10
+ onError: y
11
+ }), T = () => o({
12
12
  constraints: {
13
- video: f,
14
- audio: p
13
+ video: d,
14
+ audio: f
15
15
  },
16
16
  options: {
17
- cameraResolutionMode: m,
18
- cameraResolutionType: h,
19
- frontCamera: g,
20
- mainCamera: _,
21
- muted: v
17
+ cameraResolutionMode: p,
18
+ cameraResolutionType: m,
19
+ frontCamera: h,
20
+ mainCamera: g,
21
+ muted: _
22
22
  }
23
23
  });
24
24
  return r(() => {
25
25
  u || (async () => {
26
- y?.();
27
- let e = await E();
28
- T.start(e);
26
+ v?.();
27
+ let e = await T();
28
+ w.start(e);
29
29
  })();
30
30
  }), t(() => {
31
31
  u || (async () => {
32
- y?.();
33
- let e = await E();
34
- if (d && T.stream) {
35
- await T.apply(e) || T.start(e);
32
+ v?.();
33
+ let e = await T();
34
+ if (w.stream) {
35
+ await w.apply(e) || w.start(e);
36
36
  return;
37
37
  }
38
- T.start(e);
38
+ w.start(e);
39
39
  })();
40
40
  }, [
41
41
  d,
@@ -44,31 +44,30 @@ var c = ((...c) => {
44
44
  m,
45
45
  h,
46
46
  g,
47
- _,
48
- v
47
+ _
49
48
  ]), s(() => {
50
49
  if (!u) return;
51
- let t = e.getElement(w);
52
- if (t) return t.srcObject = u, x?.(u), () => {
53
- S?.(u);
50
+ let t = e.getElement(C);
51
+ if (t) return t.srcObject = u, b?.(u), () => {
52
+ x?.(u);
54
53
  };
55
54
  }, [
56
55
  u,
57
56
  l && e.getRawElement(l),
58
- C.state
57
+ S.state
59
58
  ]), a(() => {
60
- u || T.stop();
59
+ u || w.stop();
61
60
  }), l ? {
62
- stream: u ?? T.stream,
63
- start: T.start,
64
- apply: T.apply,
65
- stop: T.stop
61
+ stream: u ?? w.stream,
62
+ start: w.start,
63
+ apply: w.apply,
64
+ stop: w.stop
66
65
  } : {
67
- stream: u ?? T.stream,
68
- start: T.start,
69
- apply: T.apply,
70
- stop: T.stop,
71
- ref: C
66
+ stream: u ?? w.stream,
67
+ start: w.start,
68
+ apply: w.apply,
69
+ stop: w.stop,
70
+ ref: S
72
71
  };
73
72
  });
74
73
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"useWebcam.mjs","names":[],"sources":["../../../../../src/components/Webcam/hooks/useWebcam.ts"],"sourcesContent":["import type { HookTarget, StateRef, UseMediaStreamOptions } from '@siberiacancode/reactuse';\nimport type { MediaTrackConstraintsOptions } from '@webcam/core';\n\nimport {\n isTarget,\n useDidUpdate,\n useMediaStream,\n useMount,\n useRefState,\n useUnmount\n} from '@siberiacancode/reactuse';\nimport { getMediaStreamConstraints } from '@webcam/core';\nimport { useEffect } from 'react';\n\nexport interface UseWebcamParams extends MediaTrackConstraintsOptions {\n applyConstraints?: boolean;\n audioConstraints?: MediaTrackConstraints;\n requestTimeLimit?: number;\n stream?: MediaStream;\n videoConstraints?: MediaTrackConstraints;\n onError?: (error: Error) => void;\n onRequest?: () => void;\n onStart?: (stream: MediaStream) => void;\n onStop?: (stream?: MediaStream) => void;\n}\n\nexport interface UseWebcamReturn {\n stream?: MediaStream;\n apply: (constraints: MediaStreamConstraints) => Promise<boolean>;\n start: (constraints?: MediaStreamConstraints) => Promise<MediaStream | undefined>;\n stop: () => void;\n}\n\nexport interface UseWebcam {\n (target: HookTarget, params?: UseWebcamParams): UseWebcamReturn;\n\n (params?: UseWebcamParams): UseWebcamReturn & {\n ref: StateRef<HTMLVideoElement>;\n };\n}\n\n/**\n * @name useWebcam\n * @description - Hook that manages a webcam media stream for a video element\n *\n * @overload\n * @param {HookTarget} target The target video element the stream will be attached to\n * @param {UseWebcamParams} [params] The webcam parameters\n * @returns {UseWebcamReturn} An object containing the stream and controls\n *\n * @overload\n * @param {UseWebcamParams} [params] The webcam parameters\n * @returns {UseWebcamReturn & { ref: StateRef<HTMLVideoElement> }} An object containing the stream, controls and ref\n */\nexport const useWebcam = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = ((target ? params[1] : params[0]) as UseWebcamParams) ?? {};\n\n const {\n stream: externalStream,\n applyConstraints,\n videoConstraints,\n audioConstraints,\n cameraResolutionMode,\n cameraResolutionType,\n frontCamera,\n mainCamera,\n muted,\n onRequest,\n onError,\n onStart,\n onStop\n } = options;\n\n const internalRef = useRefState<HTMLVideoElement>();\n const resolvedTarget = (target ?? internalRef) as HookTarget;\n\n const mediaStream = useMediaStream(resolvedTarget, {\n immediately: false,\n onStart,\n onStop,\n onError\n } satisfies UseMediaStreamOptions);\n\n const createConstraints = () =>\n getMediaStreamConstraints({\n constraints: {\n video: videoConstraints,\n audio: audioConstraints\n },\n options: {\n cameraResolutionMode,\n cameraResolutionType,\n frontCamera,\n mainCamera,\n muted\n }\n });\n\n useMount(() => {\n if (externalStream) return;\n const run = async () => {\n onRequest?.();\n const constraints = await createConstraints();\n\n mediaStream.start(constraints);\n };\n\n run();\n });\n\n useDidUpdate(() => {\n if (externalStream) return;\n\n const run = async () => {\n onRequest?.();\n const constraints = await createConstraints();\n\n if (applyConstraints && mediaStream.stream) {\n const ok = await mediaStream.apply(constraints);\n if (!ok) mediaStream.start(constraints);\n return;\n }\n\n mediaStream.start(constraints);\n };\n\n run();\n }, [\n applyConstraints,\n videoConstraints,\n audioConstraints,\n cameraResolutionMode,\n cameraResolutionType,\n frontCamera,\n mainCamera,\n muted\n ]);\n\n useEffect(() => {\n if (!externalStream) return;\n\n const element = isTarget.getElement(resolvedTarget) as HTMLVideoElement | null;\n if (!element) return;\n\n element.srcObject = externalStream;\n onStart?.(externalStream);\n\n return () => {\n onStop?.(externalStream);\n };\n }, [externalStream, target && isTarget.getRawElement(target), internalRef.state]);\n\n useUnmount(() => {\n if (externalStream) return;\n mediaStream.stop();\n });\n\n if (target)\n return {\n stream: externalStream ?? mediaStream.stream,\n start: mediaStream.start,\n apply: mediaStream.apply,\n stop: mediaStream.stop\n };\n return {\n stream: externalStream ?? mediaStream.stream,\n start: mediaStream.start,\n apply: mediaStream.apply,\n stop: mediaStream.stop,\n ref: internalRef\n };\n}) as UseWebcam;\n"],"mappings":";;;;AAsDA,IAAa,MAAc,GAAG,MAAkB;CAC9C,IAAM,IAAU,EAAS,EAAO,EAAE,IAAI,EAAO,KAAK,KAAA,GAG5C,EACJ,QAAQ,GACR,qBACA,qBACA,qBACA,yBACA,yBACA,gBACA,eACA,UACA,cACA,YACA,YACA,eAfgB,IAAS,EAAO,KAAK,EAAO,OAA2B,CAAC,GAkBpE,IAAc,EAA8B,GAC5C,IAAkB,KAAU,GAE5B,IAAc,EAAe,GAAgB;EACjD,aAAa;EACb;EACA;EACA;CACF,CAAiC,GAE3B,UACJ,EAA0B;EACxB,aAAa;GACX,OAAO;GACP,OAAO;EACT;EACA,SAAS;GACP;GACA;GACA;GACA;GACA;EACF;CACF,CAAC;CAoEH,OAlEA,QAAe;EACT,MAQJ,YAPwB;GACtB,IAAY;GACZ,IAAM,IAAc,MAAM,EAAkB;GAE5C,EAAY,MAAM,CAAW;EAC/B,EAEA,CAAI;CACN,CAAC,GAED,QAAmB;EACb,MAeJ,YAbwB;GACtB,IAAY;GACZ,IAAM,IAAc,MAAM,EAAkB;GAE5C,IAAI,KAAoB,EAAY,QAAQ;IAE1C,AAAK,MADY,EAAY,MAAM,CAAW,KACrC,EAAY,MAAM,CAAW;IACtC;GACF;GAEA,EAAY,MAAM,CAAW;EAC/B,EAEA,CAAI;CACN,GAAG;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC,GAED,QAAgB;EACd,IAAI,CAAC,GAAgB;EAErB,IAAM,IAAU,EAAS,WAAW,CAAc;EAC7C,OAKL,OAHA,EAAQ,YAAY,GACpB,IAAU,CAAc,SAEX;GACX,IAAS,CAAc;EACzB;CACF,GAAG;EAAC;EAAgB,KAAU,EAAS,cAAc,CAAM;EAAG,EAAY;CAAK,CAAC,GAEhF,QAAiB;EACX,KACJ,EAAY,KAAK;CACnB,CAAC,GAEG,IACK;EACL,QAAQ,KAAkB,EAAY;EACtC,OAAO,EAAY;EACnB,OAAO,EAAY;EACnB,MAAM,EAAY;CACpB,IACK;EACL,QAAQ,KAAkB,EAAY;EACtC,OAAO,EAAY;EACnB,OAAO,EAAY;EACnB,MAAM,EAAY;EAClB,KAAK;CACP;AACF"}
1
+ {"version":3,"file":"useWebcam.mjs","names":[],"sources":["../../../../../src/components/Webcam/hooks/useWebcam.ts"],"sourcesContent":["import type { HookTarget, StateRef, UseMediaStreamOptions } from '@siberiacancode/reactuse';\nimport type { MediaTrackConstraintsOptions } from '@webcam/core';\n\nimport {\n isTarget,\n useDidUpdate,\n useMediaStream,\n useMount,\n useRefState,\n useUnmount\n} from '@siberiacancode/reactuse';\nimport { getMediaStreamConstraints } from '@webcam/core';\nimport { useEffect } from 'react';\n\nexport interface UseWebcamParams extends MediaTrackConstraintsOptions {\n audioConstraints?: MediaTrackConstraints;\n requestTimeLimit?: number;\n stream?: MediaStream;\n videoConstraints?: MediaTrackConstraints;\n onError?: (error: Error) => void;\n onRequest?: () => void;\n onStart?: (stream: MediaStream) => void;\n onStop?: (stream?: MediaStream) => void;\n}\n\nexport interface UseWebcamReturn {\n stream?: MediaStream;\n apply: (constraints: MediaStreamConstraints) => Promise<boolean>;\n start: (constraints?: MediaStreamConstraints) => Promise<MediaStream | undefined>;\n stop: () => void;\n}\n\nexport interface UseWebcam {\n (target: HookTarget, params?: UseWebcamParams): UseWebcamReturn;\n\n (params?: UseWebcamParams): UseWebcamReturn & {\n ref: StateRef<HTMLVideoElement>;\n };\n}\n\n/**\n * @name useWebcam\n * @description - Hook that manages a webcam media stream for a video element\n *\n * @overload\n * @param {HookTarget} target The target video element the stream will be attached to\n * @param {UseWebcamParams} [params] The webcam parameters\n * @returns {UseWebcamReturn} An object containing the stream and controls\n *\n * @overload\n * @param {UseWebcamParams} [params] The webcam parameters\n * @returns {UseWebcamReturn & { ref: StateRef<HTMLVideoElement> }} An object containing the stream, controls and ref\n */\nexport const useWebcam = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = ((target ? params[1] : params[0]) as UseWebcamParams) ?? {};\n\n const {\n stream: externalStream,\n videoConstraints,\n audioConstraints,\n cameraResolutionMode,\n cameraResolutionType,\n frontCamera,\n mainCamera,\n muted,\n onRequest,\n onError,\n onStart,\n onStop\n } = options;\n\n const internalRef = useRefState<HTMLVideoElement>();\n const resolvedRef = (target ?? internalRef) as HookTarget;\n\n const mediaStream = useMediaStream(resolvedRef, {\n immediately: false,\n onStart,\n onStop,\n onError\n } satisfies UseMediaStreamOptions);\n\n const createConstraints = () =>\n getMediaStreamConstraints({\n constraints: {\n video: videoConstraints,\n audio: audioConstraints\n },\n options: {\n cameraResolutionMode,\n cameraResolutionType,\n frontCamera,\n mainCamera,\n muted\n }\n });\n\n useMount(() => {\n if (externalStream) return;\n const run = async () => {\n onRequest?.();\n const constraints = await createConstraints();\n mediaStream.start(constraints);\n };\n\n run();\n });\n\n useDidUpdate(() => {\n if (externalStream) return;\n\n const run = async () => {\n onRequest?.();\n const constraints = await createConstraints();\n\n if (mediaStream.stream) {\n const ok = await mediaStream.apply(constraints);\n if (!ok) mediaStream.start(constraints);\n return;\n }\n\n mediaStream.start(constraints);\n };\n\n run();\n }, [\n videoConstraints,\n audioConstraints,\n cameraResolutionMode,\n cameraResolutionType,\n frontCamera,\n mainCamera,\n muted\n ]);\n\n useEffect(() => {\n if (!externalStream) return;\n\n const element = isTarget.getElement(resolvedRef) as HTMLVideoElement | null;\n if (!element) return;\n\n element.srcObject = externalStream;\n onStart?.(externalStream);\n\n return () => {\n onStop?.(externalStream);\n };\n }, [externalStream, target && isTarget.getRawElement(target), internalRef.state]);\n\n useUnmount(() => {\n if (externalStream) return;\n mediaStream.stop();\n });\n\n if (target)\n return {\n stream: externalStream ?? mediaStream.stream,\n start: mediaStream.start,\n apply: mediaStream.apply,\n stop: mediaStream.stop\n };\n return {\n stream: externalStream ?? mediaStream.stream,\n start: mediaStream.start,\n apply: mediaStream.apply,\n stop: mediaStream.stop,\n ref: internalRef\n };\n}) as UseWebcam;\n"],"mappings":";;;;AAqDA,IAAa,MAAc,GAAG,MAAkB;CAC9C,IAAM,IAAU,EAAS,EAAO,EAAE,IAAI,EAAO,KAAK,KAAA,GAG5C,EACJ,QAAQ,GACR,qBACA,qBACA,yBACA,yBACA,gBACA,eACA,UACA,cACA,YACA,YACA,eAdgB,IAAS,EAAO,KAAK,EAAO,OAA2B,CAAC,GAiBpE,IAAc,EAA8B,GAC5C,IAAe,KAAU,GAEzB,IAAc,EAAe,GAAa;EAC9C,aAAa;EACb;EACA;EACA;CACF,CAAiC,GAE3B,UACJ,EAA0B;EACxB,aAAa;GACX,OAAO;GACP,OAAO;EACT;EACA,SAAS;GACP;GACA;GACA;GACA;GACA;EACF;CACF,CAAC;CAkEH,OAhEA,QAAe;EACT,MAOJ,YANwB;GACtB,IAAY;GACZ,IAAM,IAAc,MAAM,EAAkB;GAC5C,EAAY,MAAM,CAAW;EAC/B,EAEA,CAAI;CACN,CAAC,GAED,QAAmB;EACb,MAeJ,YAbwB;GACtB,IAAY;GACZ,IAAM,IAAc,MAAM,EAAkB;GAE5C,IAAI,EAAY,QAAQ;IAEtB,AAAK,MADY,EAAY,MAAM,CAAW,KACrC,EAAY,MAAM,CAAW;IACtC;GACF;GAEA,EAAY,MAAM,CAAW;EAC/B,EAEA,CAAI;CACN,GAAG;EACD;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC,GAED,QAAgB;EACd,IAAI,CAAC,GAAgB;EAErB,IAAM,IAAU,EAAS,WAAW,CAAW;EAC1C,OAKL,OAHA,EAAQ,YAAY,GACpB,IAAU,CAAc,SAEX;GACX,IAAS,CAAc;EACzB;CACF,GAAG;EAAC;EAAgB,KAAU,EAAS,cAAc,CAAM;EAAG,EAAY;CAAK,CAAC,GAEhF,QAAiB;EACX,KACJ,EAAY,KAAK;CACnB,CAAC,GAEG,IACK;EACL,QAAQ,KAAkB,EAAY;EACtC,OAAO,EAAY;EACnB,OAAO,EAAY;EACnB,MAAM,EAAY;CACpB,IACK;EACL,QAAQ,KAAkB,EAAY;EACtC,OAAO,EAAY;EACnB,OAAO,EAAY;EACnB,MAAM,EAAY;EAClB,KAAK;CACP;AACF"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@webcam/react",
3
3
  "type": "module",
4
- "version": "1.1.0",
4
+ "version": "1.1.1",
5
5
  "description": "Ultimate tool for working with media stream and displaying it in your React application",
6
6
  "author": {
7
7
  "name": "SIBERIA CAN CODE 🧊",