@hmcts/media-viewer 4.1.9 → 4.1.10-exui-3053-1
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/esm2022/lib/icp/confirm-exit/confirm-action-dialog.component.mjs +13 -5
- package/esm2022/lib/media-viewer.component.mjs +98 -4
- package/esm2022/lib/shared/directives/keyboard-nav.directive.mjs +243 -0
- package/esm2022/lib/shared/shared.module.mjs +10 -5
- package/esm2022/lib/toolbar/highlight-toolbar/highlight-toolbar.component.mjs +38 -10
- package/esm2022/lib/toolbar/main-toolbar/main-toolbar.component.mjs +82 -18
- package/esm2022/lib/toolbar/redaction-toolbar/redaction-toolbar.component.mjs +35 -10
- package/esm2022/lib/toolbar/toolbar-focus.service.mjs +33 -0
- package/esm2022/lib/toolbar/toolbar.module.mjs +12 -6
- package/fesm2022/hmcts-media-viewer.mjs +609 -117
- package/fesm2022/hmcts-media-viewer.mjs.map +1 -1
- package/lib/icp/confirm-exit/confirm-action-dialog.component.d.ts +4 -1
- package/lib/icp/confirm-exit/confirm-action-dialog.component.d.ts.map +1 -1
- package/lib/media-viewer.component.d.ts +8 -0
- package/lib/media-viewer.component.d.ts.map +1 -1
- package/lib/shared/directives/keyboard-nav.directive.d.ts +30 -0
- package/lib/shared/directives/keyboard-nav.directive.d.ts.map +1 -0
- package/lib/shared/shared.module.d.ts +5 -4
- package/lib/shared/shared.module.d.ts.map +1 -1
- package/lib/toolbar/highlight-toolbar/highlight-toolbar.component.d.ts +7 -1
- package/lib/toolbar/highlight-toolbar/highlight-toolbar.component.d.ts.map +1 -1
- package/lib/toolbar/main-toolbar/main-toolbar.component.d.ts +12 -1
- package/lib/toolbar/main-toolbar/main-toolbar.component.d.ts.map +1 -1
- package/lib/toolbar/redaction-toolbar/redaction-toolbar.component.d.ts +6 -1
- package/lib/toolbar/redaction-toolbar/redaction-toolbar.component.d.ts.map +1 -1
- package/lib/toolbar/toolbar-focus.service.d.ts +7 -0
- package/lib/toolbar/toolbar-focus.service.d.ts.map +1 -0
- package/lib/toolbar/toolbar.module.d.ts +2 -1
- package/lib/toolbar/toolbar.module.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class KeyboardNavDirective {
|
|
4
|
+
constructor(elementRef) {
|
|
5
|
+
this.elementRef = elementRef;
|
|
6
|
+
this.orientation = 'horizontal';
|
|
7
|
+
this.itemFocused = new EventEmitter();
|
|
8
|
+
this.itemActivated = new EventEmitter();
|
|
9
|
+
this.focusableItems = [];
|
|
10
|
+
this.currentFocusIndex = -1;
|
|
11
|
+
this.isUsingArrowKeys = false;
|
|
12
|
+
}
|
|
13
|
+
ngOnInit() {
|
|
14
|
+
this.updateFocusableItems();
|
|
15
|
+
this.setupMutationObserver();
|
|
16
|
+
}
|
|
17
|
+
ngOnDestroy() {
|
|
18
|
+
if (this.mutationObserver) {
|
|
19
|
+
this.mutationObserver.disconnect();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
setupMutationObserver() {
|
|
23
|
+
this.mutationObserver = new MutationObserver(() => {
|
|
24
|
+
this.updateFocusableItems();
|
|
25
|
+
});
|
|
26
|
+
this.mutationObserver.observe(this.elementRef.nativeElement, {
|
|
27
|
+
childList: true,
|
|
28
|
+
subtree: true,
|
|
29
|
+
attributes: true,
|
|
30
|
+
attributeFilter: ['class', 'disabled', 'hidden']
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
updateFocusableItems() {
|
|
34
|
+
const allItems = Array.from(this.elementRef.nativeElement.querySelectorAll('button:not([disabled])'));
|
|
35
|
+
this.focusableItems = allItems.filter(item => this.isVisible(item));
|
|
36
|
+
if (this.isUsingArrowKeys) {
|
|
37
|
+
this.applyArrowKeyTabindex();
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
this.focusableItems.forEach(item => {
|
|
41
|
+
if (!item.hasAttribute('tabindex') || item.getAttribute('tabindex') === '-1') {
|
|
42
|
+
item.setAttribute('tabindex', '0');
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
isVisible(element) {
|
|
48
|
+
if (!element) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
if (element.hasAttribute('disabled')) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
const computedStyle = window.getComputedStyle(element);
|
|
55
|
+
if (computedStyle.display === 'none' || computedStyle.visibility === 'hidden') {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
// check if any parent element is hidden (up to the directive's host element)
|
|
59
|
+
let parent = element.parentElement;
|
|
60
|
+
while (parent && parent !== this.elementRef.nativeElement) {
|
|
61
|
+
const parentStyle = window.getComputedStyle(parent);
|
|
62
|
+
if (parentStyle.display === 'none' || parentStyle.visibility === 'hidden') {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
parent = parent.parentElement;
|
|
66
|
+
}
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
applyArrowKeyTabindex() {
|
|
70
|
+
if (this.focusableItems.length === 0) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
let indexToMakeTabbable = 0;
|
|
74
|
+
if (this.currentFocusIndex >= 0 && this.currentFocusIndex < this.focusableItems.length) {
|
|
75
|
+
indexToMakeTabbable = this.currentFocusIndex;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
const focusedElement = document.activeElement;
|
|
79
|
+
const focusedIndex = this.focusableItems.indexOf(focusedElement);
|
|
80
|
+
if (focusedIndex !== -1) {
|
|
81
|
+
indexToMakeTabbable = focusedIndex;
|
|
82
|
+
this.currentFocusIndex = focusedIndex;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
this.focusableItems.forEach((item, index) => {
|
|
86
|
+
item.setAttribute('tabindex', index === indexToMakeTabbable ? '0' : '-1');
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
onKeyDown(event) {
|
|
90
|
+
const target = event.target;
|
|
91
|
+
const currentIndex = this.focusableItems.indexOf(target);
|
|
92
|
+
if (currentIndex === -1) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
let handled = false;
|
|
96
|
+
let isArrowKey = false;
|
|
97
|
+
switch (event.key) {
|
|
98
|
+
case 'Tab':
|
|
99
|
+
if (this.isUsingArrowKeys) {
|
|
100
|
+
this.isUsingArrowKeys = false;
|
|
101
|
+
this.focusableItems.forEach(item => {
|
|
102
|
+
item.setAttribute('tabindex', '0');
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
return;
|
|
106
|
+
case 'ArrowRight':
|
|
107
|
+
if (this.orientation === 'horizontal') {
|
|
108
|
+
isArrowKey = true;
|
|
109
|
+
if (!this.isUsingArrowKeys) {
|
|
110
|
+
this.isUsingArrowKeys = true;
|
|
111
|
+
this.applyArrowKeyTabindex();
|
|
112
|
+
}
|
|
113
|
+
this.focusNext(currentIndex);
|
|
114
|
+
handled = true;
|
|
115
|
+
}
|
|
116
|
+
break;
|
|
117
|
+
case 'ArrowLeft':
|
|
118
|
+
if (this.orientation === 'horizontal') {
|
|
119
|
+
isArrowKey = true;
|
|
120
|
+
if (!this.isUsingArrowKeys) {
|
|
121
|
+
this.isUsingArrowKeys = true;
|
|
122
|
+
this.applyArrowKeyTabindex();
|
|
123
|
+
}
|
|
124
|
+
this.focusPrevious(currentIndex);
|
|
125
|
+
handled = true;
|
|
126
|
+
}
|
|
127
|
+
break;
|
|
128
|
+
case 'ArrowDown':
|
|
129
|
+
if (this.orientation === 'vertical') {
|
|
130
|
+
isArrowKey = true;
|
|
131
|
+
if (!this.isUsingArrowKeys) {
|
|
132
|
+
this.isUsingArrowKeys = true;
|
|
133
|
+
this.applyArrowKeyTabindex();
|
|
134
|
+
}
|
|
135
|
+
this.focusNext(currentIndex);
|
|
136
|
+
handled = true;
|
|
137
|
+
}
|
|
138
|
+
break;
|
|
139
|
+
case 'ArrowUp':
|
|
140
|
+
if (this.orientation === 'vertical') {
|
|
141
|
+
isArrowKey = true;
|
|
142
|
+
if (!this.isUsingArrowKeys) {
|
|
143
|
+
this.isUsingArrowKeys = true;
|
|
144
|
+
this.applyArrowKeyTabindex();
|
|
145
|
+
}
|
|
146
|
+
this.focusPrevious(currentIndex);
|
|
147
|
+
handled = true;
|
|
148
|
+
}
|
|
149
|
+
break;
|
|
150
|
+
case 'Home':
|
|
151
|
+
isArrowKey = true;
|
|
152
|
+
if (!this.isUsingArrowKeys) {
|
|
153
|
+
this.isUsingArrowKeys = true;
|
|
154
|
+
this.applyArrowKeyTabindex();
|
|
155
|
+
}
|
|
156
|
+
this.focusFirst();
|
|
157
|
+
handled = true;
|
|
158
|
+
break;
|
|
159
|
+
case 'End':
|
|
160
|
+
isArrowKey = true;
|
|
161
|
+
if (!this.isUsingArrowKeys) {
|
|
162
|
+
this.isUsingArrowKeys = true;
|
|
163
|
+
this.applyArrowKeyTabindex();
|
|
164
|
+
}
|
|
165
|
+
this.focusLast();
|
|
166
|
+
handled = true;
|
|
167
|
+
break;
|
|
168
|
+
case 'Enter':
|
|
169
|
+
case ' ':
|
|
170
|
+
this.activateItem(target);
|
|
171
|
+
handled = true;
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
if (handled) {
|
|
175
|
+
event.preventDefault();
|
|
176
|
+
event.stopPropagation();
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
focusNext(currentIndex) {
|
|
180
|
+
if (this.focusableItems.length === 0) {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
let nextIndex = currentIndex + 1;
|
|
184
|
+
if (nextIndex >= this.focusableItems.length) {
|
|
185
|
+
nextIndex = 0;
|
|
186
|
+
}
|
|
187
|
+
this.focusItemAtIndex(nextIndex);
|
|
188
|
+
}
|
|
189
|
+
focusPrevious(currentIndex) {
|
|
190
|
+
if (this.focusableItems.length === 0) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
let previousIndex = currentIndex - 1;
|
|
194
|
+
if (previousIndex < 0) {
|
|
195
|
+
previousIndex = this.focusableItems.length - 1;
|
|
196
|
+
}
|
|
197
|
+
this.focusItemAtIndex(previousIndex);
|
|
198
|
+
}
|
|
199
|
+
focusFirst() {
|
|
200
|
+
if (this.focusableItems.length > 0) {
|
|
201
|
+
this.focusItemAtIndex(0);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
focusLast() {
|
|
205
|
+
if (this.focusableItems.length > 0) {
|
|
206
|
+
this.focusItemAtIndex(this.focusableItems.length - 1);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
focusItemAtIndex(index) {
|
|
210
|
+
if (index < 0 || index >= this.focusableItems.length) {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
this.currentFocusIndex = index;
|
|
214
|
+
this.focusableItems.forEach((item, i) => {
|
|
215
|
+
item.setAttribute('tabindex', i === index ? '0' : '-1');
|
|
216
|
+
});
|
|
217
|
+
this.focusableItems[index].focus();
|
|
218
|
+
this.itemFocused.emit(this.focusableItems[index]);
|
|
219
|
+
}
|
|
220
|
+
activateItem(item) {
|
|
221
|
+
item.click();
|
|
222
|
+
this.itemActivated.emit(item);
|
|
223
|
+
}
|
|
224
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KeyboardNavDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
225
|
+
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: KeyboardNavDirective, selector: "[mvKeyboardNav]", inputs: { orientation: ["mvKeyboardNav", "orientation"] }, outputs: { itemFocused: "itemFocused", itemActivated: "itemActivated" }, host: { listeners: { "keydown": "onKeyDown($event)" } }, ngImport: i0 }); }
|
|
226
|
+
}
|
|
227
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KeyboardNavDirective, decorators: [{
|
|
228
|
+
type: Directive,
|
|
229
|
+
args: [{
|
|
230
|
+
selector: '[mvKeyboardNav]'
|
|
231
|
+
}]
|
|
232
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { orientation: [{
|
|
233
|
+
type: Input,
|
|
234
|
+
args: ['mvKeyboardNav']
|
|
235
|
+
}], itemFocused: [{
|
|
236
|
+
type: Output
|
|
237
|
+
}], itemActivated: [{
|
|
238
|
+
type: Output
|
|
239
|
+
}], onKeyDown: [{
|
|
240
|
+
type: HostListener,
|
|
241
|
+
args: ['keydown', ['$event']]
|
|
242
|
+
}] } });
|
|
243
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQtbmF2LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhLXZpZXdlci9zcmMvbGliL3NoYXJlZC9kaXJlY3RpdmVzL2tleWJvYXJkLW5hdi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7O0FBT3ZCLE1BQU0sT0FBTyxvQkFBb0I7SUFVL0IsWUFBb0IsVUFBbUM7UUFBbkMsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFUL0IsZ0JBQVcsR0FBMkIsWUFBWSxDQUFDO1FBQ2pFLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQWUsQ0FBQztRQUM5QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFlLENBQUM7UUFFbEQsbUJBQWMsR0FBa0IsRUFBRSxDQUFDO1FBQ25DLHNCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXZCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztJQUV5QixDQUFDO0lBRTNELFFBQVE7UUFDTixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsRUFBRTtZQUNoRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMs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QVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBLZXlib2FyZE5hdk9yaWVudGF0aW9uID0gJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW212S2V5Ym9hcmROYXZdJ1xufSlcbmV4cG9ydCBjbGFzcyBLZXlib2FyZE5hdkRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCdtdktleWJvYXJkTmF2Jykgb3JpZW50YXRpb246IEtleWJvYXJkTmF2T3JpZW50YXRpb24gPSAnaG9yaXpvbnRhbCc7XG4gIEBPdXRwdXQoKSBpdGVtRm9jdXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SFRNTEVsZW1lbnQ+KCk7XG4gIEBPdXRwdXQoKSBpdGVtQWN0aXZhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxIVE1MRWxlbWVudD4oKTtcblxuICBwcml2YXRlIGZvY3VzYWJsZUl0ZW1zOiBIVE1MRWxlbWVudFtdID0gW107XG4gIHByaXZhdGUgY3VycmVudEZvY3VzSW5kZXggPSAtMTtcbiAgcHJpdmF0ZSBtdXRhdGlvbk9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyO1xuICBwcml2YXRlIGlzVXNpbmdBcnJvd0tleXMgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlRm9jdXNhYmxlSXRlbXMoKTtcbiAgICB0aGlzLnNldHVwTXV0YXRpb25PYnNlcnZlcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubXV0YXRpb25PYnNlcnZlcikge1xuICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldHVwTXV0YXRpb25PYnNlcnZlcigpOiB2b2lkIHtcbiAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUZvY3VzYWJsZUl0ZW1zKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwge1xuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsnY2xhc3MnLCAnZGlzYWJsZWQnLCAnaGlkZGVuJ11cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRm9jdXNhYmxlSXRlbXMoKTogdm9pZCB7XG4gICAgY29uc3QgYWxsSXRlbXMgPSBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oJ2J1dHRvbjpub3QoW2Rpc2FibGVkXSknKVxuICAgICk7XG5cbiAgICB0aGlzLmZvY3VzYWJsZUl0ZW1zID0gYWxsSXRlbXMuZmlsdGVyKGl0ZW0gPT4gdGhpcy5pc1Zpc2libGUoaXRlbSkpO1xuXG4gICAgaWYgKHRoaXMuaXNVc2luZ0Fycm93S2V5cykge1xuICAgICAgdGhpcy5hcHBseUFycm93S2V5VGFiaW5kZXgoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c2FibGVJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoIWl0ZW0uaGFzQXR0cmlidXRlKCd0YWJpbmRleCcpIHx8IGl0ZW0uZ2V0QXR0cmlidXRlKCd0YWJpbmRleCcpID09PSAnLTEnKSB7XG4gICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1Zpc2libGUoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gICAgaWYgKGNvbXB1dGVkU3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnIHx8IGNvbXB1dGVkU3R5bGUudmlzaWJpbGl0eSA9PT0gJ2hpZGRlbicpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBpZiBhbnkgcGFyZW50IGVsZW1lbnQgaXMgaGlkZGVuICh1cCB0byB0aGUgZGlyZWN0aXZlJ3MgaG9zdCBlbGVtZW50KVxuICAgIGxldCBwYXJlbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQgIT09IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBjb25zdCBwYXJlbnRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudCk7XG4gICAgICBpZiAocGFyZW50U3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnIHx8IHBhcmVudFN0eWxlLnZpc2liaWxpdHkgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50O1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUFycm93S2V5VGFiaW5kZXgoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGluZGV4VG9NYWtlVGFiYmFibGUgPSAwO1xuXG4gICAgaWYgKHRoaXMuY3VycmVudEZvY3VzSW5kZXggPj0gMCAmJiB0aGlzLmN1cnJlbnRGb2N1c0luZGV4IDwgdGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGgpIHtcbiAgICAgIGluZGV4VG9NYWtlVGFiYmFibGUgPSB0aGlzLmN1cnJlbnRGb2N1c0luZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmb2N1c2VkRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBjb25zdCBmb2N1c2VkSW5kZXggPSB0aGlzLmZvY3VzYWJsZUl0ZW1zLmluZGV4T2YoZm9jdXNlZEVsZW1lbnQpO1xuICAgICAgaWYgKGZvY3VzZWRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgaW5kZXhUb01ha2VUYWJiYWJsZSA9IGZvY3VzZWRJbmRleDtcbiAgICAgICAgdGhpcy5jdXJyZW50Rm9jdXNJbmRleCA9IGZvY3VzZWRJbmRleDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZvY3VzYWJsZUl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBpdGVtLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCBpbmRleCA9PT0gaW5kZXhUb01ha2VUYWJiYWJsZSA/ICcwJyA6ICctMScpO1xuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLmZvY3VzYWJsZUl0ZW1zLmluZGV4T2YodGFyZ2V0KTtcblxuICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGhhbmRsZWQgPSBmYWxzZTtcbiAgICBsZXQgaXNBcnJvd0tleSA9IGZhbHNlO1xuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgIGlmICh0aGlzLmlzVXNpbmdBcnJvd0tleXMpIHtcbiAgICAgICAgICB0aGlzLmlzVXNpbmdBcnJvd0tleXMgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmZvY3VzYWJsZUl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICBpZiAodGhpcy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgaXNBcnJvd0tleSA9IHRydWU7XG4gICAgICAgICAgaWYgKCF0aGlzLmlzVXNpbmdBcnJvd0tleXMpIHtcbiAgICAgICAgICAgIHRoaXMuaXNVc2luZ0Fycm93S2V5cyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmFwcGx5QXJyb3dLZXlUYWJpbmRleCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmZvY3VzTmV4dChjdXJyZW50SW5kZXgpO1xuICAgICAgICAgIGhhbmRsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICBpZiAodGhpcy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgaXNBcnJvd0tleSA9IHRydWU7XG4gICAgICAgICAgaWYgKCF0aGlzLmlzVXNpbmdBcnJvd0tleXMpIHtcbiAgICAgICAgICAgIHRoaXMuaXNVc2luZ0Fycm93S2V5cyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmFwcGx5QXJyb3dLZXlUYWJpbmRleCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmZvY3VzUHJldmlvdXMoY3VycmVudEluZGV4KTtcbiAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgICBpc0Fycm93S2V5ID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoIXRoaXMuaXNVc2luZ0Fycm93S2V5cykge1xuICAgICAgICAgICAgdGhpcy5pc1VzaW5nQXJyb3dLZXlzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlBcnJvd0tleVRhYmluZGV4KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZm9jdXNOZXh0KGN1cnJlbnRJbmRleCk7XG4gICAgICAgICAgaGFuZGxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBpZiAodGhpcy5vcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICAgIGlzQXJyb3dLZXkgPSB0cnVlO1xuICAgICAgICAgIGlmICghdGhpcy5pc1VzaW5nQXJyb3dLZXlzKSB7XG4gICAgICAgICAgICB0aGlzLmlzVXNpbmdBcnJvd0tleXMgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5hcHBseUFycm93S2V5VGFiaW5kZXgoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5mb2N1c1ByZXZpb3VzKGN1cnJlbnRJbmRleCk7XG4gICAgICAgICAgaGFuZGxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgICBpc0Fycm93S2V5ID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzVXNpbmdBcnJvd0tleXMpIHtcbiAgICAgICAgICB0aGlzLmlzVXNpbmdBcnJvd0tleXMgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuYXBwbHlBcnJvd0tleVRhYmluZGV4KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1c0ZpcnN0KCk7XG4gICAgICAgIGhhbmRsZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW5kJzpcbiAgICAgICAgaXNBcnJvd0tleSA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5pc1VzaW5nQXJyb3dLZXlzKSB7XG4gICAgICAgICAgdGhpcy5pc1VzaW5nQXJyb3dLZXlzID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmFwcGx5QXJyb3dLZXlUYWJpbmRleCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXNMYXN0KCk7XG4gICAgICAgIGhhbmRsZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgY2FzZSAnICc6XG4gICAgICAgIHRoaXMuYWN0aXZhdGVJdGVtKHRhcmdldCk7XG4gICAgICAgIGhhbmRsZWQgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoaGFuZGxlZCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNOZXh0KGN1cnJlbnRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG5leHRJbmRleCA9IGN1cnJlbnRJbmRleCArIDE7XG5cbiAgICBpZiAobmV4dEluZGV4ID49IHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoKSB7XG4gICAgICBuZXh0SW5kZXggPSAwO1xuICAgIH1cblxuICAgIHRoaXMuZm9jdXNJdGVtQXRJbmRleChuZXh0SW5kZXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c1ByZXZpb3VzKGN1cnJlbnRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHByZXZpb3VzSW5kZXggPSBjdXJyZW50SW5kZXggLSAxO1xuXG4gICAgaWYgKHByZXZpb3VzSW5kZXggPCAwKSB7XG4gICAgICBwcmV2aW91c0luZGV4ID0gdGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGggLSAxO1xuICAgIH1cblxuICAgIHRoaXMuZm9jdXNJdGVtQXRJbmRleChwcmV2aW91c0luZGV4KTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNGaXJzdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmZvY3VzSXRlbUF0SW5kZXgoMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c0xhc3QoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5mb2N1c0l0ZW1BdEluZGV4KHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoIC0gMSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c0l0ZW1BdEluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50Rm9jdXNJbmRleCA9IGluZGV4O1xuXG4gICAgdGhpcy5mb2N1c2FibGVJdGVtcy5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XG4gICAgICBpdGVtLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCBpID09PSBpbmRleCA/ICcwJyA6ICctMScpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mb2N1c2FibGVJdGVtc1tpbmRleF0uZm9jdXMoKTtcbiAgICB0aGlzLml0ZW1Gb2N1c2VkLmVtaXQodGhpcy5mb2N1c2FibGVJdGVtc1tpbmRleF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhY3RpdmF0ZUl0ZW0oaXRlbTogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBpdGVtLmNsaWNrKCk7XG4gICAgdGhpcy5pdGVtQWN0aXZhdGVkLmVtaXQoaXRlbSk7XG4gIH1cbn0iXX0=
|
|
@@ -6,20 +6,23 @@ import { GovUkFieldsetComponent } from './gov-uk-fieldset/gov-uk-fieldset.compon
|
|
|
6
6
|
import { GovUkLabelComponent } from './gov-uk-label/gov-uk-label.component';
|
|
7
7
|
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
8
8
|
import { RouterModule } from '@angular/router';
|
|
9
|
+
import { KeyboardNavDirective } from './directives/keyboard-nav.directive';
|
|
9
10
|
import * as i0 from "@angular/core";
|
|
10
11
|
export class SharedModule {
|
|
11
12
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SharedModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
12
13
|
/** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: SharedModule, declarations: [GovUkDateComponent,
|
|
13
14
|
GovUkErrorMessageComponent,
|
|
14
15
|
GovUkFieldsetComponent,
|
|
15
|
-
GovUkLabelComponent
|
|
16
|
+
GovUkLabelComponent,
|
|
17
|
+
KeyboardNavDirective], imports: [CommonModule,
|
|
16
18
|
FormsModule,
|
|
17
19
|
ReactiveFormsModule,
|
|
18
20
|
CommonModule,
|
|
19
21
|
RouterModule], exports: [GovUkDateComponent,
|
|
20
22
|
GovUkErrorMessageComponent,
|
|
21
23
|
GovUkFieldsetComponent,
|
|
22
|
-
GovUkLabelComponent
|
|
24
|
+
GovUkLabelComponent,
|
|
25
|
+
KeyboardNavDirective] }); }
|
|
23
26
|
/** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SharedModule, imports: [CommonModule,
|
|
24
27
|
FormsModule,
|
|
25
28
|
ReactiveFormsModule,
|
|
@@ -40,14 +43,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
40
43
|
GovUkDateComponent,
|
|
41
44
|
GovUkErrorMessageComponent,
|
|
42
45
|
GovUkFieldsetComponent,
|
|
43
|
-
GovUkLabelComponent
|
|
46
|
+
GovUkLabelComponent,
|
|
47
|
+
KeyboardNavDirective
|
|
44
48
|
],
|
|
45
49
|
exports: [
|
|
46
50
|
GovUkDateComponent,
|
|
47
51
|
GovUkErrorMessageComponent,
|
|
48
52
|
GovUkFieldsetComponent,
|
|
49
|
-
GovUkLabelComponent
|
|
53
|
+
GovUkLabelComponent,
|
|
54
|
+
KeyboardNavDirective
|
|
50
55
|
]
|
|
51
56
|
}]
|
|
52
57
|
}] });
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhLXZpZXdlci9zcmMvbGliL3NoYXJlZC9zaGFyZWQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7O0FBeUIzRSxNQUFNLE9BQU8sWUFBWTtrSUFBWixZQUFZO21JQUFaLFlBQVksaUJBZHJCLGtCQUFrQjtZQUNsQiwwQkFBMEI7WUFDMUIsc0JBQXNCO1lBQ3RCLG1CQUFtQjtZQUNuQixvQkFBb0IsYUFYcEIsWUFBWTtZQUNaLFdBQVc7WUFDWCxtQkFBbUI7WUFDbkIsWUFBWTtZQUNaLFlBQVksYUFVWixrQkFBa0I7WUFDbEIsMEJBQTBCO1lBQzFCLHNCQUFzQjtZQUN0QixtQkFBbUI7WUFDbkIsb0JBQW9CO21JQUdYLFlBQVksWUFyQnJCLFlBQVk7WUFDWixXQUFXO1lBQ1gsbUJBQW1CO1lBQ25CLFlBQVk7WUFDWixZQUFZOzs0RkFpQkgsWUFBWTtrQkF2QnhCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLFlBQVk7d0JBQ1osWUFBWTtxQkFDYjtvQkFDRCxZQUFZLEVBQUU7d0JBQ1osa0JBQWtCO3dCQUNsQiwwQkFBMEI7d0JBQzFCLHNCQUFzQjt3QkFDdEIsbUJBQW1CO3dCQUNuQixvQkFBb0I7cUJBQ3JCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxrQkFBa0I7d0JBQ2xCLDBCQUEwQjt3QkFDMUIsc0JBQXNCO3dCQUN0QixtQkFBbUI7d0JBQ25CLG9CQUFvQjtxQkFDckI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEdvdlVrRGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vZ292LXVrLWRhdGUvZ292LXVrLWRhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IEdvdlVrRXJyb3JNZXNzYWdlQ29tcG9uZW50IH0gZnJvbSAnLi9nb3YtdWstZXJyb3ItbWVzc2FnZS9nb3YtdWstZXJyb3ItbWVzc2FnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgR292VWtGaWVsZHNldENvbXBvbmVudCB9IGZyb20gJy4vZ292LXVrLWZpZWxkc2V0L2dvdi11ay1maWVsZHNldC5jb21wb25lbnQnO1xuaW1wb3J0IHsgR292VWtMYWJlbENvbXBvbmVudCB9IGZyb20gJy4vZ292LXVrLWxhYmVsL2dvdi11ay1sYWJlbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgS2V5Ym9hcmROYXZEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMva2V5Ym9hcmQtbmF2LmRpcmVjdGl2ZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUm91dGVyTW9kdWxlXG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEdvdlVrRGF0ZUNvbXBvbmVudCxcbiAgICBHb3ZVa0Vycm9yTWVzc2FnZUNvbXBvbmVudCxcbiAgICBHb3ZVa0ZpZWxkc2V0Q29tcG9uZW50LFxuICAgIEdvdlVrTGFiZWxDb21wb25lbnQsXG4gICAgS2V5Ym9hcmROYXZEaXJlY3RpdmVcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIEdvdlVrRGF0ZUNvbXBvbmVudCxcbiAgICBHb3ZVa0Vycm9yTWVzc2FnZUNvbXBvbmVudCxcbiAgICBHb3ZVa0ZpZWxkc2V0Q29tcG9uZW50LFxuICAgIEdvdlVrTGFiZWxDb21wb25lbnQsXG4gICAgS2V5Ym9hcmROYXZEaXJlY3RpdmVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTaGFyZWRNb2R1bGUge31cbiJdfQ==
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
1
|
+
import { Component, HostListener } from '@angular/core';
|
|
2
2
|
import { SearchType } from '../toolbar-event.service';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import * as i1 from "../toolbar-event.service";
|
|
5
5
|
import * as i2 from "../toolbar-button-visibility.service";
|
|
6
|
-
import * as i3 from "
|
|
7
|
-
import * as i4 from "
|
|
8
|
-
import * as i5 from "
|
|
6
|
+
import * as i3 from "../toolbar-focus.service";
|
|
7
|
+
import * as i4 from "../../shared/directives/keyboard-nav.directive";
|
|
8
|
+
import * as i5 from "../../shared/directives/tooltip-dismiss.directive";
|
|
9
|
+
import * as i6 from "@angular/common";
|
|
10
|
+
import * as i7 from "rpx-xui-translation";
|
|
9
11
|
export class HighlightToolbarComponent {
|
|
10
|
-
constructor(toolbarEventService, toolbarButtons) {
|
|
12
|
+
constructor(toolbarEventService, toolbarButtons, toolbarFocusService) {
|
|
11
13
|
this.toolbarEventService = toolbarEventService;
|
|
12
14
|
this.toolbarButtons = toolbarButtons;
|
|
15
|
+
this.toolbarFocusService = toolbarFocusService;
|
|
13
16
|
this.subscriptions = [];
|
|
14
17
|
}
|
|
15
18
|
ngOnInit() {
|
|
@@ -31,16 +34,41 @@ export class HighlightToolbarComponent {
|
|
|
31
34
|
this.toolbarEventService.highlightModeSubject.next(false);
|
|
32
35
|
this.toolbarEventService.openRedactionSearch.next({ modeType: SearchType.Highlight, isOpen: false });
|
|
33
36
|
}
|
|
37
|
+
onEscapeKey(event) {
|
|
38
|
+
event.preventDefault();
|
|
39
|
+
event.stopPropagation();
|
|
40
|
+
this.closeAndReturnFocus();
|
|
41
|
+
}
|
|
42
|
+
onArrowUp(event) {
|
|
43
|
+
const target = event.target;
|
|
44
|
+
const highlightToolbar = target.closest('.redaction');
|
|
45
|
+
if (highlightToolbar) {
|
|
46
|
+
this.returnFocusToMainToolbar();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
closeAndReturnFocus() {
|
|
50
|
+
this.onClose();
|
|
51
|
+
this.returnFocusToMainToolbar();
|
|
52
|
+
}
|
|
53
|
+
returnFocusToMainToolbar() {
|
|
54
|
+
this.toolbarFocusService.focusToolbarButton('#mvHighlightBtn');
|
|
55
|
+
}
|
|
34
56
|
ngOnDestroy() {
|
|
35
57
|
for (const subscription of this.subscriptions) {
|
|
36
58
|
subscription.unsubscribe();
|
|
37
59
|
}
|
|
38
60
|
}
|
|
39
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HighlightToolbarComponent, deps: [{ token: i1.ToolbarEventService }, { token: i2.ToolbarButtonVisibilityService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
40
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: HighlightToolbarComponent, selector: "mv-highlight-toolbar", ngImport: i0, template: "<div class=\"redaction\">\n <label class=\"govuk-label redaction-title\" data-l10n-id=\"redaction_options\"\n >{{ \"Highlight options\" | rpxTranslate }}</label\n >\n\n <button\n id=\"mvDrawBtn\"\n #mvDrawBtn\n class=\"mv-button mv-toolbar__menu-button--draw mv-tooltip\"\n [attr.data-tooltip]=\"'Draw a box' | rpxTranslate\"\n [class.toggled]=\"toolbarEventService.drawModeSubject | async\"\n aria-pressed=\"false\"\n data-l10n-id=\"mvDrawBtn\"\n (click)=\"onClickDrawToggle()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"draw_label\">{{ \"Draw a box\" | rpxTranslate }}</span>\n </button>\n\n <button\n id=\"highlightTextBtn\"\n class=\"mv-button mv-toolbar__menu-button--highlight mv-tooltip\"\n [attr.data-tooltip]=\"'Highlight text' | rpxTranslate\"\n data-l10n-id=\"highlightTextBtn\"\n (click)=\"onHighlight()\"\n [class.toggled]=\"toolbarEventService.highlightModeSubject | async\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"highlightTextBtn_label\">{{ \"Highlight text\" | rpxTranslate }}</span>\n </button>\n\n <button\n id=\"mvHighlightFromSearchBtn\"\n [attr.data-tooltip]=\"'From search' | rpxTranslate\"\n data-l10n-id=\"fromSearchButton\"\n class=\"mv-button redaction-button--search mv-tooltip\"\n (click)=\"onAllSearch()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span style=\"width: 5rem\" data-l10n-id=\"fromSearchButton_label\"\n >{{ \"From search\" | rpxTranslate }}</span\n >\n </button>\n\n <button\n id=\"mvCloseBtn\"\n #mvCloseBtn\n class=\"mv-button redaction-button--close mv-tooltip\"\n [attr.data-tooltip]=\"'Close highlight' | rpxTranslate\"\n data-l10n-id=\"mvRedactBtn\"\n (click)=\"onClose()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"Close Redaction\">{{ \"Close Highlight\" | rpxTranslate }}</span>\n </button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type:
|
|
61
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HighlightToolbarComponent, deps: [{ token: i1.ToolbarEventService }, { token: i2.ToolbarButtonVisibilityService }, { token: i3.ToolbarFocusService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
62
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: HighlightToolbarComponent, selector: "mv-highlight-toolbar", host: { listeners: { "keydown.escape": "onEscapeKey($event)", "keydown.arrowup": "onArrowUp($event)" } }, ngImport: i0, template: "<div class=\"redaction\" [mvKeyboardNav]=\"'horizontal'\">\n <label class=\"govuk-label redaction-title\" data-l10n-id=\"redaction_options\"\n >{{ \"Highlight options\" | rpxTranslate }}</label\n >\n\n <button\n id=\"mvDrawBtn\"\n #mvDrawBtn\n class=\"mv-button mv-toolbar__menu-button--draw mv-tooltip\"\n [attr.data-tooltip]=\"'Draw a box' | rpxTranslate\"\n [class.toggled]=\"toolbarEventService.drawModeSubject | async\"\n aria-pressed=\"false\"\n data-l10n-id=\"mvDrawBtn\"\n (click)=\"onClickDrawToggle()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"draw_label\">{{ \"Draw a box\" | rpxTranslate }}</span>\n </button>\n\n <button\n id=\"highlightTextBtn\"\n class=\"mv-button mv-toolbar__menu-button--highlight mv-tooltip\"\n [attr.data-tooltip]=\"'Highlight text' | rpxTranslate\"\n data-l10n-id=\"highlightTextBtn\"\n (click)=\"onHighlight()\"\n [class.toggled]=\"toolbarEventService.highlightModeSubject | async\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"highlightTextBtn_label\">{{ \"Highlight text\" | rpxTranslate }}</span>\n </button>\n\n <button\n id=\"mvHighlightFromSearchBtn\"\n [attr.data-tooltip]=\"'From search' | rpxTranslate\"\n data-l10n-id=\"fromSearchButton\"\n class=\"mv-button redaction-button--search mv-tooltip\"\n (click)=\"onAllSearch()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span style=\"width: 5rem\" data-l10n-id=\"fromSearchButton_label\"\n >{{ \"From search\" | rpxTranslate }}</span\n >\n </button>\n\n <button\n id=\"mvCloseBtn\"\n #mvCloseBtn\n class=\"mv-button redaction-button--close mv-tooltip\"\n [attr.data-tooltip]=\"'Close highlight' | rpxTranslate\"\n data-l10n-id=\"mvRedactBtn\"\n (click)=\"onClose()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"Close Redaction\">{{ \"Close Highlight\" | rpxTranslate }}</span>\n </button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.KeyboardNavDirective, selector: "[mvKeyboardNav]", inputs: ["mvKeyboardNav"], outputs: ["itemFocused", "itemActivated"] }, { kind: "directive", type: i5.TooltipDismissDirective, selector: ".mv-tooltip, [mvTooltipDismiss]" }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.RpxTranslatePipe, name: "rpxTranslate" }] }); }
|
|
41
63
|
}
|
|
42
64
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HighlightToolbarComponent, decorators: [{
|
|
43
65
|
type: Component,
|
|
44
|
-
args: [{ selector: 'mv-highlight-toolbar', template: "<div class=\"redaction\">\n <label class=\"govuk-label redaction-title\" data-l10n-id=\"redaction_options\"\n >{{ \"Highlight options\" | rpxTranslate }}</label\n >\n\n <button\n id=\"mvDrawBtn\"\n #mvDrawBtn\n class=\"mv-button mv-toolbar__menu-button--draw mv-tooltip\"\n [attr.data-tooltip]=\"'Draw a box' | rpxTranslate\"\n [class.toggled]=\"toolbarEventService.drawModeSubject | async\"\n aria-pressed=\"false\"\n data-l10n-id=\"mvDrawBtn\"\n (click)=\"onClickDrawToggle()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"draw_label\">{{ \"Draw a box\" | rpxTranslate }}</span>\n </button>\n\n <button\n id=\"highlightTextBtn\"\n class=\"mv-button mv-toolbar__menu-button--highlight mv-tooltip\"\n [attr.data-tooltip]=\"'Highlight text' | rpxTranslate\"\n data-l10n-id=\"highlightTextBtn\"\n (click)=\"onHighlight()\"\n [class.toggled]=\"toolbarEventService.highlightModeSubject | async\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"highlightTextBtn_label\">{{ \"Highlight text\" | rpxTranslate }}</span>\n </button>\n\n <button\n id=\"mvHighlightFromSearchBtn\"\n [attr.data-tooltip]=\"'From search' | rpxTranslate\"\n data-l10n-id=\"fromSearchButton\"\n class=\"mv-button redaction-button--search mv-tooltip\"\n (click)=\"onAllSearch()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span style=\"width: 5rem\" data-l10n-id=\"fromSearchButton_label\"\n >{{ \"From search\" | rpxTranslate }}</span\n >\n </button>\n\n <button\n id=\"mvCloseBtn\"\n #mvCloseBtn\n class=\"mv-button redaction-button--close mv-tooltip\"\n [attr.data-tooltip]=\"'Close highlight' | rpxTranslate\"\n data-l10n-id=\"mvRedactBtn\"\n (click)=\"onClose()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"Close Redaction\">{{ \"Close Highlight\" | rpxTranslate }}</span>\n </button>\n</div>\n" }]
|
|
45
|
-
}], ctorParameters: () => [{ type: i1.ToolbarEventService }, { type: i2.ToolbarButtonVisibilityService }]
|
|
46
|
-
|
|
66
|
+
args: [{ selector: 'mv-highlight-toolbar', template: "<div class=\"redaction\" [mvKeyboardNav]=\"'horizontal'\">\n <label class=\"govuk-label redaction-title\" data-l10n-id=\"redaction_options\"\n >{{ \"Highlight options\" | rpxTranslate }}</label\n >\n\n <button\n id=\"mvDrawBtn\"\n #mvDrawBtn\n class=\"mv-button mv-toolbar__menu-button--draw mv-tooltip\"\n [attr.data-tooltip]=\"'Draw a box' | rpxTranslate\"\n [class.toggled]=\"toolbarEventService.drawModeSubject | async\"\n aria-pressed=\"false\"\n data-l10n-id=\"mvDrawBtn\"\n (click)=\"onClickDrawToggle()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"draw_label\">{{ \"Draw a box\" | rpxTranslate }}</span>\n </button>\n\n <button\n id=\"highlightTextBtn\"\n class=\"mv-button mv-toolbar__menu-button--highlight mv-tooltip\"\n [attr.data-tooltip]=\"'Highlight text' | rpxTranslate\"\n data-l10n-id=\"highlightTextBtn\"\n (click)=\"onHighlight()\"\n [class.toggled]=\"toolbarEventService.highlightModeSubject | async\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"highlightTextBtn_label\">{{ \"Highlight text\" | rpxTranslate }}</span>\n </button>\n\n <button\n id=\"mvHighlightFromSearchBtn\"\n [attr.data-tooltip]=\"'From search' | rpxTranslate\"\n data-l10n-id=\"fromSearchButton\"\n class=\"mv-button redaction-button--search mv-tooltip\"\n (click)=\"onAllSearch()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span style=\"width: 5rem\" data-l10n-id=\"fromSearchButton_label\"\n >{{ \"From search\" | rpxTranslate }}</span\n >\n </button>\n\n <button\n id=\"mvCloseBtn\"\n #mvCloseBtn\n class=\"mv-button redaction-button--close mv-tooltip\"\n [attr.data-tooltip]=\"'Close highlight' | rpxTranslate\"\n data-l10n-id=\"mvRedactBtn\"\n (click)=\"onClose()\"\n [disabled]=\"redactionAllInProgress\"\n >\n <span data-l10n-id=\"Close Redaction\">{{ \"Close Highlight\" | rpxTranslate }}</span>\n </button>\n</div>\n" }]
|
|
67
|
+
}], ctorParameters: () => [{ type: i1.ToolbarEventService }, { type: i2.ToolbarButtonVisibilityService }, { type: i3.ToolbarFocusService }], propDecorators: { onEscapeKey: [{
|
|
68
|
+
type: HostListener,
|
|
69
|
+
args: ['keydown.escape', ['$event']]
|
|
70
|
+
}], onArrowUp: [{
|
|
71
|
+
type: HostListener,
|
|
72
|
+
args: ['keydown.arrowup', ['$event']]
|
|
73
|
+
}] } });
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LXRvb2xiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvdG9vbGJhci9oaWdobGlnaHQtdG9vbGJhci9oaWdobGlnaHQtdG9vbGJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi90b29sYmFyL2hpZ2hsaWdodC10b29sYmFyL2hpZ2hsaWdodC10b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQWMsVUFBVSxFQUF1QixNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7QUFhdkYsTUFBTSxPQUFPLHlCQUF5QjtJQUtwQyxZQUE0QixtQkFBd0MsRUFDbEQsY0FBOEMsRUFDN0MsbUJBQXdDO1FBRi9CLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDbEQsbUJBQWMsR0FBZCxjQUFjLENBQWdDO1FBQzdDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFMbkQsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO0lBTXZDLENBQUM7SUFFTCxRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLDBCQUEwQixDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNqRyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsVUFBVSxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFnQixDQUFDLENBQUM7SUFDcEgsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFnQixDQUFDLENBQUM7SUFDckgsQ0FBQztJQUdELFdBQVcsQ0FBQyxLQUFvQjtRQUM5QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFHRCxTQUFTLENBQUMsS0FBb0I7UUFDNUIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQXFCLENBQUM7UUFDM0MsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RELElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRU8sd0JBQXdCO1FBQzVCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxXQUFXO1FBQ1QsS0FBSyxNQUFNLFlBQVksSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDOUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO2tJQS9EVSx5QkFBeUI7c0hBQXpCLHlCQUF5QixzS0NkdEMsMDhEQXdEQTs7NEZEMUNhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSxzQkFBc0I7dUtBdUNoQyxXQUFXO3NCQURWLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUTFDLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2VhcmNoTW9kZSwgU2VhcmNoVHlwZSwgVG9vbGJhckV2ZW50U2VydmljZSB9IGZyb20gJy4uL3Rvb2xiYXItZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBUb29sYmFyQnV0dG9uVmlzaWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi90b29sYmFyLWJ1dHRvbi12aXNpYmlsaXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgVG9vbGJhckZvY3VzU2VydmljZSB9IGZyb20gJy4uL3Rvb2xiYXItZm9jdXMuc2VydmljZSc7XG5pbXBvcnQgKiBhcyBmcm9tU3RvcmUgZnJvbSAnLi4vLi4vc3RvcmUvcmVkdWNlcnMvcmVkdWNlcnMnO1xuaW1wb3J0IHsgU3RvcmUsIHNlbGVjdCB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgZnJvbVJlZGFjdFNlbGVjdG9ycyBmcm9tICcuLi8uLi9zdG9yZS9zZWxlY3RvcnMvcmVkYWN0aW9uLnNlbGVjdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ212LWhpZ2hsaWdodC10b29sYmFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2hpZ2hsaWdodC10b29sYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaGlnaGxpZ2h0LXRvb2xiYXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBIaWdobGlnaHRUb29sYmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcmVkYWN0aW9uQWxsSW5Qcm9ncmVzczogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgdG9vbGJhckV2ZW50U2VydmljZTogVG9vbGJhckV2ZW50U2VydmljZSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgdG9vbGJhckJ1dHRvbnM6IFRvb2xiYXJCdXR0b25WaXNpYmlsaXR5U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRvb2xiYXJGb2N1c1NlcnZpY2U6IFRvb2xiYXJGb2N1c1NlcnZpY2VcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnRvb2xiYXJFdmVudFNlcnZpY2UucmVkYWN0QWxsSW5Qcm9ncmVzc1N1YmplY3Quc3Vic2NyaWJlKGlucHJvZ3Jlc3MgPT4ge1xuICAgICAgdGhpcy5yZWRhY3Rpb25BbGxJblByb2dyZXNzID0gaW5wcm9ncmVzcztcbiAgICB9KSk7XG4gIH1cblxuICBvbkFsbFNlYXJjaCgpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudFNlcnZpY2Uub3BlblJlZGFjdGlvblNlYXJjaC5uZXh0KHsgbW9kZVR5cGU6IFNlYXJjaFR5cGUuSGlnaGxpZ2h0LCBpc09wZW46IHRydWUgfSBhcyBTZWFyY2hNb2RlKTtcbiAgfVxuXG4gIG9uSGlnaGxpZ2h0KCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50U2VydmljZS50b2dnbGVIaWdobGlnaHRNb2RlKCk7XG4gIH1cblxuICBvbkNsaWNrRHJhd1RvZ2dsZSgpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudFNlcnZpY2UudG9nZ2xlRHJhd01vZGUoKTtcbiAgfVxuXG4gIG9uQ2xvc2UoKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRTZXJ2aWNlLmhpZ2hsaWdodFRvb2xiYXJTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIHRoaXMudG9vbGJhckV2ZW50U2VydmljZS5oaWdobGlnaHRNb2RlU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLnRvb2xiYXJFdmVudFNlcnZpY2Uub3BlblJlZGFjdGlvblNlYXJjaC5uZXh0KHsgbW9kZVR5cGU6IFNlYXJjaFR5cGUuSGlnaGxpZ2h0LCBpc09wZW46IGZhbHNlIH0gYXMgU2VhcmNoTW9kZSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXG4gIG9uRXNjYXBlS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmNsb3NlQW5kUmV0dXJuRm9jdXMoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3d1cCcsIFsnJGV2ZW50J10pXG4gIG9uQXJyb3dVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBoaWdobGlnaHRUb29sYmFyID0gdGFyZ2V0LmNsb3Nlc3QoJy5yZWRhY3Rpb24nKTtcbiAgICBpZiAoaGlnaGxpZ2h0VG9vbGJhcikge1xuICAgICAgdGhpcy5yZXR1cm5Gb2N1c1RvTWFpblRvb2xiYXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsb3NlQW5kUmV0dXJuRm9jdXMoKSB7XG4gICAgdGhpcy5vbkNsb3NlKCk7XG4gICAgdGhpcy5yZXR1cm5Gb2N1c1RvTWFpblRvb2xiYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmV0dXJuRm9jdXNUb01haW5Ub29sYmFyKCkge1xuICAgICAgdGhpcy50b29sYmFyRm9jdXNTZXJ2aWNlLmZvY3VzVG9vbGJhckJ1dHRvbignI212SGlnaGxpZ2h0QnRuJyk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHN1YnNjcmlwdGlvbiBvZiB0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwicmVkYWN0aW9uXCIgW212S2V5Ym9hcmROYXZdPVwiJ2hvcml6b250YWwnXCI+XG4gIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsIHJlZGFjdGlvbi10aXRsZVwiIGRhdGEtbDEwbi1pZD1cInJlZGFjdGlvbl9vcHRpb25zXCJcbiAgICA+e3sgXCJIaWdobGlnaHQgb3B0aW9uc1wiIHwgcnB4VHJhbnNsYXRlIH19PC9sYWJlbFxuICA+XG5cbiAgPGJ1dHRvblxuICAgIGlkPVwibXZEcmF3QnRuXCJcbiAgICAjbXZEcmF3QnRuXG4gICAgY2xhc3M9XCJtdi1idXR0b24gbXYtdG9vbGJhcl9fbWVudS1idXR0b24tLWRyYXcgbXYtdG9vbHRpcFwiXG4gICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidEcmF3IGEgYm94JyB8IHJweFRyYW5zbGF0ZVwiXG4gICAgW2NsYXNzLnRvZ2dsZWRdPVwidG9vbGJhckV2ZW50U2VydmljZS5kcmF3TW9kZVN1YmplY3QgfCBhc3luY1wiXG4gICAgYXJpYS1wcmVzc2VkPVwiZmFsc2VcIlxuICAgIGRhdGEtbDEwbi1pZD1cIm12RHJhd0J0blwiXG4gICAgKGNsaWNrKT1cIm9uQ2xpY2tEcmF3VG9nZ2xlKClcIlxuICAgIFtkaXNhYmxlZF09XCJyZWRhY3Rpb25BbGxJblByb2dyZXNzXCJcbiAgPlxuICAgIDxzcGFuIGRhdGEtbDEwbi1pZD1cImRyYXdfbGFiZWxcIj57eyBcIkRyYXcgYSBib3hcIiB8IHJweFRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgPC9idXR0b24+XG5cbiAgPGJ1dHRvblxuICAgIGlkPVwiaGlnaGxpZ2h0VGV4dEJ0blwiXG4gICAgY2xhc3M9XCJtdi1idXR0b24gbXYtdG9vbGJhcl9fbWVudS1idXR0b24tLWhpZ2hsaWdodCBtdi10b29sdGlwXCJcbiAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ0hpZ2hsaWdodCB0ZXh0JyB8IHJweFRyYW5zbGF0ZVwiXG4gICAgZGF0YS1sMTBuLWlkPVwiaGlnaGxpZ2h0VGV4dEJ0blwiXG4gICAgKGNsaWNrKT1cIm9uSGlnaGxpZ2h0KClcIlxuICAgIFtjbGFzcy50b2dnbGVkXT1cInRvb2xiYXJFdmVudFNlcnZpY2UuaGlnaGxpZ2h0TW9kZVN1YmplY3QgfCBhc3luY1wiXG4gICAgW2Rpc2FibGVkXT1cInJlZGFjdGlvbkFsbEluUHJvZ3Jlc3NcIlxuICA+XG4gICAgPHNwYW4gZGF0YS1sMTBuLWlkPVwiaGlnaGxpZ2h0VGV4dEJ0bl9sYWJlbFwiPnt7IFwiSGlnaGxpZ2h0IHRleHRcIiB8IHJweFRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgPC9idXR0b24+XG5cbiAgPGJ1dHRvblxuICAgIGlkPVwibXZIaWdobGlnaHRGcm9tU2VhcmNoQnRuXCJcbiAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ0Zyb20gc2VhcmNoJyB8IHJweFRyYW5zbGF0ZVwiXG4gICAgZGF0YS1sMTBuLWlkPVwiZnJvbVNlYXJjaEJ1dHRvblwiXG4gICAgY2xhc3M9XCJtdi1idXR0b24gcmVkYWN0aW9uLWJ1dHRvbi0tc2VhcmNoIG12LXRvb2x0aXBcIlxuICAgIChjbGljayk9XCJvbkFsbFNlYXJjaCgpXCJcbiAgICBbZGlzYWJsZWRdPVwicmVkYWN0aW9uQWxsSW5Qcm9ncmVzc1wiXG4gID5cbiAgICA8c3BhbiBzdHlsZT1cIndpZHRoOiA1cmVtXCIgZGF0YS1sMTBuLWlkPVwiZnJvbVNlYXJjaEJ1dHRvbl9sYWJlbFwiXG4gICAgICA+e3sgXCJGcm9tIHNlYXJjaFwiIHwgcnB4VHJhbnNsYXRlIH19PC9zcGFuXG4gICAgPlxuICA8L2J1dHRvbj5cblxuICA8YnV0dG9uXG4gICAgaWQ9XCJtdkNsb3NlQnRuXCJcbiAgICAjbXZDbG9zZUJ0blxuICAgIGNsYXNzPVwibXYtYnV0dG9uIHJlZGFjdGlvbi1idXR0b24tLWNsb3NlIG12LXRvb2x0aXBcIlxuICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInQ2xvc2UgaGlnaGxpZ2h0JyB8IHJweFRyYW5zbGF0ZVwiXG4gICAgZGF0YS1sMTBuLWlkPVwibXZSZWRhY3RCdG5cIlxuICAgIChjbGljayk9XCJvbkNsb3NlKClcIlxuICAgIFtkaXNhYmxlZF09XCJyZWRhY3Rpb25BbGxJblByb2dyZXNzXCJcbiAgPlxuICAgIDxzcGFuIGRhdGEtbDEwbi1pZD1cIkNsb3NlIFJlZGFjdGlvblwiPnt7IFwiQ2xvc2UgSGlnaGxpZ2h0XCIgfCBycHhUcmFuc2xhdGUgfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
|