@tetacom/ng-components 1.0.151 → 1.1.1

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 (208) hide show
  1. package/assets/color-icons.svg +521 -49
  2. package/assets/file-icons.svg +1 -0
  3. package/assets/icons.svg +138 -205
  4. package/component/accordion/accordion-item/accordion-item.component.d.ts +1 -4
  5. package/component/button/button/button.component.d.ts +1 -4
  6. package/component/checkbox/checkbox/checkbox.component.d.ts +1 -2
  7. package/component/date-picker/date-picker/date-picker.component.d.ts +68 -38
  8. package/component/date-picker/date-picker.module.d.ts +16 -19
  9. package/component/date-picker/day-select/day-select.component.d.ts +51 -0
  10. package/component/date-picker/model/date-picker-mode.enum.d.ts +5 -0
  11. package/component/date-picker/month-picker/month-picker.component.d.ts +50 -16
  12. package/component/date-picker/month-select/month-select.component.d.ts +40 -0
  13. package/component/date-picker/public-api.d.ts +4 -5
  14. package/component/date-picker/service/picker-touch.service.d.ts +12 -0
  15. package/component/date-picker/time-part-control/time-part-control.component.d.ts +26 -0
  16. package/component/date-picker/util/date-picker-util.d.ts +15 -0
  17. package/component/date-picker/year-select/year-select.component.d.ts +45 -0
  18. package/component/dropdown/dropdown-base.d.ts +1 -3
  19. package/component/filter/filter.module.d.ts +2 -1
  20. package/component/icon/icon-file/icon-file.component.d.ts +3 -9
  21. package/component/icon/icon.module.d.ts +5 -4
  22. package/component/icon/public-api.d.ts +0 -1
  23. package/component/input/input/input.component.d.ts +1 -3
  24. package/component/message/model/message.d.ts +0 -3
  25. package/component/public-api.d.ts +0 -2
  26. package/component/select/select/select.component.d.ts +1 -4
  27. package/component/select/select.module.d.ts +2 -1
  28. package/component/switch/switch/switch.component.d.ts +1 -4
  29. package/component/table/table-body/table-body.component.d.ts +1 -0
  30. package/component/table/table.module.d.ts +2 -1
  31. package/component/tree/tree.module.d.ts +2 -1
  32. package/directive/hint/hint.directive.d.ts +1 -3
  33. package/directive/only-number/only-number.directive.d.ts +2 -1
  34. package/directive/public-api.d.ts +1 -0
  35. package/directive/scrollable/public-api.d.ts +3 -0
  36. package/directive/scrollable/scrollable/scrollable.component.d.ts +32 -0
  37. package/directive/scrollable/scrollable.directive.d.ts +6 -0
  38. package/directive/scrollable/scrollable.module.d.ts +10 -0
  39. package/esm2020/component/accordion/accordion/accordion.component.mjs +2 -3
  40. package/esm2020/component/accordion/accordion-head/accordion-head.component.mjs +2 -3
  41. package/esm2020/component/accordion/accordion-item/accordion-item.component.mjs +3 -13
  42. package/esm2020/component/button/button/button.component.mjs +3 -18
  43. package/esm2020/component/checkbox/checkbox/checkbox.component.mjs +3 -6
  44. package/esm2020/component/date-picker/date-picker/date-picker.component.mjs +235 -141
  45. package/esm2020/component/date-picker/date-picker.module.mjs +45 -41
  46. package/esm2020/component/date-picker/day-select/day-select.component.mjs +184 -0
  47. package/esm2020/component/date-picker/model/date-picker-mode.enum.mjs +7 -0
  48. package/esm2020/component/date-picker/month-picker/month-picker.component.mjs +237 -33
  49. package/esm2020/component/date-picker/month-select/month-select.component.mjs +148 -0
  50. package/esm2020/component/date-picker/public-api.mjs +5 -6
  51. package/esm2020/component/date-picker/service/picker-touch.service.mjs +34 -0
  52. package/esm2020/component/date-picker/time-part-control/time-part-control.component.mjs +73 -0
  53. package/esm2020/component/date-picker/util/date-picker-util.mjs +142 -0
  54. package/esm2020/component/date-picker/year-select/year-select.component.mjs +189 -0
  55. package/esm2020/component/dropdown/dropdown/dropdown.component.mjs +2 -3
  56. package/esm2020/component/dropdown/dropdown-base.mjs +2 -6
  57. package/esm2020/component/dropdown/dropdown.directive.mjs +1 -1
  58. package/esm2020/component/expand-card/expand-card/expand-card.component.mjs +1 -1
  59. package/esm2020/component/expand-card/expand-item/expand-item.component.mjs +1 -1
  60. package/esm2020/component/expand-panel/expand-panel/expand-panel.component.mjs +1 -1
  61. package/esm2020/component/file-upload/file-upload-area/file-upload-area.component.mjs +1 -1
  62. package/esm2020/component/filter/date-filter/date-filter.component.mjs +1 -1
  63. package/esm2020/component/filter/filter.module.mjs +7 -3
  64. package/esm2020/component/filter/list-filter/list-filter.component.mjs +4 -3
  65. package/esm2020/component/filter/numeric-filter/numeric-filter.component.mjs +1 -1
  66. package/esm2020/component/filter/string-filter/string-filter.component.mjs +1 -1
  67. package/esm2020/component/icon/icon-file/icon-file.component.mjs +6 -20
  68. package/esm2020/component/icon/icon.module.mjs +6 -1
  69. package/esm2020/component/icon/public-api.mjs +1 -2
  70. package/esm2020/component/input/input/input.component.mjs +3 -6
  71. package/esm2020/component/input/input.module.mjs +1 -1
  72. package/esm2020/component/input/text-field/text-field.component.mjs +3 -3
  73. package/esm2020/component/message/message/message.component.mjs +3 -4
  74. package/esm2020/component/message/message-host/message-host.component.mjs +1 -1
  75. package/esm2020/component/message/model/message.mjs +1 -2
  76. package/esm2020/component/modal/dialog/dialog.component.mjs +1 -1
  77. package/esm2020/component/property-grid/property-grid/property-grid-item/property-grid-item.component.mjs +2 -2
  78. package/esm2020/component/public-api.mjs +1 -4
  79. package/esm2020/component/select/select/select.component.mjs +6 -9
  80. package/esm2020/component/select/select.module.mjs +7 -3
  81. package/esm2020/component/switch/switch/switch.component.mjs +7 -19
  82. package/esm2020/component/table/default/boolean-cell/boolean-cell.component.mjs +1 -1
  83. package/esm2020/component/table/default/date-cell/date-cell.component.mjs +3 -3
  84. package/esm2020/component/table/default/date-time-cell/date-time-cell.component.mjs +1 -1
  85. package/esm2020/component/table/default/default-head-cell/default-head-cell.component.mjs +1 -1
  86. package/esm2020/component/table/default/list-cell/list-cell.component.mjs +1 -1
  87. package/esm2020/component/table/default/string-cell/string-cell.component.mjs +1 -1
  88. package/esm2020/component/table/selection-cell/selection-cell.component.mjs +1 -1
  89. package/esm2020/component/table/selection-head-cell/selection-head-cell.component.mjs +1 -1
  90. package/esm2020/component/table/table-body/table-body.component.mjs +11 -6
  91. package/esm2020/component/table/table-head/filter-dropdown-tab/filter-dropdown-tab.component.mjs +1 -1
  92. package/esm2020/component/table/table-head/visibility-dropdown-tab/visibility-dropdown-tab.component.mjs +4 -3
  93. package/esm2020/component/table/table.module.mjs +7 -3
  94. package/esm2020/component/theme-switch/theme-switch/theme-switch.component.mjs +1 -1
  95. package/esm2020/component/tree/tree/tree.component.mjs +6 -4
  96. package/esm2020/component/tree/tree.module.mjs +5 -4
  97. package/esm2020/directive/hint/hint.directive.mjs +3 -6
  98. package/esm2020/directive/only-number/only-number.directive.mjs +11 -2
  99. package/esm2020/directive/public-api.mjs +2 -1
  100. package/esm2020/directive/scrollable/public-api.mjs +4 -0
  101. package/esm2020/directive/scrollable/scrollable/scrollable.component.mjs +96 -0
  102. package/esm2020/directive/scrollable/scrollable.directive.mjs +19 -0
  103. package/esm2020/directive/scrollable/scrollable.module.mjs +33 -0
  104. package/esm2020/locale/en.mjs +1 -3
  105. package/esm2020/locale/ru.mjs +1 -3
  106. package/esm2020/locale/teta-localisation.mjs +1 -1
  107. package/esm2020/observable/animation-frame.mjs +30 -0
  108. package/esm2020/observable/public-api.mjs +2 -1
  109. package/esm2020/pipe/prepend-zero/prepend-zero.module.mjs +18 -0
  110. package/esm2020/pipe/prepend-zero/prepend-zero.pipe.mjs +21 -0
  111. package/fesm2015/tetacom-ng-components.mjs +5483 -5182
  112. package/fesm2015/tetacom-ng-components.mjs.map +1 -1
  113. package/fesm2020/tetacom-ng-components.mjs +3333 -3026
  114. package/fesm2020/tetacom-ng-components.mjs.map +1 -1
  115. package/locale/teta-localisation.d.ts +0 -2
  116. package/observable/animation-frame.d.ts +4 -0
  117. package/observable/public-api.d.ts +1 -0
  118. package/package.json +2 -3
  119. package/pipe/prepend-zero/prepend-zero.module.d.ts +8 -0
  120. package/pipe/prepend-zero/prepend-zero.pipe.d.ts +7 -0
  121. package/style/accordion.scss +6 -28
  122. package/style/assembly-library.scss +1 -4
  123. package/style/assembly-presets.scss +1 -0
  124. package/style/button.scss +13 -16
  125. package/style/checkbox.scss +13 -26
  126. package/style/chips.scss +10 -10
  127. package/style/color.scss +36 -1
  128. package/style/datepicker.scss +24 -139
  129. package/style/drag.scss +1 -1
  130. package/style/dropdown.scss +4 -6
  131. package/style/hint.scss +5 -5
  132. package/style/icon.scss +1 -2
  133. package/style/input.scss +23 -32
  134. package/style/layout.scss +2 -6
  135. package/style/library.scss +17 -0
  136. package/style/list.scss +8 -11
  137. package/style/loader.scss +2 -2
  138. package/style/message.scss +7 -15
  139. package/style/modal.scss +2 -3
  140. package/style/navigation.scss +1 -4
  141. package/style/presets/color-presets.scss +160 -8
  142. package/style/presets/font-presets.scss +25 -26
  143. package/style/presets/shadow-presets.scss +16 -0
  144. package/style/progress.scss +3 -3
  145. package/style/radio.scss +7 -21
  146. package/style/resize-panel.scss +2 -2
  147. package/style/scroll.scss +21 -17
  148. package/style/select.scss +21 -26
  149. package/style/shadow.scss +20 -0
  150. package/style/sidebar.scss +1 -1
  151. package/style/switch.scss +10 -15
  152. package/style/table.scss +15 -17
  153. package/style/tabs.scss +11 -11
  154. package/style/toggle.scss +18 -20
  155. package/style/tokens/basedark.tokens.css +77 -0
  156. package/style/tokens/baselight.tokens.css +61 -0
  157. package/style/tokens/global.tokens.css +235 -0
  158. package/style/tokens/utility.tokens.css +1119 -0
  159. package/style/toolbar.scss +1 -1
  160. package/style/tooltip.scss +6 -8
  161. package/style/tree.scss +4 -4
  162. package/style/util/button-util.scss +58 -0
  163. package/common/model/view-type.model.d.ts +0 -1
  164. package/component/avatar/avatar/avatar.component.d.ts +0 -17
  165. package/component/avatar/avatar.module.d.ts +0 -9
  166. package/component/avatar/model/avatar-color.enum.d.ts +0 -20
  167. package/component/avatar/public-api.d.ts +0 -2
  168. package/component/date-picker/base-calendar.d.ts +0 -49
  169. package/component/date-picker/base-picker.d.ts +0 -60
  170. package/component/date-picker/date-picker/date-calendar/date-calendar.component.d.ts +0 -20
  171. package/component/date-picker/date-range/date-range.component.d.ts +0 -46
  172. package/component/date-picker/date-range/range-calendar/range-calendar.component.d.ts +0 -39
  173. package/component/date-picker/day-picker/day-item/day-item.component.d.ts +0 -9
  174. package/component/date-picker/day-picker/day-picker.component.d.ts +0 -30
  175. package/component/date-picker/model/from-to.model.d.ts +0 -4
  176. package/component/date-picker/model/min-max-date.model.d.ts +0 -4
  177. package/component/date-picker/year-picker/scroll-to-selected-year.directive.d.ts +0 -11
  178. package/component/date-picker/year-picker/year-picker.component.d.ts +0 -24
  179. package/component/divider/divider/divider.component.d.ts +0 -10
  180. package/component/divider/divider.module.d.ts +0 -8
  181. package/component/divider/public-api.d.ts +0 -2
  182. package/component/icon/icon-file/icon-file.module.d.ts +0 -9
  183. package/esm2020/common/model/view-type.model.mjs +0 -2
  184. package/esm2020/component/avatar/avatar/avatar.component.mjs +0 -57
  185. package/esm2020/component/avatar/avatar.module.mjs +0 -28
  186. package/esm2020/component/avatar/model/avatar-color.enum.mjs +0 -22
  187. package/esm2020/component/avatar/public-api.mjs +0 -3
  188. package/esm2020/component/date-picker/base-calendar.mjs +0 -99
  189. package/esm2020/component/date-picker/base-picker.mjs +0 -102
  190. package/esm2020/component/date-picker/date-picker/date-calendar/date-calendar.component.mjs +0 -49
  191. package/esm2020/component/date-picker/date-range/date-range.component.mjs +0 -211
  192. package/esm2020/component/date-picker/date-range/range-calendar/range-calendar.component.mjs +0 -108
  193. package/esm2020/component/date-picker/day-picker/day-item/day-item.component.mjs +0 -15
  194. package/esm2020/component/date-picker/day-picker/day-picker.component.mjs +0 -113
  195. package/esm2020/component/date-picker/model/from-to.model.mjs +0 -2
  196. package/esm2020/component/date-picker/model/min-max-date.model.mjs +0 -2
  197. package/esm2020/component/date-picker/year-picker/scroll-to-selected-year.directive.mjs +0 -26
  198. package/esm2020/component/date-picker/year-picker/year-picker.component.mjs +0 -48
  199. package/esm2020/component/divider/divider/divider.component.mjs +0 -18
  200. package/esm2020/component/divider/divider.module.mjs +0 -20
  201. package/esm2020/component/divider/public-api.mjs +0 -3
  202. package/esm2020/component/icon/icon-file/icon-file.module.mjs +0 -28
  203. package/style/badge.scss +0 -28
  204. package/style/bottombar.scss +0 -5
  205. package/style/divider.scss +0 -15
  206. package/style/presets/view-types.scss +0 -15
  207. package/style/tag.scss +0 -37
  208. package/style/util/scroll-util.scss +0 -4
