@dsivd/prestations-ng 16.0.0-rc.9 → 16.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/CHANGELOG.md +96 -2
  2. package/dsivd-prestations-ng-v16.0.0.tgz +0 -0
  3. package/esm2020/foehn-dropdown-menu/dropdown-menu-group.type.mjs +3 -0
  4. package/esm2020/foehn-dropdown-menu/dropdown-menu-item.type.mjs +6 -0
  5. package/esm2020/foehn-dropdown-menu/foehn-dropdown-menu.component.mjs +212 -0
  6. package/esm2020/foehn-dropdown-menu/foehn-dropdown-menu.module.mjs +21 -0
  7. package/esm2020/foehn-form/foehn-form.component.mjs +3 -3
  8. package/esm2020/foehn-header/foehn-header.component.mjs +21 -4
  9. package/esm2020/foehn-header/foehn-header.module.mjs +16 -4
  10. package/esm2020/foehn-input/foehn-input-prefixed-text.component.mjs +116 -0
  11. package/esm2020/foehn-input/foehn-input.module.mjs +10 -5
  12. package/esm2020/foehn-input-date-time/foehn-input-date-time.component.mjs +5 -16
  13. package/esm2020/foehn-input-time/foehn-input-time.component.mjs +8 -16
  14. package/esm2020/foehn-upload/abstract-foehn-uploader.component.mjs +19 -5
  15. package/esm2020/foehn-upload/foehn-bo-multi-upload/bo-multi-upload.service.mjs +2 -3
  16. package/esm2020/foehn-upload/foehn-bo-multi-upload/foehn-bo-multi-upload.component.mjs +15 -13
  17. package/esm2020/foehn-upload/foehn-multi-upload/foehn-multi-upload.component.mjs +15 -13
  18. package/esm2020/foehn-upload/foehn-multi-upload/multi-upload.service.mjs +2 -3
  19. package/esm2020/gesdem/gesdem-handler.service.mjs +5 -5
  20. package/esm2020/gesdem-confirmation/gesdem-confirmation.component.mjs +32 -10
  21. package/esm2020/gesdem-error/gesdem-error.component.mjs +16 -2
  22. package/esm2020/index.mjs +7 -1
  23. package/esm2020/sdk-date/date.helper.mjs +10 -1
  24. package/esm2020/sdk-dictionary/default-dictionary.mjs +4 -2
  25. package/fesm2015/dsivd-prestations-ng.mjs +485 -79
  26. package/fesm2015/dsivd-prestations-ng.mjs.map +1 -1
  27. package/fesm2020/dsivd-prestations-ng.mjs +482 -77
  28. package/fesm2020/dsivd-prestations-ng.mjs.map +1 -1
  29. package/foehn-dropdown-menu/dropdown-menu-group.type.d.ts +5 -0
  30. package/foehn-dropdown-menu/dropdown-menu-item.type.d.ts +7 -0
  31. package/foehn-dropdown-menu/foehn-dropdown-menu.component.d.ts +42 -0
  32. package/foehn-dropdown-menu/foehn-dropdown-menu.module.d.ts +11 -0
  33. package/foehn-header/foehn-header.component.d.ts +2 -0
  34. package/foehn-header/foehn-header.module.d.ts +2 -1
  35. package/foehn-input/foehn-input-prefixed-text.component.d.ts +26 -0
  36. package/foehn-input/foehn-input.module.d.ts +9 -8
  37. package/foehn-input-date-time/foehn-input-date-time.component.d.ts +1 -0
  38. package/foehn-input-time/foehn-input-time.component.d.ts +1 -0
  39. package/foehn-upload/abstract-foehn-uploader.component.d.ts +6 -2
  40. package/foehn-upload/foehn-bo-multi-upload/bo-multi-upload.service.d.ts +0 -1
  41. package/foehn-upload/foehn-bo-multi-upload/foehn-bo-multi-upload.component.d.ts +3 -1
  42. package/foehn-upload/foehn-multi-upload/foehn-multi-upload.component.d.ts +3 -1
  43. package/foehn-upload/foehn-multi-upload/multi-upload.service.d.ts +0 -1
  44. package/gesdem-confirmation/gesdem-confirmation.component.d.ts +6 -2
  45. package/gesdem-error/gesdem-error.component.d.ts +1 -0
  46. package/index.d.ts +5 -0
  47. package/package.json +1 -1
  48. package/sdk-date/date.helper.d.ts +1 -0
  49. package/dsivd-prestations-ng-v16.0.0-rc.9.tgz +0 -0
package/CHANGELOG.md CHANGED
@@ -37,8 +37,24 @@ A change is considered **breaking** if you have to change your code or update yo
37
37
  - added field `isComment: boolean`, used to display comments without a label below the other elements of the section
38
38
 
39
39
  - [foehn-simple-navigation.component.html](projects/prestations-ng/src/foehn-navigation/foehn-simple-navigation/foehn-simple-navigation.component.html)
40
- - added simple navigation bar, used in list detail pages because the foehn-navigation does not properly fit in this type of pages
40
+ - added simple navigation bar, used in list detail pages because the foehn-navigation does not properly fit in this type of pages
41
41
 
