@aggdirect/coolmap 2.5.2 → 2.5.4

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 (44) hide show
  1. package/README.md +57 -57
  2. package/esm2020/aggdirect-coolmap.mjs +4 -4
  3. package/esm2020/lib/component/add-route/add-route.component.mjs +335 -335
  4. package/esm2020/lib/component/job-code/job-code.component.mjs +181 -181
  5. package/esm2020/lib/component/map/map.component.mjs +37 -37
  6. package/esm2020/lib/component/nav/layout/add-route-nav/add-route-nav.component.mjs +146 -146
  7. package/esm2020/lib/component/nav/layout/job-code-nav/job-code-nav.component.mjs +114 -114
  8. package/esm2020/lib/component/nav/nav.component.mjs +52 -52
  9. package/esm2020/lib/component/route-jobcode-list/job-code-list-card/job-code-list-card.component.mjs +72 -72
  10. package/esm2020/lib/component/route-jobcode-list/route-jobcode-list.component.mjs +316 -316
  11. package/esm2020/lib/component/route-jobcode-list/sms-card-details-overview/sms-card-details-overview.component.mjs +19 -19
  12. package/esm2020/lib/component/route-jobcode-list/view-route-list-card/view-route-list-card.component.mjs +33 -33
  13. package/esm2020/lib/component/shared/dialog/dialog.component.mjs +29 -29
  14. package/esm2020/lib/component/shared/estimation-display/estimation-display.component.mjs +19 -19
  15. package/esm2020/lib/component/shared/job-route-list/job-route-list.component.mjs +71 -71
  16. package/esm2020/lib/component/shared/jobcode-overview/jobcode-overview.component.mjs +24 -24
  17. package/esm2020/lib/component/shared/jobcode-status/jobcode-status.component.mjs +14 -14
  18. package/esm2020/lib/component/shared/route-info-card/route-info-card.component.mjs +57 -57
  19. package/esm2020/lib/coolmap.module.mjs +185 -185
  20. package/esm2020/public-api.mjs +19 -19
  21. package/fesm2015/aggdirect-coolmap.mjs +1537 -1537
  22. package/fesm2015/aggdirect-coolmap.mjs.map +1 -1
  23. package/fesm2020/aggdirect-coolmap.mjs +1499 -1499
  24. package/fesm2020/aggdirect-coolmap.mjs.map +1 -1
  25. package/index.d.ts +5 -5
  26. package/lib/component/add-route/add-route.component.d.ts +61 -61
  27. package/lib/component/job-code/job-code.component.d.ts +42 -42
  28. package/lib/component/map/map.component.d.ts +15 -15
  29. package/lib/component/nav/layout/add-route-nav/add-route-nav.component.d.ts +49 -49
  30. package/lib/component/nav/layout/job-code-nav/job-code-nav.component.d.ts +42 -42
  31. package/lib/component/nav/nav.component.d.ts +31 -31
  32. package/lib/component/route-jobcode-list/job-code-list-card/job-code-list-card.component.d.ts +20 -20
  33. package/lib/component/route-jobcode-list/route-jobcode-list.component.d.ts +42 -42
  34. package/lib/component/route-jobcode-list/sms-card-details-overview/sms-card-details-overview.component.d.ts +9 -9
  35. package/lib/component/route-jobcode-list/view-route-list-card/view-route-list-card.component.d.ts +12 -12
  36. package/lib/component/shared/dialog/dialog.component.d.ts +13 -13
  37. package/lib/component/shared/estimation-display/estimation-display.component.d.ts +8 -8
  38. package/lib/component/shared/job-route-list/job-route-list.component.d.ts +26 -26
  39. package/lib/component/shared/jobcode-overview/jobcode-overview.component.d.ts +10 -10
  40. package/lib/component/shared/jobcode-status/jobcode-status.component.d.ts +7 -7
  41. package/lib/component/shared/route-info-card/route-info-card.component.d.ts +29 -29
  42. package/lib/coolmap.module.d.ts +44 -44
  43. package/package.json +3 -3
  44. package/public-api.d.ts +15 -15
