jadq-x-vue
Version:
Craft AI-driven interfaces effortlessly
56 lines (55 loc) • 1.92 kB
JavaScript
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
};