jadq-x-vue
Version:
Craft AI-driven interfaces effortlessly
2 lines (1 loc) • 1.5 kB
JavaScript
;Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const _=require("../_util/hooks/useMergedState.js"),o=require("vue");let r;!r&&typeof window<"u"&&(r=window.SpeechRecognition||window.webkitSpeechRecognition);function b(g,h){const w=g,s=o.computed(()=>{const e=o.toValue(h);return typeof e=="object"?{controlledRecording:e.recording,onControlledRecordingChange:e.onRecordingChange,speechInControlled:typeof e.recording=="boolean"}:{controlledRecording:void 0,onControlledRecordingChange:void 0,speechInControlled:!1}}),S=o.computed(()=>s.value.controlledRecording),n=s.value.onControlledRecordingChange,m=s.value.speechInControlled,u=o.ref(null);o.watchEffect(e=>{if(typeof navigator<"u"&&"permissions"in navigator){let c=null;navigator.permissions.query({name:"microphone"}).then(t=>{u.value=t.state,t.onchange=function(){u.value=this.state},c=t}),e(()=>{c&&(c.onchange=null)})}});const d=o.computed(()=>r&&u.value!=="denied"),l=o.ref(null),[i,f]=_.default(!1,{value:S}),a=o.ref(!1),R=()=>{if(d.value&&!l.value){const e=new r;e.onstart=()=>{f(!0)},e.onend=()=>{f(!1)},e.onresult=c=>{var t,p,v;if(!a.value){const y=(v=(p=(t=c.results)==null?void 0:t[0])==null?void 0:p[0])==null?void 0:v.transcript;w(y)}a.value=!1},l.value=e}};return{speechPermission:d,triggerSpeech:e=>{e&&!i.value||(a.value=e,m?n==null||n(!i.value):(R(),l.value&&(i.value?(l.value.stop(),n==null||n(!1)):(l.value.start(),n==null||n(!0)))))},recording:i}}exports.default=b;