@hmcts/media-viewer 4.1.8-exui-2600-1 → 4.1.8-exui-2489

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 (37) hide show
  1. package/assets/sass/box-highlight.scss +0 -38
  2. package/esm2022/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.mjs +19 -74
  3. package/esm2022/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.mjs +4 -4
  4. package/esm2022/lib/annotations/annotation-set/annotation-view/annotation-view.component.mjs +3 -37
  5. package/esm2022/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.mjs +3 -39
  6. package/esm2022/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.mjs +3 -3
  7. package/esm2022/lib/annotations/annotations.module.mjs +3 -9
  8. package/esm2022/lib/store/actions/annotation.actions.mjs +2 -3
  9. package/esm2022/lib/store/effects/annotation.effects.mjs +3 -13
  10. package/esm2022/lib/viewers/pdf-viewer/pdf-viewer.component.mjs +28 -3
  11. package/fesm2022/hmcts-media-viewer.mjs +60 -545
  12. package/fesm2022/hmcts-media-viewer.mjs.map +1 -1
  13. package/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.d.ts +2 -16
  14. package/lib/annotations/annotation-set/annotation-create/box-highlight-create/box-highlight-create.component.d.ts.map +1 -1
  15. package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.d.ts +1 -1
  16. package/lib/annotations/annotation-set/annotation-create/highlight-create/highlight-create.service.d.ts.map +1 -1
  17. package/lib/annotations/annotation-set/annotation-view/annotation-view.component.d.ts +2 -8
  18. package/lib/annotations/annotation-set/annotation-view/annotation-view.component.d.ts.map +1 -1
  19. package/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.d.ts +1 -10
  20. package/lib/annotations/annotation-set/annotation-view/rectangle/rectangle.component.d.ts.map +1 -1
  21. package/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.d.ts +1 -2
  22. package/lib/annotations/annotation-set/metadata-layer/metadata-layer.component.d.ts.map +1 -1
  23. package/lib/annotations/annotations.module.d.ts +11 -13
  24. package/lib/annotations/annotations.module.d.ts.map +1 -1
  25. package/lib/store/actions/annotation.actions.d.ts +1 -2
  26. package/lib/store/actions/annotation.actions.d.ts.map +1 -1
  27. package/lib/store/effects/annotation.effects.d.ts +0 -1
  28. package/lib/store/effects/annotation.effects.d.ts.map +1 -1
  29. package/lib/viewers/pdf-viewer/pdf-viewer.component.d.ts +1 -0
  30. package/lib/viewers/pdf-viewer/pdf-viewer.component.d.ts.map +1 -1
  31. package/package.json +1 -1
  32. package/esm2022/lib/annotations/annotation-set/annotation-create/box-highlight-create/keyboard-box-draw.directive.mjs +0 -258
  33. package/esm2022/lib/annotations/annotation-set/annotation-view/rectangle/keyboard-box-move.directive.mjs +0 -122
  34. package/lib/annotations/annotation-set/annotation-create/box-highlight-create/keyboard-box-draw.directive.d.ts +0 -59
  35. package/lib/annotations/annotation-set/annotation-create/box-highlight-create/keyboard-box-draw.directive.d.ts.map +0 -1
  36. package/lib/annotations/annotation-set/annotation-view/rectangle/keyboard-box-move.directive.d.ts +0 -27
  37. package/lib/annotations/annotation-set/annotation-view/rectangle/keyboard-box-move.directive.d.ts.map +0 -1
