@koobiq/components 18.21.0 → 18.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (311) hide show
  1. package/alert/_alert-theme.scss +4 -0
  2. package/alert/alert-tokens.scss +1 -1
  3. package/alert/alert.component.d.ts +8 -2
  4. package/badge/badge.component.d.ts +0 -1
  5. package/breadcrumbs/breadcrumbs.d.ts +19 -22
  6. package/breadcrumbs/breadcrumbs.scss +13 -4
  7. package/breadcrumbs/breadcrumbs.types.d.ts +22 -0
  8. package/breadcrumbs/public-api.d.ts +1 -0
  9. package/button/button.component.d.ts +11 -16
  10. package/checkbox/checkbox.d.ts +18 -23
  11. package/core/animation/animation.d.ts +5 -2
  12. package/core/common-behaviors/checkbox.d.ts +5 -0
  13. package/core/common-behaviors/color.d.ts +11 -0
  14. package/core/common-behaviors/index.d.ts +2 -1
  15. package/core/option/action.d.ts +5 -7
  16. package/core/option/optgroup.d.ts +6 -7
  17. package/core/pop-up/pop-up-trigger.d.ts +11 -3
  18. package/core/pop-up/pop-up.d.ts +8 -2
  19. package/core/selection/pseudo-checkbox/pseudo-checkbox.d.ts +3 -12
  20. package/core/utils/utils.d.ts +5 -0
  21. package/dropdown/dropdown-item.component.d.ts +6 -8
  22. package/empty-state/_empty-state-theme.scss +15 -5
  23. package/empty-state/empty-state-tokens.scss +12 -2
  24. package/empty-state/empty-state.component.d.ts +7 -2
  25. package/empty-state/empty-state.scss +29 -0
  26. package/esm2022/accordion/accordion-trigger.component.mjs +1 -1
  27. package/esm2022/actions-panel/actions-panel-container.mjs +2 -2
  28. package/esm2022/actions-panel/actions-panel.mjs +1 -1
  29. package/esm2022/alert/alert.component.mjs +11 -5
  30. package/esm2022/autocomplete/autocomplete-trigger.directive.mjs +1 -1
  31. package/esm2022/badge/badge.component.mjs +2 -5
  32. package/esm2022/breadcrumbs/breadcrumbs.mjs +55 -22
  33. package/esm2022/breadcrumbs/breadcrumbs.types.mjs +2 -0
  34. package/esm2022/breadcrumbs/public-api.mjs +2 -1
  35. package/esm2022/button/button.component.mjs +23 -27
  36. package/esm2022/button-toggle/button-toggle.component.mjs +4 -3
  37. package/esm2022/checkbox/checkbox.mjs +27 -28
  38. package/esm2022/code-block/code-block-highlight.mjs +1 -1
  39. package/esm2022/code-block/code-block.mjs +2 -2
  40. package/esm2022/core/animation/animation.mjs +4 -1
  41. package/esm2022/core/common-behaviors/checkbox.mjs +2 -0
  42. package/esm2022/core/common-behaviors/color.mjs +35 -1
  43. package/esm2022/core/common-behaviors/disabled.mjs +2 -1
  44. package/esm2022/core/common-behaviors/error-state.mjs +2 -1
  45. package/esm2022/core/common-behaviors/index.mjs +3 -2
  46. package/esm2022/core/common-behaviors/tabindex.mjs +2 -1
  47. package/esm2022/core/formatters/number/formatter.mjs +1 -1
  48. package/esm2022/core/forms/validators.mjs +1 -1
  49. package/esm2022/core/line/line.mjs +1 -1
  50. package/esm2022/core/option/action.mjs +17 -12
  51. package/esm2022/core/option/optgroup.mjs +18 -12
  52. package/esm2022/core/option/option.mjs +1 -1
  53. package/esm2022/core/overlay/overlay-position-map.mjs +1 -1
  54. package/esm2022/core/pop-up/pop-up-trigger.mjs +27 -12
  55. package/esm2022/core/pop-up/pop-up.mjs +18 -5
  56. package/esm2022/core/select/common.mjs +1 -1
  57. package/esm2022/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +10 -19
  58. package/esm2022/core/services/measure-scrollbar.service.mjs +1 -1
  59. package/esm2022/core/utils/utils.mjs +11 -1
  60. package/esm2022/core/version.mjs +2 -2
  61. package/esm2022/datepicker/calendar-header.component.mjs +2 -2
  62. package/esm2022/datepicker/datepicker-input.directive.mjs +1 -1
  63. package/esm2022/datepicker/datepicker-toggle.component.mjs +1 -1
  64. package/esm2022/datepicker/datepicker.component.mjs +1 -1
  65. package/esm2022/datepicker/month-view.component.mjs +1 -1
  66. package/esm2022/dropdown/dropdown-item.component.mjs +19 -14
  67. package/esm2022/dropdown/dropdown-trigger.directive.mjs +1 -1
  68. package/esm2022/dropdown/dropdown.component.mjs +1 -1
  69. package/esm2022/ellipsis-center/ellipsis-center.directive.mjs +1 -1
  70. package/esm2022/empty-state/empty-state.component.mjs +13 -8
  71. package/esm2022/file-upload/file-drop.mjs +1 -1
  72. package/esm2022/file-upload/file-upload.mjs +1 -1
  73. package/esm2022/file-upload/multiple-file-upload.component.mjs +2 -2
  74. package/esm2022/file-upload/single-file-upload.component.mjs +2 -2
  75. package/esm2022/filter-bar/filter-bar-button.mjs +2 -1
  76. package/esm2022/filter-bar/filter-bar.mjs +14 -1
  77. package/esm2022/filter-bar/filter-bar.module.mjs +5 -3
  78. package/esm2022/filter-bar/filter-bar.types.mjs +27 -2
  79. package/esm2022/filter-bar/filter-refresher.mjs +2 -2
  80. package/esm2022/filter-bar/filter-reset.mjs +16 -6
  81. package/esm2022/filter-bar/filter-search.mjs +19 -6
  82. package/esm2022/filter-bar/filters.mjs +22 -6
  83. package/esm2022/filter-bar/pipe-add.mjs +11 -2
  84. package/esm2022/filter-bar/pipe.directive.mjs +7 -25
  85. package/esm2022/filter-bar/pipes/base-pipe.mjs +23 -3
  86. package/esm2022/filter-bar/pipes/pipe-button.mjs +12 -6
  87. package/esm2022/filter-bar/pipes/pipe-date.mjs +26 -8
  88. package/esm2022/filter-bar/pipes/pipe-datetime.mjs +27 -8
  89. package/esm2022/filter-bar/pipes/pipe-multi-select.mjs +7 -2
  90. package/esm2022/filter-bar/pipes/pipe-select.mjs +7 -2
  91. package/esm2022/filter-bar/pipes/pipe-state.mjs +2 -1
  92. package/esm2022/filter-bar/pipes/pipe-text.mjs +7 -3
  93. package/esm2022/filter-bar/pipes/pipe-title.mjs +2 -1
  94. package/esm2022/form-field/cleaner.mjs +1 -1
  95. package/esm2022/form-field/form-field.mjs +13 -22
  96. package/esm2022/form-field/hint.mjs +10 -18
  97. package/esm2022/form-field/password-hint.mjs +7 -7
  98. package/esm2022/form-field/password-toggle.mjs +1 -1
  99. package/esm2022/form-field/stepper.mjs +1 -1
  100. package/esm2022/form-field/validate.directive.mjs +1 -1
  101. package/esm2022/icon/icon-button.component.mjs +13 -21
  102. package/esm2022/icon/icon-item.component.mjs +8 -15
  103. package/esm2022/icon/icon.component.mjs +15 -27
  104. package/esm2022/input/input-number.mjs +1 -1
  105. package/esm2022/input/input-password.mjs +20 -5
  106. package/esm2022/input/input.mjs +21 -22
  107. package/esm2022/link/link.component.mjs +46 -14
  108. package/esm2022/list/list-selection.component.mjs +19 -15
  109. package/esm2022/loader-overlay/loader-overlay.component.mjs +14 -9
  110. package/esm2022/markdown/markdown.component.mjs +2 -2
  111. package/esm2022/modal/modal.component.mjs +2 -2
  112. package/esm2022/modal/modal.directive.mjs +1 -1
  113. package/esm2022/modal/modal.service.mjs +1 -1
  114. package/esm2022/navbar/navbar-item.component.mjs +2 -2
  115. package/esm2022/navbar/navbar.component.mjs +9 -12
  116. package/esm2022/navbar/vertical-navbar.component.mjs +9 -13
  117. package/esm2022/overflow-items/overflow-items.mjs +1 -1
  118. package/esm2022/popover/popover-confirm.component.mjs +2 -2
  119. package/esm2022/popover/popover.component.mjs +5 -4
  120. package/esm2022/progress-bar/progress-bar.component.mjs +14 -21
  121. package/esm2022/progress-spinner/progress-spinner.component.mjs +17 -24
  122. package/esm2022/radio/radio.component.mjs +26 -36
  123. package/esm2022/scrollbar/scrollbar.component.mjs +1 -1
  124. package/esm2022/scrollbar/scrollbar.directive.mjs +1 -1
  125. package/esm2022/select/select.component.mjs +56 -37
  126. package/esm2022/sidepanel/sidepanel-directives.mjs +2 -2
  127. package/esm2022/sidepanel/sidepanel.service.mjs +1 -1
  128. package/esm2022/splitter/splitter.component.mjs +1 -1
  129. package/esm2022/tabs/paginated-tab-header.mjs +7 -4
  130. package/esm2022/tabs/tab-body.component.mjs +1 -1
  131. package/esm2022/tabs/tab-group.component.mjs +23 -19
  132. package/esm2022/tabs/tab-header.component.mjs +3 -3
  133. package/esm2022/tabs/tab-label-wrapper.directive.mjs +16 -13
  134. package/esm2022/tabs/tab-nav-bar.mjs +2 -2
  135. package/esm2022/tabs/tab.component.mjs +17 -12
  136. package/esm2022/tags/tag-input.mjs +1 -1
  137. package/esm2022/tags/tag-list.component.mjs +27 -22
  138. package/esm2022/tags/tag.component.mjs +7 -14
  139. package/esm2022/textarea/textarea.component.mjs +21 -22
  140. package/esm2022/timepicker/timepicker.directive.mjs +1 -1
  141. package/esm2022/timezone/timezone-select.component.mjs +3 -3
  142. package/esm2022/toast/toast.component.mjs +2 -2
  143. package/esm2022/toggle/toggle.component.mjs +111 -31
  144. package/esm2022/tree/control/base-tree-control.mjs +1 -1
  145. package/esm2022/tree/control/flat-tree-control.filters.mjs +1 -1
  146. package/esm2022/tree/control/nested-tree-control.mjs +1 -1
  147. package/esm2022/tree/data-source/flat-data-source.mjs +1 -1
  148. package/esm2022/tree/padding.directive.mjs +1 -1
  149. package/esm2022/tree/toggle.mjs +19 -14
  150. package/esm2022/tree/tree-base.mjs +1 -1
  151. package/esm2022/tree/tree-option.component.mjs +1 -1
  152. package/esm2022/tree/tree-selection.component.mjs +1 -1
  153. package/esm2022/tree-select/tree-select.component.mjs +58 -38
  154. package/fesm2022/koobiq-components-accordion.mjs +1 -1
  155. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  156. package/fesm2022/koobiq-components-actions-panel.mjs +1 -1
  157. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  158. package/fesm2022/koobiq-components-alert.mjs +10 -4
  159. package/fesm2022/koobiq-components-alert.mjs.map +1 -1
  160. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  161. package/fesm2022/koobiq-components-badge.mjs +2 -5
  162. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  163. package/fesm2022/koobiq-components-breadcrumbs.mjs +54 -21
  164. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  165. package/fesm2022/koobiq-components-button-toggle.mjs +3 -3
  166. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  167. package/fesm2022/koobiq-components-button.mjs +23 -27
  168. package/fesm2022/koobiq-components-button.mjs.map +1 -1
  169. package/fesm2022/koobiq-components-checkbox.mjs +27 -28
  170. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  171. package/fesm2022/koobiq-components-code-block.mjs +1 -1
  172. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  173. package/fesm2022/koobiq-components-core.mjs +130 -51
  174. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  175. package/fesm2022/koobiq-components-datepicker.mjs +2 -2
  176. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  177. package/fesm2022/koobiq-components-dropdown.mjs +18 -13
  178. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  179. package/fesm2022/koobiq-components-ellipsis-center.mjs.map +1 -1
  180. package/fesm2022/koobiq-components-empty-state.mjs +12 -7
  181. package/fesm2022/koobiq-components-empty-state.mjs.map +1 -1
  182. package/fesm2022/koobiq-components-file-upload.mjs +2 -2
  183. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  184. package/fesm2022/koobiq-components-filter-bar.mjs +1381 -1233
  185. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  186. package/fesm2022/koobiq-components-form-field.mjs +26 -43
  187. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  188. package/fesm2022/koobiq-components-icon.mjs +33 -57
  189. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  190. package/fesm2022/koobiq-components-input.mjs +40 -25
  191. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  192. package/fesm2022/koobiq-components-link.mjs +46 -14
  193. package/fesm2022/koobiq-components-link.mjs.map +1 -1
  194. package/fesm2022/koobiq-components-list.mjs +19 -15
  195. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  196. package/fesm2022/koobiq-components-loader-overlay.mjs +13 -8
  197. package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
  198. package/fesm2022/koobiq-components-markdown.mjs +2 -2
  199. package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
  200. package/fesm2022/koobiq-components-modal.mjs +2 -2
  201. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  202. package/fesm2022/koobiq-components-navbar.mjs +17 -24
  203. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  204. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  205. package/fesm2022/koobiq-components-popover.mjs +5 -4
  206. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  207. package/fesm2022/koobiq-components-progress-bar.mjs +13 -20
  208. package/fesm2022/koobiq-components-progress-bar.mjs.map +1 -1
  209. package/fesm2022/koobiq-components-progress-spinner.mjs +16 -23
  210. package/fesm2022/koobiq-components-progress-spinner.mjs.map +1 -1
  211. package/fesm2022/koobiq-components-radio.mjs +26 -36
  212. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  213. package/fesm2022/koobiq-components-scrollbar.mjs.map +1 -1
  214. package/fesm2022/koobiq-components-select.mjs +56 -37
  215. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  216. package/fesm2022/koobiq-components-sidepanel.mjs +1 -1
  217. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  218. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  219. package/fesm2022/koobiq-components-tabs.mjs +60 -44
  220. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  221. package/fesm2022/koobiq-components-tags.mjs +32 -34
  222. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  223. package/fesm2022/koobiq-components-textarea.mjs +21 -22
  224. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  225. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  226. package/fesm2022/koobiq-components-timezone.mjs +2 -2
  227. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  228. package/fesm2022/koobiq-components-toast.mjs +1 -1
  229. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  230. package/fesm2022/koobiq-components-toggle.mjs +111 -31
  231. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  232. package/fesm2022/koobiq-components-tree-select.mjs +57 -37
  233. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  234. package/fesm2022/koobiq-components-tree.mjs +21 -15
  235. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  236. package/file-upload/multiple-file-upload.component.d.ts +2 -2
  237. package/file-upload/single-file-upload.component.d.ts +2 -2
  238. package/filter-bar/filter-bar-button.d.ts +1 -0
  239. package/filter-bar/filter-bar.d.ts +14 -0
  240. package/filter-bar/filter-bar.types.d.ts +13 -3
  241. package/filter-bar/filter-reset.d.ts +6 -2
  242. package/filter-bar/filter-search.d.ts +17 -10
  243. package/filter-bar/filters.d.ts +26 -11
  244. package/filter-bar/pipe-add.d.ts +10 -0
  245. package/filter-bar/pipe.directive.d.ts +5 -5
  246. package/filter-bar/pipes/base-pipe.d.ts +28 -2
  247. package/filter-bar/pipes/pipe-button.d.ts +6 -1
  248. package/filter-bar/pipes/pipe-date.d.ts +30 -10
  249. package/filter-bar/pipes/pipe-date.scss +29 -27
  250. package/filter-bar/pipes/pipe-datetime.d.ts +31 -10
  251. package/filter-bar/pipes/pipe-multi-select.d.ts +7 -0
  252. package/filter-bar/pipes/pipe-select.d.ts +7 -0
  253. package/filter-bar/pipes/pipe-state.d.ts +1 -0
  254. package/filter-bar/pipes/pipe-text.d.ts +5 -0
  255. package/form-field/form-field.d.ts +4 -12
  256. package/form-field/hint.d.ts +3 -12
  257. package/form-field/password-hint.d.ts +3 -3
  258. package/icon/icon-button.component.d.ts +5 -8
  259. package/icon/icon-item.component.d.ts +3 -7
  260. package/icon/icon.component.d.ts +7 -14
  261. package/input/input-password.d.ts +8 -2
  262. package/input/input.d.ts +9 -18
  263. package/link/_link-theme.scss +31 -8
  264. package/link/link.component.d.ts +13 -9
  265. package/list/list-selection.component.d.ts +8 -10
  266. package/loader-overlay/_loader-overlay-theme.scss +18 -8
  267. package/loader-overlay/loader-overlay-tokens.scss +6 -3
  268. package/loader-overlay/loader-overlay.component.d.ts +7 -2
  269. package/loader-overlay/loader-overlay.scss +19 -5
  270. package/markdown/markdown.scss +0 -4
  271. package/navbar/navbar.component.d.ts +2 -2
  272. package/navbar/vertical-navbar.component.d.ts +3 -3
  273. package/package.json +5 -5
  274. package/prebuilt-themes/dark-theme.css +1 -1
  275. package/prebuilt-themes/light-theme.css +1 -1
  276. package/prebuilt-themes/theme.css +1 -1
  277. package/progress-bar/progress-bar.component.d.ts +4 -12
  278. package/progress-spinner/progress-spinner.component.d.ts +4 -12
  279. package/radio/radio.component.d.ts +11 -25
  280. package/radio/radio.scss +0 -1
  281. package/schematics/collection.json +10 -0
  282. package/schematics/migrations/css-selectors/README.md +19 -0
  283. package/schematics/migrations/deprecated-icons/README.md +21 -0
  284. package/schematics/migrations/empty-state-size-attr/README.md +62 -0
  285. package/schematics/migrations/empty-state-size-attr/index.js +74 -0
  286. package/schematics/migrations/empty-state-size-attr/schema.json +15 -0
  287. package/schematics/migrations/loader-overlay-size-attr/README.md +62 -0
  288. package/schematics/migrations/loader-overlay-size-attr/index.js +74 -0
  289. package/schematics/migrations/loader-overlay-size-attr/schema.json +15 -0
  290. package/schematics/migrations/new-icons-pack/README.md +21 -0
  291. package/schematics/ng-add/index.js +3 -3
  292. package/schematics/utils/angular-parsing.js +153 -0
  293. package/schematics/utils/ast.js +28 -0
  294. package/schematics/utils/package-config.js +46 -0
  295. package/schematics/utils/typescript.js +171 -0
  296. package/select/select.component.d.ts +26 -25
  297. package/tabs/paginated-tab-header.d.ts +2 -1
  298. package/tabs/tab-group.component.d.ts +11 -13
  299. package/tabs/tab-header.component.d.ts +1 -1
  300. package/tabs/tab-label-wrapper.directive.d.ts +6 -8
  301. package/tabs/tab.component.d.ts +7 -8
  302. package/tags/tag-list.component.d.ts +15 -18
  303. package/tags/tag.component.d.ts +3 -10
  304. package/textarea/textarea.component.d.ts +8 -17
  305. package/toggle/_toggle-theme.scss +12 -3
  306. package/toggle/toggle-tokens.scss +2 -2
  307. package/toggle/toggle.component.d.ts +28 -14
  308. package/toggle/toggle.scss +37 -0
  309. package/tree/toggle.d.ts +7 -9
  310. package/tree/tree-selection.component.d.ts +2 -2
  311. package/tree-select/tree-select.component.d.ts +24 -26
