cps-ui-kit 0.165.0 → 17.1.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 (166) hide show
  1. package/esm2022/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +824 -0
  2. package/esm2022/lib/components/cps-button/cps-button.component.mjs +190 -0
  3. package/esm2022/lib/components/cps-button-toggle/cps-button-toggle.component.mjs +235 -0
  4. package/esm2022/lib/components/cps-checkbox/cps-checkbox.component.mjs +149 -0
  5. package/esm2022/lib/components/cps-chip/cps-chip.component.mjs +94 -0
  6. package/esm2022/lib/components/cps-datepicker/cps-datepicker.component.mjs +382 -0
  7. package/esm2022/lib/components/cps-expansion-panel/cps-expansion-panel.component.mjs +209 -0
  8. package/esm2022/lib/components/cps-file-upload/cps-file-upload.component.mjs +138 -0
  9. package/esm2022/lib/components/cps-icon/cps-icon.component.mjs +193 -0
  10. package/esm2022/lib/components/cps-info-circle/cps-info-circle.component.mjs +61 -0
  11. package/esm2022/lib/components/cps-input/cps-input.component.mjs +386 -0
  12. package/{esm2020 → esm2022}/lib/components/cps-loader/cps-loader.component.mjs +5 -5
  13. package/esm2022/lib/components/cps-menu/cps-menu.component.mjs +552 -0
  14. package/esm2022/lib/components/cps-paginator/cps-paginator.component.mjs +114 -0
  15. package/esm2022/lib/components/cps-paginator/pipes/cps-paginate.pipe.mjs +30 -0
  16. package/{esm2020 → esm2022}/lib/components/cps-progress-circular/cps-progress-circular.component.mjs +4 -4
  17. package/{esm2020 → esm2022}/lib/components/cps-progress-linear/cps-progress-linear.component.mjs +4 -4
  18. package/{esm2020 → esm2022}/lib/components/cps-radio-group/cps-radio/cps-radio.component.mjs +7 -7
  19. package/esm2022/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.mjs +55 -0
  20. package/esm2022/lib/components/cps-radio-group/cps-radio-group.component.mjs +158 -0
  21. package/esm2022/lib/components/cps-select/cps-select.component.mjs +615 -0
  22. package/esm2022/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.mjs +110 -0
  23. package/{esm2020 → esm2022}/lib/components/cps-tab-group/cps-tab/cps-tab.component.mjs +4 -4
  24. package/esm2022/lib/components/cps-tab-group/cps-tab-group.component.mjs +303 -0
  25. package/esm2022/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.mjs +79 -0
  26. package/esm2022/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.mjs +408 -0
  27. package/esm2022/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.mjs +149 -0
  28. package/esm2022/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.mjs +88 -0
  29. package/esm2022/lib/components/cps-table/cps-table.component.mjs +941 -0
  30. package/esm2022/lib/components/cps-table/directives/cps-table-column-filter.directive.mjs +181 -0
  31. package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-column-sortable.directive.mjs +5 -5
  32. package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-header-selectable.directive.mjs +5 -5
  33. package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-row-selectable.directive.mjs +5 -5
  34. package/esm2022/lib/components/cps-table/directives/internal/table-unsort.directive.mjs +220 -0
  35. package/esm2022/lib/components/cps-tag/cps-tag.component.mjs +136 -0
  36. package/esm2022/lib/components/cps-textarea/cps-textarea.component.mjs +291 -0
  37. package/esm2022/lib/components/cps-timepicker/cps-timepicker.component.mjs +351 -0
  38. package/esm2022/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +251 -0
  39. package/esm2022/lib/components/cps-tree-select/cps-tree-select.component.mjs +87 -0
  40. package/esm2022/lib/components/cps-tree-table/cps-tree-table.component.mjs +1196 -0
  41. package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-column-filter.directive.mjs +5 -5
  42. package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-column-sortable.directive.mjs +5 -5
  43. package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-header-selectable.directive.mjs +5 -5
  44. package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-row-selectable.directive.mjs +5 -5
  45. package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs +43 -0
  46. package/esm2022/lib/components/cps-tree-table/directives/internal/tree-table-unsort.directive.mjs +354 -0
  47. package/esm2022/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs +619 -0
  48. package/esm2022/lib/directives/cps-tooltip/cps-tooltip.directive.mjs +257 -0
  49. package/{esm2020 → esm2022}/lib/pipes/internal/check-option-selected.pipe.mjs +4 -4
  50. package/esm2022/lib/pipes/internal/combine-labels.pipe.mjs +25 -0
  51. package/{esm2020 → esm2022}/lib/pipes/internal/label-by-value.pipe.mjs +4 -4
  52. package/esm2022/lib/services/cps-dialog/cps-dialog.service.mjs +99 -0
  53. package/{esm2020 → esm2022}/lib/services/cps-dialog/internal/components/cps-confirmation/cps-confirmation.component.mjs +5 -5
  54. package/esm2022/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.mjs +470 -0
  55. package/{esm2020 → esm2022}/lib/services/cps-dialog/internal/directives/cps-dialog-content.directive.mjs +5 -5
  56. package/esm2022/lib/services/cps-dialog/utils/cps-dialog-config.mjs +3 -0
  57. package/esm2022/lib/services/cps-notification/cps-notification.service.mjs +126 -0
  58. package/esm2022/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.mjs +91 -0
  59. package/{esm2020 → esm2022}/lib/services/cps-notification/internal/components/cps-toast/cps-toast.component.mjs +23 -23
  60. package/esm2022/lib/utils/colors-utils.mjs +57 -0
  61. package/esm2022/lib/utils/internal/size-utils.mjs +24 -0
  62. package/{esm2020 → esm2022}/public-api.mjs +2 -2
  63. package/{fesm2020 → fesm2022}/cps-ui-kit.mjs +481 -391
  64. package/fesm2022/cps-ui-kit.mjs.map +1 -0
  65. package/lib/components/cps-autocomplete/cps-autocomplete.component.d.ts +2 -2
  66. package/lib/components/cps-button/cps-button.component.d.ts +1 -1
  67. package/lib/components/cps-button-toggle/cps-button-toggle.component.d.ts +2 -2
  68. package/lib/components/cps-checkbox/cps-checkbox.component.d.ts +2 -2
  69. package/lib/components/cps-chip/cps-chip.component.d.ts +1 -1
  70. package/lib/components/cps-datepicker/cps-datepicker.component.d.ts +2 -2
  71. package/lib/components/cps-expansion-panel/cps-expansion-panel.component.d.ts +1 -1
  72. package/lib/components/cps-file-upload/cps-file-upload.component.d.ts +1 -1
  73. package/lib/components/cps-icon/cps-icon.component.d.ts +1 -1
  74. package/lib/components/cps-info-circle/cps-info-circle.component.d.ts +2 -2
  75. package/lib/components/cps-input/cps-input.component.d.ts +2 -2
  76. package/lib/components/cps-loader/cps-loader.component.d.ts +1 -1
  77. package/lib/components/cps-menu/cps-menu.component.d.ts +1 -1
  78. package/lib/components/cps-paginator/cps-paginator.component.d.ts +1 -1
  79. package/lib/components/cps-progress-circular/cps-progress-circular.component.d.ts +1 -1
  80. package/lib/components/cps-progress-linear/cps-progress-linear.component.d.ts +1 -1
  81. package/lib/components/cps-radio-group/cps-radio/cps-radio.component.d.ts +1 -1
  82. package/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.d.ts +1 -1
  83. package/lib/components/cps-radio-group/cps-radio-group.component.d.ts +2 -2
  84. package/lib/components/cps-select/cps-select.component.d.ts +2 -2
  85. package/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.d.ts +1 -1
  86. package/lib/components/cps-tab-group/cps-tab/cps-tab.component.d.ts +1 -1
  87. package/lib/components/cps-tab-group/cps-tab-group.component.d.ts +1 -1
  88. package/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.d.ts +1 -1
  89. package/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.d.ts +1 -1
  90. package/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.d.ts +1 -1
  91. package/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.d.ts +1 -1
  92. package/lib/components/cps-table/cps-table.component.d.ts +1 -1
  93. package/lib/components/cps-table/directives/cps-table-column-filter.directive.d.ts +1 -1
  94. package/lib/components/cps-table/directives/cps-table-column-sortable.directive.d.ts +1 -1
  95. package/lib/components/cps-table/directives/cps-table-row-selectable.directive.d.ts +1 -1
  96. package/lib/components/cps-tag/cps-tag.component.d.ts +1 -1
  97. package/lib/components/cps-textarea/cps-textarea.component.d.ts +2 -2
  98. package/lib/components/cps-timepicker/cps-timepicker.component.d.ts +2 -2
  99. package/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.d.ts +1 -1
  100. package/lib/components/cps-tree-select/cps-tree-select.component.d.ts +1 -1
  101. package/lib/components/cps-tree-table/cps-tree-table.component.d.ts +4 -4
  102. package/lib/components/cps-tree-table/directives/cps-tree-table-column-filter.directive.d.ts +1 -1
  103. package/lib/components/cps-tree-table/directives/cps-tree-table-column-sortable.directive.d.ts +1 -1
  104. package/lib/components/cps-tree-table/directives/cps-tree-table-row-selectable.directive.d.ts +1 -1
  105. package/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.d.ts +1 -1
  106. package/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.d.ts +2 -2
  107. package/lib/directives/{cps-tooltip.directive.d.ts → cps-tooltip/cps-tooltip.directive.d.ts} +2 -2
  108. package/lib/services/cps-dialog/cps-dialog.service.d.ts +13 -0
  109. package/lib/services/cps-dialog/utils/cps-dialog-config.d.ts +1 -1
  110. package/lib/services/cps-notification/cps-notification.service.d.ts +32 -0
  111. package/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.d.ts +1 -1
  112. package/lib/services/cps-notification/internal/components/cps-toast/cps-toast.component.d.ts +1 -1
  113. package/package.json +12 -18
  114. package/public-api.d.ts +1 -1
  115. package/esm2020/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +0 -824
  116. package/esm2020/lib/components/cps-button/cps-button.component.mjs +0 -190
  117. package/esm2020/lib/components/cps-button-toggle/cps-button-toggle.component.mjs +0 -235
  118. package/esm2020/lib/components/cps-checkbox/cps-checkbox.component.mjs +0 -149
  119. package/esm2020/lib/components/cps-chip/cps-chip.component.mjs +0 -94
  120. package/esm2020/lib/components/cps-datepicker/cps-datepicker.component.mjs +0 -382
  121. package/esm2020/lib/components/cps-expansion-panel/cps-expansion-panel.component.mjs +0 -209
  122. package/esm2020/lib/components/cps-file-upload/cps-file-upload.component.mjs +0 -138
  123. package/esm2020/lib/components/cps-icon/cps-icon.component.mjs +0 -193
  124. package/esm2020/lib/components/cps-info-circle/cps-info-circle.component.mjs +0 -61
  125. package/esm2020/lib/components/cps-input/cps-input.component.mjs +0 -386
  126. package/esm2020/lib/components/cps-menu/cps-menu.component.mjs +0 -552
  127. package/esm2020/lib/components/cps-paginator/cps-paginator.component.mjs +0 -113
  128. package/esm2020/lib/components/cps-paginator/pipes/cps-paginate.pipe.mjs +0 -30
  129. package/esm2020/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.mjs +0 -55
  130. package/esm2020/lib/components/cps-radio-group/cps-radio-group.component.mjs +0 -158
  131. package/esm2020/lib/components/cps-select/cps-select.component.mjs +0 -615
  132. package/esm2020/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.mjs +0 -110
  133. package/esm2020/lib/components/cps-tab-group/cps-tab-group.component.mjs +0 -299
  134. package/esm2020/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.mjs +0 -79
  135. package/esm2020/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.mjs +0 -408
  136. package/esm2020/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.mjs +0 -148
  137. package/esm2020/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.mjs +0 -88
  138. package/esm2020/lib/components/cps-table/cps-table.component.mjs +0 -940
  139. package/esm2020/lib/components/cps-table/directives/cps-table-column-filter.directive.mjs +0 -181
  140. package/esm2020/lib/components/cps-table/directives/internal/table-unsort.directive.mjs +0 -210
  141. package/esm2020/lib/components/cps-tag/cps-tag.component.mjs +0 -136
  142. package/esm2020/lib/components/cps-textarea/cps-textarea.component.mjs +0 -291
  143. package/esm2020/lib/components/cps-timepicker/cps-timepicker.component.mjs +0 -351
  144. package/esm2020/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +0 -250
  145. package/esm2020/lib/components/cps-tree-select/cps-tree-select.component.mjs +0 -87
  146. package/esm2020/lib/components/cps-tree-table/cps-tree-table.component.mjs +0 -1192
  147. package/esm2020/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs +0 -43
  148. package/esm2020/lib/components/cps-tree-table/directives/internal/tree-table-unsort.directive.mjs +0 -334
  149. package/esm2020/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs +0 -616
  150. package/esm2020/lib/directives/cps-tooltip.directive.mjs +0 -257
  151. package/esm2020/lib/pipes/internal/combine-labels.pipe.mjs +0 -25
  152. package/esm2020/lib/services/cps-dialog/cps-dialog.service.mjs +0 -86
  153. package/esm2020/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.mjs +0 -470
  154. package/esm2020/lib/services/cps-dialog/utils/cps-dialog-config.mjs +0 -3
  155. package/esm2020/lib/services/cps-notification/cps-notification.service.mjs +0 -94
  156. package/esm2020/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.mjs +0 -91
  157. package/esm2020/lib/utils/colors-utils.mjs +0 -57
  158. package/esm2020/lib/utils/internal/size-utils.mjs +0 -24
  159. package/fesm2015/cps-ui-kit.mjs +0 -12086
  160. package/fesm2015/cps-ui-kit.mjs.map +0 -1
  161. package/fesm2020/cps-ui-kit.mjs.map +0 -1
  162. /package/{esm2020 → esm2022}/cps-ui-kit.mjs +0 -0
  163. /package/{esm2020 → esm2022}/lib/components/cps-table/cps-column-filter-types.mjs +0 -0
  164. /package/{esm2020 → esm2022}/lib/services/cps-dialog/utils/cps-dialog-ref.mjs +0 -0
  165. /package/{esm2020 → esm2022}/lib/services/cps-notification/utils/cps-notification-config.mjs +0 -0
  166. /package/{esm2020 → esm2022}/lib/services/cps-notification/utils/internal/cps-notification-data.mjs +0 -0
