@assistant-ui/react
Version:
Typescript/React library for AI Chat
68 lines (67 loc) • 2.41 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/runtimes/adapters/speech/WebSpeechSynthesisAdapter.ts
var WebSpeechSynthesisAdapter_exports = {};
__export(WebSpeechSynthesisAdapter_exports, {
WebSpeechSynthesisAdapter: () => WebSpeechSynthesisAdapter
});
module.exports = __toCommonJS(WebSpeechSynthesisAdapter_exports);
var WebSpeechSynthesisAdapter = class {
speak(text) {
const utterance = new SpeechSynthesisUtterance(text);
const subscribers = /* @__PURE__ */ new Set();
const handleEnd = (reason, error) => {
if (res.status.type === "ended") return;
res.status = { type: "ended", reason, error };
subscribers.forEach((handler) => handler());
};
utterance.addEventListener("end", () => handleEnd("finished"));
utterance.addEventListener("error", (e) => handleEnd("error", e.error));
window.speechSynthesis.speak(utterance);
const res = {
status: { type: "running" },
cancel: () => {
window.speechSynthesis.cancel();
handleEnd("cancelled");
},
subscribe: (callback) => {
if (res.status.type === "ended") {
let cancelled = false;
queueMicrotask(() => {
if (!cancelled) callback();
});
return () => {
cancelled = true;
};
} else {
subscribers.add(callback);
return () => {
subscribers.delete(callback);
};
}
}
};
return res;
}
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
WebSpeechSynthesisAdapter
});
//# sourceMappingURL=WebSpeechSynthesisAdapter.js.map
;