emanate-ai-chat-lib 0.1.2 → 0.1.3

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.
@@ -34,7 +34,9 @@ export class AiAgentService {
34
34
  }
35
35
  processInquiry(request) {
36
36
  const headers = new HttpHeaders(Object.assign({ 'Content-Type': 'application/json' }, (this.config.appKey && { 'x-api-key': this.config.appKey })));
37
- return this.http.post(`${this.config.apiUrl}/ProcessInquiry`, request, { headers })
37
+ // Clean the request object to remove undefined/null values and ensure conversationId is a string
38
+ const cleanedRequest = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (request.query && { query: request.query })), (request.conversationId && { conversationId: String(request.conversationId) })), (request.userId && { userId: request.userId })), (request.userName && { userName: request.userName })), (request.appSource && { appSource: request.appSource }));
39
+ return this.http.post(`${this.config.apiUrl}/ProcessInquiry`, cleanedRequest, { headers })
38
40
  .pipe(timeout(this.config.timeout || 30000), catchError((error) => {
39
41
  console.log('ProcessInquiry API not available, returning demo response:', error);
40
42
  // Return a mock response for demo purposes
@@ -83,4 +85,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
83
85
  providedIn: 'root'
84
86
  }]
85
87
  }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYWdlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VtYW5hdGUtYWktY2hhdC1saWIvc3JjL2xpYi9zZXJ2aWNlcy9haS1hZ2VudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLFdBQVcsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUEyRHJELE1BQU0sT0FBTyxjQUFjO0lBU3pCLFlBQW9CLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUFSbkIsa0JBQWEsR0FBaUI7WUFDN0MsTUFBTSxFQUFFLG9DQUFvQztZQUM1QyxPQUFPLEVBQUUsS0FBSztZQUNkLE9BQU8sRUFBRSxDQUFDO1NBQ1gsQ0FBQztRQUVNLFdBQU0scUJBQXNCLElBQUksQ0FBQyxhQUFhLEVBQUc7SUFFbEIsQ0FBQztJQUV4QyxTQUFTLENBQUMsTUFBNkI7UUFDckMsSUFBSSxDQUFDLE1BQU0sbUNBQVEsSUFBSSxDQUFDLGFBQWEsR0FBSyxNQUFNLENBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsNkRBQTZEO1FBQzdELG9DQUFvQztRQUNwQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixDQUFDLENBQUM7UUFFcEYsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLGlCQUM3QixjQUFjLEVBQUUsa0JBQWtCLElBQy9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxXQUFXLEVBQUUs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VUFBVSxDQUFDO1lBQ2hCLE9BQU8sRUFBRSxLQUFLO1lBQ2QsS0FBSyxFQUFFLFlBQVk7U0FDSCxDQUFDLENBQUM7SUFDdEIsQ0FBQzs7NEdBN0ZVLGNBQWM7Z0hBQWQsY0FBYyxjQUZiLE1BQU07NEZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCB0aW1lb3V0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJbnF1aXJ5UmVxdWVzdCB7XHJcbiAgaW5xdWlyeTogc3RyaW5nO1xyXG4gIGFkZGl0aW9uYWxJbnB1dHM/OiBzdHJpbmdbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTdXBwb3J0Qm90UmVxdWVzdCB7XHJcbiAgcXVlcnk/OiBzdHJpbmc7XHJcbiAgY29udmVyc2F0aW9uSWQ/OiBzdHJpbmc7XHJcbiAgdXNlcklkPzogc3RyaW5nO1xyXG4gIHVzZXJOYW1lPzogc3RyaW5nO1xyXG4gIGFwcFNvdXJjZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTdXBwb3J0Qm90Q2hhdEhpc3RvcnlJdGVtIHtcclxuICBxdWVyeT86IHN0cmluZztcclxuICByZXNwb25zZT86IFN1cHBvcnRCb3RSZXNwb25zZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTdXBwb3J0Qm90UmVzcG9uc2Uge1xyXG4gIGFuc3dlcj86IHN0cmluZztcclxuICBjb252ZXJzYXRpb25JZD86IHN0cmluZztcclxuICBzZWFyY2hJbnRlbnQ/OiBzdHJpbmc7XHJcbiAgY29udGVudHM/OiBDaGF0Q29udGVudFtdO1xyXG4gIHJlZmVyZW5jZXM/OiBLbm93bGVkZ2VCYXNlSXRlbVtdO1xyXG4gIHNlYXJjaERvY3VtZW50cz86IEtub3dsZWRnZUJhc2VJdGVtW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdENvbnRlbnQge1xyXG4gIHJvbGU/OiBzdHJpbmc7XHJcbiAgY29udGVudD86IHN0cmluZztcclxuICBhdXRob3JOYW1lPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEtub3dsZWRnZUJhc2VJdGVtIHtcclxuICBmaWxlVVJMPzogc3RyaW5nO1xyXG4gIHRpdGxlPzogc3RyaW5nO1xyXG4gIGNvbnRlbnQ/OiBzdHJpbmc7XHJcbiAgc2NvcmU6IG51bWJlcjtcclxuICBrZXk/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRSZXNwb25zZSB7XHJcbiAgc3VjY2VzczogYm9vbGVhbjtcclxuICByZXN1bHQ/OiBzdHJpbmc7XHJcbiAgZXJyb3I/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQWlDaGF0Q29uZmlnIHtcclxuICBhcGlVcmw/OiBzdHJpbmc7XHJcbiAgYXBwS2V5Pzogc3RyaW5nO1xyXG4gIHRpbWVvdXQ/OiBudW1iZXI7XHJcbiAgcmV0cmllcz86IG51bWJlcjtcclxufVxyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWlBZ2VudFNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdENvbmZpZzogQWlDaGF0Q29uZmlnID0ge1xyXG4gICAgYXBpVXJsOiAnaHR0cHM6Ly9sb2NhbGhvc3Q6NzIzNy9hcGkvQUlBZ2VudCcsXHJcbiAgICB0aW1lb3V0OiAzMDAwMCxcclxuICAgIHJldHJpZXM6IDNcclxuICB9O1xyXG5cclxuICBwcml2YXRlIGNvbmZpZzogQWlDaGF0Q29uZmlnID0geyAuLi50aGlzLmRlZmF1bHRDb25maWcgfTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICBjb25maWd1cmUoY29uZmlnOiBQYXJ0aWFsPEFpQ2hhdENvbmZpZz4pOiB2b2lkIHtcclxuICAgIHRoaXMuY29uZmlnID0geyAuLi50aGlzLmRlZmF1bHRDb25maWcsIC4uLmNvbmZpZyB9O1xyXG4gIH1cclxuXHJcbiAgdGVzdENvbmZpZ3VyYXRpb24oKTogT2JzZXJ2YWJsZTxBZ2VudFJlc3BvbnNlPiB7XHJcbiAgICAvLyBGb3IgZGV2ZWxvcG1lbnQgcHVycG9zZXMsIHNpbXVsYXRlIGEgc3VjY2Vzc2Z1bCBjb25uZWN0aW9uXHJcbiAgICAvLyB3aGVuIHRoZSBiYWNrZW5kIGlzIG5vdCBhdmFpbGFibGVcclxuICAgIGNvbnNvbGUubG9nKCdUZXN0aW5nIGNvbmZpZ3VyYXRpb24gYXQ6JywgYCR7dGhpcy5jb25maWcuYXBpVXJsfS9UZXN0Q29uZmlndXJhdGlvbmApO1xyXG4gICAgXHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgLi4uKHRoaXMuY29uZmlnLmFwcEtleSAmJiB7ICd4LWFwaS1rZXknOiB0aGlzLmNvbmZpZy5hcHBLZXkgfSlcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFnZW50UmVzcG9uc2U+KGAke3RoaXMuY29uZmlnLmFwaVVybH0vVGVzdENvbmZpZ3VyYXRpb25gLCB7IGhlYWRlcnMgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGltZW91dCh0aGlzLmNvbmZpZy50aW1lb3V0IHx8IDMwMDAwKSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0JhY2tlbmQgQVBJIG5vdCBhdmFpbGFibGUsIHJ1bm5pbmcgaW4gZGVtbyBtb2RlOicsIGVycm9yKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gUmV0dXJuIGEgbW9jayBzdWNjZXNzZnVsIHJlc3BvbnNlIGZvciBkZW1vIHB1cnBvc2VzXHJcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcih7XHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgICBlcnJvcjogJ0JhY2tlbmQgQVBJIG5vdCBhdmFpbGFibGUgKERlbW8gTW9kZSknXHJcbiAgICAgICAgICB9IGFzIEFnZW50UmVzcG9uc2UpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzSW5xdWlyeShyZXF1ZXN0OiBTdXBwb3J0Qm90UmVxdWVzdCk6IE9ic2VydmFibGU8U3VwcG9ydEJvdFJlc3BvbnNlPiB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgLi4uKHRoaXMuY29uZmlnLmFwcEtleSAmJiB7ICd4LWFwaS1rZXknOiB0aGlzLmNvbmZpZy5hcHBLZXkgfSlcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxTdXBwb3J0Qm90UmVzcG9uc2U+KGAke3RoaXMuY29uZmlnLmFwaVVybH0vUHJvY2Vzc0lucXVpcnlgLCByZXF1ZXN0LCB7IGhlYWRlcnMgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGltZW91dCh0aGlzLmNvbmZpZy50aW1lb3V0IHx8IDMwMDAwKSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ1Byb2Nlc3NJbnF1aXJ5IEFQSSBub3QgYXZhaWxhYmxlLCByZXR1cm5pbmcgZGVtbyByZXNwb25zZTonLCBlcnJvcik7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIFJldHVybiBhIG1vY2sgcmVzcG9uc2UgZm9yIGRlbW8gcHVycG9zZXNcclxuICAgICAgICAgIGNvbnN0IG1vY2tSZXNwb25zZTogU3VwcG9ydEJvdFJlc3BvbnNlID0ge1xyXG4gICAgICAgICAgICBhbnN3ZXI6IGBEZW1vIE1vZGU6IEkgcmVjZWl2ZWQgeW91ciBxdWVyeSBcIiR7cmVxdWVzdC5xdWVyeX1cIi4gVGhlIGJhY2tlbmQgQVBJIGlzIGN1cnJlbnRseSBub3QgYXZhaWxhYmxlLCBidXQgdGhlIFVJIGlzIHdvcmtpbmcgY29ycmVjdGx5IWAsXHJcbiAgICAgICAgICAgIGNvbnRlbnRzOiBbe1xyXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IGBEZW1vIE1vZGU6IEkgcmVjZWl2ZWQgeW91ciBxdWVyeSBcIiR7cmVxdWVzdC5xdWVyeX1cIi4gVGhlIGJhY2tlbmQgQVBJIGlzIGN1cnJlbnRseSBub3QgYXZhaWxhYmxlLCBidXQgdGhlIFVJIGlzIHdvcmtpbmcgY29ycmVjdGx5IWAsXHJcbiAgICAgICAgICAgICAgcm9sZTogJ2Fzc2lzdGFudCcsXHJcbiAgICAgICAgICAgICAgYXV0aG9yTmFtZTogJ01hZXN0cm8gKERlbW8pJ1xyXG4gICAgICAgICAgICB9XVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gUmV0dXJuIHRoZSBtb2NrIHJlc3BvbnNlIGFzIGFuIE9ic2VydmFibGVcclxuICAgICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxTdXBwb3J0Qm90UmVzcG9uc2U+KG9ic2VydmVyID0+IHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChtb2NrUmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIH0sIDEwMDApOyAvLyBTaW11bGF0ZSBuZXR3b3JrIGRlbGF5XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpOiBPYnNlcnZhYmxlPEFnZW50UmVzcG9uc2U+IHtcclxuICAgIGxldCBlcnJvck1lc3NhZ2UgPSAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcHJvY2Vzc2luZyB5b3VyIHJlcXVlc3QuJztcclxuICAgIFxyXG4gICAgaWYgKGVycm9yLmVycm9yIGluc3RhbmNlb2YgRXJyb3JFdmVudCkge1xyXG4gICAgICAvLyBDbGllbnQtc2lkZSBlcnJvclxyXG4gICAgICBlcnJvck1lc3NhZ2UgPSBgQ2xpZW50IEVycm9yOiAke2Vycm9yLmVycm9yLm1lc3NhZ2V9YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFNlcnZlci1zaWRlIGVycm9yXHJcbiAgICAgIGVycm9yTWVzc2FnZSA9IGBTZXJ2ZXIgRXJyb3I6ICR7ZXJyb3Iuc3RhdHVzfSAtICR7ZXJyb3IubWVzc2FnZX1gO1xyXG4gICAgICBpZiAoZXJyb3IuZXJyb3IgJiYgZXJyb3IuZXJyb3IubWVzc2FnZSkge1xyXG4gICAgICAgIGVycm9yTWVzc2FnZSArPSBgIC0gJHtlcnJvci5lcnJvci5tZXNzYWdlfWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmVycm9yKCdBaUFnZW50U2VydmljZSBFcnJvcjonLCBlcnJvcik7XHJcbiAgICBcclxuICAgIHJldHVybiB0aHJvd0Vycm9yKHtcclxuICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2VcclxuICAgIH0gYXMgQWdlbnRSZXNwb25zZSk7XHJcbiAgfVxyXG59Il19
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYWdlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VtYW5hdGUtYWktY2hhdC1saWIvc3JjL2xpYi9zZXJ2aWNlcy9haS1hZ2VudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLFdBQVcsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUEyRHJELE1BQU0sT0FBTyxjQUFjO0lBU3pCLFlBQW9CLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUFSbkIsa0JBQWEsR0FBaUI7WUFDN0MsTUFBTSxFQUFFLG9DQUFvQztZQUM1QyxPQUFPLEVBQUUsS0FBSztZQUNkLE9BQU8sRUFBRSxDQUFDO1NBQ1gsQ0FBQztRQUVNLFdBQU0scUJBQXNCLElBQUksQ0FBQyxhQUFhLEVBQUc7SUFFbEIsQ0FBQztJQUV4QyxTQUFTLENBQUMsTUFBNkI7UUFDckMsSUFBSSxDQUFDLE1BQU0sbUNBQVEsSUFBSSxDQUFDLGFBQWEsR0FBSyxNQUFNLENBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsNkRBQTZEO1FBQzdELG9DQUFvQztRQUNwQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixDQUFDLENBQUM7UUFFcEYsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLGlCQUM3QixjQUFjLEVBQUUsa0JBQWtCLElBQy9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxXQUFXLEVBQUUs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RyxrREFBa0QsQ0FBQztRQUV0RSxJQUFJLEtBQUssQ0FBQyxLQUFLLFlBQVksVUFBVSxFQUFFO1lBQ3JDLG9CQUFvQjtZQUNwQixZQUFZLEdBQUcsaUJBQWlCLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDdkQ7YUFBTTtZQUNMLG9CQUFvQjtZQUNwQixZQUFZLEdBQUcsaUJBQWlCLEtBQUssQ0FBQyxNQUFNLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xFLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtnQkFDdEMsWUFBWSxJQUFJLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUM3QztTQUNGO1FBRUQsT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUU5QyxPQUFPLFVBQVUsQ0FBQztZQUNoQixPQUFPLEVBQUUsS0FBSztZQUNkLEtBQUssRUFBRSxZQUFZO1NBQ0gsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7OzRHQXRHVSxjQUFjO2dIQUFkLGNBQWMsY0FGYixNQUFNOzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgdGltZW91dCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW5xdWlyeVJlcXVlc3Qge1xyXG4gIGlucXVpcnk6IHN0cmluZztcclxuICBhZGRpdGlvbmFsSW5wdXRzPzogc3RyaW5nW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3VwcG9ydEJvdFJlcXVlc3Qge1xyXG4gIHF1ZXJ5Pzogc3RyaW5nO1xyXG4gIGNvbnZlcnNhdGlvbklkPzogc3RyaW5nO1xyXG4gIHVzZXJJZD86IHN0cmluZztcclxuICB1c2VyTmFtZT86IHN0cmluZztcclxuICBhcHBTb3VyY2U/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3VwcG9ydEJvdENoYXRIaXN0b3J5SXRlbSB7XHJcbiAgcXVlcnk/OiBzdHJpbmc7XHJcbiAgcmVzcG9uc2U/OiBTdXBwb3J0Qm90UmVzcG9uc2U7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3VwcG9ydEJvdFJlc3BvbnNlIHtcclxuICBhbnN3ZXI/OiBzdHJpbmc7XHJcbiAgY29udmVyc2F0aW9uSWQ/OiBzdHJpbmc7XHJcbiAgc2VhcmNoSW50ZW50Pzogc3RyaW5nO1xyXG4gIGNvbnRlbnRzPzogQ2hhdENvbnRlbnRbXTtcclxuICByZWZlcmVuY2VzPzogS25vd2xlZGdlQmFzZUl0ZW1bXTtcclxuICBzZWFyY2hEb2N1bWVudHM/OiBLbm93bGVkZ2VCYXNlSXRlbVtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENoYXRDb250ZW50IHtcclxuICByb2xlPzogc3RyaW5nO1xyXG4gIGNvbnRlbnQ/OiBzdHJpbmc7XHJcbiAgYXV0aG9yTmFtZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBLbm93bGVkZ2VCYXNlSXRlbSB7XHJcbiAgZmlsZVVSTD86IHN0cmluZztcclxuICB0aXRsZT86IHN0cmluZztcclxuICBjb250ZW50Pzogc3RyaW5nO1xyXG4gIHNjb3JlOiBudW1iZXI7XHJcbiAga2V5Pzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFnZW50UmVzcG9uc2Uge1xyXG4gIHN1Y2Nlc3M6IGJvb2xlYW47XHJcbiAgcmVzdWx0Pzogc3RyaW5nO1xyXG4gIGVycm9yPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFpQ2hhdENvbmZpZyB7XHJcbiAgYXBpVXJsPzogc3RyaW5nO1xyXG4gIGFwcEtleT86IHN0cmluZztcclxuICB0aW1lb3V0PzogbnVtYmVyO1xyXG4gIHJldHJpZXM/OiBudW1iZXI7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFpQWdlbnRTZXJ2aWNlIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRDb25maWc6IEFpQ2hhdENvbmZpZyA9IHtcclxuICAgIGFwaVVybDogJ2h0dHBzOi8vbG9jYWxob3N0OjcyMzcvYXBpL0FJQWdlbnQnLFxyXG4gICAgdGltZW91dDogMzAwMDAsXHJcbiAgICByZXRyaWVzOiAzXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBjb25maWc6IEFpQ2hhdENvbmZpZyA9IHsgLi4udGhpcy5kZWZhdWx0Q29uZmlnIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgY29uZmlndXJlKGNvbmZpZzogUGFydGlhbDxBaUNoYXRDb25maWc+KTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5kZWZhdWx0Q29uZmlnLCAuLi5jb25maWcgfTtcclxuICB9XHJcblxyXG4gIHRlc3RDb25maWd1cmF0aW9uKCk6IE9ic2VydmFibGU8QWdlbnRSZXNwb25zZT4ge1xyXG4gICAgLy8gRm9yIGRldmVsb3BtZW50IHB1cnBvc2VzLCBzaW11bGF0ZSBhIHN1Y2Nlc3NmdWwgY29ubmVjdGlvblxyXG4gICAgLy8gd2hlbiB0aGUgYmFja2VuZCBpcyBub3QgYXZhaWxhYmxlXHJcbiAgICBjb25zb2xlLmxvZygnVGVzdGluZyBjb25maWd1cmF0aW9uIGF0OicsIGAke3RoaXMuY29uZmlnLmFwaVVybH0vVGVzdENvbmZpZ3VyYXRpb25gKTtcclxuICAgIFxyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgIC4uLih0aGlzLmNvbmZpZy5hcHBLZXkgJiYgeyAneC1hcGkta2V5JzogdGhpcy5jb25maWcuYXBwS2V5IH0pXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBZ2VudFJlc3BvbnNlPihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L1Rlc3RDb25maWd1cmF0aW9uYCwgeyBoZWFkZXJzIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRpbWVvdXQodGhpcy5jb25maWcudGltZW91dCB8fCAzMDAwMCksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdCYWNrZW5kIEFQSSBub3QgYXZhaWxhYmxlLCBydW5uaW5nIGluIGRlbW8gbW9kZTonLCBlcnJvcik7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIFJldHVybiBhIG1vY2sgc3VjY2Vzc2Z1bCByZXNwb25zZSBmb3IgZGVtbyBwdXJwb3Nlc1xyXG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Ioe1xyXG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgICAgZXJyb3I6ICdCYWNrZW5kIEFQSSBub3QgYXZhaWxhYmxlIChEZW1vIE1vZGUpJ1xyXG4gICAgICAgICAgfSBhcyBBZ2VudFJlc3BvbnNlKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc0lucXVpcnkocmVxdWVzdDogU3VwcG9ydEJvdFJlcXVlc3QpOiBPYnNlcnZhYmxlPFN1cHBvcnRCb3RSZXNwb25zZT4ge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgIC4uLih0aGlzLmNvbmZpZy5hcHBLZXkgJiYgeyAneC1hcGkta2V5JzogdGhpcy5jb25maWcuYXBwS2V5IH0pXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDbGVhbiB0aGUgcmVxdWVzdCBvYmplY3QgdG8gcmVtb3ZlIHVuZGVmaW5lZC9udWxsIHZhbHVlcyBhbmQgZW5zdXJlIGNvbnZlcnNhdGlvbklkIGlzIGEgc3RyaW5nXHJcbiAgICBjb25zdCBjbGVhbmVkUmVxdWVzdDogU3VwcG9ydEJvdFJlcXVlc3QgPSB7XHJcbiAgICAgIC4uLihyZXF1ZXN0LnF1ZXJ5ICYmIHsgcXVlcnk6IHJlcXVlc3QucXVlcnkgfSksXHJcbiAgICAgIC4uLihyZXF1ZXN0LmNvbnZlcnNhdGlvbklkICYmIHsgY29udmVyc2F0aW9uSWQ6IFN0cmluZyhyZXF1ZXN0LmNvbnZlcnNhdGlvbklkKSB9KSxcclxuICAgICAgLi4uKHJlcXVlc3QudXNlcklkICYmIHsgdXNlcklkOiByZXF1ZXN0LnVzZXJJZCB9KSxcclxuICAgICAgLi4uKHJlcXVlc3QudXNlck5hbWUgJiYgeyB1c2VyTmFtZTogcmVxdWVzdC51c2VyTmFtZSB9KSxcclxuICAgICAgLi4uKHJlcXVlc3QuYXBwU291cmNlICYmIHsgYXBwU291cmNlOiByZXF1ZXN0LmFwcFNvdXJjZSB9KVxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8U3VwcG9ydEJvdFJlc3BvbnNlPihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L1Byb2Nlc3NJbnF1aXJ5YCwgY2xlYW5lZFJlcXVlc3QsIHsgaGVhZGVycyB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0aW1lb3V0KHRoaXMuY29uZmlnLnRpbWVvdXQgfHwgMzAwMDApLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnUHJvY2Vzc0lucXVpcnkgQVBJIG5vdCBhdmFpbGFibGUsIHJldHVybmluZyBkZW1vIHJlc3BvbnNlOicsIGVycm9yKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gUmV0dXJuIGEgbW9jayByZXNwb25zZSBmb3IgZGVtbyBwdXJwb3Nlc1xyXG4gICAgICAgICAgY29uc3QgbW9ja1Jlc3BvbnNlOiBTdXBwb3J0Qm90UmVzcG9uc2UgPSB7XHJcbiAgICAgICAgICAgIGFuc3dlcjogYERlbW8gTW9kZTogSSByZWNlaXZlZCB5b3VyIHF1ZXJ5IFwiJHtyZXF1ZXN0LnF1ZXJ5fVwiLiBUaGUgYmFja2VuZCBBUEkgaXMgY3VycmVudGx5IG5vdCBhdmFpbGFibGUsIGJ1dCB0aGUgVUkgaXMgd29ya2luZyBjb3JyZWN0bHkhYCxcclxuICAgICAgICAgICAgY29udGVudHM6IFt7XHJcbiAgICAgICAgICAgICAgY29udGVudDogYERlbW8gTW9kZTogSSByZWNlaXZlZCB5b3VyIHF1ZXJ5IFwiJHtyZXF1ZXN0LnF1ZXJ5fVwiLiBUaGUgYmFja2VuZCBBUEkgaXMgY3VycmVudGx5IG5vdCBhdmFpbGFibGUsIGJ1dCB0aGUgVUkgaXMgd29ya2luZyBjb3JyZWN0bHkhYCxcclxuICAgICAgICAgICAgICByb2xlOiAnYXNzaXN0YW50JyxcclxuICAgICAgICAgICAgICBhdXRob3JOYW1lOiAnTWFlc3RybyAoRGVtbyknXHJcbiAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvLyBSZXR1cm4gdGhlIG1vY2sgcmVzcG9uc2UgYXMgYW4gT2JzZXJ2YWJsZVxyXG4gICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPFN1cHBvcnRCb3RSZXNwb25zZT4ob2JzZXJ2ZXIgPT4ge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KG1vY2tSZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgfSwgMTAwMCk7IC8vIFNpbXVsYXRlIG5ldHdvcmsgZGVsYXlcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSk6IE9ic2VydmFibGU8QWdlbnRSZXNwb25zZT4ge1xyXG4gICAgbGV0IGVycm9yTWVzc2FnZSA9ICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nIHlvdXIgcmVxdWVzdC4nO1xyXG4gICAgXHJcbiAgICBpZiAoZXJyb3IuZXJyb3IgaW5zdGFuY2VvZiBFcnJvckV2ZW50KSB7XHJcbiAgICAgIC8vIENsaWVudC1zaWRlIGVycm9yXHJcbiAgICAgIGVycm9yTWVzc2FnZSA9IGBDbGllbnQgRXJyb3I6ICR7ZXJyb3IuZXJyb3IubWVzc2FnZX1gO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gU2VydmVyLXNpZGUgZXJyb3JcclxuICAgICAgZXJyb3JNZXNzYWdlID0gYFNlcnZlciBFcnJvcjogJHtlcnJvci5zdGF0dXN9IC0gJHtlcnJvci5tZXNzYWdlfWA7XHJcbiAgICAgIGlmIChlcnJvci5lcnJvciAmJiBlcnJvci5lcnJvci5tZXNzYWdlKSB7XHJcbiAgICAgICAgZXJyb3JNZXNzYWdlICs9IGAgLSAke2Vycm9yLmVycm9yLm1lc3NhZ2V9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUuZXJyb3IoJ0FpQWdlbnRTZXJ2aWNlIEVycm9yOicsIGVycm9yKTtcclxuICAgIFxyXG4gICAgcmV0dXJuIHRocm93RXJyb3Ioe1xyXG4gICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZVxyXG4gICAgfSBhcyBBZ2VudFJlc3BvbnNlKTtcclxuICB9XHJcbn0iXX0=
@@ -189,7 +189,9 @@ class AiAgentService {
189
189
  }