@@ -1,382 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component, EventEmitter, Input, Optional, Output, Self, ViewChild } from '@angular/core';
3
- import { FormsModule } from '@angular/forms';
4
- import { CalendarModule } from 'primeng/calendar';
5
- import { CpsInputComponent } from '../cps-input/cps-input.component';
6
- import { Subscription } from 'rxjs';
7
- import { convertSize } from '../../utils/internal/size-utils';
8
- import { CpsMenuComponent } from '../cps-menu/cps-menu.component';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@angular/forms";
11
- import * as i2 from "primeng/calendar";
12
- import * as i3 from "@angular/common";
13
- /**
14
- * CpsDatepickerComponent is an input component to provide date input.
15
- * @group Components
16
- */
17
- export class CpsDatepickerComponent {
18
- /**
19
- * Value of the datepicker.
20
- * @group Props
21
- */
22
- set value(value) {
23
- this._value = value;
24
- this.stringDate = this._dateToString(value);
25
- this.onChange(value);
26
- }
27
- get value() {
28
- return this._value;
29
- }
30
- constructor(_control) {
31
- this._control = _control;
32
- /**
33
- * Label of the datepicker element.
34
- * @group Props
35
- */
36
- this.label = '';
37
- /**
38
- * Determines whether datepicker is disabled.
39
- * @group Props
40
- */
41
- this.disabled = false;
42
- /**
43
- * Width of the datepicker of type number denoting pixels or string.
44
- * @group Props
45
- */
46
- this.width = '100%';
47
- /**
48
- * Placeholder text.
49
- * @group Props
50
- */
51
- this.placeholder = 'MM/DD/YYYY';
52
- /**
53
- * Bottom hint text for the input field.
54
- * @group Props
55
- */
56
- this.hint = '';
57
- /**
58
- * When enabled, a clear icon is displayed to clear the value.
59
- * @group Props
60
- */
61
- this.clearable = false;
62
- /**
63
- * Hides hint and validation errors.
64
- * @group Props
65
- */
66
- this.hideDetails = false;
67
- /**
68
- * Determines whether the component should have persistent clear icon.
69
- * @group Props
70
- */
71
- this.persistentClear = false;
72
- /**
73
- * Determines whether to show button to be able to select today's date.
74
- * @group Props
75
- */
76
- this.showTodayButton = true;
77
- /**
78
- * Determines whether the datepicker dropdown should open on input focus.
79
- * @group Props
80
- */
81
- this.openOnInputFocus = false;
82
- /**
83
- * When it is not an empty string, an info icon is displayed to show text for more info.
84
- * @group Props
85
- */
86
- this.infoTooltip = '';
87
- /**
88
- * InfoTooltip class for styling.
89
- * @group Props
90
- */
91
- this.infoTooltipClass = 'cps-tooltip-content';
92
- /**
93
- * Size of infoTooltip, of type number denoting pixels or string.
94
- * @group Props
95
- */
96
- this.infoTooltipMaxWidth = '100%';
97
- /**
98
- * Determines whether the infoTooltip is persistent.
99
- * @group Props
100
- */
101
- this.infoTooltipPersistent = false;
102
- /**
103
- * Position of infoTooltip, it can be "top", "bottom", "left" or "right".
104
- * @group Props
105
- */
106
- this.infoTooltipPosition = 'top';
107
- /**
108
- * Styling appearance of datepicker input, it can be 'outlined', 'underlined' or 'borderless.
109
- * @group Props
110
- */
111
- this.appearance = 'outlined';
112
- /**
113
- * Callback to invoke on value change.
114
- * @param {Date | null} value - value change.
115
- * @group Emits
116
- */
117
- this.valueChanged = new EventEmitter();
118
- this.stringDate = '';
119
- this.isOpened = false;
120
- this.error = '';
121
- this.cvtWidth = '';
122
- this._statusChangesSubscription = new Subscription();
123
- // eslint-disable-next-line @typescript-eslint/no-empty-function
124
- this.onChange = (event) => { };
125
- // eslint-disable-next-line @typescript-eslint/no-empty-function
126
- this.onTouched = () => { };
127
- if (this._control) {
128
- this._control.valueAccessor = this;
129
- }
130
- }
131
- ngOnInit() {
132
- this.cvtWidth = convertSize(this.width);
133
- this._statusChangesSubscription = this._control?.statusChanges?.subscribe(() => {
134
- this._checkErrors();
135
- });
136
- }
137
- ngOnDestroy() {
138
- this._statusChangesSubscription?.unsubscribe();
139
- }
140
- registerOnChange(fn) {
141
- this.onChange = fn;
142
- }
143
- registerOnTouched(fn) {
144
- this.onTouched = fn;
145
- }
146
- onInputValueChanged(val) {
147
- this.stringDate = val;
148
- if (!val) {
149
- this._updateValue(null);
150
- return;
151
- }
152
- const dt = this._stringToDate(val);
153
- if (dt)
154
- this._updateValue(dt);
155
- }
156
- writeValue(value) {
157
- this.value = value;
158
- }
159
- _updateValue(value) {
160
- if (this.value === value)
161
- return;
162
- this.writeValue(value);
163
- this.onChange(value);
164
- this.valueChanged.emit(value);
165
- }
166
- _updateValueFromInputString() {
167
- if (!this.stringDate) {
168
- this._updateValue(null);
169
- }
170
- else {
171
- this._updateValue(this._stringToDate(this.stringDate));
172
- }
173
- }
174
- _checkDateFormat(dateString) {
175
- if (!/^\d\d\/\d\d\/\d\d\d\d$/.test(dateString)) {
176
- return false;
177
- }
178
- const parts = dateString.split('/').map((p) => parseInt(p, 10));
179
- parts[0] -= 1;
180
- const d = new Date(parts[2], parts[0], parts[1]);
181
- return (d.getMonth() === parts[0] &&
182
- d.getDate() === parts[1] &&
183
- d.getFullYear() === parts[2]);
184
- }
185
- _checkDateInRange(date, minDate, maxDate) {
186
- if (!minDate && !maxDate)
187
- return true;
188
- if (minDate && maxDate) {
189
- return (date.getTime() >= minDate.getTime() &&
190
- date.getTime() <= maxDate.getTime());
191
- }
192
- if (minDate) {
193
- return date.getTime() >= minDate.getTime();
194
- }
195
- return date.getTime() <= maxDate.getTime();
196
- }
197
- _dateToString(dateVal) {
198
- if (!dateVal)
199
- return '';
200
- let month = '' + (dateVal.getMonth() + 1);
201
- if (month.length < 2)
202
- month = '0' + month;
203
- let day = '' + dateVal.getDate();
204
- if (day.length < 2)
205
- day = '0' + day;
206
- const year = dateVal.getFullYear();
207
- return `${month}/${day}/${year}`;
208
- }
209
- _stringToDate(dateString) {
210
- if (!this._checkDateFormat(dateString))
211
- return null;
212
- const [month, day, year] = dateString.split('/');
213
- const dt = new Date(`${year}-${month}-${day}`);
214
- const inRange = this._checkDateInRange(dt, this.minDate, this.maxDate);
215
- return inRange ? dt : null;
216
- }
217
- _checkErrors() {
218
- if (this.stringDate && !this._stringToDate(this.stringDate)) {
219
- this.error = 'Date is invalid';
220
- return;
221
- }
222
- const errors = this._control?.errors;
223
- if (!this._control?.control?.touched || !errors) {
224
- this.error = '';
225
- return;
226
- }
227
- if ('required' in errors) {
228
- this.error = 'Field is required';
229
- return;
230
- }
231
- const errArr = Object.values(errors);
232
- if (errArr.length < 1) {
233
- this.error = '';
234
- return;
235
- }
236
- const message = errArr.find((msg) => typeof msg === 'string');
237
- this.error = message || 'Unknown error';
238
- }
239
- onClearCalendarDate() {
240
- this.onSelectCalendarDate(null);
241
- }
242
- onSelectCalendarDate(dateVal) {
243
- this.toggleCalendar(false);
244
- this.writeValue(dateVal);
245
- this.onChange(dateVal);
246
- this.valueChanged.emit(dateVal);
247
- }
248
- onInputBlur() {
249
- if (this.isOpened)
250
- return;
251
- this._control?.control?.markAsTouched();
252
- this._updateValueFromInputString();
253
- this._checkErrors();
254
- }
255
- onInputEnterClicked() {
256
- if (!this.isOpened)
257
- return;
258
- this._control?.control?.markAsTouched();
259
- this._updateValueFromInputString();
260
- this._checkErrors();
261
- this.toggleCalendar(false);
262
- }
263
- onClickCalendarIcon() {
264
- if (this.disabled)
265
- return;
266
- if (this.isOpened)
267
- this._updateValueFromInputString();
268
- this.toggleCalendar();
269
- }
270
- onBeforeCalendarHidden() {
271
- if (this.disabled || !this.isOpened)
272
- return;
273
- this._updateValueFromInputString();
274
- this.toggleCalendar(false);
275
- }
276
- onInputFocus() {
277
- if (this.openOnInputFocus)
278
- this.toggleCalendar(true);
279
- }
280
- onInputClear() {
281
- if (this.isOpened)
282
- this.focusInput();
283
- }
284
- onCalendarContentClick() {
285
- if (this.isOpened)
286
- this.focusInput();
287
- }
288
- focusInput() {
289
- this.datepickerInput.focus();
290
- }
291
- toggleCalendar(show) {
292
- if (this.disabled || this.isOpened === show)
293
- return;
294
- const target = this.datepickerInput.elementRef.nativeElement.querySelector('.cps-input-wrap');
295
- if (typeof show === 'boolean') {
296
- if (show) {
297
- this.calendarMenu.show({
298
- target
299
- });
300
- }
301
- else {
302
- this.calendarMenu.hide();
303
- }
304
- }
305
- else {
306
- this.calendarMenu.toggle({
307
- target
308
- });
309
- }
310
- this.isOpened = this.calendarMenu.isVisible();
311
- if (!this.isOpened) {
312
- this._control?.control?.markAsTouched();
313
- this._checkErrors();
314
- }
315
- else {
316
- this.focusInput();
317
- }
318
- }
319
- }
320
- CpsDatepickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsDatepickerComponent, deps: [{ token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
321
- CpsDatepickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: CpsDatepickerComponent, isStandalone: true, selector: "cps-datepicker", inputs: { label: "label", disabled: "disabled", width: "width", placeholder: "placeholder", hint: "hint", clearable: "clearable", hideDetails: "hideDetails", persistentClear: "persistentClear", showTodayButton: "showTodayButton", openOnInputFocus: "openOnInputFocus", infoTooltip: "infoTooltip", infoTooltipClass: "infoTooltipClass", infoTooltipMaxWidth: "infoTooltipMaxWidth", infoTooltipPersistent: "infoTooltipPersistent", infoTooltipPosition: "infoTooltipPosition", appearance: "appearance", minDate: "minDate", maxDate: "maxDate", value: "value" }, outputs: { valueChanged: "valueChanged" }, viewQueries: [{ propertyName: "datepickerInput", first: true, predicate: ["datepickerInput"], descendants: true }, { propertyName: "calendarMenu", first: true, predicate: ["calendarMenu"], descendants: true }], ngImport: i0, template: "<div\n class=\"cps-datepicker\"\n [ngStyle]=\"{ width: cvtWidth }\"\n [class.focused]=\"isOpened\">\n <cps-input\n #datepickerInput\n [disabled]=\"disabled\"\n [value]=\"stringDate\"\n [label]=\"label\"\n prefixIcon=\"datepicker\"\n [placeholder]=\"placeholder\"\n (prefixIconClicked)=\"onClickCalendarIcon()\"\n [prefixIconClickable]=\"true\"\n (focused)=\"onInputFocus()\"\n (valueChanged)=\"onInputValueChanged($event)\"\n [clearable]=\"clearable\"\n (blurred)=\"onInputBlur()\"\n (cleared)=\"onInputClear()\"\n (enterClicked)=\"onInputEnterClicked()\"\n [width]=\"width\"\n [hint]=\"hint\"\n [hideDetails]=\"hideDetails\"\n [infoTooltip]=\"infoTooltip\"\n [infoTooltipClass]=\"infoTooltipClass\"\n [infoTooltipMaxWidth]=\"infoTooltipMaxWidth\"\n [infoTooltipPersistent]=\"infoTooltipPersistent\"\n [persistentClear]=\"persistentClear\"\n [appearance]=\"appearance\"\n [error]=\"error\"></cps-input>\n <cps-menu\n #calendarMenu\n [withArrow]=\"false\"\n (beforeMenuHidden)=\"onBeforeCalendarHidden()\"\n (contentClicked)=\"onCalendarContentClick()\"\n [focusOnShow]=\"false\"\n hideTransitionOptions=\"0s linear\"\n containerClass=\"cps-datepicker-calendar-menu\">\n <div class=\"cps-datepicker-calendar\">\n <p-calendar\n [(ngModel)]=\"value\"\n [showIcon]=\"true\"\n [showButtonBar]=\"showTodayButton\"\n [inline]=\"true\"\n (onSelect)=\"onSelectCalendarDate($event)\"\n (onClearClick)=\"onClearCalendarDate()\"\n [showOtherMonths]=\"false\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\">\n </p-calendar>\n </div>\n </cps-menu>\n</div>\n", styles: [":host{display:flex}:host .cps-datepicker{position:relative;width:100%}:host .cps-datepicker.focused ::ng-deep input{border:1px solid var(--cps-color-calm)!important}:host .cps-datepicker.focused ::ng-deep .cps-input-prefix-icon{color:var(--cps-color-calm)!important}:host .cps-datepicker.focused ::ng-deep .clear-btn cps-icon{opacity:.5!important}.cps-datepicker-calendar{-webkit-user-select:none;user-select:none}.cps-datepicker-calendar ::ng-deep .p-datepicker{font-family:Source Sans Pro,sans-serif;width:auto!important;padding:.5rem;background:#ffffff;color:var(--cps-color-text-darkest);border:1px solid #ced4da}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header{padding:.5rem;color:var(--cps-color-text-darkest);background:#ffffff;font-weight:600;margin:0;border-bottom:1px solid #dee2e6;border-top-right-radius:6px;border-top-left-radius:6px}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-prev,.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-next{width:2rem;height:2rem;color:var(--cps-color-calm);border:0 none;background:transparent;border-radius:50%;transition:background-color .2s,color .2s,box-shadow .2s}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-prev:enabled:hover,.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-next:enabled:hover{color:var(--cps-color-calm);border-color:transparent;background:var(--cps-color-highlight-hover)}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-prev:focus,.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-next:focus{outline:0 none;outline-offset:0;box-shadow:unset}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title{line-height:2rem}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year,.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month{color:var(--cps-color-text-darkest);transition:background-color .2s,color .2s,box-shadow .2s;font-weight:600;padding:.5rem}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year:enabled:hover,.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month:enabled:hover{color:var(--cps-color-calm)}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month{margin-right:.5rem}.cps-datepicker-calendar ::ng-deep .p-datepicker table{font-size:1rem;margin:.5rem 0}.cps-datepicker-calendar ::ng-deep .p-datepicker table th{padding:.5rem}.cps-datepicker-calendar ::ng-deep .p-datepicker table th>span{width:2.5rem;height:2.5rem}.cps-datepicker-calendar ::ng-deep .p-datepicker table td{padding:.5rem}.cps-datepicker-calendar ::ng-deep .p-datepicker table td>span{width:2.5rem;height:2.5rem;border-radius:50%;transition:box-shadow .2s;border:1px solid transparent}.cps-datepicker-calendar ::ng-deep .p-datepicker table td>span.p-disabled{color:var(--cps-color-text-lightest);cursor:default}.cps-datepicker-calendar ::ng-deep .p-datepicker table td>span.p-highlight{color:var(--cps-color-calm);background:var(--cps-color-highlight-selected);font-weight:700}.cps-datepicker-calendar ::ng-deep .p-datepicker table td>span:focus{outline:0 none;outline-offset:0;box-shadow:unset}.cps-datepicker-calendar ::ng-deep .p-datepicker table td.p-datepicker-today>span{border-color:var(--cps-color-calm);background:unset;color:unset}.cps-datepicker-calendar ::ng-deep .p-datepicker table td.p-datepicker-today>span.p-highlight{color:var(--cps-color-calm);background:var(--cps-color-highlight-selected);font-weight:700}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-buttonbar{padding:.5rem 0 0;border-top:1px solid #dee2e6}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-buttonbar .p-button{width:auto;color:var(--cps-color-prepared)}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-timepicker{border-top:1px solid #dee2e6;padding:.5rem}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-timepicker button{width:2rem;height:2rem;color:var(--cps-color-calm);border:0 none;background:transparent;border-radius:50%;transition:background-color .2s,color .2s,box-shadow .2s}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-timepicker button:enabled:hover{color:var(--cps-color-calm);border-color:transparent;background:var(--cps-color-highlight-hover)}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-timepicker button:focus{outline:0 none;outline-offset:0;box-shadow:unset}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-timepicker button:last-child{margin-top:.2em}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-timepicker span{font-size:1.25rem}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-timepicker>div{padding:0 .5rem}.cps-datepicker-calendar ::ng-deep .p-datepicker.p-datepicker-timeonly .p-timepicker{border-top:0 none}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-monthpicker{margin:.5rem 0}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-monthpicker .p-monthpicker-month{padding:.5rem;transition:box-shadow .2s;border-radius:6px}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-monthpicker .p-monthpicker-month.p-highlight{color:var(--cps-color-calm);background:var(--cps-color-highlight-selected);font-weight:700}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-yearpicker{margin:.5rem 0}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-yearpicker .p-yearpicker-year{padding:.5rem;transition:box-shadow .2s;border-radius:6px}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-yearpicker .p-yearpicker-year.p-highlight{color:var(--cps-color-calm);background:var(--cps-color-highlight-selected);font-weight:700}.cps-datepicker-calendar ::ng-deep .p-datepicker.p-datepicker-multiple-month .p-datepicker-group{border-left:1px solid #dee2e6;padding-right:.5rem;padding-left:.5rem;padding-top:0;padding-bottom:0}.cps-datepicker-calendar ::ng-deep .p-datepicker.p-datepicker-multiple-month .p-datepicker-group:first-child{padding-left:0;border-left:0 none}.cps-datepicker-calendar ::ng-deep .p-datepicker.p-datepicker-multiple-month .p-datepicker-group:last-child{padding-right:0}.cps-datepicker-calendar ::ng-deep .p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):hover{background:var(--cps-color-highlight-hover)}.cps-datepicker-calendar ::ng-deep .p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):focus{outline:0 none;outline-offset:0;box-shadow:unset}.cps-datepicker-calendar ::ng-deep .p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):not(.p-highlight):hover{background:var(--cps-color-highlight-hover)}.cps-datepicker-calendar ::ng-deep .p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):focus{outline:0 none;outline-offset:0;box-shadow:unset}.cps-datepicker-calendar ::ng-deep .p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled):not(.p-highlight):hover{background:var(--cps-color-highlight-hover)}.cps-datepicker-calendar ::ng-deep .p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled):focus{outline:0 none;outline-offset:0;box-shadow:unset}.cps-datepicker-calendar ::ng-deep p-calendar.p-calendar-clearable .p-inputtext{padding-right:2.5rem}.cps-datepicker-calendar ::ng-deep p-calendar.p-calendar-clearable .p-calendar-clear-icon{color:var(--cps-color-calm);right:.75rem}.cps-datepicker-calendar ::ng-deep p-calendar.p-calendar-clearable.p-calendar-w-btn .p-calendar-clear-icon{color:var(--cps-color-calm);right:3.75rem}.cps-datepicker-calendar ::ng-deep .p-datepicker table th,.cps-datepicker-calendar ::ng-deep .p-datepicker table td{padding:.125rem}.cps-datepicker-calendar ::ng-deep .p-datepicker-other-month{color:var(--cps-color-text-light)}.cps-datepicker-calendar ::ng-deep .p-link:focus{outline:0 none;outline-offset:0;box-shadow:unset}.cps-datepicker-calendar ::ng-deep .p-link{text-align:left;background-color:transparent;margin:0;padding:0;border:none;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:1rem;font-family:Source Sans Pro,sans-serif;border-radius:6px}.cps-datepicker-calendar ::ng-deep .p-button{font-family:Source Sans Pro,sans-serif;background-color:transparent;color:var(--cps-color-calm);border-color:transparent;margin:0;display:inline-flex;cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;vertical-align:bottom;text-align:center;overflow:hidden;position:relative;padding:.75rem 1.25rem;font-size:1rem;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s;border-radius:6px}.cps-datepicker-calendar ::ng-deep .p-button:focus{box-shadow:unset}.cps-datepicker-calendar ::ng-deep .p-button:hover{background-color:var(--cps-color-highlight-hover)}.cps-datepicker-calendar ::ng-deep .p-button:active{background-color:var(--cps-color-highlight-selected)}.cps-datepicker-calendar ::ng-deep .p-button .p-button-label{font-weight:700}\n"], dependencies: [{ kind: "component", type: CpsInputComponent, selector: "cps-input", inputs: ["label", "hint", "placeholder", "disabled", "readonly", "width", "type", "loading", "clearable", "prefixIcon", "prefixIconClickable", "prefixIconSize", "prefixText", "hideDetails", "persistentClear", "error", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "appearance", "valueToDisplay", "value"], outputs: ["valueChanged", "focused", "prefixIconClicked", "blurred", "cleared", "enterClicked"] }, { kind: "ngmodule", type: CalendarModule }, { kind: "component", type: i2.Calendar, selector: "p-calendar", inputs: ["style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "view", "defaultDate", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CpsMenuComponent, selector: "cps-menu", inputs: ["header", "items", "withArrow", "compressed", "focusOnShow", "persistent", "containerClass", "showTransitionOptions", "hideTransitionOptions"], outputs: ["menuShown", "menuHidden", "beforeMenuHidden", "contentClicked"] }] });
322
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: CpsDatepickerComponent, decorators: [{
323
- type: Component,
324
- args: [{ standalone: true, imports: [
325
- CpsInputComponent,
326
- CalendarModule,
327
- CommonModule,
328
- FormsModule,
329
- CpsMenuComponent
330
- ], selector: 'cps-datepicker', template: "<div\n class=\"cps-datepicker\"\n [ngStyle]=\"{ width: cvtWidth }\"\n [class.focused]=\"isOpened\">\n <cps-input\n #datepickerInput\n [disabled]=\"disabled\"\n [value]=\"stringDate\"\n [label]=\"label\"\n prefixIcon=\"datepicker\"\n [placeholder]=\"placeholder\"\n (prefixIconClicked)=\"onClickCalendarIcon()\"\n [prefixIconClickable]=\"true\"\n (focused)=\"onInputFocus()\"\n (valueChanged)=\"onInputValueChanged($event)\"\n [clearable]=\"clearable\"\n (blurred)=\"onInputBlur()\"\n (cleared)=\"onInputClear()\"\n (enterClicked)=\"onInputEnterClicked()\"\n [width]=\"width\"\n [hint]=\"hint\"\n [hideDetails]=\"hideDetails\"\n [infoTooltip]=\"infoTooltip\"\n [infoTooltipClass]=\"infoTooltipClass\"\n [infoTooltipMaxWidth]=\"infoTooltipMaxWidth\"\n [infoTooltipPersistent]=\"infoTooltipPersistent\"\n [persistentClear]=\"persistentClear\"\n [appearance]=\"appearance\"\n [error]=\"error\"></cps-input>\n <cps-menu\n #calendarMenu\n [withArrow]=\"false\"\n (beforeMenuHidden)=\"onBeforeCalendarHidden()\"\n (contentClicked)=\"onCalendarContentClick()\"\n [focusOnShow]=\"false\"\n hideTransitionOptions=\"0s linear\"\n containerClass=\"cps-datepicker-calendar-menu\">\n <div class=\"cps-datepicker-calendar\">\n <p-calendar\n [(ngModel)]=\"value\"\n [showIcon]=\"true\"\n [showButtonBar]=\"showTodayButton\"\n [inline]=\"true\"\n (onSelect)=\"onSelectCalendarDate($event)\"\n (onClearClick)=\"onClearCalendarDate()\"\n [showOtherMonths]=\"false\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\">\n </p-calendar>\n </div>\n </cps-menu>\n</div>\n", styles: [":host{display:flex}:host .cps-datepicker{position:relative;width:100%}:host .cps-datepicker.focused ::ng-deep input{border:1px solid var(--cps-color-calm)!important}:host .cps-datepicker.focused ::ng-deep .cps-input-prefix-icon{color:var(--cps-color-calm)!important}:host .cps-datepicker.focused ::ng-deep .clear-btn cps-icon{opacity:.5!important}.cps-datepicker-calendar{-webkit-user-select:none;user-select:none}.cps-datepicker-calendar ::ng-deep .p-datepicker{font-family:Source Sans Pro,sans-serif;width:auto!important;padding:.5rem;background:#ffffff;color:var(--cps-color-text-darkest);border:1px solid #ced4da}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header{padding:.5rem;color:var(--cps-color-text-darkest);background:#ffffff;font-weight:600;margin:0;border-bottom:1px solid #dee2e6;border-top-right-radius:6px;border-top-left-radius:6px}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-prev,.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-next{width:2rem;height:2rem;color:var(--cps-color-calm);border:0 none;background:transparent;border-radius:50%;transition:background-color .2s,color .2s,box-shadow .2s}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-prev:enabled:hover,.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-next:enabled:hover{color:var(--cps-color-calm);border-color:transparent;background:var(--cps-color-highlight-hover)}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-prev:focus,.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-next:focus{outline:0 none;outline-offset:0;box-shadow:unset}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title{line-height:2rem}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year,.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month{color:var(--cps-color-text-darkest);transition:background-color .2s,color .2s,box-shadow .2s;font-weight:600;padding:.5rem}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year:enabled:hover,.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month:enabled:hover{color:var(--cps-color-calm)}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month{margin-right:.5rem}.cps-datepicker-calendar ::ng-deep .p-datepicker table{font-size:1rem;margin:.5rem 0}.cps-datepicker-calendar ::ng-deep .p-datepicker table th{padding:.5rem}.cps-datepicker-calendar ::ng-deep .p-datepicker table th>span{width:2.5rem;height:2.5rem}.cps-datepicker-calendar ::ng-deep .p-datepicker table td{padding:.5rem}.cps-datepicker-calendar ::ng-deep .p-datepicker table td>span{width:2.5rem;height:2.5rem;border-radius:50%;transition:box-shadow .2s;border:1px solid transparent}.cps-datepicker-calendar ::ng-deep .p-datepicker table td>span.p-disabled{color:var(--cps-color-text-lightest);cursor:default}.cps-datepicker-calendar ::ng-deep .p-datepicker table td>span.p-highlight{color:var(--cps-color-calm);background:var(--cps-color-highlight-selected);font-weight:700}.cps-datepicker-calendar ::ng-deep .p-datepicker table td>span:focus{outline:0 none;outline-offset:0;box-shadow:unset}.cps-datepicker-calendar ::ng-deep .p-datepicker table td.p-datepicker-today>span{border-color:var(--cps-color-calm);background:unset;color:unset}.cps-datepicker-calendar ::ng-deep .p-datepicker table td.p-datepicker-today>span.p-highlight{color:var(--cps-color-calm);background:var(--cps-color-highlight-selected);font-weight:700}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-buttonbar{padding:.5rem 0 0;border-top:1px solid #dee2e6}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-datepicker-buttonbar .p-button{width:auto;color:var(--cps-color-prepared)}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-timepicker{border-top:1px solid #dee2e6;padding:.5rem}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-timepicker button{width:2rem;height:2rem;color:var(--cps-color-calm);border:0 none;background:transparent;border-radius:50%;transition:background-color .2s,color .2s,box-shadow .2s}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-timepicker button:enabled:hover{color:var(--cps-color-calm);border-color:transparent;background:var(--cps-color-highlight-hover)}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-timepicker button:focus{outline:0 none;outline-offset:0;box-shadow:unset}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-timepicker button:last-child{margin-top:.2em}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-timepicker span{font-size:1.25rem}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-timepicker>div{padding:0 .5rem}.cps-datepicker-calendar ::ng-deep .p-datepicker.p-datepicker-timeonly .p-timepicker{border-top:0 none}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-monthpicker{margin:.5rem 0}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-monthpicker .p-monthpicker-month{padding:.5rem;transition:box-shadow .2s;border-radius:6px}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-monthpicker .p-monthpicker-month.p-highlight{color:var(--cps-color-calm);background:var(--cps-color-highlight-selected);font-weight:700}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-yearpicker{margin:.5rem 0}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-yearpicker .p-yearpicker-year{padding:.5rem;transition:box-shadow .2s;border-radius:6px}.cps-datepicker-calendar ::ng-deep .p-datepicker .p-yearpicker .p-yearpicker-year.p-highlight{color:var(--cps-color-calm);background:var(--cps-color-highlight-selected);font-weight:700}.cps-datepicker-calendar ::ng-deep .p-datepicker.p-datepicker-multiple-month .p-datepicker-group{border-left:1px solid #dee2e6;padding-right:.5rem;padding-left:.5rem;padding-top:0;padding-bottom:0}.cps-datepicker-calendar ::ng-deep .p-datepicker.p-datepicker-multiple-month .p-datepicker-group:first-child{padding-left:0;border-left:0 none}.cps-datepicker-calendar ::ng-deep .p-datepicker.p-datepicker-multiple-month .p-datepicker-group:last-child{padding-right:0}.cps-datepicker-calendar ::ng-deep .p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):hover{background:var(--cps-color-highlight-hover)}.cps-datepicker-calendar ::ng-deep .p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):focus{outline:0 none;outline-offset:0;box-shadow:unset}.cps-datepicker-calendar ::ng-deep .p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):not(.p-highlight):hover{background:var(--cps-color-highlight-hover)}.cps-datepicker-calendar ::ng-deep .p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):focus{outline:0 none;outline-offset:0;box-shadow:unset}.cps-datepicker-calendar ::ng-deep .p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled):not(.p-highlight):hover{background:var(--cps-color-highlight-hover)}.cps-datepicker-calendar ::ng-deep .p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled):focus{outline:0 none;outline-offset:0;box-shadow:unset}.cps-datepicker-calendar ::ng-deep p-calendar.p-calendar-clearable .p-inputtext{padding-right:2.5rem}.cps-datepicker-calendar ::ng-deep p-calendar.p-calendar-clearable .p-calendar-clear-icon{color:var(--cps-color-calm);right:.75rem}.cps-datepicker-calendar ::ng-deep p-calendar.p-calendar-clearable.p-calendar-w-btn .p-calendar-clear-icon{color:var(--cps-color-calm);right:3.75rem}.cps-datepicker-calendar ::ng-deep .p-datepicker table th,.cps-datepicker-calendar ::ng-deep .p-datepicker table td{padding:.125rem}.cps-datepicker-calendar ::ng-deep .p-datepicker-other-month{color:var(--cps-color-text-light)}.cps-datepicker-calendar ::ng-deep .p-link:focus{outline:0 none;outline-offset:0;box-shadow:unset}.cps-datepicker-calendar ::ng-deep .p-link{text-align:left;background-color:transparent;margin:0;padding:0;border:none;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:1rem;font-family:Source Sans Pro,sans-serif;border-radius:6px}.cps-datepicker-calendar ::ng-deep .p-button{font-family:Source Sans Pro,sans-serif;background-color:transparent;color:var(--cps-color-calm);border-color:transparent;margin:0;display:inline-flex;cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;vertical-align:bottom;text-align:center;overflow:hidden;position:relative;padding:.75rem 1.25rem;font-size:1rem;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s;border-radius:6px}.cps-datepicker-calendar ::ng-deep .p-button:focus{box-shadow:unset}.cps-datepicker-calendar ::ng-deep .p-button:hover{background-color:var(--cps-color-highlight-hover)}.cps-datepicker-calendar ::ng-deep .p-button:active{background-color:var(--cps-color-highlight-selected)}.cps-datepicker-calendar ::ng-deep .p-button .p-button-label{font-weight:700}\n"] }]
331
- }], ctorParameters: function () { return [{ type: i1.NgControl, decorators: [{
332
- type: Self
333
- }, {
334
- type: Optional
335
- }] }]; }, propDecorators: { label: [{
336
- type: Input
337
- }], disabled: [{
338
- type: Input
339
- }], width: [{
340
- type: Input
341
- }], placeholder: [{
342
- type: Input
343
- }], hint: [{
344
- type: Input
345
- }], clearable: [{
346
- type: Input
347
- }], hideDetails: [{
348
- type: Input
349
- }], persistentClear: [{
350
- type: Input
351
- }], showTodayButton: [{
352
- type: Input
353
- }], openOnInputFocus: [{
354
- type: Input
355
- }], infoTooltip: [{
356
- type: Input
357
- }], infoTooltipClass: [{
358
- type: Input
359
- }], infoTooltipMaxWidth: [{
360
- type: Input
361
- }], infoTooltipPersistent: [{
362
- type: Input
363
- }], infoTooltipPosition: [{
364
- type: Input
365
- }], appearance: [{
366
- type: Input
367
- }], minDate: [{
368
- type: Input
369
- }], maxDate: [{
370
- type: Input
371
- }], value: [{
372
- type: Input
373
- }], valueChanged: [{
374
- type: Output
375
- }], datepickerInput: [{
376
- type: ViewChild,
377
- args: ['datepickerInput']
378
- }], calendarMenu: [{
379
- type: ViewChild,
380
- args: ['calendarMenu']
381
- }] } });
382
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLWRhdGVwaWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLWRhdGVwaWNrZXIvY3BzLWRhdGVwaWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLWRhdGVwaWNrZXIvY3BzLWRhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLElBQUksRUFDSixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixXQUFXLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7O0FBT2xFOzs7R0FHRztBQWNILE1BQU0sT0FBTyxzQkFBc0I7SUFpSGpDOzs7T0FHRztJQUNILElBQWEsS0FBSyxDQUFDLEtBQWtCO1FBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxJQUFJLENB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QUFqQixLQUFLO2dCQU1HLFdBQVc7c0JBQW5CLEtBQUs7Z0JBTUcsZUFBZTtzQkFBdkIsS0FBSztnQkFNRyxlQUFlO3NCQUF2QixLQUFLO2dCQU1HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFNRyxXQUFXO3NCQUFuQixLQUFLO2dCQU1HLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFNRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBTUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQU1HLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFNRyxVQUFVO3NCQUFsQixLQUFLO2dCQU9OLE9BQU87c0JBRE4sS0FBSztnQkFRTixPQUFPO3NCQUROLEtBQUs7Z0JBT08sS0FBSztzQkFBakIsS0FBSztnQkFlSSxZQUFZO3NCQUFyQixNQUFNO2dCQUdQLGVBQWU7c0JBRGQsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBSTVCLFlBQVk7c0JBRFgsU0FBUzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFNlbGYsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ2FsZW5kYXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NhbGVuZGFyJztcbmltcG9ydCB7IENwc0lucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLWlucHV0L2Nwcy1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjb252ZXJ0U2l6ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2ludGVybmFsL3NpemUtdXRpbHMnO1xuaW1wb3J0IHsgQ3BzVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jcHMtdG9vbHRpcC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ3BzTWVudUNvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1tZW51L2Nwcy1tZW51LmNvbXBvbmVudCc7XG5cbmV4cG9ydCB0eXBlIENwc0RhdGVwaWNrZXJBcHBlYXJhbmNlVHlwZSA9XG4gIHwgJ291dGxpbmVkJ1xuICB8ICd1bmRlcmxpbmVkJ1xuICB8ICdib3JkZXJsZXNzJztcblxuLyoqXG4gKiBDcHNEYXRlcGlja2VyQ29tcG9uZW50IGlzIGFuIGlucHV0IGNvbXBvbmVudCB0byBwcm92aWRlIGRhdGUgaW5wdXQuXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENwc0lucHV0Q29tcG9uZW50LFxuICAgIENhbGVuZGFyTW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBDcHNNZW51Q29tcG9uZW50XG4gIF0sXG4gIHNlbGVjdG9yOiAnY3BzLWRhdGVwaWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vY3BzLWRhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcHMtZGF0ZXBpY2tlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENwc0RhdGVwaWNrZXJDb21wb25lbnRcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgLyoqXG4gICAqIExhYmVsIG9mIHRoZSBkYXRlcGlja2VyIGVsZW1lbnQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgbGFiZWwgPSAnJztcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGRhdGVwaWNrZXIgaXMgZGlzYWJsZWQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogV2lkdGggb2YgdGhlIGRhdGVwaWNrZXIgb2YgdHlwZSBudW1iZXIgZGVub3RpbmcgcGl4ZWxzIG9yIHN0cmluZy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSB3aWR0aDogbnVtYmVyIHwgc3RyaW5nID0gJzEwMCUnO1xuXG4gIC8qKlxuICAgKiBQbGFjZWhvbGRlciB0ZXh0LlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJ01NL0REL1lZWVknO1xuXG4gIC8qKlxuICAgKiBCb3R0b20gaGludCB0ZXh0IGZvciB0aGUgaW5wdXQgZmllbGQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgaGludCA9ICcnO1xuXG4gIC8qKlxuICAgKiBXaGVuIGVuYWJsZWQsIGEgY2xlYXIgaWNvbiBpcyBkaXNwbGF5ZWQgdG8gY2xlYXIgdGhlIHZhbHVlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGNsZWFyYWJsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBIaWRlcyBoaW50IGFuZCB2YWxpZGF0aW9uIGVycm9ycy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBoaWRlRGV0YWlscyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBzaG91bGQgaGF2ZSBwZXJzaXN0ZW50IGNsZWFyIGljb24uXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgcGVyc2lzdGVudENsZWFyID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBzaG93IGJ1dHRvbiB0byBiZSBhYmxlIHRvIHNlbGVjdCB0b2RheSdzIGRhdGUuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2hvd1RvZGF5QnV0dG9uID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBkYXRlcGlja2VyIGRyb3Bkb3duIHNob3VsZCBvcGVuIG9uIGlucHV0IGZvY3VzLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIG9wZW5PbklucHV0Rm9jdXMgPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hlbiBpdCBpcyBub3QgYW4gZW1wdHkgc3RyaW5nLCBhbiBpbmZvIGljb24gaXMgZGlzcGxheWVkIHRvIHNob3cgdGV4dCBmb3IgbW9yZSBpbmZvLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGluZm9Ub29sdGlwID0gJyc7XG5cbiAgLyoqXG4gICAqIEluZm9Ub29sdGlwIGNsYXNzIGZvciBzdHlsaW5nLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGluZm9Ub29sdGlwQ2xhc3MgPSAnY3BzLXRvb2x0aXAtY29udGVudCc7XG5cbiAgLyoqXG4gICAqIFNpemUgb2YgaW5mb1Rvb2x0aXAsIG9mIHR5cGUgbnVtYmVyIGRlbm90aW5nIHBpeGVscyBvciBzdHJpbmcuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgaW5mb1Rvb2x0aXBNYXhXaWR0aDogbnVtYmVyIHwgc3RyaW5nID0gJzEwMCUnO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGluZm9Ub29sdGlwIGlzIHBlcnNpc3RlbnQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgaW5mb1Rvb2x0aXBQZXJzaXN0ZW50ID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFBvc2l0aW9uIG9mIGluZm9Ub29sdGlwLCBpdCBjYW4gYmUgXCJ0b3BcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCIgb3IgXCJyaWdodFwiLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGluZm9Ub29sdGlwUG9zaXRpb246IENwc1Rvb2x0aXBQb3NpdGlvbiA9ICd0b3AnO1xuXG4gIC8qKlxuICAgKiBTdHlsaW5nIGFwcGVhcmFuY2Ugb2YgZGF0ZXBpY2tlciBpbnB1dCwgaXQgY2FuIGJlICdvdXRsaW5lZCcsICd1bmRlcmxpbmVkJyBvciAnYm9yZGVybGVzcy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBhcHBlYXJhbmNlOiBDcHNEYXRlcGlja2VyQXBwZWFyYW5jZVR5cGUgPSAnb3V0bGluZWQnO1xuXG4gIC8qKlxuICAgKiBNaW5pbWFsIGRhdGUgYXZhaWxhbGJlIGZvciBzZWxlY3Rpb24uXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KClcbiAgbWluRGF0ZSE6IERhdGU7XG5cbiAgLyoqXG4gICAqIE1heGltYWwgZGF0ZSBhdmFpbGFsYmUgZm9yIHNlbGVjdGlvbi5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKVxuICBtYXhEYXRlITogRGF0ZTtcblxuICAvKipcbiAgICogVmFsdWUgb2YgdGhlIGRhdGVwaWNrZXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2V0IHZhbHVlKHZhbHVlOiBEYXRlIHwgbnVsbCkge1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5zdHJpbmdEYXRlID0gdGhpcy5fZGF0ZVRvU3RyaW5nKHZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBEYXRlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSBvbiB2YWx1ZSBjaGFuZ2UuXG4gICAqIEBwYXJhbSB7RGF0ZSB8IG51bGx9IHZhbHVlIC0gdmFsdWUgY2hhbmdlLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGUgfCBudWxsPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2RhdGVwaWNrZXJJbnB1dCcpXG4gIGRhdGVwaWNrZXJJbnB1dCE6IENwc0lucHV0Q29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyTWVudScpXG4gIGNhbGVuZGFyTWVudSE6IENwc01lbnVDb21wb25lbnQ7XG5cbiAgc3RyaW5nRGF0ZSA9ICcnO1xuICBpc09wZW5lZCA9IGZhbHNlO1xuICBlcnJvciA9ICcnO1xuICBjdnRXaWR0aCA9ICcnO1xuXG4gIHByaXZhdGUgX3N0YXR1c0NoYW5nZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfdmFsdWUhOiBEYXRlIHwgbnVsbDtcblxuICBjb25zdHJ1Y3RvcihAU2VsZigpIEBPcHRpb25hbCgpIHByaXZhdGUgX2NvbnRyb2w6IE5nQ29udHJvbCkge1xuICAgIGlmICh0aGlzLl9jb250cm9sKSB7XG4gICAgICB0aGlzLl9jb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY3Z0V2lkdGggPSBjb252ZXJ0U2l6ZSh0aGlzLndpZHRoKTtcblxuICAgIHRoaXMuX3N0YXR1c0NoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLl9jb250cm9sPy5zdGF0dXNDaGFuZ2VzPy5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoZWNrRXJyb3JzKCk7XG4gICAgICB9XG4gICAgKSBhcyBTdWJzY3JpcHRpb247XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdGF0dXNDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBvbkNoYW5nZSA9IChldmVudDogYW55KSA9PiB7fTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgb25JbnB1dFZhbHVlQ2hhbmdlZCh2YWw6IHN0cmluZykge1xuICAgIHRoaXMuc3RyaW5nRGF0ZSA9IHZhbDtcbiAgICBpZiAoIXZhbCkge1xuICAgICAgdGhpcy5fdXBkYXRlVmFsdWUobnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGR0ID0gdGhpcy5fc3RyaW5nVG9EYXRlKHZhbCk7XG4gICAgaWYgKGR0KSB0aGlzLl91cGRhdGVWYWx1ZShkdCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBEYXRlIHwgbnVsbCkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVZhbHVlKHZhbHVlOiBEYXRlIHwgbnVsbCkge1xuICAgIGlmICh0aGlzLnZhbHVlID09PSB2YWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZWQuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVWYWx1ZUZyb21JbnB1dFN0cmluZygpIHtcbiAgICBpZiAoIXRoaXMuc3RyaW5nRGF0ZSkge1xuICAgICAgdGhpcy5fdXBkYXRlVmFsdWUobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVZhbHVlKHRoaXMuX3N0cmluZ1RvRGF0ZSh0aGlzLnN0cmluZ0RhdGUpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jaGVja0RhdGVGb3JtYXQoZGF0ZVN0cmluZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCEvXlxcZFxcZFxcL1xcZFxcZFxcL1xcZFxcZFxcZFxcZCQvLnRlc3QoZGF0ZVN0cmluZykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgcGFydHMgPSBkYXRlU3RyaW5nLnNwbGl0KCcvJykubWFwKChwKSA9PiBwYXJzZUludChwLCAxMCkpO1xuICAgIHBhcnRzWzBdIC09IDE7XG4gICAgY29uc3QgZCA9IG5ldyBEYXRlKHBhcnRzWzJdLCBwYXJ0c1swXSwgcGFydHNbMV0pO1xuICAgIHJldHVybiAoXG4gICAgICBkLmdldE1vbnRoKCkgPT09IHBhcnRzWzBdICYmXG4gICAgICBkLmdldERhdGUoKSA9PT0gcGFydHNbMV0gJiZcbiAgICAgIGQuZ2V0RnVsbFllYXIoKSA9PT0gcGFydHNbMl1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2hlY2tEYXRlSW5SYW5nZShkYXRlOiBEYXRlLCBtaW5EYXRlOiBEYXRlLCBtYXhEYXRlOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgaWYgKCFtaW5EYXRlICYmICFtYXhEYXRlKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAobWluRGF0ZSAmJiBtYXhEYXRlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBkYXRlLmdldFRpbWUoKSA+PSBtaW5EYXRlLmdldFRpbWUoKSAmJlxuICAgICAgICBkYXRlLmdldFRpbWUoKSA8PSBtYXhEYXRlLmdldFRpbWUoKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG1pbkRhdGUpIHtcbiAgICAgIHJldHVybiBkYXRlLmdldFRpbWUoKSA+PSBtaW5EYXRlLmdldFRpbWUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpIDw9IG1heERhdGUuZ2V0VGltZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGF0ZVRvU3RyaW5nKGRhdGVWYWw6IERhdGUgfCBudWxsKTogc3RyaW5nIHtcbiAgICBpZiAoIWRhdGVWYWwpIHJldHVybiAnJztcbiAgICBsZXQgbW9udGggPSAnJyArIChkYXRlVmFsLmdldE1vbnRoKCkgKyAxKTtcbiAgICBpZiAobW9udGgubGVuZ3RoIDwgMikgbW9udGggPSAnMCcgKyBtb250aDtcbiAgICBsZXQgZGF5ID0gJycgKyBkYXRlVmFsLmdldERhdGUoKTtcbiAgICBpZiAoZGF5Lmxlbmd0aCA8IDIpIGRheSA9ICcwJyArIGRheTtcbiAgICBjb25zdCB5ZWFyID0gZGF0ZVZhbC5nZXRGdWxsWWVhcigpO1xuICAgIHJldHVybiBgJHttb250aH0vJHtkYXl9LyR7eWVhcn1gO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3RyaW5nVG9EYXRlKGRhdGVTdHJpbmc6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuX2NoZWNrRGF0ZUZvcm1hdChkYXRlU3RyaW5nKSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgW21vbnRoLCBkYXksIHllYXJdID0gZGF0ZVN0cmluZy5zcGxpdCgnLycpO1xuICAgIGNvbnN0IGR0ID0gbmV3IERhdGUoYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YCk7XG4gICAgY29uc3QgaW5SYW5nZSA9IHRoaXMuX2NoZWNrRGF0ZUluUmFuZ2UoZHQsIHRoaXMubWluRGF0ZSwgdGhpcy5tYXhEYXRlKTtcbiAgICByZXR1cm4gaW5SYW5nZSA/IGR0IDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrRXJyb3JzKCkge1xuICAgIGlmICh0aGlzLnN0cmluZ0RhdGUgJiYgIXRoaXMuX3N0cmluZ1RvRGF0ZSh0aGlzLnN0cmluZ0RhdGUpKSB7XG4gICAgICB0aGlzLmVycm9yID0gJ0RhdGUgaXMgaW52YWxpZCc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXJyb3JzID0gdGhpcy5fY29udHJvbD8uZXJyb3JzO1xuICAgIGlmICghdGhpcy5fY29udHJvbD8uY29udHJvbD8udG91Y2hlZCB8fCAhZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9yID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCdyZXF1aXJlZCcgaW4gZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9yID0gJ0ZpZWxkIGlzIHJlcXVpcmVkJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlcnJBcnIgPSBPYmplY3QudmFsdWVzKGVycm9ycyk7XG4gICAgaWYgKGVyckFyci5sZW5ndGggPCAxKSB7XG4gICAgICB0aGlzLmVycm9yID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJBcnIuZmluZCgobXNnKSA9PiB0eXBlb2YgbXNnID09PSAnc3RyaW5nJyk7XG5cbiAgICB0aGlzLmVycm9yID0gbWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcic7XG4gIH1cblxuICBvbkNsZWFyQ2FsZW5kYXJEYXRlKCkge1xuICAgIHRoaXMub25TZWxlY3RDYWxlbmRhckRhdGUobnVsbCk7XG4gIH1cblxuICBvblNlbGVjdENhbGVuZGFyRGF0ZShkYXRlVmFsOiBEYXRlIHwgbnVsbCkge1xuICAgIHRoaXMudG9nZ2xlQ2FsZW5kYXIoZmFsc2UpO1xuICAgIHRoaXMud3JpdGVWYWx1ZShkYXRlVmFsKTtcbiAgICB0aGlzLm9uQ2hhbmdlKGRhdGVWYWwpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2VkLmVtaXQoZGF0ZVZhbCk7XG4gIH1cblxuICBvbklucHV0Qmx1cigpIHtcbiAgICBpZiAodGhpcy5pc09wZW5lZCkgcmV0dXJuO1xuICAgIHRoaXMuX2NvbnRyb2w/LmNvbnRyb2w/Lm1hcmtBc1RvdWNoZWQoKTtcbiAgICB0aGlzLl91cGRhdGVWYWx1ZUZyb21JbnB1dFN0cmluZygpO1xuICAgIHRoaXMuX2NoZWNrRXJyb3JzKCk7XG4gIH1cblxuICBvbklucHV0RW50ZXJDbGlja2VkKCkge1xuICAgIGlmICghdGhpcy5pc09wZW5lZCkgcmV0dXJuO1xuICAgIHRoaXMuX2NvbnRyb2w/LmNvbnRyb2w/Lm1hcmtBc1RvdWNoZWQoKTtcbiAgICB0aGlzLl91cGRhdGVWYWx1ZUZyb21JbnB1dFN0cmluZygpO1xuICAgIHRoaXMuX2NoZWNrRXJyb3JzKCk7XG4gICAgdGhpcy50b2dnbGVDYWxlbmRhcihmYWxzZSk7XG4gIH1cblxuICBvbkNsaWNrQ2FsZW5kYXJJY29uKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaXNPcGVuZWQpIHRoaXMuX3VwZGF0ZVZhbHVlRnJvbUlucHV0U3RyaW5nKCk7XG4gICAgdGhpcy50b2dnbGVDYWxlbmRhcigpO1xuICB9XG5cbiAgb25CZWZvcmVDYWxlbmRhckhpZGRlbigpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5pc09wZW5lZCkgcmV0dXJuO1xuICAgIHRoaXMuX3VwZGF0ZVZhbHVlRnJvbUlucHV0U3RyaW5nKCk7XG4gICAgdGhpcy50b2dnbGVDYWxlbmRhcihmYWxzZSk7XG4gIH1cblxuICBvbklucHV0Rm9jdXMoKSB7XG4gICAgaWYgKHRoaXMub3Blbk9uSW5wdXRGb2N1cykgdGhpcy50b2dnbGVDYWxlbmRhcih0cnVlKTtcbiAgfVxuXG4gIG9uSW5wdXRDbGVhcigpIHtcbiAgICBpZiAodGhpcy5pc09wZW5lZCkgdGhpcy5mb2N1c0lucHV0KCk7XG4gIH1cblxuICBvbkNhbGVuZGFyQ29udGVudENsaWNrKCkge1xuICAgIGlmICh0aGlzLmlzT3BlbmVkKSB0aGlzLmZvY3VzSW5wdXQoKTtcbiAgfVxuXG4gIGZvY3VzSW5wdXQoKSB7XG4gICAgdGhpcy5kYXRlcGlja2VySW5wdXQuZm9jdXMoKTtcbiAgfVxuXG4gIHRvZ2dsZUNhbGVuZGFyKHNob3c/OiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5pc09wZW5lZCA9PT0gc2hvdykgcmV0dXJuO1xuXG4gICAgY29uc3QgdGFyZ2V0ID1cbiAgICAgIHRoaXMuZGF0ZXBpY2tlcklucHV0LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLmNwcy1pbnB1dC13cmFwJ1xuICAgICAgKTtcblxuICAgIGlmICh0eXBlb2Ygc2hvdyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBpZiAoc2hvdykge1xuICAgICAgICB0aGlzLmNhbGVuZGFyTWVudS5zaG93KHtcbiAgICAgICAgICB0YXJnZXRcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNhbGVuZGFyTWVudS5oaWRlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FsZW5kYXJNZW51LnRvZ2dsZSh7XG4gICAgICAgIHRhcmdldFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5pc09wZW5lZCA9IHRoaXMuY2FsZW5kYXJNZW51LmlzVmlzaWJsZSgpO1xuXG4gICAgaWYgKCF0aGlzLmlzT3BlbmVkKSB7XG4gICAgICB0aGlzLl9jb250cm9sPy5jb250cm9sPy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICB0aGlzLl9jaGVja0Vycm9ycygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzSW5wdXQoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJjcHMtZGF0ZXBpY2tlclwiXG4gIFtuZ1N0eWxlXT1cInsgd2lkdGg6IGN2dFdpZHRoIH1cIlxuICBbY2xhc3MuZm9jdXNlZF09XCJpc09wZW5lZFwiPlxuICA8Y3BzLWlucHV0XG4gICAgI2RhdGVwaWNrZXJJbnB1dFxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW3ZhbHVlXT1cInN0cmluZ0RhdGVcIlxuICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgcHJlZml4SWNvbj1cImRhdGVwaWNrZXJcIlxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgKHByZWZpeEljb25DbGlja2VkKT1cIm9uQ2xpY2tDYWxlbmRhckljb24oKVwiXG4gICAgW3ByZWZpeEljb25DbGlja2FibGVdPVwidHJ1ZVwiXG4gICAgKGZvY3VzZWQpPVwib25JbnB1dEZvY3VzKClcIlxuICAgICh2YWx1ZUNoYW5nZWQpPVwib25JbnB1dFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICBbY2xlYXJhYmxlXT1cImNsZWFyYWJsZVwiXG4gICAgKGJsdXJyZWQpPVwib25JbnB1dEJsdXIoKVwiXG4gICAgKGNsZWFyZWQpPVwib25JbnB1dENsZWFyKClcIlxuICAgIChlbnRlckNsaWNrZWQpPVwib25JbnB1dEVudGVyQ2xpY2tlZCgpXCJcbiAgICBbd2lkdGhdPVwid2lkdGhcIlxuICAgIFtoaW50XT1cImhpbnRcIlxuICAgIFtoaWRlRGV0YWlsc109XCJoaWRlRGV0YWlsc1wiXG4gICAgW2luZm9Ub29sdGlwXT1cImluZm9Ub29sdGlwXCJcbiAgICBbaW5mb1Rvb2x0aXBDbGFzc109XCJpbmZvVG9vbHRpcENsYXNzXCJcbiAgICBbaW5mb1Rvb2x0aXBNYXhXaWR0aF09XCJpbmZvVG9vbHRpcE1heFdpZHRoXCJcbiAgICBbaW5mb1Rvb2x0aXBQZXJzaXN0ZW50XT1cImluZm9Ub29sdGlwUGVyc2lzdGVudFwiXG4gICAgW3BlcnNpc3RlbnRDbGVhcl09XCJwZXJzaXN0ZW50Q2xlYXJcIlxuICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgIFtlcnJvcl09XCJlcnJvclwiPjwvY3BzLWlucHV0PlxuICA8Y3BzLW1lbnVcbiAgICAjY2FsZW5kYXJNZW51XG4gICAgW3dpdGhBcnJvd109XCJmYWxzZVwiXG4gICAgKGJlZm9yZU1lbnVIaWRkZW4pPVwib25CZWZvcmVDYWxlbmRhckhpZGRlbigpXCJcbiAgICAoY29udGVudENsaWNrZWQpPVwib25DYWxlbmRhckNvbnRlbnRDbGljaygpXCJcbiAgICBbZm9jdXNPblNob3ddPVwiZmFsc2VcIlxuICAgIGhpZGVUcmFuc2l0aW9uT3B0aW9ucz1cIjBzIGxpbmVhclwiXG4gICAgY29udGFpbmVyQ2xhc3M9XCJjcHMtZGF0ZXBpY2tlci1jYWxlbmRhci1tZW51XCI+XG4gICAgPGRpdiBjbGFzcz1cImNwcy1kYXRlcGlja2VyLWNhbGVuZGFyXCI+XG4gICAgICA8cC1jYWxlbmRhclxuICAgICAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcbiAgICAgICAgW3Nob3dJY29uXT1cInRydWVcIlxuICAgICAgICBbc2hvd0J1dHRvbkJhcl09XCJzaG93VG9kYXlCdXR0b25cIlxuICAgICAgICBbaW5saW5lXT1cInRydWVcIlxuICAgICAgICAob25TZWxlY3QpPVwib25TZWxlY3RDYWxlbmRhckRhdGUoJGV2ZW50KVwiXG4gICAgICAgIChvbkNsZWFyQ2xpY2spPVwib25DbGVhckNhbGVuZGFyRGF0ZSgpXCJcbiAgICAgICAgW3Nob3dPdGhlck1vbnRoc109XCJmYWxzZVwiXG4gICAgICAgIFttaW5EYXRlXT1cIm1pbkRhdGVcIlxuICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCI+XG4gICAgICA8L3AtY2FsZW5kYXI+XG4gICAgPC9kaXY+XG4gIDwvY3BzLW1lbnU+XG48L2Rpdj5cbiJdfQ==