42
+ - [foehn-form.component.html](projects/prestations-ng/src/foehn-form/foehn-form.component.html)
43
+ - added accessibility on form (`aria-live="polite"` and `aria-atomic="false"`)
44
+
45
+ - [foehn-dropdown-menu](projects/prestations-ng/src/foehn-dropdown-menu/foehn-dropdown-menu.component.ts)
46
+ - added a dropdown menu or group menu component
47
+
48
+ - New [dropdown menu documentation](https://dsi-vd.github.io/prestations-ng/dropdown-menu) page
49
+
50
+ - [foehn-dropdown-menu](projects/prestations-ng/src/foehn-dropdown-menu/foehn-dropdown-menu.component.ts)
51
+ - `@Input() id: string` used to identify dropdown-menu
52
+ - `@Input() model: DropdownMenuGroup[]` used to display dropdown-menu
53
+ - `@Input() btnCssClass = 'btn-secondary'` used to define the CSS class of the dropdown menu button, by default is a secondary button
54
+
55
+ - [DropdownMenuGroup](projects/prestations-ng/src/foehn-dropdown-menu/dropdown-menu-group.type.ts)
56
+ - [DropdownMenuItem](projects/prestations-ng/src/foehn-dropdown-menu/dropdown-menu-item.type.ts)
57
+ - Classes used to define dropdown-menu model
42
58
 
43
59
  ### Updated
44
60
 
@@ -46,7 +62,24 @@ A change is considered **breaking** if you have to change your code or update yo
46
62
  - added a `<legend>` to describe the selected items
47
63
  - defaults to `foehn-multiselect-autocomplete.selected-items-list-legend` from `default-dictionary.ts`
48
64
  - can be overriden on each component with `@Input() selectedItemsListLegend`
49
- - selected pills now have the color `primary`instead of `danger`
65
+ - selected pills now have the color `primary` instead of `danger`
66
+
67
+ - [gesdem-confirmation.component.ts](projects/prestations-ng/src/gesdem-confirmation/gesdem-confirmation.component.ts)
68
+ - allow to override button "Se déconnecter" (label + link) (when user is connected)
69
+ - via `@Input() closeButtonConnectedText` + `@Input() closeHrefConnected`
70
+ - via route data : `closeButtonConnectedText` + `closeHrefConnected`
71
+ - default value for label is `gesdem-confirmation.exit-button-connected` from dictionary
72
+ - default value for link is `/100018/logout`
73
+
74
+ - [demo-accessibility-page.component.html](src/app/demo-accessibility-page/demo-accessibility-page.component.html)
75
+ - updated accessibility page to include dropdown menu
76
+
77
+ - [foehn-header.component.html](projects/prestations-ng/src/foehn-header/foehn-header.component.html)
78
+ - [foehn-header.component.ts](projects/prestations-ng/src/foehn-header/foehn-header.component.ts)
79
+ - updated header to include new dropdown menu
80
+
81
+ - [gesdem-handler.service.ts](projects/prestations-ng/src/gesdem/gesdem-handler.service.ts)
82
+ - do not display a success message when downloading the PDF
50
83
 
51
84
  ### Removed
52
85
 
@@ -64,6 +97,67 @@ A change is considered **breaking** if you have to change your code or update yo
64
97
  - [gesdem-loader.guard](projects/prestations-ng/src/gesdem/gesdem-loader.guard.ts)
65
98
  - removed `GesdemLoaderGuard` service extending `CanActivate` and replaced it by `CanActivateFn` function
66
99
 
100
+
101
+ ## [15.5.15]
102
+
103
+ ### Fixed
104
+
105
+ - [foehn-input-date-time.ts](projects/prestations-ng/src/foehn-input-date-time/foehn-input-date-time.component.ts)
106
+ - fixed time input (hours and seconds) not accepting 0 as number value
107
+
108
+ ### Added
109
+
110
+ - [date-helper.ts](projects/prestations-ng/src/sdk-date/date.helper.ts)
111
+ - added `leftPad` function taken from `FoehnDateTimeComponent` and `FoehnTimeComponent` and fixed not adding 0 on empty string
112
+
113
+ ### Updated
114
+
115
+ - [foehn-input-time.ts](projects/prestations-ng/src/foehn-input-time/foehn-input-time.component.ts)
116
+ - [foehn-input-date-time.ts](projects/prestations-ng/src/foehn-input-date-time/foehn-input-date-time.component.ts)
117
+ - now uses `leftPad` function from `DateHelper`
118
+
119
+ ## [15.5.14]
120
+
121
+ ### Fixed
122
+
123
+ - [foehn-input-time.ts](projects/prestations-ng/src/foehn-input-time/foehn-input-time.component.ts)
124
+ - fixed model not being updated properly
125
+
126
+ - [foehn-input-prefixed-text.ts](projects/prestations-ng/src/foehn-input/foehn-input-prefixed-text.component.ts)
127
+ - fixed model not being updated properly when prefix changes
128
+
129
+ ## [15.5.13]
130
+
131
+ **Version has been deprecated**
132
+
133
+ ## [15.5.12]
134
+
135
+ ### Added
136
+
137
+ - [foehn-input-prefixed-text.ts](projects/prestations-ng/src/foehn-input/foehn-input-prefixed-text.component.ts)
138
+ - new text input to request a text with a read-only prefix
139
+ - `@Input prefix: string` : the read-only prefix
140
+ - `@Input() prefixColClass = 'col-md-4'` : the class applied to the foehn-input-text of the prefix part
141
+ - `@Input() textColClass = 'col-md-8'` : the class applied to the foehn-input-text of the user text part
142
+
143
+ - [gesdem-confirmation.component.ts](projects/prestations-ng/src/gesdem-confirmation/gesdem-confirmation.component.ts)
144
+ - go to top of the page when component initializes (same as [abstract-page-component.ts](projects/prestations-ng/src/abstract-page-component.ts)).
145
+
146
+ ### Fixed
147
+
148
+ - [multi-upload.service.ts](projects/prestations-ng/src/foehn-upload/foehn-multi-upload/multi-upload.service.ts)
149
+ - [bo-multi-upload.service.ts](projects/prestations-ng/src/foehn-upload/foehn-bo-multi-upload/bo-multi-upload.service.ts)
150
+ - timestamp used in document `key` for multiple uploads is now generated when calling `mapToDocumentReference` (not when service is created).
151
+
152
+ ## [15.5.10]
153
+
154
+ ### Added
155
+
156
+ - [foehn-multi-upload.component.ts](projects/prestations-ng/src/foehn-upload/foehn-multi-upload/foehn-multi-upload.component.ts)
157
+ - [foehn-bo-multi-upload.component.ts](projects/prestations-ng/src/foehn-upload/foehn-bo-multi-upload/foehn-bo-multi-upload.component.ts)
158
+ - added `@Input() maxSimultaneousSelectedFiles = 50;`
159
+ - prevents the upload of more than `maxSimultaneousSelectedFiles` files at once and display an alert from default-dictionary.ts (`foehn-uploader.max-upload-selection-reached`)
160
+
67
161
  ## [15.5.9]
68
162
 
69
163
  ### Updated
Binary file
@@ -0,0 +1,3 @@
1
+ export class DropdownMenuGroup {
2
+ }
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbWVudS1ncm91cC50eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJlc3RhdGlvbnMtbmcvc3JjL2ZvZWhuLWRyb3Bkb3duLW1lbnUvZHJvcGRvd24tbWVudS1ncm91cC50eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxpQkFBaUI7Q0FHN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEcm9wZG93bk1lbnVJdGVtIH0gZnJvbSAnLi9kcm9wZG93bi1tZW51LWl0ZW0udHlwZSc7XG5cbmV4cG9ydCBjbGFzcyBEcm9wZG93bk1lbnVHcm91cCB7XG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgaXRlbXM6IERyb3Bkb3duTWVudUl0ZW1bXTtcbn1cbiJdfQ==
@@ -0,0 +1,6 @@
1
+ export class DropdownMenuItem {
2
+ constructor() {
3
+ this.target = '_self';
4
+ }
5
+ }
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbWVudS1pdGVtLnR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzdGF0aW9ucy1uZy9zcmMvZm9laG4tZHJvcGRvd24tbWVudS9kcm9wZG93bi1tZW51LWl0ZW0udHlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sZ0JBQWdCO0lBQTdCO1FBS0ksV0FBTSxHQUE2QyxPQUFPLENBQUM7SUFDL0QsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIERyb3Bkb3duTWVudUl0ZW0ge1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICByb3V0ZXJMaW5rPzogc3RyaW5nO1xuICAgIGhyZWY/OiBzdHJpbmc7XG4gICAgdGFyZ2V0PzogJ19zZWxmJyB8ICdfYmxhbmsnIHwgJ19wYXJlbnQnIHwgJ190b3AnID0gJ19zZWxmJztcbn1cbiJdfQ==
@@ -0,0 +1,212 @@
1
+ import { Component, HostBinding, HostListener, Input, ViewChild, ViewChildren } from '@angular/core';
2
+ import { first } from 'rxjs/operators';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/router";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "../sdk-dictionary/sdk-dictionary.pipe";
7
+ export class FoehnDropdownMenuComponent {
8
+ constructor(router) {
9
+ this.router = router;
10
+ this.btnCssClass = 'btn-secondary';
11
+ this.isDropdownVisible = false;
12
+ this.currentItemGlobalIndex = -1;
13
+ this.popupPosition = {
14
+ top: 0,
15
+ left: 0
16
+ };
17
+ }
18
+ handleKeyboardUpEvent(event) {
19
+ if (this.isDropdownVisible && event.key === 'Escape') {
20
+ this.resetDropdown();
21
+ this.buttonTrigger.nativeElement.focus();
22
+ }
23
+ }
24
+ handleKeyboardDownEvent(event) {
25
+ if (this.isDropdownVisible) {
26
+ this.onKeyDownInner(event);
27
+ }
28
+ }
29
+ ngOnInit() {
30
+ this.hostId = this.buildId();
31
+ }
32
+ handleFocusIn() {
33
+ clearTimeout(this.closeDropdownTimer);
34
+ }
35
+ handleFocusOut() {
36
+ clearTimeout(this.closeDropdownTimer);
37
+ this.closeDropdownTimer = setTimeout(() => {
38
+ this.resetDropdown();
39
+ }, 50);
40
+ }
41
+ buildId(suffix = '') {
42
+ const baseId = this.id;
43
+ if (!baseId) {
44
+ return null;
45
+ }
46
+ return `${baseId}${suffix}`;
47
+ }
48
+ toggleDropdownVisibility() {
49
+ this.isDropdownVisible = !this.isDropdownVisible;
50
+ if (this.isDropdownVisible) {
51
+ // eslint-disable-next-line rxjs-angular/prefer-async-pipe
52
+ this.selectedFocusList.changes.pipe(first()).subscribe(() => {
53
+ this.entryPoint.nativeElement.focus();
54
+ // Need setTimeout to be sure we have latest position for calculations
55
+ setTimeout(() => this.calculatePopupPosition());
56
+ });
57
+ }
58
+ else {
59
+ this.resetDropdown();
60
+ }
61
+ }
62
+ resetDropdown() {
63
+ this.isDropdownVisible = false;
64
+ this.currentItemGlobalIndex = -1;
65
+ }
66
+ onKeyDownInner(keyEvent) {
67
+ // IE doesn't support keyEvent.code, and has different values
68
+ // in keyEvent.key (Down instead of ArrowDown for instance), hence the multi-support.
69
+ let ie11CompatibleCode = keyEvent.code || keyEvent.key;
70
+ if (keyEvent.shiftKey) {
71
+ ie11CompatibleCode = `Shift+${ie11CompatibleCode}`;
72
+ }
73
+ switch (ie11CompatibleCode) {
74
+ case 'Down':
75
+ case 'ArrowDown':
76
+ case 'Tab':
77
+ this.focusNextElement(true);
78
+ break;
79
+ case 'Up':
80
+ case 'ArrowUp':
81
+ case 'Shift+Tab':
82
+ this.focusNextElement(false);
83
+ break;
84
+ case 'Home':
85
+ this.focusFirstElement();
86
+ break;
87
+ case 'End':
88
+ this.focusLastElement();
89
+ break;
90
+ case 'Space':
91
+ case 'Spacebar':
92
+ case 'Enter':
93
+ this.selectCurrentFocusItem();
94
+ break;
95
+ default:
96
+ return true;
97
+ }
98
+ keyEvent.preventDefault();
99
+ keyEvent.stopPropagation();
100
+ return false;
101
+ }
102
+ focusNextElement(down) {
103
+ if (this.elementsDisplayed()) {
104
+ const step = down ? 1 : -1;
105
+ this.currentItemGlobalIndex += step;
106
+ const MAX_INDEX = this.selectedFocusList.length - 1;
107
+ if (this.currentItemGlobalIndex < 0) {
108
+ this.currentItemGlobalIndex = MAX_INDEX;
109
+ }
110
+ else if (this.currentItemGlobalIndex > MAX_INDEX) {
111
+ this.currentItemGlobalIndex = 0;
112
+ }
113
+ const nextLiElement = this.selectedFocusList.get(this.currentItemGlobalIndex).nativeElement;
114
+ // Check if li contains a link and focus it
115
+ if (nextLiElement.firstElementChild.tagName === 'A') {
116
+ nextLiElement.firstElementChild.focus();
117
+ return;
118
+ }
119
+ // Focus li-group-title
120
+ nextLiElement.focus();
121
+ }
122
+ }
123
+ focusFirstElement() {
124
+ this.currentItemGlobalIndex = -1;
125
+ this.focusNextElement(true);
126
+ }
127
+ focusLastElement() {
128
+ this.currentItemGlobalIndex = -1;
129
+ this.focusNextElement(false);
130
+ }
131
+ selectCurrentFocusItem() {
132
+ const currentFocusedElement = document.activeElement;
133
+ if (!!currentFocusedElement && currentFocusedElement.tagName === 'A') {
134
+ if (currentFocusedElement.getAttribute('use-router') === 'true') {
135
+ this.router.navigate([
136
+ currentFocusedElement.getAttribute('href')
137
+ ]);
138
+ }
139
+ else {
140
+ if (!!currentFocusedElement.getAttribute('target')) {
141
+ window.open(currentFocusedElement.getAttribute('href'), currentFocusedElement.getAttribute('target'));
142
+ }
143
+ else {
144
+ window.open(currentFocusedElement.getAttribute('href'), '_self');
145
+ }
146
+ }
147
+ }
148
+ }
149
+ elementsDisplayed() {
150
+ return this.selectedFocusList && !!this.selectedFocusList.length;
151
+ }
152
+ calculatePopupPosition() {
153
+ const screenWidth = window.innerWidth - 20;
154
+ const screenHeight = window.innerHeight - 20;
155
+ if (this.entryPoint) {
156
+ const popupBoundingRect = this.entryPoint.nativeElement.getBoundingClientRect();
157
+ const triggerButtonBoundingRect = this.buttonTrigger.nativeElement.getBoundingClientRect();
158
+ const calculatedWidth = triggerButtonBoundingRect.x + popupBoundingRect.width;
159
+ const calculatedHeight = triggerButtonBoundingRect.y +
160
+ triggerButtonBoundingRect.height +
161
+ popupBoundingRect.height;
162
+ if (calculatedWidth > screenWidth) {
163
+ this.popupPosition.left =
164
+ -popupBoundingRect.width + triggerButtonBoundingRect.width;
165
+ }
166
+ else {
167
+ this.popupPosition.left = 0;
168
+ }
169
+ if (calculatedHeight > screenHeight) {
170
+ this.popupPosition.top =
171
+ -triggerButtonBoundingRect.height -
172
+ popupBoundingRect.height;
173
+ }
174
+ else {
175
+ this.popupPosition.top = 0;
176
+ }
177
+ }
178
+ }
179
+ }
180
+ FoehnDropdownMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: FoehnDropdownMenuComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
181
+ FoehnDropdownMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: FoehnDropdownMenuComponent, selector: "foehn-dropdown-menu", inputs: { id: "id", label: "label", model: "model", btnCssClass: "btnCssClass" }, host: { listeners: { "keyup": "handleKeyboardUpEvent($event)", "keydown": "handleKeyboardDownEvent($event)" }, properties: { "attr.id": "this.hostId" } }, viewQueries: [{ propertyName: "buttonTrigger", first: true, predicate: ["buttonTrigger"], descendants: true, static: true }, { propertyName: "entryPoint", first: true, predicate: ["entryPoint"], descendants: true }, { propertyName: "selectedFocusList", predicate: ["selectedFocusList"], descendants: true }], ngImport: i0, template: "<nav\n [attr.id]=\"buildId('NavContainer')\"\n tabindex=\"-1\"\n [attr.aria-label]=\"'foehn-dropdown-menu.aria-label' | fromDictionary\"\n>\n <button\n [attr.id]=\"buildId('TriggerButton')\"\n class=\"d-flex align-items-center btn\"\n [ngClass]=\"btnCssClass\"\n (click)=\"toggleDropdownVisibility()\"\n (focusin)=\"handleFocusIn()\"\n (focusout)=\"handleFocusOut()\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-expanded]=\"isDropdownVisible\"\n [attr.aria-controls]=\"'dropdown-menu-list'\"\n [attr.aria-label]=\"label || null\"\n #buttonTrigger\n >\n <ng-content></ng-content>\n </button>\n\n <div class=\"dropdown-menu-container\" *ngIf=\"!!model && isDropdownVisible\">\n <ul\n id=\"dropdown-menu-list\"\n class=\"parent-list list-group\"\n (focusin)=\"handleFocusIn()\"\n (focusout)=\"handleFocusOut()\"\n [style.left.px]=\"popupPosition.left\"\n [style.top.px]=\"popupPosition.top\"\n tabindex=\"-1\"\n #entryPoint\n >\n <ng-container *ngFor=\"let group of model; let i = index\">\n <ng-container *ngIf=\"!!group.title\">\n <li\n *ngIf=\"i > 0\"\n class=\"list-group-item item-divider\"\n [attr.role]=\"'separator'\"\n ></li>\n <li\n class=\"list-group-item list-group-title\"\n tabindex=\"0\"\n #selectedFocusList\n >\n <strong *ngIf=\"!!group.title\">{{ group.title }}</strong>\n <ul class=\"child-list list-group\">\n <li\n *ngFor=\"let item of group.items\"\n class=\"list-group-item\"\n #selectedFocusList\n >\n <ng-container\n [ngTemplateOutlet]=\"itemLink\"\n [ngTemplateOutletContext]=\"{ item: item }\"\n ></ng-container>\n </li>\n </ul>\n </li>\n </ng-container>\n <ng-container *ngIf=\"!group.title\">\n <li\n *ngIf=\"i > 0\"\n class=\"list-group-item item-divider\"\n [attr.role]=\"'separator'\"\n ></li>\n <li\n *ngFor=\"let item of group.items; let j = index\"\n class=\"list-group-item\"\n #selectedFocusList\n >\n <ng-container\n [ngTemplateOutlet]=\"itemLink\"\n [ngTemplateOutletContext]=\"{ item: item }\"\n ></ng-container>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </div>\n</nav>\n\n<ng-template #itemLink let-item=\"item\">\n <a\n *ngIf=\"!!item.routerLink\"\n [attr.title]=\"item.title\"\n [routerLink]=\"item.routerLink\"\n [innerHTML]=\"item.label\"\n [attr.use-router]=\"true\"\n ></a>\n <a\n *ngIf=\"!item.routerLink\"\n [attr.title]=\"item.title\"\n [attr.href]=\"item.href\"\n [attr.target]=\"item.target\"\n [innerHTML]=\"item.label\"\n [attr.use-router]=\"false\"\n ></a>\n</ng-template>\n", styles: [":host ::ng-deep .btn .svg-inline--fa{color:#000!important}nav button:after{display:inline-block;width:0;height:0;margin-left:.3em;content:\"\";border-top:.4em solid;border-right:.4em solid transparent;border-bottom:0;border-left:.4em solid transparent}nav button.btn-link:after{color:#000}.dropdown-menu-container{position:relative;width:100%}.dropdown-menu-container .parent-list{position:absolute;top:0;left:0;z-index:9999;box-shadow:0 4px 8px #0003,0 6px 20px #00000030;background-color:#fff;width:max-content;max-width:350px}.dropdown-menu-container .list-group-item{border:0;padding:0}.dropdown-menu-container li.item-divider{border-top:1px solid #ababab!important}.dropdown-menu-container li a{width:100%;color:inherit;display:block;padding:.75rem;word-break:break-word}.dropdown-menu-container li.list-group-title strong{padding-left:.75rem}.dropdown-menu-container ul.child-list a{padding-left:1.5rem}.dropdown-menu-container li a:focus{box-shadow:none}.dropdown-menu-container li.list-group-item:hover,.dropdown-menu-container li.list-group-item a:focus{background-color:var(--vd-primary-lighter);outline:none}.dropdown-menu-container .list-group-title{padding-top:.5rem}.dropdown-menu-container li.list-group-title:hover{background:none}.dropdown-menu-container li.list-group-title:focus{outline:0;box-shadow:inset 0 1px 1px #00000013,0 0 0 .2rem var(--vd-focus)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: i3.SdkDictionaryPipe, name: "fromDictionary" }] });
182
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: FoehnDropdownMenuComponent, decorators: [{
183
+ type: Component,
184
+ args: [{ selector: 'foehn-dropdown-menu', template: "<nav\n [attr.id]=\"buildId('NavContainer')\"\n tabindex=\"-1\"\n [attr.aria-label]=\"'foehn-dropdown-menu.aria-label' | fromDictionary\"\n>\n <button\n [attr.id]=\"buildId('TriggerButton')\"\n class=\"d-flex align-items-center btn\"\n [ngClass]=\"btnCssClass\"\n (click)=\"toggleDropdownVisibility()\"\n (focusin)=\"handleFocusIn()\"\n (focusout)=\"handleFocusOut()\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-expanded]=\"isDropdownVisible\"\n [attr.aria-controls]=\"'dropdown-menu-list'\"\n [attr.aria-label]=\"label || null\"\n #buttonTrigger\n >\n <ng-content></ng-content>\n </button>\n\n <div class=\"dropdown-menu-container\" *ngIf=\"!!model && isDropdownVisible\">\n <ul\n id=\"dropdown-menu-list\"\n class=\"parent-list list-group\"\n (focusin)=\"handleFocusIn()\"\n (focusout)=\"handleFocusOut()\"\n [style.left.px]=\"popupPosition.left\"\n [style.top.px]=\"popupPosition.top\"\n tabindex=\"-1\"\n #entryPoint\n >\n <ng-container *ngFor=\"let group of model; let i = index\">\n <ng-container *ngIf=\"!!group.title\">\n <li\n *ngIf=\"i > 0\"\n class=\"list-group-item item-divider\"\n [attr.role]=\"'separator'\"\n ></li>\n <li\n class=\"list-group-item list-group-title\"\n tabindex=\"0\"\n #selectedFocusList\n >\n <strong *ngIf=\"!!group.title\">{{ group.title }}</strong>\n <ul class=\"child-list list-group\">\n <li\n *ngFor=\"let item of group.items\"\n class=\"list-group-item\"\n #selectedFocusList\n >\n <ng-container\n [ngTemplateOutlet]=\"itemLink\"\n [ngTemplateOutletContext]=\"{ item: item }\"\n ></ng-container>\n </li>\n </ul>\n </li>\n </ng-container>\n <ng-container *ngIf=\"!group.title\">\n <li\n *ngIf=\"i > 0\"\n class=\"list-group-item item-divider\"\n [attr.role]=\"'separator'\"\n ></li>\n <li\n *ngFor=\"let item of group.items; let j = index\"\n class=\"list-group-item\"\n #selectedFocusList\n >\n <ng-container\n [ngTemplateOutlet]=\"itemLink\"\n [ngTemplateOutletContext]=\"{ item: item }\"\n ></ng-container>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </div>\n</nav>\n\n<ng-template #itemLink let-item=\"item\">\n <a\n *ngIf=\"!!item.routerLink\"\n [attr.title]=\"item.title\"\n [routerLink]=\"item.routerLink\"\n [innerHTML]=\"item.label\"\n [attr.use-router]=\"true\"\n ></a>\n <a\n *ngIf=\"!item.routerLink\"\n [attr.title]=\"item.title\"\n [attr.href]=\"item.href\"\n [attr.target]=\"item.target\"\n [innerHTML]=\"item.label\"\n [attr.use-router]=\"false\"\n ></a>\n</ng-template>\n", styles: [":host ::ng-deep .btn .svg-inline--fa{color:#000!important}nav button:after{display:inline-block;width:0;height:0;margin-left:.3em;content:\"\";border-top:.4em solid;border-right:.4em solid transparent;border-bottom:0;border-left:.4em solid transparent}nav button.btn-link:after{color:#000}.dropdown-menu-container{position:relative;width:100%}.dropdown-menu-container .parent-list{position:absolute;top:0;left:0;z-index:9999;box-shadow:0 4px 8px #0003,0 6px 20px #00000030;background-color:#fff;width:max-content;max-width:350px}.dropdown-menu-container .list-group-item{border:0;padding:0}.dropdown-menu-container li.item-divider{border-top:1px solid #ababab!important}.dropdown-menu-container li a{width:100%;color:inherit;display:block;padding:.75rem;word-break:break-word}.dropdown-menu-container li.list-group-title strong{padding-left:.75rem}.dropdown-menu-container ul.child-list a{padding-left:1.5rem}.dropdown-menu-container li a:focus{box-shadow:none}.dropdown-menu-container li.list-group-item:hover,.dropdown-menu-container li.list-group-item a:focus{background-color:var(--vd-primary-lighter);outline:none}.dropdown-menu-container .list-group-title{padding-top:.5rem}.dropdown-menu-container li.list-group-title:hover{background:none}.dropdown-menu-container li.list-group-title:focus{outline:0;box-shadow:inset 0 1px 1px #00000013,0 0 0 .2rem var(--vd-focus)}\n"] }]
185
+ }], ctorParameters: function () { return [{ type: i1.Router }]; }, propDecorators: { selectedFocusList: [{
186
+ type: ViewChildren,
187
+ args: ['selectedFocusList']
188
+ }], buttonTrigger: [{
189
+ type: ViewChild,
190
+ args: ['buttonTrigger', { static: true }]
191
+ }], entryPoint: [{
192
+ type: ViewChild,
193
+ args: ['entryPoint']
194
+ }], id: [{
195
+ type: Input
196
+ }], label: [{
197
+ type: Input
198
+ }], model: [{
199
+ type: Input
200
+ }], btnCssClass: [{
201
+ type: Input
202
+ }], hostId: [{
203
+ type: HostBinding,
204
+ args: ['attr.id']
205
+ }], handleKeyboardUpEvent: [{
206
+ type: HostListener,
207
+ args: ['keyup', ['$event']]
208
+ }], handleKeyboardDownEvent: [{
209
+ type: HostListener,
210
+ args: ['keydown', ['$event']]
211
+ }] } });
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tZHJvcGRvd24tbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzdGF0aW9ucy1uZy9zcmMvZm9laG4tZHJvcGRvd24tbWVudS9mb2Vobi1kcm9wZG93bi1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1kcm9wZG93bi1tZW51L2ZvZWhuLWRyb3Bkb3duLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFFVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFjdkMsTUFBTSxPQUFPLDBCQUEwQjtJQWdDbkMsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFabEMsZ0JBQVcsR0FBRyxlQUFlLENBQUM7UUFLOUIsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBS2xCLDJCQUFzQixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBR2hDLElBQUksQ0FBQyxhQUFhLEdBQUc7WUFDakIsR0FBRyxFQUFFLENBQUM7WUFDTixJQUFJLEVBQUUsQ0FBQztTQUNWLENBQUM7SUFDTixDQUFDO0lBR0QscUJBQXFCLENBQUMsS0FBb0I7UUFDdEMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDbEQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzVDO0lBQ0wsQ0FBQztJQUdELHVCQUF1QixDQUFDLEtBQW9CO1FBQ3hDLElBQUksSUFBSSxD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O2dCQUlOLEtBQUs7c0JBREosS0FBSztnQkFJTixXQUFXO3NCQURWLEtBQUs7Z0JBSU4sTUFBTTtzQkFETCxXQUFXO3VCQUFDLFNBQVM7Z0JBa0J0QixxQkFBcUI7c0JBRHBCLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVNqQyx1QkFBdUI7c0JBRHRCLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGZpcnN0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBEcm9wZG93bk1lbnVHcm91cCB9IGZyb20gJy4vZHJvcGRvd24tbWVudS1ncm91cC50eXBlJztcblxuaW50ZXJmYWNlIFBvc2l0aW9uIHtcbiAgICBsZWZ0OiBudW1iZXI7XG4gICAgdG9wOiBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZm9laG4tZHJvcGRvd24tbWVudScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZvZWhuLWRyb3Bkb3duLW1lbnUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZvZWhuLWRyb3Bkb3duLW1lbnUuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZvZWhuRHJvcGRvd25NZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBAVmlld0NoaWxkcmVuKCdzZWxlY3RlZEZvY3VzTGlzdCcpXG4gICAgc2VsZWN0ZWRGb2N1c0xpc3Q6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICAgIEBWaWV3Q2hpbGQoJ2J1dHRvblRyaWdnZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIGJ1dHRvblRyaWdnZXI6IEVsZW1lbnRSZWY7XG5cbiAgICBAVmlld0NoaWxkKCdlbnRyeVBvaW50JylcbiAgICBlbnRyeVBvaW50OiBFbGVtZW50UmVmO1xuXG4gICAgQElucHV0KClcbiAgICBpZDogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBsYWJlbDogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBtb2RlbDogRHJvcGRvd25NZW51R3JvdXBbXTtcblxuICAgIEBJbnB1dCgpXG4gICAgYnRuQ3NzQ2xhc3MgPSAnYnRuLXNlY29uZGFyeSc7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIGhvc3RJZDogc3RyaW5nO1xuXG4gICAgaXNEcm9wZG93blZpc2libGUgPSBmYWxzZTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNsb3NlRHJvcGRvd25UaW1lcjogYW55O1xuICAgIHBvcHVwUG9zaXRpb246IFBvc2l0aW9uO1xuXG4gICAgcHJpdmF0ZSBjdXJyZW50SXRlbUdsb2JhbEluZGV4ID0gLTE7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyKSB7XG4gICAgICAgIHRoaXMucG9wdXBQb3NpdGlvbiA9IHtcbiAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgIGxlZnQ6IDBcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdrZXl1cCcsIFsnJGV2ZW50J10pXG4gICAgaGFuZGxlS2V5Ym9hcmRVcEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzRHJvcGRvd25WaXNpYmxlICYmIGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXREcm9wZG93bigpO1xuICAgICAgICAgICAgdGhpcy5idXR0b25UcmlnZ2VyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIGhhbmRsZUtleWJvYXJkRG93bkV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzRHJvcGRvd25WaXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLm9uS2V5RG93bklubmVyKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhvc3RJZCA9IHRoaXMuYnVpbGRJZCgpO1xuICAgIH1cblxuICAgIGhhbmRsZUZvY3VzSW4oKTogdm9pZCB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNsb3NlRHJvcGRvd25UaW1lcik7XG4gICAgfVxuXG4gICAgaGFuZGxlRm9jdXNPdXQoKTogdm9pZCB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNsb3NlRHJvcGRvd25UaW1lcik7XG4gICAgICAgIHRoaXMuY2xvc2VEcm9wZG93blRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0RHJvcGRvd24oKTtcbiAgICAgICAgfSwgNTApO1xuICAgIH1cblxuICAgIGJ1aWxkSWQoc3VmZml4OiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGJhc2VJZCA9IHRoaXMuaWQ7XG4gICAgICAgIGlmICghYmFzZUlkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgJHtiYXNlSWR9JHtzdWZmaXh9YDtcbiAgICB9XG5cbiAgICB0b2dnbGVEcm9wZG93blZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNEcm9wZG93blZpc2libGUgPSAhdGhpcy5pc0Ryb3Bkb3duVmlzaWJsZTtcblxuICAgICAgICBpZiAodGhpcy5pc0Ryb3Bkb3duVmlzaWJsZSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJ4anMtYW5ndWxhci9wcmVmZXItYXN5bmMtcGlwZVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvY3VzTGlzdC5jaGFuZ2VzLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVudHJ5UG9pbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIC8vIE5lZWQgc2V0VGltZW91dCB0byBiZSBzdXJlIHdlIGhhdmUgbGF0ZXN0IHBvc2l0aW9uIGZvciBjYWxjdWxhdGlvbnNcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2FsY3VsYXRlUG9wdXBQb3NpdGlvbigpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXNldERyb3Bkb3duKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldERyb3Bkb3duKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzRHJvcGRvd25WaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY3VycmVudEl0ZW1HbG9iYWxJbmRleCA9IC0xO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25LZXlEb3duSW5uZXIoa2V5RXZlbnQ6IEtleWJvYXJkRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgLy8gSUUgZG9lc24ndCBzdXBwb3J0IGtleUV2ZW50LmNvZGUsIGFuZCBoYXMgZGlmZmVyZW50IHZhbHVlc1xuICAgICAgICAvLyBpbiBrZXlFdmVudC5rZXkgKERvd24gaW5zdGVhZCBvZiBBcnJvd0Rvd24gZm9yIGluc3RhbmNlKSwgaGVuY2UgdGhlIG11bHRpLXN1cHBvcnQuXG4gICAgICAgIGxldCBpZTExQ29tcGF0aWJsZUNvZGUgPSBrZXlFdmVudC5jb2RlIHx8IGtleUV2ZW50LmtleTtcbiAgICAgICAgaWYgKGtleUV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICBpZTExQ29tcGF0aWJsZUNvZGUgPSBgU2hpZnQrJHtpZTExQ29tcGF0aWJsZUNvZGV9YDtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGllMTFDb21wYXRpYmxlQ29kZSkge1xuICAgICAgICAgICAgY2FzZSAnRG93bic6XG4gICAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzTmV4dEVsZW1lbnQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdVcCc6XG4gICAgICAgICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgICAgIGNhc2UgJ1NoaWZ0K1RhYic6XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c05leHRFbGVtZW50KGZhbHNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNGaXJzdEVsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c0xhc3RFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdTcGFjZSc6XG4gICAgICAgICAgICBjYXNlICdTcGFjZWJhcic6XG4gICAgICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RDdXJyZW50Rm9jdXNJdGVtKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAga2V5RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAga2V5RXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNOZXh0RWxlbWVudChkb3duOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnRzRGlzcGxheWVkKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBkb3duID8gMSA6IC0xO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbUdsb2JhbEluZGV4ICs9IHN0ZXA7XG5cbiAgICAgICAgICAgIGNvbnN0IE1BWF9JTkRFWCA9IHRoaXMuc2VsZWN0ZWRGb2N1c0xpc3QubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRJdGVtR2xvYmFsSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbUdsb2JhbEluZGV4ID0gTUFYX0lOREVYO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRJdGVtR2xvYmFsSW5kZXggPiBNQVhfSU5ERVgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtR2xvYmFsSW5kZXggPSAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBuZXh0TGlFbGVtZW50ID0gdGhpcy5zZWxlY3RlZEZvY3VzTGlzdC5nZXQoXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50SXRlbUdsb2JhbEluZGV4XG4gICAgICAgICAgICApLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBsaSBjb250YWlucyBhIGxpbmsgYW5kIGZvY3VzIGl0XG4gICAgICAgICAgICBpZiAobmV4dExpRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC50YWdOYW1lID09PSAnQScpIHtcbiAgICAgICAgICAgICAgICBuZXh0TGlFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRm9jdXMgbGktZ3JvdXAtdGl0bGVcbiAgICAgICAgICAgIG5leHRMaUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNGaXJzdEVsZW1lbnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VycmVudEl0ZW1HbG9iYWxJbmRleCA9IC0xO1xuICAgICAgICB0aGlzLmZvY3VzTmV4dEVsZW1lbnQodHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2N1c0xhc3RFbGVtZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1cnJlbnRJdGVtR2xvYmFsSW5kZXggPSAtMTtcbiAgICAgICAgdGhpcy5mb2N1c05leHRFbGVtZW50KGZhbHNlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdEN1cnJlbnRGb2N1c0l0ZW0oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGb2N1c2VkRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKCEhY3VycmVudEZvY3VzZWRFbGVtZW50ICYmIGN1cnJlbnRGb2N1c2VkRWxlbWVudC50YWdOYW1lID09PSAnQScpIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50Rm9jdXNlZEVsZW1lbnQuZ2V0QXR0cmlidXRlKCd1c2Utcm91dGVyJykgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvY3VzZWRFbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghIWN1cnJlbnRGb2N1c2VkRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvY3VzZWRFbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEZvY3VzZWRFbGVtZW50LmdldEF0dHJpYnV0ZSgndGFyZ2V0JylcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3BlbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb2N1c2VkRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdfc2VsZidcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGVsZW1lbnRzRGlzcGxheWVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZvY3VzTGlzdCAmJiAhIXRoaXMuc2VsZWN0ZWRGb2N1c0xpc3QubGVuZ3RoO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FsY3VsYXRlUG9wdXBQb3NpdGlvbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2NyZWVuV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aCAtIDIwO1xuICAgICAgICBjb25zdCBzY3JlZW5IZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSAyMDtcblxuICAgICAgICBpZiAodGhpcy5lbnRyeVBvaW50KSB7XG4gICAgICAgICAgICBjb25zdCBwb3B1cEJvdW5kaW5nUmVjdCA9IHRoaXMuZW50cnlQb2ludC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgY29uc3QgdHJpZ2dlckJ1dHRvbkJvdW5kaW5nUmVjdCA9IHRoaXMuYnV0dG9uVHJpZ2dlci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgY29uc3QgY2FsY3VsYXRlZFdpZHRoID1cbiAgICAgICAgICAgICAgICB0cmlnZ2VyQnV0dG9uQm91bmRpbmdSZWN0LnggKyBwb3B1cEJvdW5kaW5nUmVjdC53aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRIZWlnaHQgPVxuICAgICAgICAgICAgICAgIHRyaWdnZXJCdXR0b25Cb3VuZGluZ1JlY3QueSArXG4gICAgICAgICAgICAgICAgdHJpZ2dlckJ1dHRvbkJvdW5kaW5nUmVjdC5oZWlnaHQgK1xuICAgICAgICAgICAgICAgIHBvcHVwQm91bmRpbmdSZWN0LmhlaWdodDtcblxuICAgICAgICAgICAgaWYgKGNhbGN1bGF0ZWRXaWR0aCA+IHNjcmVlbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cFBvc2l0aW9uLmxlZnQgPVxuICAgICAgICAgICAgICAgICAgICAtcG9wdXBCb3VuZGluZ1JlY3Qud2lkdGggKyB0cmlnZ2VyQnV0dG9uQm91bmRpbmdSZWN0LndpZHRoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcHVwUG9zaXRpb24ubGVmdCA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjYWxjdWxhdGVkSGVpZ2h0ID4gc2NyZWVuSGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cFBvc2l0aW9uLnRvcCA9XG4gICAgICAgICAgICAgICAgICAgIC10cmlnZ2VyQnV0dG9uQm91bmRpbmdSZWN0LmhlaWdodCAtXG4gICAgICAgICAgICAgICAgICAgIHBvcHVwQm91bmRpbmdSZWN0LmhlaWdodDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3B1cFBvc2l0aW9uLnRvcCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8bmF2XG4gICAgW2F0dHIuaWRdPVwiYnVpbGRJZCgnTmF2Q29udGFpbmVyJylcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2ZvZWhuLWRyb3Bkb3duLW1lbnUuYXJpYS1sYWJlbCcgfCBmcm9tRGljdGlvbmFyeVwiXG4+XG4gICAgPGJ1dHRvblxuICAgICAgICBbYXR0ci5pZF09XCJidWlsZElkKCdUcmlnZ2VyQnV0dG9uJylcIlxuICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgYnRuXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiYnRuQ3NzQ2xhc3NcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd25WaXNpYmlsaXR5KClcIlxuICAgICAgICAoZm9jdXNpbik9XCJoYW5kbGVGb2N1c0luKClcIlxuICAgICAgICAoZm9jdXNvdXQpPVwiaGFuZGxlRm9jdXNPdXQoKVwiXG4gICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwidHJ1ZVwiXG4gICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNEcm9wZG93blZpc2libGVcIlxuICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIidkcm9wZG93bi1tZW51LWxpc3QnXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbCB8fCBudWxsXCJcbiAgICAgICAgI2J1dHRvblRyaWdnZXJcbiAgICA+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51LWNvbnRhaW5lclwiICpuZ0lmPVwiISFtb2RlbCAmJiBpc0Ryb3Bkb3duVmlzaWJsZVwiPlxuICAgICAgICA8dWxcbiAgICAgICAgICAgIGlkPVwiZHJvcGRvd24tbWVudS1saXN0XCJcbiAgICAgICAgICAgIGNsYXNzPVwicGFyZW50LWxpc3QgbGlzdC1ncm91cFwiXG4gICAgICAgICAgICAoZm9jdXNpbik9XCJoYW5kbGVGb2N1c0luKClcIlxuICAgICAgICAgICAgKGZvY3Vzb3V0KT1cImhhbmRsZUZvY3VzT3V0KClcIlxuICAgICAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwicG9wdXBQb3NpdGlvbi5sZWZ0XCJcbiAgICAgICAgICAgIFtzdHlsZS50b3AucHhdPVwicG9wdXBQb3NpdGlvbi50b3BcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAjZW50cnlQb2ludFxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBncm91cCBvZiBtb2RlbDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhIWdyb3VwLnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpID4gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBpdGVtLWRpdmlkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIucm9sZV09XCInc2VwYXJhdG9yJ1wiXG4gICAgICAgICAgICAgICAgICAgID48L2xpPlxuICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGxpc3QtZ3JvdXAtdGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICNzZWxlY3RlZEZvY3VzTGlzdFxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nICpuZ0lmPVwiISFncm91cC50aXRsZVwiPnt7IGdyb3VwLnRpdGxlIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJjaGlsZC1saXN0IGxpc3QtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ3JvdXAuaXRlbXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNzZWxlY3RlZEZvY3VzTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbUxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXRlbTogaXRlbSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZ3JvdXAudGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImkgPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGl0ZW0tZGl2aWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5yb2xlXT1cIidzZXBhcmF0b3InXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ3JvdXAuaXRlbXM7IGxldCBqID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgI3NlbGVjdGVkRm9jdXNMaXN0XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtTGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXRlbTogaXRlbSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3VsPlxuICAgIDwvZGl2PlxuPC9uYXY+XG5cbjxuZy10ZW1wbGF0ZSAjaXRlbUxpbmsgbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgPGFcbiAgICAgICAgKm5nSWY9XCIhIWl0ZW0ucm91dGVyTGlua1wiXG4gICAgICAgIFthdHRyLnRpdGxlXT1cIml0ZW0udGl0bGVcIlxuICAgICAgICBbcm91dGVyTGlua109XCJpdGVtLnJvdXRlckxpbmtcIlxuICAgICAgICBbaW5uZXJIVE1MXT1cIml0ZW0ubGFiZWxcIlxuICAgICAgICBbYXR0ci51c2Utcm91dGVyXT1cInRydWVcIlxuICAgID48L2E+XG4gICAgPGFcbiAgICAgICAgKm5nSWY9XCIhaXRlbS5yb3V0ZXJMaW5rXCJcbiAgICAgICAgW2F0dHIudGl0bGVdPVwiaXRlbS50aXRsZVwiXG4gICAgICAgIFthdHRyLmhyZWZdPVwiaXRlbS5ocmVmXCJcbiAgICAgICAgW2F0dHIudGFyZ2V0XT1cIml0ZW0udGFyZ2V0XCJcbiAgICAgICAgW2lubmVySFRNTF09XCJpdGVtLmxhYmVsXCJcbiAgICAgICAgW2F0dHIudXNlLXJvdXRlcl09XCJmYWxzZVwiXG4gICAgPjwvYT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -0,0 +1,21 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { FormsModule } from '@angular/forms';
4
+ import { RouterLink } from '@angular/router';
5
+ import { SdkDictionaryModule } from '../sdk-dictionary/sdk-dictionary.module';
6
+ import { FoehnDropdownMenuComponent } from './foehn-dropdown-menu.component';
7
+ import * as i0 from "@angular/core";
8
+ export class FoehnDropdownMenuModule {
9
+ }
10
+ FoehnDropdownMenuModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: FoehnDropdownMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
11
+ FoehnDropdownMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: FoehnDropdownMenuModule, declarations: [FoehnDropdownMenuComponent], imports: [CommonModule, FormsModule, SdkDictionaryModule, RouterLink], exports: [FoehnDropdownMenuComponent] });
12
+ FoehnDropdownMenuModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: FoehnDropdownMenuModule, imports: [CommonModule, FormsModule, SdkDictionaryModule] });
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: FoehnDropdownMenuModule, decorators: [{
14
+ type: NgModule,
15
+ args: [{
16
+ imports: [CommonModule, FormsModule, SdkDictionaryModule, RouterLink],
17
+ declarations: [FoehnDropdownMenuComponent],
18
+ exports: [FoehnDropdownMenuComponent]
19
+ }]
20
+ }] });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tZHJvcGRvd24tbWVudS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzdGF0aW9ucy1uZy9zcmMvZm9laG4tZHJvcGRvd24tbWVudS9mb2Vobi1kcm9wZG93bi1tZW51Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOztBQU83RSxNQUFNLE9BQU8sdUJBQXVCOztvSEFBdkIsdUJBQXVCO3FIQUF2Qix1QkFBdUIsaUJBSGpCLDBCQUEwQixhQUQvQixZQUFZLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsYUFFMUQsMEJBQTBCO3FIQUUzQix1QkFBdUIsWUFKdEIsWUFBWSxFQUFFLFdBQVcsRUFBRSxtQkFBbUI7MkZBSS9DLHVCQUF1QjtrQkFMbkMsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsQ0FBQztvQkFDckUsWUFBWSxFQUFFLENBQUMsMEJBQTBCLENBQUM7b0JBQzFDLE9BQU8sRUFBRSxDQUFDLDBCQUEwQixDQUFDO2lCQUN4QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSb3V0ZXJMaW5rIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgU2RrRGljdGlvbmFyeU1vZHVsZSB9IGZyb20gJy4uL3Nkay1kaWN0aW9uYXJ5L3Nkay1kaWN0aW9uYXJ5Lm1vZHVsZSc7XG5pbXBvcnQgeyBGb2VobkRyb3Bkb3duTWVudUNvbXBvbmVudCB9IGZyb20gJy4vZm9laG4tZHJvcGRvd24tbWVudS5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBTZGtEaWN0aW9uYXJ5TW9kdWxlLCBSb3V0ZXJMaW5rXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtGb2VobkRyb3Bkb3duTWVudUNvbXBvbmVudF0sXG4gICAgZXhwb3J0czogW0ZvZWhuRHJvcGRvd25NZW51Q29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBGb2VobkRyb3Bkb3duTWVudU1vZHVsZSB7fVxuIl19
@@ -119,10 +119,10 @@ export class FoehnFormComponent {
119
119
  }