@@ -2,7 +2,7 @@ import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
2
  import { getSupportedInputTypes } from '@angular/cdk/platform';
3
3
  import { Directive, ElementRef, Inject, Input, Optional, Self } from '@angular/core';
4
4
  import { FormGroupDirective, NgControl, NgForm } from '@angular/forms';
5
- import { ErrorStateMatcher, mixinErrorState } from '@koobiq/components/core';
5
+ import { ErrorStateMatcher } from '@koobiq/components/core';
6
6
  import { KbqFormFieldControl } from '@koobiq/components/form-field';
7
7
  import { Subject } from 'rxjs';
8
8
  import { getKbqInputUnsupportedTypeError } from './input-errors';
@@ -24,24 +24,7 @@ const KBQ_INPUT_INVALID_TYPES = [
24
24
  'submit'
25
25
  ];
26
26
  let nextUniqueId = 0;
27
- /** @docs-private */
28
- export class KbqInputBase {
29
- constructor(defaultErrorStateMatcher, parentForm, parentFormGroup, ngControl) {
30
- this.defaultErrorStateMatcher = defaultErrorStateMatcher;
31
- this.parentForm = parentForm;
32
- this.parentFormGroup = parentFormGroup;
33
- this.ngControl = ngControl;
34
- /**
35
- * Emits whenever the component state changes and should cause the parent
36
- * form-field to update. Implemented as part of `KbqFormFieldControl`.
37
- * @docs-private
38
- */
39
- this.stateChanges = new Subject();
40
- }
41
- }
42
- /** @docs-private */
43
- export const KbqInputMixinBase = mixinErrorState(KbqInputBase);
44
- export class KbqInput extends KbqInputMixinBase {
27
+ export class KbqInput {
45
28
  /**
46
29
  * Implemented as part of KbqFormFieldControl.
47
30
  * @docs-private
@@ -109,9 +92,14 @@ export class KbqInput extends KbqInputMixinBase {
109
92
  }
110
93
  }
111
94
  constructor(elementRef, ngControl, numberInput, parentForm, parentFormGroup, defaultErrorStateMatcher, inputValueAccessor) {
112
- super(defaultErrorStateMatcher, parentForm, parentFormGroup, ngControl);
113
95
  this.elementRef = elementRef;
96
+ this.ngControl = ngControl;
114
97
  this.numberInput = numberInput;
98
+ this.parentForm = parentForm;
99
+ this.parentFormGroup = parentFormGroup;
100
+ this.defaultErrorStateMatcher = defaultErrorStateMatcher;
101
+ /** Whether the component is in an error state. */
102
+ this.errorState = false;
115
103
  /**
116
104
  * Implemented as part of KbqFormFieldControl.
117
105
  * @docs-private
@@ -163,6 +151,17 @@ export class KbqInput extends KbqInputMixinBase {
163
151
  // updating the value using `emitEvent: false`).
164
152
  this.dirtyCheckNativeValue();
165
153
  }
154
+ updateErrorState() {
155
+ const oldState = this.errorState;
156
+ const parent = this.parentFormGroup || this.parentForm;
157
+ const matcher = this.errorStateMatcher || this.defaultErrorStateMatcher;
158
+ const control = this.ngControl ? this.ngControl.control : null;
159
+ const newState = matcher.isErrorState(control, parent);
160
+ if (newState !== oldState) {
161
+ this.errorState = newState;
162
+ this.stateChanges.next();
163
+ }
164
+ }
166
165
  /** Focuses the input. */
167
166
  focus() {
168
167
  this.elementRef.nativeElement.focus();
@@ -226,7 +225,7 @@ export class KbqInput extends KbqInputMixinBase {
226
225
  provide: KbqFormFieldControl,
227
226
  useExisting: KbqInput
228
227
  }
229
- ], exportAs: ["kbqInput"], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
228
+ ], exportAs: ["kbqInput"], usesOnChanges: true, ngImport: i0 }); }
230
229
  }
