design-angular-kit 1.0.0-9 → 1.0.0-prerelease.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. package/README.md +77 -7
  2. package/assets/i18n/en.json +81 -12
  3. package/assets/i18n/it.json +80 -11
  4. package/esm2022/lib/abstracts/abstract-form.component.mjs +187 -0
  5. package/esm2022/lib/abstracts/abstract.component.mjs +45 -0
  6. package/esm2022/lib/components/components.module.mjs +218 -0
  7. package/esm2022/lib/components/core/accordion/accordion.component.mjs +38 -0
  8. package/esm2022/lib/components/core/alert/alert.component.mjs +72 -0
  9. package/esm2022/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.mjs +43 -0
  10. package/esm2022/lib/components/core/avatar/avatar-group/avatar-group.component.mjs +38 -0
  11. package/esm2022/lib/components/core/avatar/avatar.directive.mjs +78 -0
  12. package/esm2022/lib/components/core/badge/badge.directive.mjs +39 -0
  13. package/esm2022/lib/components/core/button/button.directive.mjs +86 -0
  14. package/esm2022/lib/components/core/callout/callout.component.mjs +57 -0
  15. package/esm2022/lib/components/core/card/card.component.mjs +59 -0
  16. package/esm2022/lib/components/core/carousel/carousel/carousel.component.mjs +81 -0
  17. package/esm2022/lib/components/core/carousel/carousel-item/carousel-item.component.mjs +19 -0
  18. package/esm2022/lib/components/core/carousel/carousel.module.mjs +23 -0
  19. package/esm2022/lib/components/core/chip/chip.component.mjs +96 -0
  20. package/esm2022/lib/components/core/collapse/collapse.component.mjs +104 -0
  21. package/esm2022/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.mjs +24 -0
  22. package/esm2022/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.mjs +11 -0
  23. package/esm2022/lib/components/core/dimmer/dimmer.component.mjs +59 -0
  24. package/esm2022/lib/components/core/dimmer/dimmer.module.mjs +27 -0
  25. package/esm2022/lib/components/core/dropdown/dropdown/dropdown.component.mjs +141 -0
  26. package/esm2022/lib/components/core/dropdown/dropdown-item/dropdown-item.component.mjs +62 -0
  27. package/esm2022/lib/components/core/dropdown/dropdown.module.mjs +18 -0
  28. package/esm2022/lib/components/core/forward/forward.directive.mjs +53 -0
  29. package/esm2022/lib/components/core/link/link.component.mjs +42 -0
  30. package/esm2022/lib/components/core/list/list/list.component.mjs +22 -0
  31. package/esm2022/lib/components/core/list/list-item/list-item.component.mjs +51 -0
  32. package/esm2022/lib/components/core/list/list.module.mjs +23 -0
  33. package/esm2022/lib/components/core/modal/modal.component.mjs +195 -0
  34. package/esm2022/lib/components/core/notifications/notifications.component.mjs +112 -0
  35. package/esm2022/lib/components/core/pagination/pagination.component.mjs +127 -0
  36. package/esm2022/lib/components/core/popover/popover.directive.mjs +176 -0
  37. package/esm2022/lib/components/core/progress-bar/progress-bar.component.mjs +34 -0
  38. package/esm2022/lib/components/core/progress-button/progress-button.component.mjs +26 -0
  39. package/esm2022/lib/components/core/spinner/spinner.component.mjs +31 -0
  40. package/esm2022/lib/components/core/steppers/steppers-container/steppers-container.component.mjs +112 -0
  41. package/esm2022/lib/components/core/steppers/steppers-item/steppers-item.component.mjs +19 -0
  42. package/esm2022/lib/components/core/steppers/steppers.module.mjs +23 -0
  43. package/esm2022/lib/components/core/tab/tab-container/tab-container.component.mjs +60 -0
  44. package/esm2022/lib/components/core/tab/tab-item/tab-item.component.mjs +39 -0
  45. package/esm2022/lib/components/core/tab/tab.module.mjs +23 -0
  46. package/esm2022/lib/components/core/table/sort/sort-header/sort-header.component.mjs +136 -0
  47. package/esm2022/lib/components/core/table/sort/sort.directive.mjs +123 -0
  48. package/esm2022/lib/components/core/table/table.component.mjs +45 -0
  49. package/esm2022/lib/components/core/tooltip/tooltip.directive.mjs +143 -0
  50. package/esm2022/lib/components/form/autocomplete/autocomplete.component.mjs +95 -0
  51. package/esm2022/lib/components/form/checkbox/checkbox.component.mjs +48 -0
  52. package/esm2022/lib/components/form/form.module.mjs +59 -0
  53. package/esm2022/lib/components/form/input/input.component.mjs +187 -0
  54. package/esm2022/lib/components/form/password-input/password-input.component.mjs +149 -0
  55. package/esm2022/lib/components/form/radio-button/radio-button.component.mjs +58 -0
  56. package/esm2022/lib/components/form/range/range.component.mjs +64 -0
  57. package/esm2022/lib/components/form/rating/rating.component.mjs +51 -0
  58. package/esm2022/lib/components/form/select/select.component.mjs +70 -0
  59. package/esm2022/lib/components/form/textarea/textarea.component.mjs +55 -0
  60. package/esm2022/lib/components/form/upload-drag-drop/upload-drag-drop.component.mjs +140 -0
  61. package/esm2022/lib/components/form/upload-file-list/upload-file-list.component.mjs +107 -0
  62. package/esm2022/lib/components/navigation/back-button/back-button.component.mjs +67 -0
  63. package/esm2022/lib/components/navigation/back-to-top/back-to-top.component.mjs +58 -0
  64. package/esm2022/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.mjs +55 -0
  65. package/esm2022/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.mjs +21 -0
  66. package/esm2022/lib/components/navigation/breadcrumbs/breadcrumbs.module.mjs +18 -0
  67. package/esm2022/lib/components/navigation/header/header.component.mjs +73 -0
  68. package/esm2022/lib/components/navigation/navbar/navbar/navbar.component.mjs +41 -0
  69. package/esm2022/lib/components/navigation/navbar/navbar-item/navbar-item.component.mjs +13 -0
  70. package/esm2022/lib/components/navigation/navbar/navbar.module.mjs +18 -0
  71. package/esm2022/lib/components/utils/error-page/error-page.component.mjs +75 -0
  72. package/esm2022/lib/components/utils/icon/icon.component.mjs +56 -0
  73. package/esm2022/lib/components/utils/language-switcher/language-switcher.component.mjs +47 -0
  74. package/esm2022/lib/design-angular-kit-config.mjs +15 -0
  75. package/esm2022/lib/design-angular-kit.module.mjs +68 -0
  76. package/esm2022/lib/enums/colors.enums.mjs +12 -0
  77. package/esm2022/lib/enums/sizes.enum.mjs +9 -0
  78. package/esm2022/lib/interfaces/core.mjs +16 -0
  79. package/esm2022/lib/interfaces/design-angular-kit-init.mjs +2 -0
  80. package/esm2022/lib/interfaces/form.mjs +2 -0
  81. package/esm2022/lib/interfaces/icon.mjs +165 -0
  82. package/esm2022/lib/interfaces/sortable-table.mjs +6 -0
  83. package/esm2022/lib/pipes/date-ago.pipe.mjs +56 -0
  84. package/esm2022/lib/pipes/duration.pipe.mjs +110 -0
  85. package/esm2022/lib/pipes/mark-matching-text.pipe.mjs +48 -0
  86. package/esm2022/lib/services/notification/notification.service.mjs +120 -0
  87. package/esm2022/lib/utils/coercion.mjs +18 -0
  88. package/esm2022/lib/utils/date-utils.mjs +160 -0
  89. package/esm2022/lib/utils/file-utils.mjs +73 -0
  90. package/esm2022/lib/utils/regex.mjs +31 -0
  91. package/esm2022/lib/validators/it-validators.mjs +153 -0
  92. package/esm2022/public_api.mjs +98 -0
  93. package/fesm2022/design-angular-kit.mjs +5450 -0
  94. package/fesm2022/design-angular-kit.mjs.map +1 -0
  95. package/lib/abstracts/{abstract-form-component.d.ts → abstract-form.component.d.ts} +12 -14
  96. package/lib/abstracts/abstract.component.d.ts +18 -8
  97. package/lib/components/components.module.d.ts +45 -0
  98. package/lib/components/core/accordion/accordion.component.d.ts +11 -5
  99. package/lib/components/core/alert/alert.component.d.ts +15 -10
  100. package/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.d.ts +29 -0
  101. package/lib/components/core/avatar/avatar-group/avatar-group.component.d.ts +13 -0
  102. package/lib/components/core/avatar/avatar.directive.d.ts +33 -0
  103. package/lib/components/core/badge/badge.directive.d.ts +14 -7
  104. package/lib/components/core/button/button.directive.d.ts +25 -15
  105. package/lib/components/core/callout/callout.component.d.ts +18 -20
  106. package/lib/components/core/card/card.component.d.ts +46 -18
  107. package/lib/components/core/carousel/carousel/carousel.component.d.ts +34 -15
  108. package/lib/components/core/carousel/carousel-item/carousel-item.component.d.ts +8 -3
  109. package/lib/components/core/carousel/carousel.module.d.ts +8 -0
  110. package/lib/components/core/chip/chip.component.d.ts +8 -5
  111. package/lib/components/core/collapse/collapse.component.d.ts +22 -15
  112. package/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.d.ts +3 -3
  113. package/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.d.ts +3 -3
  114. package/lib/components/core/dimmer/dimmer.component.d.ts +4 -4
  115. package/lib/components/core/dimmer/dimmer.module.d.ts +9 -0
  116. package/lib/components/core/dropdown/dropdown/dropdown.component.d.ts +24 -17
  117. package/lib/components/core/dropdown/dropdown-item/dropdown-item.component.d.ts +15 -12
  118. package/lib/components/core/dropdown/dropdown.module.d.ts +8 -0
  119. package/lib/components/core/forward/forward.directive.d.ts +3 -3
  120. package/lib/components/core/link/link.component.d.ts +14 -10
  121. package/lib/components/core/list/list/list.component.d.ts +20 -6
  122. package/lib/components/core/list/list-item/list-item.component.d.ts +23 -9
  123. package/lib/components/core/list/list.module.d.ts +8 -0
  124. package/lib/components/core/modal/modal.component.d.ts +89 -13
  125. package/lib/components/core/notifications/notifications.component.d.ts +9 -8
  126. package/lib/components/core/pagination/pagination.component.d.ts +71 -10
  127. package/lib/components/core/popover/popover.directive.d.ts +15 -14
  128. package/lib/components/core/progress-bar/progress-bar.component.d.ts +11 -8
  129. package/lib/components/core/progress-button/progress-button.component.d.ts +5 -6
  130. package/lib/components/core/spinner/spinner.component.d.ts +13 -10
  131. package/lib/components/core/steppers/steppers-container/steppers-container.component.d.ts +55 -27
  132. package/lib/components/core/steppers/steppers-item/steppers-item.component.d.ts +5 -4
  133. package/lib/components/core/steppers/steppers.module.d.ts +8 -0
  134. package/lib/components/core/tab/tab-container/tab-container.component.d.ts +15 -12
  135. package/lib/components/core/tab/tab-item/tab-item.component.d.ts +14 -10
  136. package/lib/components/core/tab/tab.module.d.ts +8 -0
  137. package/lib/components/core/table/sort/sort-header/sort-header.component.d.ts +72 -0
  138. package/lib/components/core/table/sort/sort.directive.d.ts +53 -0
  139. package/lib/components/core/table/table.component.d.ts +26 -20
  140. package/lib/components/core/tooltip/tooltip.directive.d.ts +12 -11
  141. package/lib/components/form/autocomplete/autocomplete.component.d.ts +49 -0
  142. package/lib/components/form/checkbox/checkbox.component.d.ts +23 -12
  143. package/lib/components/form/form.module.d.ts +17 -0
  144. package/lib/components/form/input/input.component.d.ts +42 -43
  145. package/lib/components/form/password-input/password-input.component.d.ts +35 -10
  146. package/lib/components/form/radio-button/radio-button.component.d.ts +20 -11
  147. package/lib/components/form/range/range.component.d.ts +42 -0
  148. package/lib/components/form/rating/rating.component.d.ts +24 -0
  149. package/lib/components/form/select/select.component.d.ts +12 -6
  150. package/lib/components/form/textarea/textarea.component.d.ts +15 -5
  151. package/lib/components/form/upload-drag-drop/upload-drag-drop.component.d.ts +5 -5
  152. package/lib/components/form/upload-file-list/upload-file-list.component.d.ts +14 -11
  153. package/lib/components/navigation/back-button/back-button.component.d.ts +8 -8
  154. package/lib/components/navigation/back-to-top/back-to-top.component.d.ts +15 -16
  155. package/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.d.ts +13 -10
  156. package/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.d.ts +9 -8
  157. package/lib/components/navigation/breadcrumbs/breadcrumbs.module.d.ts +8 -0
  158. package/lib/components/navigation/header/header.component.d.ts +22 -25
  159. package/lib/components/navigation/navbar/navbar/navbar.component.d.ts +16 -0
  160. package/lib/components/navigation/navbar/navbar-item/navbar-item.component.d.ts +5 -0
  161. package/lib/components/navigation/navbar/navbar.module.d.ts +8 -0
  162. package/lib/components/utils/error-page/error-page.component.d.ts +44 -0
  163. package/lib/components/utils/icon/icon.component.d.ts +15 -15
  164. package/lib/components/utils/language-switcher/language-switcher.component.d.ts +9 -5
  165. package/lib/design-angular-kit-config.d.ts +16 -0
  166. package/lib/design-angular-kit.module.d.ts +6 -4
  167. package/lib/enums/colors.enums.d.ts +10 -0
  168. package/lib/enums/sizes.enum.d.ts +7 -0
  169. package/lib/interfaces/core.d.ts +16 -15
  170. package/lib/interfaces/design-angular-kit-init.d.ts +7 -0
  171. package/lib/interfaces/form.d.ts +9 -9
  172. package/lib/interfaces/icon.d.ts +4 -3
  173. package/lib/interfaces/sortable-table.d.ts +33 -0
  174. package/lib/pipes/date-ago.pipe.d.ts +17 -0
  175. package/lib/pipes/duration.pipe.d.ts +35 -0
  176. package/lib/pipes/mark-matching-text.pipe.d.ts +15 -7
  177. package/lib/services/{notifications/notifications.service.d.ts → notification/notification.service.d.ts} +3 -3
  178. package/lib/utils/coercion.d.ts +14 -0
  179. package/lib/utils/date-utils.d.ts +78 -0
  180. package/lib/utils/file-utils.d.ts +1 -1
  181. package/lib/utils/regex.d.ts +5 -0
  182. package/lib/validators/it-validators.d.ts +9 -2
  183. package/package.json +14 -20
  184. package/public_api.d.ts +29 -4
  185. package/esm2020/lib/abstracts/abstract-form-component.mjs +0 -174
  186. package/esm2020/lib/abstracts/abstract.component.mjs +0 -27
  187. package/esm2020/lib/components/core/accordion/accordion.component.mjs +0 -31
  188. package/esm2020/lib/components/core/alert/alert.component.mjs +0 -69
  189. package/esm2020/lib/components/core/badge/badge.directive.mjs +0 -34
  190. package/esm2020/lib/components/core/button/button.directive.mjs +0 -80
  191. package/esm2020/lib/components/core/callout/callout.component.mjs +0 -84
  192. package/esm2020/lib/components/core/card/card.component.mjs +0 -58
  193. package/esm2020/lib/components/core/carousel/carousel/carousel.component.mjs +0 -66
  194. package/esm2020/lib/components/core/carousel/carousel-item/carousel-item.component.mjs +0 -14
  195. package/esm2020/lib/components/core/chip/chip.component.mjs +0 -89
  196. package/esm2020/lib/components/core/collapse/collapse.component.mjs +0 -101
  197. package/esm2020/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.mjs +0 -24
  198. package/esm2020/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.mjs +0 -11
  199. package/esm2020/lib/components/core/dimmer/dimmer.component.mjs +0 -59
  200. package/esm2020/lib/components/core/dropdown/dropdown/dropdown.component.mjs +0 -130
  201. package/esm2020/lib/components/core/dropdown/dropdown-item/dropdown-item.component.mjs +0 -68
  202. package/esm2020/lib/components/core/forward/forward.directive.mjs +0 -51
  203. package/esm2020/lib/components/core/link/link.component.mjs +0 -40
  204. package/esm2020/lib/components/core/list/list/list.component.mjs +0 -13
  205. package/esm2020/lib/components/core/list/list-item/list-item.component.mjs +0 -36
  206. package/esm2020/lib/components/core/modal/modal.component.mjs +0 -98
  207. package/esm2020/lib/components/core/notifications/notifications.component.mjs +0 -110
  208. package/esm2020/lib/components/core/pagination/pagination.component.mjs +0 -51
  209. package/esm2020/lib/components/core/popover/popover.directive.mjs +0 -179
  210. package/esm2020/lib/components/core/progress-bar/progress-bar.component.mjs +0 -34
  211. package/esm2020/lib/components/core/progress-button/progress-button.component.mjs +0 -27
  212. package/esm2020/lib/components/core/spinner/spinner.component.mjs +0 -35
  213. package/esm2020/lib/components/core/steppers/steppers-container/steppers-container.component.mjs +0 -119
  214. package/esm2020/lib/components/core/steppers/steppers-item/steppers-item.component.mjs +0 -18
  215. package/esm2020/lib/components/core/tab/tab-container/tab-container.component.mjs +0 -59
  216. package/esm2020/lib/components/core/tab/tab-item/tab-item.component.mjs +0 -36
  217. package/esm2020/lib/components/core/table/table.component.mjs +0 -57
  218. package/esm2020/lib/components/core/tooltip/tooltip.directive.mjs +0 -143
  219. package/esm2020/lib/components/form/checkbox/checkbox.component.mjs +0 -40
  220. package/esm2020/lib/components/form/input/input.component.mjs +0 -222
  221. package/esm2020/lib/components/form/password-input/password-input.component.mjs +0 -112
  222. package/esm2020/lib/components/form/radio-button/radio-button.component.mjs +0 -53
  223. package/esm2020/lib/components/form/select/select.component.mjs +0 -62
  224. package/esm2020/lib/components/form/textarea/textarea.component.mjs +0 -46
  225. package/esm2020/lib/components/form/upload-drag-drop/upload-drag-drop.component.mjs +0 -137
  226. package/esm2020/lib/components/form/upload-file-list/upload-file-list.component.mjs +0 -104
  227. package/esm2020/lib/components/navigation/back-button/back-button.component.mjs +0 -69
  228. package/esm2020/lib/components/navigation/back-to-top/back-to-top.component.mjs +0 -74
  229. package/esm2020/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.mjs +0 -45
  230. package/esm2020/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.mjs +0 -23
  231. package/esm2020/lib/components/navigation/header/header.component.mjs +0 -63
  232. package/esm2020/lib/components/utils/icon/icon.component.mjs +0 -54
  233. package/esm2020/lib/components/utils/language-switcher/language-switcher.component.mjs +0 -39
  234. package/esm2020/lib/components/utils/not-found-page/not-found-page.component.mjs +0 -13
  235. package/esm2020/lib/design-angular-kit.module.mjs +0 -56
  236. package/esm2020/lib/interfaces/core.mjs +0 -16
  237. package/esm2020/lib/interfaces/form.mjs +0 -2
  238. package/esm2020/lib/interfaces/icon.mjs +0 -2
  239. package/esm2020/lib/modules/components.module.mjs +0 -257
  240. package/esm2020/lib/pipes/mark-matching-text.pipe.mjs +0 -36
  241. package/esm2020/lib/services/notifications/notifications.service.mjs +0 -120
  242. package/esm2020/lib/utils/boolean-input.mjs +0 -15
  243. package/esm2020/lib/utils/file-utils.mjs +0 -73
  244. package/esm2020/lib/utils/regex.mjs +0 -26
  245. package/esm2020/lib/validators/it-validators.mjs +0 -134
  246. package/esm2020/public_api.mjs +0 -70
  247. package/fesm2015/design-angular-kit.mjs +0 -3850
  248. package/fesm2015/design-angular-kit.mjs.map +0 -1
  249. package/fesm2020/design-angular-kit.mjs +0 -3797
  250. package/fesm2020/design-angular-kit.mjs.map +0 -1
  251. package/lib/components/utils/not-found-page/not-found-page.component.d.ts +0 -5
  252. package/lib/modules/components.module.d.ts +0 -61
  253. package/lib/utils/boolean-input.d.ts +0 -11
  254. /package/{esm2020 → esm2022}/design-angular-kit.mjs +0 -0
  255. /package/{esm2020 → esm2022}/lib/interfaces/utils.mjs +0 -0
