@huntsman-cancer-institute/input 12.3.0 → 15.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 (109) 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/date/date.module.d.ts +4 -4
  4. package/dropdown/dropdown-select-result.component.d.ts +1 -1
  5. package/dropdown/dropdown-select.component.d.ts +3 -3
  6. package/dropdown/dropdown.component.d.ts +4 -4
  7. package/dropdown/dropdown.service.d.ts +6 -6
  8. package/dropdown/select-item.d.ts +5 -5
  9. package/dropdown/template-dropdown.directive.d.ts +1 -1
  10. package/esm2020/date/date-base.mjs +114 -0
  11. package/esm2020/date/date-date-range.component.mjs +133 -0
  12. package/esm2020/date/date-date.component.mjs +310 -0
  13. package/esm2020/date/date-validator.mjs +40 -0
  14. package/esm2020/date/date.module.mjs +60 -0
  15. package/esm2020/dropdown/dropdown-index.mjs +6 -0
  16. package/esm2020/dropdown/dropdown-select-result.component.mjs +110 -0
  17. package/esm2020/dropdown/dropdown-select.component.mjs +459 -0
  18. package/esm2020/dropdown/dropdown.component.mjs +313 -0
  19. package/esm2020/dropdown/dropdown.module.mjs +50 -0
  20. package/esm2020/dropdown/dropdown.service.mjs +133 -0
  21. package/esm2020/dropdown/messages.mjs +10 -0
  22. package/esm2020/dropdown/select-item.mjs +12 -0
  23. package/esm2020/dropdown/template-dropdown.directive.mjs +26 -0
  24. package/esm2020/huntsman-cancer-institute-input.mjs +5 -0
  25. package/esm2020/index.mjs +20 -0
  26. package/esm2020/inline/inline.component.mjs +249 -0
  27. package/esm2020/inline/inline.module.mjs +28 -0
  28. package/esm2020/search/search.component.mjs +182 -0
  29. package/esm2020/search/search.module.mjs +32 -0
  30. package/esm2020/select/custom-combobox.component.mjs +679 -0
  31. package/esm2020/select/custom-multi-combobox.component.mjs +290 -0
  32. package/esm2020/select/md-multi-select.component.mjs +157 -0
  33. package/esm2020/select/md-select.component.mjs +123 -0
  34. package/esm2020/select/native-select.component.mjs +226 -0
  35. package/esm2020/select/select.module.mjs +83 -0
  36. package/fesm2015/huntsman-cancer-institute-input.mjs +3697 -0
  37. package/fesm2015/huntsman-cancer-institute-input.mjs.map +1 -0
  38. package/{fesm2015/huntsman-cancer-institute-input.js → fesm2020/huntsman-cancer-institute-input.mjs} +206 -267
  39. package/fesm2020/huntsman-cancer-institute-input.mjs.map +1 -0
  40. package/inline/inline.component.d.ts +1 -1
  41. package/package.json +30 -23
  42. package/search/search.component.d.ts +1 -1
  43. package/select/custom-combobox.component.d.ts +5 -5
  44. package/select/custom-multi-combobox.component.d.ts +5 -5
  45. package/select/md-multi-select.component.d.ts +3 -3
  46. package/select/md-select.component.d.ts +1 -1
  47. package/select/native-select.component.d.ts +1 -1
  48. package/select/select.module.d.ts +6 -6
  49. package/CHANGELOG.md +0 -4
  50. package/bundles/huntsman-cancer-institute-input.umd.js +0 -3157
  51. package/bundles/huntsman-cancer-institute-input.umd.js.map +0 -1
  52. package/bundles/huntsman-cancer-institute-input.umd.min.js +0 -2
  53. package/bundles/huntsman-cancer-institute-input.umd.min.js.map +0 -1
  54. package/esm2015/date/date-base.js +0 -114
  55. package/esm2015/date/date-date-range.component.js +0 -133
  56. package/esm2015/date/date-date.component.js +0 -320
  57. package/esm2015/date/date-validator.js +0 -40
  58. package/esm2015/date/date.module.js +0 -62
  59. package/esm2015/dropdown/dropdown-index.js +0 -6
  60. package/esm2015/dropdown/dropdown-select-result.component.js +0 -110
  61. package/esm2015/dropdown/dropdown-select.component.js +0 -459
  62. package/esm2015/dropdown/dropdown.component.js +0 -313
  63. package/esm2015/dropdown/dropdown.module.js +0 -52
  64. package/esm2015/dropdown/dropdown.service.js +0 -133
  65. package/esm2015/dropdown/messages.js +0 -10
  66. package/esm2015/dropdown/select-item.js +0 -12
  67. package/esm2015/dropdown/template-dropdown.directive.js +0 -26
  68. package/esm2015/huntsman-cancer-institute-input.js +0 -5
  69. package/esm2015/index.js +0 -20
  70. package/esm2015/inline/inline.component.js +0 -249
  71. package/esm2015/inline/inline.module.js +0 -30
  72. package/esm2015/search/search.component.js +0 -182
  73. package/esm2015/search/search.module.js +0 -34
  74. package/esm2015/select/custom-combobox.component.js +0 -728
  75. package/esm2015/select/custom-multi-combobox.component.js +0 -295
  76. package/esm2015/select/md-multi-select.component.js +0 -157
  77. package/esm2015/select/md-select.component.js +0 -123
  78. package/esm2015/select/native-select.component.js +0 -226
  79. package/esm2015/select/select.module.js +0 -85
  80. package/esm5/date/date-base.js +0 -116
  81. package/esm5/date/date-date-range.component.js +0 -93
  82. package/esm5/date/date-date.component.js +0 -213
  83. package/esm5/date/date-validator.js +0 -44
  84. package/esm5/date/date.module.js +0 -66
  85. package/esm5/dropdown/dropdown-index.js +0 -6
  86. package/esm5/dropdown/dropdown-select-result.component.js +0 -86
  87. package/esm5/dropdown/dropdown-select.component.js +0 -370
  88. package/esm5/dropdown/dropdown.component.js +0 -172
  89. package/esm5/dropdown/dropdown.module.js +0 -56
  90. package/esm5/dropdown/dropdown.service.js +0 -139
  91. package/esm5/dropdown/messages.js +0 -14
  92. package/esm5/dropdown/select-item.js +0 -12
  93. package/esm5/dropdown/template-dropdown.directive.js +0 -28
  94. package/esm5/huntsman-cancer-institute-input.js +0 -5
  95. package/esm5/index.js +0 -20
  96. package/esm5/inline/inline.component.js +0 -187
  97. package/esm5/inline/inline.module.js +0 -34
  98. package/esm5/search/search.component.js +0 -204
  99. package/esm5/search/search.module.js +0 -38
  100. package/esm5/select/custom-combobox.component.js +0 -580
  101. package/esm5/select/custom-multi-combobox.component.js +0 -297
  102. package/esm5/select/md-multi-select.component.js +0 -167
  103. package/esm5/select/md-select.component.js +0 -114
  104. package/esm5/select/native-select.component.js +0 -197
  105. package/esm5/select/select.module.js +0 -89
  106. package/fesm2015/huntsman-cancer-institute-input.js.map +0 -1
  107. package/fesm5/huntsman-cancer-institute-input.js +0 -3155
  108. package/fesm5/huntsman-cancer-institute-input.js.map +0 -1
  109. 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, never>;
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, never>;
53
53
  }