@@ -1,49 +1,253 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, forwardRef, HostBinding, Input, } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { takeWhile } from 'rxjs/operators';
4
+ import { DatePickerMode } from '../model/date-picker-mode.enum';
2
5
  import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/common";
4
- import * as i2 from "../../button/button/button.component";
5
- import * as i3 from "../../icon/icon/icon.component";
6
+ import * as i1 from "../../../locale/teta-config.service";
7
+ import * as i2 from "@angular/common";
8
+ import * as i3 from "../../dropdown/dropdown/dropdown.component";
9
+ import * as i4 from "../../dropdown/dropdown-head.directive";
10
+ import * as i5 from "../../dropdown/dropdown-content.directive";
11
+ import * as i6 from "../../icon/icon/icon.component";
12
+ import * as i7 from "../../button/button/button.component";
13
+ import * as i8 from "../../../directive/scrollable/scrollable/scrollable.component";
14
+ import * as i9 from "../year-select/year-select.component";
15
+ import * as i10 from "../month-select/month-select.component";
16
+ export const MONTH_PICKER_CONTROL_VALUE_ACCESSOR = {
17
+ provide: NG_VALUE_ACCESSOR,
18
+ useExisting: forwardRef(() => MonthPickerComponent),
19
+ multi: true,
20
+ };
6
21
  export class MonthPickerComponent {
7
- constructor() {
8
- this.selectedMonth = 1;
9
- this.selectMonth = new EventEmitter();
10
- this.changeYear = new EventEmitter();
11
- this.months = [];
22
+ constructor(localeService, _cdr) {
23
+ this.localeService = localeService;
24
+ this._cdr = _cdr;
25
+ this.showToday = true;
26
+ this.appendToBody = true;
27
+ this.classDatepicker = true;
28
+ this.tabindex = 0;
29
+ this.datePickerModeEnum = DatePickerMode;
30
+ this.displayMode = DatePickerMode.month;
31
+ this._value = null;
32
+ this._alive = true;
33
+ this.onChange = (_) => {
34
+ };
35
+ this.onTouched = () => {
36
+ };
37
+ this.isMinInvalid = (dat) => {
38
+ if (!this.minDate || !(this.minDate instanceof Date) || !dat) {
39
+ return false;
40
+ }
41
+ const min = new Date(this.minDate.getFullYear(), this.minDate.getMonth(), 1);
42
+ return min.getTime() > dat.getTime();
43
+ };
44
+ this.isMaxInvalid = (dat) => {
45
+ if (!this.maxDate || !(this.maxDate instanceof Date) || !dat) {
46
+ return false;
47
+ }
48
+ const max = new Date(this.maxDate.getFullYear(), this.maxDate.getMonth(), 1);
49
+ return max.getTime() < dat.getTime();
50
+ };
51
+ this.scrollMonth = (e) => {
52
+ if (this.showPicker) {
53
+ return;
54
+ }
55
+ e.preventDefault();
56
+ e.stopPropagation();
57
+ if (!this._value) {
58
+ return;
59
+ }
60
+ if (this.currentYear === null || this.currentYear === undefined) {
61
+ this.currentYear = this.today.getFullYear();
62
+ }
63
+ if (this.currentMonth === null || this.currentMonth === undefined) {
64
+ this.currentMonth = this.today.getMonth();
65
+ }
66
+ if (e.deltaY > 0) {
67
+ if (this.currentMonth === 11) {
68
+ this.currentMonth = 0;
69
+ this.currentYear++;
70
+ }
71
+ else {
72
+ this.currentMonth++;
73
+ }
74
+ }
75
+ else {
76
+ if (this.currentMonth === 0) {
77
+ this.currentMonth = 11;
78
+ this.currentYear--;
79
+ }
80
+ else {
81
+ this.currentMonth--;
82
+ }
83
+ }
84
+ const newDate = new Date(this.currentYear, this.currentMonth, 1, 0, 0, 0);
85
+ if (!this.isMinInvalid(newDate) && !this.isMaxInvalid(newDate)) {
86
+ this.value = newDate;
87
+ }
88
+ };
89
+ this.scrollYear = (e) => {
90
+ if (this.showPicker) {
91
+ return;
92
+ }
93
+ e.preventDefault();
94
+ e.stopPropagation();
95
+ if (!this._value) {
96
+ return;
97
+ }
98
+ if (!this.currentYear) {
99
+ this.currentYear = this.today.getFullYear();
100
+ }
101
+ if (!this.currentMonth) {
102
+ this.currentMonth = this.today.getMonth();
103
+ }
104
+ if (e.deltaY > 0) {
105
+ this.currentYear++;
106
+ }
107
+ else {
108
+ this.currentYear--;
109
+ }
110
+ const newDate = new Date(this.currentYear, this.currentMonth, 1, 0, 0, 0);
111
+ if (!this.isMinInvalid(newDate) && !this.isMaxInvalid(newDate)) {
112
+ this.value = newDate;
113
+ }
114
+ };
115
+ this.setMonth = (month) => {
116
+ this.currentMonth = month;
117
+ if (!this.currentYear) {
118
+ this.currentYear = this.today.getFullYear();
119
+ }
120
+ const newDate = new Date(this.currentYear, this.currentMonth, 1, 0, 0, 0);
121
+ if (!this.isMinInvalid(newDate) && !this.isMaxInvalid(newDate)) {
122
+ this.value = newDate;
123
+ }
124
+ };
125
+ this.setYear = (year) => {
126
+ this.currentYear = year;
127
+ if (!this.currentMonth) {
128
+ this.currentMonth = this.today.getMonth();
129
+ }
130
+ const newDate = new Date(this.currentYear, this.currentMonth, 1, 0, 0, 0);
131
+ if (!this.isMinInvalid(newDate) && !this.isMaxInvalid(newDate)) {
132
+ this.value = newDate;
133
+ }
134
+ };
135
+ this.setToday = () => {
136
+ const today = new Date();
137
+ this.currentYear = today.getFullYear();
138
+ this.currentMonth = today.getMonth();
139
+ this.value = new Date(this.currentYear, this.currentMonth, 1, 0, 0, 0);
140
+ this.showPicker = false;
141
+ };
142
+ localeService.locale
143
+ .pipe(takeWhile((_) => this._alive))
144
+ .subscribe((locale) => {
145
+ this.locale = locale;
146
+ });
147
+ this.setDefaults();
148
+ }
149
+ get value() {
150
+ return this._value;
151
+ }
152
+ set value(v) {
153
+ if (v !== this._value) {
154
+ this._value = v;
155
+ this.onChange(v);
156
+ }
157
+ }
158
+ get currentMonth() {
159
+ return this._currentMonth;
160
+ }
161
+ set currentMonth(v) {
162
+ if (v === null || v === undefined || v < 0 || v > 11) {
163
+ return;
164
+ }
165
+ if (v !== this._currentMonth) {
166
+ this._currentMonth = v;
167
+ }
168
+ }
169
+ get currentYear() {
170
+ return this._currentYear;
171
+ }
172
+ set currentYear(v) {
173
+ if (v !== this._currentYear) {
174
+ this._currentYear = v;
175
+ }
12
176
  }
13
- pickMonth(monthId) {
14
- this.selectMonth.emit(monthId);
177
+ writeValue(value) {
178
+ this._value = value;
179
+ this.initPicker(value);
15
180
  }
16
- pickYear(year) {
17
- this.changeYear.emit(year);
181
+ initPicker(date) {
182
+ if (!date || !(date instanceof Date)) {
183
+ this.setDefaults();
184
+ }
185
+ else {
186
+ this.currentMonth = date.getMonth();
187
+ this.currentYear = date.getFullYear();
188
+ }
189
+ this._cdr.markForCheck();
190
+ }
191
+ setDefaults() {
192
+ this.today = new Date();
193
+ this.currentMonth = null;
194
+ this.currentYear = null;
195
+ }
196
+ clearPicker() {
197
+ this.value = null;
198
+ }
199
+ registerOnChange(fn) {
200
+ this.onChange = fn;
201
+ }
202
+ registerOnTouched(fn) {
203
+ this.onTouched = fn;
18
204
  }
19
205
  ngOnInit() {
20
- this.months = this.localeMoths.get(this.locale).map((m, i) => {
21
- return {
22
- id: i,
23
- name: m,
24
- isSelected: this.selectedMonth === i
25
- };
26
- });
206
+ if (!this.minDate || !(this.minDate instanceof Date)) {
207
+ this.minDate = new Date('1900-01-01T00:00:00Z');
208
+ }
209
+ if (!this.maxDate || !(this.maxDate instanceof Date)) {
210
+ this.maxDate = new Date('2100-12-31T00:00:00Z');
211
+ }
212
+ this.initPicker(this.value);
213
+ }
214
+ ngOnDestroy() {
215
+ this._alive = false;
216
+ }
217
+ setMode(mode) {
218
+ let result;
219
+ if (mode === this.displayMode || mode === DatePickerMode.month) {
220
+ result = DatePickerMode.month;
221
+ }
222
+ else {
223
+ result = mode;
224
+ }
225
+ this.displayMode = result;
27
226
  }
28
227
  }
29
- MonthPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: MonthPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
30
- MonthPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: MonthPickerComponent, selector: "teta-month-picker", inputs: { locale: "locale", selectedMonth: "selectedMonth", viewType: "viewType", currentYear: "currentYear", localeMoths: "localeMoths" }, outputs: { selectMonth: "selectMonth", changeYear: "changeYear" }, ngImport: i0, template: "<div class=\"padding-h-3 padding-v-2 gap-8 column datepicker-month-wrapper\">\n <div class=\"row align-center justify-content-between font-button-2\">\n <teta-button [class]=\"'change-month-button datepicker_'+viewType\" [square]=\"true\"\n (click)=\"pickYear(currentYear-1)\"\n palette=\"text\"\n view=\"ghost\">\n <teta-icon name=\"arrowLeftKey\"></teta-icon>\n </teta-button>\n <p>{{currentYear}}</p>\n <teta-button [square]=\"true\" [class]=\"'change-month-button datepicker_'+viewType\"\n (click)=\"pickYear(currentYear+1)\"\n palette=\"text\"\n view=\"ghost\">\n <teta-icon name=\"arrowRightKey\"></teta-icon>\n </teta-button>\n </div>\n <div class=\"datepicker-month font-body-3 color-text-90\"\n style=\"width: 100%\">\n <div *ngFor=\"let month of months\" (click)=\"pickMonth(month.id)\">\n <div [ngClass]=\"{'datepicker-month_item_active':month.isSelected}\"\n [class]=\"'datepicker-month_item column align-center justify-content-center datepicker_'+viewType\">\n <p>\n {{month.name}}\n </p>\n </div>\n </div>\n </div>\n</div>\n\n\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2.ButtonComponent, selector: "button[teta-button], teta-button", inputs: ["palette", "class", "view", "square", "viewType", "size"] }, { kind: "component", type: i3.IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
228
+ MonthPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: MonthPickerComponent, deps: [{ token: i1.TetaConfigService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
229
+ MonthPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: MonthPickerComponent, selector: "teta-month-picker", inputs: { disabled: "disabled", minDate: "minDate", maxDate: "maxDate", showToday: "showToday", appendToBody: "appendToBody" }, host: { properties: { "class.datepicker_open": "this.showPicker", "class.datepicker": "this.classDatepicker", "tabindex": "this.tabindex" } }, providers: [MONTH_PICKER_CONTROL_VALUE_ACCESSOR], ngImport: i0, template: "<teta-dropdown\n class=\"row row_auto\"\n [appendToBody]=\"appendToBody\"\n [autoCloseIgnore]=\"['esc', 'inside']\"\n [(open)]=\"showPicker\"\n [disabled]=\"disabled\">\n <div tetaDropdownHead\n (wheel)=\"scrollMonth($event)\"\n class=\"datepicker-head font-body-3\">\n <teta-icon [name]=\"'calendar'\" class=\"margin-right-2\"></teta-icon>\n <div class=\"row_auto\">\n <ng-container *ngIf=\"_value !==null && _value!==undefined\">\n {{locale.months[_value.getMonth()]}} {{_value.getFullYear()}}\n </ng-container>\n </div>\n <teta-icon [name]=\"'closeBig'\" (click)=\"clearPicker()\" class=\"margin-left-2\"></teta-icon>\n </div>\n <teta-scrollable tetaDropdownContent class=\"padding-3\">\n <div class=\"row align-center justify-content-between\">\n <div>\n <button teta-button\n type=\"button\"\n [palette]=\"'text'\"\n [view]=\"displayMode===datePickerModeEnum.month ? 'primary' : 'ghost'\"\n (click)=\"setMode(datePickerModeEnum.month)\"\n (wheel)=\"scrollMonth($event);\">\n {{locale.months[_currentMonth || today.getMonth()]}}\n </button>\n <button teta-button\n type=\"button\"\n class=\"margin-left-2\"\n [palette]=\"'text'\"\n [view]=\"displayMode===datePickerModeEnum.year ? 'primary' : 'ghost'\"\n (click)=\"setMode(datePickerModeEnum.year)\"\n (wheel)=\"scrollYear($event);\">\n {{_currentYear || today.getFullYear()}}\n </button>\n </div>\n <button teta-button\n type=\"button\"\n [palette]=\"'text'\"\n [view]=\"'ghost'\"\n (click)=\"setToday()\">\n <teta-icon [name]=\"'calendar'\"></teta-icon>\n </button>\n </div>\n <div class=\"datepicker-content\">\n <teta-year-select\n *ngIf=\"displayMode === datePickerModeEnum.year\"\n [currentYear]=\"_currentYear\"\n [today]=\"today\"\n [size]=\"8\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (yearSelected)=\"setYear($event)\">\n </teta-year-select>\n <teta-month-select\n *ngIf=\"displayMode === datePickerModeEnum.month\"\n [currentMonth]=\"_currentMonth\"\n [locale]=\"locale\"\n [currentYear]=\"_currentYear\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (monthSelected)=\"setMonth($event)\">\n </teta-month-select>\n </div>\n </teta-scrollable>\n</teta-dropdown>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.DropdownComponent, selector: "teta-dropdown", exportAs: ["dropdown"] }, { kind: "directive", type: i4.DropdownHeadDirective, selector: "[tetaDropdownHead]" }, { kind: "directive", type: i5.DropdownContentDirective, selector: "[tetaDropdownContent]" }, { kind: "component", type: i6.IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "component", type: i7.ButtonComponent, selector: "button[teta-button], teta-button", inputs: ["palette", "class", "view", "square"] }, { kind: "component", type: i8.ScrollableComponent, selector: "teta-scrollable", inputs: ["direction", "showScrollbars", "contentClass"], outputs: ["scroll"] }, { kind: "component", type: i9.YearSelectComponent, selector: "teta-year-select", inputs: ["currentYear", "today", "size", "minDate", "maxDate", "allowableRange"], outputs: ["yearSelected", "yearApplied"] }, { kind: "component", type: i10.MonthSelectComponent, selector: "teta-month-select", inputs: ["locale", "minDate", "maxDate", "size", "currentMonth", "currentYear"], outputs: ["monthSelected", "monthApplied"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
31
230
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: MonthPickerComponent, decorators: [{
32
231
  type: Component,
33
- args: [{ selector: 'teta-month-picker', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"padding-h-3 padding-v-2 gap-8 column datepicker-month-wrapper\">\n <div class=\"row align-center justify-content-between font-button-2\">\n <teta-button [class]=\"'change-month-button datepicker_'+viewType\" [square]=\"true\"\n (click)=\"pickYear(currentYear-1)\"\n palette=\"text\"\n view=\"ghost\">\n <teta-icon name=\"arrowLeftKey\"></teta-icon>\n </teta-button>\n <p>{{currentYear}}</p>\n <teta-button [square]=\"true\" [class]=\"'change-month-button datepicker_'+viewType\"\n (click)=\"pickYear(currentYear+1)\"\n palette=\"text\"\n view=\"ghost\">\n <teta-icon name=\"arrowRightKey\"></teta-icon>\n </teta-button>\n </div>\n <div class=\"datepicker-month font-body-3 color-text-90\"\n style=\"width: 100%\">\n <div *ngFor=\"let month of months\" (click)=\"pickMonth(month.id)\">\n <div [ngClass]=\"{'datepicker-month_item_active':month.isSelected}\"\n [class]=\"'datepicker-month_item column align-center justify-content-center datepicker_'+viewType\">\n <p>\n {{month.name}}\n </p>\n </div>\n </div>\n </div>\n</div>\n\n\n" }]
34
- }], ctorParameters: function () { return []; }, propDecorators: { locale: [{
232
+ args: [{ selector: 'teta-month-picker', providers: [MONTH_PICKER_CONTROL_VALUE_ACCESSOR], changeDetection: ChangeDetectionStrategy.OnPush, template: "<teta-dropdown\n class=\"row row_auto\"\n [appendToBody]=\"appendToBody\"\n [autoCloseIgnore]=\"['esc', 'inside']\"\n [(open)]=\"showPicker\"\n [disabled]=\"disabled\">\n <div tetaDropdownHead\n (wheel)=\"scrollMonth($event)\"\n class=\"datepicker-head font-body-3\">\n <teta-icon [name]=\"'calendar'\" class=\"margin-right-2\"></teta-icon>\n <div class=\"row_auto\">\n <ng-container *ngIf=\"_value !==null && _value!==undefined\">\n {{locale.months[_value.getMonth()]}} {{_value.getFullYear()}}\n </ng-container>\n </div>\n <teta-icon [name]=\"'closeBig'\" (click)=\"clearPicker()\" class=\"margin-left-2\"></teta-icon>\n </div>\n <teta-scrollable tetaDropdownContent class=\"padding-3\">\n <div class=\"row align-center justify-content-between\">\n <div>\n <button teta-button\n type=\"button\"\n [palette]=\"'text'\"\n [view]=\"displayMode===datePickerModeEnum.month ? 'primary' : 'ghost'\"\n (click)=\"setMode(datePickerModeEnum.month)\"\n (wheel)=\"scrollMonth($event);\">\n {{locale.months[_currentMonth || today.getMonth()]}}\n </button>\n <button teta-button\n type=\"button\"\n class=\"margin-left-2\"\n [palette]=\"'text'\"\n [view]=\"displayMode===datePickerModeEnum.year ? 'primary' : 'ghost'\"\n (click)=\"setMode(datePickerModeEnum.year)\"\n (wheel)=\"scrollYear($event);\">\n {{_currentYear || today.getFullYear()}}\n </button>\n </div>\n <button teta-button\n type=\"button\"\n [palette]=\"'text'\"\n [view]=\"'ghost'\"\n (click)=\"setToday()\">\n <teta-icon [name]=\"'calendar'\"></teta-icon>\n </button>\n </div>\n <div class=\"datepicker-content\">\n <teta-year-select\n *ngIf=\"displayMode === datePickerModeEnum.year\"\n [currentYear]=\"_currentYear\"\n [today]=\"today\"\n [size]=\"8\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (yearSelected)=\"setYear($event)\">\n </teta-year-select>\n <teta-month-select\n *ngIf=\"displayMode === datePickerModeEnum.month\"\n [currentMonth]=\"_currentMonth\"\n [locale]=\"locale\"\n [currentYear]=\"_currentYear\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n (monthSelected)=\"setMonth($event)\">\n </teta-month-select>\n </div>\n </teta-scrollable>\n</teta-dropdown>\n" }]
233
+ }], ctorParameters: function () { return [{ type: i1.TetaConfigService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { disabled: [{
35
234
  type: Input
36
- }], selectedMonth: [{
235
+ }], minDate: [{
37
236
  type: Input
38
- }], viewType: [{
237
+ }], maxDate: [{
39
238
  type: Input
40
- }], currentYear: [{
239
+ }], showToday: [{
41
240
  type: Input
42
- }], localeMoths: [{
241
+ }], appendToBody: [{
43
242
  type: Input
44
- }], selectMonth: [{
45
- type: Output
46
- }], changeYear: [{
47
- type: Output
243
+ }], showPicker: [{
244
+ type: HostBinding,
245
+ args: ['class.datepicker_open']
246
+ }], classDatepicker: [{
247
+ type: HostBinding,
248
+ args: ['class.datepicker']
249
+ }], tabindex: [{
250
+ type: HostBinding,
251
+ args: ['tabindex']
48
252
  }] } });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udGgtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvZGF0ZS1waWNrZXIvbW9udGgtcGlja2VyL21vbnRoLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L2RhdGUtcGlja2VyL21vbnRoLXBpY2tlci9tb250aC1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFVdEcsTUFBTSxPQUFPLG9CQUFvQjtJQVUvQjtRQVJTLGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBSXpCLGdCQUFXLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUE7UUFDOUQsZUFBVSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFBO1FBQ2hFLFdBQU0sR0FBbUIsRUFBRSxDQUFDO0lBR25DLENBQUM7SUFFRCxTQUFTLENBQUMsT0FBZTtRQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNoQyxDQUFDO0lBRUQsUUFBUSxDQUFDLElBQVk7UUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDNUIsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDMUQsT0FBTztnQkFDTCxFQUFFLEVBQUUsQ0FBQztnQkFDTCxJQUFJLEVBQUUsQ0FBQztnQkFDUCxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsS0FBSyxDQUFDO2FBQ3JDLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7O2lIQTdCVSxvQkFBb0I7cUdBQXBCLG9CQUFvQix3UUNWakMsNnNDQThCQTsyRkRwQmEsb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNFLG1CQUFtQixtQkFHWix1QkFBdUIsQ0FBQyxNQUFNOzBFQUd0QyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SUlkTmFtZX0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWlkLW5hbWVcIjtcbmltcG9ydCB7dmlld1R5cGV9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vbW9kZWwvdmlldy10eXBlLm1vZGVsXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtbW9udGgtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vbnRoLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21vbnRoLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNb250aFBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGxvY2FsZTogc3RyaW5nO1xuICBASW5wdXQoKSBzZWxlY3RlZE1vbnRoOiBudW1iZXIgPSAxO1xuICBASW5wdXQoKSB2aWV3VHlwZTogdmlld1R5cGU7XG4gIEBJbnB1dCgpIGN1cnJlbnRZZWFyOiBudW1iZXI7XG4gIEBJbnB1dCgpIGxvY2FsZU1vdGhzOk1hcDxzdHJpbmcsc3RyaW5nW10+XG4gIEBPdXRwdXQoKSBzZWxlY3RNb250aDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKVxuICBAT3V0cHV0KCkgY2hhbmdlWWVhcjogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKVxuICBwdWJsaWMgbW9udGhzOiBJSWROYW1lPGFueT5bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICB9XG5cbiAgcGlja01vbnRoKG1vbnRoSWQ6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0TW9udGguZW1pdChtb250aElkKVxuICB9XG5cbiAgcGlja1llYXIoeWVhcjogbnVtYmVyKSB7XG4gICAgdGhpcy5jaGFuZ2VZZWFyLmVtaXQoeWVhcilcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubW9udGhzID0gdGhpcy5sb2NhbGVNb3Rocy5nZXQodGhpcy5sb2NhbGUpLm1hcCgobSxpKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogaSxcbiAgICAgICAgbmFtZTogbSxcbiAgICAgICAgaXNTZWxlY3RlZDogdGhpcy5zZWxlY3RlZE1vbnRoID09PSBpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwicGFkZGluZy1oLTMgcGFkZGluZy12LTIgZ2FwLTggY29sdW1uIGRhdGVwaWNrZXItbW9udGgtd3JhcHBlclwiPlxuICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBmb250LWJ1dHRvbi0yXCI+XG4gICAgPHRldGEtYnV0dG9uIFtjbGFzc109XCInY2hhbmdlLW1vbnRoLWJ1dHRvbiBkYXRlcGlja2VyXycrdmlld1R5cGVcIiBbc3F1YXJlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAoY2xpY2spPVwicGlja1llYXIoY3VycmVudFllYXItMSlcIlxuICAgICAgICAgICAgICAgICBwYWxldHRlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgIHZpZXc9XCJnaG9zdFwiPlxuICAgICAgPHRldGEtaWNvbiBuYW1lPVwiYXJyb3dMZWZ0S2V5XCI+PC90ZXRhLWljb24+XG4gICAgPC90ZXRhLWJ1dHRvbj5cbiAgICA8cD57e2N1cnJlbnRZZWFyfX08L3A+XG4gICAgPHRldGEtYnV0dG9uIFtzcXVhcmVdPVwidHJ1ZVwiIFtjbGFzc109XCInY2hhbmdlLW1vbnRoLWJ1dHRvbiBkYXRlcGlja2VyXycrdmlld1R5cGVcIlxuICAgICAgICAgICAgICAgICAoY2xpY2spPVwicGlja1llYXIoY3VycmVudFllYXIrMSlcIlxuICAgICAgICAgICAgICAgICBwYWxldHRlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgIHZpZXc9XCJnaG9zdFwiPlxuICAgICAgPHRldGEtaWNvbiBuYW1lPVwiYXJyb3dSaWdodEtleVwiPjwvdGV0YS1pY29uPlxuICAgIDwvdGV0YS1idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1tb250aCBmb250LWJvZHktMyBjb2xvci10ZXh0LTkwXCJcbiAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlXCI+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgbW9udGggb2YgbW9udGhzXCIgKGNsaWNrKT1cInBpY2tNb250aChtb250aC5pZClcIj5cbiAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydkYXRlcGlja2VyLW1vbnRoX2l0ZW1fYWN0aXZlJzptb250aC5pc1NlbGVjdGVkfVwiXG4gICAgICAgICAgIFtjbGFzc109XCInZGF0ZXBpY2tlci1tb250aF9pdGVtIGNvbHVtbiBhbGlnbi1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBkYXRlcGlja2VyXycrdmlld1R5cGVcIj5cbiAgICAgICAgIDxwPlxuICAgICAgICAgICAge3ttb250aC5uYW1lfX1cbiAgICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuXG4iXX0=
253
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udGgtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvZGF0ZS1waWNrZXIvbW9udGgtcGlja2VyL21vbnRoLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L2RhdGUtcGlja2VyL21vbnRoLXBpY2tlci9tb250aC1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEdBR04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF1QixpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7Ozs7OztBQUk5RCxNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBUTtJQUN0RCxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUM7SUFDbkQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBU0YsTUFBTSxPQUFPLG9CQUFvQjtJQTJEL0IsWUFDUyxhQUFnQyxFQUMvQixJQUF1QjtRQUR4QixrQkFBYSxHQUFiLGFBQWEsQ0FBbUI7UUFDL0IsU0FBSSxHQUFKLElBQUksQ0FBbUI7UUF4RHhCLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFHcUIsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDL0IsYUFBUSxHQUFHLENBQUMsQ0FBQztRQUV2RCx1QkFBa0IsR0FBRyxjQUFjLENBQUM7UUFLcEMsZ0JBQVcsR0FBbUIsY0FBYyxDQUFD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QUM7O2lIQXhQVSxvQkFBb0I7cUdBQXBCLG9CQUFvQiwyVEFIcEIsQ0FBQyxtQ0FBbUMsQ0FBQywwQkMxQmxELG9qRkFvRUE7MkZEdkNhLG9CQUFvQjtrQkFQaEMsU0FBUzsrQkFDRSxtQkFBbUIsYUFHbEIsQ0FBQyxtQ0FBbUMsQ0FBQyxtQkFDL0IsdUJBQXVCLENBQUMsTUFBTTt3SUFJdEMsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFZ0MsVUFBVTtzQkFBL0MsV0FBVzt1QkFBQyx1QkFBdUI7Z0JBQ2MsZUFBZTtzQkFBaEUsV0FBVzt1QkFBQyxrQkFBa0I7Z0JBQ1csUUFBUTtzQkFBakQsV0FBVzt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7dGFrZVdoaWxlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0RhdGVQaWNrZXJNb2RlfSBmcm9tICcuLi9tb2RlbC9kYXRlLXBpY2tlci1tb2RlLmVudW0nO1xuaW1wb3J0IHtUZXRhTG9jYWxpc2F0aW9ufSBmcm9tICcuLi8uLi8uLi9sb2NhbGUvdGV0YS1sb2NhbGlzYXRpb24nO1xuaW1wb3J0IHtUZXRhQ29uZmlnU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vbG9jYWxlL3RldGEtY29uZmlnLnNlcnZpY2UnO1xuXG5leHBvcnQgY29uc3QgTU9OVEhfUElDS0VSX0NPTlRST0xfVkFMVUVfQUNDRVNTT1I6IGFueSA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1vbnRoUGlja2VyQ29tcG9uZW50KSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLW1vbnRoLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb250aC1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tb250aC1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbTU9OVEhfUElDS0VSX0NPTlRST0xfVkFMVUVfQUNDRVNTT1JdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTW9udGhQaWNrZXJDb21wb25lbnRcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgbWluRGF0ZTogRGF0ZTtcbiAgQElucHV0KCkgbWF4RGF0ZTogRGF0ZTtcbiAgQElucHV0KCkgc2hvd1RvZGF5ID0gdHJ1ZTtcbiAgQElucHV0KCkgYXBwZW5kVG9Cb2R5ID0gdHJ1ZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRhdGVwaWNrZXJfb3BlbicpIHNob3dQaWNrZXI6IGJvb2xlYW47XG4gIEBIb3N0QmluZGluZygnY2xhc3MuZGF0ZXBpY2tlcicpIHByaXZhdGUgcmVhZG9ubHkgY2xhc3NEYXRlcGlja2VyID0gdHJ1ZTtcbiAgQEhvc3RCaW5kaW5nKCd0YWJpbmRleCcpIHByaXZhdGUgcmVhZG9ubHkgdGFiaW5kZXggPSAwO1xuXG4gIGRhdGVQaWNrZXJNb2RlRW51bSA9IERhdGVQaWNrZXJNb2RlO1xuXG4gIGxvY2FsZTogVGV0YUxvY2FsaXNhdGlvbjtcbiAgdG9kYXk6IERhdGU7XG5cbiAgZGlzcGxheU1vZGU6IERhdGVQaWNrZXJNb2RlID0gRGF0ZVBpY2tlck1vZGUubW9udGg7XG5cbiAgX3ZhbHVlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIF9jdXJyZW50TW9udGg6IG51bWJlciB8IG51bGw7XG4gIF9jdXJyZW50WWVhcjogbnVtYmVyIHwgbnVsbDtcblxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodjogYW55KSB7XG4gICAgaWYgKHYgIT09IHRoaXMuX3ZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHY7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHYpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBjdXJyZW50TW9udGgoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRNb250aDtcbiAgfVxuXG4gIHNldCBjdXJyZW50TW9udGgodjogbnVtYmVyIHwgbnVsbCkge1xuICAgIGlmICh2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCB8fCB2IDwgMCB8fCB2ID4gMTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHYgIT09IHRoaXMuX2N1cnJlbnRNb250aCkge1xuICAgICAgdGhpcy5fY3VycmVudE1vbnRoID0gdjtcbiAgICB9XG4gIH1cblxuICBnZXQgY3VycmVudFllYXIoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRZZWFyO1xuICB9XG5cbiAgc2V0IGN1cnJlbnRZZWFyKHY6IG51bWJlciB8IG51bGwpIHtcbiAgICBpZiAodiAhPT0gdGhpcy5fY3VycmVudFllYXIpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRZZWFyID0gdjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9hbGl2ZSA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGxvY2FsZVNlcnZpY2U6IFRldGFDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgbG9jYWxlU2VydmljZS5sb2NhbGVcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgobG9jYWxlOiBUZXRhTG9jYWxpc2F0aW9uKSA9PiB7XG4gICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlO1xuICAgICAgfSk7XG4gICAgdGhpcy5zZXREZWZhdWx0cygpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmluaXRQaWNrZXIodmFsdWUpO1xuICB9XG5cbiAgaW5pdFBpY2tlcihkYXRlOiBEYXRlKSB7XG4gICAgaWYgKCFkYXRlIHx8ICEoZGF0ZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICB0aGlzLnNldERlZmF1bHRzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuICAgICAgdGhpcy5jdXJyZW50WWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgc2V0RGVmYXVsdHMoKSB7XG4gICAgdGhpcy50b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgdGhpcy5jdXJyZW50TW9udGggPSBudWxsO1xuICAgIHRoaXMuY3VycmVudFllYXIgPSBudWxsO1xuICB9XG5cbiAgY2xlYXJQaWNrZXIoKSB7XG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gIH1cblxuICBvbkNoYW5nZSA9IChfOiBhbnkpID0+IHtcbiAgfTtcblxuICBvblRvdWNoZWQgPSAoKSA9PiB7XG4gIH07XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF86IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICghdGhpcy5taW5EYXRlIHx8ICEodGhpcy5taW5EYXRlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgIHRoaXMubWluRGF0ZSA9IG5ldyBEYXRlKCcxOTAwLTAxLTAxVDAwOjAwOjAwWicpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMubWF4RGF0ZSB8fCAhKHRoaXMubWF4RGF0ZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICB0aGlzLm1heERhdGUgPSBuZXcgRGF0ZSgnMjEwMC0xMi0zMVQwMDowMDowMFonKTtcbiAgICB9XG4gICAgdGhpcy5pbml0UGlja2VyKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fYWxpdmUgPSBmYWxzZTtcbiAgfVxuXG4gIGlzTWluSW52YWxpZCA9IChkYXQ6IERhdGUpOiBib29sZWFuID0+IHtcbiAgICBpZiAoIXRoaXMubWluRGF0ZSB8fCAhKHRoaXMubWluRGF0ZSBpbnN0YW5jZW9mIERhdGUpIHx8ICFkYXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbWluID0gbmV3IERhdGUoXG4gICAgICB0aGlzLm1pbkRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgIHRoaXMubWluRGF0ZS5nZXRNb250aCgpLFxuICAgICAgMVxuICAgICk7XG4gICAgcmV0dXJuIG1pbi5nZXRUaW1lKCkgPiBkYXQuZ2V0VGltZSgpO1xuICB9O1xuXG4gIGlzTWF4SW52YWxpZCA9IChkYXQ6IERhdGUpOiBib29sZWFuID0+IHtcbiAgICBpZiAoIXRoaXMubWF4RGF0ZSB8fCAhKHRoaXMubWF4RGF0ZSBpbnN0YW5jZW9mIERhdGUpIHx8ICFkYXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbWF4ID0gbmV3IERhdGUoXG4gICAgICB0aGlzLm1heERhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgIHRoaXMubWF4RGF0ZS5nZXRNb250aCgpLFxuICAgICAgMVxuICAgICk7XG4gICAgcmV0dXJuIG1heC5nZXRUaW1lKCkgPCBkYXQuZ2V0VGltZSgpO1xuICB9O1xuXG4gIHNjcm9sbE1vbnRoID0gKGU6IGFueSkgPT4ge1xuICAgIGlmICh0aGlzLnNob3dQaWNrZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCF0aGlzLl92YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5jdXJyZW50WWVhciA9PT0gbnVsbCB8fCB0aGlzLmN1cnJlbnRZZWFyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY3VycmVudFllYXIgPSB0aGlzLnRvZGF5LmdldEZ1bGxZZWFyKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmN1cnJlbnRNb250aCA9PT0gbnVsbCB8fCB0aGlzLmN1cnJlbnRNb250aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aCA9IHRoaXMudG9kYXkuZ2V0TW9udGgoKTtcbiAgICB9XG4gICAgaWYgKGUuZGVsdGFZID4gMCkge1xuICAgICAgaWYgKHRoaXMuY3VycmVudE1vbnRoID09PSAxMSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRNb250aCA9IDA7XG4gICAgICAgIHRoaXMuY3VycmVudFllYXIrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3VycmVudE1vbnRoKys7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRNb250aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRNb250aCA9IDExO1xuICAgICAgICB0aGlzLmN1cnJlbnRZZWFyLS07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmN1cnJlbnRNb250aC0tO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodGhpcy5jdXJyZW50WWVhciwgdGhpcy5jdXJyZW50TW9udGgsIDEsIDAsIDAsIDApO1xuICAgIGlmICghdGhpcy5pc01pbkludmFsaWQobmV3RGF0ZSkgJiYgIXRoaXMuaXNNYXhJbnZhbGlkKG5ld0RhdGUpKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbmV3RGF0ZTtcbiAgICB9XG4gIH07XG5cbiAgc2Nyb2xsWWVhciA9IChlOiBhbnkpID0+IHtcbiAgICBpZiAodGhpcy5zaG93UGlja2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICghdGhpcy5fdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRZZWFyKSB7XG4gICAgICB0aGlzLmN1cnJlbnRZZWFyID0gdGhpcy50b2RheS5nZXRGdWxsWWVhcigpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY3VycmVudE1vbnRoKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aCA9IHRoaXMudG9kYXkuZ2V0TW9udGgoKTtcbiAgICB9XG4gICAgaWYgKGUuZGVsdGFZID4gMCkge1xuICAgICAgdGhpcy5jdXJyZW50WWVhcisrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRZZWFyLS07XG4gICAgfVxuICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZSh0aGlzLmN1cnJlbnRZZWFyLCB0aGlzLmN1cnJlbnRNb250aCwgMSwgMCwgMCwgMCk7XG4gICAgaWYgKCF0aGlzLmlzTWluSW52YWxpZChuZXdEYXRlKSAmJiAhdGhpcy5pc01heEludmFsaWQobmV3RGF0ZSkpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBuZXdEYXRlO1xuICAgIH1cbiAgfTtcblxuICBzZXRNb250aCA9IChtb250aDogbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5jdXJyZW50TW9udGggPSBtb250aDtcbiAgICBpZiAoIXRoaXMuY3VycmVudFllYXIpIHtcbiAgICAgIHRoaXMuY3VycmVudFllYXIgPSB0aGlzLnRvZGF5LmdldEZ1bGxZZWFyKCk7XG4gICAgfVxuICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZSh0aGlzLmN1cnJlbnRZZWFyLCB0aGlzLmN1cnJlbnRNb250aCwgMSwgMCwgMCwgMCk7XG4gICAgaWYgKCF0aGlzLmlzTWluSW52YWxpZChuZXdEYXRlKSAmJiAhdGhpcy5pc01heEludmFsaWQobmV3RGF0ZSkpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBuZXdEYXRlO1xuICAgIH1cbiAgfTtcblxuICBzZXRZZWFyID0gKHllYXI6IG51bWJlcikgPT4ge1xuICAgIHRoaXMuY3VycmVudFllYXIgPSB5ZWFyO1xuICAgIGlmICghdGhpcy5jdXJyZW50TW9udGgpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gdGhpcy50b2RheS5nZXRNb250aCgpO1xuICAgIH1cbiAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodGhpcy5jdXJyZW50WWVhciwgdGhpcy5jdXJyZW50TW9udGgsIDEsIDAsIDAsIDApO1xuICAgIGlmICghdGhpcy5pc01pbkludmFsaWQobmV3RGF0ZSkgJiYgIXRoaXMuaXNNYXhJbnZhbGlkKG5ld0RhdGUpKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbmV3RGF0ZTtcbiAgICB9XG4gIH07XG5cbiAgc2V0VG9kYXkgPSAoKSA9PiB7XG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMuY3VycmVudFllYXIgPSB0b2RheS5nZXRGdWxsWWVhcigpO1xuICAgIHRoaXMuY3VycmVudE1vbnRoID0gdG9kYXkuZ2V0TW9udGgoKTtcbiAgICB0aGlzLnZhbHVlID0gbmV3IERhdGUodGhpcy5jdXJyZW50WWVhciwgdGhpcy5jdXJyZW50TW9udGgsIDEsIDAsIDAsIDApO1xuICAgIHRoaXMuc2hvd1BpY2tlciA9IGZhbHNlO1xuICB9O1xuXG4gIHNldE1vZGUobW9kZTogRGF0ZVBpY2tlck1vZGUpIHtcbiAgICBsZXQgcmVzdWx0OiBEYXRlUGlja2VyTW9kZTtcbiAgICBpZiAobW9kZSA9PT0gdGhpcy5kaXNwbGF5TW9kZSB8fCBtb2RlID09PSBEYXRlUGlja2VyTW9kZS5tb250aCkge1xuICAgICAgcmVzdWx0ID0gRGF0ZVBpY2tlck1vZGUubW9udGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IG1vZGU7XG4gICAgfVxuICAgIHRoaXMuZGlzcGxheU1vZGUgPSByZXN1bHQ7XG4gIH1cbn1cbiIsIjx0ZXRhLWRyb3Bkb3duXG4gIGNsYXNzPVwicm93IHJvd19hdXRvXCJcbiAgW2FwcGVuZFRvQm9keV09XCJhcHBlbmRUb0JvZHlcIlxuICBbYXV0b0Nsb3NlSWdub3JlXT1cIlsnZXNjJywgJ2luc2lkZSddXCJcbiAgWyhvcGVuKV09XCJzaG93UGlja2VyXCJcbiAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gIDxkaXYgdGV0YURyb3Bkb3duSGVhZFxuICAgICAgICh3aGVlbCk9XCJzY3JvbGxNb250aCgkZXZlbnQpXCJcbiAgICAgICBjbGFzcz1cImRhdGVwaWNrZXItaGVhZCBmb250LWJvZHktM1wiPlxuICAgIDx0ZXRhLWljb24gW25hbWVdPVwiJ2NhbGVuZGFyJ1wiIGNsYXNzPVwibWFyZ2luLXJpZ2h0LTJcIj48L3RldGEtaWNvbj5cbiAgICA8ZGl2IGNsYXNzPVwicm93X2F1dG9cIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfdmFsdWUgIT09bnVsbCAmJiBfdmFsdWUhPT11bmRlZmluZWRcIj5cbiAgICAgICAge3tsb2NhbGUubW9udGhzW192YWx1ZS5nZXRNb250aCgpXX19IHt7X3ZhbHVlLmdldEZ1bGxZZWFyKCl9fVxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPHRldGEtaWNvbiBbbmFtZV09XCInY2xvc2VCaWcnXCIgKGNsaWNrKT1cImNsZWFyUGlja2VyKClcIiBjbGFzcz1cIm1hcmdpbi1sZWZ0LTJcIj48L3RldGEtaWNvbj5cbiAgPC9kaXY+XG4gIDx0ZXRhLXNjcm9sbGFibGUgdGV0YURyb3Bkb3duQ29udGVudCBjbGFzcz1cInBhZGRpbmctM1wiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24tY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICA8ZGl2PlxuICAgICAgICA8YnV0dG9uIHRldGEtYnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW3BhbGV0dGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgICAgICBbdmlld109XCJkaXNwbGF5TW9kZT09PWRhdGVQaWNrZXJNb2RlRW51bS5tb250aCA/ICdwcmltYXJ5JyA6ICdnaG9zdCdcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRNb2RlKGRhdGVQaWNrZXJNb2RlRW51bS5tb250aClcIlxuICAgICAgICAgICAgICAgICh3aGVlbCk9XCJzY3JvbGxNb250aCgkZXZlbnQpO1wiPlxuICAgICAgICAgIHt7bG9jYWxlLm1vbnRoc1tfY3VycmVudE1vbnRoIHx8IHRvZGF5LmdldE1vbnRoKCldfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdGV0YS1idXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hcmdpbi1sZWZ0LTJcIlxuICAgICAgICAgICAgICAgIFtwYWxldHRlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgICAgW3ZpZXddPVwiZGlzcGxheU1vZGU9PT1kYXRlUGlja2VyTW9kZUVudW0ueWVhciA/ICdwcmltYXJ5JyA6ICdnaG9zdCdcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRNb2RlKGRhdGVQaWNrZXJNb2RlRW51bS55ZWFyKVwiXG4gICAgICAgICAgICAgICAgKHdoZWVsKT1cInNjcm9sbFllYXIoJGV2ZW50KTtcIj5cbiAgICAgICAgICB7e19jdXJyZW50WWVhciB8fCB0b2RheS5nZXRGdWxsWWVhcigpfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxidXR0b24gdGV0YS1idXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIFtwYWxldHRlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgIFt2aWV3XT1cIidnaG9zdCdcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2V0VG9kYXkoKVwiPlxuICAgICAgICA8dGV0YS1pY29uIFtuYW1lXT1cIidjYWxlbmRhcidcIj48L3RldGEtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkYXRlcGlja2VyLWNvbnRlbnRcIj5cbiAgICAgIDx0ZXRhLXllYXItc2VsZWN0XG4gICAgICAgICpuZ0lmPVwiZGlzcGxheU1vZGUgPT09IGRhdGVQaWNrZXJNb2RlRW51bS55ZWFyXCJcbiAgICAgICAgW2N1cnJlbnRZZWFyXT1cIl9jdXJyZW50WWVhclwiXG4gICAgICAgIFt0b2RheV09XCJ0b2RheVwiXG4gICAgICAgIFtzaXplXT1cIjhcIlxuICAgICAgICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcbiAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiXG4gICAgICAgICh5ZWFyU2VsZWN0ZWQpPVwic2V0WWVhcigkZXZlbnQpXCI+XG4gICAgICA8L3RldGEteWVhci1zZWxlY3Q+XG4gICAgICA8dGV0YS1tb250aC1zZWxlY3RcbiAgICAgICAgKm5nSWY9XCJkaXNwbGF5TW9kZSA9PT0gZGF0ZVBpY2tlck1vZGVFbnVtLm1vbnRoXCJcbiAgICAgICAgW2N1cnJlbnRNb250aF09XCJfY3VycmVudE1vbnRoXCJcbiAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICBbY3VycmVudFllYXJdPVwiX2N1cnJlbnRZZWFyXCJcbiAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgICAobW9udGhTZWxlY3RlZCk9XCJzZXRNb250aCgkZXZlbnQpXCI+XG4gICAgICA8L3RldGEtbW9udGgtc2VsZWN0PlxuICAgIDwvZGl2PlxuICA8L3RldGEtc2Nyb2xsYWJsZT5cbjwvdGV0YS1kcm9wZG93bj5cbiJdfQ==
@@ -0,0 +1,148 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
2
+ import { fromEvent } from 'rxjs';
3
+ import { takeWhile, tap } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../service/picker-touch.service";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "../../../pipe/prepend-zero/prepend-zero.pipe";
8
+ export class MonthSelectComponent {
9
+ constructor(_elementRef, _cdr, _pickerTouchService) {
10
+ this._elementRef = _elementRef;
11
+ this._cdr = _cdr;
12
+ this._pickerTouchService = _pickerTouchService;
13
+ this.size = 8;
14
+ this.monthSelected = new EventEmitter();
15
+ this.monthApplied = new EventEmitter();
16
+ this.months = [];
17
+ this.shift = 0;
18
+ this._alive = true;
19
+ this.scrollMonthSelector = (e) => {
20
+ e.preventDefault();
21
+ e.stopPropagation();
22
+ const step = e.deltaY > 0 ? 1 : -1;
23
+ this.shiftMonthSelector(step);
24
+ };
25
+ this.shiftMonthSelector = (step = 0) => {
26
+ this.shift += step;
27
+ this.makeMonths();
28
+ };
29
+ this.setMonth = (e, month) => {
30
+ e.preventDefault();
31
+ e.stopPropagation();
32
+ if (!this.isMonthDisabled(month)) {
33
+ this.shift = 0;
34
+ this.monthSelected.emit(month);
35
+ }
36
+ };
37
+ this.applyMonth = (e, month) => {
38
+ e.preventDefault();
39
+ e.stopPropagation();
40
+ if (!this.isMonthDisabled(month)) {
41
+ this.monthApplied.emit(month);
42
+ }
43
+ };
44
+ this.isMonthDisabled = (month) => {
45
+ if (!month && !this.currentYear) {
46
+ const dat = new Date(this.currentYear, month, 1);
47
+ return this.isMaxInvalid(dat) || this.isMinInvalid(dat);
48
+ }
49
+ return false;
50
+ };
51
+ this.isMinInvalid = (dat) => {
52
+ if (!this.minDate || !(this.minDate instanceof Date) || !dat) {
53
+ return false;
54
+ }
55
+ const min = new Date(this.minDate.getFullYear(), this.minDate.getMonth(), 1);
56
+ return min.getTime() > dat.getTime();
57
+ };
58
+ this.isMaxInvalid = (dat) => {
59
+ if (!this.maxDate || !(this.maxDate instanceof Date) || !dat) {
60
+ return false;
61
+ }
62
+ const max = new Date(this.maxDate.getFullYear(), this.maxDate.getMonth(), 1);
63
+ return max.getTime() < dat.getTime();
64
+ };
65
+ this.today = new Date();
66
+ this.today.setHours(0, 0, 0, 0);
67
+ }
68
+ set currentMonth(val) {
69
+ this._currentMonth = val;
70
+ this.makeMonths();
71
+ }
72
+ get currentMonth() {
73
+ return this._currentMonth;
74
+ }
75
+ set currentYear(val) {
76
+ this._currentYear = val;
77
+ }
78
+ get currentYear() {
79
+ return this._currentYear;
80
+ }
81
+ get _displayDate() {
82
+ let month = 0;
83
+ let year = 0;
84
+ if (this.currentMonth !== null &&
85
+ this.currentMonth !== undefined &&
86
+ this.currentMonth >= 0 &&
87
+ this.currentMonth <= 11) {
88
+ month = this.currentMonth;
89
+ }
90
+ if (this.currentYear !== null && this.currentYear !== undefined) {
91
+ year = this.currentYear;
92
+ }
93
+ return new Date(year, month, 1);
94
+ }
95
+ ngOnInit() {
96
+ }
97
+ ngOnDestroy() {
98
+ this._alive = false;
99
+ }
100
+ ngAfterViewInit() {
101
+ const touchMove$ = fromEvent(this._elementRef.nativeElement.parentElement, 'touchmove');
102
+ touchMove$
103
+ .pipe(takeWhile((_) => this._alive), tap((e) => {
104
+ if (e.type === 'touchmove') {
105
+ this._pickerTouchService.onTouchMove(e);
106
+ }
107
+ }))
108
+ .subscribe();
109
+ this._pickerTouchService.step
110
+ .pipe(takeWhile((_) => this._alive), tap((_) => {
111
+ this.shiftMonthSelector(_);
112
+ this._cdr.detectChanges();
113
+ }))
114
+ .subscribe();
115
+ }
116
+ makeMonths() {
117
+ const start = this._displayDate;
118
+ this.months = [];
119
+ start.setMonth(start.getMonth() - 3);
120
+ for (let i = this.shift; i < this.size + this.shift; i++) {
121
+ const dt = new Date(start.getFullYear(), start.getMonth() + i, 1);
122
+ this.months.push(dt.getMonth());
123
+ }
124
+ }
125
+ }
126
+ MonthSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: MonthSelectComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.PickerTouchService }], target: i0.ɵɵFactoryTarget.Component });
127
+ MonthSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: MonthSelectComponent, selector: "teta-month-select", inputs: { locale: "locale", minDate: "minDate", maxDate: "maxDate", size: "size", currentMonth: "currentMonth", currentYear: "currentYear" }, outputs: { monthSelected: "monthSelected", monthApplied: "monthApplied" }, ngImport: i0, template: "<div class=\"list row_auto margin-top-2\"\n (wheel)=\"scrollMonthSelector($event);\">\n <div *ngFor=\"let month of months\"\n class=\"list-item list-item_interactive\"\n [class.list-item_active]=\"month === _currentMonth\"\n [class.list-item_disabled]=\"isMonthDisabled(month)\"\n [class.datepicker__month__item_current]=\"month === today?.getMonth() && currentYear === today?.getFullYear()\"\n (click)=\"setMonth($event, month)\"\n (dblclick)=\"applyMonth($event, month)\">\n <span class=\"color-text-20 margin-right-2\">\n {{month + 1 | tetaPrependZero: 2}}\n </span>\n {{locale.months[month]}}\n </div>\n</div>\n", styles: [":host{display:flex}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i3.PrependZeroPipe, name: "tetaPrependZero" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
128
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: MonthSelectComponent, decorators: [{
129
+ type: Component,
130
+ args: [{ selector: 'teta-month-select', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"list row_auto margin-top-2\"\n (wheel)=\"scrollMonthSelector($event);\">\n <div *ngFor=\"let month of months\"\n class=\"list-item list-item_interactive\"\n [class.list-item_active]=\"month === _currentMonth\"\n [class.list-item_disabled]=\"isMonthDisabled(month)\"\n [class.datepicker__month__item_current]=\"month === today?.getMonth() && currentYear === today?.getFullYear()\"\n (click)=\"setMonth($event, month)\"\n (dblclick)=\"applyMonth($event, month)\">\n <span class=\"color-text-20 margin-right-2\">\n {{month + 1 | tetaPrependZero: 2}}\n </span>\n {{locale.months[month]}}\n </div>\n</div>\n", styles: [":host{display:flex}\n"] }]
131
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.PickerTouchService }]; }, propDecorators: { locale: [{
132
+ type: Input
133
+ }], minDate: [{
134
+ type: Input
135
+ }], maxDate: [{
136
+ type: Input
137
+ }], size: [{
138
+ type: Input
139
+ }], monthSelected: [{
140
+ type: Output
141
+ }], monthApplied: [{
142
+ type: Output
143
+ }], currentMonth: [{
144
+ type: Input
145
+ }], currentYear: [{
146
+ type: Input
147
+ }] } });
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udGgtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvZGF0ZS1waWNrZXIvbW9udGgtc2VsZWN0L21vbnRoLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L2RhdGUtcGlja2VyL21vbnRoLXNlbGVjdC9tb250aC1zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUMsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7OztBQVU5QyxNQUFNLE9BQU8sb0JBQW9CO0lBc0QvQixZQUNVLFdBQXVCLEVBQ3ZCLElBQXVCLEVBQ3ZCLG1CQUF1QztRQUZ2QyxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUN2Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQW9CO1FBckR4QyxTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ1Isa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQzNDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQTBCcEQsV0FBTSxHQUFhLEVBQUUsQ0FBQztRQUN0QixVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRUYsV0FBTSxHQUFHLElBQUksQ0FBQztRQStEdEIsd0JBQW1CLEdBQUcsQ0FBQyxDQUFhLEVBQUUsRUFBRTtZQUN0QyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBRXBCLE1BQU0sSUFBSSxHQUFHLENB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QU0sRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQzs7aUhBeEtVLG9CQUFvQjtxR0FBcEIsb0JBQW9CLGtSQ3ZCakMsaXFCQWVBOzJGRFFhLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDRSxtQkFBbUIsbUJBR1osdUJBQXVCLENBQUMsTUFBTTtrS0FHdEMsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFLSCxZQUFZO3NCQURmLEtBQUs7Z0JBYUYsV0FBVztzQkFEZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtmcm9tRXZlbnR9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHt0YWtlV2hpbGUsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtQaWNrZXJUb3VjaFNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2UvcGlja2VyLXRvdWNoLnNlcnZpY2UnO1xuaW1wb3J0IHtUZXRhTG9jYWxpc2F0aW9ufSBmcm9tICcuLi8uLi8uLi9sb2NhbGUvdGV0YS1sb2NhbGlzYXRpb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLW1vbnRoLXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb250aC1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tb250aC1zZWxlY3QuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1vbnRoU2VsZWN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBsb2NhbGU6IFRldGFMb2NhbGlzYXRpb247XG4gIEBJbnB1dCgpIG1pbkRhdGU6IERhdGU7XG4gIEBJbnB1dCgpIG1heERhdGU6IERhdGU7XG4gIEBJbnB1dCgpIHNpemUgPSA4O1xuICBAT3V0cHV0KCkgbW9udGhTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgbW9udGhBcHBsaWVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgX2N1cnJlbnRNb250aDogbnVtYmVyO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBjdXJyZW50TW9udGgodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLl9jdXJyZW50TW9udGggPSB2YWw7XG4gICAgdGhpcy5tYWtlTW9udGhzKCk7XG4gIH1cblxuICBnZXQgY3VycmVudE1vbnRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRNb250aDtcbiAgfVxuXG4gIF9jdXJyZW50WWVhcjogbnVtYmVyO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBjdXJyZW50WWVhcih2YWw6IG51bWJlcikge1xuICAgIHRoaXMuX2N1cnJlbnRZZWFyID0gdmFsO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRZZWFyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRZZWFyO1xuICB9XG5cbiAgdG9kYXk6IERhdGU7XG4gIG1vbnRoczogbnVtYmVyW10gPSBbXTtcbiAgc2hpZnQgPSAwO1xuXG4gIHByaXZhdGUgX2FsaXZlID0gdHJ1ZTtcblxuICBwcml2YXRlIGdldCBfZGlzcGxheURhdGUoKTogRGF0ZSB7XG4gICAgbGV0IG1vbnRoID0gMDtcbiAgICBsZXQgeWVhciA9IDA7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jdXJyZW50TW9udGggIT09IG51bGwgJiZcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoID49IDAgJiZcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoIDw9IDExXG4gICAgKSB7XG4gICAgICBtb250aCA9IHRoaXMuY3VycmVudE1vbnRoO1xuICAgIH1cbiAgICBpZiAodGhpcy5jdXJyZW50WWVhciAhPT0gbnVsbCAmJiB0aGlzLmN1cnJlbnRZZWFyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHllYXIgPSB0aGlzLmN1cnJlbnRZZWFyO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX3BpY2tlclRvdWNoU2VydmljZTogUGlja2VyVG91Y2hTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMudG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgIHRoaXMudG9kYXkuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2FsaXZlID0gZmFsc2U7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgY29uc3QgdG91Y2hNb3ZlJCA9IGZyb21FdmVudChcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LFxuICAgICAgJ3RvdWNobW92ZSdcbiAgICApO1xuXG4gICAgdG91Y2hNb3ZlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpLFxuICAgICAgICB0YXAoKGU6IFRvdWNoRXZlbnQpID0+IHtcbiAgICAgICAgICBpZiAoZS50eXBlID09PSAndG91Y2htb3ZlJykge1xuICAgICAgICAgICAgdGhpcy5fcGlja2VyVG91Y2hTZXJ2aWNlLm9uVG91Y2hNb3ZlKGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuX3BpY2tlclRvdWNoU2VydmljZS5zdGVwXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSksXG4gICAgICAgIHRhcCgoXykgPT4ge1xuICAgICAgICAgIHRoaXMuc2hpZnRNb250aFNlbGVjdG9yKF8pO1xuICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBzY3JvbGxNb250aFNlbGVjdG9yID0gKGU6IFdoZWVsRXZlbnQpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGNvbnN0IHN0ZXAgPSBlLmRlbHRhWSA+IDAgPyAxIDogLTE7XG4gICAgdGhpcy5zaGlmdE1vbnRoU2VsZWN0b3Ioc3RlcCk7XG4gIH07XG5cbiAgc2hpZnRNb250aFNlbGVjdG9yID0gKHN0ZXA6IG51bWJlciA9IDApID0+IHtcbiAgICB0aGlzLnNoaWZ0ICs9IHN0ZXA7XG4gICAgdGhpcy5tYWtlTW9udGhzKCk7XG4gIH07XG5cbiAgc2V0TW9udGggPSAoZTogYW55LCBtb250aDogbnVtYmVyKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCF0aGlzLmlzTW9udGhEaXNhYmxlZChtb250aCkpIHtcbiAgICAgIHRoaXMuc2hpZnQgPSAwO1xuICAgICAgdGhpcy5tb250aFNlbGVjdGVkLmVtaXQobW9udGgpO1xuICAgIH1cbiAgfTtcblxuICBhcHBseU1vbnRoID0gKGU6IGFueSwgbW9udGg6IG51bWJlcikgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICghdGhpcy5pc01vbnRoRGlzYWJsZWQobW9udGgpKSB7XG4gICAgICB0aGlzLm1vbnRoQXBwbGllZC5lbWl0KG1vbnRoKTtcbiAgICB9XG4gIH07XG5cbiAgaXNNb250aERpc2FibGVkID0gKG1vbnRoOiBudW1iZXIpID0+IHtcbiAgICBpZiAoIW1vbnRoICYmICF0aGlzLmN1cnJlbnRZZWFyKSB7XG4gICAgICBjb25zdCBkYXQgPSBuZXcgRGF0ZSh0aGlzLmN1cnJlbnRZZWFyLCBtb250aCwgMSk7XG4gICAgICByZXR1cm4gdGhpcy5pc01heEludmFsaWQoZGF0KSB8fCB0aGlzLmlzTWluSW52YWxpZChkYXQpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgaXNNaW5JbnZhbGlkID0gKGRhdDogRGF0ZSk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICghdGhpcy5taW5EYXRlIHx8ICEodGhpcy5taW5EYXRlIGluc3RhbmNlb2YgRGF0ZSkgfHwgIWRhdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBtaW4gPSBuZXcgRGF0ZShcbiAgICAgIHRoaXMubWluRGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgdGhpcy5taW5EYXRlLmdldE1vbnRoKCksXG4gICAgICAxXG4gICAgKTtcbiAgICByZXR1cm4gbWluLmdldFRpbWUoKSA+IGRhdC5nZXRUaW1lKCk7XG4gIH07XG5cbiAgaXNNYXhJbnZhbGlkID0gKGRhdDogRGF0ZSk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICghdGhpcy5tYXhEYXRlIHx8ICEodGhpcy5tYXhEYXRlIGluc3RhbmNlb2YgRGF0ZSkgfHwgIWRhdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBtYXggPSBuZXcgRGF0ZShcbiAgICAgIHRoaXMubWF4RGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgdGhpcy5tYXhEYXRlLmdldE1vbnRoKCksXG4gICAgICAxXG4gICAgKTtcbiAgICByZXR1cm4gbWF4LmdldFRpbWUoKSA8IGRhdC5nZXRUaW1lKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBtYWtlTW9udGhzKCkge1xuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5fZGlzcGxheURhdGU7XG4gICAgdGhpcy5tb250aHMgPSBbXTtcbiAgICBzdGFydC5zZXRNb250aChzdGFydC5nZXRNb250aCgpIC0gMyk7XG4gICAgZm9yIChsZXQgaSA9IHRoaXMuc2hpZnQ7IGkgPCB0aGlzLnNpemUgKyB0aGlzLnNoaWZ0OyBpKyspIHtcbiAgICAgIGNvbnN0IGR0ID0gbmV3IERhdGUoc3RhcnQuZ2V0RnVsbFllYXIoKSwgc3RhcnQuZ2V0TW9udGgoKSArIGksIDEpO1xuICAgICAgdGhpcy5tb250aHMucHVzaChkdC5nZXRNb250aCgpKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJsaXN0IHJvd19hdXRvIG1hcmdpbi10b3AtMlwiXG4gICAgICh3aGVlbCk9XCJzY3JvbGxNb250aFNlbGVjdG9yKCRldmVudCk7XCI+XG4gIDxkaXYgKm5nRm9yPVwibGV0IG1vbnRoIG9mIG1vbnRoc1wiXG4gICAgICAgY2xhc3M9XCJsaXN0LWl0ZW0gbGlzdC1pdGVtX2ludGVyYWN0aXZlXCJcbiAgICAgICBbY2xhc3MubGlzdC1pdGVtX2FjdGl2ZV09XCJtb250aCA9PT0gX2N1cnJlbnRNb250aFwiXG4gICAgICAgW2NsYXNzLmxpc3QtaXRlbV9kaXNhYmxlZF09XCJpc01vbnRoRGlzYWJsZWQobW9udGgpXCJcbiAgICAgICBbY2xhc3MuZGF0ZXBpY2tlcl9fbW9udGhfX2l0ZW1fY3VycmVudF09XCJtb250aCA9PT0gdG9kYXk/LmdldE1vbnRoKCkgJiYgY3VycmVudFllYXIgPT09IHRvZGF5Py5nZXRGdWxsWWVhcigpXCJcbiAgICAgICAoY2xpY2spPVwic2V0TW9udGgoJGV2ZW50LCBtb250aClcIlxuICAgICAgIChkYmxjbGljayk9XCJhcHBseU1vbnRoKCRldmVudCwgbW9udGgpXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJjb2xvci10ZXh0LTIwIG1hcmdpbi1yaWdodC0yXCI+XG4gICAgICB7e21vbnRoICsgMSB8IHRldGFQcmVwZW5kWmVybzogMn19XG4gICAgPC9zcGFuPlxuICAgIHt7bG9jYWxlLm1vbnRoc1ttb250aF19fVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -1,7 +1,6 @@
1
- export * from "./date-picker.module";
2
- export * from "./date-picker/date-picker.component";
3
- export * from './date-picker/date-calendar/date-calendar.component';
4
- export * from "./date-range/date-range.component";
5
- export * from './date-range/range-calendar/range-calendar.component';
1
+ export * from './date-picker.module';
2
+ export * from './date-picker/date-picker.component';
3
+ export * from './month-picker/month-picker.component';
4
+ export * from './day-select/day-select.component';
6
5
  export * from './model/date-period';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvZGF0ZS1waWNrZXIvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBZSxxREFBcUQsQ0FBQTtBQUNwRSxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsc0RBQXNELENBQUE7QUFDcEUsY0FBYyxxQkFBcUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2RhdGUtcGlja2VyLm1vZHVsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50XCI7XG5leHBvcnQgKiBmcm9tICAnLi9kYXRlLXBpY2tlci9kYXRlLWNhbGVuZGFyL2RhdGUtY2FsZW5kYXIuY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSBcIi4vZGF0ZS1yYW5nZS9kYXRlLXJhbmdlLmNvbXBvbmVudFwiO1xuZXhwb3J0ICogZnJvbSAnLi9kYXRlLXJhbmdlL3JhbmdlLWNhbGVuZGFyL3JhbmdlLWNhbGVuZGFyLmNvbXBvbmVudCdcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWwvZGF0ZS1wZXJpb2QnXG4iXX0=
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnQvZGF0ZS1waWNrZXIvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RhdGUtcGlja2VyLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL21vbnRoLXBpY2tlci9tb250aC1waWNrZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZGF5LXNlbGVjdC9kYXktc2VsZWN0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL21vZGVsL2RhdGUtcGVyaW9kJztcbiJdfQ==
@@ -0,0 +1,34 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { bufferCount, tap, throttleTime } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ export class PickerTouchService {
6
+ constructor() {
7
+ this.touchMove$ = new Subject();
8
+ this.step$ = new Subject();
9
+ this.touchMove = this.touchMove$.asObservable();
10
+ this.step = this.step$.asObservable();
11
+ this.touchMove
12
+ .pipe(throttleTime(25), bufferCount(2), tap((touches) => {
13
+ const [start, end] = touches.map((_) => _.changedTouches?.item(0));
14
+ const deltaY = start?.clientY - end?.clientY;
15
+ if (deltaY !== 0) {
16
+ const step = deltaY > 0 ? 1 : -1;
17
+ this.step$.next(step);
18
+ }
19
+ }))
20
+ .subscribe();
21
+ }
22
+ onTouchMove(event) {
23
+ this.touchMove$.next(event);
24
+ }
25
+ }
26
+ PickerTouchService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PickerTouchService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
27
+ PickerTouchService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PickerTouchService, providedIn: 'root' });
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PickerTouchService, decorators: [{
29
+ type: Injectable,
30
+ args: [{
31
+ providedIn: 'root',
32
+ }]
33
+ }], ctorParameters: function () { return []; } });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2VyLXRvdWNoLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L2RhdGUtcGlja2VyL3NlcnZpY2UvcGlja2VyLXRvdWNoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUtoRSxNQUFNLE9BQU8sa0JBQWtCO0lBTzdCO1FBSFEsZUFBVSxHQUF3QixJQUFJLE9BQU8sRUFBYyxDQUFDO1FBQzVELFVBQUssR0FBb0IsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUdyRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXRDLElBQUksQ0FBQyxTQUFTO2FBQ1gsSUFBSSxDQUNILFlBQVksQ0FBQyxFQUFFLENBQUMsRUFDaEIsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUNkLEdBQUcsQ0FBQyxDQUFDLE9BQWlDLEVBQUUsRUFBRTtZQUN4QyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkUsTUFBTSxNQUFNLEdBQUcsS0FBSyxFQUFFLE9BQU8sR0FBRyxHQUFHLEVBQUUsT0FBTyxDQUFDO1lBQzdDLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDaEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdkI7UUFDSCxDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBaUI7UUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQzs7K0dBN0JVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07MkZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGJ1ZmZlckNvdW50LCB0YXAsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFBpY2tlclRvdWNoU2VydmljZSB7XG4gIHN0ZXA6IE9ic2VydmFibGU8bnVtYmVyPjtcblxuICBwcml2YXRlIHRvdWNoTW92ZTogT2JzZXJ2YWJsZTxUb3VjaEV2ZW50PjtcbiAgcHJpdmF0ZSB0b3VjaE1vdmUkOiBTdWJqZWN0PFRvdWNoRXZlbnQ+ID0gbmV3IFN1YmplY3Q8VG91Y2hFdmVudD4oKTtcbiAgcHJpdmF0ZSBzdGVwJDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMudG91Y2hNb3ZlID0gdGhpcy50b3VjaE1vdmUkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuc3RlcCA9IHRoaXMuc3RlcCQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgICB0aGlzLnRvdWNoTW92ZVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRocm90dGxlVGltZSgyNSksXG4gICAgICAgIGJ1ZmZlckNvdW50KDIpLFxuICAgICAgICB0YXAoKHRvdWNoZXM6IFtUb3VjaEV2ZW50LCBUb3VjaEV2ZW50XSkgPT4ge1xuICAgICAgICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IHRvdWNoZXMubWFwKChfKSA9PiBfLmNoYW5nZWRUb3VjaGVzPy5pdGVtKDApKTtcbiAgICAgICAgICBjb25zdCBkZWx0YVkgPSBzdGFydD8uY2xpZW50WSAtIGVuZD8uY2xpZW50WTtcbiAgICAgICAgICBpZiAoZGVsdGFZICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwID0gZGVsdGFZID4gMCA/IDEgOiAtMTtcbiAgICAgICAgICAgIHRoaXMuc3RlcCQubmV4dChzdGVwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBvblRvdWNoTW92ZShldmVudDogVG91Y2hFdmVudCkge1xuICAgIHRoaXMudG91Y2hNb3ZlJC5uZXh0KGV2ZW50KTtcbiAgfVxufVxuIl19