@metadev/lux 0.16.4 → 0.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/esm2020/lib/autocomplete/autocomplete.component.mjs +479 -0
  2. package/esm2020/lib/autocomplete-list/autocomplete-list.component.mjs +254 -0
  3. package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +75 -0
  4. package/esm2020/lib/checkbox/checkbox.component.mjs +154 -0
  5. package/{esm2015/lib/datasource.js → esm2020/lib/datasource.mjs} +0 -0
  6. package/esm2020/lib/datetime/datetime.component.mjs +306 -0
  7. package/esm2020/lib/filter/filter.component.mjs +152 -0
  8. package/esm2020/lib/geolocation/geolocation.component.mjs +407 -0
  9. package/{esm2015/lib/geolocation/geolocation.service.js → esm2020/lib/geolocation/geolocation.service.mjs} +7 -11
  10. package/esm2020/lib/geolocation/openlayer-loader.service.mjs +62 -0
  11. package/esm2020/lib/helperFns.mjs +109 -0
  12. package/esm2020/lib/input/input.component.mjs +452 -0
  13. package/{esm2015/lib/input/regexp.service.js → esm2020/lib/input/regexp.service.mjs} +7 -6
  14. package/{esm2015/lib/lang.js → esm2020/lib/lang.mjs} +0 -0
  15. package/esm2020/lib/lux.module.mjs +130 -0
  16. package/{esm2015/lib/map/geopoint.js → esm2020/lib/map/geopoint.mjs} +0 -0
  17. package/esm2020/lib/map/map.component.mjs +265 -0
  18. package/esm2020/lib/modal/modal-backdrop.mjs +26 -0
  19. package/esm2020/lib/modal/modal-config.mjs +14 -0
  20. package/{esm2015/lib/modal/modal-dismiss-reasons.js → esm2020/lib/modal/modal-dismiss-reasons.mjs} +0 -0
  21. package/{esm2015/lib/modal/modal-ref.js → esm2020/lib/modal/modal-ref.mjs} +0 -0
  22. package/esm2020/lib/modal/modal-stack.mjs +179 -0
  23. package/esm2020/lib/modal/modal-window.mjs +119 -0
  24. package/esm2020/lib/modal/modal.service.mjs +26 -0
  25. package/{esm2015/lib/modal/util.js → esm2020/lib/modal/util.mjs} +0 -0
  26. package/esm2020/lib/pagination/pagination.component.mjs +137 -0
  27. package/{esm2015/lib/pagination/pagination.js → esm2020/lib/pagination/pagination.mjs} +0 -0
  28. package/esm2020/lib/radiogroup/radiogroup.component.mjs +130 -0
  29. package/esm2020/lib/select/select.component.mjs +149 -0
  30. package/{esm2015/lib/tooltip/placement.js → esm2020/lib/tooltip/placement.mjs} +0 -0
  31. package/{esm2015/lib/tooltip/tooltip-context.js → esm2020/lib/tooltip/tooltip-context.mjs} +0 -0
  32. package/esm2020/lib/tooltip/tooltip.component.mjs +23 -0
  33. package/esm2020/lib/tooltip/tooltip.directive.mjs +60 -0
  34. package/{esm2015/lib/tooltip/tooltip.service.js → esm2020/lib/tooltip/tooltip.service.mjs} +7 -9
  35. package/{esm2015/lib/tooltip/tooltop-content.js → esm2020/lib/tooltip/tooltop-content.mjs} +0 -0
  36. package/esm2020/lib/voice-recognition/voice-recognition.directive.mjs +73 -0
  37. package/{esm2015/lib/window/window.service.js → esm2020/lib/window/window.service.mjs} +0 -0
  38. package/esm2020/metadev-lux.mjs +5 -0
  39. package/esm2020/public-api.mjs +21 -0
  40. package/fesm2015/metadev-lux.mjs +4345 -0
  41. package/fesm2015/metadev-lux.mjs.map +1 -0
  42. package/fesm2020/metadev-lux.mjs +4343 -0
  43. package/fesm2020/metadev-lux.mjs.map +1 -0
  44. package/lib/autocomplete/autocomplete.component.d.ts +3 -0
  45. package/lib/autocomplete-list/autocomplete-list.component.d.ts +3 -0
  46. package/lib/breadcrumb/breadcrumb.component.d.ts +3 -0
  47. package/lib/checkbox/checkbox.component.d.ts +3 -0
  48. package/lib/datetime/datetime.component.d.ts +4 -0
  49. package/lib/filter/filter.component.d.ts +3 -0
  50. package/lib/geolocation/geolocation.component.d.ts +4 -0
  51. package/lib/geolocation/geolocation.service.d.ts +3 -0
  52. package/lib/geolocation/openlayer-loader.service.d.ts +3 -0
  53. package/lib/helperFns.d.ts +2 -0
  54. package/lib/input/input.component.d.ts +15 -0
  55. package/lib/input/regexp.service.d.ts +3 -0
  56. package/lib/lux.module.d.ts +26 -0
  57. package/lib/map/map.component.d.ts +3 -0
  58. package/lib/modal/modal-backdrop.d.ts +3 -0
  59. package/lib/modal/modal-config.d.ts +3 -0
  60. package/lib/modal/modal-stack.d.ts +3 -0
  61. package/lib/modal/modal-window.d.ts +3 -0
  62. package/lib/modal/modal.service.d.ts +3 -0
  63. package/lib/pagination/pagination.component.d.ts +3 -0
  64. package/lib/radiogroup/radiogroup.component.d.ts +3 -0
  65. package/lib/select/select.component.d.ts +3 -0
  66. package/lib/tooltip/tooltip.component.d.ts +3 -0
  67. package/lib/tooltip/tooltip.directive.d.ts +3 -0
  68. package/lib/tooltip/tooltip.service.d.ts +3 -0
  69. package/lib/voice-recognition/voice-recognition.directive.d.ts +3 -0
  70. package/metadev-lux.d.ts +1 -16
  71. package/package.json +22 -10
  72. package/public-api.d.ts +12 -7
  73. package/bundles/metadev-lux.umd.js +0 -4647
  74. package/bundles/metadev-lux.umd.js.map +0 -1
  75. package/esm2015/lib/autocomplete/autocomplete.component.js +0 -455
  76. package/esm2015/lib/autocomplete-list/autocomplete-list.component.js +0 -230
  77. package/esm2015/lib/breadcrumb/breadcrumb.component.js +0 -77
  78. package/esm2015/lib/checkbox/checkbox.component.js +0 -142
  79. package/esm2015/lib/datetime/datetime.component.js +0 -275
  80. package/esm2015/lib/filter/filter.component.js +0 -140
  81. package/esm2015/lib/geolocation/geolocation.component.js +0 -371
  82. package/esm2015/lib/geolocation/openlayer-loader.service.js +0 -63
  83. package/esm2015/lib/helperFns.js +0 -93
  84. package/esm2015/lib/input/input.component.js +0 -371
  85. package/esm2015/lib/lux.module.js +0 -83
  86. package/esm2015/lib/map/map.component.js +0 -261
  87. package/esm2015/lib/modal/modal-backdrop.js +0 -19
  88. package/esm2015/lib/modal/modal-config.js +0 -12
  89. package/esm2015/lib/modal/modal-stack.js +0 -182
  90. package/esm2015/lib/modal/modal-window.js +0 -92
  91. package/esm2015/lib/modal/modal.service.js +0 -28
  92. package/esm2015/lib/pagination/pagination.component.js +0 -134
  93. package/esm2015/lib/radiogroup/radiogroup.component.js +0 -114
  94. package/esm2015/lib/select/select.component.js +0 -131
  95. package/esm2015/lib/tooltip/tooltip.component.js +0 -19
  96. package/esm2015/lib/tooltip/tooltip.directive.js +0 -52
  97. package/esm2015/lib/voice-recognition/voice-recognition.directive.js +0 -76
  98. package/esm2015/metadev-lux.js +0 -21
  99. package/esm2015/public-api.js +0 -16
  100. package/fesm2015/metadev-lux.js +0 -4025
  101. package/fesm2015/metadev-lux.js.map +0 -1
  102. package/metadev-lux.metadata.json +0 -1
