ttp-agent-sdk 2.2.20 → 2.2.21

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.
@@ -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 * Get the audio processor path\n * Tries to detect from script source, falls back to config or default\n */\n getAudioProcessorPath() {\n // If explicitly configured, use it\n if (this.config.audioProcessorPath) {\n return this.config.audioProcessorPath;\n }\n \n // Try to find the script that loaded the SDK\n const scripts = document.getElementsByTagName('script');\n for (let script of scripts) {\n const src = script.src;\n // Check if this is the agent-widget.js script\n if (src && (src.includes('agent-widget.js') || src.includes('ttp-agent-sdk'))) {\n // Extract base URL and construct processor path\n try {\n const url = new URL(src);\n const basePath = src.substring(0, src.lastIndexOf('/'));\n return `${basePath}/audio-processor.js`;\n } catch (e) {\n // If URL parsing fails, try to extract path manually\n const basePath = src.substring(0, src.lastIndexOf('/'));\n return `${basePath}/audio-processor.js`;\n }\n }\n }\n \n // Fallback to CDN\n return 'https://cdn.talktopc.com/audio-processor.js';\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 // Get the audio processor path\n const processorPath = this.getAudioProcessorPath();\n \n // Load AudioWorklet module\n await this.audioContext.audioWorklet.addModule(processorPath);\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 // Check if disconnect was due to domain whitelist violation\n if (event && event.code === 1008 && event.reason && \n (event.reason.includes('Domain not whitelisted') || \n event.reason.includes('domain') || \n event.reason.includes('whitelist'))) {\n const domainError = new Error('DOMAIN_NOT_WHITELISTED');\n domainError.reason = event.reason;\n domainError.code = event.code;\n this.emit('domainError', domainError);\n this.emit('error', domainError);\n }\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 = (event) => {\n // Check if connection was closed due to domain whitelist violation\n if (event.code === 1008 && event.reason && \n (event.reason.includes('Domain not whitelisted') || \n event.reason.includes('domain') || \n event.reason.includes('whitelist'))) {\n const domainError = new Error('DOMAIN_NOT_WHITELISTED');\n domainError.reason = event.reason;\n domainError.code = event.code;\n // Only emit domainError, not error - to avoid duplicate handling\n this.emit('domainError', domainError);\n task.reject(domainError);\n // Reset inFlight and drain queue to allow subsequent messages\n this.config.inFlight = false;\n this.drainQueue();\n return;\n }\n \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', (event) => {\n this.isConnected = false;\n // Check if disconnect was due to domain whitelist violation\n if (event && event.code === 1008 && event.reason && \n (event.reason.includes('Domain not whitelisted') || \n event.reason.includes('domain') || \n event.reason.includes('whitelist'))) {\n const domainError = new Error('DOMAIN_NOT_WHITELISTED');\n domainError.reason = event.reason;\n domainError.code = event.code;\n this.onError(domainError);\n }\n this.onDisconnected();\n });\n \n this.voiceSDK.on('domainError', (error) => {\n this.onError(error);\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 * VoiceInterface - Handles voice call UI and functionality\n * Part of the unified TTPChatWidget\n * Optimized for Wix iframe embedding\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 // Check if it's a domain error\n if (error && (error.message === 'DOMAIN_NOT_WHITELISTED' || \n (error.message && error.message.includes('Domain not whitelisted')))) {\n this.showDomainError();\n } else {\n this.showError(error.message || error);\n }\n };\n }\n\n /**\n * Helper function to get translated text\n */\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\">\n <div class=\"voice-avatar\" id=\"voiceAvatar\">🤖</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 <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;\">\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 - Optimized for small heights\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 - Ultra-compact for Wix iframes */\n .voice-interface { \n display: none; \n flex: 1; \n flex-direction: column;\n align-items: center; \n justify-content: center; \n padding: 6px 10px 6px 10px; \n background: linear-gradient(180deg, #f8fafc 0%, #e0e7ff 100%);\n overflow: hidden;\n min-height: 0;\n height: 100%;\n width: 100%;\n box-sizing: border-box;\n }\n .voice-interface.active { display: flex; }\n \n /* Voice States - Better scaling gaps */\n #voiceIdleState,\n #voiceActiveState {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n height: 100%;\n min-height: 0;\n justify-content: center;\n overflow: hidden;\n flex: 1;\n box-sizing: border-box;\n gap: clamp(6px, 1.5vh, 12px);\n }\n \n #voiceActiveState[style*=\"display: none\"] {\n display: none !important;\n }\n \n /* Voice Avatar - Scales better from small to large */\n .voice-avatar,\n .voice-avatar-active {\n width: clamp(80px, 18vh, 160px);\n height: clamp(80px, 18vh, 160px);\n aspect-ratio: 1;\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: clamp(40px, 9vh, 80px);\n margin: 0;\n box-shadow: 0 8px 30px rgba(102, 126, 234, 0.3);\n transition: all 0.3s ease;\n flex-shrink: 1;\n position: relative;\n }\n \n .voice-avatar-active {\n animation: avatarPulse 2s ease-in-out infinite;\n }\n \n @keyframes avatarPulse {\n 0%, 100% { \n transform: scale(1);\n }\n 50% { \n transform: scale(1.05);\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 - Scales with container */\n .voice-status {\n text-align: center;\n margin: 0;\n flex-shrink: 1;\n min-height: 0;\n }\n \n .voice-status-title {\n font-size: clamp(12px, 3vh, 20px);\n font-weight: 600;\n color: ${statusTitleColor};\n margin-bottom: clamp(2px, 0.5vh, 4px);\n line-height: 1.2;\n }\n \n .voice-status-subtitle {\n font-size: clamp(10px, 2vh, 14px);\n color: ${statusSubtitleColor};\n line-height: 1.2;\n }\n \n /* Start Call Button - Scales with container */\n .start-call-btn {\n margin: 0;\n width: min(280px, 70vw);\n height: clamp(48px, 8vh, 64px);\n border-radius: clamp(24px, 4vh, 32px);\n border: none;\n background: ${startCallBtnColor};\n color: ${startCallBtnTextColor};\n font-size: clamp(14px, 2.5vh, 18px);\n font-weight: 600;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: clamp(8px, 1.5vh, 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 svg {\n width: clamp(22px, 4vh, 32px);\n height: clamp(22px, 4vh, 32px);\n }\n \n .start-call-btn:hover {\n transform: translateY(-2px);\n box-shadow: 0 12px 28px rgba(102, 126, 234, 0.5);\n }\n \n .start-call-btn:active {\n transform: translateY(-1px);\n }\n \n /* Voice Transcript - Scales with container */\n .voice-transcript {\n background: ${transcriptBg};\n padding: clamp(6px, 1.5vh, 12px);\n border-radius: 10px;\n width: min(360px, calc(100% - 40px));\n margin: 0;\n min-height: clamp(45px, 10vh, 80px);\n max-height: clamp(70px, 16vh, 110px);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n flex-shrink: 1;\n overflow-y: auto;\n overflow-x: hidden;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n }\n \n .transcript-label {\n font-size: clamp(8px, 1.4vh, 11px);\n color: ${transcriptLabelColor};\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n margin-bottom: clamp(3px, 0.6vh, 6px);\n flex-shrink: 0;\n word-wrap: break-word;\n }\n \n .transcript-text {\n font-size: clamp(11px, 2vh, 15px);\n color: ${transcriptTextColor};\n line-height: 1.4;\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n word-wrap: break-word;\n overflow-wrap: break-word;\n }\n \n .transcript-text.empty {\n color: #cbd5e1;\n font-style: italic;\n }\n \n /* Voice Controls - Scales with container */\n .voice-controls {\n display: flex;\n gap: clamp(8px, 1.8vh, 14px);\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n margin: 0;\n padding-top: clamp(5px, 1.2vh, 10px);\n }\n \n .voice-control-btn {\n width: clamp(48px, 9vh, 72px);\n height: clamp(48px, 9vh, 72px);\n aspect-ratio: 1;\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 svg {\n width: 48%;\n height: 48%;\n }\n \n .voice-control-btn.primary {\n width: clamp(54px, 10vh, 80px);\n height: clamp(54px, 10vh, 80px);\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n box-shadow: 0 6px 18px rgba(102, 126, 234, 0.4);\n }\n \n .voice-control-btn.primary:hover {\n transform: scale(1.05);\n }\n \n .voice-control-btn.primary.active {\n background: white;\n animation: recordingPulse 1.5s ease-in-out infinite;\n }\n \n @keyframes recordingPulse {\n 0%, 100% { \n box-shadow: 0 6px 16px rgba(239, 68, 68, 0.4);\n }\n 50% { \n box-shadow: 0 6px 24px rgba(239, 68, 68, 0.7);\n }\n }\n \n .voice-control-btn.secondary {\n background: ${controlBtnColor};\n color: ${controlBtnSecondaryColor};\n box-shadow: 0 3px 10px 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: clamp(-18px, -3vh, -24px);\n font-size: clamp(9px, 1.6vh, 12px);\n color: #64748b;\n font-weight: 500;\n white-space: nowrap;\n }\n \n /* Mobile optimization */\n @media (max-width: 768px) {\n .voice-interface {\n padding: 6px 10px;\n }\n }\n \n @media (max-width: 480px) {\n .voice-interface {\n padding: 5px 8px;\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 // Adjust sizes when the interface first loads - with retries\n const tryAdjustSizes = (attempt = 0) => {\n const voiceInterface = document.getElementById('voiceInterface');\n if (voiceInterface && voiceInterface.classList.contains('active')) {\n console.log('✅ Interface is active, adjusting sizes (attempt', attempt + 1, ')');\n this.adjustSizesForContainer();\n } else if (attempt < 10) {\n console.log('⏳ Interface not active yet, retrying... (attempt', attempt + 1, ')');\n setTimeout(() => tryAdjustSizes(attempt + 1), 200);\n } else {\n console.warn('⚠️ Interface never became active, adjusting sizes anyway');\n this.adjustSizesForContainer();\n }\n };\n \n setTimeout(() => tryAdjustSizes(), 100);\n \n // Also adjust on window resize\n window.addEventListener('resize', () => this.adjustSizesForContainer());\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 * Adjust UI sizes based on container height\n */\n adjustSizesForContainer() {\n const voiceInterface = document.getElementById('voiceInterface');\n if (!voiceInterface) {\n console.warn('⚠️ voiceInterface not found, skipping size adjustment');\n return;\n }\n \n const containerHeight = voiceInterface.clientHeight;\n const containerWidth = voiceInterface.clientWidth;\n \n console.log('📏 Container size:', containerHeight, 'x', containerWidth);\n \n // Check if we have visible elements\n const idleState = document.getElementById('voiceIdleState');\n const activeState = document.getElementById('voiceActiveState');\n const isIdleVisible = idleState && idleState.style.display !== 'none';\n const isActiveVisible = activeState && activeState.style.display !== 'none';\n \n console.log('👁️ Visible state - Idle:', isIdleVisible, 'Active:', isActiveVisible);\n \n // Calculate sizes ensuring everything fits\n // Total height = padding + gaps + avatar + status + transcript + controls\n const padding = 12; // top + bottom padding\n const gapsCount = 4; // gaps between elements\n \n let avatarSize, avatarFontSize, titleSize, subtitleSize, statusHeight, transcriptHeight, buttonSize, primaryButtonSize, gapSize;\n \n if (containerHeight <= 350) {\n // Very small - ultra compact\n gapSize = 5;\n avatarSize = 70;\n avatarFontSize = 35;\n titleSize = 11;\n subtitleSize = 9;\n statusHeight = 32;\n transcriptHeight = 45;\n buttonSize = 42;\n primaryButtonSize = 48;\n } else if (containerHeight <= 450) {\n // Small (400-420px) - BIGGER AVATAR for 500px Wix height\n gapSize = 7;\n avatarSize = 110; // Increased from 85 to 110\n avatarFontSize = 55; // Increased from 42 to 55\n titleSize = 15; // Increased from 13\n subtitleSize = 11; // Increased from 10\n statusHeight = 38;\n transcriptHeight = 58; // Slightly reduced\n buttonSize = 52; // Increased from 48\n primaryButtonSize = 58; // Increased from 54\n } else if (containerHeight <= 550) {\n // Medium (500px) - BIGGER ROBOT\n gapSize = 8;\n avatarSize = 140; // Increased from 110 to 140\n avatarFontSize = 70; // Increased from 55 to 70\n titleSize = 16; // Increased from 15\n subtitleSize = 12; // Increased from 11\n statusHeight = 42;\n transcriptHeight = 68; // Reduced slightly to compensate for bigger robot\n buttonSize = 56; // Increased from 54\n primaryButtonSize = 64; // Increased from 62\n } else if (containerHeight <= 700) {\n // Medium-Large (600px)\n gapSize = 10;\n avatarSize = 130;\n avatarFontSize = 65;\n titleSize = 18;\n subtitleSize = 13;\n statusHeight = 46;\n transcriptHeight = 85;\n buttonSize = 60;\n primaryButtonSize = 70;\n } else {\n // Large (700+)\n gapSize = 12;\n avatarSize = 150;\n avatarFontSize = 75;\n titleSize = 20;\n subtitleSize = 14;\n statusHeight = 50;\n transcriptHeight = 100;\n buttonSize = 66;\n primaryButtonSize = 76;\n }\n \n // Apply gap size\n const stateContainers = document.querySelectorAll('#voiceIdleState, #voiceActiveState');\n stateContainers.forEach(container => {\n container.style.gap = `${gapSize}px`;\n });\n \n // Apply sizes to avatar\n const avatars = document.querySelectorAll('.voice-avatar, .voice-avatar-active');\n console.log('🤖 Found', avatars.length, 'avatars, setting size to', avatarSize, 'px');\n avatars.forEach(avatar => {\n avatar.style.width = `${avatarSize}px`;\n avatar.style.height = `${avatarSize}px`;\n avatar.style.fontSize = `${avatarFontSize}px`;\n });\n \n // Apply sizes to status text\n const statusTitle = document.querySelectorAll('.voice-status-title');\n statusTitle.forEach(el => el.style.fontSize = `${titleSize}px`);\n \n const statusSubtitle = document.querySelectorAll('.voice-status-subtitle');\n statusSubtitle.forEach(el => el.style.fontSize = `${subtitleSize}px`);\n \n // Apply sizes to transcript\n const transcript = document.querySelector('.voice-transcript');\n if (transcript) {\n transcript.style.minHeight = `${transcriptHeight}px`;\n transcript.style.maxHeight = `${transcriptHeight}px`;\n transcript.style.height = `${transcriptHeight}px`;\n transcript.style.width = `min(360px, ${containerWidth - 40}px)`; // Ensure it doesn't overflow\n transcript.style.boxSizing = 'border-box';\n }\n \n const transcriptLabel = document.querySelector('.transcript-label');\n if (transcriptLabel) {\n transcriptLabel.style.fontSize = `${Math.max(8, titleSize - 4)}px`;\n }\n \n const transcriptText = document.querySelector('.transcript-text');\n if (transcriptText) {\n transcriptText.style.fontSize = `${Math.max(10, titleSize - 2)}px`;\n }\n \n // Apply sizes to control buttons\n const secondaryButtons = document.querySelectorAll('.voice-control-btn.secondary');\n secondaryButtons.forEach(btn => {\n btn.style.width = `${buttonSize}px`;\n btn.style.height = `${buttonSize}px`;\n \n // Scale the SVG icon inside the button - much bigger!\n const svg = btn.querySelector('svg');\n if (svg) {\n const iconSize = buttonSize * 0.65; // Increased from 50% to 65%\n svg.style.setProperty('width', `${iconSize}px`, 'important');\n svg.style.setProperty('height', `${iconSize}px`, 'important');\n svg.style.setProperty('min-width', `${iconSize}px`, 'important');\n svg.style.setProperty('min-height', `${iconSize}px`, 'important');\n }\n });\n \n const primaryButton = document.querySelector('.voice-control-btn.primary');\n if (primaryButton) {\n primaryButton.style.width = `${primaryButtonSize}px`;\n primaryButton.style.height = `${primaryButtonSize}px`;\n \n // Scale the SVG icon inside the primary button - much bigger!\n const svg = primaryButton.querySelector('svg');\n if (svg) {\n const iconSize = primaryButtonSize * 0.70; // Increased from 55% to 70%\n svg.style.setProperty('width', `${iconSize}px`, 'important');\n svg.style.setProperty('height', `${iconSize}px`, 'important');\n svg.style.setProperty('min-width', `${iconSize}px`, 'important');\n svg.style.setProperty('min-height', `${iconSize}px`, 'important');\n }\n }\n \n // Apply to start call button\n const startCallBtn = document.querySelector('.start-call-btn');\n if (startCallBtn) {\n let btnHeight, btnFontSize;\n if (containerHeight <= 350) {\n btnHeight = 48;\n btnFontSize = 14;\n } else if (containerHeight <= 450) {\n btnHeight = 52;\n btnFontSize = 15;\n } else if (containerHeight <= 550) {\n btnHeight = 58; // Bigger button at 500px\n btnFontSize = 17;\n } else if (containerHeight <= 700) {\n btnHeight = 62;\n btnFontSize = 18;\n } else {\n btnHeight = 64;\n btnFontSize = 18;\n }\n startCallBtn.style.height = `${btnHeight}px`;\n startCallBtn.style.fontSize = `${btnFontSize}px`;\n \n // Also adjust the SVG icon size in the button\n const btnIcon = startCallBtn.querySelector('svg');\n if (btnIcon) {\n const iconSize = Math.max(22, btnHeight * 0.5);\n btnIcon.style.width = `${iconSize}px`;\n btnIcon.style.height = `${iconSize}px`;\n }\n }\n \n console.log('✅ Sizes adjusted - Avatar:', avatarSize, 'Status:', statusHeight, 'Transcript:', transcriptHeight, 'Buttons:', buttonSize);\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 // Adjust sizes based on container dimensions\n setTimeout(() => this.adjustSizesForContainer(), 50);\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 // Re-adjust sizes for idle state\n setTimeout(() => this.adjustSizesForContainer(), 50);\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 * Show domain validation error\n */\n showDomainError() {\n const transcriptEl = document.getElementById('transcriptText');\n if (transcriptEl) {\n const title = this.t('domainNotValidated');\n const message = this.t('domainErrorMessage');\n transcriptEl.innerHTML = `<div style=\"font-weight: 600; font-size: 16px; margin-bottom: 8px; color: #991B1B;\">${title}</div><div style=\"font-size: 14px; color: #991B1B; line-height: 1.5;\">${message}</div>`;\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 * TextInterface - Handles text chat UI and functionality\n * Part of the unified TTPChatWidget\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 // Store event handlers to allow cleanup\n this.eventHandlers = {\n autoResize: null,\n keydown: null\n };\n // Track if event handlers are already set up to avoid unnecessary re-initialization\n this.eventHandlersSetup = 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 // Check if this is a domain error - if so, it's already handled by the domainError event handler\n // Don't show it here to avoid duplicates\n const isDomainError = error && (\n error.message === 'DOMAIN_NOT_WHITELISTED' ||\n (error.message && error.message.includes('Domain not whitelisted'))\n );\n \n if (!isDomainError) {\n // Only show non-domain errors here (domain errors are handled by event handler)\n this.showError(error);\n }\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(error) {\n const messages = document.getElementById('messagesContainer');\n if (!messages) return;\n \n // Check if this is a domain validation error\n const isDomainError = error && (\n error.message === 'DOMAIN_NOT_WHITELISTED' ||\n (typeof error === 'string' && error.includes('DOMAIN_NOT_WHITELISTED')) ||\n (error.message && error.message.includes('Domain not whitelisted')) ||\n (typeof error === 'string' && error.includes('Domain not whitelisted'))\n );\n \n if (isDomainError) {\n // Show domain error with title and message\n const errorContainer = document.createElement('div');\n errorContainer.className = 'error-message';\n errorContainer.style.cssText = 'padding: 16px; margin: 12px; border-radius: 8px; background: ' + \n (this.config.messages?.errorBackgroundColor || '#FEE2E2') + ';';\n \n const title = document.createElement('div');\n title.style.cssText = 'font-weight: 600; font-size: 16px; margin-bottom: 8px; color: #991B1B;';\n title.textContent = this.t('domainNotValidated');\n \n const message = document.createElement('div');\n message.style.cssText = 'font-size: 14px; color: #991B1B; line-height: 1.5;';\n message.textContent = this.t('domainErrorMessage');\n \n errorContainer.appendChild(title);\n errorContainer.appendChild(message);\n messages.appendChild(errorContainer);\n } else {\n // Show regular error\n const errorEl = document.createElement('div');\n errorEl.className = 'error-message';\n errorEl.textContent = typeof error === 'string' ? error : (error?.message || error);\n messages.appendChild(errorEl);\n }\n \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 \"domainNotValidated\": \"Domain not validated\",\n \"domainErrorMessage\": \"This domain is not whitelisted. Please contact the administrator to whitelist your website URL.\"\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 \"domainNotValidated\": \"דומיין לא מאומת\",\n \"domainErrorMessage\": \"דומיין זה לא ברשימת המורשים. אנא פנה למנהל המערכת כדי להוסיף את כתובת האתר שלך לרשימה.\"\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 \"domainNotValidated\": \"النطاق غير معتمد\",\n \"domainErrorMessage\": \"هذا النطاق غير مسموح به. يرجى الاتصال بالمسؤول لإضافة عنوان موقع الويب الخاص بك إلى القائمة.\"\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 \"domainNotValidated\": \"Домен не проверен\",\n \"domainErrorMessage\": \"Этот домен не в белом списке. Пожалуйста, свяжитесь с администратором, чтобы добавить URL вашего веб-сайта в список.\"\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 \"domainNotValidated\": \"Dominio no validado\",\n \"domainErrorMessage\": \"Este dominio no está en la lista blanca. Por favor, contacte al administrador para agregar la URL de su sitio web a la lista.\"\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 \"domainNotValidated\": \"Domaine non validé\",\n \"domainErrorMessage\": \"Ce domaine n'est pas sur la liste blanche. Veuillez contacter l'administrateur pour ajouter l'URL de votre site Web à la liste.\"\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 \"domainNotValidated\": \"Domain nicht validiert\",\n \"domainErrorMessage\": \"Diese Domain steht nicht auf der Whitelist. Bitte kontaktieren Sie den Administrator, um die URL Ihrer Website zur Liste hinzuzufügen.\"\n }\n};\n","/**\n * TTPChatWidget - 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 TTPChatWidget {\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 // Track current view state in unified mode to prevent resetting when widget is recreated\n this.currentView = 'landing'; // 'landing', 'text', or 'voice'\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 // Handle domain validation errors\n this.sdk.on('domainError', (error) => {\n this.textInterface.showError(error);\n this.textInterface.stopStreamingState();\n });\n\n this.sdk.on('error', (error) => {\n // Domain errors are handled by domainError event, skip here\n if (error && (error.message === 'DOMAIN_NOT_WHITELISTED' || \n (error.message && error.message.includes('Domain not whitelisted')))) {\n return; // Already handled by domainError event\n }\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 console.log('🏗️ createWidget called', {\n stack: new Error().stack.split('\\n').slice(1, 6).join('\\n')\n });\n \n // Remove existing widget if it exists\n const existingWidget = document.getElementById('text-chat-widget');\n if (existingWidget) {\n existingWidget.remove();\n }\n \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 container-type: size;\n }\n \n /* Ensure content areas can scroll when height is constrained */\n #text-chat-panel .widget-container > .landing-screen,\n #text-chat-panel .widget-container > .voice-interface,\n #text-chat-panel .widget-container > .text-interface {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n overflow-x: hidden;\n }\n \n /* Header should not scroll */\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 console.log('⚙️ setupWidgetEvents called', {\n stack: new Error().stack.split('\\n').slice(1, 6).join('\\n'),\n currentView: this.currentView\n });\n \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 \n // Restore previous view state if user had selected an interface, otherwise show landing\n if (this.currentView === 'text') {\n // User was on text interface, restore it\n if (landing) landing.classList.remove('active');\n if (textInterface) textInterface.classList.add('active');\n if (voiceInterface) voiceInterface.classList.remove('active');\n if (backBtn && widgetMode === 'unified') backBtn.classList.add('visible');\n if (newChatBtn) newChatBtn.style.display = '';\n } else if (this.currentView === 'voice') {\n // User was on voice interface, restore it\n if (landing) landing.classList.remove('active');\n if (textInterface) textInterface.classList.remove('active');\n if (voiceInterface) voiceInterface.classList.add('active');\n if (backBtn && widgetMode === 'unified') backBtn.classList.add('visible');\n if (newChatBtn) newChatBtn.style.display = 'none';\n } else {\n // Initial state or landing: show landing screen\n this.currentView = 'landing';\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 }\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 console.log('⚙️ Setting up voice interface event handlers');\n this.voiceInterface.setupEventHandlers();\n }\n if (showText) {\n console.log('⚙️ Setting up text interface event handlers');\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 this.currentView = 'landing'; // Track state\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 this.currentView = 'text'; // Track state\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 this.currentView = 'voice'; // Track state\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 // Hide new chat button on voice interface (not applicable)\n if (newChatBtn) newChatBtn.style.display = 'none';\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 console.log('🔄 updateConfig called', {\n newConfig,\n stack: new Error().stack.split('\\n').slice(1, 6).join('\\n')\n });\n \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// TTPChatWidget and AgentSDK (AgentSDK is used by VoiceInterface, which TTPChatWidget uses)\nimport { AgentSDK } from './legacy/AgentSDK.js';\nimport { TTPChatWidget } 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 TTPChatWidget\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 TTPChatWidget,\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","_arrayLikeToArray","AudioRecorder","audioContext","audioWorkletNode","mediaStream","isRecording","audioProcessorPath","slice","name","from","test","_unsupportedIterableToArray","_n","F","next","document","getElementsByTagName","src","includes","URL","basePath","substring","lastIndexOf","_start","processorPath","_t","navigator","mediaDevices","getUserMedia","audio","sampleRate","channelCount","echoCancellation","noiseSuppression","autoGainControl","AudioContext","webkitAudioContext","state","resume","getAudioProcessorPath","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","code","reason","domainError","stopRecording","binaryString","atob","charCodeAt","playAudio","sendMessage","sendBinary","wsUrl","buildWebSocketUrl","params","URLSearchParams","append","separator","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","reverse","find","dataset","_","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","localStorage","setItem","getItem","_arrayWithHoles","_iterableToArrayLimit","_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","AgentSDK","isListening","onTranscript","onAgentSpeaking","isStart","signedUrl","handleWebSocketMessage","user_transcription","_startListening","variables","VoiceInterface","audioStream","callStartTime","callTimerInterval","sdk","isActive","getSessionUrl","setupSDKEventHandlers","updateTranscript","avatar","getElementById","classList","remove","showDomainError","showError","_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","endCallButtonColor","callbacks","startCallBtn","endCallBtn","muteBtn","speakerBtn","onclick","startVoiceCall","endVoiceCall","toggleMute","toggleSpeaker","tryAdjustSizes","attempt","voiceInterface","contains","adjustSizesForContainer","_getSignedUrl","baseUrl","requestBody","response","_params","demo","fetch","method","headers","ok","statusText","json","containerHeight","clientHeight","containerWidth","clientWidth","avatarSize","avatarFontSize","titleSize","subtitleSize","statusHeight","transcriptHeight","buttonSize","primaryButtonSize","gapSize","idleState","activeState","isIdleVisible","isActiveVisible","querySelectorAll","avatars","width","height","el","transcript","querySelector","minHeight","maxHeight","boxSizing","transcriptLabel","transcriptText","btn","svg","iconSize","setProperty","primaryButton","btnHeight","btnFontSize","btnIcon","_startVoiceCall","connected","attempts","_idleState","_activeState","scrollTop","getSignedUrl","startListening","setInterval","elapsed","minutes","floor","seconds","timerEl","textContent","padStart","stopListening","clearInterval","transcriptEl","title","audioTrack","getAudioTracks","muteIcon","muteCross","stroke","TextInterface","streamingEl","hasStartedStreaming","autoResize","keydown","eventHandlersSetup","_this$config$panel","_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","panel","direction","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","messages","sendButtonColor","animation","sendButtonHoverColor","sendButtonTextColor","inputBorderColor","inputFocusColor","inputBackgroundColor","inputTextColor","inputFontSize","inputBorderRadius","inputPadding","textColor","userBackgroundColor","agentBackgroundColor","systemBackgroundColor","errorBackgroundColor","sendButtonFontSize","sendButtonFontWeight","sendButton","inputField","newChatBtn","startNewChat","updateInputAttributes","overflow","newHeight","min","scrollHeight","overflowY","shiftKey","preventDefault","removeItem","input","focus","_this$config$panel17","placeholder","dir","textAlign","textInterface","_startChat","updateSendButtonState","startChat","addMessage","beginStreaming","stopStreamingState","emptyState","edgeClass","bubble","id","chunk","existing","_this$config$messages","errorContainer","errorEl","active","TTPChatWidget","_this$config$voice","_this$config$voice2","mergeWithDefaults","isOpen","widgetTranslations","currentView","voiceConfig","textConfig","createWidget","behavior","startOpen","autoOpen","userConfig","_userConfig$button","_userConfig$button2","_userConfig$header","_userConfig$button3","_userConfig$icon","_userConfig$icon2","_userConfig$icon3","_userConfig$icon4","_userConfig$icon5","_userConfig$icon6","_userConfig$button4","_userConfig$button5","_userConfig$button6","_userConfig$icon7","_userConfig$button7","_userConfig$button8","_userConfig$button9","_userConfig$button0","_userConfig$icon8","_userConfig$panel","_userConfig$panel2","_userConfig$panel3","_userConfig$panel4","_userConfig$panel5","_userConfig$panel6","_userConfig$voice","_userConfig$panel7","_userConfig$voice2","_userConfig$panel8","_userConfig$voice3","_userConfig$panel9","_userConfig$voice4","_userConfig$panel0","_userConfig$voice5","_userConfig$panel1","_userConfig$voice6","_userConfig$panel10","_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$header2","_userConfig$header3","_userConfig$header4","_userConfig$button1","_userConfig$header5","_userConfig$header6","_userConfig$tooltips","_userConfig$tooltips2","_userConfig$tooltips3","_userConfig$tooltips4","_userConfig$tooltips5","_userConfig$tooltips6","_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$behavior7","_userConfig$behavior8","_userConfig$accessibi","_userConfig$accessibi2","_userConfig$accessibi3","positionConfig","position","parts","split","vertical","horizontal","offset","positionOffset","x","primaryColor","headerColor","header","customImage","emoji","size","shape","hoverColor","shadow","shadowColor","backdropFilter","micButtonColor","micButtonActiveColor","micButtonHint","sendButtonActiveColor","landing","logo","titleColor","modeCardBackgroundColor","modeCardBorderColor","modeCardHoverBorderColor","modeCardIconBackgroundColor","modeCardTitleColor","voiceCardIcon","textCardIcon","showTitle","showCloseButton","newChat","back","enableHover","enablePulse","enableSlide","duration","hidden","autoConnect","showWelcomeMessage","welcomeMessage","enableVoiceMode","mode","accessibility","ariaLabel","ariaDescription","keyboardNavigation","customStyles","positionString","appendStreamingChunk","finalizeStreaming","stack","join","existingWidget","widget","generateWidgetHTML","setupWidgetEvents","small","medium","large","xl","positionStyles","generatePositionStyles","iconHTML","generateIconHTML","widgetMode","showLanding","showVoice","showText","_this2$config$tooltip","generateCSS","generateHTML","pos","styles","_this$config$landing","_this$config$landing2","_this$config$landing3","_this$config$landing4","_this$config$landing5","_this$config$landing6","_this$config$landing7","anim","openBtn","togglePanel","closeBtn","backBtn","voiceCard","textCard","setupKeyboardNavigation","show","toggle","setActive","status","_this$config","_this$config$voice4","_this$config$voice3","_this$config$text","mergedConfig","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 * Get the audio processor path\n * Tries to detect from script source, falls back to config or default\n */\n getAudioProcessorPath() {\n // If explicitly configured, use it\n if (this.config.audioProcessorPath) {\n return this.config.audioProcessorPath;\n }\n \n // Try to find the script that loaded the SDK\n const scripts = document.getElementsByTagName('script');\n for (let script of scripts) {\n const src = script.src;\n // Check if this is the agent-widget.js script\n if (src && (src.includes('agent-widget.js') || src.includes('ttp-agent-sdk'))) {\n // Extract base URL and construct processor path\n try {\n const url = new URL(src);\n const basePath = src.substring(0, src.lastIndexOf('/'));\n return `${basePath}/audio-processor.js`;\n } catch (e) {\n // If URL parsing fails, try to extract path manually\n const basePath = src.substring(0, src.lastIndexOf('/'));\n return `${basePath}/audio-processor.js`;\n }\n }\n }\n \n // Fallback to CDN\n return 'https://cdn.talktopc.com/audio-processor.js';\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 // Get the audio processor path\n const processorPath = this.getAudioProcessorPath();\n \n // Load AudioWorklet module\n await this.audioContext.audioWorklet.addModule(processorPath);\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 // Check if disconnect was due to domain whitelist violation\n if (event && event.code === 1008 && event.reason && \n (event.reason.includes('Domain not whitelisted') || \n event.reason.includes('domain') || \n event.reason.includes('whitelist'))) {\n const domainError = new Error('DOMAIN_NOT_WHITELISTED');\n domainError.reason = event.reason;\n domainError.code = event.code;\n this.emit('domainError', domainError);\n this.emit('error', domainError);\n }\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 = (event) => {\n // Check if connection was closed due to domain whitelist violation\n if (event.code === 1008 && event.reason && \n (event.reason.includes('Domain not whitelisted') || \n event.reason.includes('domain') || \n event.reason.includes('whitelist'))) {\n const domainError = new Error('DOMAIN_NOT_WHITELISTED');\n domainError.reason = event.reason;\n domainError.code = event.code;\n // Only emit domainError, not error - to avoid duplicate handling\n this.emit('domainError', domainError);\n task.reject(domainError);\n // Reset inFlight and drain queue to allow subsequent messages\n this.config.inFlight = false;\n this.drainQueue();\n return;\n }\n \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', (event) => {\n this.isConnected = false;\n // Check if disconnect was due to domain whitelist violation\n if (event && event.code === 1008 && event.reason && \n (event.reason.includes('Domain not whitelisted') || \n event.reason.includes('domain') || \n event.reason.includes('whitelist'))) {\n const domainError = new Error('DOMAIN_NOT_WHITELISTED');\n domainError.reason = event.reason;\n domainError.code = event.code;\n this.onError(domainError);\n }\n this.onDisconnected();\n });\n \n this.voiceSDK.on('domainError', (error) => {\n this.onError(error);\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 * VoiceInterface - Handles voice call UI and functionality\n * Part of the unified TTPChatWidget\n * Optimized for Wix iframe embedding\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 // Check if it's a domain error\n if (error && (error.message === 'DOMAIN_NOT_WHITELISTED' || \n (error.message && error.message.includes('Domain not whitelisted')))) {\n this.showDomainError();\n } else {\n this.showError(error.message || error);\n }\n };\n }\n\n /**\n * Helper function to get translated text\n */\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\">\n <div class=\"voice-avatar\" id=\"voiceAvatar\">🤖</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 <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;\">\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 - Optimized for small heights\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 - Ultra-compact for Wix iframes */\n .voice-interface { \n display: none; \n flex: 1; \n flex-direction: column;\n align-items: center; \n justify-content: center; \n padding: 6px 10px 6px 10px; \n background: linear-gradient(180deg, #f8fafc 0%, #e0e7ff 100%);\n overflow: hidden;\n min-height: 0;\n height: 100%;\n width: 100%;\n box-sizing: border-box;\n }\n .voice-interface.active { display: flex; }\n \n /* Voice States - Better scaling gaps */\n #voiceIdleState,\n #voiceActiveState {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n height: 100%;\n min-height: 0;\n justify-content: center;\n overflow: hidden;\n flex: 1;\n box-sizing: border-box;\n gap: clamp(6px, 1.5vh, 12px);\n }\n \n #voiceActiveState[style*=\"display: none\"] {\n display: none !important;\n }\n \n /* Voice Avatar - Scales better from small to large */\n .voice-avatar,\n .voice-avatar-active {\n width: clamp(80px, 18vh, 160px);\n height: clamp(80px, 18vh, 160px);\n aspect-ratio: 1;\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: clamp(40px, 9vh, 80px);\n margin: 0;\n box-shadow: 0 8px 30px rgba(102, 126, 234, 0.3);\n transition: all 0.3s ease;\n flex-shrink: 1;\n position: relative;\n }\n \n .voice-avatar-active {\n animation: avatarPulse 2s ease-in-out infinite;\n }\n \n @keyframes avatarPulse {\n 0%, 100% { \n transform: scale(1);\n }\n 50% { \n transform: scale(1.05);\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 - Scales with container */\n .voice-status {\n text-align: center;\n margin: 0;\n flex-shrink: 1;\n min-height: 0;\n }\n \n .voice-status-title {\n font-size: clamp(12px, 3vh, 20px);\n font-weight: 600;\n color: ${statusTitleColor};\n margin-bottom: clamp(2px, 0.5vh, 4px);\n line-height: 1.2;\n }\n \n .voice-status-subtitle {\n font-size: clamp(10px, 2vh, 14px);\n color: ${statusSubtitleColor};\n line-height: 1.2;\n }\n \n /* Start Call Button - Scales with container */\n .start-call-btn {\n margin: 0;\n width: min(280px, 70vw);\n height: clamp(48px, 8vh, 64px);\n border-radius: clamp(24px, 4vh, 32px);\n border: none;\n background: ${startCallBtnColor};\n color: ${startCallBtnTextColor};\n font-size: clamp(14px, 2.5vh, 18px);\n font-weight: 600;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: clamp(8px, 1.5vh, 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 svg {\n width: clamp(22px, 4vh, 32px);\n height: clamp(22px, 4vh, 32px);\n }\n \n .start-call-btn:hover {\n transform: translateY(-2px);\n box-shadow: 0 12px 28px rgba(102, 126, 234, 0.5);\n }\n \n .start-call-btn:active {\n transform: translateY(-1px);\n }\n \n /* Voice Transcript - Scales with container */\n .voice-transcript {\n background: ${transcriptBg};\n padding: clamp(6px, 1.5vh, 12px);\n border-radius: 10px;\n width: min(360px, calc(100% - 40px));\n margin: 0;\n min-height: clamp(45px, 10vh, 80px);\n max-height: clamp(70px, 16vh, 110px);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n flex-shrink: 1;\n overflow-y: auto;\n overflow-x: hidden;\n display: flex;\n flex-direction: column;\n box-sizing: border-box;\n }\n \n .transcript-label {\n font-size: clamp(8px, 1.4vh, 11px);\n color: ${transcriptLabelColor};\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n margin-bottom: clamp(3px, 0.6vh, 6px);\n flex-shrink: 0;\n word-wrap: break-word;\n }\n \n .transcript-text {\n font-size: clamp(11px, 2vh, 15px);\n color: ${transcriptTextColor};\n line-height: 1.4;\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n word-wrap: break-word;\n overflow-wrap: break-word;\n }\n \n .transcript-text.empty {\n color: #cbd5e1;\n font-style: italic;\n }\n \n /* Voice Controls - Scales with container */\n .voice-controls {\n display: flex;\n gap: clamp(8px, 1.8vh, 14px);\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n margin: 0;\n padding-top: clamp(5px, 1.2vh, 10px);\n }\n \n .voice-control-btn {\n width: clamp(48px, 9vh, 72px);\n height: clamp(48px, 9vh, 72px);\n aspect-ratio: 1;\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 svg {\n width: 48%;\n height: 48%;\n }\n \n .voice-control-btn.primary {\n width: clamp(54px, 10vh, 80px);\n height: clamp(54px, 10vh, 80px);\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n box-shadow: 0 6px 18px rgba(102, 126, 234, 0.4);\n }\n \n .voice-control-btn.primary:hover {\n transform: scale(1.05);\n }\n \n .voice-control-btn.primary.active {\n background: white;\n animation: recordingPulse 1.5s ease-in-out infinite;\n }\n \n @keyframes recordingPulse {\n 0%, 100% { \n box-shadow: 0 6px 16px rgba(239, 68, 68, 0.4);\n }\n 50% { \n box-shadow: 0 6px 24px rgba(239, 68, 68, 0.7);\n }\n }\n \n .voice-control-btn.secondary {\n background: ${controlBtnColor};\n color: ${controlBtnSecondaryColor};\n box-shadow: 0 3px 10px 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: clamp(-18px, -3vh, -24px);\n font-size: clamp(9px, 1.6vh, 12px);\n color: #64748b;\n font-weight: 500;\n white-space: nowrap;\n }\n \n /* Mobile optimization */\n @media (max-width: 768px) {\n .voice-interface {\n padding: 6px 10px;\n }\n }\n \n @media (max-width: 480px) {\n .voice-interface {\n padding: 5px 8px;\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 // Adjust sizes when the interface first loads - with retries and longer delays\n const tryAdjustSizes = (attempt = 0) => {\n const voiceInterface = document.getElementById('voiceInterface');\n if (voiceInterface && voiceInterface.classList.contains('active') && voiceInterface.clientHeight > 100) {\n console.log('✅ Interface is active and has proper dimensions, adjusting sizes (attempt', attempt + 1, ')');\n this.adjustSizesForContainer();\n \n // Do one more adjustment after a short delay to ensure everything is rendered\n if (attempt === 0) {\n setTimeout(() => this.adjustSizesForContainer(), 500);\n }\n } else if (attempt < 15) {\n console.log('⏳ Interface not ready yet (height:', voiceInterface?.clientHeight, '), retrying... (attempt', attempt + 1, ')');\n setTimeout(() => tryAdjustSizes(attempt + 1), 250);\n } else {\n console.warn('⚠️ Interface never became fully ready, adjusting sizes anyway');\n this.adjustSizesForContainer();\n }\n };\n \n setTimeout(() => tryAdjustSizes(), 200);\n \n // Also adjust on window resize\n window.addEventListener('resize', () => {\n console.log('🔄 Window resized, re-adjusting sizes');\n this.adjustSizesForContainer();\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 * Adjust UI sizes based on container height\n */\n adjustSizesForContainer() {\n const voiceInterface = document.getElementById('voiceInterface');\n if (!voiceInterface) {\n console.warn('⚠️ voiceInterface not found, skipping size adjustment');\n return;\n }\n \n const containerHeight = voiceInterface.clientHeight;\n const containerWidth = voiceInterface.clientWidth;\n \n console.log('📏 Container size:', containerHeight, 'x', containerWidth);\n \n // Check if we have visible elements\n const idleState = document.getElementById('voiceIdleState');\n const activeState = document.getElementById('voiceActiveState');\n const isIdleVisible = idleState && idleState.style.display !== 'none';\n const isActiveVisible = activeState && activeState.style.display !== 'none';\n \n console.log('👁️ Visible state - Idle:', isIdleVisible, 'Active:', isActiveVisible);\n \n // Calculate sizes ensuring everything fits\n // Total height = padding + gaps + avatar + status + transcript + controls\n const padding = 12; // top + bottom padding\n const gapsCount = 4; // gaps between elements\n \n let avatarSize, avatarFontSize, titleSize, subtitleSize, statusHeight, transcriptHeight, buttonSize, primaryButtonSize, gapSize;\n \n if (containerHeight <= 350) {\n // Very small - ultra compact\n gapSize = 5;\n avatarSize = 70;\n avatarFontSize = 35;\n titleSize = 11;\n subtitleSize = 9;\n statusHeight = 32;\n transcriptHeight = 45;\n buttonSize = 42;\n primaryButtonSize = 48;\n } else if (containerHeight <= 450) {\n // Small (400-420px) - BIGGER AVATAR for 500px Wix height\n gapSize = 7;\n avatarSize = 110; // Increased from 85 to 110\n avatarFontSize = 55; // Increased from 42 to 55\n titleSize = 15; // Increased from 13\n subtitleSize = 11; // Increased from 10\n statusHeight = 38;\n transcriptHeight = 58; // Slightly reduced\n buttonSize = 52; // Increased from 48\n primaryButtonSize = 58; // Increased from 54\n } else if (containerHeight <= 550) {\n // Medium (500px) - BIGGER ROBOT\n gapSize = 8;\n avatarSize = 140; // Increased from 110 to 140\n avatarFontSize = 70; // Increased from 55 to 70\n titleSize = 16; // Increased from 15\n subtitleSize = 12; // Increased from 11\n statusHeight = 42;\n transcriptHeight = 68; // Reduced slightly to compensate for bigger robot\n buttonSize = 56; // Increased from 54\n primaryButtonSize = 64; // Increased from 62\n } else if (containerHeight <= 700) {\n // Medium-Large (600px)\n gapSize = 10;\n avatarSize = 130;\n avatarFontSize = 65;\n titleSize = 18;\n subtitleSize = 13;\n statusHeight = 46;\n transcriptHeight = 85;\n buttonSize = 60;\n primaryButtonSize = 70;\n } else {\n // Large (700+)\n gapSize = 12;\n avatarSize = 150;\n avatarFontSize = 75;\n titleSize = 20;\n subtitleSize = 14;\n statusHeight = 50;\n transcriptHeight = 100;\n buttonSize = 66;\n primaryButtonSize = 76;\n }\n \n // Apply gap size\n const stateContainers = document.querySelectorAll('#voiceIdleState, #voiceActiveState');\n stateContainers.forEach(container => {\n container.style.gap = `${gapSize}px`;\n });\n \n // Apply sizes to avatar\n const avatars = document.querySelectorAll('.voice-avatar, .voice-avatar-active');\n console.log('🤖 Found', avatars.length, 'avatars, setting size to', avatarSize, 'px');\n avatars.forEach(avatar => {\n avatar.style.width = `${avatarSize}px`;\n avatar.style.height = `${avatarSize}px`;\n avatar.style.fontSize = `${avatarFontSize}px`;\n });\n \n // Apply sizes to status text\n const statusTitle = document.querySelectorAll('.voice-status-title');\n statusTitle.forEach(el => el.style.fontSize = `${titleSize}px`);\n \n const statusSubtitle = document.querySelectorAll('.voice-status-subtitle');\n statusSubtitle.forEach(el => el.style.fontSize = `${subtitleSize}px`);\n \n // Apply sizes to transcript\n const transcript = document.querySelector('.voice-transcript');\n if (transcript) {\n transcript.style.minHeight = `${transcriptHeight}px`;\n transcript.style.maxHeight = `${transcriptHeight}px`;\n transcript.style.height = `${transcriptHeight}px`;\n transcript.style.width = `min(360px, ${containerWidth - 40}px)`; // Ensure it doesn't overflow\n transcript.style.boxSizing = 'border-box';\n }\n \n const transcriptLabel = document.querySelector('.transcript-label');\n if (transcriptLabel) {\n transcriptLabel.style.fontSize = `${Math.max(8, titleSize - 4)}px`;\n }\n \n const transcriptText = document.querySelector('.transcript-text');\n if (transcriptText) {\n transcriptText.style.fontSize = `${Math.max(10, titleSize - 2)}px`;\n }\n \n // Apply sizes to control buttons\n const secondaryButtons = document.querySelectorAll('.voice-control-btn.secondary');\n secondaryButtons.forEach(btn => {\n btn.style.width = `${buttonSize}px`;\n btn.style.height = `${buttonSize}px`;\n \n // Scale the SVG icon inside the button - much bigger!\n const svg = btn.querySelector('svg');\n if (svg) {\n const iconSize = buttonSize * 0.65; // Increased from 50% to 65%\n svg.style.setProperty('width', `${iconSize}px`, 'important');\n svg.style.setProperty('height', `${iconSize}px`, 'important');\n svg.style.setProperty('min-width', `${iconSize}px`, 'important');\n svg.style.setProperty('min-height', `${iconSize}px`, 'important');\n }\n });\n \n const primaryButton = document.querySelector('.voice-control-btn.primary');\n if (primaryButton) {\n primaryButton.style.width = `${primaryButtonSize}px`;\n primaryButton.style.height = `${primaryButtonSize}px`;\n \n // Scale the SVG icon inside the primary button - much bigger!\n const svg = primaryButton.querySelector('svg');\n if (svg) {\n const iconSize = primaryButtonSize * 0.70; // Increased from 55% to 70%\n svg.style.setProperty('width', `${iconSize}px`, 'important');\n svg.style.setProperty('height', `${iconSize}px`, 'important');\n svg.style.setProperty('min-width', `${iconSize}px`, 'important');\n svg.style.setProperty('min-height', `${iconSize}px`, 'important');\n }\n }\n \n // Apply to start call button\n const startCallBtn = document.querySelector('.start-call-btn');\n if (startCallBtn) {\n let btnHeight, btnFontSize;\n if (containerHeight <= 350) {\n btnHeight = 48;\n btnFontSize = 14;\n } else if (containerHeight <= 450) {\n btnHeight = 52;\n btnFontSize = 15;\n } else if (containerHeight <= 550) {\n btnHeight = 58; // Bigger button at 500px\n btnFontSize = 17;\n } else if (containerHeight <= 700) {\n btnHeight = 62;\n btnFontSize = 18;\n } else {\n btnHeight = 64;\n btnFontSize = 18;\n }\n startCallBtn.style.height = `${btnHeight}px`;\n startCallBtn.style.fontSize = `${btnFontSize}px`;\n \n // Also adjust the SVG icon size in the button\n const btnIcon = startCallBtn.querySelector('svg');\n if (btnIcon) {\n const iconSize = Math.max(22, btnHeight * 0.5);\n btnIcon.style.width = `${iconSize}px`;\n btnIcon.style.height = `${iconSize}px`;\n }\n }\n \n console.log('✅ Sizes adjusted - Avatar:', avatarSize, 'Status:', statusHeight, 'Transcript:', transcriptHeight, 'Buttons:', buttonSize);\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 // Adjust sizes based on container dimensions\n setTimeout(() => this.adjustSizesForContainer(), 50);\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 // Re-adjust sizes for idle state\n setTimeout(() => this.adjustSizesForContainer(), 50);\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 * Show domain validation error\n */\n showDomainError() {\n const transcriptEl = document.getElementById('transcriptText');\n if (transcriptEl) {\n const title = this.t('domainNotValidated');\n const message = this.t('domainErrorMessage');\n transcriptEl.innerHTML = `<div style=\"font-weight: 600; font-size: 16px; margin-bottom: 8px; color: #991B1B;\">${title}</div><div style=\"font-size: 14px; color: #991B1B; line-height: 1.5;\">${message}</div>`;\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 * TextInterface - Handles text chat UI and functionality\n * Part of the unified TTPChatWidget\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 // Store event handlers to allow cleanup\n this.eventHandlers = {\n autoResize: null,\n keydown: null\n };\n // Track if event handlers are already set up to avoid unnecessary re-initialization\n this.eventHandlersSetup = 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 // Check if this is a domain error - if so, it's already handled by the domainError event handler\n // Don't show it here to avoid duplicates\n const isDomainError = error && (\n error.message === 'DOMAIN_NOT_WHITELISTED' ||\n (error.message && error.message.includes('Domain not whitelisted'))\n );\n \n if (!isDomainError) {\n // Only show non-domain errors here (domain errors are handled by event handler)\n this.showError(error);\n }\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(error) {\n const messages = document.getElementById('messagesContainer');\n if (!messages) return;\n \n // Check if this is a domain validation error\n const isDomainError = error && (\n error.message === 'DOMAIN_NOT_WHITELISTED' ||\n (typeof error === 'string' && error.includes('DOMAIN_NOT_WHITELISTED')) ||\n (error.message && error.message.includes('Domain not whitelisted')) ||\n (typeof error === 'string' && error.includes('Domain not whitelisted'))\n );\n \n if (isDomainError) {\n // Show domain error with title and message\n const errorContainer = document.createElement('div');\n errorContainer.className = 'error-message';\n errorContainer.style.cssText = 'padding: 16px; margin: 12px; border-radius: 8px; background: ' + \n (this.config.messages?.errorBackgroundColor || '#FEE2E2') + ';';\n \n const title = document.createElement('div');\n title.style.cssText = 'font-weight: 600; font-size: 16px; margin-bottom: 8px; color: #991B1B;';\n title.textContent = this.t('domainNotValidated');\n \n const message = document.createElement('div');\n message.style.cssText = 'font-size: 14px; color: #991B1B; line-height: 1.5;';\n message.textContent = this.t('domainErrorMessage');\n \n errorContainer.appendChild(title);\n errorContainer.appendChild(message);\n messages.appendChild(errorContainer);\n } else {\n // Show regular error\n const errorEl = document.createElement('div');\n errorEl.className = 'error-message';\n errorEl.textContent = typeof error === 'string' ? error : (error?.message || error);\n messages.appendChild(errorEl);\n }\n \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 \"domainNotValidated\": \"Domain not validated\",\n \"domainErrorMessage\": \"This domain is not whitelisted. Please contact the administrator to whitelist your website URL.\"\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 \"domainNotValidated\": \"דומיין לא מאומת\",\n \"domainErrorMessage\": \"דומיין זה לא ברשימת המורשים. אנא פנה למנהל המערכת כדי להוסיף את כתובת האתר שלך לרשימה.\"\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 \"domainNotValidated\": \"النطاق غير معتمد\",\n \"domainErrorMessage\": \"هذا النطاق غير مسموح به. يرجى الاتصال بالمسؤول لإضافة عنوان موقع الويب الخاص بك إلى القائمة.\"\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 \"domainNotValidated\": \"Домен не проверен\",\n \"domainErrorMessage\": \"Этот домен не в белом списке. Пожалуйста, свяжитесь с администратором, чтобы добавить URL вашего веб-сайта в список.\"\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 \"domainNotValidated\": \"Dominio no validado\",\n \"domainErrorMessage\": \"Este dominio no está en la lista blanca. Por favor, contacte al administrador para agregar la URL de su sitio web a la lista.\"\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 \"domainNotValidated\": \"Domaine non validé\",\n \"domainErrorMessage\": \"Ce domaine n'est pas sur la liste blanche. Veuillez contacter l'administrateur pour ajouter l'URL de votre site Web à la liste.\"\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 \"domainNotValidated\": \"Domain nicht validiert\",\n \"domainErrorMessage\": \"Diese Domain steht nicht auf der Whitelist. Bitte kontaktieren Sie den Administrator, um die URL Ihrer Website zur Liste hinzuzufügen.\"\n }\n};\n","/**\n * TTPChatWidget - 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 TTPChatWidget {\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 // Track current view state in unified mode to prevent resetting when widget is recreated\n this.currentView = 'landing'; // 'landing', 'text', or 'voice'\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 // Handle domain validation errors\n this.sdk.on('domainError', (error) => {\n this.textInterface.showError(error);\n this.textInterface.stopStreamingState();\n });\n\n this.sdk.on('error', (error) => {\n // Domain errors are handled by domainError event, skip here\n if (error && (error.message === 'DOMAIN_NOT_WHITELISTED' || \n (error.message && error.message.includes('Domain not whitelisted')))) {\n return; // Already handled by domainError event\n }\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 console.log('🏗️ createWidget called', {\n stack: new Error().stack.split('\\n').slice(1, 6).join('\\n')\n });\n \n // Remove existing widget if it exists\n const existingWidget = document.getElementById('text-chat-widget');\n if (existingWidget) {\n existingWidget.remove();\n }\n \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 container-type: size;\n }\n \n /* Ensure content areas can scroll when height is constrained */\n #text-chat-panel .widget-container > .landing-screen,\n #text-chat-panel .widget-container > .voice-interface,\n #text-chat-panel .widget-container > .text-interface {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n overflow-x: hidden;\n }\n \n /* Header should not scroll */\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 console.log('⚙️ setupWidgetEvents called', {\n stack: new Error().stack.split('\\n').slice(1, 6).join('\\n'),\n currentView: this.currentView\n });\n \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 \n // Restore previous view state if user had selected an interface, otherwise show landing\n if (this.currentView === 'text') {\n // User was on text interface, restore it\n if (landing) landing.classList.remove('active');\n if (textInterface) textInterface.classList.add('active');\n if (voiceInterface) voiceInterface.classList.remove('active');\n if (backBtn && widgetMode === 'unified') backBtn.classList.add('visible');\n if (newChatBtn) newChatBtn.style.display = '';\n } else if (this.currentView === 'voice') {\n // User was on voice interface, restore it\n if (landing) landing.classList.remove('active');\n if (textInterface) textInterface.classList.remove('active');\n if (voiceInterface) voiceInterface.classList.add('active');\n if (backBtn && widgetMode === 'unified') backBtn.classList.add('visible');\n if (newChatBtn) newChatBtn.style.display = 'none';\n } else {\n // Initial state or landing: show landing screen\n this.currentView = 'landing';\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 }\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 console.log('⚙️ Setting up voice interface event handlers');\n this.voiceInterface.setupEventHandlers();\n }\n if (showText) {\n console.log('⚙️ Setting up text interface event handlers');\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 this.currentView = 'landing'; // Track state\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 this.currentView = 'text'; // Track state\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 this.currentView = 'voice'; // Track state\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 // Hide new chat button on voice interface (not applicable)\n if (newChatBtn) newChatBtn.style.display = 'none';\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 console.log('🔄 updateConfig called', {\n newConfig,\n stack: new Error().stack.split('\\n').slice(1, 6).join('\\n')\n });\n \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// TTPChatWidget and AgentSDK (AgentSDK is used by VoiceInterface, which TTPChatWidget uses)\nimport { AgentSDK } from './legacy/AgentSDK.js';\nimport { TTPChatWidget } 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 TTPChatWidget\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 TTPChatWidget,\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","_arrayLikeToArray","AudioRecorder","audioContext","audioWorkletNode","mediaStream","isRecording","audioProcessorPath","slice","name","from","test","_unsupportedIterableToArray","_n","F","next","document","getElementsByTagName","src","includes","URL","basePath","substring","lastIndexOf","_start","processorPath","_t","navigator","mediaDevices","getUserMedia","audio","sampleRate","channelCount","echoCancellation","noiseSuppression","autoGainControl","AudioContext","webkitAudioContext","state","resume","getAudioProcessorPath","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","code","reason","domainError","stopRecording","binaryString","atob","charCodeAt","playAudio","sendMessage","sendBinary","wsUrl","buildWebSocketUrl","params","URLSearchParams","append","separator","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","reverse","find","dataset","_","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","localStorage","setItem","getItem","_arrayWithHoles","_iterableToArrayLimit","_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","AgentSDK","isListening","onTranscript","onAgentSpeaking","isStart","signedUrl","handleWebSocketMessage","user_transcription","_startListening","variables","VoiceInterface","audioStream","callStartTime","callTimerInterval","sdk","isActive","getSessionUrl","setupSDKEventHandlers","updateTranscript","avatar","getElementById","classList","remove","showDomainError","showError","_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","endCallButtonColor","callbacks","startCallBtn","endCallBtn","muteBtn","speakerBtn","onclick","startVoiceCall","endVoiceCall","toggleMute","toggleSpeaker","tryAdjustSizes","attempt","voiceInterface","contains","clientHeight","adjustSizesForContainer","_getSignedUrl","baseUrl","requestBody","response","_params","demo","fetch","method","headers","ok","statusText","json","containerHeight","containerWidth","clientWidth","avatarSize","avatarFontSize","titleSize","subtitleSize","statusHeight","transcriptHeight","buttonSize","primaryButtonSize","gapSize","idleState","activeState","isIdleVisible","isActiveVisible","querySelectorAll","avatars","width","height","el","transcript","querySelector","minHeight","maxHeight","boxSizing","transcriptLabel","transcriptText","btn","svg","iconSize","setProperty","primaryButton","btnHeight","btnFontSize","btnIcon","_startVoiceCall","connected","attempts","_idleState","_activeState","scrollTop","getSignedUrl","startListening","setInterval","elapsed","minutes","floor","seconds","timerEl","textContent","padStart","stopListening","clearInterval","transcriptEl","title","audioTrack","getAudioTracks","muteIcon","muteCross","stroke","TextInterface","streamingEl","hasStartedStreaming","autoResize","keydown","eventHandlersSetup","_this$config$panel","_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","panel","direction","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","messages","sendButtonColor","animation","sendButtonHoverColor","sendButtonTextColor","inputBorderColor","inputFocusColor","inputBackgroundColor","inputTextColor","inputFontSize","inputBorderRadius","inputPadding","textColor","userBackgroundColor","agentBackgroundColor","systemBackgroundColor","errorBackgroundColor","sendButtonFontSize","sendButtonFontWeight","sendButton","inputField","newChatBtn","startNewChat","updateInputAttributes","overflow","newHeight","min","scrollHeight","overflowY","shiftKey","preventDefault","removeItem","input","focus","_this$config$panel17","placeholder","dir","textAlign","textInterface","_startChat","updateSendButtonState","startChat","addMessage","beginStreaming","stopStreamingState","emptyState","edgeClass","bubble","id","chunk","existing","_this$config$messages","errorContainer","errorEl","active","TTPChatWidget","_this$config$voice","_this$config$voice2","mergeWithDefaults","isOpen","widgetTranslations","currentView","voiceConfig","textConfig","createWidget","behavior","startOpen","autoOpen","userConfig","_userConfig$button","_userConfig$button2","_userConfig$header","_userConfig$button3","_userConfig$icon","_userConfig$icon2","_userConfig$icon3","_userConfig$icon4","_userConfig$icon5","_userConfig$icon6","_userConfig$button4","_userConfig$button5","_userConfig$button6","_userConfig$icon7","_userConfig$button7","_userConfig$button8","_userConfig$button9","_userConfig$button0","_userConfig$icon8","_userConfig$panel","_userConfig$panel2","_userConfig$panel3","_userConfig$panel4","_userConfig$panel5","_userConfig$panel6","_userConfig$voice","_userConfig$panel7","_userConfig$voice2","_userConfig$panel8","_userConfig$voice3","_userConfig$panel9","_userConfig$voice4","_userConfig$panel0","_userConfig$voice5","_userConfig$panel1","_userConfig$voice6","_userConfig$panel10","_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$header2","_userConfig$header3","_userConfig$header4","_userConfig$button1","_userConfig$header5","_userConfig$header6","_userConfig$tooltips","_userConfig$tooltips2","_userConfig$tooltips3","_userConfig$tooltips4","_userConfig$tooltips5","_userConfig$tooltips6","_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$behavior7","_userConfig$behavior8","_userConfig$accessibi","_userConfig$accessibi2","_userConfig$accessibi3","positionConfig","position","parts","split","vertical","horizontal","offset","positionOffset","x","primaryColor","headerColor","header","customImage","emoji","size","shape","hoverColor","shadow","shadowColor","backdropFilter","micButtonColor","micButtonActiveColor","micButtonHint","sendButtonActiveColor","landing","logo","titleColor","modeCardBackgroundColor","modeCardBorderColor","modeCardHoverBorderColor","modeCardIconBackgroundColor","modeCardTitleColor","voiceCardIcon","textCardIcon","showTitle","showCloseButton","newChat","back","enableHover","enablePulse","enableSlide","duration","hidden","autoConnect","showWelcomeMessage","welcomeMessage","enableVoiceMode","mode","accessibility","ariaLabel","ariaDescription","keyboardNavigation","customStyles","positionString","appendStreamingChunk","finalizeStreaming","stack","join","existingWidget","widget","generateWidgetHTML","setupWidgetEvents","small","medium","large","xl","positionStyles","generatePositionStyles","iconHTML","generateIconHTML","widgetMode","showLanding","showVoice","showText","_this2$config$tooltip","generateCSS","generateHTML","pos","styles","_this$config$landing","_this$config$landing2","_this$config$landing3","_this$config$landing4","_this$config$landing5","_this$config$landing6","_this$config$landing7","anim","openBtn","togglePanel","closeBtn","backBtn","voiceCard","textCard","setupKeyboardNavigation","show","toggle","setActive","status","_this$config","_this$config$voice4","_this$config$voice3","_this$config$text","mergedConfig","currentLanguage","VERSION","VanillaVoiceButton"],"sourceRoot":""}