@huntsman-cancer-institute/input 12.3.0 → 14.0.0

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 (104) hide show
  1. package/date/date-date-range.component.d.ts +1 -1
  2. package/date/date-date.component.d.ts +5 -5
  3. package/dropdown/dropdown-select-result.component.d.ts +1 -1
  4. package/dropdown/dropdown-select.component.d.ts +3 -3
  5. package/dropdown/dropdown.component.d.ts +4 -4
  6. package/dropdown/template-dropdown.directive.d.ts +1 -1
  7. package/esm2020/date/date-base.mjs +114 -0
  8. package/esm2020/date/date-date-range.component.mjs +133 -0
  9. package/esm2020/date/date-date.component.mjs +310 -0
  10. package/esm2020/date/date-validator.mjs +40 -0
  11. package/esm2020/date/date.module.mjs +60 -0
  12. package/esm2020/dropdown/dropdown-index.mjs +6 -0
  13. package/esm2020/dropdown/dropdown-select-result.component.mjs +110 -0
  14. package/esm2020/dropdown/dropdown-select.component.mjs +459 -0
  15. package/esm2020/dropdown/dropdown.component.mjs +313 -0
  16. package/esm2020/dropdown/dropdown.module.mjs +50 -0
  17. package/esm2020/dropdown/dropdown.service.mjs +133 -0
  18. package/esm2020/dropdown/messages.mjs +10 -0
  19. package/esm2020/dropdown/select-item.mjs +12 -0
  20. package/esm2020/dropdown/template-dropdown.directive.mjs +26 -0
  21. package/esm2020/huntsman-cancer-institute-input.mjs +5 -0
  22. package/esm2020/index.mjs +20 -0
  23. package/esm2020/inline/inline.component.mjs +249 -0
  24. package/esm2020/inline/inline.module.mjs +28 -0
  25. package/esm2020/search/search.component.mjs +182 -0
  26. package/esm2020/search/search.module.mjs +32 -0
  27. package/esm2020/select/custom-combobox.component.mjs +679 -0
  28. package/{esm2015/select/custom-multi-combobox.component.js → esm2020/select/custom-multi-combobox.component.mjs} +17 -22
  29. package/esm2020/select/md-multi-select.component.mjs +157 -0
  30. package/esm2020/select/md-select.component.mjs +123 -0
  31. package/esm2020/select/native-select.component.mjs +226 -0
  32. package/esm2020/select/select.module.mjs +83 -0
  33. package/fesm2015/huntsman-cancer-institute-input.mjs +3697 -0
  34. package/fesm2015/huntsman-cancer-institute-input.mjs.map +1 -0
  35. package/{fesm2015/huntsman-cancer-institute-input.js → fesm2020/huntsman-cancer-institute-input.mjs} +161 -222
  36. package/fesm2020/huntsman-cancer-institute-input.mjs.map +1 -0
  37. package/inline/inline.component.d.ts +1 -1
  38. package/package.json +29 -22
  39. package/search/search.component.d.ts +1 -1
  40. package/select/custom-combobox.component.d.ts +4 -4
  41. package/select/custom-multi-combobox.component.d.ts +3 -3
  42. package/select/md-multi-select.component.d.ts +3 -3
  43. package/select/md-select.component.d.ts +1 -1
  44. package/select/native-select.component.d.ts +1 -1
  45. package/CHANGELOG.md +0 -4
  46. package/bundles/huntsman-cancer-institute-input.umd.js +0 -3157
  47. package/bundles/huntsman-cancer-institute-input.umd.js.map +0 -1
  48. package/bundles/huntsman-cancer-institute-input.umd.min.js +0 -2
  49. package/bundles/huntsman-cancer-institute-input.umd.min.js.map +0 -1
  50. package/esm2015/date/date-base.js +0 -114
  51. package/esm2015/date/date-date-range.component.js +0 -133
  52. package/esm2015/date/date-date.component.js +0 -320
  53. package/esm2015/date/date-validator.js +0 -40
  54. package/esm2015/date/date.module.js +0 -62
  55. package/esm2015/dropdown/dropdown-index.js +0 -6
  56. package/esm2015/dropdown/dropdown-select-result.component.js +0 -110
  57. package/esm2015/dropdown/dropdown-select.component.js +0 -459
  58. package/esm2015/dropdown/dropdown.component.js +0 -313
  59. package/esm2015/dropdown/dropdown.module.js +0 -52
  60. package/esm2015/dropdown/dropdown.service.js +0 -133
  61. package/esm2015/dropdown/messages.js +0 -10
  62. package/esm2015/dropdown/select-item.js +0 -12
  63. package/esm2015/dropdown/template-dropdown.directive.js +0 -26
  64. package/esm2015/huntsman-cancer-institute-input.js +0 -5
  65. package/esm2015/index.js +0 -20
  66. package/esm2015/inline/inline.component.js +0 -249
  67. package/esm2015/inline/inline.module.js +0 -30
  68. package/esm2015/search/search.component.js +0 -182
  69. package/esm2015/search/search.module.js +0 -34
  70. package/esm2015/select/custom-combobox.component.js +0 -728
  71. package/esm2015/select/md-multi-select.component.js +0 -157
  72. package/esm2015/select/md-select.component.js +0 -123
  73. package/esm2015/select/native-select.component.js +0 -226
  74. package/esm2015/select/select.module.js +0 -85
  75. package/esm5/date/date-base.js +0 -116
  76. package/esm5/date/date-date-range.component.js +0 -93
  77. package/esm5/date/date-date.component.js +0 -213
  78. package/esm5/date/date-validator.js +0 -44
  79. package/esm5/date/date.module.js +0 -66
  80. package/esm5/dropdown/dropdown-index.js +0 -6
  81. package/esm5/dropdown/dropdown-select-result.component.js +0 -86
  82. package/esm5/dropdown/dropdown-select.component.js +0 -370
  83. package/esm5/dropdown/dropdown.component.js +0 -172
  84. package/esm5/dropdown/dropdown.module.js +0 -56
  85. package/esm5/dropdown/dropdown.service.js +0 -139
  86. package/esm5/dropdown/messages.js +0 -14
  87. package/esm5/dropdown/select-item.js +0 -12
  88. package/esm5/dropdown/template-dropdown.directive.js +0 -28
  89. package/esm5/huntsman-cancer-institute-input.js +0 -5
  90. package/esm5/index.js +0 -20
  91. package/esm5/inline/inline.component.js +0 -187
  92. package/esm5/inline/inline.module.js +0 -34
  93. package/esm5/search/search.component.js +0 -204
  94. package/esm5/search/search.module.js +0 -38
  95. package/esm5/select/custom-combobox.component.js +0 -580
  96. package/esm5/select/custom-multi-combobox.component.js +0 -297
  97. package/esm5/select/md-multi-select.component.js +0 -167
  98. package/esm5/select/md-select.component.js +0 -114
  99. package/esm5/select/native-select.component.js +0 -197
  100. package/esm5/select/select.module.js +0 -89
  101. package/fesm2015/huntsman-cancer-institute-input.js.map +0 -1
  102. package/fesm5/huntsman-cancer-institute-input.js +0 -3155
  103. package/fesm5/huntsman-cancer-institute-input.js.map +0 -1
  104. package/huntsman-cancer-institute-input.d.ts +0 -5