@@ -1,258 +0,0 @@
1
- import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class KeyboardBoxDrawDirective {
4
- set enabled(value) {
5
- const wasEnabled = this._enabled;
6
- this._enabled = value;
7
- if (value && !wasEnabled && KeyboardBoxDrawDirective.lastInteractionWasKeyboard && !this.showCursor) {
8
- this.initializeCursorForKeyboard();
9
- }
10
- }
11
- get enabled() {
12
- return this._enabled;
13
- }
14
- static { this.lastInteractionWasKeyboard = false; }
15
- constructor(elementRef) {
16
- this.elementRef = elementRef;
17
- this._enabled = false;
18
- this.minBoxSize = 10;
19
- this.incrementSmall = 1;
20
- this.incrementMedium = 5;
21
- this.incrementLarge = 10;
22
- this.drawingStarted = new EventEmitter();
23
- this.drawingUpdated = new EventEmitter();
24
- this.drawingConfirmed = new EventEmitter();
25
- this.drawingCancelled = new EventEmitter();
26
- this.cursorPositionChanged = new EventEmitter();
27
- this.isDrawing = false;
28
- this.showCursor = false;
29
- if (typeof window !== 'undefined') {
30
- window.addEventListener('keydown', KeyboardBoxDrawDirective.onGlobalKeyDown, { capture: true });
31
- window.addEventListener('mousedown', KeyboardBoxDrawDirective.onGlobalMouseDown, { capture: true });
32
- }
33
- }
34
- static onGlobalKeyDown() {
35
- KeyboardBoxDrawDirective.lastInteractionWasKeyboard = true;
36
- }
37
- static onGlobalMouseDown() {
38
- KeyboardBoxDrawDirective.lastInteractionWasKeyboard = false;
39
- }
40
- ngOnDestroy() {
41
- this.cleanup();
42
- }
43
- initializeCursorForKeyboard() {
44
- if (this.enabled && !this.showCursor && !this.isDrawing) {
45
- const rect = this.elementRef.nativeElement.getBoundingClientRect();
46
- if (rect.width > 0 && rect.height > 0) {
47
- this.cursorX = rect.width / 2;
48
- this.cursorY = rect.height / 2;
49
- this.showCursor = true;
50
- this.emitCursorPosition();
51
- }
52
- }
53
- }
54
- onKeyDown(event) {
55
- if (!this.enabled) {
56
- return;
57
- }
58
- if (event.key === 'Enter') {
59
- event.preventDefault();
60
- event.stopPropagation();
61
- if (!this.isDrawing) {
62
- this.startDrawing();
63
- }
64
- else {
65
- this.confirmDrawing();
66
- }
67
- return;
68
- }
69
- if (event.key === 'Escape') {
70
- event.preventDefault();
71
- event.stopPropagation();
72
- if (this.isDrawing) {
73
- this.cancelDrawing();
74
- }
75
- else if (this.showCursor) {
76
- this.hideCursor();
77
- }
78
- return;
79
- }
80
- if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(event.key)) {
81
- event.preventDefault();
82
- event.stopPropagation();
83
- if (this.isDrawing) {
84
- this.resizeBox(event);
85
- }
86
- else {
87
- this.moveCursor(event);
88
- }
89
- }
90
- }
91
- onBlur() {
92
- if (this.showCursor && !this.isDrawing) {
93
- this.hideCursor();
94
- }
95
- }
96
- moveCursor(event) {
97
- const increment = event.shiftKey ? this.incrementLarge : this.incrementMedium;
98
- if (!this.showCursor) {
99
- const rect = this.elementRef.nativeElement.getBoundingClientRect();
100
- this.cursorX = rect.width / 2;
101
- this.cursorY = rect.height / 2;
102
- this.showCursor = true;
103
- this.emitCursorPosition();
104
- return;
105
- }
106
- const rect = this.elementRef.nativeElement.getBoundingClientRect();
107
- switch (event.key) {
108
- case 'ArrowUp':
109
- this.cursorY = Math.max(0, this.cursorY - increment);
110
- break;
111
- case 'ArrowDown':
112
- this.cursorY = Math.min(rect.height, this.cursorY + increment);
113
- break;
114
- case 'ArrowLeft':
115
- this.cursorX = Math.max(0, this.cursorX - increment);
116
- break;
117
- case 'ArrowRight':
118
- this.cursorX = Math.min(rect.width, this.cursorX + increment);
119
- break;
120
- }
121
- this.emitCursorPosition();
122
- }
123
- startDrawing() {
124
- let startX;
125
- let startY;
126
- if (this.showCursor) {
127
- startX = this.cursorX;
128
- startY = this.cursorY;
129
- this.showCursor = false;
130
- this.emitCursorPosition();
131
- }
132
- else {
133
- // default to center
134
- const rect = this.elementRef.nativeElement.getBoundingClientRect();
135
- startX = rect.width / 2;
136
- startY = rect.height / 2;
137
- }
138
- this.isDrawing = true;
139
- this.drawStartX = startX;
140
- this.drawStartY = startY;
141
- this.currentWidth = this.minBoxSize;
142
- this.currentHeight = this.minBoxSize;
143
- this.emitDrawingStarted();
144
- }
145
- resizeBox(event) {
146
- const increment = event.shiftKey ? this.incrementLarge : this.incrementSmall;
147
- const rect = this.elementRef.nativeElement.getBoundingClientRect();
148
- switch (event.key) {
149
- case 'ArrowRight':
150
- const maxWidth = rect.width - this.drawStartX;
151
- this.currentWidth = Math.min(maxWidth, this.currentWidth + increment);
152
- break;
153
- case 'ArrowLeft':
154
- this.currentWidth = Math.max(this.minBoxSize, this.currentWidth - increment);
155
- break;
156
- case 'ArrowDown':
157
- const maxHeight = rect.height - this.drawStartY;
158
- this.currentHeight = Math.min(maxHeight, this.currentHeight + increment);
159
- break;
160
- case 'ArrowUp':
161
- this.currentHeight = Math.max(this.minBoxSize, this.currentHeight - increment);
162
- break;
163
- }
164
- this.emitDrawingUpdated();
165
- }
166
- confirmDrawing() {
167
- this.emitDrawingConfirmed();
168
- this.cleanup();
169
- }
170
- cancelDrawing() {
171
- this.drawingCancelled.emit();
172
- this.cleanup();
173
- }
174
- hideCursor() {
175
- this.showCursor = false;
176
- this.emitCursorPosition();
177
- }
178
- cleanup() {
179
- this.isDrawing = false;
180
- this.showCursor = false;
181
- this.cursorX = undefined;
182
- this.cursorY = undefined;
183
- this.drawStartX = undefined;
184
- this.drawStartY = undefined;
185
- this.currentWidth = undefined;
186
- this.currentHeight = undefined;
187
- }
188
- emitCursorPosition() {
189
- this.cursorPositionChanged.emit({
190
- x: this.cursorX,
191
- y: this.cursorY,
192
- visible: this.showCursor
193
- });
194
- }
195
- emitDrawingStarted() {
196
- this.drawingStarted.emit({
197
- startX: this.drawStartX,
198
- startY: this.drawStartY,
199
- width: this.currentWidth,
200
- height: this.currentHeight
201
- });
202
- }
203
- emitDrawingUpdated() {
204
- this.drawingUpdated.emit({
205
- startX: this.drawStartX,
206
- startY: this.drawStartY,
207
- width: this.currentWidth,
208
- height: this.currentHeight
209
- });
210
- }
211
- emitDrawingConfirmed() {
212
- this.drawingConfirmed.emit({
213
- startX: this.drawStartX,
214
- startY: this.drawStartY,
215
- width: this.currentWidth,
216
- height: this.currentHeight
217
- });
218
- }
219
- reset() {
220
- this.cleanup();
221
- this.emitCursorPosition();
222
- }
223
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KeyboardBoxDrawDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
224
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: KeyboardBoxDrawDirective, selector: "[mvKeyboardBoxDraw]", inputs: { enabled: "enabled", minBoxSize: "minBoxSize", incrementSmall: "incrementSmall", incrementMedium: "incrementMedium", incrementLarge: "incrementLarge" }, outputs: { drawingStarted: "drawingStarted", drawingUpdated: "drawingUpdated", drawingConfirmed: "drawingConfirmed", drawingCancelled: "drawingCancelled", cursorPositionChanged: "cursorPositionChanged" }, host: { listeners: { "keydown": "onKeyDown($event)", "blur": "onBlur()" } }, ngImport: i0 }); }
225
- }
226
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KeyboardBoxDrawDirective, decorators: [{
227
- type: Directive,
228
- args: [{
229
- selector: '[mvKeyboardBoxDraw]'
230
- }]
231
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { enabled: [{
232
- type: Input
233
- }], minBoxSize: [{
234
- type: Input
235
- }], incrementSmall: [{
236
- type: Input
237
- }], incrementMedium: [{
238
- type: Input
239
- }], incrementLarge: [{
240
- type: Input
241
- }], drawingStarted: [{
242
- type: Output
243
- }], drawingUpdated: [{
244
- type: Output
245
- }], drawingConfirmed: [{
246
- type: Output
247
- }], drawingCancelled: [{
248
- type: Output
249
- }], cursorPositionChanged: [{
250
- type: Output
251
- }], onKeyDown: [{
252
- type: HostListener,
253
- args: ['keydown', ['$event']]
254
- }], onBlur: [{
255
- type: HostListener,
256
- args: ['blur']
257
- }] } });
258
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQtYm94LWRyYXcuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvYW5ub3RhdGlvbnMvYW5ub3RhdGlvbi1zZXQvYW5ub3RhdGlvbi1jcmVhdGUvYm94LWhpZ2hsaWdodC1jcmVhdGUva2V5Ym9hcmQtYm94LWRyYXcuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQWtCNUcsTUFBTSxPQUFPLHdCQUF3QjtJQUVuQyxJQUFhLE9BQU8sQ0FBQyxLQUFjO1FBQ2pDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFFdEIsSUFBSSxLQUFLLElBQUksQ0FBQyxVQUFVLElBQUksd0JBQXdCLENBQUMsMEJBQTBCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEcsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFDRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQzthQXNCYywrQkFBMEIsR0FBRyxLQUFLLEFBQVIsQ0FBUztJQUVsRCxZQUFvQixVQUFtQztRQUFuQyxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQXZCL0MsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVoQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLG1CQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBRW5CLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFDMUQsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBd0IsQ0FBQztRQUMxRCxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBd0IsQ0FBQztRQUM1RCxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzVDLDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBRTdELGNBQVMsR0FBRyxLQUFLLENBQUM7UUFHbEIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQVF6QixJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsd0JBQXdCLENBQUMsZUFBZSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDaEcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSx3QkFBd0IsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RHLENBQUM7SUFDSCxDQUFDO0lBRU8sTUFBTSxDQUFDLGVBQWU7UUFDNUIsd0JBQXdCLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDO0lBQzdELENBQUM7SUFFTyxNQUFNLENBQUMsaUJBQWlCO1FBQzlCLHdCQUF3QixDQUFDLDBCQUEwQixHQUFHLEtBQUssQ0FBQztJQUM5RCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDeEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNuRSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFHRCxTQUFTLENBQUMsS0FBb0I7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUMxQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBRXhCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMzQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBRXhCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUV4QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFHRCxNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUVPLFVBQVUsQ0FBQyxLQUFvQjtRQUNyQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBRTlFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNuRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFFdkIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDMUIsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBRW5FLFFBQVEsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLEtBQUssU0FBUztnQkFDWixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLENBQUM7Z0JBQ3JELE1BQU07WUFDUixLQUFLLFdBQVc7Z0JBQ2QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQztnQkFDL0QsTUFBTTtZQUNSLEtBQUssV0FBVztnQkFDZCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLENBQUM7Z0JBQ3JELE1BQU07WUFDUixLQUFLLFlBQVk7Z0JBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQztnQkFDOUQsTUFBTTtRQUNWLENBQUM7UUFFRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLE1BQWMsQ0FBQztRQUNuQixJQUFJLE1BQWMsQ0FBQztRQUVuQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN0QixNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN0QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN4QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QixDQUFDO2FBQU0sQ0FBQztZQUNOLG9CQUFvQjtZQUNwQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ25FLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUN4QixNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNwQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFckMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVPLFNBQVMsQ0FBQyxLQUFvQjtRQUNwQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzdFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFbkUsUUFBUSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDbEIsS0FBSyxZQUFZO2dCQUNmLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQyxDQUFDO2dCQUN0RSxNQUFNO1lBQ1IsS0FBSyxXQUFXO2dCQUNkLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLENBQUM7Z0JBQzdFLE1BQU07WUFDUixLQUFLLFdBQVc7Z0JBQ2QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUNoRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLENBQUM7Z0JBQ3pFLE1BQU07WUFDUixLQUFLLFNBQVM7Z0JBQ1osSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUMsQ0FBQztnQkFDL0UsTUFBTTtRQUNWLENBQUM7UUFFRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU8sY0FBYztRQUNwQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU8sT0FBTztRQUNiLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO0lBQ2pDLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQztZQUM5QixDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDZixDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDZixPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDekIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztZQUN2QixNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWTtZQUN4QixNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWE7U0FDM0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztZQUN2QixNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDdkIsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWTtZQUN4QixNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWE7U0FDM0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1lBQ3pCLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVTtZQUN2QixNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDdkIsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQ3hCLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYTtTQUMzQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7a0lBdFFVLHdCQUF3QjtzSEFBeEIsd0JBQXdCOzs0RkFBeEIsd0JBQXdCO2tCQUhwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7aUJBQ2hDOytFQUdjLE9BQU87c0JBQW5CLEtBQUs7Z0JBYUcsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFFSSxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBNENQLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBMkNuQyxNQUFNO3NCQURMLFlBQVk7dUJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkRlc3Ryb3ksIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEtleWJvYXJkQm94RHJhd0V2ZW50IHtcbiAgc3RhcnRYOiBudW1iZXI7XG4gIHN0YXJ0WTogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdXJzb3JQb3NpdGlvbiB7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICB2aXNpYmxlOiBib29sZWFuO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbXZLZXlib2FyZEJveERyYXddJ1xufSlcbmV4cG9ydCBjbGFzcyBLZXlib2FyZEJveERyYXdEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIHNldCBlbmFibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgY29uc3Qgd2FzRW5hYmxlZCA9IHRoaXMuX2VuYWJsZWQ7XG4gICAgdGhpcy5fZW5hYmxlZCA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICYmICF3YXNFbmFibGVkICYmIEtleWJvYXJkQm94RHJhd0RpcmVjdGl2ZS5sYXN0SW50ZXJhY3Rpb25XYXNLZXlib2FyZCAmJiAhdGhpcy5zaG93Q3Vyc29yKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVDdXJzb3JGb3JLZXlib2FyZCgpO1xuICAgIH1cbiAgfVxuICBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDtcbiAgfVxuICBwcml2YXRlIF9lbmFibGVkID0gZmFsc2U7XG5cbiAgQElucHV0KCkgbWluQm94U2l6ZSA9IDEwO1xuICBASW5wdXQoKSBpbmNyZW1lbnRTbWFsbCA9IDE7XG4gIEBJbnB1dCgpIGluY3JlbWVudE1lZGl1bSA9IDU7XG4gIEBJbnB1dCgpIGluY3JlbWVudExhcmdlID0gMTA7IFxuXG4gIEBPdXRwdXQoKSBkcmF3aW5nU3RhcnRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRCb3hEcmF3RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBkcmF3aW5nVXBkYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5Ym9hcmRCb3hEcmF3RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBkcmF3aW5nQ29uZmlybWVkID0gbmV3IEV2ZW50RW1pdHRlcjxLZXlib2FyZEJveERyYXdFdmVudD4oKTtcbiAgQE91dHB1dCgpIGRyYXdpbmdDYW5jZWxsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBjdXJzb3JQb3NpdGlvbkNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEN1cnNvclBvc2l0aW9uPigpO1xuXG4gIHByaXZhdGUgaXNEcmF3aW5nID0gZmFsc2U7XG4gIHByaXZhdGUgY3Vyc29yWDogbnVtYmVyO1xuICBwcml2YXRlIGN1cnNvclk6IG51bWJlcjtcbiAgcHJpdmF0ZSBzaG93Q3Vyc29yID0gZmFsc2U7XG4gIHByaXZhdGUgZHJhd1N0YXJ0WDogbnVtYmVyO1xuICBwcml2YXRlIGRyYXdTdGFydFk6IG51bWJlcjtcbiAgcHJpdmF0ZSBjdXJyZW50V2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBjdXJyZW50SGVpZ2h0OiBudW1iZXI7XG4gIHByaXZhdGUgc3RhdGljIGxhc3RJbnRlcmFjdGlvbldhc0tleWJvYXJkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge1xuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBLZXlib2FyZEJveERyYXdEaXJlY3RpdmUub25HbG9iYWxLZXlEb3duLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgS2V5Ym9hcmRCb3hEcmF3RGlyZWN0aXZlLm9uR2xvYmFsTW91c2VEb3duLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgb25HbG9iYWxLZXlEb3duKCk6IHZvaWQge1xuICAgIEtleWJvYXJkQm94RHJhd0RpcmVjdGl2ZS5sYXN0SW50ZXJhY3Rpb25XYXNLZXlib2FyZCA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBvbkdsb2JhbE1vdXNlRG93bigpOiB2b2lkIHtcbiAgICBLZXlib2FyZEJveERyYXdEaXJlY3RpdmUubGFzdEludGVyYWN0aW9uV2FzS2V5Ym9hcmQgPSBmYWxzZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYW51cCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ3Vyc29yRm9yS2V5Ym9hcmQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZW5hYmxlZCAmJiAhdGhpcy5zaG93Q3Vyc29yICYmICF0aGlzLmlzRHJhd2luZykge1xuICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgaWYgKHJlY3Qud2lkdGggPiAwICYmIHJlY3QuaGVpZ2h0ID4gMCkge1xuICAgICAgICB0aGlzLmN1cnNvclggPSByZWN0LndpZHRoIC8gMjtcbiAgICAgICAgdGhpcy5jdXJzb3JZID0gcmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICB0aGlzLnNob3dDdXJzb3IgPSB0cnVlO1xuICAgICAgICB0aGlzLmVtaXRDdXJzb3JQb3NpdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgaWYgKCF0aGlzLmlzRHJhd2luZykge1xuICAgICAgICB0aGlzLnN0YXJ0RHJhd2luZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb25maXJtRHJhd2luZygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgIGlmICh0aGlzLmlzRHJhd2luZykge1xuICAgICAgICB0aGlzLmNhbmNlbERyYXdpbmcoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93Q3Vyc29yKSB7XG4gICAgICAgIHRoaXMuaGlkZUN1cnNvcigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChbJ0Fycm93VXAnLCAnQXJyb3dEb3duJywgJ0Fycm93TGVmdCcsICdBcnJvd1JpZ2h0J10uaW5jbHVkZXMoZXZlbnQua2V5KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICBpZiAodGhpcy5pc0RyYXdpbmcpIHtcbiAgICAgICAgdGhpcy5yZXNpemVCb3goZXZlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tb3ZlQ3Vyc29yKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdibHVyJylcbiAgb25CbHVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNob3dDdXJzb3IgJiYgIXRoaXMuaXNEcmF3aW5nKSB7XG4gICAgICB0aGlzLmhpZGVDdXJzb3IoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1vdmVDdXJzb3IoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbmNyZW1lbnQgPSBldmVudC5zaGlmdEtleSA/IHRoaXMuaW5jcmVtZW50TGFyZ2UgOiB0aGlzLmluY3JlbWVudE1lZGl1bTtcblxuICAgIGlmICghdGhpcy5zaG93Q3Vyc29yKSB7XG4gICAgICBjb25zdCByZWN0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLmN1cnNvclggPSByZWN0LndpZHRoIC8gMjtcbiAgICAgIHRoaXMuY3Vyc29yWSA9IHJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgIHRoaXMuc2hvd0N1cnNvciA9IHRydWU7XG5cbiAgICAgIHRoaXMuZW1pdEN1cnNvclBvc2l0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVjdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICB0aGlzLmN1cnNvclkgPSBNYXRoLm1heCgwLCB0aGlzLmN1cnNvclkgLSBpbmNyZW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIHRoaXMuY3Vyc29yWSA9IE1hdGgubWluKHJlY3QuaGVpZ2h0LCB0aGlzLmN1cnNvclkgKyBpbmNyZW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIHRoaXMuY3Vyc29yWCA9IE1hdGgubWF4KDAsIHRoaXMuY3Vyc29yWCAtIGluY3JlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIHRoaXMuY3Vyc29yWCA9IE1hdGgubWluKHJlY3Qud2lkdGgsIHRoaXMuY3Vyc29yWCArIGluY3JlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuZW1pdEN1cnNvclBvc2l0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0RHJhd2luZygpOiB2b2lkIHtcbiAgICBsZXQgc3RhcnRYOiBudW1iZXI7XG4gICAgbGV0IHN0YXJ0WTogbnVtYmVyO1xuXG4gICAgaWYgKHRoaXMuc2hvd0N1cnNvcikge1xuICAgICAgc3RhcnRYID0gdGhpcy5jdXJzb3JYO1xuICAgICAgc3RhcnRZID0gdGhpcy5jdXJzb3JZO1xuICAgICAgdGhpcy5zaG93Q3Vyc29yID0gZmFsc2U7XG4gICAgICB0aGlzLmVtaXRDdXJzb3JQb3NpdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkZWZhdWx0IHRvIGNlbnRlclxuICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgc3RhcnRYID0gcmVjdC53aWR0aCAvIDI7XG4gICAgICBzdGFydFkgPSByZWN0LmhlaWdodCAvIDI7XG4gICAgfVxuXG4gICAgdGhpcy5pc0RyYXdpbmcgPSB0cnVlO1xuICAgIHRoaXMuZHJhd1N0YXJ0WCA9IHN0YXJ0WDtcbiAgICB0aGlzLmRyYXdTdGFydFkgPSBzdGFydFk7XG4gICAgdGhpcy5jdXJyZW50V2lkdGggPSB0aGlzLm1pbkJveFNpemU7XG4gICAgdGhpcy5jdXJyZW50SGVpZ2h0ID0gdGhpcy5taW5Cb3hTaXplO1xuXG4gICAgdGhpcy5lbWl0RHJhd2luZ1N0YXJ0ZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzaXplQm94KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW5jcmVtZW50ID0gZXZlbnQuc2hpZnRLZXkgPyB0aGlzLmluY3JlbWVudExhcmdlIDogdGhpcy5pbmNyZW1lbnRTbWFsbDtcbiAgICBjb25zdCByZWN0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIGNvbnN0IG1heFdpZHRoID0gcmVjdC53aWR0aCAtIHRoaXMuZHJhd1N0YXJ0WDtcbiAgICAgICAgdGhpcy5jdXJyZW50V2lkdGggPSBNYXRoLm1pbihtYXhXaWR0aCwgdGhpcy5jdXJyZW50V2lkdGggKyBpbmNyZW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIHRoaXMuY3VycmVudFdpZHRoID0gTWF0aC5tYXgodGhpcy5taW5Cb3hTaXplLCB0aGlzLmN1cnJlbnRXaWR0aCAtIGluY3JlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gcmVjdC5oZWlnaHQgLSB0aGlzLmRyYXdTdGFydFk7XG4gICAgICAgIHRoaXMuY3VycmVudEhlaWdodCA9IE1hdGgubWluKG1heEhlaWdodCwgdGhpcy5jdXJyZW50SGVpZ2h0ICsgaW5jcmVtZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgdGhpcy5jdXJyZW50SGVpZ2h0ID0gTWF0aC5tYXgodGhpcy5taW5Cb3hTaXplLCB0aGlzLmN1cnJlbnRIZWlnaHQgLSBpbmNyZW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLmVtaXREcmF3aW5nVXBkYXRlZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25maXJtRHJhd2luZygpOiB2b2lkIHtcbiAgICB0aGlzLmVtaXREcmF3aW5nQ29uZmlybWVkKCk7XG4gICAgdGhpcy5jbGVhbnVwKCk7XG4gIH1cblxuICBwcml2YXRlIGNhbmNlbERyYXdpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5kcmF3aW5nQ2FuY2VsbGVkLmVtaXQoKTtcbiAgICB0aGlzLmNsZWFudXAoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGlkZUN1cnNvcigpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dDdXJzb3IgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXRDdXJzb3JQb3NpdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbnVwKCk6IHZvaWQge1xuICAgIHRoaXMuaXNEcmF3aW5nID0gZmFsc2U7XG4gICAgdGhpcy5zaG93Q3Vyc29yID0gZmFsc2U7XG4gICAgdGhpcy5jdXJzb3JYID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY3Vyc29yWSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRyYXdTdGFydFggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kcmF3U3RhcnRZID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY3VycmVudFdpZHRoID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY3VycmVudEhlaWdodCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEN1cnNvclBvc2l0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuY3Vyc29yUG9zaXRpb25DaGFuZ2VkLmVtaXQoe1xuICAgICAgeDogdGhpcy5jdXJzb3JYLFxuICAgICAgeTogdGhpcy5jdXJzb3JZLFxuICAgICAgdmlzaWJsZTogdGhpcy5zaG93Q3Vyc29yXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGVtaXREcmF3aW5nU3RhcnRlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmRyYXdpbmdTdGFydGVkLmVtaXQoe1xuICAgICAgc3RhcnRYOiB0aGlzLmRyYXdTdGFydFgsXG4gICAgICBzdGFydFk6IHRoaXMuZHJhd1N0YXJ0WSxcbiAgICAgIHdpZHRoOiB0aGlzLmN1cnJlbnRXaWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5jdXJyZW50SGVpZ2h0XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGVtaXREcmF3aW5nVXBkYXRlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmRyYXdpbmdVcGRhdGVkLmVtaXQoe1xuICAgICAgc3RhcnRYOiB0aGlzLmRyYXdTdGFydFgsXG4gICAgICBzdGFydFk6IHRoaXMuZHJhd1N0YXJ0WSxcbiAgICAgIHdpZHRoOiB0aGlzLmN1cnJlbnRXaWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5jdXJyZW50SGVpZ2h0XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGVtaXREcmF3aW5nQ29uZmlybWVkKCk6IHZvaWQge1xuICAgIHRoaXMuZHJhd2luZ0NvbmZpcm1lZC5lbWl0KHtcbiAgICAgIHN0YXJ0WDogdGhpcy5kcmF3U3RhcnRYLFxuICAgICAgc3RhcnRZOiB0aGlzLmRyYXdTdGFydFksXG4gICAgICB3aWR0aDogdGhpcy5jdXJyZW50V2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuY3VycmVudEhlaWdodFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYW51cCgpO1xuICAgIHRoaXMuZW1pdEN1cnNvclBvc2l0aW9uKCk7XG4gIH1cbn0iXX0=
@@ -1,122 +0,0 @@
1
- import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import { debounceTime } from 'rxjs/operators';
4
- import * as i0 from "@angular/core";
5
- export class KeyboardBoxMoveDirective {
6
- constructor(elementRef) {
7
- this.elementRef = elementRef;
8
- this.enabled = true;
9
- this.incrementSmall = 1;
10
- this.incrementLarge = 10;
11
- this.keyboardMovingChange = new EventEmitter();
12
- this.boxDelete = new EventEmitter();
13
- this.moveSubject = new Subject();
14
- this.isMoving = false;
15
- this.moveSubscription = this.moveSubject
16
- .pipe(debounceTime(500))
17
- .subscribe(() => {
18
- this.setMoving(false);
19
- this.emitStoppedEvent();
20
- });
21
- }
22
- ngOnDestroy() {
23
- if (this.moveSubscription) {
24
- this.moveSubscription.unsubscribe();
25
- }
26
- this.moveSubject.complete();
27
- }
28
- onKeyDown(event) {
29
- if (event.key === 'Delete' || event.key === 'Backspace') {
30
- event.preventDefault();
31
- event.stopPropagation();
32
- this.boxDelete.emit();
33
- return;
34
- }
35
- if (!this.enabled) {
36
- return;
37
- }
38
- if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'].includes(event.key)) {
39
- event.preventDefault();
40
- event.stopPropagation();
41
- this.moveBox(event);
42
- }
43
- }
44
- moveBox(event) {
45
- const element = this.elementRef.nativeElement;
46
- const increment = event.shiftKey ? this.incrementLarge : this.incrementSmall;
47
- if (!this.isMoving) {
48
- this.setMoving(true);
49
- }
50
- const currentTop = parseFloat(element.style.top) || 0;
51
- const currentLeft = parseFloat(element.style.left) || 0;
52
- const currentWidth = element.offsetWidth;
53
- const currentHeight = element.offsetHeight;
54
- let newTop = currentTop;
55
- let newLeft = currentLeft;
56
- switch (event.key) {
57
- case 'ArrowUp':
58
- newTop = currentTop - increment;
59
- break;
60
- case 'ArrowDown':
61
- newTop = currentTop + increment;
62
- break;
63
- case 'ArrowLeft':
64
- newLeft = currentLeft - increment;
65
- break;
66
- case 'ArrowRight':
67
- newLeft = currentLeft + increment;
68
- break;
69
- }
70
- if (this.movementBounds) {
71
- newTop = Math.max(0, Math.min(newTop, this.movementBounds.containerHeight - currentHeight));
72
- newLeft = Math.max(0, Math.min(newLeft, this.movementBounds.containerWidth - currentWidth));
73
- }
74
- element.style.top = `${newTop}px`;
75
- element.style.left = `${newLeft}px`;
76
- this.moveSubject.next();
77
- }
78
- setMoving(moving) {
79
- if (this.isMoving !== moving) {
80
- this.isMoving = moving;
81
- this.keyboardMovingChange.emit(moving);
82
- }
83
- }
84
- emitStoppedEvent() {
85
- const element = this.elementRef.nativeElement;
86
- const wasFocused = document.activeElement === element;
87
- const stoppedEvent = new CustomEvent('stopped', {
88
- detail: element,
89
- bubbles: true
90
- });
91
- element.dispatchEvent(stoppedEvent);
92
- if (wasFocused) {
93
- setTimeout(() => {
94
- element.focus();
95
- }, 50);
96
- }
97
- }
98
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KeyboardBoxMoveDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
99
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: KeyboardBoxMoveDirective, selector: "[mvKeyboardBoxMove]", inputs: { enabled: "enabled", incrementSmall: "incrementSmall", incrementLarge: "incrementLarge", movementBounds: "movementBounds" }, outputs: { keyboardMovingChange: "keyboardMovingChange", boxDelete: "boxDelete" }, host: { listeners: { "keydown": "onKeyDown($event)" } }, ngImport: i0 }); }
100
- }
101
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KeyboardBoxMoveDirective, decorators: [{
102
- type: Directive,
103
- args: [{
104
- selector: '[mvKeyboardBoxMove]'
105
- }]
106
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { enabled: [{
107
- type: Input
108
- }], incrementSmall: [{
109
- type: Input
110
- }], incrementLarge: [{
111
- type: Input
112
- }], movementBounds: [{
113
- type: Input
114
- }], keyboardMovingChange: [{
115
- type: Output
116
- }], boxDelete: [{
117
- type: Output
118
- }], onKeyDown: [{
119
- type: HostListener,
120
- args: ['keydown', ['$event']]
121
- }] } });
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQtYm94LW1vdmUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvYW5ub3RhdGlvbnMvYW5ub3RhdGlvbi1zZXQvYW5ub3RhdGlvbi12aWV3L3JlY3RhbmdsZS9rZXlib2FyZC1ib3gtbW92ZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQVU5QyxNQUFNLE9BQU8sd0JBQXdCO0lBY25DLFlBQW9CLFVBQW1DO1FBQW5DLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBWjlDLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFDZixtQkFBYyxHQUFHLENBQUMsQ0FBQztRQUNuQixtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUduQix5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQ25ELGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXZDLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVsQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBR3ZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVzthQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3ZCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lB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QkFBdEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQXVCUCxTQUFTO3NCQURSLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGludGVyZmFjZSBCb3hNb3ZlbWVudEJvdW5kcyB7XG4gIGNvbnRhaW5lcldpZHRoOiBudW1iZXI7XG4gIGNvbnRhaW5lckhlaWdodDogbnVtYmVyO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbXZLZXlib2FyZEJveE1vdmVdJ1xufSlcbmV4cG9ydCBjbGFzcyBLZXlib2FyZEJveE1vdmVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIGVuYWJsZWQgPSB0cnVlO1xuICBASW5wdXQoKSBpbmNyZW1lbnRTbWFsbCA9IDE7XG4gIEBJbnB1dCgpIGluY3JlbWVudExhcmdlID0gMTA7XG4gIEBJbnB1dCgpIG1vdmVtZW50Qm91bmRzOiBCb3hNb3ZlbWVudEJvdW5kcztcblxuICBAT3V0cHV0KCkga2V5Ym9hcmRNb3ZpbmdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBib3hEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBtb3ZlU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgbW92ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGlzTW92aW5nID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pikge1xuICAgIHRoaXMubW92ZVN1YnNjcmlwdGlvbiA9IHRoaXMubW92ZVN1YmplY3RcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0TW92aW5nKGZhbHNlKTtcbiAgICAgICAgdGhpcy5lbWl0U3RvcHBlZEV2ZW50KCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1vdmVTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMubW92ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLm1vdmVTdWJqZWN0LmNvbXBsZXRlKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0RlbGV0ZScgfHwgZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5ib3hEZWxldGUuZW1pdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFsnQXJyb3dVcCcsICdBcnJvd0Rvd24nLCAnQXJyb3dMZWZ0JywgJ0Fycm93UmlnaHQnXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLm1vdmVCb3goZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbW92ZUJveChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBpbmNyZW1lbnQgPSBldmVudC5zaGlmdEtleSA/IHRoaXMuaW5jcmVtZW50TGFyZ2UgOiB0aGlzLmluY3JlbWVudFNtYWxsO1xuXG4gICAgaWYgKCF0aGlzLmlzTW92aW5nKSB7XG4gICAgICB0aGlzLnNldE1vdmluZyh0cnVlKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VG9wID0gcGFyc2VGbG9hdChlbGVtZW50LnN0eWxlLnRvcCkgfHwgMDtcbiAgICBjb25zdCBjdXJyZW50TGVmdCA9IHBhcnNlRmxvYXQoZWxlbWVudC5zdHlsZS5sZWZ0KSB8fCAwO1xuICAgIGNvbnN0IGN1cnJlbnRXaWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgY29uc3QgY3VycmVudEhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuXG4gICAgbGV0IG5ld1RvcCA9IGN1cnJlbnRUb3A7XG4gICAgbGV0IG5ld0xlZnQgPSBjdXJyZW50TGVmdDtcblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgbmV3VG9wID0gY3VycmVudFRvcCAtIGluY3JlbWVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICBuZXdUb3AgPSBjdXJyZW50VG9wICsgaW5jcmVtZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIG5ld0xlZnQgPSBjdXJyZW50TGVmdCAtIGluY3JlbWVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgbmV3TGVmdCA9IGN1cnJlbnRMZWZ0ICsgaW5jcmVtZW50O1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tb3ZlbWVudEJvdW5kcykge1xuICAgICAgbmV3VG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4obmV3VG9wLCB0aGlzLm1vdmVtZW50Qm91bmRzLmNvbnRhaW5lckhlaWdodCAtIGN1cnJlbnRIZWlnaHQpKTtcbiAgICAgIG5ld0xlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihuZXdMZWZ0LCB0aGlzLm1vdmVtZW50Qm91bmRzLmNvbnRhaW5lcldpZHRoIC0gY3VycmVudFdpZHRoKSk7XG4gICAgfVxuXG4gICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtuZXdUb3B9cHhgO1xuICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke25ld0xlZnR9cHhgO1xuXG4gICAgdGhpcy5tb3ZlU3ViamVjdC5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIHNldE1vdmluZyhtb3Zpbmc6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc01vdmluZyAhPT0gbW92aW5nKSB7XG4gICAgICB0aGlzLmlzTW92aW5nID0gbW92aW5nO1xuICAgICAgdGhpcy5rZXlib2FyZE1vdmluZ0NoYW5nZS5lbWl0KG1vdmluZyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U3RvcHBlZEV2ZW50KCk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgIGNvbnN0IHdhc0ZvY3VzZWQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBlbGVtZW50O1xuXG4gICAgY29uc3Qgc3RvcHBlZEV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdzdG9wcGVkJywge1xuICAgICAgZGV0YWlsOiBlbGVtZW50LFxuICAgICAgYnViYmxlczogdHJ1ZVxuICAgIH0pO1xuICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChzdG9wcGVkRXZlbnQpO1xuXG4gICAgaWYgKHdhc0ZvY3VzZWQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgICB9LCA1MCk7XG4gICAgfVxuICB9XG59Il19
@@ -1,59 +0,0 @@
1
- import { ElementRef, EventEmitter, OnDestroy } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export interface KeyboardBoxDrawEvent {
4
- startX: number;
5
- startY: number;
6
- width: number;
7
- height: number;
8
- }
9
- export interface CursorPosition {
10
- x: number;
11
- y: number;
12
- visible: boolean;
13
- }
14
- export declare class KeyboardBoxDrawDirective implements OnDestroy {
15
- private elementRef;
16
- set enabled(value: boolean);
17
- get enabled(): boolean;
18
- private _enabled;
19
- minBoxSize: number;
20
- incrementSmall: number;
21
- incrementMedium: number;
22
- incrementLarge: number;
23
- drawingStarted: EventEmitter<KeyboardBoxDrawEvent>;
24
- drawingUpdated: EventEmitter<KeyboardBoxDrawEvent>;
25
- drawingConfirmed: EventEmitter<KeyboardBoxDrawEvent>;
26
- drawingCancelled: EventEmitter<void>;
27
- cursorPositionChanged: EventEmitter<CursorPosition>;
28
- private isDrawing;
29
- private cursorX;
30
- private cursorY;
31
- private showCursor;
32
- private drawStartX;
33
- private drawStartY;
34
- private currentWidth;
35
- private currentHeight;
36
- private static lastInteractionWasKeyboard;
37
- constructor(elementRef: ElementRef<HTMLElement>);
38
- private static onGlobalKeyDown;
39
- private static onGlobalMouseDown;
40
- ngOnDestroy(): void;
41
- private initializeCursorForKeyboard;
42
- onKeyDown(event: KeyboardEvent): void;
43
- onBlur(): void;
44
- private moveCursor;
45
- private startDrawing;
46
- private resizeBox;
47
- private confirmDrawing;
48
- private cancelDrawing;
49
- private hideCursor;
50
- private cleanup;
51
- private emitCursorPosition;
52
- private emitDrawingStarted;
53
- private emitDrawingUpdated;
54
- private emitDrawingConfirmed;
55
- reset(): void;
56
- static ɵfac: i0.ɵɵFactoryDeclaration<KeyboardBoxDrawDirective, never>;
57
- static ɵdir: i0.ɵɵDirectiveDeclaration<KeyboardBoxDrawDirective, "[mvKeyboardBoxDraw]", never, { "enabled": { "alias": "enabled"; "required": false; }; "minBoxSize": { "alias": "minBoxSize"; "required": false; }; "incrementSmall": { "alias": "incrementSmall"; "required": false; }; "incrementMedium": { "alias": "incrementMedium"; "required": false; }; "incrementLarge": { "alias": "incrementLarge"; "required": false; }; }, { "drawingStarted": "drawingStarted"; "drawingUpdated": "drawingUpdated"; "drawingConfirmed": "drawingConfirmed"; "drawingCancelled": "drawingCancelled"; "cursorPositionChanged": "cursorPositionChanged"; }, never, never, false, never>;
58
- }
59
- //# sourceMappingURL=keyboard-box-draw.directive.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"keyboard-box-draw.directive.d.ts","sourceRoot":"","sources":["../../../../../../../projects/media-viewer/src/lib/annotations/annotation-set/annotation-create/box-highlight-create/keyboard-box-draw.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAE,YAAY,EAAuB,SAAS,EAAU,MAAM,eAAe,CAAC;;AAE5G,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,qBAGa,wBAAyB,YAAW,SAAS;IAoC5C,OAAO,CAAC,UAAU;IAlC9B,IAAa,OAAO,CAAC,KAAK,EAAE,OAAO,EAOlC;IACD,IAAI,OAAO,IAAI,OAAO,CAErB;IACD,OAAO,CAAC,QAAQ,CAAS;IAEhB,UAAU,SAAM;IAChB,cAAc,SAAK;IACnB,eAAe,SAAK;IACpB,cAAc,SAAM;IAEnB,cAAc,qCAA4C;IAC1D,cAAc,qCAA4C;IAC1D,gBAAgB,qCAA4C;IAC5D,gBAAgB,qBAA4B;IAC5C,qBAAqB,+BAAsC;IAErE,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,MAAM,CAAC,0BAA0B,CAAS;gBAE9B,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC;IAOvD,OAAO,CAAC,MAAM,CAAC,eAAe;IAI9B,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAIhC,WAAW,IAAI,IAAI;IAInB,OAAO,CAAC,2BAA2B;IAanC,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IA0CrC,MAAM,IAAI,IAAI;IAMd,OAAO,CAAC,UAAU;IAiClB,OAAO,CAAC,YAAY;IAyBpB,OAAO,CAAC,SAAS;IAwBjB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,oBAAoB;IASrB,KAAK,IAAI,IAAI;yCAnQT,wBAAwB;2CAAxB,wBAAwB;CAuQpC"}
@@ -1,27 +0,0 @@
1
- import { ElementRef, EventEmitter, OnDestroy } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export interface BoxMovementBounds {
4
- containerWidth: number;
5
- containerHeight: number;
6
- }
7
- export declare class KeyboardBoxMoveDirective implements OnDestroy {
8
- private elementRef;
9
- enabled: boolean;
10
- incrementSmall: number;
11
- incrementLarge: number;
12
- movementBounds: BoxMovementBounds;
13
- keyboardMovingChange: EventEmitter<boolean>;
14
- boxDelete: EventEmitter<void>;
15
- private moveSubject;
16
- private moveSubscription;
17
- private isMoving;
18
- constructor(elementRef: ElementRef<HTMLElement>);
19
- ngOnDestroy(): void;
20
- onKeyDown(event: KeyboardEvent): void;
21
- private moveBox;
22
- private setMoving;
23
- private emitStoppedEvent;
24
- static ɵfac: i0.ɵɵFactoryDeclaration<KeyboardBoxMoveDirective, never>;
25
- static ɵdir: i0.ɵɵDirectiveDeclaration<KeyboardBoxMoveDirective, "[mvKeyboardBoxMove]", never, { "enabled": { "alias": "enabled"; "required": false; }; "incrementSmall": { "alias": "incrementSmall"; "required": false; }; "incrementLarge": { "alias": "incrementLarge"; "required": false; }; "movementBounds": { "alias": "movementBounds"; "required": false; }; }, { "keyboardMovingChange": "keyboardMovingChange"; "boxDelete": "boxDelete"; }, never, never, false, never>;
26
- }
27
- //# sourceMappingURL=keyboard-box-move.directive.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"keyboard-box-move.directive.d.ts","sourceRoot":"","sources":["../../../../../../../projects/media-viewer/src/lib/annotations/annotation-set/annotation-view/rectangle/keyboard-box-move.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAE,YAAY,EAAuB,SAAS,EAAU,MAAM,eAAe,CAAC;;AAI5G,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,qBAGa,wBAAyB,YAAW,SAAS;IAc5C,OAAO,CAAC,UAAU;IAZrB,OAAO,UAAQ;IACf,cAAc,SAAK;IACnB,cAAc,SAAM;IACpB,cAAc,EAAE,iBAAiB,CAAC;IAEjC,oBAAoB,wBAA+B;IACnD,SAAS,qBAA4B;IAE/C,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,gBAAgB,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAS;gBAEL,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC;IASvD,WAAW,IAAI,IAAI;IAQnB,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAmBrC,OAAO,CAAC,OAAO;IA0Cf,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,gBAAgB;yCAnGb,wBAAwB;2CAAxB,wBAAwB;CAoHpC"}