@@ -1,261 +0,0 @@
1
- import { Component, Input, Output, EventEmitter } from '@angular/core';
2
- import { BehaviorSubject } from 'rxjs';
3
- import { OpenLayerLoaderService } from '../geolocation/openlayer-loader.service';
4
- export class MapComponent {
5
- constructor(olLoader) {
6
- this.loaded$ = new BehaviorSubject(false);
7
- this.valueChange = new EventEmitter();
8
- olLoader.load().subscribe((_) => {
9
- // Initialize
10
- this._markerSource = new ol.source.Vector();
11
- this._markerStyle = new ol.style.Style({
12
- image: new ol.style.Icon({
13
- anchor: [0.5, 1],
14
- scale: 0.25,
15
- src: '/assets/img/marker.png'
16
- })
17
- });
18
- this.loaded$.next(true);
19
- });
20
- }
21
- set zoom(zoom) {
22
- if (!isNaN(zoom)) {
23
- this._zoom = zoom;
24
- if (this._map) {
25
- this._map.getView().setZoom(zoom);
26
- }
27
- }
28
- }
29
- get zoom() {
30
- return this._zoom;
31
- }
32
- set center(center) {
33
- if (center && center.coordinates && center.coordinates.length === 2) {
34
- this._center = center;
35
- if (this._map) {
36
- this._map.getView().setCenter(ol.proj.fromLonLat(center.coordinates));
37
- }
38
- }
39
- }
40
- get center() {
41
- return this._center;
42
- }
43
- set readonly(readonly) {
44
- if (!readonly) {
45
- if (this._map) {
46
- this._map.on('click', (args) => {
47
- // args.coordinate is in EPSG:3857 (meters), we transform it into EPSG:4326 (degrees)
48
- const coordinates = ol.proj.toLonLat(args.coordinate);
49
- // alternatively: const lonLat = ol.proj.transform(args.coordinate,'EPSG:3857','EPSG:4326');
50
- this.addMarkerAtCoordinates(coordinates);
51
- });
52
- this._map.on('pointermove', (event) => {
53
- const pixel = this._map.getEventPixel(event.originalEvent);
54
- const hit = this._map.hasFeatureAtPixel(pixel);
55
- this._map.getViewport().style.cursor = hit ? 'move' : 'grab';
56
- });
57
- }
58
- }
59
- else {
60
- if (this._map) {
61
- this._map.on('click', (args) => { });
62
- this._map.on('pointermove', (event) => { });
63
- this._map.getViewport().style.cursor = 'grab';
64
- }
65
- }
66
- this._readonly = readonly;
67
- // reset marker coordinates so marker interactions can be created or recreated accordingly
68
- // to the changes to readonly
69
- this.markerCoordinates = this.markerCoordinates;
70
- }
71
- get readonly() {
72
- return this._readonly;
73
- }
74
- set markerCoordinates(markerCoordinates) {
75
- if (markerCoordinates && markerCoordinates.length === 2) {
76
- this._markerCoordinates = markerCoordinates;
77
- if (this._map) {
78
- this.addMarkerAtCoordinates(markerCoordinates);
79
- }
80
- }
81
- else {
82
- this._markerCoordinates = undefined;
83
- if (this._map) {
84
- this.removeMarker();
85
- }
86
- }
87
- }
88
- get markerCoordinates() {
89
- return this._markerCoordinates;
90
- }
91
- set markerPoint(markerPoint) {
92
- if (!markerPoint ||
93
- !(markerPoint.coordinates && markerPoint.coordinates.length === 2)) {
94
- this.markerCoordinates = undefined;
95
- }
96
- else {
97
- this.markerCoordinates = [
98
- +markerPoint.coordinates[0],
99
- +markerPoint.coordinates[1]
100
- ];
101
- }
102
- this.valueChange.emit(markerPoint);
103
- }
104
- get markerPoint() {
105
- return {
106
- type: 'Point',
107
- coordinates: this.markerCoordinates
108
- };
109
- }
110
- ngOnInit() {
111
- this.mapId = this.mapId ? this.mapId : 'map' + MapComponent.idCounter++;
112
- }
113
- ngAfterViewInit() {
114
- this.loaded$.subscribe((loaded) => {
115
- if (loaded) {
116
- this.initMap();
117
- }
118
- });
119
- }
120
- initMap() {
121
- this._map = new ol.Map({
122
- target: this.mapId,
123
- controls: ol.control.defaults({ attribution: false }),
124
- layers: [
125
- new ol.layer.Tile({
126
- source: new ol.source.OSM()
127
- }),
128
- new ol.layer.Vector({
129
- source: this._markerSource,
130
- style: this._markerStyle
131
- })
132
- ],
133
- view: new ol.View({
134
- center: ol.proj.fromLonLat(this.center !== undefined ? this.center.coordinates : [0, 0]),
135
- zoom: this.zoom
136
- })
137
- });
138
- if (this.center === undefined || this.center === null) {
139
- // if the center is not set, we set its default value
140
- if ('geolocation' in navigator) {
141
- navigator.geolocation.getCurrentPosition((position) => {
142
- this.center = {
143
- type: 'Point',
144
- coordinates: [position.coords.longitude, position.coords.latitude]
145
- };
146
- }, (error) => {
147
- this.center = {
148
- type: 'Point',
149
- coordinates: [0, 0]
150
- };
151
- });
152
- }
153
- else {
154
- this.center = {
155
- type: 'Point',
156
- coordinates: [0, 0]
157
- };
158
- }
159
- }
160
- else {
161
- // the center needs the map to be properly set, so if it was set before the map was initialized,
162
- // we set the center again to perform necessary adjustements
163
- this.center = this.center;
164
- }
165
- if (this.zoom === undefined || this.zoom === null) {
166
- // if the zoom is not set, we set its default value
167
- this.zoom = 18;
168
- }
169
- else {
170
- // the zoom needs the map to be properly set, so if it was set before the map was initialized,
171
- // we set the zoom again to perform necessary adjustements
172
- this.zoom = this.zoom;
173
- }
174
- if (this.readonly === undefined || this.readonly === null) {
175
- // if readonly is not set, we set its default value
176
- this.readonly = false;
177
- }
178
- else {
179
- // readonly needs the map to be properly set, so if it was set before the map was initialized,
180
- // we set readonly again to perform necessary adjustements
181
- this.readonly = this.readonly;
182
- }
183
- if (this.markerCoordinates !== undefined &&
184
- this.markerCoordinates !== null) {
185
- // the marker coordinates need the map to be properly set, so if they were set before the map was initialized,
186
- // we set the marker coordinates again to perform necessary adjustements
187
- this.markerCoordinates = this.markerCoordinates;
188
- }
189
- }
190
- addMarkerAtCoordinates(coordinates) {
191
- if (coordinates && coordinates.length === 2) {
192
- if (this._marker !== undefined) {
193
- this.removeMarker();
194
- }
195
- this._marker = new ol.Feature({
196
- geometry: new ol.geom.Point(
197
- // [lon, lat] is in EPSG:4326 (degrees), we transform it into EPSG:3857 (meters)
198
- ol.proj.transform(coordinates, 'EPSG:4326', 'EPSG:3857'))
199
- });
200
- this._markerSource.addFeature(this._marker);
201
- this._markerCoordinates = this.getMarkerCoordinates();
202
- if (!this.readonly) {
203
- const dragInteraction = new ol.interaction.Modify({
204
- features: new ol.Collection([this._marker]),
205
- style: this._markerStyle,
206
- pixelTolerance: 50,
207
- hitDetection: true
208
- });
209
- this._markerInteraction = dragInteraction;
210
- this._map.addInteraction(dragInteraction);
211
- }
212
- this._marker.on('change', () => {
213
- this._markerCoordinates = this.getMarkerCoordinates();
214
- }, this._marker);
215
- }
216
- }
217
- removeMarker() {
218
- if (this._marker !== undefined) {
219
- this._markerSource.removeFeature(this._marker);
220
- this._marker = undefined;
221
- }
222
- if (this._markerInteraction !== undefined) {
223
- this._map.getInteractions().pop();
224
- this._markerInteraction = undefined;
225
- }
226
- }
227
- getMarkerCoordinates() {
228
- if (this._marker === undefined || this._marker == null) {
229
- return this._marker;
230
- }
231
- const coordinates = this._marker.getGeometry().getCoordinates();
232
- // coordinates is in EPSG:3857 (meters), we transform it into EPSG:4326 (degrees)
233
- return ol.proj.transform(coordinates, 'EPSG:3857', 'EPSG:4326');
234
- }
235
- onResize() {
236
- if (this._map) {
237
- this._map.updateSize();
238
- }
239
- }
240
- }
241
- MapComponent.idCounter = 0;
242
- MapComponent.decorators = [
243
- { type: Component, args: [{
244
- selector: 'lux-map',
245
- template: "<div [id]=\"mapId\" class=\"map\" (resized)=\"onResize()\"></div>\n",
246
- styles: [".map{min-height:100px;height:100%;min-width:160px;width:100%}\n"]
247
- },] }
248
- ];
249
- MapComponent.ctorParameters = () => [
250
- { type: OpenLayerLoaderService }
251
- ];
252
- MapComponent.propDecorators = {
253
- mapId: [{ type: Input }],
254
- zoom: [{ type: Input }],
255
- center: [{ type: Input }],
256
- readonly: [{ type: Input }],
257
- markerCoordinates: [{ type: Input }],
258
- markerPoint: [{ type: Input }],
259
- valueChange: [{ type: Output }]
260
- };
261
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2x1eC9zcmMvbGliL21hcC9tYXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBR2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQVlqRixNQUFNLE9BQU8sWUFBWTtJQW9IdkIsWUFBWSxRQUFnQztRQWpIcEMsWUFBTyxHQUE2QixJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQTRHN0QsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBWSxDQUFDO1FBTW5ELFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUM5QixhQUFhO1lBQ2IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUNyQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztvQkFDdkIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDaEIsS0FBSyxFQUFFLElBQUk7b0JBQ1gsR0FBRyxFQUFFLHdCQUF3QjtpQkFDOUIsQ0FBQzthQUNILENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQXZIRCxJQUNJLElBQUksQ0FBQyxJQUFZ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LGNBQWMsRUFBRSxDQUFDO1FBQ2hFLGlGQUFpRjtRQUNqRixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQzs7QUF0Uk0sc0JBQVMsR0FBRyxDQUFDLENBQUM7O1lBTnRCLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsU0FBUztnQkFDbkIsK0VBQW1DOzthQUVwQzs7O1lBWFEsc0JBQXNCOzs7b0JBbUI1QixLQUFLO21CQUdMLEtBQUs7cUJBY0wsS0FBSzt1QkFjTCxLQUFLO2dDQW1DTCxLQUFLOzBCQWlCTCxLQUFLOzBCQXFCTCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uSW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT3BlbkxheWVyTG9hZGVyU2VydmljZSB9IGZyb20gJy4uL2dlb2xvY2F0aW9uL29wZW5sYXllci1sb2FkZXIuc2VydmljZSc7XG5cbmltcG9ydCB7IEdlb1BvaW50IH0gZnJvbSAnLi9nZW9wb2ludCc7XG5cbi8vIEBkeW5hbWljXG5kZWNsYXJlIGNvbnN0IG9sOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2x1eC1tYXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWFwLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTWFwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgc3RhdGljIGlkQ291bnRlciA9IDA7XG5cbiAgcHJpdmF0ZSBsb2FkZWQkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICBwcml2YXRlIF9tYXA6IGFueTtcblxuICBASW5wdXQoKSBtYXBJZDtcblxuICBfem9vbTogbnVtYmVyO1xuICBASW5wdXQoKVxuICBzZXQgem9vbSh6b29tOiBudW1iZXIpIHtcbiAgICBpZiAoIWlzTmFOKHpvb20pKSB7XG4gICAgICB0aGlzLl96b29tID0gem9vbTtcbiAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgdGhpcy5fbWFwLmdldFZpZXcoKS5zZXRab29tKHpvb20pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXQgem9vbSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl96b29tO1xuICB9XG5cbiAgX2NlbnRlcjogR2VvUG9pbnQ7XG4gIEBJbnB1dCgpXG4gIHNldCBjZW50ZXIoY2VudGVyOiBHZW9Qb2ludCkge1xuICAgIGlmIChjZW50ZXIgJiYgY2VudGVyLmNvb3JkaW5hdGVzICYmIGNlbnRlci5jb29yZGluYXRlcy5sZW5ndGggPT09IDIpIHtcbiAgICAgIHRoaXMuX2NlbnRlciA9IGNlbnRlcjtcbiAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgdGhpcy5fbWFwLmdldFZpZXcoKS5zZXRDZW50ZXIob2wucHJvai5mcm9tTG9uTGF0KGNlbnRlci5jb29yZGluYXRlcykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBnZXQgY2VudGVyKCk6IEdlb1BvaW50IHtcbiAgICByZXR1cm4gdGhpcy5fY2VudGVyO1xuICB9XG5cbiAgX3JlYWRvbmx5OiBib29sZWFuO1xuICBASW5wdXQoKVxuICBzZXQgcmVhZG9ubHkocmVhZG9ubHk6IGJvb2xlYW4pIHtcbiAgICBpZiAoIXJlYWRvbmx5KSB7XG4gICAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICAgIHRoaXMuX21hcC5vbignY2xpY2snLCAoYXJnczogYW55KSA9PiB7XG4gICAgICAgICAgLy8gYXJncy5jb29yZGluYXRlIGlzIGluIEVQU0c6Mzg1NyAobWV0ZXJzKSwgd2UgdHJhbnNmb3JtIGl0IGludG8gRVBTRzo0MzI2IChkZWdyZWVzKVxuICAgICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gb2wucHJvai50b0xvbkxhdChhcmdzLmNvb3JkaW5hdGUpO1xuICAgICAgICAgIC8vIGFsdGVybmF0aXZlbHk6IGNvbnN0IGxvbkxhdCA9IG9sLnByb2oudHJhbnNmb3JtKGFyZ3MuY29vcmRpbmF0ZSwnRVBTRzozODU3JywnRVBTRzo0MzI2Jyk7XG4gICAgICAgICAgdGhpcy5hZGRNYXJrZXJBdENvb3JkaW5hdGVzKGNvb3JkaW5hdGVzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX21hcC5vbigncG9pbnRlcm1vdmUnLCAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBpeGVsID0gdGhpcy5fbWFwLmdldEV2ZW50UGl4ZWwoZXZlbnQub3JpZ2luYWxFdmVudCk7XG4gICAgICAgICAgY29uc3QgaGl0ID0gdGhpcy5fbWFwLmhhc0ZlYXR1cmVBdFBpeGVsKHBpeGVsKTtcbiAgICAgICAgICB0aGlzLl9tYXAuZ2V0Vmlld3BvcnQoKS5zdHlsZS5jdXJzb3IgPSBoaXQgPyAnbW92ZScgOiAnZ3JhYic7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICAgIHRoaXMuX21hcC5vbignY2xpY2snLCAoYXJnczogYW55KSA9PiB7fSk7XG4gICAgICAgIHRoaXMuX21hcC5vbigncG9pbnRlcm1vdmUnLCAoZXZlbnQ6IGFueSkgPT4ge30pO1xuICAgICAgICB0aGlzLl9tYXAuZ2V0Vmlld3BvcnQoKS5zdHlsZS5jdXJzb3IgPSAnZ3JhYic7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3JlYWRvbmx5ID0gcmVhZG9ubHk7XG4gICAgLy8gcmVzZXQgbWFya2VyIGNvb3JkaW5hdGVzIHNvIG1hcmtlciBpbnRlcmFjdGlvbnMgY2FuIGJlIGNyZWF0ZWQgb3IgcmVjcmVhdGVkIGFjY29yZGluZ2x5XG4gICAgLy8gdG8gdGhlIGNoYW5nZXMgdG8gcmVhZG9ubHlcbiAgICB0aGlzLm1hcmtlckNvb3JkaW5hdGVzID0gdGhpcy5tYXJrZXJDb29yZGluYXRlcztcbiAgfVxuICBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRvbmx5O1xuICB9XG5cbiAgcHJpdmF0ZSBfbWFya2VyOiBhbnk7XG4gIHByaXZhdGUgX21hcmtlckludGVyYWN0aW9uOiBhbnk7XG4gIHByaXZhdGUgX21hcmtlckNvb3JkaW5hdGVzOiBudW1iZXJbXTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBzZXQgbWFya2VyQ29vcmRpbmF0ZXMobWFya2VyQ29vcmRpbmF0ZXM6IG51bWJlcltdKSB7XG4gICAgaWYgKG1hcmtlckNvb3JkaW5hdGVzICYmIG1hcmtlckNvb3JkaW5hdGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgdGhpcy5fbWFya2VyQ29vcmRpbmF0ZXMgPSBtYXJrZXJDb29yZGluYXRlcztcbiAgICAgIGlmICh0aGlzLl9tYXApIHtcbiAgICAgICAgdGhpcy5hZGRNYXJrZXJBdENvb3JkaW5hdGVzKG1hcmtlckNvb3JkaW5hdGVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbWFya2VyQ29vcmRpbmF0ZXMgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAodGhpcy5fbWFwKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlTWFya2VyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0IG1hcmtlckNvb3JkaW5hdGVzKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fbWFya2VyQ29vcmRpbmF0ZXM7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IG1hcmtlclBvaW50KG1hcmtlclBvaW50OiBHZW9Qb2ludCkge1xuICAgIGlmIChcbiAgICAgICFtYXJrZXJQb2ludCB8fFxuICAgICAgIShtYXJrZXJQb2ludC5jb29yZGluYXRlcyAmJiBtYXJrZXJQb2ludC5jb29yZGluYXRlcy5sZW5ndGggPT09IDIpXG4gICAgKSB7XG4gICAgICB0aGlzLm1hcmtlckNvb3JkaW5hdGVzID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hcmtlckNvb3JkaW5hdGVzID0gW1xuICAgICAgICArbWFya2VyUG9pbnQuY29vcmRpbmF0ZXNbMF0sXG4gICAgICAgICttYXJrZXJQb2ludC5jb29yZGluYXRlc1sxXVxuICAgICAgXTtcbiAgICB9XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KG1hcmtlclBvaW50KTtcbiAgfVxuICBnZXQgbWFya2VyUG9pbnQoKTogR2VvUG9pbnQge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgY29vcmRpbmF0ZXM6IHRoaXMubWFya2VyQ29vcmRpbmF0ZXNcbiAgICB9O1xuICB9XG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8R2VvUG9pbnQ+KCk7XG5cbiAgcHJpdmF0ZSBfbWFya2VyU291cmNlOiBhbnk7XG4gIHByaXZhdGUgX21hcmtlclN0eWxlOiBhbnk7XG5cbiAgY29uc3RydWN0b3Iob2xMb2FkZXI6IE9wZW5MYXllckxvYWRlclNlcnZpY2UpIHtcbiAgICBvbExvYWRlci5sb2FkKCkuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAvLyBJbml0aWFsaXplXG4gICAgICB0aGlzLl9tYXJrZXJTb3VyY2UgPSBuZXcgb2wuc291cmNlLlZlY3RvcigpO1xuICAgICAgdGhpcy5fbWFya2VyU3R5bGUgPSBuZXcgb2wuc3R5bGUuU3R5bGUoe1xuICAgICAgICBpbWFnZTogbmV3IG9sLnN0eWxlLkljb24oe1xuICAgICAgICAgIGFuY2hvcjogWzAuNSwgMV0sXG4gICAgICAgICAgc2NhbGU6IDAuMjUsXG4gICAgICAgICAgc3JjOiAnL2Fzc2V0cy9pbWcvbWFya2VyLnBuZydcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgdGhpcy5sb2FkZWQkLm5leHQodHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm1hcElkID0gdGhpcy5tYXBJZCA/IHRoaXMubWFwSWQgOiAnbWFwJyArIE1hcENvbXBvbmVudC5pZENvdW50ZXIrKztcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRlZCQuc3Vic2NyaWJlKChsb2FkZWQpID0+IHtcbiAgICAgIGlmIChsb2FkZWQpIHtcbiAgICAgICAgdGhpcy5pbml0TWFwKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBpbml0TWFwKCk6IHZvaWQge1xuICAgIHRoaXMuX21hcCA9IG5ldyBvbC5NYXAoe1xuICAgICAgdGFyZ2V0OiB0aGlzLm1hcElkLFxuICAgICAgY29udHJvbHM6IG9sLmNvbnRyb2wuZGVmYXVsdHMoeyBhdHRyaWJ1dGlvbjogZmFsc2UgfSksXG4gICAgICBsYXllcnM6IFtcbiAgICAgICAgbmV3IG9sLmxheWVyLlRpbGUoe1xuICAgICAgICAgIHNvdXJjZTogbmV3IG9sLnNvdXJjZS5PU00oKVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IG9sLmxheWVyLlZlY3Rvcih7XG4gICAgICAgICAgc291cmNlOiB0aGlzLl9tYXJrZXJTb3VyY2UsXG4gICAgICAgICAgc3R5bGU6IHRoaXMuX21hcmtlclN0eWxlXG4gICAgICAgIH0pXG4gICAgICBdLFxuICAgICAgdmlldzogbmV3IG9sLlZpZXcoe1xuICAgICAgICBjZW50ZXI6IG9sLnByb2ouZnJvbUxvbkxhdChcbiAgICAgICAgICB0aGlzLmNlbnRlciAhPT0gdW5kZWZpbmVkID8gdGhpcy5jZW50ZXIuY29vcmRpbmF0ZXMgOiBbMCwgMF1cbiAgICAgICAgKSxcbiAgICAgICAgem9vbTogdGhpcy56b29tXG4gICAgICB9KVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuY2VudGVyID09PSB1bmRlZmluZWQgfHwgdGhpcy5jZW50ZXIgPT09IG51bGwpIHtcbiAgICAgIC8vIGlmIHRoZSBjZW50ZXIgaXMgbm90IHNldCwgd2Ugc2V0IGl0cyBkZWZhdWx0IHZhbHVlXG4gICAgICBpZiAoJ2dlb2xvY2F0aW9uJyBpbiBuYXZpZ2F0b3IpIHtcbiAgICAgICAgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmdldEN1cnJlbnRQb3NpdGlvbihcbiAgICAgICAgICAocG9zaXRpb24pID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2VudGVyID0ge1xuICAgICAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgICAgICBjb29yZGluYXRlczogW3Bvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUsIHBvc2l0aW9uLmNvb3Jkcy5sYXRpdHVkZV1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2VudGVyID0ge1xuICAgICAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgICAgICBjb29yZGluYXRlczogWzAsIDBdXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2VudGVyID0ge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFswLCAwXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGUgY2VudGVyIG5lZWRzIHRoZSBtYXAgdG8gYmUgcHJvcGVybHkgc2V0LCBzbyBpZiBpdCB3YXMgc2V0IGJlZm9yZSB0aGUgbWFwIHdhcyBpbml0aWFsaXplZCxcbiAgICAgIC8vIHdlIHNldCB0aGUgY2VudGVyIGFnYWluIHRvIHBlcmZvcm0gbmVjZXNzYXJ5IGFkanVzdGVtZW50c1xuICAgICAgdGhpcy5jZW50ZXIgPSB0aGlzLmNlbnRlcjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy56b29tID09PSB1bmRlZmluZWQgfHwgdGhpcy56b29tID09PSBudWxsKSB7XG4gICAgICAvLyBpZiB0aGUgem9vbSBpcyBub3Qgc2V0LCB3ZSBzZXQgaXRzIGRlZmF1bHQgdmFsdWVcbiAgICAgIHRoaXMuem9vbSA9IDE4O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGUgem9vbSBuZWVkcyB0aGUgbWFwIHRvIGJlIHByb3Blcmx5IHNldCwgc28gaWYgaXQgd2FzIHNldCBiZWZvcmUgdGhlIG1hcCB3YXMgaW5pdGlhbGl6ZWQsXG4gICAgICAvLyB3ZSBzZXQgdGhlIHpvb20gYWdhaW4gdG8gcGVyZm9ybSBuZWNlc3NhcnkgYWRqdXN0ZW1lbnRzXG4gICAgICB0aGlzLnpvb20gPSB0aGlzLnpvb207XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVhZG9ubHkgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnJlYWRvbmx5ID09PSBudWxsKSB7XG4gICAgICAvLyBpZiByZWFkb25seSBpcyBub3Qgc2V0LCB3ZSBzZXQgaXRzIGRlZmF1bHQgdmFsdWVcbiAgICAgIHRoaXMucmVhZG9ubHkgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmVhZG9ubHkgbmVlZHMgdGhlIG1hcCB0byBiZSBwcm9wZXJseSBzZXQsIHNvIGlmIGl0IHdhcyBzZXQgYmVmb3JlIHRoZSBtYXAgd2FzIGluaXRpYWxpemVkLFxuICAgICAgLy8gd2Ugc2V0IHJlYWRvbmx5IGFnYWluIHRvIHBlcmZvcm0gbmVjZXNzYXJ5IGFkanVzdGVtZW50c1xuICAgICAgdGhpcy5yZWFkb25seSA9IHRoaXMucmVhZG9ubHk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5tYXJrZXJDb29yZGluYXRlcyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGlzLm1hcmtlckNvb3JkaW5hdGVzICE9PSBudWxsXG4gICAgKSB7XG4gICAgICAvLyB0aGUgbWFya2VyIGNvb3JkaW5hdGVzIG5lZWQgdGhlIG1hcCB0byBiZSBwcm9wZXJseSBzZXQsIHNvIGlmIHRoZXkgd2VyZSBzZXQgYmVmb3JlIHRoZSBtYXAgd2FzIGluaXRpYWxpemVkLFxuICAgICAgLy8gd2Ugc2V0IHRoZSBtYXJrZXIgY29vcmRpbmF0ZXMgYWdhaW4gdG8gcGVyZm9ybSBuZWNlc3NhcnkgYWRqdXN0ZW1lbnRzXG4gICAgICB0aGlzLm1hcmtlckNvb3JkaW5hdGVzID0gdGhpcy5tYXJrZXJDb29yZGluYXRlcztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZE1hcmtlckF0Q29vcmRpbmF0ZXMoY29vcmRpbmF0ZXM6IG51bWJlcltdKTogdm9pZCB7XG4gICAgaWYgKGNvb3JkaW5hdGVzICYmIGNvb3JkaW5hdGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgaWYgKHRoaXMuX21hcmtlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlTWFya2VyKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9tYXJrZXIgPSBuZXcgb2wuRmVhdHVyZSh7XG4gICAgICAgIGdlb21ldHJ5OiBuZXcgb2wuZ2VvbS5Qb2ludChcbiAgICAgICAgICAvLyBbbG9uLCBsYXRdIGlzIGluIEVQU0c6NDMyNiAoZGVncmVlcyksIHdlIHRyYW5zZm9ybSBpdCBpbnRvIEVQU0c6Mzg1NyAobWV0ZXJzKVxuICAgICAgICAgIG9sLnByb2oudHJhbnNmb3JtKGNvb3JkaW5hdGVzLCAnRVBTRzo0MzI2JywgJ0VQU0c6Mzg1NycpXG4gICAgICAgIClcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fbWFya2VyU291cmNlLmFkZEZlYXR1cmUodGhpcy5fbWFya2VyKTtcbiAgICAgIHRoaXMuX21hcmtlckNvb3JkaW5hdGVzID0gdGhpcy5nZXRNYXJrZXJDb29yZGluYXRlcygpO1xuXG4gICAgICBpZiAoIXRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgY29uc3QgZHJhZ0ludGVyYWN0aW9uID0gbmV3IG9sLmludGVyYWN0aW9uLk1vZGlmeSh7XG4gICAgICAgICAgZmVhdHVyZXM6IG5ldyBvbC5Db2xsZWN0aW9uKFt0aGlzLl9tYXJrZXJdKSxcbiAgICAgICAgICBzdHlsZTogdGhpcy5fbWFya2VyU3R5bGUsXG4gICAgICAgICAgcGl4ZWxUb2xlcmFuY2U6IDUwLFxuICAgICAgICAgIGhpdERldGVjdGlvbjogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fbWFya2VySW50ZXJhY3Rpb24gPSBkcmFnSW50ZXJhY3Rpb247XG4gICAgICAgIHRoaXMuX21hcC5hZGRJbnRlcmFjdGlvbihkcmFnSW50ZXJhY3Rpb24pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9tYXJrZXIub24oXG4gICAgICAgICdjaGFuZ2UnLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fbWFya2VyQ29vcmRpbmF0ZXMgPSB0aGlzLmdldE1hcmtlckNvb3JkaW5hdGVzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMuX21hcmtlclxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZU1hcmtlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbWFya2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX21hcmtlclNvdXJjZS5yZW1vdmVGZWF0dXJlKHRoaXMuX21hcmtlcik7XG4gICAgICB0aGlzLl9tYXJrZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9tYXJrZXJJbnRlcmFjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9tYXAuZ2V0SW50ZXJhY3Rpb25zKCkucG9wKCk7XG4gICAgICB0aGlzLl9tYXJrZXJJbnRlcmFjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldE1hcmtlckNvb3JkaW5hdGVzKCk6IG51bWJlcltdIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuX21hcmtlciA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuX21hcmtlciA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbWFya2VyO1xuICAgIH1cbiAgICBjb25zdCBjb29yZGluYXRlcyA9IHRoaXMuX21hcmtlci5nZXRHZW9tZXRyeSgpLmdldENvb3JkaW5hdGVzKCk7XG4gICAgLy8gY29vcmRpbmF0ZXMgaXMgaW4gRVBTRzozODU3IChtZXRlcnMpLCB3ZSB0cmFuc2Zvcm0gaXQgaW50byBFUFNHOjQzMjYgKGRlZ3JlZXMpXG4gICAgcmV0dXJuIG9sLnByb2oudHJhbnNmb3JtKGNvb3JkaW5hdGVzLCAnRVBTRzozODU3JywgJ0VQU0c6NDMyNicpO1xuICB9XG5cbiAgb25SZXNpemUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21hcCkge1xuICAgICAgdGhpcy5fbWFwLnVwZGF0ZVNpemUoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,19 +0,0 @@
1
- import { Component, Input, HostBinding } from '@angular/core';
2
- export class LuxModalBackdropComponent {
3
- constructor() {
4
- this.class = 'modal-backdrop fade show';
5
- this.style = 'z-index: 1050';
6
- }
7
- }
8
- LuxModalBackdropComponent.decorators = [
9
- { type: Component, args: [{
10
- selector: 'lux-modal-backdrop',
11
- template: ''
12
- },] }
13
- ];
14
- LuxModalBackdropComponent.propDecorators = {
15
- backdropClass: [{ type: Input }],
16
- class: [{ type: HostBinding, args: ['class',] }],
17
- style: [{ type: HostBinding, args: ['style',] }]
18
- };
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtYmFja2Ryb3AuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sdXgvc3JjL2xpYi9tb2RhbC9tb2RhbC1iYWNrZHJvcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFNNUQsTUFBTSxPQUFPLHlCQUF5QjtJQUp0QztRQU93QixVQUFLLEdBQUcsMEJBQTBCLENBQUM7UUFDbkMsVUFBSyxHQUFHLGVBQWUsQ0FBQztJQUNoRCxDQUFDOzs7WUFUQSxTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtnQkFDOUIsUUFBUSxFQUFFLEVBQUU7YUFDYjs7OzRCQUVFLEtBQUs7b0JBRUwsV0FBVyxTQUFDLE9BQU87b0JBQ25CLFdBQVcsU0FBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBIb3N0QmluZGluZ30gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2x1eC1tb2RhbC1iYWNrZHJvcCcsXG4gIHRlbXBsYXRlOiAnJ1xufSlcbmV4cG9ydCBjbGFzcyBMdXhNb2RhbEJhY2tkcm9wQ29tcG9uZW50IHtcbiAgQElucHV0KCkgYmFja2Ryb3BDbGFzczogc3RyaW5nO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBjbGFzcyA9ICdtb2RhbC1iYWNrZHJvcCBmYWRlIHNob3cnO1xuICBASG9zdEJpbmRpbmcoJ3N0eWxlJykgc3R5bGUgPSAnei1pbmRleDogMTA1MCc7XG59XG4iXX0=
@@ -1,12 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class LuxModalConfig {
4
- constructor() {
5
- this.backdrop = true;
6
- }
7
- }
8
- LuxModalConfig.ɵprov = i0.ɵɵdefineInjectable({ factory: function LuxModalConfig_Factory() { return new LuxModalConfig(); }, token: LuxModalConfig, providedIn: "root" });
9
- LuxModalConfig.decorators = [
10
- { type: Injectable, args: [{ providedIn: 'root' },] }
11
- ];
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvbW9kYWwvbW9kYWwtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBWTNDLE1BQU0sT0FBTyxjQUFjO0lBRDNCO1FBRUUsYUFBUSxHQUFHLElBQUksQ0FBQztLQUNqQjs7OztZQUhBLFVBQVUsU0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTHV4TW9kYWxPcHRpb25zIHtcbiAgYXJpYURlc2NyaWJlZEJ5Pzogc3RyaW5nO1xuICBhcmlhTGFiZWxsZWRCeT86IHN0cmluZztcbiAgYmFja2Ryb3A/OiBib29sZWFuO1xuICBrZXlib2FyZD86IGJvb2xlYW47XG4gIHdpbmRvd0NsYXNzPzogc3RyaW5nO1xuICBiYWNrZHJvcENsYXNzPzogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEx1eE1vZGFsQ29uZmlnIGltcGxlbWVudHMgTHV4TW9kYWxPcHRpb25zIHtcbiAgYmFja2Ryb3AgPSB0cnVlO1xufVxuIl19
@@ -1,182 +0,0 @@
1
- import { Injectable, ApplicationRef, TemplateRef, Inject, Injector, RendererFactory2 } from '@angular/core';
2
- import { DOCUMENT } from '@angular/common';
3
- import { ActiveModal, ModalRef } from './modal-ref';
4
- import { ContentRef, focusTrap, isDefined } from './util';
5
- import { LuxModalWindowComponent } from './modal-window';
6
- import { Subject } from 'rxjs';
7
- import { LuxModalBackdropComponent } from './modal-backdrop';
8
- import { LuxModalConfig } from './modal-config';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@angular/common";
11
- import * as i2 from "./modal-config";
12
- export class ModalStack {
13
- constructor(_applicationRef, _document, _injector, _rendererFactory, modalConfig) {
14
- this._applicationRef = _applicationRef;
15
- this._document = _document;
16
- this._injector = _injector;
17
- this._rendererFactory = _rendererFactory;
18
- this.modalConfig = modalConfig;
19
- this._activeWindowCmptHasChanged = new Subject();
20
- this._modalRefs = [];
21
- this._windowCmpts = [];
22
- this._ariaHiddenValues = new Map();
23
- this._backdropAttributes = ['backdropClass'];
24
- this._windowAttributes = [
25
- 'ariaLabelledBy',
26
- 'backdrop',
27
- 'centered',
28
- 'keyboard',
29
- 'scrollable',
30
- 'size',
31
- 'windowClass'
32
- ];
33
- this._activeWindowCmptHasChanged.subscribe(() => {
34
- if (this._windowCmpts.length) {
35
- const activeWindowCmpt = this._windowCmpts[this._windowCmpts.length - 1];
36
- focusTrap(activeWindowCmpt.location.nativeElement, this._activeWindowCmptHasChanged);
37
- this._revertAriaHidden();
38
- this._setAriaHidden(activeWindowCmpt.location.nativeElement);
39
- }
40
- });
41
- }
42
- open(moduleCFR, content, options) {
43
- const config = Object.assign({}, this.modalConfig, options);
44
- const containerEl = this._document.body;
45
- const renderer = this._rendererFactory.createRenderer(null, null);
46
- const removeBodyClass = () => {
47
- if (!this._modalRefs.length) {
48
- renderer.removeClass(this._document.body, 'modal-open');
49
- this._revertAriaHidden();
50
- }
51
- };
52
- const activeModal = new ActiveModal();
53
- const contentRef = this.getContentRef(moduleCFR, content, activeModal);
54
- const backdropCmptRef = config.backdrop ? this._attachBackdrop(moduleCFR, containerEl) : null;
55
- const windowCmptRef = this._attachWindowComponent(moduleCFR, containerEl, contentRef);
56
- const modalRef = new ModalRef(windowCmptRef, contentRef, backdropCmptRef);
57
- this._registerModalRef(modalRef);
58
- this._registerWindowCmpt(windowCmptRef);
59
- modalRef.result.then(removeBodyClass, removeBodyClass);
60
- activeModal.close = (result) => {
61
- modalRef.close(result);
62
- };
63
- activeModal.dismiss = (reason) => {
64
- modalRef.dismiss(reason);
65
- };
66
- this._applyWindowOptions(windowCmptRef.instance, config);
67
- if (this._modalRefs.length === 1) {
68
- renderer.addClass(this._document.body, 'modal-open');
69
- }
70
- if (backdropCmptRef && backdropCmptRef.instance) {
71
- this._applyBackgroundOptions(backdropCmptRef.instance, config);
72
- backdropCmptRef.changeDetectorRef.detectChanges();
73
- }
74
- windowCmptRef.changeDetectorRef.detectChanges();
75
- return modalRef;
76
- }
77
- _applyWindowOptions(windowInstance, config) {
78
- this._windowAttributes.forEach((optionName) => {
79
- if (isDefined(config[optionName])) {
80
- windowInstance[optionName] = config[optionName];
81
- }
82
- });
83
- }
84
- _applyBackgroundOptions(backgroudInstance, config) {
85
- this._backdropAttributes.forEach((optionName) => {
86
- if (isDefined(config[optionName])) {
87
- backgroudInstance[optionName] = config[optionName];
88
- }
89
- });
90
- }
91
- _revertAriaHidden() {
92
- this._ariaHiddenValues.forEach((value, element) => {
93
- if (value) {
94
- element.setAttribute('aria-hidden', value);
95
- }
96
- else {
97
- element.removeAttribute('aria-hidden');
98
- }
99
- });
100
- this._ariaHiddenValues.clear();
101
- }
102
- getContentRef(moduleCFR, content, activeModal) {
103
- if (content instanceof TemplateRef) {
104
- return this.createFromTemplateRef(content, activeModal);
105
- }
106
- }
107
- createFromTemplateRef(content, activeModal) {
108
- const context = {
109
- $implicit: activeModal,
110
- // eslint-disable-next-line prefer-arrow/prefer-arrow-functions
111
- close(result) {
112
- activeModal.close(result);
113
- },
114
- // eslint-disable-next-line prefer-arrow/prefer-arrow-functions
115
- dismiss(reason) {
116
- activeModal.dismiss(reason);
117
- }
118
- };
119
- const viewRef = content.createEmbeddedView(context);
120
- this._applicationRef.attachView(viewRef);
121
- return new ContentRef([viewRef.rootNodes], viewRef);
122
- }
123
- _attachBackdrop(moduleCFR, containerEl) {
124
- const backdropFactory = moduleCFR.resolveComponentFactory(LuxModalBackdropComponent);
125
- const backdropCmptRef = backdropFactory.create(this._injector);
126
- this._applicationRef.attachView(backdropCmptRef.hostView);
127
- containerEl.appendChild(backdropCmptRef.location.nativeElement);
128
- return backdropCmptRef;
129
- }
130
- _attachWindowComponent(moduleCFR, containerEl, contentRef) {
131
- const windowFactory = moduleCFR.resolveComponentFactory(LuxModalWindowComponent);
132
- const windowCmptRef = windowFactory.create(this._injector, contentRef.nodes);
133
- this._applicationRef.attachView(windowCmptRef.hostView);
134
- containerEl.appendChild(windowCmptRef.location.nativeElement);
135
- return windowCmptRef;
136
- }
137
- _registerModalRef(modalRef) {
138
- const unregisterModalRef = () => {
139
- const index = this._modalRefs.indexOf(modalRef);
140
- if (index > -1) {
141
- this._modalRefs.splice(index, 1);
142
- }
143
- };
144
- this._modalRefs.push(modalRef);
145
- modalRef.result.then(unregisterModalRef, unregisterModalRef);
146
- }
147
- _registerWindowCmpt(windowCmpt) {
148
- this._windowCmpts.push(windowCmpt);
149
- this._activeWindowCmptHasChanged.next();
150
- windowCmpt.onDestroy(() => {
151
- const index = this._windowCmpts.indexOf(windowCmpt);
152
- if (index > -1) {
153
- this._windowCmpts.splice(index, 1);
154
- this._activeWindowCmptHasChanged.next();
155
- }
156
- });
157
- }
158
- _setAriaHidden(element) {
159
- const parent = element.parentElement;
160
- if (parent && element !== this._document.body) {
161
- Array.from(parent.children).forEach((sibling) => {
162
- if (sibling !== element && sibling.nodeName !== 'SCRIPT') {
163
- this._ariaHiddenValues.set(sibling, sibling.getAttribute('aria-hidden'));
164
- sibling.setAttribute('aria-hidden', 'true');
165
- }
166
- });
167
- this._setAriaHidden(parent);
168
- }
169
- }
170
- }
171
- ModalStack.ɵprov = i0.ɵɵdefineInjectable({ factory: function ModalStack_Factory() { return new ModalStack(i0.ɵɵinject(i0.ApplicationRef), i0.ɵɵinject(i1.DOCUMENT), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i0.RendererFactory2), i0.ɵɵinject(i2.LuxModalConfig)); }, token: ModalStack, providedIn: "root" });
172
- ModalStack.decorators = [
173
- { type: Injectable, args: [{ providedIn: 'root' },] }
174
- ];
175
- ModalStack.ctorParameters = () => [
176
- { type: ApplicationRef },
177
- { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
178
- { type: Injector },
179
- { type: RendererFactory2 },
180
- { type: LuxModalConfig }
181
- ];
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sdXgvc3JjL2xpYi9tb2RhbC9tb2RhbC1zdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLGNBQWMsRUFFZCxXQUFXLEVBRVgsTUFBTSxFQUNOLFFBQVEsRUFDUixnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdELE9BQU8sRUFBbUIsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFHakUsTUFBTSxPQUFPLFVBQVU7SUFnQnJCLFlBQ1UsZUFBK0IsRUFDYixTQUFjLEVBQ2hDLFNBQW1CLEVBQ25CLGdCQUFrQyxFQUNsQyxXQUEyQjtRQUozQixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDYixjQUFTLEdBQVQsU0FBUyxDQUFLO1FBQ2hDLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFwQjdCLGdDQUEyQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUMsZUFBVSxHQUFlLEVBQUUsQ0FBQztRQUM1QixpQkFBWSxHQUE0QyxFQUFFLENBQUM7UUFDM0Qsc0JB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LElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDN0I7SUFDSCxDQUFDOzs7O1lBM05GLFVBQVUsU0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OztZQWpCaEMsY0FBYzs0Q0FvQ1gsTUFBTSxTQUFDLFFBQVE7WUEvQmxCLFFBQVE7WUFDUixnQkFBZ0I7WUFTUSxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSW5qZWN0YWJsZSxcbiAgQXBwbGljYXRpb25SZWYsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgVGVtcGxhdGVSZWYsXG4gIENvbXBvbmVudFJlZixcbiAgSW5qZWN0LFxuICBJbmplY3RvcixcbiAgUmVuZGVyZXJGYWN0b3J5MlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgQWN0aXZlTW9kYWwsIE1vZGFsUmVmIH0gZnJvbSAnLi9tb2RhbC1yZWYnO1xuaW1wb3J0IHsgQ29udGVudFJlZiwgZm9jdXNUcmFwLCBpc0RlZmluZWQgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgTHV4TW9kYWxXaW5kb3dDb21wb25lbnQgfSBmcm9tICcuL21vZGFsLXdpbmRvdyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMdXhNb2RhbEJhY2tkcm9wQ29tcG9uZW50IH0gZnJvbSAnLi9tb2RhbC1iYWNrZHJvcCc7XG5pbXBvcnQgeyBMdXhNb2RhbE9wdGlvbnMsIEx1eE1vZGFsQ29uZmlnIH0gZnJvbSAnLi9tb2RhbC1jb25maWcnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE1vZGFsU3RhY2sge1xuICBwcml2YXRlIF9hY3RpdmVXaW5kb3dDbXB0SGFzQ2hhbmdlZCA9IG5ldyBTdWJqZWN0KCk7XG4gIHByaXZhdGUgX21vZGFsUmVmczogTW9kYWxSZWZbXSA9IFtdO1xuICBwcml2YXRlIF93aW5kb3dDbXB0czogQ29tcG9uZW50UmVmPEx1eE1vZGFsV2luZG93Q29tcG9uZW50PltdID0gW107XG4gIHByaXZhdGUgX2FyaWFIaWRkZW5WYWx1ZXM6IE1hcDxFbGVtZW50LCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIF9iYWNrZHJvcEF0dHJpYnV0ZXMgPSBbJ2JhY2tkcm9wQ2xhc3MnXTtcbiAgcHJpdmF0ZSBfd2luZG93QXR0cmlidXRlcyA9IFtcbiAgICAnYXJpYUxhYmVsbGVkQnknLFxuICAgICdiYWNrZHJvcCcsXG4gICAgJ2NlbnRlcmVkJyxcbiAgICAna2V5Ym9hcmQnLFxuICAgICdzY3JvbGxhYmxlJyxcbiAgICAnc2l6ZScsXG4gICAgJ3dpbmRvd0NsYXNzJ1xuICBdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2FwcGxpY2F0aW9uUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55LFxuICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIF9yZW5kZXJlckZhY3Rvcnk6IFJlbmRlcmVyRmFjdG9yeTIsXG4gICAgcHJpdmF0ZSBtb2RhbENvbmZpZzogTHV4TW9kYWxDb25maWdcbiAgKSB7XG4gICAgdGhpcy5fYWN0aXZlV2luZG93Q21wdEhhc0NoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl93aW5kb3dDbXB0cy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYWN0aXZlV2luZG93Q21wdCA9XG4gICAgICAgICAgdGhpcy5fd2luZG93Q21wdHNbdGhpcy5fd2luZG93Q21wdHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGZvY3VzVHJhcChcbiAgICAgICAgICBhY3RpdmVXaW5kb3dDbXB0LmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgdGhpcy5fYWN0aXZlV2luZG93Q21wdEhhc0NoYW5nZWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fcmV2ZXJ0QXJpYUhpZGRlbigpO1xuICAgICAgICB0aGlzLl9zZXRBcmlhSGlkZGVuKGFjdGl2ZVdpbmRvd0NtcHQubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvcGVuKFxuICAgIG1vZHVsZUNGUjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIGNvbnRlbnQ6IGFueSxcbiAgICBvcHRpb25zOiBMdXhNb2RhbE9wdGlvbnNcbiAgKTogTW9kYWxSZWYge1xuICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMubW9kYWxDb25maWcsIG9wdGlvbnMpO1xuICAgIGNvbnN0IGNvbnRhaW5lckVsID0gdGhpcy5fZG9jdW1lbnQuYm9keTtcbiAgICBjb25zdCByZW5kZXJlciA9IHRoaXMuX3JlbmRlcmVyRmFjdG9yeS5jcmVhdGVSZW5kZXJlcihudWxsLCBudWxsKTtcbiAgICBjb25zdCByZW1vdmVCb2R5Q2xhc3MgPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAoIXRoaXMuX21vZGFsUmVmcy5sZW5ndGgpIHtcbiAgICAgICAgcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5fZG9jdW1lbnQuYm9keSwgJ21vZGFsLW9wZW4nKTtcbiAgICAgICAgdGhpcy5fcmV2ZXJ0QXJpYUhpZGRlbigpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYWN0aXZlTW9kYWwgPSBuZXcgQWN0aXZlTW9kYWwoKTtcbiAgICBjb25zdCBjb250ZW50UmVmID0gdGhpcy5nZXRDb250ZW50UmVmKG1vZHVsZUNGUiwgY29udGVudCwgYWN0aXZlTW9kYWwpO1xuICAgIGNvbnN0IGJhY2tkcm9wQ21wdFJlZjogQ29tcG9uZW50UmVmPEx1eE1vZGFsQmFja2Ryb3BDb21wb25lbnQ+ID1cbiAgICAgIGNvbmZpZy5iYWNrZHJvcCA/IHRoaXMuX2F0dGFjaEJhY2tkcm9wKG1vZHVsZUNGUiwgY29udGFpbmVyRWwpIDogbnVsbDtcbiAgICBjb25zdCB3aW5kb3dDbXB0UmVmOiBDb21wb25lbnRSZWY8THV4TW9kYWxXaW5kb3dDb21wb25lbnQ+ID1cbiAgICAgIHRoaXMuX2F0dGFjaFdpbmRvd0NvbXBvbmVudChtb2R1bGVDRlIsIGNvbnRhaW5lckVsLCBjb250ZW50UmVmKTtcbiAgICBjb25zdCBtb2RhbFJlZjogTW9kYWxSZWYgPSBuZXcgTW9kYWxSZWYoXG4gICAgICB3aW5kb3dDbXB0UmVmLFxuICAgICAgY29udGVudFJlZixcbiAgICAgIGJhY2tkcm9wQ21wdFJlZlxuICAgICk7XG4gICAgdGhpcy5fcmVnaXN0ZXJNb2RhbFJlZihtb2RhbFJlZik7XG4gICAgdGhpcy5fcmVnaXN0ZXJXaW5kb3dDbXB0KHdpbmRvd0NtcHRSZWYpO1xuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKHJlbW92ZUJvZHlDbGFzcywgcmVtb3ZlQm9keUNsYXNzKTtcbiAgICBhY3RpdmVNb2RhbC5jbG9zZSA9IChyZXN1bHQ6IGFueSk6IHZvaWQgPT4ge1xuICAgICAgbW9kYWxSZWYuY2xvc2UocmVzdWx0KTtcbiAgICB9O1xuICAgIGFjdGl2ZU1vZGFsLmRpc21pc3MgPSAocmVhc29uOiBhbnkpOiB2b2lkID0+IHtcbiAgICAgIG1vZGFsUmVmLmRpc21pc3MocmVhc29uKTtcbiAgICB9O1xuXG4gICAgdGhpcy5fYXBwbHlXaW5kb3dPcHRpb25zKHdpbmRvd0NtcHRSZWYuaW5zdGFuY2UsIGNvbmZpZyk7XG4gICAgaWYgKHRoaXMuX21vZGFsUmVmcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJlbmRlcmVyLmFkZENsYXNzKHRoaXMuX2RvY3VtZW50LmJvZHksICdtb2RhbC1vcGVuJyk7XG4gICAgfVxuICAgIGlmIChiYWNrZHJvcENtcHRSZWYgJiYgYmFja2Ryb3BDbXB0UmVmLmluc3RhbmNlKSB7XG4gICAgICB0aGlzLl9hcHBseUJhY2tncm91bmRPcHRpb25zKGJhY2tkcm9wQ21wdFJlZi5pbnN0YW5jZSwgY29uZmlnKTtcbiAgICAgIGJhY2tkcm9wQ21wdFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIHdpbmRvd0NtcHRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgcmV0dXJuIG1vZGFsUmVmO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlXaW5kb3dPcHRpb25zKFxuICAgIHdpbmRvd0luc3RhbmNlOiBMdXhNb2RhbFdpbmRvd0NvbXBvbmVudCxcbiAgICBjb25maWc6IEx1eE1vZGFsT3B0aW9uc1xuICApOiB2b2lkIHtcbiAgICB0aGlzLl93aW5kb3dBdHRyaWJ1dGVzLmZvckVhY2goKG9wdGlvbk5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGlzRGVmaW5lZChjb25maWdbb3B0aW9uTmFtZV0pKSB7XG4gICAgICAgIHdpbmRvd0luc3RhbmNlW29wdGlvbk5hbWVdID0gY29uZmlnW29wdGlvbk5hbWVdO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlCYWNrZ3JvdW5kT3B0aW9ucyhcbiAgICBiYWNrZ3JvdWRJbnN0YW5jZTogTHV4TW9kYWxCYWNrZHJvcENvbXBvbmVudCxcbiAgICBjb25maWc6IEx1eE1vZGFsT3B0aW9uc1xuICApOiB2b2lkIHtcbiAgICB0aGlzLl9iYWNrZHJvcEF0dHJpYnV0ZXMuZm9yRWFjaCgob3B0aW9uTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoaXNEZWZpbmVkKGNvbmZpZ1tvcHRpb25OYW1lXSkpIHtcbiAgICAgICAgYmFja2dyb3VkSW5zdGFuY2Vbb3B0aW9uTmFtZV0gPSBjb25maWdbb3B0aW9uTmFtZV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9yZXZlcnRBcmlhSGlkZGVuKCk6IHZvaWQge1xuICAgIHRoaXMuX2FyaWFIaWRkZW5WYWx1ZXMuZm9yRWFjaCgodmFsdWUsIGVsZW1lbnQpID0+IHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLl9hcmlhSGlkZGVuVmFsdWVzLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRlbnRSZWYoXG4gICAgbW9kdWxlQ0ZSOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgY29udGVudDogYW55LFxuICAgIGFjdGl2ZU1vZGFsOiBBY3RpdmVNb2RhbFxuICApOiBDb250ZW50UmVmIHtcbiAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVGcm9tVGVtcGxhdGVSZWYoY29udGVudCwgYWN0aXZlTW9kYWwpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRnJvbVRlbXBsYXRlUmVmKFxuICAgIGNvbnRlbnQ6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgYWN0aXZlTW9kYWw6IEFjdGl2ZU1vZGFsXG4gICk6IENvbnRlbnRSZWYge1xuICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAkaW1wbGljaXQ6IGFjdGl2ZU1vZGFsLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1hcnJvdy9wcmVmZXItYXJyb3ctZnVuY3Rpb25zXG4gICAgICBjbG9zZShyZXN1bHQpOiB2b2lkIHtcbiAgICAgICAgYWN0aXZlTW9kYWwuY2xvc2UocmVzdWx0KTtcbiAgICAgIH0sXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWFycm93L3ByZWZlci1hcnJvdy1mdW5jdGlvbnNcbiAgICAgIGRpc21pc3MocmVhc29uKTogdm9pZCB7XG4gICAgICAgIGFjdGl2ZU1vZGFsLmRpc21pc3MocmVhc29uKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHZpZXdSZWYgPSBjb250ZW50LmNyZWF0ZUVtYmVkZGVkVmlldyhjb250ZXh0KTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvblJlZi5hdHRhY2hWaWV3KHZpZXdSZWYpO1xuICAgIHJldHVybiBuZXcgQ29udGVudFJlZihbdmlld1JlZi5yb290Tm9kZXNdLCB2aWV3UmVmKTtcbiAgfVxuXG4gIHByaXZhdGUgX2F0dGFjaEJhY2tkcm9wKFxuICAgIG1vZHVsZUNGUjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIGNvbnRhaW5lckVsOiBhbnlcbiAgKTogQ29tcG9uZW50UmVmPEx1eE1vZGFsQmFja2Ryb3BDb21wb25lbnQ+IHtcbiAgICBjb25zdCBiYWNrZHJvcEZhY3RvcnkgPSBtb2R1bGVDRlIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoXG4gICAgICBMdXhNb2RhbEJhY2tkcm9wQ29tcG9uZW50XG4gICAgKTtcbiAgICBjb25zdCBiYWNrZHJvcENtcHRSZWYgPSBiYWNrZHJvcEZhY3RvcnkuY3JlYXRlKHRoaXMuX2luamVjdG9yKTtcbiAgICB0aGlzLl9hcHBsaWNhdGlvblJlZi5hdHRhY2hWaWV3KGJhY2tkcm9wQ21wdFJlZi5ob3N0Vmlldyk7XG4gICAgY29udGFpbmVyRWwuYXBwZW5kQ2hpbGQoYmFja2Ryb3BDbXB0UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHJldHVybiBiYWNrZHJvcENtcHRSZWY7XG4gIH1cblxuICBwcml2YXRlIF9hdHRhY2hXaW5kb3dDb21wb25lbnQoXG4gICAgbW9kdWxlQ0ZSOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgY29udGFpbmVyRWw6IGFueSxcbiAgICBjb250ZW50UmVmOiBhbnlcbiAgKTogQ29tcG9uZW50UmVmPEx1eE1vZGFsV2luZG93Q29tcG9uZW50PiB7XG4gICAgY29uc3Qgd2luZG93RmFjdG9yeSA9IG1vZHVsZUNGUi5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShcbiAgICAgIEx1eE1vZGFsV2luZG93Q29tcG9uZW50XG4gICAgKTtcbiAgICBjb25zdCB3aW5kb3dDbXB0UmVmID0gd2luZG93RmFjdG9yeS5jcmVhdGUoXG4gICAgICB0aGlzLl9pbmplY3RvcixcbiAgICAgIGNvbnRlbnRSZWYubm9kZXNcbiAgICApO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uUmVmLmF0dGFjaFZpZXcod2luZG93Q21wdFJlZi5ob3N0Vmlldyk7XG4gICAgY29udGFpbmVyRWwuYXBwZW5kQ2hpbGQod2luZG93Q21wdFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICByZXR1cm4gd2luZG93Q21wdFJlZjtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyTW9kYWxSZWYobW9kYWxSZWY6IE1vZGFsUmVmKTogdm9pZCB7XG4gICAgY29uc3QgdW5yZWdpc3Rlck1vZGFsUmVmID0gKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9tb2RhbFJlZnMuaW5kZXhPZihtb2RhbFJlZik7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICB0aGlzLl9tb2RhbFJlZnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuX21vZGFsUmVmcy5wdXNoKG1vZGFsUmVmKTtcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbih1bnJlZ2lzdGVyTW9kYWxSZWYsIHVucmVnaXN0ZXJNb2RhbFJlZik7XG4gIH1cblxuICBwcml2YXRlIF9yZWdpc3RlcldpbmRvd0NtcHQoXG4gICAgd2luZG93Q21wdDogQ29tcG9uZW50UmVmPEx1eE1vZGFsV2luZG93Q29tcG9uZW50PlxuICApOiB2b2lkIHtcbiAgICB0aGlzLl93aW5kb3dDbXB0cy5wdXNoKHdpbmRvd0NtcHQpO1xuICAgIHRoaXMuX2FjdGl2ZVdpbmRvd0NtcHRIYXNDaGFuZ2VkLm5leHQoKTtcblxuICAgIHdpbmRvd0NtcHQub25EZXN0cm95KCgpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fd2luZG93Q21wdHMuaW5kZXhPZih3aW5kb3dDbXB0KTtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuX3dpbmRvd0NtcHRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVdpbmRvd0NtcHRIYXNDaGFuZ2VkLm5leHQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldEFyaWFIaWRkZW4oZWxlbWVudDogRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICBpZiAocGFyZW50ICYmIGVsZW1lbnQgIT09IHRoaXMuX2RvY3VtZW50LmJvZHkpIHtcbiAgICAgIEFycmF5LmZyb20ocGFyZW50LmNoaWxkcmVuKS5mb3JFYWNoKChzaWJsaW5nKSA9PiB7XG4gICAgICAgIGlmIChzaWJsaW5nICE9PSBlbGVtZW50ICYmIHNpYmxpbmcubm9kZU5hbWUgIT09ICdTQ1JJUFQnKSB7XG4gICAgICAgICAgdGhpcy5fYXJpYUhpZGRlblZhbHVlcy5zZXQoXG4gICAgICAgICAgICBzaWJsaW5nLFxuICAgICAgICAgICAgc2libGluZy5nZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJylcbiAgICAgICAgICApO1xuICAgICAgICAgIHNpYmxpbmcuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5fc2V0QXJpYUhpZGRlbihwYXJlbnQpO1xuICAgIH1cbiAgfVxufVxuIl19