@@ -28,5 +28,5 @@ export declare class DateRangeComponent implements AfterViewInit {
28
28
  onClickSubmitEndDate(endData: any): void;
29
29
  private setRange;
30
30
  static ɵfac: i0.ɵɵFactoryDeclaration<DateRangeComponent, never>;
31
- static ɵcmp: i0.ɵɵComponentDeclaration<DateRangeComponent, "hci-date-range", never, { "dateFormat": "dateFormat"; "inputStartData": "inputStartData"; "inputEndData": "inputEndData"; "startLabel": "startLabel"; "endLabel": "endLabel"; "minStartDate": "minStartDate"; }, { "inputDataChange": "inputDataChange"; }, never, never>;
31
+ static ɵcmp: i0.ɵɵComponentDeclaration<DateRangeComponent, "hci-date-range", never, { "dateFormat": "dateFormat"; "inputStartData": "inputStartData"; "inputEndData": "inputEndData"; "startLabel": "startLabel"; "endLabel": "endLabel"; "minStartDate": "minStartDate"; }, { "inputDataChange": "inputDataChange"; }, never, never, false>;
32
32
  }
@@ -1,6 +1,6 @@
1
1
  import { ElementRef, EventEmitter, OnInit, DoCheck, AfterViewInit, ChangeDetectorRef } from "@angular/core";
2
2
  import { DatePipe } from "@angular/common";
3
- import { FormBuilder, FormGroup, FormControl } from "@angular/forms";
3
+ import { UntypedFormBuilder, UntypedFormGroup, UntypedFormControl } from "@angular/forms";
4
4
  import { DateBase } from "./date-base";
5
5
  import * as i0 from "@angular/core";
6
6
  /**
@@ -22,11 +22,11 @@ export declare class DateComponent extends DateBase implements OnInit, DoCheck,
22
22
  inputData: Object;
23
23
  modifiedData: Object;
24
24
  inputDataChange: EventEmitter<any>;
25
- dateForm: FormGroup;
26
- dateInput: FormControl;
25
+ dateForm: UntypedFormGroup;
26
+ dateInput: UntypedFormControl;
27
27
  validate: boolean;
28
28
  private focused;
29
- constructor(elementRef: ElementRef, formBuilder: FormBuilder, datePipe: DatePipe, changeDetectorRef: ChangeDetectorRef);
29
+ constructor(elementRef: ElementRef, formBuilder: UntypedFormBuilder, datePipe: DatePipe, changeDetectorRef: ChangeDetectorRef);
30
30
  /**
31
31
  *
32
32
  */
@@ -49,5 +49,5 @@ export declare class DateComponent extends DateBase implements OnInit, DoCheck,
49
49
  */
50
50
  private ngbDateToString;
51
51
  static ɵfac: i0.ɵɵFactoryDeclaration<DateComponent, never>;
52
- static ɵcmp: i0.ɵɵComponentDeclaration<DateComponent, "hci-date", never, { "dateFormat": "dateFormat"; "minDate": "minDate"; "maxDate": "maxDate"; "label": "label"; "inputData": "inputData"; "modifiedData": "modifiedData"; }, { "inputDataChange": "inputDataChange"; }, never, never>;
52
+ static ɵcmp: i0.ɵɵComponentDeclaration<DateComponent, "hci-date", never, { "dateFormat": "dateFormat"; "minDate": "minDate"; "maxDate": "maxDate"; "label": "label"; "inputData": "inputData"; "modifiedData": "modifiedData"; }, { "inputDataChange": "inputDataChange"; }, never, never, false>;
53
53
  }
@@ -19,5 +19,5 @@ export declare class DropdownSelectResultComponent implements OnInit {
19
19
  scrollToElement(): void;
20
20
  selectCurrentItem(): void;
21
21
  static ɵfac: i0.ɵɵFactoryDeclaration<DropdownSelectResultComponent, never>;
22
- static ɵcmp: i0.ɵɵComponentDeclaration<DropdownSelectResultComponent, "hci-dropdown-select-result", never, { "items": "items"; "searchFocused": "searchFocused"; "selectedItems": "selectedItems"; "templateRef": "templateRef"; }, { "itemSelectedEvent": "itemSelectedEvent"; }, never, never>;
22
+ static ɵcmp: i0.ɵɵComponentDeclaration<DropdownSelectResultComponent, "hci-dropdown-select-result", never, { "items": "items"; "searchFocused": "searchFocused"; "selectedItems": "selectedItems"; "templateRef": "templateRef"; }, { "itemSelectedEvent": "itemSelectedEvent"; }, never, never, false>;
23
23
  }
@@ -1,5 +1,5 @@
1
1
  import { AfterViewInit, TemplateRef, EventEmitter } from "@angular/core";
2
- import { ControlValueAccessor, FormControl } from "@angular/forms";
2
+ import { ControlValueAccessor, UntypedFormControl } from "@angular/forms";
3
3
  import { Observable } from "rxjs";
