desy-angular 6.0.1 → 6.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (513) hide show
  1. package/README.md +21 -21
  2. package/bundles/desy-angular.umd.js +10656 -10656
  3. package/bundles/desy-angular.umd.js.map +1 -1
  4. package/bundles/desy-angular.umd.min.js +1 -1
  5. package/bundles/desy-angular.umd.min.js.map +1 -1
  6. package/desy-angular.d.ts +51 -51
  7. package/desy-angular.metadata.json +1 -1
  8. package/esm2015/desy-angular.js +51 -51
  9. package/esm2015/lib/desy-angular.module.js +38 -38
  10. package/esm2015/lib/desy-buttons/components/button/button.component.js +92 -92
  11. package/esm2015/lib/desy-buttons/components/button-loader/button-loader.component.js +50 -50
  12. package/esm2015/lib/desy-buttons/components/dropdown/dropdown.component.js +111 -111
  13. package/esm2015/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.js +26 -26
  14. package/esm2015/lib/desy-buttons/components/listbox/listbox-label/listbox-label.component.js +14 -14
  15. package/esm2015/lib/desy-buttons/components/listbox/listbox.component.js +265 -265
  16. package/esm2015/lib/desy-buttons/components/pill/pill.component.js +64 -64
  17. package/esm2015/lib/desy-buttons/components/toggle/toggle-off-state/toggle-off-state.component.js +15 -15
  18. package/esm2015/lib/desy-buttons/components/toggle/toggle-on-state/toggle-on-state.component.js +15 -15
  19. package/esm2015/lib/desy-buttons/components/toggle/toggle.component.js +44 -44
  20. package/esm2015/lib/desy-buttons/desy-buttons.module.js +53 -53
  21. package/esm2015/lib/desy-buttons/interfaces/listbox-item-data.js +2 -2
  22. package/esm2015/lib/desy-buttons/interfaces/listbox-label-data.js +2 -2
  23. package/esm2015/lib/desy-commons/components/content/content.component.js +14 -14
  24. package/esm2015/lib/desy-commons/components/description/description.component.js +15 -15
  25. package/esm2015/lib/desy-commons/components/divider/divider.component.js +15 -15
  26. package/esm2015/lib/desy-commons/components/icon/icon.component.js +15 -15
  27. package/esm2015/lib/desy-commons/components/title/title.component.js +14 -14
  28. package/esm2015/lib/desy-commons/desy-commons.module.js +36 -36
  29. package/esm2015/lib/desy-commons/interfaces/content-data.js +2 -2
  30. package/esm2015/lib/desy-commons/interfaces/description-data.js +2 -2
  31. package/esm2015/lib/desy-commons/interfaces/divider-data.js +2 -2
  32. package/esm2015/lib/desy-commons/interfaces/icon-data.js +2 -2
  33. package/esm2015/lib/desy-commons/interfaces/index.js +6 -6
  34. package/esm2015/lib/desy-commons/interfaces/title-data.js +2 -2
  35. package/esm2015/lib/desy-forms/components/character-count/character-count.component.js +109 -109
  36. package/esm2015/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.js +188 -188
  37. package/esm2015/lib/desy-forms/components/checkboxes/checkboxes.component.js +226 -226
  38. package/esm2015/lib/desy-forms/components/date-input/date-input-day/date-input-day.component.js +38 -38
  39. package/esm2015/lib/desy-forms/components/date-input/date-input-divider/date-input-divider.component.js +19 -19
  40. package/esm2015/lib/desy-forms/components/date-input/date-input-item/date-input-item.component.js +13 -13
  41. package/esm2015/lib/desy-forms/components/date-input/date-input-month/date-input-month.component.js +38 -38
  42. package/esm2015/lib/desy-forms/components/date-input/date-input-year/date-input-year.component.js +36 -36
  43. package/esm2015/lib/desy-forms/components/date-input/date-input.component.js +222 -222
  44. package/esm2015/lib/desy-forms/components/error-message/error-message.component.js +28 -28
  45. package/esm2015/lib/desy-forms/components/fieldset/fieldset.component.js +44 -44
  46. package/esm2015/lib/desy-forms/components/fieldset/legend/legend.component.js +16 -16
  47. package/esm2015/lib/desy-forms/components/file-upload/file-upload.component.js +51 -51
  48. package/esm2015/lib/desy-forms/components/form-field/form-field.component.js +103 -103
  49. package/esm2015/lib/desy-forms/components/hint/hint.component.js +27 -27
  50. package/esm2015/lib/desy-forms/components/input/input.component.js +67 -67
  51. package/esm2015/lib/desy-forms/components/input-group/input-group-divider/input-group-divider.component.js +20 -20
  52. package/esm2015/lib/desy-forms/components/input-group/input-group-input/input-group-input.component.js +39 -39
  53. package/esm2015/lib/desy-forms/components/input-group/input-group-item/input-group-item.component.js +13 -13
  54. package/esm2015/lib/desy-forms/components/input-group/input-group-select/input-group-select.component.js +35 -35
  55. package/esm2015/lib/desy-forms/components/input-group/input-group.component.js +179 -179
  56. package/esm2015/lib/desy-forms/components/label/label.component.js +30 -30
  57. package/esm2015/lib/desy-forms/components/radios/radio-item/radio-item.component.js +144 -144
  58. package/esm2015/lib/desy-forms/components/radios/radios.component.js +233 -233
  59. package/esm2015/lib/desy-forms/components/search-bar/search-bar.component.js +45 -45
  60. package/esm2015/lib/desy-forms/components/select/option/option.component.js +17 -17
  61. package/esm2015/lib/desy-forms/components/select/option-group/option-group.component.js +17 -17
  62. package/esm2015/lib/desy-forms/components/select/select-item/select-item.component.js +14 -14
  63. package/esm2015/lib/desy-forms/components/select/select.component.js +64 -64
  64. package/esm2015/lib/desy-forms/components/template-driven-wrapper/template-driven-wrapper.component.js +12 -12
  65. package/esm2015/lib/desy-forms/components/textarea/textarea.component.js +60 -60
  66. package/esm2015/lib/desy-forms/components/tree/interfaces/itree-item.js +3 -3
  67. package/esm2015/lib/desy-forms/components/tree/interfaces/quit-tree-item-focus-options.js +2 -2
  68. package/esm2015/lib/desy-forms/components/tree/tree-checkbox/tree-checkbox.component.js +151 -151
  69. package/esm2015/lib/desy-forms/components/tree/tree-item/tree-item.component.js +370 -370
  70. package/esm2015/lib/desy-forms/components/tree/tree-items-generator/tree-items-generator.component.js +25 -25
  71. package/esm2015/lib/desy-forms/components/tree/tree-sub/tree-sub.component.js +14 -14
  72. package/esm2015/lib/desy-forms/components/tree/tree.component.js +408 -408
  73. package/esm2015/lib/desy-forms/desy-forms.module.js +130 -130
  74. package/esm2015/lib/desy-forms/directives/condition.directive.js +32 -32
  75. package/esm2015/lib/desy-forms/interfaces/accesibility-data.js +2 -2
  76. package/esm2015/lib/desy-forms/interfaces/error-message-data.js +2 -2
  77. package/esm2015/lib/desy-forms/interfaces/fieldset-data.js +2 -2
  78. package/esm2015/lib/desy-forms/interfaces/hint-data.js +2 -2
  79. package/esm2015/lib/desy-forms/interfaces/index.js +13 -13
  80. package/esm2015/lib/desy-forms/interfaces/item-checkbox-data.js +2 -2
  81. package/esm2015/lib/desy-forms/interfaces/item-date-input-data.js +2 -2
  82. package/esm2015/lib/desy-forms/interfaces/item-divider-date-input-data.js +2 -2
  83. package/esm2015/lib/desy-forms/interfaces/item-divider-input-group-data.js +2 -2
  84. package/esm2015/lib/desy-forms/interfaces/item-input-group-data.js +2 -2
  85. package/esm2015/lib/desy-forms/interfaces/item-radio-data.js +2 -2
  86. package/esm2015/lib/desy-forms/interfaces/item-radio-with-template-data.js +2 -2
  87. package/esm2015/lib/desy-forms/interfaces/label-data.js +2 -2
  88. package/esm2015/lib/desy-forms/interfaces/legend-data.js +2 -2
  89. package/esm2015/lib/desy-forms/interfaces/select-item-data.js +2 -2
  90. package/esm2015/lib/desy-modals/components/dialog/dialog.component.js +121 -121
  91. package/esm2015/lib/desy-modals/components/modal/modal-button-loader-primary/modal-button-loader-primary.component.js +20 -20
  92. package/esm2015/lib/desy-modals/components/modal/modal-button-loader-secondary/modal-button-loader-secondary.component.js +19 -19
  93. package/esm2015/lib/desy-modals/components/modal/modal-button-primary/modal-button-primary.component.js +19 -19
  94. package/esm2015/lib/desy-modals/components/modal/modal-button-secondary/modal-button-secondary.component.js +19 -19
  95. package/esm2015/lib/desy-modals/components/modal/modal.component.js +145 -145
  96. package/esm2015/lib/desy-modals/desy-modals.module.js +41 -41
  97. package/esm2015/lib/desy-modals/interfaces/dialog-options.js +2 -2
  98. package/esm2015/lib/desy-modals/interfaces/index.js +8 -8
  99. package/esm2015/lib/desy-modals/interfaces/modal-button-data.js +2 -2
  100. package/esm2015/lib/desy-modals/interfaces/modal-data.js +2 -2
  101. package/esm2015/lib/desy-modals/interfaces/modal-icon-data.js +2 -2
  102. package/esm2015/lib/desy-modals/interfaces/modal-options.js +2 -2
  103. package/esm2015/lib/desy-modals/interfaces/open-dialog-result.js +2 -2
  104. package/esm2015/lib/desy-modals/services/dialog.service.js +117 -117
  105. package/esm2015/lib/desy-nav/components/breadcrumbs/breadcrumbs-item/breadcrumbs-item.component.js +15 -15
  106. package/esm2015/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.js +42 -42
  107. package/esm2015/lib/desy-nav/components/error-summary/error-summary-item/error-summary-item.component.js +15 -15
  108. package/esm2015/lib/desy-nav/components/error-summary/error-summary.component.js +46 -46
  109. package/esm2015/lib/desy-nav/components/footer/footer-meta/footer-meta-item/footer-meta-item.component.js +16 -16
  110. package/esm2015/lib/desy-nav/components/footer/footer-meta/footer-meta.component.js +23 -23
  111. package/esm2015/lib/desy-nav/components/footer/footer-navigation/footer-navigation-item/footer-navigation-item.component.js +16 -16
  112. package/esm2015/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.js +16 -16
  113. package/esm2015/lib/desy-nav/components/footer/footer.component.js +52 -52
  114. package/esm2015/lib/desy-nav/components/header/header-custom-navigation/header-custom-navigation.component.js +11 -11
  115. package/esm2015/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.js +36 -36
  116. package/esm2015/lib/desy-nav/components/header/header-navigation/header-navigation-item/header-navigation-item.component.js +19 -19
  117. package/esm2015/lib/desy-nav/components/header/header-navigation/header-navigation.component.js +29 -29
  118. package/esm2015/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.js +22 -22
  119. package/esm2015/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component.js +11 -11
  120. package/esm2015/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.js +88 -88
  121. package/esm2015/lib/desy-nav/components/header/header-subnav/header-subnav.component.js +34 -34
  122. package/esm2015/lib/desy-nav/components/header/header.component.js +66 -66
  123. package/esm2015/lib/desy-nav/components/menu-horizontal/menu-horizontal-item/menu-horizontal-item.component.js +28 -28
  124. package/esm2015/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.js +68 -68
  125. package/esm2015/lib/desy-nav/components/menu-navigation/components/menu-navigation-item/menu-navigation-item.component.js +35 -35
  126. package/esm2015/lib/desy-nav/components/menu-navigation/components/menu-navigation-subitem/menu-navigation-subitem.component.js +31 -31
  127. package/esm2015/lib/desy-nav/components/menu-navigation/menu-navigation.component.js +568 -568
  128. package/esm2015/lib/desy-nav/components/menu-vertical/menu-vertical-item/menu-vertical-item.component.js +32 -32
  129. package/esm2015/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub/menu-vertical-item-sub.component.js +16 -16
  130. package/esm2015/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component.js +24 -24
  131. package/esm2015/lib/desy-nav/components/menu-vertical/menu-vertical.component.js +89 -89
  132. package/esm2015/lib/desy-nav/components/menubar/components/menubar-item/menubar-item.component.js +36 -36
  133. package/esm2015/lib/desy-nav/components/menubar/components/menubar-label/menubar-label.component.js +14 -14
  134. package/esm2015/lib/desy-nav/components/menubar/components/menubar-subitem/menubar-subitem.component.js +29 -29
  135. package/esm2015/lib/desy-nav/components/menubar/components/menubar-subsubitem/menubar-subsubitem.component.js +23 -23
  136. package/esm2015/lib/desy-nav/components/menubar/directives/menubaritem.directive.js +37 -37
  137. package/esm2015/lib/desy-nav/components/menubar/menubar.component.js +672 -672
  138. package/esm2015/lib/desy-nav/components/nav/nav-item/nav-item.component.js +30 -30
  139. package/esm2015/lib/desy-nav/components/nav/nav.component.js +105 -105
  140. package/esm2015/lib/desy-nav/components/notification/notification-item/notification-item.component.js +18 -18
  141. package/esm2015/lib/desy-nav/components/notification/notification.component.js +102 -102
  142. package/esm2015/lib/desy-nav/components/skip-link/skip-link.component.js +33 -33
  143. package/esm2015/lib/desy-nav/desy-nav.module.js +136 -136
  144. package/esm2015/lib/desy-nav/interfaces/breadcrumbs.data.js +2 -2
  145. package/esm2015/lib/desy-nav/interfaces/error-summary-data.js +2 -2
  146. package/esm2015/lib/desy-nav/interfaces/footer-data.js +2 -2
  147. package/esm2015/lib/desy-nav/interfaces/header-dropdown-data.js +2 -2
  148. package/esm2015/lib/desy-nav/interfaces/header-navigation-data.js +2 -2
  149. package/esm2015/lib/desy-nav/interfaces/header-navigation-item-data.js +2 -2
  150. package/esm2015/lib/desy-nav/interfaces/header-offcanvas-data.js +2 -2
  151. package/esm2015/lib/desy-nav/interfaces/header-subnav-data.js +2 -2
  152. package/esm2015/lib/desy-nav/interfaces/index.js +20 -20
  153. package/esm2015/lib/desy-nav/interfaces/menu-horizontal-item-data.js +2 -2
  154. package/esm2015/lib/desy-nav/interfaces/menu-horizontal-item-event-data.js +2 -2
  155. package/esm2015/lib/desy-nav/interfaces/menu-navigation-item-sub-item-sub-item.js +2 -2
  156. package/esm2015/lib/desy-nav/interfaces/menu-navigation-item-sub-item.js +2 -2
  157. package/esm2015/lib/desy-nav/interfaces/menu-navigation.js +2 -2
  158. package/esm2015/lib/desy-nav/interfaces/menu-vertical-items-data.js +2 -2
  159. package/esm2015/lib/desy-nav/interfaces/menu-vertical-sub-data.js +2 -2
  160. package/esm2015/lib/desy-nav/interfaces/menu-vertical-sub-items-data.js +2 -2
  161. package/esm2015/lib/desy-nav/interfaces/menubar-item-sub-item-sub-item.js +2 -2
  162. package/esm2015/lib/desy-nav/interfaces/menubar-item-sub-item.js +2 -2
  163. package/esm2015/lib/desy-nav/interfaces/menubar-item-sub.js +2 -2
  164. package/esm2015/lib/desy-nav/interfaces/menubar-item.js +2 -2
  165. package/esm2015/lib/desy-nav/interfaces/nav-item-event.data.js +2 -2
  166. package/esm2015/lib/desy-nav/interfaces/nav-item.data.js +2 -2
  167. package/esm2015/lib/desy-nav/interfaces/notification-items-data.js +2 -2
  168. package/esm2015/lib/desy-nav/interfaces/notification-options.js +2 -2
  169. package/esm2015/lib/desy-pagination/components/pagination/pagination.component.js +138 -138
  170. package/esm2015/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.js +15 -15
  171. package/esm2015/lib/desy-pagination/components/pagination-listbox-label/pagination-listbox-label.component.js +14 -14
  172. package/esm2015/lib/desy-pagination/desy-pagination.module.js +31 -31
  173. package/esm2015/lib/desy-pagination/interfaces/index.js +1 -1
  174. package/esm2015/lib/desy-pagination/interfaces/pagination-item.data.js +2 -2
  175. package/esm2015/lib/desy-tables/components/table/components/table-caption.component.js +14 -14
  176. package/esm2015/lib/desy-tables/components/table/components/table-cell.component.js +17 -17
  177. package/esm2015/lib/desy-tables/components/table/components/table-header.component.js +14 -14
  178. package/esm2015/lib/desy-tables/components/table/components/table-row.component.js +14 -14
  179. package/esm2015/lib/desy-tables/components/table/table.component.js +55 -55
  180. package/esm2015/lib/desy-tables/components/table-advanced/components/table-advanced-header-cell.component.js +33 -33
  181. package/esm2015/lib/desy-tables/components/table-advanced/components/table-advanced-header.component.js +14 -14
  182. package/esm2015/lib/desy-tables/components/table-advanced/components/table-advanced-row-cell.component.js +17 -17
  183. package/esm2015/lib/desy-tables/components/table-advanced/components/table-advanced-row.component.js +20 -20
  184. package/esm2015/lib/desy-tables/components/table-advanced/components/table-advanced-select.component.js +22 -22
  185. package/esm2015/lib/desy-tables/components/table-advanced/table-advanced.component.js +316 -316
  186. package/esm2015/lib/desy-tables/desy-tables.module.js +64 -64
  187. package/esm2015/lib/desy-tables/directives/cell.directive.js +26 -26
  188. package/esm2015/lib/desy-tables/directives/focus-clicked-cell.directive.js +78 -78
  189. package/esm2015/lib/desy-tables/directives/row.directive.js +24 -24
  190. package/esm2015/lib/desy-tables/interfaces/cell-data.js +2 -2
  191. package/esm2015/lib/desy-tables/interfaces/head-cell-data.js +7 -7
  192. package/esm2015/lib/desy-tables/interfaces/index.js +5 -5
  193. package/esm2015/lib/desy-tables/interfaces/recalculate-table-params.js +2 -2
  194. package/esm2015/lib/desy-tables/interfaces/row-data.js +2 -2
  195. package/esm2015/lib/desy-tables/interfaces/wrapper-data.js +2 -2
  196. package/esm2015/lib/desy-views/components/accordion/accordion-header/accordion-header.component.js +14 -14
  197. package/esm2015/lib/desy-views/components/accordion/accordion-item/accordion-item.component.js +43 -43
  198. package/esm2015/lib/desy-views/components/accordion/accordion.component.js +153 -153
  199. package/esm2015/lib/desy-views/components/accordion-history/accordion-history-item/accordion-history-item.component.js +31 -31
  200. package/esm2015/lib/desy-views/components/accordion-history/accordion-history.component.js +15 -15
  201. package/esm2015/lib/desy-views/components/accordion-history/accordion-item-hide-button/accordion-item-hide-button.component.js +14 -14
  202. package/esm2015/lib/desy-views/components/accordion-history/accordion-item-show-button/accordion-item-show-button.component.js +14 -14
  203. package/esm2015/lib/desy-views/components/alert/alert.component.js +75 -75
  204. package/esm2015/lib/desy-views/components/collapsible/collapsible.component.js +55 -55
  205. package/esm2015/lib/desy-views/components/description-list/definition/definition.component.js +15 -15
  206. package/esm2015/lib/desy-views/components/description-list/description-item/description-item.component.js +26 -26
  207. package/esm2015/lib/desy-views/components/description-list/description-list.component.js +22 -22
  208. package/esm2015/lib/desy-views/components/description-list/term/term.component.js +15 -15
  209. package/esm2015/lib/desy-views/components/details/details.component.js +20 -20
  210. package/esm2015/lib/desy-views/components/item/item-content-bottom/item-content-bottom.component.js +14 -14
  211. package/esm2015/lib/desy-views/components/item/item-content-right/item-content-right.component.js +11 -11
  212. package/esm2015/lib/desy-views/components/item/item-item/item-item.component.js +11 -11
  213. package/esm2015/lib/desy-views/components/item/item.component.js +87 -87
  214. package/esm2015/lib/desy-views/components/media-object/media-object-figure/media-object-figure.component.js +11 -11
  215. package/esm2015/lib/desy-views/components/media-object/media-object.component.js +67 -67
  216. package/esm2015/lib/desy-views/components/spinner/spinner.component.js +45 -45
  217. package/esm2015/lib/desy-views/components/status/status.component.js +58 -58
  218. package/esm2015/lib/desy-views/components/status-item/status-item.component.js +86 -86
  219. package/esm2015/lib/desy-views/components/tabs/panel/panel.component.js +15 -15
  220. package/esm2015/lib/desy-views/components/tabs/tab-item/tab-item.component.js +28 -28
  221. package/esm2015/lib/desy-views/components/tabs/tabs.component.js +150 -150
  222. package/esm2015/lib/desy-views/components/tooltip/tooltip-content/tooltip-content.component.js +11 -11
  223. package/esm2015/lib/desy-views/components/tooltip/tooltip.component.js +155 -155
  224. package/esm2015/lib/desy-views/desy-views.module.js +108 -108
  225. package/esm2015/lib/desy-views/interfaces/accordion-header.data.js +2 -2
  226. package/esm2015/lib/desy-views/interfaces/accordion-item.data.js +2 -2
  227. package/esm2015/lib/desy-views/interfaces/alert-options.js +2 -2
  228. package/esm2015/lib/desy-views/interfaces/description-item.data.js +2 -2
  229. package/esm2015/lib/desy-views/interfaces/index.js +11 -11
  230. package/esm2015/lib/desy-views/interfaces/open-alert-result.js +2 -2
  231. package/esm2015/lib/desy-views/interfaces/status-data.js +2 -2
  232. package/esm2015/lib/desy-views/interfaces/status-icon-data.js +2 -2
  233. package/esm2015/lib/desy-views/interfaces/status-item-title-data.js +2 -2
  234. package/esm2015/lib/desy-views/interfaces/tabs-items-data.js +2 -2
  235. package/esm2015/lib/desy-views/interfaces/tabs-panel-data.js +2 -2
  236. package/esm2015/lib/desy-views/interfaces/term-definition.data.js +2 -2
  237. package/esm2015/lib/desy-views/services/alert.service.js +89 -89
  238. package/esm2015/lib/shared/components/accessibility/accessibility.component.js +29 -29
  239. package/esm2015/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.js +27 -27
  240. package/esm2015/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.js +26 -26
  241. package/esm2015/lib/shared/components/content-base/content-base.component.js +20 -20
  242. package/esm2015/lib/shared/components/index.js +6 -6
  243. package/esm2015/lib/shared/components/text-or-html-required/text-or-html-required.component.js +14 -14
  244. package/esm2015/lib/shared/decorators/desy-content-child.decorator.js +41 -41
  245. package/esm2015/lib/shared/decorators/desy-on-input-change.decorator.js +19 -19
  246. package/esm2015/lib/shared/directives/attribute-change.directive.js +43 -43
  247. package/esm2015/lib/shared/directives/click-outside.directive.js +35 -35
  248. package/esm2015/lib/shared/directives/content-change.directive.js +43 -43
  249. package/esm2015/lib/shared/directives/custom-inner-content.directive.js +62 -62
  250. package/esm2015/lib/shared/directives/inner-content.directive.js +34 -34
  251. package/esm2015/lib/shared/interfaces/accesibility-data.js +2 -2
  252. package/esm2015/lib/shared/pipes/external-href.pipe.js +28 -28
  253. package/esm2015/lib/shared/pipes/inner-html.pipe.js +19 -19
  254. package/esm2015/lib/shared/pipes/make-html-list.pipe.js +16 -16
  255. package/esm2015/lib/shared/shared.module.js +62 -62
  256. package/esm2015/lib/shared/utils/focus-utils.js +51 -51
  257. package/esm2015/lib/shared/utils/search-utils.js +78 -78
  258. package/esm2015/lib/shared/utils/string-utils.js +18 -18
  259. package/esm2015/public-api.js +197 -197
  260. package/fesm2015/desy-angular.js +9588 -9588
  261. package/fesm2015/desy-angular.js.map +1 -1
  262. package/lib/desy-angular.module.d.ts +2 -2
  263. package/lib/desy-buttons/components/button/button.component.d.ts +31 -31
  264. package/lib/desy-buttons/components/button-loader/button-loader.component.d.ts +15 -15
  265. package/lib/desy-buttons/components/dropdown/dropdown.component.d.ts +22 -22
  266. package/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.d.ts +12 -12
  267. package/lib/desy-buttons/components/listbox/listbox-label/listbox-label.component.d.ts +4 -4
  268. package/lib/desy-buttons/components/listbox/listbox.component.d.ts +53 -53
  269. package/lib/desy-buttons/components/pill/pill.component.d.ts +22 -22
  270. package/lib/desy-buttons/components/toggle/toggle-off-state/toggle-off-state.component.d.ts +5 -5
  271. package/lib/desy-buttons/components/toggle/toggle-on-state/toggle-on-state.component.d.ts +5 -5
  272. package/lib/desy-buttons/components/toggle/toggle.component.d.ts +17 -17
  273. package/lib/desy-buttons/desy-buttons.module.d.ts +2 -2
  274. package/lib/desy-buttons/interfaces/listbox-item-data.d.ts +9 -9
  275. package/lib/desy-buttons/interfaces/listbox-label-data.d.ts +5 -5
  276. package/lib/desy-commons/components/content/content.component.d.ts +5 -5
  277. package/lib/desy-commons/components/description/description.component.d.ts +6 -6
  278. package/lib/desy-commons/components/divider/divider.component.d.ts +6 -6
  279. package/lib/desy-commons/components/icon/icon.component.d.ts +6 -6
  280. package/lib/desy-commons/components/title/title.component.d.ts +5 -5
  281. package/lib/desy-commons/desy-commons.module.d.ts +2 -2
  282. package/lib/desy-commons/interfaces/content-data.d.ts +5 -5
  283. package/lib/desy-commons/interfaces/description-data.d.ts +6 -6
  284. package/lib/desy-commons/interfaces/divider-data.d.ts +4 -4
  285. package/lib/desy-commons/interfaces/icon-data.d.ts +5 -5
  286. package/lib/desy-commons/interfaces/index.d.ts +5 -5
  287. package/lib/desy-commons/interfaces/title-data.d.ts +6 -6
  288. package/lib/desy-forms/components/character-count/character-count.component.d.ts +27 -27
  289. package/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.d.ts +47 -47
  290. package/lib/desy-forms/components/checkboxes/checkboxes.component.d.ts +75 -75
  291. package/lib/desy-forms/components/date-input/date-input-day/date-input-day.component.d.ts +21 -21
  292. package/lib/desy-forms/components/date-input/date-input-divider/date-input-divider.component.d.ts +7 -7
  293. package/lib/desy-forms/components/date-input/date-input-item/date-input-item.component.d.ts +4 -4
  294. package/lib/desy-forms/components/date-input/date-input-month/date-input-month.component.d.ts +21 -21
  295. package/lib/desy-forms/components/date-input/date-input-year/date-input-year.component.d.ts +18 -18
  296. package/lib/desy-forms/components/date-input/date-input.component.d.ts +55 -55
  297. package/lib/desy-forms/components/error-message/error-message.component.d.ts +12 -12
  298. package/lib/desy-forms/components/fieldset/fieldset.component.d.ts +28 -28
  299. package/lib/desy-forms/components/fieldset/legend/legend.component.d.ts +6 -6
  300. package/lib/desy-forms/components/file-upload/file-upload.component.d.ts +20 -20
  301. package/lib/desy-forms/components/form-field/form-field.component.d.ts +40 -40
  302. package/lib/desy-forms/components/hint/hint.component.d.ts +11 -11
  303. package/lib/desy-forms/components/input/input.component.d.ts +23 -23
  304. package/lib/desy-forms/components/input-group/input-group-divider/input-group-divider.component.d.ts +8 -8
  305. package/lib/desy-forms/components/input-group/input-group-input/input-group-input.component.d.ts +20 -20
  306. package/lib/desy-forms/components/input-group/input-group-item/input-group-item.component.d.ts +4 -4
  307. package/lib/desy-forms/components/input-group/input-group-select/input-group-select.component.d.ts +16 -16
  308. package/lib/desy-forms/components/input-group/input-group.component.d.ts +56 -56
  309. package/lib/desy-forms/components/label/label.component.d.ts +14 -14
  310. package/lib/desy-forms/components/radios/radio-item/radio-item.component.d.ts +43 -43
  311. package/lib/desy-forms/components/radios/radios.component.d.ts +75 -75
  312. package/lib/desy-forms/components/search-bar/search-bar.component.d.ts +16 -16
  313. package/lib/desy-forms/components/select/option/option.component.d.ts +7 -7
  314. package/lib/desy-forms/components/select/option-group/option-group.component.d.ts +7 -7
  315. package/lib/desy-forms/components/select/select-item/select-item.component.d.ts +4 -4
  316. package/lib/desy-forms/components/select/select.component.d.ts +21 -21
  317. package/lib/desy-forms/components/template-driven-wrapper/template-driven-wrapper.component.d.ts +2 -2
  318. package/lib/desy-forms/components/textarea/textarea.component.d.ts +24 -24
  319. package/lib/desy-forms/components/tree/interfaces/itree-item.d.ts +5 -5
  320. package/lib/desy-forms/components/tree/interfaces/quit-tree-item-focus-options.d.ts +5 -5
  321. package/lib/desy-forms/components/tree/tree-checkbox/tree-checkbox.component.d.ts +43 -43
  322. package/lib/desy-forms/components/tree/tree-item/tree-item.component.d.ts +87 -87
  323. package/lib/desy-forms/components/tree/tree-items-generator/tree-items-generator.component.d.ts +10 -10
  324. package/lib/desy-forms/components/tree/tree-sub/tree-sub.component.d.ts +6 -6
  325. package/lib/desy-forms/components/tree/tree.component.d.ts +112 -112
  326. package/lib/desy-forms/desy-forms.module.d.ts +2 -2
  327. package/lib/desy-forms/directives/condition.directive.d.ts +15 -15
  328. package/lib/desy-forms/interfaces/accesibility-data.d.ts +15 -15
  329. package/lib/desy-forms/interfaces/error-message-data.d.ts +8 -8
  330. package/lib/desy-forms/interfaces/fieldset-data.d.ts +10 -10
  331. package/lib/desy-forms/interfaces/hint-data.d.ts +7 -7
  332. package/lib/desy-forms/interfaces/index.d.ts +12 -12
  333. package/lib/desy-forms/interfaces/item-checkbox-data.d.ts +21 -21
  334. package/lib/desy-forms/interfaces/item-date-input-data.d.ts +17 -17
  335. package/lib/desy-forms/interfaces/item-divider-date-input-data.d.ts +5 -5
  336. package/lib/desy-forms/interfaces/item-divider-input-group-data.d.ts +5 -5
  337. package/lib/desy-forms/interfaces/item-input-group-data.d.ts +23 -23
  338. package/lib/desy-forms/interfaces/item-radio-data.d.ts +20 -20
  339. package/lib/desy-forms/interfaces/item-radio-with-template-data.d.ts +5 -5
  340. package/lib/desy-forms/interfaces/label-data.d.ts +9 -9
  341. package/lib/desy-forms/interfaces/legend-data.d.ts +6 -6
  342. package/lib/desy-forms/interfaces/select-item-data.d.ts +8 -8
  343. package/lib/desy-modals/components/dialog/dialog.component.d.ts +35 -35
  344. package/lib/desy-modals/components/modal/modal-button-loader-primary/modal-button-loader-primary.component.d.ts +8 -8
  345. package/lib/desy-modals/components/modal/modal-button-loader-secondary/modal-button-loader-secondary.component.d.ts +7 -7
  346. package/lib/desy-modals/components/modal/modal-button-primary/modal-button-primary.component.d.ts +7 -7
  347. package/lib/desy-modals/components/modal/modal-button-secondary/modal-button-secondary.component.d.ts +7 -7
  348. package/lib/desy-modals/components/modal/modal.component.d.ts +51 -51
  349. package/lib/desy-modals/desy-modals.module.d.ts +2 -2
  350. package/lib/desy-modals/interfaces/dialog-options.d.ts +9 -9
  351. package/lib/desy-modals/interfaces/index.d.ts +6 -6
  352. package/lib/desy-modals/interfaces/modal-button-data.d.ts +20 -20
  353. package/lib/desy-modals/interfaces/modal-data.d.ts +5 -5
  354. package/lib/desy-modals/interfaces/modal-icon-data.d.ts +4 -4
  355. package/lib/desy-modals/interfaces/modal-options.d.ts +16 -16
  356. package/lib/desy-modals/interfaces/open-dialog-result.d.ts +6 -6
  357. package/lib/desy-modals/services/dialog.service.d.ts +14 -14
  358. package/lib/desy-nav/components/breadcrumbs/breadcrumbs-item/breadcrumbs-item.component.d.ts +6 -6
  359. package/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.d.ts +18 -18
  360. package/lib/desy-nav/components/error-summary/error-summary-item/error-summary-item.component.d.ts +6 -6
  361. package/lib/desy-nav/components/error-summary/error-summary.component.d.ts +20 -20
  362. package/lib/desy-nav/components/footer/footer-meta/footer-meta-item/footer-meta-item.component.d.ts +7 -7
  363. package/lib/desy-nav/components/footer/footer-meta/footer-meta.component.d.ts +10 -10
  364. package/lib/desy-nav/components/footer/footer-navigation/footer-navigation-item/footer-navigation-item.component.d.ts +7 -7
  365. package/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.d.ts +8 -8
  366. package/lib/desy-nav/components/footer/footer.component.d.ts +27 -27
  367. package/lib/desy-nav/components/header/header-custom-navigation/header-custom-navigation.component.d.ts +3 -3
  368. package/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.d.ts +12 -12
  369. package/lib/desy-nav/components/header/header-navigation/header-navigation-item/header-navigation-item.component.d.ts +10 -10
  370. package/lib/desy-nav/components/header/header-navigation/header-navigation.component.d.ts +13 -13
  371. package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.d.ts +5 -5
  372. package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component.d.ts +3 -3
  373. package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.d.ts +30 -30
  374. package/lib/desy-nav/components/header/header-subnav/header-subnav.component.d.ts +11 -11
  375. package/lib/desy-nav/components/header/header.component.d.ts +34 -34
  376. package/lib/desy-nav/components/menu-horizontal/menu-horizontal-item/menu-horizontal-item.component.d.ts +15 -15
  377. package/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.d.ts +16 -16
  378. package/lib/desy-nav/components/menu-navigation/components/menu-navigation-item/menu-navigation-item.component.d.ts +22 -22
  379. package/lib/desy-nav/components/menu-navigation/components/menu-navigation-subitem/menu-navigation-subitem.component.d.ts +19 -19
  380. package/lib/desy-nav/components/menu-navigation/menu-navigation.component.d.ts +80 -80
  381. package/lib/desy-nav/components/menu-vertical/menu-vertical-item/menu-vertical-item.component.d.ts +18 -18
  382. package/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub/menu-vertical-item-sub.component.d.ts +8 -8
  383. package/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component.d.ts +15 -15
  384. package/lib/desy-nav/components/menu-vertical/menu-vertical.component.d.ts +18 -18
  385. package/lib/desy-nav/components/menubar/components/menubar-item/menubar-item.component.d.ts +23 -23
  386. package/lib/desy-nav/components/menubar/components/menubar-label/menubar-label.component.d.ts +4 -4
  387. package/lib/desy-nav/components/menubar/components/menubar-subitem/menubar-subitem.component.d.ts +15 -15
  388. package/lib/desy-nav/components/menubar/components/menubar-subsubitem/menubar-subsubitem.component.d.ts +10 -10
  389. package/lib/desy-nav/components/menubar/directives/menubaritem.directive.d.ts +16 -16
  390. package/lib/desy-nav/components/menubar/menubar.component.d.ts +101 -101
  391. package/lib/desy-nav/components/nav/nav-item/nav-item.component.d.ts +17 -17
  392. package/lib/desy-nav/components/nav/nav.component.d.ts +20 -20
  393. package/lib/desy-nav/components/notification/notification-item/notification-item.component.d.ts +9 -9
  394. package/lib/desy-nav/components/notification/notification.component.d.ts +36 -36
  395. package/lib/desy-nav/components/skip-link/skip-link.component.d.ts +13 -13
  396. package/lib/desy-nav/desy-nav.module.d.ts +2 -2
  397. package/lib/desy-nav/interfaces/breadcrumbs.data.d.ts +7 -7
  398. package/lib/desy-nav/interfaces/error-summary-data.d.ts +7 -7
  399. package/lib/desy-nav/interfaces/footer-data.d.ts +24 -24
  400. package/lib/desy-nav/interfaces/header-dropdown-data.d.ts +11 -11
  401. package/lib/desy-nav/interfaces/header-navigation-data.d.ts +5 -5
  402. package/lib/desy-nav/interfaces/header-navigation-item-data.d.ts +12 -12
  403. package/lib/desy-nav/interfaces/header-offcanvas-data.d.ts +8 -8
  404. package/lib/desy-nav/interfaces/header-subnav-data.d.ts +11 -11
  405. package/lib/desy-nav/interfaces/index.d.ts +19 -19
  406. package/lib/desy-nav/interfaces/menu-horizontal-item-data.d.ts +13 -13
  407. package/lib/desy-nav/interfaces/menu-horizontal-item-event-data.d.ts +5 -5
  408. package/lib/desy-nav/interfaces/menu-navigation-item-sub-item-sub-item.d.ts +14 -14
  409. package/lib/desy-nav/interfaces/menu-navigation-item-sub-item.d.ts +6 -6
  410. package/lib/desy-nav/interfaces/menu-navigation.d.ts +17 -17
  411. package/lib/desy-nav/interfaces/menu-vertical-items-data.d.ts +19 -19
  412. package/lib/desy-nav/interfaces/menu-vertical-sub-data.d.ts +7 -7
  413. package/lib/desy-nav/interfaces/menu-vertical-sub-items-data.d.ts +16 -16
  414. package/lib/desy-nav/interfaces/menubar-item-sub-item-sub-item.d.ts +6 -6
  415. package/lib/desy-nav/interfaces/menubar-item-sub-item.d.ts +9 -9
  416. package/lib/desy-nav/interfaces/menubar-item-sub.d.ts +6 -6
  417. package/lib/desy-nav/interfaces/menubar-item.d.ts +18 -18
  418. package/lib/desy-nav/interfaces/nav-item-event.data.d.ts +5 -5
  419. package/lib/desy-nav/interfaces/nav-item.data.d.ts +15 -15
  420. package/lib/desy-nav/interfaces/notification-items-data.d.ts +10 -10
  421. package/lib/desy-nav/interfaces/notification-options.d.ts +15 -15
  422. package/lib/desy-pagination/components/pagination/pagination.component.d.ts +44 -44
  423. package/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.d.ts +7 -7
  424. package/lib/desy-pagination/components/pagination-listbox-label/pagination-listbox-label.component.d.ts +4 -4
  425. package/lib/desy-pagination/desy-pagination.module.d.ts +2 -2
  426. package/lib/desy-pagination/interfaces/index.d.ts +1 -1
  427. package/lib/desy-pagination/interfaces/pagination-item.data.d.ts +4 -4
  428. package/lib/desy-tables/components/table/components/table-caption.component.d.ts +4 -4
  429. package/lib/desy-tables/components/table/components/table-cell.component.d.ts +8 -8
  430. package/lib/desy-tables/components/table/components/table-header.component.d.ts +5 -5
  431. package/lib/desy-tables/components/table/components/table-row.component.d.ts +5 -5
  432. package/lib/desy-tables/components/table/table.component.d.ts +24 -24
  433. package/lib/desy-tables/components/table-advanced/components/table-advanced-header-cell.component.d.ts +20 -20
  434. package/lib/desy-tables/components/table-advanced/components/table-advanced-header.component.d.ts +5 -5
  435. package/lib/desy-tables/components/table-advanced/components/table-advanced-row-cell.component.d.ts +8 -8
  436. package/lib/desy-tables/components/table-advanced/components/table-advanced-row.component.d.ts +8 -8
  437. package/lib/desy-tables/components/table-advanced/components/table-advanced-select.component.d.ts +9 -9
  438. package/lib/desy-tables/components/table-advanced/table-advanced.component.d.ts +122 -122
  439. package/lib/desy-tables/desy-tables.module.d.ts +2 -2
  440. package/lib/desy-tables/directives/cell.directive.d.ts +14 -14
  441. package/lib/desy-tables/directives/focus-clicked-cell.directive.d.ts +10 -10
  442. package/lib/desy-tables/directives/row.directive.d.ts +16 -16
  443. package/lib/desy-tables/interfaces/cell-data.d.ts +9 -9
  444. package/lib/desy-tables/interfaces/head-cell-data.d.ts +18 -18
  445. package/lib/desy-tables/interfaces/index.d.ts +4 -4
  446. package/lib/desy-tables/interfaces/recalculate-table-params.d.ts +11 -11
  447. package/lib/desy-tables/interfaces/row-data.d.ts +6 -6
  448. package/lib/desy-tables/interfaces/wrapper-data.d.ts +4 -4
  449. package/lib/desy-views/components/accordion/accordion-header/accordion-header.component.d.ts +5 -5
  450. package/lib/desy-views/components/accordion/accordion-item/accordion-item.component.d.ts +17 -17
  451. package/lib/desy-views/components/accordion/accordion.component.d.ts +48 -48
  452. package/lib/desy-views/components/accordion-history/accordion-history-item/accordion-history-item.component.d.ts +9 -9
  453. package/lib/desy-views/components/accordion-history/accordion-history.component.d.ts +6 -6
  454. package/lib/desy-views/components/accordion-history/accordion-item-hide-button/accordion-item-hide-button.component.d.ts +4 -4
  455. package/lib/desy-views/components/accordion-history/accordion-item-show-button/accordion-item-show-button.component.d.ts +4 -4
  456. package/lib/desy-views/components/alert/alert.component.d.ts +29 -29
  457. package/lib/desy-views/components/collapsible/collapsible.component.d.ts +14 -14
  458. package/lib/desy-views/components/description-list/definition/definition.component.d.ts +6 -6
  459. package/lib/desy-views/components/description-list/description-item/description-item.component.d.ts +9 -9
  460. package/lib/desy-views/components/description-list/description-list.component.d.ts +11 -11
  461. package/lib/desy-views/components/description-list/term/term.component.d.ts +6 -6
  462. package/lib/desy-views/components/details/details.component.d.ts +10 -10
  463. package/lib/desy-views/components/item/item-content-bottom/item-content-bottom.component.d.ts +5 -5
  464. package/lib/desy-views/components/item/item-content-right/item-content-right.component.d.ts +3 -3
  465. package/lib/desy-views/components/item/item-item/item-item.component.d.ts +3 -3
  466. package/lib/desy-views/components/item/item.component.d.ts +37 -37
  467. package/lib/desy-views/components/media-object/media-object-figure/media-object-figure.component.d.ts +3 -3
  468. package/lib/desy-views/components/media-object/media-object.component.d.ts +33 -33
  469. package/lib/desy-views/components/spinner/spinner.component.d.ts +21 -21
  470. package/lib/desy-views/components/status/status.component.d.ts +25 -25
  471. package/lib/desy-views/components/status-item/status-item.component.d.ts +44 -44
  472. package/lib/desy-views/components/tabs/panel/panel.component.d.ts +6 -6
  473. package/lib/desy-views/components/tabs/tab-item/tab-item.component.d.ts +12 -12
  474. package/lib/desy-views/components/tabs/tabs.component.d.ts +48 -48
  475. package/lib/desy-views/components/tooltip/tooltip-content/tooltip-content.component.d.ts +3 -3
  476. package/lib/desy-views/components/tooltip/tooltip.component.d.ts +48 -48
  477. package/lib/desy-views/desy-views.module.d.ts +2 -2
  478. package/lib/desy-views/interfaces/accordion-header.data.d.ts +5 -5
  479. package/lib/desy-views/interfaces/accordion-item.data.d.ts +10 -10
  480. package/lib/desy-views/interfaces/alert-options.d.ts +8 -8
  481. package/lib/desy-views/interfaces/description-item.data.d.ts +8 -8
  482. package/lib/desy-views/interfaces/index.d.ts +10 -10
  483. package/lib/desy-views/interfaces/open-alert-result.d.ts +6 -6
  484. package/lib/desy-views/interfaces/status-data.d.ts +8 -8
  485. package/lib/desy-views/interfaces/status-icon-data.d.ts +4 -4
  486. package/lib/desy-views/interfaces/status-item-title-data.d.ts +5 -5
  487. package/lib/desy-views/interfaces/tabs-items-data.d.ts +9 -9
  488. package/lib/desy-views/interfaces/tabs-panel-data.d.ts +8 -8
  489. package/lib/desy-views/interfaces/term-definition.data.d.ts +7 -7
  490. package/lib/desy-views/services/alert.service.d.ts +14 -14
  491. package/lib/shared/components/accessibility/accessibility.component.d.ts +20 -20
  492. package/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.d.ts +26 -26
  493. package/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.d.ts +23 -23
  494. package/lib/shared/components/content-base/content-base.component.d.ts +9 -9
  495. package/lib/shared/components/index.d.ts +5 -5
  496. package/lib/shared/components/text-or-html-required/text-or-html-required.component.d.ts +8 -8
  497. package/lib/shared/decorators/desy-content-child.decorator.d.ts +15 -15
  498. package/lib/shared/decorators/desy-on-input-change.decorator.d.ts +5 -5
  499. package/lib/shared/directives/attribute-change.directive.d.ts +10 -10
  500. package/lib/shared/directives/click-outside.directive.d.ts +9 -9
  501. package/lib/shared/directives/content-change.directive.d.ts +19 -19
  502. package/lib/shared/directives/custom-inner-content.directive.d.ts +22 -22
  503. package/lib/shared/directives/inner-content.directive.d.ts +9 -9
  504. package/lib/shared/interfaces/accesibility-data.d.ts +16 -16
  505. package/lib/shared/pipes/external-href.pipe.d.ts +8 -8
  506. package/lib/shared/pipes/inner-html.pipe.d.ts +7 -7
  507. package/lib/shared/pipes/make-html-list.pipe.d.ts +4 -4
  508. package/lib/shared/shared.module.d.ts +2 -2
  509. package/lib/shared/utils/focus-utils.d.ts +4 -4
  510. package/lib/shared/utils/search-utils.d.ts +14 -14
  511. package/lib/shared/utils/string-utils.d.ts +10 -10
  512. package/package.json +1 -1
  513. package/public-api.d.ts +168 -168