@@ -4,13 +4,13 @@ import * as i2 from "./date-date-range.component";
4
4
  import * as i3 from "@angular/common";
5
5
  import * as i4 from "@angular/forms";
6
6
  import * as i5 from "@ng-bootstrap/ng-bootstrap";
7
- import * as i6 from "@angular/material/tabs";
8
- import * as i7 from "@angular/material/form-field";
7
+ import * as i6 from "@angular/material/legacy-tabs";
8
+ import * as i7 from "@angular/material/legacy-form-field";
9
9
  import * as i8 from "@angular/material/datepicker";
10
10
  import * as i9 from "@angular/material/core";
11
- import * as i10 from "@angular/material/input";
11
+ import * as i10 from "@angular/material/legacy-input";
12
12
  export declare class DateModule {
13
13
  static ɵfac: i0.ɵɵFactoryDeclaration<DateModule, never>;
14
- static ɵmod: i0.ɵɵNgModuleDeclaration<DateModule, [typeof i1.DateComponent, typeof i2.DateRangeComponent], [typeof i3.CommonModule, typeof i4.FormsModule, typeof i4.ReactiveFormsModule, typeof i5.NgbModule, typeof i6.MatTabsModule, typeof i7.MatFormFieldModule, typeof i8.MatDatepickerModule, typeof i9.MatNativeDateModule, typeof i10.MatInputModule], [typeof i1.DateComponent, typeof i2.DateRangeComponent]>;
14
+ static ɵmod: i0.ɵɵNgModuleDeclaration<DateModule, [typeof i1.DateComponent, typeof i2.DateRangeComponent], [typeof i3.CommonModule, typeof i4.FormsModule, typeof i4.ReactiveFormsModule, typeof i5.NgbModule, typeof i6.MatLegacyTabsModule, typeof i7.MatLegacyFormFieldModule, typeof i8.MatDatepickerModule, typeof i9.MatNativeDateModule, typeof i10.MatLegacyInputModule], [typeof i1.DateComponent, typeof i2.DateRangeComponent]>;
15
15
  static ɵinj: i0.ɵɵInjectorDeclaration<DateModule>;
16
16
  }
