desy-angular 6.0.0 → 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 +10693 -10672
  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 -50
  7. package/desy-angular.metadata.json +1 -1
  8. package/esm2015/desy-angular.js +52 -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 -0
  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 -61
  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 -133
  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 +9589 -9574
  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 -0
  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 -32
  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,370 +1,370 @@
1
- import { __decorate } from "tslib";
2
- import { ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, forwardRef, HostBinding, Input, Output, ViewChild } from '@angular/core';
3
- import { DesyContentChild } from "../../../../shared/decorators/desy-content-child.decorator";
4
- import { TreeSubComponent } from "../tree-sub/tree-sub.component";
5
- import { ITreeItem } from "../interfaces/itree-item";
6
- import { HintComponent } from "../../hint/hint.component";
7
- import { LabelComponent } from "../../label/label.component";
8
- import { TreeCheckboxComponent } from "../tree-checkbox/tree-checkbox.component";
9
- import { AccessibilityComponent } from "../../../../shared/components";
10
- import { DesyOnInputChange } from "../../../../shared/decorators/desy-on-input-change.decorator";
11
- import { SearchUtils } from "../../../../shared/utils/search-utils";
12
- export class TreeItemComponent extends AccessibilityComponent {
13
- constructor(changeDetector, element) {
14
- super();
15
- this.changeDetector = changeDetector;
16
- this.element = element;
17
- this.checkedChange = new EventEmitter();
18
- this.checkedChangeForTree = new EventEmitter();
19
- this.expandedChange = new EventEmitter();
20
- this.indeterminateCheckedChange = new EventEmitter();
21
- /*
22
- * Identificador del wrapper del componente. Se utiliza para recorrer el árbol en sentido inverso y que cada item
23
- * sepa cuál es su item/árbol padre.
24
- * Esto es necesario ya que, a la hora de construir un árbol dinámico con templates,
25
- * el decorador @ContentChildren no funciona correctamente y no los detecta.
26
- * Dejo el enlace de un problema similar: https://github.com/angular/angular/issues/21751
27
- */
28
- this.treeItemKey = TreeItemComponent.generateStaticItemKey();
29
- this.allParentsExpanded = true; // True si el elemento es visible según los elementos expandidos
30
- this.inheritedMatchesSearch = true; // True si el elemento es visible según los criterios de búsqueda
31
- // Evento para emitir al componente arbol cuando se pretende abandonar el foco del item
32
- this.quitFocus = new EventEmitter();
33
- this.isFocus = false;
34
- this.isHover = false;
35
- this._matchesValidText = false; // True si el contenido del item encaja con los criterios de búsqueda y se está filtrando
36
- }
37
- ngOnChanges(changes) {
38
- if (this.sub && this.sub.itemList) {
39
- this.sub.itemList.forEach(item => item.refreshAllParentsExpandedRecursive(this.allParentsExpanded && this.expanded));
40
- }
41
- for (const propName in changes) {
42
- if (changes.hasOwnProperty(propName)) {
43
- switch (propName) {
44
- case 'checked': {
45
- // Reasignamos el valor de checked cuando detectamos el cambio en la entrada
46
- setTimeout(() => {
47
- this.setChecked(this.checked, false, false);
48
- if (this.inheritedExpandedFirstLevel && this.checked && !this.expanded) {
49
- this.expandSub(true);
50
- }
51
- });
52
- break;
53
- }
54
- }
55
- }
56
- }
57
- }
58
- /*
59
- * Métodos expuestos que permiten configurar al ítem de forma externa
60
- */
61
- focus() {
62
- var _a;
63
- (_a = this.checkbox) === null || _a === void 0 ? void 0 : _a.focus();
64
- this.handleItemFocus(true);
65
- }
66
- setCheckedAutomaticallyDependingOnChildren() {
67
- if (this.sub) {
68
- this.sub.itemList.forEach(item => item.setCheckedAutomaticallyDependingOnChildren());
69
- if (this.areAllChildrenChecked()) {
70
- if (this.indeterminateChecked) {
71
- this.setIndeterminateChecked(false);
72
- }
73
- if (!this.checked) {
74
- this.setChecked(true, true);
75
- }
76
- }
77
- else if (this.hasChildrenCheckedOrIndeterminate()) {
78
- if (!this.indeterminateChecked) {
79
- this.setIndeterminateChecked(true);
80
- }
81
- if (this.checked) {
82
- this.setChecked(false, true);
83
- }
84
- }
85
- else {
86
- if (this.indeterminateChecked) {
87
- this.setIndeterminateChecked(false);
88
- }
89
- if (this.checked) {
90
- this.setChecked(false, true);
91
- }
92
- }
93
- }
94
- }
95
- refreshAllParentsExpandedRecursive(value) {
96
- this.allParentsExpanded = value;
97
- if (this.sub) {
98
- this.sub.itemList.forEach(item => item.refreshAllParentsExpandedRecursive(value && this.expanded));
99
- }
100
- }
101
- detectChanges() {
102
- this.changeDetector.detectChanges();
103
- }
104
- expandSub(value) {
105
- this.expanded = value;
106
- if (this.sub) {
107
- this.sub.itemList.forEach(item => item.refreshAllParentsExpandedRecursive(this.allParentsExpanded && value));
108
- }
109
- this.expandedChange.emit(value);
110
- }
111
- /*
112
- * Gestion de eventos
113
- */
114
- handleCheckboxChange(checked) {
115
- this.setChecked(checked, false);
116
- if (this.inheritedExpandedFirstLevel && checked && !this.expanded) {
117
- this.expandSub(true);
118
- }
119
- }
120
- handleIndeterminateCheckedChange(indeterminate) {
121
- this.indeterminateCheckedChange.emit(indeterminate);
122
- }
123
- handleItemFocus(value, condition = true) {
124
- if (condition) {
125
- this.isFocus = value;
126
- }
127
- }
128
- handleItemHover(value, condition = true) {
129
- if (condition) {
130
- this.isHover = value;
131
- }
132
- }
133
- handleArrowUp(event, condition = true) {
134
- if (condition) {
135
- event.preventDefault();
136
- this.quitFocus.emit({
137
- nextElement: 'previous',
138
- currentItem: this
139
- });
140
- }
141
- }
142
- handleHome(event, condition = true) {
143
- if (condition) {
144
- event.preventDefault();
145
- this.quitFocus.emit({
146
- nextElement: 'first',
147
- currentItem: this
148
- });
149
- }
150
- }
151
- handleEnd(event, condition = true) {
152
- if (condition) {
153
- event.preventDefault();
154
- this.quitFocus.emit({
155
- nextElement: 'last',
156
- currentItem: this
157
- });
158
- }
159
- }
160
- handleArrowDown(event, condition = true) {
161
- if (condition) {
162
- event.preventDefault();
163
- this.quitFocus.emit({
164
- nextElement: 'next',
165
- currentItem: this
166
- });
167
- }
168
- }
169
- handleArrowRight(event, condition = true) {
170
- var _a;
171
- if (condition && this.sub && ((_a = this.sub.itemList) === null || _a === void 0 ? void 0 : _a.length) > 0) {
172
- event.preventDefault();
173
- if (this.expanded) {
174
- this.quitFocus.emit({
175
- nextElement: 'firstChild',
176
- currentItem: this
177
- });
178
- }
179
- else {
180
- this.expandSub(true);
181
- }
182
- }
183
- }
184
- handleArrowLeft(event, condition = true) {
185
- if (condition) {
186
- event.preventDefault();
187
- if (this.expanded) {
188
- this.expandSub(false);
189
- }
190
- else if (this.subLevel > 0) {
191
- this.quitFocus.emit({
192
- nextElement: 'parent',
193
- currentItem: this
194
- });
195
- }
196
- }
197
- }
198
- /*
199
- * Setters and getters
200
- */
201
- setChecked(checked, ignoreInTree, emitEvent = true) {
202
- if (!this.disabled) {
203
- this.checked = checked;
204
- }
205
- if (!this.inheritedDecoupleChildFromParent && this.sub && this.sub.itemList && !this.indeterminateChecked) {
206
- this.sub.itemList.forEach(item => {
207
- item.setIndeterminateChecked(false);
208
- item.setChecked(checked, true);
209
- });
210
- }
211
- if (emitEvent) {
212
- this.checkedChange.emit(checked);
213
- }
214
- if (!ignoreInTree) {
215
- this.checkedChangeForTree.emit(checked);
216
- }
217
- }
218
- setIndeterminateChecked(indeterminate) {
219
- if (!this.disabled) {
220
- this.indeterminateChecked = indeterminate;
221
- this.indeterminateCheckedChange.emit(indeterminate);
222
- }
223
- }
224
- setSubLevel(subLevel) {
225
- this.subLevel = subLevel;
226
- if (this.sub && this.sub.itemList) {
227
- this.sub.itemList.forEach(item => item.setSubLevel(subLevel + 1));
228
- }
229
- }
230
- setOrderRecursively(order) {
231
- this.orderInTree = order;
232
- let newOrder = order + 1;
233
- if (this.sub && this.sub.itemList) {
234
- this.sub.itemList.forEach(item => {
235
- newOrder = item.setOrderRecursively(newOrder);
236
- });
237
- }
238
- return newOrder;
239
- }
240
- setDefaultId(defaultId) {
241
- this.defaultId = defaultId;
242
- this.setDefaultIdRecursive();
243
- }
244
- setDefaultIdRecursive() {
245
- if (this.sub && this.sub.itemList) {
246
- this.sub.itemList.forEach((item, index) => {
247
- item.setDefaultId(`sub-${this.getId()}-${index}`);
248
- });
249
- }
250
- }
251
- getId() {
252
- return this.id ? this.id : this.defaultId;
253
- }
254
- isHidden() {
255
- return !this.inheritedMatchesSearch && (!this.sub || this.areAllChildrenHidden());
256
- }
257
- areAllChildrenHidden() {
258
- const children = this.sub.itemList;
259
- return children.findIndex(child => !child.isHidden()) < 0;
260
- }
261
- areAllChildrenChecked() {
262
- const children = this.sub.itemList;
263
- return children.findIndex(child => !child.checked) < 0;
264
- }
265
- hasChildrenCheckedOrIndeterminate() {
266
- const children = this.sub.itemList;
267
- return children.findIndex(child => child.checked || child.indeterminateChecked) >= 0;
268
- }
269
- matchesText(value) {
270
- var _a;
271
- let matches;
272
- if (this.allParentsExpanded && !this.isHidden()) {
273
- matches = (_a = this.checkbox) === null || _a === void 0 ? void 0 : _a.matchesText(value);
274
- }
275
- else {
276
- const itemText = this.hiddenWrapper.nativeElement.textContent;
277
- matches = SearchUtils.containsAnyWordFrom(itemText, value);
278
- }
279
- this._matchesValidText = value ? matches : false;
280
- return matches;
281
- }
282
- getKey() {
283
- return this.treeItemKey;
284
- }
285
- getParentKey() {
286
- let parentKey;
287
- let parentElement = this.element.nativeElement.parentElement;
288
- while (parentElement && parentElement.tagName !== 'BODY' && parentElement.tagName !== 'DESY-TREE-ITEM' && parentElement.tagName !== 'DESY-TREE') {
289
- parentElement = parentElement.parentElement;
290
- }
291
- if (parentElement.tagName === 'BODY') {
292
- throw new Error('Parent for tree-item not found');
293
- }
294
- if (parentElement.tagName === 'DESY-TREE') {
295
- parentKey = 'root';
296
- }
297
- if (parentElement.tagName === 'DESY-TREE-ITEM') {
298
- parentKey = parentElement.getAttribute('desy-tree-item-key');
299
- }
300
- return parentKey;
301
- }
302
- isActive() {
303
- return this.active || this._matchesValidText;
304
- }
305
- /*
306
- * Métodos privados
307
- */
308
- /**
309
- * Genera una clave única para el componente
310
- * @private
311
- */
312
- static generateStaticItemKey() {
313
- const key = 'tree-item-key-' + TreeItemComponent._treeItemKeySuffix;
314
- TreeItemComponent._treeItemKeySuffix++;
315
- return key;
316
- }
317
- }
318
- TreeItemComponent._treeItemKeySuffix = 0; // Sufijo estático para generar siempre claves distintas
319
- TreeItemComponent.decorators = [
320
- { type: Component, args: [{
321
- selector: 'desy-tree-item',
322
- template: "<li *ngIf=\"allParentsExpanded && !isHidden(); else hidden\"\r\n [id]=\"id\"\r\n [class]=\"'c-tree__item focus:outline-none'\"\r\n [ngClass]=\"{\r\n 'ml-4': subLevel === 0,\r\n 'ml-8': subLevel !== 0,\r\n 'c-tree__item--focus': isFocus && !sub,\r\n 'c-tree__item--hover': isHover && !sub\r\n }\"\r\n (focusin)=\"handleItemFocus(true, !sub)\"\r\n (focusout)=\"handleItemFocus(false, !sub)\"\r\n (mouseover)=\"handleItemHover(true, !sub)\"\r\n (mouseout)=\"handleItemHover(false, !sub)\"\r\n (keydown.home)=\"handleHome($event, !sub)\"\r\n (keydown.end)=\"handleEnd($event, !sub)\"\r\n (keydown.arrowup)=\"handleArrowUp($event, !sub)\"\r\n (keydown.arrowdown)=\"handleArrowDown($event, !sub)\"\r\n (keydown.arrowright)=\"handleArrowRight($event, !sub)\"\r\n (keydown.arrowleft)=\"handleArrowLeft($event, !sub)\"\r\n role=\"treeitem\"\r\n [attr.aria-expanded]=\"sub ? (expanded ? 'true' : 'false') : null\"\r\n [attr.aria-current]=\"isActive() && subLevel === 0 ? 'page' : null\">\r\n <div *ngIf=\"!sub && subLevel !== 0; else childrenTree\"\r\n [id]=\"id\"\r\n [class]=\"['block', classes] | makeHtmlList\"\r\n [attr.title]=\"title ? title : null\"\r\n [attr.disabled]=\"disabled ? 'disabled' : null\"\r\n\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 : (disabled ? 'true' : null)\"\r\n [attr.aria-controls]=\"ariaControls ? ariaControls : null\"\r\n [attr.aria-current]=\"ariaCurrent ? ariaCurrent : (isActive() ? 'page' : 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 : (disabled ? '-1' : null)\">\r\n <ng-container *ngTemplateOutlet=\"checkbox\"></ng-container>\r\n </div>\r\n</li>\r\n\r\n<ng-template #childrenTree>\r\n <div *ngIf=\"sub; else checkbox\" class=\"w-full h-full\"\r\n [ngClass]=\"{'c-tree__item--focus': isFocus && sub, 'c-tree__item--hover': isHover && sub}\"\r\n (focusin)=\"handleItemFocus(true)\"\r\n (focusout)=\"handleItemFocus(false)\"\r\n (mouseover)=\"handleItemHover(true)\"\r\n (mouseout)=\"handleItemHover(false)\"\r\n (keydown.home)=\"handleHome($event)\"\r\n (keydown.end)=\"handleEnd($event)\"\r\n (keydown.arrowup)=\"handleArrowUp($event)\"\r\n (keydown.arrowdown)=\"handleArrowDown($event)\"\r\n (keydown.arrowright)=\"handleArrowRight($event)\"\r\n (keydown.arrowLeft)=\"handleArrowLeft($event)\">\r\n <div [class]=\"['w-full flex items-center relative focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black text-left', classes] | makeHtmlList\"\r\n [attr.role]=\"role ? role : null\"\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 <span class=\"absolute top-3 -left-4 flex items-center w-4 h-2.5 text-primary-base font-bold\">\r\n <svg (click)=\"expandSub(false)\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 10 10\" width=\"10\" height=\"10\" aria-hidden=\"true\" class=\"c-tree__minus\"><path fill=\"currentColor\" d=\"M9.286 5.714H.714a.714.714 0 010-1.428h8.572a.714.714 0 010 1.428z\"/></svg>\r\n <svg (click)=\"expandSub(true)\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 10 10\" width=\"10\" height=\"10\" aria-hidden=\"true\" class=\"c-tree__plus\"><path fill=\"currentColor\" d=\"M9.286 4.286H5.893a.179.179 0 01-.179-.179V.714a.714.714 0 00-1.428 0v3.393a.179.179 0 01-.179.179H.714a.714.714 0 000 1.428h3.393a.179.179 0 01.179.179v3.393a.714.714 0 001.428 0V5.893a.179.179 0 01.179-.179h3.393a.714.714 0 000-1.428z\"/></svg>\r\n </span>\r\n <ng-container *ngTemplateOutlet=\"checkbox\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <ng-container *desyCustomInnerContent=\"{ component: sub }\"></ng-container>\r\n</ng-template>\r\n\r\n<!-- Se incorpora el contenido m\u00EDnimo para funcionar con el objetivo de mejorar el rendimiento -->\r\n<ng-template #hidden>\r\n <li class=\"hidden\">\r\n <div #hiddenWrapper>\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </div>\r\n <ng-container *desyCustomInnerContent=\"{ component: sub }\"></ng-container>\r\n </li>\r\n</ng-template>\r\n\r\n<ng-template #checkbox>\r\n <!--\r\n El *ngIf=\"name || parentName\" se realiza para no crear el checkbox hasta que se ha ejecutado el configureAllItems.\r\n Esto puede dar problemas porque, hasta que no se ejecuta esto, el desy-tree-checkbox no cuenta con el type actualizado (por defecto radio).\r\n Un ejemplo en el que esto puede ser problem\u00E1tico es al ser typo checkbox y darle un valor checked=true a varios los items, ya\r\n que el type todav\u00EDa no se ha transmitido aqu\u00ED. Como por defecto el type es radio, s\u00F3lo marcar\u00E1 el \u00FAltimo. Posteriormente,\r\n ya detectar\u00E1 el tipo y permitir\u00E1 seleccionar varios items, pero hasta entonces existe este problema.\r\n -->\r\n <desy-tree-checkbox *ngIf=\"name || parentName\"\r\n [name]=\"name ? name : parentName\"\r\n [id]=\"getId()\"\r\n [value]=\"value\"\r\n [classes]=\"classes\"\r\n [type]=\"type\"\r\n [(checked)]=\"checked\" (checkedChange)=\"handleCheckboxChange($event)\"\r\n [hasError]=\"inheritedHasError\"\r\n [disabled]=\"disabled\"\r\n [hasDividers]=\"hasDividers\"\r\n [describedBy]=\"[inheritedDescribedBy, hint?.id] | makeHtmlList\"\r\n [isIndeterminate]=\"isIndeterminate\"\r\n [(indeterminateChecked)]=\"indeterminateChecked\"\r\n (indeterminateCheckedChange)=\"handleIndeterminateCheckedChange($event)\"\r\n\r\n [labelComponent]=\"label\"\r\n [hintComponent]=\"hint\"\r\n\r\n [role]=\"role\"\r\n [ariaLabel]=\"ariaLabel\"\r\n [ariaDescribedBy]=\"ariaDescribedBy\"\r\n [ariaLabelledBy]=\"ariaLabelledBy\"\r\n [ariaHidden]=\"ariaHidden\"\r\n [ariaDisabled]=\"ariaDisabled\"\r\n [ariaControls]=\"ariaControls\"\r\n [ariaCurrent]=\"ariaCurrent\"\r\n [ariaLive]=\"ariaLive\"\r\n [ariaExpanded]=\"ariaExpanded\"\r\n [ariaErrorMessage]=\"ariaErrorMessage\"\r\n [ariaHasPopup]=\"ariaHasPopup\"\r\n [ariaModal]=\"ariaModal\"\r\n [tabindex]=\"tabindex\">\r\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\r\n </desy-tree-checkbox>\r\n</ng-template>\r\n\r\n<ng-template #content>\r\n <div class=\"font-bold\" *ngIf=\"isActive(); else contentLabel\">\r\n <ng-container *ngTemplateOutlet=\"contentLabel\"></ng-container>\r\n </div>\r\n <ng-content select=\"desy-hint\"></ng-content>\r\n</ng-template>\r\n\r\n<ng-template #contentLabel>\r\n <ng-content select=\"desy-label\"></ng-content>\r\n</ng-template>\r\n",
323
- providers: [
324
- {
325
- provide: ITreeItem,
326
- useExisting: forwardRef(() => TreeItemComponent)
327
- }
328
- ]
329
- },] }
330
- ];
331
- TreeItemComponent.ctorParameters = () => [
332
- { type: ChangeDetectorRef },
333
- { type: ElementRef }
334
- ];
335
- TreeItemComponent.propDecorators = {
336
- hiddenWrapper: [{ type: ViewChild, args: ['hiddenWrapper',] }],
337
- id: [{ type: Input }],
338
- name: [{ type: Input }],
339
- value: [{ type: Input }],
340
- classes: [{ type: Input }],
341
- active: [{ type: Input }],
342
- disabled: [{ type: Input }],
343
- title: [{ type: Input }],
344
- hasDividers: [{ type: Input }],
345
- isIndeterminate: [{ type: Input }],
346
- checked: [{ type: Input }],
347
- checkedChange: [{ type: Output }],
348
- expanded: [{ type: Input }],
349
- expandedChange: [{ type: Output }],
350
- indeterminateChecked: [{ type: Input }],
351
- indeterminateCheckedChange: [{ type: Output }],
352
- sub: [{ type: ContentChildren, args: [TreeSubComponent,] }],
353
- hint: [{ type: ContentChildren, args: [HintComponent,] }],
354
- label: [{ type: ContentChildren, args: [LabelComponent,] }],
355
- checkbox: [{ type: ViewChild, args: [TreeCheckboxComponent,] }],
356
- treeItemKey: [{ type: HostBinding, args: ['attr.desy-tree-item-key',] }]
357
- };
358
- __decorate([
359
- DesyOnInputChange('setDefaultIdRecursive')
360
- ], TreeItemComponent.prototype, "id", void 0);
361
- __decorate([
362
- DesyContentChild({ onSetCallbackName: 'overrideSubValues' })
363
- ], TreeItemComponent.prototype, "sub", void 0);
364
- __decorate([
365
- DesyContentChild()
366
- ], TreeItemComponent.prototype, "hint", void 0);
367
- __decorate([
368
- DesyContentChild()
369
- ], TreeItemComponent.prototype, "label", void 0);
370
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc3ktYW5ndWxhci9zcmMvbGliL2Rlc3ktZm9ybXMvY29tcG9uZW50cy90cmVlL3RyZWUtaXRlbS90cmVlLWl0ZW0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQUUsVUFBVSxFQUMzQixZQUFZLEVBQ1osVUFBVSxFQUFFLFdBQVcsRUFDdkIsS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNERBQTRELENBQUM7QUFDNUYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFFM0QsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDL0UsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDckUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sOERBQThELENBQUM7QUFDL0YsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBWWxFLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxzQkFBc0I7SUFvRTNELFlBQW9CLGNBQWlDLEVBQVUsT0FBbUI7UUFDaEYsS0FBSyxFQUFFLENBQUM7UUFEVSxtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBbkR4RSxrQkFBYSxHQUFz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LGdCQUFnQixFQUFFOytDQUNpQztBQUduQjtJQURoQyxnQkFBZ0IsRUFBRTtnREFDb0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBDb250ZW50Q2hpbGRyZW4sIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGZvcndhcmRSZWYsIEhvc3RCaW5kaW5nLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7RGVzeUNvbnRlbnRDaGlsZH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NoYXJlZC9kZWNvcmF0b3JzL2Rlc3ktY29udGVudC1jaGlsZC5kZWNvcmF0b3JcIjtcclxuaW1wb3J0IHtUcmVlU3ViQ29tcG9uZW50fSBmcm9tIFwiLi4vdHJlZS1zdWIvdHJlZS1zdWIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7SVRyZWVJdGVtfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9pdHJlZS1pdGVtXCI7XHJcbmltcG9ydCB7SGludENvbXBvbmVudH0gZnJvbSBcIi4uLy4uL2hpbnQvaGludC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtMYWJlbENvbXBvbmVudH0gZnJvbSBcIi4uLy4uL2xhYmVsL2xhYmVsLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge1F1aXRUcmVlSXRlbUZvY3VzT3B0aW9uc30gZnJvbSBcIi4uL2ludGVyZmFjZXMvcXVpdC10cmVlLWl0ZW0tZm9jdXMtb3B0aW9uc1wiO1xyXG5pbXBvcnQge1RyZWVDaGVja2JveENvbXBvbmVudH0gZnJvbSBcIi4uL3RyZWUtY2hlY2tib3gvdHJlZS1jaGVja2JveC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtBY2Nlc3NpYmlsaXR5Q29tcG9uZW50fSBmcm9tIFwiLi4vLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHNcIjtcclxuaW1wb3J0IHtEZXN5T25JbnB1dENoYW5nZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NoYXJlZC9kZWNvcmF0b3JzL2Rlc3ktb24taW5wdXQtY2hhbmdlLmRlY29yYXRvclwiO1xyXG5pbXBvcnQge1NlYXJjaFV0aWxzfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2hhcmVkL3V0aWxzL3NlYXJjaC11dGlsc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdkZXN5LXRyZWUtaXRlbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtaXRlbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IElUcmVlSXRlbSxcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVHJlZUl0ZW1Db21wb25lbnQpXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHJlZUl0ZW1Db21wb25lbnQgZXh0ZW5kcyBBY2Nlc3NpYmlsaXR5Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBJVHJlZUl0ZW0ge1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBfdHJlZUl0ZW1LZXlTdWZmaXggPSAwOyAvLyBTdWZpam8gZXN0w6F0aWNvIHBhcmEgZ2VuZXJhciBzaWVtcHJlIGNsYXZlcyBkaXN0aW50YXNcclxuICBAVmlld0NoaWxkKCdoaWRkZW5XcmFwcGVyJykgaGlkZGVuV3JhcHBlcjogRWxlbWVudFJlZjtcclxuXHJcbiAgQERlc3lPbklucHV0Q2hhbmdlKCdzZXREZWZhdWx0SWRSZWN1cnNpdmUnKVxyXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHZhbHVlOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY2xhc3Nlczogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFjdGl2ZTogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcclxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGhhc0RpdmlkZXJzOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGlzSW5kZXRlcm1pbmF0ZTogYm9vbGVhbjtcclxuXHJcbiAgQElucHV0KCkgY2hlY2tlZDogYm9vbGVhbjtcclxuICBAT3V0cHV0KCkgY2hlY2tlZENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBjaGVja2VkQ2hhbmdlRm9yVHJlZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQElucHV0KCkgZXhwYW5kZWQ6IGJvb2xlYW47XHJcbiAgQE91dHB1dCgpIGV4cGFuZGVkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBASW5wdXQoKSBpbmRldGVybWluYXRlQ2hlY2tlZDogYm9vbGVhbjtcclxuICBAT3V0cHV0KCkgaW5kZXRlcm1pbmF0ZUNoZWNrZWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBEZXN5Q29udGVudENoaWxkKHsgb25TZXRDYWxsYmFja05hbWU6ICdvdmVycmlkZVN1YlZhbHVlcyd9KVxyXG4gIEBDb250ZW50Q2hpbGRyZW4oVHJlZVN1YkNvbXBvbmVudCkgc3ViOiBUcmVlU3ViQ29tcG9uZW50O1xyXG5cclxuICBARGVzeUNvbnRlbnRDaGlsZCgpXHJcbiAgQENvbnRlbnRDaGlsZHJlbihIaW50Q29tcG9uZW50KSBoaW50OiBIaW50Q29tcG9uZW50O1xyXG5cclxuICBARGVzeUNvbnRlbnRDaGlsZCgpXHJcbiAgQENvbnRlbnRDaGlsZHJlbihMYWJlbENvbXBvbmVudCkgbGFiZWw6IExhYmVsQ29tcG9uZW50O1xyXG5cclxuICBAVmlld0NoaWxkKFRyZWVDaGVja2JveENvbXBvbmVudCkgY2hlY2tib3g6IFRyZWVDaGVja2JveENvbXBvbmVudDtcclxuXHJcbiAgLypcclxuICAgKiBJZGVudGlmaWNhZG9yIGRlbCB3cmFwcGVyIGRlbCBjb21wb25lbnRlLiBTZSB1dGlsaXphIHBhcmEgcmVjb3JyZXIgZWwgw6FyYm9sIGVuIHNlbnRpZG8gaW52ZXJzbyB5IHF1ZSBjYWRhIGl0ZW1cclxuICAgKiBzZXBhIGN1w6FsIGVzIHN1IGl0ZW0vw6FyYm9sIHBhZHJlLlxyXG4gICAqIEVzdG8gZXMgbmVjZXNhcmlvIHlhIHF1ZSwgYSBsYSBob3JhIGRlIGNvbnN0cnVpciB1biDDoXJib2wgZGluw6FtaWNvIGNvbiB0ZW1wbGF0ZXMsXHJcbiAgICogZWwgZGVjb3JhZG9yIEBDb250ZW50Q2hpbGRyZW4gbm8gZnVuY2lvbmEgY29ycmVjdGFtZW50ZSB5IG5vIGxvcyBkZXRlY3RhLlxyXG4gICAqIERlam8gZWwgZW5sYWNlIGRlIHVuIHByb2JsZW1hIHNpbWlsYXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzIxNzUxXHJcbiAgICovXHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRlc3ktdHJlZS1pdGVtLWtleScpXHJcbiAgcmVhZG9ubHkgdHJlZUl0ZW1LZXk6IHN0cmluZyA9IFRyZWVJdGVtQ29tcG9uZW50LmdlbmVyYXRlU3RhdGljSXRlbUtleSgpO1xyXG5cclxuICB0eXBlOiAncmFkaW8nfCdjaGVja2JveCd8bnVsbHx1bmRlZmluZWQ7XHJcbiAgc3ViTGV2ZWw6IG51bWJlcjsgLy8gTml2ZWwgZGVudHJvIGRlbCBhcmJvbC4gMCBzb24gbG9zIGl0ZW1zIGEgbml2ZWwgZGUgcmFpei5cclxuXHJcbiAgLy8gUHJvcGllZGFkZXMgZGVmaW5pZGFzIHBvciBlbCBjb21wb25lbnRlIMOhcmJvbCBxdWUgZWwgaXRlbSBwdWVkZSB1dGlsaXphciwgc29icmVzY3JpYmlyIG8gYW1wbGlhclxyXG4gIHBhcmVudE5hbWU6IHN0cmluZztcclxuICBkZWZhdWx0SWQ7XHJcbiAgaW5oZXJpdGVkRXhwYW5kZWRGaXJzdExldmVsOiBib29sZWFuO1xyXG4gIGluaGVyaXRlZERlY291cGxlQ2hpbGRGcm9tUGFyZW50OiBib29sZWFuO1xyXG4gIGluaGVyaXRlZERlc2NyaWJlZEJ5OiBzdHJpbmc7XHJcbiAgaW5oZXJpdGVkSGFzRXJyb3I6IGJvb2xlYW47XHJcbiAgYWxsUGFyZW50c0V4cGFuZGVkID0gdHJ1ZTsgLy8gVHJ1ZSBzaSBlbCBlbGVtZW50byBlcyB2aXNpYmxlIHNlZ8O6biBsb3MgZWxlbWVudG9zIGV4cGFuZGlkb3NcclxuICBpbmhlcml0ZWRNYXRjaGVzU2VhcmNoID0gdHJ1ZTsgLy8gVHJ1ZSBzaSBlbCBlbGVtZW50byBlcyB2aXNpYmxlIHNlZ8O6biBsb3MgY3JpdGVyaW9zIGRlIGLDunNxdWVkYVxyXG4gIG9yZGVySW5UcmVlOiBudW1iZXI7XHJcblxyXG4gIC8vIEV2ZW50byBwYXJhIGVtaXRpciBhbCBjb21wb25lbnRlIGFyYm9sIGN1YW5kbyBzZSBwcmV0ZW5kZSBhYmFuZG9uYXIgZWwgZm9jbyBkZWwgaXRlbVxyXG4gIHF1aXRGb2N1czogRXZlbnRFbWl0dGVyPFF1aXRUcmVlSXRlbUZvY3VzT3B0aW9ucz4gPSBuZXcgRXZlbnRFbWl0dGVyPFF1aXRUcmVlSXRlbUZvY3VzT3B0aW9ucz4oKTtcclxuXHJcbiAgaXNGb2N1cyA9IGZhbHNlO1xyXG4gIGlzSG92ZXIgPSBmYWxzZTtcclxuICBwcml2YXRlIF9tYXRjaGVzVmFsaWRUZXh0ID0gZmFsc2U7IC8vIFRydWUgc2kgZWwgY29udGVuaWRvIGRlbCBpdGVtIGVuY2FqYSBjb24gbG9zIGNyaXRlcmlvcyBkZSBiw7pzcXVlZGEgeSBzZSBlc3TDoSBmaWx0cmFuZG9cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZikge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN1YiAmJiB0aGlzLnN1Yi5pdGVtTGlzdCkge1xyXG4gICAgICB0aGlzLnN1Yi5pdGVtTGlzdC5mb3JFYWNoKGl0ZW0gPT4gKGl0ZW0gYXMgVHJlZUl0ZW1Db21wb25lbnQpLnJlZnJlc2hBbGxQYXJlbnRzRXhwYW5kZWRSZWN1cnNpdmUodGhpcy5hbGxQYXJlbnRzRXhwYW5kZWQgJiYgdGhpcy5leHBhbmRlZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgcHJvcE5hbWUgaW4gY2hhbmdlcykge1xyXG4gICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcclxuICAgICAgICBzd2l0Y2ggKHByb3BOYW1lKSB7XHJcbiAgICAgICAgICBjYXNlICdjaGVja2VkJzoge1xyXG4gICAgICAgICAgICAvLyBSZWFzaWduYW1vcyBlbCB2YWxvciBkZSBjaGVja2VkIGN1YW5kbyBkZXRlY3RhbW9zIGVsIGNhbWJpbyBlbiBsYSBlbnRyYWRhXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0Q2hlY2tlZCh0aGlzLmNoZWNrZWQsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuaW5oZXJpdGVkRXhwYW5kZWRGaXJzdExldmVsICYmIHRoaXMuY2hlY2tlZCAmJiAhdGhpcy5leHBhbmRlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRTdWIodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gICAqIE3DqXRvZG9zIGV4cHVlc3RvcyBxdWUgcGVybWl0ZW4gY29uZmlndXJhciBhbCDDrXRlbSBkZSBmb3JtYSBleHRlcm5hXHJcbiAgICovXHJcblxyXG4gIGZvY3VzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaGVja2JveD8uZm9jdXMoKTtcclxuICAgIHRoaXMuaGFuZGxlSXRlbUZvY3VzKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q2hlY2tlZEF1dG9tYXRpY2FsbHlEZXBlbmRpbmdPbkNoaWxkcmVuKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc3ViKSB7XHJcbiAgICAgIHRoaXMuc3ViLml0ZW1MaXN0LmZvckVhY2goaXRlbSA9PiAoaXRlbSBhcyBUcmVlSXRlbUNvbXBvbmVudCkuc2V0Q2hlY2tlZEF1dG9tYXRpY2FsbHlEZXBlbmRpbmdPbkNoaWxkcmVuKCkpO1xyXG4gICAgICBpZiAodGhpcy5hcmVBbGxDaGlsZHJlbkNoZWNrZWQoKSkge1xyXG4gICAgICAgIGlmICh0aGlzLmluZGV0ZXJtaW5hdGVDaGVja2VkKSB7XHJcbiAgICAgICAgICB0aGlzLnNldEluZGV0ZXJtaW5hdGVDaGVja2VkKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5jaGVja2VkKSB7XHJcbiAgICAgICAgICB0aGlzLnNldENoZWNrZWQodHJ1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaGFzQ2hpbGRyZW5DaGVja2VkT3JJbmRldGVybWluYXRlKCkpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaW5kZXRlcm1pbmF0ZUNoZWNrZWQpIHtcclxuICAgICAgICAgIHRoaXMuc2V0SW5kZXRlcm1pbmF0ZUNoZWNrZWQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jaGVja2VkKSB7XHJcbiAgICAgICAgICB0aGlzLnNldENoZWNrZWQoZmFsc2UsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5pbmRldGVybWluYXRlQ2hlY2tlZCkge1xyXG4gICAgICAgICAgdGhpcy5zZXRJbmRldGVybWluYXRlQ2hlY2tlZChmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jaGVja2VkKSB7XHJcbiAgICAgICAgICB0aGlzLnNldENoZWNrZWQoZmFsc2UsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVmcmVzaEFsbFBhcmVudHNFeHBhbmRlZFJlY3Vyc2l2ZSh2YWx1ZSk6IHZvaWQge1xyXG4gICAgdGhpcy5hbGxQYXJlbnRzRXhwYW5kZWQgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLnN1Yikge1xyXG4gICAgICB0aGlzLnN1Yi5pdGVtTGlzdC5mb3JFYWNoKGl0ZW0gPT4gKGl0ZW0gYXMgVHJlZUl0ZW1Db21wb25lbnQpLnJlZnJlc2hBbGxQYXJlbnRzRXhwYW5kZWRSZWN1cnNpdmUodmFsdWUgJiYgdGhpcy5leHBhbmRlZCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGV0ZWN0Q2hhbmdlcygpOiB2b2lkIHtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZXhwYW5kU3ViKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmV4cGFuZGVkID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5zdWIpIHtcclxuICAgICAgdGhpcy5zdWIuaXRlbUxpc3QuZm9yRWFjaChpdGVtID0+IChpdGVtIGFzIFRyZWVJdGVtQ29tcG9uZW50KS5yZWZyZXNoQWxsUGFyZW50c0V4cGFuZGVkUmVjdXJzaXZlKHRoaXMuYWxsUGFyZW50c0V4cGFuZGVkICYmIHZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICAgKiBHZXN0aW9uIGRlIGV2ZW50b3NcclxuICAgKi9cclxuXHJcbiAgaGFuZGxlQ2hlY2tib3hDaGFuZ2UoY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRDaGVja2VkKGNoZWNrZWQsIGZhbHNlKTtcclxuICAgIGlmICh0aGlzLmluaGVyaXRlZEV4cGFuZGVkRmlyc3RMZXZlbCAmJiBjaGVja2VkICYmICF0aGlzLmV4cGFuZGVkKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kU3ViKHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlSW5kZXRlcm1pbmF0ZUNoZWNrZWRDaGFuZ2UoaW5kZXRlcm1pbmF0ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pbmRldGVybWluYXRlQ2hlY2tlZENoYW5nZS5lbWl0KGluZGV0ZXJtaW5hdGUpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlSXRlbUZvY3VzKHZhbHVlLCBjb25kaXRpb249dHJ1ZSk6IHZvaWQge1xyXG4gICAgaWYgKGNvbmRpdGlvbikge1xyXG4gICAgICB0aGlzLmlzRm9jdXMgPSB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUl0ZW1Ib3Zlcih2YWx1ZSwgY29uZGl0aW9uPXRydWUpOiB2b2lkIHtcclxuICAgIGlmIChjb25kaXRpb24pIHtcclxuICAgICAgdGhpcy5pc0hvdmVyID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVBcnJvd1VwKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBjb25kaXRpb249dHJ1ZSk6IHZvaWQge1xyXG4gICAgaWYgKGNvbmRpdGlvbikge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB0aGlzLnF1aXRGb2N1cy5lbWl0KHtcclxuICAgICAgICBuZXh0RWxlbWVudDogJ3ByZXZpb3VzJyxcclxuICAgICAgICBjdXJyZW50SXRlbTogdGhpc1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUhvbWUoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGNvbmRpdGlvbj10cnVlKTogdm9pZCB7XHJcbiAgICBpZiAoY29uZGl0aW9uKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHRoaXMucXVpdEZvY3VzLmVtaXQoe1xyXG4gICAgICAgIG5leHRFbGVtZW50OiAnZmlyc3QnLFxyXG4gICAgICAgIGN1cnJlbnRJdGVtOiB0aGlzXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlRW5kKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBjb25kaXRpb249dHJ1ZSk6IHZvaWQge1xyXG4gICAgaWYgKGNvbmRpdGlvbikge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB0aGlzLnF1aXRGb2N1cy5lbWl0KHtcclxuICAgICAgICBuZXh0RWxlbWVudDogJ2xhc3QnLFxyXG4gICAgICAgIGN1cnJlbnRJdGVtOiB0aGlzXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQXJyb3dEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBjb25kaXRpb249dHJ1ZSk6IHZvaWQge1xyXG4gICAgaWYgKGNvbmRpdGlvbikge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB0aGlzLnF1aXRGb2N1cy5lbWl0KHtcclxuICAgICAgICBuZXh0RWxlbWVudDogJ25leHQnLFxyXG4gICAgICAgIGN1cnJlbnRJdGVtOiB0aGlzXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQXJyb3dSaWdodChldmVudDogS2V5Ym9hcmRFdmVudCwgY29uZGl0aW9uPXRydWUpOiB2b2lkIHtcclxuICAgIGlmIChjb25kaXRpb24gJiYgdGhpcy5zdWIgJiYgdGhpcy5zdWIuaXRlbUxpc3Q/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgaWYgKHRoaXMuZXhwYW5kZWQpIHtcclxuICAgICAgICB0aGlzLnF1aXRGb2N1cy5lbWl0KHtcclxuICAgICAgICAgIG5leHRFbGVtZW50OiAnZmlyc3RDaGlsZCcsXHJcbiAgICAgICAgICBjdXJyZW50SXRlbTogdGhpc1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kU3ViKHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVBcnJvd0xlZnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGNvbmRpdGlvbj10cnVlKTogdm9pZCB7XHJcbiAgICBpZiAoY29uZGl0aW9uKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGlmICh0aGlzLmV4cGFuZGVkKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRTdWIoZmFsc2UpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc3ViTGV2ZWwgPiAwKSB7XHJcbiAgICAgICAgdGhpcy5xdWl0Rm9jdXMuZW1pdCh7XHJcbiAgICAgICAgICBuZXh0RWxlbWVudDogJ3BhcmVudCcsXHJcbiAgICAgICAgICBjdXJyZW50SXRlbTogdGhpc1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBTZXR0ZXJzIGFuZCBnZXR0ZXJzXHJcbiAgICovXHJcblxyXG4gIHNldENoZWNrZWQoY2hlY2tlZDogYm9vbGVhbiwgaWdub3JlSW5UcmVlOiBib29sZWFuLCBlbWl0RXZlbnQgPSB0cnVlKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5jaGVja2VkID0gY2hlY2tlZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaW5oZXJpdGVkRGVjb3VwbGVDaGlsZEZyb21QYXJlbnQgJiYgdGhpcy5zdWIgJiYgdGhpcy5zdWIuaXRlbUxpc3QgJiYgIXRoaXMuaW5kZXRlcm1pbmF0ZUNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5zdWIuaXRlbUxpc3QuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAoaXRlbSBhcyBUcmVlSXRlbUNvbXBvbmVudCkuc2V0SW5kZXRlcm1pbmF0ZUNoZWNrZWQoZmFsc2UpO1xyXG4gICAgICAgIChpdGVtIGFzIFRyZWVJdGVtQ29tcG9uZW50KS5zZXRDaGVja2VkKGNoZWNrZWQsIHRydWUpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlbWl0RXZlbnQpIHtcclxuICAgICAgdGhpcy5jaGVja2VkQ2hhbmdlLmVtaXQoY2hlY2tlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFpZ25vcmVJblRyZWUpIHtcclxuICAgICAgdGhpcy5jaGVja2VkQ2hhbmdlRm9yVHJlZS5lbWl0KGNoZWNrZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0SW5kZXRlcm1pbmF0ZUNoZWNrZWQoaW5kZXRlcm1pbmF0ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZUNoZWNrZWQgPSBpbmRldGVybWluYXRlO1xyXG4gICAgICB0aGlzLmluZGV0ZXJtaW5hdGVDaGVja2VkQ2hhbmdlLmVtaXQoaW5kZXRlcm1pbmF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTdWJMZXZlbChzdWJMZXZlbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YkxldmVsID0gc3ViTGV2ZWw7XHJcbiAgICBpZiAodGhpcy5zdWIgJiYgdGhpcy5zdWIuaXRlbUxpc3QpIHtcclxuICAgICAgdGhpcy5zdWIuaXRlbUxpc3QuZm9yRWFjaChpdGVtID0+IChpdGVtIGFzIFRyZWVJdGVtQ29tcG9uZW50KS5zZXRTdWJMZXZlbChzdWJMZXZlbCArIDEpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldE9yZGVyUmVjdXJzaXZlbHkob3JkZXI6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICB0aGlzLm9yZGVySW5UcmVlID0gb3JkZXI7XHJcbiAgICBsZXQgbmV3T3JkZXIgPSBvcmRlciArIDE7XHJcbiAgICBpZiAodGhpcy5zdWIgJiYgdGhpcy5zdWIuaXRlbUxpc3QpIHtcclxuICAgICAgdGhpcy5zdWIuaXRlbUxpc3QuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBuZXdPcmRlciA9IChpdGVtIGFzIFRyZWVJdGVtQ29tcG9uZW50KS5zZXRPcmRlclJlY3Vyc2l2ZWx5KG5ld09yZGVyKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3T3JkZXI7XHJcbiAgfVxyXG5cclxuICBzZXREZWZhdWx0SWQoZGVmYXVsdElkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVmYXVsdElkID0gZGVmYXVsdElkO1xyXG4gICAgdGhpcy5zZXREZWZhdWx0SWRSZWN1cnNpdmUoKTtcclxuICB9XHJcblxyXG4gIHNldERlZmF1bHRJZFJlY3Vyc2l2ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN1YiAmJiB0aGlzLnN1Yi5pdGVtTGlzdCkge1xyXG4gICAgICB0aGlzLnN1Yi5pdGVtTGlzdC5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIChpdGVtIGFzIFRyZWVJdGVtQ29tcG9uZW50KS5zZXREZWZhdWx0SWQoYHN1Yi0ke3RoaXMuZ2V0SWQoKX0tJHtpbmRleH1gKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaWQgPyB0aGlzLmlkIDogdGhpcy5kZWZhdWx0SWQ7XHJcbiAgfVxyXG5cclxuICBpc0hpZGRlbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5pbmhlcml0ZWRNYXRjaGVzU2VhcmNoICYmICghdGhpcy5zdWIgfHwgdGhpcy5hcmVBbGxDaGlsZHJlbkhpZGRlbigpKTtcclxuICB9XHJcblxyXG4gIGFyZUFsbENoaWxkcmVuSGlkZGVuKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLnN1Yi5pdGVtTGlzdDtcclxuICAgIHJldHVybiBjaGlsZHJlbi5maW5kSW5kZXgoY2hpbGQgPT4gIShjaGlsZCBhcyBUcmVlSXRlbUNvbXBvbmVudCkuaXNIaWRkZW4oKSkgPCAwO1xyXG4gIH1cclxuXHJcbiAgYXJlQWxsQ2hpbGRyZW5DaGVja2VkKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLnN1Yi5pdGVtTGlzdDtcclxuICAgIHJldHVybiBjaGlsZHJlbi5maW5kSW5kZXgoY2hpbGQgPT4gIShjaGlsZCBhcyBUcmVlSXRlbUNvbXBvbmVudCkuY2hlY2tlZCkgPCAwO1xyXG4gIH1cclxuXHJcbiAgaGFzQ2hpbGRyZW5DaGVja2VkT3JJbmRldGVybWluYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLnN1Yi5pdGVtTGlzdDtcclxuICAgIHJldHVybiBjaGlsZHJlbi5maW5kSW5kZXgoY2hpbGQgPT4gKGNoaWxkIGFzIFRyZWVJdGVtQ29tcG9uZW50KS5jaGVja2VkIHx8IChjaGlsZCBhcyBUcmVlSXRlbUNvbXBvbmVudCkuaW5kZXRlcm1pbmF0ZUNoZWNrZWQpID49IDA7XHJcbiAgfVxyXG5cclxuICBtYXRjaGVzVGV4dCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgbWF0Y2hlczogYm9vbGVhbjtcclxuICAgIGlmICh0aGlzLmFsbFBhcmVudHNFeHBhbmRlZCAmJiAhdGhpcy5pc0hpZGRlbigpKSB7XHJcbiAgICAgIG1hdGNoZXMgPSB0aGlzLmNoZWNrYm94Py5tYXRjaGVzVGV4dCh2YWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpdGVtVGV4dCA9IHRoaXMuaGlkZGVuV3JhcHBlci5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50O1xyXG4gICAgICBtYXRjaGVzID0gU2VhcmNoVXRpbHMuY29udGFpbnNBbnlXb3JkRnJvbShpdGVtVGV4dCwgdmFsdWUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fbWF0Y2hlc1ZhbGlkVGV4dCA9IHZhbHVlID8gbWF0Y2hlcyA6IGZhbHNlO1xyXG4gICAgcmV0dXJuIG1hdGNoZXM7XHJcbiAgfVxyXG5cclxuICBnZXRLZXkoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRyZWVJdGVtS2V5O1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFyZW50S2V5KCk6IHN0cmluZyB7XHJcbiAgICBsZXQgcGFyZW50S2V5OiBzdHJpbmc7XHJcbiAgICBsZXQgcGFyZW50RWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7XHJcbiAgICB3aGlsZSAocGFyZW50RWxlbWVudCAmJiBwYXJlbnRFbGVtZW50LnRhZ05hbWUgIT09ICdCT0RZJyAmJiBwYXJlbnRFbGVtZW50LnRhZ05hbWUgIT09ICdERVNZLVRSRUUtSVRFTScgJiYgcGFyZW50RWxlbWVudC50YWdOYW1lICE9PSAnREVTWS1UUkVFJykge1xyXG4gICAgICBwYXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwYXJlbnRFbGVtZW50LnRhZ05hbWUgPT09ICdCT0RZJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBmb3IgdHJlZS1pdGVtIG5vdCBmb3VuZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwYXJlbnRFbGVtZW50LnRhZ05hbWUgPT09ICdERVNZLVRSRUUnKSB7XHJcbiAgICAgIHBhcmVudEtleSA9ICdyb290JztcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyZW50RWxlbWVudC50YWdOYW1lID09PSAnREVTWS1UUkVFLUlURU0nKSB7XHJcbiAgICAgIHBhcmVudEtleSA9IHBhcmVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkZXN5LXRyZWUtaXRlbS1rZXknKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcGFyZW50S2V5O1xyXG4gIH1cclxuXHJcbiAgaXNBY3RpdmUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5hY3RpdmUgfHwgdGhpcy5fbWF0Y2hlc1ZhbGlkVGV4dDtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogTcOpdG9kb3MgcHJpdmFkb3NcclxuICAgKi9cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhIHVuYSBjbGF2ZSDDum5pY2EgcGFyYSBlbCBjb21wb25lbnRlXHJcbiAgICogQHByaXZhdGVcclxuICAgKi9cclxuICBwcml2YXRlIHN0YXRpYyBnZW5lcmF0ZVN0YXRpY0l0ZW1LZXkoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGtleSA9ICd0cmVlLWl0ZW0ta2V5LScgKyBUcmVlSXRlbUNvbXBvbmVudC5fdHJlZUl0ZW1LZXlTdWZmaXg7XHJcbiAgICBUcmVlSXRlbUNvbXBvbmVudC5fdHJlZUl0ZW1LZXlTdWZmaXgrKztcclxuICAgIHJldHVybiBrZXk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
1
+ import { __decorate } from "tslib";
2
+ import { ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, forwardRef, HostBinding, Input, Output, ViewChild } from '@angular/core';
3
+ import { DesyContentChild } from "../../../../shared/decorators/desy-content-child.decorator";
4
+ import { TreeSubComponent } from "../tree-sub/tree-sub.component";
5
+ import { ITreeItem } from "../interfaces/itree-item";
6
+ import { HintComponent } from "../../hint/hint.component";
7
+ import { LabelComponent } from "../../label/label.component";
8
+ import { TreeCheckboxComponent } from "../tree-checkbox/tree-checkbox.component";
9
+ import { AccessibilityComponent } from "../../../../shared/components";
10
+ import { DesyOnInputChange } from "../../../../shared/decorators/desy-on-input-change.decorator";
11
+ import { SearchUtils } from "../../../../shared/utils/search-utils";
12
+ export class TreeItemComponent extends AccessibilityComponent {
13
+ constructor(changeDetector, element) {
14
+ super();
15
+ this.changeDetector = changeDetector;
16
+ this.element = element;
17
+ this.checkedChange = new EventEmitter();
18
+ this.checkedChangeForTree = new EventEmitter();
19
+ this.expandedChange = new EventEmitter();
20
+ this.indeterminateCheckedChange = new EventEmitter();
21
+ /*
22
+ * Identificador del wrapper del componente. Se utiliza para recorrer el árbol en sentido inverso y que cada item
23
+ * sepa cuál es su item/árbol padre.
24
+ * Esto es necesario ya que, a la hora de construir un árbol dinámico con templates,
25
+ * el decorador @ContentChildren no funciona correctamente y no los detecta.
26
+ * Dejo el enlace de un problema similar: https://github.com/angular/angular/issues/21751
27
+ */
28
+ this.treeItemKey = TreeItemComponent.generateStaticItemKey();
29
+ this.allParentsExpanded = true; // True si el elemento es visible según los elementos expandidos
30
+ this.inheritedMatchesSearch = true; // True si el elemento es visible según los criterios de búsqueda
31
+ // Evento para emitir al componente arbol cuando se pretende abandonar el foco del item
32
+ this.quitFocus = new EventEmitter();
33
+ this.isFocus = false;
34
+ this.isHover = false;
35
+ this._matchesValidText = false; // True si el contenido del item encaja con los criterios de búsqueda y se está filtrando
36
+ }
37
+ ngOnChanges(changes) {
38
+ if (this.sub && this.sub.itemList) {
39
+ this.sub.itemList.forEach(item => item.refreshAllParentsExpandedRecursive(this.allParentsExpanded && this.expanded));
40
+ }
41
+ for (const propName in changes) {
42
+ if (changes.hasOwnProperty(propName)) {
43
+ switch (propName) {
44
+ case 'checked': {
45
+ // Reasignamos el valor de checked cuando detectamos el cambio en la entrada
46
+ setTimeout(() => {
47
+ this.setChecked(this.checked, false, false);
48
+ if (this.inheritedExpandedFirstLevel && this.checked && !this.expanded) {
49
+ this.expandSub(true);
50
+ }
51
+ });
52
+ break;
53
+ }
54
+ }
55
+ }
56
+ }
57
+ }
58
+ /*
59
+ * Métodos expuestos que permiten configurar al ítem de forma externa
60
+ */
61
+ focus() {
62
+ var _a;
63
+ (_a = this.checkbox) === null || _a === void 0 ? void 0 : _a.focus();
64
+ this.handleItemFocus(true);
65
+ }
66
+ setCheckedAutomaticallyDependingOnChildren() {
67
+ if (this.sub) {
68
+ this.sub.itemList.forEach(item => item.setCheckedAutomaticallyDependingOnChildren());
69
+ if (this.areAllChildrenChecked()) {
70
+ if (this.indeterminateChecked) {
71
+ this.setIndeterminateChecked(false);
72
+ }
73
+ if (!this.checked) {
74
+ this.setChecked(true, true);
75
+ }
76
+ }
77
+ else if (this.hasChildrenCheckedOrIndeterminate()) {
78
+ if (!this.indeterminateChecked) {
79
+ this.setIndeterminateChecked(true);
80
+ }
81
+ if (this.checked) {
82
+ this.setChecked(false, true);
83
+ }
84
+ }
85
+ else {
86
+ if (this.indeterminateChecked) {
87
+ this.setIndeterminateChecked(false);
88
+ }
89
+ if (this.checked) {
90
+ this.setChecked(false, true);
91
+ }
92
+ }
93
+ }
94
+ }
95
+ refreshAllParentsExpandedRecursive(value) {
96
+ this.allParentsExpanded = value;
97
+ if (this.sub) {
98
+ this.sub.itemList.forEach(item => item.refreshAllParentsExpandedRecursive(value && this.expanded));
99
+ }
100
+ }
101
+ detectChanges() {
102
+ this.changeDetector.detectChanges();
103
+ }
104
+ expandSub(value) {
105
+ this.expanded = value;
106
+ if (this.sub) {
107
+ this.sub.itemList.forEach(item => item.refreshAllParentsExpandedRecursive(this.allParentsExpanded && value));
108
+ }
109
+ this.expandedChange.emit(value);
110
+ }
111
+ /*
112
+ * Gestion de eventos
113
+ */
114
+ handleCheckboxChange(checked) {
115
+ this.setChecked(checked, false);
116
+ if (this.inheritedExpandedFirstLevel && checked && !this.expanded) {
117
+ this.expandSub(true);
118
+ }
119
+ }
120
+ handleIndeterminateCheckedChange(indeterminate) {
121
+ this.indeterminateCheckedChange.emit(indeterminate);
122
+ }
123
+ handleItemFocus(value, condition = true) {
124
+ if (condition) {
125
+ this.isFocus = value;
126
+ }
127
+ }
128
+ handleItemHover(value, condition = true) {
129
+ if (condition) {
130
+ this.isHover = value;
131
+ }
132
+ }
133
+ handleArrowUp(event, condition = true) {
134
+ if (condition) {
135
+ event.preventDefault();
136
+ this.quitFocus.emit({
137
+ nextElement: 'previous',
138
+ currentItem: this
139
+ });
140
+ }
141
+ }
142
+ handleHome(event, condition = true) {
143
+ if (condition) {
144
+ event.preventDefault();
145
+ this.quitFocus.emit({
146
+ nextElement: 'first',
147
+ currentItem: this
148
+ });
149
+ }
150
+ }
151
+ handleEnd(event, condition = true) {
152
+ if (condition) {
153
+ event.preventDefault();
154
+ this.quitFocus.emit({
155
+ nextElement: 'last',
156
+ currentItem: this
157
+ });
158
+ }
159
+ }
160
+ handleArrowDown(event, condition = true) {
161
+ if (condition) {
162
+ event.preventDefault();
163
+ this.quitFocus.emit({
164
+ nextElement: 'next',
165
+ currentItem: this
166
+ });
167
+ }
168
+ }
169
+ handleArrowRight(event, condition = true) {
170
+ var _a;
171
+ if (condition && this.sub && ((_a = this.sub.itemList) === null || _a === void 0 ? void 0 : _a.length) > 0) {
172
+ event.preventDefault();
173
+ if (this.expanded) {
174
+ this.quitFocus.emit({
175
+ nextElement: 'firstChild',
176
+ currentItem: this
177
+ });
178
+ }
179
+ else {
180
+ this.expandSub(true);
181
+ }
182
+ }
183
+ }
184
+ handleArrowLeft(event, condition = true) {
185
+ if (condition) {
186
+ event.preventDefault();
187
+ if (this.expanded) {
188
+ this.expandSub(false);
189
+ }
190
+ else if (this.subLevel > 0) {
191
+ this.quitFocus.emit({
192
+ nextElement: 'parent',
193
+ currentItem: this
194
+ });
195
+ }
196
+ }
197
+ }
198
+ /*
199
+ * Setters and getters
200
+ */
201
+ setChecked(checked, ignoreInTree, emitEvent = true) {
202
+ if (!this.disabled) {
203
+ this.checked = checked;
204
+ }
205
+ if (!this.inheritedDecoupleChildFromParent && this.sub && this.sub.itemList && !this.indeterminateChecked) {
206
+ this.sub.itemList.forEach(item => {
207
+ item.setIndeterminateChecked(false);
208
+ item.setChecked(checked, true);
209
+ });
210
+ }
211
+ if (emitEvent) {
212
+ this.checkedChange.emit(checked);
213
+ }
214
+ if (!ignoreInTree) {
215
+ this.checkedChangeForTree.emit(checked);
216
+ }
217
+ }
218
+ setIndeterminateChecked(indeterminate) {
219
+ if (!this.disabled) {
220
+ this.indeterminateChecked = indeterminate;
221
+ this.indeterminateCheckedChange.emit(indeterminate);
222
+ }
223
+ }
224
+ setSubLevel(subLevel) {
225
+ this.subLevel = subLevel;
226
+ if (this.sub && this.sub.itemList) {
227
+ this.sub.itemList.forEach(item => item.setSubLevel(subLevel + 1));
228
+ }
229
+ }
230
+ setOrderRecursively(order) {
231
+ this.orderInTree = order;
232
+ let newOrder = order + 1;
233
+ if (this.sub && this.sub.itemList) {
234
+ this.sub.itemList.forEach(item => {
235
+ newOrder = item.setOrderRecursively(newOrder);
236
+ });
237
+ }
238
+ return newOrder;
239
+ }
240
+ setDefaultId(defaultId) {
241
+ this.defaultId = defaultId;
242
+ this.setDefaultIdRecursive();
243
+ }
244
+ setDefaultIdRecursive() {
245
+ if (this.sub && this.sub.itemList) {
246
+ this.sub.itemList.forEach((item, index) => {
247
+ item.setDefaultId(`sub-${this.getId()}-${index}`);
248
+ });
249
+ }
250
+ }
251
+ getId() {
252
+ return this.id ? this.id : this.defaultId;
253
+ }
254
+ isHidden() {
255
+ return !this.inheritedMatchesSearch && (!this.sub || this.areAllChildrenHidden());
256
+ }
257
+ areAllChildrenHidden() {
258
+ const children = this.sub.itemList;
259
+ return children.findIndex(child => !child.isHidden()) < 0;
260
+ }
261
+ areAllChildrenChecked() {
262
+ const children = this.sub.itemList;
263
+ return children.findIndex(child => !child.checked) < 0;
264
+ }
265
+ hasChildrenCheckedOrIndeterminate() {
266
+ const children = this.sub.itemList;
267
+ return children.findIndex(child => child.checked || child.indeterminateChecked) >= 0;
268
+ }
269
+ matchesText(value) {
270
+ var _a;
271
+ let matches;
272
+ if (this.allParentsExpanded && !this.isHidden()) {
273
+ matches = (_a = this.checkbox) === null || _a === void 0 ? void 0 : _a.matchesText(value);
274
+ }
275
+ else {
276
+ const itemText = this.hiddenWrapper.nativeElement.textContent;
277
+ matches = SearchUtils.containsAnyWordFrom(itemText, value);
278
+ }
279
+ this._matchesValidText = value ? matches : false;
280
+ return matches;
281
+ }
282
+ getKey() {
283
+ return this.treeItemKey;
284
+ }
285
+ getParentKey() {
286
+ let parentKey;
287
+ let parentElement = this.element.nativeElement.parentElement;
288
+ while (parentElement && parentElement.tagName !== 'BODY' && parentElement.tagName !== 'DESY-TREE-ITEM' && parentElement.tagName !== 'DESY-TREE') {
289
+ parentElement = parentElement.parentElement;
290
+ }
291
+ if (parentElement.tagName === 'BODY') {
292
+ throw new Error('Parent for tree-item not found');
293
+ }
294
+ if (parentElement.tagName === 'DESY-TREE') {
295
+ parentKey = 'root';
296
+ }
297
+ if (parentElement.tagName === 'DESY-TREE-ITEM') {
298
+ parentKey = parentElement.getAttribute('desy-tree-item-key');
299
+ }
300
+ return parentKey;
301
+ }
302
+ isActive() {
303
+ return this.active || this._matchesValidText;
304
+ }
305
+ /*
306
+ * Métodos privados
307
+ */
308
+ /**
309
+ * Genera una clave única para el componente
310
+ * @private
311
+ */
312
+ static generateStaticItemKey() {
313
+ const key = 'tree-item-key-' + TreeItemComponent._treeItemKeySuffix;
314
+ TreeItemComponent._treeItemKeySuffix++;
315
+ return key;
316
+ }
317
+ }
318
+ TreeItemComponent._treeItemKeySuffix = 0; // Sufijo estático para generar siempre claves distintas
319
+ TreeItemComponent.decorators = [
320
+ { type: Component, args: [{
321
+ selector: 'desy-tree-item',
322
+ template: "<li *ngIf=\"allParentsExpanded && !isHidden(); else hidden\"\n [id]=\"id\"\n [class]=\"'c-tree__item focus:outline-none'\"\n [ngClass]=\"{\n 'ml-4': subLevel === 0,\n 'ml-8': subLevel !== 0,\n 'c-tree__item--focus': isFocus && !sub,\n 'c-tree__item--hover': isHover && !sub\n }\"\n (focusin)=\"handleItemFocus(true, !sub)\"\n (focusout)=\"handleItemFocus(false, !sub)\"\n (mouseover)=\"handleItemHover(true, !sub)\"\n (mouseout)=\"handleItemHover(false, !sub)\"\n (keydown.home)=\"handleHome($event, !sub)\"\n (keydown.end)=\"handleEnd($event, !sub)\"\n (keydown.arrowup)=\"handleArrowUp($event, !sub)\"\n (keydown.arrowdown)=\"handleArrowDown($event, !sub)\"\n (keydown.arrowright)=\"handleArrowRight($event, !sub)\"\n (keydown.arrowleft)=\"handleArrowLeft($event, !sub)\"\n role=\"treeitem\"\n [attr.aria-expanded]=\"sub ? (expanded ? 'true' : 'false') : null\"\n [attr.aria-current]=\"isActive() && subLevel === 0 ? 'page' : null\">\n <div *ngIf=\"!sub && subLevel !== 0; else childrenTree\"\n [id]=\"id\"\n [class]=\"['block', classes] | makeHtmlList\"\n [attr.title]=\"title ? title : null\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n\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 : (disabled ? 'true' : null)\"\n [attr.aria-controls]=\"ariaControls ? ariaControls : null\"\n [attr.aria-current]=\"ariaCurrent ? ariaCurrent : (isActive() ? 'page' : 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 : (disabled ? '-1' : null)\">\n <ng-container *ngTemplateOutlet=\"checkbox\"></ng-container>\n </div>\n</li>\n\n<ng-template #childrenTree>\n <div *ngIf=\"sub; else checkbox\" class=\"w-full h-full\"\n [ngClass]=\"{'c-tree__item--focus': isFocus && sub, 'c-tree__item--hover': isHover && sub}\"\n (focusin)=\"handleItemFocus(true)\"\n (focusout)=\"handleItemFocus(false)\"\n (mouseover)=\"handleItemHover(true)\"\n (mouseout)=\"handleItemHover(false)\"\n (keydown.home)=\"handleHome($event)\"\n (keydown.end)=\"handleEnd($event)\"\n (keydown.arrowup)=\"handleArrowUp($event)\"\n (keydown.arrowdown)=\"handleArrowDown($event)\"\n (keydown.arrowright)=\"handleArrowRight($event)\"\n (keydown.arrowLeft)=\"handleArrowLeft($event)\">\n <div [class]=\"['w-full flex items-center relative focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black text-left', classes] | makeHtmlList\"\n [attr.role]=\"role ? role : null\"\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 <span class=\"absolute top-3 -left-4 flex items-center w-4 h-2.5 text-primary-base font-bold\">\n <svg (click)=\"expandSub(false)\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 10 10\" width=\"10\" height=\"10\" aria-hidden=\"true\" class=\"c-tree__minus\"><path fill=\"currentColor\" d=\"M9.286 5.714H.714a.714.714 0 010-1.428h8.572a.714.714 0 010 1.428z\"/></svg>\n <svg (click)=\"expandSub(true)\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 10 10\" width=\"10\" height=\"10\" aria-hidden=\"true\" class=\"c-tree__plus\"><path fill=\"currentColor\" d=\"M9.286 4.286H5.893a.179.179 0 01-.179-.179V.714a.714.714 0 00-1.428 0v3.393a.179.179 0 01-.179.179H.714a.714.714 0 000 1.428h3.393a.179.179 0 01.179.179v3.393a.714.714 0 001.428 0V5.893a.179.179 0 01.179-.179h3.393a.714.714 0 000-1.428z\"/></svg>\n </span>\n <ng-container *ngTemplateOutlet=\"checkbox\"></ng-container>\n </div>\n </div>\n\n <ng-container *desyCustomInnerContent=\"{ component: sub }\"></ng-container>\n</ng-template>\n\n<!-- Se incorpora el contenido m\u00EDnimo para funcionar con el objetivo de mejorar el rendimiento -->\n<ng-template #hidden>\n <li class=\"hidden\">\n <div #hiddenWrapper>\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n <ng-container *desyCustomInnerContent=\"{ component: sub }\"></ng-container>\n </li>\n</ng-template>\n\n<ng-template #checkbox>\n <!--\n El *ngIf=\"name || parentName\" se realiza para no crear el checkbox hasta que se ha ejecutado el configureAllItems.\n Esto puede dar problemas porque, hasta que no se ejecuta esto, el desy-tree-checkbox no cuenta con el type actualizado (por defecto radio).\n Un ejemplo en el que esto puede ser problem\u00E1tico es al ser typo checkbox y darle un valor checked=true a varios los items, ya\n que el type todav\u00EDa no se ha transmitido aqu\u00ED. Como por defecto el type es radio, s\u00F3lo marcar\u00E1 el \u00FAltimo. Posteriormente,\n ya detectar\u00E1 el tipo y permitir\u00E1 seleccionar varios items, pero hasta entonces existe este problema.\n -->\n <desy-tree-checkbox *ngIf=\"name || parentName\"\n [name]=\"name ? name : parentName\"\n [id]=\"getId()\"\n [value]=\"value\"\n [classes]=\"classes\"\n [type]=\"type\"\n [(checked)]=\"checked\" (checkedChange)=\"handleCheckboxChange($event)\"\n [hasError]=\"inheritedHasError\"\n [disabled]=\"disabled\"\n [hasDividers]=\"hasDividers\"\n [describedBy]=\"[inheritedDescribedBy, hint?.id] | makeHtmlList\"\n [isIndeterminate]=\"isIndeterminate\"\n [(indeterminateChecked)]=\"indeterminateChecked\"\n (indeterminateCheckedChange)=\"handleIndeterminateCheckedChange($event)\"\n\n [labelComponent]=\"label\"\n [hintComponent]=\"hint\"\n\n [role]=\"role\"\n [ariaLabel]=\"ariaLabel\"\n [ariaDescribedBy]=\"ariaDescribedBy\"\n [ariaLabelledBy]=\"ariaLabelledBy\"\n [ariaHidden]=\"ariaHidden\"\n [ariaDisabled]=\"ariaDisabled\"\n [ariaControls]=\"ariaControls\"\n [ariaCurrent]=\"ariaCurrent\"\n [ariaLive]=\"ariaLive\"\n [ariaExpanded]=\"ariaExpanded\"\n [ariaErrorMessage]=\"ariaErrorMessage\"\n [ariaHasPopup]=\"ariaHasPopup\"\n [ariaModal]=\"ariaModal\"\n [tabindex]=\"tabindex\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </desy-tree-checkbox>\n</ng-template>\n\n<ng-template #content>\n <div class=\"font-bold\" *ngIf=\"isActive(); else contentLabel\">\n <ng-container *ngTemplateOutlet=\"contentLabel\"></ng-container>\n </div>\n <ng-content select=\"desy-hint\"></ng-content>\n</ng-template>\n\n<ng-template #contentLabel>\n <ng-content select=\"desy-label\"></ng-content>\n</ng-template>\n",
323
+ providers: [
324
+ {
325
+ provide: ITreeItem,
326
+ useExisting: forwardRef(() => TreeItemComponent)
327
+ }
328
+ ]
329
+ },] }
330
+ ];
331
+ TreeItemComponent.ctorParameters = () => [
332
+ { type: ChangeDetectorRef },
333
+ { type: ElementRef }
334
+ ];
335
+ TreeItemComponent.propDecorators = {
336
+ hiddenWrapper: [{ type: ViewChild, args: ['hiddenWrapper',] }],
337
+ id: [{ type: Input }],
338
+ name: [{ type: Input }],
339
+ value: [{ type: Input }],
340
+ classes: [{ type: Input }],
341
+ active: [{ type: Input }],
342
+ disabled: [{ type: Input }],
343
+ title: [{ type: Input }],
344
+ hasDividers: [{ type: Input }],
345
+ isIndeterminate: [{ type: Input }],
346
+ checked: [{ type: Input }],
347
+ checkedChange: [{ type: Output }],
348
+ expanded: [{ type: Input }],
349
+ expandedChange: [{ type: Output }],
350
+ indeterminateChecked: [{ type: Input }],
351
+ indeterminateCheckedChange: [{ type: Output }],
352
+ sub: [{ type: ContentChildren, args: [TreeSubComponent,] }],
353
+ hint: [{ type: ContentChildren, args: [HintComponent,] }],
354
+ label: [{ type: ContentChildren, args: [LabelComponent,] }],
355
+ checkbox: [{ type: ViewChild, args: [TreeCheckboxComponent,] }],
356
+ treeItemKey: [{ type: HostBinding, args: ['attr.desy-tree-item-key',] }]
357
+ };
358
+ __decorate([
359
+ DesyOnInputChange('setDefaultIdRecursive')
360
+ ], TreeItemComponent.prototype, "id", void 0);
361
+ __decorate([
362
+ DesyContentChild({ onSetCallbackName: 'overrideSubValues' })
363
+ ], TreeItemComponent.prototype, "sub", void 0);
364
+ __decorate([
365
+ DesyContentChild()
366
+ ], TreeItemComponent.prototype, "hint", void 0);
367
+ __decorate([
368
+ DesyContentChild()
369
+ ], TreeItemComponent.prototype, "label", void 0);
370
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc3ktYW5ndWxhci9zcmMvbGliL2Rlc3ktZm9ybXMvY29tcG9uZW50cy90cmVlL3RyZWUtaXRlbS90cmVlLWl0ZW0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQUUsVUFBVSxFQUMzQixZQUFZLEVBQ1osVUFBVSxFQUFFLFdBQVcsRUFDdkIsS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNERBQTRELENBQUM7QUFDNUYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFFM0QsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDL0UsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDckUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sOERBQThELENBQUM7QUFDL0YsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBWWxFLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxzQkFBc0I7SUFvRTNELFlBQW9CLGNBQWlDLEVBQVUsT0FBbUI7UUFDaEYsS0FBSyxFQUFFLENBQUM7UUFEVSxtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFBVSxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBbkR4RSxrQkFBYSxHQUFz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LGdCQUFnQixFQUFFOytDQUNpQztBQUduQjtJQURoQyxnQkFBZ0IsRUFBRTtnREFDb0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZiwgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtEZXN5Q29udGVudENoaWxkfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2hhcmVkL2RlY29yYXRvcnMvZGVzeS1jb250ZW50LWNoaWxkLmRlY29yYXRvclwiO1xuaW1wb3J0IHtUcmVlU3ViQ29tcG9uZW50fSBmcm9tIFwiLi4vdHJlZS1zdWIvdHJlZS1zdWIuY29tcG9uZW50XCI7XG5pbXBvcnQge0lUcmVlSXRlbX0gZnJvbSBcIi4uL2ludGVyZmFjZXMvaXRyZWUtaXRlbVwiO1xuaW1wb3J0IHtIaW50Q29tcG9uZW50fSBmcm9tIFwiLi4vLi4vaGludC9oaW50LmNvbXBvbmVudFwiO1xuaW1wb3J0IHtMYWJlbENvbXBvbmVudH0gZnJvbSBcIi4uLy4uL2xhYmVsL2xhYmVsLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtRdWl0VHJlZUl0ZW1Gb2N1c09wdGlvbnN9IGZyb20gXCIuLi9pbnRlcmZhY2VzL3F1aXQtdHJlZS1pdGVtLWZvY3VzLW9wdGlvbnNcIjtcbmltcG9ydCB7VHJlZUNoZWNrYm94Q29tcG9uZW50fSBmcm9tIFwiLi4vdHJlZS1jaGVja2JveC90cmVlLWNoZWNrYm94LmNvbXBvbmVudFwiO1xuaW1wb3J0IHtBY2Nlc3NpYmlsaXR5Q29tcG9uZW50fSBmcm9tIFwiLi4vLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHNcIjtcbmltcG9ydCB7RGVzeU9uSW5wdXRDaGFuZ2V9IGZyb20gXCIuLi8uLi8uLi8uLi9zaGFyZWQvZGVjb3JhdG9ycy9kZXN5LW9uLWlucHV0LWNoYW5nZS5kZWNvcmF0b3JcIjtcbmltcG9ydCB7U2VhcmNoVXRpbHN9IGZyb20gXCIuLi8uLi8uLi8uLi9zaGFyZWQvdXRpbHMvc2VhcmNoLXV0aWxzXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Rlc3ktdHJlZS1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IElUcmVlSXRlbSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRyZWVJdGVtQ29tcG9uZW50KVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlSXRlbUNvbXBvbmVudCBleHRlbmRzIEFjY2Vzc2liaWxpdHlDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIElUcmVlSXRlbSB7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgX3RyZWVJdGVtS2V5U3VmZml4ID0gMDsgLy8gU3VmaWpvIGVzdMOhdGljbyBwYXJhIGdlbmVyYXIgc2llbXByZSBjbGF2ZXMgZGlzdGludGFzXG4gIEBWaWV3Q2hpbGQoJ2hpZGRlbldyYXBwZXInKSBoaWRkZW5XcmFwcGVyOiBFbGVtZW50UmVmO1xuXG4gIEBEZXN5T25JbnB1dENoYW5nZSgnc2V0RGVmYXVsdElkUmVjdXJzaXZlJylcbiAgQElucHV0KCkgaWQ6IHN0cmluZztcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSB2YWx1ZTogc3RyaW5nO1xuICBASW5wdXQoKSBjbGFzc2VzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFjdGl2ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGhhc0RpdmlkZXJzOiBib29sZWFuO1xuICBASW5wdXQoKSBpc0luZGV0ZXJtaW5hdGU6IGJvb2xlYW47XG5cbiAgQElucHV0KCkgY2hlY2tlZDogYm9vbGVhbjtcbiAgQE91dHB1dCgpIGNoZWNrZWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIGNoZWNrZWRDaGFuZ2VGb3JUcmVlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBJbnB1dCgpIGV4cGFuZGVkOiBib29sZWFuO1xuICBAT3V0cHV0KCkgZXhwYW5kZWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQElucHV0KCkgaW5kZXRlcm1pbmF0ZUNoZWNrZWQ6IGJvb2xlYW47XG4gIEBPdXRwdXQoKSBpbmRldGVybWluYXRlQ2hlY2tlZENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBARGVzeUNvbnRlbnRDaGlsZCh7IG9uU2V0Q2FsbGJhY2tOYW1lOiAnb3ZlcnJpZGVTdWJWYWx1ZXMnfSlcbiAgQENvbnRlbnRDaGlsZHJlbihUcmVlU3ViQ29tcG9uZW50KSBzdWI6IFRyZWVTdWJDb21wb25lbnQ7XG5cbiAgQERlc3lDb250ZW50Q2hpbGQoKVxuICBAQ29udGVudENoaWxkcmVuKEhpbnRDb21wb25lbnQpIGhpbnQ6IEhpbnRDb21wb25lbnQ7XG5cbiAgQERlc3lDb250ZW50Q2hpbGQoKVxuICBAQ29udGVudENoaWxkcmVuKExhYmVsQ29tcG9uZW50KSBsYWJlbDogTGFiZWxDb21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZChUcmVlQ2hlY2tib3hDb21wb25lbnQpIGNoZWNrYm94OiBUcmVlQ2hlY2tib3hDb21wb25lbnQ7XG5cbiAgLypcbiAgICogSWRlbnRpZmljYWRvciBkZWwgd3JhcHBlciBkZWwgY29tcG9uZW50ZS4gU2UgdXRpbGl6YSBwYXJhIHJlY29ycmVyIGVsIMOhcmJvbCBlbiBzZW50aWRvIGludmVyc28geSBxdWUgY2FkYSBpdGVtXG4gICAqIHNlcGEgY3XDoWwgZXMgc3UgaXRlbS/DoXJib2wgcGFkcmUuXG4gICAqIEVzdG8gZXMgbmVjZXNhcmlvIHlhIHF1ZSwgYSBsYSBob3JhIGRlIGNvbnN0cnVpciB1biDDoXJib2wgZGluw6FtaWNvIGNvbiB0ZW1wbGF0ZXMsXG4gICAqIGVsIGRlY29yYWRvciBAQ29udGVudENoaWxkcmVuIG5vIGZ1bmNpb25hIGNvcnJlY3RhbWVudGUgeSBubyBsb3MgZGV0ZWN0YS5cbiAgICogRGVqbyBlbCBlbmxhY2UgZGUgdW4gcHJvYmxlbWEgc2ltaWxhcjogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMjE3NTFcbiAgICovXG4gIEBIb3N0QmluZGluZygnYXR0ci5kZXN5LXRyZWUtaXRlbS1rZXknKVxuICByZWFkb25seSB0cmVlSXRlbUtleTogc3RyaW5nID0gVHJlZUl0ZW1Db21wb25lbnQuZ2VuZXJhdGVTdGF0aWNJdGVtS2V5KCk7XG5cbiAgdHlwZTogJ3JhZGlvJ3wnY2hlY2tib3gnfG51bGx8dW5kZWZpbmVkO1xuICBzdWJMZXZlbDogbnVtYmVyOyAvLyBOaXZlbCBkZW50cm8gZGVsIGFyYm9sLiAwIHNvbiBsb3MgaXRlbXMgYSBuaXZlbCBkZSByYWl6LlxuXG4gIC8vIFByb3BpZWRhZGVzIGRlZmluaWRhcyBwb3IgZWwgY29tcG9uZW50ZSDDoXJib2wgcXVlIGVsIGl0ZW0gcHVlZGUgdXRpbGl6YXIsIHNvYnJlc2NyaWJpciBvIGFtcGxpYXJcbiAgcGFyZW50TmFtZTogc3RyaW5nO1xuICBkZWZhdWx0SWQ7XG4gIGluaGVyaXRlZEV4cGFuZGVkRmlyc3RMZXZlbDogYm9vbGVhbjtcbiAgaW5oZXJpdGVkRGVjb3VwbGVDaGlsZEZyb21QYXJlbnQ6IGJvb2xlYW47XG4gIGluaGVyaXRlZERlc2NyaWJlZEJ5OiBzdHJpbmc7XG4gIGluaGVyaXRlZEhhc0Vycm9yOiBib29sZWFuO1xuICBhbGxQYXJlbnRzRXhwYW5kZWQgPSB0cnVlOyAvLyBUcnVlIHNpIGVsIGVsZW1lbnRvIGVzIHZpc2libGUgc2Vnw7puIGxvcyBlbGVtZW50b3MgZXhwYW5kaWRvc1xuICBpbmhlcml0ZWRNYXRjaGVzU2VhcmNoID0gdHJ1ZTsgLy8gVHJ1ZSBzaSBlbCBlbGVtZW50byBlcyB2aXNpYmxlIHNlZ8O6biBsb3MgY3JpdGVyaW9zIGRlIGLDunNxdWVkYVxuICBvcmRlckluVHJlZTogbnVtYmVyO1xuXG4gIC8vIEV2ZW50byBwYXJhIGVtaXRpciBhbCBjb21wb25lbnRlIGFyYm9sIGN1YW5kbyBzZSBwcmV0ZW5kZSBhYmFuZG9uYXIgZWwgZm9jbyBkZWwgaXRlbVxuICBxdWl0Rm9jdXM6IEV2ZW50RW1pdHRlcjxRdWl0VHJlZUl0ZW1Gb2N1c09wdGlvbnM+ID0gbmV3IEV2ZW50RW1pdHRlcjxRdWl0VHJlZUl0ZW1Gb2N1c09wdGlvbnM+KCk7XG5cbiAgaXNGb2N1cyA9IGZhbHNlO1xuICBpc0hvdmVyID0gZmFsc2U7XG4gIHByaXZhdGUgX21hdGNoZXNWYWxpZFRleHQgPSBmYWxzZTsgLy8gVHJ1ZSBzaSBlbCBjb250ZW5pZG8gZGVsIGl0ZW0gZW5jYWphIGNvbiBsb3MgY3JpdGVyaW9zIGRlIGLDunNxdWVkYSB5IHNlIGVzdMOhIGZpbHRyYW5kb1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN1YiAmJiB0aGlzLnN1Yi5pdGVtTGlzdCkge1xuICAgICAgdGhpcy5zdWIuaXRlbUxpc3QuZm9yRWFjaChpdGVtID0+IChpdGVtIGFzIFRyZWVJdGVtQ29tcG9uZW50KS5yZWZyZXNoQWxsUGFyZW50c0V4cGFuZGVkUmVjdXJzaXZlKHRoaXMuYWxsUGFyZW50c0V4cGFuZGVkICYmIHRoaXMuZXhwYW5kZWQpKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHByb3BOYW1lIGluIGNoYW5nZXMpIHtcbiAgICAgIGlmIChjaGFuZ2VzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBzd2l0Y2ggKHByb3BOYW1lKSB7XG4gICAgICAgICAgY2FzZSAnY2hlY2tlZCc6IHtcbiAgICAgICAgICAgIC8vIFJlYXNpZ25hbW9zIGVsIHZhbG9yIGRlIGNoZWNrZWQgY3VhbmRvIGRldGVjdGFtb3MgZWwgY2FtYmlvIGVuIGxhIGVudHJhZGFcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNldENoZWNrZWQodGhpcy5jaGVja2VkLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgICBpZiAodGhpcy5pbmhlcml0ZWRFeHBhbmRlZEZpcnN0TGV2ZWwgJiYgdGhpcy5jaGVja2VkICYmICF0aGlzLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRTdWIodHJ1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogTcOpdG9kb3MgZXhwdWVzdG9zIHF1ZSBwZXJtaXRlbiBjb25maWd1cmFyIGFsIMOtdGVtIGRlIGZvcm1hIGV4dGVybmFcbiAgICovXG5cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5jaGVja2JveD8uZm9jdXMoKTtcbiAgICB0aGlzLmhhbmRsZUl0ZW1Gb2N1cyh0cnVlKTtcbiAgfVxuXG4gIHNldENoZWNrZWRBdXRvbWF0aWNhbGx5RGVwZW5kaW5nT25DaGlsZHJlbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdWIpIHtcbiAgICAgIHRoaXMuc3ViLml0ZW1MaXN0LmZvckVhY2goaXRlbSA9PiAoaXRlbSBhcyBUcmVlSXRlbUNvbXBvbmVudCkuc2V0Q2hlY2tlZEF1dG9tYXRpY2FsbHlEZXBlbmRpbmdPbkNoaWxkcmVuKCkpO1xuICAgICAgaWYgKHRoaXMuYXJlQWxsQ2hpbGRyZW5DaGVja2VkKCkpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXRlcm1pbmF0ZUNoZWNrZWQpIHtcbiAgICAgICAgICB0aGlzLnNldEluZGV0ZXJtaW5hdGVDaGVja2VkKGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5jaGVja2VkKSB7XG4gICAgICAgICAgdGhpcy5zZXRDaGVja2VkKHRydWUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaGFzQ2hpbGRyZW5DaGVja2VkT3JJbmRldGVybWluYXRlKCkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmluZGV0ZXJtaW5hdGVDaGVja2VkKSB7XG4gICAgICAgICAgdGhpcy5zZXRJbmRldGVybWluYXRlQ2hlY2tlZCh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNoZWNrZWQpIHtcbiAgICAgICAgICB0aGlzLnNldENoZWNrZWQoZmFsc2UsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5pbmRldGVybWluYXRlQ2hlY2tlZCkge1xuICAgICAgICAgIHRoaXMuc2V0SW5kZXRlcm1pbmF0ZUNoZWNrZWQoZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2hlY2tlZCkge1xuICAgICAgICAgIHRoaXMuc2V0Q2hlY2tlZChmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWZyZXNoQWxsUGFyZW50c0V4cGFuZGVkUmVjdXJzaXZlKHZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy5hbGxQYXJlbnRzRXhwYW5kZWQgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy5zdWIpIHtcbiAgICAgIHRoaXMuc3ViLml0ZW1MaXN0LmZvckVhY2goaXRlbSA9PiAoaXRlbSBhcyBUcmVlSXRlbUNvbXBvbmVudCkucmVmcmVzaEFsbFBhcmVudHNFeHBhbmRlZFJlY3Vyc2l2ZSh2YWx1ZSAmJiB0aGlzLmV4cGFuZGVkKSk7XG4gICAgfVxuICB9XG5cbiAgZGV0ZWN0Q2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGV4cGFuZFN1Yih2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZXhwYW5kZWQgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy5zdWIpIHtcbiAgICAgIHRoaXMuc3ViLml0ZW1MaXN0LmZvckVhY2goaXRlbSA9PiAoaXRlbSBhcyBUcmVlSXRlbUNvbXBvbmVudCkucmVmcmVzaEFsbFBhcmVudHNFeHBhbmRlZFJlY3Vyc2l2ZSh0aGlzLmFsbFBhcmVudHNFeHBhbmRlZCAmJiB2YWx1ZSkpO1xuICAgIH1cbiAgICB0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgLypcbiAgICogR2VzdGlvbiBkZSBldmVudG9zXG4gICAqL1xuXG4gIGhhbmRsZUNoZWNrYm94Q2hhbmdlKGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnNldENoZWNrZWQoY2hlY2tlZCwgZmFsc2UpO1xuICAgIGlmICh0aGlzLmluaGVyaXRlZEV4cGFuZGVkRmlyc3RMZXZlbCAmJiBjaGVja2VkICYmICF0aGlzLmV4cGFuZGVkKSB7XG4gICAgICB0aGlzLmV4cGFuZFN1Yih0cnVlKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVJbmRldGVybWluYXRlQ2hlY2tlZENoYW5nZShpbmRldGVybWluYXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pbmRldGVybWluYXRlQ2hlY2tlZENoYW5nZS5lbWl0KGluZGV0ZXJtaW5hdGUpO1xuICB9XG5cbiAgaGFuZGxlSXRlbUZvY3VzKHZhbHVlLCBjb25kaXRpb249dHJ1ZSk6IHZvaWQge1xuICAgIGlmIChjb25kaXRpb24pIHtcbiAgICAgIHRoaXMuaXNGb2N1cyA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUl0ZW1Ib3Zlcih2YWx1ZSwgY29uZGl0aW9uPXRydWUpOiB2b2lkIHtcbiAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICB0aGlzLmlzSG92ZXIgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVBcnJvd1VwKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBjb25kaXRpb249dHJ1ZSk6IHZvaWQge1xuICAgIGlmIChjb25kaXRpb24pIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnF1aXRGb2N1cy5lbWl0KHtcbiAgICAgICAgbmV4dEVsZW1lbnQ6ICdwcmV2aW91cycsXG4gICAgICAgIGN1cnJlbnRJdGVtOiB0aGlzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVIb21lKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBjb25kaXRpb249dHJ1ZSk6IHZvaWQge1xuICAgIGlmIChjb25kaXRpb24pIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnF1aXRGb2N1cy5lbWl0KHtcbiAgICAgICAgbmV4dEVsZW1lbnQ6ICdmaXJzdCcsXG4gICAgICAgIGN1cnJlbnRJdGVtOiB0aGlzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVFbmQoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGNvbmRpdGlvbj10cnVlKTogdm9pZCB7XG4gICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMucXVpdEZvY3VzLmVtaXQoe1xuICAgICAgICBuZXh0RWxlbWVudDogJ2xhc3QnLFxuICAgICAgICBjdXJyZW50SXRlbTogdGhpc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlQXJyb3dEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBjb25kaXRpb249dHJ1ZSk6IHZvaWQge1xuICAgIGlmIChjb25kaXRpb24pIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnF1aXRGb2N1cy5lbWl0KHtcbiAgICAgICAgbmV4dEVsZW1lbnQ6ICduZXh0JyxcbiAgICAgICAgY3VycmVudEl0ZW06IHRoaXNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUFycm93UmlnaHQoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGNvbmRpdGlvbj10cnVlKTogdm9pZCB7XG4gICAgaWYgKGNvbmRpdGlvbiAmJiB0aGlzLnN1YiAmJiB0aGlzLnN1Yi5pdGVtTGlzdD8ubGVuZ3RoID4gMCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmICh0aGlzLmV4cGFuZGVkKSB7XG4gICAgICAgIHRoaXMucXVpdEZvY3VzLmVtaXQoe1xuICAgICAgICAgIG5leHRFbGVtZW50OiAnZmlyc3RDaGlsZCcsXG4gICAgICAgICAgY3VycmVudEl0ZW06IHRoaXNcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmV4cGFuZFN1Yih0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVBcnJvd0xlZnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGNvbmRpdGlvbj10cnVlKTogdm9pZCB7XG4gICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmICh0aGlzLmV4cGFuZGVkKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kU3ViKGZhbHNlKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zdWJMZXZlbCA+IDApIHtcbiAgICAgICAgdGhpcy5xdWl0Rm9jdXMuZW1pdCh7XG4gICAgICAgICAgbmV4dEVsZW1lbnQ6ICdwYXJlbnQnLFxuICAgICAgICAgIGN1cnJlbnRJdGVtOiB0aGlzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgLypcbiAgICogU2V0dGVycyBhbmQgZ2V0dGVyc1xuICAgKi9cblxuICBzZXRDaGVja2VkKGNoZWNrZWQ6IGJvb2xlYW4sIGlnbm9yZUluVHJlZTogYm9vbGVhbiwgZW1pdEV2ZW50ID0gdHJ1ZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5jaGVja2VkID0gY2hlY2tlZDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaW5oZXJpdGVkRGVjb3VwbGVDaGlsZEZyb21QYXJlbnQgJiYgdGhpcy5zdWIgJiYgdGhpcy5zdWIuaXRlbUxpc3QgJiYgIXRoaXMuaW5kZXRlcm1pbmF0ZUNoZWNrZWQpIHtcbiAgICAgIHRoaXMuc3ViLml0ZW1MaXN0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIChpdGVtIGFzIFRyZWVJdGVtQ29tcG9uZW50KS5zZXRJbmRldGVybWluYXRlQ2hlY2tlZChmYWxzZSk7XG4gICAgICAgIChpdGVtIGFzIFRyZWVJdGVtQ29tcG9uZW50KS5zZXRDaGVja2VkKGNoZWNrZWQsIHRydWUpXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoZW1pdEV2ZW50KSB7XG4gICAgICB0aGlzLmNoZWNrZWRDaGFuZ2UuZW1pdChjaGVja2VkKTtcbiAgICB9XG5cbiAgICBpZiAoIWlnbm9yZUluVHJlZSkge1xuICAgICAgdGhpcy5jaGVja2VkQ2hhbmdlRm9yVHJlZS5lbWl0KGNoZWNrZWQpO1xuICAgIH1cbiAgfVxuXG4gIHNldEluZGV0ZXJtaW5hdGVDaGVja2VkKGluZGV0ZXJtaW5hdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZUNoZWNrZWQgPSBpbmRldGVybWluYXRlO1xuICAgICAgdGhpcy5pbmRldGVybWluYXRlQ2hlY2tlZENoYW5nZS5lbWl0KGluZGV0ZXJtaW5hdGUpO1xuICAgIH1cbiAgfVxuXG4gIHNldFN1YkxldmVsKHN1YkxldmVsOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnN1YkxldmVsID0gc3ViTGV2ZWw7XG4gICAgaWYgKHRoaXMuc3ViICYmIHRoaXMuc3ViLml0ZW1MaXN0KSB7XG4gICAgICB0aGlzLnN1Yi5pdGVtTGlzdC5mb3JFYWNoKGl0ZW0gPT4gKGl0ZW0gYXMgVHJlZUl0ZW1Db21wb25lbnQpLnNldFN1YkxldmVsKHN1YkxldmVsICsgMSkpO1xuICAgIH1cbiAgfVxuXG4gIHNldE9yZGVyUmVjdXJzaXZlbHkob3JkZXI6IG51bWJlcik6IG51bWJlciB7XG4gICAgdGhpcy5vcmRlckluVHJlZSA9IG9yZGVyO1xuICAgIGxldCBuZXdPcmRlciA9IG9yZGVyICsgMTtcbiAgICBpZiAodGhpcy5zdWIgJiYgdGhpcy5zdWIuaXRlbUxpc3QpIHtcbiAgICAgIHRoaXMuc3ViLml0ZW1MaXN0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIG5ld09yZGVyID0gKGl0ZW0gYXMgVHJlZUl0ZW1Db21wb25lbnQpLnNldE9yZGVyUmVjdXJzaXZlbHkobmV3T3JkZXIpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdPcmRlcjtcbiAgfVxuXG4gIHNldERlZmF1bHRJZChkZWZhdWx0SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGVmYXVsdElkID0gZGVmYXVsdElkO1xuICAgIHRoaXMuc2V0RGVmYXVsdElkUmVjdXJzaXZlKCk7XG4gIH1cblxuICBzZXREZWZhdWx0SWRSZWN1cnNpdmUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3ViICYmIHRoaXMuc3ViLml0ZW1MaXN0KSB7XG4gICAgICB0aGlzLnN1Yi5pdGVtTGlzdC5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAoaXRlbSBhcyBUcmVlSXRlbUNvbXBvbmVudCkuc2V0RGVmYXVsdElkKGBzdWItJHt0aGlzLmdldElkKCl9LSR7aW5kZXh9YCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkID8gdGhpcy5pZCA6IHRoaXMuZGVmYXVsdElkO1xuICB9XG5cbiAgaXNIaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmluaGVyaXRlZE1hdGNoZXNTZWFyY2ggJiYgKCF0aGlzLnN1YiB8fCB0aGlzLmFyZUFsbENoaWxkcmVuSGlkZGVuKCkpO1xuICB9XG5cbiAgYXJlQWxsQ2hpbGRyZW5IaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLnN1Yi5pdGVtTGlzdDtcbiAgICByZXR1cm4gY2hpbGRyZW4uZmluZEluZGV4KGNoaWxkID0+ICEoY2hpbGQgYXMgVHJlZUl0ZW1Db21wb25lbnQpLmlzSGlkZGVuKCkpIDwgMDtcbiAgfVxuXG4gIGFyZUFsbENoaWxkcmVuQ2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuc3ViLml0ZW1MaXN0O1xuICAgIHJldHVybiBjaGlsZHJlbi5maW5kSW5kZXgoY2hpbGQgPT4gIShjaGlsZCBhcyBUcmVlSXRlbUNvbXBvbmVudCkuY2hlY2tlZCkgPCAwO1xuICB9XG5cbiAgaGFzQ2hpbGRyZW5DaGVja2VkT3JJbmRldGVybWluYXRlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5zdWIuaXRlbUxpc3Q7XG4gICAgcmV0dXJuIGNoaWxkcmVuLmZpbmRJbmRleChjaGlsZCA9PiAoY2hpbGQgYXMgVHJlZUl0ZW1Db21wb25lbnQpLmNoZWNrZWQgfHwgKGNoaWxkIGFzIFRyZWVJdGVtQ29tcG9uZW50KS5pbmRldGVybWluYXRlQ2hlY2tlZCkgPj0gMDtcbiAgfVxuXG4gIG1hdGNoZXNUZXh0KHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBsZXQgbWF0Y2hlczogYm9vbGVhbjtcbiAgICBpZiAodGhpcy5hbGxQYXJlbnRzRXhwYW5kZWQgJiYgIXRoaXMuaXNIaWRkZW4oKSkge1xuICAgICAgbWF0Y2hlcyA9IHRoaXMuY2hlY2tib3g/Lm1hdGNoZXNUZXh0KHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXRlbVRleHQgPSB0aGlzLmhpZGRlbldyYXBwZXIubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudDtcbiAgICAgIG1hdGNoZXMgPSBTZWFyY2hVdGlscy5jb250YWluc0FueVdvcmRGcm9tKGl0ZW1UZXh0LCB2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuX21hdGNoZXNWYWxpZFRleHQgPSB2YWx1ZSA/IG1hdGNoZXMgOiBmYWxzZTtcbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIGdldEtleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRyZWVJdGVtS2V5O1xuICB9XG5cbiAgZ2V0UGFyZW50S2V5KCk6IHN0cmluZyB7XG4gICAgbGV0IHBhcmVudEtleTogc3RyaW5nO1xuICAgIGxldCBwYXJlbnRFbGVtZW50ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICB3aGlsZSAocGFyZW50RWxlbWVudCAmJiBwYXJlbnRFbGVtZW50LnRhZ05hbWUgIT09ICdCT0RZJyAmJiBwYXJlbnRFbGVtZW50LnRhZ05hbWUgIT09ICdERVNZLVRSRUUtSVRFTScgJiYgcGFyZW50RWxlbWVudC50YWdOYW1lICE9PSAnREVTWS1UUkVFJykge1xuICAgICAgcGFyZW50RWxlbWVudCA9IHBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAocGFyZW50RWxlbWVudC50YWdOYW1lID09PSAnQk9EWScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyZW50IGZvciB0cmVlLWl0ZW0gbm90IGZvdW5kJyk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmVudEVsZW1lbnQudGFnTmFtZSA9PT0gJ0RFU1ktVFJFRScpIHtcbiAgICAgIHBhcmVudEtleSA9ICdyb290JztcbiAgICB9XG5cbiAgICBpZiAocGFyZW50RWxlbWVudC50YWdOYW1lID09PSAnREVTWS1UUkVFLUlURU0nKSB7XG4gICAgICBwYXJlbnRLZXkgPSBwYXJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGVzeS10cmVlLWl0ZW0ta2V5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudEtleTtcbiAgfVxuXG4gIGlzQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZSB8fCB0aGlzLl9tYXRjaGVzVmFsaWRUZXh0O1xuICB9XG5cbiAgLypcbiAgICogTcOpdG9kb3MgcHJpdmFkb3NcbiAgICovXG5cbiAgLyoqXG4gICAqIEdlbmVyYSB1bmEgY2xhdmUgw7puaWNhIHBhcmEgZWwgY29tcG9uZW50ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2VuZXJhdGVTdGF0aWNJdGVtS2V5KCk6IHN0cmluZyB7XG4gICAgY29uc3Qga2V5ID0gJ3RyZWUtaXRlbS1rZXktJyArIFRyZWVJdGVtQ29tcG9uZW50Ll90cmVlSXRlbUtleVN1ZmZpeDtcbiAgICBUcmVlSXRlbUNvbXBvbmVudC5fdHJlZUl0ZW1LZXlTdWZmaXgrKztcbiAgICByZXR1cm4ga2V5O1xuICB9XG59XG4iXX0=