info-library 2.10.87 → 2.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/controls/alert/alert.component.d.ts +3 -0
  2. package/controls/autocomplete/autocomplete.component.d.ts +5 -2
  3. package/controls/big-checkbox/big-checkbox.component.d.ts +3 -0
  4. package/controls/card/card.component.d.ts +3 -0
  5. package/controls/card-menu/card-menu.component.d.ts +3 -0
  6. package/controls/checkbox/checkbox.component.d.ts +3 -0
  7. package/controls/chips/chips.component.d.ts +3 -0
  8. package/controls/date/date.component.d.ts +3 -0
  9. package/controls/date-month/date-month.component.d.ts +3 -0
  10. package/controls/editor/editor.component.d.ts +3 -0
  11. package/controls/grid/grid.component.d.ts +5 -0
  12. package/controls/input/input.component.d.ts +3 -0
  13. package/controls/input-list/input-list.component.d.ts +3 -0
  14. package/controls/list-checkbox/list-checkbox.component.d.ts +3 -0
  15. package/controls/message/message.component.d.ts +3 -0
  16. package/controls/multi-select/multi-select.component.d.ts +3 -0
  17. package/controls/paginator/paginator.component.d.ts +3 -0
  18. package/controls/select/select.component.d.ts +3 -0
  19. package/controls/timeline/timeline.component.d.ts +3 -0
  20. package/directives/mask.directive.d.ts +3 -0
  21. package/directives/unmask.directive.d.ts +3 -0
  22. package/esm2020/controls/alert/alert.component.mjs +74 -0
  23. package/esm2020/controls/autocomplete/autocomplete.component.mjs +258 -0
  24. package/esm2020/controls/big-checkbox/big-checkbox.component.mjs +298 -0
  25. package/esm2020/controls/card/card.component.mjs +77 -0
  26. package/esm2020/controls/card-menu/card-menu.component.mjs +145 -0
  27. package/esm2020/controls/checkbox/checkbox.component.mjs +93 -0
  28. package/esm2020/controls/chips/chips.component.mjs +113 -0
  29. package/esm2020/controls/date/date.component.mjs +141 -0
  30. package/esm2020/controls/date-month/date-month.component.mjs +148 -0
  31. package/esm2020/controls/editor/editor.component.mjs +135 -0
  32. package/esm2020/controls/grid/grid.component.mjs +1800 -0
  33. package/esm2020/controls/input/input.component.mjs +314 -0
  34. package/esm2020/controls/input-list/input-list.component.mjs +258 -0
  35. package/esm2020/controls/list-checkbox/list-checkbox.component.mjs +238 -0
  36. package/esm2020/controls/message/message.component.mjs +50 -0
  37. package/esm2020/controls/multi-select/multi-select.component.mjs +161 -0
  38. package/esm2020/controls/paginator/paginator.component.mjs +178 -0
  39. package/esm2020/controls/select/select.component.mjs +180 -0
  40. package/esm2020/controls/timeline/timeline.component.mjs +117 -0
  41. package/esm2020/directives/mask.directive.mjs +125 -0
  42. package/esm2020/directives/unmask.directive.mjs +28 -0
  43. package/esm2020/enum/dialog-buttons.enum.mjs +9 -0
  44. package/esm2020/enum/index.mjs +4 -0
  45. package/esm2020/enum/modal-action.enum.mjs +12 -0
  46. package/esm2020/enum/page-action.enum.mjs +10 -0
  47. package/esm2020/global-config.mjs +4 -0
  48. package/esm2020/info-library.mjs +5 -0
  49. package/esm2020/info-library.module.mjs +278 -0
  50. package/esm2020/layouts/dialog/dialog.component.mjs +188 -0
  51. package/esm2020/layouts/loading/loading.component.mjs +42 -0
  52. package/esm2020/layouts/main/main.component.mjs +276 -0
  53. package/esm2020/layouts/modal/modal.component.mjs +258 -0
  54. package/esm2020/layouts/pagebar/pagebar.component.mjs +404 -0
  55. package/esm2020/layouts/sidebar/sidebar.component.mjs +395 -0
  56. package/esm2020/layouts/topbar/topbar.component.mjs +863 -0
  57. package/esm2020/layouts/topmenu/topmenu.component.mjs +165 -0
  58. package/esm2020/model/app-config.model.mjs +14 -0
  59. package/esm2020/model/data-access.model.mjs +35 -0
  60. package/esm2020/model/dialog-result.model.mjs +8 -0
  61. package/esm2020/model/dialog.model.mjs +16 -0
  62. package/esm2020/model/form-prop.model.mjs +35 -0
  63. package/esm2020/model/grid-button.model.mjs +21 -0
  64. package/esm2020/model/index.mjs +15 -0
  65. package/esm2020/model/last-search.model.mjs +9 -0
  66. package/esm2020/model/login.model.mjs +9 -0
  67. package/esm2020/model/method-grid-button.model.mjs +9 -0
  68. package/esm2020/model/notification.model.mjs +9 -0
  69. package/esm2020/model/pagebar-buttons.model.mjs +15 -0
  70. package/esm2020/model/permission.model.mjs +3 -0
  71. package/esm2020/model/platform.model.mjs +21 -0
  72. package/esm2020/model/session.model.mjs +8 -0
  73. package/esm2020/pipe/index.mjs +3 -0
  74. package/esm2020/pipe/mask.pipe.mjs +34 -0
  75. package/esm2020/pipe/translate.pipe.mjs +26 -0
  76. package/esm2020/public_api.mjs +36 -0
  77. package/esm2020/service/authentication.service.mjs +358 -0
  78. package/esm2020/service/configuration.service.mjs +59 -0
  79. package/esm2020/service/data.service.mjs +112 -0
  80. package/esm2020/service/index.mjs +6 -0
  81. package/esm2020/service/theme.service.mjs +79 -0
  82. package/esm2020/service/translate.service.mjs +53 -0
  83. package/esm2020/utils/utilities.mjs +142 -0
  84. package/fesm2015/info-library.mjs +9326 -0
  85. package/fesm2015/info-library.mjs.map +1 -0
  86. package/fesm2020/info-library.mjs +8474 -0
  87. package/fesm2020/info-library.mjs.map +1 -0
  88. package/index.d.ts +5 -0
  89. package/info-library.module.d.ts +58 -0
  90. package/layouts/dialog/dialog.component.d.ts +5 -0
  91. package/layouts/loading/loading.component.d.ts +3 -0
  92. package/layouts/main/main.component.d.ts +6 -0
  93. package/layouts/modal/modal.component.d.ts +3 -0
  94. package/layouts/pagebar/pagebar.component.d.ts +5 -0
  95. package/layouts/sidebar/sidebar.component.d.ts +4 -1
  96. package/layouts/topbar/topbar.component.d.ts +4 -1
  97. package/layouts/topmenu/topmenu.component.d.ts +3 -0
  98. package/package.json +28 -13
  99. package/pipe/mask.pipe.d.ts +3 -0
  100. package/pipe/translate.pipe.d.ts +3 -0
  101. package/service/authentication.service.d.ts +5 -0
  102. package/service/configuration.service.d.ts +3 -0
  103. package/service/data.service.d.ts +3 -0
  104. package/service/theme.service.d.ts +3 -0
  105. package/service/translate.service.d.ts +3 -0
  106. package/utils/utilities.d.ts +3 -0
  107. package/bundles/info-library.umd.js +0 -9740
  108. package/bundles/info-library.umd.js.map +0 -1
  109. package/bundles/info-library.umd.min.js +0 -2
  110. package/bundles/info-library.umd.min.js.map +0 -1
  111. package/esm2015/controls/alert/alert.component.js +0 -43
  112. package/esm2015/controls/autocomplete/autocomplete.component.js +0 -386
  113. package/esm2015/controls/big-checkbox/big-checkbox.component.js +0 -282
  114. package/esm2015/controls/card/card.component.js +0 -64
  115. package/esm2015/controls/card-menu/card-menu.component.js +0 -90
  116. package/esm2015/controls/checkbox/checkbox.component.js +0 -130
  117. package/esm2015/controls/chips/chips.component.js +0 -124
  118. package/esm2015/controls/date/date.component.js +0 -167
  119. package/esm2015/controls/date-month/date-month.component.js +0 -181
  120. package/esm2015/controls/editor/editor.component.js +0 -237
  121. package/esm2015/controls/grid/grid.component.js +0 -1391
  122. package/esm2015/controls/input/input.component.js +0 -196
  123. package/esm2015/controls/input-list/input-list.component.js +0 -160
  124. package/esm2015/controls/list-checkbox/list-checkbox.component.js +0 -151
  125. package/esm2015/controls/message/message.component.js +0 -47
  126. package/esm2015/controls/multi-select/multi-select.component.js +0 -213
  127. package/esm2015/controls/paginator/paginator.component.js +0 -151
  128. package/esm2015/controls/select/select.component.js +0 -231
  129. package/esm2015/controls/timeline/timeline.component.js +0 -73
  130. package/esm2015/directives/mask.directive.js +0 -202
  131. package/esm2015/directives/unmask.directive.js +0 -51
  132. package/esm2015/enum/dialog-buttons.enum.js +0 -20
  133. package/esm2015/enum/index.js +0 -9
  134. package/esm2015/enum/modal-action.enum.js +0 -26
  135. package/esm2015/enum/page-action.enum.js +0 -22
  136. package/esm2015/global-config.js +0 -11
  137. package/esm2015/info-library.js +0 -27
  138. package/esm2015/info-library.module.js +0 -174
  139. package/esm2015/layouts/dialog/dialog.component.js +0 -173
  140. package/esm2015/layouts/loading/loading.component.js +0 -42
  141. package/esm2015/layouts/main/main.component.js +0 -312
  142. package/esm2015/layouts/modal/modal.component.js +0 -232
  143. package/esm2015/layouts/pagebar/pagebar.component.js +0 -286
  144. package/esm2015/layouts/sidebar/sidebar.component.js +0 -231
  145. package/esm2015/layouts/topbar/topbar.component.js +0 -413
  146. package/esm2015/layouts/topmenu/topmenu.component.js +0 -181
  147. package/esm2015/model/app-config.model.js +0 -39
  148. package/esm2015/model/data-access.model.js +0 -65
  149. package/esm2015/model/dialog-result.model.js +0 -23
  150. package/esm2015/model/dialog.model.js +0 -47
  151. package/esm2015/model/form-prop.model.js +0 -61
  152. package/esm2015/model/grid-button.model.js +0 -62
  153. package/esm2015/model/index.js +0 -20
  154. package/esm2015/model/last-search.model.js +0 -24
  155. package/esm2015/model/login.model.js +0 -27
  156. package/esm2015/model/method-grid-button.model.js +0 -27
  157. package/esm2015/model/notification.model.js +0 -34
  158. package/esm2015/model/pagebar-buttons.model.js +0 -39
  159. package/esm2015/model/permission.model.js +0 -16
  160. package/esm2015/model/platform.model.js +0 -56
  161. package/esm2015/model/session.model.js +0 -53
  162. package/esm2015/pipe/index.js +0 -8
  163. package/esm2015/pipe/mask.pipe.js +0 -47
  164. package/esm2015/pipe/translate.pipe.js +0 -45
  165. package/esm2015/public_api.js +0 -41
  166. package/esm2015/service/authentication.service.js +0 -732
  167. package/esm2015/service/configuration.service.js +0 -107
  168. package/esm2015/service/data.service.js +0 -292
  169. package/esm2015/service/index.js +0 -11
  170. package/esm2015/service/theme.service.js +0 -133
  171. package/esm2015/service/translate.service.js +0 -105
  172. package/esm2015/utils/utilities.js +0 -256
  173. package/fesm2015/info-library.js +0 -8792
  174. package/fesm2015/info-library.js.map +0 -1
  175. package/info-library.d.ts +0 -21
  176. package/info-library.metadata.json +0 -1