4
4
  import { DropdownSelectResultComponent } from "./dropdown-select-result.component";
5
5
  import { SelectItem } from "./select-item";
@@ -27,7 +27,7 @@ export declare class DropdownSelectComponent implements AfterViewInit, ControlVa
27
27
  onTouchedCallback: () => void;
28
28
  onChangeCallback: (_: any) => void;
29
29
  templateRef: TemplateRef<any>;
30
- term: FormControl;
30
+ term: UntypedFormControl;
31
31
  searchFocused: boolean;
32
32
  resultsVisible: boolean;
33
33
  listedData: SelectItem[];
@@ -72,5 +72,5 @@ export declare class DropdownSelectComponent implements AfterViewInit, ControlVa
72
72
  private handleMultipleWithIds;
73
73
  private handleSingleWithId;
74
74
  static ɵfac: i0.ɵɵFactoryDeclaration<DropdownSelectComponent, never>;
75
- static ɵcmp: i0.ɵɵComponentDeclaration<DropdownSelectComponent, "hci-dropdown-select", never, { "messages": "messages"; "dataProvider": "dataProvider"; "selectedProvider": "selectedProvider"; "selectItemAdapter": "selectItemAdapter"; "referenceMode": "referenceMode"; "placeholder": "placeholder"; "disabled": "disabled"; "multiple": "multiple"; "clientMode": "clientMode"; "deleteIcon": "deleteIcon"; "inputState": "inputState"; "resultsCount": "resultsCount"; "searchDelay": "searchDelay"; }, { "select": "select"; "remove": "remove"; }, never, never>;
75
+ static ɵcmp: i0.ɵɵComponentDeclaration<DropdownSelectComponent, "hci-dropdown-select", never, { "messages": "messages"; "dataProvider": "dataProvider"; "selectedProvider": "selectedProvider"; "selectItemAdapter": "selectItemAdapter"; "referenceMode": "referenceMode"; "placeholder": "placeholder"; "disabled": "disabled"; "multiple": "multiple"; "clientMode": "clientMode"; "deleteIcon": "deleteIcon"; "inputState": "inputState"; "resultsCount": "resultsCount"; "searchDelay": "searchDelay"; }, { "select": "select"; "remove": "remove"; }, never, never, false>;
76
76
  }
@@ -1,5 +1,5 @@
1
1
  import { EventEmitter, OnInit } from "@angular/core";
2
- import { FormBuilder, FormGroup } from "@angular/forms";
2
+ import { UntypedFormBuilder, UntypedFormGroup } from "@angular/forms";
3
3
  import { Observable } from "rxjs";
4
4
  import { DropdownService } from "./dropdown.service";
5
5
  import { SelectItem } from "./select-item";
