UNPKG

jadq-x-vue

Version:

Craft AI-driven interfaces effortlessly

56 lines (55 loc) 1.92 kB
import b from "../_util/hooks/useMergedState.mjs"; import { computed as u, toValue as E, ref as f, watchEffect as P } from "vue"; let i; !i && typeof window < "u" && (i = window.SpeechRecognition || window.webkitSpeechRecognition); function x(h, w) { const m = h, r = u(() => { const e = E(w); return typeof e == "object" ? { controlledRecording: e.recording, onControlledRecordingChange: e.onRecordingChange, speechInControlled: typeof e.recording == "boolean" } : { controlledRecording: void 0, onControlledRecordingChange: void 0, speechInControlled: !1 }; }), R = u(() => r.value.controlledRecording), n = r.value.onControlledRecordingChange, S = r.value.speechInControlled, s = f(null); P((e) => { if (typeof navigator < "u" && "permissions" in navigator) { let l = null; navigator.permissions.query({ name: "microphone" }).then((o) => { s.value = o.state, o.onchange = function() { s.value = this.state; }, l = o; }), e(() => { l && (l.onchange = null); }); } }); const d = u(() => i && s.value !== "denied"), t = f(null), [c, p] = b(!1, { value: R }), a = f(!1), y = () => { if (d.value && !t.value) { const e = new i(); e.onstart = () => { p(!0); }, e.onend = () => { p(!1); }, e.onresult = (l) => { var o, v, g; if (!a.value) { const I = (g = (v = (o = l.results) == null ? void 0 : o[0]) == null ? void 0 : v[0]) == null ? void 0 : g.transcript; m(I); } a.value = !1; }, t.value = e; } }; return { speechPermission: d, triggerSpeech: (e) => { e && !c.value || (a.value = e, S ? n == null || n(!c.value) : (y(), t.value && (c.value ? (t.value.stop(), n == null || n(!1)) : (t.value.start(), n == null || n(!0))))); }, recording: c }; } export { x as default };