bpm-core 0.0.49 → 0.0.51

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 (99) hide show
  1. package/esm2022/lib/app/app.component.mjs +6 -6
  2. package/esm2022/lib/components/app-component-sections/activities/activities.component.mjs +6 -5
  3. package/esm2022/lib/components/app-component-sections/approvals/approvals.component.mjs +4 -4
  4. package/esm2022/lib/components/app-component-sections/approvals-workflow/approvals-workflow.component.mjs +5 -5
  5. package/esm2022/lib/components/app-component-sections/faq-sidenav/faq-sidenav.component.mjs +4 -4
  6. package/esm2022/lib/components/app-component-sections/faqs/faqs.component.mjs +4 -4
  7. package/esm2022/lib/components/app-component-sections/feedback-section/feedback-section.component.mjs +4 -4
  8. package/esm2022/lib/components/app-component-sections/form-section/form-section.component.mjs +4 -4
  9. package/esm2022/lib/components/app-component-sections/layout/header/header.component.mjs +4 -4
  10. package/esm2022/lib/components/app-component-sections/layout/layout.component.mjs +4 -4
  11. package/esm2022/lib/components/app-component-sections/layout/side-nav/side-nav.component.mjs +4 -4
  12. package/esm2022/lib/components/app-component-sections/main-request-details/main-request-details.component.mjs +4 -4
  13. package/esm2022/lib/components/app-component-sections/previous-requests/previous-requests.component.mjs +128 -24
  14. package/esm2022/lib/components/app-component-sections/profile-section/profile-section.component.mjs +4 -4
  15. package/esm2022/lib/components/app-component-sections/service-header/service-header.component.mjs +4 -4
  16. package/esm2022/lib/components/app-component-sections/status/status.component.mjs +4 -4
  17. package/esm2022/lib/components/app-component-sections/workflow-section/workflow-section.component.mjs +4 -4
  18. package/esm2022/lib/components/shared-components/action-buttons/action-buttons.component.mjs +4 -4
  19. package/esm2022/lib/components/shared-components/confirmation-popup/confirmation-popup.component.mjs +4 -4
  20. package/esm2022/lib/components/shared-components/delete-popup/delete-popup.component.mjs +4 -4
  21. package/esm2022/lib/components/shared-components/dialogs/confirm-dialog/confirm-dialog.component.mjs +4 -4
  22. package/esm2022/lib/components/shared-components/dialogs/delete-dialog/delete-dialog.component.mjs +4 -4
  23. package/esm2022/lib/components/shared-components/dialogs/submit-dialog/submit-dialog.component.mjs +4 -4
  24. package/esm2022/lib/components/shared-components/form-field/add-attachment-section/add-attachment-section.component.mjs +42 -20
  25. package/esm2022/lib/components/shared-components/form-field/attachment-section/attachment-section.component.mjs +5 -5
  26. package/esm2022/lib/components/shared-components/form-field/base-component/base-component.component.mjs +4 -4
  27. package/esm2022/lib/components/shared-components/form-field/checkbox/checkbox.component.mjs +9 -15
  28. package/esm2022/lib/components/shared-components/form-field/control-value-accessor.directive.mjs +36 -39
  29. package/esm2022/lib/components/shared-components/form-field/custom-searchable-autocomplete/custom-searchable.component.mjs +13 -25
  30. package/esm2022/lib/components/shared-components/form-field/date-picker/date-picker.component.mjs +60 -67
  31. package/esm2022/lib/components/shared-components/form-field/date-range-picker/date-range-picker.component.mjs +75 -80
  32. package/esm2022/lib/components/shared-components/form-field/doc-uploader/docs-uploader.component.mjs +579 -0
  33. package/esm2022/lib/components/shared-components/form-field/form-label/form-label.component.mjs +4 -4
  34. package/esm2022/lib/components/shared-components/form-field/info-item/info-item.component.mjs +6 -8
  35. package/esm2022/lib/components/shared-components/form-field/input/input.component.mjs +11 -10
  36. package/esm2022/lib/components/shared-components/form-field/input-currency/input-currency.component.mjs +6 -8
  37. package/esm2022/lib/components/shared-components/form-field/input-email/input-email.component.mjs +5 -7
  38. package/esm2022/lib/components/shared-components/form-field/input-mask/input-mask.component.mjs +4 -4
  39. package/esm2022/lib/components/shared-components/form-field/input-number/input-number.component.mjs +5 -8
  40. package/esm2022/lib/components/shared-components/form-field/input-telephone/input-telephone.component.mjs +23 -131
  41. package/esm2022/lib/components/shared-components/form-field/radio/radio.component.mjs +29 -27
  42. package/esm2022/lib/components/shared-components/form-field/repeated-list/repeated-list.component.mjs +4 -4
  43. package/esm2022/lib/components/shared-components/form-field/search-employee/search-employee.component.mjs +87 -78
  44. package/esm2022/lib/components/shared-components/form-field/select/select.component.mjs +4 -4
  45. package/esm2022/lib/components/shared-components/form-field/shared-imports.mjs +14 -0
  46. package/esm2022/lib/components/shared-components/form-field/table-list/table-list.component.mjs +4 -4
  47. package/esm2022/lib/components/shared-components/form-field/textarea/special-chars.directive.mjs +4 -4
  48. package/esm2022/lib/components/shared-components/form-field/textarea/textarea.component.mjs +10 -9
  49. package/esm2022/lib/components/shared-components/form-field/toggle-button/toggle-button.component.mjs +33 -32
  50. package/esm2022/lib/components/shared-components/form-field/validation-errors/validation-errors.component.mjs +7 -6
  51. package/esm2022/lib/components/shared-components/index.mjs +1 -2
  52. package/esm2022/lib/components/shared-components/terms-conditions/terms-conditions.component.mjs +4 -4
  53. package/esm2022/lib/components/shared-components/title-section/title-section.component.mjs +4 -4
  54. package/esm2022/lib/directives/ar.directive.mjs +4 -4
  55. package/esm2022/lib/directives/currency.directive.mjs +4 -4
  56. package/esm2022/lib/directives/en.directive.mjs +4 -4
  57. package/esm2022/lib/directives/number.directive.mjs +4 -4
  58. package/esm2022/lib/i18n/ar.mjs +7 -1
  59. package/esm2022/lib/i18n/en.mjs +7 -1
  60. package/esm2022/lib/pipes/currency.pipe.mjs +4 -4
  61. package/esm2022/lib/pipes/format-as-password.pipe.mjs +4 -4
  62. package/esm2022/lib/pipes/status-style.pipe.mjs +4 -4
  63. package/esm2022/lib/services/action.service.ts.mjs +4 -4
  64. package/esm2022/lib/services/core.service.ts.mjs +63 -100
  65. package/esm2022/lib/services/feedBack.service.mjs +4 -4
  66. package/esm2022/lib/services/i18n.service.mjs +4 -4
  67. package/esm2022/lib/services/sidenav.service.mjs +4 -4
  68. package/esm2022/lib/testComponent/general-approver-section/general-approver-section.component.mjs +4 -4
  69. package/esm2022/lib/testComponent/request-details-section/request-details-section.component.mjs +28 -21
  70. package/esm2022/lib/testComponent/services/i18n.service.mjs +4 -4
  71. package/esm2022/lib/testComponent/services/segment-dynamic-loader.service.mjs +4 -4
  72. package/esm2022/lib/validators/string-to-boolean.pipe.mjs +4 -4
  73. package/esm2022/lib/validators/text.directive.mjs +4 -4
  74. package/esm2022/lib/validators/timer.pipe.mjs +4 -4
  75. package/fesm2022/bpm-core.mjs +2568 -2697
  76. package/fesm2022/bpm-core.mjs.map +1 -1
  77. package/lib/app/app.component.d.ts +1 -1
  78. package/lib/components/app-component-sections/previous-requests/previous-requests.component.d.ts +27 -6
  79. package/lib/components/shared-components/form-field/add-attachment-section/add-attachment-section.component.d.ts +9 -5
  80. package/lib/components/shared-components/form-field/checkbox/checkbox.component.d.ts +1 -3
  81. package/lib/components/shared-components/form-field/control-value-accessor.directive.d.ts +15 -7
  82. package/lib/components/shared-components/form-field/custom-searchable-autocomplete/custom-searchable.component.d.ts +2 -5
  83. package/lib/components/shared-components/form-field/date-picker/date-picker.component.d.ts +3 -4
  84. package/lib/components/shared-components/form-field/date-range-picker/date-range-picker.component.d.ts +6 -6
  85. package/lib/components/shared-components/form-field/doc-uploader/docs-uploader.component.d.ts +131 -0
  86. package/lib/components/shared-components/form-field/input-telephone/input-telephone.component.d.ts +5 -27
  87. package/lib/components/shared-components/form-field/radio/radio.component.d.ts +5 -8
  88. package/lib/components/shared-components/form-field/search-employee/search-employee.component.d.ts +4 -6
  89. package/lib/components/shared-components/form-field/shared-imports.d.ts +5 -0
  90. package/lib/components/shared-components/form-field/toggle-button/toggle-button.component.d.ts +7 -8
  91. package/lib/components/shared-components/form-field/validation-errors/validation-errors.component.d.ts +1 -0
  92. package/lib/components/shared-components/index.d.ts +0 -1
  93. package/lib/i18n/ar.d.ts +6 -0
  94. package/lib/i18n/en.d.ts +6 -0
  95. package/lib/services/core.service.ts.d.ts +9 -4
  96. package/lib/testComponent/request-details-section/request-details-section.component.d.ts +1 -0
  97. package/package.json +2 -3
  98. package/src/lib/assets/scss/_general.scss +1 -0
  99. package/src/lib/assets/scss/input-telephone.scss +133 -159
