@copilotkitnext/angular 0.0.0-max-changeset-20260109174803
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/LICENSE +10 -0
- package/README.md +530 -0
- package/dist/LICENSE +10 -0
- package/dist/README.md +530 -0
- package/dist/esm2022/copilotkitnext-angular.mjs +5 -0
- package/dist/esm2022/index.mjs +2 -0
- package/dist/esm2022/lib/agent-context.mjs +25 -0
- 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/lib/components/chat/copilot-chat-assistant-message.mjs +415 -0
- 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 +98 -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 +308 -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 +115 -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 +138 -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 +6 -0
- package/dist/esm2022/lib/slots/slot.utils.mjs +235 -0
- package/dist/esm2022/lib/tools.mjs +31 -0
- package/dist/esm2022/lib/utils.mjs +10 -0
- package/dist/esm2022/public-api.mjs +48 -0
- package/dist/fesm2022/copilotkitnext-angular.mjs +6310 -0
- package/dist/fesm2022/copilotkitnext-angular.mjs.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/lib/agent-context.d.ts +12 -0
- package/dist/lib/agent.d.ts +68 -0
- package/dist/lib/chat-config.d.ts +23 -0
- 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 +208 -0
- package/dist/lib/components/chat/copilot-chat-assistant-message.types.d.ts +31 -0
- package/dist/lib/components/chat/copilot-chat-audio-recorder.d.ts +40 -0
- 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/lib/components/chat/copilot-chat-input.types.d.ts +129 -0
- package/dist/lib/components/chat/copilot-chat-message-view-cursor.d.ts +11 -0
- package/dist/lib/components/chat/copilot-chat-message-view.d.ts +430 -0
- package/dist/lib/components/chat/copilot-chat-message-view.types.d.ts +24 -0
- package/dist/lib/components/chat/copilot-chat-textarea.d.ts +41 -0
- package/dist/lib/components/chat/copilot-chat-tool-calls-view.d.ts +70 -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 +35 -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 +71 -0
- package/dist/lib/components/chat/copilot-chat-user-message.types.d.ts +27 -0
- package/dist/lib/components/chat/copilot-chat-view-disclaimer.d.ts +15 -0
- package/dist/lib/components/chat/copilot-chat-view-feather.d.ts +15 -0
- package/dist/lib/components/chat/copilot-chat-view-handlers.d.ts +11 -0
- 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 +129 -0
- package/dist/lib/components/chat/copilot-chat-view.d.ts +284 -0
- package/dist/lib/components/chat/copilot-chat-view.types.d.ts +42 -0
- package/dist/lib/components/chat/copilot-chat.d.ts +82 -0
- package/dist/lib/config.d.ts +16 -0
- package/dist/lib/copilotkit.d.ts +29 -0
- package/dist/lib/directives/copilotkit-agent-context.d.ts +68 -0
- 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 +90 -0
- package/dist/lib/resize-observer.d.ts +44 -0
- package/dist/lib/scroll-position.d.ts +50 -0
- 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 +55 -0
- package/dist/lib/slots/slot.utils.d.ts +110 -0
- package/dist/lib/tools.d.ts +65 -0
- package/dist/lib/utils.d.ts +6 -0
- package/dist/public-api.d.ts +47 -0
- package/dist/styles.css +1882 -0
- package/eslint.config.mjs +20 -0
- package/package.json +101 -0
- package/tsconfig.json +33 -0
- package/vitest.config.mts +45 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { TemplateRef, inject, } from "@angular/core";
|
|
2
|
+
import { SLOT_CONFIG, } from "./slot.types";
|
|
3
|
+
/**
|
|
4
|
+
* Renders a slot value into a ViewContainerRef.
|
|
5
|
+
* This is the core utility for slot rendering.
|
|
6
|
+
*
|
|
7
|
+
* @param viewContainer - The ViewContainerRef to render into
|
|
8
|
+
* @param options - Options for rendering the slot
|
|
9
|
+
* @returns The created component or embedded view reference
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* export class MyComponent {
|
|
14
|
+
* @ViewChild('container', { read: ViewContainerRef }) container!: ViewContainerRef;
|
|
15
|
+
*
|
|
16
|
+
* renderButton() {
|
|
17
|
+
* renderSlot(this.container, {
|
|
18
|
+
* slot: this.buttonOverride,
|
|
19
|
+
* defaultComponent: DefaultButton,
|
|
20
|
+
* props: { text: 'Click me' },
|
|
21
|
+
* outputs: { click: (event) => this.handleClick(event) }
|
|
22
|
+
* });
|
|
23
|
+
* }
|
|
24
|
+
* }
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export function renderSlot(viewContainer, options) {
|
|
28
|
+
const { slot, defaultComponent, props, injector, outputs } = options;
|
|
29
|
+
viewContainer.clear();
|
|
30
|
+
const effectiveSlot = slot ?? defaultComponent;
|
|
31
|
+
const effectiveInjector = injector ?? viewContainer.injector;
|
|
32
|
+
if (effectiveSlot instanceof TemplateRef) {
|
|
33
|
+
// TemplateRef: render template
|
|
34
|
+
return viewContainer.createEmbeddedView(effectiveSlot, {
|
|
35
|
+
$implicit: props ?? {},
|
|
36
|
+
props: props ?? {},
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
else if (isComponentType(effectiveSlot)) {
|
|
40
|
+
// Component type - wrap in try/catch for safety
|
|
41
|
+
try {
|
|
42
|
+
return createComponent(viewContainer, effectiveSlot, props, effectiveInjector, outputs);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
console.warn("Failed to create component:", effectiveSlot, error);
|
|
46
|
+
// Fall through to default component
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Default: render default component if provided
|
|
50
|
+
return defaultComponent
|
|
51
|
+
? createComponent(viewContainer, defaultComponent, props, effectiveInjector, outputs)
|
|
52
|
+
: null;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Creates a component and applies properties.
|
|
56
|
+
*/
|
|
57
|
+
function createComponent(viewContainer, component, props, injector, outputs) {
|
|
58
|
+
const componentRef = viewContainer.createComponent(component, {
|
|
59
|
+
injector,
|
|
60
|
+
});
|
|
61
|
+
if (props) {
|
|
62
|
+
// Apply props using setInput, but only for declared inputs
|
|
63
|
+
const cmpDef = component.ɵcmp;
|
|
64
|
+
const declaredInputs = new Set(Object.keys(cmpDef?.inputs ?? {}));
|
|
65
|
+
if (declaredInputs.has("props")) {
|
|
66
|
+
componentRef.setInput("props", props);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
for (const key in props) {
|
|
70
|
+
if (declaredInputs.has(key)) {
|
|
71
|
+
const value = props[key];
|
|
72
|
+
componentRef.setInput(key, value);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (outputs) {
|
|
78
|
+
// Wire up output event handlers with proper cleanup
|
|
79
|
+
const instance = componentRef.instance;
|
|
80
|
+
const subscriptions = [];
|
|
81
|
+
for (const [eventName, handler] of Object.entries(outputs)) {
|
|
82
|
+
if (instance[eventName]?.subscribe) {
|
|
83
|
+
const subscription = instance[eventName].subscribe(handler);
|
|
84
|
+
subscriptions.push(subscription);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Register cleanup on component destroy
|
|
88
|
+
componentRef.onDestroy(() => {
|
|
89
|
+
subscriptions.forEach((sub) => sub.unsubscribe());
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
// Trigger change detection
|
|
93
|
+
componentRef.changeDetectorRef.detectChanges();
|
|
94
|
+
return componentRef;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Checks if a value is a component type.
|
|
98
|
+
* Simplified check - rely on try/catch for actual validation.
|
|
99
|
+
*/
|
|
100
|
+
export function isComponentType(value) {
|
|
101
|
+
// Arrow functions and regular functions without a prototype are not components
|
|
102
|
+
return typeof value === "function" && !!value.prototype;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Checks if a value is a valid slot value.
|
|
106
|
+
*/
|
|
107
|
+
export function isSlotValue(value) {
|
|
108
|
+
return value instanceof TemplateRef || isComponentType(value);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Normalizes a slot value to a consistent format.
|
|
112
|
+
*/
|
|
113
|
+
export function normalizeSlotValue(value, defaultComponent) {
|
|
114
|
+
if (!value) {
|
|
115
|
+
return { component: defaultComponent };
|
|
116
|
+
}
|
|
117
|
+
if (value instanceof TemplateRef) {
|
|
118
|
+
return { template: value };
|
|
119
|
+
}
|
|
120
|
+
if (isComponentType(value)) {
|
|
121
|
+
return { component: value };
|
|
122
|
+
}
|
|
123
|
+
return { component: defaultComponent };
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Creates a slot configuration map for a component.
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* ```typescript
|
|
130
|
+
* const slots = createSlotConfig({
|
|
131
|
+
standalone: true,
|
|
132
|
+
* sendButton: CustomSendButton,
|
|
133
|
+
* toolbar: 'custom-toolbar-class',
|
|
134
|
+
* footer: footerTemplate
|
|
135
|
+
* }, {
|
|
136
|
+
* sendButton: DefaultSendButton,
|
|
137
|
+
* toolbar: DefaultToolbar,
|
|
138
|
+
* footer: DefaultFooter
|
|
139
|
+
* });
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
export function createSlotConfig(overrides, defaults) {
|
|
143
|
+
const config = new Map();
|
|
144
|
+
for (const key in defaults) {
|
|
145
|
+
const override = overrides[key];
|
|
146
|
+
const defaultComponent = defaults[key];
|
|
147
|
+
config.set(key, normalizeSlotValue(override, defaultComponent));
|
|
148
|
+
}
|
|
149
|
+
return config;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Provides slot configuration to child components via DI.
|
|
153
|
+
*
|
|
154
|
+
* @example
|
|
155
|
+
* ```typescript
|
|
156
|
+
* @Component({
|
|
157
|
+
standalone: true,
|
|
158
|
+
* providers: [
|
|
159
|
+
* provideSlots({
|
|
160
|
+
* sendButton: CustomSendButton,
|
|
161
|
+
* toolbar: CustomToolbar
|
|
162
|
+
* })
|
|
163
|
+
* ]
|
|
164
|
+
* })
|
|
165
|
+
* ```
|
|
166
|
+
*/
|
|
167
|
+
export function provideSlots(slots) {
|
|
168
|
+
const slotMap = new Map();
|
|
169
|
+
// Only accept component types in DI (templates lack view context)
|
|
170
|
+
for (const [key, value] of Object.entries(slots)) {
|
|
171
|
+
if (isComponentType(value)) {
|
|
172
|
+
slotMap.set(key, { component: value });
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
provide: SLOT_CONFIG,
|
|
177
|
+
useValue: slotMap,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Gets slot configuration from DI.
|
|
182
|
+
* Must be called within an injection context.
|
|
183
|
+
*
|
|
184
|
+
* @example
|
|
185
|
+
* ```typescript
|
|
186
|
+
* export class MyComponent {
|
|
187
|
+
* slots = getSlotConfig();
|
|
188
|
+
*
|
|
189
|
+
* ngOnInit() {
|
|
190
|
+
* const sendButton = this.slots?.get('sendButton');
|
|
191
|
+
* }
|
|
192
|
+
* }
|
|
193
|
+
* ```
|
|
194
|
+
*/
|
|
195
|
+
export function getSlotConfig() {
|
|
196
|
+
return inject(SLOT_CONFIG, { optional: true });
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Creates a render function for a specific slot.
|
|
200
|
+
* Useful for creating reusable slot renderers.
|
|
201
|
+
*
|
|
202
|
+
* @example
|
|
203
|
+
* ```typescript
|
|
204
|
+
* const renderSendButton = createSlotRenderer(
|
|
205
|
+
* DefaultSendButton,
|
|
206
|
+
* 'sendButton'
|
|
207
|
+
* );
|
|
208
|
+
*
|
|
209
|
+
* // Later in template
|
|
210
|
+
* renderSendButton(this.viewContainer, this.sendButtonOverride);
|
|
211
|
+
* ```
|
|
212
|
+
*/
|
|
213
|
+
export function createSlotRenderer(defaultComponent, slotName) {
|
|
214
|
+
// Get config in the injection context when the renderer is created
|
|
215
|
+
const config = slotName ? getSlotConfig() : null;
|
|
216
|
+
return (viewContainer, slot, props, outputs) => {
|
|
217
|
+
// Check DI for overrides if slot name provided
|
|
218
|
+
if (slotName && !slot && config) {
|
|
219
|
+
const entry = config.get(slotName);
|
|
220
|
+
if (entry) {
|
|
221
|
+
if (entry.component)
|
|
222
|
+
slot = entry.component;
|
|
223
|
+
else if (entry.template)
|
|
224
|
+
slot = entry.template;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return renderSlot(viewContainer, {
|
|
228
|
+
slot,
|
|
229
|
+
defaultComponent,
|
|
230
|
+
props,
|
|
231
|
+
outputs,
|
|
232
|
+
});
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xvdC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2xvdHMvc2xvdC51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsV0FBVyxFQUtYLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBSUwsV0FBVyxHQUNaLE1BQU0sY0FBYyxDQUFDO0FBRXRCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQ3hCLGFBQStCLEVBQy9CLE9BQTZCO0lBRTdCLE1BQU0sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFckUsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRXRCLE1BQU0sYUFBYSxHQUFHLElBQUksSUFBSSxnQkFBZ0IsQ0FBQztJQUMvQyxNQUFNLGlCQUFpQixHQUFHLFFBQVEsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDO0lBRTdELElBQUksYUFBYSxZQUFZLFdBQVcsRUFBRSxDQUFDO1FBQ3pDLCtCQUErQjtRQUMvQixPQUFPLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUU7WUFDckQsU0FBUyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3RCLEtBQUssRUFBRSxLQUFLLElBQUksRUFBRTtTQUNaLENBQUMsQ0FBQztJQUNaLENBQUM7U0FBTSxJQUFJLGVBQWUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1FBQzFDLGdEQUFnRDtRQUNoRCxJQUFJLENBQUM7WUFDSCxPQUFPLGVBQWUsQ0FDcEIsYUFBYSxFQUNiLGFBQXdCLEVBQ3hCLEtBQUssRUFDTCxpQkFBaUIsRUFDakIsT0FBTyxDQUNSLENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkJB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QUk7WUFDSixnQkFBZ0I7WUFDaEIsS0FBSztZQUNMLE9BQU87U0FDUixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgVHlwZSxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIENvbXBvbmVudFJlZixcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBJbmplY3RvcixcbiAgaW5qZWN0LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgU2xvdFZhbHVlLFxuICBSZW5kZXJTbG90T3B0aW9ucyxcbiAgU2xvdFJlZ2lzdHJ5RW50cnksXG4gIFNMT1RfQ09ORklHLFxufSBmcm9tIFwiLi9zbG90LnR5cGVzXCI7XG5cbi8qKlxuICogUmVuZGVycyBhIHNsb3QgdmFsdWUgaW50byBhIFZpZXdDb250YWluZXJSZWYuXG4gKiBUaGlzIGlzIHRoZSBjb3JlIHV0aWxpdHkgZm9yIHNsb3QgcmVuZGVyaW5nLlxuICpcbiAqIEBwYXJhbSB2aWV3Q29udGFpbmVyIC0gVGhlIFZpZXdDb250YWluZXJSZWYgdG8gcmVuZGVyIGludG9cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgcmVuZGVyaW5nIHRoZSBzbG90XG4gKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBjb21wb25lbnQgb3IgZW1iZWRkZWQgdmlldyByZWZlcmVuY2VcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXhwb3J0IGNsYXNzIE15Q29tcG9uZW50IHtcbiAqICAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGNvbnRhaW5lciE6IFZpZXdDb250YWluZXJSZWY7XG4gKlxuICogICByZW5kZXJCdXR0b24oKSB7XG4gKiAgICAgcmVuZGVyU2xvdCh0aGlzLmNvbnRhaW5lciwge1xuICogICAgICAgc2xvdDogdGhpcy5idXR0b25PdmVycmlkZSxcbiAqICAgICAgIGRlZmF1bHRDb21wb25lbnQ6IERlZmF1bHRCdXR0b24sXG4gKiAgICAgICBwcm9wczogeyB0ZXh0OiAnQ2xpY2sgbWUnIH0sXG4gKiAgICAgICBvdXRwdXRzOiB7IGNsaWNrOiAoZXZlbnQpID0+IHRoaXMuaGFuZGxlQ2xpY2soZXZlbnQpIH1cbiAqICAgICB9KTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJTbG90PFQgPSBhbnk+KFxuICB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuICBvcHRpb25zOiBSZW5kZXJTbG90T3B0aW9uczxUPlxuKTogQ29tcG9uZW50UmVmPFQ+IHwgRW1iZWRkZWRWaWV3UmVmPFQ+IHwgbnVsbCB7XG4gIGNvbnN0IHsgc2xvdCwgZGVmYXVsdENvbXBvbmVudCwgcHJvcHMsIGluamVjdG9yLCBvdXRwdXRzIH0gPSBvcHRpb25zO1xuXG4gIHZpZXdDb250YWluZXIuY2xlYXIoKTtcblxuICBjb25zdCBlZmZlY3RpdmVTbG90ID0gc2xvdCA/PyBkZWZhdWx0Q29tcG9uZW50O1xuICBjb25zdCBlZmZlY3RpdmVJbmplY3RvciA9IGluamVjdG9yID8/IHZpZXdDb250YWluZXIuaW5qZWN0b3I7XG5cbiAgaWYgKGVmZmVjdGl2ZVNsb3QgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgIC8vIFRlbXBsYXRlUmVmOiByZW5kZXIgdGVtcGxhdGVcbiAgICByZXR1cm4gdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoZWZmZWN0aXZlU2xvdCwge1xuICAgICAgJGltcGxpY2l0OiBwcm9wcyA/PyB7fSxcbiAgICAgIHByb3BzOiBwcm9wcyA/PyB7fSxcbiAgICB9IGFzIGFueSk7XG4gIH0gZWxzZSBpZiAoaXNDb21wb25lbnRUeXBlKGVmZmVjdGl2ZVNsb3QpKSB7XG4gICAgLy8gQ29tcG9uZW50IHR5cGUgLSB3cmFwIGluIHRyeS9jYXRjaCBmb3Igc2FmZXR5XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjcmVhdGVDb21wb25lbnQoXG4gICAgICAgIHZpZXdDb250YWluZXIsXG4gICAgICAgIGVmZmVjdGl2ZVNsb3QgYXMgVHlwZTxUPixcbiAgICAgICAgcHJvcHMsXG4gICAgICAgIGVmZmVjdGl2ZUluamVjdG9yLFxuICAgICAgICBvdXRwdXRzXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJGYWlsZWQgdG8gY3JlYXRlIGNvbXBvbmVudDpcIiwgZWZmZWN0aXZlU2xvdCwgZXJyb3IpO1xuICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQgY29tcG9uZW50XG4gICAgfVxuICB9XG5cbiAgLy8gRGVmYXVsdDogcmVuZGVyIGRlZmF1bHQgY29tcG9uZW50IGlmIHByb3ZpZGVkXG4gIHJldHVybiBkZWZhdWx0Q29tcG9uZW50XG4gICAgPyBjcmVhdGVDb21wb25lbnQoXG4gICAgICAgIHZpZXdDb250YWluZXIsXG4gICAgICAgIGRlZmF1bHRDb21wb25lbnQsXG4gICAgICAgIHByb3BzLFxuICAgICAgICBlZmZlY3RpdmVJbmplY3RvcixcbiAgICAgICAgb3V0cHV0c1xuICAgICAgKVxuICAgIDogbnVsbDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgY29tcG9uZW50IGFuZCBhcHBsaWVzIHByb3BlcnRpZXMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudDxUPihcbiAgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcbiAgY29tcG9uZW50OiBUeXBlPFQ+LFxuICBwcm9wcz86IFBhcnRpYWw8VD4sXG4gIGluamVjdG9yPzogSW5qZWN0b3IsXG4gIG91dHB1dHM/OiBSZWNvcmQ8c3RyaW5nLCAoZXZlbnQ6IGFueSkgPT4gdm9pZD5cbik6IENvbXBvbmVudFJlZjxUPiB7XG4gIGNvbnN0IGNvbXBvbmVudFJlZiA9IHZpZXdDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCwge1xuICAgIGluamVjdG9yLFxuICB9KTtcblxuICBpZiAocHJvcHMpIHtcbiAgICAvLyBBcHBseSBwcm9wcyB1c2luZyBzZXRJbnB1dCwgYnV0IG9ubHkgZm9yIGRlY2xhcmVkIGlucHV0c1xuICAgIGNvbnN0IGNtcERlZjogYW55ID0gKGNvbXBvbmVudCBhcyBhbnkpLsm1Y21wO1xuICAgIGNvbnN0IGRlY2xhcmVkSW5wdXRzID0gbmV3IFNldDxzdHJpbmc+KE9iamVjdC5rZXlzKGNtcERlZj8uaW5wdXRzID8/IHt9KSk7XG5cbiAgICBpZiAoZGVjbGFyZWRJbnB1dHMuaGFzKFwicHJvcHNcIikpIHtcbiAgICAgIGNvbXBvbmVudFJlZi5zZXRJbnB1dChcInByb3BzXCIsIHByb3BzIGFzIGFueSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHByb3BzKSB7XG4gICAgICAgIGlmIChkZWNsYXJlZElucHV0cy5oYXMoa2V5KSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gKHByb3BzIGFzIGFueSlba2V5XTtcbiAgICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAob3V0cHV0cykge1xuICAgIC8vIFdpcmUgdXAgb3V0cHV0IGV2ZW50IGhhbmRsZXJzIHdpdGggcHJvcGVyIGNsZWFudXBcbiAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBhbnk7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uczogYW55W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2V2ZW50TmFtZSwgaGFuZGxlcl0gb2YgT2JqZWN0LmVudHJpZXMob3V0cHV0cykpIHtcbiAgICAgIGlmIChpbnN0YW5jZVtldmVudE5hbWVdPy5zdWJzY3JpYmUpIHtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gaW5zdGFuY2VbZXZlbnROYW1lXS5zdWJzY3JpYmUoaGFuZGxlcik7XG4gICAgICAgIHN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlZ2lzdGVyIGNsZWFudXAgb24gY29tcG9uZW50IGRlc3Ryb3lcbiAgICBjb21wb25lbnRSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICAgIHN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb25cbiAgY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcblxuICByZXR1cm4gY29tcG9uZW50UmVmO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIGEgY29tcG9uZW50IHR5cGUuXG4gKiBTaW1wbGlmaWVkIGNoZWNrIC0gcmVseSBvbiB0cnkvY2F0Y2ggZm9yIGFjdHVhbCB2YWxpZGF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wb25lbnRUeXBlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgLy8gQXJyb3cgZnVuY3Rpb25zIGFuZCByZWd1bGFyIGZ1bmN0aW9ucyB3aXRob3V0IGEgcHJvdG90eXBlIGFyZSBub3QgY29tcG9uZW50c1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIgJiYgISF2YWx1ZS5wcm90b3R5cGU7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgdmFsdWUgaXMgYSB2YWxpZCBzbG90IHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTbG90VmFsdWUodmFsdWU6IGFueSk6IHZhbHVlIGlzIFNsb3RWYWx1ZSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmIHx8IGlzQ29tcG9uZW50VHlwZSh2YWx1ZSk7XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHNsb3QgdmFsdWUgdG8gYSBjb25zaXN0ZW50IGZvcm1hdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVNsb3RWYWx1ZTxUID0gYW55PihcbiAgdmFsdWU6IFNsb3RWYWx1ZTxUPiB8IHVuZGVmaW5lZCxcbiAgZGVmYXVsdENvbXBvbmVudDogVHlwZTxUPiB8IHVuZGVmaW5lZFxuKTogU2xvdFJlZ2lzdHJ5RW50cnk8VD4ge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHsgY29tcG9uZW50OiBkZWZhdWx0Q29tcG9uZW50IH07XG4gIH1cblxuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgIHJldHVybiB7IHRlbXBsYXRlOiB2YWx1ZSB9O1xuICB9XG5cbiAgaWYgKGlzQ29tcG9uZW50VHlwZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4geyBjb21wb25lbnQ6IHZhbHVlIGFzIFR5cGU8VD4gfTtcbiAgfVxuXG4gIHJldHVybiB7IGNvbXBvbmVudDogZGVmYXVsdENvbXBvbmVudCB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzbG90IGNvbmZpZ3VyYXRpb24gbWFwIGZvciBhIGNvbXBvbmVudC5cbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNsb3RzID0gY3JlYXRlU2xvdENvbmZpZyh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiogICBzZW5kQnV0dG9uOiBDdXN0b21TZW5kQnV0dG9uLFxuICogICB0b29sYmFyOiAnY3VzdG9tLXRvb2xiYXItY2xhc3MnLFxuICogICBmb290ZXI6IGZvb3RlclRlbXBsYXRlXG4gKiB9LCB7XG4gKiAgIHNlbmRCdXR0b246IERlZmF1bHRTZW5kQnV0dG9uLFxuICogICB0b29sYmFyOiBEZWZhdWx0VG9vbGJhcixcbiAqICAgZm9vdGVyOiBEZWZhdWx0Rm9vdGVyXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2xvdENvbmZpZzxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgVHlwZTxhbnk+Pj4oXG4gIG92ZXJyaWRlczogUGFydGlhbDxSZWNvcmQ8a2V5b2YgVCwgU2xvdFZhbHVlPj4sXG4gIGRlZmF1bHRzOiBUXG4pOiBNYXA8a2V5b2YgVCwgU2xvdFJlZ2lzdHJ5RW50cnk+IHtcbiAgY29uc3QgY29uZmlnID0gbmV3IE1hcDxrZXlvZiBULCBTbG90UmVnaXN0cnlFbnRyeT4oKTtcblxuICBmb3IgKGNvbnN0IGtleSBpbiBkZWZhdWx0cykge1xuICAgIGNvbnN0IG92ZXJyaWRlID0gb3ZlcnJpZGVzW2tleV07XG4gICAgY29uc3QgZGVmYXVsdENvbXBvbmVudCA9IGRlZmF1bHRzW2tleV07XG4gICAgY29uZmlnLnNldChrZXksIG5vcm1hbGl6ZVNsb3RWYWx1ZShvdmVycmlkZSwgZGVmYXVsdENvbXBvbmVudCkpO1xuICB9XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBzbG90IGNvbmZpZ3VyYXRpb24gdG8gY2hpbGQgY29tcG9uZW50cyB2aWEgREkuXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiogICBwcm92aWRlcnM6IFtcbiAqICAgICBwcm92aWRlU2xvdHMoe1xuICogICAgICAgc2VuZEJ1dHRvbjogQ3VzdG9tU2VuZEJ1dHRvbixcbiAqICAgICAgIHRvb2xiYXI6IEN1c3RvbVRvb2xiYXJcbiAqICAgICB9KVxuICogICBdXG4gKiB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlU2xvdHMoc2xvdHM6IFJlY29yZDxzdHJpbmcsIFR5cGU8YW55Pj4pIHtcbiAgY29uc3Qgc2xvdE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBTbG90UmVnaXN0cnlFbnRyeT4oKTtcblxuICAvLyBPbmx5IGFjY2VwdCBjb21wb25lbnQgdHlwZXMgaW4gREkgKHRlbXBsYXRlcyBsYWNrIHZpZXcgY29udGV4dClcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdHMpKSB7XG4gICAgaWYgKGlzQ29tcG9uZW50VHlwZSh2YWx1ZSkpIHtcbiAgICAgIHNsb3RNYXAuc2V0KGtleSwgeyBjb21wb25lbnQ6IHZhbHVlIGFzIFR5cGU8YW55PiB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IFNMT1RfQ09ORklHLFxuICAgIHVzZVZhbHVlOiBzbG90TWFwLFxuICB9O1xufVxuXG4vKipcbiAqIEdldHMgc2xvdCBjb25maWd1cmF0aW9uIGZyb20gREkuXG4gKiBNdXN0IGJlIGNhbGxlZCB3aXRoaW4gYW4gaW5qZWN0aW9uIGNvbnRleHQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCB7XG4gKiAgIHNsb3RzID0gZ2V0U2xvdENvbmZpZygpO1xuICpcbiAqICAgbmdPbkluaXQoKSB7XG4gKiAgICAgY29uc3Qgc2VuZEJ1dHRvbiA9IHRoaXMuc2xvdHM/LmdldCgnc2VuZEJ1dHRvbicpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNsb3RDb25maWcoKTogUmVhZG9ubHlNYXA8c3RyaW5nLCBTbG90UmVnaXN0cnlFbnRyeT4gfCBudWxsIHtcbiAgcmV0dXJuIGluamVjdChTTE9UX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVuZGVyIGZ1bmN0aW9uIGZvciBhIHNwZWNpZmljIHNsb3QuXG4gKiBVc2VmdWwgZm9yIGNyZWF0aW5nIHJldXNhYmxlIHNsb3QgcmVuZGVyZXJzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZW5kZXJTZW5kQnV0dG9uID0gY3JlYXRlU2xvdFJlbmRlcmVyKFxuICogICBEZWZhdWx0U2VuZEJ1dHRvbixcbiAqICAgJ3NlbmRCdXR0b24nXG4gKiApO1xuICpcbiAqIC8vIExhdGVyIGluIHRlbXBsYXRlXG4gKiByZW5kZXJTZW5kQnV0dG9uKHRoaXMudmlld0NvbnRhaW5lciwgdGhpcy5zZW5kQnV0dG9uT3ZlcnJpZGUpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTbG90UmVuZGVyZXI8VD4oXG4gIGRlZmF1bHRDb21wb25lbnQ6IFR5cGU8VD4sXG4gIHNsb3ROYW1lPzogc3RyaW5nXG4pIHtcbiAgLy8gR2V0IGNvbmZpZyBpbiB0aGUgaW5qZWN0aW9uIGNvbnRleHQgd2hlbiB0aGUgcmVuZGVyZXIgaXMgY3JlYXRlZFxuICBjb25zdCBjb25maWcgPSBzbG90TmFtZSA/IGdldFNsb3RDb25maWcoKSA6IG51bGw7XG5cbiAgcmV0dXJuIChcbiAgICB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHNsb3Q/OiBTbG90VmFsdWU8VD4sXG4gICAgcHJvcHM/OiBQYXJ0aWFsPFQ+LFxuICAgIG91dHB1dHM/OiBSZWNvcmQ8c3RyaW5nLCAoZXZlbnQ6IGFueSkgPT4gdm9pZD5cbiAgKSA9PiB7XG4gICAgLy8gQ2hlY2sgREkgZm9yIG92ZXJyaWRlcyBpZiBzbG90IG5hbWUgcHJvdmlkZWRcbiAgICBpZiAoc2xvdE5hbWUgJiYgIXNsb3QgJiYgY29uZmlnKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IGNvbmZpZy5nZXQoc2xvdE5hbWUpO1xuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGlmIChlbnRyeS5jb21wb25lbnQpIHNsb3QgPSBlbnRyeS5jb21wb25lbnQ7XG4gICAgICAgIGVsc2UgaWYgKGVudHJ5LnRlbXBsYXRlKSBzbG90ID0gZW50cnkudGVtcGxhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbmRlclNsb3Qodmlld0NvbnRhaW5lciwge1xuICAgICAgc2xvdCxcbiAgICAgIGRlZmF1bHRDb21wb25lbnQsXG4gICAgICBwcm9wcyxcbiAgICAgIG91dHB1dHMsXG4gICAgfSk7XG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { DestroyRef, Injector, inject } from "@angular/core";
|
|
2
|
+
import { CopilotKit } from "./copilotkit";
|
|
3
|
+
export function registerRenderToolCall(renderToolCall) {
|
|
4
|
+
const copilotKit = inject(CopilotKit);
|
|
5
|
+
const destroyRef = inject(DestroyRef);
|
|
6
|
+
copilotKit.addRenderToolCall(renderToolCall);
|
|
7
|
+
destroyRef.onDestroy(() => {
|
|
8
|
+
copilotKit.removeTool(renderToolCall.name, renderToolCall.agentId);
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
export function registerFrontendTool(frontendTool) {
|
|
12
|
+
const injector = inject(Injector);
|
|
13
|
+
const destroyRef = inject(DestroyRef);
|
|
14
|
+
const copilotKit = inject(CopilotKit);
|
|
15
|
+
copilotKit.addFrontendTool({
|
|
16
|
+
...frontendTool,
|
|
17
|
+
injector,
|
|
18
|
+
});
|
|
19
|
+
destroyRef.onDestroy(() => {
|
|
20
|
+
copilotKit.removeTool(frontendTool.name);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
export function registerHumanInTheLoop(humanInTheLoop) {
|
|
24
|
+
const destroyRef = inject(DestroyRef);
|
|
25
|
+
const copilotKit = inject(CopilotKit);
|
|
26
|
+
copilotKit.addHumanInTheLoop(humanInTheLoop);
|
|
27
|
+
destroyRef.onDestroy(() => {
|
|
28
|
+
copilotKit.removeTool(humanInTheLoop.name);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Rvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFnQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQThFMUMsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxjQUEwQztJQUUxQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXRDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUU3QyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUN4QixVQUFVLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsWUFBc0M7SUFFdEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFdEMsVUFBVSxDQUFDLGVBQWUsQ0FBQztRQUN6QixHQUFJLFlBQW1DO1FBQ3ZDLFFBQVE7S0FDVCxDQUFDLENBQUM7SUFFSCxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUN4QixVQUFVLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLGNBQTBDO0lBRTFDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFdEMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRTdDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ3hCLFVBQVUsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc3Ryb3lSZWYsIEluamVjdG9yLCBTaWduYWwsIFR5cGUsIGluamVjdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGcm9udGVuZFRvb2wgfSBmcm9tIFwiQGNvcGlsb3RraXRuZXh0L2NvcmVcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBDb3BpbG90S2l0IH0gZnJvbSBcIi4vY29waWxvdGtpdFwiO1xuXG5leHBvcnQgdHlwZSBBbmd1bGFyVG9vbENhbGw8QXJncyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID1cbiAgfCB7XG4gICAgICBhcmdzOiBQYXJ0aWFsPEFyZ3M+O1xuICAgICAgc3RhdHVzOiBcImluLXByb2dyZXNzXCI7XG4gICAgICByZXN1bHQ6IHVuZGVmaW5lZDtcbiAgICB9XG4gIHwge1xuICAgICAgYXJnczogQXJncztcbiAgICAgIHN0YXR1czogXCJleGVjdXRpbmdcIjtcbiAgICAgIHJlc3VsdDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfCB7XG4gICAgICBhcmdzOiBBcmdzO1xuICAgICAgc3RhdHVzOiBcImNvbXBsZXRlXCI7XG4gICAgICByZXN1bHQ6IHN0cmluZztcbiAgICB9O1xuXG5leHBvcnQgdHlwZSBIdW1hbkluVGhlTG9vcFRvb2xDYWxsPEFyZ3MgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9XG4gIHwge1xuICAgICAgYXJnczogUGFydGlhbDxBcmdzPjtcbiAgICAgIHN0YXR1czogXCJpbi1wcm9ncmVzc1wiO1xuICAgICAgcmVzdWx0OiB1bmRlZmluZWQ7XG4gICAgICByZXNwb25kOiAocmVzdWx0OiB1bmtub3duKSA9PiB2b2lkO1xuICAgIH1cbiAgfCB7XG4gICAgICBhcmdzOiBBcmdzO1xuICAgICAgc3RhdHVzOiBcImV4ZWN1dGluZ1wiO1xuICAgICAgcmVzdWx0OiB1bmRlZmluZWQ7XG4gICAgICByZXNwb25kOiAocmVzdWx0OiB1bmtub3duKSA9PiB2b2lkO1xuICAgIH1cbiAgfCB7XG4gICAgICBhcmdzOiBBcmdzO1xuICAgICAgc3RhdHVzOiBcImNvbXBsZXRlXCI7XG4gICAgICByZXN1bHQ6IHN0cmluZztcbiAgICAgIHJlc3BvbmQ6IChyZXN1bHQ6IHVua25vd24pID0+IHZvaWQ7XG4gICAgfTtcblxuZXhwb3J0IGludGVyZmFjZSBUb29sUmVuZGVyZXI8QXJncyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgdG9vbENhbGw6IFNpZ25hbDxBbmd1bGFyVG9vbENhbGw8QXJncz4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh1bWFuSW5UaGVMb29wVG9vbFJlbmRlcmVyPEFyZ3MgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIHRvb2xDYWxsOiBTaWduYWw8SHVtYW5JblRoZUxvb3BUb29sQ2FsbDxBcmdzPj47XG59XG5cbmV4cG9ydCB0eXBlIENsaWVudFRvb2w8QXJncyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0gT21pdDxcbiAgRnJvbnRlbmRUb29sPEFyZ3M+LFxuICBcImhhbmRsZXJcIlxuPiAmIHtcbiAgcmVuZGVyZXI/OiBUeXBlPFRvb2xSZW5kZXJlcjxBcmdzPj47XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlclRvb2xDYWxsQ29uZmlnPEFyZ3MgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIG5hbWU6IHN0cmluZztcbiAgYXJnczogei5ab2RUeXBlPEFyZ3M+O1xuICBjb21wb25lbnQ6IFR5cGU8VG9vbFJlbmRlcmVyPEFyZ3M+PjtcbiAgYWdlbnRJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGcm9udGVuZFRvb2xDb25maWc8QXJncyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBwYXJhbWV0ZXJzOiB6LlpvZFR5cGU8QXJncz47XG4gIGNvbXBvbmVudD86IFR5cGU8VG9vbFJlbmRlcmVyPEFyZ3M+PjtcbiAgaGFuZGxlcjogKGFyZ3M6IEFyZ3MpID0+IFByb21pc2U8dW5rbm93bj47XG4gIGFnZW50SWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHVtYW5JblRoZUxvb3BDb25maWc8QXJncyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBwYXJhbWV0ZXJzOiB6LlpvZFR5cGU8QXJncz47XG4gIGNvbXBvbmVudDogVHlwZTxIdW1hbkluVGhlTG9vcFRvb2xSZW5kZXJlcjxBcmdzPj47XG4gIGFnZW50SWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclJlbmRlclRvb2xDYWxsPEFyZ3MgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgcmVuZGVyVG9vbENhbGw6IFJlbmRlclRvb2xDYWxsQ29uZmlnPEFyZ3M+LFxuKTogdm9pZCB7XG4gIGNvbnN0IGNvcGlsb3RLaXQgPSBpbmplY3QoQ29waWxvdEtpdCk7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgY29waWxvdEtpdC5hZGRSZW5kZXJUb29sQ2FsbChyZW5kZXJUb29sQ2FsbCk7XG5cbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgIGNvcGlsb3RLaXQucmVtb3ZlVG9vbChyZW5kZXJUb29sQ2FsbC5uYW1lLCByZW5kZXJUb29sQ2FsbC5hZ2VudElkKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckZyb250ZW5kVG9vbDxBcmdzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gIGZyb250ZW5kVG9vbDogRnJvbnRlbmRUb29sQ29uZmlnPEFyZ3M+LFxuKTogdm9pZCB7XG4gIGNvbnN0IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgY29uc3QgY29waWxvdEtpdCA9IGluamVjdChDb3BpbG90S2l0KTtcblxuICBjb3BpbG90S2l0LmFkZEZyb250ZW5kVG9vbCh7XG4gICAgLi4uKGZyb250ZW5kVG9vbCBhcyBGcm9udGVuZFRvb2xDb25maWcpLFxuICAgIGluamVjdG9yLFxuICB9KTtcblxuICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgY29waWxvdEtpdC5yZW1vdmVUb29sKGZyb250ZW5kVG9vbC5uYW1lKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlckh1bWFuSW5UaGVMb29wPEFyZ3MgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgaHVtYW5JblRoZUxvb3A6IEh1bWFuSW5UaGVMb29wQ29uZmlnPEFyZ3M+LFxuKTogdm9pZCB7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIGNvbnN0IGNvcGlsb3RLaXQgPSBpbmplY3QoQ29waWxvdEtpdCk7XG5cbiAgY29waWxvdEtpdC5hZGRIdW1hbkluVGhlTG9vcChodW1hbkluVGhlTG9vcCk7XG5cbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgIGNvcGlsb3RLaXQucmVtb3ZlVG9vbChodW1hbkluVGhlTG9vcC5uYW1lKTtcbiAgfSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { clsx } from "clsx";
|
|
2
|
+
import { twMerge } from "tailwind-merge";
|
|
3
|
+
/**
|
|
4
|
+
* Utility function to merge Tailwind CSS classes
|
|
5
|
+
* Combines clsx for conditional classes and tailwind-merge for proper Tailwind class merging
|
|
6
|
+
*/
|
|
7
|
+
export function cn(...inputs) {
|
|
8
|
+
return twMerge(clsx(inputs));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQW1CLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6Qzs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsRUFBRSxDQUFDLEdBQUcsTUFBb0I7SUFDeEMsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNsc3gsIHR5cGUgQ2xhc3NWYWx1ZSB9IGZyb20gXCJjbHN4XCI7XG5pbXBvcnQgeyB0d01lcmdlIH0gZnJvbSBcInRhaWx3aW5kLW1lcmdlXCI7XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbiB0byBtZXJnZSBUYWlsd2luZCBDU1MgY2xhc3Nlc1xuICogQ29tYmluZXMgY2xzeCBmb3IgY29uZGl0aW9uYWwgY2xhc3NlcyBhbmQgdGFpbHdpbmQtbWVyZ2UgZm9yIHByb3BlciBUYWlsd2luZCBjbGFzcyBtZXJnaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbiguLi5pbnB1dHM6IENsYXNzVmFsdWVbXSkge1xuICByZXR1cm4gdHdNZXJnZShjbHN4KGlucHV0cykpO1xufVxuIl19
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export * from "./lib/config";
|
|
2
|
+
export * from "./lib/copilotkit";
|
|
3
|
+
export * from "./lib/tools";
|
|
4
|
+
export * from "./lib/render-tool-calls";
|
|
5
|
+
export * from "./lib/agent";
|
|
6
|
+
export * from "./lib/chat-config";
|
|
7
|
+
export * from "./lib/chat-state";
|
|
8
|
+
export * from "./lib/scroll-position";
|
|
9
|
+
export * from "./lib/resize-observer";
|
|
10
|
+
export * from "./lib/utils";
|
|
11
|
+
export * from "./lib/agent-context";
|
|
12
|
+
export * from "./lib/slots";
|
|
13
|
+
export * from "./lib/directives/copilotkit-agent-context";
|
|
14
|
+
export * from "./lib/directives/stick-to-bottom";
|
|
15
|
+
export * from "./lib/directives/tooltip";
|
|
16
|
+
export * from "./lib/components/chat/copilot-chat";
|
|
17
|
+
export * from "./lib/components/chat/copilot-chat-assistant-message";
|
|
18
|
+
export * from "./lib/components/chat/copilot-chat-assistant-message-buttons";
|
|
19
|
+
export * from "./lib/components/chat/copilot-chat-assistant-message-renderer";
|
|
20
|
+
export * from "./lib/components/chat/copilot-chat-assistant-message-toolbar";
|
|
21
|
+
export * from "./lib/components/chat/copilot-chat-assistant-message.types";
|
|
22
|
+
export * from "./lib/components/chat/copilot-chat-audio-recorder";
|
|
23
|
+
export * from "./lib/components/chat/copilot-chat-buttons";
|
|
24
|
+
export * from "./lib/components/chat/copilot-chat-input";
|
|
25
|
+
export * from "./lib/components/chat/copilot-chat-input-defaults";
|
|
26
|
+
export * from "./lib/components/chat/copilot-chat-input.types";
|
|
27
|
+
export * from "./lib/components/chat/copilot-chat-message-view";
|
|
28
|
+
export * from "./lib/components/chat/copilot-chat-message-view-cursor";
|
|
29
|
+
export * from "./lib/components/chat/copilot-chat-message-view.types";
|
|
30
|
+
export * from "./lib/components/chat/copilot-chat-textarea";
|
|
31
|
+
export * from "./lib/components/chat/copilot-chat-tool-calls-view";
|
|
32
|
+
export * from "./lib/components/chat/copilot-chat-toolbar";
|
|
33
|
+
export * from "./lib/components/chat/copilot-chat-tools-menu";
|
|
34
|
+
export * from "./lib/components/chat/copilot-chat-user-message";
|
|
35
|
+
export * from "./lib/components/chat/copilot-chat-user-message-branch-navigation";
|
|
36
|
+
export * from "./lib/components/chat/copilot-chat-user-message-buttons";
|
|
37
|
+
export * from "./lib/components/chat/copilot-chat-user-message-renderer";
|
|
38
|
+
export * from "./lib/components/chat/copilot-chat-user-message-toolbar";
|
|
39
|
+
export * from "./lib/components/chat/copilot-chat-user-message.types";
|
|
40
|
+
export * from "./lib/components/chat/copilot-chat-view";
|
|
41
|
+
export * from "./lib/components/chat/copilot-chat-view-disclaimer";
|
|
42
|
+
export * from "./lib/components/chat/copilot-chat-view-feather";
|
|
43
|
+
export * from "./lib/components/chat/copilot-chat-view-handlers";
|
|
44
|
+
export * from "./lib/components/chat/copilot-chat-view-input-container";
|
|
45
|
+
export * from "./lib/components/chat/copilot-chat-view-scroll-to-bottom-button";
|
|
46
|
+
export * from "./lib/components/chat/copilot-chat-view-scroll-view";
|
|
47
|
+
export * from "./lib/components/chat/copilot-chat-view.types";
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMscUJBQXFCLENBQUM7QUFFcEMsY0FBYyxhQUFhLENBQUM7QUFFNUIsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsMEJBQTBCLENBQUM7QUFFekMsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLHNEQUFzRCxDQUFDO0FBQ3JFLGNBQWMsOERBQThELENBQUM7QUFDN0UsY0FBYywrREFBK0QsQ0FBQztBQUM5RSxjQUFjLDhEQUE4RCxDQUFDO0FBQzdFLGNBQWMsNERBQTRELENBQUM7QUFDM0UsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLGdEQUFnRCxDQUFDO0FBQy9ELGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyx3REFBd0QsQ0FBQztBQUN2RSxjQUFjLHVEQUF1RCxDQUFDO0FBQ3RFLGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYyxvREFBb0QsQ0FBQztBQUNuRSxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLG1FQUFtRSxDQUFDO0FBQ2xGLGNBQWMseURBQXlELENBQUM7QUFDeEUsY0FBYywwREFBMEQsQ0FBQztBQUN6RSxjQUFjLHlEQUF5RCxDQUFDO0FBQ3hFLGNBQWMsdURBQXVELENBQUM7QUFDdEUsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLG9EQUFvRCxDQUFDO0FBQ25FLGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyxrREFBa0QsQ0FBQztBQUNqRSxjQUFjLHlEQUF5RCxDQUFDO0FBQ3hFLGNBQWMsaUVBQWlFLENBQUM7QUFDaEYsY0FBYyxxREFBcUQsQ0FBQztBQUNwRSxjQUFjLCtDQUErQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vbGliL2NvbmZpZ1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2NvcGlsb3RraXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi90b29sc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL3JlbmRlci10b29sLWNhbGxzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvYWdlbnRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9jaGF0LWNvbmZpZ1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2NoYXQtc3RhdGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9zY3JvbGwtcG9zaXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9yZXNpemUtb2JzZXJ2ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi91dGlsc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2FnZW50LWNvbnRleHRcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vbGliL3Nsb3RzXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9kaXJlY3RpdmVzL2NvcGlsb3RraXQtYWdlbnQtY29udGV4dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2RpcmVjdGl2ZXMvc3RpY2stdG8tYm90dG9tXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvZGlyZWN0aXZlcy90b29sdGlwXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC1hc3Npc3RhbnQtbWVzc2FnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2NvbXBvbmVudHMvY2hhdC9jb3BpbG90LWNoYXQtYXNzaXN0YW50LW1lc3NhZ2UtYnV0dG9uc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2NvbXBvbmVudHMvY2hhdC9jb3BpbG90LWNoYXQtYXNzaXN0YW50LW1lc3NhZ2UtcmVuZGVyZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LWFzc2lzdGFudC1tZXNzYWdlLXRvb2xiYXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LWFzc2lzdGFudC1tZXNzYWdlLnR5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC1hdWRpby1yZWNvcmRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2NvbXBvbmVudHMvY2hhdC9jb3BpbG90LWNoYXQtYnV0dG9uc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2NvbXBvbmVudHMvY2hhdC9jb3BpbG90LWNoYXQtaW5wdXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LWlucHV0LWRlZmF1bHRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC1pbnB1dC50eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2NvbXBvbmVudHMvY2hhdC9jb3BpbG90LWNoYXQtbWVzc2FnZS12aWV3XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC1tZXNzYWdlLXZpZXctY3Vyc29yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC1tZXNzYWdlLXZpZXcudHlwZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LXRleHRhcmVhXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC10b29sLWNhbGxzLXZpZXdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LXRvb2xiYXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LXRvb2xzLW1lbnVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LXVzZXItbWVzc2FnZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2NvbXBvbmVudHMvY2hhdC9jb3BpbG90LWNoYXQtdXNlci1tZXNzYWdlLWJyYW5jaC1uYXZpZ2F0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2UtYnV0dG9uc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2NvbXBvbmVudHMvY2hhdC9jb3BpbG90LWNoYXQtdXNlci1tZXNzYWdlLXJlbmRlcmVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC11c2VyLW1lc3NhZ2UtdG9vbGJhclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2NvbXBvbmVudHMvY2hhdC9jb3BpbG90LWNoYXQtdXNlci1tZXNzYWdlLnR5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC12aWV3XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWIvY29tcG9uZW50cy9jaGF0L2NvcGlsb3QtY2hhdC12aWV3LWRpc2NsYWltZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LXZpZXctZmVhdGhlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2NvbXBvbmVudHMvY2hhdC9jb3BpbG90LWNoYXQtdmlldy1oYW5kbGVyc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGliL2NvbXBvbmVudHMvY2hhdC9jb3BpbG90LWNoYXQtdmlldy1pbnB1dC1jb250YWluZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LXZpZXctc2Nyb2xsLXRvLWJvdHRvbS1idXR0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LXZpZXctc2Nyb2xsLXZpZXdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpYi9jb21wb25lbnRzL2NoYXQvY29waWxvdC1jaGF0LXZpZXcudHlwZXNcIjtcbiJdfQ==
|