design-angular-kit 1.0.0-1 → 1.0.0-3

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 (218) hide show
  1. package/README.md +152 -18
  2. package/assets/i18n/it.json +81 -0
  3. package/esm2020/lib/abstracts/abstract-form-component.mjs +165 -0
  4. package/esm2020/lib/abstracts/abstract.component.mjs +20 -0
  5. package/esm2020/lib/components/core/accordion/accordion.component.mjs +20 -0
  6. package/esm2020/lib/components/core/alert/alert.component.mjs +29 -0
  7. package/esm2020/lib/components/core/badge/badge.directive.mjs +34 -0
  8. package/esm2020/lib/components/core/button/button.directive.mjs +78 -0
  9. package/esm2020/lib/components/core/callout/callout.component.mjs +84 -0
  10. package/esm2020/lib/components/core/card/card.component.mjs +58 -0
  11. package/esm2020/lib/components/core/carousel/carousel/carousel.component.mjs +66 -0
  12. package/esm2020/lib/components/core/carousel/carousel-item/carousel-item.component.mjs +14 -0
  13. package/esm2020/lib/components/core/chip/chip.component.mjs +89 -0
  14. package/esm2020/lib/components/core/collapse/collapse.component.mjs +96 -0
  15. package/esm2020/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.mjs +24 -0
  16. package/esm2020/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.mjs +11 -0
  17. package/esm2020/lib/components/core/dimmer/dimmer.component.mjs +59 -0
  18. package/esm2020/lib/components/core/dropdown/dropdown/dropdown.component.mjs +60 -0
  19. package/esm2020/lib/components/core/dropdown/dropdown-item/dropdown-item.component.mjs +71 -0
  20. package/esm2020/lib/components/core/forward/forward.directive.mjs +51 -0
  21. package/esm2020/lib/components/core/link/link.component.mjs +39 -0
  22. package/esm2020/lib/components/core/list/list/list.component.mjs +13 -0
  23. package/esm2020/lib/components/core/list/list-item/list-item.component.mjs +36 -0
  24. package/esm2020/lib/components/core/modal/modal.component.mjs +98 -0
  25. package/esm2020/lib/components/core/notifications/notifications.component.mjs +66 -0
  26. package/esm2020/lib/components/core/pagination/pagination.component.mjs +51 -0
  27. package/esm2020/lib/components/core/popover/popover.directive.mjs +176 -0
  28. package/esm2020/lib/components/core/progress-bar/progress-bar.component.mjs +34 -0
  29. package/esm2020/lib/components/core/progress-button/progress-button.component.mjs +27 -0
  30. package/esm2020/lib/components/core/spinner/spinner.component.mjs +35 -0
  31. package/esm2020/lib/components/core/tab/tab-container/tab-container.component.mjs +33 -0
  32. package/esm2020/lib/components/core/tab/tab-item/tab-item.component.mjs +36 -0
  33. package/esm2020/lib/components/core/table/table.component.mjs +57 -0
  34. package/esm2020/lib/components/core/tooltip/tooltip.directive.mjs +140 -0
  35. package/esm2020/lib/components/form/checkbox/checkbox.component.mjs +40 -0
  36. package/esm2020/lib/components/form/input/input.component.mjs +226 -0
  37. package/esm2020/lib/components/form/password-input/password-input.component.mjs +112 -0
  38. package/esm2020/lib/components/form/radio-button/radio-button.component.mjs +53 -0
  39. package/esm2020/lib/components/form/select/select.component.mjs +62 -0
  40. package/esm2020/lib/components/form/textarea/textarea.component.mjs +46 -0
  41. package/esm2020/lib/components/form/upload-drag-drop/upload-drag-drop.component.mjs +134 -0
  42. package/esm2020/lib/components/form/upload-file-list/upload-file-list.component.mjs +99 -0
  43. package/esm2020/lib/components/navigation/back-button/back-button.component.mjs +69 -0
  44. package/esm2020/lib/components/navigation/back-to-top/back-to-top.component.mjs +39 -0
  45. package/esm2020/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.mjs +45 -0
  46. package/esm2020/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.mjs +23 -0
  47. package/esm2020/lib/components/navigation/header/header.component.mjs +61 -0
  48. package/esm2020/lib/components/utils/icon/icon.component.mjs +54 -0
  49. package/esm2020/lib/components/utils/not-found-page/not-found-page.component.mjs +13 -0
  50. package/esm2020/lib/design-angular-kit.module.mjs +32 -132
  51. package/esm2020/lib/interfaces/core.mjs +16 -0
  52. package/esm2020/lib/interfaces/form.mjs +2 -0
  53. package/esm2020/lib/interfaces/icon.mjs +2 -0
  54. package/esm2020/lib/modules/components.module.mjs +245 -0
  55. package/esm2020/lib/pipes/mark-matching-text.pipe.mjs +36 -0
  56. package/esm2020/lib/services/notifications/notifications.service.mjs +122 -0
  57. package/esm2020/lib/utils/boolean-input.mjs +15 -0
  58. package/esm2020/lib/utils/file-utils.mjs +65 -0
  59. package/esm2020/lib/utils/regex.mjs +26 -0
  60. package/esm2020/lib/validators/it-validators.mjs +131 -0
  61. package/esm2020/public_api.mjs +62 -36
  62. package/fesm2015/design-angular-kit.mjs +2856 -2640
  63. package/fesm2015/design-angular-kit.mjs.map +1 -1
  64. package/fesm2020/design-angular-kit.mjs +2837 -2640
  65. package/fesm2020/design-angular-kit.mjs.map +1 -1
  66. package/lib/abstracts/abstract-form-component.d.ts +84 -0
  67. package/lib/abstracts/abstract.component.d.ts +14 -0
  68. package/lib/components/core/accordion/accordion.component.d.ts +16 -0
  69. package/lib/components/core/alert/alert.component.d.ts +17 -0
  70. package/lib/components/core/badge/badge.directive.d.ts +16 -0
  71. package/lib/components/core/button/button.directive.d.ts +38 -0
  72. package/lib/components/core/callout/callout.component.d.ts +47 -0
  73. package/lib/components/core/card/card.component.d.ts +41 -0
  74. package/lib/components/core/carousel/carousel/carousel.component.d.ts +46 -0
  75. package/lib/components/core/carousel/carousel-item/carousel-item.component.d.ts +10 -0
  76. package/lib/components/core/chip/chip.component.d.ts +62 -0
  77. package/lib/components/core/collapse/collapse.component.d.ts +59 -0
  78. package/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.d.ts +12 -0
  79. package/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.d.ts +5 -0
  80. package/lib/components/core/dimmer/dimmer.component.d.ts +24 -0
  81. package/lib/components/core/dropdown/dropdown/dropdown.component.d.ts +43 -0
  82. package/lib/components/core/dropdown/dropdown-item/dropdown-item.component.d.ts +44 -0
  83. package/lib/components/core/forward/forward.directive.d.ts +14 -0
  84. package/lib/components/core/link/link.component.d.ts +34 -0
  85. package/lib/components/core/list/list/list.component.d.ts +10 -0
  86. package/lib/components/core/list/list-item/list-item.component.d.ts +24 -0
  87. package/lib/components/core/modal/modal.component.d.ts +59 -0
  88. package/lib/components/core/notifications/notifications.component.d.ts +30 -0
  89. package/lib/components/core/pagination/pagination.component.d.ts +31 -0
  90. package/lib/components/core/popover/popover.directive.d.ts +97 -0
  91. package/lib/components/core/progress-bar/progress-bar.component.d.ts +28 -0
  92. package/lib/components/core/progress-button/progress-button.component.d.ts +22 -0
  93. package/lib/components/core/spinner/spinner.component.d.ts +21 -0
  94. package/lib/components/core/tab/tab-container/tab-container.component.d.ts +28 -0
  95. package/lib/components/core/tab/tab-item/tab-item.component.d.ts +34 -0
  96. package/lib/components/core/table/table.component.d.ts +54 -0
  97. package/lib/components/core/tooltip/tooltip.directive.d.ts +80 -0
  98. package/lib/components/form/checkbox/checkbox.component.d.ts +30 -0
  99. package/lib/components/form/input/input.component.d.ts +94 -0
  100. package/lib/components/form/password-input/password-input.component.d.ts +54 -0
  101. package/lib/components/form/radio-button/radio-button.component.d.ts +29 -0
  102. package/lib/components/form/select/select.component.d.ts +30 -0
  103. package/lib/components/form/textarea/textarea.component.d.ts +24 -0
  104. package/lib/components/form/upload-drag-drop/upload-drag-drop.component.d.ts +53 -0
  105. package/lib/components/form/upload-file-list/upload-file-list.component.d.ts +57 -0
  106. package/lib/components/navigation/back-button/back-button.component.d.ts +47 -0
  107. package/lib/components/navigation/back-to-top/back-to-top.component.d.ts +27 -0
  108. package/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.d.ts +30 -0
  109. package/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.d.ts +22 -0
  110. package/lib/components/navigation/header/header.component.d.ts +28 -0
  111. package/lib/components/utils/icon/icon.component.d.ts +40 -0
  112. package/lib/components/utils/not-found-page/not-found-page.component.d.ts +5 -0
  113. package/lib/design-angular-kit.module.d.ts +4 -24
  114. package/lib/interfaces/core.d.ts +36 -0
  115. package/lib/interfaces/form.d.ts +61 -0
  116. package/lib/interfaces/icon.d.ts +3 -0
  117. package/lib/modules/components.module.d.ts +58 -0
  118. package/lib/{form-input → pipes}/mark-matching-text.pipe.d.ts +0 -0
  119. package/lib/services/notifications/notifications.service.d.ts +63 -0
  120. package/lib/utils/boolean-input.d.ts +11 -0
  121. package/lib/utils/file-utils.d.ts +27 -0
  122. package/lib/utils/regex.d.ts +25 -0
  123. package/lib/validators/it-validators.d.ts +58 -0
  124. package/package.json +20 -13
  125. package/public_api.d.ts +54 -35
  126. package/esm2020/lib/badge/badge.directive.mjs +0 -83
  127. package/esm2020/lib/breadcrumb/breadcrumb-item.component.mjs +0 -66
  128. package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +0 -89
  129. package/esm2020/lib/button/button.directive.mjs +0 -185
  130. package/esm2020/lib/button/button.module.mjs +0 -18
  131. package/esm2020/lib/checkbox/checkbox.component.mjs +0 -138
  132. package/esm2020/lib/collapse/collapse-group.component.mjs +0 -57
  133. package/esm2020/lib/collapse/collapse-item.component.mjs +0 -79
  134. package/esm2020/lib/collapse/collapse.config.mjs +0 -12
  135. package/esm2020/lib/collapse/collapse.directive.mjs +0 -55
  136. package/esm2020/lib/collapse/collapse.module.mjs +0 -22
  137. package/esm2020/lib/dropdown/dropdown-divider.component.mjs +0 -11
  138. package/esm2020/lib/dropdown/dropdown-item.component.mjs +0 -97
  139. package/esm2020/lib/dropdown/dropdown.component.mjs +0 -143
  140. package/esm2020/lib/dropdown/dropdown.config.mjs +0 -12
  141. package/esm2020/lib/dropdown/dropdown.directive.mjs +0 -156
  142. package/esm2020/lib/dropdown/dropdown.module.mjs +0 -25
  143. package/esm2020/lib/enums/icons.enum.mjs +0 -27
  144. package/esm2020/lib/form-input/form-input-password.utils.mjs +0 -154
  145. package/esm2020/lib/form-input/form-input.component.mjs +0 -495
  146. package/esm2020/lib/form-input/it-prefix.directive.mjs +0 -13
  147. package/esm2020/lib/form-input/it-suffix.directive.mjs +0 -13
  148. package/esm2020/lib/form-input/it-text-prefix.directive.mjs +0 -13
  149. package/esm2020/lib/form-input/it-text-suffix.directive.mjs +0 -13
  150. package/esm2020/lib/form-input/mark-matching-text.pipe.mjs +0 -36
  151. package/esm2020/lib/icon/icon.component.mjs +0 -87
  152. package/esm2020/lib/icon/icon.module.mjs +0 -18
  153. package/esm2020/lib/models/Alignment.mjs +0 -15
  154. package/esm2020/lib/models/ButtonSize.mjs +0 -15
  155. package/esm2020/lib/models/InputType.mjs +0 -44
  156. package/esm2020/lib/models/ThemeColor.mjs +0 -30
  157. package/esm2020/lib/popover/popover.config.mjs +0 -17
  158. package/esm2020/lib/popover/popover.directive.mjs +0 -33
  159. package/esm2020/lib/popover/popover.module.mjs +0 -19
  160. package/esm2020/lib/progress-bar/progress-bar.component.mjs +0 -98
  161. package/esm2020/lib/radio/radio.component.mjs +0 -287
  162. package/esm2020/lib/radio/unique-selection-dispatcher.mjs +0 -55
  163. package/esm2020/lib/tabs/tab-group.component.mjs +0 -177
  164. package/esm2020/lib/tabs/tab.component.mjs +0 -73
  165. package/esm2020/lib/tabs/tabs.module.mjs +0 -20
  166. package/esm2020/lib/toggle/toggle.component.mjs +0 -86
  167. package/esm2020/lib/tooltip/tooltip.config.mjs +0 -17
  168. package/esm2020/lib/tooltip/tooltip.directive.mjs +0 -43
  169. package/esm2020/lib/tooltip/tooltip.module.mjs +0 -19
  170. package/esm2020/lib/util/focus-mouse.directive.mjs +0 -32
  171. package/esm2020/lib/util/util.mjs +0 -12
  172. package/esm2020/lib/util/utils.module.mjs +0 -16
  173. package/lib/badge/badge.directive.d.ts +0 -33
  174. package/lib/breadcrumb/breadcrumb-item.component.d.ts +0 -33
  175. package/lib/breadcrumb/breadcrumb.component.d.ts +0 -33
  176. package/lib/button/button.directive.d.ts +0 -72
  177. package/lib/button/button.module.d.ts +0 -8
  178. package/lib/checkbox/checkbox.component.d.ts +0 -61
  179. package/lib/collapse/collapse-group.component.d.ts +0 -16
  180. package/lib/collapse/collapse-item.component.d.ts +0 -46
  181. package/lib/collapse/collapse.config.d.ts +0 -6
  182. package/lib/collapse/collapse.directive.d.ts +0 -25
  183. package/lib/collapse/collapse.module.d.ts +0 -12
  184. package/lib/dropdown/dropdown-divider.component.d.ts +0 -5
  185. package/lib/dropdown/dropdown-item.component.d.ts +0 -56
  186. package/lib/dropdown/dropdown.component.d.ts +0 -65
  187. package/lib/dropdown/dropdown.config.d.ts +0 -6
  188. package/lib/dropdown/dropdown.directive.d.ts +0 -77
  189. package/lib/dropdown/dropdown.module.d.ts +0 -15
  190. package/lib/enums/icons.enum.d.ts +0 -23
  191. package/lib/form-input/form-input-password.utils.d.ts +0 -45
  192. package/lib/form-input/form-input.component.d.ts +0 -283
  193. package/lib/form-input/it-prefix.directive.d.ts +0 -5
  194. package/lib/form-input/it-suffix.directive.d.ts +0 -5
  195. package/lib/form-input/it-text-prefix.directive.d.ts +0 -5
  196. package/lib/form-input/it-text-suffix.directive.d.ts +0 -5
  197. package/lib/icon/icon.component.d.ts +0 -34
  198. package/lib/icon/icon.module.d.ts +0 -8
  199. package/lib/models/Alignment.d.ts +0 -12
  200. package/lib/models/ButtonSize.d.ts +0 -11
  201. package/lib/models/InputType.d.ts +0 -36
  202. package/lib/models/ThemeColor.d.ts +0 -21
  203. package/lib/popover/popover.config.d.ts +0 -11
  204. package/lib/popover/popover.directive.d.ts +0 -20
  205. package/lib/popover/popover.module.d.ts +0 -9
  206. package/lib/progress-bar/progress-bar.component.d.ts +0 -55
  207. package/lib/radio/radio.component.d.ts +0 -116
  208. package/lib/radio/unique-selection-dispatcher.d.ts +0 -36
  209. package/lib/tabs/tab-group.component.d.ts +0 -71
  210. package/lib/tabs/tab.component.d.ts +0 -44
  211. package/lib/tabs/tabs.module.d.ts +0 -10
  212. package/lib/toggle/toggle.component.d.ts +0 -46
  213. package/lib/tooltip/tooltip.config.d.ts +0 -11
  214. package/lib/tooltip/tooltip.directive.d.ts +0 -27
  215. package/lib/tooltip/tooltip.module.d.ts +0 -9
  216. package/lib/util/focus-mouse.directive.d.ts +0 -13
  217. package/lib/util/util.d.ts +0 -5
  218. package/lib/util/utils.module.d.ts +0 -7