@@ -1,114 +1,114 @@
1
- import { Component, EventEmitter, Output, Inject, Input } from '@angular/core';
2
- import { map, startWith } from 'rxjs';
3
- import { FormControl, FormGroup } from '@angular/forms';
4
- import { Subject, takeUntil } from 'rxjs';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@aggdirect/coolmap-services";
7
- import * as i2 from "@angular/common";
8
- import * as i3 from "@angular/forms";
9
- import * as i4 from "@angular/material/form-field";
10
- import * as i5 from "@angular/material/input";
11
- import * as i6 from "@angular/material/core";
12
- import * as i7 from "@angular/material/icon";
13
- import * as i8 from "@angular/material/autocomplete";
14
- import * as i9 from "@angular/material/chips";
15
- import * as i10 from "@angular/material/datepicker";
16
- import * as i11 from "@angular/material/button";
17
- import * as i12 from "../../../route-jobcode-list/route-jobcode-list.component";
18
- export class JobCodeNavComponent {
19
- constructor(utils, config) {
20
- this.utils = utils;
21
- this.config = config;
22
- this.filterForm = new FormGroup({ search: new FormControl() });
23
- this.listData = [];
24
- this.loaderVal = false;
25
- this.dateValue = new Date();
26
- this.jobemit = new EventEmitter();
27
- this.value = '';
28
- this.filters = [];
29
- this.clearJobDetails = new EventEmitter();
30
- this.destroyer$ = new Subject();
31
- this.selectedDate = this.utils.getDateFormat(new Date());
32
- utils.navChangeObserve.pipe(takeUntil(this.destroyer$)).subscribe(res => {
33
- if (res) {
34
- this.loaderVal = false;
35
- }
36
- else
37
- this.loaderVal = true;
38
- });
39
- }
40
- ngOnChanges(changes) {
41
- if (changes['customerRepoDetails'] && changes['customerRepoDetails']['currentValue']) {
42
- this.loadData(this.selectedDate);
43
- this.filters = [];
44
- this.utils.clearViewRouteforJobCode.next(true);
45
- }
46
- }
47
- loadData(value) {
48
- this.selectedDate = value;
49
- this.filteredOptions = this.filterForm.get('search')?.valueChanges.pipe(startWith(''), map(value => this.utils.filter(value, this.filters)));
50
- this.utils.preventnavChange.next(false);
51
- this.loaderVal = true;
52
- let dataSet;
53
- if (this.config.repository === 'customer') {
54
- dataSet = {
55
- date: value,
56
- customer_id: this.customerRepoDetails.customer.id,
57
- project_id: this.customerRepoDetails.projectId,
58
- };
59
- }
60
- else {
61
- dataSet = { date: value };
62
- }
63
- this.utils.postdata('jobs_report_v2', dataSet).pipe(takeUntil(this.destroyer$)).subscribe((res) => {
64
- if (typeof res['data'] !== 'string') {
65
- if (res['data'].length > 0)
66
- this.listData = res['data'].map((ele) => { ele['date'] = value; return ele; });
67
- this.listData.forEach((ele) => { this.utils.makeOptions(ele); });
68
- }
69
- else
70
- this.listData = [];
71
- this.clearJobDetails.emit(true);
72
- this.utils.clearViewRouteforJobCode.next(true);
73
- this.filters = [];
74
- if (typeof res['data'] === 'string')
75
- this.utils.preventnavChange.next(true);
76
- }, (err) => { if (err)
77
- this.utils.preventnavChange.next(true); });
78
- }
79
- getRoute(job) { if (job['type'] === 'jobcode') {
80
- this.jobemit.emit(job);
81
- } }
82
- getDate(ev) { this.loadData(this.utils.getDateFormat(ev.value)); }
83
- filterSearch(e) {
84
- this.filterForm.controls.search.setValue(null);
85
- this.filterForm.controls.search.updateValueAndValidity();
86
- this.filters = [{ name: e.source.value.label, type: e.source.value.type, value: e.source.value }];
87
- }
88
- removeFromFilter(filter) {
89
- const index = this.filters.indexOf(filter);
90
- if (index >= 0) {
91
- this.filters = [];
92
- }
93
- }
94
- ngOnDestroy() {
95
- this.destroyer$.next(true);
96
- this.destroyer$.unsubscribe();
97
- }
98
- }
99
- JobCodeNavComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: JobCodeNavComponent, deps: [{ token: i1.UtilsService }, { token: 'memberData' }], target: i0.ɵɵFactoryTarget.Component });
100
- JobCodeNavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: JobCodeNavComponent, selector: "app-job-code-nav", inputs: { customerRepoDetails: "customerRepoDetails" }, outputs: { jobemit: "jobemit", clearJobDetails: "clearJobDetails" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"nav_body\">\r\n <div class=\"search-panel\">\r\n <div class=\"datepicker\">\r\n <mat-form-field>\r\n <mat-label>Choose a date</mat-label>\r\n <input readonly matInput (click)=\"picker.open()\" [disabled]=\"loaderVal\" [(ngModel)]=\"dateValue\" [matDatepicker]=\"picker\" (dateChange)=\"getDate($event)\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"search\">\r\n <form [formGroup]=\"filterForm\">\r\n <mat-form-field class=\"full-width\" [class.disabled]=\"loaderVal\">\r\n <input matInput [matChipInputFor]=\"chipList\" formControlName=\"search\" [matAutocomplete]=\"auto\"\r\n [disabled]=\"loaderVal\" placeholder=\"Search\">\r\n <mat-icon matSuffix *ngIf=\"!utils.conveySearchIcon(filterForm.value.search)\">search</mat-icon>\r\n <button mat-button matSuffix mat-icon-button aria-label=\"Clear\" *ngIf=\"utils.conveySearchIcon(filterForm.value.search)\" (click)=\"filterForm.reset()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" class=\"whole_width\">\r\n <mat-option *ngFor=\"let option of filteredOptions | async\" (onSelectionChange)=\"filterSearch($event)\"\r\n [value]=\"option\">\r\n {{option.type | titlecase }}: {{option['label']}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n </form>\r\n\r\n </div>\r\n\r\n <div class=\"chip-list\">\r\n <mat-chip-list #chipList aria-label=\"Filter selection\">\r\n <mat-chip *ngFor=\"let filter of filters\" (removed)=\"removeFromFilter(filter)\">\r\n {{filter.type | titlecase }}: {{filter.name}}\r\n <button matChipRemove>\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip>\r\n </mat-chip-list>\r\n </div>\r\n </div>\r\n <app-route-jobcode-list [type]=\"'jobcode'\" [searchTerm]=\"filters\" [data]=\"listData\" [loader]=\"loaderVal\" (clearJobDetailsFromList)=\"clearJobDetails.emit(true)\" (showAllRoute)=\"filters = []; clearJobDetails.emit(true)\" (emitroute)=\"getRoute($event)\"></app-route-jobcode-list>\r\n</div>\r\n", styles: [".search-panel .datepicker,.search-panel .search{width:47%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i8.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i8.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i9.MatChipList, selector: "mat-chip-list", inputs: ["role", "aria-describedby", "errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { kind: "directive", type: i9.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "role", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { kind: "directive", type: i9.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i9.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i10.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i10.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i10.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i11.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i12.RouteJobCodeListComponent, selector: "app-route-jobcode-list", inputs: ["loader", "type", "data", "currentNav", "searchTerm", "clearListSeletion"], outputs: ["emitroute", "showAllRoute", "clearJobDetailsFromList"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TitleCasePipe, name: "titlecase" }] });
101
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: JobCodeNavComponent, decorators: [{
102
- type: Component,
103
- args: [{ selector: 'app-job-code-nav', template: "<div class=\"nav_body\">\r\n <div class=\"search-panel\">\r\n <div class=\"datepicker\">\r\n <mat-form-field>\r\n <mat-label>Choose a date</mat-label>\r\n <input readonly matInput (click)=\"picker.open()\" [disabled]=\"loaderVal\" [(ngModel)]=\"dateValue\" [matDatepicker]=\"picker\" (dateChange)=\"getDate($event)\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"search\">\r\n <form [formGroup]=\"filterForm\">\r\n <mat-form-field class=\"full-width\" [class.disabled]=\"loaderVal\">\r\n <input matInput [matChipInputFor]=\"chipList\" formControlName=\"search\" [matAutocomplete]=\"auto\"\r\n [disabled]=\"loaderVal\" placeholder=\"Search\">\r\n <mat-icon matSuffix *ngIf=\"!utils.conveySearchIcon(filterForm.value.search)\">search</mat-icon>\r\n <button mat-button matSuffix mat-icon-button aria-label=\"Clear\" *ngIf=\"utils.conveySearchIcon(filterForm.value.search)\" (click)=\"filterForm.reset()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" class=\"whole_width\">\r\n <mat-option *ngFor=\"let option of filteredOptions | async\" (onSelectionChange)=\"filterSearch($event)\"\r\n [value]=\"option\">\r\n {{option.type | titlecase }}: {{option['label']}}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </mat-form-field>\r\n </form>\r\n\r\n </div>\r\n\r\n <div class=\"chip-list\">\r\n <mat-chip-list #chipList aria-label=\"Filter selection\">\r\n <mat-chip *ngFor=\"let filter of filters\" (removed)=\"removeFromFilter(filter)\">\r\n {{filter.type | titlecase }}: {{filter.name}}\r\n <button matChipRemove>\r\n <mat-icon>cancel</mat-icon>\r\n </button>\r\n </mat-chip>\r\n </mat-chip-list>\r\n </div>\r\n </div>\r\n <app-route-jobcode-list [type]=\"'jobcode'\" [searchTerm]=\"filters\" [data]=\"listData\" [loader]=\"loaderVal\" (clearJobDetailsFromList)=\"clearJobDetails.emit(true)\" (showAllRoute)=\"filters = []; clearJobDetails.emit(true)\" (emitroute)=\"getRoute($event)\"></app-route-jobcode-list>\r\n</div>\r\n", styles: [".search-panel .datepicker,.search-panel .search{width:47%}\n"] }]
104
- }], ctorParameters: function () { return [{ type: i1.UtilsService }, { type: i1.CoolmapConfigModel, decorators: [{
105
- type: Inject,
106
- args: ['memberData']
107
- }] }]; }, propDecorators: { jobemit: [{
108
- type: Output
109
- }], clearJobDetails: [{
110
- type: Output
111
- }], customerRepoDetails: [{
112
- type: Input
113
- }] } });
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLWNvZGUtbmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvb2xtYXAvc3JjL2xpYi9jb21wb25lbnQvbmF2L2xheW91dC9qb2ItY29kZS1uYXYvam9iLWNvZGUtbmF2LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvb2xtYXAvc3JjL2xpYi9jb21wb25lbnQvbmF2L2xheW91dC9qb2ItY29kZS1uYXYvam9iLWNvZGUtbmF2LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsWUFBWSxFQUFFLE1BQU0sRUFBYSxNQUFNLEVBQUUsS0FBSyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQUU3SCxPQUFPLEVBQUUsR0FBRyxFQUFjLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7OztBQVExQyxNQUFNLE9BQU8sbUJBQW1CO0lBYzlCLFlBQW1CLEtBQW1CLEVBQ04sTUFBMEI7UUFEdkMsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNOLFdBQU0sR0FBTixNQUFNLENBQW9CO1FBZDFELGVBQVUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxRCxhQUFRLEdBQVksRUFBRSxDQUFDO1FBQ3ZCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsY0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDTixZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM5QyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRVgsWUFBTyxHQUFhLEVBQUUsQ0FBQztRQUNOLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMvQyxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQU12QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMzRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdEUsSUFBSSxHQUFHLEVBQUU7Z0JBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUE7YUFBRTs7Z0JBQU0sSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUE7UUFDaEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLHFCQUFxQixDQUFDLElBQUksT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDcEYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNwRCxJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoRDtJQUNILENBQUM7SUFDRCxRQUFRLENBQUMsS0FBYTtRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUNuRixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQ3JELENBQUM7UUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLE9BQU8sQ0FBQztRQUNaLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFO1lBQ3pDLE9BQU8sR0FBRztnQkFDUixJQUFJLEVBQUUsS0FBSztnQkFDWCxXQUFXLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNqRCxVQUFVLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVM7YUFDL0MsQ0FBQTtTQUNGO2FBQU07WUFDTCxPQUFPLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7U0FDM0I7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ3JHLElBQUksT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssUUFBUSxFQUFFO2dCQUNuQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFVLEVBQUUsRUFBRSxHQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQSxDQUFBLENBQUMsQ0FBQyxDQUFDO2dCQUMvRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVUsRUFBRSxFQUFFLEdBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN6RTs7Z0JBQU0sSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDbEIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxRQUFRO2dCQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHO1lBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBQ0QsUUFBUSxDQUFDLEdBQVUsSUFBSSxJQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxTQUFTLEVBQUM7UUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtLQUFDLENBQUMsQ0FBQztJQUMvRSxPQUFPLENBQUMsRUFBaUMsSUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBLENBQUEsQ0FBQztJQUM3RixZQUFZLENBQUMsQ0FBTTtRQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFBO0lBQ2xHLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxNQUFXO1FBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTtZQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFBO1NBQUU7SUFDdkMsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2hDLENBQUM7O2dIQXJFVSxtQkFBbUIsOENBZXBCLFlBQVk7b0dBZlgsbUJBQW1CLDBNQ2JoQyxpMEVBMkNBOzJGRDlCYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0Usa0JBQWtCOzswQkFtQnpCLE1BQU07MkJBQUMsWUFBWTs0Q0FWTCxPQUFPO3NCQUF2QixNQUFNO2dCQUlVLGVBQWU7c0JBQS9CLE1BQU07Z0JBRVMsbUJBQW1CO3NCQUFsQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBPbkRlc3Ryb3ksIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyAgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcclxuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW50ZXJmYWNlIEZpbHRlciB7IG5hbWU/OiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgdmFsdWU6IGFueTsgbGFiZWw/OiBzdHJpbmc7IH1cclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvb2xtYXBDb25maWdNb2RlbCwgQ3VzdG9tZXJSZXBvRGV0YWlsc01vZGVsLCBSb3V0ZSwgVXRpbHNTZXJ2aWNlIH0gZnJvbSAnQGFnZ2RpcmVjdC9jb29sbWFwLXNlcnZpY2VzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWpvYi1jb2RlLW5hdicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2pvYi1jb2RlLW5hdi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vam9iLWNvZGUtbmF2LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEpvYkNvZGVOYXZDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XHJcbiAgZmlsdGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoeyBzZWFyY2g6IG5ldyBGb3JtQ29udHJvbCgpIH0pO1xyXG4gIGxpc3REYXRhOiBSb3V0ZVtdID0gW107XHJcbiAgbG9hZGVyVmFsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGF0ZVZhbHVlID0gbmV3IERhdGUoKTtcclxuICBAT3V0cHV0KCkgcHVibGljIGpvYmVtaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgdmFsdWUgPSAnJztcclxuICBmaWx0ZXJlZE9wdGlvbnMhOiBPYnNlcnZhYmxlPGFueVtdPiB8IHVuZGVmaW5lZDtcclxuICBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgY2xlYXJKb2JEZXRhaWxzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHB1YmxpYyBkZXN0cm95ZXIkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tZXJSZXBvRGV0YWlscyE6IEN1c3RvbWVyUmVwb0RldGFpbHNNb2RlbDtcclxuICBzZWxlY3RlZERhdGU6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIHV0aWxzOiBVdGlsc1NlcnZpY2UsXHJcbiAgICBASW5qZWN0KCdtZW1iZXJEYXRhJykgcHJpdmF0ZSBjb25maWc6IENvb2xtYXBDb25maWdNb2RlbCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHRoaXMudXRpbHMuZ2V0RGF0ZUZvcm1hdChuZXcgRGF0ZSgpKTtcclxuICAgIHV0aWxzLm5hdkNoYW5nZU9ic2VydmUucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZXIkKSkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIGlmIChyZXMpIHsgdGhpcy5sb2FkZXJWYWwgPSBmYWxzZSB9IGVsc2UgdGhpcy5sb2FkZXJWYWwgPSB0cnVlXHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ2N1c3RvbWVyUmVwb0RldGFpbHMnXSAmJiBjaGFuZ2VzWydjdXN0b21lclJlcG9EZXRhaWxzJ11bJ2N1cnJlbnRWYWx1ZSddKSB7XHJcbiAgICAgIHRoaXMubG9hZERhdGEodGhpcy5zZWxlY3RlZERhdGUpOyB0aGlzLmZpbHRlcnMgPSBbXTtcclxuICAgICAgdGhpcy51dGlscy5jbGVhclZpZXdSb3V0ZWZvckpvYkNvZGUubmV4dCh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcbiAgbG9hZERhdGEodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5maWx0ZXJGb3JtLmdldCgnc2VhcmNoJyk/LnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCgnJyksXHJcbiAgICAgIG1hcCh2YWx1ZSA9PiB0aGlzLnV0aWxzLmZpbHRlcih2YWx1ZSwgdGhpcy5maWx0ZXJzKSksXHJcbiAgICApO1xyXG4gICAgdGhpcy51dGlscy5wcmV2ZW50bmF2Q2hhbmdlLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5sb2FkZXJWYWwgPSB0cnVlO1xyXG4gICAgbGV0IGRhdGFTZXQ7XHJcbiAgICBpZiAodGhpcy5jb25maWcucmVwb3NpdG9yeSA9PT0gJ2N1c3RvbWVyJykge1xyXG4gICAgICBkYXRhU2V0ID0ge1xyXG4gICAgICAgIGRhdGU6IHZhbHVlLFxyXG4gICAgICAgIGN1c3RvbWVyX2lkOiB0aGlzLmN1c3RvbWVyUmVwb0RldGFpbHMuY3VzdG9tZXIuaWQsXHJcbiAgICAgICAgcHJvamVjdF9pZDogdGhpcy5jdXN0b21lclJlcG9EZXRhaWxzLnByb2plY3RJZCxcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGF0YVNldCA9IHsgZGF0ZTogdmFsdWUgfTtcclxuICAgIH1cclxuICAgIHRoaXMudXRpbHMucG9zdGRhdGEoJ2pvYnNfcmVwb3J0X3YyJywgZGF0YVNldCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZXIkKSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIHJlc1snZGF0YSddICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGlmIChyZXNbJ2RhdGEnXS5sZW5ndGggPiAwKSB0aGlzLmxpc3REYXRhID0gcmVzWydkYXRhJ10ubWFwKChlbGU6IFJvdXRlKSA9PiB7ZWxlWydkYXRlJ10gPSB2YWx1ZTsgcmV0dXJuIGVsZX0pO1xyXG4gICAgICAgIHRoaXMubGlzdERhdGEuZm9yRWFjaCgoZWxlOiBSb3V0ZSkgPT4geyAgdGhpcy51dGlscy5tYWtlT3B0aW9ucyhlbGUpIH0pO1xyXG4gICAgICB9IGVsc2UgdGhpcy5saXN0RGF0YSA9IFtdO1xyXG4gICAgICB0aGlzLmNsZWFySm9iRGV0YWlscy5lbWl0KHRydWUpO1xyXG4gICAgICB0aGlzLnV0aWxzLmNsZWFyVmlld1JvdXRlZm9ySm9iQ29kZS5uZXh0KHRydWUpO1xyXG4gICAgICB0aGlzLmZpbHRlcnMgPSBbXTtcclxuICAgICAgaWYgKHR5cGVvZiByZXNbJ2RhdGEnXSA9PT0gJ3N0cmluZycpIHRoaXMudXRpbHMucHJldmVudG5hdkNoYW5nZS5uZXh0KHRydWUpO1xyXG4gICAgfSwgKGVycikgPT4geyBpZiAoZXJyKSB0aGlzLnV0aWxzLnByZXZlbnRuYXZDaGFuZ2UubmV4dCh0cnVlKSB9KTtcclxuICB9XHJcbiAgZ2V0Um91dGUoam9iOiBSb3V0ZSkgeyBpZihqb2JbJ3R5cGUnXSA9PT0gJ2pvYmNvZGUnKXsgdGhpcy5qb2JlbWl0LmVtaXQoam9iKX0gfVxyXG4gIGdldERhdGUoZXY6IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50PERhdGU+KXt0aGlzLmxvYWREYXRhKHRoaXMudXRpbHMuZ2V0RGF0ZUZvcm1hdChldi52YWx1ZSkpfVxyXG4gIGZpbHRlclNlYXJjaChlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuZmlsdGVyRm9ybS5jb250cm9scy5zZWFyY2guc2V0VmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLmZpbHRlckZvcm0uY29udHJvbHMuc2VhcmNoLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuZmlsdGVycyA9IFt7IG5hbWU6IGUuc291cmNlLnZhbHVlLmxhYmVsLCB0eXBlOiBlLnNvdXJjZS52YWx1ZS50eXBlLCB2YWx1ZTogZS5zb3VyY2UudmFsdWV9XVxyXG4gIH1cclxuICByZW1vdmVGcm9tRmlsdGVyKGZpbHRlcjogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZmlsdGVycy5pbmRleE9mKGZpbHRlcik7XHJcbiAgICBpZiAoaW5kZXggPj0gMCkgeyB0aGlzLmZpbHRlcnMgPSBbXSB9XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95ZXIkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3llciQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIm5hdl9ib2R5XCI+XHJcbiAgPGRpdiBjbGFzcz1cInNlYXJjaC1wYW5lbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXJcIj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+Q2hvb3NlIGEgZGF0ZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCByZWFkb25seSBtYXRJbnB1dCAoY2xpY2spPVwicGlja2VyLm9wZW4oKVwiIFtkaXNhYmxlZF09XCJsb2FkZXJWYWxcIiAgWyhuZ01vZGVsKV09XCJkYXRlVmFsdWVcIiBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiAoZGF0ZUNoYW5nZSk9XCJnZXREYXRlKCRldmVudClcIj5cclxuICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzZWFyY2hcIj5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZmlsdGVyRm9ybVwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmdWxsLXdpZHRoXCIgW2NsYXNzLmRpc2FibGVkXT1cImxvYWRlclZhbFwiPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0Q2hpcElucHV0Rm9yXT1cImNoaXBMaXN0XCIgZm9ybUNvbnRyb2xOYW1lPVwic2VhcmNoXCIgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkZXJWYWxcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeCAqbmdJZj1cIiF1dGlscy5jb252ZXlTZWFyY2hJY29uKGZpbHRlckZvcm0udmFsdWUuc2VhcmNoKVwiPnNlYXJjaDwvbWF0LWljb24+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiQ2xlYXJcIiAqbmdJZj1cInV0aWxzLmNvbnZleVNlYXJjaEljb24oZmlsdGVyRm9ybS52YWx1ZS5zZWFyY2gpXCIgKGNsaWNrKT1cImZpbHRlckZvcm0ucmVzZXQoKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgYXV0b0FjdGl2ZUZpcnN0T3B0aW9uICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgY2xhc3M9XCJ3aG9sZV93aWR0aFwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnMgfCBhc3luY1wiIChvblNlbGVjdGlvbkNoYW5nZSk9XCJmaWx0ZXJTZWFyY2goJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb25cIj5cclxuICAgICAgICAgICAge3tvcHRpb24udHlwZSB8IHRpdGxlY2FzZSB9fToge3tvcHRpb25bJ2xhYmVsJ119fVxyXG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZm9ybT5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY2hpcC1saXN0XCI+XHJcbiAgICAgIDxtYXQtY2hpcC1saXN0ICNjaGlwTGlzdCBhcmlhLWxhYmVsPVwiRmlsdGVyIHNlbGVjdGlvblwiPlxyXG4gICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGZpbHRlcnNcIiAocmVtb3ZlZCk9XCJyZW1vdmVGcm9tRmlsdGVyKGZpbHRlcilcIj5cclxuICAgICAgICAgIHt7ZmlsdGVyLnR5cGUgfCB0aXRsZWNhc2UgfX06IHt7ZmlsdGVyLm5hbWV9fVxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXRDaGlwUmVtb3ZlPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+Y2FuY2VsPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbWF0LWNoaXA+XHJcbiAgICAgIDwvbWF0LWNoaXAtbGlzdD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxhcHAtcm91dGUtam9iY29kZS1saXN0IFt0eXBlXT1cIidqb2Jjb2RlJ1wiIFtzZWFyY2hUZXJtXT1cImZpbHRlcnNcIiBbZGF0YV09XCJsaXN0RGF0YVwiIFtsb2FkZXJdPVwibG9hZGVyVmFsXCIgKGNsZWFySm9iRGV0YWlsc0Zyb21MaXN0KT1cImNsZWFySm9iRGV0YWlscy5lbWl0KHRydWUpXCIgKHNob3dBbGxSb3V0ZSk9XCJmaWx0ZXJzID0gW107IGNsZWFySm9iRGV0YWlscy5lbWl0KHRydWUpXCIgKGVtaXRyb3V0ZSk9XCJnZXRSb3V0ZSgkZXZlbnQpXCI+PC9hcHAtcm91dGUtam9iY29kZS1saXN0PlxyXG48L2Rpdj5cclxuIl19
1
+ import { Component, EventEmitter, Output, Inject, Input } from '@angular/core';
2
+ import { map, startWith } from 'rxjs';
3
+ import { FormControl, FormGroup } from '@angular/forms';
4
+ import { Subject, takeUntil } from 'rxjs';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@aggdirect/coolmap-services";
7
+ import * as i2 from "@angular/common";
8
+ import * as i3 from "@angular/forms";
9
+ import * as i4 from "@angular/material/input";
10
+ import * as i5 from "@angular/material/form-field";
11
+ import * as i6 from "@angular/material/core";
12
+ import * as i7 from "@angular/material/icon";
13
+ import * as i8 from "@angular/material/autocomplete";
14
+ import * as i9 from "@angular/material/chips";
15
+ import * as i10 from "@angular/material/datepicker";
16
+ import * as i11 from "@angular/material/button";
17
+ import * as i12 from "../../../route-jobcode-list/route-jobcode-list.component";
18
+ export class JobCodeNavComponent {
19
+ constructor(utils, config) {
20
+ this.utils = utils;
21
+ this.config = config;
22
+ this.filterForm = new FormGroup({ search: new FormControl() });
23
+ this.listData = [];
24
+ this.loaderVal = false;
25
+ this.dateValue = new Date();
26
+ this.jobemit = new EventEmitter();
27
+ this.value = '';
28
+ this.filters = [];
29
+ this.clearJobDetails = new EventEmitter();
30
+ this.destroyer$ = new Subject();
31
+ this.selectedDate = this.utils.getDateFormat(new Date());
32
+ utils.navChangeObserve.pipe(takeUntil(this.destroyer$)).subscribe(res => {
33
+ if (res) {
34
+ this.loaderVal = false;
35
+ }
36
+ else
37
+ this.loaderVal = true;
38
+ });
39
+ }
40
+ ngOnChanges(changes) {
41
+ if (changes['customerRepoDetails'] && changes['customerRepoDetails']['currentValue']) {
42
+ this.loadData(this.selectedDate);
43
+ this.filters = [];
44
+ this.utils.clearViewRouteforJobCode.next(true);
45
+ }
46
+ }
47
+ loadData(value) {
48
+ this.selectedDate = value;
49
+ this.filteredOptions = this.filterForm.get('search')?.valueChanges.pipe(startWith(''), map(value => this.utils.filter(value, this.filters)));
50
+ this.utils.preventnavChange.next(false);
51
+ this.loaderVal = true;
52
+ let dataSet;
53
+ if (this.config.repository === 'customer') {
54
+ dataSet = {
55
+ date: value,
56
+ customer_id: this.customerRepoDetails.customer.id,
57
+ project_id: this.customerRepoDetails.projectId,
58
+ };
59
+ }
60
+ else {
61
+ dataSet = { date: value };
62
+ }
63
+ this.utils.postdata('jobs_report_v2', dataSet).pipe(takeUntil(this.destroyer$)).subscribe((res) => {
64
+ if (typeof res['data'] !== 'string') {
65
+ if (res['data'].length > 0)
66
+ this.listData = res['data'].map((ele) => { ele['date'] = value; return ele; });
67
+ this.listData.forEach((ele) => { this.utils.makeOptions(ele); });
68
+ }
69
+ else
70
+ this.listData = [];
71
+ this.clearJobDetails.emit(true);
72
+ this.utils.clearViewRouteforJobCode.next(true);
73
+ this.filters = [];
74
+ if (typeof res['data'] === 'string')
75
+ this.utils.preventnavChange.next(true);
76
+ }, (err) => { if (err)
77
+ this.utils.preventnavChange.next(true); });
78
+ }
79
+ getRoute(job) { if (job['type'] === 'jobcode') {
80
+ this.jobemit.emit(job);
81
+ } }
82
+ getDate(ev) { this.loadData(this.utils.getDateFormat(ev.value)); }
83
+ filterSearch(e) {
84
+ this.filterForm.controls.search.setValue(null);
85
+ this.filterForm.controls.search.updateValueAndValidity();
86
+ this.filters = [{ name: e.source.value.label, type: e.source.value.type, value: e.source.value }];
87
+ }
88
+ removeFromFilter(filter) {
89
+ const index = this.filters.indexOf(filter);
90
+ if (index >= 0) {
91
+ this.filters = [];
92
+ }
93
+ }
94
+ ngOnDestroy() {
95
+ this.destroyer$.next(true);
96
+ this.destroyer$.unsubscribe();
97
+ }
98
+ }
99
+ JobCodeNavComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: JobCodeNavComponent, deps: [{ token: i1.UtilsService }, { token: 'memberData' }], target: i0.ɵɵFactoryTarget.Component });
100
+ JobCodeNavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: JobCodeNavComponent, selector: "app-job-code-nav", inputs: { customerRepoDetails: "customerRepoDetails" }, outputs: { jobemit: "jobemit", clearJobDetails: "clearJobDetails" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"nav_body\">\n <div class=\"search-panel\">\n <div class=\"datepicker\">\n <mat-form-field>\n <mat-label>Choose a date</mat-label>\n <input readonly matInput (click)=\"picker.open()\" [disabled]=\"loaderVal\" [(ngModel)]=\"dateValue\" [matDatepicker]=\"picker\" (dateChange)=\"getDate($event)\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n </div>\n <div class=\"search\">\n <form [formGroup]=\"filterForm\">\n <mat-form-field class=\"full-width\" [class.disabled]=\"loaderVal\">\n <input matInput [matChipInputFor]=\"chipList\" formControlName=\"search\" [matAutocomplete]=\"auto\"\n [disabled]=\"loaderVal\" placeholder=\"Search\">\n <mat-icon matSuffix *ngIf=\"!utils.conveySearchIcon(filterForm.value.search)\">search</mat-icon>\n <button mat-button matSuffix mat-icon-button aria-label=\"Clear\" *ngIf=\"utils.conveySearchIcon(filterForm.value.search)\" (click)=\"filterForm.reset()\">\n <mat-icon>close</mat-icon>\n </button>\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" class=\"whole_width\">\n <mat-option *ngFor=\"let option of filteredOptions | async\" (onSelectionChange)=\"filterSearch($event)\"\n [value]=\"option\">\n {{option.type | titlecase }}: {{option['label']}}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n </form>\n\n </div>\n\n <div class=\"chip-list\">\n\n <!-- <mat-chip-listbox aria-label=\"Fish selection\">\n <mat-chip-option>One fish</mat-chip-option>\n <mat-chip-option>Two fish</mat-chip-option>\n <mat-chip-option color=\"accent\" selected>Accent fish</mat-chip-option>\n <mat-chip-option color=\"warn\">Warn fish</mat-chip-option>\n </mat-chip-listbox> -->\n\n\n <mat-chip-listbox #chipList aria-label=\"Filter selection\">\n <mat-chip-option *ngFor=\"let filter of filters\" (removed)=\"removeFromFilter(filter)\">\n {{filter.type | titlecase }}: {{filter.name}}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-option>\n </mat-chip-listbox>\n </div>\n </div>\n <app-route-jobcode-list [type]=\"'jobcode'\" [searchTerm]=\"filters\" [data]=\"listData\" [loader]=\"loaderVal\" (clearJobDetailsFromList)=\"clearJobDetails.emit(true)\" (showAllRoute)=\"filters = []; clearJobDetails.emit(true)\" (emitroute)=\"getRoute($event)\"></app-route-jobcode-list>\n</div>\n", styles: [".search-panel .datepicker,.search-panel .search{width:47%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i8.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i8.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i9.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "component", type: i9.MatChipListbox, selector: "mat-chip-listbox", inputs: ["tabIndex", "multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i9.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "selectable", "selected"], outputs: ["selectionChange"] }, { kind: "directive", type: i9.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i10.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i10.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i10.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i11.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i11.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i12.RouteJobCodeListComponent, selector: "app-route-jobcode-list", inputs: ["loader", "type", "data", "currentNav", "searchTerm", "clearListSeletion"], outputs: ["emitroute", "showAllRoute", "clearJobDetailsFromList"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TitleCasePipe, name: "titlecase" }] });
101
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: JobCodeNavComponent, decorators: [{
102
+ type: Component,
103
+ args: [{ selector: 'app-job-code-nav', template: "<div class=\"nav_body\">\n <div class=\"search-panel\">\n <div class=\"datepicker\">\n <mat-form-field>\n <mat-label>Choose a date</mat-label>\n <input readonly matInput (click)=\"picker.open()\" [disabled]=\"loaderVal\" [(ngModel)]=\"dateValue\" [matDatepicker]=\"picker\" (dateChange)=\"getDate($event)\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n </mat-form-field>\n </div>\n <div class=\"search\">\n <form [formGroup]=\"filterForm\">\n <mat-form-field class=\"full-width\" [class.disabled]=\"loaderVal\">\n <input matInput [matChipInputFor]=\"chipList\" formControlName=\"search\" [matAutocomplete]=\"auto\"\n [disabled]=\"loaderVal\" placeholder=\"Search\">\n <mat-icon matSuffix *ngIf=\"!utils.conveySearchIcon(filterForm.value.search)\">search</mat-icon>\n <button mat-button matSuffix mat-icon-button aria-label=\"Clear\" *ngIf=\"utils.conveySearchIcon(filterForm.value.search)\" (click)=\"filterForm.reset()\">\n <mat-icon>close</mat-icon>\n </button>\n <mat-autocomplete autoActiveFirstOption #auto=\"matAutocomplete\" class=\"whole_width\">\n <mat-option *ngFor=\"let option of filteredOptions | async\" (onSelectionChange)=\"filterSearch($event)\"\n [value]=\"option\">\n {{option.type | titlecase }}: {{option['label']}}\n </mat-option>\n </mat-autocomplete>\n </mat-form-field>\n </form>\n\n </div>\n\n <div class=\"chip-list\">\n\n <!-- <mat-chip-listbox aria-label=\"Fish selection\">\n <mat-chip-option>One fish</mat-chip-option>\n <mat-chip-option>Two fish</mat-chip-option>\n <mat-chip-option color=\"accent\" selected>Accent fish</mat-chip-option>\n <mat-chip-option color=\"warn\">Warn fish</mat-chip-option>\n </mat-chip-listbox> -->\n\n\n <mat-chip-listbox #chipList aria-label=\"Filter selection\">\n <mat-chip-option *ngFor=\"let filter of filters\" (removed)=\"removeFromFilter(filter)\">\n {{filter.type | titlecase }}: {{filter.name}}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-option>\n </mat-chip-listbox>\n </div>\n </div>\n <app-route-jobcode-list [type]=\"'jobcode'\" [searchTerm]=\"filters\" [data]=\"listData\" [loader]=\"loaderVal\" (clearJobDetailsFromList)=\"clearJobDetails.emit(true)\" (showAllRoute)=\"filters = []; clearJobDetails.emit(true)\" (emitroute)=\"getRoute($event)\"></app-route-jobcode-list>\n</div>\n", styles: [".search-panel .datepicker,.search-panel .search{width:47%}\n"] }]
104
+ }], ctorParameters: function () { return [{ type: i1.UtilsService }, { type: i1.CoolmapConfigModel, decorators: [{
105
+ type: Inject,
106
+ args: ['memberData']
107
+ }] }]; }, propDecorators: { jobemit: [{
108
+ type: Output
109
+ }], clearJobDetails: [{
110
+ type: Output
111
+ }], customerRepoDetails: [{
112
+ type: Input
113
+ }] } });
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLWNvZGUtbmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvb2xtYXAvc3JjL2xpYi9jb21wb25lbnQvbmF2L2xheW91dC9qb2ItY29kZS1uYXYvam9iLWNvZGUtbmF2LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvb2xtYXAvc3JjL2xpYi9jb21wb25lbnQvbmF2L2xheW91dC9qb2ItY29kZS1uYXYvam9iLWNvZGUtbmF2LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsWUFBWSxFQUFFLE1BQU0sRUFBYSxNQUFNLEVBQUUsS0FBSyxFQUE2QixNQUFNLGVBQWUsQ0FBQztBQUU3SCxPQUFPLEVBQUUsR0FBRyxFQUFjLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7OztBQVExQyxNQUFNLE9BQU8sbUJBQW1CO0lBYzlCLFlBQW1CLEtBQW1CLEVBQ04sTUFBMEI7UUFEdkMsVUFBSyxHQUFMLEtBQUssQ0FBYztRQUNOLFdBQU0sR0FBTixNQUFNLENBQW9CO1FBZDFELGVBQVUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxRCxhQUFRLEdBQVksRUFBRSxDQUFDO1FBQ3ZCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0IsY0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDTixZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM5QyxVQUFLLEdBQUcsRUFBRSxDQUFD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c0IsRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFBO0lBQ2xHLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxNQUFXO1FBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTtZQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFBO1NBQUU7SUFDdkMsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2hDLENBQUM7O2lIQXJFVSxtQkFBbUIsOENBZXBCLFlBQVk7cUdBZlgsbUJBQW1CLDBNQ2JoQyxtbUZBb0RBOzRGRHZDYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0Usa0JBQWtCOzswQkFtQnpCLE1BQU07MkJBQUMsWUFBWTs0Q0FWTCxPQUFPO3NCQUF2QixNQUFNO2dCQUlVLGVBQWU7c0JBQS9CLE1BQU07Z0JBRVMsbUJBQW1CO3NCQUFsQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBPbkRlc3Ryb3ksIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyAgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmludGVyZmFjZSBGaWx0ZXIgeyBuYW1lPzogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IHZhbHVlOiBhbnk7IGxhYmVsPzogc3RyaW5nOyB9XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvb2xtYXBDb25maWdNb2RlbCwgQ3VzdG9tZXJSZXBvRGV0YWlsc01vZGVsLCBSb3V0ZSwgVXRpbHNTZXJ2aWNlIH0gZnJvbSAnQGFnZ2RpcmVjdC9jb29sbWFwLXNlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWpvYi1jb2RlLW5hdicsXG4gIHRlbXBsYXRlVXJsOiAnLi9qb2ItY29kZS1uYXYuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9qb2ItY29kZS1uYXYuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBKb2JDb2RlTmF2Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBmaWx0ZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7IHNlYXJjaDogbmV3IEZvcm1Db250cm9sKCkgfSk7XG4gIGxpc3REYXRhOiBSb3V0ZVtdID0gW107XG4gIGxvYWRlclZhbDogYm9vbGVhbiA9IGZhbHNlO1xuICBkYXRlVmFsdWUgPSBuZXcgRGF0ZSgpO1xuICBAT3V0cHV0KCkgcHVibGljIGpvYmVtaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHZhbHVlID0gJyc7XG4gIGZpbHRlcmVkT3B0aW9ucyE6IE9ic2VydmFibGU8YW55W10+IHwgdW5kZWZpbmVkO1xuICBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICBAT3V0cHV0KCkgcHVibGljIGNsZWFySm9iRGV0YWlscyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIGRlc3Ryb3llciQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tZXJSZXBvRGV0YWlscyE6IEN1c3RvbWVyUmVwb0RldGFpbHNNb2RlbDtcbiAgc2VsZWN0ZWREYXRlOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHV0aWxzOiBVdGlsc1NlcnZpY2UsXG4gICAgQEluamVjdCgnbWVtYmVyRGF0YScpIHByaXZhdGUgY29uZmlnOiBDb29sbWFwQ29uZmlnTW9kZWwpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gdGhpcy51dGlscy5nZXREYXRlRm9ybWF0KG5ldyBEYXRlKCkpO1xuICAgIHV0aWxzLm5hdkNoYW5nZU9ic2VydmUucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZXIkKSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICBpZiAocmVzKSB7IHRoaXMubG9hZGVyVmFsID0gZmFsc2UgfSBlbHNlIHRoaXMubG9hZGVyVmFsID0gdHJ1ZVxuICAgIH0pO1xuICB9XG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snY3VzdG9tZXJSZXBvRGV0YWlscyddICYmIGNoYW5nZXNbJ2N1c3RvbWVyUmVwb0RldGFpbHMnXVsnY3VycmVudFZhbHVlJ10pIHtcbiAgICAgIHRoaXMubG9hZERhdGEodGhpcy5zZWxlY3RlZERhdGUpOyB0aGlzLmZpbHRlcnMgPSBbXTtcbiAgICAgIHRoaXMudXRpbHMuY2xlYXJWaWV3Um91dGVmb3JKb2JDb2RlLm5leHQodHJ1ZSk7XG4gICAgfVxuICB9XG4gIGxvYWREYXRhKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHZhbHVlO1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5maWx0ZXJGb3JtLmdldCgnc2VhcmNoJyk/LnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCgnJyksXG4gICAgICBtYXAodmFsdWUgPT4gdGhpcy51dGlscy5maWx0ZXIodmFsdWUsIHRoaXMuZmlsdGVycykpLFxuICAgICk7XG4gICAgdGhpcy51dGlscy5wcmV2ZW50bmF2Q2hhbmdlLm5leHQoZmFsc2UpO1xuICAgIHRoaXMubG9hZGVyVmFsID0gdHJ1ZTtcbiAgICBsZXQgZGF0YVNldDtcbiAgICBpZiAodGhpcy5jb25maWcucmVwb3NpdG9yeSA9PT0gJ2N1c3RvbWVyJykge1xuICAgICAgZGF0YVNldCA9IHtcbiAgICAgICAgZGF0ZTogdmFsdWUsXG4gICAgICAgIGN1c3RvbWVyX2lkOiB0aGlzLmN1c3RvbWVyUmVwb0RldGFpbHMuY3VzdG9tZXIuaWQsXG4gICAgICAgIHByb2plY3RfaWQ6IHRoaXMuY3VzdG9tZXJSZXBvRGV0YWlscy5wcm9qZWN0SWQsXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGFTZXQgPSB7IGRhdGU6IHZhbHVlIH07XG4gICAgfVxuICAgIHRoaXMudXRpbHMucG9zdGRhdGEoJ2pvYnNfcmVwb3J0X3YyJywgZGF0YVNldCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZXIkKSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiByZXNbJ2RhdGEnXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHJlc1snZGF0YSddLmxlbmd0aCA+IDApIHRoaXMubGlzdERhdGEgPSByZXNbJ2RhdGEnXS5tYXAoKGVsZTogUm91dGUpID0+IHtlbGVbJ2RhdGUnXSA9IHZhbHVlOyByZXR1cm4gZWxlfSk7XG4gICAgICAgIHRoaXMubGlzdERhdGEuZm9yRWFjaCgoZWxlOiBSb3V0ZSkgPT4geyAgdGhpcy51dGlscy5tYWtlT3B0aW9ucyhlbGUpIH0pO1xuICAgICAgfSBlbHNlIHRoaXMubGlzdERhdGEgPSBbXTtcbiAgICAgIHRoaXMuY2xlYXJKb2JEZXRhaWxzLmVtaXQodHJ1ZSk7XG4gICAgICB0aGlzLnV0aWxzLmNsZWFyVmlld1JvdXRlZm9ySm9iQ29kZS5uZXh0KHRydWUpO1xuICAgICAgdGhpcy5maWx0ZXJzID0gW107XG4gICAgICBpZiAodHlwZW9mIHJlc1snZGF0YSddID09PSAnc3RyaW5nJykgdGhpcy51dGlscy5wcmV2ZW50bmF2Q2hhbmdlLm5leHQodHJ1ZSk7XG4gICAgfSwgKGVycikgPT4geyBpZiAoZXJyKSB0aGlzLnV0aWxzLnByZXZlbnRuYXZDaGFuZ2UubmV4dCh0cnVlKSB9KTtcbiAgfVxuICBnZXRSb3V0ZShqb2I6IFJvdXRlKSB7IGlmKGpvYlsndHlwZSddID09PSAnam9iY29kZScpeyB0aGlzLmpvYmVtaXQuZW1pdChqb2IpfSB9XG4gIGdldERhdGUoZXY6IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50PERhdGU+KXt0aGlzLmxvYWREYXRhKHRoaXMudXRpbHMuZ2V0RGF0ZUZvcm1hdChldi52YWx1ZSkpfVxuICBmaWx0ZXJTZWFyY2goZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJGb3JtLmNvbnRyb2xzLnNlYXJjaC5zZXRWYWx1ZShudWxsKTtcbiAgICB0aGlzLmZpbHRlckZvcm0uY29udHJvbHMuc2VhcmNoLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB0aGlzLmZpbHRlcnMgPSBbeyBuYW1lOiBlLnNvdXJjZS52YWx1ZS5sYWJlbCwgdHlwZTogZS5zb3VyY2UudmFsdWUudHlwZSwgdmFsdWU6IGUuc291cmNlLnZhbHVlfV1cbiAgfVxuICByZW1vdmVGcm9tRmlsdGVyKGZpbHRlcjogYW55KTogdm9pZCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbHRlcnMuaW5kZXhPZihmaWx0ZXIpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7IHRoaXMuZmlsdGVycyA9IFtdIH1cbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3llciQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmRlc3Ryb3llciQudW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm5hdl9ib2R5XCI+XG4gIDxkaXYgY2xhc3M9XCJzZWFyY2gtcGFuZWxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlclwiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPkNob29zZSBhIGRhdGU8L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IHJlYWRvbmx5IG1hdElucHV0IChjbGljayk9XCJwaWNrZXIub3BlbigpXCIgW2Rpc2FibGVkXT1cImxvYWRlclZhbFwiICBbKG5nTW9kZWwpXT1cImRhdGVWYWx1ZVwiIFttYXREYXRlcGlja2VyXT1cInBpY2tlclwiIChkYXRlQ2hhbmdlKT1cImdldERhdGUoJGV2ZW50KVwiPlxuICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlcj48L21hdC1kYXRlcGlja2VyPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic2VhcmNoXCI+XG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmdWxsLXdpZHRoXCIgW2NsYXNzLmRpc2FibGVkXT1cImxvYWRlclZhbFwiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW21hdENoaXBJbnB1dEZvcl09XCJjaGlwTGlzdFwiIGZvcm1Db250cm9sTmFtZT1cInNlYXJjaFwiIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRlclZhbFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCI+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeCAqbmdJZj1cIiF1dGlscy5jb252ZXlTZWFyY2hJY29uKGZpbHRlckZvcm0udmFsdWUuc2VhcmNoKVwiPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIkNsZWFyXCIgKm5nSWY9XCJ1dGlscy5jb252ZXlTZWFyY2hJY29uKGZpbHRlckZvcm0udmFsdWUuc2VhcmNoKVwiIChjbGljayk9XCJmaWx0ZXJGb3JtLnJlc2V0KClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlIGF1dG9BY3RpdmVGaXJzdE9wdGlvbiAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIGNsYXNzPVwid2hvbGVfd2lkdGhcIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9ucyB8IGFzeW5jXCIgKG9uU2VsZWN0aW9uQ2hhbmdlKT1cImZpbHRlclNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb25cIj5cbiAgICAgICAgICAgIHt7b3B0aW9uLnR5cGUgfCB0aXRsZWNhc2UgfX06IHt7b3B0aW9uWydsYWJlbCddfX1cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9mb3JtPlxuXG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2hpcC1saXN0XCI+XG5cbiAgICAgIDwhLS0gPG1hdC1jaGlwLWxpc3Rib3ggYXJpYS1sYWJlbD1cIkZpc2ggc2VsZWN0aW9uXCI+XG4gICAgICAgIDxtYXQtY2hpcC1vcHRpb24+T25lIGZpc2g8L21hdC1jaGlwLW9wdGlvbj5cbiAgICAgICAgPG1hdC1jaGlwLW9wdGlvbj5Ud28gZmlzaDwvbWF0LWNoaXAtb3B0aW9uPlxuICAgICAgICA8bWF0LWNoaXAtb3B0aW9uIGNvbG9yPVwiYWNjZW50XCIgc2VsZWN0ZWQ+QWNjZW50IGZpc2g8L21hdC1jaGlwLW9wdGlvbj5cbiAgICAgICAgPG1hdC1jaGlwLW9wdGlvbiBjb2xvcj1cIndhcm5cIj5XYXJuIGZpc2g8L21hdC1jaGlwLW9wdGlvbj5cbiAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD4gLS0+XG5cblxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggICNjaGlwTGlzdCBhcmlhLWxhYmVsPVwiRmlsdGVyIHNlbGVjdGlvblwiPlxuICAgICAgICA8bWF0LWNoaXAtb3B0aW9uICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgZmlsdGVyc1wiIChyZW1vdmVkKT1cInJlbW92ZUZyb21GaWx0ZXIoZmlsdGVyKVwiPlxuICAgICAgICAgIHt7ZmlsdGVyLnR5cGUgfCB0aXRsZWNhc2UgfX06IHt7ZmlsdGVyLm5hbWV9fVxuICAgICAgICAgIDxidXR0b24gbWF0Q2hpcFJlbW92ZT5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L21hdC1jaGlwLW9wdGlvbj5cbiAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxhcHAtcm91dGUtam9iY29kZS1saXN0IFt0eXBlXT1cIidqb2Jjb2RlJ1wiIFtzZWFyY2hUZXJtXT1cImZpbHRlcnNcIiBbZGF0YV09XCJsaXN0RGF0YVwiIFtsb2FkZXJdPVwibG9hZGVyVmFsXCIgKGNsZWFySm9iRGV0YWlsc0Zyb21MaXN0KT1cImNsZWFySm9iRGV0YWlscy5lbWl0KHRydWUpXCIgKHNob3dBbGxSb3V0ZSk9XCJmaWx0ZXJzID0gW107IGNsZWFySm9iRGV0YWlscy5lbWl0KHRydWUpXCIgKGVtaXRyb3V0ZSk9XCJnZXRSb3V0ZSgkZXZlbnQpXCI+PC9hcHAtcm91dGUtam9iY29kZS1saXN0PlxuPC9kaXY+XG4iXX0=
@@ -1,52 +1,52 @@
1
- import { Component, EventEmitter, Output } from '@angular/core';
2
- import { Subject, takeUntil } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@aggdirect/coolmap-services";
5
- import * as i2 from "@angular/common";
6
- import * as i3 from "@angular/material/tooltip";
7
- import * as i4 from "@angular/material/button";
8
- export class NavComponent {
9
- constructor(utils, coolMap) {
10
- this.utils = utils;
11
- this.coolMap = coolMap;
12
- this.drawer = new EventEmitter();
13
- this.changeNav = new EventEmitter();
14
- this.navValue = 'Jobcode';
15
- this.isnavChange = true;
16
- this.paddinForJobCode = { top: 0, bottom: 250, left: 500, right: 400 };
17
- this.paddinForViewRoute = { top: 0, bottom: 400, left: 400, right: 0 };
18
- this.destroyer$ = new Subject();
19
- this.utils.navChangeObserve.pipe(takeUntil(this.destroyer$)).subscribe(res => { this.isnavChange = res; });
20
- this.coolMap.setPadding(this.paddinForJobCode);
21
- }
22
- openDrawer() { this.drawer.emit(true); }
23
- chnageNav(name) {
24
- if (this.isnavChange) {
25
- this.changeNav.emit(name);
26
- this.navValue = name;
27
- this.coolMap.clearBound();
28
- if (name === 'Addroute') {
29
- this.coolMap.setPadding(this.paddinForViewRoute);
30
- }
31
- else {
32
- this.coolMap.setPadding(this.paddinForJobCode);
33
- }
34
- this.utils.clearOptions();
35
- }
36
- }
37
- ngOnDestroy() {
38
- this.destroyer$.next(true);
39
- this.destroyer$.unsubscribe();
40
- }
41
- }
42
- NavComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NavComponent, deps: [{ token: i1.UtilsService }, { token: i1.CoolmapService }], target: i0.ɵɵFactoryTarget.Component });
43
- NavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: NavComponent, selector: "app-nav", outputs: { drawer: "drawer", changeNav: "changeNav" }, ngImport: i0, template: "<div class=\"nav\">\r\n <button (click)=\"openDrawer()\" class=\"toggle\">\r\n <img src=\"assets/images/toggle.svg\" alt=\"\" />\r\n </button>\r\n\r\n <ul class=\"m-100\">\r\n <li [ngClass]=\"{'active': navValue === 'Jobcode'}\">\r\n <a mat-raised-button #tooltip=\"matTooltip\" matTooltip=\"Job Code\" aria-label=\"Job-code\" (click)=\"chnageNav('Jobcode')\">\r\n <img src=\"assets/images/job-code.svg\" alt=\"\" />\r\n </a>\r\n </li>\r\n\r\n <li [ngClass]=\"{'active': navValue === 'Addroute', 'disabled': !isnavChange }\">\r\n <a mat-raised-button #tooltip=\"matTooltip\" matTooltip=\"View Route\" aria-label=\"View-route\" (click)=\"chnageNav('Addroute')\">\r\n <img src=\"assets/images/route.svg\" alt=\"\" />\r\n </a>\r\n </li>\r\n </ul>\r\n</div>\r\n", styles: [".nav{background:#e8e8e8;height:100vh;padding:15px 0;display:flex;align-items:center;flex-direction:column}.nav button{background:white;border-radius:15px;padding:5px 6px}.nav button img{width:28px}.nav ul{display:flex;flex-direction:column;align-items:center}.nav ul li{margin:10px 0;padding:0 5px;border-right:2px solid #e8e8e8}.nav ul li:hover{border-right:2px solid #326ad3;padding:0 5px}.nav ul li.disabled a{pointer-events:none;opacity:.5}.nav ul li.disabled:hover{border-right:2px solid #e8e8e8}.nav ul li a{padding:6px 0;display:block;border-radius:15px;min-width:42px;box-shadow:none;line-height:30px}.nav ul li a img{width:27px}.nav ul li a:hover{background:white}.nav ul li a:hover img{filter:invert(.2) sepia(1) saturate(8) hue-rotate(180deg)}.nav ul li.active{border-right:2px solid #326ad3}.nav ul li.active a{background:white}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i4.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }] });
44
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: NavComponent, decorators: [{
45
- type: Component,
46
- args: [{ selector: 'app-nav', template: "<div class=\"nav\">\r\n <button (click)=\"openDrawer()\" class=\"toggle\">\r\n <img src=\"assets/images/toggle.svg\" alt=\"\" />\r\n </button>\r\n\r\n <ul class=\"m-100\">\r\n <li [ngClass]=\"{'active': navValue === 'Jobcode'}\">\r\n <a mat-raised-button #tooltip=\"matTooltip\" matTooltip=\"Job Code\" aria-label=\"Job-code\" (click)=\"chnageNav('Jobcode')\">\r\n <img src=\"assets/images/job-code.svg\" alt=\"\" />\r\n </a>\r\n </li>\r\n\r\n <li [ngClass]=\"{'active': navValue === 'Addroute', 'disabled': !isnavChange }\">\r\n <a mat-raised-button #tooltip=\"matTooltip\" matTooltip=\"View Route\" aria-label=\"View-route\" (click)=\"chnageNav('Addroute')\">\r\n <img src=\"assets/images/route.svg\" alt=\"\" />\r\n </a>\r\n </li>\r\n </ul>\r\n</div>\r\n", styles: [".nav{background:#e8e8e8;height:100vh;padding:15px 0;display:flex;align-items:center;flex-direction:column}.nav button{background:white;border-radius:15px;padding:5px 6px}.nav button img{width:28px}.nav ul{display:flex;flex-direction:column;align-items:center}.nav ul li{margin:10px 0;padding:0 5px;border-right:2px solid #e8e8e8}.nav ul li:hover{border-right:2px solid #326ad3;padding:0 5px}.nav ul li.disabled a{pointer-events:none;opacity:.5}.nav ul li.disabled:hover{border-right:2px solid #e8e8e8}.nav ul li a{padding:6px 0;display:block;border-radius:15px;min-width:42px;box-shadow:none;line-height:30px}.nav ul li a img{width:27px}.nav ul li a:hover{background:white}.nav ul li a:hover img{filter:invert(.2) sepia(1) saturate(8) hue-rotate(180deg)}.nav ul li.active{border-right:2px solid #326ad3}.nav ul li.active a{background:white}\n"] }]
47
- }], ctorParameters: function () { return [{ type: i1.UtilsService }, { type: i1.CoolmapService }]; }, propDecorators: { drawer: [{
48
- type: Output
49
- }], changeNav: [{
50
- type: Output
51
- }] } });
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvb2xtYXAvc3JjL2xpYi9jb21wb25lbnQvbmF2L25hdi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb29sbWFwL3NyYy9saWIvY29tcG9uZW50L25hdi9uYXYuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRTNFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7QUFPMUMsTUFBTSxPQUFPLFlBQVk7SUFTdkIsWUFBbUIsS0FBbUIsRUFBUyxPQUF1QjtRQUFuRCxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQVMsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFSckQsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDckMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDeEQsYUFBUSxHQUFXLFNBQVMsQ0FBQztRQUM3QixnQkFBVyxHQUFZLElBQUksQ0FBQztRQUM1QixxQkFBZ0IsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNsRSx1QkFBa0IsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUMzRCxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUd6QyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN6RyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsVUFBVSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUN2QyxTQUFTLENBQUMsSUFBWTtRQUNwQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDM0UsSUFBSSxJQUFJLEtBQUssVUFBVSxFQUFFO2dCQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO2FBQUU7aUJBQ3hFO2dCQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO2FBQUU7WUFDdkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUMzQjtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNoQyxDQUFDOzt5R0EzQlUsWUFBWTs2RkFBWixZQUFZLHNHQ1R6Qiw0eUJBbUJBOzJGRFZhLFlBQVk7a0JBTHhCLFNBQVM7K0JBQ0UsU0FBUztnSUFLRixNQUFNO3NCQUF0QixNQUFNO2dCQUNVLFNBQVM7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29vbG1hcFNlcnZpY2UsIFV0aWxzU2VydmljZSB9IGZyb20gJ0BhZ2dkaXJlY3QvY29vbG1hcC1zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtbmF2JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmF2LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9uYXYuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmF2Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICBAT3V0cHV0KCkgcHVibGljIGRyYXdlciA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgcHVibGljIGNoYW5nZU5hdiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIG5hdlZhbHVlOiBzdHJpbmcgPSAnSm9iY29kZSc7XHJcbiAgaXNuYXZDaGFuZ2U6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHBhZGRpbkZvckpvYkNvZGUgPSB7IHRvcDogMCwgYm90dG9tOiAyNTAsIGxlZnQ6IDUwMCwgcmlnaHQ6IDQwMCB9O1xyXG4gIHBhZGRpbkZvclZpZXdSb3V0ZSA9IHsgdG9wOiAwLCBib3R0b206IDQwMCwgbGVmdDogNDAwLCByaWdodDogMCB9O1xyXG4gIHB1YmxpYyBkZXN0cm95ZXIkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIHV0aWxzOiBVdGlsc1NlcnZpY2UsIHB1YmxpYyBjb29sTWFwOiBDb29sbWFwU2VydmljZSkge1xyXG4gICAgdGhpcy51dGlscy5uYXZDaGFuZ2VPYnNlcnZlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVyJCkpLnN1YnNjcmliZShyZXMgPT4geyB0aGlzLmlzbmF2Q2hhbmdlID0gcmVzIH0pXHJcbiAgICB0aGlzLmNvb2xNYXAuc2V0UGFkZGluZyh0aGlzLnBhZGRpbkZvckpvYkNvZGUpO1xyXG4gIH1cclxuXHJcbiAgb3BlbkRyYXdlcigpIHsgdGhpcy5kcmF3ZXIuZW1pdCh0cnVlKSB9XHJcbiAgY2huYWdlTmF2KG5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNuYXZDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VOYXYuZW1pdChuYW1lKTsgdGhpcy5uYXZWYWx1ZSA9IG5hbWU7IHRoaXMuY29vbE1hcC5jbGVhckJvdW5kKCk7XHJcbiAgICAgIGlmIChuYW1lID09PSAnQWRkcm91dGUnKSB7IHRoaXMuY29vbE1hcC5zZXRQYWRkaW5nKHRoaXMucGFkZGluRm9yVmlld1JvdXRlKSB9XHJcbiAgICAgIGVsc2UgeyB0aGlzLmNvb2xNYXAuc2V0UGFkZGluZyh0aGlzLnBhZGRpbkZvckpvYkNvZGUpIH1cclxuICAgICAgdGhpcy51dGlscy5jbGVhck9wdGlvbnMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95ZXIkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3llciQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cIm5hdlwiPlxyXG4gIDxidXR0b24gKGNsaWNrKT1cIm9wZW5EcmF3ZXIoKVwiIGNsYXNzPVwidG9nZ2xlXCI+XHJcbiAgICA8aW1nIHNyYz1cImFzc2V0cy9pbWFnZXMvdG9nZ2xlLnN2Z1wiIGFsdD1cIlwiIC8+XHJcbiAgPC9idXR0b24+XHJcblxyXG4gIDx1bCBjbGFzcz1cIm0tMTAwXCI+XHJcbiAgICA8bGkgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBuYXZWYWx1ZSA9PT0gJ0pvYmNvZGUnfVwiPlxyXG4gICAgICA8YSBtYXQtcmFpc2VkLWJ1dHRvbiAjdG9vbHRpcD1cIm1hdFRvb2x0aXBcIiBtYXRUb29sdGlwPVwiSm9iIENvZGVcIiBhcmlhLWxhYmVsPVwiSm9iLWNvZGVcIiAoY2xpY2spPVwiY2huYWdlTmF2KCdKb2Jjb2RlJylcIj5cclxuICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pbWFnZXMvam9iLWNvZGUuc3ZnXCIgYWx0PVwiXCIgLz5cclxuICAgICAgPC9hPlxyXG4gICAgPC9saT5cclxuXHJcbiAgICA8bGkgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBuYXZWYWx1ZSA9PT0gJ0FkZHJvdXRlJywgJ2Rpc2FibGVkJzogIWlzbmF2Q2hhbmdlIH1cIj5cclxuICAgICAgPGEgbWF0LXJhaXNlZC1idXR0b24gI3Rvb2x0aXA9XCJtYXRUb29sdGlwXCIgbWF0VG9vbHRpcD1cIlZpZXcgUm91dGVcIiBhcmlhLWxhYmVsPVwiVmlldy1yb3V0ZVwiIChjbGljayk9XCJjaG5hZ2VOYXYoJ0FkZHJvdXRlJylcIj5cclxuICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pbWFnZXMvcm91dGUuc3ZnXCIgYWx0PVwiXCIgLz5cclxuICAgICAgPC9hPlxyXG4gICAgPC9saT5cclxuICA8L3VsPlxyXG48L2Rpdj5cclxuIl19
1
+ import { Component, EventEmitter, Output } from '@angular/core';
2
+ import { Subject, takeUntil } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@aggdirect/coolmap-services";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "@angular/material/tooltip";
7
+ import * as i4 from "@angular/material/button";
8
+ export class NavComponent {
9
+ constructor(utils, coolMap) {
10
+ this.utils = utils;
11
+ this.coolMap = coolMap;
12
+ this.drawer = new EventEmitter();
13
+ this.changeNav = new EventEmitter();
14
+ this.navValue = 'Jobcode';
15
+ this.isnavChange = true;
16
+ this.paddinForJobCode = { top: 0, bottom: 250, left: 500, right: 400 };
17
+ this.paddinForViewRoute = { top: 0, bottom: 400, left: 400, right: 0 };
18
+ this.destroyer$ = new Subject();
19
+ this.utils.navChangeObserve.pipe(takeUntil(this.destroyer$)).subscribe(res => { this.isnavChange = res; });
20
+ this.coolMap.setPadding(this.paddinForJobCode);
21
+ }
22
+ openDrawer() { this.drawer.emit(true); }
23
+ chnageNav(name) {
24
+ if (this.isnavChange) {
25
+ this.changeNav.emit(name);
26
+ this.navValue = name;
27
+ this.coolMap.clearBound();
28
+ if (name === 'Addroute') {
29
+ this.coolMap.setPadding(this.paddinForViewRoute);
30
+ }
31
+ else {
32
+ this.coolMap.setPadding(this.paddinForJobCode);
33
+ }
34
+ this.utils.clearOptions();
35
+ }
36
+ }
37
+ ngOnDestroy() {
38
+ this.destroyer$.next(true);
39
+ this.destroyer$.unsubscribe();
40
+ }
41
+ }
42
+ NavComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NavComponent, deps: [{ token: i1.UtilsService }, { token: i1.CoolmapService }], target: i0.ɵɵFactoryTarget.Component });
43
+ NavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: NavComponent, selector: "app-nav", outputs: { drawer: "drawer", changeNav: "changeNav" }, ngImport: i0, template: "<div class=\"nav\">\n <button (click)=\"openDrawer()\" class=\"toggle\">\n <img src=\"assets/images/toggle.svg\" alt=\"\" />\n </button>\n\n <ul class=\"m-100\">\n <li [ngClass]=\"{'active': navValue === 'Jobcode'}\">\n <a mat-raised-button #tooltip=\"matTooltip\" matTooltip=\"Job Code\" aria-label=\"Job-code\" (click)=\"chnageNav('Jobcode')\">\n <img src=\"assets/images/job-code.svg\" alt=\"\" />\n </a>\n </li>\n\n <li [ngClass]=\"{'active': navValue === 'Addroute', 'disabled': !isnavChange }\">\n <a mat-raised-button #tooltip=\"matTooltip\" matTooltip=\"View Route\" aria-label=\"View-route\" (click)=\"chnageNav('Addroute')\">\n <img src=\"assets/images/route.svg\" alt=\"\" />\n </a>\n </li>\n </ul>\n</div>\n", styles: [".nav{background:#e8e8e8;height:100vh;padding:15px 0;display:flex;align-items:center;flex-direction:column}.nav button{background:white;border-radius:15px;padding:5px 6px}.nav button img{width:28px}.nav ul{display:flex;flex-direction:column;align-items:center}.nav ul li{margin:10px 0;padding:0 5px;border-right:2px solid #e8e8e8}.nav ul li:hover{border-right:2px solid #326ad3;padding:0 5px}.nav ul li.disabled a{pointer-events:none;opacity:.5}.nav ul li.disabled:hover{border-right:2px solid #e8e8e8}.nav ul li a{padding:6px 0;display:block;border-radius:15px;min-width:42px;box-shadow:none;line-height:30px}.nav ul li a img{width:27px}.nav ul li a:hover{background:white}.nav ul li a:hover img{filter:invert(.2) sepia(1) saturate(8) hue-rotate(180deg)}.nav ul li.active{border-right:2px solid #326ad3}.nav ul li.active a{background:white}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i4.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }] });
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NavComponent, decorators: [{
45
+ type: Component,
46
+ args: [{ selector: 'app-nav', template: "<div class=\"nav\">\n <button (click)=\"openDrawer()\" class=\"toggle\">\n <img src=\"assets/images/toggle.svg\" alt=\"\" />\n </button>\n\n <ul class=\"m-100\">\n <li [ngClass]=\"{'active': navValue === 'Jobcode'}\">\n <a mat-raised-button #tooltip=\"matTooltip\" matTooltip=\"Job Code\" aria-label=\"Job-code\" (click)=\"chnageNav('Jobcode')\">\n <img src=\"assets/images/job-code.svg\" alt=\"\" />\n </a>\n </li>\n\n <li [ngClass]=\"{'active': navValue === 'Addroute', 'disabled': !isnavChange }\">\n <a mat-raised-button #tooltip=\"matTooltip\" matTooltip=\"View Route\" aria-label=\"View-route\" (click)=\"chnageNav('Addroute')\">\n <img src=\"assets/images/route.svg\" alt=\"\" />\n </a>\n </li>\n </ul>\n</div>\n", styles: [".nav{background:#e8e8e8;height:100vh;padding:15px 0;display:flex;align-items:center;flex-direction:column}.nav button{background:white;border-radius:15px;padding:5px 6px}.nav button img{width:28px}.nav ul{display:flex;flex-direction:column;align-items:center}.nav ul li{margin:10px 0;padding:0 5px;border-right:2px solid #e8e8e8}.nav ul li:hover{border-right:2px solid #326ad3;padding:0 5px}.nav ul li.disabled a{pointer-events:none;opacity:.5}.nav ul li.disabled:hover{border-right:2px solid #e8e8e8}.nav ul li a{padding:6px 0;display:block;border-radius:15px;min-width:42px;box-shadow:none;line-height:30px}.nav ul li a img{width:27px}.nav ul li a:hover{background:white}.nav ul li a:hover img{filter:invert(.2) sepia(1) saturate(8) hue-rotate(180deg)}.nav ul li.active{border-right:2px solid #326ad3}.nav ul li.active a{background:white}\n"] }]
47
+ }], ctorParameters: function () { return [{ type: i1.UtilsService }, { type: i1.CoolmapService }]; }, propDecorators: { drawer: [{
48
+ type: Output
49
+ }], changeNav: [{
50
+ type: Output
51
+ }] } });
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvb2xtYXAvc3JjL2xpYi9jb21wb25lbnQvbmF2L25hdi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb29sbWFwL3NyYy9saWIvY29tcG9uZW50L25hdi9uYXYuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRTNFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7QUFPMUMsTUFBTSxPQUFPLFlBQVk7SUFTdkIsWUFBbUIsS0FBbUIsRUFBUyxPQUF1QjtRQUFuRCxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQVMsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFSckQsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDckMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDeEQsYUFBUSxHQUFXLFNBQVMsQ0FBQztRQUM3QixnQkFBVyxHQUFZLElBQUksQ0FBQztRQUM1QixxQkFBZ0IsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNsRSx1QkFBa0IsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUMzRCxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUd6QyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN6RyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsVUFBVSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUN2QyxTQUFTLENBQUMsSUFBWTtRQUNwQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDM0UsSUFBSSxJQUFJLEtBQUssVUFBVSxFQUFFO2dCQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO2FBQUU7aUJBQ3hFO2dCQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO2FBQUU7WUFDdkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUMzQjtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNoQyxDQUFDOzswR0EzQlUsWUFBWTs4RkFBWixZQUFZLHNHQ1R6Qixzd0JBbUJBOzRGRFZhLFlBQVk7a0JBTHhCLFNBQVM7K0JBQ0UsU0FBUztnSUFLRixNQUFNO3NCQUF0QixNQUFNO2dCQUNVLFNBQVM7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvb2xtYXBTZXJ2aWNlLCBVdGlsc1NlcnZpY2UgfSBmcm9tICdAYWdnZGlyZWN0L2Nvb2xtYXAtc2VydmljZXMnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1uYXYnLFxuICB0ZW1wbGF0ZVVybDogJy4vbmF2LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbmF2LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTmF2Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgQE91dHB1dCgpIHB1YmxpYyBkcmF3ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgY2hhbmdlTmF2ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIG5hdlZhbHVlOiBzdHJpbmcgPSAnSm9iY29kZSc7XG4gIGlzbmF2Q2hhbmdlOiBib29sZWFuID0gdHJ1ZTtcbiAgcGFkZGluRm9ySm9iQ29kZSA9IHsgdG9wOiAwLCBib3R0b206IDI1MCwgbGVmdDogNTAwLCByaWdodDogNDAwIH07XG4gIHBhZGRpbkZvclZpZXdSb3V0ZSA9IHsgdG9wOiAwLCBib3R0b206IDQwMCwgbGVmdDogNDAwLCByaWdodDogMCB9O1xuICBwdWJsaWMgZGVzdHJveWVyJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHV0aWxzOiBVdGlsc1NlcnZpY2UsIHB1YmxpYyBjb29sTWFwOiBDb29sbWFwU2VydmljZSkge1xuICAgIHRoaXMudXRpbHMubmF2Q2hhbmdlT2JzZXJ2ZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llciQpKS5zdWJzY3JpYmUocmVzID0+IHsgdGhpcy5pc25hdkNoYW5nZSA9IHJlcyB9KVxuICAgIHRoaXMuY29vbE1hcC5zZXRQYWRkaW5nKHRoaXMucGFkZGluRm9ySm9iQ29kZSk7XG4gIH1cblxuICBvcGVuRHJhd2VyKCkgeyB0aGlzLmRyYXdlci5lbWl0KHRydWUpIH1cbiAgY2huYWdlTmF2KG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzbmF2Q2hhbmdlKSB7XG4gICAgICB0aGlzLmNoYW5nZU5hdi5lbWl0KG5hbWUpOyB0aGlzLm5hdlZhbHVlID0gbmFtZTsgdGhpcy5jb29sTWFwLmNsZWFyQm91bmQoKTtcbiAgICAgIGlmIChuYW1lID09PSAnQWRkcm91dGUnKSB7IHRoaXMuY29vbE1hcC5zZXRQYWRkaW5nKHRoaXMucGFkZGluRm9yVmlld1JvdXRlKSB9XG4gICAgICBlbHNlIHsgdGhpcy5jb29sTWFwLnNldFBhZGRpbmcodGhpcy5wYWRkaW5Gb3JKb2JDb2RlKSB9XG4gICAgICB0aGlzLnV0aWxzLmNsZWFyT3B0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveWVyJC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZGVzdHJveWVyJC51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibmF2XCI+XG4gIDxidXR0b24gKGNsaWNrKT1cIm9wZW5EcmF3ZXIoKVwiIGNsYXNzPVwidG9nZ2xlXCI+XG4gICAgPGltZyBzcmM9XCJhc3NldHMvaW1hZ2VzL3RvZ2dsZS5zdmdcIiBhbHQ9XCJcIiAvPlxuICA8L2J1dHRvbj5cblxuICA8dWwgY2xhc3M9XCJtLTEwMFwiPlxuICAgIDxsaSBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IG5hdlZhbHVlID09PSAnSm9iY29kZSd9XCI+XG4gICAgICA8YSBtYXQtcmFpc2VkLWJ1dHRvbiAjdG9vbHRpcD1cIm1hdFRvb2x0aXBcIiBtYXRUb29sdGlwPVwiSm9iIENvZGVcIiBhcmlhLWxhYmVsPVwiSm9iLWNvZGVcIiAoY2xpY2spPVwiY2huYWdlTmF2KCdKb2Jjb2RlJylcIj5cbiAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaW1hZ2VzL2pvYi1jb2RlLnN2Z1wiIGFsdD1cIlwiIC8+XG4gICAgICA8L2E+XG4gICAgPC9saT5cblxuICAgIDxsaSBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IG5hdlZhbHVlID09PSAnQWRkcm91dGUnLCAnZGlzYWJsZWQnOiAhaXNuYXZDaGFuZ2UgfVwiPlxuICAgICAgPGEgbWF0LXJhaXNlZC1idXR0b24gI3Rvb2x0aXA9XCJtYXRUb29sdGlwXCIgbWF0VG9vbHRpcD1cIlZpZXcgUm91dGVcIiBhcmlhLWxhYmVsPVwiVmlldy1yb3V0ZVwiIChjbGljayk9XCJjaG5hZ2VOYXYoJ0FkZHJvdXRlJylcIj5cbiAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaW1hZ2VzL3JvdXRlLnN2Z1wiIGFsdD1cIlwiIC8+XG4gICAgICA8L2E+XG4gICAgPC9saT5cbiAgPC91bD5cbjwvZGl2PlxuIl19