@wcstack/camera 4.1.1 → 4.3.0

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/README.ja.md CHANGED
@@ -161,7 +161,7 @@ Core の構造サーフェスは wcstack I/O ノード横断の規範です([asy
161
161
  - `not-found`(phase `start`)——`NotFoundError`(要求した種類のカメラ / マイクが存在しない)。
162
162
  - `not-readable`(phase `start`)——`NotReadableError`(デバイス占有・ハードウェア障害)。
163
163
  - `invalid-argument`(phase `start`)——`OverconstrainedError` / `NotSupportedError`(制約・mimeType が満たせない)。
164
- - `invalid-state`(phase `start`)——`NoStreamError`(stream 未 attach で録画開始)。
164
+ - `invalid-state`(phase `start`)——`NoStreamError`(stream 未 attach で録画開始 — 何も録画されず、要素が `[wcs/command-not-ready]` で警告する。1 要素につき 1 回)。
165
165
  - `aborted`(phase `execute`・`recoverable: true`)——`AbortError`(実行途中の中断、retry で回復しうる)。
166
166
  - `media-error`(phase `execute`)——その他の実行時失敗(例: `RecorderError` / 想定外の `MediaRecorder` エラー)。
167
167
 
package/README.md CHANGED
@@ -162,7 +162,7 @@ The structural Core surface is normative across wcstack IO nodes ([async-io-node
162
162
  - `not-found` (phase `start`) — `NotFoundError` (no camera / mic of the requested kind).
163
163
  - `not-readable` (phase `start`) — `NotReadableError` (device busy or hardware fault).
164
164
  - `invalid-argument` (phase `start`) — `OverconstrainedError` / `NotSupportedError` (constraints or mimeType unsatisfiable).
165
- - `invalid-state` (phase `start`) — `NoStreamError` (recorder started with no stream attached).
165
+ - `invalid-state` (phase `start`) — `NoStreamError` (recorder started with no stream attached — nothing is recorded, and the element warns `[wcs/command-not-ready]`, once per element).
166
166
  - `aborted` (phase `execute`, `recoverable: true`) — `AbortError` (interrupted mid-flight, may recover on retry).
167
167
  - `media-error` (phase `execute`) — any other runtime failure (e.g. `RecorderError` / unexpected `MediaRecorder` error).
168
168
 
package/dist/auto.min.js CHANGED
@@ -1,2 +1,2 @@
1
- const e={tagNames:{camera:"wcs-camera",recorder:"wcs-recorder"}};function t(){return"undefined"!=typeof navigator&&!!navigator.mediaDevices&&"function"==typeof navigator.mediaDevices.getUserMedia}function i(e){if(e&&"object"==typeof e&&"name"in e){const t=String(e.name)||"Error";return{name:t,message:"message"in e&&e.message?String(e.message):`Media request failed: ${t}.`}}return{name:"Error",message:"Media request failed."}}const s={name:"unsupported",message:"getUserMedia is not available (requires a secure context)."};function r(e){if(e)for(const t of e.getTracks())t.stop()}async function n(){if(!t()||"function"!=typeof navigator.mediaDevices.enumerateDevices)return[];try{return(await navigator.mediaDevices.enumerateDevices()).filter(e=>"videoinput"===e.kind).map(e=>({deviceId:e.deviceId,label:e.label,groupId:e.groupId,kind:e.kind}))}catch{return[]}}class a{_name;_onChange;_status=null;_gen=0;_subscribed=!1;constructor(e,t){this._name=e,this._onChange=t}observe(){if(this._subscribed)return Promise.resolve();if("undefined"==typeof navigator||!navigator.permissions||"function"!=typeof navigator.permissions.query)return this._onChange("unsupported"),Promise.resolve();this._subscribed=!0;const e=++this._gen;return navigator.permissions.query({name:this._name}).then(t=>{e===this._gen&&(this._status=t,this._onChange(t.state),t.addEventListener("change",this._onStatusChange))},()=>{e===this._gen&&this._onChange("unsupported")})}dispose(){this._subscribed=!1,this._gen++,this._status&&(this._status.removeEventListener("change",this._onStatusChange),this._status=null)}_onStatusChange=e=>{const t=e.target;this._onChange(t.state)}}const o="capability-missing",c="not-allowed",d="not-found",h="not-readable",u="invalid-argument",_="invalid-state",m="aborted",l="media-error";function g(e){const{name:t,message:i}=e;return"unsupported"===t?{code:o,phase:"probe",recoverable:!1,message:i}:"NotAllowedError"===t||"SecurityError"===t?{code:c,phase:"start",recoverable:!1,message:i}:"NotFoundError"===t?{code:d,phase:"start",recoverable:!1,message:i}:"NotReadableError"===t?{code:h,phase:"start",recoverable:!1,message:i}:"OverconstrainedError"===t||"NotSupportedError"===t?{code:u,phase:"start",recoverable:!1,message:i}:"NoStreamError"===t?{code:_,phase:"start",recoverable:!1,message:i}:"AbortError"===t?{code:m,phase:"execute",recoverable:!0,message:i}:{code:l,phase:"execute",recoverable:!1,message:i}}class v extends EventTarget{static wcBindable={protocol:"wc-bindable",version:1,properties:[{name:"active",event:"wcs-camera:active-changed",semantics:"state"},{name:"permission",event:"wcs-camera:permission-changed",semantics:"state"},{name:"audioPermission",event:"wcs-camera:audio-permission-changed",semantics:"state"},{name:"deviceId",event:"wcs-camera:device-changed",semantics:"state"},{name:"devices",event:"wcs-camera:devices-changed",semantics:"state"},{name:"error",event:"wcs-camera:error",semantics:"state"},{name:"errorInfo",event:"wcs-camera:error-info-changed",semantics:"state"},{name:"streamReady",event:"wcs-camera:stream-ready",semantics:"handle",getter:e=>e.detail},{name:"ended",event:"wcs-camera:ended",semantics:"event",getter:e=>e.detail}],commands:[{name:"start"},{name:"stop"},{name:"switchCamera"}]};_target;_active=!1;_permission="prompt";_audioPermission=null;_deviceId=null;_devices=[];_error=null;_errorInfo=null;_stream=null;_desired=!1;_constraints={};_gen=0;_subscribed=!1;_camWatcher=null;_micWatcher=null;_ready=Promise.resolve();constructor(e){super(),this._target=e??this}get active(){return this._active}get permission(){return this._permission}get audioPermission(){return this._audioPermission}get deviceId(){return this._deviceId}get devices(){return this._devices}get error(){return this._error}get errorInfo(){return this._errorInfo}get ready(){return this._ready}_setActive(e){this._active!==e&&(this._active=e,this._dispatch("wcs-camera:active-changed",e))}_setPermission(e){this._permission!==e&&(this._permission=e,this._dispatch("wcs-camera:permission-changed",e))}_setAudioPermission(e){this._audioPermission!==e&&(this._audioPermission=e,this._dispatch("wcs-camera:audio-permission-changed",e))}_setDeviceId(e){this._deviceId!==e&&(this._deviceId=e,this._dispatch("wcs-camera:device-changed",e))}_setDevices(e){this._devicesEqual(this._devices,e)||(this._devices=e,this._dispatch("wcs-camera:devices-changed",e))}_setError(e){null===e&&null===this._error||(this._error=e,this._commitErrorInfo(null===e?null:g(e)),this._dispatch("wcs-camera:error",e))}_commitErrorInfo(e){this._errorInfo=e,this._dispatch("wcs-camera:error-info-changed",e)}_dispatch(e,t){this._target.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0}))}_devicesEqual(e,t){if(e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(e[i].deviceId!==t[i].deviceId||e[i].label!==t[i].label)return!1;return!0}observe(e){return this._constraints={...e},this._subscribed?this._ready=this._ready.then(()=>this._reconcileAudioWatcher()):(this._subscribed=!0,this._ready=this._initPermissions()),this._ready}start(){this._desired=!0,this._restart()}stop(){this._desired=!1,this._release(!1)}switchCamera(){const e="environment"===this._constraints.facingMode?"user":"environment";this._constraints={...this._constraints,facingMode:e,deviceId:void 0},this._desired&&this._restart()}suspend(){this._gen++,this._stream&&this._release(!1)}resume(){this._desired&&!this._active&&this._restart()}dispose(){this._subscribed=!1,this._gen++,this._desired=!1,this._release(!0),t()&&"function"==typeof navigator.mediaDevices.removeEventListener&&navigator.mediaDevices.removeEventListener("devicechange",this._onDeviceChange),this._camWatcher?.dispose(),this._micWatcher?.dispose(),this._camWatcher=null,this._micWatcher=null}_initPermissions(){if(!t())return this._setPermission("unsupported"),Promise.resolve();this._camWatcher=new a("camera",e=>this._setPermission(e));const e=[this._camWatcher.observe()];return this._constraints.audio&&(this._micWatcher=new a("microphone",e=>this._setAudioPermission(e)),e.push(this._micWatcher.observe())),"function"==typeof navigator.mediaDevices.addEventListener&&navigator.mediaDevices.addEventListener("devicechange",this._onDeviceChange),Promise.all(e).then(()=>{})}_onDeviceChange=()=>{n().then(e=>{this._subscribed&&this._setDevices(e)})};_reconcileAudioWatcher(){return this._constraints.audio&&!this._micWatcher&&t()?(this._micWatcher=new a("microphone",e=>this._setAudioPermission(e)),this._micWatcher.observe()):(!this._constraints.audio&&this._micWatcher&&(this._micWatcher.dispose(),this._micWatcher=null,this._setAudioPermission(null)),Promise.resolve())}_restart(){this._release(!1),this._acquire()}async _acquire(){const e=++this._gen,a=function(e){const t={};return e.deviceId?t.deviceId={exact:e.deviceId}:e.facingMode&&(t.facingMode=e.facingMode),"number"==typeof e.width&&(t.width=e.width),"number"==typeof e.height&&(t.height=e.height),{video:!(Object.keys(t).length>0)||t,audio:!0===e.audio}}(this._constraints),{stream:o,error:c}=await async function(e){if(!t())return{error:s};try{return{stream:await navigator.mediaDevices.getUserMedia(e)}}catch(e){return{error:i(e)}}}(a);if(e!==this._gen)return void r(o??null);if(c)return this._setError(c),"NotAllowedError"===c.name?(this._setPermission("denied"),this._desired=!1):"unsupported"===c.name&&(this._setPermission("unsupported"),this._desired=!1),void this._setActive(!1);const d=o;this._stream=d;for(const e of d.getTracks())e.addEventListener("ended",this._onTrackEnded);this._setError(null),this._setPermission("granted"),this._constraints.audio&&d.getAudioTracks().length>0&&this._setAudioPermission("granted"),this._updateDeviceId(d),this._setActive(!0),this._dispatch("wcs-camera:stream-ready",d);const h=await n();e===this._gen&&this._setDevices(h)}_release(e){if(this._stream){for(const e of this._stream.getTracks())e.removeEventListener("ended",this._onTrackEnded);r(this._stream),this._stream=null,e?this._active=!1:this._setActive(!1)}}_onTrackEnded=()=>{this._release(!1),this._dispatch("wcs-camera:ended",null)};_updateDeviceId(e){const t=e.getVideoTracks()[0];if(t&&"function"==typeof t.getSettings){const e=t.getSettings();this._setDeviceId(e.deviceId??null)}}}function p(e,t){let i=Object.getPrototypeOf(e);for(;null!==i;){const e=Object.getOwnPropertyDescriptor(i,t);if(void 0!==e)return"function"==typeof e.get||"function"==typeof e.set;i=Object.getPrototypeOf(i)}return!1}function b(e){const t=e.constructor?.wcBindable,i=t?.inputs;if(void 0!==i)for(const t of i){const i=t.name;if(!Object.prototype.hasOwnProperty.call(e,i))continue;if(!p(e,i))continue;const s=e,r=s[i];delete s[i],s[i]=r}}const f=new WeakMap;function y(e,t){let i=f.get(e);return void 0===i&&(i=new Map,f.set(e,i)),i.has(t)||i.set(t,e.getAttribute(t)),i.get(t)}function w(e,t,i){null===i?e.removeAttribute(t):e.setAttribute(t,i)}function P(e,t,i){const s=y(e,t);w(e,t,void 0===i?s:null===i?null:String(i))}function E(e,t,i){const s=y(e,t);w(e,t,void 0===i?s:i?"":null)}class A extends HTMLElement{static hasConnectedCallbackPromise=!0;static wcBindable={...v.wcBindable,inputs:[{name:"audio",attribute:"audio"},{name:"facingMode",attribute:"facing-mode"},{name:"deviceId",attribute:"device-id"},{name:"width",attribute:"width"},{name:"height",attribute:"height"},{name:"autostart",attribute:"autostart"},{name:"keepAlive",attribute:"keep-alive"}],commands:v.wcBindable.commands};static observedAttributes=["facing-mode","device-id","audio","width","height"];_core;_video;_connectedCallbackPromise=Promise.resolve();_connected=!1;_batchingAttrs=!1;_internals=null;constructor(){super(),this._core=new v(this);const e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=":host{display:inline-block}video{display:block;width:100%;height:100%}",this._video=document.createElement("video"),this._video.autoplay=!0,this._video.muted=!0,this._video.setAttribute("playsinline",""),this._video.setAttribute("part","video"),e.append(t,this._video),this.addEventListener("wcs-camera:stream-ready",this._onStreamReady),this.addEventListener("wcs-camera:active-changed",this._onActiveChanged),this._internals=this._initInternals(),this._wireStates({"wcs-camera:active-changed":e=>({active:!0===e}),"wcs-camera:error":e=>({error:null!=e})})}get debugStates(){return this._internals?[...this._internals.states]:[]}_initInternals(){try{if("function"!=typeof this.attachInternals)return null;const e=this.attachInternals();return e.states.add("wcs-probe"),e.states.delete("wcs-probe"),e}catch{return null}}_wireStates(e){if(null===this._internals)return;const t=this._internals.states;for(const[i,s]of Object.entries(e))this.addEventListener(i,e=>{const i=this.hasAttribute("debug-states");for(const[r,n]of Object.entries(s(e.detail))){try{n?t.add(r):t.delete(r)}catch{}i&&this.toggleAttribute(`data-wcs-state-${r}`,n)}})}get audio(){return this.hasAttribute("audio")}set audio(e){E(this,"audio",e)}get facingMode(){return"environment"===this.getAttribute("facing-mode")?"environment":"user"}set facingMode(e){P(this,"facing-mode",e)}get deviceId(){return this._core.deviceId??this.getAttribute("device-id")??""}set deviceId(e){P(this,"device-id",e)}get width(){return this._numberAttr("width")}set width(e){P(this,"width",e)}get height(){return this._numberAttr("height")}set height(e){P(this,"height",e)}get autostart(){return this.hasAttribute("autostart")}set autostart(e){E(this,"autostart",e)}get keepAlive(){return this.hasAttribute("keep-alive")}set keepAlive(e){E(this,"keep-alive",e)}get videoElement(){return this._video}get active(){return this._core.active}get permission(){return this._core.permission}get audioPermission(){return this._core.audioPermission}get devices(){return this._core.devices}get error(){return this._core.error}get errorInfo(){return this._core.errorInfo}get connectedCallbackPromise(){return this._connectedCallbackPromise}start(){this._core.start()}stop(){this._core.stop()}switchCamera(){const e="environment"===this.facingMode?"user":"environment";this._batchingAttrs=!0;try{this.removeAttribute("device-id"),this.setAttribute("facing-mode",e)}finally{this._batchingAttrs=!1}this._core.observe(this._constraints()),this._core.active&&this._core.start()}_numberAttr(e){const t=this.getAttribute(e);if(null===t||""===t.trim())return NaN;const i=Number(t);return Number.isFinite(i)?i:NaN}_constraints(){const e={audio:this.audio,facingMode:this.facingMode},t=this.getAttribute("device-id");return t&&(e.deviceId=t),Number.isFinite(this.width)&&(e.width=this.width),Number.isFinite(this.height)&&(e.height=this.height),e}_onStreamReady=e=>{this._video.srcObject=e.detail};_onActiveChanged=e=>{!1===e.detail&&(this._video.srcObject=null)};connectedCallback(){b(this),this._connected=!0,this._connectedCallbackPromise=this._core.observe(this._constraints()),this.autostart&&this._core.start(),document.addEventListener("visibilitychange",this._onVisibilityChange)}disconnectedCallback(){this._connected=!1,document.removeEventListener("visibilitychange",this._onVisibilityChange),this._core.dispose()}attributeChangedCallback(e,t,i){this._connected&&t!==i&&(this._batchingAttrs||(this._core.observe(this._constraints()),this._core.active&&this._core.start()))}_onVisibilityChange=()=>{this.keepAlive||("hidden"===document.visibilityState?this._core.suspend():this._core.resume())}}class I extends EventTarget{static wcBindable={protocol:"wc-bindable",version:1,properties:[{name:"recording",event:"wcs-recorder:recording-changed",semantics:"state"},{name:"paused",event:"wcs-recorder:paused-changed",semantics:"state"},{name:"duration",event:"wcs-recorder:duration-changed",semantics:"state"},{name:"mimeType",event:"wcs-recorder:mimetype-changed",semantics:"state"},{name:"blob",event:"wcs-recorder:recorded",semantics:"state",getter:e=>e.detail?.blob??null},{name:"objectURL",event:"wcs-recorder:recorded",semantics:"state",getter:e=>e.detail?.objectURL??null},{name:"error",event:"wcs-recorder:error",semantics:"state"},{name:"errorInfo",event:"wcs-recorder:error-info-changed",semantics:"state"},{name:"recorded",event:"wcs-recorder:recorded",semantics:"event",getter:e=>e.detail},{name:"dataavailable",event:"wcs-recorder:dataavailable",semantics:"event",getter:e=>e.detail}],commands:[{name:"attachStream"},{name:"start"},{name:"stop"},{name:"pause"},{name:"resume"}]};_target;_recording=!1;_paused=!1;_duration=0;_mimeType="";_blob=null;_objectURL=null;_error=null;_errorInfo=null;_recorder=null;_stream=null;_chunks=[];_timeslice=!1;_startTime=0;_gen=0;_ready=Promise.resolve();constructor(e){super(),this._target=e??this}get recording(){return this._recording}get paused(){return this._paused}get duration(){return this._duration}get mimeType(){return this._mimeType}get blob(){return this._blob}get objectURL(){return this._objectURL}get error(){return this._error}get errorInfo(){return this._errorInfo}get ready(){return this._ready}_setRecording(e){this._recording!==e&&(this._recording=e,this._dispatch("wcs-recorder:recording-changed",e))}_setPaused(e){this._paused!==e&&(this._paused=e,this._dispatch("wcs-recorder:paused-changed",e))}_setDuration(e){this._duration!==e&&(this._duration=e,this._dispatch("wcs-recorder:duration-changed",e))}_setMimeType(e){this._mimeType!==e&&(this._mimeType=e,this._dispatch("wcs-recorder:mimetype-changed",e))}_setError(e){null===e&&null===this._error||(this._error=e,this._commitErrorInfo(null===e?null:g(e)),this._dispatch("wcs-recorder:error",e))}_commitErrorInfo(e){this._errorInfo=e,this._dispatch("wcs-recorder:error-info-changed",e)}_dispatch(e,t){this._target.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0}))}attachStream(e){this._stream=e}start(e={}){if("undefined"==typeof globalThis||"function"!=typeof globalThis.MediaRecorder)return void this._setError({name:"unsupported",message:"MediaRecorder is not available in this environment."});if(!this._stream)return void this._setError({name:"NoStreamError",message:"No stream attached. Wire a camera's stream-ready to attachStream first."});if(this._recording)return;const t={};let s;e.mimeType&&this._isTypeSupported(e.mimeType)&&(t.mimeType=e.mimeType),"number"==typeof e.audioBitsPerSecond&&(t.audioBitsPerSecond=e.audioBitsPerSecond),"number"==typeof e.videoBitsPerSecond&&(t.videoBitsPerSecond=e.videoBitsPerSecond);try{s=new MediaRecorder(this._stream,t)}catch(e){return void this._setError(i(e))}const r=++this._gen;this._chunks=[],this._timeslice="number"==typeof e.timeslice&&e.timeslice>0,s.ondataavailable=e=>{r===this._gen&&e.data&&e.data.size>0&&(this._chunks.push(e.data),this._timeslice&&this._dispatch("wcs-recorder:dataavailable",e.data))},s.onstop=()=>{r===this._gen&&(this._paused||this._setDuration(this._elapsed()),this._assembleBlob(),this._setPaused(!1),this._setRecording(!1))},s.onerror=e=>{if(r!==this._gen)return;const t=e.error;this._setError(i(t??{name:"RecorderError"}))},s.onpause=()=>{r===this._gen&&(this._setDuration(this._elapsed()),this._setPaused(!0))},s.onresume=()=>{r===this._gen&&(this._startTime=this._now()-this._duration,this._setPaused(!1))},this._recorder=s,this._setError(null),this._setMimeType(s.mimeType||t.mimeType||""),this._startTime=this._now(),this._setDuration(0),s.start(this._timeslice?e.timeslice:void 0),this._setRecording(!0)}stop(){this._recorder&&"inactive"!==this._recorder.state&&this._recorder.stop()}pause(){this._recorder&&"recording"===this._recorder.state&&this._recorder.pause()}resume(){this._recorder&&"paused"===this._recorder.state&&this._recorder.resume()}observe(){return this._ready}dispose(){if(this._gen++,this._recorder&&"inactive"!==this._recorder.state)try{this._recorder.stop()}catch{}this._recorder=null,this._revokeUrl(),this._stream=null,this._recording=!1,this._paused=!1}_assembleBlob(){const e=new Blob(this._chunks,this._mimeType?{type:this._mimeType}:void 0);this._chunks=[],this._revokeUrl();const t=this._createUrl(e);this._blob=e,this._objectURL=t;const i={blob:e,objectURL:t,mimeType:this._mimeType,duration:this._duration};this._dispatch("wcs-recorder:recorded",i)}_revokeUrl(){this._objectURL&&"undefined"!=typeof URL&&"function"==typeof URL.revokeObjectURL&&URL.revokeObjectURL(this._objectURL),this._objectURL=null}_createUrl(e){return"undefined"!=typeof URL&&"function"==typeof URL.createObjectURL?URL.createObjectURL(e):""}_isTypeSupported(e){return globalThis.MediaRecorder.isTypeSupported(e)}_now(){return performance.now()}_elapsed(){return Math.max(0,Math.round(this._now()-this._startTime))}}class S extends HTMLElement{static hasConnectedCallbackPromise=!0;static wcBindable={...I.wcBindable,inputs:[{name:"mimeType",attribute:"mime-type"},{name:"timeslice",attribute:"timeslice"},{name:"audioBitsPerSecond",attribute:"audio-bits"},{name:"videoBitsPerSecond",attribute:"video-bits"}],commands:I.wcBindable.commands};_core;_connectedCallbackPromise=Promise.resolve();_internals=null;constructor(){super(),this._core=new I(this),this._internals=this._initInternals(),this._wireStates({"wcs-recorder:recording-changed":e=>({recording:!0===e}),"wcs-recorder:paused-changed":e=>({paused:!0===e}),"wcs-recorder:error":e=>({error:null!=e})})}get debugStates(){return this._internals?[...this._internals.states]:[]}_initInternals(){try{if("function"!=typeof this.attachInternals)return null;const e=this.attachInternals();return e.states.add("wcs-probe"),e.states.delete("wcs-probe"),e}catch{return null}}_wireStates(e){if(null===this._internals)return;const t=this._internals.states;for(const[i,s]of Object.entries(e))this.addEventListener(i,e=>{const i=this.hasAttribute("debug-states");for(const[r,n]of Object.entries(s(e.detail))){try{n?t.add(r):t.delete(r)}catch{}i&&this.toggleAttribute(`data-wcs-state-${r}`,n)}})}get connectedCallbackPromise(){return this._connectedCallbackPromise}get mimeType(){return this._core.mimeType}set mimeType(e){P(this,"mime-type",e)}get timeslice(){return this._numberAttr("timeslice")}set timeslice(e){P(this,"timeslice",e)}get audioBitsPerSecond(){return this._numberAttr("audio-bits")}set audioBitsPerSecond(e){P(this,"audio-bits",e)}get videoBitsPerSecond(){return this._numberAttr("video-bits")}set videoBitsPerSecond(e){P(this,"video-bits",e)}get recording(){return this._core.recording}get paused(){return this._core.paused}get duration(){return this._core.duration}get blob(){return this._core.blob}get objectURL(){return this._core.objectURL}get error(){return this._core.error}get errorInfo(){return this._core.errorInfo}attachStream(e){this._core.attachStream(e)}start(){this._core.start(this._options())}stop(){this._core.stop()}pause(){this._core.pause()}resume(){this._core.resume()}_numberAttr(e){const t=this.getAttribute(e);if(null===t||""===t.trim())return NaN;const i=Number(t);return Number.isFinite(i)?i:NaN}_options(){const e={},t=this.getAttribute("mime-type")??"";return t&&(e.mimeType=t),Number.isFinite(this.timeslice)&&(e.timeslice=this.timeslice),Number.isFinite(this.audioBitsPerSecond)&&(e.audioBitsPerSecond=this.audioBitsPerSecond),Number.isFinite(this.videoBitsPerSecond)&&(e.videoBitsPerSecond=this.videoBitsPerSecond),e}connectedCallback(){b(this),this.style.display="none",this._connectedCallbackPromise=this._core.observe()}disconnectedCallback(){this._core.dispose()}}var k;!function(t=customElements){t.get(e.tagNames.camera)||t.define(e.tagNames.camera,A),t.get(e.tagNames.recorder)||t.define(e.tagNames.recorder,S)}(k);
1
+ const e={tagNames:{camera:"wcs-camera",recorder:"wcs-recorder"}};function t(){return"undefined"!=typeof navigator&&!!navigator.mediaDevices&&"function"==typeof navigator.mediaDevices.getUserMedia}function i(e){if(e&&"object"==typeof e&&"name"in e){const t=String(e.name)||"Error";return{name:t,message:"message"in e&&e.message?String(e.message):`Media request failed: ${t}.`}}return{name:"Error",message:"Media request failed."}}const s={name:"unsupported",message:"getUserMedia is not available (requires a secure context)."};function r(e){if(e)for(const t of e.getTracks())t.stop()}async function n(){if(!t()||"function"!=typeof navigator.mediaDevices.enumerateDevices)return[];try{return(await navigator.mediaDevices.enumerateDevices()).filter(e=>"videoinput"===e.kind).map(e=>({deviceId:e.deviceId,label:e.label,groupId:e.groupId,kind:e.kind}))}catch{return[]}}class a{_name;_onChange;_status=null;_gen=0;_subscribed=!1;constructor(e,t){this._name=e,this._onChange=t}observe(){if(this._subscribed)return Promise.resolve();if("undefined"==typeof navigator||!navigator.permissions||"function"!=typeof navigator.permissions.query)return this._onChange("unsupported"),Promise.resolve();this._subscribed=!0;const e=++this._gen;return navigator.permissions.query({name:this._name}).then(t=>{e===this._gen&&(this._status=t,this._onChange(t.state),t.addEventListener("change",this._onStatusChange))},()=>{e===this._gen&&this._onChange("unsupported")})}dispose(){this._subscribed=!1,this._gen++,this._status&&(this._status.removeEventListener("change",this._onStatusChange),this._status=null)}_onStatusChange=e=>{const t=e.target;this._onChange(t.state)}}const o="capability-missing",c="not-allowed",d="not-found",h="not-readable",u="invalid-argument",_="invalid-state",m="aborted",l="media-error";function g(e){const{name:t,message:i}=e;return"unsupported"===t?{code:o,phase:"probe",recoverable:!1,message:i}:"NotAllowedError"===t||"SecurityError"===t?{code:c,phase:"start",recoverable:!1,message:i}:"NotFoundError"===t?{code:d,phase:"start",recoverable:!1,message:i}:"NotReadableError"===t?{code:h,phase:"start",recoverable:!1,message:i}:"OverconstrainedError"===t||"NotSupportedError"===t?{code:u,phase:"start",recoverable:!1,message:i}:"NoStreamError"===t?{code:_,phase:"start",recoverable:!1,message:i}:"AbortError"===t?{code:m,phase:"execute",recoverable:!0,message:i}:{code:l,phase:"execute",recoverable:!1,message:i}}class v extends EventTarget{static wcBindable={protocol:"wc-bindable",version:1,properties:[{name:"active",event:"wcs-camera:active-changed",semantics:"state"},{name:"permission",event:"wcs-camera:permission-changed",semantics:"state"},{name:"audioPermission",event:"wcs-camera:audio-permission-changed",semantics:"state"},{name:"deviceId",event:"wcs-camera:device-changed",semantics:"state"},{name:"devices",event:"wcs-camera:devices-changed",semantics:"state"},{name:"error",event:"wcs-camera:error",semantics:"state"},{name:"errorInfo",event:"wcs-camera:error-info-changed",semantics:"state"},{name:"streamReady",event:"wcs-camera:stream-ready",semantics:"handle",getter:e=>e.detail},{name:"ended",event:"wcs-camera:ended",semantics:"event",getter:e=>e.detail}],commands:[{name:"start"},{name:"stop"},{name:"switchCamera"}]};_target;_active=!1;_permission="prompt";_audioPermission=null;_deviceId=null;_devices=[];_error=null;_errorInfo=null;_stream=null;_desired=!1;_constraints={};_gen=0;_subscribed=!1;_camWatcher=null;_micWatcher=null;_ready=Promise.resolve();constructor(e){super(),this._target=e??this}get active(){return this._active}get permission(){return this._permission}get audioPermission(){return this._audioPermission}get deviceId(){return this._deviceId}get devices(){return this._devices}get error(){return this._error}get errorInfo(){return this._errorInfo}get ready(){return this._ready}_setActive(e){this._active!==e&&(this._active=e,this._dispatch("wcs-camera:active-changed",e))}_setPermission(e){this._permission!==e&&(this._permission=e,this._dispatch("wcs-camera:permission-changed",e))}_setAudioPermission(e){this._audioPermission!==e&&(this._audioPermission=e,this._dispatch("wcs-camera:audio-permission-changed",e))}_setDeviceId(e){this._deviceId!==e&&(this._deviceId=e,this._dispatch("wcs-camera:device-changed",e))}_setDevices(e){this._devicesEqual(this._devices,e)||(this._devices=e,this._dispatch("wcs-camera:devices-changed",e))}_setError(e){null===e&&null===this._error||(this._error=e,this._commitErrorInfo(null===e?null:g(e)),this._dispatch("wcs-camera:error",e))}_commitErrorInfo(e){this._errorInfo=e,this._dispatch("wcs-camera:error-info-changed",e)}_dispatch(e,t){this._target.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0}))}_devicesEqual(e,t){if(e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(e[i].deviceId!==t[i].deviceId||e[i].label!==t[i].label)return!1;return!0}observe(e){return this._constraints={...e},this._subscribed?this._ready=this._ready.then(()=>this._reconcileAudioWatcher()):(this._subscribed=!0,this._ready=this._initPermissions()),this._ready}start(){this._desired=!0,this._restart()}stop(){this._desired=!1,this._release(!1)}switchCamera(){const e="environment"===this._constraints.facingMode?"user":"environment";this._constraints={...this._constraints,facingMode:e,deviceId:void 0},this._desired&&this._restart()}suspend(){this._gen++,this._stream&&this._release(!1)}resume(){this._desired&&!this._active&&this._restart()}dispose(){this._subscribed=!1,this._gen++,this._desired=!1,this._release(!0),t()&&"function"==typeof navigator.mediaDevices.removeEventListener&&navigator.mediaDevices.removeEventListener("devicechange",this._onDeviceChange),this._camWatcher?.dispose(),this._micWatcher?.dispose(),this._camWatcher=null,this._micWatcher=null}_initPermissions(){if(!t())return this._setPermission("unsupported"),Promise.resolve();this._camWatcher=new a("camera",e=>this._setPermission(e));const e=[this._camWatcher.observe()];return this._constraints.audio&&(this._micWatcher=new a("microphone",e=>this._setAudioPermission(e)),e.push(this._micWatcher.observe())),"function"==typeof navigator.mediaDevices.addEventListener&&navigator.mediaDevices.addEventListener("devicechange",this._onDeviceChange),Promise.all(e).then(()=>{})}_onDeviceChange=()=>{n().then(e=>{this._subscribed&&this._setDevices(e)})};_reconcileAudioWatcher(){return this._constraints.audio&&!this._micWatcher&&t()?(this._micWatcher=new a("microphone",e=>this._setAudioPermission(e)),this._micWatcher.observe()):(!this._constraints.audio&&this._micWatcher&&(this._micWatcher.dispose(),this._micWatcher=null,this._setAudioPermission(null)),Promise.resolve())}_restart(){this._release(!1),this._acquire()}async _acquire(){const e=++this._gen,a=function(e){const t={};return e.deviceId?t.deviceId={exact:e.deviceId}:e.facingMode&&(t.facingMode=e.facingMode),"number"==typeof e.width&&(t.width=e.width),"number"==typeof e.height&&(t.height=e.height),{video:!(Object.keys(t).length>0)||t,audio:!0===e.audio}}(this._constraints),{stream:o,error:c}=await async function(e){if(!t())return{error:s};try{return{stream:await navigator.mediaDevices.getUserMedia(e)}}catch(e){return{error:i(e)}}}(a);if(e!==this._gen)return void r(o??null);if(c)return this._setError(c),"NotAllowedError"===c.name?(this._setPermission("denied"),this._desired=!1):"unsupported"===c.name&&(this._setPermission("unsupported"),this._desired=!1),void this._setActive(!1);const d=o;this._stream=d;for(const e of d.getTracks())e.addEventListener("ended",this._onTrackEnded);this._setError(null),this._setPermission("granted"),this._constraints.audio&&d.getAudioTracks().length>0&&this._setAudioPermission("granted"),this._updateDeviceId(d),this._setActive(!0),this._dispatch("wcs-camera:stream-ready",d);const h=await n();e===this._gen&&this._setDevices(h)}_release(e){if(this._stream){for(const e of this._stream.getTracks())e.removeEventListener("ended",this._onTrackEnded);r(this._stream),this._stream=null,e?this._active=!1:this._setActive(!1)}}_onTrackEnded=()=>{this._release(!1),this._dispatch("wcs-camera:ended",null)};_updateDeviceId(e){const t=e.getVideoTracks()[0];if(t&&"function"==typeof t.getSettings){const e=t.getSettings();this._setDeviceId(e.deviceId??null)}}}function p(e,t){let i=Object.getPrototypeOf(e);for(;null!==i;){const e=Object.getOwnPropertyDescriptor(i,t);if(void 0!==e)return"function"==typeof e.get||"function"==typeof e.set;i=Object.getPrototypeOf(i)}return!1}function b(e){const t=e.constructor?.wcBindable,i=t?.inputs;if(void 0!==i)for(const t of i){const i=t.name;if(!Object.prototype.hasOwnProperty.call(e,i))continue;if(!p(e,i))continue;const s=e,r=s[i];delete s[i],s[i]=r}}const f=new WeakMap;function y(e,t){let i=f.get(e);return void 0===i&&(i=new Map,f.set(e,i)),i.has(t)||i.set(t,e.getAttribute(t)),i.get(t)}function w(e,t,i){null===i?e.removeAttribute(t):e.setAttribute(t,i)}function P(e,t,i){const s=y(e,t);w(e,t,void 0===i?s:null===i?null:String(i))}function E(e,t,i){const s=y(e,t);w(e,t,void 0===i?s:i?"":null)}class A extends HTMLElement{static hasConnectedCallbackPromise=!0;static wcBindable={...v.wcBindable,inputs:[{name:"audio",attribute:"audio"},{name:"facingMode",attribute:"facing-mode"},{name:"deviceId",attribute:"device-id"},{name:"width",attribute:"width"},{name:"height",attribute:"height"},{name:"autostart",attribute:"autostart"},{name:"keepAlive",attribute:"keep-alive"}],commands:v.wcBindable.commands};static observedAttributes=["facing-mode","device-id","audio","width","height"];_core;_video;_connectedCallbackPromise=Promise.resolve();_connected=!1;_batchingAttrs=!1;_internals=null;constructor(){super(),this._core=new v(this);const e=this.attachShadow({mode:"open"}),t=document.createElement("style");t.textContent=":host{display:inline-block}video{display:block;width:100%;height:100%}",this._video=document.createElement("video"),this._video.autoplay=!0,this._video.muted=!0,this._video.setAttribute("playsinline",""),this._video.setAttribute("part","video"),e.append(t,this._video),this.addEventListener("wcs-camera:stream-ready",this._onStreamReady),this.addEventListener("wcs-camera:active-changed",this._onActiveChanged),this._internals=this._initInternals(),this._wireStates({"wcs-camera:active-changed":e=>({active:!0===e}),"wcs-camera:error":e=>({error:null!=e})})}get debugStates(){return this._internals?[...this._internals.states]:[]}_initInternals(){try{if("function"!=typeof this.attachInternals)return null;const e=this.attachInternals();return e.states.add("wcs-probe"),e.states.delete("wcs-probe"),e}catch{return null}}_wireStates(e){if(null===this._internals)return;const t=this._internals.states;for(const[i,s]of Object.entries(e))this.addEventListener(i,e=>{const i=this.hasAttribute("debug-states");for(const[r,n]of Object.entries(s(e.detail))){try{n?t.add(r):t.delete(r)}catch{}i&&this.toggleAttribute(`data-wcs-state-${r}`,n)}})}get audio(){return this.hasAttribute("audio")}set audio(e){E(this,"audio",e)}get facingMode(){return"environment"===this.getAttribute("facing-mode")?"environment":"user"}set facingMode(e){P(this,"facing-mode",e)}get deviceId(){return this._core.deviceId??this.getAttribute("device-id")??""}set deviceId(e){P(this,"device-id",e)}get width(){return this._numberAttr("width")}set width(e){P(this,"width",e)}get height(){return this._numberAttr("height")}set height(e){P(this,"height",e)}get autostart(){return this.hasAttribute("autostart")}set autostart(e){E(this,"autostart",e)}get keepAlive(){return this.hasAttribute("keep-alive")}set keepAlive(e){E(this,"keep-alive",e)}get videoElement(){return this._video}get active(){return this._core.active}get permission(){return this._core.permission}get audioPermission(){return this._core.audioPermission}get devices(){return this._core.devices}get error(){return this._core.error}get errorInfo(){return this._core.errorInfo}get connectedCallbackPromise(){return this._connectedCallbackPromise}start(){this._core.start()}stop(){this._core.stop()}switchCamera(){const e="environment"===this.facingMode?"user":"environment";this._batchingAttrs=!0;try{this.removeAttribute("device-id"),this.setAttribute("facing-mode",e)}finally{this._batchingAttrs=!1}this._core.observe(this._constraints()),this._core.active&&this._core.start()}_numberAttr(e){const t=this.getAttribute(e);if(null===t||""===t.trim())return NaN;const i=Number(t);return Number.isFinite(i)?i:NaN}_constraints(){const e={audio:this.audio,facingMode:this.facingMode},t=this.getAttribute("device-id");return t&&(e.deviceId=t),Number.isFinite(this.width)&&(e.width=this.width),Number.isFinite(this.height)&&(e.height=this.height),e}_onStreamReady=e=>{this._video.srcObject=e.detail};_onActiveChanged=e=>{!1===e.detail&&(this._video.srcObject=null)};connectedCallback(){b(this),this._connected=!0,this._connectedCallbackPromise=this._core.observe(this._constraints()),this.autostart&&this._core.start(),document.addEventListener("visibilitychange",this._onVisibilityChange)}disconnectedCallback(){this._connected=!1,document.removeEventListener("visibilitychange",this._onVisibilityChange),this._core.dispose()}attributeChangedCallback(e,t,i){this._connected&&t!==i&&(this._batchingAttrs||(this._core.observe(this._constraints()),this._core.active&&this._core.start()))}_onVisibilityChange=()=>{this.keepAlive||("hidden"===document.visibilityState?this._core.suspend():this._core.resume())}}class I extends EventTarget{static wcBindable={protocol:"wc-bindable",version:1,properties:[{name:"recording",event:"wcs-recorder:recording-changed",semantics:"state"},{name:"paused",event:"wcs-recorder:paused-changed",semantics:"state"},{name:"duration",event:"wcs-recorder:duration-changed",semantics:"state"},{name:"mimeType",event:"wcs-recorder:mimetype-changed",semantics:"state"},{name:"blob",event:"wcs-recorder:recorded",semantics:"state",getter:e=>e.detail?.blob??null},{name:"objectURL",event:"wcs-recorder:recorded",semantics:"state",getter:e=>e.detail?.objectURL??null},{name:"error",event:"wcs-recorder:error",semantics:"state"},{name:"errorInfo",event:"wcs-recorder:error-info-changed",semantics:"state"},{name:"recorded",event:"wcs-recorder:recorded",semantics:"event",getter:e=>e.detail},{name:"dataavailable",event:"wcs-recorder:dataavailable",semantics:"event",getter:e=>e.detail}],commands:[{name:"attachStream"},{name:"start"},{name:"stop"},{name:"pause"},{name:"resume"}]};_target;_recording=!1;_paused=!1;_duration=0;_mimeType="";_blob=null;_objectURL=null;_error=null;_errorInfo=null;_recorder=null;_stream=null;_chunks=[];_timeslice=!1;_startTime=0;_gen=0;_ready=Promise.resolve();_toldNotReady=!1;constructor(e){super(),this._target=e??this}get recording(){return this._recording}get paused(){return this._paused}get duration(){return this._duration}get mimeType(){return this._mimeType}get blob(){return this._blob}get objectURL(){return this._objectURL}get error(){return this._error}get errorInfo(){return this._errorInfo}get ready(){return this._ready}_setRecording(e){this._recording!==e&&(this._recording=e,this._dispatch("wcs-recorder:recording-changed",e))}_setPaused(e){this._paused!==e&&(this._paused=e,this._dispatch("wcs-recorder:paused-changed",e))}_setDuration(e){this._duration!==e&&(this._duration=e,this._dispatch("wcs-recorder:duration-changed",e))}_setMimeType(e){this._mimeType!==e&&(this._mimeType=e,this._dispatch("wcs-recorder:mimetype-changed",e))}_setError(e){null===e&&null===this._error||(this._error=e,this._commitErrorInfo(null===e?null:g(e)),this._dispatch("wcs-recorder:error",e))}_commitErrorInfo(e){this._errorInfo=e,this._dispatch("wcs-recorder:error-info-changed",e)}_dispatch(e,t){this._target.dispatchEvent(new CustomEvent(e,{detail:t,bubbles:!0}))}attachStream(e){this._stream=e}start(e={}){if("undefined"==typeof globalThis||"function"!=typeof globalThis.MediaRecorder)return void this._setError({name:"unsupported",message:"MediaRecorder is not available in this environment."});if(!this._stream)return this._setError({name:"NoStreamError",message:"No stream attached. Wire a camera's stream-ready to attachStream first."}),void this._warnNotReady();if(this._recording)return;const t={};let s;e.mimeType&&this._isTypeSupported(e.mimeType)&&(t.mimeType=e.mimeType),"number"==typeof e.audioBitsPerSecond&&(t.audioBitsPerSecond=e.audioBitsPerSecond),"number"==typeof e.videoBitsPerSecond&&(t.videoBitsPerSecond=e.videoBitsPerSecond);try{s=new MediaRecorder(this._stream,t)}catch(e){return void this._setError(i(e))}const r=++this._gen;this._chunks=[],this._timeslice="number"==typeof e.timeslice&&e.timeslice>0,s.ondataavailable=e=>{r===this._gen&&e.data&&e.data.size>0&&(this._chunks.push(e.data),this._timeslice&&this._dispatch("wcs-recorder:dataavailable",e.data))},s.onstop=()=>{r===this._gen&&(this._paused||this._setDuration(this._elapsed()),this._assembleBlob(),this._setPaused(!1),this._setRecording(!1))},s.onerror=e=>{if(r!==this._gen)return;const t=e.error;this._setError(i(t??{name:"RecorderError"}))},s.onpause=()=>{r===this._gen&&(this._setDuration(this._elapsed()),this._setPaused(!0))},s.onresume=()=>{r===this._gen&&(this._startTime=this._now()-this._duration,this._setPaused(!1))},this._recorder=s,this._setError(null),this._setMimeType(s.mimeType||t.mimeType||""),this._startTime=this._now(),this._setDuration(0),s.start(this._timeslice?e.timeslice:void 0),this._setRecording(!0)}_warnNotReady(){this._toldNotReady||(this._toldNotReady=!0,console.warn("[@wcstack/camera] [wcs/command-not-ready] start() was refused: no stream is attached, so nothing is recorded. It goes to `error` too. Wire a camera's stream to the recorder first. (Said once per element.)",this._target))}stop(){this._recorder&&"inactive"!==this._recorder.state&&this._recorder.stop()}pause(){this._recorder&&"recording"===this._recorder.state&&this._recorder.pause()}resume(){this._recorder&&"paused"===this._recorder.state&&this._recorder.resume()}observe(){return this._ready}dispose(){if(this._gen++,this._recorder&&"inactive"!==this._recorder.state)try{this._recorder.stop()}catch{}this._recorder=null,this._revokeUrl(),this._stream=null,this._recording=!1,this._paused=!1}_assembleBlob(){const e=new Blob(this._chunks,this._mimeType?{type:this._mimeType}:void 0);this._chunks=[],this._revokeUrl();const t=this._createUrl(e);this._blob=e,this._objectURL=t;const i={blob:e,objectURL:t,mimeType:this._mimeType,duration:this._duration};this._dispatch("wcs-recorder:recorded",i)}_revokeUrl(){this._objectURL&&"undefined"!=typeof URL&&"function"==typeof URL.revokeObjectURL&&URL.revokeObjectURL(this._objectURL),this._objectURL=null}_createUrl(e){return"undefined"!=typeof URL&&"function"==typeof URL.createObjectURL?URL.createObjectURL(e):""}_isTypeSupported(e){return globalThis.MediaRecorder.isTypeSupported(e)}_now(){return performance.now()}_elapsed(){return Math.max(0,Math.round(this._now()-this._startTime))}}class S extends HTMLElement{static hasConnectedCallbackPromise=!0;static wcBindable={...I.wcBindable,inputs:[{name:"mimeType",attribute:"mime-type"},{name:"timeslice",attribute:"timeslice"},{name:"audioBitsPerSecond",attribute:"audio-bits"},{name:"videoBitsPerSecond",attribute:"video-bits"}],commands:I.wcBindable.commands};_core;_connectedCallbackPromise=Promise.resolve();_internals=null;constructor(){super(),this._core=new I(this),this._internals=this._initInternals(),this._wireStates({"wcs-recorder:recording-changed":e=>({recording:!0===e}),"wcs-recorder:paused-changed":e=>({paused:!0===e}),"wcs-recorder:error":e=>({error:null!=e})})}get debugStates(){return this._internals?[...this._internals.states]:[]}_initInternals(){try{if("function"!=typeof this.attachInternals)return null;const e=this.attachInternals();return e.states.add("wcs-probe"),e.states.delete("wcs-probe"),e}catch{return null}}_wireStates(e){if(null===this._internals)return;const t=this._internals.states;for(const[i,s]of Object.entries(e))this.addEventListener(i,e=>{const i=this.hasAttribute("debug-states");for(const[r,n]of Object.entries(s(e.detail))){try{n?t.add(r):t.delete(r)}catch{}i&&this.toggleAttribute(`data-wcs-state-${r}`,n)}})}get connectedCallbackPromise(){return this._connectedCallbackPromise}get mimeType(){return this._core.mimeType}set mimeType(e){P(this,"mime-type",e)}get timeslice(){return this._numberAttr("timeslice")}set timeslice(e){P(this,"timeslice",e)}get audioBitsPerSecond(){return this._numberAttr("audio-bits")}set audioBitsPerSecond(e){P(this,"audio-bits",e)}get videoBitsPerSecond(){return this._numberAttr("video-bits")}set videoBitsPerSecond(e){P(this,"video-bits",e)}get recording(){return this._core.recording}get paused(){return this._core.paused}get duration(){return this._core.duration}get blob(){return this._core.blob}get objectURL(){return this._core.objectURL}get error(){return this._core.error}get errorInfo(){return this._core.errorInfo}attachStream(e){this._core.attachStream(e)}start(){this._core.start(this._options())}stop(){this._core.stop()}pause(){this._core.pause()}resume(){this._core.resume()}_numberAttr(e){const t=this.getAttribute(e);if(null===t||""===t.trim())return NaN;const i=Number(t);return Number.isFinite(i)?i:NaN}_options(){const e={},t=this.getAttribute("mime-type")??"";return t&&(e.mimeType=t),Number.isFinite(this.timeslice)&&(e.timeslice=this.timeslice),Number.isFinite(this.audioBitsPerSecond)&&(e.audioBitsPerSecond=this.audioBitsPerSecond),Number.isFinite(this.videoBitsPerSecond)&&(e.videoBitsPerSecond=this.videoBitsPerSecond),e}connectedCallback(){b(this),this.style.display="none",this._connectedCallbackPromise=this._core.observe()}disconnectedCallback(){this._core.dispose()}}var k;!function(t=customElements){t.get(e.tagNames.camera)||t.define(e.tagNames.camera,A),t.get(e.tagNames.recorder)||t.define(e.tagNames.recorder,S)}(k);
2
2
  //# sourceMappingURL=auto.min.js.map