@festo-ui/angular 3.1.0-pre-20220203.2 → 3.1.0-pre-20220203.4

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 (231) hide show
  1. package/esm2020/festo-ui-angular.mjs +5 -0
  2. package/esm2020/index.mjs +18 -0
  3. package/esm2020/lib/components/breadcrumb/breadcrumb.component.mjs +23 -0
  4. package/esm2020/lib/components/buttons/button/button.component.mjs +41 -0
  5. package/esm2020/lib/components/buttons/link-button/link-button.component.mjs +33 -0
  6. package/esm2020/lib/components/chips/chip/chip.component.mjs +37 -0
  7. package/esm2020/lib/components/chips/chip-container/chip-container.component.mjs +16 -0
  8. package/esm2020/lib/components/click-outside.directive.mjs +28 -0
  9. package/esm2020/lib/components/components.module.mjs +155 -0
  10. package/esm2020/lib/components/loading-indicator/loading-indicator.component.mjs +16 -0
  11. package/esm2020/lib/components/modals/alert/alert.component.mjs +52 -0
  12. package/esm2020/lib/components/modals/confirm/confirm.component.mjs +67 -0
  13. package/esm2020/lib/components/modals/index.mjs +2 -0
  14. package/esm2020/lib/components/modals/modal.service.mjs +112 -0
  15. package/esm2020/lib/components/modals/modals.module.mjs +28 -0
  16. package/esm2020/lib/components/modals/prompt/prompt.component.mjs +102 -0
  17. package/esm2020/lib/components/pagination/pagination.component.mjs +55 -0
  18. package/esm2020/lib/components/popovers/legend/legend.component.mjs +42 -0
  19. package/esm2020/lib/components/popovers/legend/legend.directive.mjs +31 -0
  20. package/esm2020/lib/components/popovers/popover/popover.component.mjs +31 -0
  21. package/esm2020/lib/components/popovers/popover-content/popover-content.component.mjs +82 -0
  22. package/esm2020/lib/components/popovers/popover-content/popover-content.directive.mjs +39 -0
  23. package/esm2020/lib/components/popovers/popover-menu/popover-menu.component.mjs +68 -0
  24. package/esm2020/lib/components/popovers/popover-ref.mjs +25 -0
  25. package/esm2020/lib/components/popovers/popover.defaults.mjs +60 -0
  26. package/esm2020/lib/components/popovers/popover.models.mjs +23 -0
  27. package/esm2020/lib/components/popovers/popover.service.mjs +123 -0
  28. package/esm2020/lib/components/popovers/tooltip/tooltip.directive.mjs +94 -0
  29. package/esm2020/lib/components/progress/progress.component.mjs +20 -0
  30. package/esm2020/lib/components/scroll/index.mjs +2 -0
  31. package/esm2020/lib/components/scroll/scrollable.directive.mjs +72 -0
  32. package/esm2020/lib/components/search-input/search-input.component.mjs +150 -0
  33. package/esm2020/lib/components/snackbar/snackbar-container.component.mjs +21 -0
  34. package/esm2020/lib/components/snackbar/snackbar-container.directive.mjs +83 -0
  35. package/esm2020/lib/components/snackbar/snackbar.component.mjs +79 -0
  36. package/esm2020/lib/components/snackbar/snackbar.models.mjs +2 -0
  37. package/esm2020/lib/components/snackbar/snackbar.module.mjs +26 -0
  38. package/esm2020/lib/components/snackbar/snackbar.service.mjs +23 -0
  39. package/esm2020/lib/components/stepper/stepper.component.mjs +22 -0
  40. package/esm2020/lib/components/table-header-cell/table-header-cell.directive.mjs +58 -0
  41. package/esm2020/lib/components/tabs/tab-pane/tab-pane.component.mjs +31 -0
  42. package/esm2020/lib/components/tabs/tabs.component.mjs +355 -0
  43. package/esm2020/lib/content/content.module.mjs +20 -0
  44. package/esm2020/lib/content/icon/icon.component.mjs +17 -0
  45. package/esm2020/lib/festo-angular.module.mjs +58 -0
  46. package/esm2020/lib/forms/checkbox/checkbox.component.mjs +149 -0
  47. package/esm2020/lib/forms/color-indicator/color-indicator.component.mjs +68 -0
  48. package/esm2020/lib/forms/color-picker/color-helper.mjs +121 -0
  49. package/esm2020/lib/forms/color-picker/color-picker.component.mjs +273 -0
  50. package/esm2020/lib/forms/container-host.mjs +27 -0
  51. package/esm2020/lib/forms/date-picker/date-picker.component.mjs +199 -0
  52. package/esm2020/lib/forms/date-range-picker/date-range-picker.component.mjs +224 -0
  53. package/esm2020/lib/forms/forms.module.mjs +146 -0
  54. package/esm2020/lib/forms/radio/radio.component.mjs +346 -0
  55. package/esm2020/lib/forms/segment/segment-control/segment-control.component.mjs +52 -0
  56. package/esm2020/lib/forms/segment/segment.component.mjs +109 -0
  57. package/esm2020/lib/forms/select/chip-text.pipe.mjs +34 -0
  58. package/esm2020/lib/forms/select/select-option/select-option.component.mjs +22 -0
  59. package/esm2020/lib/forms/select/select.component.mjs +257 -0
  60. package/esm2020/lib/forms/slider/slider.component.mjs +110 -0
  61. package/esm2020/lib/forms/switch/switch.component.mjs +120 -0
  62. package/esm2020/lib/forms/text-area/text-area.component.mjs +180 -0
  63. package/esm2020/lib/forms/text-editor/text-editor.component.mjs +286 -0
  64. package/esm2020/lib/forms/text-input/text-input.component.mjs +183 -0
  65. package/esm2020/lib/forms/time-picker/time-picker-dropdown/time-picker-dropdown.component.mjs +89 -0
  66. package/esm2020/lib/forms/time-picker/time-picker.component.mjs +188 -0
  67. package/esm2020/lib/forms/unique-selection-dispatcher.mjs +39 -0
  68. package/esm2020/lib/forms/value-accessor-base.mjs +41 -0
  69. package/esm2020/lib/layout/layout.module.mjs +18 -0
  70. package/esm2020/lib/wrappers/flatpickr/flatpickr.component.mjs +59 -0
  71. package/fesm2015/{festo-ui-angular.js → festo-ui-angular.mjs} +317 -521
  72. package/fesm2015/festo-ui-angular.mjs.map +1 -0
  73. package/fesm2020/festo-ui-angular.mjs +5383 -0
  74. package/fesm2020/festo-ui-angular.mjs.map +1 -0
  75. package/package.json +31 -16
  76. package/scss/base/components/breadcrumb/breadcrumb.component.scss +0 -1
  77. package/scss/base/components/modals/prompt/prompt.component.scss +0 -1
  78. package/scss/base/components/popovers/legend/legend.component.scss +2 -2
  79. package/scss/base/components/popovers/popover/styles.scss +3 -3
  80. package/scss/base/components/popovers/popover-content/popover-content.component.scss +1 -1
  81. package/scss/base/components/scroll/scroll-story-helper.scss +1 -3
  82. package/scss/base/components/snackbar/snackbar.component.scss +1 -1
  83. package/scss/base/components/stepper/stepper.component.scss +16 -15
  84. package/scss/base/forms/color-picker/color-picker.component.scss +12 -12
  85. package/scss/base/forms/date-picker/date-picker.component.scss +1 -1
  86. package/scss/base/forms/date-range-picker/date-range-picker.component.scss +1 -1
  87. package/scss/base/forms/time-picker/time-picker-dropdown/time-picker-dropdown.component.scss +1 -1
  88. package/scss/styles.scss +2 -2
  89. package/bundles/festo-ui-angular.umd.js +0 -6429
  90. package/bundles/festo-ui-angular.umd.js.map +0 -1
  91. package/esm2015/festo-ui-angular.js +0 -5
  92. package/esm2015/festo-ui-angular.js.map +0 -1
  93. package/esm2015/index.js +0 -18
  94. package/esm2015/index.js.map +0 -1
  95. package/esm2015/lib/components/breadcrumb/breadcrumb.component.js +0 -27
  96. package/esm2015/lib/components/breadcrumb/breadcrumb.component.js.map +0 -1
  97. package/esm2015/lib/components/buttons/button/button.component.js +0 -46
  98. package/esm2015/lib/components/buttons/button/button.component.js.map +0 -1
  99. package/esm2015/lib/components/buttons/link-button/link-button.component.js +0 -38
  100. package/esm2015/lib/components/buttons/link-button/link-button.component.js.map +0 -1
  101. package/esm2015/lib/components/chips/chip/chip.component.js +0 -42
  102. package/esm2015/lib/components/chips/chip/chip.component.js.map +0 -1
  103. package/esm2015/lib/components/chips/chip-container/chip-container.component.js +0 -21
  104. package/esm2015/lib/components/chips/chip-container/chip-container.component.js.map +0 -1
  105. package/esm2015/lib/components/click-outside.directive.js +0 -28
  106. package/esm2015/lib/components/click-outside.directive.js.map +0 -1
  107. package/esm2015/lib/components/components.module.js +0 -155
  108. package/esm2015/lib/components/components.module.js.map +0 -1
  109. package/esm2015/lib/components/loading-indicator/loading-indicator.component.js +0 -21
  110. package/esm2015/lib/components/loading-indicator/loading-indicator.component.js.map +0 -1
  111. package/esm2015/lib/components/modals/alert/alert.component.js +0 -57
  112. package/esm2015/lib/components/modals/alert/alert.component.js.map +0 -1
  113. package/esm2015/lib/components/modals/confirm/confirm.component.js +0 -73
  114. package/esm2015/lib/components/modals/confirm/confirm.component.js.map +0 -1
  115. package/esm2015/lib/components/modals/index.js +0 -2
  116. package/esm2015/lib/components/modals/index.js.map +0 -1
  117. package/esm2015/lib/components/modals/modal.service.js +0 -91
  118. package/esm2015/lib/components/modals/modal.service.js.map +0 -1
  119. package/esm2015/lib/components/modals/modals.module.js +0 -28
  120. package/esm2015/lib/components/modals/modals.module.js.map +0 -1
  121. package/esm2015/lib/components/modals/prompt/prompt.component.js +0 -110
  122. package/esm2015/lib/components/modals/prompt/prompt.component.js.map +0 -1
  123. package/esm2015/lib/components/pagination/pagination.component.js +0 -60
  124. package/esm2015/lib/components/pagination/pagination.component.js.map +0 -1
  125. package/esm2015/lib/components/popovers/legend/legend.component.js +0 -46
  126. package/esm2015/lib/components/popovers/legend/legend.component.js.map +0 -1
  127. package/esm2015/lib/components/popovers/legend/legend.directive.js +0 -31
  128. package/esm2015/lib/components/popovers/legend/legend.directive.js.map +0 -1
  129. package/esm2015/lib/components/popovers/popover/popover.component.js +0 -35
  130. package/esm2015/lib/components/popovers/popover/popover.component.js.map +0 -1
  131. package/esm2015/lib/components/popovers/popover-content/popover-content.component.js +0 -86
  132. package/esm2015/lib/components/popovers/popover-content/popover-content.component.js.map +0 -1
  133. package/esm2015/lib/components/popovers/popover-content/popover-content.directive.js +0 -39
  134. package/esm2015/lib/components/popovers/popover-content/popover-content.directive.js.map +0 -1
  135. package/esm2015/lib/components/popovers/popover-menu/popover-menu.component.js +0 -72
  136. package/esm2015/lib/components/popovers/popover-menu/popover-menu.component.js.map +0 -1
  137. package/esm2015/lib/components/popovers/popover-ref.js +0 -25
  138. package/esm2015/lib/components/popovers/popover-ref.js.map +0 -1
  139. package/esm2015/lib/components/popovers/popover.defaults.js +0 -60
  140. package/esm2015/lib/components/popovers/popover.defaults.js.map +0 -1
  141. package/esm2015/lib/components/popovers/popover.models.js +0 -23
  142. package/esm2015/lib/components/popovers/popover.models.js.map +0 -1
  143. package/esm2015/lib/components/popovers/popover.service.js +0 -117
  144. package/esm2015/lib/components/popovers/popover.service.js.map +0 -1
  145. package/esm2015/lib/components/popovers/tooltip/tooltip.directive.js +0 -96
  146. package/esm2015/lib/components/popovers/tooltip/tooltip.directive.js.map +0 -1
  147. package/esm2015/lib/components/progress/progress.component.js +0 -23
  148. package/esm2015/lib/components/progress/progress.component.js.map +0 -1
  149. package/esm2015/lib/components/scroll/index.js +0 -2
  150. package/esm2015/lib/components/scroll/index.js.map +0 -1
  151. package/esm2015/lib/components/scroll/scrollable.directive.js +0 -73
  152. package/esm2015/lib/components/scroll/scrollable.directive.js.map +0 -1
  153. package/esm2015/lib/components/search-input/search-input.component.js +0 -155
  154. package/esm2015/lib/components/search-input/search-input.component.js.map +0 -1
  155. package/esm2015/lib/components/snackbar/snackbar-container.component.js +0 -26
  156. package/esm2015/lib/components/snackbar/snackbar-container.component.js.map +0 -1
  157. package/esm2015/lib/components/snackbar/snackbar-container.directive.js +0 -83
  158. package/esm2015/lib/components/snackbar/snackbar-container.directive.js.map +0 -1
  159. package/esm2015/lib/components/snackbar/snackbar.component.js +0 -85
  160. package/esm2015/lib/components/snackbar/snackbar.component.js.map +0 -1
  161. package/esm2015/lib/components/snackbar/snackbar.models.js +0 -2
  162. package/esm2015/lib/components/snackbar/snackbar.models.js.map +0 -1
  163. package/esm2015/lib/components/snackbar/snackbar.module.js +0 -26
  164. package/esm2015/lib/components/snackbar/snackbar.module.js.map +0 -1
  165. package/esm2015/lib/components/snackbar/snackbar.service.js +0 -23
  166. package/esm2015/lib/components/snackbar/snackbar.service.js.map +0 -1
  167. package/esm2015/lib/components/stepper/stepper.component.js +0 -28
  168. package/esm2015/lib/components/stepper/stepper.component.js.map +0 -1
  169. package/esm2015/lib/components/table-header-cell/table-header-cell.directive.js +0 -58
  170. package/esm2015/lib/components/table-header-cell/table-header-cell.directive.js.map +0 -1
  171. package/esm2015/lib/components/tabs/tab-pane/tab-pane.component.js +0 -35
  172. package/esm2015/lib/components/tabs/tab-pane/tab-pane.component.js.map +0 -1
  173. package/esm2015/lib/components/tabs/tabs.component.js +0 -362
  174. package/esm2015/lib/components/tabs/tabs.component.js.map +0 -1
  175. package/esm2015/lib/content/content.module.js +0 -24
  176. package/esm2015/lib/content/content.module.js.map +0 -1
  177. package/esm2015/lib/content/icon/icon.component.js +0 -23
  178. package/esm2015/lib/content/icon/icon.component.js.map +0 -1
  179. package/esm2015/lib/festo-angular.module.js +0 -58
  180. package/esm2015/lib/festo-angular.module.js.map +0 -1
  181. package/esm2015/lib/forms/checkbox/checkbox.component.js +0 -156
  182. package/esm2015/lib/forms/checkbox/checkbox.component.js.map +0 -1
  183. package/esm2015/lib/forms/color-indicator/color-indicator.component.js +0 -72
  184. package/esm2015/lib/forms/color-indicator/color-indicator.component.js.map +0 -1
  185. package/esm2015/lib/forms/color-picker/color-helper.js +0 -121
  186. package/esm2015/lib/forms/color-picker/color-helper.js.map +0 -1
  187. package/esm2015/lib/forms/color-picker/color-picker.component.js +0 -280
  188. package/esm2015/lib/forms/color-picker/color-picker.component.js.map +0 -1
  189. package/esm2015/lib/forms/container-host.js +0 -27
  190. package/esm2015/lib/forms/container-host.js.map +0 -1
  191. package/esm2015/lib/forms/date-picker/date-picker.component.js +0 -205
  192. package/esm2015/lib/forms/date-picker/date-picker.component.js.map +0 -1
  193. package/esm2015/lib/forms/date-range-picker/date-range-picker.component.js +0 -230
  194. package/esm2015/lib/forms/date-range-picker/date-range-picker.component.js.map +0 -1
  195. package/esm2015/lib/forms/forms.module.js +0 -146
  196. package/esm2015/lib/forms/forms.module.js.map +0 -1
  197. package/esm2015/lib/forms/radio/radio.component.js +0 -353
  198. package/esm2015/lib/forms/radio/radio.component.js.map +0 -1
  199. package/esm2015/lib/forms/segment/segment-control/segment-control.component.js +0 -58
  200. package/esm2015/lib/forms/segment/segment-control/segment-control.component.js.map +0 -1
  201. package/esm2015/lib/forms/segment/segment.component.js +0 -116
  202. package/esm2015/lib/forms/segment/segment.component.js.map +0 -1
  203. package/esm2015/lib/forms/select/chip-text.pipe.js +0 -34
  204. package/esm2015/lib/forms/select/chip-text.pipe.js.map +0 -1
  205. package/esm2015/lib/forms/select/select-option/select-option.component.js +0 -29
  206. package/esm2015/lib/forms/select/select-option/select-option.component.js.map +0 -1
  207. package/esm2015/lib/forms/select/select.component.js +0 -265
  208. package/esm2015/lib/forms/select/select.component.js.map +0 -1
  209. package/esm2015/lib/forms/slider/slider.component.js +0 -116
  210. package/esm2015/lib/forms/slider/slider.component.js.map +0 -1
  211. package/esm2015/lib/forms/switch/switch.component.js +0 -127
  212. package/esm2015/lib/forms/switch/switch.component.js.map +0 -1
  213. package/esm2015/lib/forms/text-area/text-area.component.js +0 -186
  214. package/esm2015/lib/forms/text-area/text-area.component.js.map +0 -1
  215. package/esm2015/lib/forms/text-editor/text-editor.component.js +0 -294
  216. package/esm2015/lib/forms/text-editor/text-editor.component.js.map +0 -1
  217. package/esm2015/lib/forms/text-input/text-input.component.js +0 -189
  218. package/esm2015/lib/forms/text-input/text-input.component.js.map +0 -1
  219. package/esm2015/lib/forms/time-picker/time-picker-dropdown/time-picker-dropdown.component.js +0 -103
  220. package/esm2015/lib/forms/time-picker/time-picker-dropdown/time-picker-dropdown.component.js.map +0 -1
  221. package/esm2015/lib/forms/time-picker/time-picker.component.js +0 -194
  222. package/esm2015/lib/forms/time-picker/time-picker.component.js.map +0 -1
  223. package/esm2015/lib/forms/unique-selection-dispatcher.js +0 -39
  224. package/esm2015/lib/forms/unique-selection-dispatcher.js.map +0 -1
  225. package/esm2015/lib/forms/value-accessor-base.js +0 -41
  226. package/esm2015/lib/forms/value-accessor-base.js.map +0 -1
  227. package/esm2015/lib/layout/layout.module.js +0 -18
  228. package/esm2015/lib/layout/layout.module.js.map +0 -1
  229. package/esm2015/lib/wrappers/flatpickr/flatpickr.component.js +0 -63
  230. package/esm2015/lib/wrappers/flatpickr/flatpickr.component.js.map +0 -1
  231. package/fesm2015/festo-ui-angular.js.map +0 -1