@@ -0,0 +1,57 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { isTrueBooleanInput } from "../../../utils/boolean-input";
3
+ import * as i0 from "@angular/core";
4
+ export class TableComponent {
5
+ constructor() {
6
+ /**
7
+ * Responsive tables allow you to scroll tables horizontally with ease.
8
+ * @default responsive
9
+ */
10
+ this.responsive = 'responsive';
11
+ }
12
+ get isStriped() {
13
+ return isTrueBooleanInput(this.striped);
14
+ }
15
+ get isHover() {
16
+ return isTrueBooleanInput(this.hover);
17
+ }
18
+ get isBordered() {
19
+ return isTrueBooleanInput(this.bordered);
20
+ }
21
+ get isBorderless() {
22
+ return isTrueBooleanInput(this.borderless);
23
+ }
24
+ get isCompact() {
25
+ return isTrueBooleanInput(this.compact);
26
+ }
27
+ get isCaptionTop() {
28
+ return isTrueBooleanInput(this.captionTop);
29
+ }
30
+ }
31
+ TableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
32
+ TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: TableComponent, selector: "it-table", inputs: { color: "color", headColor: "headColor", alignment: "alignment", striped: "striped", hover: "hover", bordered: "bordered", borderless: "borderless", compact: "compact", captionTop: "captionTop", responsive: "responsive" }, ngImport: i0, template: "<div [class]=\"responsive ? 'table-' + responsive : undefined\">\n <table class=\"table{{color ? ' table-' + color : '' }}\"\n [class.table-striped]=\"isStriped\"\n [class.table-hover]=\"isHover\"\n [class.table-bordered]=\"isBordered\"\n [class.table-borderless]=\"isBorderless\"\n [class.table-sm]=\"isCompact\"\n [class.caption-top]=\"isCaptionTop\">\n <caption>\n <ng-content select=\"[caption]\"></ng-content>\n </caption>\n <thead [class]=\"headColor ? 'table-' + headColor : undefined\">\n <ng-content select=\"[thead]\"></ng-content>\n </thead>\n <tbody>\n <ng-content select=\"[tbody]\"></ng-content>\n </tbody>\n <tfoot>\n <ng-content select=\"[tfoot]\"></ng-content>\n </tfoot>\n </table>\n</div>\n", styles: ["caption:empty{display:none}caption:empty~thead{border-top:none!important}\n"] });
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TableComponent, decorators: [{
34
+ type: Component,
35
+ args: [{ selector: 'it-table', template: "<div [class]=\"responsive ? 'table-' + responsive : undefined\">\n <table class=\"table{{color ? ' table-' + color : '' }}\"\n [class.table-striped]=\"isStriped\"\n [class.table-hover]=\"isHover\"\n [class.table-bordered]=\"isBordered\"\n [class.table-borderless]=\"isBorderless\"\n [class.table-sm]=\"isCompact\"\n [class.caption-top]=\"isCaptionTop\">\n <caption>\n <ng-content select=\"[caption]\"></ng-content>\n </caption>\n <thead [class]=\"headColor ? 'table-' + headColor : undefined\">\n <ng-content select=\"[thead]\"></ng-content>\n </thead>\n <tbody>\n <ng-content select=\"[tbody]\"></ng-content>\n </tbody>\n <tfoot>\n <ng-content select=\"[tfoot]\"></ng-content>\n </tfoot>\n </table>\n</div>\n", styles: ["caption:empty{display:none}caption:empty~thead{border-top:none!important}\n"] }]
36
+ }], propDecorators: { color: [{
37
+ type: Input
38
+ }], headColor: [{
39
+ type: Input
40
+ }], alignment: [{
41
+ type: Input
42
+ }], striped: [{
43
+ type: Input
44
+ }], hover: [{
45
+ type: Input
46
+ }], bordered: [{
47
+ type: Input
48
+ }], borderless: [{
49
+ type: Input
50
+ }], compact: [{
51
+ type: Input
52
+ }], captionTop: [{
53
+ type: Input
54
+ }], responsive: [{
55
+ type: Input
56
+ }] } });
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWFuZ3VsYXIta2l0L3NyYy9saWIvY29tcG9uZW50cy9jb3JlL3RhYmxlL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY29yZS90YWJsZS90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUUvQyxPQUFPLEVBQWUsa0JBQWtCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQzs7QUFPOUUsTUFBTSxPQUFPLGNBQWM7SUFMM0I7UUFvREU7OztXQUdHO1FBQ00sZUFBVSxHQUFvQixZQUFZLENBQUM7S0EwQnJEO0lBdkJDLElBQUksU0FBUztRQUNYLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0MsQ0FBQzs7MkdBNUVVLGNBQWM7K0ZBQWQsY0FBYyx3UkNUM0IsK3hCQXNCQTsyRkRiYSxjQUFjO2tCQUwxQixTQUFTOytCQUNFLFVBQVU7OEJBU1gsS0FBSztzQkFBYixLQUFLO2dCQUtHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBS0csU0FBUztzQkFBakIsS0FBSztnQkFLRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0csS0FBSztzQkFBYixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFLRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFNRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VGFibGVDb2xvciwgVGFibGVIZWFkQ29sb3IsIFRhYmxlUmVzcG9uc2l2ZSwgVmVydGljYWxBbGlnbm1lbnR9IGZyb20gXCIuLi8uLi8uLi9pbnRlcmZhY2VzL2NvcmVcIjtcbmltcG9ydCB7Qm9vbGVhbklucHV0LCBpc1RydWVCb29sZWFuSW5wdXR9IGZyb20gXCIuLi8uLi8uLi91dGlscy9ib29sZWFuLWlucHV0XCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2l0LXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCB7XG5cbiAgLyoqXG4gICAqIFRhYmxlIGNvbG9yXG4gICAqL1xuICBASW5wdXQoKSBjb2xvcj86IFRhYmxlQ29sb3I7XG5cbiAgLyoqXG4gICAqIEhlYWQgdGFibGUgY29sb3JcbiAgICovXG4gIEBJbnB1dCgpIGhlYWRDb2xvcj86IFRhYmxlSGVhZENvbG9yO1xuXG4gIC8qKlxuICAgKiBVc2UgdmVydGljYWwgYWxpZ25tZW50IGNsYXNzZXMgdG8gcmVhbGlnbiB3aGVyZSBuZWVkZWQuXG4gICAqL1xuICBASW5wdXQoKSBhbGlnbm1lbnQ/OiBWZXJ0aWNhbEFsaWdubWVudDtcblxuICAvKipcbiAgICogVXNlIC50YWJsZS1zdHJpcGVkIHRvIGFkZCB6ZWJyYSBzdHJpcGVzIHRvIGVhY2ggdGFibGUgcm93IGNvbnRhaW5lZCBpbiA8dGJvZHk+LlxuICAgKi9cbiAgQElucHV0KCkgc3RyaXBlZD86IEJvb2xlYW5JbnB1dDtcblxuICAvKipcbiAgICogQWRkIC50YWJsZS1ob3ZlciB0byBlbmFibGUgaG92ZXIgc3RhdGUgb24gdGFibGUgcm93cyBjb250YWluZWQgaW4gPHRib2R5Pi5cbiAgICovXG4gIEBJbnB1dCgpIGhvdmVyPzogQm9vbGVhbklucHV0O1xuXG4gIC8qKlxuICAgKiBBZGQgLnRhYmxlLWJvcmRlcmVkIHRvIGhhdmUgYm9yZGVycyBvbiBhbGwgc2lkZXMgb2YgdGhlIHRhYmxlIGFuZCBvbiBhbGwgY2VsbHMuXG4gICAqL1xuICBASW5wdXQoKSBib3JkZXJlZD86IEJvb2xlYW5JbnB1dDtcblxuICAvKipcbiAgICogQWRkIHRoZSAudGFibGUtYm9yZGVybGVzcyBjbGFzcyBmb3IgYSBib3JkZXJsZXNzIHRhYmxlLlxuICAgKi9cbiAgQElucHV0KCkgYm9yZGVybGVzcz86IEJvb2xlYW5JbnB1dDtcblxuICAvKipcbiAgICogQWRkIC50YWJsZS1zbSB0byBtYWtlIHRhYmxlcyBtb3JlIGNvbXBhY3QgYnkgaGFsdmluZyB0aGUgY2VsbCBwYWRkaW5nLlxuICAgKi9cbiAgQElucHV0KCkgY29tcGFjdD86IEJvb2xlYW5JbnB1dDtcblxuICAvKipcbiAgICogVG8gcmVuZGVyIHRoZSA8Y2FwdGlvbj4gb24gdG9wIG9mIHRoZSB0YWJsZVxuICAgKi9cbiAgQElucHV0KCkgY2FwdGlvblRvcD86IEJvb2xlYW5JbnB1dDtcblxuICAvKipcbiAgICogUmVzcG9uc2l2ZSB0YWJsZXMgYWxsb3cgeW91IHRvIHNjcm9sbCB0YWJsZXMgaG9yaXpvbnRhbGx5IHdpdGggZWFzZS5cbiAgICogQGRlZmF1bHQgcmVzcG9uc2l2ZVxuICAgKi9cbiAgQElucHV0KCkgcmVzcG9uc2l2ZTogVGFibGVSZXNwb25zaXZlID0gJ3Jlc3BvbnNpdmUnO1xuXG5cbiAgZ2V0IGlzU3RyaXBlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNUcnVlQm9vbGVhbklucHV0KHRoaXMuc3RyaXBlZCk7XG4gIH1cblxuICBnZXQgaXNIb3ZlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNUcnVlQm9vbGVhbklucHV0KHRoaXMuaG92ZXIpO1xuICB9XG5cbiAgZ2V0IGlzQm9yZGVyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzVHJ1ZUJvb2xlYW5JbnB1dCh0aGlzLmJvcmRlcmVkKTtcbiAgfVxuXG4gIGdldCBpc0JvcmRlcmxlc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzVHJ1ZUJvb2xlYW5JbnB1dCh0aGlzLmJvcmRlcmxlc3MpO1xuICB9XG5cbiAgZ2V0IGlzQ29tcGFjdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNUcnVlQm9vbGVhbklucHV0KHRoaXMuY29tcGFjdCk7XG4gIH1cblxuICBnZXQgaXNDYXB0aW9uVG9wKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1RydWVCb29sZWFuSW5wdXQodGhpcy5jYXB0aW9uVG9wKTtcbiAgfVxufVxuIiwiPGRpdiBbY2xhc3NdPVwicmVzcG9uc2l2ZSA/ICd0YWJsZS0nICsgcmVzcG9uc2l2ZSA6IHVuZGVmaW5lZFwiPlxuICA8dGFibGUgY2xhc3M9XCJ0YWJsZXt7Y29sb3IgPyAnIHRhYmxlLScgKyBjb2xvciA6ICcnIH19XCJcbiAgICAgICAgIFtjbGFzcy50YWJsZS1zdHJpcGVkXT1cImlzU3RyaXBlZFwiXG4gICAgICAgICBbY2xhc3MudGFibGUtaG92ZXJdPVwiaXNIb3ZlclwiXG4gICAgICAgICBbY2xhc3MudGFibGUtYm9yZGVyZWRdPVwiaXNCb3JkZXJlZFwiXG4gICAgICAgICBbY2xhc3MudGFibGUtYm9yZGVybGVzc109XCJpc0JvcmRlcmxlc3NcIlxuICAgICAgICAgW2NsYXNzLnRhYmxlLXNtXT1cImlzQ29tcGFjdFwiXG4gICAgICAgICBbY2xhc3MuY2FwdGlvbi10b3BdPVwiaXNDYXB0aW9uVG9wXCI+XG4gICAgPGNhcHRpb24+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbY2FwdGlvbl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9jYXB0aW9uPlxuICAgIDx0aGVhZCBbY2xhc3NdPVwiaGVhZENvbG9yID8gJ3RhYmxlLScgKyBoZWFkQ29sb3IgOiB1bmRlZmluZWRcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbdGhlYWRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvdGhlYWQ+XG4gICAgPHRib2R5PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlt0Ym9keV1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC90Ym9keT5cbiAgICA8dGZvb3Q+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3Rmb290XVwiPjwvbmctY29udGVudD5cbiAgICA8L3Rmb290PlxuICA8L3RhYmxlPlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,140 @@
1
+ import { Directive, EventEmitter, Input, Output } from '@angular/core';
2
+ import { isTrueBooleanInput } from '../../../utils/boolean-input';
3
+ import { Tooltip } from 'bootstrap-italia';
4
+ import * as i0 from "@angular/core";
5
+ export class TooltipDirective {
6
+ constructor(_elementRef) {
7
+ this._elementRef = _elementRef;
8
+ /**
9
+ * This event fires immediately when the show method is called.
10
+ */
11
+ this.onShow = new EventEmitter();
12
+ /**
13
+ * This event is triggered when the tooltip has been made visible to the user (it will wait for the CSS transitions to complete).
14
+ */
15
+ this.onShown = new EventEmitter();
16
+ /**
17
+ * This event fires immediately when the hide method is called.
18
+ */
19
+ this.onHide = new EventEmitter();
20
+ /**
21
+ * This event is raised when the tooltip has finished being hidden from the user (it will wait for the CSS transitions to complete).
22
+ */
23
+ this.onHidden = new EventEmitter();
24
+ /**
25
+ * This event fires after the show event when the tooltip template has been added to the DOM.
26
+ */
27
+ this.onInserted = new EventEmitter();
28
+ this.element = this._elementRef.nativeElement;
29
+ }
30
+ /**
31
+ * Define the tooltip title
32
+ * @param title the tooltip title
33
+ */
34
+ set title(title) {
35
+ if (title) {
36
+ // this.element.setAttribute("title", title);
37
+ this.element.setAttribute('data-bs-original-title', title);
38
+ }
39
+ }
40
+ /**
41
+ * Define the tooltip placement
42
+ * @param placement
43
+ */
44
+ set placement(placement) {
45
+ this.element.setAttribute('data-bs-placement', placement);
46
+ }
47
+ /**
48
+ * Indicates whether the title contains html
49
+ * @param html true if contain html
50
+ */
51
+ set html(html) {
52
+ this.element.setAttribute('data-bs-html', isTrueBooleanInput(html) ? 'true' : 'false');
53
+ }
54
+ ngAfterViewInit() {
55
+ this.element.setAttribute('data-bs-toggle', 'tooltip');
56
+ this.tooltip = Tooltip.getOrCreateInstance(this.element);
57
+ this.element.addEventListener('show.bs.tooltip', event => this.onShow.emit(event));
58
+ this.element.addEventListener('shown.bs.tooltip', event => this.onShown.emit(event));
59
+ this.element.addEventListener('hide.bs.tooltip', event => this.onHide.emit(event));
60
+ this.element.addEventListener('hidden.bs.tooltip', event => this.onHidden.emit(event));
61
+ this.element.addEventListener('inserted.bs.tooltip', event => this.onInserted.emit(event));
62
+ }
63
+ /**
64
+ * Shows the tooltip of an item.
65
+ */
66
+ show() {
67
+ this.tooltip?.show();
68
+ }
69
+ /**
70
+ * Hide the tooltip of an element.
71
+ */
72
+ hide() {
73
+ this.tooltip?.hide();
74
+ }
75
+ /**
76
+ * Activate / Deactivate the tooltip of an element
77
+ */
78
+ toggle() {
79
+ this.tooltip?.toggle();
80
+ }
81
+ /**
82
+ * Hides and destroys the tooltip of an element.
83
+ */
84
+ dispose() {
85
+ this.tooltip?.dispose();
86
+ }
87
+ /**
88
+ * Gives the tooltip of an element a chance to be shown.
89
+ */
90
+ enable() {
91
+ this.tooltip?.enable();
92
+ }
93
+ /**
94
+ * Removes the ability to show the tooltip of an element.
95
+ */
96
+ disable() {
97
+ this.tooltip?.disable();
98
+ }
99
+ /**
100
+ * Toggles the possibility that the tooltip of an element is shown or hidden.
101
+ */
102
+ toggleEnabled() {
103
+ this.tooltip?.disable();
104
+ }
105
+ /**
106
+ * Updates the position of an element's tooltip.
107
+ */
108
+ update() {
109
+ this.tooltip?.disable();
110
+ }
111
+ }
112
+ TooltipDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TooltipDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
113
+ TooltipDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.4", type: TooltipDirective, selector: "[itTooltip]", inputs: { title: ["itTooltip", "title"], placement: ["tooltipPlacement", "placement"], html: ["tooltipHtml", "html"] }, outputs: { onShow: "onShow", onShown: "onShown", onHide: "onHide", onHidden: "onHidden", onInserted: "onInserted" }, exportAs: ["itTooltip"], ngImport: i0 });
114
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: TooltipDirective, decorators: [{
115
+ type: Directive,
116
+ args: [{
117
+ selector: '[itTooltip]',
118
+ exportAs: 'itTooltip'
119
+ }]
120
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { title: [{
121
+ type: Input,
122
+ args: ['itTooltip']
123
+ }], placement: [{
124
+ type: Input,
125
+ args: ['tooltipPlacement']
126
+ }], html: [{
127
+ type: Input,
128
+ args: ['tooltipHtml']
129
+ }], onShow: [{
130
+ type: Output
131
+ }], onShown: [{
132
+ type: Output
133
+ }], onHide: [{
134
+ type: Output
135
+ }], onHidden: [{
136
+ type: Output
137
+ }], onInserted: [{
138
+ type: Output
139
+ }] } });
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi9jb21wb25lbnRzL2NvcmUvdG9vbHRpcC90b29sdGlwLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRyxPQUFPLEVBQWdCLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQU0zQyxNQUFNLE9BQU8sZ0JBQWdCO0lBeUQzQixZQUNtQixXQUF1QjtRQUF2QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQTdCMUM7O1dBRUc7UUFDTyxXQUFNLEdBQXdCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFM0Q7O1dBRUc7UUFDTyxZQUFPLEdBQXdCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFNUQ7O1dBRUc7UUFDTyxXQUFNLEdBQXdCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFM0Q7O1dBRUc7UUFDTyxhQUFRLEdBQXdCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFN0Q7O1dBRUc7UUFDTyxlQUFVLEdBQXdCLElBQUksWUFBWSxFQUFFLENBQUM7UUFRN0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztJQUNoRCxDQUFDO0lBM0REOzs7T0FHRztJQUNILElBQXdCLEtBQUssQ0FBQyxLQUF5QjtRQUNyRCxJQUFJLEtBQUssRUFBRTtZQUNULDZDQUE2QztZQUM3QyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUM1RDtJQUNILENBQUM7SUFFRDs7O09BR0c7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N0IsS0FBSzt1QkFBQyxhQUFhO2dCQU9WLE1BQU07c0JBQWYsTUFBTTtnQkFLRyxPQUFPO3NCQUFoQixNQUFNO2dCQUtHLE1BQU07c0JBQWYsTUFBTTtnQkFLRyxRQUFRO3NCQUFqQixNQUFNO2dCQUtHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRWxlbWVudFBsYWNlbWVudCB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvY29yZSc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGlzVHJ1ZUJvb2xlYW5JbnB1dCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2Jvb2xlYW4taW5wdXQnO1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ2Jvb3RzdHJhcC1pdGFsaWEnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbaXRUb29sdGlwXScsXG4gIGV4cG9ydEFzOiAnaXRUb29sdGlwJ1xufSlcbmV4cG9ydCBjbGFzcyBUb29sdGlwRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgLyoqXG4gICAqIERlZmluZSB0aGUgdG9vbHRpcCB0aXRsZVxuICAgKiBAcGFyYW0gdGl0bGUgdGhlIHRvb2x0aXAgdGl0bGVcbiAgICovXG4gIEBJbnB1dCgnaXRUb29sdGlwJykgc2V0IHRpdGxlKHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodGl0bGUpIHtcbiAgICAgIC8vIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiLCB0aXRsZSk7XG4gICAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWJzLW9yaWdpbmFsLXRpdGxlJywgdGl0bGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgdGhlIHRvb2x0aXAgcGxhY2VtZW50XG4gICAqIEBwYXJhbSBwbGFjZW1lbnRcbiAgICovXG4gIEBJbnB1dCgndG9vbHRpcFBsYWNlbWVudCcpIHNldCBwbGFjZW1lbnQocGxhY2VtZW50OiBFbGVtZW50UGxhY2VtZW50KSB7XG4gICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1icy1wbGFjZW1lbnQnLCBwbGFjZW1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0aXRsZSBjb250YWlucyBodG1sXG4gICAqIEBwYXJhbSBodG1sIHRydWUgaWYgY29udGFpbiBodG1sXG4gICAqL1xuICBASW5wdXQoJ3Rvb2x0aXBIdG1sJykgc2V0IGh0bWwoaHRtbDogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1icy1odG1sJywgaXNUcnVlQm9vbGVhbklucHV0KGh0bWwpID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBldmVudCBmaXJlcyBpbW1lZGlhdGVseSB3aGVuIHRoZSBzaG93IG1ldGhvZCBpcyBjYWxsZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgb25TaG93OiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB0b29sdGlwIGhhcyBiZWVuIG1hZGUgdmlzaWJsZSB0byB0aGUgdXNlciAoaXQgd2lsbCB3YWl0IGZvciB0aGUgQ1NTIHRyYW5zaXRpb25zIHRvIGNvbXBsZXRlKS5cbiAgICovXG4gIEBPdXRwdXQoKSBvblNob3duOiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGZpcmVzIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGhpZGUgbWV0aG9kIGlzIGNhbGxlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBvbkhpZGU6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgcmFpc2VkIHdoZW4gdGhlIHRvb2x0aXAgaGFzIGZpbmlzaGVkIGJlaW5nIGhpZGRlbiBmcm9tIHRoZSB1c2VyIChpdCB3aWxsIHdhaXQgZm9yIHRoZSBDU1MgdHJhbnNpdGlvbnMgdG8gY29tcGxldGUpLlxuICAgKi9cbiAgQE91dHB1dCgpIG9uSGlkZGVuOiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGZpcmVzIGFmdGVyIHRoZSBzaG93IGV2ZW50IHdoZW4gdGhlIHRvb2x0aXAgdGVtcGxhdGUgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIERPTS5cbiAgICovXG4gIEBPdXRwdXQoKSBvbkluc2VydGVkOiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgdG9vbHRpcD86IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50UmVmOiBFbGVtZW50UmVmXG4gICkge1xuICAgIHRoaXMuZWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWJzLXRvZ2dsZScsICd0b29sdGlwJyk7XG4gICAgdGhpcy50b29sdGlwID0gVG9vbHRpcC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMuZWxlbWVudCk7XG5cbiAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2hvdy5icy50b29sdGlwJywgZXZlbnQgPT4gdGhpcy5vblNob3cuZW1pdChldmVudCkpO1xuICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzaG93bi5icy50b29sdGlwJywgZXZlbnQgPT4gdGhpcy5vblNob3duLmVtaXQoZXZlbnQpKTtcbiAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignaGlkZS5icy50b29sdGlwJywgZXZlbnQgPT4gdGhpcy5vbkhpZGUuZW1pdChldmVudCkpO1xuICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdoaWRkZW4uYnMudG9vbHRpcCcsIGV2ZW50ID0+IHRoaXMub25IaWRkZW4uZW1pdChldmVudCkpO1xuICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdpbnNlcnRlZC5icy50b29sdGlwJywgZXZlbnQgPT4gdGhpcy5vbkluc2VydGVkLmVtaXQoZXZlbnQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93cyB0aGUgdG9vbHRpcCBvZiBhbiBpdGVtLlxuICAgKi9cbiAgcHVibGljIHNob3coKTogdm9pZCB7XG4gICAgdGhpcy50b29sdGlwPy5zaG93KCk7XG4gIH1cblxuICAvKipcbiAgICogSGlkZSB0aGUgdG9vbHRpcCBvZiBhbiBlbGVtZW50LlxuICAgKi9cbiAgcHVibGljIGhpZGUoKTogdm9pZCB7XG4gICAgdGhpcy50b29sdGlwPy5oaWRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQWN0aXZhdGUgLyBEZWFjdGl2YXRlIHRoZSB0b29sdGlwIG9mIGFuIGVsZW1lbnRcbiAgICovXG4gIHB1YmxpYyB0b2dnbGUoKTogdm9pZCB7XG4gICAgdGhpcy50b29sdGlwPy50b2dnbGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlcyBhbmQgZGVzdHJveXMgdGhlIHRvb2x0aXAgb2YgYW4gZWxlbWVudC5cbiAgICovXG4gIHB1YmxpYyBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMudG9vbHRpcD8uZGlzcG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVzIHRoZSB0b29sdGlwIG9mIGFuIGVsZW1lbnQgYSBjaGFuY2UgdG8gYmUgc2hvd24uXG4gICAqL1xuICBwdWJsaWMgZW5hYmxlKCk6IHZvaWQge1xuICAgIHRoaXMudG9vbHRpcD8uZW5hYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgYWJpbGl0eSB0byBzaG93IHRoZSB0b29sdGlwIG9mIGFuIGVsZW1lbnQuXG4gICAqL1xuICBwdWJsaWMgZGlzYWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvb2x0aXA/LmRpc2FibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoZSB0b29sdGlwIG9mIGFuIGVsZW1lbnQgaXMgc2hvd24gb3IgaGlkZGVuLlxuICAgKi9cbiAgcHVibGljIHRvZ2dsZUVuYWJsZWQoKTogdm9pZCB7XG4gICAgdGhpcy50b29sdGlwPy5kaXNhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCdzIHRvb2x0aXAuXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlKCk6IHZvaWQge1xuICAgIHRoaXMudG9vbHRpcD8uZGlzYWJsZSgpO1xuICB9XG5cbn1cbiJdfQ==
@@ -0,0 +1,40 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { AbstractFormComponent } from "../../../abstracts/abstract-form-component";
3
+ import { isTrueBooleanInput } from "../../../utils/boolean-input";
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ import * as i2 from "@angular/forms";
7
+ export class CheckboxComponent extends AbstractFormComponent {
8
+ get isIndeterminate() {
9
+ return isTrueBooleanInput(this.indeterminate);
10
+ }
11
+ get isGroup() {
12
+ return isTrueBooleanInput(this.group);
13
+ }
14
+ ngOnInit() {
15
+ super.ngOnInit();
16
+ if (this.control.value || this.checked === undefined) {
17
+ return;
18
+ }
19
+ const value = isTrueBooleanInput(this.checked);
20
+ this.writeValue(value);
21
+ return this.onChange(value);
22
+ }
23
+ }
24
+ CheckboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: CheckboxComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
25
+ CheckboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: CheckboxComponent, selector: "it-checkbox[id][label]", inputs: { toggle: "toggle", inline: "inline", group: "group", checked: "checked", indeterminate: "indeterminate" }, usesInheritance: true, ngImport: i0, template: "<ng-container>\n <div class=\"form-check\"\n [class.form-check-group]=\"isGroup\"\n [class.form-check-inline]=\"inline\">\n\n <div *ngIf=\"toggle; else defaultStyle\" class=\"toggles\">\n <label [for]=\"id\">\n {{label}}\n <input [id]=\"id\"\n type=\"checkbox\"\n [formControl]=\"control\"\n [attr.aria-describedby]=\"id + '-help'\">\n <span class=\"lever\"></span>\n </label>\n </div>\n\n <ng-template #defaultStyle>\n <input [id]=\"id\"\n type=\"checkbox\"\n class=\"form-check-input\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n [class.semi-checked]=\"isIndeterminate\"\n [formControl]=\"control\"\n [attr.aria-describedby]=\"id + '-help'\">\n <label class=\"form-check-label\" [for]=\"id\">{{label}}</label>\n </ng-template>\n\n <small *ngIf=\"isGroup\" [id]=\"id + '-help'\" class=\"form-text\">\n <ng-content></ng-content>\n </small>\n\n <div *ngIf=\"isInvalid && isGroup\" class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <ng-container *ngTemplateOutlet=\"error\"></ng-container>\n </div>\n </div>\n\n <div *ngIf=\"isInvalid && !isGroup\" class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <ng-container *ngTemplateOutlet=\"error\"></ng-container>\n </div>\n</ng-container>\n\n<ng-template #error>\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n <ng-container *ngIf=\"!customError.hasChildNodes()\">{{invalidMessage | async}}</ng-container>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: CheckboxComponent, decorators: [{
27
+ type: Component,
28
+ args: [{ selector: 'it-checkbox[id][label]', template: "<ng-container>\n <div class=\"form-check\"\n [class.form-check-group]=\"isGroup\"\n [class.form-check-inline]=\"inline\">\n\n <div *ngIf=\"toggle; else defaultStyle\" class=\"toggles\">\n <label [for]=\"id\">\n {{label}}\n <input [id]=\"id\"\n type=\"checkbox\"\n [formControl]=\"control\"\n [attr.aria-describedby]=\"id + '-help'\">\n <span class=\"lever\"></span>\n </label>\n </div>\n\n <ng-template #defaultStyle>\n <input [id]=\"id\"\n type=\"checkbox\"\n class=\"form-check-input\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n [class.semi-checked]=\"isIndeterminate\"\n [formControl]=\"control\"\n [attr.aria-describedby]=\"id + '-help'\">\n <label class=\"form-check-label\" [for]=\"id\">{{label}}</label>\n </ng-template>\n\n <small *ngIf=\"isGroup\" [id]=\"id + '-help'\" class=\"form-text\">\n <ng-content></ng-content>\n </small>\n\n <div *ngIf=\"isInvalid && isGroup\" class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <ng-container *ngTemplateOutlet=\"error\"></ng-container>\n </div>\n </div>\n\n <div *ngIf=\"isInvalid && !isGroup\" class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <ng-container *ngTemplateOutlet=\"error\"></ng-container>\n </div>\n</ng-container>\n\n<ng-template #error>\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n <ng-container *ngIf=\"!customError.hasChildNodes()\">{{invalidMessage | async}}</ng-container>\n</ng-template>\n" }]
29
+ }], propDecorators: { toggle: [{
30
+ type: Input
31
+ }], inline: [{
32
+ type: Input
33
+ }], group: [{
34
+ type: Input
35
+ }], checked: [{
36
+ type: Input
37
+ }], indeterminate: [{
38
+ type: Input
39
+ }] } });
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWFuZ3VsYXIta2l0L3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQztBQUNqRixPQUFPLEVBQWUsa0JBQWtCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQzs7OztBQU85RSxNQUFNLE9BQU8saUJBQWtCLFNBQVEscUJBQThCO0lBMkJuRSxJQUFJLGVBQWU7UUFDakIsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFUSxRQUFRO1FBQ2YsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUU7WUFDcEQsT0FBTztTQUNSO1FBRUQsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7OzhHQTdDVSxpQkFBaUI7a0dBQWpCLGlCQUFpQix5TUNUOUIsb3FEQWdEQTsyRkR2Q2EsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLHdCQUF3Qjs4QkFTekIsTUFBTTtzQkFBZCxLQUFLO2dCQUtHLE1BQU07c0JBQWQsS0FBSztnQkFLRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0csT0FBTztzQkFBZixLQUFLO2dCQUtHLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBYnN0cmFjdEZvcm1Db21wb25lbnR9IGZyb20gXCIuLi8uLi8uLi9hYnN0cmFjdHMvYWJzdHJhY3QtZm9ybS1jb21wb25lbnRcIjtcbmltcG9ydCB7Qm9vbGVhbklucHV0LCBpc1RydWVCb29sZWFuSW5wdXR9IGZyb20gXCIuLi8uLi8uLi91dGlscy9ib29sZWFuLWlucHV0XCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2l0LWNoZWNrYm94W2lkXVtsYWJlbF0nLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hlY2tib3guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGVja2JveC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENoZWNrYm94Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RGb3JtQ29tcG9uZW50PGJvb2xlYW4+IHtcblxuICAvKipcbiAgICogSWYgc2hvdyBjaGVja2JveCBhcyB0b2dnbGVcbiAgICovXG4gIEBJbnB1dCgpIHRvZ2dsZT86IEJvb2xlYW5JbnB1dDtcblxuICAvKipcbiAgICogSWYgc2hvdyBjaGVja2JveCBpbmxpbmVcbiAgICovXG4gIEBJbnB1dCgpIGlubGluZT86IEJvb2xlYW5JbnB1dDtcblxuICAvKipcbiAgICogSWYgaXMgY2hlY2tib3ggZ3JvdXBcbiAgICovXG4gIEBJbnB1dCgpIGdyb3VwPzogQm9vbGVhbklucHV0O1xuXG4gIC8qKlxuICAgKiBJZiBjaGVja2JveCBpcyBjaGVja2VkXG4gICAqL1xuICBASW5wdXQoKSBjaGVja2VkPzogQm9vbGVhbklucHV0O1xuXG4gIC8qKlxuICAgKiBJZiBjaGVja2JveCBpcyBpbmRldGVybWluYXRlXG4gICAqL1xuICBASW5wdXQoKSBpbmRldGVybWluYXRlPzogQm9vbGVhbklucHV0O1xuXG4gIGdldCBpc0luZGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzVHJ1ZUJvb2xlYW5JbnB1dCh0aGlzLmluZGV0ZXJtaW5hdGUpO1xuICB9XG5cbiAgZ2V0IGlzR3JvdXAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzVHJ1ZUJvb2xlYW5JbnB1dCh0aGlzLmdyb3VwKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCkge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICBpZiAodGhpcy5jb250cm9sLnZhbHVlIHx8IHRoaXMuY2hlY2tlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBpc1RydWVCb29sZWFuSW5wdXQodGhpcy5jaGVja2VkKTtcbiAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUpO1xuICAgIHJldHVybiB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lcj5cbiAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIlxuICAgICAgIFtjbGFzcy5mb3JtLWNoZWNrLWdyb3VwXT1cImlzR3JvdXBcIlxuICAgICAgIFtjbGFzcy5mb3JtLWNoZWNrLWlubGluZV09XCJpbmxpbmVcIj5cblxuICAgIDxkaXYgKm5nSWY9XCJ0b2dnbGU7IGVsc2UgZGVmYXVsdFN0eWxlXCIgY2xhc3M9XCJ0b2dnbGVzXCI+XG4gICAgICA8bGFiZWwgW2Zvcl09XCJpZFwiPlxuICAgICAgICB7e2xhYmVsfX1cbiAgICAgICAgPGlucHV0IFtpZF09XCJpZFwiXG4gICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJpZCArICctaGVscCdcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJsZXZlclwiPjwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRTdHlsZT5cbiAgICAgIDxpbnB1dCBbaWRdPVwiaWRcIlxuICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCJcbiAgICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJpc0ludmFsaWRcIlxuICAgICAgICAgICAgIFtjbGFzcy5pcy12YWxpZF09XCJpc1ZhbGlkXCJcbiAgICAgICAgICAgICBbY2xhc3Muc2VtaS1jaGVja2VkXT1cImlzSW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaWQgKyAnLWhlbHAnXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgW2Zvcl09XCJpZFwiPnt7bGFiZWx9fTwvbGFiZWw+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxzbWFsbCAqbmdJZj1cImlzR3JvdXBcIiBbaWRdPVwiaWQgKyAnLWhlbHAnXCIgY2xhc3M9XCJmb3JtLXRleHRcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L3NtYWxsPlxuXG4gICAgPGRpdiAqbmdJZj1cImlzSW52YWxpZCAmJiBpc0dyb3VwXCIgY2xhc3M9XCJmb3JtLWZlZWRiYWNrIGp1c3QtdmFsaWRhdGUtZXJyb3ItbGFiZWxcIiBbaWRdPVwiaWQgKyAnLWVycm9yJ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVycm9yXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJpc0ludmFsaWQgJiYgIWlzR3JvdXBcIiBjbGFzcz1cImZvcm0tZmVlZGJhY2sganVzdC12YWxpZGF0ZS1lcnJvci1sYWJlbFwiIFtpZF09XCJpZCArICctZXJyb3InXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVycm9yXCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjZXJyb3I+XG4gIDxkaXYgI2N1c3RvbUVycm9yPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltlcnJvcl1cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWN1c3RvbUVycm9yLmhhc0NoaWxkTm9kZXMoKVwiPnt7aW52YWxpZE1lc3NhZ2UgfCBhc3luY319PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -0,0 +1,226 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { AbstractFormComponent } from '../../../abstracts/abstract-form-component';
3
+ import { Validators } from '@angular/forms';
4
+ import { ItValidators } from '../../../validators/it-validators';
5
+ import { isTrueBooleanInput } from '../../../utils/boolean-input';
6
+ import { map, Observable, of } from 'rxjs';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common";
9
+ import * as i2 from "@angular/forms";
10
+ import * as i3 from "../../utils/icon/icon.component";
11
+ import * as i4 from "../../../pipes/mark-matching-text.pipe";
12
+ export class InputComponent extends AbstractFormComponent {
13
+ constructor() {
14
+ super(...arguments);
15
+ /**
16
+ * The input type
17
+ * @default text
18
+ */
19
+ this.type = 'text';
20
+ /**
21
+ * The input placeholder
22
+ */
23
+ this.placeholder = '';
24
+ this._autoCompleteData = [];
25
+ this.showAutocompletion = false;
26
+ /** Observable da cui vengono emessi i risultati dell'auto completamento */
27
+ this.autocompleteResults$ = new Observable();
28
+ }
29
+ /**
30
+ * Opzionale.
31
+ * Disponibile solo se il type è search.
32
+ * Indica la lista di elementi ricercabili su cui basare il sistema di autocompletamento della input
33
+ */
34
+ set autoCompleteData(value) { this._autoCompleteData = value; }
35
+ get autoCompleteData() { return this._autoCompleteData; }
36
+ get isActiveLabel() {
37
+ const value = this.control.value;
38
+ if ((!!value && value !== 0) || value === 0 || !!this.placeholder) {
39
+ return true;
40
+ }
41
+ if (this.type === 'number' && (isTrueBooleanInput(this.currency) || isTrueBooleanInput(this.percentage))) {
42
+ return true;
43
+ }
44
+ return this.type === 'date' || this.type === 'time';
45
+ }
46
+ /**
47
+ * Check is readonly field
48
+ */
49
+ get isReadonly() {
50
+ return this.readonly === 'plaintext' || isTrueBooleanInput(this.readonly);
51
+ }
52
+ /**
53
+ * Return the invalid message string from TranslateService
54
+ */
55
+ get invalidMessage() {
56
+ if (this.hasError('min') && this.min) {
57
+ return this._translateService.get('it.errors.min-invalid', {
58
+ min: this.min
59
+ });
60
+ }
61
+ if (this.hasError('max') && this.max) {
62
+ return this._translateService.get('it.errors.max-invalid', {
63
+ max: this.max
64
+ });
65
+ }
66
+ if (this.hasError('minlength')) {
67
+ const error = this.getError('minlength');
68
+ return this._translateService.get('it.errors.min-length-invalid', { min: error.requiredLength });
69
+ }
70
+ if (this.hasError('maxlength')) {
71
+ const error = this.getError('maxlength');
72
+ return this._translateService.get('it.errors.max-length-invalid', { max: error.requiredLength });
73
+ }
74
+ if (this.hasError('email') || this.hasError('invalidEmail')) {
75
+ return this._translateService.get('it.errors.email-invalid');
76
+ }
77
+ if (this.hasError('invalidTel')) {
78
+ return this._translateService.get('it.errors.tel-invalid');
79
+ }
80
+ if (this.hasError('invalidUrl')) {
81
+ return this._translateService.get('it.errors.url-invalid');
82
+ }
83
+ if (this.hasError('invalidTaxCode')) {
84
+ return this._translateService.get('it.errors.tax-code-invalid');
85
+ }
86
+ if (this.hasError('invalidVatNumber')) {
87
+ return this._translateService.get('it.errors.vat-number-invalid');
88
+ }
89
+ if (this.hasError('invalidCap')) {
90
+ return this._translateService.get('it.errors.cap-invalid');
91
+ }
92
+ if (this.hasError('invalidRegex')) {
93
+ return this._translateService.get('it.errors.regex-invalid');
94
+ }
95
+ if (this.hasError('pattern')) {
96
+ const error = this.getError('pattern');
97
+ return this._translateService.get('it.errors.pattern-invalid', { pattern: error.requiredPattern });
98
+ }
99
+ return super.invalidMessage;
100
+ }
101
+ ngOnInit() {
102
+ super.ngOnInit();
103
+ const validators = [];
104
+ switch (this.type) {
105
+ case 'number':
106
+ if (isTrueBooleanInput(this.percentage)) {
107
+ this.min = this.min || 0;
108
+ this.max = this.max || 100;
109
+ }
110
+ // Dynamic min/max validators
111
+ validators.push((control) => this.min ? Validators.min(this.min)(control) : null);
112
+ validators.push((control) => this.max ? Validators.max(this.max)(control) : null);
113
+ break;
114
+ case 'email':
115
+ validators.push(ItValidators.email);
116
+ break;
117
+ case 'tel':
118
+ validators.push(ItValidators.tel);
119
+ break;
120
+ case 'url':
121
+ validators.push(ItValidators.url);
122
+ break;
123
+ }
124
+ this.addValidators(validators);
125
+ this.autocompleteResults$ = this.getAutocompleteResults$();
126
+ }
127
+ /**
128
+ * Increment or decrease the input number value of step
129
+ * @param decrease true to decrease value
130
+ */
131
+ incrementNumber(decrease = false) {
132
+ if (this.type !== 'number') {
133
+ return;
134
+ }
135
+ const step = (this.step === 'any' ? 1 : (this.step ?? 1));
136
+ let value = Number(this.control.value);
137
+ value = (isNaN(value) ? 0 : value) + (decrease ? -step : step);
138
+ value = Math.round(value * 1e12) / 1e12; // prevent js decimal error
139
+ if (this.min !== undefined && value < this.min) {
140
+ value = this.min;
141
+ }
142
+ else if (this.max !== undefined && value > this.max) {
143
+ value = this.max;
144
+ }
145
+ this.control.setValue(value);
146
+ }
147
+ getAutocompleteResults$() {
148
+ if (this.type === 'search') {
149
+ return this.control.valueChanges.pipe(map((value) => {
150
+ const searchedValue = value;
151
+ if (searchedValue) {
152
+ const lowercaseValue = searchedValue.toLowerCase();
153
+ const lowercaseData = this._autoCompleteData.filter((item) => item.value).map(item => {
154
+ return { ...item, original: item.value, lowercase: item.value.toLowerCase() };
155
+ });
156
+ const relatedEntries = [];
157
+ lowercaseData.forEach(lowercaseEntry => {
158
+ const matching = (lowercaseEntry.lowercase).includes(lowercaseValue);
159
+ if (matching) {
160
+ relatedEntries.push(lowercaseEntry);
161
+ }
162
+ });
163
+ return { searchedValue, relatedEntries };
164
+ }
165
+ else {
166
+ return { searchedValue, relatedEntries: [] };
167
+ }
168
+ }));
169
+ }
170
+ else {
171
+ return of({ searchedValue: '', relatedEntries: [] });
172
+ }
173
+ }
174
+ isAutocompletable() {
175
+ if (this._autoCompleteData && this.type === 'search') {
176
+ return this._autoCompleteData.length > 0;
177
+ }
178
+ else {
179
+ return false;
180
+ }
181
+ }
182
+ onEntryClick(entry, event) {
183
+ // Se non è stato definito un link associato all'elemento dell'autocomplete, probabilmente il desiderata
184
+ // non è effettuare la navigazione al default '#', pertanto in tal caso meglio annullare la navigazione.
185
+ if (!entry.link) {
186
+ event.preventDefault();
187
+ }
188
+ this.control.setValue(entry.value);
189
+ this.showAutocompletion = false;
190
+ }
191
+ autocompleteItemTrackByValueFn(index, item) {
192
+ return item.value;
193
+ }
194
+ onKeyDown() {
195
+ this.showAutocompletion = this.type === 'search';
196
+ }
197
+ }
198
+ InputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: InputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
199
+ InputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: InputComponent, selector: "it-input[id]", inputs: { type: "type", placeholder: "placeholder", description: "description", readonly: "readonly", max: "max", min: "min", step: "step", currency: "currency", percentage: "percentage", adaptive: "adaptive", autoCompleteData: "autoCompleteData" }, usesInheritance: true, ngImport: i0, template: "<div class=\"form-group\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\" [class.d-none]=\"!prependText.hasChildNodes() && !prepend.hasChildNodes()\">\n <div #prepend>\n <ng-content select=\"[prepend]\"></ng-content>\n </div>\n <div class=\"input-group-text\" #prependText>\n <ng-content select=\"[prependText]\"></ng-content>\n </div>\n </div>\n\n <label *ngIf=\"label\" [for]=\"id\" [class.active]=\"isActiveLabel\"\n [class.empty-prepend-label]=\"!prependText.hasChildNodes() && !prepend.hasChildNodes()\">\n {{label}}\n </label>\n\n <span *ngIf=\"type === 'number'\"\n class=\"input-number\"\n [class.input-number-currency]=\"currency\"\n [class.input-number-percentage]=\"percentage\"\n [class.input-number-adaptive]=\"adaptive\">\n\n <input type=\"number\"\n [id]=\"id\"\n [step]=\"step ?? null\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"isReadonly\"\n [attr.aria-describedby]=\"id + '-description'\"\n (blur)=\"markAsTouched()\" />\n\n <button type=\"button\" class=\"input-number-add\" (click)=\"incrementNumber()\">\n <span class=\"visually-hidden\">{{'it.form.increase-value'}}</span>\n </button>\n <button type=\"button\" class=\"input-number-sub\" (click)=\"incrementNumber(true)\">\n <span class=\"visually-hidden\">{{'it.form.decrease-value'}}</span>\n </button>\n </span>\n\n <input *ngIf=\"type !== 'number'\"\n [id]=\"id\"\n [type]=\"type\"\n [class.form-control]=\"readonly !== 'plaintext'\"\n [class.form-control-plaintext]=\"readonly === 'plaintext'\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"isReadonly\"\n (keydown)=\"onKeyDown()\"\n [attr.aria-describedby]=\"id + '-description'\"\n (blur)=\"markAsTouched()\">\n\n <div class=\"input-group-append\">\n <ng-content select=\"[append]\"></ng-content>\n\n <div class=\"input-group-text\">\n <ng-content select=\"[appendText]\"></ng-content>\n </div>\n </div>\n </div>\n\n <small *ngIf=\"description\" [id]=\"id + '-description'\" class=\"form-text\">{{description}}</small>\n\n\n\n\n <!-- INIZIO gestione AUTOCOMPLETAMENTO -->\n\n\n <!-- Icona lente per autocompletamento -->\n <span class=\"autocomplete-icon\" aria-hidden=\"true\" *ngIf=\"isAutocompletable()\">\n <it-icon name = \"search\" size=\"sm\"></it-icon>\n </span>\n\n <ng-container *ngIf=\"autocompleteResults$ | async as autocomplete\">\n <!-- Lista di autocompletamento -->\n <ul class=\"autocomplete-list\" *ngIf=\"isAutocompletable()\" [class.autocomplete-list-show]=\"autocomplete.relatedEntries?.length && showAutocompletion\">\n <li *ngFor=\"let entry of autocomplete.relatedEntries; trackBy: autocompleteItemTrackByValueFn\" (click)=\"onEntryClick(entry, $event)\">\n <a [href]=\"entry.link\" >\n <ng-container *ngTemplateOutlet=\"autocompleteItemTemplate\"></ng-container>\n </a>\n <ng-template #autocompleteItemTemplate>\n <div class=\"avatar size-sm\" *ngIf=\"entry.avatarSrcPath\">\n <img [src]=\"entry.avatarSrcPath\" [alt]=\"entry.avatarAltText\">\n </div>\n <it-icon *ngIf=\"entry.icon\" [name]=\"entry.icon\" size=\"sm\"></it-icon>\n <span class=\"autocomplete-list-text\">\n <span [innerHTML] = \"entry.original | markMatchingText: autocomplete.searchedValue\"></span>\n <em *ngIf=\"entry.label\">{{entry.label}}</em>\n </span>\n </ng-template>\n </li>\n </ul>\n </ng-container>\n \n\n <!-- FINE gestione AUTOCOMPLETAMENTO -->\n\n\n\n\n <div *ngIf=\"isInvalid\" class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n <ng-container *ngIf=\"!customError.hasChildNodes()\">{{invalidMessage | async}}</ng-container>\n </div>\n</div>\n", styles: [".form-group label{z-index:1000}.form-group input:focus:not(.focus--mouse){box-shadow:inherit!important;border-color:inherit!important}.form-group .input-number button.input-number-add{top:0}.form-group .input-number button.input-number-sub{bottom:0}.form-group .input-group-text:empty{display:none}.form-group label.empty-prepend-label{left:auto!important;max-width:100%!important}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.IconComponent, selector: "it-icon[name]", inputs: ["name", "size", "color", "padded", "class"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.MarkMatchingTextPipe, name: "markMatchingText" }] });
200
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: InputComponent, decorators: [{
201
+ type: Component,
202
+ args: [{ selector: 'it-input[id]', template: "<div class=\"form-group\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\" [class.d-none]=\"!prependText.hasChildNodes() && !prepend.hasChildNodes()\">\n <div #prepend>\n <ng-content select=\"[prepend]\"></ng-content>\n </div>\n <div class=\"input-group-text\" #prependText>\n <ng-content select=\"[prependText]\"></ng-content>\n </div>\n </div>\n\n <label *ngIf=\"label\" [for]=\"id\" [class.active]=\"isActiveLabel\"\n [class.empty-prepend-label]=\"!prependText.hasChildNodes() && !prepend.hasChildNodes()\">\n {{label}}\n </label>\n\n <span *ngIf=\"type === 'number'\"\n class=\"input-number\"\n [class.input-number-currency]=\"currency\"\n [class.input-number-percentage]=\"percentage\"\n [class.input-number-adaptive]=\"adaptive\">\n\n <input type=\"number\"\n [id]=\"id\"\n [step]=\"step ?? null\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"isReadonly\"\n [attr.aria-describedby]=\"id + '-description'\"\n (blur)=\"markAsTouched()\" />\n\n <button type=\"button\" class=\"input-number-add\" (click)=\"incrementNumber()\">\n <span class=\"visually-hidden\">{{'it.form.increase-value'}}</span>\n </button>\n <button type=\"button\" class=\"input-number-sub\" (click)=\"incrementNumber(true)\">\n <span class=\"visually-hidden\">{{'it.form.decrease-value'}}</span>\n </button>\n </span>\n\n <input *ngIf=\"type !== 'number'\"\n [id]=\"id\"\n [type]=\"type\"\n [class.form-control]=\"readonly !== 'plaintext'\"\n [class.form-control-plaintext]=\"readonly === 'plaintext'\"\n [class.is-invalid]=\"isInvalid\"\n [class.is-valid]=\"isValid\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n [readonly]=\"isReadonly\"\n (keydown)=\"onKeyDown()\"\n [attr.aria-describedby]=\"id + '-description'\"\n (blur)=\"markAsTouched()\">\n\n <div class=\"input-group-append\">\n <ng-content select=\"[append]\"></ng-content>\n\n <div class=\"input-group-text\">\n <ng-content select=\"[appendText]\"></ng-content>\n </div>\n </div>\n </div>\n\n <small *ngIf=\"description\" [id]=\"id + '-description'\" class=\"form-text\">{{description}}</small>\n\n\n\n\n <!-- INIZIO gestione AUTOCOMPLETAMENTO -->\n\n\n <!-- Icona lente per autocompletamento -->\n <span class=\"autocomplete-icon\" aria-hidden=\"true\" *ngIf=\"isAutocompletable()\">\n <it-icon name = \"search\" size=\"sm\"></it-icon>\n </span>\n\n <ng-container *ngIf=\"autocompleteResults$ | async as autocomplete\">\n <!-- Lista di autocompletamento -->\n <ul class=\"autocomplete-list\" *ngIf=\"isAutocompletable()\" [class.autocomplete-list-show]=\"autocomplete.relatedEntries?.length && showAutocompletion\">\n <li *ngFor=\"let entry of autocomplete.relatedEntries; trackBy: autocompleteItemTrackByValueFn\" (click)=\"onEntryClick(entry, $event)\">\n <a [href]=\"entry.link\" >\n <ng-container *ngTemplateOutlet=\"autocompleteItemTemplate\"></ng-container>\n </a>\n <ng-template #autocompleteItemTemplate>\n <div class=\"avatar size-sm\" *ngIf=\"entry.avatarSrcPath\">\n <img [src]=\"entry.avatarSrcPath\" [alt]=\"entry.avatarAltText\">\n </div>\n <it-icon *ngIf=\"entry.icon\" [name]=\"entry.icon\" size=\"sm\"></it-icon>\n <span class=\"autocomplete-list-text\">\n <span [innerHTML] = \"entry.original | markMatchingText: autocomplete.searchedValue\"></span>\n <em *ngIf=\"entry.label\">{{entry.label}}</em>\n </span>\n </ng-template>\n </li>\n </ul>\n </ng-container>\n \n\n <!-- FINE gestione AUTOCOMPLETAMENTO -->\n\n\n\n\n <div *ngIf=\"isInvalid\" class=\"form-feedback just-validate-error-label\" [id]=\"id + '-error'\">\n <div #customError>\n <ng-content select=\"[error]\"></ng-content>\n </div>\n <ng-container *ngIf=\"!customError.hasChildNodes()\">{{invalidMessage | async}}</ng-container>\n </div>\n</div>\n", styles: [".form-group label{z-index:1000}.form-group input:focus:not(.focus--mouse){box-shadow:inherit!important;border-color:inherit!important}.form-group .input-number button.input-number-add{top:0}.form-group .input-number button.input-number-sub{bottom:0}.form-group .input-group-text:empty{display:none}.form-group label.empty-prepend-label{left:auto!important;max-width:100%!important}\n"] }]
203
+ }], propDecorators: { type: [{
204
+ type: Input
205
+ }], placeholder: [{
206
+ type: Input
207
+ }], description: [{
208
+ type: Input
209
+ }], readonly: [{
210
+ type: Input
211
+ }], max: [{
212
+ type: Input
213
+ }], min: [{
214
+ type: Input
215
+ }], step: [{
216
+ type: Input
217
+ }], currency: [{
218
+ type: Input
219
+ }], percentage: [{
220
+ type: Input
221
+ }], adaptive: [{
222
+ type: Input
223
+ }], autoCompleteData: [{
224
+ type: Input
225
+ }] } });
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWFuZ3VsYXIta2l0L3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2lucHV0L2lucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvZm9ybS9pbnB1dC9pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVuRixPQUFPLEVBQWdDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRSxPQUFPLEVBQWdCLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEYsT0FBTyxFQUFRLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7QUFPakQsTUFBTSxPQUFPLGNBQWUsU0FBUSxxQkFBc0M7SUFMMUU7O1FBT0U7OztXQUdHO1FBQ00sU0FBSSxHQUFxQixNQUFNLENBQUM7UUFFekM7O1dBRUc7UUFDTSxnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQW1EMUIsc0JBQWlCLEdBQTRCLEVBQUUsQ0FBQztRQUV4RCx1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUEwRTNCLDJFQUEyRTtRQUMzRSx5QkFBb0IsR0FBNEgsSUFBSSxVQUFVLEVBQUUsQ0FBQztLQWdIbEs7SUFyTUM7Ozs7T0FJRztJQUNILElBQ0ksZ0JBQWdCLENBQUMsS0FBOEIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFD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T0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsS0FBdUIsRUFBRSxLQUFZO1FBQ2hELHlHQUF5RztRQUN6Ryx3R0FBd0c7UUFDeEcsSUFBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDZCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDeEI7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUNsQyxDQUFDO0lBRUQsOEJBQThCLENBQUMsS0FBYSxFQUFFLElBQXNCO1FBQ2xFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQztJQUNuRCxDQUFDOzsyR0ExUFUsY0FBYzsrRkFBZCxjQUFjLHFVQ2IzQiw0d0lBK0dBOzJGRGxHYSxjQUFjO2tCQUwxQixTQUFTOytCQUNFLGNBQWM7OEJBVWYsSUFBSTtzQkFBWixLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSztnQkFNRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLEdBQUc7c0JBQVgsS0FBSztnQkFLRyxHQUFHO3NCQUFYLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQVFGLGdCQUFnQjtzQkFEbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Rm9ybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2Fic3RyYWN0cy9hYnN0cmFjdC1mb3JtLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBBdXRvQ29tcGxldGVJdGVtLCBJbnB1dENvbnRyb2xUeXBlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9mb3JtJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJdFZhbGlkYXRvcnMgfSBmcm9tICcuLi8uLi8uLi92YWxpZGF0b3JzL2l0LXZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBpc1RydWVCb29sZWFuSW5wdXQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9ib29sZWFuLWlucHV0JztcbmltcG9ydCB7IGZyb20sIG1hcCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaXQtaW5wdXRbaWRdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW5wdXQuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBJbnB1dENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0Rm9ybUNvbXBvbmVudDxzdHJpbmcgfCBudW1iZXI+IHtcblxuICAvKipcbiAgICogVGhlIGlucHV0IHR5cGVcbiAgICogQGRlZmF1bHQgdGV4dFxuICAgKi9cbiAgQElucHV0KCkgdHlwZTogSW5wdXRDb250cm9sVHlwZSA9ICd0ZXh0JztcblxuICAvKipcbiAgICogVGhlIGlucHV0IHBsYWNlaG9sZGVyXG4gICAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBkZXNjcmlwdGlvblxuICAgKi9cbiAgQElucHV0KCkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRvIHByZXZlbnQgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250YWluZWQgdmFsdWUuXG4gICAqIC0gPGI+cGxhaW50ZXh0PC9iPjogUmVhZG9ubHkgZmllbGQgaW4gdGhlIGZvcm0gc3R5bGl6ZWQgYXMgcGxhaW4gdGV4dFxuICAgKi9cbiAgQElucHV0KCkgcmVhZG9ubHk/OiBCb29sZWFuSW5wdXQgfCAncGxhaW50ZXh0JztcblxuICAvKipcbiAgICogVGhlIG1heCB2YWx1ZSBbVXNlZCBvbmx5IGluIHR5cGUgPSAnbnVtYmVyJ11cbiAgICovXG4gIEBJbnB1dCgpIG1heD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1pbiB2YWx1ZSBbVXNlZCBvbmx5IGluIHR5cGUgPSAnbnVtYmVyJ11cbiAgICovXG4gIEBJbnB1dCgpIG1pbj86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHN0ZXAgdmFsdWUgW1VzZWQgb25seSBpbiB0eXBlID0gJ251bWJlciddXG4gICAqL1xuICBASW5wdXQoKSBzdGVwPzogbnVtYmVyIHwgJ2FueSc7XG5cbiAgLyoqXG4gICAqIElmIGlzIGEgY3VycmVuY3kgbnVtYmVyIFtVc2VkIG9ubHkgaW4gdHlwZSA9ICdudW1iZXInXVxuICAgKi9cbiAgQElucHV0KCkgY3VycmVuY3k/OiBCb29sZWFuSW5wdXQ7XG5cbiAgLyoqXG4gICAqIElmIGlzIGEgcGVyY2VudGFnZSBudW1iZXIgW1VzZWQgb25seSBpbiB0eXBlID0gJ251bWJlciddXG4gICAqL1xuICBASW5wdXQoKSBwZXJjZW50YWdlPzogQm9vbGVhbklucHV0O1xuXG4gIC8qKlxuICAgKiBUbyBtYWtlIHRoZSBudW1lcmljIGZpZWxkIGF1dG9tYXRpY2FsbHkgcmVzaXplIGFjY29yZGluZyB0byB0aGUgdmFsdWUgY29udGFpbmVkIGluIGl0LiBbVXNlZCBvbmx5IGluIHR5cGUgPSAnbnVtYmVyJ11cbiAgICovXG4gIEBJbnB1dCgpIGFkYXB0aXZlPzogQm9vbGVhbklucHV0O1xuXG4gIC8qKlxuICAgKiBPcHppb25hbGUuXG4gICAqIERpc3BvbmliaWxlIHNvbG8gc2UgaWwgdHlwZSDDqCBzZWFyY2guXG4gICAqIEluZGljYSBsYSBsaXN0YSBkaSBlbGVtZW50aSByaWNlcmNhYmlsaSBzdSBjdWkgYmFzYXJlIGlsIHNpc3RlbWEgZGkgYXV0b2NvbXBsZXRhbWVudG8gZGVsbGEgaW5wdXRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBhdXRvQ29tcGxldGVEYXRhKHZhbHVlOiBBcnJheTxBdXRvQ29tcGxldGVJdGVtPikgeyB0aGlzLl9hdXRvQ29tcGxldGVEYXRhID0gdmFsdWU7IH1cbiAgZ2V0IGF1dG9Db21wbGV0ZURhdGEoKTogQXJyYXk8QXV0b0NvbXBsZXRlSXRlbT4geyByZXR1cm4gdGhpcy5fYXV0b0NvbXBsZXRlRGF0YTsgfVxuICBwcml2YXRlIF9hdXRvQ29tcGxldGVEYXRhOiBBcnJheTxBdXRvQ29tcGxldGVJdGVtPiA9IFtdO1xuXG4gIHNob3dBdXRvY29tcGxldGlvbiA9IGZhbHNlO1xuXG5cbiAgZ2V0IGlzQWN0aXZlTGFiZWwoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmNvbnRyb2wudmFsdWU7XG4gICAgaWYgKCghIXZhbHVlICYmIHZhbHVlICE9PSAwKSB8fCB2YWx1ZSA9PT0gMCB8fCAhIXRoaXMucGxhY2Vob2xkZXIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnR5cGUgPT09ICdudW1iZXInICYmIChpc1RydWVCb29sZWFuSW5wdXQodGhpcy5jdXJyZW5jeSkgfHwgaXNUcnVlQm9vbGVhbklucHV0KHRoaXMucGVyY2VudGFnZSkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50eXBlID09PSAnZGF0ZScgfHwgdGhpcy50eXBlID09PSAndGltZSc7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaXMgcmVhZG9ubHkgZmllbGRcbiAgICovXG4gIGdldCBpc1JlYWRvbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5ID09PSAncGxhaW50ZXh0JyB8fCBpc1RydWVCb29sZWFuSW5wdXQodGhpcy5yZWFkb25seSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBpbnZhbGlkIG1lc3NhZ2Ugc3RyaW5nIGZyb20gVHJhbnNsYXRlU2VydmljZVxuICAgKi9cbiAgb3ZlcnJpZGUgZ2V0IGludmFsaWRNZXNzYWdlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IoJ21pbicpICYmIHRoaXMubWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXQoJ2l0LmVycm9ycy5taW4taW52YWxpZCcsIHtcbiAgICAgICAgbWluOiB0aGlzLm1pblxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0Vycm9yKCdtYXgnKSAmJiB0aGlzLm1heCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMubWF4LWludmFsaWQnLCB7XG4gICAgICAgIG1heDogdGhpcy5tYXhcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNFcnJvcignbWlubGVuZ3RoJykpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5nZXRFcnJvcignbWlubGVuZ3RoJyk7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5nZXQoJ2l0LmVycm9ycy5taW4tbGVuZ3RoLWludmFsaWQnLCB7IG1pbjogZXJyb3IucmVxdWlyZWRMZW5ndGggfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0Vycm9yKCdtYXhsZW5ndGgnKSkge1xuICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmdldEVycm9yKCdtYXhsZW5ndGgnKTtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLm1heC1sZW5ndGgtaW52YWxpZCcsIHsgbWF4OiBlcnJvci5yZXF1aXJlZExlbmd0aCB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IoJ2VtYWlsJykgfHwgdGhpcy5oYXNFcnJvcignaW52YWxpZEVtYWlsJykpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLmVtYWlsLWludmFsaWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IoJ2ludmFsaWRUZWwnKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMudGVsLWludmFsaWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IoJ2ludmFsaWRVcmwnKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMudXJsLWludmFsaWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IoJ2ludmFsaWRUYXhDb2RlJykpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLnRheC1jb2RlLWludmFsaWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzRXJyb3IoJ2ludmFsaWRWYXROdW1iZXInKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMudmF0LW51bWJlci1pbnZhbGlkJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0Vycm9yKCdpbnZhbGlkQ2FwJykpIHtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLmNhcC1pbnZhbGlkJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc0Vycm9yKCdpbnZhbGlkUmVnZXgnKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdpdC5lcnJvcnMucmVnZXgtaW52YWxpZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNFcnJvcigncGF0dGVybicpKSB7XG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuZ2V0RXJyb3IoJ3BhdHRlcm4nKTtcbiAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmdldCgnaXQuZXJyb3JzLnBhdHRlcm4taW52YWxpZCcsIHsgcGF0dGVybjogZXJyb3IucmVxdWlyZWRQYXR0ZXJuIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5pbnZhbGlkTWVzc2FnZTtcbiAgfVxuXG4gIC8qKiBPYnNlcnZhYmxlIGRhIGN1aSB2ZW5nb25vIGVtZXNzaSBpIHJpc3VsdGF0aSBkZWxsJ2F1dG8gY29tcGxldGFtZW50byAqL1xuICBhdXRvY29tcGxldGVSZXN1bHRzJDogT2JzZXJ2YWJsZTx7IHNlYXJjaGVkVmFsdWU6IHN0cmluZywgcmVsYXRlZEVudHJpZXM6IEFycmF5PEF1dG9Db21wbGV0ZUl0ZW0gJiB7IG9yaWdpbmFsOiBzdHJpbmcsIGxvd2VyY2FzZTogc3RyaW5nIH0+fT4gPSBuZXcgT2JzZXJ2YWJsZSgpO1xuXG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKSB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIGNvbnN0IHZhbGlkYXRvcnM6IEFycmF5PFZhbGlkYXRvckZuPiA9IFtdO1xuICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICBpZiAoaXNUcnVlQm9vbGVhbklucHV0KHRoaXMucGVyY2VudGFnZSkpIHtcbiAgICAgICAgICB0aGlzLm1pbiA9IHRoaXMubWluIHx8IDA7XG4gICAgICAgICAgdGhpcy5tYXggPSB0aGlzLm1heCB8fCAxMDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEeW5hbWljIG1pbi9tYXggdmFsaWRhdG9yc1xuICAgICAgICB2YWxpZGF0b3JzLnB1c2goKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4gdGhpcy5taW4gPyBWYWxpZGF0b3JzLm1pbih0aGlzLm1pbikoY29udHJvbCkgOiBudWxsKTtcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHRoaXMubWF4ID8gVmFsaWRhdG9ycy5tYXgodGhpcy5tYXgpKGNvbnRyb2wpIDogbnVsbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZW1haWwnOlxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goSXRWYWxpZGF0b3JzLmVtYWlsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0ZWwnOlxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goSXRWYWxpZGF0b3JzLnRlbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndXJsJzpcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKEl0VmFsaWRhdG9ycy51cmwpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLmFkZFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XG4gICAgdGhpcy5hdXRvY29tcGxldGVSZXN1bHRzJCA9IHRoaXMuZ2V0QXV0b2NvbXBsZXRlUmVzdWx0cyQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmNyZW1lbnQgb3IgZGVjcmVhc2UgdGhlIGlucHV0IG51bWJlciB2YWx1ZSBvZiBzdGVwXG4gICAqIEBwYXJhbSBkZWNyZWFzZSB0cnVlIHRvIGRlY3JlYXNlIHZhbHVlXG4gICAqL1xuICBpbmNyZW1lbnROdW1iZXIoZGVjcmVhc2U6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnR5cGUgIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0ZXAgPSAodGhpcy5zdGVwID09PSAnYW55JyA/IDEgOiAodGhpcy5zdGVwID8/IDEpKTtcbiAgICBsZXQgdmFsdWUgPSBOdW1iZXIodGhpcy5jb250cm9sLnZhbHVlKTtcbiAgICB2YWx1ZSA9IChpc05hTih2YWx1ZSkgPyAwIDogdmFsdWUpICsgKGRlY3JlYXNlID8gLXN0ZXAgOiBzdGVwKTtcbiAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgKiAxZTEyKSAvIDFlMTI7IC8vIHByZXZlbnQganMgZGVjaW1hbCBlcnJvclxuXG4gICAgaWYgKHRoaXMubWluICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgPCB0aGlzLm1pbikge1xuICAgICAgdmFsdWUgPSB0aGlzLm1pbjtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWF4ICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgPiB0aGlzLm1heCkge1xuICAgICAgdmFsdWUgPSB0aGlzLm1heDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICB9XG5cblxuICBcbiAgZ2V0QXV0b2NvbXBsZXRlUmVzdWx0cyQoKTogT2JzZXJ2YWJsZTx7IHNlYXJjaGVkVmFsdWU6IHN0cmluZywgcmVsYXRlZEVudHJpZXM6IEFycmF5PEF1dG9Db21wbGV0ZUl0ZW0gJiB7IG9yaWdpbmFsOiBzdHJpbmcsIGxvd2VyY2FzZTogc3RyaW5nIH0+fT4ge1xuXG4gICAgaWYodGhpcy50eXBlID09PSAnc2VhcmNoJykge1xuICAgICAgcmV0dXJuIHRoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShtYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaGVkVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHNlYXJjaGVkVmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBsb3dlcmNhc2VWYWx1ZSA9IHNlYXJjaGVkVmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBjb25zdCBsb3dlcmNhc2VEYXRhID0gdGhpcy5fYXV0b0NvbXBsZXRlRGF0YS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udmFsdWUpLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0sIG9yaWdpbmFsIDogaXRlbS52YWx1ZSwgbG93ZXJjYXNlIDogaXRlbS52YWx1ZS50b0xvd2VyQ2FzZSgpIH07XG4gICAgICAgICAgfSk7XG4gICAgXG4gICAgICAgICAgY29uc3QgcmVsYXRlZEVudHJpZXM6IEFycmF5PEF1dG9Db21wbGV0ZUl0ZW0gJiB7IG9yaWdpbmFsOiBzdHJpbmcsIGxvd2VyY2FzZTogc3RyaW5nIH0+ID0gW107XG4gICAgICAgICAgbG93ZXJjYXNlRGF0YS5mb3JFYWNoKGxvd2VyY2FzZUVudHJ5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nID0gKGxvd2VyY2FzZUVudHJ5Lmxvd2VyY2FzZSkuaW5jbHVkZXMobG93ZXJjYXNlVmFsdWUpO1xuICAgICAgICAgICAgaWYgKG1hdGNoaW5nKSB7XG4gICAgICAgICAgICAgIHJlbGF0ZWRFbnRyaWVzLnB1c2gobG93ZXJjYXNlRW50cnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICBcbiAgICAgICAgICByZXR1cm4geyBzZWFyY2hlZFZhbHVlLCByZWxhdGVkRW50cmllcyB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7IHNlYXJjaGVkVmFsdWUsIHJlbGF0ZWRFbnRyaWVzOiBbXX07XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9mKHtzZWFyY2hlZFZhbHVlOiAnJywgcmVsYXRlZEVudHJpZXM6IFtdfSk7XG4gICAgfVxuICAgIFxuICB9XG5cbiAgaXNBdXRvY29tcGxldGFibGUoKSB7XG4gICAgaWYgKHRoaXMuX2F1dG9Db21wbGV0ZURhdGEgJiYgdGhpcy50eXBlID09PSAnc2VhcmNoJykge1xuICAgICAgcmV0dXJuIHRoaXMuX2F1dG9Db21wbGV0ZURhdGEubGVuZ3RoID4gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG9uRW50cnlDbGljayhlbnRyeTogQXV0b0NvbXBsZXRlSXRlbSwgZXZlbnQ6IEV2ZW50KSB7XG4gICAgLy8gU2Ugbm9uIMOoIHN0YXRvIGRlZmluaXRvIHVuIGxpbmsgYXNzb2NpYXRvIGFsbCdlbGVtZW50byBkZWxsJ2F1dG9jb21wbGV0ZSwgcHJvYmFiaWxtZW50ZSBpbCBkZXNpZGVyYXRhIFxuICAgIC8vIG5vbiDDqCBlZmZldHR1YXJlIGxhIG5hdmlnYXppb25lIGFsIGRlZmF1bHQgJyMnLCBwZXJ0YW50byBpbiB0YWwgY2FzbyBtZWdsaW8gYW5udWxsYXJlIGxhIG5hdmlnYXppb25lLlxuICAgIGlmKCFlbnRyeS5saW5rKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUoZW50cnkudmFsdWUpO1xuICAgIHRoaXMuc2hvd0F1dG9jb21wbGV0aW9uID0gZmFsc2U7XG4gIH1cblxuICBhdXRvY29tcGxldGVJdGVtVHJhY2tCeVZhbHVlRm4oaW5kZXg6IG51bWJlciwgaXRlbTogQXV0b0NvbXBsZXRlSXRlbSkge1xuICAgIHJldHVybiBpdGVtLnZhbHVlO1xuICB9XG5cbiAgb25LZXlEb3duKCkge1xuICAgIHRoaXMuc2hvd0F1dG9jb21wbGV0aW9uID0gdGhpcy50eXBlID09PSAnc2VhcmNoJztcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXByZXBlbmRcIiBbY2xhc3MuZC1ub25lXT1cIiFwcmVwZW5kVGV4dC5oYXNDaGlsZE5vZGVzKCkgJiYgIXByZXBlbmQuaGFzQ2hpbGROb2RlcygpXCI+XG4gICAgICA8ZGl2ICNwcmVwZW5kPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcHJlcGVuZF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCIgI3ByZXBlbmRUZXh0PlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcHJlcGVuZFRleHRdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIFtmb3JdPVwiaWRcIiBbY2xhc3MuYWN0aXZlXT1cImlzQWN0aXZlTGFiZWxcIlxuICAgICAgICAgICBbY2xhc3MuZW1wdHktcHJlcGVuZC1sYWJlbF09XCIhcHJlcGVuZFRleHQuaGFzQ2hpbGROb2RlcygpICYmICFwcmVwZW5kLmhhc0NoaWxkTm9kZXMoKVwiPlxuICAgICAge3tsYWJlbH19XG4gICAgPC9sYWJlbD5cblxuICAgIDxzcGFuICpuZ0lmPVwidHlwZSA9PT0gJ251bWJlcidcIlxuICAgICAgICAgIGNsYXNzPVwiaW5wdXQtbnVtYmVyXCJcbiAgICAgICAgICBbY2xhc3MuaW5wdXQtbnVtYmVyLWN1cnJlbmN5XT1cImN1cnJlbmN5XCJcbiAgICAgICAgICBbY2xhc3MuaW5wdXQtbnVtYmVyLXBlcmNlbnRhZ2VdPVwicGVyY2VudGFnZVwiXG4gICAgICAgICAgW2NsYXNzLmlucHV0LW51bWJlci1hZGFwdGl2ZV09XCJhZGFwdGl2ZVwiPlxuXG4gICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgICAgICBbc3RlcF09XCJzdGVwID8/IG51bGxcIlxuICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cImlzSW52YWxpZFwiXG4gICAgICAgICAgICAgW2NsYXNzLmlzLXZhbGlkXT1cImlzVmFsaWRcIlxuICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgIFtyZWFkb25seV09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImlkICsgJy1kZXNjcmlwdGlvbidcIlxuICAgICAgICAgICAgIChibHVyKT1cIm1hcmtBc1RvdWNoZWQoKVwiIC8+XG5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiaW5wdXQtbnVtYmVyLWFkZFwiIChjbGljayk9XCJpbmNyZW1lbnROdW1iZXIoKVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPnt7J2l0LmZvcm0uaW5jcmVhc2UtdmFsdWUnfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiaW5wdXQtbnVtYmVyLXN1YlwiIChjbGljayk9XCJpbmNyZW1lbnROdW1iZXIodHJ1ZSlcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj57eydpdC5mb3JtLmRlY3JlYXNlLXZhbHVlJ319PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9zcGFuPlxuXG4gICAgPGlucHV0ICpuZ0lmPVwidHlwZSAhPT0gJ251bWJlcidcIlxuICAgICAgICAgICBbaWRdPVwiaWRcIlxuICAgICAgICAgICBbdHlwZV09XCJ0eXBlXCJcbiAgICAgICAgICAgW2NsYXNzLmZvcm0tY29udHJvbF09XCJyZWFkb25seSAhPT0gJ3BsYWludGV4dCdcIlxuICAgICAgICAgICBbY2xhc3MuZm9ybS1jb250cm9sLXBsYWludGV4dF09XCJyZWFkb25seSA9PT0gJ3BsYWludGV4dCdcIlxuICAgICAgICAgICBbY2xhc3MuaXMtaW52YWxpZF09XCJpc0ludmFsaWRcIlxuICAgICAgICAgICBbY2xhc3MuaXMtdmFsaWRdPVwiaXNWYWxpZFwiXG4gICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgW3JlYWRvbmx5XT1cImlzUmVhZG9ubHlcIlxuICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oKVwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaWQgKyAnLWRlc2NyaXB0aW9uJ1wiXG4gICAgICAgICAgIChibHVyKT1cIm1hcmtBc1RvdWNoZWQoKVwiPlxuXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2FwcGVuZF1cIj48L25nLWNvbnRlbnQ+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlthcHBlbmRUZXh0XVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8c21hbGwgKm5nSWY9XCJkZXNjcmlwdGlvblwiIFtpZF09XCJpZCArICctZGVzY3JpcHRpb24nXCIgY2xhc3M9XCJmb3JtLXRleHRcIj57e2Rlc2NyaXB0aW9ufX08L3NtYWxsPlxuXG5cblxuXG4gIDwhLS0gSU5JWklPIGdlc3Rpb25lIEFVVE9DT01QTEVUQU1FTlRPIC0tPlxuXG5cbiAgPCEtLSBJY29uYSBsZW50ZSBwZXIgYXV0b2NvbXBsZXRhbWVudG8gLS0+XG4gIDxzcGFuIGNsYXNzPVwiYXV0b2NvbXBsZXRlLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cImlzQXV0b2NvbXBsZXRhYmxlKClcIj5cbiAgICA8aXQtaWNvbiBuYW1lID0gXCJzZWFyY2hcIiBzaXplPVwic21cIj48L2l0LWljb24+XG4gIDwvc3Bhbj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXV0b2NvbXBsZXRlUmVzdWx0cyQgfCBhc3luYyBhcyBhdXRvY29tcGxldGVcIj5cbiAgICA8IS0tIExpc3RhIGRpIGF1dG9jb21wbGV0YW1lbnRvIC0tPlxuICAgIDx1bCBjbGFzcz1cImF1dG9jb21wbGV0ZS1saXN0XCIgKm5nSWY9XCJpc0F1dG9jb21wbGV0YWJsZSgpXCIgIFtjbGFzcy5hdXRvY29tcGxldGUtbGlzdC1zaG93XT1cImF1dG9jb21wbGV0ZS5yZWxhdGVkRW50cmllcz8ubGVuZ3RoICYmIHNob3dBdXRvY29tcGxldGlvblwiPlxuICAgICAgPGxpICpuZ0Zvcj1cImxldCBlbnRyeSBvZiBhdXRvY29tcGxldGUucmVsYXRlZEVudHJpZXM7IHRyYWNrQnk6IGF1dG9jb21wbGV0ZUl0ZW1UcmFja0J5VmFsdWVGblwiIChjbGljayk9XCJvbkVudHJ5Q2xpY2soZW50cnksICRldmVudClcIj5cbiAgICAgICAgPGEgW2hyZWZdPVwiZW50cnkubGlua1wiID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNhdXRvY29tcGxldGVJdGVtVGVtcGxhdGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhciBzaXplLXNtXCIgKm5nSWY9XCJlbnRyeS5hdmF0YXJTcmNQYXRoXCI+XG4gICAgICAgICAgICA8aW1nIFtzcmNdPVwiZW50cnkuYXZhdGFyU3JjUGF0aFwiIFthbHRdPVwiZW50cnkuYXZhdGFyQWx0VGV4dFwiPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxpdC1pY29uICpuZ0lmPVwiZW50cnkuaWNvblwiIFtuYW1lXT1cImVudHJ5Lmljb25cIiBzaXplPVwic21cIj48L2l0LWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJhdXRvY29tcGxldGUtbGlzdC10ZXh0XCI+XG4gICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXSA9IFwiZW50cnkub3JpZ2luYWwgfCBtYXJrTWF0Y2hpbmdUZXh0OiBhdXRvY29tcGxldGUuc2VhcmNoZWRWYWx1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxlbSAqbmdJZj1cImVudHJ5LmxhYmVsXCI+e3tlbnRyeS5sYWJlbH19PC9lbT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvbmctY29udGFpbmVyPlxuICBcblxuICA8IS0tIEZJTkUgZ2VzdGlvbmUgQVVUT0NPTVBMRVRBTUVOVE8gLS0+XG5cblxuXG5cbiAgPGRpdiAqbmdJZj1cImlzSW52YWxpZFwiIGNsYXNzPVwiZm9ybS1mZWVkYmFjayBqdXN0LXZhbGlkYXRlLWVycm9yLWxhYmVsXCIgW2lkXT1cImlkICsgJy1lcnJvcidcIj5cbiAgICA8ZGl2ICNjdXN0b21FcnJvcj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltlcnJvcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjdXN0b21FcnJvci5oYXNDaGlsZE5vZGVzKClcIj57e2ludmFsaWRNZXNzYWdlIHwgYXN5bmN9fTwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19