@@ -8,7 +8,7 @@ import * as i0 from "@angular/core";
8
8
  export declare class DropdownComponent implements OnInit {
9
9
  private dropdownService;
10
10
  private formBuilder;
11
- dropdownForm: FormGroup;
11
+ dropdownForm: UntypedFormGroup;
12
12
  getItems: (ids: any[]) => Observable<Object[]>;
13
13
  listItems: (item: string) => Observable<Object[]>;
14
14
  listItemsMax: (item: string, ids: any[]) => Observable<Object[]>;
@@ -27,7 +27,7 @@ export declare class DropdownComponent implements OnInit {
27
27
  inputSingleDataChange: EventEmitter<any>;
28
28
  inputMultiDataChange: EventEmitter<any>;
29
29
  dropdownSingle: DropdownSelectComponent;
30
- constructor(dropdownService: DropdownService, formBuilder: FormBuilder);
30
+ constructor(dropdownService: DropdownService, formBuilder: UntypedFormBuilder);
31
31
  ngOnInit(): void;
32
32
  onSelect(item: SelectItem): void;
33
33
  onRemove(item: SelectItem): void;
@@ -36,5 +36,5 @@ export declare class DropdownComponent implements OnInit {
36
36
  private initDropdownItem;
37
37
  private initDropdownForm;
38
38
  static ɵfac: i0.ɵɵFactoryDeclaration<DropdownComponent, never>;
39
- static ɵcmp: i0.ɵɵComponentDeclaration<DropdownComponent, "hci-dropdown", never, { "inputSingleData": "inputSingleData"; "inputMultiData": "inputMultiData"; "modifiedData": "modifiedData"; "optionData": "optionData"; "displayField": "displayField"; "displayId": "displayId"; "dataUrl": "dataUrl"; "dropdownType": "dropdownType"; "placeholder": "placeholder"; "isDisabled": "isDisabled"; }, { "inputSingleDataChange": "inputSingleDataChange"; "inputMultiDataChange": "inputMultiDataChange"; }, never, never>;
39
+ static ɵcmp: i0.ɵɵComponentDeclaration<DropdownComponent, "hci-dropdown", never, { "inputSingleData": "inputSingleData"; "inputMultiData": "inputMultiData"; "modifiedData": "modifiedData"; "optionData": "optionData"; "displayField": "displayField"; "displayId": "displayId"; "dataUrl": "dataUrl"; "dropdownType": "dropdownType"; "placeholder": "placeholder"; "isDisabled": "isDisabled"; }, { "inputSingleDataChange": "inputSingleDataChange"; "inputMultiDataChange": "inputMultiDataChange"; }, never, never, false>;
40
40
  }
@@ -8,5 +8,5 @@ export declare class TemplateDropdownDirective<T> {
8
8
  private templateRef;
9
9
  constructor(templateRef: TemplateRef<T>, host: DropdownSelectComponent);
10
10
  static ɵfac: i0.ɵɵFactoryDeclaration<TemplateDropdownDirective<any>, [null, { host: true; }]>;
11
- static ɵdir: i0.ɵɵDirectiveDeclaration<TemplateDropdownDirective<any>, "[appTemplateDropdown]", never, {}, {}, never>;
11
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TemplateDropdownDirective<any>, "[appTemplateDropdown]", never, {}, {}, never, never, false>;
12
12
  }
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Copyright (c) 2016 Huntsman Cancer Institute at the University of Utah, Confidential and Proprietary
3
+ *
4
+ * Extending class works like in Java except that decorators are only scanned in the child class. In this case,
5
+ * we want variables like inputData to be available to all inline components that extend this class; however, we want
6
+ * this variable to be an @Input.
7
+ * What we can do here is define "inputData: Object" here and in the extending class, define "@Input inputData: Object".
8
+ *
9
+ * The two way binding to the component is inputData. To allow non-saving modification to this data, we copy
10
+ * it to modifiedData. The wrapped component such as input/select/... then use modifiedData as their ngModel.
11
+ * When we cancel out of editing, modifiedData is ignored and replaced with inputData. When editing is saved, inputData
12
+ * is replaced with modifiedData.
13
+ *
14
+ * @since 1.0.0
15
+ */
16
+ import { ElementRef, Injectable } from "@angular/core";
17
+ import * as i0 from "@angular/core";
18
+ export class DateBase {
19
+ constructor(elementRef) {
20
+ this.state = 0;
21
+ this._el = elementRef.nativeElement;
22
+ }
23
+ /**
24
+ * Listen to clicks on the document. If the state is in edit mode and there is a click outside the element,
25
+ * then save it.
26
+ *
27
+ * @param event
28
+ */
29
+ handleOutsideEvent(event) {
30
+ if (this.state !== 1) {
31
+ return;
32
+ }
33
+ let targetCmpt = null;
34
+ try {
35
+ // Catch exception if target is not an element
36
+ targetCmpt = event.target;
37
+ }
38
+ catch (e) {
39
+ this.save();
40
+ return;
41
+ }
42
+ let inside = false;
43
+ do {
44
+ if (targetCmpt === this._el) {
45
+ inside = true;
46
+ break;
47
+ }
48
+ targetCmpt = targetCmpt.parentElement;
49
+ } while (targetCmpt);
50
+ if (!inside) {
51
+ this.save();
52
+ }
53
+ }
54
+ /**
55
+ * Updates the modifiedData (working data) to the bound data.
56
+ */
57
+ updateInternalDataFromModel() {
58
+ this.modifiedData = this.inputData;
59
+ }
60
+ /**
61
+ * Updates the bound data with the working data.
62
+ */
63
+ updateModelFromInternalData() {
64
+ this.inputData = this.modifiedData;
65
+ }
66
+ /**
67
+ * When user chooses to edit, change state to show edit dialog.
68
+ */
69
+ startEdit() {
70
+ this.modifiedData = this.inputData;
71
+ this.state = 1;
72
+ }
73
+ /**
74
+ * Generic actions to change state based on key input. Escape will cancel out of the edit
75
+ * without saving, enter will save and exit.
76
+ *
77
+ * @param event
78
+ */
79
+ onKeyDown(event) {
80
+ if (event.key === "escape") {
81
+ this.cancel();
82
+ }
83
+ else if (event.key === "enter") {
84
+ this.save();
85
+ }
86
+ }
87
+ /**
88
+ *
89
+ * @param newValue
90
+ */
91
+ onChange(newValue) {
92
+ this.modifiedData = newValue;
93
+ }
94
+ /**
95
+ * Replace the bound data with the working data and exit editing mode.
96
+ */
97
+ save() {
98
+ this.updateModelFromInternalData();
99
+ this.state = 0;
100
+ }
101
+ /**
102
+ * Don't update the bound data and exit the editing mode.
103
+ */
104
+ cancel() {
105
+ this.updateInternalDataFromModel();
106
+ this.state = 0;
107
+ }
108
+ }
109
+ DateBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DateBase, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Injectable });
110
+ DateBase.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DateBase });
111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DateBase, decorators: [{
112
+ type: Injectable
113
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaW5wdXQvc3JjL2RhdGUvZGF0ZS1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7O0FBR3JELE1BQU0sT0FBZ0IsUUFBUTtJQVE1QixZQUFZLFVBQXNCO1FBSmxDLFVBQUssR0FBVyxDQUFDLENBQUM7UUFLaEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGtCQUFrQixDQUFDLEtBQVk7UUFDcEMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtZQUNwQixPQUFPO1NBQ1I7UUFDRCxJQUFJLFVBQVUsR0FBZ0IsSUFBSSxDQUFDO1FBRW5DLElBQUk7WUFDRiw4Q0FBOEM7WUFDOUMsVUFBVSxHQUFpQixLQUFLLENBQUMsTUFBTyxDQUFDO1NBQzFDO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWixPQUFPO1NBQ1I7UUFFRCxJQUFJLE1BQU0sR0FBWSxLQUFLLENBQUM7UUFDNUIsR0FBRztZQUNELElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQzNCLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ2QsTUFBTTthQUNQO1lBQ0QsVUFBVSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUM7U0FDdkMsUUFBUSxVQUFVLEVBQUU7UUFDckIsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNiO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksMkJBQTJCO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSwyQkFBMkI7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVM7UUFDZCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksU0FBUyxDQUFDLEtBQW9CO1FBQ25DLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2Y7YUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssT0FBTyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNiO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVEsQ0FBQyxRQUFnQjtRQUM5QixJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxJQUFJO1FBQ1QsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTTtRQUNYLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLENBQUM7O3FHQXZHbUIsUUFBUTt5R0FBUixRQUFROzJGQUFSLFFBQVE7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQ29weXJpZ2h0IChjKSAyMDE2IEh1bnRzbWFuIENhbmNlciBJbnN0aXR1dGUgYXQgdGhlIFVuaXZlcnNpdHkgb2YgVXRhaCwgQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeVxyXG4gKlxyXG4gKiBFeHRlbmRpbmcgY2xhc3Mgd29ya3MgbGlrZSBpbiBKYXZhIGV4Y2VwdCB0aGF0IGRlY29yYXRvcnMgYXJlIG9ubHkgc2Nhbm5lZCBpbiB0aGUgY2hpbGQgY2xhc3MuICBJbiB0aGlzIGNhc2UsXHJcbiAqIHdlIHdhbnQgdmFyaWFibGVzIGxpa2UgaW5wdXREYXRhIHRvIGJlIGF2YWlsYWJsZSB0byBhbGwgaW5saW5lIGNvbXBvbmVudHMgdGhhdCBleHRlbmQgdGhpcyBjbGFzczsgaG93ZXZlciwgd2Ugd2FudFxyXG4gKiB0aGlzIHZhcmlhYmxlIHRvIGJlIGFuIEBJbnB1dC5cclxuICogV2hhdCB3ZSBjYW4gZG8gaGVyZSBpcyBkZWZpbmUgXCJpbnB1dERhdGE6IE9iamVjdFwiIGhlcmUgYW5kIGluIHRoZSBleHRlbmRpbmcgY2xhc3MsIGRlZmluZSBcIkBJbnB1dCBpbnB1dERhdGE6IE9iamVjdFwiLlxyXG4gKlxyXG4gKiBUaGUgdHdvIHdheSBiaW5kaW5nIHRvIHRoZSBjb21wb25lbnQgaXMgaW5wdXREYXRhLiAgVG8gYWxsb3cgbm9uLXNhdmluZyBtb2RpZmljYXRpb24gdG8gdGhpcyBkYXRhLCB3ZSBjb3B5XHJcbiAqIGl0IHRvIG1vZGlmaWVkRGF0YS4gIFRoZSB3cmFwcGVkIGNvbXBvbmVudCBzdWNoIGFzIGlucHV0L3NlbGVjdC8uLi4gdGhlbiB1c2UgbW9kaWZpZWREYXRhIGFzIHRoZWlyIG5nTW9kZWwuXHJcbiAqIFdoZW4gd2UgY2FuY2VsIG91dCBvZiBlZGl0aW5nLCBtb2RpZmllZERhdGEgaXMgaWdub3JlZCBhbmQgcmVwbGFjZWQgd2l0aCBpbnB1dERhdGEuICBXaGVuIGVkaXRpbmcgaXMgc2F2ZWQsIGlucHV0RGF0YVxyXG4gKiBpcyByZXBsYWNlZCB3aXRoIG1vZGlmaWVkRGF0YS5cclxuICpcclxuICogQHNpbmNlIDEuMC4wXHJcbiAqL1xyXG5pbXBvcnQge0VsZW1lbnRSZWYsIEluamVjdGFibGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYXRlQmFzZSB7XHJcblxyXG4gIGlucHV0RGF0YTogT2JqZWN0O1xyXG4gIG1vZGlmaWVkRGF0YTogT2JqZWN0O1xyXG4gIHN0YXRlOiBudW1iZXIgPSAwO1xyXG5cclxuICBfZWw6IEhUTUxFbGVtZW50O1xyXG5cclxuICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XHJcbiAgICB0aGlzLl9lbCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiB0byBjbGlja3Mgb24gdGhlIGRvY3VtZW50LiAgSWYgdGhlIHN0YXRlIGlzIGluIGVkaXQgbW9kZSBhbmQgdGhlcmUgaXMgYSBjbGljayBvdXRzaWRlIHRoZSBlbGVtZW50LFxyXG4gICAqIHRoZW4gc2F2ZSBpdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqL1xyXG4gIHB1YmxpYyBoYW5kbGVPdXRzaWRlRXZlbnQoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gMSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgdGFyZ2V0Q21wdDogSFRNTEVsZW1lbnQgPSBudWxsO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIENhdGNoIGV4Y2VwdGlvbiBpZiB0YXJnZXQgaXMgbm90IGFuIGVsZW1lbnRcclxuICAgICAgdGFyZ2V0Q21wdCA9ICg8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgdGhpcy5zYXZlKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaW5zaWRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBkbyB7XHJcbiAgICAgIGlmICh0YXJnZXRDbXB0ID09PSB0aGlzLl9lbCkge1xyXG4gICAgICAgIGluc2lkZSA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgdGFyZ2V0Q21wdCA9IHRhcmdldENtcHQucGFyZW50RWxlbWVudDtcclxuICAgIH0gd2hpbGUgKHRhcmdldENtcHQpO1xyXG4gICAgaWYgKCFpbnNpZGUpIHtcclxuICAgICAgdGhpcy5zYXZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSBtb2RpZmllZERhdGEgKHdvcmtpbmcgZGF0YSkgdG8gdGhlIGJvdW5kIGRhdGEuXHJcbiAgICovXHJcbiAgcHVibGljIHVwZGF0ZUludGVybmFsRGF0YUZyb21Nb2RlbCgpIHtcclxuICAgIHRoaXMubW9kaWZpZWREYXRhID0gdGhpcy5pbnB1dERhdGE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSBib3VuZCBkYXRhIHdpdGggdGhlIHdvcmtpbmcgZGF0YS5cclxuICAgKi9cclxuICBwdWJsaWMgdXBkYXRlTW9kZWxGcm9tSW50ZXJuYWxEYXRhKCkge1xyXG4gICAgdGhpcy5pbnB1dERhdGEgPSB0aGlzLm1vZGlmaWVkRGF0YTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gdXNlciBjaG9vc2VzIHRvIGVkaXQsIGNoYW5nZSBzdGF0ZSB0byBzaG93IGVkaXQgZGlhbG9nLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzdGFydEVkaXQoKSB7XHJcbiAgICB0aGlzLm1vZGlmaWVkRGF0YSA9IHRoaXMuaW5wdXREYXRhO1xyXG4gICAgdGhpcy5zdGF0ZSA9IDE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmljIGFjdGlvbnMgdG8gY2hhbmdlIHN0YXRlIGJhc2VkIG9uIGtleSBpbnB1dC4gIEVzY2FwZSB3aWxsIGNhbmNlbCBvdXQgb2YgdGhlIGVkaXRcclxuICAgKiB3aXRob3V0IHNhdmluZywgZW50ZXIgd2lsbCBzYXZlIGFuZCBleGl0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICovXHJcbiAgcHVibGljIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJlc2NhcGVcIikge1xyXG4gICAgICB0aGlzLmNhbmNlbCgpO1xyXG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiZW50ZXJcIikge1xyXG4gICAgICB0aGlzLnNhdmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIG5ld1ZhbHVlXHJcbiAgICovXHJcbiAgcHVibGljIG9uQ2hhbmdlKG5ld1ZhbHVlOiBPYmplY3QpIHtcclxuICAgIHRoaXMubW9kaWZpZWREYXRhID0gbmV3VmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXBsYWNlIHRoZSBib3VuZCBkYXRhIHdpdGggdGhlIHdvcmtpbmcgZGF0YSBhbmQgZXhpdCBlZGl0aW5nIG1vZGUuXHJcbiAgICovXHJcbiAgcHVibGljIHNhdmUoKSB7XHJcbiAgICB0aGlzLnVwZGF0ZU1vZGVsRnJvbUludGVybmFsRGF0YSgpO1xyXG4gICAgdGhpcy5zdGF0ZSA9IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEb24ndCB1cGRhdGUgdGhlIGJvdW5kIGRhdGEgYW5kIGV4aXQgdGhlIGVkaXRpbmcgbW9kZS5cclxuICAgKi9cclxuICBwdWJsaWMgY2FuY2VsKCkge1xyXG4gICAgdGhpcy51cGRhdGVJbnRlcm5hbERhdGFGcm9tTW9kZWwoKTtcclxuICAgIHRoaXMuc3RhdGUgPSAwO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
@@ -0,0 +1,133 @@
1
+ import { Component, EventEmitter, Input, Output, ViewChild } from "@angular/core";
2
+ import { DateComponent } from "./date-date.component";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./date-date.component";
5
+ /**
6
+ * TODO: Confirm timezone behavior.
7
+ *
8
+ * @since 4.0.0
9
+ */
10
+ export class DateRangeComponent {
11
+ constructor() {
12
+ // Binded data from the parent component.
13
+ this.dateFormat = "shortDate";
14
+ this.inputDataChange = new EventEmitter();
15
+ }
16
+ ngOnInit() {
17
+ this.setRange();
18
+ }
19
+ /**
20
+ *
21
+ */
22
+ ngAfterViewInit() {
23
+ // if there is no start date but there is an end date, make the start date go to the end date
24
+ if (!this.inputStartData && this.inputEndData) {
25
+ let dt = new Date(this.inputEndData);
26
+ this.sp.startDate = { year: dt.getFullYear(), month: dt.getMonth() + 1, day: dt.getDate() };
27
+ }
28
+ }
29
+ onClickSubmitStartDate(startData) {
30
+ this.setRange();
31
+ // if there is no start date but there is an end date, make the start date go to the end date
32
+ if (!startData && this.inputEndData) {
33
+ let dt = new Date(this.inputEndData);
34
+ this.sp.startDate = { year: dt.getFullYear(), month: dt.getMonth() + 1, day: dt.getDate() };
35
+ }
36
+ this.inputDataChange.emit([this.inputStartData, this.inputEndData]);
37
+ }
38
+ onClickSubmitEndDate(endData) {
39
+ this.setRange();
40
+ this.inputDataChange.emit([this.inputStartData, this.inputEndData]);
41
+ }
42
+ setRange() {
43
+ // set the minDate to 20 years in the past by default
44
+ let today = new Date();
45
+ if (!this.minStartDate) {
46
+ this.minStartDate = { year: today.getFullYear() - 20, month: today.getMonth() + 1, day: today.getDate() };
47
+ }
48
+ this.minEndDate = this.minStartDate;
49
+ // set the maxDate to today by default
50
+ this.maxStartDate = { year: today.getFullYear(), month: today.getMonth() + 1, day: today.getDate() };
51
+ this.maxEndDate = this.maxStartDate;
52
+ if (this.inputEndData) {
53
+ let endDate = new Date(this.inputEndData);
54
+ this.maxStartDate = { year: endDate.getFullYear(), month: endDate.getMonth() + 1, day: endDate.getDate() };
55
+ }
56
+ if (this.inputStartData) {
57
+ let startDate = new Date(this.inputStartData);
58
+ this.minEndDate = { year: startDate.getFullYear(), month: startDate.getMonth() + 1, day: startDate.getDate() };
59
+ }
60
+ }
61
+ }
62
+ DateRangeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DateRangeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
63
+ DateRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: DateRangeComponent, selector: "hci-date-range", inputs: { dateFormat: "dateFormat", inputStartData: "inputStartData", inputEndData: "inputEndData", startLabel: "startLabel", endLabel: "endLabel", minStartDate: "minStartDate" }, outputs: { inputDataChange: "inputDataChange" }, viewQueries: [{ propertyName: "sp", first: true, predicate: ["startdate"], descendants: true, static: true }, { propertyName: "ep", first: true, predicate: ["enddate"], descendants: true, static: true }], ngImport: i0, template: `
64
+ <div class="d-flex flex-wrap date-range">
65
+ <hci-date #startdate
66
+ class="date"
67
+ [label]="startLabel"
68
+ [(inputData)]="inputStartData"
69
+ (inputDataChange)="onClickSubmitStartDate($event)"
70
+ [dateFormat]="dateFormat"
71
+ [minDate]="minStartDate"
72
+ [maxDate]="maxStartDate">
73
+ </hci-date>
74
+ <hci-date #enddate
75
+ class="date"
76
+ [label]="endLabel"
77
+ [(inputData)]="inputEndData"
78
+ (inputDataChange)="onClickSubmitEndDate($event)"
79
+ [dateFormat]="dateFormat"
80
+ [minDate]="minEndDate"
81
+ [maxDate]="maxEndDate">
82
+ </hci-date>
83
+ </div>
84
+ `, isInline: true, dependencies: [{ kind: "component", type: i1.DateComponent, selector: "hci-date", inputs: ["dateFormat", "minDate", "maxDate", "label", "inputData", "modifiedData"], outputs: ["inputDataChange"] }] });
85
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DateRangeComponent, decorators: [{
86
+ type: Component,
87
+ args: [{
88
+ selector: "hci-date-range",
89
+ template: `
90
+ <div class="d-flex flex-wrap date-range">
91
+ <hci-date #startdate
92
+ class="date"
93
+ [label]="startLabel"
94
+ [(inputData)]="inputStartData"
95
+ (inputDataChange)="onClickSubmitStartDate($event)"
96
+ [dateFormat]="dateFormat"
97
+ [minDate]="minStartDate"
98
+ [maxDate]="maxStartDate">
99
+ </hci-date>
100
+ <hci-date #enddate
101
+ class="date"
102
+ [label]="endLabel"
103
+ [(inputData)]="inputEndData"
104
+ (inputDataChange)="onClickSubmitEndDate($event)"
105
+ [dateFormat]="dateFormat"
106
+ [minDate]="minEndDate"
107
+ [maxDate]="maxEndDate">
108
+ </hci-date>
109
+ </div>
110
+ `
111
+ }]
112
+ }], propDecorators: { sp: [{
113
+ type: ViewChild,
114
+ args: ["startdate", { static: true }]
115
+ }], ep: [{
116
+ type: ViewChild,
117
+ args: ["enddate", { static: true }]
118
+ }], dateFormat: [{
119
+ type: Input
120
+ }], inputStartData: [{
121
+ type: Input
122
+ }], inputEndData: [{
123
+ type: Input
124
+ }], startLabel: [{
125
+ type: Input
126
+ }], endLabel: [{
127
+ type: Input
128
+ }], inputDataChange: [{
129
+ type: Output
130
+ }], minStartDate: [{
131
+ type: Input
132
+ }] } });
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1kYXRlLXJhbmdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2lucHV0L3NyYy9kYXRlL2RhdGUtZGF0ZS1yYW5nZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFpQixNQUFNLEVBQUUsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRS9GLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7O0FBRXBEOzs7O0dBSUc7QUEwQkgsTUFBTSxPQUFPLGtCQUFrQjtJQXpCL0I7UUFpQ0cseUNBQXlDO1FBQ2hDLGVBQVUsR0FBVyxXQUFXLENBQUM7UUFLaEMsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO0tBd0R4RDtJQWpERSxRQUFRO1FBQ04sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7TUFFRTtJQUNILGVBQWU7UUFDWiw2RkFBNkY7UUFDN0YsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUM3QyxJQUFJLEVBQUUsR0FBUyxJQUFJLElBQUksQ0FBUyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEdBQUcsRUFBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUMsQ0FBQztTQUMzRjtJQUNKLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxTQUFTO1FBQzlCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQiw2RkFBNkY7UUFDN0YsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENB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QUFNLEVBQUUsSUFBSSxFQUFDO2dCQUk1QixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTTtnQkFFRSxZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIEFmdGVyVmlld0luaXQsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHtEYXRlQ29tcG9uZW50fSBmcm9tIFwiLi9kYXRlLWRhdGUuY29tcG9uZW50XCI7XHJcblxyXG4vKipcclxuICogVE9ETzogQ29uZmlybSB0aW1lem9uZSBiZWhhdmlvci5cclxuICpcclxuICogQHNpbmNlIDQuMC4wXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJoY2ktZGF0ZS1yYW5nZVwiLFxyXG4gIHRlbXBsYXRlOiBgICBcclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC13cmFwIGRhdGUtcmFuZ2VcIj5cclxuICAgICAgPGhjaS1kYXRlICNzdGFydGRhdGVcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwic3RhcnRMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICBbKGlucHV0RGF0YSldPVwiaW5wdXRTdGFydERhdGFcIlxyXG4gICAgICAgICAgICAgICAgKGlucHV0RGF0YUNoYW5nZSk9XCJvbkNsaWNrU3VibWl0U3RhcnREYXRlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgW2RhdGVGb3JtYXRdPVwiZGF0ZUZvcm1hdFwiXHJcbiAgICAgICAgICAgICAgICBbbWluRGF0ZV09XCJtaW5TdGFydERhdGVcIlxyXG4gICAgICAgICAgICAgICAgW21heERhdGVdPVwibWF4U3RhcnREYXRlXCI+XHJcbiAgICAgIDwvaGNpLWRhdGU+XHJcbiAgICAgIDxoY2ktZGF0ZSAjZW5kZGF0ZVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYXRlXCJcclxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJlbmRMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICBbKGlucHV0RGF0YSldPVwiaW5wdXRFbmREYXRhXCJcclxuICAgICAgICAgICAgICAgIChpbnB1dERhdGFDaGFuZ2UpPVwib25DbGlja1N1Ym1pdEVuZERhdGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCJkYXRlRm9ybWF0XCJcclxuICAgICAgICAgICAgICAgIFttaW5EYXRlXT1cIm1pbkVuZERhdGVcIlxyXG4gICAgICAgICAgICAgICAgW21heERhdGVdPVwibWF4RW5kRGF0ZVwiPlxyXG4gICAgICA8L2hjaS1kYXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgYFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0ZVJhbmdlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gICAgQFZpZXdDaGlsZChcInN0YXJ0ZGF0ZVwiLCB7c3RhdGljOiB0cnVlfSlcclxuICAgIHNwOiBEYXRlQ29tcG9uZW50O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoXCJlbmRkYXRlXCIsIHtzdGF0aWM6IHRydWV9KVxyXG4gICAgZXA6IERhdGVDb21wb25lbnQ7XHJcblxyXG4gICAvLyBCaW5kZWQgZGF0YSBmcm9tIHRoZSBwYXJlbnQgY29tcG9uZW50LlxyXG4gICBASW5wdXQoKSBkYXRlRm9ybWF0OiBzdHJpbmcgPSBcInNob3J0RGF0ZVwiO1xyXG4gICBASW5wdXQoKSBpbnB1dFN0YXJ0RGF0YTogT2JqZWN0O1xyXG4gICBASW5wdXQoKSBpbnB1dEVuZERhdGE6IE9iamVjdDtcclxuICAgQElucHV0KCkgc3RhcnRMYWJlbDogc3RyaW5nO1xyXG4gICBASW5wdXQoKSBlbmRMYWJlbDogc3RyaW5nO1xyXG4gICBAT3V0cHV0KCkgaW5wdXREYXRhQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcclxuXHJcbiAgIEBJbnB1dCgpIG1pblN0YXJ0RGF0ZTogYW55O1xyXG4gICBwdWJsaWMgbWF4U3RhcnREYXRlO1xyXG4gICBwdWJsaWMgbWluRW5kRGF0ZTtcclxuICAgcHVibGljIG1heEVuZERhdGU7XHJcblxyXG4gICBuZ09uSW5pdCgpIHtcclxuICAgICB0aGlzLnNldFJhbmdlKCk7XHJcbiAgIH1cclxuXHJcbiAgIC8qKlxyXG4gICAqXHJcbiAgICovXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgIC8vIGlmIHRoZXJlIGlzIG5vIHN0YXJ0IGRhdGUgYnV0IHRoZXJlIGlzIGFuIGVuZCBkYXRlLCBtYWtlIHRoZSBzdGFydCBkYXRlIGdvIHRvIHRoZSBlbmQgZGF0ZVxyXG4gICAgIGlmICghdGhpcy5pbnB1dFN0YXJ0RGF0YSAmJiB0aGlzLmlucHV0RW5kRGF0YSkge1xyXG4gICAgICAgbGV0IGR0OiBEYXRlID0gbmV3IERhdGUoPHN0cmluZz50aGlzLmlucHV0RW5kRGF0YSk7XHJcbiAgICAgICB0aGlzLnNwLnN0YXJ0RGF0ZSA9IHt5ZWFyOiBkdC5nZXRGdWxsWWVhcigpLCBtb250aDogZHQuZ2V0TW9udGgoKSArIDEsIGRheTogZHQuZ2V0RGF0ZSgpfTtcclxuICAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrU3VibWl0U3RhcnREYXRlKHN0YXJ0RGF0YSkge1xyXG4gICAgdGhpcy5zZXRSYW5nZSgpO1xyXG4gICAgLy8gaWYgdGhlcmUgaXMgbm8gc3RhcnQgZGF0ZSBidXQgdGhlcmUgaXMgYW4gZW5kIGRhdGUsIG1ha2UgdGhlIHN0YXJ0IGRhdGUgZ28gdG8gdGhlIGVuZCBkYXRlXHJcbiAgICBpZiAoIXN0YXJ0RGF0YSAmJiB0aGlzLmlucHV0RW5kRGF0YSkge1xyXG4gICAgICBsZXQgZHQ6IERhdGUgPSBuZXcgRGF0ZSg8c3RyaW5nPnRoaXMuaW5wdXRFbmREYXRhKTtcclxuICAgICAgdGhpcy5zcC5zdGFydERhdGUgPSB7eWVhcjogZHQuZ2V0RnVsbFllYXIoKSwgbW9udGg6IGR0LmdldE1vbnRoKCkgKyAxLCBkYXk6IGR0LmdldERhdGUoKX07XHJcbiAgICB9XHJcbiAgICB0aGlzLmlucHV0RGF0YUNoYW5nZS5lbWl0KFt0aGlzLmlucHV0U3RhcnREYXRhLCB0aGlzLmlucHV0RW5kRGF0YV0pO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja1N1Ym1pdEVuZERhdGUoZW5kRGF0YSkge1xyXG4gICAgdGhpcy5zZXRSYW5nZSgpO1xyXG4gICAgdGhpcy5pbnB1dERhdGFDaGFuZ2UuZW1pdChbdGhpcy5pbnB1dFN0YXJ0RGF0YSwgdGhpcy5pbnB1dEVuZERhdGFdKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0UmFuZ2UoKSB7XHJcbiAgICAvLyBzZXQgdGhlIG1pbkRhdGUgdG8gMjAgeWVhcnMgaW4gdGhlIHBhc3QgYnkgZGVmYXVsdFxyXG4gICAgbGV0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgIGlmICghdGhpcy5taW5TdGFydERhdGUpIHtcclxuICAgICAgICB0aGlzLm1pblN0YXJ0RGF0ZSA9IHt5ZWFyOiB0b2RheS5nZXRGdWxsWWVhcigpIC0gMjAsIG1vbnRoOiB0b2RheS5nZXRNb250aCgpICsgMSwgZGF5OiB0b2RheS5nZXREYXRlKCl9O1xyXG4gICAgfVxyXG4gICAgdGhpcy5taW5FbmREYXRlID0gdGhpcy5taW5TdGFydERhdGU7XHJcbiAgICAvLyBzZXQgdGhlIG1heERhdGUgdG8gdG9kYXkgYnkgZGVmYXVsdFxyXG4gICAgdGhpcy5tYXhTdGFydERhdGUgPSB7eWVhcjogdG9kYXkuZ2V0RnVsbFllYXIoKSwgbW9udGg6IHRvZGF5LmdldE1vbnRoKCkgKyAxLCBkYXk6IHRvZGF5LmdldERhdGUoKX07XHJcbiAgICB0aGlzLm1heEVuZERhdGUgPSB0aGlzLm1heFN0YXJ0RGF0ZTtcclxuICAgIGlmICh0aGlzLmlucHV0RW5kRGF0YSkge1xyXG4gICAgICAgIGxldCBlbmREYXRlID0gbmV3IERhdGUoPHN0cmluZz50aGlzLmlucHV0RW5kRGF0YSk7XHJcbiAgICAgICAgdGhpcy5tYXhTdGFydERhdGUgPSB7eWVhcjogZW5kRGF0ZS5nZXRGdWxsWWVhcigpLCBtb250aDogZW5kRGF0ZS5nZXRNb250aCgpICsgMSwgZGF5OiBlbmREYXRlLmdldERhdGUoKX07XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pbnB1dFN0YXJ0RGF0YSkge1xyXG4gICAgICAgIGxldCBzdGFydERhdGUgPSBuZXcgRGF0ZSg8c3RyaW5nPnRoaXMuaW5wdXRTdGFydERhdGEpO1xyXG4gICAgICAgIHRoaXMubWluRW5kRGF0ZSA9IHt5ZWFyOiBzdGFydERhdGUuZ2V0RnVsbFllYXIoKSwgbW9udGg6IHN0YXJ0RGF0ZS5nZXRNb250aCgpICsgMSwgZGF5OiBzdGFydERhdGUuZ2V0RGF0ZSgpfTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19