emanate-ai-chat-lib 0.1.6 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"emanate-ai-chat-lib.umd.js","sources":["../../../projects/emanate-ai-chat-lib/src/lib/emanate-ai-chat-lib.service.ts","../../../projects/emanate-ai-chat-lib/src/lib/emanate-ai-chat-lib.component.ts","../../../node_modules/tslib/tslib.es6.mjs","../../../projects/emanate-ai-chat-lib/src/lib/models/icon-config.interface.ts","../../../projects/emanate-ai-chat-lib/src/lib/services/ai-agent.service.ts","../../../projects/emanate-ai-chat-lib/src/lib/services/conversation-state.service.ts","../../../projects/emanate-ai-chat-lib/src/lib/components/ai-chat.component.ts","../../../projects/emanate-ai-chat-lib/src/lib/components/ai-chat.component.html","../../../projects/emanate-ai-chat-lib/src/lib/emanate-ai-chat-lib.module.ts","../../../projects/emanate-ai-chat-lib/src/public-api.ts","../../../projects/emanate-ai-chat-lib/src/emanate-ai-chat-lib.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EmanateAiChatLibService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-emanate-ai-chat-lib',\r\n template: `\r\n <p>\r\n Emanate AI Chat Library v1.0.0 - Use lib-ai-chat component directly\r\n </p>\r\n `,\r\n styles: []\r\n})\r\nexport class EmanateAiChatLibComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(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}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","/**\r\n * Icon configuration interfaces for the chat component\r\n */\r\n\r\nexport type IconSetType = 'feather' | 'material' | 'heroicons' | 'lucide' | 'bootstrap' | 'custom';\r\n\r\nexport interface ChatIconConfig {\r\n // View control icons\r\n compactView?: string;\r\n defaultView?: string;\r\n expandedView?: string;\r\n \r\n // Action icons\r\n send?: string;\r\n sendLoading?: string;\r\n \r\n // Avatar icons\r\n userAvatar?: string;\r\n aiAvatar?: string;\r\n loadingAvatar?: string;\r\n \r\n // Upload icons (if enabled)\r\n imageUpload?: string;\r\n fileUpload?: string;\r\n}\r\n\r\n/**\r\n * Feather Icons - Default icon set\r\n * Clean, minimal, professional\r\n */\r\nexport const FEATHER_ICONS: ChatIconConfig = {\r\n compactView: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"5\" y=\"2\" width=\"14\" height=\"20\" rx=\"2\" ry=\"2\"></rect></svg>',\r\n defaultView: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"></rect><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"></line><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"></line></svg>',\r\n expandedView: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"2.18\" ry=\"2.18\"></rect><line x1=\"7\" y1=\"2\" x2=\"7\" y2=\"22\"></line><line x1=\"17\" y1=\"2\" x2=\"17\" y2=\"22\"></line><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"></line><line x1=\"2\" y1=\"7\" x2=\"7\" y2=\"7\"></line><line x1=\"2\" y1=\"17\" x2=\"7\" y2=\"17\"></line><line x1=\"17\" y1=\"17\" x2=\"22\" y2=\"17\"></line><line x1=\"17\" y1=\"7\" x2=\"22\" y2=\"7\"></line></svg>',\r\n send: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"></line><polygon points=\"22 2 15 22 11 13 2 9 22 2\"></polygon></svg>',\r\n sendLoading: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"6\"></line><line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"22\"></line><line x1=\"4.93\" y1=\"4.93\" x2=\"7.76\" y2=\"7.76\"></line><line x1=\"16.24\" y1=\"16.24\" x2=\"19.07\" y2=\"19.07\"></line><line x1=\"2\" y1=\"12\" x2=\"6\" y2=\"12\"></line><line x1=\"18\" y1=\"12\" x2=\"22\" y2=\"12\"></line><line x1=\"4.93\" y1=\"19.07\" x2=\"7.76\" y2=\"16.24\"></line><line x1=\"16.24\" y1=\"7.76\" x2=\"19.07\" y2=\"4.93\"></line></svg>',\r\n userAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"></path><circle cx=\"12\" cy=\"7\" r=\"4\"></circle></svg>',\r\n aiAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"2\" y=\"7\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"></rect><path d=\"M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\"></path></svg>',\r\n loadingAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"6\"></line><line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"22\"></line><line x1=\"4.93\" y1=\"4.93\" x2=\"7.76\" y2=\"7.76\"></line><line x1=\"16.24\" y1=\"16.24\" x2=\"19.07\" y2=\"19.07\"></line><line x1=\"2\" y1=\"12\" x2=\"6\" y2=\"12\"></line><line x1=\"18\" y1=\"12\" x2=\"22\" y2=\"12\"></line><line x1=\"4.93\" y1=\"19.07\" x2=\"7.76\" y2=\"16.24\"></line><line x1=\"16.24\" y1=\"7.76\" x2=\"19.07\" y2=\"4.93\"></line></svg>',\r\n imageUpload: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"></circle><polyline points=\"21 15 16 10 5 21\"></polyline></svg>',\r\n fileUpload: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48\"></path></svg>'\r\n};\r\n\r\n/**\r\n * Material Icons - Google's Material Design\r\n * Rounded, friendly, modern\r\n */\r\nexport const MATERIAL_ICONS: ChatIconConfig = {\r\n compactView: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M17 19H7V5h10m0-2H7c-1.11 0-2 .89-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2z\"/></svg>',\r\n defaultView: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M21 2H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h7v2H8v2h8v-2h-2v-2h7c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H3V4h18v12z\"/></svg>',\r\n expandedView: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M3 5v4h2V5h4V3H5c-1.1 0-2 .9-2 2zm2 10H3v4c0 1.1.9 2 2 2h4v-2H5v-4zm14 4h-4v2h4c1.1 0 2-.9 2-2v-4h-2v4zm0-16h-4v2h4v4h2V5c0-1.1-.9-2-2-2z\"/></svg>',\r\n send: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z\"/></svg>',\r\n sendLoading: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z\"/></svg>',\r\n userAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\"/></svg>',\r\n aiAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M20 9V7c0-1.1-.9-2-2-2h-3c0-1.66-1.34-3-3-3S9 3.34 9 5H6c-1.1 0-2 .9-2 2v2c-1.66 0-3 1.34-3 3s1.34 3 3 3v4c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2v-4c1.66 0 3-1.34 3-3s-1.34-3-3-3zM6 19V7h12v12H6zm3-6c-.83 0-1.5-.67-1.5-1.5S8.17 10 9 10s1.5.67 1.5 1.5S9.83 13 9 13zm7.5-1.5c0 .83-.67 1.5-1.5 1.5s-1.5-.67-1.5-1.5.67-1.5 1.5-1.5 1.5.67 1.5 1.5zM8 15h8v2H8v-2z\"/></svg>',\r\n loadingAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z\"/></svg>',\r\n imageUpload: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z\"/></svg>',\r\n fileUpload: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5a2.5 2.5 0 0 1 5 0v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5a2.5 2.5 0 0 0 5 0V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z\"/></svg>'\r\n};\r\n\r\n/**\r\n * Heroicons - By Tailwind CSS team\r\n * Bold, clear, professional\r\n */\r\nexport const HEROICONS: ChatIconConfig = {\r\n compactView: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"5\" y=\"2\" width=\"14\" height=\"20\" rx=\"2\" ry=\"2\"></rect><path d=\"M9 22V12h6v10\"></path></svg>',\r\n defaultView: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"></rect><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"></line><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"></line></svg>',\r\n expandedView: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\"></line><line x1=\"9\" y1=\"21\" x2=\"9\" y2=\"9\"></line></svg>',\r\n send: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"></line><polygon points=\"22 2 15 22 11 13 2 9 22 2\"></polygon></svg>',\r\n sendLoading: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 12a9 9 0 1 1-6.219-8.56\"></path></svg>',\r\n userAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"></path><circle cx=\"12\" cy=\"7\" r=\"4\"></circle></svg>',\r\n aiAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 8V4H8\"></path><rect x=\"2\" y=\"8\" width=\"20\" height=\"12\" rx=\"2\" ry=\"2\"></rect><circle cx=\"8\" cy=\"14\" r=\"2\"></circle><circle cx=\"16\" cy=\"14\" r=\"2\"></circle></svg>',\r\n loadingAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 12a9 9 0 1 1-6.219-8.56\"></path></svg>',\r\n imageUpload: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"></circle><polyline points=\"21 15 16 10 5 21\"></polyline></svg>',\r\n fileUpload: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z\"></path><polyline points=\"13 2 13 9 20 9\"></polyline></svg>'\r\n};\r\n\r\n/**\r\n * Lucide Icons - Community-driven Feather fork\r\n * Similar to Feather but more extensive\r\n */\r\nexport const LUCIDE_ICONS: ChatIconConfig = {\r\n compactView: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"14\" height=\"20\" x=\"5\" y=\"2\" rx=\"2\" ry=\"2\"></rect><path d=\"M12.667 8 10 12h4l-2.667 4\"></path></svg>',\r\n defaultView: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"20\" height=\"14\" x=\"2\" y=\"3\" rx=\"2\"></rect><line x1=\"8\" x2=\"16\" y1=\"21\" y2=\"21\"></line><line x1=\"12\" x2=\"12\" y1=\"17\" y2=\"21\"></line></svg>',\r\n expandedView: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"></rect><path d=\"M9 3v18\"></path><path d=\"M15 3v18\"></path><path d=\"M3 9h18\"></path><path d=\"M3 15h18\"></path></svg>',\r\n send: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m22 2-7 20-4-9-9-4Z\"></path><path d=\"M22 2 11 13\"></path></svg>',\r\n sendLoading: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 12a9 9 0 1 1-6.219-8.56\"></path></svg>',\r\n userAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"8\" r=\"5\"></circle><path d=\"M20 21a8 8 0 1 0-16 0\"></path></svg>',\r\n aiAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 8V4H8\"></path><rect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\"></rect><path d=\"M2 14h2\"></path><path d=\"M20 14h2\"></path><path d=\"M15 13v2\"></path><path d=\"M9 13v2\"></path></svg>',\r\n loadingAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 12a9 9 0 1 1-6.219-8.56\"></path></svg>',\r\n imageUpload: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\"></rect><circle cx=\"9\" cy=\"9\" r=\"2\"></circle><path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\"></path></svg>',\r\n fileUpload: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z\"></path><polyline points=\"14 2 14 8 20 8\"></polyline></svg>'\r\n};\r\n\r\n/**\r\n * Bootstrap Icons - Clean and versatile\r\n * Familiar, simple, widely used\r\n */\r\nexport const BOOTSTRAP_ICONS: ChatIconConfig = {\r\n compactView: '<svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><path d=\"M11 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h6zM5 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H5z\"/><path d=\"M8 14a1 1 0 1 0 0-2 1 1 0 0 0 0 2z\"/></svg>',\r\n defaultView: '<svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><path d=\"M0 1.5A.5.5 0 0 1 .5 1H2a.5.5 0 0 1 .485.379L2.89 3H14.5a.5.5 0 0 1 .49.598l-1 5a.5.5 0 0 1-.465.401l-9.397.472L4.415 11H13a.5.5 0 0 1 0 1H4a.5.5 0 0 1-.491-.408L2.01 3.607 1.61 2H.5a.5.5 0 0 1-.5-.5zM3.102 4l.84 4.479 9.144-.459L13.89 4H3.102zM5 12a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm7 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm-7 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm7 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2z\"/></svg>',\r\n expandedView: '<svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><path d=\"M0 2.5A.5.5 0 0 1 .5 2H2a.5.5 0 0 1 .485.379L2.89 4H14.5a.5.5 0 0 1 .485.621l-1.5 6A.5.5 0 0 1 13 11H4a.5.5 0 0 1-.485-.379L1.61 3H.5a.5.5 0 0 1-.5-.5zM3.14 5l1.25 5h8.22l1.25-5H3.14zM5 13a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-2 1a2 2 0 1 1 4 0 2 2 0 0 1-4 0zm9-1a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-2 1a2 2 0 1 1 4 0 2 2 0 0 1-4 0z\"/></svg>',\r\n send: '<svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><path d=\"M15.854.146a.5.5 0 0 1 .11.54l-5.819 14.547a.75.75 0 0 1-1.329.124l-3.178-4.995L.643 7.184a.75.75 0 0 1 .124-1.33L15.314.037a.5.5 0 0 1 .54.11ZM6.636 10.07l2.761 4.338L14.13 2.576 6.636 10.07Zm6.787-8.201L1.591 6.602l4.339 2.76 7.494-7.493Z\"/></svg>',\r\n sendLoading: '<svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><path d=\"M11.534 7h3.932a.25.25 0 0 1 .192.41l-1.966 2.36a.25.25 0 0 1-.384 0l-1.966-2.36a.25.25 0 0 1 .192-.41zm-11 2h3.932a.25.25 0 0 0 .192-.41L2.692 6.23a.25.25 0 0 0-.384 0L.342 8.59A.25.25 0 0 0 .534 9z\"/><path fill-rule=\"evenodd\" d=\"M8 3c-1.552 0-2.94.707-3.857 1.818a.5.5 0 1 1-.771-.636A6.002 6.002 0 0 1 13.917 7H12.9A5.002 5.002 0 0 0 8 3zM3.1 9a5.002 5.002 0 0 0 8.757 2.182.5.5 0 1 1 .771.636A6.002 6.002 0 0 1 2.083 9H3.1z\"/></svg>',\r\n userAvatar: '<svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><path d=\"M11 6a3 3 0 1 1-6 0 3 3 0 0 1 6 0z\"/><path fill-rule=\"evenodd\" d=\"M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm8-7a7 7 0 0 0-5.468 11.37C3.242 11.226 4.805 10 8 10s4.757 1.225 5.468 2.37A7 7 0 0 0 8 1z\"/></svg>',\r\n aiAvatar: '<svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><path d=\"M6 10.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z\"/></svg>',\r\n loadingAvatar: '<svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><path d=\"M11.534 7h3.932a.25.25 0 0 1 .192.41l-1.966 2.36a.25.25 0 0 1-.384 0l-1.966-2.36a.25.25 0 0 1 .192-.41zm-11 2h3.932a.25.25 0 0 0 .192-.41L2.692 6.23a.25.25 0 0 0-.384 0L.342 8.59A.25.25 0 0 0 .534 9z\"/></svg>',\r\n imageUpload: '<svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><path d=\"M6.002 5.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0z\"/><path d=\"M2.002 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2h-12zm12 1a1 1 0 0 1 1 1v6.5l-3.777-1.947a.5.5 0 0 0-.577.093l-3.71 3.71-2.66-1.772a.5.5 0 0 0-.63.062L1.002 12V3a1 1 0 0 1 1-1h12z\"/></svg>',\r\n fileUpload: '<svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><path d=\"M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5L14 4.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5h-2z\"/></svg>'\r\n};\r\n\r\n/**\r\n * Get icon configuration by type\r\n */\r\nexport function getIconSet(iconSetType: IconSetType, customIcons?: Partial<ChatIconConfig>): ChatIconConfig {\r\n let baseIcons: ChatIconConfig;\r\n \r\n switch (iconSetType) {\r\n case 'material':\r\n baseIcons = MATERIAL_ICONS;\r\n break;\r\n case 'heroicons':\r\n baseIcons = HEROICONS;\r\n break;\r\n case 'lucide':\r\n baseIcons = LUCIDE_ICONS;\r\n break;\r\n case 'bootstrap':\r\n baseIcons = BOOTSTRAP_ICONS;\r\n break;\r\n case 'custom':\r\n baseIcons = FEATHER_ICONS; // Fallback to Feather for missing custom icons\r\n break;\r\n case 'feather':\r\n default:\r\n baseIcons = FEATHER_ICONS;\r\n break;\r\n }\r\n \r\n // Merge custom icons if provided\r\n return customIcons ? { ...baseIcons, ...customIcons } : baseIcons;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError, timeout } from 'rxjs/operators';\r\n\r\nexport interface InquiryRequest {\r\n inquiry: string;\r\n additionalInputs?: string[];\r\n}\r\n\r\nexport interface SupportBotRequest {\r\n query?: string;\r\n conversationId?: string;\r\n userId?: string;\r\n userName?: string;\r\n appSource?: string;\r\n}\r\n\r\nexport interface SupportBotChatHistoryItem {\r\n query?: string;\r\n response?: SupportBotResponse;\r\n}\r\n\r\nexport interface SupportBotResponse {\r\n answer?: string;\r\n conversationId?: string;\r\n searchIntent?: string;\r\n contents?: ChatContent[];\r\n references?: KnowledgeBaseItem[];\r\n searchDocuments?: KnowledgeBaseItem[];\r\n}\r\n\r\nexport interface ChatContent {\r\n role?: string;\r\n content?: string;\r\n authorName?: string;\r\n}\r\n\r\nexport interface KnowledgeBaseItem {\r\n fileURL?: string;\r\n title?: string;\r\n content?: string;\r\n score: number;\r\n key?: string;\r\n}\r\n\r\nexport interface AgentResponse {\r\n success: boolean;\r\n result?: string;\r\n error?: string;\r\n}\r\n\r\nexport interface AiChatConfig {\r\n apiUrl?: string;\r\n appKey?: string;\r\n timeout?: number;\r\n retries?: number;\r\n enableConversationLifecycle?: boolean; // Enable new conversation lifecycle features\r\n}\r\n\r\n// ============= Conversation Lifecycle DTOs =============\r\n\r\nexport interface ConversationDto {\r\n conversationId: string;\r\n userId: string;\r\n userName?: string;\r\n status: string; // 'Active', 'Completed', 'Abandoned', 'Archived'\r\n source?: string; // 'Web', 'Mobile', etc.\r\n startedDate: Date;\r\n lastActivityDate: Date;\r\n endedDate?: Date;\r\n messageCount: number;\r\n userMessageCount: number;\r\n aiMessageCount: number;\r\n totalTokensUsed?: number;\r\n isActive: boolean;\r\n minutesUntilTimeout: number;\r\n context?: Record<string, any>;\r\n}\r\n\r\nexport interface CreateConversationRequest {\r\n userId: string;\r\n userName: string;\r\n source?: string; // Default: 'Web'\r\n context?: Record<string, any>; // Optional metadata (loanId, etc.)\r\n}\r\n\r\nexport interface CloseConversationRequest {\r\n reason?: string; // 'UserCompleted', 'UserCancelled', 'SystemTimeout', etc.\r\n satisfactionRating?: number; // 1-5 stars\r\n userFeedback?: string; // Optional feedback text\r\n}\r\n\r\nexport interface ConversationRecoveryResponse {\r\n hasActiveConversations: boolean;\r\n activeConversations: ConversationDto[];\r\n suggestedConversation?: {\r\n conversationId: string;\r\n description: string;\r\n };\r\n}\r\n\r\nexport interface ConversationHistoryResponse {\r\n conversations: ConversationDto[];\r\n skip: number;\r\n take: number;\r\n hasMore: boolean;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AiAgentService {\r\n private readonly defaultConfig: AiChatConfig = {\r\n apiUrl: 'https://localhost:7237/api',\r\n timeout: 30000,\r\n retries: 3,\r\n enableConversationLifecycle: true // Enable by default\r\n };\r\n\r\n private config: AiChatConfig = { ...this.defaultConfig };\r\n\r\n constructor(private http: HttpClient) {}\r\n\r\n configure(config: Partial<AiChatConfig>): void {\r\n this.config = { ...this.defaultConfig, ...config };\r\n }\r\n\r\n /**\r\n * Get base URL for API endpoints\r\n * Returns the configured base URL (default: https://localhost:7237/api)\r\n */\r\n private getBaseUrl(): string {\r\n return this.config.apiUrl || 'https://localhost:7237/api';\r\n }\r\n\r\n /**\r\n * Get common HTTP headers with optional API key\r\n */\r\n private getHeaders(): HttpHeaders {\r\n return new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n ...(this.config.appKey && { 'x-api-key': this.config.appKey })\r\n });\r\n }\r\n\r\n testConfiguration(): Observable<AgentResponse> {\r\n // For development purposes, simulate a successful connection\r\n // when the backend is not available\r\n const url = `${this.getBaseUrl()}/AIAgent/TestConfiguration`;\r\n console.log('Testing configuration at:', url);\r\n \r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n ...(this.config.appKey && { 'x-api-key': this.config.appKey })\r\n });\r\n\r\n return this.http.get<AgentResponse>(url, { headers })\r\n .pipe(\r\n timeout(this.config.timeout || 30000),\r\n catchError((error) => {\r\n console.log('Backend API not available, running in demo mode:', error);\r\n \r\n // Return a mock successful response for demo purposes\r\n return throwError({\r\n success: false,\r\n error: 'Backend API not available (Demo Mode)'\r\n } as AgentResponse);\r\n })\r\n );\r\n }\r\n\r\n processInquiry(request: SupportBotRequest): Observable<SupportBotResponse> {\r\n const url = `${this.getBaseUrl()}/AIAgent/ProcessInquiry`;\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n ...(this.config.appKey && { 'x-api-key': this.config.appKey })\r\n });\r\n\r\n return this.http.post<SupportBotResponse>(url, request, { headers })\r\n .pipe(\r\n timeout(this.config.timeout || 30000),\r\n catchError((error) => {\r\n console.log('ProcessInquiry API not available, returning demo response:', error);\r\n \r\n // Return a mock response for demo purposes\r\n const mockResponse: SupportBotResponse = {\r\n answer: `Demo Mode: I received your query \"${request.query}\". The backend API is currently not available, but the UI is working correctly!`,\r\n contents: [{\r\n content: `Demo Mode: I received your query \"${request.query}\". The backend API is currently not available, but the UI is working correctly!`,\r\n role: 'assistant',\r\n authorName: 'Maestro (Demo)'\r\n }]\r\n };\r\n \r\n // Return the mock response as an Observable\r\n return new Observable<SupportBotResponse>(observer => {\r\n setTimeout(() => {\r\n observer.next(mockResponse);\r\n observer.complete();\r\n }, 1000); // Simulate network delay\r\n });\r\n })\r\n );\r\n }\r\n\r\n private handleError(error: HttpErrorResponse): Observable<AgentResponse> {\r\n let errorMessage = 'An error occurred while processing your request.';\r\n \r\n if (error.error instanceof ErrorEvent) {\r\n // Client-side error\r\n errorMessage = `Client Error: ${error.error.message}`;\r\n } else {\r\n // Server-side error\r\n errorMessage = `Server Error: ${error.status} - ${error.message}`;\r\n if (error.error && error.error.message) {\r\n errorMessage += ` - ${error.error.message}`;\r\n }\r\n }\r\n\r\n console.error('AiAgentService Error:', error);\r\n \r\n return throwError({\r\n success: false,\r\n error: errorMessage\r\n } as AgentResponse);\r\n }\r\n\r\n // ============= Conversation Lifecycle API Methods =============\r\n\r\n /**\r\n * 1. Create a new conversation or reuse existing empty one\r\n * Smart behavior (forceNew=false): Reuses existing empty conversation if available\r\n * Explicit behavior (forceNew=true): Always creates a new conversation\r\n * Should be called before sending the first message\r\n * @param request - Conversation creation request\r\n * @param forceNew - If true, always creates new conversation (default: false)\r\n * @returns Observable of ConversationDto with conversationId\r\n */\r\n createConversation(request: CreateConversationRequest, forceNew: boolean = false): Observable<ConversationDto> {\r\n if (!this.config.enableConversationLifecycle) {\r\n console.warn('Conversation lifecycle is disabled. Enable it in config.');\r\n return throwError({ error: 'Conversation lifecycle is disabled' });\r\n }\r\n\r\n const url = `${this.getBaseUrl()}/conversations?forceNew=${forceNew}`;\r\n console.log('Creating/reusing conversation at:', url, '(forceNew:', forceNew, ')');\r\n\r\n return this.http.post<ConversationDto>(url, request, { headers: this.getHeaders() })\r\n .pipe(\r\n timeout(this.config.timeout || 30000),\r\n catchError((error) => {\r\n console.log('CreateConversation API not available, returning mock response:', error);\r\n \r\n // Demo mode: Return mock conversation\r\n const mockConversation: ConversationDto = {\r\n conversationId: this.generateGuid(),\r\n userId: request.userId,\r\n userName: request.userName,\r\n status: 'Active',\r\n source: request.source || 'Web',\r\n startedDate: new Date(),\r\n lastActivityDate: new Date(),\r\n messageCount: 0,\r\n userMessageCount: 0,\r\n aiMessageCount: 0,\r\n isActive: true,\r\n minutesUntilTimeout: 1440, // 24 hours\r\n context: request.context\r\n };\r\n \r\n return new Observable<ConversationDto>(observer => {\r\n setTimeout(() => {\r\n observer.next(mockConversation);\r\n observer.complete();\r\n }, 500);\r\n });\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * 2. Get conversation details by ID\r\n * @param conversationId - The conversation ID to retrieve\r\n */\r\n getConversation(conversationId: string): Observable<ConversationDto> {\r\n if (!this.config.enableConversationLifecycle) {\r\n return throwError({ error: 'Conversation lifecycle is disabled' });\r\n }\r\n\r\n const url = `${this.getBaseUrl()}/conversations/${conversationId}`;\r\n console.log('Getting conversation at:', url);\r\n\r\n return this.http.get<ConversationDto>(url, { headers: this.getHeaders() })\r\n .pipe(\r\n timeout(this.config.timeout || 30000),\r\n catchError((error) => {\r\n if (error.status === 404) {\r\n console.error('Conversation not found:', conversationId);\r\n return throwError({ error: 'Conversation not found', status: 404 });\r\n }\r\n \r\n console.log('GetConversation API not available:', error);\r\n return throwError({ error: 'API not available (Demo Mode)', status: 503 });\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * 3. Close a conversation (idempotent)\r\n * @param conversationId - The conversation ID to close\r\n * @param request - Optional close details (reason, rating, feedback)\r\n */\r\n closeConversation(\r\n conversationId: string, \r\n request?: CloseConversationRequest\r\n ): Observable<ConversationDto> {\r\n if (!this.config.enableConversationLifecycle) {\r\n return throwError({ error: 'Conversation lifecycle is disabled' });\r\n }\r\n\r\n const url = `${this.getBaseUrl()}/conversations/${conversationId}/close`;\r\n console.log('Closing conversation at:', url);\r\n\r\n return this.http.post<ConversationDto>(url, request || {}, { headers: this.getHeaders() })\r\n .pipe(\r\n timeout(this.config.timeout || 30000),\r\n catchError((error) => {\r\n console.log('CloseConversation API not available:', error);\r\n \r\n // Demo mode: Return mock closed conversation\r\n const mockClosed: ConversationDto = {\r\n conversationId: conversationId,\r\n userId: '',\r\n status: 'Completed',\r\n startedDate: new Date(),\r\n lastActivityDate: new Date(),\r\n endedDate: new Date(),\r\n messageCount: 0,\r\n userMessageCount: 0,\r\n aiMessageCount: 0,\r\n isActive: false,\r\n minutesUntilTimeout: 0\r\n };\r\n \r\n return new Observable<ConversationDto>(observer => {\r\n setTimeout(() => {\r\n observer.next(mockClosed);\r\n observer.complete();\r\n }, 500);\r\n });\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * 4. Abandon a conversation (e.g., browser close without explicit close)\r\n * @param conversationId - The conversation ID to abandon\r\n */\r\n abandonConversation(conversationId: string): Observable<void> {\r\n if (!this.config.enableConversationLifecycle) {\r\n return throwError({ error: 'Conversation lifecycle is disabled' });\r\n }\r\n\r\n const url = `${this.getBaseUrl()}/conversations/${conversationId}/abandon`;\r\n console.log('Abandoning conversation at:', url);\r\n\r\n return this.http.post<void>(url, {}, { headers: this.getHeaders() })\r\n .pipe(\r\n timeout(this.config.timeout || 30000),\r\n catchError((error) => {\r\n console.log('AbandonConversation API not available:', error);\r\n // Silently succeed in demo mode\r\n return new Observable<void>(observer => {\r\n observer.next();\r\n observer.complete();\r\n });\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * 5. Recover active conversations after page refresh\r\n * @param userId - User ID to recover conversations for\r\n */\r\n recoverConversations(userId: string): Observable<ConversationRecoveryResponse> {\r\n if (!this.config.enableConversationLifecycle) {\r\n return throwError({ error: 'Conversation lifecycle is disabled' });\r\n }\r\n\r\n const url = `${this.getBaseUrl()}/conversations/recover?userId=${encodeURIComponent(userId)}`;\r\n console.log('Recovering conversations at:', url);\r\n\r\n return this.http.get<ConversationRecoveryResponse>(url, { headers: this.getHeaders() })\r\n .pipe(\r\n timeout(this.config.timeout || 30000),\r\n catchError((error) => {\r\n console.log('RecoverConversations API not available:', error);\r\n \r\n // Demo mode: Return no active conversations\r\n const mockRecovery: ConversationRecoveryResponse = {\r\n hasActiveConversations: false,\r\n activeConversations: []\r\n };\r\n \r\n return new Observable<ConversationRecoveryResponse>(observer => {\r\n setTimeout(() => {\r\n observer.next(mockRecovery);\r\n observer.complete();\r\n }, 500);\r\n });\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * 6. Resume a specific conversation with validation\r\n * @param conversationId - The conversation ID to resume\r\n * @param userId - User ID for ownership validation\r\n */\r\n resumeConversation(conversationId: string, userId: string): Observable<ConversationDto> {\r\n if (!this.config.enableConversationLifecycle) {\r\n return throwError({ error: 'Conversation lifecycle is disabled' });\r\n }\r\n\r\n const url = `${this.getBaseUrl()}/conversations/${conversationId}/resume?userId=${encodeURIComponent(userId)}`;\r\n console.log('Resuming conversation at:', url);\r\n\r\n return this.http.post<ConversationDto>(url, {}, { headers: this.getHeaders() })\r\n .pipe(\r\n timeout(this.config.timeout || 30000),\r\n catchError((error) => {\r\n // Pass through specific error codes\r\n if (error.status === 410) {\r\n console.error('Conversation expired (>24 hours):', conversationId);\r\n return throwError({ error: 'Conversation expired', status: 410 });\r\n }\r\n if (error.status === 403) {\r\n console.error('User does not own conversation:', conversationId);\r\n return throwError({ error: 'Unauthorized', status: 403 });\r\n }\r\n if (error.status === 404) {\r\n console.error('Conversation not found:', conversationId);\r\n return throwError({ error: 'Conversation not found', status: 404 });\r\n }\r\n \r\n console.log('ResumeConversation API not available:', error);\r\n return throwError({ error: 'API not available (Demo Mode)', status: 503 });\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * 7. Get conversation history with pagination\r\n * @param userId - User ID to get history for\r\n * @param skip - Number of records to skip (default: 0)\r\n * @param take - Number of records to return (default: 20, max: 100)\r\n */\r\n getConversationHistory(\r\n userId: string, \r\n skip: number = 0, \r\n take: number = 20\r\n ): Observable<ConversationHistoryResponse> {\r\n if (!this.config.enableConversationLifecycle) {\r\n return throwError({ error: 'Conversation lifecycle is disabled' });\r\n }\r\n\r\n const url = `${this.getBaseUrl()}/conversations/history?userId=${encodeURIComponent(userId)}&skip=${skip}&take=${take}`;\r\n console.log('Getting conversation history at:', url);\r\n\r\n return this.http.get<ConversationHistoryResponse>(url, { headers: this.getHeaders() })\r\n .pipe(\r\n timeout(this.config.timeout || 30000),\r\n catchError((error) => {\r\n console.log('GetConversationHistory API not available:', error);\r\n \r\n // Demo mode: Return empty history\r\n const mockHistory: ConversationHistoryResponse = {\r\n conversations: [],\r\n skip: skip,\r\n take: take,\r\n hasMore: false\r\n };\r\n \r\n return new Observable<ConversationHistoryResponse>(observer => {\r\n setTimeout(() => {\r\n observer.next(mockHistory);\r\n observer.complete();\r\n }, 500);\r\n });\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Generate a GUID for mock conversation IDs\r\n */\r\n private generateGuid(): string {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n const r = Math.random() * 16 | 0;\r\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable, of, throwError } from 'rxjs';\r\nimport { map, catchError, tap } from 'rxjs/operators';\r\nimport { AiAgentService, ConversationDto, CreateConversationRequest } from './ai-agent.service';\r\n\r\nexport type StorageType = 'session' | 'local' | 'none';\r\n\r\nexport interface ConversationState {\r\n conversationId: string | null;\r\n userId: string | null;\r\n userName: string | null;\r\n status: string | null;\r\n startedDate: Date | null;\r\n lastActivityDate: Date | null;\r\n isActive: boolean;\r\n}\r\n\r\nexport interface ConversationStateConfig {\r\n storageType: StorageType; // 'session', 'local', or 'none'\r\n storageKey: string;\r\n enableAutoRecovery: boolean; // Automatically recover on service init\r\n enablePageUnloadHandler: boolean; // Automatically abandon on page unload\r\n appSource: string; // Application source identifier\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ConversationStateService {\r\n private readonly defaultConfig: ConversationStateConfig = {\r\n storageType: 'session',\r\n storageKey: 'maestro-conversation-state',\r\n enableAutoRecovery: true,\r\n enablePageUnloadHandler: true,\r\n appSource: 'Emanate'\r\n };\r\n\r\n private config: ConversationStateConfig = { ...this.defaultConfig };\r\n \r\n // State observables\r\n private conversationStateSubject = new BehaviorSubject<ConversationState>(this.getEmptyState());\r\n public conversationState$ = this.conversationStateSubject.asObservable();\r\n\r\n // Track if page unload handler is registered\r\n private pageUnloadHandlerRegistered = false;\r\n\r\n constructor(private aiAgentService: AiAgentService) {\r\n // Auto-initialize if configured\r\n if (this.config.enableAutoRecovery) {\r\n this.initializeFromStorage();\r\n }\r\n }\r\n\r\n /**\r\n * Configure the conversation state service\r\n */\r\n configure(config: Partial<ConversationStateConfig>): void {\r\n this.config = { ...this.defaultConfig, ...config };\r\n \r\n // Re-initialize from storage with new config\r\n if (this.config.enableAutoRecovery) {\r\n this.initializeFromStorage();\r\n }\r\n \r\n // Setup page unload handler if enabled\r\n if (this.config.enablePageUnloadHandler && !this.pageUnloadHandlerRegistered) {\r\n this.setupPageUnloadHandler();\r\n }\r\n }\r\n\r\n /**\r\n * Get the current conversation state\r\n */\r\n getCurrentState(): ConversationState {\r\n return this.conversationStateSubject.value;\r\n }\r\n\r\n /**\r\n * Get the active conversation ID (if any)\r\n */\r\n getActiveConversationId(): string | null {\r\n return this.conversationStateSubject.value.conversationId;\r\n }\r\n\r\n /**\r\n * Initialize state from storage\r\n */\r\n private initializeFromStorage(): void {\r\n const stored = this.getFromStorage();\r\n if (stored) {\r\n console.log('Initialized conversation state from storage:', stored.conversationId);\r\n this.conversationStateSubject.next(stored);\r\n }\r\n }\r\n\r\n /**\r\n * Start a new conversation (with smart reuse by default)\r\n * By default (forceNew=false): Reuses existing empty conversation if available\r\n * With forceNew=true: Always creates a new conversation\r\n * Creates conversation on backend and stores state\r\n * @param userId - User ID\r\n * @param userName - User name\r\n * @param context - Optional conversation context\r\n * @param forceNew - If true, always creates new conversation (default: false)\r\n */\r\n startNewConversation(\r\n userId: string, \r\n userName: string, \r\n context?: Record<string, any>,\r\n forceNew: boolean = false\r\n ): Observable<string> {\r\n const request: CreateConversationRequest = {\r\n userId,\r\n userName,\r\n source: this.config.appSource,\r\n context\r\n };\r\n\r\n return this.aiAgentService.createConversation(request, forceNew).pipe(\r\n tap((conversation: ConversationDto) => {\r\n const state: ConversationState = {\r\n conversationId: conversation.conversationId,\r\n userId: conversation.userId,\r\n userName: conversation.userName || null,\r\n status: conversation.status,\r\n startedDate: conversation.startedDate,\r\n lastActivityDate: conversation.lastActivityDate,\r\n isActive: conversation.isActive\r\n };\r\n \r\n this.setActiveConversation(state);\r\n console.log('New conversation started:', conversation.conversationId);\r\n }),\r\n map((conversation: ConversationDto) => conversation.conversationId),\r\n catchError((error) => {\r\n console.error('Failed to start conversation:', error);\r\n return throwError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Recover conversation state after page refresh\r\n * Attempts to resume the most recent active conversation\r\n */\r\n recoverState(userId: string): Observable<string | null> {\r\n // First, check local storage for existing conversationId\r\n const storedState = this.getFromStorage();\r\n \r\n if (storedState && storedState.conversationId && storedState.userId === userId) {\r\n // Try to resume the stored conversation\r\n console.log('Attempting to resume stored conversation:', storedState.conversationId);\r\n \r\n return this.aiAgentService.resumeConversation(storedState.conversationId, userId).pipe(\r\n tap((conversation: ConversationDto) => {\r\n const state: ConversationState = {\r\n conversationId: conversation.conversationId,\r\n userId: conversation.userId,\r\n userName: conversation.userName || null,\r\n status: conversation.status,\r\n startedDate: conversation.startedDate,\r\n lastActivityDate: conversation.lastActivityDate,\r\n isActive: conversation.isActive\r\n };\r\n \r\n this.setActiveConversation(state);\r\n console.log('Successfully resumed conversation:', conversation.conversationId);\r\n }),\r\n map((conversation: ConversationDto) => conversation.conversationId),\r\n catchError((error) => {\r\n console.error('Failed to resume stored conversation:', error);\r\n \r\n // If stored conversation is expired/invalid, clear it and try recovery\r\n this.clearActiveConversation();\r\n return this.recoverFromBackend(userId);\r\n })\r\n );\r\n }\r\n \r\n // No stored conversation, try backend recovery\r\n return this.recoverFromBackend(userId);\r\n }\r\n\r\n /**\r\n * Recover from backend using the recovery endpoint\r\n */\r\n private recoverFromBackend(userId: string): Observable<string | null> {\r\n return this.aiAgentService.recoverConversations(userId).pipe(\r\n map((recovery) => {\r\n if (recovery.hasActiveConversations && recovery.activeConversations.length > 0) {\r\n // Use suggested conversation or first active conversation\r\n const conversation = recovery.suggestedConversation \r\n ? recovery.activeConversations.find(c => c.conversationId === recovery.suggestedConversation?.conversationId)\r\n : recovery.activeConversations[0];\r\n \r\n if (conversation) {\r\n const state: ConversationState = {\r\n conversationId: conversation.conversationId,\r\n userId: conversation.userId,\r\n userName: conversation.userName || null,\r\n status: conversation.status,\r\n startedDate: conversation.startedDate,\r\n lastActivityDate: conversation.lastActivityDate,\r\n isActive: conversation.isActive\r\n };\r\n \r\n this.setActiveConversation(state);\r\n console.log('Recovered conversation from backend:', conversation.conversationId);\r\n return conversation.conversationId;\r\n }\r\n }\r\n \r\n console.log('No active conversations found for recovery');\r\n return null;\r\n }),\r\n catchError((error) => {\r\n console.error('Failed to recover conversations from backend:', error);\r\n return of(null);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Explicitly start a new conversation session\r\n * Always creates a new conversation (forceNew=true)\r\n * Use this when user clicks \"New Conversation\" button\r\n * @param userId - User ID\r\n * @param userName - User name\r\n * @param context - Optional conversation context\r\n */\r\n startNewConversationExplicit(\r\n userId: string, \r\n userName: string, \r\n context?: Record<string, any>\r\n ): Observable<string> {\r\n console.log('User explicitly requested new conversation');\r\n return this.startNewConversation(userId, userName, context, true);\r\n }\r\n\r\n /**\r\n * Check if current conversation is empty (no messages, no context)\r\n * An empty conversation can be safely reused\r\n */\r\n isCurrentConversationEmpty(): boolean {\r\n const currentState = this.getCurrentState();\r\n // Consider conversation empty if it has no conversationId or is not active\r\n // Note: We can't check message count from state service alone\r\n // This should be checked by the component level\r\n return !currentState.conversationId || !currentState.isActive;\r\n }\r\n\r\n /**\r\n * Close the current conversation\r\n */\r\n closeCurrentConversation(\r\n reason?: string, \r\n satisfactionRating?: number, \r\n userFeedback?: string\r\n ): Observable<void> {\r\n const currentState = this.getCurrentState();\r\n \r\n if (!currentState.conversationId) {\r\n console.warn('No active conversation to close');\r\n return of(void 0);\r\n }\r\n\r\n return this.aiAgentService.closeConversation(\r\n currentState.conversationId, \r\n { reason, satisfactionRating, userFeedback }\r\n ).pipe(\r\n tap(() => {\r\n console.log('Conversation closed:', currentState.conversationId);\r\n this.clearActiveConversation();\r\n }),\r\n map(() => void 0),\r\n catchError((error) => {\r\n console.error('Failed to close conversation:', error);\r\n // Still clear local state even if backend call fails\r\n this.clearActiveConversation();\r\n return throwError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Abandon the current conversation (e.g., on page unload)\r\n */\r\n abandonCurrentConversation(): void {\r\n const currentState = this.getCurrentState();\r\n \r\n if (!currentState.conversationId) {\r\n return;\r\n }\r\n\r\n console.log('Abandoning conversation:', currentState.conversationId);\r\n \r\n // Use sendBeacon for reliable fire-and-forget on page unload\r\n const baseUrl = this.aiAgentService['getBaseUrl']();\r\n const url = `${baseUrl}/conversations/${currentState.conversationId}/abandon`;\r\n \r\n try {\r\n // Use sendBeacon if available (more reliable during page unload)\r\n if (navigator.sendBeacon) {\r\n const blob = new Blob([JSON.stringify({})], { type: 'application/json' });\r\n navigator.sendBeacon(url, blob);\r\n } else {\r\n // Fallback: synchronous XHR (not recommended but necessary for older browsers)\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('POST', url, false); // Synchronous\r\n xhr.setRequestHeader('Content-Type', 'application/json');\r\n xhr.send(JSON.stringify({}));\r\n }\r\n } catch (error) {\r\n console.error('Failed to abandon conversation:', error);\r\n } finally {\r\n this.clearActiveConversation();\r\n }\r\n }\r\n\r\n /**\r\n * Set active conversation state and persist to storage\r\n */\r\n private setActiveConversation(state: ConversationState): void {\r\n this.conversationStateSubject.next(state);\r\n this.saveToStorage(state);\r\n }\r\n\r\n /**\r\n * Clear active conversation state\r\n */\r\n clearActiveConversation(): void {\r\n console.log('Clearing active conversation state');\r\n this.conversationStateSubject.next(this.getEmptyState());\r\n this.removeFromStorage();\r\n }\r\n\r\n /**\r\n * Update last activity timestamp\r\n */\r\n updateLastActivity(): void {\r\n const currentState = this.getCurrentState();\r\n if (currentState.conversationId) {\r\n const updatedState: ConversationState = {\r\n ...currentState,\r\n lastActivityDate: new Date()\r\n };\r\n this.setActiveConversation(updatedState);\r\n }\r\n }\r\n\r\n /**\r\n * Setup page unload handler to abandon conversation\r\n */\r\n private setupPageUnloadHandler(): void {\r\n if (this.pageUnloadHandlerRegistered) {\r\n return;\r\n }\r\n\r\n window.addEventListener('beforeunload', () => {\r\n this.abandonCurrentConversation();\r\n });\r\n\r\n this.pageUnloadHandlerRegistered = true;\r\n console.log('Page unload handler registered for conversation abandonment');\r\n }\r\n\r\n /**\r\n * Storage operations\r\n */\r\n private getStorage(): Storage | null {\r\n switch (this.config.storageType) {\r\n case 'session':\r\n return sessionStorage;\r\n case 'local':\r\n return localStorage;\r\n case 'none':\r\n return null;\r\n default:\r\n return sessionStorage;\r\n }\r\n }\r\n\r\n private saveToStorage(state: ConversationState): void {\r\n const storage = this.getStorage();\r\n if (storage && state.conversationId) {\r\n try {\r\n storage.setItem(this.config.storageKey, JSON.stringify(state));\r\n } catch (error) {\r\n console.error('Failed to save conversation state to storage:', error);\r\n }\r\n }\r\n }\r\n\r\n private getFromStorage(): ConversationState | null {\r\n const storage = this.getStorage();\r\n if (!storage) {\r\n return null;\r\n }\r\n\r\n try {\r\n const stored = storage.getItem(this.config.storageKey);\r\n if (stored) {\r\n const state = JSON.parse(stored) as ConversationState;\r\n // Parse date strings back to Date objects\r\n if (state.startedDate) {\r\n state.startedDate = new Date(state.startedDate);\r\n }\r\n if (state.lastActivityDate) {\r\n state.lastActivityDate = new Date(state.lastActivityDate);\r\n }\r\n return state;\r\n }\r\n } catch (error) {\r\n console.error('Failed to retrieve conversation state from storage:', error);\r\n }\r\n \r\n return null;\r\n }\r\n\r\n private removeFromStorage(): void {\r\n const storage = this.getStorage();\r\n if (storage) {\r\n try {\r\n storage.removeItem(this.config.storageKey);\r\n } catch (error) {\r\n console.error('Failed to remove conversation state from storage:', error);\r\n }\r\n }\r\n }\r\n\r\n private getEmptyState(): ConversationState {\r\n return {\r\n conversationId: null,\r\n userId: null,\r\n userName: null,\r\n status: null,\r\n startedDate: null,\r\n lastActivityDate: null,\r\n isActive: false\r\n };\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, OnChanges, SimpleChanges, HostListener } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { Subject, of, Observable } from 'rxjs';\r\nimport { takeUntil, switchMap, map, catchError } from 'rxjs/operators';\r\nimport { AiAgentService, AgentResponse, SupportBotRequest, SupportBotResponse, ChatContent } from '../services/ai-agent.service';\r\nimport { ConversationStateService } from '../services/conversation-state.service';\r\nimport { IconSetType, ChatIconConfig, getIconSet } from '../models/icon-config.interface';\r\n\r\nexport interface ChatMessage {\r\n messageId?: string; // Unique message identifier\r\n conversationId?: string; // Conversation/session identifier\r\n isUser: boolean;\r\n content: string;\r\n sender?: string; // Sender name (maps to your 'sender' field)\r\n intent?: string;\r\n authorName?: string;\r\n confidenceScore?: number; // AI confidence score\r\n timestamp: Date;\r\n isLoading?: boolean;\r\n attachments?: FileAttachment[]; // File/Image attachments\r\n}\r\n\r\nexport interface FileAttachment {\r\n id: string;\r\n name: string;\r\n type: string;\r\n size: number;\r\n url?: string;\r\n data?: string | ArrayBuffer;\r\n}\r\n\r\nexport type ChatSize = 'compact' | 'default' | 'expanded' | 'fullscreen';\r\n\r\n@Component({\r\n selector: 'emanate-ai-chat',\r\n templateUrl: './ai-chat.component.html',\r\n styleUrls: ['./ai-chat.component.scss']\r\n})\r\nexport class AiChatComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() title: string = 'Chat with Maestro';\r\n @Input() placeholder: string = 'Type your inquiry here... (Press Enter to send, Shift+Enter for new line)';\r\n @Input() showDebugInfo: boolean = false;\r\n @Input() apiUrl?: string;\r\n @Input() appKey?: string;\r\n @Input() appSource?: string;\r\n @Input() userId?: string;\r\n @Input() firstName?: string;\r\n @Input() userName?: string;\r\n @Input() templateDesign?: string;\r\n @Input() welcomeMessage?: string;\r\n @Input() historicalMessages?: any[]; // Historical messages from parent\r\n @Input() conversationId?: string; // Current conversation ID\r\n @Input() enableImageUpload: boolean = false; // Enable/disable image upload button\r\n @Input() enableFileUpload: boolean = false; // Enable/disable file upload button\r\n @Input() iconSet: IconSetType = 'feather'; // Icon set selection\r\n @Input() customIcons?: Partial<ChatIconConfig>; // Custom icon overrides\r\n @Input() enableAnimations: boolean = true; // Enable/disable all animations\r\n @Input() animationSpeed: 'slow' | 'normal' | 'fast' = 'normal'; // Animation speed control\r\n @Input() enableStatusTransitions: boolean = true; // Enable/disable status indicator transitions\r\n @Input() enableConversationLifecycle: boolean = true; // Enable new conversation lifecycle features\r\n @Input() enableAutoConversationRecovery: boolean = true; // Auto-recover conversation on page load\r\n @Input() showCloseButton: boolean = false; // Show close conversation button in header (disabled by default)\r\n @Input() showNewConversationButton: boolean = true; // Show new conversation button in header\r\n @Input() confirmNewConversation: boolean = true; // Show confirmation dialog before starting new conversation\r\n @Input() newConversationConfirmMessage: string = 'Are you sure you want to start a new conversation? Your current chat will be saved in history.'; // Confirmation message for new conversation\r\n @Output() messageReceived = new EventEmitter<ChatMessage>();\r\n @Output() conversationStarted = new EventEmitter<string>(); // Emits conversationId when new conversation starts\r\n @Output() messageSent = new EventEmitter<ChatMessage>();\r\n @Output() fileUploaded = new EventEmitter<FileAttachment>();\r\n @Output() sizeChanged = new EventEmitter<{ size: ChatSize, width: number, height: number }>();\r\n\r\n messages: ChatMessage[] = [];\r\n currentInquiry = '';\r\n authorName = '';\r\n intent = '';\r\n isLoading = false;\r\n configurationStatus = '';\r\n previousStatus = ''; // Track previous status for transitions\r\n \r\n // Resizing properties\r\n currentSize: ChatSize = 'default';\r\n isFullscreen = false;\r\n isResizing = false;\r\n containerWidth = 800;\r\n containerHeight = 600;\r\n minWidth = 400;\r\n maxWidth = 1400;\r\n minHeight = 400;\r\n maxHeight = window.innerHeight - 100;\r\n startX = 0;\r\n startY = 0;\r\n startWidth = 0;\r\n startHeight = 0;\r\n \r\n // File upload properties\r\n maxFileSize = 10 * 1024 * 1024; // 10MB\r\n allowedImageTypes = ['image/png', 'image/jpeg', 'image/jpg', 'image/gif', 'image/webp'];\r\n allowedFileTypes = ['application/pdf', 'application/msword', \r\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\r\n 'text/plain', 'text/csv'];\r\n selectedFiles: FileAttachment[] = [];\r\n \r\n // Icon configuration\r\n icons: ChatIconConfig = getIconSet('feather');\r\n sanitizedIcons: { [key: string]: SafeHtml } = {};\r\n \r\n // Lazy initialization flag\r\n private conversationInitialized = false;\r\n \r\n // Confirmation modal state\r\n showConfirmationModal = false;\r\n \r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n private aiAgentService: AiAgentService,\r\n private conversationStateService: ConversationStateService,\r\n private sanitizer: DomSanitizer\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.updateStatus('Initializing...');\r\n console.log('AI Chat Component initialized');\r\n \r\n // Load icon set\r\n this.icons = getIconSet(this.iconSet, this.customIcons);\r\n this.sanitizeIcons();\r\n \r\n // Configure API URL and App Key if provided\r\n if (this.apiUrl || this.appKey) {\r\n this.aiAgentService.configure({ \r\n apiUrl: this.apiUrl,\r\n appKey: this.appKey,\r\n enableConversationLifecycle: this.enableConversationLifecycle\r\n });\r\n }\r\n \r\n // Configure conversation state service\r\n if (this.enableConversationLifecycle) {\r\n this.conversationStateService.configure({\r\n enableAutoRecovery: this.enableAutoConversationRecovery,\r\n enablePageUnloadHandler: true,\r\n appSource: this.appSource || 'Web'\r\n });\r\n \r\n // Subscribe to conversation state changes\r\n this.conversationStateService.conversationState$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(state => {\r\n if (state.conversationId && state.conversationId !== this.conversationId) {\r\n console.log('Conversation state updated:', state.conversationId);\r\n this.conversationId = state.conversationId;\r\n }\r\n });\r\n \r\n // Attempt to recover or start new conversation\r\n this.initializeConversation();\r\n } else {\r\n // Legacy mode: just test configuration\r\n try {\r\n // Load historical messages if provided\r\n if (this.historicalMessages && this.historicalMessages.length > 0) {\r\n this.loadHistoricalMessages(this.historicalMessages);\r\n } else {\r\n this.addWelcomeMessage();\r\n }\r\n \r\n this.testConfiguration();\r\n this.loadSavedSize();\r\n this.applySizePreset(this.currentSize);\r\n } catch (error) {\r\n console.error('Error during component initialization:', error);\r\n this.updateStatus('Initialization error');\r\n }\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Detect when historicalMessages input changes\r\n if (changes['historicalMessages'] && !changes['historicalMessages'].firstChange) {\r\n const newMessages = changes['historicalMessages'].currentValue;\r\n // console.log('Historical messages changed:', newMessages);\r\n \r\n // Clear existing messages and reload\r\n this.messages = [];\r\n \r\n if (newMessages && newMessages.length > 0) {\r\n this.loadHistoricalMessages(newMessages);\r\n } else {\r\n this.addWelcomeMessage();\r\n }\r\n }\r\n \r\n // Detect when conversationId changes\r\n if (changes['conversationId'] && !changes['conversationId'].firstChange) {\r\n // console.log('Conversation ID changed:', changes['conversationId'].currentValue);\r\n // Update all existing messages with new conversationId if needed\r\n this.messages.forEach(msg => {\r\n if (msg.conversationId !== this.conversationId) {\r\n msg.conversationId = this.conversationId;\r\n }\r\n });\r\n }\r\n \r\n // Detect when icon set changes\r\n if (changes['iconSet'] || changes['customIcons']) {\r\n this.icons = getIconSet(this.iconSet, this.customIcons);\r\n this.sanitizeIcons();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n /**\r\n * Handle keyboard events (ESC key to close modal)\r\n */\r\n @HostListener('document:keydown.escape', ['$event'])\r\n handleEscapeKey(event: KeyboardEvent): void {\r\n if (this.showConfirmationModal) {\r\n event.preventDefault();\r\n this.cancelConfirmation();\r\n }\r\n }\r\n\r\n /**\r\n * Get animation duration in milliseconds based on speed setting\r\n */\r\n getAnimationDuration(): number {\r\n if (!this.enableAnimations) return 0;\r\n switch (this.animationSpeed) {\r\n case 'slow': return 500;\r\n case 'fast': return 150;\r\n default: return 250; // normal\r\n }\r\n }\r\n\r\n /**\r\n * Get animation CSS class based on settings\r\n */\r\n getAnimationClass(): string {\r\n if (!this.enableAnimations) return 'no-animations';\r\n return `animation-speed-${this.animationSpeed}`;\r\n }\r\n\r\n /**\r\n * Update status with transition tracking\r\n */\r\n private updateStatus(newStatus: string): void {\r\n if (this.enableStatusTransitions && this.configurationStatus !== newStatus) {\r\n this.previousStatus = this.configurationStatus;\r\n }\r\n this.configurationStatus = newStatus;\r\n }\r\n \r\n /**\r\n * Sanitize icon SVG strings for safe rendering in innerHTML bindings\r\n */\r\n private sanitizeIcons(): void {\r\n this.sanitizedIcons = {};\r\n Object.keys(this.icons).forEach(key => {\r\n const svgString = this.icons[key as keyof ChatIconConfig];\r\n if (svgString) {\r\n this.sanitizedIcons[key] = this.sanitizer.bypassSecurityTrustHtml(svgString);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Initialize conversation - silent check only (lazy initialization)\r\n * Only reads from storage without making API calls or creating conversations\r\n * Actual conversation creation is deferred until first message send\r\n */\r\n private initializeConversation(): void {\r\n if (!this.userId) {\r\n console.warn('Cannot initialize conversation without userId');\r\n this.updateStatus('Ready');\r\n this.addWelcomeMessage();\r\n this.loadSavedSize();\r\n this.applySizePreset(this.currentSize);\r\n return;\r\n }\r\n\r\n // Silent check: only read from SessionStorage, no API calls\r\n const storedState = this.conversationStateService.getCurrentState();\r\n \r\n if (storedState && storedState.conversationId && storedState.userId === this.userId) {\r\n // Found conversation in storage - will validate on first message send\r\n this.conversationId = storedState.conversationId;\r\n this.conversationInitialized = true; // Mark as initialized (will validate on use)\r\n console.log('Found conversation in storage (will validate on first message):', this.conversationId);\r\n this.updateStatus('Ready');\r\n \r\n // Load historical messages if provided\r\n if (this.historicalMessages && this.historicalMessages.length > 0) {\r\n this.loadHistoricalMessages(this.historicalMessages);\r\n } else {\r\n this.addWelcomeMessage();\r\n }\r\n } else if (this.conversationId) {\r\n // ConversationId provided as input, use it\r\n this.conversationInitialized = true;\r\n this.updateStatus('Ready');\r\n \r\n if (this.historicalMessages && this.historicalMessages.length > 0) {\r\n this.loadHistoricalMessages(this.historicalMessages);\r\n } else {\r\n this.addWelcomeMessage();\r\n }\r\n } else {\r\n // No conversation yet - will be created on first message send\r\n console.log('No conversation found - will create on first message');\r\n this.updateStatus('Ready');\r\n this.addWelcomeMessage();\r\n }\r\n \r\n this.loadSavedSize();\r\n this.applySizePreset(this.currentSize);\r\n }\r\n\r\n /**\r\n * Ensure conversation is initialized before sending a message\r\n * Implements lazy initialization pattern\r\n * @returns Observable<boolean> indicating success\r\n */\r\n private ensureConversationInitialized(): Observable<boolean> {\r\n // If already initialized with valid conversationId, we're good\r\n if (this.conversationInitialized && this.conversationId) {\r\n // Validate the conversation still exists if from storage\r\n if (this.enableAutoConversationRecovery) {\r\n return this.aiAgentService.resumeConversation(this.conversationId, this.userId!).pipe(\r\n map(() => {\r\n console.log('Conversation validated:', this.conversationId);\r\n return true;\r\n }),\r\n catchError((error) => {\r\n console.warn('Stored conversation invalid, creating new one:', error);\r\n // Stored conversation expired/invalid, create new\r\n this.conversationInitialized = false;\r\n this.conversationId = undefined;\r\n this.conversationStateService.clearActiveConversation();\r\n return this.createNewConversationForMessage();\r\n })\r\n );\r\n }\r\n return of(true);\r\n }\r\n\r\n // Not initialized yet - try to recover or create new\r\n if (!this.userId || !this.userName) {\r\n console.error('Cannot initialize conversation: userId or userName missing');\r\n return of(false);\r\n }\r\n\r\n // Try recovery first if enabled\r\n if (this.enableAutoConversationRecovery) {\r\n return this.conversationStateService.recoverState(this.userId).pipe(\r\n switchMap((recoveredId) => {\r\n if (recoveredId) {\r\n console.log('Recovered conversation for first message:', recoveredId);\r\n this.conversationId = recoveredId;\r\n this.conversationInitialized = true;\r\n this.conversationStarted.emit(recoveredId);\r\n this.updateStatus('AI Agent is ready');\r\n return of(true);\r\n } else {\r\n // No conversation to recover, create new\r\n return this.createNewConversationForMessage();\r\n }\r\n }),\r\n catchError((error) => {\r\n console.error('Recovery failed, creating new conversation:', error);\r\n return this.createNewConversationForMessage();\r\n })\r\n );\r\n }\r\n\r\n // Recovery disabled, just create new\r\n return this.createNewConversationForMessage();\r\n }\r\n\r\n /**\r\n * Helper method to create new conversation for message send\r\n */\r\n private createNewConversationForMessage(): Observable<boolean> {\r\n this.updateStatus('Creating conversation...');\r\n \r\n return this.conversationStateService.startNewConversation(this.userId!, this.userName!).pipe(\r\n map((conversationId) => {\r\n console.log('Created conversation for first message:', conversationId);\r\n this.conversationId = conversationId;\r\n this.conversationInitialized = true;\r\n this.conversationStarted.emit(conversationId);\r\n this.updateStatus('AI Agent is ready');\r\n return true;\r\n }),\r\n catchError((error) => {\r\n console.error('Failed to create conversation:', error);\r\n this.updateStatus('Failed to create conversation');\r\n return of(false);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Start a new conversation\r\n */\r\n private startNewConversation(): void {\r\n if (!this.userId || !this.userName) {\r\n console.warn('Cannot start conversation without userId and userName');\r\n this.updateStatus('User info required');\r\n this.addWelcomeMessage();\r\n return;\r\n }\r\n\r\n this.updateStatus('Starting new conversation...');\r\n\r\n this.conversationStateService.startNewConversation(this.userId, this.userName)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (conversationId) => {\r\n console.log('Started new conversation:', conversationId);\r\n this.conversationId = conversationId;\r\n this.conversationInitialized = true;\r\n this.conversationStarted.emit(conversationId); // Emit event\r\n this.updateStatus('AI Agent is ready');\r\n // Only add welcome message if no historical messages\r\n if (!this.historicalMessages || this.historicalMessages.length === 0) {\r\n this.addWelcomeMessage();\r\n } else {\r\n this.loadHistoricalMessages(this.historicalMessages);\r\n }\r\n },\r\n error: (error) => {\r\n console.error('Failed to start conversation:', error);\r\n this.updateStatus('Failed to start conversation (Demo Mode)');\r\n // Still show UI in demo mode\r\n this.addWelcomeMessage();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Explicitly start a new conversation session\r\n * Public method for parent components or user-triggered actions\r\n * Always creates a new conversation (forceNew=true)\r\n */\r\n startNewConversationExplicit(): void {\r\n if (!this.userId || !this.userName) {\r\n console.error('Cannot start new conversation: userId or userName not provided');\r\n return;\r\n }\r\n\r\n // Check if current conversation has messages\r\n const hasMessages = this.messages.length > 0;\r\n \r\n // Show confirmation dialog if enabled and there are messages\r\n if (this.confirmNewConversation && hasMessages) {\r\n this.showConfirmationModal = true;\r\n return;\r\n }\r\n \r\n // Proceed directly if no confirmation needed\r\n this.proceedWithNewConversation();\r\n }\r\n\r\n /**\r\n * Confirm new conversation from modal\r\n */\r\n onConfirmNewConversation(): void {\r\n this.showConfirmationModal = false;\r\n this.proceedWithNewConversation();\r\n }\r\n\r\n /**\r\n * Cancel new conversation from modal\r\n */\r\n cancelConfirmation(): void {\r\n this.showConfirmationModal = false;\r\n console.log('User cancelled new conversation');\r\n }\r\n\r\n /**\r\n * Proceed with creating new conversation\r\n * @private\r\n */\r\n private proceedWithNewConversation(): void {\r\n // Safety check (should have been validated by startNewConversationExplicit)\r\n if (!this.userId || !this.userName) {\r\n console.error('Cannot proceed: userId or userName not available');\r\n return;\r\n }\r\n\r\n const hasMessages = this.messages.length > 0;\r\n \r\n if (hasMessages) {\r\n console.log('Starting new conversation (current has', this.messages.length, 'messages)');\r\n }\r\n\r\n this.updateStatus('Starting new conversation...');\r\n\r\n this.conversationStateService.startNewConversationExplicit(this.userId, this.userName)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (conversationId) => {\r\n this.conversationId = conversationId;\r\n this.conversationInitialized = true;\r\n this.conversationStarted.emit(conversationId); // Emit event\r\n this.updateStatus('New conversation started');\r\n \r\n // Clear existing messages and start fresh\r\n this.messages = [];\r\n this.addWelcomeMessage();\r\n \r\n console.log('Explicitly started new conversation:', conversationId);\r\n },\r\n error: (error) => {\r\n console.error('Failed to start new conversation:', error);\r\n this.updateStatus('Failed to start new conversation');\r\n }\r\n });\r\n }\r\n\r\n testConfiguration(): void {\r\n this.updateStatus('Testing connection...');\r\n \r\n this.aiAgentService.testConfiguration()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response: AgentResponse) => {\r\n if (response.success) {\r\n this.updateStatus('AI Agent is ready');\r\n } else {\r\n this.updateStatus(`Configuration error: ${response.error}`);\r\n }\r\n },\r\n error: (errorResponse: any) => {\r\n this.updateStatus(`Connection error: Cannot connect to backend service`);\r\n console.error('API connection test failed:', errorResponse);\r\n }\r\n });\r\n }\r\n\r\n addWelcomeMessage(): void {\r\n const welcomeText = this.welcomeMessage || \r\n `<h3>Hello ${this.firstName}!</h3>Hi, I'm Maestro—your AI assistant. I'm here to help with your policy-related inquiries.<br><br>How can I assist you today?`;\r\n \r\n this.messages.push({\r\n isUser: false,\r\n content: welcomeText, // Don't format HTML content, use it directly\r\n intent: 'welcome',\r\n timestamp: new Date()\r\n });\r\n }\r\n\r\n /**\r\n * Load and transform historical messages from parent component\r\n * Accepts messages in the format from your backend/state management\r\n */\r\n loadHistoricalMessages(historicalMessages: any[]): void {\r\n // console.log('Loading historical messages:', historicalMessages);\r\n // console.log('Number of messages to load:', historicalMessages.length);\r\n \r\n // Transform your backend format to ChatMessage format\r\n const transformedMessages: ChatMessage[] = historicalMessages.map((msg: any) => {\r\n // Determine if message is from user based on sender or role\r\n const isUserMessage = this.isUserMessage(msg);\r\n \r\n const transformed = {\r\n messageId: msg.messageId || msg.id,\r\n conversationId: msg.conversationId || this.conversationId,\r\n isUser: isUserMessage,\r\n content: msg.messageText || msg.message || msg.text || msg.content || '',\r\n sender: msg.sender || (isUserMessage ? this.userName || 'User' : 'Maestro'),\r\n intent: msg.intent || '',\r\n authorName: msg.authorName || msg.sender,\r\n confidenceScore: msg.confidenceScore || msg.confidence || 0,\r\n timestamp: msg.timestamp || msg.createdAt \r\n ? new Date(msg.timestamp || msg.createdAt) \r\n : new Date(),\r\n isLoading: false\r\n } as ChatMessage;\r\n \r\n // console.log('Transformed message:', transformed);\r\n return transformed;\r\n });\r\n \r\n // Sort messages by timestamp to maintain chronological order\r\n transformedMessages.sort((a, b) => \r\n a.timestamp.getTime() - b.timestamp.getTime()\r\n );\r\n \r\n // console.log('Sorted messages count:', transformedMessages.length);\r\n \r\n // Add welcome message first if no messages or load historical messages\r\n if (transformedMessages.length === 0) {\r\n // console.log('No messages to load, adding welcome message');\r\n this.addWelcomeMessage();\r\n } else {\r\n // Check if first message is a welcome message, if not add one\r\n const hasWelcome = transformedMessages.some(msg => \r\n msg.intent === 'welcome' || msg.content.includes('Hello')\r\n );\r\n \r\n if (!hasWelcome) {\r\n // console.log('No welcome message found, adding one');\r\n this.addWelcomeMessage();\r\n }\r\n\r\n // console.log('Pushing transformed messages to messages array');\r\n this.messages.push(...transformedMessages);\r\n }\r\n\r\n // console.log('Total loaded messages in component:', this.messages.length);\r\n // console.log('Messages array:', this.messages);\r\n }\r\n\r\n /**\r\n * Helper method to determine if a message is from the user\r\n */\r\n private isUserMessage(msg: any): boolean {\r\n // Check various properties that might indicate user message\r\n if (msg.isUser !== undefined) return msg.isUser;\r\n if (msg.role) return msg.role.toLowerCase() === 'user';\r\n if (msg.sender) {\r\n const sender = msg.sender.toLowerCase();\r\n return sender === 'user' || \r\n sender === this.userName?.toLowerCase() ||\r\n sender === this.userId?.toLowerCase() ||\r\n sender.includes('user');\r\n }\r\n // Default to false (bot message) if can't determine\r\n return false;\r\n }\r\n\r\n sendInquiry(): void {\r\n if (!this.currentInquiry.trim() || this.isLoading) {\r\n return;\r\n }\r\n\r\n const inquiry = this.currentInquiry.trim();\r\n this.currentInquiry = '';\r\n this.authorName = '';\r\n this.intent = '';\r\n this.isLoading = true;\r\n\r\n // Add user message\r\n const userMessage: ChatMessage = {\r\n messageId: this.generateMessageId(),\r\n conversationId: this.conversationId,\r\n isUser: true,\r\n sender: this.userName || 'User',\r\n intent: this.intent,\r\n content: inquiry,\r\n timestamp: new Date()\r\n };\r\n \r\n this.messages.push(userMessage);\r\n this.messageSent.emit(userMessage);\r\n\r\n // Add loading message\r\n const loadingMessage: ChatMessage = {\r\n isUser: false,\r\n intent: '',\r\n content: 'Processing your inquiry...',\r\n timestamp: new Date(),\r\n isLoading: true\r\n };\r\n this.messages.push(loadingMessage);\r\n\r\n // Ensure conversation is initialized before sending (lazy initialization)\r\n if (this.enableConversationLifecycle) {\r\n this.ensureConversationInitialized()\r\n .pipe(\r\n switchMap((initialized) => {\r\n if (!initialized) {\r\n throw new Error('Failed to initialize conversation');\r\n }\r\n \r\n // Update user message with conversationId\r\n userMessage.conversationId = this.conversationId;\r\n \r\n const request: SupportBotRequest = {\r\n query: inquiry,\r\n ...(this.conversationId !== undefined && this.conversationId !== null ? { conversationId: String(this.conversationId) } : {}),\r\n ...(this.userId !== undefined && this.userId !== null ? { userId: this.userId } : {}),\r\n ...(this.userName !== undefined && this.userName !== null ? { userName: this.userName } : {}),\r\n ...(this.appSource !== undefined && this.appSource !== null ? { appSource: this.appSource } : {})\r\n };\r\n \r\n return this.aiAgentService.processInquiry(request);\r\n }),\r\n takeUntil(this.destroy$)\r\n )\r\n .subscribe({\r\n next: (response: SupportBotResponse) => this.handleInquiryResponse(response, inquiry, userMessage),\r\n error: (error) => this.handleInquiryError(error, inquiry, userMessage)\r\n });\r\n } else {\r\n // Legacy mode without conversation lifecycle\r\n const request: SupportBotRequest = {\r\n query: inquiry,\r\n ...(this.conversationId !== undefined && this.conversationId !== null ? { conversationId: String(this.conversationId) } : {}),\r\n ...(this.userId !== undefined && this.userId !== null ? { userId: this.userId } : {}),\r\n ...(this.userName !== undefined && this.userName !== null ? { userName: this.userName } : {}),\r\n ...(this.appSource !== undefined && this.appSource !== null ? { appSource: this.appSource } : {})\r\n };\r\n \r\n this.aiAgentService.processInquiry(request)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response: SupportBotResponse) => this.handleInquiryResponse(response, inquiry, userMessage),\r\n error: (error) => this.handleInquiryError(error, inquiry, userMessage)\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Handle successful inquiry response\r\n */\r\n private handleInquiryResponse(response: SupportBotResponse, inquiry: string, userMessage: ChatMessage): void {\r\n this.isLoading = false;\r\n \r\n // Update last activity timestamp\r\n if (this.enableConversationLifecycle) {\r\n this.conversationStateService.updateLastActivity();\r\n }\r\n \r\n // Update conversationId if provided in response\r\n if (response.conversationId && !this.conversationId) {\r\n this.conversationId = response.conversationId;\r\n }\r\n \r\n // Update user message with conversationId\r\n if (userMessage && this.conversationId) {\r\n userMessage.conversationId = this.conversationId;\r\n }\r\n \r\n // Remove loading message\r\n this.messages = this.messages.filter(msg => !msg.isLoading);\r\n \r\n if (response.answer || (response.contents && response.contents.length > 0)) {\r\n if (response.answer) {\r\n const botMessage: ChatMessage = {\r\n messageId: this.generateMessageId(),\r\n conversationId: this.conversationId,\r\n isUser: false,\r\n sender: 'Maestro',\r\n intent: response.searchIntent || inquiry,\r\n content: this.formatMessageContent(response.answer),\r\n authorName: response.contents && response.contents.length > 0 ? response.contents[0].authorName : undefined,\r\n timestamp: new Date()\r\n };\r\n this.messages.push(botMessage);\r\n this.messageReceived.emit(botMessage);\r\n } else if (response.contents && response.contents.length > 0) {\r\n // Push each content as a separate message\r\n response.contents.forEach(contentItem => {\r\n if (contentItem.content) {\r\n const botMessage: ChatMessage = {\r\n messageId: this.generateMessageId(),\r\n conversationId: this.conversationId,\r\n isUser: false,\r\n sender: contentItem.authorName || 'Maestro',\r\n intent: response.searchIntent || inquiry,\r\n content: this.formatMessageContent(contentItem.content || 'No content available'),\r\n authorName: contentItem.authorName,\r\n timestamp: new Date()\r\n };\r\n this.messages.push(botMessage);\r\n this.messageReceived.emit(botMessage);\r\n }\r\n });\r\n }\r\n } else {\r\n const errorMessage: ChatMessage = {\r\n messageId: this.generateMessageId(),\r\n conversationId: this.conversationId,\r\n isUser: false,\r\n sender: 'Maestro',\r\n intent: inquiry,\r\n content: `Sorry, I didn't receive a valid response.`,\r\n authorName: this.authorName,\r\n timestamp: new Date()\r\n };\r\n this.messages.push(errorMessage);\r\n this.messageReceived.emit(errorMessage);\r\n }\r\n }\r\n\r\n /**\r\n * Handle inquiry error\r\n */\r\n private handleInquiryError(error: any, inquiry: string, userMessage: ChatMessage): void {\r\n this.isLoading = false;\r\n \r\n // Remove loading message\r\n this.messages = this.messages.filter(msg => !msg.isLoading);\r\n \r\n const errorMessage: ChatMessage = {\r\n messageId: this.generateMessageId(),\r\n conversationId: this.conversationId,\r\n isUser: false,\r\n sender: 'Maestro',\r\n intent: inquiry,\r\n content: 'Sorry, I encountered an error processing your request. Please try again.',\r\n authorName: this.authorName,\r\n timestamp: new Date()\r\n };\r\n this.messages.push(errorMessage);\r\n this.messageReceived.emit(errorMessage);\r\n \r\n console.error('Error processing inquiry:', error);\r\n }\r\n\r\n clearChat(): void {\r\n this.messages = [];\r\n this.addWelcomeMessage();\r\n }\r\n\r\n /**\r\n * Close the current conversation\r\n */\r\n closeConversation(reason?: string, rating?: number, feedback?: string): void {\r\n if (!this.enableConversationLifecycle) {\r\n console.warn('Conversation lifecycle is disabled');\r\n return;\r\n }\r\n\r\n this.updateStatus('Closing conversation...');\r\n\r\n this.conversationStateService.closeCurrentConversation(reason, rating, feedback)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: () => {\r\n console.log('Conversation closed successfully');\r\n this.conversationId = undefined;\r\n this.messages = [];\r\n this.updateStatus('Conversation closed');\r\n \r\n // Optionally start a new conversation immediately\r\n if (this.userId && this.userName) {\r\n setTimeout(() => this.startNewConversation(), 1000);\r\n }\r\n },\r\n error: (error) => {\r\n console.error('Failed to close conversation:', error);\r\n this.updateStatus('Failed to close conversation');\r\n }\r\n });\r\n }\r\n\r\n onKeyPress(event: KeyboardEvent): void {\r\n if (event.key === 'Enter' && !event.shiftKey) {\r\n event.preventDefault();\r\n this.sendInquiry();\r\n }\r\n }\r\n\r\n trackByIndex(index: number): number {\r\n return index;\r\n }\r\n\r\n getThemeClass(): string {\r\n // Default theme if no template design is specified\r\n if (!this.templateDesign) {\r\n return 'theme-default';\r\n }\r\n\r\n // Validate and return theme class\r\n const validThemes = ['default', 'dark', 'blue', 'green', 'purple', 'minimal', 'corporate', 'red', 'yellow', 'orange'];\r\n const theme = this.templateDesign.toLowerCase();\r\n \r\n if (validThemes.includes(theme)) {\r\n return `theme-${theme}`;\r\n }\r\n \r\n // Fallback to default if invalid theme\r\n console.warn(`Invalid theme '${this.templateDesign}' provided. Using default theme.`);\r\n return 'theme-default';\r\n }\r\n\r\n private formatMessageContent(content: string): string {\r\n if (!content) return '';\r\n \r\n // If content already contains HTML tags, return as-is\r\n if (content.includes('<') && content.includes('>')) {\r\n return content;\r\n }\r\n \r\n // Convert newlines to HTML breaks\r\n let formatted = content.replace(/\\n/g, '<br>');\r\n \r\n // Convert escaped newlines to HTML breaks\r\n formatted = formatted.replace(/\\\\n/g, '<br>');\r\n \r\n // Convert markdown-style bold to HTML\r\n formatted = formatted.replace(/\\*\\*(.*?)\\*\\*/g, '<strong>$1</strong>');\r\n \r\n // Convert bullet points to HTML lists\r\n const lines = formatted.split('<br>');\r\n let inList = false;\r\n const processedLines: string[] = [];\r\n \r\n for (let line of lines) {\r\n if (line.trim().startsWith('• ')) {\r\n if (!inList) {\r\n processedLines.push('<ul>');\r\n inList = true;\r\n }\r\n processedLines.push('<li>' + line.replace(/^• /, '') + '</li>');\r\n } else {\r\n if (inList) {\r\n processedLines.push('</ul>');\r\n inList = false;\r\n }\r\n processedLines.push(line);\r\n }\r\n }\r\n \r\n if (inList) {\r\n processedLines.push('</ul>');\r\n }\r\n \r\n return processedLines.join('<br>').replace(/<br><ul>/g, '<ul>').replace(/<\\/ul><br>/g, '</ul>');\r\n }\r\n\r\n private generateSessionId(): string {\r\n return 'session_' + Math.random().toString(36).substr(2, 9) + '_' + Date.now();\r\n }\r\n\r\n private generateMessageId(): string {\r\n return 'msg_' + Math.random().toString(36).substr(2, 9) + '_' + Date.now();\r\n }\r\n\r\n getFormattedTime(timestamp: Date): string {\r\n return timestamp.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\r\n }\r\n\r\n // ============= Resize Methods =============\r\n \r\n startResize(event: MouseEvent, direction: 'width' | 'both'): void {\r\n event.preventDefault();\r\n this.isResizing = true;\r\n this.startX = event.clientX;\r\n this.startY = event.clientY;\r\n this.startWidth = this.containerWidth;\r\n this.startHeight = this.containerHeight;\r\n \r\n const mouseMoveHandler = (e: MouseEvent) => this.onResize(e, direction);\r\n const mouseUpHandler = () => this.stopResize(mouseMoveHandler, mouseUpHandler);\r\n \r\n document.addEventListener('mousemove', mouseMoveHandler);\r\n document.addEventListener('mouseup', mouseUpHandler);\r\n }\r\n\r\n private onResize(event: MouseEvent, direction: 'width' | 'both'): void {\r\n if (!this.isResizing) return;\r\n \r\n const deltaX = event.clientX - this.startX;\r\n const deltaY = event.clientY - this.startY;\r\n \r\n if (direction === 'width' || direction === 'both') {\r\n const newWidth = Math.min(\r\n Math.max(this.startWidth + deltaX, this.minWidth),\r\n this.maxWidth\r\n );\r\n this.containerWidth = newWidth;\r\n }\r\n \r\n if (direction === 'both') {\r\n const newHeight = Math.min(\r\n Math.max(this.startHeight + deltaY, this.minHeight),\r\n this.maxHeight\r\n );\r\n this.containerHeight = newHeight;\r\n }\r\n }\r\n\r\n private stopResize(mouseMoveHandler: (e: MouseEvent) => void, mouseUpHandler: () => void): void {\r\n this.isResizing = false;\r\n document.removeEventListener('mousemove', mouseMoveHandler);\r\n document.removeEventListener('mouseup', mouseUpHandler);\r\n \r\n this.saveSizePreference();\r\n this.emitSizeChange();\r\n }\r\n\r\n applySizePreset(size: ChatSize): void {\r\n this.currentSize = size;\r\n \r\n switch (size) {\r\n case 'compact':\r\n this.containerWidth = 400;\r\n this.containerHeight = 500;\r\n this.isFullscreen = false;\r\n break;\r\n case 'default':\r\n this.containerWidth = 800;\r\n this.containerHeight = 600;\r\n this.isFullscreen = false;\r\n break;\r\n case 'expanded':\r\n this.containerWidth = 1200;\r\n this.containerHeight = 800;\r\n this.isFullscreen = false;\r\n break;\r\n case 'fullscreen':\r\n this.toggleFullscreen();\r\n return;\r\n }\r\n \r\n this.saveSizePreference();\r\n this.emitSizeChange();\r\n }\r\n\r\n toggleFullscreen(): void {\r\n if (!this.isFullscreen) {\r\n // Entering fullscreen - save current state first\r\n sessionStorage.setItem('chatbox-previous-size', JSON.stringify({\r\n width: this.containerWidth,\r\n height: this.containerHeight,\r\n size: this.currentSize,\r\n wasFullscreen: this.isFullscreen\r\n }));\r\n \r\n this.isFullscreen = true;\r\n this.currentSize = 'fullscreen';\r\n } else {\r\n // Exiting fullscreen - restore previous state\r\n try {\r\n const previous = sessionStorage.getItem('chatbox-previous-size');\r\n if (previous) {\r\n const prevData = JSON.parse(previous);\r\n this.containerWidth = prevData.width || 800;\r\n this.containerHeight = prevData.height || 600;\r\n this.currentSize = prevData.size === 'fullscreen' ? 'default' : prevData.size;\r\n } else {\r\n this.currentSize = 'default';\r\n this.containerWidth = 800;\r\n this.containerHeight = 600;\r\n }\r\n } catch (error) {\r\n this.currentSize = 'default';\r\n this.containerWidth = 800;\r\n this.containerHeight = 600;\r\n }\r\n \r\n this.isFullscreen = false;\r\n }\r\n \r\n this.saveSizePreference();\r\n this.emitSizeChange();\r\n }\r\n\r\n private saveSizePreference(): void {\r\n const sizeData = {\r\n size: this.currentSize,\r\n width: this.containerWidth,\r\n height: this.containerHeight,\r\n isFullscreen: this.isFullscreen\r\n };\r\n \r\n try {\r\n sessionStorage.setItem('chatbox-size-preference', JSON.stringify(sizeData));\r\n } catch (error) {\r\n console.warn('Failed to save size preference:', error);\r\n }\r\n }\r\n\r\n private loadSavedSize(): void {\r\n try {\r\n const saved = sessionStorage.getItem('chatbox-size-preference');\r\n if (saved) {\r\n const sizeData = JSON.parse(saved);\r\n this.currentSize = sizeData.size || 'default';\r\n this.containerWidth = sizeData.width || 800;\r\n this.containerHeight = sizeData.height || 600;\r\n this.isFullscreen = sizeData.isFullscreen || false;\r\n }\r\n } catch (error) {\r\n console.warn('Failed to load size preference:', error);\r\n }\r\n }\r\n\r\n private emitSizeChange(): void {\r\n this.sizeChanged.emit({\r\n size: this.currentSize,\r\n width: this.containerWidth,\r\n height: this.containerHeight\r\n });\r\n }\r\n\r\n getContainerStyle(): any {\r\n if (this.isFullscreen) {\r\n return {\r\n width: '100vw !important',\r\n height: '100vh !important',\r\n maxWidth: '100vw !important',\r\n maxHeight: '100vh !important',\r\n position: 'fixed',\r\n top: '0',\r\n left: '0',\r\n right: '0',\r\n bottom: '0',\r\n margin: '0',\r\n zIndex: 99999\r\n };\r\n }\r\n \r\n return {\r\n width: `${this.containerWidth}px`,\r\n height: `${this.containerHeight}px`,\r\n maxWidth: `${this.maxWidth}px`\r\n };\r\n }\r\n\r\n // ============= File Upload Methods =============\r\n \r\n onImageUpload(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n if (input.files && input.files.length > 0) {\r\n this.handleFileSelection(Array.from(input.files), 'image');\r\n }\r\n }\r\n\r\n onFileUpload(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n if (input.files && input.files.length > 0) {\r\n this.handleFileSelection(Array.from(input.files), 'file');\r\n }\r\n }\r\n\r\n private handleFileSelection(files: File[], type: 'image' | 'file'): void {\r\n files.forEach(file => {\r\n // Validate file type\r\n const allowedTypes = type === 'image' ? this.allowedImageTypes : this.allowedFileTypes;\r\n if (!allowedTypes.includes(file.type)) {\r\n console.warn(`File type ${file.type} not allowed`);\r\n return;\r\n }\r\n\r\n // Validate file size\r\n if (file.size > this.maxFileSize) {\r\n console.warn(`File ${file.name} exceeds maximum size of ${this.maxFileSize / 1024 / 1024}MB`);\r\n return;\r\n }\r\n\r\n const reader = new FileReader();\r\n reader.onload = (e: ProgressEvent<FileReader>) => {\r\n const attachment: FileAttachment = {\r\n id: this.generateMessageId(),\r\n name: file.name,\r\n type: file.type,\r\n size: file.size,\r\n data: e.target?.result || undefined\r\n };\r\n \r\n this.selectedFiles.push(attachment);\r\n this.fileUploaded.emit(attachment);\r\n };\r\n \r\n if (type === 'image') {\r\n reader.readAsDataURL(file);\r\n } else {\r\n reader.readAsArrayBuffer(file);\r\n }\r\n });\r\n }\r\n\r\n removeAttachment(attachmentId: string): void {\r\n this.selectedFiles = this.selectedFiles.filter(f => f.id !== attachmentId);\r\n }\r\n\r\n triggerImageUpload(): void {\r\n const input = document.getElementById('image-upload-input') as HTMLInputElement;\r\n if (input) {\r\n input.click();\r\n }\r\n }\r\n\r\n triggerFileUpload(): void {\r\n const input = document.getElementById('file-upload-input') as HTMLInputElement;\r\n if (input) {\r\n input.click();\r\n }\r\n }\r\n\r\n getFileIcon(fileType: string): string {\r\n if (fileType.startsWith('image/')) return '🖼️';\r\n if (fileType.includes('pdf')) return '📄';\r\n if (fileType.includes('word') || fileType.includes('document')) return '📝';\r\n if (fileType.includes('text')) return '📃';\r\n return '📎';\r\n }\r\n\r\n getFileSizeFormatted(bytes: number): string {\r\n if (bytes < 1024) return bytes + ' B';\r\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB';\r\n return (bytes / (1024 * 1024)).toFixed(1) + ' MB';\r\n }\r\n}","<div class=\"ai-chat-container\" \r\n [ngClass]=\"getThemeClass()\" \r\n [ngStyle]=\"getContainerStyle()\"\r\n [class.fullscreen]=\"isFullscreen\"\r\n [class.resizing]=\"isResizing\"\r\n [class]=\"getAnimationClass()\">\r\n \r\n <!-- Resize Handles -->\r\n <div class=\"resize-handle resize-handle-right\" \r\n (mousedown)=\"startResize($event, 'width')\"\r\n *ngIf=\"!isFullscreen\"\r\n title=\"Drag to resize width\">\r\n </div>\r\n \r\n <div class=\"resize-handle resize-handle-corner\" \r\n (mousedown)=\"startResize($event, 'both')\"\r\n *ngIf=\"!isFullscreen\"\r\n title=\"Drag to resize\">\r\n </div>\r\n \r\n <!-- Debug Information (only shown when showDebugInfo is true) -->\r\n <div *ngIf=\"showDebugInfo\" class=\"debug-info\">\r\n <h3>DEBUG: AI Chat Component Loaded</h3>\r\n <p>Status: {{ configurationStatus || 'Loading...' }}</p>\r\n <p>Messages count: {{ messages.length || 0 }}</p>\r\n <p>Theme: {{ templateDesign || 'default' }}</p>\r\n <p>Size: {{ currentSize }} ({{ containerWidth }}x{{ containerHeight }})</p>\r\n </div>\r\n\r\n <div class=\"chat-header\">\r\n <div class=\"header-left\">\r\n <h2>{{ title }}</h2>\r\n <!-- Icon-only status indicator -->\r\n <div class=\"status-indicator-icon\" \r\n [ngClass]=\"{'status-ready': configurationStatus === 'AI Agent is ready' || configurationStatus === 'Ready', \r\n 'status-error': configurationStatus !== 'AI Agent is ready' && configurationStatus !== 'Ready' && configurationStatus !== 'Initializing...' && configurationStatus !== 'Testing connection...',\r\n 'status-loading': configurationStatus === 'Initializing...' || configurationStatus === 'Testing connection...',\r\n 'transition-enabled': enableStatusTransitions}\"\r\n [title]=\"configurationStatus\">\r\n </div>\r\n </div>\r\n \r\n <div class=\"header-controls\">\r\n <!-- New Conversation Button -->\r\n <button *ngIf=\"showNewConversationButton && enableConversationLifecycle && conversationId\" \r\n class=\"control-button new-conversation-button prominent-button\" \r\n (click)=\"startNewConversationExplicit()\"\r\n title=\"Start New Conversation\"\r\n attr.aria-label=\"Start New Conversation\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"></path>\r\n <line x1=\"9\" y1=\"10\" x2=\"15\" y2=\"10\"></line>\r\n <line x1=\"12\" y1=\"7\" x2=\"12\" y2=\"13\"></line>\r\n </svg>\r\n <span class=\"button-text\">New Chat</span>\r\n </button>\r\n \r\n <!-- Close Conversation Button -->\r\n <button *ngIf=\"showCloseButton && enableConversationLifecycle && conversationId\" \r\n class=\"control-button close-button\" \r\n (click)=\"closeConversation('UserCompleted')\"\r\n title=\"Close Conversation\"\r\n attr.aria-label=\"Close Conversation\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\r\n </svg>\r\n </button>\r\n \r\n <!-- Size Preset Buttons -->\r\n <div class=\"size-controls\" *ngIf=\"!isFullscreen\">\r\n <button class=\"control-button size-button\" \r\n (click)=\"applySizePreset('compact')\"\r\n [class.active]=\"currentSize === 'compact'\"\r\n title=\"Compact View\"\r\n attr.aria-label=\"Compact View\">\r\n <span class=\"icon-svg\" [innerHTML]=\"sanitizedIcons.compactView\"></span>\r\n </button>\r\n <button class=\"control-button size-button\" \r\n (click)=\"applySizePreset('default')\"\r\n [class.active]=\"currentSize === 'default'\"\r\n title=\"Default View\"\r\n attr.aria-label=\"Default View\">\r\n <span class=\"icon-svg\" [innerHTML]=\"sanitizedIcons.defaultView\"></span>\r\n </button>\r\n <button class=\"control-button size-button\" \r\n (click)=\"applySizePreset('expanded')\"\r\n [class.active]=\"currentSize === 'expanded'\"\r\n title=\"Expanded View\"\r\n attr.aria-label=\"Expanded View\">\r\n <span class=\"icon-svg\" [innerHTML]=\"sanitizedIcons.expandedView\"></span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chat-messages\" #messagesContainer>\r\n <div *ngFor=\"let message of messages; let i = index; trackBy: trackByIndex\" class=\"message-wrapper\">\r\n <!-- Message -->\r\n <div class=\"message\" \r\n [ngClass]=\"{'user-message': message.isUser, 'ai-message': !message.isUser, 'loading-message': message.isLoading}\">\r\n \r\n <div class=\"message-content\">\r\n <div [innerHTML]=\"message.content\"></div>\r\n <div class=\"message-timestamp\">{{ getFormattedTime(message.timestamp) }}</div>\r\n </div>\r\n \r\n <div class=\"message-avatar\">\r\n <span *ngIf=\"message.isUser\" class=\"avatar-icon\" [innerHTML]=\"sanitizedIcons.userAvatar\"></span>\r\n <span *ngIf=\"!message.isUser && !message.isLoading\" class=\"avatar-icon\" [innerHTML]=\"sanitizedIcons.aiAvatar\"></span>\r\n <span *ngIf=\"message.isLoading\" class=\"avatar-icon loading-spinner\" [innerHTML]=\"sanitizedIcons.loadingAvatar\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chat-input\">\r\n <!-- Attachments Preview -->\r\n <div class=\"attachments-preview\" *ngIf=\"selectedFiles.length > 0\">\r\n <div class=\"attachment-item\" *ngFor=\"let file of selectedFiles\">\r\n <svg class=\"attachment-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48\"></path>\r\n </svg>\r\n <span class=\"attachment-name\">{{ file.name }}</span>\r\n <span class=\"attachment-size\">{{ getFileSizeFormatted(file.size) }}</span>\r\n <button class=\"remove-attachment\" (click)=\"removeAttachment(file.id)\" title=\"Remove\" attr.aria-label=\"Remove attachment\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div class=\"input-container\">\r\n <!-- File Upload Inputs (Hidden) -->\r\n <input type=\"file\" \r\n id=\"image-upload-input\" \r\n accept=\"image/*\" \r\n multiple \r\n (change)=\"onImageUpload($event)\"\r\n style=\"display: none;\"\r\n [disabled]=\"!enableImageUpload\">\r\n \r\n <input type=\"file\" \r\n id=\"file-upload-input\" \r\n accept=\".pdf,.doc,.docx,.txt,.csv\" \r\n multiple \r\n (change)=\"onFileUpload($event)\"\r\n style=\"display: none;\"\r\n [disabled]=\"!enableFileUpload\">\r\n \r\n <!-- Upload Buttons (Conditionally rendered) -->\r\n <div class=\"upload-buttons\" *ngIf=\"enableImageUpload || enableFileUpload\">\r\n <button *ngIf=\"enableImageUpload\" \r\n class=\"upload-button image-upload\" \r\n (click)=\"triggerImageUpload()\"\r\n [disabled]=\"isLoading\"\r\n title=\"Upload Image\"\r\n attr.aria-label=\"Upload Image\">\r\n <span class=\"icon-svg\" [innerHTML]=\"sanitizedIcons.imageUpload\"></span>\r\n </button>\r\n \r\n <button *ngIf=\"enableFileUpload\" \r\n class=\"upload-button file-upload\" \r\n (click)=\"triggerFileUpload()\"\r\n [disabled]=\"isLoading\"\r\n title=\"Attach File\"\r\n attr.aria-label=\"Attach File\">\r\n <span class=\"icon-svg\" [innerHTML]=\"sanitizedIcons.fileUpload\"></span>\r\n </button>\r\n </div>\r\n \r\n <textarea \r\n [(ngModel)]=\"currentInquiry\" \r\n (keypress)=\"onKeyPress($event)\"\r\n [placeholder]=\"placeholder\"\r\n rows=\"2\"\r\n [disabled]=\"isLoading\"\r\n class=\"inquiry-textarea\"\r\n attr.aria-label=\"Type your message\"></textarea>\r\n \r\n <button \r\n (click)=\"sendInquiry()\" \r\n [disabled]=\"!currentInquiry.trim() || isLoading\"\r\n class=\"send-button\"\r\n title=\"Send Message\"\r\n attr.aria-label=\"Send Message\">\r\n <span *ngIf=\"!isLoading\" class=\"icon-svg\" [innerHTML]=\"sanitizedIcons.send\"></span>\r\n <span *ngIf=\"isLoading\" class=\"icon-svg loading-icon\" [innerHTML]=\"sanitizedIcons.sendLoading\"></span>\r\n <span class=\"text\">{{ isLoading ? 'Sending...' : 'Send' }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Confirmation Modal -->\r\n <div class=\"confirmation-modal-backdrop\" \r\n *ngIf=\"showConfirmationModal\"\r\n (click)=\"cancelConfirmation()\">\r\n <div class=\"confirmation-modal\" \r\n [ngClass]=\"getThemeClass()\"\r\n (click)=\"$event.stopPropagation()\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n [attr.aria-labelledby]=\"'modal-title-' + conversationId\"\r\n [attr.aria-describedby]=\"'modal-description-' + conversationId\">\r\n \r\n <div class=\"modal-icon warning-icon\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"></path>\r\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"></line>\r\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"></line>\r\n </svg>\r\n </div>\r\n \r\n <h3 class=\"modal-title\" [id]=\"'modal-title-' + conversationId\">Start New Conversation?</h3>\r\n \r\n <p class=\"modal-message\" [id]=\"'modal-description-' + conversationId\">\r\n {{ newConversationConfirmMessage }}\r\n </p>\r\n \r\n <div class=\"modal-actions\">\r\n <button class=\"modal-button secondary-button\" \r\n (click)=\"cancelConfirmation()\"\r\n type=\"button\"\r\n attr.aria-label=\"Cancel\">\r\n Cancel\r\n </button>\r\n <button class=\"modal-button primary-button\" \r\n (click)=\"onConfirmNewConversation()\"\r\n type=\"button\"\r\n attr.aria-label=\"Start New Conversation\">\r\n Start New Chat\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { EmanateAiChatLibComponent } from './emanate-ai-chat-lib.component';\r\nimport { AiChatComponent } from './components/ai-chat.component';\r\nimport { AiAgentService } from './services/ai-agent.service';\r\n\r\n@NgModule({\r\n declarations: [\r\n EmanateAiChatLibComponent,\r\n AiChatComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n HttpClientModule\r\n ],\r\n providers: [\r\n AiAgentService\r\n ],\r\n exports: [\r\n EmanateAiChatLibComponent,\r\n AiChatComponent\r\n ]\r\n})\r\nexport class EmanateAiChatLibModule { }\r\n","/*\r\n * Public API Surface of emanate-ai-chat-lib\r\n */\r\n\r\nexport * from './lib/emanate-ai-chat-lib.service';\r\nexport * from './lib/emanate-ai-chat-lib.component';\r\nexport * from './lib/emanate-ai-chat-lib.module';\r\n\r\n// Export the main AI Chat component and service\r\nexport * from './lib/components/ai-chat.component';\r\nexport * from './lib/services/ai-agent.service';\r\nexport * from './lib/services/conversation-state.service';\r\n\r\n// Export icon configuration\r\nexport * from './lib/models/icon-config.interface';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i0","Injectable","Component","HttpHeaders","timeout","catchError","throwError","Observable","i1","BehaviorSubject","tap","map","of","i1.AiAgentService","EventEmitter","Subject","takeUntil","switchMap","i2.ConversationStateService","i3","i4","i5","Input","Output","HostListener","CommonModule","FormsModule","HttpClientModule","NgModule"],"mappings":"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"}
1
+ {"version":3,"file":"emanate-ai-chat-lib.umd.js","sources":["../../../projects/emanate-ai-chat-lib/src/lib/emanate-ai-chat-lib.service.ts","../../../projects/emanate-ai-chat-lib/src/lib/emanate-ai-chat-lib.component.ts","../../../node_modules/tslib/tslib.es6.mjs","../../../projects/emanate-ai-chat-lib/src/lib/models/icon-config.interface.ts","../../../projects/emanate-ai-chat-lib/src/lib/services/ai-agent.service.ts","../../../projects/emanate-ai-chat-lib/src/lib/services/conversation-state.service.ts","../../../projects/emanate-ai-chat-lib/src/lib/components/ai-chat.component.ts","../../../projects/emanate-ai-chat-lib/src/lib/components/ai-chat.component.html","../../../projects/emanate-ai-chat-lib/src/lib/emanate-ai-chat-lib.module.ts","../../../projects/emanate-ai-chat-lib/src/public-api.ts","../../../projects/emanate-ai-chat-lib/src/emanate-ai-chat-lib.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EmanateAiChatLibService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-emanate-ai-chat-lib',\r\n template: `\r\n <p>\r\n Emanate AI Chat Library v1.0.0 - Use lib-ai-chat component directly\r\n </p>\r\n `,\r\n styles: []\r\n})\r\nexport class EmanateAiChatLibComponent implements OnInit {\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n}\r\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(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}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","/**\r\n * Icon configuration interfaces for the chat component\r\n */\r\n\r\nexport type IconSetType = 'feather' | 'material' | 'heroicons' | 'lucide' | 'bootstrap' | 'custom';\r\n\r\nexport interface ChatIconConfig {\r\n // View control icons\r\n compactView?: string;\r\n defaultView?: string;\r\n expandedView?: string;\r\n \r\n // Action icons\r\n send?: string;\r\n sendLoading?: string;\r\n \r\n // Avatar icons\r\n userAvatar?: string;\r\n aiAvatar?: string;\r\n loadingAvatar?: string;\r\n \r\n // Upload icons (if enabled)\r\n imageUpload?: string;\r\n fileUpload?: string;\r\n}\r\n\r\n/**\r\n * Feather Icons - Default icon set\r\n * Clean, minimal, professional\r\n */\r\nexport const FEATHER_ICONS: ChatIconConfig = {\r\n compactView: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"5\" y=\"2\" width=\"14\" height=\"20\" rx=\"2\" ry=\"2\"></rect></svg>',\r\n defaultView: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"></rect><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"></line><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"></line></svg>',\r\n expandedView: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"2.18\" ry=\"2.18\"></rect><line x1=\"7\" y1=\"2\" x2=\"7\" y2=\"22\"></line><line x1=\"17\" y1=\"2\" x2=\"17\" y2=\"22\"></line><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"></line><line x1=\"2\" y1=\"7\" x2=\"7\" y2=\"7\"></line><line x1=\"2\" y1=\"17\" x2=\"7\" y2=\"17\"></line><line x1=\"17\" y1=\"17\" x2=\"22\" y2=\"17\"></line><line x1=\"17\" y1=\"7\" x2=\"22\" y2=\"7\"></line></svg>',\r\n send: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"></line><polygon points=\"22 2 15 22 11 13 2 9 22 2\"></polygon></svg>',\r\n sendLoading: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"6\"></line><line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"22\"></line><line x1=\"4.93\" y1=\"4.93\" x2=\"7.76\" y2=\"7.76\"></line><line x1=\"16.24\" y1=\"16.24\" x2=\"19.07\" y2=\"19.07\"></line><line x1=\"2\" y1=\"12\" x2=\"6\" y2=\"12\"></line><line x1=\"18\" y1=\"12\" x2=\"22\" y2=\"12\"></line><line x1=\"4.93\" y1=\"19.07\" x2=\"7.76\" y2=\"16.24\"></line><line x1=\"16.24\" y1=\"7.76\" x2=\"19.07\" y2=\"4.93\"></line></svg>',\r\n userAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"></path><circle cx=\"12\" cy=\"7\" r=\"4\"></circle></svg>',\r\n aiAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"2\" y=\"7\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"></rect><path d=\"M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\"></path></svg>',\r\n loadingAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"12\" y1=\"2\" x2=\"12\" y2=\"6\"></line><line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"22\"></line><line x1=\"4.93\" y1=\"4.93\" x2=\"7.76\" y2=\"7.76\"></line><line x1=\"16.24\" y1=\"16.24\" x2=\"19.07\" y2=\"19.07\"></line><line x1=\"2\" y1=\"12\" x2=\"6\" y2=\"12\"></line><line x1=\"18\" y1=\"12\" x2=\"22\" y2=\"12\"></line><line x1=\"4.93\" y1=\"19.07\" x2=\"7.76\" y2=\"16.24\"></line><line x1=\"16.24\" y1=\"7.76\" x2=\"19.07\" y2=\"4.93\"></line></svg>',\r\n imageUpload: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"></circle><polyline points=\"21 15 16 10 5 21\"></polyline></svg>',\r\n fileUpload: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48\"></path></svg>'\r\n};\r\n\r\n/**\r\n * Material Icons - Google's Material Design\r\n * Rounded, friendly, modern\r\n */\r\nexport const MATERIAL_ICONS: ChatIconConfig = {\r\n compactView: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M17 19H7V5h10m0-2H7c-1.11 0-2 .89-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2z\"/></svg>',\r\n defaultView: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M21 2H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h7v2H8v2h8v-2h-2v-2h7c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0 14H3V4h18v12z\"/></svg>',\r\n expandedView: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M3 5v4h2V5h4V3H5c-1.1 0-2 .9-2 2zm2 10H3v4c0 1.1.9 2 2 2h4v-2H5v-4zm14 4h-4v2h4c1.1 0 2-.9 2-2v-4h-2v4zm0-16h-4v2h4v4h2V5c0-1.1-.9-2-2-2z\"/></svg>',\r\n send: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z\"/></svg>',\r\n sendLoading: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z\"/></svg>',\r\n userAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\"/></svg>',\r\n aiAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M20 9V7c0-1.1-.9-2-2-2h-3c0-1.66-1.34-3-3-3S9 3.34 9 5H6c-1.1 0-2 .9-2 2v2c-1.66 0-3 1.34-3 3s1.34 3 3 3v4c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2v-4c1.66 0 3-1.34 3-3s-1.34-3-3-3zM6 19V7h12v12H6zm3-6c-.83 0-1.5-.67-1.5-1.5S8.17 10 9 10s1.5.67 1.5 1.5S9.83 13 9 13zm7.5-1.5c0 .83-.67 1.5-1.5 1.5s-1.5-.67-1.5-1.5.67-1.5 1.5-1.5 1.5.67 1.5 1.5zM8 15h8v2H8v-2z\"/></svg>',\r\n loadingAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z\"/></svg>',\r\n imageUpload: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z\"/></svg>',\r\n fileUpload: '<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5a2.5 2.5 0 0 1 5 0v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5a2.5 2.5 0 0 0 5 0V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6h-1.5z\"/></svg>'\r\n};\r\n\r\n/**\r\n * Heroicons - By Tailwind CSS team\r\n * Bold, clear, professional\r\n */\r\nexport const HEROICONS: ChatIconConfig = {\r\n compactView: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"5\" y=\"2\" width=\"14\" height=\"20\" rx=\"2\" ry=\"2\"></rect><path d=\"M9 22V12h6v10\"></path></svg>',\r\n defaultView: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"></rect><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"></line><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"></line></svg>',\r\n expandedView: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\"></line><line x1=\"9\" y1=\"21\" x2=\"9\" y2=\"9\"></line></svg>',\r\n send: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"></line><polygon points=\"22 2 15 22 11 13 2 9 22 2\"></polygon></svg>',\r\n sendLoading: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 12a9 9 0 1 1-6.219-8.56\"></path></svg>',\r\n userAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"></path><circle cx=\"12\" cy=\"7\" r=\"4\"></circle></svg>',\r\n aiAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 8V4H8\"></path><rect x=\"2\" y=\"8\" width=\"20\" height=\"12\" rx=\"2\" ry=\"2\"></rect><circle cx=\"8\" cy=\"14\" r=\"2\"></circle><circle cx=\"16\" cy=\"14\" r=\"2\"></circle></svg>',\r\n loadingAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 12a9 9 0 1 1-6.219-8.56\"></path></svg>',\r\n imageUpload: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect><circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"></circle><polyline points=\"21 15 16 10 5 21\"></polyline></svg>',\r\n fileUpload: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z\"></path><polyline points=\"13 2 13 9 20 9\"></polyline></svg>'\r\n};\r\n\r\n/**\r\n * Lucide Icons - Community-driven Feather fork\r\n * Similar to Feather but more extensive\r\n */\r\nexport const LUCIDE_ICONS: ChatIconConfig = {\r\n compactView: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"14\" height=\"20\" x=\"5\" y=\"2\" rx=\"2\" ry=\"2\"></rect><path d=\"M12.667 8 10 12h4l-2.667 4\"></path></svg>',\r\n defaultView: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"20\" height=\"14\" x=\"2\" y=\"3\" rx=\"2\"></rect><line x1=\"8\" x2=\"16\" y1=\"21\" y2=\"21\"></line><line x1=\"12\" x2=\"12\" y1=\"17\" y2=\"21\"></line></svg>',\r\n expandedView: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\"></rect><path d=\"M9 3v18\"></path><path d=\"M15 3v18\"></path><path d=\"M3 9h18\"></path><path d=\"M3 15h18\"></path></svg>',\r\n send: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m22 2-7 20-4-9-9-4Z\"></path><path d=\"M22 2 11 13\"></path></svg>',\r\n sendLoading: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 12a9 9 0 1 1-6.219-8.56\"></path></svg>',\r\n userAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"8\" r=\"5\"></circle><path d=\"M20 21a8 8 0 1 0-16 0\"></path></svg>',\r\n aiAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 8V4H8\"></path><rect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\"></rect><path d=\"M2 14h2\"></path><path d=\"M20 14h2\"></path><path d=\"M15 13v2\"></path><path d=\"M9 13v2\"></path></svg>',\r\n loadingAvatar: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 12a9 9 0 1 1-6.219-8.56\"></path></svg>',\r\n imageUpload: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\"></rect><circle cx=\"9\" cy=\"9\" r=\"2\"></circle><path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\"></path></svg>',\r\n fileUpload: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z\"></path><polyline points=\"14 2 14 8 20 8\"></polyline></svg>'\r\n};\r\n\r\n/**\r\n * Bootstrap Icons - Clean and versatile\r\n * Familiar, simple, widely used\r\n */\r\nexport const BOOTSTRAP_ICONS: ChatIconConfig = {\r\n compactView: '<svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><path d=\"M11 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h6zM5 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H5z\"/><path d=\"M8 14a1 1 0 1 0 0-2 1 1 0 0 0 0 2z\"/></svg>',\r\n defaultView: '<svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><path d=\"M0 1.5A.5.5 0 0 1 .5 1H2a.5.5 0 0 1 .485.379L2.89 3H14.5a.5.5 0 0 1 .49.598l-1 5a.5.5 0 0 1-.465.401l-9.397.472L4.415 11H13a.5.5 0 0 1 0 1H4a.5.5 0 0 1-.491-.408L2.01 3.607 1.61 2H.5a.5.5 0 0 1-.5-.5zM3.102 4l.84 4.479 9.144-.459L13.89 4H3.102zM5 12a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm7 0a2 2 0 1 0 0 4 2 2 0 0 0 0-4zm-7 1a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm7 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2z\"/></svg>',\r\n expandedView: '<svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><path d=\"M0 2.5A.5.5 0 0 1 .5 2H2a.5.5 0 0 1 .485.379L2.89 4H14.5a.5.5 0 0 1 .485.621l-1.5 6A.5.5 0 0 1 13 11H4a.5.5 0 0 1-.485-.379L1.61 3H.5a.5.5 0 0 1-.5-.5zM3.14 5l1.25 5h8.22l1.25-5H3.14zM5 13a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-2 1a2 2 0 1 1 4 0 2 2 0 0 1-4 0zm9-1a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-2 1a2 2 0 1 1 4 0 2 2 0 0 1-4 0z\"/></svg>',\r\n send: '<svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><path d=\"M15.854.146a.5.5 0 0 1 .11.54l-5.819 14.547a.75.75 0 0 1-1.329.124l-3.178-4.995L.643 7.184a.75.75 0 0 1 .124-1.33L15.314.037a.5.5 0 0 1 .54.11ZM6.636 10.07l2.761 4.338L14.13 2.576 6.636 10.07Zm6.787-8.201L1.591 6.602l4.339 2.76 7.494-7.493Z\"/></svg>',\r\n sendLoading: '<svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><path d=\"M11.534 7h3.932a.25.25 0 0 1 .192.41l-1.966 2.36a.25.25 0 0 1-.384 0l-1.966-2.36a.25.25 0 0 1 .192-.41zm-11 2h3.932a.25.25 0 0 0 .192-.41L2.692 6.23a.25.25 0 0 0-.384 0L.342 8.59A.25.25 0 0 0 .534 9z\"/><path fill-rule=\"evenodd\" d=\"M8 3c-1.552 0-2.94.707-3.857 1.818a.5.5 0 1 1-.771-.636A6.002 6.002 0 0 1 13.917 7H12.9A5.002 5.002 0 0 0 8 3zM3.1 9a5.002 5.002 0 0 0 8.757 2.182.5.5 0 1 1 .771.636A6.002 6.002 0 0 1 2.083 9H3.1z\"/></svg>',\r\n userAvatar: '<svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><path d=\"M11 6a3 3 0 1 1-6 0 3 3 0 0 1 6 0z\"/><path fill-rule=\"evenodd\" d=\"M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8zm8-7a7 7 0 0 0-5.468 11.37C3.242 11.226 4.805 10 8 10s4.757 1.225 5.468 2.37A7 7 0 0 0 8 1z\"/></svg>',\r\n aiAvatar: '<svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><path d=\"M6 10.5a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5zm-2-3a.5.5 0 0 1 .5-.5h11a.5.5 0 0 1 0 1h-11a.5.5 0 0 1-.5-.5z\"/></svg>',\r\n loadingAvatar: '<svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><path d=\"M11.534 7h3.932a.25.25 0 0 1 .192.41l-1.966 2.36a.25.25 0 0 1-.384 0l-1.966-2.36a.25.25 0 0 1 .192-.41zm-11 2h3.932a.25.25 0 0 0 .192-.41L2.692 6.23a.25.25 0 0 0-.384 0L.342 8.59A.25.25 0 0 0 .534 9z\"/></svg>',\r\n imageUpload: '<svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><path d=\"M6.002 5.5a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0z\"/><path d=\"M2.002 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2h-12zm12 1a1 1 0 0 1 1 1v6.5l-3.777-1.947a.5.5 0 0 0-.577.093l-3.71 3.71-2.66-1.772a.5.5 0 0 0-.63.062L1.002 12V3a1 1 0 0 1 1-1h12z\"/></svg>',\r\n fileUpload: '<svg viewBox=\"0 0 16 16\" fill=\"currentColor\"><path d=\"M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5L14 4.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5h-2z\"/></svg>'\r\n};\r\n\r\n/**\r\n * Get icon configuration by type\r\n */\r\nexport function getIconSet(iconSetType: IconSetType, customIcons?: Partial<ChatIconConfig>): ChatIconConfig {\r\n let baseIcons: ChatIconConfig;\r\n \r\n switch (iconSetType) {\r\n case 'material':\r\n baseIcons = MATERIAL_ICONS;\r\n break;\r\n case 'heroicons':\r\n baseIcons = HEROICONS;\r\n break;\r\n case 'lucide':\r\n baseIcons = LUCIDE_ICONS;\r\n break;\r\n case 'bootstrap':\r\n baseIcons = BOOTSTRAP_ICONS;\r\n break;\r\n case 'custom':\r\n baseIcons = FEATHER_ICONS; // Fallback to Feather for missing custom icons\r\n break;\r\n case 'feather':\r\n default:\r\n baseIcons = FEATHER_ICONS;\r\n break;\r\n }\r\n \r\n // Merge custom icons if provided\r\n return customIcons ? { ...baseIcons, ...customIcons } : baseIcons;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError, timeout } from 'rxjs/operators';\r\n\r\nexport interface InquiryRequest {\r\n inquiry: string;\r\n additionalInputs?: string[];\r\n}\r\n\r\nexport interface SupportBotRequest {\r\n query?: string;\r\n conversationId?: string;\r\n userId?: string;\r\n userName?: string;\r\n appSource?: string;\r\n}\r\n\r\nexport interface SupportBotChatHistoryItem {\r\n query?: string;\r\n response?: SupportBotResponse;\r\n}\r\n\r\nexport interface SupportBotResponse {\r\n answer?: string;\r\n conversationId?: string;\r\n searchIntent?: string;\r\n contents?: ChatContent[];\r\n references?: KnowledgeBaseItem[];\r\n searchDocuments?: KnowledgeBaseItem[];\r\n}\r\n\r\nexport interface ChatContent {\r\n role?: string;\r\n content?: string;\r\n authorName?: string;\r\n}\r\n\r\nexport interface KnowledgeBaseItem {\r\n fileURL?: string;\r\n title?: string;\r\n content?: string;\r\n score: number;\r\n key?: string;\r\n}\r\n\r\nexport interface AgentResponse {\r\n success: boolean;\r\n result?: string;\r\n error?: string;\r\n}\r\n\r\nexport interface AiChatConfig {\r\n apiUrl?: string;\r\n appKey?: string;\r\n timeout?: number;\r\n retries?: number;\r\n enableConversationLifecycle?: boolean; // Enable new conversation lifecycle features\r\n}\r\n\r\n// ============= Conversation Lifecycle DTOs =============\r\n\r\nexport interface ConversationDto {\r\n conversationId: string;\r\n userId: string;\r\n userName?: string;\r\n status: string; // 'Active', 'Completed', 'Abandoned', 'Archived'\r\n source?: string; // 'Web', 'Mobile', etc.\r\n startedDate: Date;\r\n lastActivityDate: Date;\r\n endedDate?: Date;\r\n messageCount: number;\r\n userMessageCount: number;\r\n aiMessageCount: number;\r\n totalTokensUsed?: number;\r\n isActive: boolean;\r\n minutesUntilTimeout: number;\r\n context?: Record<string, any>;\r\n}\r\n\r\nexport interface CreateConversationRequest {\r\n userId: string;\r\n userName: string;\r\n source?: string; // Default: 'Web'\r\n context?: Record<string, any>; // Optional metadata (loanId, etc.)\r\n}\r\n\r\nexport interface CloseConversationRequest {\r\n reason?: string; // 'UserCompleted', 'UserCancelled', 'SystemTimeout', etc.\r\n satisfactionRating?: number; // 1-5 stars\r\n userFeedback?: string; // Optional feedback text\r\n}\r\n\r\nexport interface ConversationRecoveryResponse {\r\n hasActiveConversations: boolean;\r\n activeConversations: ConversationDto[];\r\n suggestedConversation?: {\r\n conversationId: string;\r\n description: string;\r\n };\r\n}\r\n\r\nexport interface ConversationHistoryResponse {\r\n conversations: ConversationDto[];\r\n skip: number;\r\n take: number;\r\n hasMore: boolean;\r\n}\r\n\r\n// ============= Message Retrieval DTOs =============\r\n\r\nexport interface ConversationMessageDto {\r\n messageId: string;\r\n conversationId: string;\r\n role: 'User' | 'Assistant' | 'System';\r\n content: string;\r\n timestamp: string; // ISO 8601 format\r\n tokenCount?: number;\r\n}\r\n\r\nexport interface ActiveConversationMessagesResponse {\r\n userId: string;\r\n hasActiveConversation: boolean;\r\n conversation: ConversationDto | null;\r\n messages: ConversationMessageDto[];\r\n}\r\n\r\nexport interface ConversationWithMessagesDto {\r\n conversation: ConversationDto;\r\n messages: ConversationMessageDto[];\r\n messageCount: number;\r\n}\r\n\r\nexport interface UserConversationMessagesResponse {\r\n userId: string;\r\n source?: string;\r\n includeCompleted: boolean;\r\n totalConversations: number;\r\n conversations: ConversationWithMessagesDto[];\r\n skip: number;\r\n take: number;\r\n hasMore: boolean;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AiAgentService {\r\n private readonly defaultConfig: AiChatConfig = {\r\n apiUrl: 'https://localhost:7237/api',\r\n timeout: 30000,\r\n retries: 3,\r\n enableConversationLifecycle: true // Enable by default\r\n };\r\n\r\n private config: AiChatConfig = { ...this.defaultConfig };\r\n\r\n constructor(private http: HttpClient) {}\r\n\r\n configure(config: Partial<AiChatConfig>): void {\r\n this.config = { ...this.defaultConfig, ...config };\r\n }\r\n\r\n /**\r\n * Get base URL for API endpoints\r\n * Returns the configured base URL (default: https://localhost:7237/api)\r\n */\r\n private getBaseUrl(): string {\r\n return this.config.apiUrl || 'https://localhost:7237/api';\r\n }\r\n\r\n /**\r\n * Get common HTTP headers with optional API key\r\n */\r\n private getHeaders(): HttpHeaders {\r\n return new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n ...(this.config.appKey && { 'x-api-key': this.config.appKey })\r\n });\r\n }\r\n\r\n testConfiguration(): Observable<AgentResponse> {\r\n // For development purposes, simulate a successful connection\r\n // when the backend is not available\r\n const url = `${this.getBaseUrl()}/AIAgent/TestConfiguration`;\r\n console.log('Testing configuration at:', url);\r\n \r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n ...(this.config.appKey && { 'x-api-key': this.config.appKey })\r\n });\r\n\r\n return this.http.get<AgentResponse>(url, { headers })\r\n .pipe(\r\n timeout(this.config.timeout || 30000),\r\n catchError((error) => {\r\n console.log('Backend API not available, running in demo mode:', error);\r\n \r\n // Return a mock successful response for demo purposes\r\n return throwError({\r\n success: false,\r\n error: 'Backend API not available (Demo Mode)'\r\n } as AgentResponse);\r\n })\r\n );\r\n }\r\n\r\n processInquiry(request: SupportBotRequest): Observable<SupportBotResponse> {\r\n const url = `${this.getBaseUrl()}/AIAgent/ProcessInquiry`;\r\n const headers = new HttpHeaders({\r\n 'Content-Type': 'application/json',\r\n ...(this.config.appKey && { 'x-api-key': this.config.appKey })\r\n });\r\n\r\n return this.http.post<SupportBotResponse>(url, request, { headers })\r\n .pipe(\r\n timeout(this.config.timeout || 30000),\r\n catchError((error) => {\r\n console.log('ProcessInquiry API not available, returning demo response:', error);\r\n \r\n // Return a mock response for demo purposes\r\n const mockResponse: SupportBotResponse = {\r\n answer: `Demo Mode: I received your query \"${request.query}\". The backend API is currently not available, but the UI is working correctly!`,\r\n contents: [{\r\n content: `Demo Mode: I received your query \"${request.query}\". The backend API is currently not available, but the UI is working correctly!`,\r\n role: 'assistant',\r\n authorName: 'Maestro (Demo)'\r\n }]\r\n };\r\n \r\n // Return the mock response as an Observable\r\n return new Observable<SupportBotResponse>(observer => {\r\n setTimeout(() => {\r\n observer.next(mockResponse);\r\n observer.complete();\r\n }, 1000); // Simulate network delay\r\n });\r\n })\r\n );\r\n }\r\n\r\n private handleError(error: HttpErrorResponse): Observable<AgentResponse> {\r\n let errorMessage = 'An error occurred while processing your request.';\r\n \r\n if (error.error instanceof ErrorEvent) {\r\n // Client-side error\r\n errorMessage = `Client Error: ${error.error.message}`;\r\n } else {\r\n // Server-side error\r\n errorMessage = `Server Error: ${error.status} - ${error.message}`;\r\n if (error.error && error.error.message) {\r\n errorMessage += ` - ${error.error.message}`;\r\n }\r\n }\r\n\r\n console.error('AiAgentService Error:', error);\r\n \r\n return throwError({\r\n success: false,\r\n error: errorMessage\r\n } as AgentResponse);\r\n }\r\n\r\n // ============= Conversation Lifecycle API Methods =============\r\n\r\n /**\r\n * 1. Create a new conversation or reuse existing empty one\r\n * Smart behavior (forceNew=false): Reuses existing empty conversation if available\r\n * Explicit behavior (forceNew=true): Always creates a new conversation\r\n * Should be called before sending the first message\r\n * @param request - Conversation creation request\r\n * @param forceNew - If true, always creates new conversation (default: false)\r\n * @returns Observable of ConversationDto with conversationId\r\n */\r\n createConversation(request: CreateConversationRequest, forceNew: boolean = false): Observable<ConversationDto> {\r\n if (!this.config.enableConversationLifecycle) {\r\n console.warn('Conversation lifecycle is disabled. Enable it in config.');\r\n return throwError({ error: 'Conversation lifecycle is disabled' });\r\n }\r\n\r\n const url = `${this.getBaseUrl()}/conversations?forceNew=${forceNew}`;\r\n console.log('Creating/reusing conversation at:', url, '(forceNew:', forceNew, ')');\r\n\r\n return this.http.post<ConversationDto>(url, request, { headers: this.getHeaders() })\r\n .pipe(\r\n timeout(this.config.timeout || 30000),\r\n catchError((error) => {\r\n console.log('CreateConversation API not available, returning mock response:', error);\r\n \r\n // Demo mode: Return mock conversation\r\n const mockConversation: ConversationDto = {\r\n conversationId: this.generateGuid(),\r\n userId: request.userId,\r\n userName: request.userName,\r\n status: 'Active',\r\n source: request.source || 'Web',\r\n startedDate: new Date(),\r\n lastActivityDate: new Date(),\r\n messageCount: 0,\r\n userMessageCount: 0,\r\n aiMessageCount: 0,\r\n isActive: true,\r\n minutesUntilTimeout: 1440, // 24 hours\r\n context: request.context\r\n };\r\n \r\n return new Observable<ConversationDto>(observer => {\r\n setTimeout(() => {\r\n observer.next(mockConversation);\r\n observer.complete();\r\n }, 500);\r\n });\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * 2. Get conversation details by ID\r\n * @param conversationId - The conversation ID to retrieve\r\n */\r\n getConversation(conversationId: string): Observable<ConversationDto> {\r\n if (!this.config.enableConversationLifecycle) {\r\n return throwError({ error: 'Conversation lifecycle is disabled' });\r\n }\r\n\r\n const url = `${this.getBaseUrl()}/conversations/${conversationId}`;\r\n console.log('Getting conversation at:', url);\r\n\r\n return this.http.get<ConversationDto>(url, { headers: this.getHeaders() })\r\n .pipe(\r\n timeout(this.config.timeout || 30000),\r\n catchError((error) => {\r\n if (error.status === 404) {\r\n console.error('Conversation not found:', conversationId);\r\n return throwError({ error: 'Conversation not found', status: 404 });\r\n }\r\n \r\n console.log('GetConversation API not available:', error);\r\n return throwError({ error: 'API not available (Demo Mode)', status: 503 });\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * 3. Close a conversation (idempotent)\r\n * @param conversationId - The conversation ID to close\r\n * @param request - Optional close details (reason, rating, feedback)\r\n */\r\n closeConversation(\r\n conversationId: string, \r\n request?: CloseConversationRequest\r\n ): Observable<ConversationDto> {\r\n if (!this.config.enableConversationLifecycle) {\r\n return throwError({ error: 'Conversation lifecycle is disabled' });\r\n }\r\n\r\n const url = `${this.getBaseUrl()}/conversations/${conversationId}/close`;\r\n console.log('Closing conversation at:', url);\r\n\r\n return this.http.post<ConversationDto>(url, request || {}, { headers: this.getHeaders() })\r\n .pipe(\r\n timeout(this.config.timeout || 30000),\r\n catchError((error) => {\r\n console.log('CloseConversation API not available:', error);\r\n \r\n // Demo mode: Return mock closed conversation\r\n const mockClosed: ConversationDto = {\r\n conversationId: conversationId,\r\n userId: '',\r\n status: 'Completed',\r\n startedDate: new Date(),\r\n lastActivityDate: new Date(),\r\n endedDate: new Date(),\r\n messageCount: 0,\r\n userMessageCount: 0,\r\n aiMessageCount: 0,\r\n isActive: false,\r\n minutesUntilTimeout: 0\r\n };\r\n \r\n return new Observable<ConversationDto>(observer => {\r\n setTimeout(() => {\r\n observer.next(mockClosed);\r\n observer.complete();\r\n }, 500);\r\n });\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * 4. Abandon a conversation (e.g., browser close without explicit close)\r\n * @param conversationId - The conversation ID to abandon\r\n */\r\n abandonConversation(conversationId: string): Observable<void> {\r\n if (!this.config.enableConversationLifecycle) {\r\n return throwError({ error: 'Conversation lifecycle is disabled' });\r\n }\r\n\r\n const url = `${this.getBaseUrl()}/conversations/${conversationId}/abandon`;\r\n console.log('Abandoning conversation at:', url);\r\n\r\n return this.http.post<void>(url, {}, { headers: this.getHeaders() })\r\n .pipe(\r\n timeout(this.config.timeout || 30000),\r\n catchError((error) => {\r\n console.log('AbandonConversation API not available:', error);\r\n // Silently succeed in demo mode\r\n return new Observable<void>(observer => {\r\n observer.next();\r\n observer.complete();\r\n });\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * 5. Recover active conversations after page refresh\r\n * @param userId - User ID to recover conversations for\r\n */\r\n recoverConversations(userId: string): Observable<ConversationRecoveryResponse> {\r\n if (!this.config.enableConversationLifecycle) {\r\n return throwError({ error: 'Conversation lifecycle is disabled' });\r\n }\r\n\r\n const url = `${this.getBaseUrl()}/conversations/recover?userId=${encodeURIComponent(userId)}`;\r\n console.log('Recovering conversations at:', url);\r\n\r\n return this.http.get<ConversationRecoveryResponse>(url, { headers: this.getHeaders() })\r\n .pipe(\r\n timeout(this.config.timeout || 30000),\r\n catchError((error) => {\r\n console.log('RecoverConversations API not available:', error);\r\n \r\n // Demo mode: Return no active conversations\r\n const mockRecovery: ConversationRecoveryResponse = {\r\n hasActiveConversations: false,\r\n activeConversations: []\r\n };\r\n \r\n return new Observable<ConversationRecoveryResponse>(observer => {\r\n setTimeout(() => {\r\n observer.next(mockRecovery);\r\n observer.complete();\r\n }, 500);\r\n });\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * 6. Resume a specific conversation with validation\r\n * @param conversationId - The conversation ID to resume\r\n * @param userId - User ID for ownership validation\r\n */\r\n resumeConversation(conversationId: string, userId: string): Observable<ConversationDto> {\r\n if (!this.config.enableConversationLifecycle) {\r\n return throwError({ error: 'Conversation lifecycle is disabled' });\r\n }\r\n\r\n const url = `${this.getBaseUrl()}/conversations/${conversationId}/resume?userId=${encodeURIComponent(userId)}`;\r\n console.log('Resuming conversation at:', url);\r\n\r\n return this.http.post<ConversationDto>(url, {}, { headers: this.getHeaders() })\r\n .pipe(\r\n timeout(this.config.timeout || 30000),\r\n catchError((error) => {\r\n // Pass through specific error codes\r\n if (error.status === 410) {\r\n console.error('Conversation expired (>24 hours):', conversationId);\r\n return throwError({ error: 'Conversation expired', status: 410 });\r\n }\r\n if (error.status === 403) {\r\n console.error('User does not own conversation:', conversationId);\r\n return throwError({ error: 'Unauthorized', status: 403 });\r\n }\r\n if (error.status === 404) {\r\n console.error('Conversation not found:', conversationId);\r\n return throwError({ error: 'Conversation not found', status: 404 });\r\n }\r\n \r\n console.log('ResumeConversation API not available:', error);\r\n return throwError({ error: 'API not available (Demo Mode)', status: 503 });\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * 7. Get conversation history with pagination\r\n * @param userId - User ID to get history for\r\n * @param skip - Number of records to skip (default: 0)\r\n * @param take - Number of records to return (default: 20, max: 100)\r\n */\r\n getConversationHistory(\r\n userId: string, \r\n skip: number = 0, \r\n take: number = 20\r\n ): Observable<ConversationHistoryResponse> {\r\n if (!this.config.enableConversationLifecycle) {\r\n return throwError({ error: 'Conversation lifecycle is disabled' });\r\n }\r\n\r\n const url = `${this.getBaseUrl()}/conversations/history?userId=${encodeURIComponent(userId)}&skip=${skip}&take=${take}`;\r\n console.log('Getting conversation history at:', url);\r\n\r\n return this.http.get<ConversationHistoryResponse>(url, { headers: this.getHeaders() })\r\n .pipe(\r\n timeout(this.config.timeout || 30000),\r\n catchError((error) => {\r\n console.log('GetConversationHistory API not available:', error);\r\n // Return empty history in demo mode\r\n const mockHistory: ConversationHistoryResponse = {\r\n conversations: [],\r\n skip,\r\n take,\r\n hasMore: false\r\n };\r\n return throwError({ error: 'API not available (Demo Mode)', status: 503 });\r\n })\r\n );\r\n }\r\n\r\n // ============= Message Retrieval Methods =============\r\n\r\n /**\r\n * 8. Get messages for a specific conversation\r\n * @param conversationId - The conversation ID\r\n */\r\n getConversationMessages(conversationId: string): Observable<ConversationMessageDto[]> {\r\n if (!this.config.enableConversationLifecycle) {\r\n return throwError({ error: 'Conversation lifecycle is disabled' });\r\n }\r\n\r\n const url = `${this.getBaseUrl()}/conversations/${conversationId}/messages`;\r\n console.log('Getting conversation messages at:', url);\r\n\r\n return this.http.get<ConversationMessageDto[]>(url, { headers: this.getHeaders() })\r\n .pipe(\r\n timeout(this.config.timeout || 30000),\r\n catchError((error) => {\r\n if (error.status === 404) {\r\n console.error('Conversation not found:', conversationId);\r\n return throwError({ error: 'Conversation not found', status: 404 });\r\n }\r\n if (error.status === 503) {\r\n console.error('Message retrieval unavailable (in-memory mode):', conversationId);\r\n return throwError({ error: 'Service unavailable - SQL Server required', status: 503 });\r\n }\r\n \r\n console.log('GetConversationMessages API not available:', error);\r\n return throwError({ error: 'API not available (Demo Mode)', status: 503 });\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * 9. Get active conversation messages for a user\r\n * Automatically finds and returns the user's active conversation with messages\r\n * @param userId - User ID\r\n */\r\n getActiveConversationMessages(userId: string): Observable<ActiveConversationMessagesResponse> {\r\n if (!this.config.enableConversationLifecycle) {\r\n return throwError({ error: 'Conversation lifecycle is disabled' });\r\n }\r\n\r\n const url = `${this.getBaseUrl()}/conversations/active/messages?userId=${encodeURIComponent(userId)}`;\r\n console.log('Getting active conversation messages at:', url);\r\n\r\n return this.http.get<ActiveConversationMessagesResponse>(url, { headers: this.getHeaders() })\r\n .pipe(\r\n timeout(this.config.timeout || 30000),\r\n catchError((error) => {\r\n if (error.status === 400) {\r\n console.error('Invalid userId parameter');\r\n return throwError({ error: 'Invalid userId', status: 400 });\r\n }\r\n if (error.status === 503) {\r\n console.error('Message retrieval unavailable (in-memory mode)');\r\n return throwError({ error: 'Service unavailable - SQL Server required', status: 503 });\r\n }\r\n \r\n console.log('GetActiveConversationMessages API not available:', error);\r\n // Return empty response in demo mode\r\n const emptyResponse: ActiveConversationMessagesResponse = {\r\n userId,\r\n hasActiveConversation: false,\r\n conversation: null,\r\n messages: []\r\n };\r\n return throwError({ error: 'API not available (Demo Mode)', status: 503 });\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * 10. Get user messages with filtering\r\n * Retrieve messages for multiple conversations with optional filtering\r\n * @param userId - User ID\r\n * @param options - Query options (source, includeCompleted, skip, take)\r\n */\r\n getUserMessages(\r\n userId: string,\r\n options?: {\r\n source?: 'Emanate' | 'Mosaic';\r\n includeCompleted?: boolean;\r\n skip?: number;\r\n take?: number;\r\n }\r\n ): Observable<UserConversationMessagesResponse> {\r\n if (!this.config.enableConversationLifecycle) {\r\n return throwError({ error: 'Conversation lifecycle is disabled' });\r\n }\r\n\r\n const params = new URLSearchParams({\r\n userId: userId,\r\n ...(options?.source && { source: options.source }),\r\n ...(options?.includeCompleted !== undefined && { includeCompleted: String(options.includeCompleted) }),\r\n ...(options?.skip !== undefined && { skip: String(options.skip) }),\r\n ...(options?.take !== undefined && { take: String(options.take) })\r\n });\r\n\r\n const url = `${this.getBaseUrl()}/conversations/messages?${params.toString()}`;\r\n console.log('Getting user messages at:', url);\r\n\r\n return this.http.get<UserConversationMessagesResponse>(url, { headers: this.getHeaders() })\r\n .pipe(\r\n timeout(this.config.timeout || 30000),\r\n catchError((error) => {\r\n if (error.status === 400) {\r\n console.error('Invalid request parameters');\r\n return throwError({ error: 'Invalid parameters', status: 400 });\r\n }\r\n if (error.status === 503) {\r\n console.error('Message retrieval unavailable (in-memory mode)');\r\n return throwError({ error: 'Service unavailable - SQL Server required', status: 503 });\r\n }\r\n \r\n console.log('GetUserMessages API not available:', error);\r\n // Return empty response in demo mode\r\n const emptyResponse: UserConversationMessagesResponse = {\r\n userId,\r\n source: options?.source,\r\n includeCompleted: options?.includeCompleted || false,\r\n totalConversations: 0,\r\n conversations: [],\r\n skip: options?.skip || 0,\r\n take: options?.take || 20,\r\n hasMore: false\r\n };\r\n return throwError({ error: 'API not available (Demo Mode)', status: 503 });\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Generate a GUID for mock conversation IDs\r\n */\r\n private generateGuid(): string {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n const r = Math.random() * 16 | 0;\r\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable, of, throwError } from 'rxjs';\r\nimport { map, catchError, tap, switchMap } from 'rxjs/operators';\r\nimport { AiAgentService, ConversationDto, CreateConversationRequest, ConversationMessageDto, ActiveConversationMessagesResponse } from './ai-agent.service';\r\n\r\nexport type StorageType = 'session' | 'local' | 'none';\r\n\r\nexport interface ConversationState {\r\n conversationId: string | null;\r\n userId: string | null;\r\n userName: string | null;\r\n status: string | null;\r\n startedDate: Date | null;\r\n lastActivityDate: Date | null;\r\n isActive: boolean;\r\n}\r\n\r\nexport interface ConversationStateConfig {\r\n storageType: StorageType; // 'session', 'local', or 'none'\r\n storageKey: string;\r\n enableAutoRecovery: boolean; // Automatically recover on service init\r\n enablePageUnloadHandler: boolean; // Automatically abandon on page unload\r\n appSource: string; // Application source identifier\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ConversationStateService {\r\n private readonly defaultConfig: ConversationStateConfig = {\r\n storageType: 'session',\r\n storageKey: 'maestro-conversation-state',\r\n enableAutoRecovery: true,\r\n enablePageUnloadHandler: true,\r\n appSource: 'Emanate'\r\n };\r\n\r\n private config: ConversationStateConfig = { ...this.defaultConfig };\r\n \r\n // State observables\r\n private conversationStateSubject = new BehaviorSubject<ConversationState>(this.getEmptyState());\r\n public conversationState$ = this.conversationStateSubject.asObservable();\r\n\r\n // Track if page unload handler is registered\r\n private pageUnloadHandlerRegistered = false;\r\n\r\n constructor(private aiAgentService: AiAgentService) {\r\n // Auto-initialize if configured\r\n if (this.config.enableAutoRecovery) {\r\n this.initializeFromStorage();\r\n }\r\n }\r\n\r\n /**\r\n * Configure the conversation state service\r\n */\r\n configure(config: Partial<ConversationStateConfig>): void {\r\n this.config = { ...this.defaultConfig, ...config };\r\n \r\n // Re-initialize from storage with new config\r\n if (this.config.enableAutoRecovery) {\r\n this.initializeFromStorage();\r\n }\r\n \r\n // Setup page unload handler if enabled\r\n if (this.config.enablePageUnloadHandler && !this.pageUnloadHandlerRegistered) {\r\n this.setupPageUnloadHandler();\r\n }\r\n }\r\n\r\n /**\r\n * Get the current conversation state\r\n */\r\n getCurrentState(): ConversationState {\r\n return this.conversationStateSubject.value;\r\n }\r\n\r\n /**\r\n * Get the active conversation ID (if any)\r\n */\r\n getActiveConversationId(): string | null {\r\n return this.conversationStateSubject.value.conversationId;\r\n }\r\n\r\n /**\r\n * Initialize state from storage\r\n */\r\n private initializeFromStorage(): void {\r\n const stored = this.getFromStorage();\r\n if (stored) {\r\n console.log('Initialized conversation state from storage:', stored.conversationId);\r\n this.conversationStateSubject.next(stored);\r\n }\r\n }\r\n\r\n /**\r\n * Start a new conversation (with smart reuse by default)\r\n * By default (forceNew=false): Reuses existing empty conversation if available\r\n * With forceNew=true: Always creates a new conversation\r\n * Creates conversation on backend and stores state\r\n * @param userId - User ID\r\n * @param userName - User name\r\n * @param context - Optional conversation context\r\n * @param forceNew - If true, always creates new conversation (default: false)\r\n */\r\n startNewConversation(\r\n userId: string, \r\n userName: string, \r\n context?: Record<string, any>,\r\n forceNew: boolean = false\r\n ): Observable<string> {\r\n const request: CreateConversationRequest = {\r\n userId,\r\n userName,\r\n source: this.config.appSource,\r\n context\r\n };\r\n\r\n return this.aiAgentService.createConversation(request, forceNew).pipe(\r\n tap((conversation: ConversationDto) => {\r\n const state: ConversationState = {\r\n conversationId: conversation.conversationId,\r\n userId: conversation.userId,\r\n userName: conversation.userName || null,\r\n status: conversation.status,\r\n startedDate: conversation.startedDate,\r\n lastActivityDate: conversation.lastActivityDate,\r\n isActive: conversation.isActive\r\n };\r\n \r\n this.setActiveConversation(state);\r\n console.log('New conversation started:', conversation.conversationId);\r\n }),\r\n map((conversation: ConversationDto) => conversation.conversationId),\r\n catchError((error) => {\r\n console.error('Failed to start conversation:', error);\r\n return throwError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Recover conversation state after page refresh\r\n * Attempts to resume the most recent active conversation\r\n */\r\n recoverState(userId: string): Observable<string | null> {\r\n // First, check local storage for existing conversationId\r\n const storedState = this.getFromStorage();\r\n \r\n if (storedState && storedState.conversationId && storedState.userId === userId) {\r\n // Try to resume the stored conversation\r\n console.log('Attempting to resume stored conversation:', storedState.conversationId);\r\n \r\n return this.aiAgentService.resumeConversation(storedState.conversationId, userId).pipe(\r\n tap((conversation: ConversationDto) => {\r\n const state: ConversationState = {\r\n conversationId: conversation.conversationId,\r\n userId: conversation.userId,\r\n userName: conversation.userName || null,\r\n status: conversation.status,\r\n startedDate: conversation.startedDate,\r\n lastActivityDate: conversation.lastActivityDate,\r\n isActive: conversation.isActive\r\n };\r\n \r\n this.setActiveConversation(state);\r\n console.log('Successfully resumed conversation:', conversation.conversationId);\r\n }),\r\n map((conversation: ConversationDto) => conversation.conversationId),\r\n catchError((error) => {\r\n console.error('Failed to resume stored conversation:', error);\r\n \r\n // If stored conversation is expired/invalid, clear it and try recovery\r\n this.clearActiveConversation();\r\n return this.recoverFromBackend(userId);\r\n })\r\n );\r\n }\r\n \r\n // No stored conversation, try backend recovery\r\n return this.recoverFromBackend(userId);\r\n }\r\n\r\n /**\r\n * Recover from backend using the recovery endpoint\r\n */\r\n private recoverFromBackend(userId: string): Observable<string | null> {\r\n return this.aiAgentService.recoverConversations(userId).pipe(\r\n map((recovery) => {\r\n if (recovery.hasActiveConversations && recovery.activeConversations.length > 0) {\r\n // Use suggested conversation or first active conversation\r\n const conversation = recovery.suggestedConversation \r\n ? recovery.activeConversations.find(c => c.conversationId === recovery.suggestedConversation?.conversationId)\r\n : recovery.activeConversations[0];\r\n \r\n if (conversation) {\r\n const state: ConversationState = {\r\n conversationId: conversation.conversationId,\r\n userId: conversation.userId,\r\n userName: conversation.userName || null,\r\n status: conversation.status,\r\n startedDate: conversation.startedDate,\r\n lastActivityDate: conversation.lastActivityDate,\r\n isActive: conversation.isActive\r\n };\r\n \r\n this.setActiveConversation(state);\r\n console.log('Recovered conversation from backend:', conversation.conversationId);\r\n return conversation.conversationId;\r\n }\r\n }\r\n \r\n console.log('No active conversations found for recovery');\r\n return null;\r\n }),\r\n catchError((error) => {\r\n console.error('Failed to recover conversations from backend:', error);\r\n return of(null);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Explicitly start a new conversation session\r\n * Always creates a new conversation (forceNew=true)\r\n * Use this when user clicks \"New Conversation\" button\r\n * @param userId - User ID\r\n * @param userName - User name\r\n * @param context - Optional conversation context\r\n */\r\n startNewConversationExplicit(\r\n userId: string, \r\n userName: string, \r\n context?: Record<string, any>\r\n ): Observable<string> {\r\n console.log('User explicitly requested new conversation');\r\n return this.startNewConversation(userId, userName, context, true);\r\n }\r\n\r\n /**\r\n * Check if current conversation is empty (no messages, no context)\r\n * An empty conversation can be safely reused\r\n */\r\n isCurrentConversationEmpty(): boolean {\r\n const currentState = this.getCurrentState();\r\n // Consider conversation empty if it has no conversationId or is not active\r\n // Note: We can't check message count from state service alone\r\n // This should be checked by the component level\r\n return !currentState.conversationId || !currentState.isActive;\r\n }\r\n\r\n /**\r\n * Close the current conversation\r\n */\r\n closeCurrentConversation(\r\n reason?: string, \r\n satisfactionRating?: number, \r\n userFeedback?: string\r\n ): Observable<void> {\r\n const currentState = this.getCurrentState();\r\n \r\n if (!currentState.conversationId) {\r\n console.warn('No active conversation to close');\r\n return of(void 0);\r\n }\r\n\r\n return this.aiAgentService.closeConversation(\r\n currentState.conversationId, \r\n { reason, satisfactionRating, userFeedback }\r\n ).pipe(\r\n tap(() => {\r\n console.log('Conversation closed:', currentState.conversationId);\r\n this.clearActiveConversation();\r\n }),\r\n map(() => void 0),\r\n catchError((error) => {\r\n console.error('Failed to close conversation:', error);\r\n // Still clear local state even if backend call fails\r\n this.clearActiveConversation();\r\n return throwError(error);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Abandon the current conversation (e.g., on page unload)\r\n */\r\n abandonCurrentConversation(): void {\r\n const currentState = this.getCurrentState();\r\n \r\n if (!currentState.conversationId) {\r\n return;\r\n }\r\n\r\n console.log('Abandoning conversation:', currentState.conversationId);\r\n \r\n // Use sendBeacon for reliable fire-and-forget on page unload\r\n const baseUrl = this.aiAgentService['getBaseUrl']();\r\n const url = `${baseUrl}/conversations/${currentState.conversationId}/abandon`;\r\n \r\n try {\r\n // Use sendBeacon if available (more reliable during page unload)\r\n if (navigator.sendBeacon) {\r\n const blob = new Blob([JSON.stringify({})], { type: 'application/json' });\r\n navigator.sendBeacon(url, blob);\r\n } else {\r\n // Fallback: synchronous XHR (not recommended but necessary for older browsers)\r\n const xhr = new XMLHttpRequest();\r\n xhr.open('POST', url, false); // Synchronous\r\n xhr.setRequestHeader('Content-Type', 'application/json');\r\n xhr.send(JSON.stringify({}));\r\n }\r\n } catch (error) {\r\n console.error('Failed to abandon conversation:', error);\r\n } finally {\r\n this.clearActiveConversation();\r\n }\r\n }\r\n\r\n /**\r\n * Set active conversation state and persist to storage\r\n */\r\n private setActiveConversation(state: ConversationState): void {\r\n this.conversationStateSubject.next(state);\r\n this.saveToStorage(state);\r\n }\r\n\r\n /**\r\n * Clear active conversation state\r\n */\r\n clearActiveConversation(): void {\r\n console.log('Clearing active conversation state');\r\n this.conversationStateSubject.next(this.getEmptyState());\r\n this.removeFromStorage();\r\n }\r\n\r\n /**\r\n * Update last activity timestamp\r\n */\r\n updateLastActivity(): void {\r\n const currentState = this.getCurrentState();\r\n if (currentState.conversationId) {\r\n const updatedState: ConversationState = {\r\n ...currentState,\r\n lastActivityDate: new Date()\r\n };\r\n this.setActiveConversation(updatedState);\r\n }\r\n }\r\n\r\n /**\r\n * Setup page unload handler to abandon conversation\r\n */\r\n private setupPageUnloadHandler(): void {\r\n if (this.pageUnloadHandlerRegistered) {\r\n return;\r\n }\r\n\r\n window.addEventListener('beforeunload', () => {\r\n this.abandonCurrentConversation();\r\n });\r\n\r\n this.pageUnloadHandlerRegistered = true;\r\n console.log('Page unload handler registered for conversation abandonment');\r\n }\r\n\r\n /**\r\n * Storage operations\r\n */\r\n private getStorage(): Storage | null {\r\n switch (this.config.storageType) {\r\n case 'session':\r\n return sessionStorage;\r\n case 'local':\r\n return localStorage;\r\n case 'none':\r\n return null;\r\n default:\r\n return sessionStorage;\r\n }\r\n }\r\n\r\n private saveToStorage(state: ConversationState): void {\r\n const storage = this.getStorage();\r\n if (storage && state.conversationId) {\r\n try {\r\n storage.setItem(this.config.storageKey, JSON.stringify(state));\r\n } catch (error) {\r\n console.error('Failed to save conversation state to storage:', error);\r\n }\r\n }\r\n }\r\n\r\n private getFromStorage(): ConversationState | null {\r\n const storage = this.getStorage();\r\n if (!storage) {\r\n return null;\r\n }\r\n\r\n try {\r\n const stored = storage.getItem(this.config.storageKey);\r\n if (stored) {\r\n const state = JSON.parse(stored) as ConversationState;\r\n // Parse date strings back to Date objects\r\n if (state.startedDate) {\r\n state.startedDate = new Date(state.startedDate);\r\n }\r\n if (state.lastActivityDate) {\r\n state.lastActivityDate = new Date(state.lastActivityDate);\r\n }\r\n return state;\r\n }\r\n } catch (error) {\r\n console.error('Failed to retrieve conversation state from storage:', error);\r\n }\r\n \r\n return null;\r\n }\r\n\r\n private removeFromStorage(): void {\r\n const storage = this.getStorage();\r\n if (storage) {\r\n try {\r\n storage.removeItem(this.config.storageKey);\r\n } catch (error) {\r\n console.error('Failed to remove conversation state from storage:', error);\r\n }\r\n }\r\n }\r\n\r\n private getEmptyState(): ConversationState {\r\n return {\r\n conversationId: null,\r\n userId: null,\r\n userName: null,\r\n status: null,\r\n startedDate: null,\r\n lastActivityDate: null,\r\n isActive: false\r\n };\r\n }\r\n\r\n // ============= Message Loading Methods =============\r\n\r\n /**\r\n * Load messages for a specific conversation\r\n * @param conversationId - The conversation ID to load messages for\r\n * @returns Observable<ConversationMessageDto[]> - Array of messages\r\n */\r\n loadConversationMessages(conversationId: string): Observable<ConversationMessageDto[]> {\r\n console.log('Loading messages for conversation:', conversationId);\r\n return this.aiAgentService.getConversationMessages(conversationId).pipe(\r\n tap((messages) => {\r\n console.log(`Loaded ${messages.length} messages for conversation ${conversationId}`);\r\n }),\r\n catchError((error) => {\r\n console.error('Failed to load conversation messages:', error);\r\n // Return empty array on error (graceful degradation)\r\n return of([]);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Load messages for the active conversation\r\n * Uses the active conversation messages endpoint for efficiency\r\n * @param userId - User ID\r\n * @returns Observable with conversation and messages\r\n */\r\n loadActiveConversationWithMessages(userId: string): Observable<ActiveConversationMessagesResponse> {\r\n console.log('Loading active conversation with messages for user:', userId);\r\n return this.aiAgentService.getActiveConversationMessages(userId).pipe(\r\n tap((response) => {\r\n if (response.hasActiveConversation && response.conversation) {\r\n // Update state with the active conversation\r\n const state: ConversationState = {\r\n conversationId: response.conversation.conversationId,\r\n userId: response.conversation.userId,\r\n userName: response.conversation.userName || null,\r\n status: response.conversation.status,\r\n startedDate: response.conversation.startedDate,\r\n lastActivityDate: response.conversation.lastActivityDate,\r\n isActive: response.conversation.isActive\r\n };\r\n this.setActiveConversation(state);\r\n console.log(`Loaded active conversation with ${response.messages.length} messages`);\r\n } else {\r\n console.log('No active conversation found for user');\r\n }\r\n }),\r\n catchError((error) => {\r\n console.error('Failed to load active conversation messages:', error);\r\n // Return empty response on error\r\n const emptyResponse: ActiveConversationMessagesResponse = {\r\n userId,\r\n hasActiveConversation: false,\r\n conversation: null,\r\n messages: []\r\n };\r\n return of(emptyResponse);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Recover conversation with messages\r\n * Enhanced version of recoverState that also loads messages\r\n * @param userId - User ID\r\n * @returns Observable with conversationId and messages\r\n */\r\n recoverStateWithMessages(userId: string): Observable<{ conversationId: string | null, messages: ConversationMessageDto[] }> {\r\n console.log('Recovering conversation state with messages for user:', userId);\r\n \r\n // Use the active conversation messages endpoint (most efficient)\r\n return this.loadActiveConversationWithMessages(userId).pipe(\r\n map((response) => {\r\n if (response.hasActiveConversation && response.conversation) {\r\n return {\r\n conversationId: response.conversation.conversationId,\r\n messages: response.messages\r\n };\r\n } else {\r\n return {\r\n conversationId: null,\r\n messages: []\r\n };\r\n }\r\n }),\r\n catchError((error) => {\r\n console.error('Failed to recover conversation with messages:', error);\r\n // Fallback to regular recovery without messages\r\n return this.recoverState(userId).pipe(\r\n switchMap((conversationId) => {\r\n if (conversationId) {\r\n // Try to load messages for the recovered conversation\r\n return this.loadConversationMessages(conversationId).pipe(\r\n map((messages) => ({ conversationId, messages }))\r\n );\r\n } else {\r\n return of({ conversationId: null, messages: [] });\r\n }\r\n })\r\n );\r\n })\r\n );\r\n }\r\n}\r\n","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, OnChanges, SimpleChanges, HostListener } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { Subject, of, Observable } from 'rxjs';\r\nimport { takeUntil, switchMap, map, catchError, timeout, retry } from 'rxjs/operators';\r\nimport { AiAgentService, AgentResponse, SupportBotRequest, SupportBotResponse, ChatContent } from '../services/ai-agent.service';\r\nimport { ConversationStateService } from '../services/conversation-state.service';\r\nimport { IconSetType, ChatIconConfig, getIconSet } from '../models/icon-config.interface';\r\n\r\nexport interface ChatMessage {\r\n messageId?: string; // Unique message identifier\r\n conversationId?: string; // Conversation/session identifier\r\n isUser: boolean;\r\n content: string;\r\n sender?: string; // Sender name (maps to your 'sender' field)\r\n intent?: string;\r\n authorName?: string;\r\n confidenceScore?: number; // AI confidence score\r\n timestamp: Date;\r\n isLoading?: boolean;\r\n attachments?: FileAttachment[]; // File/Image attachments\r\n}\r\n\r\nexport interface FileAttachment {\r\n id: string;\r\n name: string;\r\n type: string;\r\n size: number;\r\n url?: string;\r\n data?: string | ArrayBuffer;\r\n}\r\n\r\nexport type ChatSize = 'compact' | 'default' | 'expanded' | 'fullscreen';\r\n\r\n@Component({\r\n selector: 'emanate-ai-chat',\r\n templateUrl: './ai-chat.component.html',\r\n styleUrls: ['./ai-chat.component.scss']\r\n})\r\nexport class AiChatComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() title: string = 'Chat with Maestro';\r\n @Input() placeholder: string = 'Type your inquiry here... (Press Enter to send, Shift+Enter for new line)';\r\n @Input() showDebugInfo: boolean = false;\r\n @Input() apiUrl?: string;\r\n @Input() appKey?: string;\r\n @Input() appSource?: string;\r\n @Input() userId?: string;\r\n @Input() firstName?: string;\r\n @Input() userName?: string;\r\n @Input() templateDesign?: string;\r\n @Input() welcomeMessage?: string;\r\n @Input() historicalMessages?: any[]; // Historical messages from parent\r\n @Input() conversationId?: string; // Current conversation ID\r\n @Input() enableImageUpload: boolean = false; // Enable/disable image upload button\r\n @Input() enableFileUpload: boolean = false; // Enable/disable file upload button\r\n @Input() iconSet: IconSetType = 'feather'; // Icon set selection\r\n @Input() customIcons?: Partial<ChatIconConfig>; // Custom icon overrides\r\n @Input() enableAnimations: boolean = true; // Enable/disable all animations\r\n @Input() animationSpeed: 'slow' | 'normal' | 'fast' = 'normal'; // Animation speed control\r\n @Input() enableStatusTransitions: boolean = true; // Enable/disable status indicator transitions\r\n @Input() enableConversationLifecycle: boolean = true; // Enable new conversation lifecycle features\r\n @Input() enableAutoConversationRecovery: boolean = true; // Auto-recover conversation on page load\r\n @Input() showCloseButton: boolean = false; // Show close conversation button in header (disabled by default)\r\n @Input() showNewConversationButton: boolean = true; // Show new conversation button in header\r\n @Input() confirmNewConversation: boolean = true; // Show confirmation dialog before starting new conversation\r\n @Input() newConversationConfirmMessage: string = 'Are you sure you want to start a new conversation? Your current chat will be saved in history.'; // Confirmation message for new conversation\r\n @Output() messageReceived = new EventEmitter<ChatMessage>();\r\n @Output() conversationStarted = new EventEmitter<string>(); // Emits conversationId when new conversation starts\r\n @Output() messageSent = new EventEmitter<ChatMessage>();\r\n @Output() fileUploaded = new EventEmitter<FileAttachment>();\r\n @Output() sizeChanged = new EventEmitter<{ size: ChatSize, width: number, height: number }>();\r\n\r\n messages: ChatMessage[] = [];\r\n currentInquiry = '';\r\n authorName = '';\r\n intent = '';\r\n isLoading = false;\r\n configurationStatus = '';\r\n previousStatus = ''; // Track previous status for transitions\r\n \r\n // Resizing properties\r\n currentSize: ChatSize = 'default';\r\n isFullscreen = false;\r\n isResizing = false;\r\n containerWidth = 800;\r\n containerHeight = 600;\r\n minWidth = 400;\r\n maxWidth = 1400;\r\n minHeight = 400;\r\n maxHeight = window.innerHeight - 100;\r\n startX = 0;\r\n startY = 0;\r\n startWidth = 0;\r\n startHeight = 0;\r\n \r\n // File upload properties\r\n maxFileSize = 10 * 1024 * 1024; // 10MB\r\n allowedImageTypes = ['image/png', 'image/jpeg', 'image/jpg', 'image/gif', 'image/webp'];\r\n allowedFileTypes = ['application/pdf', 'application/msword', \r\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\r\n 'text/plain', 'text/csv'];\r\n selectedFiles: FileAttachment[] = [];\r\n \r\n // Icon configuration\r\n icons: ChatIconConfig = getIconSet('feather');\r\n sanitizedIcons: { [key: string]: SafeHtml } = {};\r\n \r\n // Lazy initialization flag\r\n private conversationInitialized = false;\r\n \r\n // Confirmation modal state\r\n showConfirmationModal = false;\r\n \r\n private destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n private aiAgentService: AiAgentService,\r\n private conversationStateService: ConversationStateService,\r\n private sanitizer: DomSanitizer\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.updateStatus('Initializing...');\r\n console.log('AI Chat Component initialized');\r\n \r\n // Load icon set\r\n this.icons = getIconSet(this.iconSet, this.customIcons);\r\n this.sanitizeIcons();\r\n \r\n // Configure API URL and App Key if provided\r\n if (this.apiUrl || this.appKey) {\r\n this.aiAgentService.configure({ \r\n apiUrl: this.apiUrl,\r\n appKey: this.appKey,\r\n enableConversationLifecycle: this.enableConversationLifecycle\r\n });\r\n }\r\n \r\n // Configure conversation state service\r\n if (this.enableConversationLifecycle) {\r\n this.conversationStateService.configure({\r\n enableAutoRecovery: this.enableAutoConversationRecovery,\r\n enablePageUnloadHandler: true,\r\n appSource: this.appSource || 'Web'\r\n });\r\n \r\n // Subscribe to conversation state changes\r\n this.conversationStateService.conversationState$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(state => {\r\n if (state.conversationId && state.conversationId !== this.conversationId) {\r\n console.log('Conversation state updated:', state.conversationId);\r\n this.conversationId = state.conversationId;\r\n }\r\n });\r\n \r\n // Attempt to recover or start new conversation\r\n this.initializeConversation();\r\n } else {\r\n // Legacy mode: just test configuration\r\n try {\r\n // Load historical messages if provided\r\n if (this.historicalMessages && this.historicalMessages.length > 0) {\r\n this.loadHistoricalMessages(this.historicalMessages);\r\n } else {\r\n this.addWelcomeMessage();\r\n }\r\n \r\n this.testConfiguration();\r\n this.loadSavedSize();\r\n this.applySizePreset(this.currentSize);\r\n } catch (error) {\r\n console.error('Error during component initialization:', error);\r\n this.updateStatus('Initialization error');\r\n }\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // Detect when historicalMessages input changes\r\n if (changes['historicalMessages'] && !changes['historicalMessages'].firstChange) {\r\n const newMessages = changes['historicalMessages'].currentValue;\r\n // console.log('Historical messages changed:', newMessages);\r\n \r\n // Clear existing messages and reload\r\n this.messages = [];\r\n \r\n if (newMessages && newMessages.length > 0) {\r\n this.loadHistoricalMessages(newMessages);\r\n } else {\r\n this.addWelcomeMessage();\r\n }\r\n }\r\n \r\n // Detect when conversationId changes\r\n if (changes['conversationId'] && !changes['conversationId'].firstChange) {\r\n // console.log('Conversation ID changed:', changes['conversationId'].currentValue);\r\n // Update all existing messages with new conversationId if needed\r\n this.messages.forEach(msg => {\r\n if (msg.conversationId !== this.conversationId) {\r\n msg.conversationId = this.conversationId;\r\n }\r\n });\r\n }\r\n \r\n // Detect when icon set changes\r\n if (changes['iconSet'] || changes['customIcons']) {\r\n this.icons = getIconSet(this.iconSet, this.customIcons);\r\n this.sanitizeIcons();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n /**\r\n * Handle keyboard events (ESC key to close modal)\r\n */\r\n @HostListener('document:keydown.escape', ['$event'])\r\n handleEscapeKey(event: KeyboardEvent): void {\r\n if (this.showConfirmationModal) {\r\n event.preventDefault();\r\n this.cancelConfirmation();\r\n }\r\n }\r\n\r\n /**\r\n * Get animation duration in milliseconds based on speed setting\r\n */\r\n getAnimationDuration(): number {\r\n if (!this.enableAnimations) return 0;\r\n switch (this.animationSpeed) {\r\n case 'slow': return 500;\r\n case 'fast': return 150;\r\n default: return 250; // normal\r\n }\r\n }\r\n\r\n /**\r\n * Get animation CSS class based on settings\r\n */\r\n getAnimationClass(): string {\r\n if (!this.enableAnimations) return 'no-animations';\r\n return `animation-speed-${this.animationSpeed}`;\r\n }\r\n\r\n /**\r\n * Update status with transition tracking\r\n */\r\n private updateStatus(newStatus: string): void {\r\n if (this.enableStatusTransitions && this.configurationStatus !== newStatus) {\r\n this.previousStatus = this.configurationStatus;\r\n }\r\n this.configurationStatus = newStatus;\r\n }\r\n \r\n /**\r\n * Sanitize icon SVG strings for safe rendering in innerHTML bindings\r\n */\r\n private sanitizeIcons(): void {\r\n this.sanitizedIcons = {};\r\n Object.keys(this.icons).forEach(key => {\r\n const svgString = this.icons[key as keyof ChatIconConfig];\r\n if (svgString) {\r\n this.sanitizedIcons[key] = this.sanitizer.bypassSecurityTrustHtml(svgString);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Initialize conversation - with message loading from API\r\n * Attempts to load active conversation and its messages from backend\r\n * Falls back to welcome message if no active conversation found\r\n */\r\n private initializeConversation(): void {\r\n if (!this.userId) {\r\n console.warn('Cannot initialize conversation without userId');\r\n this.updateStatus('Ready');\r\n this.addWelcomeMessage();\r\n this.loadSavedSize();\r\n this.applySizePreset(this.currentSize);\r\n return;\r\n }\r\n\r\n this.updateStatus('Loading conversation...');\r\n\r\n // Try to load active conversation with messages from API\r\n this.conversationStateService.recoverStateWithMessages(this.userId)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (result) => {\r\n if (result.conversationId && result.messages.length > 0) {\r\n // Successfully loaded conversation with messages\r\n this.conversationId = result.conversationId;\r\n this.conversationInitialized = true;\r\n \r\n console.log(`Loaded conversation ${result.conversationId} with ${result.messages.length} messages`);\r\n \r\n // Convert API messages to chat messages\r\n this.loadMessagesFromApi(result.messages);\r\n \r\n this.updateStatus('Ready');\r\n } else if (result.conversationId) {\r\n // Found conversation but no messages\r\n this.conversationId = result.conversationId;\r\n this.conversationInitialized = true;\r\n \r\n console.log(`Loaded empty conversation ${result.conversationId}`);\r\n this.addWelcomeMessage();\r\n this.updateStatus('Ready');\r\n } else {\r\n // No active conversation found\r\n console.log('No active conversation found - will create on first message');\r\n \r\n // Load historical messages if provided by parent\r\n if (this.historicalMessages && this.historicalMessages.length > 0) {\r\n this.loadHistoricalMessages(this.historicalMessages);\r\n } else {\r\n this.addWelcomeMessage();\r\n }\r\n \r\n this.updateStatus('Ready');\r\n }\r\n \r\n this.loadSavedSize();\r\n this.applySizePreset(this.currentSize);\r\n },\r\n error: (error) => {\r\n console.error('Failed to load conversation:', error);\r\n \r\n // Fallback: try to use conversation ID from input or storage\r\n const storedState = this.conversationStateService.getCurrentState();\r\n if (storedState && storedState.conversationId && storedState.userId === this.userId) {\r\n this.conversationId = storedState.conversationId;\r\n this.conversationInitialized = true;\r\n console.log('Using stored conversation ID (API unavailable):', this.conversationId);\r\n } else if (this.conversationId) {\r\n this.conversationInitialized = true;\r\n console.log('Using input conversation ID (API unavailable):', this.conversationId);\r\n }\r\n \r\n // Load historical messages if provided\r\n if (this.historicalMessages && this.historicalMessages.length > 0) {\r\n this.loadHistoricalMessages(this.historicalMessages);\r\n } else {\r\n this.addWelcomeMessage();\r\n }\r\n \r\n this.updateStatus('Ready');\r\n this.loadSavedSize();\r\n this.applySizePreset(this.currentSize);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Load messages from API response into chat UI\r\n * Converts ConversationMessageDto to ChatMessage format\r\n */\r\n private loadMessagesFromApi(apiMessages: any[]): void {\r\n console.log('Loading messages from API:', apiMessages.length);\r\n \r\n // Clear existing messages\r\n this.messages = [];\r\n \r\n // Add welcome message first\r\n this.addWelcomeMessage();\r\n \r\n // Convert and add API messages\r\n const chatMessages: ChatMessage[] = apiMessages.map((msg: any) => ({\r\n messageId: msg.messageId,\r\n conversationId: msg.conversationId,\r\n isUser: msg.role === 'User',\r\n content: msg.content,\r\n sender: msg.role,\r\n timestamp: new Date(msg.timestamp),\r\n isLoading: false\r\n }));\r\n \r\n // Sort by timestamp to ensure chronological order\r\n chatMessages.sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());\r\n \r\n // Add messages to display\r\n this.messages.push(...chatMessages);\r\n \r\n console.log(`Loaded ${chatMessages.length} messages from API`);\r\n \r\n // Scroll to bottom after messages are rendered\r\n setTimeout(() => this.scrollToBottom(), 100);\r\n }\r\n\r\n /**\r\n * Ensure conversation is initialized before sending a message\r\n * Implements lazy initialization pattern\r\n * @returns Observable<boolean> indicating success\r\n */\r\n private ensureConversationInitialized(): Observable<boolean> {\r\n // If already initialized with valid conversationId, we're good\r\n if (this.conversationInitialized && this.conversationId) {\r\n // Validate the conversation still exists if from storage\r\n if (this.enableAutoConversationRecovery) {\r\n return this.aiAgentService.resumeConversation(this.conversationId, this.userId!).pipe(\r\n map(() => {\r\n console.log('Conversation validated:', this.conversationId);\r\n return true;\r\n }),\r\n catchError((error) => {\r\n console.warn('Stored conversation invalid, creating new one:', error);\r\n // Stored conversation expired/invalid, create new\r\n this.conversationInitialized = false;\r\n this.conversationId = undefined;\r\n this.conversationStateService.clearActiveConversation();\r\n return this.createNewConversationForMessage();\r\n })\r\n );\r\n }\r\n return of(true);\r\n }\r\n\r\n // Not initialized yet - try to recover or create new\r\n if (!this.userId || !this.userName) {\r\n console.error('Cannot initialize conversation: userId or userName missing');\r\n return of(false);\r\n }\r\n\r\n // Try recovery first if enabled\r\n if (this.enableAutoConversationRecovery) {\r\n return this.conversationStateService.recoverState(this.userId).pipe(\r\n switchMap((recoveredId) => {\r\n if (recoveredId) {\r\n console.log('Recovered conversation for first message:', recoveredId);\r\n this.conversationId = recoveredId;\r\n this.conversationInitialized = true;\r\n this.conversationStarted.emit(recoveredId);\r\n this.updateStatus('AI Agent is ready');\r\n return of(true);\r\n } else {\r\n // No conversation to recover, create new\r\n return this.createNewConversationForMessage();\r\n }\r\n }),\r\n catchError((error) => {\r\n console.error('Recovery failed, creating new conversation:', error);\r\n return this.createNewConversationForMessage();\r\n })\r\n );\r\n }\r\n\r\n // Recovery disabled, just create new\r\n return this.createNewConversationForMessage();\r\n }\r\n\r\n /**\r\n * Helper method to create new conversation for message send\r\n */\r\n private createNewConversationForMessage(): Observable<boolean> {\r\n this.updateStatus('Creating conversation...');\r\n \r\n return this.conversationStateService.startNewConversation(this.userId!, this.userName!).pipe(\r\n map((conversationId) => {\r\n console.log('Created conversation for first message:', conversationId);\r\n this.conversationId = conversationId;\r\n this.conversationInitialized = true;\r\n this.conversationStarted.emit(conversationId);\r\n this.updateStatus('AI Agent is ready');\r\n return true;\r\n }),\r\n catchError((error) => {\r\n console.error('Failed to create conversation:', error);\r\n this.updateStatus('Failed to create conversation');\r\n return of(false);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Start a new conversation\r\n */\r\n private startNewConversation(): void {\r\n if (!this.userId || !this.userName) {\r\n console.warn('Cannot start conversation without userId and userName');\r\n this.updateStatus('User info required');\r\n this.addWelcomeMessage();\r\n return;\r\n }\r\n\r\n this.updateStatus('Starting new conversation...');\r\n\r\n this.conversationStateService.startNewConversation(this.userId, this.userName)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (conversationId) => {\r\n console.log('Started new conversation:', conversationId);\r\n this.conversationId = conversationId;\r\n this.conversationInitialized = true;\r\n this.conversationStarted.emit(conversationId); // Emit event\r\n this.updateStatus('AI Agent is ready');\r\n // Only add welcome message if no historical messages\r\n if (!this.historicalMessages || this.historicalMessages.length === 0) {\r\n this.addWelcomeMessage();\r\n } else {\r\n this.loadHistoricalMessages(this.historicalMessages);\r\n }\r\n },\r\n error: (error) => {\r\n console.error('Failed to start conversation:', error);\r\n this.updateStatus('Failed to start conversation (Demo Mode)');\r\n // Still show UI in demo mode\r\n this.addWelcomeMessage();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Explicitly start a new conversation session\r\n * Public method for parent components or user-triggered actions\r\n * Always creates a new conversation (forceNew=true)\r\n */\r\n startNewConversationExplicit(): void {\r\n if (!this.userId || !this.userName) {\r\n console.error('Cannot start new conversation: userId or userName not provided');\r\n return;\r\n }\r\n\r\n // Check if current conversation has messages\r\n const hasMessages = this.messages.length > 0;\r\n \r\n // Show confirmation dialog if enabled and there are messages\r\n if (this.confirmNewConversation && hasMessages) {\r\n this.showConfirmationModal = true;\r\n return;\r\n }\r\n \r\n // Proceed directly if no confirmation needed\r\n this.proceedWithNewConversation();\r\n }\r\n\r\n /**\r\n * Confirm new conversation from modal\r\n */\r\n onConfirmNewConversation(): void {\r\n this.showConfirmationModal = false;\r\n this.proceedWithNewConversation();\r\n }\r\n\r\n /**\r\n * Cancel new conversation from modal\r\n */\r\n cancelConfirmation(): void {\r\n this.showConfirmationModal = false;\r\n console.log('User cancelled new conversation');\r\n }\r\n\r\n /**\r\n * Proceed with creating new conversation\r\n * @private\r\n */\r\n private proceedWithNewConversation(): void {\r\n // Safety check (should have been validated by startNewConversationExplicit)\r\n if (!this.userId || !this.userName) {\r\n console.error('Cannot proceed: userId or userName not available');\r\n return;\r\n }\r\n\r\n const hasMessages = this.messages.length > 0;\r\n \r\n if (hasMessages) {\r\n console.log('Starting new conversation (current has', this.messages.length, 'messages)');\r\n }\r\n\r\n // Clear messages IMMEDIATELY for instant feedback\r\n this.messages = [];\r\n this.addWelcomeMessage();\r\n \r\n this.updateStatus('Starting new conversation...');\r\n\r\n this.conversationStateService.startNewConversationExplicit(this.userId, this.userName)\r\n .pipe(\r\n timeout(10000), // 10 second timeout\r\n retry(1), // Retry once on failure\r\n takeUntil(this.destroy$)\r\n )\r\n .subscribe({\r\n next: (conversationId) => {\r\n this.conversationId = conversationId;\r\n this.conversationInitialized = true;\r\n this.conversationStarted.emit(conversationId); // Emit event\r\n this.updateStatus('Ready');\r\n \r\n console.log('✓ New conversation started:', conversationId);\r\n },\r\n error: (error) => {\r\n console.error('Failed to start new conversation:', error);\r\n \r\n // Provide actionable error messages\r\n if (error.name === 'TimeoutError') {\r\n this.updateStatus('Connection timeout - Please check your network');\r\n console.warn('⚠ New conversation API timed out after 10s');\r\n } else if (error.status === 0 || !navigator.onLine) {\r\n this.updateStatus('No connection - Working offline');\r\n console.warn('⚠ Network unavailable');\r\n } else if (error.status >= 500) {\r\n this.updateStatus('Server error - Please try again');\r\n console.error('⚠ Server error:', error.status);\r\n } else {\r\n this.updateStatus('Unable to start conversation - Try again');\r\n }\r\n \r\n // Messages already cleared - keep welcome message showing\r\n // UI remains functional even if API fails\r\n }\r\n });\r\n }\r\n\r\n testConfiguration(): void {\r\n this.updateStatus('Testing connection...');\r\n \r\n this.aiAgentService.testConfiguration()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response: AgentResponse) => {\r\n if (response.success) {\r\n this.updateStatus('AI Agent is ready');\r\n } else {\r\n this.updateStatus(`Configuration error: ${response.error}`);\r\n }\r\n },\r\n error: (errorResponse: any) => {\r\n this.updateStatus(`Connection error: Cannot connect to backend service`);\r\n console.error('API connection test failed:', errorResponse);\r\n }\r\n });\r\n }\r\n\r\n addWelcomeMessage(): void {\r\n const welcomeText = this.welcomeMessage || \r\n `<h3>Hello ${this.firstName}!</h3>Hi, I'm Maestro—your AI assistant. I'm here to help with your policy-related inquiries.<br><br>How can I assist you today?`;\r\n \r\n this.messages.push({\r\n isUser: false,\r\n content: welcomeText, // Don't format HTML content, use it directly\r\n intent: 'welcome',\r\n timestamp: new Date()\r\n });\r\n }\r\n\r\n /**\r\n * Load and transform historical messages from parent component\r\n * Accepts messages in the format from your backend/state management\r\n */\r\n loadHistoricalMessages(historicalMessages: any[]): void {\r\n // console.log('Loading historical messages:', historicalMessages);\r\n // console.log('Number of messages to load:', historicalMessages.length);\r\n \r\n // Transform your backend format to ChatMessage format\r\n const transformedMessages: ChatMessage[] = historicalMessages.map((msg: any) => {\r\n // Determine if message is from user based on sender or role\r\n const isUserMessage = this.isUserMessage(msg);\r\n \r\n const transformed = {\r\n messageId: msg.messageId || msg.id,\r\n conversationId: msg.conversationId || this.conversationId,\r\n isUser: isUserMessage,\r\n content: msg.messageText || msg.message || msg.text || msg.content || '',\r\n sender: msg.sender || (isUserMessage ? this.userName || 'User' : 'Maestro'),\r\n intent: msg.intent || '',\r\n authorName: msg.authorName || msg.sender,\r\n confidenceScore: msg.confidenceScore || msg.confidence || 0,\r\n timestamp: msg.timestamp || msg.createdAt \r\n ? new Date(msg.timestamp || msg.createdAt) \r\n : new Date(),\r\n isLoading: false\r\n } as ChatMessage;\r\n \r\n // console.log('Transformed message:', transformed);\r\n return transformed;\r\n });\r\n \r\n // Sort messages by timestamp to maintain chronological order\r\n transformedMessages.sort((a, b) => \r\n a.timestamp.getTime() - b.timestamp.getTime()\r\n );\r\n \r\n // console.log('Sorted messages count:', transformedMessages.length);\r\n \r\n // Add welcome message first if no messages or load historical messages\r\n if (transformedMessages.length === 0) {\r\n // console.log('No messages to load, adding welcome message');\r\n this.addWelcomeMessage();\r\n } else {\r\n // Check if first message is a welcome message, if not add one\r\n const hasWelcome = transformedMessages.some(msg => \r\n msg.intent === 'welcome' || msg.content.includes('Hello')\r\n );\r\n \r\n if (!hasWelcome) {\r\n // console.log('No welcome message found, adding one');\r\n this.addWelcomeMessage();\r\n }\r\n\r\n // console.log('Pushing transformed messages to messages array');\r\n this.messages.push(...transformedMessages);\r\n }\r\n\r\n // console.log('Total loaded messages in component:', this.messages.length);\r\n // console.log('Messages array:', this.messages);\r\n }\r\n\r\n /**\r\n * Helper method to determine if a message is from the user\r\n */\r\n private isUserMessage(msg: any): boolean {\r\n // Check various properties that might indicate user message\r\n if (msg.isUser !== undefined) return msg.isUser;\r\n if (msg.role) return msg.role.toLowerCase() === 'user';\r\n if (msg.sender) {\r\n const sender = msg.sender.toLowerCase();\r\n return sender === 'user' || \r\n sender === this.userName?.toLowerCase() ||\r\n sender === this.userId?.toLowerCase() ||\r\n sender.includes('user');\r\n }\r\n // Default to false (bot message) if can't determine\r\n return false;\r\n }\r\n\r\n sendInquiry(): void {\r\n if (!this.currentInquiry.trim() || this.isLoading) {\r\n return;\r\n }\r\n\r\n const inquiry = this.currentInquiry.trim();\r\n this.currentInquiry = '';\r\n this.authorName = '';\r\n this.intent = '';\r\n this.isLoading = true;\r\n\r\n // Add user message\r\n const userMessage: ChatMessage = {\r\n messageId: this.generateMessageId(),\r\n conversationId: this.conversationId,\r\n isUser: true,\r\n sender: this.userName || 'User',\r\n intent: this.intent,\r\n content: inquiry,\r\n timestamp: new Date()\r\n };\r\n \r\n this.messages.push(userMessage);\r\n this.messageSent.emit(userMessage);\r\n\r\n // Add loading message\r\n const loadingMessage: ChatMessage = {\r\n isUser: false,\r\n intent: '',\r\n content: 'Processing your inquiry...',\r\n timestamp: new Date(),\r\n isLoading: true\r\n };\r\n this.messages.push(loadingMessage);\r\n\r\n // Ensure conversation is initialized before sending (lazy initialization)\r\n if (this.enableConversationLifecycle) {\r\n this.ensureConversationInitialized()\r\n .pipe(\r\n switchMap((initialized) => {\r\n if (!initialized) {\r\n throw new Error('Failed to initialize conversation');\r\n }\r\n \r\n // Update user message with conversationId\r\n userMessage.conversationId = this.conversationId;\r\n \r\n const request: SupportBotRequest = {\r\n query: inquiry,\r\n ...(this.conversationId !== undefined && this.conversationId !== null ? { conversationId: String(this.conversationId) } : {}),\r\n ...(this.userId !== undefined && this.userId !== null ? { userId: this.userId } : {}),\r\n ...(this.userName !== undefined && this.userName !== null ? { userName: this.userName } : {}),\r\n ...(this.appSource !== undefined && this.appSource !== null ? { appSource: this.appSource } : {})\r\n };\r\n \r\n return this.aiAgentService.processInquiry(request);\r\n }),\r\n takeUntil(this.destroy$)\r\n )\r\n .subscribe({\r\n next: (response: SupportBotResponse) => this.handleInquiryResponse(response, inquiry, userMessage),\r\n error: (error) => this.handleInquiryError(error, inquiry, userMessage)\r\n });\r\n } else {\r\n // Legacy mode without conversation lifecycle\r\n const request: SupportBotRequest = {\r\n query: inquiry,\r\n ...(this.conversationId !== undefined && this.conversationId !== null ? { conversationId: String(this.conversationId) } : {}),\r\n ...(this.userId !== undefined && this.userId !== null ? { userId: this.userId } : {}),\r\n ...(this.userName !== undefined && this.userName !== null ? { userName: this.userName } : {}),\r\n ...(this.appSource !== undefined && this.appSource !== null ? { appSource: this.appSource } : {})\r\n };\r\n \r\n this.aiAgentService.processInquiry(request)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: (response: SupportBotResponse) => this.handleInquiryResponse(response, inquiry, userMessage),\r\n error: (error) => this.handleInquiryError(error, inquiry, userMessage)\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Handle successful inquiry response\r\n */\r\n private handleInquiryResponse(response: SupportBotResponse, inquiry: string, userMessage: ChatMessage): void {\r\n this.isLoading = false;\r\n \r\n // Update last activity timestamp\r\n if (this.enableConversationLifecycle) {\r\n this.conversationStateService.updateLastActivity();\r\n }\r\n \r\n // Update conversationId if provided in response\r\n if (response.conversationId && !this.conversationId) {\r\n this.conversationId = response.conversationId;\r\n }\r\n \r\n // Update user message with conversationId\r\n if (userMessage && this.conversationId) {\r\n userMessage.conversationId = this.conversationId;\r\n }\r\n \r\n // Remove loading message\r\n this.messages = this.messages.filter(msg => !msg.isLoading);\r\n \r\n if (response.answer || (response.contents && response.contents.length > 0)) {\r\n if (response.answer) {\r\n const botMessage: ChatMessage = {\r\n messageId: this.generateMessageId(),\r\n conversationId: this.conversationId,\r\n isUser: false,\r\n sender: 'Maestro',\r\n intent: response.searchIntent || inquiry,\r\n content: this.formatMessageContent(response.answer),\r\n authorName: response.contents && response.contents.length > 0 ? response.contents[0].authorName : undefined,\r\n timestamp: new Date()\r\n };\r\n this.messages.push(botMessage);\r\n this.messageReceived.emit(botMessage);\r\n } else if (response.contents && response.contents.length > 0) {\r\n // Push each content as a separate message\r\n response.contents.forEach(contentItem => {\r\n if (contentItem.content) {\r\n const botMessage: ChatMessage = {\r\n messageId: this.generateMessageId(),\r\n conversationId: this.conversationId,\r\n isUser: false,\r\n sender: contentItem.authorName || 'Maestro',\r\n intent: response.searchIntent || inquiry,\r\n content: this.formatMessageContent(contentItem.content || 'No content available'),\r\n authorName: contentItem.authorName,\r\n timestamp: new Date()\r\n };\r\n this.messages.push(botMessage);\r\n this.messageReceived.emit(botMessage);\r\n }\r\n });\r\n }\r\n } else {\r\n const errorMessage: ChatMessage = {\r\n messageId: this.generateMessageId(),\r\n conversationId: this.conversationId,\r\n isUser: false,\r\n sender: 'Maestro',\r\n intent: inquiry,\r\n content: `Sorry, I didn't receive a valid response.`,\r\n authorName: this.authorName,\r\n timestamp: new Date()\r\n };\r\n this.messages.push(errorMessage);\r\n this.messageReceived.emit(errorMessage);\r\n }\r\n }\r\n\r\n /**\r\n * Handle inquiry error\r\n */\r\n private handleInquiryError(error: any, inquiry: string, userMessage: ChatMessage): void {\r\n this.isLoading = false;\r\n \r\n // Remove loading message\r\n this.messages = this.messages.filter(msg => !msg.isLoading);\r\n \r\n const errorMessage: ChatMessage = {\r\n messageId: this.generateMessageId(),\r\n conversationId: this.conversationId,\r\n isUser: false,\r\n sender: 'Maestro',\r\n intent: inquiry,\r\n content: 'Sorry, I encountered an error processing your request. Please try again.',\r\n authorName: this.authorName,\r\n timestamp: new Date()\r\n };\r\n this.messages.push(errorMessage);\r\n this.messageReceived.emit(errorMessage);\r\n \r\n console.error('Error processing inquiry:', error);\r\n }\r\n\r\n clearChat(): void {\r\n this.messages = [];\r\n this.addWelcomeMessage();\r\n }\r\n\r\n /**\r\n * Close the current conversation\r\n */\r\n closeConversation(reason?: string, rating?: number, feedback?: string): void {\r\n if (!this.enableConversationLifecycle) {\r\n console.warn('Conversation lifecycle is disabled');\r\n return;\r\n }\r\n\r\n this.updateStatus('Closing conversation...');\r\n\r\n this.conversationStateService.closeCurrentConversation(reason, rating, feedback)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe({\r\n next: () => {\r\n console.log('Conversation closed successfully');\r\n this.conversationId = undefined;\r\n this.messages = [];\r\n this.updateStatus('Conversation closed');\r\n \r\n // Optionally start a new conversation immediately\r\n if (this.userId && this.userName) {\r\n setTimeout(() => this.startNewConversation(), 1000);\r\n }\r\n },\r\n error: (error) => {\r\n console.error('Failed to close conversation:', error);\r\n this.updateStatus('Failed to close conversation');\r\n }\r\n });\r\n }\r\n\r\n onKeyPress(event: KeyboardEvent): void {\r\n if (event.key === 'Enter' && !event.shiftKey) {\r\n event.preventDefault();\r\n this.sendInquiry();\r\n }\r\n }\r\n\r\n trackByIndex(index: number): number {\r\n return index;\r\n }\r\n\r\n getThemeClass(): string {\r\n // Default theme if no template design is specified\r\n if (!this.templateDesign) {\r\n return 'theme-default';\r\n }\r\n\r\n // Validate and return theme class\r\n const validThemes = ['default', 'dark', 'blue', 'green', 'purple', 'minimal', 'corporate', 'red', 'yellow', 'orange'];\r\n const theme = this.templateDesign.toLowerCase();\r\n \r\n if (validThemes.includes(theme)) {\r\n return `theme-${theme}`;\r\n }\r\n \r\n // Fallback to default if invalid theme\r\n console.warn(`Invalid theme '${this.templateDesign}' provided. Using default theme.`);\r\n return 'theme-default';\r\n }\r\n\r\n private formatMessageContent(content: string): string {\r\n if (!content) return '';\r\n \r\n // If content already contains HTML tags, return as-is\r\n if (content.includes('<') && content.includes('>')) {\r\n return content;\r\n }\r\n \r\n // Convert newlines to HTML breaks\r\n let formatted = content.replace(/\\n/g, '<br>');\r\n \r\n // Convert escaped newlines to HTML breaks\r\n formatted = formatted.replace(/\\\\n/g, '<br>');\r\n \r\n // Convert markdown-style bold to HTML\r\n formatted = formatted.replace(/\\*\\*(.*?)\\*\\*/g, '<strong>$1</strong>');\r\n \r\n // Convert bullet points to HTML lists\r\n const lines = formatted.split('<br>');\r\n let inList = false;\r\n const processedLines: string[] = [];\r\n \r\n for (let line of lines) {\r\n if (line.trim().startsWith('• ')) {\r\n if (!inList) {\r\n processedLines.push('<ul>');\r\n inList = true;\r\n }\r\n processedLines.push('<li>' + line.replace(/^• /, '') + '</li>');\r\n } else {\r\n if (inList) {\r\n processedLines.push('</ul>');\r\n inList = false;\r\n }\r\n processedLines.push(line);\r\n }\r\n }\r\n \r\n if (inList) {\r\n processedLines.push('</ul>');\r\n }\r\n \r\n return processedLines.join('<br>').replace(/<br><ul>/g, '<ul>').replace(/<\\/ul><br>/g, '</ul>');\r\n }\r\n\r\n private generateSessionId(): string {\r\n return 'session_' + Math.random().toString(36).substr(2, 9) + '_' + Date.now();\r\n }\r\n\r\n private generateMessageId(): string {\r\n return 'msg_' + Math.random().toString(36).substr(2, 9) + '_' + Date.now();\r\n }\r\n\r\n getFormattedTime(timestamp: Date): string {\r\n return timestamp.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\r\n }\r\n\r\n /**\r\n * Scroll to bottom of messages container\r\n */\r\n private scrollToBottom(): void {\r\n try {\r\n const messagesContainer = document.querySelector('.chat-messages') as HTMLElement;\r\n if (messagesContainer) {\r\n messagesContainer.scrollTop = messagesContainer.scrollHeight;\r\n }\r\n } catch (error) {\r\n console.error('Error scrolling to bottom:', error);\r\n }\r\n }\r\n\r\n // ============= Resize Methods =============\r\n \r\n startResize(event: MouseEvent, direction: 'width' | 'both'): void {\r\n event.preventDefault();\r\n this.isResizing = true;\r\n this.startX = event.clientX;\r\n this.startY = event.clientY;\r\n this.startWidth = this.containerWidth;\r\n this.startHeight = this.containerHeight;\r\n \r\n const mouseMoveHandler = (e: MouseEvent) => this.onResize(e, direction);\r\n const mouseUpHandler = () => this.stopResize(mouseMoveHandler, mouseUpHandler);\r\n \r\n document.addEventListener('mousemove', mouseMoveHandler);\r\n document.addEventListener('mouseup', mouseUpHandler);\r\n }\r\n\r\n private onResize(event: MouseEvent, direction: 'width' | 'both'): void {\r\n if (!this.isResizing) return;\r\n \r\n const deltaX = event.clientX - this.startX;\r\n const deltaY = event.clientY - this.startY;\r\n \r\n if (direction === 'width' || direction === 'both') {\r\n const newWidth = Math.min(\r\n Math.max(this.startWidth + deltaX, this.minWidth),\r\n this.maxWidth\r\n );\r\n this.containerWidth = newWidth;\r\n }\r\n \r\n if (direction === 'both') {\r\n const newHeight = Math.min(\r\n Math.max(this.startHeight + deltaY, this.minHeight),\r\n this.maxHeight\r\n );\r\n this.containerHeight = newHeight;\r\n }\r\n }\r\n\r\n private stopResize(mouseMoveHandler: (e: MouseEvent) => void, mouseUpHandler: () => void): void {\r\n this.isResizing = false;\r\n document.removeEventListener('mousemove', mouseMoveHandler);\r\n document.removeEventListener('mouseup', mouseUpHandler);\r\n \r\n this.saveSizePreference();\r\n this.emitSizeChange();\r\n }\r\n\r\n applySizePreset(size: ChatSize): void {\r\n this.currentSize = size;\r\n \r\n switch (size) {\r\n case 'compact':\r\n this.containerWidth = 400;\r\n this.containerHeight = 500;\r\n this.isFullscreen = false;\r\n break;\r\n case 'default':\r\n this.containerWidth = 800;\r\n this.containerHeight = 600;\r\n this.isFullscreen = false;\r\n break;\r\n case 'expanded':\r\n this.containerWidth = 1200;\r\n this.containerHeight = 800;\r\n this.isFullscreen = false;\r\n break;\r\n case 'fullscreen':\r\n this.toggleFullscreen();\r\n return;\r\n }\r\n \r\n this.saveSizePreference();\r\n this.emitSizeChange();\r\n }\r\n\r\n toggleFullscreen(): void {\r\n if (!this.isFullscreen) {\r\n // Entering fullscreen - save current state first\r\n sessionStorage.setItem('chatbox-previous-size', JSON.stringify({\r\n width: this.containerWidth,\r\n height: this.containerHeight,\r\n size: this.currentSize,\r\n wasFullscreen: this.isFullscreen\r\n }));\r\n \r\n this.isFullscreen = true;\r\n this.currentSize = 'fullscreen';\r\n } else {\r\n // Exiting fullscreen - restore previous state\r\n try {\r\n const previous = sessionStorage.getItem('chatbox-previous-size');\r\n if (previous) {\r\n const prevData = JSON.parse(previous);\r\n this.containerWidth = prevData.width || 800;\r\n this.containerHeight = prevData.height || 600;\r\n this.currentSize = prevData.size === 'fullscreen' ? 'default' : prevData.size;\r\n } else {\r\n this.currentSize = 'default';\r\n this.containerWidth = 800;\r\n this.containerHeight = 600;\r\n }\r\n } catch (error) {\r\n this.currentSize = 'default';\r\n this.containerWidth = 800;\r\n this.containerHeight = 600;\r\n }\r\n \r\n this.isFullscreen = false;\r\n }\r\n \r\n this.saveSizePreference();\r\n this.emitSizeChange();\r\n }\r\n\r\n private saveSizePreference(): void {\r\n const sizeData = {\r\n size: this.currentSize,\r\n width: this.containerWidth,\r\n height: this.containerHeight,\r\n isFullscreen: this.isFullscreen\r\n };\r\n \r\n try {\r\n sessionStorage.setItem('chatbox-size-preference', JSON.stringify(sizeData));\r\n } catch (error) {\r\n console.warn('Failed to save size preference:', error);\r\n }\r\n }\r\n\r\n private loadSavedSize(): void {\r\n try {\r\n const saved = sessionStorage.getItem('chatbox-size-preference');\r\n if (saved) {\r\n const sizeData = JSON.parse(saved);\r\n this.currentSize = sizeData.size || 'default';\r\n this.containerWidth = sizeData.width || 800;\r\n this.containerHeight = sizeData.height || 600;\r\n this.isFullscreen = sizeData.isFullscreen || false;\r\n }\r\n } catch (error) {\r\n console.warn('Failed to load size preference:', error);\r\n }\r\n }\r\n\r\n private emitSizeChange(): void {\r\n this.sizeChanged.emit({\r\n size: this.currentSize,\r\n width: this.containerWidth,\r\n height: this.containerHeight\r\n });\r\n }\r\n\r\n getContainerStyle(): any {\r\n if (this.isFullscreen) {\r\n return {\r\n width: '100vw !important',\r\n height: '100vh !important',\r\n maxWidth: '100vw !important',\r\n maxHeight: '100vh !important',\r\n position: 'fixed',\r\n top: '0',\r\n left: '0',\r\n right: '0',\r\n bottom: '0',\r\n margin: '0',\r\n zIndex: 99999\r\n };\r\n }\r\n \r\n return {\r\n width: `${this.containerWidth}px`,\r\n height: `${this.containerHeight}px`,\r\n maxWidth: `${this.maxWidth}px`\r\n };\r\n }\r\n\r\n // ============= File Upload Methods =============\r\n \r\n onImageUpload(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n if (input.files && input.files.length > 0) {\r\n this.handleFileSelection(Array.from(input.files), 'image');\r\n }\r\n }\r\n\r\n onFileUpload(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n if (input.files && input.files.length > 0) {\r\n this.handleFileSelection(Array.from(input.files), 'file');\r\n }\r\n }\r\n\r\n private handleFileSelection(files: File[], type: 'image' | 'file'): void {\r\n files.forEach(file => {\r\n // Validate file type\r\n const allowedTypes = type === 'image' ? this.allowedImageTypes : this.allowedFileTypes;\r\n if (!allowedTypes.includes(file.type)) {\r\n console.warn(`File type ${file.type} not allowed`);\r\n return;\r\n }\r\n\r\n // Validate file size\r\n if (file.size > this.maxFileSize) {\r\n console.warn(`File ${file.name} exceeds maximum size of ${this.maxFileSize / 1024 / 1024}MB`);\r\n return;\r\n }\r\n\r\n const reader = new FileReader();\r\n reader.onload = (e: ProgressEvent<FileReader>) => {\r\n const attachment: FileAttachment = {\r\n id: this.generateMessageId(),\r\n name: file.name,\r\n type: file.type,\r\n size: file.size,\r\n data: e.target?.result || undefined\r\n };\r\n \r\n this.selectedFiles.push(attachment);\r\n this.fileUploaded.emit(attachment);\r\n };\r\n \r\n if (type === 'image') {\r\n reader.readAsDataURL(file);\r\n } else {\r\n reader.readAsArrayBuffer(file);\r\n }\r\n });\r\n }\r\n\r\n removeAttachment(attachmentId: string): void {\r\n this.selectedFiles = this.selectedFiles.filter(f => f.id !== attachmentId);\r\n }\r\n\r\n triggerImageUpload(): void {\r\n const input = document.getElementById('image-upload-input') as HTMLInputElement;\r\n if (input) {\r\n input.click();\r\n }\r\n }\r\n\r\n triggerFileUpload(): void {\r\n const input = document.getElementById('file-upload-input') as HTMLInputElement;\r\n if (input) {\r\n input.click();\r\n }\r\n }\r\n\r\n getFileIcon(fileType: string): string {\r\n if (fileType.startsWith('image/')) return '🖼️';\r\n if (fileType.includes('pdf')) return '📄';\r\n if (fileType.includes('word') || fileType.includes('document')) return '📝';\r\n if (fileType.includes('text')) return '📃';\r\n return '📎';\r\n }\r\n\r\n getFileSizeFormatted(bytes: number): string {\r\n if (bytes < 1024) return bytes + ' B';\r\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB';\r\n return (bytes / (1024 * 1024)).toFixed(1) + ' MB';\r\n }\r\n}","<div class=\"ai-chat-container\" \r\n [ngClass]=\"getThemeClass()\" \r\n [ngStyle]=\"getContainerStyle()\"\r\n [class.fullscreen]=\"isFullscreen\"\r\n [class.resizing]=\"isResizing\"\r\n [class]=\"getAnimationClass()\">\r\n \r\n <!-- Resize Handles -->\r\n <div class=\"resize-handle resize-handle-right\" \r\n (mousedown)=\"startResize($event, 'width')\"\r\n *ngIf=\"!isFullscreen\"\r\n title=\"Drag to resize width\">\r\n </div>\r\n \r\n <div class=\"resize-handle resize-handle-corner\" \r\n (mousedown)=\"startResize($event, 'both')\"\r\n *ngIf=\"!isFullscreen\"\r\n title=\"Drag to resize\">\r\n </div>\r\n \r\n <!-- Debug Information (only shown when showDebugInfo is true) -->\r\n <div *ngIf=\"showDebugInfo\" class=\"debug-info\">\r\n <h3>DEBUG: AI Chat Component Loaded</h3>\r\n <p>Status: {{ configurationStatus || 'Loading...' }}</p>\r\n <p>Messages count: {{ messages.length || 0 }}</p>\r\n <p>Theme: {{ templateDesign || 'default' }}</p>\r\n <p>Size: {{ currentSize }} ({{ containerWidth }}x{{ containerHeight }})</p>\r\n </div>\r\n\r\n <div class=\"chat-header\">\r\n <div class=\"header-left\">\r\n <h2>{{ title }}</h2>\r\n <!-- Icon-only status indicator -->\r\n <div class=\"status-indicator-icon\" \r\n [ngClass]=\"{'status-ready': configurationStatus === 'AI Agent is ready' || configurationStatus === 'Ready', \r\n 'status-error': configurationStatus !== 'AI Agent is ready' && configurationStatus !== 'Ready' && configurationStatus !== 'Initializing...' && configurationStatus !== 'Testing connection...',\r\n 'status-loading': configurationStatus === 'Initializing...' || configurationStatus === 'Testing connection...',\r\n 'transition-enabled': enableStatusTransitions}\"\r\n [title]=\"configurationStatus\">\r\n </div>\r\n </div>\r\n \r\n <div class=\"header-controls\">\r\n <!-- New Conversation Button -->\r\n <button *ngIf=\"showNewConversationButton && enableConversationLifecycle && conversationId\" \r\n class=\"control-button new-conversation-button prominent-button\" \r\n [disabled]=\"isLoading\"\r\n (click)=\"startNewConversationExplicit()\"\r\n title=\"Start New Conversation\"\r\n attr.aria-label=\"Start New Conversation\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"></path>\r\n <line x1=\"9\" y1=\"10\" x2=\"15\" y2=\"10\"></line>\r\n <line x1=\"12\" y1=\"7\" x2=\"12\" y2=\"13\"></line>\r\n </svg>\r\n <span class=\"button-text\">New Chat</span>\r\n </button>\r\n \r\n <!-- Close Conversation Button -->\r\n <button *ngIf=\"showCloseButton && enableConversationLifecycle && conversationId\" \r\n class=\"control-button close-button\" \r\n [disabled]=\"isLoading\"\r\n (click)=\"closeConversation('UserCompleted')\"\r\n title=\"Close Conversation\"\r\n attr.aria-label=\"Close Conversation\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\r\n </svg>\r\n </button>\r\n \r\n <!-- Size Preset Buttons -->\r\n <div class=\"size-controls\" *ngIf=\"!isFullscreen\">\r\n <button class=\"control-button size-button\" \r\n (click)=\"applySizePreset('compact')\"\r\n [class.active]=\"currentSize === 'compact'\"\r\n title=\"Compact View\"\r\n attr.aria-label=\"Compact View\">\r\n <span class=\"icon-svg\" [innerHTML]=\"sanitizedIcons.compactView\"></span>\r\n </button>\r\n <button class=\"control-button size-button\" \r\n (click)=\"applySizePreset('default')\"\r\n [class.active]=\"currentSize === 'default'\"\r\n title=\"Default View\"\r\n attr.aria-label=\"Default View\">\r\n <span class=\"icon-svg\" [innerHTML]=\"sanitizedIcons.defaultView\"></span>\r\n </button>\r\n <button class=\"control-button size-button\" \r\n (click)=\"applySizePreset('expanded')\"\r\n [class.active]=\"currentSize === 'expanded'\"\r\n title=\"Expanded View\"\r\n attr.aria-label=\"Expanded View\">\r\n <span class=\"icon-svg\" [innerHTML]=\"sanitizedIcons.expandedView\"></span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chat-messages\" #messagesContainer>\r\n <div *ngFor=\"let message of messages; let i = index; trackBy: trackByIndex\" class=\"message-wrapper\">\r\n <!-- Message -->\r\n <div class=\"message\" \r\n [ngClass]=\"{'user-message': message.isUser, 'ai-message': !message.isUser, 'loading-message': message.isLoading}\">\r\n \r\n <div class=\"message-content\">\r\n <div [innerHTML]=\"message.content\"></div>\r\n <div class=\"message-timestamp\">{{ getFormattedTime(message.timestamp) }}</div>\r\n </div>\r\n \r\n <div class=\"message-avatar\">\r\n <span *ngIf=\"message.isUser\" class=\"avatar-icon\" [innerHTML]=\"sanitizedIcons.userAvatar\"></span>\r\n <span *ngIf=\"!message.isUser && !message.isLoading\" class=\"avatar-icon\" [innerHTML]=\"sanitizedIcons.aiAvatar\"></span>\r\n <span *ngIf=\"message.isLoading\" class=\"avatar-icon loading-spinner\" [innerHTML]=\"sanitizedIcons.loadingAvatar\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"chat-input\">\r\n <!-- Attachments Preview -->\r\n <div class=\"attachments-preview\" *ngIf=\"selectedFiles.length > 0\">\r\n <div class=\"attachment-item\" *ngFor=\"let file of selectedFiles\">\r\n <svg class=\"attachment-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48\"></path>\r\n </svg>\r\n <span class=\"attachment-name\">{{ file.name }}</span>\r\n <span class=\"attachment-size\">{{ getFileSizeFormatted(file.size) }}</span>\r\n <button class=\"remove-attachment\" (click)=\"removeAttachment(file.id)\" title=\"Remove\" attr.aria-label=\"Remove attachment\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div class=\"input-container\">\r\n <!-- File Upload Inputs (Hidden) -->\r\n <input type=\"file\" \r\n id=\"image-upload-input\" \r\n accept=\"image/*\" \r\n multiple \r\n (change)=\"onImageUpload($event)\"\r\n style=\"display: none;\"\r\n [disabled]=\"!enableImageUpload\">\r\n \r\n <input type=\"file\" \r\n id=\"file-upload-input\" \r\n accept=\".pdf,.doc,.docx,.txt,.csv\" \r\n multiple \r\n (change)=\"onFileUpload($event)\"\r\n style=\"display: none;\"\r\n [disabled]=\"!enableFileUpload\">\r\n \r\n <!-- Upload Buttons (Conditionally rendered) -->\r\n <div class=\"upload-buttons\" *ngIf=\"enableImageUpload || enableFileUpload\">\r\n <button *ngIf=\"enableImageUpload\" \r\n class=\"upload-button image-upload\" \r\n (click)=\"triggerImageUpload()\"\r\n [disabled]=\"isLoading\"\r\n title=\"Upload Image\"\r\n attr.aria-label=\"Upload Image\">\r\n <span class=\"icon-svg\" [innerHTML]=\"sanitizedIcons.imageUpload\"></span>\r\n </button>\r\n \r\n <button *ngIf=\"enableFileUpload\" \r\n class=\"upload-button file-upload\" \r\n (click)=\"triggerFileUpload()\"\r\n [disabled]=\"isLoading\"\r\n title=\"Attach File\"\r\n attr.aria-label=\"Attach File\">\r\n <span class=\"icon-svg\" [innerHTML]=\"sanitizedIcons.fileUpload\"></span>\r\n </button>\r\n </div>\r\n \r\n <textarea \r\n [(ngModel)]=\"currentInquiry\" \r\n (keypress)=\"onKeyPress($event)\"\r\n [placeholder]=\"placeholder\"\r\n rows=\"2\"\r\n [disabled]=\"isLoading\"\r\n class=\"inquiry-textarea\"\r\n attr.aria-label=\"Type your message\"></textarea>\r\n \r\n <button \r\n (click)=\"sendInquiry()\" \r\n [disabled]=\"!currentInquiry.trim() || isLoading\"\r\n class=\"send-button\"\r\n title=\"Send Message\"\r\n attr.aria-label=\"Send Message\">\r\n <span *ngIf=\"!isLoading\" class=\"icon-svg\" [innerHTML]=\"sanitizedIcons.send\"></span>\r\n <span *ngIf=\"isLoading\" class=\"icon-svg loading-icon\" [innerHTML]=\"sanitizedIcons.sendLoading\"></span>\r\n <span class=\"text\">{{ isLoading ? 'Sending...' : 'Send' }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Confirmation Modal -->\r\n <div class=\"confirmation-modal-backdrop\" \r\n *ngIf=\"showConfirmationModal\"\r\n (click)=\"cancelConfirmation()\">\r\n <div class=\"confirmation-modal\" \r\n [ngClass]=\"getThemeClass()\"\r\n (click)=\"$event.stopPropagation()\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n [attr.aria-labelledby]=\"'modal-title-' + conversationId\"\r\n [attr.aria-describedby]=\"'modal-description-' + conversationId\">\r\n \r\n <div class=\"modal-icon warning-icon\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\"></path>\r\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"></line>\r\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"></line>\r\n </svg>\r\n </div>\r\n \r\n <h3 class=\"modal-title\" [id]=\"'modal-title-' + conversationId\">Start New Conversation?</h3>\r\n \r\n <p class=\"modal-message\" [id]=\"'modal-description-' + conversationId\">\r\n {{ newConversationConfirmMessage }}\r\n </p>\r\n \r\n <div class=\"modal-actions\">\r\n <button class=\"modal-button secondary-button\" \r\n (click)=\"cancelConfirmation()\"\r\n type=\"button\"\r\n attr.aria-label=\"Cancel\">\r\n Cancel\r\n </button>\r\n <button class=\"modal-button primary-button\" \r\n (click)=\"onConfirmNewConversation()\"\r\n type=\"button\"\r\n attr.aria-label=\"Start New Conversation\">\r\n Start New Chat\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { EmanateAiChatLibComponent } from './emanate-ai-chat-lib.component';\r\nimport { AiChatComponent } from './components/ai-chat.component';\r\nimport { AiAgentService } from './services/ai-agent.service';\r\n\r\n@NgModule({\r\n declarations: [\r\n EmanateAiChatLibComponent,\r\n AiChatComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n HttpClientModule\r\n ],\r\n providers: [\r\n AiAgentService\r\n ],\r\n exports: [\r\n EmanateAiChatLibComponent,\r\n AiChatComponent\r\n ]\r\n})\r\nexport class EmanateAiChatLibModule { }\r\n","/*\r\n * Public API Surface of emanate-ai-chat-lib\r\n */\r\n\r\nexport * from './lib/emanate-ai-chat-lib.service';\r\nexport * from './lib/emanate-ai-chat-lib.component';\r\nexport * from './lib/emanate-ai-chat-lib.module';\r\n\r\n// Export the main AI Chat component and service\r\nexport * from './lib/components/ai-chat.component';\r\nexport * from './lib/services/ai-agent.service';\r\nexport * from './lib/services/conversation-state.service';\r\n\r\n// Export icon configuration\r\nexport * from './lib/models/icon-config.interface';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i0","Injectable","Component","HttpHeaders","timeout","catchError","throwError","Observable","i1","BehaviorSubject","tap","map","of","switchMap","i1.AiAgentService","EventEmitter","Subject","takeUntil","retry","i2.ConversationStateService","i3","i4","i5","Input","Output","HostListener","CommonModule","FormsModule","HttpClientModule","NgModule"],"mappings":"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"}