@copilotkitnext/angular 1.52.0-next.8 → 1.52.1-next.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.
Files changed (73) hide show
  1. package/README.md +225 -432
  2. package/dist/README.md +225 -432
  3. package/dist/fesm2022/copilotkitnext-angular.mjs +322 -164
  4. package/dist/fesm2022/copilotkitnext-angular.mjs.map +1 -1
  5. package/dist/lib/agent.d.ts +20 -20
  6. package/dist/lib/components/chat/copilot-chat-assistant-message.d.ts +46 -46
  7. package/dist/lib/components/chat/copilot-chat-message-view.d.ts +126 -126
  8. package/dist/lib/components/chat/copilot-chat-tool-calls-view.d.ts +23 -23
  9. package/dist/lib/components/chat/copilot-chat-user-message-branch-navigation.d.ts +6 -6
  10. package/dist/lib/components/chat/copilot-chat-user-message.d.ts +6 -6
  11. package/dist/lib/components/chat/copilot-chat-view-scroll-view.d.ts +18 -18
  12. package/dist/lib/components/chat/copilot-chat-view.d.ts +54 -54
  13. package/dist/lib/components/chat/copilot-chat.d.ts +18 -18
  14. package/dist/lib/config.d.ts +2 -0
  15. package/dist/lib/copilotkit.d.ts +7 -1
  16. package/dist/lib/license-watermark.d.ts +1 -0
  17. package/dist/lib/render-tool-calls.d.ts +23 -23
  18. package/dist/styles.css +3 -0
  19. package/package.json +18 -18
  20. package/dist/esm2022/copilotkitnext-angular.mjs +0 -5
  21. package/dist/esm2022/index.mjs +0 -2
  22. package/dist/esm2022/lib/agent-context.mjs +0 -25
  23. package/dist/esm2022/lib/agent.mjs +0 -73
  24. package/dist/esm2022/lib/chat-config.mjs +0 -35
  25. package/dist/esm2022/lib/chat-state.mjs +0 -18
  26. package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-buttons.mjs +0 -344
  27. package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-renderer.mjs +0 -260
  28. package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message-toolbar.mjs +0 -22
  29. package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message.mjs +0 -415
  30. package/dist/esm2022/lib/components/chat/copilot-chat-assistant-message.types.mjs +0 -2
  31. package/dist/esm2022/lib/components/chat/copilot-chat-audio-recorder.mjs +0 -196
  32. package/dist/esm2022/lib/components/chat/copilot-chat-buttons.mjs +0 -299
  33. package/dist/esm2022/lib/components/chat/copilot-chat-input-defaults.mjs +0 -39
  34. package/dist/esm2022/lib/components/chat/copilot-chat-input.mjs +0 -634
  35. package/dist/esm2022/lib/components/chat/copilot-chat-input.types.mjs +0 -10
  36. package/dist/esm2022/lib/components/chat/copilot-chat-message-view-cursor.mjs +0 -27
  37. package/dist/esm2022/lib/components/chat/copilot-chat-message-view.mjs +0 -269
  38. package/dist/esm2022/lib/components/chat/copilot-chat-message-view.types.mjs +0 -2
  39. package/dist/esm2022/lib/components/chat/copilot-chat-textarea.mjs +0 -139
  40. package/dist/esm2022/lib/components/chat/copilot-chat-tool-calls-view.mjs +0 -36
  41. package/dist/esm2022/lib/components/chat/copilot-chat-toolbar.mjs +0 -20
  42. package/dist/esm2022/lib/components/chat/copilot-chat-tools-menu.mjs +0 -203
  43. package/dist/esm2022/lib/components/chat/copilot-chat-user-message-branch-navigation.mjs +0 -118
  44. package/dist/esm2022/lib/components/chat/copilot-chat-user-message-buttons.mjs +0 -182
  45. package/dist/esm2022/lib/components/chat/copilot-chat-user-message-renderer.mjs +0 -28
  46. package/dist/esm2022/lib/components/chat/copilot-chat-user-message-toolbar.mjs +0 -25
  47. package/dist/esm2022/lib/components/chat/copilot-chat-user-message.mjs +0 -328
  48. package/dist/esm2022/lib/components/chat/copilot-chat-user-message.types.mjs +0 -2
  49. package/dist/esm2022/lib/components/chat/copilot-chat-view-disclaimer.mjs +0 -48
  50. package/dist/esm2022/lib/components/chat/copilot-chat-view-feather.mjs +0 -41
  51. package/dist/esm2022/lib/components/chat/copilot-chat-view-handlers.mjs +0 -19
  52. package/dist/esm2022/lib/components/chat/copilot-chat-view-input-container.mjs +0 -96
  53. package/dist/esm2022/lib/components/chat/copilot-chat-view-scroll-to-bottom-button.mjs +0 -89
  54. package/dist/esm2022/lib/components/chat/copilot-chat-view-scroll-view.mjs +0 -456
  55. package/dist/esm2022/lib/components/chat/copilot-chat-view.mjs +0 -404
  56. package/dist/esm2022/lib/components/chat/copilot-chat-view.types.mjs +0 -2
  57. package/dist/esm2022/lib/components/chat/copilot-chat.mjs +0 -165
  58. package/dist/esm2022/lib/config.mjs +0 -9
  59. package/dist/esm2022/lib/copilotkit.mjs +0 -125
  60. package/dist/esm2022/lib/directives/copilotkit-agent-context.mjs +0 -130
  61. package/dist/esm2022/lib/directives/stick-to-bottom.mjs +0 -170
  62. package/dist/esm2022/lib/directives/tooltip.mjs +0 -217
  63. package/dist/esm2022/lib/human-in-the-loop.mjs +0 -19
  64. package/dist/esm2022/lib/render-tool-calls.mjs +0 -167
  65. package/dist/esm2022/lib/resize-observer.mjs +0 -152
  66. package/dist/esm2022/lib/scroll-position.mjs +0 -123
  67. package/dist/esm2022/lib/slots/copilot-slot.mjs +0 -156
  68. package/dist/esm2022/lib/slots/index.mjs +0 -4
  69. package/dist/esm2022/lib/slots/slot.types.mjs +0 -6
  70. package/dist/esm2022/lib/slots/slot.utils.mjs +0 -235
  71. package/dist/esm2022/lib/tools.mjs +0 -31
  72. package/dist/esm2022/lib/utils.mjs +0 -10
  73. package/dist/esm2022/public-api.mjs +0 -48
