ng-tailwind 5.2.1 → 5.2.2

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 (212) hide show
  1. package/README.md +24 -24
  2. package/animations/ngt-angular-animations.d.ts +5 -5
  3. package/base/ngt-base-ng-model.d.ts +32 -32
  4. package/components/ngt-action/ngt-action.component.d.ts +30 -30
  5. package/components/ngt-action/ngt-action.module.d.ts +10 -10
  6. package/components/ngt-button/ngt-button.component.d.ts +35 -35
  7. package/components/ngt-button/ngt-button.module.d.ts +10 -10
  8. package/components/ngt-checkbox/ngt-checkbox.component.d.ts +53 -53
  9. package/components/ngt-checkbox/ngt-checkbox.module.d.ts +10 -10
  10. package/components/ngt-content/ngt-content.component.d.ts +12 -12
  11. package/components/ngt-content/ngt-content.module.d.ts +8 -8
  12. package/components/ngt-context-menu/ngt-context-menu.component.d.ts +19 -19
  13. package/components/ngt-context-menu/ngt-context-menu.directive.d.ts +25 -25
  14. package/components/ngt-context-menu/ngt-context-menu.module.d.ts +10 -10
  15. package/components/ngt-datatable/ngt-datatable.component.d.ts +125 -125
  16. package/components/ngt-datatable/ngt-datatable.module.d.ts +25 -25
  17. package/components/ngt-datatable/ngt-tbody/ngt-tbody.component.d.ts +14 -14
  18. package/components/ngt-datatable/ngt-td/ngt-td.component.d.ts +14 -14
  19. package/components/ngt-datatable/ngt-td-check/ngt-td-check.component.d.ts +29 -29
  20. package/components/ngt-datatable/ngt-th/ngt-th.component.d.ts +55 -55
  21. package/components/ngt-datatable/ngt-th-check/ngt-th-check.component.d.ts +32 -32
  22. package/components/ngt-datatable/ngt-thead/ngt-thead.component.d.ts +13 -13
  23. package/components/ngt-datatable/ngt-tr/ngt-tr.component.d.ts +20 -20
  24. package/components/ngt-date/ngt-date.component.d.ts +85 -85
  25. package/components/ngt-date/ngt-date.module.d.ts +13 -13
  26. package/components/ngt-dropdown/ngt-dropdown-container/ngt-dropdown-container.component.d.ts +8 -8
  27. package/components/ngt-dropdown/ngt-dropdown.component.d.ts +53 -53
  28. package/components/ngt-dropdown/ngt-dropdown.module.d.ts +9 -9
  29. package/components/ngt-dropzone/custom-dropzone-preview/custom-dropzone-preview.component.d.ts +14 -14
  30. package/components/ngt-dropzone/ngt-dropzone-file-viewer/ngt-dropzone-file-viewer.component.d.ts +25 -25
  31. package/components/ngt-dropzone/ngt-dropzone-view/ngt-dropzone-view.component.d.ts +35 -35
  32. package/components/ngt-dropzone/ngt-dropzone.component.d.ts +95 -95
  33. package/components/ngt-dropzone/ngt-dropzone.meta.d.ts +27 -27
  34. package/components/ngt-dropzone/ngt-dropzone.module.d.ts +17 -17
  35. package/components/ngt-floating-button/ngt-floating-button.component.d.ts +35 -35
  36. package/components/ngt-floating-button/ngt-floating-button.module.d.ts +10 -10
  37. package/components/ngt-form/ngt-form-validation-message/ngt-form-validation-message.component.d.ts +10 -10
  38. package/components/ngt-form/ngt-form.component.d.ts +60 -60
  39. package/components/ngt-form/ngt-form.module.d.ts +9 -9
  40. package/components/ngt-header-nav/ngt-header-nav.component.d.ts +14 -14
  41. package/components/ngt-header-nav/ngt-header-nav.module.d.ts +8 -8
  42. package/components/ngt-helper/ngt-helper.component.d.ts +25 -25
  43. package/components/ngt-helper/ngt-helper.module.d.ts +10 -10
  44. package/components/ngt-input/ngt-input.component.d.ts +129 -129
  45. package/components/ngt-input/ngt-input.module.d.ts +14 -14
  46. package/components/ngt-modal/ngt-modal-body/ngt-modal-body.component.d.ts +17 -17
  47. package/components/ngt-modal/ngt-modal-footer/ngt-modal-footer.component.d.ts +12 -12
  48. package/components/ngt-modal/ngt-modal-header/ngt-modal-header.component.d.ts +15 -15
  49. package/components/ngt-modal/ngt-modal.component.d.ts +31 -31
  50. package/components/ngt-modal/ngt-modal.module.d.ts +11 -11
  51. package/components/ngt-multi-select/ngt-multi-select.component.d.ts +116 -116
  52. package/components/ngt-multi-select/ngt-multi-select.module.d.ts +15 -15
  53. package/components/ngt-pagination/ngt-pagination.component.d.ts +43 -43
  54. package/components/ngt-pagination/ngt-pagination.module.d.ts +12 -12
  55. package/components/ngt-popover/ngt-popover-tooltip/ngt-popover-tooltip.component.d.ts +21 -21
  56. package/components/ngt-popover/ngt-popover.component.d.ts +31 -31
  57. package/components/ngt-popover/ngt-popover.directive.d.ts +31 -31
  58. package/components/ngt-popover/ngt-popover.module.d.ts +11 -11
  59. package/components/ngt-portlet/ngt-portlet-body/ngt-portlet-body.component.d.ts +12 -12
  60. package/components/ngt-portlet/ngt-portlet-footer/ngt-portlet-footer.component.d.ts +12 -12
  61. package/components/ngt-portlet/ngt-portlet-header/ngt-portlet-header.component.d.ts +18 -18
  62. package/components/ngt-portlet/ngt-portlet.component.d.ts +20 -20
  63. package/components/ngt-portlet/ngt-portlet.module.d.ts +13 -13
  64. package/components/ngt-radio-button/ngt-radio-button-container/ngt-radio-button-container.component.d.ts +9 -9
  65. package/components/ngt-radio-button/ngt-radio-button.component.d.ts +45 -45
  66. package/components/ngt-radio-button/ngt-radio-button.module.d.ts +11 -11
  67. package/components/ngt-section/ngt-section.component.d.ts +38 -38
  68. package/components/ngt-section/ngt-section.module.d.ts +11 -11
  69. package/components/ngt-select/ngt-select.component.d.ts +154 -154
  70. package/components/ngt-select/ngt-select.directive.d.ts +20 -20
  71. package/components/ngt-select/ngt-select.module.d.ts +16 -16
  72. package/components/ngt-shining/ngt-shining.component.d.ts +19 -19
  73. package/components/ngt-shining/ngt-shining.module.d.ts +8 -8
  74. package/components/ngt-sidenav/ngt-sidenav.component.d.ts +32 -32
  75. package/components/ngt-sidenav/ngt-sidenav.module.d.ts +8 -8
  76. package/components/ngt-slider/ngt-slider.component.d.ts +36 -36
  77. package/components/ngt-slider/ngt-slider.module.d.ts +9 -9
  78. package/components/ngt-svg/ngt-svg.component.d.ts +13 -13
  79. package/components/ngt-svg/ngt-svg.module.d.ts +10 -10
  80. package/components/ngt-tag/ngt-tag.component.d.ts +13 -13
  81. package/components/ngt-tag/ngt-tag.module.d.ts +9 -9
  82. package/components/ngt-textarea/ngt-textarea.component.d.ts +49 -49
  83. package/components/ngt-textarea/ngt-textarea.module.d.ts +13 -13
  84. package/components/ngt-validation/ngt-validation.component.d.ts +13 -13
  85. package/components/ngt-validation/ngt-validation.module.d.ts +8 -8
  86. package/directives/ngt-stylizable/ngt-stylizable.directive.d.ts +68 -68
  87. package/directives/ngt-stylizable/ngt-stylizable.module.d.ts +8 -8
  88. package/enums/size.enum.d.ts +8 -8
  89. package/esm2020/animations/ngt-angular-animations.mjs +34 -34
  90. package/esm2020/base/ngt-base-ng-model.mjs +90 -90
  91. package/esm2020/components/ngt-action/ngt-action.component.mjs +96 -96
  92. package/esm2020/components/ngt-action/ngt-action.module.mjs +28 -28
  93. package/esm2020/components/ngt-button/ngt-button.component.mjs +142 -142
  94. package/esm2020/components/ngt-button/ngt-button.module.mjs +28 -28
  95. package/esm2020/components/ngt-checkbox/ngt-checkbox.component.mjs +192 -192
  96. package/esm2020/components/ngt-checkbox/ngt-checkbox.module.mjs +28 -28
  97. package/esm2020/components/ngt-content/ngt-content.component.mjs +32 -32
  98. package/esm2020/components/ngt-content/ngt-content.module.mjs +20 -20
  99. package/esm2020/components/ngt-context-menu/ngt-context-menu.component.mjs +25 -25
  100. package/esm2020/components/ngt-context-menu/ngt-context-menu.directive.mjs +89 -89
  101. package/esm2020/components/ngt-context-menu/ngt-context-menu.module.mjs +33 -33
  102. package/esm2020/components/ngt-datatable/ngt-datatable.component.mjs +470 -470
  103. package/esm2020/components/ngt-datatable/ngt-datatable.module.mjs +99 -99
  104. package/esm2020/components/ngt-datatable/ngt-tbody/ngt-tbody.component.mjs +57 -57
  105. package/esm2020/components/ngt-datatable/ngt-td/ngt-td.component.mjs +62 -62
  106. package/esm2020/components/ngt-datatable/ngt-td-check/ngt-td-check.component.mjs +113 -113
  107. package/esm2020/components/ngt-datatable/ngt-th/ngt-th.component.mjs +228 -228
  108. package/esm2020/components/ngt-datatable/ngt-th-check/ngt-th-check.component.mjs +127 -127
  109. package/esm2020/components/ngt-datatable/ngt-thead/ngt-thead.component.mjs +55 -55
  110. package/esm2020/components/ngt-datatable/ngt-tr/ngt-tr.component.mjs +86 -86
  111. package/esm2020/components/ngt-date/ngt-date.component.mjs +435 -435
  112. package/esm2020/components/ngt-date/ngt-date.module.mjs +40 -40
  113. package/esm2020/components/ngt-dropdown/ngt-dropdown-container/ngt-dropdown-container.component.mjs +19 -19
  114. package/esm2020/components/ngt-dropdown/ngt-dropdown.component.mjs +204 -204
  115. package/esm2020/components/ngt-dropdown/ngt-dropdown.module.mjs +21 -21
  116. package/esm2020/components/ngt-dropzone/custom-dropzone-preview/custom-dropzone-preview.component.mjs +54 -54
  117. package/esm2020/components/ngt-dropzone/ngt-dropzone-file-viewer/ngt-dropzone-file-viewer.component.mjs +69 -66
  118. package/esm2020/components/ngt-dropzone/ngt-dropzone-view/ngt-dropzone-view.component.mjs +94 -94
  119. package/esm2020/components/ngt-dropzone/ngt-dropzone.component.mjs +496 -496
  120. package/esm2020/components/ngt-dropzone/ngt-dropzone.meta.mjs +24 -24
  121. package/esm2020/components/ngt-dropzone/ngt-dropzone.module.mjs +55 -55
  122. package/esm2020/components/ngt-floating-button/ngt-floating-button.component.mjs +119 -119
  123. package/esm2020/components/ngt-floating-button/ngt-floating-button.module.mjs +28 -28
  124. package/esm2020/components/ngt-form/ngt-form-validation-message/ngt-form-validation-message.component.mjs +22 -22
  125. package/esm2020/components/ngt-form/ngt-form.component.mjs +207 -207
  126. package/esm2020/components/ngt-form/ngt-form.module.mjs +29 -29
  127. package/esm2020/components/ngt-header-nav/ngt-header-nav.component.mjs +39 -39
  128. package/esm2020/components/ngt-header-nav/ngt-header-nav.module.mjs +20 -20
  129. package/esm2020/components/ngt-helper/ngt-helper.component.mjs +68 -68
  130. package/esm2020/components/ngt-helper/ngt-helper.module.mjs +28 -28
  131. package/esm2020/components/ngt-input/ngt-input.component.mjs +844 -844
  132. package/esm2020/components/ngt-input/ngt-input.module.mjs +47 -47
  133. package/esm2020/components/ngt-modal/ngt-modal-body/ngt-modal-body.component.mjs +46 -46
  134. package/esm2020/components/ngt-modal/ngt-modal-footer/ngt-modal-footer.component.mjs +33 -33
  135. package/esm2020/components/ngt-modal/ngt-modal-header/ngt-modal-header.component.mjs +40 -40
  136. package/esm2020/components/ngt-modal/ngt-modal.component.mjs +122 -122
  137. package/esm2020/components/ngt-modal/ngt-modal.module.mjs +39 -39
  138. package/esm2020/components/ngt-multi-select/ngt-multi-select.component.mjs +503 -503
  139. package/esm2020/components/ngt-multi-select/ngt-multi-select.module.mjs +52 -52
  140. package/esm2020/components/ngt-pagination/ngt-pagination.component.mjs +162 -162
  141. package/esm2020/components/ngt-pagination/ngt-pagination.module.mjs +36 -36
  142. package/esm2020/components/ngt-popover/ngt-popover-tooltip/ngt-popover-tooltip.component.mjs +58 -58
  143. package/esm2020/components/ngt-popover/ngt-popover.component.mjs +85 -85
  144. package/esm2020/components/ngt-popover/ngt-popover.directive.mjs +126 -126
  145. package/esm2020/components/ngt-popover/ngt-popover.module.mjs +36 -36
  146. package/esm2020/components/ngt-portlet/ngt-portlet-body/ngt-portlet-body.component.mjs +34 -34
  147. package/esm2020/components/ngt-portlet/ngt-portlet-footer/ngt-portlet-footer.component.mjs +35 -35
  148. package/esm2020/components/ngt-portlet/ngt-portlet-header/ngt-portlet-header.component.mjs +57 -57
  149. package/esm2020/components/ngt-portlet/ngt-portlet.component.mjs +74 -74
  150. package/esm2020/components/ngt-portlet/ngt-portlet.module.mjs +47 -47
  151. package/esm2020/components/ngt-radio-button/ngt-radio-button-container/ngt-radio-button-container.component.mjs +19 -19
  152. package/esm2020/components/ngt-radio-button/ngt-radio-button.component.mjs +153 -153
  153. package/esm2020/components/ngt-radio-button/ngt-radio-button.module.mjs +29 -29
  154. package/esm2020/components/ngt-section/ngt-section.component.mjs +151 -151
  155. package/esm2020/components/ngt-section/ngt-section.module.mjs +32 -32
  156. package/esm2020/components/ngt-select/ngt-select.component.mjs +670 -670
  157. package/esm2020/components/ngt-select/ngt-select.directive.mjs +36 -36
  158. package/esm2020/components/ngt-select/ngt-select.module.mjs +65 -65
  159. package/esm2020/components/ngt-shining/ngt-shining.component.mjs +40 -40
  160. package/esm2020/components/ngt-shining/ngt-shining.module.mjs +20 -20
  161. package/esm2020/components/ngt-sidenav/ngt-sidenav.component.mjs +132 -132
  162. package/esm2020/components/ngt-sidenav/ngt-sidenav.module.mjs +20 -20
  163. package/esm2020/components/ngt-slider/ngt-slider.component.mjs +100 -100
  164. package/esm2020/components/ngt-slider/ngt-slider.module.mjs +24 -24
  165. package/esm2020/components/ngt-svg/ngt-svg.component.mjs +53 -53
  166. package/esm2020/components/ngt-svg/ngt-svg.module.mjs +28 -28
  167. package/esm2020/components/ngt-tag/ngt-tag.component.mjs +37 -37
  168. package/esm2020/components/ngt-tag/ngt-tag.module.mjs +24 -24
  169. package/esm2020/components/ngt-textarea/ngt-textarea.component.mjs +238 -238
  170. package/esm2020/components/ngt-textarea/ngt-textarea.module.mjs +43 -43
  171. package/esm2020/components/ngt-validation/ngt-validation.component.mjs +26 -26
  172. package/esm2020/components/ngt-validation/ngt-validation.module.mjs +20 -20
  173. package/esm2020/directives/ngt-stylizable/ngt-stylizable.directive.mjs +290 -290
  174. package/esm2020/directives/ngt-stylizable/ngt-stylizable.module.mjs +20 -20
  175. package/esm2020/enums/size.enum.mjs +11 -11
  176. package/esm2020/helpers/enum/enum.mjs +7 -7
  177. package/esm2020/helpers/form/form.mjs +14 -14
  178. package/esm2020/helpers/input-mask/input-mask.helper.mjs +26 -26
  179. package/esm2020/helpers/promise/promise-helper.mjs +4 -4
  180. package/esm2020/helpers/routing/route.mjs +11 -11
  181. package/esm2020/helpers/uuid.mjs +10 -10
  182. package/esm2020/ng-tailwind.mjs +4 -4
  183. package/esm2020/public-api.mjs +127 -127
  184. package/esm2020/services/http/ngt-attachment-http.service.mjs +3 -3
  185. package/esm2020/services/http/ngt-http-form.service.mjs +3 -3
  186. package/esm2020/services/http/ngt-http-resource.service.mjs +3 -3
  187. package/esm2020/services/http/ngt-http-validation.service.mjs +3 -3
  188. package/esm2020/services/http/ngt-http.service.mjs +3 -3
  189. package/esm2020/services/http/ngt-translate.service.mjs +3 -3
  190. package/esm2020/services/ngt-stylizable/ngt-stylizable.service.mjs +273 -273
  191. package/esm2020/services/validation/ngt-ability-validation.service.mjs +3 -3
  192. package/fesm2015/ng-tailwind.mjs +8656 -8653
  193. package/fesm2015/ng-tailwind.mjs.map +1 -1
  194. package/fesm2020/ng-tailwind.mjs +8481 -8478
  195. package/fesm2020/ng-tailwind.mjs.map +1 -1
  196. package/helpers/enum/enum.d.ts +1 -1
  197. package/helpers/form/form.d.ts +4 -4
  198. package/helpers/input-mask/input-mask.helper.d.ts +20 -20
  199. package/helpers/promise/promise-helper.d.ts +1 -1
  200. package/helpers/routing/route.d.ts +2 -2
  201. package/helpers/uuid.d.ts +1 -1
  202. package/index.d.ts +5 -5
  203. package/package.json +1 -1
  204. package/public-api.d.ts +87 -87
  205. package/services/http/ngt-attachment-http.service.d.ts +9 -9
  206. package/services/http/ngt-http-form.service.d.ts +5 -5
  207. package/services/http/ngt-http-resource.service.d.ts +12 -12
  208. package/services/http/ngt-http-validation.service.d.ts +12 -12
  209. package/services/http/ngt-http.service.d.ts +27 -27
  210. package/services/http/ngt-translate.service.d.ts +33 -33
  211. package/services/ngt-stylizable/ngt-stylizable.service.d.ts +96 -96
  212. package/services/validation/ngt-ability-validation.service.d.ts +5 -5
