@centive/aria-sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +435 -0
- package/dist/components/AnamTriggerButton.d.ts +9 -0
- package/dist/components/AnamTriggerButton.d.ts.map +1 -0
- package/dist/components/AriaAssistant.d.ts +3 -0
- package/dist/components/AriaAssistant.d.ts.map +1 -0
- package/dist/components/AriaTriggerButton.d.ts +10 -0
- package/dist/components/AriaTriggerButton.d.ts.map +1 -0
- package/dist/components/AriaWidget.d.ts +7 -0
- package/dist/components/AriaWidget.d.ts.map +1 -0
- package/dist/components/ChatPanel.d.ts +3 -0
- package/dist/components/ChatPanel.d.ts.map +1 -0
- package/dist/components/SessionInfo.d.ts +7 -0
- package/dist/components/SessionInfo.d.ts.map +1 -0
- package/dist/components/ui/badge.d.ts +7 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/button.d.ts +8 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/card.d.ts +9 -0
- package/dist/components/ui/card.d.ts.map +1 -0
- package/dist/components/ui/dialog.d.ts +22 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/input.d.ts +6 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/context/AriaContext.d.ts +26 -0
- package/dist/context/AriaContext.d.ts.map +1 -0
- package/dist/context/AriaProvider.d.ts +9 -0
- package/dist/context/AriaProvider.d.ts.map +1 -0
- package/dist/hooks/useAria.d.ts +3 -0
- package/dist/hooks/useAria.d.ts.map +1 -0
- package/dist/index-C78Qd1Uk.js +6232 -0
- package/dist/index-C78Qd1Uk.js.map +1 -0
- package/dist/index-DyttThh2.js +17 -0
- package/dist/index-DyttThh2.js.map +1 -0
- package/dist/index.css +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/types/index.d.ts +108 -0
- package/dist/types/index.d.ts.map +1 -0
- package/package.json +94 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-C78Qd1Uk.js","sources":["../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/buffer/index.js","../node_modules/@anam-ai/js-sdk/dist/module/lib/constants.js","../node_modules/@anam-ai/js-sdk/dist/module/lib/ClientMetrics.js","../node_modules/@anam-ai/js-sdk/dist/module/lib/ClientError.js","../node_modules/@anam-ai/js-sdk/dist/module/lib/correlationId.js","../node_modules/@anam-ai/js-sdk/dist/module/lib/validateApiGatewayConfig.js","../node_modules/@anam-ai/js-sdk/dist/module/types/signalling/SignalMessage.js","../node_modules/@anam-ai/js-sdk/dist/module/types/streaming/DataChannelMessage.js","../node_modules/@anam-ai/js-sdk/dist/module/types/InputAudioState.js","../node_modules/@anam-ai/js-sdk/dist/module/types/messageHistory/MessageRole.js","../node_modules/@anam-ai/js-sdk/dist/module/types/events/public/AnamEvent.js","../node_modules/@anam-ai/js-sdk/dist/module/types/events/internal/InternalEvent.js","../node_modules/@anam-ai/js-sdk/dist/module/types/events/public/ConnectionClosedCodes.js","../node_modules/@anam-ai/js-sdk/dist/module/types/AgentAudioInputStream.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/SignallingClient.js","../node_modules/@anam-ai/js-sdk/dist/module/types/PersonaConfig.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/CoreApiRestClient.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/EngineApiRestClient.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/InternalEventEmitter.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/MessageHistoryClient.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/PublicEventEmitter.js","../node_modules/@anam-ai/js-sdk/dist/module/types/TalkMessageStreamState.js","../node_modules/@anam-ai/js-sdk/dist/module/types/TalkMessageStream.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/StreamingClient.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/ToolCallManager.js","../node_modules/@anam-ai/js-sdk/dist/module/AnamClient.js","../src/context/AriaContext.tsx","../src/context/AriaProvider.tsx","../src/hooks/useAria.ts","../node_modules/clsx/dist/clsx.mjs","../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/lib/utils.ts","../src/components/ui/button.tsx","../src/components/ui/badge.tsx","../src/components/ui/input.tsx","../src/components/ui/card.tsx","../src/components/SessionInfo.tsx","../src/components/ChatPanel.tsx","../src/components/AriaWidget.tsx","../src/components/AriaAssistant.tsx","../src/components/AriaTriggerButton.tsx","../src/components/ui/dialog.tsx"],"sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","// Core API\nexport const DEFAULT_HEADERS = {\n 'Content-Type': 'application/json',\n};\nexport const DEFAULT_API_BASE_URL = 'https://api.anam.ai';\nexport const DEFAULT_API_VERSION = '/v1'; // include the leading slash\nexport const CLIENT_METADATA = {\n client: 'js-sdk',\n version: '4.7.0',\n};\n//# sourceMappingURL=constants.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { CLIENT_METADATA } from './constants';\nexport const DEFAULT_ANAM_METRICS_BASE_URL = 'https://api.anam.ai';\nexport const DEFAULT_ANAM_API_VERSION = '/v1';\nexport var ClientMetricMeasurement;\n(function (ClientMetricMeasurement) {\n ClientMetricMeasurement[\"CLIENT_METRIC_MEASUREMENT_ERROR\"] = \"client_error\";\n ClientMetricMeasurement[\"CLIENT_METRIC_MEASUREMENT_CONNECTION_CLOSED\"] = \"client_connection_closed\";\n ClientMetricMeasurement[\"CLIENT_METRIC_MEASUREMENT_CONNECTION_ESTABLISHED\"] = \"client_connection_established\";\n ClientMetricMeasurement[\"CLIENT_METRIC_MEASUREMENT_SESSION_ATTEMPT\"] = \"client_session_attempt\";\n ClientMetricMeasurement[\"CLIENT_METRIC_MEASUREMENT_SESSION_SUCCESS\"] = \"client_session_success\";\n})(ClientMetricMeasurement || (ClientMetricMeasurement = {}));\nlet anamCurrentBaseUrl = DEFAULT_ANAM_METRICS_BASE_URL;\nlet anamCurrentApiVersion = DEFAULT_ANAM_API_VERSION;\nlet apiGatewayConfig;\nlet metricsDisabled = false;\nexport const setClientMetricsBaseUrl = (baseUrl, apiVersion = DEFAULT_ANAM_API_VERSION) => {\n anamCurrentBaseUrl = baseUrl;\n anamCurrentApiVersion = apiVersion;\n};\nexport const setClientMetricsApiGateway = (config) => {\n apiGatewayConfig = config;\n};\nexport const setClientMetricsDisabled = (disabled) => {\n metricsDisabled = disabled;\n};\nlet anamMetricsContext = {\n sessionId: null,\n organizationId: null,\n attemptCorrelationId: null,\n};\nexport const setMetricsContext = (context) => {\n anamMetricsContext = Object.assign(Object.assign({}, anamMetricsContext), context);\n};\nexport const sendClientMetric = (name, value, tags) => __awaiter(void 0, void 0, void 0, function* () {\n // Skip sending metrics if disabled\n if (metricsDisabled) {\n return;\n }\n try {\n const metricTags = Object.assign(Object.assign({}, CLIENT_METADATA), tags);\n // Add session and organization IDs if available\n if (anamMetricsContext.sessionId) {\n metricTags.sessionId = anamMetricsContext.sessionId;\n }\n if (anamMetricsContext.organizationId) {\n metricTags.organizationId = anamMetricsContext.organizationId;\n }\n if (anamMetricsContext.attemptCorrelationId) {\n metricTags.attemptCorrelationId = anamMetricsContext.attemptCorrelationId;\n }\n // Determine URL and headers based on API Gateway configuration\n const targetPath = `${anamCurrentApiVersion}/metrics/client`;\n let url;\n let headers = {\n 'Content-Type': 'application/json',\n };\n if ((apiGatewayConfig === null || apiGatewayConfig === void 0 ? void 0 : apiGatewayConfig.enabled) && (apiGatewayConfig === null || apiGatewayConfig === void 0 ? void 0 : apiGatewayConfig.baseUrl)) {\n // Route through gateway\n url = `${apiGatewayConfig.baseUrl}${targetPath}`;\n headers['X-Anam-Target-Url'] = `${anamCurrentBaseUrl}${targetPath}`;\n }\n else {\n // Direct call to Anam API\n url = `${anamCurrentBaseUrl}${targetPath}`;\n }\n yield fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n name,\n value,\n tags: metricTags,\n }),\n });\n }\n catch (error) {\n console.error('Failed to send error metric:', error);\n }\n});\nexport const createRTCStatsReport = (stats, outputFormat = 'console') => {\n /**\n * constructs a report of the RTC stats for logging to the console or returns as JSON\n */\n var _a, _b, _c;\n // Collect stats by type for organized reporting\n const statsByType = {};\n stats.forEach((report) => {\n if (!statsByType[report.type]) {\n statsByType[report.type] = [];\n }\n statsByType[report.type].push(report);\n });\n // Initialize JSON report structure\n const jsonReport = {\n issues: [],\n };\n // Build video statistics (Persona video output)\n const inboundVideo = ((_a = statsByType['inbound-rtp']) === null || _a === void 0 ? void 0 : _a.filter((r) => r.kind === 'video')) || [];\n if (inboundVideo.length > 0) {\n jsonReport.personaVideoStream = [];\n inboundVideo.forEach((report) => {\n var _a, _b, _c, _d, _e;\n const videoData = {\n framesReceived: (_a = report.framesReceived) !== null && _a !== void 0 ? _a : 'unknown',\n framesDropped: (_b = report.framesDropped) !== null && _b !== void 0 ? _b : 'unknown',\n framesPerSecond: (_c = report.framesPerSecond) !== null && _c !== void 0 ? _c : 'unknown',\n packetsReceived: (_d = report.packetsReceived) !== null && _d !== void 0 ? _d : 'unknown',\n packetsLost: (_e = report.packetsLost) !== null && _e !== void 0 ? _e : 'unknown',\n resolution: report.frameWidth && report.frameHeight\n ? `${report.frameWidth}x${report.frameHeight}`\n : undefined,\n jitter: report.jitter !== undefined ? report.jitter : undefined,\n };\n jsonReport.personaVideoStream.push(videoData);\n });\n }\n // Build audio statistics (Persona audio output)\n const inboundAudio = ((_b = statsByType['inbound-rtp']) === null || _b === void 0 ? void 0 : _b.filter((r) => r.kind === 'audio')) || [];\n if (inboundAudio.length > 0) {\n jsonReport.personaAudioStream = [];\n inboundAudio.forEach((report) => {\n var _a, _b, _c;\n const audioData = {\n packetsReceived: (_a = report.packetsReceived) !== null && _a !== void 0 ? _a : 'unknown',\n packetsLost: (_b = report.packetsLost) !== null && _b !== void 0 ? _b : 'unknown',\n audioLevel: (_c = report.audioLevel) !== null && _c !== void 0 ? _c : 'unknown',\n jitter: report.jitter !== undefined ? report.jitter : undefined,\n totalAudioEnergy: report.totalAudioEnergy !== undefined\n ? report.totalAudioEnergy\n : undefined,\n };\n jsonReport.personaAudioStream.push(audioData);\n });\n }\n // Build user audio input statistics\n const outboundAudio = ((_c = statsByType['outbound-rtp']) === null || _c === void 0 ? void 0 : _c.filter((r) => r.kind === 'audio')) || [];\n if (outboundAudio.length > 0) {\n jsonReport.userAudioInput = [];\n outboundAudio.forEach((report) => {\n var _a, _b;\n const userAudioData = {\n packetsSent: (_a = report.packetsSent) !== null && _a !== void 0 ? _a : 'unknown',\n retransmittedPackets: (_b = report.retransmittedPacketsSent) !== null && _b !== void 0 ? _b : undefined,\n avgPacketSendDelay: report.totalPacketSendDelay !== undefined\n ? (report.totalPacketSendDelay / (report.packetsSent || 1)) * 1000\n : undefined,\n };\n jsonReport.userAudioInput.push(userAudioData);\n });\n }\n // Build codec information\n if (statsByType['codec']) {\n jsonReport.codecs = [];\n statsByType['codec'].forEach((report) => {\n const codecData = {\n status: report.payloadType ? 'Active' : 'Available',\n mimeType: report.mimeType || 'Unknown',\n payloadType: report.payloadType || 'N/A',\n clockRate: report.clockRate || undefined,\n channels: report.channels || undefined,\n };\n jsonReport.codecs.push(codecData);\n });\n }\n // Build transport layer information\n if (statsByType['transport']) {\n jsonReport.transportLayer = [];\n statsByType['transport'].forEach((report) => {\n const transportData = {\n dtlsState: report.dtlsState || 'unknown',\n iceState: report.iceState || 'unknown',\n bytesSent: report.bytesSent || undefined,\n bytesReceived: report.bytesReceived || undefined,\n };\n jsonReport.transportLayer.push(transportData);\n });\n }\n // Build issues summary\n const issues = [];\n // Check for video issues\n inboundVideo.forEach((report) => {\n if (typeof report.framesDropped === 'number' && report.framesDropped > 0) {\n issues.push(`Video: ${report.framesDropped} frames dropped`);\n }\n if (typeof report.packetsLost === 'number' && report.packetsLost > 0) {\n issues.push(`Video: ${report.packetsLost} packets lost`);\n }\n if (typeof report.framesPerSecond === 'number' &&\n report.framesPerSecond < 23) {\n issues.push(`Video: Low frame rate (${report.framesPerSecond} fps)`);\n }\n });\n // Check for audio issues\n inboundAudio.forEach((report) => {\n if (typeof report.packetsLost === 'number' && report.packetsLost > 0) {\n issues.push(`Audio: ${report.packetsLost} packets lost`);\n }\n if (typeof report.jitter === 'number' && report.jitter > 0.1) {\n issues.push(`Audio: High jitter (${(report.jitter * 1000).toFixed(1)}ms)`);\n }\n });\n jsonReport.issues = issues;\n // Return JSON if requested\n if (outputFormat === 'json') {\n return jsonReport;\n }\n // Generate console output from JSON report\n console.group('📊 WebRTC Session Statistics Report');\n // Console output for video stream\n if (jsonReport.personaVideoStream &&\n jsonReport.personaVideoStream.length > 0) {\n console.group('📹 Persona Video Stream (Inbound)');\n jsonReport.personaVideoStream.forEach((videoData) => {\n console.log(`Frames Received: ${videoData.framesReceived}`);\n console.log(`Frames Dropped: ${videoData.framesDropped}`);\n console.log(`Frames Per Second: ${videoData.framesPerSecond}`);\n console.log(`Packets Received: ${typeof videoData.packetsReceived === 'number' ? videoData.packetsReceived.toLocaleString() : videoData.packetsReceived}`);\n console.log(`Packets Lost: ${videoData.packetsLost}`);\n if (videoData.resolution) {\n console.log(`Resolution: ${videoData.resolution}`);\n }\n if (videoData.jitter !== undefined) {\n console.log(`Jitter: ${videoData.jitter.toFixed(5)}ms`);\n }\n });\n console.groupEnd();\n }\n // Console output for audio stream\n if (jsonReport.personaAudioStream &&\n jsonReport.personaAudioStream.length > 0) {\n console.group('🔊 Persona Audio Stream (Inbound)');\n jsonReport.personaAudioStream.forEach((audioData) => {\n console.log(`Packets Received: ${typeof audioData.packetsReceived === 'number' ? audioData.packetsReceived.toLocaleString() : audioData.packetsReceived}`);\n console.log(`Packets Lost: ${audioData.packetsLost}`);\n console.log(`Audio Level: ${audioData.audioLevel}`);\n if (audioData.jitter !== undefined) {\n console.log(`Jitter: ${audioData.jitter.toFixed(5)}ms`);\n }\n if (audioData.totalAudioEnergy !== undefined) {\n console.log(`Total Audio Energy: ${audioData.totalAudioEnergy.toFixed(6)}`);\n }\n });\n console.groupEnd();\n }\n // Console output for user audio input\n if (jsonReport.userAudioInput && jsonReport.userAudioInput.length > 0) {\n console.group('🎤 User Audio Input (Outbound)');\n jsonReport.userAudioInput.forEach((userAudioData) => {\n console.log(`Packets Sent: ${typeof userAudioData.packetsSent === 'number' ? userAudioData.packetsSent.toLocaleString() : userAudioData.packetsSent}`);\n if (userAudioData.retransmittedPackets) {\n console.log(`Retransmitted Packets: ${userAudioData.retransmittedPackets}`);\n }\n if (userAudioData.avgPacketSendDelay !== undefined) {\n console.log(`Avg Packet Send Delay: ${userAudioData.avgPacketSendDelay.toFixed(5)}ms`);\n }\n });\n console.groupEnd();\n }\n // Console output for codecs\n if (jsonReport.codecs && jsonReport.codecs.length > 0) {\n console.group('🔧 Codecs Used');\n jsonReport.codecs.forEach((codecData) => {\n console.log(`${codecData.status} ${codecData.mimeType} - Payload Type: ${codecData.payloadType}`);\n if (codecData.clockRate) {\n console.log(` Clock Rate: ${codecData.clockRate}Hz`);\n }\n if (codecData.channels) {\n console.log(` Channels: ${codecData.channels}`);\n }\n });\n console.groupEnd();\n }\n // Console output for transport layer\n if (jsonReport.transportLayer && jsonReport.transportLayer.length > 0) {\n console.group('🚚 Transport Layer');\n jsonReport.transportLayer.forEach((transportData) => {\n console.log(`DTLS State: ${transportData.dtlsState}`);\n console.log(`ICE State: ${transportData.iceState}`);\n if (transportData.bytesReceived || transportData.bytesSent) {\n console.log(`Data Transfer (bytes) - Sent: ${(transportData.bytesSent || 0).toLocaleString()}, Received: ${(transportData.bytesReceived || 0).toLocaleString()}`);\n }\n });\n console.groupEnd();\n }\n // Console output for issues\n if (jsonReport.issues.length > 0) {\n console.group('⚠️ Potential Issues Detected');\n jsonReport.issues.forEach((issue) => console.warn(issue));\n console.groupEnd();\n }\n else {\n console.log('✅ No significant issues detected');\n }\n console.groupEnd();\n};\n//# sourceMappingURL=ClientMetrics.js.map","import { ClientMetricMeasurement, sendClientMetric } from './ClientMetrics';\nexport var ErrorCode;\n(function (ErrorCode) {\n ErrorCode[\"CLIENT_ERROR_CODE_USAGE_LIMIT_REACHED\"] = \"CLIENT_ERROR_CODE_USAGE_LIMIT_REACHED\";\n ErrorCode[\"CLIENT_ERROR_CODE_SPEND_CAP_REACHED\"] = \"CLIENT_ERROR_CODE_SPEND_CAP_REACHED\";\n ErrorCode[\"CLIENT_ERROR_CODE_VALIDATION_ERROR\"] = \"CLIENT_ERROR_CODE_VALIDATION_ERROR\";\n ErrorCode[\"CLIENT_ERROR_CODE_AUTHENTICATION_ERROR\"] = \"CLIENT_ERROR_CODE_AUTHENTICATION_ERROR\";\n ErrorCode[\"CLIENT_ERROR_CODE_SERVER_ERROR\"] = \"CLIENT_ERROR_CODE_SERVER_ERROR\";\n ErrorCode[\"CLIENT_ERROR_CODE_MAX_CONCURRENT_SESSIONS_REACHED\"] = \"CLIENT_ERROR_CODE_MAX_CONCURRENT_SESSIONS_REACHED\";\n ErrorCode[\"CLIENT_ERROR_CODE_SERVICE_BUSY\"] = \"CLIENT_ERROR_CODE_SERVICE_BUSY\";\n ErrorCode[\"CLIENT_ERROR_CODE_NO_PLAN_FOUND\"] = \"CLIENT_ERROR_CODE_NO_PLAN_FOUND\";\n ErrorCode[\"CLIENT_ERROR_CODE_UNKNOWN_ERROR\"] = \"CLIENT_ERROR_CODE_UNKNOWN_ERROR\";\n ErrorCode[\"CLIENT_ERROR_CODE_CONFIGURATION_ERROR\"] = \"CLIENT_ERROR_CODE_CONFIGURATION_ERROR\";\n})(ErrorCode || (ErrorCode = {}));\nexport class ClientError extends Error {\n constructor(message, code, statusCode = 500, details) {\n super(message);\n this.name = 'ClientError';\n this.code = code;\n this.statusCode = statusCode;\n this.details = details;\n Object.setPrototypeOf(this, ClientError.prototype);\n // Send error metric when error is created\n sendClientMetric(ClientMetricMeasurement.CLIENT_METRIC_MEASUREMENT_ERROR, code, {\n details,\n statusCode,\n });\n }\n}\n//# sourceMappingURL=ClientError.js.map","export function generateCorrelationId() {\n // Try native crypto.randomUUID() first (supported in modern browsers)\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n // Fallback for older environments and older react native\n return Date.now().toString(36) + Math.random().toString(36).substr(2, 9);\n}\n//# sourceMappingURL=correlationId.js.map","/**\n * Validates API Gateway configuration\n * @param apiGatewayConfig - The API Gateway configuration to validate\n * @returns Error message if invalid, undefined if valid\n */\nexport function validateApiGatewayConfig(apiGatewayConfig) {\n if (!apiGatewayConfig || !apiGatewayConfig.enabled) {\n return undefined;\n }\n if (!apiGatewayConfig.baseUrl) {\n return 'API Gateway baseUrl is required when enabled';\n }\n // Validate baseUrl format\n try {\n const url = new URL(apiGatewayConfig.baseUrl);\n if (!['http:', 'https:', 'ws:', 'wss:'].includes(url.protocol)) {\n return `Invalid API Gateway baseUrl protocol: ${url.protocol}. Must be http:, https:, ws:, or wss:`;\n }\n }\n catch (error) {\n return `Invalid API Gateway baseUrl: ${apiGatewayConfig.baseUrl}`;\n }\n // Validate wsPath if provided\n if (apiGatewayConfig.wsPath) {\n if (!apiGatewayConfig.wsPath.startsWith('/')) {\n return 'API Gateway wsPath must start with /';\n }\n }\n return undefined;\n}\n//# sourceMappingURL=validateApiGatewayConfig.js.map","export var SignalMessageAction;\n(function (SignalMessageAction) {\n SignalMessageAction[\"OFFER\"] = \"offer\";\n SignalMessageAction[\"ANSWER\"] = \"answer\";\n SignalMessageAction[\"ICE_CANDIDATE\"] = \"icecandidate\";\n SignalMessageAction[\"END_SESSION\"] = \"endsession\";\n SignalMessageAction[\"HEARTBEAT\"] = \"heartbeat\";\n SignalMessageAction[\"WARNING\"] = \"warning\";\n SignalMessageAction[\"TALK_STREAM_INTERRUPTED\"] = \"talkinputstreaminterrupted\";\n SignalMessageAction[\"TALK_STREAM_INPUT\"] = \"talkstream\";\n SignalMessageAction[\"SESSION_READY\"] = \"sessionready\";\n SignalMessageAction[\"AGENT_AUDIO_INPUT\"] = \"agentaudioinput\";\n SignalMessageAction[\"AGENT_AUDIO_INPUT_END\"] = \"agentaudioinputend\";\n})(SignalMessageAction || (SignalMessageAction = {}));\n//# sourceMappingURL=SignalMessage.js.map","export var DataChannelMessage;\n(function (DataChannelMessage) {\n DataChannelMessage[\"SPEECH_TEXT\"] = \"speechText\";\n DataChannelMessage[\"CLIENT_TOOL_EVENT\"] = \"clientToolEvent\";\n})(DataChannelMessage || (DataChannelMessage = {}));\n//# sourceMappingURL=DataChannelMessage.js.map","export var AudioPermissionState;\n(function (AudioPermissionState) {\n AudioPermissionState[\"PENDING\"] = \"pending\";\n AudioPermissionState[\"GRANTED\"] = \"granted\";\n AudioPermissionState[\"DENIED\"] = \"denied\";\n AudioPermissionState[\"NOT_REQUESTED\"] = \"not_requested\";\n})(AudioPermissionState || (AudioPermissionState = {}));\n//# sourceMappingURL=InputAudioState.js.map","export var MessageRole;\n(function (MessageRole) {\n MessageRole[\"USER\"] = \"user\";\n MessageRole[\"PERSONA\"] = \"persona\";\n})(MessageRole || (MessageRole = {}));\n//# sourceMappingURL=MessageRole.js.map","export var AnamEvent;\n(function (AnamEvent) {\n AnamEvent[\"MESSAGE_HISTORY_UPDATED\"] = \"MESSAGE_HISTORY_UPDATED\";\n AnamEvent[\"MESSAGE_STREAM_EVENT_RECEIVED\"] = \"MESSAGE_STREAM_EVENT_RECEIVED\";\n AnamEvent[\"CONNECTION_ESTABLISHED\"] = \"CONNECTION_ESTABLISHED\";\n AnamEvent[\"CONNECTION_CLOSED\"] = \"CONNECTION_CLOSED\";\n AnamEvent[\"INPUT_AUDIO_STREAM_STARTED\"] = \"INPUT_AUDIO_STREAM_STARTED\";\n AnamEvent[\"VIDEO_STREAM_STARTED\"] = \"VIDEO_STREAM_STARTED\";\n AnamEvent[\"VIDEO_PLAY_STARTED\"] = \"VIDEO_PLAY_STARTED\";\n AnamEvent[\"AUDIO_STREAM_STARTED\"] = \"AUDIO_STREAM_STARTED\";\n AnamEvent[\"TALK_STREAM_INTERRUPTED\"] = \"TALK_STREAM_INTERRUPTED\";\n AnamEvent[\"SESSION_READY\"] = \"SESSION_READY\";\n AnamEvent[\"SERVER_WARNING\"] = \"SERVER_WARNING\";\n AnamEvent[\"MIC_PERMISSION_PENDING\"] = \"MIC_PERMISSION_PENDING\";\n AnamEvent[\"MIC_PERMISSION_GRANTED\"] = \"MIC_PERMISSION_GRANTED\";\n AnamEvent[\"MIC_PERMISSION_DENIED\"] = \"MIC_PERMISSION_DENIED\";\n AnamEvent[\"INPUT_AUDIO_DEVICE_CHANGED\"] = \"INPUT_AUDIO_DEVICE_CHANGED\";\n AnamEvent[\"CLIENT_TOOL_EVENT_RECEIVED\"] = \"CLIENT_TOOL_EVENT_RECEIVED\";\n})(AnamEvent || (AnamEvent = {}));\n//# sourceMappingURL=AnamEvent.js.map","export var InternalEvent;\n(function (InternalEvent) {\n InternalEvent[\"WEB_SOCKET_OPEN\"] = \"WEB_SOCKET_OPEN\";\n InternalEvent[\"SIGNAL_MESSAGE_RECEIVED\"] = \"SIGNAL_MESSAGE_RECEIVED\";\n InternalEvent[\"WEBRTC_CHAT_MESSAGE_RECEIVED\"] = \"WEBRTC_CHAT_MESSAGE_RECEIVED\";\n InternalEvent[\"WEBRTC_CLIENT_TOOL_EVENT_RECEIVED\"] = \"WEBRTC_CLIENT_TOOL_EVENT_RECEIVED\";\n})(InternalEvent || (InternalEvent = {}));\n//# sourceMappingURL=InternalEvent.js.map","export var ConnectionClosedCode;\n(function (ConnectionClosedCode) {\n ConnectionClosedCode[\"NORMAL\"] = \"CONNECTION_CLOSED_CODE_NORMAL\";\n ConnectionClosedCode[\"MICROPHONE_PERMISSION_DENIED\"] = \"CONNECTION_CLOSED_CODE_MICROPHONE_PERMISSION_DENIED\";\n ConnectionClosedCode[\"SIGNALLING_CLIENT_CONNECTION_FAILURE\"] = \"CONNECTION_CLOSED_CODE_SIGNALLING_CLIENT_CONNECTION_FAILURE\";\n ConnectionClosedCode[\"WEBRTC_FAILURE\"] = \"CONNECTION_CLOSED_CODE_WEBRTC_FAILURE\";\n ConnectionClosedCode[\"SERVER_CLOSED_CONNECTION\"] = \"CONNECTION_CLOSED_CODE_SERVER_CLOSED_CONNECTION\";\n})(ConnectionClosedCode || (ConnectionClosedCode = {}));\n//# sourceMappingURL=ConnectionClosedCodes.js.map","export class AgentAudioInputStream {\n constructor(config, signallingClient) {\n this.sequenceNumber = 0;\n this.config = config;\n this.signallingClient = signallingClient;\n }\n /**\n * Send PCM audio chunk to server.\n * @param audioData - Raw PCM audio bytes (ArrayBuffer/Uint8Array) or base64-encoded string\n */\n sendAudioChunk(audioData) {\n const base64 = typeof audioData === 'string'\n ? audioData\n : this.arrayBufferToBase64(audioData);\n const payload = {\n audioData: base64,\n encoding: this.config.encoding,\n sampleRate: this.config.sampleRate,\n channels: this.config.channels,\n sequenceNumber: this.sequenceNumber++,\n };\n this.signallingClient.sendAgentAudioInput(payload);\n }\n /**\n * Signal end of the current audio sequence/turn.\n * Sends AGENT_AUDIO_INPUT_END signal message and resets sequence number.\n */\n endSequence() {\n this.signallingClient.sendAgentAudioInputEnd();\n this.sequenceNumber = 0;\n }\n /**\n * Get the current sequence number (number of chunks sent in current sequence).\n */\n getSequenceNumber() {\n return this.sequenceNumber;\n }\n /**\n * Get the audio format configuration for this stream.\n */\n getConfig() {\n return this.config;\n }\n arrayBufferToBase64(buffer) {\n const bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n const binary = Array.from(bytes, (byte) => String.fromCharCode(byte)).join('');\n return btoa(binary);\n }\n}\n//# sourceMappingURL=AgentAudioInputStream.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { AnamEvent, InternalEvent, SignalMessageAction, ConnectionClosedCode, } from '../types';\nconst DEFAULT_HEARTBEAT_INTERVAL_SECONDS = 5;\nconst DEFAULT_WS_RECONNECTION_ATTEMPTS = 5;\nexport class SignallingClient {\n constructor(sessionId, options, publicEventEmitter, internalEventEmitter, apiGatewayConfig) {\n var _a, _b, _c, _d, _e;\n this.stopSignal = false;\n this.sendingBuffer = [];\n this.wsConnectionAttempts = 0;\n this.socket = null;\n this.heartBeatIntervalRef = null;\n this.publicEventEmitter = publicEventEmitter;\n this.internalEventEmitter = internalEventEmitter;\n this.apiGatewayConfig = apiGatewayConfig;\n if (!sessionId) {\n throw new Error('Signalling Client: sessionId is required');\n }\n this.sessionId = sessionId;\n const { heartbeatIntervalSeconds, maxWsReconnectionAttempts, url } = options;\n this.heartbeatIntervalSeconds =\n heartbeatIntervalSeconds || DEFAULT_HEARTBEAT_INTERVAL_SECONDS;\n this.maxWsReconnectionAttempts =\n maxWsReconnectionAttempts || DEFAULT_WS_RECONNECTION_ATTEMPTS;\n if (!url.baseUrl) {\n throw new Error('Signalling Client: baseUrl is required');\n }\n // Construct WebSocket URL (with or without API Gateway)\n if (((_a = this.apiGatewayConfig) === null || _a === void 0 ? void 0 : _a.enabled) && ((_b = this.apiGatewayConfig) === null || _b === void 0 ? void 0 : _b.baseUrl)) {\n // Use API Gateway WebSocket URL\n const gatewayUrl = new URL(this.apiGatewayConfig.baseUrl);\n const wsPath = (_c = this.apiGatewayConfig.wsPath) !== null && _c !== void 0 ? _c : '/ws';\n // Construct gateway WebSocket URL\n gatewayUrl.protocol = gatewayUrl.protocol.replace('http', 'ws');\n gatewayUrl.pathname = wsPath;\n this.url = gatewayUrl;\n // Construct the complete target WebSocket URL and pass it as a query parameter\n const httpProtocol = url.protocol || 'https';\n const targetProtocol = httpProtocol === 'http' ? 'ws' : 'wss';\n const httpUrl = `${httpProtocol}://${url.baseUrl}`;\n const targetWsPath = (_d = url.signallingPath) !== null && _d !== void 0 ? _d : '/ws';\n // Build complete target URL\n const targetUrl = new URL(httpUrl);\n targetUrl.protocol = targetProtocol === 'ws' ? 'ws:' : 'wss:';\n if (url.port) {\n targetUrl.port = url.port;\n }\n targetUrl.pathname = targetWsPath;\n targetUrl.searchParams.append('session_id', sessionId);\n // Pass complete target URL as query parameter\n this.url.searchParams.append('target_url', targetUrl.href);\n }\n else {\n // Direct connection to Anam (original behavior)\n const httpProtocol = url.protocol || 'https';\n const initUrl = `${httpProtocol}://${url.baseUrl}`;\n this.url = new URL(initUrl);\n this.url.protocol = url.protocol === 'http' ? 'ws:' : 'wss:';\n if (url.port) {\n this.url.port = url.port;\n }\n this.url.pathname = (_e = url.signallingPath) !== null && _e !== void 0 ? _e : '/ws';\n this.url.searchParams.append('session_id', sessionId);\n }\n }\n stop() {\n this.stopSignal = true;\n this.closeSocket();\n }\n connect() {\n this.socket = new WebSocket(this.url.href);\n this.socket.onopen = this.onOpen.bind(this);\n this.socket.onclose = this.onClose.bind(this);\n this.socket.onerror = this.onError.bind(this);\n return this.socket;\n }\n sendOffer(localDescription) {\n return __awaiter(this, void 0, void 0, function* () {\n const offerMessagePayload = {\n connectionDescription: localDescription,\n userUid: this.sessionId, // TODO: this should be renamed to session Id on the server\n };\n const offerMessage = {\n actionType: SignalMessageAction.OFFER,\n sessionId: this.sessionId,\n payload: offerMessagePayload,\n };\n this.sendSignalMessage(offerMessage);\n });\n }\n sendIceCandidate(candidate) {\n return __awaiter(this, void 0, void 0, function* () {\n const iceCandidateMessage = {\n actionType: SignalMessageAction.ICE_CANDIDATE,\n sessionId: this.sessionId,\n payload: candidate.toJSON(),\n };\n this.sendSignalMessage(iceCandidateMessage);\n });\n }\n sendSignalMessage(message) {\n var _a;\n if (((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN) {\n try {\n this.socket.send(JSON.stringify(message));\n }\n catch (error) {\n console.error('SignallingClient - sendSignalMessage: error sending message', error);\n }\n }\n else {\n this.sendingBuffer.push(message);\n }\n }\n sendTalkMessage(payload) {\n return __awaiter(this, void 0, void 0, function* () {\n const chatMessage = {\n actionType: SignalMessageAction.TALK_STREAM_INPUT,\n sessionId: this.sessionId,\n payload: payload,\n };\n this.sendSignalMessage(chatMessage);\n });\n }\n sendAgentAudioInput(payload) {\n const message = {\n actionType: SignalMessageAction.AGENT_AUDIO_INPUT,\n sessionId: this.sessionId,\n payload: payload,\n };\n this.sendSignalMessage(message);\n }\n sendAgentAudioInputEnd() {\n const message = {\n actionType: SignalMessageAction.AGENT_AUDIO_INPUT_END,\n sessionId: this.sessionId,\n payload: {},\n };\n this.sendSignalMessage(message);\n }\n closeSocket() {\n if (this.socket) {\n this.socket.close();\n this.socket = null;\n }\n if (this.heartBeatIntervalRef) {\n clearInterval(this.heartBeatIntervalRef);\n this.heartBeatIntervalRef = null;\n }\n }\n onOpen() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.socket) {\n throw new Error('SignallingClient - onOpen: socket is null');\n }\n try {\n this.wsConnectionAttempts = 0;\n this.flushSendingBuffer();\n this.socket.onmessage = this.onMessage.bind(this);\n this.startSendingHeartBeats();\n this.internalEventEmitter.emit(InternalEvent.WEB_SOCKET_OPEN);\n }\n catch (e) {\n console.error('SignallingClient - onOpen: error in onOpen', e);\n this.publicEventEmitter.emit(AnamEvent.CONNECTION_CLOSED, ConnectionClosedCode.SIGNALLING_CLIENT_CONNECTION_FAILURE);\n }\n });\n }\n onClose() {\n return __awaiter(this, void 0, void 0, function* () {\n this.wsConnectionAttempts += 1;\n if (this.stopSignal) {\n return;\n }\n if (this.wsConnectionAttempts <= this.maxWsReconnectionAttempts) {\n this.socket = null;\n setTimeout(() => {\n this.connect();\n }, 100 * this.wsConnectionAttempts);\n }\n else {\n if (this.heartBeatIntervalRef) {\n clearInterval(this.heartBeatIntervalRef);\n this.heartBeatIntervalRef = null;\n }\n this.publicEventEmitter.emit(AnamEvent.CONNECTION_CLOSED, ConnectionClosedCode.SIGNALLING_CLIENT_CONNECTION_FAILURE);\n }\n });\n }\n onError(event) {\n if (this.stopSignal) {\n return;\n }\n console.error('SignallingClient - onError: ', event);\n }\n flushSendingBuffer() {\n const newBuffer = [];\n if (this.sendingBuffer.length > 0) {\n this.sendingBuffer.forEach((message) => {\n var _a;\n if (((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN) {\n this.socket.send(JSON.stringify(message));\n }\n else {\n newBuffer.push(message);\n }\n });\n }\n this.sendingBuffer = newBuffer;\n }\n onMessage(event) {\n return __awaiter(this, void 0, void 0, function* () {\n const message = JSON.parse(event.data);\n this.internalEventEmitter.emit(InternalEvent.SIGNAL_MESSAGE_RECEIVED, message);\n });\n }\n startSendingHeartBeats() {\n if (!this.socket) {\n throw new Error('SignallingClient - startSendingHeartBeats: socket is null');\n }\n if (this.heartBeatIntervalRef) {\n console.warn('SignallingClient - startSendingHeartBeats: heartbeat interval already set');\n }\n // send a heartbeat message every heartbeatIntervalSeconds\n const heartbeatInterval = this.heartbeatIntervalSeconds * 1000;\n const heartbeatMessage = {\n actionType: SignalMessageAction.HEARTBEAT,\n sessionId: this.sessionId,\n payload: '',\n };\n const heartbeatMessageJson = JSON.stringify(heartbeatMessage);\n this.heartBeatIntervalRef = setInterval(() => {\n var _a;\n if (this.stopSignal) {\n return;\n }\n if (((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN) {\n this.socket.send(heartbeatMessageJson);\n }\n }, heartbeatInterval);\n }\n}\n//# sourceMappingURL=SignallingClient.js.map","export function isCustomPersonaConfig(personaConfig) {\n return 'brainType' in personaConfig || 'llmId' in personaConfig;\n}\n//# sourceMappingURL=PersonaConfig.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { ClientError, ErrorCode } from '../lib/ClientError';\nimport { CLIENT_METADATA, DEFAULT_API_BASE_URL, DEFAULT_API_VERSION, } from '../lib/constants';\nimport { isCustomPersonaConfig } from '../types/PersonaConfig';\nexport class CoreApiRestClient {\n constructor(sessionToken, apiKey, options) {\n if (!sessionToken && !apiKey) {\n throw new Error('Either sessionToken or apiKey must be provided');\n }\n this.sessionToken = sessionToken || null;\n this.apiKey = apiKey || null;\n this.baseUrl = (options === null || options === void 0 ? void 0 : options.baseUrl) || DEFAULT_API_BASE_URL;\n this.apiVersion = (options === null || options === void 0 ? void 0 : options.apiVersion) || DEFAULT_API_VERSION;\n this.apiGatewayConfig = (options === null || options === void 0 ? void 0 : options.apiGateway) || undefined;\n }\n /**\n * Builds URL and headers for a request, applying API Gateway configuration if enabled\n */\n buildGatewayUrlAndHeaders(targetPath, baseHeaders) {\n var _a, _b;\n if (((_a = this.apiGatewayConfig) === null || _a === void 0 ? void 0 : _a.enabled) && ((_b = this.apiGatewayConfig) === null || _b === void 0 ? void 0 : _b.baseUrl)) {\n // Use gateway base URL with same endpoint path\n const url = `${this.apiGatewayConfig.baseUrl}${targetPath}`;\n // Add complete target URL header for gateway routing\n const targetUrl = new URL(`${this.baseUrl}${targetPath}`);\n const headers = Object.assign(Object.assign({}, baseHeaders), { 'X-Anam-Target-Url': targetUrl.href });\n return { url, headers };\n }\n else {\n // Direct call to Anam API\n return {\n url: `${this.baseUrl}${targetPath}`,\n headers: baseHeaders,\n };\n }\n }\n startSession(personaConfig, sessionOptions) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.sessionToken) {\n if (!personaConfig) {\n throw new ClientError('Persona configuration must be provided when using apiKey', ErrorCode.CLIENT_ERROR_CODE_VALIDATION_ERROR, 400);\n }\n this.sessionToken = yield this.unsafe_getSessionToken(personaConfig);\n }\n // Check if brainType is being used and log deprecation warning\n if (personaConfig && 'brainType' in personaConfig) {\n console.warn('Warning: brainType is deprecated and will be removed in a future version. Please use llmId instead.');\n }\n try {\n const targetPath = `${this.apiVersion}/engine/session`;\n const { url, headers } = this.buildGatewayUrlAndHeaders(targetPath, {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.sessionToken}`,\n });\n const response = yield fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n personaConfig,\n sessionOptions,\n clientMetadata: CLIENT_METADATA,\n }),\n });\n const data = yield response.json();\n const errorCause = data.error;\n switch (response.status) {\n case 200:\n case 201:\n return data;\n case 400:\n throw new ClientError('Invalid request to start session', ErrorCode.CLIENT_ERROR_CODE_VALIDATION_ERROR, 400, { cause: data.message });\n case 401:\n throw new ClientError('Authentication failed when starting session', ErrorCode.CLIENT_ERROR_CODE_AUTHENTICATION_ERROR, 401, { cause: data.message });\n case 402:\n throw new ClientError('Please sign up for a plan to start a session', ErrorCode.CLIENT_ERROR_CODE_NO_PLAN_FOUND, 402, { cause: data.message });\n case 403:\n throw new ClientError('Authentication failed when starting session', ErrorCode.CLIENT_ERROR_CODE_AUTHENTICATION_ERROR, 403, { cause: data.message });\n case 429:\n if (errorCause === 'Concurrent session limit reached') {\n throw new ClientError('Concurrency limit reached, please upgrade your plan', ErrorCode.CLIENT_ERROR_CODE_MAX_CONCURRENT_SESSIONS_REACHED, 429, { cause: data.message });\n }\n else if (errorCause === 'Spend cap reached') {\n throw new ClientError('Spend cap reached, please upgrade your plan', ErrorCode.CLIENT_ERROR_CODE_SPEND_CAP_REACHED, 429, { cause: data.message });\n }\n else {\n throw new ClientError('Usage limit reached, please upgrade your plan', ErrorCode.CLIENT_ERROR_CODE_USAGE_LIMIT_REACHED, 429, { cause: data.message });\n }\n case 503:\n throw new ClientError('There are no available personas, please try again later', ErrorCode.CLIENT_ERROR_CODE_SERVICE_BUSY, 503, { cause: data.message });\n default:\n throw new ClientError('Unknown error when starting session', ErrorCode.CLIENT_ERROR_CODE_SERVER_ERROR, 500, { cause: data.message });\n }\n }\n catch (error) {\n if (error instanceof ClientError) {\n throw error;\n }\n throw new ClientError('Failed to start session', ErrorCode.CLIENT_ERROR_CODE_SERVER_ERROR, 500, { cause: error instanceof Error ? error.message : String(error) });\n }\n });\n }\n unsafe_getSessionToken(personaConfig) {\n return __awaiter(this, void 0, void 0, function* () {\n console.warn('Using unsecure method. This method should not be used in production.');\n if (!this.apiKey) {\n throw new Error('No apiKey provided');\n }\n // Check if brainType is being used and log deprecation warning\n if (personaConfig && 'brainType' in personaConfig) {\n console.warn('Warning: brainType is deprecated and will be removed in a future version. Please use llmId instead.');\n }\n let body = {\n clientLabel: 'js-sdk-api-key',\n };\n if (isCustomPersonaConfig(personaConfig)) {\n body = Object.assign(Object.assign({}, body), { personaConfig });\n }\n try {\n const targetPath = `${this.apiVersion}/auth/session-token`;\n const { url, headers } = this.buildGatewayUrlAndHeaders(targetPath, {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n });\n const response = yield fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n });\n const data = yield response.json();\n return data.sessionToken;\n }\n catch (e) {\n throw new Error('Failed to get session token');\n }\n });\n }\n getApiUrl() {\n return `${this.baseUrl}${this.apiVersion}`;\n }\n}\n//# sourceMappingURL=CoreApiRestClient.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nexport class EngineApiRestClient {\n constructor(baseUrl, sessionId, apiGatewayConfig) {\n this.baseUrl = baseUrl;\n this.sessionId = sessionId;\n this.apiGatewayConfig = apiGatewayConfig;\n }\n sendTalkCommand(content) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n try {\n // Determine the URL and headers based on API Gateway configuration\n let url;\n let headers = {\n 'Content-Type': 'application/json',\n };\n const targetPath = `/talk`;\n const queryString = `?session_id=${this.sessionId}`;\n if (((_a = this.apiGatewayConfig) === null || _a === void 0 ? void 0 : _a.enabled) && ((_b = this.apiGatewayConfig) === null || _b === void 0 ? void 0 : _b.baseUrl)) {\n // Use gateway base URL with same endpoint path\n url = `${this.apiGatewayConfig.baseUrl}${targetPath}${queryString}`;\n // Add complete target URL header for gateway routing\n const targetUrl = new URL(`${this.baseUrl}${targetPath}${queryString}`);\n headers['X-Anam-Target-Url'] = targetUrl.href;\n }\n else {\n // Direct call to Anam engine\n url = `${this.baseUrl}${targetPath}${queryString}`;\n }\n const response = yield fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n content,\n }),\n });\n if (!response.ok) {\n throw new Error(`Failed to send talk command: ${response.status} ${response.statusText}`);\n }\n }\n catch (error) {\n console.error(error);\n throw new Error('EngineApiRestClient - sendTalkCommand: Failed to send talk command');\n }\n });\n }\n}\n//# sourceMappingURL=EngineApiRestClient.js.map","export class InternalEventEmitter {\n constructor() {\n this.listeners = {};\n }\n addListener(event, callback) {\n if (!this.listeners[event]) {\n this.listeners[event] = new Set();\n }\n this.listeners[event].add(callback);\n }\n removeListener(event, callback) {\n if (!this.listeners[event])\n return;\n this.listeners[event].delete(callback);\n }\n emit(event, ...args) {\n if (!this.listeners[event])\n return;\n this.listeners[event].forEach((callback) => {\n callback(...args);\n });\n }\n}\n//# sourceMappingURL=InternalEventEmitter.js.map","import { MessageRole, InternalEvent, AnamEvent, } from '../types';\nexport class MessageHistoryClient {\n constructor(publicEventEmitter, internalEventEmitter) {\n this.messages = [];\n this.publicEventEmitter = publicEventEmitter;\n this.internalEventEmitter = internalEventEmitter;\n // register for events\n this.internalEventEmitter.addListener(InternalEvent.WEBRTC_CHAT_MESSAGE_RECEIVED, this.processWebRtcTextMessageEvent.bind(this));\n }\n webRtcTextMessageEventToMessageStreamEvent(event) {\n return {\n id: `${event.role}::${event.message_id}`, // id is the same for persona and user for a single question response, so we need to differentiate them\n content: event.content,\n role: event.role,\n endOfSpeech: event.end_of_speech,\n interrupted: event.interrupted,\n };\n }\n processUserMessage(messageEvent) {\n // each user message is added directly to the history\n // user messages can not be interrupted\n const userMessage = {\n id: messageEvent.id,\n content: messageEvent.content,\n role: messageEvent.role,\n };\n this.messages.push(userMessage);\n }\n processPersonaMessage(messageEvent) {\n const personaMessage = {\n id: messageEvent.id,\n content: messageEvent.content,\n role: messageEvent.role,\n interrupted: messageEvent.interrupted,\n };\n // check for existing message in the history\n const existingMessageIndex = this.messages.findIndex((m) => m.id === personaMessage.id);\n if (existingMessageIndex !== -1) {\n const existingMessage = this.messages[existingMessageIndex];\n // update the existing message\n this.messages[existingMessageIndex] = Object.assign(Object.assign({}, existingMessage), { content: existingMessage.content + personaMessage.content, interrupted: existingMessage.interrupted || personaMessage.interrupted });\n }\n else {\n // add the new persona message to the history\n this.messages.push(personaMessage);\n }\n }\n processWebRtcTextMessageEvent(event) {\n const messageStreamEvent = this.webRtcTextMessageEventToMessageStreamEvent(event);\n // pass to callback stream\n this.publicEventEmitter.emit(AnamEvent.MESSAGE_STREAM_EVENT_RECEIVED, messageStreamEvent);\n // update the message history\n switch (messageStreamEvent.role) {\n case MessageRole.USER:\n this.processUserMessage(messageStreamEvent);\n break;\n case MessageRole.PERSONA:\n this.processPersonaMessage(messageStreamEvent);\n break;\n }\n if (messageStreamEvent.endOfSpeech) {\n this.publicEventEmitter.emit(AnamEvent.MESSAGE_HISTORY_UPDATED, this.messages);\n }\n }\n}\n//# sourceMappingURL=MessageHistoryClient.js.map","import { ClientMetricMeasurement, sendClientMetric, } from '../lib/ClientMetrics';\nimport { AnamEvent } from '../types';\nexport class PublicEventEmitter {\n constructor() {\n this.listeners = {};\n }\n addListener(event, callback) {\n if (!this.listeners[event]) {\n this.listeners[event] = new Set();\n }\n this.listeners[event].add(callback);\n }\n removeListener(event, callback) {\n if (!this.listeners[event])\n return;\n this.listeners[event].delete(callback);\n }\n emit(event, ...args) {\n if (event === AnamEvent.CONNECTION_ESTABLISHED) {\n sendClientMetric(ClientMetricMeasurement.CLIENT_METRIC_MEASUREMENT_CONNECTION_ESTABLISHED, '1');\n }\n if (event === AnamEvent.CONNECTION_CLOSED) {\n const [closeCode, details] = args;\n sendClientMetric(ClientMetricMeasurement.CLIENT_METRIC_MEASUREMENT_CONNECTION_CLOSED, closeCode, details ? { details: details } : undefined);\n }\n if (!this.listeners[event])\n return;\n this.listeners[event].forEach((callback) => {\n callback(...args);\n });\n }\n}\n//# sourceMappingURL=PublicEventEmitter.js.map","export var TalkMessageStreamState;\n(function (TalkMessageStreamState) {\n TalkMessageStreamState[TalkMessageStreamState[\"UNSTARTED\"] = 0] = \"UNSTARTED\";\n TalkMessageStreamState[TalkMessageStreamState[\"STREAMING\"] = 1] = \"STREAMING\";\n TalkMessageStreamState[TalkMessageStreamState[\"INTERRUPTED\"] = 2] = \"INTERRUPTED\";\n TalkMessageStreamState[TalkMessageStreamState[\"ENDED\"] = 3] = \"ENDED\";\n})(TalkMessageStreamState || (TalkMessageStreamState = {}));\n//# sourceMappingURL=TalkMessageStreamState.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { InternalEvent, SignalMessageAction } from '.';\nimport { TalkMessageStreamState } from './TalkMessageStreamState';\nexport class TalkMessageStream {\n constructor(correlationId, internalEventEmitter, signallingClient) {\n this.state = TalkMessageStreamState.UNSTARTED;\n this.correlationId = correlationId;\n this.internalEventEmitter = internalEventEmitter;\n this.signallingClient = signallingClient;\n this.internalEventEmitter.addListener(InternalEvent.SIGNAL_MESSAGE_RECEIVED, this.onSignalMessage.bind(this));\n }\n onDeactivate() {\n this.internalEventEmitter.removeListener(InternalEvent.SIGNAL_MESSAGE_RECEIVED, this.onSignalMessage.bind(this));\n }\n onSignalMessage(signalMessage) {\n return __awaiter(this, void 0, void 0, function* () {\n if (signalMessage.actionType === SignalMessageAction.TALK_STREAM_INTERRUPTED) {\n const message = signalMessage.payload;\n if (message.correlationId === this.correlationId) {\n this.state = TalkMessageStreamState.INTERRUPTED;\n this.onDeactivate();\n }\n }\n });\n }\n endMessage() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.state === TalkMessageStreamState.ENDED) {\n console.warn('Talk stream is already ended via end of speech. No need to call endMessage.');\n return;\n }\n if (this.state !== TalkMessageStreamState.STREAMING) {\n console.warn('Talk stream is not active state: ' + this.state);\n return;\n }\n const payload = {\n content: '',\n startOfSpeech: false,\n endOfSpeech: true,\n correlationId: this.correlationId,\n };\n yield this.signallingClient.sendTalkMessage(payload);\n this.state = TalkMessageStreamState.ENDED;\n this.onDeactivate();\n });\n }\n streamMessageChunk(partialMessage, endOfSpeech) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.state !== TalkMessageStreamState.STREAMING &&\n this.state !== TalkMessageStreamState.UNSTARTED) {\n // throw error\n throw new Error('Talk stream is not in an active state: ' + this.state);\n }\n const payload = {\n content: partialMessage,\n startOfSpeech: this.state === TalkMessageStreamState.UNSTARTED,\n endOfSpeech: endOfSpeech,\n correlationId: this.correlationId,\n };\n this.state = endOfSpeech\n ? TalkMessageStreamState.ENDED\n : TalkMessageStreamState.STREAMING;\n if (this.state === TalkMessageStreamState.ENDED) {\n this.onDeactivate();\n }\n // send message to signalling client\n yield this.signallingClient.sendTalkMessage(payload);\n });\n }\n getCorrelationId() {\n return this.correlationId;\n }\n isActive() {\n return (this.state === TalkMessageStreamState.STREAMING ||\n this.state === TalkMessageStreamState.UNSTARTED);\n }\n getState() {\n return this.state;\n }\n}\n//# sourceMappingURL=TalkMessageStream.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { ClientMetricMeasurement, createRTCStatsReport, sendClientMetric, } from '../lib/ClientMetrics';\nimport { EngineApiRestClient, SignallingClient, ToolCallManager, } from '../modules';\nimport { AnamEvent, AudioPermissionState, ConnectionClosedCode, DataChannelMessage, InternalEvent, SignalMessageAction, } from '../types';\nimport { AgentAudioInputStream } from '../types/AgentAudioInputStream';\nimport { TalkMessageStream } from '../types/TalkMessageStream';\nconst SUCCESS_METRIC_POLLING_TIMEOUT_MS = 15000; // After this time we will stop polling for the first frame and consider the session a failure.\nconst STATS_COLLECTION_INTERVAL_MS = 5000;\nconst ICE_CANDIDATE_POOL_SIZE = 2; // Optimisation to speed up connection time\nexport class StreamingClient {\n constructor(sessionId, options, publicEventEmitter, internalEventEmitter) {\n var _a, _b, _c, _d;\n this.peerConnection = null;\n this.connectionReceivedAnswer = false;\n this.remoteIceCandidateBuffer = [];\n this.inputAudioStream = null;\n this.dataChannel = null;\n this.videoElement = null;\n this.videoStream = null;\n this.audioStream = null;\n this.inputAudioState = {\n isMuted: false,\n permissionState: AudioPermissionState.NOT_REQUESTED,\n };\n this.successMetricPoller = null;\n this.successMetricFired = false;\n this.showPeerConnectionStatsReport = false;\n this.peerConnectionStatsReportOutputFormat = 'console';\n this.statsCollectionInterval = null;\n this.agentAudioInputStream = null;\n this.publicEventEmitter = publicEventEmitter;\n this.internalEventEmitter = internalEventEmitter;\n this.apiGatewayConfig = options.apiGateway;\n // initialize input audio state\n const { inputAudio } = options;\n this.inputAudioState = inputAudio.inputAudioState;\n if (options.inputAudio.userProvidedMediaStream) {\n this.inputAudioStream = options.inputAudio.userProvidedMediaStream;\n }\n this.disableInputAudio = options.inputAudio.disableInputAudio === true;\n // register event handlers\n this.internalEventEmitter.addListener(InternalEvent.WEB_SOCKET_OPEN, this.onSignallingClientConnected.bind(this));\n this.internalEventEmitter.addListener(InternalEvent.SIGNAL_MESSAGE_RECEIVED, this.onSignalMessage.bind(this));\n // set ice servers\n this.iceServers = options.iceServers;\n // initialize signalling client\n this.signallingClient = new SignallingClient(sessionId, options.signalling, this.publicEventEmitter, this.internalEventEmitter, this.apiGatewayConfig);\n // initialize engine API client\n this.engineApiRestClient = new EngineApiRestClient(options.engine.baseUrl, sessionId, this.apiGatewayConfig);\n this.audioDeviceId = options.inputAudio.audioDeviceId;\n this.showPeerConnectionStatsReport =\n (_b = (_a = options.metrics) === null || _a === void 0 ? void 0 : _a.showPeerConnectionStatsReport) !== null && _b !== void 0 ? _b : false;\n this.peerConnectionStatsReportOutputFormat =\n (_d = (_c = options.metrics) === null || _c === void 0 ? void 0 : _c.peerConnectionStatsReportOutputFormat) !== null && _d !== void 0 ? _d : 'console';\n }\n onInputAudioStateChange(oldState, newState) {\n // changed microphone mute state\n if (oldState.isMuted !== newState.isMuted) {\n if (newState.isMuted) {\n this.muteAllAudioTracks();\n }\n else {\n this.unmuteAllAudioTracks();\n }\n }\n }\n muteAllAudioTracks() {\n var _a;\n (_a = this.inputAudioStream) === null || _a === void 0 ? void 0 : _a.getAudioTracks().forEach((track) => {\n track.enabled = false;\n });\n }\n unmuteAllAudioTracks() {\n var _a;\n (_a = this.inputAudioStream) === null || _a === void 0 ? void 0 : _a.getAudioTracks().forEach((track) => {\n track.enabled = true;\n });\n }\n startStatsCollection() {\n if (this.statsCollectionInterval) {\n return;\n }\n // Send stats every STATS_COLLECTION_INTERVAL_MS seconds\n this.statsCollectionInterval = setInterval(() => __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection ||\n !this.dataChannel ||\n this.dataChannel.readyState !== 'open') {\n return;\n }\n try {\n const stats = yield this.peerConnection.getStats();\n this.sendClientSideMetrics(stats);\n }\n catch (error) {\n console.error('Failed to collect and send stats:', error);\n }\n }), STATS_COLLECTION_INTERVAL_MS);\n }\n sendClientSideMetrics(stats) {\n stats.forEach((report) => {\n // Process inbound-rtp stats for both video and audio\n if (report.type === 'inbound-rtp') {\n const metrics = {\n message_type: 'remote_rtp_stats',\n data: report,\n };\n // Send the metrics via data channel\n if (this.dataChannel && this.dataChannel.readyState === 'open') {\n this.dataChannel.send(JSON.stringify(metrics));\n }\n }\n });\n }\n startSuccessMetricPolling() {\n if (this.successMetricPoller || this.successMetricFired) {\n return;\n }\n const timeoutId = setTimeout(() => {\n if (this.successMetricPoller) {\n console.warn('No video frames received, there is a problem with the connection.');\n clearInterval(this.successMetricPoller);\n this.successMetricPoller = null;\n }\n }, SUCCESS_METRIC_POLLING_TIMEOUT_MS);\n this.successMetricPoller = setInterval(() => __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection || this.successMetricFired) {\n if (this.successMetricPoller) {\n clearInterval(this.successMetricPoller);\n }\n clearTimeout(timeoutId);\n return;\n }\n try {\n const stats = yield this.peerConnection.getStats();\n let videoDetected = false;\n let detectionMethod = null;\n stats.forEach((report) => {\n // Find the report for inbound video\n if (report.type === 'inbound-rtp' && report.kind === 'video') {\n // Method 1: Try framesDecoded (most reliable when available)\n if (report.framesDecoded !== undefined &&\n report.framesDecoded > 0) {\n videoDetected = true;\n detectionMethod = 'framesDecoded';\n }\n else if (report.framesReceived !== undefined &&\n report.framesReceived > 0) {\n videoDetected = true;\n detectionMethod = 'framesReceived';\n }\n else if (report.bytesReceived > 0 &&\n report.packetsReceived > 0 &&\n // Additional check: ensure we've received enough data for actual video\n report.bytesReceived > 100000 // rough threshold\n ) {\n videoDetected = true;\n detectionMethod = 'bytesReceived';\n }\n }\n });\n if (videoDetected && !this.successMetricFired) {\n this.successMetricFired = true;\n sendClientMetric(ClientMetricMeasurement.CLIENT_METRIC_MEASUREMENT_SESSION_SUCCESS, '1', detectionMethod ? { detectionMethod } : undefined);\n if (this.successMetricPoller) {\n clearInterval(this.successMetricPoller);\n }\n clearTimeout(timeoutId);\n this.successMetricPoller = null;\n }\n }\n catch (error) { }\n }), 500);\n }\n muteInputAudio() {\n const oldAudioState = this.inputAudioState;\n const newAudioState = Object.assign(Object.assign({}, this.inputAudioState), { isMuted: true });\n this.inputAudioState = newAudioState;\n this.onInputAudioStateChange(oldAudioState, newAudioState);\n return this.inputAudioState;\n }\n unmuteInputAudio() {\n const oldAudioState = this.inputAudioState;\n const newAudioState = Object.assign(Object.assign({}, this.inputAudioState), { isMuted: false });\n this.inputAudioState = newAudioState;\n this.onInputAudioStateChange(oldAudioState, newAudioState);\n return this.inputAudioState;\n }\n getInputAudioState() {\n return this.inputAudioState;\n }\n getPeerConnection() {\n return this.peerConnection;\n }\n changeAudioInputDevice(deviceId) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection) {\n throw new Error('StreamingClient - changeAudioInputDevice: peer connection is not initialized. Start streaming first.');\n }\n if (deviceId === null || deviceId === undefined) {\n throw new Error('StreamingClient - changeAudioInputDevice: deviceId is required');\n }\n // Store the current mute state to preserve it\n const wasMuted = this.inputAudioState.isMuted;\n try {\n // Stop the current audio stream tracks\n if (this.inputAudioStream) {\n this.inputAudioStream.getAudioTracks().forEach((track) => {\n track.stop();\n });\n }\n // Request new audio stream with the new device ID\n const audioConstraints = {\n echoCancellation: true,\n deviceId: {\n exact: deviceId,\n },\n };\n this.inputAudioStream = yield navigator.mediaDevices.getUserMedia({\n audio: audioConstraints,\n });\n // Update the stored device ID\n this.audioDeviceId = deviceId;\n // Replace the audio track in the peer connection\n yield this.setupAudioTrack();\n // Restore the mute state\n if (wasMuted) {\n this.muteAllAudioTracks();\n }\n // Emit event to notify that the device has changed\n this.publicEventEmitter.emit(AnamEvent.INPUT_AUDIO_DEVICE_CHANGED, deviceId);\n }\n catch (error) {\n console.error('Failed to change audio input device:', error);\n throw new Error(`StreamingClient - changeAudioInputDevice: ${error instanceof Error ? error.message : String(error)}`);\n }\n });\n }\n getInputAudioStream() {\n return this.inputAudioStream;\n }\n getVideoStream() {\n return this.videoStream;\n }\n getAudioStream() {\n return this.audioStream;\n }\n sendDataMessage(message) {\n if (this.dataChannel && this.dataChannel.readyState === 'open') {\n this.dataChannel.send(message);\n }\n }\n setMediaStreamTargetById(videoElementId) {\n // set up streaming targets\n if (videoElementId) {\n const videoElement = document.getElementById(videoElementId);\n if (!videoElement) {\n throw new Error(`StreamingClient: video element with id ${videoElementId} not found`);\n }\n this.videoElement = videoElement;\n }\n }\n startConnection() {\n try {\n if (this.peerConnection) {\n console.error('StreamingClient - startConnection: peer connection already exists');\n return;\n }\n // start the connection\n this.signallingClient.connect();\n }\n catch (error) {\n console.error('StreamingClient - startConnection: error', error);\n this.handleWebrtcFailure(error);\n }\n }\n stopConnection() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.shutdown();\n });\n }\n sendTalkCommand(content) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection) {\n throw new Error('StreamingClient - sendTalkCommand: peer connection is null');\n }\n yield this.engineApiRestClient.sendTalkCommand(content);\n return;\n });\n }\n startTalkMessageStream(correlationId) {\n if (!correlationId) {\n // generate a random correlation uuid\n correlationId = Math.random().toString(36).substring(2, 15);\n }\n return new TalkMessageStream(correlationId, this.internalEventEmitter, this.signallingClient);\n }\n createAgentAudioInputStream(config) {\n this.agentAudioInputStream = new AgentAudioInputStream(config, this.signallingClient);\n return this.agentAudioInputStream;\n }\n getAgentAudioInputStream() {\n return this.agentAudioInputStream;\n }\n initPeerConnection() {\n return __awaiter(this, void 0, void 0, function* () {\n this.peerConnection = new RTCPeerConnection({\n iceServers: this.iceServers,\n iceCandidatePoolSize: ICE_CANDIDATE_POOL_SIZE,\n });\n // set event handlers\n this.peerConnection.onicecandidate = this.onIceCandidate.bind(this);\n this.peerConnection.oniceconnectionstatechange =\n this.onIceConnectionStateChange.bind(this);\n this.peerConnection.onconnectionstatechange =\n this.onConnectionStateChange.bind(this);\n this.peerConnection.addEventListener('track', this.onTrackEventHandler.bind(this));\n // set up data channels\n yield this.setupDataChannels();\n // add transceivers\n this.peerConnection.addTransceiver('video', { direction: 'recvonly' });\n if (this.disableInputAudio) {\n this.peerConnection.addTransceiver('audio', { direction: 'recvonly' });\n }\n else {\n this.peerConnection.addTransceiver('audio', { direction: 'sendrecv' });\n // Handle audio setup after transceivers are configured\n if (this.inputAudioStream) {\n // User provided an audio stream, set it up immediately\n yield this.setupAudioTrack();\n }\n else {\n // No user stream, start microphone permission request asynchronously\n // Don't await - let it run in parallel with connection setup\n this.requestMicrophonePermissionAsync().catch((error) => {\n console.error('Async microphone permission request failed:', error);\n });\n }\n }\n });\n }\n onSignalMessage(signalMessage) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection) {\n console.error('StreamingClient - onSignalMessage: peerConnection is not initialized');\n return;\n }\n switch (signalMessage.actionType) {\n case SignalMessageAction.ANSWER:\n const answer = signalMessage.payload;\n yield this.peerConnection.setRemoteDescription(answer);\n this.connectionReceivedAnswer = true;\n // flush the remote buffer\n this.flushRemoteIceCandidateBuffer();\n break;\n case SignalMessageAction.ICE_CANDIDATE:\n const iceCandidateConfig = signalMessage.payload;\n const candidate = new RTCIceCandidate(iceCandidateConfig);\n if (this.connectionReceivedAnswer) {\n yield this.peerConnection.addIceCandidate(candidate);\n }\n else {\n this.remoteIceCandidateBuffer.push(candidate);\n }\n break;\n case SignalMessageAction.END_SESSION:\n const reason = signalMessage.payload;\n this.publicEventEmitter.emit(AnamEvent.CONNECTION_CLOSED, ConnectionClosedCode.SERVER_CLOSED_CONNECTION, reason);\n // close the peer connection\n this.shutdown();\n break;\n case SignalMessageAction.WARNING:\n const message = signalMessage.payload;\n console.warn('Warning received from server: ' + message);\n this.publicEventEmitter.emit(AnamEvent.SERVER_WARNING, message);\n break;\n case SignalMessageAction.TALK_STREAM_INTERRUPTED:\n const chatMessage = signalMessage.payload;\n this.publicEventEmitter.emit(AnamEvent.TALK_STREAM_INTERRUPTED, chatMessage.correlationId);\n break;\n case SignalMessageAction.SESSION_READY:\n const sessionId = signalMessage.sessionId;\n this.publicEventEmitter.emit(AnamEvent.SESSION_READY, sessionId);\n break;\n case SignalMessageAction.HEARTBEAT:\n break;\n default:\n console.warn('StreamingClient - onSignalMessage: unknown signal message action type. Is your anam-sdk version up to date?', signalMessage);\n }\n });\n }\n onSignallingClientConnected() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection) {\n try {\n yield this.initPeerConnectionAndSendOffer();\n }\n catch (err) {\n console.error('StreamingClient - onSignallingClientConnected: Error initializing peer connection', err);\n this.handleWebrtcFailure(err);\n }\n }\n });\n }\n flushRemoteIceCandidateBuffer() {\n this.remoteIceCandidateBuffer.forEach((candidate) => {\n var _a;\n (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.addIceCandidate(candidate);\n });\n this.remoteIceCandidateBuffer = [];\n }\n /**\n * ICE Candidate Trickle\n * As each ICE candidate is gathered from the STUN server it is sent to the\n * webRTC server immediately in an effort to reduce time to connection.\n */\n onIceCandidate(event) {\n if (event.candidate) {\n this.signallingClient.sendIceCandidate(event.candidate);\n }\n }\n onIceConnectionStateChange() {\n var _a, _b;\n if (((_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.iceConnectionState) === 'connected' ||\n ((_b = this.peerConnection) === null || _b === void 0 ? void 0 : _b.iceConnectionState) === 'completed') {\n this.publicEventEmitter.emit(AnamEvent.CONNECTION_ESTABLISHED);\n // Start collecting stats every 5 seconds\n this.startStatsCollection();\n }\n }\n onConnectionStateChange() {\n var _a;\n if (((_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.connectionState) === 'closed') {\n console.error('StreamingClient - onConnectionStateChange: Connection closed');\n this.handleWebrtcFailure('The connection to our servers was lost. Please try again.');\n }\n }\n handleWebrtcFailure(err) {\n console.error({ message: 'StreamingClient - handleWebrtcFailure: ', err });\n if (err.name === 'NotAllowedError' && err.message === 'Permission denied') {\n this.publicEventEmitter.emit(AnamEvent.CONNECTION_CLOSED, ConnectionClosedCode.MICROPHONE_PERMISSION_DENIED);\n }\n else {\n this.publicEventEmitter.emit(AnamEvent.CONNECTION_CLOSED, ConnectionClosedCode.WEBRTC_FAILURE);\n }\n try {\n this.stopConnection();\n }\n catch (error) {\n console.error('StreamingClient - handleWebrtcFailure: error stopping connection', error);\n }\n }\n onTrackEventHandler(event) {\n if (event.track.kind === 'video') {\n // start polling stats to detect successful video data received\n this.startSuccessMetricPolling();\n this.videoStream = event.streams[0];\n this.publicEventEmitter.emit(AnamEvent.VIDEO_STREAM_STARTED, this.videoStream);\n if (this.videoElement) {\n this.videoElement.srcObject = this.videoStream;\n const handle = this.videoElement.requestVideoFrameCallback(() => {\n var _a;\n // unregister the callback after the first frame\n (_a = this.videoElement) === null || _a === void 0 ? void 0 : _a.cancelVideoFrameCallback(handle);\n this.publicEventEmitter.emit(AnamEvent.VIDEO_PLAY_STARTED);\n if (!this.successMetricFired) {\n this.successMetricFired = true;\n sendClientMetric(ClientMetricMeasurement.CLIENT_METRIC_MEASUREMENT_SESSION_SUCCESS, '1', { detectionMethod: 'videoElement' });\n }\n });\n }\n }\n else if (event.track.kind === 'audio') {\n this.audioStream = event.streams[0];\n this.publicEventEmitter.emit(AnamEvent.AUDIO_STREAM_STARTED, this.audioStream);\n }\n }\n /**\n * Set up the data channels for sending and receiving messages\n */\n setupDataChannels() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection) {\n console.error('StreamingClient - setupDataChannels: peer connection is not initialized');\n return;\n }\n /**\n * Audio - Validate user-provided stream only\n *\n * If the user provided an audio stream, validate it has audio tracks\n * Microphone permission request will be handled asynchronously\n */\n if (!this.disableInputAudio && this.inputAudioStream) {\n // verify the user provided stream has audio tracks\n if (!this.inputAudioStream.getAudioTracks().length) {\n throw new Error('StreamingClient - setupDataChannels: user provided stream does not have audio tracks');\n }\n }\n /**\n * Text\n *\n * Create the data channel for sending and receiving text.\n * There is no input stream for text, instead the sending of data is triggered by a UI interaction.\n */\n const dataChannel = this.peerConnection.createDataChannel('session', {\n ordered: true,\n });\n dataChannel.onopen = () => {\n this.dataChannel = dataChannel !== null && dataChannel !== void 0 ? dataChannel : null;\n };\n dataChannel.onclose = () => { };\n // pass text message to the message history client\n dataChannel.onmessage = (event) => {\n try {\n const message = JSON.parse(event.data);\n // Handle known message types\n switch (message.messageType) {\n case DataChannelMessage.SPEECH_TEXT:\n this.internalEventEmitter.emit(InternalEvent.WEBRTC_CHAT_MESSAGE_RECEIVED, message.data);\n break;\n case DataChannelMessage.CLIENT_TOOL_EVENT:\n const webRtcToolEvent = message.data;\n this.internalEventEmitter.emit(InternalEvent.WEBRTC_CLIENT_TOOL_EVENT_RECEIVED, webRtcToolEvent);\n const clientToolEvent = ToolCallManager.WebRTCClientToolEventToClientToolEvent(webRtcToolEvent);\n this.publicEventEmitter.emit(AnamEvent.CLIENT_TOOL_EVENT_RECEIVED, clientToolEvent);\n break;\n // Unknown message types are silently ignored to maintain forward compatibility\n default:\n break;\n }\n }\n catch (error) {\n console.error('Failed to parse data channel message:', error);\n }\n };\n });\n }\n /**\n * Request microphone permission asynchronously without blocking connection\n */\n requestMicrophonePermissionAsync() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.inputAudioState.permissionState === AudioPermissionState.PENDING) {\n return; // Already requesting\n }\n this.inputAudioState = Object.assign(Object.assign({}, this.inputAudioState), { permissionState: AudioPermissionState.PENDING });\n this.publicEventEmitter.emit(AnamEvent.MIC_PERMISSION_PENDING);\n try {\n const audioConstraints = {\n echoCancellation: true,\n };\n // If an audio device ID is provided in the options, use it\n if (this.audioDeviceId) {\n audioConstraints.deviceId = {\n exact: this.audioDeviceId,\n };\n }\n this.inputAudioStream = yield navigator.mediaDevices.getUserMedia({\n audio: audioConstraints,\n });\n this.inputAudioState = Object.assign(Object.assign({}, this.inputAudioState), { permissionState: AudioPermissionState.GRANTED });\n this.publicEventEmitter.emit(AnamEvent.MIC_PERMISSION_GRANTED);\n // Now add the audio track to the existing connection\n yield this.setupAudioTrack();\n }\n catch (error) {\n console.error('Failed to get microphone permission:', error);\n this.inputAudioState = Object.assign(Object.assign({}, this.inputAudioState), { permissionState: AudioPermissionState.DENIED });\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.publicEventEmitter.emit(AnamEvent.MIC_PERMISSION_DENIED, errorMessage);\n }\n });\n }\n /**\n * Set up audio track and add it to the peer connection using replaceTrack\n */\n setupAudioTrack() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection || !this.inputAudioStream) {\n return;\n }\n // verify the stream has audio tracks\n if (!this.inputAudioStream.getAudioTracks().length) {\n console.error('StreamingClient - setupAudioTrack: stream does not have audio tracks');\n return;\n }\n // mute the audio tracks if the user has muted the microphone\n if (this.inputAudioState.isMuted) {\n this.muteAllAudioTracks();\n }\n const audioTrack = this.inputAudioStream.getAudioTracks()[0];\n // Find the audio sender\n const existingSenders = this.peerConnection.getSenders();\n const audioSender = existingSenders.find((sender) => {\n var _a;\n return ((_a = sender.track) === null || _a === void 0 ? void 0 : _a.kind) === 'audio' ||\n (sender.track === null && sender.dtmf !== null);\n });\n if (audioSender) {\n // Replace existing track (or null track) with our audio track\n try {\n yield audioSender.replaceTrack(audioTrack);\n }\n catch (error) {\n console.error('Failed to replace audio track:', error);\n // Fallback: add track normally\n this.peerConnection.addTrack(audioTrack, this.inputAudioStream);\n }\n }\n else {\n // No audio sender found, add track normally\n this.peerConnection.addTrack(audioTrack, this.inputAudioStream);\n }\n // pass the stream to the callback\n this.publicEventEmitter.emit(AnamEvent.INPUT_AUDIO_STREAM_STARTED, this.inputAudioStream);\n });\n }\n initPeerConnectionAndSendOffer() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.initPeerConnection();\n if (!this.peerConnection) {\n console.error('StreamingClient - initPeerConnectionAndSendOffer: peer connection is not initialized');\n return;\n }\n // create offer and set local description\n try {\n const offer = yield this.peerConnection.createOffer();\n yield this.peerConnection.setLocalDescription(offer);\n }\n catch (error) {\n console.error('StreamingClient - initPeerConnectionAndSendOffer: error creating offer', error);\n }\n if (!this.peerConnection.localDescription) {\n throw new Error('StreamingClient - initPeerConnectionAndSendOffer: local description is null');\n }\n yield this.signallingClient.sendOffer(this.peerConnection.localDescription);\n });\n }\n shutdown() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if (this.showPeerConnectionStatsReport) {\n const stats = yield ((_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.getStats());\n if (stats) {\n const report = createRTCStatsReport(stats, this.peerConnectionStatsReportOutputFormat);\n if (report) {\n console.log(report, undefined, 2);\n }\n }\n }\n // stop stats collection\n if (this.statsCollectionInterval) {\n clearInterval(this.statsCollectionInterval);\n this.statsCollectionInterval = null;\n }\n // reset video frame polling\n if (this.successMetricPoller) {\n clearInterval(this.successMetricPoller);\n this.successMetricPoller = null;\n }\n this.successMetricFired = false;\n // stop the input audio stream\n try {\n if (this.inputAudioStream) {\n this.inputAudioStream.getTracks().forEach((track) => {\n track.stop();\n });\n }\n this.inputAudioStream = null;\n }\n catch (error) {\n console.error('StreamingClient - shutdown: error stopping input audio stream', error);\n }\n // stop the signalling client\n try {\n this.signallingClient.stop();\n }\n catch (error) {\n console.error('StreamingClient - shutdown: error stopping signallilng', error);\n }\n // close the peer connection\n try {\n if (this.peerConnection &&\n this.peerConnection.connectionState !== 'closed') {\n this.peerConnection.onconnectionstatechange = null;\n this.peerConnection.close();\n this.peerConnection = null;\n }\n }\n catch (error) {\n console.error('StreamingClient - shutdown: error closing peer connection', error);\n }\n });\n }\n}\n//# sourceMappingURL=StreamingClient.js.map","export class ToolCallManager {\n /**\n * Converts a WebRtcClientToolEvent to a ClientToolEvent\n */\n static WebRTCClientToolEventToClientToolEvent(webRtcEvent) {\n return {\n eventUid: webRtcEvent.event_uid,\n sessionId: webRtcEvent.session_id,\n eventName: webRtcEvent.event_name,\n eventData: webRtcEvent.event_data,\n timestamp: webRtcEvent.timestamp,\n timestampUserAction: webRtcEvent.timestamp_user_action,\n userActionCorrelationId: webRtcEvent.user_action_correlation_id,\n };\n }\n}\n//# sourceMappingURL=ToolCallManager.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Buffer } from 'buffer';\nimport { ClientError, ErrorCode } from './lib/ClientError';\nimport { ClientMetricMeasurement, DEFAULT_ANAM_API_VERSION, DEFAULT_ANAM_METRICS_BASE_URL, sendClientMetric, setClientMetricsApiGateway, setClientMetricsBaseUrl, setClientMetricsDisabled, setMetricsContext, } from './lib/ClientMetrics';\nimport { generateCorrelationId } from './lib/correlationId';\nimport { validateApiGatewayConfig } from './lib/validateApiGatewayConfig';\nimport { CoreApiRestClient, InternalEventEmitter, MessageHistoryClient, PublicEventEmitter, StreamingClient, } from './modules';\nimport { AnamEvent, AudioPermissionState, ConnectionClosedCode, } from './types';\nexport default class AnamClient {\n constructor(sessionToken, personaConfig, options) {\n var _a, _b, _c, _d, _e;\n this.inputAudioState = {\n isMuted: false,\n permissionState: AudioPermissionState.NOT_REQUESTED,\n };\n this.sessionId = null;\n this.organizationId = null;\n this.streamingClient = null;\n this._isStreaming = false;\n const configError = this.validateClientConfig(sessionToken, personaConfig, options);\n if (configError) {\n throw new ClientError(configError, ErrorCode.CLIENT_ERROR_CODE_CONFIGURATION_ERROR, 400);\n }\n this.personaConfig = personaConfig;\n this.clientOptions = options;\n if (((_a = options === null || options === void 0 ? void 0 : options.api) === null || _a === void 0 ? void 0 : _a.baseUrl) || ((_b = options === null || options === void 0 ? void 0 : options.api) === null || _b === void 0 ? void 0 : _b.apiVersion)) {\n setClientMetricsBaseUrl(options.api.baseUrl || DEFAULT_ANAM_METRICS_BASE_URL, options.api.apiVersion || DEFAULT_ANAM_API_VERSION);\n }\n // Pass API Gateway config to metrics module so metrics are routed through the gateway\n if ((_d = (_c = options === null || options === void 0 ? void 0 : options.api) === null || _c === void 0 ? void 0 : _c.apiGateway) === null || _d === void 0 ? void 0 : _d.enabled) {\n setClientMetricsApiGateway(options.api.apiGateway);\n }\n // Allow disabling client metrics telemetry\n if ((_e = options === null || options === void 0 ? void 0 : options.metrics) === null || _e === void 0 ? void 0 : _e.disableClientMetrics) {\n setClientMetricsDisabled(true);\n }\n this.publicEventEmitter = new PublicEventEmitter();\n this.internalEventEmitter = new InternalEventEmitter();\n this.apiClient = new CoreApiRestClient(sessionToken, options === null || options === void 0 ? void 0 : options.apiKey, options === null || options === void 0 ? void 0 : options.api);\n this.messageHistoryClient = new MessageHistoryClient(this.publicEventEmitter, this.internalEventEmitter);\n }\n decodeJwt(token) {\n try {\n const base64Payload = token.split('.')[1];\n const payloadString = Buffer.from(base64Payload, 'base64').toString('utf8');\n const payload = JSON.parse(payloadString);\n return payload;\n }\n catch (error) {\n throw new Error('Invalid session token format');\n }\n }\n validateClientConfig(sessionToken, personaConfig, options) {\n var _a, _b;\n // Validate authentication configuration\n if (!sessionToken && !(options === null || options === void 0 ? void 0 : options.apiKey)) {\n return 'Either sessionToken or apiKey must be provided';\n }\n if ((options === null || options === void 0 ? void 0 : options.apiKey) && sessionToken) {\n return 'Only one of sessionToken or apiKey should be used';\n }\n // Validate gateway configuration\n const apiGatewayError = validateApiGatewayConfig((_a = options === null || options === void 0 ? void 0 : options.api) === null || _a === void 0 ? void 0 : _a.apiGateway);\n if (apiGatewayError) {\n return apiGatewayError;\n }\n // Validate persona configuration based on session token\n if (sessionToken) {\n const decodedToken = this.decodeJwt(sessionToken);\n this.organizationId = decodedToken.accountId;\n setMetricsContext({\n organizationId: this.organizationId,\n });\n const tokenType = (_b = decodedToken.type) === null || _b === void 0 ? void 0 : _b.toLowerCase();\n if (tokenType === 'legacy') {\n return 'Legacy session tokens are no longer supported. Please define your persona when creating your session token. See https://docs.anam.ai/resources/migrating-legacy for more information.';\n }\n else if (tokenType === 'ephemeral' || tokenType === 'stateful') {\n if (personaConfig) {\n return 'This session token already contains a persona configuration. Please remove the personaConfig parameter.';\n }\n }\n }\n else {\n // No session token (using apiKey)\n if (!personaConfig) {\n return 'Missing persona config. Persona configuration must be provided when using apiKey';\n }\n }\n // Validate voice detection configuration\n if (options === null || options === void 0 ? void 0 : options.voiceDetection) {\n if (options.disableInputAudio) {\n return 'Voice detection is disabled because input audio is disabled. Please set disableInputAudio to false to enable voice detection.';\n }\n // End of speech sensitivity must be a number between 0 and 1\n if (options.voiceDetection.endOfSpeechSensitivity !== undefined) {\n if (typeof options.voiceDetection.endOfSpeechSensitivity !== 'number') {\n return 'End of speech sensitivity must be a number';\n }\n if (options.voiceDetection.endOfSpeechSensitivity < 0 ||\n options.voiceDetection.endOfSpeechSensitivity > 1) {\n return 'End of speech sensitivity must be between 0 and 1';\n }\n }\n }\n return undefined;\n }\n buildStartSessionOptionsForClient() {\n var _a;\n const sessionOptions = {};\n if ((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.voiceDetection) {\n sessionOptions.voiceDetection = this.clientOptions.voiceDetection;\n }\n // return undefined if no options are set\n if (Object.keys(sessionOptions).length === 0) {\n return undefined;\n }\n return sessionOptions;\n }\n startSession(userProvidedAudioStream) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n const config = this.personaConfig;\n // build session options from client options\n const sessionOptions = this.buildStartSessionOptionsForClient();\n // start a new session\n const response = yield this.apiClient.startSession(config, sessionOptions);\n const { sessionId, clientConfig, engineHost, engineProtocol, signallingEndpoint, } = response;\n const { heartbeatIntervalSeconds, maxWsReconnectionAttempts, iceServers: defaultIceServers, } = clientConfig;\n this.sessionId = sessionId;\n setMetricsContext({\n sessionId: this.sessionId,\n });\n // Use custom ICE servers if provided, otherwise use server-provided ICE servers\n const iceServers = ((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.iceServers)\n ? this.clientOptions.iceServers\n : defaultIceServers;\n try {\n this.streamingClient = new StreamingClient(sessionId, {\n engine: {\n baseUrl: `${engineProtocol}://${engineHost}`,\n },\n signalling: {\n heartbeatIntervalSeconds,\n maxWsReconnectionAttempts,\n url: {\n baseUrl: engineHost,\n protocol: engineProtocol,\n signallingPath: signallingEndpoint,\n },\n },\n iceServers,\n inputAudio: {\n inputAudioState: this.inputAudioState,\n userProvidedMediaStream: ((_b = this.clientOptions) === null || _b === void 0 ? void 0 : _b.disableInputAudio)\n ? undefined\n : userProvidedAudioStream,\n audioDeviceId: (_c = this.clientOptions) === null || _c === void 0 ? void 0 : _c.audioDeviceId,\n disableInputAudio: (_d = this.clientOptions) === null || _d === void 0 ? void 0 : _d.disableInputAudio,\n },\n apiGateway: (_f = (_e = this.clientOptions) === null || _e === void 0 ? void 0 : _e.api) === null || _f === void 0 ? void 0 : _f.apiGateway,\n metrics: {\n showPeerConnectionStatsReport: (_j = (_h = (_g = this.clientOptions) === null || _g === void 0 ? void 0 : _g.metrics) === null || _h === void 0 ? void 0 : _h.showPeerConnectionStatsReport) !== null && _j !== void 0 ? _j : false,\n peerConnectionStatsReportOutputFormat: (_m = (_l = (_k = this.clientOptions) === null || _k === void 0 ? void 0 : _k.metrics) === null || _l === void 0 ? void 0 : _l.peerConnectionStatsReportOutputFormat) !== null && _m !== void 0 ? _m : 'console',\n },\n }, this.publicEventEmitter, this.internalEventEmitter);\n }\n catch (error) {\n setMetricsContext({\n sessionId: null,\n });\n throw new ClientError('Failed to initialize streaming client', ErrorCode.CLIENT_ERROR_CODE_SERVER_ERROR, 500, {\n cause: error instanceof Error ? error.message : String(error),\n sessionId,\n });\n }\n return sessionId;\n });\n }\n startSessionIfNeeded(userProvidedAudioStream) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.sessionId || !this.streamingClient) {\n yield this.startSession(userProvidedAudioStream);\n if (!this.sessionId || !this.streamingClient) {\n throw new ClientError('Session ID or streaming client is not available after starting session', ErrorCode.CLIENT_ERROR_CODE_SERVER_ERROR, 500, {\n cause: 'Failed to initialize session properly',\n });\n }\n }\n });\n }\n stream(userProvidedAudioStream) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if (this._isStreaming) {\n throw new Error('Already streaming');\n }\n // generate a new ID here to track the attempt\n const attemptCorrelationId = generateCorrelationId();\n setMetricsContext({\n attemptCorrelationId,\n sessionId: null, // reset sessionId\n });\n sendClientMetric(ClientMetricMeasurement.CLIENT_METRIC_MEASUREMENT_SESSION_ATTEMPT, '1');\n if (((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.disableInputAudio) && userProvidedAudioStream) {\n console.warn('AnamClient:Input audio is disabled. User provided audio stream will be ignored.');\n }\n yield this.startSessionIfNeeded(userProvidedAudioStream);\n this._isStreaming = true;\n return new Promise((resolve) => {\n var _a;\n // set stream callbacks to capture the stream\n const streams = [];\n let videoReceived = false;\n let audioReceived = false;\n this.publicEventEmitter.addListener(AnamEvent.VIDEO_STREAM_STARTED, (videoStream) => {\n streams.push(videoStream);\n videoReceived = true;\n if (audioReceived) {\n resolve(streams);\n }\n });\n this.publicEventEmitter.addListener(AnamEvent.AUDIO_STREAM_STARTED, (audioStream) => {\n streams.push(audioStream);\n audioReceived = true;\n if (videoReceived) {\n resolve(streams);\n }\n });\n // start streaming\n (_a = this.streamingClient) === null || _a === void 0 ? void 0 : _a.startConnection();\n });\n });\n }\n /**\n * @deprecated This method is deprecated. Please use streamToVideoElement instead.\n */\n streamToVideoAndAudioElements(videoElementId, audioElementId, userProvidedAudioStream) {\n return __awaiter(this, void 0, void 0, function* () {\n console.warn('AnamClient: streamToVideoAndAudioElements is deprecated. To avoid possible audio issues, please use streamToVideoElement instead.');\n yield this.streamToVideoElement(videoElementId, userProvidedAudioStream);\n });\n }\n streamToVideoElement(videoElementId, userProvidedAudioStream) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n // generate a new ID here to track the attempt\n const attemptCorrelationId = generateCorrelationId();\n setMetricsContext({\n attemptCorrelationId,\n sessionId: null, // reset sessionId\n });\n sendClientMetric(ClientMetricMeasurement.CLIENT_METRIC_MEASUREMENT_SESSION_ATTEMPT, '1');\n if (((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.disableInputAudio) && userProvidedAudioStream) {\n console.warn('AnamClient:Input audio is disabled. User provided audio stream will be ignored.');\n }\n try {\n yield this.startSessionIfNeeded(userProvidedAudioStream);\n }\n catch (error) {\n if (error instanceof ClientError) {\n throw error;\n }\n throw new ClientError('Failed to start session', ErrorCode.CLIENT_ERROR_CODE_SERVER_ERROR, 500, {\n cause: error instanceof Error ? error.message : String(error),\n sessionId: this.sessionId,\n });\n }\n if (this._isStreaming) {\n throw new Error('Already streaming');\n }\n this._isStreaming = true;\n if (!this.streamingClient) {\n throw new Error('Failed to stream: streaming client is not available');\n }\n this.streamingClient.setMediaStreamTargetById(videoElementId);\n this.streamingClient.startConnection();\n });\n }\n /**\n * Send a talk command to make the persona speak the provided content.\n * @param content - The text content for the persona to speak\n * @throws Error if session is not started or not currently streaming\n */\n talk(content) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.streamingClient) {\n throw new Error('Failed to send talk command: session is not started. Have you called startSession?');\n }\n if (!this._isStreaming) {\n throw new Error('Failed to send talk command: not currently streaming. Have you called stream?');\n }\n yield this.streamingClient.sendTalkCommand(content);\n return;\n });\n }\n /**\n * Send a raw data message through the WebRTC data channel.\n * @param message - The message string to send through the data channel\n * @throws Error if session is not started\n */\n sendDataMessage(message) {\n if (this.streamingClient) {\n this.streamingClient.sendDataMessage(message);\n }\n else {\n throw new Error('Failed to send message: session is not started.');\n }\n }\n /**\n * Send a user text message in the active streaming session.\n * @param content - The text message content to send\n * @throws Error if not currently streaming or session is not started\n */\n sendUserMessage(content) {\n if (!this._isStreaming) {\n console.warn('AnamClient: Not currently streaming. User message will not be sent.');\n throw new Error('Failed to send user message: not currently streaming');\n }\n const sessionId = this.getActiveSessionId();\n if (!sessionId) {\n throw new Error('Failed to send user message: no active session');\n }\n const currentTimestamp = new Date().toISOString().replace('Z', '');\n const body = JSON.stringify({\n content,\n timestamp: currentTimestamp,\n session_id: sessionId,\n message_type: 'speech',\n });\n this.sendDataMessage(body);\n }\n interruptPersona() {\n if (!this._isStreaming) {\n throw new Error('Failed to send interrupt command: not currently streaming');\n }\n const sessionId = this.getActiveSessionId();\n if (!sessionId) {\n throw new Error('Failed to send interrupt command: no active session');\n }\n const body = JSON.stringify({\n message_type: 'interrupt',\n session_id: sessionId,\n timestamp: new Date().toISOString(), // removing Z not needed\n });\n this.sendDataMessage(body);\n }\n stopStreaming() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.streamingClient) {\n this.publicEventEmitter.emit(AnamEvent.CONNECTION_CLOSED, ConnectionClosedCode.NORMAL);\n yield this.streamingClient.stopConnection();\n this.streamingClient = null;\n this.sessionId = null;\n setMetricsContext({\n attemptCorrelationId: null,\n sessionId: null,\n organizationId: this.organizationId,\n });\n this._isStreaming = false;\n }\n });\n }\n isStreaming() {\n return this._isStreaming;\n }\n setPersonaConfig(personaConfig) {\n this.personaConfig = personaConfig;\n }\n getPersonaConfig() {\n return this.personaConfig;\n }\n getInputAudioState() {\n var _a;\n if ((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.disableInputAudio) {\n console.warn('AnamClient: Audio state will not be used because input audio is disabled.');\n }\n // if streaming client is available, make sure our state is up to date\n if (this.streamingClient) {\n this.inputAudioState = this.streamingClient.getInputAudioState();\n }\n return this.inputAudioState;\n }\n muteInputAudio() {\n var _a, _b;\n if ((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.disableInputAudio) {\n console.warn('AnamClient: Input audio is disabled. Muting input audio will have no effect.');\n }\n if (this.streamingClient && !((_b = this.clientOptions) === null || _b === void 0 ? void 0 : _b.disableInputAudio)) {\n this.inputAudioState = this.streamingClient.muteInputAudio();\n }\n else {\n this.inputAudioState = Object.assign(Object.assign({}, this.inputAudioState), { isMuted: true });\n }\n return this.inputAudioState;\n }\n unmuteInputAudio() {\n var _a, _b;\n if ((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.disableInputAudio) {\n console.warn('AnamClient: Input audio is disabled. Unmuting input audio will have no effect.');\n }\n if (this.streamingClient && !((_b = this.clientOptions) === null || _b === void 0 ? void 0 : _b.disableInputAudio)) {\n this.inputAudioState = this.streamingClient.unmuteInputAudio();\n }\n else {\n this.inputAudioState = Object.assign(Object.assign({}, this.inputAudioState), { isMuted: false });\n }\n return this.inputAudioState;\n }\n changeAudioInputDevice(deviceId) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if ((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.disableInputAudio) {\n throw new Error('AnamClient: Cannot change audio input device because input audio is disabled.');\n }\n if (!this._isStreaming) {\n throw new Error('AnamClient: Cannot change audio input device while not streaming. Start streaming first.');\n }\n if (!this.streamingClient) {\n throw new Error('AnamClient: Cannot change audio input device because streaming client is not available. Start streaming first.');\n }\n yield this.streamingClient.changeAudioInputDevice(deviceId);\n });\n }\n createTalkMessageStream(correlationId) {\n if (!this.streamingClient) {\n throw new Error('Failed to start talk message stream: session is not started.');\n }\n if (correlationId && correlationId.trim() === '') {\n throw new Error('Failed to start talk message stream: correlationId is empty');\n }\n return this.streamingClient.startTalkMessageStream(correlationId);\n }\n createAgentAudioInputStream(config) {\n if (!this.streamingClient) {\n throw new Error('Failed to create agent audio input stream: session is not started.');\n }\n return this.streamingClient.createAgentAudioInputStream(config);\n }\n /**\n * Event handling\n */\n addListener(event, callback) {\n this.publicEventEmitter.addListener(event, callback);\n }\n removeListener(event, callback) {\n this.publicEventEmitter.removeListener(event, callback);\n }\n getActiveSessionId() {\n return this.sessionId;\n }\n}\n//# sourceMappingURL=AnamClient.js.map","import { createContext } from 'react';\nimport type { ChatMessage, AriaSDKConfig, DisplayMode, TriggerMode, Theme, SessionState } from '@/types';\n\nexport interface AriaContextType {\n isOpen: boolean;\n isConnected: boolean;\n isLoading: boolean;\n chatMessages: ChatMessage[];\n liveTranscript: string;\n isChatVisible: boolean;\n isMuted: boolean;\n error: string | null;\n sessionState: SessionState;\n openAssistant: (mode: TriggerMode) => void;\n closeAssistant: () => void;\n toggleChat: () => void;\n sendMessage: (message: string) => Promise<void>;\n toggleMute: () => void;\n startSession: () => Promise<void>;\n stopSession: () => Promise<void>;\n triggerSession: () => void;\n displayMode: DisplayMode;\n triggerMode: TriggerMode;\n theme: Theme;\n config: AriaSDKConfig;\n}\n\nexport const AriaContext = createContext<AriaContextType | null>(null);\n","import React, { useState, useCallback, useRef, useEffect } from 'react';\nimport type { ChatMessage, AnamMessageStreamEvent, TriggerMode, SessionResponse, SessionState, MessageHistoryEvent, MessageStreamEvent, SessionEndEvent, AnamMessage } from '@/types';\nimport type { AriaSDKConfig } from '@/types';\nimport type { AnamClient } from '@anam-ai/js-sdk';\nimport { AnamEvent } from '@anam-ai/js-sdk';\nimport { AriaContext, type AriaContextType } from './AriaContext';\n\ninterface AriaProviderProps {\n config: AriaSDKConfig;\n children: React.ReactNode;\n}\n\nexport const AriaProvider: React.FC<AriaProviderProps> = ({ config, children }) => {\n const [isOpen, setIsOpen] = useState(false);\n const [isConnected, setIsConnected] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [chatMessages, setChatMessages] = useState<ChatMessage[]>([]);\n const [liveTranscript, setLiveTranscript] = useState('');\n const [isChatVisible, setIsChatVisible] = useState(false);\n const [isMuted, setIsMuted] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [triggerMode, setTriggerMode] = useState<TriggerMode>('user');\n const [displayMode, setDisplayMode] = useState<'center' | 'bottom-right'>('bottom-right');\n const [sessionState, setSessionState] = useState<SessionState>({\n session_id: null,\n token: null,\n expires_at: null,\n isSessionReady: false,\n lastError: null,\n });\n const theme = config.theme || 'light'; // Theme is set on initialization, not changeable\n\n const clientRef = useRef<AnamClient | null>(null);\n const wsRef = useRef<WebSocket | null>(null);\n const videoElementIdRef = useRef<string>('aria-video-element');\n const openAssistantRef = useRef<((mode?: TriggerMode) => void) | null>(null);\n const lastMessageHistoryRef = useRef<AnamMessage[]>([]);\n\n const handleSessionResponse = useCallback((response: SessionResponse) => {\n if (response.status === 'success') {\n console.log('Session response:', response.message);\n \n if (response.session_data) {\n // Session was created\n setSessionState({\n session_id: response.session_data.session_id,\n token: response.session_data.token,\n expires_at: response.session_data.expires_at,\n isSessionReady: true,\n lastError: null,\n });\n \n // Initialize Anam client with the token\n initializeAnamClient(response.session_data.token);\n } else {\n // Session not triggered (invoke=false and user_trigger=false)\n console.log('Session not triggered:', response.message);\n setSessionState(prev => ({\n ...prev,\n isSessionReady: false,\n lastError: null,\n }));\n }\n } else {\n // Error response\n console.error('Session error:', response.message, response.error);\n const errorMsg = `${response.error}: ${response.message}`;\n setSessionState(prev => ({\n ...prev,\n isSessionReady: false,\n lastError: errorMsg,\n }));\n setError(errorMsg);\n config.onError?.(new Error(errorMsg));\n }\n }, [config]);\n\n // Send message history to WebSocket\n const sendMessageHistory = useCallback((messages: AnamMessage[]) => {\n if (!wsRef.current || wsRef.current.readyState !== WebSocket.OPEN) {\n console.warn('WebSocket not connected, cannot send message history');\n return;\n }\n\n if (!sessionState.session_id || !config.userId) {\n console.warn('Missing session_id or user_id, cannot send message history');\n return;\n }\n\n // Only send if messages have changed\n if (JSON.stringify(messages) === JSON.stringify(lastMessageHistoryRef.current)) {\n return;\n }\n\n lastMessageHistoryRef.current = messages;\n\n const payload: MessageHistoryEvent = {\n type: 'message_history',\n session_id: sessionState.session_id,\n user_id: config.userId,\n messages,\n };\n\n try {\n wsRef.current.send(JSON.stringify(payload));\n console.log('Sent message history:', messages.length, 'messages');\n } catch (err) {\n console.error('Failed to send message history:', err);\n }\n }, [sessionState.session_id, config.userId]);\n\n // Send message stream to WebSocket\n const sendMessageStream = useCallback((message: AnamMessage, is_final: boolean) => {\n if (!wsRef.current || wsRef.current.readyState !== WebSocket.OPEN) {\n console.warn('WebSocket not connected, cannot send message stream');\n return;\n }\n\n if (!sessionState.session_id || !config.userId) {\n console.warn('Missing session_id or user_id, cannot send message stream');\n return;\n }\n\n const payload: MessageStreamEvent = {\n type: 'message_stream',\n session_id: sessionState.session_id,\n user_id: config.userId,\n message: {\n ...message,\n is_final,\n },\n };\n\n try {\n wsRef.current.send(JSON.stringify(payload));\n if (is_final) {\n console.log('Sent final message stream:', message.role);\n }\n } catch (err) {\n console.error('Failed to send message stream:', err);\n }\n }, [sessionState.session_id, config.userId]);\n\n // Send session end to WebSocket\n const sendSessionEnd = useCallback(() => {\n if (!wsRef.current || wsRef.current.readyState !== WebSocket.OPEN) {\n console.warn('WebSocket not connected, cannot send session end');\n return;\n }\n\n if (!sessionState.session_id || !config.userId) {\n console.warn('Missing session_id or user_id, cannot send session end');\n return;\n }\n\n const payload: SessionEndEvent = {\n type: 'session_end',\n session_id: sessionState.session_id,\n user_id: config.userId,\n };\n\n try {\n wsRef.current.send(JSON.stringify(payload));\n console.log('Sent session end event');\n } catch (err) {\n console.error('Failed to send session end:', err);\n }\n }, [sessionState.session_id, config.userId]);\n\n const initializeAnamClient = useCallback(async (sessionToken: string) => {\n if (clientRef.current || isLoading) return;\n\n setIsLoading(true);\n\n try {\n // Dynamically import the Anam SDK\n const { createClient } = await import('@anam-ai/js-sdk');\n const client = createClient(sessionToken);\n\n // Set up event listeners\n client.addListener(AnamEvent.SESSION_READY, () => {\n setIsConnected(true);\n setIsLoading(false);\n config.onSessionReady?.();\n config.onConnectionStateChange?.(true);\n });\n\n client.addListener(AnamEvent.CONNECTION_CLOSED, () => {\n setIsConnected(false);\n config.onConnectionStateChange?.(false);\n });\n\n client.addListener(AnamEvent.MESSAGE_HISTORY_UPDATED, (messages) => {\n const chatMessages: ChatMessage[] = messages.map(msg => ({\n role: msg.role as 'user' | 'persona',\n content: msg.content,\n timestamp: Date.now(),\n }));\n setChatMessages(chatMessages);\n \n // Convert to AnamMessage format and send to WebSocket\n const anamMessages: AnamMessage[] = messages.map(msg => ({\n role: msg.role as 'user' | 'persona',\n content: msg.content,\n timestamp: new Date().toISOString(),\n }));\n sendMessageHistory(anamMessages);\n });\n\n client.addListener(AnamEvent.MESSAGE_STREAM_EVENT_RECEIVED, (event: AnamMessageStreamEvent) => {\n if (event.role === 'persona') {\n setLiveTranscript(prev => prev + event.content);\n } else if (event.role === 'user') {\n setLiveTranscript('');\n }\n \n // Send stream event to WebSocket\n const anamMessage: AnamMessage = {\n role: event.role,\n content: event.content,\n timestamp: new Date().toISOString(),\n };\n const isFinal = event.is_final ?? false;\n sendMessageStream(anamMessage, isFinal);\n });\n\n clientRef.current = client;\n\n // Start streaming\n await client.streamToVideoElement(videoElementIdRef.current);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to initialize Anam client';\n setError(errorMessage);\n setIsLoading(false);\n config.onError?.(err instanceof Error ? err : new Error(errorMessage));\n }\n }, [config, isLoading, sendMessageHistory, sendMessageStream]);\n\n const connectWebSocket = useCallback(() => {\n if (wsRef.current?.readyState === WebSocket.OPEN) {\n console.log('WebSocket already connected');\n return;\n }\n\n try {\n const ws = new WebSocket(config.websocketUrl);\n wsRef.current = ws;\n\n ws.onopen = () => {\n console.log('WebSocket connected');\n config.onConnectionStateChange?.(true);\n };\n\n ws.onmessage = (event) => {\n try {\n const data = event.data;\n \n // Try to parse as JSON\n let parsedData: any;\n try {\n parsedData = JSON.parse(data);\n } catch (parseError) {\n console.error('Failed to parse WebSocket message:', data);\n return;\n }\n\n // Handle session response (automatic on connection or manual trigger)\n if (parsedData.status === 'success' || parsedData.status === 'error') {\n handleSessionResponse(parsedData as SessionResponse);\n }\n // Handle message accumulation acknowledgments\n else if (parsedData.type === 'message_history_ack') {\n console.log('Message history acknowledged:', parsedData.message_count, 'messages');\n }\n else if (parsedData.type === 'message_stream_ack') {\n console.log('Message stream acknowledged');\n }\n else if (parsedData.type === 'session_end_ack') {\n console.log('Session end acknowledged:', parsedData.message, 'Saved:', parsedData.saved_count);\n }\n else if (parsedData.type === 'session_end_error') {\n console.error('Session end error:', parsedData.message);\n setError(parsedData.message);\n }\n // Handle other message types\n else if (parsedData.status === 'ok') {\n console.log('Message acknowledged:', parsedData.message);\n }\n // Legacy support for old message types\n else if (parsedData.type === 'session_token') {\n // Legacy format - convert to new format\n handleSessionResponse({\n status: 'success',\n message: 'Session created successfully',\n session_data: {\n session_id: 'legacy',\n token: parsedData.sessionToken,\n expires_at: new Date(Date.now() + 3600000).toISOString(),\n },\n time_taken: 0,\n });\n } else if (parsedData.type === 'trigger_event') {\n // Handle WebSocket-triggered events - open in center mode\n config.onWebSocketEvent?.(parsedData);\n openAssistantRef.current?.('websocket');\n }\n } catch (err) {\n console.error('Error handling WebSocket message:', err);\n }\n };\n\n ws.onerror = (error) => {\n console.error('WebSocket error:', error);\n setError('WebSocket connection error');\n config.onError?.(new Error('WebSocket connection failed'));\n };\n\n ws.onclose = () => {\n console.log('WebSocket disconnected');\n config.onConnectionStateChange?.(false);\n \n // Reset session state\n setSessionState({\n session_id: null,\n token: null,\n expires_at: null,\n isSessionReady: false,\n lastError: null,\n });\n };\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to connect WebSocket';\n setError(errorMessage);\n config.onError?.(err instanceof Error ? err : new Error(errorMessage));\n }\n }, [config, handleSessionResponse]);\n\n const triggerSession = useCallback(() => {\n if (!wsRef.current || wsRef.current.readyState !== WebSocket.OPEN) {\n console.error('WebSocket not connected');\n setError('WebSocket not connected. Please connect first.');\n return;\n }\n\n try {\n // Send user_trigger message to backend\n const message = JSON.stringify({ user_trigger: true });\n wsRef.current.send(message);\n console.log('Sent user_trigger message');\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to trigger session';\n setError(errorMessage);\n config.onError?.(err instanceof Error ? err : new Error(errorMessage));\n }\n }, [config]);\n\n const startSession = useCallback(async () => {\n // Connect WebSocket if not already connected\n if (!wsRef.current || wsRef.current.readyState !== WebSocket.OPEN) {\n connectWebSocket();\n }\n\n // If session is already ready, initialize Anam client\n if (sessionState.isSessionReady && sessionState.token && !clientRef.current) {\n await initializeAnamClient(sessionState.token);\n }\n }, [connectWebSocket, initializeAnamClient, sessionState]);\n\n const stopSession = useCallback(async () => {\n if (!clientRef.current) return;\n\n try {\n // Send session end event before stopping\n sendSessionEnd();\n \n await clientRef.current.stopStreaming();\n clientRef.current = null;\n \n setIsConnected(false);\n setChatMessages([]);\n setLiveTranscript('');\n lastMessageHistoryRef.current = [];\n config.onConnectionStateChange?.(false);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to stop session';\n setError(errorMessage);\n config.onError?.(err instanceof Error ? err : new Error(errorMessage));\n }\n }, [config, sendSessionEnd]);\n\n const openAssistant = useCallback((mode: TriggerMode = 'user') => {\n setTriggerMode(mode);\n // User-triggered: bottom-right (floating), WebSocket-triggered: center\n setDisplayMode(mode === 'websocket' ? 'center' : 'bottom-right');\n setIsOpen(true);\n if (!clientRef.current && !isLoading) {\n startSession();\n }\n }, [startSession, isLoading]);\n\n // Keep the ref updated with the latest openAssistant function\n useEffect(() => {\n openAssistantRef.current = openAssistant;\n }, [openAssistant]);\n\n const closeAssistant = useCallback(() => {\n setIsOpen(false);\n stopSession();\n }, [stopSession]);\n\n const toggleChat = useCallback(() => {\n setIsChatVisible(prev => !prev);\n }, []);\n\n const sendMessage = useCallback(async (message: string) => {\n if (!clientRef.current || !isConnected) {\n throw new Error('Not connected to Aria');\n }\n\n try {\n await clientRef.current.talk(message);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Failed to send message';\n setError(errorMessage);\n config.onError?.(err instanceof Error ? err : new Error(errorMessage));\n throw err;\n }\n }, [isConnected, config]);\n\n const toggleMute = useCallback(() => {\n if (!clientRef.current) return;\n\n const currentMuteState = clientRef.current.getInputAudioState();\n if (currentMuteState.isMuted) {\n clientRef.current.unmuteInputAudio();\n setIsMuted(false);\n } else {\n clientRef.current.muteInputAudio();\n setIsMuted(true);\n }\n }, []);\n\n // Initialize WebSocket connection on mount\n useEffect(() => {\n connectWebSocket();\n\n // Cleanup on unmount\n return () => {\n // Send session end if there's an active session\n if (sessionState.session_id && config.userId) {\n sendSessionEnd();\n }\n \n if (clientRef.current) {\n clientRef.current.stopStreaming();\n }\n if (wsRef.current) {\n wsRef.current.close();\n }\n };\n }, [connectWebSocket, sessionState.session_id, config.userId, sendSessionEnd]);\n\n const value: AriaContextType = {\n isOpen,\n isConnected,\n isLoading,\n chatMessages,\n liveTranscript,\n isChatVisible,\n isMuted,\n error,\n sessionState,\n openAssistant,\n closeAssistant,\n toggleChat,\n sendMessage,\n toggleMute,\n startSession,\n stopSession,\n triggerSession,\n displayMode,\n triggerMode,\n theme,\n config,\n };\n\n return <AriaContext.Provider value={value}>{children}</AriaContext.Provider>;\n};\n\n","import { useContext } from 'react';\nimport { AriaContext } from '@/context/AriaContext';\nimport type { AriaContextType } from '@/context/AriaContext';\n\nexport const useAria = (): AriaContextType => {\n const context = useContext(AriaContext);\n if (!context) {\n throw new Error('useAria must be used within an AriaProvider');\n }\n return context;\n};\n\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Concatenates two arrays faster than the array spread operator.\n */\nconst concatArrays = (array1, array2) => {\n // Pre-allocate for better V8 optimization\n const combinedArray = new Array(array1.length + array2.length);\n for (let i = 0; i < array1.length; i++) {\n combinedArray[i] = array1[i];\n }\n for (let i = 0; i < array2.length; i++) {\n combinedArray[array1.length + i] = array2[i];\n }\n return combinedArray;\n};\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (classGroupId, validator) => ({\n classGroupId,\n validator\n});\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (nextPart = new Map(), validators = null, classGroupId) => ({\n nextPart,\n validators,\n classGroupId\n});\nconst CLASS_PART_SEPARATOR = '-';\nconst EMPTY_CONFLICTS = [];\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n if (className.startsWith('[') && className.endsWith(']')) {\n return getGroupIdForArbitraryProperty(className);\n }\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0;\n return getGroupRecursive(classParts, startIndex, classMap);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n if (hasPostfixModifier) {\n const modifierConflicts = conflictingClassGroupModifiers[classGroupId];\n const baseConflicts = conflictingClassGroups[classGroupId];\n if (modifierConflicts) {\n if (baseConflicts) {\n // Merge base conflicts with modifier conflicts\n return concatArrays(baseConflicts, modifierConflicts);\n }\n // Only modifier conflicts\n return modifierConflicts;\n }\n // Fall back to without postfix if no modifier conflicts\n return baseConflicts || EMPTY_CONFLICTS;\n }\n return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, startIndex, classPartObject) => {\n const classPathsLength = classParts.length - startIndex;\n if (classPathsLength === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[startIndex];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n if (nextClassPartObject) {\n const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);\n if (result) return result;\n }\n const validators = classPartObject.validators;\n if (validators === null) {\n return undefined;\n }\n // Build classRest string efficiently by joining from startIndex onwards\n const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);\n const validatorsLength = validators.length;\n for (let i = 0; i < validatorsLength; i++) {\n const validatorObj = validators[i];\n if (validatorObj.validator(classRest)) {\n return validatorObj.classGroupId;\n }\n }\n return undefined;\n};\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = className => className.slice(1, -1).indexOf(':') === -1 ? undefined : (() => {\n const content = className.slice(1, -1);\n const colonIndex = content.indexOf(':');\n const property = content.slice(0, colonIndex);\n return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined;\n})();\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n classGroups\n } = config;\n return processClassGroups(classGroups, theme);\n};\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (classGroups, theme) => {\n const classMap = createClassPartObject();\n for (const classGroupId in classGroups) {\n const group = classGroups[classGroupId];\n processClassesRecursively(group, classMap, classGroupId, theme);\n }\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n const len = classGroup.length;\n for (let i = 0; i < len; i++) {\n const classDefinition = classGroup[i];\n processClassDefinition(classDefinition, classPartObject, classGroupId, theme);\n }\n};\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (typeof classDefinition === 'string') {\n processStringDefinition(classDefinition, classPartObject, classGroupId);\n return;\n }\n if (typeof classDefinition === 'function') {\n processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);\n return;\n }\n processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);\n};\nconst processStringDefinition = (classDefinition, classPartObject, classGroupId) => {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n};\nconst processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n if (classPartObject.validators === null) {\n classPartObject.validators = [];\n }\n classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));\n};\nconst processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n const entries = Object.entries(classDefinition);\n const len = entries.length;\n for (let i = 0; i < len; i++) {\n const [key, value] = entries[i];\n processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);\n }\n};\nconst getPart = (classPartObject, path) => {\n let current = classPartObject;\n const parts = path.split(CLASS_PART_SEPARATOR);\n const len = parts.length;\n for (let i = 0; i < len; i++) {\n const part = parts[i];\n let next = current.nextPart.get(part);\n if (!next) {\n next = createClassPartObject();\n current.nextPart.set(part, next);\n }\n current = next;\n }\n return current;\n};\n// Type guard maintains monomorphic check\nconst isThemeGetter = func => 'isThemeGetter' in func && func.isThemeGetter === true;\n\n// LRU cache implementation using plain objects for simplicity\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = Object.create(null);\n let previousCache = Object.create(null);\n const update = (key, value) => {\n cache[key] = value;\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = Object.create(null);\n }\n };\n return {\n get(key) {\n let value = cache[key];\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache[key]) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (key in cache) {\n cache[key] = value;\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst MODIFIER_SEPARATOR = ':';\nconst EMPTY_MODIFIERS = [];\n// Pre-allocated result object shape for consistency\nconst createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n isExternal\n});\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = className => {\n // Use simple array with push for better performance\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n const len = className.length;\n for (let index = 0; index < len; index++) {\n const currentCharacter = className[index];\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + 1;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') bracketDepth++;else if (currentCharacter === ']') bracketDepth--;else if (currentCharacter === '(') parenDepth++;else if (currentCharacter === ')') parenDepth--;\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);\n // Inline important modifier check\n let baseClassName = baseClassNameWithImportantModifier;\n let hasImportantModifier = false;\n if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(0, -1);\n hasImportantModifier = true;\n } else if (\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(1);\n hasImportantModifier = true;\n }\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true);\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n // Pre-compute weights for all known modifiers for O(1) comparison\n const modifierWeights = new Map();\n // Assign weights to sensitive modifiers (highest priority, but preserve order)\n config.orderSensitiveModifiers.forEach((mod, index) => {\n modifierWeights.set(mod, 1000000 + index); // High weights for sensitive mods\n });\n return modifiers => {\n const result = [];\n let currentSegment = [];\n // Process modifiers in one pass\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i];\n // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n const isArbitrary = modifier[0] === '[';\n const isOrderSensitive = modifierWeights.has(modifier);\n if (isArbitrary || isOrderSensitive) {\n // Sort and flush current segment alphabetically\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n currentSegment = [];\n }\n result.push(modifier);\n } else {\n // Regular modifier - add to current segment for batch sorting\n currentSegment.push(modifier);\n }\n }\n // Sort and add any remaining segment items\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n }\n return result;\n };\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n // Fast path: skip sorting for empty or single modifier\n const variantModifier = modifiers.length === 0 ? '' : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.indexOf(classId) > -1) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nconst twJoin = (...classLists) => {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < classLists.length) {\n if (argument = classLists[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst toValue = mix => {\n // Fast path for strings\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst createTailwindMerge = (createConfigFirst, ...createConfigRest) => {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall;\n const initTailwindMerge = classList => {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n };\n const tailwindMerge = classList => {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n };\n functionToCall = initTailwindMerge;\n return (...args) => functionToCall(twJoin(...args));\n};\nconst fallbackThemeArr = [];\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || fallbackThemeArr;\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isAnyNonArbitrary,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n const themeColor = fromTheme('color');\n const themeFont = fromTheme('font');\n const themeText = fromTheme('text');\n const themeFontWeight = fromTheme('font-weight');\n const themeTracking = fromTheme('tracking');\n const themeLeading = fromTheme('leading');\n const themeBreakpoint = fromTheme('breakpoint');\n const themeContainer = fromTheme('container');\n const themeSpacing = fromTheme('spacing');\n const themeRadius = fromTheme('radius');\n const themeShadow = fromTheme('shadow');\n const themeInsetShadow = fromTheme('inset-shadow');\n const themeTextShadow = fromTheme('text-shadow');\n const themeDropShadow = fromTheme('drop-shadow');\n const themeBlur = fromTheme('blur');\n const themePerspective = fromTheme('perspective');\n const themeAspect = fromTheme('aspect');\n const themeEase = fromTheme('ease');\n const themeAnimate = fromTheme('animate');\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top', 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top', 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom', 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom'];\n const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isInteger, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n position: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleBgRepeat = () => ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }];\n const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n size: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: scalePositionWithArbitrary()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: scaleInset()\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: scaleInset()\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', 'lh', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', 'lh', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: [themeFontWeight, isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isArbitraryVariableFamilyName, isArbitraryValue, themeFont]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: ['break-word', 'anywhere', 'normal']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: scaleBgPosition()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: scaleBgRepeat()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: scaleBgSize()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{\n 'divide-y': scaleBorderWidth()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: scaleColor()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{\n ring: scaleColor()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [{\n 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{\n 'text-shadow': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [{\n 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }, 'mask-no-clip'],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{\n mask: ['add', 'subtract', 'intersect', 'exclude']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{\n 'mask-linear': [isNumber]\n }],\n 'mask-image-linear-from-pos': [{\n 'mask-linear-from': scaleMaskImagePosition()\n }],\n 'mask-image-linear-to-pos': [{\n 'mask-linear-to': scaleMaskImagePosition()\n }],\n 'mask-image-linear-from-color': [{\n 'mask-linear-from': scaleColor()\n }],\n 'mask-image-linear-to-color': [{\n 'mask-linear-to': scaleColor()\n }],\n 'mask-image-t-from-pos': [{\n 'mask-t-from': scaleMaskImagePosition()\n }],\n 'mask-image-t-to-pos': [{\n 'mask-t-to': scaleMaskImagePosition()\n }],\n 'mask-image-t-from-color': [{\n 'mask-t-from': scaleColor()\n }],\n 'mask-image-t-to-color': [{\n 'mask-t-to': scaleColor()\n }],\n 'mask-image-r-from-pos': [{\n 'mask-r-from': scaleMaskImagePosition()\n }],\n 'mask-image-r-to-pos': [{\n 'mask-r-to': scaleMaskImagePosition()\n }],\n 'mask-image-r-from-color': [{\n 'mask-r-from': scaleColor()\n }],\n 'mask-image-r-to-color': [{\n 'mask-r-to': scaleColor()\n }],\n 'mask-image-b-from-pos': [{\n 'mask-b-from': scaleMaskImagePosition()\n }],\n 'mask-image-b-to-pos': [{\n 'mask-b-to': scaleMaskImagePosition()\n }],\n 'mask-image-b-from-color': [{\n 'mask-b-from': scaleColor()\n }],\n 'mask-image-b-to-color': [{\n 'mask-b-to': scaleColor()\n }],\n 'mask-image-l-from-pos': [{\n 'mask-l-from': scaleMaskImagePosition()\n }],\n 'mask-image-l-to-pos': [{\n 'mask-l-to': scaleMaskImagePosition()\n }],\n 'mask-image-l-from-color': [{\n 'mask-l-from': scaleColor()\n }],\n 'mask-image-l-to-color': [{\n 'mask-l-to': scaleColor()\n }],\n 'mask-image-x-from-pos': [{\n 'mask-x-from': scaleMaskImagePosition()\n }],\n 'mask-image-x-to-pos': [{\n 'mask-x-to': scaleMaskImagePosition()\n }],\n 'mask-image-x-from-color': [{\n 'mask-x-from': scaleColor()\n }],\n 'mask-image-x-to-color': [{\n 'mask-x-to': scaleColor()\n }],\n 'mask-image-y-from-pos': [{\n 'mask-y-from': scaleMaskImagePosition()\n }],\n 'mask-image-y-to-pos': [{\n 'mask-y-to': scaleMaskImagePosition()\n }],\n 'mask-image-y-from-color': [{\n 'mask-y-from': scaleColor()\n }],\n 'mask-image-y-to-color': [{\n 'mask-y-to': scaleColor()\n }],\n 'mask-image-radial': [{\n 'mask-radial': [isArbitraryVariable, isArbitraryValue]\n }],\n 'mask-image-radial-from-pos': [{\n 'mask-radial-from': scaleMaskImagePosition()\n }],\n 'mask-image-radial-to-pos': [{\n 'mask-radial-to': scaleMaskImagePosition()\n }],\n 'mask-image-radial-from-color': [{\n 'mask-radial-from': scaleColor()\n }],\n 'mask-image-radial-to-color': [{\n 'mask-radial-to': scaleColor()\n }],\n 'mask-image-radial-shape': [{\n 'mask-radial': ['circle', 'ellipse']\n }],\n 'mask-image-radial-size': [{\n 'mask-radial': [{\n closest: ['side', 'corner'],\n farthest: ['side', 'corner']\n }]\n }],\n 'mask-image-radial-pos': [{\n 'mask-radial-at': scalePosition()\n }],\n 'mask-image-conic-pos': [{\n 'mask-conic': [isNumber]\n }],\n 'mask-image-conic-from-pos': [{\n 'mask-conic-from': scaleMaskImagePosition()\n }],\n 'mask-image-conic-to-pos': [{\n 'mask-conic-to': scaleMaskImagePosition()\n }],\n 'mask-image-conic-from-color': [{\n 'mask-conic-from': scaleColor()\n }],\n 'mask-image-conic-to-color': [{\n 'mask-conic-to': scaleColor()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{\n mask: ['alpha', 'luminance', 'match']\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [{\n 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{\n mask: scaleBgPosition()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{\n mask: scaleBgRepeat()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{\n mask: scaleBgSize()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{\n 'mask-type': ['alpha', 'luminance']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{\n mask: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{\n 'drop-shadow': scaleColor()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{\n 'perspective-origin': scalePositionWithArbitrary()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: scalePositionWithArbitrary()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [{\n scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n },\n orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { type ClassValue, clsx } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\n","import * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'\n size?: 'default' | 'sm' | 'lg' | 'icon'\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant = 'default', size = 'default', ...props }, ref) => {\n const baseStyles = \"inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\"\n \n const variants = {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n }\n \n const sizes = {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"h-10 w-10\",\n }\n \n return (\n <button\n className={cn(baseStyles, variants[variant], sizes[size], className)}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button }\n\n","import * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: 'default' | 'secondary' | 'destructive' | 'outline' | 'success'\n}\n\nfunction Badge({ className, variant = 'default', ...props }: BadgeProps) {\n const variants = {\n default: \"border-transparent bg-primary text-primary-foreground hover:bg-primary/80\",\n secondary: \"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n destructive: \"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80\",\n outline: \"text-foreground\",\n success: \"border-transparent bg-green-500 text-white hover:bg-green-600\",\n }\n\n return (\n <div\n className={cn(\n \"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\",\n variants[variant],\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Badge }\n\n","import * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n\n","import * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-lg border bg-card text-card-foreground shadow-sm\",\n className\n )}\n {...props}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\n \"text-2xl font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n\n","import React from 'react';\nimport { useAria } from '@/hooks/useAria';\nimport { Badge } from '@/components/ui/badge';\nimport { Button } from '@/components/ui/button';\nimport { Card } from '@/components/ui/card';\nimport { Clock, AlertCircle, RefreshCw, CheckCircle2 } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\ninterface SessionInfoProps {\n compact?: boolean;\n}\n\nexport const SessionInfo: React.FC<SessionInfoProps> = ({ compact = false }) => {\n const { sessionState, triggerSession, theme } = useAria();\n\n // Theme-based color classes\n const themeClasses = {\n bg: theme === 'dark' ? 'bg-gray-900' : 'bg-white',\n text: theme === 'dark' ? 'text-white' : 'text-gray-900',\n textMuted: theme === 'dark' ? 'text-gray-400' : 'text-gray-600',\n border: theme === 'dark' ? 'border-gray-700' : 'border-gray-200',\n cardBg: theme === 'dark' ? 'bg-gray-800' : 'bg-gray-50',\n };\n\n const formatExpiresAt = (expiresAt: string | null): string => {\n if (!expiresAt) return 'N/A';\n try {\n const date = new Date(expiresAt);\n const now = new Date();\n const diff = date.getTime() - now.getTime();\n \n if (diff < 0) return 'Expired';\n \n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(minutes / 60);\n \n if (hours > 0) return `${hours}h ${minutes % 60}m`;\n if (minutes > 0) return `${minutes}m`;\n return 'Less than 1m';\n } catch {\n return 'Invalid date';\n }\n };\n\n if (compact) {\n return (\n <div className=\"flex items-center gap-2\">\n {sessionState.isSessionReady ? (\n <Badge variant=\"success\" className=\"text-xs\">\n <CheckCircle2 className=\"h-3 w-3 mr-1\" />\n Session Active\n </Badge>\n ) : sessionState.lastError ? (\n <Badge variant=\"destructive\" className=\"text-xs\">\n <AlertCircle className=\"h-3 w-3 mr-1\" />\n Error\n </Badge>\n ) : (\n <Badge variant=\"secondary\" className=\"text-xs\">\n No Session\n </Badge>\n )}\n \n {!sessionState.isSessionReady && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={triggerSession}\n className=\"h-6 text-xs px-2\"\n >\n <RefreshCw className=\"h-3 w-3 mr-1\" />\n Start\n </Button>\n )}\n </div>\n );\n }\n\n return (\n <Card className={cn('p-4', themeClasses.cardBg, themeClasses.border)}>\n <div className=\"space-y-3\">\n <div className=\"flex items-center justify-between\">\n <h3 className={cn('text-sm font-semibold', themeClasses.text)}>\n Session Status\n </h3>\n {sessionState.isSessionReady ? (\n <Badge variant=\"success\" className=\"text-xs\">\n <CheckCircle2 className=\"h-3 w-3 mr-1\" />\n Active\n </Badge>\n ) : sessionState.lastError ? (\n <Badge variant=\"destructive\" className=\"text-xs\">\n <AlertCircle className=\"h-3 w-3 mr-1\" />\n Error\n </Badge>\n ) : (\n <Badge variant=\"secondary\" className=\"text-xs\">\n Not Started\n </Badge>\n )}\n </div>\n\n <div className=\"space-y-2\">\n {sessionState.session_id && (\n <div className=\"flex items-start gap-2\">\n <span className={cn('text-xs font-medium min-w-[70px]', themeClasses.textMuted)}>\n Session ID:\n </span>\n <span className={cn('text-xs font-mono break-all', themeClasses.text)}>\n {sessionState.session_id}\n </span>\n </div>\n )}\n\n {sessionState.expires_at && (\n <div className=\"flex items-center gap-2\">\n <Clock className={cn('h-3 w-3', themeClasses.textMuted)} />\n <span className={cn('text-xs', themeClasses.textMuted)}>\n Expires in: {formatExpiresAt(sessionState.expires_at)}\n </span>\n </div>\n )}\n\n {sessionState.lastError && (\n <div className=\"flex items-start gap-2 p-2 bg-red-50 dark:bg-red-900/20 rounded-md border border-red-200 dark:border-red-800\">\n <AlertCircle className=\"h-4 w-4 text-red-600 dark:text-red-400 mt-0.5 shrink-0\" />\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-xs font-medium text-red-800 dark:text-red-200 mb-1\">\n Error\n </p>\n <p className=\"text-xs text-red-700 dark:text-red-300 break-words\">\n {sessionState.lastError}\n </p>\n </div>\n </div>\n )}\n </div>\n\n {!sessionState.isSessionReady && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={triggerSession}\n className=\"w-full\"\n >\n <RefreshCw className=\"h-4 w-4 mr-2\" />\n Trigger Session\n </Button>\n )}\n </div>\n </Card>\n );\n};\n\n","import React, { useState, useRef, useEffect } from 'react';\nimport { Send, User, Bot, MessageCircle } from 'lucide-react';\nimport { useAria } from '@/hooks/useAria';\nimport { Button } from '@/components/ui/button';\nimport { Input } from '@/components/ui/input';\nimport { Card } from '@/components/ui/card';\nimport { SessionInfo } from './SessionInfo';\nimport { cn } from '@/lib/utils';\n\nexport const ChatPanel: React.FC = () => {\n const { chatMessages, sendMessage, isConnected } = useAria();\n const [inputValue, setInputValue] = useState('');\n const [isSending, setIsSending] = useState(false);\n const messagesEndRef = useRef<HTMLDivElement>(null);\n\n const scrollToBottom = () => {\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });\n };\n\n useEffect(() => {\n scrollToBottom();\n }, [chatMessages]);\n\n const handleSend = async () => {\n if (!inputValue.trim() || !isConnected || isSending) return;\n\n const messageToSend = inputValue.trim();\n setInputValue('');\n setIsSending(true);\n\n try {\n await sendMessage(messageToSend);\n } catch (error) {\n console.error('Failed to send message:', error);\n // Restore the message if sending failed\n setInputValue(messageToSend);\n } finally {\n setIsSending(false);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSend();\n }\n };\n\n const formatTimestamp = (timestamp: number) => {\n const date = new Date(timestamp);\n return date.toLocaleTimeString('en-US', {\n hour: '2-digit',\n minute: '2-digit',\n });\n };\n\n return (\n <div className=\"flex flex-col h-full bg-white\">\n {/* Chat Header */}\n <div className=\"px-4 py-3.5 border-b bg-gray-50\">\n <h3 className=\"font-semibold text-sm text-gray-900\">Chat History</h3>\n <p className=\"text-xs text-gray-500 mt-0.5\">\n {chatMessages.length} {chatMessages.length === 1 ? 'message' : 'messages'}\n </p>\n </div>\n\n {/* Session Info */}\n <div className=\"px-4 pt-4\">\n <SessionInfo compact />\n </div>\n\n {/* Messages Container */}\n <div className=\"flex-1 overflow-y-auto p-4 space-y-4 bg-white\">{chatMessages.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center h-full text-center px-4\">\n <div className=\"rounded-full bg-gray-100 p-4 mb-3\">\n <MessageCircle className=\"h-8 w-8 text-gray-400\" />\n </div>\n <p className=\"text-sm text-gray-500 leading-relaxed\">\n No messages yet. Start a conversation with your AI assistant.\n </p>\n </div>\n ) : (\n chatMessages.map((message, index) => (\n <div\n key={index}\n className={cn(\n 'flex gap-3',\n message.role === 'user' ? 'flex-row-reverse' : 'flex-row'\n )}\n >\n {/* Avatar */}\n <div\n className={cn(\n 'flex-shrink-0 w-8 h-8 rounded-full flex items-center justify-center',\n message.role === 'user'\n ? 'bg-blue-500 text-white'\n : 'bg-gray-200 text-gray-700'\n )}\n >\n {message.role === 'user' ? (\n <User className=\"h-4 w-4\" />\n ) : (\n <Bot className=\"h-4 w-4\" />\n )}\n </div>\n\n {/* Message Bubble */}\n <div\n className={cn(\n 'flex flex-col max-w-[75%]',\n message.role === 'user' ? 'items-end' : 'items-start'\n )}\n >\n <Card\n className={cn(\n 'px-3.5 py-2.5 shadow-sm border',\n message.role === 'user'\n ? 'bg-blue-500 text-white border-blue-500'\n : 'bg-gray-50 text-gray-900 border-gray-200'\n )}\n >\n <p className=\"text-sm leading-relaxed break-words\">\n {message.content}\n </p>\n </Card>\n <span className=\"text-xs text-gray-400 mt-1 px-1\">\n {formatTimestamp(message.timestamp)}\n </span>\n </div>\n </div>\n ))\n )}\n <div ref={messagesEndRef} />\n </div>\n\n {/* Input Area */}\n <div className=\"p-4 border-t bg-white\">\n <div className=\"flex gap-2\">\n <Input\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={\n isConnected\n ? 'Type a message...'\n : 'Connect to start chatting...'\n }\n disabled={!isConnected || isSending}\n className=\"flex-1 bg-white border-gray-300 focus:border-blue-500 focus:ring-blue-500\"\n />\n <Button\n onClick={handleSend}\n disabled={!isConnected || !inputValue.trim() || isSending}\n size=\"icon\"\n className=\"h-10 w-10 bg-blue-500 hover:bg-blue-600\"\n >\n <Send className=\"h-4 w-4\" />\n </Button>\n </div>\n <p className=\"text-xs text-gray-400 mt-2\">\n Press Enter to send\n </p>\n </div>\n </div>\n );\n};\n\n","import React, { useRef, useEffect } from 'react';\nimport { MessageCircle, Mic, MicOff, Loader2, X, MessageCircleOff } from 'lucide-react';\nimport { useAria } from '@/hooks/useAria';\nimport { Button } from '@/components/ui/button';\nimport { Badge } from '@/components/ui/badge';\nimport { ChatPanel } from './ChatPanel';\nimport { cn } from '@/lib/utils';\n\ninterface AriaWidgetProps {\n onClose: () => void;\n}\n\nexport const AriaWidget: React.FC<AriaWidgetProps> = ({ onClose }) => {\n const {\n isConnected,\n isLoading,\n isChatVisible,\n isMuted,\n liveTranscript,\n error,\n toggleChat,\n toggleMute,\n displayMode,\n triggerMode,\n theme,\n config,\n sessionState,\n } = useAria();\n\n const videoRef = useRef<HTMLVideoElement>(null);\n\n useEffect(() => {\n // Set the video element id for the Aria client\n if (videoRef.current) {\n videoRef.current.id = 'aria-video-element';\n }\n }, []);\n\n // Theme-based color classes\n const themeClasses = {\n bg: theme === 'dark' ? 'bg-gray-900' : 'bg-white',\n text: theme === 'dark' ? 'text-white' : 'text-gray-900',\n textMuted: theme === 'dark' ? 'text-gray-400' : 'text-gray-600',\n border: theme === 'dark' ? 'border-gray-700' : 'border-gray-200',\n headerBg: theme === 'dark' ? 'bg-gray-800' : 'bg-white',\n assistantBg: theme === 'dark' ? 'bg-black' : 'bg-gray-100',\n overlayBg: theme === 'dark' ? 'bg-gray-900/95' : 'bg-gray-900/90',\n buttonHover: theme === 'dark' ? 'hover:bg-gray-700' : 'hover:bg-gray-100',\n };\n\n const isFloating = displayMode === 'bottom-right';\n const isCenter = displayMode === 'center';\n\n return (\n <div\n className={cn(\n 'flex flex-col shadow-2xl overflow-hidden',\n themeClasses.bg,\n isFloating && 'fixed bottom-6 right-6 rounded-xl',\n isFloating && (isChatVisible ? 'w-[984px]' : 'w-[720px]'),\n isFloating && 'h-[560px]',\n isCenter && 'fixed inset-8 rounded-2xl',\n themeClasses.border,\n 'border'\n )}\n style={{\n zIndex: 9999,\n }}\n >\n {/* Header */}\n <div className={cn('px-4 py-3 flex items-center justify-between shrink-0', themeClasses.headerBg, themeClasses.border, 'border-b')}>\n <div className=\"flex items-center gap-3 min-w-0 flex-1\">\n <div className=\"flex flex-col min-w-0\">\n <h2 className={cn('text-sm font-semibold truncate', themeClasses.text)}>\n {config.personaConfig?.name || 'AI Assistant'}\n </h2>\n <div className=\"flex items-center gap-2\">\n <Badge \n variant={isConnected ? 'success' : 'secondary'} \n className=\"text-[10px] px-1.5 py-0.5\"\n >\n {isConnected ? '● Connected' : isLoading ? 'Connecting...' : 'Disconnected'}\n </Badge>\n {sessionState.isSessionReady && (\n <Badge \n variant=\"default\" \n className=\"text-[10px] px-1.5 py-0.5 bg-green-500\"\n >\n Session Active\n </Badge>\n )}\n {triggerMode === 'websocket' && (\n <span className={cn('text-[10px]', themeClasses.textMuted)}>\n Ready to help\n </span>\n )}\n </div>\n </div>\n </div>\n \n <div className=\"flex items-center gap-1 shrink-0 ml-4\">\n {/* Chat Toggle */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={toggleChat}\n title={isChatVisible ? 'Hide Chat' : 'Show Chat'}\n className={cn('h-8 w-8', themeClasses.textMuted, themeClasses.buttonHover)}\n >\n {!isChatVisible ? <MessageCircle className=\"h-4 w-4\" /> : <MessageCircleOff className=\"h-4 w-4\" />}\n </Button>\n \n {/* Mute/Unmute */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={toggleMute}\n disabled={!isConnected}\n title={isMuted ? 'Unmute' : 'Mute'}\n className={cn('h-8 w-8', themeClasses.textMuted, themeClasses.buttonHover, 'disabled:opacity-40')}\n >\n {isMuted ? <MicOff className=\"h-4 w-4\" /> : <Mic className=\"h-4 w-4\" />}\n </Button>\n \n {/* Close */}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={onClose}\n title=\"Close\"\n className={cn('h-8 w-8', themeClasses.textMuted, themeClasses.buttonHover)}\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n\n <div className=\"flex-1 flex overflow-hidden min-h-0\">\n {/* Assistant View Section */}\n <div className={cn(\n 'relative flex items-center justify-center overflow-hidden',\n themeClasses.assistantBg,\n isChatVisible ? 'flex-1' : 'w-full'\n )}>\n {isLoading && (\n <div className={cn('absolute inset-0 flex flex-col items-center justify-center z-10', themeClasses.assistantBg)}>\n <Loader2 className=\"h-12 w-12 animate-spin text-blue-500 mb-4\" />\n <p className={cn('text-sm font-medium', themeClasses.text)}>Connecting to your assistant...</p>\n </div>\n )}\n\n {error && (\n <div className={cn('absolute inset-0 flex flex-col items-center justify-center z-10', themeClasses.assistantBg, 'p-6')}>\n <div className=\"bg-red-600 rounded-2xl p-6 max-w-sm shadow-2xl\">\n <div className=\"text-center\">\n <div className=\"w-10 h-10 bg-red-500 rounded-full flex items-center justify-center mx-auto mb-3\">\n <X className=\"w-5 h-5 text-white\" />\n </div>\n <p className=\"text-white text-base font-semibold mb-2\">Connection Error</p>\n <p className=\"text-white/90 text-xs leading-relaxed\">{error}</p>\n </div>\n </div>\n </div>\n )}\n\n {/* Assistant Video Element */}\n <video\n ref={videoRef}\n autoPlay\n playsInline\n className={cn(\n \"w-full h-full object-contain\",\n themeClasses.assistantBg\n )}\n />\n\n {/* Live Transcript Overlay */}\n {liveTranscript && isConnected && (\n <div className={cn(\n 'absolute bottom-4 left-4 right-4 rounded-xl p-3 border shadow-2xl backdrop-blur-sm',\n themeClasses.overlayBg,\n themeClasses.border\n )}>\n <p className={cn('text-[9px] mb-1 font-semibold uppercase tracking-wider', themeClasses.textMuted)}>\n Live Transcript\n </p>\n <p className=\"text-white text-xs leading-relaxed\">{liveTranscript}</p>\n </div>\n )}\n\n {/* Assistant Controls Overlay (Bottom Center) */}\n {isConnected && !error && (\n <div className=\"absolute bottom-6 left-1/2 transform -translate-x-1/2 flex items-center gap-3 z-20\">\n <button\n onClick={toggleMute}\n className={cn(\n 'w-12 h-12 rounded-full flex items-center justify-center transition-all shadow-lg',\n isMuted \n ? 'bg-red-500 hover:bg-red-600' \n : 'bg-white/20 hover:bg-white/30 backdrop-blur-md'\n )}\n title={isMuted ? 'Unmute' : 'Mute'}\n >\n {isMuted ? (\n <MicOff className=\"h-5 w-5 text-white\" />\n ) : (\n <Mic className=\"h-5 w-5 text-white\" />\n )}\n </button>\n \n <button\n onClick={onClose}\n className=\"w-14 h-14 rounded-full bg-red-500 hover:bg-red-600 flex items-center justify-center transition-all shadow-lg\"\n title=\"Close Assistant\"\n >\n <X className=\"h-6 w-6 text-white\" />\n </button>\n </div>\n )}\n </div>\n\n {/* Chat Panel */}\n {isChatVisible && (\n <div className={cn(\n 'flex flex-col shrink-0',\n isFloating ? 'w-64' : 'w-80',\n themeClasses.bg, \n themeClasses.border, \n 'border-l'\n )}>\n <ChatPanel />\n </div>\n )}\n </div>\n </div>\n );\n};\n\n","import React from 'react';\nimport { useAria } from '@/hooks/useAria';\nimport { AriaWidget } from './AriaWidget';\n\nexport const AriaAssistant: React.FC = () => {\n const { isOpen, closeAssistant } = useAria();\n\n if (!isOpen) return null;\n\n return (\n <>\n {/* Backdrop overlay */}\n <div \n className=\"fixed inset-0 bg-black/50 backdrop-blur-sm z-[9998]\"\n onClick={closeAssistant}\n style={{ display: isOpen ? 'block' : 'none' }}\n />\n \n {/* Aria Widget */}\n <AriaWidget onClose={closeAssistant} />\n </>\n );\n};\n\n","import React from 'react';\nimport { MessageSquare } from 'lucide-react';\nimport { useAria } from '@/hooks/useAria';\nimport { Button } from '@/components/ui/button';\nimport type { ButtonProps } from '@/components/ui/button';\nimport { cn } from '@/lib/utils';\n\ninterface AriaTriggerButtonProps extends Omit<ButtonProps, 'onClick'> {\n label?: string;\n showIcon?: boolean;\n showAvatar?: boolean;\n}\n\nexport const AriaTriggerButton: React.FC<AriaTriggerButtonProps> = ({\n label,\n showIcon = true,\n showAvatar = false,\n variant = 'default',\n size = 'default',\n className,\n ...props\n}) => {\n const { openAssistant, config, displayMode, isOpen } = useAria();\n \n // Use config label if provided, otherwise use prop label, otherwise default\n const buttonLabel = label || config.triggerLabel || config.personaConfig?.name || 'Open AI';\n \n // Bottom-right style with avatar - Compact Widget style\n if (displayMode === 'bottom-right') {\n // Hide button when modal is open for cleaner UI\n if (isOpen) return null;\n \n return (\n <button\n onClick={(e) => { \n e.preventDefault();\n openAssistant('user');\n }}\n className={cn(\n \"fixed bottom-6 right-6 shadow-xl hover:shadow-2xl transition-all z-50\",\n \"flex items-center gap-3 p-3 rounded-xl\",\n \"bg-white hover:bg-gray-50 border-2 border-gray-200 hover:border-blue-400\",\n \"group\",\n className\n )}\n {...props}\n >\n {showAvatar && (\n <div className=\"w-11 h-11 rounded-full overflow-hidden flex-shrink-0 shadow-md bg-white ring-2 ring-blue-100 group-hover:ring-blue-400 transition-all\">\n <img \n src=\"/aria-image.png\" \n alt={buttonLabel}\n className=\"w-full h-full object-cover\"\n />\n </div>\n )}\n \n <div className=\"flex flex-col items-start leading-tight\">\n <span className=\"font-bold text-base text-gray-900\">{buttonLabel}</span>\n <span className=\"text-[11px] text-gray-600 font-medium\">AI CSM</span>\n </div>\n </button>\n );\n }\n \n // Center style - simple button\n return (\n <Button\n onClick={() => openAssistant('user')}\n variant={variant}\n size={size}\n className={className}\n {...props}\n >\n {showIcon && <MessageSquare className=\"mr-2 h-4 w-4\" />}\n {buttonLabel}\n </Button>\n );\n};\n\n","import * as React from \"react\"\nimport { X } from \"lucide-react\"\nimport { cn } from \"@/lib/utils\"\n\ninterface DialogProps {\n open?: boolean\n onOpenChange?: (open: boolean) => void\n children: React.ReactNode\n}\n\ninterface DialogContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n}\n\nconst Dialog = ({ open, onOpenChange, children }: DialogProps) => {\n return (\n <>\n {open && (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\n <div \n className=\"fixed inset-0 bg-black/60\"\n onClick={() => onOpenChange?.(false)}\n />\n {children}\n </div>\n )}\n </>\n )\n}\n\nconst DialogContent = React.forwardRef<HTMLDivElement, DialogContentProps>(\n ({ className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"fixed z-50 bg-background shadow-lg rounded-lg border\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n)\nDialogContent.displayName = \"DialogContent\"\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogTitle = React.forwardRef<\n HTMLHeadingElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h2\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nDialogTitle.displayName = \"DialogTitle\"\n\nconst DialogClose = ({\n className,\n onClick,\n ...props\n}: React.ButtonHTMLAttributes<HTMLButtonElement>) => (\n <button\n className={cn(\n \"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none\",\n className\n )}\n onClick={onClick}\n {...props}\n >\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </button>\n)\nDialogClose.displayName = \"DialogClose\"\n\nexport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogClose }\n\n"],"names":["base64Js","byteLength","toByteArray","fromByteArray","lookup","revLookup","Arr","code","i","len","getLens","b64","validLen","placeHoldersLen","lens","_byteLength","tmp","arr","curByte","tripletToBase64","num","encodeChunk","uint8","start","end","output","extraBytes","parts","maxChunkLength","len2","ieee754","buffer","offset","isLE","mLen","nBytes","e","m","eLen","eMax","eBias","nBits","d","s","value","c","rt","base64","require$$0","require$$1","customInspectSymbol","exports","Buffer","SlowBuffer","K_MAX_LENGTH","typedArraySupport","proto","createBuffer","length","buf","arg","encodingOrOffset","allocUnsafe","from","fromString","fromArrayView","isInstance","fromArrayBuffer","valueOf","b","fromObject","assertSize","size","alloc","fill","encoding","checked","string","actual","fromArrayLike","array","arrayView","copy","byteOffset","obj","numberIsNaN","a","x","y","list","pos","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","str","max","target","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","val","dir","arrayIndexOf","indexSize","arrLength","valLength","read","foundIndex","found","j","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","asciiToBytes","base64Write","ucs2Write","utf16leToBytes","res","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","ret","out","hexSliceLookupTable","bytes","newBuf","checkOffset","ext","noAssert","mul","defineBigIntMethod","validateNumber","first","last","boundsError","lo","hi","checkInt","min","maxBytes","wrtBigUInt64LE","checkIntBI","wrtBigUInt64BE","limit","sub","checkIEEE754","writeFloat","littleEndian","writeDouble","targetStart","errors","E","sym","getMessage","Base","name","range","input","msg","received","addNumericalSeparator","checkBounds","type","INVALID_BASE64_RE","base64clean","units","leadSurrogate","byteArray","src","dst","alphabet","table","i16","fn","BufferBigIntNotDefined","DEFAULT_API_BASE_URL","DEFAULT_API_VERSION","CLIENT_METADATA","__awaiter","thisArg","_arguments","P","generator","adopt","resolve","reject","fulfilled","step","rejected","result","DEFAULT_ANAM_METRICS_BASE_URL","DEFAULT_ANAM_API_VERSION","ClientMetricMeasurement","anamCurrentBaseUrl","anamCurrentApiVersion","apiGatewayConfig","metricsDisabled","setClientMetricsBaseUrl","baseUrl","apiVersion","setClientMetricsApiGateway","config","setClientMetricsDisabled","disabled","anamMetricsContext","setMetricsContext","context","sendClientMetric","tags","metricTags","targetPath","url","headers","error","createRTCStatsReport","stats","outputFormat","_a","_b","_c","statsByType","report","jsonReport","inboundVideo","r","_d","_e","videoData","inboundAudio","audioData","outboundAudio","userAudioData","codecData","transportData","issues","issue","ErrorCode","ClientError","message","statusCode","details","generateCorrelationId","validateApiGatewayConfig","SignalMessageAction","DataChannelMessage","AudioPermissionState","MessageRole","AnamEvent","InternalEvent","ConnectionClosedCode","AgentAudioInputStream","signallingClient","payload","binary","byte","DEFAULT_HEARTBEAT_INTERVAL_SECONDS","DEFAULT_WS_RECONNECTION_ATTEMPTS","SignallingClient","sessionId","options","publicEventEmitter","internalEventEmitter","heartbeatIntervalSeconds","maxWsReconnectionAttempts","gatewayUrl","wsPath","httpProtocol","targetProtocol","httpUrl","targetWsPath","targetUrl","initUrl","localDescription","offerMessagePayload","offerMessage","candidate","iceCandidateMessage","chatMessage","event","newBuffer","heartbeatInterval","heartbeatMessage","heartbeatMessageJson","isCustomPersonaConfig","personaConfig","CoreApiRestClient","sessionToken","apiKey","baseHeaders","sessionOptions","response","data","errorCause","body","EngineApiRestClient","content","queryString","InternalEventEmitter","callback","args","MessageHistoryClient","messageEvent","userMessage","personaMessage","existingMessageIndex","existingMessage","messageStreamEvent","PublicEventEmitter","closeCode","TalkMessageStreamState","TalkMessageStream","correlationId","signalMessage","partialMessage","endOfSpeech","SUCCESS_METRIC_POLLING_TIMEOUT_MS","STATS_COLLECTION_INTERVAL_MS","ICE_CANDIDATE_POOL_SIZE","StreamingClient","inputAudio","oldState","newState","track","metrics","timeoutId","videoDetected","detectionMethod","oldAudioState","newAudioState","deviceId","wasMuted","audioConstraints","videoElementId","videoElement","answer","iceCandidateConfig","reason","err","handle","dataChannel","webRtcToolEvent","clientToolEvent","ToolCallManager","errorMessage","audioTrack","audioSender","sender","offer","webRtcEvent","AnamClient","configError","token","base64Payload","payloadString","apiGatewayError","decodedToken","tokenType","userProvidedAudioStream","_f","_g","_h","_j","_k","_l","_m","clientConfig","engineHost","engineProtocol","signallingEndpoint","defaultIceServers","iceServers","attemptCorrelationId","streams","videoReceived","audioReceived","videoStream","audioStream","audioElementId","currentTimestamp","AriaContext","createContext","AriaProvider","children","isOpen","setIsOpen","useState","isConnected","setIsConnected","isLoading","setIsLoading","chatMessages","setChatMessages","liveTranscript","setLiveTranscript","isChatVisible","setIsChatVisible","isMuted","setIsMuted","setError","triggerMode","setTriggerMode","displayMode","setDisplayMode","sessionState","setSessionState","theme","clientRef","useRef","wsRef","videoElementIdRef","openAssistantRef","lastMessageHistoryRef","handleSessionResponse","useCallback","initializeAnamClient","prev","errorMsg","sendMessageHistory","messages","sendMessageStream","is_final","sendSessionEnd","createClient","client","anamMessages","anamMessage","isFinal","connectWebSocket","ws","parsedData","triggerSession","startSession","stopSession","openAssistant","mode","useEffect","closeAssistant","toggleChat","sendMessage","toggleMute","jsx","useAria","useContext","t","f","o","clsx","concatArrays","array1","array2","combinedArray","createClassValidatorObject","classGroupId","validator","createClassPartObject","nextPart","validators","CLASS_PART_SEPARATOR","EMPTY_CONFLICTS","ARBITRARY_PROPERTY_PREFIX","createClassGroupUtils","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","className","getGroupIdForArbitraryProperty","classParts","startIndex","getGroupRecursive","hasPostfixModifier","modifierConflicts","baseConflicts","classPartObject","currentClassPart","nextClassPartObject","classRest","validatorsLength","validatorObj","colonIndex","property","classGroups","processClassGroups","group","processClassesRecursively","classGroup","classDefinition","processClassDefinition","processStringDefinition","processFunctionDefinition","processObjectDefinition","classPartObjectToEdit","getPart","isThemeGetter","entries","key","path","current","part","next","func","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","EMPTY_MODIFIERS","createResultObject","modifiers","hasImportantModifier","baseClassName","maybePostfixModifierPosition","isExternal","createParseClassName","prefix","experimentalParseClassName","parseClassName","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","fullPrefix","parseClassNameOriginal","createSortModifiers","modifierWeights","mod","currentSegment","modifier","isArbitrary","isOrderSensitive","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","sortModifiers","classGroupsInConflict","classNames","originalClassName","variantModifier","modifierId","classId","conflictGroups","twJoin","classLists","argument","resolvedValue","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","fallbackThemeArr","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","isNumber","isInteger","isPercent","isTshirtSize","isAny","isLengthOnly","isNever","isShadow","isImage","isAnyNonArbitrary","isArbitraryValue","isArbitraryVariable","isArbitrarySize","getIsArbitraryValue","isLabelSize","isArbitraryLength","isLabelLength","isArbitraryNumber","isLabelNumber","isArbitraryPosition","isLabelPosition","isArbitraryImage","isLabelImage","isArbitraryShadow","isLabelShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isLabelFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","testLabel","testValue","shouldMatchNoLabel","label","getDefaultConfig","themeColor","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeBreakpoint","themeContainer","themeSpacing","themeRadius","themeShadow","themeInsetShadow","themeTextShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scalePositionWithArbitrary","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","scaleGridTemplateColsRows","scaleGridColRowStartAndEnd","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleColor","scaleBgPosition","scaleBgRepeat","scaleBgSize","scaleGradientStopPosition","scaleRadius","scaleBorderWidth","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","twMerge","cn","inputs","Button","React","variant","props","ref","baseStyles","variants","sizes","Badge","Input","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","SessionInfo","compact","themeClasses","formatExpiresAt","expiresAt","date","now","diff","minutes","hours","jsxs","CheckCircle2","AlertCircle","RefreshCw","Clock","ChatPanel","inputValue","setInputValue","isSending","setIsSending","messagesEndRef","scrollToBottom","handleSend","messageToSend","handleKeyDown","formatTimestamp","timestamp","MessageCircle","User","Bot","Send","AriaWidget","onClose","videoRef","isFloating","isCenter","MessageCircleOff","MicOff","Mic","X","Loader2","AriaAssistant","Fragment","AriaTriggerButton","showIcon","showAvatar","buttonLabel","MessageSquare","Dialog","open","onOpenChange","DialogContent","DialogHeader","DialogTitle","DialogClose","onClick"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,31,32]}
|