190
190
  processInquiry(request) {
191
191
  const headers = new HttpHeaders(Object.assign({ 'Content-Type': 'application/json' }, (this.config.appKey && { 'x-api-key': this.config.appKey })));
192
- return this.http.post(`${this.config.apiUrl}/ProcessInquiry`, request, { headers })
192
+ // Clean the request object to remove undefined/null values and ensure conversationId is a string
193
+ const cleanedRequest = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (request.query && { query: request.query })), (request.conversationId && { conversationId: String(request.conversationId) })), (request.userId && { userId: request.userId })), (request.userName && { userName: request.userName })), (request.appSource && { appSource: request.appSource }));
194
+ return this.http.post(`${this.config.apiUrl}/ProcessInquiry`, cleanedRequest, { headers })
193
195
  .pipe(timeout(this.config.timeout || 30000), catchError((error) => {
194
196
  console.log('ProcessInquiry API not available, returning demo response:', error);
195
197
  // Return a mock response for demo purposes
@@ -1 +1 @@
1
- {"version":3,"file":"emanate-ai-chat-lib.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","../../../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/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","/**\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}\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/AIAgent',\r\n timeout: 30000,\r\n retries: 3\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 testConfiguration(): Observable<AgentResponse> {\r\n // For development purposes, simulate a successful connection\r\n // when the backend is not available\r\n console.log('Testing configuration at:', `${this.config.apiUrl}/TestConfiguration`);\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>(`${this.config.apiUrl}/TestConfiguration`, { 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 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>(`${this.config.apiUrl}/ProcessInquiry`, 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}","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { AiAgentService, AgentResponse, SupportBotRequest, SupportBotResponse, ChatContent } from '../services/ai-agent.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 @Output() messageReceived = new EventEmitter<ChatMessage>();\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 private destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n private aiAgentService: AiAgentService,\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 });\r\n }\r\n \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 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 * 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 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 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: this.currentInquiry,\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 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 const request: SupportBotRequest = {\r\n query: inquiry,\r\n conversationId: this.conversationId,\r\n userId: this.userId,\r\n userName: this.userName,\r\n 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) => {\r\n this.isLoading = false;\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 // 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 error: (error) => {\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 }\r\n\r\n clearChat(): void {\r\n this.messages = [];\r\n this.addWelcomeMessage();\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', \r\n 'status-error': configurationStatus !== 'AI Agent is 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 <!-- 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</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\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":["i1.AiAgentService"],"mappings":"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"}
1
+ {"version":3,"file":"emanate-ai-chat-lib.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","../../../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/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","/**\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}\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/AIAgent',\r\n timeout: 30000,\r\n retries: 3\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 testConfiguration(): Observable<AgentResponse> {\r\n // For development purposes, simulate a successful connection\r\n // when the backend is not available\r\n console.log('Testing configuration at:', `${this.config.apiUrl}/TestConfiguration`);\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>(`${this.config.apiUrl}/TestConfiguration`, { 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 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 // Clean the request object to remove undefined/null values and ensure conversationId is a string\r\n const cleanedRequest: SupportBotRequest = {\r\n ...(request.query && { query: request.query }),\r\n ...(request.conversationId && { conversationId: String(request.conversationId) }),\r\n ...(request.userId && { userId: request.userId }),\r\n ...(request.userName && { userName: request.userName }),\r\n ...(request.appSource && { appSource: request.appSource })\r\n };\r\n\r\n return this.http.post<SupportBotResponse>(`${this.config.apiUrl}/ProcessInquiry`, cleanedRequest, { 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}","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { AiAgentService, AgentResponse, SupportBotRequest, SupportBotResponse, ChatContent } from '../services/ai-agent.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 @Output() messageReceived = new EventEmitter<ChatMessage>();\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 private destroy$ = new Subject<void>();\r\n\r\n constructor(\r\n private aiAgentService: AiAgentService,\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 });\r\n }\r\n \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 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 * 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 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 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: this.currentInquiry,\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 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 const request: SupportBotRequest = {\r\n query: inquiry,\r\n conversationId: this.conversationId,\r\n userId: this.userId,\r\n userName: this.userName,\r\n 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) => {\r\n this.isLoading = false;\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 // 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 error: (error) => {\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 }\r\n\r\n clearChat(): void {\r\n this.messages = [];\r\n this.addWelcomeMessage();\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', \r\n 'status-error': configurationStatus !== 'AI Agent is 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 <!-- 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</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\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":["i1.AiAgentService"],"mappings":"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"}