@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,170 +0,0 @@
1
- import { Directive, ElementRef, inject, input, output, } from "@angular/core";
2
- import { ScrollPosition } from "../scroll-position";
3
- import { ResizeObserverService } from "../resize-observer";
4
- import { Subject } from "rxjs";
5
- import { takeUntil, debounceTime, filter, distinctUntilChanged, } from "rxjs/operators";
6
- import * as i0 from "@angular/core";
7
- /**
8
- * Directive for implementing stick-to-bottom scroll behavior
9
- * Similar to the React use-stick-to-bottom library
10
- *
11
- * @example
12
- * ```html
13
- * <div copilotStickToBottom
14
- * [enabled]="true"
15
- * [threshold]="10"
16
- * [initialBehavior]="'smooth'"
17
- * [resizeBehavior]="'smooth'"
18
- * (isAtBottomChange)="onBottomChange($event)">
19
- * <!-- Content -->
20
- * </div>
21
- * ```
22
- */
23
- export class StickToBottom {
24
- enabled = input(true);
25
- threshold = input(10);
26
- initialBehavior = input("smooth");
27
- resizeBehavior = input("smooth");
28
- debounceMs = input(100);
29
- isAtBottomChange = output();
30
- scrollToBottomRequested = output();
31
- elementRef = inject(ElementRef);
32
- scrollService = inject(ScrollPosition);
33
- resizeService = inject(ResizeObserverService);
34
- destroy$ = new Subject();
35
- contentElement;
36
- wasAtBottom = true;
37
- hasInitialized = false;
38
- userHasScrolled = false;
39
- ngOnInit() {
40
- // Setup will happen in ngAfterViewInit
41
- }
42
- ngAfterViewInit() {
43
- const element = this.elementRef.nativeElement;
44
- // Find or create content wrapper
45
- this.contentElement = element.querySelector("[data-stick-to-bottom-content]");
46
- if (!this.contentElement) {
47
- this.contentElement = element;
48
- }
49
- this.setupScrollMonitoring();
50
- this.setupResizeMonitoring();
51
- this.setupContentMutationObserver();
52
- // Initial scroll to bottom if enabled
53
- setTimeout(() => {
54
- this.hasInitialized = true;
55
- if (this.enabled()) {
56
- this.scrollToBottom(this.initialBehavior());
57
- }
58
- }, 0);
59
- }
60
- setupScrollMonitoring() {
61
- if (!this.enabled())
62
- return;
63
- const element = this.elementRef.nativeElement;
64
- // Monitor scroll position
65
- this.scrollService
66
- .monitorScrollPosition(element, this.threshold())
67
- .pipe(takeUntil(this.destroy$), debounceTime(this.debounceMs()), distinctUntilChanged((a, b) => a.isAtBottom === b.isAtBottom))
68
- .subscribe((state) => {
69
- const wasAtBottom = this.wasAtBottom;
70
- this.wasAtBottom = state.isAtBottom;
71
- // Detect user scroll
72
- if (!state.isAtBottom && wasAtBottom && this.hasInitialized) {
73
- this.userHasScrolled = true;
74
- }
75
- else if (state.isAtBottom) {
76
- this.userHasScrolled = false;
77
- }
78
- // Emit change
79
- this.isAtBottomChange.emit(state.isAtBottom);
80
- });
81
- }
82
- setupResizeMonitoring() {
83
- if (!this.enabled() || !this.contentElement)
84
- return;
85
- // Monitor content resize
86
- this.resizeService
87
- .observeElement(this.contentElement, 0, 250)
88
- .pipe(takeUntil(this.destroy$), filter(() => this.enabled() && !this.userHasScrolled))
89
- .subscribe((state) => {
90
- // Auto-scroll on resize if we were at bottom
91
- if (this.wasAtBottom && !state.isResizing) {
92
- this.scrollToBottom(this.resizeBehavior());
93
- }
94
- });
95
- // Monitor container resize
96
- const element = this.elementRef.nativeElement;
97
- this.resizeService
98
- .observeElement(element, 0, 250)
99
- .pipe(takeUntil(this.destroy$), filter(() => this.enabled() && !this.userHasScrolled && this.wasAtBottom))
100
- .subscribe(() => {
101
- // Adjust scroll on container resize
102
- this.scrollToBottom(this.resizeBehavior());
103
- });
104
- }
105
- setupContentMutationObserver() {
106
- if (!this.enabled() || !this.contentElement)
107
- return;
108
- const mutationObserver = new MutationObserver(() => {
109
- if (this.enabled() && this.wasAtBottom && !this.userHasScrolled) {
110
- // Content changed, scroll to bottom if we were there
111
- requestAnimationFrame(() => {
112
- this.scrollToBottom(this.resizeBehavior());
113
- });
114
- }
115
- });
116
- mutationObserver.observe(this.contentElement, {
117
- childList: true,
118
- subtree: true,
119
- characterData: true,
120
- });
121
- // Cleanup on destroy
122
- this.destroy$.subscribe(() => {
123
- mutationObserver.disconnect();
124
- });
125
- }
126
- /**
127
- * Public method to scroll to bottom
128
- * Can be called from parent component
129
- */
130
- scrollToBottom(behavior = "smooth") {
131
- const element = this.elementRef.nativeElement;
132
- const smooth = behavior === "smooth";
133
- this.scrollService.scrollToBottom(element, smooth);
134
- this.userHasScrolled = false;
135
- this.scrollToBottomRequested.emit();
136
- }
137
- /**
138
- * Check if currently at bottom
139
- */
140
- isAtBottom() {
141
- return this.scrollService.isAtBottom(this.elementRef.nativeElement, this.threshold());
142
- }
143
- /**
144
- * Get current scroll state
145
- */
146
- getScrollState() {
147
- const element = this.elementRef.nativeElement;
148
- return {
149
- scrollTop: element.scrollTop,
150
- scrollHeight: element.scrollHeight,
151
- clientHeight: element.clientHeight,
152
- isAtBottom: this.isAtBottom(),
153
- };
154
- }
155
- ngOnDestroy() {
156
- this.destroy$.next();
157
- this.destroy$.complete();
158
- }
159
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StickToBottom, deps: [], target: i0.ɵɵFactoryTarget.Directive });
160
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: StickToBottom, isStandalone: true, selector: "[copilotStickToBottom]", inputs: { enabled: { classPropertyName: "enabled", publicName: "enabled", isSignal: true, isRequired: false, transformFunction: null }, threshold: { classPropertyName: "threshold", publicName: "threshold", isSignal: true, isRequired: false, transformFunction: null }, initialBehavior: { classPropertyName: "initialBehavior", publicName: "initialBehavior", isSignal: true, isRequired: false, transformFunction: null }, resizeBehavior: { classPropertyName: "resizeBehavior", publicName: "resizeBehavior", isSignal: true, isRequired: false, transformFunction: null }, debounceMs: { classPropertyName: "debounceMs", publicName: "debounceMs", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isAtBottomChange: "isAtBottomChange", scrollToBottomRequested: "scrollToBottomRequested" }, providers: [ScrollPosition, ResizeObserverService], ngImport: i0 });
161
- }
162
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StickToBottom, decorators: [{
163
- type: Directive,
164
- args: [{
165
- standalone: true,
166
- selector: "[copilotStickToBottom]",
167
- providers: [ScrollPosition, ResizeObserverService],
168
- }]
169
- }] });
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RpY2stdG8tYm90dG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9kaXJlY3RpdmVzL3N0aWNrLXRvLWJvdHRvbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFJVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sb0JBQW9CLEdBQ3JCLE1BQU0sZ0JBQWdCLENBQUM7O0FBSXhCOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQU1ILE1BQU0sT0FBTyxhQUFhO0lBQ3hCLE9BQU8sR0FBRyxLQUFLLENBQVUsSUFBSSxDQUFDLENBQUM7SUFDL0IsU0FBUyxHQUFHLEtBQUssQ0FBUyxFQUFFLENBQUMsQ0FBQztJQUM5QixlQUFlLEdBQUcsS0FBSyxDQUFpQixRQUFRLENBQUMsQ0FBQztJQUNsRCxjQUFjLEdBQUcsS0FBSyxDQUFpQixRQUFRLENBQUMsQ0FBQztJQUNqRCxVQUFVLEdBQUcsS0FBSyxDQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRWhDLGdCQUFnQixHQUFHLE1BQU0sRUFBVyxDQUFDO0lBQ3JDLHVCQUF1QixHQUFHLE1BQU0sRUFBUSxDQUFDO0lBRWpDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDaEMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN2QyxhQUFhLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFFOUMsUUFBUSxHQUFHLElBQUksT0FBTyxF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WSxFQUFFLE9BQU8sQ0FBQyxZQUFZO1lBQ2xDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1NBQzlCLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO3dHQTdLVSxhQUFhOzRGQUFiLGFBQWEsMDJCQUZiLENBQUMsY0FBYyxFQUFFLHFCQUFxQixDQUFDOzs0RkFFdkMsYUFBYTtrQkFMekIsU0FBUzttQkFBQztvQkFDVCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsU0FBUyxFQUFFLENBQUMsY0FBYyxFQUFFLHFCQUFxQixDQUFDO2lCQUNuRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIEFmdGVyVmlld0luaXQsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFNjcm9sbFBvc2l0aW9uIH0gZnJvbSBcIi4uL3Njcm9sbC1wb3NpdGlvblwiO1xuaW1wb3J0IHsgUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL3Jlc2l6ZS1vYnNlcnZlclwiO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge1xuICB0YWtlVW50aWwsXG4gIGRlYm91bmNlVGltZSxcbiAgZmlsdGVyLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbn0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5cbmV4cG9ydCB0eXBlIFNjcm9sbEJlaGF2aW9yID0gXCJzbW9vdGhcIiB8IFwiaW5zdGFudFwiIHwgXCJhdXRvXCI7XG5cbi8qKlxuICogRGlyZWN0aXZlIGZvciBpbXBsZW1lbnRpbmcgc3RpY2stdG8tYm90dG9tIHNjcm9sbCBiZWhhdmlvclxuICogU2ltaWxhciB0byB0aGUgUmVhY3QgdXNlLXN0aWNrLXRvLWJvdHRvbSBsaWJyYXJ5XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxkaXYgY29waWxvdFN0aWNrVG9Cb3R0b21cbiAqICAgICAgW2VuYWJsZWRdPVwidHJ1ZVwiXG4gKiAgICAgIFt0aHJlc2hvbGRdPVwiMTBcIlxuICogICAgICBbaW5pdGlhbEJlaGF2aW9yXT1cIidzbW9vdGgnXCJcbiAqICAgICAgW3Jlc2l6ZUJlaGF2aW9yXT1cIidzbW9vdGgnXCJcbiAqICAgICAgKGlzQXRCb3R0b21DaGFuZ2UpPVwib25Cb3R0b21DaGFuZ2UoJGV2ZW50KVwiPlxuICogICA8IS0tIENvbnRlbnQgLS0+XG4gKiA8L2Rpdj5cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6IFwiW2NvcGlsb3RTdGlja1RvQm90dG9tXVwiLFxuICBwcm92aWRlcnM6IFtTY3JvbGxQb3NpdGlvbiwgUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgU3RpY2tUb0JvdHRvbSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgZW5hYmxlZCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICB0aHJlc2hvbGQgPSBpbnB1dDxudW1iZXI+KDEwKTtcbiAgaW5pdGlhbEJlaGF2aW9yID0gaW5wdXQ8U2Nyb2xsQmVoYXZpb3I+KFwic21vb3RoXCIpO1xuICByZXNpemVCZWhhdmlvciA9IGlucHV0PFNjcm9sbEJlaGF2aW9yPihcInNtb290aFwiKTtcbiAgZGVib3VuY2VNcyA9IGlucHV0PG51bWJlcj4oMTAwKTtcblxuICBpc0F0Qm90dG9tQ2hhbmdlID0gb3V0cHV0PGJvb2xlYW4+KCk7XG4gIHNjcm9sbFRvQm90dG9tUmVxdWVzdGVkID0gb3V0cHV0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHNjcm9sbFNlcnZpY2UgPSBpbmplY3QoU2Nyb2xsUG9zaXRpb24pO1xuICBwcml2YXRlIHJlc2l6ZVNlcnZpY2UgPSBpbmplY3QoUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlKTtcblxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBjb250ZW50RWxlbWVudD86IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIHdhc0F0Qm90dG9tID0gdHJ1ZTtcbiAgcHJpdmF0ZSBoYXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICBwcml2YXRlIHVzZXJIYXNTY3JvbGxlZCA9IGZhbHNlO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFNldHVwIHdpbGwgaGFwcGVuIGluIG5nQWZ0ZXJWaWV3SW5pdFxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcblxuICAgIC8vIEZpbmQgb3IgY3JlYXRlIGNvbnRlbnQgd3JhcHBlclxuICAgIHRoaXMuY29udGVudEVsZW1lbnQgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBcIltkYXRhLXN0aWNrLXRvLWJvdHRvbS1jb250ZW50XVwiLFxuICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKCF0aGlzLmNvbnRlbnRFbGVtZW50KSB7XG4gICAgICB0aGlzLmNvbnRlbnRFbGVtZW50ID0gZWxlbWVudDtcbiAgICB9XG5cbiAgICB0aGlzLnNldHVwU2Nyb2xsTW9uaXRvcmluZygpO1xuICAgIHRoaXMuc2V0dXBSZXNpemVNb25pdG9yaW5nKCk7XG4gICAgdGhpcy5zZXR1cENvbnRlbnRNdXRhdGlvbk9ic2VydmVyKCk7XG5cbiAgICAvLyBJbml0aWFsIHNjcm9sbCB0byBib3R0b20gaWYgZW5hYmxlZFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5oYXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgICBpZiAodGhpcy5lbmFibGVkKCkpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSh0aGlzLmluaXRpYWxCZWhhdmlvcigpKTtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBTY3JvbGxNb25pdG9yaW5nKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lbmFibGVkKCkpIHJldHVybjtcblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgIC8vIE1vbml0b3Igc2Nyb2xsIHBvc2l0aW9uXG4gICAgdGhpcy5zY3JvbGxTZXJ2aWNlXG4gICAgICAubW9uaXRvclNjcm9sbFBvc2l0aW9uKGVsZW1lbnQsIHRoaXMudGhyZXNob2xkKCkpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZU1zKCkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gYS5pc0F0Qm90dG9tID09PSBiLmlzQXRCb3R0b20pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoc3RhdGUpID0+IHtcbiAgICAgICAgY29uc3Qgd2FzQXRCb3R0b20gPSB0aGlzLndhc0F0Qm90dG9tO1xuICAgICAgICB0aGlzLndhc0F0Qm90dG9tID0gc3RhdGUuaXNBdEJvdHRvbTtcblxuICAgICAgICAvLyBEZXRlY3QgdXNlciBzY3JvbGxcbiAgICAgICAgaWYgKCFzdGF0ZS5pc0F0Qm90dG9tICYmIHdhc0F0Qm90dG9tICYmIHRoaXMuaGFzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICB0aGlzLnVzZXJIYXNTY3JvbGxlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuaXNBdEJvdHRvbSkge1xuICAgICAgICAgIHRoaXMudXNlckhhc1Njcm9sbGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFbWl0IGNoYW5nZVxuICAgICAgICB0aGlzLmlzQXRCb3R0b21DaGFuZ2UuZW1pdChzdGF0ZS5pc0F0Qm90dG9tKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFJlc2l6ZU1vbml0b3JpbmcoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQoKSB8fCAhdGhpcy5jb250ZW50RWxlbWVudCkgcmV0dXJuO1xuXG4gICAgLy8gTW9uaXRvciBjb250ZW50IHJlc2l6ZVxuICAgIHRoaXMucmVzaXplU2VydmljZVxuICAgICAgLm9ic2VydmVFbGVtZW50KHRoaXMuY29udGVudEVsZW1lbnQsIDAsIDI1MClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmVuYWJsZWQoKSAmJiAhdGhpcy51c2VySGFzU2Nyb2xsZWQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoc3RhdGUpID0+IHtcbiAgICAgICAgLy8gQXV0by1zY3JvbGwgb24gcmVzaXplIGlmIHdlIHdlcmUgYXQgYm90dG9tXG4gICAgICAgIGlmICh0aGlzLndhc0F0Qm90dG9tICYmICFzdGF0ZS5pc1Jlc2l6aW5nKSB7XG4gICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSh0aGlzLnJlc2l6ZUJlaGF2aW9yKCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIC8vIE1vbml0b3IgY29udGFpbmVyIHJlc2l6ZVxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB0aGlzLnJlc2l6ZVNlcnZpY2VcbiAgICAgIC5vYnNlcnZlRWxlbWVudChlbGVtZW50LCAwLCAyNTApXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgKCkgPT4gdGhpcy5lbmFibGVkKCkgJiYgIXRoaXMudXNlckhhc1Njcm9sbGVkICYmIHRoaXMud2FzQXRCb3R0b20sXG4gICAgICAgICksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgLy8gQWRqdXN0IHNjcm9sbCBvbiBjb250YWluZXIgcmVzaXplXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20odGhpcy5yZXNpemVCZWhhdmlvcigpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cENvbnRlbnRNdXRhdGlvbk9ic2VydmVyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lbmFibGVkKCkgfHwgIXRoaXMuY29udGVudEVsZW1lbnQpIHJldHVybjtcblxuICAgIGNvbnN0IG11dGF0aW9uT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5lbmFibGVkKCkgJiYgdGhpcy53YXNBdEJvdHRvbSAmJiAhdGhpcy51c2VySGFzU2Nyb2xsZWQpIHtcbiAgICAgICAgLy8gQ29udGVudCBjaGFuZ2VkLCBzY3JvbGwgdG8gYm90dG9tIGlmIHdlIHdlcmUgdGhlcmVcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKHRoaXMucmVzaXplQmVoYXZpb3IoKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbXV0YXRpb25PYnNlcnZlci5vYnNlcnZlKHRoaXMuY29udGVudEVsZW1lbnQsIHtcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWUsXG4gICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xlYW51cCBvbiBkZXN0cm95XG4gICAgdGhpcy5kZXN0cm95JC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgbXV0YXRpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUHVibGljIG1ldGhvZCB0byBzY3JvbGwgdG8gYm90dG9tXG4gICAqIENhbiBiZSBjYWxsZWQgZnJvbSBwYXJlbnQgY29tcG9uZW50XG4gICAqL1xuICBwdWJsaWMgc2Nyb2xsVG9Cb3R0b20oYmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yID0gXCJzbW9vdGhcIik6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBzbW9vdGggPSBiZWhhdmlvciA9PT0gXCJzbW9vdGhcIjtcblxuICAgIHRoaXMuc2Nyb2xsU2VydmljZS5zY3JvbGxUb0JvdHRvbShlbGVtZW50LCBzbW9vdGgpO1xuICAgIHRoaXMudXNlckhhc1Njcm9sbGVkID0gZmFsc2U7XG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbVJlcXVlc3RlZC5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgY3VycmVudGx5IGF0IGJvdHRvbVxuICAgKi9cbiAgcHVibGljIGlzQXRCb3R0b20oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2Nyb2xsU2VydmljZS5pc0F0Qm90dG9tKFxuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICB0aGlzLnRocmVzaG9sZCgpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgc2Nyb2xsIHN0YXRlXG4gICAqL1xuICBwdWJsaWMgZ2V0U2Nyb2xsU3RhdGUoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIHJldHVybiB7XG4gICAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsVG9wLFxuICAgICAgc2Nyb2xsSGVpZ2h0OiBlbGVtZW50LnNjcm9sbEhlaWdodCxcbiAgICAgIGNsaWVudEhlaWdodDogZWxlbWVudC5jbGllbnRIZWlnaHQsXG4gICAgICBpc0F0Qm90dG9tOiB0aGlzLmlzQXRCb3R0b20oKSxcbiAgICB9O1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=
@@ -1,217 +0,0 @@
1
- import { Directive, Input, ElementRef, HostListener, inject, ViewContainerRef, } from "@angular/core";
2
- import { Overlay, OverlayPositionBuilder, } from "@angular/cdk/overlay";
3
- import { ComponentPortal } from "@angular/cdk/portal";
4
- import { Component, ChangeDetectionStrategy, } from "@angular/core";
5
- import * as i0 from "@angular/core";
6
- export class TooltipContent {
7
- cdr;
8
- text = "";
9
- _position = "below";
10
- get position() {
11
- return this._position;
12
- }
13
- set position(value) {
14
- this._position = value;
15
- this.cdr.markForCheck();
16
- }
17
- constructor(cdr) {
18
- this.cdr = cdr;
19
- }
20
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TooltipContent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
21
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TooltipContent, isStandalone: true, selector: "copilot-tooltip-content", ngImport: i0, template: `
22
- <div class="copilot-tooltip-wrapper" [attr.data-position]="position">
23
- <div class="copilot-tooltip">
24
- {{ text }}
25
- </div>
26
- <div class="copilot-tooltip-arrow"></div>
27
- </div>
28
- `, isInline: true, styles: [".copilot-tooltip-wrapper{position:relative;display:inline-block;animation:fadeIn .15s ease-in-out}.copilot-tooltip{background-color:#1a1a1a;color:#fff;padding:6px 10px;border-radius:6px;font-size:12px;font-weight:500;white-space:nowrap;max-width:200px;box-shadow:0 2px 8px #00000026}.copilot-tooltip-arrow{position:absolute;width:0;height:0;border-style:solid}.copilot-tooltip-wrapper[data-position=below] .copilot-tooltip-arrow{top:-4px;left:50%;transform:translate(-50%);border-width:0 4px 4px 4px;border-color:transparent transparent #1a1a1a transparent}.copilot-tooltip-wrapper[data-position=above] .copilot-tooltip-arrow{bottom:-4px;left:50%;transform:translate(-50%);border-width:4px 4px 0 4px;border-color:#1a1a1a transparent transparent transparent}.copilot-tooltip-wrapper[data-position=left] .copilot-tooltip-arrow{right:-4px;top:50%;transform:translateY(-50%);border-width:4px 0 4px 4px;border-color:transparent transparent transparent #1a1a1a}.copilot-tooltip-wrapper[data-position=right] .copilot-tooltip-arrow{left:-4px;top:50%;transform:translateY(-50%);border-width:4px 4px 4px 0;border-color:transparent #1a1a1a transparent transparent}@keyframes fadeIn{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:translateY(0)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
29
- }
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TooltipContent, decorators: [{
31
- type: Component,
32
- args: [{ selector: "copilot-tooltip-content", standalone: true, template: `
33
- <div class="copilot-tooltip-wrapper" [attr.data-position]="position">
34
- <div class="copilot-tooltip">
35
- {{ text }}
36
- </div>
37
- <div class="copilot-tooltip-arrow"></div>
38
- </div>
39
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".copilot-tooltip-wrapper{position:relative;display:inline-block;animation:fadeIn .15s ease-in-out}.copilot-tooltip{background-color:#1a1a1a;color:#fff;padding:6px 10px;border-radius:6px;font-size:12px;font-weight:500;white-space:nowrap;max-width:200px;box-shadow:0 2px 8px #00000026}.copilot-tooltip-arrow{position:absolute;width:0;height:0;border-style:solid}.copilot-tooltip-wrapper[data-position=below] .copilot-tooltip-arrow{top:-4px;left:50%;transform:translate(-50%);border-width:0 4px 4px 4px;border-color:transparent transparent #1a1a1a transparent}.copilot-tooltip-wrapper[data-position=above] .copilot-tooltip-arrow{bottom:-4px;left:50%;transform:translate(-50%);border-width:4px 4px 0 4px;border-color:#1a1a1a transparent transparent transparent}.copilot-tooltip-wrapper[data-position=left] .copilot-tooltip-arrow{right:-4px;top:50%;transform:translateY(-50%);border-width:4px 0 4px 4px;border-color:transparent transparent transparent #1a1a1a}.copilot-tooltip-wrapper[data-position=right] .copilot-tooltip-arrow{left:-4px;top:50%;transform:translateY(-50%);border-width:4px 4px 4px 0;border-color:transparent #1a1a1a transparent transparent}@keyframes fadeIn{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:translateY(0)}}\n"] }]
40
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }] });
41
- export class CopilotTooltip {
42
- tooltipText = "";
43
- tooltipPosition = "below";
44
- tooltipDelay = 500; // milliseconds
45
- overlay = inject(Overlay);
46
- overlayPositionBuilder = inject(OverlayPositionBuilder);
47
- elementRef = inject(ElementRef);
48
- viewContainerRef = inject(ViewContainerRef);
49
- overlayRef;
50
- tooltipTimeout;
51
- originalTitle;
52
- onMouseEnter() {
53
- if (!this.tooltipText)
54
- return;
55
- // Store and remove native title to prevent OS tooltip
56
- const element = this.elementRef.nativeElement;
57
- if (element.hasAttribute("title")) {
58
- this.originalTitle = element.getAttribute("title");
59
- element.removeAttribute("title");
60
- }
61
- // Clear any existing timeout
62
- if (this.tooltipTimeout) {
63
- clearTimeout(this.tooltipTimeout);
64
- }
65
- // Set timeout to show tooltip after delay
66
- this.tooltipTimeout = window.setTimeout(() => {
67
- this.show();
68
- }, this.tooltipDelay);
69
- }
70
- onMouseLeave() {
71
- // Clear timeout if mouse leaves before tooltip shows
72
- if (this.tooltipTimeout) {
73
- clearTimeout(this.tooltipTimeout);
74
- this.tooltipTimeout = undefined;
75
- }
76
- // Restore original title if it existed
77
- if (this.originalTitle !== undefined) {
78
- this.elementRef.nativeElement.setAttribute("title", this.originalTitle);
79
- this.originalTitle = undefined;
80
- }
81
- // Hide tooltip if it's showing
82
- this.hide();
83
- }
84
- show() {
85
- if (this.overlayRef) {
86
- return;
87
- }
88
- // Create overlay
89
- const positionStrategy = this.overlayPositionBuilder
90
- .flexibleConnectedTo(this.elementRef)
91
- .withPositions(this.getPositions())
92
- .withPush(false);
93
- this.overlayRef = this.overlay.create({
94
- positionStrategy,
95
- scrollStrategy: this.overlay.scrollStrategies.close(),
96
- hasBackdrop: false,
97
- });
98
- // Create component portal and attach
99
- const portal = new ComponentPortal(TooltipContent, this.viewContainerRef);
100
- const componentRef = this.overlayRef.attach(portal);
101
- componentRef.instance.text = this.tooltipText;
102
- // Detect actual position after overlay is positioned
103
- setTimeout(() => {
104
- if (this.overlayRef && this.elementRef.nativeElement) {
105
- const tooltipRect = this.overlayRef.overlayElement.getBoundingClientRect();
106
- const elementRect = this.elementRef.nativeElement.getBoundingClientRect();
107
- let actualPosition = "below";
108
- // Determine actual position based on relative positions
109
- if (tooltipRect.bottom <= elementRect.top) {
110
- actualPosition = "above";
111
- }
112
- else if (tooltipRect.top >= elementRect.bottom) {
113
- actualPosition = "below";
114
- }
115
- else if (tooltipRect.right <= elementRect.left) {
116
- actualPosition = "left";
117
- }
118
- else if (tooltipRect.left >= elementRect.right) {
119
- actualPosition = "right";
120
- }
121
- componentRef.instance.position = actualPosition;
122
- }
123
- }, 0);
124
- }
125
- hide() {
126
- if (this.overlayRef) {
127
- this.overlayRef.dispose();
128
- this.overlayRef = undefined;
129
- }
130
- }
131
- getPositions() {
132
- const positions = {
133
- above: [
134
- {
135
- originX: "center",
136
- originY: "top",
137
- overlayX: "center",
138
- overlayY: "bottom",
139
- offsetY: -12,
140
- },
141
- ],
142
- below: [
143
- {
144
- originX: "center",
145
- originY: "bottom",
146
- overlayX: "center",
147
- overlayY: "top",
148
- offsetY: 12,
149
- },
150
- ],
151
- left: [
152
- {
153
- originX: "start",
154
- originY: "center",
155
- overlayX: "end",
156
- overlayY: "center",
157
- offsetX: -12,
158
- },
159
- ],
160
- right: [
161
- {
162
- originX: "end",
163
- originY: "center",
164
- overlayX: "start",
165
- overlayY: "center",
166
- offsetX: 12,
167
- },
168
- ],
169
- };
170
- // Prefer below position, but use above as fallback
171
- const primary = positions[this.tooltipPosition] || positions.below;
172
- // For below position, add above as first fallback
173
- const fallbacks = this.tooltipPosition === "below"
174
- ? [
175
- ...(positions.above || []),
176
- ...(positions.left || []),
177
- ...(positions.right || []),
178
- ]
179
- : Object.values(positions)
180
- .filter((p) => p !== primary)
181
- .flat();
182
- return [...(primary || []), ...fallbacks];
183
- }
184
- ngOnDestroy() {
185
- if (this.tooltipTimeout) {
186
- clearTimeout(this.tooltipTimeout);
187
- }
188
- // Restore original title if it existed
189
- if (this.originalTitle !== undefined) {
190
- this.elementRef.nativeElement.setAttribute("title", this.originalTitle);
191
- }
192
- this.hide();
193
- }
194
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CopilotTooltip, deps: [], target: i0.ɵɵFactoryTarget.Directive });
195
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: CopilotTooltip, isStandalone: true, selector: "[copilotTooltip]", inputs: { tooltipText: ["copilotTooltip", "tooltipText"], tooltipPosition: "tooltipPosition", tooltipDelay: "tooltipDelay" }, host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" } }, ngImport: i0 });
196
- }
197
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CopilotTooltip, decorators: [{
198
- type: Directive,
199
- args: [{
200
- selector: "[copilotTooltip]",
201
- standalone: true,
202
- }]
203
- }], propDecorators: { tooltipText: [{
204
- type: Input,
205
- args: ["copilotTooltip"]
206
- }], tooltipPosition: [{
207
- type: Input
208
- }], tooltipDelay: [{
209
- type: Input
210
- }], onMouseEnter: [{
211
- type: HostListener,
212
- args: ["mouseenter"]
213
- }], onMouseLeave: [{
214
- type: HostListener,
215
- args: ["mouseleave"]
216
- }] } });
217
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZGlyZWN0aXZlcy90b29sdGlwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFVBQVUsRUFDVixZQUFZLEVBRVosTUFBTSxFQUNOLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsT0FBTyxFQUVQLHNCQUFzQixHQUV2QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixHQUV4QixNQUFNLGVBQWUsQ0FBQzs7QUEwRnZCLE1BQU0sT0FBTyxjQUFjO0lBYUw7SUFacEIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNGLFNBQVMsR0FBeUMsT0FBTyxDQUFDO0lBRWxFLElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsS0FBMkM7UUFDdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7SUFBRyxDQUFDO3dHQWJuQyxjQUFjOzRGQUFkLGNBQWMsbUZBckZmOzs7Ozs7O0dBT1Q7OzRGQThFVSxjQUFjO2tCQXhGMUIsU0FBUzsrQkFDRSx5QkFBeUIsY0FDdkIsSUFBSSxZQUNOOzs7Ozs7O0dBT1QsbUJBNEVnQix1QkFBdUIsQ0FBQyxNQUFNOztBQXNCakQsTUFBTSxPQUFPLGNBQWM7SUFDQSxXQUFXLEdBQUcsRUFBRSxDQUFDO0lBQ2pDLGVBQWUsR0FBeUMsT0FBTyxDQUFDO0lBQ2hFLFlBQVksR0FB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QyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztpQkFDckIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDO2lCQUM1QixJQUFJLEVBQUUsQ0FBQztRQUVoQixPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsdUNBQXVDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQzt3R0EvS1UsY0FBYzs0RkFBZCxjQUFjOzs0RkFBZCxjQUFjO2tCQUoxQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs4QkFFMEIsV0FBVztzQkFBbkMsS0FBSzt1QkFBQyxnQkFBZ0I7Z0JBQ2QsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQVlOLFlBQVk7c0JBRFgsWUFBWTt1QkFBQyxZQUFZO2dCQXVCMUIsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIE9uRGVzdHJveSxcbiAgaW5qZWN0LFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgT3ZlcmxheSxcbiAgT3ZlcmxheVJlZixcbiAgT3ZlcmxheVBvc2l0aW9uQnVpbGRlcixcbiAgQ29ubmVjdGVkUG9zaXRpb24sXG59IGZyb20gXCJAYW5ndWxhci9jZGsvb3ZlcmxheVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9wb3J0YWxcIjtcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiY29waWxvdC10b29sdGlwLWNvbnRlbnRcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiY29waWxvdC10b29sdGlwLXdyYXBwZXJcIiBbYXR0ci5kYXRhLXBvc2l0aW9uXT1cInBvc2l0aW9uXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29waWxvdC10b29sdGlwXCI+XG4gICAgICAgIHt7IHRleHQgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvcGlsb3QtdG9vbHRpcC1hcnJvd1wiPjwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAuY29waWxvdC10b29sdGlwLXdyYXBwZXIge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgYW5pbWF0aW9uOiBmYWRlSW4gMC4xNXMgZWFzZS1pbi1vdXQ7XG4gICAgICB9XG5cbiAgICAgIC5jb3BpbG90LXRvb2x0aXAge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWExYTFhO1xuICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgIHBhZGRpbmc6IDZweCAxMHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgbWF4LXdpZHRoOiAyMDBweDtcbiAgICAgICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gICAgICB9XG5cbiAgICAgIC5jb3BpbG90LXRvb2x0aXAtYXJyb3cge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHdpZHRoOiAwO1xuICAgICAgICBoZWlnaHQ6IDA7XG4gICAgICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgICB9XG5cbiAgICAgIC8qIEFycm93IGZvciB0b29sdGlwIGJlbG93IGVsZW1lbnQgKGFycm93IHBvaW50cyB1cCB0byB0b29sdGlwKSAqL1xuICAgICAgLmNvcGlsb3QtdG9vbHRpcC13cmFwcGVyW2RhdGEtcG9zaXRpb249XCJiZWxvd1wiXSAuY29waWxvdC10b29sdGlwLWFycm93IHtcbiAgICAgICAgdG9wOiAtNHB4O1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgICAgICAgYm9yZGVyLXdpZHRoOiAwIDRweCA0cHggNHB4O1xuICAgICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50ICMxYTFhMWEgdHJhbnNwYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgIC8qIEFycm93IGZvciB0b29sdGlwIGFib3ZlIGVsZW1lbnQgKGFycm93IHBvaW50cyBkb3duIHRvIGVsZW1lbnQpICovXG4gICAgICAuY29waWxvdC10b29sdGlwLXdyYXBwZXJbZGF0YS1wb3NpdGlvbj1cImFib3ZlXCJdIC5jb3BpbG90LXRvb2x0aXAtYXJyb3cge1xuICAgICAgICBib3R0b206IC00cHg7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgICBib3JkZXItd2lkdGg6IDRweCA0cHggMCA0cHg7XG4gICAgICAgIGJvcmRlci1jb2xvcjogIzFhMWExYSB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDtcbiAgICAgIH1cblxuICAgICAgLyogQXJyb3cgZm9yIHRvb2x0aXAgdG8gdGhlIGxlZnQgKi9cbiAgICAgIC5jb3BpbG90LXRvb2x0aXAtd3JhcHBlcltkYXRhLXBvc2l0aW9uPVwibGVmdFwiXSAuY29waWxvdC10b29sdGlwLWFycm93IHtcbiAgICAgICAgcmlnaHQ6IC00cHg7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgIGJvcmRlci13aWR0aDogNHB4IDAgNHB4IDRweDtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCB0cmFuc3BhcmVudCAjMWExYTFhO1xuICAgICAgfVxuXG4gICAgICAvKiBBcnJvdyBmb3IgdG9vbHRpcCB0byB0aGUgcmlnaHQgKi9cbiAgICAgIC5jb3BpbG90LXRvb2x0aXAtd3JhcHBlcltkYXRhLXBvc2l0aW9uPVwicmlnaHRcIl0gLmNvcGlsb3QtdG9vbHRpcC1hcnJvdyB7XG4gICAgICAgIGxlZnQ6IC00cHg7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gICAgICAgIGJvcmRlci13aWR0aDogNHB4IDRweCA0cHggMDtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudCAjMWExYTFhIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIGZhZGVJbiB7XG4gICAgICAgIGZyb20ge1xuICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDJweCk7XG4gICAgICAgIH1cbiAgICAgICAgdG8ge1xuICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRvb2x0aXBDb250ZW50IHtcbiAgdGV4dCA9IFwiXCI7XG4gIHByaXZhdGUgX3Bvc2l0aW9uOiBcImFib3ZlXCIgfCBcImJlbG93XCIgfCBcImxlZnRcIiB8IFwicmlnaHRcIiA9IFwiYmVsb3dcIjtcblxuICBnZXQgcG9zaXRpb24oKTogXCJhYm92ZVwiIHwgXCJiZWxvd1wiIHwgXCJsZWZ0XCIgfCBcInJpZ2h0XCIge1xuICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbjtcbiAgfVxuXG4gIHNldCBwb3NpdGlvbih2YWx1ZTogXCJhYm92ZVwiIHwgXCJiZWxvd1wiIHwgXCJsZWZ0XCIgfCBcInJpZ2h0XCIpIHtcbiAgICB0aGlzLl9wb3NpdGlvbiA9IHZhbHVlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IFwiW2NvcGlsb3RUb29sdGlwXVwiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBDb3BpbG90VG9vbHRpcCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIEBJbnB1dChcImNvcGlsb3RUb29sdGlwXCIpIHRvb2x0aXBUZXh0ID0gXCJcIjtcbiAgQElucHV0KCkgdG9vbHRpcFBvc2l0aW9uOiBcImFib3ZlXCIgfCBcImJlbG93XCIgfCBcImxlZnRcIiB8IFwicmlnaHRcIiA9IFwiYmVsb3dcIjtcbiAgQElucHV0KCkgdG9vbHRpcERlbGF5ID0gNTAwOyAvLyBtaWxsaXNlY29uZHNcblxuICBwcml2YXRlIG92ZXJsYXkgPSBpbmplY3QoT3ZlcmxheSk7XG4gIHByaXZhdGUgb3ZlcmxheVBvc2l0aW9uQnVpbGRlciA9IGluamVjdChPdmVybGF5UG9zaXRpb25CdWlsZGVyKTtcbiAgcHJpdmF0ZSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG5cbiAgcHJpdmF0ZSBvdmVybGF5UmVmPzogT3ZlcmxheVJlZjtcbiAgcHJpdmF0ZSB0b29sdGlwVGltZW91dD86IG51bWJlcjtcbiAgcHJpdmF0ZSBvcmlnaW5hbFRpdGxlPzogc3RyaW5nO1xuXG4gIEBIb3N0TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIpXG4gIG9uTW91c2VFbnRlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudG9vbHRpcFRleHQpIHJldHVybjtcblxuICAgIC8vIFN0b3JlIGFuZCByZW1vdmUgbmF0aXZlIHRpdGxlIHRvIHByZXZlbnQgT1MgdG9vbHRpcFxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJ0aXRsZVwiKSkge1xuICAgICAgdGhpcy5vcmlnaW5hbFRpdGxlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiKTtcbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwidGl0bGVcIik7XG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgYW55IGV4aXN0aW5nIHRpbWVvdXRcbiAgICBpZiAodGhpcy50b29sdGlwVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudG9vbHRpcFRpbWVvdXQpO1xuICAgIH1cblxuICAgIC8vIFNldCB0aW1lb3V0IHRvIHNob3cgdG9vbHRpcCBhZnRlciBkZWxheVxuICAgIHRoaXMudG9vbHRpcFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNob3coKTtcbiAgICB9LCB0aGlzLnRvb2x0aXBEZWxheSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKFwibW91c2VsZWF2ZVwiKVxuICBvbk1vdXNlTGVhdmUoKTogdm9pZCB7XG4gICAgLy8gQ2xlYXIgdGltZW91dCBpZiBtb3VzZSBsZWF2ZXMgYmVmb3JlIHRvb2x0aXAgc2hvd3NcbiAgICBpZiAodGhpcy50b29sdGlwVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudG9vbHRpcFRpbWVvdXQpO1xuICAgICAgdGhpcy50b29sdGlwVGltZW91dCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBSZXN0b3JlIG9yaWdpbmFsIHRpdGxlIGlmIGl0IGV4aXN0ZWRcbiAgICBpZiAodGhpcy5vcmlnaW5hbFRpdGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZShcInRpdGxlXCIsIHRoaXMub3JpZ2luYWxUaXRsZSk7XG4gICAgICB0aGlzLm9yaWdpbmFsVGl0bGUgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gSGlkZSB0b29sdGlwIGlmIGl0J3Mgc2hvd2luZ1xuICAgIHRoaXMuaGlkZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgb3ZlcmxheVxuICAgIGNvbnN0IHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXlQb3NpdGlvbkJ1aWxkZXJcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuZWxlbWVudFJlZilcbiAgICAgIC53aXRoUG9zaXRpb25zKHRoaXMuZ2V0UG9zaXRpb25zKCkpXG4gICAgICAud2l0aFB1c2goZmFsc2UpO1xuXG4gICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XG4gICAgICBwb3NpdGlvblN0cmF0ZWd5LFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmNsb3NlKCksXG4gICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgY29tcG9uZW50IHBvcnRhbCBhbmQgYXR0YWNoXG4gICAgY29uc3QgcG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChUb29sdGlwQ29udGVudCwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnRleHQgPSB0aGlzLnRvb2x0aXBUZXh0O1xuXG4gICAgLy8gRGV0ZWN0IGFjdHVhbCBwb3NpdGlvbiBhZnRlciBvdmVybGF5IGlzIHBvc2l0aW9uZWRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm92ZXJsYXlSZWYgJiYgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgdG9vbHRpcFJlY3QgPVxuICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgZWxlbWVudFJlY3QgPVxuICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGxldCBhY3R1YWxQb3NpdGlvbjogXCJhYm92ZVwiIHwgXCJiZWxvd1wiIHwgXCJsZWZ0XCIgfCBcInJpZ2h0XCIgPSBcImJlbG93XCI7XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIGFjdHVhbCBwb3NpdGlvbiBiYXNlZCBvbiByZWxhdGl2ZSBwb3NpdGlvbnNcbiAgICAgICAgaWYgKHRvb2x0aXBSZWN0LmJvdHRvbSA8PSBlbGVtZW50UmVjdC50b3ApIHtcbiAgICAgICAgICBhY3R1YWxQb3NpdGlvbiA9IFwiYWJvdmVcIjtcbiAgICAgICAgfSBlbHNlIGlmICh0b29sdGlwUmVjdC50b3AgPj0gZWxlbWVudFJlY3QuYm90dG9tKSB7XG4gICAgICAgICAgYWN0dWFsUG9zaXRpb24gPSBcImJlbG93XCI7XG4gICAgICAgIH0gZWxzZSBpZiAodG9vbHRpcFJlY3QucmlnaHQgPD0gZWxlbWVudFJlY3QubGVmdCkge1xuICAgICAgICAgIGFjdHVhbFBvc2l0aW9uID0gXCJsZWZ0XCI7XG4gICAgICAgIH0gZWxzZSBpZiAodG9vbHRpcFJlY3QubGVmdCA+PSBlbGVtZW50UmVjdC5yaWdodCkge1xuICAgICAgICAgIGFjdHVhbFBvc2l0aW9uID0gXCJyaWdodFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnBvc2l0aW9uID0gYWN0dWFsUG9zaXRpb247XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcml2YXRlIGhpZGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xuICAgICAgdGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMub3ZlcmxheVJlZiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFBvc2l0aW9ucygpOiBDb25uZWN0ZWRQb3NpdGlvbltdIHtcbiAgICBjb25zdCBwb3NpdGlvbnM6IFJlY29yZDxzdHJpbmcsIENvbm5lY3RlZFBvc2l0aW9uW10+ID0ge1xuICAgICAgYWJvdmU6IFtcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXG4gICAgICAgICAgb3JpZ2luWTogXCJ0b3BcIixcbiAgICAgICAgICBvdmVybGF5WDogXCJjZW50ZXJcIixcbiAgICAgICAgICBvdmVybGF5WTogXCJib3R0b21cIixcbiAgICAgICAgICBvZmZzZXRZOiAtMTIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYmVsb3c6IFtcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXG4gICAgICAgICAgb3JpZ2luWTogXCJib3R0b21cIixcbiAgICAgICAgICBvdmVybGF5WDogXCJjZW50ZXJcIixcbiAgICAgICAgICBvdmVybGF5WTogXCJ0b3BcIixcbiAgICAgICAgICBvZmZzZXRZOiAxMixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBsZWZ0OiBbXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnaW5YOiBcInN0YXJ0XCIsXG4gICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcbiAgICAgICAgICBvdmVybGF5WDogXCJlbmRcIixcbiAgICAgICAgICBvdmVybGF5WTogXCJjZW50ZXJcIixcbiAgICAgICAgICBvZmZzZXRYOiAtMTIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgcmlnaHQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6IFwiZW5kXCIsXG4gICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcbiAgICAgICAgICBvdmVybGF5WDogXCJzdGFydFwiLFxuICAgICAgICAgIG92ZXJsYXlZOiBcImNlbnRlclwiLFxuICAgICAgICAgIG9mZnNldFg6IDEyLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgLy8gUHJlZmVyIGJlbG93IHBvc2l0aW9uLCBidXQgdXNlIGFib3ZlIGFzIGZhbGxiYWNrXG4gICAgY29uc3QgcHJpbWFyeSA9IHBvc2l0aW9uc1t0aGlzLnRvb2x0aXBQb3NpdGlvbl0gfHwgcG9zaXRpb25zLmJlbG93O1xuICAgIC8vIEZvciBiZWxvdyBwb3NpdGlvbiwgYWRkIGFib3ZlIGFzIGZpcnN0IGZhbGxiYWNrXG4gICAgY29uc3QgZmFsbGJhY2tzID1cbiAgICAgIHRoaXMudG9vbHRpcFBvc2l0aW9uID09PSBcImJlbG93XCJcbiAgICAgICAgPyBbXG4gICAgICAgICAgICAuLi4ocG9zaXRpb25zLmFib3ZlIHx8IFtdKSxcbiAgICAgICAgICAgIC4uLihwb3NpdGlvbnMubGVmdCB8fCBbXSksXG4gICAgICAgICAgICAuLi4ocG9zaXRpb25zLnJpZ2h0IHx8IFtdKSxcbiAgICAgICAgICBdXG4gICAgICAgIDogT2JqZWN0LnZhbHVlcyhwb3NpdGlvbnMpXG4gICAgICAgICAgICAuZmlsdGVyKChwKSA9PiBwICE9PSBwcmltYXJ5KVxuICAgICAgICAgICAgLmZsYXQoKTtcblxuICAgIHJldHVybiBbLi4uKHByaW1hcnkgfHwgW10pLCAuLi5mYWxsYmFja3NdO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudG9vbHRpcFRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRvb2x0aXBUaW1lb3V0KTtcbiAgICB9XG4gICAgLy8gUmVzdG9yZSBvcmlnaW5hbCB0aXRsZSBpZiBpdCBleGlzdGVkXG4gICAgaWYgKHRoaXMub3JpZ2luYWxUaXRsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiLCB0aGlzLm9yaWdpbmFsVGl0bGUpO1xuICAgIH1cbiAgICB0aGlzLmhpZGUoKTtcbiAgfVxufVxuIl19
@@ -1,19 +0,0 @@
1
- import { Injectable } from "@angular/core";
2
- import { filter, lastValueFrom, Subject, take } from "rxjs";
3
- import * as i0 from "@angular/core";
4
- export class HumanInTheLoop {
5
- results = new Subject();
6
- addResult(toolCallId, toolName, result) {
7
- this.results.next({ toolCallId, toolName, result });
8
- }
9
- onResult(toolCallId, toolName) {
10
- return lastValueFrom(this.results.pipe(filter((result) => result.toolCallId === toolCallId && result.toolName === toolName), take(1)));
11
- }
12
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HumanInTheLoop, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
13
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HumanInTheLoop, providedIn: "root" });
14
- }
15
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HumanInTheLoop, decorators: [{
16
- type: Injectable,
17
- args: [{ providedIn: "root" }]
18
- }] });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHVtYW4taW4tdGhlLWxvb3AuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2h1bWFuLWluLXRoZS1sb29wLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFHNUQsTUFBTSxPQUFPLGNBQWM7SUFDekIsT0FBTyxHQUFHLElBQUksT0FBTyxFQUlqQixDQUFDO0lBRUwsU0FBUyxDQUFDLFVBQWtCLEVBQUUsUUFBZ0IsRUFBRSxNQUFlO1FBQzdELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxRQUFRLENBQUMsVUFBa0IsRUFBRSxRQUFnQjtRQUMzQyxPQUFPLGFBQWEsQ0FDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ2YsTUFBTSxDQUNKLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDVCxNQUFNLENBQUMsVUFBVSxLQUFLLFVBQVUsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FDbkUsRUFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQ1IsQ0FDRixDQUFDO0lBQ0osQ0FBQzt3R0FyQlUsY0FBYzs0R0FBZCxjQUFjLGNBREQsTUFBTTs7NEZBQ25CLGNBQWM7a0JBRDFCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBmaWx0ZXIsIGxhc3RWYWx1ZUZyb20sIFN1YmplY3QsIHRha2UgfSBmcm9tIFwicnhqc1wiO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgSHVtYW5JblRoZUxvb3Age1xuICByZXN1bHRzID0gbmV3IFN1YmplY3Q8e1xuICAgIHRvb2xDYWxsSWQ6IHN0cmluZztcbiAgICB0b29sTmFtZTogc3RyaW5nO1xuICAgIHJlc3VsdDogdW5rbm93bjtcbiAgfT4oKTtcblxuICBhZGRSZXN1bHQodG9vbENhbGxJZDogc3RyaW5nLCB0b29sTmFtZTogc3RyaW5nLCByZXN1bHQ6IHVua25vd24pIHtcbiAgICB0aGlzLnJlc3VsdHMubmV4dCh7IHRvb2xDYWxsSWQsIHRvb2xOYW1lLCByZXN1bHQgfSk7XG4gIH1cblxuICBvblJlc3VsdCh0b29sQ2FsbElkOiBzdHJpbmcsIHRvb2xOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICByZXR1cm4gbGFzdFZhbHVlRnJvbShcbiAgICAgIHRoaXMucmVzdWx0cy5waXBlKFxuICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgKHJlc3VsdCkgPT5cbiAgICAgICAgICAgIHJlc3VsdC50b29sQ2FsbElkID09PSB0b29sQ2FsbElkICYmIHJlc3VsdC50b29sTmFtZSA9PT0gdG9vbE5hbWUsXG4gICAgICAgICksXG4gICAgICAgIHRha2UoMSksXG4gICAgICApLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==