@copilotkitnext/angular 1.52.0-next.7 → 1.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +225 -432
- package/dist/README.md +225 -432
- package/dist/fesm2022/copilotkitnext-angular.mjs +312 -161
- package/dist/fesm2022/copilotkitnext-angular.mjs.map +1 -1
- package/dist/lib/agent.d.ts +20 -20
- package/dist/lib/components/chat/copilot-chat-assistant-message.d.ts +46 -46
- package/dist/lib/components/chat/copilot-chat-message-view.d.ts +126 -126
- package/dist/lib/components/chat/copilot-chat-tool-calls-view.d.ts +23 -23
- package/dist/lib/components/chat/copilot-chat-user-message-branch-navigation.d.ts +6 -6
- package/dist/lib/components/chat/copilot-chat-user-message.d.ts +6 -6
- package/dist/lib/components/chat/copilot-chat-view-scroll-view.d.ts +18 -18
- package/dist/lib/components/chat/copilot-chat-view.d.ts +54 -54
- package/dist/lib/components/chat/copilot-chat.d.ts +18 -18
- package/dist/lib/config.d.ts +1 -0
- package/dist/lib/copilotkit.d.ts +6 -1
- package/dist/lib/license-watermark.d.ts +1 -0
- package/dist/lib/render-tool-calls.d.ts +23 -23
- package/dist/styles.css +3 -0
- package/package.json +18 -18
- package/dist/esm2022/copilotkitnext-angular.mjs +0 -5
- package/dist/esm2022/index.mjs +0 -2
- package/dist/esm2022/lib/agent-context.mjs +0 -25
- package/dist/esm2022/lib/agent.mjs +0 -73
- package/dist/esm2022/lib/chat-config.mjs +0 -35
- package/dist/esm2022/lib/chat-state.mjs +0 -18
- package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-buttons.mjs +0 -344
- package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-renderer.mjs +0 -260
- package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-toolbar.mjs +0 -22
- package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message.mjs +0 -415
- package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message.types.mjs +0 -2
- package/dist/esm2022/lib/components/chat/copilot-chat-audio-recorder.mjs +0 -196
- package/dist/esm2022/lib/components/chat/copilot-chat-buttons.mjs +0 -299
- package/dist/esm2022/lib/components/chat/copilot-chat-input-defaults.mjs +0 -39
- package/dist/esm2022/lib/components/chat/copilot-chat-input.mjs +0 -634
- package/dist/esm2022/lib/components/chat/copilot-chat-input.types.mjs +0 -10
- package/dist/esm2022/lib/components/chat/copilot-chat-message-view-cursor.mjs +0 -27
- package/dist/esm2022/lib/components/chat/copilot-chat-message-view.mjs +0 -269
- package/dist/esm2022/lib/components/chat/copilot-chat-message-view.types.mjs +0 -2
- package/dist/esm2022/lib/components/chat/copilot-chat-textarea.mjs +0 -139
- package/dist/esm2022/lib/components/chat/copilot-chat-tool-calls-view.mjs +0 -36
- package/dist/esm2022/lib/components/chat/copilot-chat-toolbar.mjs +0 -20
- package/dist/esm2022/lib/components/chat/copilot-chat-tools-menu.mjs +0 -203
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message-branch-navigation.mjs +0 -118
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message-buttons.mjs +0 -182
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message-renderer.mjs +0 -28
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message-toolbar.mjs +0 -25
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message.mjs +0 -328
- package/dist/esm2022/lib/components/chat/copilot-chat-user-message.types.mjs +0 -2
- package/dist/esm2022/lib/components/chat/copilot-chat-view-disclaimer.mjs +0 -48
- package/dist/esm2022/lib/components/chat/copilot-chat-view-feather.mjs +0 -41
- package/dist/esm2022/lib/components/chat/copilot-chat-view-handlers.mjs +0 -19
- package/dist/esm2022/lib/components/chat/copilot-chat-view-input-container.mjs +0 -96
- package/dist/esm2022/lib/components/chat/copilot-chat-view-scroll-to-bottom-button.mjs +0 -89
- package/dist/esm2022/lib/components/chat/copilot-chat-view-scroll-view.mjs +0 -456
- package/dist/esm2022/lib/components/chat/copilot-chat-view.mjs +0 -404
- package/dist/esm2022/lib/components/chat/copilot-chat-view.types.mjs +0 -2
- package/dist/esm2022/lib/components/chat/copilot-chat.mjs +0 -165
- package/dist/esm2022/lib/config.mjs +0 -9
- package/dist/esm2022/lib/copilotkit.mjs +0 -125
- package/dist/esm2022/lib/directives/copilotkit-agent-context.mjs +0 -130
- package/dist/esm2022/lib/directives/stick-to-bottom.mjs +0 -170
- package/dist/esm2022/lib/directives/tooltip.mjs +0 -217
- package/dist/esm2022/lib/human-in-the-loop.mjs +0 -19
- package/dist/esm2022/lib/render-tool-calls.mjs +0 -167
- package/dist/esm2022/lib/resize-observer.mjs +0 -152
- package/dist/esm2022/lib/scroll-position.mjs +0 -123
- package/dist/esm2022/lib/slots/copilot-slot.mjs +0 -156
- package/dist/esm2022/lib/slots/index.mjs +0 -4
- package/dist/esm2022/lib/slots/slot.types.mjs +0 -6
- package/dist/esm2022/lib/slots/slot.utils.mjs +0 -235
- package/dist/esm2022/lib/tools.mjs +0 -31
- package/dist/esm2022/lib/utils.mjs +0 -10
- package/dist/esm2022/public-api.mjs +0 -48
|
@@ -1,328 +0,0 @@
|
|
|
1
|
-
import { Component, input, output, TemplateRef, ContentChild, computed, ChangeDetectionStrategy, ViewEncapsulation, } from "@angular/core";
|
|
2
|
-
import { CommonModule } from "@angular/common";
|
|
3
|
-
import { CopilotSlot } from "../../slots/copilot-slot";
|
|
4
|
-
import { CopilotChatUserMessageRenderer } from "./copilot-chat-user-message-renderer";
|
|
5
|
-
import { CopilotChatUserMessageCopyButton, CopilotChatUserMessageEditButton, } from "./copilot-chat-user-message-buttons";
|
|
6
|
-
import { CopilotChatUserMessageToolbar } from "./copilot-chat-user-message-toolbar";
|
|
7
|
-
import { CopilotChatUserMessageBranchNavigation } from "./copilot-chat-user-message-branch-navigation";
|
|
8
|
-
import { cn } from "../../utils";
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "@angular/common";
|
|
11
|
-
function flattenUserMessageContent(content) {
|
|
12
|
-
if (!content) {
|
|
13
|
-
return "";
|
|
14
|
-
}
|
|
15
|
-
if (typeof content === "string") {
|
|
16
|
-
return content;
|
|
17
|
-
}
|
|
18
|
-
return content
|
|
19
|
-
.map((part) => {
|
|
20
|
-
if (part &&
|
|
21
|
-
typeof part === "object" &&
|
|
22
|
-
"type" in part &&
|
|
23
|
-
part.type === "text" &&
|
|
24
|
-
typeof part.text === "string") {
|
|
25
|
-
return part.text;
|
|
26
|
-
}
|
|
27
|
-
return "";
|
|
28
|
-
})
|
|
29
|
-
.filter((text) => text.length > 0)
|
|
30
|
-
.join("\n");
|
|
31
|
-
}
|
|
32
|
-
export class CopilotChatUserMessage {
|
|
33
|
-
// Capture templates from content projection
|
|
34
|
-
messageRendererTemplate;
|
|
35
|
-
toolbarTemplate;
|
|
36
|
-
copyButtonTemplate;
|
|
37
|
-
editButtonTemplate;
|
|
38
|
-
branchNavigationTemplate;
|
|
39
|
-
// Props for tweaking default components
|
|
40
|
-
messageRendererClass = input();
|
|
41
|
-
toolbarClass = input();
|
|
42
|
-
copyButtonClass = input();
|
|
43
|
-
editButtonClass = input();
|
|
44
|
-
branchNavigationClass = input();
|
|
45
|
-
// Component inputs for overrides
|
|
46
|
-
messageRendererComponent = input();
|
|
47
|
-
toolbarComponent = input();
|
|
48
|
-
copyButtonComponent = input();
|
|
49
|
-
editButtonComponent = input();
|
|
50
|
-
branchNavigationComponent = input();
|
|
51
|
-
// Regular inputs
|
|
52
|
-
message = input();
|
|
53
|
-
branchIndex = input();
|
|
54
|
-
numberOfBranches = input();
|
|
55
|
-
additionalToolbarItems = input();
|
|
56
|
-
inputClass = input();
|
|
57
|
-
// Output events
|
|
58
|
-
editMessage = output();
|
|
59
|
-
switchToBranch = output();
|
|
60
|
-
// Derived values
|
|
61
|
-
branchIndexValue = computed(() => this.branchIndex() ?? 0);
|
|
62
|
-
numberOfBranchesValue = computed(() => this.numberOfBranches() ?? 1);
|
|
63
|
-
// Default components
|
|
64
|
-
CopilotChatUserMessageRenderer = CopilotChatUserMessageRenderer;
|
|
65
|
-
CopilotChatUserMessageToolbar = CopilotChatUserMessageToolbar;
|
|
66
|
-
CopilotChatUserMessageCopyButton = CopilotChatUserMessageCopyButton;
|
|
67
|
-
CopilotChatUserMessageEditButton = CopilotChatUserMessageEditButton;
|
|
68
|
-
CopilotChatUserMessageBranchNavigation = CopilotChatUserMessageBranchNavigation;
|
|
69
|
-
// Computed values
|
|
70
|
-
showBranchNavigation = computed(() => (this.numberOfBranches() ?? 1) > 1);
|
|
71
|
-
computedClass = computed(() => cn("flex flex-col items-end group pt-10", this.inputClass()));
|
|
72
|
-
// Context for slots (reactive via signals)
|
|
73
|
-
flattenedContent = computed(() => flattenUserMessageContent(this.message()?.content));
|
|
74
|
-
messageRendererContext = computed(() => ({
|
|
75
|
-
content: this.flattenedContent(),
|
|
76
|
-
}));
|
|
77
|
-
// Output maps for slots
|
|
78
|
-
copyButtonOutputs = { clicked: () => this.handleCopy() };
|
|
79
|
-
editButtonOutputs = { clicked: () => this.handleEdit() };
|
|
80
|
-
branchNavigationContext = computed(() => ({
|
|
81
|
-
currentBranch: this.branchIndexValue(),
|
|
82
|
-
numberOfBranches: this.numberOfBranchesValue(),
|
|
83
|
-
onSwitchToBranch: (props) => this.handleSwitchToBranch(props),
|
|
84
|
-
message: this.message(),
|
|
85
|
-
}));
|
|
86
|
-
toolbarContext = computed(() => ({
|
|
87
|
-
children: null, // Will be populated by the toolbar content
|
|
88
|
-
}));
|
|
89
|
-
handleCopy() {
|
|
90
|
-
// Copy is handled by the button component itself
|
|
91
|
-
// This is just for any additional logic if needed
|
|
92
|
-
}
|
|
93
|
-
handleEdit() {
|
|
94
|
-
this.editMessage.emit({ message: this.message() });
|
|
95
|
-
}
|
|
96
|
-
handleSwitchToBranch(props) {
|
|
97
|
-
this.switchToBranch.emit(props);
|
|
98
|
-
}
|
|
99
|
-
constructor() { }
|
|
100
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CopilotChatUserMessage, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
101
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: CopilotChatUserMessage, isStandalone: true, selector: "copilot-chat-user-message", inputs: { messageRendererClass: { classPropertyName: "messageRendererClass", publicName: "messageRendererClass", isSignal: true, isRequired: false, transformFunction: null }, toolbarClass: { classPropertyName: "toolbarClass", publicName: "toolbarClass", isSignal: true, isRequired: false, transformFunction: null }, copyButtonClass: { classPropertyName: "copyButtonClass", publicName: "copyButtonClass", isSignal: true, isRequired: false, transformFunction: null }, editButtonClass: { classPropertyName: "editButtonClass", publicName: "editButtonClass", isSignal: true, isRequired: false, transformFunction: null }, branchNavigationClass: { classPropertyName: "branchNavigationClass", publicName: "branchNavigationClass", isSignal: true, isRequired: false, transformFunction: null }, messageRendererComponent: { classPropertyName: "messageRendererComponent", publicName: "messageRendererComponent", isSignal: true, isRequired: false, transformFunction: null }, toolbarComponent: { classPropertyName: "toolbarComponent", publicName: "toolbarComponent", isSignal: true, isRequired: false, transformFunction: null }, copyButtonComponent: { classPropertyName: "copyButtonComponent", publicName: "copyButtonComponent", isSignal: true, isRequired: false, transformFunction: null }, editButtonComponent: { classPropertyName: "editButtonComponent", publicName: "editButtonComponent", isSignal: true, isRequired: false, transformFunction: null }, branchNavigationComponent: { classPropertyName: "branchNavigationComponent", publicName: "branchNavigationComponent", isSignal: true, isRequired: false, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, branchIndex: { classPropertyName: "branchIndex", publicName: "branchIndex", isSignal: true, isRequired: false, transformFunction: null }, numberOfBranches: { classPropertyName: "numberOfBranches", publicName: "numberOfBranches", isSignal: true, isRequired: false, transformFunction: null }, additionalToolbarItems: { classPropertyName: "additionalToolbarItems", publicName: "additionalToolbarItems", isSignal: true, isRequired: false, transformFunction: null }, inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { editMessage: "editMessage", switchToBranch: "switchToBranch" }, host: { attributes: { "data-copilotkit": "" } }, queries: [{ propertyName: "messageRendererTemplate", first: true, predicate: ["messageRenderer"], descendants: true, read: TemplateRef }, { propertyName: "toolbarTemplate", first: true, predicate: ["toolbar"], descendants: true, read: TemplateRef }, { propertyName: "copyButtonTemplate", first: true, predicate: ["copyButton"], descendants: true, read: TemplateRef }, { propertyName: "editButtonTemplate", first: true, predicate: ["editButton"], descendants: true, read: TemplateRef }, { propertyName: "branchNavigationTemplate", first: true, predicate: ["branchNavigation"], descendants: true, read: TemplateRef }], ngImport: i0, template: `
|
|
102
|
-
<div [class]="computedClass()" [attr.data-message-id]="message()?.id">
|
|
103
|
-
<!-- Message Renderer -->
|
|
104
|
-
@if (messageRendererTemplate || messageRendererComponent()) {
|
|
105
|
-
<copilot-slot
|
|
106
|
-
[slot]="messageRendererTemplate || messageRendererComponent()"
|
|
107
|
-
[context]="messageRendererContext()"
|
|
108
|
-
[defaultComponent]="CopilotChatUserMessageRenderer"
|
|
109
|
-
>
|
|
110
|
-
</copilot-slot>
|
|
111
|
-
} @else {
|
|
112
|
-
<copilot-chat-user-message-renderer
|
|
113
|
-
[content]="flattenedContent()"
|
|
114
|
-
[inputClass]="messageRendererClass()"
|
|
115
|
-
>
|
|
116
|
-
</copilot-chat-user-message-renderer>
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
<!-- Toolbar -->
|
|
120
|
-
@if (toolbarTemplate || toolbarComponent()) {
|
|
121
|
-
<copilot-slot
|
|
122
|
-
[slot]="toolbarTemplate || toolbarComponent()"
|
|
123
|
-
[context]="toolbarContext()"
|
|
124
|
-
[defaultComponent]="CopilotChatUserMessageToolbar"
|
|
125
|
-
>
|
|
126
|
-
</copilot-slot>
|
|
127
|
-
} @else {
|
|
128
|
-
<div copilotChatUserMessageToolbar [inputClass]="toolbarClass()">
|
|
129
|
-
<div class="flex items-center gap-1 justify-end">
|
|
130
|
-
<!-- Additional toolbar items -->
|
|
131
|
-
@if (additionalToolbarItems()) {
|
|
132
|
-
<ng-container
|
|
133
|
-
[ngTemplateOutlet]="additionalToolbarItems() || null"
|
|
134
|
-
></ng-container>
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
<!-- Copy button -->
|
|
138
|
-
@if (copyButtonTemplate || copyButtonComponent()) {
|
|
139
|
-
<copilot-slot
|
|
140
|
-
[slot]="copyButtonTemplate || copyButtonComponent()"
|
|
141
|
-
[context]="{ content: flattenedContent() }"
|
|
142
|
-
[outputs]="copyButtonOutputs"
|
|
143
|
-
[defaultComponent]="CopilotChatUserMessageCopyButton"
|
|
144
|
-
>
|
|
145
|
-
</copilot-slot>
|
|
146
|
-
} @else {
|
|
147
|
-
<copilot-chat-user-message-copy-button
|
|
148
|
-
[content]="flattenedContent()"
|
|
149
|
-
[inputClass]="copyButtonClass()"
|
|
150
|
-
(clicked)="handleCopy()"
|
|
151
|
-
>
|
|
152
|
-
</copilot-chat-user-message-copy-button>
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
<!-- Edit button -->
|
|
156
|
-
@if (true) {
|
|
157
|
-
@if (editButtonTemplate || editButtonComponent()) {
|
|
158
|
-
<copilot-slot
|
|
159
|
-
[slot]="editButtonTemplate || editButtonComponent()"
|
|
160
|
-
[context]="{}"
|
|
161
|
-
[outputs]="editButtonOutputs"
|
|
162
|
-
[defaultComponent]="CopilotChatUserMessageEditButton"
|
|
163
|
-
>
|
|
164
|
-
</copilot-slot>
|
|
165
|
-
} @else {
|
|
166
|
-
<copilot-chat-user-message-edit-button
|
|
167
|
-
[inputClass]="editButtonClass()"
|
|
168
|
-
(clicked)="handleEdit()"
|
|
169
|
-
>
|
|
170
|
-
</copilot-chat-user-message-edit-button>
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
<!-- Branch navigation -->
|
|
175
|
-
@if (showBranchNavigation()) {
|
|
176
|
-
@if (branchNavigationTemplate || branchNavigationComponent()) {
|
|
177
|
-
<copilot-slot
|
|
178
|
-
[slot]="
|
|
179
|
-
branchNavigationTemplate || branchNavigationComponent()
|
|
180
|
-
"
|
|
181
|
-
[context]="branchNavigationContext()"
|
|
182
|
-
[defaultComponent]="CopilotChatUserMessageBranchNavigation"
|
|
183
|
-
>
|
|
184
|
-
</copilot-slot>
|
|
185
|
-
} @else {
|
|
186
|
-
<copilot-chat-user-message-branch-navigation
|
|
187
|
-
[currentBranch]="branchIndexValue()"
|
|
188
|
-
[numberOfBranches]="numberOfBranchesValue()"
|
|
189
|
-
[message]="message()!"
|
|
190
|
-
[inputClass]="branchNavigationClass()"
|
|
191
|
-
(switchToBranch)="handleSwitchToBranch($event)"
|
|
192
|
-
>
|
|
193
|
-
</copilot-chat-user-message-branch-navigation>
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
</div>
|
|
197
|
-
</div>
|
|
198
|
-
}
|
|
199
|
-
</div>
|
|
200
|
-
`, isInline: true, styles: [":host{display:block;width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: CopilotSlot, selector: "copilot-slot", inputs: ["slot", "context", "defaultComponent", "outputs"] }, { kind: "component", type: CopilotChatUserMessageRenderer, selector: "copilot-chat-user-message-renderer", inputs: ["content", "inputClass"] }, { kind: "component", type: CopilotChatUserMessageCopyButton, selector: "copilot-chat-user-message-copy-button", inputs: ["title", "disabled", "inputClass", "content"], outputs: ["clicked"] }, { kind: "component", type: CopilotChatUserMessageEditButton, selector: "copilot-chat-user-message-edit-button", inputs: ["title", "disabled", "inputClass"], outputs: ["clicked"] }, { kind: "component", type: CopilotChatUserMessageToolbar, selector: "div[copilotChatUserMessageToolbar]", inputs: ["inputClass"] }, { kind: "component", type: CopilotChatUserMessageBranchNavigation, selector: "copilot-chat-user-message-branch-navigation", inputs: ["currentBranch", "numberOfBranches", "message", "inputClass"], outputs: ["switchToBranch"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
201
|
-
}
|
|
202
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CopilotChatUserMessage, decorators: [{
|
|
203
|
-
type: Component,
|
|
204
|
-
args: [{ standalone: true, selector: "copilot-chat-user-message", host: { "data-copilotkit": "" }, imports: [
|
|
205
|
-
CommonModule,
|
|
206
|
-
CopilotSlot,
|
|
207
|
-
CopilotChatUserMessageRenderer,
|
|
208
|
-
CopilotChatUserMessageCopyButton,
|
|
209
|
-
CopilotChatUserMessageEditButton,
|
|
210
|
-
CopilotChatUserMessageToolbar,
|
|
211
|
-
CopilotChatUserMessageBranchNavigation,
|
|
212
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: `
|
|
213
|
-
<div [class]="computedClass()" [attr.data-message-id]="message()?.id">
|
|
214
|
-
<!-- Message Renderer -->
|
|
215
|
-
@if (messageRendererTemplate || messageRendererComponent()) {
|
|
216
|
-
<copilot-slot
|
|
217
|
-
[slot]="messageRendererTemplate || messageRendererComponent()"
|
|
218
|
-
[context]="messageRendererContext()"
|
|
219
|
-
[defaultComponent]="CopilotChatUserMessageRenderer"
|
|
220
|
-
>
|
|
221
|
-
</copilot-slot>
|
|
222
|
-
} @else {
|
|
223
|
-
<copilot-chat-user-message-renderer
|
|
224
|
-
[content]="flattenedContent()"
|
|
225
|
-
[inputClass]="messageRendererClass()"
|
|
226
|
-
>
|
|
227
|
-
</copilot-chat-user-message-renderer>
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
<!-- Toolbar -->
|
|
231
|
-
@if (toolbarTemplate || toolbarComponent()) {
|
|
232
|
-
<copilot-slot
|
|
233
|
-
[slot]="toolbarTemplate || toolbarComponent()"
|
|
234
|
-
[context]="toolbarContext()"
|
|
235
|
-
[defaultComponent]="CopilotChatUserMessageToolbar"
|
|
236
|
-
>
|
|
237
|
-
</copilot-slot>
|
|
238
|
-
} @else {
|
|
239
|
-
<div copilotChatUserMessageToolbar [inputClass]="toolbarClass()">
|
|
240
|
-
<div class="flex items-center gap-1 justify-end">
|
|
241
|
-
<!-- Additional toolbar items -->
|
|
242
|
-
@if (additionalToolbarItems()) {
|
|
243
|
-
<ng-container
|
|
244
|
-
[ngTemplateOutlet]="additionalToolbarItems() || null"
|
|
245
|
-
></ng-container>
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
<!-- Copy button -->
|
|
249
|
-
@if (copyButtonTemplate || copyButtonComponent()) {
|
|
250
|
-
<copilot-slot
|
|
251
|
-
[slot]="copyButtonTemplate || copyButtonComponent()"
|
|
252
|
-
[context]="{ content: flattenedContent() }"
|
|
253
|
-
[outputs]="copyButtonOutputs"
|
|
254
|
-
[defaultComponent]="CopilotChatUserMessageCopyButton"
|
|
255
|
-
>
|
|
256
|
-
</copilot-slot>
|
|
257
|
-
} @else {
|
|
258
|
-
<copilot-chat-user-message-copy-button
|
|
259
|
-
[content]="flattenedContent()"
|
|
260
|
-
[inputClass]="copyButtonClass()"
|
|
261
|
-
(clicked)="handleCopy()"
|
|
262
|
-
>
|
|
263
|
-
</copilot-chat-user-message-copy-button>
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
<!-- Edit button -->
|
|
267
|
-
@if (true) {
|
|
268
|
-
@if (editButtonTemplate || editButtonComponent()) {
|
|
269
|
-
<copilot-slot
|
|
270
|
-
[slot]="editButtonTemplate || editButtonComponent()"
|
|
271
|
-
[context]="{}"
|
|
272
|
-
[outputs]="editButtonOutputs"
|
|
273
|
-
[defaultComponent]="CopilotChatUserMessageEditButton"
|
|
274
|
-
>
|
|
275
|
-
</copilot-slot>
|
|
276
|
-
} @else {
|
|
277
|
-
<copilot-chat-user-message-edit-button
|
|
278
|
-
[inputClass]="editButtonClass()"
|
|
279
|
-
(clicked)="handleEdit()"
|
|
280
|
-
>
|
|
281
|
-
</copilot-chat-user-message-edit-button>
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
<!-- Branch navigation -->
|
|
286
|
-
@if (showBranchNavigation()) {
|
|
287
|
-
@if (branchNavigationTemplate || branchNavigationComponent()) {
|
|
288
|
-
<copilot-slot
|
|
289
|
-
[slot]="
|
|
290
|
-
branchNavigationTemplate || branchNavigationComponent()
|
|
291
|
-
"
|
|
292
|
-
[context]="branchNavigationContext()"
|
|
293
|
-
[defaultComponent]="CopilotChatUserMessageBranchNavigation"
|
|
294
|
-
>
|
|
295
|
-
</copilot-slot>
|
|
296
|
-
} @else {
|
|
297
|
-
<copilot-chat-user-message-branch-navigation
|
|
298
|
-
[currentBranch]="branchIndexValue()"
|
|
299
|
-
[numberOfBranches]="numberOfBranchesValue()"
|
|
300
|
-
[message]="message()!"
|
|
301
|
-
[inputClass]="branchNavigationClass()"
|
|
302
|
-
(switchToBranch)="handleSwitchToBranch($event)"
|
|
303
|
-
>
|
|
304
|
-
</copilot-chat-user-message-branch-navigation>
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
</div>
|
|
308
|
-
</div>
|
|
309
|
-
}
|
|
310
|
-
</div>
|
|
311
|
-
`, styles: [":host{display:block;width:100%}\n"] }]
|
|
312
|
-
}], ctorParameters: () => [], propDecorators: { messageRendererTemplate: [{
|
|
313
|
-
type: ContentChild,
|
|
314
|
-
args: ["messageRenderer", { read: TemplateRef }]
|
|
315
|
-
}], toolbarTemplate: [{
|
|
316
|
-
type: ContentChild,
|
|
317
|
-
args: ["toolbar", { read: TemplateRef }]
|
|
318
|
-
}], copyButtonTemplate: [{
|
|
319
|
-
type: ContentChild,
|
|
320
|
-
args: ["copyButton", { read: TemplateRef }]
|
|
321
|
-
}], editButtonTemplate: [{
|
|
322
|
-
type: ContentChild,
|
|
323
|
-
args: ["editButton", { read: TemplateRef }]
|
|
324
|
-
}], branchNavigationTemplate: [{
|
|
325
|
-
type: ContentChild,
|
|
326
|
-
args: ["branchNavigation", { read: TemplateRef }]
|
|
327
|
-
}] } });
|
|
328
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFdBQVcsRUFDWCxZQUFZLEVBQ1osUUFBUSxFQUVSLHVCQUF1QixFQUN2QixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQVV2RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN0RixPQUFPLEVBQ0wsZ0NBQWdDLEVBQ2hDLGdDQUFnQyxHQUNqQyxNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7OztBQUdqQyxTQUFTLHlCQUF5QixDQUFDLE9BQWdDO0lBQ2pFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDaEMsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELE9BQU8sT0FBTztTQUNYLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ1osSUFDRSxJQUFJO1lBQ0osT0FBTyxJQUFJLEtBQUssUUFBUTtZQUN4QixNQUFNLElBQUksSUFBSTtZQUNiLElBQTJCLENBQUMs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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1HVCwwR0E3R0MsWUFBWSxzTUFDWixXQUFXLHFIQUNYLDhCQUE4QixrSEFDOUIsZ0NBQWdDLGdLQUNoQyxnQ0FBZ0MscUpBQ2hDLDZCQUE2Qix1R0FDN0Isc0NBQXNDOzs0RkFpSDdCLHNCQUFzQjtrQkE1SGxDLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLDJCQUEyQixRQUMvQixFQUFFLGlCQUFpQixFQUFFLEVBQUUsRUFBRSxXQUN0Qjt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsOEJBQThCO3dCQUM5QixnQ0FBZ0M7d0JBQ2hDLGdDQUFnQzt3QkFDaEMsNkJBQTZCO3dCQUM3QixzQ0FBc0M7cUJBQ3ZDLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFlBQzNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtR1Q7d0RBYUQsdUJBQXVCO3NCQUR0QixZQUFZO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFHdEQsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBRzlDLGtCQUFrQjtzQkFEakIsWUFBWTt1QkFBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUdqRCxrQkFBa0I7c0JBRGpCLFlBQVk7dUJBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFHakQsd0JBQXdCO3NCQUR2QixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIENvbnRlbnRDaGlsZCxcbiAgY29tcHV0ZWQsXG4gIFR5cGUsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IENvcGlsb3RTbG90IH0gZnJvbSBcIi4uLy4uL3Nsb3RzL2NvcGlsb3Qtc2xvdFwiO1xuaW1wb3J0IHtcbiAgdHlwZSBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlT25FZGl0TWVzc2FnZVByb3BzLFxuICB0eXBlIENvcGlsb3RDaGF0VXNlck1lc3NhZ2VPblN3aXRjaFRvQnJhbmNoUHJvcHMsXG4gIHR5cGUgTWVzc2FnZVJlbmRlcmVyQ29udGV4dCxcbiAgdHlwZSBDb3B5QnV0dG9uQ29udGV4dCxcbiAgdHlwZSBFZGl0QnV0dG9uQ29udGV4dCxcbiAgdHlwZSBCcmFuY2hOYXZpZ2F0aW9uQ29udGV4dCxcbiAgdHlwZSBVc2VyTWVzc2FnZVRvb2xiYXJDb250ZXh0LFxufSBmcm9tIFwiLi9jb3BpbG90LWNoYXQtdXNlci1tZXNzYWdlLnR5cGVzXCI7XG5pbXBvcnQgeyBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlUmVuZGVyZXIgfSBmcm9tIFwiLi9jb3BpbG90LWNoYXQtdXNlci1tZXNzYWdlLXJlbmRlcmVyXCI7XG5pbXBvcnQge1xuICBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlQ29weUJ1dHRvbixcbiAgQ29waWxvdENoYXRVc2VyTWVzc2FnZUVkaXRCdXR0b24sXG59IGZyb20gXCIuL2NvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2UtYnV0dG9uc1wiO1xuaW1wb3J0IHsgQ29waWxvdENoYXRVc2VyTWVzc2FnZVRvb2xiYXIgfSBmcm9tIFwiLi9jb3BpbG90LWNoYXQtdXNlci1tZXNzYWdlLXRvb2xiYXJcIjtcbmltcG9ydCB7IENvcGlsb3RDaGF0VXNlck1lc3NhZ2VCcmFuY2hOYXZpZ2F0aW9uIH0gZnJvbSBcIi4vY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS1icmFuY2gtbmF2aWdhdGlvblwiO1xuaW1wb3J0IHsgY24gfSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcbmltcG9ydCB7IFVzZXJNZXNzYWdlIH0gZnJvbSBcIkBhZy11aS9jb3JlXCI7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5Vc2VyTWVzc2FnZUNvbnRlbnQoY29udGVudD86IFVzZXJNZXNzYWdlW1wiY29udGVudFwiXSk6IHN0cmluZyB7XG4gIGlmICghY29udGVudCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICByZXR1cm4gY29udGVudFxuICAgIC5tYXAoKHBhcnQpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgcGFydCAmJlxuICAgICAgICB0eXBlb2YgcGFydCA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICBcInR5cGVcIiBpbiBwYXJ0ICYmXG4gICAgICAgIChwYXJ0IGFzIHsgdHlwZT86IHVua25vd24gfSkudHlwZSA9PT0gXCJ0ZXh0XCIgJiZcbiAgICAgICAgdHlwZW9mIChwYXJ0IGFzIHsgdGV4dD86IHVua25vd24gfSkudGV4dCA9PT0gXCJzdHJpbmdcIlxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiAocGFydCBhcyB7IHRleHQ6IHN0cmluZyB9KS50ZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfSlcbiAgICAuZmlsdGVyKCh0ZXh0KSA9PiB0ZXh0Lmxlbmd0aCA+IDApXG4gICAgLmpvaW4oXCJcXG5cIik7XG59XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogXCJjb3BpbG90LWNoYXQtdXNlci1tZXNzYWdlXCIsXG4gIGhvc3Q6IHsgXCJkYXRhLWNvcGlsb3RraXRcIjogXCJcIiB9LFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIENvcGlsb3RTbG90LFxuICAgIENvcGlsb3RDaGF0VXNlck1lc3NhZ2VSZW5kZXJlcixcbiAgICBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlQ29weUJ1dHRvbixcbiAgICBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlRWRpdEJ1dHRvbixcbiAgICBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlVG9vbGJhcixcbiAgICBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlQnJhbmNoTmF2aWdhdGlvbixcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBbY2xhc3NdPVwiY29tcHV0ZWRDbGFzcygpXCIgW2F0dHIuZGF0YS1tZXNzYWdlLWlkXT1cIm1lc3NhZ2UoKT8uaWRcIj5cbiAgICAgIDwhLS0gTWVzc2FnZSBSZW5kZXJlciAtLT5cbiAgICAgIEBpZiAobWVzc2FnZVJlbmRlcmVyVGVtcGxhdGUgfHwgbWVzc2FnZVJlbmRlcmVyQ29tcG9uZW50KCkpIHtcbiAgICAgICAgPGNvcGlsb3Qtc2xvdFxuICAgICAgICAgIFtzbG90XT1cIm1lc3NhZ2VSZW5kZXJlclRlbXBsYXRlIHx8IG1lc3NhZ2VSZW5kZXJlckNvbXBvbmVudCgpXCJcbiAgICAgICAgICBbY29udGV4dF09XCJtZXNzYWdlUmVuZGVyZXJDb250ZXh0KClcIlxuICAgICAgICAgIFtkZWZhdWx0Q29tcG9uZW50XT1cIkNvcGlsb3RDaGF0VXNlck1lc3NhZ2VSZW5kZXJlclwiXG4gICAgICAgID5cbiAgICAgICAgPC9jb3BpbG90LXNsb3Q+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGNvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2UtcmVuZGVyZXJcbiAgICAgICAgICBbY29udGVudF09XCJmbGF0dGVuZWRDb250ZW50KClcIlxuICAgICAgICAgIFtpbnB1dENsYXNzXT1cIm1lc3NhZ2VSZW5kZXJlckNsYXNzKClcIlxuICAgICAgICA+XG4gICAgICAgIDwvY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS1yZW5kZXJlcj5cbiAgICAgIH1cblxuICAgICAgPCEtLSBUb29sYmFyIC0tPlxuICAgICAgQGlmICh0b29sYmFyVGVtcGxhdGUgfHwgdG9vbGJhckNvbXBvbmVudCgpKSB7XG4gICAgICAgIDxjb3BpbG90LXNsb3RcbiAgICAgICAgICBbc2xvdF09XCJ0b29sYmFyVGVtcGxhdGUgfHwgdG9vbGJhckNvbXBvbmVudCgpXCJcbiAgICAgICAgICBbY29udGV4dF09XCJ0b29sYmFyQ29udGV4dCgpXCJcbiAgICAgICAgICBbZGVmYXVsdENvbXBvbmVudF09XCJDb3BpbG90Q2hhdFVzZXJNZXNzYWdlVG9vbGJhclwiXG4gICAgICAgID5cbiAgICAgICAgPC9jb3BpbG90LXNsb3Q+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjb3BpbG90Q2hhdFVzZXJNZXNzYWdlVG9vbGJhciBbaW5wdXRDbGFzc109XCJ0b29sYmFyQ2xhc3MoKVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMSBqdXN0aWZ5LWVuZFwiPlxuICAgICAgICAgICAgPCEtLSBBZGRpdGlvbmFsIHRvb2xiYXIgaXRlbXMgLS0+XG4gICAgICAgICAgICBAaWYgKGFkZGl0aW9uYWxUb29sYmFySXRlbXMoKSkge1xuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYWRkaXRpb25hbFRvb2xiYXJJdGVtcygpIHx8IG51bGxcIlxuICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwhLS0gQ29weSBidXR0b24gLS0+XG4gICAgICAgICAgICBAaWYgKGNvcHlCdXR0b25UZW1wbGF0ZSB8fCBjb3B5QnV0dG9uQ29tcG9uZW50KCkpIHtcbiAgICAgICAgICAgICAgPGNvcGlsb3Qtc2xvdFxuICAgICAgICAgICAgICAgIFtzbG90XT1cImNvcHlCdXR0b25UZW1wbGF0ZSB8fCBjb3B5QnV0dG9uQ29tcG9uZW50KClcIlxuICAgICAgICAgICAgICAgIFtjb250ZXh0XT1cInsgY29udGVudDogZmxhdHRlbmVkQ29udGVudCgpIH1cIlxuICAgICAgICAgICAgICAgIFtvdXRwdXRzXT1cImNvcHlCdXR0b25PdXRwdXRzXCJcbiAgICAgICAgICAgICAgICBbZGVmYXVsdENvbXBvbmVudF09XCJDb3BpbG90Q2hhdFVzZXJNZXNzYWdlQ29weUJ1dHRvblwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9jb3BpbG90LXNsb3Q+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPGNvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2UtY29weS1idXR0b25cbiAgICAgICAgICAgICAgICBbY29udGVudF09XCJmbGF0dGVuZWRDb250ZW50KClcIlxuICAgICAgICAgICAgICAgIFtpbnB1dENsYXNzXT1cImNvcHlCdXR0b25DbGFzcygpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJoYW5kbGVDb3B5KClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPCEtLSBFZGl0IGJ1dHRvbiAtLT5cbiAgICAgICAgICAgIEBpZiAodHJ1ZSkge1xuICAgICAgICAgICAgICBAaWYgKGVkaXRCdXR0b25UZW1wbGF0ZSB8fCBlZGl0QnV0dG9uQ29tcG9uZW50KCkpIHtcbiAgICAgICAgICAgICAgICA8Y29waWxvdC1zbG90XG4gICAgICAgICAgICAgICAgICBbc2xvdF09XCJlZGl0QnV0dG9uVGVtcGxhdGUgfHwgZWRpdEJ1dHRvbkNvbXBvbmVudCgpXCJcbiAgICAgICAgICAgICAgICAgIFtjb250ZXh0XT1cInt9XCJcbiAgICAgICAgICAgICAgICAgIFtvdXRwdXRzXT1cImVkaXRCdXR0b25PdXRwdXRzXCJcbiAgICAgICAgICAgICAgICAgIFtkZWZhdWx0Q29tcG9uZW50XT1cIkNvcGlsb3RDaGF0VXNlck1lc3NhZ2VFZGl0QnV0dG9uXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9jb3BpbG90LXNsb3Q+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxjb3BpbG90LWNoYXQtdXNlci1tZXNzYWdlLWVkaXQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICBbaW5wdXRDbGFzc109XCJlZGl0QnV0dG9uQ2xhc3MoKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJoYW5kbGVFZGl0KClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2NvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2UtZWRpdC1idXR0b24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPCEtLSBCcmFuY2ggbmF2aWdhdGlvbiAtLT5cbiAgICAgICAgICAgIEBpZiAoc2hvd0JyYW5jaE5hdmlnYXRpb24oKSkge1xuICAgICAgICAgICAgICBAaWYgKGJyYW5jaE5hdmlnYXRpb25UZW1wbGF0ZSB8fCBicmFuY2hOYXZpZ2F0aW9uQ29tcG9uZW50KCkpIHtcbiAgICAgICAgICAgICAgICA8Y29waWxvdC1zbG90XG4gICAgICAgICAgICAgICAgICBbc2xvdF09XCJcbiAgICAgICAgICAgICAgICAgICAgYnJhbmNoTmF2aWdhdGlvblRlbXBsYXRlIHx8IGJyYW5jaE5hdmlnYXRpb25Db21wb25lbnQoKVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtjb250ZXh0XT1cImJyYW5jaE5hdmlnYXRpb25Db250ZXh0KClcIlxuICAgICAgICAgICAgICAgICAgW2RlZmF1bHRDb21wb25lbnRdPVwiQ29waWxvdENoYXRVc2VyTWVzc2FnZUJyYW5jaE5hdmlnYXRpb25cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2NvcGlsb3Qtc2xvdD5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGNvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2UtYnJhbmNoLW5hdmlnYXRpb25cbiAgICAgICAgICAgICAgICAgIFtjdXJyZW50QnJhbmNoXT1cImJyYW5jaEluZGV4VmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICBbbnVtYmVyT2ZCcmFuY2hlc109XCJudW1iZXJPZkJyYW5jaGVzVmFsdWUoKVwiXG4gICAgICAgICAgICAgICAgICBbbWVzc2FnZV09XCJtZXNzYWdlKCkhXCJcbiAgICAgICAgICAgICAgICAgIFtpbnB1dENsYXNzXT1cImJyYW5jaE5hdmlnYXRpb25DbGFzcygpXCJcbiAgICAgICAgICAgICAgICAgIChzd2l0Y2hUb0JyYW5jaCk9XCJoYW5kbGVTd2l0Y2hUb0JyYW5jaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9jb3BpbG90LWNoYXQtdXNlci1tZXNzYWdlLWJyYW5jaC1uYXZpZ2F0aW9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlIHtcbiAgLy8gQ2FwdHVyZSB0ZW1wbGF0ZXMgZnJvbSBjb250ZW50IHByb2plY3Rpb25cbiAgQENvbnRlbnRDaGlsZChcIm1lc3NhZ2VSZW5kZXJlclwiLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIG1lc3NhZ2VSZW5kZXJlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8TWVzc2FnZVJlbmRlcmVyQ29udGV4dD47XG4gIEBDb250ZW50Q2hpbGQoXCJ0b29sYmFyXCIsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgdG9vbGJhclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8VXNlck1lc3NhZ2VUb29sYmFyQ29udGV4dD47XG4gIEBDb250ZW50Q2hpbGQoXCJjb3B5QnV0dG9uXCIsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgY29weUJ1dHRvblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8Q29weUJ1dHRvbkNvbnRleHQ+O1xuICBAQ29udGVudENoaWxkKFwiZWRpdEJ1dHRvblwiLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIGVkaXRCdXR0b25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPEVkaXRCdXR0b25Db250ZXh0PjtcbiAgQENvbnRlbnRDaGlsZChcImJyYW5jaE5hdmlnYXRpb25cIiwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBicmFuY2hOYXZpZ2F0aW9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxCcmFuY2hOYXZpZ2F0aW9uQ29udGV4dD47XG5cbiAgLy8gUHJvcHMgZm9yIHR3ZWFraW5nIGRlZmF1bHQgY29tcG9uZW50c1xuICBtZXNzYWdlUmVuZGVyZXJDbGFzcyA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgdG9vbGJhckNsYXNzID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuICBjb3B5QnV0dG9uQ2xhc3MgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIGVkaXRCdXR0b25DbGFzcyA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgYnJhbmNoTmF2aWdhdGlvbkNsYXNzID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuXG4gIC8vIENvbXBvbmVudCBpbnB1dHMgZm9yIG92ZXJyaWRlc1xuICBtZXNzYWdlUmVuZGVyZXJDb21wb25lbnQgPSBpbnB1dDxUeXBlPGFueT4gfCB1bmRlZmluZWQ+KCk7XG4gIHRvb2xiYXJDb21wb25lbnQgPSBpbnB1dDxUeXBlPGFueT4gfCB1bmRlZmluZWQ+KCk7XG4gIGNvcHlCdXR0b25Db21wb25lbnQgPSBpbnB1dDxUeXBlPGFueT4gfCB1bmRlZmluZWQ+KCk7XG4gIGVkaXRCdXR0b25Db21wb25lbnQgPSBpbnB1dDxUeXBlPGFueT4gfCB1bmRlZmluZWQ+KCk7XG4gIGJyYW5jaE5hdmlnYXRpb25Db21wb25lbnQgPSBpbnB1dDxUeXBlPGFueT4gfCB1bmRlZmluZWQ+KCk7XG5cbiAgLy8gUmVndWxhciBpbnB1dHNcbiAgbWVzc2FnZSA9IGlucHV0PFVzZXJNZXNzYWdlPigpO1xuICBicmFuY2hJbmRleCA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZD4oKTtcbiAgbnVtYmVyT2ZCcmFuY2hlcyA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZD4oKTtcbiAgYWRkaXRpb25hbFRvb2xiYXJJdGVtcyA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ+KCk7XG4gIGlucHV0Q2xhc3MgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50c1xuICBlZGl0TWVzc2FnZSA9IG91dHB1dDxDb3BpbG90Q2hhdFVzZXJNZXNzYWdlT25FZGl0TWVzc2FnZVByb3BzPigpO1xuICBzd2l0Y2hUb0JyYW5jaCA9IG91dHB1dDxDb3BpbG90Q2hhdFVzZXJNZXNzYWdlT25Td2l0Y2hUb0JyYW5jaFByb3BzPigpO1xuXG4gIC8vIERlcml2ZWQgdmFsdWVzXG4gIGJyYW5jaEluZGV4VmFsdWUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmJyYW5jaEluZGV4KCkgPz8gMCk7XG4gIG51bWJlck9mQnJhbmNoZXNWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMubnVtYmVyT2ZCcmFuY2hlcygpID8/IDEpO1xuXG4gIC8vIERlZmF1bHQgY29tcG9uZW50c1xuICBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlUmVuZGVyZXIgPSBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlUmVuZGVyZXI7XG4gIENvcGlsb3RDaGF0VXNlck1lc3NhZ2VUb29sYmFyID0gQ29waWxvdENoYXRVc2VyTWVzc2FnZVRvb2xiYXI7XG4gIENvcGlsb3RDaGF0VXNlck1lc3NhZ2VDb3B5QnV0dG9uID0gQ29waWxvdENoYXRVc2VyTWVzc2FnZUNvcHlCdXR0b247XG4gIENvcGlsb3RDaGF0VXNlck1lc3NhZ2VFZGl0QnV0dG9uID0gQ29waWxvdENoYXRVc2VyTWVzc2FnZUVkaXRCdXR0b247XG4gIENvcGlsb3RDaGF0VXNlck1lc3NhZ2VCcmFuY2hOYXZpZ2F0aW9uID1cbiAgICBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlQnJhbmNoTmF2aWdhdGlvbjtcblxuICAvLyBDb21wdXRlZCB2YWx1ZXNcbiAgc2hvd0JyYW5jaE5hdmlnYXRpb24gPSBjb21wdXRlZCgoKSA9PiAodGhpcy5udW1iZXJPZkJyYW5jaGVzKCkgPz8gMSkgPiAxKTtcblxuICBjb21wdXRlZENsYXNzID0gY29tcHV0ZWQoKCkgPT5cbiAgICBjbihcImZsZXggZmxleC1jb2wgaXRlbXMtZW5kIGdyb3VwIHB0LTEwXCIsIHRoaXMuaW5wdXRDbGFzcygpKSxcbiAgKTtcblxuICAvLyBDb250ZXh0IGZvciBzbG90cyAocmVhY3RpdmUgdmlhIHNpZ25hbHMpXG4gIGZsYXR0ZW5lZENvbnRlbnQgPSBjb21wdXRlZCgoKSA9PlxuICAgIGZsYXR0ZW5Vc2VyTWVzc2FnZUNvbnRlbnQodGhpcy5tZXNzYWdlKCk/LmNvbnRlbnQpLFxuICApO1xuXG4gIG1lc3NhZ2VSZW5kZXJlckNvbnRleHQgPSBjb21wdXRlZDxNZXNzYWdlUmVuZGVyZXJDb250ZXh0PigoKSA9PiAoe1xuICAgIGNvbnRlbnQ6IHRoaXMuZmxhdHRlbmVkQ29udGVudCgpLFxuICB9KSk7XG5cbiAgLy8gT3V0cHV0IG1hcHMgZm9yIHNsb3RzXG4gIGNvcHlCdXR0b25PdXRwdXRzID0geyBjbGlja2VkOiAoKSA9PiB0aGlzLmhhbmRsZUNvcHkoKSB9O1xuICBlZGl0QnV0dG9uT3V0cHV0cyA9IHsgY2xpY2tlZDogKCkgPT4gdGhpcy5oYW5kbGVFZGl0KCkgfTtcblxuICBicmFuY2hOYXZpZ2F0aW9uQ29udGV4dCA9IGNvbXB1dGVkPEJyYW5jaE5hdmlnYXRpb25Db250ZXh0PigoKSA9PiAoe1xuICAgIGN1cnJlbnRCcmFuY2g6IHRoaXMuYnJhbmNoSW5kZXhWYWx1ZSgpLFxuICAgIG51bWJlck9mQnJhbmNoZXM6IHRoaXMubnVtYmVyT2ZCcmFuY2hlc1ZhbHVlKCksXG4gICAgb25Td2l0Y2hUb0JyYW5jaDogKHByb3BzKSA9PiB0aGlzLmhhbmRsZVN3aXRjaFRvQnJhbmNoKHByb3BzKSxcbiAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UoKSEsXG4gIH0pKTtcblxuICB0b29sYmFyQ29udGV4dCA9IGNvbXB1dGVkPFVzZXJNZXNzYWdlVG9vbGJhckNvbnRleHQ+KCgpID0+ICh7XG4gICAgY2hpbGRyZW46IG51bGwsIC8vIFdpbGwgYmUgcG9wdWxhdGVkIGJ5IHRoZSB0b29sYmFyIGNvbnRlbnRcbiAgfSkpO1xuXG4gIGhhbmRsZUNvcHkoKTogdm9pZCB7XG4gICAgLy8gQ29weSBpcyBoYW5kbGVkIGJ5IHRoZSBidXR0b24gY29tcG9uZW50IGl0c2VsZlxuICAgIC8vIFRoaXMgaXMganVzdCBmb3IgYW55IGFkZGl0aW9uYWwgbG9naWMgaWYgbmVlZGVkXG4gIH1cblxuICBoYW5kbGVFZGl0KCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdE1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubWVzc2FnZSgpISB9KTtcbiAgfVxuXG4gIGhhbmRsZVN3aXRjaFRvQnJhbmNoKFxuICAgIHByb3BzOiBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlT25Td2l0Y2hUb0JyYW5jaFByb3BzLFxuICApOiB2b2lkIHtcbiAgICB0aGlzLnN3aXRjaFRvQnJhbmNoLmVtaXQocHJvcHMpO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge31cbn1cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2UudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVXNlck1lc3NhZ2UgfSBmcm9tIFwiQGFnLXVpL2NvcmVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlT25FZGl0TWVzc2FnZVByb3BzIHtcbiAgbWVzc2FnZTogVXNlck1lc3NhZ2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29waWxvdENoYXRVc2VyTWVzc2FnZU9uU3dpdGNoVG9CcmFuY2hQcm9wcyB7XG4gIG1lc3NhZ2U6IFVzZXJNZXNzYWdlO1xuICBicmFuY2hJbmRleDogbnVtYmVyO1xuICBudW1iZXJPZkJyYW5jaGVzOiBudW1iZXI7XG59XG5cbi8vIENvbnRleHQgaW50ZXJmYWNlcyBmb3Igc2xvdHNcbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZVJlbmRlcmVyQ29udGV4dCB7XG4gIGNvbnRlbnQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb3B5QnV0dG9uQ29udGV4dCB7XG4gIGNvbnRlbnQ/OiBzdHJpbmc7XG4gIGNvcGllZD86IGJvb2xlYW47XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbmV4cG9ydCBpbnRlcmZhY2UgRWRpdEJ1dHRvbkNvbnRleHQge1xuICAvLyBFbXB0eSBjb250ZXh0IC0gY2xpY2sgaGFuZGxlZCB2aWEgb3V0cHV0cyBtYXBcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCcmFuY2hOYXZpZ2F0aW9uQ29udGV4dCB7XG4gIGN1cnJlbnRCcmFuY2g6IG51bWJlcjtcbiAgbnVtYmVyT2ZCcmFuY2hlczogbnVtYmVyO1xuICBvblN3aXRjaFRvQnJhbmNoPzogKFxuICAgIHByb3BzOiBDb3BpbG90Q2hhdFVzZXJNZXNzYWdlT25Td2l0Y2hUb0JyYW5jaFByb3BzLFxuICApID0+IHZvaWQ7XG4gIG1lc3NhZ2U6IFVzZXJNZXNzYWdlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJNZXNzYWdlVG9vbGJhckNvbnRleHQge1xuICBjaGlsZHJlbj86IGFueTtcbn1cbiJdfQ==
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { Component, input, ChangeDetectionStrategy, ViewEncapsulation, } from "@angular/core";
|
|
2
|
-
import { CommonModule } from "@angular/common";
|
|
3
|
-
import { cn } from "../..//utils";
|
|
4
|
-
import { injectChatLabels } from "../../chat-config";
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
/**
|
|
7
|
-
* Disclaimer component for CopilotChatView
|
|
8
|
-
* Shows configurable disclaimer text below the input
|
|
9
|
-
* Integrates with CopilotChatConfigurationService for labels
|
|
10
|
-
*/
|
|
11
|
-
export class CopilotChatViewDisclaimer {
|
|
12
|
-
inputClass = input();
|
|
13
|
-
text = input();
|
|
14
|
-
labels = injectChatLabels();
|
|
15
|
-
// Get disclaimer text from input or configuration
|
|
16
|
-
get disclaimerText() {
|
|
17
|
-
if (this.text()) {
|
|
18
|
-
return this.text();
|
|
19
|
-
}
|
|
20
|
-
return this.labels.chatDisclaimerText;
|
|
21
|
-
}
|
|
22
|
-
// Computed class matching React exactly
|
|
23
|
-
get computedClass() {
|
|
24
|
-
return cn("text-center text-xs text-muted-foreground py-3 px-4 max-w-3xl mx-auto", this.inputClass());
|
|
25
|
-
}
|
|
26
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CopilotChatViewDisclaimer, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
27
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: CopilotChatViewDisclaimer, isStandalone: true, selector: "copilot-chat-view-disclaimer", inputs: { inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
28
|
-
<div [class]="computedClass">
|
|
29
|
-
{{ disclaimerText }}
|
|
30
|
-
</div>
|
|
31
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
32
|
-
}
|
|
33
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CopilotChatViewDisclaimer, decorators: [{
|
|
34
|
-
type: Component,
|
|
35
|
-
args: [{
|
|
36
|
-
selector: "copilot-chat-view-disclaimer",
|
|
37
|
-
standalone: true,
|
|
38
|
-
imports: [CommonModule],
|
|
39
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
40
|
-
encapsulation: ViewEncapsulation.None,
|
|
41
|
-
template: `
|
|
42
|
-
<div [class]="computedClass">
|
|
43
|
-
{{ disclaimerText }}
|
|
44
|
-
</div>
|
|
45
|
-
`,
|
|
46
|
-
}]
|
|
47
|
-
}] });
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXZpZXctZGlzY2xhaW1lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC12aWV3LWRpc2NsYWltZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFFckQ7Ozs7R0FJRztBQWFILE1BQU0sT0FBTyx5QkFBeUI7SUFDcEMsVUFBVSxHQUFHLEtBQUssRUFBc0IsQ0FBQztJQUN6QyxJQUFJLEdBQUcsS0FBSyxFQUFzQixDQUFDO0lBRTFCLE1BQU0sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0lBRXJDLGtEQUFrRDtJQUNsRCxJQUFJLGNBQWM7UUFDaEIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNoQixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQVksQ0FBQztRQUMvQixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDO0lBQ3hDLENBQUM7SUFFRCx3Q0FBd0M7SUFDeEMsSUFBSSxhQUFhO1FBQ2YsT0FBTyxFQUFFLENBQ1AsdUVBQXVFLEVBQ3ZFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FDbEIsQ0FBQztJQUNKLENBQUM7d0dBckJVLHlCQUF5Qjs0RkFBekIseUJBQXlCLGdXQU4xQjs7OztHQUlULDJEQVBTLFlBQVk7OzRGQVNYLHlCQUF5QjtrQkFackMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsOEJBQThCO29CQUN4QyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLFFBQVEsRUFBRTs7OztHQUlUO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBpbnB1dCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgY24gfSBmcm9tIFwiLi4vLi4vL3V0aWxzXCI7XG5pbXBvcnQgeyBpbmplY3RDaGF0TGFiZWxzIH0gZnJvbSBcIi4uLy4uL2NoYXQtY29uZmlnXCI7XG5cbi8qKlxuICogRGlzY2xhaW1lciBjb21wb25lbnQgZm9yIENvcGlsb3RDaGF0Vmlld1xuICogU2hvd3MgY29uZmlndXJhYmxlIGRpc2NsYWltZXIgdGV4dCBiZWxvdyB0aGUgaW5wdXRcbiAqIEludGVncmF0ZXMgd2l0aCBDb3BpbG90Q2hhdENvbmZpZ3VyYXRpb25TZXJ2aWNlIGZvciBsYWJlbHNcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImNvcGlsb3QtY2hhdC12aWV3LWRpc2NsYWltZXJcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgW2NsYXNzXT1cImNvbXB1dGVkQ2xhc3NcIj5cbiAgICAgIHt7IGRpc2NsYWltZXJUZXh0IH19XG4gICAgPC9kaXY+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIENvcGlsb3RDaGF0Vmlld0Rpc2NsYWltZXIge1xuICBpbnB1dENsYXNzID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuICB0ZXh0ID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuXG4gIHJlYWRvbmx5IGxhYmVscyA9IGluamVjdENoYXRMYWJlbHMoKTtcblxuICAvLyBHZXQgZGlzY2xhaW1lciB0ZXh0IGZyb20gaW5wdXQgb3IgY29uZmlndXJhdGlvblxuICBnZXQgZGlzY2xhaW1lclRleHQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy50ZXh0KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQoKSBhcyBzdHJpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubGFiZWxzLmNoYXREaXNjbGFpbWVyVGV4dDtcbiAgfVxuXG4gIC8vIENvbXB1dGVkIGNsYXNzIG1hdGNoaW5nIFJlYWN0IGV4YWN0bHlcbiAgZ2V0IGNvbXB1dGVkQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY24oXG4gICAgICBcInRleHQtY2VudGVyIHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHB5LTMgcHgtNCBtYXgtdy0zeGwgbXgtYXV0b1wiLFxuICAgICAgdGhpcy5pbnB1dENsYXNzKCksXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { Component, input, ChangeDetectionStrategy, ViewEncapsulation, } from "@angular/core";
|
|
2
|
-
import { CommonModule } from "@angular/common";
|
|
3
|
-
import { cn } from "../../utils";
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
/**
|
|
6
|
-
* Feather component for CopilotChatView
|
|
7
|
-
* Creates a gradient overlay effect between messages and input
|
|
8
|
-
* Matches React implementation exactly with same Tailwind classes
|
|
9
|
-
*/
|
|
10
|
-
export class CopilotChatViewFeather {
|
|
11
|
-
inputClass = input();
|
|
12
|
-
style = input();
|
|
13
|
-
// Computed class matching React exactly
|
|
14
|
-
get computedClass() {
|
|
15
|
-
return cn(
|
|
16
|
-
// Positioning
|
|
17
|
-
"absolute bottom-0 left-0 right-4 h-24 pointer-events-none z-10",
|
|
18
|
-
// Gradient
|
|
19
|
-
"bg-gradient-to-t",
|
|
20
|
-
// Light mode colors
|
|
21
|
-
"from-white via-white to-transparent",
|
|
22
|
-
// Dark mode colors
|
|
23
|
-
"dark:from-[rgb(33,33,33)] dark:via-[rgb(33,33,33)]",
|
|
24
|
-
// Custom classes
|
|
25
|
-
this.inputClass());
|
|
26
|
-
}
|
|
27
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CopilotChatViewFeather, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
28
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: CopilotChatViewFeather, isStandalone: true, selector: "copilot-chat-view-feather", inputs: { inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null }, style: { classPropertyName: "style", publicName: "style", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: ` <div [class]="computedClass" [style]="style()"></div> `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
29
|
-
}
|
|
30
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CopilotChatViewFeather, decorators: [{
|
|
31
|
-
type: Component,
|
|
32
|
-
args: [{
|
|
33
|
-
selector: "copilot-chat-view-feather",
|
|
34
|
-
standalone: true,
|
|
35
|
-
imports: [CommonModule],
|
|
36
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
37
|
-
encapsulation: ViewEncapsulation.None,
|
|
38
|
-
template: ` <div [class]="computedClass" [style]="style()"></div> `,
|
|
39
|
-
}]
|
|
40
|
-
}] });
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXZpZXctZmVhdGhlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC12aWV3LWZlYXRoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFFakM7Ozs7R0FJRztBQVNILE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsVUFBVSxHQUFHLEtBQUssRUFBc0IsQ0FBQztJQUN6QyxLQUFLLEdBQUcsS0FBSyxFQUFzQyxDQUFDO0lBRXBELHdDQUF3QztJQUN4QyxJQUFJLGFBQWE7UUFDZixPQUFPLEVBQUU7UUFDUCxjQUFjO1FBQ2QsZ0VBQWdFO1FBQ2hFLFdBQVc7UUFDWCxrQkFBa0I7UUFDbEIsb0JBQW9CO1FBQ3BCLHFDQUFxQztRQUNyQyxtQkFBbUI7UUFDbkIsb0RBQW9EO1FBQ3BELGlCQUFpQjtRQUNqQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQ2xCLENBQUM7SUFDSixDQUFDO3dHQWxCVSxzQkFBc0I7NEZBQXRCLHNCQUFzQixnV0FGdkIseURBQXlELDJEQUh6RCxZQUFZOzs0RkFLWCxzQkFBc0I7a0JBUmxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDJCQUEyQjtvQkFDckMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxRQUFRLEVBQUUseURBQXlEO2lCQUNwRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgaW5wdXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IGNuIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5cbi8qKlxuICogRmVhdGhlciBjb21wb25lbnQgZm9yIENvcGlsb3RDaGF0Vmlld1xuICogQ3JlYXRlcyBhIGdyYWRpZW50IG92ZXJsYXkgZWZmZWN0IGJldHdlZW4gbWVzc2FnZXMgYW5kIGlucHV0XG4gKiBNYXRjaGVzIFJlYWN0IGltcGxlbWVudGF0aW9uIGV4YWN0bHkgd2l0aCBzYW1lIFRhaWx3aW5kIGNsYXNzZXNcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImNvcGlsb3QtY2hhdC12aWV3LWZlYXRoZXJcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZTogYCA8ZGl2IFtjbGFzc109XCJjb21wdXRlZENsYXNzXCIgW3N0eWxlXT1cInN0eWxlKClcIj48L2Rpdj4gYCxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdENoYXRWaWV3RmVhdGhlciB7XG4gIGlucHV0Q2xhc3MgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIHN0eWxlID0gaW5wdXQ8eyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IHVuZGVmaW5lZD4oKTtcblxuICAvLyBDb21wdXRlZCBjbGFzcyBtYXRjaGluZyBSZWFjdCBleGFjdGx5XG4gIGdldCBjb21wdXRlZENsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgLy8gUG9zaXRpb25pbmdcbiAgICAgIFwiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTQgaC0yNCBwb2ludGVyLWV2ZW50cy1ub25lIHotMTBcIixcbiAgICAgIC8vIEdyYWRpZW50XG4gICAgICBcImJnLWdyYWRpZW50LXRvLXRcIixcbiAgICAgIC8vIExpZ2h0IG1vZGUgY29sb3JzXG4gICAgICBcImZyb20td2hpdGUgdmlhLXdoaXRlIHRvLXRyYW5zcGFyZW50XCIsXG4gICAgICAvLyBEYXJrIG1vZGUgY29sb3JzXG4gICAgICBcImRhcms6ZnJvbS1bcmdiKDMzLDMzLDMzKV0gZGFyazp2aWEtW3JnYigzMywzMywzMyldXCIsXG4gICAgICAvLyBDdXN0b20gY2xhc3Nlc1xuICAgICAgdGhpcy5pbnB1dENsYXNzKCksXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { Injectable, signal } from "@angular/core";
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class CopilotChatViewHandlers {
|
|
4
|
-
// Assistant message handler availability
|
|
5
|
-
hasAssistantThumbsUpHandler = signal(false);
|
|
6
|
-
hasAssistantThumbsDownHandler = signal(false);
|
|
7
|
-
hasAssistantReadAloudHandler = signal(false);
|
|
8
|
-
hasAssistantRegenerateHandler = signal(false);
|
|
9
|
-
// User message handler availability
|
|
10
|
-
hasUserCopyHandler = signal(false);
|
|
11
|
-
hasUserEditHandler = signal(false);
|
|
12
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CopilotChatViewHandlers, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
13
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CopilotChatViewHandlers, providedIn: "root" });
|
|
14
|
-
}
|
|
15
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CopilotChatViewHandlers, decorators: [{
|
|
16
|
-
type: Injectable,
|
|
17
|
-
args: [{ providedIn: "root" }]
|
|
18
|
-
}] });
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXZpZXctaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvY2hhdC9jb3BpbG90LWNoYXQtdmlldy1oYW5kbGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHbkQsTUFBTSxPQUFPLHVCQUF1QjtJQUNsQyx5Q0FBeUM7SUFDekMsMkJBQTJCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLDZCQUE2QixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5Qyw0QkFBNEIsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsNkJBQTZCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlDLG9DQUFvQztJQUNwQyxrQkFBa0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dHQVR4Qix1QkFBdUI7NEdBQXZCLHVCQUF1QixjQURWLE1BQU07OzRGQUNuQix1QkFBdUI7a0JBRG5DLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiBcInJvb3RcIiB9KVxuZXhwb3J0IGNsYXNzIENvcGlsb3RDaGF0Vmlld0hhbmRsZXJzIHtcbiAgLy8gQXNzaXN0YW50IG1lc3NhZ2UgaGFuZGxlciBhdmFpbGFiaWxpdHlcbiAgaGFzQXNzaXN0YW50VGh1bWJzVXBIYW5kbGVyID0gc2lnbmFsKGZhbHNlKTtcbiAgaGFzQXNzaXN0YW50VGh1bWJzRG93bkhhbmRsZXIgPSBzaWduYWwoZmFsc2UpO1xuICBoYXNBc3Npc3RhbnRSZWFkQWxvdWRIYW5kbGVyID0gc2lnbmFsKGZhbHNlKTtcbiAgaGFzQXNzaXN0YW50UmVnZW5lcmF0ZUhhbmRsZXIgPSBzaWduYWwoZmFsc2UpO1xuXG4gIC8vIFVzZXIgbWVzc2FnZSBoYW5kbGVyIGF2YWlsYWJpbGl0eVxuICBoYXNVc2VyQ29weUhhbmRsZXIgPSBzaWduYWwoZmFsc2UpO1xuICBoYXNVc2VyRWRpdEhhbmRsZXIgPSBzaWduYWwoZmFsc2UpO1xufVxuIl19
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { Component, input, ChangeDetectionStrategy, ViewEncapsulation, forwardRef, ElementRef, } from "@angular/core";
|
|
2
|
-
import { CommonModule } from "@angular/common";
|
|
3
|
-
import { CopilotSlot } from "../../slots/copilot-slot";
|
|
4
|
-
import { CopilotChatInput } from "./copilot-chat-input";
|
|
5
|
-
import { CopilotChatViewDisclaimer } from "./copilot-chat-view-disclaimer";
|
|
6
|
-
import { cn } from "../../utils";
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
/**
|
|
9
|
-
* InputContainer component for CopilotChatView
|
|
10
|
-
* Container for input and disclaimer components
|
|
11
|
-
* Uses ForwardRef for DOM access
|
|
12
|
-
*/
|
|
13
|
-
export class CopilotChatViewInputContainer extends ElementRef {
|
|
14
|
-
inputContainerClass = input();
|
|
15
|
-
// Input slot configuration
|
|
16
|
-
input = input();
|
|
17
|
-
inputClass = input();
|
|
18
|
-
// Disclaimer slot configuration
|
|
19
|
-
disclaimer = input();
|
|
20
|
-
disclaimerText = input();
|
|
21
|
-
disclaimerClass = input();
|
|
22
|
-
// Default components
|
|
23
|
-
defaultInputComponent = CopilotChatInput;
|
|
24
|
-
defaultDisclaimerComponent = CopilotChatViewDisclaimer;
|
|
25
|
-
constructor(elementRef) {
|
|
26
|
-
super(elementRef.nativeElement);
|
|
27
|
-
}
|
|
28
|
-
get computedClass() {
|
|
29
|
-
return cn("absolute bottom-0 left-0 right-0 z-20", this.inputContainerClass());
|
|
30
|
-
}
|
|
31
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CopilotChatViewInputContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
32
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: CopilotChatViewInputContainer, isStandalone: true, selector: "copilot-chat-view-input-container", inputs: { inputContainerClass: { classPropertyName: "inputContainerClass", publicName: "inputContainerClass", isSignal: true, isRequired: false, transformFunction: null }, input: { classPropertyName: "input", publicName: "input", isSignal: true, isRequired: false, transformFunction: null }, inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null }, disclaimer: { classPropertyName: "disclaimer", publicName: "disclaimer", isSignal: true, isRequired: false, transformFunction: null }, disclaimerText: { classPropertyName: "disclaimerText", publicName: "disclaimerText", isSignal: true, isRequired: false, transformFunction: null }, disclaimerClass: { classPropertyName: "disclaimerClass", publicName: "disclaimerClass", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
33
|
-
{
|
|
34
|
-
provide: ElementRef,
|
|
35
|
-
useExisting: forwardRef(() => CopilotChatViewInputContainer),
|
|
36
|
-
},
|
|
37
|
-
], usesInheritance: true, ngImport: i0, template: `
|
|
38
|
-
<div [class]="computedClass">
|
|
39
|
-
<!-- Input component -->
|
|
40
|
-
<div class="max-w-3xl mx-auto py-0 px-4 sm:px-0">
|
|
41
|
-
<copilot-slot
|
|
42
|
-
[slot]="input()"
|
|
43
|
-
[context]="{ inputClass: inputClass() }"
|
|
44
|
-
[defaultComponent]="defaultInputComponent"
|
|
45
|
-
>
|
|
46
|
-
</copilot-slot>
|
|
47
|
-
</div>
|
|
48
|
-
|
|
49
|
-
<!-- Disclaimer - always rendered like in React -->
|
|
50
|
-
<copilot-slot
|
|
51
|
-
[slot]="disclaimer()"
|
|
52
|
-
[context]="{ text: disclaimerText(), inputClass: disclaimerClass() }"
|
|
53
|
-
[defaultComponent]="defaultDisclaimerComponent"
|
|
54
|
-
>
|
|
55
|
-
</copilot-slot>
|
|
56
|
-
</div>
|
|
57
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: CopilotSlot, selector: "copilot-slot", inputs: ["slot", "context", "defaultComponent", "outputs"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
58
|
-
}
|
|
59
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CopilotChatViewInputContainer, decorators: [{
|
|
60
|
-
type: Component,
|
|
61
|
-
args: [{
|
|
62
|
-
standalone: true,
|
|
63
|
-
selector: "copilot-chat-view-input-container",
|
|
64
|
-
imports: [CommonModule, CopilotSlot],
|
|
65
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
66
|
-
encapsulation: ViewEncapsulation.None,
|
|
67
|
-
providers: [
|
|
68
|
-
{
|
|
69
|
-
provide: ElementRef,
|
|
70
|
-
useExisting: forwardRef(() => CopilotChatViewInputContainer),
|
|
71
|
-
},
|
|
72
|
-
],
|
|
73
|
-
template: `
|
|
74
|
-
<div [class]="computedClass">
|
|
75
|
-
<!-- Input component -->
|
|
76
|
-
<div class="max-w-3xl mx-auto py-0 px-4 sm:px-0">
|
|
77
|
-
<copilot-slot
|
|
78
|
-
[slot]="input()"
|
|
79
|
-
[context]="{ inputClass: inputClass() }"
|
|
80
|
-
[defaultComponent]="defaultInputComponent"
|
|
81
|
-
>
|
|
82
|
-
</copilot-slot>
|
|
83
|
-
</div>
|
|
84
|
-
|
|
85
|
-
<!-- Disclaimer - always rendered like in React -->
|
|
86
|
-
<copilot-slot
|
|
87
|
-
[slot]="disclaimer()"
|
|
88
|
-
[context]="{ text: disclaimerText(), inputClass: disclaimerClass() }"
|
|
89
|
-
[defaultComponent]="defaultDisclaimerComponent"
|
|
90
|
-
>
|
|
91
|
-
</copilot-slot>
|
|
92
|
-
</div>
|
|
93
|
-
`,
|
|
94
|
-
}]
|
|
95
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }] });
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1jaGF0LXZpZXctaW5wdXQtY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LXZpZXctaW5wdXQtY29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsVUFBVSxFQUNWLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBRWpDOzs7O0dBSUc7QUFtQ0gsTUFBTSxPQUFPLDZCQUE4QixTQUFRLFVBQVU7SUFDM0QsbUJBQW1CLEdBQUcsS0FBSyxFQUFzQixDQUFDO0lBRWxELDJCQUEyQjtJQUMzQixLQUFLLEdBQUcsS0FBSyxFQUFtQixDQUFDO0lBQ2pDLFVBQVUsR0FBRyxLQUFLLEVBQXNCLENBQUM7SUFFekMsZ0NBQWdDO0lBQ2hDLFVBQVUsR0FBRyxLQUFLLEVBQW1CLENBQUM7SUFDdEMsY0FBYyxHQUFHLEtBQUssRUFBc0IsQ0FBQztJQUM3QyxlQUFlLEdBQUcsS0FBSyxFQUFzQixDQUFDO0lBRTlDLHFCQUFxQjtJQUNGLHFCQUFxQixHQUFHLGdCQUFnQixDQUFDO0lBQ3pDLDBCQUEwQixHQUFHLHlCQUF5QixDQUFDO0lBRTFFLFlBQVksVUFBc0I7UUFDaEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxFQUFFLENBQ1AsdUNBQXVDLEVBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUMzQixDQUFDO0lBQ0osQ0FBQzt3R0F6QlUsNkJBQTZCOzRGQUE3Qiw2QkFBNkIsNjZCQTVCN0I7WUFDVDtnQkFDRSxPQUFPLEVBQUUsVUFBVTtnQkFDbkIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQzthQUM3RDtTQUNGLGlEQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CVCwyREE3QlMsWUFBWSwrQkFBRSxXQUFXOzs0RkErQnhCLDZCQUE2QjtrQkFsQ3pDLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxtQ0FBbUM7b0JBQzdDLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUM7b0JBQ3BDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxVQUFVOzRCQUNuQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSw4QkFBOEIsQ0FBQzt5QkFDN0Q7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CVDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgaW5wdXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgZm9yd2FyZFJlZixcbiAgRWxlbWVudFJlZixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IENvcGlsb3RTbG90IH0gZnJvbSBcIi4uLy4uL3Nsb3RzL2NvcGlsb3Qtc2xvdFwiO1xuaW1wb3J0IHsgQ29waWxvdENoYXRJbnB1dCB9IGZyb20gXCIuL2NvcGlsb3QtY2hhdC1pbnB1dFwiO1xuaW1wb3J0IHsgQ29waWxvdENoYXRWaWV3RGlzY2xhaW1lciB9IGZyb20gXCIuL2NvcGlsb3QtY2hhdC12aWV3LWRpc2NsYWltZXJcIjtcbmltcG9ydCB7IGNuIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5cbi8qKlxuICogSW5wdXRDb250YWluZXIgY29tcG9uZW50IGZvciBDb3BpbG90Q2hhdFZpZXdcbiAqIENvbnRhaW5lciBmb3IgaW5wdXQgYW5kIGRpc2NsYWltZXIgY29tcG9uZW50c1xuICogVXNlcyBGb3J3YXJkUmVmIGZvciBET00gYWNjZXNzXG4gKi9cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogXCJjb3BpbG90LWNoYXQtdmlldy1pbnB1dC1jb250YWluZXJcIixcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQ29waWxvdFNsb3RdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogRWxlbWVudFJlZixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvcGlsb3RDaGF0Vmlld0lucHV0Q29udGFpbmVyKSxcbiAgICB9LFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgW2NsYXNzXT1cImNvbXB1dGVkQ2xhc3NcIj5cbiAgICAgIDwhLS0gSW5wdXQgY29tcG9uZW50IC0tPlxuICAgICAgPGRpdiBjbGFzcz1cIm1heC13LTN4bCBteC1hdXRvIHB5LTAgcHgtNCBzbTpweC0wXCI+XG4gICAgICAgIDxjb3BpbG90LXNsb3RcbiAgICAgICAgICBbc2xvdF09XCJpbnB1dCgpXCJcbiAgICAgICAgICBbY29udGV4dF09XCJ7IGlucHV0Q2xhc3M6IGlucHV0Q2xhc3MoKSB9XCJcbiAgICAgICAgICBbZGVmYXVsdENvbXBvbmVudF09XCJkZWZhdWx0SW5wdXRDb21wb25lbnRcIlxuICAgICAgICA+XG4gICAgICAgIDwvY29waWxvdC1zbG90PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gRGlzY2xhaW1lciAtIGFsd2F5cyByZW5kZXJlZCBsaWtlIGluIFJlYWN0IC0tPlxuICAgICAgPGNvcGlsb3Qtc2xvdFxuICAgICAgICBbc2xvdF09XCJkaXNjbGFpbWVyKClcIlxuICAgICAgICBbY29udGV4dF09XCJ7IHRleHQ6IGRpc2NsYWltZXJUZXh0KCksIGlucHV0Q2xhc3M6IGRpc2NsYWltZXJDbGFzcygpIH1cIlxuICAgICAgICBbZGVmYXVsdENvbXBvbmVudF09XCJkZWZhdWx0RGlzY2xhaW1lckNvbXBvbmVudFwiXG4gICAgICA+XG4gICAgICA8L2NvcGlsb3Qtc2xvdD5cbiAgICA8L2Rpdj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdENoYXRWaWV3SW5wdXRDb250YWluZXIgZXh0ZW5kcyBFbGVtZW50UmVmIHtcbiAgaW5wdXRDb250YWluZXJDbGFzcyA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcblxuICAvLyBJbnB1dCBzbG90IGNvbmZpZ3VyYXRpb25cbiAgaW5wdXQgPSBpbnB1dDxhbnkgfCB1bmRlZmluZWQ+KCk7XG4gIGlucHV0Q2xhc3MgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG5cbiAgLy8gRGlzY2xhaW1lciBzbG90IGNvbmZpZ3VyYXRpb25cbiAgZGlzY2xhaW1lciA9IGlucHV0PGFueSB8IHVuZGVmaW5lZD4oKTtcbiAgZGlzY2xhaW1lclRleHQgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIGRpc2NsYWltZXJDbGFzcyA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcblxuICAvLyBEZWZhdWx0IGNvbXBvbmVudHNcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlZmF1bHRJbnB1dENvbXBvbmVudCA9IENvcGlsb3RDaGF0SW5wdXQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBkZWZhdWx0RGlzY2xhaW1lckNvbXBvbmVudCA9IENvcGlsb3RDaGF0Vmlld0Rpc2NsYWltZXI7XG5cbiAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZikge1xuICAgIHN1cGVyKGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBnZXQgY29tcHV0ZWRDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBjbihcbiAgICAgIFwiYWJzb2x1dGUgYm90dG9tLTAgbGVmdC0wIHJpZ2h0LTAgei0yMFwiLFxuICAgICAgdGhpcy5pbnB1dENvbnRhaW5lckNsYXNzKCksXG4gICAgKTtcbiAgfVxufVxuIl19
|