231
230
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqInput, decorators: [{
232
231
  type: Directive,
@@ -297,4 +296,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
297
296
  host: { class: 'kbq-input_monospace' }
298
297
  }]
299
298
  }] });
300
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2lucHV0L2lucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9ELE9BQU8sRUFDSCxTQUFTLEVBRVQsVUFBVSxFQUVWLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLElBQUksRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFHSCxpQkFBaUIsRUFDakIsZUFBZSxFQUNsQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7OztBQUVsRSxNQUFNLHVCQUF1QixHQUFHO0lBQzVCLFFBQVE7SUFDUixVQUFVO0lBQ1YsTUFBTTtJQUNOLFFBQVE7SUFDUixPQUFPO0lBQ1AsT0FBTztJQUNQLE9BQU87SUFDUCxPQUFPO0lBQ1AsUUFBUTtDQUNYLENBQUM7QUFFRixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7QUFFckIsb0JBQW9CO0FBQ3BCLE1BQU0sT0FBTyxZQUFZO0lBUXJCLFlBQ1csd0JBQTJDLEVBQzNDLFVBQWtCLEVBQ2xCLGVBQW1DLEVBQ25DLFNBQW9CO1FB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QUk7d0JBQ2pCLG9CQUFvQixFQUFFLGFBQWE7d0JBQ25DLGlCQUFpQixFQUFFLGtCQUFrQjt3QkFDckMsWUFBWSxFQUFFLFVBQVU7d0JBQ3hCLFFBQVEsRUFBRSxVQUFVO3dCQUNwQixTQUFTLEVBQUUsb0JBQW9CO3FCQUNsQztvQkFDRCxTQUFTLEVBQUU7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLG1CQUFtQjs0QkFDNUIsV0FBVyxVQUFVO3lCQUN4QjtxQkFDSjtpQkFDSjs7MEJBMklRLFFBQVE7OzBCQUFJLElBQUk7OzBCQUNoQixRQUFROzswQkFBSSxJQUFJOzswQkFDaEIsUUFBUTs7MEJBQ1IsUUFBUTs7MEJBRVIsUUFBUTs7MEJBQUksSUFBSTs7MEJBQUksTUFBTTsyQkFBQyx3QkFBd0I7eUNBMUkvQyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBd0JHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBa0JGLFFBQVE7c0JBRFgsS0FBSztnQkEyQkYsRUFBRTtzQkFETCxLQUFLO2dCQWdCRixRQUFRO3NCQURYLEtBQUs7Z0JBYUYsSUFBSTtzQkFEUCxLQUFLO2dCQXdCRixLQUFLO3NCQURSLEtBQUs7O0FBb0lWLE1BQU0sT0FBTyxZQUFZO2lJQUFaLFlBQVk7cUhBQVosWUFBWTs7MkZBQVosWUFBWTtrQkFMeEIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsMEJBQTBCO29CQUNwQyxRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUscUJBQXFCLEVBQUU7aUJBQ3pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IGdldFN1cHBvcnRlZElucHV0VHlwZXMgfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgRG9DaGVjayxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPcHRpb25hbCxcbiAgICBTZWxmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwRGlyZWN0aXZlLCBOZ0NvbnRyb2wsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgQ2FuVXBkYXRlRXJyb3JTdGF0ZSxcbiAgICBDYW5VcGRhdGVFcnJvclN0YXRlQ3RvcixcbiAgICBFcnJvclN0YXRlTWF0Y2hlcixcbiAgICBtaXhpbkVycm9yU3RhdGVcbn0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2NvcmUnO1xuaW1wb3J0IHsgS2JxRm9ybUZpZWxkQ29udHJvbCB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9mb3JtLWZpZWxkJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGdldEticUlucHV0VW5zdXBwb3J0ZWRUeXBlRXJyb3IgfSBmcm9tICcuL2lucHV0LWVycm9ycyc7XG5pbXBvcnQgeyBLYnFOdW1iZXJJbnB1dCB9IGZyb20gJy4vaW5wdXQtbnVtYmVyJztcbmltcG9ydCB7IEtCUV9JTlBVVF9WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJy4vaW5wdXQtdmFsdWUtYWNjZXNzb3InO1xuXG5jb25zdCBLQlFfSU5QVVRfSU5WQUxJRF9UWVBFUyA9IFtcbiAgICAnYnV0dG9uJyxcbiAgICAnY2hlY2tib3gnLFxuICAgICdmaWxlJyxcbiAgICAnaGlkZGVuJyxcbiAgICAnaW1hZ2UnLFxuICAgICdyYWRpbycsXG4gICAgJ3JhbmdlJyxcbiAgICAncmVzZXQnLFxuICAgICdzdWJtaXQnXG5dO1xuXG5sZXQgbmV4dFVuaXF1ZUlkID0gMDtcblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBjbGFzcyBLYnFJbnB1dEJhc2Uge1xuICAgIC8qKlxuICAgICAqIEVtaXRzIHdoZW5ldmVyIHRoZSBjb21wb25lbnQgc3RhdGUgY2hhbmdlcyBhbmQgc2hvdWxkIGNhdXNlIHRoZSBwYXJlbnRcbiAgICAgKiBmb3JtLWZpZWxkIHRvIHVwZGF0ZS4gSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBgS2JxRm9ybUZpZWxkQ29udHJvbGAuXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IHN0YXRlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGRlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcjogRXJyb3JTdGF0ZU1hdGNoZXIsXG4gICAgICAgIHB1YmxpYyBwYXJlbnRGb3JtOiBOZ0Zvcm0sXG4gICAgICAgIHB1YmxpYyBwYXJlbnRGb3JtR3JvdXA6IEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgICAgICAgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sXG4gICAgKSB7fVxufVxuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGNvbnN0IEticUlucHV0TWl4aW5CYXNlOiBDYW5VcGRhdGVFcnJvclN0YXRlQ3RvciAmIHR5cGVvZiBLYnFJbnB1dEJhc2UgPSBtaXhpbkVycm9yU3RhdGUoS2JxSW5wdXRCYXNlKTtcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6IGBpbnB1dFtrYnFJbnB1dF0saW5wdXRba2JxTnVtYmVySW5wdXRdYCxcbiAgICBleHBvcnRBczogJ2ticUlucHV0JyxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAna2JxLWlucHV0JyxcbiAgICAgICAgLy8gTmF0aXZlIGlucHV0IHByb3BlcnRpZXMgdGhhdCBhcmUgb3ZlcndyaXR0ZW4gYnkgQW5ndWxhciBpbnB1dHMgbmVlZCB0byBiZSBzeW5jZWQgd2l0aFxuICAgICAgICAvLyB0aGUgbmF0aXZlIGlucHV0IGVsZW1lbnQuIE90aGVyd2lzZSBwcm9wZXJ0eSBiaW5kaW5ncyBmb3IgdGhvc2UgZG9uJ3Qgd29yay5cbiAgICAgICAgJ1thdHRyLmlkXSc6ICdpZCcsXG4gICAgICAgICdbYXR0ci5wbGFjZWhvbGRlcl0nOiAncGxhY2Vob2xkZXInLFxuICAgICAgICAnW2F0dHIuZGlzYWJsZWRdJzogJ2Rpc2FibGVkIHx8IG51bGwnLFxuICAgICAgICAnW3JlcXVpcmVkXSc6ICdyZXF1aXJlZCcsXG4gICAgICAgICcoYmx1ciknOiAnb25CbHVyKCknLFxuICAgICAgICAnKGZvY3VzKSc6ICdmb2N1c0NoYW5nZWQodHJ1ZSknXG4gICAgfSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogS2JxRm9ybUZpZWxkQ29udHJvbCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBLYnFJbnB1dFxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBLYnFJbnB1dFxuICAgIGV4dGVuZHMgS2JxSW5wdXRNaXhpbkJhc2VcbiAgICBpbXBsZW1lbnRzIEticUZvcm1GaWVsZENvbnRyb2w8YW55PiwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIERvQ2hlY2ssIENhblVwZGF0ZUVycm9yU3RhdGUsIE9uQ2hhbmdlc1xue1xuICAgIC8qKiBBbiBvYmplY3QgdXNlZCB0byBjb250cm9sIHdoZW4gZXJyb3IgbWVzc2FnZXMgYXJlIHNob3duLiAqL1xuICAgIEBJbnB1dCgpIGVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlcjtcblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgS2JxRm9ybUZpZWxkQ29udHJvbC5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgZm9jdXNlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBLYnFGb3JtRmllbGRDb250cm9sLlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICByZWFkb25seSBzdGF0ZUNoYW5nZXM6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBLYnFGb3JtRmllbGRDb250cm9sLlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBjb250cm9sVHlwZTogc3RyaW5nID0gJ2lucHV0JztcblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgS2JxRm9ybUZpZWxkQ29udHJvbC5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICAgIHByb3RlY3RlZCB1aWQgPSBga2JxLWlucHV0LSR7bmV4dFVuaXF1ZUlkKyt9YDtcbiAgICBwcm90ZWN0ZWQgcHJldmlvdXNOYXRpdmVWYWx1ZTogYW55O1xuICAgIHByb3RlY3RlZCBuZXZlckVtcHR5SW5wdXRUeXBlcyA9IFtcbiAgICAgICAgJ2RhdGUnLFxuICAgICAgICAnZGF0ZXRpbWUnLFxuICAgICAgICAnZGF0ZXRpbWUtbG9jYWwnLFxuICAgICAgICAnbW9udGgnLFxuICAgICAgICAndGltZScsXG4gICAgICAgICd3ZWVrJ1xuICAgIF0uZmlsdGVyKCh0KSA9PiBnZXRTdXBwb3J0ZWRJbnB1dFR5cGVzKCkuaGFzKHQpKTtcblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgS2JxRm9ybUZpZWxkQ29udHJvbC5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCAmJiB0aGlzLm5nQ29udHJvbC5kaXNhYmxlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmdDb250cm9sLmRpc2FibGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG5cbiAgICAgICAgLy8gQnJvd3NlcnMgbWF5IG5vdCBmaXJlIHRoZSBibHVyIGV2ZW50IGlmIHRoZSBpbnB1dCBpcyBkaXNhYmxlZCB0b28gcXVpY2tseS5cbiAgICAgICAgLy8gUmVzZXQgZnJvbSBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSBlbGVtZW50IGRvZXNuJ3QgYmVjb21lIHN0dWNrLlxuICAgICAgICBpZiAodGhpcy5mb2N1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIEticUZvcm1GaWVsZENvbnRyb2wuXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pZDtcbiAgICB9XG5cbiAgICBzZXQgaWQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9pZCA9IHZhbHVlIHx8IHRoaXMudWlkO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lkOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIEticUZvcm1GaWVsZENvbnRyb2wuXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gICAgfVxuXG4gICAgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3JlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xuXG4gICAgLyoqIElucHV0IHR5cGUgb2YgdGhlIGVsZW1lbnQuICovXG4gICAgQElucHV0KClcbiAgICBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgICB9XG5cbiAgICBzZXQgdHlwZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3R5cGUgPSB2YWx1ZSB8fCAndGV4dCc7XG4gICAgICAgIHRoaXMudmFsaWRhdGVUeXBlKCk7XG5cbiAgICAgICAgLy8gV2hlbiB1c2luZyBBbmd1bGFyIGlucHV0cywgZGV2ZWxvcGVycyBhcmUgbm8gbG9uZ2VyIGFibGUgdG8gc2V0IHRoZSBwcm9wZXJ0aWVzIG9uIHRoZSBuYXRpdmVcbiAgICAgICAgLy8gaW5wdXQgZWxlbWVudC4gVG8gZW5zdXJlIHRoYXQgYmluZGluZ3MgZm9yIGB0eXBlYCB3b3JrLCB3ZSBuZWVkIHRvIHN5bmMgdGhlIHNldHRlclxuICAgICAgICAvLyB3aXRoIHRoZSBuYXRpdmUgcHJvcGVydHkuIFRleHRhcmVhIGVsZW1lbnRzIGRvbid0IHN1cHBvcnQgdGhlIHR5cGUgcHJvcGVydHkgb3IgYXR0cmlidXRlLlxuICAgICAgICBpZiAoZ2V0U3VwcG9ydGVkSW5wdXRUeXBlcygpLmhhcyh0aGlzLl90eXBlKSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudHlwZSA9IHRoaXMuX3R5cGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF90eXBlID0gJ3RleHQnO1xuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBLYnFGb3JtRmllbGRDb250cm9sLlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dFZhbHVlQWNjZXNzb3IudmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0VmFsdWVBY2Nlc3Nvci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbnB1dFZhbHVlQWNjZXNzb3I6IHsgdmFsdWU6IGFueSB9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBudW1iZXJJbnB1dDogS2JxTnVtYmVySW5wdXQsXG4gICAgICAgIEBPcHRpb25hbCgpIHBhcmVudEZvcm06IE5nRm9ybSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcGFyZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXBEaXJlY3RpdmUsXG4gICAgICAgIGRlZmF1bHRFcnJvclN0YXRlTWF0Y2hlcjogRXJyb3JTdGF0ZU1hdGNoZXIsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgQEluamVjdChLQlFfSU5QVVRfVkFMVUVfQUNDRVNTT1IpIGlucHV0VmFsdWVBY2Nlc3NvcjogYW55XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGRlZmF1bHRFcnJvclN0YXRlTWF0Y2hlciwgcGFyZW50Rm9ybSwgcGFyZW50Rm9ybUdyb3VwLCBuZ0NvbnRyb2wpO1xuXG4gICAgICAgIC8vIElmIG5vIGlucHV0IHZhbHVlIGFjY2Vzc29yIHdhcyBleHBsaWNpdGx5IHNwZWNpZmllZCwgdXNlIHRoZSBlbGVtZW50IGFzIHRoZSBpbnB1dCB2YWx1ZSBhY2Nlc3Nvci5cbiAgICAgICAgdGhpcy5pbnB1dFZhbHVlQWNjZXNzb3IgPSBpbnB1dFZhbHVlQWNjZXNzb3IgfHwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgdGhpcy5wcmV2aW91c05hdGl2ZVZhbHVlID0gdGhpcy52YWx1ZTtcblxuICAgICAgICAvLyBGb3JjZSBzZXR0ZXIgdG8gYmUgY2FsbGVkIGluIGNhc2UgaWQgd2FzIG5vdCBzcGVjaWZpZWQuXG4gICAgICAgIHRoaXMuaWQgPSB0aGlzLmlkO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKCkge1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgbmdEb0NoZWNrKCkge1xuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgdGhpcyBvbiBldmVyeSBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlLCBiZWNhdXNlIHRoZXJlIGFyZSBzb21lXG4gICAgICAgICAgICAvLyBlcnJvciB0cmlnZ2VycyB0aGF0IHdlIGNhbid0IHN1YnNjcmliZSB0byAoZS5nLiBwYXJlbnQgZm9ybSBzdWJtaXNzaW9ucykuIFRoaXMgbWVhbnNcbiAgICAgICAgICAgIC8vIHRoYXQgd2hhdGV2ZXIgbG9naWMgaXMgaW4gaGVyZSBoYXMgdG8gYmUgc3VwZXIgbGVhbiBvciB3ZSByaXNrIGRlc3Ryb3lpbmcgdGhlIHBlcmZvcm1hbmNlLlxuICAgICAgICAgICAgdGhpcy51cGRhdGVFcnJvclN0YXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBuZWVkIHRvIGRpcnR5LWNoZWNrIHRoZSBuYXRpdmUgZWxlbWVudCdzIHZhbHVlLCBiZWNhdXNlIHRoZXJlIGFyZSBzb21lIGNhc2VzIHdoZXJlXG4gICAgICAgIC8vIHdlIHdvbid0IGJlIG5vdGlmaWVkIHdoZW4gaXQgY2hhbmdlcyAoZS5nLiB0aGUgY29uc3VtZXIgaXNuJ3QgdXNpbmcgZm9ybXMgb3IgdGhleSdyZVxuICAgICAgICAvLyB1cGRhdGluZyB0aGUgdmFsdWUgdXNpbmcgYGVtaXRFdmVudDogZmFsc2VgKS5cbiAgICAgICAgdGhpcy5kaXJ0eUNoZWNrTmF0aXZlVmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogRm9jdXNlcyB0aGUgaW5wdXQuICovXG4gICAgZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgb25CbHVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvY3VzQ2hhbmdlZChmYWxzZSk7XG5cbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sPy5jb250cm9sKSB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5uZ0NvbnRyb2wuY29udHJvbDtcblxuICAgICAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIChjb250cm9sLnN0YXR1c0NoYW5nZXMgYXMgRXZlbnRFbWl0dGVyPHN0cmluZz4pLmVtaXQoY29udHJvbC5zdGF0dXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENhbGxiYWNrIGZvciB0aGUgY2FzZXMgd2hlcmUgdGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIGlucHV0IGNoYW5nZXMuICovXG4gICAgZm9jdXNDaGFuZ2VkKGlzRm9jdXNlZDogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5mb2N1c2VkICE9PSBpc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZCA9IGlzRm9jdXNlZDtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgS2JxRm9ybUZpZWxkQ29udHJvbC5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgZ2V0IGVtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNOZXZlckVtcHR5KCkgJiYgIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlICYmICF0aGlzLmlzQmFkSW5wdXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIEticUZvcm1GaWVsZENvbnRyb2wuXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIG9uQ29udGFpbmVyQ2xpY2soKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogRG9lcyBzb21lIG1hbnVhbCBkaXJ0eSBjaGVja2luZyBvbiB0aGUgbmF0aXZlIGlucHV0IGB2YWx1ZWAgcHJvcGVydHkuICovXG4gICAgcHJvdGVjdGVkIGRpcnR5Q2hlY2tOYXRpdmVWYWx1ZSgpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLnZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLnByZXZpb3VzTmF0aXZlVmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzTmF0aXZlVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBNYWtlIHN1cmUgdGhlIGlucHV0IGlzIGEgc3VwcG9ydGVkIHR5cGUuICovXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRlVHlwZSgpIHtcbiAgICAgICAgaWYgKEtCUV9JTlBVVF9JTlZBTElEX1RZUEVTLmluZGV4T2YodGhpcy5fdHlwZSkgPiAtMSkge1xuICAgICAgICAgICAgdGhyb3cgZ2V0S2JxSW5wdXRVbnN1cHBvcnRlZFR5cGVFcnJvcih0aGlzLl90eXBlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDaGVja3Mgd2hldGhlciB0aGUgaW5wdXQgdHlwZSBpcyBvbmUgb2YgdGhlIHR5cGVzIHRoYXQgYXJlIG5ldmVyIGVtcHR5LiAqL1xuICAgIHByb3RlY3RlZCBpc05ldmVyRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5ldmVyRW1wdHlJbnB1dFR5cGVzLmluZGV4T2YodGhpcy5fdHlwZSkgPiAtMTtcbiAgICB9XG5cbiAgICAvKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGlucHV0IGlzIGludmFsaWQgYmFzZWQgb24gdGhlIG5hdGl2ZSB2YWxpZGF0aW9uLiAqL1xuICAgIHByb3RlY3RlZCBpc0JhZElucHV0KCkge1xuICAgICAgICAvLyBUaGUgYHZhbGlkaXR5YCBwcm9wZXJ0eSB3b24ndCBiZSBwcmVzZW50IG9uIHBsYXRmb3JtLXNlcnZlci5cbiAgICAgICAgY29uc3QgdmFsaWRpdHkgPSAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsaWRpdHk7XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkaXR5Py5iYWRJbnB1dDtcbiAgICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnaW5wdXRba2JxSW5wdXRNb25vc3BhY2VdJyxcbiAgICBleHBvcnRBczogJ0ticUlucHV0TW9ub3NwYWNlJyxcbiAgICBob3N0OiB7IGNsYXNzOiAna2JxLWlucHV0X21vbm9zcGFjZScgfVxufSlcbmV4cG9ydCBjbGFzcyBLYnFJbnB1dE1vbm8ge31cbiJdfQ==
299
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2lucHV0L2lucHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQy9ELE9BQU8sRUFDSCxTQUFTLEVBRVQsVUFBVSxFQUVWLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLElBQUksRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRixPQUFPLEVBQXVCLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7O0FBRWxFLE1BQU0sdUJBQXVCLEdBQUc7SUFDNUIsUUFBUTtJQUNSLFVBQVU7SUFDVixNQUFNO0lBQ04sUUFBUTtJQUNSLE9BQU87SUFDUCxPQUFPO0lBQ1AsT0FBTztJQUNQLE9BQU87SUFDUCxRQUFRO0NBQ1gsQ0FBQztBQUVGLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztBQXVCckIsTUFBTSxPQUFPLFFBQVE7SUE0Q2pCOzs7T0FHRztJQUNILElBQ0ksUUFBUTtRQUNSLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFD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aW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IGdldFN1cHBvcnRlZElucHV0VHlwZXMgfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgRG9DaGVjayxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPcHRpb25hbCxcbiAgICBTZWxmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwRGlyZWN0aXZlLCBOZ0NvbnRyb2wsIE5nRm9ybSwgVW50eXBlZEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ2FuVXBkYXRlRXJyb3JTdGF0ZSwgRXJyb3JTdGF0ZU1hdGNoZXIgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvY29yZSc7XG5pbXBvcnQgeyBLYnFGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZ2V0S2JxSW5wdXRVbnN1cHBvcnRlZFR5cGVFcnJvciB9IGZyb20gJy4vaW5wdXQtZXJyb3JzJztcbmltcG9ydCB7IEticU51bWJlcklucHV0IH0gZnJvbSAnLi9pbnB1dC1udW1iZXInO1xuaW1wb3J0IHsgS0JRX0lOUFVUX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnLi9pbnB1dC12YWx1ZS1hY2Nlc3Nvcic7XG5cbmNvbnN0IEtCUV9JTlBVVF9JTlZBTElEX1RZUEVTID0gW1xuICAgICdidXR0b24nLFxuICAgICdjaGVja2JveCcsXG4gICAgJ2ZpbGUnLFxuICAgICdoaWRkZW4nLFxuICAgICdpbWFnZScsXG4gICAgJ3JhZGlvJyxcbiAgICAncmFuZ2UnLFxuICAgICdyZXNldCcsXG4gICAgJ3N1Ym1pdCdcbl07XG5cbmxldCBuZXh0VW5pcXVlSWQgPSAwO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogYGlucHV0W2ticUlucHV0XSxpbnB1dFtrYnFOdW1iZXJJbnB1dF1gLFxuICAgIGV4cG9ydEFzOiAna2JxSW5wdXQnLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdrYnEtaW5wdXQnLFxuICAgICAgICAvLyBOYXRpdmUgaW5wdXQgcHJvcGVydGllcyB0aGF0IGFyZSBvdmVyd3JpdHRlbiBieSBBbmd1bGFyIGlucHV0cyBuZWVkIHRvIGJlIHN5bmNlZCB3aXRoXG4gICAgICAgIC8vIHRoZSBuYXRpdmUgaW5wdXQgZWxlbWVudC4gT3RoZXJ3aXNlIHByb3BlcnR5IGJpbmRpbmdzIGZvciB0aG9zZSBkb24ndCB3b3JrLlxuICAgICAgICAnW2F0dHIuaWRdJzogJ2lkJyxcbiAgICAgICAgJ1thdHRyLnBsYWNlaG9sZGVyXSc6ICdwbGFjZWhvbGRlcicsXG4gICAgICAgICdbYXR0ci5kaXNhYmxlZF0nOiAnZGlzYWJsZWQgfHwgbnVsbCcsXG4gICAgICAgICdbcmVxdWlyZWRdJzogJ3JlcXVpcmVkJyxcbiAgICAgICAgJyhibHVyKSc6ICdvbkJsdXIoKScsXG4gICAgICAgICcoZm9jdXMpJzogJ2ZvY3VzQ2hhbmdlZCh0cnVlKSdcbiAgICB9LFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBLYnFGb3JtRmllbGRDb250cm9sLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IEticUlucHV0XG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEticUlucHV0XG4gICAgaW1wbGVtZW50cyBLYnFGb3JtRmllbGRDb250cm9sPGFueT4sIE9uQ2hhbmdlcywgT25EZXN0cm95LCBEb0NoZWNrLCBPbkNoYW5nZXMsIENhblVwZGF0ZUVycm9yU3RhdGVcbntcbiAgICAvKiogV2hldGhlciB0aGUgY29tcG9uZW50IGlzIGluIGFuIGVycm9yIHN0YXRlLiAqL1xuICAgIGVycm9yU3RhdGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBBbiBvYmplY3QgdXNlZCB0byBjb250cm9sIHdoZW4gZXJyb3IgbWVzc2FnZXMgYXJlIHNob3duLiAqL1xuICAgIEBJbnB1dCgpIGVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlcjtcblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgS2JxRm9ybUZpZWxkQ29udHJvbC5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgZm9jdXNlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBLYnFGb3JtRmllbGRDb250cm9sLlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICByZWFkb25seSBzdGF0ZUNoYW5nZXM6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBLYnFGb3JtRmllbGRDb250cm9sLlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBjb250cm9sVHlwZTogc3RyaW5nID0gJ2lucHV0JztcblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgS2JxRm9ybUZpZWxkQ29udHJvbC5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICAgIHByb3RlY3RlZCB1aWQgPSBga2JxLWlucHV0LSR7bmV4dFVuaXF1ZUlkKyt9YDtcbiAgICBwcm90ZWN0ZWQgcHJldmlvdXNOYXRpdmVWYWx1ZTogYW55O1xuICAgIHByb3RlY3RlZCBuZXZlckVtcHR5SW5wdXRUeXBlcyA9IFtcbiAgICAgICAgJ2RhdGUnLFxuICAgICAgICAnZGF0ZXRpbWUnLFxuICAgICAgICAnZGF0ZXRpbWUtbG9jYWwnLFxuICAgICAgICAnbW9udGgnLFxuICAgICAgICAndGltZScsXG4gICAgICAgICd3ZWVrJ1xuICAgIF0uZmlsdGVyKCh0KSA9PiBnZXRTdXBwb3J0ZWRJbnB1dFR5cGVzKCkuaGFzKHQpKTtcblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgS2JxRm9ybUZpZWxkQ29udHJvbC5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCAmJiB0aGlzLm5nQ29udHJvbC5kaXNhYmxlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmdDb250cm9sLmRpc2FibGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG5cbiAgICAgICAgLy8gQnJvd3NlcnMgbWF5IG5vdCBmaXJlIHRoZSBibHVyIGV2ZW50IGlmIHRoZSBpbnB1dCBpcyBkaXNhYmxlZCB0b28gcXVpY2tseS5cbiAgICAgICAgLy8gUmVzZXQgZnJvbSBoZXJlIHRvIGVuc3VyZSB0aGF0IHRoZSBlbGVtZW50IGRvZXNuJ3QgYmVjb21lIHN0dWNrLlxuICAgICAgICBpZiAodGhpcy5mb2N1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIEticUZvcm1GaWVsZENvbnRyb2wuXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pZDtcbiAgICB9XG5cbiAgICBzZXQgaWQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9pZCA9IHZhbHVlIHx8IHRoaXMudWlkO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2lkOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIEticUZvcm1GaWVsZENvbnRyb2wuXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gICAgfVxuXG4gICAgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3JlcXVpcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xuXG4gICAgLyoqIElucHV0IHR5cGUgb2YgdGhlIGVsZW1lbnQuICovXG4gICAgQElucHV0KClcbiAgICBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgICB9XG5cbiAgICBzZXQgdHlwZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3R5cGUgPSB2YWx1ZSB8fCAndGV4dCc7XG4gICAgICAgIHRoaXMudmFsaWRhdGVUeXBlKCk7XG5cbiAgICAgICAgLy8gV2hlbiB1c2luZyBBbmd1bGFyIGlucHV0cywgZGV2ZWxvcGVycyBhcmUgbm8gbG9uZ2VyIGFibGUgdG8gc2V0IHRoZSBwcm9wZXJ0aWVzIG9uIHRoZSBuYXRpdmVcbiAgICAgICAgLy8gaW5wdXQgZWxlbWVudC4gVG8gZW5zdXJlIHRoYXQgYmluZGluZ3MgZm9yIGB0eXBlYCB3b3JrLCB3ZSBuZWVkIHRvIHN5bmMgdGhlIHNldHRlclxuICAgICAgICAvLyB3aXRoIHRoZSBuYXRpdmUgcHJvcGVydHkuIFRleHRhcmVhIGVsZW1lbnRzIGRvbid0IHN1cHBvcnQgdGhlIHR5cGUgcHJvcGVydHkgb3IgYXR0cmlidXRlLlxuICAgICAgICBpZiAoZ2V0U3VwcG9ydGVkSW5wdXRUeXBlcygpLmhhcyh0aGlzLl90eXBlKSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudHlwZSA9IHRoaXMuX3R5cGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF90eXBlID0gJ3RleHQnO1xuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBLYnFGb3JtRmllbGRDb250cm9sLlxuICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dFZhbHVlQWNjZXNzb3IudmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0VmFsdWVBY2Nlc3Nvci52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbnB1dFZhbHVlQWNjZXNzb3I6IHsgdmFsdWU6IGFueSB9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbnVtYmVySW5wdXQ6IEticU51bWJlcklucHV0LFxuICAgICAgICBAT3B0aW9uYWwoKSBwdWJsaWMgcGFyZW50Rm9ybTogTmdGb3JtLFxuICAgICAgICBAT3B0aW9uYWwoKSBwdWJsaWMgcGFyZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXBEaXJlY3RpdmUsXG4gICAgICAgIHB1YmxpYyBkZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIEBJbmplY3QoS0JRX0lOUFVUX1ZBTFVFX0FDQ0VTU09SKSBpbnB1dFZhbHVlQWNjZXNzb3I6IGFueVxuICAgICkge1xuICAgICAgICAvLyBJZiBubyBpbnB1dCB2YWx1ZSBhY2Nlc3NvciB3YXMgZXhwbGljaXRseSBzcGVjaWZpZWQsIHVzZSB0aGUgZWxlbWVudCBhcyB0aGUgaW5wdXQgdmFsdWUgYWNjZXNzb3IuXG4gICAgICAgIHRoaXMuaW5wdXRWYWx1ZUFjY2Vzc29yID0gaW5wdXRWYWx1ZUFjY2Vzc29yIHx8IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIHRoaXMucHJldmlvdXNOYXRpdmVWYWx1ZSA9IHRoaXMudmFsdWU7XG5cbiAgICAgICAgLy8gRm9yY2Ugc2V0dGVyIHRvIGJlIGNhbGxlZCBpbiBjYXNlIGlkIHdhcyBub3Qgc3BlY2lmaWVkLlxuICAgICAgICB0aGlzLmlkID0gdGhpcy5pZDtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHJlLWV2YWx1YXRlIHRoaXMgb24gZXZlcnkgY2hhbmdlIGRldGVjdGlvbiBjeWNsZSwgYmVjYXVzZSB0aGVyZSBhcmUgc29tZVxuICAgICAgICAgICAgLy8gZXJyb3IgdHJpZ2dlcnMgdGhhdCB3ZSBjYW4ndCBzdWJzY3JpYmUgdG8gKGUuZy4gcGFyZW50IGZvcm0gc3VibWlzc2lvbnMpLiBUaGlzIG1lYW5zXG4gICAgICAgICAgICAvLyB0aGF0IHdoYXRldmVyIGxvZ2ljIGlzIGluIGhlcmUgaGFzIHRvIGJlIHN1cGVyIGxlYW4gb3Igd2UgcmlzayBkZXN0cm95aW5nIHRoZSBwZXJmb3JtYW5jZS5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlRXJyb3JTdGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2UgbmVlZCB0byBkaXJ0eS1jaGVjayB0aGUgbmF0aXZlIGVsZW1lbnQncyB2YWx1ZSwgYmVjYXVzZSB0aGVyZSBhcmUgc29tZSBjYXNlcyB3aGVyZVxuICAgICAgICAvLyB3ZSB3b24ndCBiZSBub3RpZmllZCB3aGVuIGl0IGNoYW5nZXMgKGUuZy4gdGhlIGNvbnN1bWVyIGlzbid0IHVzaW5nIGZvcm1zIG9yIHRoZXkncmVcbiAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhbHVlIHVzaW5nIGBlbWl0RXZlbnQ6IGZhbHNlYCkuXG4gICAgICAgIHRoaXMuZGlydHlDaGVja05hdGl2ZVZhbHVlKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlRXJyb3JTdGF0ZSgpIHtcbiAgICAgICAgY29uc3Qgb2xkU3RhdGUgPSB0aGlzLmVycm9yU3RhdGU7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMucGFyZW50Rm9ybUdyb3VwIHx8IHRoaXMucGFyZW50Rm9ybTtcbiAgICAgICAgY29uc3QgbWF0Y2hlciA9IHRoaXMuZXJyb3JTdGF0ZU1hdGNoZXIgfHwgdGhpcy5kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLm5nQ29udHJvbCA/ICh0aGlzLm5nQ29udHJvbC5jb250cm9sIGFzIFVudHlwZWRGb3JtQ29udHJvbCkgOiBudWxsO1xuICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IG1hdGNoZXIuaXNFcnJvclN0YXRlKGNvbnRyb2wsIHBhcmVudCk7XG5cbiAgICAgICAgaWYgKG5ld1N0YXRlICE9PSBvbGRTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5lcnJvclN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRm9jdXNlcyB0aGUgaW5wdXQuICovXG4gICAgZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgb25CbHVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvY3VzQ2hhbmdlZChmYWxzZSk7XG5cbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sPy5jb250cm9sKSB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5uZ0NvbnRyb2wuY29udHJvbDtcblxuICAgICAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIChjb250cm9sLnN0YXR1c0NoYW5nZXMgYXMgRXZlbnRFbWl0dGVyPHN0cmluZz4pLmVtaXQoY29udHJvbC5zdGF0dXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIENhbGxiYWNrIGZvciB0aGUgY2FzZXMgd2hlcmUgdGhlIGZvY3VzZWQgc3RhdGUgb2YgdGhlIGlucHV0IGNoYW5nZXMuICovXG4gICAgZm9jdXNDaGFuZ2VkKGlzRm9jdXNlZDogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5mb2N1c2VkICE9PSBpc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZCA9IGlzRm9jdXNlZDtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgS2JxRm9ybUZpZWxkQ29udHJvbC5cbiAgICAgKiBAZG9jcy1wcml2YXRlXG4gICAgICovXG4gICAgZ2V0IGVtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNOZXZlckVtcHR5KCkgJiYgIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlICYmICF0aGlzLmlzQmFkSW5wdXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIEticUZvcm1GaWVsZENvbnRyb2wuXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIG9uQ29udGFpbmVyQ2xpY2soKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogRG9lcyBzb21lIG1hbnVhbCBkaXJ0eSBjaGVja2luZyBvbiB0aGUgbmF0aXZlIGlucHV0IGB2YWx1ZWAgcHJvcGVydHkuICovXG4gICAgcHJvdGVjdGVkIGRpcnR5Q2hlY2tOYXRpdmVWYWx1ZSgpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLnZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLnByZXZpb3VzTmF0aXZlVmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzTmF0aXZlVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBNYWtlIHN1cmUgdGhlIGlucHV0IGlzIGEgc3VwcG9ydGVkIHR5cGUuICovXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRlVHlwZSgpIHtcbiAgICAgICAgaWYgKEtCUV9JTlBVVF9JTlZBTElEX1RZUEVTLmluZGV4T2YodGhpcy5fdHlwZSkgPiAtMSkge1xuICAgICAgICAgICAgdGhyb3cgZ2V0S2JxSW5wdXRVbnN1cHBvcnRlZFR5cGVFcnJvcih0aGlzLl90eXBlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDaGVja3Mgd2hldGhlciB0aGUgaW5wdXQgdHlwZSBpcyBvbmUgb2YgdGhlIHR5cGVzIHRoYXQgYXJlIG5ldmVyIGVtcHR5LiAqL1xuICAgIHByb3RlY3RlZCBpc05ldmVyRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5ldmVyRW1wdHlJbnB1dFR5cGVzLmluZGV4T2YodGhpcy5fdHlwZSkgPiAtMTtcbiAgICB9XG5cbiAgICAvKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGlucHV0IGlzIGludmFsaWQgYmFzZWQgb24gdGhlIG5hdGl2ZSB2YWxpZGF0aW9uLiAqL1xuICAgIHByb3RlY3RlZCBpc0JhZElucHV0KCkge1xuICAgICAgICAvLyBUaGUgYHZhbGlkaXR5YCBwcm9wZXJ0eSB3b24ndCBiZSBwcmVzZW50IG9uIHBsYXRmb3JtLXNlcnZlci5cbiAgICAgICAgY29uc3QgdmFsaWRpdHkgPSAodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsaWRpdHk7XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkaXR5Py5iYWRJbnB1dDtcbiAgICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnaW5wdXRba2JxSW5wdXRNb25vc3BhY2VdJyxcbiAgICBleHBvcnRBczogJ0ticUlucHV0TW9ub3NwYWNlJyxcbiAgICBob3N0OiB7IGNsYXNzOiAna2JxLWlucHV0X21vbm9zcGFjZScgfVxufSlcbmV4cG9ydCBjbGFzcyBLYnFJbnB1dE1vbm8ge31cbiJdfQ==
@@ -1,16 +1,12 @@
1
1
  import { FocusMonitor } from '@angular/cdk/a11y';
