@hmcts/rpx-xui-common-lib 2.0.0-rc.6 → 2.1.2-angular-upgrade-11

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 (177) hide show
  1. package/bundles/hmcts-rpx-xui-common-lib.umd.js +7465 -2916
  2. package/bundles/hmcts-rpx-xui-common-lib.umd.js.map +1 -1
  3. package/bundles/hmcts-rpx-xui-common-lib.umd.min.js +15 -1
  4. package/bundles/hmcts-rpx-xui-common-lib.umd.min.js.map +1 -1
  5. package/esm2015/hmcts-rpx-xui-common-lib.js +59 -47
  6. package/esm2015/lib/components/accessibility/accessibility.component.js +2 -2
  7. package/esm2015/lib/components/cookie-banner/cookie-banner.component.js +129 -0
  8. package/esm2015/lib/components/due-date/due-date.component.js +6 -7
  9. package/esm2015/lib/components/find-location/find-location.component.js +240 -0
  10. package/esm2015/lib/components/find-person/find-person.component.js +259 -0
  11. package/esm2015/lib/components/generic-filter/generic-filter-utils.js +65 -0
  12. package/esm2015/lib/components/generic-filter/generic-filter.component.js +548 -52
  13. package/esm2015/lib/components/index.js +2 -2
  14. package/esm2015/lib/components/loading-spinner/loading-spinner.component.js +6 -35
  15. package/esm2015/lib/components/pagination/pagination.component.js +50 -0
  16. package/esm2015/lib/components/public_api.js +9 -7
  17. package/esm2015/lib/components/search-judicials/search-judicials.component.js +249 -0
  18. package/esm2015/lib/components/search-location/search-location.component.js +294 -0
  19. package/esm2015/lib/components/search-venue/search-venue.component.js +246 -0
  20. package/esm2015/lib/components/service-messages/service-messages.component.js +2 -2
  21. package/esm2015/lib/components/share-case/share-case.component.js +2 -2
  22. package/esm2015/lib/components/user-list/user-list.component.js +29 -3
  23. package/esm2015/lib/exui-common-lib.module.js +30 -27
  24. package/esm2015/lib/gov-ui/components/gov-uk-date/gov-uk-date.component.js +81 -9
  25. package/esm2015/lib/gov-ui/components/gov-uk-input/gov-uk-input.component.js +2 -2
  26. package/esm2015/lib/gov-ui/components/hmcts-pagination/hmcts-pagination.component.js +49 -0
  27. package/esm2015/lib/gov-ui/components/hmcts-sub-navigation/hmcts-sub-navigation.component.js +7 -2
  28. package/esm2015/lib/gov-ui/components/index.js +2 -2
  29. package/esm2015/lib/gov-ui/components/public_api.js +1 -20
  30. package/esm2015/lib/gov-ui/gov-ui.service.js +1 -1
  31. package/esm2015/lib/gov-ui/index.js +2 -2
  32. package/esm2015/lib/gov-ui/models/isession-storage.interface.js +24 -0
  33. package/esm2015/lib/gov-ui/public_api.js +2 -4
  34. package/esm2015/lib/gov-ui/util/session-storage/session-storage-utils.js +58 -0
  35. package/esm2015/lib/models/contact-details.model.js +8 -1
  36. package/esm2015/lib/models/due-date.model.js +8 -1
  37. package/esm2015/lib/models/filter.model.js +59 -1
  38. package/esm2015/lib/models/index.js +15 -2
  39. package/esm2015/lib/models/location.model.js +129 -0
  40. package/esm2015/lib/models/pagination.model.js +18 -0
  41. package/esm2015/lib/models/person.model.js +92 -0
  42. package/esm2015/lib/models/public_api.js +3 -9
  43. package/esm2015/lib/models/search-options.model.js +22 -0
  44. package/esm2015/lib/services/case-sharing-state/case-sharing-state.service.js +1 -1
  45. package/esm2015/lib/services/cookie/cookie.service.js +110 -0
  46. package/esm2015/lib/services/feature-toggle/feature-toggle.guard.js +8 -2
  47. package/esm2015/lib/services/feature-toggle/feature-toggle.service.js +4 -3
  48. package/esm2015/lib/services/feature-toggle/launch-darkly.service.js +28 -27
  49. package/esm2015/lib/services/filter/filter.service.js +8 -4
  50. package/esm2015/lib/services/find-person/find-person.service.js +214 -0
  51. package/esm2015/lib/services/google-analytics/google-analytics.service.js +1 -1
  52. package/esm2015/lib/services/google-tag-manager/google-tag-manager.service.js +1 -1
  53. package/esm2015/lib/services/index.js +2 -2
  54. package/esm2015/lib/services/loading/loading.service.js +1 -1
  55. package/esm2015/lib/services/locations/location.service.js +57 -0
  56. package/esm2015/lib/services/manage-session/manage-session.services.js +3 -3
  57. package/esm2015/lib/services/public-api.js +8 -4
  58. package/esm2015/lib/services/role-guard/role.guard.js +1 -1
  59. package/esm2015/lib/services/role-guard/role.service.js +1 -1
  60. package/esm2015/lib/services/session-storage/session-storage.service.js +55 -0
  61. package/esm2015/lib/services/timeout-notifications/timeout-notifications.service.js +3 -3
  62. package/esm2015/public-api.js +6 -6
  63. package/esm5/hmcts-rpx-xui-common-lib.js +59 -47
  64. package/esm5/lib/components/accessibility/accessibility.component.js +2 -2
  65. package/esm5/lib/components/cookie-banner/cookie-banner.component.js +154 -0
  66. package/esm5/lib/components/due-date/due-date.component.js +6 -7
  67. package/esm5/lib/components/find-location/find-location.component.js +293 -0
  68. package/esm5/lib/components/find-person/find-person.component.js +286 -0
  69. package/esm5/lib/components/generic-filter/generic-filter-utils.js +66 -0
  70. package/esm5/lib/components/generic-filter/generic-filter.component.js +735 -57
  71. package/esm5/lib/components/index.js +2 -2
  72. package/esm5/lib/components/loading-spinner/loading-spinner.component.js +6 -38
  73. package/esm5/lib/components/pagination/pagination.component.js +58 -0
  74. package/esm5/lib/components/public_api.js +9 -7
  75. package/esm5/lib/components/search-judicials/search-judicials.component.js +291 -0
  76. package/esm5/lib/components/search-location/search-location.component.js +330 -0
  77. package/esm5/lib/components/search-venue/search-venue.component.js +290 -0
  78. package/esm5/lib/components/service-messages/service-messages.component.js +2 -2
  79. package/esm5/lib/components/share-case/share-case.component.js +2 -2
  80. package/esm5/lib/components/user-list/user-list.component.js +36 -3
  81. package/esm5/lib/exui-common-lib.module.js +32 -28
  82. package/esm5/lib/gov-ui/components/gov-uk-date/gov-uk-date.component.js +95 -8
  83. package/esm5/lib/gov-ui/components/gov-uk-input/gov-uk-input.component.js +2 -2
  84. package/esm5/lib/gov-ui/components/hmcts-pagination/hmcts-pagination.component.js +51 -0
  85. package/esm5/lib/gov-ui/components/hmcts-sub-navigation/hmcts-sub-navigation.component.js +7 -2
  86. package/esm5/lib/gov-ui/components/index.js +2 -2
  87. package/esm5/lib/gov-ui/components/public_api.js +1 -20
  88. package/esm5/lib/gov-ui/gov-ui.service.js +1 -1
  89. package/esm5/lib/gov-ui/index.js +2 -2
  90. package/esm5/lib/gov-ui/models/isession-storage.interface.js +24 -0
  91. package/esm5/lib/gov-ui/public_api.js +2 -4
  92. package/esm5/lib/gov-ui/util/session-storage/session-storage-utils.js +58 -0
  93. package/esm5/lib/models/contact-details.model.js +8 -1
  94. package/esm5/lib/models/due-date.model.js +8 -1
  95. package/esm5/lib/models/filter.model.js +59 -1
  96. package/esm5/lib/models/index.js +15 -2
  97. package/esm5/lib/models/location.model.js +129 -0
  98. package/esm5/lib/models/pagination.model.js +18 -0
  99. package/esm5/lib/models/person.model.js +92 -0
  100. package/esm5/lib/models/public_api.js +3 -9
  101. package/esm5/lib/models/search-options.model.js +22 -0
  102. package/esm5/lib/services/case-sharing-state/case-sharing-state.service.js +1 -1
  103. package/esm5/lib/services/cookie/cookie.service.js +136 -0
  104. package/esm5/lib/services/feature-toggle/feature-toggle.guard.js +8 -2
  105. package/esm5/lib/services/feature-toggle/feature-toggle.service.js +5 -3
  106. package/esm5/lib/services/feature-toggle/launch-darkly.service.js +29 -25
  107. package/esm5/lib/services/filter/filter.service.js +8 -4
  108. package/esm5/lib/services/find-person/find-person.service.js +238 -0
  109. package/esm5/lib/services/google-analytics/google-analytics.service.js +1 -1
  110. package/esm5/lib/services/google-tag-manager/google-tag-manager.service.js +1 -1
  111. package/esm5/lib/services/index.js +2 -2
  112. package/esm5/lib/services/loading/loading.service.js +1 -1
  113. package/esm5/lib/services/locations/location.service.js +86 -0
  114. package/esm5/lib/services/manage-session/manage-session.services.js +3 -3
  115. package/esm5/lib/services/public-api.js +8 -4
  116. package/esm5/lib/services/role-guard/role.guard.js +1 -1
  117. package/esm5/lib/services/role-guard/role.service.js +1 -1
  118. package/esm5/lib/services/session-storage/session-storage.service.js +96 -0
  119. package/esm5/lib/services/timeout-notifications/timeout-notifications.service.js +3 -3
  120. package/esm5/public-api.js +6 -6
  121. package/fesm2015/hmcts-rpx-xui-common-lib.js +4567 -751
  122. package/fesm2015/hmcts-rpx-xui-common-lib.js.map +1 -1
  123. package/fesm5/hmcts-rpx-xui-common-lib.js +6324 -1958
  124. package/fesm5/hmcts-rpx-xui-common-lib.js.map +1 -1
  125. package/hmcts-rpx-xui-common-lib.d.ts +57 -45
  126. package/hmcts-rpx-xui-common-lib.metadata.json +1 -1
  127. package/lib/components/cookie-banner/cookie-banner.component.d.ts +20 -0
  128. package/lib/components/find-location/find-location.component.d.ts +32 -0
  129. package/lib/components/find-person/find-person.component.d.ts +40 -0
  130. package/lib/components/generic-filter/generic-filter-utils.d.ts +8 -0
  131. package/lib/components/generic-filter/generic-filter.component.d.ts +34 -10
  132. package/lib/components/hmcts-session-dialog/hmcts-session-dialog.component.d.ts +1 -1
  133. package/lib/components/invite-user-form/invite-user-form.component.d.ts +1 -1
  134. package/lib/components/loading-spinner/loading-spinner.component.d.ts +1 -7
  135. package/lib/components/pagination/pagination.component.d.ts +10 -0
  136. package/lib/components/public_api.d.ts +8 -6
  137. package/lib/components/search-judicials/search-judicials.component.d.ts +37 -0
  138. package/lib/components/search-location/search-location.component.d.ts +41 -0
  139. package/lib/components/search-venue/search-venue.component.d.ts +37 -0
  140. package/lib/components/user-list/user-list.component.d.ts +9 -2
  141. package/lib/exui-common-lib.module.d.ts +10 -11
  142. package/lib/gov-ui/components/gov-uk-date/gov-uk-date.component.d.ts +8 -0
  143. package/lib/gov-ui/components/hmcts-pagination/hmcts-pagination.component.d.ts +10 -0
  144. package/lib/gov-ui/components/hmcts-sub-navigation/hmcts-sub-navigation.component.d.ts +2 -0
  145. package/lib/gov-ui/components/public_api.d.ts +0 -19
  146. package/lib/gov-ui/models/isession-storage.interface.d.ts +4 -0
  147. package/lib/gov-ui/public_api.d.ts +0 -2
  148. package/lib/gov-ui/util/session-storage/session-storage-utils.d.ts +6 -0
  149. package/lib/models/contact-details.model.d.ts +5 -1
  150. package/lib/models/due-date.model.d.ts +5 -0
  151. package/lib/models/filter.model.d.ts +33 -2
  152. package/lib/models/index.d.ts +13 -0
  153. package/lib/models/location.model.d.ts +60 -0
  154. package/lib/models/pagination.model.d.ts +5 -0
  155. package/lib/models/person.model.d.ts +43 -0
  156. package/lib/models/public_api.d.ts +1 -7
  157. package/lib/models/search-options.model.d.ts +8 -0
  158. package/lib/services/cookie/cookie.service.d.ts +9 -0
  159. package/lib/services/feature-toggle/feature-toggle.service.d.ts +1 -1
  160. package/lib/services/feature-toggle/launch-darkly.service.d.ts +4 -6
  161. package/lib/services/filter/filter.service.d.ts +4 -3
  162. package/lib/services/find-person/find-person.service.d.ts +17 -0
  163. package/lib/services/locations/location.service.d.ts +23 -0
  164. package/lib/services/public-api.d.ts +6 -2
  165. package/lib/services/session-storage/session-storage.service.d.ts +20 -0
  166. package/lib/window.d.ts +1 -1
  167. package/package.json +5 -3
  168. package/public-api.d.ts +2 -2
  169. package/esm2015/lib/gov-ui/directives/index.js +0 -7
  170. package/esm2015/lib/gov-ui/directives/public_api.js +0 -7
  171. package/esm2015/lib/models/badge-colour.enum.js +0 -14
  172. package/esm5/lib/gov-ui/directives/index.js +0 -7
  173. package/esm5/lib/gov-ui/directives/public_api.js +0 -7
  174. package/esm5/lib/models/badge-colour.enum.js +0 -14
  175. package/lib/gov-ui/directives/index.d.ts +0 -1
  176. package/lib/gov-ui/directives/public_api.d.ts +0 -1
  177. package/lib/models/badge-colour.enum.d.ts +0 -6
