@copilotkitnext/angular 0.0.9-alpha.3 → 0.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm2022/index.mjs +2 -70
- package/dist/esm2022/lib/agent.mjs +73 -0
- package/dist/esm2022/lib/chat-config.mjs +35 -0
- package/dist/esm2022/lib/chat-state.mjs +18 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-buttons.mjs +344 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-renderer.mjs +260 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-toolbar.mjs +22 -0
- package/dist/esm2022/{components/chat/copilot-chat-assistant-message.component.mjs → lib/components/chat/copilot-chat-assistant-message.mjs} +216 -240
- package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message.types.mjs +2 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-audio-recorder.mjs +196 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-buttons.mjs +299 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-input-defaults.mjs +39 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-input.mjs +634 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-input.types.mjs +10 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-message-view-cursor.mjs +27 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-message-view.mjs +268 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-message-view.types.mjs +2 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-textarea.mjs +139 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-tool-calls-view.mjs +36 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-toolbar.mjs +20 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-tools-menu.mjs +203 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message-branch-navigation.mjs +118 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message-buttons.mjs +182 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message-renderer.mjs +28 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message-toolbar.mjs +25 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message.mjs +306 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message.types.mjs +2 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view-disclaimer.mjs +48 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view-feather.mjs +41 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view-handlers.mjs +19 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view-input-container.mjs +96 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view-scroll-to-bottom-button.mjs +89 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view-scroll-view.mjs +456 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view.mjs +404 -0
- package/dist/esm2022/lib/components/chat/copilot-chat-view.types.mjs +2 -0
- package/dist/esm2022/lib/components/chat/copilot-chat.mjs +167 -0
- package/dist/esm2022/lib/config.mjs +9 -0
- package/dist/esm2022/lib/copilotkit.mjs +124 -0
- package/dist/esm2022/lib/directives/copilotkit-agent-context.mjs +130 -0
- package/dist/esm2022/lib/directives/stick-to-bottom.mjs +170 -0
- package/dist/esm2022/lib/directives/tooltip.mjs +217 -0
- package/dist/esm2022/lib/human-in-the-loop.mjs +19 -0
- package/dist/esm2022/lib/render-tool-calls.mjs +131 -0
- package/dist/esm2022/lib/resize-observer.mjs +152 -0
- package/dist/esm2022/lib/scroll-position.mjs +124 -0
- package/dist/esm2022/lib/slots/copilot-slot.mjs +156 -0
- package/dist/esm2022/lib/slots/index.mjs +4 -0
- package/dist/esm2022/lib/slots/slot.types.mjs +3 -3
- package/dist/esm2022/lib/slots/slot.utils.mjs +19 -15
- package/dist/esm2022/lib/tools.mjs +31 -0
- package/dist/esm2022/lib/utils.mjs +3 -3
- package/dist/esm2022/public-api.mjs +47 -0
- package/dist/fesm2022/copilotkitnext-angular.mjs +5249 -8271
- package/dist/fesm2022/copilotkitnext-angular.mjs.map +1 -1
- package/dist/index.d.ts +1 -55
- package/dist/lib/agent.d.ts +53 -0
- package/dist/{core/chat-configuration/chat-configuration.types.d.ts → lib/chat-config.d.ts} +4 -8
- package/dist/lib/chat-state.d.ts +10 -0
- package/dist/lib/components/chat/copilot-chat-assistant-message-buttons.d.ts +68 -0
- package/dist/lib/components/chat/copilot-chat-assistant-message-renderer.d.ts +26 -0
- package/dist/lib/components/chat/copilot-chat-assistant-message-toolbar.d.ts +7 -0
- package/dist/lib/components/chat/copilot-chat-assistant-message.d.ts +178 -0
- package/dist/{components → lib/components}/chat/copilot-chat-assistant-message.types.d.ts +1 -1
- package/dist/{components/chat/copilot-chat-audio-recorder.component.d.ts → lib/components/chat/copilot-chat-audio-recorder.d.ts} +10 -10
- package/dist/lib/components/chat/copilot-chat-buttons.d.ts +65 -0
- package/dist/lib/components/chat/copilot-chat-input-defaults.d.ts +38 -0
- package/dist/lib/components/chat/copilot-chat-input.d.ts +133 -0
- package/dist/{components → lib/components}/chat/copilot-chat-input.types.d.ts +11 -11
- package/dist/lib/components/chat/copilot-chat-message-view-cursor.d.ts +11 -0
- package/dist/{components/chat/copilot-chat-message-view.component.d.ts → lib/components/chat/copilot-chat-message-view.d.ts} +68 -36
- package/dist/{components → lib/components}/chat/copilot-chat-message-view.types.d.ts +2 -2
- package/dist/lib/components/chat/copilot-chat-textarea.d.ts +41 -0
- package/dist/lib/components/chat/copilot-chat-tool-calls-view.d.ts +55 -0
- package/dist/lib/components/chat/copilot-chat-toolbar.d.ts +7 -0
- package/dist/lib/components/chat/copilot-chat-tools-menu.d.ts +20 -0
- package/dist/lib/components/chat/copilot-chat-user-message-branch-navigation.d.ts +20 -0
- package/dist/lib/components/chat/copilot-chat-user-message-buttons.d.ts +35 -0
- package/dist/lib/components/chat/copilot-chat-user-message-renderer.d.ts +8 -0
- package/dist/lib/components/chat/copilot-chat-user-message-toolbar.d.ts +7 -0
- package/dist/lib/components/chat/copilot-chat-user-message.d.ts +55 -0
- package/dist/{components → lib/components}/chat/copilot-chat-user-message.types.d.ts +2 -2
- package/dist/lib/components/chat/copilot-chat-view-disclaimer.d.ts +15 -0
- package/dist/{components/chat/copilot-chat-view-feather.component.d.ts → lib/components/chat/copilot-chat-view-feather.d.ts} +6 -6
- package/dist/{components/chat/copilot-chat-view-handlers.service.d.ts → lib/components/chat/copilot-chat-view-handlers.d.ts} +3 -3
- package/dist/lib/components/chat/copilot-chat-view-input-container.d.ts +23 -0
- package/dist/lib/components/chat/copilot-chat-view-scroll-to-bottom-button.d.ts +16 -0
- package/dist/lib/components/chat/copilot-chat-view-scroll-view.d.ts +114 -0
- package/dist/lib/components/chat/copilot-chat-view.d.ts +239 -0
- package/dist/{components → lib/components}/chat/copilot-chat-view.types.d.ts +2 -2
- package/dist/lib/components/chat/copilot-chat.d.ts +67 -0
- package/dist/lib/config.d.ts +16 -0
- package/dist/lib/copilotkit.d.ts +29 -0
- package/dist/{directives/copilotkit-agent-context.directive.d.ts → lib/directives/copilotkit-agent-context.d.ts} +5 -5
- package/dist/lib/directives/stick-to-bottom.d.ts +62 -0
- package/dist/lib/directives/tooltip.d.ts +33 -0
- package/dist/lib/human-in-the-loop.d.ts +13 -0
- package/dist/lib/render-tool-calls.d.ts +75 -0
- package/dist/{services/resize-observer.service.d.ts → lib/resize-observer.d.ts} +2 -2
- package/dist/{services/scroll-position.service.d.ts → lib/scroll-position.d.ts} +6 -6
- package/dist/lib/slots/copilot-slot.d.ts +34 -0
- package/dist/lib/slots/index.d.ts +3 -0
- package/dist/lib/slots/slot.types.d.ts +1 -1
- package/dist/lib/slots/slot.utils.d.ts +6 -4
- package/dist/lib/tools.d.ts +63 -0
- package/dist/lib/utils.d.ts +1 -1
- package/dist/public-api.d.ts +46 -0
- package/dist/styles.css +0 -69
- package/package.json +5 -5
- package/dist/components/chat/copilot-chat-assistant-message-buttons.component.d.ts +0 -75
- package/dist/components/chat/copilot-chat-assistant-message-renderer.component.d.ts +0 -31
- package/dist/components/chat/copilot-chat-assistant-message-toolbar.component.d.ts +0 -8
- package/dist/components/chat/copilot-chat-assistant-message.component.d.ts +0 -132
- package/dist/components/chat/copilot-chat-buttons.component.d.ts +0 -66
- package/dist/components/chat/copilot-chat-input-defaults.d.ts +0 -37
- package/dist/components/chat/copilot-chat-input.component.d.ts +0 -133
- package/dist/components/chat/copilot-chat-message-view-cursor.component.d.ts +0 -15
- package/dist/components/chat/copilot-chat-textarea.component.d.ts +0 -45
- package/dist/components/chat/copilot-chat-tool-calls-view.component.d.ts +0 -35
- package/dist/components/chat/copilot-chat-toolbar.component.d.ts +0 -8
- package/dist/components/chat/copilot-chat-tools-menu.component.d.ts +0 -20
- package/dist/components/chat/copilot-chat-user-message-branch-navigation.component.d.ts +0 -23
- package/dist/components/chat/copilot-chat-user-message-buttons.component.d.ts +0 -39
- package/dist/components/chat/copilot-chat-user-message-renderer.component.d.ts +0 -9
- package/dist/components/chat/copilot-chat-user-message-toolbar.component.d.ts +0 -8
- package/dist/components/chat/copilot-chat-user-message.component.d.ts +0 -55
- package/dist/components/chat/copilot-chat-view-disclaimer.component.d.ts +0 -15
- package/dist/components/chat/copilot-chat-view-input-container.component.d.ts +0 -23
- package/dist/components/chat/copilot-chat-view-scroll-to-bottom-button.component.d.ts +0 -17
- package/dist/components/chat/copilot-chat-view-scroll-view.component.d.ts +0 -84
- package/dist/components/chat/copilot-chat-view.component.d.ts +0 -205
- package/dist/components/chat/copilot-chat.component.d.ts +0 -36
- package/dist/components/copilotkit-tool-render.component.d.ts +0 -25
- package/dist/core/chat-configuration/chat-configuration.providers.d.ts +0 -54
- package/dist/core/chat-configuration/chat-configuration.service.d.ts +0 -75
- package/dist/core/copilotkit.providers.d.ts +0 -13
- package/dist/core/copilotkit.service.d.ts +0 -119
- package/dist/core/copilotkit.types.d.ts +0 -81
- package/dist/directives/copilotkit-agent.directive.d.ts +0 -106
- package/dist/directives/copilotkit-chat-config.directive.d.ts +0 -84
- package/dist/directives/copilotkit-config.directive.d.ts +0 -44
- package/dist/directives/copilotkit-frontend-tool.directive.d.ts +0 -25
- package/dist/directives/copilotkit-human-in-the-loop.directive.d.ts +0 -124
- package/dist/directives/stick-to-bottom.directive.d.ts +0 -62
- package/dist/esm2022/components/chat/copilot-chat-assistant-message-buttons.component.mjs +0 -384
- package/dist/esm2022/components/chat/copilot-chat-assistant-message-renderer.component.mjs +0 -286
- package/dist/esm2022/components/chat/copilot-chat-assistant-message-toolbar.component.mjs +0 -27
- package/dist/esm2022/components/chat/copilot-chat-assistant-message.types.mjs +0 -2
- package/dist/esm2022/components/chat/copilot-chat-audio-recorder.component.mjs +0 -202
- package/dist/esm2022/components/chat/copilot-chat-buttons.component.mjs +0 -321
- package/dist/esm2022/components/chat/copilot-chat-input-defaults.mjs +0 -38
- package/dist/esm2022/components/chat/copilot-chat-input.component.mjs +0 -666
- package/dist/esm2022/components/chat/copilot-chat-input.types.mjs +0 -10
- package/dist/esm2022/components/chat/copilot-chat-message-view-cursor.component.mjs +0 -45
- package/dist/esm2022/components/chat/copilot-chat-message-view.component.mjs +0 -296
- package/dist/esm2022/components/chat/copilot-chat-message-view.types.mjs +0 -2
- package/dist/esm2022/components/chat/copilot-chat-textarea.component.mjs +0 -188
- package/dist/esm2022/components/chat/copilot-chat-tool-calls-view.component.mjs +0 -222
- package/dist/esm2022/components/chat/copilot-chat-toolbar.component.mjs +0 -25
- package/dist/esm2022/components/chat/copilot-chat-tools-menu.component.mjs +0 -199
- package/dist/esm2022/components/chat/copilot-chat-user-message-branch-navigation.component.mjs +0 -137
- package/dist/esm2022/components/chat/copilot-chat-user-message-buttons.component.mjs +0 -207
- package/dist/esm2022/components/chat/copilot-chat-user-message-renderer.component.mjs +0 -35
- package/dist/esm2022/components/chat/copilot-chat-user-message-toolbar.component.mjs +0 -34
- package/dist/esm2022/components/chat/copilot-chat-user-message.component.mjs +0 -341
- package/dist/esm2022/components/chat/copilot-chat-user-message.types.mjs +0 -2
- package/dist/esm2022/components/chat/copilot-chat-view-disclaimer.component.mjs +0 -52
- package/dist/esm2022/components/chat/copilot-chat-view-feather.component.mjs +0 -55
- package/dist/esm2022/components/chat/copilot-chat-view-handlers.service.mjs +0 -19
- package/dist/esm2022/components/chat/copilot-chat-view-input-container.component.mjs +0 -110
- package/dist/esm2022/components/chat/copilot-chat-view-scroll-to-bottom-button.component.mjs +0 -93
- package/dist/esm2022/components/chat/copilot-chat-view-scroll-view.component.mjs +0 -443
- package/dist/esm2022/components/chat/copilot-chat-view.component.mjs +0 -479
- package/dist/esm2022/components/chat/copilot-chat-view.types.mjs +0 -2
- package/dist/esm2022/components/chat/copilot-chat.component.mjs +0 -220
- package/dist/esm2022/components/copilotkit-tool-render.component.mjs +0 -150
- package/dist/esm2022/core/chat-configuration/chat-configuration.providers.mjs +0 -65
- package/dist/esm2022/core/chat-configuration/chat-configuration.service.mjs +0 -145
- package/dist/esm2022/core/chat-configuration/chat-configuration.types.mjs +0 -26
- package/dist/esm2022/core/copilotkit.providers.mjs +0 -34
- package/dist/esm2022/core/copilotkit.service.mjs +0 -411
- package/dist/esm2022/core/copilotkit.types.mjs +0 -13
- package/dist/esm2022/directives/copilotkit-agent-context.directive.mjs +0 -130
- package/dist/esm2022/directives/copilotkit-agent.directive.mjs +0 -221
- package/dist/esm2022/directives/copilotkit-chat-config.directive.mjs +0 -218
- package/dist/esm2022/directives/copilotkit-config.directive.mjs +0 -94
- package/dist/esm2022/directives/copilotkit-frontend-tool.directive.mjs +0 -128
- package/dist/esm2022/directives/copilotkit-human-in-the-loop.directive.mjs +0 -265
- package/dist/esm2022/directives/stick-to-bottom.directive.mjs +0 -181
- package/dist/esm2022/lib/directives/tooltip.directive.mjs +0 -211
- package/dist/esm2022/lib/slots/copilot-slot.component.mjs +0 -154
- package/dist/esm2022/services/resize-observer.service.mjs +0 -152
- package/dist/esm2022/services/scroll-position.service.mjs +0 -124
- package/dist/esm2022/types/frontend-tool.mjs +0 -2
- package/dist/esm2022/types/human-in-the-loop.mjs +0 -2
- package/dist/esm2022/utils/agent-context.utils.mjs +0 -114
- package/dist/esm2022/utils/agent.utils.mjs +0 -212
- package/dist/esm2022/utils/chat-config.utils.mjs +0 -186
- package/dist/esm2022/utils/copilotkit.utils.mjs +0 -20
- package/dist/esm2022/utils/frontend-tool.utils.mjs +0 -224
- package/dist/esm2022/utils/human-in-the-loop.utils.mjs +0 -293
- package/dist/lib/directives/tooltip.directive.d.ts +0 -33
- package/dist/lib/slots/copilot-slot.component.d.ts +0 -34
- package/dist/types/frontend-tool.d.ts +0 -37
- package/dist/types/human-in-the-loop.d.ts +0 -44
- package/dist/utils/agent-context.utils.d.ts +0 -75
- package/dist/utils/agent.utils.d.ts +0 -108
- package/dist/utils/chat-config.utils.d.ts +0 -166
- package/dist/utils/copilotkit.utils.d.ts +0 -16
- package/dist/utils/frontend-tool.utils.d.ts +0 -119
- package/dist/utils/human-in-the-loop.utils.d.ts +0 -92
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
import { Component, Input, ChangeDetectionStrategy, ViewEncapsulation, signal, effect, Optional, SkipSelf, } from "@angular/core";
|
|
2
|
-
import { CommonModule } from "@angular/common";
|
|
3
|
-
import { CopilotChatViewComponent } from "./copilot-chat-view.component";
|
|
4
|
-
import { CopilotChatConfigurationService } from "../../core/chat-configuration/chat-configuration.service";
|
|
5
|
-
import { COPILOT_CHAT_INITIAL_CONFIG, } from "../../core/chat-configuration/chat-configuration.types";
|
|
6
|
-
import { watchAgentWith } from "../../utils/agent.utils";
|
|
7
|
-
import { DEFAULT_AGENT_ID, randomUUID } from "@copilotkitnext/shared";
|
|
8
|
-
import { ProxiedCopilotRuntimeAgent } from "@copilotkitnext/core";
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "../../core/chat-configuration/chat-configuration.service";
|
|
11
|
-
/**
|
|
12
|
-
* CopilotChat component - Angular equivalent of React's <CopilotChat>
|
|
13
|
-
* Provides a complete chat interface that wires an agent to the chat view
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* ```html
|
|
17
|
-
* <copilot-chat [agentId]="'default'" [threadId]="'abc123'"></copilot-chat>
|
|
18
|
-
* ```
|
|
19
|
-
*/
|
|
20
|
-
export class CopilotChatComponent {
|
|
21
|
-
chatConfig;
|
|
22
|
-
cdr;
|
|
23
|
-
injector;
|
|
24
|
-
agentId;
|
|
25
|
-
threadId;
|
|
26
|
-
inputComponent;
|
|
27
|
-
constructor(chatConfig, cdr, injector) {
|
|
28
|
-
this.chatConfig = chatConfig;
|
|
29
|
-
this.cdr = cdr;
|
|
30
|
-
this.injector = injector;
|
|
31
|
-
// Create initial watcher once (constructor is a safe injection context)
|
|
32
|
-
const initialId = this.agentId ?? DEFAULT_AGENT_ID;
|
|
33
|
-
this.createWatcher(initialId);
|
|
34
|
-
// Connect once when agent becomes available
|
|
35
|
-
effect(() => {
|
|
36
|
-
const a = this.agent();
|
|
37
|
-
if (!a)
|
|
38
|
-
return;
|
|
39
|
-
// Apply thread id when agent is available
|
|
40
|
-
a.threadId = this.threadId || this.generatedThreadId;
|
|
41
|
-
if (!this.hasConnectedOnce) {
|
|
42
|
-
this.hasConnectedOnce = true;
|
|
43
|
-
if (a instanceof ProxiedCopilotRuntimeAgent) {
|
|
44
|
-
this.connectToAgent(a);
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
// Not a CopilotKit agent: ensure UI not showing loading cursor
|
|
48
|
-
this.showCursor.set(false);
|
|
49
|
-
this.cdr.markForCheck();
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}, { allowSignalWrites: true });
|
|
53
|
-
}
|
|
54
|
-
// Signals from watchAgent - destructured from watcher
|
|
55
|
-
agent;
|
|
56
|
-
messages;
|
|
57
|
-
isRunning;
|
|
58
|
-
showCursor = signal(false);
|
|
59
|
-
generatedThreadId = randomUUID();
|
|
60
|
-
watcher;
|
|
61
|
-
hasConnectedOnce = false;
|
|
62
|
-
ngOnInit() {
|
|
63
|
-
this.setupChatHandlers();
|
|
64
|
-
}
|
|
65
|
-
ngOnChanges(changes) {
|
|
66
|
-
if (changes["agentId"] && !changes["agentId"].firstChange) {
|
|
67
|
-
const newId = this.agentId ?? DEFAULT_AGENT_ID;
|
|
68
|
-
this.createWatcher(newId);
|
|
69
|
-
}
|
|
70
|
-
if (changes["threadId"] && !changes["threadId"].firstChange) {
|
|
71
|
-
const a = this.agent();
|
|
72
|
-
if (a) {
|
|
73
|
-
a.threadId = this.threadId || this.generatedThreadId;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
async connectToAgent(agent) {
|
|
78
|
-
if (!agent)
|
|
79
|
-
return;
|
|
80
|
-
this.showCursor.set(true);
|
|
81
|
-
this.cdr.markForCheck();
|
|
82
|
-
try {
|
|
83
|
-
await agent.runAgent({ forwardedProps: { __copilotkitConnect: true } }, {
|
|
84
|
-
onTextMessageStartEvent: () => {
|
|
85
|
-
this.showCursor.set(false);
|
|
86
|
-
this.cdr.detectChanges();
|
|
87
|
-
},
|
|
88
|
-
onToolCallStartEvent: () => {
|
|
89
|
-
this.showCursor.set(false);
|
|
90
|
-
this.cdr.detectChanges();
|
|
91
|
-
},
|
|
92
|
-
});
|
|
93
|
-
this.showCursor.set(false);
|
|
94
|
-
this.cdr.markForCheck();
|
|
95
|
-
}
|
|
96
|
-
catch (error) {
|
|
97
|
-
console.error("Failed to connect to agent:", error);
|
|
98
|
-
this.showCursor.set(false);
|
|
99
|
-
this.cdr.markForCheck();
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
setupChatHandlers() {
|
|
103
|
-
if (!this.chatConfig)
|
|
104
|
-
return;
|
|
105
|
-
// Handle input submission
|
|
106
|
-
this.chatConfig.setSubmitHandler(async (value) => {
|
|
107
|
-
const agent = this.agent();
|
|
108
|
-
if (!agent || !value.trim())
|
|
109
|
-
return;
|
|
110
|
-
// Add user message
|
|
111
|
-
const userMessage = {
|
|
112
|
-
id: randomUUID(),
|
|
113
|
-
role: "user",
|
|
114
|
-
content: value,
|
|
115
|
-
};
|
|
116
|
-
agent.addMessage(userMessage);
|
|
117
|
-
// Clear the input
|
|
118
|
-
this.chatConfig.setInputValue("");
|
|
119
|
-
// Show cursor while processing
|
|
120
|
-
this.showCursor.set(true);
|
|
121
|
-
this.cdr.markForCheck();
|
|
122
|
-
// Run the agent with named subscriber callbacks
|
|
123
|
-
try {
|
|
124
|
-
await agent.runAgent({}, {
|
|
125
|
-
onTextMessageStartEvent: () => {
|
|
126
|
-
this.showCursor.set(false);
|
|
127
|
-
this.cdr.detectChanges();
|
|
128
|
-
},
|
|
129
|
-
onToolCallStartEvent: () => {
|
|
130
|
-
this.showCursor.set(false);
|
|
131
|
-
this.cdr.detectChanges();
|
|
132
|
-
},
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
catch (error) {
|
|
136
|
-
console.error("Agent run error:", error);
|
|
137
|
-
}
|
|
138
|
-
finally {
|
|
139
|
-
this.showCursor.set(false);
|
|
140
|
-
this.cdr.markForCheck();
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
// Handle input value changes (optional)
|
|
144
|
-
this.chatConfig.setChangeHandler(() => {
|
|
145
|
-
// Keep input state if needed
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
createWatcher(desiredAgentId) {
|
|
149
|
-
// Tear down previous watcher if it exists to prevent parallel subscriptions
|
|
150
|
-
this.watcher?.unsubscribe();
|
|
151
|
-
// Create new watcher using the ergonomic helper
|
|
152
|
-
const w = watchAgentWith(this.injector, { agentId: desiredAgentId });
|
|
153
|
-
// Destructure signals directly to class fields
|
|
154
|
-
this.agent = w.agent;
|
|
155
|
-
this.messages = w.messages;
|
|
156
|
-
this.isRunning = w.isRunning;
|
|
157
|
-
this.watcher = w;
|
|
158
|
-
// Reset connection state for new agent
|
|
159
|
-
this.hasConnectedOnce = false;
|
|
160
|
-
}
|
|
161
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatComponent, deps: [{ token: i1.CopilotChatConfigurationService, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
162
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CopilotChatComponent, isStandalone: true, selector: "copilot-chat", inputs: { agentId: "agentId", threadId: "threadId", inputComponent: "inputComponent" }, providers: [
|
|
163
|
-
{
|
|
164
|
-
provide: CopilotChatConfigurationService,
|
|
165
|
-
deps: [
|
|
166
|
-
[new Optional(), new SkipSelf(), CopilotChatConfigurationService],
|
|
167
|
-
[new Optional(), COPILOT_CHAT_INITIAL_CONFIG],
|
|
168
|
-
],
|
|
169
|
-
useFactory: (parent, initial) => parent ?? new CopilotChatConfigurationService(initial ?? null),
|
|
170
|
-
},
|
|
171
|
-
], usesOnChanges: true, ngImport: i0, template: `
|
|
172
|
-
<copilot-chat-view
|
|
173
|
-
[messages]="messages()"
|
|
174
|
-
[autoScroll]="true"
|
|
175
|
-
[messageViewClass]="'w-full'"
|
|
176
|
-
[showCursor]="showCursor()"
|
|
177
|
-
[inputComponent]="inputComponent"
|
|
178
|
-
>
|
|
179
|
-
</copilot-chat-view>
|
|
180
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: CopilotChatViewComponent, selector: "copilot-chat-view", inputs: ["messages", "autoScroll", "showCursor", "messageViewComponent", "messageViewTemplate", "messageViewClass", "scrollViewComponent", "scrollViewTemplate", "scrollViewClass", "scrollToBottomButtonComponent", "scrollToBottomButtonTemplate", "scrollToBottomButtonClass", "inputComponent", "inputTemplate", "inputContainerComponent", "inputContainerTemplate", "inputContainerClass", "featherComponent", "featherTemplate", "featherClass", "disclaimerComponent", "disclaimerTemplate", "disclaimerClass", "disclaimerText"], outputs: ["assistantMessageThumbsUp", "assistantMessageThumbsDown", "assistantMessageReadAloud", "assistantMessageRegenerate", "userMessageCopy", "userMessageEdit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
181
|
-
}
|
|
182
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatComponent, decorators: [{
|
|
183
|
-
type: Component,
|
|
184
|
-
args: [{
|
|
185
|
-
selector: "copilot-chat",
|
|
186
|
-
standalone: true,
|
|
187
|
-
imports: [CommonModule, CopilotChatViewComponent],
|
|
188
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
189
|
-
encapsulation: ViewEncapsulation.None,
|
|
190
|
-
providers: [
|
|
191
|
-
{
|
|
192
|
-
provide: CopilotChatConfigurationService,
|
|
193
|
-
deps: [
|
|
194
|
-
[new Optional(), new SkipSelf(), CopilotChatConfigurationService],
|
|
195
|
-
[new Optional(), COPILOT_CHAT_INITIAL_CONFIG],
|
|
196
|
-
],
|
|
197
|
-
useFactory: (parent, initial) => parent ?? new CopilotChatConfigurationService(initial ?? null),
|
|
198
|
-
},
|
|
199
|
-
],
|
|
200
|
-
template: `
|
|
201
|
-
<copilot-chat-view
|
|
202
|
-
[messages]="messages()"
|
|
203
|
-
[autoScroll]="true"
|
|
204
|
-
[messageViewClass]="'w-full'"
|
|
205
|
-
[showCursor]="showCursor()"
|
|
206
|
-
[inputComponent]="inputComponent"
|
|
207
|
-
>
|
|
208
|
-
</copilot-chat-view>
|
|
209
|
-
`,
|
|
210
|
-
}]
|
|
211
|
-
}], ctorParameters: () => [{ type: i1.CopilotChatConfigurationService, decorators: [{
|
|
212
|
-
type: Optional
|
|
213
|
-
}] }, { type: i0.ChangeDetectorRef }, { type: i0.Injector }], propDecorators: { agentId: [{
|
|
214
|
-
type: Input
|
|
215
|
-
}], threadId: [{
|
|
216
|
-
type: Input
|
|
217
|
-
}], inputComponent: [{
|
|
218
|
-
type: Input
|
|
219
|
-
}] } });
|
|
220
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFJTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixNQUFNLEVBSU4sUUFBUSxFQUNSLFFBQVEsR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDM0csT0FBTyxFQUNMLDJCQUEyQixHQUU1QixNQUFNLHdEQUF3RCxDQUFDO0FBQ2hFLE9BQU8sRUFBYyxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQUVsRTs7Ozs7Ozs7R0FRRztBQStCSCxNQUFNLE9BQU8sb0JBQW9CO0lBTVQ7SUFDWjtJQUNBO0lBUEQsT0FBTyxDQUFVO0lBQ2pCLFFBQVEsQ0FBVTtJQUNsQixjQUFjLENBQWE7SUFFcEMsWUFDc0IsVUFBa0QsRUFDOUQsR0FBc0IsRUFDdEIsUUFBa0I7UUFGTixlQUFVLEdBQVYsVUFBVSxDQUF3QztRQUM5RCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRTFCLHdFQUF3RTtRQUN4RSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLGdCQUFnQixDQUFDO1FBQ25ELElBQUks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QUUsMkJBQTJCLENBQUM7NkJBQzlDOzRCQUNELFVBQVUsRUFBRSxDQUNWLE1BQThDLEVBQzlDLE9BQXdDLEVBQ3hDLEVBQUUsQ0FBQyxNQUFNLElBQUksSUFBSSwrQkFBK0IsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDO3lCQUNwRTtxQkFDRjtvQkFDRCxRQUFRLEVBQUU7Ozs7Ozs7OztHQVNUO2lCQUNGOzswQkFPSSxRQUFRO2dHQUxGLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBzaWduYWwsXG4gIGVmZmVjdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIFNpZ25hbCxcbiAgSW5qZWN0b3IsXG4gIE9wdGlvbmFsLFxuICBTa2lwU2VsZixcbiAgVHlwZSxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IENvcGlsb3RDaGF0Vmlld0NvbXBvbmVudCB9IGZyb20gXCIuL2NvcGlsb3QtY2hhdC12aWV3LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ29waWxvdENoYXRDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2NoYXQtY29uZmlndXJhdGlvbi9jaGF0LWNvbmZpZ3VyYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgQ09QSUxPVF9DSEFUX0lOSVRJQUxfQ09ORklHLFxuICBDb3BpbG90Q2hhdENvbmZpZ3VyYXRpb24sXG59IGZyb20gXCIuLi8uLi9jb3JlL2NoYXQtY29uZmlndXJhdGlvbi9jaGF0LWNvbmZpZ3VyYXRpb24udHlwZXNcIjtcbmltcG9ydCB7IHdhdGNoQWdlbnQsIHdhdGNoQWdlbnRXaXRoIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2FnZW50LnV0aWxzXCI7XG5pbXBvcnQgeyBERUZBVUxUX0FHRU5UX0lELCByYW5kb21VVUlEIH0gZnJvbSBcIkBjb3BpbG90a2l0bmV4dC9zaGFyZWRcIjtcbmltcG9ydCB7IE1lc3NhZ2UsIEFic3RyYWN0QWdlbnQgfSBmcm9tIFwiQGFnLXVpL2NsaWVudFwiO1xuaW1wb3J0IHsgUHJveGllZENvcGlsb3RSdW50aW1lQWdlbnQgfSBmcm9tIFwiQGNvcGlsb3RraXRuZXh0L2NvcmVcIjtcblxuLyoqXG4gKiBDb3BpbG90Q2hhdCBjb21wb25lbnQgLSBBbmd1bGFyIGVxdWl2YWxlbnQgb2YgUmVhY3QncyA8Q29waWxvdENoYXQ+XG4gKiBQcm92aWRlcyBhIGNvbXBsZXRlIGNoYXQgaW50ZXJmYWNlIHRoYXQgd2lyZXMgYW4gYWdlbnQgdG8gdGhlIGNoYXQgdmlld1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8Y29waWxvdC1jaGF0IFthZ2VudElkXT1cIidkZWZhdWx0J1wiIFt0aHJlYWRJZF09XCInYWJjMTIzJ1wiPjwvY29waWxvdC1jaGF0PlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJjb3BpbG90LWNoYXRcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQ29waWxvdENoYXRWaWV3Q29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IENvcGlsb3RDaGF0Q29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgICBkZXBzOiBbXG4gICAgICAgIFtuZXcgT3B0aW9uYWwoKSwgbmV3IFNraXBTZWxmKCksIENvcGlsb3RDaGF0Q29uZmlndXJhdGlvblNlcnZpY2VdLFxuICAgICAgICBbbmV3IE9wdGlvbmFsKCksIENPUElMT1RfQ0hBVF9JTklUSUFMX0NPTkZJR10sXG4gICAgICBdLFxuICAgICAgdXNlRmFjdG9yeTogKFxuICAgICAgICBwYXJlbnQ6IENvcGlsb3RDaGF0Q29uZmlndXJhdGlvblNlcnZpY2UgfCBudWxsLFxuICAgICAgICBpbml0aWFsOiBDb3BpbG90Q2hhdENvbmZpZ3VyYXRpb24gfCBudWxsXG4gICAgICApID0+IHBhcmVudCA/PyBuZXcgQ29waWxvdENoYXRDb25maWd1cmF0aW9uU2VydmljZShpbml0aWFsID8/IG51bGwpLFxuICAgIH0sXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGNvcGlsb3QtY2hhdC12aWV3XG4gICAgICBbbWVzc2FnZXNdPVwibWVzc2FnZXMoKVwiXG4gICAgICBbYXV0b1Njcm9sbF09XCJ0cnVlXCJcbiAgICAgIFttZXNzYWdlVmlld0NsYXNzXT1cIid3LWZ1bGwnXCJcbiAgICAgIFtzaG93Q3Vyc29yXT1cInNob3dDdXJzb3IoKVwiXG4gICAgICBbaW5wdXRDb21wb25lbnRdPVwiaW5wdXRDb21wb25lbnRcIlxuICAgID5cbiAgICA8L2NvcGlsb3QtY2hhdC12aWV3PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBDb3BpbG90Q2hhdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgYWdlbnRJZD86IHN0cmluZztcbiAgQElucHV0KCkgdGhyZWFkSWQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlucHV0Q29tcG9uZW50PzogVHlwZTxhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgY2hhdENvbmZpZzogQ29waWxvdENoYXRDb25maWd1cmF0aW9uU2VydmljZSB8IG51bGwsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yXG4gICkge1xuICAgIC8vIENyZWF0ZSBpbml0aWFsIHdhdGNoZXIgb25jZSAoY29uc3RydWN0b3IgaXMgYSBzYWZlIGluamVjdGlvbiBjb250ZXh0KVxuICAgIGNvbnN0IGluaXRpYWxJZCA9IHRoaXMuYWdlbnRJZCA/PyBERUZBVUxUX0FHRU5UX0lEO1xuICAgIHRoaXMuY3JlYXRlV2F0Y2hlcihpbml0aWFsSWQpO1xuXG4gICAgLy8gQ29ubmVjdCBvbmNlIHdoZW4gYWdlbnQgYmVjb21lcyBhdmFpbGFibGVcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGEgPSB0aGlzLmFnZW50KCk7XG4gICAgICAgIGlmICghYSkgcmV0dXJuO1xuICAgICAgICAvLyBBcHBseSB0aHJlYWQgaWQgd2hlbiBhZ2VudCBpcyBhdmFpbGFibGVcbiAgICAgICAgYS50aHJlYWRJZCA9IHRoaXMudGhyZWFkSWQgfHwgdGhpcy5nZW5lcmF0ZWRUaHJlYWRJZDtcbiAgICAgICAgaWYgKCF0aGlzLmhhc0Nvbm5lY3RlZE9uY2UpIHtcbiAgICAgICAgICB0aGlzLmhhc0Nvbm5lY3RlZE9uY2UgPSB0cnVlO1xuICAgICAgICAgIGlmIChhIGluc3RhbmNlb2YgUHJveGllZENvcGlsb3RSdW50aW1lQWdlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdFRvQWdlbnQoYSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vdCBhIENvcGlsb3RLaXQgYWdlbnQ6IGVuc3VyZSBVSSBub3Qgc2hvd2luZyBsb2FkaW5nIGN1cnNvclxuICAgICAgICAgICAgdGhpcy5zaG93Q3Vyc29yLnNldChmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuICB9XG5cbiAgLy8gU2lnbmFscyBmcm9tIHdhdGNoQWdlbnQgLSBkZXN0cnVjdHVyZWQgZnJvbSB3YXRjaGVyXG4gIHByb3RlY3RlZCBhZ2VudCE6IFNpZ25hbDxBYnN0cmFjdEFnZW50IHwgdW5kZWZpbmVkPjtcbiAgcHJvdGVjdGVkIG1lc3NhZ2VzITogU2lnbmFsPE1lc3NhZ2VbXT47XG4gIHByb3RlY3RlZCBpc1J1bm5pbmchOiBTaWduYWw8Ym9vbGVhbj47XG4gIHByb3RlY3RlZCBzaG93Q3Vyc29yID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICBwcml2YXRlIGdlbmVyYXRlZFRocmVhZElkOiBzdHJpbmcgPSByYW5kb21VVUlEKCk7XG4gIHByaXZhdGUgd2F0Y2hlcj86IFJldHVyblR5cGU8dHlwZW9mIHdhdGNoQWdlbnQ+O1xuICBwcml2YXRlIGhhc0Nvbm5lY3RlZE9uY2UgPSBmYWxzZTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldHVwQ2hhdEhhbmRsZXJzKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbXCJhZ2VudElkXCJdICYmICFjaGFuZ2VzW1wiYWdlbnRJZFwiXS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3QgbmV3SWQgPSB0aGlzLmFnZW50SWQgPz8gREVGQVVMVF9BR0VOVF9JRDtcbiAgICAgIHRoaXMuY3JlYXRlV2F0Y2hlcihuZXdJZCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzW1widGhyZWFkSWRcIl0gJiYgIWNoYW5nZXNbXCJ0aHJlYWRJZFwiXS5maXJzdENoYW5nZSkge1xuICAgICAgY29uc3QgYSA9IHRoaXMuYWdlbnQoKTtcbiAgICAgIGlmIChhKSB7XG4gICAgICAgIGEudGhyZWFkSWQgPSB0aGlzLnRocmVhZElkIHx8IHRoaXMuZ2VuZXJhdGVkVGhyZWFkSWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb25uZWN0VG9BZ2VudChhZ2VudDogQWJzdHJhY3RBZ2VudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghYWdlbnQpIHJldHVybjtcblxuICAgIHRoaXMuc2hvd0N1cnNvci5zZXQodHJ1ZSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgYWdlbnQucnVuQWdlbnQoXG4gICAgICAgIHsgZm9yd2FyZGVkUHJvcHM6IHsgX19jb3BpbG90a2l0Q29ubmVjdDogdHJ1ZSB9IH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvblRleHRNZXNzYWdlU3RhcnRFdmVudDogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93Q3Vyc29yLnNldChmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvblRvb2xDYWxsU3RhcnRFdmVudDogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93Q3Vyc29yLnNldChmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHRoaXMuc2hvd0N1cnNvci5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gY29ubmVjdCB0byBhZ2VudDpcIiwgZXJyb3IpO1xuICAgICAgdGhpcy5zaG93Q3Vyc29yLnNldChmYWxzZSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldHVwQ2hhdEhhbmRsZXJzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jaGF0Q29uZmlnKSByZXR1cm47XG5cbiAgICAvLyBIYW5kbGUgaW5wdXQgc3VibWlzc2lvblxuICAgIHRoaXMuY2hhdENvbmZpZy5zZXRTdWJtaXRIYW5kbGVyKGFzeW5jICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBhZ2VudCA9IHRoaXMuYWdlbnQoKTtcbiAgICAgIGlmICghYWdlbnQgfHwgIXZhbHVlLnRyaW0oKSkgcmV0dXJuO1xuXG4gICAgICAvLyBBZGQgdXNlciBtZXNzYWdlXG4gICAgICBjb25zdCB1c2VyTWVzc2FnZTogTWVzc2FnZSA9IHtcbiAgICAgICAgaWQ6IHJhbmRvbVVVSUQoKSxcbiAgICAgICAgcm9sZTogXCJ1c2VyXCIsXG4gICAgICAgIGNvbnRlbnQ6IHZhbHVlLFxuICAgICAgfTtcbiAgICAgIGFnZW50LmFkZE1lc3NhZ2UodXNlck1lc3NhZ2UpO1xuXG4gICAgICAvLyBDbGVhciB0aGUgaW5wdXRcbiAgICAgIHRoaXMuY2hhdENvbmZpZyEuc2V0SW5wdXRWYWx1ZShcIlwiKTtcblxuICAgICAgLy8gU2hvdyBjdXJzb3Igd2hpbGUgcHJvY2Vzc2luZ1xuICAgICAgdGhpcy5zaG93Q3Vyc29yLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICAvLyBSdW4gdGhlIGFnZW50IHdpdGggbmFtZWQgc3Vic2NyaWJlciBjYWxsYmFja3NcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGFnZW50LnJ1bkFnZW50KFxuICAgICAgICAgIHt9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9uVGV4dE1lc3NhZ2VTdGFydEV2ZW50OiAoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2hvd0N1cnNvci5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25Ub29sQ2FsbFN0YXJ0RXZlbnQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zaG93Q3Vyc29yLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkFnZW50IHJ1biBlcnJvcjpcIiwgZXJyb3IpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5zaG93Q3Vyc29yLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIGlucHV0IHZhbHVlIGNoYW5nZXMgKG9wdGlvbmFsKVxuICAgIHRoaXMuY2hhdENvbmZpZy5zZXRDaGFuZ2VIYW5kbGVyKCgpID0+IHtcbiAgICAgIC8vIEtlZXAgaW5wdXQgc3RhdGUgaWYgbmVlZGVkXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVdhdGNoZXIoZGVzaXJlZEFnZW50SWQ6IHN0cmluZykge1xuICAgIC8vIFRlYXIgZG93biBwcmV2aW91cyB3YXRjaGVyIGlmIGl0IGV4aXN0cyB0byBwcmV2ZW50IHBhcmFsbGVsIHN1YnNjcmlwdGlvbnNcbiAgICB0aGlzLndhdGNoZXI/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICAvLyBDcmVhdGUgbmV3IHdhdGNoZXIgdXNpbmcgdGhlIGVyZ29ub21pYyBoZWxwZXJcbiAgICBjb25zdCB3ID0gd2F0Y2hBZ2VudFdpdGgodGhpcy5pbmplY3RvciwgeyBhZ2VudElkOiBkZXNpcmVkQWdlbnRJZCB9KTtcblxuICAgIC8vIERlc3RydWN0dXJlIHNpZ25hbHMgZGlyZWN0bHkgdG8gY2xhc3MgZmllbGRzXG4gICAgdGhpcy5hZ2VudCA9IHcuYWdlbnQ7XG4gICAgdGhpcy5tZXNzYWdlcyA9IHcubWVzc2FnZXM7XG4gICAgdGhpcy5pc1J1bm5pbmcgPSB3LmlzUnVubmluZztcbiAgICB0aGlzLndhdGNoZXIgPSB3O1xuXG4gICAgLy8gUmVzZXQgY29ubmVjdGlvbiBzdGF0ZSBmb3IgbmV3IGFnZW50XG4gICAgdGhpcy5oYXNDb25uZWN0ZWRPbmNlID0gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import { Component, Input, ViewContainerRef, TemplateRef, inject, ViewChild, } from "@angular/core";
|
|
2
|
-
import { CommonModule } from "@angular/common";
|
|
3
|
-
import { CopilotKitService } from "../core/copilotkit.service";
|
|
4
|
-
import { ToolCallStatus } from "../core/copilotkit.types";
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/common";
|
|
7
|
-
export class CopilotKitToolRenderComponent {
|
|
8
|
-
toolName;
|
|
9
|
-
args;
|
|
10
|
-
status = ToolCallStatus.InProgress;
|
|
11
|
-
result;
|
|
12
|
-
description;
|
|
13
|
-
container;
|
|
14
|
-
copilotkit = inject(CopilotKitService);
|
|
15
|
-
componentRef;
|
|
16
|
-
templateRef;
|
|
17
|
-
templateContext;
|
|
18
|
-
ngAfterViewInit() {
|
|
19
|
-
this.renderTool();
|
|
20
|
-
}
|
|
21
|
-
ngOnChanges(changes) {
|
|
22
|
-
if (changes["toolName"] ||
|
|
23
|
-
changes["args"] ||
|
|
24
|
-
changes["status"] ||
|
|
25
|
-
changes["result"]) {
|
|
26
|
-
this.renderTool();
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
renderTool() {
|
|
30
|
-
// Clear existing component
|
|
31
|
-
if (this.componentRef) {
|
|
32
|
-
this.componentRef.destroy();
|
|
33
|
-
this.componentRef = undefined;
|
|
34
|
-
}
|
|
35
|
-
// Clear template
|
|
36
|
-
this.templateRef = undefined;
|
|
37
|
-
this.templateContext = undefined;
|
|
38
|
-
if (!this.toolName) {
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
// Get the tool render configuration
|
|
42
|
-
const toolRender = this.copilotkit.getToolRender(this.toolName);
|
|
43
|
-
if (!toolRender) {
|
|
44
|
-
console.warn(`No render found for tool: ${this.toolName}`);
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
// Prepare props to pass to the component
|
|
48
|
-
const props = {
|
|
49
|
-
name: this.toolName,
|
|
50
|
-
description: this.description || "",
|
|
51
|
-
args: this.args,
|
|
52
|
-
status: this.status,
|
|
53
|
-
result: this.result,
|
|
54
|
-
};
|
|
55
|
-
// Check if render is a Component class or TemplateRef
|
|
56
|
-
if (this.isComponentClass(toolRender.render)) {
|
|
57
|
-
// Create component dynamically
|
|
58
|
-
this.renderComponent(toolRender.render, props);
|
|
59
|
-
}
|
|
60
|
-
else if (this.isTemplateRef(toolRender.render)) {
|
|
61
|
-
// Use template
|
|
62
|
-
this.renderTemplate(toolRender.render, props);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
console.error(`Invalid render type for tool: ${this.toolName}`);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
renderComponent(componentClass, props) {
|
|
69
|
-
// Clear the container
|
|
70
|
-
this.container.clear();
|
|
71
|
-
// Create the component
|
|
72
|
-
this.componentRef = this.container.createComponent(componentClass);
|
|
73
|
-
// Determine declared inputs to avoid NG0303 logs
|
|
74
|
-
const cmpDef = componentClass.ɵcmp;
|
|
75
|
-
const declaredInputs = new Set(Object.keys(cmpDef?.inputs ?? {}));
|
|
76
|
-
if (declaredInputs.has('props')) {
|
|
77
|
-
this.componentRef.setInput('props', props);
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
for (const [key, value] of Object.entries(props)) {
|
|
81
|
-
if (declaredInputs.has(key)) {
|
|
82
|
-
this.componentRef.setInput(key, value);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
// Trigger change detection
|
|
87
|
-
this.componentRef.changeDetectorRef.detectChanges();
|
|
88
|
-
}
|
|
89
|
-
renderTemplate(template, props) {
|
|
90
|
-
this.templateRef = template;
|
|
91
|
-
this.templateContext = {
|
|
92
|
-
$implicit: props,
|
|
93
|
-
name: props.name,
|
|
94
|
-
description: props.description,
|
|
95
|
-
args: props.args,
|
|
96
|
-
status: props.status,
|
|
97
|
-
result: props.result,
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
isComponentClass(value) {
|
|
101
|
-
return typeof value === "function" && value.prototype;
|
|
102
|
-
}
|
|
103
|
-
isTemplateRef(value) {
|
|
104
|
-
return value instanceof TemplateRef;
|
|
105
|
-
}
|
|
106
|
-
ngOnDestroy() {
|
|
107
|
-
if (this.componentRef) {
|
|
108
|
-
this.componentRef.destroy();
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotKitToolRenderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
112
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CopilotKitToolRenderComponent, isStandalone: true, selector: "copilotkit-tool-render", inputs: { toolName: "toolName", args: "args", status: "status", result: "result", description: "description" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["dynamicContainer"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
113
|
-
<ng-container #dynamicContainer></ng-container>
|
|
114
|
-
<ng-container *ngIf="templateRef && templateContext">
|
|
115
|
-
<ng-container
|
|
116
|
-
*ngTemplateOutlet="templateRef; context: templateContext"
|
|
117
|
-
></ng-container>
|
|
118
|
-
</ng-container>
|
|
119
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
120
|
-
}
|
|
121
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotKitToolRenderComponent, decorators: [{
|
|
122
|
-
type: Component,
|
|
123
|
-
args: [{
|
|
124
|
-
selector: "copilotkit-tool-render",
|
|
125
|
-
standalone: true,
|
|
126
|
-
imports: [CommonModule],
|
|
127
|
-
template: `
|
|
128
|
-
<ng-container #dynamicContainer></ng-container>
|
|
129
|
-
<ng-container *ngIf="templateRef && templateContext">
|
|
130
|
-
<ng-container
|
|
131
|
-
*ngTemplateOutlet="templateRef; context: templateContext"
|
|
132
|
-
></ng-container>
|
|
133
|
-
</ng-container>
|
|
134
|
-
`,
|
|
135
|
-
}]
|
|
136
|
-
}], propDecorators: { toolName: [{
|
|
137
|
-
type: Input
|
|
138
|
-
}], args: [{
|
|
139
|
-
type: Input
|
|
140
|
-
}], status: [{
|
|
141
|
-
type: Input
|
|
142
|
-
}], result: [{
|
|
143
|
-
type: Input
|
|
144
|
-
}], description: [{
|
|
145
|
-
type: Input
|
|
146
|
-
}], container: [{
|
|
147
|
-
type: ViewChild,
|
|
148
|
-
args: ["dynamicContainer", { read: ViewContainerRef, static: true }]
|
|
149
|
-
}] } });
|
|
150
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdGtpdC10b29sLXJlbmRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9jb3BpbG90a2l0LXRvb2wtcmVuZGVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxnQkFBZ0IsRUFDaEIsV0FBVyxFQUtYLE1BQU0sRUFDTixTQUFTLEdBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBSy9ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7O0FBZTFELE1BQU0sT0FBTyw2QkFBNkI7SUFDL0IsUUFBUSxDQUFVO0lBQ2xCLElBQUksQ0FBTTtJQUNWLE1BQU0sR0FBbUIsY0FBYyxDQUFDLFVBQVUsQ0FBQztJQUNuRCxNQUFNLENBQU87SUFDYixXQUFXLENBQVU7SUFHdEIsU0FBUyxDQUFvQjtJQUU3QixVQUFVLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdkMsWUFBWSxDQUFxQjtJQUV6QyxXQUFXLENBQW9CO0lBQy9CLGVBQWUsQ0FBTztJQUV0QixlQUFlO1FBQ2IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFDRSxPQUFPLENBQUMsVUFBVSxDQUFDO1lBQ25CLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDZixPQUFPLENBQUMsUUFBUSxDQUFDO1lBQ2pCLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFDakIsQ0FBQztZQUNELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUVPLFVBQVU7UUFDaEIsMkJBQTJCO1FBQzNC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c0JBQW5CLEtBQUs7Z0JBR0UsU0FBUztzQkFEaEIsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVGVtcGxhdGVSZWYsXG4gIFR5cGUsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgQ29tcG9uZW50UmVmLFxuICBpbmplY3QsXG4gIFZpZXdDaGlsZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IENvcGlsb3RLaXRTZXJ2aWNlIH0gZnJvbSBcIi4uL2NvcmUvY29waWxvdGtpdC5zZXJ2aWNlXCI7XG5pbXBvcnQgdHlwZSB7XG4gIFRvb2xDYWxsUHJvcHMsXG4gIEFuZ3VsYXJUb29sQ2FsbFJlbmRlcixcbn0gZnJvbSBcIi4uL2NvcmUvY29waWxvdGtpdC50eXBlc1wiO1xuaW1wb3J0IHsgVG9vbENhbGxTdGF0dXMgfSBmcm9tIFwiLi4vY29yZS9jb3BpbG90a2l0LnR5cGVzXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJjb3BpbG90a2l0LXRvb2wtcmVuZGVyXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy1jb250YWluZXIgI2R5bmFtaWNDb250YWluZXI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRlbXBsYXRlUmVmICYmIHRlbXBsYXRlQ29udGV4dFwiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlUmVmOyBjb250ZXh0OiB0ZW1wbGF0ZUNvbnRleHRcIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBDb3BpbG90S2l0VG9vbFJlbmRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIHRvb2xOYW1lITogc3RyaW5nO1xuICBASW5wdXQoKSBhcmdzOiBhbnk7XG4gIEBJbnB1dCgpIHN0YXR1czogVG9vbENhbGxTdGF0dXMgPSBUb29sQ2FsbFN0YXR1cy5JblByb2dyZXNzO1xuICBASW5wdXQoKSByZXN1bHQ/OiBhbnk7XG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIEBWaWV3Q2hpbGQoXCJkeW5hbWljQ29udGFpbmVyXCIsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgY29udGFpbmVyITogVmlld0NvbnRhaW5lclJlZjtcblxuICBwcml2YXRlIGNvcGlsb3RraXQgPSBpbmplY3QoQ29waWxvdEtpdFNlcnZpY2UpO1xuICBwcml2YXRlIGNvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxhbnk+O1xuXG4gIHRlbXBsYXRlUmVmPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgdGVtcGxhdGVDb250ZXh0PzogYW55O1xuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbmRlclRvb2woKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzW1widG9vbE5hbWVcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJhcmdzXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wic3RhdHVzXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wicmVzdWx0XCJdXG4gICAgKSB7XG4gICAgICB0aGlzLnJlbmRlclRvb2woKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclRvb2woKTogdm9pZCB7XG4gICAgLy8gQ2xlYXIgZXhpc3RpbmcgY29tcG9uZW50XG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBDbGVhciB0ZW1wbGF0ZVxuICAgIHRoaXMudGVtcGxhdGVSZWYgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50ZW1wbGF0ZUNvbnRleHQgPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXRoaXMudG9vbE5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIHRvb2wgcmVuZGVyIGNvbmZpZ3VyYXRpb25cbiAgICBjb25zdCB0b29sUmVuZGVyID0gdGhpcy5jb3BpbG90a2l0LmdldFRvb2xSZW5kZXIodGhpcy50b29sTmFtZSkgYXNcbiAgICAgIHwgQW5ndWxhclRvb2xDYWxsUmVuZGVyXG4gICAgICB8IHVuZGVmaW5lZDtcblxuICAgIGlmICghdG9vbFJlbmRlcikge1xuICAgICAgY29uc29sZS53YXJuKGBObyByZW5kZXIgZm91bmQgZm9yIHRvb2w6ICR7dGhpcy50b29sTmFtZX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIHByb3BzIHRvIHBhc3MgdG8gdGhlIGNvbXBvbmVudFxuICAgIGNvbnN0IHByb3BzOiBUb29sQ2FsbFByb3BzPGFueT4gPSB7XG4gICAgICBuYW1lOiB0aGlzLnRvb2xOYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24gfHwgXCJcIixcbiAgICAgIGFyZ3M6IHRoaXMuYXJncyxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICByZXN1bHQ6IHRoaXMucmVzdWx0LFxuICAgIH07XG5cbiAgICAvLyBDaGVjayBpZiByZW5kZXIgaXMgYSBDb21wb25lbnQgY2xhc3Mgb3IgVGVtcGxhdGVSZWZcbiAgICBpZiAodGhpcy5pc0NvbXBvbmVudENsYXNzKHRvb2xSZW5kZXIucmVuZGVyKSkge1xuICAgICAgLy8gQ3JlYXRlIGNvbXBvbmVudCBkeW5hbWljYWxseVxuICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnQodG9vbFJlbmRlci5yZW5kZXIsIHByb3BzKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNUZW1wbGF0ZVJlZih0b29sUmVuZGVyLnJlbmRlcikpIHtcbiAgICAgIC8vIFVzZSB0ZW1wbGF0ZVxuICAgICAgdGhpcy5yZW5kZXJUZW1wbGF0ZSh0b29sUmVuZGVyLnJlbmRlciwgcHJvcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIHJlbmRlciB0eXBlIGZvciB0b29sOiAke3RoaXMudG9vbE5hbWV9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJDb21wb25lbnQoXG4gICAgY29tcG9uZW50Q2xhc3M6IFR5cGU8YW55PixcbiAgICBwcm9wczogVG9vbENhbGxQcm9wc1xuICApOiB2b2lkIHtcbiAgICAvLyBDbGVhciB0aGUgY29udGFpbmVyXG4gICAgdGhpcy5jb250YWluZXIuY2xlYXIoKTtcblxuICAgIC8vIENyZWF0ZSB0aGUgY29tcG9uZW50XG4gICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLmNvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50Q2xhc3MpO1xuXG4gICAgLy8gRGV0ZXJtaW5lIGRlY2xhcmVkIGlucHV0cyB0byBhdm9pZCBORzAzMDMgbG9nc1xuICAgIGNvbnN0IGNtcERlZjogYW55ID0gKGNvbXBvbmVudENsYXNzIGFzIGFueSkuybVjbXA7XG4gICAgY29uc3QgZGVjbGFyZWRJbnB1dHMgPSBuZXcgU2V0PHN0cmluZz4oT2JqZWN0LmtleXMoY21wRGVmPy5pbnB1dHMgPz8ge30pKTtcblxuICAgIGlmIChkZWNsYXJlZElucHV0cy5oYXMoJ3Byb3BzJykpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KCdwcm9wcycsIHByb3BzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocHJvcHMpKSB7XG4gICAgICAgIGlmIChkZWNsYXJlZElucHV0cy5oYXMoa2V5KSkge1xuICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgdGhpcy5jb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJUZW1wbGF0ZShcbiAgICB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PixcbiAgICBwcm9wczogVG9vbENhbGxQcm9wc1xuICApOiB2b2lkIHtcbiAgICB0aGlzLnRlbXBsYXRlUmVmID0gdGVtcGxhdGU7XG4gICAgdGhpcy50ZW1wbGF0ZUNvbnRleHQgPSB7XG4gICAgICAkaW1wbGljaXQ6IHByb3BzLFxuICAgICAgbmFtZTogcHJvcHMubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGFyZ3M6IHByb3BzLmFyZ3MsXG4gICAgICBzdGF0dXM6IHByb3BzLnN0YXR1cyxcbiAgICAgIHJlc3VsdDogcHJvcHMucmVzdWx0LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGlzQ29tcG9uZW50Q2xhc3ModmFsdWU6IGFueSk6IHZhbHVlIGlzIFR5cGU8YW55PiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiICYmIHZhbHVlLnByb3RvdHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNUZW1wbGF0ZVJlZih2YWx1ZTogYW55KTogdmFsdWUgaXMgVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWY7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { CopilotChatConfigurationService } from './chat-configuration.service';
|
|
2
|
-
import { COPILOT_CHAT_INITIAL_CONFIG } from './chat-configuration.types';
|
|
3
|
-
/**
|
|
4
|
-
* Provides CopilotKit chat configuration at a specific component level.
|
|
5
|
-
* This allows for scoped configuration where different parts of the app
|
|
6
|
-
* can have different chat configurations.
|
|
7
|
-
*
|
|
8
|
-
* @param config - Optional initial configuration
|
|
9
|
-
* @returns Array of providers
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```typescript
|
|
13
|
-
* // Global configuration in app.config.ts
|
|
14
|
-
* export const appConfig: ApplicationConfig = {
|
|
15
|
-
* providers: [
|
|
16
|
-
* provideCopilotChatConfiguration({
|
|
17
|
-
* labels: {
|
|
18
|
-
* chatInputPlaceholder: "How can I help you today?"
|
|
19
|
-
* }
|
|
20
|
-
* })
|
|
21
|
-
* ]
|
|
22
|
-
* };
|
|
23
|
-
*
|
|
24
|
-
* // Component-scoped configuration
|
|
25
|
-
* @Component({
|
|
26
|
-
* selector: 'customer-support-chat',
|
|
27
|
-
* providers: [
|
|
28
|
-
* provideCopilotChatConfiguration({
|
|
29
|
-
* labels: {
|
|
30
|
-
* chatInputPlaceholder: "Describe your issue..."
|
|
31
|
-
* },
|
|
32
|
-
* onSubmitInput: (value) => console.log('Support message:', value)
|
|
33
|
-
* })
|
|
34
|
-
* ],
|
|
35
|
-
* template: `...`
|
|
36
|
-
* })
|
|
37
|
-
* export class CustomerSupportChatComponent {}
|
|
38
|
-
*
|
|
39
|
-
* // Multiple independent chats
|
|
40
|
-
* @Component({
|
|
41
|
-
* selector: 'sales-chat',
|
|
42
|
-
* providers: [
|
|
43
|
-
* provideCopilotChatConfiguration({
|
|
44
|
-
* labels: {
|
|
45
|
-
* chatInputPlaceholder: "Ask about our products..."
|
|
46
|
-
* }
|
|
47
|
-
* })
|
|
48
|
-
* ],
|
|
49
|
-
* template: `...`
|
|
50
|
-
* })
|
|
51
|
-
* export class SalesChatComponent {}
|
|
52
|
-
* ```
|
|
53
|
-
*/
|
|
54
|
-
export function provideCopilotChatConfiguration(config) {
|
|
55
|
-
return [
|
|
56
|
-
// Provide the service
|
|
57
|
-
CopilotChatConfigurationService,
|
|
58
|
-
// Provide the initial configuration
|
|
59
|
-
{
|
|
60
|
-
provide: COPILOT_CHAT_INITIAL_CONFIG,
|
|
61
|
-
useValue: config || {}
|
|
62
|
-
}
|
|
63
|
-
];
|
|
64
|
-
}
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1jb25maWd1cmF0aW9uLnByb3ZpZGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL2NoYXQtY29uZmlndXJhdGlvbi9jaGF0LWNvbmZpZ3VyYXRpb24ucHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9FLE9BQU8sRUFFTCwyQkFBMkIsRUFDNUIsTUFBTSw0QkFBNEIsQ0FBQztBQUVwQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrREc7QUFDSCxNQUFNLFVBQVUsK0JBQStCLENBQzdDLE1BQWlDO0lBRWpDLE9BQU87UUFDTCxzQkFBc0I7UUFDdEIsK0JBQStCO1FBQy9CLG9DQUFvQztRQUNwQztZQUNFLE9BQU8sRUFBRSwyQkFBMkI7WUFDcEMsUUFBUSxFQUFFLE1BQU0sSUFBSSxFQUFFO1NBQ3ZCO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29waWxvdENoYXRDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4vY2hhdC1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgXG4gIENvcGlsb3RDaGF0Q29uZmlndXJhdGlvbixcbiAgQ09QSUxPVF9DSEFUX0lOSVRJQUxfQ09ORklHIFxufSBmcm9tICcuL2NoYXQtY29uZmlndXJhdGlvbi50eXBlcyc7XG5cbi8qKlxuICogUHJvdmlkZXMgQ29waWxvdEtpdCBjaGF0IGNvbmZpZ3VyYXRpb24gYXQgYSBzcGVjaWZpYyBjb21wb25lbnQgbGV2ZWwuXG4gKiBUaGlzIGFsbG93cyBmb3Igc2NvcGVkIGNvbmZpZ3VyYXRpb24gd2hlcmUgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBhcHBcbiAqIGNhbiBoYXZlIGRpZmZlcmVudCBjaGF0IGNvbmZpZ3VyYXRpb25zLlxuICogXG4gKiBAcGFyYW0gY29uZmlnIC0gT3B0aW9uYWwgaW5pdGlhbCBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBBcnJheSBvZiBwcm92aWRlcnNcbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEdsb2JhbCBjb25maWd1cmF0aW9uIGluIGFwcC5jb25maWcudHNcbiAqIGV4cG9ydCBjb25zdCBhcHBDb25maWc6IEFwcGxpY2F0aW9uQ29uZmlnID0ge1xuICogICBwcm92aWRlcnM6IFtcbiAqICAgICBwcm92aWRlQ29waWxvdENoYXRDb25maWd1cmF0aW9uKHtcbiAqICAgICAgIGxhYmVsczoge1xuICogICAgICAgICBjaGF0SW5wdXRQbGFjZWhvbGRlcjogXCJIb3cgY2FuIEkgaGVscCB5b3UgdG9kYXk/XCJcbiAqICAgICAgIH1cbiAqICAgICB9KVxuICogICBdXG4gKiB9O1xuICogXG4gKiAvLyBDb21wb25lbnQtc2NvcGVkIGNvbmZpZ3VyYXRpb25cbiAqIEBDb21wb25lbnQoe1xuICogICBzZWxlY3RvcjogJ2N1c3RvbWVyLXN1cHBvcnQtY2hhdCcsXG4gKiAgIHByb3ZpZGVyczogW1xuICogICAgIHByb3ZpZGVDb3BpbG90Q2hhdENvbmZpZ3VyYXRpb24oe1xuICogICAgICAgbGFiZWxzOiB7XG4gKiAgICAgICAgIGNoYXRJbnB1dFBsYWNlaG9sZGVyOiBcIkRlc2NyaWJlIHlvdXIgaXNzdWUuLi5cIlxuICogICAgICAgfSxcbiAqICAgICAgIG9uU3VibWl0SW5wdXQ6ICh2YWx1ZSkgPT4gY29uc29sZS5sb2coJ1N1cHBvcnQgbWVzc2FnZTonLCB2YWx1ZSlcbiAqICAgICB9KVxuICogICBdLFxuICogICB0ZW1wbGF0ZTogYC4uLmBcbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQ3VzdG9tZXJTdXBwb3J0Q2hhdENvbXBvbmVudCB7fVxuICogXG4gKiAvLyBNdWx0aXBsZSBpbmRlcGVuZGVudCBjaGF0c1xuICogQENvbXBvbmVudCh7XG4gKiAgIHNlbGVjdG9yOiAnc2FsZXMtY2hhdCcsXG4gKiAgIHByb3ZpZGVyczogW1xuICogICAgIHByb3ZpZGVDb3BpbG90Q2hhdENvbmZpZ3VyYXRpb24oe1xuICogICAgICAgbGFiZWxzOiB7XG4gKiAgICAgICAgIGNoYXRJbnB1dFBsYWNlaG9sZGVyOiBcIkFzayBhYm91dCBvdXIgcHJvZHVjdHMuLi5cIlxuICogICAgICAgfVxuICogICAgIH0pXG4gKiAgIF0sXG4gKiAgIHRlbXBsYXRlOiBgLi4uYFxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBTYWxlc0NoYXRDb21wb25lbnQge31cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUNvcGlsb3RDaGF0Q29uZmlndXJhdGlvbihcbiAgY29uZmlnPzogQ29waWxvdENoYXRDb25maWd1cmF0aW9uXG4pOiBQcm92aWRlcltdIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBQcm92aWRlIHRoZSBzZXJ2aWNlXG4gICAgQ29waWxvdENoYXRDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICAvLyBQcm92aWRlIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb25cbiAgICB7XG4gICAgICBwcm92aWRlOiBDT1BJTE9UX0NIQVRfSU5JVElBTF9DT05GSUcsXG4gICAgICB1c2VWYWx1ZTogY29uZmlnIHx8IHt9XG4gICAgfVxuICBdO1xufSJdfQ==
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import { Injectable, Inject, Optional, signal } from '@angular/core';
|
|
2
|
-
import { COPILOT_CHAT_DEFAULT_LABELS, COPILOT_CHAT_INITIAL_CONFIG } from './chat-configuration.types';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
/**
|
|
5
|
-
* Service for managing CopilotKit chat configuration.
|
|
6
|
-
* Can be provided at different component levels for scoped configuration.
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* ```typescript
|
|
10
|
-
* // Global configuration
|
|
11
|
-
* providers: [provideCopilotChatConfiguration({ labels: { ... } })]
|
|
12
|
-
*
|
|
13
|
-
* // Component-scoped configuration
|
|
14
|
-
* @Component({
|
|
15
|
-
* providers: [provideCopilotChatConfiguration()],
|
|
16
|
-
* ...
|
|
17
|
-
* })
|
|
18
|
-
* ```
|
|
19
|
-
*/
|
|
20
|
-
export class CopilotChatConfigurationService {
|
|
21
|
-
initialConfig;
|
|
22
|
-
// State signals
|
|
23
|
-
_labels;
|
|
24
|
-
_inputValue;
|
|
25
|
-
_onSubmitInput;
|
|
26
|
-
_onChangeInput;
|
|
27
|
-
// Public readonly signals
|
|
28
|
-
labels;
|
|
29
|
-
inputValue;
|
|
30
|
-
constructor(initialConfig) {
|
|
31
|
-
this.initialConfig = initialConfig;
|
|
32
|
-
// Initialize state signals
|
|
33
|
-
this._labels = signal(this.mergeLabels(this.initialConfig?.labels));
|
|
34
|
-
this._inputValue = signal(this.initialConfig?.inputValue);
|
|
35
|
-
this._onSubmitInput = signal(this.initialConfig?.onSubmitInput);
|
|
36
|
-
this._onChangeInput = signal(this.initialConfig?.onChangeInput);
|
|
37
|
-
// Initialize public readonly signals
|
|
38
|
-
this.labels = this._labels.asReadonly();
|
|
39
|
-
this.inputValue = this._inputValue.asReadonly();
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Update chat labels (partial update, merged with defaults)
|
|
43
|
-
*/
|
|
44
|
-
setLabels(labels) {
|
|
45
|
-
this._labels.set(this.mergeLabels(labels));
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Update the current input value
|
|
49
|
-
*/
|
|
50
|
-
setInputValue(value) {
|
|
51
|
-
this._inputValue.set(value);
|
|
52
|
-
// Also trigger change handler if set
|
|
53
|
-
if (value !== undefined) {
|
|
54
|
-
this.changeInput(value);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Set the submit input handler
|
|
59
|
-
*/
|
|
60
|
-
setSubmitHandler(handler) {
|
|
61
|
-
this._onSubmitInput.set(handler);
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Set the change input handler
|
|
65
|
-
*/
|
|
66
|
-
setChangeHandler(handler) {
|
|
67
|
-
this._onChangeInput.set(handler);
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Submit the current input value
|
|
71
|
-
*/
|
|
72
|
-
submitInput(value) {
|
|
73
|
-
const handler = this._onSubmitInput();
|
|
74
|
-
if (handler) {
|
|
75
|
-
handler(value);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Handle input value change
|
|
80
|
-
*/
|
|
81
|
-
changeInput(value) {
|
|
82
|
-
const handler = this._onChangeInput();
|
|
83
|
-
if (handler) {
|
|
84
|
-
handler(value);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Update the entire configuration at once
|
|
89
|
-
*/
|
|
90
|
-
updateConfiguration(config) {
|
|
91
|
-
if (config.labels) {
|
|
92
|
-
this.setLabels(config.labels);
|
|
93
|
-
}
|
|
94
|
-
if (config.inputValue !== undefined) {
|
|
95
|
-
this._inputValue.set(config.inputValue);
|
|
96
|
-
}
|
|
97
|
-
if (config.onSubmitInput) {
|
|
98
|
-
this.setSubmitHandler(config.onSubmitInput);
|
|
99
|
-
}
|
|
100
|
-
if (config.onChangeInput) {
|
|
101
|
-
this.setChangeHandler(config.onChangeInput);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Reset configuration to defaults
|
|
106
|
-
*/
|
|
107
|
-
reset() {
|
|
108
|
-
this._labels.set(COPILOT_CHAT_DEFAULT_LABELS);
|
|
109
|
-
this._inputValue.set(undefined);
|
|
110
|
-
this._onSubmitInput.set(undefined);
|
|
111
|
-
this._onChangeInput.set(undefined);
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Get the current submit handler
|
|
115
|
-
*/
|
|
116
|
-
getSubmitHandler() {
|
|
117
|
-
return this._onSubmitInput();
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Get the current change handler
|
|
121
|
-
*/
|
|
122
|
-
getChangeHandler() {
|
|
123
|
-
return this._onChangeInput();
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Merge partial labels with defaults
|
|
127
|
-
*/
|
|
128
|
-
mergeLabels(partial) {
|
|
129
|
-
return {
|
|
130
|
-
...COPILOT_CHAT_DEFAULT_LABELS,
|
|
131
|
-
...partial
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatConfigurationService, deps: [{ token: COPILOT_CHAT_INITIAL_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
135
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatConfigurationService });
|
|
136
|
-
}
|
|
137
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CopilotChatConfigurationService, decorators: [{
|
|
138
|
-
type: Injectable
|
|
139
|
-
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
140
|
-
type: Optional
|
|
141
|
-
}, {
|
|
142
|
-
type: Inject,
|
|
143
|
-
args: [COPILOT_CHAT_INITIAL_CONFIG]
|
|
144
|
-
}] }] });
|
|
145
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1jb25maWd1cmF0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZS9jaGF0LWNvbmZpZ3VyYXRpb24vY2hhdC1jb25maWd1cmF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBR0wsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUM1QixNQUFNLDRCQUE0QixDQUFDOztBQUVwQzs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxNQUFNLE9BQU8sK0JBQStCO0lBWTBCO0lBWHBFLGdCQUFnQjtJQUNDLE9BQU8sQ0FBK0M7SUFDdEQsV0FBVyxDQUFnRDtJQUMzRCxjQUFjLENBQW1FO0lBQ2pGLGNBQWMsQ0FBbUU7SUFFbEcsMEJBQTBCO0lBQ2pCLE1BQU0sQ0FBK0Y7SUFDckcsVUFBVSxDQUFnRztJQUVuSCxZQUNvRSxhQUE4QztRQUE5QyxrQkFBYSxHQUFiLGFBQWEsQ0FBaUM7UUFFaEgsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQzdDLENBQUM7UUFDRixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FDdkIsSUFBSSxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQy9CLENBQUM7UUFDRixJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FDMUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQ2xDLENBQUM7UUFDRixJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FDMUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQ2xDLENBQUM7UUFFRixxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJ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LDJCQUEyQjtZQUM5QixHQUFHLE9BQU87U0FDWCxDQUFDO0lBQ0osQ0FBQzt3R0F2SVUsK0JBQStCLGtCQVlwQiwyQkFBMkI7NEdBWnRDLCtCQUErQjs7NEZBQS9CLCtCQUErQjtrQkFEM0MsVUFBVTs7MEJBYU4sUUFBUTs7MEJBQUksTUFBTTsyQkFBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIE9wdGlvbmFsLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFxuICBDb3BpbG90Q2hhdENvbmZpZ3VyYXRpb24sIFxuICBDb3BpbG90Q2hhdExhYmVscyxcbiAgQ09QSUxPVF9DSEFUX0RFRkFVTFRfTEFCRUxTLFxuICBDT1BJTE9UX0NIQVRfSU5JVElBTF9DT05GSUdcbn0gZnJvbSAnLi9jaGF0LWNvbmZpZ3VyYXRpb24udHlwZXMnO1xuXG4vKipcbiAqIFNlcnZpY2UgZm9yIG1hbmFnaW5nIENvcGlsb3RLaXQgY2hhdCBjb25maWd1cmF0aW9uLlxuICogQ2FuIGJlIHByb3ZpZGVkIGF0IGRpZmZlcmVudCBjb21wb25lbnQgbGV2ZWxzIGZvciBzY29wZWQgY29uZmlndXJhdGlvbi5cbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEdsb2JhbCBjb25maWd1cmF0aW9uXG4gKiBwcm92aWRlcnM6IFtwcm92aWRlQ29waWxvdENoYXRDb25maWd1cmF0aW9uKHsgbGFiZWxzOiB7IC4uLiB9IH0pXVxuICogXG4gKiAvLyBDb21wb25lbnQtc2NvcGVkIGNvbmZpZ3VyYXRpb25cbiAqIEBDb21wb25lbnQoe1xuICogICBwcm92aWRlcnM6IFtwcm92aWRlQ29waWxvdENoYXRDb25maWd1cmF0aW9uKCldLFxuICogICAuLi5cbiAqIH0pXG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvcGlsb3RDaGF0Q29uZmlndXJhdGlvblNlcnZpY2Uge1xuICAvLyBTdGF0ZSBzaWduYWxzXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xhYmVsczogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPENvcGlsb3RDaGF0TGFiZWxzPj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lucHV0VmFsdWU6IFJldHVyblR5cGU8dHlwZW9mIHNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfb25TdWJtaXRJbnB1dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPCgodmFsdWU6IHN0cmluZykgPT4gdm9pZCkgfCB1bmRlZmluZWQ+PjtcbiAgcHJpdmF0ZSByZWFkb25seSBfb25DaGFuZ2VJbnB1dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPCgodmFsdWU6IHN0cmluZykgPT4gdm9pZCkgfCB1bmRlZmluZWQ+PjtcbiAgXG4gIC8vIFB1YmxpYyByZWFkb25seSBzaWduYWxzXG4gIHJlYWRvbmx5IGxhYmVsczogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPENvcGlsb3RDaGF0TGFiZWxzPj5bJ2FzUmVhZG9ubHknXSBleHRlbmRzICgpID0+IGluZmVyIFIgPyBSIDogbmV2ZXI7XG4gIHJlYWRvbmx5IGlucHV0VmFsdWU6IFJldHVyblR5cGU8dHlwZW9mIHNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+PlsnYXNSZWFkb25seSddIGV4dGVuZHMgKCkgPT4gaW5mZXIgUiA/IFIgOiBuZXZlcjtcbiAgXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQ09QSUxPVF9DSEFUX0lOSVRJQUxfQ09ORklHKSBwcml2YXRlIHJlYWRvbmx5IGluaXRpYWxDb25maWc6IENvcGlsb3RDaGF0Q29uZmlndXJhdGlvbiB8IG51bGxcbiAgKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBzdGF0ZSBzaWduYWxzXG4gICAgdGhpcy5fbGFiZWxzID0gc2lnbmFsPENvcGlsb3RDaGF0TGFiZWxzPihcbiAgICAgIHRoaXMubWVyZ2VMYWJlbHModGhpcy5pbml0aWFsQ29uZmlnPy5sYWJlbHMpXG4gICAgKTtcbiAgICB0aGlzLl9pbnB1dFZhbHVlID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4oXG4gICAgICB0aGlzLmluaXRpYWxDb25maWc/LmlucHV0VmFsdWVcbiAgICApO1xuICAgIHRoaXMuX29uU3VibWl0SW5wdXQgPSBzaWduYWw8KCh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKSB8IHVuZGVmaW5lZD4oXG4gICAgICB0aGlzLmluaXRpYWxDb25maWc/Lm9uU3VibWl0SW5wdXRcbiAgICApO1xuICAgIHRoaXMuX29uQ2hhbmdlSW5wdXQgPSBzaWduYWw8KCh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKSB8IHVuZGVmaW5lZD4oXG4gICAgICB0aGlzLmluaXRpYWxDb25maWc/Lm9uQ2hhbmdlSW5wdXRcbiAgICApO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgcHVibGljIHJlYWRvbmx5IHNpZ25hbHNcbiAgICB0aGlzLmxhYmVscyA9IHRoaXMuX2xhYmVscy5hc1JlYWRvbmx5KCk7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5faW5wdXRWYWx1ZS5hc1JlYWRvbmx5KCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBVcGRhdGUgY2hhdCBsYWJlbHMgKHBhcnRpYWwgdXBkYXRlLCBtZXJnZWQgd2l0aCBkZWZhdWx0cylcbiAgICovXG4gIHNldExhYmVscyhsYWJlbHM6IFBhcnRpYWw8Q29waWxvdENoYXRMYWJlbHM+KTogdm9pZCB7XG4gICAgdGhpcy5fbGFiZWxzLnNldCh0aGlzLm1lcmdlTGFiZWxzKGxhYmVscykpO1xuICB9XG4gIFxuICAvKipcbiAgICogVXBkYXRlIHRoZSBjdXJyZW50IGlucHV0IHZhbHVlXG4gICAqL1xuICBzZXRJbnB1dFZhbHVlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnB1dFZhbHVlLnNldCh2YWx1ZSk7XG4gICAgLy8gQWxzbyB0cmlnZ2VyIGNoYW5nZSBoYW5kbGVyIGlmIHNldFxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNoYW5nZUlucHV0KHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTZXQgdGhlIHN1Ym1pdCBpbnB1dCBoYW5kbGVyXG4gICAqL1xuICBzZXRTdWJtaXRIYW5kbGVyKGhhbmRsZXI6ICgodmFsdWU6IHN0cmluZykgPT4gdm9pZCkgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vblN1Ym1pdElucHV0LnNldChoYW5kbGVyKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFNldCB0aGUgY2hhbmdlIGlucHV0IGhhbmRsZXJcbiAgICovXG4gIHNldENoYW5nZUhhbmRsZXIoaGFuZGxlcjogKCh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlSW5wdXQuc2V0KGhhbmRsZXIpO1xuICB9XG4gIFxuICAvKipcbiAgICogU3VibWl0IHRoZSBjdXJyZW50IGlucHV0IHZhbHVlXG4gICAqL1xuICBzdWJtaXRJbnB1dCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaGFuZGxlciA9IHRoaXMuX29uU3VibWl0SW5wdXQoKTtcbiAgICBpZiAoaGFuZGxlcikge1xuICAgICAgaGFuZGxlcih2YWx1ZSk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogSGFuZGxlIGlucHV0IHZhbHVlIGNoYW5nZVxuICAgKi9cbiAgY2hhbmdlSW5wdXQodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLl9vbkNoYW5nZUlucHV0KCk7XG4gICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgIGhhbmRsZXIodmFsdWUpO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgZW50aXJlIGNvbmZpZ3VyYXRpb24gYXQgb25jZVxuICAgKi9cbiAgdXBkYXRlQ29uZmlndXJhdGlvbihjb25maWc6IENvcGlsb3RDaGF0Q29uZmlndXJhdGlvbik6IHZvaWQge1xuICAgIGlmIChjb25maWcubGFiZWxzKSB7XG4gICAgICB0aGlzLnNldExhYmVscyhjb25maWcubGFiZWxzKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5pbnB1dFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2lucHV0VmFsdWUuc2V0KGNvbmZpZy5pbnB1dFZhbHVlKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5vblN1Ym1pdElucHV0KSB7XG4gICAgICB0aGlzLnNldFN1Ym1pdEhhbmRsZXIoY29uZmlnLm9uU3VibWl0SW5wdXQpO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLm9uQ2hhbmdlSW5wdXQpIHtcbiAgICAgIHRoaXMuc2V0Q2hhbmdlSGFuZGxlcihjb25maWcub25DaGFuZ2VJbnB1dCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogUmVzZXQgY29uZmlndXJhdGlvbiB0byBkZWZhdWx0c1xuICAgKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5fbGFiZWxzLnNldChDT1BJTE9UX0NIQVRfREVGQVVMVF9MQUJFTFMpO1xuICAgIHRoaXMuX2lucHV0VmFsdWUuc2V0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5fb25TdWJtaXRJbnB1dC5zZXQodW5kZWZpbmVkKTtcbiAgICB0aGlzLl9vbkNoYW5nZUlucHV0LnNldCh1bmRlZmluZWQpO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHN1Ym1pdCBoYW5kbGVyXG4gICAqL1xuICBnZXRTdWJtaXRIYW5kbGVyKCk6ICgodmFsdWU6IHN0cmluZykgPT4gdm9pZCkgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9vblN1Ym1pdElucHV0KCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgY2hhbmdlIGhhbmRsZXJcbiAgICovXG4gIGdldENoYW5nZUhhbmRsZXIoKTogKCh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX29uQ2hhbmdlSW5wdXQoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIE1lcmdlIHBhcnRpYWwgbGFiZWxzIHdpdGggZGVmYXVsdHNcbiAgICovXG4gIHByaXZhdGUgbWVyZ2VMYWJlbHMocGFydGlhbD86IFBhcnRpYWw8Q29waWxvdENoYXRMYWJlbHM+KTogQ29waWxvdENoYXRMYWJlbHMge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5DT1BJTE9UX0NIQVRfREVGQVVMVF9MQUJFTFMsXG4gICAgICAuLi5wYXJ0aWFsXG4gICAgfTtcbiAgfVxufVxuIl19
|