@wcstack/speech 1.30.0 → 1.32.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
@@ -265,6 +265,10 @@ core.speak("こんにちは。");
265
265
 
266
266
  Core の構造サーフェスは wcstack I/O ノード横断の規範です([async-io-node-guidelines §3.9](../../docs/async-io-node-guidelines.ja.md))。要素なしで signals に束縛するには [@wcstack/signals — Core を直接束縛する](../signals/README.ja.md#core-を直接束縛する要素なし) を参照。
267
267
 
268
+ ## アクセシビリティ
269
+
270
+ **WCAG 1.4.2 Audio Control(レベル A)**: 合成音声も音声である — ユーザー操作なしに始まりうる・長く続きうるなら、システム音量と独立の可視の停止手段(`<wcs-speak>` の `pause` / `cancel` コマンド)を必ず用意する。合成音声はスクリーンリーダー自身の声とも正面衝突する: ユーザー自身のリーダーが読み上げるべき適切なマークアップの代わりに `<wcs-speak>` を使ってはならない(リーダーは*ユーザーが選んだ*声・速度・言語で話す)。認識側の `<wcs-listen>` は入力手段であり、モーションセンサーと同じ扱いを: 同じ操作への並行入力(タイピング)と、マイクを止める可視の手段(`stop` / `abort`)を常に用意する。
271
+
268
272
  ## ライセンス
269
273
 
270
274
  MIT
package/README.md CHANGED
@@ -266,6 +266,10 @@ core.speak("Hello, world.");
266
266
 
267
267
  The structural Core surface is normative across wcstack IO nodes ([async-io-node-guidelines §3.9](../../docs/async-io-node-guidelines.md)); to bind it into signals with no element at all, see [@wcstack/signals — Binding a Core directly](../signals/README.md#binding-a-core-directly-no-element).
268
268
 
269
+ ## Accessibility
270
+
271
+ **WCAG 1.4.2 Audio Control (Level A)**: synthesized speech is audio — if it can start without a user action or run long, give the user a visible way to silence it (`<wcs-speak>`'s `pause` / `cancel` commands), independent of system volume. Synthesized speech also collides head-on with a screen reader's own voice: never use `<wcs-speak>` as a substitute for proper markup that the user's own reader would announce (their reader speaks in the voice, speed, and language *they* chose). For recognition, `<wcs-listen>` is an input method — treat it like the motion sensors: always a parallel input (typing) for the same action, and a visible way to stop the microphone (`stop` / `abort`).
272
+
269
273
  ## License
270
274
 
271
275
  MIT
package/dist/auto.min.js CHANGED
@@ -1,2 +1,2 @@
1
- const e={autoTrigger:!0,triggerAttribute:"data-speaktarget",listenTriggerAttribute:"data-listentarget",tagNames:{speak:"wcs-speak",listen:"wcs-listen"}},t="capability-missing",s="not-allowed",n="not-readable",i="no-speech",r="network-error",a="aborted",o="invalid-argument",c="speech-error";const u="capability-missing",h="not-allowed",l="aborted",d="not-readable",p="network-error",_="invalid-argument",g="synthesis-failed",m="speech-error";class b extends EventTarget{static wcBindable={protocol:"wc-bindable",version:1,properties:[{name:"voices",event:"wcs-speak:voices-changed",semantics:"state"},{name:"speaking",event:"wcs-speak:speaking-changed",semantics:"state"},{name:"paused",event:"wcs-speak:paused-changed",semantics:"state"},{name:"pending",event:"wcs-speak:pending-changed",semantics:"state"},{name:"charIndex",event:"wcs-speak:boundary",semantics:"event",getter:e=>e.detail?.charIndex??null},{name:"spokenWord",event:"wcs-speak:boundary",semantics:"event",getter:e=>e.detail?.word??null},{name:"error",event:"wcs-speak:error",semantics:"state"},{name:"errorInfo",event:"wcs-speak:error-info-changed",semantics:"state"},{name:"unsupported",event:"wcs-speak:unsupported-changed",semantics:"state"}],commands:[{name:"speak"},{name:"cancel"},{name:"pause"},{name:"resume"}]};_target;_voices=[];_rawVoices=[];_speaking=!1;_paused=!1;_pending=!1;_charIndex=null;_spokenWord=null;_error=null;_errorInfo=null;_unsupported=!1;_queued=0;_started=0;_gen=0;_voicesSubscribed=!1;_ready=Promise.resolve();constructor(e){super(),this._target=e??this,this._setUnsupported(!this._hasApi()),this._initVoices()}get voices(){return this._voices}get speaking(){return this._speaking}get paused(){return this._paused}get pending(){return this._pending}get charIndex(){return this._charIndex}get spokenWord(){return this._spokenWord}get error(){return this._error}get errorInfo(){return this._errorInfo}get unsupported(){return this._unsupported}get ready(){return this._ready}_setVoices(e){this._voicesEqual(this._voices,e)||(this._voices=e,this._target.dispatchEvent(new CustomEvent("wcs-speak:voices-changed",{detail:e,bubbles:!0})))}_voicesEqual(e,t){if(e.length!==t.length)return!1;for(let s=0;s<e.length;s++){const n=e[s],i=t[s];if(n.name!==i.name||n.lang!==i.lang||n.default!==i.default||n.localService!==i.localService||n.voiceURI!==i.voiceURI)return!1}return!0}_setSpeaking(e){this._speaking!==e&&(this._speaking=e,this._target.dispatchEvent(new CustomEvent("wcs-speak:speaking-changed",{detail:e,bubbles:!0})))}_setPaused(e){this._paused!==e&&(this._paused=e,this._target.dispatchEvent(new CustomEvent("wcs-speak:paused-changed",{detail:e,bubbles:!0})))}_setPending(e){this._pending!==e&&(this._pending=e,this._target.dispatchEvent(new CustomEvent("wcs-speak:pending-changed",{detail:e,bubbles:!0})))}_setBoundary(e,t){this._charIndex===e&&this._spokenWord===t||(this._charIndex=e,this._spokenWord=t,this._target.dispatchEvent(new CustomEvent("wcs-speak:boundary",{detail:{charIndex:e,word:t},bubbles:!0})))}_setError(e){this._error!==e&&(this._error=e,this._commitErrorInfo(null===e?null:function(e){const{error:t,message:s}=e;switch(t){case"unsupported":return{code:u,phase:"probe",recoverable:!1,message:s};case"not-allowed":return{code:h,phase:"start",recoverable:!1,message:s};case"canceled":case"interrupted":return{code:l,phase:"execute",recoverable:!0,message:s};case"audio-busy":return{code:d,phase:"execute",recoverable:!0,message:s};case"audio-hardware":return{code:d,phase:"execute",recoverable:!1,message:s};case"network":return{code:p,phase:"execute",recoverable:!0,message:s};case"language-unavailable":case"voice-unavailable":case"text-too-long":case"invalid-argument":return{code:_,phase:"start",recoverable:!1,message:s};case"synthesis-unavailable":case"synthesis-failed":return{code:g,phase:"execute",recoverable:!1,message:s};default:return{code:m,phase:"execute",recoverable:!1,message:s}}}(e)),this._target.dispatchEvent(new CustomEvent("wcs-speak:error",{detail:e,bubbles:!0})))}_commitErrorInfo(e){this._errorInfo=e,this._target.dispatchEvent(new CustomEvent("wcs-speak:error-info-changed",{detail:e,bubbles:!0}))}_setUnsupported(e){this._unsupported!==e&&(this._unsupported=e,this._target.dispatchEvent(new CustomEvent("wcs-speak:unsupported-changed",{detail:e,bubbles:!0})))}speak(e,t={}){if(!this._hasApi())return void this._setError(this._unsupportedError());if("string"!=typeof e||""===e.trim())return;const s=window.speechSynthesis,n=new window.SpeechSynthesisUtterance(e);if("number"==typeof t.rate&&(n.rate=t.rate),"number"==typeof t.pitch&&(n.pitch=t.pitch),"number"==typeof t.volume&&(n.volume=t.volume),"string"==typeof t.lang&&""!==t.lang&&(n.lang=t.lang),"string"==typeof t.voice&&""!==t.voice){const e=this._rawVoices.find(e=>e.name===t.voice);e&&(n.voice=e)}const i=this._gen;let r=!1;n.onstart=()=>{i===this._gen&&(r=!0,this._queued=Math.max(0,this._queued-1),this._started++,this._setSpeaking(!0),this._setPending(this._queued>0),this._setBoundary(null,null))},n.onboundary=t=>{if(i===this._gen)try{const s=t.charIndex,n=t.charLength,i="number"==typeof n&&n>0?e.substring(s,s+n):e.slice(s).match(/^\S+/)?.[0]??"";this._setBoundary(s,i)}catch{}},n.onpause=()=>{i===this._gen&&this._setPaused(!0)},n.onresume=()=>{i===this._gen&&this._setPaused(!1)},n.onend=()=>{i===this._gen&&this._finishUtterance(r)},n.onerror=e=>{i===this._gen&&(this._setError(this._normalizeError(e)),this._finishUtterance(r))},this._setError(null),this._queued++,this._setPending(!0),s.speak(n)}cancel(){this._hasApi()&&(this._gen++,this._paused&&window.speechSynthesis.resume(),window.speechSynthesis.cancel(),this._queued=0,this._started=0,this._setSpeaking(!1),this._setPending(!1),this._setPaused(!1),this._setBoundary(null,null))}pause(){this._hasApi()&&window.speechSynthesis.pause()}resume(){this._hasApi()&&window.speechSynthesis.resume()}reinitVoices(){this._voicesSubscribed||this._initVoices()}observe(){return this.reinitVoices(),this._ready}dispose(){this._voicesSubscribed=!1,this._gen++,this._queued=0,this._started=0,this._speaking=!1,this._paused=!1,this._pending=!1,this._hasApi()&&window.speechSynthesis.removeEventListener("voiceschanged",this._onVoicesChanged)}_finishUtterance(e){e?this._started=Math.max(0,this._started-1):this._queued=Math.max(0,this._queued-1),this._setSpeaking(this._started>0),this._setPending(this._queued>0),0===this._started&&0===this._queued&&(this._setPaused(!1),this._setBoundary(null,null))}_hasApi(){return"undefined"!=typeof window&&!!window.speechSynthesis&&"function"==typeof window.SpeechSynthesisUtterance}_initVoices(){this._hasApi()&&(this._voicesSubscribed=!0,this._loadVoices(),window.speechSynthesis.addEventListener("voiceschanged",this._onVoicesChanged))}_onVoicesChanged=()=>{this._loadVoices()};_loadVoices(){const e=window.speechSynthesis.getVoices()??[];this._rawVoices=e,this._setVoices(e.map(e=>this._normalizeVoice(e)))}_normalizeVoice(e){return{name:e.name,lang:e.lang,default:e.default,localService:e.localService,voiceURI:e.voiceURI}}_normalizeError(e){const t=e.error??"synthesis-failed";return{error:t,message:`Speech synthesis failed: ${t}.`}}_unsupportedError(){return{error:"unsupported",message:"SpeechSynthesis API is not available in this environment."}}}let v=!1;function f(t){const s=t.target;if(!(s instanceof Element))return;let n;try{n=s.closest(`[${e.triggerAttribute}]`)}catch{return}if(!n)return;const i=n.getAttribute(e.triggerAttribute);if(!i)return;const r=customElements.get(e.tagNames.speak),a=document.getElementById(i);if(!(r&&a instanceof r))return;const o=n.getAttribute("data-speaktext"),c=null!==o?o:n.textContent.trim();t.preventDefault(),a.speak(c)}function w(e,t){let s=Object.getPrototypeOf(e);for(;null!==s;){const e=Object.getOwnPropertyDescriptor(s,t);if(void 0!==e)return"function"==typeof e.get||"function"==typeof e.set;s=Object.getPrototypeOf(s)}return!1}function y(e){const t=e.constructor?.wcBindable,s=t?.inputs;if(void 0!==s)for(const t of s){const s=t.name;if(!Object.prototype.hasOwnProperty.call(e,s))continue;if(!w(e,s))continue;const n=e,i=n[s];delete n[s],n[s]=i}}class k extends HTMLElement{static hasConnectedCallbackPromise=!0;static wcBindable={...b.wcBindable,inputs:[{name:"say"},{name:"rate",attribute:"rate"},{name:"pitch",attribute:"pitch"},{name:"volume",attribute:"volume"},{name:"voice",attribute:"voice"},{name:"lang",attribute:"lang"},{name:"manual",attribute:"manual"}],commands:b.wcBindable.commands};_core;_say="";_connectedCallbackPromise=Promise.resolve();_internals=null;constructor(){super(),this._internals=this._initInternals(),this._wireStates({"wcs-speak:speaking-changed":e=>({speaking:!0===e}),"wcs-speak:paused-changed":e=>({paused:!0===e}),"wcs-speak:pending-changed":e=>({pending:!0===e}),"wcs-speak:unsupported-changed":e=>({unsupported:!0===e}),"wcs-speak:error":e=>({error:null!=e})}),this._core=new b(this)}get connectedCallbackPromise(){return this._connectedCallbackPromise}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[s,n]of Object.entries(e))this.addEventListener(s,e=>{const s=this.hasAttribute("debug-states");for(const[i,r]of Object.entries(n(e.detail))){try{r?t.add(i):t.delete(i)}catch{}s&&this.toggleAttribute(`data-wcs-state-${i}`,r)}})}get rate(){return this._numberAttr("rate",1)}set rate(e){this.setAttribute("rate",String(e))}get pitch(){return this._numberAttr("pitch",1)}set pitch(e){this.setAttribute("pitch",String(e))}get volume(){return this._numberAttr("volume",1)}set volume(e){this.setAttribute("volume",String(e))}get voice(){return this.getAttribute("voice")??""}set voice(e){null==e?this.removeAttribute("voice"):this.setAttribute("voice",String(e))}get lang(){return this.getAttribute("lang")??""}set lang(e){null==e?this.removeAttribute("lang"):this.setAttribute("lang",String(e))}get manual(){return this.hasAttribute("manual")}set manual(e){e?this.setAttribute("manual",""):this.removeAttribute("manual")}get say(){return this._say}set say(e){if(null==e)return;if(this.manual)return;const t=String(e);t!==this._say&&(this._say=t,this.speak(t))}get voices(){return this._core.voices}get speaking(){return this._core.speaking}get paused(){return this._core.paused}get pending(){return this._core.pending}get charIndex(){return this._core.charIndex}get spokenWord(){return this._core.spokenWord}get error(){return this._core.error}get errorInfo(){return this._core.errorInfo}get unsupported(){return this._core.unsupported}speak(e){this._core.speak(e,this._options())}cancel(){this._core.cancel()}pause(){this._core.pause()}resume(){this._core.resume()}_numberAttr(e,t){const s=this.getAttribute(e);if(null===s||""===s.trim())return t;const n=Number(s);return Number.isFinite(n)?n:t}_options(){return{rate:this.rate,pitch:this.pitch,volume:this.volume,voice:this.voice,lang:this.lang}}connectedCallback(){y(this),this.style.display="none",v||(v=!0,document.addEventListener("click",f)),this._connectedCallbackPromise=this._core.observe()}disconnectedCallback(){this._core.dispose()}}class E extends EventTarget{static wcBindable={protocol:"wc-bindable",version:1,properties:[{name:"interimTranscript",event:"wcs-listen:interim-changed",semantics:"state"},{name:"finalTranscript",event:"wcs-listen:final-changed",semantics:"state"},{name:"result",event:"wcs-listen:result",semantics:"event"},{name:"listening",event:"wcs-listen:listening-changed",semantics:"state"},{name:"permission",event:"wcs-listen:permission-changed",semantics:"state"},{name:"error",event:"wcs-listen:error",semantics:"state"},{name:"errorInfo",event:"wcs-listen:error-info-changed",semantics:"state"},{name:"unsupported",event:"wcs-listen:unsupported-changed",semantics:"state"}],commands:[{name:"start"},{name:"stop"},{name:"abort"}]};_target;_recognition=null;_interimTranscript="";_finalTranscript="";_result=null;_listening=!1;_permission="prompt";_error=null;_errorInfo=null;_unsupported=!1;_active=!1;_continuous=!1;_maxRestarts=0;_restartCount=0;_permissionStatus=null;_permissionSubscribed=!1;_permGen=0;_ready=Promise.resolve();constructor(e){super(),this._target=e??this;const t=this._getCtor();this._setUnsupported(!t),t&&(this._recognition=new t,this._attachHandlers(this._recognition)),this._initPermission()}get interimTranscript(){return this._interimTranscript}get finalTranscript(){return this._finalTranscript}get result(){return this._result}get listening(){return this._listening}get permission(){return this._permission}get error(){return this._error}get errorInfo(){return this._errorInfo}get unsupported(){return this._unsupported}get ready(){return this._ready}_setInterim(e){this._interimTranscript!==e&&(this._interimTranscript=e,this._target.dispatchEvent(new CustomEvent("wcs-listen:interim-changed",{detail:e,bubbles:!0})))}_setFinal(e){this._finalTranscript!==e&&(this._finalTranscript=e,this._target.dispatchEvent(new CustomEvent("wcs-listen:final-changed",{detail:e,bubbles:!0})))}_setResult(e){this._result=e,this._target.dispatchEvent(new CustomEvent("wcs-listen:result",{detail:e,bubbles:!0}))}_setListening(e){this._listening!==e&&(this._listening=e,this._target.dispatchEvent(new CustomEvent("wcs-listen:listening-changed",{detail:e,bubbles:!0})))}_setPermission(e){this._permission!==e&&(this._permission=e,this._target.dispatchEvent(new CustomEvent("wcs-listen:permission-changed",{detail:e,bubbles:!0})))}_setError(e){this._error!==e&&(this._error=e,this._commitErrorInfo(null===e?null:function(e){const{error:u,message:h}=e;switch(u){case"unsupported":return{code:t,phase:"probe",recoverable:!1,message:h};case"not-allowed":case"service-not-allowed":return{code:s,phase:"start",recoverable:!1,message:h};case"audio-capture":return{code:n,phase:"start",recoverable:!1,message:h};case"no-speech":return{code:i,phase:"execute",recoverable:!0,message:h};case"network":return{code:r,phase:"execute",recoverable:!0,message:h};case"aborted":return{code:a,phase:"execute",recoverable:!0,message:h};case"language-not-supported":case"bad-grammar":return{code:o,phase:"start",recoverable:!1,message:h};default:return{code:c,phase:"execute",recoverable:!1,message:h}}}(e)),this._target.dispatchEvent(new CustomEvent("wcs-listen:error",{detail:e,bubbles:!0})))}_commitErrorInfo(e){this._errorInfo=e,this._target.dispatchEvent(new CustomEvent("wcs-listen:error-info-changed",{detail:e,bubbles:!0}))}_setUnsupported(e){this._unsupported!==e&&(this._unsupported=e,this._target.dispatchEvent(new CustomEvent("wcs-listen:unsupported-changed",{detail:e,bubbles:!0})))}start(e={}){this._recognition?this._active||(this._continuous=e.continuous??!1,this._maxRestarts="number"==typeof e.maxRestarts&&e.maxRestarts>=0?Math.floor(e.maxRestarts):0,this._restartCount=0,this._recognition.lang=e.lang??"",this._recognition.continuous=this._continuous,this._recognition.interimResults=e.interimResults??!1,"number"==typeof e.maxAlternatives&&(this._recognition.maxAlternatives=e.maxAlternatives),this._setInterim(""),this._setFinal(""),this._setError(null),this._active=!0,this._safeStart()):this._setError(this._unsupportedError())}stop(){this._recognition&&(this._active=!1,this._recognition.stop())}abort(){this._recognition&&(this._active=!1,this._recognition.abort())}reinitPermission(){this._permissionSubscribed||this._initPermission()}observe(){return this.reinitPermission(),this._ready}dispose(){if(this._active=!1,this._permissionSubscribed=!1,this._permGen++,this._recognition)try{this._recognition.abort()}catch{}this._listening=!1,this._permissionStatus&&(this._permissionStatus.removeEventListener("change",this._onPermissionChange),this._permissionStatus=null)}_attachHandlers(e){e.onstart=()=>{this._setListening(!0)},e.onresult=e=>{try{this._handleResult(e)}catch{}},e.onerror=e=>{this._setError(this._normalizeError(e)),!e||"not-allowed"!==e.error&&"service-not-allowed"!==e.error||(this._active=!1)},e.onend=()=>{if(this._active&&this._continuous&&this._restartCount<this._maxRestarts)return this._restartCount++,this._safeStart(),void(this._active||this._setListening(!1));this._setListening(!1),this._active=!1}}_handleResult(e){const t=e.results;let s="",n="";for(let i=e.resultIndex??0;i<t.length;i++){const e=t[i],r=e?.[0]?.transcript??"";e?.isFinal?n+=r:s+=r}""!==n&&this._setFinal(this._finalTranscript+n),this._setInterim(s),this._restartCount=0;const i=t[t.length-1];i&&this._setResult(this._normalizeResult(i))}_normalizeResult(e){const t=[];for(let s=0;s<e.length;s++)t.push({transcript:e[s]?.transcript??"",confidence:e[s]?.confidence??0});const s=t[0]??{transcript:"",confidence:0};return{transcript:s.transcript,confidence:s.confidence,isFinal:!!e.isFinal,alternatives:t}}_safeStart(){try{this._recognition.start()}catch{this._active=!1}}_getCtor(){const e="undefined"==typeof window?void 0:window;return e?.SpeechRecognition??e?.webkitSpeechRecognition??null}_initPermission(){if("undefined"==typeof navigator||!navigator.permissions||"function"!=typeof navigator.permissions.query)return void this._setPermission("unsupported");this._permissionSubscribed=!0;const e=++this._permGen;navigator.permissions.query({name:"microphone"}).then(t=>{e===this._permGen&&(this._permissionStatus=t,this._setPermission(t.state),t.addEventListener("change",this._onPermissionChange))},()=>{e===this._permGen&&this._setPermission("unsupported")})}_onPermissionChange=e=>{const t=e.target;this._setPermission(t.state)};_normalizeError(e){const t=e&&e.error?e.error:"aborted";return{error:t,message:`Speech recognition failed: ${t}.`}}_unsupportedError(){return{error:"unsupported",message:"SpeechRecognition API is not available in this environment."}}}let S=!1;function A(t){const s=t.target;if(!(s instanceof Element))return;let n;try{n=s.closest(`[${e.listenTriggerAttribute}]`)}catch{return}if(!n)return;const i=n.getAttribute(e.listenTriggerAttribute);if(!i)return;const r=customElements.get(e.tagNames.listen),a=document.getElementById(i);if(!(r&&a instanceof r))return;t.preventDefault();const o=a;o.listening?o.stop():o.start()}class x extends HTMLElement{static hasConnectedCallbackPromise=!0;static wcBindable={...E.wcBindable,properties:[...E.wcBindable.properties,{name:"trigger",event:"wcs-listen:trigger-changed",semantics:"state"}],inputs:[{name:"lang",attribute:"lang"},{name:"continuous",attribute:"continuous"},{name:"interim",attribute:"interim"},{name:"maxRestarts",attribute:"max-restarts"},{name:"manual",attribute:"manual"},{name:"trigger"}],commands:E.wcBindable.commands};_core;_trigger=!1;_connectedCallbackPromise=Promise.resolve();_internals=null;constructor(){super(),this._internals=this._initInternals(),this._wireStates({"wcs-listen:listening-changed":e=>({listening:!0===e}),"wcs-listen:unsupported-changed":e=>({unsupported:!0===e}),"wcs-listen:error":e=>({error:null!=e})}),this._core=new E(this)}get connectedCallbackPromise(){return this._connectedCallbackPromise}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[s,n]of Object.entries(e))this.addEventListener(s,e=>{const s=this.hasAttribute("debug-states");for(const[i,r]of Object.entries(n(e.detail))){try{r?t.add(i):t.delete(i)}catch{}s&&this.toggleAttribute(`data-wcs-state-${i}`,r)}})}get lang(){return this.getAttribute("lang")??""}set lang(e){null==e?this.removeAttribute("lang"):this.setAttribute("lang",String(e))}get continuous(){return this.hasAttribute("continuous")}set continuous(e){e?this.setAttribute("continuous",""):this.removeAttribute("continuous")}get interim(){return this.hasAttribute("interim")}set interim(e){e?this.setAttribute("interim",""):this.removeAttribute("interim")}get maxRestarts(){const e=this.getAttribute("max-restarts");if(null===e||""===e.trim())return 0;const t=Number(e);return Number.isFinite(t)&&t>=0?Math.floor(t):0}set maxRestarts(e){this.setAttribute("max-restarts",String(e))}get manual(){return this.hasAttribute("manual")}set manual(e){e?this.setAttribute("manual",""):this.removeAttribute("manual")}get interimTranscript(){return this._core.interimTranscript}get finalTranscript(){return this._core.finalTranscript}get result(){return this._core.result}get listening(){return this._core.listening}get permission(){return this._core.permission}get error(){return this._core.error}get errorInfo(){return this._core.errorInfo}get unsupported(){return this._core.unsupported}get trigger(){return this._trigger}set trigger(e){!!e&&(this._trigger=!0,this.start(),this._trigger=!1,this.dispatchEvent(new CustomEvent("wcs-listen:trigger-changed",{detail:!1,bubbles:!0})))}start(){this._core.start(this._options())}stop(){this._core.stop()}abort(){this._core.abort()}_options(){return{lang:this.lang,continuous:this.continuous,interimResults:this.interim,maxRestarts:this.maxRestarts}}connectedCallback(){y(this),this.style.display="none",S||(S=!0,document.addEventListener("click",A)),this._connectedCallbackPromise=this._core.observe(),this.manual||this.start()}disconnectedCallback(){this._core.dispose()}}customElements.get(e.tagNames.speak)||customElements.define(e.tagNames.speak,k),customElements.get(e.tagNames.listen)||customElements.define(e.tagNames.listen,x);
1
+ const e={autoTrigger:!0,triggerAttribute:"data-speaktarget",listenTriggerAttribute:"data-listentarget",tagNames:{speak:"wcs-speak",listen:"wcs-listen"}},t="capability-missing",s="not-allowed",n="not-readable",i="no-speech",r="network-error",a="aborted",o="invalid-argument",c="speech-error";const u="capability-missing",h="not-allowed",l="aborted",d="not-readable",p="network-error",_="invalid-argument",g="synthesis-failed",m="speech-error";class b extends EventTarget{static wcBindable={protocol:"wc-bindable",version:1,properties:[{name:"voices",event:"wcs-speak:voices-changed",semantics:"state"},{name:"speaking",event:"wcs-speak:speaking-changed",semantics:"state"},{name:"paused",event:"wcs-speak:paused-changed",semantics:"state"},{name:"pending",event:"wcs-speak:pending-changed",semantics:"state"},{name:"charIndex",event:"wcs-speak:boundary",semantics:"event",getter:e=>e.detail?.charIndex??null},{name:"spokenWord",event:"wcs-speak:boundary",semantics:"event",getter:e=>e.detail?.word??null},{name:"error",event:"wcs-speak:error",semantics:"state"},{name:"errorInfo",event:"wcs-speak:error-info-changed",semantics:"state"},{name:"unsupported",event:"wcs-speak:unsupported-changed",semantics:"state"}],commands:[{name:"speak"},{name:"cancel"},{name:"pause"},{name:"resume"}]};_target;_voices=[];_rawVoices=[];_speaking=!1;_paused=!1;_pending=!1;_charIndex=null;_spokenWord=null;_error=null;_errorInfo=null;_unsupported=!1;_queued=0;_started=0;_gen=0;_voicesSubscribed=!1;_ready=Promise.resolve();constructor(e){super(),this._target=e??this,this._setUnsupported(!this._hasApi()),this._initVoices()}get voices(){return this._voices}get speaking(){return this._speaking}get paused(){return this._paused}get pending(){return this._pending}get charIndex(){return this._charIndex}get spokenWord(){return this._spokenWord}get error(){return this._error}get errorInfo(){return this._errorInfo}get unsupported(){return this._unsupported}get ready(){return this._ready}_setVoices(e){this._voicesEqual(this._voices,e)||(this._voices=e,this._target.dispatchEvent(new CustomEvent("wcs-speak:voices-changed",{detail:e,bubbles:!0})))}_voicesEqual(e,t){if(e.length!==t.length)return!1;for(let s=0;s<e.length;s++){const n=e[s],i=t[s];if(n.name!==i.name||n.lang!==i.lang||n.default!==i.default||n.localService!==i.localService||n.voiceURI!==i.voiceURI)return!1}return!0}_setSpeaking(e){this._speaking!==e&&(this._speaking=e,this._target.dispatchEvent(new CustomEvent("wcs-speak:speaking-changed",{detail:e,bubbles:!0})))}_setPaused(e){this._paused!==e&&(this._paused=e,this._target.dispatchEvent(new CustomEvent("wcs-speak:paused-changed",{detail:e,bubbles:!0})))}_setPending(e){this._pending!==e&&(this._pending=e,this._target.dispatchEvent(new CustomEvent("wcs-speak:pending-changed",{detail:e,bubbles:!0})))}_setBoundary(e,t){this._charIndex===e&&this._spokenWord===t||(this._charIndex=e,this._spokenWord=t,this._target.dispatchEvent(new CustomEvent("wcs-speak:boundary",{detail:{charIndex:e,word:t},bubbles:!0})))}_setError(e){this._error!==e&&(this._error=e,this._commitErrorInfo(null===e?null:function(e){const{error:t,message:s}=e;switch(t){case"unsupported":return{code:u,phase:"probe",recoverable:!1,message:s};case"not-allowed":return{code:h,phase:"start",recoverable:!1,message:s};case"canceled":case"interrupted":return{code:l,phase:"execute",recoverable:!0,message:s};case"audio-busy":return{code:d,phase:"execute",recoverable:!0,message:s};case"audio-hardware":return{code:d,phase:"execute",recoverable:!1,message:s};case"network":return{code:p,phase:"execute",recoverable:!0,message:s};case"language-unavailable":case"voice-unavailable":case"text-too-long":case"invalid-argument":return{code:_,phase:"start",recoverable:!1,message:s};case"synthesis-unavailable":case"synthesis-failed":return{code:g,phase:"execute",recoverable:!1,message:s};default:return{code:m,phase:"execute",recoverable:!1,message:s}}}(e)),this._target.dispatchEvent(new CustomEvent("wcs-speak:error",{detail:e,bubbles:!0})))}_commitErrorInfo(e){this._errorInfo=e,this._target.dispatchEvent(new CustomEvent("wcs-speak:error-info-changed",{detail:e,bubbles:!0}))}_setUnsupported(e){this._unsupported!==e&&(this._unsupported=e,this._target.dispatchEvent(new CustomEvent("wcs-speak:unsupported-changed",{detail:e,bubbles:!0})))}speak(e,t={}){if(!this._hasApi())return void this._setError(this._unsupportedError());if("string"!=typeof e||""===e.trim())return;const s=window.speechSynthesis,n=new window.SpeechSynthesisUtterance(e);if("number"==typeof t.rate&&(n.rate=t.rate),"number"==typeof t.pitch&&(n.pitch=t.pitch),"number"==typeof t.volume&&(n.volume=t.volume),"string"==typeof t.lang&&""!==t.lang&&(n.lang=t.lang),"string"==typeof t.voice&&""!==t.voice){const e=this._rawVoices.find(e=>e.name===t.voice);e&&(n.voice=e)}const i=this._gen;let r=!1;n.onstart=()=>{i===this._gen&&(r=!0,this._queued=Math.max(0,this._queued-1),this._started++,this._setSpeaking(!0),this._setPending(this._queued>0),this._setBoundary(null,null))},n.onboundary=t=>{if(i===this._gen)try{const s=t.charIndex,n=t.charLength,i="number"==typeof n&&n>0?e.substring(s,s+n):e.slice(s).match(/^\S+/)?.[0]??"";this._setBoundary(s,i)}catch{}},n.onpause=()=>{i===this._gen&&this._setPaused(!0)},n.onresume=()=>{i===this._gen&&this._setPaused(!1)},n.onend=()=>{i===this._gen&&this._finishUtterance(r)},n.onerror=e=>{i===this._gen&&(this._setError(this._normalizeError(e)),this._finishUtterance(r))},this._setError(null),this._queued++,this._setPending(!0),s.speak(n)}cancel(){this._hasApi()&&(this._gen++,this._paused&&window.speechSynthesis.resume(),window.speechSynthesis.cancel(),this._queued=0,this._started=0,this._setSpeaking(!1),this._setPending(!1),this._setPaused(!1),this._setBoundary(null,null))}pause(){this._hasApi()&&window.speechSynthesis.pause()}resume(){this._hasApi()&&window.speechSynthesis.resume()}reinitVoices(){this._voicesSubscribed||this._initVoices()}observe(){return this.reinitVoices(),this._ready}dispose(){this._voicesSubscribed=!1,this._gen++,this._queued=0,this._started=0,this._speaking=!1,this._paused=!1,this._pending=!1,this._hasApi()&&window.speechSynthesis.removeEventListener("voiceschanged",this._onVoicesChanged)}_finishUtterance(e){e?this._started=Math.max(0,this._started-1):this._queued=Math.max(0,this._queued-1),this._setSpeaking(this._started>0),this._setPending(this._queued>0),0===this._started&&0===this._queued&&(this._setPaused(!1),this._setBoundary(null,null))}_hasApi(){return"undefined"!=typeof window&&!!window.speechSynthesis&&"function"==typeof window.SpeechSynthesisUtterance}_initVoices(){this._hasApi()&&(this._voicesSubscribed=!0,this._loadVoices(),window.speechSynthesis.addEventListener("voiceschanged",this._onVoicesChanged))}_onVoicesChanged=()=>{this._loadVoices()};_loadVoices(){const e=window.speechSynthesis.getVoices()??[];this._rawVoices=e,this._setVoices(e.map(e=>this._normalizeVoice(e)))}_normalizeVoice(e){return{name:e.name,lang:e.lang,default:e.default,localService:e.localService,voiceURI:e.voiceURI}}_normalizeError(e){const t=e.error??"synthesis-failed";return{error:t,message:`Speech synthesis failed: ${t}.`}}_unsupportedError(){return{error:"unsupported",message:"SpeechSynthesis API is not available in this environment."}}}let v=!1;function f(t){const s=t.target;if(!(s instanceof Element))return;let n;try{n=s.closest(`[${e.triggerAttribute}]`)}catch{return}if(!n)return;const i=n.getAttribute(e.triggerAttribute);if(!i)return;const r=customElements.get(e.tagNames.speak),a=document.getElementById(i);if(!(r&&a instanceof r))return;const o=n.getAttribute("data-speaktext"),c=null!==o?o:n.textContent.trim();t.preventDefault(),a.speak(c)}function w(e,t){let s=Object.getPrototypeOf(e);for(;null!==s;){const e=Object.getOwnPropertyDescriptor(s,t);if(void 0!==e)return"function"==typeof e.get||"function"==typeof e.set;s=Object.getPrototypeOf(s)}return!1}function y(e){const t=e.constructor?.wcBindable,s=t?.inputs;if(void 0!==s)for(const t of s){const s=t.name;if(!Object.prototype.hasOwnProperty.call(e,s))continue;if(!w(e,s))continue;const n=e,i=n[s];delete n[s],n[s]=i}}class k extends HTMLElement{static hasConnectedCallbackPromise=!0;static wcBindable={...b.wcBindable,inputs:[{name:"say"},{name:"rate",attribute:"rate"},{name:"pitch",attribute:"pitch"},{name:"volume",attribute:"volume"},{name:"voice",attribute:"voice"},{name:"lang",attribute:"lang"},{name:"manual",attribute:"manual"}],commands:b.wcBindable.commands};_core;_say="";_connectedCallbackPromise=Promise.resolve();_internals=null;constructor(){super(),this._internals=this._initInternals(),this._wireStates({"wcs-speak:speaking-changed":e=>({speaking:!0===e}),"wcs-speak:paused-changed":e=>({paused:!0===e}),"wcs-speak:pending-changed":e=>({pending:!0===e}),"wcs-speak:unsupported-changed":e=>({unsupported:!0===e}),"wcs-speak:error":e=>({error:null!=e})}),this._core=new b(this)}get connectedCallbackPromise(){return this._connectedCallbackPromise}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[s,n]of Object.entries(e))this.addEventListener(s,e=>{const s=this.hasAttribute("debug-states");for(const[i,r]of Object.entries(n(e.detail))){try{r?t.add(i):t.delete(i)}catch{}s&&this.toggleAttribute(`data-wcs-state-${i}`,r)}})}get rate(){return this._numberAttr("rate",1)}set rate(e){this.setAttribute("rate",String(e))}get pitch(){return this._numberAttr("pitch",1)}set pitch(e){this.setAttribute("pitch",String(e))}get volume(){return this._numberAttr("volume",1)}set volume(e){this.setAttribute("volume",String(e))}get voice(){return this.getAttribute("voice")??""}set voice(e){null==e?this.removeAttribute("voice"):this.setAttribute("voice",String(e))}get lang(){return this.getAttribute("lang")??""}set lang(e){null==e?this.removeAttribute("lang"):this.setAttribute("lang",String(e))}get manual(){return this.hasAttribute("manual")}set manual(e){e?this.setAttribute("manual",""):this.removeAttribute("manual")}get say(){return this._say}set say(e){if(null==e)return;if(this.manual)return;const t=String(e);t!==this._say&&(this._say=t,this.speak(t))}get voices(){return this._core.voices}get speaking(){return this._core.speaking}get paused(){return this._core.paused}get pending(){return this._core.pending}get charIndex(){return this._core.charIndex}get spokenWord(){return this._core.spokenWord}get error(){return this._core.error}get errorInfo(){return this._core.errorInfo}get unsupported(){return this._core.unsupported}speak(e){this._core.speak(e,this._options())}cancel(){this._core.cancel()}pause(){this._core.pause()}resume(){this._core.resume()}_numberAttr(e,t){const s=this.getAttribute(e);if(null===s||""===s.trim())return t;const n=Number(s);return Number.isFinite(n)?n:t}_options(){return{rate:this.rate,pitch:this.pitch,volume:this.volume,voice:this.voice,lang:this.lang}}connectedCallback(){y(this),this.style.display="none",v||(v=!0,document.addEventListener("click",f)),this._connectedCallbackPromise=this._core.observe()}disconnectedCallback(){this._core.dispose()}}class E extends EventTarget{static wcBindable={protocol:"wc-bindable",version:1,properties:[{name:"interimTranscript",event:"wcs-listen:interim-changed",semantics:"state"},{name:"finalTranscript",event:"wcs-listen:final-changed",semantics:"state"},{name:"result",event:"wcs-listen:result",semantics:"event"},{name:"listening",event:"wcs-listen:listening-changed",semantics:"state"},{name:"permission",event:"wcs-listen:permission-changed",semantics:"state"},{name:"error",event:"wcs-listen:error",semantics:"state"},{name:"errorInfo",event:"wcs-listen:error-info-changed",semantics:"state"},{name:"unsupported",event:"wcs-listen:unsupported-changed",semantics:"state"}],commands:[{name:"start"},{name:"stop"},{name:"abort"}]};_target;_recognition=null;_interimTranscript="";_finalTranscript="";_result=null;_listening=!1;_permission="prompt";_error=null;_errorInfo=null;_unsupported=!1;_active=!1;_continuous=!1;_maxRestarts=0;_restartCount=0;_permissionStatus=null;_permissionSubscribed=!1;_permGen=0;_ready=Promise.resolve();constructor(e){super(),this._target=e??this;const t=this._getCtor();this._setUnsupported(!t),t&&(this._recognition=new t,this._attachHandlers(this._recognition)),this._initPermission()}get interimTranscript(){return this._interimTranscript}get finalTranscript(){return this._finalTranscript}get result(){return this._result}get listening(){return this._listening}get permission(){return this._permission}get error(){return this._error}get errorInfo(){return this._errorInfo}get unsupported(){return this._unsupported}get ready(){return this._ready}_setInterim(e){this._interimTranscript!==e&&(this._interimTranscript=e,this._target.dispatchEvent(new CustomEvent("wcs-listen:interim-changed",{detail:e,bubbles:!0})))}_setFinal(e){this._finalTranscript!==e&&(this._finalTranscript=e,this._target.dispatchEvent(new CustomEvent("wcs-listen:final-changed",{detail:e,bubbles:!0})))}_setResult(e){this._result=e,this._target.dispatchEvent(new CustomEvent("wcs-listen:result",{detail:e,bubbles:!0}))}_setListening(e){this._listening!==e&&(this._listening=e,this._target.dispatchEvent(new CustomEvent("wcs-listen:listening-changed",{detail:e,bubbles:!0})))}_setPermission(e){this._permission!==e&&(this._permission=e,this._target.dispatchEvent(new CustomEvent("wcs-listen:permission-changed",{detail:e,bubbles:!0})))}_setError(e){this._error!==e&&(this._error=e,this._commitErrorInfo(null===e?null:function(e){const{error:u,message:h}=e;switch(u){case"unsupported":return{code:t,phase:"probe",recoverable:!1,message:h};case"not-allowed":case"service-not-allowed":return{code:s,phase:"start",recoverable:!1,message:h};case"audio-capture":return{code:n,phase:"start",recoverable:!1,message:h};case"no-speech":return{code:i,phase:"execute",recoverable:!0,message:h};case"network":return{code:r,phase:"execute",recoverable:!0,message:h};case"aborted":return{code:a,phase:"execute",recoverable:!0,message:h};case"language-not-supported":case"bad-grammar":return{code:o,phase:"start",recoverable:!1,message:h};default:return{code:c,phase:"execute",recoverable:!1,message:h}}}(e)),this._target.dispatchEvent(new CustomEvent("wcs-listen:error",{detail:e,bubbles:!0})))}_commitErrorInfo(e){this._errorInfo=e,this._target.dispatchEvent(new CustomEvent("wcs-listen:error-info-changed",{detail:e,bubbles:!0}))}_setUnsupported(e){this._unsupported!==e&&(this._unsupported=e,this._target.dispatchEvent(new CustomEvent("wcs-listen:unsupported-changed",{detail:e,bubbles:!0})))}start(e={}){this._recognition?this._active||(this._continuous=e.continuous??!1,this._maxRestarts="number"==typeof e.maxRestarts&&e.maxRestarts>=0?Math.floor(e.maxRestarts):0,this._restartCount=0,this._recognition.lang=e.lang??"",this._recognition.continuous=this._continuous,this._recognition.interimResults=e.interimResults??!1,"number"==typeof e.maxAlternatives&&(this._recognition.maxAlternatives=e.maxAlternatives),this._setInterim(""),this._setFinal(""),this._setError(null),this._active=!0,this._safeStart()):this._setError(this._unsupportedError())}stop(){this._recognition&&(this._active=!1,this._recognition.stop())}abort(){this._recognition&&(this._active=!1,this._recognition.abort())}reinitPermission(){this._permissionSubscribed||this._initPermission()}observe(){return this.reinitPermission(),this._ready}dispose(){if(this._active=!1,this._permissionSubscribed=!1,this._permGen++,this._recognition)try{this._recognition.abort()}catch{}this._listening=!1,this._permissionStatus&&(this._permissionStatus.removeEventListener("change",this._onPermissionChange),this._permissionStatus=null)}_attachHandlers(e){e.onstart=()=>{this._setListening(!0)},e.onresult=e=>{try{this._handleResult(e)}catch{}},e.onerror=e=>{this._setError(this._normalizeError(e)),!e||"not-allowed"!==e.error&&"service-not-allowed"!==e.error||(this._active=!1)},e.onend=()=>{if(this._active&&this._continuous&&this._restartCount<this._maxRestarts)return this._restartCount++,this._safeStart(),void(this._active||this._setListening(!1));this._setListening(!1),this._active=!1}}_handleResult(e){const t=e.results;let s="",n="";for(let i=e.resultIndex??0;i<t.length;i++){const e=t[i],r=e?.[0]?.transcript??"";e?.isFinal?n+=r:s+=r}""!==n&&this._setFinal(this._finalTranscript+n),this._setInterim(s),this._restartCount=0;const i=t[t.length-1];i&&this._setResult(this._normalizeResult(i))}_normalizeResult(e){const t=[];for(let s=0;s<e.length;s++)t.push({transcript:e[s]?.transcript??"",confidence:e[s]?.confidence??0});const s=t[0]??{transcript:"",confidence:0};return{transcript:s.transcript,confidence:s.confidence,isFinal:!!e.isFinal,alternatives:t}}_safeStart(){try{this._recognition.start()}catch{this._active=!1}}_getCtor(){const e="undefined"==typeof window?void 0:window;return e?.SpeechRecognition??e?.webkitSpeechRecognition??null}_initPermission(){if("undefined"==typeof navigator||!navigator.permissions||"function"!=typeof navigator.permissions.query)return void this._setPermission("unsupported");this._permissionSubscribed=!0;const e=++this._permGen;navigator.permissions.query({name:"microphone"}).then(t=>{e===this._permGen&&(this._permissionStatus=t,this._setPermission(t.state),t.addEventListener("change",this._onPermissionChange))},()=>{e===this._permGen&&this._setPermission("unsupported")})}_onPermissionChange=e=>{const t=e.target;this._setPermission(t.state)};_normalizeError(e){const t=e&&e.error?e.error:"aborted";return{error:t,message:`Speech recognition failed: ${t}.`}}_unsupportedError(){return{error:"unsupported",message:"SpeechRecognition API is not available in this environment."}}}let S=!1;function A(t){const s=t.target;if(!(s instanceof Element))return;let n;try{n=s.closest(`[${e.listenTriggerAttribute}]`)}catch{return}if(!n)return;const i=n.getAttribute(e.listenTriggerAttribute);if(!i)return;const r=customElements.get(e.tagNames.listen),a=document.getElementById(i);if(!(r&&a instanceof r))return;t.preventDefault();const o=a;o.listening?o.stop():o.start()}class x extends HTMLElement{static hasConnectedCallbackPromise=!0;static wcBindable={...E.wcBindable,properties:[...E.wcBindable.properties,{name:"trigger",event:"wcs-listen:trigger-changed",semantics:"state"}],inputs:[{name:"lang",attribute:"lang"},{name:"continuous",attribute:"continuous"},{name:"interim",attribute:"interim"},{name:"maxRestarts",attribute:"max-restarts"},{name:"manual",attribute:"manual"},{name:"trigger"}],commands:E.wcBindable.commands};_core;_trigger=!1;_connectedCallbackPromise=Promise.resolve();_internals=null;constructor(){super(),this._internals=this._initInternals(),this._wireStates({"wcs-listen:listening-changed":e=>({listening:!0===e}),"wcs-listen:unsupported-changed":e=>({unsupported:!0===e}),"wcs-listen:error":e=>({error:null!=e})}),this._core=new E(this)}get connectedCallbackPromise(){return this._connectedCallbackPromise}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[s,n]of Object.entries(e))this.addEventListener(s,e=>{const s=this.hasAttribute("debug-states");for(const[i,r]of Object.entries(n(e.detail))){try{r?t.add(i):t.delete(i)}catch{}s&&this.toggleAttribute(`data-wcs-state-${i}`,r)}})}get lang(){return this.getAttribute("lang")??""}set lang(e){null==e?this.removeAttribute("lang"):this.setAttribute("lang",String(e))}get continuous(){return this.hasAttribute("continuous")}set continuous(e){e?this.setAttribute("continuous",""):this.removeAttribute("continuous")}get interim(){return this.hasAttribute("interim")}set interim(e){e?this.setAttribute("interim",""):this.removeAttribute("interim")}get maxRestarts(){const e=this.getAttribute("max-restarts");if(null===e||""===e.trim())return 0;const t=Number(e);return Number.isFinite(t)&&t>=0?Math.floor(t):0}set maxRestarts(e){this.setAttribute("max-restarts",String(e))}get manual(){return this.hasAttribute("manual")}set manual(e){e?this.setAttribute("manual",""):this.removeAttribute("manual")}get interimTranscript(){return this._core.interimTranscript}get finalTranscript(){return this._core.finalTranscript}get result(){return this._core.result}get listening(){return this._core.listening}get permission(){return this._core.permission}get error(){return this._core.error}get errorInfo(){return this._core.errorInfo}get unsupported(){return this._core.unsupported}get trigger(){return this._trigger}set trigger(e){!!e&&(this._trigger=!0,this.start(),this._trigger=!1,this.dispatchEvent(new CustomEvent("wcs-listen:trigger-changed",{detail:!1,bubbles:!0})))}start(){this._core.start(this._options())}stop(){this._core.stop()}abort(){this._core.abort()}_options(){return{lang:this.lang,continuous:this.continuous,interimResults:this.interim,maxRestarts:this.maxRestarts}}connectedCallback(){y(this),this.style.display="none",S||(S=!0,document.addEventListener("click",A)),this._connectedCallbackPromise=this._core.observe(),this.manual||this.start()}disconnectedCallback(){this._core.dispose()}}var I;!function(t=customElements){t.get(e.tagNames.speak)||t.define(e.tagNames.speak,k),t.get(e.tagNames.listen)||t.define(e.tagNames.listen,x)}(I);
2
2
  //# sourceMappingURL=auto.min.js.map