ttp-agent-sdk 2.2.8 → 2.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/agent-widget.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-widget.js","mappings":"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","sources":["webpack://TTPAgentSDK/webpack/universalModuleDefinition","webpack://TTPAgentSDK/./node_modules/react/index.js","webpack://TTPAgentSDK/./node_modules/react/cjs/react-jsx-runtime.production.js","webpack://TTPAgentSDK/./node_modules/react/jsx-runtime.js","webpack://TTPAgentSDK/./node_modules/react/cjs/react.production.js","webpack://TTPAgentSDK/webpack/bootstrap","webpack://TTPAgentSDK/webpack/runtime/define property getters","webpack://TTPAgentSDK/webpack/runtime/hasOwnProperty shorthand","webpack://TTPAgentSDK/webpack/runtime/make namespace object","webpack://TTPAgentSDK/./src/core/EventEmitter.js","webpack://TTPAgentSDK/./src/core/WebSocketSingleton.js","webpack://TTPAgentSDK/./src/core/WebSocketManager.js","webpack://TTPAgentSDK/./src/core/AudioRecorder.js","webpack://TTPAgentSDK/./src/core/AudioPlayer.js","webpack://TTPAgentSDK/./src/core/VoiceSDK.js","webpack://TTPAgentSDK/./src/core/TextChatSDK.js","webpack://TTPAgentSDK/./src/react/VoiceButton.jsx","webpack://TTPAgentSDK/./src/vanilla/VoiceButton.js","webpack://TTPAgentSDK/./src/legacy/AgentSDK.js","webpack://TTPAgentSDK/./src/legacy/VoiceInterface.js","webpack://TTPAgentSDK/./src/legacy/TextInterface.js","webpack://TTPAgentSDK/./src/legacy/widget-translations.js","webpack://TTPAgentSDK/./src/legacy/TextChatWidget.js","webpack://TTPAgentSDK/./src/index.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TTPAgentSDK\"] = factory();\n\telse\n\t\troot[\"TTPAgentSDK\"] = factory();\n})(window, () => {\nreturn ","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function () {},\n enqueueReplaceState: function () {},\n enqueueSetState: function () {}\n },\n assign = Object.assign,\n emptyObject = {};\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray;\nfunction noop() {}\nvar ReactSharedInternals = { H: null, A: null, T: null, S: null },\n hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, props) {\n var refProp = props.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== refProp ? refProp : null,\n props: props\n };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n return ReactElement(oldElement.type, newKey, oldElement.props);\n}\nfunction isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n}\nfunction escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n return \"object\" === typeof element && null !== element && null != element.key\n ? escape(\"\" + element.key)\n : index.toString(36);\n}\nfunction resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop, noop)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"), (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback)\n return (\n (callback = callback(children)),\n (invokeCallback =\n \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != invokeCallback &&\n (escapedPrefix =\n invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (callback = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (children && children.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n invokeCallback\n )),\n array.push(callback)),\n 1\n );\n invokeCallback = 0;\n var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n children = i.call(children), i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n}\nfunction lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ctor = payload._result;\n ctor = ctor();\n ctor.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 1), (payload._result = moduleObject);\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 2), (payload._result = error);\n }\n );\n -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\n }\n if (1 === payload._status) return payload._result.default;\n throw payload._result;\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n Children = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n };\nexports.Activity = REACT_ACTIVITY_TYPE;\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n __proto__: null,\n c: function (size) {\n return ReactSharedInternals.H.useMemoCache(size);\n }\n};\nexports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n};\nexports.cacheSignal = function () {\n return null;\n};\nexports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" + element + \".\"\n );\n var props = assign({}, element.props),\n key = element.key;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n for (var childArray = Array(propName), i = 0; i < propName; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n return ReactElement(element.type, key, props);\n};\nexports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n var propName,\n props = {},\n key = null;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (props[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) props.children = children;\n else if (1 < childrenLength) {\n for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === props[propName] &&\n (props[propName] = childrenLength[propName]);\n return ReactElement(type, key, props);\n};\nexports.createRef = function () {\n return { current: null };\n};\nexports.forwardRef = function (render) {\n return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _payload: { _status: -1, _result: ctor },\n _init: lazyInitializer\n };\n};\nexports.memo = function (type, compare) {\n return {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n};\nexports.startTransition = function (scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n returnValue.then(noop, reportGlobalError);\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n};\nexports.unstable_useCacheRefresh = function () {\n return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, deps) {\n return ReactSharedInternals.H.useEffect(create, deps);\n};\nexports.useEffectEvent = function (callback) {\n return ReactSharedInternals.H.useEffectEvent(callback);\n};\nexports.useId = function () {\n return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n) {\n return ReactSharedInternals.H.useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n};\nexports.useTransition = function () {\n return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.2.0\";\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * EventEmitter - Simple event system for the VoiceSDK\n */\nexport default class EventEmitter {\n constructor() {\n this.events = {};\n }\n \n /**\n * Add event listener\n */\n on(event, callback) {\n if (!this.events[event]) {\n this.events[event] = [];\n }\n this.events[event].push(callback);\n }\n \n /**\n * Remove event listener\n */\n off(event, callback) {\n if (!this.events[event]) return;\n \n this.events[event] = this.events[event].filter(cb => cb !== callback);\n }\n \n /**\n * Emit event\n */\n emit(event, ...args) {\n if (!this.events[event]) return;\n \n this.events[event].forEach(callback => {\n try {\n callback(...args);\n } catch (error) {\n console.error(`Error in event listener for ${event}:`, error);\n }\n });\n }\n \n /**\n * Remove all listeners for an event\n */\n removeAllListeners(event) {\n if (event) {\n delete this.events[event];\n } else {\n this.events = {};\n }\n }\n}\n","/**\n * WebSocketSingleton - Ensures only one WebSocket connection per URL exists\n */\nimport EventEmitter from './EventEmitter.js';\n\nclass WebSocketSingleton extends EventEmitter {\n constructor() {\n super();\n this.connections = new Map(); // Map of URL -> WebSocket instance\n this.connectionCounts = new Map(); // Map of URL -> number of subscribers\n this.creatingConnections = new Set(); // Set of URLs currently being created\n }\n \n /**\n * Get or create a WebSocket connection\n */\n async getConnection(url, config = {}) {\n // If connection already exists, just return it\n if (this.connections.has(url)) {\n const existingConnection = this.connections.get(url);\n this.connectionCounts.set(url, (this.connectionCounts.get(url) || 0) + 1);\n return existingConnection;\n }\n \n // Check if we're already in the process of creating a connection\n if (this.creatingConnections && this.creatingConnections.has(url)) {\n // Wait for the existing creation to complete\n return new Promise((resolve) => {\n const checkConnection = () => {\n if (this.connections.has(url)) {\n const existingConnection = this.connections.get(url);\n this.connectionCounts.set(url, (this.connectionCounts.get(url) || 0) + 1);\n resolve(existingConnection);\n } else {\n setTimeout(checkConnection, 50);\n }\n };\n checkConnection();\n });\n }\n \n // Create new connection\n this.creatingConnections.add(url);\n const connection = new WebSocket(url);\n this.connections.set(url, connection);\n this.connectionCounts.set(url, 1);\n \n // Set up event forwarding\n connection.addEventListener('open', (event) => {\n this.creatingConnections.delete(url);\n this.emit('open', event, url);\n });\n \n connection.addEventListener('close', (event) => {\n this.creatingConnections.delete(url);\n this.connections.delete(url);\n this.connectionCounts.delete(url);\n this.emit('close', event, url);\n });\n \n connection.addEventListener('error', (event) => {\n this.creatingConnections.delete(url);\n this.emit('error', event, url);\n });\n \n connection.addEventListener('message', (event) => {\n this.emit('message', event, url);\n });\n \n return connection;\n }\n \n /**\n * Release a connection (decrement subscriber count)\n */\n releaseConnection(url) {\n if (!this.connections.has(url)) {\n return;\n }\n \n const currentCount = this.connectionCounts.get(url) || 0;\n const newCount = Math.max(0, currentCount - 1);\n this.connectionCounts.set(url, newCount);\n \n // If no more subscribers, close the connection\n if (newCount === 0) {\n const connection = this.connections.get(url);\n if (connection && connection.readyState === WebSocket.OPEN) {\n connection.close(1000, 'No more subscribers');\n }\n this.connections.delete(url);\n this.connectionCounts.delete(url);\n }\n }\n \n /**\n * Force close a connection\n */\n forceClose(url) {\n if (this.connections.has(url)) {\n const connection = this.connections.get(url);\n if (connection && connection.readyState === WebSocket.OPEN) {\n connection.close(1000, 'Force close');\n }\n this.connections.delete(url);\n this.connectionCounts.delete(url);\n }\n }\n \n /**\n * Get connection status\n */\n getConnectionStatus(url) {\n if (!this.connections.has(url)) {\n return { exists: false, readyState: null, subscribers: 0 };\n }\n \n const connection = this.connections.get(url);\n return {\n exists: true,\n readyState: connection.readyState,\n subscribers: this.connectionCounts.get(url) || 0\n };\n }\n \n /**\n * Get all active connections\n */\n getAllConnections() {\n const result = {};\n for (const [url, connection] of this.connections.entries()) {\n result[url] = {\n readyState: connection.readyState,\n subscribers: this.connectionCounts.get(url) || 0\n };\n }\n return result;\n }\n \n /**\n * Clear all connections (for testing)\n */\n clearAll() {\n for (const [url, connection] of this.connections.entries()) {\n if (connection && connection.readyState === WebSocket.OPEN) {\n connection.close(1000, 'Clear all');\n }\n }\n this.connections.clear();\n this.connectionCounts.clear();\n this.creatingConnections.clear();\n }\n}\n\n// Global singleton instance\nconst webSocketSingleton = new WebSocketSingleton();\n\nexport default webSocketSingleton;\n","/**\n * WebSocketManager - Uses singleton pattern to prevent multiple connections\n */\nimport EventEmitter from './EventEmitter.js';\nimport webSocketSingleton from './WebSocketSingleton.js';\n\nexport default class WebSocketManager extends EventEmitter {\n constructor(config) {\n super();\n this.config = config;\n this.ws = null;\n this.isConnected = false;\n this.connectionId = null;\n }\n \n /**\n * Connect to WebSocket using singleton\n */\n async connect() {\n return new Promise((resolve, reject) => {\n try {\n this.connectionId = Date.now() + '_' + Math.random().toString(36).substr(2, 9);\n \n // Store resolve/reject for later use\n this.connectResolve = resolve;\n this.connectReject = reject;\n \n // Get connection from singleton\n webSocketSingleton.getConnection(this.config.websocketUrl, this.config)\n .then((connection) => {\n this.ws = connection;\n \n // Set up event listeners (this will set up handlers that can resolve the promise)\n this.setupEventListeners();\n \n // If already connected, resolve immediately\n if (connection.readyState === WebSocket.OPEN) {\n this.isConnected = true;\n this.emit('connected');\n resolve();\n this.connectResolve = null;\n this.connectReject = null;\n }\n })\n .catch((error) => {\n console.error(`🔌 WebSocketManager: Connection failed ${this.connectionId}`, error);\n reject(error);\n this.connectResolve = null;\n this.connectReject = null;\n });\n \n } catch (error) {\n console.error(`🔌 WebSocketManager: Connection error ${this.connectionId}`, error);\n reject(error);\n this.connectResolve = null;\n this.connectReject = null;\n }\n });\n }\n \n /**\n * Set up event listeners\n */\n setupEventListeners() {\n if (!this.ws) return;\n \n // Use singleton's event forwarding\n const handleOpen = (event, url) => {\n if (url === this.config.websocketUrl) {\n this.isConnected = true;\n this.emit('connected');\n \n // Resolve the connect promise if it hasn't been resolved yet\n if (this.connectResolve) {\n this.connectResolve();\n this.connectResolve = null;\n this.connectReject = null;\n }\n }\n };\n \n const handleClose = (event, url) => {\n if (url === this.config.websocketUrl) {\n this.isConnected = false;\n this.emit('disconnected', event);\n }\n };\n \n const handleError = (event, url) => {\n if (url === this.config.websocketUrl) {\n this.emit('error', event);\n \n // Reject the connect promise if it hasn't been resolved yet\n if (this.connectReject) {\n this.connectReject(event);\n this.connectResolve = null;\n this.connectReject = null;\n }\n }\n };\n \n const handleMessage = (event, url) => {\n if (url === this.config.websocketUrl) {\n this.handleMessage(event);\n }\n };\n \n // Add event listeners\n webSocketSingleton.on('open', handleOpen);\n webSocketSingleton.on('close', handleClose);\n webSocketSingleton.on('error', handleError);\n webSocketSingleton.on('message', handleMessage);\n \n // Store handlers for cleanup\n this.eventHandlers = {\n open: handleOpen,\n close: handleClose,\n error: handleError,\n message: handleMessage\n };\n }\n \n /**\n * Disconnect from WebSocket\n */\n disconnect() {\n // Remove event listeners\n if (this.eventHandlers) {\n webSocketSingleton.off('open', this.eventHandlers.open);\n webSocketSingleton.off('close', this.eventHandlers.close);\n webSocketSingleton.off('error', this.eventHandlers.error);\n webSocketSingleton.off('message', this.eventHandlers.message);\n }\n \n // Release connection from singleton\n if (this.config.websocketUrl) {\n webSocketSingleton.releaseConnection(this.config.websocketUrl);\n }\n \n this.ws = null;\n this.isConnected = false;\n }\n \n /**\n * Send JSON message\n */\n sendMessage(message) {\n if (!this.isConnected || !this.ws) {\n // Silently ignore if not connected (may happen during cleanup/disconnect)\n return;\n }\n \n try {\n this.ws.send(JSON.stringify(message));\n } catch (error) {\n // Log but don't throw - connection may have closed between check and send\n console.warn('🔌 WebSocketManager: Failed to send message:', error.message);\n }\n }\n \n /**\n * Send binary data\n */\n sendBinary(data) {\n if (!this.isConnected || !this.ws) {\n // Silently ignore if not connected (may happen during cleanup/disconnect)\n return;\n }\n \n try {\n this.ws.send(data);\n } catch (error) {\n // Log but don't throw - connection may have closed between check and send\n console.warn('🔌 WebSocketManager: Failed to send binary data:', error.message);\n }\n }\n \n /**\n * Handle incoming messages\n */\n handleMessage(event) {\n // Check if it's binary data\n if (event.data instanceof ArrayBuffer) {\n this.emit('binaryAudio', event.data);\n return;\n } else if (event.data instanceof Blob) {\n event.data.arrayBuffer().then(arrayBuffer => {\n this.emit('binaryAudio', arrayBuffer);\n }).catch(err => {\n console.error('🔌 WebSocketManager: Error converting Blob to ArrayBuffer:', err);\n });\n return;\n }\n \n // Handle JSON messages\n try {\n const message = JSON.parse(event.data);\n \n // Handle barge-in related messages\n if (message.t === 'barge_in_ack' || message.t === 'stop_sending') {\n this.emit('bargeIn', message);\n }\n \n // Handle stop playing message\n if (message.t === 'stop_playing') {\n this.emit('stopPlaying', message);\n }\n \n this.emit('message', message);\n } catch (error) {\n this.emit('error', error);\n }\n }\n \n /**\n * Get connection status\n */\n getStatus() {\n return {\n isConnected: this.isConnected,\n readyState: this.ws ? this.ws.readyState : null,\n connectionId: this.connectionId\n };\n }\n \n /**\n * Get singleton status (for debugging)\n */\n static getSingletonStatus() {\n return webSocketSingleton.getAllConnections();\n }\n \n /**\n * Clear all singleton connections (for testing)\n */\n static clearAllConnections() {\n webSocketSingleton.clearAll();\n }\n}\n","/**\n * AudioRecorder - Handles audio recording using AudioWorklet\n */\nimport EventEmitter from './EventEmitter.js';\n\nexport default class AudioRecorder extends EventEmitter {\n constructor(config) {\n super();\n this.config = config;\n this.audioContext = null;\n this.audioWorkletNode = null;\n this.mediaStream = null;\n this.isRecording = false;\n }\n \n /**\n * Start audio recording\n */\n async start() {\n try {\n // Get user media\n this.mediaStream = await navigator.mediaDevices.getUserMedia({\n audio: {\n sampleRate: this.config.sampleRate,\n channelCount: 1,\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true\n }\n });\n \n // Create AudioContext\n this.audioContext = new (window.AudioContext || window.webkitAudioContext)({\n sampleRate: this.config.sampleRate\n });\n \n // Resume AudioContext if suspended\n if (this.audioContext.state === 'suspended') {\n await this.audioContext.resume();\n }\n \n // Load AudioWorklet module\n await this.audioContext.audioWorklet.addModule('/audio-processor.js');\n \n // Create AudioWorklet node\n this.audioWorkletNode = new AudioWorkletNode(this.audioContext, 'audio-processor');\n \n // Create media stream source\n const source = this.audioContext.createMediaStreamSource(this.mediaStream);\n source.connect(this.audioWorkletNode);\n \n // Handle messages from AudioWorklet\n this.audioWorkletNode.port.onmessage = (event) => {\n const { type, data } = event.data;\n \n if (type === 'pcm_audio_data') {\n this.emit('audioData', data);\n }\n };\n \n // Enable continuous mode\n this.audioWorkletNode.port.postMessage({\n type: 'setForceContinuous',\n data: { enabled: true }\n });\n \n this.isRecording = true;\n this.emit('recordingStarted');\n \n } catch (error) {\n this.emit('error', error);\n throw error;\n }\n }\n \n /**\n * Stop audio recording\n */\n async stop() {\n if (!this.isRecording) {\n return;\n }\n \n try {\n // Flush any remaining audio data\n if (this.audioWorkletNode) {\n this.audioWorkletNode.port.postMessage({ type: 'flush' });\n await new Promise(resolve => setTimeout(resolve, 100));\n }\n \n // Disconnect and cleanup\n if (this.mediaStream) {\n this.mediaStream.getTracks().forEach(track => track.stop());\n this.mediaStream = null;\n }\n \n if (this.audioContext && this.audioContext.state !== 'closed') {\n await this.audioContext.close();\n this.audioContext = null;\n }\n \n this.audioWorkletNode = null;\n this.isRecording = false;\n this.emit('recordingStopped');\n \n } catch (error) {\n this.emit('error', error);\n throw error;\n }\n }\n \n /**\n * Get recording status\n */\n getStatus() {\n return {\n isRecording: this.isRecording,\n audioContextState: this.audioContext ? this.audioContext.state : 'closed'\n };\n }\n \n /**\n * Cleanup resources\n */\n destroy() {\n this.stop();\n }\n}\n","/**\n * AudioPlayer - Handles audio playback with queue system\n */\nimport EventEmitter from './EventEmitter.js';\n\nexport default class AudioPlayer extends EventEmitter {\n constructor(config) {\n super();\n this.config = config;\n this.audioContext = null;\n this.audioQueue = [];\n this.isPlaying = false;\n this.isProcessingQueue = false;\n this.currentSource = null;\n }\n \n /**\n * Add audio data to playback queue\n */\n playAudio(audioData) {\n try {\n const audioBlob = this.createAudioBlob(audioData);\n this.audioQueue.push(audioBlob);\n \n // Process queue if not already playing or processing\n // Also check if we have a current source - if not, we should start processing\n if (!this.isPlaying && !this.isProcessingQueue && !this.currentSource) {\n setTimeout(() => this.processQueue(), 50);\n }\n } catch (error) {\n this.emit('playbackError', error);\n }\n }\n \n /**\n * Create audio blob from ArrayBuffer\n */\n createAudioBlob(arrayBuffer) {\n const uint8Array = new Uint8Array(arrayBuffer);\n \n // Detect audio format\n if (uint8Array.length >= 4) {\n // WAV header (RIFF)\n if (uint8Array[0] === 0x52 && uint8Array[1] === 0x49 && \n uint8Array[2] === 0x46 && uint8Array[3] === 0x46) {\n return new Blob([arrayBuffer], { type: 'audio/wav' });\n }\n \n // MP3 header\n if (uint8Array[0] === 0xFF && (uint8Array[1] & 0xE0) === 0xE0) {\n return new Blob([arrayBuffer], { type: 'audio/mpeg' });\n }\n \n // OGG header\n if (uint8Array[0] === 0x4F && uint8Array[1] === 0x67 && \n uint8Array[2] === 0x67 && uint8Array[3] === 0x53) {\n return new Blob([arrayBuffer], { type: 'audio/ogg' });\n }\n }\n \n // Default to WAV format\n return new Blob([arrayBuffer], { type: 'audio/wav' });\n }\n \n /**\n * Process audio queue\n */\n async processQueue() {\n // Prevent multiple simultaneous queue processing\n // Note: isPlaying check removed to allow seamless queue processing\n if (this.isProcessingQueue || this.audioQueue.length === 0) {\n return;\n }\n \n this.isProcessingQueue = true;\n \n const audioBlob = this.audioQueue.shift();\n if (!audioBlob) {\n this.isProcessingQueue = false;\n return;\n }\n \n try {\n // Check if we were playing BEFORE async operations (decode, etc.)\n // This ensures we detect the true state before any async delays\n const wasNotPlayingBefore = !this.isPlaying && this.currentSource === null;\n \n // Create AudioContext if not exists\n if (!this.audioContext) {\n this.audioContext = new (window.AudioContext || window.webkitAudioContext)();\n }\n \n const audioContext = this.audioContext;\n \n // Resume AudioContext if suspended\n if (audioContext.state === 'suspended') {\n await audioContext.resume();\n }\n \n // Create audio source from blob\n const arrayBuffer = await audioBlob.arrayBuffer();\n const audioBuffer = await audioContext.decodeAudioData(arrayBuffer);\n \n // Double-check state AFTER async operations - audio might have been stopped\n // If currentSource is still null and isPlaying is still false, we're truly starting\n const isTrulyStarting = wasNotPlayingBefore && !this.isPlaying && this.currentSource === null;\n \n const source = audioContext.createBufferSource();\n source.buffer = audioBuffer;\n source.connect(audioContext.destination);\n \n // Set state BEFORE emitting event to prevent race conditions\n this.currentSource = source;\n this.isPlaying = true;\n \n // Emit playbackStarted right before actually starting playback\n // This ensures the event is sent when audio actually starts playing\n // CRITICAL: This must be emitted when audio truly starts, not before\n if (isTrulyStarting) {\n this.emit('playbackStarted');\n }\n \n // Handle audio end\n source.onended = () => {\n this.currentSource = null;\n this.isProcessingQueue = false;\n \n // Process next audio in queue if there are more items\n if (this.audioQueue.length > 0) {\n // More audio to play - continue processing without emitting playbackStopped\n // Keep isPlaying = true since we'll continue playing\n // Use immediate processing to minimize gaps\n setTimeout(() => this.processQueue(), 50);\n } else {\n // Queue is empty - playback has truly ended\n // Small delay to ensure smooth transition if new audio arrives quickly\n setTimeout(() => {\n // Check again if new audio arrived during the delay\n if (this.audioQueue.length === 0 && !this.currentSource) {\n this.isPlaying = false;\n this.emit('playbackStopped');\n }\n }, 100);\n }\n };\n \n // Start playback\n source.start();\n \n } catch (error) {\n this.currentSource = null;\n this.emit('playbackError', error);\n \n // Try to process next audio in queue if there are more items\n if (this.audioQueue.length > 0) {\n this.isProcessingQueue = false;\n setTimeout(() => this.processQueue(), 100);\n } else {\n // Queue is empty - playback has ended\n this.isPlaying = false;\n this.isProcessingQueue = false;\n this.emit('playbackStopped');\n }\n }\n }\n \n /**\n * Stop current playback and clear queue\n */\n stop() {\n this.stopImmediate();\n }\n \n /**\n * Stop current playback immediately and clear queue\n */\n stopImmediate() {\n const wasPlaying = this.isPlaying || this.currentSource !== null;\n \n if (this.currentSource) {\n try {\n this.currentSource.stop();\n } catch (error) {\n // Ignore errors when stopping\n }\n this.currentSource = null;\n }\n \n this.isPlaying = false;\n this.isProcessingQueue = false;\n this.audioQueue = [];\n \n // Only emit playbackStopped if audio was actually playing\n if (wasPlaying) {\n this.emit('playbackStopped');\n }\n }\n \n /**\n * Get playback status\n */\n getStatus() {\n return {\n isPlaying: this.isPlaying,\n isProcessingQueue: this.isProcessingQueue,\n queueLength: this.audioQueue.length,\n audioContextState: this.audioContext ? this.audioContext.state : 'closed'\n };\n }\n \n /**\n * Cleanup resources\n */\n destroy() {\n this.stop();\n \n if (this.audioContext && this.audioContext.state !== 'closed') {\n this.audioContext.close();\n this.audioContext = null;\n }\n }\n}\n","/**\n * VoiceSDK - Core voice interaction SDK\n * Handles WebSocket connection, audio recording, and audio playback\n */\nimport EventEmitter from './EventEmitter.js';\nimport WebSocketManager from './WebSocketManager.js';\nimport AudioRecorder from './AudioRecorder.js';\nimport AudioPlayer from './AudioPlayer.js';\n\nexport default class VoiceSDK extends EventEmitter {\n constructor(config = {}) {\n super();\n \n // Configuration\n this.config = {\n websocketUrl: config.websocketUrl || 'wss://speech.talktopc.com/ws/conv',\n agentId: config.agentId, // Optional - for direct agent access (unsecured method)\n appId: config.appId, // User's app ID for authentication\n ttpId: config.ttpId, // Optional - custom TTP ID (fallback if appId not provided)\n voice: config.voice || 'default',\n language: config.language || 'en',\n sampleRate: config.sampleRate || 16000,\n ...config\n };\n \n // State\n this.isConnected = false;\n this.isRecording = false;\n this.isPlaying = false;\n this.isDestroyed = false;\n \n // Components\n this.webSocketManager = new WebSocketManager({\n ...this.config,\n autoReconnect: this.config.autoReconnect !== false // Default to true unless explicitly disabled\n });\n this.audioRecorder = new AudioRecorder(this.config);\n this.audioPlayer = new AudioPlayer(this.config);\n \n // Bind event handlers\n this.setupEventHandlers();\n }\n \n /**\n * Setup event handlers for all components\n */\n setupEventHandlers() {\n // WebSocket events\n this.webSocketManager.on('connected', () => {\n this.isConnected = true;\n this.sendHelloMessage();\n this.emit('connected');\n });\n \n this.webSocketManager.on('disconnected', (event) => {\n this.isConnected = false;\n \n // IMPORTANT: Stop recording when WebSocket disconnects (e.g., no credits, max duration exceeded)\n // This ensures microphone is released and no more audio is streamed\n if (this.isRecording) {\n this.stopRecording().catch(err => {\n console.error('VoiceSDK: Error stopping recording on disconnect:', err);\n });\n }\n \n // Pass close event details (code, reason) to consumers\n this.emit('disconnected', event);\n });\n \n this.webSocketManager.on('error', (error) => {\n this.emit('error', error);\n });\n \n this.webSocketManager.on('message', (message) => {\n // Handle greeting audio message\n if (message.t === 'greeting_audio' && message.data) {\n try {\n // Convert base64 audio data to Uint8Array\n const binaryString = atob(message.data);\n const audioData = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n audioData[i] = binaryString.charCodeAt(i);\n }\n \n this.audioPlayer.playAudio(audioData);\n this.emit('greetingStarted');\n } catch (error) {\n console.error('VoiceSDK: Error playing greeting audio:', error);\n }\n } else {\n this.emit('message', message);\n }\n });\n \n this.webSocketManager.on('binaryAudio', (audioData) => {\n this.audioPlayer.playAudio(audioData);\n });\n \n this.webSocketManager.on('bargeIn', (message) => {\n this.emit('bargeIn', message);\n });\n \n this.webSocketManager.on('stopPlaying', (message) => {\n this.emit('stopPlaying', message);\n // Stop current playback and clear queue, but keep playing new audio\n // Note: stopImmediate() will emit playbackStopped, which will send audio_stopped_playing to backend\n // This ensures backend knows when browser actually stops playing\n this.audioPlayer.stopImmediate();\n // Note: stopImmediate() clears the queue but AudioPlayer can still accept new audio via playAudio()\n });\n \n // Audio recorder events\n this.audioRecorder.on('recordingStarted', () => {\n this.isRecording = true;\n \n // Detect barge-in: if audio is playing when recording starts\n if (this.isPlaying) {\n // Stop audio playback immediately\n this.audioPlayer.stopImmediate();\n // Send barge-in message to server\n if (this.isConnected) {\n this.webSocketManager.sendMessage({\n t: 'barge_in'\n });\n }\n }\n \n this.emit('recordingStarted');\n });\n \n this.audioRecorder.on('recordingStopped', () => {\n this.isRecording = false;\n this.emit('recordingStopped');\n });\n \n this.audioRecorder.on('audioData', (audioData) => {\n if (this.isConnected) {\n this.webSocketManager.sendBinary(audioData);\n }\n });\n \n // Audio player events\n this.audioPlayer.on('playbackStarted', () => {\n this.isPlaying = true;\n this.emit('playbackStarted');\n \n // Send audio_started_playing message to server\n if (this.isConnected) {\n this.webSocketManager.sendMessage({\n t: 'audio_started_playing'\n });\n }\n });\n \n this.audioPlayer.on('playbackStopped', () => {\n this.isPlaying = false;\n this.emit('playbackStopped');\n \n // Send audio_stopped_playing message to server\n if (this.isConnected) {\n this.webSocketManager.sendMessage({\n t: 'audio_stopped_playing'\n });\n }\n });\n \n this.audioPlayer.on('playbackError', (error) => {\n this.emit('playbackError', error);\n });\n }\n \n /**\n * Connect to the voice server\n */\n async connect() {\n if (this.isDestroyed) {\n console.warn('VoiceSDK: Cannot connect - SDK is destroyed');\n return false; // Prevent connect after destroy\n }\n \n try {\n // Build WebSocket URL with query parameters if needed\n const wsUrl = this.buildWebSocketUrl();\n \n // Update the WebSocket manager with the URL that includes query parameters\n this.webSocketManager.config.websocketUrl = wsUrl;\n \n await this.webSocketManager.connect();\n return true;\n } catch (error) {\n console.error('🔌 VoiceSDK: Connection failed with error:', error);\n this.emit('error', error);\n return false;\n }\n }\n\n /**\n * Build WebSocket URL with query parameters for authentication\n */\n buildWebSocketUrl() {\n let url = this.config.websocketUrl;\n const params = new URLSearchParams();\n \n // Add agentId as query parameter if provided\n if (this.config.agentId) {\n params.append('agentId', this.config.agentId);\n }\n \n // Add appId as query parameter if provided\n if (this.config.appId) {\n params.append('appId', this.config.appId);\n }\n \n // Add other parameters if needed\n if (this.config.voice && this.config.voice !== 'default') {\n params.append('voice', this.config.voice);\n }\n \n if (this.config.language && this.config.language !== 'en') {\n params.append('language', this.config.language);\n }\n \n // Append query parameters to URL if any exist\n if (params.toString()) {\n const separator = url.includes('?') ? '&' : '?';\n url += separator + params.toString();\n }\n \n return url;\n }\n \n /**\n * Disconnect from the voice server\n */\n disconnect() {\n if (this.isDestroyed) {\n return; // Prevent disconnect after destroy\n }\n this.stopRecording();\n this.webSocketManager.disconnect();\n }\n \n /**\n * Reset reconnection attempts (useful for manual reconnection)\n */\n resetReconnectionAttempts() {\n if (this.isDestroyed) {\n return;\n }\n this.webSocketManager.resetReconnectionAttempts();\n }\n \n /**\n * Manually reconnect to the voice server\n */\n async reconnect() {\n if (this.isDestroyed) {\n return false;\n }\n \n this.disconnect();\n this.resetReconnectionAttempts();\n return await this.connect();\n }\n \n /**\n * Start voice recording and streaming\n */\n async startRecording() {\n if (!this.isConnected) {\n throw new Error('Not connected to voice server');\n }\n \n try {\n // Send start continuous mode message\n this.webSocketManager.sendMessage({\n t: 'start_continuous_mode',\n ttpId: this.generateTtpId(),\n voice: this.config.voice,\n language: this.config.language\n });\n \n // Start audio recording\n await this.audioRecorder.start();\n return true;\n } catch (error) {\n console.error('❌ VoiceSDK: Failed to start recording:', error);\n this.emit('error', error);\n return false;\n }\n }\n \n /**\n * Stop voice recording and streaming\n */\n async stopRecording() {\n if (!this.isRecording) {\n return;\n }\n \n try {\n // Send stop continuous mode message\n this.webSocketManager.sendMessage({\n t: 'stop_continuous_mode',\n ttpId: this.generateTtpId()\n });\n \n // Stop audio recording\n await this.audioRecorder.stop();\n \n // Stop audio playback immediately when stopping recording\n this.audioPlayer.stopImmediate();\n \n return true;\n } catch (error) {\n this.emit('error', error);\n return false;\n }\n }\n \n /**\n * Toggle recording state\n */\n async toggleRecording() {\n if (this.isRecording) {\n return await this.stopRecording();\n } else {\n return await this.startRecording();\n }\n }\n \n /**\n * Stop audio playback immediately (for barge-in scenarios)\n */\n stopAudioPlayback() {\n this.audioPlayer.stopImmediate();\n }\n \n /**\n * Handle barge-in (user starts speaking while audio is playing)\n */\n async handleBargeIn() {\n // Stop current audio playback immediately\n this.stopAudioPlayback();\n \n // If not already recording, start recording\n if (!this.isRecording) {\n await this.startRecording();\n }\n }\n \n /**\n * Get current connection status\n */\n getStatus() {\n return {\n isConnected: this.isConnected,\n isRecording: this.isRecording,\n isPlaying: this.isPlaying\n };\n }\n \n /**\n * Update configuration\n */\n updateConfig(newConfig) {\n this.config = { ...this.config, ...newConfig };\n }\n \n /**\n * Generate unique TTP ID\n */\n generateTtpId() {\n return 'sdk_' + Math.random().toString(36).substr(2, 9) + '_' + Date.now();\n }\n\n /**\n * Send hello message with appropriate authentication\n */\n sendHelloMessage() {\n if (!this.isConnected) {\n console.warn('VoiceSDK: Cannot send hello message - not connected');\n return;\n }\n\n const helloMessage = {\n t: \"hello\"\n };\n\n // Use app ID for authentication (preferred method)\n if (this.config.appId) {\n helloMessage.appId = this.config.appId;\n } else if (this.config.ttpId) {\n // Fallback to custom TTP ID if app ID not provided\n helloMessage.ttpId = this.config.ttpId;\n } else {\n // Generate TTP ID as last resort\n helloMessage.ttpId = this.generateTtpId();\n }\n\n // Note: agentId is now sent as query parameter in WebSocket URL, not in hello message\n\n try {\n this.webSocketManager.sendMessage(helloMessage);\n } catch (error) {\n console.error('VoiceSDK: Failed to send hello message:', error);\n this.emit('error', error);\n }\n }\n \n /**\n * Cleanup resources\n */\n destroy() {\n if (this.isDestroyed) {\n return; // Prevent multiple destroy calls\n }\n \n // Disconnect first, before setting isDestroyed\n this.disconnect();\n \n this.isDestroyed = true;\n this.audioRecorder.destroy();\n this.audioPlayer.destroy();\n this.removeAllListeners();\n }\n}\n","/**\n * TextChatSDK - Single-shot WebSocket per message\n * - Opens a new WS to /chat for each message, streams chunks, emits events, then closes\n * - Persists conversationId locally to allow continuity across messages\n */\nimport EventEmitter from './EventEmitter.js';\n\nexport default class TextChatSDK extends EventEmitter {\n constructor(config = {}) {\n super();\n \n const scriptConfig = this.readScriptTagConfig();\n\n this.config = {\n // Prefer SockJS native upgrade endpoint directly to avoid an initial failed attempt on /chat\n baseWsUrl: 'wss://backend.talktopc.com/chat/websocket',\n appId: config.appId || scriptConfig.appId,\n agentId: config.agentId || scriptConfig.agentId,\n conversationId: config.conversationId !== undefined ? config.conversationId : this.getPersistedConversationId(),\n // Optional testing override: force a specific conversationId for all sends\n forceConversationId: config.forceConversationId,\n // queueing behavior\n queue: [],\n inFlight: false,\n ...config\n };\n \n this.fullResponseBuffer = '';\n }\n\n // Read appId/agentId from the embedding script tag data attributes\n readScriptTagConfig() {\n try {\n const scripts = Array.from(document.getElementsByTagName('script'));\n const sdkScript = scripts.reverse().find(s => (s.dataset && (s.dataset.appId || s.dataset.agentId)) || (s.src && s.src.includes('agent-widget')));\n if (!sdkScript) return {};\n return {\n appId: sdkScript.dataset.appId,\n agentId: sdkScript.dataset.agentId\n };\n } catch (_) {\n return {};\n }\n }\n\n // Build WS URL with query params\n buildWebSocketUrl(base = this.config.baseWsUrl) {\n const params = new URLSearchParams();\n if (this.config.appId) params.append('appId', this.config.appId);\n if (this.config.agentId) params.append('agentId', this.config.agentId);\n if (this.config.conversationId) params.append('conversationId', this.config.conversationId);\n return `${base}?${params.toString()}`;\n }\n\n // Public API: sendMessage opens a fresh WS, streams, then closes\n async sendMessage(text) {\n return new Promise((resolve, reject) => {\n if (!text || !text.trim()) {\n reject(new Error('Message is empty'));\n return;\n }\n if (!this.config.appId || !this.config.agentId) {\n reject(new Error('Missing appId or agentId'));\n return;\n }\n \n const task = { text, resolve, reject };\n if (this.config.inFlight) {\n this.config.queue.push(task);\n } else {\n this.executeTask(task);\n }\n });\n }\n\n executeTask(task) {\n this.config.inFlight = true;\n this.fullResponseBuffer = '';\n\n // If conversationId is missing in memory, try to hydrate from localStorage before sending\n if (!this.config.conversationId) {\n const persisted = this.getPersistedConversationId();\n if (persisted) {\n this.config.conversationId = persisted;\n console.log('🔍 TextChatSDK hydrated conversationId from storage:', persisted);\n }\n }\n\n const primaryUrl = this.buildWebSocketUrl(this.config.baseWsUrl);\n const fallbackBase = this.config.baseWsUrl.endsWith('/websocket')\n ? this.config.baseWsUrl.replace(/\\/websocket$/, '')\n : `${this.config.baseWsUrl}/websocket`;\n const fallbackUrl = this.buildWebSocketUrl(fallbackBase);\n let triedFallback = false;\n\n let messageSent = false;\n let helloWaitTimer = null;\n\n const sendPayload = (socket) => {\n if (messageSent) return;\n try {\n const payload = { message: task.text };\n const effectiveConvId = this.config.forceConversationId || this.config.conversationId;\n if (effectiveConvId) {\n payload.conversationId = effectiveConvId;\n // Persist and keep in-memory if coming from a forced value (test mode)\n if (this.config.forceConversationId && !this.config.conversationId) {\n this.config.conversationId = effectiveConvId;\n this.persistConversationId(effectiveConvId);\n }\n }\n console.log('🔍 TextChatSDK sending payload:', payload, 'conversationId in config:', this.config.conversationId);\n socket.send(JSON.stringify(payload));\n messageSent = true;\n } catch (e) {\n task.reject(e);\n this.emit('error', e);\n try { socket.close(); } catch (_) {}\n }\n };\n\n const handleOpen = (socket) => () => {\n // Wait briefly for server 'hello' to capture conversationId before first send\n // If no hello within 200ms, send anyway\n if (!this.config.conversationId) {\n helloWaitTimer = setTimeout(() => sendPayload(socket), 200);\n } else {\n sendPayload(socket);\n }\n };\n\n const handleMessage = (socket) => (evt) => {\n try {\n try { console.log('🔎 [TextChatSDK] WS <= raw:', evt.data); } catch (_) {}\n const data = JSON.parse(evt.data);\n try { console.log('🔎 [TextChatSDK] WS <= parsed:', data); } catch (_) {}\n // Capture conversationId handshake from server\n if (data.type === 'hello' && data.conversationId) {\n // Persist the conversation id for subsequent messages\n console.log('🔍 TextChatSDK received conversationId:', data.conversationId);\n this.config.conversationId = data.conversationId;\n this.persistConversationId(data.conversationId);\n this.emit && this.emit('conversationIdChanged', data.conversationId);\n // If we were waiting to send the first message, send it now\n if (!messageSent && socket && socket.readyState === 1) {\n if (helloWaitTimer) { try { clearTimeout(helloWaitTimer); } catch (_) {} }\n sendPayload(socket);\n }\n return; // nothing else to do for handshake\n }\n // Fallback: capture conversationId if present on any message shape\n if (!this.config.conversationId && data.conversationId) {\n console.log('🔍 TextChatSDK captured conversationId from message:', data.conversationId);\n this.config.conversationId = data.conversationId;\n this.persistConversationId(data.conversationId);\n }\n if (data.type === 'chunk' && typeof data.content === 'string') {\n this.fullResponseBuffer += data.content;\n this.emit('chunk', data.content);\n } else if (data.type === 'done') {\n // If server sent a final text in the done payload, capture it for non-streaming backends\n try {\n const finalText = data.text || data.content || data.answer || data.message || '';\n if (finalText && !this.fullResponseBuffer) {\n this.fullResponseBuffer = finalText;\n }\n } catch (_) {}\n // Persist conversationId if provided on completion (fallback when hello was missed)\n if (!this.config.conversationId && data.conversationId) {\n console.log('🔍 TextChatSDK captured conversationId from done:', data.conversationId);\n this.config.conversationId = data.conversationId;\n }\n this.persistConversationId(this.config.conversationId);\n this.emit('done', { text: this.fullResponseBuffer });\n task.resolve({ conversationId: this.config.conversationId, fullText: this.fullResponseBuffer });\n try { socket.close(); } catch (_) {}\n } else if (data.type === 'error') {\n const err = new Error(data.message || 'Server error');\n this.emit('error', err);\n task.reject(err);\n try { socket.close(); } catch (_) {}\n }\n } catch (e) {\n // Non-JSON or parse error; ignore or surface\n }\n };\n\n const handleError = (socket) => (e) => {\n // Try alternate path once: toggle /websocket suffix\n if (!triedFallback) {\n triedFallback = true;\n try { socket.close(); } catch (_) {}\n const fb = new WebSocket(fallbackUrl);\n fb.onopen = handleOpen(fb);\n fb.onmessage = handleMessage(fb);\n fb.onerror = (err) => {\n this.emit('error', err);\n task.reject(err);\n };\n fb.onclose = handleClose;\n return;\n }\n this.emit('error', e);\n task.reject(e);\n };\n\n const handleClose = () => {\n this.config.inFlight = false;\n this.drainQueue();\n };\n\n const ws = new WebSocket(primaryUrl);\n ws.onopen = handleOpen(ws);\n ws.onmessage = handleMessage(ws);\n ws.onerror = handleError(ws);\n ws.onclose = handleClose;\n }\n\n drainQueue() {\n if (this.config.queue.length === 0 || this.config.inFlight) return;\n const next = this.config.queue.shift();\n this.executeTask(next);\n }\n\n persistConversationId(conversationId) {\n try {\n if (conversationId) localStorage.setItem('ttp_text_chat_conversation_id', conversationId);\n } catch (_) {}\n }\n\n getPersistedConversationId() {\n try {\n return localStorage.getItem('ttp_text_chat_conversation_id') || null;\n } catch (_) {\n return null;\n }\n }\n\n updateConfig(newConfig) {\n this.config = { ...this.config, ...newConfig };\n }\n \n destroy() {\n this.config.queue = [];\n this.config.inFlight = false;\n this.removeAllListeners();\n }\n}\n\n","/**\n * VoiceButton - React component for voice interaction\n */\nimport React, { useState, useEffect, useRef } from 'react';\nimport VoiceSDK from '../core/VoiceSDK.js';\n\nconst VoiceButton = ({ \n websocketUrl,\n agentId, // Optional - for direct agent access (unsecured method)\n voice = 'default',\n language = 'en',\n autoReconnect = true,\n onConnected,\n onDisconnected,\n onRecordingStarted,\n onRecordingStopped,\n onPlaybackStarted,\n onPlaybackStopped,\n onError,\n onMessage,\n onBargeIn,\n onStopPlaying,\n className = '',\n style = {},\n children\n}) => {\n const [isConnected, setIsConnected] = useState(false);\n const [isRecording, setIsRecording] = useState(false);\n const [isPlaying, setIsPlaying] = useState(false);\n const [connectionStatus, setConnectionStatus] = useState('Disconnected');\n \n const voiceSDKRef = useRef(null);\n \n // Initialize VoiceSDK\n useEffect(() => {\n console.log(`🎙️ VoiceButton: Creating VoiceSDK instance for ${websocketUrl}`);\n \n // Clean up existing instance if any\n if (voiceSDKRef.current) {\n console.log(`🎙️ VoiceButton: Destroying existing VoiceSDK instance`);\n voiceSDKRef.current.destroy();\n voiceSDKRef.current = null;\n }\n \n const voiceSDK = new VoiceSDK({\n websocketUrl,\n agentId, // Pass through agentId if provided\n voice,\n language,\n autoReconnect\n });\n \n // Setup event listeners\n voiceSDK.on('connected', () => {\n setIsConnected(true);\n setConnectionStatus('Connected');\n onConnected?.();\n });\n \n voiceSDK.on('disconnected', () => {\n setIsConnected(false);\n setConnectionStatus('Disconnected');\n onDisconnected?.();\n });\n \n voiceSDK.on('recordingStarted', () => {\n setIsRecording(true);\n onRecordingStarted?.();\n });\n \n voiceSDK.on('recordingStopped', () => {\n setIsRecording(false);\n onRecordingStopped?.();\n });\n \n voiceSDK.on('playbackStarted', () => {\n setIsPlaying(true);\n onPlaybackStarted?.();\n });\n \n voiceSDK.on('playbackStopped', () => {\n setIsPlaying(false);\n onPlaybackStopped?.();\n });\n \n voiceSDK.on('error', (error) => {\n onError?.(error);\n });\n \n voiceSDK.on('message', (message) => {\n onMessage?.(message);\n });\n \n voiceSDK.on('bargeIn', (message) => {\n onBargeIn?.(message);\n });\n \n voiceSDK.on('stopPlaying', (message) => {\n onStopPlaying?.(message);\n });\n \n voiceSDKRef.current = voiceSDK;\n \n // Auto-connect\n voiceSDK.connect();\n \n // Cleanup on unmount\n return () => {\n console.log(`🎙️ VoiceButton: Cleaning up VoiceSDK instance for ${websocketUrl}`);\n if (voiceSDKRef.current) {\n voiceSDKRef.current.destroy();\n voiceSDKRef.current = null;\n }\n };\n }, [websocketUrl, agentId, voice, language]);\n \n // Handle button click\n const handleClick = async () => {\n if (!voiceSDKRef.current) return;\n \n try {\n await voiceSDKRef.current.toggleRecording();\n } catch (error) {\n console.error('Error toggling recording:', error);\n }\n };\n \n // Default button content\n const defaultContent = (\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <div style={{ fontSize: '20px' }}>\n {isRecording ? '🔴' : '🎤'}\n </div>\n <div>\n {isRecording ? 'Stop Listening' : 'Start Listening'}\n </div>\n </div>\n );\n \n return (\n <button\n className={`voice-button ${isRecording ? 'recording' : ''} ${className}`}\n style={{\n padding: '12px 24px',\n border: 'none',\n borderRadius: '8px',\n backgroundColor: isRecording ? '#dc3545' : '#007bff',\n color: 'white',\n cursor: 'pointer',\n fontSize: '16px',\n fontWeight: '500',\n transition: 'all 0.2s ease',\n ...style\n }}\n onClick={handleClick}\n disabled={!isConnected}\n >\n {children || defaultContent}\n </button>\n );\n};\n\nexport default VoiceButton;\n","/**\n * VoiceButton - Vanilla JavaScript voice button\n */\nimport VoiceSDK from '../core/VoiceSDK.js';\n\nexport default class VoiceButton {\n constructor(options = {}) {\n this.options = {\n websocketUrl: options.websocketUrl || 'wss://speech.talktopc.com/ws/conv',\n agentId: options.agentId, // Optional - for direct agent access (unsecured method)\n voice: options.voice || 'default',\n language: options.language || 'en',\n container: options.container || document.body,\n buttonText: options.buttonText || 'Start Listening',\n buttonClass: options.buttonClass || 'voice-button',\n ...options\n };\n \n this.isConnected = false;\n this.isRecording = false;\n this.isPlaying = false;\n \n this.voiceSDK = new VoiceSDK({\n websocketUrl: this.options.websocketUrl,\n agentId: this.options.agentId, // Pass through agentId if provided\n voice: this.options.voice,\n language: this.options.language\n });\n \n this.setupEventListeners();\n this.createButton();\n this.connect();\n }\n \n /**\n * Setup event listeners\n */\n setupEventListeners() {\n this.voiceSDK.on('connected', () => {\n this.isConnected = true;\n this.updateButton();\n this.options.onConnected?.();\n });\n \n this.voiceSDK.on('disconnected', () => {\n this.isConnected = false;\n this.updateButton();\n this.options.onDisconnected?.();\n });\n \n this.voiceSDK.on('recordingStarted', () => {\n this.isRecording = true;\n this.updateButton();\n this.options.onRecordingStarted?.();\n });\n \n this.voiceSDK.on('recordingStopped', () => {\n this.isRecording = false;\n this.updateButton();\n this.options.onRecordingStopped?.();\n });\n \n this.voiceSDK.on('playbackStarted', () => {\n this.isPlaying = true;\n this.options.onPlaybackStarted?.();\n });\n \n this.voiceSDK.on('playbackStopped', () => {\n this.isPlaying = false;\n this.options.onPlaybackStopped?.();\n });\n \n this.voiceSDK.on('error', (error) => {\n this.options.onError?.(error);\n });\n \n this.voiceSDK.on('message', (message) => {\n this.options.onMessage?.(message);\n });\n \n this.voiceSDK.on('bargeIn', (message) => {\n this.options.onBargeIn?.(message);\n });\n \n this.voiceSDK.on('stopPlaying', (message) => {\n this.options.onStopPlaying?.(message);\n });\n }\n \n /**\n * Create the button element\n */\n createButton() {\n this.button = document.createElement('button');\n this.button.className = this.options.buttonClass;\n this.button.style.cssText = `\n padding: 12px 24px;\n border: none;\n border-radius: 8px;\n background-color: #6c757d;\n color: white;\n cursor: pointer;\n font-size: 16px;\n font-weight: 500;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n `;\n \n this.button.addEventListener('click', () => this.toggleRecording());\n this.options.container.appendChild(this.button);\n \n this.updateButton();\n }\n \n /**\n * Update button appearance and state\n */\n updateButton() {\n if (!this.button) return;\n \n const icon = this.isRecording ? '🔴' : '🎤';\n const text = this.isRecording ? 'Stop Listening' : 'Start Listening';\n \n this.button.innerHTML = `\n <span style=\"font-size: 20px;\">${icon}</span>\n <span>${text}</span>\n `;\n \n this.button.disabled = !this.isConnected;\n this.button.style.backgroundColor = this.isRecording ? '#dc3545' : \n this.isConnected ? '#007bff' : '#6c757d';\n }\n \n /**\n * Connect to voice server\n */\n async connect() {\n try {\n await this.voiceSDK.connect();\n } catch (error) {\n console.error('Failed to connect:', error);\n }\n }\n \n /**\n * Toggle recording\n */\n async toggleRecording() {\n if (!this.voiceSDK) return;\n \n try {\n await this.voiceSDK.toggleRecording();\n } catch (error) {\n console.error('Error toggling recording:', error);\n }\n }\n \n /**\n * Get current status\n */\n getStatus() {\n return {\n isConnected: this.isConnected,\n isRecording: this.isRecording,\n isPlaying: this.isPlaying\n };\n }\n \n /**\n * Update configuration\n */\n updateConfig(newConfig) {\n this.voiceSDK.updateConfig(newConfig);\n }\n \n /**\n * Destroy the button and cleanup\n */\n destroy() {\n if (this.button && this.button.parentNode) {\n this.button.parentNode.removeChild(this.button);\n }\n \n if (this.voiceSDK) {\n this.voiceSDK.destroy();\n }\n }\n}\n","/**\n * Legacy AgentSDK - Backward Compatibility Layer\n * \n * This maintains the original AgentSDK API while using the new VoiceSDK internally.\n * This ensures existing integrations continue to work without changes.\n */\n\nimport { VoiceSDK } from '../index.js';\n\nexport class AgentSDK {\n constructor(config) {\n console.log('🚀 AgentSDK v2.1.8 initialized with config:', config);\n this.config = config;\n this.voiceSDK = null;\n this.isConnected = false;\n this.isListening = false;\n \n // Legacy callback properties\n this.onConnected = () => {};\n this.onDisconnected = () => {};\n this.onError = (error) => console.error('SDK Error:', error);\n this.onTranscript = (text) => {};\n this.onAgentSpeaking = (isStart) => {};\n }\n\n async connect(signedUrl) {\n try {\n if (!signedUrl) {\n throw new Error('signedUrl is required');\n }\n \n // Clean up existing connection if any\n if (this.voiceSDK) {\n console.log('🔌 AgentSDK: Cleaning up existing connection');\n this.voiceSDK.destroy();\n this.voiceSDK = null;\n }\n \n // Create VoiceSDK instance\n this.voiceSDK = new VoiceSDK({\n websocketUrl: signedUrl,\n autoReconnect: false,\n agentId: this.config.agentId,\n appId: this.config.appId,\n language: this.config.language || 'en'\n });\n \n // Set up event handlers to map to legacy callbacks\n this.voiceSDK.on('connected', () => {\n this.isConnected = true;\n this.onConnected();\n });\n \n this.voiceSDK.on('disconnected', () => {\n this.isConnected = false;\n this.onDisconnected();\n });\n \n this.voiceSDK.on('error', (error) => {\n this.onError(error);\n });\n \n this.voiceSDK.on('message', (message) => {\n this.handleWebSocketMessage(message);\n });\n \n this.voiceSDK.on('recordingStarted', () => {\n this.isListening = true;\n });\n \n this.voiceSDK.on('recordingStopped', () => {\n this.isListening = false;\n });\n \n this.voiceSDK.on('playbackStarted', () => {\n this.onAgentSpeaking(true);\n });\n \n this.voiceSDK.on('playbackStopped', () => {\n this.onAgentSpeaking(false);\n });\n \n // Connect using VoiceSDK\n await this.voiceSDK.connect();\n \n } catch (error) {\n this.onError(error);\n throw error;\n }\n }\n\n handleWebSocketMessage(message) {\n // Map new message format to legacy format\n switch (message.type) {\n case 'connected':\n console.log('Session started successfully');\n break;\n \n case 'user_transcript':\n this.onTranscript(message.user_transcription || message.text);\n break;\n \n case 'agent_response':\n // Handle agent text response\n break;\n \n case 'barge_in':\n // Handle barge-in\n break;\n \n case 'stop_playing':\n // Handle stop playing\n break;\n \n case 'error':\n this.onError(new Error(message.message));\n break;\n }\n }\n\n async startListening() {\n console.log('🎤 AgentSDK: startListening() called');\n if (this.voiceSDK) {\n try {\n console.log('🎤 AgentSDK: Starting recording...');\n await this.voiceSDK.startRecording();\n console.log('✅ AgentSDK: Recording started successfully');\n } catch (error) {\n console.error('❌ AgentSDK: Failed to start recording:', error);\n throw error;\n }\n } else {\n console.error('❌ AgentSDK: No voiceSDK instance available');\n throw new Error('No voiceSDK instance available');\n }\n }\n\n stopListening() {\n if (this.voiceSDK) {\n this.voiceSDK.stopRecording();\n }\n }\n\n updateVariables(variables) {\n if (this.voiceSDK && this.isConnected) {\n // Send variables update message\n this.voiceSDK.webSocketManager.sendMessage({\n t: 'update_variables',\n variables\n });\n }\n }\n\n disconnect() {\n if (this.voiceSDK) {\n this.voiceSDK.destroy();\n this.voiceSDK = null;\n }\n this.isConnected = false;\n this.isListening = false;\n }\n}\n\n// ============================================\n// WIDGET - Pre-built UI using the SDK\n// ============================================\n\nexport class AgentWidget {\n constructor(config = {}) {\n // Merge user config with defaults (backward compatible with simple config)\n this.config = this.mergeWithDefaults(config);\n this.sdk = new AgentSDK(this.config);\n this.isOpen = false;\n this.isActive = false;\n \n this.setupEventHandlers();\n this.createWidget();\n \n // Start open if configured (immediately)\n if (this.config.behavior.startOpen || this.config.behavior.autoOpen) {\n const panel = document.getElementById('agent-panel');\n if (panel) {\n this.isOpen = true;\n panel.classList.add('open');\n }\n }\n }\n\n /**\n * Merge user configuration with defaults\n * Supports both simple config (backward compatible) and advanced config\n */\n mergeWithDefaults(userConfig) {\n // Handle legacy position string format\n let positionConfig = userConfig.position || 'bottom-right';\n if (typeof positionConfig === 'string') {\n // Convert legacy format 'bottom-right' to new format\n const parts = positionConfig.split('-');\n positionConfig = {\n vertical: parts[0] || 'bottom',\n horizontal: parts[1] || 'right',\n offset: userConfig.positionOffset || { x: 20, y: 20 }\n };\n }\n\n // Handle legacy primaryColor\n const primaryColor = userConfig.primaryColor || userConfig.button?.primaryColor || '#4F46E5';\n\n return {\n // Required (agentId is required, appId is optional)\n agentId: userConfig.agentId,\n appId: userConfig.appId,\n getSessionUrl: userConfig.getSessionUrl, // Optional - will auto-construct URL if omitted\n websocketUrl: userConfig.websocketUrl, // Optional - defaults to speech.talktopc.com\n demo: userConfig.demo !== false, // Optional - defaults to true\n direction: userConfig.direction || 'ltr', // Optional - text direction: 'ltr' or 'rtl'\n \n // Icon/Image Configuration\n icon: {\n type: userConfig.icon?.type || 'microphone', // 'microphone', 'custom', 'emoji', 'text'\n customImage: userConfig.icon?.customImage || null,\n emoji: userConfig.icon?.emoji || '🎤',\n text: userConfig.icon?.text || 'AI',\n size: userConfig.icon?.size || 'medium', // 'small', 'medium', 'large', 'xl'\n // backgroundColor is deprecated - use button.backgroundColor instead\n backgroundColor: userConfig.icon?.backgroundColor || null,\n ...userConfig.icon\n },\n \n // Positioning Configuration (supports both object and legacy string)\n position: {\n vertical: positionConfig.vertical || 'bottom',\n horizontal: positionConfig.horizontal || 'right',\n offset: positionConfig.offset || { x: 20, y: 20 },\n ...(typeof userConfig.position === 'object' ? userConfig.position : {})\n },\n \n // Button Configuration\n button: {\n size: userConfig.button?.size || 'medium',\n shape: userConfig.button?.shape || 'circle',\n // Floating button colors (main button)\n backgroundColor: userConfig.button?.backgroundColor || userConfig.icon?.backgroundColor || primaryColor,\n hoverColor: userConfig.button?.hoverColor || '#7C3AED',\n shadow: userConfig.button?.shadow !== false,\n shadowColor: userConfig.button?.shadowColor || 'rgba(0,0,0,0.15)',\n // Legacy support - map to backgroundColor\n primaryColor: userConfig.button?.backgroundColor || userConfig.icon?.backgroundColor || primaryColor,\n ...userConfig.button\n },\n \n // Panel Configuration\n panel: {\n width: userConfig.panel?.width || 350,\n height: userConfig.panel?.height || 500,\n borderRadius: userConfig.panel?.borderRadius || 12,\n backgroundColor: userConfig.panel?.backgroundColor || '#FFFFFF',\n backdropFilter: userConfig.panel?.backdropFilter || null,\n border: userConfig.panel?.border || '1px solid rgba(0,0,0,0.1)',\n // Mic button colors (inside panel)\n micButtonColor: userConfig.panel?.micButtonColor || primaryColor,\n micButtonActiveColor: userConfig.panel?.micButtonActiveColor || '#EF4444',\n // Mic button hint text (below button)\n // If text is empty or not provided, hint will not be shown\n micButtonHint: {\n text: userConfig.panel?.micButtonHint?.text || 'Click the button to start voice conversation',\n color: userConfig.panel?.micButtonHint?.color || '#6B7280',\n fontSize: userConfig.panel?.micButtonHint?.fontSize || '12px',\n ...userConfig.panel?.micButtonHint\n },\n ...userConfig.panel\n },\n \n // Header Configuration (top of panel)\n header: {\n title: userConfig.header?.title || 'Voice Assistant',\n showTitle: userConfig.header?.showTitle !== false,\n backgroundColor: userConfig.header?.backgroundColor || userConfig.button?.backgroundColor || primaryColor, // Header/top background color\n textColor: userConfig.header?.textColor || '#FFFFFF',\n showCloseButton: userConfig.header?.showCloseButton !== false,\n ...userConfig.header\n },\n \n // Messages Configuration\n messages: {\n userBackgroundColor: userConfig.messages?.userBackgroundColor || '#E5E7EB',\n agentBackgroundColor: userConfig.messages?.agentBackgroundColor || '#F3F4F6',\n systemBackgroundColor: userConfig.messages?.systemBackgroundColor || '#DCFCE7',\n errorBackgroundColor: userConfig.messages?.errorBackgroundColor || '#FEE2E2',\n textColor: userConfig.messages?.textColor || '#1F2937',\n fontSize: userConfig.messages?.fontSize || '14px',\n borderRadius: userConfig.messages?.borderRadius || 8,\n ...userConfig.messages\n },\n \n // Animation Configuration\n animation: {\n enableHover: userConfig.animation?.enableHover !== false,\n enablePulse: userConfig.animation?.enablePulse !== false,\n enableSlide: userConfig.animation?.enableSlide !== false,\n duration: userConfig.animation?.duration || 0.3,\n ...userConfig.animation\n },\n \n // Behavior Configuration\n behavior: {\n autoOpen: userConfig.behavior?.autoOpen || false,\n startOpen: userConfig.behavior?.startOpen || false,\n hidden: userConfig.behavior?.hidden || false,\n autoConnect: userConfig.behavior?.autoConnect || false,\n showWelcomeMessage: userConfig.behavior?.showWelcomeMessage !== false,\n welcomeMessage: userConfig.behavior?.welcomeMessage || 'Hello! How can I help you today?',\n ...userConfig.behavior\n },\n \n // Accessibility Configuration\n accessibility: {\n ariaLabel: userConfig.accessibility?.ariaLabel || 'Voice Assistant',\n ariaDescription: userConfig.accessibility?.ariaDescription || 'Click to open voice assistant',\n keyboardNavigation: userConfig.accessibility?.keyboardNavigation !== false,\n ...userConfig.accessibility\n },\n \n // Custom CSS\n customStyles: userConfig.customStyles || '',\n \n // Variables for the agent\n variables: userConfig.variables || {},\n \n // Legacy support (for backward compatibility)\n primaryColor: primaryColor,\n // Keep position string for backward compatibility\n ...(typeof userConfig.position === 'string' ? { positionString: userConfig.position } : {})\n };\n }\n\n setupEventHandlers() {\n this.sdk.onConnected = () => {\n this.updateStatus('connected');\n if (this.config.behavior.showWelcomeMessage) {\n this.addMessage('system', this.config.behavior.welcomeMessage);\n }\n };\n\n this.sdk.onDisconnected = () => {\n this.updateStatus('disconnected');\n this.isActive = false;\n this.updateMicButtonState(false);\n this.showError('Conversation ended. Click to start a new conversation.');\n };\n\n this.sdk.onError = (error) => {\n this.showError(error.message);\n };\n\n this.sdk.onTranscript = (text) => {\n this.addMessage('user', text);\n };\n\n this.sdk.onAgentSpeaking = (isStart) => {\n if (isStart) {\n this.showAgentThinking();\n } else {\n this.hideAgentThinking();\n }\n };\n }\n\n createWidget() {\n const widget = document.createElement('div');\n widget.id = 'agent-widget';\n widget.innerHTML = this.generateWidgetHTML();\n \n document.body.appendChild(widget);\n \n this.setupWidgetEvents();\n \n // Ensure initial open state if configured\n if (this.config.behavior.startOpen || this.config.behavior.autoOpen) {\n const panel = document.getElementById('agent-panel');\n if (panel) {\n this.isOpen = true;\n panel.classList.add('open');\n }\n }\n }\n\n generateWidgetHTML() {\n const pos = this.config.position;\n const btn = this.config.button;\n const icon = this.config.icon;\n const panel = this.config.panel;\n const header = this.config.header;\n const anim = this.config.animation;\n\n // Calculate button size\n const buttonSizes = {\n small: 50,\n medium: 60,\n large: 70,\n xl: 80\n };\n const buttonSize = buttonSizes[btn.size] || 60;\n\n // Calculate icon size\n const iconSizes = {\n small: 20,\n medium: 28,\n large: 36,\n xl: 44\n };\n const iconSize = iconSizes[icon.size] || 28;\n\n // Generate position styles\n const positionStyles = this.generatePositionStyles();\n\n // Generate icon HTML\n const iconHTML = this.generateIconHTML(iconSize);\n\n return `\n <style>\n ${this.generateCSS(positionStyles, buttonSize, iconSize)}\n ${this.config.customStyles}\n </style>\n \n ${this.config.behavior.hidden ? '' : `\n <button id=\"agent-button\" \n aria-label=\"${this.config.accessibility.ariaLabel}\"\n aria-description=\"${this.config.accessibility.ariaDescription}\">\n ${iconHTML}\n </button>\n `}\n \n <div id=\"agent-panel\">\n ${header.showTitle ? `\n <div id=\"agent-header\" style=\"direction: ${this.config.direction};\">\n ${this.config.direction === 'rtl' ? `\n ${header.showCloseButton ? '<button id=\"agent-close\">×</button>' : ''}\n <h3 style=\"margin: 0; color: ${header.textColor};\">${header.title}</h3>\n ` : `\n <h3 style=\"margin: 0; color: ${header.textColor};\">${header.title}</h3>\n ${header.showCloseButton ? '<button id=\"agent-close\">×</button>' : ''}\n `}\n </div>\n ` : ''}\n \n <div id=\"agent-messages\"></div>\n \n <div id=\"agent-controls\">\n <div style=\"display: flex; flex-direction: column; align-items: center; gap: 8px;\">\n <button id=\"agent-mic-button\" \n aria-label=\"Start/Stop Voice Recording\">\n ${iconHTML}\n </button>\n ${panel.micButtonHint.text && panel.micButtonHint.text.trim() ? `\n <div id=\"agent-mic-hint\" style=\"color: ${panel.micButtonHint.color}; font-size: ${panel.micButtonHint.fontSize}; text-align: center; max-width: 200px;\">\n ${panel.micButtonHint.text}\n </div>\n ` : ''}\n </div>\n </div>\n </div>\n `;\n }\n\n generatePositionStyles() {\n const pos = this.config.position;\n const offset = pos.offset || { x: 20, y: 20 };\n \n let styles = '';\n \n // Vertical positioning\n if (pos.vertical === 'top') {\n styles += `top: ${offset.y}px;`;\n } else if (pos.vertical === 'bottom') {\n styles += `bottom: ${offset.y}px;`;\n } else if (pos.vertical === 'center') {\n styles += `top: 50%; transform: translateY(-50%);`;\n }\n \n // Horizontal positioning\n if (pos.horizontal === 'left') {\n styles += `left: ${offset.x}px;`;\n } else if (pos.horizontal === 'right') {\n styles += `right: ${offset.x}px;`;\n } else if (pos.horizontal === 'center') {\n styles += `left: 50%; transform: translateX(-50%);`;\n }\n \n return styles;\n }\n\n generateIconHTML(size) {\n const icon = this.config.icon;\n \n switch (icon.type) {\n case 'custom':\n return `<img src=\"${icon.customImage}\" alt=\"Voice Assistant\" style=\"width: ${size}px; height: ${size}px; object-fit: contain;\" />`;\n \n case 'emoji':\n return `<span style=\"font-size: ${size}px; line-height: 1;\">${icon.emoji}</span>`;\n \n case 'text':\n return `<span style=\"font-size: ${Math.floor(size * 0.6)}px; font-weight: bold; color: white;\">${icon.text}</span>`;\n \n case 'microphone':\n default:\n return `<svg viewBox=\"0 0 24 24\" style=\"width: ${size}px; height: ${size}px; fill: white;\">\n <path d=\"M12 14c1.66 0 3-1.34 3-3V5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3z\"/>\n <path d=\"M17 11c0 2.76-2.24 5-5 5s-5-2.24-5-5H5c0 3.53 2.61 6.43 6 6.92V21h2v-3.08c3.39-.49 6-3.39 6-6.92h-2z\"/>\n </svg>`;\n }\n }\n\n generateCSS(positionStyles, buttonSize, iconSize) {\n const btn = this.config.button;\n const panel = this.config.panel;\n const header = this.config.header;\n const messages = this.config.messages;\n const anim = this.config.animation;\n \n // Color references for clarity\n const floatingButtonColor = btn.backgroundColor || btn.primaryColor; // Floating button (main)\n const headerColor = header.backgroundColor; // Header/top of panel\n const micButtonColor = panel.micButtonColor || btn.primaryColor; // Mic button in panel\n const micButtonActiveColor = panel.micButtonActiveColor || '#EF4444'; // Mic button active state\n\n return `\n #agent-widget {\n position: fixed;\n ${positionStyles}\n z-index: 10000;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n will-change: transform;\n }\n \n @media (max-width: 768px) {\n #agent-widget {\n ${this.config.position.horizontal === 'right' || (typeof this.config.position === 'string' && this.config.position.includes('right')) ? 'right: 10px; left: auto;' : 'left: 10px; right: auto;'}\n ${this.config.position.vertical === 'bottom' || (typeof this.config.position === 'string' && this.config.position.includes('bottom')) ? 'bottom: 10px; top: auto;' : this.config.position.vertical === 'top' || (typeof this.config.position === 'string' && this.config.position.includes('top')) ? 'top: 10px; bottom: auto;' : ''}\n }\n }\n \n @media (max-width: 480px) {\n #agent-widget {\n ${this.config.position.horizontal === 'right' || (typeof this.config.position === 'string' && this.config.position.includes('right')) ? 'right: 5px; left: auto;' : 'left: 5px; right: auto;'}\n ${this.config.position.vertical === 'bottom' || (typeof this.config.position === 'string' && this.config.position.includes('bottom')) ? 'bottom: 5px; top: auto;' : this.config.position.vertical === 'top' || (typeof this.config.position === 'string' && this.config.position.includes('top')) ? 'top: 5px; bottom: auto;' : ''}\n }\n }\n \n #agent-button {\n width: ${buttonSize}px;\n height: ${buttonSize}px;\n border-radius: ${btn.shape === 'circle' ? '50%' : btn.shape === 'square' ? '0' : '12px'};\n background: ${floatingButtonColor};\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all ${anim.duration}s ease;\n ${btn.shadow ? `box-shadow: 0 4px 12px ${btn.shadowColor};` : ''}\n touch-action: manipulation;\n -webkit-tap-highlight-color: transparent;\n -webkit-touch-callout: none;\n user-select: none;\n min-width: 44px;\n min-height: 44px;\n }\n \n @media (max-width: 768px) {\n #agent-button {\n min-width: 56px;\n min-height: 56px;\n box-shadow: 0 6px 16px rgba(0, 0, 0, 0.2);\n }\n \n #agent-panel {\n position: fixed !important;\n width: calc(100vw - 20px) !important;\n max-width: calc(100vw - 20px) !important;\n max-height: calc(100vh - 80px) !important;\n left: 10px !important;\n right: 10px !important;\n bottom: calc(${buttonSize}px + 10px) !important;\n top: auto !important;\n transform: none !important;\n margin: 0 !important;\n }\n \n #agent-header {\n padding: 12px 14px;\n min-height: 56px;\n }\n \n #agent-header h3 {\n font-size: 15px;\n }\n \n #agent-close {\n width: 32px;\n height: 32px;\n min-width: 32px;\n min-height: 32px;\n font-size: 20px;\n }\n \n #agent-messages {\n padding: 12px;\n gap: 10px;\n }\n \n .message {\n padding: 10px;\n font-size: 14px;\n max-width: 85%;\n }\n \n #agent-controls {\n padding: 12px;\n }\n \n #agent-mic-button {\n min-width: 56px;\n min-height: 56px;\n width: 56px;\n height: 56px;\n }\n \n #agent-mic-hint {\n font-size: 12px;\n padding: 8px;\n }\n }\n \n @media (max-width: 480px) {\n #agent-button {\n min-width: 60px;\n min-height: 60px;\n }\n \n #agent-panel {\n position: fixed !important;\n width: calc(100vw - 10px) !important;\n max-width: calc(100vw - 10px) !important;\n left: 5px !important;\n right: 5px !important;\n max-height: calc(100vh - 70px) !important;\n bottom: calc(${buttonSize}px + 5px) !important;\n top: auto !important;\n transform: none !important;\n margin: 0 !important;\n }\n \n #agent-header {\n padding: 10px 12px;\n min-height: 52px;\n }\n \n #agent-header h3 {\n font-size: 14px;\n }\n \n #agent-messages {\n padding: 10px;\n }\n \n .message {\n font-size: 13px;\n max-width: 90%;\n padding: 8px;\n }\n \n #agent-mic-button {\n min-width: 60px;\n min-height: 60px;\n width: 60px;\n height: 60px;\n }\n }\n \n ${anim.enableHover ? `\n #agent-button:hover {\n background: ${btn.hoverColor};\n transform: scale(1.05);\n ${btn.shadow ? `box-shadow: 0 8px 20px ${btn.shadowColor};` : ''}\n }\n ` : ''}\n \n #agent-panel {\n display: none;\n position: absolute;\n bottom: ${this.config.behavior.hidden ? 20 : (buttonSize + 20)}px;\n ${this.config.position.horizontal === 'right' ? 'right: 0;' : 'left: 0;'}\n width: ${panel.width}px;\n height: ${panel.height}px;\n background: ${panel.backgroundColor};\n border-radius: ${panel.borderRadius}px;\n border: ${panel.border};\n flex-direction: column;\n overflow: hidden;\n ${panel.backdropFilter ? `backdrop-filter: ${panel.backdropFilter};` : ''}\n ${anim.enableSlide ? `transition: all ${anim.duration}s ease;` : ''}\n }\n \n #agent-panel.open {\n display: flex;\n ${anim.enableSlide ? 'transform: translateY(0); opacity: 1;' : ''}\n }\n \n #agent-header {\n background: ${headerColor};\n color: ${header.textColor};\n padding: 16px;\n display: flex;\n flex-direction: ${this.config.direction === 'rtl' ? 'row-reverse' : 'row'};\n justify-content: space-between;\n align-items: center;\n border-radius: ${panel.borderRadius}px ${panel.borderRadius}px 0 0;\n direction: ${this.config.direction};\n }\n \n #agent-header h3 {\n margin: 0;\n flex: 1;\n text-align: ${this.config.direction === 'rtl' ? 'right' : 'left'};\n }\n \n #agent-close {\n background: none;\n border: none;\n color: ${header.textColor};\n cursor: pointer;\n font-size: 24px;\n padding: 0;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n \n #agent-messages {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n \n .message {\n padding: 12px;\n border-radius: ${messages.borderRadius}px;\n max-width: 80%;\n font-size: ${messages.fontSize};\n color: ${messages.textColor};\n }\n \n .message.user {\n background: ${messages.userBackgroundColor};\n align-self: flex-end;\n }\n \n .message.agent {\n background: ${messages.agentBackgroundColor};\n align-self: flex-start;\n }\n \n .message.system {\n background: ${messages.systemBackgroundColor};\n align-self: flex-start;\n font-style: italic;\n }\n \n .error-message {\n background: ${messages.errorBackgroundColor};\n color: #991B1B;\n padding: 12px;\n border-radius: ${messages.borderRadius}px;\n margin: 8px;\n }\n \n #agent-controls {\n padding: 16px;\n border-top: 1px solid #E5E7EB;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n \n #agent-controls > div {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n }\n \n #agent-mic-hint {\n text-align: center;\n line-height: 1.4;\n }\n \n #agent-mic-button {\n width: ${buttonSize}px;\n height: ${buttonSize}px;\n border-radius: ${btn.shape === 'circle' ? '50%' : btn.shape === 'square' ? '0' : '12px'};\n border: none;\n background: ${micButtonColor};\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all ${anim.duration}s ease;\n }\n \n #agent-mic-button.active {\n background: ${micButtonActiveColor};\n ${anim.enablePulse ? `\n animation: pulse 1.5s infinite;\n ` : ''}\n }\n \n ${anim.enablePulse ? `\n @keyframes pulse {\n 0%, 100% { transform: scale(1); }\n 50% { transform: scale(1.05); }\n }\n ` : ''}\n \n .agent-thinking {\n font-style: italic;\n color: #6B7280;\n }\n `;\n }\n\n setupWidgetEvents() {\n const openBtn = document.getElementById('agent-button');\n if (openBtn) {\n openBtn.onclick = () => this.togglePanel();\n }\n \n const closeBtn = document.getElementById('agent-close');\n if (closeBtn) {\n closeBtn.onclick = () => this.togglePanel();\n }\n \n document.getElementById('agent-mic-button').onclick = () => this.toggleVoice();\n \n // Keyboard navigation\n if (this.config.accessibility.keyboardNavigation) {\n this.setupKeyboardNavigation();\n }\n }\n\n setupKeyboardNavigation() {\n document.addEventListener('keydown', (e) => {\n if (e.key === 'Escape' && this.isOpen) {\n this.togglePanel();\n }\n });\n }\n\n togglePanel() {\n this.isOpen = !this.isOpen;\n const panel = document.getElementById('agent-panel');\n panel.classList.toggle('open');\n }\n\n async toggleVoice() {\n if (!this.isActive) {\n try {\n console.log('🎤 Starting voice session...');\n const signedUrl = await this.getSignedUrl();\n console.log('🔗 Got signed URL:', signedUrl);\n \n const connected = await this.sdk.connect(signedUrl);\n console.log('✅ Connected to WebSocket, connected:', connected);\n \n // Wait for connection to be fully ready (for hello message exchange)\n let attempts = 0;\n while (!this.sdk.isConnected && attempts < 50) {\n await new Promise(resolve => setTimeout(resolve, 100));\n attempts++;\n }\n \n if (this.sdk.isConnected) {\n console.log('✅ WebSocket ready, starting listening...');\n await this.sdk.startListening();\n console.log('🎤 Started listening');\n \n this.isActive = true;\n this.updateMicButtonState(true);\n this.addMessage('system', '🎤 Listening... Click mic to stop');\n } else {\n console.warn('⚠️ Connection not fully ready, but trying to start listening anyway...');\n await this.sdk.startListening();\n console.log('🎤 Started listening');\n \n this.isActive = true;\n this.updateMicButtonState(true);\n this.addMessage('system', '🎤 Listening... Click mic to stop');\n }\n } catch (error) {\n console.error('❌ Failed to start:', error);\n this.showError(error.message);\n }\n } else {\n console.log('🔇 Stopping voice session...');\n this.sdk.stopListening();\n this.sdk.disconnect();\n this.isActive = false;\n this.updateMicButtonState(false);\n this.addMessage('system', '🔇 Stopped listening');\n }\n }\n\n updateMicButtonState(isListening) {\n const micButton = document.getElementById('agent-mic-button');\n if (!micButton) return;\n \n const iconSizes = {\n small: 20,\n medium: 28,\n large: 36,\n xl: 44\n };\n const iconSize = iconSizes[this.config.icon.size] || 28;\n \n if (isListening) {\n micButton.classList.add('active');\n micButton.title = 'Click to stop listening';\n \n // Change icon to stop icon (only if using SVG microphone icon)\n if (this.config.icon.type === 'microphone' || this.config.icon.type === 'custom') {\n const iconElement = micButton.querySelector('svg') || micButton.querySelector('img');\n if (iconElement && iconElement.tagName === 'svg') {\n iconElement.innerHTML = `\n <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\"/>\n <path d=\"M9 9h6\"/>\n `;\n }\n }\n } else {\n micButton.classList.remove('active');\n micButton.title = 'Click to start listening';\n \n // Change back to original icon (only if using SVG microphone icon)\n if (this.config.icon.type === 'microphone') {\n const iconElement = micButton.querySelector('svg');\n if (iconElement) {\n iconElement.innerHTML = `\n <path d=\"M12 14c1.66 0 3-1.34 3-3V5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3z\"/>\n <path d=\"M17 11c0 2.76-2.24 5-5 5s-5-2.24-5-5H5c0 3.53 2.61 6.43 6 6.92V21h2v-3.08c3.39-.49 6-3.39 6-6.92h-2z\"/>\n `;\n }\n }\n }\n }\n\n async getSignedUrl() {\n // If getSessionUrl is not provided, construct URL directly from agentId and appId\n if (!this.config.getSessionUrl) {\n if (!this.config.agentId) {\n throw new Error('agentId is required');\n }\n \n // Build WebSocket URL directly\n const baseUrl = this.config.websocketUrl || 'wss://speech.talktopc.com/ws/conv';\n const params = new URLSearchParams();\n params.append('agentId', this.config.agentId);\n \n if (this.config.appId) {\n params.append('appId', this.config.appId);\n }\n \n // Add demo flag if in development\n if (this.config.demo !== false) {\n params.append('demo', 'true');\n }\n \n return `${baseUrl}?${params.toString()}`;\n }\n \n // Handle getSessionUrl as string (backend URL)\n if (typeof this.config.getSessionUrl === 'string') {\n const requestBody = {\n agentId: this.config.agentId,\n variables: this.config.variables || {}\n };\n \n // Add appId if provided in config\n if (this.config.appId) {\n requestBody.appId = this.config.appId;\n }\n \n const response = await fetch(this.config.getSessionUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(requestBody)\n });\n\n if (!response.ok) {\n throw new Error(`Failed to get session URL: ${response.statusText}`);\n }\n\n const data = await response.json();\n return data.signedUrl || data.wsUrl || data.url;\n }\n \n // Handle getSessionUrl as function\n else if (typeof this.config.getSessionUrl === 'function') {\n const params = {\n agentId: this.config.agentId,\n variables: this.config.variables || {}\n };\n \n // Add appId if provided in config\n if (this.config.appId) {\n params.appId = this.config.appId;\n }\n \n const result = await this.config.getSessionUrl(params);\n \n return typeof result === 'string' ? result : (result.signedUrl || result.wsUrl || result.url);\n }\n \n else {\n throw new Error('getSessionUrl must be a string (backend URL), a function, or omitted (for direct connection with agentId/appId)');\n }\n }\n\n addMessage(type, text) {\n const messages = document.getElementById('agent-messages');\n const message = document.createElement('div');\n message.className = `message ${type}`;\n message.textContent = text;\n messages.appendChild(message);\n messages.scrollTop = messages.scrollHeight;\n }\n\n showAgentThinking() {\n const messages = document.getElementById('agent-messages');\n const thinking = document.createElement('div');\n thinking.className = 'message agent agent-thinking';\n thinking.id = 'thinking-indicator';\n thinking.textContent = 'Agent is speaking...';\n messages.appendChild(thinking);\n messages.scrollTop = messages.scrollHeight;\n }\n\n hideAgentThinking() {\n const thinking = document.getElementById('thinking-indicator');\n if (thinking) thinking.remove();\n }\n\n showError(message) {\n const messages = document.getElementById('agent-messages');\n const error = document.createElement('div');\n error.className = 'error-message';\n error.textContent = message;\n messages.appendChild(error);\n }\n\n updateStatus(status) {\n // Status update handler (can be overridden by users)\n }\n\n // Public API methods\n updateConfig(newConfig) {\n // Deep merge nested objects\n const mergedConfig = { ...this.config };\n \n // Deep merge panel config if it exists\n if (newConfig.panel) {\n mergedConfig.panel = { ...this.config.panel, ...newConfig.panel };\n // Deep merge micButtonHint if it exists\n if (newConfig.panel.micButtonHint) {\n mergedConfig.panel.micButtonHint = {\n ...this.config.panel?.micButtonHint,\n ...newConfig.panel.micButtonHint\n };\n }\n }\n \n // Merge other configs (shallow merge is fine for these)\n if (newConfig.button) {\n mergedConfig.button = { ...this.config.button, ...newConfig.button };\n }\n if (newConfig.header) {\n mergedConfig.header = { ...this.config.header, ...newConfig.header };\n }\n if (newConfig.icon) {\n mergedConfig.icon = { ...this.config.icon, ...newConfig.icon };\n }\n if (newConfig.messages) {\n mergedConfig.messages = { ...this.config.messages, ...newConfig.messages };\n }\n \n // Merge direction property\n if (newConfig.direction !== undefined) {\n mergedConfig.direction = newConfig.direction;\n }\n \n // Merge any other top-level properties\n Object.keys(newConfig).forEach(key => {\n if (!['panel', 'button', 'header', 'icon', 'messages', 'direction'].includes(key)) {\n mergedConfig[key] = newConfig[key];\n }\n });\n \n this.config = this.mergeWithDefaults(mergedConfig);\n // Recreate widget with new config\n const existingWidget = document.getElementById('agent-widget');\n if (existingWidget) {\n existingWidget.remove();\n }\n this.createWidget();\n }\n\n destroy() {\n const widget = document.getElementById('agent-widget');\n if (widget) {\n widget.remove();\n }\n if (this.sdk) {\n this.sdk.disconnect();\n }\n }\n}\n","/**\n * VoiceInterface - Handles voice call UI and functionality\n * Part of the unified TextChatWidget\n */\n\nimport { AgentSDK } from '../index.js';\n\nexport class VoiceInterface {\n constructor(config) {\n this.config = config;\n this.audioStream = null;\n this.callStartTime = null;\n this.callTimerInterval = null;\n this.sdk = null;\n this.isActive = false;\n \n // Initialize AgentSDK for voice connection\n this.sdk = new AgentSDK({\n agentId: config.agentId,\n appId: config.appId,\n getSessionUrl: config.getSessionUrl,\n websocketUrl: config.websocketUrl,\n variables: config.variables || {},\n language: config.language || 'en'\n });\n \n // Setup SDK event handlers\n this.setupSDKEventHandlers();\n }\n \n /**\n * Setup event handlers for AgentSDK\n */\n setupSDKEventHandlers() {\n // Handle transcript updates\n this.sdk.onTranscript = (text) => {\n this.updateTranscript(text);\n };\n \n // Handle agent speaking state\n this.sdk.onAgentSpeaking = (isStart) => {\n const avatar = document.getElementById('voiceAvatarActive');\n if (avatar) {\n if (isStart) {\n avatar.classList.add('speaking');\n } else {\n avatar.classList.remove('speaking');\n }\n }\n };\n \n // Handle errors\n this.sdk.onError = (error) => {\n console.error('❌ Voice SDK Error:', error);\n this.showError(error.message || error);\n };\n }\n\n /**\n * Helper function to get tooltip text\n */\n // Helper function to get translated text\n t(key) {\n const lang = this.config.language || 'en';\n const translations = this.config.translations?.[lang] || this.config.translations?.en || {};\n return translations[key] || key;\n }\n\n getTooltip(key) {\n const tooltip = this.config.tooltips?.[key];\n if (tooltip !== null && tooltip !== undefined) return tooltip;\n // Use translations for default tooltips\n const defaults = {\n mute: this.t('mute'),\n speaker: this.t('speaker'),\n endCall: this.t('endCall')\n };\n return defaults[key] || '';\n }\n\n /**\n * Generate HTML for voice interface\n */\n generateHTML() {\n return `<div class=\"voice-interface\" id=\"voiceInterface\">\n <!-- Before Call State -->\n <div id=\"voiceIdleState\" style=\"display: flex; flex-direction: column; align-items: center; width: 100%;\">\n <div class=\"voice-avatar\" id=\"voiceAvatar\">\n 🤖\n </div>\n <div class=\"voice-status\">\n <div class=\"voice-status-title\">${this.t('clickToStartCall')}</div>\n <div class=\"voice-status-subtitle\">${this.t('realTimeVoice')}</div>\n </div>\n <!-- BIG START CALL BUTTON -->\n <button class=\"start-call-btn\" id=\"startCallBtn\">\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M20.01 15.38c-1.23 0-2.42-.2-3.53-.56-.35-.12-.74-.03-1.01.24l-1.57 1.97c-2.83-1.35-5.48-3.9-6.89-6.83l1.95-1.66c.27-.28.35-.67.24-1.02-.37-1.11-.56-2.3-.56-3.53 0-.54-.45-.99-.99-.99H4.19C3.65 3 3 3.24 3 3.99 3 13.28 10.73 21 20.01 21c.71 0 .99-.63.99-1.18v-3.45c0-.54-.45-.99-.99-.99z\"/>\n </svg>\n <span>${this.t('startCall')}</span>\n </button>\n </div>\n <!-- During Call State -->\n <div id=\"voiceActiveState\" style=\"display: none; flex-direction: column; align-items: center; width: 100%; height: 100%; justify-content: flex-start; overflow: hidden; padding-top: 10px;\">\n <div class=\"voice-avatar-active\" id=\"voiceAvatarActive\">\n <div class=\"voice-rings\">\n <div class=\"voice-ring\"></div>\n <div class=\"voice-ring\"></div>\n <div class=\"voice-ring\"></div>\n </div>\n 🤖\n </div>\n <div class=\"voice-status\">\n <div class=\"voice-status-title\" id=\"voiceStatusTitleActive\">${this.t('listening')}</div>\n <div class=\"voice-status-subtitle\" id=\"voiceStatusSubtitleActive\">${this.t('speakFreely')}</div>\n </div>\n <div class=\"voice-transcript\">\n <div class=\"transcript-label\">${this.t('liveTranscript')}</div>\n <div class=\"transcript-text empty\" id=\"transcriptText\">\n ${this.t('transcriptWillAppear')}\n </div>\n </div>\n <div class=\"voice-controls\">\n <button class=\"voice-control-btn secondary\" id=\"muteBtn\" title=\"${this.getTooltip('mute')}\">\n <svg width=\"64\" height=\"64\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"mute-icon\">\n <path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\"/>\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\"/>\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\"/>\n <line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\"/>\n <line x1=\"2\" y1=\"2\" x2=\"22\" y2=\"22\" class=\"mute-cross\" style=\"display: none; stroke: #ef4444; stroke-width: 3.5;\"/>\n </svg>\n </button>\n <button class=\"voice-control-btn primary active\" id=\"endCallBtn\" title=\"${this.getTooltip('endCall')}\">\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 24 24\" fill=\"#ef4444\">\n <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\"/>\n </svg>\n <div class=\"voice-timer\" id=\"voiceTimer\">00:00</div>\n </button>\n <button class=\"voice-control-btn secondary\" id=\"speakerBtn\" title=\"${this.getTooltip('speaker')}\">\n <svg width=\"64\" height=\"64\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"/>\n <path d=\"M19.07 4.93a10 10 0 0 1 0 14.14\"/>\n <path d=\"M15.54 8.46a5 5 0 0 1 0 7.07\"/>\n </svg>\n </button>\n </div>\n </div>\n </div>`;\n }\n\n /**\n * Generate CSS for voice interface\n */\n generateCSS() {\n const avatarBg = this.config.avatarBackgroundColor || '#667eea';\n const avatarActiveBg = this.config.avatarActiveBackgroundColor || this.config.avatarBackgroundColor || '#667eea';\n const statusTitleColor = this.config.statusTitleColor || '#1e293b';\n const statusSubtitleColor = this.config.statusSubtitleColor || '#64748b';\n const startCallBtnColor = this.config.startCallButtonColor || '#667eea';\n const startCallBtnTextColor = this.config.startCallButtonTextColor || '#FFFFFF';\n const transcriptBg = this.config.transcriptBackgroundColor || '#FFFFFF';\n const transcriptTextColor = this.config.transcriptTextColor || '#1e293b';\n const transcriptLabelColor = this.config.transcriptLabelColor || '#94a3b8';\n const controlBtnColor = this.config.controlButtonColor || '#FFFFFF';\n const controlBtnSecondaryColor = this.config.controlButtonSecondaryColor || '#64748b';\n const endCallBtnColor = this.config.endCallButtonColor || '#ef4444';\n \n return `\n /* Voice Interface Styles */\n .voice-interface { \n display: none; \n flex: 1; \n flex-direction: column;\n align-items: center; \n justify-content: flex-start; \n padding: 10px 20px 20px 20px; \n background: linear-gradient(180deg, #f8fafc 0%, #e0e7ff 100%);\n overflow: hidden;\n min-height: 0;\n }\n .voice-interface.active { display: flex; }\n \n /* Voice Avatar (idle state) */\n .voice-avatar {\n width: 120px;\n height: 120px;\n border-radius: 50%;\n background: linear-gradient(135deg, ${avatarBg} 0%, ${avatarActiveBg} 100%);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 56px;\n margin-top: 10px;\n margin-bottom: 16px;\n box-shadow: 0 10px 40px rgba(102, 126, 234, 0.3);\n transition: all 0.3s ease;\n flex-shrink: 0;\n }\n \n /* Voice Avatar (active state with animations) */\n .voice-avatar-active {\n width: 120px;\n height: 120px;\n border-radius: 50%;\n background: linear-gradient(135deg, ${avatarBg} 0%, ${avatarActiveBg} 100%);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 56px;\n margin-top: 10px;\n margin-bottom: 16px;\n position: relative;\n box-shadow: 0 10px 40px rgba(102, 126, 234, 0.3);\n animation: avatarPulse 2s ease-in-out infinite;\n flex-shrink: 0;\n }\n \n @keyframes avatarPulse {\n 0%, 100% { \n transform: scale(1);\n box-shadow: 0 10px 40px rgba(102, 126, 234, 0.3);\n }\n 50% { \n transform: scale(1.05);\n box-shadow: 0 15px 50px rgba(102, 126, 234, 0.5);\n }\n }\n \n .voice-avatar-active.speaking {\n animation: avatarSpeak 0.5s ease-in-out infinite;\n }\n \n @keyframes avatarSpeak {\n 0%, 100% { transform: scale(1); }\n 50% { transform: scale(1.08); }\n }\n \n /* Voice Rings Animation */\n .voice-rings {\n position: absolute;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n }\n \n .voice-ring {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n border: 2px solid rgba(102, 126, 234, 0.3);\n border-radius: 50%;\n opacity: 0;\n animation: ringExpand 2s ease-out infinite;\n }\n \n .voice-ring:nth-child(2) { animation-delay: 0.5s; }\n .voice-ring:nth-child(3) { animation-delay: 1s; }\n \n @keyframes ringExpand {\n 0% {\n width: 100%;\n height: 100%;\n opacity: 0.6;\n }\n 100% {\n width: 160%;\n height: 160%;\n opacity: 0;\n }\n }\n \n /* Voice Status */\n .voice-status {\n text-align: center;\n margin-bottom: 10px;\n flex-shrink: 0;\n }\n \n .voice-status-title {\n font-size: 18px;\n font-weight: 600;\n color: ${statusTitleColor};\n margin-bottom: 4px;\n }\n \n .voice-status-subtitle {\n font-size: 12px;\n color: ${statusSubtitleColor};\n }\n \n /* Start Call Button */\n .start-call-btn {\n margin-top: 20px;\n width: 200px;\n height: 56px;\n border-radius: 28px;\n border: none;\n background: ${startCallBtnColor};\n color: ${startCallBtnTextColor};\n font-size: 18px;\n font-weight: 600;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n box-shadow: 0 12px 30px rgba(102, 126, 234, 0.4);\n transition: all 0.3s ease;\n flex-shrink: 0;\n }\n \n .start-call-btn:hover {\n transform: translateY(-4px);\n box-shadow: 0 16px 40px rgba(102, 126, 234, 0.5);\n }\n \n .start-call-btn:active {\n transform: translateY(-2px);\n }\n \n /* Voice Transcript */\n .voice-transcript {\n background: ${transcriptBg};\n padding: 12px;\n border-radius: 12px;\n max-width: 300px;\n width: 100%;\n margin-bottom: 12px;\n min-height: 50px;\n max-height: 90px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n flex-shrink: 1;\n overflow-y: auto;\n }\n \n .transcript-label {\n font-size: 10px;\n color: ${transcriptLabelColor};\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 6px;\n }\n \n .transcript-text {\n font-size: 14px;\n color: ${transcriptTextColor};\n line-height: 1.5;\n min-height: 30px;\n }\n \n .transcript-text.empty {\n color: #cbd5e1;\n font-style: italic;\n }\n \n /* Voice Controls */\n .voice-controls {\n display: flex;\n gap: 12px;\n align-items: center;\n flex-shrink: 0;\n }\n \n .voice-control-btn {\n width: 72px;\n height: 72px;\n border-radius: 50%;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s;\n position: relative;\n flex-shrink: 0;\n }\n \n .voice-control-btn.primary {\n width: 80px;\n height: 80px;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n box-shadow: 0 8px 20px rgba(102, 126, 234, 0.4);\n }\n \n .voice-control-btn.primary:hover {\n transform: scale(1.05);\n box-shadow: 0 10px 25px rgba(102, 126, 234, 0.5);\n }\n \n .voice-control-btn.primary.active {\n background: ${endCallBtnColor === '#ef4444' ? 'white' : controlBtnColor};\n animation: recordingPulse 1.5s ease-in-out infinite;\n box-shadow: 0 8px 20px ${endCallBtnColor === '#ef4444' ? 'rgba(239, 68, 68, 0.4)' : 'rgba(0, 0, 0, 0.2)'};\n }\n \n @keyframes recordingPulse {\n 0%, 100% { \n box-shadow: 0 8px 20px rgba(239, 68, 68, 0.4);\n }\n 50% { \n box-shadow: 0 8px 30px rgba(239, 68, 68, 0.7);\n }\n }\n \n .voice-control-btn.secondary {\n background: ${controlBtnColor};\n color: ${controlBtnSecondaryColor};\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n }\n \n .voice-control-btn.secondary:hover {\n background: #f8fafc;\n transform: scale(1.05);\n }\n \n .voice-control-btn.secondary.muted {\n background: #f3f4f6;\n }\n \n .voice-control-btn.secondary.muted .mute-icon {\n stroke: #9ca3af !important;\n }\n \n .voice-timer {\n position: absolute;\n bottom: -24px;\n font-size: 12px;\n color: #64748b;\n font-weight: 500;\n }\n \n @media (max-width: 768px) {\n .voice-interface {\n padding: 8px 12px 16px 12px;\n }\n \n .voice-avatar,\n .voice-avatar-active {\n width: 100px;\n height: 100px;\n font-size: 48px;\n margin-top: 8px;\n margin-bottom: 12px;\n }\n \n .voice-status-title {\n font-size: 16px;\n }\n \n .voice-status-subtitle {\n font-size: 13px;\n }\n \n .voice-start-call-btn {\n padding: 12px 24px;\n font-size: 15px;\n min-height: 44px;\n }\n \n .voice-transcript-container {\n padding: 12px;\n max-height: 180px;\n }\n \n .voice-transcript-text {\n font-size: 14px;\n line-height: 1.5;\n }\n \n .voice-controls {\n gap: 12px;\n padding: 12px;\n }\n \n .voice-control-btn {\n width: 48px;\n height: 48px;\n min-width: 48px;\n min-height: 48px;\n }\n \n .voice-control-btn.end-call {\n width: 52px;\n height: 52px;\n min-width: 52px;\n min-height: 52px;\n }\n }\n \n @media (max-width: 480px) {\n .voice-interface {\n padding: 6px 10px 12px 10px;\n }\n \n .voice-avatar,\n .voice-avatar-active {\n width: 90px;\n height: 90px;\n font-size: 42px;\n }\n \n .voice-status-title {\n font-size: 15px;\n }\n \n .voice-status-subtitle {\n font-size: 12px;\n }\n \n .voice-start-call-btn {\n padding: 10px 20px;\n font-size: 14px;\n }\n \n .voice-transcript-container {\n padding: 10px;\n max-height: 150px;\n }\n \n .voice-transcript-text {\n font-size: 13px;\n }\n \n .voice-controls {\n gap: 10px;\n padding: 10px;\n }\n \n .voice-control-btn {\n width: 44px;\n height: 44px;\n min-width: 44px;\n min-height: 44px;\n }\n \n .voice-control-btn.end-call {\n width: 48px;\n height: 48px;\n min-width: 48px;\n min-height: 48px;\n }\n }\n `;\n }\n\n /**\n * Setup event handlers for voice interface\n */\n setupEventHandlers(callbacks) {\n const startCallBtn = document.getElementById('startCallBtn');\n const endCallBtn = document.getElementById('endCallBtn');\n const muteBtn = document.getElementById('muteBtn');\n const speakerBtn = document.getElementById('speakerBtn');\n \n if (startCallBtn) {\n startCallBtn.onclick = () => this.startVoiceCall();\n }\n if (endCallBtn) {\n endCallBtn.onclick = () => this.endVoiceCall();\n }\n if (muteBtn) {\n muteBtn.onclick = () => this.toggleMute();\n }\n if (speakerBtn) {\n speakerBtn.onclick = () => this.toggleSpeaker();\n }\n }\n\n /**\n * Get signed URL for WebSocket connection\n */\n async getSignedUrl() {\n // If getSessionUrl is not provided, construct URL directly from agentId and appId\n if (!this.config.getSessionUrl) {\n if (!this.config.agentId) {\n throw new Error('agentId is required');\n }\n \n // Build WebSocket URL directly\n const baseUrl = this.config.websocketUrl || 'wss://speech.talktopc.com/ws/conv';\n const params = new URLSearchParams();\n params.append('agentId', this.config.agentId);\n \n if (this.config.appId) {\n params.append('appId', this.config.appId);\n }\n \n // Add demo flag if in development\n if (this.config.demo !== false) {\n params.append('demo', 'true');\n }\n \n return `${baseUrl}?${params.toString()}`;\n }\n \n // Handle getSessionUrl as string (backend URL)\n if (typeof this.config.getSessionUrl === 'string') {\n const requestBody = {\n agentId: this.config.agentId,\n variables: this.config.variables || {}\n };\n \n // Add appId if provided in config\n if (this.config.appId) {\n requestBody.appId = this.config.appId;\n }\n \n const response = await fetch(this.config.getSessionUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(requestBody)\n });\n\n if (!response.ok) {\n throw new Error(`Failed to get session URL: ${response.statusText}`);\n }\n\n const data = await response.json();\n return data.signedUrl || data.wsUrl || data.url;\n }\n \n // Handle getSessionUrl as function\n else if (typeof this.config.getSessionUrl === 'function') {\n const params = {\n agentId: this.config.agentId,\n variables: this.config.variables || {}\n };\n \n // Add appId if provided in config\n if (this.config.appId) {\n params.appId = this.config.appId;\n }\n \n const result = await this.config.getSessionUrl(params);\n \n return typeof result === 'string' ? result : (result.signedUrl || result.wsUrl || result.url);\n }\n \n else {\n throw new Error('getSessionUrl must be a string (backend URL), a function, or omitted (for direct connection with agentId/appId)');\n }\n }\n\n /**\n * Start voice call\n */\n async startVoiceCall() {\n if (this.isActive) {\n console.log('⚠️ Voice call already active');\n return;\n }\n \n console.log('🎤 Starting voice call...');\n \n try {\n // Hide idle state, show active state\n const idleState = document.getElementById('voiceIdleState');\n const activeState = document.getElementById('voiceActiveState');\n const voiceInterface = document.getElementById('voiceInterface');\n \n if (idleState) idleState.style.display = 'none';\n if (activeState) activeState.style.display = 'flex';\n \n // Prevent any scrolling when switching states\n if (voiceInterface) {\n voiceInterface.scrollTop = 0;\n }\n \n // Get signed URL and connect\n const signedUrl = await this.getSignedUrl();\n console.log('🔗 Got signed URL:', signedUrl);\n \n const connected = await this.sdk.connect(signedUrl);\n console.log('✅ Connected to WebSocket, connected:', connected);\n \n // Wait for connection to be fully ready (for hello message exchange)\n let attempts = 0;\n while (!this.sdk.isConnected && attempts < 50) {\n await new Promise(resolve => setTimeout(resolve, 100));\n attempts++;\n }\n \n if (this.sdk.isConnected) {\n console.log('✅ WebSocket ready, starting listening...');\n await this.sdk.startListening();\n console.log('🎤 Started listening');\n \n this.isActive = true;\n \n // Start timer\n this.callStartTime = Date.now();\n this.callTimerInterval = setInterval(() => {\n const elapsed = Date.now() - this.callStartTime;\n const minutes = Math.floor(elapsed / 60000);\n const seconds = Math.floor((elapsed % 60000) / 1000);\n const timerEl = document.getElementById('voiceTimer');\n if (timerEl) {\n timerEl.textContent = `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n }\n }, 1000);\n } else {\n console.warn('⚠️ Connection not fully ready, but trying to start listening anyway...');\n await this.sdk.startListening();\n console.log('🎤 Started listening');\n \n this.isActive = true;\n \n // Start timer\n this.callStartTime = Date.now();\n this.callTimerInterval = setInterval(() => {\n const elapsed = Date.now() - this.callStartTime;\n const minutes = Math.floor(elapsed / 60000);\n const seconds = Math.floor((elapsed % 60000) / 1000);\n const timerEl = document.getElementById('voiceTimer');\n if (timerEl) {\n timerEl.textContent = `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n }\n }, 1000);\n }\n \n console.log('✅ Voice call started successfully');\n \n } catch (error) {\n console.error('❌ Error starting voice call:', error);\n this.showError(error.message || error);\n \n // Reset UI state on error\n const idleState = document.getElementById('voiceIdleState');\n const activeState = document.getElementById('voiceActiveState');\n if (idleState) idleState.style.display = 'flex';\n if (activeState) activeState.style.display = 'none';\n }\n }\n\n /**\n * End voice call\n */\n endVoiceCall() {\n console.log('🔴 Ending voice call...');\n \n // Stop listening and disconnect\n if (this.sdk && this.isActive) {\n this.sdk.stopListening();\n this.sdk.disconnect();\n this.isActive = false;\n }\n \n // Stop audio stream (if any)\n if (this.audioStream) {\n this.audioStream.getTracks().forEach(track => track.stop());\n this.audioStream = null;\n }\n \n // Stop timer\n if (this.callTimerInterval) {\n clearInterval(this.callTimerInterval);\n this.callTimerInterval = null;\n }\n \n // Show idle state, hide active state\n const idleState = document.getElementById('voiceIdleState');\n const activeState = document.getElementById('voiceActiveState');\n \n if (idleState) idleState.style.display = 'flex';\n if (activeState) activeState.style.display = 'none';\n \n // Reset transcript\n const transcriptEl = document.getElementById('transcriptText');\n if (transcriptEl) {\n transcriptEl.textContent = this.t('transcriptWillAppear');\n transcriptEl.classList.add('empty');\n }\n \n // Remove speaking state from avatar\n const avatar = document.getElementById('voiceAvatarActive');\n if (avatar) {\n avatar.classList.remove('speaking');\n }\n \n console.log('✅ Voice call ended');\n }\n \n /**\n * Update transcript text\n */\n updateTranscript(text) {\n const transcriptEl = document.getElementById('transcriptText');\n if (transcriptEl) {\n transcriptEl.textContent = text;\n transcriptEl.classList.remove('empty');\n }\n }\n \n /**\n * Show error message\n */\n showError(message) {\n const transcriptEl = document.getElementById('transcriptText');\n if (transcriptEl) {\n transcriptEl.textContent = `${this.t('error')}: ${message}`;\n transcriptEl.classList.remove('empty');\n }\n }\n\n /**\n * Toggle mute state\n */\n toggleMute() {\n if (!this.sdk || !this.isActive) {\n return;\n }\n \n // Access the audio recorder's media stream through VoiceSDK\n let audioTrack = null;\n if (this.sdk.voiceSDK && this.sdk.voiceSDK.audioRecorder && this.sdk.voiceSDK.audioRecorder.mediaStream) {\n audioTrack = this.sdk.voiceSDK.audioRecorder.mediaStream.getAudioTracks()[0];\n }\n \n // Fallback to stored audioStream if available\n if (!audioTrack && this.audioStream) {\n audioTrack = this.audioStream.getAudioTracks()[0];\n }\n \n if (audioTrack) {\n audioTrack.enabled = !audioTrack.enabled;\n \n const muteBtn = document.getElementById('muteBtn');\n const muteIcon = muteBtn?.querySelector('.mute-icon');\n const muteCross = muteBtn?.querySelector('.mute-cross');\n \n if (muteBtn && muteIcon && muteCross) {\n if (!audioTrack.enabled) {\n // Muted state: gray color and show cross\n muteIcon.style.stroke = '#9ca3af'; // gray color\n muteCross.style.display = 'block';\n muteBtn.classList.add('muted');\n } else {\n // Unmuted state: normal color and hide cross\n muteIcon.style.stroke = '';\n muteCross.style.display = 'none';\n muteBtn.classList.remove('muted');\n }\n }\n \n console.log(audioTrack.enabled ? '🔊 Unmuted' : '🔇 Muted');\n } else {\n console.warn('⚠️ No audio track available for mute toggle');\n }\n }\n\n /**\n * Toggle speaker (placeholder)\n */\n toggleSpeaker() {\n // Speaker toggle logic (placeholder)\n console.log('🔊 Speaker toggle');\n }\n\n /**\n * Cleanup resources\n */\n destroy() {\n // End call if active\n if (this.isActive) {\n this.endVoiceCall();\n }\n \n // Clean up voice call resources\n if (this.audioStream) {\n this.audioStream.getTracks().forEach(track => track.stop());\n this.audioStream = null;\n }\n if (this.callTimerInterval) {\n clearInterval(this.callTimerInterval);\n this.callTimerInterval = null;\n }\n \n // Disconnect SDK\n if (this.sdk) {\n this.sdk.disconnect();\n this.sdk = null;\n }\n }\n}\n\n","/**\n * TextInterface - Handles text chat UI and functionality\n * Part of the unified TextChatWidget\n */\n\nexport class TextInterface {\n constructor(config, sdk) {\n this.config = config;\n this.sdk = sdk;\n this.streamingEl = null;\n this.hasStartedStreaming = false;\n this.isActive = false;\n }\n\n // Helper function to get translated text\n t(key) {\n const lang = this.config.language || 'en';\n const translations = this.config.translations?.[lang] || this.config.translations?.en || {};\n return translations[key] || key;\n }\n\n /**\n * Generate HTML for text interface\n */\n generateHTML() {\n // Use text config, fallback to panel config, then translation, then default\n const inputPlaceholder = this.config.inputPlaceholder || \n this.config.panel?.inputPlaceholder || \n this.t('typeMessage') || \n 'Type your message...';\n return `<div class=\"text-interface\" id=\"textInterface\">\n <div class=\"messages-container\" id=\"messagesContainer\">\n <div class=\"empty-state\">\n <div class=\"empty-state-icon\">💬</div>\n <div class=\"empty-state-title\">${this.t('hello')}</div>\n <div class=\"empty-state-text\">${this.t('sendMessage')}</div>\n </div>\n </div>\n <div class=\"input-container\">\n <div class=\"input-wrapper\" style=\"flex:1;\">\n <textarea class=\"message-input\" id=\"messageInput\" placeholder=\"${inputPlaceholder}\" rows=\"1\" dir=\"${this.config.direction || 'ltr'}\"></textarea>\n </div>\n <button class=\"send-button\" id=\"sendButton\" aria-label=\"${this.t('sendMessageAria')}\">${this.config.sendButtonText || '➤'}</button>\n ${(this.config.sendButtonHint?.text || this.config.panel?.sendButtonHint?.text) ? `\n <div class=\"send-button-hint\" style=\"color: ${this.config.sendButtonHint?.color || this.config.panel?.sendButtonHint?.color || '#6B7280'}; font-size: ${this.config.sendButtonHint?.fontSize || this.config.panel?.sendButtonHint?.fontSize || '12px'}; text-align: center; margin-top: 4px;\">\n ${this.config.sendButtonHint?.text || this.config.panel?.sendButtonHint?.text}\n </div>\n ` : ''}\n </div>\n </div>`;\n }\n\n /**\n * Generate CSS for text interface\n */\n generateCSS() {\n const messages = this.config.messages;\n const panel = this.config.panel;\n const anim = this.config.animation;\n \n // Use text config, fallback to panel config for backward compatibility\n const sendButtonColor = this.config.sendButtonColor || this.config.panel?.sendButtonColor || '#7C3AED'; // Purple default\n const sendButtonHoverColor = this.config.sendButtonHoverColor || this.config.panel?.sendButtonHoverColor || '#6D28D9';\n const sendButtonTextColor = this.config.sendButtonTextColor || this.config.panel?.sendButtonTextColor || '#FFFFFF';\n const inputPlaceholder = this.config.inputPlaceholder || this.config.panel?.inputPlaceholder || 'Type your message...';\n const inputBorderColor = this.config.inputBorderColor || this.config.panel?.inputBorderColor || '#E5E7EB';\n const inputFocusColor = this.config.inputFocusColor || this.config.panel?.inputFocusColor || '#7C3AED'; // Purple default\n const inputBackgroundColor = this.config.inputBackgroundColor || this.config.panel?.inputBackgroundColor || '#FFFFFF';\n const inputTextColor = this.config.inputTextColor || this.config.panel?.inputTextColor || '#1F2937';\n const inputFontSize = this.config.inputFontSize || this.config.panel?.inputFontSize || '14px';\n const inputBorderRadius = this.config.inputBorderRadius || this.config.panel?.inputBorderRadius || 20;\n const inputPadding = this.config.inputPadding || this.config.panel?.inputPadding || '6px 14px';\n \n return `\n /* Messages container using new classes */\n #messagesContainer { \n flex: 1; \n overflow-y: auto; \n overflow-x: hidden; \n padding: 20px; \n background: #f8fafc; \n display: flex; \n flex-direction: column; \n gap: 16px; \n min-height: 0; \n }\n .empty-state { \n flex: 1; \n display: flex; \n flex-direction: column; \n align-items: center; \n justify-content: center; \n gap: 12px; \n color: #64748b; \n text-align: center; \n padding: 20px; \n }\n .empty-state-icon { font-size: 48px; opacity: 0.3; }\n .empty-state-title { font-size: 20px; font-weight: 700; color: #334155; }\n .empty-state-text { font-size: 13px; max-width: 280px; }\n\n .text-interface { \n display: none; \n flex: 1; \n flex-direction: column; \n min-height: 0; \n overflow: hidden; \n }\n .text-interface.active { display: flex; }\n \n .message { \n display: flex; \n gap: 8px; \n padding: 4px 0; \n max-width: 100%; \n align-items: center; \n }\n .message.edge-left { flex-direction: row; }\n .message.edge-right { flex-direction: row-reverse; }\n .message-bubble { \n padding: 12px; \n border-radius: ${messages.borderRadius}px; \n max-width: 80%; \n font-size: ${messages.fontSize}; \n color: ${messages.textColor}; \n word-wrap: break-word; \n text-align: ${this.config.direction === 'rtl' ? 'right' : 'left'}; \n direction: ${this.config.direction || 'ltr'};\n }\n .message.user { \n background: ${messages.userBackgroundColor}; \n align-self: ${this.config.direction === 'rtl' ? 'flex-start' : 'flex-end'}; \n }\n .message.agent { \n background: ${messages.agentBackgroundColor}; \n align-self: ${this.config.direction === 'rtl' ? 'flex-end' : 'flex-start'}; \n }\n .message .message-bubble { \n text-align: ${this.config.direction === 'rtl' ? 'right' : 'left'}; \n }\n .message-avatar { \n width: 20px; \n height: 20px; \n display: flex; \n align-items: center; \n justify-content: center; \n flex-shrink: 0; \n color: inherit; \n font-size: 18px; \n line-height: 1; \n background: transparent; \n border: none; \n }\n .message-avatar.user { background: transparent; }\n .message-avatar.agent { background: transparent; }\n \n .message.system {\n background: ${messages.systemBackgroundColor};\n align-self: flex-start;\n }\n .message.error {\n background: ${messages.errorBackgroundColor};\n align-self: flex-start;\n }\n \n .input-container {\n display: flex;\n gap: 8px;\n padding: 12px 16px;\n background: #FFFFFF;\n border-top: 1px solid #E5E7EB;\n align-items: center;\n flex-shrink: 0;\n flex-direction: ${this.config.direction === 'rtl' ? 'row-reverse' : 'row'};\n }\n \n .input-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n }\n \n .message-input {\n width: 100%;\n min-height: 32px;\n max-height: 120px;\n padding: ${inputPadding};\n border: 1px solid ${inputBorderColor};\n border-radius: ${inputBorderRadius}px;\n font-size: ${inputFontSize};\n font-family: inherit;\n line-height: 1.3;\n resize: none;\n overflow-y: auto;\n background: ${inputBackgroundColor};\n color: ${inputTextColor};\n vertical-align: top;\n margin: 0;\n display: block;\n white-space: pre-wrap;\n word-wrap: break-word;\n text-align: ${this.config.direction === 'rtl' ? 'right' : 'left'};\n direction: ${this.config.direction || 'ltr'};\n -webkit-appearance: none;\n appearance: none;\n box-sizing: border-box;\n }\n \n .message-input:focus {\n outline: none;\n border-color: ${inputFocusColor};\n background: ${inputBackgroundColor === '#FFFFFF' ? '#FFFFFF' : inputBackgroundColor};\n box-shadow: 0 0 0 3px ${inputFocusColor}33;\n }\n \n .message-input::placeholder {\n color: #9CA3AF;\n text-align: ${this.config.direction === 'rtl' ? 'right' : 'left'};\n }\n \n .send-button {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n border: none;\n background: ${sendButtonColor};\n color: ${sendButtonTextColor};\n font-size: ${this.config.sendButtonFontSize || this.config.panel?.sendButtonFontSize || '18px'};\n font-weight: ${this.config.sendButtonFontWeight || this.config.panel?.sendButtonFontWeight || '500'};\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: all 0.2s ease;\n box-shadow: 0 4px 12px rgba(124, 60, 237, 0.3);\n }\n \n .send-button:hover:not(:disabled) {\n background: ${sendButtonHoverColor};\n transform: scale(1.05);\n box-shadow: 0 6px 16px rgba(124, 60, 237, 0.4);\n }\n \n .send-button-hint {\n width: 100%;\n text-align: center;\n margin-top: 4px;\n }\n \n .send-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n \n .typing-indicator {\n display: inline-flex;\n gap: 4px;\n align-items: center;\n }\n \n .typing-dot {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: #64748b;\n animation: typingDot 1.4s ease-in-out infinite;\n }\n \n .typing-dot:nth-child(2) { animation-delay: 0.2s; }\n .typing-dot:nth-child(3) { animation-delay: 0.4s; }\n \n @keyframes typingDot {\n 0%, 60%, 100% { transform: translateY(0); opacity: 0.7; }\n 30% { transform: translateY(-8px); opacity: 1; }\n }\n \n .error-message {\n padding: 12px;\n background: ${messages.errorBackgroundColor};\n border-radius: ${messages.borderRadius}px;\n color: #991B1B;\n font-size: ${messages.fontSize};\n margin: 8px 0;\n }\n \n @media (max-width: 768px) {\n #messagesContainer {\n padding: 12px;\n gap: 12px;\n }\n \n .message-bubble {\n max-width: 85%;\n font-size: 14px;\n padding: 10px;\n }\n \n .text-input-container {\n padding: 10px;\n gap: 8px;\n }\n \n #text-chat-input {\n font-size: 16px !important; /* Prevents iOS zoom on focus */\n padding: 10px 14px;\n min-height: 44px;\n }\n \n #text-chat-send {\n min-width: 56px;\n min-height: 44px;\n width: 56px;\n height: 44px;\n }\n \n .empty-state-icon {\n font-size: 40px;\n }\n \n .empty-state-title {\n font-size: 18px;\n }\n \n .empty-state-text {\n font-size: 12px;\n }\n }\n \n @media (max-width: 480px) {\n #messagesContainer {\n padding: 10px;\n gap: 10px;\n }\n \n .message-bubble {\n max-width: 90%;\n font-size: 13px;\n padding: 8px;\n }\n \n .text-input-container {\n padding: 8px;\n }\n \n #text-chat-input {\n font-size: 16px !important;\n padding: 8px 12px;\n }\n }\n `;\n }\n\n /**\n * Setup event handlers for text interface\n */\n setupEventHandlers() {\n const sendButton = document.getElementById('sendButton');\n const inputField = document.getElementById('messageInput');\n const newChatBtn = document.getElementById('newChatBtn');\n \n if (sendButton) sendButton.onclick = () => this.sendMessage();\n if (newChatBtn) newChatBtn.onclick = () => this.startNewChat();\n \n // Update placeholder and direction when config changes\n this.updateInputAttributes();\n \n // Send on Enter key, auto-resize textarea, and keep cursor visible\n if (inputField) {\n // Set initial height\n inputField.style.height = '32px';\n inputField.style.overflow = 'hidden';\n \n // Auto-resize textarea as user types\n const autoResize = () => {\n inputField.style.height = 'auto';\n const newHeight = Math.min(inputField.scrollHeight, 120);\n inputField.style.height = newHeight + 'px';\n inputField.style.overflowY = newHeight >= 120 ? 'auto' : 'hidden';\n \n // When at max height with overflow, scroll to bottom to keep cursor visible\n if (newHeight >= 120) {\n // Small delay to ensure height is applied first\n setTimeout(() => {\n inputField.scrollTop = inputField.scrollHeight;\n }, 0);\n }\n };\n \n inputField.addEventListener('input', autoResize);\n \n inputField.addEventListener('keydown', (e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n this.sendMessage();\n } else if (e.key === 'Enter' && e.shiftKey) {\n // Allow Enter with Shift for new line, resize after\n setTimeout(autoResize, 0);\n }\n });\n }\n }\n\n /**\n * Start new chat\n */\n startNewChat() {\n try { \n localStorage.removeItem('ttp_text_chat_conversation_id'); \n } catch (_) {}\n \n if (this.sdk) {\n this.sdk.config.conversationId = null;\n }\n \n // Reset UI messages to empty state\n const container = document.getElementById('messagesContainer');\n if (container) {\n container.innerHTML = `\n <div class=\"empty-state\">\n <div class=\"empty-state-icon\">💬</div>\n <div class=\"empty-state-title\">${this.t('hello')}</div>\n <div class=\"empty-state-text\">${this.t('sendMessage')}</div>\n </div>`;\n }\n \n // Focus message input\n const input = document.getElementById('messageInput');\n if (input) input.focus();\n }\n\n /**\n * Update input attributes (placeholder, direction) when config changes\n */\n updateInputAttributes() {\n const inputField = document.getElementById('messageInput');\n if (inputField) {\n // Update placeholder based on current language\n const inputPlaceholder = this.config.inputPlaceholder || \n this.config.panel?.inputPlaceholder || \n this.t('typeMessage') || \n 'Type your message...';\n inputField.placeholder = inputPlaceholder;\n \n // Update direction\n inputField.dir = this.config.direction || 'ltr';\n \n // Update text-align style\n inputField.style.textAlign = this.config.direction === 'rtl' ? 'right' : 'left';\n }\n }\n\n /**\n * Show text interface\n */\n show() {\n const textInterface = document.getElementById('textInterface');\n if (textInterface) textInterface.classList.add('active');\n \n // Focus input soon after render\n setTimeout(() => {\n const input = document.getElementById('messageInput');\n if (input) input.focus();\n }, 50);\n }\n\n /**\n * Hide text interface\n */\n hide() {\n const textInterface = document.getElementById('textInterface');\n if (textInterface) textInterface.classList.remove('active');\n }\n\n /**\n * Start chat session\n */\n async startChat() {\n // No-op with single-shot design; connection happens per message\n this.isActive = true;\n this.updateSendButtonState();\n }\n\n /**\n * Send message\n */\n async sendMessage() {\n const input = document.getElementById('messageInput');\n const text = input.value.trim();\n \n if (!text) {\n return;\n }\n \n // Ensure active state\n if (!this.isActive) {\n await this.startChat();\n }\n \n // Add user message to UI\n this.addMessage('user', text);\n \n // Clear input and reset height\n input.value = '';\n input.style.height = '32px';\n input.style.overflow = 'hidden';\n \n // Prepare streaming bubble and send via SDK\n try {\n this.beginStreaming();\n await this.sdk.sendMessage(text);\n } catch (error) {\n console.error('❌ Failed to send message:', error);\n this.showError(error.message);\n this.stopStreamingState();\n }\n }\n\n /**\n * Update send button state\n */\n updateSendButtonState() {\n const sendButton = document.getElementById('sendButton');\n if (!sendButton) return;\n \n sendButton.disabled = !this.isActive; // single-shot; enable when ready for input\n }\n\n /**\n * Add message to UI\n */\n addMessage(type, text) {\n const messages = document.getElementById('messagesContainer');\n if (!messages) return;\n \n // Remove empty state if present\n const emptyState = messages.querySelector('.empty-state');\n if (emptyState) {\n emptyState.remove();\n }\n \n const message = document.createElement('div');\n const edgeClass = (this.config.direction === 'rtl')\n ? (type === 'user' ? 'edge-left' : 'edge-right')\n : (type === 'user' ? 'edge-right' : 'edge-left');\n message.className = `message ${type} ${edgeClass}`;\n\n const avatar = document.createElement('div');\n avatar.className = `message-avatar ${type}`;\n avatar.textContent = type === 'user' ? '👤' : '🤖';\n\n const bubble = document.createElement('div');\n bubble.className = 'message-bubble';\n bubble.textContent = text;\n\n // Order is controlled by edgeClass via flex-direction\n message.appendChild(avatar);\n message.appendChild(bubble);\n messages.appendChild(message);\n messages.scrollTop = messages.scrollHeight;\n }\n\n /**\n * Begin streaming response\n */\n beginStreaming() {\n const messages = document.getElementById('messagesContainer');\n if (!messages) return;\n \n // Clean any previous indicator\n this.stopStreamingState();\n \n const el = document.createElement('div');\n const edgeClass = (this.config.direction === 'rtl') ? 'edge-right' : 'edge-left';\n el.className = `message agent ${edgeClass}`;\n el.id = 'agent-streaming';\n\n const avatar = document.createElement('div');\n avatar.className = 'message-avatar agent';\n avatar.textContent = '🤖';\n \n const bubble = document.createElement('div');\n bubble.className = 'message-bubble';\n // show typing dots until first chunk\n bubble.innerHTML = '<span class=\"typing-indicator\"><span class=\"typing-dot\"></span><span class=\"typing-dot\"></span><span class=\"typing-dot\"></span></span>';\n\n el.appendChild(avatar);\n el.appendChild(bubble);\n messages.appendChild(el);\n this.streamingEl = bubble;\n this.hasStartedStreaming = false;\n messages.scrollTop = messages.scrollHeight;\n }\n\n /**\n * Append chunk to streaming response\n */\n appendStreamingChunk(chunk) {\n if (!this.streamingEl) return;\n \n if (!this.hasStartedStreaming) {\n // remove typing indicator on first content\n this.streamingEl.textContent = '';\n this.hasStartedStreaming = true;\n }\n \n this.streamingEl.textContent += chunk;\n const messages = document.getElementById('messagesContainer');\n if (messages) {\n messages.scrollTop = messages.scrollHeight;\n }\n }\n\n /**\n * Finalize streaming response\n */\n finalizeStreaming(fullText) {\n if (this.streamingEl) {\n this.streamingEl.textContent = fullText || this.streamingEl.textContent;\n const container = document.getElementById('agent-streaming');\n if (container) container.id = '';\n this.streamingEl = null;\n }\n this.updateSendButtonState();\n }\n\n /**\n * Stop streaming state\n */\n stopStreamingState() {\n const existing = document.getElementById('agent-streaming');\n if (existing) existing.remove();\n this.streamingEl = null;\n this.hasStartedStreaming = false;\n }\n\n /**\n * Show error message\n */\n showError(message) {\n const messages = document.getElementById('messagesContainer');\n if (!messages) return;\n \n const error = document.createElement('div');\n error.className = 'error-message';\n error.textContent = message;\n messages.appendChild(error);\n messages.scrollTop = messages.scrollHeight;\n }\n\n /**\n * Set active state\n */\n setActive(active) {\n this.isActive = active;\n this.updateSendButtonState();\n }\n}\n\n","export default {\n \"en\": {\n \"landingTitle\": \"How would you like to communicate?\",\n \"voiceCall\": \"Voice Call\",\n \"textChat\": \"Text Chat\",\n \"clickToStartCall\": \"Click to Start Call\",\n \"realTimeVoice\": \"Real-time voice conversation\",\n \"startCall\": \"Start Call\",\n \"listening\": \"Listening...\",\n \"speakFreely\": \"Speak freely\",\n \"liveTranscript\": \"Live Transcript\",\n \"transcriptWillAppear\": \"Transcript will appear here during the call...\",\n \"mute\": \"Mute\",\n \"speaker\": \"Speaker\",\n \"endCall\": \"End Call\",\n \"hello\": \"Hello! How can I help?\",\n \"sendMessage\": \"Send a message to get started\",\n \"online\": \"Online\",\n \"newChat\": \"New Chat\",\n \"back\": \"Back\",\n \"close\": \"Close\",\n \"error\": \"Error\",\n \"typeMessage\": \"Type your message...\",\n \"sendMessageAria\": \"Send message\"\n },\n \"he\": {\n \"landingTitle\": \"איך תרצה לתקשר?\",\n \"voiceCall\": \"שיחה קולית\",\n \"textChat\": \"צ'אט טקסט\",\n \"clickToStartCall\": \"לחץ להתחלת שיחה\",\n \"realTimeVoice\": \"שיחה קולית בזמן אמת\",\n \"startCall\": \"התחל שיחה\",\n \"listening\": \"מקשיב...\",\n \"speakFreely\": \"דבר בחופשיות\",\n \"liveTranscript\": \"תמלול בזמן אמת\",\n \"transcriptWillAppear\": \"התמלול יופיע כאן במהלך השיחה...\",\n \"mute\": \"השתק\",\n \"speaker\": \"רמקול\",\n \"endCall\": \"סיים שיחה\",\n \"hello\": \"שלום! איך אפשר לעזור?\",\n \"sendMessage\": \"שלח הודעה או עבור למצב קולי לשיחה בזמן אמת\",\n \"online\": \"מקוון\",\n \"newChat\": \"צ'אט חדש\",\n \"back\": \"חזור\",\n \"close\": \"סגור\",\n \"error\": \"שגיאה\",\n \"typeMessage\": \"הקלד הודעה...\",\n \"sendMessageAria\": \"שלח הודעה\"\n },\n \"ar\": {\n \"landingTitle\": \"كيف تريد التواصل؟\",\n \"voiceCall\": \"مكالمة صوتية\",\n \"textChat\": \"دردشة نصية\",\n \"clickToStartCall\": \"انقر لبدء المكالمة\",\n \"realTimeVoice\": \"محادثة صوتية في الوقت الفعلي\",\n \"startCall\": \"ابدأ المكالمة\",\n \"listening\": \"الاستماع...\",\n \"speakFreely\": \"تكلم بحرية\",\n \"liveTranscript\": \"نص مباشر\",\n \"transcriptWillAppear\": \"سيظهر النص هنا أثناء المكالمة...\",\n \"mute\": \"كتم الصوت\",\n \"speaker\": \"مكبر الصوت\",\n \"endCall\": \"إنهاء المكالمة\",\n \"hello\": \"مرحبا! كيف يمكنني المساعدة؟\",\n \"sendMessage\": \"أرسل رسالة للبدء\",\n \"online\": \"متصل\",\n \"newChat\": \"محادثة جديدة\",\n \"back\": \"رجوع\",\n \"close\": \"إغلاق\",\n \"error\": \"خطأ\",\n \"typeMessage\": \"اكتب رسالة...\",\n \"sendMessageAria\": \"إرسال رسالة\"\n },\n \"ru\": {\n \"landingTitle\": \"Как вы хотите общаться?\",\n \"voiceCall\": \"Голосовой звонок\",\n \"textChat\": \"Текстовый чат\",\n \"clickToStartCall\": \"Нажмите, чтобы начать звонок\",\n \"realTimeVoice\": \"Голосовой разговор в реальном времени\",\n \"startCall\": \"Начать звонок\",\n \"listening\": \"Слушаю...\",\n \"speakFreely\": \"Говорите свободно\",\n \"liveTranscript\": \"Живая транскрипция\",\n \"transcriptWillAppear\": \"Транскрипция появится здесь во время звонка...\",\n \"mute\": \"Отключить звук\",\n \"speaker\": \"Динамик\",\n \"endCall\": \"Завершить звонок\",\n \"hello\": \"Привет! Как я могу помочь?\",\n \"sendMessage\": \"Отправьте сообщение для начала\",\n \"online\": \"В сети\",\n \"newChat\": \"Новый чат\",\n \"back\": \"Назад\",\n \"close\": \"Закрыть\",\n \"error\": \"Ошибка\",\n \"typeMessage\": \"Введите сообщение...\",\n \"sendMessageAria\": \"Отправить сообщение\"\n },\n \"es\": {\n \"landingTitle\": \"¿Cómo te gustaría comunicarte?\",\n \"voiceCall\": \"Llamada de voz\",\n \"textChat\": \"Chat de texto\",\n \"clickToStartCall\": \"Haz clic para iniciar la llamada\",\n \"realTimeVoice\": \"Conversación de voz en tiempo real\",\n \"startCall\": \"Iniciar llamada\",\n \"listening\": \"Escuchando...\",\n \"speakFreely\": \"Habla libremente\",\n \"liveTranscript\": \"Transcripción en vivo\",\n \"transcriptWillAppear\": \"La transcripción aparecerá aquí durante la llamada...\",\n \"mute\": \"Silenciar\",\n \"speaker\": \"Altavoz\",\n \"endCall\": \"Terminar llamada\",\n \"hello\": \"¡Hola! ¿Cómo puedo ayudarte?\",\n \"sendMessage\": \"Envía un mensaje para comenzar\",\n \"online\": \"En línea\",\n \"newChat\": \"Nuevo chat\",\n \"back\": \"Atrás\",\n \"close\": \"Cerrar\",\n \"error\": \"Error\",\n \"typeMessage\": \"Escribe un mensaje...\",\n \"sendMessageAria\": \"Enviar mensaje\"\n },\n \"fr\": {\n \"landingTitle\": \"Comment souhaitez-vous communiquer?\",\n \"voiceCall\": \"Appel vocal\",\n \"textChat\": \"Chat texte\",\n \"clickToStartCall\": \"Cliquez pour démarrer l'appel\",\n \"realTimeVoice\": \"Conversation vocale en temps réel\",\n \"startCall\": \"Démarrer l'appel\",\n \"listening\": \"Écoute...\",\n \"speakFreely\": \"Parlez librement\",\n \"liveTranscript\": \"Transcripción en direct\",\n \"transcriptWillAppear\": \"La transcription apparaîtra ici pendant l'appel...\",\n \"mute\": \"Muet\",\n \"speaker\": \"Haut-parleur\",\n \"endCall\": \"Terminer l'appel\",\n \"hello\": \"Bonjour! Comment puis-je vous aider?\",\n \"sendMessage\": \"Envoyez un message pour commencer\",\n \"online\": \"En ligne\",\n \"newChat\": \"Nouveau chat\",\n \"back\": \"Retour\",\n \"close\": \"Fermer\",\n \"error\": \"Erreur\",\n \"typeMessage\": \"Tapez votre message...\",\n \"sendMessageAria\": \"Envoyer un message\"\n },\n \"de\": {\n \"landingTitle\": \"Wie möchten Sie kommunizieren?\",\n \"voiceCall\": \"Sprachanruf\",\n \"textChat\": \"Text-Chat\",\n \"clickToStartCall\": \"Klicken Sie, um den Anruf zu starten\",\n \"realTimeVoice\": \"Sprachanruf in Echtzeit\",\n \"startCall\": \"Anruf starten\",\n \"listening\": \"Hören...\",\n \"speakFreely\": \"Sprechen Sie frei\",\n \"liveTranscript\": \"Live-Transkription\",\n \"transcriptWillAppear\": \"Die Transkription erscheint hier während des Anrufs...\",\n \"mute\": \"Stumm\",\n \"speaker\": \"Lautsprecher\",\n \"endCall\": \"Anruf beenden\",\n \"hello\": \"Hallo! Wie kann ich helfen?\",\n \"sendMessage\": \"Senden Sie eine Nachricht zum Starten\",\n \"online\": \"Online\",\n \"newChat\": \"Neuer Chat\",\n \"back\": \"Zurück\",\n \"close\": \"Schließen\",\n \"error\": \"Fehler\",\n \"typeMessage\": \"Geben Sie eine Nachricht ein...\",\n \"sendMessageAria\": \"Nachricht senden\"\n }\n};\n","/**\n * TextChatWidget - Pre-built UI widget for text chat using TextChatSDK\n * Similar to AgentWidget but designed for text-based chat\n */\n\nimport TextChatSDK from '../core/TextChatSDK.js';\nimport { VoiceInterface } from './VoiceInterface.js';\nimport { TextInterface } from './TextInterface.js';\nimport widgetTranslations from './widget-translations.js';\n\nexport class TextChatWidget {\n constructor(config = {}) {\n // Merge user config with defaults (backward compatible with simple config)\n this.config = this.mergeWithDefaults(config);\n this.sdk = new TextChatSDK(this.config);\n this.isOpen = false;\n this.isActive = false;\n this.translations = widgetTranslations;\n \n // Initialize interfaces with proper config\n // Voice interface needs voice config merged with main config\n const voiceConfig = {\n ...this.config,\n ...this.config.voice,\n language: this.config.voice?.language || this.config.language || 'en',\n websocketUrl: this.config.voice?.websocketUrl || this.config.websocketUrl || 'wss://speech.talktopc.com/ws/conv',\n translations: this.translations\n };\n this.voiceInterface = new VoiceInterface(voiceConfig);\n // Text interface needs text config merged with main config\n const textConfig = {\n ...this.config,\n ...this.config.text,\n translations: this.translations\n };\n this.textInterface = new TextInterface(textConfig, this.sdk);\n \n this.setupEventHandlers();\n this.createWidget();\n \n // Start open if configured (immediately)\n if (this.config.behavior.startOpen || this.config.behavior.autoOpen) {\n const panel = document.getElementById('text-chat-panel');\n if (panel) {\n this.isOpen = true;\n panel.classList.add('open');\n }\n }\n }\n\n /**\n * Merge user configuration with defaults\n * Supports both simple config (backward compatible) and advanced config\n */\n mergeWithDefaults(userConfig) {\n // Handle legacy position string format\n let positionConfig = userConfig.position || 'bottom-right';\n if (typeof positionConfig === 'string') {\n // Convert legacy format 'bottom-right' to new format\n const parts = positionConfig.split('-');\n positionConfig = {\n vertical: parts[0] || 'bottom',\n horizontal: parts[1] || 'right',\n offset: userConfig.positionOffset || { x: 20, y: 20 }\n };\n }\n\n // Handle legacy primaryColor - default to purple\n const primaryColor = userConfig.primaryColor || userConfig.button?.primaryColor || userConfig.button?.backgroundColor || '#7C3AED';\n \n // Calculate headerColor for use in landing config (needed before landing config is defined)\n const headerColor = userConfig.header?.backgroundColor || userConfig.button?.backgroundColor || primaryColor;\n\n return {\n // Required (agentId is required, appId is optional)\n agentId: userConfig.agentId,\n appId: userConfig.appId,\n getSessionUrl: userConfig.getSessionUrl, // Optional - will auto-construct URL if omitted (for voice)\n websocketUrl: userConfig.websocketUrl, // Optional - defaults to backend.talktopc.com/ws/conv (for text), speech.talktopc.com/ws/conv (for voice)\n demo: userConfig.demo !== false, // Optional - defaults to true\n direction: userConfig.direction || 'ltr', // Optional - text direction: 'ltr' or 'rtl'\n language: userConfig.language || 'en', // Optional - language for voice (defaults to 'en')\n \n // Icon/Image Configuration\n icon: {\n type: userConfig.icon?.type || 'chat', // 'chat', 'custom', 'emoji', 'text'\n customImage: userConfig.icon?.customImage || null,\n emoji: userConfig.icon?.emoji || '💬',\n text: userConfig.icon?.text || 'AI',\n size: userConfig.icon?.size || 'medium', // 'small', 'medium', 'large', 'xl'\n backgroundColor: userConfig.icon?.backgroundColor || null,\n ...userConfig.icon\n },\n \n // Positioning Configuration (supports both object and legacy string)\n position: {\n vertical: positionConfig.vertical || 'bottom',\n horizontal: positionConfig.horizontal || 'right',\n offset: positionConfig.offset || { x: 20, y: 20 },\n ...(typeof userConfig.position === 'object' ? userConfig.position : {})\n },\n \n // Button Configuration\n button: {\n size: userConfig.button?.size || 'medium',\n shape: userConfig.button?.shape || 'circle',\n // Floating button colors (main button)\n backgroundColor: userConfig.button?.backgroundColor || userConfig.icon?.backgroundColor || primaryColor,\n hoverColor: userConfig.button?.hoverColor || '#7C3AED',\n shadow: userConfig.button?.shadow !== false,\n shadowColor: userConfig.button?.shadowColor || 'rgba(0,0,0,0.15)',\n // Legacy support - map to backgroundColor\n primaryColor: userConfig.button?.backgroundColor || userConfig.icon?.backgroundColor || primaryColor,\n ...userConfig.button\n },\n \n // Panel Configuration (common to both voice and text)\n panel: {\n width: userConfig.panel?.width || 350,\n height: userConfig.panel?.height || 500,\n borderRadius: userConfig.panel?.borderRadius || 12,\n backgroundColor: userConfig.panel?.backgroundColor || '#FFFFFF',\n backdropFilter: userConfig.panel?.backdropFilter || null,\n border: userConfig.panel?.border || '1px solid rgba(0,0,0,0.1)',\n ...userConfig.panel\n },\n \n // Voice-specific Configuration\n voice: {\n // Voice button colors (inside panel)\n micButtonColor: userConfig.voice?.micButtonColor || userConfig.panel?.micButtonColor || primaryColor,\n micButtonActiveColor: userConfig.voice?.micButtonActiveColor || userConfig.panel?.micButtonActiveColor || '#EF4444',\n // Voice button hint text (below button)\n micButtonHint: {\n text: userConfig.voice?.micButtonHint?.text || userConfig.panel?.micButtonHint?.text || 'Click the button to start voice conversation',\n color: userConfig.voice?.micButtonHint?.color || userConfig.panel?.micButtonHint?.color || '#6B7280',\n fontSize: userConfig.voice?.micButtonHint?.fontSize || userConfig.panel?.micButtonHint?.fontSize || '12px',\n ...userConfig.voice?.micButtonHint,\n ...userConfig.panel?.micButtonHint\n },\n // Voice interface colors\n avatarBackgroundColor: userConfig.voice?.avatarBackgroundColor || '#667eea',\n avatarActiveBackgroundColor: userConfig.voice?.avatarActiveBackgroundColor || '#667eea',\n statusTitleColor: userConfig.voice?.statusTitleColor || '#1e293b',\n statusSubtitleColor: userConfig.voice?.statusSubtitleColor || '#64748b',\n startCallButtonColor: userConfig.voice?.startCallButtonColor || '#667eea',\n startCallButtonTextColor: userConfig.voice?.startCallButtonTextColor || '#FFFFFF',\n transcriptBackgroundColor: userConfig.voice?.transcriptBackgroundColor || '#FFFFFF',\n transcriptTextColor: userConfig.voice?.transcriptTextColor || '#1e293b',\n transcriptLabelColor: userConfig.voice?.transcriptLabelColor || '#94a3b8',\n controlButtonColor: userConfig.voice?.controlButtonColor || '#FFFFFF',\n controlButtonSecondaryColor: userConfig.voice?.controlButtonSecondaryColor || '#64748b',\n endCallButtonColor: userConfig.voice?.endCallButtonColor || '#ef4444',\n // Voice language setting\n language: userConfig.voice?.language || userConfig.language || 'en',\n // Voice websocket URL (can override global websocketUrl)\n websocketUrl: userConfig.voice?.websocketUrl || userConfig.websocketUrl,\n ...userConfig.voice\n },\n \n // Text-specific Configuration\n text: {\n // Send button colors (inside panel)\n sendButtonColor: userConfig.text?.sendButtonColor || userConfig.panel?.sendButtonColor || '#7C3AED', // Purple default\n sendButtonHoverColor: userConfig.text?.sendButtonHoverColor || userConfig.panel?.sendButtonHoverColor || '#6D28D9',\n sendButtonActiveColor: userConfig.text?.sendButtonActiveColor || userConfig.panel?.sendButtonActiveColor || '#6D28D9', // Purple darker for active\n sendButtonText: userConfig.text?.sendButtonText || userConfig.panel?.sendButtonText || '➤',\n sendButtonTextColor: userConfig.text?.sendButtonTextColor || userConfig.panel?.sendButtonTextColor || '#FFFFFF',\n sendButtonFontSize: userConfig.text?.sendButtonFontSize || userConfig.panel?.sendButtonFontSize || '18px',\n sendButtonFontWeight: userConfig.text?.sendButtonFontWeight || userConfig.panel?.sendButtonFontWeight || '500',\n // Send button hint text (below button or near it)\n sendButtonHint: {\n text: userConfig.text?.sendButtonHint?.text || userConfig.panel?.sendButtonHint?.text || '',\n color: userConfig.text?.sendButtonHint?.color || userConfig.panel?.sendButtonHint?.color || '#6B7280',\n fontSize: userConfig.text?.sendButtonHint?.fontSize || userConfig.panel?.sendButtonHint?.fontSize || '12px',\n ...userConfig.text?.sendButtonHint,\n ...userConfig.panel?.sendButtonHint\n },\n // Input field configuration\n inputPlaceholder: userConfig.text?.inputPlaceholder || userConfig.panel?.inputPlaceholder || 'Type your message...',\n inputBorderColor: userConfig.text?.inputBorderColor || userConfig.panel?.inputBorderColor || '#E5E7EB',\n inputFocusColor: userConfig.text?.inputFocusColor || userConfig.panel?.inputFocusColor || '#7C3AED', // Purple default\n inputBackgroundColor: userConfig.text?.inputBackgroundColor || userConfig.panel?.inputBackgroundColor || '#FFFFFF',\n inputTextColor: userConfig.text?.inputTextColor || userConfig.panel?.inputTextColor || '#1F2937',\n inputFontSize: userConfig.text?.inputFontSize || userConfig.panel?.inputFontSize || '14px',\n inputBorderRadius: userConfig.text?.inputBorderRadius || userConfig.panel?.inputBorderRadius || 20,\n inputPadding: userConfig.text?.inputPadding || userConfig.panel?.inputPadding || '6px 14px',\n ...userConfig.text\n },\n \n // Landing Screen Configuration (only for unified mode)\n landing: {\n backgroundColor: userConfig.landing?.backgroundColor || 'linear-gradient(180deg, #f8fafc 0%, #e0e7ff 100%)',\n logo: userConfig.landing?.logo || '🤖',\n title: userConfig.landing?.title || null, // null means use default translated text\n titleColor: userConfig.landing?.titleColor || '#1e293b',\n modeCardBackgroundColor: userConfig.landing?.modeCardBackgroundColor || '#FFFFFF',\n modeCardBorderColor: userConfig.landing?.modeCardBorderColor || '#E2E8F0',\n modeCardHoverBorderColor: userConfig.landing?.modeCardHoverBorderColor || headerColor,\n modeCardIconBackgroundColor: userConfig.landing?.modeCardIconBackgroundColor || headerColor,\n modeCardTitleColor: userConfig.landing?.modeCardTitleColor || '#111827',\n voiceCardIcon: userConfig.landing?.voiceCardIcon || '🎤',\n textCardIcon: userConfig.landing?.textCardIcon || '💬',\n ...userConfig.landing\n },\n \n // Header Configuration (top of panel)\n header: {\n title: userConfig.header?.title || 'Chat Assistant',\n showTitle: userConfig.header?.showTitle !== false,\n backgroundColor: userConfig.header?.backgroundColor || userConfig.button?.backgroundColor || '#7C3AED', // Default purple\n textColor: userConfig.header?.textColor || '#FFFFFF',\n showCloseButton: userConfig.header?.showCloseButton !== false,\n ...userConfig.header\n },\n \n // Tooltips Configuration\n tooltips: {\n newChat: userConfig.tooltips?.newChat || null, // null means use default based on direction\n back: userConfig.tooltips?.back || null,\n close: userConfig.tooltips?.close || null,\n mute: userConfig.tooltips?.mute || null,\n speaker: userConfig.tooltips?.speaker || null,\n endCall: userConfig.tooltips?.endCall || null,\n ...userConfig.tooltips\n },\n \n // Messages Configuration\n messages: {\n userBackgroundColor: userConfig.messages?.userBackgroundColor || '#E5E7EB',\n agentBackgroundColor: userConfig.messages?.agentBackgroundColor || '#F3F4F6',\n systemBackgroundColor: userConfig.messages?.systemBackgroundColor || '#DCFCE7',\n errorBackgroundColor: userConfig.messages?.errorBackgroundColor || '#FEE2E2',\n textColor: userConfig.messages?.textColor || '#1F2937',\n fontSize: userConfig.messages?.fontSize || '14px',\n borderRadius: userConfig.messages?.borderRadius || 8,\n ...userConfig.messages\n },\n \n // Animation Configuration\n animation: {\n enableHover: userConfig.animation?.enableHover !== false,\n enablePulse: userConfig.animation?.enablePulse !== false,\n enableSlide: userConfig.animation?.enableSlide !== false,\n duration: userConfig.animation?.duration || 0.3,\n ...userConfig.animation\n },\n \n // Behavior Configuration\n behavior: {\n autoOpen: userConfig.behavior?.autoOpen || false,\n startOpen: userConfig.behavior?.startOpen || false,\n hidden: userConfig.behavior?.hidden || false,\n autoConnect: userConfig.behavior?.autoConnect || false,\n showWelcomeMessage: userConfig.behavior?.showWelcomeMessage !== false,\n welcomeMessage: userConfig.behavior?.welcomeMessage || 'Hello! How can I help you today?',\n // Voice selection landing (enabled by default)\n enableVoiceMode: userConfig.behavior?.enableVoiceMode !== undefined ? userConfig.behavior.enableVoiceMode : true,\n // Widget mode: 'unified' (both voice and text with landing screen), 'voice-only' (only voice), 'text-only' (only text)\n mode: userConfig.behavior?.mode || 'unified',\n ...userConfig.behavior\n },\n \n // Accessibility Configuration\n accessibility: {\n ariaLabel: userConfig.accessibility?.ariaLabel || 'Chat Assistant',\n ariaDescription: userConfig.accessibility?.ariaDescription || 'Click to open chat assistant',\n keyboardNavigation: userConfig.accessibility?.keyboardNavigation !== false,\n ...userConfig.accessibility\n },\n \n // Custom CSS\n customStyles: userConfig.customStyles || '',\n \n // Variables for the agent\n variables: userConfig.variables || {},\n // TEST: allow forcing a conversationId for debugging\n forceConversationId: userConfig.forceConversationId,\n \n // Legacy support (for backward compatibility)\n primaryColor: primaryColor,\n // Keep position string for backward compatibility\n ...(typeof userConfig.position === 'string' ? { positionString: userConfig.position } : {})\n };\n }\n\n setupEventHandlers() {\n this.sdk.on('error', (error) => {\n this.textInterface.showError(error.message || error);\n this.textInterface.stopStreamingState();\n });\n\n this.sdk.on('chunk', (chunk) => {\n this.textInterface.appendStreamingChunk(chunk);\n });\n\n this.sdk.on('done', ({ text }) => {\n this.textInterface.finalizeStreaming(text);\n });\n }\n\n createWidget() {\n const widget = document.createElement('div');\n widget.id = 'text-chat-widget';\n widget.innerHTML = this.generateWidgetHTML();\n \n document.body.appendChild(widget);\n \n this.setupWidgetEvents();\n \n // Ensure initial open state if configured\n if (this.config.behavior.startOpen || this.config.behavior.autoOpen) {\n const panel = document.getElementById('text-chat-panel');\n if (panel) {\n this.isOpen = true;\n panel.classList.add('open');\n }\n }\n }\n\n generateWidgetHTML() {\n const pos = this.config.position;\n const btn = this.config.button;\n const icon = this.config.icon;\n const panel = this.config.panel;\n const header = this.config.header;\n const anim = this.config.animation;\n\n // Calculate button size\n const buttonSizes = {\n small: 50,\n medium: 60,\n large: 70,\n xl: 80\n };\n const buttonSize = buttonSizes[btn.size] || 60;\n\n // Calculate icon size\n const iconSizes = {\n small: 20,\n medium: 28,\n large: 36,\n xl: 44\n };\n const iconSize = iconSizes[icon.size] || 28;\n\n // Generate position styles\n const positionStyles = this.generatePositionStyles();\n\n // Generate icon HTML\n const iconHTML = this.generateIconHTML(iconSize);\n\n const widgetMode = this.config.behavior.mode || 'unified';\n const showLanding = widgetMode === 'unified';\n const showVoice = widgetMode === 'unified' || widgetMode === 'voice-only';\n const showText = widgetMode === 'unified' || widgetMode === 'text-only';\n const voiceEnabled = showVoice;\n \n // Helper function to get translated text\n const t = (key) => {\n const lang = this.config.language || 'en';\n const translations = this.translations[lang] || this.translations.en;\n return translations[key] || key;\n };\n \n // Helper function to get tooltip text\n const getTooltip = (key) => {\n const tooltip = this.config.tooltips?.[key];\n if (tooltip !== null && tooltip !== undefined) return tooltip;\n // Use translations for default tooltips\n const defaults = {\n newChat: t('newChat'),\n back: t('back'),\n close: t('close'),\n mute: t('mute'),\n speaker: t('speaker'),\n endCall: t('endCall')\n };\n return defaults[key] || '';\n };\n\n return `\n <style>\n ${this.generateCSS(positionStyles, buttonSize, iconSize)}\n ${this.config.customStyles}\n </style>\n \n ${this.config.behavior.hidden ? '' : `\n <button id=\\\"text-chat-button\\\" \n aria-label=\\\"${this.config.accessibility.ariaLabel}\\\"\n aria-description=\\\"${this.config.accessibility.ariaDescription}\\\">\\n ${iconHTML}\\n </button>\n `}\n \n <div id=\"text-chat-panel\">\n <div class=\"widget-shell\">\n <div class=\"panel-inner widget-container\" style=\"direction: ${this.config.direction};\">\n <div class=\"widget-header\" style=\"background: ${header.backgroundColor}; color: ${header.textColor};\">\n <div>\n ${header.showTitle ? `<div class=\"header-title\">${header.title}</div>` : ''}\n <div class=\"header-status\">\n <span class=\"status-dot\"></span>\n <span>${t('online')}</span>\n </div>\n </div>\n \n <div style=\"display: flex; gap: 12px; align-items: center;\">\n <!-- New Chat Button (hide on landing screen, show otherwise) -->\n <button class=\"header-icon new-chat-btn\" id=\"newChatBtn\" title=\"${getTooltip('newChat')}\" style=\"${showLanding ? 'display: none;' : ''}\">\n <span style=\"font-size: 18px; font-weight: bold;\">+</span>\n </button>\n \n <!-- Back Button (only show in unified mode) -->\n ${widgetMode === 'unified' ? `<button class=\"header-icon back-btn\" id=\"backBtn\" title=\"${getTooltip('back')}\" style=\"display: none;\">\n <span style=\"font-size: 16px;\">‹</span>\n </button>` : ''}\n \n <!-- Close Button -->\n ${header.showCloseButton ? '<button class=\"header-icon close-btn\" id=\"closeBtn\" title=\"' + getTooltip('close') + '\">'+\n '<span style=\"font-size: 18px; font-weight: bold;\">×</span>'+\n '</button>' : ''}\n </div>\n </div>\n\n ${showLanding ? `\n <div class=\"landing-screen\" id=\"landingScreen\">\n <div class=\"landing-logo\">🤖</div>\n <div class=\"landing-title\">${t('landingTitle')}</div>\n <div class=\"mode-selection\">\n ${showVoice ? `<div class=\"mode-card voice\" id=\"mode-card-voice\">\n <div class=\"mode-card-icon\">🎤</div>\n <div class=\"mode-card-title\">${t('voiceCall')}</div>\n </div>` : ''}\n ${showText ? `<div class=\"mode-card text\" id=\"mode-card-text\">\n <div class=\"mode-card-icon\">💬</div>\n <div class=\"mode-card-title\">${t('textChat')}</div>\n </div>` : ''}\n </div>\n </div>` : ''}\n\n ${showVoice ? this.voiceInterface.generateHTML() : ''}\n ${showText ? this.textInterface.generateHTML() : ''}\n </div>\n </div>\n </div>\n `;\n }\n\n generatePositionStyles() {\n const pos = this.config.position;\n const offset = pos.offset || { x: 20, y: 20 };\n \n let styles = '';\n \n // Vertical positioning\n if (pos.vertical === 'top') {\n styles += `top: ${offset.y}px;`;\n } else if (pos.vertical === 'bottom') {\n styles += `bottom: ${offset.y}px;`;\n } else if (pos.vertical === 'center') {\n styles += `top: 50%; transform: translateY(-50%);`;\n }\n \n // Horizontal positioning\n if (pos.horizontal === 'left') {\n styles += `left: ${offset.x}px;`;\n } else if (pos.horizontal === 'right') {\n styles += `right: ${offset.x}px;`;\n } else if (pos.horizontal === 'center') {\n styles += `left: 50%; transform: translateX(-50%);`;\n }\n \n return styles;\n }\n\n generateIconHTML(size) {\n const icon = this.config.icon;\n \n switch (icon.type) {\n case 'custom':\n return `<img src=\"${icon.customImage}\" alt=\"Chat Assistant\" style=\"width: ${size}px; height: ${size}px; object-fit: contain;\" />`;\n \n case 'emoji':\n return `<span style=\"font-size: ${size}px; line-height: 1;\">${icon.emoji}</span>`;\n \n case 'text':\n return `<span style=\"font-size: ${Math.floor(size * 0.6)}px; font-weight: bold; color: white;\">${icon.text}</span>`;\n \n case 'chat':\n default:\n return `<svg viewBox=\"0 0 24 24\" style=\"width: ${size}px; height: ${size}px; fill: white;\">\n <path d=\"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z\"/>\n </svg>`;\n }\n }\n\n generateCSS(positionStyles, buttonSize, iconSize) {\n const btn = this.config.button;\n const panel = this.config.panel;\n const header = this.config.header;\n const messages = this.config.messages;\n const anim = this.config.animation;\n \n // Determine which interfaces to show\n const widgetMode = this.config.behavior.mode || 'unified';\n const showVoice = widgetMode === 'unified' || widgetMode === 'voice-only';\n const showText = widgetMode === 'unified' || widgetMode === 'text-only';\n \n // Color references for clarity (needed for landing screen styles)\n const headerColor = header.backgroundColor;\n\n return `\n /* MOBILE FIRST - Default styles for all devices */\n #text-chat-widget {\n position: fixed !important;\n z-index: 10000;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n /* Mobile defaults */\n right: 10px;\n bottom: 10px;\n left: auto;\n top: auto;\n }\n \n /* Desktop positioning (only on larger screens) */\n @media (min-width: 769px) {\n #text-chat-widget {\n ${positionStyles}\n right: ${this.config.position.horizontal === 'right' ? '20px' : 'auto'};\n left: ${this.config.position.horizontal === 'left' ? '20px' : 'auto'};\n bottom: ${this.config.position.vertical === 'bottom' ? '20px' : 'auto'};\n top: ${this.config.position.vertical === 'top' ? '20px' : 'auto'};\n }\n }\n \n /* Mobile override (force mobile positioning) */\n @media (max-width: 768px) {\n #text-chat-widget {\n right: 10px !important;\n bottom: 10px !important;\n left: auto !important;\n top: auto !important;\n transform: none !important;\n }\n }\n \n @media (max-width: 480px) {\n #text-chat-widget {\n right: 8px !important;\n bottom: 8px !important;\n left: auto !important;\n top: auto !important;\n }\n }\n \n #text-chat-button {\n width: ${buttonSize}px;\n height: ${buttonSize}px;\n border-radius: ${btn.shape === 'circle' ? '50%' : btn.shape === 'square' ? '0' : '12px'};\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all ${anim.duration}s ease;\n box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);\n touch-action: manipulation;\n -webkit-tap-highlight-color: transparent;\n -webkit-touch-callout: none;\n user-select: none;\n min-width: 44px;\n min-height: 44px;\n }\n \n @media (max-width: 768px) {\n #text-chat-widget {\n right: 10px !important;\n bottom: 10px !important;\n left: auto !important;\n top: auto !important;\n transform: none !important;\n }\n \n #text-chat-button {\n width: 56px !important;\n height: 56px !important;\n min-width: 56px !important;\n min-height: 56px !important;\n max-width: 56px !important;\n max-height: 56px !important;\n }\n \n #text-chat-panel {\n position: fixed !important;\n left: 10px !important;\n right: 10px !important;\n bottom: 76px !important; /* 56px button + 20px gap */\n top: 60px !important; /* Add top spacing */\n width: auto !important;\n max-width: none !important;\n height: auto !important; /* Change from max-height to auto */\n max-height: none !important; /* Remove max-height */\n transform: none !important;\n margin: 0 !important;\n }\n \n #text-chat-panel .widget-header {\n padding: 10px 14px;\n min-height: 56px;\n }\n \n #text-chat-panel .header-title {\n font-size: 15px;\n }\n \n #text-chat-panel .header-icon {\n width: 40px;\n height: 40px;\n min-width: 40px;\n min-height: 40px;\n }\n \n #text-chat-input {\n font-size: 16px !important; /* Prevents iOS zoom on focus */\n padding: 12px 16px !important;\n min-height: 48px !important;\n }\n \n #text-chat-send {\n min-width: 48px !important;\n min-height: 48px !important;\n width: 48px !important;\n height: 48px !important;\n }\n \n .landing-screen {\n padding: 16px;\n }\n \n .landing-logo {\n font-size: 40px;\n }\n \n .landing-title {\n font-size: 18px;\n margin-bottom: 16px;\n }\n \n .mode-selection {\n flex-direction: column;\n gap: 12px;\n align-items: center;\n }\n \n .mode-card {\n max-width: 100%;\n width: 100%;\n padding: 16px;\n }\n \n .mode-card-icon {\n width: 50px;\n height: 50px;\n font-size: 28px;\n }\n \n .mode-card-title {\n font-size: 14px;\n }\n }\n \n @media (max-width: 480px) {\n #text-chat-widget {\n right: 8px !important;\n bottom: 8px !important;\n left: auto !important;\n top: auto !important;\n }\n \n #text-chat-button {\n width: 54px !important;\n height: 54px !important;\n min-width: 54px !important;\n min-height: 54px !important;\n }\n \n #text-chat-panel {\n left: 8px !important;\n right: 8px !important;\n bottom: 70px !important;\n top: 50px !important; /* Add top spacing for very small screens */\n height: auto !important;\n max-height: none !important;\n }\n \n #text-chat-panel .widget-header {\n padding: 8px 12px;\n min-height: 52px;\n }\n \n #text-chat-panel .header-title {\n font-size: 14px;\n }\n \n .landing-logo {\n font-size: 36px;\n }\n \n .landing-title {\n font-size: 16px;\n }\n }\n \n ${anim.enableHover ? `\n #text-chat-button:hover {\n background: linear-gradient(135deg, #764ba2 0%, #667eea 100%);\n transform: scale(1.05);\n box-shadow: 0 8px 20px rgba(102, 126, 234, 0.5);\n }\n ` : ''}\n \n #text-chat-panel {\n display: none;\n position: fixed;\n bottom: calc(${buttonSize}px + 20px);\n ${this.config.position.horizontal === 'right' ? 'right: 20px;' : 'left: 20px;'}\n width: ${panel.width}px;\n max-width: calc(100vw - 40px);\n height: ${panel.height}px;\n max-height: calc(100vh - ${buttonSize}px - 40px);\n background: transparent;\n border-radius: ${panel.borderRadius}px;\n border: none;\n flex-direction: column;\n overflow: hidden;\n ${panel.backdropFilter ? `backdrop-filter: ${panel.backdropFilter};` : ''}\n ${anim.enableSlide ? `transition: all ${anim.duration}s ease;` : ''}\n box-sizing: border-box;\n }\n \n #text-chat-panel.open {\n display: flex;\n ${anim.enableSlide ? 'transform: translateY(0); opacity: 1;' : ''}\n }\n\n /* Shell for gradient border/background */\n .widget-shell { width: 100%; height: 100%; padding: 0; border-radius: ${panel.borderRadius}px; background: transparent; box-shadow: 0 20px 60px rgba(0,0,0,0.15); overflow: hidden; display: flex; flex-direction: column; box-sizing: border-box; }\n .panel-inner { width: 100%; height: 100%; background: #ffffff; border-radius: ${panel.borderRadius}px; overflow: hidden; display:flex; flex-direction: column; padding: 0; box-sizing: border-box; max-width: 100%; }\n\n /* New structure styles matching provided design */\n #text-chat-panel .widget-container {\n width: 100%; height: 100%; min-height: 0; background: #FFFFFF; overflow: hidden; display: flex; flex-direction: column; border-radius: ${panel.borderRadius}px;\n }\n #text-chat-panel .widget-header {\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n border-top-left-radius: ${panel.borderRadius}px;\n border-top-right-radius: ${panel.borderRadius}px;\n flex-shrink: 0;\n min-height: 60px;\n box-sizing: border-box;\n }\n #text-chat-panel .header-title { font-size: 16px; font-weight: 600; }\n #text-chat-panel .header-status { display: flex; align-items: center; gap: 8px; font-size: 12px; opacity: 0.9; }\n #text-chat-panel .status-dot { width: 8px; height: 8px; background: #4ade80; border-radius: 50%; animation: pulse 2s ease-in-out infinite; }\n @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }\n /* Header icon buttons */\n .header-icon {\n background: rgba(255, 255, 255, 0.2);\n border: none;\n color: white;\n width: 36px;\n height: 36px;\n min-width: 36px;\n min-height: 36px;\n border-radius: 50%;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.2s;\n flex-shrink: 0;\n font-size: 16px;\n padding: 0;\n box-sizing: border-box;\n }\n \n .header-icon:hover {\n background: rgba(255, 255, 255, 0.3);\n }\n \n .header-icon svg {\n pointer-events: none;\n stroke: white;\n fill: none;\n }\n \n .back-btn.visible {\n display: flex !important;\n }\n\n /* Landing and mode selection (shown only if voice enabled) */\n .landing-screen { \n display: none; \n flex: 1; \n padding: 20px; \n background: ${this.config.landing?.backgroundColor || 'linear-gradient(180deg, #f8fafc 0%, #e0e7ff 100%)'}; \n align-items: center; \n justify-content: flex-start; \n flex-direction: column; \n gap: 16px; \n overflow-y: auto; \n min-height: 0; \n }\n .landing-screen.active { display: flex; }\n .landing-logo { font-size: 48px; }\n .landing-title { \n font-size: 20px; \n color: ${this.config.landing?.titleColor || '#1e293b'}; \n font-weight: 700; \n margin-bottom: 20px; \n text-align: center;\n width: 100%;\n }\n .mode-selection { display: flex; gap: 16px; width: 100%; justify-content: center; }\n .mode-card { \n flex: 1; \n max-width: 180px; \n background: ${this.config.landing?.modeCardBackgroundColor || '#FFFFFF'}; \n border: 2px solid ${this.config.landing?.modeCardBorderColor || '#E2E8F0'}; \n border-radius: 20px; \n padding: 20px 12px; \n cursor: pointer; \n display: flex; \n flex-direction: column; \n align-items: center; \n gap: 8px; \n transition: transform ${anim.duration}s ease, box-shadow ${anim.duration}s ease, border-color ${anim.duration}s ease; \n box-shadow: 0 4px 12px rgba(0,0,0,0.05); \n }\n .mode-card:hover { \n transform: translateY(-6px); \n box-shadow: 0 12px 24px rgba(102, 126, 234, 0.2); \n border-color: ${this.config.landing?.modeCardHoverBorderColor || headerColor}; \n }\n .mode-card-icon { \n width: 60px; \n height: 60px; \n display: flex; \n align-items: center; \n justify-content: center; \n border-radius: 50%; \n background: ${this.config.landing?.modeCardIconBackgroundColor || headerColor}; \n color: #fff; \n font-size: 32px; \n }\n .mode-card-title { \n color: ${this.config.landing?.modeCardTitleColor || '#111827'}; \n font-weight: 600; \n text-align: center;\n width: 100%;\n }\n\n ${showVoice ? this.voiceInterface.generateCSS() : ''}\n ${showText ? this.textInterface.generateCSS() : ''}\n \n #text-chat-send-hint {\n text-align: center;\n line-height: 1.4;\n }\n \n .agent-thinking {\n font-style: italic;\n color: #6B7280;\n }\n `;\n }\n\n setupWidgetEvents() {\n const openBtn = document.getElementById('text-chat-button');\n if (openBtn) {\n openBtn.onclick = () => this.togglePanel();\n }\n \n const closeBtn = document.getElementById('closeBtn');\n if (closeBtn) {\n closeBtn.onclick = () => this.togglePanel();\n }\n \n // Voice selection events (based on widget mode)\n const widgetMode = this.config.behavior.mode || 'unified';\n const showLanding = widgetMode === 'unified';\n const showVoice = widgetMode === 'unified' || widgetMode === 'voice-only';\n const showText = widgetMode === 'unified' || widgetMode === 'text-only';\n \n const backBtn = document.getElementById('backBtn');\n const landing = document.getElementById('landingScreen');\n const voiceCard = document.getElementById('mode-card-voice');\n const textCard = document.getElementById('mode-card-text');\n const textInterface = document.getElementById('textInterface');\n const voiceInterface = document.getElementById('voiceInterface');\n \n // Setup back button handler\n if (backBtn) {\n backBtn.onclick = () => this.showLanding();\n }\n \n if (showLanding) {\n if (voiceCard) voiceCard.onclick = () => this.showVoice();\n if (textCard) textCard.onclick = () => this.showText();\n // Initial state: landing visible in unified mode\n if (landing) landing.classList.add('active');\n if (textInterface) textInterface.classList.remove('active');\n if (voiceInterface) voiceInterface.classList.remove('active');\n // Hide back button on landing screen (only exists in unified mode)\n if (backBtn && widgetMode === 'unified') backBtn.classList.remove('visible');\n } else if (widgetMode === 'voice-only') {\n // Voice-only mode: show voice interface directly\n if (voiceInterface) voiceInterface.classList.add('active');\n if (textInterface) textInterface.classList.remove('active');\n if (landing) landing.classList.remove('active');\n // Back button doesn't exist in voice-only mode (only in unified)\n } else if (widgetMode === 'text-only') {\n // Text-only mode: show text interface directly\n if (textInterface) textInterface.classList.add('active');\n if (voiceInterface) voiceInterface.classList.remove('active');\n if (landing) landing.classList.remove('active');\n // Back button doesn't exist in text-only mode (only in unified)\n }\n \n // Setup interface event handlers\n if (showVoice) {\n this.voiceInterface.setupEventHandlers();\n }\n if (showText) {\n this.textInterface.setupEventHandlers();\n }\n \n // Setup header button handlers\n const newChatBtn = document.getElementById('newChatBtn');\n \n if (newChatBtn) {\n newChatBtn.onclick = () => this.textInterface.startNewChat();\n // Hide new chat button on landing screen initially\n if (showLanding) {\n newChatBtn.style.display = 'none';\n }\n }\n \n // Keyboard navigation\n if (this.config.accessibility.keyboardNavigation) {\n this.setupKeyboardNavigation();\n }\n }\n\n startNewChat() {\n this.textInterface.startNewChat();\n }\n\n showLanding() {\n const widgetMode = this.config.behavior.mode || 'unified';\n if (widgetMode !== 'unified') return; // Only show landing in unified mode\n const landing = document.getElementById('landingScreen');\n const textInterface = document.getElementById('textInterface');\n const voiceInterface = document.getElementById('voiceInterface');\n const backBtn = document.getElementById('backBtn');\n const newChatBtn = document.getElementById('newChatBtn');\n if (landing) landing.classList.add('active');\n if (textInterface) textInterface.classList.remove('active');\n if (voiceInterface) voiceInterface.classList.remove('active');\n // Hide back button on landing screen\n if (backBtn) backBtn.classList.remove('visible');\n // Hide new chat button on landing screen\n if (newChatBtn) newChatBtn.style.display = 'none';\n }\n\n showText() {\n const landing = document.getElementById('landingScreen');\n const voiceInterface = document.getElementById('voiceInterface');\n const backBtn = document.getElementById('backBtn');\n const newChatBtn = document.getElementById('newChatBtn');\n if (landing) landing.classList.remove('active');\n if (voiceInterface) voiceInterface.classList.remove('active');\n this.textInterface.show();\n // Show back button when not on landing (only in unified mode)\n const widgetMode = this.config.behavior.mode || 'unified';\n if (backBtn && widgetMode === 'unified') backBtn.classList.add('visible');\n // Show new chat button when not on landing\n if (newChatBtn) newChatBtn.style.display = '';\n }\n\n showVoice() {\n const landing = document.getElementById('landingScreen');\n const textInterface = document.getElementById('textInterface');\n const voiceInterface = document.getElementById('voiceInterface');\n const backBtn = document.getElementById('backBtn');\n const newChatBtn = document.getElementById('newChatBtn');\n if (landing) landing.classList.remove('active');\n if (textInterface) textInterface.classList.remove('active');\n if (voiceInterface) voiceInterface.classList.add('active');\n // Show back button when not on landing (only in unified mode)\n const widgetMode = this.config.behavior.mode || 'unified';\n if (backBtn && widgetMode === 'unified') backBtn.classList.add('visible');\n // Show new chat button when not on landing\n if (newChatBtn) newChatBtn.style.display = '';\n }\n\n setupKeyboardNavigation() {\n document.addEventListener('keydown', (e) => {\n if (e.key === 'Escape' && this.isOpen) {\n this.togglePanel();\n }\n });\n }\n\n togglePanel() {\n this.isOpen = !this.isOpen;\n const panel = document.getElementById('text-chat-panel');\n panel.classList.toggle('open');\n \n // Focus input when opening\n if (this.isOpen) {\n setTimeout(() => {\n const input = document.getElementById('messageInput');\n if (input) input.focus();\n }, 100);\n }\n \n // Auto-connect if enabled\n if (this.isOpen && !this.isActive && this.config.behavior.autoConnect) {\n this.startChat();\n }\n }\n\n async startChat() {\n // No-op with single-shot design; connection happens per message\n this.isActive = true;\n this.textInterface.setActive(true);\n }\n\n async sendMessage() {\n await this.textInterface.sendMessage();\n }\n\n updateSendButtonState() {\n this.textInterface.updateSendButtonState();\n }\n\n async getSignedUrl() {\n // If getSessionUrl is not provided, construct URL directly from agentId and appId\n if (!this.config.getSessionUrl) {\n if (!this.config.agentId) {\n throw new Error('agentId is required');\n }\n \n // Build WebSocket URL directly\n // Default uses backend.talktopc.com for text chat (path may need adjustment)\n const baseUrl = this.config.websocketUrl || 'wss://backend.talktopc.com/ws/conv';\n const params = new URLSearchParams();\n params.append('agentId', this.config.agentId);\n \n if (this.config.appId) {\n params.append('appId', this.config.appId);\n }\n \n // Add demo flag if in development\n if (this.config.demo !== false) {\n params.append('demo', 'true');\n }\n \n return `${baseUrl}?${params.toString()}`;\n }\n \n // Handle getSessionUrl as string (backend URL)\n if (typeof this.config.getSessionUrl === 'string') {\n const requestBody = {\n agentId: this.config.agentId,\n variables: this.config.variables || {}\n };\n \n // Add appId if provided in config\n if (this.config.appId) {\n requestBody.appId = this.config.appId;\n }\n \n const response = await fetch(this.config.getSessionUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(requestBody)\n });\n\n if (!response.ok) {\n throw new Error(`Failed to get session URL: ${response.statusText}`);\n }\n\n const data = await response.json();\n return data.signedUrl || data.wsUrl || data.url;\n }\n \n // Handle getSessionUrl as function\n else if (typeof this.config.getSessionUrl === 'function') {\n const params = {\n agentId: this.config.agentId,\n variables: this.config.variables || {}\n };\n \n // Add appId if provided in config\n if (this.config.appId) {\n params.appId = this.config.appId;\n }\n \n const result = await this.config.getSessionUrl(params);\n \n return typeof result === 'string' ? result : (result.signedUrl || result.wsUrl || result.url);\n }\n \n else {\n throw new Error('getSessionUrl must be a string (backend URL), a function, or omitted (for direct connection with agentId/appId)');\n }\n }\n\n // Delegated to TextInterface\n addMessage(type, text) {\n this.textInterface.addMessage(type, text);\n }\n\n beginStreaming() {\n this.textInterface.beginStreaming();\n }\n\n appendStreamingChunk(chunk) {\n this.textInterface.appendStreamingChunk(chunk);\n }\n\n finalizeStreaming(fullText) {\n this.textInterface.finalizeStreaming(fullText);\n }\n\n stopStreamingState() {\n this.textInterface.stopStreamingState();\n }\n\n showError(message) {\n this.textInterface.showError(message);\n }\n\n updateStatus(status) {\n // Status update handler (can be overridden by users)\n }\n\n // Public API methods\n updateConfig(newConfig) {\n // Deep merge nested objects\n const mergedConfig = { ...this.config };\n \n // Deep merge panel config if it exists (common config)\n if (newConfig.panel) {\n mergedConfig.panel = { ...this.config.panel, ...newConfig.panel };\n }\n \n // Deep merge voice config if it exists\n if (newConfig.voice) {\n mergedConfig.voice = { ...this.config.voice, ...newConfig.voice };\n // Deep merge micButtonHint if it exists\n if (newConfig.voice.micButtonHint) {\n mergedConfig.voice.micButtonHint = {\n ...this.config.voice?.micButtonHint,\n ...newConfig.voice.micButtonHint\n };\n }\n }\n \n // Deep merge text config if it exists\n if (newConfig.text) {\n mergedConfig.text = { ...this.config.text, ...newConfig.text };\n // Deep merge sendButtonHint if it exists\n if (newConfig.text.sendButtonHint) {\n mergedConfig.text.sendButtonHint = {\n ...this.config.text?.sendButtonHint,\n ...newConfig.text.sendButtonHint\n };\n }\n }\n \n // Update language if provided - must be before mergeWithDefaults\n if (newConfig.language !== undefined) {\n mergedConfig.language = newConfig.language;\n }\n \n // Update direction if language changed to RTL language\n if (newConfig.language !== undefined) {\n const rtlLanguages = ['he', 'ar'];\n if (rtlLanguages.includes(newConfig.language)) {\n mergedConfig.direction = 'rtl';\n } else if (newConfig.direction === undefined) {\n mergedConfig.direction = 'ltr';\n }\n }\n \n // Update translations if provided\n if (newConfig.translations) {\n mergedConfig.translations = newConfig.translations;\n this.translations = newConfig.translations;\n }\n \n // Merge other configs (shallow merge is fine for these)\n if (newConfig.button) {\n mergedConfig.button = { ...this.config.button, ...newConfig.button };\n }\n if (newConfig.header) {\n mergedConfig.header = { ...this.config.header, ...newConfig.header };\n }\n if (newConfig.icon) {\n mergedConfig.icon = { ...this.config.icon, ...newConfig.icon };\n }\n if (newConfig.messages) {\n mergedConfig.messages = { ...this.config.messages, ...newConfig.messages };\n }\n if (newConfig.animation) {\n mergedConfig.animation = { ...this.config.animation, ...newConfig.animation };\n }\n if (newConfig.behavior) {\n mergedConfig.behavior = { ...this.config.behavior, ...newConfig.behavior };\n }\n if (newConfig.accessibility) {\n mergedConfig.accessibility = { ...this.config.accessibility, ...newConfig.accessibility };\n }\n if (newConfig.tooltips) {\n mergedConfig.tooltips = { ...this.config.tooltips, ...newConfig.tooltips };\n }\n if (newConfig.landing) {\n mergedConfig.landing = { ...this.config.landing, ...newConfig.landing };\n }\n \n // Merge direction property (only if not set by language change above)\n if (newConfig.direction !== undefined && mergedConfig.direction === undefined) {\n mergedConfig.direction = newConfig.direction;\n }\n \n // Merge primaryColor if provided\n if (newConfig.primaryColor !== undefined) {\n mergedConfig.primaryColor = newConfig.primaryColor;\n }\n \n // Merge any other top-level properties\n Object.keys(newConfig).forEach(key => {\n if (!['panel', 'button', 'header', 'icon', 'messages', 'direction', 'voice', 'text', 'animation', 'behavior', 'accessibility', 'language', 'tooltips', 'landing', 'primaryColor'].includes(key)) {\n mergedConfig[key] = newConfig[key];\n }\n });\n \n // Store current language before merge to detect changes\n const oldLanguage = this.config?.language || 'en';\n \n this.config = this.mergeWithDefaults(mergedConfig);\n \n // Recreate interfaces with new config (after mergeWithDefaults, so language is current)\n // Ensure language is correctly passed - use the merged config value\n const currentLanguage = this.config.language || 'en';\n const voiceConfig = {\n ...this.config,\n ...this.config.voice,\n language: currentLanguage, // Use the current language from merged config\n websocketUrl: this.config.voice?.websocketUrl || this.config.websocketUrl || 'wss://speech.talktopc.com/ws/conv',\n translations: this.translations\n };\n this.voiceInterface = new VoiceInterface(voiceConfig);\n const textConfig = {\n ...this.config,\n ...this.config.text,\n language: currentLanguage, // Ensure language is set from merged config\n translations: this.translations\n };\n this.textInterface = new TextInterface(textConfig, this.sdk);\n \n // Recreate widget with new config\n const existingWidget = document.getElementById('text-chat-widget');\n if (existingWidget) {\n existingWidget.remove();\n }\n this.createWidget();\n \n // Update input attributes in case widget was recreated\n if (this.textInterface && this.textInterface.updateInputAttributes) {\n this.textInterface.updateInputAttributes();\n }\n }\n\n destroy() {\n const widget = document.getElementById('text-chat-widget');\n if (widget) {\n widget.remove();\n }\n if (this.sdk) {\n this.sdk.destroy();\n }\n // Clean up interface resources\n if (this.voiceInterface) {\n this.voiceInterface.destroy();\n }\n }\n\n // Delegated to VoiceInterface\n async startVoiceCall() {\n await this.voiceInterface.startVoiceCall();\n }\n\n endVoiceCall() {\n this.voiceInterface.endVoiceCall();\n }\n\n toggleMute() {\n this.voiceInterface.toggleMute();\n }\n\n toggleSpeaker() {\n this.voiceInterface.toggleSpeaker();\n }\n}\n\n","/**\n * TTP Agent SDK - Main Entry Point\n * \n * A comprehensive SDK for voice and text interaction with AI agents.\n * Provides real-time audio recording, WebSocket communication, and audio playback.\n * \n * Features:\n * - 🎤 Real-time Audio Recording with AudioWorklet\n * - 💬 Text Chat Support\n * - 🔄 WebSocket Communication with authentication\n * - 🔊 Audio Playback with queue management\n * - ⚛️ React Components\n * - 🌐 Vanilla JavaScript Components\n * - 🎯 Event-driven architecture\n * - 🔒 Multiple authentication methods\n */\n\n// Core SDK\nimport VoiceSDK from './core/VoiceSDK.js';\nimport TextChatSDK from './core/TextChatSDK.js';\nimport WebSocketManager from './core/WebSocketManager.js';\nimport AudioRecorder from './core/AudioRecorder.js';\nimport AudioPlayer from './core/AudioPlayer.js';\nimport EventEmitter from './core/EventEmitter.js';\n\n// React components\nimport VoiceButton from './react/VoiceButton.jsx';\n\n// Vanilla JavaScript components\nimport VanillaVoiceButton from './vanilla/VoiceButton.js';\n\n// Legacy AgentSDK (for backward compatibility)\nimport { AgentSDK, AgentWidget } from './legacy/AgentSDK.js';\nimport { TextChatWidget } from './legacy/TextChatWidget.js';\n\n// Version\nexport const VERSION = '2.0.0';\n\n// Named exports\nexport {\n VoiceSDK,\n TextChatSDK,\n WebSocketManager,\n AudioRecorder,\n AudioPlayer,\n EventEmitter,\n VoiceButton,\n VanillaVoiceButton,\n AgentSDK,\n AgentWidget,\n TextChatWidget\n};\n\n// Default export for convenience\nexport default {\n VoiceSDK,\n TextChatSDK,\n WebSocketManager,\n AudioRecorder,\n AudioPlayer,\n EventEmitter,\n VoiceButton,\n VanillaVoiceButton,\n AgentSDK,\n AgentWidget,\n TextChatWidget,\n VERSION\n};\n"],"names":["root","factory","exports","module","define","amd","window","REACT_ELEMENT_TYPE","Symbol","for","jsxProd","type","config","maybeKey","key","propName","ref","$$typeof","props","jsx","jsxs","iterator","ReactNoopUpdateQueue","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","assign","Object","emptyObject","Component","context","updater","this","refs","ComponentDummy","PureComponent","prototype","isReactComponent","setState","partialState","callback","Error","forceUpdate","pureComponentPrototype","constructor","isPureReactComponent","Array","isArray","ReactSharedInternals","H","A","T","S","hasOwnProperty","reportError","useEffect","create","deps","useRef","initialValue","useState","initialState","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","o","defineProperty","enumerable","get","obj","prop","call","r","toStringTag","value","EventEmitter","_classCallCheck","events","event","push","filter","cb","_len","arguments","length","args","_key","forEach","apply","error","console","concat","e","t","n","i","c","Generator","u","_regeneratorDefine2","f","p","y","G","v","a","bind","l","TypeError","done","return","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","_invoke","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_defineProperties","_toPropertyKey","_typeof","toPrimitive","String","_toPrimitive","_isNativeReflectConstruct","Boolean","valueOf","Reflect","construct","_getPrototypeOf","_setPrototypeOf","_EventEmitter","WebSocketSingleton","_this","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","_callSuper","connections","Map","connectionCounts","creatingConnections","Set","_inherits","_callee","url","existingConnection","connection","_this2","_context","has","set","checkConnection","setTimeout","add","WebSocket","addEventListener","delete","emit","_getConnection","_next","_throw","_x","currentCount","newCount","Math","max","readyState","OPEN","close","exists","subscribers","_step","result","_iterator","_createForOfIteratorHelper","entries","s","_step$value","_slicedToArray","err","_step2","_iterator2","_step2$value","clear","WebSocketManager","ws","isConnected","connectionId","reject","Date","now","random","toString","substr","connectResolve","connectReject","webSocketSingleton","getConnection","websocketUrl","setupEventListeners","catch","_connect","_this3","handleOpen","handleClose","handleError","handleMessage","on","eventHandlers","open","message","off","releaseConnection","send","JSON","stringify","warn","data","_this4","ArrayBuffer","Blob","arrayBuffer","parse","getAllConnections","clearAll","_asyncToGenerator","AudioRecorder","audioContext","audioWorkletNode","mediaStream","isRecording","_start","_t","navigator","mediaDevices","getUserMedia","audio","sampleRate","channelCount","echoCancellation","noiseSuppression","autoGainControl","AudioContext","webkitAudioContext","state","resume","audioWorklet","addModule","AudioWorkletNode","createMediaStreamSource","connect","port","onmessage","_event$data","postMessage","enabled","_stop","_callee2","_t2","_context2","getTracks","track","stop","audioContextState","AudioPlayer","audioQueue","isPlaying","isProcessingQueue","currentSource","audioData","audioBlob","createAudioBlob","processQueue","uint8Array","Uint8Array","wasNotPlayingBefore","audioBuffer","isTrulyStarting","source","shift","decodeAudioData","createBufferSource","buffer","destination","onended","start","_processQueue","stopImmediate","wasPlaying","queueLength","ownKeys","keys","getOwnPropertySymbols","getOwnPropertyDescriptor","_objectSpread","_defineProperty","getOwnPropertyDescriptors","defineProperties","VoiceSDK","agentId","appId","ttpId","voice","language","isDestroyed","webSocketManager","autoReconnect","audioRecorder","audioPlayer","setupEventHandlers","sendHelloMessage","stopRecording","binaryString","atob","charCodeAt","playAudio","sendMessage","sendBinary","wsUrl","buildWebSocketUrl","params","URLSearchParams","append","separator","includes","disconnect","resetReconnectionAttempts","_reconnect","_startRecording","_callee3","_context3","generateTtpId","_stopRecording","_callee4","_t3","_context4","_toggleRecording","_callee5","_context5","startRecording","_handleBargeIn","_callee6","_context6","stopAudioPlayback","newConfig","helloMessage","destroy","removeAllListeners","TextChatSDK","scriptConfig","readScriptTagConfig","baseWsUrl","conversationId","getPersistedConversationId","forceConversationId","queue","inFlight","fullResponseBuffer","sdkScript","from","document","getElementsByTagName","reverse","find","dataset","src","_","base","text","trim","task","executeTask","_sendMessage","persisted","log","socket","primaryUrl","fallbackBase","endsWith","replace","fallbackUrl","triedFallback","messageSent","helloWaitTimer","sendPayload","payload","effectiveConvId","persistConversationId","evt","clearTimeout","content","finalText","answer","fullText","drainQueue","onopen","onerror","fb","onclose","next","localStorage","setItem","getItem","_arrayWithHoles","_iterableToArrayLimit","_arrayLikeToArray","slice","name","test","_unsupportedIterableToArray","_nonIterableRest","_ref","_ref$voice","_ref$language","_ref$autoReconnect","onConnected","onDisconnected","onRecordingStarted","onRecordingStopped","onPlaybackStarted","onPlaybackStopped","onError","onMessage","onBargeIn","onStopPlaying","_ref$className","className","_ref$style","style","children","_useState2","setIsConnected","_useState4","setIsRecording","_useState6","setIsPlaying","_useState8","setConnectionStatus","voiceSDKRef","current","voiceSDK","handleClick","_ref2","toggleRecording","defaultContent","_jsxs","display","alignItems","gap","_jsx","fontSize","padding","border","borderRadius","backgroundColor","color","cursor","fontWeight","transition","onClick","disabled","VoiceButton","options","container","body","buttonText","buttonClass","createButton","_this$options$onConne","_this$options","updateButton","_this$options$onDisco","_this$options2","_this$options$onRecor","_this$options3","_this$options$onRecor2","_this$options4","_this$options$onPlayb","_this$options5","_this$options$onPlayb2","_this$options6","_this$options$onError","_this$options7","_this$options$onMessa","_this$options8","_this$options$onBarge","_this$options9","_this$options$onStopP","_this$options0","button","createElement","cssText","appendChild","icon","innerHTML","updateConfig","parentNode","removeChild","_createClass","AgentSDK","isListening","onTranscript","onAgentSpeaking","isStart","signedUrl","handleWebSocketMessage","user_transcription","_startListening","variables","AgentWidget","mergeWithDefaults","sdk","isOpen","isActive","createWidget","behavior","startOpen","autoOpen","panel","getElementById","classList","userConfig","_userConfig$button","_userConfig$icon","_userConfig$icon2","_userConfig$icon3","_userConfig$icon4","_userConfig$icon5","_userConfig$icon6","_userConfig$button2","_userConfig$button3","_userConfig$button4","_userConfig$icon7","_userConfig$button5","_userConfig$button6","_userConfig$button7","_userConfig$button8","_userConfig$icon8","_userConfig$panel","_userConfig$panel2","_userConfig$panel3","_userConfig$panel4","_userConfig$panel5","_userConfig$panel6","_userConfig$panel7","_userConfig$panel8","_userConfig$panel9","_userConfig$panel0","_userConfig$panel1","_userConfig$panel10","_userConfig$header","_userConfig$header2","_userConfig$header3","_userConfig$button9","_userConfig$header4","_userConfig$header5","_userConfig$messages","_userConfig$messages2","_userConfig$messages3","_userConfig$messages4","_userConfig$messages5","_userConfig$messages6","_userConfig$messages7","_userConfig$animation","_userConfig$animation2","_userConfig$animation3","_userConfig$animation4","_userConfig$behavior","_userConfig$behavior2","_userConfig$behavior3","_userConfig$behavior4","_userConfig$behavior5","_userConfig$behavior6","_userConfig$accessibi","_userConfig$accessibi2","_userConfig$accessibi3","positionConfig","position","parts","split","vertical","horizontal","offset","positionOffset","x","primaryColor","getSessionUrl","demo","direction","customImage","emoji","size","shape","hoverColor","shadow","shadowColor","width","height","backdropFilter","micButtonColor","micButtonActiveColor","micButtonHint","header","title","showTitle","textColor","showCloseButton","messages","userBackgroundColor","agentBackgroundColor","systemBackgroundColor","errorBackgroundColor","animation","enableHover","enablePulse","enableSlide","duration","hidden","autoConnect","showWelcomeMessage","welcomeMessage","accessibility","ariaLabel","ariaDescription","keyboardNavigation","customStyles","positionString","updateStatus","addMessage","updateMicButtonState","showError","showAgentThinking","hideAgentThinking","widget","id","generateWidgetHTML","setupWidgetEvents","btn","buttonSize","small","medium","large","xl","iconSize","positionStyles","generatePositionStyles","iconHTML","generateIconHTML","generateCSS","pos","styles","floor","anim","floatingButtonColor","headerColor","openBtn","onclick","togglePanel","closeBtn","toggleVoice","setupKeyboardNavigation","toggle","_toggleVoice","connected","attempts","getSignedUrl","startListening","stopListening","micButton","iconElement","querySelector","tagName","remove","_getSignedUrl","baseUrl","requestBody","response","_params","fetch","method","headers","ok","statusText","json","textContent","scrollTop","scrollHeight","thinking","status","_this$config$panel","mergedConfig","existingWidget","VoiceInterface","audioStream","callStartTime","callTimerInterval","setupSDKEventHandlers","updateTranscript","avatar","_this$config$translat","_this$config$translat2","lang","translations","en","_this$config$tooltips","tooltip","tooltips","mute","speaker","endCall","getTooltip","avatarBg","avatarBackgroundColor","avatarActiveBg","avatarActiveBackgroundColor","statusTitleColor","statusSubtitleColor","startCallBtnColor","startCallButtonColor","startCallBtnTextColor","startCallButtonTextColor","transcriptBg","transcriptBackgroundColor","transcriptTextColor","transcriptLabelColor","controlBtnColor","controlButtonColor","controlBtnSecondaryColor","controlButtonSecondaryColor","endCallBtnColor","endCallButtonColor","callbacks","startCallBtn","endCallBtn","muteBtn","speakerBtn","startVoiceCall","endVoiceCall","toggleMute","toggleSpeaker","_startVoiceCall","idleState","activeState","voiceInterface","_idleState","_activeState","setInterval","elapsed","minutes","seconds","timerEl","padStart","clearInterval","transcriptEl","audioTrack","getAudioTracks","muteIcon","muteCross","stroke","TextInterface","streamingEl","hasStartedStreaming","_this$config$sendButt","_this$config$panel2","_this$config$sendButt2","_this$config$panel3","_this$config$sendButt3","_this$config$panel4","_this$config$sendButt4","_this$config$panel5","inputPlaceholder","sendButtonText","sendButtonHint","_this$config$panel6","_this$config$panel7","_this$config$panel8","_this$config$panel9","_this$config$panel0","_this$config$panel1","_this$config$panel10","_this$config$panel11","_this$config$panel12","_this$config$panel13","_this$config$panel14","_this$config$panel15","_this$config$panel16","sendButtonColor","sendButtonHoverColor","sendButtonTextColor","inputBorderColor","inputFocusColor","inputBackgroundColor","inputTextColor","inputFontSize","inputBorderRadius","inputPadding","sendButtonFontSize","sendButtonFontWeight","sendButton","inputField","newChatBtn","startNewChat","updateInputAttributes","overflow","autoResize","newHeight","min","overflowY","shiftKey","preventDefault","removeItem","input","focus","_this$config$panel17","placeholder","dir","textAlign","textInterface","_startChat","updateSendButtonState","startChat","beginStreaming","stopStreamingState","emptyState","edgeClass","bubble","el","chunk","existing","active","TextChatWidget","_this$config$voice","_this$config$voice2","widgetTranslations","voiceConfig","textConfig","_userConfig$button0","_userConfig$voice","_userConfig$voice2","_userConfig$voice3","_userConfig$voice4","_userConfig$voice5","_userConfig$voice6","_userConfig$voice7","_userConfig$voice8","_userConfig$voice9","_userConfig$voice0","_userConfig$voice1","_userConfig$voice10","_userConfig$voice11","_userConfig$voice12","_userConfig$voice13","_userConfig$voice14","_userConfig$voice15","_userConfig$voice16","_userConfig$voice17","_userConfig$voice18","_userConfig$text","_userConfig$panel11","_userConfig$text2","_userConfig$panel12","_userConfig$text3","_userConfig$panel13","_userConfig$text4","_userConfig$panel14","_userConfig$text5","_userConfig$panel15","_userConfig$text6","_userConfig$panel16","_userConfig$text7","_userConfig$panel17","_userConfig$text8","_userConfig$panel18","_userConfig$text9","_userConfig$panel19","_userConfig$text0","_userConfig$panel20","_userConfig$text1","_userConfig$panel21","_userConfig$text10","_userConfig$panel22","_userConfig$text11","_userConfig$panel23","_userConfig$text12","_userConfig$panel24","_userConfig$text13","_userConfig$panel25","_userConfig$text14","_userConfig$panel26","_userConfig$text15","_userConfig$panel27","_userConfig$text16","_userConfig$panel28","_userConfig$text17","_userConfig$panel29","_userConfig$landing","_userConfig$landing2","_userConfig$landing3","_userConfig$landing4","_userConfig$landing5","_userConfig$landing6","_userConfig$landing7","_userConfig$landing8","_userConfig$landing9","_userConfig$landing0","_userConfig$landing1","_userConfig$button1","_userConfig$header6","_userConfig$tooltips","_userConfig$tooltips2","_userConfig$tooltips3","_userConfig$tooltips4","_userConfig$tooltips5","_userConfig$tooltips6","_userConfig$behavior7","_userConfig$behavior8","sendButtonActiveColor","landing","logo","titleColor","modeCardBackgroundColor","modeCardBorderColor","modeCardHoverBorderColor","modeCardIconBackgroundColor","modeCardTitleColor","voiceCardIcon","textCardIcon","newChat","back","enableVoiceMode","mode","appendStreamingChunk","finalizeStreaming","widgetMode","showLanding","showVoice","showText","_this2$config$tooltip","generateHTML","_this$config$landing","_this$config$landing2","_this$config$landing3","_this$config$landing4","_this$config$landing5","_this$config$landing6","_this$config$landing7","backBtn","voiceCard","textCard","show","setActive","_this$config","_this$config$voice4","_this$config$voice3","_this$config$text","currentLanguage","VERSION","VanillaVoiceButton"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"agent-widget.js","mappings":"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","sources":["webpack://TTPAgentSDK/webpack/universalModuleDefinition","webpack://TTPAgentSDK/./node_modules/react/index.js","webpack://TTPAgentSDK/./node_modules/react/cjs/react-jsx-runtime.production.js","webpack://TTPAgentSDK/./node_modules/react/jsx-runtime.js","webpack://TTPAgentSDK/./node_modules/react/cjs/react.production.js","webpack://TTPAgentSDK/webpack/bootstrap","webpack://TTPAgentSDK/webpack/runtime/define property getters","webpack://TTPAgentSDK/webpack/runtime/hasOwnProperty shorthand","webpack://TTPAgentSDK/webpack/runtime/make namespace object","webpack://TTPAgentSDK/./src/core/EventEmitter.js","webpack://TTPAgentSDK/./src/core/WebSocketSingleton.js","webpack://TTPAgentSDK/./src/core/WebSocketManager.js","webpack://TTPAgentSDK/./src/core/AudioRecorder.js","webpack://TTPAgentSDK/./src/core/AudioPlayer.js","webpack://TTPAgentSDK/./src/core/VoiceSDK.js","webpack://TTPAgentSDK/./src/core/TextChatSDK.js","webpack://TTPAgentSDK/./src/react/VoiceButton.jsx","webpack://TTPAgentSDK/./src/vanilla/VoiceButton.js","webpack://TTPAgentSDK/./src/legacy/AgentSDK.js","webpack://TTPAgentSDK/./src/legacy/VoiceInterface.js","webpack://TTPAgentSDK/./src/legacy/TextInterface.js","webpack://TTPAgentSDK/./src/legacy/widget-translations.js","webpack://TTPAgentSDK/./src/legacy/TextChatWidget.js","webpack://TTPAgentSDK/./src/index.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TTPAgentSDK\"] = factory();\n\telse\n\t\troot[\"TTPAgentSDK\"] = factory();\n})(window, () => {\nreturn ","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n maybeIterable =\n (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n maybeIterable[\"@@iterator\"];\n return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n isMounted: function () {\n return !1;\n },\n enqueueForceUpdate: function () {},\n enqueueReplaceState: function () {},\n enqueueSetState: function () {}\n },\n assign = Object.assign,\n emptyObject = {};\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n if (\n \"object\" !== typeof partialState &&\n \"function\" !== typeof partialState &&\n null != partialState\n )\n throw Error(\n \"takes an object of state variables to update or a function which returns an object of state variables.\"\n );\n this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n this.props = props;\n this.context = context;\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray;\nfunction noop() {}\nvar ReactSharedInternals = { H: null, A: null, T: null, S: null },\n hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, props) {\n var refProp = props.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== refProp ? refProp : null,\n props: props\n };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n return ReactElement(oldElement.type, newKey, oldElement.props);\n}\nfunction isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n}\nfunction escape(key) {\n var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n return (\n \"$\" +\n key.replace(/[=:]/g, function (match) {\n return escaperLookup[match];\n })\n );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n return \"object\" === typeof element && null !== element && null != element.key\n ? escape(\"\" + element.key)\n : index.toString(36);\n}\nfunction resolveThenable(thenable) {\n switch (thenable.status) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n default:\n switch (\n (\"string\" === typeof thenable.status\n ? thenable.then(noop, noop)\n : ((thenable.status = \"pending\"),\n thenable.then(\n function (fulfilledValue) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"fulfilled\"),\n (thenable.value = fulfilledValue));\n },\n function (error) {\n \"pending\" === thenable.status &&\n ((thenable.status = \"rejected\"), (thenable.reason = error));\n }\n )),\n thenable.status)\n ) {\n case \"fulfilled\":\n return thenable.value;\n case \"rejected\":\n throw thenable.reason;\n }\n }\n throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n var type = typeof children;\n if (\"undefined\" === type || \"boolean\" === type) children = null;\n var invokeCallback = !1;\n if (null === children) invokeCallback = !0;\n else\n switch (type) {\n case \"bigint\":\n case \"string\":\n case \"number\":\n invokeCallback = !0;\n break;\n case \"object\":\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = !0;\n break;\n case REACT_LAZY_TYPE:\n return (\n (invokeCallback = children._init),\n mapIntoArray(\n invokeCallback(children._payload),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n )\n );\n }\n }\n if (invokeCallback)\n return (\n (callback = callback(children)),\n (invokeCallback =\n \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n isArrayImpl(callback)\n ? ((escapedPrefix = \"\"),\n null != invokeCallback &&\n (escapedPrefix =\n invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n return c;\n }))\n : null != callback &&\n (isValidElement(callback) &&\n (callback = cloneAndReplaceKey(\n callback,\n escapedPrefix +\n (null == callback.key ||\n (children && children.key === callback.key)\n ? \"\"\n : (\"\" + callback.key).replace(\n userProvidedKeyEscapeRegex,\n \"$&/\"\n ) + \"/\") +\n invokeCallback\n )),\n array.push(callback)),\n 1\n );\n invokeCallback = 0;\n var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n if (isArrayImpl(children))\n for (var i = 0; i < children.length; i++)\n (nameSoFar = children[i]),\n (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n for (\n children = i.call(children), i = 0;\n !(nameSoFar = children.next()).done;\n\n )\n (nameSoFar = nameSoFar.value),\n (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n (invokeCallback += mapIntoArray(\n nameSoFar,\n array,\n escapedPrefix,\n type,\n callback\n ));\n else if (\"object\" === type) {\n if (\"function\" === typeof children.then)\n return mapIntoArray(\n resolveThenable(children),\n array,\n escapedPrefix,\n nameSoFar,\n callback\n );\n array = String(children);\n throw Error(\n \"Objects are not valid as a React child (found: \" +\n (\"[object Object]\" === array\n ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n : array) +\n \"). If you meant to render a collection of children, use an array instead.\"\n );\n }\n return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n if (null == children) return children;\n var result = [],\n count = 0;\n mapIntoArray(children, result, \"\", \"\", function (child) {\n return func.call(context, child, count++);\n });\n return result;\n}\nfunction lazyInitializer(payload) {\n if (-1 === payload._status) {\n var ctor = payload._result;\n ctor = ctor();\n ctor.then(\n function (moduleObject) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 1), (payload._result = moduleObject);\n },\n function (error) {\n if (0 === payload._status || -1 === payload._status)\n (payload._status = 2), (payload._result = error);\n }\n );\n -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\n }\n if (1 === payload._status) return payload._result.default;\n throw payload._result;\n}\nvar reportGlobalError =\n \"function\" === typeof reportError\n ? reportError\n : function (error) {\n if (\n \"object\" === typeof window &&\n \"function\" === typeof window.ErrorEvent\n ) {\n var event = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message:\n \"object\" === typeof error &&\n null !== error &&\n \"string\" === typeof error.message\n ? String(error.message)\n : String(error),\n error: error\n });\n if (!window.dispatchEvent(event)) return;\n } else if (\n \"object\" === typeof process &&\n \"function\" === typeof process.emit\n ) {\n process.emit(\"uncaughtException\", error);\n return;\n }\n console.error(error);\n },\n Children = {\n map: mapChildren,\n forEach: function (children, forEachFunc, forEachContext) {\n mapChildren(\n children,\n function () {\n forEachFunc.apply(this, arguments);\n },\n forEachContext\n );\n },\n count: function (children) {\n var n = 0;\n mapChildren(children, function () {\n n++;\n });\n return n;\n },\n toArray: function (children) {\n return (\n mapChildren(children, function (child) {\n return child;\n }) || []\n );\n },\n only: function (children) {\n if (!isValidElement(children))\n throw Error(\n \"React.Children.only expected to receive a single React element child.\"\n );\n return children;\n }\n };\nexports.Activity = REACT_ACTIVITY_TYPE;\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n __proto__: null,\n c: function (size) {\n return ReactSharedInternals.H.useMemoCache(size);\n }\n};\nexports.cache = function (fn) {\n return function () {\n return fn.apply(null, arguments);\n };\n};\nexports.cacheSignal = function () {\n return null;\n};\nexports.cloneElement = function (element, config, children) {\n if (null === element || void 0 === element)\n throw Error(\n \"The argument must be a React element, but you passed \" + element + \".\"\n );\n var props = assign({}, element.props),\n key = element.key;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n !hasOwnProperty.call(config, propName) ||\n \"key\" === propName ||\n \"__self\" === propName ||\n \"__source\" === propName ||\n (\"ref\" === propName && void 0 === config.ref) ||\n (props[propName] = config[propName]);\n var propName = arguments.length - 2;\n if (1 === propName) props.children = children;\n else if (1 < propName) {\n for (var childArray = Array(propName), i = 0; i < propName; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n return ReactElement(element.type, key, props);\n};\nexports.createContext = function (defaultValue) {\n defaultValue = {\n $$typeof: REACT_CONTEXT_TYPE,\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n _threadCount: 0,\n Provider: null,\n Consumer: null\n };\n defaultValue.Provider = defaultValue;\n defaultValue.Consumer = {\n $$typeof: REACT_CONSUMER_TYPE,\n _context: defaultValue\n };\n return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n var propName,\n props = {},\n key = null;\n if (null != config)\n for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n hasOwnProperty.call(config, propName) &&\n \"key\" !== propName &&\n \"__self\" !== propName &&\n \"__source\" !== propName &&\n (props[propName] = config[propName]);\n var childrenLength = arguments.length - 2;\n if (1 === childrenLength) props.children = children;\n else if (1 < childrenLength) {\n for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n childArray[i] = arguments[i + 2];\n props.children = childArray;\n }\n if (type && type.defaultProps)\n for (propName in ((childrenLength = type.defaultProps), childrenLength))\n void 0 === props[propName] &&\n (props[propName] = childrenLength[propName]);\n return ReactElement(type, key, props);\n};\nexports.createRef = function () {\n return { current: null };\n};\nexports.forwardRef = function (render) {\n return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n return {\n $$typeof: REACT_LAZY_TYPE,\n _payload: { _status: -1, _result: ctor },\n _init: lazyInitializer\n };\n};\nexports.memo = function (type, compare) {\n return {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: void 0 === compare ? null : compare\n };\n};\nexports.startTransition = function (scope) {\n var prevTransition = ReactSharedInternals.T,\n currentTransition = {};\n ReactSharedInternals.T = currentTransition;\n try {\n var returnValue = scope(),\n onStartTransitionFinish = ReactSharedInternals.S;\n null !== onStartTransitionFinish &&\n onStartTransitionFinish(currentTransition, returnValue);\n \"object\" === typeof returnValue &&\n null !== returnValue &&\n \"function\" === typeof returnValue.then &&\n returnValue.then(noop, reportGlobalError);\n } catch (error) {\n reportGlobalError(error);\n } finally {\n null !== prevTransition &&\n null !== currentTransition.types &&\n (prevTransition.types = currentTransition.types),\n (ReactSharedInternals.T = prevTransition);\n }\n};\nexports.unstable_useCacheRefresh = function () {\n return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, deps) {\n return ReactSharedInternals.H.useEffect(create, deps);\n};\nexports.useEffectEvent = function (callback) {\n return ReactSharedInternals.H.useEffectEvent(callback);\n};\nexports.useId = function () {\n return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n subscribe,\n getSnapshot,\n getServerSnapshot\n) {\n return ReactSharedInternals.H.useSyncExternalStore(\n subscribe,\n getSnapshot,\n getServerSnapshot\n );\n};\nexports.useTransition = function () {\n return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.2.0\";\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * EventEmitter - Simple event system for the VoiceSDK\n */\nexport default class EventEmitter {\n constructor() {\n this.events = {};\n }\n \n /**\n * Add event listener\n */\n on(event, callback) {\n if (!this.events[event]) {\n this.events[event] = [];\n }\n this.events[event].push(callback);\n }\n \n /**\n * Remove event listener\n */\n off(event, callback) {\n if (!this.events[event]) return;\n \n this.events[event] = this.events[event].filter(cb => cb !== callback);\n }\n \n /**\n * Emit event\n */\n emit(event, ...args) {\n if (!this.events[event]) return;\n \n this.events[event].forEach(callback => {\n try {\n callback(...args);\n } catch (error) {\n console.error(`Error in event listener for ${event}:`, error);\n }\n });\n }\n \n /**\n * Remove all listeners for an event\n */\n removeAllListeners(event) {\n if (event) {\n delete this.events[event];\n } else {\n this.events = {};\n }\n }\n}\n","/**\n * WebSocketSingleton - Ensures only one WebSocket connection per URL exists\n */\nimport EventEmitter from './EventEmitter.js';\n\nclass WebSocketSingleton extends EventEmitter {\n constructor() {\n super();\n this.connections = new Map(); // Map of URL -> WebSocket instance\n this.connectionCounts = new Map(); // Map of URL -> number of subscribers\n this.creatingConnections = new Set(); // Set of URLs currently being created\n }\n \n /**\n * Get or create a WebSocket connection\n */\n async getConnection(url, config = {}) {\n // If connection already exists, just return it\n if (this.connections.has(url)) {\n const existingConnection = this.connections.get(url);\n this.connectionCounts.set(url, (this.connectionCounts.get(url) || 0) + 1);\n return existingConnection;\n }\n \n // Check if we're already in the process of creating a connection\n if (this.creatingConnections && this.creatingConnections.has(url)) {\n // Wait for the existing creation to complete\n return new Promise((resolve) => {\n const checkConnection = () => {\n if (this.connections.has(url)) {\n const existingConnection = this.connections.get(url);\n this.connectionCounts.set(url, (this.connectionCounts.get(url) || 0) + 1);\n resolve(existingConnection);\n } else {\n setTimeout(checkConnection, 50);\n }\n };\n checkConnection();\n });\n }\n \n // Create new connection\n this.creatingConnections.add(url);\n const connection = new WebSocket(url);\n this.connections.set(url, connection);\n this.connectionCounts.set(url, 1);\n \n // Set up event forwarding\n connection.addEventListener('open', (event) => {\n this.creatingConnections.delete(url);\n this.emit('open', event, url);\n });\n \n connection.addEventListener('close', (event) => {\n this.creatingConnections.delete(url);\n this.connections.delete(url);\n this.connectionCounts.delete(url);\n this.emit('close', event, url);\n });\n \n connection.addEventListener('error', (event) => {\n this.creatingConnections.delete(url);\n this.emit('error', event, url);\n });\n \n connection.addEventListener('message', (event) => {\n this.emit('message', event, url);\n });\n \n return connection;\n }\n \n /**\n * Release a connection (decrement subscriber count)\n */\n releaseConnection(url) {\n if (!this.connections.has(url)) {\n return;\n }\n \n const currentCount = this.connectionCounts.get(url) || 0;\n const newCount = Math.max(0, currentCount - 1);\n this.connectionCounts.set(url, newCount);\n \n // If no more subscribers, close the connection\n if (newCount === 0) {\n const connection = this.connections.get(url);\n if (connection && connection.readyState === WebSocket.OPEN) {\n connection.close(1000, 'No more subscribers');\n }\n this.connections.delete(url);\n this.connectionCounts.delete(url);\n }\n }\n \n /**\n * Force close a connection\n */\n forceClose(url) {\n if (this.connections.has(url)) {\n const connection = this.connections.get(url);\n if (connection && connection.readyState === WebSocket.OPEN) {\n connection.close(1000, 'Force close');\n }\n this.connections.delete(url);\n this.connectionCounts.delete(url);\n }\n }\n \n /**\n * Get connection status\n */\n getConnectionStatus(url) {\n if (!this.connections.has(url)) {\n return { exists: false, readyState: null, subscribers: 0 };\n }\n \n const connection = this.connections.get(url);\n return {\n exists: true,\n readyState: connection.readyState,\n subscribers: this.connectionCounts.get(url) || 0\n };\n }\n \n /**\n * Get all active connections\n */\n getAllConnections() {\n const result = {};\n for (const [url, connection] of this.connections.entries()) {\n result[url] = {\n readyState: connection.readyState,\n subscribers: this.connectionCounts.get(url) || 0\n };\n }\n return result;\n }\n \n /**\n * Clear all connections (for testing)\n */\n clearAll() {\n for (const [url, connection] of this.connections.entries()) {\n if (connection && connection.readyState === WebSocket.OPEN) {\n connection.close(1000, 'Clear all');\n }\n }\n this.connections.clear();\n this.connectionCounts.clear();\n this.creatingConnections.clear();\n }\n}\n\n// Global singleton instance\nconst webSocketSingleton = new WebSocketSingleton();\n\nexport default webSocketSingleton;\n","/**\n * WebSocketManager - Uses singleton pattern to prevent multiple connections\n */\nimport EventEmitter from './EventEmitter.js';\nimport webSocketSingleton from './WebSocketSingleton.js';\n\nexport default class WebSocketManager extends EventEmitter {\n constructor(config) {\n super();\n this.config = config;\n this.ws = null;\n this.isConnected = false;\n this.connectionId = null;\n }\n \n /**\n * Connect to WebSocket using singleton\n */\n async connect() {\n return new Promise((resolve, reject) => {\n try {\n this.connectionId = Date.now() + '_' + Math.random().toString(36).substr(2, 9);\n \n // Store resolve/reject for later use\n this.connectResolve = resolve;\n this.connectReject = reject;\n \n // Get connection from singleton\n webSocketSingleton.getConnection(this.config.websocketUrl, this.config)\n .then((connection) => {\n this.ws = connection;\n \n // Set up event listeners (this will set up handlers that can resolve the promise)\n this.setupEventListeners();\n \n // If already connected, resolve immediately\n if (connection.readyState === WebSocket.OPEN) {\n this.isConnected = true;\n this.emit('connected');\n resolve();\n this.connectResolve = null;\n this.connectReject = null;\n }\n })\n .catch((error) => {\n console.error(`🔌 WebSocketManager: Connection failed ${this.connectionId}`, error);\n reject(error);\n this.connectResolve = null;\n this.connectReject = null;\n });\n \n } catch (error) {\n console.error(`🔌 WebSocketManager: Connection error ${this.connectionId}`, error);\n reject(error);\n this.connectResolve = null;\n this.connectReject = null;\n }\n });\n }\n \n /**\n * Set up event listeners\n */\n setupEventListeners() {\n if (!this.ws) return;\n \n // Use singleton's event forwarding\n const handleOpen = (event, url) => {\n if (url === this.config.websocketUrl) {\n this.isConnected = true;\n this.emit('connected');\n \n // Resolve the connect promise if it hasn't been resolved yet\n if (this.connectResolve) {\n this.connectResolve();\n this.connectResolve = null;\n this.connectReject = null;\n }\n }\n };\n \n const handleClose = (event, url) => {\n if (url === this.config.websocketUrl) {\n this.isConnected = false;\n this.emit('disconnected', event);\n }\n };\n \n const handleError = (event, url) => {\n if (url === this.config.websocketUrl) {\n this.emit('error', event);\n \n // Reject the connect promise if it hasn't been resolved yet\n if (this.connectReject) {\n this.connectReject(event);\n this.connectResolve = null;\n this.connectReject = null;\n }\n }\n };\n \n const handleMessage = (event, url) => {\n if (url === this.config.websocketUrl) {\n this.handleMessage(event);\n }\n };\n \n // Add event listeners\n webSocketSingleton.on('open', handleOpen);\n webSocketSingleton.on('close', handleClose);\n webSocketSingleton.on('error', handleError);\n webSocketSingleton.on('message', handleMessage);\n \n // Store handlers for cleanup\n this.eventHandlers = {\n open: handleOpen,\n close: handleClose,\n error: handleError,\n message: handleMessage\n };\n }\n \n /**\n * Disconnect from WebSocket\n */\n disconnect() {\n // Remove event listeners\n if (this.eventHandlers) {\n webSocketSingleton.off('open', this.eventHandlers.open);\n webSocketSingleton.off('close', this.eventHandlers.close);\n webSocketSingleton.off('error', this.eventHandlers.error);\n webSocketSingleton.off('message', this.eventHandlers.message);\n }\n \n // Release connection from singleton\n if (this.config.websocketUrl) {\n webSocketSingleton.releaseConnection(this.config.websocketUrl);\n }\n \n this.ws = null;\n this.isConnected = false;\n }\n \n /**\n * Send JSON message\n */\n sendMessage(message) {\n if (!this.isConnected || !this.ws) {\n // Silently ignore if not connected (may happen during cleanup/disconnect)\n return;\n }\n \n try {\n this.ws.send(JSON.stringify(message));\n } catch (error) {\n // Log but don't throw - connection may have closed between check and send\n console.warn('🔌 WebSocketManager: Failed to send message:', error.message);\n }\n }\n \n /**\n * Send binary data\n */\n sendBinary(data) {\n if (!this.isConnected || !this.ws) {\n // Silently ignore if not connected (may happen during cleanup/disconnect)\n return;\n }\n \n try {\n this.ws.send(data);\n } catch (error) {\n // Log but don't throw - connection may have closed between check and send\n console.warn('🔌 WebSocketManager: Failed to send binary data:', error.message);\n }\n }\n \n /**\n * Handle incoming messages\n */\n handleMessage(event) {\n // Check if it's binary data\n if (event.data instanceof ArrayBuffer) {\n this.emit('binaryAudio', event.data);\n return;\n } else if (event.data instanceof Blob) {\n event.data.arrayBuffer().then(arrayBuffer => {\n this.emit('binaryAudio', arrayBuffer);\n }).catch(err => {\n console.error('🔌 WebSocketManager: Error converting Blob to ArrayBuffer:', err);\n });\n return;\n }\n \n // Handle JSON messages\n try {\n const message = JSON.parse(event.data);\n \n // Handle barge-in related messages\n if (message.t === 'barge_in_ack' || message.t === 'stop_sending') {\n this.emit('bargeIn', message);\n }\n \n // Handle stop playing message\n if (message.t === 'stop_playing') {\n this.emit('stopPlaying', message);\n }\n \n this.emit('message', message);\n } catch (error) {\n this.emit('error', error);\n }\n }\n \n /**\n * Get connection status\n */\n getStatus() {\n return {\n isConnected: this.isConnected,\n readyState: this.ws ? this.ws.readyState : null,\n connectionId: this.connectionId\n };\n }\n \n /**\n * Get singleton status (for debugging)\n */\n static getSingletonStatus() {\n return webSocketSingleton.getAllConnections();\n }\n \n /**\n * Clear all singleton connections (for testing)\n */\n static clearAllConnections() {\n webSocketSingleton.clearAll();\n }\n}\n","/**\n * AudioRecorder - Handles audio recording using AudioWorklet\n */\nimport EventEmitter from './EventEmitter.js';\n\nexport default class AudioRecorder extends EventEmitter {\n constructor(config) {\n super();\n this.config = config;\n this.audioContext = null;\n this.audioWorkletNode = null;\n this.mediaStream = null;\n this.isRecording = false;\n }\n \n /**\n * Start audio recording\n */\n async start() {\n try {\n // Get user media\n this.mediaStream = await navigator.mediaDevices.getUserMedia({\n audio: {\n sampleRate: this.config.sampleRate,\n channelCount: 1,\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true\n }\n });\n \n // Create AudioContext\n this.audioContext = new (window.AudioContext || window.webkitAudioContext)({\n sampleRate: this.config.sampleRate\n });\n \n // Resume AudioContext if suspended\n if (this.audioContext.state === 'suspended') {\n await this.audioContext.resume();\n }\n \n // Load AudioWorklet module\n await this.audioContext.audioWorklet.addModule('/audio-processor.js');\n \n // Create AudioWorklet node\n this.audioWorkletNode = new AudioWorkletNode(this.audioContext, 'audio-processor');\n \n // Create media stream source\n const source = this.audioContext.createMediaStreamSource(this.mediaStream);\n source.connect(this.audioWorkletNode);\n \n // Handle messages from AudioWorklet\n this.audioWorkletNode.port.onmessage = (event) => {\n const { type, data } = event.data;\n \n if (type === 'pcm_audio_data') {\n this.emit('audioData', data);\n }\n };\n \n // Enable continuous mode\n this.audioWorkletNode.port.postMessage({\n type: 'setForceContinuous',\n data: { enabled: true }\n });\n \n this.isRecording = true;\n this.emit('recordingStarted');\n \n } catch (error) {\n this.emit('error', error);\n throw error;\n }\n }\n \n /**\n * Stop audio recording\n */\n async stop() {\n if (!this.isRecording) {\n return;\n }\n \n try {\n // Flush any remaining audio data\n if (this.audioWorkletNode) {\n this.audioWorkletNode.port.postMessage({ type: 'flush' });\n await new Promise(resolve => setTimeout(resolve, 100));\n }\n \n // Disconnect and cleanup\n if (this.mediaStream) {\n this.mediaStream.getTracks().forEach(track => track.stop());\n this.mediaStream = null;\n }\n \n if (this.audioContext && this.audioContext.state !== 'closed') {\n await this.audioContext.close();\n this.audioContext = null;\n }\n \n this.audioWorkletNode = null;\n this.isRecording = false;\n this.emit('recordingStopped');\n \n } catch (error) {\n this.emit('error', error);\n throw error;\n }\n }\n \n /**\n * Get recording status\n */\n getStatus() {\n return {\n isRecording: this.isRecording,\n audioContextState: this.audioContext ? this.audioContext.state : 'closed'\n };\n }\n \n /**\n * Cleanup resources\n */\n destroy() {\n this.stop();\n }\n}\n","/**\n * AudioPlayer - Handles audio playback with queue system\n */\nimport EventEmitter from './EventEmitter.js';\n\nexport default class AudioPlayer extends EventEmitter {\n constructor(config) {\n super();\n this.config = config;\n this.audioContext = null;\n this.audioQueue = [];\n this.isPlaying = false;\n this.isProcessingQueue = false;\n this.currentSource = null;\n }\n \n /**\n * Add audio data to playback queue\n */\n playAudio(audioData) {\n try {\n const audioBlob = this.createAudioBlob(audioData);\n this.audioQueue.push(audioBlob);\n \n // Process queue if not already playing or processing\n // Also check if we have a current source - if not, we should start processing\n if (!this.isPlaying && !this.isProcessingQueue && !this.currentSource) {\n setTimeout(() => this.processQueue(), 50);\n }\n } catch (error) {\n this.emit('playbackError', error);\n }\n }\n \n /**\n * Create audio blob from ArrayBuffer\n */\n createAudioBlob(arrayBuffer) {\n const uint8Array = new Uint8Array(arrayBuffer);\n \n // Detect audio format\n if (uint8Array.length >= 4) {\n // WAV header (RIFF)\n if (uint8Array[0] === 0x52 && uint8Array[1] === 0x49 && \n uint8Array[2] === 0x46 && uint8Array[3] === 0x46) {\n return new Blob([arrayBuffer], { type: 'audio/wav' });\n }\n \n // MP3 header\n if (uint8Array[0] === 0xFF && (uint8Array[1] & 0xE0) === 0xE0) {\n return new Blob([arrayBuffer], { type: 'audio/mpeg' });\n }\n \n // OGG header\n if (uint8Array[0] === 0x4F && uint8Array[1] === 0x67 && \n uint8Array[2] === 0x67 && uint8Array[3] === 0x53) {\n return new Blob([arrayBuffer], { type: 'audio/ogg' });\n }\n }\n \n // Default to WAV format\n return new Blob([arrayBuffer], { type: 'audio/wav' });\n }\n \n /**\n * Process audio queue\n */\n async processQueue() {\n // Prevent multiple simultaneous queue processing\n // Note: isPlaying check removed to allow seamless queue processing\n if (this.isProcessingQueue || this.audioQueue.length === 0) {\n return;\n }\n \n this.isProcessingQueue = true;\n \n const audioBlob = this.audioQueue.shift();\n if (!audioBlob) {\n this.isProcessingQueue = false;\n return;\n }\n \n try {\n // Check if we were playing BEFORE async operations (decode, etc.)\n // This ensures we detect the true state before any async delays\n const wasNotPlayingBefore = !this.isPlaying && this.currentSource === null;\n \n // Create AudioContext if not exists\n if (!this.audioContext) {\n this.audioContext = new (window.AudioContext || window.webkitAudioContext)();\n }\n \n const audioContext = this.audioContext;\n \n // Resume AudioContext if suspended\n if (audioContext.state === 'suspended') {\n await audioContext.resume();\n }\n \n // Create audio source from blob\n const arrayBuffer = await audioBlob.arrayBuffer();\n const audioBuffer = await audioContext.decodeAudioData(arrayBuffer);\n \n // Double-check state AFTER async operations - audio might have been stopped\n // If currentSource is still null and isPlaying is still false, we're truly starting\n const isTrulyStarting = wasNotPlayingBefore && !this.isPlaying && this.currentSource === null;\n \n const source = audioContext.createBufferSource();\n source.buffer = audioBuffer;\n source.connect(audioContext.destination);\n \n // Set state BEFORE emitting event to prevent race conditions\n this.currentSource = source;\n this.isPlaying = true;\n \n // Emit playbackStarted right before actually starting playback\n // This ensures the event is sent when audio actually starts playing\n // CRITICAL: This must be emitted when audio truly starts, not before\n if (isTrulyStarting) {\n this.emit('playbackStarted');\n }\n \n // Handle audio end\n source.onended = () => {\n this.currentSource = null;\n this.isProcessingQueue = false;\n \n // Process next audio in queue if there are more items\n if (this.audioQueue.length > 0) {\n // More audio to play - continue processing without emitting playbackStopped\n // Keep isPlaying = true since we'll continue playing\n // Use immediate processing to minimize gaps\n setTimeout(() => this.processQueue(), 50);\n } else {\n // Queue is empty - playback has truly ended\n // Small delay to ensure smooth transition if new audio arrives quickly\n setTimeout(() => {\n // Check again if new audio arrived during the delay\n if (this.audioQueue.length === 0 && !this.currentSource) {\n this.isPlaying = false;\n this.emit('playbackStopped');\n }\n }, 100);\n }\n };\n \n // Start playback\n source.start();\n \n } catch (error) {\n this.currentSource = null;\n this.emit('playbackError', error);\n \n // Try to process next audio in queue if there are more items\n if (this.audioQueue.length > 0) {\n this.isProcessingQueue = false;\n setTimeout(() => this.processQueue(), 100);\n } else {\n // Queue is empty - playback has ended\n this.isPlaying = false;\n this.isProcessingQueue = false;\n this.emit('playbackStopped');\n }\n }\n }\n \n /**\n * Stop current playback and clear queue\n */\n stop() {\n this.stopImmediate();\n }\n \n /**\n * Stop current playback immediately and clear queue\n */\n stopImmediate() {\n const wasPlaying = this.isPlaying || this.currentSource !== null;\n \n if (this.currentSource) {\n try {\n this.currentSource.stop();\n } catch (error) {\n // Ignore errors when stopping\n }\n this.currentSource = null;\n }\n \n this.isPlaying = false;\n this.isProcessingQueue = false;\n this.audioQueue = [];\n \n // Only emit playbackStopped if audio was actually playing\n if (wasPlaying) {\n this.emit('playbackStopped');\n }\n }\n \n /**\n * Get playback status\n */\n getStatus() {\n return {\n isPlaying: this.isPlaying,\n isProcessingQueue: this.isProcessingQueue,\n queueLength: this.audioQueue.length,\n audioContextState: this.audioContext ? this.audioContext.state : 'closed'\n };\n }\n \n /**\n * Cleanup resources\n */\n destroy() {\n this.stop();\n \n if (this.audioContext && this.audioContext.state !== 'closed') {\n this.audioContext.close();\n this.audioContext = null;\n }\n }\n}\n","/**\n * VoiceSDK - Core voice interaction SDK\n * Handles WebSocket connection, audio recording, and audio playback\n */\nimport EventEmitter from './EventEmitter.js';\nimport WebSocketManager from './WebSocketManager.js';\nimport AudioRecorder from './AudioRecorder.js';\nimport AudioPlayer from './AudioPlayer.js';\n\nexport default class VoiceSDK extends EventEmitter {\n constructor(config = {}) {\n super();\n \n // Configuration\n this.config = {\n websocketUrl: config.websocketUrl || 'wss://speech.talktopc.com/ws/conv',\n agentId: config.agentId, // Optional - for direct agent access (unsecured method)\n appId: config.appId, // User's app ID for authentication\n ttpId: config.ttpId, // Optional - custom TTP ID (fallback if appId not provided)\n voice: config.voice || 'default',\n language: config.language || 'en',\n sampleRate: config.sampleRate || 16000,\n ...config\n };\n \n // State\n this.isConnected = false;\n this.isRecording = false;\n this.isPlaying = false;\n this.isDestroyed = false;\n \n // Components\n this.webSocketManager = new WebSocketManager({\n ...this.config,\n autoReconnect: this.config.autoReconnect !== false // Default to true unless explicitly disabled\n });\n this.audioRecorder = new AudioRecorder(this.config);\n this.audioPlayer = new AudioPlayer(this.config);\n \n // Bind event handlers\n this.setupEventHandlers();\n }\n \n /**\n * Setup event handlers for all components\n */\n setupEventHandlers() {\n // WebSocket events\n this.webSocketManager.on('connected', () => {\n this.isConnected = true;\n this.sendHelloMessage();\n this.emit('connected');\n });\n \n this.webSocketManager.on('disconnected', (event) => {\n this.isConnected = false;\n \n // IMPORTANT: Stop recording when WebSocket disconnects (e.g., no credits, max duration exceeded)\n // This ensures microphone is released and no more audio is streamed\n if (this.isRecording) {\n this.stopRecording().catch(err => {\n console.error('VoiceSDK: Error stopping recording on disconnect:', err);\n });\n }\n \n // Pass close event details (code, reason) to consumers\n this.emit('disconnected', event);\n });\n \n this.webSocketManager.on('error', (error) => {\n this.emit('error', error);\n });\n \n this.webSocketManager.on('message', (message) => {\n // Handle greeting audio message\n if (message.t === 'greeting_audio' && message.data) {\n try {\n // Convert base64 audio data to Uint8Array\n const binaryString = atob(message.data);\n const audioData = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n audioData[i] = binaryString.charCodeAt(i);\n }\n \n this.audioPlayer.playAudio(audioData);\n this.emit('greetingStarted');\n } catch (error) {\n console.error('VoiceSDK: Error playing greeting audio:', error);\n }\n } else {\n this.emit('message', message);\n }\n });\n \n this.webSocketManager.on('binaryAudio', (audioData) => {\n this.audioPlayer.playAudio(audioData);\n });\n \n this.webSocketManager.on('bargeIn', (message) => {\n this.emit('bargeIn', message);\n });\n \n this.webSocketManager.on('stopPlaying', (message) => {\n this.emit('stopPlaying', message);\n // Stop current playback and clear queue, but keep playing new audio\n // Note: stopImmediate() will emit playbackStopped, which will send audio_stopped_playing to backend\n // This ensures backend knows when browser actually stops playing\n this.audioPlayer.stopImmediate();\n // Note: stopImmediate() clears the queue but AudioPlayer can still accept new audio via playAudio()\n });\n \n // Audio recorder events\n this.audioRecorder.on('recordingStarted', () => {\n this.isRecording = true;\n \n // Detect barge-in: if audio is playing when recording starts\n if (this.isPlaying) {\n // Stop audio playback immediately\n this.audioPlayer.stopImmediate();\n // Send barge-in message to server\n if (this.isConnected) {\n this.webSocketManager.sendMessage({\n t: 'barge_in'\n });\n }\n }\n \n this.emit('recordingStarted');\n });\n \n this.audioRecorder.on('recordingStopped', () => {\n this.isRecording = false;\n this.emit('recordingStopped');\n });\n \n this.audioRecorder.on('audioData', (audioData) => {\n if (this.isConnected) {\n this.webSocketManager.sendBinary(audioData);\n }\n });\n \n // Audio player events\n this.audioPlayer.on('playbackStarted', () => {\n this.isPlaying = true;\n this.emit('playbackStarted');\n \n // Send audio_started_playing message to server\n if (this.isConnected) {\n this.webSocketManager.sendMessage({\n t: 'audio_started_playing'\n });\n }\n });\n \n this.audioPlayer.on('playbackStopped', () => {\n this.isPlaying = false;\n this.emit('playbackStopped');\n \n // Send audio_stopped_playing message to server\n if (this.isConnected) {\n this.webSocketManager.sendMessage({\n t: 'audio_stopped_playing'\n });\n }\n });\n \n this.audioPlayer.on('playbackError', (error) => {\n this.emit('playbackError', error);\n });\n }\n \n /**\n * Connect to the voice server\n */\n async connect() {\n if (this.isDestroyed) {\n console.warn('VoiceSDK: Cannot connect - SDK is destroyed');\n return false; // Prevent connect after destroy\n }\n \n try {\n // Build WebSocket URL with query parameters if needed\n const wsUrl = this.buildWebSocketUrl();\n \n // Update the WebSocket manager with the URL that includes query parameters\n this.webSocketManager.config.websocketUrl = wsUrl;\n \n await this.webSocketManager.connect();\n return true;\n } catch (error) {\n console.error('🔌 VoiceSDK: Connection failed with error:', error);\n this.emit('error', error);\n return false;\n }\n }\n\n /**\n * Build WebSocket URL with query parameters for authentication\n */\n buildWebSocketUrl() {\n let url = this.config.websocketUrl;\n const params = new URLSearchParams();\n \n // Add agentId as query parameter if provided\n if (this.config.agentId) {\n params.append('agentId', this.config.agentId);\n }\n \n // Add appId as query parameter if provided\n if (this.config.appId) {\n params.append('appId', this.config.appId);\n }\n \n // Add other parameters if needed\n if (this.config.voice && this.config.voice !== 'default') {\n params.append('voice', this.config.voice);\n }\n \n if (this.config.language && this.config.language !== 'en') {\n params.append('language', this.config.language);\n }\n \n // Append query parameters to URL if any exist\n if (params.toString()) {\n const separator = url.includes('?') ? '&' : '?';\n url += separator + params.toString();\n }\n \n return url;\n }\n \n /**\n * Disconnect from the voice server\n */\n disconnect() {\n if (this.isDestroyed) {\n return; // Prevent disconnect after destroy\n }\n this.stopRecording();\n this.webSocketManager.disconnect();\n }\n \n /**\n * Reset reconnection attempts (useful for manual reconnection)\n */\n resetReconnectionAttempts() {\n if (this.isDestroyed) {\n return;\n }\n this.webSocketManager.resetReconnectionAttempts();\n }\n \n /**\n * Manually reconnect to the voice server\n */\n async reconnect() {\n if (this.isDestroyed) {\n return false;\n }\n \n this.disconnect();\n this.resetReconnectionAttempts();\n return await this.connect();\n }\n \n /**\n * Start voice recording and streaming\n */\n async startRecording() {\n if (!this.isConnected) {\n throw new Error('Not connected to voice server');\n }\n \n try {\n // Send start continuous mode message\n this.webSocketManager.sendMessage({\n t: 'start_continuous_mode',\n ttpId: this.generateTtpId(),\n voice: this.config.voice,\n language: this.config.language\n });\n \n // Start audio recording\n await this.audioRecorder.start();\n return true;\n } catch (error) {\n console.error('❌ VoiceSDK: Failed to start recording:', error);\n this.emit('error', error);\n return false;\n }\n }\n \n /**\n * Stop voice recording and streaming\n */\n async stopRecording() {\n if (!this.isRecording) {\n return;\n }\n \n try {\n // Send stop continuous mode message\n this.webSocketManager.sendMessage({\n t: 'stop_continuous_mode',\n ttpId: this.generateTtpId()\n });\n \n // Stop audio recording\n await this.audioRecorder.stop();\n \n // Stop audio playback immediately when stopping recording\n this.audioPlayer.stopImmediate();\n \n return true;\n } catch (error) {\n this.emit('error', error);\n return false;\n }\n }\n \n /**\n * Toggle recording state\n */\n async toggleRecording() {\n if (this.isRecording) {\n return await this.stopRecording();\n } else {\n return await this.startRecording();\n }\n }\n \n /**\n * Stop audio playback immediately (for barge-in scenarios)\n */\n stopAudioPlayback() {\n this.audioPlayer.stopImmediate();\n }\n \n /**\n * Handle barge-in (user starts speaking while audio is playing)\n */\n async handleBargeIn() {\n // Stop current audio playback immediately\n this.stopAudioPlayback();\n \n // If not already recording, start recording\n if (!this.isRecording) {\n await this.startRecording();\n }\n }\n \n /**\n * Get current connection status\n */\n getStatus() {\n return {\n isConnected: this.isConnected,\n isRecording: this.isRecording,\n isPlaying: this.isPlaying\n };\n }\n \n /**\n * Update configuration\n */\n updateConfig(newConfig) {\n this.config = { ...this.config, ...newConfig };\n }\n \n /**\n * Generate unique TTP ID\n */\n generateTtpId() {\n return 'sdk_' + Math.random().toString(36).substr(2, 9) + '_' + Date.now();\n }\n\n /**\n * Send hello message with appropriate authentication\n */\n sendHelloMessage() {\n if (!this.isConnected) {\n console.warn('VoiceSDK: Cannot send hello message - not connected');\n return;\n }\n\n const helloMessage = {\n t: \"hello\"\n };\n\n // Use app ID for authentication (preferred method)\n if (this.config.appId) {\n helloMessage.appId = this.config.appId;\n } else if (this.config.ttpId) {\n // Fallback to custom TTP ID if app ID not provided\n helloMessage.ttpId = this.config.ttpId;\n } else {\n // Generate TTP ID as last resort\n helloMessage.ttpId = this.generateTtpId();\n }\n\n // Note: agentId is now sent as query parameter in WebSocket URL, not in hello message\n\n try {\n this.webSocketManager.sendMessage(helloMessage);\n } catch (error) {\n console.error('VoiceSDK: Failed to send hello message:', error);\n this.emit('error', error);\n }\n }\n \n /**\n * Cleanup resources\n */\n destroy() {\n if (this.isDestroyed) {\n return; // Prevent multiple destroy calls\n }\n \n // Disconnect first, before setting isDestroyed\n this.disconnect();\n \n this.isDestroyed = true;\n this.audioRecorder.destroy();\n this.audioPlayer.destroy();\n this.removeAllListeners();\n }\n}\n","/**\n * TextChatSDK - Single-shot WebSocket per message\n * - Opens a new WS to /chat for each message, streams chunks, emits events, then closes\n * - Persists conversationId locally to allow continuity across messages\n */\nimport EventEmitter from './EventEmitter.js';\n\nexport default class TextChatSDK extends EventEmitter {\n constructor(config = {}) {\n super();\n \n const scriptConfig = this.readScriptTagConfig();\n\n this.config = {\n // Prefer SockJS native upgrade endpoint directly to avoid an initial failed attempt on /chat\n baseWsUrl: 'wss://backend.talktopc.com/chat/websocket',\n appId: config.appId || scriptConfig.appId,\n agentId: config.agentId || scriptConfig.agentId,\n conversationId: config.conversationId !== undefined ? config.conversationId : this.getPersistedConversationId(),\n // Optional testing override: force a specific conversationId for all sends\n forceConversationId: config.forceConversationId,\n // queueing behavior\n queue: [],\n inFlight: false,\n ...config\n };\n \n this.fullResponseBuffer = '';\n }\n\n // Read appId/agentId from the embedding script tag data attributes\n readScriptTagConfig() {\n try {\n const scripts = Array.from(document.getElementsByTagName('script'));\n const sdkScript = scripts.reverse().find(s => (s.dataset && (s.dataset.appId || s.dataset.agentId)) || (s.src && s.src.includes('agent-widget')));\n if (!sdkScript) return {};\n return {\n appId: sdkScript.dataset.appId,\n agentId: sdkScript.dataset.agentId\n };\n } catch (_) {\n return {};\n }\n }\n\n // Build WS URL with query params\n buildWebSocketUrl(base = this.config.baseWsUrl) {\n const params = new URLSearchParams();\n if (this.config.appId) params.append('appId', this.config.appId);\n if (this.config.agentId) params.append('agentId', this.config.agentId);\n if (this.config.conversationId) params.append('conversationId', this.config.conversationId);\n return `${base}?${params.toString()}`;\n }\n\n // Public API: sendMessage opens a fresh WS, streams, then closes\n async sendMessage(text) {\n return new Promise((resolve, reject) => {\n if (!text || !text.trim()) {\n reject(new Error('Message is empty'));\n return;\n }\n if (!this.config.appId || !this.config.agentId) {\n reject(new Error('Missing appId or agentId'));\n return;\n }\n \n const task = { text, resolve, reject };\n if (this.config.inFlight) {\n this.config.queue.push(task);\n } else {\n this.executeTask(task);\n }\n });\n }\n\n executeTask(task) {\n this.config.inFlight = true;\n this.fullResponseBuffer = '';\n\n // If conversationId is missing in memory, try to hydrate from localStorage before sending\n if (!this.config.conversationId) {\n const persisted = this.getPersistedConversationId();\n if (persisted) {\n this.config.conversationId = persisted;\n console.log('🔍 TextChatSDK hydrated conversationId from storage:', persisted);\n }\n }\n\n const primaryUrl = this.buildWebSocketUrl(this.config.baseWsUrl);\n const fallbackBase = this.config.baseWsUrl.endsWith('/websocket')\n ? this.config.baseWsUrl.replace(/\\/websocket$/, '')\n : `${this.config.baseWsUrl}/websocket`;\n const fallbackUrl = this.buildWebSocketUrl(fallbackBase);\n let triedFallback = false;\n\n let messageSent = false;\n let helloWaitTimer = null;\n\n const sendPayload = (socket) => {\n if (messageSent) return;\n try {\n const payload = { message: task.text };\n const effectiveConvId = this.config.forceConversationId || this.config.conversationId;\n if (effectiveConvId) {\n payload.conversationId = effectiveConvId;\n // Persist and keep in-memory if coming from a forced value (test mode)\n if (this.config.forceConversationId && !this.config.conversationId) {\n this.config.conversationId = effectiveConvId;\n this.persistConversationId(effectiveConvId);\n }\n }\n console.log('🔍 TextChatSDK sending payload:', payload, 'conversationId in config:', this.config.conversationId);\n socket.send(JSON.stringify(payload));\n messageSent = true;\n } catch (e) {\n task.reject(e);\n this.emit('error', e);\n try { socket.close(); } catch (_) {}\n }\n };\n\n const handleOpen = (socket) => () => {\n // Wait briefly for server 'hello' to capture conversationId before first send\n // If no hello within 200ms, send anyway\n if (!this.config.conversationId) {\n helloWaitTimer = setTimeout(() => sendPayload(socket), 200);\n } else {\n sendPayload(socket);\n }\n };\n\n const handleMessage = (socket) => (evt) => {\n try {\n try { console.log('🔎 [TextChatSDK] WS <= raw:', evt.data); } catch (_) {}\n const data = JSON.parse(evt.data);\n try { console.log('🔎 [TextChatSDK] WS <= parsed:', data); } catch (_) {}\n // Capture conversationId handshake from server\n if (data.type === 'hello' && data.conversationId) {\n // Persist the conversation id for subsequent messages\n console.log('🔍 TextChatSDK received conversationId:', data.conversationId);\n this.config.conversationId = data.conversationId;\n this.persistConversationId(data.conversationId);\n this.emit && this.emit('conversationIdChanged', data.conversationId);\n // If we were waiting to send the first message, send it now\n if (!messageSent && socket && socket.readyState === 1) {\n if (helloWaitTimer) { try { clearTimeout(helloWaitTimer); } catch (_) {} }\n sendPayload(socket);\n }\n return; // nothing else to do for handshake\n }\n // Fallback: capture conversationId if present on any message shape\n if (!this.config.conversationId && data.conversationId) {\n console.log('🔍 TextChatSDK captured conversationId from message:', data.conversationId);\n this.config.conversationId = data.conversationId;\n this.persistConversationId(data.conversationId);\n }\n if (data.type === 'chunk' && typeof data.content === 'string') {\n this.fullResponseBuffer += data.content;\n this.emit('chunk', data.content);\n } else if (data.type === 'done') {\n // If server sent a final text in the done payload, capture it for non-streaming backends\n try {\n const finalText = data.text || data.content || data.answer || data.message || '';\n if (finalText && !this.fullResponseBuffer) {\n this.fullResponseBuffer = finalText;\n }\n } catch (_) {}\n // Persist conversationId if provided on completion (fallback when hello was missed)\n if (!this.config.conversationId && data.conversationId) {\n console.log('🔍 TextChatSDK captured conversationId from done:', data.conversationId);\n this.config.conversationId = data.conversationId;\n }\n this.persistConversationId(this.config.conversationId);\n this.emit('done', { text: this.fullResponseBuffer });\n task.resolve({ conversationId: this.config.conversationId, fullText: this.fullResponseBuffer });\n try { socket.close(); } catch (_) {}\n } else if (data.type === 'error') {\n const err = new Error(data.message || 'Server error');\n this.emit('error', err);\n task.reject(err);\n try { socket.close(); } catch (_) {}\n }\n } catch (e) {\n // Non-JSON or parse error; ignore or surface\n }\n };\n\n const handleError = (socket) => (e) => {\n // Try alternate path once: toggle /websocket suffix\n if (!triedFallback) {\n triedFallback = true;\n try { socket.close(); } catch (_) {}\n const fb = new WebSocket(fallbackUrl);\n fb.onopen = handleOpen(fb);\n fb.onmessage = handleMessage(fb);\n fb.onerror = (err) => {\n this.emit('error', err);\n task.reject(err);\n };\n fb.onclose = handleClose;\n return;\n }\n this.emit('error', e);\n task.reject(e);\n };\n\n const handleClose = () => {\n this.config.inFlight = false;\n this.drainQueue();\n };\n\n const ws = new WebSocket(primaryUrl);\n ws.onopen = handleOpen(ws);\n ws.onmessage = handleMessage(ws);\n ws.onerror = handleError(ws);\n ws.onclose = handleClose;\n }\n\n drainQueue() {\n if (this.config.queue.length === 0 || this.config.inFlight) return;\n const next = this.config.queue.shift();\n this.executeTask(next);\n }\n\n persistConversationId(conversationId) {\n try {\n if (conversationId) localStorage.setItem('ttp_text_chat_conversation_id', conversationId);\n } catch (_) {}\n }\n\n getPersistedConversationId() {\n try {\n return localStorage.getItem('ttp_text_chat_conversation_id') || null;\n } catch (_) {\n return null;\n }\n }\n\n updateConfig(newConfig) {\n this.config = { ...this.config, ...newConfig };\n }\n \n destroy() {\n this.config.queue = [];\n this.config.inFlight = false;\n this.removeAllListeners();\n }\n}\n\n","/**\n * VoiceButton - React component for voice interaction\n */\nimport React, { useState, useEffect, useRef } from 'react';\nimport VoiceSDK from '../core/VoiceSDK.js';\n\nconst VoiceButton = ({ \n websocketUrl,\n agentId, // Optional - for direct agent access (unsecured method)\n voice = 'default',\n language = 'en',\n autoReconnect = true,\n onConnected,\n onDisconnected,\n onRecordingStarted,\n onRecordingStopped,\n onPlaybackStarted,\n onPlaybackStopped,\n onError,\n onMessage,\n onBargeIn,\n onStopPlaying,\n className = '',\n style = {},\n children\n}) => {\n const [isConnected, setIsConnected] = useState(false);\n const [isRecording, setIsRecording] = useState(false);\n const [isPlaying, setIsPlaying] = useState(false);\n const [connectionStatus, setConnectionStatus] = useState('Disconnected');\n \n const voiceSDKRef = useRef(null);\n \n // Initialize VoiceSDK\n useEffect(() => {\n console.log(`🎙️ VoiceButton: Creating VoiceSDK instance for ${websocketUrl}`);\n \n // Clean up existing instance if any\n if (voiceSDKRef.current) {\n console.log(`🎙️ VoiceButton: Destroying existing VoiceSDK instance`);\n voiceSDKRef.current.destroy();\n voiceSDKRef.current = null;\n }\n \n const voiceSDK = new VoiceSDK({\n websocketUrl,\n agentId, // Pass through agentId if provided\n voice,\n language,\n autoReconnect\n });\n \n // Setup event listeners\n voiceSDK.on('connected', () => {\n setIsConnected(true);\n setConnectionStatus('Connected');\n onConnected?.();\n });\n \n voiceSDK.on('disconnected', () => {\n setIsConnected(false);\n setConnectionStatus('Disconnected');\n onDisconnected?.();\n });\n \n voiceSDK.on('recordingStarted', () => {\n setIsRecording(true);\n onRecordingStarted?.();\n });\n \n voiceSDK.on('recordingStopped', () => {\n setIsRecording(false);\n onRecordingStopped?.();\n });\n \n voiceSDK.on('playbackStarted', () => {\n setIsPlaying(true);\n onPlaybackStarted?.();\n });\n \n voiceSDK.on('playbackStopped', () => {\n setIsPlaying(false);\n onPlaybackStopped?.();\n });\n \n voiceSDK.on('error', (error) => {\n onError?.(error);\n });\n \n voiceSDK.on('message', (message) => {\n onMessage?.(message);\n });\n \n voiceSDK.on('bargeIn', (message) => {\n onBargeIn?.(message);\n });\n \n voiceSDK.on('stopPlaying', (message) => {\n onStopPlaying?.(message);\n });\n \n voiceSDKRef.current = voiceSDK;\n \n // Auto-connect\n voiceSDK.connect();\n \n // Cleanup on unmount\n return () => {\n console.log(`🎙️ VoiceButton: Cleaning up VoiceSDK instance for ${websocketUrl}`);\n if (voiceSDKRef.current) {\n voiceSDKRef.current.destroy();\n voiceSDKRef.current = null;\n }\n };\n }, [websocketUrl, agentId, voice, language]);\n \n // Handle button click\n const handleClick = async () => {\n if (!voiceSDKRef.current) return;\n \n try {\n await voiceSDKRef.current.toggleRecording();\n } catch (error) {\n console.error('Error toggling recording:', error);\n }\n };\n \n // Default button content\n const defaultContent = (\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n <div style={{ fontSize: '20px' }}>\n {isRecording ? '🔴' : '🎤'}\n </div>\n <div>\n {isRecording ? 'Stop Listening' : 'Start Listening'}\n </div>\n </div>\n );\n \n return (\n <button\n className={`voice-button ${isRecording ? 'recording' : ''} ${className}`}\n style={{\n padding: '12px 24px',\n border: 'none',\n borderRadius: '8px',\n backgroundColor: isRecording ? '#dc3545' : '#007bff',\n color: 'white',\n cursor: 'pointer',\n fontSize: '16px',\n fontWeight: '500',\n transition: 'all 0.2s ease',\n ...style\n }}\n onClick={handleClick}\n disabled={!isConnected}\n >\n {children || defaultContent}\n </button>\n );\n};\n\nexport default VoiceButton;\n","/**\n * VoiceButton - Vanilla JavaScript voice button\n */\nimport VoiceSDK from '../core/VoiceSDK.js';\n\nexport default class VoiceButton {\n constructor(options = {}) {\n this.options = {\n websocketUrl: options.websocketUrl || 'wss://speech.talktopc.com/ws/conv',\n agentId: options.agentId, // Optional - for direct agent access (unsecured method)\n voice: options.voice || 'default',\n language: options.language || 'en',\n container: options.container || document.body,\n buttonText: options.buttonText || 'Start Listening',\n buttonClass: options.buttonClass || 'voice-button',\n ...options\n };\n \n this.isConnected = false;\n this.isRecording = false;\n this.isPlaying = false;\n \n this.voiceSDK = new VoiceSDK({\n websocketUrl: this.options.websocketUrl,\n agentId: this.options.agentId, // Pass through agentId if provided\n voice: this.options.voice,\n language: this.options.language\n });\n \n this.setupEventListeners();\n this.createButton();\n this.connect();\n }\n \n /**\n * Setup event listeners\n */\n setupEventListeners() {\n this.voiceSDK.on('connected', () => {\n this.isConnected = true;\n this.updateButton();\n this.options.onConnected?.();\n });\n \n this.voiceSDK.on('disconnected', () => {\n this.isConnected = false;\n this.updateButton();\n this.options.onDisconnected?.();\n });\n \n this.voiceSDK.on('recordingStarted', () => {\n this.isRecording = true;\n this.updateButton();\n this.options.onRecordingStarted?.();\n });\n \n this.voiceSDK.on('recordingStopped', () => {\n this.isRecording = false;\n this.updateButton();\n this.options.onRecordingStopped?.();\n });\n \n this.voiceSDK.on('playbackStarted', () => {\n this.isPlaying = true;\n this.options.onPlaybackStarted?.();\n });\n \n this.voiceSDK.on('playbackStopped', () => {\n this.isPlaying = false;\n this.options.onPlaybackStopped?.();\n });\n \n this.voiceSDK.on('error', (error) => {\n this.options.onError?.(error);\n });\n \n this.voiceSDK.on('message', (message) => {\n this.options.onMessage?.(message);\n });\n \n this.voiceSDK.on('bargeIn', (message) => {\n this.options.onBargeIn?.(message);\n });\n \n this.voiceSDK.on('stopPlaying', (message) => {\n this.options.onStopPlaying?.(message);\n });\n }\n \n /**\n * Create the button element\n */\n createButton() {\n this.button = document.createElement('button');\n this.button.className = this.options.buttonClass;\n this.button.style.cssText = `\n padding: 12px 24px;\n border: none;\n border-radius: 8px;\n background-color: #6c757d;\n color: white;\n cursor: pointer;\n font-size: 16px;\n font-weight: 500;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n `;\n \n this.button.addEventListener('click', () => this.toggleRecording());\n this.options.container.appendChild(this.button);\n \n this.updateButton();\n }\n \n /**\n * Update button appearance and state\n */\n updateButton() {\n if (!this.button) return;\n \n const icon = this.isRecording ? '🔴' : '🎤';\n const text = this.isRecording ? 'Stop Listening' : 'Start Listening';\n \n this.button.innerHTML = `\n <span style=\"font-size: 20px;\">${icon}</span>\n <span>${text}</span>\n `;\n \n this.button.disabled = !this.isConnected;\n this.button.style.backgroundColor = this.isRecording ? '#dc3545' : \n this.isConnected ? '#007bff' : '#6c757d';\n }\n \n /**\n * Connect to voice server\n */\n async connect() {\n try {\n await this.voiceSDK.connect();\n } catch (error) {\n console.error('Failed to connect:', error);\n }\n }\n \n /**\n * Toggle recording\n */\n async toggleRecording() {\n if (!this.voiceSDK) return;\n \n try {\n await this.voiceSDK.toggleRecording();\n } catch (error) {\n console.error('Error toggling recording:', error);\n }\n }\n \n /**\n * Get current status\n */\n getStatus() {\n return {\n isConnected: this.isConnected,\n isRecording: this.isRecording,\n isPlaying: this.isPlaying\n };\n }\n \n /**\n * Update configuration\n */\n updateConfig(newConfig) {\n this.voiceSDK.updateConfig(newConfig);\n }\n \n /**\n * Destroy the button and cleanup\n */\n destroy() {\n if (this.button && this.button.parentNode) {\n this.button.parentNode.removeChild(this.button);\n }\n \n if (this.voiceSDK) {\n this.voiceSDK.destroy();\n }\n }\n}\n","/**\n * Legacy AgentSDK - Backward Compatibility Layer\n * \n * This maintains the original AgentSDK API while using the new VoiceSDK internally.\n * This ensures existing integrations continue to work without changes.\n */\n\nimport { VoiceSDK } from '../index.js';\n\nexport class AgentSDK {\n constructor(config) {\n console.log('🚀 AgentSDK v2.1.8 initialized with config:', config);\n this.config = config;\n this.voiceSDK = null;\n this.isConnected = false;\n this.isListening = false;\n \n // Legacy callback properties\n this.onConnected = () => {};\n this.onDisconnected = () => {};\n this.onError = (error) => console.error('SDK Error:', error);\n this.onTranscript = (text) => {};\n this.onAgentSpeaking = (isStart) => {};\n }\n\n async connect(signedUrl) {\n try {\n if (!signedUrl) {\n throw new Error('signedUrl is required');\n }\n \n // Clean up existing connection if any\n if (this.voiceSDK) {\n console.log('🔌 AgentSDK: Cleaning up existing connection');\n this.voiceSDK.destroy();\n this.voiceSDK = null;\n }\n \n // Create VoiceSDK instance\n this.voiceSDK = new VoiceSDK({\n websocketUrl: signedUrl,\n autoReconnect: false,\n agentId: this.config.agentId,\n appId: this.config.appId,\n language: this.config.language || 'en'\n });\n \n // Set up event handlers to map to legacy callbacks\n this.voiceSDK.on('connected', () => {\n this.isConnected = true;\n this.onConnected();\n });\n \n this.voiceSDK.on('disconnected', () => {\n this.isConnected = false;\n this.onDisconnected();\n });\n \n this.voiceSDK.on('error', (error) => {\n this.onError(error);\n });\n \n this.voiceSDK.on('message', (message) => {\n this.handleWebSocketMessage(message);\n });\n \n this.voiceSDK.on('recordingStarted', () => {\n this.isListening = true;\n });\n \n this.voiceSDK.on('recordingStopped', () => {\n this.isListening = false;\n });\n \n this.voiceSDK.on('playbackStarted', () => {\n this.onAgentSpeaking(true);\n });\n \n this.voiceSDK.on('playbackStopped', () => {\n this.onAgentSpeaking(false);\n });\n \n // Connect using VoiceSDK\n await this.voiceSDK.connect();\n \n } catch (error) {\n this.onError(error);\n throw error;\n }\n }\n\n handleWebSocketMessage(message) {\n // Map new message format to legacy format\n switch (message.type) {\n case 'connected':\n console.log('Session started successfully');\n break;\n \n case 'user_transcript':\n this.onTranscript(message.user_transcription || message.text);\n break;\n \n case 'agent_response':\n // Handle agent text response\n break;\n \n case 'barge_in':\n // Handle barge-in\n break;\n \n case 'stop_playing':\n // Handle stop playing\n break;\n \n case 'error':\n this.onError(new Error(message.message));\n break;\n }\n }\n\n async startListening() {\n console.log('🎤 AgentSDK: startListening() called');\n if (this.voiceSDK) {\n try {\n console.log('🎤 AgentSDK: Starting recording...');\n await this.voiceSDK.startRecording();\n console.log('✅ AgentSDK: Recording started successfully');\n } catch (error) {\n console.error('❌ AgentSDK: Failed to start recording:', error);\n throw error;\n }\n } else {\n console.error('❌ AgentSDK: No voiceSDK instance available');\n throw new Error('No voiceSDK instance available');\n }\n }\n\n stopListening() {\n if (this.voiceSDK) {\n this.voiceSDK.stopRecording();\n }\n }\n\n updateVariables(variables) {\n if (this.voiceSDK && this.isConnected) {\n // Send variables update message\n this.voiceSDK.webSocketManager.sendMessage({\n t: 'update_variables',\n variables\n });\n }\n }\n\n disconnect() {\n if (this.voiceSDK) {\n this.voiceSDK.destroy();\n this.voiceSDK = null;\n }\n this.isConnected = false;\n this.isListening = false;\n }\n}\n\n// ============================================\n// WIDGET - Pre-built UI using the SDK\n// ============================================\n\nexport class AgentWidget {\n constructor(config = {}) {\n // Merge user config with defaults (backward compatible with simple config)\n this.config = this.mergeWithDefaults(config);\n this.sdk = new AgentSDK(this.config);\n this.isOpen = false;\n this.isActive = false;\n \n this.setupEventHandlers();\n this.createWidget();\n \n // Start open if configured (immediately)\n if (this.config.behavior.startOpen || this.config.behavior.autoOpen) {\n const panel = document.getElementById('agent-panel');\n if (panel) {\n this.isOpen = true;\n panel.classList.add('open');\n }\n }\n }\n\n /**\n * Merge user configuration with defaults\n * Supports both simple config (backward compatible) and advanced config\n */\n mergeWithDefaults(userConfig) {\n // Handle legacy position string format\n let positionConfig = userConfig.position || 'bottom-right';\n if (typeof positionConfig === 'string') {\n // Convert legacy format 'bottom-right' to new format\n const parts = positionConfig.split('-');\n positionConfig = {\n vertical: parts[0] || 'bottom',\n horizontal: parts[1] || 'right',\n offset: userConfig.positionOffset || { x: 20, y: 20 }\n };\n }\n\n // Handle legacy primaryColor\n const primaryColor = userConfig.primaryColor || userConfig.button?.primaryColor || '#4F46E5';\n\n return {\n // Required (agentId is required, appId is optional)\n agentId: userConfig.agentId,\n appId: userConfig.appId,\n getSessionUrl: userConfig.getSessionUrl, // Optional - will auto-construct URL if omitted\n websocketUrl: userConfig.websocketUrl, // Optional - defaults to speech.talktopc.com\n demo: userConfig.demo !== false, // Optional - defaults to true\n direction: userConfig.direction || 'ltr', // Optional - text direction: 'ltr' or 'rtl'\n \n // Icon/Image Configuration\n icon: {\n type: userConfig.icon?.type || 'microphone', // 'microphone', 'custom', 'emoji', 'text'\n customImage: userConfig.icon?.customImage || null,\n emoji: userConfig.icon?.emoji || '🎤',\n text: userConfig.icon?.text || 'AI',\n size: userConfig.icon?.size || 'medium', // 'small', 'medium', 'large', 'xl'\n // backgroundColor is deprecated - use button.backgroundColor instead\n backgroundColor: userConfig.icon?.backgroundColor || null,\n ...userConfig.icon\n },\n \n // Positioning Configuration (supports both object and legacy string)\n position: {\n vertical: positionConfig.vertical || 'bottom',\n horizontal: positionConfig.horizontal || 'right',\n offset: positionConfig.offset || { x: 20, y: 20 },\n ...(typeof userConfig.position === 'object' ? userConfig.position : {})\n },\n \n // Button Configuration\n button: {\n size: userConfig.button?.size || 'medium',\n shape: userConfig.button?.shape || 'circle',\n // Floating button colors (main button)\n backgroundColor: userConfig.button?.backgroundColor || userConfig.icon?.backgroundColor || primaryColor,\n hoverColor: userConfig.button?.hoverColor || '#7C3AED',\n shadow: userConfig.button?.shadow !== false,\n shadowColor: userConfig.button?.shadowColor || 'rgba(0,0,0,0.15)',\n // Legacy support - map to backgroundColor\n primaryColor: userConfig.button?.backgroundColor || userConfig.icon?.backgroundColor || primaryColor,\n ...userConfig.button\n },\n \n // Panel Configuration\n panel: {\n width: userConfig.panel?.width || 350,\n height: userConfig.panel?.height || 500,\n borderRadius: userConfig.panel?.borderRadius || 12,\n backgroundColor: userConfig.panel?.backgroundColor || '#FFFFFF',\n backdropFilter: userConfig.panel?.backdropFilter || null,\n border: userConfig.panel?.border || '1px solid rgba(0,0,0,0.1)',\n // Mic button colors (inside panel)\n micButtonColor: userConfig.panel?.micButtonColor || primaryColor,\n micButtonActiveColor: userConfig.panel?.micButtonActiveColor || '#EF4444',\n // Mic button hint text (below button)\n // If text is empty or not provided, hint will not be shown\n micButtonHint: {\n text: userConfig.panel?.micButtonHint?.text || 'Click the button to start voice conversation',\n color: userConfig.panel?.micButtonHint?.color || '#6B7280',\n fontSize: userConfig.panel?.micButtonHint?.fontSize || '12px',\n ...userConfig.panel?.micButtonHint\n },\n ...userConfig.panel\n },\n \n // Header Configuration (top of panel)\n header: {\n title: userConfig.header?.title || 'Voice Assistant',\n showTitle: userConfig.header?.showTitle !== false,\n backgroundColor: userConfig.header?.backgroundColor || userConfig.button?.backgroundColor || primaryColor, // Header/top background color\n textColor: userConfig.header?.textColor || '#FFFFFF',\n showCloseButton: userConfig.header?.showCloseButton !== false,\n ...userConfig.header\n },\n \n // Messages Configuration\n messages: {\n userBackgroundColor: userConfig.messages?.userBackgroundColor || '#E5E7EB',\n agentBackgroundColor: userConfig.messages?.agentBackgroundColor || '#F3F4F6',\n systemBackgroundColor: userConfig.messages?.systemBackgroundColor || '#DCFCE7',\n errorBackgroundColor: userConfig.messages?.errorBackgroundColor || '#FEE2E2',\n textColor: userConfig.messages?.textColor || '#1F2937',\n fontSize: userConfig.messages?.fontSize || '14px',\n borderRadius: userConfig.messages?.borderRadius || 8,\n ...userConfig.messages\n },\n \n // Animation Configuration\n animation: {\n enableHover: userConfig.animation?.enableHover !== false,\n enablePulse: userConfig.animation?.enablePulse !== false,\n enableSlide: userConfig.animation?.enableSlide !== false,\n duration: userConfig.animation?.duration || 0.3,\n ...userConfig.animation\n },\n \n // Behavior Configuration\n behavior: {\n autoOpen: userConfig.behavior?.autoOpen || false,\n startOpen: userConfig.behavior?.startOpen || false,\n hidden: userConfig.behavior?.hidden || false,\n autoConnect: userConfig.behavior?.autoConnect || false,\n showWelcomeMessage: userConfig.behavior?.showWelcomeMessage !== false,\n welcomeMessage: userConfig.behavior?.welcomeMessage || 'Hello! How can I help you today?',\n ...userConfig.behavior\n },\n \n // Accessibility Configuration\n accessibility: {\n ariaLabel: userConfig.accessibility?.ariaLabel || 'Voice Assistant',\n ariaDescription: userConfig.accessibility?.ariaDescription || 'Click to open voice assistant',\n keyboardNavigation: userConfig.accessibility?.keyboardNavigation !== false,\n ...userConfig.accessibility\n },\n \n // Custom CSS\n customStyles: userConfig.customStyles || '',\n \n // Variables for the agent\n variables: userConfig.variables || {},\n \n // Legacy support (for backward compatibility)\n primaryColor: primaryColor,\n // Keep position string for backward compatibility\n ...(typeof userConfig.position === 'string' ? { positionString: userConfig.position } : {})\n };\n }\n\n setupEventHandlers() {\n this.sdk.onConnected = () => {\n this.updateStatus('connected');\n if (this.config.behavior.showWelcomeMessage) {\n this.addMessage('system', this.config.behavior.welcomeMessage);\n }\n };\n\n this.sdk.onDisconnected = () => {\n this.updateStatus('disconnected');\n this.isActive = false;\n this.updateMicButtonState(false);\n this.showError('Conversation ended. Click to start a new conversation.');\n };\n\n this.sdk.onError = (error) => {\n this.showError(error.message);\n };\n\n this.sdk.onTranscript = (text) => {\n this.addMessage('user', text);\n };\n\n this.sdk.onAgentSpeaking = (isStart) => {\n if (isStart) {\n this.showAgentThinking();\n } else {\n this.hideAgentThinking();\n }\n };\n }\n\n createWidget() {\n const widget = document.createElement('div');\n widget.id = 'agent-widget';\n widget.innerHTML = this.generateWidgetHTML();\n \n document.body.appendChild(widget);\n \n this.setupWidgetEvents();\n \n // Ensure initial open state if configured\n if (this.config.behavior.startOpen || this.config.behavior.autoOpen) {\n const panel = document.getElementById('agent-panel');\n if (panel) {\n this.isOpen = true;\n panel.classList.add('open');\n }\n }\n }\n\n generateWidgetHTML() {\n const pos = this.config.position;\n const btn = this.config.button;\n const icon = this.config.icon;\n const panel = this.config.panel;\n const header = this.config.header;\n const anim = this.config.animation;\n\n // Calculate button size\n const buttonSizes = {\n small: 50,\n medium: 60,\n large: 70,\n xl: 80\n };\n const buttonSize = buttonSizes[btn.size] || 60;\n\n // Calculate icon size\n const iconSizes = {\n small: 20,\n medium: 28,\n large: 36,\n xl: 44\n };\n const iconSize = iconSizes[icon.size] || 28;\n\n // Generate position styles\n const positionStyles = this.generatePositionStyles();\n\n // Generate icon HTML\n const iconHTML = this.generateIconHTML(iconSize);\n\n return `\n <style>\n ${this.generateCSS(positionStyles, buttonSize, iconSize)}\n ${this.config.customStyles}\n </style>\n \n ${this.config.behavior.hidden ? '' : `\n <button id=\"agent-button\" \n aria-label=\"${this.config.accessibility.ariaLabel}\"\n aria-description=\"${this.config.accessibility.ariaDescription}\">\n ${iconHTML}\n </button>\n `}\n \n <div id=\"agent-panel\">\n ${header.showTitle ? `\n <div id=\"agent-header\" style=\"direction: ${this.config.direction};\">\n ${this.config.direction === 'rtl' ? `\n ${header.showCloseButton ? '<button id=\"agent-close\">×</button>' : ''}\n <h3 style=\"margin: 0; color: ${header.textColor};\">${header.title}</h3>\n ` : `\n <h3 style=\"margin: 0; color: ${header.textColor};\">${header.title}</h3>\n ${header.showCloseButton ? '<button id=\"agent-close\">×</button>' : ''}\n `}\n </div>\n ` : ''}\n \n <div id=\"agent-messages\"></div>\n \n <div id=\"agent-controls\">\n <div style=\"display: flex; flex-direction: column; align-items: center; gap: 8px;\">\n <button id=\"agent-mic-button\" \n aria-label=\"Start/Stop Voice Recording\">\n ${iconHTML}\n </button>\n ${panel.micButtonHint.text && panel.micButtonHint.text.trim() ? `\n <div id=\"agent-mic-hint\" style=\"color: ${panel.micButtonHint.color}; font-size: ${panel.micButtonHint.fontSize}; text-align: center; max-width: 200px;\">\n ${panel.micButtonHint.text}\n </div>\n ` : ''}\n </div>\n </div>\n </div>\n `;\n }\n\n generatePositionStyles() {\n const pos = this.config.position;\n const offset = pos.offset || { x: 20, y: 20 };\n \n let styles = '';\n \n // Vertical positioning\n if (pos.vertical === 'top') {\n styles += `top: ${offset.y}px;`;\n } else if (pos.vertical === 'bottom') {\n styles += `bottom: ${offset.y}px;`;\n } else if (pos.vertical === 'center') {\n styles += `top: 50%; transform: translateY(-50%);`;\n }\n \n // Horizontal positioning\n if (pos.horizontal === 'left') {\n styles += `left: ${offset.x}px;`;\n } else if (pos.horizontal === 'right') {\n styles += `right: ${offset.x}px;`;\n } else if (pos.horizontal === 'center') {\n styles += `left: 50%; transform: translateX(-50%);`;\n }\n \n return styles;\n }\n\n generateIconHTML(size) {\n const icon = this.config.icon;\n \n switch (icon.type) {\n case 'custom':\n return `<img src=\"${icon.customImage}\" alt=\"Voice Assistant\" style=\"width: ${size}px; height: ${size}px; object-fit: contain;\" />`;\n \n case 'emoji':\n return `<span style=\"font-size: ${size}px; line-height: 1;\">${icon.emoji}</span>`;\n \n case 'text':\n return `<span style=\"font-size: ${Math.floor(size * 0.6)}px; font-weight: bold; color: white;\">${icon.text}</span>`;\n \n case 'microphone':\n default:\n return `<svg viewBox=\"0 0 24 24\" style=\"width: ${size}px; height: ${size}px; fill: white;\">\n <path d=\"M12 14c1.66 0 3-1.34 3-3V5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3z\"/>\n <path d=\"M17 11c0 2.76-2.24 5-5 5s-5-2.24-5-5H5c0 3.53 2.61 6.43 6 6.92V21h2v-3.08c3.39-.49 6-3.39 6-6.92h-2z\"/>\n </svg>`;\n }\n }\n\n generateCSS(positionStyles, buttonSize, iconSize) {\n const btn = this.config.button;\n const panel = this.config.panel;\n const header = this.config.header;\n const messages = this.config.messages;\n const anim = this.config.animation;\n \n // Color references for clarity\n const floatingButtonColor = btn.backgroundColor || btn.primaryColor; // Floating button (main)\n const headerColor = header.backgroundColor; // Header/top of panel\n const micButtonColor = panel.micButtonColor || btn.primaryColor; // Mic button in panel\n const micButtonActiveColor = panel.micButtonActiveColor || '#EF4444'; // Mic button active state\n\n return `\n #agent-widget {\n position: fixed;\n ${positionStyles}\n z-index: 10000;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n will-change: transform;\n }\n \n @media (max-width: 768px) {\n #agent-widget {\n ${this.config.position.horizontal === 'right' || (typeof this.config.position === 'string' && this.config.position.includes('right')) ? 'right: 10px; left: auto;' : 'left: 10px; right: auto;'}\n ${this.config.position.vertical === 'bottom' || (typeof this.config.position === 'string' && this.config.position.includes('bottom')) ? 'bottom: 10px; top: auto;' : this.config.position.vertical === 'top' || (typeof this.config.position === 'string' && this.config.position.includes('top')) ? 'top: 10px; bottom: auto;' : ''}\n }\n }\n \n @media (max-width: 480px) {\n #agent-widget {\n ${this.config.position.horizontal === 'right' || (typeof this.config.position === 'string' && this.config.position.includes('right')) ? 'right: 5px; left: auto;' : 'left: 5px; right: auto;'}\n ${this.config.position.vertical === 'bottom' || (typeof this.config.position === 'string' && this.config.position.includes('bottom')) ? 'bottom: 5px; top: auto;' : this.config.position.vertical === 'top' || (typeof this.config.position === 'string' && this.config.position.includes('top')) ? 'top: 5px; bottom: auto;' : ''}\n }\n }\n \n #agent-button {\n width: ${buttonSize}px;\n height: ${buttonSize}px;\n border-radius: ${btn.shape === 'circle' ? '50%' : btn.shape === 'square' ? '0' : '12px'};\n background: ${floatingButtonColor};\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all ${anim.duration}s ease;\n ${btn.shadow ? `box-shadow: 0 4px 12px ${btn.shadowColor};` : ''}\n touch-action: manipulation;\n -webkit-tap-highlight-color: transparent;\n -webkit-touch-callout: none;\n user-select: none;\n min-width: 44px;\n min-height: 44px;\n }\n \n @media (max-width: 768px) {\n #agent-button {\n min-width: 56px;\n min-height: 56px;\n box-shadow: 0 6px 16px rgba(0, 0, 0, 0.2);\n }\n \n #agent-panel {\n position: fixed !important;\n width: calc(100vw - 20px) !important;\n max-width: calc(100vw - 20px) !important;\n max-height: calc(100vh - 80px) !important;\n left: 10px !important;\n right: 10px !important;\n bottom: calc(${buttonSize}px + 10px) !important;\n top: auto !important;\n transform: none !important;\n margin: 0 !important;\n }\n \n #agent-header {\n padding: 12px 14px;\n min-height: 56px;\n }\n \n #agent-header h3 {\n font-size: 15px;\n }\n \n #agent-close {\n width: 32px;\n height: 32px;\n min-width: 32px;\n min-height: 32px;\n font-size: 20px;\n }\n \n #agent-messages {\n padding: 12px;\n gap: 10px;\n }\n \n .message {\n padding: 10px;\n font-size: 14px;\n max-width: 85%;\n }\n \n #agent-controls {\n padding: 12px;\n }\n \n #agent-mic-button {\n min-width: 56px;\n min-height: 56px;\n width: 56px;\n height: 56px;\n }\n \n #agent-mic-hint {\n font-size: 12px;\n padding: 8px;\n }\n }\n \n @media (max-width: 480px) {\n #agent-button {\n min-width: 60px;\n min-height: 60px;\n }\n \n #agent-panel {\n position: fixed !important;\n width: calc(100vw - 10px) !important;\n max-width: calc(100vw - 10px) !important;\n left: 5px !important;\n right: 5px !important;\n max-height: calc(100vh - 70px) !important;\n bottom: calc(${buttonSize}px + 5px) !important;\n top: auto !important;\n transform: none !important;\n margin: 0 !important;\n }\n \n #agent-header {\n padding: 10px 12px;\n min-height: 52px;\n }\n \n #agent-header h3 {\n font-size: 14px;\n }\n \n #agent-messages {\n padding: 10px;\n }\n \n .message {\n font-size: 13px;\n max-width: 90%;\n padding: 8px;\n }\n \n #agent-mic-button {\n min-width: 60px;\n min-height: 60px;\n width: 60px;\n height: 60px;\n }\n }\n \n ${anim.enableHover ? `\n #agent-button:hover {\n background: ${btn.hoverColor};\n transform: scale(1.05);\n ${btn.shadow ? `box-shadow: 0 8px 20px ${btn.shadowColor};` : ''}\n }\n ` : ''}\n \n #agent-panel {\n display: none;\n position: absolute;\n bottom: ${this.config.behavior.hidden ? 20 : (buttonSize + 20)}px;\n ${this.config.position.horizontal === 'right' ? 'right: 0;' : 'left: 0;'}\n width: ${panel.width}px;\n height: ${panel.height}px;\n background: ${panel.backgroundColor};\n border-radius: ${panel.borderRadius}px;\n border: ${panel.border};\n flex-direction: column;\n overflow: hidden;\n ${panel.backdropFilter ? `backdrop-filter: ${panel.backdropFilter};` : ''}\n ${anim.enableSlide ? `transition: all ${anim.duration}s ease;` : ''}\n }\n \n #agent-panel.open {\n display: flex;\n ${anim.enableSlide ? 'transform: translateY(0); opacity: 1;' : ''}\n }\n \n #agent-header {\n background: ${headerColor};\n color: ${header.textColor};\n padding: 16px;\n display: flex;\n flex-direction: ${this.config.direction === 'rtl' ? 'row-reverse' : 'row'};\n justify-content: space-between;\n align-items: center;\n border-radius: ${panel.borderRadius}px ${panel.borderRadius}px 0 0;\n direction: ${this.config.direction};\n }\n \n #agent-header h3 {\n margin: 0;\n flex: 1;\n text-align: ${this.config.direction === 'rtl' ? 'right' : 'left'};\n }\n \n #agent-close {\n background: none;\n border: none;\n color: ${header.textColor};\n cursor: pointer;\n font-size: 24px;\n padding: 0;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n \n #agent-messages {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n \n .message {\n padding: 12px;\n border-radius: ${messages.borderRadius}px;\n max-width: 80%;\n font-size: ${messages.fontSize};\n color: ${messages.textColor};\n }\n \n .message.user {\n background: ${messages.userBackgroundColor};\n align-self: flex-end;\n }\n \n .message.agent {\n background: ${messages.agentBackgroundColor};\n align-self: flex-start;\n }\n \n .message.system {\n background: ${messages.systemBackgroundColor};\n align-self: flex-start;\n font-style: italic;\n }\n \n .error-message {\n background: ${messages.errorBackgroundColor};\n color: #991B1B;\n padding: 12px;\n border-radius: ${messages.borderRadius}px;\n margin: 8px;\n }\n \n #agent-controls {\n padding: 16px;\n border-top: 1px solid #E5E7EB;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n \n #agent-controls > div {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n }\n \n #agent-mic-hint {\n text-align: center;\n line-height: 1.4;\n }\n \n #agent-mic-button {\n width: ${buttonSize}px;\n height: ${buttonSize}px;\n border-radius: ${btn.shape === 'circle' ? '50%' : btn.shape === 'square' ? '0' : '12px'};\n border: none;\n background: ${micButtonColor};\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all ${anim.duration}s ease;\n }\n \n #agent-mic-button.active {\n background: ${micButtonActiveColor};\n ${anim.enablePulse ? `\n animation: pulse 1.5s infinite;\n ` : ''}\n }\n \n ${anim.enablePulse ? `\n @keyframes pulse {\n 0%, 100% { transform: scale(1); }\n 50% { transform: scale(1.05); }\n }\n ` : ''}\n \n .agent-thinking {\n font-style: italic;\n color: #6B7280;\n }\n `;\n }\n\n setupWidgetEvents() {\n const openBtn = document.getElementById('agent-button');\n if (openBtn) {\n openBtn.onclick = () => this.togglePanel();\n }\n \n const closeBtn = document.getElementById('agent-close');\n if (closeBtn) {\n closeBtn.onclick = () => this.togglePanel();\n }\n \n document.getElementById('agent-mic-button').onclick = () => this.toggleVoice();\n \n // Keyboard navigation\n if (this.config.accessibility.keyboardNavigation) {\n this.setupKeyboardNavigation();\n }\n }\n\n setupKeyboardNavigation() {\n document.addEventListener('keydown', (e) => {\n if (e.key === 'Escape' && this.isOpen) {\n this.togglePanel();\n }\n });\n }\n\n togglePanel() {\n this.isOpen = !this.isOpen;\n const panel = document.getElementById('agent-panel');\n panel.classList.toggle('open');\n }\n\n async toggleVoice() {\n if (!this.isActive) {\n try {\n console.log('🎤 Starting voice session...');\n const signedUrl = await this.getSignedUrl();\n console.log('🔗 Got signed URL:', signedUrl);\n \n const connected = await this.sdk.connect(signedUrl);\n console.log('✅ Connected to WebSocket, connected:', connected);\n \n // Wait for connection to be fully ready (for hello message exchange)\n let attempts = 0;\n while (!this.sdk.isConnected && attempts < 50) {\n await new Promise(resolve => setTimeout(resolve, 100));\n attempts++;\n }\n \n if (this.sdk.isConnected) {\n console.log('✅ WebSocket ready, starting listening...');\n await this.sdk.startListening();\n console.log('🎤 Started listening');\n \n this.isActive = true;\n this.updateMicButtonState(true);\n this.addMessage('system', '🎤 Listening... Click mic to stop');\n } else {\n console.warn('⚠️ Connection not fully ready, but trying to start listening anyway...');\n await this.sdk.startListening();\n console.log('🎤 Started listening');\n \n this.isActive = true;\n this.updateMicButtonState(true);\n this.addMessage('system', '🎤 Listening... Click mic to stop');\n }\n } catch (error) {\n console.error('❌ Failed to start:', error);\n this.showError(error.message);\n }\n } else {\n console.log('🔇 Stopping voice session...');\n this.sdk.stopListening();\n this.sdk.disconnect();\n this.isActive = false;\n this.updateMicButtonState(false);\n this.addMessage('system', '🔇 Stopped listening');\n }\n }\n\n updateMicButtonState(isListening) {\n const micButton = document.getElementById('agent-mic-button');\n if (!micButton) return;\n \n const iconSizes = {\n small: 20,\n medium: 28,\n large: 36,\n xl: 44\n };\n const iconSize = iconSizes[this.config.icon.size] || 28;\n \n if (isListening) {\n micButton.classList.add('active');\n micButton.title = 'Click to stop listening';\n \n // Change icon to stop icon (only if using SVG microphone icon)\n if (this.config.icon.type === 'microphone' || this.config.icon.type === 'custom') {\n const iconElement = micButton.querySelector('svg') || micButton.querySelector('img');\n if (iconElement && iconElement.tagName === 'svg') {\n iconElement.innerHTML = `\n <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\"/>\n <path d=\"M9 9h6\"/>\n `;\n }\n }\n } else {\n micButton.classList.remove('active');\n micButton.title = 'Click to start listening';\n \n // Change back to original icon (only if using SVG microphone icon)\n if (this.config.icon.type === 'microphone') {\n const iconElement = micButton.querySelector('svg');\n if (iconElement) {\n iconElement.innerHTML = `\n <path d=\"M12 14c1.66 0 3-1.34 3-3V5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3z\"/>\n <path d=\"M17 11c0 2.76-2.24 5-5 5s-5-2.24-5-5H5c0 3.53 2.61 6.43 6 6.92V21h2v-3.08c3.39-.49 6-3.39 6-6.92h-2z\"/>\n `;\n }\n }\n }\n }\n\n async getSignedUrl() {\n // If getSessionUrl is not provided, construct URL directly from agentId and appId\n if (!this.config.getSessionUrl) {\n if (!this.config.agentId) {\n throw new Error('agentId is required');\n }\n \n // Build WebSocket URL directly\n const baseUrl = this.config.websocketUrl || 'wss://speech.talktopc.com/ws/conv';\n const params = new URLSearchParams();\n params.append('agentId', this.config.agentId);\n \n if (this.config.appId) {\n params.append('appId', this.config.appId);\n }\n \n // Add demo flag if in development\n if (this.config.demo !== false) {\n params.append('demo', 'true');\n }\n \n return `${baseUrl}?${params.toString()}`;\n }\n \n // Handle getSessionUrl as string (backend URL)\n if (typeof this.config.getSessionUrl === 'string') {\n const requestBody = {\n agentId: this.config.agentId,\n variables: this.config.variables || {}\n };\n \n // Add appId if provided in config\n if (this.config.appId) {\n requestBody.appId = this.config.appId;\n }\n \n const response = await fetch(this.config.getSessionUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(requestBody)\n });\n\n if (!response.ok) {\n throw new Error(`Failed to get session URL: ${response.statusText}`);\n }\n\n const data = await response.json();\n return data.signedUrl || data.wsUrl || data.url;\n }\n \n // Handle getSessionUrl as function\n else if (typeof this.config.getSessionUrl === 'function') {\n const params = {\n agentId: this.config.agentId,\n variables: this.config.variables || {}\n };\n \n // Add appId if provided in config\n if (this.config.appId) {\n params.appId = this.config.appId;\n }\n \n const result = await this.config.getSessionUrl(params);\n \n return typeof result === 'string' ? result : (result.signedUrl || result.wsUrl || result.url);\n }\n \n else {\n throw new Error('getSessionUrl must be a string (backend URL), a function, or omitted (for direct connection with agentId/appId)');\n }\n }\n\n addMessage(type, text) {\n const messages = document.getElementById('agent-messages');\n const message = document.createElement('div');\n message.className = `message ${type}`;\n message.textContent = text;\n messages.appendChild(message);\n messages.scrollTop = messages.scrollHeight;\n }\n\n showAgentThinking() {\n const messages = document.getElementById('agent-messages');\n const thinking = document.createElement('div');\n thinking.className = 'message agent agent-thinking';\n thinking.id = 'thinking-indicator';\n thinking.textContent = 'Agent is speaking...';\n messages.appendChild(thinking);\n messages.scrollTop = messages.scrollHeight;\n }\n\n hideAgentThinking() {\n const thinking = document.getElementById('thinking-indicator');\n if (thinking) thinking.remove();\n }\n\n showError(message) {\n const messages = document.getElementById('agent-messages');\n const error = document.createElement('div');\n error.className = 'error-message';\n error.textContent = message;\n messages.appendChild(error);\n }\n\n updateStatus(status) {\n // Status update handler (can be overridden by users)\n }\n\n // Public API methods\n updateConfig(newConfig) {\n // Deep merge nested objects\n const mergedConfig = { ...this.config };\n \n // Deep merge panel config if it exists\n if (newConfig.panel) {\n mergedConfig.panel = { ...this.config.panel, ...newConfig.panel };\n // Deep merge micButtonHint if it exists\n if (newConfig.panel.micButtonHint) {\n mergedConfig.panel.micButtonHint = {\n ...this.config.panel?.micButtonHint,\n ...newConfig.panel.micButtonHint\n };\n }\n }\n \n // Merge other configs (shallow merge is fine for these)\n if (newConfig.button) {\n mergedConfig.button = { ...this.config.button, ...newConfig.button };\n }\n if (newConfig.header) {\n mergedConfig.header = { ...this.config.header, ...newConfig.header };\n }\n if (newConfig.icon) {\n mergedConfig.icon = { ...this.config.icon, ...newConfig.icon };\n }\n if (newConfig.messages) {\n mergedConfig.messages = { ...this.config.messages, ...newConfig.messages };\n }\n \n // Merge direction property\n if (newConfig.direction !== undefined) {\n mergedConfig.direction = newConfig.direction;\n }\n \n // Merge any other top-level properties\n Object.keys(newConfig).forEach(key => {\n if (!['panel', 'button', 'header', 'icon', 'messages', 'direction'].includes(key)) {\n mergedConfig[key] = newConfig[key];\n }\n });\n \n this.config = this.mergeWithDefaults(mergedConfig);\n // Recreate widget with new config\n const existingWidget = document.getElementById('agent-widget');\n if (existingWidget) {\n existingWidget.remove();\n }\n this.createWidget();\n }\n\n destroy() {\n const widget = document.getElementById('agent-widget');\n if (widget) {\n widget.remove();\n }\n if (this.sdk) {\n this.sdk.disconnect();\n }\n }\n}\n","/**\n * VoiceInterface - Handles voice call UI and functionality\n * Part of the unified TextChatWidget\n */\n\nimport { AgentSDK } from '../index.js';\n\nexport class VoiceInterface {\n constructor(config) {\n this.config = config;\n this.audioStream = null;\n this.callStartTime = null;\n this.callTimerInterval = null;\n this.sdk = null;\n this.isActive = false;\n \n // Initialize AgentSDK for voice connection\n this.sdk = new AgentSDK({\n agentId: config.agentId,\n appId: config.appId,\n getSessionUrl: config.getSessionUrl,\n websocketUrl: config.websocketUrl,\n variables: config.variables || {},\n language: config.language || 'en'\n });\n \n // Setup SDK event handlers\n this.setupSDKEventHandlers();\n }\n \n /**\n * Setup event handlers for AgentSDK\n */\n setupSDKEventHandlers() {\n // Handle transcript updates\n this.sdk.onTranscript = (text) => {\n this.updateTranscript(text);\n };\n \n // Handle agent speaking state\n this.sdk.onAgentSpeaking = (isStart) => {\n const avatar = document.getElementById('voiceAvatarActive');\n if (avatar) {\n if (isStart) {\n avatar.classList.add('speaking');\n } else {\n avatar.classList.remove('speaking');\n }\n }\n };\n \n // Handle errors\n this.sdk.onError = (error) => {\n console.error('❌ Voice SDK Error:', error);\n this.showError(error.message || error);\n };\n }\n\n /**\n * Helper function to get tooltip text\n */\n // Helper function to get translated text\n t(key) {\n const lang = this.config.language || 'en';\n const translations = this.config.translations?.[lang] || this.config.translations?.en || {};\n return translations[key] || key;\n }\n\n getTooltip(key) {\n const tooltip = this.config.tooltips?.[key];\n if (tooltip !== null && tooltip !== undefined) return tooltip;\n // Use translations for default tooltips\n const defaults = {\n mute: this.t('mute'),\n speaker: this.t('speaker'),\n endCall: this.t('endCall')\n };\n return defaults[key] || '';\n }\n\n /**\n * Generate HTML for voice interface\n */\n generateHTML() {\n return `<div class=\"voice-interface\" id=\"voiceInterface\">\n <!-- Before Call State -->\n <div id=\"voiceIdleState\" style=\"display: flex; flex-direction: column; align-items: center; width: 100%;\">\n <div class=\"voice-avatar\" id=\"voiceAvatar\">\n 🤖\n </div>\n <div class=\"voice-status\">\n <div class=\"voice-status-title\">${this.t('clickToStartCall')}</div>\n <div class=\"voice-status-subtitle\">${this.t('realTimeVoice')}</div>\n </div>\n <!-- BIG START CALL BUTTON -->\n <button class=\"start-call-btn\" id=\"startCallBtn\">\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M20.01 15.38c-1.23 0-2.42-.2-3.53-.56-.35-.12-.74-.03-1.01.24l-1.57 1.97c-2.83-1.35-5.48-3.9-6.89-6.83l1.95-1.66c.27-.28.35-.67.24-1.02-.37-1.11-.56-2.3-.56-3.53 0-.54-.45-.99-.99-.99H4.19C3.65 3 3 3.24 3 3.99 3 13.28 10.73 21 20.01 21c.71 0 .99-.63.99-1.18v-3.45c0-.54-.45-.99-.99-.99z\"/>\n </svg>\n <span>${this.t('startCall')}</span>\n </button>\n </div>\n <!-- During Call State -->\n <div id=\"voiceActiveState\" style=\"display: none; flex-direction: column; align-items: center; width: 100%; height: 100%; justify-content: flex-start; overflow: hidden; padding-top: 10px;\">\n <div class=\"voice-avatar-active\" id=\"voiceAvatarActive\">\n <div class=\"voice-rings\">\n <div class=\"voice-ring\"></div>\n <div class=\"voice-ring\"></div>\n <div class=\"voice-ring\"></div>\n </div>\n 🤖\n </div>\n <div class=\"voice-status\">\n <div class=\"voice-status-title\" id=\"voiceStatusTitleActive\">${this.t('listening')}</div>\n <div class=\"voice-status-subtitle\" id=\"voiceStatusSubtitleActive\">${this.t('speakFreely')}</div>\n </div>\n <div class=\"voice-transcript\">\n <div class=\"transcript-label\">${this.t('liveTranscript')}</div>\n <div class=\"transcript-text empty\" id=\"transcriptText\">\n ${this.t('transcriptWillAppear')}\n </div>\n </div>\n <div class=\"voice-controls\">\n <button class=\"voice-control-btn secondary\" id=\"muteBtn\" title=\"${this.getTooltip('mute')}\">\n <svg width=\"64\" height=\"64\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"mute-icon\">\n <path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\"/>\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\"/>\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\"/>\n <line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\"/>\n <line x1=\"2\" y1=\"2\" x2=\"22\" y2=\"22\" class=\"mute-cross\" style=\"display: none; stroke: #ef4444; stroke-width: 3.5;\"/>\n </svg>\n </button>\n <button class=\"voice-control-btn primary active\" id=\"endCallBtn\" title=\"${this.getTooltip('endCall')}\">\n <svg width=\"56\" height=\"56\" viewBox=\"0 0 24 24\" fill=\"#ef4444\">\n <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\"/>\n </svg>\n <div class=\"voice-timer\" id=\"voiceTimer\">00:00</div>\n </button>\n <button class=\"voice-control-btn secondary\" id=\"speakerBtn\" title=\"${this.getTooltip('speaker')}\">\n <svg width=\"64\" height=\"64\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"/>\n <path d=\"M19.07 4.93a10 10 0 0 1 0 14.14\"/>\n <path d=\"M15.54 8.46a5 5 0 0 1 0 7.07\"/>\n </svg>\n </button>\n </div>\n </div>\n </div>`;\n }\n\n /**\n * Generate CSS for voice interface\n */\n generateCSS() {\n const avatarBg = this.config.avatarBackgroundColor || '#667eea';\n const avatarActiveBg = this.config.avatarActiveBackgroundColor || this.config.avatarBackgroundColor || '#667eea';\n const statusTitleColor = this.config.statusTitleColor || '#1e293b';\n const statusSubtitleColor = this.config.statusSubtitleColor || '#64748b';\n const startCallBtnColor = this.config.startCallButtonColor || '#667eea';\n const startCallBtnTextColor = this.config.startCallButtonTextColor || '#FFFFFF';\n const transcriptBg = this.config.transcriptBackgroundColor || '#FFFFFF';\n const transcriptTextColor = this.config.transcriptTextColor || '#1e293b';\n const transcriptLabelColor = this.config.transcriptLabelColor || '#94a3b8';\n const controlBtnColor = this.config.controlButtonColor || '#FFFFFF';\n const controlBtnSecondaryColor = this.config.controlButtonSecondaryColor || '#64748b';\n const endCallBtnColor = this.config.endCallButtonColor || '#ef4444';\n \n return `\n /* Voice Interface Styles */\n .voice-interface { \n display: none; \n flex: 1; \n flex-direction: column;\n align-items: center; \n justify-content: flex-start; \n padding: 10px 20px 20px 20px; \n background: linear-gradient(180deg, #f8fafc 0%, #e0e7ff 100%);\n overflow: hidden;\n min-height: 0;\n }\n .voice-interface.active { display: flex; }\n \n /* Voice Avatar (idle state) */\n .voice-avatar {\n width: 120px;\n height: 120px;\n border-radius: 50%;\n background: linear-gradient(135deg, ${avatarBg} 0%, ${avatarActiveBg} 100%);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 56px;\n margin-top: 10px;\n margin-bottom: 16px;\n box-shadow: 0 10px 40px rgba(102, 126, 234, 0.3);\n transition: all 0.3s ease;\n flex-shrink: 0;\n }\n \n /* Voice Avatar (active state with animations) */\n .voice-avatar-active {\n width: 120px;\n height: 120px;\n border-radius: 50%;\n background: linear-gradient(135deg, ${avatarBg} 0%, ${avatarActiveBg} 100%);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 56px;\n margin-top: 10px;\n margin-bottom: 16px;\n position: relative;\n box-shadow: 0 10px 40px rgba(102, 126, 234, 0.3);\n animation: avatarPulse 2s ease-in-out infinite;\n flex-shrink: 0;\n }\n \n @keyframes avatarPulse {\n 0%, 100% { \n transform: scale(1);\n box-shadow: 0 10px 40px rgba(102, 126, 234, 0.3);\n }\n 50% { \n transform: scale(1.05);\n box-shadow: 0 15px 50px rgba(102, 126, 234, 0.5);\n }\n }\n \n .voice-avatar-active.speaking {\n animation: avatarSpeak 0.5s ease-in-out infinite;\n }\n \n @keyframes avatarSpeak {\n 0%, 100% { transform: scale(1); }\n 50% { transform: scale(1.08); }\n }\n \n /* Voice Rings Animation */\n .voice-rings {\n position: absolute;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n }\n \n .voice-ring {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n border: 2px solid rgba(102, 126, 234, 0.3);\n border-radius: 50%;\n opacity: 0;\n animation: ringExpand 2s ease-out infinite;\n }\n \n .voice-ring:nth-child(2) { animation-delay: 0.5s; }\n .voice-ring:nth-child(3) { animation-delay: 1s; }\n \n @keyframes ringExpand {\n 0% {\n width: 100%;\n height: 100%;\n opacity: 0.6;\n }\n 100% {\n width: 160%;\n height: 160%;\n opacity: 0;\n }\n }\n \n /* Voice Status */\n .voice-status {\n text-align: center;\n margin-bottom: 10px;\n flex-shrink: 0;\n }\n \n .voice-status-title {\n font-size: 18px;\n font-weight: 600;\n color: ${statusTitleColor};\n margin-bottom: 4px;\n }\n \n .voice-status-subtitle {\n font-size: 12px;\n color: ${statusSubtitleColor};\n }\n \n /* Start Call Button */\n .start-call-btn {\n margin-top: 20px;\n width: 200px;\n height: 56px;\n border-radius: 28px;\n border: none;\n background: ${startCallBtnColor};\n color: ${startCallBtnTextColor};\n font-size: 18px;\n font-weight: 600;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n box-shadow: 0 12px 30px rgba(102, 126, 234, 0.4);\n transition: all 0.3s ease;\n flex-shrink: 0;\n }\n \n .start-call-btn:hover {\n transform: translateY(-4px);\n box-shadow: 0 16px 40px rgba(102, 126, 234, 0.5);\n }\n \n .start-call-btn:active {\n transform: translateY(-2px);\n }\n \n /* Voice Transcript */\n .voice-transcript {\n background: ${transcriptBg};\n padding: 12px;\n border-radius: 12px;\n max-width: 300px;\n width: 100%;\n margin-bottom: 12px;\n min-height: 50px;\n max-height: 90px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n flex-shrink: 1;\n overflow-y: auto;\n }\n \n .transcript-label {\n font-size: 10px;\n color: ${transcriptLabelColor};\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 6px;\n }\n \n .transcript-text {\n font-size: 14px;\n color: ${transcriptTextColor};\n line-height: 1.5;\n min-height: 30px;\n }\n \n .transcript-text.empty {\n color: #cbd5e1;\n font-style: italic;\n }\n \n /* Voice Controls */\n .voice-controls {\n display: flex;\n gap: 12px;\n align-items: center;\n flex-shrink: 0;\n }\n \n .voice-control-btn {\n width: 72px;\n height: 72px;\n border-radius: 50%;\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s;\n position: relative;\n flex-shrink: 0;\n }\n \n .voice-control-btn.primary {\n width: 80px;\n height: 80px;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n box-shadow: 0 8px 20px rgba(102, 126, 234, 0.4);\n }\n \n .voice-control-btn.primary:hover {\n transform: scale(1.05);\n box-shadow: 0 10px 25px rgba(102, 126, 234, 0.5);\n }\n \n .voice-control-btn.primary.active {\n background: ${endCallBtnColor === '#ef4444' ? 'white' : controlBtnColor};\n animation: recordingPulse 1.5s ease-in-out infinite;\n box-shadow: 0 8px 20px ${endCallBtnColor === '#ef4444' ? 'rgba(239, 68, 68, 0.4)' : 'rgba(0, 0, 0, 0.2)'};\n }\n \n @keyframes recordingPulse {\n 0%, 100% { \n box-shadow: 0 8px 20px rgba(239, 68, 68, 0.4);\n }\n 50% { \n box-shadow: 0 8px 30px rgba(239, 68, 68, 0.7);\n }\n }\n \n .voice-control-btn.secondary {\n background: ${controlBtnColor};\n color: ${controlBtnSecondaryColor};\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n }\n \n .voice-control-btn.secondary:hover {\n background: #f8fafc;\n transform: scale(1.05);\n }\n \n .voice-control-btn.secondary.muted {\n background: #f3f4f6;\n }\n \n .voice-control-btn.secondary.muted .mute-icon {\n stroke: #9ca3af !important;\n }\n \n .voice-timer {\n position: absolute;\n bottom: -24px;\n font-size: 12px;\n color: #64748b;\n font-weight: 500;\n }\n \n @media (max-width: 768px) {\n .voice-interface {\n padding: 8px 12px 16px 12px;\n }\n \n .voice-avatar,\n .voice-avatar-active {\n width: 100px;\n height: 100px;\n font-size: 48px;\n margin-top: 8px;\n margin-bottom: 12px;\n }\n \n .voice-status-title {\n font-size: 16px;\n }\n \n .voice-status-subtitle {\n font-size: 13px;\n }\n \n .voice-start-call-btn {\n padding: 12px 24px;\n font-size: 15px;\n min-height: 44px;\n }\n \n .voice-transcript-container {\n padding: 12px;\n max-height: 180px;\n }\n \n .voice-transcript-text {\n font-size: 14px;\n line-height: 1.5;\n }\n \n .voice-controls {\n gap: 12px;\n padding: 12px;\n }\n \n .voice-control-btn {\n width: 48px;\n height: 48px;\n min-width: 48px;\n min-height: 48px;\n }\n \n .voice-control-btn.end-call {\n width: 52px;\n height: 52px;\n min-width: 52px;\n min-height: 52px;\n }\n }\n \n @media (max-width: 480px) {\n .voice-interface {\n padding: 6px 10px 12px 10px;\n }\n \n .voice-avatar,\n .voice-avatar-active {\n width: 90px;\n height: 90px;\n font-size: 42px;\n }\n \n .voice-status-title {\n font-size: 15px;\n }\n \n .voice-status-subtitle {\n font-size: 12px;\n }\n \n .voice-start-call-btn {\n padding: 10px 20px;\n font-size: 14px;\n }\n \n .voice-transcript-container {\n padding: 10px;\n max-height: 150px;\n }\n \n .voice-transcript-text {\n font-size: 13px;\n }\n \n .voice-controls {\n gap: 10px;\n padding: 10px;\n }\n \n .voice-control-btn {\n width: 44px;\n height: 44px;\n min-width: 44px;\n min-height: 44px;\n }\n \n .voice-control-btn.end-call {\n width: 48px;\n height: 48px;\n min-width: 48px;\n min-height: 48px;\n }\n }\n `;\n }\n\n /**\n * Setup event handlers for voice interface\n */\n setupEventHandlers(callbacks) {\n const startCallBtn = document.getElementById('startCallBtn');\n const endCallBtn = document.getElementById('endCallBtn');\n const muteBtn = document.getElementById('muteBtn');\n const speakerBtn = document.getElementById('speakerBtn');\n \n if (startCallBtn) {\n startCallBtn.onclick = () => this.startVoiceCall();\n }\n if (endCallBtn) {\n endCallBtn.onclick = () => this.endVoiceCall();\n }\n if (muteBtn) {\n muteBtn.onclick = () => this.toggleMute();\n }\n if (speakerBtn) {\n speakerBtn.onclick = () => this.toggleSpeaker();\n }\n }\n\n /**\n * Get signed URL for WebSocket connection\n */\n async getSignedUrl() {\n // If getSessionUrl is not provided, construct URL directly from agentId and appId\n if (!this.config.getSessionUrl) {\n if (!this.config.agentId) {\n throw new Error('agentId is required');\n }\n \n // Build WebSocket URL directly\n const baseUrl = this.config.websocketUrl || 'wss://speech.talktopc.com/ws/conv';\n const params = new URLSearchParams();\n params.append('agentId', this.config.agentId);\n \n if (this.config.appId) {\n params.append('appId', this.config.appId);\n }\n \n // Add demo flag if in development\n if (this.config.demo !== false) {\n params.append('demo', 'true');\n }\n \n return `${baseUrl}?${params.toString()}`;\n }\n \n // Handle getSessionUrl as string (backend URL)\n if (typeof this.config.getSessionUrl === 'string') {\n const requestBody = {\n agentId: this.config.agentId,\n variables: this.config.variables || {}\n };\n \n // Add appId if provided in config\n if (this.config.appId) {\n requestBody.appId = this.config.appId;\n }\n \n const response = await fetch(this.config.getSessionUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(requestBody)\n });\n\n if (!response.ok) {\n throw new Error(`Failed to get session URL: ${response.statusText}`);\n }\n\n const data = await response.json();\n return data.signedUrl || data.wsUrl || data.url;\n }\n \n // Handle getSessionUrl as function\n else if (typeof this.config.getSessionUrl === 'function') {\n const params = {\n agentId: this.config.agentId,\n variables: this.config.variables || {}\n };\n \n // Add appId if provided in config\n if (this.config.appId) {\n params.appId = this.config.appId;\n }\n \n const result = await this.config.getSessionUrl(params);\n \n return typeof result === 'string' ? result : (result.signedUrl || result.wsUrl || result.url);\n }\n \n else {\n throw new Error('getSessionUrl must be a string (backend URL), a function, or omitted (for direct connection with agentId/appId)');\n }\n }\n\n /**\n * Start voice call\n */\n async startVoiceCall() {\n if (this.isActive) {\n console.log('⚠️ Voice call already active');\n return;\n }\n \n console.log('🎤 Starting voice call...');\n \n try {\n // Hide idle state, show active state\n const idleState = document.getElementById('voiceIdleState');\n const activeState = document.getElementById('voiceActiveState');\n const voiceInterface = document.getElementById('voiceInterface');\n \n if (idleState) idleState.style.display = 'none';\n if (activeState) activeState.style.display = 'flex';\n \n // Prevent any scrolling when switching states\n if (voiceInterface) {\n voiceInterface.scrollTop = 0;\n }\n \n // Get signed URL and connect\n const signedUrl = await this.getSignedUrl();\n console.log('🔗 Got signed URL:', signedUrl);\n \n const connected = await this.sdk.connect(signedUrl);\n console.log('✅ Connected to WebSocket, connected:', connected);\n \n // Wait for connection to be fully ready (for hello message exchange)\n let attempts = 0;\n while (!this.sdk.isConnected && attempts < 50) {\n await new Promise(resolve => setTimeout(resolve, 100));\n attempts++;\n }\n \n if (this.sdk.isConnected) {\n console.log('✅ WebSocket ready, starting listening...');\n await this.sdk.startListening();\n console.log('🎤 Started listening');\n \n this.isActive = true;\n \n // Start timer\n this.callStartTime = Date.now();\n this.callTimerInterval = setInterval(() => {\n const elapsed = Date.now() - this.callStartTime;\n const minutes = Math.floor(elapsed / 60000);\n const seconds = Math.floor((elapsed % 60000) / 1000);\n const timerEl = document.getElementById('voiceTimer');\n if (timerEl) {\n timerEl.textContent = `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n }\n }, 1000);\n } else {\n console.warn('⚠️ Connection not fully ready, but trying to start listening anyway...');\n await this.sdk.startListening();\n console.log('🎤 Started listening');\n \n this.isActive = true;\n \n // Start timer\n this.callStartTime = Date.now();\n this.callTimerInterval = setInterval(() => {\n const elapsed = Date.now() - this.callStartTime;\n const minutes = Math.floor(elapsed / 60000);\n const seconds = Math.floor((elapsed % 60000) / 1000);\n const timerEl = document.getElementById('voiceTimer');\n if (timerEl) {\n timerEl.textContent = `${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;\n }\n }, 1000);\n }\n \n console.log('✅ Voice call started successfully');\n \n } catch (error) {\n console.error('❌ Error starting voice call:', error);\n this.showError(error.message || error);\n \n // Reset UI state on error\n const idleState = document.getElementById('voiceIdleState');\n const activeState = document.getElementById('voiceActiveState');\n if (idleState) idleState.style.display = 'flex';\n if (activeState) activeState.style.display = 'none';\n }\n }\n\n /**\n * End voice call\n */\n endVoiceCall() {\n console.log('🔴 Ending voice call...');\n \n // Stop listening and disconnect\n if (this.sdk && this.isActive) {\n this.sdk.stopListening();\n this.sdk.disconnect();\n this.isActive = false;\n }\n \n // Stop audio stream (if any)\n if (this.audioStream) {\n this.audioStream.getTracks().forEach(track => track.stop());\n this.audioStream = null;\n }\n \n // Stop timer\n if (this.callTimerInterval) {\n clearInterval(this.callTimerInterval);\n this.callTimerInterval = null;\n }\n \n // Show idle state, hide active state\n const idleState = document.getElementById('voiceIdleState');\n const activeState = document.getElementById('voiceActiveState');\n \n if (idleState) idleState.style.display = 'flex';\n if (activeState) activeState.style.display = 'none';\n \n // Reset transcript\n const transcriptEl = document.getElementById('transcriptText');\n if (transcriptEl) {\n transcriptEl.textContent = this.t('transcriptWillAppear');\n transcriptEl.classList.add('empty');\n }\n \n // Remove speaking state from avatar\n const avatar = document.getElementById('voiceAvatarActive');\n if (avatar) {\n avatar.classList.remove('speaking');\n }\n \n console.log('✅ Voice call ended');\n }\n \n /**\n * Update transcript text\n */\n updateTranscript(text) {\n const transcriptEl = document.getElementById('transcriptText');\n if (transcriptEl) {\n transcriptEl.textContent = text;\n transcriptEl.classList.remove('empty');\n }\n }\n \n /**\n * Show error message\n */\n showError(message) {\n const transcriptEl = document.getElementById('transcriptText');\n if (transcriptEl) {\n transcriptEl.textContent = `${this.t('error')}: ${message}`;\n transcriptEl.classList.remove('empty');\n }\n }\n\n /**\n * Toggle mute state\n */\n toggleMute() {\n if (!this.sdk || !this.isActive) {\n return;\n }\n \n // Access the audio recorder's media stream through VoiceSDK\n let audioTrack = null;\n if (this.sdk.voiceSDK && this.sdk.voiceSDK.audioRecorder && this.sdk.voiceSDK.audioRecorder.mediaStream) {\n audioTrack = this.sdk.voiceSDK.audioRecorder.mediaStream.getAudioTracks()[0];\n }\n \n // Fallback to stored audioStream if available\n if (!audioTrack && this.audioStream) {\n audioTrack = this.audioStream.getAudioTracks()[0];\n }\n \n if (audioTrack) {\n audioTrack.enabled = !audioTrack.enabled;\n \n const muteBtn = document.getElementById('muteBtn');\n const muteIcon = muteBtn?.querySelector('.mute-icon');\n const muteCross = muteBtn?.querySelector('.mute-cross');\n \n if (muteBtn && muteIcon && muteCross) {\n if (!audioTrack.enabled) {\n // Muted state: gray color and show cross\n muteIcon.style.stroke = '#9ca3af'; // gray color\n muteCross.style.display = 'block';\n muteBtn.classList.add('muted');\n } else {\n // Unmuted state: normal color and hide cross\n muteIcon.style.stroke = '';\n muteCross.style.display = 'none';\n muteBtn.classList.remove('muted');\n }\n }\n \n console.log(audioTrack.enabled ? '🔊 Unmuted' : '🔇 Muted');\n } else {\n console.warn('⚠️ No audio track available for mute toggle');\n }\n }\n\n /**\n * Toggle speaker (placeholder)\n */\n toggleSpeaker() {\n // Speaker toggle logic (placeholder)\n console.log('🔊 Speaker toggle');\n }\n\n /**\n * Cleanup resources\n */\n destroy() {\n // End call if active\n if (this.isActive) {\n this.endVoiceCall();\n }\n \n // Clean up voice call resources\n if (this.audioStream) {\n this.audioStream.getTracks().forEach(track => track.stop());\n this.audioStream = null;\n }\n if (this.callTimerInterval) {\n clearInterval(this.callTimerInterval);\n this.callTimerInterval = null;\n }\n \n // Disconnect SDK\n if (this.sdk) {\n this.sdk.disconnect();\n this.sdk = null;\n }\n }\n}\n\n","/**\n * TextInterface - Handles text chat UI and functionality\n * Part of the unified TextChatWidget\n */\n\nexport class TextInterface {\n constructor(config, sdk) {\n this.config = config;\n this.sdk = sdk;\n this.streamingEl = null;\n this.hasStartedStreaming = false;\n this.isActive = false;\n }\n\n // Helper function to get translated text\n t(key) {\n const lang = this.config.language || 'en';\n const translations = this.config.translations?.[lang] || this.config.translations?.en || {};\n return translations[key] || key;\n }\n\n /**\n * Generate HTML for text interface\n */\n generateHTML() {\n // Use text config, fallback to panel config, then translation, then default\n const inputPlaceholder = this.config.inputPlaceholder || \n this.config.panel?.inputPlaceholder || \n this.t('typeMessage') || \n 'Type your message...';\n return `<div class=\"text-interface\" id=\"textInterface\">\n <div class=\"messages-container\" id=\"messagesContainer\">\n <div class=\"empty-state\">\n <div class=\"empty-state-icon\">💬</div>\n <div class=\"empty-state-title\">${this.t('hello')}</div>\n <div class=\"empty-state-text\">${this.t('sendMessage')}</div>\n </div>\n </div>\n <div class=\"input-container\">\n <div class=\"input-wrapper\" style=\"flex:1;\">\n <textarea class=\"message-input\" id=\"messageInput\" placeholder=\"${inputPlaceholder}\" rows=\"1\" dir=\"${this.config.direction || 'ltr'}\"></textarea>\n </div>\n <button class=\"send-button\" id=\"sendButton\" aria-label=\"${this.t('sendMessageAria')}\">${this.config.sendButtonText || '➤'}</button>\n ${(this.config.sendButtonHint?.text || this.config.panel?.sendButtonHint?.text) ? `\n <div class=\"send-button-hint\" style=\"color: ${this.config.sendButtonHint?.color || this.config.panel?.sendButtonHint?.color || '#6B7280'}; font-size: ${this.config.sendButtonHint?.fontSize || this.config.panel?.sendButtonHint?.fontSize || '12px'}; text-align: center; margin-top: 4px;\">\n ${this.config.sendButtonHint?.text || this.config.panel?.sendButtonHint?.text}\n </div>\n ` : ''}\n </div>\n </div>`;\n }\n\n /**\n * Generate CSS for text interface\n */\n generateCSS() {\n const messages = this.config.messages;\n const panel = this.config.panel;\n const anim = this.config.animation;\n \n // Use text config, fallback to panel config for backward compatibility\n const sendButtonColor = this.config.sendButtonColor || this.config.panel?.sendButtonColor || '#7C3AED'; // Purple default\n const sendButtonHoverColor = this.config.sendButtonHoverColor || this.config.panel?.sendButtonHoverColor || '#6D28D9';\n const sendButtonTextColor = this.config.sendButtonTextColor || this.config.panel?.sendButtonTextColor || '#FFFFFF';\n const inputPlaceholder = this.config.inputPlaceholder || this.config.panel?.inputPlaceholder || 'Type your message...';\n const inputBorderColor = this.config.inputBorderColor || this.config.panel?.inputBorderColor || '#E5E7EB';\n const inputFocusColor = this.config.inputFocusColor || this.config.panel?.inputFocusColor || '#7C3AED'; // Purple default\n const inputBackgroundColor = this.config.inputBackgroundColor || this.config.panel?.inputBackgroundColor || '#FFFFFF';\n const inputTextColor = this.config.inputTextColor || this.config.panel?.inputTextColor || '#1F2937';\n const inputFontSize = this.config.inputFontSize || this.config.panel?.inputFontSize || '14px';\n const inputBorderRadius = this.config.inputBorderRadius || this.config.panel?.inputBorderRadius || 20;\n const inputPadding = this.config.inputPadding || this.config.panel?.inputPadding || '6px 14px';\n \n return `\n /* Messages container using new classes */\n #messagesContainer { \n flex: 1; \n overflow-y: auto; \n overflow-x: hidden; \n padding: 20px; \n background: #f8fafc; \n display: flex; \n flex-direction: column; \n gap: 16px; \n min-height: 0; \n }\n .empty-state { \n flex: 1; \n display: flex; \n flex-direction: column; \n align-items: center; \n justify-content: center; \n gap: 12px; \n color: #64748b; \n text-align: center; \n padding: 20px; \n }\n .empty-state-icon { font-size: 48px; opacity: 0.3; }\n .empty-state-title { font-size: 20px; font-weight: 700; color: #334155; }\n .empty-state-text { font-size: 13px; max-width: 280px; }\n\n .text-interface { \n display: none; \n flex: 1; \n flex-direction: column; \n min-height: 0; \n overflow: hidden; \n }\n .text-interface.active { display: flex; }\n \n .message { \n display: flex; \n gap: 8px; \n padding: 4px 0; \n max-width: 100%; \n align-items: center; \n }\n .message.edge-left { flex-direction: row; }\n .message.edge-right { flex-direction: row-reverse; }\n .message-bubble { \n padding: 12px; \n border-radius: ${messages.borderRadius}px; \n max-width: 80%; \n font-size: ${messages.fontSize}; \n color: ${messages.textColor}; \n word-wrap: break-word; \n text-align: ${this.config.direction === 'rtl' ? 'right' : 'left'}; \n direction: ${this.config.direction || 'ltr'};\n }\n .message.user { \n background: ${messages.userBackgroundColor}; \n align-self: ${this.config.direction === 'rtl' ? 'flex-start' : 'flex-end'}; \n }\n .message.agent { \n background: ${messages.agentBackgroundColor}; \n align-self: ${this.config.direction === 'rtl' ? 'flex-end' : 'flex-start'}; \n }\n .message .message-bubble { \n text-align: ${this.config.direction === 'rtl' ? 'right' : 'left'}; \n }\n .message-avatar { \n width: 20px; \n height: 20px; \n display: flex; \n align-items: center; \n justify-content: center; \n flex-shrink: 0; \n color: inherit; \n font-size: 18px; \n line-height: 1; \n background: transparent; \n border: none; \n }\n .message-avatar.user { background: transparent; }\n .message-avatar.agent { background: transparent; }\n \n .message.system {\n background: ${messages.systemBackgroundColor};\n align-self: flex-start;\n }\n .message.error {\n background: ${messages.errorBackgroundColor};\n align-self: flex-start;\n }\n \n .input-container {\n display: flex;\n gap: 8px;\n padding: 12px 16px;\n background: #FFFFFF;\n border-top: 1px solid #E5E7EB;\n align-items: center;\n flex-shrink: 0;\n flex-direction: ${this.config.direction === 'rtl' ? 'row-reverse' : 'row'};\n }\n \n .input-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n }\n \n .message-input {\n width: 100%;\n min-height: 32px;\n max-height: 120px;\n padding: ${inputPadding};\n border: 1px solid ${inputBorderColor};\n border-radius: ${inputBorderRadius}px;\n font-size: ${inputFontSize};\n font-family: inherit;\n line-height: 1.3;\n resize: none;\n overflow-y: auto;\n background: ${inputBackgroundColor};\n color: ${inputTextColor};\n vertical-align: top;\n margin: 0;\n display: block;\n white-space: pre-wrap;\n word-wrap: break-word;\n text-align: ${this.config.direction === 'rtl' ? 'right' : 'left'};\n direction: ${this.config.direction || 'ltr'};\n -webkit-appearance: none;\n appearance: none;\n box-sizing: border-box;\n }\n \n .message-input:focus {\n outline: none;\n border-color: ${inputFocusColor};\n background: ${inputBackgroundColor === '#FFFFFF' ? '#FFFFFF' : inputBackgroundColor};\n box-shadow: 0 0 0 3px ${inputFocusColor}33;\n }\n \n .message-input::placeholder {\n color: #9CA3AF;\n text-align: ${this.config.direction === 'rtl' ? 'right' : 'left'};\n }\n \n .send-button {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n border: none;\n background: ${sendButtonColor};\n color: ${sendButtonTextColor};\n font-size: ${this.config.sendButtonFontSize || this.config.panel?.sendButtonFontSize || '18px'};\n font-weight: ${this.config.sendButtonFontWeight || this.config.panel?.sendButtonFontWeight || '500'};\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: all 0.2s ease;\n box-shadow: 0 4px 12px rgba(124, 60, 237, 0.3);\n }\n \n .send-button:hover:not(:disabled) {\n background: ${sendButtonHoverColor};\n transform: scale(1.05);\n box-shadow: 0 6px 16px rgba(124, 60, 237, 0.4);\n }\n \n .send-button-hint {\n width: 100%;\n text-align: center;\n margin-top: 4px;\n }\n \n .send-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n \n .typing-indicator {\n display: inline-flex;\n gap: 4px;\n align-items: center;\n }\n \n .typing-dot {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: #64748b;\n animation: typingDot 1.4s ease-in-out infinite;\n }\n \n .typing-dot:nth-child(2) { animation-delay: 0.2s; }\n .typing-dot:nth-child(3) { animation-delay: 0.4s; }\n \n @keyframes typingDot {\n 0%, 60%, 100% { transform: translateY(0); opacity: 0.7; }\n 30% { transform: translateY(-8px); opacity: 1; }\n }\n \n .error-message {\n padding: 12px;\n background: ${messages.errorBackgroundColor};\n border-radius: ${messages.borderRadius}px;\n color: #991B1B;\n font-size: ${messages.fontSize};\n margin: 8px 0;\n }\n \n @media (max-width: 768px) {\n #messagesContainer {\n padding: 12px;\n gap: 12px;\n }\n \n .message-bubble {\n max-width: 85%;\n font-size: 14px;\n padding: 10px;\n }\n \n .text-input-container {\n padding: 10px;\n gap: 8px;\n }\n \n #text-chat-input {\n font-size: 16px !important; /* Prevents iOS zoom on focus */\n padding: 10px 14px;\n min-height: 44px;\n }\n \n #text-chat-send {\n min-width: 56px;\n min-height: 44px;\n width: 56px;\n height: 44px;\n }\n \n .empty-state-icon {\n font-size: 40px;\n }\n \n .empty-state-title {\n font-size: 18px;\n }\n \n .empty-state-text {\n font-size: 12px;\n }\n }\n \n @media (max-width: 480px) {\n #messagesContainer {\n padding: 10px;\n gap: 10px;\n }\n \n .message-bubble {\n max-width: 90%;\n font-size: 13px;\n padding: 8px;\n }\n \n .text-input-container {\n padding: 8px;\n }\n \n #text-chat-input {\n font-size: 16px !important;\n padding: 8px 12px;\n }\n }\n `;\n }\n\n /**\n * Setup event handlers for text interface\n */\n setupEventHandlers() {\n const sendButton = document.getElementById('sendButton');\n const inputField = document.getElementById('messageInput');\n const newChatBtn = document.getElementById('newChatBtn');\n \n if (sendButton) sendButton.onclick = () => this.sendMessage();\n if (newChatBtn) newChatBtn.onclick = () => this.startNewChat();\n \n // Update placeholder and direction when config changes\n this.updateInputAttributes();\n \n // Send on Enter key, auto-resize textarea, and keep cursor visible\n if (inputField) {\n // Set initial height\n inputField.style.height = '32px';\n inputField.style.overflow = 'hidden';\n \n // Auto-resize textarea as user types\n const autoResize = () => {\n inputField.style.height = 'auto';\n const newHeight = Math.min(inputField.scrollHeight, 120);\n inputField.style.height = newHeight + 'px';\n inputField.style.overflowY = newHeight >= 120 ? 'auto' : 'hidden';\n \n // When at max height with overflow, scroll to bottom to keep cursor visible\n if (newHeight >= 120) {\n // Small delay to ensure height is applied first\n setTimeout(() => {\n inputField.scrollTop = inputField.scrollHeight;\n }, 0);\n }\n };\n \n inputField.addEventListener('input', autoResize);\n \n inputField.addEventListener('keydown', (e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n this.sendMessage();\n } else if (e.key === 'Enter' && e.shiftKey) {\n // Allow Enter with Shift for new line, resize after\n setTimeout(autoResize, 0);\n }\n });\n }\n }\n\n /**\n * Start new chat\n */\n startNewChat() {\n try { \n localStorage.removeItem('ttp_text_chat_conversation_id'); \n } catch (_) {}\n \n if (this.sdk) {\n this.sdk.config.conversationId = null;\n }\n \n // Reset UI messages to empty state\n const container = document.getElementById('messagesContainer');\n if (container) {\n container.innerHTML = `\n <div class=\"empty-state\">\n <div class=\"empty-state-icon\">💬</div>\n <div class=\"empty-state-title\">${this.t('hello')}</div>\n <div class=\"empty-state-text\">${this.t('sendMessage')}</div>\n </div>`;\n }\n \n // Focus message input\n const input = document.getElementById('messageInput');\n if (input) input.focus();\n }\n\n /**\n * Update input attributes (placeholder, direction) when config changes\n */\n updateInputAttributes() {\n const inputField = document.getElementById('messageInput');\n if (inputField) {\n // Update placeholder based on current language\n const inputPlaceholder = this.config.inputPlaceholder || \n this.config.panel?.inputPlaceholder || \n this.t('typeMessage') || \n 'Type your message...';\n inputField.placeholder = inputPlaceholder;\n \n // Update direction\n inputField.dir = this.config.direction || 'ltr';\n \n // Update text-align style\n inputField.style.textAlign = this.config.direction === 'rtl' ? 'right' : 'left';\n }\n }\n\n /**\n * Show text interface\n */\n show() {\n const textInterface = document.getElementById('textInterface');\n if (textInterface) textInterface.classList.add('active');\n \n // Focus input soon after render\n setTimeout(() => {\n const input = document.getElementById('messageInput');\n if (input) input.focus();\n }, 50);\n }\n\n /**\n * Hide text interface\n */\n hide() {\n const textInterface = document.getElementById('textInterface');\n if (textInterface) textInterface.classList.remove('active');\n }\n\n /**\n * Start chat session\n */\n async startChat() {\n // No-op with single-shot design; connection happens per message\n this.isActive = true;\n this.updateSendButtonState();\n }\n\n /**\n * Send message\n */\n async sendMessage() {\n const input = document.getElementById('messageInput');\n const text = input.value.trim();\n \n if (!text) {\n return;\n }\n \n // Ensure active state\n if (!this.isActive) {\n await this.startChat();\n }\n \n // Add user message to UI\n this.addMessage('user', text);\n \n // Clear input and reset height\n input.value = '';\n input.style.height = '32px';\n input.style.overflow = 'hidden';\n \n // Prepare streaming bubble and send via SDK\n try {\n this.beginStreaming();\n await this.sdk.sendMessage(text);\n } catch (error) {\n console.error('❌ Failed to send message:', error);\n this.showError(error.message);\n this.stopStreamingState();\n }\n }\n\n /**\n * Update send button state\n */\n updateSendButtonState() {\n const sendButton = document.getElementById('sendButton');\n if (!sendButton) return;\n \n sendButton.disabled = !this.isActive; // single-shot; enable when ready for input\n }\n\n /**\n * Add message to UI\n */\n addMessage(type, text) {\n const messages = document.getElementById('messagesContainer');\n if (!messages) return;\n \n // Remove empty state if present\n const emptyState = messages.querySelector('.empty-state');\n if (emptyState) {\n emptyState.remove();\n }\n \n const message = document.createElement('div');\n const edgeClass = (this.config.direction === 'rtl')\n ? (type === 'user' ? 'edge-left' : 'edge-right')\n : (type === 'user' ? 'edge-right' : 'edge-left');\n message.className = `message ${type} ${edgeClass}`;\n\n const avatar = document.createElement('div');\n avatar.className = `message-avatar ${type}`;\n avatar.textContent = type === 'user' ? '👤' : '🤖';\n\n const bubble = document.createElement('div');\n bubble.className = 'message-bubble';\n bubble.textContent = text;\n\n // Order is controlled by edgeClass via flex-direction\n message.appendChild(avatar);\n message.appendChild(bubble);\n messages.appendChild(message);\n messages.scrollTop = messages.scrollHeight;\n }\n\n /**\n * Begin streaming response\n */\n beginStreaming() {\n const messages = document.getElementById('messagesContainer');\n if (!messages) return;\n \n // Clean any previous indicator\n this.stopStreamingState();\n \n const el = document.createElement('div');\n const edgeClass = (this.config.direction === 'rtl') ? 'edge-right' : 'edge-left';\n el.className = `message agent ${edgeClass}`;\n el.id = 'agent-streaming';\n\n const avatar = document.createElement('div');\n avatar.className = 'message-avatar agent';\n avatar.textContent = '🤖';\n \n const bubble = document.createElement('div');\n bubble.className = 'message-bubble';\n // show typing dots until first chunk\n bubble.innerHTML = '<span class=\"typing-indicator\"><span class=\"typing-dot\"></span><span class=\"typing-dot\"></span><span class=\"typing-dot\"></span></span>';\n\n el.appendChild(avatar);\n el.appendChild(bubble);\n messages.appendChild(el);\n this.streamingEl = bubble;\n this.hasStartedStreaming = false;\n messages.scrollTop = messages.scrollHeight;\n }\n\n /**\n * Append chunk to streaming response\n */\n appendStreamingChunk(chunk) {\n if (!this.streamingEl) return;\n \n if (!this.hasStartedStreaming) {\n // remove typing indicator on first content\n this.streamingEl.textContent = '';\n this.hasStartedStreaming = true;\n }\n \n this.streamingEl.textContent += chunk;\n const messages = document.getElementById('messagesContainer');\n if (messages) {\n messages.scrollTop = messages.scrollHeight;\n }\n }\n\n /**\n * Finalize streaming response\n */\n finalizeStreaming(fullText) {\n if (this.streamingEl) {\n this.streamingEl.textContent = fullText || this.streamingEl.textContent;\n const container = document.getElementById('agent-streaming');\n if (container) container.id = '';\n this.streamingEl = null;\n }\n this.updateSendButtonState();\n }\n\n /**\n * Stop streaming state\n */\n stopStreamingState() {\n const existing = document.getElementById('agent-streaming');\n if (existing) existing.remove();\n this.streamingEl = null;\n this.hasStartedStreaming = false;\n }\n\n /**\n * Show error message\n */\n showError(message) {\n const messages = document.getElementById('messagesContainer');\n if (!messages) return;\n \n const error = document.createElement('div');\n error.className = 'error-message';\n error.textContent = message;\n messages.appendChild(error);\n messages.scrollTop = messages.scrollHeight;\n }\n\n /**\n * Set active state\n */\n setActive(active) {\n this.isActive = active;\n this.updateSendButtonState();\n }\n}\n\n","export default {\n \"en\": {\n \"landingTitle\": \"How would you like to communicate?\",\n \"voiceCall\": \"Voice Call\",\n \"textChat\": \"Text Chat\",\n \"clickToStartCall\": \"Click to Start Call\",\n \"realTimeVoice\": \"Real-time voice conversation\",\n \"startCall\": \"Start Call\",\n \"listening\": \"Listening...\",\n \"speakFreely\": \"Speak freely\",\n \"liveTranscript\": \"Live Transcript\",\n \"transcriptWillAppear\": \"Transcript will appear here during the call...\",\n \"mute\": \"Mute\",\n \"speaker\": \"Speaker\",\n \"endCall\": \"End Call\",\n \"hello\": \"Hello! How can I help?\",\n \"sendMessage\": \"Send a message to get started\",\n \"online\": \"Online\",\n \"newChat\": \"New Chat\",\n \"back\": \"Back\",\n \"close\": \"Close\",\n \"error\": \"Error\",\n \"typeMessage\": \"Type your message...\",\n \"sendMessageAria\": \"Send message\"\n },\n \"he\": {\n \"landingTitle\": \"איך תרצה לתקשר?\",\n \"voiceCall\": \"שיחה קולית\",\n \"textChat\": \"צ'אט טקסט\",\n \"clickToStartCall\": \"לחץ להתחלת שיחה\",\n \"realTimeVoice\": \"שיחה קולית בזמן אמת\",\n \"startCall\": \"התחל שיחה\",\n \"listening\": \"מקשיב...\",\n \"speakFreely\": \"דבר בחופשיות\",\n \"liveTranscript\": \"תמלול בזמן אמת\",\n \"transcriptWillAppear\": \"התמלול יופיע כאן במהלך השיחה...\",\n \"mute\": \"השתק\",\n \"speaker\": \"רמקול\",\n \"endCall\": \"סיים שיחה\",\n \"hello\": \"שלום! איך אפשר לעזור?\",\n \"sendMessage\": \"שלח הודעה או עבור למצב קולי לשיחה בזמן אמת\",\n \"online\": \"מקוון\",\n \"newChat\": \"צ'אט חדש\",\n \"back\": \"חזור\",\n \"close\": \"סגור\",\n \"error\": \"שגיאה\",\n \"typeMessage\": \"הקלד הודעה...\",\n \"sendMessageAria\": \"שלח הודעה\"\n },\n \"ar\": {\n \"landingTitle\": \"كيف تريد التواصل؟\",\n \"voiceCall\": \"مكالمة صوتية\",\n \"textChat\": \"دردشة نصية\",\n \"clickToStartCall\": \"انقر لبدء المكالمة\",\n \"realTimeVoice\": \"محادثة صوتية في الوقت الفعلي\",\n \"startCall\": \"ابدأ المكالمة\",\n \"listening\": \"الاستماع...\",\n \"speakFreely\": \"تكلم بحرية\",\n \"liveTranscript\": \"نص مباشر\",\n \"transcriptWillAppear\": \"سيظهر النص هنا أثناء المكالمة...\",\n \"mute\": \"كتم الصوت\",\n \"speaker\": \"مكبر الصوت\",\n \"endCall\": \"إنهاء المكالمة\",\n \"hello\": \"مرحبا! كيف يمكنني المساعدة؟\",\n \"sendMessage\": \"أرسل رسالة للبدء\",\n \"online\": \"متصل\",\n \"newChat\": \"محادثة جديدة\",\n \"back\": \"رجوع\",\n \"close\": \"إغلاق\",\n \"error\": \"خطأ\",\n \"typeMessage\": \"اكتب رسالة...\",\n \"sendMessageAria\": \"إرسال رسالة\"\n },\n \"ru\": {\n \"landingTitle\": \"Как вы хотите общаться?\",\n \"voiceCall\": \"Голосовой звонок\",\n \"textChat\": \"Текстовый чат\",\n \"clickToStartCall\": \"Нажмите, чтобы начать звонок\",\n \"realTimeVoice\": \"Голосовой разговор в реальном времени\",\n \"startCall\": \"Начать звонок\",\n \"listening\": \"Слушаю...\",\n \"speakFreely\": \"Говорите свободно\",\n \"liveTranscript\": \"Живая транскрипция\",\n \"transcriptWillAppear\": \"Транскрипция появится здесь во время звонка...\",\n \"mute\": \"Отключить звук\",\n \"speaker\": \"Динамик\",\n \"endCall\": \"Завершить звонок\",\n \"hello\": \"Привет! Как я могу помочь?\",\n \"sendMessage\": \"Отправьте сообщение для начала\",\n \"online\": \"В сети\",\n \"newChat\": \"Новый чат\",\n \"back\": \"Назад\",\n \"close\": \"Закрыть\",\n \"error\": \"Ошибка\",\n \"typeMessage\": \"Введите сообщение...\",\n \"sendMessageAria\": \"Отправить сообщение\"\n },\n \"es\": {\n \"landingTitle\": \"¿Cómo te gustaría comunicarte?\",\n \"voiceCall\": \"Llamada de voz\",\n \"textChat\": \"Chat de texto\",\n \"clickToStartCall\": \"Haz clic para iniciar la llamada\",\n \"realTimeVoice\": \"Conversación de voz en tiempo real\",\n \"startCall\": \"Iniciar llamada\",\n \"listening\": \"Escuchando...\",\n \"speakFreely\": \"Habla libremente\",\n \"liveTranscript\": \"Transcripción en vivo\",\n \"transcriptWillAppear\": \"La transcripción aparecerá aquí durante la llamada...\",\n \"mute\": \"Silenciar\",\n \"speaker\": \"Altavoz\",\n \"endCall\": \"Terminar llamada\",\n \"hello\": \"¡Hola! ¿Cómo puedo ayudarte?\",\n \"sendMessage\": \"Envía un mensaje para comenzar\",\n \"online\": \"En línea\",\n \"newChat\": \"Nuevo chat\",\n \"back\": \"Atrás\",\n \"close\": \"Cerrar\",\n \"error\": \"Error\",\n \"typeMessage\": \"Escribe un mensaje...\",\n \"sendMessageAria\": \"Enviar mensaje\"\n },\n \"fr\": {\n \"landingTitle\": \"Comment souhaitez-vous communiquer?\",\n \"voiceCall\": \"Appel vocal\",\n \"textChat\": \"Chat texte\",\n \"clickToStartCall\": \"Cliquez pour démarrer l'appel\",\n \"realTimeVoice\": \"Conversation vocale en temps réel\",\n \"startCall\": \"Démarrer l'appel\",\n \"listening\": \"Écoute...\",\n \"speakFreely\": \"Parlez librement\",\n \"liveTranscript\": \"Transcripción en direct\",\n \"transcriptWillAppear\": \"La transcription apparaîtra ici pendant l'appel...\",\n \"mute\": \"Muet\",\n \"speaker\": \"Haut-parleur\",\n \"endCall\": \"Terminer l'appel\",\n \"hello\": \"Bonjour! Comment puis-je vous aider?\",\n \"sendMessage\": \"Envoyez un message pour commencer\",\n \"online\": \"En ligne\",\n \"newChat\": \"Nouveau chat\",\n \"back\": \"Retour\",\n \"close\": \"Fermer\",\n \"error\": \"Erreur\",\n \"typeMessage\": \"Tapez votre message...\",\n \"sendMessageAria\": \"Envoyer un message\"\n },\n \"de\": {\n \"landingTitle\": \"Wie möchten Sie kommunizieren?\",\n \"voiceCall\": \"Sprachanruf\",\n \"textChat\": \"Text-Chat\",\n \"clickToStartCall\": \"Klicken Sie, um den Anruf zu starten\",\n \"realTimeVoice\": \"Sprachanruf in Echtzeit\",\n \"startCall\": \"Anruf starten\",\n \"listening\": \"Hören...\",\n \"speakFreely\": \"Sprechen Sie frei\",\n \"liveTranscript\": \"Live-Transkription\",\n \"transcriptWillAppear\": \"Die Transkription erscheint hier während des Anrufs...\",\n \"mute\": \"Stumm\",\n \"speaker\": \"Lautsprecher\",\n \"endCall\": \"Anruf beenden\",\n \"hello\": \"Hallo! Wie kann ich helfen?\",\n \"sendMessage\": \"Senden Sie eine Nachricht zum Starten\",\n \"online\": \"Online\",\n \"newChat\": \"Neuer Chat\",\n \"back\": \"Zurück\",\n \"close\": \"Schließen\",\n \"error\": \"Fehler\",\n \"typeMessage\": \"Geben Sie eine Nachricht ein...\",\n \"sendMessageAria\": \"Nachricht senden\"\n }\n};\n","/**\n * TextChatWidget - Pre-built UI widget for text chat using TextChatSDK\n * Similar to AgentWidget but designed for text-based chat\n */\n\nimport TextChatSDK from '../core/TextChatSDK.js';\nimport { VoiceInterface } from './VoiceInterface.js';\nimport { TextInterface } from './TextInterface.js';\nimport widgetTranslations from './widget-translations.js';\n\nexport class TextChatWidget {\n constructor(config = {}) {\n // Merge user config with defaults (backward compatible with simple config)\n this.config = this.mergeWithDefaults(config);\n this.sdk = new TextChatSDK(this.config);\n this.isOpen = false;\n this.isActive = false;\n this.translations = widgetTranslations;\n \n // Initialize interfaces with proper config\n // Voice interface needs voice config merged with main config\n const voiceConfig = {\n ...this.config,\n ...this.config.voice,\n language: this.config.voice?.language || this.config.language || 'en',\n websocketUrl: this.config.voice?.websocketUrl || this.config.websocketUrl || 'wss://speech.talktopc.com/ws/conv',\n translations: this.translations\n };\n this.voiceInterface = new VoiceInterface(voiceConfig);\n // Text interface needs text config merged with main config\n const textConfig = {\n ...this.config,\n ...this.config.text,\n translations: this.translations\n };\n this.textInterface = new TextInterface(textConfig, this.sdk);\n \n this.setupEventHandlers();\n this.createWidget();\n \n // Start open if configured (immediately)\n if (this.config.behavior.startOpen || this.config.behavior.autoOpen) {\n const panel = document.getElementById('text-chat-panel');\n if (panel) {\n this.isOpen = true;\n panel.classList.add('open');\n }\n }\n }\n\n /**\n * Merge user configuration with defaults\n * Supports both simple config (backward compatible) and advanced config\n */\n mergeWithDefaults(userConfig) {\n // Handle legacy position string format\n let positionConfig = userConfig.position || 'bottom-right';\n if (typeof positionConfig === 'string') {\n // Convert legacy format 'bottom-right' to new format\n const parts = positionConfig.split('-');\n positionConfig = {\n vertical: parts[0] || 'bottom',\n horizontal: parts[1] || 'right',\n offset: userConfig.positionOffset || { x: 20, y: 20 }\n };\n }\n\n // Handle legacy primaryColor - default to purple\n const primaryColor = userConfig.primaryColor || userConfig.button?.primaryColor || userConfig.button?.backgroundColor || '#7C3AED';\n \n // Calculate headerColor for use in landing config (needed before landing config is defined)\n const headerColor = userConfig.header?.backgroundColor || userConfig.button?.backgroundColor || primaryColor;\n\n return {\n // Required (agentId is required, appId is optional)\n agentId: userConfig.agentId,\n appId: userConfig.appId,\n getSessionUrl: userConfig.getSessionUrl, // Optional - will auto-construct URL if omitted (for voice)\n websocketUrl: userConfig.websocketUrl, // Optional - defaults to backend.talktopc.com/ws/conv (for text), speech.talktopc.com/ws/conv (for voice)\n demo: userConfig.demo !== false, // Optional - defaults to true\n direction: userConfig.direction || 'ltr', // Optional - text direction: 'ltr' or 'rtl'\n language: userConfig.language || 'en', // Optional - language for voice (defaults to 'en')\n \n // Icon/Image Configuration\n icon: {\n type: userConfig.icon?.type || 'custom', // 'microphone', 'custom', 'emoji', 'text'\n customImage: userConfig.icon?.customImage || 'https://talktopc.com/logo192.png',\n emoji: userConfig.icon?.emoji || '🎤',\n text: userConfig.icon?.text || 'AI',\n size: userConfig.icon?.size || 'medium', // 'small', 'medium', 'large', 'xl'\n backgroundColor: userConfig.icon?.backgroundColor || '#FFFFFF',\n ...userConfig.icon\n },\n \n // Positioning Configuration (supports both object and legacy string)\n position: {\n vertical: positionConfig.vertical || 'bottom',\n horizontal: positionConfig.horizontal || 'right',\n offset: positionConfig.offset || { x: 20, y: 20 },\n ...(typeof userConfig.position === 'object' ? userConfig.position : {})\n },\n \n // Button Configuration\n button: {\n size: userConfig.button?.size || 'medium',\n shape: userConfig.button?.shape || 'circle',\n // Floating button colors (main button)\n backgroundColor: userConfig.button?.backgroundColor || userConfig.icon?.backgroundColor || primaryColor,\n hoverColor: userConfig.button?.hoverColor || '#7C3AED',\n shadow: userConfig.button?.shadow !== false,\n shadowColor: userConfig.button?.shadowColor || 'rgba(0,0,0,0.15)',\n // Legacy support - map to backgroundColor\n primaryColor: userConfig.button?.backgroundColor || userConfig.icon?.backgroundColor || primaryColor,\n ...userConfig.button\n },\n \n // Panel Configuration (common to both voice and text)\n panel: {\n width: userConfig.panel?.width || 350,\n height: userConfig.panel?.height || 500,\n borderRadius: userConfig.panel?.borderRadius || 12,\n backgroundColor: userConfig.panel?.backgroundColor || '#FFFFFF',\n backdropFilter: userConfig.panel?.backdropFilter || null,\n border: userConfig.panel?.border || '1px solid rgba(0,0,0,0.1)',\n ...userConfig.panel\n },\n \n // Voice-specific Configuration\n voice: {\n // Voice button colors (inside panel)\n micButtonColor: userConfig.voice?.micButtonColor || userConfig.panel?.micButtonColor || primaryColor,\n micButtonActiveColor: userConfig.voice?.micButtonActiveColor || userConfig.panel?.micButtonActiveColor || '#EF4444',\n // Voice button hint text (below button)\n micButtonHint: {\n text: userConfig.voice?.micButtonHint?.text || userConfig.panel?.micButtonHint?.text || 'Click the button to start voice conversation',\n color: userConfig.voice?.micButtonHint?.color || userConfig.panel?.micButtonHint?.color || '#6B7280',\n fontSize: userConfig.voice?.micButtonHint?.fontSize || userConfig.panel?.micButtonHint?.fontSize || '12px',\n ...userConfig.voice?.micButtonHint,\n ...userConfig.panel?.micButtonHint\n },\n // Voice interface colors\n avatarBackgroundColor: userConfig.voice?.avatarBackgroundColor || '#667eea',\n avatarActiveBackgroundColor: userConfig.voice?.avatarActiveBackgroundColor || '#667eea',\n statusTitleColor: userConfig.voice?.statusTitleColor || '#1e293b',\n statusSubtitleColor: userConfig.voice?.statusSubtitleColor || '#64748b',\n startCallButtonColor: userConfig.voice?.startCallButtonColor || '#667eea',\n startCallButtonTextColor: userConfig.voice?.startCallButtonTextColor || '#FFFFFF',\n transcriptBackgroundColor: userConfig.voice?.transcriptBackgroundColor || '#FFFFFF',\n transcriptTextColor: userConfig.voice?.transcriptTextColor || '#1e293b',\n transcriptLabelColor: userConfig.voice?.transcriptLabelColor || '#94a3b8',\n controlButtonColor: userConfig.voice?.controlButtonColor || '#FFFFFF',\n controlButtonSecondaryColor: userConfig.voice?.controlButtonSecondaryColor || '#64748b',\n endCallButtonColor: userConfig.voice?.endCallButtonColor || '#ef4444',\n // Voice language setting\n language: userConfig.voice?.language || userConfig.language || 'en',\n // Voice websocket URL (can override global websocketUrl)\n websocketUrl: userConfig.voice?.websocketUrl || userConfig.websocketUrl,\n ...userConfig.voice\n },\n \n // Text-specific Configuration\n text: {\n // Send button colors (inside panel)\n sendButtonColor: userConfig.text?.sendButtonColor || userConfig.panel?.sendButtonColor || '#7C3AED', // Purple default\n sendButtonHoverColor: userConfig.text?.sendButtonHoverColor || userConfig.panel?.sendButtonHoverColor || '#6D28D9',\n sendButtonActiveColor: userConfig.text?.sendButtonActiveColor || userConfig.panel?.sendButtonActiveColor || '#6D28D9', // Purple darker for active\n sendButtonText: userConfig.text?.sendButtonText || userConfig.panel?.sendButtonText || '➤',\n sendButtonTextColor: userConfig.text?.sendButtonTextColor || userConfig.panel?.sendButtonTextColor || '#FFFFFF',\n sendButtonFontSize: userConfig.text?.sendButtonFontSize || userConfig.panel?.sendButtonFontSize || '18px',\n sendButtonFontWeight: userConfig.text?.sendButtonFontWeight || userConfig.panel?.sendButtonFontWeight || '500',\n // Send button hint text (below button or near it)\n sendButtonHint: {\n text: userConfig.text?.sendButtonHint?.text || userConfig.panel?.sendButtonHint?.text || '',\n color: userConfig.text?.sendButtonHint?.color || userConfig.panel?.sendButtonHint?.color || '#6B7280',\n fontSize: userConfig.text?.sendButtonHint?.fontSize || userConfig.panel?.sendButtonHint?.fontSize || '12px',\n ...userConfig.text?.sendButtonHint,\n ...userConfig.panel?.sendButtonHint\n },\n // Input field configuration\n inputPlaceholder: userConfig.text?.inputPlaceholder || userConfig.panel?.inputPlaceholder || 'Type your message...',\n inputBorderColor: userConfig.text?.inputBorderColor || userConfig.panel?.inputBorderColor || '#E5E7EB',\n inputFocusColor: userConfig.text?.inputFocusColor || userConfig.panel?.inputFocusColor || '#7C3AED', // Purple default\n inputBackgroundColor: userConfig.text?.inputBackgroundColor || userConfig.panel?.inputBackgroundColor || '#FFFFFF',\n inputTextColor: userConfig.text?.inputTextColor || userConfig.panel?.inputTextColor || '#1F2937',\n inputFontSize: userConfig.text?.inputFontSize || userConfig.panel?.inputFontSize || '14px',\n inputBorderRadius: userConfig.text?.inputBorderRadius || userConfig.panel?.inputBorderRadius || 20,\n inputPadding: userConfig.text?.inputPadding || userConfig.panel?.inputPadding || '6px 14px',\n ...userConfig.text\n },\n \n // Landing Screen Configuration (only for unified mode)\n landing: {\n backgroundColor: userConfig.landing?.backgroundColor || 'linear-gradient(180deg, #f8fafc 0%, #e0e7ff 100%)',\n logo: userConfig.landing?.logo || '🤖',\n title: userConfig.landing?.title || null, // null means use default translated text\n titleColor: userConfig.landing?.titleColor || '#1e293b',\n modeCardBackgroundColor: userConfig.landing?.modeCardBackgroundColor || '#FFFFFF',\n modeCardBorderColor: userConfig.landing?.modeCardBorderColor || '#E2E8F0',\n modeCardHoverBorderColor: userConfig.landing?.modeCardHoverBorderColor || headerColor,\n modeCardIconBackgroundColor: userConfig.landing?.modeCardIconBackgroundColor || headerColor,\n modeCardTitleColor: userConfig.landing?.modeCardTitleColor || '#111827',\n voiceCardIcon: userConfig.landing?.voiceCardIcon || '🎤',\n textCardIcon: userConfig.landing?.textCardIcon || '💬',\n ...userConfig.landing\n },\n \n // Header Configuration (top of panel)\n header: {\n title: userConfig.header?.title || 'Chat Assistant',\n showTitle: userConfig.header?.showTitle !== false,\n backgroundColor: userConfig.header?.backgroundColor || userConfig.button?.backgroundColor || '#7C3AED', // Default purple\n textColor: userConfig.header?.textColor || '#FFFFFF',\n showCloseButton: userConfig.header?.showCloseButton !== false,\n ...userConfig.header\n },\n \n // Tooltips Configuration\n tooltips: {\n newChat: userConfig.tooltips?.newChat || null, // null means use default based on direction\n back: userConfig.tooltips?.back || null,\n close: userConfig.tooltips?.close || null,\n mute: userConfig.tooltips?.mute || null,\n speaker: userConfig.tooltips?.speaker || null,\n endCall: userConfig.tooltips?.endCall || null,\n ...userConfig.tooltips\n },\n \n // Messages Configuration\n messages: {\n userBackgroundColor: userConfig.messages?.userBackgroundColor || '#E5E7EB',\n agentBackgroundColor: userConfig.messages?.agentBackgroundColor || '#F3F4F6',\n systemBackgroundColor: userConfig.messages?.systemBackgroundColor || '#DCFCE7',\n errorBackgroundColor: userConfig.messages?.errorBackgroundColor || '#FEE2E2',\n textColor: userConfig.messages?.textColor || '#1F2937',\n fontSize: userConfig.messages?.fontSize || '14px',\n borderRadius: userConfig.messages?.borderRadius || 8,\n ...userConfig.messages\n },\n \n // Animation Configuration\n animation: {\n enableHover: userConfig.animation?.enableHover !== false,\n enablePulse: userConfig.animation?.enablePulse !== false,\n enableSlide: userConfig.animation?.enableSlide !== false,\n duration: userConfig.animation?.duration || 0.3,\n ...userConfig.animation\n },\n \n // Behavior Configuration\n behavior: {\n autoOpen: userConfig.behavior?.autoOpen || false,\n startOpen: userConfig.behavior?.startOpen || false,\n hidden: userConfig.behavior?.hidden || false,\n autoConnect: userConfig.behavior?.autoConnect || false,\n showWelcomeMessage: userConfig.behavior?.showWelcomeMessage !== false,\n welcomeMessage: userConfig.behavior?.welcomeMessage || 'Hello! How can I help you today?',\n // Voice selection landing (enabled by default)\n enableVoiceMode: userConfig.behavior?.enableVoiceMode !== undefined ? userConfig.behavior.enableVoiceMode : true,\n // Widget mode: 'unified' (both voice and text with landing screen), 'voice-only' (only voice), 'text-only' (only text)\n mode: userConfig.behavior?.mode || 'unified',\n ...userConfig.behavior\n },\n \n // Accessibility Configuration\n accessibility: {\n ariaLabel: userConfig.accessibility?.ariaLabel || 'Chat Assistant',\n ariaDescription: userConfig.accessibility?.ariaDescription || 'Click to open chat assistant',\n keyboardNavigation: userConfig.accessibility?.keyboardNavigation !== false,\n ...userConfig.accessibility\n },\n \n // Custom CSS\n customStyles: userConfig.customStyles || '',\n \n // Variables for the agent\n variables: userConfig.variables || {},\n // TEST: allow forcing a conversationId for debugging\n forceConversationId: userConfig.forceConversationId,\n \n // Legacy support (for backward compatibility)\n primaryColor: primaryColor,\n // Keep position string for backward compatibility\n ...(typeof userConfig.position === 'string' ? { positionString: userConfig.position } : {})\n };\n }\n\n setupEventHandlers() {\n this.sdk.on('error', (error) => {\n this.textInterface.showError(error.message || error);\n this.textInterface.stopStreamingState();\n });\n\n this.sdk.on('chunk', (chunk) => {\n this.textInterface.appendStreamingChunk(chunk);\n });\n\n this.sdk.on('done', ({ text }) => {\n this.textInterface.finalizeStreaming(text);\n });\n }\n\n createWidget() {\n const widget = document.createElement('div');\n widget.id = 'text-chat-widget';\n widget.innerHTML = this.generateWidgetHTML();\n \n document.body.appendChild(widget);\n \n this.setupWidgetEvents();\n \n // Ensure initial open state if configured\n if (this.config.behavior.startOpen || this.config.behavior.autoOpen) {\n const panel = document.getElementById('text-chat-panel');\n if (panel) {\n this.isOpen = true;\n panel.classList.add('open');\n }\n }\n }\n\n generateWidgetHTML() {\n const pos = this.config.position;\n const btn = this.config.button;\n const icon = this.config.icon;\n const panel = this.config.panel;\n const header = this.config.header;\n const anim = this.config.animation;\n\n // Calculate button size\n const buttonSizes = {\n small: 50,\n medium: 60,\n large: 70,\n xl: 80\n };\n const buttonSize = buttonSizes[btn.size] || 60;\n\n // Calculate icon size\n const iconSizes = {\n small: 20,\n medium: 28,\n large: 36,\n xl: 44\n };\n const iconSize = iconSizes[icon.size] || 28;\n\n // Generate position styles\n const positionStyles = this.generatePositionStyles();\n\n // Generate icon HTML\n const iconHTML = this.generateIconHTML(iconSize);\n\n const widgetMode = this.config.behavior.mode || 'unified';\n const showLanding = widgetMode === 'unified';\n const showVoice = widgetMode === 'unified' || widgetMode === 'voice-only';\n const showText = widgetMode === 'unified' || widgetMode === 'text-only';\n const voiceEnabled = showVoice;\n \n // Helper function to get translated text\n const t = (key) => {\n const lang = this.config.language || 'en';\n const translations = this.translations[lang] || this.translations.en;\n return translations[key] || key;\n };\n \n // Helper function to get tooltip text\n const getTooltip = (key) => {\n const tooltip = this.config.tooltips?.[key];\n if (tooltip !== null && tooltip !== undefined) return tooltip;\n // Use translations for default tooltips\n const defaults = {\n newChat: t('newChat'),\n back: t('back'),\n close: t('close'),\n mute: t('mute'),\n speaker: t('speaker'),\n endCall: t('endCall')\n };\n return defaults[key] || '';\n };\n\n return `\n <style>\n ${this.generateCSS(positionStyles, buttonSize, iconSize)}\n ${this.config.customStyles}\n </style>\n \n ${this.config.behavior.hidden ? '' : `\n <button id=\\\"text-chat-button\\\" \n aria-label=\\\"${this.config.accessibility.ariaLabel}\\\"\n aria-description=\\\"${this.config.accessibility.ariaDescription}\\\">\\n ${iconHTML}\\n </button>\n `}\n \n <div id=\"text-chat-panel\">\n <div class=\"widget-shell\">\n <div class=\"panel-inner widget-container\" style=\"direction: ${this.config.direction};\">\n <div class=\"widget-header\" style=\"background: ${header.backgroundColor}; color: ${header.textColor};\">\n <div>\n ${header.showTitle ? `<div class=\"header-title\">${header.title}</div>` : ''}\n <div class=\"header-status\">\n <span class=\"status-dot\"></span>\n <span>${t('online')}</span>\n </div>\n </div>\n \n <div style=\"display: flex; gap: 12px; align-items: center;\">\n <!-- New Chat Button (hide on landing screen, show otherwise) -->\n <button class=\"header-icon new-chat-btn\" id=\"newChatBtn\" title=\"${getTooltip('newChat')}\" style=\"${showLanding ? 'display: none;' : ''}\">\n <span style=\"font-size: 18px; font-weight: bold;\">+</span>\n </button>\n \n <!-- Back Button (only show in unified mode) -->\n ${widgetMode === 'unified' ? `<button class=\"header-icon back-btn\" id=\"backBtn\" title=\"${getTooltip('back')}\" style=\"display: none;\">\n <span style=\"font-size: 16px;\">‹</span>\n </button>` : ''}\n \n <!-- Close Button -->\n ${header.showCloseButton ? '<button class=\"header-icon close-btn\" id=\"closeBtn\" title=\"' + getTooltip('close') + '\">'+\n '<span style=\"font-size: 18px; font-weight: bold;\">×</span>'+\n '</button>' : ''}\n </div>\n </div>\n\n ${showLanding ? `\n <div class=\"landing-screen\" id=\"landingScreen\">\n <div class=\"landing-logo\">🤖</div>\n <div class=\"landing-title\">${t('landingTitle')}</div>\n <div class=\"mode-selection\">\n ${showVoice ? `<div class=\"mode-card voice\" id=\"mode-card-voice\">\n <div class=\"mode-card-icon\">🎤</div>\n <div class=\"mode-card-title\">${t('voiceCall')}</div>\n </div>` : ''}\n ${showText ? `<div class=\"mode-card text\" id=\"mode-card-text\">\n <div class=\"mode-card-icon\">💬</div>\n <div class=\"mode-card-title\">${t('textChat')}</div>\n </div>` : ''}\n </div>\n </div>` : ''}\n\n ${showVoice ? this.voiceInterface.generateHTML() : ''}\n ${showText ? this.textInterface.generateHTML() : ''}\n </div>\n </div>\n </div>\n `;\n }\n\n generatePositionStyles() {\n const pos = this.config.position;\n const offset = pos.offset || { x: 20, y: 20 };\n \n let styles = '';\n \n // Vertical positioning\n if (pos.vertical === 'top') {\n styles += `top: ${offset.y}px;`;\n } else if (pos.vertical === 'bottom') {\n styles += `bottom: ${offset.y}px;`;\n } else if (pos.vertical === 'center') {\n styles += `top: 50%; transform: translateY(-50%);`;\n }\n \n // Horizontal positioning\n if (pos.horizontal === 'left') {\n styles += `left: ${offset.x}px;`;\n } else if (pos.horizontal === 'right') {\n styles += `right: ${offset.x}px;`;\n } else if (pos.horizontal === 'center') {\n styles += `left: 50%; transform: translateX(-50%);`;\n }\n \n return styles;\n }\n\n generateIconHTML(size) {\n const icon = this.config.icon;\n \n switch (icon.type) {\n case 'custom':\n return `<img src=\"${icon.customImage}\" alt=\"Chat Assistant\" style=\"width: ${size}px; height: ${size}px; object-fit: contain;\" />`;\n \n case 'emoji':\n return `<span style=\"font-size: ${size}px; line-height: 1;\">${icon.emoji}</span>`;\n \n case 'text':\n return `<span style=\"font-size: ${Math.floor(size * 0.6)}px; font-weight: bold; color: white;\">${icon.text}</span>`;\n \n case 'microphone':\n default:\n return `<svg viewBox=\"0 0 24 24\" style=\"width: ${size}px; height: ${size}px; fill: white;\">\n <path d=\"M12 14c1.66 0 3-1.34 3-3V5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3z\"/>\n <path d=\"M17 11c0 2.76-2.24 5-5 5s-5-2.24-5-5H5c0 3.53 2.61 6.43 6 6.92V21h2v-3.08c3.39-.49 6-3.39 6-6.92h-2z\"/>\n </svg>`;\n \n case 'chat':\n return `<svg viewBox=\"0 0 24 24\" style=\"width: ${size}px; height: ${size}px; fill: white;\">\n <path d=\"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H6l-2 2V4h16v12z\"/>\n </svg>`;\n }\n }\n\n generateCSS(positionStyles, buttonSize, iconSize) {\n const btn = this.config.button;\n const icon = this.config.icon;\n const panel = this.config.panel;\n const header = this.config.header;\n const messages = this.config.messages;\n const anim = this.config.animation;\n \n // Determine which interfaces to show\n const widgetMode = this.config.behavior.mode || 'unified';\n const showVoice = widgetMode === 'unified' || widgetMode === 'voice-only';\n const showText = widgetMode === 'unified' || widgetMode === 'text-only';\n \n // Color references for clarity (needed for landing screen styles)\n const headerColor = header.backgroundColor;\n\n return `\n /* MOBILE FIRST - Default styles for all devices */\n #text-chat-widget {\n position: fixed !important;\n z-index: 10000;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n /* Mobile defaults */\n right: 10px;\n bottom: 10px;\n left: auto;\n top: auto;\n }\n \n /* Desktop positioning (only on larger screens) */\n @media (min-width: 769px) {\n #text-chat-widget {\n ${positionStyles}\n right: ${this.config.position.horizontal === 'right' ? '20px' : 'auto'};\n left: ${this.config.position.horizontal === 'left' ? '20px' : 'auto'};\n bottom: ${this.config.position.vertical === 'bottom' ? '20px' : 'auto'};\n top: ${this.config.position.vertical === 'top' ? '20px' : 'auto'};\n }\n }\n \n /* Mobile override (force mobile positioning) */\n @media (max-width: 768px) {\n #text-chat-widget {\n right: 10px !important;\n bottom: 10px !important;\n left: auto !important;\n top: auto !important;\n transform: none !important;\n }\n }\n \n @media (max-width: 480px) {\n #text-chat-widget {\n right: 8px !important;\n bottom: 8px !important;\n left: auto !important;\n top: auto !important;\n }\n }\n \n #text-chat-button {\n width: ${buttonSize}px;\n height: ${buttonSize}px;\n border-radius: ${btn.shape === 'circle' ? '50%' : btn.shape === 'square' ? '0' : '12px'};\n background: ${btn.backgroundColor || icon.backgroundColor || '#7C3AED'};\n border: none;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all ${anim.duration}s ease;\n box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);\n touch-action: manipulation;\n -webkit-tap-highlight-color: transparent;\n -webkit-touch-callout: none;\n user-select: none;\n min-width: 44px;\n min-height: 44px;\n }\n \n @media (max-width: 768px) {\n #text-chat-widget {\n right: 10px !important;\n bottom: 10px !important;\n left: auto !important;\n top: auto !important;\n transform: none !important;\n }\n \n #text-chat-button {\n width: 56px !important;\n height: 56px !important;\n min-width: 56px !important;\n min-height: 56px !important;\n max-width: 56px !important;\n max-height: 56px !important;\n }\n \n #text-chat-panel {\n position: fixed !important;\n left: 10px !important;\n right: 10px !important;\n bottom: 76px !important; /* 56px button + 20px gap */\n top: 60px !important; /* Add top spacing */\n width: auto !important;\n max-width: none !important;\n height: auto !important; /* Change from max-height to auto */\n max-height: none !important; /* Remove max-height */\n transform: none !important;\n margin: 0 !important;\n }\n \n #text-chat-panel .widget-header {\n padding: 10px 14px;\n min-height: 56px;\n }\n \n #text-chat-panel .header-title {\n font-size: 15px;\n }\n \n #text-chat-panel .header-icon {\n width: 40px;\n height: 40px;\n min-width: 40px;\n min-height: 40px;\n }\n \n #text-chat-input {\n font-size: 16px !important; /* Prevents iOS zoom on focus */\n padding: 12px 16px !important;\n min-height: 48px !important;\n }\n \n #text-chat-send {\n min-width: 48px !important;\n min-height: 48px !important;\n width: 48px !important;\n height: 48px !important;\n }\n \n .landing-screen {\n padding: 16px;\n }\n \n .landing-logo {\n font-size: 40px;\n }\n \n .landing-title {\n font-size: 18px;\n margin-bottom: 16px;\n }\n \n .mode-selection {\n flex-direction: column;\n gap: 12px;\n align-items: center;\n }\n \n .mode-card {\n max-width: 100%;\n width: 100%;\n padding: 16px;\n }\n \n .mode-card-icon {\n width: 50px;\n height: 50px;\n font-size: 28px;\n }\n \n .mode-card-title {\n font-size: 14px;\n }\n }\n \n @media (max-width: 480px) {\n #text-chat-widget {\n right: 8px !important;\n bottom: 8px !important;\n left: auto !important;\n top: auto !important;\n }\n \n #text-chat-button {\n width: 54px !important;\n height: 54px !important;\n min-width: 54px !important;\n min-height: 54px !important;\n }\n \n #text-chat-panel {\n left: 8px !important;\n right: 8px !important;\n bottom: 70px !important;\n top: 50px !important; /* Add top spacing for very small screens */\n height: auto !important;\n max-height: none !important;\n }\n \n #text-chat-panel .widget-header {\n padding: 8px 12px;\n min-height: 52px;\n }\n \n #text-chat-panel .header-title {\n font-size: 14px;\n }\n \n .landing-logo {\n font-size: 36px;\n }\n \n .landing-title {\n font-size: 16px;\n }\n }\n \n ${anim.enableHover ? `\n #text-chat-button:hover {\n background: linear-gradient(135deg, #764ba2 0%, #667eea 100%);\n transform: scale(1.05);\n box-shadow: 0 8px 20px rgba(102, 126, 234, 0.5);\n }\n ` : ''}\n \n #text-chat-panel {\n display: none;\n position: fixed;\n bottom: calc(${buttonSize}px + 20px);\n ${this.config.position.horizontal === 'right' ? 'right: 20px;' : 'left: 20px;'}\n width: ${panel.width}px;\n max-width: calc(100vw - 40px);\n height: ${panel.height}px;\n max-height: calc(100vh - ${buttonSize}px - 40px);\n background: transparent;\n border-radius: ${panel.borderRadius}px;\n border: none;\n flex-direction: column;\n overflow: hidden;\n ${panel.backdropFilter ? `backdrop-filter: ${panel.backdropFilter};` : ''}\n ${anim.enableSlide ? `transition: all ${anim.duration}s ease;` : ''}\n box-sizing: border-box;\n }\n \n #text-chat-panel.open {\n display: flex;\n ${anim.enableSlide ? 'transform: translateY(0); opacity: 1;' : ''}\n }\n\n /* Shell for gradient border/background */\n .widget-shell { width: 100%; height: 100%; padding: 0; border-radius: ${panel.borderRadius}px; background: transparent; box-shadow: 0 20px 60px rgba(0,0,0,0.15); overflow: hidden; display: flex; flex-direction: column; box-sizing: border-box; }\n .panel-inner { width: 100%; height: 100%; background: #ffffff; border-radius: ${panel.borderRadius}px; overflow: hidden; display:flex; flex-direction: column; padding: 0; box-sizing: border-box; max-width: 100%; }\n\n /* New structure styles matching provided design */\n #text-chat-panel .widget-container {\n width: 100%; height: 100%; min-height: 0; background: #FFFFFF; overflow: hidden; display: flex; flex-direction: column; border-radius: ${panel.borderRadius}px;\n }\n #text-chat-panel .widget-header {\n padding: 12px 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n border-top-left-radius: ${panel.borderRadius}px;\n border-top-right-radius: ${panel.borderRadius}px;\n flex-shrink: 0;\n min-height: 60px;\n box-sizing: border-box;\n }\n #text-chat-panel .header-title { font-size: 16px; font-weight: 600; }\n #text-chat-panel .header-status { display: flex; align-items: center; gap: 8px; font-size: 12px; opacity: 0.9; }\n #text-chat-panel .status-dot { width: 8px; height: 8px; background: #4ade80; border-radius: 50%; animation: pulse 2s ease-in-out infinite; }\n @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }\n /* Header icon buttons */\n .header-icon {\n background: rgba(255, 255, 255, 0.2);\n border: none;\n color: white;\n width: 36px;\n height: 36px;\n min-width: 36px;\n min-height: 36px;\n border-radius: 50%;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.2s;\n flex-shrink: 0;\n font-size: 16px;\n padding: 0;\n box-sizing: border-box;\n }\n \n .header-icon:hover {\n background: rgba(255, 255, 255, 0.3);\n }\n \n .header-icon svg {\n pointer-events: none;\n stroke: white;\n fill: none;\n }\n \n .back-btn.visible {\n display: flex !important;\n }\n\n /* Landing and mode selection (shown only if voice enabled) */\n .landing-screen { \n display: none; \n flex: 1; \n padding: 20px; \n background: ${this.config.landing?.backgroundColor || 'linear-gradient(180deg, #f8fafc 0%, #e0e7ff 100%)'}; \n align-items: center; \n justify-content: flex-start; \n flex-direction: column; \n gap: 16px; \n overflow-y: auto; \n min-height: 0; \n }\n .landing-screen.active { display: flex; }\n .landing-logo { font-size: 48px; }\n .landing-title { \n font-size: 20px; \n color: ${this.config.landing?.titleColor || '#1e293b'}; \n font-weight: 700; \n margin-bottom: 20px; \n text-align: center;\n width: 100%;\n }\n .mode-selection { display: flex; gap: 16px; width: 100%; justify-content: center; }\n .mode-card { \n flex: 1; \n max-width: 180px; \n background: ${this.config.landing?.modeCardBackgroundColor || '#FFFFFF'}; \n border: 2px solid ${this.config.landing?.modeCardBorderColor || '#E2E8F0'}; \n border-radius: 20px; \n padding: 20px 12px; \n cursor: pointer; \n display: flex; \n flex-direction: column; \n align-items: center; \n gap: 8px; \n transition: transform ${anim.duration}s ease, box-shadow ${anim.duration}s ease, border-color ${anim.duration}s ease; \n box-shadow: 0 4px 12px rgba(0,0,0,0.05); \n }\n .mode-card:hover { \n transform: translateY(-6px); \n box-shadow: 0 12px 24px rgba(102, 126, 234, 0.2); \n border-color: ${this.config.landing?.modeCardHoverBorderColor || headerColor}; \n }\n .mode-card-icon { \n width: 60px; \n height: 60px; \n display: flex; \n align-items: center; \n justify-content: center; \n border-radius: 50%; \n background: ${this.config.landing?.modeCardIconBackgroundColor || headerColor}; \n color: #fff; \n font-size: 32px; \n }\n .mode-card-title { \n color: ${this.config.landing?.modeCardTitleColor || '#111827'}; \n font-weight: 600; \n text-align: center;\n width: 100%;\n }\n\n ${showVoice ? this.voiceInterface.generateCSS() : ''}\n ${showText ? this.textInterface.generateCSS() : ''}\n \n #text-chat-send-hint {\n text-align: center;\n line-height: 1.4;\n }\n \n .agent-thinking {\n font-style: italic;\n color: #6B7280;\n }\n `;\n }\n\n setupWidgetEvents() {\n const openBtn = document.getElementById('text-chat-button');\n if (openBtn) {\n openBtn.onclick = () => this.togglePanel();\n }\n \n const closeBtn = document.getElementById('closeBtn');\n if (closeBtn) {\n closeBtn.onclick = () => this.togglePanel();\n }\n \n // Voice selection events (based on widget mode)\n const widgetMode = this.config.behavior.mode || 'unified';\n const showLanding = widgetMode === 'unified';\n const showVoice = widgetMode === 'unified' || widgetMode === 'voice-only';\n const showText = widgetMode === 'unified' || widgetMode === 'text-only';\n \n const backBtn = document.getElementById('backBtn');\n const landing = document.getElementById('landingScreen');\n const voiceCard = document.getElementById('mode-card-voice');\n const textCard = document.getElementById('mode-card-text');\n const textInterface = document.getElementById('textInterface');\n const voiceInterface = document.getElementById('voiceInterface');\n \n // Setup back button handler\n if (backBtn) {\n backBtn.onclick = () => this.showLanding();\n }\n \n if (showLanding) {\n if (voiceCard) voiceCard.onclick = () => this.showVoice();\n if (textCard) textCard.onclick = () => this.showText();\n // Initial state: landing visible in unified mode\n if (landing) landing.classList.add('active');\n if (textInterface) textInterface.classList.remove('active');\n if (voiceInterface) voiceInterface.classList.remove('active');\n // Hide back button on landing screen (only exists in unified mode)\n if (backBtn && widgetMode === 'unified') backBtn.classList.remove('visible');\n } else if (widgetMode === 'voice-only') {\n // Voice-only mode: show voice interface directly\n if (voiceInterface) voiceInterface.classList.add('active');\n if (textInterface) textInterface.classList.remove('active');\n if (landing) landing.classList.remove('active');\n // Back button doesn't exist in voice-only mode (only in unified)\n } else if (widgetMode === 'text-only') {\n // Text-only mode: show text interface directly\n if (textInterface) textInterface.classList.add('active');\n if (voiceInterface) voiceInterface.classList.remove('active');\n if (landing) landing.classList.remove('active');\n // Back button doesn't exist in text-only mode (only in unified)\n }\n \n // Setup interface event handlers\n if (showVoice) {\n this.voiceInterface.setupEventHandlers();\n }\n if (showText) {\n this.textInterface.setupEventHandlers();\n }\n \n // Setup header button handlers\n const newChatBtn = document.getElementById('newChatBtn');\n \n if (newChatBtn) {\n newChatBtn.onclick = () => this.textInterface.startNewChat();\n // Hide new chat button on landing screen initially\n if (showLanding) {\n newChatBtn.style.display = 'none';\n }\n }\n \n // Keyboard navigation\n if (this.config.accessibility.keyboardNavigation) {\n this.setupKeyboardNavigation();\n }\n }\n\n startNewChat() {\n this.textInterface.startNewChat();\n }\n\n showLanding() {\n const widgetMode = this.config.behavior.mode || 'unified';\n if (widgetMode !== 'unified') return; // Only show landing in unified mode\n const landing = document.getElementById('landingScreen');\n const textInterface = document.getElementById('textInterface');\n const voiceInterface = document.getElementById('voiceInterface');\n const backBtn = document.getElementById('backBtn');\n const newChatBtn = document.getElementById('newChatBtn');\n if (landing) landing.classList.add('active');\n if (textInterface) textInterface.classList.remove('active');\n if (voiceInterface) voiceInterface.classList.remove('active');\n // Hide back button on landing screen\n if (backBtn) backBtn.classList.remove('visible');\n // Hide new chat button on landing screen\n if (newChatBtn) newChatBtn.style.display = 'none';\n }\n\n showText() {\n const landing = document.getElementById('landingScreen');\n const voiceInterface = document.getElementById('voiceInterface');\n const backBtn = document.getElementById('backBtn');\n const newChatBtn = document.getElementById('newChatBtn');\n if (landing) landing.classList.remove('active');\n if (voiceInterface) voiceInterface.classList.remove('active');\n this.textInterface.show();\n // Show back button when not on landing (only in unified mode)\n const widgetMode = this.config.behavior.mode || 'unified';\n if (backBtn && widgetMode === 'unified') backBtn.classList.add('visible');\n // Show new chat button when not on landing\n if (newChatBtn) newChatBtn.style.display = '';\n }\n\n showVoice() {\n const landing = document.getElementById('landingScreen');\n const textInterface = document.getElementById('textInterface');\n const voiceInterface = document.getElementById('voiceInterface');\n const backBtn = document.getElementById('backBtn');\n const newChatBtn = document.getElementById('newChatBtn');\n if (landing) landing.classList.remove('active');\n if (textInterface) textInterface.classList.remove('active');\n if (voiceInterface) voiceInterface.classList.add('active');\n // Show back button when not on landing (only in unified mode)\n const widgetMode = this.config.behavior.mode || 'unified';\n if (backBtn && widgetMode === 'unified') backBtn.classList.add('visible');\n // Show new chat button when not on landing\n if (newChatBtn) newChatBtn.style.display = '';\n }\n\n setupKeyboardNavigation() {\n document.addEventListener('keydown', (e) => {\n if (e.key === 'Escape' && this.isOpen) {\n this.togglePanel();\n }\n });\n }\n\n togglePanel() {\n this.isOpen = !this.isOpen;\n const panel = document.getElementById('text-chat-panel');\n panel.classList.toggle('open');\n \n // Focus input when opening\n if (this.isOpen) {\n setTimeout(() => {\n const input = document.getElementById('messageInput');\n if (input) input.focus();\n }, 100);\n }\n \n // Auto-connect if enabled\n if (this.isOpen && !this.isActive && this.config.behavior.autoConnect) {\n this.startChat();\n }\n }\n\n async startChat() {\n // No-op with single-shot design; connection happens per message\n this.isActive = true;\n this.textInterface.setActive(true);\n }\n\n async sendMessage() {\n await this.textInterface.sendMessage();\n }\n\n updateSendButtonState() {\n this.textInterface.updateSendButtonState();\n }\n\n async getSignedUrl() {\n // If getSessionUrl is not provided, construct URL directly from agentId and appId\n if (!this.config.getSessionUrl) {\n if (!this.config.agentId) {\n throw new Error('agentId is required');\n }\n \n // Build WebSocket URL directly\n // Default uses backend.talktopc.com for text chat (path may need adjustment)\n const baseUrl = this.config.websocketUrl || 'wss://backend.talktopc.com/ws/conv';\n const params = new URLSearchParams();\n params.append('agentId', this.config.agentId);\n \n if (this.config.appId) {\n params.append('appId', this.config.appId);\n }\n \n // Add demo flag if in development\n if (this.config.demo !== false) {\n params.append('demo', 'true');\n }\n \n return `${baseUrl}?${params.toString()}`;\n }\n \n // Handle getSessionUrl as string (backend URL)\n if (typeof this.config.getSessionUrl === 'string') {\n const requestBody = {\n agentId: this.config.agentId,\n variables: this.config.variables || {}\n };\n \n // Add appId if provided in config\n if (this.config.appId) {\n requestBody.appId = this.config.appId;\n }\n \n const response = await fetch(this.config.getSessionUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(requestBody)\n });\n\n if (!response.ok) {\n throw new Error(`Failed to get session URL: ${response.statusText}`);\n }\n\n const data = await response.json();\n return data.signedUrl || data.wsUrl || data.url;\n }\n \n // Handle getSessionUrl as function\n else if (typeof this.config.getSessionUrl === 'function') {\n const params = {\n agentId: this.config.agentId,\n variables: this.config.variables || {}\n };\n \n // Add appId if provided in config\n if (this.config.appId) {\n params.appId = this.config.appId;\n }\n \n const result = await this.config.getSessionUrl(params);\n \n return typeof result === 'string' ? result : (result.signedUrl || result.wsUrl || result.url);\n }\n \n else {\n throw new Error('getSessionUrl must be a string (backend URL), a function, or omitted (for direct connection with agentId/appId)');\n }\n }\n\n // Delegated to TextInterface\n addMessage(type, text) {\n this.textInterface.addMessage(type, text);\n }\n\n beginStreaming() {\n this.textInterface.beginStreaming();\n }\n\n appendStreamingChunk(chunk) {\n this.textInterface.appendStreamingChunk(chunk);\n }\n\n finalizeStreaming(fullText) {\n this.textInterface.finalizeStreaming(fullText);\n }\n\n stopStreamingState() {\n this.textInterface.stopStreamingState();\n }\n\n showError(message) {\n this.textInterface.showError(message);\n }\n\n updateStatus(status) {\n // Status update handler (can be overridden by users)\n }\n\n // Public API methods\n updateConfig(newConfig) {\n // Deep merge nested objects\n const mergedConfig = { ...this.config };\n \n // Deep merge panel config if it exists (common config)\n if (newConfig.panel) {\n mergedConfig.panel = { ...this.config.panel, ...newConfig.panel };\n }\n \n // Deep merge voice config if it exists\n if (newConfig.voice) {\n mergedConfig.voice = { ...this.config.voice, ...newConfig.voice };\n // Deep merge micButtonHint if it exists\n if (newConfig.voice.micButtonHint) {\n mergedConfig.voice.micButtonHint = {\n ...this.config.voice?.micButtonHint,\n ...newConfig.voice.micButtonHint\n };\n }\n }\n \n // Deep merge text config if it exists\n if (newConfig.text) {\n mergedConfig.text = { ...this.config.text, ...newConfig.text };\n // Deep merge sendButtonHint if it exists\n if (newConfig.text.sendButtonHint) {\n mergedConfig.text.sendButtonHint = {\n ...this.config.text?.sendButtonHint,\n ...newConfig.text.sendButtonHint\n };\n }\n }\n \n // Update language if provided - must be before mergeWithDefaults\n if (newConfig.language !== undefined) {\n mergedConfig.language = newConfig.language;\n }\n \n // Update direction if language changed to RTL language\n if (newConfig.language !== undefined) {\n const rtlLanguages = ['he', 'ar'];\n if (rtlLanguages.includes(newConfig.language)) {\n mergedConfig.direction = 'rtl';\n } else if (newConfig.direction === undefined) {\n mergedConfig.direction = 'ltr';\n }\n }\n \n // Update translations if provided\n if (newConfig.translations) {\n mergedConfig.translations = newConfig.translations;\n this.translations = newConfig.translations;\n }\n \n // Merge other configs (shallow merge is fine for these)\n if (newConfig.button) {\n mergedConfig.button = { ...this.config.button, ...newConfig.button };\n }\n if (newConfig.header) {\n mergedConfig.header = { ...this.config.header, ...newConfig.header };\n }\n if (newConfig.icon) {\n mergedConfig.icon = { ...this.config.icon, ...newConfig.icon };\n }\n if (newConfig.messages) {\n mergedConfig.messages = { ...this.config.messages, ...newConfig.messages };\n }\n if (newConfig.animation) {\n mergedConfig.animation = { ...this.config.animation, ...newConfig.animation };\n }\n if (newConfig.behavior) {\n mergedConfig.behavior = { ...this.config.behavior, ...newConfig.behavior };\n }\n if (newConfig.accessibility) {\n mergedConfig.accessibility = { ...this.config.accessibility, ...newConfig.accessibility };\n }\n if (newConfig.tooltips) {\n mergedConfig.tooltips = { ...this.config.tooltips, ...newConfig.tooltips };\n }\n if (newConfig.landing) {\n mergedConfig.landing = { ...this.config.landing, ...newConfig.landing };\n }\n \n // Merge direction property (only if not set by language change above)\n if (newConfig.direction !== undefined && mergedConfig.direction === undefined) {\n mergedConfig.direction = newConfig.direction;\n }\n \n // Merge primaryColor if provided\n if (newConfig.primaryColor !== undefined) {\n mergedConfig.primaryColor = newConfig.primaryColor;\n }\n \n // Merge any other top-level properties\n Object.keys(newConfig).forEach(key => {\n if (!['panel', 'button', 'header', 'icon', 'messages', 'direction', 'voice', 'text', 'animation', 'behavior', 'accessibility', 'language', 'tooltips', 'landing', 'primaryColor'].includes(key)) {\n mergedConfig[key] = newConfig[key];\n }\n });\n \n // Store current language before merge to detect changes\n const oldLanguage = this.config?.language || 'en';\n \n this.config = this.mergeWithDefaults(mergedConfig);\n \n // Recreate interfaces with new config (after mergeWithDefaults, so language is current)\n // Ensure language is correctly passed - use the merged config value\n const currentLanguage = this.config.language || 'en';\n const voiceConfig = {\n ...this.config,\n ...this.config.voice,\n language: currentLanguage, // Use the current language from merged config\n websocketUrl: this.config.voice?.websocketUrl || this.config.websocketUrl || 'wss://speech.talktopc.com/ws/conv',\n translations: this.translations\n };\n this.voiceInterface = new VoiceInterface(voiceConfig);\n const textConfig = {\n ...this.config,\n ...this.config.text,\n language: currentLanguage, // Ensure language is set from merged config\n translations: this.translations\n };\n this.textInterface = new TextInterface(textConfig, this.sdk);\n \n // Recreate widget with new config\n const existingWidget = document.getElementById('text-chat-widget');\n if (existingWidget) {\n existingWidget.remove();\n }\n this.createWidget();\n \n // Update input attributes in case widget was recreated\n if (this.textInterface && this.textInterface.updateInputAttributes) {\n this.textInterface.updateInputAttributes();\n }\n }\n\n destroy() {\n const widget = document.getElementById('text-chat-widget');\n if (widget) {\n widget.remove();\n }\n if (this.sdk) {\n this.sdk.destroy();\n }\n // Clean up interface resources\n if (this.voiceInterface) {\n this.voiceInterface.destroy();\n }\n }\n\n // Delegated to VoiceInterface\n async startVoiceCall() {\n await this.voiceInterface.startVoiceCall();\n }\n\n endVoiceCall() {\n this.voiceInterface.endVoiceCall();\n }\n\n toggleMute() {\n this.voiceInterface.toggleMute();\n }\n\n toggleSpeaker() {\n this.voiceInterface.toggleSpeaker();\n }\n}\n\n","/**\n * TTP Agent SDK - Main Entry Point\n * \n * A comprehensive SDK for voice and text interaction with AI agents.\n * Provides real-time audio recording, WebSocket communication, and audio playback.\n * \n * Features:\n * - 🎤 Real-time Audio Recording with AudioWorklet\n * - 💬 Text Chat Support\n * - 🔄 WebSocket Communication with authentication\n * - 🔊 Audio Playback with queue management\n * - ⚛️ React Components\n * - 🌐 Vanilla JavaScript Components\n * - 🎯 Event-driven architecture\n * - 🔒 Multiple authentication methods\n */\n\n// Core SDK\nimport VoiceSDK from './core/VoiceSDK.js';\nimport TextChatSDK from './core/TextChatSDK.js';\nimport WebSocketManager from './core/WebSocketManager.js';\nimport AudioRecorder from './core/AudioRecorder.js';\nimport AudioPlayer from './core/AudioPlayer.js';\nimport EventEmitter from './core/EventEmitter.js';\n\n// React components\nimport VoiceButton from './react/VoiceButton.jsx';\n\n// Vanilla JavaScript components\nimport VanillaVoiceButton from './vanilla/VoiceButton.js';\n\n// Legacy AgentSDK (for backward compatibility)\nimport { AgentSDK, AgentWidget } from './legacy/AgentSDK.js';\nimport { TextChatWidget } from './legacy/TextChatWidget.js';\n\n// Version\nexport const VERSION = '2.0.0';\n\n// Named exports\nexport {\n VoiceSDK,\n TextChatSDK,\n WebSocketManager,\n AudioRecorder,\n AudioPlayer,\n EventEmitter,\n VoiceButton,\n VanillaVoiceButton,\n AgentSDK,\n AgentWidget,\n TextChatWidget\n};\n\n// Default export for convenience\nexport default {\n VoiceSDK,\n TextChatSDK,\n WebSocketManager,\n AudioRecorder,\n AudioPlayer,\n EventEmitter,\n VoiceButton,\n VanillaVoiceButton,\n AgentSDK,\n AgentWidget,\n TextChatWidget,\n VERSION\n};\n"],"names":["root","factory","exports","module","define","amd","window","REACT_ELEMENT_TYPE","Symbol","for","jsxProd","type","config","maybeKey","key","propName","ref","$$typeof","props","jsx","jsxs","iterator","ReactNoopUpdateQueue","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","assign","Object","emptyObject","Component","context","updater","this","refs","ComponentDummy","PureComponent","prototype","isReactComponent","setState","partialState","callback","Error","forceUpdate","pureComponentPrototype","constructor","isPureReactComponent","Array","isArray","ReactSharedInternals","H","A","T","S","hasOwnProperty","reportError","useEffect","create","deps","useRef","initialValue","useState","initialState","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","o","defineProperty","enumerable","get","obj","prop","call","r","toStringTag","value","EventEmitter","_classCallCheck","events","event","push","filter","cb","_len","arguments","length","args","_key","forEach","apply","error","console","concat","e","t","n","i","c","Generator","u","_regeneratorDefine2","f","p","y","G","v","a","bind","l","TypeError","done","return","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","_invoke","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_defineProperties","_toPropertyKey","_typeof","toPrimitive","String","_toPrimitive","_isNativeReflectConstruct","Boolean","valueOf","Reflect","construct","_getPrototypeOf","_setPrototypeOf","_EventEmitter","WebSocketSingleton","_this","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","_callSuper","connections","Map","connectionCounts","creatingConnections","Set","_inherits","_callee","url","existingConnection","connection","_this2","_context","has","set","checkConnection","setTimeout","add","WebSocket","addEventListener","delete","emit","_getConnection","_next","_throw","_x","currentCount","newCount","Math","max","readyState","OPEN","close","exists","subscribers","_step","result","_iterator","_createForOfIteratorHelper","entries","s","_step$value","_slicedToArray","err","_step2","_iterator2","_step2$value","clear","WebSocketManager","ws","isConnected","connectionId","reject","Date","now","random","toString","substr","connectResolve","connectReject","webSocketSingleton","getConnection","websocketUrl","setupEventListeners","catch","_connect","_this3","handleOpen","handleClose","handleError","handleMessage","on","eventHandlers","open","message","off","releaseConnection","send","JSON","stringify","warn","data","_this4","ArrayBuffer","Blob","arrayBuffer","parse","getAllConnections","clearAll","_asyncToGenerator","AudioRecorder","audioContext","audioWorkletNode","mediaStream","isRecording","_start","_t","navigator","mediaDevices","getUserMedia","audio","sampleRate","channelCount","echoCancellation","noiseSuppression","autoGainControl","AudioContext","webkitAudioContext","state","resume","audioWorklet","addModule","AudioWorkletNode","createMediaStreamSource","connect","port","onmessage","_event$data","postMessage","enabled","_stop","_callee2","_t2","_context2","getTracks","track","stop","audioContextState","AudioPlayer","audioQueue","isPlaying","isProcessingQueue","currentSource","audioData","audioBlob","createAudioBlob","processQueue","uint8Array","Uint8Array","wasNotPlayingBefore","audioBuffer","isTrulyStarting","source","shift","decodeAudioData","createBufferSource","buffer","destination","onended","start","_processQueue","stopImmediate","wasPlaying","queueLength","ownKeys","keys","getOwnPropertySymbols","getOwnPropertyDescriptor","_objectSpread","_defineProperty","getOwnPropertyDescriptors","defineProperties","VoiceSDK","agentId","appId","ttpId","voice","language","isDestroyed","webSocketManager","autoReconnect","audioRecorder","audioPlayer","setupEventHandlers","sendHelloMessage","stopRecording","binaryString","atob","charCodeAt","playAudio","sendMessage","sendBinary","wsUrl","buildWebSocketUrl","params","URLSearchParams","append","separator","includes","disconnect","resetReconnectionAttempts","_reconnect","_startRecording","_callee3","_context3","generateTtpId","_stopRecording","_callee4","_t3","_context4","_toggleRecording","_callee5","_context5","startRecording","_handleBargeIn","_callee6","_context6","stopAudioPlayback","newConfig","helloMessage","destroy","removeAllListeners","TextChatSDK","scriptConfig","readScriptTagConfig","baseWsUrl","conversationId","getPersistedConversationId","forceConversationId","queue","inFlight","fullResponseBuffer","sdkScript","from","document","getElementsByTagName","reverse","find","dataset","src","_","base","text","trim","task","executeTask","_sendMessage","persisted","log","socket","primaryUrl","fallbackBase","endsWith","replace","fallbackUrl","triedFallback","messageSent","helloWaitTimer","sendPayload","payload","effectiveConvId","persistConversationId","evt","clearTimeout","content","finalText","answer","fullText","drainQueue","onopen","onerror","fb","onclose","next","localStorage","setItem","getItem","_arrayWithHoles","_iterableToArrayLimit","_arrayLikeToArray","slice","name","test","_unsupportedIterableToArray","_nonIterableRest","_ref","_ref$voice","_ref$language","_ref$autoReconnect","onConnected","onDisconnected","onRecordingStarted","onRecordingStopped","onPlaybackStarted","onPlaybackStopped","onError","onMessage","onBargeIn","onStopPlaying","_ref$className","className","_ref$style","style","children","_useState2","setIsConnected","_useState4","setIsRecording","_useState6","setIsPlaying","_useState8","setConnectionStatus","voiceSDKRef","current","voiceSDK","handleClick","_ref2","toggleRecording","defaultContent","_jsxs","display","alignItems","gap","_jsx","fontSize","padding","border","borderRadius","backgroundColor","color","cursor","fontWeight","transition","onClick","disabled","VoiceButton","options","container","body","buttonText","buttonClass","createButton","_this$options$onConne","_this$options","updateButton","_this$options$onDisco","_this$options2","_this$options$onRecor","_this$options3","_this$options$onRecor2","_this$options4","_this$options$onPlayb","_this$options5","_this$options$onPlayb2","_this$options6","_this$options$onError","_this$options7","_this$options$onMessa","_this$options8","_this$options$onBarge","_this$options9","_this$options$onStopP","_this$options0","button","createElement","cssText","appendChild","icon","innerHTML","updateConfig","parentNode","removeChild","_createClass","AgentSDK","isListening","onTranscript","onAgentSpeaking","isStart","signedUrl","handleWebSocketMessage","user_transcription","_startListening","variables","AgentWidget","mergeWithDefaults","sdk","isOpen","isActive","createWidget","behavior","startOpen","autoOpen","panel","getElementById","classList","userConfig","_userConfig$button","_userConfig$icon","_userConfig$icon2","_userConfig$icon3","_userConfig$icon4","_userConfig$icon5","_userConfig$icon6","_userConfig$button2","_userConfig$button3","_userConfig$button4","_userConfig$icon7","_userConfig$button5","_userConfig$button6","_userConfig$button7","_userConfig$button8","_userConfig$icon8","_userConfig$panel","_userConfig$panel2","_userConfig$panel3","_userConfig$panel4","_userConfig$panel5","_userConfig$panel6","_userConfig$panel7","_userConfig$panel8","_userConfig$panel9","_userConfig$panel0","_userConfig$panel1","_userConfig$panel10","_userConfig$header","_userConfig$header2","_userConfig$header3","_userConfig$button9","_userConfig$header4","_userConfig$header5","_userConfig$messages","_userConfig$messages2","_userConfig$messages3","_userConfig$messages4","_userConfig$messages5","_userConfig$messages6","_userConfig$messages7","_userConfig$animation","_userConfig$animation2","_userConfig$animation3","_userConfig$animation4","_userConfig$behavior","_userConfig$behavior2","_userConfig$behavior3","_userConfig$behavior4","_userConfig$behavior5","_userConfig$behavior6","_userConfig$accessibi","_userConfig$accessibi2","_userConfig$accessibi3","positionConfig","position","parts","split","vertical","horizontal","offset","positionOffset","x","primaryColor","getSessionUrl","demo","direction","customImage","emoji","size","shape","hoverColor","shadow","shadowColor","width","height","backdropFilter","micButtonColor","micButtonActiveColor","micButtonHint","header","title","showTitle","textColor","showCloseButton","messages","userBackgroundColor","agentBackgroundColor","systemBackgroundColor","errorBackgroundColor","animation","enableHover","enablePulse","enableSlide","duration","hidden","autoConnect","showWelcomeMessage","welcomeMessage","accessibility","ariaLabel","ariaDescription","keyboardNavigation","customStyles","positionString","updateStatus","addMessage","updateMicButtonState","showError","showAgentThinking","hideAgentThinking","widget","id","generateWidgetHTML","setupWidgetEvents","btn","buttonSize","small","medium","large","xl","iconSize","positionStyles","generatePositionStyles","iconHTML","generateIconHTML","generateCSS","pos","styles","floor","anim","floatingButtonColor","headerColor","openBtn","onclick","togglePanel","closeBtn","toggleVoice","setupKeyboardNavigation","toggle","_toggleVoice","connected","attempts","getSignedUrl","startListening","stopListening","micButton","iconElement","querySelector","tagName","remove","_getSignedUrl","baseUrl","requestBody","response","_params","fetch","method","headers","ok","statusText","json","textContent","scrollTop","scrollHeight","thinking","status","_this$config$panel","mergedConfig","existingWidget","VoiceInterface","audioStream","callStartTime","callTimerInterval","setupSDKEventHandlers","updateTranscript","avatar","_this$config$translat","_this$config$translat2","lang","translations","en","_this$config$tooltips","tooltip","tooltips","mute","speaker","endCall","getTooltip","avatarBg","avatarBackgroundColor","avatarActiveBg","avatarActiveBackgroundColor","statusTitleColor","statusSubtitleColor","startCallBtnColor","startCallButtonColor","startCallBtnTextColor","startCallButtonTextColor","transcriptBg","transcriptBackgroundColor","transcriptTextColor","transcriptLabelColor","controlBtnColor","controlButtonColor","controlBtnSecondaryColor","controlButtonSecondaryColor","endCallBtnColor","endCallButtonColor","callbacks","startCallBtn","endCallBtn","muteBtn","speakerBtn","startVoiceCall","endVoiceCall","toggleMute","toggleSpeaker","_startVoiceCall","idleState","activeState","voiceInterface","_idleState","_activeState","setInterval","elapsed","minutes","seconds","timerEl","padStart","clearInterval","transcriptEl","audioTrack","getAudioTracks","muteIcon","muteCross","stroke","TextInterface","streamingEl","hasStartedStreaming","_this$config$sendButt","_this$config$panel2","_this$config$sendButt2","_this$config$panel3","_this$config$sendButt3","_this$config$panel4","_this$config$sendButt4","_this$config$panel5","inputPlaceholder","sendButtonText","sendButtonHint","_this$config$panel6","_this$config$panel7","_this$config$panel8","_this$config$panel9","_this$config$panel0","_this$config$panel1","_this$config$panel10","_this$config$panel11","_this$config$panel12","_this$config$panel13","_this$config$panel14","_this$config$panel15","_this$config$panel16","sendButtonColor","sendButtonHoverColor","sendButtonTextColor","inputBorderColor","inputFocusColor","inputBackgroundColor","inputTextColor","inputFontSize","inputBorderRadius","inputPadding","sendButtonFontSize","sendButtonFontWeight","sendButton","inputField","newChatBtn","startNewChat","updateInputAttributes","overflow","autoResize","newHeight","min","overflowY","shiftKey","preventDefault","removeItem","input","focus","_this$config$panel17","placeholder","dir","textAlign","textInterface","_startChat","updateSendButtonState","startChat","beginStreaming","stopStreamingState","emptyState","edgeClass","bubble","el","chunk","existing","active","TextChatWidget","_this$config$voice","_this$config$voice2","widgetTranslations","voiceConfig","textConfig","_userConfig$button0","_userConfig$voice","_userConfig$voice2","_userConfig$voice3","_userConfig$voice4","_userConfig$voice5","_userConfig$voice6","_userConfig$voice7","_userConfig$voice8","_userConfig$voice9","_userConfig$voice0","_userConfig$voice1","_userConfig$voice10","_userConfig$voice11","_userConfig$voice12","_userConfig$voice13","_userConfig$voice14","_userConfig$voice15","_userConfig$voice16","_userConfig$voice17","_userConfig$voice18","_userConfig$text","_userConfig$panel11","_userConfig$text2","_userConfig$panel12","_userConfig$text3","_userConfig$panel13","_userConfig$text4","_userConfig$panel14","_userConfig$text5","_userConfig$panel15","_userConfig$text6","_userConfig$panel16","_userConfig$text7","_userConfig$panel17","_userConfig$text8","_userConfig$panel18","_userConfig$text9","_userConfig$panel19","_userConfig$text0","_userConfig$panel20","_userConfig$text1","_userConfig$panel21","_userConfig$text10","_userConfig$panel22","_userConfig$text11","_userConfig$panel23","_userConfig$text12","_userConfig$panel24","_userConfig$text13","_userConfig$panel25","_userConfig$text14","_userConfig$panel26","_userConfig$text15","_userConfig$panel27","_userConfig$text16","_userConfig$panel28","_userConfig$text17","_userConfig$panel29","_userConfig$landing","_userConfig$landing2","_userConfig$landing3","_userConfig$landing4","_userConfig$landing5","_userConfig$landing6","_userConfig$landing7","_userConfig$landing8","_userConfig$landing9","_userConfig$landing0","_userConfig$landing1","_userConfig$button1","_userConfig$header6","_userConfig$tooltips","_userConfig$tooltips2","_userConfig$tooltips3","_userConfig$tooltips4","_userConfig$tooltips5","_userConfig$tooltips6","_userConfig$behavior7","_userConfig$behavior8","sendButtonActiveColor","landing","logo","titleColor","modeCardBackgroundColor","modeCardBorderColor","modeCardHoverBorderColor","modeCardIconBackgroundColor","modeCardTitleColor","voiceCardIcon","textCardIcon","newChat","back","enableVoiceMode","mode","appendStreamingChunk","finalizeStreaming","widgetMode","showLanding","showVoice","showText","_this2$config$tooltip","generateHTML","_this$config$landing","_this$config$landing2","_this$config$landing3","_this$config$landing4","_this$config$landing5","_this$config$landing6","_this$config$landing7","backBtn","voiceCard","textCard","show","setActive","_this$config","_this$config$voice4","_this$config$voice3","_this$config$text","currentLanguage","VERSION","VanillaVoiceButton"],"sourceRoot":""}
|