2
- import { booleanAttribute, ChangeDetectorRef, ContentChild, Directive, ElementRef, Input } from '@angular/core';
3
- import { mixinDisabled, mixinTabIndex } from '@koobiq/components/core';
2
+ import { booleanAttribute, ChangeDetectorRef, ContentChild, ContentChildren, DestroyRef, Directive, ElementRef, forwardRef, inject, Input, numberAttribute, QueryList, Renderer2 } from '@angular/core';
3
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
+ import { getNodesWithoutComments, leftIconClassName, rightIconClassName } from '@koobiq/components/core';
4
5
  import { KbqIcon } from '@koobiq/components/icon';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "@angular/cdk/a11y";
7
- /** @docs-private */
8
- export class KbqLinkBase {
9
- }
10
- /** @docs-private */
11
- export const KbqLinkMixinBase = mixinTabIndex(mixinDisabled(KbqLinkBase));
12
8
  export const baseURLRegex = /^http(s)?:\/\//;
13
- export class KbqLink extends KbqLinkMixinBase {
9
+ export class KbqLink {
14
10
  /** Whether the link is disabled. */
15
11
  get disabled() {
16
12
  return this._disabled;
@@ -21,6 +17,12 @@ export class KbqLink extends KbqLinkMixinBase {
21
17
  this.changeDetector.markForCheck();
22
18
  }
23
19
  }
20
+ get tabIndex() {
21
+ return this.disabled ? -1 : this._tabIndex;
22
+ }
23
+ set tabIndex(value) {
24
+ this._tabIndex = value;
25
+ }
24
26
  get hasIcon() {
25
27
  return !!this.icon;
26
28
  }
@@ -30,16 +32,37 @@ export class KbqLink extends KbqLinkMixinBase {
30
32
  this.updatePrintUrl();
31
33
  }
32
34
  constructor(elementRef, focusMonitor, changeDetector) {
33
- super();
34
35
  this.elementRef = elementRef;
35
36
  this.focusMonitor = focusMonitor;
36
37
  this.changeDetector = changeDetector;
38
+ this.renderer = inject(Renderer2);
39
+ this.destroyRef = inject(DestroyRef);
40
+ this.nativeElement = inject(ElementRef).nativeElement;
37
41
  this._disabled = false;
42
+ this._tabIndex = 0;
38
43
  this.pseudo = false;
39
44
  this.noUnderline = false;
40
45
  this.big = false;
41
46
  this.compact = false;
42
47
  this.useVisited = false;
48
+ this.updateClassModifierForIcons = () => {
49
+ this.icons.forEach(({ nativeElement }) => {
50
+ this.renderer.removeClass(nativeElement, leftIconClassName);
51
+ this.renderer.removeClass(nativeElement, rightIconClassName);
52
+ });
53
+ const filteredNodesWithoutComments = getNodesWithoutComments(this.nativeElement.childNodes);
54
+ if (this.icons.length && filteredNodesWithoutComments.length > 1) {
55
+ this.icons.forEach(({ nativeElement }) => {
56
+ const iconIndex = filteredNodesWithoutComments.findIndex((node) => node === nativeElement);
57
+ if (iconIndex === 0) {
58
+ this.renderer.addClass(nativeElement, leftIconClassName);
59
+ }
60
+ if (iconIndex === filteredNodesWithoutComments.length - 1) {
61
+ this.renderer.addClass(nativeElement, rightIconClassName);
62
+ }
63
+ });
64
+ }
65
+ };
43
66
  this.updatePrintUrl();
44
67
  }
45
68
  ngAfterViewInit() {
@@ -54,20 +77,23 @@ export class KbqLink extends KbqLinkMixinBase {
54
77
  getHostElement() {
55
78
  return this.elementRef.nativeElement;
56
79
  }
80
+ ngAfterContentInit() {
81
+ this.updateClassModifierForIcons();
82
+ this.icons.changes.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(this.updateClassModifierForIcons);
83
+ }
57
84
  updatePrintUrl() {
58
85
  Promise.resolve().then(() => {
59
86
  this.printUrl = this._print || this.getHostElement().href?.replace(baseURLRegex, '');
60
87
  });
61
88
  }
62
89
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqLink, deps: [{ token: i0.ElementRef }, { token: i1.FocusMonitor }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
63
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.6", type: KbqLink, selector: "[kbq-link]", inputs: { tabIndex: "tabIndex", disabled: ["disabled", "disabled", booleanAttribute], pseudo: ["pseudo", "pseudo", booleanAttribute], noUnderline: ["noUnderline", "noUnderline", booleanAttribute], big: ["big", "big", booleanAttribute], compact: ["compact", "compact", booleanAttribute], useVisited: ["useVisited", "useVisited", booleanAttribute], print: "print" }, host: { properties: { "class.kbq-link_no-underline": "noUnderline", "class.kbq-link_use-visited": "useVisited", "class.kbq-link_big": "big", "class.kbq-link_compact": "compact", "class.kbq-link_pseudo": "pseudo", "class.kbq-link_print": "printMode", "class.kbq-text-only": "!hasIcon", "class.kbq-text-with-icon": "hasIcon", "class.kbq-disabled": "disabled || null", "attr.disabled": "disabled || null", "attr.tabindex": "tabIndex", "attr.print": "printUrl" }, classAttribute: "kbq-link" }, queries: [{ propertyName: "icon", first: true, predicate: KbqIcon, descendants: true }], exportAs: ["kbqLink"], usesInheritance: true, ngImport: i0 }); }
90
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.6", type: KbqLink, selector: "[kbq-link]", inputs: { disabled: ["disabled", "disabled", booleanAttribute], tabIndex: ["tabIndex", "tabIndex", numberAttribute], pseudo: ["pseudo", "pseudo", booleanAttribute], noUnderline: ["noUnderline", "noUnderline", booleanAttribute], big: ["big", "big", booleanAttribute], compact: ["compact", "compact", booleanAttribute], useVisited: ["useVisited", "useVisited", booleanAttribute], print: "print" }, host: { properties: { "class.kbq-link_no-underline": "noUnderline", "class.kbq-link_use-visited": "useVisited", "class.kbq-link_big": "big", "class.kbq-link_compact": "compact", "class.kbq-link_pseudo": "pseudo", "class.kbq-link_print": "printMode", "class.kbq-text-only": "!hasIcon", "class.kbq-text-with-icon": "hasIcon", "class.kbq-disabled": "disabled", "attr.disabled": "disabled || null", "attr.tabindex": "tabIndex", "attr.print": "printUrl" }, classAttribute: "kbq-link" }, queries: [{ propertyName: "icon", first: true, predicate: KbqIcon, descendants: true }, { propertyName: "icons", predicate: i0.forwardRef(() => KbqIcon), read: ElementRef }], exportAs: ["kbqLink"], ngImport: i0 }); }
64
91
  }
65
92
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KbqLink, decorators: [{
66
93
  type: Directive,
67
94
  args: [{
68
95
  selector: '[kbq-link]',
69
96
  exportAs: 'kbqLink',
70
- inputs: ['tabIndex'],
71
97
  host: {
72
98
  class: 'kbq-link',
73
99
  '[class.kbq-link_no-underline]': 'noUnderline',
@@ -78,15 +104,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
78
104
  '[class.kbq-link_print]': 'printMode',
79
105
  '[class.kbq-text-only]': '!hasIcon',
80
106
  '[class.kbq-text-with-icon]': 'hasIcon',
81
- '[class.kbq-disabled]': 'disabled || null',
107
+ '[class.kbq-disabled]': 'disabled',
82
108
  '[attr.disabled]': 'disabled || null',
83
109
  '[attr.tabindex]': 'tabIndex',
84
110
  '[attr.print]': 'printUrl'
85
111
  }
86
112
  }]
87
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.FocusMonitor }, { type: i0.ChangeDetectorRef }], propDecorators: { disabled: [{
113
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.FocusMonitor }, { type: i0.ChangeDetectorRef }], propDecorators: { icons: [{
114
+ type: ContentChildren,
115
+ args: [forwardRef(() => KbqIcon), { read: ElementRef }]
116
+ }], disabled: [{
88
117
  type: Input,
89
118
  args: [{ transform: booleanAttribute }]
119
+ }], tabIndex: [{
120
+ type: Input,
121
+ args: [{ transform: numberAttribute }]
90
122
  }], pseudo: [{
91
123
  type: Input,
92
124
  args: [{ transform: booleanAttribute }]
@@ -108,4 +140,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
108
140
  type: ContentChild,
109
141
  args: [KbqIcon]
110
142
  }] } });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2xpbmsvbGluay5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFFUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBS0gsYUFBYSxFQUNiLGFBQWEsRUFDaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQUVsRCxvQkFBb0I7QUFDcEIsTUFBTSxPQUFPLFdBQVc7Q0FBRztBQUUzQixvQkFBb0I7QUFDcEIsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQTBELGFBQWEsQ0FDaEcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUM3QixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDO0FBc0I3QyxNQUFNLE9BQU8sT0FBUSxTQUFRLGdCQUFnQjtJQUN6QyxvQ0FBb0M7SUFDcEMsSUFDSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3ZCLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0lBY0QsSUFBSSxPQUFPO1FBQ1AsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRUQs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QUU7Z0JBRUUsT0FBTztzQkFBOUMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFFRSxVQUFVO3NCQUFqRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQU9sQyxLQUFLO3NCQURSLEtBQUs7Z0JBZWlCLElBQUk7c0JBQTFCLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvY3VzTW9uaXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIENhbkRpc2FibGUsXG4gICAgQ2FuRGlzYWJsZUN0b3IsXG4gICAgSGFzVGFiSW5kZXgsXG4gICAgSGFzVGFiSW5kZXhDdG9yLFxuICAgIG1peGluRGlzYWJsZWQsXG4gICAgbWl4aW5UYWJJbmRleFxufSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvY29yZSc7XG5pbXBvcnQgeyBLYnFJY29uIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2ljb24nO1xuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGNsYXNzIEticUxpbmtCYXNlIHt9XG5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5leHBvcnQgY29uc3QgS2JxTGlua01peGluQmFzZTogSGFzVGFiSW5kZXhDdG9yICYgQ2FuRGlzYWJsZUN0b3IgJiB0eXBlb2YgS2JxTGlua0Jhc2UgPSBtaXhpblRhYkluZGV4KFxuICAgIG1peGluRGlzYWJsZWQoS2JxTGlua0Jhc2UpXG4pO1xuXG5leHBvcnQgY29uc3QgYmFzZVVSTFJlZ2V4ID0gL15odHRwKHMpPzpcXC9cXC8vO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1trYnEtbGlua10nLFxuICAgIGV4cG9ydEFzOiAna2JxTGluaycsXG4gICAgaW5wdXRzOiBbJ3RhYkluZGV4J10sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ticS1saW5rJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtbGlua19uby11bmRlcmxpbmVdJzogJ25vVW5kZXJsaW5lJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtbGlua191c2UtdmlzaXRlZF0nOiAndXNlVmlzaXRlZCcsXG4gICAgICAgICdbY2xhc3Mua2JxLWxpbmtfYmlnXSc6ICdiaWcnLFxuICAgICAgICAnW2NsYXNzLmticS1saW5rX2NvbXBhY3RdJzogJ2NvbXBhY3QnLFxuICAgICAgICAnW2NsYXNzLmticS1saW5rX3BzZXVkb10nOiAncHNldWRvJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtbGlua19wcmludF0nOiAncHJpbnRNb2RlJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtdGV4dC1vbmx5XSc6ICchaGFzSWNvbicsXG4gICAgICAgICdbY2xhc3Mua2JxLXRleHQtd2l0aC1pY29uXSc6ICdoYXNJY29uJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtZGlzYWJsZWRdJzogJ2Rpc2FibGVkIHx8IG51bGwnLFxuICAgICAgICAnW2F0dHIuZGlzYWJsZWRdJzogJ2Rpc2FibGVkIHx8IG51bGwnLFxuICAgICAgICAnW2F0dHIudGFiaW5kZXhdJzogJ3RhYkluZGV4JyxcbiAgICAgICAgJ1thdHRyLnByaW50XSc6ICdwcmludFVybCdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIEticUxpbmsgZXh0ZW5kcyBLYnFMaW5rTWl4aW5CYXNlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBIYXNUYWJJbmRleCwgQ2FuRGlzYWJsZSB7XG4gICAgLyoqIFdoZXRoZXIgdGhlIGxpbmsgaXMgZGlzYWJsZWQuICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBwc2V1ZG86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBub1VuZGVybGluZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGJpZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNvbXBhY3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSB1c2VWaXNpdGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBnZXQgaGFzSWNvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5pY29uO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IHByaW50KHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5wcmludE1vZGUgPSB2YWx1ZSAhPT0gbnVsbDtcblxuICAgICAgICB0aGlzLl9wcmludCA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMudXBkYXRlUHJpbnRVcmwoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9wcmludDogc3RyaW5nO1xuXG4gICAgcHJpbnRNb2RlOiBib29sZWFuO1xuXG4gICAgcHJpbnRVcmw6IHN0cmluZztcblxuICAgIEBDb250ZW50Q2hpbGQoS2JxSWNvbikgaWNvbjogS2JxSWNvbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVQcmludFVybCgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRIb3N0RWxlbWVudCgpLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgZ2V0SG9zdEVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVByaW50VXJsKCkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucHJpbnRVcmwgPSB0aGlzLl9wcmludCB8fCB0aGlzLmdldEhvc3RFbGVtZW50KCkuaHJlZj8ucmVwbGFjZShiYXNlVVJMUmVnZXgsICcnKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2xpbmsvbGluay5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFHSCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsZUFBZSxFQUVmLFNBQVMsRUFDVCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7QUFFbEQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDO0FBcUI3QyxNQUFNLE9BQU8sT0FBTztJQU9oQixvQ0FBb0M7SUFDcEMsSUFDSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxLQUFjO1FBQ3ZCLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3ZDLENBQUM7SUFDTCxDQUFDO0lBSUQsSUFDSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMs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QkFBMEIsRUFBRSxTQUFTO3dCQUNyQyx5QkFBeUIsRUFBRSxRQUFRO3dCQUNuQyx3QkFBd0IsRUFBRSxXQUFXO3dCQUNyQyx1QkFBdUIsRUFBRSxVQUFVO3dCQUNuQyw0QkFBNEIsRUFBRSxTQUFTO3dCQUN2QyxzQkFBc0IsRUFBRSxVQUFVO3dCQUNsQyxpQkFBaUIsRUFBRSxrQkFBa0I7d0JBQ3JDLGlCQUFpQixFQUFFLFVBQVU7d0JBQzdCLGNBQWMsRUFBRSxVQUFVO3FCQUM3QjtpQkFDSjswSUFNcUUsS0FBSztzQkFBdEUsZUFBZTt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUk1RCxRQUFRO3NCQURYLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBZWxDLFFBQVE7c0JBRFgsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUU7Z0JBV0csTUFBTTtzQkFBN0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFFRSxXQUFXO3NCQUFsRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUVFLEdBQUc7c0JBQTFDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBRUUsT0FBTztzQkFBOUMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFFRSxVQUFVO3NCQUFqRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQU9sQyxLQUFLO3NCQURSLEtBQUs7Z0JBZWlCLElBQUk7c0JBQTFCLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvY3VzTW9uaXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEZXN0cm95UmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIGZvcndhcmRSZWYsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIG51bWJlckF0dHJpYnV0ZSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGdldE5vZGVzV2l0aG91dENvbW1lbnRzLCBsZWZ0SWNvbkNsYXNzTmFtZSwgcmlnaHRJY29uQ2xhc3NOYW1lIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2NvcmUnO1xuaW1wb3J0IHsgS2JxSWNvbiB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9pY29uJztcblxuZXhwb3J0IGNvbnN0IGJhc2VVUkxSZWdleCA9IC9eaHR0cChzKT86XFwvXFwvLztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdba2JxLWxpbmtdJyxcbiAgICBleHBvcnRBczogJ2ticUxpbmsnLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdrYnEtbGluaycsXG4gICAgICAgICdbY2xhc3Mua2JxLWxpbmtfbm8tdW5kZXJsaW5lXSc6ICdub1VuZGVybGluZScsXG4gICAgICAgICdbY2xhc3Mua2JxLWxpbmtfdXNlLXZpc2l0ZWRdJzogJ3VzZVZpc2l0ZWQnLFxuICAgICAgICAnW2NsYXNzLmticS1saW5rX2JpZ10nOiAnYmlnJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtbGlua19jb21wYWN0XSc6ICdjb21wYWN0JyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtbGlua19wc2V1ZG9dJzogJ3BzZXVkbycsXG4gICAgICAgICdbY2xhc3Mua2JxLWxpbmtfcHJpbnRdJzogJ3ByaW50TW9kZScsXG4gICAgICAgICdbY2xhc3Mua2JxLXRleHQtb25seV0nOiAnIWhhc0ljb24nLFxuICAgICAgICAnW2NsYXNzLmticS10ZXh0LXdpdGgtaWNvbl0nOiAnaGFzSWNvbicsXG4gICAgICAgICdbY2xhc3Mua2JxLWRpc2FibGVkXSc6ICdkaXNhYmxlZCcsXG4gICAgICAgICdbYXR0ci5kaXNhYmxlZF0nOiAnZGlzYWJsZWQgfHwgbnVsbCcsXG4gICAgICAgICdbYXR0ci50YWJpbmRleF0nOiAndGFiSW5kZXgnLFxuICAgICAgICAnW2F0dHIucHJpbnRdJzogJ3ByaW50VXJsJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgS2JxTGluayBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG5hdGl2ZUVsZW1lbnQgPSBpbmplY3QoRWxlbWVudFJlZikubmF0aXZlRWxlbWVudDtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBLYnFJY29uKSwgeyByZWFkOiBFbGVtZW50UmVmIH0pIGljb25zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgICAvKiogV2hldGhlciB0aGUgbGluayBpcyBkaXNhYmxlZC4gKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcbiAgICBnZXQgdGFiSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAtMSA6IHRoaXMuX3RhYkluZGV4O1xuICAgIH1cblxuICAgIHNldCB0YWJJbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3RhYkluZGV4ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdGFiSW5kZXggPSAwO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHBzZXVkbzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIG5vVW5kZXJsaW5lOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYmlnOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY29tcGFjdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHVzZVZpc2l0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGdldCBoYXNJY29uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmljb247XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBzZXQgcHJpbnQodmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLnByaW50TW9kZSA9IHZhbHVlICE9PSBudWxsO1xuXG4gICAgICAgIHRoaXMuX3ByaW50ID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy51cGRhdGVQcmludFVybCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ByaW50OiBzdHJpbmc7XG5cbiAgICBwcmludE1vZGU6IGJvb2xlYW47XG5cbiAgICBwcmludFVybDogc3RyaW5nO1xuXG4gICAgQENvbnRlbnRDaGlsZChLYnFJY29uKSBpY29uOiBLYnFJY29uO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBmb2N1c01vbml0b3I6IEZvY3VzTW9uaXRvcixcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgICApIHtcbiAgICAgICAgdGhpcy51cGRhdGVQcmludFVybCgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb2N1c01vbml0b3IubW9uaXRvcih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZm9jdXNNb25pdG9yLnN0b3BNb25pdG9yaW5nKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRIb3N0RWxlbWVudCgpLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgZ2V0SG9zdEVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ2xhc3NNb2RpZmllckZvckljb25zKCk7XG5cbiAgICAgICAgdGhpcy5pY29ucy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSh0aGlzLnVwZGF0ZUNsYXNzTW9kaWZpZXJGb3JJY29ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVDbGFzc01vZGlmaWVyRm9ySWNvbnMgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuaWNvbnMuZm9yRWFjaCgoeyBuYXRpdmVFbGVtZW50IH0pID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MobmF0aXZlRWxlbWVudCwgbGVmdEljb25DbGFzc05hbWUpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhuYXRpdmVFbGVtZW50LCByaWdodEljb25DbGFzc05hbWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBmaWx0ZXJlZE5vZGVzV2l0aG91dENvbW1lbnRzID0gZ2V0Tm9kZXNXaXRob3V0Q29tbWVudHModGhpcy5uYXRpdmVFbGVtZW50LmNoaWxkTm9kZXMgYXMgTm9kZUxpc3QpO1xuXG4gICAgICAgIGlmICh0aGlzLmljb25zLmxlbmd0aCAmJiBmaWx0ZXJlZE5vZGVzV2l0aG91dENvbW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMuaWNvbnMuZm9yRWFjaCgoeyBuYXRpdmVFbGVtZW50IH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpY29uSW5kZXggPSBmaWx0ZXJlZE5vZGVzV2l0aG91dENvbW1lbnRzLmZpbmRJbmRleCgobm9kZSkgPT4gbm9kZSA9PT0gbmF0aXZlRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaWNvbkluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MobmF0aXZlRWxlbWVudCwgbGVmdEljb25DbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpY29uSW5kZXggPT09IGZpbHRlcmVkTm9kZXNXaXRob3V0Q29tbWVudHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKG5hdGl2ZUVsZW1lbnQsIHJpZ2h0SWNvbkNsYXNzTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSB1cGRhdGVQcmludFVybCgpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByaW50VXJsID0gdGhpcy5fcHJpbnQgfHwgdGhpcy5nZXRIb3N0RWxlbWVudCgpLmhyZWY/LnJlcGxhY2UoYmFzZVVSTFJlZ2V4LCAnJyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==