import type { WidgetConfigResponse } from "./public-contracts.js"; import type { AccessibilityCapabilities } from "./accessibility/types.js"; export type AccessibilityFlags = WidgetConfigResponse["accessibility"]; /** * Imports each voice adapter independently from the CDN base bundle. A browser * without the matching Web Speech API receives an empty capability instead of * a blocking initialization error. */ export async function loadAccessibilityCapabilities( flags: AccessibilityFlags, ): Promise { const capabilities: AccessibilityCapabilities = {}; const imports: Promise[] = []; // Keep these as separate import() calls: build.mjs externalizes each target // into its own versioned file instead of embedding it in the IIFE. if (flags.stt) { imports.push( import("./accessibility/speech-to-text.js").then((module) => { const speechToText = module.createSpeechToText(); if (speechToText.isSupported) capabilities.speechToText = speechToText; }), ); } if (flags.tts) { imports.push( import("./accessibility/text-to-speech.js").then((module) => { const textToSpeech = module.createTextToSpeech(); if (textToSpeech.isSupported) capabilities.textToSpeech = textToSpeech; }), ); } await Promise.all(imports); return capabilities; }