@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.
Files changed (30) hide show
  1. package/esm2022/lib/icp/confirm-exit/confirm-action-dialog.component.mjs +13 -5
  2. package/esm2022/lib/media-viewer.component.mjs +98 -4
  3. package/esm2022/lib/shared/directives/keyboard-nav.directive.mjs +243 -0
  4. package/esm2022/lib/shared/shared.module.mjs +10 -5
  5. package/esm2022/lib/toolbar/highlight-toolbar/highlight-toolbar.component.mjs +38 -10
  6. package/esm2022/lib/toolbar/main-toolbar/main-toolbar.component.mjs +82 -18
  7. package/esm2022/lib/toolbar/redaction-toolbar/redaction-toolbar.component.mjs +35 -10
  8. package/esm2022/lib/toolbar/toolbar-focus.service.mjs +33 -0
  9. package/esm2022/lib/toolbar/toolbar.module.mjs +12 -6
  10. package/fesm2022/hmcts-media-viewer.mjs +609 -117
  11. package/fesm2022/hmcts-media-viewer.mjs.map +1 -1
  12. package/lib/icp/confirm-exit/confirm-action-dialog.component.d.ts +4 -1
  13. package/lib/icp/confirm-exit/confirm-action-dialog.component.d.ts.map +1 -1
  14. package/lib/media-viewer.component.d.ts +8 -0
  15. package/lib/media-viewer.component.d.ts.map +1 -1
  16. package/lib/shared/directives/keyboard-nav.directive.d.ts +30 -0
  17. package/lib/shared/directives/keyboard-nav.directive.d.ts.map +1 -0
  18. package/lib/shared/shared.module.d.ts +5 -4
  19. package/lib/shared/shared.module.d.ts.map +1 -1
  20. package/lib/toolbar/highlight-toolbar/highlight-toolbar.component.d.ts +7 -1
  21. package/lib/toolbar/highlight-toolbar/highlight-toolbar.component.d.ts.map +1 -1
  22. package/lib/toolbar/main-toolbar/main-toolbar.component.d.ts +12 -1
  23. package/lib/toolbar/main-toolbar/main-toolbar.component.d.ts.map +1 -1
  24. package/lib/toolbar/redaction-toolbar/redaction-toolbar.component.d.ts +6 -1
  25. package/lib/toolbar/redaction-toolbar/redaction-toolbar.component.d.ts.map +1 -1
  26. package/lib/toolbar/toolbar-focus.service.d.ts +7 -0
  27. package/lib/toolbar/toolbar-focus.service.d.ts.map +1 -0
  28. package/lib/toolbar/toolbar.module.d.ts +2 -1
  29. package/lib/toolbar/toolbar.module.d.ts.map +1 -1
  30. 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], imports: [CommonModule,
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhLXZpZXdlci9zcmMvbGliL3NoYXJlZC9zaGFyZWQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLHVEQUF1RCxDQUFDO0FBQ2pHLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxXQUFXLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7O0FBMEI3QyxNQUFNLE9BQU8sWUFBWTtrSUFBWixZQUFZO21JQUFaLFlBQVksaUJBYnJCLGtCQUFrQjtZQUNsQiwwQkFBMEI7WUFDMUIsc0JBQXNCO1lBQ3RCLG1CQUFtQixhQVZuQixZQUFZO1lBQ1osV0FBVztZQUNYLG1CQUFtQjtZQUNuQixZQUFZO1lBQ1osWUFBWSxhQVVaLGtCQUFrQjtZQUNsQiwwQkFBMEI7WUFDMUIsc0JBQXNCO1lBQ3RCLG1CQUFtQjttSUFHVixZQUFZLFlBcEJyQixZQUFZO1lBQ1osV0FBVztZQUNYLG1CQUFtQjtZQUNuQixZQUFZO1lBQ1osWUFBWTs7NEZBZ0JILFlBQVk7a0JBdEJ4QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLFlBQVk7cUJBQ2I7b0JBQ0QsWUFBWSxFQUFFO3dCQUNaLGtCQUFrQjt3QkFDbEIsMEJBQTBCO3dCQUMxQixzQkFBc0I7d0JBQ3RCLG1CQUFtQjtxQkFFcEI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLGtCQUFrQjt3QkFDbEIsMEJBQTBCO3dCQUMxQixzQkFBc0I7d0JBQ3RCLG1CQUFtQjtxQkFDcEI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7R292VWtEYXRlQ29tcG9uZW50fSBmcm9tICcuL2dvdi11ay1kYXRlL2dvdi11ay1kYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQge0dvdlVrRXJyb3JNZXNzYWdlQ29tcG9uZW50fSBmcm9tICcuL2dvdi11ay1lcnJvci1tZXNzYWdlL2dvdi11ay1lcnJvci1tZXNzYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQge0dvdlVrRmllbGRzZXRDb21wb25lbnR9IGZyb20gJy4vZ292LXVrLWZpZWxkc2V0L2dvdi11ay1maWVsZHNldC5jb21wb25lbnQnO1xuaW1wb3J0IHtHb3ZVa0xhYmVsQ29tcG9uZW50fSBmcm9tICcuL2dvdi11ay1sYWJlbC9nb3YtdWstbGFiZWwuY29tcG9uZW50JztcbmltcG9ydCB7Rm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Um91dGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5cblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSb3V0ZXJNb2R1bGVcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgR292VWtEYXRlQ29tcG9uZW50LFxuICAgIEdvdlVrRXJyb3JNZXNzYWdlQ29tcG9uZW50LFxuICAgIEdvdlVrRmllbGRzZXRDb21wb25lbnQsXG4gICAgR292VWtMYWJlbENvbXBvbmVudFxuXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBHb3ZVa0RhdGVDb21wb25lbnQsXG4gICAgR292VWtFcnJvck1lc3NhZ2VDb21wb25lbnQsXG4gICAgR292VWtGaWVsZHNldENvbXBvbmVudCxcbiAgICBHb3ZVa0xhYmVsQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgU2hhcmVkTW9kdWxlIHt9XG4iXX0=
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 "../../shared/directives/tooltip-dismiss.directive";
7
- import * as i4 from "@angular/common";
8
- import * as i5 from "rpx-xui-translation";
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: i3.TooltipDismissDirective, selector: ".mv-tooltip, [mvTooltipDismiss]" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.RpxTranslatePipe, name: "rpxTranslate" }] }); }
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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlnaGxpZ2h0LXRvb2xiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVkaWEtdmlld2VyL3NyYy9saWIvdG9vbGJhci9oaWdobGlnaHQtdG9vbGJhci9oaWdobGlnaHQtdG9vbGJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZWRpYS12aWV3ZXIvc3JjL2xpYi90b29sYmFyL2hpZ2hsaWdodC10b29sYmFyL2hpZ2hsaWdodC10b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBYyxVQUFVLEVBQXVCLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7QUFZdkYsTUFBTSxPQUFPLHlCQUF5QjtJQUtwQyxZQUE0QixtQkFBd0MsRUFDbEQsY0FBOEM7UUFEcEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUNsRCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0M7UUFKeEQsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO0lBSXlCLENBQUM7SUFFckUsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQywwQkFBMEIsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDakcsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFVBQVUsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBZ0IsQ0FBQyxDQUFDO0lBQ3BILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDakQsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBZ0IsQ0FBQyxDQUFDO0lBQ3JILENBQUM7SUFFRCxXQUFXO1FBQ1QsS0FBSyxNQUFNLFlBQVksSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDOUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO2tJQXBDVSx5QkFBeUI7c0hBQXpCLHlCQUF5Qiw0RENidEMseTZEQXdEQTs7NEZEM0NhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZWFyY2hNb2RlLCBTZWFyY2hUeXBlLCBUb29sYmFyRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vdG9vbGJhci1ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IFRvb2xiYXJCdXR0b25WaXNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3Rvb2xiYXItYnV0dG9uLXZpc2liaWxpdHkuc2VydmljZSc7XG5pbXBvcnQgKiBhcyBmcm9tU3RvcmUgZnJvbSAnLi4vLi4vc3RvcmUvcmVkdWNlcnMvcmVkdWNlcnMnO1xuaW1wb3J0IHsgU3RvcmUsIHNlbGVjdCB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgZnJvbVJlZGFjdFNlbGVjdG9ycyBmcm9tICcuLi8uLi9zdG9yZS9zZWxlY3RvcnMvcmVkYWN0aW9uLnNlbGVjdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ212LWhpZ2hsaWdodC10b29sYmFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2hpZ2hsaWdodC10b29sYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaGlnaGxpZ2h0LXRvb2xiYXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBIaWdobGlnaHRUb29sYmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcmVkYWN0aW9uQWxsSW5Qcm9ncmVzczogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgdG9vbGJhckV2ZW50U2VydmljZTogVG9vbGJhckV2ZW50U2VydmljZSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgdG9vbGJhckJ1dHRvbnM6IFRvb2xiYXJCdXR0b25WaXNpYmlsaXR5U2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50b29sYmFyRXZlbnRTZXJ2aWNlLnJlZGFjdEFsbEluUHJvZ3Jlc3NTdWJqZWN0LnN1YnNjcmliZShpbnByb2dyZXNzID0+IHtcbiAgICAgIHRoaXMucmVkYWN0aW9uQWxsSW5Qcm9ncmVzcyA9IGlucHJvZ3Jlc3M7XG4gICAgfSkpO1xuICB9XG5cbiAgb25BbGxTZWFyY2goKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRTZXJ2aWNlLm9wZW5SZWRhY3Rpb25TZWFyY2gubmV4dCh7IG1vZGVUeXBlOiBTZWFyY2hUeXBlLkhpZ2hsaWdodCwgaXNPcGVuOiB0cnVlIH0gYXMgU2VhcmNoTW9kZSk7XG4gIH1cblxuICBvbkhpZ2hsaWdodCgpIHtcbiAgICB0aGlzLnRvb2xiYXJFdmVudFNlcnZpY2UudG9nZ2xlSGlnaGxpZ2h0TW9kZSgpO1xuICB9XG5cbiAgb25DbGlja0RyYXdUb2dnbGUoKSB7XG4gICAgdGhpcy50b29sYmFyRXZlbnRTZXJ2aWNlLnRvZ2dsZURyYXdNb2RlKCk7XG4gIH1cblxuICBvbkNsb3NlKCkge1xuICAgIHRoaXMudG9vbGJhckV2ZW50U2VydmljZS5oaWdobGlnaHRUb29sYmFyU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLnRvb2xiYXJFdmVudFNlcnZpY2UuaGlnaGxpZ2h0TW9kZVN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgdGhpcy50b29sYmFyRXZlbnRTZXJ2aWNlLm9wZW5SZWRhY3Rpb25TZWFyY2gubmV4dCh7IG1vZGVUeXBlOiBTZWFyY2hUeXBlLkhpZ2hsaWdodCwgaXNPcGVuOiBmYWxzZSB9IGFzIFNlYXJjaE1vZGUpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2YgdGhpcy5zdWJzY3JpcHRpb25zKSB7XG4gICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cInJlZGFjdGlvblwiPlxuICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCByZWRhY3Rpb24tdGl0bGVcIiBkYXRhLWwxMG4taWQ9XCJyZWRhY3Rpb25fb3B0aW9uc1wiXG4gICAgPnt7IFwiSGlnaGxpZ2h0IG9wdGlvbnNcIiB8IHJweFRyYW5zbGF0ZSB9fTwvbGFiZWxcbiAgPlxuXG4gIDxidXR0b25cbiAgICBpZD1cIm12RHJhd0J0blwiXG4gICAgI212RHJhd0J0blxuICAgIGNsYXNzPVwibXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1kcmF3IG12LXRvb2x0aXBcIlxuICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCInRHJhdyBhIGJveCcgfCBycHhUcmFuc2xhdGVcIlxuICAgIFtjbGFzcy50b2dnbGVkXT1cInRvb2xiYXJFdmVudFNlcnZpY2UuZHJhd01vZGVTdWJqZWN0IHwgYXN5bmNcIlxuICAgIGFyaWEtcHJlc3NlZD1cImZhbHNlXCJcbiAgICBkYXRhLWwxMG4taWQ9XCJtdkRyYXdCdG5cIlxuICAgIChjbGljayk9XCJvbkNsaWNrRHJhd1RvZ2dsZSgpXCJcbiAgICBbZGlzYWJsZWRdPVwicmVkYWN0aW9uQWxsSW5Qcm9ncmVzc1wiXG4gID5cbiAgICA8c3BhbiBkYXRhLWwxMG4taWQ9XCJkcmF3X2xhYmVsXCI+e3sgXCJEcmF3IGEgYm94XCIgfCBycHhUcmFuc2xhdGUgfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxuXG4gIDxidXR0b25cbiAgICBpZD1cImhpZ2hsaWdodFRleHRCdG5cIlxuICAgIGNsYXNzPVwibXYtYnV0dG9uIG12LXRvb2xiYXJfX21lbnUtYnV0dG9uLS1oaWdobGlnaHQgbXYtdG9vbHRpcFwiXG4gICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidIaWdobGlnaHQgdGV4dCcgfCBycHhUcmFuc2xhdGVcIlxuICAgIGRhdGEtbDEwbi1pZD1cImhpZ2hsaWdodFRleHRCdG5cIlxuICAgIChjbGljayk9XCJvbkhpZ2hsaWdodCgpXCJcbiAgICBbY2xhc3MudG9nZ2xlZF09XCJ0b29sYmFyRXZlbnRTZXJ2aWNlLmhpZ2hsaWdodE1vZGVTdWJqZWN0IHwgYXN5bmNcIlxuICAgIFtkaXNhYmxlZF09XCJyZWRhY3Rpb25BbGxJblByb2dyZXNzXCJcbiAgPlxuICAgIDxzcGFuIGRhdGEtbDEwbi1pZD1cImhpZ2hsaWdodFRleHRCdG5fbGFiZWxcIj57eyBcIkhpZ2hsaWdodCB0ZXh0XCIgfCBycHhUcmFuc2xhdGUgfX08L3NwYW4+XG4gIDwvYnV0dG9uPlxuXG4gIDxidXR0b25cbiAgICBpZD1cIm12SGlnaGxpZ2h0RnJvbVNlYXJjaEJ0blwiXG4gICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidGcm9tIHNlYXJjaCcgfCBycHhUcmFuc2xhdGVcIlxuICAgIGRhdGEtbDEwbi1pZD1cImZyb21TZWFyY2hCdXR0b25cIlxuICAgIGNsYXNzPVwibXYtYnV0dG9uIHJlZGFjdGlvbi1idXR0b24tLXNlYXJjaCBtdi10b29sdGlwXCJcbiAgICAoY2xpY2spPVwib25BbGxTZWFyY2goKVwiXG4gICAgW2Rpc2FibGVkXT1cInJlZGFjdGlvbkFsbEluUHJvZ3Jlc3NcIlxuICA+XG4gICAgPHNwYW4gc3R5bGU9XCJ3aWR0aDogNXJlbVwiIGRhdGEtbDEwbi1pZD1cImZyb21TZWFyY2hCdXR0b25fbGFiZWxcIlxuICAgICAgPnt7IFwiRnJvbSBzZWFyY2hcIiB8IHJweFRyYW5zbGF0ZSB9fTwvc3BhblxuICAgID5cbiAgPC9idXR0b24+XG5cbiAgPGJ1dHRvblxuICAgIGlkPVwibXZDbG9zZUJ0blwiXG4gICAgI212Q2xvc2VCdG5cbiAgICBjbGFzcz1cIm12LWJ1dHRvbiByZWRhY3Rpb24tYnV0dG9uLS1jbG9zZSBtdi10b29sdGlwXCJcbiAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiJ0Nsb3NlIGhpZ2hsaWdodCcgfCBycHhUcmFuc2xhdGVcIlxuICAgIGRhdGEtbDEwbi1pZD1cIm12UmVkYWN0QnRuXCJcbiAgICAoY2xpY2spPVwib25DbG9zZSgpXCJcbiAgICBbZGlzYWJsZWRdPVwicmVkYWN0aW9uQWxsSW5Qcm9ncmVzc1wiXG4gID5cbiAgICA8c3BhbiBkYXRhLWwxMG4taWQ9XCJDbG9zZSBSZWRhY3Rpb25cIj57eyBcIkNsb3NlIEhpZ2hsaWdodFwiIHwgcnB4VHJhbnNsYXRlIH19PC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuIl19
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=