@memberjunction/ng-dashboards 2.105.0 → 2.107.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/Scheduling/components/scheduling-health.component.d.ts +30 -0
- package/dist/Scheduling/components/scheduling-health.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-health.component.js +316 -0
- package/dist/Scheduling/components/scheduling-health.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-history.component.d.ts +48 -0
- package/dist/Scheduling/components/scheduling-history.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-history.component.js +378 -0
- package/dist/Scheduling/components/scheduling-history.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts +48 -0
- package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-jobs.component.js +372 -0
- package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-monitoring.component.d.ts +37 -0
- package/dist/Scheduling/components/scheduling-monitoring.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-monitoring.component.js +489 -0
- package/dist/Scheduling/components/scheduling-monitoring.component.js.map +1 -0
- package/dist/Scheduling/components/scheduling-types.component.d.ts +22 -0
- package/dist/Scheduling/components/scheduling-types.component.d.ts.map +1 -0
- package/dist/Scheduling/components/scheduling-types.component.js +166 -0
- package/dist/Scheduling/components/scheduling-types.component.js.map +1 -0
- package/dist/Scheduling/scheduling-dashboard.component.d.ts +52 -0
- package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -0
- package/dist/Scheduling/scheduling-dashboard.component.js +256 -0
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -0
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +102 -0
- package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -0
- package/dist/Scheduling/services/scheduling-instrumentation.service.js +406 -0
- package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -0
- package/dist/module.d.ts +25 -19
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +32 -6
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +1 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +9 -9
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { OnInit, OnDestroy, EventEmitter, ChangeDetectorRef } from '@angular/core';
|
|
2
|
+
import { SchedulingInstrumentationService, LockInfo } from '../services/scheduling-instrumentation.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class SchedulingHealthComponent implements OnInit, OnDestroy {
|
|
5
|
+
private schedulingService;
|
|
6
|
+
private cdr;
|
|
7
|
+
initialState: any;
|
|
8
|
+
stateChange: EventEmitter<any>;
|
|
9
|
+
locks: LockInfo[];
|
|
10
|
+
isLoading: boolean;
|
|
11
|
+
panelStates: {
|
|
12
|
+
locks: boolean;
|
|
13
|
+
alerts: boolean;
|
|
14
|
+
};
|
|
15
|
+
private destroy$;
|
|
16
|
+
constructor(schedulingService: SchedulingInstrumentationService, cdr: ChangeDetectorRef);
|
|
17
|
+
ngOnInit(): void;
|
|
18
|
+
ngOnDestroy(): void;
|
|
19
|
+
private loadState;
|
|
20
|
+
private loadData;
|
|
21
|
+
onRefresh(): void;
|
|
22
|
+
togglePanel(panelName: 'locks' | 'alerts'): void;
|
|
23
|
+
onReleaseLock(jobId: string): Promise<void>;
|
|
24
|
+
formatDate(date: Date): string;
|
|
25
|
+
getStaleLocks(): LockInfo[];
|
|
26
|
+
private emitStateChange;
|
|
27
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SchedulingHealthComponent, never>;
|
|
28
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SchedulingHealthComponent, "app-scheduling-health", never, { "initialState": { "alias": "initialState"; "required": false; }; }, { "stateChange": "stateChange"; }, never, never, false, never>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=scheduling-health.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduling-health.component.d.ts","sourceRoot":"","sources":["../../../src/Scheduling/components/scheduling-health.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAiB,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAG7G,OAAO,EAAE,gCAAgC,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;;AAE5G,qBAKa,yBAA0B,YAAW,MAAM,EAAE,SAAS;IAc/D,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,GAAG;IAdJ,YAAY,EAAE,GAAG,CAAC;IACjB,WAAW,oBAA2B;IAEzC,KAAK,EAAE,QAAQ,EAAE,CAAM;IACvB,SAAS,UAAS;IAClB,WAAW;;;MAGhB;IAEF,OAAO,CAAC,QAAQ,CAAuB;gBAG7B,iBAAiB,EAAE,gCAAgC,EACnD,GAAG,EAAE,iBAAiB;IAGhC,QAAQ,IAAI,IAAI;IAKhB,WAAW,IAAI,IAAI;IAKnB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,QAAQ;IAmBT,SAAS,IAAI,IAAI;IAIjB,WAAW,CAAC,SAAS,EAAE,OAAO,GAAG,QAAQ,GAAG,IAAI;IAK1C,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASjD,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAI9B,aAAa,IAAI,QAAQ,EAAE;IAIlC,OAAO,CAAC,eAAe;yCA/EZ,yBAAyB;2CAAzB,yBAAyB;CAqFrC"}
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { takeUntil } from 'rxjs/operators';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../services/scheduling-instrumentation.service";
|
|
6
|
+
import * as i2 from "@progress/kendo-angular-buttons";
|
|
7
|
+
const _forTrack0 = ($index, $item) => $item.jobId;
|
|
8
|
+
function SchedulingHealthComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
9
|
+
i0.ɵɵelementStart(0, "div", 5);
|
|
10
|
+
i0.ɵɵelement(1, "i", 16);
|
|
11
|
+
i0.ɵɵelementStart(2, "p");
|
|
12
|
+
i0.ɵɵtext(3, "Loading system health...");
|
|
13
|
+
i0.ɵɵelementEnd()();
|
|
14
|
+
} }
|
|
15
|
+
function SchedulingHealthComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
16
|
+
i0.ɵɵelementStart(0, "span", 11);
|
|
17
|
+
i0.ɵɵtext(1);
|
|
18
|
+
i0.ɵɵelementEnd();
|
|
19
|
+
} if (rf & 2) {
|
|
20
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
21
|
+
i0.ɵɵadvance();
|
|
22
|
+
i0.ɵɵtextInterpolate(ctx_r0.locks.length);
|
|
23
|
+
} }
|
|
24
|
+
function SchedulingHealthComponent_Conditional_17_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
25
|
+
i0.ɵɵelementStart(0, "div", 17);
|
|
26
|
+
i0.ɵɵelement(1, "i", 19);
|
|
27
|
+
i0.ɵɵelementStart(2, "p");
|
|
28
|
+
i0.ɵɵtext(3, "No active locks");
|
|
29
|
+
i0.ɵɵelementEnd()();
|
|
30
|
+
} }
|
|
31
|
+
function SchedulingHealthComponent_Conditional_17_Conditional_2_For_17_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
32
|
+
i0.ɵɵelementStart(0, "kendo-chip", 21);
|
|
33
|
+
i0.ɵɵelement(1, "i", 14);
|
|
34
|
+
i0.ɵɵtext(2, " Stale ");
|
|
35
|
+
i0.ɵɵelementEnd();
|
|
36
|
+
} if (rf & 2) {
|
|
37
|
+
i0.ɵɵproperty("themeColor", "error")("size", "small");
|
|
38
|
+
} }
|
|
39
|
+
function SchedulingHealthComponent_Conditional_17_Conditional_2_For_17_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
40
|
+
i0.ɵɵelementStart(0, "kendo-chip", 21);
|
|
41
|
+
i0.ɵɵelement(1, "i", 23);
|
|
42
|
+
i0.ɵɵtext(2, " Active ");
|
|
43
|
+
i0.ɵɵelementEnd();
|
|
44
|
+
} if (rf & 2) {
|
|
45
|
+
i0.ɵɵproperty("themeColor", "success")("size", "small");
|
|
46
|
+
} }
|
|
47
|
+
function SchedulingHealthComponent_Conditional_17_Conditional_2_For_17_Template(rf, ctx) { if (rf & 1) {
|
|
48
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
49
|
+
i0.ɵɵelementStart(0, "tr")(1, "td");
|
|
50
|
+
i0.ɵɵtext(2);
|
|
51
|
+
i0.ɵɵelementEnd();
|
|
52
|
+
i0.ɵɵelementStart(3, "td")(4, "code");
|
|
53
|
+
i0.ɵɵtext(5);
|
|
54
|
+
i0.ɵɵelementEnd()();
|
|
55
|
+
i0.ɵɵelementStart(6, "td");
|
|
56
|
+
i0.ɵɵtext(7);
|
|
57
|
+
i0.ɵɵelementEnd();
|
|
58
|
+
i0.ɵɵelementStart(8, "td");
|
|
59
|
+
i0.ɵɵtext(9);
|
|
60
|
+
i0.ɵɵelementEnd();
|
|
61
|
+
i0.ɵɵelementStart(10, "td");
|
|
62
|
+
i0.ɵɵtemplate(11, SchedulingHealthComponent_Conditional_17_Conditional_2_For_17_Conditional_11_Template, 3, 2, "kendo-chip", 21)(12, SchedulingHealthComponent_Conditional_17_Conditional_2_For_17_Conditional_12_Template, 3, 2, "kendo-chip", 21);
|
|
63
|
+
i0.ɵɵelementEnd();
|
|
64
|
+
i0.ɵɵelementStart(13, "td")(14, "button", 22);
|
|
65
|
+
i0.ɵɵlistener("click", function SchedulingHealthComponent_Conditional_17_Conditional_2_For_17_Template_button_click_14_listener() { const lock_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.onReleaseLock(lock_r3.jobId)); });
|
|
66
|
+
i0.ɵɵelement(15, "i", 19);
|
|
67
|
+
i0.ɵɵtext(16, " Release ");
|
|
68
|
+
i0.ɵɵelementEnd()()();
|
|
69
|
+
} if (rf & 2) {
|
|
70
|
+
const lock_r3 = ctx.$implicit;
|
|
71
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
72
|
+
i0.ɵɵclassProp("stale-lock", lock_r3.isStale);
|
|
73
|
+
i0.ɵɵadvance(2);
|
|
74
|
+
i0.ɵɵtextInterpolate(lock_r3.jobName);
|
|
75
|
+
i0.ɵɵadvance(3);
|
|
76
|
+
i0.ɵɵtextInterpolate(lock_r3.lockedBy);
|
|
77
|
+
i0.ɵɵadvance(2);
|
|
78
|
+
i0.ɵɵtextInterpolate(ctx_r0.formatDate(lock_r3.lockedAt));
|
|
79
|
+
i0.ɵɵadvance(2);
|
|
80
|
+
i0.ɵɵtextInterpolate(ctx_r0.formatDate(lock_r3.expectedCompletion));
|
|
81
|
+
i0.ɵɵadvance(2);
|
|
82
|
+
i0.ɵɵconditional(lock_r3.isStale ? 11 : 12);
|
|
83
|
+
i0.ɵɵadvance(3);
|
|
84
|
+
i0.ɵɵproperty("size", "small");
|
|
85
|
+
} }
|
|
86
|
+
function SchedulingHealthComponent_Conditional_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
87
|
+
i0.ɵɵelementStart(0, "table", 18)(1, "thead")(2, "tr")(3, "th");
|
|
88
|
+
i0.ɵɵtext(4, "Job Name");
|
|
89
|
+
i0.ɵɵelementEnd();
|
|
90
|
+
i0.ɵɵelementStart(5, "th");
|
|
91
|
+
i0.ɵɵtext(6, "Locked By");
|
|
92
|
+
i0.ɵɵelementEnd();
|
|
93
|
+
i0.ɵɵelementStart(7, "th");
|
|
94
|
+
i0.ɵɵtext(8, "Locked At");
|
|
95
|
+
i0.ɵɵelementEnd();
|
|
96
|
+
i0.ɵɵelementStart(9, "th");
|
|
97
|
+
i0.ɵɵtext(10, "Expected Completion");
|
|
98
|
+
i0.ɵɵelementEnd();
|
|
99
|
+
i0.ɵɵelementStart(11, "th");
|
|
100
|
+
i0.ɵɵtext(12, "Status");
|
|
101
|
+
i0.ɵɵelementEnd();
|
|
102
|
+
i0.ɵɵelementStart(13, "th");
|
|
103
|
+
i0.ɵɵtext(14, "Actions");
|
|
104
|
+
i0.ɵɵelementEnd()()();
|
|
105
|
+
i0.ɵɵelementStart(15, "tbody");
|
|
106
|
+
i0.ɵɵrepeaterCreate(16, SchedulingHealthComponent_Conditional_17_Conditional_2_For_17_Template, 17, 8, "tr", 20, _forTrack0);
|
|
107
|
+
i0.ɵɵelementEnd()();
|
|
108
|
+
} if (rf & 2) {
|
|
109
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
110
|
+
i0.ɵɵadvance(16);
|
|
111
|
+
i0.ɵɵrepeater(ctx_r0.locks);
|
|
112
|
+
} }
|
|
113
|
+
function SchedulingHealthComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
114
|
+
i0.ɵɵelementStart(0, "div", 13);
|
|
115
|
+
i0.ɵɵtemplate(1, SchedulingHealthComponent_Conditional_17_Conditional_1_Template, 4, 0, "div", 17)(2, SchedulingHealthComponent_Conditional_17_Conditional_2_Template, 18, 0, "table", 18);
|
|
116
|
+
i0.ɵɵelementEnd();
|
|
117
|
+
} if (rf & 2) {
|
|
118
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
119
|
+
i0.ɵɵadvance();
|
|
120
|
+
i0.ɵɵconditional(ctx_r0.locks.length === 0 ? 1 : 2);
|
|
121
|
+
} }
|
|
122
|
+
function SchedulingHealthComponent_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
123
|
+
i0.ɵɵelementStart(0, "span", 15);
|
|
124
|
+
i0.ɵɵtext(1);
|
|
125
|
+
i0.ɵɵelementEnd();
|
|
126
|
+
} if (rf & 2) {
|
|
127
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
128
|
+
i0.ɵɵadvance();
|
|
129
|
+
i0.ɵɵtextInterpolate(ctx_r0.getStaleLocks().length);
|
|
130
|
+
} }
|
|
131
|
+
function SchedulingHealthComponent_Conditional_25_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
132
|
+
i0.ɵɵelementStart(0, "div", 17);
|
|
133
|
+
i0.ɵɵelement(1, "i", 25);
|
|
134
|
+
i0.ɵɵelementStart(2, "p");
|
|
135
|
+
i0.ɵɵtext(3, "No alerts detected");
|
|
136
|
+
i0.ɵɵelementEnd()();
|
|
137
|
+
} }
|
|
138
|
+
function SchedulingHealthComponent_Conditional_25_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
139
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
140
|
+
i0.ɵɵelementStart(0, "div", 26);
|
|
141
|
+
i0.ɵɵelement(1, "i", 27);
|
|
142
|
+
i0.ɵɵelementStart(2, "div", 28)(3, "div", 29);
|
|
143
|
+
i0.ɵɵtext(4, "Stale Lock Detected");
|
|
144
|
+
i0.ɵɵelementEnd();
|
|
145
|
+
i0.ɵɵelementStart(5, "div", 30);
|
|
146
|
+
i0.ɵɵtext(6);
|
|
147
|
+
i0.ɵɵelementEnd()();
|
|
148
|
+
i0.ɵɵelementStart(7, "button", 22);
|
|
149
|
+
i0.ɵɵlistener("click", function SchedulingHealthComponent_Conditional_25_Conditional_2_For_2_Template_button_click_7_listener() { const lock_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.onReleaseLock(lock_r5.jobId)); });
|
|
150
|
+
i0.ɵɵelement(8, "i", 19);
|
|
151
|
+
i0.ɵɵtext(9, " Release Lock ");
|
|
152
|
+
i0.ɵɵelementEnd()();
|
|
153
|
+
} if (rf & 2) {
|
|
154
|
+
const lock_r5 = ctx.$implicit;
|
|
155
|
+
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
156
|
+
i0.ɵɵadvance(6);
|
|
157
|
+
i0.ɵɵtextInterpolate3(" Job \"", lock_r5.jobName, "\" has a stale lock held by ", lock_r5.lockedBy, ". Expected completion was ", ctx_r0.formatDate(lock_r5.expectedCompletion), ". ");
|
|
158
|
+
i0.ɵɵadvance();
|
|
159
|
+
i0.ɵɵproperty("size", "small");
|
|
160
|
+
} }
|
|
161
|
+
function SchedulingHealthComponent_Conditional_25_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
162
|
+
i0.ɵɵelementStart(0, "div", 24);
|
|
163
|
+
i0.ɵɵrepeaterCreate(1, SchedulingHealthComponent_Conditional_25_Conditional_2_For_2_Template, 10, 4, "div", 26, _forTrack0);
|
|
164
|
+
i0.ɵɵelementEnd();
|
|
165
|
+
} if (rf & 2) {
|
|
166
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
167
|
+
i0.ɵɵadvance();
|
|
168
|
+
i0.ɵɵrepeater(ctx_r0.getStaleLocks());
|
|
169
|
+
} }
|
|
170
|
+
function SchedulingHealthComponent_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
171
|
+
i0.ɵɵelementStart(0, "div", 13);
|
|
172
|
+
i0.ɵɵtemplate(1, SchedulingHealthComponent_Conditional_25_Conditional_1_Template, 4, 0, "div", 17)(2, SchedulingHealthComponent_Conditional_25_Conditional_2_Template, 3, 0, "div", 24);
|
|
173
|
+
i0.ɵɵelementEnd();
|
|
174
|
+
} if (rf & 2) {
|
|
175
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
176
|
+
i0.ɵɵadvance();
|
|
177
|
+
i0.ɵɵconditional(ctx_r0.getStaleLocks().length === 0 ? 1 : 2);
|
|
178
|
+
} }
|
|
179
|
+
export class SchedulingHealthComponent {
|
|
180
|
+
schedulingService;
|
|
181
|
+
cdr;
|
|
182
|
+
initialState;
|
|
183
|
+
stateChange = new EventEmitter();
|
|
184
|
+
locks = [];
|
|
185
|
+
isLoading = false;
|
|
186
|
+
panelStates = {
|
|
187
|
+
locks: true,
|
|
188
|
+
alerts: true
|
|
189
|
+
};
|
|
190
|
+
destroy$ = new Subject();
|
|
191
|
+
constructor(schedulingService, cdr) {
|
|
192
|
+
this.schedulingService = schedulingService;
|
|
193
|
+
this.cdr = cdr;
|
|
194
|
+
}
|
|
195
|
+
ngOnInit() {
|
|
196
|
+
this.loadState();
|
|
197
|
+
this.loadData();
|
|
198
|
+
}
|
|
199
|
+
ngOnDestroy() {
|
|
200
|
+
this.destroy$.next();
|
|
201
|
+
this.destroy$.complete();
|
|
202
|
+
}
|
|
203
|
+
loadState() {
|
|
204
|
+
if (this.initialState?.panelStates) {
|
|
205
|
+
this.panelStates = { ...this.panelStates, ...this.initialState.panelStates };
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
loadData() {
|
|
209
|
+
this.isLoading = true;
|
|
210
|
+
this.schedulingService.lockInfo$
|
|
211
|
+
.pipe(takeUntil(this.destroy$))
|
|
212
|
+
.subscribe({
|
|
213
|
+
next: (locks) => {
|
|
214
|
+
this.locks = locks;
|
|
215
|
+
this.isLoading = false;
|
|
216
|
+
this.cdr.markForCheck();
|
|
217
|
+
},
|
|
218
|
+
error: (error) => {
|
|
219
|
+
console.error('Error loading lock info:', error);
|
|
220
|
+
this.isLoading = false;
|
|
221
|
+
this.cdr.markForCheck();
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
onRefresh() {
|
|
226
|
+
this.schedulingService.refresh();
|
|
227
|
+
}
|
|
228
|
+
togglePanel(panelName) {
|
|
229
|
+
this.panelStates[panelName] = !this.panelStates[panelName];
|
|
230
|
+
this.emitStateChange();
|
|
231
|
+
}
|
|
232
|
+
async onReleaseLock(jobId) {
|
|
233
|
+
if (confirm('Are you sure you want to force release this lock? This should only be done if the job is stuck.')) {
|
|
234
|
+
const result = await this.schedulingService.releaseLock(jobId);
|
|
235
|
+
if (result) {
|
|
236
|
+
console.log('Lock released successfully');
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
formatDate(date) {
|
|
241
|
+
return new Date(date).toLocaleString();
|
|
242
|
+
}
|
|
243
|
+
getStaleLocks() {
|
|
244
|
+
return this.locks.filter(l => l.isStale);
|
|
245
|
+
}
|
|
246
|
+
emitStateChange() {
|
|
247
|
+
const state = {
|
|
248
|
+
panelStates: this.panelStates
|
|
249
|
+
};
|
|
250
|
+
this.stateChange.emit(state);
|
|
251
|
+
}
|
|
252
|
+
static ɵfac = function SchedulingHealthComponent_Factory(t) { return new (t || SchedulingHealthComponent)(i0.ɵɵdirectiveInject(i1.SchedulingInstrumentationService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
253
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SchedulingHealthComponent, selectors: [["app-scheduling-health"]], inputs: { initialState: "initialState" }, outputs: { stateChange: "stateChange" }, decls: 26, vars: 16, consts: [[1, "scheduling-health"], [1, "health-header"], [1, "fa-solid", "fa-heartbeat"], ["kendoButton", "", 3, "click", "disabled"], [1, "fa-solid", "fa-refresh"], [1, "loading-overlay"], [1, "health-panels"], [1, "panel"], [1, "panel-header", 3, "click"], [1, "panel-title"], [1, "fa-solid", "fa-lock"], [1, "badge"], [1, "fa-solid", "panel-toggle-icon"], [1, "panel-content"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "badge", "error"], [1, "fa-solid", "fa-spinner", "fa-spin", "fa-3x"], [1, "empty-state-small"], [1, "lock-table"], [1, "fa-solid", "fa-unlock"], [3, "stale-lock"], [3, "themeColor", "size"], ["kendoButton", "", 3, "click", "size"], [1, "fa-solid", "fa-check"], [1, "alert-list"], [1, "fa-solid", "fa-check-circle"], [1, "alert-item", "error"], [1, "fa-solid", "fa-exclamation-circle"], [1, "alert-content"], [1, "alert-title"], [1, "alert-message"]], template: function SchedulingHealthComponent_Template(rf, ctx) { if (rf & 1) {
|
|
254
|
+
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "h2");
|
|
255
|
+
i0.ɵɵelement(3, "i", 2);
|
|
256
|
+
i0.ɵɵtext(4, " System Health");
|
|
257
|
+
i0.ɵɵelementEnd();
|
|
258
|
+
i0.ɵɵelementStart(5, "button", 3);
|
|
259
|
+
i0.ɵɵlistener("click", function SchedulingHealthComponent_Template_button_click_5_listener() { return ctx.onRefresh(); });
|
|
260
|
+
i0.ɵɵelement(6, "i", 4);
|
|
261
|
+
i0.ɵɵtext(7, " Refresh ");
|
|
262
|
+
i0.ɵɵelementEnd()();
|
|
263
|
+
i0.ɵɵtemplate(8, SchedulingHealthComponent_Conditional_8_Template, 4, 0, "div", 5);
|
|
264
|
+
i0.ɵɵelementStart(9, "div", 6)(10, "div", 7)(11, "div", 8);
|
|
265
|
+
i0.ɵɵlistener("click", function SchedulingHealthComponent_Template_div_click_11_listener() { return ctx.togglePanel("locks"); });
|
|
266
|
+
i0.ɵɵelementStart(12, "span", 9);
|
|
267
|
+
i0.ɵɵelement(13, "i", 10);
|
|
268
|
+
i0.ɵɵtext(14, " Active Locks ");
|
|
269
|
+
i0.ɵɵtemplate(15, SchedulingHealthComponent_Conditional_15_Template, 2, 1, "span", 11);
|
|
270
|
+
i0.ɵɵelementEnd();
|
|
271
|
+
i0.ɵɵelement(16, "i", 12);
|
|
272
|
+
i0.ɵɵelementEnd();
|
|
273
|
+
i0.ɵɵtemplate(17, SchedulingHealthComponent_Conditional_17_Template, 3, 1, "div", 13);
|
|
274
|
+
i0.ɵɵelementEnd();
|
|
275
|
+
i0.ɵɵelementStart(18, "div", 7)(19, "div", 8);
|
|
276
|
+
i0.ɵɵlistener("click", function SchedulingHealthComponent_Template_div_click_19_listener() { return ctx.togglePanel("alerts"); });
|
|
277
|
+
i0.ɵɵelementStart(20, "span", 9);
|
|
278
|
+
i0.ɵɵelement(21, "i", 14);
|
|
279
|
+
i0.ɵɵtext(22, " Alert Conditions ");
|
|
280
|
+
i0.ɵɵtemplate(23, SchedulingHealthComponent_Conditional_23_Template, 2, 1, "span", 15);
|
|
281
|
+
i0.ɵɵelementEnd();
|
|
282
|
+
i0.ɵɵelement(24, "i", 12);
|
|
283
|
+
i0.ɵɵelementEnd();
|
|
284
|
+
i0.ɵɵtemplate(25, SchedulingHealthComponent_Conditional_25_Template, 3, 1, "div", 13);
|
|
285
|
+
i0.ɵɵelementEnd()()();
|
|
286
|
+
} if (rf & 2) {
|
|
287
|
+
i0.ɵɵadvance(5);
|
|
288
|
+
i0.ɵɵproperty("disabled", ctx.isLoading);
|
|
289
|
+
i0.ɵɵadvance();
|
|
290
|
+
i0.ɵɵclassProp("fa-spin", ctx.isLoading);
|
|
291
|
+
i0.ɵɵadvance(2);
|
|
292
|
+
i0.ɵɵconditional(ctx.isLoading ? 8 : -1);
|
|
293
|
+
i0.ɵɵadvance(7);
|
|
294
|
+
i0.ɵɵconditional(ctx.locks.length > 0 ? 15 : -1);
|
|
295
|
+
i0.ɵɵadvance();
|
|
296
|
+
i0.ɵɵclassProp("fa-chevron-down", !ctx.panelStates.locks)("fa-chevron-up", ctx.panelStates.locks);
|
|
297
|
+
i0.ɵɵadvance();
|
|
298
|
+
i0.ɵɵconditional(ctx.panelStates.locks ? 17 : -1);
|
|
299
|
+
i0.ɵɵadvance(6);
|
|
300
|
+
i0.ɵɵconditional(ctx.getStaleLocks().length > 0 ? 23 : -1);
|
|
301
|
+
i0.ɵɵadvance();
|
|
302
|
+
i0.ɵɵclassProp("fa-chevron-down", !ctx.panelStates.alerts)("fa-chevron-up", ctx.panelStates.alerts);
|
|
303
|
+
i0.ɵɵadvance();
|
|
304
|
+
i0.ɵɵconditional(ctx.panelStates.alerts ? 25 : -1);
|
|
305
|
+
} }, dependencies: [i2.ButtonComponent, i2.ChipComponent], styles: [".scheduling-health[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.health-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n h2 {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 12px;\n\n i {\n color: #0078d4;\n }\n }\n}\n\n.loading-overlay[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px;\n color: #6c757d;\n\n i {\n color: #0078d4;\n margin-bottom: 20px;\n }\n}\n\n.health-panels[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n overflow: auto;\n flex: 1;\n}\n\n.panel[_ngcontent-%COMP%] {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid #dee2e6;\n cursor: pointer;\n transition: background 0.2s;\n\n &:hover {\n background: #f8f9fa;\n }\n\n .panel-title {\n font-size: 16px;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 8px;\n\n i {\n color: #0078d4;\n }\n\n .badge {\n background: #0078d4;\n color: white;\n padding: 4px 12px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n\n &.error {\n background: #d13438;\n }\n }\n }\n\n .panel-toggle-icon {\n color: #6c757d;\n font-size: 14px;\n }\n}\n\n.panel-content[_ngcontent-%COMP%] {\n padding: 20px;\n}\n\n.empty-state-small[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n color: #6c757d;\n\n i {\n font-size: 36px;\n margin-bottom: 12px;\n opacity: 0.3;\n }\n\n p {\n margin: 0;\n font-size: 14px;\n }\n}\n\n.lock-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n\n thead {\n background: #f8f9fa;\n\n th {\n padding: 12px;\n text-align: left;\n font-size: 13px;\n font-weight: 600;\n color: #495057;\n border-bottom: 2px solid #dee2e6;\n }\n }\n\n tbody {\n tr {\n border-bottom: 1px solid #dee2e6;\n transition: background 0.2s;\n\n &:hover {\n background: #f8f9fa;\n }\n\n &.stale-lock {\n background: #f8d7da;\n\n &:hover {\n background: #f5c2c7;\n }\n }\n\n td {\n padding: 12px;\n font-size: 13px;\n\n code {\n background: #f8f9fa;\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 12px;\n font-family: 'Courier New', monospace;\n }\n }\n }\n }\n}\n\n.alert-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.alert-item[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding: 16px;\n border-radius: 8px;\n align-items: flex-start;\n\n &.error {\n background: #f8d7da;\n border-left: 4px solid #d13438;\n\n > i {\n color: #d13438;\n font-size: 20px;\n }\n }\n\n .alert-content {\n flex: 1;\n\n .alert-title {\n font-weight: 600;\n margin-bottom: 4px;\n color: #212529;\n }\n\n .alert-message {\n font-size: 13px;\n color: #495057;\n }\n }\n}"] });
|
|
306
|
+
}
|
|
307
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SchedulingHealthComponent, [{
|
|
308
|
+
type: Component,
|
|
309
|
+
args: [{ selector: 'app-scheduling-health', template: "<div class=\"scheduling-health\">\n <div class=\"health-header\">\n <h2><i class=\"fa-solid fa-heartbeat\"></i> System Health</h2>\n <button kendoButton (click)=\"onRefresh()\" [disabled]=\"isLoading\">\n <i class=\"fa-solid fa-refresh\" [class.fa-spin]=\"isLoading\"></i>\n Refresh\n </button>\n </div>\n\n @if (isLoading) {\n <div class=\"loading-overlay\">\n <i class=\"fa-solid fa-spinner fa-spin fa-3x\"></i>\n <p>Loading system health...</p>\n </div>\n }\n\n <div class=\"health-panels\">\n <div class=\"panel\">\n <div class=\"panel-header\" (click)=\"togglePanel('locks')\">\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-lock\"></i>\n Active Locks\n @if (locks.length > 0) {\n <span class=\"badge\">{{ locks.length }}</span>\n }\n </span>\n <i class=\"fa-solid panel-toggle-icon\"\n [class.fa-chevron-down]=\"!panelStates.locks\"\n [class.fa-chevron-up]=\"panelStates.locks\">\n </i>\n </div>\n @if (panelStates.locks) {\n <div class=\"panel-content\">\n @if (locks.length === 0) {\n <div class=\"empty-state-small\">\n <i class=\"fa-solid fa-unlock\"></i>\n <p>No active locks</p>\n </div>\n } @else {\n <table class=\"lock-table\">\n <thead>\n <tr>\n <th>Job Name</th>\n <th>Locked By</th>\n <th>Locked At</th>\n <th>Expected Completion</th>\n <th>Status</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (lock of locks; track lock.jobId) {\n <tr [class.stale-lock]=\"lock.isStale\">\n <td>{{ lock.jobName }}</td>\n <td>\n <code>{{ lock.lockedBy }}</code>\n </td>\n <td>{{ formatDate(lock.lockedAt) }}</td>\n <td>{{ formatDate(lock.expectedCompletion) }}</td>\n <td>\n @if (lock.isStale) {\n <kendo-chip [themeColor]=\"'error'\" [size]=\"'small'\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n Stale\n </kendo-chip>\n } @else {\n <kendo-chip [themeColor]=\"'success'\" [size]=\"'small'\">\n <i class=\"fa-solid fa-check\"></i>\n Active\n </kendo-chip>\n }\n </td>\n <td>\n <button kendoButton [size]=\"'small'\" (click)=\"onReleaseLock(lock.jobId)\">\n <i class=\"fa-solid fa-unlock\"></i>\n Release\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n }\n </div>\n\n <div class=\"panel\">\n <div class=\"panel-header\" (click)=\"togglePanel('alerts')\">\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n Alert Conditions\n @if (getStaleLocks().length > 0) {\n <span class=\"badge error\">{{ getStaleLocks().length }}</span>\n }\n </span>\n <i class=\"fa-solid panel-toggle-icon\"\n [class.fa-chevron-down]=\"!panelStates.alerts\"\n [class.fa-chevron-up]=\"panelStates.alerts\">\n </i>\n </div>\n @if (panelStates.alerts) {\n <div class=\"panel-content\">\n @if (getStaleLocks().length === 0) {\n <div class=\"empty-state-small\">\n <i class=\"fa-solid fa-check-circle\"></i>\n <p>No alerts detected</p>\n </div>\n } @else {\n <div class=\"alert-list\">\n @for (lock of getStaleLocks(); track lock.jobId) {\n <div class=\"alert-item error\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n <div class=\"alert-content\">\n <div class=\"alert-title\">Stale Lock Detected</div>\n <div class=\"alert-message\">\n Job \"{{ lock.jobName }}\" has a stale lock held by {{ lock.lockedBy }}.\n Expected completion was {{ formatDate(lock.expectedCompletion) }}.\n </div>\n </div>\n <button kendoButton [size]=\"'small'\" (click)=\"onReleaseLock(lock.jobId)\">\n <i class=\"fa-solid fa-unlock\"></i>\n Release Lock\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n</div>\n", styles: [".scheduling-health {\n height: 100%;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.health-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n h2 {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 12px;\n\n i {\n color: #0078d4;\n }\n }\n}\n\n.loading-overlay {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px;\n color: #6c757d;\n\n i {\n color: #0078d4;\n margin-bottom: 20px;\n }\n}\n\n.health-panels {\n display: flex;\n flex-direction: column;\n gap: 20px;\n overflow: auto;\n flex: 1;\n}\n\n.panel {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n}\n\n.panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid #dee2e6;\n cursor: pointer;\n transition: background 0.2s;\n\n &:hover {\n background: #f8f9fa;\n }\n\n .panel-title {\n font-size: 16px;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 8px;\n\n i {\n color: #0078d4;\n }\n\n .badge {\n background: #0078d4;\n color: white;\n padding: 4px 12px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n\n &.error {\n background: #d13438;\n }\n }\n }\n\n .panel-toggle-icon {\n color: #6c757d;\n font-size: 14px;\n }\n}\n\n.panel-content {\n padding: 20px;\n}\n\n.empty-state-small {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n color: #6c757d;\n\n i {\n font-size: 36px;\n margin-bottom: 12px;\n opacity: 0.3;\n }\n\n p {\n margin: 0;\n font-size: 14px;\n }\n}\n\n.lock-table {\n width: 100%;\n border-collapse: collapse;\n\n thead {\n background: #f8f9fa;\n\n th {\n padding: 12px;\n text-align: left;\n font-size: 13px;\n font-weight: 600;\n color: #495057;\n border-bottom: 2px solid #dee2e6;\n }\n }\n\n tbody {\n tr {\n border-bottom: 1px solid #dee2e6;\n transition: background 0.2s;\n\n &:hover {\n background: #f8f9fa;\n }\n\n &.stale-lock {\n background: #f8d7da;\n\n &:hover {\n background: #f5c2c7;\n }\n }\n\n td {\n padding: 12px;\n font-size: 13px;\n\n code {\n background: #f8f9fa;\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 12px;\n font-family: 'Courier New', monospace;\n }\n }\n }\n }\n}\n\n.alert-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.alert-item {\n display: flex;\n gap: 12px;\n padding: 16px;\n border-radius: 8px;\n align-items: flex-start;\n\n &.error {\n background: #f8d7da;\n border-left: 4px solid #d13438;\n\n > i {\n color: #d13438;\n font-size: 20px;\n }\n }\n\n .alert-content {\n flex: 1;\n\n .alert-title {\n font-weight: 600;\n margin-bottom: 4px;\n color: #212529;\n }\n\n .alert-message {\n font-size: 13px;\n color: #495057;\n }\n }\n}\n"] }]
|
|
310
|
+
}], () => [{ type: i1.SchedulingInstrumentationService }, { type: i0.ChangeDetectorRef }], { initialState: [{
|
|
311
|
+
type: Input
|
|
312
|
+
}], stateChange: [{
|
|
313
|
+
type: Output
|
|
314
|
+
}] }); })();
|
|
315
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SchedulingHealthComponent, { className: "SchedulingHealthComponent", filePath: "src/Scheduling/components/scheduling-health.component.ts", lineNumber: 11 }); })();
|
|
316
|
+
//# sourceMappingURL=scheduling-health.component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduling-health.component.js","sourceRoot":"","sources":["../../../src/Scheduling/components/scheduling-health.component.ts","../../../src/Scheduling/components/scheduling-health.component.html"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { OnInit, OnDestroy, EventEmitter, ChangeDetectorRef } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import { SchedulingInstrumentationService, JobExecution, ExecutionTrendData } from '../services/scheduling-instrumentation.service';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class SchedulingHistoryComponent implements OnInit, OnDestroy {
|
|
6
|
+
private schedulingService;
|
|
7
|
+
private cdr;
|
|
8
|
+
initialState: any;
|
|
9
|
+
stateChange: EventEmitter<any>;
|
|
10
|
+
executions: JobExecution[];
|
|
11
|
+
filteredExecutions: JobExecution[];
|
|
12
|
+
trends: ExecutionTrendData[];
|
|
13
|
+
isLoading: boolean;
|
|
14
|
+
dateRange: {
|
|
15
|
+
start: Date;
|
|
16
|
+
end: Date;
|
|
17
|
+
};
|
|
18
|
+
searchTerm$: BehaviorSubject<string>;
|
|
19
|
+
statusFilter$: BehaviorSubject<string>;
|
|
20
|
+
statusOptions: {
|
|
21
|
+
text: string;
|
|
22
|
+
value: string;
|
|
23
|
+
}[];
|
|
24
|
+
timeRangeOptions: {
|
|
25
|
+
text: string;
|
|
26
|
+
value: number;
|
|
27
|
+
}[];
|
|
28
|
+
private destroy$;
|
|
29
|
+
constructor(schedulingService: SchedulingInstrumentationService, cdr: ChangeDetectorRef);
|
|
30
|
+
ngOnInit(): void;
|
|
31
|
+
ngOnDestroy(): void;
|
|
32
|
+
private loadState;
|
|
33
|
+
private setupFilters;
|
|
34
|
+
private loadData;
|
|
35
|
+
private applyFilters;
|
|
36
|
+
onSearchChange(value: string): void;
|
|
37
|
+
onStatusFilterChange(value: string): void;
|
|
38
|
+
onTimeRangeChange(days: number): void;
|
|
39
|
+
onRefresh(): void;
|
|
40
|
+
getStatusClass(status: string): string;
|
|
41
|
+
getStatusIcon(status: string): string;
|
|
42
|
+
formatDuration(ms?: number): string;
|
|
43
|
+
formatDate(date: Date): string;
|
|
44
|
+
private emitStateChange;
|
|
45
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<SchedulingHistoryComponent, never>;
|
|
46
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SchedulingHistoryComponent, "app-scheduling-history", never, { "initialState": { "alias": "initialState"; "required": false; }; }, { "stateChange": "stateChange"; }, never, never, false, never>;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=scheduling-history.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduling-history.component.d.ts","sourceRoot":"","sources":["../../../src/Scheduling/components/scheduling-history.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAiB,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC7G,OAAO,EAAW,eAAe,EAAiB,MAAM,MAAM,CAAC;AAE/D,OAAO,EAAE,gCAAgC,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;;AAEpI,qBAKa,0BAA2B,YAAW,MAAM,EAAE,SAAS;IAoChE,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,GAAG;IApCJ,YAAY,EAAE,GAAG,CAAC;IACjB,WAAW,oBAA2B;IAEzC,UAAU,EAAE,YAAY,EAAE,CAAM;IAChC,kBAAkB,EAAE,YAAY,EAAE,CAAM;IACxC,MAAM,EAAE,kBAAkB,EAAE,CAAM;IAClC,SAAS,UAAS;IAElB,SAAS;;;MAGd;IAEK,WAAW,0BAAmC;IAC9C,aAAa,0BAAsC;IAEnD,aAAa;;;QAOlB;IAEK,gBAAgB;;;QAKrB;IAEF,OAAO,CAAC,QAAQ,CAAuB;gBAG7B,iBAAiB,EAAE,gCAAgC,EACnD,GAAG,EAAE,iBAAiB;IAGhC,QAAQ,IAAI,IAAI;IAMhB,WAAW,IAAI,IAAI;IAKnB,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,QAAQ;IAiChB,OAAO,CAAC,YAAY;IAqBb,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAInC,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQrC,SAAS,IAAI,IAAI;IAIjB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAWtC,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAWrC,cAAc,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAUnC,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAIrC,OAAO,CAAC,eAAe;yCA1LZ,0BAA0B;2CAA1B,0BAA0B;CAkMtC"}
|