@@ -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, never>;
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, never>;
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, never>;
40
40
  }
@@ -2,12 +2,12 @@ import { HttpClient } from "@angular/common/http";
2
2
  import { Observable } from "rxjs";
3
3
  import * as i0 from "@angular/core";
4
4
  export declare const DROPDOWN_TYPE: Readonly<{
5
- INPUT_SINGLE: number;
6
- INPUT_MULTI: number;
7
- SELECT_SINGLE: number;
8
- SELECT_MULTI: number;
9
- SELECT_SINGLE_CUSTOM: number;
10
- SELECT_MULTI_CUSTOM: number;
5
+ INPUT_SINGLE: 0;
6
+ INPUT_MULTI: 1;
7
+ SELECT_SINGLE: 2;
8
+ SELECT_MULTI: 3;
9
+ SELECT_SINGLE_CUSTOM: 4;
10
+ SELECT_MULTI_CUSTOM: 5;
11
11
  }>;
12
12
  export declare class DropdownService {
13
13
  private http;
@@ -8,9 +8,9 @@ export interface SelectItem {
8
8
  entity?: any;
9
9
  }
10
10
  export declare const KEY_CODE: Readonly<{
11
- DOWN_ARROW: number;
12
- UP_ARROW: number;
13
- ENTER: number;
14
- TAB: number;
15
- DELETE: number;
11
+ DOWN_ARROW: 40;
12
+ UP_ARROW: 38;
13
+ ENTER: 13;
14
+ TAB: 9;
15
+ DELETE: 8;
16
16
  }>;
@@ -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, never>;
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: "15.2.10", ngImport: i0, type: DateBase, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Injectable });
110
+ DateBase.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DateBase });
111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DateBase, decorators: [{
112
+ type: Injectable
113
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaW5wdXQvc3JjL2RhdGUvZGF0ZS1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7O0FBR3JELE1BQU0sT0FBZ0IsUUFBUTtJQVE1QixZQUFZLFVBQXNCO1FBSmxDLFVBQUssR0FBVyxDQUFDLENBQUM7UUFLaEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGtCQUFrQixDQUFDLEtBQVk7UUFDcEMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtZQUNwQixPQUFPO1NBQ1I7UUFDRCxJQUFJLFVBQVUsR0FBZ0IsSUFBSSxDQUFDO1FBRW5DLElBQUk7WUFDRiw4Q0FBOEM7WUFDOUMsVUFBVSxHQUFpQixLQUFLLENBQUMsTUFBTyxDQUFDO1NBQzFDO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWixPQUFPO1NBQ1I7UUFFRCxJQUFJLE1BQU0sR0FBWSxLQUFLLENBQUM7UUFDNUIsR0FBRztZQUNELElBQUksVUFBVSxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQzNCLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ2QsTUFBTTthQUNQO1lBQ0QsVUFBVSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUM7U0FDdkMsUUFBUSxVQUFVLEVBQUU7UUFDckIsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNiO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksMkJBQTJCO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSwyQkFBMkI7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVM7UUFDZCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksU0FBUyxDQUFDLEtBQW9CO1FBQ25DLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2Y7YUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssT0FBTyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNiO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVEsQ0FBQyxRQUFnQjtRQUM5QixJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxJQUFJO1FBQ1QsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTTtRQUNYLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLENBQUM7O3NHQXZHbUIsUUFBUTswR0FBUixRQUFROzRGQUFSLFFBQVE7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQ29weXJpZ2h0IChjKSAyMDE2IEh1bnRzbWFuIENhbmNlciBJbnN0aXR1dGUgYXQgdGhlIFVuaXZlcnNpdHkgb2YgVXRhaCwgQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeVxyXG4gKlxyXG4gKiBFeHRlbmRpbmcgY2xhc3Mgd29ya3MgbGlrZSBpbiBKYXZhIGV4Y2VwdCB0aGF0IGRlY29yYXRvcnMgYXJlIG9ubHkgc2Nhbm5lZCBpbiB0aGUgY2hpbGQgY2xhc3MuICBJbiB0aGlzIGNhc2UsXHJcbiAqIHdlIHdhbnQgdmFyaWFibGVzIGxpa2UgaW5wdXREYXRhIHRvIGJlIGF2YWlsYWJsZSB0byBhbGwgaW5saW5lIGNvbXBvbmVudHMgdGhhdCBleHRlbmQgdGhpcyBjbGFzczsgaG93ZXZlciwgd2Ugd2FudFxyXG4gKiB0aGlzIHZhcmlhYmxlIHRvIGJlIGFuIEBJbnB1dC5cclxuICogV2hhdCB3ZSBjYW4gZG8gaGVyZSBpcyBkZWZpbmUgXCJpbnB1dERhdGE6IE9iamVjdFwiIGhlcmUgYW5kIGluIHRoZSBleHRlbmRpbmcgY2xhc3MsIGRlZmluZSBcIkBJbnB1dCBpbnB1dERhdGE6IE9iamVjdFwiLlxyXG4gKlxyXG4gKiBUaGUgdHdvIHdheSBiaW5kaW5nIHRvIHRoZSBjb21wb25lbnQgaXMgaW5wdXREYXRhLiAgVG8gYWxsb3cgbm9uLXNhdmluZyBtb2RpZmljYXRpb24gdG8gdGhpcyBkYXRhLCB3ZSBjb3B5XHJcbiAqIGl0IHRvIG1vZGlmaWVkRGF0YS4gIFRoZSB3cmFwcGVkIGNvbXBvbmVudCBzdWNoIGFzIGlucHV0L3NlbGVjdC8uLi4gdGhlbiB1c2UgbW9kaWZpZWREYXRhIGFzIHRoZWlyIG5nTW9kZWwuXHJcbiAqIFdoZW4gd2UgY2FuY2VsIG91dCBvZiBlZGl0aW5nLCBtb2RpZmllZERhdGEgaXMgaWdub3JlZCBhbmQgcmVwbGFjZWQgd2l0aCBpbnB1dERhdGEuICBXaGVuIGVkaXRpbmcgaXMgc2F2ZWQsIGlucHV0RGF0YVxyXG4gKiBpcyByZXBsYWNlZCB3aXRoIG1vZGlmaWVkRGF0YS5cclxuICpcclxuICogQHNpbmNlIDEuMC4wXHJcbiAqL1xyXG5pbXBvcnQge0VsZW1lbnRSZWYsIEluamVjdGFibGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYXRlQmFzZSB7XHJcblxyXG4gIGlucHV0RGF0YTogT2JqZWN0O1xyXG4gIG1vZGlmaWVkRGF0YTogT2JqZWN0O1xyXG4gIHN0YXRlOiBudW1iZXIgPSAwO1xyXG5cclxuICBfZWw6IEhUTUxFbGVtZW50O1xyXG5cclxuICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XHJcbiAgICB0aGlzLl9lbCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiB0byBjbGlja3Mgb24gdGhlIGRvY3VtZW50LiAgSWYgdGhlIHN0YXRlIGlzIGluIGVkaXQgbW9kZSBhbmQgdGhlcmUgaXMgYSBjbGljayBvdXRzaWRlIHRoZSBlbGVtZW50LFxyXG4gICAqIHRoZW4gc2F2ZSBpdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqL1xyXG4gIHB1YmxpYyBoYW5kbGVPdXRzaWRlRXZlbnQoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gMSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgdGFyZ2V0Q21wdDogSFRNTEVsZW1lbnQgPSBudWxsO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIENhdGNoIGV4Y2VwdGlvbiBpZiB0YXJnZXQgaXMgbm90IGFuIGVsZW1lbnRcclxuICAgICAgdGFyZ2V0Q21wdCA9ICg8SFRNTEVsZW1lbnQ+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: "15.2.10", ngImport: i0, type: DateRangeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
63
+ DateRangeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", 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: "15.2.10", 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