@@ -1,156 +0,0 @@
1
- import { Component, TemplateRef, ViewContainerRef, Inject, ChangeDetectionStrategy, input, ViewChild, } from "@angular/core";
2
- import { CommonModule } from "@angular/common";
3
- import { renderSlot } from "./slot.utils";
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@angular/common";
6
- /**
7
- * @internal - This component is for internal use only.
8
- * Simple slot component for rendering custom content or defaults.
9
- * Supports templates and components only.
10
- *
11
- * @example
12
- * ```html
13
- * <!-- With template -->
14
- * <copilot-slot [slot]="sendButtonTemplate" [context]="buttonContext">
15
- * <button class="default-btn">Default</button>
16
- * </copilot-slot>
17
- * ```
18
- */
19
- export class CopilotSlot {
20
- viewContainer;
21
- cdr;
22
- slot = input(undefined);
23
- context = input(undefined);
24
- defaultComponent = input(undefined);
25
- outputs = input(undefined);
26
- slotContainer;
27
- componentRef;
28
- constructor(viewContainer, cdr) {
29
- this.viewContainer = viewContainer;
30
- this.cdr = cdr;
31
- }
32
- ngOnInit() {
33
- this.renderSlot();
34
- }
35
- ngOnChanges(changes) {
36
- if (changes["slot"]) {
37
- // Slot changed, need to re-render completely
38
- this.renderSlot();
39
- }
40
- else if (changes["context"] && this.componentRef) {
41
- // Just context changed, update existing component
42
- this.updateComponentProps();
43
- this.cdr.detectChanges();
44
- }
45
- else if (changes["context"]) {
46
- // No component ref yet, render the slot
47
- this.renderSlot();
48
- }
49
- }
50
- isTemplate(value) {
51
- return value instanceof TemplateRef;
52
- }
53
- renderSlot() {
54
- // Skip if it's a template (handled by ngTemplateOutlet)
55
- if (this.slot() && this.isTemplate(this.slot())) {
56
- this.componentRef = null;
57
- return;
58
- }
59
- // Clear previous content
60
- this.slotContainer.clear();
61
- this.componentRef = null;
62
- // Skip if no slot and no default component
63
- if (!this.slot() && !this.defaultComponent()) {
64
- return;
65
- }
66
- // Use the utility to render other slot types
67
- if (this.slot() || this.defaultComponent()) {
68
- this.componentRef = renderSlot(this.slotContainer, {
69
- slot: this.slot(),
70
- defaultComponent: this.defaultComponent(),
71
- props: this.context(),
72
- outputs: this.outputs(),
73
- });
74
- }
75
- }
76
- updateComponentProps() {
77
- if (!this.componentRef || !this.componentRef.instance) {
78
- return;
79
- }
80
- const props = this.context();
81
- // Update props using setInput, only for declared inputs
82
- if (props) {
83
- const ctor = this.componentRef.instance.constructor;
84
- const cmpDef = ctor?.ɵcmp;
85
- const declaredInputs = new Set(Object.keys(cmpDef?.inputs ?? {}));
86
- if (declaredInputs.has("props")) {
87
- this.componentRef.setInput("props", props);
88
- }
89
- else {
90
- for (const key in props) {
91
- if (declaredInputs.has(key)) {
92
- const value = props[key];
93
- this.componentRef.setInput(key, value);
94
- }
95
- }
96
- }
97
- }
98
- // Trigger change detection
99
- if (this.componentRef.changeDetectorRef) {
100
- this.componentRef.changeDetectorRef.detectChanges();
101
- }
102
- }
103
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CopilotSlot, deps: [{ token: ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
104
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: CopilotSlot, isStandalone: true, selector: "copilot-slot", inputs: { slot: { classPropertyName: "slot", publicName: "slot", isSignal: true, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "context", isSignal: true, isRequired: false, transformFunction: null }, defaultComponent: { classPropertyName: "defaultComponent", publicName: "defaultComponent", isSignal: true, isRequired: false, transformFunction: null }, outputs: { classPropertyName: "outputs", publicName: "outputs", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "slotContainer", first: true, predicate: ["slotContainer"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: `
105
- <!-- If slot template provided, render it -->
106
- @if (slot() && isTemplate(slot)) {
107
- <ng-container
108
- [ngTemplateOutlet]="slot"
109
- [ngTemplateOutletContext]="context || {}"
110
- >
111
- </ng-container>
112
- }
113
-
114
- <!-- If not a template, we'll handle in code -->
115
- <ng-container #slotContainer></ng-container>
116
-
117
- <!-- Default content (only shown if no slot) -->
118
- @if (!slot && !defaultComponent) {
119
- <ng-content></ng-content>
120
- }
121
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
122
- }
123
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CopilotSlot, decorators: [{
124
- type: Component,
125
- args: [{
126
- standalone: true,
127
- selector: "copilot-slot",
128
- imports: [CommonModule],
129
- template: `
130
- <!-- If slot template provided, render it -->
131
- @if (slot() && isTemplate(slot)) {
132
- <ng-container
133
- [ngTemplateOutlet]="slot"
134
- [ngTemplateOutletContext]="context || {}"
135
- >
136
- </ng-container>
137
- }
138
-
139
- <!-- If not a template, we'll handle in code -->
140
- <ng-container #slotContainer></ng-container>
141
-
142
- <!-- Default content (only shown if no slot) -->
143
- @if (!slot && !defaultComponent) {
144
- <ng-content></ng-content>
145
- }
146
- `,
147
- changeDetection: ChangeDetectionStrategy.OnPush,
148
- }]
149
- }], ctorParameters: () => [{ type: i0.ViewContainerRef, decorators: [{
150
- type: Inject,
151
- args: [ViewContainerRef]
152
- }] }, { type: i0.ChangeDetectorRef }], propDecorators: { slotContainer: [{
153
- type: ViewChild,
154
- args: ["slotContainer", { read: ViewContainerRef, static: true }]
155
- }] } });
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29waWxvdC1zbG90LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9zbG90cy9jb3BpbG90LXNsb3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxXQUFXLEVBQ1gsZ0JBQWdCLEVBSWhCLE1BQU0sRUFDTix1QkFBdUIsRUFFdkIsS0FBSyxFQUNMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7O0FBRzFDOzs7Ozs7Ozs7Ozs7R0FZRztBQXlCSCxNQUFNLE9BQU8sV0FBVztJQVljO0lBQzFCO0lBWlYsSUFBSSxHQUFHLEtBQUssQ0FBMkMsU0FBUyxDQUFDLENBQUM7SUFDbEUsT0FBTyxHQUFHLEtBQUssQ0FBa0IsU0FBUyxDQUFDLENBQUM7SUFDNUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUF3QixTQUFTLENBQUMsQ0FBQztJQUMzRCxPQUFPLEdBQUcsS0FBSyxDQUFtRCxTQUFTLENBQUMsQ0FBQztJQUdyRSxhQUFhLENBQW9CO0lBRWpDLFlBQVksQ0FBTztJQUUzQixZQUNvQyxhQUErQixFQUN6RCxHQUFzQjtRQURJLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUN6RCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtJQUM3QixDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDcEIsNkNBQTZDO1lBQzdDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxD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QyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDO3dHQTlGVSxXQUFXLGtCQVlaLGdCQUFnQjs0RkFaZixXQUFXLHlyQkFNYyxnQkFBZ0IsZ0VBMUIxQzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQlQsMkRBbEJTLFlBQVk7OzRGQXFCWCxXQUFXO2tCQXhCdkIsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7OzBCQWFJLE1BQU07MkJBQUMsZ0JBQWdCO3lFQUxsQixhQUFhO3NCQURwQixTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgT25Jbml0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIEluamVjdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBpbnB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgcmVuZGVyU2xvdCB9IGZyb20gXCIuL3Nsb3QudXRpbHNcIjtcbmltcG9ydCB7IFR5cGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG4vKipcbiAqIEBpbnRlcm5hbCAtIFRoaXMgY29tcG9uZW50IGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seS5cbiAqIFNpbXBsZSBzbG90IGNvbXBvbmVudCBmb3IgcmVuZGVyaW5nIGN1c3RvbSBjb250ZW50IG9yIGRlZmF1bHRzLlxuICogU3VwcG9ydHMgdGVtcGxhdGVzIGFuZCBjb21wb25lbnRzIG9ubHkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDwhLS0gV2l0aCB0ZW1wbGF0ZSAtLT5cbiAqIDxjb3BpbG90LXNsb3QgW3Nsb3RdPVwic2VuZEJ1dHRvblRlbXBsYXRlXCIgW2NvbnRleHRdPVwiYnV0dG9uQ29udGV4dFwiPlxuICogICA8YnV0dG9uIGNsYXNzPVwiZGVmYXVsdC1idG5cIj5EZWZhdWx0PC9idXR0b24+XG4gKiA8L2NvcGlsb3Qtc2xvdD5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6IFwiY29waWxvdC1zbG90XCIsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDwhLS0gSWYgc2xvdCB0ZW1wbGF0ZSBwcm92aWRlZCwgcmVuZGVyIGl0IC0tPlxuICAgIEBpZiAoc2xvdCgpICYmIGlzVGVtcGxhdGUoc2xvdCkpIHtcbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwic2xvdFwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJjb250ZXh0IHx8IHt9XCJcbiAgICAgID5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIH1cblxuICAgIDwhLS0gSWYgbm90IGEgdGVtcGxhdGUsIHdlJ2xsIGhhbmRsZSBpbiBjb2RlIC0tPlxuICAgIDxuZy1jb250YWluZXIgI3Nsb3RDb250YWluZXI+PC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIERlZmF1bHQgY29udGVudCAob25seSBzaG93biBpZiBubyBzbG90KSAtLT5cbiAgICBAaWYgKCFzbG90ICYmICFkZWZhdWx0Q29tcG9uZW50KSB7XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgfVxuICBgLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ29waWxvdFNsb3QgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIHNsb3QgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+IHwgVHlwZTxhbnk+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBjb250ZXh0ID0gaW5wdXQ8YW55IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBkZWZhdWx0Q29tcG9uZW50ID0gaW5wdXQ8VHlwZTxhbnk+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBvdXRwdXRzID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgKGV2ZW50OiBhbnkpID0+IHZvaWQ+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIEBWaWV3Q2hpbGQoXCJzbG90Q29udGFpbmVyXCIsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgc2xvdENvbnRhaW5lciE6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgcHJpdmF0ZSBjb21wb25lbnRSZWY/OiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChWaWV3Q29udGFpbmVyUmVmKSBwcml2YXRlIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZW5kZXJTbG90KCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbXCJzbG90XCJdKSB7XG4gICAgICAvLyBTbG90IGNoYW5nZWQsIG5lZWQgdG8gcmUtcmVuZGVyIGNvbXBsZXRlbHlcbiAgICAgIHRoaXMucmVuZGVyU2xvdCgpO1xuICAgIH0gZWxzZSBpZiAoY2hhbmdlc1tcImNvbnRleHRcIl0gJiYgdGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgIC8vIEp1c3QgY29udGV4dCBjaGFuZ2VkLCB1cGRhdGUgZXhpc3RpbmcgY29tcG9uZW50XG4gICAgICB0aGlzLnVwZGF0ZUNvbXBvbmVudFByb3BzKCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIGlmIChjaGFuZ2VzW1wiY29udGV4dFwiXSkge1xuICAgICAgLy8gTm8gY29tcG9uZW50IHJlZiB5ZXQsIHJlbmRlciB0aGUgc2xvdFxuICAgICAgdGhpcy5yZW5kZXJTbG90KCk7XG4gICAgfVxuICB9XG5cbiAgaXNUZW1wbGF0ZSh2YWx1ZTogYW55KTogdmFsdWUgaXMgVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWY7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclNsb3QoKTogdm9pZCB7XG4gICAgLy8gU2tpcCBpZiBpdCdzIGEgdGVtcGxhdGUgKGhhbmRsZWQgYnkgbmdUZW1wbGF0ZU91dGxldClcbiAgICBpZiAodGhpcy5zbG90KCkgJiYgdGhpcy5pc1RlbXBsYXRlKHRoaXMuc2xvdCgpKSkge1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENsZWFyIHByZXZpb3VzIGNvbnRlbnRcbiAgICB0aGlzLnNsb3RDb250YWluZXIuY2xlYXIoKTtcbiAgICB0aGlzLmNvbXBvbmVudFJlZiA9IG51bGw7XG5cbiAgICAvLyBTa2lwIGlmIG5vIHNsb3QgYW5kIG5vIGRlZmF1bHQgY29tcG9uZW50XG4gICAgaWYgKCF0aGlzLnNsb3QoKSAmJiAhdGhpcy5kZWZhdWx0Q29tcG9uZW50KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBVc2UgdGhlIHV0aWxpdHkgdG8gcmVuZGVyIG90aGVyIHNsb3QgdHlwZXNcbiAgICBpZiAodGhpcy5zbG90KCkgfHwgdGhpcy5kZWZhdWx0Q29tcG9uZW50KCkpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gcmVuZGVyU2xvdCh0aGlzLnNsb3RDb250YWluZXIsIHtcbiAgICAgICAgc2xvdDogdGhpcy5zbG90KCksXG4gICAgICAgIGRlZmF1bHRDb21wb25lbnQ6IHRoaXMuZGVmYXVsdENvbXBvbmVudCgpISxcbiAgICAgICAgcHJvcHM6IHRoaXMuY29udGV4dCgpLFxuICAgICAgICBvdXRwdXRzOiB0aGlzLm91dHB1dHMoKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29tcG9uZW50UHJvcHMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbXBvbmVudFJlZiB8fCAhdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wcyA9IHRoaXMuY29udGV4dCgpO1xuXG4gICAgLy8gVXBkYXRlIHByb3BzIHVzaW5nIHNldElucHV0LCBvbmx5IGZvciBkZWNsYXJlZCBpbnB1dHNcbiAgICBpZiAocHJvcHMpIHtcbiAgICAgIGNvbnN0IGN0b3IgPSB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5jb25zdHJ1Y3RvciBhcyBhbnk7XG4gICAgICBjb25zdCBjbXBEZWY6IGFueSA9IGN0b3I/Lsm1Y21wO1xuICAgICAgY29uc3QgZGVjbGFyZWRJbnB1dHMgPSBuZXcgU2V0PHN0cmluZz4oT2JqZWN0LmtleXMoY21wRGVmPy5pbnB1dHMgPz8ge30pKTtcblxuICAgICAgaWYgKGRlY2xhcmVkSW5wdXRzLmhhcyhcInByb3BzXCIpKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KFwicHJvcHNcIiwgcHJvcHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgICBpZiAoZGVjbGFyZWRJbnB1dHMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcHJvcHNba2V5XTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLnNldElucHV0KGtleSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxuICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZikge1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,4 +0,0 @@
1
- export * from "./slot.types";
2
- export * from "./slot.utils";
3
- export { CopilotSlot } from "./copilot-slot";
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3Nsb3RzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL3Nsb3QudHlwZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Nsb3QudXRpbHNcIjtcbmV4cG9ydCB7IENvcGlsb3RTbG90IH0gZnJvbSBcIi4vY29waWxvdC1zbG90XCI7XG4iXX0=
@@ -1,6 +0,0 @@
1
- import { InjectionToken } from "@angular/core";
2
- /**
3
- * Injection token for slot configuration
4
- */
5
- export const SLOT_CONFIG = new InjectionToken("SLOT_CONFIG");
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xvdC50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2xvdHMvc2xvdC50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQStDbEU7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxjQUFjLENBRTNDLGFBQWEsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSwgVGVtcGxhdGVSZWYsIEluamVjdGlvblRva2VuIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIHNsb3Qgb3ZlcnJpZGUuXG4gKiBDYW4gYmUgYSBjb21wb25lbnQgdHlwZSBvciB0ZW1wbGF0ZSByZWZlcmVuY2Ugb25seS5cbiAqIEBpbnRlcm5hbCAtIFRoaXMgdHlwZSBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHlcbiAqL1xuZXhwb3J0IHR5cGUgU2xvdFZhbHVlPFQgPSBhbnk+ID0gVHlwZTxUPiB8IFRlbXBsYXRlUmVmPFQ+O1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGEgc2xvdFxuICogQGludGVybmFsIC0gVGhpcyBpbnRlcmZhY2UgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2xvdENvbmZpZzxUID0gYW55PiB7XG4gIHZhbHVlPzogU2xvdFZhbHVlPFQ+O1xuICBkZWZhdWx0PzogVHlwZTxUPjtcbn1cblxuLyoqXG4gKiBDb250ZXh0IHBhc3NlZCB0byBzbG90IHRlbXBsYXRlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNsb3RDb250ZXh0PFQgPSBhbnk+IHtcbiAgJGltcGxpY2l0OiBUO1xuICBwcm9wcz86IFBhcnRpYWw8VD47XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuLyoqXG4gKiBTbG90IHJlZ2lzdHJ5IGVudHJ5XG4gKiBAaW50ZXJuYWwgLSBUaGlzIGludGVyZmFjZSBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbG90UmVnaXN0cnlFbnRyeTxUID0gYW55PiB7XG4gIGNvbXBvbmVudD86IFR5cGU8VD47XG4gIHRlbXBsYXRlPzogVGVtcGxhdGVSZWY8VD47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcmVuZGVyaW5nIGEgc2xvdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlclNsb3RPcHRpb25zPFQgPSBhbnk+IHtcbiAgc2xvdD86IFNsb3RWYWx1ZTxUPjtcbiAgZGVmYXVsdENvbXBvbmVudDogVHlwZTxUPjtcbiAgcHJvcHM/OiBQYXJ0aWFsPFQ+O1xuICBpbmplY3Rvcj86IGFueTtcbiAgb3V0cHV0cz86IFJlY29yZDxzdHJpbmcsIChldmVudDogYW55KSA9PiB2b2lkPjtcbn1cblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gZm9yIHNsb3QgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgY29uc3QgU0xPVF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48XG4gIFJlYWRvbmx5TWFwPHN0cmluZywgU2xvdFJlZ2lzdHJ5RW50cnk+XG4+KFwiU0xPVF9DT05GSUdcIik7XG5cbi8qKlxuICogVHlwZSBmb3IgY29tcG9uZW50cyB3aXRoIHNsb3RzXG4gKi9cbmV4cG9ydCB0eXBlIFdpdGhTbG90czxTIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgVHlwZTxhbnk+PiwgUmVzdCA9IG9iamVjdD4gPSB7XG4gIFtLIGluIGtleW9mIFMgYXMgYCR7c3RyaW5nICYgS31Db21wb25lbnRgXT86IFR5cGU8YW55Pjtcbn0gJiB7XG4gIFtLIGluIGtleW9mIFMgYXMgYCR7c3RyaW5nICYgS31UZW1wbGF0ZWBdPzogVGVtcGxhdGVSZWY8YW55Pjtcbn0gJiB7XG4gIFtLIGluIGtleW9mIFMgYXMgYCR7c3RyaW5nICYgS31DbGFzc2BdPzogc3RyaW5nO1xufSAmIFJlc3Q7XG4iXX0=
@@ -1,235 +0,0 @@
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+KFxuICB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuICBvcHRpb25zOiBSZW5kZXJTbG90T3B0aW9uczxUPixcbik6IENvbXBvbmVudFJlZjxUPiB8IEVtYmVkZGVkVmlld1JlZjxUPiB8IG51bGwge1xuICBjb25zdCB7IHNsb3QsIGRlZmF1bHRDb21wb25lbnQsIHByb3BzLCBpbmplY3Rvciwgb3V0cHV0cyB9ID0gb3B0aW9ucztcblxuICB2aWV3Q29udGFpbmVyLmNsZWFyKCk7XG5cbiAgY29uc3QgZWZmZWN0aXZlU2xvdCA9IHNsb3QgPz8gZGVmYXVsdENvbXBvbmVudDtcbiAgY29uc3QgZWZmZWN0aXZlSW5qZWN0b3IgPSBpbmplY3RvciA/PyB2aWV3Q29udGFpbmVyLmluamVjdG9yO1xuXG4gIGlmIChlZmZlY3RpdmVTbG90IGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAvLyBUZW1wbGF0ZVJlZjogcmVuZGVyIHRlbXBsYXRlXG4gICAgcmV0dXJuIHZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGVmZmVjdGl2ZVNsb3QsIHtcbiAgICAgICRpbXBsaWNpdDogcHJvcHMgPz8ge30sXG4gICAgICBwcm9wczogcHJvcHMgPz8ge30sXG4gICAgfSBhcyBhbnkpO1xuICB9IGVsc2UgaWYgKGlzQ29tcG9uZW50VHlwZShlZmZlY3RpdmVTbG90KSkge1xuICAgIC8vIENvbXBvbmVudCB0eXBlIC0gd3JhcCBpbiB0cnkvY2F0Y2ggZm9yIHNhZmV0eVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY3JlYXRlQ29tcG9uZW50KFxuICAgICAgICB2aWV3Q29udGFpbmVyLFxuICAgICAgICBlZmZlY3RpdmVTbG90IGFzIFR5cGU8VD4sXG4gICAgICAgIHByb3BzLFxuICAgICAgICBlZmZlY3RpdmVJbmplY3RvcixcbiAgICAgICAgb3V0cHV0cyxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIkZhaWxlZCB0byBjcmVhdGUgY29tcG9uZW50OlwiLCBlZmZlY3RpdmVTbG90LCBlcnJvcik7XG4gICAgICAvLyBGYWxsIHRocm91Z2ggdG8gZGVmYXVsdCBjb21wb25lbnRcbiAgICB9XG4gIH1cblxuICAvLyBEZWZhdWx0OiByZW5kZXIgZGVmYXVsdCBjb21wb25lbnQgaWYgcHJvdmlkZWRcbiAgcmV0dXJuIGRlZmF1bHRDb21wb25lbnRcbiAgICA/IGNyZWF0ZUNvbXBvbmVudChcbiAgICAgICAgdmlld0NvbnRhaW5lcixcbiAgICAgICAgZGVmYXVsdENvbXBvbmVudCxcbiAgICAgICAgcHJvcHMsXG4gICAgICAgIGVmZmVjdGl2ZUluamVjdG9yLFxuICAgICAgICBvdXRwdXRzLFxuICAgICAgKVxuICAgIDogbnVsbDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgY29tcG9uZW50IGFuZCBhcHBsaWVzIHByb3BlcnRpZXMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudDxUPihcbiAgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcbiAgY29tcG9uZW50OiBUeXBlPFQ+LFxuICBwcm9wcz86IFBhcnRpYWw8VD4sXG4gIGluamVjdG9yPzogSW5qZWN0b3IsXG4gIG91dHB1dHM/OiBSZWNvcmQ8c3RyaW5nLCAoZXZlbnQ6IGFueSkgPT4gdm9pZD4sXG4pOiBDb21wb25lbnRSZWY8VD4ge1xuICBjb25zdCBjb21wb25lbnRSZWYgPSB2aWV3Q29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQsIHtcbiAgICBpbmplY3RvcixcbiAgfSk7XG5cbiAgaWYgKHByb3BzKSB7XG4gICAgLy8gQXBwbHkgcHJvcHMgdXNpbmcgc2V0SW5wdXQsIGJ1dCBvbmx5IGZvciBkZWNsYXJlZCBpbnB1dHNcbiAgICBjb25zdCBjbXBEZWY6IGFueSA9IChjb21wb25lbnQgYXMgYW55KS7JtWNtcDtcbiAgICBjb25zdCBkZWNsYXJlZElucHV0cyA9IG5ldyBTZXQ8c3RyaW5nPihPYmplY3Qua2V5cyhjbXBEZWY/LmlucHV0cyA/PyB7fSkpO1xuXG4gICAgaWYgKGRlY2xhcmVkSW5wdXRzLmhhcyhcInByb3BzXCIpKSB7XG4gICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoXCJwcm9wc1wiLCBwcm9wcyBhcyBhbnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wcykge1xuICAgICAgICBpZiAoZGVjbGFyZWRJbnB1dHMuaGFzKGtleSkpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IChwcm9wcyBhcyBhbnkpW2tleV07XG4gICAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKG91dHB1dHMpIHtcbiAgICAvLyBXaXJlIHVwIG91dHB1dCBldmVudCBoYW5kbGVycyB3aXRoIHByb3BlciBjbGVhbnVwXG4gICAgY29uc3QgaW5zdGFuY2UgPSBjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgYW55O1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbnM6IGFueVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFtldmVudE5hbWUsIGhhbmRsZXJdIG9mIE9iamVjdC5lbnRyaWVzKG91dHB1dHMpKSB7XG4gICAgICBpZiAoaW5zdGFuY2VbZXZlbnROYW1lXT8uc3Vic2NyaWJlKSB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGluc3RhbmNlW2V2ZW50TmFtZV0uc3Vic2NyaWJlKGhhbmRsZXIpO1xuICAgICAgICBzdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZWdpc3RlciBjbGVhbnVwIG9uIGNvbXBvbmVudCBkZXN0cm95XG4gICAgY29tcG9uZW50UmVmLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICBzdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uXG4gIGNvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgcmV0dXJuIGNvbXBvbmVudFJlZjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBhIGNvbXBvbmVudCB0eXBlLlxuICogU2ltcGxpZmllZCBjaGVjayAtIHJlbHkgb24gdHJ5L2NhdGNoIGZvciBhY3R1YWwgdmFsaWRhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcG9uZW50VHlwZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIC8vIEFycm93IGZ1bmN0aW9ucyBhbmQgcmVndWxhciBmdW5jdGlvbnMgd2l0aG91dCBhIHByb3RvdHlwZSBhcmUgbm90IGNvbXBvbmVudHNcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiICYmICEhdmFsdWUucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIHZhbHVlIGlzIGEgdmFsaWQgc2xvdCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2xvdFZhbHVlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBTbG90VmFsdWUge1xuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZiB8fCBpc0NvbXBvbmVudFR5cGUodmFsdWUpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBzbG90IHZhbHVlIHRvIGEgY29uc2lzdGVudCBmb3JtYXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVTbG90VmFsdWU8VCA9IGFueT4oXG4gIHZhbHVlOiBTbG90VmFsdWU8VD4gfCB1bmRlZmluZWQsXG4gIGRlZmF1bHRDb21wb25lbnQ6IFR5cGU8VD4gfCB1bmRlZmluZWQsXG4pOiBTbG90UmVnaXN0cnlFbnRyeTxUPiB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4geyBjb21wb25lbnQ6IGRlZmF1bHRDb21wb25lbnQgfTtcbiAgfVxuXG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgcmV0dXJuIHsgdGVtcGxhdGU6IHZhbHVlIH07XG4gIH1cblxuICBpZiAoaXNDb21wb25lbnRUeXBlKHZhbHVlKSkge1xuICAgIHJldHVybiB7IGNvbXBvbmVudDogdmFsdWUgYXMgVHlwZTxUPiB9O1xuICB9XG5cbiAgcmV0dXJuIHsgY29tcG9uZW50OiBkZWZhdWx0Q29tcG9uZW50IH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNsb3QgY29uZmlndXJhdGlvbiBtYXAgZm9yIGEgY29tcG9uZW50LlxuICogXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc2xvdHMgPSBjcmVhdGVTbG90Q29uZmlnKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuKiAgIHNlbmRCdXR0b246IEN1c3RvbVNlbmRCdXR0b24sXG4gKiAgIHRvb2xiYXI6ICdjdXN0b20tdG9vbGJhci1jbGFzcycsXG4gKiAgIGZvb3RlcjogZm9vdGVyVGVtcGxhdGVcbiAqIH0sIHtcbiAqICAgc2VuZEJ1dHRvbjogRGVmYXVsdFNlbmRCdXR0b24sXG4gKiAgIHRvb2xiYXI6IERlZmF1bHRUb29sYmFyLFxuICogICBmb290ZXI6IERlZmF1bHRGb290ZXJcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTbG90Q29uZmlnPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBUeXBlPGFueT4+PihcbiAgb3ZlcnJpZGVzOiBQYXJ0aWFsPFJlY29yZDxrZXlvZiBULCBTbG90VmFsdWU+PixcbiAgZGVmYXVsdHM6IFQsXG4pOiBNYXA8a2V5b2YgVCwgU2xvdFJlZ2lzdHJ5RW50cnk+IHtcbiAgY29uc3QgY29uZmlnID0gbmV3IE1hcDxrZXlvZiBULCBTbG90UmVnaXN0cnlFbnRyeT4oKTtcblxuICBmb3IgKGNvbnN0IGtleSBpbiBkZWZhdWx0cykge1xuICAgIGNvbnN0IG92ZXJyaWRlID0gb3ZlcnJpZGVzW2tleV07XG4gICAgY29uc3QgZGVmYXVsdENvbXBvbmVudCA9IGRlZmF1bHRzW2tleV07XG4gICAgY29uZmlnLnNldChrZXksIG5vcm1hbGl6ZVNsb3RWYWx1ZShvdmVycmlkZSwgZGVmYXVsdENvbXBvbmVudCkpO1xuICB9XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBzbG90IGNvbmZpZ3VyYXRpb24gdG8gY2hpbGQgY29tcG9uZW50cyB2aWEgREkuXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiogICBwcm92aWRlcnM6IFtcbiAqICAgICBwcm92aWRlU2xvdHMoe1xuICogICAgICAgc2VuZEJ1dHRvbjogQ3VzdG9tU2VuZEJ1dHRvbixcbiAqICAgICAgIHRvb2xiYXI6IEN1c3RvbVRvb2xiYXJcbiAqICAgICB9KVxuICogICBdXG4gKiB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlU2xvdHMoc2xvdHM6IFJlY29yZDxzdHJpbmcsIFR5cGU8YW55Pj4pIHtcbiAgY29uc3Qgc2xvdE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBTbG90UmVnaXN0cnlFbnRyeT4oKTtcblxuICAvLyBPbmx5IGFjY2VwdCBjb21wb25lbnQgdHlwZXMgaW4gREkgKHRlbXBsYXRlcyBsYWNrIHZpZXcgY29udGV4dClcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdHMpKSB7XG4gICAgaWYgKGlzQ29tcG9uZW50VHlwZSh2YWx1ZSkpIHtcbiAgICAgIHNsb3RNYXAuc2V0KGtleSwgeyBjb21wb25lbnQ6IHZhbHVlIGFzIFR5cGU8YW55PiB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IFNMT1RfQ09ORklHLFxuICAgIHVzZVZhbHVlOiBzbG90TWFwLFxuICB9O1xufVxuXG4vKipcbiAqIEdldHMgc2xvdCBjb25maWd1cmF0aW9uIGZyb20gREkuXG4gKiBNdXN0IGJlIGNhbGxlZCB3aXRoaW4gYW4gaW5qZWN0aW9uIGNvbnRleHQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCB7XG4gKiAgIHNsb3RzID0gZ2V0U2xvdENvbmZpZygpO1xuICpcbiAqICAgbmdPbkluaXQoKSB7XG4gKiAgICAgY29uc3Qgc2VuZEJ1dHRvbiA9IHRoaXMuc2xvdHM/LmdldCgnc2VuZEJ1dHRvbicpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNsb3RDb25maWcoKTogUmVhZG9ubHlNYXA8c3RyaW5nLCBTbG90UmVnaXN0cnlFbnRyeT4gfCBudWxsIHtcbiAgcmV0dXJuIGluamVjdChTTE9UX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcmVuZGVyIGZ1bmN0aW9uIGZvciBhIHNwZWNpZmljIHNsb3QuXG4gKiBVc2VmdWwgZm9yIGNyZWF0aW5nIHJldXNhYmxlIHNsb3QgcmVuZGVyZXJzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZW5kZXJTZW5kQnV0dG9uID0gY3JlYXRlU2xvdFJlbmRlcmVyKFxuICogICBEZWZhdWx0U2VuZEJ1dHRvbixcbiAqICAgJ3NlbmRCdXR0b24nXG4gKiApO1xuICpcbiAqIC8vIExhdGVyIGluIHRlbXBsYXRlXG4gKiByZW5kZXJTZW5kQnV0dG9uKHRoaXMudmlld0NvbnRhaW5lciwgdGhpcy5zZW5kQnV0dG9uT3ZlcnJpZGUpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTbG90UmVuZGVyZXI8VD4oXG4gIGRlZmF1bHRDb21wb25lbnQ6IFR5cGU8VD4sXG4gIHNsb3ROYW1lPzogc3RyaW5nLFxuKSB7XG4gIC8vIEdldCBjb25maWcgaW4gdGhlIGluamVjdGlvbiBjb250ZXh0IHdoZW4gdGhlIHJlbmRlcmVyIGlzIGNyZWF0ZWRcbiAgY29uc3QgY29uZmlnID0gc2xvdE5hbWUgPyBnZXRTbG90Q29uZmlnKCkgOiBudWxsO1xuXG4gIHJldHVybiAoXG4gICAgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBzbG90PzogU2xvdFZhbHVlPFQ+LFxuICAgIHByb3BzPzogUGFydGlhbDxUPixcbiAgICBvdXRwdXRzPzogUmVjb3JkPHN0cmluZywgKGV2ZW50OiBhbnkpID0+IHZvaWQ+LFxuICApID0+IHtcbiAgICAvLyBDaGVjayBESSBmb3Igb3ZlcnJpZGVzIGlmIHNsb3QgbmFtZSBwcm92aWRlZFxuICAgIGlmIChzbG90TmFtZSAmJiAhc2xvdCAmJiBjb25maWcpIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gY29uZmlnLmdldChzbG90TmFtZSk7XG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgaWYgKGVudHJ5LmNvbXBvbmVudCkgc2xvdCA9IGVudHJ5LmNvbXBvbmVudDtcbiAgICAgICAgZWxzZSBpZiAoZW50cnkudGVtcGxhdGUpIHNsb3QgPSBlbnRyeS50ZW1wbGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyU2xvdCh2aWV3Q29udGFpbmVyLCB7XG4gICAgICBzbG90LFxuICAgICAgZGVmYXVsdENvbXBvbmVudCxcbiAgICAgIHByb3BzLFxuICAgICAgb3V0cHV0cyxcbiAgICB9KTtcbiAgfTtcbn1cbiJdfQ==
@@ -1,31 +0,0 @@
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, frontendTool.agentId);
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, humanInTheLoop.agentId);
29
- });
30
- }
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Rvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFnQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQThGMUMsTUFBTSxVQUFVLHNCQUFzQixDQUVwQyxjQUEwQztJQUMxQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXRDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUU3QyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUN4QixVQUFVLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FFbEMsWUFBc0M7SUFDdEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN0QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFdEMsVUFBVSxDQUFDLGVBQWUsQ0FBQztRQUN6QixHQUFJLFlBQW1DO1FBQ3ZDLFFBQVE7S0FDVCxDQUFDLENBQUM7SUFFSCxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUN4QixVQUFVLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FFcEMsY0FBMEM7SUFDMUMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUV0QyxVQUFVLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFN0MsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDeEIsVUFBVSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyRSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXN0cm95UmVmLCBJbmplY3RvciwgU2lnbmFsLCBUeXBlLCBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRnJvbnRlbmRUb29sLCBGcm9udGVuZFRvb2xIYW5kbGVyQ29udGV4dCB9IGZyb20gXCJAY29waWxvdGtpdG5leHQvY29yZVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IENvcGlsb3RLaXQgfSBmcm9tIFwiLi9jb3BpbG90a2l0XCI7XG5cbmV4cG9ydCB0eXBlIEFuZ3VsYXJUb29sQ2FsbDxcbiAgQXJncyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4+ID1cbiAgfCB7XG4gICAgICBhcmdzOiBQYXJ0aWFsPEFyZ3M+O1xuICAgICAgc3RhdHVzOiBcImluLXByb2dyZXNzXCI7XG4gICAgICByZXN1bHQ6IHVuZGVmaW5lZDtcbiAgICB9XG4gIHwge1xuICAgICAgYXJnczogQXJncztcbiAgICAgIHN0YXR1czogXCJleGVjdXRpbmdcIjtcbiAgICAgIHJlc3VsdDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfCB7XG4gICAgICBhcmdzOiBBcmdzO1xuICAgICAgc3RhdHVzOiBcImNvbXBsZXRlXCI7XG4gICAgICByZXN1bHQ6IHN0cmluZztcbiAgICB9O1xuXG5leHBvcnQgdHlwZSBIdW1hbkluVGhlTG9vcFRvb2xDYWxsPFxuICBBcmdzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbj4gPVxuICB8IHtcbiAgICAgIGFyZ3M6IFBhcnRpYWw8QXJncz47XG4gICAgICBzdGF0dXM6IFwiaW4tcHJvZ3Jlc3NcIjtcbiAgICAgIHJlc3VsdDogdW5kZWZpbmVkO1xuICAgICAgcmVzcG9uZDogKHJlc3VsdDogdW5rbm93bikgPT4gdm9pZDtcbiAgICB9XG4gIHwge1xuICAgICAgYXJnczogQXJncztcbiAgICAgIHN0YXR1czogXCJleGVjdXRpbmdcIjtcbiAgICAgIHJlc3VsdDogdW5kZWZpbmVkO1xuICAgICAgcmVzcG9uZDogKHJlc3VsdDogdW5rbm93bikgPT4gdm9pZDtcbiAgICB9XG4gIHwge1xuICAgICAgYXJnczogQXJncztcbiAgICAgIHN0YXR1czogXCJjb21wbGV0ZVwiO1xuICAgICAgcmVzdWx0OiBzdHJpbmc7XG4gICAgICByZXNwb25kOiAocmVzdWx0OiB1bmtub3duKSA9PiB2b2lkO1xuICAgIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbFJlbmRlcmVyPFxuICBBcmdzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbj4ge1xuICB0b29sQ2FsbDogU2lnbmFsPEFuZ3VsYXJUb29sQ2FsbDxBcmdzPj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHVtYW5JblRoZUxvb3BUb29sUmVuZGVyZXI8XG4gIEFyZ3MgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuPiB7XG4gIHRvb2xDYWxsOiBTaWduYWw8SHVtYW5JblRoZUxvb3BUb29sQ2FsbDxBcmdzPj47XG59XG5cbmV4cG9ydCB0eXBlIENsaWVudFRvb2w8XG4gIEFyZ3MgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuPiA9IE9taXQ8RnJvbnRlbmRUb29sPEFyZ3M+LCBcImhhbmRsZXJcIj4gJiB7XG4gIHJlbmRlcmVyPzogVHlwZTxUb29sUmVuZGVyZXI8QXJncz4+O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJUb29sQ2FsbENvbmZpZzxcbiAgQXJncyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4+IHtcbiAgbmFtZTogc3RyaW5nO1xuICBhcmdzOiB6LlpvZFR5cGU8QXJncz47XG4gIGNvbXBvbmVudDogVHlwZTxUb29sUmVuZGVyZXI8QXJncz4+O1xuICBhZ2VudElkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZyb250ZW5kVG9vbENvbmZpZzxcbiAgQXJncyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4+IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBwYXJhbWV0ZXJzOiB6LlpvZFR5cGU8QXJncz47XG4gIGNvbXBvbmVudD86IFR5cGU8VG9vbFJlbmRlcmVyPEFyZ3M+PjtcbiAgaGFuZGxlcjogKFxuICAgIGFyZ3M6IEFyZ3MsXG4gICAgY29udGV4dDogRnJvbnRlbmRUb29sSGFuZGxlckNvbnRleHQsXG4gICkgPT4gUHJvbWlzZTx1bmtub3duPjtcbiAgYWdlbnRJZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIdW1hbkluVGhlTG9vcENvbmZpZzxcbiAgQXJncyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4+IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBwYXJhbWV0ZXJzOiB6LlpvZFR5cGU8QXJncz47XG4gIGNvbXBvbmVudDogVHlwZTxIdW1hbkluVGhlTG9vcFRvb2xSZW5kZXJlcjxBcmdzPj47XG4gIGFnZW50SWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclJlbmRlclRvb2xDYWxsPFxuICBBcmdzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbj4ocmVuZGVyVG9vbENhbGw6IFJlbmRlclRvb2xDYWxsQ29uZmlnPEFyZ3M+KTogdm9pZCB7XG4gIGNvbnN0IGNvcGlsb3RLaXQgPSBpbmplY3QoQ29waWxvdEtpdCk7XG4gIGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgY29waWxvdEtpdC5hZGRSZW5kZXJUb29sQ2FsbChyZW5kZXJUb29sQ2FsbCk7XG5cbiAgZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgIGNvcGlsb3RLaXQucmVtb3ZlVG9vbChyZW5kZXJUb29sQ2FsbC5uYW1lLCByZW5kZXJUb29sQ2FsbC5hZ2VudElkKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckZyb250ZW5kVG9vbDxcbiAgQXJncyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4+KGZyb250ZW5kVG9vbDogRnJvbnRlbmRUb29sQ29uZmlnPEFyZ3M+KTogdm9pZCB7XG4gIGNvbnN0IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgY29uc3QgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgY29uc3QgY29waWxvdEtpdCA9IGluamVjdChDb3BpbG90S2l0KTtcblxuICBjb3BpbG90S2l0LmFkZEZyb250ZW5kVG9vbCh7XG4gICAgLi4uKGZyb250ZW5kVG9vbCBhcyBGcm9udGVuZFRvb2xDb25maWcpLFxuICAgIGluamVjdG9yLFxuICB9KTtcblxuICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgY29waWxvdEtpdC5yZW1vdmVUb29sKGZyb250ZW5kVG9vbC5uYW1lLCBmcm9udGVuZFRvb2wuYWdlbnRJZCk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJIdW1hbkluVGhlTG9vcDxcbiAgQXJncyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4+KGh1bWFuSW5UaGVMb29wOiBIdW1hbkluVGhlTG9vcENvbmZpZzxBcmdzPik6IHZvaWQge1xuICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBjb25zdCBjb3BpbG90S2l0ID0gaW5qZWN0KENvcGlsb3RLaXQpO1xuXG4gIGNvcGlsb3RLaXQuYWRkSHVtYW5JblRoZUxvb3AoaHVtYW5JblRoZUxvb3ApO1xuXG4gIGRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICBjb3BpbG90S2l0LnJlbW92ZVRvb2woaHVtYW5JblRoZUxvb3AubmFtZSwgaHVtYW5JblRoZUxvb3AuYWdlbnRJZCk7XG4gIH0pO1xufVxuIl19
@@ -1,10 +0,0 @@
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
@@ -1,48 +0,0 @@
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==