@@ -1,408 +1,408 @@
1
- import { __decorate } from "tslib";
2
- import { ChangeDetectorRef, Component, ContentChildren, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';
3
- import { DesyContentChild } from "../../../shared/decorators/desy-content-child.decorator";
4
- import { TreeItemComponent } from "./tree-item/tree-item.component";
5
- import { DesyOnInputChange } from "../../../shared/decorators/desy-on-input-change.decorator";
6
- import { NG_VALUE_ACCESSOR } from "@angular/forms";
7
- import { FormFieldComponent } from "../form-field/form-field.component";
8
- import { FieldsetComponent } from "../fieldset/fieldset.component";
9
- import { SearchBarComponent } from "../search-bar/search-bar.component";
10
- export class TreeComponent extends FormFieldComponent {
11
- constructor(changeDetector) {
12
- super();
13
- this.changeDetector = changeDetector;
14
- this.expandedFirstLevel = true;
15
- this.decoupleChildFromParent = false;
16
- this.disableDefaultSearch = false;
17
- this.searchMatchValuesChange = new EventEmitter();
18
- this.rootItems = [];
19
- this._itemListCheckedSubscriptions = [];
20
- this._itemListQuitFocusSubscriptions = [];
21
- this._alreadyConfiguringItems = false;
22
- }
23
- ngOnDestroy() {
24
- var _a, _b;
25
- this.clearSubscriptions(this._itemListCheckedSubscriptions);
26
- this.clearSubscriptions(this._itemListQuitFocusSubscriptions);
27
- (_a = this._itemListSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
28
- (_b = this._allItemListSubscription) === null || _b === void 0 ? void 0 : _b.unsubscribe();
29
- }
30
- ngOnChanges(changes) {
31
- this.configureAllItems();
32
- }
33
- /**
34
- * Se sobrescribe el valor para actualizar los items
35
- * @Override
36
- */
37
- writeValue(value) {
38
- this.value = value;
39
- this.configureAllItems(true);
40
- this.onChange(this.value);
41
- }
42
- /*
43
- * Eventos
44
- */
45
- /**
46
- * Actualiza el valor del componente al checkquearse un ítem
47
- * @param originItem ítem modificado
48
- */
49
- updateValueFromItems(originItem) {
50
- // Si es radio, se desactivan el resto de items cuando se activa otro item
51
- if (this.type !== 'checkbox') {
52
- const items = this.getAllItemsInOrder();
53
- items.forEach(item => {
54
- if (item !== originItem && item.checked) {
55
- item.setChecked(false, true);
56
- }
57
- });
58
- }
59
- else if (!this.decoupleChildFromParent) {
60
- this.rootItems.forEach(item => item.setCheckedAutomaticallyDependingOnChildren());
61
- }
62
- this.value = [];
63
- const items = this.getAllItemsInOrder();
64
- items.forEach(item => {
65
- if (item.checked) {
66
- this.value.push(item.value);
67
- }
68
- });
69
- this.onChange(this.value);
70
- }
71
- /**
72
- * Gestiona cuando el foco abandona un ítem desde un evento de teclado controlado
73
- * @param options
74
- */
75
- handleItemQuitFocus(options) {
76
- if (options && options.nextElement) {
77
- const items = this.getAllItemsInOrder();
78
- const focusableItems = items.filter(item => !item.isHidden() && !item.disabled && item.allParentsExpanded);
79
- switch (options.nextElement) {
80
- case "first":
81
- focusableItems[0].focus();
82
- break;
83
- case "last":
84
- focusableItems[focusableItems.length - 1].focus();
85
- break;
86
- case "parent":
87
- const currentSubLevel = options.currentItem.subLevel;
88
- if (currentSubLevel > 0) {
89
- const currentItemIndex = focusableItems.findIndex(item => item === options.currentItem);
90
- const parent = focusableItems.slice(0, currentItemIndex).reverse().find(item => item.subLevel < currentSubLevel);
91
- if (parent) {
92
- parent.focus();
93
- }
94
- }
95
- break;
96
- case "firstChild":
97
- case "next":
98
- if (options.currentItem) {
99
- let currentItemIndex = focusableItems.findIndex(item => item === options.currentItem);
100
- if (currentItemIndex < focusableItems.length - 1) {
101
- focusableItems[currentItemIndex + 1].focus();
102
- }
103
- }
104
- break;
105
- case "previous":
106
- if (options.currentItem) {
107
- const currentItemIndex = focusableItems.findIndex(item => item === options.currentItem);
108
- if (currentItemIndex > 0) {
109
- focusableItems[currentItemIndex - 1].focus();
110
- }
111
- }
112
- break;
113
- }
114
- }
115
- }
116
- /**
117
- * Realiza la búsqueda interna de los items en el componente
118
- * @param value texto de búsqueda
119
- */
120
- onSearch(value) {
121
- if (!this.disableDefaultSearch) {
122
- if (value && value.length > 0) {
123
- this.searchMatchValues = this.allItems.filter(item => item.matchesText(value)).map(item => item.value);
124
- }
125
- else {
126
- this.searchMatchValues = null;
127
- }
128
- this.searchMatchValuesChange.emit(this.searchMatchValues);
129
- }
130
- }
131
- /*
132
- * Eventos al cambiar propiedades
133
- */
134
- /**
135
- * Configura los items del árbol
136
- */
137
- configureAllItems(isValueChange = false) {
138
- if (!this._alreadyConfiguringItems) {
139
- this._alreadyConfiguringItems = true;
140
- // Lo realizamos desde un setTimeout para que todos los inputs, values y demás vivan en paz y armonía
141
- setTimeout(() => {
142
- var _a;
143
- if (((_a = this.allItems) === null || _a === void 0 ? void 0 : _a.length) > 0) {
144
- this.clearSubscriptions(this._itemListCheckedSubscriptions);
145
- this.clearSubscriptions(this._itemListQuitFocusSubscriptions);
146
- this.allItems.forEach(item => {
147
- item.parentName = this.name;
148
- item.type = this.type;
149
- item.inheritedDescribedBy = this.getDescribedByForItems();
150
- item.inheritedExpandedFirstLevel = this.expandedFirstLevel;
151
- item.inheritedDecoupleChildFromParent = this.decoupleChildFromParent;
152
- if ((this.value && this.value.length > 0) || isValueChange) {
153
- const valueList = this.value ? this.value : [];
154
- item.setChecked(!!valueList.find(v => v === item.value), true);
155
- }
156
- item.detectChanges();
157
- const checkedSubscription = item.checkedChangeForTree.subscribe(() => this.updateValueFromItems(item));
158
- this._itemListCheckedSubscriptions.push(checkedSubscription);
159
- const quitFocusSubscription = item.quitFocus.subscribe(options => this.handleItemQuitFocus(options));
160
- this._itemListQuitFocusSubscriptions.push(quitFocusSubscription);
161
- });
162
- this.setErrorInItems(this.hasErrorMessageComponent());
163
- this.buildTree();
164
- if (!this.value) {
165
- this.updateValueFromItems();
166
- }
167
- if (this.searchMatchValues) {
168
- this.onSearchMatchValuesChange();
169
- }
170
- }
171
- if (this.allItems && !this._allItemListSubscription) {
172
- this._allItemListSubscription = this.allItems.changes.subscribe(() => this.configureAllItems());
173
- }
174
- this.changeDetector.detectChanges();
175
- this._alreadyConfiguringItems = false;
176
- });
177
- }
178
- }
179
- /**
180
- * Modifica los items visibles según el filtro de búsqueda
181
- */
182
- onSearchMatchValuesChange() {
183
- if (this.allItems) {
184
- this.allItems.forEach(item => {
185
- item.inheritedMatchesSearch = true;
186
- });
187
- if (this.searchMatchValues !== null && this.searchMatchValues !== undefined) {
188
- this.allItems.forEach(item => {
189
- if (this.searchMatchValues.findIndex(value => item.value === value) < 0) {
190
- item.inheritedMatchesSearch = false;
191
- }
192
- });
193
- }
194
- }
195
- }
196
- /*
197
- * Getters and setters
198
- */
199
- getIdPrefix() {
200
- return this.idPrefix ? this.idPrefix : this.name;
201
- }
202
- getDescribedBy() {
203
- let describedBy = '';
204
- if (this.describedBy) {
205
- describedBy = this.describedBy;
206
- }
207
- if (this.hasHintComponent() && this.hintComponent.id) {
208
- describedBy = describedBy + ' ' + this.hintComponent.id;
209
- }
210
- if (this.hasErrorMessageComponent() && this.errorMessageComponent.id) {
211
- describedBy = describedBy + ' ' + this.errorMessageComponent.id;
212
- }
213
- return describedBy;
214
- }
215
- /**
216
- * Devuelve el valor de describedBy que se transmitirá a los items
217
- */
218
- getDescribedByForItems() {
219
- let describedBy;
220
- if (this.hasFieldsetComponent()) {
221
- describedBy = this.fieldsetComponent.describedBy;
222
- }
223
- else {
224
- describedBy = this.getDescribedBy();
225
- }
226
- return describedBy;
227
- }
228
- hasFieldsetComponent() {
229
- return !!this.fieldsetComponent;
230
- }
231
- /**
232
- * Overrides super.getHintId();
233
- */
234
- getHintId() {
235
- var _a;
236
- return this.idPrefix ? this.idPrefix + '-hint' : (_a = this.hintComponent) === null || _a === void 0 ? void 0 : _a.id;
237
- }
238
- /**
239
- * Overrides super.getHintId();
240
- */
241
- getErrorId() {
242
- var _a;
243
- return this.idPrefix ? this.idPrefix + '-error' : (_a = this.errorMessageComponent) === null || _a === void 0 ? void 0 : _a.id;
244
- }
245
- /*
246
- * Funciones para reemplazar el contenido del fieldset, label, hint o errormessage
247
- */
248
- overrideFieldsetParams(fieldset) {
249
- fieldset.caller = this.innerHtml;
250
- fieldset.errorId = this.getErrorId();
251
- fieldset.describedBy = this.getDescribedBy();
252
- fieldset.detectChanges();
253
- }
254
- overrideSearchBarParams(searchbar) {
255
- const defaultOnChange = searchbar.onChange;
256
- const newOnChange = value => {
257
- this.onSearch(value);
258
- defaultOnChange(value);
259
- };
260
- searchbar.registerOnChange(newOnChange);
261
- }
262
- /**
263
- * Se llama desde FormField
264
- */
265
- overrideHintParams(hint) {
266
- hint.id = this.getHintId();
267
- hint.detectChanges();
268
- }
269
- /**
270
- * Se llama desde FormField
271
- */
272
- overrideErrorMessageParams(errorMessage) {
273
- errorMessage.id = this.getErrorId();
274
- this.setErrorInItems(this.hasErrorMessageComponent());
275
- errorMessage.detectChanges();
276
- }
277
- /**
278
- * Se llama desde FormField
279
- */
280
- onDeleteErrorMessage(errorMessage) {
281
- this.setErrorInItems(this.hasErrorMessageComponent());
282
- }
283
- /*
284
- * Métodos privados
285
- */
286
- /**
287
- * Configura la estructura del árbol
288
- * @private
289
- */
290
- buildTree() {
291
- // Se crea un mapa para tener accesibles los items por key y se borran los listados existentes
292
- const itemMap = {};
293
- this.rootItems = [];
294
- this.allItems.forEach(item => {
295
- const key = item.getKey();
296
- itemMap[key] = item;
297
- if (item.sub) {
298
- item.sub.itemList = [];
299
- }
300
- });
301
- // Se añaden los items a los listados correspondientes
302
- this.allItems.forEach(item => {
303
- const parentKey = item.getParentKey();
304
- if (parentKey === 'root') {
305
- this.rootItems.push(item);
306
- }
307
- else if (parentKey) {
308
- const sub = itemMap[parentKey].sub;
309
- if (sub) {
310
- sub.itemList.push(item);
311
- }
312
- }
313
- });
314
- // Se configuran los items desde root
315
- let order = 0;
316
- this.rootItems.forEach((item, index) => {
317
- item.setSubLevel(0);
318
- item.setDefaultId(`${this.idPrefix}-${index}`);
319
- item.refreshAllParentsExpandedRecursive(true);
320
- if (!this.decoupleChildFromParent) {
321
- item.setCheckedAutomaticallyDependingOnChildren();
322
- }
323
- order = item.setOrderRecursively(order);
324
- });
325
- }
326
- /**
327
- * Si tiene un mensaje de error, se indica a los items
328
- * @param hasError
329
- * @private
330
- */
331
- setErrorInItems(hasError) {
332
- var _a;
333
- if (((_a = this.allItems) === null || _a === void 0 ? void 0 : _a.length) > 0) {
334
- this.allItems.forEach(item => {
335
- item.inheritedHasError = hasError;
336
- item.detectChanges();
337
- });
338
- }
339
- }
340
- /**
341
- * Limpia un listado de subscripciones
342
- * @param subscriptionList
343
- * @private
344
- */
345
- clearSubscriptions(subscriptionList) {
346
- if (subscriptionList.length > 0) {
347
- subscriptionList.forEach(s => s.unsubscribe());
348
- subscriptionList.splice(0, subscriptionList.length);
349
- }
350
- }
351
- /**
352
- * Devuelve los items del árbol ordenados
353
- * @private
354
- */
355
- getAllItemsInOrder() {
356
- let list = [];
357
- if (this.allItems) {
358
- list = this.allItems.toArray().sort((a, b) => a.orderInTree > b.orderInTree ? 1 : -1);
359
- }
360
- return list;
361
- }
362
- }
363
- TreeComponent.decorators = [
364
- { type: Component, args: [{
365
- selector: 'desy-tree',
366
- template: "\r\n<ng-template #innerHtml>\r\n <ng-content select=\"desy-hint\"></ng-content>\r\n <ng-content select=\"desy-error-message\"></ng-content>\r\n <ng-content select=\"desy-search-bar\"></ng-content>\r\n <ul [class]=\"['c-tree', classes] | makeHtmlList\"\r\n [attr.role]=\"role ? role : 'tree'\"\r\n [attr.aria-describedby]=\"ariaDescribedBy ? ariaDescribedBy : null\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy ? ariaLabelledBy : null\"\r\n [attr.aria-hidden]=\"ariaHidden ? ariaHidden : null\"\r\n [attr.aria-disabled]=\"ariaDisabled ? ariaDisabled : null\"\r\n [attr.aria-controls]=\"ariaControls ? ariaControls : null\"\r\n [attr.aria-current]=\"ariaCurrent ? ariaCurrent : null\"\r\n [attr.aria-live]=\"ariaLive ? ariaLive : null\"\r\n [attr.aria-expanded]=\"ariaExpanded ? ariaExpanded : null\"\r\n [attr.aria-errormessage]=\"ariaErrorMessage ? ariaErrorMessage : null\"\r\n [attr.aria-haspopup]=\"ariaHasPopup ? ariaHasPopup : null\"\r\n [attr.aria-modal]=\"ariaModal ? ariaModal : null\"\r\n [attr.tabindex]=\"tabindex ? tabindex : null\">\r\n <ng-content></ng-content>\r\n </ul>\r\n</ng-template>\r\n\r\n<!-- tree -->\r\n<div [class]=\"['c-form-group', formGroupClasses] | makeHtmlList\"\r\n [ngClass]=\"{'c-form-group--error': (hasErrorsMessage() || formGroupClasses === 'c-form-group--error') }\">\r\n <ng-container *ngIf=\"hasFieldsetComponent(); else innerHtml\">\r\n <ng-content select=\"desy-fieldset\"></ng-content>\r\n </ng-container>\r\n</div>",
367
- providers: [
368
- {
369
- provide: NG_VALUE_ACCESSOR,
370
- useExisting: forwardRef(() => TreeComponent),
371
- multi: true
372
- }
373
- ]
374
- },] }
375
- ];
376
- TreeComponent.ctorParameters = () => [
377
- { type: ChangeDetectorRef }
378
- ];
379
- TreeComponent.propDecorators = {
380
- idPrefix: [{ type: Input }],
381
- classes: [{ type: Input }],
382
- name: [{ type: Input }],
383
- type: [{ type: Input }],
384
- describedBy: [{ type: Input }],
385
- formGroupClasses: [{ type: Input }],
386
- expandedFirstLevel: [{ type: Input }],
387
- decoupleChildFromParent: [{ type: Input }],
388
- disableDefaultSearch: [{ type: Input }],
389
- searchMatchValues: [{ type: Input }],
390
- searchMatchValuesChange: [{ type: Output }],
391
- allItems: [{ type: ContentChildren, args: [TreeItemComponent, { descendants: true },] }],
392
- fieldsetComponent: [{ type: ContentChildren, args: [FieldsetComponent,] }],
393
- searchBarComponent: [{ type: ContentChildren, args: [SearchBarComponent,] }],
394
- innerHtml: [{ type: ViewChild, args: ['innerHtml', { static: true },] }]
395
- };
396
- __decorate([
397
- DesyOnInputChange('onSearchMatchValuesChange')
398
- ], TreeComponent.prototype, "searchMatchValues", void 0);
399
- __decorate([
400
- DesyOnInputChange('configureAllItems')
401
- ], TreeComponent.prototype, "allItems", void 0);
402
- __decorate([
403
- DesyContentChild({ onSetCallbackName: 'overrideFieldsetParams' })
404
- ], TreeComponent.prototype, "fieldsetComponent", void 0);
405
- __decorate([
406
- DesyContentChild({ onSetCallbackName: 'overrideSearchBarParams' })
407
- ], TreeComponent.prototype, "searchBarComponent", void 0);
408
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LWZvcm1zL2NvbXBvbmVudHMvdHJlZS90cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsZUFBZSxFQUFFLFlBQVksRUFDN0IsVUFBVSxFQUNWLEtBQUssRUFHTCxNQUFNLEVBQ3NCLFNBQVMsRUFDdEMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0seURBQXlELENBQUM7QUFDekYsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDNUYsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFFdEUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFFakUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFhdEUsTUFBTSxPQUFPLGFBQWMsU0FBUSxrQkFBeUI7SUFxQzFELFlBQW9CLGNBQWlDO1FBQ25ELEtBQUssRUFBRSxDQUFDO1FBRFUsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBM0I1Qyx1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDMUIsNEJBQXVCLEdBQUcsS0FBSyxDQUFDO1FBRWhDLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUk1Qiw0QkFBdUIsR0FBMkIsSUFBSSxZQUFZLEVBQVksQ0FBQztRQWFqRixjQUFTLEdBQXdCLEVBQUUsQ0FBQztRQUdwQyxrQ0FBNkIsR0FBbUIsRUFBRSxDQUFD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QUFXLEVBQUUsSUFBSSxFQUFFO2dDQUd4RCxlQUFlLFNBQUMsaUJBQWlCO2lDQUdqQyxlQUFlLFNBQUMsa0JBQWtCO3dCQUVsQyxTQUFTLFNBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTs7QUFaL0I7SUFEUixpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQzt3REFDVjtBQUlzQjtJQUQxRCxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQzsrQ0FDMkQ7QUFHOUQ7SUFEbkMsZ0JBQWdCLENBQUMsRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsRUFBQyxDQUFDO3dEQUNRO0FBR3BDO0lBRHBDLGdCQUFnQixDQUFDLEVBQUUsaUJBQWlCLEVBQUUseUJBQXlCLEVBQUMsQ0FBQzt5REFDVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZHJlbiwgRXZlbnRFbWl0dGVyLFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uRGVzdHJveSxcclxuICBPdXRwdXQsIFF1ZXJ5TGlzdCxcclxuICBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7RGVzeUNvbnRlbnRDaGlsZH0gZnJvbSBcIi4uLy4uLy4uL3NoYXJlZC9kZWNvcmF0b3JzL2Rlc3ktY29udGVudC1jaGlsZC5kZWNvcmF0b3JcIjtcclxuaW1wb3J0IHtUcmVlSXRlbUNvbXBvbmVudH0gZnJvbSBcIi4vdHJlZS1pdGVtL3RyZWUtaXRlbS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtEZXN5T25JbnB1dENoYW5nZX0gZnJvbSBcIi4uLy4uLy4uL3NoYXJlZC9kZWNvcmF0b3JzL2Rlc3ktb24taW5wdXQtY2hhbmdlLmRlY29yYXRvclwiO1xyXG5pbXBvcnQge05HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHtGb3JtRmllbGRDb21wb25lbnR9IGZyb20gXCIuLi9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge0ZpZWxkc2V0Q29tcG9uZW50fSBmcm9tIFwiLi4vZmllbGRzZXQvZmllbGRzZXQuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7UXVpdFRyZWVJdGVtRm9jdXNPcHRpb25zfSBmcm9tIFwiLi9pbnRlcmZhY2VzL3F1aXQtdHJlZS1pdGVtLWZvY3VzLW9wdGlvbnNcIjtcclxuaW1wb3J0IHtTZWFyY2hCYXJDb21wb25lbnR9IGZyb20gXCIuLi9zZWFyY2gtYmFyL3NlYXJjaC1iYXIuY29tcG9uZW50XCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Rlc3ktdHJlZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVHJlZUNvbXBvbmVudCksXHJcbiAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJlZUNvbXBvbmVudCBleHRlbmRzIEZvcm1GaWVsZENvbXBvbmVudDxhbnlbXT4gaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcblxyXG4gIEBJbnB1dCgpIGlkUHJlZml4OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY2xhc3Nlczogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZztcclxuICBASW5wdXQoKSB0eXBlOiAncmFkaW8nfCdjaGVja2JveCd8bnVsbHx1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgZGVzY3JpYmVkQnk6IHN0cmluZztcclxuXHJcbiAgQElucHV0KCkgZm9ybUdyb3VwQ2xhc3NlczogYW55O1xyXG5cclxuICBASW5wdXQoKSBleHBhbmRlZEZpcnN0TGV2ZWwgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGRlY291cGxlQ2hpbGRGcm9tUGFyZW50ID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGRpc2FibGVEZWZhdWx0U2VhcmNoID0gZmFsc2U7XHJcblxyXG4gIEBEZXN5T25JbnB1dENoYW5nZSgnb25TZWFyY2hNYXRjaFZhbHVlc0NoYW5nZScpXHJcbiAgQElucHV0KCkgc2VhcmNoTWF0Y2hWYWx1ZXM6IHN0cmluZ1tdO1xyXG4gIEBPdXRwdXQoKSBzZWFyY2hNYXRjaFZhbHVlc0NoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZ1tdPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XHJcblxyXG4gIEBEZXN5T25JbnB1dENoYW5nZSgnY29uZmlndXJlQWxsSXRlbXMnKVxyXG4gIEBDb250ZW50Q2hpbGRyZW4oVHJlZUl0ZW1Db21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgYWxsSXRlbXM6IFF1ZXJ5TGlzdDxUcmVlSXRlbUNvbXBvbmVudD47XHJcblxyXG4gIEBEZXN5Q29udGVudENoaWxkKHsgb25TZXRDYWxsYmFja05hbWU6ICdvdmVycmlkZUZpZWxkc2V0UGFyYW1zJ30pXHJcbiAgQENvbnRlbnRDaGlsZHJlbihGaWVsZHNldENvbXBvbmVudCkgZmllbGRzZXRDb21wb25lbnQ6IEZpZWxkc2V0Q29tcG9uZW50O1xyXG5cclxuICBARGVzeUNvbnRlbnRDaGlsZCh7IG9uU2V0Q2FsbGJhY2tOYW1lOiAnb3ZlcnJpZGVTZWFyY2hCYXJQYXJhbXMnfSlcclxuICBAQ29udGVudENoaWxkcmVuKFNlYXJjaEJhckNvbXBvbmVudCkgc2VhcmNoQmFyQ29tcG9uZW50OiBTZWFyY2hCYXJDb21wb25lbnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2lubmVySHRtbCcsIHsgc3RhdGljOiB0cnVlIH0pIGlubmVySHRtbDogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgcHJpdmF0ZSByb290SXRlbXM6IFRyZWVJdGVtQ29tcG9uZW50W10gPSBbXTtcclxuICBwcml2YXRlIF9pdGVtTGlzdFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgX2FsbEl0ZW1MaXN0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBfaXRlbUxpc3RDaGVja2VkU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIF9pdGVtTGlzdFF1aXRGb2N1c1N1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgcHJpdmF0ZSBfYWxyZWFkeUNvbmZpZ3VyaW5nSXRlbXMgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xlYXJTdWJzY3JpcHRpb25zKHRoaXMuX2l0ZW1MaXN0Q2hlY2tlZFN1YnNjcmlwdGlvbnMpO1xyXG4gICAgdGhpcy5jbGVhclN1YnNjcmlwdGlvbnModGhpcy5faXRlbUxpc3RRdWl0Rm9jdXNTdWJzY3JpcHRpb25zKTtcclxuICAgIHRoaXMuX2l0ZW1MaXN0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5fYWxsSXRlbUxpc3RTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbmZpZ3VyZUFsbEl0ZW1zKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZSBzb2JyZXNjcmliZSBlbCB2YWxvciBwYXJhIGFjdHVhbGl6YXIgbG9zIGl0ZW1zXHJcbiAgICogQE92ZXJyaWRlXHJcbiAgICovXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB0aGlzLmNvbmZpZ3VyZUFsbEl0ZW1zKHRydWUpO1xyXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogRXZlbnRvc1xyXG4gICAqL1xyXG5cclxuICAvKipcclxuICAgKiBBY3R1YWxpemEgZWwgdmFsb3IgZGVsIGNvbXBvbmVudGUgYWwgY2hlY2txdWVhcnNlIHVuIMOtdGVtXHJcbiAgICogQHBhcmFtIG9yaWdpbkl0ZW0gw610ZW0gbW9kaWZpY2Fkb1xyXG4gICAqL1xyXG4gIHVwZGF0ZVZhbHVlRnJvbUl0ZW1zKG9yaWdpbkl0ZW0/OiBUcmVlSXRlbUNvbXBvbmVudCk6IHZvaWQge1xyXG5cclxuICAgIC8vIFNpIGVzIHJhZGlvLCBzZSBkZXNhY3RpdmFuIGVsIHJlc3RvIGRlIGl0ZW1zIGN1YW5kbyBzZSBhY3RpdmEgb3RybyBpdGVtXHJcbiAgICBpZiAodGhpcy50eXBlICE9PSAnY2hlY2tib3gnKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRBbGxJdGVtc0luT3JkZXIoKTtcclxuICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpZiAoaXRlbSAhPT0gb3JpZ2luSXRlbSAmJiBpdGVtLmNoZWNrZWQpIHtcclxuICAgICAgICAgIGl0ZW0uc2V0Q2hlY2tlZChmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuZGVjb3VwbGVDaGlsZEZyb21QYXJlbnQpIHtcclxuICAgICAgdGhpcy5yb290SXRlbXMuZm9yRWFjaChpdGVtID0+IGl0ZW0uc2V0Q2hlY2tlZEF1dG9tYXRpY2FsbHlEZXBlbmRpbmdPbkNoaWxkcmVuKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudmFsdWUgPSBbXTtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRBbGxJdGVtc0luT3JkZXIoKTtcclxuICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLmNoZWNrZWQpIHtcclxuICAgICAgICB0aGlzLnZhbHVlLnB1c2goaXRlbS52YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlc3Rpb25hIGN1YW5kbyBlbCBmb2NvIGFiYW5kb25hIHVuIMOtdGVtIGRlc2RlIHVuIGV2ZW50byBkZSB0ZWNsYWRvIGNvbnRyb2xhZG9cclxuICAgKiBAcGFyYW0gb3B0aW9uc1xyXG4gICAqL1xyXG4gIGhhbmRsZUl0ZW1RdWl0Rm9jdXMob3B0aW9uczogUXVpdFRyZWVJdGVtRm9jdXNPcHRpb25zKTogdm9pZCB7XHJcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm5leHRFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRBbGxJdGVtc0luT3JkZXIoKTtcclxuICAgICAgY29uc3QgZm9jdXNhYmxlSXRlbXMgPSBpdGVtcy5maWx0ZXIoaXRlbSA9PiAhaXRlbS5pc0hpZGRlbigpICYmICFpdGVtLmRpc2FibGVkICYmIGl0ZW0uYWxsUGFyZW50c0V4cGFuZGVkKTtcclxuICAgICAgc3dpdGNoIChvcHRpb25zLm5leHRFbGVtZW50KSB7XHJcbiAgICAgICAgY2FzZSBcImZpcnN0XCI6XHJcbiAgICAgICAgICBmb2N1c2FibGVJdGVtc1swXS5mb2N1cygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcImxhc3RcIjpcclxuICAgICAgICAgIGZvY3VzYWJsZUl0ZW1zW2ZvY3VzYWJsZUl0ZW1zLmxlbmd0aCAtIDFdLmZvY3VzKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwicGFyZW50XCI6XHJcbiAgICAgICAgICBjb25zdCBjdXJyZW50U3ViTGV2ZWwgPSBvcHRpb25zLmN1cnJlbnRJdGVtLnN1YkxldmVsO1xyXG4gICAgICAgICAgaWYgKGN1cnJlbnRTdWJMZXZlbCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudEl0ZW1JbmRleCA9IGZvY3VzYWJsZUl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IG9wdGlvbnMuY3VycmVudEl0ZW0pO1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBmb2N1c2FibGVJdGVtcy5zbGljZSgwLCBjdXJyZW50SXRlbUluZGV4KS5yZXZlcnNlKCkuZmluZChpdGVtID0+IGl0ZW0uc3ViTGV2ZWwgPCBjdXJyZW50U3ViTGV2ZWwpO1xyXG4gICAgICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICAgICAgcGFyZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCJmaXJzdENoaWxkXCI6XHJcbiAgICAgICAgY2FzZSBcIm5leHRcIjpcclxuICAgICAgICAgIGlmIChvcHRpb25zLmN1cnJlbnRJdGVtKSB7XHJcbiAgICAgICAgICAgIGxldCBjdXJyZW50SXRlbUluZGV4ID0gZm9jdXNhYmxlSXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gb3B0aW9ucy5jdXJyZW50SXRlbSk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50SXRlbUluZGV4IDwgZm9jdXNhYmxlSXRlbXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgIGZvY3VzYWJsZUl0ZW1zW2N1cnJlbnRJdGVtSW5kZXggKyAxXS5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwicHJldmlvdXNcIjpcclxuICAgICAgICAgIGlmIChvcHRpb25zLmN1cnJlbnRJdGVtKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtSW5kZXggPSBmb2N1c2FibGVJdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtID09PSBvcHRpb25zLmN1cnJlbnRJdGVtKTtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRJdGVtSW5kZXggPiAwKSB7XHJcbiAgICAgICAgICAgICAgZm9jdXNhYmxlSXRlbXNbY3VycmVudEl0ZW1JbmRleCAtIDFdLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWFsaXphIGxhIGLDunNxdWVkYSBpbnRlcm5hIGRlIGxvcyBpdGVtcyBlbiBlbCBjb21wb25lbnRlXHJcbiAgICogQHBhcmFtIHZhbHVlIHRleHRvIGRlIGLDunNxdWVkYVxyXG4gICAqL1xyXG4gIG9uU2VhcmNoKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5kaXNhYmxlRGVmYXVsdFNlYXJjaCkge1xyXG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoTWF0Y2hWYWx1ZXMgPSB0aGlzLmFsbEl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0ubWF0Y2hlc1RleHQodmFsdWUpKS5tYXAoaXRlbSA9PiBpdGVtLnZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlYXJjaE1hdGNoVmFsdWVzID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlYXJjaE1hdGNoVmFsdWVzQ2hhbmdlLmVtaXQodGhpcy5zZWFyY2hNYXRjaFZhbHVlcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIEV2ZW50b3MgYWwgY2FtYmlhciBwcm9waWVkYWRlc1xyXG4gICAqL1xyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cmEgbG9zIGl0ZW1zIGRlbCDDoXJib2xcclxuICAgKi9cclxuICBjb25maWd1cmVBbGxJdGVtcyhpc1ZhbHVlQ2hhbmdlID0gZmFsc2UpOiB2b2lkIHtcclxuXHJcbiAgICBpZiAoIXRoaXMuX2FscmVhZHlDb25maWd1cmluZ0l0ZW1zKSB7XHJcbiAgICAgIHRoaXMuX2FscmVhZHlDb25maWd1cmluZ0l0ZW1zID0gdHJ1ZTtcclxuXHJcbiAgICAgIC8vIExvIHJlYWxpemFtb3MgZGVzZGUgdW4gc2V0VGltZW91dCBwYXJhIHF1ZSB0b2RvcyBsb3MgaW5wdXRzLCB2YWx1ZXMgeSBkZW3DoXMgdml2YW4gZW4gcGF6IHkgYXJtb27DrWFcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWxsSXRlbXM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMuY2xlYXJTdWJzY3JpcHRpb25zKHRoaXMuX2l0ZW1MaXN0Q2hlY2tlZFN1YnNjcmlwdGlvbnMpO1xyXG4gICAgICAgICAgdGhpcy5jbGVhclN1YnNjcmlwdGlvbnModGhpcy5faXRlbUxpc3RRdWl0Rm9jdXNTdWJzY3JpcHRpb25zKTtcclxuICAgICAgICAgIHRoaXMuYWxsSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaXRlbS5wYXJlbnROYW1lID0gdGhpcy5uYW1lO1xyXG4gICAgICAgICAgICBpdGVtLnR5cGUgPSB0aGlzLnR5cGU7XHJcbiAgICAgICAgICAgIGl0ZW0uaW5oZXJpdGVkRGVzY3JpYmVkQnkgPSB0aGlzLmdldERlc2NyaWJlZEJ5Rm9ySXRlbXMoKTtcclxuICAgICAgICAgICAgaXRlbS5pbmhlcml0ZWRFeHBhbmRlZEZpcnN0TGV2ZWwgPSB0aGlzLmV4cGFuZGVkRmlyc3RMZXZlbDtcclxuICAgICAgICAgICAgaXRlbS5pbmhlcml0ZWREZWNvdXBsZUNoaWxkRnJvbVBhcmVudCA9IHRoaXMuZGVjb3VwbGVDaGlsZEZyb21QYXJlbnQ7XHJcbiAgICAgICAgICAgIGlmICgodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHx8IGlzVmFsdWVDaGFuZ2UpIHtcclxuICAgICAgICAgICAgICBjb25zdCB2YWx1ZUxpc3QgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6IFtdO1xyXG4gICAgICAgICAgICAgIGl0ZW0uc2V0Q2hlY2tlZCghIXZhbHVlTGlzdC5maW5kKHYgPT4gdiA9PT0gaXRlbS52YWx1ZSksIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGl0ZW0uZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgY2hlY2tlZFN1YnNjcmlwdGlvbiA9IGl0ZW0uY2hlY2tlZENoYW5nZUZvclRyZWUuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlVmFsdWVGcm9tSXRlbXMoaXRlbSkpO1xyXG4gICAgICAgICAgICB0aGlzLl9pdGVtTGlzdENoZWNrZWRTdWJzY3JpcHRpb25zLnB1c2goY2hlY2tlZFN1YnNjcmlwdGlvbik7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBxdWl0Rm9jdXNTdWJzY3JpcHRpb24gPSBpdGVtLnF1aXRGb2N1cy5zdWJzY3JpYmUob3B0aW9ucyA9PiB0aGlzLmhhbmRsZUl0ZW1RdWl0Rm9jdXMob3B0aW9ucykpO1xyXG4gICAgICAgICAgICB0aGlzLl9pdGVtTGlzdFF1aXRGb2N1c1N1YnNjcmlwdGlvbnMucHVzaChxdWl0Rm9jdXNTdWJzY3JpcHRpb24pO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5zZXRFcnJvckluSXRlbXModGhpcy5oYXNFcnJvck1lc3NhZ2VDb21wb25lbnQoKSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5idWlsZFRyZWUoKTtcclxuICAgICAgICAgIGlmICghdGhpcy52YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlRnJvbUl0ZW1zKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoTWF0Y2hWYWx1ZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5vblNlYXJjaE1hdGNoVmFsdWVzQ2hhbmdlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5hbGxJdGVtcyAmJiAhdGhpcy5fYWxsSXRlbUxpc3RTdWJzY3JpcHRpb24pIHtcclxuICAgICAgICAgIHRoaXMuX2FsbEl0ZW1MaXN0U3Vic2NyaXB0aW9uID0gdGhpcy5hbGxJdGVtcy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNvbmZpZ3VyZUFsbEl0ZW1zKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgdGhpcy5fYWxyZWFkeUNvbmZpZ3VyaW5nSXRlbXMgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNb2RpZmljYSBsb3MgaXRlbXMgdmlzaWJsZXMgc2Vnw7puIGVsIGZpbHRybyBkZSBiw7pzcXVlZGFcclxuICAgKi9cclxuICBvblNlYXJjaE1hdGNoVmFsdWVzQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYWxsSXRlbXMpIHtcclxuICAgICAgdGhpcy5hbGxJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0uaW5oZXJpdGVkTWF0Y2hlc1NlYXJjaCA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2VhcmNoTWF0Y2hWYWx1ZXMgIT09IG51bGwgJiYgdGhpcy5zZWFyY2hNYXRjaFZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5hbGxJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoTWF0Y2hWYWx1ZXMuZmluZEluZGV4KHZhbHVlID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlKSA8IDApIHtcclxuICAgICAgICAgICAgaXRlbS5pbmhlcml0ZWRNYXRjaGVzU2VhcmNoID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBHZXR0ZXJzIGFuZCBzZXR0ZXJzXHJcbiAgICovXHJcblxyXG4gIGdldElkUHJlZml4KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pZFByZWZpeCA/IHRoaXMuaWRQcmVmaXggOiB0aGlzLm5hbWU7XHJcbiAgfVxyXG5cclxuICBnZXREZXNjcmliZWRCeSgpOiBzdHJpbmcge1xyXG4gICAgbGV0IGRlc2NyaWJlZEJ5ID0gJyc7XHJcbiAgICBpZiAodGhpcy5kZXNjcmliZWRCeSkge1xyXG4gICAgICBkZXNjcmliZWRCeSA9IHRoaXMuZGVzY3JpYmVkQnk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaGFzSGludENvbXBvbmVudCgpICYmIHRoaXMuaGludENvbXBvbmVudC5pZCkge1xyXG4gICAgICBkZXNjcmliZWRCeSA9IGRlc2NyaWJlZEJ5ICsgJyAnICsgdGhpcy5oaW50Q29tcG9uZW50LmlkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhhc0Vycm9yTWVzc2FnZUNvbXBvbmVudCgpICYmIHRoaXMuZXJyb3JNZXNzYWdlQ29tcG9uZW50LmlkKSB7XHJcbiAgICAgIGRlc2NyaWJlZEJ5ID0gZGVzY3JpYmVkQnkgKyAnICcgKyB0aGlzLmVycm9yTWVzc2FnZUNvbXBvbmVudC5pZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGVzY3JpYmVkQnk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZXZ1ZWx2ZSBlbCB2YWxvciBkZSBkZXNjcmliZWRCeSBxdWUgc2UgdHJhbnNtaXRpcsOhIGEgbG9zIGl0ZW1zXHJcbiAgICovXHJcbiAgZ2V0RGVzY3JpYmVkQnlGb3JJdGVtcygpOiBzdHJpbmcge1xyXG4gICAgbGV0IGRlc2NyaWJlZEJ5O1xyXG4gICAgaWYgKHRoaXMuaGFzRmllbGRzZXRDb21wb25lbnQoKSkge1xyXG4gICAgICBkZXNjcmliZWRCeSA9IHRoaXMuZmllbGRzZXRDb21wb25lbnQuZGVzY3JpYmVkQnk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkZXNjcmliZWRCeSA9IHRoaXMuZ2V0RGVzY3JpYmVkQnkoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGVzY3JpYmVkQnk7XHJcbiAgfVxyXG5cclxuICBoYXNGaWVsZHNldENvbXBvbmVudCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhIXRoaXMuZmllbGRzZXRDb21wb25lbnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPdmVycmlkZXMgc3VwZXIuZ2V0SGludElkKCk7XHJcbiAgICovXHJcbiAgZ2V0SGludElkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pZFByZWZpeCA/IHRoaXMuaWRQcmVmaXggKyAnLWhpbnQnIDogdGhpcy5oaW50Q29tcG9uZW50Py5pZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE92ZXJyaWRlcyBzdXBlci5nZXRIaW50SWQoKTtcclxuICAgKi9cclxuICBnZXRFcnJvcklkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pZFByZWZpeCA/IHRoaXMuaWRQcmVmaXggKyAnLWVycm9yJyA6IHRoaXMuZXJyb3JNZXNzYWdlQ29tcG9uZW50Py5pZDtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogRnVuY2lvbmVzIHBhcmEgcmVlbXBsYXphciBlbCBjb250ZW5pZG8gZGVsIGZpZWxkc2V0LCBsYWJlbCwgaGludCBvIGVycm9ybWVzc2FnZVxyXG4gICAqL1xyXG5cclxuICBvdmVycmlkZUZpZWxkc2V0UGFyYW1zKGZpZWxkc2V0OiBGaWVsZHNldENvbXBvbmVudCk6IHZvaWQge1xyXG4gICAgZmllbGRzZXQuY2FsbGVyID0gdGhpcy5pbm5lckh0bWw7XHJcbiAgICBmaWVsZHNldC5lcnJvcklkID0gdGhpcy5nZXRFcnJvcklkKCk7XHJcbiAgICBmaWVsZHNldC5kZXNjcmliZWRCeSA9IHRoaXMuZ2V0RGVzY3JpYmVkQnkoKTtcclxuICAgIGZpZWxkc2V0LmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlU2VhcmNoQmFyUGFyYW1zKHNlYXJjaGJhcjogU2VhcmNoQmFyQ29tcG9uZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBkZWZhdWx0T25DaGFuZ2UgPSBzZWFyY2hiYXIub25DaGFuZ2U7XHJcbiAgICBjb25zdCBuZXdPbkNoYW5nZSA9IHZhbHVlID0+IHtcclxuICAgICAgdGhpcy5vblNlYXJjaCh2YWx1ZSk7XHJcbiAgICAgIGRlZmF1bHRPbkNoYW5nZSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBzZWFyY2hiYXIucmVnaXN0ZXJPbkNoYW5nZShuZXdPbkNoYW5nZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZSBsbGFtYSBkZXNkZSBGb3JtRmllbGRcclxuICAgKi9cclxuICBvdmVycmlkZUhpbnRQYXJhbXMoaGludCk6IHZvaWQge1xyXG4gICAgaGludC5pZCA9IHRoaXMuZ2V0SGludElkKCk7XHJcbiAgICBoaW50LmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlIGxsYW1hIGRlc2RlIEZvcm1GaWVsZFxyXG4gICAqL1xyXG4gIG92ZXJyaWRlRXJyb3JNZXNzYWdlUGFyYW1zKGVycm9yTWVzc2FnZSk6IHZvaWQge1xyXG4gICAgZXJyb3JNZXNzYWdlLmlkID0gdGhpcy5nZXRFcnJvcklkKCk7XHJcbiAgICB0aGlzLnNldEVycm9ySW5JdGVtcyh0aGlzLmhhc0Vycm9yTWVzc2FnZUNvbXBvbmVudCgpKTtcclxuICAgIGVycm9yTWVzc2FnZS5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZSBsbGFtYSBkZXNkZSBGb3JtRmllbGRcclxuICAgKi9cclxuICBvbkRlbGV0ZUVycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0RXJyb3JJbkl0ZW1zKHRoaXMuaGFzRXJyb3JNZXNzYWdlQ29tcG9uZW50KCkpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBNw6l0b2RvcyBwcml2YWRvc1xyXG4gICAqL1xyXG5cclxuICAvKipcclxuICAgKiBDb25maWd1cmEgbGEgZXN0cnVjdHVyYSBkZWwgw6FyYm9sXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIGJ1aWxkVHJlZSgpOiB2b2lkIHtcclxuXHJcbiAgICAvLyBTZSBjcmVhIHVuIG1hcGEgcGFyYSB0ZW5lciBhY2Nlc2libGVzIGxvcyBpdGVtcyBwb3Iga2V5IHkgc2UgYm9ycmFuIGxvcyBsaXN0YWRvcyBleGlzdGVudGVzXHJcbiAgICBjb25zdCBpdGVtTWFwID0ge31cclxuICAgIHRoaXMucm9vdEl0ZW1zID0gW107XHJcbiAgICB0aGlzLmFsbEl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIGNvbnN0IGtleSA9IGl0ZW0uZ2V0S2V5KCk7XHJcbiAgICAgIGl0ZW1NYXBba2V5XSA9IGl0ZW07XHJcbiAgICAgIGlmIChpdGVtLnN1Yikge1xyXG4gICAgICAgIGl0ZW0uc3ViLml0ZW1MaXN0ID0gW107XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFNlIGHDsWFkZW4gbG9zIGl0ZW1zIGEgbG9zIGxpc3RhZG9zIGNvcnJlc3BvbmRpZW50ZXNcclxuICAgIHRoaXMuYWxsSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgY29uc3QgcGFyZW50S2V5ID0gaXRlbS5nZXRQYXJlbnRLZXkoKTtcclxuICAgICAgaWYgKHBhcmVudEtleSA9PT0gJ3Jvb3QnKSB7XHJcbiAgICAgICAgdGhpcy5yb290SXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgfSBlbHNlIGlmIChwYXJlbnRLZXkpIHtcclxuICAgICAgICBjb25zdCBzdWIgPSBpdGVtTWFwW3BhcmVudEtleV0uc3ViO1xyXG4gICAgICAgIGlmIChzdWIpIHtcclxuICAgICAgICAgIHN1Yi5pdGVtTGlzdC5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gU2UgY29uZmlndXJhbiBsb3MgaXRlbXMgZGVzZGUgcm9vdFxyXG4gICAgbGV0IG9yZGVyID0gMDtcclxuICAgIHRoaXMucm9vdEl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgIGl0ZW0uc2V0U3ViTGV2ZWwoMCk7XHJcbiAgICAgIGl0ZW0uc2V0RGVmYXVsdElkKGAke3RoaXMuaWRQcmVmaXh9LSR7aW5kZXh9YCk7XHJcbiAgICAgIGl0ZW0ucmVmcmVzaEFsbFBhcmVudHNFeHBhbmRlZFJlY3Vyc2l2ZSh0cnVlKTtcclxuICAgICAgaWYgKCF0aGlzLmRlY291cGxlQ2hpbGRGcm9tUGFyZW50KSB7XHJcbiAgICAgICAgaXRlbS5zZXRDaGVja2VkQXV0b21hdGljYWxseURlcGVuZGluZ09uQ2hpbGRyZW4oKTtcclxuICAgICAgfVxyXG4gICAgICBvcmRlciA9IGl0ZW0uc2V0T3JkZXJSZWN1cnNpdmVseShvcmRlcik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNpIHRpZW5lIHVuIG1lbnNhamUgZGUgZXJyb3IsIHNlIGluZGljYSBhIGxvcyBpdGVtc1xyXG4gICAqIEBwYXJhbSBoYXNFcnJvclxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRFcnJvckluSXRlbXMoaGFzRXJyb3I6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmFsbEl0ZW1zPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuYWxsSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBpdGVtLmluaGVyaXRlZEhhc0Vycm9yID0gaGFzRXJyb3I7XHJcbiAgICAgICAgaXRlbS5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGltcGlhIHVuIGxpc3RhZG8gZGUgc3Vic2NyaXBjaW9uZXNcclxuICAgKiBAcGFyYW0gc3Vic2NyaXB0aW9uTGlzdFxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjbGVhclN1YnNjcmlwdGlvbnMoc3Vic2NyaXB0aW9uTGlzdDogU3Vic2NyaXB0aW9uW10pOiB2b2lkIHtcclxuICAgIGlmIChzdWJzY3JpcHRpb25MaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgc3Vic2NyaXB0aW9uTGlzdC5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICAgICAgc3Vic2NyaXB0aW9uTGlzdC5zcGxpY2UoMCwgc3Vic2NyaXB0aW9uTGlzdC5sZW5ndGgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZXZ1ZWx2ZSBsb3MgaXRlbXMgZGVsIMOhcmJvbCBvcmRlbmFkb3NcclxuICAgKiBAcHJpdmF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0QWxsSXRlbXNJbk9yZGVyKCk6IFRyZWVJdGVtQ29tcG9uZW50W10ge1xyXG4gICAgbGV0IGxpc3QgPSBbXTtcclxuICAgIGlmICh0aGlzLmFsbEl0ZW1zKSB7XHJcbiAgICAgIGxpc3QgPSB0aGlzLmFsbEl0ZW1zLnRvQXJyYXkoKS5zb3J0KChhLCBiKSA9PiBhLm9yZGVySW5UcmVlID4gYi5vcmRlckluVHJlZSA/IDEgOiAtMSlcclxuICAgIH1cclxuICAgIHJldHVybiBsaXN0XHJcbiAgfVxyXG59XHJcbiJdfQ==
1
+ import { __decorate } from "tslib";
2
+ import { ChangeDetectorRef, Component, ContentChildren, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';
3
+ import { DesyContentChild } from "../../../shared/decorators/desy-content-child.decorator";
4
+ import { TreeItemComponent } from "./tree-item/tree-item.component";
5
+ import { DesyOnInputChange } from "../../../shared/decorators/desy-on-input-change.decorator";
6
+ import { NG_VALUE_ACCESSOR } from "@angular/forms";
7
+ import { FormFieldComponent } from "../form-field/form-field.component";
8
+ import { FieldsetComponent } from "../fieldset/fieldset.component";
9
+ import { SearchBarComponent } from "../search-bar/search-bar.component";
10
+ export class TreeComponent extends FormFieldComponent {
11
+ constructor(changeDetector) {
12
+ super();
13
+ this.changeDetector = changeDetector;
14
+ this.expandedFirstLevel = true;
15
+ this.decoupleChildFromParent = false;
16
+ this.disableDefaultSearch = false;
17
+ this.searchMatchValuesChange = new EventEmitter();
18
+ this.rootItems = [];
19
+ this._itemListCheckedSubscriptions = [];
20
+ this._itemListQuitFocusSubscriptions = [];
21
+ this._alreadyConfiguringItems = false;
22
+ }
23
+ ngOnDestroy() {
24
+ var _a, _b;
25
+ this.clearSubscriptions(this._itemListCheckedSubscriptions);
26
+ this.clearSubscriptions(this._itemListQuitFocusSubscriptions);
27
+ (_a = this._itemListSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
28
+ (_b = this._allItemListSubscription) === null || _b === void 0 ? void 0 : _b.unsubscribe();
29
+ }
30
+ ngOnChanges(changes) {
31
+ this.configureAllItems();
32
+ }
33
+ /**
34
+ * Se sobrescribe el valor para actualizar los items
35
+ * @Override
36
+ */
37
+ writeValue(value) {
38
+ this.value = value;
39
+ this.configureAllItems(true);
40
+ this.onChange(this.value);
41
+ }
42
+ /*
43
+ * Eventos
44
+ */
45
+ /**
46
+ * Actualiza el valor del componente al checkquearse un ítem
47
+ * @param originItem ítem modificado
48
+ */
49
+ updateValueFromItems(originItem) {
50
+ // Si es radio, se desactivan el resto de items cuando se activa otro item
51
+ if (this.type !== 'checkbox') {
52
+ const items = this.getAllItemsInOrder();
53
+ items.forEach(item => {
54
+ if (item !== originItem && item.checked) {
55
+ item.setChecked(false, true);
56
+ }
57
+ });
58
+ }
59
+ else if (!this.decoupleChildFromParent) {
60
+ this.rootItems.forEach(item => item.setCheckedAutomaticallyDependingOnChildren());
61
+ }
62
+ this.value = [];
63
+ const items = this.getAllItemsInOrder();
64
+ items.forEach(item => {
65
+ if (item.checked) {
66
+ this.value.push(item.value);
67
+ }
68
+ });
69
+ this.onChange(this.value);
70
+ }
71
+ /**
72
+ * Gestiona cuando el foco abandona un ítem desde un evento de teclado controlado
73
+ * @param options
74
+ */
75
+ handleItemQuitFocus(options) {
76
+ if (options && options.nextElement) {
77
+ const items = this.getAllItemsInOrder();
78
+ const focusableItems = items.filter(item => !item.isHidden() && !item.disabled && item.allParentsExpanded);
79
+ switch (options.nextElement) {
80
+ case "first":
81
+ focusableItems[0].focus();
82
+ break;
83
+ case "last":
84
+ focusableItems[focusableItems.length - 1].focus();
85
+ break;
86
+ case "parent":
87
+ const currentSubLevel = options.currentItem.subLevel;
88
+ if (currentSubLevel > 0) {
89
+ const currentItemIndex = focusableItems.findIndex(item => item === options.currentItem);
90
+ const parent = focusableItems.slice(0, currentItemIndex).reverse().find(item => item.subLevel < currentSubLevel);
91
+ if (parent) {
92
+ parent.focus();
93
+ }
94
+ }
95
+ break;
96
+ case "firstChild":
97
+ case "next":
98
+ if (options.currentItem) {
99
+ let currentItemIndex = focusableItems.findIndex(item => item === options.currentItem);
100
+ if (currentItemIndex < focusableItems.length - 1) {
101
+ focusableItems[currentItemIndex + 1].focus();
102
+ }
103
+ }
104
+ break;
105
+ case "previous":
106
+ if (options.currentItem) {
107
+ const currentItemIndex = focusableItems.findIndex(item => item === options.currentItem);
108
+ if (currentItemIndex > 0) {
109
+ focusableItems[currentItemIndex - 1].focus();
110
+ }
111
+ }
112
+ break;
113
+ }
114
+ }
115
+ }
116
+ /**
117
+ * Realiza la búsqueda interna de los items en el componente
118
+ * @param value texto de búsqueda
119
+ */
120
+ onSearch(value) {
121
+ if (!this.disableDefaultSearch) {
122
+ if (value && value.length > 0) {
123
+ this.searchMatchValues = this.allItems.filter(item => item.matchesText(value)).map(item => item.value);
124
+ }
125
+ else {
126
+ this.searchMatchValues = null;
127
+ }
128
+ this.searchMatchValuesChange.emit(this.searchMatchValues);
129
+ }
130
+ }
131
+ /*
132
+ * Eventos al cambiar propiedades
133
+ */
134
+ /**
135
+ * Configura los items del árbol
136
+ */
137
+ configureAllItems(isValueChange = false) {
138
+ if (!this._alreadyConfiguringItems) {
139
+ this._alreadyConfiguringItems = true;
140
+ // Lo realizamos desde un setTimeout para que todos los inputs, values y demás vivan en paz y armonía
141
+ setTimeout(() => {
142
+ var _a;
143
+ if (((_a = this.allItems) === null || _a === void 0 ? void 0 : _a.length) > 0) {
144
+ this.clearSubscriptions(this._itemListCheckedSubscriptions);
145
+ this.clearSubscriptions(this._itemListQuitFocusSubscriptions);
146
+ this.allItems.forEach(item => {
147
+ item.parentName = this.name;
148
+ item.type = this.type;
149
+ item.inheritedDescribedBy = this.getDescribedByForItems();
150
+ item.inheritedExpandedFirstLevel = this.expandedFirstLevel;
151
+ item.inheritedDecoupleChildFromParent = this.decoupleChildFromParent;
152
+ if ((this.value && this.value.length > 0) || isValueChange) {
153
+ const valueList = this.value ? this.value : [];
154
+ item.setChecked(!!valueList.find(v => v === item.value), true);
155
+ }
156
+ item.detectChanges();
157
+ const checkedSubscription = item.checkedChangeForTree.subscribe(() => this.updateValueFromItems(item));
158
+ this._itemListCheckedSubscriptions.push(checkedSubscription);
159
+ const quitFocusSubscription = item.quitFocus.subscribe(options => this.handleItemQuitFocus(options));
160
+ this._itemListQuitFocusSubscriptions.push(quitFocusSubscription);
161
+ });
162
+ this.setErrorInItems(this.hasErrorMessageComponent());
163
+ this.buildTree();
164
+ if (!this.value) {
165
+ this.updateValueFromItems();
166
+ }
167
+ if (this.searchMatchValues) {
168
+ this.onSearchMatchValuesChange();
169
+ }
170
+ }
171
+ if (this.allItems && !this._allItemListSubscription) {
172
+ this._allItemListSubscription = this.allItems.changes.subscribe(() => this.configureAllItems());
173
+ }
174
+ this.changeDetector.detectChanges();
175
+ this._alreadyConfiguringItems = false;
176
+ });
177
+ }
178
+ }
179
+ /**
180
+ * Modifica los items visibles según el filtro de búsqueda
181
+ */
182
+ onSearchMatchValuesChange() {
183
+ if (this.allItems) {
184
+ this.allItems.forEach(item => {
185
+ item.inheritedMatchesSearch = true;
186
+ });
187
+ if (this.searchMatchValues !== null && this.searchMatchValues !== undefined) {
188
+ this.allItems.forEach(item => {
189
+ if (this.searchMatchValues.findIndex(value => item.value === value) < 0) {
190
+ item.inheritedMatchesSearch = false;
191
+ }
192
+ });
193
+ }
194
+ }
195
+ }
196
+ /*
197
+ * Getters and setters
198
+ */
199
+ getIdPrefix() {
200
+ return this.idPrefix ? this.idPrefix : this.name;
201
+ }
202
+ getDescribedBy() {
203
+ let describedBy = '';
204
+ if (this.describedBy) {
205
+ describedBy = this.describedBy;
206
+ }
207
+ if (this.hasHintComponent() && this.hintComponent.id) {
208
+ describedBy = describedBy + ' ' + this.hintComponent.id;
209
+ }
210
+ if (this.hasErrorMessageComponent() && this.errorMessageComponent.id) {
211
+ describedBy = describedBy + ' ' + this.errorMessageComponent.id;
212
+ }
213
+ return describedBy;
214
+ }
215
+ /**
216
+ * Devuelve el valor de describedBy que se transmitirá a los items
217
+ */
218
+ getDescribedByForItems() {
219
+ let describedBy;
220
+ if (this.hasFieldsetComponent()) {
221
+ describedBy = this.fieldsetComponent.describedBy;
222
+ }
223
+ else {
224
+ describedBy = this.getDescribedBy();
225
+ }
226
+ return describedBy;
227
+ }
228
+ hasFieldsetComponent() {
229
+ return !!this.fieldsetComponent;
230
+ }
231
+ /**
232
+ * Overrides super.getHintId();
233
+ */
234
+ getHintId() {
235
+ var _a;
236
+ return this.idPrefix ? this.idPrefix + '-hint' : (_a = this.hintComponent) === null || _a === void 0 ? void 0 : _a.id;
237
+ }
238
+ /**
239
+ * Overrides super.getHintId();
240
+ */
241
+ getErrorId() {
242
+ var _a;
243
+ return this.idPrefix ? this.idPrefix + '-error' : (_a = this.errorMessageComponent) === null || _a === void 0 ? void 0 : _a.id;
244
+ }
245
+ /*
246
+ * Funciones para reemplazar el contenido del fieldset, label, hint o errormessage
247
+ */
248
+ overrideFieldsetParams(fieldset) {
249
+ fieldset.caller = this.innerHtml;
250
+ fieldset.errorId = this.getErrorId();
251
+ fieldset.describedBy = this.getDescribedBy();
252
+ fieldset.detectChanges();
253
+ }
254
+ overrideSearchBarParams(searchbar) {
255
+ const defaultOnChange = searchbar.onChange;
256
+ const newOnChange = value => {
257
+ this.onSearch(value);
258
+ defaultOnChange(value);
259
+ };
260
+ searchbar.registerOnChange(newOnChange);
261
+ }
262
+ /**
263
+ * Se llama desde FormField
264
+ */
265
+ overrideHintParams(hint) {
266
+ hint.id = this.getHintId();
267
+ hint.detectChanges();
268
+ }
269
+ /**
270
+ * Se llama desde FormField
271
+ */
272
+ overrideErrorMessageParams(errorMessage) {
273
+ errorMessage.id = this.getErrorId();
274
+ this.setErrorInItems(this.hasErrorMessageComponent());
275
+ errorMessage.detectChanges();
276
+ }
277
+ /**
278
+ * Se llama desde FormField
279
+ */
280
+ onDeleteErrorMessage(errorMessage) {
281
+ this.setErrorInItems(this.hasErrorMessageComponent());
282
+ }
283
+ /*
284
+ * Métodos privados
285
+ */
286
+ /**
287
+ * Configura la estructura del árbol
288
+ * @private
289
+ */
290
+ buildTree() {
291
+ // Se crea un mapa para tener accesibles los items por key y se borran los listados existentes
292
+ const itemMap = {};
293
+ this.rootItems = [];
294
+ this.allItems.forEach(item => {
295
+ const key = item.getKey();
296
+ itemMap[key] = item;
297
+ if (item.sub) {
298
+ item.sub.itemList = [];
299
+ }
300
+ });
301
+ // Se añaden los items a los listados correspondientes
302
+ this.allItems.forEach(item => {
303
+ const parentKey = item.getParentKey();
304
+ if (parentKey === 'root') {
305
+ this.rootItems.push(item);
306
+ }
307
+ else if (parentKey) {
308
+ const sub = itemMap[parentKey].sub;
309
+ if (sub) {
310
+ sub.itemList.push(item);
311
+ }
312
+ }
313
+ });
314
+ // Se configuran los items desde root
315
+ let order = 0;
316
+ this.rootItems.forEach((item, index) => {
317
+ item.setSubLevel(0);
318
+ item.setDefaultId(`${this.idPrefix}-${index}`);
319
+ item.refreshAllParentsExpandedRecursive(true);
320
+ if (!this.decoupleChildFromParent) {
321
+ item.setCheckedAutomaticallyDependingOnChildren();
322
+ }
323
+ order = item.setOrderRecursively(order);
324
+ });
325
+ }
326
+ /**
327
+ * Si tiene un mensaje de error, se indica a los items
328
+ * @param hasError
329
+ * @private
330
+ */
331
+ setErrorInItems(hasError) {
332
+ var _a;
333
+ if (((_a = this.allItems) === null || _a === void 0 ? void 0 : _a.length) > 0) {
334
+ this.allItems.forEach(item => {
335
+ item.inheritedHasError = hasError;
336
+ item.detectChanges();
337
+ });
338
+ }
339
+ }
340
+ /**
341
+ * Limpia un listado de subscripciones
342
+ * @param subscriptionList
343
+ * @private
344
+ */
345
+ clearSubscriptions(subscriptionList) {
346
+ if (subscriptionList.length > 0) {
347
+ subscriptionList.forEach(s => s.unsubscribe());
348
+ subscriptionList.splice(0, subscriptionList.length);
349
+ }
350
+ }
351
+ /**
352
+ * Devuelve los items del árbol ordenados
353
+ * @private
354
+ */
355
+ getAllItemsInOrder() {
356
+ let list = [];
357
+ if (this.allItems) {
358
+ list = this.allItems.toArray().sort((a, b) => a.orderInTree > b.orderInTree ? 1 : -1);
359
+ }
360
+ return list;
361
+ }
362
+ }
363
+ TreeComponent.decorators = [
364
+ { type: Component, args: [{
365
+ selector: 'desy-tree',
366
+ template: "\n<ng-template #innerHtml>\n <ng-content select=\"desy-hint\"></ng-content>\n <ng-content select=\"desy-error-message\"></ng-content>\n <ng-content select=\"desy-search-bar\"></ng-content>\n <ul [class]=\"['c-tree', classes] | makeHtmlList\"\n [attr.role]=\"role ? role : 'tree'\"\n [attr.aria-describedby]=\"ariaDescribedBy ? ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"ariaLabelledBy ? ariaLabelledBy : null\"\n [attr.aria-hidden]=\"ariaHidden ? ariaHidden : null\"\n [attr.aria-disabled]=\"ariaDisabled ? ariaDisabled : null\"\n [attr.aria-controls]=\"ariaControls ? ariaControls : null\"\n [attr.aria-current]=\"ariaCurrent ? ariaCurrent : null\"\n [attr.aria-live]=\"ariaLive ? ariaLive : null\"\n [attr.aria-expanded]=\"ariaExpanded ? ariaExpanded : null\"\n [attr.aria-errormessage]=\"ariaErrorMessage ? ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"ariaHasPopup ? ariaHasPopup : null\"\n [attr.aria-modal]=\"ariaModal ? ariaModal : null\"\n [attr.tabindex]=\"tabindex ? tabindex : null\">\n <ng-content></ng-content>\n </ul>\n</ng-template>\n\n<!-- tree -->\n<div [class]=\"['c-form-group', formGroupClasses] | makeHtmlList\"\n [ngClass]=\"{'c-form-group--error': (hasErrorsMessage() || formGroupClasses === 'c-form-group--error') }\">\n <ng-container *ngIf=\"hasFieldsetComponent(); else innerHtml\">\n <ng-content select=\"desy-fieldset\"></ng-content>\n </ng-container>\n</div>",
367
+ providers: [
368
+ {
369
+ provide: NG_VALUE_ACCESSOR,
370
+ useExisting: forwardRef(() => TreeComponent),
371
+ multi: true
372
+ }
373
+ ]
374
+ },] }
375
+ ];
376
+ TreeComponent.ctorParameters = () => [
377
+ { type: ChangeDetectorRef }
378
+ ];
379
+ TreeComponent.propDecorators = {
380
+ idPrefix: [{ type: Input }],
381
+ classes: [{ type: Input }],
382
+ name: [{ type: Input }],
383
+ type: [{ type: Input }],
384
+ describedBy: [{ type: Input }],
385
+ formGroupClasses: [{ type: Input }],
386
+ expandedFirstLevel: [{ type: Input }],
387
+ decoupleChildFromParent: [{ type: Input }],
388
+ disableDefaultSearch: [{ type: Input }],
389
+ searchMatchValues: [{ type: Input }],
390
+ searchMatchValuesChange: [{ type: Output }],
391
+ allItems: [{ type: ContentChildren, args: [TreeItemComponent, { descendants: true },] }],
392
+ fieldsetComponent: [{ type: ContentChildren, args: [FieldsetComponent,] }],
393
+ searchBarComponent: [{ type: ContentChildren, args: [SearchBarComponent,] }],
394
+ innerHtml: [{ type: ViewChild, args: ['innerHtml', { static: true },] }]
395
+ };
396
+ __decorate([
397
+ DesyOnInputChange('onSearchMatchValuesChange')
398
+ ], TreeComponent.prototype, "searchMatchValues", void 0);
399
+ __decorate([
400
+ DesyOnInputChange('configureAllItems')
401
+ ], TreeComponent.prototype, "allItems", void 0);
402
+ __decorate([
403
+ DesyContentChild({ onSetCallbackName: 'overrideFieldsetParams' })
404
+ ], TreeComponent.prototype, "fieldsetComponent", void 0);
405
+ __decorate([
406
+ DesyContentChild({ onSetCallbackName: 'overrideSearchBarParams' })
407
+ ], TreeComponent.prototype, "searchBarComponent", void 0);
408
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LWZvcm1zL2NvbXBvbmVudHMvdHJlZS90cmVlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsZUFBZSxFQUFFLFlBQVksRUFDN0IsVUFBVSxFQUNWLEtBQUssRUFHTCxNQUFNLEVBQ3NCLFNBQVMsRUFDdEMsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0seURBQXlELENBQUM7QUFDekYsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDNUYsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFFdEUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFFakUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFhdEUsTUFBTSxPQUFPLGFBQWMsU0FBUSxrQkFBeUI7SUFxQzFELFlBQW9CLGNBQWlDO1FBQ25ELEtBQUssRUFBRSxDQUFDO1FBRFUsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBM0I1Qyx1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDMUIsNEJBQXVCLEdBQUcsS0FBSyxDQUFDO1FBRWhDLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUk1Qiw0QkFBdUIsR0FBMkIsSUFBSSxZQUFZLEVBQVksQ0FBQztRQWFqRixjQUFTLEdBQXdCLEVBQUUsQ0FBQztRQUdwQyxrQ0FBNkIsR0FBbUIsRUFBRSxDQUFD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QUFXLEVBQUUsSUFBSSxFQUFFO2dDQUd4RCxlQUFlLFNBQUMsaUJBQWlCO2lDQUdqQyxlQUFlLFNBQUMsa0JBQWtCO3dCQUVsQyxTQUFTLFNBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTs7QUFaL0I7SUFEUixpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQzt3REFDVjtBQUlzQjtJQUQxRCxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQzsrQ0FDMkQ7QUFHOUQ7SUFEbkMsZ0JBQWdCLENBQUMsRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsRUFBQyxDQUFDO3dEQUNRO0FBR3BDO0lBRHBDLGdCQUFnQixDQUFDLEVBQUUsaUJBQWlCLEVBQUUseUJBQXlCLEVBQUMsQ0FBQzt5REFDVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbiwgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCwgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtEZXN5Q29udGVudENoaWxkfSBmcm9tIFwiLi4vLi4vLi4vc2hhcmVkL2RlY29yYXRvcnMvZGVzeS1jb250ZW50LWNoaWxkLmRlY29yYXRvclwiO1xuaW1wb3J0IHtUcmVlSXRlbUNvbXBvbmVudH0gZnJvbSBcIi4vdHJlZS1pdGVtL3RyZWUtaXRlbS5jb21wb25lbnRcIjtcbmltcG9ydCB7RGVzeU9uSW5wdXRDaGFuZ2V9IGZyb20gXCIuLi8uLi8uLi9zaGFyZWQvZGVjb3JhdG9ycy9kZXN5LW9uLWlucHV0LWNoYW5nZS5kZWNvcmF0b3JcIjtcbmltcG9ydCB7TkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHtGb3JtRmllbGRDb21wb25lbnR9IGZyb20gXCIuLi9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuY29tcG9uZW50XCI7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7RmllbGRzZXRDb21wb25lbnR9IGZyb20gXCIuLi9maWVsZHNldC9maWVsZHNldC5jb21wb25lbnRcIjtcbmltcG9ydCB7UXVpdFRyZWVJdGVtRm9jdXNPcHRpb25zfSBmcm9tIFwiLi9pbnRlcmZhY2VzL3F1aXQtdHJlZS1pdGVtLWZvY3VzLW9wdGlvbnNcIjtcbmltcG9ydCB7U2VhcmNoQmFyQ29tcG9uZW50fSBmcm9tIFwiLi4vc2VhcmNoLWJhci9zZWFyY2gtYmFyLmNvbXBvbmVudFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkZXN5LXRyZWUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVHJlZUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlQ29tcG9uZW50IGV4dGVuZHMgRm9ybUZpZWxkQ29tcG9uZW50PGFueVtdPiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICBASW5wdXQoKSBpZFByZWZpeDogc3RyaW5nO1xuICBASW5wdXQoKSBjbGFzc2VzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgdHlwZTogJ3JhZGlvJ3wnY2hlY2tib3gnfG51bGx8dW5kZWZpbmVkO1xuICBASW5wdXQoKSBkZXNjcmliZWRCeTogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIGZvcm1Hcm91cENsYXNzZXM6IGFueTtcblxuICBASW5wdXQoKSBleHBhbmRlZEZpcnN0TGV2ZWwgPSB0cnVlO1xuICBASW5wdXQoKSBkZWNvdXBsZUNoaWxkRnJvbVBhcmVudCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGRpc2FibGVEZWZhdWx0U2VhcmNoID0gZmFsc2U7XG5cbiAgQERlc3lPbklucHV0Q2hhbmdlKCdvblNlYXJjaE1hdGNoVmFsdWVzQ2hhbmdlJylcbiAgQElucHV0KCkgc2VhcmNoTWF0Y2hWYWx1ZXM6IHN0cmluZ1tdO1xuICBAT3V0cHV0KCkgc2VhcmNoTWF0Y2hWYWx1ZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xuXG4gIEBEZXN5T25JbnB1dENoYW5nZSgnY29uZmlndXJlQWxsSXRlbXMnKVxuICBAQ29udGVudENoaWxkcmVuKFRyZWVJdGVtQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGFsbEl0ZW1zOiBRdWVyeUxpc3Q8VHJlZUl0ZW1Db21wb25lbnQ+O1xuXG4gIEBEZXN5Q29udGVudENoaWxkKHsgb25TZXRDYWxsYmFja05hbWU6ICdvdmVycmlkZUZpZWxkc2V0UGFyYW1zJ30pXG4gIEBDb250ZW50Q2hpbGRyZW4oRmllbGRzZXRDb21wb25lbnQpIGZpZWxkc2V0Q29tcG9uZW50OiBGaWVsZHNldENvbXBvbmVudDtcblxuICBARGVzeUNvbnRlbnRDaGlsZCh7IG9uU2V0Q2FsbGJhY2tOYW1lOiAnb3ZlcnJpZGVTZWFyY2hCYXJQYXJhbXMnfSlcbiAgQENvbnRlbnRDaGlsZHJlbihTZWFyY2hCYXJDb21wb25lbnQpIHNlYXJjaEJhckNvbXBvbmVudDogU2VhcmNoQmFyQ29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ2lubmVySHRtbCcsIHsgc3RhdGljOiB0cnVlIH0pIGlubmVySHRtbDogVGVtcGxhdGVSZWY8YW55PjtcblxuICBwcml2YXRlIHJvb3RJdGVtczogVHJlZUl0ZW1Db21wb25lbnRbXSA9IFtdO1xuICBwcml2YXRlIF9pdGVtTGlzdFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9hbGxJdGVtTGlzdFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9pdGVtTGlzdENoZWNrZWRTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIF9pdGVtTGlzdFF1aXRGb2N1c1N1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgX2FscmVhZHlDb25maWd1cmluZ0l0ZW1zID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhclN1YnNjcmlwdGlvbnModGhpcy5faXRlbUxpc3RDaGVja2VkU3Vic2NyaXB0aW9ucyk7XG4gICAgdGhpcy5jbGVhclN1YnNjcmlwdGlvbnModGhpcy5faXRlbUxpc3RRdWl0Rm9jdXNTdWJzY3JpcHRpb25zKTtcbiAgICB0aGlzLl9pdGVtTGlzdFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9hbGxJdGVtTGlzdFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyZUFsbEl0ZW1zKCk7XG4gIH1cblxuICAvKipcbiAgICogU2Ugc29icmVzY3JpYmUgZWwgdmFsb3IgcGFyYSBhY3R1YWxpemFyIGxvcyBpdGVtc1xuICAgKiBAT3ZlcnJpZGVcbiAgICovXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmNvbmZpZ3VyZUFsbEl0ZW1zKHRydWUpO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gIH1cblxuICAvKlxuICAgKiBFdmVudG9zXG4gICAqL1xuXG4gIC8qKlxuICAgKiBBY3R1YWxpemEgZWwgdmFsb3IgZGVsIGNvbXBvbmVudGUgYWwgY2hlY2txdWVhcnNlIHVuIMOtdGVtXG4gICAqIEBwYXJhbSBvcmlnaW5JdGVtIMOtdGVtIG1vZGlmaWNhZG9cbiAgICovXG4gIHVwZGF0ZVZhbHVlRnJvbUl0ZW1zKG9yaWdpbkl0ZW0/OiBUcmVlSXRlbUNvbXBvbmVudCk6IHZvaWQge1xuXG4gICAgLy8gU2kgZXMgcmFkaW8sIHNlIGRlc2FjdGl2YW4gZWwgcmVzdG8gZGUgaXRlbXMgY3VhbmRvIHNlIGFjdGl2YSBvdHJvIGl0ZW1cbiAgICBpZiAodGhpcy50eXBlICE9PSAnY2hlY2tib3gnKSB7XG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0QWxsSXRlbXNJbk9yZGVyKCk7XG4gICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoaXRlbSAhPT0gb3JpZ2luSXRlbSAmJiBpdGVtLmNoZWNrZWQpIHtcbiAgICAgICAgICBpdGVtLnNldENoZWNrZWQoZmFsc2UsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmRlY291cGxlQ2hpbGRGcm9tUGFyZW50KSB7XG4gICAgICB0aGlzLnJvb3RJdGVtcy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5zZXRDaGVja2VkQXV0b21hdGljYWxseURlcGVuZGluZ09uQ2hpbGRyZW4oKSk7XG4gICAgfVxuXG4gICAgdGhpcy52YWx1ZSA9IFtdO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRBbGxJdGVtc0luT3JkZXIoKTtcbiAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKGl0ZW0uY2hlY2tlZCkge1xuICAgICAgICB0aGlzLnZhbHVlLnB1c2goaXRlbS52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXN0aW9uYSBjdWFuZG8gZWwgZm9jbyBhYmFuZG9uYSB1biDDrXRlbSBkZXNkZSB1biBldmVudG8gZGUgdGVjbGFkbyBjb250cm9sYWRvXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqL1xuICBoYW5kbGVJdGVtUXVpdEZvY3VzKG9wdGlvbnM6IFF1aXRUcmVlSXRlbUZvY3VzT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMubmV4dEVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRBbGxJdGVtc0luT3JkZXIoKTtcbiAgICAgIGNvbnN0IGZvY3VzYWJsZUl0ZW1zID0gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uaXNIaWRkZW4oKSAmJiAhaXRlbS5kaXNhYmxlZCAmJiBpdGVtLmFsbFBhcmVudHNFeHBhbmRlZCk7XG4gICAgICBzd2l0Y2ggKG9wdGlvbnMubmV4dEVsZW1lbnQpIHtcbiAgICAgICAgY2FzZSBcImZpcnN0XCI6XG4gICAgICAgICAgZm9jdXNhYmxlSXRlbXNbMF0uZm9jdXMoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImxhc3RcIjpcbiAgICAgICAgICBmb2N1c2FibGVJdGVtc1tmb2N1c2FibGVJdGVtcy5sZW5ndGggLSAxXS5mb2N1cygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicGFyZW50XCI6XG4gICAgICAgICAgY29uc3QgY3VycmVudFN1YkxldmVsID0gb3B0aW9ucy5jdXJyZW50SXRlbS5zdWJMZXZlbDtcbiAgICAgICAgICBpZiAoY3VycmVudFN1YkxldmVsID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEl0ZW1JbmRleCA9IGZvY3VzYWJsZUl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IG9wdGlvbnMuY3VycmVudEl0ZW0pO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gZm9jdXNhYmxlSXRlbXMuc2xpY2UoMCwgY3VycmVudEl0ZW1JbmRleCkucmV2ZXJzZSgpLmZpbmQoaXRlbSA9PiBpdGVtLnN1YkxldmVsIDwgY3VycmVudFN1YkxldmVsKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgcGFyZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZmlyc3RDaGlsZFwiOlxuICAgICAgICBjYXNlIFwibmV4dFwiOlxuICAgICAgICAgIGlmIChvcHRpb25zLmN1cnJlbnRJdGVtKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVudEl0ZW1JbmRleCA9IGZvY3VzYWJsZUl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IG9wdGlvbnMuY3VycmVudEl0ZW0pO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRJdGVtSW5kZXggPCBmb2N1c2FibGVJdGVtcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgIGZvY3VzYWJsZUl0ZW1zW2N1cnJlbnRJdGVtSW5kZXggKyAxXS5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInByZXZpb3VzXCI6XG4gICAgICAgICAgaWYgKG9wdGlvbnMuY3VycmVudEl0ZW0pIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtSW5kZXggPSBmb2N1c2FibGVJdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtID09PSBvcHRpb25zLmN1cnJlbnRJdGVtKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50SXRlbUluZGV4ID4gMCkge1xuICAgICAgICAgICAgICBmb2N1c2FibGVJdGVtc1tjdXJyZW50SXRlbUluZGV4IC0gMV0uZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlYWxpemEgbGEgYsO6c3F1ZWRhIGludGVybmEgZGUgbG9zIGl0ZW1zIGVuIGVsIGNvbXBvbmVudGVcbiAgICogQHBhcmFtIHZhbHVlIHRleHRvIGRlIGLDunNxdWVkYVxuICAgKi9cbiAgb25TZWFyY2godmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlRGVmYXVsdFNlYXJjaCkge1xuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zZWFyY2hNYXRjaFZhbHVlcyA9IHRoaXMuYWxsSXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5tYXRjaGVzVGV4dCh2YWx1ZSkpLm1hcChpdGVtID0+IGl0ZW0udmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWFyY2hNYXRjaFZhbHVlcyA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aGlzLnNlYXJjaE1hdGNoVmFsdWVzQ2hhbmdlLmVtaXQodGhpcy5zZWFyY2hNYXRjaFZhbHVlcyk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogRXZlbnRvcyBhbCBjYW1iaWFyIHByb3BpZWRhZGVzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmEgbG9zIGl0ZW1zIGRlbCDDoXJib2xcbiAgICovXG4gIGNvbmZpZ3VyZUFsbEl0ZW1zKGlzVmFsdWVDaGFuZ2UgPSBmYWxzZSk6IHZvaWQge1xuXG4gICAgaWYgKCF0aGlzLl9hbHJlYWR5Q29uZmlndXJpbmdJdGVtcykge1xuICAgICAgdGhpcy5fYWxyZWFkeUNvbmZpZ3VyaW5nSXRlbXMgPSB0cnVlO1xuXG4gICAgICAvLyBMbyByZWFsaXphbW9zIGRlc2RlIHVuIHNldFRpbWVvdXQgcGFyYSBxdWUgdG9kb3MgbG9zIGlucHV0cywgdmFsdWVzIHkgZGVtw6FzIHZpdmFuIGVuIHBheiB5IGFybW9uw61hXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuYWxsSXRlbXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmNsZWFyU3Vic2NyaXB0aW9ucyh0aGlzLl9pdGVtTGlzdENoZWNrZWRTdWJzY3JpcHRpb25zKTtcbiAgICAgICAgICB0aGlzLmNsZWFyU3Vic2NyaXB0aW9ucyh0aGlzLl9pdGVtTGlzdFF1aXRGb2N1c1N1YnNjcmlwdGlvbnMpO1xuICAgICAgICAgIHRoaXMuYWxsSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGl0ZW0ucGFyZW50TmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgICAgIGl0ZW0udHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgICAgIGl0ZW0uaW5oZXJpdGVkRGVzY3JpYmVkQnkgPSB0aGlzLmdldERlc2NyaWJlZEJ5Rm9ySXRlbXMoKTtcbiAgICAgICAgICAgIGl0ZW0uaW5oZXJpdGVkRXhwYW5kZWRGaXJzdExldmVsID0gdGhpcy5leHBhbmRlZEZpcnN0TGV2ZWw7XG4gICAgICAgICAgICBpdGVtLmluaGVyaXRlZERlY291cGxlQ2hpbGRGcm9tUGFyZW50ID0gdGhpcy5kZWNvdXBsZUNoaWxkRnJvbVBhcmVudDtcbiAgICAgICAgICAgIGlmICgodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHx8IGlzVmFsdWVDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWVMaXN0ID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUgOiBbXTtcbiAgICAgICAgICAgICAgaXRlbS5zZXRDaGVja2VkKCEhdmFsdWVMaXN0LmZpbmQodiA9PiB2ID09PSBpdGVtLnZhbHVlKSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAgICAgY29uc3QgY2hlY2tlZFN1YnNjcmlwdGlvbiA9IGl0ZW0uY2hlY2tlZENoYW5nZUZvclRyZWUuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlVmFsdWVGcm9tSXRlbXMoaXRlbSkpO1xuICAgICAgICAgICAgdGhpcy5faXRlbUxpc3RDaGVja2VkU3Vic2NyaXB0aW9ucy5wdXNoKGNoZWNrZWRTdWJzY3JpcHRpb24pO1xuXG4gICAgICAgICAgICBjb25zdCBxdWl0Rm9jdXNTdWJzY3JpcHRpb24gPSBpdGVtLnF1aXRGb2N1cy5zdWJzY3JpYmUob3B0aW9ucyA9PiB0aGlzLmhhbmRsZUl0ZW1RdWl0Rm9jdXMob3B0aW9ucykpO1xuICAgICAgICAgICAgdGhpcy5faXRlbUxpc3RRdWl0Rm9jdXNTdWJzY3JpcHRpb25zLnB1c2gocXVpdEZvY3VzU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMuc2V0RXJyb3JJbkl0ZW1zKHRoaXMuaGFzRXJyb3JNZXNzYWdlQ29tcG9uZW50KCkpO1xuXG4gICAgICAgICAgdGhpcy5idWlsZFRyZWUoKTtcbiAgICAgICAgICBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVGcm9tSXRlbXMoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hNYXRjaFZhbHVlcykge1xuICAgICAgICAgICAgdGhpcy5vblNlYXJjaE1hdGNoVmFsdWVzQ2hhbmdlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWxsSXRlbXMgJiYgIXRoaXMuX2FsbEl0ZW1MaXN0U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgdGhpcy5fYWxsSXRlbUxpc3RTdWJzY3JpcHRpb24gPSB0aGlzLmFsbEl0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMuY29uZmlndXJlQWxsSXRlbXMoKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5fYWxyZWFkeUNvbmZpZ3VyaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb2RpZmljYSBsb3MgaXRlbXMgdmlzaWJsZXMgc2Vnw7puIGVsIGZpbHRybyBkZSBiw7pzcXVlZGFcbiAgICovXG4gIG9uU2VhcmNoTWF0Y2hWYWx1ZXNDaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWxsSXRlbXMpIHtcbiAgICAgIHRoaXMuYWxsSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS5pbmhlcml0ZWRNYXRjaGVzU2VhcmNoID0gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5zZWFyY2hNYXRjaFZhbHVlcyAhPT0gbnVsbCAmJiB0aGlzLnNlYXJjaE1hdGNoVmFsdWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5hbGxJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaE1hdGNoVmFsdWVzLmZpbmRJbmRleCh2YWx1ZSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZSkgPCAwKSB7XG4gICAgICAgICAgICBpdGVtLmluaGVyaXRlZE1hdGNoZXNTZWFyY2ggPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogR2V0dGVycyBhbmQgc2V0dGVyc1xuICAgKi9cblxuICBnZXRJZFByZWZpeCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkUHJlZml4ID8gdGhpcy5pZFByZWZpeCA6IHRoaXMubmFtZTtcbiAgfVxuXG4gIGdldERlc2NyaWJlZEJ5KCk6IHN0cmluZyB7XG4gICAgbGV0IGRlc2NyaWJlZEJ5ID0gJyc7XG4gICAgaWYgKHRoaXMuZGVzY3JpYmVkQnkpIHtcbiAgICAgIGRlc2NyaWJlZEJ5ID0gdGhpcy5kZXNjcmliZWRCeTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNIaW50Q29tcG9uZW50KCkgJiYgdGhpcy5oaW50Q29tcG9uZW50LmlkKSB7XG4gICAgICBkZXNjcmliZWRCeSA9IGRlc2NyaWJlZEJ5ICsgJyAnICsgdGhpcy5oaW50Q29tcG9uZW50LmlkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0Vycm9yTWVzc2FnZUNvbXBvbmVudCgpICYmIHRoaXMuZXJyb3JNZXNzYWdlQ29tcG9uZW50LmlkKSB7XG4gICAgICBkZXNjcmliZWRCeSA9IGRlc2NyaWJlZEJ5ICsgJyAnICsgdGhpcy5lcnJvck1lc3NhZ2VDb21wb25lbnQuaWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc2NyaWJlZEJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIERldnVlbHZlIGVsIHZhbG9yIGRlIGRlc2NyaWJlZEJ5IHF1ZSBzZSB0cmFuc21pdGlyw6EgYSBsb3MgaXRlbXNcbiAgICovXG4gIGdldERlc2NyaWJlZEJ5Rm9ySXRlbXMoKTogc3RyaW5nIHtcbiAgICBsZXQgZGVzY3JpYmVkQnk7XG4gICAgaWYgKHRoaXMuaGFzRmllbGRzZXRDb21wb25lbnQoKSkge1xuICAgICAgZGVzY3JpYmVkQnkgPSB0aGlzLmZpZWxkc2V0Q29tcG9uZW50LmRlc2NyaWJlZEJ5O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZXNjcmliZWRCeSA9IHRoaXMuZ2V0RGVzY3JpYmVkQnkoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVzY3JpYmVkQnk7XG4gIH1cblxuICBoYXNGaWVsZHNldENvbXBvbmVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmZpZWxkc2V0Q29tcG9uZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlcyBzdXBlci5nZXRIaW50SWQoKTtcbiAgICovXG4gIGdldEhpbnRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkUHJlZml4ID8gdGhpcy5pZFByZWZpeCArICctaGludCcgOiB0aGlzLmhpbnRDb21wb25lbnQ/LmlkO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlcyBzdXBlci5nZXRIaW50SWQoKTtcbiAgICovXG4gIGdldEVycm9ySWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pZFByZWZpeCA/IHRoaXMuaWRQcmVmaXggKyAnLWVycm9yJyA6IHRoaXMuZXJyb3JNZXNzYWdlQ29tcG9uZW50Py5pZDtcbiAgfVxuXG4gIC8qXG4gICAqIEZ1bmNpb25lcyBwYXJhIHJlZW1wbGF6YXIgZWwgY29udGVuaWRvIGRlbCBmaWVsZHNldCwgbGFiZWwsIGhpbnQgbyBlcnJvcm1lc3NhZ2VcbiAgICovXG5cbiAgb3ZlcnJpZGVGaWVsZHNldFBhcmFtcyhmaWVsZHNldDogRmllbGRzZXRDb21wb25lbnQpOiB2b2lkIHtcbiAgICBmaWVsZHNldC5jYWxsZXIgPSB0aGlzLmlubmVySHRtbDtcbiAgICBmaWVsZHNldC5lcnJvcklkID0gdGhpcy5nZXRFcnJvcklkKCk7XG4gICAgZmllbGRzZXQuZGVzY3JpYmVkQnkgPSB0aGlzLmdldERlc2NyaWJlZEJ5KCk7XG4gICAgZmllbGRzZXQuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgb3ZlcnJpZGVTZWFyY2hCYXJQYXJhbXMoc2VhcmNoYmFyOiBTZWFyY2hCYXJDb21wb25lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBkZWZhdWx0T25DaGFuZ2UgPSBzZWFyY2hiYXIub25DaGFuZ2U7XG4gICAgY29uc3QgbmV3T25DaGFuZ2UgPSB2YWx1ZSA9PiB7XG4gICAgICB0aGlzLm9uU2VhcmNoKHZhbHVlKTtcbiAgICAgIGRlZmF1bHRPbkNoYW5nZSh2YWx1ZSk7XG4gICAgfVxuICAgIHNlYXJjaGJhci5yZWdpc3Rlck9uQ2hhbmdlKG5ld09uQ2hhbmdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZSBsbGFtYSBkZXNkZSBGb3JtRmllbGRcbiAgICovXG4gIG92ZXJyaWRlSGludFBhcmFtcyhoaW50KTogdm9pZCB7XG4gICAgaGludC5pZCA9IHRoaXMuZ2V0SGludElkKCk7XG4gICAgaGludC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogU2UgbGxhbWEgZGVzZGUgRm9ybUZpZWxkXG4gICAqL1xuICBvdmVycmlkZUVycm9yTWVzc2FnZVBhcmFtcyhlcnJvck1lc3NhZ2UpOiB2b2lkIHtcbiAgICBlcnJvck1lc3NhZ2UuaWQgPSB0aGlzLmdldEVycm9ySWQoKTtcbiAgICB0aGlzLnNldEVycm9ySW5JdGVtcyh0aGlzLmhhc0Vycm9yTWVzc2FnZUNvbXBvbmVudCgpKTtcbiAgICBlcnJvck1lc3NhZ2UuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlIGxsYW1hIGRlc2RlIEZvcm1GaWVsZFxuICAgKi9cbiAgb25EZWxldGVFcnJvck1lc3NhZ2UoZXJyb3JNZXNzYWdlKTogdm9pZCB7XG4gICAgdGhpcy5zZXRFcnJvckluSXRlbXModGhpcy5oYXNFcnJvck1lc3NhZ2VDb21wb25lbnQoKSk7XG4gIH1cblxuICAvKlxuICAgKiBNw6l0b2RvcyBwcml2YWRvc1xuICAgKi9cblxuICAvKipcbiAgICogQ29uZmlndXJhIGxhIGVzdHJ1Y3R1cmEgZGVsIMOhcmJvbFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZFRyZWUoKTogdm9pZCB7XG5cbiAgICAvLyBTZSBjcmVhIHVuIG1hcGEgcGFyYSB0ZW5lciBhY2Nlc2libGVzIGxvcyBpdGVtcyBwb3Iga2V5IHkgc2UgYm9ycmFuIGxvcyBsaXN0YWRvcyBleGlzdGVudGVzXG4gICAgY29uc3QgaXRlbU1hcCA9IHt9XG4gICAgdGhpcy5yb290SXRlbXMgPSBbXTtcbiAgICB0aGlzLmFsbEl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBpdGVtLmdldEtleSgpO1xuICAgICAgaXRlbU1hcFtrZXldID0gaXRlbTtcbiAgICAgIGlmIChpdGVtLnN1Yikge1xuICAgICAgICBpdGVtLnN1Yi5pdGVtTGlzdCA9IFtdO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gU2UgYcOxYWRlbiBsb3MgaXRlbXMgYSBsb3MgbGlzdGFkb3MgY29ycmVzcG9uZGllbnRlc1xuICAgIHRoaXMuYWxsSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudEtleSA9IGl0ZW0uZ2V0UGFyZW50S2V5KCk7XG4gICAgICBpZiAocGFyZW50S2V5ID09PSAncm9vdCcpIHtcbiAgICAgICAgdGhpcy5yb290SXRlbXMucHVzaChpdGVtKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyZW50S2V5KSB7XG4gICAgICAgIGNvbnN0IHN1YiA9IGl0ZW1NYXBbcGFyZW50S2V5XS5zdWI7XG4gICAgICAgIGlmIChzdWIpIHtcbiAgICAgICAgICBzdWIuaXRlbUxpc3QucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gU2UgY29uZmlndXJhbiBsb3MgaXRlbXMgZGVzZGUgcm9vdFxuICAgIGxldCBvcmRlciA9IDA7XG4gICAgdGhpcy5yb290SXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGl0ZW0uc2V0U3ViTGV2ZWwoMCk7XG4gICAgICBpdGVtLnNldERlZmF1bHRJZChgJHt0aGlzLmlkUHJlZml4fS0ke2luZGV4fWApO1xuICAgICAgaXRlbS5yZWZyZXNoQWxsUGFyZW50c0V4cGFuZGVkUmVjdXJzaXZlKHRydWUpO1xuICAgICAgaWYgKCF0aGlzLmRlY291cGxlQ2hpbGRGcm9tUGFyZW50KSB7XG4gICAgICAgIGl0ZW0uc2V0Q2hlY2tlZEF1dG9tYXRpY2FsbHlEZXBlbmRpbmdPbkNoaWxkcmVuKCk7XG4gICAgICB9XG4gICAgICBvcmRlciA9IGl0ZW0uc2V0T3JkZXJSZWN1cnNpdmVseShvcmRlcik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2kgdGllbmUgdW4gbWVuc2FqZSBkZSBlcnJvciwgc2UgaW5kaWNhIGEgbG9zIGl0ZW1zXG4gICAqIEBwYXJhbSBoYXNFcnJvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzZXRFcnJvckluSXRlbXMoaGFzRXJyb3I6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hbGxJdGVtcz8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5hbGxJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLmluaGVyaXRlZEhhc0Vycm9yID0gaGFzRXJyb3I7XG4gICAgICAgIGl0ZW0uZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpbXBpYSB1biBsaXN0YWRvIGRlIHN1YnNjcmlwY2lvbmVzXG4gICAqIEBwYXJhbSBzdWJzY3JpcHRpb25MaXN0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGNsZWFyU3Vic2NyaXB0aW9ucyhzdWJzY3JpcHRpb25MaXN0OiBTdWJzY3JpcHRpb25bXSk6IHZvaWQge1xuICAgIGlmIChzdWJzY3JpcHRpb25MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHN1YnNjcmlwdGlvbkxpc3QuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgICBzdWJzY3JpcHRpb25MaXN0LnNwbGljZSgwLCBzdWJzY3JpcHRpb25MaXN0Lmxlbmd0aClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV2dWVsdmUgbG9zIGl0ZW1zIGRlbCDDoXJib2wgb3JkZW5hZG9zXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGdldEFsbEl0ZW1zSW5PcmRlcigpOiBUcmVlSXRlbUNvbXBvbmVudFtdIHtcbiAgICBsZXQgbGlzdCA9IFtdO1xuICAgIGlmICh0aGlzLmFsbEl0ZW1zKSB7XG4gICAgICBsaXN0ID0gdGhpcy5hbGxJdGVtcy50b0FycmF5KCkuc29ydCgoYSwgYikgPT4gYS5vcmRlckluVHJlZSA+IGIub3JkZXJJblRyZWUgPyAxIDogLTEpXG4gICAgfVxuICAgIHJldHVybiBsaXN0XG4gIH1cbn1cbiJdfQ==