@@ -1,24 +1,19 @@
1
1
  /* eslint-disable @angular-eslint/component-selector */
2
2
  /* eslint-disable @typescript-eslint/no-empty-function */
3
- import { Component, CUSTOM_ELEMENTS_SCHEMA, forwardRef, Inject, Input, ViewChild } from '@angular/core';
3
+ import { Component, CUSTOM_ELEMENTS_SCHEMA, forwardRef, Inject, Input, ViewChild, } from '@angular/core';
4
4
  import { ControlValueAccessorDirective } from '../control-value-accessor.directive';
5
- import { FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
6
- import { MatFormField, MatFormFieldModule } from '@angular/material/form-field';
7
- import { MatDatepicker, MatDatepickerInput, MatDatepickerModule, MatDatepickerToggle } from '@angular/material/datepicker';
8
- import { MatInput } from '@angular/material/input';
9
- import { MatIcon } from '@angular/material/icon';
10
- import { NgClass, NgIf } from '@angular/common';
11
- import { InfoItemComponent } from '../info-item/info-item.component';
12
- import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';
13
- import { MAT_MOMENT_DATE_ADAPTER_OPTIONS, MomentDateAdapter } from '@angular/material-moment-adapter';
5
+ import { NG_VALUE_ACCESSOR, ReactiveFormsModule, Validators, } from '@angular/forms';
6
+ import { MatDatepicker } from '@angular/material/datepicker';
7
+ import { MAT_DATE_FORMATS } from '@angular/material/core';
14
8
  import { CustomDateFormat } from '../date-picker/date-format';
15
- // import moment from 'moment';
16
9
  import { ValidationErrorsComponent } from '../validation-errors/validation-errors.component';
17
- import { format } from "date-fns";
10
+ import { format } from 'date-fns';
11
+ import { MatDatePickerImports, MatFormImports } from '../shared-imports';
12
+ import { InfoItemComponent } from '../info-item/info-item.component';
18
13
  import * as i0 from "@angular/core";
19
- import * as i1 from "@angular/material/form-field";
14
+ import * as i1 from "@angular/forms";
20
15
  import * as i2 from "@angular/material/datepicker";
21
- import * as i3 from "@angular/forms";
16
+ import * as i3 from "@angular/material/form-field";
22
17
  const YEAR_ONLY_FORMAT = {
23
18
  parse: {
24
19
  dateInput: 'YYYY',
@@ -31,13 +26,11 @@ const YEAR_ONLY_FORMAT = {
31
26
  },
32
27
  };
33
28
  export class DateRangePickerComponent extends ControlValueAccessorDirective {
34
- tooltip;
35
29
  className = 'white-input';
36
30
  yearOnly;
37
31
  dateFormat;
38
32
  datepicker;
39
- startControl = new FormControl();
40
- endControl = new FormControl();
33
+ calendarType;
41
34
  startInputValue;
42
35
  endInputValue;
43
36
  dateRange;
@@ -46,60 +39,80 @@ export class DateRangePickerComponent extends ControlValueAccessorDirective {
46
39
  this.activateYearOnlyMode();
47
40
  }
48
41
  ngOnChanges(changes) {
49
- if (changes) {
50
- if (this.customMaxDate) {
51
- const date = new Date(this.customMaxDate);
52
- this.maxDateValue = new Date(date.getFullYear(), date.getMonth(), date.getDate());
42
+ this.setDateFormControl();
43
+ }
44
+ setDateFormControl() {
45
+ const today = new Date();
46
+ const currentYear = today.getFullYear();
47
+ const currentMonth = today.getMonth();
48
+ const currentDay = today.getDate();
49
+ if (this.minDate) {
50
+ if (this.minDate == 'today') {
51
+ this.minDateValue = new Date(currentYear, currentMonth, currentDay);
52
+ console.log(this.minDateValue);
53
53
  }
54
54
  }
55
- if (changes && !this.isReadOnly) { // add min date value for 2 dates validations
56
- if (this.customMinDate) {
57
- const date = new Date(this.customMinDate);
58
- this.minDateValue = new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1);
55
+ if (this.maxDate) {
56
+ if (this.maxDate == 'today') {
57
+ this.maxDateValue = new Date(currentYear, currentMonth, currentDay);
59
58
  }
59
+ if (this.maxDate == 'oneYear') {
60
+ this.maxDateValue = new Date(currentYear + 1, currentMonth, currentDay - 1);
61
+ }
62
+ }
63
+ if (this.customMaxDate) {
64
+ const date = new Date(this.customMaxDate);
65
+ this.maxDateValue = new Date(date.getFullYear(), date.getMonth(), date.getDate());
60
66
  }
67
+ if (this.customMinDate) {
68
+ const date = new Date(this.customMinDate);
69
+ this.minDateValue = new Date(date.getFullYear(), date.getMonth(), date.getDate());
70
+ }
71
+ if (this.required)
72
+ this.control.addValidators(Validators.required);
61
73
  }
62
74
  focusPicker(picker) {
63
75
  picker.open();
76
+ this.control.markAsTouched();
64
77
  }
65
- dateChange(event) {
78
+ startDateChange(event) {
66
79
  if (event?.value && !this.isDisabled) {
67
- let inputValue;
68
- if (this.startControl.value && !this.endControl.value) {
69
- this.startInputValue = format(new Date(event.value), "yyyy-MM-dd'T'HH:mm:ss.SSSxxx");
70
- // this.startInputValue = moment(event.value).locale('en-US').format("YYYY-MM-DDTHH:mm:ss.SSSZ")
71
- }
72
- if (this.startControl.value && this.endControl.value) {
73
- this.endInputValue = format(new Date(event.value), "yyyy-MM-dd'T'HH:mm:ss.SSSxxx");
74
- // this.endInputValue = moment(event.value).locale('en-US').format("YYYY-MM-DDTHH:mm:ss.SSSZ")
75
- }
76
- if (this.endInputValue && this.startInputValue) {
77
- this.dateRange = {
78
- startDate: this.startInputValue,
79
- endDate: this.endInputValue
80
- };
80
+ if (this.startDateControl.value) {
81
+ this.startDateControl.setValue(format(new Date(event.value), "yyyy-MM-dd'T'HH:mm:ss.SSSxxx"));
81
82
  }
82
- if (this.dateRange?.startDate && this.dateRange?.endDate) {
83
- this.control.setValue(this.dateRange);
83
+ }
84
+ }
85
+ endDateChange(event) {
86
+ if (event?.value && !this.isDisabled) {
87
+ if (this.startDateControl.value && this.endDateControl.value) {
88
+ this.endDateControl.setValue(format(new Date(event.value), "yyyy-MM-dd'T'HH:mm:ss.SSSxxx"));
89
+ this.setDateRangeControlValue();
84
90
  }
85
91
  }
86
92
  }
93
+ setDateRangeControlValue() {
94
+ this.dateRange = {
95
+ startDate: this.startDateControl.value,
96
+ endDate: this.endDateControl.value,
97
+ };
98
+ this.control.setValue(this.dateRange);
99
+ }
87
100
  clearDateValue(event) {
88
101
  this.dateRange = null;
89
102
  this.startInputValue = null;
90
103
  this.endInputValue = null;
91
104
  this.control.setValue(null);
92
- this.endControl.setValue(null);
93
- this.startControl.setValue(null);
105
+ this.endDateControl.setValue(null);
106
+ this.startDateControl.setValue(null);
94
107
  }
95
108
  activateYearOnlyMode() {
96
109
  this.dateFormat.updateDateFormat(YEAR_ONLY_FORMAT.parse, YEAR_ONLY_FORMAT.display);
97
110
  if (this.control) {
98
- this.control.setValue(format(new Date(this.control.value), "yyyy"));
111
+ this.control.setValue(format(new Date(this.control.value), 'yyyy'));
99
112
  }
100
113
  this.datepicker.startView = 'multi-year';
101
- this.datepicker.yearSelected.subscribe(e => {
102
- this.control.setValue(format(new Date(e), "yyyy"));
114
+ this.datepicker.yearSelected.subscribe((e) => {
115
+ this.control.setValue(format(new Date(e), 'yyyy'));
103
116
  this.datepicker.close();
104
117
  });
105
118
  this.datepicker.openedStream.subscribe(() => {
@@ -109,25 +122,20 @@ export class DateRangePickerComponent extends ControlValueAccessorDirective {
109
122
  document.body.classList.remove('year-only');
110
123
  });
111
124
  }
112
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DateRangePickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
113
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.10", type: DateRangePickerComponent, isStandalone: true, selector: "app-date-range-picker", inputs: { tooltip: "tooltip", className: "className", yearOnly: "yearOnly" }, providers: [
125
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: DateRangePickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
126
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: DateRangePickerComponent, isStandalone: true, selector: "app-date-range-picker", inputs: { className: "className", yearOnly: "yearOnly", calendarType: "calendarType" }, providers: [
114
127
  {
115
128
  provide: NG_VALUE_ACCESSOR,
116
129
  useExisting: forwardRef(() => DateRangePickerComponent),
117
130
  multi: true,
118
131
  },
119
- {
120
- provide: DateAdapter,
121
- useClass: MomentDateAdapter,
122
- deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],
123
- },
124
132
  {
125
133
  provide: MAT_DATE_FORMATS,
126
- useClass: CustomDateFormat
134
+ useClass: CustomDateFormat,
127
135
  },
128
- ], viewQueries: [{ propertyName: "datepicker", first: true, predicate: MatDatepicker, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if(label){\r\n <div class=\"d-flex justify-content-between mb-1\">\r\n <span class=\"form-label mb-0\">{{label}}</span>\r\n @if(!required){\r\n <span class=\"fs-11 fc-dark-gray\"> {{i18n.translate('optional')}} </span>\r\n }\r\n </div>\r\n}\r\n<mat-form-field class=\"date-range primary-form {{className}}\">\r\n <label class=\"mat-form-content\">\r\n <mat-date-range-input [rangePicker]=\"picker\">\r\n <input matStartDate placeholder=\"Start date\" [formControl]=\"startControl\" [value]=\"value?.startDate ? value?.startDate : null\" (dateInput)=\"dateChange($event)\" (focus)=\"focusPicker(picker)\" [min]=\"minDateValue\"\r\n [max]=\"maxDateValue\">\r\n <input matEndDate placeholder=\"End date\" [formControl]=\"endControl\" [value]=\"value?.endDate ? value?.endDate : null\" (dateInput)=\"dateChange($event)\" (focus)=\"focusPicker(picker)\" [min]=\"minDateValue\"\r\n [max]=\"maxDateValue\">\r\n </mat-date-range-input>\r\n </label>\r\n @if(control?.value){\r\n <ds-icon matSuffix icon=\"close\" class=\"fc-onyx fs-10 mx-2 cursor-pointer\" (click)=\"clearDateValue($event)\"></ds-icon>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\" [disableRipple]=\"true\">\r\n <i class=\"sfi sfi-calendar-o fc-onyx font-18\" matDatepickerToggleIcon></i>\r\n </mat-datepicker-toggle>\r\n <mat-date-range-picker #picker></mat-date-range-picker>\r\n</mat-form-field>\r\n<app-validation-errors [errors]=\"control.errors\"></app-validation-errors>\r\n", styles: [":host{flex-grow:1}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i2.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i2.MatDatepickerToggleIcon, selector: "[matDatepickerToggleIcon]" }, { kind: "component", type: i2.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i2.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i2.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i2.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: ValidationErrorsComponent, selector: "app-validation-errors", inputs: ["errors", "customErrorMessages"] }] });
136
+ ], viewQueries: [{ propertyName: "datepicker", first: true, predicate: MatDatepicker, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "@if(!isReadOnly){ @if(label){\r\n<div class=\"d-flex justify-content-between mb-1\">\r\n <span class=\"form-label mb-0\">{{ label }}</span>\r\n @if(!required){\r\n <span class=\"fs-11 fc-dark-gray\"> {{ i18n.translate(\"optional\") }} </span>\r\n }\r\n</div>\r\n}\r\n<mat-form-field class=\"date-range primary-form {{ className }}\">\r\n <label class=\"mat-form-content\">\r\n <mat-date-range-input [rangePicker]=\"picker\" [min]=\"minDateValue\" [max]=\"maxDateValue\">\r\n <input\r\n matStartDate\r\n placeholder=\"Start date\"\r\n [formControl]=\"startDateControl\"\r\n (dateInput)=\"startDateChange($event)\"\r\n (focus)=\"focusPicker(picker)\"\r\n readonly\r\n />\r\n <input\r\n matEndDate\r\n placeholder=\"End date\"\r\n [formControl]=\"endDateControl\"\r\n (dateInput)=\"endDateChange($event)\"\r\n (focus)=\"focusPicker(picker)\"\r\n readonly\r\n />\r\n </mat-date-range-input>\r\n </label>\r\n @if(control?.value){\r\n <ds-icon\r\n matSuffix\r\n icon=\"close\"\r\n class=\"fc-onyx fs-10 mx-2 cursor-pointer\"\r\n (click)=\"clearDateValue($event)\"\r\n ></ds-icon>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\" [disableRipple]=\"true\">\r\n <i class=\"sfi sfi-calendar-o fc-onyx font-18\" matDatepickerToggleIcon></i>\r\n </mat-datepicker-toggle>\r\n <mat-date-range-picker #picker></mat-date-range-picker>\r\n</mat-form-field>\r\n<app-validation-errors [errors]=\"control.errors\"></app-validation-errors>\r\n} @else {\r\n<ng-container>\r\n <app-info-item\r\n class=\"info-item w-100\"\r\n type=\"date\"\r\n [insideTable]=\"insideTable\"\r\n [dateType]=\"calendarType\"\r\n [label]=\"label\"\r\n [value]=\"{\r\n startDate: control.value.startDate,\r\n endDate: control.value.endDate\r\n }\"\r\n [hasLabel]=\"!!label\"\r\n >\r\n </app-info-item>\r\n</ng-container>\r\n}\r\n", styles: [":host{flex-grow:1}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: ValidationErrorsComponent, selector: "app-validation-errors", inputs: ["errors", "customErrorMessages"] }, { kind: "component", type: i2.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: i2.MatDatepickerModule }, { kind: "directive", type: i2.MatDatepickerToggleIcon, selector: "[matDatepickerToggleIcon]" }, { kind: "component", type: i2.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i2.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i2.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i2.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "ngmodule", type: i3.MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: InfoItemComponent, selector: "app-info-item", inputs: ["label", "value", "name", "type", "dateType", "multiple", "insideTable", "hasLabel", "arrayList", "actionType", "download"] }] });
129
137
  }
130
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DateRangePickerComponent, decorators: [{
138
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: DateRangePickerComponent, decorators: [{
131
139
  type: Component,
132
140
  args: [{ selector: 'app-date-range-picker', schemas: [CUSTOM_ELEMENTS_SCHEMA], standalone: true, providers: [
133
141
  {
@@ -135,33 +143,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
135
143
  useExisting: forwardRef(() => DateRangePickerComponent),
136
144
  multi: true,
137
145
  },
138
- {
139
- provide: DateAdapter,
140
- useClass: MomentDateAdapter,
141
- deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],
142
- },
143
146
  {
144
147
  provide: MAT_DATE_FORMATS,
145
- useClass: CustomDateFormat
148
+ useClass: CustomDateFormat,
146
149
  },
147
150
  ], imports: [
148
- MatFormFieldModule,
149
- MatDatepickerModule,
150
- MatFormField,
151
- MatInput,
152
- MatIcon,
153
- MatDatepickerToggle,
154
- MatDatepicker,
155
- MatDatepickerInput,
156
- NgClass,
157
- NgIf,
158
- InfoItemComponent,
159
151
  ReactiveFormsModule,
160
- ValidationErrorsComponent
161
- ], template: "@if(label){\r\n <div class=\"d-flex justify-content-between mb-1\">\r\n <span class=\"form-label mb-0\">{{label}}</span>\r\n @if(!required){\r\n <span class=\"fs-11 fc-dark-gray\"> {{i18n.translate('optional')}} </span>\r\n }\r\n </div>\r\n}\r\n<mat-form-field class=\"date-range primary-form {{className}}\">\r\n <label class=\"mat-form-content\">\r\n <mat-date-range-input [rangePicker]=\"picker\">\r\n <input matStartDate placeholder=\"Start date\" [formControl]=\"startControl\" [value]=\"value?.startDate ? value?.startDate : null\" (dateInput)=\"dateChange($event)\" (focus)=\"focusPicker(picker)\" [min]=\"minDateValue\"\r\n [max]=\"maxDateValue\">\r\n <input matEndDate placeholder=\"End date\" [formControl]=\"endControl\" [value]=\"value?.endDate ? value?.endDate : null\" (dateInput)=\"dateChange($event)\" (focus)=\"focusPicker(picker)\" [min]=\"minDateValue\"\r\n [max]=\"maxDateValue\">\r\n </mat-date-range-input>\r\n </label>\r\n @if(control?.value){\r\n <ds-icon matSuffix icon=\"close\" class=\"fc-onyx fs-10 mx-2 cursor-pointer\" (click)=\"clearDateValue($event)\"></ds-icon>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\" [disableRipple]=\"true\">\r\n <i class=\"sfi sfi-calendar-o fc-onyx font-18\" matDatepickerToggleIcon></i>\r\n </mat-datepicker-toggle>\r\n <mat-date-range-picker #picker></mat-date-range-picker>\r\n</mat-form-field>\r\n<app-validation-errors [errors]=\"control.errors\"></app-validation-errors>\r\n", styles: [":host{flex-grow:1}\n"] }]
162
- }], propDecorators: { tooltip: [{
163
- type: Input
164
- }], className: [{
152
+ ValidationErrorsComponent,
153
+ ...MatDatePickerImports,
154
+ ...MatFormImports,
155
+ InfoItemComponent,
156
+ ], template: "@if(!isReadOnly){ @if(label){\r\n<div class=\"d-flex justify-content-between mb-1\">\r\n <span class=\"form-label mb-0\">{{ label }}</span>\r\n @if(!required){\r\n <span class=\"fs-11 fc-dark-gray\"> {{ i18n.translate(\"optional\") }} </span>\r\n }\r\n</div>\r\n}\r\n<mat-form-field class=\"date-range primary-form {{ className }}\">\r\n <label class=\"mat-form-content\">\r\n <mat-date-range-input [rangePicker]=\"picker\" [min]=\"minDateValue\" [max]=\"maxDateValue\">\r\n <input\r\n matStartDate\r\n placeholder=\"Start date\"\r\n [formControl]=\"startDateControl\"\r\n (dateInput)=\"startDateChange($event)\"\r\n (focus)=\"focusPicker(picker)\"\r\n readonly\r\n />\r\n <input\r\n matEndDate\r\n placeholder=\"End date\"\r\n [formControl]=\"endDateControl\"\r\n (dateInput)=\"endDateChange($event)\"\r\n (focus)=\"focusPicker(picker)\"\r\n readonly\r\n />\r\n </mat-date-range-input>\r\n </label>\r\n @if(control?.value){\r\n <ds-icon\r\n matSuffix\r\n icon=\"close\"\r\n class=\"fc-onyx fs-10 mx-2 cursor-pointer\"\r\n (click)=\"clearDateValue($event)\"\r\n ></ds-icon>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\" [disableRipple]=\"true\">\r\n <i class=\"sfi sfi-calendar-o fc-onyx font-18\" matDatepickerToggleIcon></i>\r\n </mat-datepicker-toggle>\r\n <mat-date-range-picker #picker></mat-date-range-picker>\r\n</mat-form-field>\r\n<app-validation-errors [errors]=\"control.errors\"></app-validation-errors>\r\n} @else {\r\n<ng-container>\r\n <app-info-item\r\n class=\"info-item w-100\"\r\n type=\"date\"\r\n [insideTable]=\"insideTable\"\r\n [dateType]=\"calendarType\"\r\n [label]=\"label\"\r\n [value]=\"{\r\n startDate: control.value.startDate,\r\n endDate: control.value.endDate\r\n }\"\r\n [hasLabel]=\"!!label\"\r\n >\r\n </app-info-item>\r\n</ng-container>\r\n}\r\n", styles: [":host{flex-grow:1}\n"] }]
157
+ }], propDecorators: { className: [{
165
158
  type: Input
166
159
  }], yearOnly: [{
167
160
  type: Input
@@ -171,5 +164,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
171
164
  }], datepicker: [{
172
165
  type: ViewChild,
173
166
  args: [MatDatepicker]
167
+ }], calendarType: [{
168
+ type: Input
174
169
  }] } });
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnBtLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL3NoYXJlZC1jb21wb25lbnRzL2Zvcm0tZmllbGQvZGF0ZS1yYW5nZS1waWNrZXIvZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnBtLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL3NoYXJlZC1jb21wb25lbnRzL2Zvcm0tZmllbGQvZGF0ZS1yYW5nZS1waWNrZXIvZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELHlEQUF5RDtBQUN6RCxPQUFPLEVBQUMsU0FBUyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFpQixTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDckgsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDbEYsT0FBTyxFQUFDLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25GLE9BQU8sRUFBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RSxPQUFPLEVBQUMsYUFBYSxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDekgsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ2pELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9B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QWEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yICovXHJcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvbiAqL1xyXG5pbXBvcnQge0NvbXBvbmVudCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgZm9yd2FyZFJlZiwgSW5qZWN0LCBJbnB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvckRpcmVjdGl2ZX0gZnJvbSAnLi4vY29udHJvbC12YWx1ZS1hY2Nlc3Nvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQge0Zvcm1Db250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUiwgUmVhY3RpdmVGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge01hdEZvcm1GaWVsZCwgTWF0Rm9ybUZpZWxkTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHtNYXREYXRlcGlja2VyLCBNYXREYXRlcGlja2VySW5wdXQsIE1hdERhdGVwaWNrZXJNb2R1bGUsIE1hdERhdGVwaWNrZXJUb2dnbGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xyXG5pbXBvcnQge01hdElucHV0fSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7TWF0SWNvbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7TmdDbGFzcywgTmdJZn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtJbmZvSXRlbUNvbXBvbmVudH0gZnJvbSAnLi4vaW5mby1pdGVtL2luZm8taXRlbS5jb21wb25lbnQnO1xyXG5pbXBvcnQge0RhdGVBZGFwdGVyLCBNQVRfREFURV9GT1JNQVRTLCBNQVRfREFURV9MT0NBTEV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQge01BVF9NT01FTlRfREFURV9BREFQVEVSX09QVElPTlMsIE1vbWVudERhdGVBZGFwdGVyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC1tb21lbnQtYWRhcHRlcic7XHJcbmltcG9ydCB7Q3VzdG9tRGF0ZUZvcm1hdH0gZnJvbSAnLi4vZGF0ZS1waWNrZXIvZGF0ZS1mb3JtYXQnO1xyXG4vLyBpbXBvcnQgIG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQge1ZhbGlkYXRpb25FcnJvcnNDb21wb25lbnR9IGZyb20gJy4uL3ZhbGlkYXRpb24tZXJyb3JzL3ZhbGlkYXRpb24tZXJyb3JzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7Zm9ybWF0fSBmcm9tIFwiZGF0ZS1mbnNcIjtcclxuXHJcbmNvbnN0IFlFQVJfT05MWV9GT1JNQVQgPSB7XHJcbiAgcGFyc2U6IHtcclxuICAgIGRhdGVJbnB1dDogJ1lZWVknLFxyXG4gIH0sXHJcbiAgZGlzcGxheToge1xyXG4gICAgZGF0ZUlucHV0OiAnWVlZWScsXHJcbiAgICBtb250aFllYXJMYWJlbDogJ1lZWVknLFxyXG4gICAgZGF0ZUExMXlMYWJlbDogJ0xMJyxcclxuICAgIG1vbnRoWWVhckExMXlMYWJlbDogJ1lZWVknLFxyXG4gIH0sXHJcbn07XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZGF0ZS1yYW5nZS1waWNrZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLXJhbmdlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVSYW5nZVBpY2tlckNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogRGF0ZUFkYXB0ZXIsXHJcbiAgICAgIHVzZUNsYXNzOiBNb21lbnREYXRlQWRhcHRlcixcclxuICAgICAgZGVwczogW01BVF9EQVRFX0xPQ0FMRSwgTUFUX01PTUVOVF9EQVRFX0FEQVBURVJfT1BUSU9OU10sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBNQVRfREFURV9GT1JNQVRTLFxyXG4gICAgICB1c2VDbGFzczogQ3VzdG9tRGF0ZUZvcm1hdFxyXG4gICAgfSxcclxuICBdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGQsXHJcbiAgICBNYXRJbnB1dCxcclxuICAgIE1hdEljb24sXHJcbiAgICBNYXREYXRlcGlja2VyVG9nZ2xlLFxyXG4gICAgTWF0RGF0ZXBpY2tlcixcclxuICAgIE1hdERhdGVwaWNrZXJJbnB1dCxcclxuICAgIE5nQ2xhc3MsXHJcbiAgICBOZ0lmLFxyXG4gICAgSW5mb0l0ZW1Db21wb25lbnQsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgVmFsaWRhdGlvbkVycm9yc0NvbXBvbmVudFxyXG4gIF1cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQ8VHlwZT4gZXh0ZW5kcyBDb250cm9sVmFsdWVBY2Nlc3NvckRpcmVjdGl2ZTxUeXBlPiAge1xyXG4gIEBJbnB1dCgpIHRvb2x0aXAhIDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGNsYXNzTmFtZSA9ICd3aGl0ZS1pbnB1dCc7XHJcbiAgQElucHV0KCkgeWVhck9ubHk6IGJvb2xlYW47XHJcbiAgQEluamVjdChNQVRfREFURV9GT1JNQVRTKSBwdWJsaWMgZGF0ZUZvcm1hdDogQ3VzdG9tRGF0ZUZvcm1hdDtcclxuICBAVmlld0NoaWxkKE1hdERhdGVwaWNrZXIpIGRhdGVwaWNrZXI6IE1hdERhdGVwaWNrZXI8YW55PjtcclxuICBzdGFydENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKVxyXG4gIGVuZENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuICBzdGFydElucHV0VmFsdWU6c3RyaW5nXHJcbiAgZW5kSW5wdXRWYWx1ZTpzdHJpbmdcclxuICBkYXRlUmFuZ2U6YW55XHJcblxyXG5cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzUmVhZE9ubHkgJiYgdGhpcy55ZWFyT25seSkgdGhpcy5hY3RpdmF0ZVllYXJPbmx5TW9kZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXMpIHtcclxuICAgICAgaWYgKHRoaXMuY3VzdG9tTWF4RGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0aGlzLmN1c3RvbU1heERhdGUpO1xyXG4gICAgICAgIHRoaXMubWF4RGF0ZVZhbHVlID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXMgJiYgIXRoaXMuaXNSZWFkT25seSkgeyAvLyBhZGQgbWluIGRhdGUgdmFsdWUgZm9yIDIgZGF0ZXMgdmFsaWRhdGlvbnNcclxuICAgICAgaWYgKHRoaXMuY3VzdG9tTWluRGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0aGlzLmN1c3RvbU1pbkRhdGUpO1xyXG4gICAgICAgIHRoaXMubWluRGF0ZVZhbHVlID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpICsgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBmb2N1c1BpY2tlcihwaWNrZXIpIHtcclxuICAgIHBpY2tlci5vcGVuKCk7XHJcbiAgfVxyXG5cclxuICBkYXRlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgICAgaWYgKGV2ZW50Py52YWx1ZSAmJiAhdGhpcy5pc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgICBsZXQgaW5wdXRWYWx1ZVxyXG4gICAgICAgICAgaWYgKHRoaXMuc3RhcnRDb250cm9sLnZhbHVlICYmICF0aGlzLmVuZENvbnRyb2wudmFsdWUpe1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0SW5wdXRWYWx1ZSA9IGZvcm1hdChuZXcgRGF0ZShldmVudC52YWx1ZSksIFwieXl5eS1NTS1kZCdUJ0hIOm1tOnNzLlNTU3h4eFwiKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5zdGFydElucHV0VmFsdWUgPSBtb21lbnQoZXZlbnQudmFsdWUpLmxvY2FsZSgnZW4tVVMnKS5mb3JtYXQoXCJZWVlZLU1NLUREVEhIOm1tOnNzLlNTU1pcIilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKHRoaXMuc3RhcnRDb250cm9sLnZhbHVlICYmIHRoaXMuZW5kQ29udHJvbC52YWx1ZSl7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kSW5wdXRWYWx1ZSA9IGZvcm1hdChuZXcgRGF0ZShldmVudC52YWx1ZSksIFwieXl5eS1NTS1kZCdUJ0hIOm1tOnNzLlNTU3h4eFwiKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5lbmRJbnB1dFZhbHVlID0gbW9tZW50KGV2ZW50LnZhbHVlKS5sb2NhbGUoJ2VuLVVTJykuZm9ybWF0KFwiWVlZWS1NTS1ERFRISDptbTpzcy5TU1NaXCIpXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYodGhpcy5lbmRJbnB1dFZhbHVlICYmIHRoaXMuc3RhcnRJbnB1dFZhbHVlKXtcclxuICAgICAgICAgICAgdGhpcy5kYXRlUmFuZ2UgPSB7XHJcbiAgICAgICAgICAgICAgc3RhcnREYXRlOiB0aGlzLnN0YXJ0SW5wdXRWYWx1ZSxcclxuICAgICAgICAgICAgICBlbmREYXRlOiB0aGlzLmVuZElucHV0VmFsdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmRhdGVSYW5nZT8uc3RhcnREYXRlICYmIHRoaXMuZGF0ZVJhbmdlPy5lbmREYXRlKXtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKHRoaXMuZGF0ZVJhbmdlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhckRhdGVWYWx1ZShldmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRlUmFuZ2UgPSBudWxsO1xyXG4gICAgdGhpcy5zdGFydElucHV0VmFsdWUgPSBudWxsO1xyXG4gICAgdGhpcy5lbmRJbnB1dFZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZShudWxsKTtcclxuICAgIHRoaXMuZW5kQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcclxuICAgIHRoaXMuc3RhcnRDb250cm9sLnNldFZhbHVlKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhY3RpdmF0ZVllYXJPbmx5TW9kZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0ZUZvcm1hdC51cGRhdGVEYXRlRm9ybWF0KFlFQVJfT05MWV9GT1JNQVQucGFyc2UsIFlFQVJfT05MWV9GT1JNQVQuZGlzcGxheSk7XHJcbiAgICBpZiAodGhpcy5jb250cm9sKSB7XHJcbiAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZShmb3JtYXQobmV3IERhdGUodGhpcy5jb250cm9sLnZhbHVlKSwgXCJ5eXl5XCIpKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGF0ZXBpY2tlci5zdGFydFZpZXcgPSAnbXVsdGkteWVhcic7XHJcbiAgICB0aGlzLmRhdGVwaWNrZXIueWVhclNlbGVjdGVkLnN1YnNjcmliZShlID0+IHtcclxuICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKGZvcm1hdChuZXcgRGF0ZShlKSwgXCJ5eXl5XCIpKTtcclxuICAgICAgdGhpcy5kYXRlcGlja2VyLmNsb3NlKCk7XHJcbiAgICB9KVxyXG4gICAgdGhpcy5kYXRlcGlja2VyLm9wZW5lZFN0cmVhbS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3llYXItb25seScpO1xyXG4gICAgfSlcclxuICAgIHRoaXMuZGF0ZXBpY2tlci5jbG9zZWRTdHJlYW0uc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCd5ZWFyLW9ubHknKTtcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbiIsIkBpZihsYWJlbCl7XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBtYi0xXCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cImZvcm0tbGFiZWwgbWItMFwiPnt7bGFiZWx9fTwvc3Bhbj5cclxuICAgIEBpZighcmVxdWlyZWQpe1xyXG4gICAgPHNwYW4gY2xhc3M9XCJmcy0xMSBmYy1kYXJrLWdyYXlcIj4ge3tpMThuLnRyYW5zbGF0ZSgnb3B0aW9uYWwnKX19IDwvc3Bhbj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxufVxyXG48bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJkYXRlLXJhbmdlIHByaW1hcnktZm9ybSB7e2NsYXNzTmFtZX19XCI+XHJcbiAgPGxhYmVsIGNsYXNzPVwibWF0LWZvcm0tY29udGVudFwiPlxyXG4gICAgPG1hdC1kYXRlLXJhbmdlLWlucHV0IFtyYW5nZVBpY2tlcl09XCJwaWNrZXJcIj5cclxuICAgICAgPGlucHV0IG1hdFN0YXJ0RGF0ZSBwbGFjZWhvbGRlcj1cIlN0YXJ0IGRhdGVcIiBbZm9ybUNvbnRyb2xdPVwic3RhcnRDb250cm9sXCIgW3ZhbHVlXT1cInZhbHVlPy5zdGFydERhdGUgPyB2YWx1ZT8uc3RhcnREYXRlIDogbnVsbFwiIChkYXRlSW5wdXQpPVwiZGF0ZUNoYW5nZSgkZXZlbnQpXCIgKGZvY3VzKT1cImZvY3VzUGlja2VyKHBpY2tlcilcIiBbbWluXT1cIm1pbkRhdGVWYWx1ZVwiXHJcbiAgICAgIFttYXhdPVwibWF4RGF0ZVZhbHVlXCI+XHJcbiAgICAgIDxpbnB1dCBtYXRFbmREYXRlIHBsYWNlaG9sZGVyPVwiRW5kIGRhdGVcIiBbZm9ybUNvbnRyb2xdPVwiZW5kQ29udHJvbFwiIFt2YWx1ZV09XCJ2YWx1ZT8uZW5kRGF0ZSA/IHZhbHVlPy5lbmREYXRlIDogbnVsbFwiIChkYXRlSW5wdXQpPVwiZGF0ZUNoYW5nZSgkZXZlbnQpXCIgKGZvY3VzKT1cImZvY3VzUGlja2VyKHBpY2tlcilcIiBbbWluXT1cIm1pbkRhdGVWYWx1ZVwiXHJcbiAgICAgIFttYXhdPVwibWF4RGF0ZVZhbHVlXCI+XHJcbiAgICA8L21hdC1kYXRlLXJhbmdlLWlucHV0PlxyXG4gIDwvbGFiZWw+XHJcbiAgQGlmKGNvbnRyb2w/LnZhbHVlKXtcclxuICAgIDxkcy1pY29uIG1hdFN1ZmZpeCBpY29uPVwiY2xvc2VcIiBjbGFzcz1cImZjLW9ueXggZnMtMTAgbXgtMiBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJjbGVhckRhdGVWYWx1ZSgkZXZlbnQpXCI+PC9kcy1pY29uPlxyXG4gICAgfVxyXG4gIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwicGlja2VyXCIgW2Rpc2FibGVSaXBwbGVdPVwidHJ1ZVwiPlxyXG4gICAgPGkgY2xhc3M9XCJzZmkgc2ZpLWNhbGVuZGFyLW8gZmMtb255eCBmb250LTE4XCIgbWF0RGF0ZXBpY2tlclRvZ2dsZUljb24+PC9pPlxyXG4gIDwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gIDxtYXQtZGF0ZS1yYW5nZS1waWNrZXIgI3BpY2tlcj48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cclxuPC9tYXQtZm9ybS1maWVsZD5cclxuPGFwcC12YWxpZGF0aW9uLWVycm9ycyBbZXJyb3JzXT1cImNvbnRyb2wuZXJyb3JzXCI+PC9hcHAtdmFsaWRhdGlvbi1lcnJvcnM+XHJcbiJdfQ==
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnBtLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL3NoYXJlZC1jb21wb25lbnRzL2Zvcm0tZmllbGQvZGF0ZS1yYW5nZS1waWNrZXIvZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnBtLWNvcmUvc3JjL2xpYi9jb21wb25lbnRzL3NoYXJlZC1jb21wb25lbnRzL2Zvcm0tZmllbGQvZGF0ZS1yYW5nZS1waWNrZXIvZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELHlEQUF5RDtBQUN6RCxPQUFPLEVBQ0wsU0FBUyxFQUNULHNCQUFzQixFQUN0QixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFFTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEYsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixtQkFBbUIsRUFDbkIsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pF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LGlCQUFpQjtxQkFDbEI7OEJBS1EsU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUMyQixVQUFVO3NCQUExQyxNQUFNO3VCQUFDLGdCQUFnQjtnQkFDRSxVQUFVO3NCQUFuQyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ2YsWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3IgKi9cclxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uICovXHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXHJcbiAgZm9yd2FyZFJlZixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yRGlyZWN0aXZlIH0gZnJvbSAnLi4vY29udHJvbC12YWx1ZS1hY2Nlc3Nvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQge1xyXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdERhdGVwaWNrZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcclxuaW1wb3J0IHsgTUFUX0RBVEVfRk9STUFUUyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBDdXN0b21EYXRlRm9ybWF0IH0gZnJvbSAnLi4vZGF0ZS1waWNrZXIvZGF0ZS1mb3JtYXQnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3JzQ29tcG9uZW50IH0gZnJvbSAnLi4vdmFsaWRhdGlvbi1lcnJvcnMvdmFsaWRhdGlvbi1lcnJvcnMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnZGF0ZS1mbnMnO1xyXG5pbXBvcnQgeyBNYXREYXRlUGlja2VySW1wb3J0cywgTWF0Rm9ybUltcG9ydHMgfSBmcm9tICcuLi9zaGFyZWQtaW1wb3J0cyc7XHJcbmltcG9ydCB7IEluZm9JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vaW5mby1pdGVtL2luZm8taXRlbS5jb21wb25lbnQnO1xyXG5cclxuY29uc3QgWUVBUl9PTkxZX0ZPUk1BVCA9IHtcclxuICBwYXJzZToge1xyXG4gICAgZGF0ZUlucHV0OiAnWVlZWScsXHJcbiAgfSxcclxuICBkaXNwbGF5OiB7XHJcbiAgICBkYXRlSW5wdXQ6ICdZWVlZJyxcclxuICAgIG1vbnRoWWVhckxhYmVsOiAnWVlZWScsXHJcbiAgICBkYXRlQTExeUxhYmVsOiAnTEwnLFxyXG4gICAgbW9udGhZZWFyQTExeUxhYmVsOiAnWVlZWScsXHJcbiAgfSxcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWRhdGUtcmFuZ2UtcGlja2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGUtcmFuZ2UtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE1BVF9EQVRFX0ZPUk1BVFMsXHJcbiAgICAgIHVzZUNsYXNzOiBDdXN0b21EYXRlRm9ybWF0LFxyXG4gICAgfSxcclxuICBdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgICBWYWxpZGF0aW9uRXJyb3JzQ29tcG9uZW50LFxyXG4gICAgLi4uTWF0RGF0ZVBpY2tlckltcG9ydHMsXHJcbiAgICAuLi5NYXRGb3JtSW1wb3J0cyxcclxuICAgIEluZm9JdGVtQ29tcG9uZW50LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQ8XHJcbiAgVHlwZVxyXG4+IGV4dGVuZHMgQ29udHJvbFZhbHVlQWNjZXNzb3JEaXJlY3RpdmU8VHlwZT4ge1xyXG4gIEBJbnB1dCgpIGNsYXNzTmFtZSA9ICd3aGl0ZS1pbnB1dCc7XHJcbiAgQElucHV0KCkgeWVhck9ubHk6IGJvb2xlYW47XHJcbiAgQEluamVjdChNQVRfREFURV9GT1JNQVRTKSBwdWJsaWMgZGF0ZUZvcm1hdDogQ3VzdG9tRGF0ZUZvcm1hdDtcclxuICBAVmlld0NoaWxkKE1hdERhdGVwaWNrZXIpIGRhdGVwaWNrZXI6IE1hdERhdGVwaWNrZXI8YW55PjtcclxuICBASW5wdXQoKSBjYWxlbmRhclR5cGUhOiBzdHJpbmc7XHJcbiAgc3RhcnRJbnB1dFZhbHVlOiBzdHJpbmc7XHJcbiAgZW5kSW5wdXRWYWx1ZTogc3RyaW5nO1xyXG4gIGRhdGVSYW5nZTogYW55O1xyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNSZWFkT25seSAmJiB0aGlzLnllYXJPbmx5KSB0aGlzLmFjdGl2YXRlWWVhck9ubHlNb2RlKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICB0aGlzLnNldERhdGVGb3JtQ29udHJvbCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGF0ZUZvcm1Db250cm9sKCkge1xyXG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgY29uc3QgY3VycmVudFllYXIgPSB0b2RheS5nZXRGdWxsWWVhcigpO1xyXG4gICAgY29uc3QgY3VycmVudE1vbnRoID0gdG9kYXkuZ2V0TW9udGgoKTtcclxuICAgIGNvbnN0IGN1cnJlbnREYXkgPSB0b2RheS5nZXREYXRlKCk7XHJcbiAgICBpZiAodGhpcy5taW5EYXRlKSB7XHJcbiAgICAgIGlmICh0aGlzLm1pbkRhdGUgPT0gJ3RvZGF5Jykge1xyXG4gICAgICAgIHRoaXMubWluRGF0ZVZhbHVlID0gbmV3IERhdGUoY3VycmVudFllYXIsIGN1cnJlbnRNb250aCwgY3VycmVudERheSk7XHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5taW5EYXRlVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubWF4RGF0ZSkge1xyXG4gICAgICBpZiAodGhpcy5tYXhEYXRlID09ICd0b2RheScpIHtcclxuICAgICAgICB0aGlzLm1heERhdGVWYWx1ZSA9IG5ldyBEYXRlKGN1cnJlbnRZZWFyLCBjdXJyZW50TW9udGgsIGN1cnJlbnREYXkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLm1heERhdGUgPT0gJ29uZVllYXInKSB7XHJcbiAgICAgICAgdGhpcy5tYXhEYXRlVmFsdWUgPSBuZXcgRGF0ZShcclxuICAgICAgICAgIGN1cnJlbnRZZWFyICsgMSxcclxuICAgICAgICAgIGN1cnJlbnRNb250aCxcclxuICAgICAgICAgIGN1cnJlbnREYXkgLSAxXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY3VzdG9tTWF4RGF0ZSkge1xyXG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGhpcy5jdXN0b21NYXhEYXRlKTtcclxuICAgICAgdGhpcy5tYXhEYXRlVmFsdWUgPSBuZXcgRGF0ZShcclxuICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKCksXHJcbiAgICAgICAgZGF0ZS5nZXRNb250aCgpLFxyXG4gICAgICAgIGRhdGUuZ2V0RGF0ZSgpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jdXN0b21NaW5EYXRlKSB7XHJcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0aGlzLmN1c3RvbU1pbkRhdGUpO1xyXG4gICAgICB0aGlzLm1pbkRhdGVWYWx1ZSA9IG5ldyBEYXRlKFxyXG4gICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSxcclxuICAgICAgICBkYXRlLmdldE1vbnRoKCksXHJcbiAgICAgICAgZGF0ZS5nZXREYXRlKClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5yZXF1aXJlZCkgdGhpcy5jb250cm9sLmFkZFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgfVxyXG5cclxuICBmb2N1c1BpY2tlcihwaWNrZXIpIHtcclxuICAgIHBpY2tlci5vcGVuKCk7XHJcbiAgICB0aGlzLmNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnREYXRlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudD8udmFsdWUgJiYgIXRoaXMuaXNEaXNhYmxlZCkge1xyXG4gICAgICBpZiAodGhpcy5zdGFydERhdGVDb250cm9sLnZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zdGFydERhdGVDb250cm9sLnNldFZhbHVlKFxyXG4gICAgICAgICAgZm9ybWF0KG5ldyBEYXRlKGV2ZW50LnZhbHVlKSwgXCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MuU1NTeHh4XCIpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZW5kRGF0ZUNoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQ/LnZhbHVlICYmICF0aGlzLmlzRGlzYWJsZWQpIHtcclxuICAgICAgaWYgKHRoaXMuc3RhcnREYXRlQ29udHJvbC52YWx1ZSAmJiB0aGlzLmVuZERhdGVDb250cm9sLnZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5lbmREYXRlQ29udHJvbC5zZXRWYWx1ZShcclxuICAgICAgICAgIGZvcm1hdChuZXcgRGF0ZShldmVudC52YWx1ZSksIFwieXl5eS1NTS1kZCdUJ0hIOm1tOnNzLlNTU3h4eFwiKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXREYXRlUmFuZ2VDb250cm9sVmFsdWUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0RGF0ZVJhbmdlQ29udHJvbFZhbHVlKCkge1xyXG4gICAgdGhpcy5kYXRlUmFuZ2UgPSB7XHJcbiAgICAgIHN0YXJ0RGF0ZTogdGhpcy5zdGFydERhdGVDb250cm9sLnZhbHVlLFxyXG4gICAgICBlbmREYXRlOiB0aGlzLmVuZERhdGVDb250cm9sLnZhbHVlLFxyXG4gICAgfTtcclxuICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZSh0aGlzLmRhdGVSYW5nZSk7XHJcbiAgfVxyXG5cclxuICBjbGVhckRhdGVWYWx1ZShldmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRlUmFuZ2UgPSBudWxsO1xyXG4gICAgdGhpcy5zdGFydElucHV0VmFsdWUgPSBudWxsO1xyXG4gICAgdGhpcy5lbmRJbnB1dFZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZShudWxsKTtcclxuICAgIHRoaXMuZW5kRGF0ZUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLnN0YXJ0RGF0ZUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFjdGl2YXRlWWVhck9ubHlNb2RlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRlRm9ybWF0LnVwZGF0ZURhdGVGb3JtYXQoXHJcbiAgICAgIFlFQVJfT05MWV9GT1JNQVQucGFyc2UsXHJcbiAgICAgIFlFQVJfT05MWV9GT1JNQVQuZGlzcGxheVxyXG4gICAgKTtcclxuICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcclxuICAgICAgdGhpcy5jb250cm9sLnNldFZhbHVlKGZvcm1hdChuZXcgRGF0ZSh0aGlzLmNvbnRyb2wudmFsdWUpLCAneXl5eScpKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGF0ZXBpY2tlci5zdGFydFZpZXcgPSAnbXVsdGkteWVhcic7XHJcbiAgICB0aGlzLmRhdGVwaWNrZXIueWVhclNlbGVjdGVkLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUoZm9ybWF0KG5ldyBEYXRlKGUpLCAneXl5eScpKTtcclxuICAgICAgdGhpcy5kYXRlcGlja2VyLmNsb3NlKCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGF0ZXBpY2tlci5vcGVuZWRTdHJlYW0uc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCd5ZWFyLW9ubHknKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5kYXRlcGlja2VyLmNsb3NlZFN0cmVhbS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ3llYXItb25seScpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIkBpZighaXNSZWFkT25seSl7IEBpZihsYWJlbCl7XHJcbjxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItMVwiPlxyXG4gIDxzcGFuIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0wXCI+e3sgbGFiZWwgfX08L3NwYW4+XHJcbiAgQGlmKCFyZXF1aXJlZCl7XHJcbiAgPHNwYW4gY2xhc3M9XCJmcy0xMSBmYy1kYXJrLWdyYXlcIj4ge3sgaTE4bi50cmFuc2xhdGUoXCJvcHRpb25hbFwiKSB9fSA8L3NwYW4+XHJcbiAgfVxyXG48L2Rpdj5cclxufVxyXG48bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJkYXRlLXJhbmdlIHByaW1hcnktZm9ybSB7eyBjbGFzc05hbWUgfX1cIj5cclxuICA8bGFiZWwgY2xhc3M9XCJtYXQtZm9ybS1jb250ZW50XCI+XHJcbiAgICAgICAgPG1hdC1kYXRlLXJhbmdlLWlucHV0IFtyYW5nZVBpY2tlcl09XCJwaWNrZXJcIiAgW21pbl09XCJtaW5EYXRlVmFsdWVcIiBbbWF4XT1cIm1heERhdGVWYWx1ZVwiPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICBtYXRTdGFydERhdGVcclxuICAgICAgICBwbGFjZWhvbGRlcj1cIlN0YXJ0IGRhdGVcIlxyXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJzdGFydERhdGVDb250cm9sXCJcclxuICAgICAgICAoZGF0ZUlucHV0KT1cInN0YXJ0RGF0ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAoZm9jdXMpPVwiZm9jdXNQaWNrZXIocGlja2VyKVwiXHJcbiAgICAgICAgcmVhZG9ubHlcclxuICAgICAgLz5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgbWF0RW5kRGF0ZVxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiRW5kIGRhdGVcIlxyXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJlbmREYXRlQ29udHJvbFwiXHJcbiAgICAgICAgKGRhdGVJbnB1dCk9XCJlbmREYXRlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgIChmb2N1cyk9XCJmb2N1c1BpY2tlcihwaWNrZXIpXCJcclxuICAgICAgICByZWFkb25seVxyXG4gICAgICAvPlxyXG4gICAgPC9tYXQtZGF0ZS1yYW5nZS1pbnB1dD5cclxuICA8L2xhYmVsPlxyXG4gIEBpZihjb250cm9sPy52YWx1ZSl7XHJcbiAgPGRzLWljb25cclxuICAgIG1hdFN1ZmZpeFxyXG4gICAgaWNvbj1cImNsb3NlXCJcclxuICAgIGNsYXNzPVwiZmMtb255eCBmcy0xMCBteC0yIGN1cnNvci1wb2ludGVyXCJcclxuICAgIChjbGljayk9XCJjbGVhckRhdGVWYWx1ZSgkZXZlbnQpXCJcclxuICA+PC9kcy1pY29uPlxyXG4gIH1cclxuICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlclwiIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIj5cclxuICAgIDxpIGNsYXNzPVwic2ZpIHNmaS1jYWxlbmRhci1vIGZjLW9ueXggZm9udC0xOFwiIG1hdERhdGVwaWNrZXJUb2dnbGVJY29uPjwvaT5cclxuICA8L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICA8bWF0LWRhdGUtcmFuZ2UtcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZS1yYW5nZS1waWNrZXI+XHJcbjwvbWF0LWZvcm0tZmllbGQ+XHJcbjxhcHAtdmFsaWRhdGlvbi1lcnJvcnMgW2Vycm9yc109XCJjb250cm9sLmVycm9yc1wiPjwvYXBwLXZhbGlkYXRpb24tZXJyb3JzPlxyXG59IEBlbHNlIHtcclxuPG5nLWNvbnRhaW5lcj5cclxuICA8YXBwLWluZm8taXRlbVxyXG4gICAgY2xhc3M9XCJpbmZvLWl0ZW0gdy0xMDBcIlxyXG4gICAgdHlwZT1cImRhdGVcIlxyXG4gICAgW2luc2lkZVRhYmxlXT1cImluc2lkZVRhYmxlXCJcclxuICAgIFtkYXRlVHlwZV09XCJjYWxlbmRhclR5cGVcIlxyXG4gICAgW2xhYmVsXT1cImxhYmVsXCJcclxuICAgIFt2YWx1ZV09XCJ7XHJcbiAgICAgIHN0YXJ0RGF0ZTogY29udHJvbC52YWx1ZS5zdGFydERhdGUsXHJcbiAgICAgIGVuZERhdGU6IGNvbnRyb2wudmFsdWUuZW5kRGF0ZVxyXG4gICAgfVwiXHJcbiAgICBbaGFzTGFiZWxdPVwiISFsYWJlbFwiXHJcbiAgPlxyXG4gIDwvYXBwLWluZm8taXRlbT5cclxuPC9uZy1jb250YWluZXI+XHJcbn1cclxuIl19