sf-aiembedded 0.2.6 → 0.2.7

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.
@@ -755,11 +755,11 @@ class BubbleAgentComponent {
755
755
  this.selectedAgent = null;
756
756
  }
757
757
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: BubbleAgentComponent, deps: [{ token: AI_AGENTS }, { token: i1$2.MessageService }], target: i0.ɵɵFactoryTarget.Component });
758
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: BubbleAgentComponent, isStandalone: true, selector: "lib-bubble-agent", inputs: { idKatios: "idKatios", ndoc: "ndoc", tdoc: "tdoc" }, usesOnChanges: true, ngImport: i0, template: "<!-- Bot\u00F3n burbuja flotante -->\r\n<button class=\"bubble-button\" (click)=\"toggleChat()\" [class.is-open]=\"isOpen\">\r\n <i class=\"pi\" [ngClass]=\"isOpen ? 'pi-times' : 'pi-comments'\"></i>\r\n</button>\r\n\r\n<!-- Panel del chat -->\r\n<div class=\"chat-panel\" [class.is-open]=\"isOpen\">\r\n <!-- Header del panel -->\r\n <div class=\"p-3 chat-header\">\r\n <div class=\"flex align-items-center gap-2\">\r\n <button *ngIf=\"selectedAgent\" class=\"back-button\" (click)=\"goBack()\">\r\n <i class=\"pi pi-arrow-left\"></i>\r\n </button>\r\n <lib-robot-icon style=\"color: white\" *ngIf=\"selectedAgent\"></lib-robot-icon>\r\n <div class=\"header-text\">\r\n <p class=\"header-title text-white font-semibold text-lg\">{{ selectedAgent ? selectedAgent.key : 'Asistentes disponibles' }}</p>\r\n </div>\r\n </div>\r\n <button class=\"close-button\" (click)=\"toggleChat()\">\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n </div>\r\n\r\n <!-- Contenido del panel -->\r\n <div class=\"chat-content\">\r\n <!-- Vista de lista de agentes -->\r\n <div *ngIf=\"!selectedAgent\" class=\"agents-list\">\r\n <!-- Mensaje cuando no hay agentes -->\r\n <div *ngIf=\"!agents || agents.length === 0 || loading\" class=\"no-agents\">\r\n <i class=\"pi text-4xl text-gray-400\" [ngClass]=\"loading ? 'pi-spin pi-cog' : 'pi-users'\"></i>\r\n <p class=\"text-gray-500 mt-2\">{{ loading ? 'Cargando agentes...' : 'No se encontraron agentes' }}</p>\r\n </div>\r\n <!-- Lista de agentes -->\r\n <div class=\"agent-card\" *ngFor=\"let agent of agents\" (click)=\"selectAgent(agent)\">\r\n <lib-agent-avatar \r\n [size]=\"'large'\">\r\n </lib-agent-avatar>\r\n <div class=\"agent-info\">\r\n <p class=\"agent-name text-base font-medium\">{{ agent.key }}</p>\r\n <p class=\"agent-description text-sm text-color-secondary\">{{ agent.label }}</p>\r\n </div>\r\n <i class=\"pi pi-chevron-right agent-arrow\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- Vista de chat con el agente seleccionado -->\r\n <lib-bubble-chat *ngIf=\"selectedAgent\" \r\n [agentId]=\"selectedAgent.valor.agentId || ''\" \r\n [idKatios]=\"idKatios\">\r\n </lib-bubble-chat>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";:host{display:block}.bubble-button{position:fixed;bottom:24px;right:24px;width:60px;height:60px;border-radius:50%;background:var(--primary-color);border:none;cursor:pointer;box-shadow:0 4px 20px #b0b4b9;display:flex;align-items:center;justify-content:center;transition:all .3s ease;z-index:1000}.bubble-button:hover{transform:scale(1.1);box-shadow:0 6px 25px #96999d}.bubble-button.is-open{transform:rotate(90deg)}.bubble-button i{font-size:1.5rem;color:#fff;transition:transform .3s ease}.chat-panel{position:fixed;bottom:100px;right:24px;width:380px;height:550px;background:var(--p-surface-0);border-radius:16px;box-shadow:0 10px 40px #00000026;display:flex;flex-direction:column;overflow:hidden;opacity:0;visibility:hidden;transform:translateY(20px) scale(.95);transition:all .3s ease;z-index:999}.chat-panel.is-open{opacity:1;visibility:visible;transform:translateY(0) scale(1)}.chat-header{background:var(--primary-color);color:#fff;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.header-text{display:flex;flex-direction:column}.header-title{margin:0}.header-subtitle{opacity:.9}.back-button,.close-button{background:#fff3;border:none;border-radius:50%;width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background .2s ease}.back-button:hover,.close-button:hover{background:#ffffff4d}.back-button i,.close-button i{color:#fff;font-size:.875rem}.chat-content{flex:1;overflow:hidden;display:flex;flex-direction:column}.agents-list{overflow-y:auto;flex:1}.no-agents{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:2rem;text-align:center}.agents-subtitle{color:var(--p-text-muted-color);font-size:.875rem;margin:0 0 16px;text-align:center}.agent-card{display:flex;align-items:center;gap:12px;padding:12px;cursor:pointer;transition:all .2s ease;border-bottom:1px solid var(--p-surface-200)}.agent-card:hover{background:var(--p-surface-100)}.agent-card:last-child{margin-bottom:0}.agent-info{flex:1;min-width:0}.agent-name{margin:0 0 4px}.agent-description{margin:0;line-height:1.4;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;line-clamp:2;-webkit-line-clamp:2}.agent-arrow{color:var(--p-text-muted-color);font-size:.875rem;flex-shrink:0}@media (max-width: 768px){.chat-panel{width:100vw;height:100vh;height:-webkit-fill-available;height:100dvh;max-height:none;inset:0;border-radius:0;transform:translateY(100%)}.chat-panel.is-open{transform:translateY(0)}.bubble-button{bottom:16px;right:16px;width:56px;height:56px}.bubble-button.is-open{opacity:0;visibility:hidden;transform:scale(0)}.chat-content{flex:1;min-height:0;overflow:hidden}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: AgentAvatarComponent, selector: "lib-agent-avatar", inputs: ["size"] }, { kind: "component", type: BubbleChatComponent, selector: "lib-bubble-chat", inputs: ["agentId", "idKatios"] }, { kind: "component", type: RobotIconComponent, selector: "lib-robot-icon" }] });
758
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: BubbleAgentComponent, isStandalone: true, selector: "lib-bubble-agent", inputs: { idKatios: "idKatios", ndoc: "ndoc", tdoc: "tdoc" }, usesOnChanges: true, ngImport: i0, template: "<!-- Bot\u00F3n burbuja flotante -->\r\n<button class=\"bubble-button\" (click)=\"toggleChat()\" [class.is-open]=\"isOpen\">\r\n <i class=\"pi\" [ngClass]=\"isOpen ? 'pi-times' : 'pi-comments'\"></i>\r\n</button>\r\n\r\n<!-- Panel del chat -->\r\n<div class=\"chat-panel\" [class.is-open]=\"isOpen\">\r\n <!-- Header del panel -->\r\n <div class=\"p-3 chat-header\">\r\n <div class=\"flex align-items-center gap-2\">\r\n <button *ngIf=\"selectedAgent\" class=\"back-button\" (click)=\"goBack()\">\r\n <i class=\"pi pi-arrow-left\"></i>\r\n </button>\r\n <lib-robot-icon style=\"color: white\" *ngIf=\"selectedAgent\"></lib-robot-icon>\r\n <div class=\"header-text\">\r\n <p class=\"header-title text-white font-semibold text-lg\">{{ selectedAgent ? selectedAgent.key : 'Agentes disponibles' }}</p>\r\n </div>\r\n </div>\r\n <button class=\"close-button\" (click)=\"toggleChat()\">\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n </div>\r\n\r\n <!-- Contenido del panel -->\r\n <div class=\"chat-content\">\r\n <!-- Vista de lista de agentes -->\r\n <div *ngIf=\"!selectedAgent\" class=\"agents-list\">\r\n <!-- Mensaje cuando no hay agentes -->\r\n <div *ngIf=\"!agents || agents.length === 0 || loading\" class=\"no-agents\">\r\n <i class=\"pi text-4xl text-gray-400\" [ngClass]=\"loading ? 'pi-spin pi-cog' : 'pi-users'\"></i>\r\n <p class=\"text-gray-500 mt-2\">{{ loading ? 'Cargando agentes...' : 'No se encontraron agentes' }}</p>\r\n </div>\r\n <!-- Lista de agentes -->\r\n <div class=\"agent-card\" *ngFor=\"let agent of agents\" (click)=\"selectAgent(agent)\">\r\n <lib-agent-avatar \r\n [size]=\"'large'\">\r\n </lib-agent-avatar>\r\n <div class=\"agent-info\">\r\n <p class=\"agent-name text-base font-medium\">{{ agent.key }}</p>\r\n <p class=\"agent-description text-sm text-color-secondary\">{{ agent.label }}</p>\r\n </div>\r\n <i class=\"pi pi-chevron-right agent-arrow\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- Vista de chat con el agente seleccionado -->\r\n <lib-bubble-chat *ngIf=\"selectedAgent\" \r\n [agentId]=\"selectedAgent.valor.agentId || ''\" \r\n [idKatios]=\"idKatios\">\r\n </lib-bubble-chat>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";:host{display:block}.bubble-button{position:fixed;bottom:24px;right:24px;width:60px;height:60px;border-radius:50%;background:var(--primary-color);border:none;cursor:pointer;box-shadow:0 4px 20px #b0b4b9;display:flex;align-items:center;justify-content:center;transition:all .3s ease;z-index:1000}.bubble-button:hover{transform:scale(1.1);box-shadow:0 6px 25px #96999d}.bubble-button.is-open{transform:rotate(90deg)}.bubble-button i{font-size:1.5rem;color:#fff;transition:transform .3s ease}.chat-panel{position:fixed;bottom:100px;right:24px;width:380px;height:550px;background:var(--p-surface-0);border-radius:16px;box-shadow:0 10px 40px #00000026;display:flex;flex-direction:column;overflow:hidden;opacity:0;visibility:hidden;transform:translateY(20px) scale(.95);transition:all .3s ease;z-index:999}.chat-panel.is-open{opacity:1;visibility:visible;transform:translateY(0) scale(1)}.chat-header{background:var(--primary-color);color:#fff;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.header-text{display:flex;flex-direction:column}.header-title{margin:0}.header-subtitle{opacity:.9}.back-button,.close-button{background:#fff3;border:none;border-radius:50%;width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background .2s ease}.back-button:hover,.close-button:hover{background:#ffffff4d}.back-button i,.close-button i{color:#fff;font-size:.875rem}.chat-content{flex:1;overflow:hidden;display:flex;flex-direction:column}.agents-list{overflow-y:auto;flex:1}.no-agents{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:2rem;text-align:center}.agents-subtitle{color:var(--p-text-muted-color);font-size:.875rem;margin:0 0 16px;text-align:center}.agent-card{display:flex;align-items:center;gap:12px;padding:12px;cursor:pointer;transition:all .2s ease;border-bottom:1px solid var(--p-surface-200)}.agent-card:hover{background:var(--p-surface-100)}.agent-card:last-child{margin-bottom:0}.agent-info{flex:1;min-width:0}.agent-name{margin:0 0 4px}.agent-description{margin:0;line-height:1.4;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;line-clamp:2;-webkit-line-clamp:2}.agent-arrow{color:var(--p-text-muted-color);font-size:.875rem;flex-shrink:0}@media (max-width: 768px){.chat-panel{width:100vw;height:100vh;height:-webkit-fill-available;height:100dvh;max-height:none;inset:0;border-radius:0;transform:translateY(100%)}.chat-panel.is-open{transform:translateY(0)}.bubble-button{bottom:16px;right:16px;width:56px;height:56px}.bubble-button.is-open{opacity:0;visibility:hidden;transform:scale(0)}.chat-content{flex:1;min-height:0;overflow:hidden}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: AgentAvatarComponent, selector: "lib-agent-avatar", inputs: ["size"] }, { kind: "component", type: BubbleChatComponent, selector: "lib-bubble-chat", inputs: ["agentId", "idKatios"] }, { kind: "component", type: RobotIconComponent, selector: "lib-robot-icon" }] });
759
759
  }
760
760
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: BubbleAgentComponent, decorators: [{
761
761
  type: Component,
762
- args: [{ selector: 'lib-bubble-agent', standalone: true, imports: [CommonModule, ButtonModule, AgentAvatarComponent, BubbleChatComponent, RobotIconComponent], template: "<!-- Bot\u00F3n burbuja flotante -->\r\n<button class=\"bubble-button\" (click)=\"toggleChat()\" [class.is-open]=\"isOpen\">\r\n <i class=\"pi\" [ngClass]=\"isOpen ? 'pi-times' : 'pi-comments'\"></i>\r\n</button>\r\n\r\n<!-- Panel del chat -->\r\n<div class=\"chat-panel\" [class.is-open]=\"isOpen\">\r\n <!-- Header del panel -->\r\n <div class=\"p-3 chat-header\">\r\n <div class=\"flex align-items-center gap-2\">\r\n <button *ngIf=\"selectedAgent\" class=\"back-button\" (click)=\"goBack()\">\r\n <i class=\"pi pi-arrow-left\"></i>\r\n </button>\r\n <lib-robot-icon style=\"color: white\" *ngIf=\"selectedAgent\"></lib-robot-icon>\r\n <div class=\"header-text\">\r\n <p class=\"header-title text-white font-semibold text-lg\">{{ selectedAgent ? selectedAgent.key : 'Asistentes disponibles' }}</p>\r\n </div>\r\n </div>\r\n <button class=\"close-button\" (click)=\"toggleChat()\">\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n </div>\r\n\r\n <!-- Contenido del panel -->\r\n <div class=\"chat-content\">\r\n <!-- Vista de lista de agentes -->\r\n <div *ngIf=\"!selectedAgent\" class=\"agents-list\">\r\n <!-- Mensaje cuando no hay agentes -->\r\n <div *ngIf=\"!agents || agents.length === 0 || loading\" class=\"no-agents\">\r\n <i class=\"pi text-4xl text-gray-400\" [ngClass]=\"loading ? 'pi-spin pi-cog' : 'pi-users'\"></i>\r\n <p class=\"text-gray-500 mt-2\">{{ loading ? 'Cargando agentes...' : 'No se encontraron agentes' }}</p>\r\n </div>\r\n <!-- Lista de agentes -->\r\n <div class=\"agent-card\" *ngFor=\"let agent of agents\" (click)=\"selectAgent(agent)\">\r\n <lib-agent-avatar \r\n [size]=\"'large'\">\r\n </lib-agent-avatar>\r\n <div class=\"agent-info\">\r\n <p class=\"agent-name text-base font-medium\">{{ agent.key }}</p>\r\n <p class=\"agent-description text-sm text-color-secondary\">{{ agent.label }}</p>\r\n </div>\r\n <i class=\"pi pi-chevron-right agent-arrow\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- Vista de chat con el agente seleccionado -->\r\n <lib-bubble-chat *ngIf=\"selectedAgent\" \r\n [agentId]=\"selectedAgent.valor.agentId || ''\" \r\n [idKatios]=\"idKatios\">\r\n </lib-bubble-chat>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";:host{display:block}.bubble-button{position:fixed;bottom:24px;right:24px;width:60px;height:60px;border-radius:50%;background:var(--primary-color);border:none;cursor:pointer;box-shadow:0 4px 20px #b0b4b9;display:flex;align-items:center;justify-content:center;transition:all .3s ease;z-index:1000}.bubble-button:hover{transform:scale(1.1);box-shadow:0 6px 25px #96999d}.bubble-button.is-open{transform:rotate(90deg)}.bubble-button i{font-size:1.5rem;color:#fff;transition:transform .3s ease}.chat-panel{position:fixed;bottom:100px;right:24px;width:380px;height:550px;background:var(--p-surface-0);border-radius:16px;box-shadow:0 10px 40px #00000026;display:flex;flex-direction:column;overflow:hidden;opacity:0;visibility:hidden;transform:translateY(20px) scale(.95);transition:all .3s ease;z-index:999}.chat-panel.is-open{opacity:1;visibility:visible;transform:translateY(0) scale(1)}.chat-header{background:var(--primary-color);color:#fff;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.header-text{display:flex;flex-direction:column}.header-title{margin:0}.header-subtitle{opacity:.9}.back-button,.close-button{background:#fff3;border:none;border-radius:50%;width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background .2s ease}.back-button:hover,.close-button:hover{background:#ffffff4d}.back-button i,.close-button i{color:#fff;font-size:.875rem}.chat-content{flex:1;overflow:hidden;display:flex;flex-direction:column}.agents-list{overflow-y:auto;flex:1}.no-agents{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:2rem;text-align:center}.agents-subtitle{color:var(--p-text-muted-color);font-size:.875rem;margin:0 0 16px;text-align:center}.agent-card{display:flex;align-items:center;gap:12px;padding:12px;cursor:pointer;transition:all .2s ease;border-bottom:1px solid var(--p-surface-200)}.agent-card:hover{background:var(--p-surface-100)}.agent-card:last-child{margin-bottom:0}.agent-info{flex:1;min-width:0}.agent-name{margin:0 0 4px}.agent-description{margin:0;line-height:1.4;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;line-clamp:2;-webkit-line-clamp:2}.agent-arrow{color:var(--p-text-muted-color);font-size:.875rem;flex-shrink:0}@media (max-width: 768px){.chat-panel{width:100vw;height:100vh;height:-webkit-fill-available;height:100dvh;max-height:none;inset:0;border-radius:0;transform:translateY(100%)}.chat-panel.is-open{transform:translateY(0)}.bubble-button{bottom:16px;right:16px;width:56px;height:56px}.bubble-button.is-open{opacity:0;visibility:hidden;transform:scale(0)}.chat-content{flex:1;min-height:0;overflow:hidden}}\n"] }]
762
+ args: [{ selector: 'lib-bubble-agent', standalone: true, imports: [CommonModule, ButtonModule, AgentAvatarComponent, BubbleChatComponent, RobotIconComponent], template: "<!-- Bot\u00F3n burbuja flotante -->\r\n<button class=\"bubble-button\" (click)=\"toggleChat()\" [class.is-open]=\"isOpen\">\r\n <i class=\"pi\" [ngClass]=\"isOpen ? 'pi-times' : 'pi-comments'\"></i>\r\n</button>\r\n\r\n<!-- Panel del chat -->\r\n<div class=\"chat-panel\" [class.is-open]=\"isOpen\">\r\n <!-- Header del panel -->\r\n <div class=\"p-3 chat-header\">\r\n <div class=\"flex align-items-center gap-2\">\r\n <button *ngIf=\"selectedAgent\" class=\"back-button\" (click)=\"goBack()\">\r\n <i class=\"pi pi-arrow-left\"></i>\r\n </button>\r\n <lib-robot-icon style=\"color: white\" *ngIf=\"selectedAgent\"></lib-robot-icon>\r\n <div class=\"header-text\">\r\n <p class=\"header-title text-white font-semibold text-lg\">{{ selectedAgent ? selectedAgent.key : 'Agentes disponibles' }}</p>\r\n </div>\r\n </div>\r\n <button class=\"close-button\" (click)=\"toggleChat()\">\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n </div>\r\n\r\n <!-- Contenido del panel -->\r\n <div class=\"chat-content\">\r\n <!-- Vista de lista de agentes -->\r\n <div *ngIf=\"!selectedAgent\" class=\"agents-list\">\r\n <!-- Mensaje cuando no hay agentes -->\r\n <div *ngIf=\"!agents || agents.length === 0 || loading\" class=\"no-agents\">\r\n <i class=\"pi text-4xl text-gray-400\" [ngClass]=\"loading ? 'pi-spin pi-cog' : 'pi-users'\"></i>\r\n <p class=\"text-gray-500 mt-2\">{{ loading ? 'Cargando agentes...' : 'No se encontraron agentes' }}</p>\r\n </div>\r\n <!-- Lista de agentes -->\r\n <div class=\"agent-card\" *ngFor=\"let agent of agents\" (click)=\"selectAgent(agent)\">\r\n <lib-agent-avatar \r\n [size]=\"'large'\">\r\n </lib-agent-avatar>\r\n <div class=\"agent-info\">\r\n <p class=\"agent-name text-base font-medium\">{{ agent.key }}</p>\r\n <p class=\"agent-description text-sm text-color-secondary\">{{ agent.label }}</p>\r\n </div>\r\n <i class=\"pi pi-chevron-right agent-arrow\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- Vista de chat con el agente seleccionado -->\r\n <lib-bubble-chat *ngIf=\"selectedAgent\" \r\n [agentId]=\"selectedAgent.valor.agentId || ''\" \r\n [idKatios]=\"idKatios\">\r\n </lib-bubble-chat>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";:host{display:block}.bubble-button{position:fixed;bottom:24px;right:24px;width:60px;height:60px;border-radius:50%;background:var(--primary-color);border:none;cursor:pointer;box-shadow:0 4px 20px #b0b4b9;display:flex;align-items:center;justify-content:center;transition:all .3s ease;z-index:1000}.bubble-button:hover{transform:scale(1.1);box-shadow:0 6px 25px #96999d}.bubble-button.is-open{transform:rotate(90deg)}.bubble-button i{font-size:1.5rem;color:#fff;transition:transform .3s ease}.chat-panel{position:fixed;bottom:100px;right:24px;width:380px;height:550px;background:var(--p-surface-0);border-radius:16px;box-shadow:0 10px 40px #00000026;display:flex;flex-direction:column;overflow:hidden;opacity:0;visibility:hidden;transform:translateY(20px) scale(.95);transition:all .3s ease;z-index:999}.chat-panel.is-open{opacity:1;visibility:visible;transform:translateY(0) scale(1)}.chat-header{background:var(--primary-color);color:#fff;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}.header-text{display:flex;flex-direction:column}.header-title{margin:0}.header-subtitle{opacity:.9}.back-button,.close-button{background:#fff3;border:none;border-radius:50%;width:32px;height:32px;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:background .2s ease}.back-button:hover,.close-button:hover{background:#ffffff4d}.back-button i,.close-button i{color:#fff;font-size:.875rem}.chat-content{flex:1;overflow:hidden;display:flex;flex-direction:column}.agents-list{overflow-y:auto;flex:1}.no-agents{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:2rem;text-align:center}.agents-subtitle{color:var(--p-text-muted-color);font-size:.875rem;margin:0 0 16px;text-align:center}.agent-card{display:flex;align-items:center;gap:12px;padding:12px;cursor:pointer;transition:all .2s ease;border-bottom:1px solid var(--p-surface-200)}.agent-card:hover{background:var(--p-surface-100)}.agent-card:last-child{margin-bottom:0}.agent-info{flex:1;min-width:0}.agent-name{margin:0 0 4px}.agent-description{margin:0;line-height:1.4;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;line-clamp:2;-webkit-line-clamp:2}.agent-arrow{color:var(--p-text-muted-color);font-size:.875rem;flex-shrink:0}@media (max-width: 768px){.chat-panel{width:100vw;height:100vh;height:-webkit-fill-available;height:100dvh;max-height:none;inset:0;border-radius:0;transform:translateY(100%)}.chat-panel.is-open{transform:translateY(0)}.bubble-button{bottom:16px;right:16px;width:56px;height:56px}.bubble-button.is-open{opacity:0;visibility:hidden;transform:scale(0)}.chat-content{flex:1;min-height:0;overflow:hidden}}\n"] }]
763
763
  }], ctorParameters: () => [{ type: undefined, decorators: [{
764
764
  type: Inject,
765
765
  args: [AI_AGENTS]
@@ -1 +1 @@
1
- {"version":3,"file":"sf-aiembedded.mjs","sources":["../../../projects/general-agent/src/lib/agents-backend.port.ts","../../../projects/general-agent/src/lib/general-agent/services/agent.service.ts","../../../projects/general-agent/src/lib/general-agent/types/text/text.component.ts","../../../projects/general-agent/src/lib/general-agent/types/text/text.component.html","../../../projects/general-agent/src/lib/general-agent/types/file/file.component.ts","../../../projects/general-agent/src/lib/general-agent/types/file/file.component.html","../../../projects/general-agent/src/lib/general-agent/types/table/table.component.ts","../../../projects/general-agent/src/lib/general-agent/types/table/table.component.html","../../../projects/general-agent/src/lib/general-agent/types/markdown/markdown.component.ts","../../../projects/general-agent/src/lib/general-agent/types/markdown/markdown.component.html","../../../projects/general-agent/src/lib/general-agent/components/robot-icon/robot-icon.component.ts","../../../projects/general-agent/src/lib/general-agent/components/robot-icon/robot-icon.component.html","../../../projects/general-agent/src/lib/general-agent/components/agent-avatar/agent-avatar.component.ts","../../../projects/general-agent/src/lib/general-agent/components/agent-avatar/agent-avatar.component.html","../../../projects/general-agent/src/lib/general-agent/components/messages/messages.component.ts","../../../projects/general-agent/src/lib/general-agent/components/messages/messages.component.html","../../../projects/general-agent/src/lib/general-agent/components/input/input.component.ts","../../../projects/general-agent/src/lib/general-agent/components/input/input.component.html","../../../projects/general-agent/src/lib/general-agent/general-agent.component.ts","../../../projects/general-agent/src/lib/general-agent/general-agent.component.html","../../../projects/general-agent/src/lib/general-agent/components/bubble-chat/bubble-chat.component.ts","../../../projects/general-agent/src/lib/general-agent/components/bubble-chat/bubble-chat.component.html","../../../projects/general-agent/src/lib/general-agent/agents/bubble-chat/bubble-agent.component.ts","../../../projects/general-agent/src/lib/general-agent/agents/bubble-chat/bubble-agent.component.html","../../../projects/general-agent/src/public-api.ts","../../../projects/general-agent/src/sf-aiembedded.ts"],"sourcesContent":["// projects/general-agent/src/lib/agents-backend.port.ts\r\nimport { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\nexport interface AiAgentsGatewayService {\r\n getAgent(idKatios: string, agentId: string): Promise<any>;\r\n sendMessage(idKatios: string, agentId: string, req: {\r\n conversationId?: string;\r\n text: string;\r\n files: Array<{fileName:string; contentType:string; base64Data:string;}>;\r\n metadata?: any;\r\n }): Promise<{\r\n conversationId: string;\r\n messages: Array<{ role?: string; type?: string; content: any }>;\r\n }>;\r\n transcribeAudio(idKatios: string, audio:File): Promise<string>;\r\n getAgents(idKatios: string, ndoc: string, tdoc: string): Observable<any>;\r\n}\r\n\r\nexport const AI_AGENTS = new InjectionToken<AiAgentsGatewayService>('AI_AGENTS');\r\n","import { ChangeDetectorRef, Inject, Injectable, NgZone } from '@angular/core';\r\nimport { AI_AGENTS, AiAgentsGatewayService } from '../../agents-backend.port';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { ChatMessage, HeaderConfig } from '../models/agent.model';\r\n\r\n@Injectable()\r\nexport class AgentService {\r\n // Propiedades internas (ya no inputs/outputs)\r\n // Propiedades para notificar cambios a los componentes que usan el servicio\r\n private readonly messagesSubject = new BehaviorSubject<ChatMessage[]>([]);\r\n readonly messages$ = this.messagesSubject.asObservable();\r\n private readonly isBotWrittingSubject = new BehaviorSubject<boolean>(false);\r\n readonly isBotWritting$ = this.isBotWrittingSubject.asObservable();\r\n private readonly isRecordingSubject = new BehaviorSubject<boolean>(false);\r\n readonly isRecording$ = this.isRecordingSubject.asObservable();\r\n private readonly isLoadingSubject = new BehaviorSubject<boolean>(false);\r\n readonly isLoading$ = this.isLoadingSubject.asObservable();\r\n private readonly headerConfigSubject = new BehaviorSubject<HeaderConfig | undefined>(undefined);\r\n readonly headerConfig$ = this.headerConfigSubject.asObservable();\r\n private readonly selectedFilesSubject = new BehaviorSubject<File[]>([]);\r\n readonly selectedFiles$ = this.selectedFilesSubject.asObservable();\r\n private mediaRecorder?: MediaRecorder;\r\n private audioChunks: BlobPart[] = [];\r\n private recordingStream?: MediaStream;\r\n _agentInfo: any;\r\n _configuration: any;\r\n _sessionId: string = '';\r\n _agentId = '';\r\n _idKatios = '';\r\n\r\n\r\n constructor(\r\n @Inject(AI_AGENTS) private aiAgentsGatewayService: AiAgentsGatewayService,\r\n private zone: NgZone\r\n ) { }\r\n\r\n get agentId() {\r\n return this._agentId;\r\n }\r\n set agentId(value: string) {\r\n this._agentId = value;\r\n }\r\n\r\n get idKatios() {\r\n return this._idKatios;\r\n }\r\n\r\n set idKatios(value: string) {\r\n this._idKatios = value;\r\n }\r\n\r\n\r\n set agentInfo(value: any) {\r\n this._agentInfo = value;\r\n }\r\n\r\n get agentInfo(): any {\r\n return this._agentInfo;\r\n }\r\n\r\n set selectedFiles(files: File[]) {\r\n this.selectedFilesSubject.next(files);\r\n }\r\n\r\n get selectedFiles(): File[] {\r\n return this.selectedFilesSubject.value;\r\n }\r\n\r\n set sessionId(value: string) {\r\n this._sessionId = value;\r\n }\r\n\r\n get sessionId(): string {\r\n return this._sessionId;\r\n }\r\n\r\n set isRecording(value: boolean) {\r\n this.isRecordingSubject.next(value);\r\n }\r\n\r\n get isRecording(): boolean {\r\n return this.isRecordingSubject.value;\r\n }\r\n\r\n set headerConfig(value: HeaderConfig | undefined) {\r\n this.headerConfigSubject.next(value);\r\n }\r\n\r\n get headerConfig(): HeaderConfig | undefined {\r\n return this.headerConfigSubject.value;\r\n }\r\n\r\n set isLoading(value: boolean) {\r\n this.isLoadingSubject.next(value);\r\n }\r\n\r\n get isLoading(): boolean {\r\n return this.isLoadingSubject.value;\r\n }\r\n\r\n set isBotWritting(isWritting: boolean) {\r\n this.isBotWrittingSubject.next(isWritting);\r\n }\r\n\r\n get isBotWritting(): boolean {\r\n return this.isBotWrittingSubject.value;\r\n }\r\n\r\n addMessage(message: ChatMessage) {\r\n const next = [...this.messagesSubject.value, message];\r\n this.messagesSubject.next(next);\r\n }\r\n\r\n clearMessages() {\r\n this.messagesSubject.next([]);\r\n }\r\n\r\n addFile(file: File) {\r\n const next = [...this.selectedFilesSubject.value, file];\r\n this.selectedFilesSubject.next(next);\r\n }\r\n\r\n addFullMessages(messages: ChatMessage[]) {\r\n const next = [...this.messagesSubject.value, ...messages];\r\n this.messagesSubject.next(next);\r\n }\r\n\r\n\r\n async loadAgent() {\r\n this.isLoading = true;\r\n this.isBotWritting = false;\r\n this.clearMessages();\r\n this.sessionId = \"\";\r\n try {\r\n\r\n const agentInfo = await this.aiAgentsGatewayService.getAgent(this.idKatios, this.agentId) as any;\r\n if (agentInfo.statusCode === 200) {\r\n this.agentInfo = JSON.parse(agentInfo.data.rawConfig);\r\n let configurationAgent = null;\r\n if (this.agentInfo.config?.i18n?.en) {\r\n configurationAgent = this.agentInfo.config?.i18n.en;\r\n }\r\n else {\r\n configurationAgent = this.agentInfo.config?.setUp;\r\n }\r\n\r\n this.headerConfig = {\r\n title: configurationAgent.title,\r\n subtitle: configurationAgent.subtitle,\r\n initialMessages: this.agentInfo.config.initialMessages,\r\n placeholder: configurationAgent.inputPlaceholder,\r\n footer: configurationAgent.footer\r\n };\r\n\r\n this.isLoading = false;\r\n }\r\n } catch (error) {\r\n console.error('An error occurred:', error);\r\n this.isLoading = false;\r\n }\r\n }\r\n\r\n get isInitial(): boolean {\r\n return this.messagesSubject.value.length === 0 && !this.isBotWritting;\r\n }\r\n\r\n /**\r\n * Converts File objects to Attachment format expected by the backend\r\n */\r\n private async convertFilesToAttachments(files: File[]): Promise<any[]> {\r\n if (!files || files.length === 0) {\r\n return [];\r\n }\r\n\r\n const attachments = [];\r\n for (const file of files) {\r\n try {\r\n const base64Data = await this.fileToBase64(file);\r\n const attachment = {\r\n fileName: file.name,\r\n contentType: file.type,\r\n base64Data: base64Data\r\n };\r\n attachments.push(attachment);\r\n } catch (error) {\r\n console.error(`Error converting file ${file.name} to base64:`, error);\r\n }\r\n }\r\n\r\n return attachments;\r\n }\r\n\r\n /**\r\n * Converts a File object to base64 string\r\n */\r\n private fileToBase64(file: File): Promise<string> {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => {\r\n // Remove the data URL prefix (e.g., \"data:image/png;base64,\")\r\n const base64String = (reader.result as string).split(',')[1];\r\n resolve(base64String);\r\n };\r\n reader.onerror = error => reject(error);\r\n });\r\n }\r\n\r\n async send(userInput: string) {\r\n this.isBotWritting = true;\r\n\r\n let text = userInput.trim();\r\n try {\r\n\r\n\r\n if (!text) {\r\n this.isBotWritting = false;\r\n return;\r\n }\r\n\r\n // 2️⃣ Pintar mensaje usuario\r\n this.addMessage({ role: 'user', type: 'text', content: text });\r\n\r\n // 3️⃣ Enviar SOLO texto al agente\r\n const requestData = {\r\n conversationId: this.sessionId,\r\n text,\r\n files: [],\r\n metadata: {}\r\n };\r\n\r\n const response = await this.aiAgentsGatewayService.sendMessage(\r\n this.idKatios,\r\n this.agentId,\r\n requestData\r\n ) as any;\r\n\r\n //this.userInput = '';\r\n this.selectedFiles = [];\r\n\r\n // Asegurar que Angular detecte los cambios después del await\r\n if (response.success) {\r\n this.sessionId = response.data.conversationId;\r\n const incoming = response.data.messages.map((m: any) => ({\r\n role: m.role,\r\n type: m.type || 'markdown',\r\n content: m.content\r\n }));\r\n this.addFullMessages(incoming);\r\n }\r\n } catch (error) {\r\n console.error('Error en send:', error);\r\n this.addMessage({ role: 'assistant', type: 'error', content: 'Ocurrió un error al enviar el mensaje' });\r\n }\r\n finally {\r\n this.isBotWritting = false;\r\n }\r\n }\r\n async startRecording() {\r\n try {\r\n // pide permiso al micrófono\r\n this.recordingStream = await navigator.mediaDevices.getUserMedia({ audio: true });\r\n\r\n // mimeType: mejor opción común en Chrome/Edge\r\n const mimeType = MediaRecorder.isTypeSupported('audio/webm;codecs=opus')\r\n ? 'audio/webm;codecs=opus'\r\n : 'audio/webm';\r\n\r\n this.audioChunks = [];\r\n this.mediaRecorder = new MediaRecorder(this.recordingStream, { mimeType });\r\n\r\n this.mediaRecorder.ondataavailable = (e: BlobEvent) => {\r\n if (e.data && e.data.size > 0) this.audioChunks.push(e.data);\r\n };\r\n\r\n this.mediaRecorder.onstop = () => {\r\n // Asegura que Angular se entere de todo lo que pase aquí\r\n this.zone.run(async () => {\r\n try {\r\n const blob = new Blob(this.audioChunks, { type: mimeType });\r\n const fileName = `audio_${new Date().toISOString().replace(/[:.]/g, '-')}.webm`;\r\n const audioFile = new File([blob], fileName, { type: mimeType });\r\n\r\n this.audioChunks = [];\r\n\r\n await this.sendVoiceMessage(audioFile);\r\n } catch (e) {\r\n console.error('Error procesando audio:', e);\r\n }\r\n });\r\n };\r\n\r\n this.mediaRecorder.start();\r\n this.isRecording = true;\r\n } catch (err) {\r\n console.error('No se pudo iniciar la grabación:', err);\r\n this.isRecording = false;\r\n }\r\n }\r\n private async sendVoiceMessage(audioFile: File) {\r\n\r\n\r\n try {\r\n const sttText = await this.aiAgentsGatewayService.transcribeAudio(this.idKatios, audioFile);\r\n const text = (sttText || '').trim();\r\n if (!text) return;\r\n\r\n // Render inmediato del mensaje del usuario\r\n this.zone.run(() => {\r\n this.addMessage({ role: 'user', type: 'text', content: text });\r\n this.isBotWritting = true;\r\n });\r\n\r\n const requestData = {\r\n conversationId: this.sessionId,\r\n text,\r\n files: [],\r\n metadata: { source: 'voice' }\r\n };\r\n\r\n const response = await this.aiAgentsGatewayService.sendMessage(\r\n this.idKatios,\r\n this.agentId,\r\n requestData\r\n ) as any;\r\n\r\n // Asegurar que Angular detecte los cambios después del await\r\n this.zone.run(() => {\r\n if (response?.success && response?.data) {\r\n this.sessionId = response.data.conversationId;\r\n\r\n const incoming = response.data.messages.map((m: any) => ({\r\n role: m.role || 'assistant',\r\n type: m.type || 'markdown',\r\n content: m.content\r\n }));\r\n this.addFullMessages(incoming);\r\n }\r\n });\r\n\r\n } catch (err) {\r\n console.error('Error en sendVoiceMessage:', err);\r\n } finally {\r\n this.zone.run(() => {\r\n this.isBotWritting = false;\r\n });\r\n }\r\n }\r\n stopRecording() {\r\n try {\r\n if (this.mediaRecorder && this.mediaRecorder.state !== 'inactive') {\r\n this.mediaRecorder.stop();\r\n }\r\n\r\n // detener pistas del micrófono (importantísimo para liberar el icono de mic)\r\n if (this.recordingStream) {\r\n this.recordingStream.getTracks().forEach(t => t.stop());\r\n this.recordingStream = undefined;\r\n }\r\n\r\n } finally {\r\n this.isRecording = false;\r\n }\r\n }\r\n\r\n uploadFile(e: any) {\r\n const input = e.target as HTMLInputElement;\r\n if (input.files && input.files.length > 0) {\r\n const newFiles = Array.from(input.files);\r\n\r\n // Agrega los archivos nuevos sin duplicar por nombre\r\n for (const file of newFiles) {\r\n if (!this.selectedFiles.some(f => f.name === file.name && f.size === file.size)) {\r\n this.addFile(file);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { InputMode } from '../../models/agent.model';\r\n//import { Avatar } from 'primeng/avatar';\r\n\r\n@Component({\r\n selector: 'app-text',\r\n standalone: true,\r\n imports: [CommonModule,FormsModule],\r\n templateUrl: './text.component.html',\r\n styleUrl: './text.component.scss'\r\n})\r\nexport class TextComponent {\r\n @Input() text: string = '';\r\n @Input() role: string = '';\r\n}\r\n","<div\r\nclass=\"px-3 py-2 border-round-bottom-xl w-fit\"\r\n[ngClass]=\"role !== 'user' ? 'bg-white border-round-right-xl' : 'border-round-left-xl border-round-right-sm bg-primary text-white'\"\r\n>\r\n<span class=\"text-base m-0 whitespace-normal\" style=\"word-break: break-word;\">{{text}}</span>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Avatar } from 'primeng/avatar';\r\nimport { ButtonModule } from 'primeng/button';\r\n\r\n@Component({\r\n selector: 'app-file',\r\n standalone: true,\r\n imports: [CommonModule,FormsModule,ButtonModule,Avatar],\r\n templateUrl: './file.component.html',\r\n styleUrl: './file.component.scss'\r\n})\r\nexport class FileComponent {\r\n @Input() files: File[] = [];\r\n @Input() role: string = 'assistant';\r\n @Input() remove: boolean = false;\r\n\r\n getFileIcon(mime: string): string {\r\n if (mime.includes('pdf')) return 'pi pi-file-pdf';\r\n if (mime.includes('image')) return 'pi pi-image';\r\n if (mime.includes('audio')) return 'pi pi-volume-up';\r\n if (mime.includes('video')) return 'pi pi-video';\r\n if (mime.includes('zip')) return 'pi pi-file-zip';\r\n if (mime.includes('xlsx')) return 'pi pi-file-excel';\r\n return 'pi pi-file';\r\n }\r\n getFileClasses(mime: string): string {\r\n if (mime.includes('pdf')) return 'bg-red-500 border-red-800 text-white';\r\n if (mime.includes('image')) return 'bg-gray-100 border-gray-200 text-white';\r\n if (mime.includes('audio')) return 'bg-blue-500 border-blue-800 text-white';\r\n if (mime.includes('video')) return 'bg-yellow-500 border-yellow-800 text-white';\r\n if (mime.includes('zip')) return 'bg-indigo-500 border-indigo-800 text-white';\r\n if (mime.includes('xlsx')) return 'bg-green-500 border-green-800 text-white';\r\n return 'bg-gray-100 border-3 border-gray-200 text-gray-500';\r\n }\r\n removeSelectedFile(i: number) {\r\n this.files.splice(i,1);\r\n }\r\n getGridClass(){\r\n const fileCount = this.files.length;\r\n if (fileCount === 1) {\r\n return 'col-12';\r\n } else if (fileCount === 2) {\r\n return 'col-12 sm:col-6';\r\n } else {\r\n return 'col-12 sm:col-6 md:col-4';\r\n }\r\n }\r\n\r\n}\r\n","<div *ngIf=\"!remove\" class=\"grid w-full m-o\" [ngClass]=\"role !== 'user' ? 'items-start justify-content-start' : 'items-end justify-content-end'\">\r\n <div *ngFor=\"let file of files\" [ngClass]=\"getGridClass()\">\r\n <div class=\"flex align-items-center gap-3 border-1 border-gray-300 border-round-2xl p-2 bg-gray-100 h-full\">\r\n <p-avatar class=\"p-1 border-1 avatar-responsive\" [ngClass]=\"getFileClasses(file.name)\" [icon]=\"getFileIcon(file.name)\"></p-avatar>\r\n <div class=\"flex flex-column overflow-hidden\" style=\"min-width: 0;\">\r\n <span class=\"font-semibold text-gray-500 text-sm md:text-base\" style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\">\r\n {{ file.name }}\r\n </span>\r\n <p class=\"text-xs text-gray-400 md:text-base\" style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\">\r\n ({{ file.type || 'Archivo' }})\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"remove\" class=\"grid w-full\">\r\n <div *ngFor=\"let file of files; let i = index\" class=\"col-12 sm:col-6 md:col-4\">\r\n <div class=\"relative border-1 border-gray-300 border-round-xl p-2 h-full\">\r\n <p-button icon=\"pi pi-times\" [rounded]=\"true\" variant=\"text\" severity=\"secondary\" class=\"no-hover absolute top-0 right-0 z-1\" (click)=\"removeSelectedFile(i)\" size=\"small\"/>\r\n <div class=\"flex align-items-center gap-3\">\r\n <p-avatar \r\n class=\"p-1 border-1 avatar-responsive\"\r\n [ngClass]=\"getFileClasses(file.name)\" \r\n [icon]=\"getFileIcon(file.name)\" \r\n >\r\n </p-avatar>\r\n \r\n <div class=\"flex flex-column overflow-hidden\" style=\"min-width: 0;\">\r\n <span class=\"font-semibold text-gray-500 md:text-base text-sm\" \r\n style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\">\r\n {{ file.name }}\r\n </span>\r\n <p class=\"text-xs text-gray-400 md:text-base\" \r\n style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\">\r\n ({{ file.type || 'archivo' }})\r\n </p>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</div>","import { Component, Input } from '@angular/core';\r\n\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'app-table',\r\n imports: [CommonModule],\r\n templateUrl: './table.component.html',\r\n styleUrl: './table.component.scss'\r\n})\r\nexport class TableComponent {\r\n @Input() table: string = \"\";\r\n}\r\n","<div\r\n *ngIf=\"table\"\r\n class=\"mt-2 overflow-auto\"\r\n [innerHTML]=\"table\"\r\n style=\"max-width: 100%; overflow-x: auto;\"\r\n></div>","import { Component, Input, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { marked, RendererObject } from 'marked';\r\nimport hljs from 'highlight.js';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Avatar } from 'primeng/avatar';\r\nimport { AgentAvatarComponent } from '../../components/agent-avatar/agent-avatar.component';\r\n\r\n// marked.setOptions({\r\n// highlight: (code, lang) => {\r\n// if (lang && hljs.getLanguage(lang)) {\r\n// return hljs.highlight(code, { language: lang }).value;\r\n// }\r\n// return hljs.highlightAuto(code).value;\r\n// }\r\n// });\r\n\r\nconst renderer: RendererObject = {\r\n link(token) {\r\n const href = token.href ?? '';\r\n const title = token.title ? ` title=\"${token.title}\"` : '';\r\n const text = token.text ?? token.raw ?? href;\r\n\r\n return `<a href=\"${href}\"${title} target=\"_blank\" rel=\"noopener noreferrer\">${text}</a>`;\r\n },\r\n table(token) {\r\n const header = token.header?.map((cell: { text: string }) => `<th>${cell.text}</th>`).join('') ?? '';\r\n const rows = token.rows?.map((row: { text: string }[]) => \r\n `<tr>${row.map(cell => `<td>${cell.text}</td>`).join('')}</tr>`\r\n ).join('') ?? '';\r\n \r\n return `<div class=\"table-wrapper\"><table><thead><tr>${header}</tr></thead><tbody>${rows}</tbody></table></div>`;\r\n },\r\n};\r\n\r\nmarked.use({ renderer });\r\n\r\n@Component({\r\n selector: 'app-markdown',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './markdown.component.html',\r\n styleUrl: './markdown.component.scss',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class MarkdownComponent implements OnChanges {\r\n @Input() content = '';\r\n safeHtml: SafeHtml = '';\r\n constructor(private sanitizer: DomSanitizer) {}\r\n\r\n\r\n async ngOnChanges(changes: SimpleChanges) {\r\n if ('content' in changes) {\r\n const rawHtml = await marked.parse(this.content || '');\r\n this.safeHtml = this.sanitizer.bypassSecurityTrustHtml(rawHtml);\r\n console.log(this.safeHtml);\r\n }\r\n }\r\n}\r\n","<div class=\"markdown-wrapper\">\r\n <div class=\"markdown-container\" [innerHTML]=\"safeHtml\"></div>\r\n</div>","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-robot-icon',\r\n imports: [],\r\n templateUrl: './robot-icon.component.html',\r\n styleUrl: './robot-icon.component.css',\r\n host: {\r\n style: 'display: inline-flex; width: 1.5em; height: 1.5em;'\r\n }\r\n})\r\nexport class RobotIconComponent {\r\n\r\n}\r\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\" width=\"100%\" height=\"100%\" fill=\"currentColor\">\r\n <path d=\"M440-120v-80h320v-284q0-117-81.5-198.5T480-764q-117 0-198.5 81.5T200-484v244h-40q-33 0-56.5-23.5T80-320v-80q0-21 10.5-39.5T120-469l3-53q8-68 39.5-126t79-101q47.5-43 109-67T480-840q68 0 129 24t109 66.5Q766-707 797-649t40 126l3 52q19 9 29.5 27t10.5 38v92q0 20-10.5 38T840-249v49q0 33-23.5 56.5T760-120H440Zm-80-280q-17 0-28.5-11.5T320-440q0-17 11.5-28.5T360-480q17 0 28.5 11.5T400-440q0 17-11.5 28.5T360-400Zm240 0q-17 0-28.5-11.5T560-440q0-17 11.5-28.5T600-480q17 0 28.5 11.5T640-440q0 17-11.5 28.5T600-400Zm-359-62q-7-106 64-182t177-76q89 0 156.5 56.5T720-519q-91-1-167.5-49T435-698q-16 80-67.5 142.5T241-462Z\"/>\r\n</svg>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, input } from '@angular/core';\r\nimport { Avatar } from 'primeng/avatar';\r\nimport { RobotIconComponent } from '../robot-icon/robot-icon.component';\r\n\r\n@Component({\r\n selector: 'lib-agent-avatar',\r\n imports: [CommonModule, Avatar, RobotIconComponent],\r\n templateUrl: './agent-avatar.component.html',\r\n styleUrl: './agent-avatar.component.scss'\r\n})\r\nexport class AgentAvatarComponent {\r\n @Input() size: \"normal\" | \"large\" | \"xlarge\" | undefined = 'large';\r\n}\r\n","<p-avatar [size]=\"size\" class=\"agent-avatar\" shape=\"circle\">\r\n <lib-robot-icon style=\"color: var(--primary-color)\"></lib-robot-icon>\r\n</p-avatar> \r\n\r\n","import { AfterViewChecked, Component, ElementRef, Input, ViewChild } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { TextComponent } from '../../types/text/text.component';\r\nimport { FileComponent } from '../../types/file/file.component';\r\nimport { TableComponent } from '../../types/table/table.component';\r\nimport { MarkdownComponent } from '../../types/markdown/markdown.component';\r\nimport { ChatMessage } from '../../models/agent.model';\r\nimport { AgentAvatarComponent } from \"../agent-avatar/agent-avatar.component\";\r\nimport { MessageModule } from 'primeng/message';\r\n@Component({\r\n selector: 'lib-messages',\r\n imports: [CommonModule, FormsModule, ButtonModule, TextComponent, FileComponent, TableComponent, MarkdownComponent, AgentAvatarComponent, MessageModule],\r\n templateUrl: './messages.component.html',\r\n styleUrl: './messages.component.scss',\r\n host: {\r\n 'class': 'block h-full w-full overflow-hidden'\r\n }\r\n})\r\nexport class MessagesComponent implements AfterViewChecked {\r\n @ViewChild('chatContainer') private chatContainer!: ElementRef<HTMLDivElement>;\r\n @Input() messages: ChatMessage[] = [];\r\n @Input() isBotWritting: boolean = false;\r\n @Input() scrollMode: 'edge' | 'inline' = 'edge';\r\n @Input() agentIcon: string = 'pi pi-sparkles';\r\n \r\n ngAfterViewChecked() {\r\n this.scrollToBottom();\r\n }\r\n\r\n private scrollToBottom(behavior: ScrollBehavior = 'smooth'): void {\r\n if (!this.chatContainer) return;\r\n const el = this.chatContainer.nativeElement;\r\n el.scrollTo({ top: el.scrollHeight, behavior });\r\n }\r\n\r\n}\r\n","<div class=\"messages-container\" [class.scroll-inline]=\"scrollMode === 'inline'\" #chatContainer>\r\n <div class=\"messages-content\">\r\n <div *ngFor=\"let msg of messages\" class=\"message-item\">\r\n <div class=\"flex w-full\" [ngClass]=\"msg.role !== 'user' ? 'justify-content-start' : 'justify-content-end'\">\r\n <div [ngClass]=\"msg.role !== 'user' ? 'message-bot' : 'message-user'\">\r\n <app-table *ngIf=\"msg.type === 'table'\" [table]=\"msg.content\"></app-table>\r\n <app-file *ngIf=\"msg.type === 'file'\" [files]=\"msg.content\" [role]=\"msg.role\"></app-file>\r\n <app-text *ngIf=\"msg.type === 'text'\" [text]=\"msg.content\" [role]=\"msg.role\"></app-text>\r\n <div [ngClass]=\"msg.role !== 'user' ? 'flex items-start gap-2' : ''\" *ngIf=\"msg.type === 'markdown'\">\r\n <lib-agent-avatar *ngIf=\"msg.role !== 'user'\" size=\"normal\"></lib-agent-avatar>\r\n <app-markdown [content]=\"msg.content\"></app-markdown>\r\n </div>\r\n <div *ngIf=\"msg.type === 'error'\" class=\"message-item\">\r\n <div class=\"flex gap-2 message-bot\">\r\n <lib-agent-avatar size=\"normal\"></lib-agent-avatar>\r\n <p-message severity=\"error\">{{msg.content}}</p-message>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isBotWritting\" class=\"message-item\">\r\n <div class=\"flex gap-2 message-bot\">\r\n <lib-agent-avatar size=\"normal\"></lib-agent-avatar>\r\n <div\r\n class=\"w-fit\">\r\n <span class=\"typing-dots\">\r\n <span class=\"dot\"></span>\r\n <span class=\"dot\"></span>\r\n <span class=\"dot\"></span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div #bottom></div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, input, Output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { ChipModule } from 'primeng/chip';\r\nimport { Textarea } from 'primeng/textarea';\r\nimport { FileComponent } from '../../types/file/file.component';\r\nimport { HeaderConfig, InputMode } from '../../models/agent.model';\r\n\r\n@Component({\r\n selector: 'lib-input',\r\n imports: [CommonModule, FormsModule, ButtonModule, Textarea, ChipModule, FileComponent],\r\n templateUrl: './input.component.html',\r\n styleUrl: './input.component.scss',\r\n host: {\r\n 'class': 'block w-full',\r\n '[class.inputModeDefault]': 'mode === \"default\"',\r\n '[class.inputModeBubble]': 'mode === \"bubble\"',\r\n }\r\n})\r\nexport class InputComponent {\r\n @Input() files: File[] = [];\r\n @Input() isRecording: boolean = false;\r\n @Input() isLoading: boolean = false;\r\n @Input() isBotWritting: boolean = false;\r\n @Input() header: HeaderConfig | undefined;\r\n @Input() mode: InputMode = 'default';\r\n @Output() sendInput = new EventEmitter<string>();\r\n @Output() startRecording = new EventEmitter<void>();\r\n @Output() stopRecording = new EventEmitter<void>();\r\n @Output() uploadFile = new EventEmitter<any>();\r\n userInput: string = '';\r\n\r\n handleKeyDown(event: KeyboardEvent) {\r\n const trimmedInput = this.userInput?.trim();\r\n if (event.key === 'Enter' && !event.shiftKey) {\r\n if (!trimmedInput || this.isBotWritting || this.isLoading) {\r\n event.preventDefault();\r\n return;\r\n }\r\n event.preventDefault();\r\n this.sendInput.emit(trimmedInput);\r\n this.userInput = '';\r\n }\r\n }\r\n\r\n send() {\r\n const trimmedInput = this.userInput?.trim();\r\n if (!trimmedInput || this.isBotWritting) {\r\n return;\r\n }\r\n this.sendInput.emit(trimmedInput);\r\n this.userInput = '';\r\n }\r\n\r\n}\r\n","<div class=\"input-wrapper input-default\">\r\n <app-file [files]=\"files || []\" role=\"assitant\" [remove]=\"true\" />\r\n <form (ngSubmit)=\"send()\" class=\"w-full flex flex-column gap-2\">\r\n <textarea pTextarea id=\"input\" name=\"userInput\" [(ngModel)]=\"userInput\"\r\n class=\"custom-input w-full text-base\" style=\"max-height: 200px\"\r\n [placeholder]=\"header?.placeholder || ''\" rows=\"1\" [autoResize]=\"true\"\r\n (keydown)=\"handleKeyDown($event)\"></textarea>\r\n <div class=\"flex align-items-center justify-content-between w-full\">\r\n\r\n <p-button icon=\"pi pi-paperclip\" [text]=\"true\" (click)=\"fileInputChat.click()\"\r\n [rounded]=\"true\" />\r\n <input type=\"file\" #fileInputChat multiple (change)=\"uploadFile.emit($event)\" style=\"display: none;\">\r\n\r\n <div class=\"flex align-items-center justify-content-end w-full gap-2\">\r\n <p-button *ngIf=\"!isRecording\" icon=\"pi pi-microphone\" [text]=\"true\" (click)=\"startRecording.emit()\"\r\n [rounded]=\"true\" />\r\n <p-button *ngIf=\"isRecording\" icon=\"pi pi-stop\" [text]=\"true\" (click)=\"stopRecording.emit()\"\r\n severity=\"danger\" [rounded]=\"true\" />\r\n <p-button icon=\"pi pi-send\" [rounded]=\"true\" type=\"submit\"\r\n [disabled]=\"isLoading || isBotWritting || (!userInput.trim() && (!files || files.length === 0))\" />\r\n </div>\r\n </div>\r\n </form>\r\n</div>","import { Component, Input, inject, SimpleChanges, OnChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { TagModule } from 'primeng/tag';\r\nimport { ChipModule } from 'primeng/chip';\r\nimport { AgentService } from './services/agent.service';\r\nimport { MessagesComponent } from './components/messages/messages.component';\r\nimport { Skeleton } from 'primeng/skeleton';\r\nimport { combineLatest } from 'rxjs';\r\nimport { InputComponent } from './components/input/input.component';\r\nimport { AgentAvatarComponent } from './components/agent-avatar/agent-avatar.component';\r\n\r\n@Component({\r\n selector: 'app-general-agent',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, ButtonModule, AgentAvatarComponent, TagModule, ChipModule, MessagesComponent, Skeleton, InputComponent],\r\n templateUrl: './general-agent.component.html',\r\n styleUrl: './general-agent.component.scss',\r\n providers: [AgentService],\r\n host: {\r\n 'class': 'block w-full h-full'\r\n }\r\n})\r\nexport class GeneralAgentComponent implements OnChanges {\r\n\r\n // Propiedades internas (ya no inputs/outputs)\r\n agentService = inject(AgentService);\r\n\r\n messages$ = this.agentService.messages$;\r\n isBotWritting$ = this.agentService.isBotWritting$;\r\n headerConfig$ = this.agentService.headerConfig$;\r\n isRecording$ = this.agentService.isRecording$;\r\n selectedFiles$ = this.agentService.selectedFiles$;\r\n isLoading$ = this.agentService.isLoading$;\r\n vm$ = combineLatest({\r\n header: this.headerConfig$,\r\n files: this.selectedFiles$,\r\n isRec: this.isRecording$,\r\n bot: this.isBotWritting$,\r\n messages: this.messages$,\r\n loading: this.isLoading$\r\n});\r\n\r\n @Input() agentId = '';\r\n @Input() idKatios = '';\r\n /** 'edge' = scroll en el borde del contenedor, 'inline' = scroll pegado al chat */\r\n @Input() scrollMode: 'edge' | 'inline' = 'edge';\r\n\r\n\r\n async ngOnChanges(changes: SimpleChanges) {\r\n if (changes['agentId'] || changes['idKatios']) {\r\n await this.initAgent();\r\n }\r\n }\r\n\r\n async initAgent(){\r\n this.agentService.agentId = this.agentId;\r\n this.agentService.idKatios = this.idKatios;\r\n await this.agentService.loadAgent();\r\n }\r\n\r\n\r\n \r\n\r\n}\r\n","<ng-container *ngIf=\"vm$ | async as vm\">\r\n <!-- Vista inicial (bienvenida) -->\r\n <div *ngIf=\"agentService.isInitial\" class=\"custom-chat flex flex-column items-center justify-content-center w-full\">\r\n <div class=\"flex flex-column items-center justify-content-center gap-4 p-3 mb-3 text-center md:p-1\">\r\n <h2 *ngIf=\"!vm.loading\" class=\"text-3xl font-semibold text-gray-900 lg:text-4xl\">{{vm.header?.title ||\r\n 'Agente'}}</h2>\r\n <p-skeleton *ngIf=\"vm.loading\" width=\"25rem\" height=\"2rem\" borderRadius=\"16px\"></p-skeleton>\r\n <div\r\n class=\"flex items-start justify-content-center gap-2\">\r\n <lib-agent-avatar [size]=\"'large'\"></lib-agent-avatar>\r\n <div *ngIf=\"vm.header?.initialMessages && !vm.loading\" class=\"flex flex-column items-start\">\r\n <div *ngFor=\"let msg of vm.header?.initialMessages\" class=\"text-left\">\r\n <span class=\"m-0 text-gray-700 text-base lg:text-lg\">{{msg}}</span>\r\n </div>\r\n </div>\r\n <div class=\"flex flex-column gap-2\">\r\n <p-skeleton *ngIf=\"vm.loading\" width=\"5rem\" borderRadius=\"16px\"></p-skeleton>\r\n <p-skeleton *ngIf=\"vm.loading\" width=\"15rem\" borderRadius=\"16px\"></p-skeleton>\r\n </div>\r\n </div>\r\n <p *ngIf=\"!vm.loading\" class=\"text-base text-gray-500\">{{vm.header?.subtitle}}</p>\r\n <p-skeleton *ngIf=\"vm.loading\" width=\"17rem\" borderRadius=\"16px\"></p-skeleton>\r\n </div>\r\n <!-- Input centrado para vista inicial -->\r\n <div class=\"flex flex-column items-center justify-content-center custom-size w-full pt-1 pb-1\">\r\n <lib-input [files]=\"vm.files || []\" [isRecording]=\"vm.isRec || false\" [isLoading]=\"vm.loading || false\" [isBotWritting]=\"vm.bot || false\" [header]=\"vm.header\" (sendInput)=\"agentService.send($event)\" (startRecording)=\"agentService.startRecording()\" (stopRecording)=\"agentService.stopRecording()\" (uploadFile)=\"agentService.uploadFile($event)\"></lib-input>\r\n <p class=\"mx-auto text-sm text-gray-600 mt-1\">{{vm.header?.footer}}</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Vista de chat (con mensajes) -->\r\n <div *ngIf=\"!agentService.isInitial\" class=\"custom-chat chat-layout flex flex-column w-full\">\r\n <!-- Área de mensajes con scroll -->\r\n <div class=\"messages-area flex-1 overflow-hidden\">\r\n <lib-messages [messages]=\"vm.messages || []\" [isBotWritting]=\"vm.bot || false\" [scrollMode]=\"scrollMode\"></lib-messages>\r\n </div>\r\n <!-- Input fijo abajo -->\r\n <div class=\"input-area flex flex-column items-center w-full py-2 px-2 md:px-0\">\r\n <div class=\"custom-size w-full\">\r\n <lib-input [files]=\"vm.files || []\" [isRecording]=\"vm.isRec || false\" [isLoading]=\"vm.loading || false\" [isBotWritting]=\"vm.bot || false\" [header]=\"vm.header\" (sendInput)=\"agentService.send($event)\" (startRecording)=\"agentService.startRecording()\" (stopRecording)=\"agentService.stopRecording()\" (uploadFile)=\"agentService.uploadFile($event)\"></lib-input>\r\n <p class=\"mx-auto text-sm text-gray-600 mt-1 text-center\">{{vm.header?.footer}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>","import { CommonModule } from '@angular/common';\r\nimport { Component, inject, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { MessagesComponent } from '../messages/messages.component';\r\nimport { InputComponent } from '../input/input.component';\r\nimport { AgentService } from '../../services/agent.service';\r\nimport { combineLatest } from 'rxjs';\r\nimport { ChatMessage } from '../../models/agent.model';\r\n\r\n@Component({\r\n selector: 'lib-bubble-chat',\r\n imports: [CommonModule, MessagesComponent, InputComponent],\r\n templateUrl: './bubble-chat.component.html',\r\n styleUrls: ['./bubble-chat.component.scss'],\r\n providers: [AgentService],\r\n host: {\r\n 'class': 'block w-full h-full',\r\n }\r\n})\r\nexport class BubbleChatComponent implements OnChanges {\r\n agentService = inject(AgentService);\r\n\r\n messages$ = this.agentService.messages$;\r\n isBotWritting$ = this.agentService.isBotWritting$;\r\n headerConfig$ = this.agentService.headerConfig$;\r\n isRecording$ = this.agentService.isRecording$;\r\n selectedFiles$ = this.agentService.selectedFiles$;\r\n isLoading$ = this.agentService.isLoading$;\r\n vm$ = combineLatest({\r\n header: this.headerConfig$,\r\n files: this.selectedFiles$,\r\n isRec: this.isRecording$,\r\n bot: this.isBotWritting$,\r\n messages: this.messages$,\r\n loading: this.isLoading$\r\n });\r\n @Input() agentId = '';\r\n @Input() idKatios = '';\r\n\r\n async ngOnChanges(changes: SimpleChanges) {\r\n if (changes['agentId'] || changes['agentType'] || changes['idKatios']) {\r\n await this.initAgent();\r\n this.addInitialMessages();\r\n }\r\n }\r\n\r\n async initAgent() {\r\n this.agentService.agentId = this.agentId;\r\n this.agentService.idKatios = this.idKatios;\r\n await this.agentService.loadAgent();\r\n }\r\n addInitialMessages() {\r\n const initialMessages: ChatMessage[] = [];\r\n this.agentService.headerConfig?.initialMessages?.map(msg => {\r\n initialMessages.push({\r\n role: 'assistant',\r\n type: 'markdown',\r\n content: msg\r\n });\r\n });\r\n this.agentService.addFullMessages(initialMessages);\r\n }\r\n\r\n}\r\n","<ng-container *ngIf=\"vm$ | async as vm\">\r\n <div class=\"chat-view\">\r\n <div class=\"messages-wrapper\">\r\n <lib-messages [messages]=\"vm.messages\" [isBotWritting]=\"vm.bot || vm.loading\" scrollMode=\"inline\" [agentIcon]=\"vm.header?.avatar || 'pi pi-sparkles'\">\r\n </lib-messages>\r\n </div>\r\n <div class=\"input-wrapper\">\r\n <lib-input mode=\"bubble\" [files]=\"vm.files || []\" [isRecording]=\"vm.isRec || false\" [isLoading]=\"vm.loading || false\"\r\n [isBotWritting]=\"vm.bot || vm.loading\" [header]=\"vm.header\" (sendInput)=\"agentService.send($event)\"\r\n (startRecording)=\"agentService.startRecording()\" (stopRecording)=\"agentService.stopRecording()\"\r\n (uploadFile)=\"agentService.uploadFile($event)\">\r\n </lib-input>\r\n </div>\r\n </div>\r\n</ng-container>","import { Component, Inject, Input, OnChanges, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { Agent } from '../../models/agent.model';\r\nimport { AI_AGENTS, AiAgentsGatewayService } from '../../../agents-backend.port';\r\nimport { BubbleChatComponent } from '../../components/bubble-chat/bubble-chat.component';\r\nimport { AgentAvatarComponent } from '../../components/agent-avatar/agent-avatar.component';\r\nimport { MessageService } from 'primeng/api';\r\nimport { RobotIconComponent } from '../../components/robot-icon/robot-icon.component';\r\n\r\n\r\n@Component({\r\n selector: 'lib-bubble-agent',\r\n standalone: true,\r\n imports: [CommonModule, ButtonModule, AgentAvatarComponent, BubbleChatComponent, RobotIconComponent],\r\n templateUrl: './bubble-agent.component.html',\r\n styleUrl: './bubble-agent.component.scss'\r\n})\r\nexport class BubbleAgentComponent implements OnChanges {\r\n @Input() idKatios = '';\r\n @Input() ndoc = '';\r\n @Input() tdoc = '';\r\n\r\n // Estado del componente\r\n isOpen = false;\r\n selectedAgent: Agent | null = null;\r\n agents: Agent[] = [];\r\n loading: boolean = false;\r\n\r\n constructor(\r\n @Inject(AI_AGENTS) private aiAgentsGatewayService: AiAgentsGatewayService,\r\n private messageService: MessageService\r\n ) { }\r\n\r\n ngOnChanges() {\r\n if (this.idKatios && this.ndoc && this.tdoc) {\r\n this.selectedAgent = null;\r\n this.agents = [];\r\n this.loading = true;\r\n this.aiAgentsGatewayService.getAgents(this.idKatios, this.ndoc, this.tdoc).subscribe({\r\n next: (response) => {\r\n if (response.data) this.agents = response.data;\r\n this.loading = false;\r\n },\r\n error: (err) => {\r\n console.error('Error al cargar agentes desde el servicio:', err);\r\n this.agents = [];\r\n this.messageService.add({ severity: 'error', summary: 'Error', detail: 'No se pudieron cargar los agentes. Por favor, inténtalo de nuevo más tarde.' });\r\n }\r\n });\r\n }\r\n }\r\n\r\n toggleChat() {\r\n this.isOpen = !this.isOpen;\r\n // Si se cierra, volver a la lista de agentes\r\n // if (!this.isOpen) {\r\n // this.selectedAgent = null;\r\n // this.messages = [];\r\n // }\r\n }\r\n\r\n selectAgent(agent: Agent) {\r\n this.selectedAgent = agent;\r\n }\r\n\r\n goBack() {\r\n this.selectedAgent = null;\r\n }\r\n}\r\n","<!-- Botón burbuja flotante -->\r\n<button class=\"bubble-button\" (click)=\"toggleChat()\" [class.is-open]=\"isOpen\">\r\n <i class=\"pi\" [ngClass]=\"isOpen ? 'pi-times' : 'pi-comments'\"></i>\r\n</button>\r\n\r\n<!-- Panel del chat -->\r\n<div class=\"chat-panel\" [class.is-open]=\"isOpen\">\r\n <!-- Header del panel -->\r\n <div class=\"p-3 chat-header\">\r\n <div class=\"flex align-items-center gap-2\">\r\n <button *ngIf=\"selectedAgent\" class=\"back-button\" (click)=\"goBack()\">\r\n <i class=\"pi pi-arrow-left\"></i>\r\n </button>\r\n <lib-robot-icon style=\"color: white\" *ngIf=\"selectedAgent\"></lib-robot-icon>\r\n <div class=\"header-text\">\r\n <p class=\"header-title text-white font-semibold text-lg\">{{ selectedAgent ? selectedAgent.key : 'Asistentes disponibles' }}</p>\r\n </div>\r\n </div>\r\n <button class=\"close-button\" (click)=\"toggleChat()\">\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n </div>\r\n\r\n <!-- Contenido del panel -->\r\n <div class=\"chat-content\">\r\n <!-- Vista de lista de agentes -->\r\n <div *ngIf=\"!selectedAgent\" class=\"agents-list\">\r\n <!-- Mensaje cuando no hay agentes -->\r\n <div *ngIf=\"!agents || agents.length === 0 || loading\" class=\"no-agents\">\r\n <i class=\"pi text-4xl text-gray-400\" [ngClass]=\"loading ? 'pi-spin pi-cog' : 'pi-users'\"></i>\r\n <p class=\"text-gray-500 mt-2\">{{ loading ? 'Cargando agentes...' : 'No se encontraron agentes' }}</p>\r\n </div>\r\n <!-- Lista de agentes -->\r\n <div class=\"agent-card\" *ngFor=\"let agent of agents\" (click)=\"selectAgent(agent)\">\r\n <lib-agent-avatar \r\n [size]=\"'large'\">\r\n </lib-agent-avatar>\r\n <div class=\"agent-info\">\r\n <p class=\"agent-name text-base font-medium\">{{ agent.key }}</p>\r\n <p class=\"agent-description text-sm text-color-secondary\">{{ agent.label }}</p>\r\n </div>\r\n <i class=\"pi pi-chevron-right agent-arrow\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- Vista de chat con el agente seleccionado -->\r\n <lib-bubble-chat *ngIf=\"selectedAgent\" \r\n [agentId]=\"selectedAgent.valor.agentId || ''\" \r\n [idKatios]=\"idKatios\">\r\n </lib-bubble-chat>\r\n </div>\r\n</div>\r\n","/*\r\n * Public API Surface of general-agent\r\n */\r\n\r\nexport * from './lib/general-agent/general-agent.component';\r\nexport * from './lib/agents-backend.port';\r\nexport * from './lib/general-agent/agents/bubble-chat/bubble-agent.component';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3"],"mappings":"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"}
1
+ {"version":3,"file":"sf-aiembedded.mjs","sources":["../../../projects/general-agent/src/lib/agents-backend.port.ts","../../../projects/general-agent/src/lib/general-agent/services/agent.service.ts","../../../projects/general-agent/src/lib/general-agent/types/text/text.component.ts","../../../projects/general-agent/src/lib/general-agent/types/text/text.component.html","../../../projects/general-agent/src/lib/general-agent/types/file/file.component.ts","../../../projects/general-agent/src/lib/general-agent/types/file/file.component.html","../../../projects/general-agent/src/lib/general-agent/types/table/table.component.ts","../../../projects/general-agent/src/lib/general-agent/types/table/table.component.html","../../../projects/general-agent/src/lib/general-agent/types/markdown/markdown.component.ts","../../../projects/general-agent/src/lib/general-agent/types/markdown/markdown.component.html","../../../projects/general-agent/src/lib/general-agent/components/robot-icon/robot-icon.component.ts","../../../projects/general-agent/src/lib/general-agent/components/robot-icon/robot-icon.component.html","../../../projects/general-agent/src/lib/general-agent/components/agent-avatar/agent-avatar.component.ts","../../../projects/general-agent/src/lib/general-agent/components/agent-avatar/agent-avatar.component.html","../../../projects/general-agent/src/lib/general-agent/components/messages/messages.component.ts","../../../projects/general-agent/src/lib/general-agent/components/messages/messages.component.html","../../../projects/general-agent/src/lib/general-agent/components/input/input.component.ts","../../../projects/general-agent/src/lib/general-agent/components/input/input.component.html","../../../projects/general-agent/src/lib/general-agent/general-agent.component.ts","../../../projects/general-agent/src/lib/general-agent/general-agent.component.html","../../../projects/general-agent/src/lib/general-agent/components/bubble-chat/bubble-chat.component.ts","../../../projects/general-agent/src/lib/general-agent/components/bubble-chat/bubble-chat.component.html","../../../projects/general-agent/src/lib/general-agent/agents/bubble-chat/bubble-agent.component.ts","../../../projects/general-agent/src/lib/general-agent/agents/bubble-chat/bubble-agent.component.html","../../../projects/general-agent/src/public-api.ts","../../../projects/general-agent/src/sf-aiembedded.ts"],"sourcesContent":["// projects/general-agent/src/lib/agents-backend.port.ts\r\nimport { InjectionToken } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\nexport interface AiAgentsGatewayService {\r\n getAgent(idKatios: string, agentId: string): Promise<any>;\r\n sendMessage(idKatios: string, agentId: string, req: {\r\n conversationId?: string;\r\n text: string;\r\n files: Array<{fileName:string; contentType:string; base64Data:string;}>;\r\n metadata?: any;\r\n }): Promise<{\r\n conversationId: string;\r\n messages: Array<{ role?: string; type?: string; content: any }>;\r\n }>;\r\n transcribeAudio(idKatios: string, audio:File): Promise<string>;\r\n getAgents(idKatios: string, ndoc: string, tdoc: string): Observable<any>;\r\n}\r\n\r\nexport const AI_AGENTS = new InjectionToken<AiAgentsGatewayService>('AI_AGENTS');\r\n","import { ChangeDetectorRef, Inject, Injectable, NgZone } from '@angular/core';\r\nimport { AI_AGENTS, AiAgentsGatewayService } from '../../agents-backend.port';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { ChatMessage, HeaderConfig } from '../models/agent.model';\r\n\r\n@Injectable()\r\nexport class AgentService {\r\n // Propiedades internas (ya no inputs/outputs)\r\n // Propiedades para notificar cambios a los componentes que usan el servicio\r\n private readonly messagesSubject = new BehaviorSubject<ChatMessage[]>([]);\r\n readonly messages$ = this.messagesSubject.asObservable();\r\n private readonly isBotWrittingSubject = new BehaviorSubject<boolean>(false);\r\n readonly isBotWritting$ = this.isBotWrittingSubject.asObservable();\r\n private readonly isRecordingSubject = new BehaviorSubject<boolean>(false);\r\n readonly isRecording$ = this.isRecordingSubject.asObservable();\r\n private readonly isLoadingSubject = new BehaviorSubject<boolean>(false);\r\n readonly isLoading$ = this.isLoadingSubject.asObservable();\r\n private readonly headerConfigSubject = new BehaviorSubject<HeaderConfig | undefined>(undefined);\r\n readonly headerConfig$ = this.headerConfigSubject.asObservable();\r\n private readonly selectedFilesSubject = new BehaviorSubject<File[]>([]);\r\n readonly selectedFiles$ = this.selectedFilesSubject.asObservable();\r\n private mediaRecorder?: MediaRecorder;\r\n private audioChunks: BlobPart[] = [];\r\n private recordingStream?: MediaStream;\r\n _agentInfo: any;\r\n _configuration: any;\r\n _sessionId: string = '';\r\n _agentId = '';\r\n _idKatios = '';\r\n\r\n\r\n constructor(\r\n @Inject(AI_AGENTS) private aiAgentsGatewayService: AiAgentsGatewayService,\r\n private zone: NgZone\r\n ) { }\r\n\r\n get agentId() {\r\n return this._agentId;\r\n }\r\n set agentId(value: string) {\r\n this._agentId = value;\r\n }\r\n\r\n get idKatios() {\r\n return this._idKatios;\r\n }\r\n\r\n set idKatios(value: string) {\r\n this._idKatios = value;\r\n }\r\n\r\n\r\n set agentInfo(value: any) {\r\n this._agentInfo = value;\r\n }\r\n\r\n get agentInfo(): any {\r\n return this._agentInfo;\r\n }\r\n\r\n set selectedFiles(files: File[]) {\r\n this.selectedFilesSubject.next(files);\r\n }\r\n\r\n get selectedFiles(): File[] {\r\n return this.selectedFilesSubject.value;\r\n }\r\n\r\n set sessionId(value: string) {\r\n this._sessionId = value;\r\n }\r\n\r\n get sessionId(): string {\r\n return this._sessionId;\r\n }\r\n\r\n set isRecording(value: boolean) {\r\n this.isRecordingSubject.next(value);\r\n }\r\n\r\n get isRecording(): boolean {\r\n return this.isRecordingSubject.value;\r\n }\r\n\r\n set headerConfig(value: HeaderConfig | undefined) {\r\n this.headerConfigSubject.next(value);\r\n }\r\n\r\n get headerConfig(): HeaderConfig | undefined {\r\n return this.headerConfigSubject.value;\r\n }\r\n\r\n set isLoading(value: boolean) {\r\n this.isLoadingSubject.next(value);\r\n }\r\n\r\n get isLoading(): boolean {\r\n return this.isLoadingSubject.value;\r\n }\r\n\r\n set isBotWritting(isWritting: boolean) {\r\n this.isBotWrittingSubject.next(isWritting);\r\n }\r\n\r\n get isBotWritting(): boolean {\r\n return this.isBotWrittingSubject.value;\r\n }\r\n\r\n addMessage(message: ChatMessage) {\r\n const next = [...this.messagesSubject.value, message];\r\n this.messagesSubject.next(next);\r\n }\r\n\r\n clearMessages() {\r\n this.messagesSubject.next([]);\r\n }\r\n\r\n addFile(file: File) {\r\n const next = [...this.selectedFilesSubject.value, file];\r\n this.selectedFilesSubject.next(next);\r\n }\r\n\r\n addFullMessages(messages: ChatMessage[]) {\r\n const next = [...this.messagesSubject.value, ...messages];\r\n this.messagesSubject.next(next);\r\n }\r\n\r\n\r\n async loadAgent() {\r\n this.isLoading = true;\r\n this.isBotWritting = false;\r\n this.clearMessages();\r\n this.sessionId = \"\";\r\n try {\r\n\r\n const agentInfo = await this.aiAgentsGatewayService.getAgent(this.idKatios, this.agentId) as any;\r\n if (agentInfo.statusCode === 200) {\r\n this.agentInfo = JSON.parse(agentInfo.data.rawConfig);\r\n let configurationAgent = null;\r\n if (this.agentInfo.config?.i18n?.en) {\r\n configurationAgent = this.agentInfo.config?.i18n.en;\r\n }\r\n else {\r\n configurationAgent = this.agentInfo.config?.setUp;\r\n }\r\n\r\n this.headerConfig = {\r\n title: configurationAgent.title,\r\n subtitle: configurationAgent.subtitle,\r\n initialMessages: this.agentInfo.config.initialMessages,\r\n placeholder: configurationAgent.inputPlaceholder,\r\n footer: configurationAgent.footer\r\n };\r\n\r\n this.isLoading = false;\r\n }\r\n } catch (error) {\r\n console.error('An error occurred:', error);\r\n this.isLoading = false;\r\n }\r\n }\r\n\r\n get isInitial(): boolean {\r\n return this.messagesSubject.value.length === 0 && !this.isBotWritting;\r\n }\r\n\r\n /**\r\n * Converts File objects to Attachment format expected by the backend\r\n */\r\n private async convertFilesToAttachments(files: File[]): Promise<any[]> {\r\n if (!files || files.length === 0) {\r\n return [];\r\n }\r\n\r\n const attachments = [];\r\n for (const file of files) {\r\n try {\r\n const base64Data = await this.fileToBase64(file);\r\n const attachment = {\r\n fileName: file.name,\r\n contentType: file.type,\r\n base64Data: base64Data\r\n };\r\n attachments.push(attachment);\r\n } catch (error) {\r\n console.error(`Error converting file ${file.name} to base64:`, error);\r\n }\r\n }\r\n\r\n return attachments;\r\n }\r\n\r\n /**\r\n * Converts a File object to base64 string\r\n */\r\n private fileToBase64(file: File): Promise<string> {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => {\r\n // Remove the data URL prefix (e.g., \"data:image/png;base64,\")\r\n const base64String = (reader.result as string).split(',')[1];\r\n resolve(base64String);\r\n };\r\n reader.onerror = error => reject(error);\r\n });\r\n }\r\n\r\n async send(userInput: string) {\r\n this.isBotWritting = true;\r\n\r\n let text = userInput.trim();\r\n try {\r\n\r\n\r\n if (!text) {\r\n this.isBotWritting = false;\r\n return;\r\n }\r\n\r\n // 2️⃣ Pintar mensaje usuario\r\n this.addMessage({ role: 'user', type: 'text', content: text });\r\n\r\n // 3️⃣ Enviar SOLO texto al agente\r\n const requestData = {\r\n conversationId: this.sessionId,\r\n text,\r\n files: [],\r\n metadata: {}\r\n };\r\n\r\n const response = await this.aiAgentsGatewayService.sendMessage(\r\n this.idKatios,\r\n this.agentId,\r\n requestData\r\n ) as any;\r\n\r\n //this.userInput = '';\r\n this.selectedFiles = [];\r\n\r\n // Asegurar que Angular detecte los cambios después del await\r\n if (response.success) {\r\n this.sessionId = response.data.conversationId;\r\n const incoming = response.data.messages.map((m: any) => ({\r\n role: m.role,\r\n type: m.type || 'markdown',\r\n content: m.content\r\n }));\r\n this.addFullMessages(incoming);\r\n }\r\n } catch (error) {\r\n console.error('Error en send:', error);\r\n this.addMessage({ role: 'assistant', type: 'error', content: 'Ocurrió un error al enviar el mensaje' });\r\n }\r\n finally {\r\n this.isBotWritting = false;\r\n }\r\n }\r\n async startRecording() {\r\n try {\r\n // pide permiso al micrófono\r\n this.recordingStream = await navigator.mediaDevices.getUserMedia({ audio: true });\r\n\r\n // mimeType: mejor opción común en Chrome/Edge\r\n const mimeType = MediaRecorder.isTypeSupported('audio/webm;codecs=opus')\r\n ? 'audio/webm;codecs=opus'\r\n : 'audio/webm';\r\n\r\n this.audioChunks = [];\r\n this.mediaRecorder = new MediaRecorder(this.recordingStream, { mimeType });\r\n\r\n this.mediaRecorder.ondataavailable = (e: BlobEvent) => {\r\n if (e.data && e.data.size > 0) this.audioChunks.push(e.data);\r\n };\r\n\r\n this.mediaRecorder.onstop = () => {\r\n // Asegura que Angular se entere de todo lo que pase aquí\r\n this.zone.run(async () => {\r\n try {\r\n const blob = new Blob(this.audioChunks, { type: mimeType });\r\n const fileName = `audio_${new Date().toISOString().replace(/[:.]/g, '-')}.webm`;\r\n const audioFile = new File([blob], fileName, { type: mimeType });\r\n\r\n this.audioChunks = [];\r\n\r\n await this.sendVoiceMessage(audioFile);\r\n } catch (e) {\r\n console.error('Error procesando audio:', e);\r\n }\r\n });\r\n };\r\n\r\n this.mediaRecorder.start();\r\n this.isRecording = true;\r\n } catch (err) {\r\n console.error('No se pudo iniciar la grabación:', err);\r\n this.isRecording = false;\r\n }\r\n }\r\n private async sendVoiceMessage(audioFile: File) {\r\n\r\n\r\n try {\r\n const sttText = await this.aiAgentsGatewayService.transcribeAudio(this.idKatios, audioFile);\r\n const text = (sttText || '').trim();\r\n if (!text) return;\r\n\r\n // Render inmediato del mensaje del usuario\r\n this.zone.run(() => {\r\n this.addMessage({ role: 'user', type: 'text', content: text });\r\n this.isBotWritting = true;\r\n });\r\n\r\n const requestData = {\r\n conversationId: this.sessionId,\r\n text,\r\n files: [],\r\n metadata: { source: 'voice' }\r\n };\r\n\r\n const response = await this.aiAgentsGatewayService.sendMessage(\r\n this.idKatios,\r\n this.agentId,\r\n requestData\r\n ) as any;\r\n\r\n // Asegurar que Angular detecte los cambios después del await\r\n this.zone.run(() => {\r\n if (response?.success && response?.data) {\r\n this.sessionId = response.data.conversationId;\r\n\r\n const incoming = response.data.messages.map((m: any) => ({\r\n role: m.role || 'assistant',\r\n type: m.type || 'markdown',\r\n content: m.content\r\n }));\r\n this.addFullMessages(incoming);\r\n }\r\n });\r\n\r\n } catch (err) {\r\n console.error('Error en sendVoiceMessage:', err);\r\n } finally {\r\n this.zone.run(() => {\r\n this.isBotWritting = false;\r\n });\r\n }\r\n }\r\n stopRecording() {\r\n try {\r\n if (this.mediaRecorder && this.mediaRecorder.state !== 'inactive') {\r\n this.mediaRecorder.stop();\r\n }\r\n\r\n // detener pistas del micrófono (importantísimo para liberar el icono de mic)\r\n if (this.recordingStream) {\r\n this.recordingStream.getTracks().forEach(t => t.stop());\r\n this.recordingStream = undefined;\r\n }\r\n\r\n } finally {\r\n this.isRecording = false;\r\n }\r\n }\r\n\r\n uploadFile(e: any) {\r\n const input = e.target as HTMLInputElement;\r\n if (input.files && input.files.length > 0) {\r\n const newFiles = Array.from(input.files);\r\n\r\n // Agrega los archivos nuevos sin duplicar por nombre\r\n for (const file of newFiles) {\r\n if (!this.selectedFiles.some(f => f.name === file.name && f.size === file.size)) {\r\n this.addFile(file);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { InputMode } from '../../models/agent.model';\r\n//import { Avatar } from 'primeng/avatar';\r\n\r\n@Component({\r\n selector: 'app-text',\r\n standalone: true,\r\n imports: [CommonModule,FormsModule],\r\n templateUrl: './text.component.html',\r\n styleUrl: './text.component.scss'\r\n})\r\nexport class TextComponent {\r\n @Input() text: string = '';\r\n @Input() role: string = '';\r\n}\r\n","<div\r\nclass=\"px-3 py-2 border-round-bottom-xl w-fit\"\r\n[ngClass]=\"role !== 'user' ? 'bg-white border-round-right-xl' : 'border-round-left-xl border-round-right-sm bg-primary text-white'\"\r\n>\r\n<span class=\"text-base m-0 whitespace-normal\" style=\"word-break: break-word;\">{{text}}</span>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Avatar } from 'primeng/avatar';\r\nimport { ButtonModule } from 'primeng/button';\r\n\r\n@Component({\r\n selector: 'app-file',\r\n standalone: true,\r\n imports: [CommonModule,FormsModule,ButtonModule,Avatar],\r\n templateUrl: './file.component.html',\r\n styleUrl: './file.component.scss'\r\n})\r\nexport class FileComponent {\r\n @Input() files: File[] = [];\r\n @Input() role: string = 'assistant';\r\n @Input() remove: boolean = false;\r\n\r\n getFileIcon(mime: string): string {\r\n if (mime.includes('pdf')) return 'pi pi-file-pdf';\r\n if (mime.includes('image')) return 'pi pi-image';\r\n if (mime.includes('audio')) return 'pi pi-volume-up';\r\n if (mime.includes('video')) return 'pi pi-video';\r\n if (mime.includes('zip')) return 'pi pi-file-zip';\r\n if (mime.includes('xlsx')) return 'pi pi-file-excel';\r\n return 'pi pi-file';\r\n }\r\n getFileClasses(mime: string): string {\r\n if (mime.includes('pdf')) return 'bg-red-500 border-red-800 text-white';\r\n if (mime.includes('image')) return 'bg-gray-100 border-gray-200 text-white';\r\n if (mime.includes('audio')) return 'bg-blue-500 border-blue-800 text-white';\r\n if (mime.includes('video')) return 'bg-yellow-500 border-yellow-800 text-white';\r\n if (mime.includes('zip')) return 'bg-indigo-500 border-indigo-800 text-white';\r\n if (mime.includes('xlsx')) return 'bg-green-500 border-green-800 text-white';\r\n return 'bg-gray-100 border-3 border-gray-200 text-gray-500';\r\n }\r\n removeSelectedFile(i: number) {\r\n this.files.splice(i,1);\r\n }\r\n getGridClass(){\r\n const fileCount = this.files.length;\r\n if (fileCount === 1) {\r\n return 'col-12';\r\n } else if (fileCount === 2) {\r\n return 'col-12 sm:col-6';\r\n } else {\r\n return 'col-12 sm:col-6 md:col-4';\r\n }\r\n }\r\n\r\n}\r\n","<div *ngIf=\"!remove\" class=\"grid w-full m-o\" [ngClass]=\"role !== 'user' ? 'items-start justify-content-start' : 'items-end justify-content-end'\">\r\n <div *ngFor=\"let file of files\" [ngClass]=\"getGridClass()\">\r\n <div class=\"flex align-items-center gap-3 border-1 border-gray-300 border-round-2xl p-2 bg-gray-100 h-full\">\r\n <p-avatar class=\"p-1 border-1 avatar-responsive\" [ngClass]=\"getFileClasses(file.name)\" [icon]=\"getFileIcon(file.name)\"></p-avatar>\r\n <div class=\"flex flex-column overflow-hidden\" style=\"min-width: 0;\">\r\n <span class=\"font-semibold text-gray-500 text-sm md:text-base\" style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\">\r\n {{ file.name }}\r\n </span>\r\n <p class=\"text-xs text-gray-400 md:text-base\" style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\">\r\n ({{ file.type || 'Archivo' }})\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"remove\" class=\"grid w-full\">\r\n <div *ngFor=\"let file of files; let i = index\" class=\"col-12 sm:col-6 md:col-4\">\r\n <div class=\"relative border-1 border-gray-300 border-round-xl p-2 h-full\">\r\n <p-button icon=\"pi pi-times\" [rounded]=\"true\" variant=\"text\" severity=\"secondary\" class=\"no-hover absolute top-0 right-0 z-1\" (click)=\"removeSelectedFile(i)\" size=\"small\"/>\r\n <div class=\"flex align-items-center gap-3\">\r\n <p-avatar \r\n class=\"p-1 border-1 avatar-responsive\"\r\n [ngClass]=\"getFileClasses(file.name)\" \r\n [icon]=\"getFileIcon(file.name)\" \r\n >\r\n </p-avatar>\r\n \r\n <div class=\"flex flex-column overflow-hidden\" style=\"min-width: 0;\">\r\n <span class=\"font-semibold text-gray-500 md:text-base text-sm\" \r\n style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\">\r\n {{ file.name }}\r\n </span>\r\n <p class=\"text-xs text-gray-400 md:text-base\" \r\n style=\"white-space: nowrap; overflow: hidden; text-overflow: ellipsis;\">\r\n ({{ file.type || 'archivo' }})\r\n </p>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</div>","import { Component, Input } from '@angular/core';\r\n\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'app-table',\r\n imports: [CommonModule],\r\n templateUrl: './table.component.html',\r\n styleUrl: './table.component.scss'\r\n})\r\nexport class TableComponent {\r\n @Input() table: string = \"\";\r\n}\r\n","<div\r\n *ngIf=\"table\"\r\n class=\"mt-2 overflow-auto\"\r\n [innerHTML]=\"table\"\r\n style=\"max-width: 100%; overflow-x: auto;\"\r\n></div>","import { Component, Input, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { marked, RendererObject } from 'marked';\r\nimport hljs from 'highlight.js';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Avatar } from 'primeng/avatar';\r\nimport { AgentAvatarComponent } from '../../components/agent-avatar/agent-avatar.component';\r\n\r\n// marked.setOptions({\r\n// highlight: (code, lang) => {\r\n// if (lang && hljs.getLanguage(lang)) {\r\n// return hljs.highlight(code, { language: lang }).value;\r\n// }\r\n// return hljs.highlightAuto(code).value;\r\n// }\r\n// });\r\n\r\nconst renderer: RendererObject = {\r\n link(token) {\r\n const href = token.href ?? '';\r\n const title = token.title ? ` title=\"${token.title}\"` : '';\r\n const text = token.text ?? token.raw ?? href;\r\n\r\n return `<a href=\"${href}\"${title} target=\"_blank\" rel=\"noopener noreferrer\">${text}</a>`;\r\n },\r\n table(token) {\r\n const header = token.header?.map((cell: { text: string }) => `<th>${cell.text}</th>`).join('') ?? '';\r\n const rows = token.rows?.map((row: { text: string }[]) => \r\n `<tr>${row.map(cell => `<td>${cell.text}</td>`).join('')}</tr>`\r\n ).join('') ?? '';\r\n \r\n return `<div class=\"table-wrapper\"><table><thead><tr>${header}</tr></thead><tbody>${rows}</tbody></table></div>`;\r\n },\r\n};\r\n\r\nmarked.use({ renderer });\r\n\r\n@Component({\r\n selector: 'app-markdown',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './markdown.component.html',\r\n styleUrl: './markdown.component.scss',\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class MarkdownComponent implements OnChanges {\r\n @Input() content = '';\r\n safeHtml: SafeHtml = '';\r\n constructor(private sanitizer: DomSanitizer) {}\r\n\r\n\r\n async ngOnChanges(changes: SimpleChanges) {\r\n if ('content' in changes) {\r\n const rawHtml = await marked.parse(this.content || '');\r\n this.safeHtml = this.sanitizer.bypassSecurityTrustHtml(rawHtml);\r\n console.log(this.safeHtml);\r\n }\r\n }\r\n}\r\n","<div class=\"markdown-wrapper\">\r\n <div class=\"markdown-container\" [innerHTML]=\"safeHtml\"></div>\r\n</div>","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-robot-icon',\r\n imports: [],\r\n templateUrl: './robot-icon.component.html',\r\n styleUrl: './robot-icon.component.css',\r\n host: {\r\n style: 'display: inline-flex; width: 1.5em; height: 1.5em;'\r\n }\r\n})\r\nexport class RobotIconComponent {\r\n\r\n}\r\n","<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\" width=\"100%\" height=\"100%\" fill=\"currentColor\">\r\n <path d=\"M440-120v-80h320v-284q0-117-81.5-198.5T480-764q-117 0-198.5 81.5T200-484v244h-40q-33 0-56.5-23.5T80-320v-80q0-21 10.5-39.5T120-469l3-53q8-68 39.5-126t79-101q47.5-43 109-67T480-840q68 0 129 24t109 66.5Q766-707 797-649t40 126l3 52q19 9 29.5 27t10.5 38v92q0 20-10.5 38T840-249v49q0 33-23.5 56.5T760-120H440Zm-80-280q-17 0-28.5-11.5T320-440q0-17 11.5-28.5T360-480q17 0 28.5 11.5T400-440q0 17-11.5 28.5T360-400Zm240 0q-17 0-28.5-11.5T560-440q0-17 11.5-28.5T600-480q17 0 28.5 11.5T640-440q0 17-11.5 28.5T600-400Zm-359-62q-7-106 64-182t177-76q89 0 156.5 56.5T720-519q-91-1-167.5-49T435-698q-16 80-67.5 142.5T241-462Z\"/>\r\n</svg>\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input, input } from '@angular/core';\r\nimport { Avatar } from 'primeng/avatar';\r\nimport { RobotIconComponent } from '../robot-icon/robot-icon.component';\r\n\r\n@Component({\r\n selector: 'lib-agent-avatar',\r\n imports: [CommonModule, Avatar, RobotIconComponent],\r\n templateUrl: './agent-avatar.component.html',\r\n styleUrl: './agent-avatar.component.scss'\r\n})\r\nexport class AgentAvatarComponent {\r\n @Input() size: \"normal\" | \"large\" | \"xlarge\" | undefined = 'large';\r\n}\r\n","<p-avatar [size]=\"size\" class=\"agent-avatar\" shape=\"circle\">\r\n <lib-robot-icon style=\"color: var(--primary-color)\"></lib-robot-icon>\r\n</p-avatar> \r\n\r\n","import { AfterViewChecked, Component, ElementRef, Input, ViewChild } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { TextComponent } from '../../types/text/text.component';\r\nimport { FileComponent } from '../../types/file/file.component';\r\nimport { TableComponent } from '../../types/table/table.component';\r\nimport { MarkdownComponent } from '../../types/markdown/markdown.component';\r\nimport { ChatMessage } from '../../models/agent.model';\r\nimport { AgentAvatarComponent } from \"../agent-avatar/agent-avatar.component\";\r\nimport { MessageModule } from 'primeng/message';\r\n@Component({\r\n selector: 'lib-messages',\r\n imports: [CommonModule, FormsModule, ButtonModule, TextComponent, FileComponent, TableComponent, MarkdownComponent, AgentAvatarComponent, MessageModule],\r\n templateUrl: './messages.component.html',\r\n styleUrl: './messages.component.scss',\r\n host: {\r\n 'class': 'block h-full w-full overflow-hidden'\r\n }\r\n})\r\nexport class MessagesComponent implements AfterViewChecked {\r\n @ViewChild('chatContainer') private chatContainer!: ElementRef<HTMLDivElement>;\r\n @Input() messages: ChatMessage[] = [];\r\n @Input() isBotWritting: boolean = false;\r\n @Input() scrollMode: 'edge' | 'inline' = 'edge';\r\n @Input() agentIcon: string = 'pi pi-sparkles';\r\n \r\n ngAfterViewChecked() {\r\n this.scrollToBottom();\r\n }\r\n\r\n private scrollToBottom(behavior: ScrollBehavior = 'smooth'): void {\r\n if (!this.chatContainer) return;\r\n const el = this.chatContainer.nativeElement;\r\n el.scrollTo({ top: el.scrollHeight, behavior });\r\n }\r\n\r\n}\r\n","<div class=\"messages-container\" [class.scroll-inline]=\"scrollMode === 'inline'\" #chatContainer>\r\n <div class=\"messages-content\">\r\n <div *ngFor=\"let msg of messages\" class=\"message-item\">\r\n <div class=\"flex w-full\" [ngClass]=\"msg.role !== 'user' ? 'justify-content-start' : 'justify-content-end'\">\r\n <div [ngClass]=\"msg.role !== 'user' ? 'message-bot' : 'message-user'\">\r\n <app-table *ngIf=\"msg.type === 'table'\" [table]=\"msg.content\"></app-table>\r\n <app-file *ngIf=\"msg.type === 'file'\" [files]=\"msg.content\" [role]=\"msg.role\"></app-file>\r\n <app-text *ngIf=\"msg.type === 'text'\" [text]=\"msg.content\" [role]=\"msg.role\"></app-text>\r\n <div [ngClass]=\"msg.role !== 'user' ? 'flex items-start gap-2' : ''\" *ngIf=\"msg.type === 'markdown'\">\r\n <lib-agent-avatar *ngIf=\"msg.role !== 'user'\" size=\"normal\"></lib-agent-avatar>\r\n <app-markdown [content]=\"msg.content\"></app-markdown>\r\n </div>\r\n <div *ngIf=\"msg.type === 'error'\" class=\"message-item\">\r\n <div class=\"flex gap-2 message-bot\">\r\n <lib-agent-avatar size=\"normal\"></lib-agent-avatar>\r\n <p-message severity=\"error\">{{msg.content}}</p-message>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isBotWritting\" class=\"message-item\">\r\n <div class=\"flex gap-2 message-bot\">\r\n <lib-agent-avatar size=\"normal\"></lib-agent-avatar>\r\n <div\r\n class=\"w-fit\">\r\n <span class=\"typing-dots\">\r\n <span class=\"dot\"></span>\r\n <span class=\"dot\"></span>\r\n <span class=\"dot\"></span>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div #bottom></div>\r\n</div>","import { CommonModule } from '@angular/common';\r\nimport { Component, EventEmitter, Input, input, Output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { ChipModule } from 'primeng/chip';\r\nimport { Textarea } from 'primeng/textarea';\r\nimport { FileComponent } from '../../types/file/file.component';\r\nimport { HeaderConfig, InputMode } from '../../models/agent.model';\r\n\r\n@Component({\r\n selector: 'lib-input',\r\n imports: [CommonModule, FormsModule, ButtonModule, Textarea, ChipModule, FileComponent],\r\n templateUrl: './input.component.html',\r\n styleUrl: './input.component.scss',\r\n host: {\r\n 'class': 'block w-full',\r\n '[class.inputModeDefault]': 'mode === \"default\"',\r\n '[class.inputModeBubble]': 'mode === \"bubble\"',\r\n }\r\n})\r\nexport class InputComponent {\r\n @Input() files: File[] = [];\r\n @Input() isRecording: boolean = false;\r\n @Input() isLoading: boolean = false;\r\n @Input() isBotWritting: boolean = false;\r\n @Input() header: HeaderConfig | undefined;\r\n @Input() mode: InputMode = 'default';\r\n @Output() sendInput = new EventEmitter<string>();\r\n @Output() startRecording = new EventEmitter<void>();\r\n @Output() stopRecording = new EventEmitter<void>();\r\n @Output() uploadFile = new EventEmitter<any>();\r\n userInput: string = '';\r\n\r\n handleKeyDown(event: KeyboardEvent) {\r\n const trimmedInput = this.userInput?.trim();\r\n if (event.key === 'Enter' && !event.shiftKey) {\r\n if (!trimmedInput || this.isBotWritting || this.isLoading) {\r\n event.preventDefault();\r\n return;\r\n }\r\n event.preventDefault();\r\n this.sendInput.emit(trimmedInput);\r\n this.userInput = '';\r\n }\r\n }\r\n\r\n send() {\r\n const trimmedInput = this.userInput?.trim();\r\n if (!trimmedInput || this.isBotWritting) {\r\n return;\r\n }\r\n this.sendInput.emit(trimmedInput);\r\n this.userInput = '';\r\n }\r\n\r\n}\r\n","<div class=\"input-wrapper input-default\">\r\n <app-file [files]=\"files || []\" role=\"assitant\" [remove]=\"true\" />\r\n <form (ngSubmit)=\"send()\" class=\"w-full flex flex-column gap-2\">\r\n <textarea pTextarea id=\"input\" name=\"userInput\" [(ngModel)]=\"userInput\"\r\n class=\"custom-input w-full text-base\" style=\"max-height: 200px\"\r\n [placeholder]=\"header?.placeholder || ''\" rows=\"1\" [autoResize]=\"true\"\r\n (keydown)=\"handleKeyDown($event)\"></textarea>\r\n <div class=\"flex align-items-center justify-content-between w-full\">\r\n\r\n <p-button icon=\"pi pi-paperclip\" [text]=\"true\" (click)=\"fileInputChat.click()\"\r\n [rounded]=\"true\" />\r\n <input type=\"file\" #fileInputChat multiple (change)=\"uploadFile.emit($event)\" style=\"display: none;\">\r\n\r\n <div class=\"flex align-items-center justify-content-end w-full gap-2\">\r\n <p-button *ngIf=\"!isRecording\" icon=\"pi pi-microphone\" [text]=\"true\" (click)=\"startRecording.emit()\"\r\n [rounded]=\"true\" />\r\n <p-button *ngIf=\"isRecording\" icon=\"pi pi-stop\" [text]=\"true\" (click)=\"stopRecording.emit()\"\r\n severity=\"danger\" [rounded]=\"true\" />\r\n <p-button icon=\"pi pi-send\" [rounded]=\"true\" type=\"submit\"\r\n [disabled]=\"isLoading || isBotWritting || (!userInput.trim() && (!files || files.length === 0))\" />\r\n </div>\r\n </div>\r\n </form>\r\n</div>","import { Component, Input, inject, SimpleChanges, OnChanges } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { TagModule } from 'primeng/tag';\r\nimport { ChipModule } from 'primeng/chip';\r\nimport { AgentService } from './services/agent.service';\r\nimport { MessagesComponent } from './components/messages/messages.component';\r\nimport { Skeleton } from 'primeng/skeleton';\r\nimport { combineLatest } from 'rxjs';\r\nimport { InputComponent } from './components/input/input.component';\r\nimport { AgentAvatarComponent } from './components/agent-avatar/agent-avatar.component';\r\n\r\n@Component({\r\n selector: 'app-general-agent',\r\n standalone: true,\r\n imports: [CommonModule, FormsModule, ButtonModule, AgentAvatarComponent, TagModule, ChipModule, MessagesComponent, Skeleton, InputComponent],\r\n templateUrl: './general-agent.component.html',\r\n styleUrl: './general-agent.component.scss',\r\n providers: [AgentService],\r\n host: {\r\n 'class': 'block w-full h-full'\r\n }\r\n})\r\nexport class GeneralAgentComponent implements OnChanges {\r\n\r\n // Propiedades internas (ya no inputs/outputs)\r\n agentService = inject(AgentService);\r\n\r\n messages$ = this.agentService.messages$;\r\n isBotWritting$ = this.agentService.isBotWritting$;\r\n headerConfig$ = this.agentService.headerConfig$;\r\n isRecording$ = this.agentService.isRecording$;\r\n selectedFiles$ = this.agentService.selectedFiles$;\r\n isLoading$ = this.agentService.isLoading$;\r\n vm$ = combineLatest({\r\n header: this.headerConfig$,\r\n files: this.selectedFiles$,\r\n isRec: this.isRecording$,\r\n bot: this.isBotWritting$,\r\n messages: this.messages$,\r\n loading: this.isLoading$\r\n});\r\n\r\n @Input() agentId = '';\r\n @Input() idKatios = '';\r\n /** 'edge' = scroll en el borde del contenedor, 'inline' = scroll pegado al chat */\r\n @Input() scrollMode: 'edge' | 'inline' = 'edge';\r\n\r\n\r\n async ngOnChanges(changes: SimpleChanges) {\r\n if (changes['agentId'] || changes['idKatios']) {\r\n await this.initAgent();\r\n }\r\n }\r\n\r\n async initAgent(){\r\n this.agentService.agentId = this.agentId;\r\n this.agentService.idKatios = this.idKatios;\r\n await this.agentService.loadAgent();\r\n }\r\n\r\n\r\n \r\n\r\n}\r\n","<ng-container *ngIf=\"vm$ | async as vm\">\r\n <!-- Vista inicial (bienvenida) -->\r\n <div *ngIf=\"agentService.isInitial\" class=\"custom-chat flex flex-column items-center justify-content-center w-full\">\r\n <div class=\"flex flex-column items-center justify-content-center gap-4 p-3 mb-3 text-center md:p-1\">\r\n <h2 *ngIf=\"!vm.loading\" class=\"text-3xl font-semibold text-gray-900 lg:text-4xl\">{{vm.header?.title ||\r\n 'Agente'}}</h2>\r\n <p-skeleton *ngIf=\"vm.loading\" width=\"25rem\" height=\"2rem\" borderRadius=\"16px\"></p-skeleton>\r\n <div\r\n class=\"flex items-start justify-content-center gap-2\">\r\n <lib-agent-avatar [size]=\"'large'\"></lib-agent-avatar>\r\n <div *ngIf=\"vm.header?.initialMessages && !vm.loading\" class=\"flex flex-column items-start\">\r\n <div *ngFor=\"let msg of vm.header?.initialMessages\" class=\"text-left\">\r\n <span class=\"m-0 text-gray-700 text-base lg:text-lg\">{{msg}}</span>\r\n </div>\r\n </div>\r\n <div class=\"flex flex-column gap-2\">\r\n <p-skeleton *ngIf=\"vm.loading\" width=\"5rem\" borderRadius=\"16px\"></p-skeleton>\r\n <p-skeleton *ngIf=\"vm.loading\" width=\"15rem\" borderRadius=\"16px\"></p-skeleton>\r\n </div>\r\n </div>\r\n <p *ngIf=\"!vm.loading\" class=\"text-base text-gray-500\">{{vm.header?.subtitle}}</p>\r\n <p-skeleton *ngIf=\"vm.loading\" width=\"17rem\" borderRadius=\"16px\"></p-skeleton>\r\n </div>\r\n <!-- Input centrado para vista inicial -->\r\n <div class=\"flex flex-column items-center justify-content-center custom-size w-full pt-1 pb-1\">\r\n <lib-input [files]=\"vm.files || []\" [isRecording]=\"vm.isRec || false\" [isLoading]=\"vm.loading || false\" [isBotWritting]=\"vm.bot || false\" [header]=\"vm.header\" (sendInput)=\"agentService.send($event)\" (startRecording)=\"agentService.startRecording()\" (stopRecording)=\"agentService.stopRecording()\" (uploadFile)=\"agentService.uploadFile($event)\"></lib-input>\r\n <p class=\"mx-auto text-sm text-gray-600 mt-1\">{{vm.header?.footer}}</p>\r\n </div>\r\n </div>\r\n\r\n <!-- Vista de chat (con mensajes) -->\r\n <div *ngIf=\"!agentService.isInitial\" class=\"custom-chat chat-layout flex flex-column w-full\">\r\n <!-- Área de mensajes con scroll -->\r\n <div class=\"messages-area flex-1 overflow-hidden\">\r\n <lib-messages [messages]=\"vm.messages || []\" [isBotWritting]=\"vm.bot || false\" [scrollMode]=\"scrollMode\"></lib-messages>\r\n </div>\r\n <!-- Input fijo abajo -->\r\n <div class=\"input-area flex flex-column items-center w-full py-2 px-2 md:px-0\">\r\n <div class=\"custom-size w-full\">\r\n <lib-input [files]=\"vm.files || []\" [isRecording]=\"vm.isRec || false\" [isLoading]=\"vm.loading || false\" [isBotWritting]=\"vm.bot || false\" [header]=\"vm.header\" (sendInput)=\"agentService.send($event)\" (startRecording)=\"agentService.startRecording()\" (stopRecording)=\"agentService.stopRecording()\" (uploadFile)=\"agentService.uploadFile($event)\"></lib-input>\r\n <p class=\"mx-auto text-sm text-gray-600 mt-1 text-center\">{{vm.header?.footer}}</p>\r\n </div>\r\n </div>\r\n </div>\r\n</ng-container>","import { CommonModule } from '@angular/common';\r\nimport { Component, inject, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { MessagesComponent } from '../messages/messages.component';\r\nimport { InputComponent } from '../input/input.component';\r\nimport { AgentService } from '../../services/agent.service';\r\nimport { combineLatest } from 'rxjs';\r\nimport { ChatMessage } from '../../models/agent.model';\r\n\r\n@Component({\r\n selector: 'lib-bubble-chat',\r\n imports: [CommonModule, MessagesComponent, InputComponent],\r\n templateUrl: './bubble-chat.component.html',\r\n styleUrls: ['./bubble-chat.component.scss'],\r\n providers: [AgentService],\r\n host: {\r\n 'class': 'block w-full h-full',\r\n }\r\n})\r\nexport class BubbleChatComponent implements OnChanges {\r\n agentService = inject(AgentService);\r\n\r\n messages$ = this.agentService.messages$;\r\n isBotWritting$ = this.agentService.isBotWritting$;\r\n headerConfig$ = this.agentService.headerConfig$;\r\n isRecording$ = this.agentService.isRecording$;\r\n selectedFiles$ = this.agentService.selectedFiles$;\r\n isLoading$ = this.agentService.isLoading$;\r\n vm$ = combineLatest({\r\n header: this.headerConfig$,\r\n files: this.selectedFiles$,\r\n isRec: this.isRecording$,\r\n bot: this.isBotWritting$,\r\n messages: this.messages$,\r\n loading: this.isLoading$\r\n });\r\n @Input() agentId = '';\r\n @Input() idKatios = '';\r\n\r\n async ngOnChanges(changes: SimpleChanges) {\r\n if (changes['agentId'] || changes['agentType'] || changes['idKatios']) {\r\n await this.initAgent();\r\n this.addInitialMessages();\r\n }\r\n }\r\n\r\n async initAgent() {\r\n this.agentService.agentId = this.agentId;\r\n this.agentService.idKatios = this.idKatios;\r\n await this.agentService.loadAgent();\r\n }\r\n addInitialMessages() {\r\n const initialMessages: ChatMessage[] = [];\r\n this.agentService.headerConfig?.initialMessages?.map(msg => {\r\n initialMessages.push({\r\n role: 'assistant',\r\n type: 'markdown',\r\n content: msg\r\n });\r\n });\r\n this.agentService.addFullMessages(initialMessages);\r\n }\r\n\r\n}\r\n","<ng-container *ngIf=\"vm$ | async as vm\">\r\n <div class=\"chat-view\">\r\n <div class=\"messages-wrapper\">\r\n <lib-messages [messages]=\"vm.messages\" [isBotWritting]=\"vm.bot || vm.loading\" scrollMode=\"inline\" [agentIcon]=\"vm.header?.avatar || 'pi pi-sparkles'\">\r\n </lib-messages>\r\n </div>\r\n <div class=\"input-wrapper\">\r\n <lib-input mode=\"bubble\" [files]=\"vm.files || []\" [isRecording]=\"vm.isRec || false\" [isLoading]=\"vm.loading || false\"\r\n [isBotWritting]=\"vm.bot || vm.loading\" [header]=\"vm.header\" (sendInput)=\"agentService.send($event)\"\r\n (startRecording)=\"agentService.startRecording()\" (stopRecording)=\"agentService.stopRecording()\"\r\n (uploadFile)=\"agentService.uploadFile($event)\">\r\n </lib-input>\r\n </div>\r\n </div>\r\n</ng-container>","import { Component, Inject, Input, OnChanges, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonModule } from 'primeng/button';\r\nimport { Agent } from '../../models/agent.model';\r\nimport { AI_AGENTS, AiAgentsGatewayService } from '../../../agents-backend.port';\r\nimport { BubbleChatComponent } from '../../components/bubble-chat/bubble-chat.component';\r\nimport { AgentAvatarComponent } from '../../components/agent-avatar/agent-avatar.component';\r\nimport { MessageService } from 'primeng/api';\r\nimport { RobotIconComponent } from '../../components/robot-icon/robot-icon.component';\r\n\r\n\r\n@Component({\r\n selector: 'lib-bubble-agent',\r\n standalone: true,\r\n imports: [CommonModule, ButtonModule, AgentAvatarComponent, BubbleChatComponent, RobotIconComponent],\r\n templateUrl: './bubble-agent.component.html',\r\n styleUrl: './bubble-agent.component.scss'\r\n})\r\nexport class BubbleAgentComponent implements OnChanges {\r\n @Input() idKatios = '';\r\n @Input() ndoc = '';\r\n @Input() tdoc = '';\r\n\r\n // Estado del componente\r\n isOpen = false;\r\n selectedAgent: Agent | null = null;\r\n agents: Agent[] = [];\r\n loading: boolean = false;\r\n\r\n constructor(\r\n @Inject(AI_AGENTS) private aiAgentsGatewayService: AiAgentsGatewayService,\r\n private messageService: MessageService\r\n ) { }\r\n\r\n ngOnChanges() {\r\n if (this.idKatios && this.ndoc && this.tdoc) {\r\n this.selectedAgent = null;\r\n this.agents = [];\r\n this.loading = true;\r\n this.aiAgentsGatewayService.getAgents(this.idKatios, this.ndoc, this.tdoc).subscribe({\r\n next: (response) => {\r\n if (response.data) this.agents = response.data;\r\n this.loading = false;\r\n },\r\n error: (err) => {\r\n console.error('Error al cargar agentes desde el servicio:', err);\r\n this.agents = [];\r\n this.messageService.add({ severity: 'error', summary: 'Error', detail: 'No se pudieron cargar los agentes. Por favor, inténtalo de nuevo más tarde.' });\r\n }\r\n });\r\n }\r\n }\r\n\r\n toggleChat() {\r\n this.isOpen = !this.isOpen;\r\n // Si se cierra, volver a la lista de agentes\r\n // if (!this.isOpen) {\r\n // this.selectedAgent = null;\r\n // this.messages = [];\r\n // }\r\n }\r\n\r\n selectAgent(agent: Agent) {\r\n this.selectedAgent = agent;\r\n }\r\n\r\n goBack() {\r\n this.selectedAgent = null;\r\n }\r\n}\r\n","<!-- Botón burbuja flotante -->\r\n<button class=\"bubble-button\" (click)=\"toggleChat()\" [class.is-open]=\"isOpen\">\r\n <i class=\"pi\" [ngClass]=\"isOpen ? 'pi-times' : 'pi-comments'\"></i>\r\n</button>\r\n\r\n<!-- Panel del chat -->\r\n<div class=\"chat-panel\" [class.is-open]=\"isOpen\">\r\n <!-- Header del panel -->\r\n <div class=\"p-3 chat-header\">\r\n <div class=\"flex align-items-center gap-2\">\r\n <button *ngIf=\"selectedAgent\" class=\"back-button\" (click)=\"goBack()\">\r\n <i class=\"pi pi-arrow-left\"></i>\r\n </button>\r\n <lib-robot-icon style=\"color: white\" *ngIf=\"selectedAgent\"></lib-robot-icon>\r\n <div class=\"header-text\">\r\n <p class=\"header-title text-white font-semibold text-lg\">{{ selectedAgent ? selectedAgent.key : 'Agentes disponibles' }}</p>\r\n </div>\r\n </div>\r\n <button class=\"close-button\" (click)=\"toggleChat()\">\r\n <i class=\"pi pi-times\"></i>\r\n </button>\r\n </div>\r\n\r\n <!-- Contenido del panel -->\r\n <div class=\"chat-content\">\r\n <!-- Vista de lista de agentes -->\r\n <div *ngIf=\"!selectedAgent\" class=\"agents-list\">\r\n <!-- Mensaje cuando no hay agentes -->\r\n <div *ngIf=\"!agents || agents.length === 0 || loading\" class=\"no-agents\">\r\n <i class=\"pi text-4xl text-gray-400\" [ngClass]=\"loading ? 'pi-spin pi-cog' : 'pi-users'\"></i>\r\n <p class=\"text-gray-500 mt-2\">{{ loading ? 'Cargando agentes...' : 'No se encontraron agentes' }}</p>\r\n </div>\r\n <!-- Lista de agentes -->\r\n <div class=\"agent-card\" *ngFor=\"let agent of agents\" (click)=\"selectAgent(agent)\">\r\n <lib-agent-avatar \r\n [size]=\"'large'\">\r\n </lib-agent-avatar>\r\n <div class=\"agent-info\">\r\n <p class=\"agent-name text-base font-medium\">{{ agent.key }}</p>\r\n <p class=\"agent-description text-sm text-color-secondary\">{{ agent.label }}</p>\r\n </div>\r\n <i class=\"pi pi-chevron-right agent-arrow\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- Vista de chat con el agente seleccionado -->\r\n <lib-bubble-chat *ngIf=\"selectedAgent\" \r\n [agentId]=\"selectedAgent.valor.agentId || ''\" \r\n [idKatios]=\"idKatios\">\r\n </lib-bubble-chat>\r\n </div>\r\n</div>\r\n","/*\r\n * Public API Surface of general-agent\r\n */\r\n\r\nexport * from './lib/general-agent/general-agent.component';\r\nexport * from './lib/agents-backend.port';\r\nexport * from './lib/general-agent/agents/bubble-chat/bubble-agent.component';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sf-aiembedded",
3
- "version": "0.2.6",
3
+ "version": "0.2.7",
4
4
  "description": "GeneralAgent UI (standalone) para Angular",
5
5
  "author": "camila.torres@nhubex.com",
6
6
  "license": "MIT",