@@ -0,0 +1,314 @@
1
+ import { Component, forwardRef, Input, Output, EventEmitter } from "@angular/core";
2
+ import { NG_VALUE_ACCESSOR } from "@angular/forms";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/forms";
6
+ import * as i3 from "@angular/material/icon";
7
+ import * as i4 from "@angular/material/form-field";
8
+ import * as i5 from "@angular/material/input";
9
+ import * as i6 from "ng2-currency-mask";
10
+ import * as i7 from "../../directives/mask.directive";
11
+ import * as i8 from "../../directives/unmask.directive";
12
+ import * as i9 from "../../pipe/translate.pipe";
13
+ function InfoInputComponent_mat_form_field_0_mat_icon_1_Template(rf, ctx) { if (rf & 1) {
14
+ i0.ɵɵelementStart(0, "mat-icon", 6);
15
+ i0.ɵɵtext(1);
16
+ i0.ɵɵelementEnd();
17
+ } if (rf & 2) {
18
+ const ctx_r4 = i0.ɵɵnextContext(2);
19
+ i0.ɵɵadvance(1);
20
+ i0.ɵɵtextInterpolate(ctx_r4.iconPrefix);
21
+ } }
22
+ function InfoInputComponent_mat_form_field_0_mat_icon_4_Template(rf, ctx) { if (rf & 1) {
23
+ i0.ɵɵelementStart(0, "mat-icon", 7);
24
+ i0.ɵɵtext(1);
25
+ i0.ɵɵelementEnd();
26
+ } if (rf & 2) {
27
+ const ctx_r5 = i0.ɵɵnextContext(2);
28
+ i0.ɵɵadvance(1);
29
+ i0.ɵɵtextInterpolate(ctx_r5.iconSuffix);
30
+ } }
31
+ function InfoInputComponent_mat_form_field_0_mat_icon_5_Template(rf, ctx) { if (rf & 1) {
32
+ const _r8 = i0.ɵɵgetCurrentView();
33
+ i0.ɵɵelementStart(0, "mat-icon", 8);
34
+ i0.ɵɵlistener("click", function InfoInputComponent_mat_form_field_0_mat_icon_5_Template_mat_icon_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r7 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r7.type = ctx_r7.type == "password" ? "text" : "password"); });
35
+ i0.ɵɵtext(1);
36
+ i0.ɵɵelementEnd();
37
+ } if (rf & 2) {
38
+ const ctx_r6 = i0.ɵɵnextContext(2);
39
+ i0.ɵɵadvance(1);
40
+ i0.ɵɵtextInterpolate1("visibility", ctx_r6.type == "password" ? "" : "_off", "");
41
+ } }
42
+ function InfoInputComponent_mat_form_field_0_Template(rf, ctx) { if (rf & 1) {
43
+ const _r10 = i0.ɵɵgetCurrentView();
44
+ i0.ɵɵelementStart(0, "mat-form-field");
45
+ i0.ɵɵtemplate(1, InfoInputComponent_mat_form_field_0_mat_icon_1_Template, 2, 1, "mat-icon", 2);
46
+ i0.ɵɵelementStart(2, "input", 3);
47
+ i0.ɵɵlistener("ngModelChange", function InfoInputComponent_mat_form_field_0_Template_input_ngModelChange_2_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r9.value = $event); })("input", function InfoInputComponent_mat_form_field_0_Template_input_input_2_listener() { i0.ɵɵrestoreView(_r10); const ctx_r11 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r11.onChangeValue()); })("blur", function InfoInputComponent_mat_form_field_0_Template_input_blur_2_listener() { i0.ɵɵrestoreView(_r10); const ctx_r12 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r12.onBlur()); });
48
+ i0.ɵɵpipe(3, "translate");
49
+ i0.ɵɵelementEnd();
50
+ i0.ɵɵtemplate(4, InfoInputComponent_mat_form_field_0_mat_icon_4_Template, 2, 1, "mat-icon", 4);
51
+ i0.ɵɵtemplate(5, InfoInputComponent_mat_form_field_0_mat_icon_5_Template, 2, 1, "mat-icon", 5);
52
+ i0.ɵɵelementEnd();
53
+ } if (rf & 2) {
54
+ const ctx_r0 = i0.ɵɵnextContext();
55
+ i0.ɵɵadvance(1);
56
+ i0.ɵɵproperty("ngIf", ctx_r0.iconPrefix);
57
+ i0.ɵɵadvance(1);
58
+ i0.ɵɵproperty("type", ctx_r0.type)("step", ctx_r0.step)("min", ctx_r0.min)("max", ctx_r0.max)("tabindex", ctx_r0.tabindex)("placeholder", i0.ɵɵpipeBind1(3, 14, ctx_r0.placeholder))("ngModel", ctx_r0.value)("maxlength", ctx_r0.maxlength)("readonly", ctx_r0.readonly)("disabled", ctx_r0.disabled)("required", ctx_r0.required);
59
+ i0.ɵɵadvance(2);
60
+ i0.ɵɵproperty("ngIf", ctx_r0.iconSuffix);
61
+ i0.ɵɵadvance(1);
62
+ i0.ɵɵproperty("ngIf", ctx_r0.passwordMode);
63
+ } }
64
+ function InfoInputComponent_mat_form_field_1_mat_icon_1_Template(rf, ctx) { if (rf & 1) {
65
+ i0.ɵɵelementStart(0, "mat-icon", 6);
66
+ i0.ɵɵtext(1);
67
+ i0.ɵɵelementEnd();
68
+ } if (rf & 2) {
69
+ const ctx_r13 = i0.ɵɵnextContext(2);
70
+ i0.ɵɵadvance(1);
71
+ i0.ɵɵtextInterpolate(ctx_r13.iconPrefix);
72
+ } }
73
+ function InfoInputComponent_mat_form_field_1_input_2_Template(rf, ctx) { if (rf & 1) {
74
+ const _r18 = i0.ɵɵgetCurrentView();
75
+ i0.ɵɵelementStart(0, "input", 11);
76
+ i0.ɵɵlistener("ngModelChange", function InfoInputComponent_mat_form_field_1_input_2_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r17 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r17.value = $event); })("ngModelChange", function InfoInputComponent_mat_form_field_1_input_2_Template_input_ngModelChange_0_listener() { i0.ɵɵrestoreView(_r18); const ctx_r19 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r19.onChangeValue()); })("blur", function InfoInputComponent_mat_form_field_1_input_2_Template_input_blur_0_listener() { i0.ɵɵrestoreView(_r18); const ctx_r20 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r20.onBlur()); });
77
+ i0.ɵɵpipe(1, "translate");
78
+ i0.ɵɵelementEnd();
79
+ } if (rf & 2) {
80
+ const ctx_r14 = i0.ɵɵnextContext(2);
81
+ i0.ɵɵproperty("tabindex", ctx_r14.tabindex)("placeholder", i0.ɵɵpipeBind1(1, 7, ctx_r14.placeholder))("ngModel", ctx_r14.value)("readonly", ctx_r14.readonly)("disabled", ctx_r14.disabled)("required", ctx_r14.required)("options", ctx_r14.maskOptions);
82
+ } }
83
+ function InfoInputComponent_mat_form_field_1_input_3_Template(rf, ctx) { if (rf & 1) {
84
+ const _r22 = i0.ɵɵgetCurrentView();
85
+ i0.ɵɵelementStart(0, "input", 12);
86
+ i0.ɵɵlistener("ngModelChange", function InfoInputComponent_mat_form_field_1_input_3_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r22); const ctx_r21 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r21.value = $event); })("ngModelChange", function InfoInputComponent_mat_form_field_1_input_3_Template_input_ngModelChange_0_listener() { i0.ɵɵrestoreView(_r22); const ctx_r23 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r23.onChangeValue()); })("blur", function InfoInputComponent_mat_form_field_1_input_3_Template_input_blur_0_listener() { i0.ɵɵrestoreView(_r22); const ctx_r24 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r24.onBlur()); });
87
+ i0.ɵɵpipe(1, "translate");
88
+ i0.ɵɵelementEnd();
89
+ } if (rf & 2) {
90
+ const ctx_r15 = i0.ɵɵnextContext(2);
91
+ i0.ɵɵproperty("tabindex", ctx_r15.tabindex)("placeholder", i0.ɵɵpipeBind1(1, 7, ctx_r15.placeholder))("ngModel", ctx_r15.value)("readonly", ctx_r15.readonly)("disabled", ctx_r15.disabled)("required", ctx_r15.required)("setmask", ctx_r15.customMask);
92
+ } }
93
+ function InfoInputComponent_mat_form_field_1_mat_icon_4_Template(rf, ctx) { if (rf & 1) {
94
+ i0.ɵɵelementStart(0, "mat-icon", 7);
95
+ i0.ɵɵtext(1);
96
+ i0.ɵɵelementEnd();
97
+ } if (rf & 2) {
98
+ const ctx_r16 = i0.ɵɵnextContext(2);
99
+ i0.ɵɵadvance(1);
100
+ i0.ɵɵtextInterpolate(ctx_r16.iconSuffix);
101
+ } }
102
+ function InfoInputComponent_mat_form_field_1_Template(rf, ctx) { if (rf & 1) {
103
+ i0.ɵɵelementStart(0, "mat-form-field");
104
+ i0.ɵɵtemplate(1, InfoInputComponent_mat_form_field_1_mat_icon_1_Template, 2, 1, "mat-icon", 2);
105
+ i0.ɵɵtemplate(2, InfoInputComponent_mat_form_field_1_input_2_Template, 2, 9, "input", 9);
106
+ i0.ɵɵtemplate(3, InfoInputComponent_mat_form_field_1_input_3_Template, 2, 9, "input", 10);
107
+ i0.ɵɵtemplate(4, InfoInputComponent_mat_form_field_1_mat_icon_4_Template, 2, 1, "mat-icon", 4);
108
+ i0.ɵɵelementEnd();
109
+ } if (rf & 2) {
110
+ const ctx_r1 = i0.ɵɵnextContext();
111
+ i0.ɵɵadvance(1);
112
+ i0.ɵɵproperty("ngIf", ctx_r1.iconPrefix);
113
+ i0.ɵɵadvance(1);
114
+ i0.ɵɵproperty("ngIf", ctx_r1.customMask == null);
115
+ i0.ɵɵadvance(1);
116
+ i0.ɵɵproperty("ngIf", ctx_r1.customMask != null);
117
+ i0.ɵɵadvance(1);
118
+ i0.ɵɵproperty("ngIf", ctx_r1.iconSuffix);
119
+ } }
120
+ function InfoInputComponent_mat_form_field_2_mat_icon_1_Template(rf, ctx) { if (rf & 1) {
121
+ i0.ɵɵelementStart(0, "mat-icon", 6);
122
+ i0.ɵɵtext(1);
123
+ i0.ɵɵelementEnd();
124
+ } if (rf & 2) {
125
+ const ctx_r25 = i0.ɵɵnextContext(2);
126
+ i0.ɵɵadvance(1);
127
+ i0.ɵɵtextInterpolate(ctx_r25.iconPrefix);
128
+ } }
129
+ function InfoInputComponent_mat_form_field_2_Template(rf, ctx) { if (rf & 1) {
130
+ const _r27 = i0.ɵɵgetCurrentView();
131
+ i0.ɵɵelementStart(0, "mat-form-field");
132
+ i0.ɵɵtemplate(1, InfoInputComponent_mat_form_field_2_mat_icon_1_Template, 2, 1, "mat-icon", 2);
133
+ i0.ɵɵelementStart(2, "textarea", 13);
134
+ i0.ɵɵlistener("ngModelChange", function InfoInputComponent_mat_form_field_2_Template_textarea_ngModelChange_2_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r26 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r26.value = $event); })("input", function InfoInputComponent_mat_form_field_2_Template_textarea_input_2_listener() { i0.ɵɵrestoreView(_r27); const ctx_r28 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r28.onChangeValue()); })("blur", function InfoInputComponent_mat_form_field_2_Template_textarea_blur_2_listener() { i0.ɵɵrestoreView(_r27); const ctx_r29 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r29.onBlur()); });
135
+ i0.ɵɵpipe(3, "translate");
136
+ i0.ɵɵelementEnd()();
137
+ } if (rf & 2) {
138
+ const ctx_r2 = i0.ɵɵnextContext();
139
+ i0.ɵɵadvance(1);
140
+ i0.ɵɵproperty("ngIf", ctx_r2.iconPrefix);
141
+ i0.ɵɵadvance(1);
142
+ i0.ɵɵproperty("tabindex", ctx_r2.tabindex)("placeholder", i0.ɵɵpipeBind1(3, 9, ctx_r2.placeholder))("ngModel", ctx_r2.value)("rows", ctx_r2.rows)("maxlength", ctx_r2.maxlength)("readonly", ctx_r2.readonly)("disabled", ctx_r2.disabled)("required", ctx_r2.required);
143
+ } }
144
+ function InfoInputComponent_mat_form_field_3_mat_icon_7_Template(rf, ctx) { if (rf & 1) {
145
+ i0.ɵɵelementStart(0, "mat-icon", 7);
146
+ i0.ɵɵtext(1);
147
+ i0.ɵɵelementEnd();
148
+ } if (rf & 2) {
149
+ const ctx_r31 = i0.ɵɵnextContext(2);
150
+ i0.ɵɵadvance(1);
151
+ i0.ɵɵtextInterpolate(ctx_r31.iconSuffix);
152
+ } }
153
+ function InfoInputComponent_mat_form_field_3_Template(rf, ctx) { if (rf & 1) {
154
+ const _r33 = i0.ɵɵgetCurrentView();
155
+ i0.ɵɵelementStart(0, "mat-form-field", 14)(1, "div", 15)(2, "input", 16, 17);
156
+ i0.ɵɵlistener("ngModelChange", function InfoInputComponent_mat_form_field_3_Template_input_ngModelChange_2_listener($event) { i0.ɵɵrestoreView(_r33); const ctx_r32 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r32.value = $event); })("change", function InfoInputComponent_mat_form_field_3_Template_input_change_2_listener() { i0.ɵɵrestoreView(_r33); const ctx_r34 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r34.writeValue(ctx_r34.value)); });
157
+ i0.ɵɵelementEnd();
158
+ i0.ɵɵelementStart(4, "div", 18);
159
+ i0.ɵɵlistener("click", function InfoInputComponent_mat_form_field_3_Template_div_click_4_listener() { i0.ɵɵrestoreView(_r33); const _r30 = i0.ɵɵreference(3); return i0.ɵɵresetView(_r30.click()); });
160
+ i0.ɵɵelementEnd();
161
+ i0.ɵɵelementStart(5, "input", 19);
162
+ i0.ɵɵlistener("ngModelChange", function InfoInputComponent_mat_form_field_3_Template_input_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r33); const ctx_r36 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r36.value = $event); })("input", function InfoInputComponent_mat_form_field_3_Template_input_input_5_listener() { i0.ɵɵrestoreView(_r33); const ctx_r37 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r37.onChangeValue()); })("blur", function InfoInputComponent_mat_form_field_3_Template_input_blur_5_listener() { i0.ɵɵrestoreView(_r33); const ctx_r38 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r38.onBlur()); });
163
+ i0.ɵɵpipe(6, "translate");
164
+ i0.ɵɵelementEnd();
165
+ i0.ɵɵtemplate(7, InfoInputComponent_mat_form_field_3_mat_icon_7_Template, 2, 1, "mat-icon", 4);
166
+ i0.ɵɵelementEnd()();
167
+ } if (rf & 2) {
168
+ const ctx_r3 = i0.ɵɵnextContext();
169
+ i0.ɵɵadvance(2);
170
+ i0.ɵɵproperty("ngModel", ctx_r3.value)("readonly", ctx_r3.readonly)("disabled", ctx_r3.disabled);
171
+ i0.ɵɵadvance(2);
172
+ i0.ɵɵstyleProp("background-color", ctx_r3.value);
173
+ i0.ɵɵadvance(1);
174
+ i0.ɵɵproperty("tabindex", ctx_r3.tabindex)("placeholder", i0.ɵɵpipeBind1(6, 13, ctx_r3.placeholder))("ngModel", ctx_r3.value)("maxlength", ctx_r3.maxlength)("readonly", ctx_r3.readonly)("disabled", ctx_r3.disabled)("required", ctx_r3.required);
175
+ i0.ɵɵadvance(2);
176
+ i0.ɵɵproperty("ngIf", ctx_r3.iconSuffix);
177
+ } }
178
+ export class InfoInputComponent {
179
+ constructor() {
180
+ this.disabled = false;
181
+ this.readonly = false;
182
+ this.required = false;
183
+ this.type = 'text';
184
+ this.rows = 1;
185
+ this.tabindex = 0;
186
+ this.iconPrefix = '';
187
+ this.iconSuffix = '';
188
+ this.min = -99999999999999.999999999;
189
+ this.max = 99999999999999.999999999;
190
+ this.step = null;
191
+ this.onblur = new EventEmitter();
192
+ this.maskOptions = {
193
+ align: 'right',
194
+ allowNegative: true,
195
+ decimal: ',',
196
+ precision: 2,
197
+ prefix: '',
198
+ suffix: '',
199
+ thousands: '.'
200
+ };
201
+ this.value = '';
202
+ this.customMask = null;
203
+ this.passwordMode = false;
204
+ this.methodIsmask = null;
205
+ }
206
+ ngOnInit() {
207
+ this.passwordMode = this.type.toLocaleLowerCase() == 'password';
208
+ }
209
+ get ismask() {
210
+ return this.methodIsmask;
211
+ }
212
+ set ismask(value) {
213
+ this.methodIsmask = value;
214
+ if (this.methodIsmask != null) {
215
+ this.methodIsmask = this.methodIsmask.toLowerCase();
216
+ if (this.methodIsmask == 'int')
217
+ this.maskOptions.precision = 0;
218
+ else if (this.methodIsmask[0] == 'n' && (this.methodIsmask.length == 2 || this.methodIsmask.length == 3))
219
+ this.maskOptions.precision = parseInt(this.methodIsmask.replace('n', ''));
220
+ else
221
+ this.customMask = this.methodIsmask;
222
+ }
223
+ }
224
+ onBlur() {
225
+ if (this.type == 'number' || (this.ismask != null && this.ismask.startsWith("n"))) {
226
+ if (this.min != null)
227
+ this.value = this.min > Number(this.value) ? null : this.value;
228
+ if (this.max != null)
229
+ this.value = this.max < Number(this.value) ? null : this.value;
230
+ this.onChangeValue();
231
+ }
232
+ if (this.onblur != null)
233
+ this.onblur.emit(this.value);
234
+ }
235
+ onChangeValue() {
236
+ if (this.onChange != null)
237
+ this.onChange(this.value);
238
+ }
239
+ writeValue(modelValue) {
240
+ this.value = modelValue;
241
+ this.onChangeValue();
242
+ }
243
+ registerOnChange(fn) {
244
+ this.onChange = fn;
245
+ }
246
+ registerOnTouched(fn) {
247
+ this.onTouched = fn;
248
+ }
249
+ setDisabledState(isDisabled) {
250
+ this.disabled = isDisabled;
251
+ }
252
+ }
253
+ /** @nocollapse */ InfoInputComponent.ɵfac = function InfoInputComponent_Factory(t) { return new (t || InfoInputComponent)(); };
254
+ /** @nocollapse */ InfoInputComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: InfoInputComponent, selectors: [["info-input"]], inputs: { placeholder: "placeholder", disabled: "disabled", readonly: "readonly", required: "required", maxlength: "maxlength", type: "type", rows: "rows", tabindex: "tabindex", iconPrefix: "iconPrefix", iconSuffix: "iconSuffix", min: "min", max: "max", step: "step", ismask: "ismask" }, outputs: { onblur: "onblur" }, features: [i0.ɵɵProvidersFeature([
255
+ {
256
+ provide: NG_VALUE_ACCESSOR,
257
+ useExisting: forwardRef((() => InfoInputComponent)),
258
+ multi: true
259
+ }
260
+ ])], decls: 4, vars: 4, consts: [[4, "ngIf"], ["class", "input-color", 4, "ngIf"], ["matPrefix", "", "style", "color: #aaa", 4, "ngIf"], ["matInput", "", 3, "type", "step", "min", "max", "tabindex", "placeholder", "ngModel", "maxlength", "readonly", "disabled", "required", "ngModelChange", "input", "blur"], ["matSuffix", "", "style", "color: #aaa", 4, "ngIf"], ["class", "show-password", "matSuffix", "", 3, "click", 4, "ngIf"], ["matPrefix", "", 2, "color", "#aaa"], ["matSuffix", "", 2, "color", "#aaa"], ["matSuffix", "", 1, "show-password", 3, "click"], ["matInput", "", "currencyMask", "", 3, "tabindex", "placeholder", "ngModel", "readonly", "disabled", "required", "options", "ngModelChange", "blur", 4, "ngIf"], ["matInput", "", "unmask", "", 3, "tabindex", "placeholder", "ngModel", "readonly", "disabled", "required", "setmask", "ngModelChange", "blur", 4, "ngIf"], ["matInput", "", "currencyMask", "", 3, "tabindex", "placeholder", "ngModel", "readonly", "disabled", "required", "options", "ngModelChange", "blur"], ["matInput", "", "unmask", "", 3, "tabindex", "placeholder", "ngModel", "readonly", "disabled", "required", "setmask", "ngModelChange", "blur"], ["matInput", "", 3, "tabindex", "placeholder", "ngModel", "rows", "maxlength", "readonly", "disabled", "required", "ngModelChange", "input", "blur"], [1, "input-color"], [1, "input-color-container"], ["type", "color", 2, "width", "0px", "visibility", "hidden", 3, "ngModel", "readonly", "disabled", "ngModelChange", "change"], ["colorInput", ""], [1, "color-picker", 3, "click"], ["matInput", "", "type", "text", 3, "tabindex", "placeholder", "ngModel", "maxlength", "readonly", "disabled", "required", "ngModelChange", "input", "blur"]], template: function InfoInputComponent_Template(rf, ctx) { if (rf & 1) {
261
+ i0.ɵɵtemplate(0, InfoInputComponent_mat_form_field_0_Template, 6, 16, "mat-form-field", 0);
262
+ i0.ɵɵtemplate(1, InfoInputComponent_mat_form_field_1_Template, 5, 4, "mat-form-field", 0);
263
+ i0.ɵɵtemplate(2, InfoInputComponent_mat_form_field_2_Template, 4, 11, "mat-form-field", 0);
264
+ i0.ɵɵtemplate(3, InfoInputComponent_mat_form_field_3_Template, 8, 15, "mat-form-field", 1);
265
+ } if (rf & 2) {
266
+ i0.ɵɵproperty("ngIf", ctx.type != "color" && ctx.type != "textarea" && ctx.ismask == null);
267
+ i0.ɵɵadvance(1);
268
+ i0.ɵɵproperty("ngIf", ctx.type != "color" && ctx.type != "textarea" && ctx.ismask != null);
269
+ i0.ɵɵadvance(1);
270
+ i0.ɵɵproperty("ngIf", ctx.type == "textarea");
271
+ i0.ɵɵadvance(1);
272
+ i0.ɵɵproperty("ngIf", ctx.type == "color");
273
+ } }, dependencies: [i1.NgIf, i2.DefaultValueAccessor, i2.NgControlStatus, i2.RequiredValidator, i2.MaxLengthValidator, i2.NgModel, i3.MatIcon, i4.MatFormField, i4.MatPrefix, i4.MatSuffix, i5.MatInput, i6.CurrencyMaskDirective, i7.InfoMaskDirective, i8.InfoUnmaskDirective, i9.InfoTranslatePipe], styles: ["[_nghost-%COMP%] .input-color[_ngcontent-%COMP%] .mat-form-field-label{transition:transform .4s cubic-bezier(.25,.8,.25,1),color .4s cubic-bezier(.25,.8,.25,1),width .4s cubic-bezier(.25,.8,.25,1),margin .4s cubic-bezier(.25,.8,.25,1)}[_nghost-%COMP%] .input-color[_ngcontent-%COMP%]:not(.mat-form-field-should-float) .mat-form-field-label{margin-left:40px}[_nghost-%COMP%] .input-color.mat-form-field-should-float[_ngcontent-%COMP%] .mat-form-field-label{margin-left:0}[_nghost-%COMP%] .input-color[_ngcontent-%COMP%] .input-color-container[_ngcontent-%COMP%]{display:flex}[_nghost-%COMP%] .input-color[_ngcontent-%COMP%] .input-color-container[_ngcontent-%COMP%] input[type=color][_ngcontent-%COMP%]{width:0px;height:0px;visibility:hidden}[_nghost-%COMP%] .input-color[_ngcontent-%COMP%] .input-color-container[_ngcontent-%COMP%] .color-picker[_ngcontent-%COMP%]{width:30px;border:solid 1px black;border-radius:5px;margin-right:5px}"] });
274
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(InfoInputComponent, [{
275
+ type: Component,
276
+ args: [{ selector: 'info-input', providers: [
277
+ {
278
+ provide: NG_VALUE_ACCESSOR,
279
+ useExisting: forwardRef((() => InfoInputComponent)),
280
+ multi: true
281
+ }
282
+ ], template: "<mat-form-field *ngIf=\"type != 'color' && type != 'textarea' && ismask == null\" >\r\n <mat-icon *ngIf=\"iconPrefix\" matPrefix style=\"color: #aaa\">{{iconPrefix}}</mat-icon>\r\n \r\n <input matInput [type]=\"type\" [step]=\"step\" [min]=\"min\" [max]=\"max\" [tabindex]=\"tabindex\" [placeholder]=\"placeholder | translate\" [(ngModel)]=\"value\" (input)=\"onChangeValue()\" (blur)=\"onBlur()\"\r\n [maxlength]=\"maxlength\" [readonly]=\"readonly\" [disabled]=\"disabled\" [required]=\"required\">\r\n\r\n <mat-icon *ngIf=\"iconSuffix\" matSuffix style=\"color: #aaa\">{{iconSuffix}}</mat-icon>\r\n <mat-icon class=\"show-password\" *ngIf=\"passwordMode\" (click)=\"type = (type == 'password') ? 'text' : 'password'\" matSuffix >visibility{{ type == 'password' ? '' : '_off' }}</mat-icon>\r\n</mat-form-field>\r\n\r\n<mat-form-field *ngIf=\"type != 'color' && type != 'textarea' && ismask != null\">\r\n <mat-icon *ngIf=\"iconPrefix\" matPrefix style=\"color: #aaa\">{{iconPrefix}}</mat-icon>\r\n\r\n <input matInput [tabindex]=\"tabindex\" [placeholder]=\"placeholder | translate\" [(ngModel)]=\"value\" (ngModelChange)=\"onChangeValue()\" (blur)=\"onBlur()\" *ngIf=\"customMask == null\"\r\n [readonly]=\"readonly\" [disabled]=\"disabled\" [required]=\"required\" [options]=\"maskOptions\" currencyMask>\r\n\r\n <input matInput [tabindex]=\"tabindex\" [placeholder]=\"placeholder | translate\" [(ngModel)]=\"value\" (ngModelChange)=\"onChangeValue()\" (blur)=\"onBlur()\" *ngIf=\"customMask != null\"\r\n [readonly]=\"readonly\" [disabled]=\"disabled\" [required]=\"required\" [setmask]=\"customMask\" unmask >\r\n\r\n <mat-icon *ngIf=\"iconSuffix\" matSuffix style=\"color: #aaa\">{{iconSuffix}}</mat-icon>\r\n</mat-form-field>\r\n\r\n<mat-form-field *ngIf=\"type == 'textarea'\">\r\n <mat-icon *ngIf=\"iconPrefix\" matPrefix style=\"color: #aaa\">{{iconPrefix}}</mat-icon>\r\n \r\n <textarea matInput [tabindex]=\"tabindex\" [placeholder]=\"placeholder | translate\" [(ngModel)]=\"value\" (input)=\"onChangeValue()\" (blur)=\"onBlur()\" [rows]=\"rows\"\r\n [maxlength]=\"maxlength\" [readonly]=\"readonly\" [disabled]=\"disabled\" [required]=\"required\"></textarea>\r\n</mat-form-field>\r\n\r\n<mat-form-field class=\"input-color\" *ngIf=\"type == 'color'\">\r\n \r\n <div class=\"input-color-container\">\r\n <input #colorInput style=\"width: 0px;visibility: hidden;\" type=\"color\" [(ngModel)]=\"value\" (change)=\"writeValue(value)\" [readonly]=\"readonly\" [disabled]=\"disabled\">\r\n <div class=\"color-picker\" [style.background-color]=\"value\" (click)=\"colorInput.click()\"></div>\r\n \r\n <input matInput type=\"text\" [tabindex]=\"tabindex\" [placeholder]=\"placeholder | translate\" [(ngModel)]=\"value\" (input)=\"onChangeValue()\" (blur)=\"onBlur()\"\r\n [maxlength]=\"maxlength\" [readonly]=\"readonly\" [disabled]=\"disabled\" [required]=\"required\">\r\n \r\n <mat-icon *ngIf=\"iconSuffix\" matSuffix style=\"color: #aaa\">{{iconSuffix}}</mat-icon>\r\n </div>\r\n</mat-form-field>", styles: [":host .input-color ::ng-deep .mat-form-field-label{transition:transform .4s cubic-bezier(.25,.8,.25,1),color .4s cubic-bezier(.25,.8,.25,1),width .4s cubic-bezier(.25,.8,.25,1),margin .4s cubic-bezier(.25,.8,.25,1)}:host .input-color:not(.mat-form-field-should-float) ::ng-deep .mat-form-field-label{margin-left:40px}:host .input-color.mat-form-field-should-float ::ng-deep .mat-form-field-label{margin-left:0}:host .input-color .input-color-container{display:flex}:host .input-color .input-color-container input[type=color]{width:0px;height:0px;visibility:hidden}:host .input-color .input-color-container .color-picker{width:30px;border:solid 1px black;border-radius:5px;margin-right:5px}\n"] }]
283
+ }], null, { placeholder: [{
284
+ type: Input
285
+ }], disabled: [{
286
+ type: Input
287
+ }], readonly: [{
288
+ type: Input
289
+ }], required: [{
290
+ type: Input
291
+ }], maxlength: [{
292
+ type: Input
293
+ }], type: [{
294
+ type: Input
295
+ }], rows: [{
296
+ type: Input
297
+ }], tabindex: [{
298
+ type: Input
299
+ }], iconPrefix: [{
300
+ type: Input
301
+ }], iconSuffix: [{
302
+ type: Input
303
+ }], min: [{
304
+ type: Input
305
+ }], max: [{
306
+ type: Input
307
+ }], step: [{
308
+ type: Input
309
+ }], onblur: [{
310
+ type: Output
311
+ }], ismask: [{
312
+ type: Input
313
+ }] }); })();
314
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW5mby1saWJyYXJ5L3NyYy9jb250cm9scy9pbnB1dC9pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbmZvLWxpYnJhcnkvc3JjL2NvbnRyb2xzL2lucHV0L2lucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBd0IsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7O0lDQXJFLG1DQUEyRDtJQUFBLFlBQWM7SUFBQSxpQkFBVzs7O0lBQXpCLGVBQWM7SUFBZCx1Q0FBYzs7O0lBS3pFLG1DQUEyRDtJQUFBLFlBQWM7SUFBQSxpQkFBVzs7O0lBQXpCLGVBQWM7SUFBZCx1Q0FBYzs7OztJQUN6RSxtQ0FBNEg7SUFBdkUsb09BQXlCLFVBQVUsR0FBSSxNQUFNLEdBQUcsVUFBVSxLQUFDO0lBQVksWUFBZ0Q7SUFBQSxpQkFBVzs7O0lBQTNELGVBQWdEO0lBQWhELGdGQUFnRDs7OztJQVBoTCxzQ0FBaUY7SUFDN0UsOEZBQW9GO0lBRXBGLGdDQUM4RjtJQURvQyx5T0FBbUIsOEpBQVUsZUFBQSx1QkFBZSxDQUFBLElBQXpCLDRKQUFtQyxlQUFBLGdCQUFRLENBQUEsSUFBM0M7O0lBQXJKLGlCQUM4RjtJQUU5Riw4RkFBb0Y7SUFDcEYsOEZBQXVMO0lBQzNMLGlCQUFpQjs7O0lBUEYsZUFBZ0I7SUFBaEIsd0NBQWdCO0lBRVgsZUFBYTtJQUFiLGtDQUFhLHFCQUFBLG1CQUFBLG1CQUFBLDZCQUFBLDBEQUFBLHlCQUFBLCtCQUFBLDZCQUFBLDZCQUFBLDZCQUFBO0lBR2xCLGVBQWdCO0lBQWhC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LE1BQU07a0JBQWYsTUFBTTtZQXdCSCxNQUFNO2tCQURULEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsIElucHV0LCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnaW5mby1pbnB1dCcsXHJcbiAgICBzdHlsZVVybHM6IFsgJ2lucHV0LmNvbXBvbmVudC5zY3NzJyBdLFxyXG4gICAgdGVtcGxhdGVVcmw6ICdpbnB1dC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBwcm92aWRlcnM6W1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEluZm9JbnB1dENvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5mb0lucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIG1heGxlbmd0aDogYW55O1xyXG4gICAgQElucHV0KCkgdHlwZTogc3RyaW5nID0gJ3RleHQnO1xyXG4gICAgQElucHV0KCkgcm93czogbnVtYmVyID0gMTtcclxuICAgIEBJbnB1dCgpIHRhYmluZGV4OiBudW1iZXIgPSAwO1xyXG4gICAgQElucHV0KCkgaWNvblByZWZpeDogc3RyaW5nID0gJyc7XHJcbiAgICBASW5wdXQoKSBpY29uU3VmZml4OiBzdHJpbmcgPSAnJztcclxuICAgIEBJbnB1dCgpIG1pbjogbnVtYmVyID0gLTk5OTk5OTk5OTk5OTk5Ljk5OTk5OTk5OTtcclxuICAgIEBJbnB1dCgpIG1heDogbnVtYmVyID0gOTk5OTk5OTk5OTk5OTkuOTk5OTk5OTk5O1xyXG4gICAgQElucHV0KCkgc3RlcDogbnVtYmVyID0gbnVsbDtcclxuXHJcbiAgICBAT3V0cHV0KCkgb25ibHVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgXHJcbiAgICBtYXNrT3B0aW9uczogYW55ID0ge1xyXG4gICAgICAgIGFsaWduOiAncmlnaHQnLFxyXG4gICAgICAgIGFsbG93TmVnYXRpdmU6IHRydWUsXHJcbiAgICAgICAgZGVjaW1hbDogJywnLFxyXG4gICAgICAgIHByZWNpc2lvbjogMixcclxuICAgICAgICBwcmVmaXg6ICcnLFxyXG4gICAgICAgIHN1ZmZpeDogJycsXHJcbiAgICAgICAgdGhvdXNhbmRzOiAnLidcclxuICAgIH07XHJcbiAgICBcclxuICAgIHZhbHVlOiBzdHJpbmcgPSAnJztcclxuICAgIGN1c3RvbU1hc2s6IHN0cmluZyA9IG51bGw7XHJcbiAgICBvbkNoYW5nZTogYW55O1xyXG4gICAgb25Ub3VjaGVkOiBhbnk7XHJcbiAgICBwYXNzd29yZE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBuZ09uSW5pdCgpIHsgXHJcbiAgICAgICAgdGhpcy5wYXNzd29yZE1vZGUgPSB0aGlzLnR5cGUudG9Mb2NhbGVMb3dlckNhc2UoKSA9PSAncGFzc3dvcmQnO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWV0aG9kSXNtYXNrOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBpc21hc2soKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5tZXRob2RJc21hc2s7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGlzbWFzayh2YWx1ZSl7XHJcbiAgICAgICAgdGhpcy5tZXRob2RJc21hc2sgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubWV0aG9kSXNtYXNrICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5tZXRob2RJc21hc2sgPSB0aGlzLm1ldGhvZElzbWFzay50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHRoaXMubWV0aG9kSXNtYXNrID09ICdpbnQnKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXNrT3B0aW9ucy5wcmVjaXNpb24gPSAwO1xyXG5cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tZXRob2RJc21hc2tbMF0gPT0gJ24nICYmICh0aGlzLm1ldGhvZElzbWFzay5sZW5ndGggPT0gMiB8fCB0aGlzLm1ldGhvZElzbWFzay5sZW5ndGggPT0gMykpXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hc2tPcHRpb25zLnByZWNpc2lvbiA9IHBhcnNlSW50KHRoaXMubWV0aG9kSXNtYXNrLnJlcGxhY2UoJ24nLCAnJykpO1xyXG5cclxuICAgICAgICAgICAgZWxzZSB0aGlzLmN1c3RvbU1hc2sgPSB0aGlzLm1ldGhvZElzbWFzaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25CbHVyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT0gJ251bWJlcicgfHwgKHRoaXMuaXNtYXNrICE9IG51bGwgJiYgdGhpcy5pc21hc2suc3RhcnRzV2l0aChcIm5cIikpKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1pbiAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluID4gTnVtYmVyKHRoaXMudmFsdWUpID8gbnVsbCA6IHRoaXMudmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5tYXggIT0gbnVsbClcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1heCA8IE51bWJlcih0aGlzLnZhbHVlKSA/IG51bGwgOiB0aGlzLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZVZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5vbmJsdXIgIT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5vbmJsdXIuZW1pdCh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZVZhbHVlKCl7XHJcbiAgICAgICAgaWYgKHRoaXMub25DaGFuZ2UgIT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICB3cml0ZVZhbHVlKG1vZGVsVmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBtb2RlbFZhbHVlO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgICB9XHJcbn0iLCI8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJ0eXBlICE9ICdjb2xvcicgJiYgdHlwZSAhPSAndGV4dGFyZWEnICYmIGlzbWFzayA9PSBudWxsXCIgPlxyXG4gICAgPG1hdC1pY29uICpuZ0lmPVwiaWNvblByZWZpeFwiIG1hdFByZWZpeCBzdHlsZT1cImNvbG9yOiAjYWFhXCI+e3tpY29uUHJlZml4fX08L21hdC1pY29uPlxyXG4gICAgXHJcbiAgICA8aW5wdXQgbWF0SW5wdXQgW3R5cGVdPVwidHlwZVwiIFtzdGVwXT1cInN0ZXBcIiBbbWluXT1cIm1pblwiIFttYXhdPVwibWF4XCIgW3RhYmluZGV4XT1cInRhYmluZGV4XCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIChpbnB1dCk9XCJvbkNoYW5nZVZhbHVlKClcIiAoYmx1cik9XCJvbkJsdXIoKVwiXHJcbiAgICAgICAgW21heGxlbmd0aF09XCJtYXhsZW5ndGhcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIj5cclxuXHJcbiAgICA8bWF0LWljb24gKm5nSWY9XCJpY29uU3VmZml4XCIgbWF0U3VmZml4IHN0eWxlPVwiY29sb3I6ICNhYWFcIj57e2ljb25TdWZmaXh9fTwvbWF0LWljb24+XHJcbiAgICA8bWF0LWljb24gY2xhc3M9XCJzaG93LXBhc3N3b3JkXCIgKm5nSWY9XCJwYXNzd29yZE1vZGVcIiAoY2xpY2spPVwidHlwZSA9ICh0eXBlID09ICdwYXNzd29yZCcpID8gJ3RleHQnIDogJ3Bhc3N3b3JkJ1wiIG1hdFN1ZmZpeCA+dmlzaWJpbGl0eXt7IHR5cGUgPT0gJ3Bhc3N3b3JkJyA/ICcnIDogJ19vZmYnIH19PC9tYXQtaWNvbj5cclxuPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbjxtYXQtZm9ybS1maWVsZCAqbmdJZj1cInR5cGUgIT0gJ2NvbG9yJyAmJiB0eXBlICE9ICd0ZXh0YXJlYScgJiYgaXNtYXNrICE9IG51bGxcIj5cclxuICAgIDxtYXQtaWNvbiAqbmdJZj1cImljb25QcmVmaXhcIiBtYXRQcmVmaXggc3R5bGU9XCJjb2xvcjogI2FhYVwiPnt7aWNvblByZWZpeH19PC9tYXQtaWNvbj5cclxuXHJcbiAgICA8aW5wdXQgbWF0SW5wdXQgW3RhYmluZGV4XT1cInRhYmluZGV4XCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hhbmdlVmFsdWUoKVwiIChibHVyKT1cIm9uQmx1cigpXCIgKm5nSWY9XCJjdXN0b21NYXNrID09IG51bGxcIlxyXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiIFtvcHRpb25zXT1cIm1hc2tPcHRpb25zXCIgY3VycmVuY3lNYXNrPlxyXG5cclxuICAgIDxpbnB1dCBtYXRJbnB1dCBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2VWYWx1ZSgpXCIgKGJsdXIpPVwib25CbHVyKClcIiAqbmdJZj1cImN1c3RvbU1hc2sgIT0gbnVsbFwiXHJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCIgW3NldG1hc2tdPVwiY3VzdG9tTWFza1wiIHVubWFzayA+XHJcblxyXG4gICAgPG1hdC1pY29uICpuZ0lmPVwiaWNvblN1ZmZpeFwiIG1hdFN1ZmZpeCBzdHlsZT1cImNvbG9yOiAjYWFhXCI+e3tpY29uU3VmZml4fX08L21hdC1pY29uPlxyXG48L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwidHlwZSA9PSAndGV4dGFyZWEnXCI+XHJcbiAgICA8bWF0LWljb24gKm5nSWY9XCJpY29uUHJlZml4XCIgbWF0UHJlZml4IHN0eWxlPVwiY29sb3I6ICNhYWFcIj57e2ljb25QcmVmaXh9fTwvbWF0LWljb24+XHJcbiAgICBcclxuICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIiBbKG5nTW9kZWwpXT1cInZhbHVlXCIgKGlucHV0KT1cIm9uQ2hhbmdlVmFsdWUoKVwiIChibHVyKT1cIm9uQmx1cigpXCIgW3Jvd3NdPVwicm93c1wiXHJcbiAgICAgICAgW21heGxlbmd0aF09XCJtYXhsZW5ndGhcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIj48L3RleHRhcmVhPlxyXG48L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiaW5wdXQtY29sb3JcIiAqbmdJZj1cInR5cGUgPT0gJ2NvbG9yJ1wiPlxyXG4gICAgXHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29sb3ItY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGlucHV0ICNjb2xvcklucHV0IHN0eWxlPVwid2lkdGg6IDBweDt2aXNpYmlsaXR5OiBoaWRkZW47XCIgdHlwZT1cImNvbG9yXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIChjaGFuZ2UpPVwid3JpdGVWYWx1ZSh2YWx1ZSlcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sb3ItcGlja2VyXCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwidmFsdWVcIiAoY2xpY2spPVwiY29sb3JJbnB1dC5jbGljaygpXCI+PC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgW3RhYmluZGV4XT1cInRhYmluZGV4XCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlXCIgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiIChpbnB1dCk9XCJvbkNoYW5nZVZhbHVlKClcIiAoYmx1cik9XCJvbkJsdXIoKVwiXHJcbiAgICAgICAgW21heGxlbmd0aF09XCJtYXhsZW5ndGhcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIj5cclxuICAgICAgICBcclxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpY29uU3VmZml4XCIgbWF0U3VmZml4IHN0eWxlPVwiY29sb3I6ICNhYWFcIj57e2ljb25TdWZmaXh9fTwvbWF0LWljb24+XHJcbiAgICA8L2Rpdj5cclxuPC9tYXQtZm9ybS1maWVsZD4iXX0=