@@ -1,22 +1,22 @@
1
- import { Component, Input, Optional } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "../../../services/http/ngt-translate.service";
4
- import * as i2 from "@angular/common";
5
- export class NgtFormValidationMessageComponent {
6
- constructor(ngtTranslateService) {
7
- this.ngtTranslateService = ngtTranslateService;
8
- }
9
- }
10
- NgtFormValidationMessageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormValidationMessageComponent, deps: [{ token: i1.NgtTranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
11
- NgtFormValidationMessageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtFormValidationMessageComponent, selector: "ngt-form-validation-message", inputs: { canShowValidationMessage: "canShowValidationMessage", message: "message" }, ngImport: i0, template: "<div *ngIf=\"canShowValidationMessage\" class=\"mb-5 p-2 rounded bg-red-500 text-white text-xs\">\n {{ message || ngtTranslateService.ngtFormDefaultValidationMessage }}\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormValidationMessageComponent, decorators: [{
13
- type: Component,
14
- args: [{ selector: 'ngt-form-validation-message', template: "<div *ngIf=\"canShowValidationMessage\" class=\"mb-5 p-2 rounded bg-red-500 text-white text-xs\">\n {{ message || ngtTranslateService.ngtFormDefaultValidationMessage }}\n</div>\n" }]
15
- }], ctorParameters: function () { return [{ type: i1.NgtTranslateService, decorators: [{
16
- type: Optional
17
- }] }]; }, propDecorators: { canShowValidationMessage: [{
18
- type: Input
19
- }], message: [{
20
- type: Input
21
- }] } });
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWZvcm0tdmFsaWRhdGlvbi1tZXNzYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXRhaWx3aW5kL3NyYy9jb21wb25lbnRzL25ndC1mb3JtL25ndC1mb3JtLXZhbGlkYXRpb24tbWVzc2FnZS9uZ3QtZm9ybS12YWxpZGF0aW9uLW1lc3NhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWZvcm0vbmd0LWZvcm0tdmFsaWRhdGlvbi1tZXNzYWdlL25ndC1mb3JtLXZhbGlkYXRpb24tbWVzc2FnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFRM0QsTUFBTSxPQUFPLGlDQUFpQztJQUkxQyxZQUVXLG1CQUF3QztRQUF4Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO0lBQy9DLENBQUM7OzhIQVBJLGlDQUFpQztrSEFBakMsaUNBQWlDLHlKQ1I5Qyx1TEFHQTsyRkRLYSxpQ0FBaUM7a0JBSjdDLFNBQVM7K0JBQ0ksNkJBQTZCOzswQkFRbEMsUUFBUTs0Q0FKRyx3QkFBd0I7c0JBQXZDLEtBQUs7Z0JBQ1UsT0FBTztzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE5ndFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9odHRwL25ndC10cmFuc2xhdGUuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmd0LWZvcm0tdmFsaWRhdGlvbi1tZXNzYWdlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmd0LWZvcm0tdmFsaWRhdGlvbi1tZXNzYWdlLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgTmd0Rm9ybVZhbGlkYXRpb25NZXNzYWdlQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKSBwdWJsaWMgY2FuU2hvd1ZhbGlkYXRpb25NZXNzYWdlOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIEBPcHRpb25hbCgpXG4gICAgICAgIHB1YmxpYyBuZ3RUcmFuc2xhdGVTZXJ2aWNlOiBOZ3RUcmFuc2xhdGVTZXJ2aWNlXG4gICAgKSB7IH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJjYW5TaG93VmFsaWRhdGlvbk1lc3NhZ2VcIiBjbGFzcz1cIm1iLTUgcC0yIHJvdW5kZWQgYmctcmVkLTUwMCB0ZXh0LXdoaXRlIHRleHQteHNcIj5cbiAgICB7eyBtZXNzYWdlIHx8IG5ndFRyYW5zbGF0ZVNlcnZpY2Uubmd0Rm9ybURlZmF1bHRWYWxpZGF0aW9uTWVzc2FnZSB9fVxuPC9kaXY+XG4iXX0=
1
+ import { Component, Input, Optional } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../../services/http/ngt-translate.service";
4
+ import * as i2 from "@angular/common";
5
+ export class NgtFormValidationMessageComponent {
6
+ constructor(ngtTranslateService) {
7
+ this.ngtTranslateService = ngtTranslateService;
8
+ }
9
+ }
10
+ NgtFormValidationMessageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormValidationMessageComponent, deps: [{ token: i1.NgtTranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
11
+ NgtFormValidationMessageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtFormValidationMessageComponent, selector: "ngt-form-validation-message", inputs: { canShowValidationMessage: "canShowValidationMessage", message: "message" }, ngImport: i0, template: "<div *ngIf=\"canShowValidationMessage\" class=\"mb-5 p-2 rounded bg-red-500 text-white text-xs\">\r\n {{ message || ngtTranslateService.ngtFormDefaultValidationMessage }}\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormValidationMessageComponent, decorators: [{
13
+ type: Component,
14
+ args: [{ selector: 'ngt-form-validation-message', template: "<div *ngIf=\"canShowValidationMessage\" class=\"mb-5 p-2 rounded bg-red-500 text-white text-xs\">\r\n {{ message || ngtTranslateService.ngtFormDefaultValidationMessage }}\r\n</div>\r\n" }]
15
+ }], ctorParameters: function () { return [{ type: i1.NgtTranslateService, decorators: [{
16
+ type: Optional
17
+ }] }]; }, propDecorators: { canShowValidationMessage: [{
18
+ type: Input
19
+ }], message: [{
20
+ type: Input
21
+ }] } });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWZvcm0tdmFsaWRhdGlvbi1tZXNzYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXRhaWx3aW5kL3NyYy9jb21wb25lbnRzL25ndC1mb3JtL25ndC1mb3JtLXZhbGlkYXRpb24tbWVzc2FnZS9uZ3QtZm9ybS12YWxpZGF0aW9uLW1lc3NhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWZvcm0vbmd0LWZvcm0tdmFsaWRhdGlvbi1tZXNzYWdlL25ndC1mb3JtLXZhbGlkYXRpb24tbWVzc2FnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFRM0QsTUFBTSxPQUFPLGlDQUFpQztJQUkxQyxZQUVXLG1CQUF3QztRQUF4Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO0lBQy9DLENBQUM7OzhIQVBJLGlDQUFpQztrSEFBakMsaUNBQWlDLHlKQ1I5Qyw2TEFHQTsyRkRLYSxpQ0FBaUM7a0JBSjdDLFNBQVM7K0JBQ0ksNkJBQTZCOzswQkFRbEMsUUFBUTs0Q0FKRyx3QkFBd0I7c0JBQXZDLEtBQUs7Z0JBQ1UsT0FBTztzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBOZ3RUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaHR0cC9uZ3QtdHJhbnNsYXRlLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ25ndC1mb3JtLXZhbGlkYXRpb24tbWVzc2FnZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmd0LWZvcm0tdmFsaWRhdGlvbi1tZXNzYWdlLmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5ndEZvcm1WYWxpZGF0aW9uTWVzc2FnZUNvbXBvbmVudCB7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgY2FuU2hvd1ZhbGlkYXRpb25NZXNzYWdlOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcHVibGljIG1lc3NhZ2U6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQE9wdGlvbmFsKClcclxuICAgICAgICBwdWJsaWMgbmd0VHJhbnNsYXRlU2VydmljZTogTmd0VHJhbnNsYXRlU2VydmljZVxyXG4gICAgKSB7IH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwiY2FuU2hvd1ZhbGlkYXRpb25NZXNzYWdlXCIgY2xhc3M9XCJtYi01IHAtMiByb3VuZGVkIGJnLXJlZC01MDAgdGV4dC13aGl0ZSB0ZXh0LXhzXCI+XHJcbiAgICB7eyBtZXNzYWdlIHx8IG5ndFRyYW5zbGF0ZVNlcnZpY2Uubmd0Rm9ybURlZmF1bHRWYWxpZGF0aW9uTWVzc2FnZSB9fVxyXG48L2Rpdj5cclxuIl19
@@ -1,207 +1,207 @@
1
- import { Component, EventEmitter, Host, Input, Optional, Output, } from '@angular/core';
2
- import { Observable } from 'rxjs';
3
- import { isValidNgForm } from '../../helpers/form/form';
4
- import { getIdFromUri } from '../../helpers/routing/route';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/router";
7
- import * as i2 from "@angular/forms";
8
- import * as i3 from "../../services/http/ngt-http-form.service";
9
- import * as i4 from "../../services/validation/ngt-ability-validation.service";
10
- import * as i5 from "@angular/common";
11
- import * as i6 from "./ngt-form-validation-message/ngt-form-validation-message.component";
12
- ;
13
- export class NgtFormComponent {
14
- constructor(router, route, formContainer, ngForm, changeDetector, ngtHttpFormService, ngtAbilityValidationService) {
15
- this.router = router;
16
- this.route = route;
17
- this.formContainer = formContainer;
18
- this.ngForm = ngForm;
19
- this.changeDetector = changeDetector;
20
- this.ngtHttpFormService = ngtHttpFormService;
21
- this.ngtAbilityValidationService = ngtAbilityValidationService;
22
- this.guessFormState = true;
23
- this.message = '';
24
- this.routeIdentifier = 'id';
25
- this.onCreating = new EventEmitter;
26
- this.onEditing = new EventEmitter;
27
- this.onLoadingChange = new EventEmitter;
28
- this.onShiningChange = new EventEmitter;
29
- this.setupComponent = new EventEmitter;
30
- this.onResourceLoadingError = new EventEmitter;
31
- this.subscriptions = [];
32
- }
33
- ngOnInit() {
34
- if (this.guessFormState) {
35
- this.subscriptions.push(this.determineFormState().subscribe(() => {
36
- this.setupComponent.emit();
37
- }));
38
- }
39
- else {
40
- this.setupComponent.emit();
41
- }
42
- this.subscriptions.push(this.ngForm.ngSubmit.subscribe(() => {
43
- if (!this.ngForm.valid) {
44
- NgtFormComponent.onSubmitInvalidForm.emit(this.ngForm);
45
- }
46
- }));
47
- }
48
- async ngAfterViewInit() {
49
- if (this.isDisabled === undefined && this.ngtAbilityValidationService) {
50
- this.isDisabled = !(await this.ngtAbilityValidationService.hasManagePermission());
51
- this.changeDetector.detectChanges();
52
- }
53
- }
54
- ngOnDestroy() {
55
- this.destroySubscriptions();
56
- }
57
- isCreating() {
58
- return this.formState === NgtFormState.CREATING;
59
- }
60
- isEditing() {
61
- return this.formState === NgtFormState.EDITING;
62
- }
63
- isLoading() {
64
- return this.loading;
65
- }
66
- isShining() {
67
- return this.shining;
68
- }
69
- canShowValidationMessage() {
70
- return this.formContainer &&
71
- this.formContainer['submitted'] &&
72
- this.formContainer.status != 'VALID' &&
73
- this.formContainer.status != 'DISABLED';
74
- }
75
- setShining(shining) {
76
- this.shining = shining;
77
- this.onShiningChange.emit(this.shining);
78
- }
79
- setLoading(loading) {
80
- this.loading = loading;
81
- this.onLoadingChange.emit(this.loading);
82
- }
83
- setFormState(state, triggerChange = true) {
84
- this.formState = state;
85
- if (triggerChange) {
86
- this.triggerFormStateChange();
87
- }
88
- }
89
- getFormState() {
90
- return this.formState;
91
- }
92
- triggerFormStateChange() {
93
- if (this.isEditing()) {
94
- this.triggerFormEditing();
95
- }
96
- else if (this.isCreating()) {
97
- this.triggerFormCreating();
98
- }
99
- }
100
- formHasChanges() {
101
- return this.ngForm.dirty;
102
- }
103
- saveResource() {
104
- return new Observable((observer) => {
105
- if (isValidNgForm(this.ngForm)) {
106
- this.setLoading(true);
107
- this.subscriptions.push(this.ngtHttpFormService.saveResource(this.resource)
108
- .subscribe((response) => {
109
- this.setLoading(false);
110
- observer.next(response);
111
- observer.complete();
112
- }));
113
- }
114
- else {
115
- observer.error();
116
- }
117
- });
118
- }
119
- triggerFormCreating() {
120
- this.onCreating.emit();
121
- }
122
- triggerFormEditing() {
123
- if (this.uriId && this.resource) {
124
- this.setLoading(true);
125
- this.setShining(true);
126
- this.subscriptions.push(this.ngtHttpFormService.loadResourceById(this.resource, this.uriId)
127
- .subscribe((resource) => {
128
- this.setLoading(false);
129
- this.setShining(false);
130
- this.onEditing.emit(resource);
131
- setTimeout(() => this.ngForm.form.markAsPristine(), 1500);
132
- }, (error) => {
133
- this.setLoading(false);
134
- this.setShining(false);
135
- this.onResourceLoadingError.emit(error);
136
- }));
137
- return;
138
- }
139
- this.onEditing.emit(null);
140
- }
141
- determineFormState() {
142
- return new Observable((observer) => {
143
- this.subscriptions.push(getIdFromUri(this.route, this.routeIdentifier).subscribe((id) => {
144
- this.uriId = id;
145
- if (this.uriId) {
146
- this.setFormState(NgtFormState.EDITING);
147
- }
148
- else {
149
- this.setFormState(NgtFormState.CREATING);
150
- }
151
- observer.next();
152
- }));
153
- });
154
- }
155
- destroySubscriptions() {
156
- this.subscriptions.forEach(subscription => subscription.unsubscribe());
157
- this.subscriptions = [];
158
- }
159
- }
160
- NgtFormComponent.onSubmitInvalidForm = new EventEmitter;
161
- NgtFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ControlContainer, host: true, optional: true }, { token: i2.NgForm, host: true, optional: true }, { token: i0.ChangeDetectorRef }, { token: i3.NgtHttpFormService }, { token: i4.NgtAbilityValidationService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
162
- NgtFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtFormComponent, selector: "ngt-form", inputs: { guessFormState: "guessFormState", message: "message", routeIdentifier: "routeIdentifier", resource: "resource", customLayout: "customLayout", isDisabled: "isDisabled" }, outputs: { onCreating: "onCreating", onEditing: "onEditing", onLoadingChange: "onLoadingChange", onShiningChange: "onShiningChange", setupComponent: "setupComponent", onResourceLoadingError: "onResourceLoadingError" }, ngImport: i0, template: "<ngt-form-validation-message *ngIf='!customLayout' [canShowValidationMessage]=\"canShowValidationMessage()\"\n [message]=\"message\">\n</ngt-form-validation-message>\n\n<fieldset [disabled]=\"isDisabled\" style=\"min-inline-size: 100% !important\">\n <ng-content></ng-content>\n</fieldset>", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.NgtFormValidationMessageComponent, selector: "ngt-form-validation-message", inputs: ["canShowValidationMessage", "message"] }] });
163
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormComponent, decorators: [{
164
- type: Component,
165
- args: [{ selector: 'ngt-form', template: "<ngt-form-validation-message *ngIf='!customLayout' [canShowValidationMessage]=\"canShowValidationMessage()\"\n [message]=\"message\">\n</ngt-form-validation-message>\n\n<fieldset [disabled]=\"isDisabled\" style=\"min-inline-size: 100% !important\">\n <ng-content></ng-content>\n</fieldset>" }]
166
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ControlContainer, decorators: [{
167
- type: Optional
168
- }, {
169
- type: Host
170
- }] }, { type: i2.NgForm, decorators: [{
171
- type: Optional
172
- }, {
173
- type: Host
174
- }] }, { type: i0.ChangeDetectorRef }, { type: i3.NgtHttpFormService }, { type: i4.NgtAbilityValidationService, decorators: [{
175
- type: Optional
176
- }] }]; }, propDecorators: { guessFormState: [{
177
- type: Input
178
- }], message: [{
179
- type: Input
180
- }], routeIdentifier: [{
181
- type: Input
182
- }], resource: [{
183
- type: Input
184
- }], customLayout: [{
185
- type: Input
186
- }], isDisabled: [{
187
- type: Input
188
- }], onCreating: [{
189
- type: Output
190
- }], onEditing: [{
191
- type: Output
192
- }], onLoadingChange: [{
193
- type: Output
194
- }], onShiningChange: [{
195
- type: Output
196
- }], setupComponent: [{
197
- type: Output
198
- }], onResourceLoadingError: [{
199
- type: Output
200
- }] } });
201
- export var NgtFormState;
202
- (function (NgtFormState) {
203
- NgtFormState["CREATING"] = "CREATING";
204
- NgtFormState["EDITING"] = "EDITING";
205
- })(NgtFormState || (NgtFormState = {}));
206
- ;
207
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWZvcm0vbmd0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWZvcm0vbmd0LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFNBQVMsRUFDVCxZQUFZLEVBQ1osSUFBSSxFQUNKLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRWhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7Ozs7O0FBRTRDLENBQUM7QUFNeEcsTUFBTSxPQUFPLGdCQUFnQjtJQXdCekIsWUFDVyxNQUFjLEVBQ2QsS0FBcUIsRUFHckIsYUFBK0IsRUFHL0IsTUFBYyxFQUViLGNBQWlDLEVBQ2pDLGtCQUFzQyxFQUd0QywyQkFBd0Q7UUFiekQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBR3JCLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUcvQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBRWIsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFHdEMsZ0NBQTJCLEdBQTNCLDJCQUEyQixDQUE2QjtRQXJDcEQsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFDL0IsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUNyQixvQkFBZSxHQUFXLElBQUksQ0FBQztRQU85QixlQUFVLEdBQXNCLElBQUksWUFBWSxDQUFDO1FBQ2pELGNBQVMsR0FBc0IsSUFBSSxZQUFZLENBQUM7UUFDaEQsb0JBQWUsR0FBMEIsSUFBSSxZQUFZLENBQUM7UUFDMUQsb0JBQWUsR0FBMEIsSUFBSSxZQUFZLENBQUM7UUFDMUQsbUJBQWMsR0FBc0IsSUFBSSxZQUFZLENBQUM7UUFDckQsMkJBQXNCLEdBQXlCLElBQUksWUFBWSxDQUFDO1FBT3pFLGtCQUFhLEdBQXdCLEVBQUUsQ0FBQztJQWlCNUMsQ0FBQztJQUVFLFFBQVE7UUFDWCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ25CLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDL0IsQ0FBQyxDQUFDLENBQ0wsQ0FBQztTQUNMO2FBQU07WUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzlCO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO2dCQUNwQixnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQzFEO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTSxLQUFLLENBQUMsZUFBZTtRQUN4QixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQywyQkFBMkIsRUFBRTtZQUNuRSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7WUFFbEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN2QztJQUNMLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVNLFVBQVU7UUFDYixPQUFPLElBQUksQ0FBQyxTQUFTLEtBQUssWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUNwRCxDQUFDO0lBRU0sU0FBUztRQUNaLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxZQUFZLENBQUMsT0FBTyxDQUFDO0lBQ25ELENBQUM7SUFFTSxTQUFTO1FBQ1osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFTSxTQUFTO1FBQ1osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFTSx3QkFBd0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsYUFBYTtZQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztZQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sSUFBSSxPQUFPO1lBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQztJQUNoRCxDQUFDO0lBRU0sVUFBVSxDQUFDLE9BQWdCO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU0sVUFBVSxDQUFDLE9BQWdCO1FBQzlCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRU0sWUFBWSxDQUFDLEtBQW1CLEVBQUUsZ0JBQXlCLElBQUk7UUFDbEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFFdkIsSUFBSSxhQUFhLEVBQUU7WUFDZixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztTQUNqQztJQUNMLENBQUM7SUFFTSxZQUFZO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFTSxzQkFBc0I7UUFDekIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDN0I7YUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUMxQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztTQUM5QjtJQUNMLENBQUM7SUFFTSxjQUFjO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVNLFlBQVk7UUFDZixPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUV0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDbkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO3FCQUM5QyxTQUFTLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtvQkFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDdkIsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDeEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN4QixDQUFDLENBQUMsQ0FDVCxDQUFDO2FBQ0w7aUJBQU07Z0JBQ0gsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQ3BCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRVMsbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVTLGtCQUFrQjtRQUN4QixJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ25CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQzlELFNBQVMsQ0FDTixDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUNkLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRXZCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUU5QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDOUQsQ0FBQyxFQUNELENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ04sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFdkIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QyxDQUFDLENBQ0osQ0FDUixDQUFDO1lBRUYsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVPLGtCQUFrQjtRQUN0QixPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ25CLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFVLEVBQUUsRUFBRTtnQkFDcEUsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBRWhCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDWixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDM0M7cUJBQU07b0JBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzVDO2dCQUVELFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNwQixDQUFDLENBQUMsQ0FDTCxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sb0JBQW9CO1FBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDdkUsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQzs7QUFyTXVCLG9DQUFtQixHQUF5QixJQUFJLFlBQVksQ0FBQzs2R0FSNUUsZ0JBQWdCO2lHQUFoQixnQkFBZ0IsK2JDekI3Qix5U0FNVzsyRkRtQkUsZ0JBQWdCO2tCQUo1QixTQUFTOytCQUNJLFVBQVU7OzBCQStCZixRQUFROzswQkFBSSxJQUFJOzswQkFHaEIsUUFBUTs7MEJBQUksSUFBSTs7MEJBTWhCLFFBQVE7NENBcENHLGNBQWM7c0JBQTdCLEtBQUs7Z0JBQ1UsT0FBTztzQkFBdEIsS0FBSztnQkFDVSxlQUFlO3NCQUE5QixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUlXLFVBQVU7c0JBQTFCLE1BQU07Z0JBQ1UsU0FBUztzQkFBekIsTUFBTTtnQkFDVSxlQUFlO3NCQUEvQixNQUFNO2dCQUNVLGVBQWU7c0JBQS9CLE1BQU07Z0JBQ1UsY0FBYztzQkFBOUIsTUFBTTtnQkFDVSxzQkFBc0I7c0JBQXRDLE1BQU07O0FBaU1YLE1BQU0sQ0FBTixJQUFZLFlBR1g7QUFIRCxXQUFZLFlBQVk7SUFDcEIscUNBQXFCLENBQUE7SUFDckIsbUNBQW1CLENBQUE7QUFDdkIsQ0FBQyxFQUhXLFlBQVksS0FBWixZQUFZLFFBR3ZCO0FBQUEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgaXNWYWxpZE5nRm9ybSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvZm9ybS9mb3JtJztcbmltcG9ydCB7IGdldElkRnJvbVVyaSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvcm91dGluZy9yb3V0ZSc7XG5pbXBvcnQgeyBOZ3RIdHRwRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwL25ndC1odHRwLWZvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RBYmlsaXR5VmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uL25ndC1hYmlsaXR5LXZhbGlkYXRpb24uc2VydmljZSc7O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndC1mb3JtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmd0LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICAgIEBJbnB1dCgpIHB1YmxpYyBndWVzc0Zvcm1TdGF0ZTogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgcHVibGljIG1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyByb3V0ZUlkZW50aWZpZXI6IHN0cmluZyA9ICdpZCc7XG4gICAgQElucHV0KCkgcHVibGljIHJlc291cmNlOiBhbnk7XG4gICAgQElucHV0KCkgcHVibGljIGN1c3RvbUxheW91dDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNEaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIEBPdXRwdXQoKSBwdWJsaWMgc3RhdGljIG9uU3VibWl0SW52YWxpZEZvcm06IEV2ZW50RW1pdHRlcjxOZ0Zvcm0+ID0gbmV3IEV2ZW50RW1pdHRlcjtcblxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25DcmVhdGluZzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25FZGl0aW5nOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI7XG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkxvYWRpbmdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI7XG4gICAgQE91dHB1dCgpIHB1YmxpYyBvblNoaW5pbmdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI7XG4gICAgQE91dHB1dCgpIHB1YmxpYyBzZXR1cENvbXBvbmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25SZXNvdXJjZUxvYWRpbmdFcnJvcjogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyO1xuXG4gICAgcHVibGljIGZvcm1TdGF0ZTogTmd0Rm9ybVN0YXRlO1xuICAgIHB1YmxpYyB1cmlJZDogYW55O1xuXG4gICAgcHJpdmF0ZSBsb2FkaW5nOiBib29sZWFuO1xuICAgIHByaXZhdGUgc2hpbmluZzogYm9vbGVhbjtcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwdWJsaWMgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuXG4gICAgICAgIEBPcHRpb25hbCgpIEBIb3N0KClcbiAgICAgICAgcHVibGljIGZvcm1Db250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG5cbiAgICAgICAgQE9wdGlvbmFsKCkgQEhvc3QoKVxuICAgICAgICBwdWJsaWMgbmdGb3JtOiBOZ0Zvcm0sXG5cbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgbmd0SHR0cEZvcm1TZXJ2aWNlOiBOZ3RIdHRwRm9ybVNlcnZpY2UsXG5cbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgcHJpdmF0ZSBuZ3RBYmlsaXR5VmFsaWRhdGlvblNlcnZpY2U6IE5ndEFiaWxpdHlWYWxpZGF0aW9uU2VydmljZVxuICAgICkgeyB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmd1ZXNzRm9ybVN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLmRldGVybWluZUZvcm1TdGF0ZSgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dXBDb21wb25lbnQuZW1pdCgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXR1cENvbXBvbmVudC5lbWl0KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgIHRoaXMubmdGb3JtLm5nU3VibWl0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm5nRm9ybS52YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICBOZ3RGb3JtQ29tcG9uZW50Lm9uU3VibWl0SW52YWxpZEZvcm0uZW1pdCh0aGlzLm5nRm9ybSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgbmdBZnRlclZpZXdJbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5pc0Rpc2FibGVkID09PSB1bmRlZmluZWQgJiYgdGhpcy5uZ3RBYmlsaXR5VmFsaWRhdGlvblNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9ICEoYXdhaXQgdGhpcy5uZ3RBYmlsaXR5VmFsaWRhdGlvblNlcnZpY2UuaGFzTWFuYWdlUGVybWlzc2lvbigpKTtcblxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveVN1YnNjcmlwdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNDcmVhdGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybVN0YXRlID09PSBOZ3RGb3JtU3RhdGUuQ1JFQVRJTkc7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRWRpdGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybVN0YXRlID09PSBOZ3RGb3JtU3RhdGUuRURJVElORztcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNMb2FkaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1NoaW5pbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNoaW5pbmc7XG4gICAgfVxuXG4gICAgcHVibGljIGNhblNob3dWYWxpZGF0aW9uTWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbnRhaW5lciAmJlxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udGFpbmVyWydzdWJtaXR0ZWQnXSAmJlxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udGFpbmVyLnN0YXR1cyAhPSAnVkFMSUQnICYmXG4gICAgICAgICAgICB0aGlzLmZvcm1Db250YWluZXIuc3RhdHVzICE9ICdESVNBQkxFRCc7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFNoaW5pbmcoc2hpbmluZzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNoaW5pbmcgPSBzaGluaW5nO1xuICAgICAgICB0aGlzLm9uU2hpbmluZ0NoYW5nZS5lbWl0KHRoaXMuc2hpbmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldExvYWRpbmcobG9hZGluZzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBsb2FkaW5nO1xuICAgICAgICB0aGlzLm9uTG9hZGluZ0NoYW5nZS5lbWl0KHRoaXMubG9hZGluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEZvcm1TdGF0ZShzdGF0ZTogTmd0Rm9ybVN0YXRlLCB0cmlnZ2VyQ2hhbmdlOiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmZvcm1TdGF0ZSA9IHN0YXRlO1xuXG4gICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJGb3JtU3RhdGVDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGb3JtU3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1TdGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJpZ2dlckZvcm1TdGF0ZUNoYW5nZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0aW5nKCkpIHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckZvcm1FZGl0aW5nKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0NyZWF0aW5nKCkpIHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckZvcm1DcmVhdGluZygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGZvcm1IYXNDaGFuZ2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZ0Zvcm0uZGlydHk7XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmVSZXNvdXJjZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xuICAgICAgICAgICAgaWYgKGlzVmFsaWROZ0Zvcm0odGhpcy5uZ0Zvcm0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmd0SHR0cEZvcm1TZXJ2aWNlLnNhdmVSZXNvdXJjZSh0aGlzLnJlc291cmNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHRyaWdnZXJGb3JtQ3JlYXRpbmcoKSB7XG4gICAgICAgIHRoaXMub25DcmVhdGluZy5lbWl0KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHRyaWdnZXJGb3JtRWRpdGluZygpIHtcbiAgICAgICAgaWYgKHRoaXMudXJpSWQgJiYgdGhpcy5yZXNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5zZXRTaGluaW5nKHRydWUpO1xuXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLm5ndEh0dHBGb3JtU2VydmljZS5sb2FkUmVzb3VyY2VCeUlkKHRoaXMucmVzb3VyY2UsIHRoaXMudXJpSWQpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVzb3VyY2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTaGluaW5nKGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25FZGl0aW5nLmVtaXQocmVzb3VyY2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5nRm9ybS5mb3JtLm1hcmtBc1ByaXN0aW5lKCksIDE1MDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTaGluaW5nKGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25SZXNvdXJjZUxvYWRpbmdFcnJvci5lbWl0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkVkaXRpbmcuZW1pdChudWxsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRldGVybWluZUZvcm1TdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgZ2V0SWRGcm9tVXJpKHRoaXMucm91dGUsIHRoaXMucm91dGVJZGVudGlmaWVyKS5zdWJzY3JpYmUoKGlkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cmlJZCA9IGlkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnVyaUlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZvcm1TdGF0ZShOZ3RGb3JtU3RhdGUuRURJVElORyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZvcm1TdGF0ZShOZ3RGb3JtU3RhdGUuQ1JFQVRJTkcpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3lTdWJzY3JpcHRpb25zKCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICB9XG59XG5cbmV4cG9ydCBlbnVtIE5ndEZvcm1TdGF0ZSB7XG4gICAgQ1JFQVRJTkcgPSAnQ1JFQVRJTkcnLFxuICAgIEVESVRJTkcgPSAnRURJVElORydcbn07XG4iLCI8bmd0LWZvcm0tdmFsaWRhdGlvbi1tZXNzYWdlICpuZ0lmPSchY3VzdG9tTGF5b3V0JyBbY2FuU2hvd1ZhbGlkYXRpb25NZXNzYWdlXT1cImNhblNob3dWYWxpZGF0aW9uTWVzc2FnZSgpXCJcbiAgICBbbWVzc2FnZV09XCJtZXNzYWdlXCI+XG48L25ndC1mb3JtLXZhbGlkYXRpb24tbWVzc2FnZT5cblxuPGZpZWxkc2V0IFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkXCIgc3R5bGU9XCJtaW4taW5saW5lLXNpemU6IDEwMCUgIWltcG9ydGFudFwiPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZmllbGRzZXQ+Il19
1
+ import { Component, EventEmitter, Host, Input, Optional, Output, } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import { isValidNgForm } from '../../helpers/form/form';
4
+ import { getIdFromUri } from '../../helpers/routing/route';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/router";
7
+ import * as i2 from "@angular/forms";
8
+ import * as i3 from "../../services/http/ngt-http-form.service";
9
+ import * as i4 from "../../services/validation/ngt-ability-validation.service";
10
+ import * as i5 from "@angular/common";
11
+ import * as i6 from "./ngt-form-validation-message/ngt-form-validation-message.component";
12
+ ;
13
+ export class NgtFormComponent {
14
+ constructor(router, route, formContainer, ngForm, changeDetector, ngtHttpFormService, ngtAbilityValidationService) {
15
+ this.router = router;
16
+ this.route = route;
17
+ this.formContainer = formContainer;
18
+ this.ngForm = ngForm;
19
+ this.changeDetector = changeDetector;
20
+ this.ngtHttpFormService = ngtHttpFormService;
21
+ this.ngtAbilityValidationService = ngtAbilityValidationService;
22
+ this.guessFormState = true;
23
+ this.message = '';
24
+ this.routeIdentifier = 'id';
25
+ this.onCreating = new EventEmitter;
26
+ this.onEditing = new EventEmitter;
27
+ this.onLoadingChange = new EventEmitter;
28
+ this.onShiningChange = new EventEmitter;
29
+ this.setupComponent = new EventEmitter;
30
+ this.onResourceLoadingError = new EventEmitter;
31
+ this.subscriptions = [];
32
+ }
33
+ ngOnInit() {
34
+ if (this.guessFormState) {
35
+ this.subscriptions.push(this.determineFormState().subscribe(() => {
36
+ this.setupComponent.emit();
37
+ }));
38
+ }
39
+ else {
40
+ this.setupComponent.emit();
41
+ }
42
+ this.subscriptions.push(this.ngForm.ngSubmit.subscribe(() => {
43
+ if (!this.ngForm.valid) {
44
+ NgtFormComponent.onSubmitInvalidForm.emit(this.ngForm);
45
+ }
46
+ }));
47
+ }
48
+ async ngAfterViewInit() {
49
+ if (this.isDisabled === undefined && this.ngtAbilityValidationService) {
50
+ this.isDisabled = !(await this.ngtAbilityValidationService.hasManagePermission());
51
+ this.changeDetector.detectChanges();
52
+ }
53
+ }
54
+ ngOnDestroy() {
55
+ this.destroySubscriptions();
56
+ }
57
+ isCreating() {
58
+ return this.formState === NgtFormState.CREATING;
59
+ }
60
+ isEditing() {
61
+ return this.formState === NgtFormState.EDITING;
62
+ }
63
+ isLoading() {
64
+ return this.loading;
65
+ }
66
+ isShining() {
67
+ return this.shining;
68
+ }
69
+ canShowValidationMessage() {
70
+ return this.formContainer &&
71
+ this.formContainer['submitted'] &&
72
+ this.formContainer.status != 'VALID' &&
73
+ this.formContainer.status != 'DISABLED';
74
+ }
75
+ setShining(shining) {
76
+ this.shining = shining;
77
+ this.onShiningChange.emit(this.shining);
78
+ }
79
+ setLoading(loading) {
80
+ this.loading = loading;
81
+ this.onLoadingChange.emit(this.loading);
82
+ }
83
+ setFormState(state, triggerChange = true) {
84
+ this.formState = state;
85
+ if (triggerChange) {
86
+ this.triggerFormStateChange();
87
+ }
88
+ }
89
+ getFormState() {
90
+ return this.formState;
91
+ }
92
+ triggerFormStateChange() {
93
+ if (this.isEditing()) {
94
+ this.triggerFormEditing();
95
+ }
96
+ else if (this.isCreating()) {
97
+ this.triggerFormCreating();
98
+ }
99
+ }
100
+ formHasChanges() {
101
+ return this.ngForm.dirty;
102
+ }
103
+ saveResource() {
104
+ return new Observable((observer) => {
105
+ if (isValidNgForm(this.ngForm)) {
106
+ this.setLoading(true);
107
+ this.subscriptions.push(this.ngtHttpFormService.saveResource(this.resource)
108
+ .subscribe((response) => {
109
+ this.setLoading(false);
110
+ observer.next(response);
111
+ observer.complete();
112
+ }));
113
+ }
114
+ else {
115
+ observer.error();
116
+ }
117
+ });
118
+ }
119
+ triggerFormCreating() {
120
+ this.onCreating.emit();
121
+ }
122
+ triggerFormEditing() {
123
+ if (this.uriId && this.resource) {
124
+ this.setLoading(true);
125
+ this.setShining(true);
126
+ this.subscriptions.push(this.ngtHttpFormService.loadResourceById(this.resource, this.uriId)
127
+ .subscribe((resource) => {
128
+ this.setLoading(false);
129
+ this.setShining(false);
130
+ this.onEditing.emit(resource);
131
+ setTimeout(() => this.ngForm.form.markAsPristine(), 1500);
132
+ }, (error) => {
133
+ this.setLoading(false);
134
+ this.setShining(false);
135
+ this.onResourceLoadingError.emit(error);
136
+ }));
137
+ return;
138
+ }
139
+ this.onEditing.emit(null);
140
+ }
141
+ determineFormState() {
142
+ return new Observable((observer) => {
143
+ this.subscriptions.push(getIdFromUri(this.route, this.routeIdentifier).subscribe((id) => {
144
+ this.uriId = id;
145
+ if (this.uriId) {
146
+ this.setFormState(NgtFormState.EDITING);
147
+ }
148
+ else {
149
+ this.setFormState(NgtFormState.CREATING);
150
+ }
151
+ observer.next();
152
+ }));
153
+ });
154
+ }
155
+ destroySubscriptions() {
156
+ this.subscriptions.forEach(subscription => subscription.unsubscribe());
157
+ this.subscriptions = [];
158
+ }
159
+ }
160
+ NgtFormComponent.onSubmitInvalidForm = new EventEmitter;
161
+ NgtFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ControlContainer, host: true, optional: true }, { token: i2.NgForm, host: true, optional: true }, { token: i0.ChangeDetectorRef }, { token: i3.NgtHttpFormService }, { token: i4.NgtAbilityValidationService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
162
+ NgtFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtFormComponent, selector: "ngt-form", inputs: { guessFormState: "guessFormState", message: "message", routeIdentifier: "routeIdentifier", resource: "resource", customLayout: "customLayout", isDisabled: "isDisabled" }, outputs: { onCreating: "onCreating", onEditing: "onEditing", onLoadingChange: "onLoadingChange", onShiningChange: "onShiningChange", setupComponent: "setupComponent", onResourceLoadingError: "onResourceLoadingError" }, ngImport: i0, template: "<ngt-form-validation-message *ngIf='!customLayout' [canShowValidationMessage]=\"canShowValidationMessage()\"\r\n [message]=\"message\">\r\n</ngt-form-validation-message>\r\n\r\n<fieldset [disabled]=\"isDisabled\" style=\"min-inline-size: 100% !important\">\r\n <ng-content></ng-content>\r\n</fieldset>", dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.NgtFormValidationMessageComponent, selector: "ngt-form-validation-message", inputs: ["canShowValidationMessage", "message"] }] });
163
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormComponent, decorators: [{
164
+ type: Component,
165
+ args: [{ selector: 'ngt-form', template: "<ngt-form-validation-message *ngIf='!customLayout' [canShowValidationMessage]=\"canShowValidationMessage()\"\r\n [message]=\"message\">\r\n</ngt-form-validation-message>\r\n\r\n<fieldset [disabled]=\"isDisabled\" style=\"min-inline-size: 100% !important\">\r\n <ng-content></ng-content>\r\n</fieldset>" }]
166
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ControlContainer, decorators: [{
167
+ type: Optional
168
+ }, {
169
+ type: Host
170
+ }] }, { type: i2.NgForm, decorators: [{
171
+ type: Optional
172
+ }, {
173
+ type: Host
174
+ }] }, { type: i0.ChangeDetectorRef }, { type: i3.NgtHttpFormService }, { type: i4.NgtAbilityValidationService, decorators: [{
175
+ type: Optional
176
+ }] }]; }, propDecorators: { guessFormState: [{
177
+ type: Input
178
+ }], message: [{
179
+ type: Input
180
+ }], routeIdentifier: [{
181
+ type: Input
182
+ }], resource: [{
183
+ type: Input
184
+ }], customLayout: [{
185
+ type: Input
186
+ }], isDisabled: [{
187
+ type: Input
188
+ }], onCreating: [{
189
+ type: Output
190
+ }], onEditing: [{
191
+ type: Output
192
+ }], onLoadingChange: [{
193
+ type: Output
194
+ }], onShiningChange: [{
195
+ type: Output
196
+ }], setupComponent: [{
197
+ type: Output
198
+ }], onResourceLoadingError: [{
199
+ type: Output
200
+ }] } });
201
+ export var NgtFormState;
202
+ (function (NgtFormState) {
203
+ NgtFormState["CREATING"] = "CREATING";
204
+ NgtFormState["EDITING"] = "EDITING";
205
+ })(NgtFormState || (NgtFormState = {}));
206
+ ;
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWZvcm0vbmd0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWZvcm0vbmd0LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdILFNBQVMsRUFDVCxZQUFZLEVBQ1osSUFBSSxFQUNKLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRWhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7Ozs7O0FBRTRDLENBQUM7QUFNeEcsTUFBTSxPQUFPLGdCQUFnQjtJQXdCekIsWUFDVyxNQUFjLEVBQ2QsS0FBcUIsRUFHckIsYUFBK0IsRUFHL0IsTUFBYyxFQUViLGNBQWlDLEVBQ2pDLGtCQUFzQyxFQUd0QywyQkFBd0Q7UUFiekQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBR3JCLGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUcvQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBRWIsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFHdEMsZ0NBQTJCLEdBQTNCLDJCQUEyQixDQUE2QjtRQXJDcEQsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFDL0IsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUNyQixvQkFBZSxHQUFXLElBQUksQ0FBQztRQU85QixlQUFV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QU07O0FBaU1YLE1BQU0sQ0FBTixJQUFZLFlBR1g7QUFIRCxXQUFZLFlBQVk7SUFDcEIscUNBQXFCLENBQUE7SUFDckIsbUNBQW1CLENBQUE7QUFDdkIsQ0FBQyxFQUhXLFlBQVksS0FBWixZQUFZLFFBR3ZCO0FBQUEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBBZnRlclZpZXdJbml0LFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBIb3N0LFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBPcHRpb25hbCxcclxuICAgIE91dHB1dCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBpc1ZhbGlkTmdGb3JtIH0gZnJvbSAnLi4vLi4vaGVscGVycy9mb3JtL2Zvcm0nO1xyXG5pbXBvcnQgeyBnZXRJZEZyb21VcmkgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3JvdXRpbmcvcm91dGUnO1xyXG5pbXBvcnQgeyBOZ3RIdHRwRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwL25ndC1odHRwLWZvcm0uc2VydmljZSc7XHJcbmltcG9ydCB7IE5ndEFiaWxpdHlWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24vbmd0LWFiaWxpdHktdmFsaWRhdGlvbi5zZXJ2aWNlJzs7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbmd0LWZvcm0nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL25ndC1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5ndEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgZ3Vlc3NGb3JtU3RhdGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgQElucHV0KCkgcHVibGljIG1lc3NhZ2U6IHN0cmluZyA9ICcnO1xyXG4gICAgQElucHV0KCkgcHVibGljIHJvdXRlSWRlbnRpZmllcjogc3RyaW5nID0gJ2lkJztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyByZXNvdXJjZTogYW55O1xyXG4gICAgQElucHV0KCkgcHVibGljIGN1c3RvbUxheW91dDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuO1xyXG5cclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgc3RhdGljIG9uU3VibWl0SW52YWxpZEZvcm06IEV2ZW50RW1pdHRlcjxOZ0Zvcm0+ID0gbmV3IEV2ZW50RW1pdHRlcjtcclxuXHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uQ3JlYXRpbmc6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjtcclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25FZGl0aW5nOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI7XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uTG9hZGluZ0NoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjtcclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25TaGluaW5nQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBzZXR1cENvbXBvbmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvblJlc291cmNlTG9hZGluZ0Vycm9yOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI7XHJcblxyXG4gICAgcHVibGljIGZvcm1TdGF0ZTogTmd0Rm9ybVN0YXRlO1xyXG4gICAgcHVibGljIHVyaUlkOiBhbnk7XHJcblxyXG4gICAgcHJpdmF0ZSBsb2FkaW5nOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBzaGluaW5nOiBib29sZWFuO1xyXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBBcnJheTxTdWJzY3JpcHRpb24+ID0gW107XHJcblxyXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwdWJsaWMgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG5cclxuICAgICAgICBAT3B0aW9uYWwoKSBASG9zdCgpXHJcbiAgICAgICAgcHVibGljIGZvcm1Db250YWluZXI6IENvbnRyb2xDb250YWluZXIsXHJcblxyXG4gICAgICAgIEBPcHRpb25hbCgpIEBIb3N0KClcclxuICAgICAgICBwdWJsaWMgbmdGb3JtOiBOZ0Zvcm0sXHJcblxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByaXZhdGUgbmd0SHR0cEZvcm1TZXJ2aWNlOiBOZ3RIdHRwRm9ybVNlcnZpY2UsXHJcblxyXG4gICAgICAgIEBPcHRpb25hbCgpXHJcbiAgICAgICAgcHJpdmF0ZSBuZ3RBYmlsaXR5VmFsaWRhdGlvblNlcnZpY2U6IE5ndEFiaWxpdHlWYWxpZGF0aW9uU2VydmljZVxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3Vlc3NGb3JtU3RhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRldGVybWluZUZvcm1TdGF0ZSgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR1cENvbXBvbmVudC5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dXBDb21wb25lbnQuZW1pdCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgIHRoaXMubmdGb3JtLm5nU3VibWl0LnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubmdGb3JtLnZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTmd0Rm9ybUNvbXBvbmVudC5vblN1Ym1pdEludmFsaWRGb3JtLmVtaXQodGhpcy5uZ0Zvcm0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBpZiAodGhpcy5pc0Rpc2FibGVkID09PSB1bmRlZmluZWQgJiYgdGhpcy5uZ3RBYmlsaXR5VmFsaWRhdGlvblNlcnZpY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVkID0gIShhd2FpdCB0aGlzLm5ndEFiaWxpdHlWYWxpZGF0aW9uU2VydmljZS5oYXNNYW5hZ2VQZXJtaXNzaW9uKCkpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3lTdWJzY3JpcHRpb25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQ3JlYXRpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybVN0YXRlID09PSBOZ3RGb3JtU3RhdGUuQ1JFQVRJTkc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzRWRpdGluZygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtU3RhdGUgPT09IE5ndEZvcm1TdGF0ZS5FRElUSU5HO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0xvYWRpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGluZztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNTaGluaW5nKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNoaW5pbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhblNob3dWYWxpZGF0aW9uTWVzc2FnZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQ29udGFpbmVyICYmXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRhaW5lclsnc3VibWl0dGVkJ10gJiZcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udGFpbmVyLnN0YXR1cyAhPSAnVkFMSUQnICYmXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRhaW5lci5zdGF0dXMgIT0gJ0RJU0FCTEVEJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0U2hpbmluZyhzaGluaW5nOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5zaGluaW5nID0gc2hpbmluZztcclxuICAgICAgICB0aGlzLm9uU2hpbmluZ0NoYW5nZS5lbWl0KHRoaXMuc2hpbmluZyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldExvYWRpbmcobG9hZGluZzogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGxvYWRpbmc7XHJcbiAgICAgICAgdGhpcy5vbkxvYWRpbmdDaGFuZ2UuZW1pdCh0aGlzLmxvYWRpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRGb3JtU3RhdGUoc3RhdGU6IE5ndEZvcm1TdGF0ZSwgdHJpZ2dlckNoYW5nZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgICAgICB0aGlzLmZvcm1TdGF0ZSA9IHN0YXRlO1xyXG5cclxuICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJGb3JtU3RhdGVDaGFuZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEZvcm1TdGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtU3RhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRyaWdnZXJGb3JtU3RhdGVDaGFuZ2UoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0aW5nKCkpIHtcclxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyRm9ybUVkaXRpbmcoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDcmVhdGluZygpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckZvcm1DcmVhdGluZygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZm9ybUhhc0NoYW5nZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmdGb3JtLmRpcnR5O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlUmVzb3VyY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNWYWxpZE5nRm9ybSh0aGlzLm5nRm9ybSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ndEh0dHBGb3JtU2VydmljZS5zYXZlUmVzb3VyY2UodGhpcy5yZXNvdXJjZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHRyaWdnZXJGb3JtQ3JlYXRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5vbkNyZWF0aW5nLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdHJpZ2dlckZvcm1FZGl0aW5nKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnVyaUlkICYmIHRoaXMucmVzb3VyY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFNoaW5pbmcodHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgIHRoaXMubmd0SHR0cEZvcm1TZXJ2aWNlLmxvYWRSZXNvdXJjZUJ5SWQodGhpcy5yZXNvdXJjZSwgdGhpcy51cmlJZClcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAocmVzb3VyY2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U2hpbmluZyhmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVkaXRpbmcuZW1pdChyZXNvdXJjZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5nRm9ybS5mb3JtLm1hcmtBc1ByaXN0aW5lKCksIDE1MDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFNoaW5pbmcoZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25SZXNvdXJjZUxvYWRpbmdFcnJvci5lbWl0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub25FZGl0aW5nLmVtaXQobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZXRlcm1pbmVGb3JtU3RhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgIGdldElkRnJvbVVyaSh0aGlzLnJvdXRlLCB0aGlzLnJvdXRlSWRlbnRpZmllcikuc3Vic2NyaWJlKChpZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cmlJZCA9IGlkO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy51cmlJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZvcm1TdGF0ZShOZ3RGb3JtU3RhdGUuRURJVElORyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRGb3JtU3RhdGUoTmd0Rm9ybVN0YXRlLkNSRUFUSU5HKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZXN0cm95U3Vic2NyaXB0aW9ucygpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWJzY3JpcHRpb24gPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZW51bSBOZ3RGb3JtU3RhdGUge1xyXG4gICAgQ1JFQVRJTkcgPSAnQ1JFQVRJTkcnLFxyXG4gICAgRURJVElORyA9ICdFRElUSU5HJ1xyXG59O1xyXG4iLCI8bmd0LWZvcm0tdmFsaWRhdGlvbi1tZXNzYWdlICpuZ0lmPSchY3VzdG9tTGF5b3V0JyBbY2FuU2hvd1ZhbGlkYXRpb25NZXNzYWdlXT1cImNhblNob3dWYWxpZGF0aW9uTWVzc2FnZSgpXCJcclxuICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VcIj5cclxuPC9uZ3QtZm9ybS12YWxpZGF0aW9uLW1lc3NhZ2U+XHJcblxyXG48ZmllbGRzZXQgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWRcIiBzdHlsZT1cIm1pbi1pbmxpbmUtc2l6ZTogMTAwJSAhaW1wb3J0YW50XCI+XHJcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbjwvZmllbGRzZXQ+Il19
@@ -1,29 +1,29 @@
1
- import { CommonModule } from '@angular/common';
2
- import { NgModule } from '@angular/core';
3
- import { NgtFormValidationMessageComponent } from './ngt-form-validation-message/ngt-form-validation-message.component';
4
- import { NgtFormComponent } from './ngt-form.component';
5
- import * as i0 from "@angular/core";
6
- export class NgtFormModule {
7
- }
8
- NgtFormModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
- NgtFormModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.8", ngImport: i0, type: NgtFormModule, declarations: [NgtFormComponent,
10
- NgtFormValidationMessageComponent], imports: [CommonModule], exports: [NgtFormComponent,
11
- NgtFormValidationMessageComponent] });
12
- NgtFormModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormModule, imports: [CommonModule] });
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormModule, decorators: [{
14
- type: NgModule,
15
- args: [{
16
- imports: [
17
- CommonModule
18
- ],
19
- declarations: [
20
- NgtFormComponent,
21
- NgtFormValidationMessageComponent
22
- ],
23
- exports: [
24
- NgtFormComponent,
25
- NgtFormValidationMessageComponent
26
- ]
27
- }]
28
- }] });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWZvcm0ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWZvcm0vbmd0LWZvcm0ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQ3hILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQWdCeEQsTUFBTSxPQUFPLGFBQWE7OzBHQUFiLGFBQWE7MkdBQWIsYUFBYSxpQkFUbEIsZ0JBQWdCO1FBQ2hCLGlDQUFpQyxhQUpqQyxZQUFZLGFBT1osZ0JBQWdCO1FBQ2hCLGlDQUFpQzsyR0FJNUIsYUFBYSxZQVpsQixZQUFZOzJGQVlQLGFBQWE7a0JBZHpCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFO3dCQUNMLFlBQVk7cUJBQ2Y7b0JBQ0QsWUFBWSxFQUFFO3dCQUNWLGdCQUFnQjt3QkFDaEIsaUNBQWlDO3FCQUNwQztvQkFDRCxPQUFPLEVBQUU7d0JBQ0wsZ0JBQWdCO3dCQUNoQixpQ0FBaUM7cUJBQ3BDO2lCQUVKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE5ndEZvcm1WYWxpZGF0aW9uTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4vbmd0LWZvcm0tdmFsaWRhdGlvbi1tZXNzYWdlL25ndC1mb3JtLXZhbGlkYXRpb24tbWVzc2FnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd0Rm9ybUNvbXBvbmVudCB9IGZyb20gJy4vbmd0LWZvcm0uY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZVxuICAgIF0sXG4gICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgIE5ndEZvcm1Db21wb25lbnQsXG4gICAgICAgIE5ndEZvcm1WYWxpZGF0aW9uTWVzc2FnZUNvbXBvbmVudFxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBOZ3RGb3JtQ29tcG9uZW50LFxuICAgICAgICBOZ3RGb3JtVmFsaWRhdGlvbk1lc3NhZ2VDb21wb25lbnRcbiAgICBdXG5cbn0pXG5leHBvcnQgY2xhc3MgTmd0Rm9ybU1vZHVsZSB7IH1cbiJdfQ==
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { NgtFormValidationMessageComponent } from './ngt-form-validation-message/ngt-form-validation-message.component';
4
+ import { NgtFormComponent } from './ngt-form.component';
5
+ import * as i0 from "@angular/core";
6
+ export class NgtFormModule {
7
+ }
8
+ NgtFormModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
9
+ NgtFormModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.8", ngImport: i0, type: NgtFormModule, declarations: [NgtFormComponent,
10
+ NgtFormValidationMessageComponent], imports: [CommonModule], exports: [NgtFormComponent,
11
+ NgtFormValidationMessageComponent] });
12
+ NgtFormModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormModule, imports: [CommonModule] });
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtFormModule, decorators: [{
14
+ type: NgModule,
15
+ args: [{
16
+ imports: [
17
+ CommonModule
18
+ ],
19
+ declarations: [
20
+ NgtFormComponent,
21
+ NgtFormValidationMessageComponent
22
+ ],
23
+ exports: [
24
+ NgtFormComponent,
25
+ NgtFormValidationMessageComponent
26
+ ]
27
+ }]
28
+ }] });
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LWZvcm0ubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LWZvcm0vbmd0LWZvcm0ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQ3hILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOztBQWdCeEQsTUFBTSxPQUFPLGFBQWE7OzBHQUFiLGFBQWE7MkdBQWIsYUFBYSxpQkFUbEIsZ0JBQWdCO1FBQ2hCLGlDQUFpQyxhQUpqQyxZQUFZLGFBT1osZ0JBQWdCO1FBQ2hCLGlDQUFpQzsyR0FJNUIsYUFBYSxZQVpsQixZQUFZOzJGQVlQLGFBQWE7a0JBZHpCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFO3dCQUNMLFlBQVk7cUJBQ2Y7b0JBQ0QsWUFBWSxFQUFFO3dCQUNWLGdCQUFnQjt3QkFDaEIsaUNBQWlDO3FCQUNwQztvQkFDRCxPQUFPLEVBQUU7d0JBQ0wsZ0JBQWdCO3dCQUNoQixpQ0FBaUM7cUJBQ3BDO2lCQUVKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IE5ndEZvcm1WYWxpZGF0aW9uTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4vbmd0LWZvcm0tdmFsaWRhdGlvbi1tZXNzYWdlL25ndC1mb3JtLXZhbGlkYXRpb24tbWVzc2FnZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBOZ3RGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9uZ3QtZm9ybS5jb21wb25lbnQnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBDb21tb25Nb2R1bGVcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgICBOZ3RGb3JtQ29tcG9uZW50LFxyXG4gICAgICAgIE5ndEZvcm1WYWxpZGF0aW9uTWVzc2FnZUNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgICBOZ3RGb3JtQ29tcG9uZW50LFxyXG4gICAgICAgIE5ndEZvcm1WYWxpZGF0aW9uTWVzc2FnZUNvbXBvbmVudFxyXG4gICAgXVxyXG5cclxufSlcclxuZXhwb3J0IGNsYXNzIE5ndEZvcm1Nb2R1bGUgeyB9XHJcbiJdfQ==