@@ -0,0 +1,112 @@
1
+ import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Input, Output } from '@angular/core';
2
+ import { ItSteppersItemComponent } from '../steppers-item/steppers-item.component';
3
+ import { startWith } from 'rxjs';
4
+ import { NgForOf, NgIf, NgTemplateOutlet } from '@angular/common';
5
+ import { ItIconComponent } from '../../../utils/icon/icon.component';
6
+ import { TranslateModule } from '@ngx-translate/core';
7
+ import { ItButtonDirective } from '../../button/button.directive';
8
+ import { ItProgressBarComponent } from '../../progress-bar/progress-bar.component';
9
+ import { ItProgressButtonComponent } from '../../progress-button/progress-button.component';
10
+ import { inputToBoolean } from '../../../../utils/coercion';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@ngx-translate/core";
13
+ export class ItSteppersContainerComponent {
14
+ constructor(_changeDetectorRef) {
15
+ this._changeDetectorRef = _changeDetectorRef;
16
+ /**
17
+ * Show the stepper header
18
+ * @default true
19
+ */
20
+ this.showHeader = true;
21
+ /**
22
+ * Show the back button
23
+ * @default true
24
+ */
25
+ this.showBackButton = true;
26
+ /**
27
+ * Show the forward button
28
+ * @default true
29
+ */
30
+ this.showForwardButton = true;
31
+ this.backClick = new EventEmitter();
32
+ this.forwardClick = new EventEmitter();
33
+ this.confirmClick = new EventEmitter();
34
+ this.saveClick = new EventEmitter();
35
+ }
36
+ ngAfterViewInit() {
37
+ this.steps?.changes.pipe(// When steps changes (dynamic add/remove)
38
+ startWith(undefined)).subscribe(() => {
39
+ this.stepsSubscriptions?.forEach(sub => sub.unsubscribe()); // Remove old subscriptions
40
+ this.stepsSubscriptions = this.steps?.map(step => step.valueChanges.subscribe(() => {
41
+ this._changeDetectorRef.detectChanges(); // DetectChanges when step attributes changes
42
+ }));
43
+ this._changeDetectorRef.detectChanges(); // Force update html render
44
+ });
45
+ }
46
+ ngOnDestroy() {
47
+ this.stepsSubscriptions?.forEach(step => step.unsubscribe());
48
+ }
49
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ItSteppersContainerComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
50
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "16.2.7", type: ItSteppersContainerComponent, isStandalone: true, selector: "it-steppers-container[activeStep]", inputs: { activeStep: "activeStep", showHeader: ["showHeader", "showHeader", inputToBoolean], dark: ["dark", "dark", inputToBoolean], steppersNumber: ["steppersNumber", "steppersNumber", inputToBoolean], progressStyle: "progressStyle", progressColor: "progressColor", showBackButton: ["showBackButton", "showBackButton", inputToBoolean], disableBackButton: ["disableBackButton", "disableBackButton", inputToBoolean], showForwardButton: ["showForwardButton", "showForwardButton", inputToBoolean], disableForwardButton: ["disableForwardButton", "disableForwardButton", inputToBoolean], showConfirmButton: ["showConfirmButton", "showConfirmButton", inputToBoolean], disableConfirmButton: ["disableConfirmButton", "disableConfirmButton", inputToBoolean], confirmLoading: ["confirmLoading", "confirmLoading", inputToBoolean], showSaveButton: ["showSaveButton", "showSaveButton", inputToBoolean], disableSaveButton: ["disableSaveButton", "disableSaveButton", inputToBoolean], saveLoading: ["saveLoading", "saveLoading", inputToBoolean] }, outputs: { backClick: "backClick", forwardClick: "forwardClick", confirmClick: "confirmClick", saveClick: "saveClick" }, queries: [{ propertyName: "steps", predicate: ItSteppersItemComponent }], ngImport: i0, template: "<div class=\"steppers\" [class.bg-dark]=\"dark\">\n <div *ngIf=\"showHeader\" class=\"steppers-header\">\n <ul *ngIf=\"steps\">\n <li *ngFor=\"let step of steps; let i = index\"\n [class.confirmed]=\"i < activeStep\"\n [class.active]=\"i === activeStep\"\n [class.no-line]=\"i === activeStep && steppersNumber\">\n\n <it-icon *ngIf=\"step.icon && !steppersNumber\" [name]=\"step.icon\"></it-icon>\n <span *ngIf=\"steppersNumber\" class=\"steppers-number\">\n <ng-container *ngIf=\"i < activeStep; else showNumber\">\n <ng-container *ngTemplateOutlet=\"checkIcon\"></ng-container>\n </ng-container>\n <ng-template #showNumber>\n <span class=\"visually-hidden\">{{'it.core.step' | translate}} </span>{{i + 1}}\n </ng-template>\n </span>\n\n {{step.label}}\n\n <ng-container *ngIf=\"i < activeStep && !steppersNumber\">\n <ng-container *ngTemplateOutlet=\"checkIcon\"></ng-container>\n </ng-container>\n <span *ngIf=\"i === activeStep\" class=\"visually-hidden\">{{'it.core.active' | translate}}</span>\n </li>\n </ul>\n <span *ngIf=\"steps\" class=\"steppers-index\" aria-hidden=\"true\">\n <ng-container *ngIf=\"!steppersNumber; else showNumbers\">\n {{(activeStep + 1) + '/' + steps.length}}\n </ng-container>\n <ng-template #showNumbers>\n <span *ngFor=\"let step of steps; let i = index\" [class.active]=\"i === activeStep\">{{i + 1}}</span>\n </ng-template>\n </span>\n </div>\n\n <div *ngIf=\"steps?.get(activeStep) as step\" class=\"steppers-content\" aria-live=\"polite\">\n <ng-container *ngTemplateOutlet=\"step.htmlContent\"></ng-container>\n </div>\n\n <nav *ngIf=\"showBackButton || showSaveButton || showForwardButton || showConfirmButton || !!progressStyle\"\n class=\"steppers-nav\">\n <button *ngIf=\"showBackButton\" type=\"button\" itButton=\"outline-primary\" size=\"sm\" class=\"steppers-btn-prev\"\n [disabled]=\"disableBackButton\"\n (click)=\"backClick.emit(activeStep)\">\n <it-icon name=\"chevron-left\" color=\"primary\"></it-icon>\n {{'it.core.back' | translate}}\n </button>\n\n <ng-container *ngIf=\"!!progressStyle && steps\">\n <ul *ngIf=\"progressStyle === 'dots'; else progressBar\" class=\"steppers-dots\">\n <li *ngFor=\"let step of steps; let i = index\" [class.done]=\"i < activeStep\">\n <span class=\"visually-hidden\">\n {{'it.core.step-of' | translate: { current: activeStep + 1, available: steps?.length } }}\n {{i < activeStep ? ('- ' + ('it.core.confirmed' | translate)) : ''}}\n </span>\n </li>\n </ul>\n\n <ng-template #progressBar>\n <div class=\"steppers-progress\">\n <it-progress-bar [color]=\"progressColor\" [value]=\"(activeStep/(steps?.length||1)) * 100\"></it-progress-bar>\n </div>\n </ng-template>\n </ng-container>\n\n <button *ngIf=\"showSaveButton\" type=\"button\" itButton=\"primary\" size=\"sm\" class=\"steppers-btn-save\"\n [progress]=\"saveLoading\" [disabled]=\"saveLoading || disableSaveButton\"\n (click)=\"saveClick.emit(activeStep)\">\n {{'it.general.save' | translate}}\n </button>\n\n <button *ngIf=\"showForwardButton\" type=\"button\" itButton=\"outline-primary\" size=\"sm\" class=\"steppers-btn-next\"\n [disabled]=\"disableForwardButton\"\n (click)=\"forwardClick.emit(activeStep)\">\n {{'it.core.forward' | translate}}\n <it-icon name=\"chevron-right\" color=\"primary\"></it-icon>\n </button>\n\n <button *ngIf=\"showConfirmButton\" type=\"button\" itButton=\"primary\" size=\"sm\"\n class=\"steppers-btn-confirm d-lg-block\"\n [progress]=\"confirmLoading\" [disabled]=\"confirmLoading || disableConfirmButton\"\n (click)=\"confirmClick.emit(activeStep)\">\n {{'it.core.confirm' | translate}}\n </button>\n </nav>\n</div>\n\n<ng-template #checkIcon>\n <it-icon name=\"check\" class=\"steppers-success\"></it-icon>\n <span class=\"visually-hidden\">{{'it.core.confirmed' | translate}}</span>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ItIconComponent, selector: "it-icon[name]", inputs: ["name", "size", "color", "padded", "svgClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: ItButtonDirective, selector: "[itButton]", inputs: ["itButton", "size", "block", "disabled"], exportAs: ["itButton"] }, { kind: "component", type: ItProgressBarComponent, selector: "it-progress-bar[value]", inputs: ["value", "showLabel", "indeterminate", "color"] }, { kind: "component", type: ItProgressButtonComponent, selector: "button[itButton][progress]", inputs: ["progress", "progressColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
51
+ }
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ItSteppersContainerComponent, decorators: [{
53
+ type: Component,
54
+ args: [{ standalone: true, selector: 'it-steppers-container[activeStep]', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgIf, NgForOf, ItIconComponent, NgTemplateOutlet, TranslateModule, ItButtonDirective, ItProgressBarComponent, ItProgressButtonComponent], template: "<div class=\"steppers\" [class.bg-dark]=\"dark\">\n <div *ngIf=\"showHeader\" class=\"steppers-header\">\n <ul *ngIf=\"steps\">\n <li *ngFor=\"let step of steps; let i = index\"\n [class.confirmed]=\"i < activeStep\"\n [class.active]=\"i === activeStep\"\n [class.no-line]=\"i === activeStep && steppersNumber\">\n\n <it-icon *ngIf=\"step.icon && !steppersNumber\" [name]=\"step.icon\"></it-icon>\n <span *ngIf=\"steppersNumber\" class=\"steppers-number\">\n <ng-container *ngIf=\"i < activeStep; else showNumber\">\n <ng-container *ngTemplateOutlet=\"checkIcon\"></ng-container>\n </ng-container>\n <ng-template #showNumber>\n <span class=\"visually-hidden\">{{'it.core.step' | translate}} </span>{{i + 1}}\n </ng-template>\n </span>\n\n {{step.label}}\n\n <ng-container *ngIf=\"i < activeStep && !steppersNumber\">\n <ng-container *ngTemplateOutlet=\"checkIcon\"></ng-container>\n </ng-container>\n <span *ngIf=\"i === activeStep\" class=\"visually-hidden\">{{'it.core.active' | translate}}</span>\n </li>\n </ul>\n <span *ngIf=\"steps\" class=\"steppers-index\" aria-hidden=\"true\">\n <ng-container *ngIf=\"!steppersNumber; else showNumbers\">\n {{(activeStep + 1) + '/' + steps.length}}\n </ng-container>\n <ng-template #showNumbers>\n <span *ngFor=\"let step of steps; let i = index\" [class.active]=\"i === activeStep\">{{i + 1}}</span>\n </ng-template>\n </span>\n </div>\n\n <div *ngIf=\"steps?.get(activeStep) as step\" class=\"steppers-content\" aria-live=\"polite\">\n <ng-container *ngTemplateOutlet=\"step.htmlContent\"></ng-container>\n </div>\n\n <nav *ngIf=\"showBackButton || showSaveButton || showForwardButton || showConfirmButton || !!progressStyle\"\n class=\"steppers-nav\">\n <button *ngIf=\"showBackButton\" type=\"button\" itButton=\"outline-primary\" size=\"sm\" class=\"steppers-btn-prev\"\n [disabled]=\"disableBackButton\"\n (click)=\"backClick.emit(activeStep)\">\n <it-icon name=\"chevron-left\" color=\"primary\"></it-icon>\n {{'it.core.back' | translate}}\n </button>\n\n <ng-container *ngIf=\"!!progressStyle && steps\">\n <ul *ngIf=\"progressStyle === 'dots'; else progressBar\" class=\"steppers-dots\">\n <li *ngFor=\"let step of steps; let i = index\" [class.done]=\"i < activeStep\">\n <span class=\"visually-hidden\">\n {{'it.core.step-of' | translate: { current: activeStep + 1, available: steps?.length } }}\n {{i < activeStep ? ('- ' + ('it.core.confirmed' | translate)) : ''}}\n </span>\n </li>\n </ul>\n\n <ng-template #progressBar>\n <div class=\"steppers-progress\">\n <it-progress-bar [color]=\"progressColor\" [value]=\"(activeStep/(steps?.length||1)) * 100\"></it-progress-bar>\n </div>\n </ng-template>\n </ng-container>\n\n <button *ngIf=\"showSaveButton\" type=\"button\" itButton=\"primary\" size=\"sm\" class=\"steppers-btn-save\"\n [progress]=\"saveLoading\" [disabled]=\"saveLoading || disableSaveButton\"\n (click)=\"saveClick.emit(activeStep)\">\n {{'it.general.save' | translate}}\n </button>\n\n <button *ngIf=\"showForwardButton\" type=\"button\" itButton=\"outline-primary\" size=\"sm\" class=\"steppers-btn-next\"\n [disabled]=\"disableForwardButton\"\n (click)=\"forwardClick.emit(activeStep)\">\n {{'it.core.forward' | translate}}\n <it-icon name=\"chevron-right\" color=\"primary\"></it-icon>\n </button>\n\n <button *ngIf=\"showConfirmButton\" type=\"button\" itButton=\"primary\" size=\"sm\"\n class=\"steppers-btn-confirm d-lg-block\"\n [progress]=\"confirmLoading\" [disabled]=\"confirmLoading || disableConfirmButton\"\n (click)=\"confirmClick.emit(activeStep)\">\n {{'it.core.confirm' | translate}}\n </button>\n </nav>\n</div>\n\n<ng-template #checkIcon>\n <it-icon name=\"check\" class=\"steppers-success\"></it-icon>\n <span class=\"visually-hidden\">{{'it.core.confirmed' | translate}}</span>\n</ng-template>\n" }]
55
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { activeStep: [{
56
+ type: Input
57
+ }], showHeader: [{
58
+ type: Input,
59
+ args: [{ transform: inputToBoolean }]
60
+ }], dark: [{
61
+ type: Input,
62
+ args: [{ transform: inputToBoolean }]
63
+ }], steppersNumber: [{
64
+ type: Input,
65
+ args: [{ transform: inputToBoolean }]
66
+ }], progressStyle: [{
67
+ type: Input
68
+ }], progressColor: [{
69
+ type: Input
70
+ }], showBackButton: [{
71
+ type: Input,
72
+ args: [{ transform: inputToBoolean }]
73
+ }], disableBackButton: [{
74
+ type: Input,
75
+ args: [{ transform: inputToBoolean }]
76
+ }], showForwardButton: [{
77
+ type: Input,
78
+ args: [{ transform: inputToBoolean }]
79
+ }], disableForwardButton: [{
80
+ type: Input,
81
+ args: [{ transform: inputToBoolean }]
82
+ }], showConfirmButton: [{
83
+ type: Input,
84
+ args: [{ transform: inputToBoolean }]
85
+ }], disableConfirmButton: [{
86
+ type: Input,
87
+ args: [{ transform: inputToBoolean }]
88
+ }], confirmLoading: [{
89
+ type: Input,
90
+ args: [{ transform: inputToBoolean }]
91
+ }], showSaveButton: [{
92
+ type: Input,
93
+ args: [{ transform: inputToBoolean }]
94
+ }], disableSaveButton: [{
95
+ type: Input,
96
+ args: [{ transform: inputToBoolean }]
97
+ }], saveLoading: [{
98
+ type: Input,
99
+ args: [{ transform: inputToBoolean }]
100
+ }], steps: [{
101
+ type: ContentChildren,
102
+ args: [ItSteppersItemComponent]
103
+ }], backClick: [{
104
+ type: Output
105
+ }], forwardClick: [{
106
+ type: Output
107
+ }], confirmClick: [{
108
+ type: Output
109
+ }], saveClick: [{
110
+ type: Output
111
+ }] } });
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlcnMtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY29yZS9zdGVwcGVycy9zdGVwcGVycy1jb250YWluZXIvc3RlcHBlcnMtY29udGFpbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY29yZS9zdGVwcGVycy9zdGVwcGVycy1jb250YWluZXIvc3RlcHBlcnMtY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULGVBQWUsRUFDZixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUVuRixPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDNUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7QUFTNUQs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LEVBQUUsY0FBYyxFQUFFO2dCQU1FLGlCQUFpQjtzQkFBdEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUU7Z0JBTUUsb0JBQW9CO3NCQUF6RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRTtnQkFNRSxpQkFBaUI7c0JBQXRELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFO2dCQU1FLG9CQUFvQjtzQkFBekQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUU7Z0JBS0UsY0FBYztzQkFBbkQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUU7Z0JBTUUsY0FBYztzQkFBbkQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUU7Z0JBTUUsaUJBQWlCO3NCQUF0RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRTtnQkFLRSxXQUFXO3NCQUFoRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRTtnQkFLTSxLQUFLO3NCQUE5QyxlQUFlO3VCQUFDLHVCQUF1QjtnQkFNOUIsU0FBUztzQkFBbEIsTUFBTTtnQkFNRyxZQUFZO3NCQUFyQixNQUFNO2dCQU1HLFlBQVk7c0JBQXJCLE1BQU07Z0JBTUcsU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJdFN0ZXBwZXJzSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3N0ZXBwZXJzLWl0ZW0vc3RlcHBlcnMtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvZ3Jlc3NCYXJDb2xvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvY29yZSc7XG5pbXBvcnQgeyBzdGFydFdpdGgsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTmdGb3JPZiwgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJdEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgSXRCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9idXR0b24vYnV0dG9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJdFByb2dyZXNzQmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcHJvZ3Jlc3MtYmFyL3Byb2dyZXNzLWJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSXRQcm9ncmVzc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3Byb2dyZXNzLWJ1dHRvbi9wcm9ncmVzcy1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IGlucHV0VG9Cb29sZWFuIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvY29lcmNpb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdpdC1zdGVwcGVycy1jb250YWluZXJbYWN0aXZlU3RlcF0nLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RlcHBlcnMtY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtOZ0lmLCBOZ0Zvck9mLCBJdEljb25Db21wb25lbnQsIE5nVGVtcGxhdGVPdXRsZXQsIFRyYW5zbGF0ZU1vZHVsZSwgSXRCdXR0b25EaXJlY3RpdmUsIEl0UHJvZ3Jlc3NCYXJDb21wb25lbnQsIEl0UHJvZ3Jlc3NCdXR0b25Db21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIEl0U3RlcHBlcnNDb250YWluZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKlxuICAgKiBUaGUgYWN0aXZlIHN0ZXAgaW5kZXhcbiAgICogQHBhcmFtIGluZGV4IHRoZSBzdGVwIGluZGV4XG4gICAqL1xuICBASW5wdXQoKSBhY3RpdmVTdGVwITogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBzdGVwcGVyIGhlYWRlclxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGlucHV0VG9Cb29sZWFuIH0pIHNob3dIZWFkZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEYXJrIHN0eWxlXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGlucHV0VG9Cb29sZWFuIH0pIGRhcms/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFiZWxzIHByZXNlbnQgaW4gdGhlIGhlYWRlciBzdGVwcyBjYW4gYmUgYW50aWNpcGF0ZWQgYnkgdGhlIHJlbGF0aXZlIG9yZGluYWwgbnVtYmVyLlxuICAgKiBAZWZ1YWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGlucHV0VG9Cb29sZWFuIH0pIHN0ZXBwZXJzTnVtYmVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHByb2dyZXNzIHN0eWxlXG4gICAqIC08Yj5wcm9ncmVzczwvYj46IFNob3cgcHJvZ3Jlc3MgYmFyIC0gWW91IGNhbiBjaGFuZ2UgdGhlIGNvbG9yIHdpdGggdGhlIGBwcm9ncmVzc0NvbG9yYCBhdHRyaWJ1dGVcbiAgICogLTxiPmRvdHM8L2I+OiBTaG93IHByb2dyZXNzIGRvdHNcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkIC0gZG9uJ3Qgc2hvdyBwcm9ncmVzc1xuICAgKi9cbiAgQElucHV0KCkgcHJvZ3Jlc3NTdHlsZTogJ3Byb2dyZXNzJyB8ICdkb3RzJyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQ3VzdG9taXplIHByb2dyZXNzIGNvbG9yXG4gICAqL1xuICBASW5wdXQoKSBwcm9ncmVzc0NvbG9yOiBQcm9ncmVzc0JhckNvbG9yIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBiYWNrIGJ1dHRvblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGlucHV0VG9Cb29sZWFuIH0pIHNob3dCYWNrQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGlzYWJsZSB0aGUgYmFjayBidXR0b25cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogaW5wdXRUb0Jvb2xlYW4gfSkgZGlzYWJsZUJhY2tCdXR0b24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBmb3J3YXJkIGJ1dHRvblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGlucHV0VG9Cb29sZWFuIH0pIHNob3dGb3J3YXJkQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGlzYWJsZSB0aGUgZm9yd2FyZCBidXR0b25cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogaW5wdXRUb0Jvb2xlYW4gfSkgZGlzYWJsZUZvcndhcmRCdXR0b24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBjb25maXJtIGJ1dHRvblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBpbnB1dFRvQm9vbGVhbiB9KSBzaG93Q29uZmlybUJ1dHRvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIGNvbmZpcm0gYnV0dG9uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGlucHV0VG9Cb29sZWFuIH0pIGRpc2FibGVDb25maXJtQnV0dG9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2hvdyB0aGUgY29uZmlybSBidXR0b24gYXMgaW5kZXRlcm1pbmF0ZSBwcm9ncmVzcyBidXR0b25cbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogaW5wdXRUb0Jvb2xlYW4gfSkgY29uZmlybUxvYWRpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBzYXZlIGJ1dHRvblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBpbnB1dFRvQm9vbGVhbiB9KSBzaG93U2F2ZUJ1dHRvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIHNhdmUgYnV0dG9uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGlucHV0VG9Cb29sZWFuIH0pIGRpc2FibGVTYXZlQnV0dG9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2hvdyB0aGUgc2F2ZSBidXR0b24gYXMgaW5kZXRlcm1pbmF0ZSBwcm9ncmVzcyBidXR0b25cbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogaW5wdXRUb0Jvb2xlYW4gfSkgc2F2ZUxvYWRpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RlcHBlciBpdGVtc1xuICAgKi9cbiAgQENvbnRlbnRDaGlsZHJlbihJdFN0ZXBwZXJzSXRlbUNvbXBvbmVudCkgc3RlcHM/OiBRdWVyeUxpc3Q8SXRTdGVwcGVyc0l0ZW1Db21wb25lbnQ+O1xuXG4gIC8qKlxuICAgKiBPbiBiYWNrIGJ1dHRvbiBjbGlja1xuICAgKiBAZXZlbnQgYWN0aXZlU3RlcCB0aGUgY3VycmVudCBzdGVwIGluZGV4XG4gICAqL1xuICBAT3V0cHV0KCkgYmFja0NsaWNrOiBFdmVudEVtaXR0ZXI8bnVtYmVyPjtcblxuICAvKipcbiAgICogT24gZm9yd2FyZCBidXR0b24gY2xpY2tcbiAgICogQGV2ZW50IGFjdGl2ZVN0ZXAgdGhlIGN1cnJlbnQgc3RlcCBpbmRleFxuICAgKi9cbiAgQE91dHB1dCgpIGZvcndhcmRDbGljazogRXZlbnRFbWl0dGVyPG51bWJlcj47XG5cbiAgLyoqXG4gICAqIE9uIGNvbmZpcm0gYnV0dG9uIGNsaWNrXG4gICAqIEBldmVudCBhY3RpdmVTdGVwIHRoZSBjdXJyZW50IHN0ZXAgaW5kZXhcbiAgICovXG4gIEBPdXRwdXQoKSBjb25maXJtQ2xpY2s6IEV2ZW50RW1pdHRlcjxudW1iZXI+O1xuXG4gIC8qKlxuICAgKiBPbiBzYXZlIGJ1dHRvbiBjbGlja1xuICAgKiBAZXZlbnQgYWN0aXZlU3RlcCB0aGUgY3VycmVudCBzdGVwIGluZGV4XG4gICAqL1xuICBAT3V0cHV0KCkgc2F2ZUNsaWNrOiBFdmVudEVtaXR0ZXI8bnVtYmVyPjtcblxuICBwcml2YXRlIHN0ZXBzU3Vic2NyaXB0aW9ucz86IEFycmF5PFN1YnNjcmlwdGlvbj47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHRoaXMuYmFja0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gICAgdGhpcy5mb3J3YXJkQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgICB0aGlzLmNvbmZpcm1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICAgIHRoaXMuc2F2ZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdGVwcz8uY2hhbmdlcy5waXBlKCAvLyBXaGVuIHN0ZXBzIGNoYW5nZXMgKGR5bmFtaWMgYWRkL3JlbW92ZSlcbiAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpXG4gICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5zdGVwc1N1YnNjcmlwdGlvbnM/LmZvckVhY2goc3ViID0+IHN1Yi51bnN1YnNjcmliZSgpKTsgLy8gUmVtb3ZlIG9sZCBzdWJzY3JpcHRpb25zXG4gICAgICB0aGlzLnN0ZXBzU3Vic2NyaXB0aW9ucyA9IHRoaXMuc3RlcHM/Lm1hcChzdGVwID0+IHN0ZXAudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTsgLy8gRGV0ZWN0Q2hhbmdlcyB3aGVuIHN0ZXAgYXR0cmlidXRlcyBjaGFuZ2VzXG4gICAgICB9KSk7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7IC8vIEZvcmNlIHVwZGF0ZSBodG1sIHJlbmRlclxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdGVwc1N1YnNjcmlwdGlvbnM/LmZvckVhY2goc3RlcCA9PiBzdGVwLnVuc3Vic2NyaWJlKCkpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic3RlcHBlcnNcIiBbY2xhc3MuYmctZGFya109XCJkYXJrXCI+XG4gIDxkaXYgKm5nSWY9XCJzaG93SGVhZGVyXCIgY2xhc3M9XCJzdGVwcGVycy1oZWFkZXJcIj5cbiAgICA8dWwgKm5nSWY9XCJzdGVwc1wiPlxuICAgICAgPGxpICpuZ0Zvcj1cImxldCBzdGVwIG9mIHN0ZXBzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICBbY2xhc3MuY29uZmlybWVkXT1cImkgPCBhY3RpdmVTdGVwXCJcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImkgPT09IGFjdGl2ZVN0ZXBcIlxuICAgICAgICAgIFtjbGFzcy5uby1saW5lXT1cImkgPT09IGFjdGl2ZVN0ZXAgJiYgc3RlcHBlcnNOdW1iZXJcIj5cblxuICAgICAgICA8aXQtaWNvbiAqbmdJZj1cInN0ZXAuaWNvbiAmJiAhc3RlcHBlcnNOdW1iZXJcIiBbbmFtZV09XCJzdGVwLmljb25cIj48L2l0LWljb24+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwic3RlcHBlcnNOdW1iZXJcIiBjbGFzcz1cInN0ZXBwZXJzLW51bWJlclwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpIDwgYWN0aXZlU3RlcDsgZWxzZSBzaG93TnVtYmVyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2hlY2tJY29uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNzaG93TnVtYmVyPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj57eydpdC5jb3JlLnN0ZXAnIHwgdHJhbnNsYXRlfX0gPC9zcGFuPnt7aSArIDF9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICB7e3N0ZXAubGFiZWx9fVxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpIDwgYWN0aXZlU3RlcCAmJiAhc3RlcHBlcnNOdW1iZXJcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2hlY2tJY29uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8c3BhbiAqbmdJZj1cImkgPT09IGFjdGl2ZVN0ZXBcIiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPnt7J2l0LmNvcmUuYWN0aXZlJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICAgIDxzcGFuICpuZ0lmPVwic3RlcHNcIiBjbGFzcz1cInN0ZXBwZXJzLWluZGV4XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXN0ZXBwZXJzTnVtYmVyOyBlbHNlIHNob3dOdW1iZXJzXCI+XG4gICAgICAgIHt7KGFjdGl2ZVN0ZXAgKyAxKSArICcvJyArIHN0ZXBzLmxlbmd0aH19XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjc2hvd051bWJlcnM+XG4gICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBzdGVwIG9mIHN0ZXBzOyBsZXQgaSA9IGluZGV4XCIgW2NsYXNzLmFjdGl2ZV09XCJpID09PSBhY3RpdmVTdGVwXCI+e3tpICsgMX19PC9zcGFuPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJzdGVwcz8uZ2V0KGFjdGl2ZVN0ZXApIGFzIHN0ZXBcIiBjbGFzcz1cInN0ZXBwZXJzLWNvbnRlbnRcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RlcC5odG1sQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8bmF2ICpuZ0lmPVwic2hvd0JhY2tCdXR0b24gfHwgc2hvd1NhdmVCdXR0b24gfHwgc2hvd0ZvcndhcmRCdXR0b24gfHwgc2hvd0NvbmZpcm1CdXR0b24gfHwgISFwcm9ncmVzc1N0eWxlXCJcbiAgICAgICBjbGFzcz1cInN0ZXBwZXJzLW5hdlwiPlxuICAgIDxidXR0b24gKm5nSWY9XCJzaG93QmFja0J1dHRvblwiIHR5cGU9XCJidXR0b25cIiBpdEJ1dHRvbj1cIm91dGxpbmUtcHJpbWFyeVwiIHNpemU9XCJzbVwiIGNsYXNzPVwic3RlcHBlcnMtYnRuLXByZXZcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVCYWNrQnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJiYWNrQ2xpY2suZW1pdChhY3RpdmVTdGVwKVwiPlxuICAgICAgPGl0LWljb24gbmFtZT1cImNoZXZyb24tbGVmdFwiIGNvbG9yPVwicHJpbWFyeVwiPjwvaXQtaWNvbj5cbiAgICAgIHt7J2l0LmNvcmUuYmFjaycgfCB0cmFuc2xhdGV9fVxuICAgIDwvYnV0dG9uPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEhcHJvZ3Jlc3NTdHlsZSAmJiBzdGVwc1wiPlxuICAgICAgPHVsICpuZ0lmPVwicHJvZ3Jlc3NTdHlsZSA9PT0gJ2RvdHMnOyBlbHNlIHByb2dyZXNzQmFyXCIgY2xhc3M9XCJzdGVwcGVycy1kb3RzXCI+XG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgc3RlcCBvZiBzdGVwczsgbGV0IGkgPSBpbmRleFwiIFtjbGFzcy5kb25lXT1cImkgPCBhY3RpdmVTdGVwXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj5cbiAgICAgICAgICAgIHt7J2l0LmNvcmUuc3RlcC1vZicgfCB0cmFuc2xhdGU6IHsgY3VycmVudDogYWN0aXZlU3RlcCArIDEsIGF2YWlsYWJsZTogc3RlcHM/Lmxlbmd0aCB9IH19XG4gICAgICAgICAgICB7e2kgPCBhY3RpdmVTdGVwID8gKCctICcgKyAoJ2l0LmNvcmUuY29uZmlybWVkJyB8IHRyYW5zbGF0ZSkpIDogJyd9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9saT5cbiAgICAgIDwvdWw+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjcHJvZ3Jlc3NCYXI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdGVwcGVycy1wcm9ncmVzc1wiPlxuICAgICAgICAgIDxpdC1wcm9ncmVzcy1iYXIgW2NvbG9yXT1cInByb2dyZXNzQ29sb3JcIiBbdmFsdWVdPVwiKGFjdGl2ZVN0ZXAvKHN0ZXBzPy5sZW5ndGh8fDEpKSAqIDEwMFwiPjwvaXQtcHJvZ3Jlc3MtYmFyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8YnV0dG9uICpuZ0lmPVwic2hvd1NhdmVCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgaXRCdXR0b249XCJwcmltYXJ5XCIgc2l6ZT1cInNtXCIgY2xhc3M9XCJzdGVwcGVycy1idG4tc2F2ZVwiXG4gICAgICAgICAgICBbcHJvZ3Jlc3NdPVwic2F2ZUxvYWRpbmdcIiBbZGlzYWJsZWRdPVwic2F2ZUxvYWRpbmcgfHwgZGlzYWJsZVNhdmVCdXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVDbGljay5lbWl0KGFjdGl2ZVN0ZXApXCI+XG4gICAgICB7eydpdC5nZW5lcmFsLnNhdmUnIHwgdHJhbnNsYXRlfX1cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gKm5nSWY9XCJzaG93Rm9yd2FyZEJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiBpdEJ1dHRvbj1cIm91dGxpbmUtcHJpbWFyeVwiIHNpemU9XCJzbVwiIGNsYXNzPVwic3RlcHBlcnMtYnRuLW5leHRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVGb3J3YXJkQnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJmb3J3YXJkQ2xpY2suZW1pdChhY3RpdmVTdGVwKVwiPlxuICAgICAge3snaXQuY29yZS5mb3J3YXJkJyB8IHRyYW5zbGF0ZX19XG4gICAgICA8aXQtaWNvbiBuYW1lPVwiY2hldnJvbi1yaWdodFwiIGNvbG9yPVwicHJpbWFyeVwiPjwvaXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gKm5nSWY9XCJzaG93Q29uZmlybUJ1dHRvblwiIHR5cGU9XCJidXR0b25cIiBpdEJ1dHRvbj1cInByaW1hcnlcIiBzaXplPVwic21cIlxuICAgICAgICAgICAgY2xhc3M9XCJzdGVwcGVycy1idG4tY29uZmlybSBkLWxnLWJsb2NrXCJcbiAgICAgICAgICAgIFtwcm9ncmVzc109XCJjb25maXJtTG9hZGluZ1wiIFtkaXNhYmxlZF09XCJjb25maXJtTG9hZGluZyB8fCBkaXNhYmxlQ29uZmlybUJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY29uZmlybUNsaWNrLmVtaXQoYWN0aXZlU3RlcClcIj5cbiAgICAgIHt7J2l0LmNvcmUuY29uZmlybScgfCB0cmFuc2xhdGV9fVxuICAgIDwvYnV0dG9uPlxuICA8L25hdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2NoZWNrSWNvbj5cbiAgPGl0LWljb24gbmFtZT1cImNoZWNrXCIgY2xhc3M9XCJzdGVwcGVycy1zdWNjZXNzXCI+PC9pdC1pY29uPlxuICA8c3BhbiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPnt7J2l0LmNvcmUuY29uZmlybWVkJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -0,0 +1,19 @@
1
+ import { ChangeDetectionStrategy, Component, Input, TemplateRef, ViewChild } from '@angular/core';
2
+ import { ItAbstractComponent } from '../../../../abstracts/abstract.component';
3
+ import * as i0 from "@angular/core";
4
+ export class ItSteppersItemComponent extends ItAbstractComponent {
5
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ItSteppersItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
6
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: ItSteppersItemComponent, isStandalone: true, selector: "it-steppers-item[label]", inputs: { label: "label", icon: "icon" }, viewQueries: [{ propertyName: "htmlContent", first: true, predicate: TemplateRef, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template>\n <ng-content></ng-content>\n</ng-template>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7
+ }
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ItSteppersItemComponent, decorators: [{
9
+ type: Component,
10
+ args: [{ standalone: true, selector: 'it-steppers-item[label]', changeDetection: ChangeDetectionStrategy.OnPush, imports: [], template: "<ng-template>\n <ng-content></ng-content>\n</ng-template>\n" }]
11
+ }], propDecorators: { label: [{
12
+ type: Input
13
+ }], icon: [{
14
+ type: Input
15
+ }], htmlContent: [{
16
+ type: ViewChild,
17
+ args: [TemplateRef]
18
+ }] } });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlcnMtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi9jb21wb25lbnRzL2NvcmUvc3RlcHBlcnMvc3RlcHBlcnMtaXRlbS9zdGVwcGVycy1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY29yZS9zdGVwcGVycy9zdGVwcGVycy1pdGVtL3N0ZXBwZXJzLWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUFTL0UsTUFBTSxPQUFPLHVCQUF3QixTQUFRLG1CQUFtQjs4R0FBbkQsdUJBQXVCO2tHQUF2Qix1QkFBdUIsMEtBZXZCLFdBQVcsdUVDMUJ4Qiw4REFHQTs7MkZEUWEsdUJBQXVCO2tCQVBuQyxTQUFTO2lDQUNJLElBQUksWUFDTix5QkFBeUIsbUJBRWxCLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsRUFBRTs4QkFPRixLQUFLO3NCQUFiLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQUt5QixXQUFXO3NCQUF6QyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWNvbk5hbWUgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzL2ljb24nO1xuaW1wb3J0IHsgSXRBYnN0cmFjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2Fic3RyYWN0cy9hYnN0cmFjdC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdpdC1zdGVwcGVycy1pdGVtW2xhYmVsXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGVwcGVycy1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtdXG59KVxuZXhwb3J0IGNsYXNzIEl0U3RlcHBlcnNJdGVtQ29tcG9uZW50IGV4dGVuZHMgSXRBYnN0cmFjdENvbXBvbmVudCB7XG5cbiAgLyoqXG4gICAqIFRoZSBsYWJlbHMgcHJlc2VudCBpbiB0aGUgaGVhZGVyIHN0ZXBzXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbCE6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGxhYmVscyBwcmVzZW50IGluIHRoZSBoZWFkZXIgc3RlcHMgY2FuIGJlIHByZWNlZGVkIGJ5IGFuIGljb24uXG4gICAqL1xuICBASW5wdXQoKSBpY29uOiBJY29uTmFtZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2Ygc3RlcFxuICAgKi9cbiAgQFZpZXdDaGlsZChUZW1wbGF0ZVJlZikgcHVibGljIGh0bWxDb250ZW50ITogVGVtcGxhdGVSZWY8YW55Pjtcbn1cbiIsIjxuZy10ZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -0,0 +1,23 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { ItSteppersContainerComponent } from './steppers-container/steppers-container.component';
3
+ import { ItSteppersItemComponent } from './steppers-item/steppers-item.component';
4
+ import * as i0 from "@angular/core";
5
+ const steppersComponents = [
6
+ ItSteppersContainerComponent,
7
+ ItSteppersItemComponent
8
+ ];
9
+ export class ItSteppersModule {
10
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ItSteppersModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
11
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.7", ngImport: i0, type: ItSteppersModule, imports: [ItSteppersContainerComponent,
12
+ ItSteppersItemComponent], exports: [ItSteppersContainerComponent,
13
+ ItSteppersItemComponent] }); }
14
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ItSteppersModule, imports: [ItSteppersContainerComponent] }); }
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ItSteppersModule, decorators: [{
17
+ type: NgModule,
18
+ args: [{
19
+ imports: steppersComponents,
20
+ exports: steppersComponents
21
+ }]
22
+ }] });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlcnMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWFuZ3VsYXIta2l0L3NyYy9saWIvY29tcG9uZW50cy9jb3JlL3N0ZXBwZXJzL3N0ZXBwZXJzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOztBQUVsRixNQUFNLGtCQUFrQixHQUFHO0lBQ3pCLDRCQUE0QjtJQUM1Qix1QkFBdUI7Q0FDeEIsQ0FBQztBQU1GLE1BQU0sT0FBTyxnQkFBZ0I7OEdBQWhCLGdCQUFnQjsrR0FBaEIsZ0JBQWdCLFlBUjNCLDRCQUE0QjtZQUM1Qix1QkFBdUIsYUFEdkIsNEJBQTRCO1lBQzVCLHVCQUF1QjsrR0FPWixnQkFBZ0IsWUFSM0IsNEJBQTRCOzsyRkFRakIsZ0JBQWdCO2tCQUo1QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxrQkFBa0I7b0JBQzNCLE9BQU8sRUFBRSxrQkFBa0I7aUJBQzVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEl0U3RlcHBlcnNDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuL3N0ZXBwZXJzLWNvbnRhaW5lci9zdGVwcGVycy1jb250YWluZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEl0U3RlcHBlcnNJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9zdGVwcGVycy1pdGVtL3N0ZXBwZXJzLWl0ZW0uY29tcG9uZW50JztcblxuY29uc3Qgc3RlcHBlcnNDb21wb25lbnRzID0gW1xuICBJdFN0ZXBwZXJzQ29udGFpbmVyQ29tcG9uZW50LFxuICBJdFN0ZXBwZXJzSXRlbUNvbXBvbmVudFxuXTtcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogc3RlcHBlcnNDb21wb25lbnRzLFxuICBleHBvcnRzOiBzdGVwcGVyc0NvbXBvbmVudHNcbn0pXG5leHBvcnQgY2xhc3MgSXRTdGVwcGVyc01vZHVsZSB7XG59XG4iXX0=
@@ -0,0 +1,60 @@
1
+ import { ChangeDetectionStrategy, Component, ContentChildren, Input, ViewChildren } from '@angular/core';
2
+ import { ItTabItemComponent } from '../tab-item/tab-item.component';
3
+ import { of, startWith, switchMap, tap } from 'rxjs';
4
+ import { Tab } from 'bootstrap-italia';
5
+ import { ItAbstractComponent } from '../../../../abstracts/abstract.component';
6
+ import { NgForOf, NgIf, NgTemplateOutlet } from '@angular/common';
7
+ import { ItIconComponent } from '../../../utils/icon/icon.component';
8
+ import { inputToBoolean } from '../../../../utils/coercion';
9
+ import * as i0 from "@angular/core";
10
+ export class ItTabContainerComponent extends ItAbstractComponent {
11
+ ngAfterViewInit() {
12
+ super.ngAfterViewInit();
13
+ this.tabs?.changes.pipe(// When tabs changes (dynamic add/remove)
14
+ startWith(undefined), tap(() => {
15
+ this.tabSubscriptions?.forEach(sub => sub.unsubscribe()); // Remove old subscriptions
16
+ this.tabSubscriptions = this.tabs?.map(tab => tab.valueChanges.subscribe(() => {
17
+ this._changeDetectorRef.detectChanges(); // DetectChanges when tab-item attributes changes
18
+ }));
19
+ this._changeDetectorRef.detectChanges(); // Force update html render
20
+ }), switchMap(() => this.tabNavLinks?.changes.pipe(startWith(undefined)) || of(undefined))).subscribe(() => {
21
+ // Init tabs from bootstrap-italia
22
+ this.tabNavLinks?.forEach(tabNavLink => {
23
+ const triggerEl = tabNavLink.nativeElement, tabTrigger = Tab.getOrCreateInstance(triggerEl);
24
+ if (triggerEl.getAttribute('tab-listener') !== 'true') {
25
+ triggerEl.addEventListener('click', event => {
26
+ event.preventDefault();
27
+ tabTrigger.show();
28
+ this._changeDetectorRef.detectChanges();
29
+ });
30
+ triggerEl.setAttribute('tab-listener', 'true'); // Prevents multiple insertion of the listener
31
+ }
32
+ });
33
+ });
34
+ }
35
+ ngOnDestroy() {
36
+ this.tabSubscriptions?.forEach(sub => sub.unsubscribe());
37
+ }
38
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ItTabContainerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
39
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "16.2.7", type: ItTabContainerComponent, isStandalone: true, selector: "it-tab-container", inputs: { auto: ["auto", "auto", inputToBoolean], iconText: ["iconText", "iconText", inputToBoolean], dark: ["dark", "dark", inputToBoolean] }, queries: [{ propertyName: "tabs", predicate: ItTabItemComponent }], viewQueries: [{ propertyName: "tabNavLinks", predicate: ["tabNavLinks"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ul *ngIf=\"tabs\"\n class=\"nav nav-tabs\"\n [class.auto]=\"auto\"\n [class.nav-tabs-icon-text]=\"iconText\"\n [class.nav-dark]=\"dark\"\n role=\"tablist\">\n\n <li class=\"nav-item\" *ngFor=\"let tab of tabs\">\n <a #tabNavLinks [id]=\"tab.id+'-tab-link'\"\n role=\"tab\"\n class=\"nav-link\"\n [class.active]=\"tab.active\"\n [class.disabled]=\"tab.disabled\"\n [attr.href]=\"'#'+tab.id+'-tab'\"\n [attr.aria-controls]=\"tab.id+'-tab'\">\n <it-icon *ngIf=\"tab.icon\" [name]=\"tab.icon\" class=\"me-2\"></it-icon>\n {{tab.label}}\n </a>\n </li>\n</ul>\n\n<div *ngIf=\"tabs\" class=\"tab-content\">\n <div *ngFor=\"let tab of tabs\"\n [id]=\"tab.id+'-tab'\"\n class=\"tab-pane p-4 fade {{tab.class ?? ''}}\"\n [class.active]=\"tab.active\"\n [class.show]=\"tab.active\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"tab.id+'-tab-link'\">\n <ng-container *ngTemplateOutlet=\"tab.htmlContent\"></ng-container>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ItIconComponent, selector: "it-icon[name]", inputs: ["name", "size", "color", "padded", "svgClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40
+ }
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ItTabContainerComponent, decorators: [{
42
+ type: Component,
43
+ args: [{ standalone: true, selector: 'it-tab-container', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgForOf, NgIf, ItIconComponent, NgTemplateOutlet], template: "<ul *ngIf=\"tabs\"\n class=\"nav nav-tabs\"\n [class.auto]=\"auto\"\n [class.nav-tabs-icon-text]=\"iconText\"\n [class.nav-dark]=\"dark\"\n role=\"tablist\">\n\n <li class=\"nav-item\" *ngFor=\"let tab of tabs\">\n <a #tabNavLinks [id]=\"tab.id+'-tab-link'\"\n role=\"tab\"\n class=\"nav-link\"\n [class.active]=\"tab.active\"\n [class.disabled]=\"tab.disabled\"\n [attr.href]=\"'#'+tab.id+'-tab'\"\n [attr.aria-controls]=\"tab.id+'-tab'\">\n <it-icon *ngIf=\"tab.icon\" [name]=\"tab.icon\" class=\"me-2\"></it-icon>\n {{tab.label}}\n </a>\n </li>\n</ul>\n\n<div *ngIf=\"tabs\" class=\"tab-content\">\n <div *ngFor=\"let tab of tabs\"\n [id]=\"tab.id+'-tab'\"\n class=\"tab-pane p-4 fade {{tab.class ?? ''}}\"\n [class.active]=\"tab.active\"\n [class.show]=\"tab.active\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"tab.id+'-tab-link'\">\n <ng-container *ngTemplateOutlet=\"tab.htmlContent\"></ng-container>\n </div>\n</div>\n" }]
44
+ }], propDecorators: { auto: [{
45
+ type: Input,
46
+ args: [{ transform: inputToBoolean }]
47
+ }], iconText: [{
48
+ type: Input,
49
+ args: [{ transform: inputToBoolean }]
50
+ }], dark: [{
51
+ type: Input,
52
+ args: [{ transform: inputToBoolean }]
53
+ }], tabs: [{
54
+ type: ContentChildren,
55
+ args: [ItTabItemComponent]
56
+ }], tabNavLinks: [{
57
+ type: ViewChildren,
58
+ args: ['tabNavLinks']
59
+ }] } });
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi9jb21wb25lbnRzL2NvcmUvdGFiL3RhYi1jb250YWluZXIvdGFiLWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi9jb21wb25lbnRzL2NvcmUvdGFiL3RhYi1jb250YWluZXIvdGFiLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxlQUFlLEVBRWYsS0FBSyxFQUdMLFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBZ0IsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDL0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQVM1RCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsbUJBQW1CO0lBMkJyRCxlQUFlO1FBQ3RCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUUseUNBQXlDO1FBQ2hFLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFDcEIsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtZQUNyRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQzVFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLGlEQUFpRDtZQUM1RixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ0osSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsMkJBQTJCO1FBQ3RFLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQ3ZGLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNmLGtDQUFrQztZQUNsQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDckMsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLGFBQWEsRUFDeEMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFFbEQsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxLQUFLLE1BQU0sRUFBRTtvQkFDckQsU0FBUyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRTt3QkFDMUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUN2QixVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ2xCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDMUMsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsU0FBUyxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyw4Q0FBOEM7aUJBQy9GO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7OEdBNURVLHVCQUF1QjtrR0FBdkIsdUJBQXVCLHFGQU1kLGNBQWMsc0NBS2QsY0FBYywwQkFLZCxjQUFjLGtEQUtqQixrQkFBa0IsbUpDL0NyQyxpaENBZ0NBLDRDRFJZLE9BQU8sbUhBQUUsSUFBSSw2RkFBRSxlQUFlLG1IQUFFLGdCQUFnQjs7MkZBRS9DLHVCQUF1QjtrQkFQbkMsU0FBUztpQ0FDSSxJQUFJLFlBQ04sa0JBQWtCLG1CQUVYLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQzs4QkFRckIsSUFBSTtzQkFBekMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUU7Z0JBS0UsUUFBUTtzQkFBN0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUU7Z0JBS0UsSUFBSTtzQkFBekMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUU7Z0JBS0MsSUFBSTtzQkFBeEMsZUFBZTt1QkFBQyxrQkFBa0I7Z0JBRUUsV0FBVztzQkFBL0MsWUFBWTt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEl0VGFiSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3RhYi1pdGVtL3RhYi1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBvZiwgc3RhcnRXaXRoLCBTdWJzY3JpcHRpb24sIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUYWIgfSBmcm9tICdib290c3RyYXAtaXRhbGlhJztcbmltcG9ydCB7IEl0QWJzdHJhY3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9hYnN0cmFjdHMvYWJzdHJhY3QuY29tcG9uZW50JztcbmltcG9ydCB7IE5nRm9yT2YsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSXRJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpbnB1dFRvQm9vbGVhbiB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzL2NvZXJjaW9uJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnaXQtdGFiLWNvbnRhaW5lcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWItY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtOZ0Zvck9mLCBOZ0lmLCBJdEljb25Db21wb25lbnQsIE5nVGVtcGxhdGVPdXRsZXRdXG59KVxuZXhwb3J0IGNsYXNzIEl0VGFiQ29udGFpbmVyQ29tcG9uZW50IGV4dGVuZHMgSXRBYnN0cmFjdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgLyoqXG4gICAqIFRhYnMgYXV0b21hdGljYWxseSBvY2N1cHkgdGhlIGVudGlyZSBhdmFpbGFibGUgd2lkdGhcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogaW5wdXRUb0Jvb2xlYW4gfSkgYXV0bz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRvIG9idGFpbiB0aGUgY29ycmVjdCBtYXJnaW4gYmV0d2VlbiB0ZXh0IGFuZCBpY29uIGluIHRoZSBob3Jpem9udGFsbHkgZGV2ZWxvcGVkIHRhYlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBpbnB1dFRvQm9vbGVhbiB9KSBpY29uVGV4dD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERhcmsgc3R5bGVcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogaW5wdXRUb0Jvb2xlYW4gfSkgZGFyaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB0YWIgaXRlbXNcbiAgICovXG4gIEBDb250ZW50Q2hpbGRyZW4oSXRUYWJJdGVtQ29tcG9uZW50KSB0YWJzPzogUXVlcnlMaXN0PEl0VGFiSXRlbUNvbXBvbmVudD47XG5cbiAgQFZpZXdDaGlsZHJlbigndGFiTmF2TGlua3MnKSBwcml2YXRlIHRhYk5hdkxpbmtzPzogUXVlcnlMaXN0PEVsZW1lbnRSZWY8SFRNTEFuY2hvckVsZW1lbnQ+PjtcblxuICBwcml2YXRlIHRhYlN1YnNjcmlwdGlvbnM/OiBBcnJheTxTdWJzY3JpcHRpb24+O1xuXG4gIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcblxuICAgIHRoaXMudGFicz8uY2hhbmdlcy5waXBlKCAvLyBXaGVuIHRhYnMgY2hhbmdlcyAoZHluYW1pYyBhZGQvcmVtb3ZlKVxuICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICB0YXAoKCkgPT4ge1xuICAgICAgICB0aGlzLnRhYlN1YnNjcmlwdGlvbnM/LmZvckVhY2goc3ViID0+IHN1Yi51bnN1YnNjcmliZSgpKTsgLy8gUmVtb3ZlIG9sZCBzdWJzY3JpcHRpb25zXG4gICAgICAgIHRoaXMudGFiU3Vic2NyaXB0aW9ucyA9IHRoaXMudGFicz8ubWFwKHRhYiA9PiB0YWIudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpOyAvLyBEZXRlY3RDaGFuZ2VzIHdoZW4gdGFiLWl0ZW0gYXR0cmlidXRlcyBjaGFuZ2VzXG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpOyAvLyBGb3JjZSB1cGRhdGUgaHRtbCByZW5kZXJcbiAgICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMudGFiTmF2TGlua3M/LmNoYW5nZXMucGlwZShzdGFydFdpdGgodW5kZWZpbmVkKSkgfHwgb2YodW5kZWZpbmVkKSlcbiAgICApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAvLyBJbml0IHRhYnMgZnJvbSBib290c3RyYXAtaXRhbGlhXG4gICAgICB0aGlzLnRhYk5hdkxpbmtzPy5mb3JFYWNoKHRhYk5hdkxpbmsgPT4ge1xuICAgICAgICBjb25zdCB0cmlnZ2VyRWwgPSB0YWJOYXZMaW5rLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgdGFiVHJpZ2dlciA9IFRhYi5nZXRPckNyZWF0ZUluc3RhbmNlKHRyaWdnZXJFbCk7XG5cbiAgICAgICAgaWYgKHRyaWdnZXJFbC5nZXRBdHRyaWJ1dGUoJ3RhYi1saXN0ZW5lcicpICE9PSAndHJ1ZScpIHtcbiAgICAgICAgICB0cmlnZ2VyRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudCA9PiB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGFiVHJpZ2dlci5zaG93KCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdHJpZ2dlckVsLnNldEF0dHJpYnV0ZSgndGFiLWxpc3RlbmVyJywgJ3RydWUnKTsgLy8gUHJldmVudHMgbXVsdGlwbGUgaW5zZXJ0aW9uIG9mIHRoZSBsaXN0ZW5lclxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudGFiU3Vic2NyaXB0aW9ucz8uZm9yRWFjaChzdWIgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICB9XG59XG4iLCI8dWwgKm5nSWY9XCJ0YWJzXCJcbiAgICBjbGFzcz1cIm5hdiBuYXYtdGFic1wiXG4gICAgW2NsYXNzLmF1dG9dPVwiYXV0b1wiXG4gICAgW2NsYXNzLm5hdi10YWJzLWljb24tdGV4dF09XCJpY29uVGV4dFwiXG4gICAgW2NsYXNzLm5hdi1kYXJrXT1cImRhcmtcIlxuICAgIHJvbGU9XCJ0YWJsaXN0XCI+XG5cbiAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnNcIj5cbiAgICA8YSAjdGFiTmF2TGlua3MgW2lkXT1cInRhYi5pZCsnLXRhYi1saW5rJ1wiXG4gICAgICAgcm9sZT1cInRhYlwiXG4gICAgICAgY2xhc3M9XCJuYXYtbGlua1wiXG4gICAgICAgW2NsYXNzLmFjdGl2ZV09XCJ0YWIuYWN0aXZlXCJcbiAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwidGFiLmRpc2FibGVkXCJcbiAgICAgICBbYXR0ci5ocmVmXT1cIicjJyt0YWIuaWQrJy10YWInXCJcbiAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cInRhYi5pZCsnLXRhYidcIj5cbiAgICAgIDxpdC1pY29uICpuZ0lmPVwidGFiLmljb25cIiBbbmFtZV09XCJ0YWIuaWNvblwiIGNsYXNzPVwibWUtMlwiPjwvaXQtaWNvbj5cbiAgICAgIHt7dGFiLmxhYmVsfX1cbiAgICA8L2E+XG4gIDwvbGk+XG48L3VsPlxuXG48ZGl2ICpuZ0lmPVwidGFic1wiIGNsYXNzPVwidGFiLWNvbnRlbnRcIj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnNcIlxuICAgICAgIFtpZF09XCJ0YWIuaWQrJy10YWInXCJcbiAgICAgICBjbGFzcz1cInRhYi1wYW5lIHAtNCBmYWRlIHt7dGFiLmNsYXNzID8/ICcnfX1cIlxuICAgICAgIFtjbGFzcy5hY3RpdmVdPVwidGFiLmFjdGl2ZVwiXG4gICAgICAgW2NsYXNzLnNob3ddPVwidGFiLmFjdGl2ZVwiXG4gICAgICAgcm9sZT1cInRhYnBhbmVsXCJcbiAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwidGFiLmlkKyctdGFiLWxpbmsnXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYi5odG1sQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,39 @@
1
+ import { ChangeDetectionStrategy, Component, Input, TemplateRef, ViewChild } from '@angular/core';
2
+ import { ItAbstractComponent } from '../../../../abstracts/abstract.component';
3
+ import { inputToBoolean } from '../../../../utils/coercion';
4
+ import * as i0 from "@angular/core";
5
+ export class ItTabItemComponent extends ItAbstractComponent {
6
+ constructor() {
7
+ super(...arguments);
8
+ /**
9
+ * Custom class
10
+ */
11
+ this.class = '';
12
+ }
13
+ ngAfterViewInit() {
14
+ super.ngAfterViewInit();
15
+ this._renderer.removeAttribute(this._elementRef.nativeElement, 'class');
16
+ }
17
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ItTabItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
18
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "16.2.7", type: ItTabItemComponent, isStandalone: true, selector: "it-tab-item", inputs: { label: "label", icon: "icon", active: ["active", "active", inputToBoolean], disabled: ["disabled", "disabled", inputToBoolean], class: "class" }, viewQueries: [{ propertyName: "htmlContent", first: true, predicate: TemplateRef, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template>\n <ng-content></ng-content>\n</ng-template>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
19
+ }
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ItTabItemComponent, decorators: [{
21
+ type: Component,
22
+ args: [{ standalone: true, selector: 'it-tab-item', changeDetection: ChangeDetectionStrategy.OnPush, imports: [], template: "<ng-template>\n <ng-content></ng-content>\n</ng-template>\n" }]
23
+ }], propDecorators: { label: [{
24
+ type: Input
25
+ }], icon: [{
26
+ type: Input
27
+ }], active: [{
28
+ type: Input,
29
+ args: [{ transform: inputToBoolean }]
30
+ }], disabled: [{
31
+ type: Input,
32
+ args: [{ transform: inputToBoolean }]
33
+ }], class: [{
34
+ type: Input
35
+ }], htmlContent: [{
36
+ type: ViewChild,
37
+ args: [TemplateRef]
38
+ }] } });
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWFuZ3VsYXIta2l0L3NyYy9saWIvY29tcG9uZW50cy9jb3JlL3RhYi90YWItaXRlbS90YWItaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi9jb21wb25lbnRzL2NvcmUvdGFiL3RhYi1pdGVtL3RhYi1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRS9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFTNUQsTUFBTSxPQUFPLGtCQUFtQixTQUFRLG1CQUFtQjtJQVAzRDs7UUErQkU7O1dBRUc7UUFDTSxVQUFLLEdBQVcsRUFBRSxDQUFDO0tBVzdCO0lBSlUsZUFBZTtRQUN0QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDMUUsQ0FBQzs4R0FyQ1Usa0JBQWtCO2tHQUFsQixrQkFBa0Isb0hBZ0JULGNBQWMsc0NBTWQsY0FBYywwRkFVdkIsV0FBVyx1RUM1Q3hCLDhEQUdBOzsyRkRTYSxrQkFBa0I7a0JBUDlCLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLGFBQWEsbUJBRU4sdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxFQUFFOzhCQU9GLEtBQUs7c0JBQWIsS0FBSztnQkFLRyxJQUFJO3NCQUFaLEtBQUs7Z0JBTWdDLE1BQU07c0JBQTNDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFO2dCQU1FLFFBQVE7c0JBQTdDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFO2dCQUszQixLQUFLO3NCQUFiLEtBQUs7Z0JBS3lCLFdBQVc7c0JBQXpDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJdEFic3RyYWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vYWJzdHJhY3RzL2Fic3RyYWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJY29uTmFtZSB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvaWNvbic7XG5pbXBvcnQgeyBpbnB1dFRvQm9vbGVhbiB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzL2NvZXJjaW9uJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAnaXQtdGFiLWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFiLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW11cbn0pXG5leHBvcnQgY2xhc3MgSXRUYWJJdGVtQ29tcG9uZW50IGV4dGVuZHMgSXRBYnN0cmFjdENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuXG4gIC8qKlxuICAgKiBUaGUgdGFiIGxhYmVsXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgaWNvbiBuYW1lXG4gICAqL1xuICBASW5wdXQoKSBpY29uOiBJY29uTmFtZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogRGVmYXVsdCBhY3RpdmUgdGFiXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGlucHV0VG9Cb29sZWFuIH0pIGFjdGl2ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgZGlzYWJsZWQgdGFiXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGlucHV0VG9Cb29sZWFuIH0pIGRpc2FibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ3VzdG9tIGNsYXNzXG4gICAqL1xuICBASW5wdXQoKSBjbGFzczogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRhYlxuICAgKi9cbiAgQFZpZXdDaGlsZChUZW1wbGF0ZVJlZikgcHVibGljIGh0bWxDb250ZW50ITogVGVtcGxhdGVSZWY8YW55PjtcblxuICBvdmVycmlkZSBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NsYXNzJyk7XG4gIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -0,0 +1,23 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { ItTabContainerComponent } from './tab-container/tab-container.component';
3
+ import { ItTabItemComponent } from './tab-item/tab-item.component';
4
+ import * as i0 from "@angular/core";
5
+ const tabComponents = [
6
+ ItTabContainerComponent,
7
+ ItTabItemComponent
8
+ ];
9
+ export class ItTabModule {
10
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ItTabModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
11
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.7", ngImport: i0, type: ItTabModule, imports: [ItTabContainerComponent,
12
+ ItTabItemComponent], exports: [ItTabContainerComponent,
13
+ ItTabItemComponent] }); }
14
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ItTabModule }); }
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ItTabModule, decorators: [{
17
+ type: NgModule,
18
+ args: [{
19
+ imports: tabComponents,
20
+ exports: tabComponents
21
+ }]
22
+ }] });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY29yZS90YWIvdGFiLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQUVuRSxNQUFNLGFBQWEsR0FBRztJQUNwQix1QkFBdUI7SUFDdkIsa0JBQWtCO0NBQ25CLENBQUM7QUFNRixNQUFNLE9BQU8sV0FBVzs4R0FBWCxXQUFXOytHQUFYLFdBQVcsWUFSdEIsdUJBQXVCO1lBQ3ZCLGtCQUFrQixhQURsQix1QkFBdUI7WUFDdkIsa0JBQWtCOytHQU9QLFdBQVc7OzJGQUFYLFdBQVc7a0JBSnZCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLGFBQWE7b0JBQ3RCLE9BQU8sRUFBRSxhQUFhO2lCQUN2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJdFRhYkNvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4vdGFiLWNvbnRhaW5lci90YWItY29udGFpbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJdFRhYkl0ZW1Db21wb25lbnQgfSBmcm9tICcuL3RhYi1pdGVtL3RhYi1pdGVtLmNvbXBvbmVudCc7XG5cbmNvbnN0IHRhYkNvbXBvbmVudHMgPSBbXG4gIEl0VGFiQ29udGFpbmVyQ29tcG9uZW50LFxuICBJdFRhYkl0ZW1Db21wb25lbnRcbl07XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IHRhYkNvbXBvbmVudHMsXG4gIGV4cG9ydHM6IHRhYkNvbXBvbmVudHNcbn0pXG5leHBvcnQgY2xhc3MgSXRUYWJNb2R1bGUge1xufVxuIl19
@@ -0,0 +1,136 @@
1
+ import { booleanAttribute, ChangeDetectionStrategy, Component, HostBinding, HostListener, Inject, Input, Optional, ViewEncapsulation } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { merge } from 'rxjs';
4
+ import { ItIconComponent } from '../../../../utils/icon/icon.component';
5
+ import { IT_SORT_DEFAULT_OPTIONS } from "../../../../../interfaces/sortable-table";
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../sort.directive";
8
+ /**
9
+ * Applies sorting behavior (click to change sort) and styles to an element, including an
10
+ * arrow to display the current sort direction.
11
+ *
12
+ * Must be provided with an id and contained within a parent ItSort directive.
13
+ *
14
+ * If used on header cells in a CdkTable, it will automatically default its id from its containing
15
+ * column definition.
16
+ */
17
+ export class ItSortHeaderComponent {
18
+ constructor(_changeDetectorRef,
19
+ // `SortDirective` is not optionally injected, but just asserted manually w/ better error.
20
+ _sort, defaultOptions) {
21
+ this._changeDetectorRef = _changeDetectorRef;
22
+ this._sort = _sort;
23
+ /** Sets the position of the arrow that displays when sorted. */
24
+ this.arrowPosition = 'after';
25
+ /** whether the sort header is disabled. */
26
+ this.sortDisabled = false;
27
+ this.sortHeaderClass = 'it-sort-header';
28
+ if (defaultOptions?.arrowPosition) {
29
+ this.arrowPosition = defaultOptions?.arrowPosition;
30
+ }
31
+ this._handleStateChanges();
32
+ }
33
+ ngOnInit() {
34
+ // Initialize the direction of the arrow and set the view state to be immediately that state.
35
+ this.updateArrowDirection();
36
+ this._sort.register(this);
37
+ }
38
+ ngOnDestroy() {
39
+ this._sort.deregister(this);
40
+ this._rerenderSubscription?.unsubscribe();
41
+ }
42
+ _handleClick() {
43
+ if (!this.isDisabled) {
44
+ this._sort.sort(this);
45
+ }
46
+ }
47
+ /**
48
+ * Whether this MatSortHeader is currently sorted in either ascending or descending order.
49
+ */
50
+ get isSorted() {
51
+ return (this._sort.active == this.id &&
52
+ (this._sort.direction === 'asc' || this._sort.direction === 'desc'));
53
+ }
54
+ /**
55
+ * Returns the icon class by the arrow direction
56
+ */
57
+ get arrowIconClass() {
58
+ return `${this._arrowDirection == 'asc' ? 'arrow-up' : 'arrow-down'}`;
59
+ }
60
+ /**
61
+ * Updates the direction the arrow should be pointing. If it is not sorted, the arrow should be
62
+ * facing the start direction. Otherwise if it is sorted, the arrow should point in the currently
63
+ * active sorted direction. The reason this is updated through a function is because the direction
64
+ * should only be changed at specific times - when deactivated but the hint is displayed and when
65
+ * the sort is active and the direction changes. Otherwise the arrow's direction should linger
66
+ * in cases such as the sort becoming deactivated but we want to animate the arrow away while
67
+ * preserving its direction, even though the next sort direction is actually different and should
68
+ * only be changed once the arrow displays again (hint or activation).
69
+ */
70
+ updateArrowDirection() {
71
+ this._arrowDirection = this.isSorted ? this._sort.direction : this.start || this._sort.start;
72
+ }
73
+ get isDisabled() {
74
+ return this._sort.sortDisabled || this.sortDisabled;
75
+ }
76
+ /**
77
+ * Gets the aria-sort attribute that should be applied to this sort header. If this header
78
+ * is not sorted, returns null so that the attribute is removed from the host element. Aria spec
79
+ * says that the aria-sort property should only be present on one header at a time, so removing
80
+ * ensures this is true.
81
+ */
82
+ get ariaSortAttribute() {
83
+ if (!this.isSorted) {
84
+ return 'none';
85
+ }
86
+ return this._sort.direction == 'asc' ? 'ascending' : 'descending';
87
+ }
88
+ /** Handles changes in the sorting state. */
89
+ _handleStateChanges() {
90
+ this._rerenderSubscription = merge(this._sort.sortChange, this._sort._stateChanges).subscribe(() => {
91
+ if (this.isSorted) {
92
+ this.updateArrowDirection();
93
+ }
94
+ this._changeDetectorRef.markForCheck();
95
+ });
96
+ }
97
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ItSortHeaderComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ItSortDirective, optional: true }, { token: IT_SORT_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
98
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "16.2.7", type: ItSortHeaderComponent, isStandalone: true, selector: "[it-sort-header]", inputs: { id: ["it-sort-header", "id"], arrowPosition: "arrowPosition", start: "start", sortDisabled: ["sortDisabled", "sortDisabled", booleanAttribute], disableSortClear: ["disableSortClear", "disableSortClear", booleanAttribute] }, host: { listeners: { "click": "_handleClick()" }, properties: { "class": "this.sortHeaderClass", "class.it-sort-header-disabled": "this.isDisabled", "attr.aria-sort": "this.ariaSortAttribute" } }, exportAs: ["itSortHeader"], ngImport: i0, template: "<!--\n We set the `tabindex` on an element inside the table header, rather than the header itself,\n because of a bug in NVDA where having a `tabindex` on a `th` breaks keyboard navigation in the\n table (see https://github.com/nvaccess/nvda/issues/7718). This allows for the header to both\n be focusable, and have screen readers read out its `aria-sort` state. We prefer this approach\n over having a button with an `aria-label` inside the header, because the button's `aria-label`\n will be read out as the user is navigating the table's cell (see #13012).\n\n The approach is based off of: https://dequeuniversity.com/library/aria/tables/sf-sortable-grid\n-->\n<div class=\"it-sort-header-container it-focus-indicator\"\n [class.it-sort-header-sorted]=\"isSorted\"\n [class.it-sort-header-position-before]=\"arrowPosition === 'before'\"\n [attr.tabindex]=\"isDisabled ? null : 0\"\n [attr.role]=\"isDisabled ? null : 'button'\">\n\n <!--\n We have to keep it due to a large number of screenshot diff failures. It should be removed eventually.\n Note that the difference isn't visible with a shorter header, but once it breaks up into multiple lines, this element\n causes it to be center-aligned, whereas removing it will keep the text to the left.\n -->\n <div class=\"it-sort-header-content\">\n <ng-content></ng-content>\n </div>\n\n <it-icon class=\"it-sort-arrow\" size=\"sm\" [name]=\"arrowIconClass\" />\n</div>\n", styles: [".it-sort-header-container{display:flex;cursor:pointer;align-items:center;justify-content:space-between;letter-spacing:normal;outline:0}.it-sort-header-disabled .it-sort-header-container{cursor:default}.it-sort-header-disabled .it-sort-header-container .it-sort-arrow{opacity:0!important}.it-sort-header-container:before{margin:-5px}.it-sort-header-container.it-sort-header-position-before{flex-direction:row-reverse;justify-content:left;gap:.5rem}.it-sort-header-container .it-sort-arrow{opacity:0;transition:opacity .3s ease-out;-moz-transition:opacity .3s ease-out;-webkit-transition:opacity .3s ease-out;-o-transition:opacity .3s ease-out}.it-sort-header-container:hover .it-sort-arrow{opacity:.5}.it-sort-header-container.it-sort-header-sorted .it-sort-arrow{opacity:1!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ItIconComponent, selector: "it-icon[name]", inputs: ["name", "size", "color", "padded", "svgClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
99
+ }
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: ItSortHeaderComponent, decorators: [{
101
+ type: Component,
102
+ args: [{ selector: '[it-sort-header]', exportAs: 'itSortHeader', standalone: true, imports: [CommonModule, ItIconComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n We set the `tabindex` on an element inside the table header, rather than the header itself,\n because of a bug in NVDA where having a `tabindex` on a `th` breaks keyboard navigation in the\n table (see https://github.com/nvaccess/nvda/issues/7718). This allows for the header to both\n be focusable, and have screen readers read out its `aria-sort` state. We prefer this approach\n over having a button with an `aria-label` inside the header, because the button's `aria-label`\n will be read out as the user is navigating the table's cell (see #13012).\n\n The approach is based off of: https://dequeuniversity.com/library/aria/tables/sf-sortable-grid\n-->\n<div class=\"it-sort-header-container it-focus-indicator\"\n [class.it-sort-header-sorted]=\"isSorted\"\n [class.it-sort-header-position-before]=\"arrowPosition === 'before'\"\n [attr.tabindex]=\"isDisabled ? null : 0\"\n [attr.role]=\"isDisabled ? null : 'button'\">\n\n <!--\n We have to keep it due to a large number of screenshot diff failures. It should be removed eventually.\n Note that the difference isn't visible with a shorter header, but once it breaks up into multiple lines, this element\n causes it to be center-aligned, whereas removing it will keep the text to the left.\n -->\n <div class=\"it-sort-header-content\">\n <ng-content></ng-content>\n </div>\n\n <it-icon class=\"it-sort-arrow\" size=\"sm\" [name]=\"arrowIconClass\" />\n</div>\n", styles: [".it-sort-header-container{display:flex;cursor:pointer;align-items:center;justify-content:space-between;letter-spacing:normal;outline:0}.it-sort-header-disabled .it-sort-header-container{cursor:default}.it-sort-header-disabled .it-sort-header-container .it-sort-arrow{opacity:0!important}.it-sort-header-container:before{margin:-5px}.it-sort-header-container.it-sort-header-position-before{flex-direction:row-reverse;justify-content:left;gap:.5rem}.it-sort-header-container .it-sort-arrow{opacity:0;transition:opacity .3s ease-out;-moz-transition:opacity .3s ease-out;-webkit-transition:opacity .3s ease-out;-o-transition:opacity .3s ease-out}.it-sort-header-container:hover .it-sort-arrow{opacity:.5}.it-sort-header-container.it-sort-header-sorted .it-sort-arrow{opacity:1!important}\n"] }]
103
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.ItSortDirective, decorators: [{
104
+ type: Optional
105
+ }] }, { type: undefined, decorators: [{
106
+ type: Optional
107
+ }, {
108
+ type: Inject,
109
+ args: [IT_SORT_DEFAULT_OPTIONS]
110
+ }] }]; }, propDecorators: { id: [{
111
+ type: Input,
112
+ args: ['it-sort-header']
113
+ }], arrowPosition: [{
114
+ type: Input
115
+ }], start: [{
116
+ type: Input
117
+ }], sortDisabled: [{
118
+ type: Input,
119
+ args: [{ transform: booleanAttribute }]
120
+ }], disableSortClear: [{
121
+ type: Input,
122
+ args: [{ transform: booleanAttribute }]
123
+ }], sortHeaderClass: [{
124
+ type: HostBinding,
125
+ args: ['class']
126
+ }], _handleClick: [{
127
+ type: HostListener,
128
+ args: ['click']
129
+ }], isDisabled: [{
130
+ type: HostBinding,
131
+ args: ['class.it-sort-header-disabled']
132
+ }], ariaSortAttribute: [{
133
+ type: HostBinding,
134
+ args: ['attr.aria-sort']
135
+ }] } });
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWFuZ3VsYXIta2l0L3NyYy9saWIvY29tcG9uZW50cy9jb3JlL3RhYmxlL3NvcnQvc29ydC1oZWFkZXIvc29ydC1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWFuZ3VsYXIta2l0L3NyYy9saWIvY29tcG9uZW50cy9jb3JlL3RhYmxlL3NvcnQvc29ydC1oZWFkZXIvc29ydC1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUNoQix1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsS0FBSyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUV0RSxPQUFPLEVBQ0wsdUJBQXVCLEVBS3hCLE1BQU0sMENBQTBDLENBQUM7OztBQUdsRDs7Ozs7Ozs7R0FRRztBQVlILE1BQU0sT0FBTyxxQkFBcUI7SUE2QmhDLFlBQ21CLGtCQUFxQztJQUN0RCwwRkFBMEY7SUFDOUQsS0FBc0IsRUFDTCxjQUFxQztRQUhqRSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBRTFCLFVBQUssR0FBTCxLQUFLLENBQWlCO1FBekJwRCxnRUFBZ0U7UUFDdkQsa0JBQWEsR0FBNEIsT0FBTyxDQUFDO1FBSzFELDJDQUEyQztRQUUzQyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQU9kLG9CQUFlLEdBQUcsZ0JBQWdCLENBQUM7UUFhakQsSUFBSSxjQUFjLEVBQUUsYUFBYSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsY0FBYyxFQUFFLGFBQWEsQ0FBQztTQUNwRDtRQUVELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxRQUFRO1FBQ04sNkZBQTZGO1FBQzdGLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFHRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdkI7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFjLFFBQVE7UUFDcEIsT0FBTyxDQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxFQUFFO1lBQzVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxLQUFLLE1BQU0sQ0FBQyxDQUNwRSxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBYyxjQUFjO1FBQzFCLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4RSxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ssb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDL0YsQ0FBQztJQUVELElBQ1csVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFDVyxpQkFBaUI7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDbEIsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUNwRSxDQUFDO0lBR0QsNENBQTRDO0lBQ3BDLG1CQUFtQjtRQUN6QixJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQ3pCLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNmLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDakIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7YUFDN0I7WUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQTNIVSxxQkFBcUIsa0dBaUNWLHVCQUF1QjtrR0FqQ2xDLHFCQUFxQiwyTEFjYixnQkFBZ0IsOERBSWhCLGdCQUFnQiw4UENsRXJDLDA3Q0EyQkEsMDBCRGVZLFlBQVksK0JBQUUsZUFBZTs7MkZBTTVCLHFCQUFxQjtrQkFYakMsU0FBUzsrQkFFRSxrQkFBa0IsWUFDbEIsY0FBYyxjQUNaLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsaUJBR3pCLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU07OzBCQWtDNUMsUUFBUTs7MEJBQ1IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx1QkFBdUI7NENBNUJwQixFQUFFO3NCQUExQixLQUFLO3VCQUFDLGdCQUFnQjtnQkFHZCxhQUFhO3NCQUFyQixLQUFLO2dCQUdHLEtBQUs7c0JBQWIsS0FBSztnQkFJTixZQUFZO3NCQURYLEtBQUs7dUJBQUMsRUFBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUM7Z0JBS3BDLGdCQUFnQjtzQkFEZixLQUFLO3VCQUFDLEVBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFDO2dCQUlwQixlQUFlO3NCQUQ5QixXQUFXO3VCQUFDLE9BQU87Z0JBaUNwQixZQUFZO3NCQURYLFlBQVk7dUJBQUMsT0FBTztnQkF1Q1YsVUFBVTtzQkFEcEIsV0FBVzt1QkFBQywrQkFBK0I7Z0JBWWpDLGlCQUFpQjtzQkFEM0IsV0FBVzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBib29sZWFuQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtJdFNvcnREaXJlY3RpdmUsfSBmcm9tICcuLi9zb3J0LmRpcmVjdGl2ZSc7XG5pbXBvcnQge21lcmdlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtJdEljb25Db21wb25lbnR9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHtJY29uTmFtZX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvaWNvblwiO1xuaW1wb3J0IHtcbiAgSVRfU09SVF9ERUZBVUxUX09QVElPTlMsXG4gIEl0U29ydGFibGUsXG4gIEl0U29ydERlZmF1bHRPcHRpb25zLFxuICBTb3J0RGlyZWN0aW9uLFxuICBTb3J0SGVhZGVyQXJyb3dQb3NpdGlvblxufSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9zb3J0YWJsZS10YWJsZVwiO1xuXG5cbi8qKlxuICogQXBwbGllcyBzb3J0aW5nIGJlaGF2aW9yIChjbGljayB0byBjaGFuZ2Ugc29ydCkgYW5kIHN0eWxlcyB0byBhbiBlbGVtZW50LCBpbmNsdWRpbmcgYW5cbiAqIGFycm93IHRvIGRpc3BsYXkgdGhlIGN1cnJlbnQgc29ydCBkaXJlY3Rpb24uXG4gKlxuICogTXVzdCBiZSBwcm92aWRlZCB3aXRoIGFuIGlkIGFuZCBjb250YWluZWQgd2l0aGluIGEgcGFyZW50IEl0U29ydCBkaXJlY3RpdmUuXG4gKlxuICogSWYgdXNlZCBvbiBoZWFkZXIgY2VsbHMgaW4gYSBDZGtUYWJsZSwgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGRlZmF1bHQgaXRzIGlkIGZyb20gaXRzIGNvbnRhaW5pbmdcbiAqIGNvbHVtbiBkZWZpbml0aW9uLlxuICovXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdbaXQtc29ydC1oZWFkZXJdJyxcbiAgZXhwb3J0QXM6ICdpdFNvcnRIZWFkZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJdEljb25Db21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vc29ydC1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zb3J0LWhlYWRlci5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgSXRTb3J0SGVhZGVyQ29tcG9uZW50IGltcGxlbWVudHMgSXRTb3J0YWJsZSwgT25EZXN0cm95LCBPbkluaXQge1xuICAvKipcbiAgICogSUQgb2YgdGhpcyBzb3J0IGhlYWRlci4gSWYgdXNlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBDZGtDb2x1bW5EZWYsIHRoaXMgd2lsbCBkZWZhdWx0IHRvXG4gICAqIHRoZSBjb2x1bW4ncyBuYW1lLlxuICAgKi9cbiAgQElucHV0KCdpdC1zb3J0LWhlYWRlcicpIGlkITogc3RyaW5nO1xuXG4gIC8qKiBTZXRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgYXJyb3cgdGhhdCBkaXNwbGF5cyB3aGVuIHNvcnRlZC4gKi9cbiAgQElucHV0KCkgYXJyb3dQb3NpdGlvbjogU29ydEhlYWRlckFycm93UG9zaXRpb24gPSAnYWZ0ZXInO1xuXG4gIC8qKiBPdmVycmlkZXMgdGhlIHNvcnQgc3RhcnQgdmFsdWUgb2YgdGhlIGNvbnRhaW5pbmcgTWF0U29ydCBmb3IgdGhpcyBTb3J0SGVhZGVyQ29tcG9uZW50LiAqL1xuICBASW5wdXQoKSBzdGFydD86IFNvcnREaXJlY3Rpb247XG5cbiAgLyoqIHdoZXRoZXIgdGhlIHNvcnQgaGVhZGVyIGlzIGRpc2FibGVkLiAqL1xuICBASW5wdXQoe3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pXG4gIHNvcnREaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBPdmVycmlkZXMgdGhlIGRpc2FibGUgY2xlYXIgdmFsdWUgb2YgdGhlIGNvbnRhaW5pbmcgU29ydERpcmVjdGl2ZSBmb3IgdGhpcyBNYXRTb3J0YWJsZS4gKi9cbiAgQElucHV0KHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KVxuICBkaXNhYmxlU29ydENsZWFyPzogYm9vbGVhbjtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgcHVibGljIHJlYWRvbmx5IHNvcnRIZWFkZXJDbGFzcyA9ICdpdC1zb3J0LWhlYWRlcic7XG5cbiAgcHJpdmF0ZSBfcmVyZW5kZXJTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgLyoqIFRoZSBkaXJlY3Rpb24gdGhlIGFycm93IHNob3VsZCBiZSBmYWNpbmcgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHN0YXRlLiAqL1xuICBwcml2YXRlIF9hcnJvd0RpcmVjdGlvbj86IFNvcnREaXJlY3Rpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIC8vIGBTb3J0RGlyZWN0aXZlYCBpcyBub3Qgb3B0aW9uYWxseSBpbmplY3RlZCwgYnV0IGp1c3QgYXNzZXJ0ZWQgbWFudWFsbHkgdy8gYmV0dGVyIGVycm9yLlxuICAgIEBPcHRpb25hbCgpIHB1YmxpYyByZWFkb25seSBfc29ydDogSXRTb3J0RGlyZWN0aXZlLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSVRfU09SVF9ERUZBVUxUX09QVElPTlMpIGRlZmF1bHRPcHRpb25zPzogSXRTb3J0RGVmYXVsdE9wdGlvbnMsXG4gICkge1xuICAgIGlmIChkZWZhdWx0T3B0aW9ucz8uYXJyb3dQb3NpdGlvbikge1xuICAgICAgdGhpcy5hcnJvd1Bvc2l0aW9uID0gZGVmYXVsdE9wdGlvbnM/LmFycm93UG9zaXRpb247XG4gICAgfVxuXG4gICAgdGhpcy5faGFuZGxlU3RhdGVDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBJbml0aWFsaXplIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGFycm93IGFuZCBzZXQgdGhlIHZpZXcgc3RhdGUgdG8gYmUgaW1tZWRpYXRlbHkgdGhhdCBzdGF0ZS5cbiAgICB0aGlzLnVwZGF0ZUFycm93RGlyZWN0aW9uKCk7XG4gICAgdGhpcy5fc29ydC5yZWdpc3Rlcih0aGlzKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3NvcnQuZGVyZWdpc3Rlcih0aGlzKTtcbiAgICB0aGlzLl9yZXJlbmRlclN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgX2hhbmRsZUNsaWNrKCkge1xuICAgIGlmICghdGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLl9zb3J0LnNvcnQodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBNYXRTb3J0SGVhZGVyIGlzIGN1cnJlbnRseSBzb3J0ZWQgaW4gZWl0aGVyIGFzY2VuZGluZyBvciBkZXNjZW5kaW5nIG9yZGVyLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBpc1NvcnRlZCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5fc29ydC5hY3RpdmUgPT0gdGhpcy5pZCAmJlxuICAgICAgKHRoaXMuX3NvcnQuZGlyZWN0aW9uID09PSAnYXNjJyB8fCB0aGlzLl9zb3J0LmRpcmVjdGlvbiA9PT0gJ2Rlc2MnKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaWNvbiBjbGFzcyBieSB0aGUgYXJyb3cgZGlyZWN0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGFycm93SWNvbkNsYXNzKCk6IEljb25OYW1lIHtcbiAgICByZXR1cm4gYCR7dGhpcy5fYXJyb3dEaXJlY3Rpb24gPT0gJ2FzYycgPyAnYXJyb3ctdXAnIDogJ2Fycm93LWRvd24nfWA7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgZGlyZWN0aW9uIHRoZSBhcnJvdyBzaG91bGQgYmUgcG9pbnRpbmcuIElmIGl0IGlzIG5vdCBzb3J0ZWQsIHRoZSBhcnJvdyBzaG91bGQgYmVcbiAgICogZmFjaW5nIHRoZSBzdGFydCBkaXJlY3Rpb24uIE90aGVyd2lzZSBpZiBpdCBpcyBzb3J0ZWQsIHRoZSBhcnJvdyBzaG91bGQgcG9pbnQgaW4gdGhlIGN1cnJlbnRseVxuICAgKiBhY3RpdmUgc29ydGVkIGRpcmVjdGlvbi4gVGhlIHJlYXNvbiB0aGlzIGlzIHVwZGF0ZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIGlzIGJlY2F1c2UgdGhlIGRpcmVjdGlvblxuICAgKiBzaG91bGQgb25seSBiZSBjaGFuZ2VkIGF0IHNwZWNpZmljIHRpbWVzIC0gd2hlbiBkZWFjdGl2YXRlZCBidXQgdGhlIGhpbnQgaXMgZGlzcGxheWVkIGFuZCB3aGVuXG4gICAqIHRoZSBzb3J0IGlzIGFjdGl2ZSBhbmQgdGhlIGRpcmVjdGlvbiBjaGFuZ2VzLiBPdGhlcndpc2UgdGhlIGFycm93J3MgZGlyZWN0aW9uIHNob3VsZCBsaW5nZXJcbiAgICogaW4gY2FzZXMgc3VjaCBhcyB0aGUgc29ydCBiZWNvbWluZyBkZWFjdGl2YXRlZCBidXQgd2Ugd2FudCB0byBhbmltYXRlIHRoZSBhcnJvdyBhd2F5IHdoaWxlXG4gICAqIHByZXNlcnZpbmcgaXRzIGRpcmVjdGlvbiwgZXZlbiB0aG91Z2ggdGhlIG5leHQgc29ydCBkaXJlY3Rpb24gaXMgYWN0dWFsbHkgZGlmZmVyZW50IGFuZCBzaG91bGRcbiAgICogb25seSBiZSBjaGFuZ2VkIG9uY2UgdGhlIGFycm93IGRpc3BsYXlzIGFnYWluIChoaW50IG9yIGFjdGl2YXRpb24pLlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVBcnJvd0RpcmVjdGlvbigpIHtcbiAgICB0aGlzLl9hcnJvd0RpcmVjdGlvbiA9IHRoaXMuaXNTb3J0ZWQgPyB0aGlzLl9zb3J0LmRpcmVjdGlvbiA6IHRoaXMuc3RhcnQgfHwgdGhpcy5fc29ydC5zdGFydDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaXQtc29ydC1oZWFkZXItZGlzYWJsZWQnKVxuICBwdWJsaWMgZ2V0IGlzRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnQuc29ydERpc2FibGVkIHx8IHRoaXMuc29ydERpc2FibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGFyaWEtc29ydCBhdHRyaWJ1dGUgdGhhdCBzaG91bGQgYmUgYXBwbGllZCB0byB0aGlzIHNvcnQgaGVhZGVyLiBJZiB0aGlzIGhlYWRlclxuICAgKiBpcyBub3Qgc29ydGVkLCByZXR1cm5zIG51bGwgc28gdGhhdCB0aGUgYXR0cmlidXRlIGlzIHJlbW92ZWQgZnJvbSB0aGUgaG9zdCBlbGVtZW50LiBBcmlhIHNwZWNcbiAgICogc2F5cyB0aGF0IHRoZSBhcmlhLXNvcnQgcHJvcGVydHkgc2hvdWxkIG9ubHkgYmUgcHJlc2VudCBvbiBvbmUgaGVhZGVyIGF0IGEgdGltZSwgc28gcmVtb3ZpbmdcbiAgICogZW5zdXJlcyB0aGlzIGlzIHRydWUuXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1zb3J0JylcbiAgcHVibGljIGdldCBhcmlhU29ydEF0dHJpYnV0ZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNTb3J0ZWQpIHtcbiAgICAgIHJldHVybiAnbm9uZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3NvcnQuZGlyZWN0aW9uID09ICdhc2MnID8gJ2FzY2VuZGluZycgOiAnZGVzY2VuZGluZyc7XG4gIH1cblxuXG4gIC8qKiBIYW5kbGVzIGNoYW5nZXMgaW4gdGhlIHNvcnRpbmcgc3RhdGUuICovXG4gIHByaXZhdGUgX2hhbmRsZVN0YXRlQ2hhbmdlcygpIHtcbiAgICB0aGlzLl9yZXJlbmRlclN1YnNjcmlwdGlvbiA9IG1lcmdlKFxuICAgICAgdGhpcy5fc29ydC5zb3J0Q2hhbmdlLFxuICAgICAgdGhpcy5fc29ydC5fc3RhdGVDaGFuZ2VzLFxuICAgICkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzU29ydGVkKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQXJyb3dEaXJlY3Rpb24oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbn1cbiIsIjwhLS1cbiAgV2Ugc2V0IHRoZSBgdGFiaW5kZXhgIG9uIGFuIGVsZW1lbnQgaW5zaWRlIHRoZSB0YWJsZSBoZWFkZXIsIHJhdGhlciB0aGFuIHRoZSBoZWFkZXIgaXRzZWxmLFxuICBiZWNhdXNlIG9mIGEgYnVnIGluIE5WREEgd2hlcmUgaGF2aW5nIGEgYHRhYmluZGV4YCBvbiBhIGB0aGAgYnJlYWtzIGtleWJvYXJkIG5hdmlnYXRpb24gaW4gdGhlXG4gIHRhYmxlIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL252YWNjZXNzL252ZGEvaXNzdWVzLzc3MTgpLiBUaGlzIGFsbG93cyBmb3IgdGhlIGhlYWRlciB0byBib3RoXG4gIGJlIGZvY3VzYWJsZSwgYW5kIGhhdmUgc2NyZWVuIHJlYWRlcnMgcmVhZCBvdXQgaXRzIGBhcmlhLXNvcnRgIHN0YXRlLiBXZSBwcmVmZXIgdGhpcyBhcHByb2FjaFxuICBvdmVyIGhhdmluZyBhIGJ1dHRvbiB3aXRoIGFuIGBhcmlhLWxhYmVsYCBpbnNpZGUgdGhlIGhlYWRlciwgYmVjYXVzZSB0aGUgYnV0dG9uJ3MgYGFyaWEtbGFiZWxgXG4gIHdpbGwgYmUgcmVhZCBvdXQgYXMgdGhlIHVzZXIgaXMgbmF2aWdhdGluZyB0aGUgdGFibGUncyBjZWxsIChzZWUgIzEzMDEyKS5cblxuICBUaGUgYXBwcm9hY2ggaXMgYmFzZWQgb2ZmIG9mOiBodHRwczovL2RlcXVldW5pdmVyc2l0eS5jb20vbGlicmFyeS9hcmlhL3RhYmxlcy9zZi1zb3J0YWJsZS1ncmlkXG4tLT5cbjxkaXYgY2xhc3M9XCJpdC1zb3J0LWhlYWRlci1jb250YWluZXIgaXQtZm9jdXMtaW5kaWNhdG9yXCJcbiAgICAgW2NsYXNzLml0LXNvcnQtaGVhZGVyLXNvcnRlZF09XCJpc1NvcnRlZFwiXG4gICAgIFtjbGFzcy5pdC1zb3J0LWhlYWRlci1wb3NpdGlvbi1iZWZvcmVdPVwiYXJyb3dQb3NpdGlvbiA9PT0gJ2JlZm9yZSdcIlxuICAgICBbYXR0ci50YWJpbmRleF09XCJpc0Rpc2FibGVkID8gbnVsbCA6IDBcIlxuICAgICBbYXR0ci5yb2xlXT1cImlzRGlzYWJsZWQgPyBudWxsIDogJ2J1dHRvbidcIj5cblxuICA8IS0tXG4gICAgV2UgaGF2ZSB0byBrZWVwIGl0IGR1ZSB0byBhIGxhcmdlIG51bWJlciBvZiBzY3JlZW5zaG90IGRpZmYgZmFpbHVyZXMuIEl0IHNob3VsZCBiZSByZW1vdmVkIGV2ZW50dWFsbHkuXG4gICAgTm90ZSB0aGF0IHRoZSBkaWZmZXJlbmNlIGlzbid0IHZpc2libGUgd2l0aCBhIHNob3J0ZXIgaGVhZGVyLCBidXQgb25jZSBpdCBicmVha3MgdXAgaW50byBtdWx0aXBsZSBsaW5lcywgdGhpcyBlbGVtZW50XG4gICAgY2F1c2VzIGl0IHRvIGJlIGNlbnRlci1hbGlnbmVkLCB3aGVyZWFzIHJlbW92aW5nIGl0IHdpbGwga2VlcCB0aGUgdGV4dCB0byB0aGUgbGVmdC5cbiAgLS0+XG4gIDxkaXYgY2xhc3M9XCJpdC1zb3J0LWhlYWRlci1jb250ZW50XCI+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cblxuICA8aXQtaWNvbiBjbGFzcz1cIml0LXNvcnQtYXJyb3dcIiBzaXplPVwic21cIiBbbmFtZV09XCJhcnJvd0ljb25DbGFzc1wiIC8+XG48L2Rpdj5cbiJdfQ==