ca-components 1.0.77 → 1.0.78

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 (31) hide show
  1. package/esm2022/lib/components/ca-input/ca-input.component.mjs +1 -1
  2. package/esm2022/lib/components/ca-map/ca-map.component.mjs +137 -210
  3. package/esm2022/lib/components/ca-map/enums/google-map.enum.mjs +2 -1
  4. package/esm2022/lib/components/ca-map/enums/map-marker-string.enum.mjs +2 -1
  5. package/esm2022/lib/components/ca-map/models/map.model.mjs +1 -1
  6. package/esm2022/lib/components/ca-map/utils/constants/index.mjs +2 -1
  7. package/esm2022/lib/components/ca-map/utils/constants/map-marker-icons.constants.mjs +119 -0
  8. package/esm2022/lib/components/ca-map/utils/constants/map-options.constants.mjs +1 -2
  9. package/esm2022/lib/components/ca-map/utils/helpers/map-marker-icon.helper.mjs +50 -12
  10. package/esm2022/lib/components/ca-map/utils/services/index.mjs +2 -0
  11. package/esm2022/lib/components/ca-map/utils/services/map-marker-icon.service.mjs +137 -0
  12. package/esm2022/lib/components/ca-map-dropdown/ca-map-dropdown.component.mjs +25 -11
  13. package/esm2022/lib/components/ca-progress-bar/ca-progress-bar.component.mjs +15 -15
  14. package/esm2022/lib/constants/map.constant.mjs +131 -131
  15. package/esm2022/public-api.mjs +2 -1
  16. package/fesm2022/ca-components.mjs +717 -491
  17. package/fesm2022/ca-components.mjs.map +1 -1
  18. package/lib/components/ca-filters/ca-filter.component.d.ts +2 -2
  19. package/lib/components/ca-map/ca-map.component.d.ts +22 -25
  20. package/lib/components/ca-map/enums/google-map.enum.d.ts +2 -1
  21. package/lib/components/ca-map/enums/map-marker-string.enum.d.ts +2 -1
  22. package/lib/components/ca-map/models/map.model.d.ts +8 -3
  23. package/lib/components/ca-map/utils/constants/index.d.ts +1 -0
  24. package/lib/components/ca-map/utils/constants/map-marker-icons.constants.d.ts +6 -0
  25. package/lib/components/ca-map/utils/helpers/map-marker-icon.helper.d.ts +2 -0
  26. package/lib/components/ca-map/utils/services/index.d.ts +1 -0
  27. package/lib/components/ca-map/utils/services/map-marker-icon.service.d.ts +23 -0
  28. package/lib/components/ca-map-dropdown/ca-map-dropdown.component.d.ts +5 -3
  29. package/lib/components/ca-progress-bar/ca-progress-bar.component.d.ts +3 -1
  30. package/package.json +1 -1
  31. package/public-api.d.ts +1 -0
