@memberjunction/ng-ai-test-harness 2.55.0 → 2.56.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/agent-execution-monitor.component.d.ts +9 -0
- package/dist/lib/agent-execution-monitor.component.d.ts.map +1 -1
- package/dist/lib/agent-execution-monitor.component.js +68 -10
- package/dist/lib/agent-execution-monitor.component.js.map +1 -1
- package/dist/lib/agent-execution-node.component.d.ts +1 -0
- package/dist/lib/agent-execution-node.component.d.ts.map +1 -1
- package/dist/lib/agent-execution-node.component.js +88 -39
- package/dist/lib/agent-execution-node.component.js.map +1 -1
- package/dist/lib/ai-test-harness-dialog.service.d.ts +7 -14
- package/dist/lib/ai-test-harness-dialog.service.d.ts.map +1 -1
- package/dist/lib/ai-test-harness-dialog.service.js +21 -95
- package/dist/lib/ai-test-harness-dialog.service.js.map +1 -1
- package/dist/lib/ai-test-harness-window.component.d.ts +37 -0
- package/dist/lib/ai-test-harness-window.component.d.ts.map +1 -0
- package/dist/lib/ai-test-harness-window.component.js +171 -0
- package/dist/lib/ai-test-harness-window.component.js.map +1 -0
- package/dist/lib/ai-test-harness.component.d.ts +26 -1
- package/dist/lib/ai-test-harness.component.d.ts.map +1 -1
- package/dist/lib/ai-test-harness.component.js +299 -219
- package/dist/lib/ai-test-harness.component.js.map +1 -1
- package/dist/lib/test-harness-custom-window.component.d.ts +78 -0
- package/dist/lib/test-harness-custom-window.component.d.ts.map +1 -0
- package/dist/lib/test-harness-custom-window.component.js +528 -0
- package/dist/lib/test-harness-custom-window.component.js.map +1 -0
- package/dist/lib/test-harness-window-manager.service.d.ts +59 -0
- package/dist/lib/test-harness-window-manager.service.d.ts.map +1 -0
- package/dist/lib/test-harness-window-manager.service.js +163 -0
- package/dist/lib/test-harness-window-manager.service.js.map +1 -0
- package/dist/lib/test-harness-window.service.d.ts +73 -0
- package/dist/lib/test-harness-window.service.d.ts.map +1 -0
- package/dist/lib/test-harness-window.service.js +164 -0
- package/dist/lib/test-harness-window.service.js.map +1 -0
- package/dist/lib/window-dock.service.d.ts +32 -0
- package/dist/lib/window-dock.service.d.ts.map +1 -0
- package/dist/lib/window-dock.service.js +125 -0
- package/dist/lib/window-dock.service.js.map +1 -0
- package/dist/module.d.ts +19 -17
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +23 -4
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +6 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +6 -1
- package/dist/public-api.js.map +1 -1
- package/package.json +8 -8
- package/dist/lib/test-harness-dialog.service.d.ts +0 -151
- package/dist/lib/test-harness-dialog.service.d.ts.map +0 -1
- package/dist/lib/test-harness-dialog.service.js +0 -234
- package/dist/lib/test-harness-dialog.service.js.map +0 -1
|
@@ -0,0 +1,528 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
|
|
2
|
+
import { Metadata } from '@memberjunction/core';
|
|
3
|
+
import { AITestHarnessComponent } from './ai-test-harness.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@progress/kendo-angular-dialog";
|
|
6
|
+
import * as i2 from "@progress/kendo-angular-indicators";
|
|
7
|
+
import * as i3 from "./ai-test-harness.component";
|
|
8
|
+
const _c0 = ["kendoWindow"];
|
|
9
|
+
function TestHarnessCustomWindowComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
10
|
+
i0.ɵɵelement(0, "img", 3);
|
|
11
|
+
} if (rf & 2) {
|
|
12
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
13
|
+
i0.ɵɵproperty("src", ctx_r1.agent == null ? null : ctx_r1.agent.LogoURL, i0.ɵɵsanitizeUrl);
|
|
14
|
+
} }
|
|
15
|
+
function TestHarnessCustomWindowComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
16
|
+
i0.ɵɵelement(0, "i", 4);
|
|
17
|
+
} }
|
|
18
|
+
function TestHarnessCustomWindowComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
19
|
+
i0.ɵɵelement(0, "i", 5);
|
|
20
|
+
} }
|
|
21
|
+
function TestHarnessCustomWindowComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
22
|
+
i0.ɵɵelementStart(0, "div", 14);
|
|
23
|
+
i0.ɵɵelement(1, "kendo-loader", 17);
|
|
24
|
+
i0.ɵɵelementStart(2, "p");
|
|
25
|
+
i0.ɵɵtext(3);
|
|
26
|
+
i0.ɵɵelementEnd()();
|
|
27
|
+
} if (rf & 2) {
|
|
28
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
29
|
+
i0.ɵɵadvance(3);
|
|
30
|
+
i0.ɵɵtextInterpolate1("Loading ", ctx_r1.mode === "agent" ? "AI Agent" : "AI Prompt", "...");
|
|
31
|
+
} }
|
|
32
|
+
function TestHarnessCustomWindowComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
33
|
+
i0.ɵɵelementStart(0, "div", 15);
|
|
34
|
+
i0.ɵɵelement(1, "i", 18);
|
|
35
|
+
i0.ɵɵelementStart(2, "p");
|
|
36
|
+
i0.ɵɵtext(3);
|
|
37
|
+
i0.ɵɵelementEnd()();
|
|
38
|
+
} if (rf & 2) {
|
|
39
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
40
|
+
i0.ɵɵadvance(3);
|
|
41
|
+
i0.ɵɵtextInterpolate(ctx_r1.error);
|
|
42
|
+
} }
|
|
43
|
+
function TestHarnessCustomWindowComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
44
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
45
|
+
i0.ɵɵelementStart(0, "mj-ai-test-harness", 19);
|
|
46
|
+
i0.ɵɵlistener("runOpened", function TestHarnessCustomWindowComponent_Conditional_19_Template_mj_ai_test_harness_runOpened_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onRunOpened($event)); });
|
|
47
|
+
i0.ɵɵelementEnd();
|
|
48
|
+
} if (rf & 2) {
|
|
49
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
50
|
+
i0.ɵɵproperty("entity", ctx_r1.agent || ctx_r1.prompt || null)("mode", ctx_r1.mode)("isVisible", true);
|
|
51
|
+
} }
|
|
52
|
+
export class TestHarnessCustomWindowComponent {
|
|
53
|
+
constructor(renderer, elementRef, cdr) {
|
|
54
|
+
this.renderer = renderer;
|
|
55
|
+
this.elementRef = elementRef;
|
|
56
|
+
this.cdr = cdr;
|
|
57
|
+
this.data = {};
|
|
58
|
+
this.closeWindow = new EventEmitter();
|
|
59
|
+
this.minimizeWindow = new EventEmitter();
|
|
60
|
+
this.restoreWindow = new EventEmitter();
|
|
61
|
+
this.executionStateChange = new EventEmitter();
|
|
62
|
+
this.windowTitle = 'AI Test Harness';
|
|
63
|
+
this.width = 1200;
|
|
64
|
+
this.height = 800;
|
|
65
|
+
this.windowTop = 100;
|
|
66
|
+
this.windowLeft = 100;
|
|
67
|
+
this.loading = true;
|
|
68
|
+
this.error = '';
|
|
69
|
+
this.windowState = 'default';
|
|
70
|
+
this.isMaximized = false;
|
|
71
|
+
this.isMinimized = false;
|
|
72
|
+
// Store original dimensions for restore
|
|
73
|
+
this.originalWidth = 1200;
|
|
74
|
+
this.originalHeight = 800;
|
|
75
|
+
this.originalTop = 100;
|
|
76
|
+
this.originalLeft = 100;
|
|
77
|
+
// Minimized dimensions
|
|
78
|
+
this.MINIMIZED_WIDTH = 400;
|
|
79
|
+
this.MINIMIZED_HEIGHT = 60;
|
|
80
|
+
this.mode = 'agent';
|
|
81
|
+
this.metadata = new Metadata();
|
|
82
|
+
}
|
|
83
|
+
ngOnInit() {
|
|
84
|
+
// Set window dimensions
|
|
85
|
+
this.width = this.convertToNumber(this.data.width) || 1200;
|
|
86
|
+
this.height = this.convertToNumber(this.data.height) || 800;
|
|
87
|
+
// Store original dimensions
|
|
88
|
+
this.originalWidth = this.width;
|
|
89
|
+
this.originalHeight = this.height;
|
|
90
|
+
// Calculate centered position
|
|
91
|
+
const windowWidth = window.innerWidth;
|
|
92
|
+
const windowHeight = window.innerHeight;
|
|
93
|
+
this.windowLeft = Math.max(0, (windowWidth - this.width) / 2);
|
|
94
|
+
this.windowTop = Math.max(0, (windowHeight - this.height) / 2);
|
|
95
|
+
// Store original position
|
|
96
|
+
this.originalLeft = this.windowLeft;
|
|
97
|
+
this.originalTop = this.windowTop;
|
|
98
|
+
// Determine mode
|
|
99
|
+
this.mode = this.data.mode || (this.data.promptId || this.data.prompt ? 'prompt' : 'agent');
|
|
100
|
+
// Load entity
|
|
101
|
+
this.loadEntity();
|
|
102
|
+
}
|
|
103
|
+
async loadEntity() {
|
|
104
|
+
try {
|
|
105
|
+
if (this.mode === 'agent') {
|
|
106
|
+
if (this.data.agent) {
|
|
107
|
+
this.agent = this.data.agent;
|
|
108
|
+
this.windowTitle = this.data.title || `Test: ${this.agent.Name}`;
|
|
109
|
+
}
|
|
110
|
+
else if (this.data.agentId) {
|
|
111
|
+
const agentEntity = await this.metadata.GetEntityObject('AI Agents');
|
|
112
|
+
await agentEntity.Load(this.data.agentId);
|
|
113
|
+
if (agentEntity.IsSaved) {
|
|
114
|
+
this.agent = agentEntity;
|
|
115
|
+
this.windowTitle = this.data.title || `Test: ${this.agent.Name}`;
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
throw new Error('Agent not found');
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
throw new Error('No agent provided');
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
if (this.data.prompt) {
|
|
127
|
+
this.prompt = this.data.prompt;
|
|
128
|
+
this.windowTitle = this.data.title || `Test: ${this.prompt.Name}`;
|
|
129
|
+
}
|
|
130
|
+
else if (this.data.promptId) {
|
|
131
|
+
const promptEntity = await this.metadata.GetEntityObject('AI Prompts');
|
|
132
|
+
await promptEntity.Load(this.data.promptId);
|
|
133
|
+
if (promptEntity.IsSaved) {
|
|
134
|
+
this.prompt = promptEntity;
|
|
135
|
+
this.windowTitle = this.data.title || `Test: ${this.prompt.Name}`;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
throw new Error('Prompt not found');
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
throw new Error('No prompt provided');
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
this.loading = false;
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
this.error = err.message || 'Failed to load entity';
|
|
149
|
+
this.loading = false;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
onClose() {
|
|
153
|
+
// When the Kendo Window's close event fires (from the default X button),
|
|
154
|
+
// emit our closeWindow event to notify the window manager
|
|
155
|
+
this.closeWindow.emit();
|
|
156
|
+
}
|
|
157
|
+
closeButtonClick() {
|
|
158
|
+
// When our custom close button is clicked, emit the close event
|
|
159
|
+
// This will trigger the window to close and call our onClose handler
|
|
160
|
+
if (this.kendoWindow) {
|
|
161
|
+
this.kendoWindow.close.emit();
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
// If kendoWindow is not available, directly emit the close event
|
|
165
|
+
this.onClose();
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
onStateChange(state) {
|
|
169
|
+
this.windowState = state;
|
|
170
|
+
this.isMaximized = state === 'maximized';
|
|
171
|
+
this.isMinimized = state === 'minimized';
|
|
172
|
+
// Handle restore from minimized
|
|
173
|
+
if (this.isMinimized && state !== 'minimized') {
|
|
174
|
+
this.restoreFromMinimized();
|
|
175
|
+
}
|
|
176
|
+
// Adjust content height on any state change
|
|
177
|
+
if (state !== 'minimized') {
|
|
178
|
+
setTimeout(() => this.adjustContentHeight(), 100);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
onWindowResize() {
|
|
182
|
+
// Handle Kendo Window resize event
|
|
183
|
+
if (!this.isMinimized) {
|
|
184
|
+
// Use a small delay to ensure the DOM has updated
|
|
185
|
+
setTimeout(() => this.adjustContentHeight(), 50);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
onRunOpened(event) {
|
|
189
|
+
// Auto-minimize the test harness window when a run is opened
|
|
190
|
+
this.minimize();
|
|
191
|
+
}
|
|
192
|
+
minimize() {
|
|
193
|
+
if (!this.isMinimized) {
|
|
194
|
+
// Store current dimensions before minimizing
|
|
195
|
+
this.originalWidth = this.width;
|
|
196
|
+
this.originalHeight = this.height;
|
|
197
|
+
this.originalTop = this.windowTop;
|
|
198
|
+
this.originalLeft = this.windowLeft;
|
|
199
|
+
// Hide the window when minimized (dock will show icon)
|
|
200
|
+
this.isMinimized = true;
|
|
201
|
+
this.minimizeWindow.emit();
|
|
202
|
+
// Hide the window element
|
|
203
|
+
let windowElement = this.elementRef.nativeElement.querySelector('.k-window');
|
|
204
|
+
if (!windowElement && this.elementRef.nativeElement.closest) {
|
|
205
|
+
windowElement = this.elementRef.nativeElement.closest('.k-window');
|
|
206
|
+
}
|
|
207
|
+
if (windowElement) {
|
|
208
|
+
this.renderer.setStyle(windowElement, 'display', 'none');
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
restoreFromMinimized() {
|
|
213
|
+
this.width = this.originalWidth;
|
|
214
|
+
this.height = this.originalHeight;
|
|
215
|
+
this.windowTop = this.originalTop;
|
|
216
|
+
this.windowLeft = this.originalLeft;
|
|
217
|
+
this.windowState = 'default';
|
|
218
|
+
this.isMinimized = false;
|
|
219
|
+
// Show the window element
|
|
220
|
+
let windowElement = this.elementRef.nativeElement.querySelector('.k-window');
|
|
221
|
+
if (!windowElement && this.elementRef.nativeElement.closest) {
|
|
222
|
+
windowElement = this.elementRef.nativeElement.closest('.k-window');
|
|
223
|
+
}
|
|
224
|
+
if (windowElement) {
|
|
225
|
+
this.renderer.setStyle(windowElement, 'display', 'block');
|
|
226
|
+
}
|
|
227
|
+
// Update position after state change
|
|
228
|
+
setTimeout(() => {
|
|
229
|
+
this.updateWindowPosition();
|
|
230
|
+
// Force Angular change detection
|
|
231
|
+
this.cdr.detectChanges();
|
|
232
|
+
// Force the Kendo Window to recalculate its internal dimensions
|
|
233
|
+
if (this.kendoWindow) {
|
|
234
|
+
// Trigger resize event to fix content sizing
|
|
235
|
+
window.dispatchEvent(new Event('resize'));
|
|
236
|
+
// Use the shared method to adjust content height
|
|
237
|
+
this.adjustContentHeight();
|
|
238
|
+
}
|
|
239
|
+
}, 100);
|
|
240
|
+
// Emit restore event
|
|
241
|
+
this.restoreWindow.emit();
|
|
242
|
+
}
|
|
243
|
+
toggleMaximize() {
|
|
244
|
+
if (this.isMinimized) {
|
|
245
|
+
// First restore from minimized, then maximize
|
|
246
|
+
this.restoreFromMinimized();
|
|
247
|
+
setTimeout(() => {
|
|
248
|
+
this.windowState = 'maximized';
|
|
249
|
+
this.isMaximized = true;
|
|
250
|
+
}, 600);
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
this.windowState = this.isMaximized ? 'default' : 'maximized';
|
|
254
|
+
this.isMaximized = !this.isMaximized;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
convertToNumber(value) {
|
|
258
|
+
if (!value)
|
|
259
|
+
return undefined;
|
|
260
|
+
if (typeof value === 'number')
|
|
261
|
+
return value;
|
|
262
|
+
// Handle percentage values
|
|
263
|
+
if (value.endsWith('vw') || value.endsWith('vh')) {
|
|
264
|
+
const percentage = parseFloat(value) / 100;
|
|
265
|
+
if (value.endsWith('vw')) {
|
|
266
|
+
return window.innerWidth * percentage;
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
return window.innerHeight * percentage;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
// Handle pixel values
|
|
273
|
+
if (value.endsWith('px')) {
|
|
274
|
+
return parseFloat(value);
|
|
275
|
+
}
|
|
276
|
+
// Try to parse as number
|
|
277
|
+
const parsed = parseFloat(value);
|
|
278
|
+
return isNaN(parsed) ? undefined : parsed;
|
|
279
|
+
}
|
|
280
|
+
ngAfterViewInit() {
|
|
281
|
+
// Set initial position if needed
|
|
282
|
+
setTimeout(() => {
|
|
283
|
+
this.updateWindowPosition();
|
|
284
|
+
this.adjustContentHeight();
|
|
285
|
+
}, 100);
|
|
286
|
+
// Set up execution tracking
|
|
287
|
+
this.setupExecutionTracking();
|
|
288
|
+
// Set up window resize listener
|
|
289
|
+
this.setupResizeListener();
|
|
290
|
+
}
|
|
291
|
+
adjustContentHeight() {
|
|
292
|
+
// Ensure the window content wrapper has proper height
|
|
293
|
+
const contentWrapper = this.elementRef.nativeElement.querySelector('.k-window-content');
|
|
294
|
+
if (contentWrapper && this.kendoWindow) {
|
|
295
|
+
// Get the actual window element to check current dimensions
|
|
296
|
+
const windowElement = this.elementRef.nativeElement.querySelector('.k-window') ||
|
|
297
|
+
this.elementRef.nativeElement.closest('.k-window');
|
|
298
|
+
// Update our tracked dimensions if the window has been resized
|
|
299
|
+
if (windowElement) {
|
|
300
|
+
const rect = windowElement.getBoundingClientRect();
|
|
301
|
+
if (rect.width > 0)
|
|
302
|
+
this.width = rect.width;
|
|
303
|
+
if (rect.height > 0)
|
|
304
|
+
this.height = rect.height;
|
|
305
|
+
}
|
|
306
|
+
// Calculate the actual content height (window height minus titlebar and some padding)
|
|
307
|
+
const windowHeight = this.height;
|
|
308
|
+
const titlebarHeight = 40; // Titlebar height
|
|
309
|
+
const bottomPadding = 10; // Extra space to prevent clipping
|
|
310
|
+
const contentHeight = windowHeight - titlebarHeight - bottomPadding;
|
|
311
|
+
this.renderer.setStyle(contentWrapper, 'height', `${contentHeight}px`);
|
|
312
|
+
this.renderer.setStyle(contentWrapper, 'display', 'flex');
|
|
313
|
+
this.renderer.setStyle(contentWrapper, 'flex-direction', 'column');
|
|
314
|
+
}
|
|
315
|
+
// Also update the test harness container
|
|
316
|
+
const testHarnessContainer = this.elementRef.nativeElement.querySelector('mj-ai-test-harness');
|
|
317
|
+
if (testHarnessContainer) {
|
|
318
|
+
this.renderer.setStyle(testHarnessContainer, 'flex', '1');
|
|
319
|
+
this.renderer.setStyle(testHarnessContainer, 'height', '100%');
|
|
320
|
+
this.renderer.setStyle(testHarnessContainer, 'overflow', 'hidden');
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
setupResizeListener() {
|
|
324
|
+
// Debounced resize handler
|
|
325
|
+
let resizeTimeout;
|
|
326
|
+
const handleResize = () => {
|
|
327
|
+
clearTimeout(resizeTimeout);
|
|
328
|
+
resizeTimeout = setTimeout(() => {
|
|
329
|
+
if (!this.isMinimized) {
|
|
330
|
+
this.adjustContentHeight();
|
|
331
|
+
}
|
|
332
|
+
}, 100);
|
|
333
|
+
};
|
|
334
|
+
// Listen for window resize events
|
|
335
|
+
window.addEventListener('resize', handleResize);
|
|
336
|
+
// Store the handler for cleanup
|
|
337
|
+
this.resizeHandler = handleResize;
|
|
338
|
+
// Note: Kendo Window resize events are handled by the (resize) event binding in the template
|
|
339
|
+
}
|
|
340
|
+
setupExecutionTracking() {
|
|
341
|
+
// Use a timer to check the test harness execution state
|
|
342
|
+
// This is needed because the test harness doesn't emit events for execution state changes
|
|
343
|
+
if (this.testHarness) {
|
|
344
|
+
// Initial state
|
|
345
|
+
let lastExecutingState = false;
|
|
346
|
+
// Check execution state periodically
|
|
347
|
+
const checkInterval = setInterval(() => {
|
|
348
|
+
if (this.testHarness && this.testHarness.isExecuting !== lastExecutingState) {
|
|
349
|
+
lastExecutingState = this.testHarness.isExecuting;
|
|
350
|
+
this.executionStateChange.emit({ isExecuting: lastExecutingState });
|
|
351
|
+
}
|
|
352
|
+
}, 100);
|
|
353
|
+
// Store interval for cleanup
|
|
354
|
+
this.executionCheckInterval = checkInterval;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
ngOnDestroy() {
|
|
358
|
+
// Clean up execution tracking interval
|
|
359
|
+
if (this.executionCheckInterval) {
|
|
360
|
+
clearInterval(this.executionCheckInterval);
|
|
361
|
+
}
|
|
362
|
+
// Clean up resize listener
|
|
363
|
+
if (this.resizeHandler) {
|
|
364
|
+
window.removeEventListener('resize', this.resizeHandler);
|
|
365
|
+
}
|
|
366
|
+
// Ensure window is properly closed and cleaned up
|
|
367
|
+
if (this.kendoWindow) {
|
|
368
|
+
this.kendoWindow.close.emit();
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
updateWindowPosition() {
|
|
372
|
+
// Find the window element - it might be in the parent if we're inside a wrapper
|
|
373
|
+
let windowElement = this.elementRef.nativeElement.querySelector('.k-window');
|
|
374
|
+
if (!windowElement && this.elementRef.nativeElement.closest) {
|
|
375
|
+
windowElement = this.elementRef.nativeElement.closest('.k-window');
|
|
376
|
+
}
|
|
377
|
+
if (windowElement && (this.windowTop !== undefined || this.windowLeft !== undefined)) {
|
|
378
|
+
if (this.windowTop !== undefined) {
|
|
379
|
+
this.renderer.setStyle(windowElement, 'top', `${this.windowTop}px`);
|
|
380
|
+
}
|
|
381
|
+
if (this.windowLeft !== undefined) {
|
|
382
|
+
this.renderer.setStyle(windowElement, 'left', `${this.windowLeft}px`);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
static { this.ɵfac = function TestHarnessCustomWindowComponent_Factory(t) { return new (t || TestHarnessCustomWindowComponent)(i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
|
|
387
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TestHarnessCustomWindowComponent, selectors: [["mj-test-harness-custom-window"]], viewQuery: function TestHarnessCustomWindowComponent_Query(rf, ctx) { if (rf & 1) {
|
|
388
|
+
i0.ɵɵviewQuery(_c0, 5);
|
|
389
|
+
i0.ɵɵviewQuery(AITestHarnessComponent, 5);
|
|
390
|
+
} if (rf & 2) {
|
|
391
|
+
let _t;
|
|
392
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.kendoWindow = _t.first);
|
|
393
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.testHarness = _t.first);
|
|
394
|
+
} }, inputs: { data: "data" }, outputs: { closeWindow: "closeWindow", minimizeWindow: "minimizeWindow", restoreWindow: "restoreWindow", executionStateChange: "executionStateChange" }, decls: 20, vars: 20, consts: [["kendoWindow", ""], [3, "close", "stateChange", "resize", "title", "width", "height", "top", "left", "minWidth", "minHeight", "draggable", "resizable", "state"], [1, "window-title"], ["alt", "Agent logo", 1, "title-logo", 3, "src"], [1, "fa-solid", "fa-robot", "title-icon"], [1, "fa-solid", "fa-comment-dots", "title-icon"], [1, "window-actions"], ["title", "Minimize", 1, "window-action-btn", 3, "click"], [1, "fa-solid", "fa-window-minimize"], [1, "window-action-btn", 3, "click", "title"], [1, "fa-solid"], ["title", "Close", 1, "window-action-btn", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "window-content"], [1, "loading-container"], [1, "error-container"], [3, "entity", "mode", "isVisible"], ["type", "converging-spinner", "size", "large"], [1, "fa-solid", "fa-exclamation-triangle"], [3, "runOpened", "entity", "mode", "isVisible"]], template: function TestHarnessCustomWindowComponent_Template(rf, ctx) { if (rf & 1) {
|
|
395
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
396
|
+
i0.ɵɵelementStart(0, "kendo-window", 1, 0);
|
|
397
|
+
i0.ɵɵlistener("close", function TestHarnessCustomWindowComponent_Template_kendo_window_close_0_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onClose()); })("stateChange", function TestHarnessCustomWindowComponent_Template_kendo_window_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onStateChange($event)); })("resize", function TestHarnessCustomWindowComponent_Template_kendo_window_resize_0_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onWindowResize()); });
|
|
398
|
+
i0.ɵɵelementStart(2, "kendo-window-titlebar")(3, "div", 2);
|
|
399
|
+
i0.ɵɵtemplate(4, TestHarnessCustomWindowComponent_Conditional_4_Template, 1, 1, "img", 3)(5, TestHarnessCustomWindowComponent_Conditional_5_Template, 1, 0, "i", 4)(6, TestHarnessCustomWindowComponent_Conditional_6_Template, 1, 0, "i", 5);
|
|
400
|
+
i0.ɵɵelementStart(7, "span");
|
|
401
|
+
i0.ɵɵtext(8);
|
|
402
|
+
i0.ɵɵelementEnd()();
|
|
403
|
+
i0.ɵɵelementStart(9, "div", 6)(10, "button", 7);
|
|
404
|
+
i0.ɵɵlistener("click", function TestHarnessCustomWindowComponent_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.minimize()); });
|
|
405
|
+
i0.ɵɵelement(11, "i", 8);
|
|
406
|
+
i0.ɵɵelementEnd();
|
|
407
|
+
i0.ɵɵelementStart(12, "button", 9);
|
|
408
|
+
i0.ɵɵlistener("click", function TestHarnessCustomWindowComponent_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.toggleMaximize()); });
|
|
409
|
+
i0.ɵɵelement(13, "i", 10);
|
|
410
|
+
i0.ɵɵelementEnd();
|
|
411
|
+
i0.ɵɵelementStart(14, "button", 11);
|
|
412
|
+
i0.ɵɵlistener("click", function TestHarnessCustomWindowComponent_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.closeButtonClick()); });
|
|
413
|
+
i0.ɵɵelement(15, "i", 12);
|
|
414
|
+
i0.ɵɵelementEnd()()();
|
|
415
|
+
i0.ɵɵelementStart(16, "div", 13);
|
|
416
|
+
i0.ɵɵtemplate(17, TestHarnessCustomWindowComponent_Conditional_17_Template, 4, 1, "div", 14)(18, TestHarnessCustomWindowComponent_Conditional_18_Template, 4, 1, "div", 15)(19, TestHarnessCustomWindowComponent_Conditional_19_Template, 1, 3, "mj-ai-test-harness", 16);
|
|
417
|
+
i0.ɵɵelementEnd()();
|
|
418
|
+
} if (rf & 2) {
|
|
419
|
+
i0.ɵɵclassProp("minimized-window", ctx.isMinimized);
|
|
420
|
+
i0.ɵɵproperty("title", ctx.windowTitle)("width", ctx.width)("height", ctx.height)("top", ctx.windowTop)("left", ctx.windowLeft)("minWidth", ctx.isMinimized ? 400 : 800)("minHeight", ctx.isMinimized ? 60 : 600)("draggable", true)("resizable", !ctx.isMinimized)("state", ctx.windowState);
|
|
421
|
+
i0.ɵɵadvance(4);
|
|
422
|
+
i0.ɵɵconditional(ctx.mode === "agent" && (ctx.agent == null ? null : ctx.agent.LogoURL) ? 4 : ctx.mode === "agent" ? 5 : 6);
|
|
423
|
+
i0.ɵɵadvance(4);
|
|
424
|
+
i0.ɵɵtextInterpolate(ctx.windowTitle);
|
|
425
|
+
i0.ɵɵadvance(4);
|
|
426
|
+
i0.ɵɵproperty("title", ctx.isMaximized ? "Restore" : "Maximize");
|
|
427
|
+
i0.ɵɵadvance();
|
|
428
|
+
i0.ɵɵclassProp("fa-window-maximize", !ctx.isMaximized)("fa-window-restore", ctx.isMaximized);
|
|
429
|
+
i0.ɵɵadvance(4);
|
|
430
|
+
i0.ɵɵconditional(ctx.loading ? 17 : ctx.error ? 18 : 19);
|
|
431
|
+
} }, dependencies: [i1.WindowComponent, i1.WindowTitleBarComponent, i2.LoaderComponent, i3.AITestHarnessComponent], styles: ["[_nghost-%COMP%] {\n display: contents;\n }\n \n \n\n\n\n\n \n .minimized-window {\n .k-window-content {\n display: none !important;\n }\n \n .k-window-titlebar {\n border-radius: 4px !important;\n }\n }\n \n .window-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n \n .title-icon {\n color: #666;\n font-size: 16px;\n }\n \n .title-logo {\n width: 20px;\n height: 20px;\n object-fit: contain;\n }\n }\n \n .window-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n align-items: center;\n }\n \n .window-action-btn[_ngcontent-%COMP%] {\n background: transparent;\n border: none;\n padding: 8px;\n cursor: pointer;\n border-radius: 4px;\n transition: background-color 0.2s;\n display: flex;\n align-items: center;\n justify-content: center;\n \n &:hover {\n background-color: rgba(0, 0, 0, 0.08);\n }\n \n i {\n font-size: 14px;\n color: #666;\n }\n }\n \n .window-content[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n \n .loading-container[_ngcontent-%COMP%], \n .error-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n gap: 1rem;\n }\n \n .error-container[_ngcontent-%COMP%] {\n color: #dc3545;\n \n i {\n font-size: 3rem;\n }\n }\n \n mj-ai-test-harness[_ngcontent-%COMP%] {\n flex: 1;\n overflow: hidden;\n }\n \n \n\n .k-window-content {\n display: flex;\n flex-direction: column;\n }"] }); }
|
|
432
|
+
}
|
|
433
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TestHarnessCustomWindowComponent, [{
|
|
434
|
+
type: Component,
|
|
435
|
+
args: [{ selector: 'mj-test-harness-custom-window', template: `
|
|
436
|
+
<kendo-window
|
|
437
|
+
#kendoWindow
|
|
438
|
+
[title]="windowTitle"
|
|
439
|
+
[width]="width"
|
|
440
|
+
[height]="height"
|
|
441
|
+
[top]="windowTop"
|
|
442
|
+
[left]="windowLeft"
|
|
443
|
+
[minWidth]="isMinimized ? 400 : 800"
|
|
444
|
+
[minHeight]="isMinimized ? 60 : 600"
|
|
445
|
+
[draggable]="true"
|
|
446
|
+
[resizable]="!isMinimized"
|
|
447
|
+
[state]="windowState"
|
|
448
|
+
[class.minimized-window]="isMinimized"
|
|
449
|
+
(close)="onClose()"
|
|
450
|
+
(stateChange)="onStateChange($event)"
|
|
451
|
+
(resize)="onWindowResize()">
|
|
452
|
+
|
|
453
|
+
<kendo-window-titlebar>
|
|
454
|
+
<div class="window-title">
|
|
455
|
+
@if (mode === 'agent' && agent?.LogoURL) {
|
|
456
|
+
<img [src]="agent?.LogoURL" class="title-logo" alt="Agent logo" />
|
|
457
|
+
} @else if (mode === 'agent') {
|
|
458
|
+
<i class="fa-solid fa-robot title-icon"></i>
|
|
459
|
+
} @else {
|
|
460
|
+
<i class="fa-solid fa-comment-dots title-icon"></i>
|
|
461
|
+
}
|
|
462
|
+
<span>{{ windowTitle }}</span>
|
|
463
|
+
</div>
|
|
464
|
+
<div class="window-actions">
|
|
465
|
+
<button
|
|
466
|
+
(click)="minimize()"
|
|
467
|
+
title="Minimize"
|
|
468
|
+
class="window-action-btn">
|
|
469
|
+
<i class="fa-solid fa-window-minimize"></i>
|
|
470
|
+
</button>
|
|
471
|
+
<button
|
|
472
|
+
(click)="toggleMaximize()"
|
|
473
|
+
[title]="isMaximized ? 'Restore' : 'Maximize'"
|
|
474
|
+
class="window-action-btn">
|
|
475
|
+
<i class="fa-solid" [class.fa-window-maximize]="!isMaximized" [class.fa-window-restore]="isMaximized"></i>
|
|
476
|
+
</button>
|
|
477
|
+
<button
|
|
478
|
+
(click)="closeButtonClick()"
|
|
479
|
+
title="Close"
|
|
480
|
+
class="window-action-btn">
|
|
481
|
+
<i class="fa-solid fa-xmark"></i>
|
|
482
|
+
</button>
|
|
483
|
+
</div>
|
|
484
|
+
</kendo-window-titlebar>
|
|
485
|
+
|
|
486
|
+
<div class="window-content">
|
|
487
|
+
@if (loading) {
|
|
488
|
+
<div class="loading-container">
|
|
489
|
+
<kendo-loader type="converging-spinner" size="large"></kendo-loader>
|
|
490
|
+
<p>Loading {{mode === 'agent' ? 'AI Agent' : 'AI Prompt'}}...</p>
|
|
491
|
+
</div>
|
|
492
|
+
}
|
|
493
|
+
@else if (error) {
|
|
494
|
+
<div class="error-container">
|
|
495
|
+
<i class="fa-solid fa-exclamation-triangle"></i>
|
|
496
|
+
<p>{{ error }}</p>
|
|
497
|
+
</div>
|
|
498
|
+
}
|
|
499
|
+
@else {
|
|
500
|
+
<mj-ai-test-harness
|
|
501
|
+
[entity]="(agent || prompt) || null"
|
|
502
|
+
[mode]="mode"
|
|
503
|
+
[isVisible]="true"
|
|
504
|
+
(runOpened)="onRunOpened($event)">
|
|
505
|
+
</mj-ai-test-harness>
|
|
506
|
+
}
|
|
507
|
+
</div>
|
|
508
|
+
</kendo-window>
|
|
509
|
+
`, styles: ["\n :host {\n display: contents;\n }\n \n /* Remove animation for snappy performance\n ::ng-deep .window-transition {\n transition: all 0.6s ease-in-out !important;\n } */\n \n ::ng-deep .minimized-window {\n .k-window-content {\n display: none !important;\n }\n \n .k-window-titlebar {\n border-radius: 4px !important;\n }\n }\n \n .window-title {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n \n .title-icon {\n color: #666;\n font-size: 16px;\n }\n \n .title-logo {\n width: 20px;\n height: 20px;\n object-fit: contain;\n }\n }\n \n .window-actions {\n display: flex;\n gap: 4px;\n align-items: center;\n }\n \n .window-action-btn {\n background: transparent;\n border: none;\n padding: 8px;\n cursor: pointer;\n border-radius: 4px;\n transition: background-color 0.2s;\n display: flex;\n align-items: center;\n justify-content: center;\n \n &:hover {\n background-color: rgba(0, 0, 0, 0.08);\n }\n \n i {\n font-size: 14px;\n color: #666;\n }\n }\n \n .window-content {\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n \n .loading-container,\n .error-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n gap: 1rem;\n }\n \n .error-container {\n color: #dc3545;\n \n i {\n font-size: 3rem;\n }\n }\n \n mj-ai-test-harness {\n flex: 1;\n overflow: hidden;\n }\n \n /* Ensure Kendo Window content wrapper maintains proper height */\n ::ng-deep .k-window-content {\n display: flex;\n flex-direction: column;\n }\n "] }]
|
|
510
|
+
}], () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], { kendoWindow: [{
|
|
511
|
+
type: ViewChild,
|
|
512
|
+
args: ['kendoWindow', { static: false }]
|
|
513
|
+
}], testHarness: [{
|
|
514
|
+
type: ViewChild,
|
|
515
|
+
args: [AITestHarnessComponent, { static: false }]
|
|
516
|
+
}], data: [{
|
|
517
|
+
type: Input
|
|
518
|
+
}], closeWindow: [{
|
|
519
|
+
type: Output
|
|
520
|
+
}], minimizeWindow: [{
|
|
521
|
+
type: Output
|
|
522
|
+
}], restoreWindow: [{
|
|
523
|
+
type: Output
|
|
524
|
+
}], executionStateChange: [{
|
|
525
|
+
type: Output
|
|
526
|
+
}] }); })();
|
|
527
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TestHarnessCustomWindowComponent, { className: "TestHarnessCustomWindowComponent", filePath: "lib/test-harness-custom-window.component.ts", lineNumber: 200 }); })();
|
|
528
|
+
//# sourceMappingURL=test-harness-custom-window.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-harness-custom-window.component.js","sourceRoot":"","sources":["../../src/lib/test-harness-custom-window.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ApplicationRef, Injector, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import { AIAgentEntity, AIPromptEntity } from '@memberjunction/core-entities';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import { TestResult } from './test-harness-window.service';
|
|
5
|
+
import { WindowDockService } from './window-dock.service';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
/**
|
|
8
|
+
* Service for managing test harness windows for AI Agents and AI Prompts.
|
|
9
|
+
* Creates Kendo Window components with custom titlebar including minimize button.
|
|
10
|
+
*/
|
|
11
|
+
export declare class TestHarnessWindowManagerService {
|
|
12
|
+
private appRef;
|
|
13
|
+
private injector;
|
|
14
|
+
private dockService;
|
|
15
|
+
private openWindows;
|
|
16
|
+
private windowCounter;
|
|
17
|
+
constructor(appRef: ApplicationRef, injector: Injector, dockService: WindowDockService);
|
|
18
|
+
/**
|
|
19
|
+
* Opens the AI Agent Test Harness in a window
|
|
20
|
+
*/
|
|
21
|
+
openAgentTestHarness(options: {
|
|
22
|
+
agentId?: string;
|
|
23
|
+
agent?: AIAgentEntity;
|
|
24
|
+
title?: string;
|
|
25
|
+
width?: string | number;
|
|
26
|
+
height?: string | number;
|
|
27
|
+
initialDataContext?: Record<string, any>;
|
|
28
|
+
initialTemplateData?: Record<string, any>;
|
|
29
|
+
viewContainerRef?: ViewContainerRef;
|
|
30
|
+
}): Observable<TestResult>;
|
|
31
|
+
/**
|
|
32
|
+
* Opens the AI Prompt Test Harness in a window
|
|
33
|
+
*/
|
|
34
|
+
openPromptTestHarness(options: {
|
|
35
|
+
promptId?: string;
|
|
36
|
+
prompt?: AIPromptEntity;
|
|
37
|
+
title?: string;
|
|
38
|
+
width?: string | number;
|
|
39
|
+
height?: string | number;
|
|
40
|
+
initialTemplateVariables?: Record<string, any>;
|
|
41
|
+
selectedModelId?: string;
|
|
42
|
+
viewContainerRef?: ViewContainerRef;
|
|
43
|
+
}): Observable<TestResult>;
|
|
44
|
+
/**
|
|
45
|
+
* Creates a test harness window
|
|
46
|
+
*/
|
|
47
|
+
private createWindow;
|
|
48
|
+
/**
|
|
49
|
+
* Closes a specific window
|
|
50
|
+
*/
|
|
51
|
+
private closeWindow;
|
|
52
|
+
/**
|
|
53
|
+
* Closes all open windows
|
|
54
|
+
*/
|
|
55
|
+
closeAllWindows(): void;
|
|
56
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TestHarnessWindowManagerService, never>;
|
|
57
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<TestHarnessWindowManagerService>;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=test-harness-window-manager.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-harness-window-manager.service.d.ts","sourceRoot":"","sources":["../../src/lib/test-harness-window-manager.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,cAAc,EAAE,QAAQ,EAAmB,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtH,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE9E,OAAO,EAAE,UAAU,EAAW,MAAM,MAAM,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;;AAO1D;;;GAGG;AACH,qBAGa,+BAA+B;IAKpC,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,WAAW;IANvB,OAAO,CAAC,WAAW,CAAiC;IACpD,OAAO,CAAC,aAAa,CAAK;gBAGd,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,iBAAiB;IAG1C;;OAEG;IACH,oBAAoB,CAAC,OAAO,EAAE;QAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,aAAa,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACzC,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1C,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;KACvC,GAAG,UAAU,CAAC,UAAU,CAAC;IAe1B;;OAEG;IACH,qBAAqB,CAAC,OAAO,EAAE;QAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,cAAc,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QACzB,wBAAwB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC/C,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;KACvC,GAAG,UAAU,CAAC,UAAU,CAAC;IAe1B;;OAEG;IACH,OAAO,CAAC,YAAY;IAqFpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAenB;;OAEG;IACH,eAAe;yCA7KN,+BAA+B;6CAA/B,+BAA+B;CAkL3C"}
|