@@ -0,0 +1,183 @@
1
+ import { Component, Input, forwardRef, ViewChild, ElementRef, ViewEncapsulation } from '@angular/core';
2
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ /**
7
+ * A custom form element for text inputs.
8
+ */
9
+ export class TextInputComponent {
10
+ constructor() {
11
+ this.innerType = 'text';
12
+ this.innerReadonly = false;
13
+ this.innerDisabled = false;
14
+ this.innerRequired = false;
15
+ }
16
+ /**
17
+ * A string specifying the type of control to render.
18
+ */
19
+ get type() {
20
+ return this.innerType;
21
+ }
22
+ set type(value) {
23
+ const supported = ['text', 'number', 'password', 'date', 'time', 'datetime-local'];
24
+ if (value != null && supported.indexOf(value) !== -1) {
25
+ this.innerType = value;
26
+ }
27
+ else {
28
+ this.innerType = 'text';
29
+ }
30
+ }
31
+ get readonly() {
32
+ return this.innerReadonly;
33
+ }
34
+ set readonly(value) {
35
+ this.innerReadonly = coerceBooleanProperty(value);
36
+ }
37
+ /**
38
+ * When true the control's disabled attribute is set
39
+ * and it gets addeed the .disabled css class.
40
+ */
41
+ get disabled() {
42
+ return this.innerDisabled;
43
+ }
44
+ set disabled(value) {
45
+ this.innerDisabled = coerceBooleanProperty(value);
46
+ if (this.focused) {
47
+ this.focused = false;
48
+ }
49
+ }
50
+ /**
51
+ * The getter for value.
52
+ */
53
+ get value() {
54
+ return this.innerValue;
55
+ }
56
+ /**
57
+ * The setter for value.
58
+ */
59
+ set value(value) {
60
+ if (value != null) {
61
+ value = '' + value;
62
+ }
63
+ this.innerValue = value;
64
+ this.focused = !!value;
65
+ if (this.onChange != null) {
66
+ this.onChange(value);
67
+ }
68
+ if (this.onTouched != null) {
69
+ this.onTouched();
70
+ }
71
+ }
72
+ get required() {
73
+ return this.innerRequired;
74
+ }
75
+ set required(value) {
76
+ this.innerRequired = coerceBooleanProperty(value);
77
+ }
78
+ /**
79
+ * Called on component initialisation.
80
+ */
81
+ ngOnInit() {
82
+ this.onBlur();
83
+ }
84
+ /**
85
+ * Writes the value.
86
+ * @param value The value.
87
+ */
88
+ writeValue(value) {
89
+ if (value != null) {
90
+ value = '' + value;
91
+ }
92
+ this.innerValue = value;
93
+ this.focused = !!value;
94
+ }
95
+ /**
96
+ * Registers a function to onChange.
97
+ * @param fn The registered function.
98
+ */
99
+ registerOnChange(fn) {
100
+ this.onChange = fn;
101
+ }
102
+ /**
103
+ * Registers a function to onTouched.
104
+ * @param fn The registered function.
105
+ */
106
+ registerOnTouched(fn) {
107
+ this.onTouched = fn;
108
+ }
109
+ /**
110
+ * Called when the text input is in focus.
111
+ */
112
+ onFocus() {
113
+ this.focused = true;
114
+ }
115
+ onInput(event) {
116
+ this.value = event.target.value;
117
+ }
118
+ /**
119
+ * Called when the text input blurs.
120
+ */
121
+ onBlur() {
122
+ if (this.focused) {
123
+ this.focused = false;
124
+ }
125
+ }
126
+ /**
127
+ * Sets the disabled state.
128
+ * @param isDisabled When true the control is disabled
129
+ */
130
+ setDisabledState(isDisabled) {
131
+ this.disabled = isDisabled;
132
+ }
133
+ }
134
+ TextInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TextInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
135
+ TextInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: TextInputComponent, selector: "fng-text-input", inputs: { label: "label", type: "type", readonly: "readonly", step: "step", min: "min", max: "max", tabindex: "tabindex", placeholder: "placeholder", name: "name", disabled: "disabled", value: "value", required: "required", error: "error", hint: "hint" }, providers: [
136
+ {
137
+ provide: NG_VALUE_ACCESSOR,
138
+ useExisting: forwardRef(() => TextInputComponent),
139
+ multi: true
140
+ }
141
+ ], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true }], ngImport: i0, template: "<label class=\"fwe-input-text\" [class.fwe-no-pointer-events]=\"readonly === true\">\n <input\n #inputElement\n [disabled]=\"disabled\"\n [required]=\"required === true || null\"\n [attr.readonly]=\"readonly === true || null\"\n [attr.placeholder]=\"placeholder || null\"\n [attr.type]=\"type\"\n [attr.step]=\"step\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.name]=\"name || null\"\n [attr.tabindex]=\"tabindex\"\n [class.fng-has-value]=\"value != null && value !== ''\"\n autocomplete=\"off\"\n [value]=\"value\"\n (focus)=\"onFocus()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n />\n <span class=\"fwe-input-text-label\">{{ label }}</span>\n <span *ngIf=\"hint; else projectedHint\" class=\"fwe-input-text-info\">{{ hint }}</span>\n <span *ngIf=\"error; else projectedError\" class=\"fwe-input-text-invalid\">{{ error }}</span>\n\n <ng-template #projectedHint>\n <span class=\"fwe-input-text-info fng-projected\"><ng-content select=\".fng-hint\"></ng-content></span>\n </ng-template>\n\n <ng-template #projectedError>\n <span class=\"fwe-input-text-invalid fng-projected\"><ng-content select=\".fng-error\"></ng-content></span>\n </ng-template>\n</label>\n", styles: ["fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=text],fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=password],fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=date],fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=datetime-local],fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=number]{border-bottom:1px solid var(--fwe-red)!important;box-shadow:none;outline:none}fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=text]:focus,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=password]:focus,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=date]:focus,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=datetime-local]:focus,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=number]:focus{border-bottom:1px solid var(--fwe-red)!important}fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=text]:disabled,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=password]:disabled,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=date]:disabled,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=datetime-local]:disabled,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=number]:disabled{border-bottom:1px solid var(--fwe-control-disabled)!important}fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=text]:disabled~.fwe-input-text-label,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=text]:disabled~.fwe-input-text-invalid,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=text]:disabled~.fwe-input-text-info,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=password]:disabled~.fwe-input-text-label,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=password]:disabled~.fwe-input-text-invalid,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=password]:disabled~.fwe-input-text-info,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=date]:disabled~.fwe-input-text-label,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=date]:disabled~.fwe-input-text-invalid,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=date]:disabled~.fwe-input-text-info,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=datetime-local]:disabled~.fwe-input-text-label,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=datetime-local]:disabled~.fwe-input-text-invalid,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=datetime-local]:disabled~.fwe-input-text-info,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=number]:disabled~.fwe-input-text-label,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=number]:disabled~.fwe-input-text-invalid,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=number]:disabled~.fwe-input-text-info{color:var(--fwe-text-disabled)}fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text .fwe-input-text-info{display:none!important}fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text .fwe-input-text-invalid{display:block!important}fng-text-input.ng-valid label.fwe-input-text input[type=text]:hover:not(:disabled),fng-text-input.ng-valid label.fwe-input-text input[type=password]:hover:not(:disabled),fng-text-input.ng-valid label.fwe-input-text input[type=date]:hover:not(:disabled),fng-text-input.ng-valid label.fwe-input-text input[type=time]:hover:not(:disabled),fng-text-input.ng-valid label.fwe-input-text input[type=datetime-local]:hover:not(:disabled),fng-text-input.ng-valid label.fwe-input-text input[type=number]:hover:not(:disabled){border-bottom:1px solid var(--fwe-hero)!important}fng-text-input label.fwe-input-text.fwe-no-pointer-events{pointer-events:none!important}.fwe-input-text-invalid.fng-projected:empty{display:none}.fwe-input-text-info.fng-projected:empty{display:none}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
142
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TextInputComponent, decorators: [{
143
+ type: Component,
144
+ args: [{ selector: 'fng-text-input', providers: [
145
+ {
146
+ provide: NG_VALUE_ACCESSOR,
147
+ useExisting: forwardRef(() => TextInputComponent),
148
+ multi: true
149
+ }
150
+ ], encapsulation: ViewEncapsulation.None, template: "<label class=\"fwe-input-text\" [class.fwe-no-pointer-events]=\"readonly === true\">\n <input\n #inputElement\n [disabled]=\"disabled\"\n [required]=\"required === true || null\"\n [attr.readonly]=\"readonly === true || null\"\n [attr.placeholder]=\"placeholder || null\"\n [attr.type]=\"type\"\n [attr.step]=\"step\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n [attr.name]=\"name || null\"\n [attr.tabindex]=\"tabindex\"\n [class.fng-has-value]=\"value != null && value !== ''\"\n autocomplete=\"off\"\n [value]=\"value\"\n (focus)=\"onFocus()\"\n (input)=\"onInput($event)\"\n (blur)=\"onBlur()\"\n />\n <span class=\"fwe-input-text-label\">{{ label }}</span>\n <span *ngIf=\"hint; else projectedHint\" class=\"fwe-input-text-info\">{{ hint }}</span>\n <span *ngIf=\"error; else projectedError\" class=\"fwe-input-text-invalid\">{{ error }}</span>\n\n <ng-template #projectedHint>\n <span class=\"fwe-input-text-info fng-projected\"><ng-content select=\".fng-hint\"></ng-content></span>\n </ng-template>\n\n <ng-template #projectedError>\n <span class=\"fwe-input-text-invalid fng-projected\"><ng-content select=\".fng-error\"></ng-content></span>\n </ng-template>\n</label>\n", styles: ["fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=text],fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=password],fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=date],fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=datetime-local],fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=number]{border-bottom:1px solid var(--fwe-red)!important;box-shadow:none;outline:none}fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=text]:focus,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=password]:focus,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=date]:focus,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=datetime-local]:focus,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=number]:focus{border-bottom:1px solid var(--fwe-red)!important}fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=text]:disabled,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=password]:disabled,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=date]:disabled,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=datetime-local]:disabled,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=number]:disabled{border-bottom:1px solid var(--fwe-control-disabled)!important}fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=text]:disabled~.fwe-input-text-label,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=text]:disabled~.fwe-input-text-invalid,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=text]:disabled~.fwe-input-text-info,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=password]:disabled~.fwe-input-text-label,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=password]:disabled~.fwe-input-text-invalid,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=password]:disabled~.fwe-input-text-info,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=date]:disabled~.fwe-input-text-label,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=date]:disabled~.fwe-input-text-invalid,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=date]:disabled~.fwe-input-text-info,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=datetime-local]:disabled~.fwe-input-text-label,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=datetime-local]:disabled~.fwe-input-text-invalid,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=datetime-local]:disabled~.fwe-input-text-info,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=number]:disabled~.fwe-input-text-label,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=number]:disabled~.fwe-input-text-invalid,fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text input[type=number]:disabled~.fwe-input-text-info{color:var(--fwe-text-disabled)}fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text .fwe-input-text-info{display:none!important}fng-text-input:not(.ng-pristine).ng-invalid label.fwe-input-text .fwe-input-text-invalid{display:block!important}fng-text-input.ng-valid label.fwe-input-text input[type=text]:hover:not(:disabled),fng-text-input.ng-valid label.fwe-input-text input[type=password]:hover:not(:disabled),fng-text-input.ng-valid label.fwe-input-text input[type=date]:hover:not(:disabled),fng-text-input.ng-valid label.fwe-input-text input[type=time]:hover:not(:disabled),fng-text-input.ng-valid label.fwe-input-text input[type=datetime-local]:hover:not(:disabled),fng-text-input.ng-valid label.fwe-input-text input[type=number]:hover:not(:disabled){border-bottom:1px solid var(--fwe-hero)!important}fng-text-input label.fwe-input-text.fwe-no-pointer-events{pointer-events:none!important}.fwe-input-text-invalid.fng-projected:empty{display:none}.fwe-input-text-info.fng-projected:empty{display:none}\n"] }]
151
+ }], propDecorators: { label: [{
152
+ type: Input
153
+ }], type: [{
154
+ type: Input
155
+ }], readonly: [{
156
+ type: Input
157
+ }], step: [{
158
+ type: Input
159
+ }], min: [{
160
+ type: Input
161
+ }], max: [{
162
+ type: Input
163
+ }], tabindex: [{
164
+ type: Input
165
+ }], placeholder: [{
166
+ type: Input
167
+ }], name: [{
168
+ type: Input
169
+ }], disabled: [{
170
+ type: Input
171
+ }], value: [{
172
+ type: Input
173
+ }], required: [{
174
+ type: Input
175
+ }], error: [{
176
+ type: Input
177
+ }], hint: [{
178
+ type: Input
179
+ }], inputElement: [{
180
+ type: ViewChild,
181
+ args: ['inputElement']
182
+ }] } });
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL2xpYi9mb3Jtcy90ZXh0LWlucHV0L3RleHQtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvZm9ybXMvdGV4dC1pbnB1dC90ZXh0LWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7O0FBRTlEOztHQUVHO0FBY0gsTUFBTSxPQUFPLGtCQUFrQjtJQWIvQjtRQWtDWSxjQUFTLEdBQUcsTUFBTSxDQUFDO1FBU3JCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBd0JwQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQXVDdEIsa0JBQWEsR0FBRyxLQUFLLENBQUM7S0EyRmpDO0lBbExDOztPQUVHO0lBQ0gsSUFDSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLElBQUksQ0FBQyxLQUFhO1FBQ3BCLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ25GLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3BELElBQUksQ0FBQyxTQUFTLEdB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QjttR0FBbEIsa0JBQWtCLHlTQVRsQjtRQUNUO1lBQ0UsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDO1lBQ2pELEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRix3SUNqQkgsOHRDQWdDQTsyRkRaYSxrQkFBa0I7a0JBYjlCLFNBQVM7K0JBQ0UsZ0JBQWdCLGFBR2Y7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUM7NEJBQ2pELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGLGlCQUNjLGlCQUFpQixDQUFDLElBQUk7OEJBTTVCLEtBQUs7c0JBQWIsS0FBSztnQkFNRixJQUFJO3NCQURQLEtBQUs7Z0JBZUYsUUFBUTtzQkFEWCxLQUFLO2dCQVNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBT0YsUUFBUTtzQkFEWCxLQUFLO2dCQTZCRixLQUFLO3NCQURSLEtBQUs7Z0JBZ0JGLFFBQVE7c0JBRFgsS0FBSztnQkFZRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQUVxQixZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIGZvcndhcmRSZWYsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5cbi8qKlxuICogQSBjdXN0b20gZm9ybSBlbGVtZW50IGZvciB0ZXh0IGlucHV0cy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZm5nLXRleHQtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGV4dC1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RleHQtaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUZXh0SW5wdXRDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgVGV4dElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIC8qKlxuICAgKiBUaGUgdGV4dCBpbnB1dCBsYWJlbC5cbiAgICovXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHR5cGUgb2YgY29udHJvbCB0byByZW5kZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlubmVyVHlwZTtcbiAgfVxuICBzZXQgdHlwZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3VwcG9ydGVkID0gWyd0ZXh0JywgJ251bWJlcicsICdwYXNzd29yZCcsICdkYXRlJywgJ3RpbWUnLCAnZGF0ZXRpbWUtbG9jYWwnXTtcbiAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiBzdXBwb3J0ZWQuaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aGlzLmlubmVyVHlwZSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlubmVyVHlwZSA9ICd0ZXh0JztcbiAgICB9XG4gIH1cbiAgcHJvdGVjdGVkIGlubmVyVHlwZSA9ICd0ZXh0JztcblxuICBASW5wdXQoKVxuICBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXJSZWFkb25seTtcbiAgfVxuICBzZXQgcmVhZG9ubHkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlubmVyUmVhZG9ubHkgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgaW5uZXJSZWFkb25seSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHN0ZXA6IG51bWJlcjtcbiAgQElucHV0KCkgbWluOiBudW1iZXI7XG4gIEBJbnB1dCgpIG1heDogbnVtYmVyO1xuICBASW5wdXQoKSB0YWJpbmRleDogbnVtYmVyO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSB0aGUgY29udHJvbCdzIGRpc2FibGVkIGF0dHJpYnV0ZSBpcyBzZXRcbiAgICogYW5kIGl0IGdldHMgYWRkZWVkIHRoZSAuZGlzYWJsZWQgY3NzIGNsYXNzLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlubmVyRGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5pbm5lckRpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcblxuICAgIGlmICh0aGlzLmZvY3VzZWQpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgaW5uZXJEaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5uZXIgdmFsdWUuXG4gICAqL1xuICBpbm5lclZhbHVlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBnZXR0ZXIgZm9yIHZhbHVlLlxuICAgKi9cbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXJWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc2V0dGVyIGZvciB2YWx1ZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCB2YWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIHZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5pbm5lclZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5mb2N1c2VkID0gISF2YWx1ZTtcbiAgICBpZiAodGhpcy5vbkNoYW5nZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub25Ub3VjaGVkICE9IG51bGwpIHtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlubmVyUmVxdWlyZWQ7XG4gIH1cbiAgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5pbm5lclJlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgaW5uZXJSZXF1aXJlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBFcnJvciBkZXNjcmlwdGlvbiB3aGVuIGludmFsaWQuXG4gICAqL1xuICBASW5wdXQoKSBlcnJvcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIaW50IGRlc2NyaXB0aW9uIHdoZW4gdmFsaWQuXG4gICAqL1xuICBASW5wdXQoKSBoaW50OiBzdHJpbmc7XG5cbiAgQFZpZXdDaGlsZCgnaW5wdXRFbGVtZW50JykgaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRydWUgdGhlIHRleHQgaW5wdXQgaGFzIGZvY3VzLlxuICAgKi9cbiAgZm9jdXNlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVHJpZ2dlcmVkIG9uIGNoYW5nZS5cbiAgICovXG4gIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcblxuICAvKipcbiAgICogVHJpZ2dlcmVkIG9uIHRvdWNoLlxuICAgKi9cbiAgb25Ub3VjaGVkOiAoKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgb24gY29tcG9uZW50IGluaXRpYWxpc2F0aW9uLlxuICAgKi9cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5vbkJsdXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZXMgdGhlIHZhbHVlLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlLlxuICAgKi9cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIHZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5pbm5lclZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5mb2N1c2VkID0gISF2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBmdW5jdGlvbiB0byBvbkNoYW5nZS5cbiAgICogQHBhcmFtIGZuIFRoZSByZWdpc3RlcmVkIGZ1bmN0aW9uLlxuICAgKi9cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGZ1bmN0aW9uIHRvIG9uVG91Y2hlZC5cbiAgICogQHBhcmFtIGZuIFRoZSByZWdpc3RlcmVkIGZ1bmN0aW9uLlxuICAgKi9cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHRleHQgaW5wdXQgaXMgaW4gZm9jdXMuXG4gICAqL1xuICBvbkZvY3VzKCkge1xuICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XG4gIH1cblxuICBvbklucHV0KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSB0ZXh0IGlucHV0IGJsdXJzLlxuICAgKi9cbiAgb25CbHVyKCkge1xuICAgIGlmICh0aGlzLmZvY3VzZWQpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBkaXNhYmxlZCBzdGF0ZS5cbiAgICogQHBhcmFtIGlzRGlzYWJsZWQgV2hlbiB0cnVlIHRoZSBjb250cm9sIGlzIGRpc2FibGVkXG4gICAqL1xuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxufVxuIiwiPGxhYmVsIGNsYXNzPVwiZndlLWlucHV0LXRleHRcIiBbY2xhc3MuZndlLW5vLXBvaW50ZXItZXZlbnRzXT1cInJlYWRvbmx5ID09PSB0cnVlXCI+XG4gIDxpbnB1dFxuICAgICNpbnB1dEVsZW1lbnRcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZCA9PT0gdHJ1ZSB8fCBudWxsXCJcbiAgICBbYXR0ci5yZWFkb25seV09XCJyZWFkb25seSA9PT0gdHJ1ZSB8fCBudWxsXCJcbiAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8fCBudWxsXCJcbiAgICBbYXR0ci50eXBlXT1cInR5cGVcIlxuICAgIFthdHRyLnN0ZXBdPVwic3RlcFwiXG4gICAgW2F0dHIubWluXT1cIm1pblwiXG4gICAgW2F0dHIubWF4XT1cIm1heFwiXG4gICAgW2F0dHIubmFtZV09XCJuYW1lIHx8IG51bGxcIlxuICAgIFthdHRyLnRhYmluZGV4XT1cInRhYmluZGV4XCJcbiAgICBbY2xhc3MuZm5nLWhhcy12YWx1ZV09XCJ2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSAnJ1wiXG4gICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIlxuICAgIChpbnB1dCk9XCJvbklucHV0KCRldmVudClcIlxuICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgLz5cbiAgPHNwYW4gY2xhc3M9XCJmd2UtaW5wdXQtdGV4dC1sYWJlbFwiPnt7IGxhYmVsIH19PC9zcGFuPlxuICA8c3BhbiAqbmdJZj1cImhpbnQ7IGVsc2UgcHJvamVjdGVkSGludFwiIGNsYXNzPVwiZndlLWlucHV0LXRleHQtaW5mb1wiPnt7IGhpbnQgfX08L3NwYW4+XG4gIDxzcGFuICpuZ0lmPVwiZXJyb3I7IGVsc2UgcHJvamVjdGVkRXJyb3JcIiBjbGFzcz1cImZ3ZS1pbnB1dC10ZXh0LWludmFsaWRcIj57eyBlcnJvciB9fTwvc3Bhbj5cblxuICA8bmctdGVtcGxhdGUgI3Byb2plY3RlZEhpbnQ+XG4gICAgPHNwYW4gY2xhc3M9XCJmd2UtaW5wdXQtdGV4dC1pbmZvIGZuZy1wcm9qZWN0ZWRcIj48bmctY29udGVudCBzZWxlY3Q9XCIuZm5nLWhpbnRcIj48L25nLWNvbnRlbnQ+PC9zcGFuPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjcHJvamVjdGVkRXJyb3I+XG4gICAgPHNwYW4gY2xhc3M9XCJmd2UtaW5wdXQtdGV4dC1pbnZhbGlkIGZuZy1wcm9qZWN0ZWRcIj48bmctY29udGVudCBzZWxlY3Q9XCIuZm5nLWVycm9yXCI+PC9uZy1jb250ZW50Pjwvc3Bhbj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbGFiZWw+XG4iXX0=
@@ -0,0 +1,89 @@
1
+ import { Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ export class TimePickerDropdownComponent {
5
+ constructor() {
6
+ this.showSeconds = false;
7
+ this.timeFormat = '24';
8
+ this.dateChange = new EventEmitter();
9
+ }
10
+ hide(event) {
11
+ if (event.key === 'Escape' || event.key === 'Enter') {
12
+ this.onDateChange(true, event.key === 'Escape');
13
+ }
14
+ }
15
+ ngAfterViewInit() {
16
+ if (this.hoursInput != null && this.hoursInput.nativeElement != null) {
17
+ this.hoursInput.nativeElement.focus();
18
+ }
19
+ }
20
+ onHourUp() {
21
+ this.date?.setHours(this.date.getHours() + 1);
22
+ this.onDateChange(false, false);
23
+ }
24
+ onHourDown() {
25
+ this.date?.setHours(this.date.getHours() - 1);
26
+ this.onDateChange(false, false);
27
+ }
28
+ onMinuteUp() {
29
+ this.date?.setMinutes(this.date.getMinutes() + 1);
30
+ this.onDateChange(false, false);
31
+ }
32
+ onMinuteDown() {
33
+ this.date?.setMinutes(this.date.getMinutes() - 1);
34
+ this.onDateChange(false, false);
35
+ }
36
+ onSecondUp() {
37
+ this.date?.setSeconds(this.date.getSeconds() + 1);
38
+ this.onDateChange(false, false);
39
+ }
40
+ onSecondDown() {
41
+ this.date?.setSeconds(this.date.getSeconds() - 1);
42
+ this.onDateChange(false, false);
43
+ }
44
+ onHourChange(event) {
45
+ const max = +event.target.max;
46
+ const min = +event.target.min;
47
+ const hour = +event.target.value;
48
+ this.date?.setHours(hour > max ? max : hour < min ? min : hour);
49
+ }
50
+ onMinuteChange(event) {
51
+ const max = +event.target.max;
52
+ const min = +event.target.min;
53
+ const minute = +event.target.value;
54
+ this.date?.setMinutes(minute > max ? max : minute < min ? min : minute);
55
+ }
56
+ onSecondChange(event) {
57
+ const max = +event.target.max;
58
+ const min = +event.target.min;
59
+ const seconds = +event.target.value;
60
+ this.date?.setSeconds(seconds > max ? max : seconds < min ? min : seconds);
61
+ }
62
+ onDateChange(close, reset) {
63
+ if (this.date != null) {
64
+ this.date = new Date(this.date);
65
+ this.dateChange.emit({ date: !reset ? new Date(this.date) : null, close });
66
+ }
67
+ }
68
+ }
69
+ TimePickerDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TimePickerDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
70
+ TimePickerDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: TimePickerDropdownComponent, selector: "fng-time-picker-dropdown", inputs: { date: "date", showSeconds: "showSeconds", timeFormat: "timeFormat" }, outputs: { dateChange: "dateChange" }, host: { listeners: { "document:keydown": "hide($event)" } }, viewQueries: [{ propertyName: "hoursInput", first: true, predicate: ["hoursInput"], descendants: true }], ngImport: i0, template: "<div class=\"fwe-timepicker\" [class.fwe-timepicker-am-pm]=\"timeFormat === '12'\">\n <div class=\"fwe-timepicker-spinners\">\n <div class=\"fwe-timepicker-spinners-hours\">\n <button type=\"button\" aria-label=\"hour up\" class=\"fwe-btn fwe-btn-link fwe-dark\" (click)=\"onHourUp()\">\n <i aria-hidden=\"true\" class=\"fwe-icon fwe-icon-arrows-expand\"></i>\n </button>\n <input\n #hoursInput\n aria-label=\"hours value\"\n class=\"fwe-timepicker-hide-spinners\"\n type=\"number\"\n min=\"0\"\n tabindex=\"1\"\n step=\"1\"\n [value]=\"date | date: (timeFormat === '12' ? 'hh' : 'HH')\"\n [attr.max]=\"timeFormat === '12' ? 12 : 23\"\n (input)=\"onHourChange($event)\"\n />\n <button type=\"button\" aria-label=\"hour down\" class=\"fwe-btn fwe-btn-link fwe-dark\" (click)=\"onHourDown()\">\n <i aria-hidden=\"true\" class=\"fwe-icon fwe-icon-arrows-collapse\"></i>\n </button>\n </div>\n <div class=\"fwe-timepicker-spinners-minutes\">\n <button type=\"button\" aria-label=\"minute up\" class=\"fwe-btn fwe-btn-link fwe-dark\" (click)=\"onMinuteUp()\">\n <i aria-hidden=\"true\" class=\"fwe-icon fwe-icon-arrows-expand\"></i>\n </button>\n <input\n aria-label=\"minutes value\"\n class=\"fwe-timepicker-hide-spinners\"\n type=\"number\"\n min=\"0\"\n max=\"59\"\n step=\"1\"\n tabindex=\"2\"\n [value]=\"date | date: 'mm'\"\n (input)=\"onMinuteChange($event)\"\n />\n <button type=\"button\" aria-label=\"minute down\" class=\"fwe-btn fwe-btn-link fwe-dark\" (click)=\"onMinuteDown()\">\n <i aria-hidden=\"true\" class=\"fwe-icon fwe-icon-arrows-collapse\"></i>\n </button>\n </div>\n <div *ngIf=\"showSeconds\" class=\"fwe-timepicker-spinners-seconds\">\n <button type=\"button\" aria-label=\"seconds up\" class=\"fwe-btn fwe-btn-link fwe-dark\" (click)=\"onSecondUp()\">\n <i aria-hidden=\"true\" class=\"fwe-icon fwe-icon-arrows-expand\"></i>\n </button>\n <input\n aria-label=\"seconds value\"\n class=\"fwe-timepicker-hide-spinners\"\n type=\"number\"\n min=\"0\"\n max=\"59\"\n step=\"1\"\n tabindex=\"3\"\n [value]=\"date | date: 'ss'\"\n (input)=\"onSecondChange($event)\"\n />\n <button type=\"button\" aria-label=\"seconds down\" class=\"fwe-btn fwe-btn-link fwe-dark\" (click)=\"onSecondDown()\">\n <i aria-hidden=\"true\" class=\"fwe-icon fwe-icon-arrows-collapse\"></i>\n </button>\n </div>\n </div>\n <span *ngIf=\"timeFormat === '12'\" class=\"fwe-badge fwe-badge-control\">\n {{ date | date: 'a' }}\n </span>\n</div>\n", styles: [".border-hero{border-color:var(--fwe-hero)!important}.fwe-timepicker{width:100%;max-width:100%}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "date": i1.DatePipe }, encapsulation: i0.ViewEncapsulation.None });
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TimePickerDropdownComponent, decorators: [{
72
+ type: Component,
73
+ args: [{ selector: 'fng-time-picker-dropdown', encapsulation: ViewEncapsulation.None, template: "<div class=\"fwe-timepicker\" [class.fwe-timepicker-am-pm]=\"timeFormat === '12'\">\n <div class=\"fwe-timepicker-spinners\">\n <div class=\"fwe-timepicker-spinners-hours\">\n <button type=\"button\" aria-label=\"hour up\" class=\"fwe-btn fwe-btn-link fwe-dark\" (click)=\"onHourUp()\">\n <i aria-hidden=\"true\" class=\"fwe-icon fwe-icon-arrows-expand\"></i>\n </button>\n <input\n #hoursInput\n aria-label=\"hours value\"\n class=\"fwe-timepicker-hide-spinners\"\n type=\"number\"\n min=\"0\"\n tabindex=\"1\"\n step=\"1\"\n [value]=\"date | date: (timeFormat === '12' ? 'hh' : 'HH')\"\n [attr.max]=\"timeFormat === '12' ? 12 : 23\"\n (input)=\"onHourChange($event)\"\n />\n <button type=\"button\" aria-label=\"hour down\" class=\"fwe-btn fwe-btn-link fwe-dark\" (click)=\"onHourDown()\">\n <i aria-hidden=\"true\" class=\"fwe-icon fwe-icon-arrows-collapse\"></i>\n </button>\n </div>\n <div class=\"fwe-timepicker-spinners-minutes\">\n <button type=\"button\" aria-label=\"minute up\" class=\"fwe-btn fwe-btn-link fwe-dark\" (click)=\"onMinuteUp()\">\n <i aria-hidden=\"true\" class=\"fwe-icon fwe-icon-arrows-expand\"></i>\n </button>\n <input\n aria-label=\"minutes value\"\n class=\"fwe-timepicker-hide-spinners\"\n type=\"number\"\n min=\"0\"\n max=\"59\"\n step=\"1\"\n tabindex=\"2\"\n [value]=\"date | date: 'mm'\"\n (input)=\"onMinuteChange($event)\"\n />\n <button type=\"button\" aria-label=\"minute down\" class=\"fwe-btn fwe-btn-link fwe-dark\" (click)=\"onMinuteDown()\">\n <i aria-hidden=\"true\" class=\"fwe-icon fwe-icon-arrows-collapse\"></i>\n </button>\n </div>\n <div *ngIf=\"showSeconds\" class=\"fwe-timepicker-spinners-seconds\">\n <button type=\"button\" aria-label=\"seconds up\" class=\"fwe-btn fwe-btn-link fwe-dark\" (click)=\"onSecondUp()\">\n <i aria-hidden=\"true\" class=\"fwe-icon fwe-icon-arrows-expand\"></i>\n </button>\n <input\n aria-label=\"seconds value\"\n class=\"fwe-timepicker-hide-spinners\"\n type=\"number\"\n min=\"0\"\n max=\"59\"\n step=\"1\"\n tabindex=\"3\"\n [value]=\"date | date: 'ss'\"\n (input)=\"onSecondChange($event)\"\n />\n <button type=\"button\" aria-label=\"seconds down\" class=\"fwe-btn fwe-btn-link fwe-dark\" (click)=\"onSecondDown()\">\n <i aria-hidden=\"true\" class=\"fwe-icon fwe-icon-arrows-collapse\"></i>\n </button>\n </div>\n </div>\n <span *ngIf=\"timeFormat === '12'\" class=\"fwe-badge fwe-badge-control\">\n {{ date | date: 'a' }}\n </span>\n</div>\n", styles: [".border-hero{border-color:var(--fwe-hero)!important}.fwe-timepicker{width:100%;max-width:100%}\n"] }]
74
+ }], propDecorators: { date: [{
75
+ type: Input
76
+ }], showSeconds: [{
77
+ type: Input
78
+ }], timeFormat: [{
79
+ type: Input
80
+ }], dateChange: [{
81
+ type: Output
82
+ }], hoursInput: [{
83
+ type: ViewChild,
84
+ args: ['hoursInput']
85
+ }], hide: [{
86
+ type: HostListener,
87
+ args: ['document:keydown', ['$event']]
88
+ }] } });
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXItZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvZm9ybXMvdGltZS1waWNrZXIvdGltZS1waWNrZXItZHJvcGRvd24vdGltZS1waWNrZXItZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvZm9ybXMvdGltZS1waWNrZXIvdGltZS1waWNrZXItZHJvcGRvd24vdGltZS1waWNrZXItZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDbEIsTUFBTSxlQUFlLENBQUM7OztBQVF2QixNQUFNLE9BQU8sMkJBQTJCO0lBTnhDO1FBUVcsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsZUFBVSxHQUFnQixJQUFJLENBQUM7UUFDOUIsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFrQyxDQUFDO0tBMEUzRTtJQXJFQyxJQUFJLENBQUMsS0FBb0I7UUFDdkIsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLE9BQU8sRUFBRTtZQUNuRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDO1NBQ2pEO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxJQUFJLElBQUksRUFBRTtZQUNuRSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQTZCLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDeEQ7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQW9CO1FBQy9CLE1BQU0sR0FBRyxHQUFHLENBQUUsS0FBSyxDQUFDLE1BQTJCLENBQUMsR0FBRyxDQUFDO1FBQ3BELE1BQU0sR0FBRyxHQUFHLENBQUUsS0FBSyxDQUFDLE1BQTJCLENBQUMsR0FBRyxDQUFDO1FBQ3BELE1BQU0sSUFBSSxHQUFHLENBQUUsS0FBSyxDQUFDLE1BQTJCLENBQUMsS0FBSyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQW9CO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLENBQUUsS0FBSyxDQUFDLE1BQTJCLENBQUMsR0FBRyxDQUFDO1FBQ3BELE1BQU0sR0FBRyxHQUFHLENBQUUsS0FBSyxDQUFDLE1BQTJCLENBQUMsR0FBRyxDQUFDO1FBQ3BELE1BQU0sTUFBTSxHQUFHLENBQUUsS0FBSyxDQUFDLE1BQTJCLENBQUMsS0FBSyxDQUFDO1FBQ3pELElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQW9CO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLENBQUUsS0FBSyxDQUFDLE1BQTJCLENBQUMsR0FBRyxDQUFDO1FBQ3BELE1BQU0sR0FBRyxHQUFHLENBQUUsS0FBSyxDQUFDLE1BQTJCLENBQUMsR0FBRyxDQUFDO1FBQ3BELE1BQU0sT0FBTyxHQUFHLENBQUUsS0FBSyxDQUFDLE1BQTJCLENBQUMsS0FBSyxDQUFDO1FBQzFELElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWMsRUFBRSxLQUFjO1FBQ3pDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUU7WUFDckIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDNUU7SUFDSCxDQUFDOzt3SEE3RVUsMkJBQTJCOzRHQUEzQiwyQkFBMkIsOFZDbEJ4Qyx1dUZBaUVBOzJGRC9DYSwyQkFBMkI7a0JBTnZDLFNBQVM7K0JBQ0UsMEJBQTBCLGlCQUdyQixpQkFBaUIsQ0FBQyxJQUFJOzhCQUc1QixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLE1BQU07Z0JBRWtCLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFHdkIsSUFBSTtzQkFESCxZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZm5nLXRpbWUtcGlja2VyLWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RpbWUtcGlja2VyLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGltZS1waWNrZXItZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBUaW1lUGlja2VyRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgZGF0ZTogRGF0ZTtcbiAgQElucHV0KCkgc2hvd1NlY29uZHMgPSBmYWxzZTtcbiAgQElucHV0KCkgdGltZUZvcm1hdDogJzEyJyB8ICcyNCcgPSAnMjQnO1xuICBAT3V0cHV0KCkgZGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBkYXRlOiBEYXRlOyBjbG9zZTogYm9vbGVhbiB9PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2hvdXJzSW5wdXQnKSBob3Vyc0lucHV0OiBFbGVtZW50UmVmO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxuICBoaWRlKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScgfHwgZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICB0aGlzLm9uRGF0ZUNoYW5nZSh0cnVlLCBldmVudC5rZXkgPT09ICdFc2NhcGUnKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuaG91cnNJbnB1dCAhPSBudWxsICYmIHRoaXMuaG91cnNJbnB1dC5uYXRpdmVFbGVtZW50ICE9IG51bGwpIHtcbiAgICAgICh0aGlzLmhvdXJzSW5wdXQubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBvbkhvdXJVcCgpIHtcbiAgICB0aGlzLmRhdGU/LnNldEhvdXJzKHRoaXMuZGF0ZS5nZXRIb3VycygpICsgMSk7XG4gICAgdGhpcy5vbkRhdGVDaGFuZ2UoZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIG9uSG91ckRvd24oKSB7XG4gICAgdGhpcy5kYXRlPy5zZXRIb3Vycyh0aGlzLmRhdGUuZ2V0SG91cnMoKSAtIDEpO1xuICAgIHRoaXMub25EYXRlQ2hhbmdlKGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICBvbk1pbnV0ZVVwKCkge1xuICAgIHRoaXMuZGF0ZT8uc2V0TWludXRlcyh0aGlzLmRhdGUuZ2V0TWludXRlcygpICsgMSk7XG4gICAgdGhpcy5vbkRhdGVDaGFuZ2UoZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIG9uTWludXRlRG93bigpIHtcbiAgICB0aGlzLmRhdGU/LnNldE1pbnV0ZXModGhpcy5kYXRlLmdldE1pbnV0ZXMoKSAtIDEpO1xuICAgIHRoaXMub25EYXRlQ2hhbmdlKGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICBvblNlY29uZFVwKCkge1xuICAgIHRoaXMuZGF0ZT8uc2V0U2Vjb25kcyh0aGlzLmRhdGUuZ2V0U2Vjb25kcygpICsgMSk7XG4gICAgdGhpcy5vbkRhdGVDaGFuZ2UoZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIG9uU2Vjb25kRG93bigpIHtcbiAgICB0aGlzLmRhdGU/LnNldFNlY29uZHModGhpcy5kYXRlLmdldFNlY29uZHMoKSAtIDEpO1xuICAgIHRoaXMub25EYXRlQ2hhbmdlKGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICBvbkhvdXJDaGFuZ2UoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCBtYXggPSArKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5tYXg7XG4gICAgY29uc3QgbWluID0gKyhldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkubWluO1xuICAgIGNvbnN0IGhvdXIgPSArKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICB0aGlzLmRhdGU/LnNldEhvdXJzKGhvdXIgPiBtYXggPyBtYXggOiBob3VyIDwgbWluID8gbWluIDogaG91cik7XG4gIH1cblxuICBvbk1pbnV0ZUNoYW5nZShldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IG1heCA9ICsoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLm1heDtcbiAgICBjb25zdCBtaW4gPSArKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5taW47XG4gICAgY29uc3QgbWludXRlID0gKyhldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgdGhpcy5kYXRlPy5zZXRNaW51dGVzKG1pbnV0ZSA+IG1heCA/IG1heCA6IG1pbnV0ZSA8IG1pbiA/IG1pbiA6IG1pbnV0ZSk7XG4gIH1cblxuICBvblNlY29uZENoYW5nZShldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IG1heCA9ICsoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLm1heDtcbiAgICBjb25zdCBtaW4gPSArKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5taW47XG4gICAgY29uc3Qgc2Vjb25kcyA9ICsoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIHRoaXMuZGF0ZT8uc2V0U2Vjb25kcyhzZWNvbmRzID4gbWF4ID8gbWF4IDogc2Vjb25kcyA8IG1pbiA/IG1pbiA6IHNlY29uZHMpO1xuICB9XG5cbiAgb25EYXRlQ2hhbmdlKGNsb3NlOiBib29sZWFuLCByZXNldDogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLmRhdGUgIT0gbnVsbCkge1xuICAgICAgdGhpcy5kYXRlID0gbmV3IERhdGUodGhpcy5kYXRlKTtcbiAgICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KHsgZGF0ZTogIXJlc2V0ID8gbmV3IERhdGUodGhpcy5kYXRlKSA6IG51bGwsIGNsb3NlIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZ3ZS10aW1lcGlja2VyXCIgW2NsYXNzLmZ3ZS10aW1lcGlja2VyLWFtLXBtXT1cInRpbWVGb3JtYXQgPT09ICcxMidcIj5cbiAgPGRpdiBjbGFzcz1cImZ3ZS10aW1lcGlja2VyLXNwaW5uZXJzXCI+XG4gICAgPGRpdiBjbGFzcz1cImZ3ZS10aW1lcGlja2VyLXNwaW5uZXJzLWhvdXJzXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiaG91ciB1cFwiIGNsYXNzPVwiZndlLWJ0biBmd2UtYnRuLWxpbmsgZndlLWRhcmtcIiAoY2xpY2spPVwib25Ib3VyVXAoKVwiPlxuICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImZ3ZS1pY29uIGZ3ZS1pY29uLWFycm93cy1leHBhbmRcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjaG91cnNJbnB1dFxuICAgICAgICBhcmlhLWxhYmVsPVwiaG91cnMgdmFsdWVcIlxuICAgICAgICBjbGFzcz1cImZ3ZS10aW1lcGlja2VyLWhpZGUtc3Bpbm5lcnNcIlxuICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgbWluPVwiMFwiXG4gICAgICAgIHRhYmluZGV4PVwiMVwiXG4gICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgW3ZhbHVlXT1cImRhdGUgfCBkYXRlOiAodGltZUZvcm1hdCA9PT0gJzEyJyA/ICdoaCcgOiAnSEgnKVwiXG4gICAgICAgIFthdHRyLm1heF09XCJ0aW1lRm9ybWF0ID09PSAnMTInID8gMTIgOiAyM1wiXG4gICAgICAgIChpbnB1dCk9XCJvbkhvdXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAvPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cImhvdXIgZG93blwiIGNsYXNzPVwiZndlLWJ0biBmd2UtYnRuLWxpbmsgZndlLWRhcmtcIiAoY2xpY2spPVwib25Ib3VyRG93bigpXCI+XG4gICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiZndlLWljb24gZndlLWljb24tYXJyb3dzLWNvbGxhcHNlXCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZ3ZS10aW1lcGlja2VyLXNwaW5uZXJzLW1pbnV0ZXNcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJtaW51dGUgdXBcIiBjbGFzcz1cImZ3ZS1idG4gZndlLWJ0bi1saW5rIGZ3ZS1kYXJrXCIgKGNsaWNrKT1cIm9uTWludXRlVXAoKVwiPlxuICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cImZ3ZS1pY29uIGZ3ZS1pY29uLWFycm93cy1leHBhbmRcIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBhcmlhLWxhYmVsPVwibWludXRlcyB2YWx1ZVwiXG4gICAgICAgIGNsYXNzPVwiZndlLXRpbWVwaWNrZXItaGlkZS1zcGlubmVyc1wiXG4gICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICBtaW49XCIwXCJcbiAgICAgICAgbWF4PVwiNTlcIlxuICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgIHRhYmluZGV4PVwiMlwiXG4gICAgICAgIFt2YWx1ZV09XCJkYXRlIHwgZGF0ZTogJ21tJ1wiXG4gICAgICAgIChpbnB1dCk9XCJvbk1pbnV0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIC8+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwibWludXRlIGRvd25cIiBjbGFzcz1cImZ3ZS1idG4gZndlLWJ0bi1saW5rIGZ3ZS1kYXJrXCIgKGNsaWNrKT1cIm9uTWludXRlRG93bigpXCI+XG4gICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiZndlLWljb24gZndlLWljb24tYXJyb3dzLWNvbGxhcHNlXCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cInNob3dTZWNvbmRzXCIgY2xhc3M9XCJmd2UtdGltZXBpY2tlci1zcGlubmVycy1zZWNvbmRzXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwic2Vjb25kcyB1cFwiIGNsYXNzPVwiZndlLWJ0biBmd2UtYnRuLWxpbmsgZndlLWRhcmtcIiAoY2xpY2spPVwib25TZWNvbmRVcCgpXCI+XG4gICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiZndlLWljb24gZndlLWljb24tYXJyb3dzLWV4cGFuZFwiPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGlucHV0XG4gICAgICAgIGFyaWEtbGFiZWw9XCJzZWNvbmRzIHZhbHVlXCJcbiAgICAgICAgY2xhc3M9XCJmd2UtdGltZXBpY2tlci1oaWRlLXNwaW5uZXJzXCJcbiAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgIG1pbj1cIjBcIlxuICAgICAgICBtYXg9XCI1OVwiXG4gICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgdGFiaW5kZXg9XCIzXCJcbiAgICAgICAgW3ZhbHVlXT1cImRhdGUgfCBkYXRlOiAnc3MnXCJcbiAgICAgICAgKGlucHV0KT1cIm9uU2Vjb25kQ2hhbmdlKCRldmVudClcIlxuICAgICAgLz5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJzZWNvbmRzIGRvd25cIiBjbGFzcz1cImZ3ZS1idG4gZndlLWJ0bi1saW5rIGZ3ZS1kYXJrXCIgKGNsaWNrKT1cIm9uU2Vjb25kRG93bigpXCI+XG4gICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiZndlLWljb24gZndlLWljb24tYXJyb3dzLWNvbGxhcHNlXCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8c3BhbiAqbmdJZj1cInRpbWVGb3JtYXQgPT09ICcxMidcIiBjbGFzcz1cImZ3ZS1iYWRnZSBmd2UtYmFkZ2UtY29udHJvbFwiPlxuICAgIHt7IGRhdGUgfCBkYXRlOiAnYScgfX1cbiAgPC9zcGFuPlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,188 @@
1
+ import { Overlay } from '@angular/cdk/overlay';
2
+ import { ComponentPortal } from '@angular/cdk/portal';
3
+ import { Component, ElementRef, forwardRef, HostBinding, HostListener, Input, ViewChild, ViewEncapsulation } from '@angular/core';
4
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
+ import { Subject } from 'rxjs';
6
+ import { takeUntil } from 'rxjs/operators';
7
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
8
+ import { TimePickerDropdownComponent } from './time-picker-dropdown/time-picker-dropdown.component';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@angular/cdk/overlay";
11
+ import * as i2 from "@angular/common";
12
+ export class TimePickerComponent {
13
+ constructor(overlay) {
14
+ this.overlay = overlay;
15
+ this.innerRequired = false;
16
+ this.display = 'block';
17
+ this.innerDisabled = false;
18
+ this.complete = new Subject();
19
+ }
20
+ get value() {
21
+ return this.innerValue;
22
+ }
23
+ set value(date) {
24
+ if (!this.disabled) {
25
+ this.innerValue = date;
26
+ if (this.onChange != null) {
27
+ this.onChange(date);
28
+ }
29
+ if (this.onTouched != null) {
30
+ this.onTouched();
31
+ }
32
+ }
33
+ }
34
+ get disabled() {
35
+ return this.innerDisabled;
36
+ }
37
+ set disabled(value) {
38
+ this.innerDisabled = coerceBooleanProperty(value);
39
+ }
40
+ get required() {
41
+ return this.innerRequired;
42
+ }
43
+ set required(value) {
44
+ this.innerRequired = coerceBooleanProperty(value);
45
+ }
46
+ get timeFormat() {
47
+ let timeFormat = 'H:mm';
48
+ if (this.options != null) {
49
+ if (this.options.showSeconds) {
50
+ timeFormat += ':ss';
51
+ }
52
+ if (this.options.timeFormat === '12') {
53
+ timeFormat = timeFormat.toLowerCase() + ' a';
54
+ }
55
+ }
56
+ return timeFormat;
57
+ }
58
+ hide(event) {
59
+ if (event.key === 'Escape') {
60
+ this.dispose();
61
+ }
62
+ }
63
+ writeValue(date) {
64
+ this.innerValue = date;
65
+ }
66
+ registerOnChange(fn) {
67
+ this.onChange = fn;
68
+ }
69
+ registerOnTouched(fn) {
70
+ this.onTouched = fn;
71
+ }
72
+ setDisabledState(isDisabled) {
73
+ this.disabled = isDisabled;
74
+ }
75
+ toggle(event) {
76
+ event.preventDefault();
77
+ event.stopPropagation();
78
+ if (!this.disabled) {
79
+ if (this.timePickerRef == null && this.connector != null && this.connector.nativeElement != null) {
80
+ const labelWidth = this.connector.nativeElement.clientWidth;
81
+ this.timePickerRef = this.overlay.create({
82
+ width: `${labelWidth}px`,
83
+ panelClass: 'fng-first-child-fullwidth',
84
+ hasBackdrop: true,
85
+ backdropClass: 'fng-date-picker-backdrop',
86
+ scrollStrategy: this.overlay.scrollStrategies.block(),
87
+ positionStrategy: this.overlay
88
+ .position()
89
+ .flexibleConnectedTo(this.connector.nativeElement)
90
+ .withPositions([
91
+ {
92
+ originX: 'center',
93
+ originY: 'bottom',
94
+ overlayX: 'center',
95
+ overlayY: 'top',
96
+ offsetY: -12
97
+ },
98
+ {
99
+ originX: 'center',
100
+ originY: 'top',
101
+ overlayX: 'center',
102
+ overlayY: 'bottom',
103
+ offsetY: 4
104
+ }
105
+ ])
106
+ .withFlexibleDimensions(false)
107
+ .withPush(false)
108
+ });
109
+ const timePickerPortal = new ComponentPortal(TimePickerDropdownComponent);
110
+ this.timePicker = this.timePickerRef.attach(timePickerPortal);
111
+ this.timePicker.instance.timeFormat = this.options != null && this.options.timeFormat != null ? this.options.timeFormat : '24';
112
+ this.timePicker.instance.showSeconds = this.options != null && this.options.showSeconds != null ? this.options.showSeconds : false;
113
+ this.timePicker.instance.date = new Date(this.value);
114
+ this.timePicker.instance.dateChange.pipe(takeUntil(this.complete)).subscribe(ev => {
115
+ if (ev.date != null) {
116
+ this.value = ev.date;
117
+ }
118
+ if (ev.close) {
119
+ this.dispose();
120
+ }
121
+ });
122
+ this.timePickerRef
123
+ .backdropClick()
124
+ .pipe(takeUntil(this.complete))
125
+ .subscribe(() => this.dispose());
126
+ }
127
+ else {
128
+ this.dispose();
129
+ }
130
+ }
131
+ }
132
+ dispose() {
133
+ if (this.timePickerRef != null) {
134
+ this.timePickerRef.detach();
135
+ this.timePickerRef.dispose();
136
+ this.timePickerRef = null;
137
+ }
138
+ if (this.complete != null) {
139
+ this.complete.next(true);
140
+ this.complete.complete();
141
+ }
142
+ }
143
+ }
144
+ TimePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TimePickerComponent, deps: [{ token: i1.Overlay }], target: i0.ɵɵFactoryTarget.Component });
145
+ TimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: TimePickerComponent, selector: "fng-time-picker", inputs: { value: "value", disabled: "disabled", required: "required", hint: "hint", error: "error", options: "options", width: "width" }, host: { listeners: { "document:keydown": "hide($event)" }, properties: { "style.width": "this.width", "style.display": "this.display" } }, providers: [
146
+ {
147
+ provide: NG_VALUE_ACCESSOR,
148
+ useExisting: forwardRef(() => TimePickerComponent),
149
+ multi: true
150
+ }
151
+ ], viewQueries: [{ propertyName: "connector", first: true, predicate: ["connector"], descendants: true, static: true }], ngImport: i0, template: "<label #connector class=\"fng-time-picker fwe-input-text fwe-input-text-icon\" (click)=\"toggle($event)\">\n <i class=\"fwe-icon fwe-icon-time-time\" [class.fwe-color-hero]=\"timePickerRef != null\" [class.fwe-color-control-disabled]=\"disabled\"></i>\n <input\n aria-label=\"picked time\"\n type=\"text\"\n readonly\n [required]=\"required === true || null\"\n [class.fwe-border-hero]=\"timePickerRef != null\"\n [value]=\"value | date: timeFormat\"\n [disabled]=\"disabled\"\n />\n <span class=\"fwe-input-text-label\"><ng-content></ng-content></span>\n <span *ngIf=\"hint\" class=\"fwe-input-text-info\">{{ hint }}</span>\n <span *ngIf=\"error\" class=\"fwe-input-text-invalid\">{{ error }}</span>\n</label>\n", styles: [".fng-first-child-fullwidth fng-time-picker-dropdown{width:100%}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "date": i2.DatePipe }, encapsulation: i0.ViewEncapsulation.None });
152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: TimePickerComponent, decorators: [{
153
+ type: Component,
154
+ args: [{ selector: 'fng-time-picker', providers: [
155
+ {
156
+ provide: NG_VALUE_ACCESSOR,
157
+ useExisting: forwardRef(() => TimePickerComponent),
158
+ multi: true
159
+ }
160
+ ], encapsulation: ViewEncapsulation.None, template: "<label #connector class=\"fng-time-picker fwe-input-text fwe-input-text-icon\" (click)=\"toggle($event)\">\n <i class=\"fwe-icon fwe-icon-time-time\" [class.fwe-color-hero]=\"timePickerRef != null\" [class.fwe-color-control-disabled]=\"disabled\"></i>\n <input\n aria-label=\"picked time\"\n type=\"text\"\n readonly\n [required]=\"required === true || null\"\n [class.fwe-border-hero]=\"timePickerRef != null\"\n [value]=\"value | date: timeFormat\"\n [disabled]=\"disabled\"\n />\n <span class=\"fwe-input-text-label\"><ng-content></ng-content></span>\n <span *ngIf=\"hint\" class=\"fwe-input-text-info\">{{ hint }}</span>\n <span *ngIf=\"error\" class=\"fwe-input-text-invalid\">{{ error }}</span>\n</label>\n", styles: [".fng-first-child-fullwidth fng-time-picker-dropdown{width:100%}\n"] }]
161
+ }], ctorParameters: function () { return [{ type: i1.Overlay }]; }, propDecorators: { value: [{
162
+ type: Input
163
+ }], disabled: [{
164
+ type: Input
165
+ }], required: [{
166
+ type: Input
167
+ }], hint: [{
168
+ type: Input
169
+ }], error: [{
170
+ type: Input
171
+ }], options: [{
172
+ type: Input
173
+ }], width: [{
174
+ type: Input
175
+ }, {
176
+ type: HostBinding,
177
+ args: ['style.width']
178
+ }], display: [{
179
+ type: HostBinding,
180
+ args: ['style.display']
181
+ }], connector: [{
182
+ type: ViewChild,
183
+ args: ['connector', { static: true }]
184
+ }], hide: [{
185
+ type: HostListener,
186
+ args: ['document:keydown', ['$event']]
187
+ }] } });
188
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvZm9ybXMvdGltZS1waWNrZXIvdGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvZm9ybXMvdGltZS1waWNrZXIvdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQ0wsU0FBUyxFQUVULFVBQVUsRUFDVixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdURBQXVELENBQUM7Ozs7QUFvQnBHLE1BQU0sT0FBTyxtQkFBbUI7SUFrRTlCLFlBQW9CLE9BQWdCO1FBQWhCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFsQzFCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBU0YsWUFBTyxHQUFXLE9BQU8sQ0FBQztRQW9COUMsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFeEIsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7SUFHSCxDQUFDO0lBakV4QyxJ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QUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDOztnSEFqS1UsbUJBQW1CO29HQUFuQixtQkFBbUIsK1RBVG5CO1FBQ1Q7WUFDRSxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUM7WUFDbEQsS0FBSyxFQUFFLElBQUk7U0FDWjtLQUNGLGdKQ2xDSCxxdUJBZUE7MkZEc0JhLG1CQUFtQjtrQkFiL0IsU0FBUzsrQkFDRSxpQkFBaUIsYUFHaEI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUM7NEJBQ2xELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGLGlCQUNjLGlCQUFpQixDQUFDLElBQUk7OEZBT2pDLEtBQUs7c0JBRFIsS0FBSztnQkFjRixRQUFRO3NCQURYLEtBQUs7Z0JBU0YsUUFBUTtzQkFEWCxLQUFLO2dCQVNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUlOLEtBQUs7c0JBRkosS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQyxhQUFhO2dCQUVJLE9BQU87c0JBQXBDLFdBQVc7dUJBQUMsZUFBZTtnQkFFYyxTQUFTO3NCQUFsRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBNkJ4QyxJQUFJO3NCQURILFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPdmVybGF5LCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbXBvbmVudFJlZixcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgVGltZVBpY2tlckRyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi90aW1lLXBpY2tlci1kcm9wZG93bi90aW1lLXBpY2tlci1kcm9wZG93bi5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVQaWNrZXJPcHRpb25zIHtcbiAgdGltZUZvcm1hdD86ICcxMicgfCAnMjQnO1xuICBzaG93U2Vjb25kcz86IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZuZy10aW1lLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RpbWUtcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGltZVBpY2tlckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBUaW1lUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBnZXQgdmFsdWUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuaW5uZXJWYWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUoZGF0ZTogRGF0ZSkge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5pbm5lclZhbHVlID0gZGF0ZTtcbiAgICAgIGlmICh0aGlzLm9uQ2hhbmdlICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZShkYXRlKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9uVG91Y2hlZCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlubmVyRGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5pbm5lckRpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbm5lclJlcXVpcmVkO1xuICB9XG4gIHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuaW5uZXJSZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIGlubmVyUmVxdWlyZWQgPSBmYWxzZTtcblxuICBASW5wdXQoKSBoaW50OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGVycm9yOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG9wdGlvbnM6IFRpbWVQaWNrZXJPcHRpb25zO1xuXG4gIEBJbnB1dCgpXG4gIEBIb3N0QmluZGluZygnc3R5bGUud2lkdGgnKVxuICB3aWR0aDogc3RyaW5nO1xuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmRpc3BsYXknKSBkaXNwbGF5OiBzdHJpbmcgPSAnYmxvY2snO1xuXG4gIEBWaWV3Q2hpbGQoJ2Nvbm5lY3RvcicsIHsgc3RhdGljOiB0cnVlIH0pIGNvbm5lY3RvcjogRWxlbWVudFJlZjtcblxuICBnZXQgdGltZUZvcm1hdCgpOiBzdHJpbmcge1xuICAgIGxldCB0aW1lRm9ybWF0ID0gJ0g6bW0nO1xuICAgIGlmICh0aGlzLm9wdGlvbnMgIT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93U2Vjb25kcykge1xuICAgICAgICB0aW1lRm9ybWF0ICs9ICc6c3MnO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy50aW1lRm9ybWF0ID09PSAnMTInKSB7XG4gICAgICAgIHRpbWVGb3JtYXQgPSB0aW1lRm9ybWF0LnRvTG93ZXJDYXNlKCkgKyAnIGEnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGltZUZvcm1hdDtcbiAgfVxuXG4gIHRpbWVQaWNrZXJSZWY6IE92ZXJsYXlSZWY7XG5cbiAgcHJvdGVjdGVkIGlubmVyVmFsdWU6IERhdGU7XG4gIHByb3RlY3RlZCBpbm5lckRpc2FibGVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb21wbGV0ZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgdGltZVBpY2tlcjogQ29tcG9uZW50UmVmPFRpbWVQaWNrZXJEcm9wZG93bkNvbXBvbmVudD47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5KSB7fVxuXG4gIG9uVG91Y2hlZDogKCkgPT4gdm9pZDtcbiAgb25DaGFuZ2U6IChkYXRlOiBEYXRlKSA9PiB2b2lkO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxuICBoaWRlKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMuZGlzcG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUoZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuaW5uZXJWYWx1ZSA9IGRhdGU7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHRvZ2dsZShldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgaWYgKHRoaXMudGltZVBpY2tlclJlZiA9PSBudWxsICYmIHRoaXMuY29ubmVjdG9yICE9IG51bGwgJiYgdGhpcy5jb25uZWN0b3IubmF0aXZlRWxlbWVudCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsV2lkdGggPSAodGhpcy5jb25uZWN0b3IubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuY2xpZW50V2lkdGg7XG4gICAgICAgIHRoaXMudGltZVBpY2tlclJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xuICAgICAgICAgIHdpZHRoOiBgJHtsYWJlbFdpZHRofXB4YCxcbiAgICAgICAgICBwYW5lbENsYXNzOiAnZm5nLWZpcnN0LWNoaWxkLWZ1bGx3aWR0aCcsXG4gICAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICAgICAgYmFja2Ryb3BDbGFzczogJ2ZuZy1kYXRlLXBpY2tlci1iYWNrZHJvcCcsXG4gICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKCksXG4gICAgICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5vdmVybGF5XG4gICAgICAgICAgICAucG9zaXRpb24oKVxuICAgICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5jb25uZWN0b3IubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgIC53aXRoUG9zaXRpb25zKFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9yaWdpblg6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgICAgICAgIG92ZXJsYXlYOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBvdmVybGF5WTogJ3RvcCcsXG4gICAgICAgICAgICAgICAgb2Zmc2V0WTogLTEyXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcmlnaW5YOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgICAgICAgICBvdmVybGF5WDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxuICAgICAgICAgICAgICAgIG9mZnNldFk6IDRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKVxuICAgICAgICAgICAgLndpdGhQdXNoKGZhbHNlKVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdGltZVBpY2tlclBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwoVGltZVBpY2tlckRyb3Bkb3duQ29tcG9uZW50KTtcbiAgICAgICAgdGhpcy50aW1lUGlja2VyID0gdGhpcy50aW1lUGlja2VyUmVmLmF0dGFjaCh0aW1lUGlja2VyUG9ydGFsKTtcbiAgICAgICAgdGhpcy50aW1lUGlja2VyLmluc3RhbmNlLnRpbWVGb3JtYXQgPSB0aGlzLm9wdGlvbnMgIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMudGltZUZvcm1hdCAhPSBudWxsID8gdGhpcy5vcHRpb25zLnRpbWVGb3JtYXQgOiAnMjQnO1xuICAgICAgICB0aGlzLnRpbWVQaWNrZXIuaW5zdGFuY2Uuc2hvd1NlY29uZHMgPSB0aGlzLm9wdGlvbnMgIT0gbnVsbCAmJiB0aGlzLm9wdGlvbnMuc2hvd1NlY29uZHMgIT0gbnVsbCA/IHRoaXMub3B0aW9ucy5zaG93U2Vjb25kcyA6IGZhbHNlO1xuICAgICAgICB0aGlzLnRpbWVQaWNrZXIuaW5zdGFuY2UuZGF0ZSA9IG5ldyBEYXRlKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLnRpbWVQaWNrZXIuaW5zdGFuY2UuZGF0ZUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmNvbXBsZXRlKSkuc3Vic2NyaWJlKGV2ID0+IHtcbiAgICAgICAgICBpZiAoZXYuZGF0ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gZXYuZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV2LmNsb3NlKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRpbWVQaWNrZXJSZWZcbiAgICAgICAgICAuYmFja2Ryb3BDbGljaygpXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuY29tcGxldGUpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kaXNwb3NlKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkaXNwb3NlKCkge1xuICAgIGlmICh0aGlzLnRpbWVQaWNrZXJSZWYgIT0gbnVsbCkge1xuICAgICAgdGhpcy50aW1lUGlja2VyUmVmLmRldGFjaCgpO1xuICAgICAgdGhpcy50aW1lUGlja2VyUmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMudGltZVBpY2tlclJlZiA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbXBsZXRlICE9IG51bGwpIHtcbiAgICAgIHRoaXMuY29tcGxldGUubmV4dCh0cnVlKTtcbiAgICAgIHRoaXMuY29tcGxldGUuY29tcGxldGUoKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxsYWJlbCAjY29ubmVjdG9yIGNsYXNzPVwiZm5nLXRpbWUtcGlja2VyIGZ3ZS1pbnB1dC10ZXh0IGZ3ZS1pbnB1dC10ZXh0LWljb25cIiAoY2xpY2spPVwidG9nZ2xlKCRldmVudClcIj5cbiAgPGkgY2xhc3M9XCJmd2UtaWNvbiBmd2UtaWNvbi10aW1lLXRpbWVcIiBbY2xhc3MuZndlLWNvbG9yLWhlcm9dPVwidGltZVBpY2tlclJlZiAhPSBudWxsXCIgW2NsYXNzLmZ3ZS1jb2xvci1jb250cm9sLWRpc2FibGVkXT1cImRpc2FibGVkXCI+PC9pPlxuICA8aW5wdXRcbiAgICBhcmlhLWxhYmVsPVwicGlja2VkIHRpbWVcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICByZWFkb25seVxuICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZCA9PT0gdHJ1ZSB8fCBudWxsXCJcbiAgICBbY2xhc3MuZndlLWJvcmRlci1oZXJvXT1cInRpbWVQaWNrZXJSZWYgIT0gbnVsbFwiXG4gICAgW3ZhbHVlXT1cInZhbHVlIHwgZGF0ZTogdGltZUZvcm1hdFwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgLz5cbiAgPHNwYW4gY2xhc3M9XCJmd2UtaW5wdXQtdGV4dC1sYWJlbFwiPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L3NwYW4+XG4gIDxzcGFuICpuZ0lmPVwiaGludFwiIGNsYXNzPVwiZndlLWlucHV0LXRleHQtaW5mb1wiPnt7IGhpbnQgfX08L3NwYW4+XG4gIDxzcGFuICpuZ0lmPVwiZXJyb3JcIiBjbGFzcz1cImZ3ZS1pbnB1dC10ZXh0LWludmFsaWRcIj57eyBlcnJvciB9fTwvc3Bhbj5cbjwvbGFiZWw+XG4iXX0=
@@ -0,0 +1,39 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class UniqueSelectionDispatcher {
4
+ constructor() {
5
+ this.listeners = [];
6
+ }
7
+ /**
8
+ * Notify other items that selection for the given name has been set.
9
+ * @param id ID of the item.
10
+ * @param name Name of the item.
11
+ */
12
+ notify(id, name) {
13
+ for (const listener of this.listeners) {
14
+ listener(id, name);
15
+ }
16
+ }
17
+ /**
18
+ * Listen for future changes to item selection.
19
+ * @return Function used to deregister listener
20
+ */
21
+ listen(listener) {
22
+ this.listeners.push(listener);
23
+ return () => {
24
+ this.listeners = this.listeners.filter((registered) => {
25
+ return listener !== registered;
26
+ });
27
+ };
28
+ }
29
+ ngOnDestroy() {
30
+ this.listeners = [];
31
+ }
32
+ }
33
+ UniqueSelectionDispatcher.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: UniqueSelectionDispatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
34
+ UniqueSelectionDispatcher.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: UniqueSelectionDispatcher, providedIn: 'root' });
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: UniqueSelectionDispatcher, decorators: [{
36
+ type: Injectable,
37
+ args: [{ providedIn: 'root' }]
38
+ }] });
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pcXVlLXNlbGVjdGlvbi1kaXNwYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy9saWIvZm9ybXMvdW5pcXVlLXNlbGVjdGlvbi1kaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7O0FBS3RELE1BQU0sT0FBTyx5QkFBeUI7SUFEdEM7UUFFVSxjQUFTLEdBQXdDLEVBQUUsQ0FBQztLQTZCN0Q7SUEzQkM7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxFQUFVLEVBQUUsSUFBWTtRQUM3QixLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDckMsUUFBUSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsUUFBMkM7UUFDaEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUIsT0FBTyxHQUFHLEVBQUU7WUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBNkMsRUFBRSxFQUFFO2dCQUN2RixPQUFPLFFBQVEsS0FBSyxVQUFVLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7O3NIQTdCVSx5QkFBeUI7MEhBQXpCLHlCQUF5QixjQURaLE1BQU07MkZBQ25CLHlCQUF5QjtrQkFEckMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IHR5cGUgVW5pcXVlU2VsZWN0aW9uRGlzcGF0Y2hlckxpc3RlbmVyID0gKGlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZykgPT4gdm9pZDtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBVbmlxdWVTZWxlY3Rpb25EaXNwYXRjaGVyIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBsaXN0ZW5lcnM6IFVuaXF1ZVNlbGVjdGlvbkRpc3BhdGNoZXJMaXN0ZW5lcltdID0gW107XG5cbiAgLyoqXG4gICAqIE5vdGlmeSBvdGhlciBpdGVtcyB0aGF0IHNlbGVjdGlvbiBmb3IgdGhlIGdpdmVuIG5hbWUgaGFzIGJlZW4gc2V0LlxuICAgKiBAcGFyYW0gaWQgSUQgb2YgdGhlIGl0ZW0uXG4gICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGl0ZW0uXG4gICAqL1xuICBub3RpZnkoaWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLmxpc3RlbmVycykge1xuICAgICAgbGlzdGVuZXIoaWQsIG5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gZm9yIGZ1dHVyZSBjaGFuZ2VzIHRvIGl0ZW0gc2VsZWN0aW9uLlxuICAgKiBAcmV0dXJuIEZ1bmN0aW9uIHVzZWQgdG8gZGVyZWdpc3RlciBsaXN0ZW5lclxuICAgKi9cbiAgbGlzdGVuKGxpc3RlbmVyOiBVbmlxdWVTZWxlY3Rpb25EaXNwYXRjaGVyTGlzdGVuZXIpOiAoKSA9PiB2b2lkIHtcbiAgICB0aGlzLmxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdGhpcy5saXN0ZW5lcnMgPSB0aGlzLmxpc3RlbmVycy5maWx0ZXIoKHJlZ2lzdGVyZWQ6IFVuaXF1ZVNlbGVjdGlvbkRpc3BhdGNoZXJMaXN0ZW5lcikgPT4ge1xuICAgICAgICByZXR1cm4gbGlzdGVuZXIgIT09IHJlZ2lzdGVyZWQ7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5saXN0ZW5lcnMgPSBbXTtcbiAgfVxufVxuIl19