@@ -0,0 +1,137 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ // Helpers
4
+ import { MapMarkerIconHelper } from '../helpers';
5
+ // Constants
6
+ import { MapMarkerIconsConstants } from '../constants';
7
+ import * as i0 from "@angular/core";
8
+ export class MapMarkerIconService {
9
+ constructor(rendererFactory) {
10
+ this.clusterMarkerIds = new BehaviorSubject([]);
11
+ this.clusterMarkerIds$ = this.clusterMarkerIds.asObservable();
12
+ this.routingMarkerIds = new BehaviorSubject([]);
13
+ this.routingMarkerIds$ = this.routingMarkerIds.asObservable();
14
+ this.markerElements = new BehaviorSubject([]);
15
+ this.clusterElements = new BehaviorSubject([]);
16
+ this.routingElements = new BehaviorSubject([]);
17
+ this.renderer = rendererFactory.createRenderer(null, null);
18
+ }
19
+ getMarkerIcon(markerId, labelName, isClosed, isFavorite, isAlwaysSelected) {
20
+ const markerElements = this.markerElements.getValue();
21
+ const previousMarkerIcon = markerElements.find((icon) => icon.id === 'marker-' + markerId);
22
+ if (previousMarkerIcon)
23
+ return previousMarkerIcon;
24
+ else {
25
+ const markerElement = this.renderer.createElement('div');
26
+ this.renderer.setAttribute(markerElement, 'id', 'marker-' + markerId);
27
+ this.renderer.addClass(markerElement, 'marker-icon');
28
+ const markerSvg = isClosed
29
+ ? MapMarkerIconsConstants.closedMarker
30
+ : isFavorite
31
+ ? MapMarkerIconsConstants.favoriteMarker
32
+ : MapMarkerIconsConstants.defaultMarker;
33
+ this.renderer.setProperty(markerElement, 'innerHTML', markerSvg);
34
+ if (labelName) {
35
+ const markerLabelElement = this.renderer.createElement('div');
36
+ this.renderer.addClass(markerLabelElement, 'marker-label');
37
+ this.renderer.setProperty(markerLabelElement, 'innerHTML', labelName.toUpperCase());
38
+ this.renderer.appendChild(markerElement, markerLabelElement);
39
+ }
40
+ if (isAlwaysSelected)
41
+ this.renderer.addClass(markerElement, 'selected-permanently');
42
+ markerElements.push(markerElement);
43
+ this.markerElements.next(markerElements);
44
+ return markerElement;
45
+ }
46
+ }
47
+ getClusterMarkerIcon(markerData) {
48
+ const clusterElements = this.clusterElements.getValue();
49
+ const clusterId = this.createClusterId(markerData);
50
+ const previousClusterIcon = clusterElements.find((icon) => icon.id === 'cluster-' + clusterId);
51
+ if (previousClusterIcon)
52
+ return previousClusterIcon;
53
+ else {
54
+ const markerElement = this.renderer.createElement('div');
55
+ this.renderer.setAttribute(markerElement, 'id', 'cluster-' + clusterId);
56
+ this.renderer.addClass(markerElement, 'cluster-icon');
57
+ const markerSvg = MapMarkerIconHelper.getClusterMarker(markerData.data.count, false);
58
+ this.renderer.setProperty(markerElement, 'innerHTML', markerSvg);
59
+ clusterElements.push(markerElement);
60
+ this.clusterElements.next(clusterElements);
61
+ return markerElement;
62
+ }
63
+ }
64
+ getRoutingMarkerIcon(markerData, stopNumber, stopType, isStopChecked, isLightMode, labelName) {
65
+ const routingElements = this.routingElements.getValue();
66
+ const routingId = this.createRoutingId(markerData);
67
+ const previousClusterIcon = routingElements.find((icon) => icon.id === 'routingMarker-' + routingId);
68
+ if (previousClusterIcon)
69
+ return previousClusterIcon;
70
+ else {
71
+ const markerElement = this.renderer.createElement('div');
72
+ this.renderer.setAttribute(markerElement, 'id', 'routingMarker-' + routingId);
73
+ this.renderer.addClass(markerElement, 'routing-icon');
74
+ const markerSvg = MapMarkerIconHelper.getRoutingMarkerIcon(stopNumber, stopType, isStopChecked, isLightMode);
75
+ this.renderer.setProperty(markerElement, 'innerHTML', markerSvg);
76
+ if (labelName) {
77
+ const markerLabelElement = this.renderer.createElement('div');
78
+ this.renderer.addClass(markerLabelElement, 'marker-label');
79
+ this.renderer.setProperty(markerLabelElement, 'innerHTML', labelName.toUpperCase());
80
+ this.renderer.appendChild(markerElement, markerLabelElement);
81
+ }
82
+ routingElements.push(markerElement);
83
+ this.routingElements.next(routingElements);
84
+ return markerElement;
85
+ }
86
+ }
87
+ createClusterId(clusterData) {
88
+ const clusterMarkers = this.clusterMarkerIds.getValue();
89
+ const clusterId = clusterMarkers.find((item) => clusterData.position.lat === item.position.lat &&
90
+ clusterData.position.lng === item.position.lng)?.id;
91
+ if (clusterId)
92
+ return clusterId;
93
+ else {
94
+ const newId = clusterMarkers.length + 1;
95
+ const newData = {
96
+ ...clusterData,
97
+ id: newId,
98
+ };
99
+ clusterMarkers.push(newData);
100
+ this.clusterMarkerIds.next(clusterMarkers);
101
+ return newId;
102
+ }
103
+ }
104
+ createRoutingId(markerData) {
105
+ const routingMarkers = this.routingMarkerIds.getValue();
106
+ const routingId = routingMarkers.find((item) => markerData.position.lat === item.position.lat &&
107
+ markerData.position.lng === item.position.lng)?.id;
108
+ if (routingId)
109
+ return routingId;
110
+ else {
111
+ const newId = routingMarkers.length + 1;
112
+ const newData = {
113
+ ...markerData,
114
+ id: newId,
115
+ };
116
+ routingMarkers.push(newData);
117
+ this.routingMarkerIds.next(routingMarkers);
118
+ return newId;
119
+ }
120
+ }
121
+ resetMarkersData() {
122
+ this.clusterMarkerIds.next([]);
123
+ this.routingMarkerIds.next([]);
124
+ this.markerElements.next([]);
125
+ this.clusterElements.next([]);
126
+ this.routingElements.next([]);
127
+ }
128
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapMarkerIconService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
129
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapMarkerIconService, providedIn: 'root' }); }
130
+ }
131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapMarkerIconService, decorators: [{
132
+ type: Injectable,
133
+ args: [{
134
+ providedIn: 'root',
135
+ }]
136
+ }], ctorParameters: () => [{ type: i0.RendererFactory2 }] });
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLW1hcmtlci1pY29uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jYS1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jYS1tYXAvdXRpbHMvc2VydmljZXMvbWFwLW1hcmtlci1pY29uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBK0IsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUVuRCxVQUFVO0FBQ1YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpELFlBQVk7QUFDWixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBUXZELE1BQU0sT0FBTyxvQkFBb0I7SUFZL0IsWUFBWSxlQUFpQztRQVZyQyxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsRUFBRSxDQUFDLENBQUM7UUFDM0Qsc0JBQWlCLEdBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMvQixxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsRUFBRSxDQUFDLENBQUM7UUFDM0Qsc0JBQWlCLEdBQ3RCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMvQixtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFnQixFQUFFLENBQUMsQ0FBQztRQUN4RCxvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFnQixFQUFFLENBQUMsQ0FBQztRQUN6RCxvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFnQixFQUFFLENBQUMsQ0FBQztRQUcvRCxJQUFJLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFTSxhQUFhLENBQ2xCLFFB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QUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7K0dBMU1VLG9CQUFvQjttSEFBcEIsb0JBQW9CLGNBRm5CLE1BQU07OzRGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBSZW5kZXJlcjIsIFJlbmRlcmVyRmFjdG9yeTIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG4vLyBIZWxwZXJzXG5pbXBvcnQgeyBNYXBNYXJrZXJJY29uSGVscGVyIH0gZnJvbSAnLi4vaGVscGVycyc7XG5cbi8vIENvbnN0YW50c1xuaW1wb3J0IHsgTWFwTWFya2VySWNvbnNDb25zdGFudHMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG4vLyBNb2RlbHNcbmltcG9ydCB7IElNYXBNYXJrZXJzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL21hcC5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBNYXBNYXJrZXJJY29uU2VydmljZSB7XG4gIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMjtcbiAgcHJpdmF0ZSBjbHVzdGVyTWFya2VySWRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJTWFwTWFya2Vyc1tdPihbXSk7XG4gIHB1YmxpYyBjbHVzdGVyTWFya2VySWRzJDogT2JzZXJ2YWJsZTxJTWFwTWFya2Vyc1tdPiA9XG4gICAgdGhpcy5jbHVzdGVyTWFya2VySWRzLmFzT2JzZXJ2YWJsZSgpO1xuICBwcml2YXRlIHJvdXRpbmdNYXJrZXJJZHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElNYXBNYXJrZXJzW10+KFtdKTtcbiAgcHVibGljIHJvdXRpbmdNYXJrZXJJZHMkOiBPYnNlcnZhYmxlPElNYXBNYXJrZXJzW10+ID1cbiAgICB0aGlzLnJvdXRpbmdNYXJrZXJJZHMuYXNPYnNlcnZhYmxlKCk7XG4gIHByaXZhdGUgbWFya2VyRWxlbWVudHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhUTUxFbGVtZW50W10+KFtdKTtcbiAgcHJpdmF0ZSBjbHVzdGVyRWxlbWVudHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhUTUxFbGVtZW50W10+KFtdKTtcbiAgcHJpdmF0ZSByb3V0aW5nRWxlbWVudHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhUTUxFbGVtZW50W10+KFtdKTtcblxuICBjb25zdHJ1Y3RvcihyZW5kZXJlckZhY3Rvcnk6IFJlbmRlcmVyRmFjdG9yeTIpIHtcbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKG51bGwsIG51bGwpO1xuICB9XG5cbiAgcHVibGljIGdldE1hcmtlckljb24oXG4gICAgbWFya2VySWQ6IG51bWJlcixcbiAgICBsYWJlbE5hbWU/OiBzdHJpbmcsXG4gICAgaXNDbG9zZWQ/OiBib29sZWFuLFxuICAgIGlzRmF2b3JpdGU/OiBib29sZWFuLFxuICAgIGlzQWx3YXlzU2VsZWN0ZWQ/OiBib29sZWFuXG4gICk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBtYXJrZXJFbGVtZW50cyA9IHRoaXMubWFya2VyRWxlbWVudHMuZ2V0VmFsdWUoKTtcblxuICAgIGNvbnN0IHByZXZpb3VzTWFya2VySWNvbiA9IG1hcmtlckVsZW1lbnRzLmZpbmQoXG4gICAgICAoaWNvbikgPT4gaWNvbi5pZCA9PT0gJ21hcmtlci0nICsgbWFya2VySWRcbiAgICApO1xuXG4gICAgaWYgKHByZXZpb3VzTWFya2VySWNvbikgcmV0dXJuIHByZXZpb3VzTWFya2VySWNvbjtcbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IG1hcmtlckVsZW1lbnQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUobWFya2VyRWxlbWVudCwgJ2lkJywgJ21hcmtlci0nICsgbWFya2VySWQpO1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhtYXJrZXJFbGVtZW50LCAnbWFya2VyLWljb24nKTtcblxuICAgICAgY29uc3QgbWFya2VyU3ZnID0gaXNDbG9zZWRcbiAgICAgICAgPyBNYXBNYXJrZXJJY29uc0NvbnN0YW50cy5jbG9zZWRNYXJrZXJcbiAgICAgICAgOiBpc0Zhdm9yaXRlXG4gICAgICAgID8gTWFwTWFya2VySWNvbnNDb25zdGFudHMuZmF2b3JpdGVNYXJrZXJcbiAgICAgICAgOiBNYXBNYXJrZXJJY29uc0NvbnN0YW50cy5kZWZhdWx0TWFya2VyO1xuXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KG1hcmtlckVsZW1lbnQsICdpbm5lckhUTUwnLCBtYXJrZXJTdmcpO1xuXG4gICAgICBpZiAobGFiZWxOYW1lKSB7XG4gICAgICAgIGNvbnN0IG1hcmtlckxhYmVsRWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MobWFya2VyTGFiZWxFbGVtZW50LCAnbWFya2VyLWxhYmVsJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkoXG4gICAgICAgICAgbWFya2VyTGFiZWxFbGVtZW50LFxuICAgICAgICAgICdpbm5lckhUTUwnLFxuICAgICAgICAgIGxhYmVsTmFtZS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQobWFya2VyRWxlbWVudCwgbWFya2VyTGFiZWxFbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzQWx3YXlzU2VsZWN0ZWQpXG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MobWFya2VyRWxlbWVudCwgJ3NlbGVjdGVkLXBlcm1hbmVudGx5Jyk7XG5cbiAgICAgIG1hcmtlckVsZW1lbnRzLnB1c2gobWFya2VyRWxlbWVudCk7XG5cbiAgICAgIHRoaXMubWFya2VyRWxlbWVudHMubmV4dChtYXJrZXJFbGVtZW50cyk7XG5cbiAgICAgIHJldHVybiBtYXJrZXJFbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRDbHVzdGVyTWFya2VySWNvbihtYXJrZXJEYXRhOiBJTWFwTWFya2Vycyk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBjbHVzdGVyRWxlbWVudHMgPSB0aGlzLmNsdXN0ZXJFbGVtZW50cy5nZXRWYWx1ZSgpO1xuXG4gICAgY29uc3QgY2x1c3RlcklkID0gdGhpcy5jcmVhdGVDbHVzdGVySWQobWFya2VyRGF0YSk7XG5cbiAgICBjb25zdCBwcmV2aW91c0NsdXN0ZXJJY29uID0gY2x1c3RlckVsZW1lbnRzLmZpbmQoXG4gICAgICAoaWNvbikgPT4gaWNvbi5pZCA9PT0gJ2NsdXN0ZXItJyArIGNsdXN0ZXJJZFxuICAgICk7XG5cbiAgICBpZiAocHJldmlvdXNDbHVzdGVySWNvbikgcmV0dXJuIHByZXZpb3VzQ2x1c3Rlckljb247XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBtYXJrZXJFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKG1hcmtlckVsZW1lbnQsICdpZCcsICdjbHVzdGVyLScgKyBjbHVzdGVySWQpO1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhtYXJrZXJFbGVtZW50LCAnY2x1c3Rlci1pY29uJyk7XG5cbiAgICAgIGNvbnN0IG1hcmtlclN2ZyA9IE1hcE1hcmtlckljb25IZWxwZXIuZ2V0Q2x1c3Rlck1hcmtlcihcbiAgICAgICAgbWFya2VyRGF0YS5kYXRhLmNvdW50LFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkobWFya2VyRWxlbWVudCwgJ2lubmVySFRNTCcsIG1hcmtlclN2Zyk7XG4gICAgICBjbHVzdGVyRWxlbWVudHMucHVzaChtYXJrZXJFbGVtZW50KTtcblxuICAgICAgdGhpcy5jbHVzdGVyRWxlbWVudHMubmV4dChjbHVzdGVyRWxlbWVudHMpO1xuXG4gICAgICByZXR1cm4gbWFya2VyRWxlbWVudDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0Um91dGluZ01hcmtlckljb24oXG4gICAgbWFya2VyRGF0YTogSU1hcE1hcmtlcnMsXG4gICAgc3RvcE51bWJlcjogbnVtYmVyLFxuICAgIHN0b3BUeXBlOiBzdHJpbmcsXG4gICAgaXNTdG9wQ2hlY2tlZD86IGJvb2xlYW4sXG4gICAgaXNMaWdodE1vZGU/OiBib29sZWFuLFxuICAgIGxhYmVsTmFtZT86IHN0cmluZ1xuICApOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3Qgcm91dGluZ0VsZW1lbnRzID0gdGhpcy5yb3V0aW5nRWxlbWVudHMuZ2V0VmFsdWUoKTtcblxuICAgIGNvbnN0IHJvdXRpbmdJZCA9IHRoaXMuY3JlYXRlUm91dGluZ0lkKG1hcmtlckRhdGEpO1xuXG4gICAgY29uc3QgcHJldmlvdXNDbHVzdGVySWNvbiA9IHJvdXRpbmdFbGVtZW50cy5maW5kKFxuICAgICAgKGljb24pID0+IGljb24uaWQgPT09ICdyb3V0aW5nTWFya2VyLScgKyByb3V0aW5nSWRcbiAgICApO1xuXG4gICAgaWYgKHByZXZpb3VzQ2x1c3Rlckljb24pIHJldHVybiBwcmV2aW91c0NsdXN0ZXJJY29uO1xuICAgIGVsc2Uge1xuICAgICAgY29uc3QgbWFya2VyRWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShcbiAgICAgICAgbWFya2VyRWxlbWVudCxcbiAgICAgICAgJ2lkJyxcbiAgICAgICAgJ3JvdXRpbmdNYXJrZXItJyArIHJvdXRpbmdJZFxuICAgICAgKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MobWFya2VyRWxlbWVudCwgJ3JvdXRpbmctaWNvbicpO1xuXG4gICAgICBjb25zdCBtYXJrZXJTdmcgPSBNYXBNYXJrZXJJY29uSGVscGVyLmdldFJvdXRpbmdNYXJrZXJJY29uKFxuICAgICAgICBzdG9wTnVtYmVyLFxuICAgICAgICBzdG9wVHlwZSxcbiAgICAgICAgaXNTdG9wQ2hlY2tlZCxcbiAgICAgICAgaXNMaWdodE1vZGVcbiAgICAgICk7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KG1hcmtlckVsZW1lbnQsICdpbm5lckhUTUwnLCBtYXJrZXJTdmcpO1xuXG4gICAgICBpZiAobGFiZWxOYW1lKSB7XG4gICAgICAgIGNvbnN0IG1hcmtlckxhYmVsRWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MobWFya2VyTGFiZWxFbGVtZW50LCAnbWFya2VyLWxhYmVsJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkoXG4gICAgICAgICAgbWFya2VyTGFiZWxFbGVtZW50LFxuICAgICAgICAgICdpbm5lckhUTUwnLFxuICAgICAgICAgIGxhYmVsTmFtZS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQobWFya2VyRWxlbWVudCwgbWFya2VyTGFiZWxFbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgcm91dGluZ0VsZW1lbnRzLnB1c2gobWFya2VyRWxlbWVudCk7XG5cbiAgICAgIHRoaXMucm91dGluZ0VsZW1lbnRzLm5leHQocm91dGluZ0VsZW1lbnRzKTtcblxuICAgICAgcmV0dXJuIG1hcmtlckVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNyZWF0ZUNsdXN0ZXJJZChjbHVzdGVyRGF0YTogSU1hcE1hcmtlcnMpOiBudW1iZXIge1xuICAgIGNvbnN0IGNsdXN0ZXJNYXJrZXJzID0gdGhpcy5jbHVzdGVyTWFya2VySWRzLmdldFZhbHVlKCk7XG5cbiAgICBjb25zdCBjbHVzdGVySWQgPSBjbHVzdGVyTWFya2Vycy5maW5kKFxuICAgICAgKGl0ZW0pID0+XG4gICAgICAgIGNsdXN0ZXJEYXRhLnBvc2l0aW9uLmxhdCA9PT0gaXRlbS5wb3NpdGlvbi5sYXQgJiZcbiAgICAgICAgY2x1c3RlckRhdGEucG9zaXRpb24ubG5nID09PSBpdGVtLnBvc2l0aW9uLmxuZ1xuICAgICk/LmlkO1xuXG4gICAgaWYgKGNsdXN0ZXJJZCkgcmV0dXJuIGNsdXN0ZXJJZDtcbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IG5ld0lkID0gY2x1c3Rlck1hcmtlcnMubGVuZ3RoICsgMTtcblxuICAgICAgY29uc3QgbmV3RGF0YSA9IHtcbiAgICAgICAgLi4uY2x1c3RlckRhdGEsXG4gICAgICAgIGlkOiBuZXdJZCxcbiAgICAgIH07XG5cbiAgICAgIGNsdXN0ZXJNYXJrZXJzLnB1c2gobmV3RGF0YSk7XG4gICAgICB0aGlzLmNsdXN0ZXJNYXJrZXJJZHMubmV4dChjbHVzdGVyTWFya2Vycyk7XG5cbiAgICAgIHJldHVybiBuZXdJZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlUm91dGluZ0lkKG1hcmtlckRhdGE6IElNYXBNYXJrZXJzKTogbnVtYmVyIHtcbiAgICBjb25zdCByb3V0aW5nTWFya2VycyA9IHRoaXMucm91dGluZ01hcmtlcklkcy5nZXRWYWx1ZSgpO1xuXG4gICAgY29uc3Qgcm91dGluZ0lkID0gcm91dGluZ01hcmtlcnMuZmluZChcbiAgICAgIChpdGVtKSA9PlxuICAgICAgICBtYXJrZXJEYXRhLnBvc2l0aW9uLmxhdCA9PT0gaXRlbS5wb3NpdGlvbi5sYXQgJiZcbiAgICAgICAgbWFya2VyRGF0YS5wb3NpdGlvbi5sbmcgPT09IGl0ZW0ucG9zaXRpb24ubG5nXG4gICAgKT8uaWQ7XG5cbiAgICBpZiAocm91dGluZ0lkKSByZXR1cm4gcm91dGluZ0lkO1xuICAgIGVsc2Uge1xuICAgICAgY29uc3QgbmV3SWQgPSByb3V0aW5nTWFya2Vycy5sZW5ndGggKyAxO1xuXG4gICAgICBjb25zdCBuZXdEYXRhID0ge1xuICAgICAgICAuLi5tYXJrZXJEYXRhLFxuICAgICAgICBpZDogbmV3SWQsXG4gICAgICB9O1xuXG4gICAgICByb3V0aW5nTWFya2Vycy5wdXNoKG5ld0RhdGEpO1xuICAgICAgdGhpcy5yb3V0aW5nTWFya2VySWRzLm5leHQocm91dGluZ01hcmtlcnMpO1xuXG4gICAgICByZXR1cm4gbmV3SWQ7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlc2V0TWFya2Vyc0RhdGEoKTogdm9pZCB7XG4gICAgdGhpcy5jbHVzdGVyTWFya2VySWRzLm5leHQoW10pO1xuICAgIHRoaXMucm91dGluZ01hcmtlcklkcy5uZXh0KFtdKTtcbiAgICB0aGlzLm1hcmtlckVsZW1lbnRzLm5leHQoW10pO1xuICAgIHRoaXMuY2x1c3RlckVsZW1lbnRzLm5leHQoW10pO1xuICAgIHRoaXMucm91dGluZ0VsZW1lbnRzLm5leHQoW10pO1xuICB9XG59XG4iXX0=