@@ -0,0 +1,294 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * Generated from: lib/components/search-location/search-location.component.ts
4
+ * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
+ */
6
+ import { ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';
7
+ import { AbstractControl, FormBuilder, FormGroup } from '@angular/forms';
8
+ import { debounceTime, filter, map, mergeMap, tap } from 'rxjs/operators';
9
+ import { BookingCheckType } from '../../models';
10
+ import { LocationService } from '../../services/locations/location.service';
11
+ import { SessionStorageService } from '../../services/session-storage/session-storage.service';
12
+ export class SearchLocationComponent {
13
+ /**
14
+ * @param {?} locationService
15
+ * @param {?} sessionStorageService
16
+ * @param {?} fb
17
+ * @param {?} cd
18
+ */
19
+ constructor(locationService, sessionStorageService, fb, cd) {
20
+ this.locationService = locationService;
21
+ this.sessionStorageService = sessionStorageService;
22
+ this.fb = fb;
23
+ this.cd = cd;
24
+ this.disabled = null;
25
+ this.singleMode = false;
26
+ this.locationType = '';
27
+ this.serviceIds = '';
28
+ this.submitted = true;
29
+ this.delay = 500;
30
+ this.showAutocomplete = false;
31
+ this.locations = [];
32
+ this.locationSelected = new EventEmitter();
33
+ this.locationInputChanged = new EventEmitter();
34
+ this.searchLocationChanged = new EventEmitter();
35
+ this.minSearchCharacters = 3;
36
+ this.term = '';
37
+ this.pSelectedLocations = [];
38
+ this.pReset = true;
39
+ this.form = this.fb.group({
40
+ searchTerm: ['']
41
+ });
42
+ }
43
+ /**
44
+ * @return {?}
45
+ */
46
+ get reset() {
47
+ return this.pReset;
48
+ }
49
+ /**
50
+ * @param {?} value
51
+ * @return {?}
52
+ */
53
+ set reset(value) {
54
+ this.pReset = value;
55
+ this.resetSearchTerm();
56
+ }
57
+ /**
58
+ * @return {?}
59
+ */
60
+ get selectedLocations() {
61
+ return this.pSelectedLocations;
62
+ }
63
+ /**
64
+ * @param {?} value
65
+ * @return {?}
66
+ */
67
+ set selectedLocations(value) {
68
+ this.pSelectedLocations = value;
69
+ }
70
+ /**
71
+ * @return {?}
72
+ */
73
+ ngOnInit() {
74
+ if (this.singleMode && this.selectedLocations.length > 0) {
75
+ /** @type {?} */
76
+ const location = this.selectedLocations[0];
77
+ this.form.controls.searchTerm.patchValue(location.site_name, { emitEvent: false, onlySelf: true });
78
+ }
79
+ this.search();
80
+ }
81
+ /**
82
+ * @param {?} term
83
+ * @return {?}
84
+ */
85
+ filter(term) {
86
+ this.getLocations(term).pipe(map((/**
87
+ * @param {?} locations
88
+ * @return {?}
89
+ */
90
+ (locations) => this.removeSelectedLocations(locations))));
91
+ }
92
+ /**
93
+ * @param {?} location
94
+ * @return {?}
95
+ */
96
+ onSelectionChange(location) {
97
+ this.form.controls.searchTerm.patchValue(location.site_name, { emitEvent: false, onlySelf: true });
98
+ this.locationSelected.emit(location);
99
+ }
100
+ /**
101
+ * @return {?}
102
+ */
103
+ search() {
104
+ this.form.controls.searchTerm.valueChanges
105
+ .pipe(tap((/**
106
+ * @param {?} term
107
+ * @return {?}
108
+ */
109
+ (term) => this.locationInputChanged.next(term))), tap((/**
110
+ * @return {?}
111
+ */
112
+ () => this.locations = [])), tap((/**
113
+ * @param {?} term
114
+ * @return {?}
115
+ */
116
+ (term) => this.term = term)), filter((/**
117
+ * @param {?} term
118
+ * @return {?}
119
+ */
120
+ term => !!term && term.length >= this.minSearchCharacters)), debounceTime(this.delay), mergeMap((/**
121
+ * @param {?} value
122
+ * @return {?}
123
+ */
124
+ value => this.getLocations(value))), map((/**
125
+ * @param {?} locations
126
+ * @return {?}
127
+ */
128
+ (locations) => this.removeSelectedLocations(locations)))).subscribe((/**
129
+ * @param {?} locations
130
+ * @return {?}
131
+ */
132
+ locations => {
133
+ this.locations = locations;
134
+ this.cd.markForCheck();
135
+ if (locations.length === 1 && this.term === locations[0].site_name && !this.singleMode) {
136
+ this.locationSelected.emit(locations[0]);
137
+ this.showAutocomplete = false;
138
+ return;
139
+ }
140
+ this.showAutocomplete = true;
141
+ }));
142
+ }
143
+ /**
144
+ * @return {?}
145
+ */
146
+ onInput() {
147
+ this.searchLocationChanged.emit();
148
+ }
149
+ /**
150
+ * @param {?} term
151
+ * @return {?}
152
+ */
153
+ getLocations(term) {
154
+ /** @type {?} */
155
+ let userLocations;
156
+ /** @type {?} */
157
+ let bookingLocations;
158
+ // Booking type info - can create more
159
+ // NO_CHECK - All work - Do not filter out locations - Default assumption
160
+ // ONLY_BOOKINGS - My work - Try to only show base locations/booking locations
161
+ // POSSIBLE_BOOKINGS - Create booking screen - Show only potential bookings
162
+ if (this.bookingCheck === BookingCheckType.BOOKINGS_AND_BASE) {
163
+ userLocations = JSON.parse(this.sessionStorageService.getItem('userLocations'));
164
+ bookingLocations = JSON.parse(this.sessionStorageService.getItem('bookingLocations'));
165
+ }
166
+ else if (this.bookingCheck === BookingCheckType.POSSIBLE_BOOKINGS) {
167
+ userLocations = JSON.parse(this.sessionStorageService.getItem('userLocations'));
168
+ this.serviceIds = JSON.parse(this.sessionStorageService.getItem('bookableServices'));
169
+ }
170
+ return this.locationService.getAllLocations(this.serviceIds, this.locationType, term, userLocations, bookingLocations);
171
+ }
172
+ /**
173
+ * @return {?}
174
+ */
175
+ resetSearchTerm() {
176
+ this.form.controls.searchTerm.patchValue('', { emitEvent: false, onlySelf: true });
177
+ }
178
+ /**
179
+ * @private
180
+ * @param {?} locations
181
+ * @return {?}
182
+ */
183
+ removeSelectedLocations(locations) {
184
+ if (this.singleMode) {
185
+ return locations;
186
+ }
187
+ return locations.filter((/**
188
+ * @param {?} location
189
+ * @return {?}
190
+ */
191
+ location => !this.selectedLocations.map((/**
192
+ * @param {?} selectedLocation
193
+ * @return {?}
194
+ */
195
+ selectedLocation => selectedLocation.epimms_id)).includes(location.epimms_id) && location.site_name));
196
+ }
197
+ }
198
+ SearchLocationComponent.decorators = [
199
+ { type: Component, args: [{
200
+ selector: 'exui-search-location',
201
+ template: "<div class=\"auto-complete-container\">\n <input\n id=\"inputLocationSearch\"\n (input)=\"onInput()\"\n [formControl]=\"form.controls.searchTerm\"\n [matAutocomplete]=\"autoSearchLocation\"\n class=\"govuk-input\"\n [attr.disabled]=\"disabled\">\n <mat-autocomplete class=\"mat-autocomplete-panel-extend\" autoActiveFirstOption #autoSearchLocation=\"matAutocomplete\">\n <mat-option *ngFor=\"let location of locations\"\n (onSelectionChange)=\"onSelectionChange(location)\">\n {{ location.site_name }}\n </mat-option>\n <mat-option *ngIf=\"!locations.length && showAutocomplete && term && term.length >= this.minSearchCharacters\">No results found</mat-option>\n </mat-autocomplete>\n</div>\n",
202
+ styles: [".autocomplete__input--show-all-values{padding:5px 34px 5px 5px;cursor:pointer}.autocomplete__dropdown-arrow-down{z-index:-1;display:inline-block;position:absolute;right:8px;width:24px;height:24px;top:10px}.autocomplete__menu{background-color:#fff;border:2px solid #0b0c0c;border-top:0;color:#0b0c0c;margin:0;max-height:342px;overflow-x:hidden;padding:0;width:100%;width:calc(100% - 4px)}.autocomplete__menu--visible{display:block}.autocomplete__menu--hidden{display:none}.autocomplete__menu--overlay{box-shadow:rgba(0,0,0,.256863) 0 2px 6px;left:0;position:absolute;top:100%;z-index:100}.autocomplete__menu--inline{position:relative}.autocomplete__option{border-bottom:solid #b1b4b6;border-width:1px 0;cursor:pointer;display:block;position:relative}.autocomplete__option>*{pointer-events:none}.autocomplete__option:first-of-type{border-top-width:0}.autocomplete__option:last-of-type{border-bottom-width:0}.autocomplete__option--odd{background-color:#fafafa}.autocomplete__option--focused,.autocomplete__option:hover{background-color:#1d70b8;border-color:#1d70b8;color:#fff;outline:0}.autocomplete__option--no-results{background-color:#fafafa;color:#646b6f;cursor:not-allowed}.autocomplete__hint,.autocomplete__input,.autocomplete__option{font-size:13px;line-height:1.25}.autocomplete__hint,.autocomplete__option{padding:5px}@media (min-width:641px){.autocomplete__hint,.autocomplete__input,.autocomplete__option{font-size:13px;line-height:1.31579}}.div-action{display:inline-block}.add-location{display:inline}.remove-location-button{margin:5px}.hide-autocomplete{display:none}.auto-complete-container{min-width:550px;display:inline-block;margin-right:4px}.autocomplete__input{line-height:24px;font-size:19px}"]
203
+ }] }
204
+ ];
205
+ /** @nocollapse */
206
+ SearchLocationComponent.ctorParameters = () => [
207
+ { type: LocationService },
208
+ { type: SessionStorageService },
209
+ { type: FormBuilder },
210
+ { type: ChangeDetectorRef }
211
+ ];
212
+ SearchLocationComponent.propDecorators = {
213
+ control: [{ type: Input }],
214
+ disabled: [{ type: Input }],
215
+ singleMode: [{ type: Input }],
216
+ locationType: [{ type: Input }],
217
+ serviceIds: [{ type: Input }],
218
+ submitted: [{ type: Input }],
219
+ delay: [{ type: Input }],
220
+ form: [{ type: Input }],
221
+ showAutocomplete: [{ type: Input }],
222
+ locations: [{ type: Input }],
223
+ bookingCheck: [{ type: Input }],
224
+ locationSelected: [{ type: Output }],
225
+ locationInputChanged: [{ type: Output }],
226
+ searchLocationChanged: [{ type: Output }],
227
+ reset: [{ type: Input }],
228
+ selectedLocations: [{ type: Input }]
229
+ };
230
+ if (false) {
231
+ /** @type {?} */
232
+ SearchLocationComponent.prototype.control;
233
+ /** @type {?} */
234
+ SearchLocationComponent.prototype.disabled;
235
+ /** @type {?} */
236
+ SearchLocationComponent.prototype.singleMode;
237
+ /** @type {?} */
238
+ SearchLocationComponent.prototype.locationType;
239
+ /** @type {?} */
240
+ SearchLocationComponent.prototype.serviceIds;
241
+ /** @type {?} */
242
+ SearchLocationComponent.prototype.submitted;
243
+ /** @type {?} */
244
+ SearchLocationComponent.prototype.delay;
245
+ /** @type {?} */
246
+ SearchLocationComponent.prototype.form;
247
+ /** @type {?} */
248
+ SearchLocationComponent.prototype.showAutocomplete;
249
+ /** @type {?} */
250
+ SearchLocationComponent.prototype.locations;
251
+ /** @type {?} */
252
+ SearchLocationComponent.prototype.bookingCheck;
253
+ /** @type {?} */
254
+ SearchLocationComponent.prototype.locationSelected;
255
+ /** @type {?} */
256
+ SearchLocationComponent.prototype.locationInputChanged;
257
+ /** @type {?} */
258
+ SearchLocationComponent.prototype.searchLocationChanged;
259
+ /** @type {?} */
260
+ SearchLocationComponent.prototype.minSearchCharacters;
261
+ /** @type {?} */
262
+ SearchLocationComponent.prototype.term;
263
+ /**
264
+ * @type {?}
265
+ * @private
266
+ */
267
+ SearchLocationComponent.prototype.pSelectedLocations;
268
+ /**
269
+ * @type {?}
270
+ * @private
271
+ */
272
+ SearchLocationComponent.prototype.pReset;
273
+ /**
274
+ * @type {?}
275
+ * @private
276
+ */
277
+ SearchLocationComponent.prototype.locationService;
278
+ /**
279
+ * @type {?}
280
+ * @private
281
+ */
282
+ SearchLocationComponent.prototype.sessionStorageService;
283
+ /**
284
+ * @type {?}
285
+ * @private
286
+ */
287
+ SearchLocationComponent.prototype.fb;
288
+ /**
289
+ * @type {?}
290
+ * @private
291
+ */
292
+ SearchLocationComponent.prototype.cd;
293
+ }
294
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWxvY2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BobWN0cy9ycHgteHVpLWNvbW1vbi1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9zZWFyY2gtbG9jYXRpb24vc2VhcmNoLWxvY2F0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDaEcsT0FBTyxFQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkUsT0FBTyxFQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQXdCLE1BQU0sY0FBYyxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUMxRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQU8vRixNQUFNLE9BQU8sdUJBQXVCOzs7Ozs7O0lBb0JsQyxZQUE2QixlQUFnQyxFQUFtQixxQkFBNEMsRUFBbUIsRUFBZSxFQUFtQixFQUFxQjtRQUF6SyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFBbUIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUFtQixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQW1CLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBbEJ0TCxhQUFRLEdBQVksSUFBSSxDQUFDO1FBQ3pCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFDMUIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixjQUFTLEdBQWEsSUFBSSxDQUFDO1FBQzNCLFVBQUssR0FBWSxHQUFHLENBQUM7UUFFckIscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLGNBQVMsR0FBNEIsRUFBRSxDQUFDO1FBRXZDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUF5QixDQUFDO1FBQzdELHlCQUFvQixHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3hFLDBCQUFxQixHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3RFLHdCQUFtQixHQUFHLENBQUMsQ0FBQztRQUNqQyxTQUFJLEdBQVcsRUFBRSxDQUFDO1FBQ2pCLHVCQUFrQixHQUFVLEVBQUUsQ0FBQztRQUMvQixXQUFNLEdBQVksSUFBSSxDQUFDO1FBRzdCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDeEIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQ2pCLENBQUMsQ0FBQztJQUNMLENBQUM7Ozs7SUFFRCxJQUFXLEtBQUs7UUFDZCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQzs7Ozs7SUFFRCxJQUNXLEtBQUssQ0FBQyxLQUFjO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDOzs7O0lBRUQsSUFBVyxpQkFBaUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQzs7Ozs7SUFFRCxJQUNXLGlCQUFpQixDQUFDLEtBQVk7UUFDdkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUVsQyxDQUFDOzs7O0lBRU0sUUFBUTtRQUNiLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTs7a0JBQ2xELFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7U0FDbEc7UUFDRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQzs7Ozs7SUFFTSxNQUFNLENBQUMsSUFBWTtRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FDMUIsR0FBRzs7OztRQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLEVBQ3pELENBQ0YsQ0FBQztJQUNKLENBQUM7Ozs7O0lBRU0saUJBQWlCLENBQUMsUUFBK0I7UUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUNqRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Ozs7SUFFTSxNQUFNO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFlBQVk7YUFDdkMsSUFBSSxDQUNILEdBQUc7Ozs7UUFBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBQyxFQUNuRCxHQUFHOzs7UUFBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsRUFBQyxFQUM5QixHQUFHOzs7O1FBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFDLEVBQy9CLE1BQU07Ozs7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUMsRUFDakUsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFDeEIsUUFBUTs7OztRQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBQyxFQUMzQyxHQUFHOzs7O1FBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsRUFBQyxDQUM1RCxDQUFDLFNBQVM7Ozs7UUFBQyxTQUFTLENBQUMsRUFBRTtZQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUMzQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDdEYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztnQkFDOUIsT0FBTzthQUNSO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUMvQixDQUFDLEVBQUMsQ0FBQztJQUNMLENBQUM7Ozs7SUFFTSxPQUFPO1FBQ1osSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3BDLENBQUM7Ozs7O0lBRU0sWUFBWSxDQUFDLElBQVk7O1lBQzFCLGFBQWE7O1lBQ2IsZ0JBQWdCO1FBQ3BCLHNDQUFzQztRQUN0Qyx5RUFBeUU7UUFDekUsOEVBQThFO1FBQzlFLDJFQUEyRTtRQUMzRSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUU7WUFDNUQsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQ2hGLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7U0FDdkY7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUU7WUFDbkUsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQ2hGLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztTQUN0RjtRQUNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUN6SCxDQUFDOzs7O0lBRU0sZUFBZTtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQzs7Ozs7O0lBRU8sdUJBQXVCLENBQUMsU0FBa0M7UUFDaEUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25CLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBQ0QsT0FBTyxTQUFTLENBQUMsTUFBTTs7OztRQUNyQixRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUc7Ozs7UUFBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUMzSSxDQUFDO0lBQ0osQ0FBQzs7O1lBN0hGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsc0JBQXNCO2dCQUNoQyxrdkJBQStDOzthQUVoRDs7OztZQVBPLGVBQWU7WUFDZCxxQkFBcUI7WUFOTCxXQUFXO1lBRDVCLGlCQUFpQjs7O3NCQWV0QixLQUFLO3VCQUNMLEtBQUs7eUJBQ0wsS0FBSzsyQkFDTCxLQUFLO3lCQUNMLEtBQUs7d0JBQ0wsS0FBSztvQkFDTCxLQUFLO21CQUNMLEtBQUs7K0JBQ0wsS0FBSzt3QkFDTCxLQUFLOzJCQUNMLEtBQUs7K0JBQ0wsTUFBTTttQ0FDTixNQUFNO29DQUNOLE1BQU07b0JBZ0JOLEtBQUs7Z0NBVUwsS0FBSzs7OztJQXZDTiwwQ0FBeUM7O0lBQ3pDLDJDQUF5Qzs7SUFDekMsNkNBQTRDOztJQUM1QywrQ0FBMEM7O0lBQzFDLDZDQUF3Qzs7SUFDeEMsNENBQTJDOztJQUMzQyx3Q0FBcUM7O0lBQ3JDLHVDQUFnQzs7SUFDaEMsbURBQWtEOztJQUNsRCw0Q0FBd0Q7O0lBQ3hELCtDQUErQzs7SUFDL0MsbURBQThFOztJQUM5RSx1REFBeUY7O0lBQ3pGLHdEQUFzRjs7SUFDdEYsc0RBQXdDOztJQUN4Qyx1Q0FBeUI7Ozs7O0lBQ3pCLHFEQUF1Qzs7Ozs7SUFDdkMseUNBQStCOzs7OztJQUVuQixrREFBaUQ7Ozs7O0lBQUUsd0RBQTZEOzs7OztJQUFFLHFDQUFnQzs7Ozs7SUFBRSxxQ0FBc0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCBtZXJnZU1hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7Qm9va2luZ0NoZWNrVHlwZSwgTG9jYXRpb25CeUVQSU1NU01vZGVsfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtMb2NhdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvY2F0aW9ucy9sb2NhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Nlc3Npb24tc3RvcmFnZS9zZXNzaW9uLXN0b3JhZ2Uuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2V4dWktc2VhcmNoLWxvY2F0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1sb2NhdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlYXJjaC1sb2NhdGlvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaExvY2F0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcHVibGljIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcbiAgQElucHV0KCkgcHVibGljIGRpc2FibGVkOiBib29sZWFuID0gbnVsbDtcbiAgQElucHV0KCkgcHVibGljIHNpbmdsZU1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGxvY2F0aW9uVHlwZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXJ2aWNlSWRzOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgcHVibGljIHN1Ym1pdHRlZD86IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgZGVsYXk/OiBudW1iZXIgPSA1MDA7XG4gIEBJbnB1dCgpIHB1YmxpYyBmb3JtOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93QXV0b2NvbXBsZXRlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBsb2NhdGlvbnM6IExvY2F0aW9uQnlFUElNTVNNb2RlbFtdID0gW107XG4gIEBJbnB1dCgpIHB1YmxpYyBib29raW5nQ2hlY2s6IEJvb2tpbmdDaGVja1R5cGU7XG4gIEBPdXRwdXQoKSBwdWJsaWMgbG9jYXRpb25TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TG9jYXRpb25CeUVQSU1NU01vZGVsPigpO1xuICBAT3V0cHV0KCkgcHVibGljIGxvY2F0aW9uSW5wdXRDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgcHVibGljIHNlYXJjaExvY2F0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBwdWJsaWMgcmVhZG9ubHkgbWluU2VhcmNoQ2hhcmFjdGVycyA9IDM7XG4gIHB1YmxpYyB0ZXJtOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBwU2VsZWN0ZWRMb2NhdGlvbnM6IGFueVtdID0gW107XG4gIHByaXZhdGUgcFJlc2V0OiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGxvY2F0aW9uU2VydmljZTogTG9jYXRpb25TZXJ2aWNlLCBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLCBwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlciwgcHJpdmF0ZSByZWFkb25seSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIHNlYXJjaFRlcm06IFsnJ11cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVzZXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucFJlc2V0O1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCByZXNldCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMucFJlc2V0ID0gdmFsdWU7XG4gICAgdGhpcy5yZXNldFNlYXJjaFRlcm0oKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRMb2NhdGlvbnMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLnBTZWxlY3RlZExvY2F0aW9ucztcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRMb2NhdGlvbnModmFsdWU6IGFueVtdKSB7XG4gICAgdGhpcy5wU2VsZWN0ZWRMb2NhdGlvbnMgPSB2YWx1ZTtcblxuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNpbmdsZU1vZGUgJiYgdGhpcy5zZWxlY3RlZExvY2F0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBsb2NhdGlvbiA9IHRoaXMuc2VsZWN0ZWRMb2NhdGlvbnNbMF07XG4gICAgICB0aGlzLmZvcm0uY29udHJvbHMuc2VhcmNoVGVybS5wYXRjaFZhbHVlKGxvY2F0aW9uLnNpdGVfbmFtZSwge2VtaXRFdmVudDogZmFsc2UsIG9ubHlTZWxmOiB0cnVlfSk7XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoKCk7XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyKHRlcm06IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZ2V0TG9jYXRpb25zKHRlcm0pLnBpcGUoXG4gICAgICBtYXAoKGxvY2F0aW9ucykgPT4gdGhpcy5yZW1vdmVTZWxlY3RlZExvY2F0aW9ucyhsb2NhdGlvbnMpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdGlvbkNoYW5nZShsb2NhdGlvbjogTG9jYXRpb25CeUVQSU1NU01vZGVsKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzLnNlYXJjaFRlcm0ucGF0Y2hWYWx1ZShsb2NhdGlvbi5zaXRlX25hbWUsIHtlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZX0pO1xuICAgIHRoaXMubG9jYXRpb25TZWxlY3RlZC5lbWl0KGxvY2F0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2goKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzLnNlYXJjaFRlcm0udmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCh0ZXJtKSA9PiB0aGlzLmxvY2F0aW9uSW5wdXRDaGFuZ2VkLm5leHQodGVybSkpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5sb2NhdGlvbnMgPSBbXSksXG4gICAgICAgIHRhcCgodGVybSkgPT4gdGhpcy50ZXJtID0gdGVybSksXG4gICAgICAgIGZpbHRlcih0ZXJtID0+ICEhdGVybSAmJiB0ZXJtLmxlbmd0aCA+PSB0aGlzLm1pblNlYXJjaENoYXJhY3RlcnMpLFxuICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWxheSksXG4gICAgICAgIG1lcmdlTWFwKHZhbHVlID0+IHRoaXMuZ2V0TG9jYXRpb25zKHZhbHVlKSksXG4gICAgICAgIG1hcCgobG9jYXRpb25zKSA9PiB0aGlzLnJlbW92ZVNlbGVjdGVkTG9jYXRpb25zKGxvY2F0aW9ucykpXG4gICAgICApLnN1YnNjcmliZShsb2NhdGlvbnMgPT4ge1xuICAgICAgdGhpcy5sb2NhdGlvbnMgPSBsb2NhdGlvbnM7XG4gICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgaWYgKGxvY2F0aW9ucy5sZW5ndGggPT09IDEgJiYgdGhpcy50ZXJtID09PSBsb2NhdGlvbnNbMF0uc2l0ZV9uYW1lICYmICF0aGlzLnNpbmdsZU1vZGUpIHtcbiAgICAgICAgdGhpcy5sb2NhdGlvblNlbGVjdGVkLmVtaXQobG9jYXRpb25zWzBdKTtcbiAgICAgICAgdGhpcy5zaG93QXV0b2NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2hvd0F1dG9jb21wbGV0ZSA9IHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25JbnB1dCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaExvY2F0aW9uQ2hhbmdlZC5lbWl0KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TG9jYXRpb25zKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8TG9jYXRpb25CeUVQSU1NU01vZGVsW10+IHtcbiAgICBsZXQgdXNlckxvY2F0aW9ucztcbiAgICBsZXQgYm9va2luZ0xvY2F0aW9ucztcbiAgICAvLyBCb29raW5nIHR5cGUgaW5mbyAtIGNhbiBjcmVhdGUgbW9yZVxuICAgIC8vIE5PX0NIRUNLIC0gQWxsIHdvcmsgLSBEbyBub3QgZmlsdGVyIG91dCBsb2NhdGlvbnMgLSBEZWZhdWx0IGFzc3VtcHRpb25cbiAgICAvLyBPTkxZX0JPT0tJTkdTIC0gTXkgd29yayAtIFRyeSB0byBvbmx5IHNob3cgYmFzZSBsb2NhdGlvbnMvYm9va2luZyBsb2NhdGlvbnNcbiAgICAvLyBQT1NTSUJMRV9CT09LSU5HUyAtIENyZWF0ZSBib29raW5nIHNjcmVlbiAtIFNob3cgb25seSBwb3RlbnRpYWwgYm9va2luZ3NcbiAgICBpZiAodGhpcy5ib29raW5nQ2hlY2sgPT09IEJvb2tpbmdDaGVja1R5cGUuQk9PS0lOR1NfQU5EX0JBU0UpIHtcbiAgICAgIHVzZXJMb2NhdGlvbnMgPSBKU09OLnBhcnNlKHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ3VzZXJMb2NhdGlvbnMnKSk7XG4gICAgICBib29raW5nTG9jYXRpb25zID0gSlNPTi5wYXJzZSh0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRJdGVtKCdib29raW5nTG9jYXRpb25zJykpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ib29raW5nQ2hlY2sgPT09IEJvb2tpbmdDaGVja1R5cGUuUE9TU0lCTEVfQk9PS0lOR1MpIHtcbiAgICAgIHVzZXJMb2NhdGlvbnMgPSBKU09OLnBhcnNlKHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ3VzZXJMb2NhdGlvbnMnKSk7XG4gICAgICB0aGlzLnNlcnZpY2VJZHMgPSBKU09OLnBhcnNlKHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2Jvb2thYmxlU2VydmljZXMnKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxvY2F0aW9uU2VydmljZS5nZXRBbGxMb2NhdGlvbnModGhpcy5zZXJ2aWNlSWRzLCB0aGlzLmxvY2F0aW9uVHlwZSwgdGVybSwgdXNlckxvY2F0aW9ucywgYm9va2luZ0xvY2F0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRTZWFyY2hUZXJtKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybS5jb250cm9scy5zZWFyY2hUZXJtLnBhdGNoVmFsdWUoJycsIHtlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZX0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVTZWxlY3RlZExvY2F0aW9ucyhsb2NhdGlvbnM6IExvY2F0aW9uQnlFUElNTVNNb2RlbFtdKTogTG9jYXRpb25CeUVQSU1NU01vZGVsW10ge1xuICAgIGlmICh0aGlzLnNpbmdsZU1vZGUpIHtcbiAgICAgIHJldHVybiBsb2NhdGlvbnM7XG4gICAgfVxuICAgIHJldHVybiBsb2NhdGlvbnMuZmlsdGVyKFxuICAgICAgbG9jYXRpb24gPT4gIXRoaXMuc2VsZWN0ZWRMb2NhdGlvbnMubWFwKHNlbGVjdGVkTG9jYXRpb24gPT4gc2VsZWN0ZWRMb2NhdGlvbi5lcGltbXNfaWQpLmluY2x1ZGVzKGxvY2F0aW9uLmVwaW1tc19pZCkgJiYgbG9jYXRpb24uc2l0ZV9uYW1lXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,246 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * Generated from: lib/components/search-venue/search-venue.component.ts
4
+ * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
5
+ */
6
+ import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';
7
+ import { AbstractControl, FormArray, FormBuilder, FormControl } from '@angular/forms';
8
+ import { Subject } from 'rxjs';
9
+ import { debounceTime, mergeMap } from 'rxjs/operators';
10
+ import { LocationService } from '../../services/locations/location.service';
11
+ export class SearchVenueComponent {
12
+ /**
13
+ * @param {?} locationService
14
+ * @param {?} fb
15
+ */
16
+ constructor(locationService, fb) {
17
+ this.locationService = locationService;
18
+ this.disabled = null;
19
+ this.locationType = '';
20
+ this.serviceIds = '';
21
+ this.submitted = true;
22
+ this.showAutocomplete = false;
23
+ this.locationChanged = new EventEmitter();
24
+ this.minSearchCharacters = 3;
25
+ this.keyUpSubject$ = new Subject();
26
+ this.readyAfterContent = false;
27
+ this.searchInProgress = false;
28
+ this.findLocationFormGroup = fb.group({
29
+ findLocationFormControl: [null],
30
+ locationSelectedFormControl: [null]
31
+ });
32
+ this.selectedLocations = [];
33
+ }
34
+ /**
35
+ * @return {?}
36
+ */
37
+ ngAfterContentInit() {
38
+ this.readyAfterContent = true;
39
+ }
40
+ /**
41
+ * @return {?}
42
+ */
43
+ ngOnInit() {
44
+ this.displayedLocations = [];
45
+ if (this.control) {
46
+ if (this.findLocationFormGroup && this.findLocationFormGroup.controls) {
47
+ this.findLocationFormGroup.controls.locationSelectedFormControl = this.control;
48
+ }
49
+ }
50
+ this.keyUpSubject$.pipe(debounceTime(500)).subscribe((/**
51
+ * @param {?} searchValue
52
+ * @return {?}
53
+ */
54
+ searchValue => this.search((/** @type {?} */ (searchValue)))));
55
+ }
56
+ /**
57
+ * @return {?}
58
+ */
59
+ onKeyDown() {
60
+ this.locationChanged.emit();
61
+ }
62
+ /**
63
+ * @param {?} event
64
+ * @return {?}
65
+ */
66
+ onKeyUp(event) {
67
+ this.showAutocomplete = false;
68
+ this.keyUpSubject$.next(event.target.value);
69
+ }
70
+ /**
71
+ * @return {?}
72
+ */
73
+ onFocus() {
74
+ this.showAutocomplete = false;
75
+ }
76
+ /**
77
+ * @return {?}
78
+ */
79
+ get displayedLocationsDuplicationFiltered() {
80
+ return this.displayedLocations.filter((/**
81
+ * @param {?} location
82
+ * @return {?}
83
+ */
84
+ location => !this.selectedLocations.map((/**
85
+ * @param {?} selectedLocation
86
+ * @return {?}
87
+ */
88
+ selectedLocation => selectedLocation.epimms_id)).includes(location.epimms_id) && location.court_name));
89
+ }
90
+ /**
91
+ * @param {?} term
92
+ * @return {?}
93
+ */
94
+ filter(term) {
95
+ this.searchLocations(term).pipe(mergeMap((/**
96
+ * @param {?} apiData
97
+ * @return {?}
98
+ */
99
+ (apiData) => {
100
+ /** @type {?} */
101
+ const apiFilter = apiData.filter((/**
102
+ * @param {?} apiLocation
103
+ * @return {?}
104
+ */
105
+ apiLocation => !this.selectedLocations.map((/**
106
+ * @param {?} selectedLocation
107
+ * @return {?}
108
+ */
109
+ selectedLocation => selectedLocation.epimms_id)).includes(apiLocation.epimms_id)));
110
+ this.displayedLocations = apiFilter;
111
+ this.searchInProgress = false;
112
+ return apiFilter;
113
+ }))).subscribe((/**
114
+ * @param {?} location
115
+ * @return {?}
116
+ */
117
+ location => {
118
+ if (term === location.court_name) {
119
+ this.findLocationFormGroup.controls.locationSelectedFormControl.setValue(location);
120
+ this.displayedLocations = [];
121
+ this.locationChanged.emit(location);
122
+ this.showAutocomplete = false;
123
+ }
124
+ this.searchInProgress = false;
125
+ }));
126
+ }
127
+ /**
128
+ * @param {?=} selection
129
+ * @return {?}
130
+ */
131
+ onSelectionChange(selection) {
132
+ if (this.findLocationFormGroup.controls.findLocationFormControl instanceof FormArray) {
133
+ ((/** @type {?} */ (this.findLocationFormGroup.controls.locationSelectedFormControl))).push(new FormControl(selection.epimms_id));
134
+ }
135
+ else {
136
+ this.findLocationFormGroup.controls.locationSelectedFormControl.setValue(selection);
137
+ }
138
+ this.locationChanged.emit(selection);
139
+ }
140
+ /**
141
+ * @param {?} currentValue
142
+ * @return {?}
143
+ */
144
+ search(currentValue) {
145
+ this.searchInProgress = true;
146
+ this.showAutocomplete = !!currentValue && (currentValue.length >= this.minSearchCharacters);
147
+ if (!currentValue || !currentValue.length) {
148
+ this.findLocationFormGroup.controls.locationSelectedFormControl.markAsPristine();
149
+ this.findLocationFormGroup.controls.locationSelectedFormControl.reset();
150
+ }
151
+ if (this.showAutocomplete) {
152
+ this.filter(currentValue);
153
+ }
154
+ else {
155
+ this.searchInProgress = false;
156
+ }
157
+ }
158
+ /**
159
+ * @param {?} selectedLocation
160
+ * @return {?}
161
+ */
162
+ getDisplayName(selectedLocation) {
163
+ return selectedLocation.court_name;
164
+ }
165
+ /**
166
+ * @param {?} term
167
+ * @return {?}
168
+ */
169
+ searchLocations(term) {
170
+ return this.locationService.searchLocations(this.serviceIds, this.locationType, term);
171
+ }
172
+ /**
173
+ * @return {?}
174
+ */
175
+ getControlCourtNameValue() {
176
+ return this.findLocationFormGroup && this.findLocationFormGroup.controls && this.findLocationFormGroup.controls.locationSelectedFormControl.value ?
177
+ ((/** @type {?} */ (this.findLocationFormGroup.controls.locationSelectedFormControl.value))).court_name : '';
178
+ }
179
+ }
180
+ SearchVenueComponent.decorators = [
181
+ { type: Component, args: [{
182
+ selector: 'xuilib-search-venue',
183
+ template: "<div class=\"auto-complete-container\">\n <div *ngIf=\"readyAfterContent\" class=\"autocomplete__wrapper\">\n <input\n [formControl]=\"findLocationFormGroup.controls.findLocationFormControl\"\n [matAutocomplete]=\"autoSearchLocation\"\n (keydown)=\"onKeyDown()\"\n (keyup)=\"onKeyUp($event)\"\n (focus)=\"onFocus()\"\n class=\"autocomplete__input autocomplete__input--default search-box\"\n [attr.disabled]=\"!disabled ? null: disabled\"\n [value]=\"getControlCourtNameValue()\"\n #inputSelectedLocation>\n <mat-autocomplete class=\"mat-autocomplete-panel-extend\" autoActiveFirstOption #autoSearchLocation=\"matAutocomplete\">\n <mat-option *ngFor=\"let location of displayedLocationsDuplicationFiltered\"\n [value]=\"getDisplayName(location)\"\n (onSelectionChange)=\"onSelectionChange(location)\"\n [ngClass]=\"{'hide-autocomplete': !showAutocomplete}\">\n {{ getDisplayName(location) }}\n </mat-option>\n <mat-option *ngIf=\"!displayedLocationsDuplicationFiltered?.length && showAutocomplete && !searchInProgress\">{{ 'No results found' }}</mat-option>\n </mat-autocomplete>\n </div>\n</div>\n",
184
+ styles: [".autocomplete__input{-webkit-appearance:none;border:2px solid #0b0c0c;border-radius:0;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;margin-bottom:0;width:100%;background-color:transparent;position:relative}.autocomplete__hint{color:#b1b4b6;position:absolute}.autocomplete__input--default{padding:5px}.autocomplete__input--focused{outline:#fd0 solid 3px;outline-offset:0;box-shadow:inset 0 0 0 2px}.autocomplete__input--show-all-values{padding:5px 34px 5px 5px;cursor:pointer}.autocomplete__dropdown-arrow-down{z-index:-1;display:inline-block;position:absolute;right:8px;width:24px;height:24px;top:10px}.autocomplete__menu{background-color:#fff;border:2px solid #0b0c0c;border-top:0;color:#0b0c0c;margin:0;max-height:342px;overflow-x:hidden;padding:0;width:100%;width:calc(100% - 4px)}.autocomplete__menu--visible{display:block}.autocomplete__menu--hidden{display:none}.autocomplete__menu--overlay{box-shadow:rgba(0,0,0,.256863) 0 2px 6px;left:0;position:absolute;top:100%;z-index:100}.autocomplete__menu--inline{position:relative}.autocomplete__option{border-bottom:solid #b1b4b6;border-width:1px 0;cursor:pointer;display:block;position:relative}.autocomplete__option>*{pointer-events:none}.autocomplete__option:first-of-type{border-top-width:0}.autocomplete__option:last-of-type{border-bottom-width:0}.autocomplete__option--odd{background-color:#fafafa}.autocomplete__option--focused,.autocomplete__option:hover{background-color:#1d70b8;border-color:#1d70b8;color:#fff;outline:0}.autocomplete__option--no-results{background-color:#fafafa;color:#646b6f;cursor:not-allowed}.autocomplete__hint,.autocomplete__input,.autocomplete__option{font-size:13px;line-height:1.25}.autocomplete__hint,.autocomplete__option{padding:5px}@media (min-width:641px){.autocomplete__hint,.autocomplete__input,.autocomplete__option{font-size:13px;line-height:1.31579}}.div-action{display:inline-block}.add-location{display:inline}.remove-location-button{margin:5px}.hide-autocomplete{display:none}.auto-complete-container{min-width:550px;display:inline-block;margin-right:4px}"]
185
+ }] }
186
+ ];
187
+ /** @nocollapse */
188
+ SearchVenueComponent.ctorParameters = () => [
189
+ { type: LocationService },
190
+ { type: FormBuilder }
191
+ ];
192
+ SearchVenueComponent.propDecorators = {
193
+ control: [{ type: Input }],
194
+ disabled: [{ type: Input }],
195
+ locationType: [{ type: Input }],
196
+ selectedLocations: [{ type: Input }],
197
+ serviceIds: [{ type: Input }],
198
+ submitted: [{ type: Input }],
199
+ autoCompleteInputBox: [{ type: ViewChild, args: ['inputSelectedLocation', { read: ElementRef, static: false },] }],
200
+ showAutocomplete: [{ type: Input }],
201
+ displayedLocations: [{ type: Input }],
202
+ locationChanged: [{ type: Output }]
203
+ };
204
+ if (false) {
205
+ /** @type {?} */
206
+ SearchVenueComponent.prototype.control;
207
+ /** @type {?} */
208
+ SearchVenueComponent.prototype.disabled;
209
+ /** @type {?} */
210
+ SearchVenueComponent.prototype.locationType;
211
+ /** @type {?} */
212
+ SearchVenueComponent.prototype.selectedLocations;
213
+ /** @type {?} */
214
+ SearchVenueComponent.prototype.serviceIds;
215
+ /** @type {?} */
216
+ SearchVenueComponent.prototype.submitted;
217
+ /** @type {?} */
218
+ SearchVenueComponent.prototype.autoCompleteInputBox;
219
+ /** @type {?} */
220
+ SearchVenueComponent.prototype.findLocationFormGroup;
221
+ /** @type {?} */
222
+ SearchVenueComponent.prototype.showAutocomplete;
223
+ /** @type {?} */
224
+ SearchVenueComponent.prototype.displayedLocations;
225
+ /** @type {?} */
226
+ SearchVenueComponent.prototype.locationChanged;
227
+ /** @type {?} */
228
+ SearchVenueComponent.prototype.selectedLocation;
229
+ /**
230
+ * @type {?}
231
+ * @private
232
+ */
233
+ SearchVenueComponent.prototype.minSearchCharacters;
234
+ /** @type {?} */
235
+ SearchVenueComponent.prototype.keyUpSubject$;
236
+ /** @type {?} */
237
+ SearchVenueComponent.prototype.readyAfterContent;
238
+ /** @type {?} */
239
+ SearchVenueComponent.prototype.searchInProgress;
240
+ /**
241
+ * @type {?}
242
+ * @private
243
+ */
244
+ SearchVenueComponent.prototype.locationService;
245
+ }
246
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLXZlbnVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BobWN0cy9ycHgteHVpLWNvbW1vbi1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9zZWFyY2gtdmVudWUvc2VhcmNoLXZlbnVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBbUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdEgsT0FBTyxFQUFDLGVBQWUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBQy9GLE9BQU8sRUFBYSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFDLFlBQVksRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFPMUUsTUFBTSxPQUFPLG9CQUFvQjs7Ozs7SUFrQi9CLFlBQTZCLGVBQWdDLEVBQUUsRUFBZTtRQUFqRCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFoQjdDLGFBQVEsR0FBWSxJQUFJLENBQUM7UUFDekIsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFFMUIsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixjQUFTLEdBQWEsSUFBSSxDQUFDO1FBRzNCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUVqQyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUF5QixDQUFDO1FBRTVELHdCQUFtQixHQUFHLENBQUMsQ0FBQztRQUNsQyxrQkFBYSxHQUFvQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQy9DLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFHdkMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEVB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a0RBQTREOztJQUM1RCwrQ0FBNkU7O0lBQzdFLGdEQUErQzs7Ozs7SUFDL0MsbURBQXlDOztJQUN6Qyw2Q0FBc0Q7O0lBQ3RELGlEQUEwQzs7SUFDMUMsZ0RBQXlDOzs7OztJQUU3QiwrQ0FBaUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyQ29udGVudEluaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBtZXJnZU1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtMb2NhdGlvbkJ5RVBJTU1TTW9kZWx9IGZyb20gJy4uLy4uL21vZGVscy9sb2NhdGlvbi5tb2RlbCc7XG5pbXBvcnQge0xvY2F0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9jYXRpb25zL2xvY2F0aW9uLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd4dWlsaWItc2VhcmNoLXZlbnVlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC12ZW51ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlYXJjaC12ZW51ZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNlYXJjaFZlbnVlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0IHtcbiAgQElucHV0KCkgcHVibGljIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcbiAgQElucHV0KCkgcHVibGljIGRpc2FibGVkOiBib29sZWFuID0gbnVsbDtcbiAgQElucHV0KCkgcHVibGljIGxvY2F0aW9uVHlwZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3RlZExvY2F0aW9uczogTG9jYXRpb25CeUVQSU1NU01vZGVsW107XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXJ2aWNlSWRzOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgcHVibGljIHN1Ym1pdHRlZD86IGJvb2xlYW4gPSB0cnVlO1xuICBAVmlld0NoaWxkKCdpbnB1dFNlbGVjdGVkTG9jYXRpb24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogZmFsc2UgfSkgcHVibGljIGF1dG9Db21wbGV0ZUlucHV0Qm94OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBwdWJsaWMgZmluZExvY2F0aW9uRm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93QXV0b2NvbXBsZXRlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNwbGF5ZWRMb2NhdGlvbnM6IExvY2F0aW9uQnlFUElNTVNNb2RlbFtdO1xuICBAT3V0cHV0KCkgcHVibGljIGxvY2F0aW9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TG9jYXRpb25CeUVQSU1NU01vZGVsPigpO1xuICBwdWJsaWMgc2VsZWN0ZWRMb2NhdGlvbjogTG9jYXRpb25CeUVQSU1NU01vZGVsO1xuICBwcml2YXRlIHJlYWRvbmx5IG1pblNlYXJjaENoYXJhY3RlcnMgPSAzO1xuICBwdWJsaWMga2V5VXBTdWJqZWN0JDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QoKTtcbiAgcHVibGljIHJlYWR5QWZ0ZXJDb250ZW50OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzZWFyY2hJblByb2dyZXNzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBsb2NhdGlvblNlcnZpY2U6IExvY2F0aW9uU2VydmljZSwgZmI6IEZvcm1CdWlsZGVyKSB7XG4gICAgdGhpcy5maW5kTG9jYXRpb25Gb3JtR3JvdXAgPSBmYi5ncm91cCh7XG4gICAgICBmaW5kTG9jYXRpb25Gb3JtQ29udHJvbDogW251bGxdLFxuICAgICAgbG9jYXRpb25TZWxlY3RlZEZvcm1Db250cm9sOiBbbnVsbF1cbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGVkTG9jYXRpb25zID0gW107XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVhZHlBZnRlckNvbnRlbnQgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGxheWVkTG9jYXRpb25zID0gW107XG4gICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgaWYgKHRoaXMuZmluZExvY2F0aW9uRm9ybUdyb3VwICYmIHRoaXMuZmluZExvY2F0aW9uRm9ybUdyb3VwLmNvbnRyb2xzKSB7XG4gICAgICAgIHRoaXMuZmluZExvY2F0aW9uRm9ybUdyb3VwLmNvbnRyb2xzLmxvY2F0aW9uU2VsZWN0ZWRGb3JtQ29udHJvbCA9IHRoaXMuY29udHJvbDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5rZXlVcFN1YmplY3QkLnBpcGUoZGVib3VuY2VUaW1lKDUwMCkpLnN1YnNjcmliZShzZWFyY2hWYWx1ZSA9PiB0aGlzLnNlYXJjaChzZWFyY2hWYWx1ZSBhcyBzdHJpbmcpKTtcbiAgfVxuXG4gIHB1YmxpYyBvbktleURvd24oKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhdGlvbkNoYW5nZWQuZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIG9uS2V5VXAoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0F1dG9jb21wbGV0ZSA9IGZhbHNlO1xuICAgIHRoaXMua2V5VXBTdWJqZWN0JC5uZXh0KGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgb25Gb2N1cygpIHtcbiAgICB0aGlzLnNob3dBdXRvY29tcGxldGUgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlzcGxheWVkTG9jYXRpb25zRHVwbGljYXRpb25GaWx0ZXJlZCgpOiBMb2NhdGlvbkJ5RVBJTU1TTW9kZWxbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGlzcGxheWVkTG9jYXRpb25zLmZpbHRlcihcbiAgICAgIGxvY2F0aW9uID0+ICF0aGlzLnNlbGVjdGVkTG9jYXRpb25zLm1hcChzZWxlY3RlZExvY2F0aW9uID0+IHNlbGVjdGVkTG9jYXRpb24uZXBpbW1zX2lkKS5pbmNsdWRlcyhsb2NhdGlvbi5lcGltbXNfaWQpICYmIGxvY2F0aW9uLmNvdXJ0X25hbWVcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGZpbHRlcih0ZXJtOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaExvY2F0aW9ucyh0ZXJtKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoKGFwaURhdGE6IExvY2F0aW9uQnlFUElNTVNNb2RlbFtdKSA9PiB7XG4gICAgICAgIGNvbnN0IGFwaUZpbHRlciA9IGFwaURhdGEuZmlsdGVyKFxuICAgICAgICAgIGFwaUxvY2F0aW9uID0+ICF0aGlzLnNlbGVjdGVkTG9jYXRpb25zLm1hcChzZWxlY3RlZExvY2F0aW9uID0+IHNlbGVjdGVkTG9jYXRpb24uZXBpbW1zX2lkKS5pbmNsdWRlcyhhcGlMb2NhdGlvbi5lcGltbXNfaWQpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZGlzcGxheWVkTG9jYXRpb25zID0gYXBpRmlsdGVyO1xuICAgICAgICB0aGlzLnNlYXJjaEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGFwaUZpbHRlcjtcbiAgICAgIH0pXG4gICAgKS5zdWJzY3JpYmUobG9jYXRpb24gPT4ge1xuICAgICAgaWYgKHRlcm0gPT09IGxvY2F0aW9uLmNvdXJ0X25hbWUpIHtcbiAgICAgICAgdGhpcy5maW5kTG9jYXRpb25Gb3JtR3JvdXAuY29udHJvbHMubG9jYXRpb25TZWxlY3RlZEZvcm1Db250cm9sLnNldFZhbHVlKGxvY2F0aW9uKTtcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRMb2NhdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5sb2NhdGlvbkNoYW5nZWQuZW1pdChsb2NhdGlvbik7XG4gICAgICAgIHRoaXMuc2hvd0F1dG9jb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWFyY2hJblByb2dyZXNzID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0aW9uPzogTG9jYXRpb25CeUVQSU1NU01vZGVsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmluZExvY2F0aW9uRm9ybUdyb3VwLmNvbnRyb2xzLmZpbmRMb2NhdGlvbkZvcm1Db250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICAodGhpcy5maW5kTG9jYXRpb25Gb3JtR3JvdXAuY29udHJvbHMubG9jYXRpb25TZWxlY3RlZEZvcm1Db250cm9sIGFzIEZvcm1BcnJheSkucHVzaChuZXcgRm9ybUNvbnRyb2woc2VsZWN0aW9uLmVwaW1tc19pZCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbmRMb2NhdGlvbkZvcm1Hcm91cC5jb250cm9scy5sb2NhdGlvblNlbGVjdGVkRm9ybUNvbnRyb2wuc2V0VmFsdWUoc2VsZWN0aW9uKTtcbiAgICB9XG4gICAgdGhpcy5sb2NhdGlvbkNoYW5nZWQuZW1pdChzZWxlY3Rpb24pO1xuICB9XG5cbiAgcHVibGljIHNlYXJjaChjdXJyZW50VmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgdGhpcy5zaG93QXV0b2NvbXBsZXRlID0gISFjdXJyZW50VmFsdWUgJiYgKGN1cnJlbnRWYWx1ZS5sZW5ndGggPj0gdGhpcy5taW5TZWFyY2hDaGFyYWN0ZXJzKTtcbiAgICBpZiAoIWN1cnJlbnRWYWx1ZSB8fCAhY3VycmVudFZhbHVlLmxlbmd0aCkge1xuICAgICAgdGhpcy5maW5kTG9jYXRpb25Gb3JtR3JvdXAuY29udHJvbHMubG9jYXRpb25TZWxlY3RlZEZvcm1Db250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICB0aGlzLmZpbmRMb2NhdGlvbkZvcm1Hcm91cC5jb250cm9scy5sb2NhdGlvblNlbGVjdGVkRm9ybUNvbnRyb2wucmVzZXQoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2hvd0F1dG9jb21wbGV0ZSkge1xuICAgICAgdGhpcy5maWx0ZXIoY3VycmVudFZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWFyY2hJblByb2dyZXNzID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldERpc3BsYXlOYW1lKHNlbGVjdGVkTG9jYXRpb246IExvY2F0aW9uQnlFUElNTVNNb2RlbCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNlbGVjdGVkTG9jYXRpb24uY291cnRfbmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2hMb2NhdGlvbnModGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkJ5RVBJTU1TTW9kZWxbXT4ge1xuICAgIHJldHVybiB0aGlzLmxvY2F0aW9uU2VydmljZS5zZWFyY2hMb2NhdGlvbnModGhpcy5zZXJ2aWNlSWRzLCB0aGlzLmxvY2F0aW9uVHlwZSwgdGVybSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29udHJvbENvdXJ0TmFtZVZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZmluZExvY2F0aW9uRm9ybUdyb3VwICYmIHRoaXMuZmluZExvY2F0aW9uRm9ybUdyb3VwLmNvbnRyb2xzICYmIHRoaXMuZmluZExvY2F0aW9uRm9ybUdyb3VwLmNvbnRyb2xzLmxvY2F0aW9uU2VsZWN0ZWRGb3JtQ29udHJvbC52YWx1ZSA/XG4gICAgICAodGhpcy5maW5kTG9jYXRpb25Gb3JtR3JvdXAuY29udHJvbHMubG9jYXRpb25TZWxlY3RlZEZvcm1Db250cm9sLnZhbHVlIGFzIExvY2F0aW9uQnlFUElNTVNNb2RlbCkuY291cnRfbmFtZSA6ICcnO1xuICB9XG59XG4iXX0=
@@ -74,7 +74,7 @@ export class ServiceMessagesComponent {
74
74
  ServiceMessagesComponent.decorators = [
75
75
  { type: Component, args: [{
76
76
  selector: 'xuilib-service-messages',
77
- template: "<div class=\"govuk-width-container govuk-!-margin-top-6\">\n <xuilib-service-message *ngFor=\"let message of filteredMessages | keyvalue\" [key]=\"message.key\"\n [message]=\"message.value\" (hideMessage)=\"hideMessage($event)\"></xuilib-service-message>\n</div>"
77
+ template: "<div *ngIf=\"filteredMessages?.size > 0\" class=\"govuk-width-container govuk-!-margin-top-6\">\n <xuilib-service-message *ngFor=\"let message of filteredMessages | keyvalue\" [key]=\"message.key\"\n [message]=\"message.value\" (hideMessage)=\"hideMessage($event)\"></xuilib-service-message>\n</div>"
78
78
  }] }
79
79
  ];
80
80
  /** @nocollapse */
@@ -103,4 +103,4 @@ if (false) {
103
103
  */
104
104
  ServiceMessagesComponent.prototype.featureToggleService;
105
105
  }
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1tZXNzYWdlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaG1jdHMvcnB4LXh1aS1jb21tb24tbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvc2VydmljZS1tZXNzYWdlcy9zZXJ2aWNlLW1lc3NhZ2VzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDOzs7O0FBRTVGLHFDQUVDO0FBTUQsTUFBTSxPQUFPLHdCQUF3Qjs7OztJQVFuQyxZQUE2QixvQkFBMEM7UUFBMUMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQU5oRSxxQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQU11QixDQUFDOzs7O0lBRXJFLFFBQVE7UUFDYixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDOzs7O0lBRU0sa0JBQWtCO1FBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQWtCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUM7YUFDN0UsU0FBUzs7OztRQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQkFDZCxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDdkM7UUFDSCxDQUFDLEVBQUMsQ0FBQztJQUNQLENBQUM7Ozs7OztJQUVPLHNCQUFzQixDQUFDLFFBQXlCO1FBQ3RELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU87Ozs7UUFBQyxHQUFHLENBQUMsRUFBRTs7a0JBQzVCLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUM7WUFDN0IsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUk7Ozs7WUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDckYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDL0M7UUFDSCxDQUFDLEVBQUMsQ0FBQztJQUNMLENBQUM7Ozs7O0lBRU0sV0FBVyxDQUFDLEdBQVc7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDOzs7WUF6Q0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSx5QkFBeUI7Z0JBQ25DLDRSQUFnRDthQUNqRDs7OztZQVRRLG9CQUFvQjs7O3dCQWMxQixLQUFLOytCQUNMLEtBQUs7bUNBQ0wsS0FBSzs7OztJQUxOLGlEQUErQjs7SUFDL0Isb0RBQW9EOztJQUVwRCw2Q0FBb0M7O0lBQ3BDLG9EQUF5Qzs7SUFDekMsd0RBQTZDOzs7OztJQUVqQyx3REFBMkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZlYXR1cmVUb2dnbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmVhdHVyZS10b2dnbGUvZmVhdHVyZS10b2dnbGUuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZU1lc3NhZ2VzIHtcbiAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd4dWlsaWItc2VydmljZS1tZXNzYWdlcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZXJ2aWNlLW1lc3NhZ2VzLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBTZXJ2aWNlTWVzc2FnZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgaGlkZGVuQmFubmVyczogc3RyaW5nW107XG4gIHB1YmxpYyBmaWx0ZXJlZE1lc3NhZ2VzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICBASW5wdXQoKSBwdWJsaWMgdXNlclJvbGVzOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgcHVibGljIGZlYXR1cmVUb2dnbGVLZXk6IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIHNlcnZpY2VNZXNzYWdlQ29va2llOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBmZWF0dXJlVG9nZ2xlU2VydmljZTogRmVhdHVyZVRvZ2dsZVNlcnZpY2UpIHsgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmdldFNlcnZpY2VNZXNzYWdlcygpO1xuICB9XG5cbiAgcHVibGljIGdldFNlcnZpY2VNZXNzYWdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmZlYXR1cmVUb2dnbGVTZXJ2aWNlLmdldFZhbHVlPFNlcnZpY2VNZXNzYWdlcz4odGhpcy5mZWF0dXJlVG9nZ2xlS2V5LCBudWxsKVxuICAgICAgLnN1YnNjcmliZShtZXNzYWdlcyA9PiB7XG4gICAgICAgIGlmICghIW1lc3NhZ2VzKSB7XG4gICAgICAgICAgdGhpcy5jcmVhdGVGaWx0ZXJlZE1lc3NhZ2VzKG1lc3NhZ2VzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZpbHRlcmVkTWVzc2FnZXMobWVzc2FnZXM6IFNlcnZpY2VNZXNzYWdlcyk6IHZvaWQge1xuICAgIHRoaXMuaGlkZGVuQmFubmVycyA9IEpTT04ucGFyc2Uod2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5zZXJ2aWNlTWVzc2FnZUNvb2tpZSkpIHx8IFtdO1xuICAgIE9iamVjdC5rZXlzKG1lc3NhZ2VzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCByZWdFeCA9IG5ldyBSZWdFeHAoa2V5KTtcbiAgICAgIGlmICh0aGlzLnVzZXJSb2xlcy5zb21lKGUgPT4gcmVnRXgudGVzdChlKSkgJiYgdGhpcy5oaWRkZW5CYW5uZXJzLmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZE1lc3NhZ2VzLnNldChrZXksIG1lc3NhZ2VzW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGhpZGVNZXNzYWdlKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJlZE1lc3NhZ2VzLmRlbGV0ZShrZXkpO1xuICAgIHRoaXMuaGlkZGVuQmFubmVycy5wdXNoKGtleSk7XG4gICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5zZXJ2aWNlTWVzc2FnZUNvb2tpZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5oaWRkZW5CYW5uZXJzKSk7XG4gIH1cbn1cbiJdfQ==
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1tZXNzYWdlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaG1jdHMvcnB4LXh1aS1jb21tb24tbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvc2VydmljZS1tZXNzYWdlcy9zZXJ2aWNlLW1lc3NhZ2VzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDOzs7O0FBRTVGLHFDQUVDO0FBTUQsTUFBTSxPQUFPLHdCQUF3Qjs7OztJQVFuQyxZQUE2QixvQkFBMEM7UUFBMUMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQU5oRSxxQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQU11QixDQUFDOzs7O0lBRXJFLFFBQVE7UUFDYixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDOzs7O0lBRU0sa0JBQWtCO1FBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQWtCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUM7YUFDN0UsU0FBUzs7OztRQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQkFDZCxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDdkM7UUFDSCxDQUFDLEVBQUMsQ0FBQztJQUNQLENBQUM7Ozs7OztJQUVPLHNCQUFzQixDQUFDLFFBQXlCO1FBQ3RELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU87Ozs7UUFBQyxHQUFHLENBQUMsRUFBRTs7a0JBQzVCLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUM7WUFDN0IsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUk7Ozs7WUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDckYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDL0M7UUFDSCxDQUFDLEVBQUMsQ0FBQztJQUNMLENBQUM7Ozs7O0lBRU0sV0FBVyxDQUFDLEdBQVc7UUFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDOzs7WUF6Q0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSx5QkFBeUI7Z0JBQ25DLGlVQUFnRDthQUNqRDs7OztZQVRRLG9CQUFvQjs7O3dCQWMxQixLQUFLOytCQUNMLEtBQUs7bUNBQ0wsS0FBSzs7OztJQUxOLGlEQUErQjs7SUFDL0Isb0RBQW9EOztJQUVwRCw2Q0FBb0M7O0lBQ3BDLG9EQUF5Qzs7SUFDekMsd0RBQTZDOzs7OztJQUVqQyx3REFBMkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZlYXR1cmVUb2dnbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmVhdHVyZS10b2dnbGUvZmVhdHVyZS10b2dnbGUuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZU1lc3NhZ2VzIHtcbiAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd4dWlsaWItc2VydmljZS1tZXNzYWdlcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZXJ2aWNlLW1lc3NhZ2VzLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBTZXJ2aWNlTWVzc2FnZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgaGlkZGVuQmFubmVyczogc3RyaW5nW107XG4gIHB1YmxpYyBmaWx0ZXJlZE1lc3NhZ2VzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICBASW5wdXQoKSBwdWJsaWMgdXNlclJvbGVzOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgcHVibGljIGZlYXR1cmVUb2dnbGVLZXk6IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIHNlcnZpY2VNZXNzYWdlQ29va2llOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBmZWF0dXJlVG9nZ2xlU2VydmljZTogRmVhdHVyZVRvZ2dsZVNlcnZpY2UpIHsgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmdldFNlcnZpY2VNZXNzYWdlcygpO1xuICB9XG5cbiAgcHVibGljIGdldFNlcnZpY2VNZXNzYWdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmZlYXR1cmVUb2dnbGVTZXJ2aWNlLmdldFZhbHVlPFNlcnZpY2VNZXNzYWdlcz4odGhpcy5mZWF0dXJlVG9nZ2xlS2V5LCBudWxsKVxuICAgICAgLnN1YnNjcmliZShtZXNzYWdlcyA9PiB7XG4gICAgICAgIGlmICghIW1lc3NhZ2VzKSB7XG4gICAgICAgICAgdGhpcy5jcmVhdGVGaWx0ZXJlZE1lc3NhZ2VzKG1lc3NhZ2VzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZpbHRlcmVkTWVzc2FnZXMobWVzc2FnZXM6IFNlcnZpY2VNZXNzYWdlcyk6IHZvaWQge1xuICAgIHRoaXMuaGlkZGVuQmFubmVycyA9IEpTT04ucGFyc2Uod2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5zZXJ2aWNlTWVzc2FnZUNvb2tpZSkpIHx8IFtdO1xuICAgIE9iamVjdC5rZXlzKG1lc3NhZ2VzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBjb25zdCByZWdFeCA9IG5ldyBSZWdFeHAoa2V5KTtcbiAgICAgIGlmICh0aGlzLnVzZXJSb2xlcy5zb21lKGUgPT4gcmVnRXgudGVzdChlKSkgJiYgdGhpcy5oaWRkZW5CYW5uZXJzLmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZE1lc3NhZ2VzLnNldChrZXksIG1lc3NhZ2VzW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGhpZGVNZXNzYWdlKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJlZE1lc3NhZ2VzLmRlbGV0ZShrZXkpO1xuICAgIHRoaXMuaGlkZGVuQmFubmVycy5wdXNoKGtleSk7XG4gICAgd2luZG93LnNlc3Npb25TdG9yYWdlLnNldEl0ZW0odGhpcy5zZXJ2aWNlTWVzc2FnZUNvb2tpZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5oaWRkZW5CYW5uZXJzKSk7XG4gIH1cbn1cbiJdfQ==