120
120
  }
121
121
  FoehnFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: FoehnFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
122
- FoehnFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: FoehnFormComponent, selector: "foehn-form", inputs: { shouldDisplayAlertSummary: "shouldDisplayAlertSummary" }, queries: [{ propertyName: "childrenInputComponents", predicate: FoehnInputComponent, descendants: true }], viewQueries: [{ propertyName: "ngFormComponent", first: true, predicate: NgForm, descendants: true, static: true }], ngImport: i0, template: "<form id=\"foehn_formContainer\">\n <foehn-validation-alert-summary\n [form]=\"this\"\n ></foehn-validation-alert-summary>\n\n <ng-content></ng-content>\n</form>\n", dependencies: [{ kind: "component", type: i1.FoehnValidationAlertSummaryComponent, selector: "foehn-validation-alert-summary", inputs: ["form"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] });
122
+ FoehnFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: FoehnFormComponent, selector: "foehn-form", inputs: { shouldDisplayAlertSummary: "shouldDisplayAlertSummary" }, queries: [{ propertyName: "childrenInputComponents", predicate: FoehnInputComponent, descendants: true }], viewQueries: [{ propertyName: "ngFormComponent", first: true, predicate: NgForm, descendants: true, static: true }], ngImport: i0, template: "<form id=\"foehn_formContainer\" aria-live=\"polite\" aria-atomic=\"false\">\n <foehn-validation-alert-summary\n [form]=\"this\"\n ></foehn-validation-alert-summary>\n\n <ng-content></ng-content>\n</form>\n", dependencies: [{ kind: "component", type: i1.FoehnValidationAlertSummaryComponent, selector: "foehn-validation-alert-summary", inputs: ["form"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] });
123
123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: FoehnFormComponent, decorators: [{
124
124
  type: Component,
125
- args: [{ selector: 'foehn-form', template: "<form id=\"foehn_formContainer\">\n <foehn-validation-alert-summary\n [form]=\"this\"\n ></foehn-validation-alert-summary>\n\n <ng-content></ng-content>\n</form>\n" }]
125
+ args: [{ selector: 'foehn-form', template: "<form id=\"foehn_formContainer\" aria-live=\"polite\" aria-atomic=\"false\">\n <foehn-validation-alert-summary\n [form]=\"this\"\n ></foehn-validation-alert-summary>\n\n <ng-content></ng-content>\n</form>\n" }]
126
126
  }], ctorParameters: function () { return []; }, propDecorators: { shouldDisplayAlertSummary: [{
127
127
  type: Input
128
128
  }], ngFormComponent: [{
@@ -132,4 +132,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImpor
132
132
  type: ContentChildren,
133
133
  args: [FoehnInputComponent, { descendants: true }]
134
134
  }] } });
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzdGF0aW9ucy1uZy9zcmMvZm9laG4tZm9ybS9mb2Vobi1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1mb3JtL2ZvZWhuLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxlQUFlLEVBQ2YsS0FBSyxFQUdMLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFXLE1BQU0sZ0JBQWdCLENBQUM7QUFHakQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7O0FBTXBELE1BQU0sT0FBTyxrQkFBa0I7SUFnQjNCO1FBZEEsOEJBQXlCLEdBQUcsSUFBSSxDQUFDO1FBU3pCLHVCQUFrQixHQUFjLEVBQUUsQ0FBQztRQU12QyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQ3JELHNCQUFzQixDQUN6QixDQUFDO1FBQ0YsMERBQTBEO1FBQzFELElBQUksQ0FBQyxrQ0FBa0MsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsK0JBQStCLENBQUMsU0FBUyxDQUMzRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FDeEMsQ0FBQztJQUNOLENBQUM7SUFFRCxLQUFLLENBQUMsc0JBQStCLEtBQUs7UUFDdEMsSUFBSSxtQkFBbUIsRUFBRTtZQUNyQixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0Is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UUFDN0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNaLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQzs7K0dBbkpRLGtCQUFrQjttR0FBbEIsa0JBQWtCLDhKQU9WLG1CQUFtQixpR0FIekIsTUFBTSw4REN4QnJCLHFMQU9BOzJGRGFhLGtCQUFrQjtrQkFKOUIsU0FBUzsrQkFDSSxZQUFZOzBFQUt0Qix5QkFBeUI7c0JBRHhCLEtBQUs7Z0JBSU4sZUFBZTtzQkFEZCxTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSzNCLHVCQUF1QjtzQkFGOUIsZUFBZTt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nRm9ybSwgTmdNb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBSZWdpc3Rlck5nTW9kZWxTZXJ2aWNlIH0gZnJvbSAnLi4vZm9laG4tZm9ybS9yZWdpc3Rlci1uZy1tb2RlbC5zZXJ2aWNlJztcbmltcG9ydCB7IEZvZWhuSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9mb2Vobi1pbnB1dC9mb2Vobi1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VydmljZUxvY2F0b3IgfSBmcm9tICcuLi9zZXJ2aWNlLWxvY2F0b3InO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZvZWhuLWZvcm0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb2Vobi1mb3JtLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBGb2VobkZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpXG4gICAgc2hvdWxkRGlzcGxheUFsZXJ0U3VtbWFyeSA9IHRydWU7XG5cbiAgICBAVmlld0NoaWxkKE5nRm9ybSwgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBuZ0Zvcm1Db21wb25lbnQ6IE5nRm9ybTtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oRm9laG5JbnB1dENvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcHJpdmF0ZSBjaGlsZHJlbklucHV0Q29tcG9uZW50czogUXVlcnlMaXN0PEZvZWhuSW5wdXRDb21wb25lbnQ8YW55Pj47XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyZWROZ01vZGVsczogTmdNb2RlbFtdID0gW107XG4gICAgcHJpdmF0ZSByZWdpc3Rlck5nTW9kZWxTZXJ2aWNlOiBSZWdpc3Rlck5nTW9kZWxTZXJ2aWNlO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWdpc3Rlck5nTW9kZWxTZXJ2aWNlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yZWdpc3Rlck5nTW9kZWxTZXJ2aWNlID0gU2VydmljZUxvY2F0b3IuaW5qZWN0b3IuZ2V0KFxuICAgICAgICAgICAgUmVnaXN0ZXJOZ01vZGVsU2VydmljZVxuICAgICAgICApO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy1hbmd1bGFyL3ByZWZlci1hc3luYy1waXBlXG4gICAgICAgIHRoaXMucmVnaXN0ZXJOZ01vZGVsU2VydmljZVN1YnNjcmlwdGlvbiA9IHRoaXMucmVnaXN0ZXJOZ01vZGVsU2VydmljZS51cGRhdGVSZWdpc3RlcmVkTmdNb2RlbHNTdWJqZWN0LnN1YnNjcmliZShcbiAgICAgICAgICAgICgpID0+IHRoaXMudXBkYXRlUmVnaXN0ZXJlZE5nTW9kZWxzKClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXNldChyZXNldENoaWxkcmVuVmFsdWVzOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKHJlc2V0Q2hpbGRyZW5WYWx1ZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmdldEFsbENvbXBvbmVudHMoKSkge1xuICAgICAgICAgICAgICAgIGMucmVzZXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5nRm9ybUNvbXBvbmVudC5mb3JtLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgICB0aGlzLm5nRm9ybUNvbXBvbmVudC5mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJlZ2lzdGVyTmdNb2RlbFNlcnZpY2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJOZ01vZGVsU2VydmljZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZVJlZ2lzdGVyZWROZ01vZGVscygpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy1hbmd1bGFyL3ByZWZlci1hc3luYy1waXBlXG4gICAgICAgIHRoaXMuY2hpbGRyZW5JbnB1dENvbXBvbmVudHMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlUmVnaXN0ZXJlZE5nTW9kZWxzKClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB1cGRhdGVSZWdpc3RlcmVkTmdNb2RlbHMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnROZ01vZGVscyA9IHRoaXMuZ2V0QWxsTmF0aXZlTW9kZWxzKCk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGNvbnN0IHRvQmVSZWdpc3RlcmVkOiBhbnlbXSA9IFtdO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjb25zdCB0b0JlRGVsZXRlZDogYW55W10gPSBbXTtcblxuICAgICAgICB0aGlzLnJlZ2lzdGVyZWROZ01vZGVscy5mb3JFYWNoKG5nID0+IHtcbiAgICAgICAgICAgIGlmICghY3VycmVudE5nTW9kZWxzLmluY2x1ZGVzKG5nKSkge1xuICAgICAgICAgICAgICAgIHRvQmVEZWxldGVkLnB1c2gobmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY3VycmVudE5nTW9kZWxzLmZvckVhY2gobmcgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlZ2lzdGVyZWROZ01vZGVscy5pbmNsdWRlcyhuZykpIHtcbiAgICAgICAgICAgICAgICB0b0JlUmVnaXN0ZXJlZC5wdXNoKG5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdG9CZURlbGV0ZWQuZm9yRWFjaChuZyA9PiB0aGlzLmRlbGV0ZU5nTW9kZWwobmcpKTtcbiAgICAgICAgdG9CZVJlZ2lzdGVyZWQuZm9yRWFjaChuZyA9PiB0aGlzLnJlZ2lzdGVyTmdNb2RlbChuZykpO1xuICAgIH1cblxuICAgIGdldEFsbE5hdGl2ZU1vZGVscygpOiBOZ01vZGVsW10ge1xuICAgICAgICBjb25zdCBtb2RlbHM6IE5nTW9kZWxbXSA9IFtdO1xuICAgICAgICB0aGlzLmNoaWxkcmVuSW5wdXRDb21wb25lbnRzLmZvckVhY2goYyA9PiB7XG4gICAgICAgICAgICBjLmdldE5hdGl2ZUlucHV0TGlzdCgpLmZvckVhY2gobSA9PiB7XG4gICAgICAgICAgICAgICAgbW9kZWxzLnB1c2gobSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtb2RlbHM7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBnZXRBbGxDb21wb25lbnRzKCk6IEZvZWhuSW5wdXRDb21wb25lbnQ8YW55PltdIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgbGV0IHJlc3VsdDogRm9laG5JbnB1dENvbXBvbmVudDxhbnk+W10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW5JbnB1dENvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5JbnB1dENvbXBvbmVudHMuZm9yRWFjaChjID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGMuZ2V0TWVBbmRTdWJDb21wb25lbnRzKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBpc1ZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuZ2V0QWxsQ29tcG9uZW50cygpLnNvbWUoaSA9PiBpLmhhc0Vycm9ycygpKTtcbiAgICB9XG5cbiAgICBmb2N1c0ZpcnN0SW5FcnJvcigpOiB2b2lkIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3QgYWxsQ29tcG9uZW50czogRm9laG5JbnB1dENvbXBvbmVudDxhbnk+W10gPSB0aGlzLmdldEFsbENvbXBvbmVudHMoKTtcblxuICAgICAgICBpZiAoYWxsQ29tcG9uZW50cyAmJiBhbGxDb21wb25lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Q29tcG9uZW50SW5FcnJvciA9IGFsbENvbXBvbmVudHMuZmluZChjb21wb25lbnQgPT5cbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaGFzRXJyb3JzKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoZmlyc3RDb21wb25lbnRJbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgZmlyc3RDb21wb25lbnRJbkVycm9yLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb2N1c0ZpcnN0KCk6IHZvaWQge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjb25zdCBhbGxDb21wb25lbnRzOiBGb2VobklucHV0Q29tcG9uZW50PGFueT5bXSA9IHRoaXMuZ2V0QWxsQ29tcG9uZW50cygpO1xuXG4gICAgICAgIGlmIChhbGxDb21wb25lbnRzICYmIGFsbENvbXBvbmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYWxsQ29tcG9uZW50c1swXS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9jdXNFcnJvclN1bW1hcnkoKTogdm9pZCB7XG4gICAgICAgIC8vIHNldFRpbWVvdXQgdG8gaW1wcm92ZSB0aGUgY29tcGF0aWJpbGl0eSB3aXRoIHNvbWUgc2NyZWVuIHJlYWRlcnMuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JTdW1tYXJ5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Vycm9yLXN1bW1hcnknKTtcblxuICAgICAgICAgICAgaWYgKGVycm9yU3VtbWFyeSkge1xuICAgICAgICAgICAgICAgIGVycm9yU3VtbWFyeS5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgICAgICAgIGVycm9yU3VtbWFyeS5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBlcnJvciBzdW1tYXJ5LCBvciBpZiB0aGUgZXJyb3Igc3VtbWFyeSBkb2Vzbid0IGNvbnRhaW4gYW55IGNvbXBhdGlibGUgZXJyb3IuXG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c0ZpcnN0SW5FcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyTmdNb2RlbChuZzogTmdNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyZWROZ01vZGVscy5wdXNoKG5nKTtcbiAgICAgICAgdGhpcy5uZ0Zvcm1Db21wb25lbnQuYWRkQ29udHJvbChuZyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWxldGVOZ01vZGVsKG5nOiBOZ01vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZWdpc3RlcmVkTmdNb2RlbHMuaW5kZXhPZihuZyk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyZWROZ01vZGVscy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmdGb3JtQ29tcG9uZW50LnJlbW92ZUNvbnRyb2wobmcpO1xuICAgIH1cbn1cbiIsIjxmb3JtIGlkPVwiZm9laG5fZm9ybUNvbnRhaW5lclwiPlxuICAgIDxmb2Vobi12YWxpZGF0aW9uLWFsZXJ0LXN1bW1hcnlcbiAgICAgICAgW2Zvcm1dPVwidGhpc1wiXG4gICAgPjwvZm9laG4tdmFsaWRhdGlvbi1hbGVydC1zdW1tYXJ5PlxuXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9mb3JtPlxuIl19
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9laG4tZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmVzdGF0aW9ucy1uZy9zcmMvZm9laG4tZm9ybS9mb2Vobi1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3ByZXN0YXRpb25zLW5nL3NyYy9mb2Vobi1mb3JtL2ZvZWhuLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxlQUFlLEVBQ2YsS0FBSyxFQUdMLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFXLE1BQU0sZ0JBQWdCLENBQUM7QUFHakQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7O0FBTXBELE1BQU0sT0FBTyxrQkFBa0I7SUFnQjNCO1FBZEEsOEJBQXlCLEdBQUcsSUFBSSxDQUFDO1FBU3pCLHVCQUFrQixHQUFjLEVBQUUsQ0FBQztRQU12QyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQ3JELHNCQUFzQixDQUN6QixDQUFDO1FBQ0YsMERBQTBEO1FBQzFELElBQUksQ0FBQyxrQ0FBa0MsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsK0JBQStCLENBQUMsU0FBUyxDQUMzRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FDeEMsQ0FBQztJQUNOLENBQUM7SUFFRCxLQUFLLENBQUMsc0JBQStCLEtBQUs7UUFDdEMsSUFBSSxtQkFBbUIsRUFBRTtZQUNyQixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0Is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UUFDN0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNaLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQzs7K0dBbkpRLGtCQUFrQjttR0FBbEIsa0JBQWtCLDhKQU9WLG1CQUFtQixpR0FIekIsTUFBTSw4REN4QnJCLGdPQU9BOzJGRGFhLGtCQUFrQjtrQkFKOUIsU0FBUzsrQkFDSSxZQUFZOzBFQUt0Qix5QkFBeUI7c0JBRHhCLEtBQUs7Z0JBSU4sZUFBZTtzQkFEZCxTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSzNCLHVCQUF1QjtzQkFGOUIsZUFBZTt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nRm9ybSwgTmdNb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBSZWdpc3Rlck5nTW9kZWxTZXJ2aWNlIH0gZnJvbSAnLi4vZm9laG4tZm9ybS9yZWdpc3Rlci1uZy1tb2RlbC5zZXJ2aWNlJztcbmltcG9ydCB7IEZvZWhuSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9mb2Vobi1pbnB1dC9mb2Vobi1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VydmljZUxvY2F0b3IgfSBmcm9tICcuLi9zZXJ2aWNlLWxvY2F0b3InO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZvZWhuLWZvcm0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb2Vobi1mb3JtLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBGb2VobkZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpXG4gICAgc2hvdWxkRGlzcGxheUFsZXJ0U3VtbWFyeSA9IHRydWU7XG5cbiAgICBAVmlld0NoaWxkKE5nRm9ybSwgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBuZ0Zvcm1Db21wb25lbnQ6IE5nRm9ybTtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oRm9laG5JbnB1dENvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcHJpdmF0ZSBjaGlsZHJlbklucHV0Q29tcG9uZW50czogUXVlcnlMaXN0PEZvZWhuSW5wdXRDb21wb25lbnQ8YW55Pj47XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyZWROZ01vZGVsczogTmdNb2RlbFtdID0gW107XG4gICAgcHJpdmF0ZSByZWdpc3Rlck5nTW9kZWxTZXJ2aWNlOiBSZWdpc3Rlck5nTW9kZWxTZXJ2aWNlO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWdpc3Rlck5nTW9kZWxTZXJ2aWNlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yZWdpc3Rlck5nTW9kZWxTZXJ2aWNlID0gU2VydmljZUxvY2F0b3IuaW5qZWN0b3IuZ2V0KFxuICAgICAgICAgICAgUmVnaXN0ZXJOZ01vZGVsU2VydmljZVxuICAgICAgICApO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy1hbmd1bGFyL3ByZWZlci1hc3luYy1waXBlXG4gICAgICAgIHRoaXMucmVnaXN0ZXJOZ01vZGVsU2VydmljZVN1YnNjcmlwdGlvbiA9IHRoaXMucmVnaXN0ZXJOZ01vZGVsU2VydmljZS51cGRhdGVSZWdpc3RlcmVkTmdNb2RlbHNTdWJqZWN0LnN1YnNjcmliZShcbiAgICAgICAgICAgICgpID0+IHRoaXMudXBkYXRlUmVnaXN0ZXJlZE5nTW9kZWxzKClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXNldChyZXNldENoaWxkcmVuVmFsdWVzOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKHJlc2V0Q2hpbGRyZW5WYWx1ZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmdldEFsbENvbXBvbmVudHMoKSkge1xuICAgICAgICAgICAgICAgIGMucmVzZXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5nRm9ybUNvbXBvbmVudC5mb3JtLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgICB0aGlzLm5nRm9ybUNvbXBvbmVudC5mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJlZ2lzdGVyTmdNb2RlbFNlcnZpY2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJOZ01vZGVsU2VydmljZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZVJlZ2lzdGVyZWROZ01vZGVscygpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy1hbmd1bGFyL3ByZWZlci1hc3luYy1waXBlXG4gICAgICAgIHRoaXMuY2hpbGRyZW5JbnB1dENvbXBvbmVudHMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlUmVnaXN0ZXJlZE5nTW9kZWxzKClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB1cGRhdGVSZWdpc3RlcmVkTmdNb2RlbHMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnROZ01vZGVscyA9IHRoaXMuZ2V0QWxsTmF0aXZlTW9kZWxzKCk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGNvbnN0IHRvQmVSZWdpc3RlcmVkOiBhbnlbXSA9IFtdO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjb25zdCB0b0JlRGVsZXRlZDogYW55W10gPSBbXTtcblxuICAgICAgICB0aGlzLnJlZ2lzdGVyZWROZ01vZGVscy5mb3JFYWNoKG5nID0+IHtcbiAgICAgICAgICAgIGlmICghY3VycmVudE5nTW9kZWxzLmluY2x1ZGVzKG5nKSkge1xuICAgICAgICAgICAgICAgIHRvQmVEZWxldGVkLnB1c2gobmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY3VycmVudE5nTW9kZWxzLmZvckVhY2gobmcgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlZ2lzdGVyZWROZ01vZGVscy5pbmNsdWRlcyhuZykpIHtcbiAgICAgICAgICAgICAgICB0b0JlUmVnaXN0ZXJlZC5wdXNoKG5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdG9CZURlbGV0ZWQuZm9yRWFjaChuZyA9PiB0aGlzLmRlbGV0ZU5nTW9kZWwobmcpKTtcbiAgICAgICAgdG9CZVJlZ2lzdGVyZWQuZm9yRWFjaChuZyA9PiB0aGlzLnJlZ2lzdGVyTmdNb2RlbChuZykpO1xuICAgIH1cblxuICAgIGdldEFsbE5hdGl2ZU1vZGVscygpOiBOZ01vZGVsW10ge1xuICAgICAgICBjb25zdCBtb2RlbHM6IE5nTW9kZWxbXSA9IFtdO1xuICAgICAgICB0aGlzLmNoaWxkcmVuSW5wdXRDb21wb25lbnRzLmZvckVhY2goYyA9PiB7XG4gICAgICAgICAgICBjLmdldE5hdGl2ZUlucHV0TGlzdCgpLmZvckVhY2gobSA9PiB7XG4gICAgICAgICAgICAgICAgbW9kZWxzLnB1c2gobSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtb2RlbHM7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBnZXRBbGxDb21wb25lbnRzKCk6IEZvZWhuSW5wdXRDb21wb25lbnQ8YW55PltdIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgbGV0IHJlc3VsdDogRm9laG5JbnB1dENvbXBvbmVudDxhbnk+W10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW5JbnB1dENvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5JbnB1dENvbXBvbmVudHMuZm9yRWFjaChjID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KGMuZ2V0TWVBbmRTdWJDb21wb25lbnRzKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBpc1ZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuZ2V0QWxsQ29tcG9uZW50cygpLnNvbWUoaSA9PiBpLmhhc0Vycm9ycygpKTtcbiAgICB9XG5cbiAgICBmb2N1c0ZpcnN0SW5FcnJvcigpOiB2b2lkIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3QgYWxsQ29tcG9uZW50czogRm9laG5JbnB1dENvbXBvbmVudDxhbnk+W10gPSB0aGlzLmdldEFsbENvbXBvbmVudHMoKTtcblxuICAgICAgICBpZiAoYWxsQ29tcG9uZW50cyAmJiBhbGxDb21wb25lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0Q29tcG9uZW50SW5FcnJvciA9IGFsbENvbXBvbmVudHMuZmluZChjb21wb25lbnQgPT5cbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaGFzRXJyb3JzKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoZmlyc3RDb21wb25lbnRJbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgZmlyc3RDb21wb25lbnRJbkVycm9yLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb2N1c0ZpcnN0KCk6IHZvaWQge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjb25zdCBhbGxDb21wb25lbnRzOiBGb2VobklucHV0Q29tcG9uZW50PGFueT5bXSA9IHRoaXMuZ2V0QWxsQ29tcG9uZW50cygpO1xuXG4gICAgICAgIGlmIChhbGxDb21wb25lbnRzICYmIGFsbENvbXBvbmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYWxsQ29tcG9uZW50c1swXS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9jdXNFcnJvclN1bW1hcnkoKTogdm9pZCB7XG4gICAgICAgIC8vIHNldFRpbWVvdXQgdG8gaW1wcm92ZSB0aGUgY29tcGF0aWJpbGl0eSB3aXRoIHNvbWUgc2NyZWVuIHJlYWRlcnMuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JTdW1tYXJ5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Vycm9yLXN1bW1hcnknKTtcblxuICAgICAgICAgICAgaWYgKGVycm9yU3VtbWFyeSkge1xuICAgICAgICAgICAgICAgIGVycm9yU3VtbWFyeS5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgICAgICAgIGVycm9yU3VtbWFyeS5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBlcnJvciBzdW1tYXJ5LCBvciBpZiB0aGUgZXJyb3Igc3VtbWFyeSBkb2Vzbid0IGNvbnRhaW4gYW55IGNvbXBhdGlibGUgZXJyb3IuXG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c0ZpcnN0SW5FcnJvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyTmdNb2RlbChuZzogTmdNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyZWROZ01vZGVscy5wdXNoKG5nKTtcbiAgICAgICAgdGhpcy5uZ0Zvcm1Db21wb25lbnQuYWRkQ29udHJvbChuZyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWxldGVOZ01vZGVsKG5nOiBOZ01vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZWdpc3RlcmVkTmdNb2RlbHMuaW5kZXhPZihuZyk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyZWROZ01vZGVscy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmdGb3JtQ29tcG9uZW50LnJlbW92ZUNvbnRyb2wobmcpO1xuICAgIH1cbn1cbiIsIjxmb3JtIGlkPVwiZm9laG5fZm9ybUNvbnRhaW5lclwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGFyaWEtYXRvbWljPVwiZmFsc2VcIj5cbiAgICA8Zm9laG4tdmFsaWRhdGlvbi1hbGVydC1zdW1tYXJ5XG4gICAgICAgIFtmb3JtXT1cInRoaXNcIlxuICAgID48L2ZvZWhuLXZhbGlkYXRpb24tYWxlcnQtc3VtbWFyeT5cblxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZm9ybT5cbiJdfQ==