desy-angular 7.0.1 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/esm2020/lib/desy-angular.module.mjs +4 -4
  2. package/esm2020/lib/desy-buttons/components/button/button.component.mjs +5 -5
  3. package/esm2020/lib/desy-buttons/components/button-loader/button-loader.component.mjs +3 -3
  4. package/esm2020/lib/desy-buttons/components/dropdown/dropdown.component.mjs +6 -7
  5. package/esm2020/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.mjs +11 -4
  6. package/esm2020/lib/desy-buttons/components/listbox/listbox-label/listbox-label.component.mjs +3 -3
  7. package/esm2020/lib/desy-buttons/components/listbox/listbox.component.mjs +142 -94
  8. package/esm2020/lib/desy-buttons/components/pill/pill.component.mjs +3 -3
  9. package/esm2020/lib/desy-buttons/components/toggle/toggle-off-state/toggle-off-state.component.mjs +3 -3
  10. package/esm2020/lib/desy-buttons/components/toggle/toggle-on-state/toggle-on-state.component.mjs +3 -3
  11. package/esm2020/lib/desy-buttons/components/toggle/toggle.component.mjs +3 -3
  12. package/esm2020/lib/desy-buttons/desy-buttons.module.mjs +4 -4
  13. package/esm2020/lib/desy-commons/components/content/content.component.mjs +3 -3
  14. package/esm2020/lib/desy-commons/components/description/description.component.mjs +3 -3
  15. package/esm2020/lib/desy-commons/components/divider/divider.component.mjs +3 -3
  16. package/esm2020/lib/desy-commons/components/icon/icon.component.mjs +3 -3
  17. package/esm2020/lib/desy-commons/components/title/title.component.mjs +3 -3
  18. package/esm2020/lib/desy-commons/desy-commons.module.mjs +4 -4
  19. package/esm2020/lib/desy-forms/components/character-count/character-count.component.mjs +3 -3
  20. package/esm2020/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.mjs +25 -43
  21. package/esm2020/lib/desy-forms/components/checkboxes/checkboxes-parent.component.mjs +23 -0
  22. package/esm2020/lib/desy-forms/components/checkboxes/checkboxes.component.mjs +98 -67
  23. package/esm2020/lib/desy-forms/components/date-input/date-input-day/date-input-day.component.mjs +6 -4
  24. package/esm2020/lib/desy-forms/components/date-input/date-input-divider/date-input-divider.component.mjs +3 -3
  25. package/esm2020/lib/desy-forms/components/date-input/date-input-item/date-input-item.component.mjs +3 -3
  26. package/esm2020/lib/desy-forms/components/date-input/date-input-month/date-input-month.component.mjs +6 -4
  27. package/esm2020/lib/desy-forms/components/date-input/date-input-year/date-input-year.component.mjs +6 -4
  28. package/esm2020/lib/desy-forms/components/date-input/date-input.component.mjs +29 -6
  29. package/esm2020/lib/desy-forms/components/error-message/error-message.component.mjs +3 -3
  30. package/esm2020/lib/desy-forms/components/fieldset/fieldset.component.mjs +3 -3
  31. package/esm2020/lib/desy-forms/components/fieldset/legend/legend.component.mjs +3 -3
  32. package/esm2020/lib/desy-forms/components/file-upload/file-upload.component.mjs +3 -3
  33. package/esm2020/lib/desy-forms/components/form-field/form-field.component.mjs +4 -4
  34. package/esm2020/lib/desy-forms/components/hint/hint.component.mjs +3 -3
  35. package/esm2020/lib/desy-forms/components/input/input.component.mjs +6 -6
  36. package/esm2020/lib/desy-forms/components/input-group/input-group-divider/input-group-divider.component.mjs +3 -3
  37. package/esm2020/lib/desy-forms/components/input-group/input-group-input/input-group-input.component.mjs +10 -5
  38. package/esm2020/lib/desy-forms/components/input-group/input-group-item/input-group-item.component.mjs +3 -3
  39. package/esm2020/lib/desy-forms/components/input-group/input-group-select/input-group-select.component.mjs +10 -5
  40. package/esm2020/lib/desy-forms/components/input-group/input-group.component.mjs +12 -6
  41. package/esm2020/lib/desy-forms/components/label/label.component.mjs +3 -3
  42. package/esm2020/lib/desy-forms/components/radios/radio-item/radio-item.component.mjs +22 -34
  43. package/esm2020/lib/desy-forms/components/radios/radios-parent.component.mjs +23 -0
  44. package/esm2020/lib/desy-forms/components/radios/radios.component.mjs +109 -71
  45. package/esm2020/lib/desy-forms/components/search-bar/search-bar.component.mjs +7 -13
  46. package/esm2020/lib/desy-forms/components/select/option/option.component.mjs +4 -4
  47. package/esm2020/lib/desy-forms/components/select/option-group/option-group.component.mjs +3 -3
  48. package/esm2020/lib/desy-forms/components/select/select-item/select-item.component.mjs +3 -3
  49. package/esm2020/lib/desy-forms/components/select/select.component.mjs +7 -7
  50. package/esm2020/lib/desy-forms/components/template-driven-wrapper/template-driven-wrapper.component.mjs +3 -3
  51. package/esm2020/lib/desy-forms/components/textarea/textarea.component.mjs +3 -3
  52. package/esm2020/lib/desy-forms/components/tree/tree-checkbox/tree-checkbox.component.mjs +3 -3
  53. package/esm2020/lib/desy-forms/components/tree/tree-item/tree-item.component.mjs +7 -6
  54. package/esm2020/lib/desy-forms/components/tree/tree-items-generator/tree-items-generator.component.mjs +3 -3
  55. package/esm2020/lib/desy-forms/components/tree/tree-sub/tree-sub.component.mjs +3 -3
  56. package/esm2020/lib/desy-forms/components/tree/tree.component.mjs +12 -4
  57. package/esm2020/lib/desy-forms/desy-forms.module.mjs +6 -6
  58. package/esm2020/lib/desy-forms/directives/condition.directive.mjs +3 -3
  59. package/esm2020/lib/desy-forms/interfaces/item-date-input-data.mjs +1 -1
  60. package/esm2020/lib/desy-forms/interfaces/select-item-data.mjs +1 -1
  61. package/esm2020/lib/desy-modals/components/dialog/dialog.component.mjs +24 -4
  62. package/esm2020/lib/desy-modals/components/modal/modal-button-loader-primary/modal-button-loader-primary.component.mjs +3 -3
  63. package/esm2020/lib/desy-modals/components/modal/modal-button-loader-secondary/modal-button-loader-secondary.component.mjs +3 -3
  64. package/esm2020/lib/desy-modals/components/modal/modal-button-primary/modal-button-primary.component.mjs +3 -3
  65. package/esm2020/lib/desy-modals/components/modal/modal-button-secondary/modal-button-secondary.component.mjs +3 -3
  66. package/esm2020/lib/desy-modals/components/modal/modal.component.mjs +3 -3
  67. package/esm2020/lib/desy-modals/desy-modals.module.mjs +4 -4
  68. package/esm2020/lib/desy-modals/interfaces/dialog-options.mjs +1 -1
  69. package/esm2020/lib/desy-modals/services/dialog.service.mjs +3 -3
  70. package/esm2020/lib/desy-nav/components/breadcrumbs/breadcrumbs-item/breadcrumbs-item.component.mjs +3 -3
  71. package/esm2020/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.mjs +3 -3
  72. package/esm2020/lib/desy-nav/components/error-summary/error-summary-item/error-summary-item.component.mjs +3 -3
  73. package/esm2020/lib/desy-nav/components/error-summary/error-summary.component.mjs +3 -3
  74. package/esm2020/lib/desy-nav/components/footer/footer-meta/footer-meta-item/footer-meta-item.component.mjs +3 -3
  75. package/esm2020/lib/desy-nav/components/footer/footer-meta/footer-meta.component.mjs +3 -3
  76. package/esm2020/lib/desy-nav/components/footer/footer-navigation/footer-navigation-item/footer-navigation-item.component.mjs +3 -3
  77. package/esm2020/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.mjs +3 -3
  78. package/esm2020/lib/desy-nav/components/footer/footer.component.mjs +3 -3
  79. package/esm2020/lib/desy-nav/components/header/header-custom-navigation/header-custom-navigation.component.mjs +3 -3
  80. package/esm2020/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.mjs +5 -5
  81. package/esm2020/lib/desy-nav/components/header/header-navigation/header-navigation-item/header-navigation-item.component.mjs +3 -3
  82. package/esm2020/lib/desy-nav/components/header/header-navigation/header-navigation.component.mjs +3 -3
  83. package/esm2020/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.mjs +3 -3
  84. package/esm2020/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component.mjs +3 -3
  85. package/esm2020/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.mjs +3 -3
  86. package/esm2020/lib/desy-nav/components/header/header-subnav/header-subnav.component.mjs +3 -3
  87. package/esm2020/lib/desy-nav/components/header/header.component.mjs +8 -10
  88. package/esm2020/lib/desy-nav/components/links-list/links-list-item/links-list-item.component.mjs +40 -0
  89. package/esm2020/lib/desy-nav/components/links-list/links-list-item-sub/links-list-item-sub.component.mjs +14 -0
  90. package/esm2020/lib/desy-nav/components/links-list/links-list.component.mjs +42 -0
  91. package/esm2020/lib/desy-nav/components/menu-horizontal/menu-horizontal-item/menu-horizontal-item.component.mjs +3 -3
  92. package/esm2020/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.mjs +3 -3
  93. package/esm2020/lib/desy-nav/components/menu-navigation/components/menu-navigation-item/menu-navigation-item.component.mjs +3 -3
  94. package/esm2020/lib/desy-nav/components/menu-navigation/components/menu-navigation-subitem/menu-navigation-subitem.component.mjs +3 -3
  95. package/esm2020/lib/desy-nav/components/menu-navigation/menu-navigation.component.mjs +3 -3
  96. package/esm2020/lib/desy-nav/components/menu-vertical/menu-vertical-item/menu-vertical-item.component.mjs +3 -3
  97. package/esm2020/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub/menu-vertical-item-sub.component.mjs +3 -3
  98. package/esm2020/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component.mjs +3 -3
  99. package/esm2020/lib/desy-nav/components/menu-vertical/menu-vertical.component.mjs +3 -3
  100. package/esm2020/lib/desy-nav/components/menubar/components/menubar-item/menubar-item.component.mjs +3 -3
  101. package/esm2020/lib/desy-nav/components/menubar/components/menubar-label/menubar-label.component.mjs +3 -3
  102. package/esm2020/lib/desy-nav/components/menubar/components/menubar-subitem/menubar-subitem.component.mjs +3 -3
  103. package/esm2020/lib/desy-nav/components/menubar/components/menubar-subsubitem/menubar-subsubitem.component.mjs +3 -3
  104. package/esm2020/lib/desy-nav/components/menubar/directives/menubaritem.directive.mjs +3 -3
  105. package/esm2020/lib/desy-nav/components/menubar/menubar.component.mjs +3 -3
  106. package/esm2020/lib/desy-nav/components/nav/nav-item/nav-item.component.mjs +3 -3
  107. package/esm2020/lib/desy-nav/components/nav/nav.component.mjs +3 -3
  108. package/esm2020/lib/desy-nav/components/notification/notification-item/notification-item.component.mjs +3 -3
  109. package/esm2020/lib/desy-nav/components/notification/notification.component.mjs +3 -3
  110. package/esm2020/lib/desy-nav/components/skip-link/skip-link.component.mjs +11 -5
  111. package/esm2020/lib/desy-nav/desy-nav.module.mjs +25 -6
  112. package/esm2020/lib/desy-nav/interfaces/header-skiplink-data.mjs +2 -0
  113. package/esm2020/lib/desy-pagination/components/pagination/pagination.component.mjs +53 -30
  114. package/esm2020/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.mjs +3 -3
  115. package/esm2020/lib/desy-pagination/components/pagination-listbox-label/pagination-listbox-label.component.mjs +3 -3
  116. package/esm2020/lib/desy-pagination/desy-pagination.module.mjs +4 -4
  117. package/esm2020/lib/desy-tables/components/table/components/table-caption.component.mjs +3 -3
  118. package/esm2020/lib/desy-tables/components/table/components/table-cell.component.mjs +3 -3
  119. package/esm2020/lib/desy-tables/components/table/components/table-header.component.mjs +3 -3
  120. package/esm2020/lib/desy-tables/components/table/components/table-row.component.mjs +3 -3
  121. package/esm2020/lib/desy-tables/components/table/table.component.mjs +3 -3
  122. package/esm2020/lib/desy-tables/components/table-advanced/components/table-advanced-header-cell.component.mjs +3 -3
  123. package/esm2020/lib/desy-tables/components/table-advanced/components/table-advanced-header.component.mjs +3 -3
  124. package/esm2020/lib/desy-tables/components/table-advanced/components/table-advanced-row-cell.component.mjs +3 -3
  125. package/esm2020/lib/desy-tables/components/table-advanced/components/table-advanced-row.component.mjs +3 -3
  126. package/esm2020/lib/desy-tables/components/table-advanced/components/table-advanced-select.component.mjs +3 -3
  127. package/esm2020/lib/desy-tables/components/table-advanced/table-advanced.component.mjs +3 -3
  128. package/esm2020/lib/desy-tables/desy-tables.module.mjs +4 -4
  129. package/esm2020/lib/desy-tables/directives/cell.directive.mjs +3 -3
  130. package/esm2020/lib/desy-tables/directives/focus-clicked-cell.directive.mjs +3 -3
  131. package/esm2020/lib/desy-tables/directives/row.directive.mjs +3 -3
  132. package/esm2020/lib/desy-views/components/accordion/accordion-header/accordion-header.component.mjs +3 -3
  133. package/esm2020/lib/desy-views/components/accordion/accordion-item/accordion-item.component.mjs +3 -3
  134. package/esm2020/lib/desy-views/components/accordion/accordion.component.mjs +3 -3
  135. package/esm2020/lib/desy-views/components/accordion-history/accordion-history-item/accordion-history-item.component.mjs +3 -3
  136. package/esm2020/lib/desy-views/components/accordion-history/accordion-history.component.mjs +3 -3
  137. package/esm2020/lib/desy-views/components/accordion-history/accordion-item-hide-button/accordion-item-hide-button.component.mjs +3 -3
  138. package/esm2020/lib/desy-views/components/accordion-history/accordion-item-show-button/accordion-item-show-button.component.mjs +3 -3
  139. package/esm2020/lib/desy-views/components/alert/alert.component.mjs +3 -3
  140. package/esm2020/lib/desy-views/components/collapsible/collapsible.component.mjs +3 -3
  141. package/esm2020/lib/desy-views/components/description-list/definition/definition.component.mjs +3 -3
  142. package/esm2020/lib/desy-views/components/description-list/description-item/description-item.component.mjs +3 -3
  143. package/esm2020/lib/desy-views/components/description-list/description-list.component.mjs +3 -3
  144. package/esm2020/lib/desy-views/components/description-list/term/term.component.mjs +3 -3
  145. package/esm2020/lib/desy-views/components/details/details.component.mjs +3 -3
  146. package/esm2020/lib/desy-views/components/item/item-content-bottom/item-content-bottom.component.mjs +3 -3
  147. package/esm2020/lib/desy-views/components/item/item-content-right/item-content-right.component.mjs +3 -3
  148. package/esm2020/lib/desy-views/components/item/item-item/item-item.component.mjs +3 -3
  149. package/esm2020/lib/desy-views/components/item/item.component.mjs +11 -16
  150. package/esm2020/lib/desy-views/components/media-object/media-object-figure/media-object-figure.component.mjs +3 -3
  151. package/esm2020/lib/desy-views/components/media-object/media-object.component.mjs +3 -3
  152. package/esm2020/lib/desy-views/components/spinner/spinner.component.mjs +3 -3
  153. package/esm2020/lib/desy-views/components/status/status.component.mjs +14 -5
  154. package/esm2020/lib/desy-views/components/status-item/status-item.component.mjs +3 -3
  155. package/esm2020/lib/desy-views/components/tabs/panel/panel.component.mjs +3 -3
  156. package/esm2020/lib/desy-views/components/tabs/tab-item/tab-item.component.mjs +3 -3
  157. package/esm2020/lib/desy-views/components/tabs/tabs.component.mjs +3 -3
  158. package/esm2020/lib/desy-views/components/tooltip/tooltip-content/tooltip-content.component.mjs +3 -3
  159. package/esm2020/lib/desy-views/components/tooltip/tooltip.component.mjs +3 -3
  160. package/esm2020/lib/desy-views/desy-views.module.mjs +4 -4
  161. package/esm2020/lib/desy-views/services/alert.service.mjs +3 -3
  162. package/esm2020/lib/shared/components/accessibility/accessibility.component.mjs +3 -3
  163. package/esm2020/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.mjs +3 -3
  164. package/esm2020/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.mjs +3 -3
  165. package/esm2020/lib/shared/components/content-base/content-base.component.mjs +3 -3
  166. package/esm2020/lib/shared/components/text-or-html-required/text-or-html-required.component.mjs +3 -3
  167. package/esm2020/lib/shared/directives/attribute-change.directive.mjs +24 -19
  168. package/esm2020/lib/shared/directives/click-outside.directive.mjs +3 -3
  169. package/esm2020/lib/shared/directives/content-change.directive.mjs +3 -3
  170. package/esm2020/lib/shared/directives/custom-inner-content.directive.mjs +3 -3
  171. package/esm2020/lib/shared/directives/inner-content.directive.mjs +3 -3
  172. package/esm2020/lib/shared/pipes/external-href.pipe.mjs +5 -5
  173. package/esm2020/lib/shared/pipes/inner-html.pipe.mjs +3 -3
  174. package/esm2020/lib/shared/pipes/make-html-list.pipe.mjs +3 -3
  175. package/esm2020/lib/shared/shared.module.mjs +4 -4
  176. package/esm2020/public-api.mjs +5 -1
  177. package/fesm2015/desy-angular.mjs +1205 -1002
  178. package/fesm2015/desy-angular.mjs.map +1 -1
  179. package/fesm2020/desy-angular.mjs +1205 -1000
  180. package/fesm2020/desy-angular.mjs.map +1 -1
  181. package/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.d.ts +3 -1
  182. package/lib/desy-buttons/components/listbox/listbox.component.d.ts +15 -4
  183. package/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.d.ts +5 -3
  184. package/lib/desy-forms/components/checkboxes/checkboxes-parent.component.d.ts +21 -0
  185. package/lib/desy-forms/components/checkboxes/checkboxes.component.d.ts +19 -11
  186. package/lib/desy-forms/components/date-input/date-input-day/date-input-day.component.d.ts +2 -1
  187. package/lib/desy-forms/components/date-input/date-input-month/date-input-month.component.d.ts +2 -1
  188. package/lib/desy-forms/components/date-input/date-input-year/date-input-year.component.d.ts +2 -1
  189. package/lib/desy-forms/components/date-input/date-input.component.d.ts +5 -1
  190. package/lib/desy-forms/components/form-field/form-field.component.d.ts +9 -9
  191. package/lib/desy-forms/components/input-group/input-group-input/input-group-input.component.d.ts +1 -0
  192. package/lib/desy-forms/components/input-group/input-group-select/input-group-select.component.d.ts +1 -0
  193. package/lib/desy-forms/components/input-group/input-group.component.d.ts +2 -0
  194. package/lib/desy-forms/components/radios/radio-item/radio-item.component.d.ts +5 -4
  195. package/lib/desy-forms/components/radios/radios-parent.component.d.ts +21 -0
  196. package/lib/desy-forms/components/radios/radios.component.d.ts +19 -10
  197. package/lib/desy-forms/components/search-bar/search-bar.component.d.ts +2 -4
  198. package/lib/desy-forms/components/select/option/option.component.d.ts +1 -1
  199. package/lib/desy-forms/components/tree/tree-item/tree-item.component.d.ts +1 -0
  200. package/lib/desy-forms/components/tree/tree.component.d.ts +4 -0
  201. package/lib/desy-forms/interfaces/item-date-input-data.d.ts +1 -0
  202. package/lib/desy-forms/interfaces/select-item-data.d.ts +1 -1
  203. package/lib/desy-modals/components/dialog/dialog.component.d.ts +2 -1
  204. package/lib/desy-modals/interfaces/dialog-options.d.ts +1 -0
  205. package/lib/desy-nav/components/header/header.component.d.ts +3 -2
  206. package/lib/desy-nav/components/links-list/links-list-item/links-list-item.component.d.ts +20 -0
  207. package/lib/desy-nav/components/links-list/links-list-item-sub/links-list-item-sub.component.d.ts +7 -0
  208. package/lib/desy-nav/components/links-list/links-list.component.d.ts +13 -0
  209. package/lib/desy-nav/components/skip-link/skip-link.component.d.ts +1 -0
  210. package/lib/desy-nav/desy-nav.module.d.ts +29 -26
  211. package/lib/desy-nav/interfaces/header-skiplink-data.d.ts +7 -0
  212. package/lib/desy-pagination/components/pagination/pagination.component.d.ts +12 -7
  213. package/lib/desy-views/components/item/item.component.d.ts +1 -0
  214. package/lib/desy-views/components/status/status.component.d.ts +3 -1
  215. package/lib/shared/directives/attribute-change.directive.d.ts +2 -1
  216. package/package.json +1 -1
  217. package/public-api.d.ts +4 -0
  218. package/esm2020/lib/desy-forms/models/checkbox-service-item.component.mjs +0 -9
  219. package/esm2020/lib/desy-forms/models/radio-service-item.component.mjs +0 -9
  220. package/esm2020/lib/desy-forms/services/checkbox.service.mjs +0 -61
  221. package/esm2020/lib/desy-forms/services/radio.service.mjs +0 -53
  222. package/lib/desy-forms/models/checkbox-service-item.component.d.ts +0 -13
  223. package/lib/desy-forms/models/radio-service-item.component.d.ts +0 -12
  224. package/lib/desy-forms/services/checkbox.service.d.ts +0 -14
  225. package/lib/desy-forms/services/radio.service.d.ts +0 -13
@@ -7,113 +7,91 @@ import { ListboxItemComponent } from './listbox-item/listbox-item.component';
7
7
  import { DesyContentChild } from '../../../shared/decorators/desy-content-child.decorator';
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "@angular/common";
10
- import * as i2 from "../../../shared/directives/custom-inner-content.directive";
11
- import * as i3 from "ngx-tippy-wrapper";
12
- import * as i4 from "../../../shared/pipes/make-html-list.pipe";
10
+ import * as i2 from "../../../shared/directives/attribute-change.directive";
11
+ import * as i3 from "../../../shared/directives/custom-inner-content.directive";
12
+ import * as i4 from "ngx-tippy-wrapper";
13
+ import * as i5 from "../../../shared/pipes/make-html-list.pipe";
13
14
  export class ListboxComponent extends AccessibilityAndTextOrHtmlRequiredComponent {
14
- constructor() {
15
- super(...arguments);
15
+ constructor(changeDetectorRef) {
16
+ super();
17
+ this.changeDetectorRef = changeDetectorRef;
16
18
  this.itemsChange = new EventEmitter();
17
19
  this.activeItemChange = new EventEmitter();
18
20
  this.isListVisible = false; // Indica si la lista se está mostrando
21
+ this.contentInit = false; // Se ha iniciado el contenido
22
+ this.pendingCheckActiveItemsAfterViewInit = false;
23
+ this.pendingFocusOnList = false;
19
24
  }
20
25
  ngOnInit() {
21
- const listboxButtonElement = this.listboxButton.nativeElement;
22
26
  if (this.listboxContent && this.listboxContent.nativeElement) {
23
- const contentTooltip = this.listboxContent.nativeElement;
24
- this.tippyProperties = {
25
- placement: 'bottom-start',
26
- inlinePositioning: true,
27
- content: contentTooltip,
28
- allowHTML: true,
29
- trigger: 'click',
30
- hideOnClick: true,
31
- interactive: true,
32
- arrow: false,
33
- offset: [0, -10],
34
- theme: '',
35
- plugins: [
36
- {
37
- name: 'hideOnPopperBlur',
38
- defaultValue: true,
39
- fn(instance) {
40
- return {
41
- onCreate() {
42
- instance.popper.addEventListener('focusout', (event) => {
43
- if (instance.props.hideOnPopperBlur &&
44
- event.relatedTarget &&
45
- !instance.popper.contains(event.relatedTarget)) {
46
- instance.hide();
47
- }
48
- });
49
- },
50
- };
51
- }
52
- }, {
53
- name: 'hideOnEsc',
54
- defaultValue: true,
55
- fn({ hide }) {
56
- function onKeyDown(event) {
57
- if (event.key === ListboxComponent.KEY_CODE_ESC) {
58
- hide();
59
- listboxButtonElement.focus();
60
- }
61
- }
62
- return {
63
- onShow() {
64
- document.addEventListener('keydown', onKeyDown);
65
- },
66
- onHide() {
67
- document.removeEventListener('keydown', onKeyDown);
68
- },
69
- };
70
- },
71
- }
72
- ],
73
- role: false,
74
- aria: {
75
- content: 'auto',
76
- },
77
- onShow: this.onListShow.bind(this),
78
- onHidden: this.onListClose.bind(this)
79
- };
27
+ this.initTippy();
80
28
  }
81
29
  }
82
30
  ngOnChanges() {
83
- setTimeout(() => {
84
- if (this.itemComponentList && this.itemComponentList.length > 0) {
85
- if (this.itemComponentSubscriptions) {
86
- this.itemComponentSubscriptions.forEach(s => s.unsubscribe());
87
- }
88
- this.itemComponentSubscriptions = [];
89
- this.itemList = [];
90
- this.itemComponentList.forEach(item => {
91
- const subscription = item.itemChange.subscribe(() => this.checkActiveItems());
92
- this.itemComponentSubscriptions.push(subscription);
93
- this.itemList.push(item);
94
- });
31
+ if (this.items && this.items.length > 0) {
32
+ this.itemList = this.items;
33
+ if (this.contentInit) {
34
+ this.checkActiveItems();
95
35
  }
96
36
  else {
97
- this.itemList = this.items;
37
+ this.pendingCheckActiveItemsAfterViewInit = true;
98
38
  }
39
+ }
40
+ }
41
+ ngAfterViewInit() {
42
+ if (this.pendingCheckActiveItemsAfterViewInit) {
99
43
  this.checkActiveItems();
100
- });
44
+ this.pendingCheckActiveItemsAfterViewInit = false;
45
+ this.changeDetectorRef.detectChanges();
46
+ }
47
+ }
48
+ ngAfterContentInit() {
49
+ this.contentInit = true;
50
+ if (this.itemComponentList && (!this.items || this.items.length === 0)) {
51
+ this.setupItemComponentList();
52
+ this.itemComponentList.changes.subscribe(() => {
53
+ this.setupItemComponentList();
54
+ });
55
+ }
101
56
  }
102
- ngDoCheck() {
103
- if (!this.items || !this.itemList) {
104
- return;
57
+ ngAfterViewChecked() {
58
+ if (this.pendingFocusOnList) {
59
+ this.pendingFocusOnList = false;
60
+ this.listboxList.nativeElement.focus();
61
+ this.changeDetectorRef.detectChanges();
105
62
  }
63
+ }
64
+ setupItemComponentList() {
65
+ if (this.itemComponentSubscriptions) {
66
+ this.itemComponentSubscriptions.forEach(s => s.unsubscribe());
67
+ }
68
+ this.itemComponentSubscriptions = [];
69
+ this.itemList = [];
70
+ this.itemComponentList.forEach(item => {
71
+ this.itemList.push(item);
72
+ });
73
+ this.itemComponentList.forEach(item => {
74
+ const subscription = item.itemChange.subscribe(() => this.checkActiveItems());
75
+ this.itemComponentSubscriptions.push(subscription);
76
+ });
77
+ this.changeDetectorRef.detectChanges();
106
78
  this.checkActiveItems();
79
+ this.changeDetectorRef.detectChanges();
107
80
  }
108
81
  getActiveItemsData() {
109
82
  return this.itemList
110
83
  .map((item, index) => item.active ? { item, index } : null)
111
84
  .filter(item => item !== null);
112
85
  }
86
+ onChangeItemChecked() {
87
+ this.checkActiveItems();
88
+ this.changeDetectorRef.detectChanges();
89
+ }
113
90
  checkActiveItems() {
114
91
  let activeItems = this.itemList
115
92
  .map((item, index) => item.active ? { item, index } : null)
116
93
  .filter(item => item !== null);
94
+ // se comprueba si algún item ha cambiado su estado de active
117
95
  let hasActiveItemChange = false;
118
96
  if (this.lastActiveItems && activeItems.length === this.lastActiveItems.length) {
119
97
  for (let i = 0; i < activeItems.length; i++) {
@@ -129,11 +107,11 @@ export class ListboxComponent extends AccessibilityAndTextOrHtmlRequiredComponen
129
107
  // Si hay cambios externos y es selección única, anulamos la selección anterior
130
108
  if (this.lastActiveItems && !this.isMultiselectable && hasActiveItemChange) {
131
109
  if (activeItems.length !== this.lastActiveItems.length) {
132
- for (const newItem of activeItems) {
133
- if (this.lastActiveItems.findIndex(i => i.index === newItem.index) >= 0) {
134
- newItem.item.active = false;
110
+ for (const activeItem of activeItems) {
111
+ if (this.lastActiveItems.findIndex(i => i.index === activeItem.index) >= 0) {
112
+ this.setItemActiveValue(activeItem.index, false);
135
113
  }
136
- activeItems = activeItems.filter(item => item.item.active);
114
+ activeItems = activeItems.filter(activeItem => activeItem.item.active);
137
115
  }
138
116
  }
139
117
  }
@@ -157,7 +135,8 @@ export class ListboxComponent extends AccessibilityAndTextOrHtmlRequiredComponen
157
135
  onListShow() {
158
136
  this.isListVisible = true;
159
137
  if (this.listboxList) {
160
- setTimeout(() => this.listboxList.nativeElement.focus());
138
+ this.pendingFocusOnList = true;
139
+ //setTimeout(() => this.listboxList.nativeElement.focus());
161
140
  }
162
141
  }
163
142
  onListClose() {
@@ -201,15 +180,24 @@ export class ListboxComponent extends AccessibilityAndTextOrHtmlRequiredComponen
201
180
  }
202
181
  selectItem(index) {
203
182
  if (!this.isMultiselectable) {
204
- this.itemList.forEach(item => item.active = false);
205
- this.itemList[index].active = true;
183
+ this.itemList.forEach(item => this.setItemActiveValue(index, false));
184
+ this.setItemActiveValue(index, true);
206
185
  }
207
186
  else {
208
- this.itemList[index].active = !this.itemList[index].active;
187
+ this.setItemActiveValue(index, !this.itemList[index].active);
209
188
  }
210
189
  this.currentFocusIndex = index;
211
190
  this.checkActiveItems();
212
191
  }
192
+ setItemActiveValue(index, active) {
193
+ if (this.itemComponentList !== null && this.itemComponentList.length > 0) {
194
+ const deactivatedItem = this.itemComponentList.get(index);
195
+ deactivatedItem?.setActive(active);
196
+ }
197
+ else {
198
+ this.itemList[index].active = active;
199
+ }
200
+ }
213
201
  /*
214
202
  * Métodos para facilitar contenido al template
215
203
  */
@@ -235,17 +223,77 @@ export class ListboxComponent extends AccessibilityAndTextOrHtmlRequiredComponen
235
223
  getLabelContent(label) {
236
224
  return label.html ? label.html : `<p>${StringUtils.escapeHtml(label.text)}</p>`;
237
225
  }
226
+ initTippy() {
227
+ const contentTooltip = this.listboxContent.nativeElement;
228
+ const listboxButtonElement = this.listboxButton.nativeElement;
229
+ this.tippyProperties = {
230
+ placement: 'bottom-start',
231
+ inlinePositioning: true,
232
+ content: contentTooltip,
233
+ allowHTML: true,
234
+ trigger: 'click',
235
+ hideOnClick: true,
236
+ interactive: true,
237
+ arrow: false,
238
+ offset: [0, -10],
239
+ theme: '',
240
+ plugins: [
241
+ {
242
+ name: 'hideOnPopperBlur',
243
+ defaultValue: true,
244
+ fn(instance) {
245
+ return {
246
+ onCreate() {
247
+ instance.popper.addEventListener('focusout', (event) => {
248
+ if (instance.props.hideOnPopperBlur &&
249
+ event.relatedTarget &&
250
+ !instance.popper.contains(event.relatedTarget)) {
251
+ instance.hide();
252
+ }
253
+ });
254
+ },
255
+ };
256
+ }
257
+ }, {
258
+ name: 'hideOnEsc',
259
+ defaultValue: true,
260
+ fn({ hide }) {
261
+ function onKeyDown(event) {
262
+ if (event.key === ListboxComponent.KEY_CODE_ESC) {
263
+ hide();
264
+ listboxButtonElement.focus();
265
+ }
266
+ }
267
+ return {
268
+ onShow() {
269
+ document.addEventListener('keydown', onKeyDown);
270
+ },
271
+ onHide() {
272
+ document.removeEventListener('keydown', onKeyDown);
273
+ },
274
+ };
275
+ },
276
+ }
277
+ ],
278
+ role: false,
279
+ aria: {
280
+ content: 'auto',
281
+ },
282
+ onShow: this.onListShow.bind(this),
283
+ onHidden: this.onListClose.bind(this)
284
+ };
285
+ }
238
286
  }
239
287
  ListboxComponent.KEY_CODE_ESC = 'Escape';
240
- ListboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ListboxComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
241
- ListboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: ListboxComponent, selector: "desy-listbox", inputs: { id: "id", isMultiselectable: "isMultiselectable", doesChangeButtonText: "doesChangeButtonText", label: "label", classes: "classes", classesContainer: "classesContainer", classesTooltip: "classesTooltip", idPrefix: "idPrefix", disabled: "disabled", items: "items" }, outputs: { itemsChange: "itemsChange", activeItemChange: "activeItemChange" }, queries: [{ propertyName: "labelComponent", predicate: ListboxLabelComponent }, { propertyName: "itemComponentList", predicate: ListboxItemComponent }], viewQueries: [{ propertyName: "listboxButton", first: true, predicate: ["button"], descendants: true, read: ElementRef, static: true }, { propertyName: "listboxList", first: true, predicate: ["list"], descendants: true, read: ElementRef }, { propertyName: "listboxContent", first: true, predicate: ["tooltip"], descendants: true, read: ElementRef, static: true }, { propertyName: "listboxOptions", predicate: ["option"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div [ngClass]=\"classesContainer ? classesContainer : 'relative'\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelComponent?.classes, label?.classes] | makeHtmlList\">\n <ng-container *desyCustomInnerContent=\"{ component: labelComponent, html: label ? getLabelContent(label) : null }\"></ng-container>\n </div>\n <button #button [id]=\"id + '-button'\"\n [class]=\"['c-listbox', classes] | makeHtmlList\"\n ngxTippy [tippyProps]=\"tippyProperties\"\n aria-haspopup=\"listbox\"\n [attr.aria-labelledby]=\"[hasLabel() ? id + '-label' : null, id + '-button'] | makeHtmlList\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.aria-disabled]=\"disabled ? 'true' : (ariaDisabled ? ariaDisabled : null)\"\n [attr.aria-role] = \"role ? role : null\"\n [attr.aria-label] = \"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby] = \"ariaDescribedBy ? ariaDescribedBy : null\"\n [attr.aria-hidden] = \"ariaHidden ? ariaHidden : 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-hasppup] = \"ariaHasPopup ? ariaHasPopup : null\"\n [attr.aria-tabindex] = \"tabindex ? tabindex : null\">\n <span class=\"inline-flex self-center max-w-xs align-middle truncate\">\n <ng-container *desyCustomInnerContent=\"{ html: buttonContentHtml, text: text }\"></ng-container>\n </span>\n <svg class=\"inline-block -mr-2 align-middle -my-px\" viewBox=\"0 0 96 96\" aria-hidden=\"true\" fill=\"currentColor\" focusable=\"false\" width=\"1.5em\" height=\"1.5em\"><g><path d=\"M46.71 58.037a1.823 1.823 0 002.581 0L62.048 45.28a1.823 1.823 0 00-1.29-3.113H35.243a1.823 1.823 0 00-1.291 3.113z\"/></g></svg>\n </button>\n <div #tooltip [class]=\"['c-listbox__tooltip -ml-sm mt-2 border border-neutral-base shadow-md bg-white', classesTooltip] | makeHtmlList\">\n <ul *ngIf=\"itemList\"\n #list [id]=\"id\"\n (focus)=\"onListFocus()\"\n (keydown.arrowUp)=\"moveFocus(currentFocusIndex - 1, $event)\"\n (keydown.arrowDown)=\"moveFocus(currentFocusIndex + 1, $event)\"\n (keydown.home)=\"moveFocus(0, $event)\"\n (keydown.end)=\"moveFocus(items.length - 1, $event)\"\n (keydown.space)=\"onSpace($event)\"\n role=\"listbox\"\n tabindex=\"-1\"\n class=\"text-sm outline-none\"\n [attr.aria-labelledby]=\"hasLabel() ? id : (ariaLabelledBy ? ariaLabelledBy : null)\"\n [attr.aria-multiselectable]=\"isMultiselectable ? 'true' : null\"\n [attr.aria-disabled]=\"ariaDisabled ? ariaDisabled : null\"\n [attr.aria-label] = \"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby] = \"ariaDescribedBy ? ariaDescribedBy : null\"\n [attr.aria-hidden] = \"ariaHidden ? ariaHidden : 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-activedescendant] = \"lastActiveItems.length > 0 ? getItemId(lastActiveItems[0].item, lastActiveItems[0].index) : null\">\n <ng-container *ngFor=\"let item of itemList; index as index\">\n <li #option *ngIf=\"item\" role=\"option\" (click)=\"selectItem(index)\"\n [class]=\"['flex items-center pr-base pl-lg py-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black', item.classes] | makeHtmlList\"\n [ngClass]=\"{'focused': index === currentFocusIndex}\"\n [attr.aria-label]=\"item.active ? 'true' : (item.ariaLabel ? item.ariaLabel : null)\"\n [id]=\"getItemId(item, index)\"\n [attr.title]=\"item.title ? item.title : null\"\n\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-hidden] = \"item.ariaHidden ? item.ariaHidden : null\"\n [attr.aria-controls]=\"item.ariaControls ? item.ariaControls : null\"\n [attr.aria-current] = \"item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.aria-live] = \"item.ariaLive ? item.ariaLive : null\"\n [attr.aria-expanded]=\"item.ariaExpanded ? item.ariaExpanded : null\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage ? item.ariaErrorMessage : null\"\n [attr.aria-haspopup] = \"item.ariaHasPopup ? item.ariaHasPopup : null\"\n [attr.aria-tabindex] = \"item.tabindex ? item.tabindex : null\"\n\n [attr.aria-checked]=\"item.active\"\n [attr.aria-selected]=\"item.active\">\n <ng-container *desyCustomInnerContent=\"{ template: item['content'], html: item.html, text: item.text }\"></ng-container>\n </li>\n </ng-container>\n </ul>\n </div>\n</div>", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.CustomInnerContentDirective, selector: "[desyCustomInnerContent]", inputs: ["desyCustomInnerContent"] }, { kind: "directive", type: i3.NgxTippyDirective, selector: "[ngxTippy]", inputs: ["ngxTippy", "tippyProps", "tippyName", "tippyClassName"] }, { kind: "pipe", type: i4.MakeHtmlListPipe, name: "makeHtmlList" }] });
288
+ ListboxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ListboxComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
289
+ ListboxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ListboxComponent, selector: "desy-listbox", inputs: { id: "id", isMultiselectable: "isMultiselectable", doesChangeButtonText: "doesChangeButtonText", label: "label", classes: "classes", classesContainer: "classesContainer", classesTooltip: "classesTooltip", idPrefix: "idPrefix", disabled: "disabled", items: "items" }, outputs: { itemsChange: "itemsChange", activeItemChange: "activeItemChange" }, queries: [{ propertyName: "labelComponent", predicate: ListboxLabelComponent }, { propertyName: "itemComponentList", predicate: ListboxItemComponent }], viewQueries: [{ propertyName: "listboxButton", first: true, predicate: ["button"], descendants: true, read: ElementRef, static: true }, { propertyName: "listboxList", first: true, predicate: ["list"], descendants: true, read: ElementRef }, { propertyName: "listboxContent", first: true, predicate: ["tooltip"], descendants: true, read: ElementRef, static: true }, { propertyName: "listboxOptions", predicate: ["option"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div [ngClass]=\"classesContainer ? classesContainer : 'relative'\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelComponent?.classes, label?.classes] | makeHtmlList\">\n <ng-container *desyCustomInnerContent=\"{ component: labelComponent, html: label ? getLabelContent(label) : null }\"></ng-container>\n </div>\n <button #button [id]=\"id + '-button'\"\n [class]=\"['c-listbox', classes] | makeHtmlList\"\n ngxTippy [tippyProps]=\"tippyProperties\"\n aria-haspopup=\"listbox\"\n [attr.aria-labelledby]=\"[hasLabel() ? id + '-label' : null, id + '-button'] | makeHtmlList\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.aria-disabled]=\"disabled ? 'true' : (ariaDisabled ? ariaDisabled : null)\"\n [attr.aria-role] = \"role ? role : null\"\n [attr.aria-label] = \"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby] = \"ariaDescribedBy ? ariaDescribedBy : null\"\n [attr.aria-hidden] = \"ariaHidden ? ariaHidden : 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-hasppup] = \"ariaHasPopup ? ariaHasPopup : null\"\n [attr.aria-tabindex] = \"tabindex ? tabindex : null\">\n <span class=\"inline-flex self-center max-w-xs align-middle truncate\">\n <ng-container *desyCustomInnerContent=\"{ html: buttonContentHtml, text: text }\"></ng-container>\n </span>\n <svg class=\"inline-block -mr-2 align-middle -my-px\" viewBox=\"0 0 96 96\" aria-hidden=\"true\" fill=\"currentColor\" focusable=\"false\" width=\"1.5em\" height=\"1.5em\"><g><path d=\"M46.71 58.037a1.823 1.823 0 002.581 0L62.048 45.28a1.823 1.823 0 00-1.29-3.113H35.243a1.823 1.823 0 00-1.291 3.113z\"/></g></svg>\n </button>\n <div #tooltip [class]=\"['c-listbox__tooltip -ml-sm mt-2 border border-neutral-base shadow-md bg-white', classesTooltip] | makeHtmlList\">\n <ul *ngIf=\"itemList\"\n #list [id]=\"id\"\n (focus)=\"onListFocus()\"\n (keydown.arrowUp)=\"moveFocus(currentFocusIndex - 1, $event)\"\n (keydown.arrowDown)=\"moveFocus(currentFocusIndex + 1, $event)\"\n (keydown.home)=\"moveFocus(0, $event)\"\n (keydown.end)=\"moveFocus(items.length - 1, $event)\"\n (keydown.space)=\"onSpace($event)\"\n role=\"listbox\"\n tabindex=\"-1\"\n class=\"text-sm outline-none\"\n [attr.aria-labelledby]=\"hasLabel() ? id : (ariaLabelledBy ? ariaLabelledBy : null)\"\n [attr.aria-multiselectable]=\"isMultiselectable ? 'true' : null\"\n [attr.aria-disabled]=\"ariaDisabled ? ariaDisabled : null\"\n [attr.aria-label] = \"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby] = \"ariaDescribedBy ? ariaDescribedBy : null\"\n [attr.aria-hidden] = \"ariaHidden ? ariaHidden : 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-activedescendant] = \"lastActiveItems && lastActiveItems.length > 0 ? getItemId(lastActiveItems[0].item, lastActiveItems[0].index) : null\">\n <ng-container *ngFor=\"let item of itemList; index as index\">\n <li #option *ngIf=\"item\" role=\"option\" (click)=\"selectItem(index)\"\n [class]=\"['flex items-center pr-base pl-lg py-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black', item.classes] | makeHtmlList\"\n [ngClass]=\"{'focused': index === currentFocusIndex}\"\n [attr.aria-label]=\"item.active ? 'true' : (item.ariaLabel ? item.ariaLabel : null)\"\n [id]=\"getItemId(item, index)\"\n [attr.title]=\"item.title ? item.title : null\"\n (desyAttributeChange)=\"onChangeItemChecked()\" [attributesToCheck]=\"'aria-selected'\" [desyAttributeChangeEnabled]=\"items && items.length > 0\"\n\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-hidden] = \"item.ariaHidden ? item.ariaHidden : null\"\n [attr.aria-controls]=\"item.ariaControls ? item.ariaControls : null\"\n [attr.aria-current] = \"item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.aria-live] = \"item.ariaLive ? item.ariaLive : null\"\n [attr.aria-expanded]=\"item.ariaExpanded ? item.ariaExpanded : null\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage ? item.ariaErrorMessage : null\"\n [attr.aria-haspopup] = \"item.ariaHasPopup ? item.ariaHasPopup : null\"\n [attr.aria-tabindex] = \"item.tabindex ? item.tabindex : null\"\n\n [attr.aria-checked]=\"item.active\"\n [attr.aria-selected]=\"item.active\">\n <ng-container *desyCustomInnerContent=\"{ template: item['content'], html: item.html, text: item.text }\"></ng-container>\n </li>\n </ng-container>\n </ul>\n </div>\n</div>", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.AttributeChangeDirective, selector: "[desyAttributeChange]", inputs: ["attributesToCheck", "desyAttributeChangeEnabled"], outputs: ["desyAttributeChange", "desyAttributeChangeMutation"] }, { kind: "directive", type: i3.CustomInnerContentDirective, selector: "[desyCustomInnerContent]", inputs: ["desyCustomInnerContent"] }, { kind: "directive", type: i4.NgxTippyDirective, selector: "[ngxTippy]", inputs: ["ngxTippy", "tippyProps", "tippyName", "tippyClassName"] }, { kind: "pipe", type: i5.MakeHtmlListPipe, name: "makeHtmlList" }] });
242
290
  __decorate([
243
291
  DesyContentChild()
244
292
  ], ListboxComponent.prototype, "labelComponent", void 0);
245
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ListboxComponent, decorators: [{
293
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ListboxComponent, decorators: [{
246
294
  type: Component,
247
- args: [{ selector: 'desy-listbox', template: "<div [ngClass]=\"classesContainer ? classesContainer : 'relative'\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelComponent?.classes, label?.classes] | makeHtmlList\">\n <ng-container *desyCustomInnerContent=\"{ component: labelComponent, html: label ? getLabelContent(label) : null }\"></ng-container>\n </div>\n <button #button [id]=\"id + '-button'\"\n [class]=\"['c-listbox', classes] | makeHtmlList\"\n ngxTippy [tippyProps]=\"tippyProperties\"\n aria-haspopup=\"listbox\"\n [attr.aria-labelledby]=\"[hasLabel() ? id + '-label' : null, id + '-button'] | makeHtmlList\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.aria-disabled]=\"disabled ? 'true' : (ariaDisabled ? ariaDisabled : null)\"\n [attr.aria-role] = \"role ? role : null\"\n [attr.aria-label] = \"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby] = \"ariaDescribedBy ? ariaDescribedBy : null\"\n [attr.aria-hidden] = \"ariaHidden ? ariaHidden : 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-hasppup] = \"ariaHasPopup ? ariaHasPopup : null\"\n [attr.aria-tabindex] = \"tabindex ? tabindex : null\">\n <span class=\"inline-flex self-center max-w-xs align-middle truncate\">\n <ng-container *desyCustomInnerContent=\"{ html: buttonContentHtml, text: text }\"></ng-container>\n </span>\n <svg class=\"inline-block -mr-2 align-middle -my-px\" viewBox=\"0 0 96 96\" aria-hidden=\"true\" fill=\"currentColor\" focusable=\"false\" width=\"1.5em\" height=\"1.5em\"><g><path d=\"M46.71 58.037a1.823 1.823 0 002.581 0L62.048 45.28a1.823 1.823 0 00-1.29-3.113H35.243a1.823 1.823 0 00-1.291 3.113z\"/></g></svg>\n </button>\n <div #tooltip [class]=\"['c-listbox__tooltip -ml-sm mt-2 border border-neutral-base shadow-md bg-white', classesTooltip] | makeHtmlList\">\n <ul *ngIf=\"itemList\"\n #list [id]=\"id\"\n (focus)=\"onListFocus()\"\n (keydown.arrowUp)=\"moveFocus(currentFocusIndex - 1, $event)\"\n (keydown.arrowDown)=\"moveFocus(currentFocusIndex + 1, $event)\"\n (keydown.home)=\"moveFocus(0, $event)\"\n (keydown.end)=\"moveFocus(items.length - 1, $event)\"\n (keydown.space)=\"onSpace($event)\"\n role=\"listbox\"\n tabindex=\"-1\"\n class=\"text-sm outline-none\"\n [attr.aria-labelledby]=\"hasLabel() ? id : (ariaLabelledBy ? ariaLabelledBy : null)\"\n [attr.aria-multiselectable]=\"isMultiselectable ? 'true' : null\"\n [attr.aria-disabled]=\"ariaDisabled ? ariaDisabled : null\"\n [attr.aria-label] = \"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby] = \"ariaDescribedBy ? ariaDescribedBy : null\"\n [attr.aria-hidden] = \"ariaHidden ? ariaHidden : 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-activedescendant] = \"lastActiveItems.length > 0 ? getItemId(lastActiveItems[0].item, lastActiveItems[0].index) : null\">\n <ng-container *ngFor=\"let item of itemList; index as index\">\n <li #option *ngIf=\"item\" role=\"option\" (click)=\"selectItem(index)\"\n [class]=\"['flex items-center pr-base pl-lg py-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black', item.classes] | makeHtmlList\"\n [ngClass]=\"{'focused': index === currentFocusIndex}\"\n [attr.aria-label]=\"item.active ? 'true' : (item.ariaLabel ? item.ariaLabel : null)\"\n [id]=\"getItemId(item, index)\"\n [attr.title]=\"item.title ? item.title : null\"\n\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-hidden] = \"item.ariaHidden ? item.ariaHidden : null\"\n [attr.aria-controls]=\"item.ariaControls ? item.ariaControls : null\"\n [attr.aria-current] = \"item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.aria-live] = \"item.ariaLive ? item.ariaLive : null\"\n [attr.aria-expanded]=\"item.ariaExpanded ? item.ariaExpanded : null\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage ? item.ariaErrorMessage : null\"\n [attr.aria-haspopup] = \"item.ariaHasPopup ? item.ariaHasPopup : null\"\n [attr.aria-tabindex] = \"item.tabindex ? item.tabindex : null\"\n\n [attr.aria-checked]=\"item.active\"\n [attr.aria-selected]=\"item.active\">\n <ng-container *desyCustomInnerContent=\"{ template: item['content'], html: item.html, text: item.text }\"></ng-container>\n </li>\n </ng-container>\n </ul>\n </div>\n</div>" }]
248
- }], propDecorators: { listboxButton: [{
295
+ args: [{ selector: 'desy-listbox', template: "<div [ngClass]=\"classesContainer ? classesContainer : 'relative'\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelComponent?.classes, label?.classes] | makeHtmlList\">\n <ng-container *desyCustomInnerContent=\"{ component: labelComponent, html: label ? getLabelContent(label) : null }\"></ng-container>\n </div>\n <button #button [id]=\"id + '-button'\"\n [class]=\"['c-listbox', classes] | makeHtmlList\"\n ngxTippy [tippyProps]=\"tippyProperties\"\n aria-haspopup=\"listbox\"\n [attr.aria-labelledby]=\"[hasLabel() ? id + '-label' : null, id + '-button'] | makeHtmlList\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.aria-disabled]=\"disabled ? 'true' : (ariaDisabled ? ariaDisabled : null)\"\n [attr.aria-role] = \"role ? role : null\"\n [attr.aria-label] = \"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby] = \"ariaDescribedBy ? ariaDescribedBy : null\"\n [attr.aria-hidden] = \"ariaHidden ? ariaHidden : 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-hasppup] = \"ariaHasPopup ? ariaHasPopup : null\"\n [attr.aria-tabindex] = \"tabindex ? tabindex : null\">\n <span class=\"inline-flex self-center max-w-xs align-middle truncate\">\n <ng-container *desyCustomInnerContent=\"{ html: buttonContentHtml, text: text }\"></ng-container>\n </span>\n <svg class=\"inline-block -mr-2 align-middle -my-px\" viewBox=\"0 0 96 96\" aria-hidden=\"true\" fill=\"currentColor\" focusable=\"false\" width=\"1.5em\" height=\"1.5em\"><g><path d=\"M46.71 58.037a1.823 1.823 0 002.581 0L62.048 45.28a1.823 1.823 0 00-1.29-3.113H35.243a1.823 1.823 0 00-1.291 3.113z\"/></g></svg>\n </button>\n <div #tooltip [class]=\"['c-listbox__tooltip -ml-sm mt-2 border border-neutral-base shadow-md bg-white', classesTooltip] | makeHtmlList\">\n <ul *ngIf=\"itemList\"\n #list [id]=\"id\"\n (focus)=\"onListFocus()\"\n (keydown.arrowUp)=\"moveFocus(currentFocusIndex - 1, $event)\"\n (keydown.arrowDown)=\"moveFocus(currentFocusIndex + 1, $event)\"\n (keydown.home)=\"moveFocus(0, $event)\"\n (keydown.end)=\"moveFocus(items.length - 1, $event)\"\n (keydown.space)=\"onSpace($event)\"\n role=\"listbox\"\n tabindex=\"-1\"\n class=\"text-sm outline-none\"\n [attr.aria-labelledby]=\"hasLabel() ? id : (ariaLabelledBy ? ariaLabelledBy : null)\"\n [attr.aria-multiselectable]=\"isMultiselectable ? 'true' : null\"\n [attr.aria-disabled]=\"ariaDisabled ? ariaDisabled : null\"\n [attr.aria-label] = \"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby] = \"ariaDescribedBy ? ariaDescribedBy : null\"\n [attr.aria-hidden] = \"ariaHidden ? ariaHidden : 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-activedescendant] = \"lastActiveItems && lastActiveItems.length > 0 ? getItemId(lastActiveItems[0].item, lastActiveItems[0].index) : null\">\n <ng-container *ngFor=\"let item of itemList; index as index\">\n <li #option *ngIf=\"item\" role=\"option\" (click)=\"selectItem(index)\"\n [class]=\"['flex items-center pr-base pl-lg py-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black', item.classes] | makeHtmlList\"\n [ngClass]=\"{'focused': index === currentFocusIndex}\"\n [attr.aria-label]=\"item.active ? 'true' : (item.ariaLabel ? item.ariaLabel : null)\"\n [id]=\"getItemId(item, index)\"\n [attr.title]=\"item.title ? item.title : null\"\n (desyAttributeChange)=\"onChangeItemChecked()\" [attributesToCheck]=\"'aria-selected'\" [desyAttributeChangeEnabled]=\"items && items.length > 0\"\n\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-hidden] = \"item.ariaHidden ? item.ariaHidden : null\"\n [attr.aria-controls]=\"item.ariaControls ? item.ariaControls : null\"\n [attr.aria-current] = \"item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.aria-live] = \"item.ariaLive ? item.ariaLive : null\"\n [attr.aria-expanded]=\"item.ariaExpanded ? item.ariaExpanded : null\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage ? item.ariaErrorMessage : null\"\n [attr.aria-haspopup] = \"item.ariaHasPopup ? item.ariaHasPopup : null\"\n [attr.aria-tabindex] = \"item.tabindex ? item.tabindex : null\"\n\n [attr.aria-checked]=\"item.active\"\n [attr.aria-selected]=\"item.active\">\n <ng-container *desyCustomInnerContent=\"{ template: item['content'], html: item.html, text: item.text }\"></ng-container>\n </li>\n </ng-container>\n </ul>\n </div>\n</div>" }]
296
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { listboxButton: [{
249
297
  type: ViewChild,
250
298
  args: ['button', { read: ElementRef, static: true }]
251
299
  }], listboxList: [{
@@ -288,4 +336,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
288
336
  }], activeItemChange: [{
289
337
  type: Output
290
338
  }] } });
291
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdGJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LWJ1dHRvbnMvY29tcG9uZW50cy9saXN0Ym94L2xpc3Rib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzeS1hbmd1bGFyL3NyYy9saWIvZGVzeS1idXR0b25zL2NvbXBvbmVudHMvbGlzdGJveC9saXN0Ym94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUVaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNULFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsMkNBQTJDLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUd2RixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDL0QsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDOUUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFFM0UsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0seURBQXlELENBQUM7Ozs7OztBQU16RixNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsMkNBQTJDO0lBSmpGOztRQTJCWSxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUtoRCxrQkFBYSxHQUFHLEtBQUssQ0FBQyxDQUFLLHVDQUF1QztLQXdQbkU7SUEvT0MsUUFBUTtRQUNOLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7UUFDOUQsSUFBSSxJQUFJLENBQUMsY0FBYyxJ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Z0JBQ0MsaUJBQWlCO3NCQUF2RCxlQUFlO3VCQUFDLG9CQUFvQjtnQkFFNUIsRUFBRTtzQkFBVixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sIERvQ2hlY2ssXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY2Nlc3NpYmlsaXR5QW5kVGV4dE9ySHRtbFJlcXVpcmVkQ29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50cyc7XG5pbXBvcnQge0xpc3Rib3hMYWJlbERhdGF9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbGlzdGJveC1sYWJlbC1kYXRhJztcbmltcG9ydCB7TGlzdGJveEl0ZW1EYXRhfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2xpc3Rib3gtaXRlbS1kYXRhJztcbmltcG9ydCB7U3RyaW5nVXRpbHN9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC91dGlscy9zdHJpbmctdXRpbHMnO1xuaW1wb3J0IHtMaXN0Ym94TGFiZWxDb21wb25lbnR9IGZyb20gJy4vbGlzdGJveC1sYWJlbC9saXN0Ym94LWxhYmVsLmNvbXBvbmVudCc7XG5pbXBvcnQge0xpc3Rib3hJdGVtQ29tcG9uZW50fSBmcm9tICcuL2xpc3Rib3gtaXRlbS9saXN0Ym94LWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7RGVzeUNvbnRlbnRDaGlsZH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2RlY29yYXRvcnMvZGVzeS1jb250ZW50LWNoaWxkLmRlY29yYXRvcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Rlc3ktbGlzdGJveCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0Ym94LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBMaXN0Ym94Q29tcG9uZW50IGV4dGVuZHMgQWNjZXNzaWJpbGl0eUFuZFRleHRPckh0bWxSZXF1aXJlZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBEb0NoZWNrIHtcblxuICBzdGF0aWMgcmVhZG9ubHkgS0VZX0NPREVfRVNDID0gJ0VzY2FwZSc7XG5cbiAgQFZpZXdDaGlsZCgnYnV0dG9uJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgbGlzdGJveEJ1dHRvbjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnbGlzdCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBsaXN0Ym94TGlzdDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndG9vbHRpcCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIGxpc3Rib3hDb250ZW50OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkcmVuKCdvcHRpb24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbGlzdGJveE9wdGlvbnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICBARGVzeUNvbnRlbnRDaGlsZCgpXG4gIEBDb250ZW50Q2hpbGRyZW4oTGlzdGJveExhYmVsQ29tcG9uZW50KSBsYWJlbENvbXBvbmVudDogTGlzdGJveExhYmVsQ29tcG9uZW50O1xuICBAQ29udGVudENoaWxkcmVuKExpc3Rib3hJdGVtQ29tcG9uZW50KSBpdGVtQ29tcG9uZW50TGlzdDogUXVlcnlMaXN0PExpc3Rib3hJdGVtQ29tcG9uZW50PjtcblxuICBASW5wdXQoKSBpZDogc3RyaW5nOyAvLyByZXF1aXJlZFxuICBASW5wdXQoKSBpc011bHRpc2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgZG9lc0NoYW5nZUJ1dHRvblRleHQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGxhYmVsOiBMaXN0Ym94TGFiZWxEYXRhO1xuICBASW5wdXQoKSBjbGFzc2VzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsYXNzZXNDb250YWluZXI6IHN0cmluZztcbiAgQElucHV0KCkgY2xhc3Nlc1Rvb2x0aXA6IHN0cmluZztcbiAgQElucHV0KCkgaWRQcmVmaXg6IHN0cmluZztcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGl0ZW1zOiBMaXN0Ym94SXRlbURhdGFbXTtcbiAgQE91dHB1dCgpIGl0ZW1zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgYWN0aXZlSXRlbUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICB0aXBweVByb3BlcnRpZXM6IGFueTsgICAgICAvLyBQcm9waWVkYWRlcyBkZSB0aXBweVxuICBjdXJyZW50Rm9jdXNJbmRleDogbnVtYmVyOyAvLyDDjW5kaWNlIGRlbCBlbGVtZW50byBhY3R1YWwgY29uIGZvY3VzXG4gIGJ1dHRvbkNvbnRlbnRIdG1sOiBzdHJpbmc7IC8vIFB1ZWRlIHNlciBlbCBwYXNhZG8gcG9yIHBhcsOhbWV0cm8gbyBlbCBpdGVtIHNlbGVjY2lvbmFkbyBlbiBjYXNvIGRlIGN1cnJlbnRGb2N1c0luZGV4PXRydWVcbiAgaXNMaXN0VmlzaWJsZSA9IGZhbHNlOyAgICAgLy8gSW5kaWNhIHNpIGxhIGxpc3RhIHNlIGVzdMOhIG1vc3RyYW5kb1xuXG4gIC8vIGNvbmRpdGlvbmFsSWQgeSBjb25kaXRpb25hbEl0ZW0gcmVwcmVzZW50YW4gZW4gZGVzeS1odG1sIGVsIGl0ZW0gYWN0aXZvLiBBcXXDrSBlcyBtZWpvciBvYnRlbmVybG8gY3VhbmRvIHNlIG5lY2VzaXRhXG4gIGxhc3RBY3RpdmVJdGVtczogeyBpdGVtOiBMaXN0Ym94SXRlbURhdGEsIGluZGV4OiBudW1iZXIgfVtdO1xuICBpdGVtQ29tcG9uZW50U3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW107XG5cbiAgaXRlbUxpc3Q6IExpc3Rib3hJdGVtRGF0YVtdO1xuXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdGJveEJ1dHRvbkVsZW1lbnQgPSB0aGlzLmxpc3Rib3hCdXR0b24ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAodGhpcy5saXN0Ym94Q29udGVudCAmJiB0aGlzLmxpc3Rib3hDb250ZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnRUb29sdGlwID0gdGhpcy5saXN0Ym94Q29udGVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgdGhpcy50aXBweVByb3BlcnRpZXMgPSB7ICAgICAgICBcbiAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tLXN0YXJ0JyxcbiAgICAgICAgaW5saW5lUG9zaXRpb25pbmc6IHRydWUsICAgICAgICBcbiAgICAgICAgY29udGVudDogY29udGVudFRvb2x0aXAsXG4gICAgICAgIGFsbG93SFRNTDogdHJ1ZSwgLy8gTWFrZSBzdXJlIHlvdSBhcmUgc2FuaXRpemluZyBhbnkgdXNlciBkYXRhIGlmIHJlbmRlcmluZyBIVE1MIHRvIHByZXZlbnQgWFNTIGF0dGFja3MuXG4gICAgICAgIHRyaWdnZXI6ICdjbGljaycsXG4gICAgICAgIGhpZGVPbkNsaWNrOiB0cnVlLFxuICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgYXJyb3c6IGZhbHNlLFxuICAgICAgICBvZmZzZXQ6IFswLCAtMTBdLFxuICAgICAgICB0aGVtZTogJycsXG4gICAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnaGlkZU9uUG9wcGVyQmx1cicsXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gICAgICAgICAgICBmbihpbnN0YW5jZSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG9uQ3JlYXRlKCkge1xuICAgICAgICAgICAgICAgICAgaW5zdGFuY2UucG9wcGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5wcm9wcy5oaWRlT25Qb3BwZXJCbHVyICYmXG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnQucmVsYXRlZFRhcmdldCAmJlxuICAgICAgICAgICAgICAgICAgICAgICFpbnN0YW5jZS5wb3BwZXIuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldClcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6ICdoaWRlT25Fc2MnLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiB0cnVlLFxuICAgICAgICAgICAgZm4oe2hpZGV9KTogYW55IHtcblxuICAgICAgICAgICAgICBmdW5jdGlvbiBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBMaXN0Ym94Q29tcG9uZW50LktFWV9DT0RFX0VTQykge1xuICAgICAgICAgICAgICAgICAgaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgbGlzdGJveEJ1dHRvbkVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG9uU2hvdygpOiB2b2lkIHtcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25IaWRlKCk6IHZvaWQge1xuICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uS2V5RG93bik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByb2xlOiBmYWxzZSxcbiAgICAgICAgYXJpYToge1xuICAgICAgICAgIGNvbnRlbnQ6ICdhdXRvJyxcbiAgICAgICAgfSxcbiAgICAgICAgb25TaG93OiB0aGlzLm9uTGlzdFNob3cuYmluZCh0aGlzKSxcbiAgICAgICAgb25IaWRkZW46IHRoaXMub25MaXN0Q2xvc2UuYmluZCh0aGlzKVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgaWYgKHRoaXMuaXRlbUNvbXBvbmVudExpc3QgJiYgdGhpcy5pdGVtQ29tcG9uZW50TGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmICh0aGlzLml0ZW1Db21wb25lbnRTdWJzY3JpcHRpb25zKSB7XG4gICAgICAgICAgdGhpcy5pdGVtQ29tcG9uZW50U3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLml0ZW1Db21wb25lbnRTdWJzY3JpcHRpb25zID0gW107XG4gICAgICAgIHRoaXMuaXRlbUxpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5pdGVtQ29tcG9uZW50TGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGl0ZW0uaXRlbUNoYW5nZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jaGVja0FjdGl2ZUl0ZW1zKCkpO1xuICAgICAgICAgIHRoaXMuaXRlbUNvbXBvbmVudFN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuICAgICAgICAgIHRoaXMuaXRlbUxpc3QucHVzaChpdGVtKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLml0ZW1MaXN0ID0gdGhpcy5pdGVtcztcbiAgICAgIH1cblxuICAgICAgdGhpcy5jaGVja0FjdGl2ZUl0ZW1zKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLml0ZW1zIHx8ICF0aGlzLml0ZW1MaXN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jaGVja0FjdGl2ZUl0ZW1zKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGl2ZUl0ZW1zRGF0YSgpOiB7IGl0ZW06IExpc3Rib3hJdGVtRGF0YSwgaW5kZXg6IG51bWJlciB9W10ge1xuICAgIHJldHVybiB0aGlzLml0ZW1MaXN0XG4gICAgICAubWFwKChpdGVtLCBpbmRleCkgPT4gaXRlbS5hY3RpdmUgPyB7aXRlbSwgaW5kZXh9IDogbnVsbClcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtICE9PSBudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tBY3RpdmVJdGVtcygpOiB2b2lkIHtcbiAgICBsZXQgYWN0aXZlSXRlbXM6IHsgaXRlbTogTGlzdGJveEl0ZW1EYXRhLCBpbmRleDogbnVtYmVyIH1bXSA9IHRoaXMuaXRlbUxpc3RcbiAgICAgIC5tYXAoKGl0ZW0sIGluZGV4KSA9PiBpdGVtLmFjdGl2ZSA/IHtpdGVtLCBpbmRleH0gOiBudWxsKVxuICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0gIT09IG51bGwpO1xuXG4gICAgbGV0IGhhc0FjdGl2ZUl0ZW1DaGFuZ2UgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5sYXN0QWN0aXZlSXRlbXMgJiYgYWN0aXZlSXRlbXMubGVuZ3RoID09PSB0aGlzLmxhc3RBY3RpdmVJdGVtcy5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aXZlSXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGFjdGl2ZUl0ZW1zW2ldLmluZGV4ICE9PSB0aGlzLmxhc3RBY3RpdmVJdGVtc1tpXS5pbmRleCkge1xuICAgICAgICAgIGhhc0FjdGl2ZUl0ZW1DaGFuZ2UgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhc0FjdGl2ZUl0ZW1DaGFuZ2UgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIFNpIGhheSBjYW1iaW9zIGV4dGVybm9zIHkgZXMgc2VsZWNjacOzbiDDum5pY2EsIGFudWxhbW9zIGxhIHNlbGVjY2nDs24gYW50ZXJpb3JcbiAgICBpZiAodGhpcy5sYXN0QWN0aXZlSXRlbXMgJiYgIXRoaXMuaXNNdWx0aXNlbGVjdGFibGUgJiYgaGFzQWN0aXZlSXRlbUNoYW5nZSkge1xuICAgICAgaWYgKGFjdGl2ZUl0ZW1zLmxlbmd0aCAhPT0gdGhpcy5sYXN0QWN0aXZlSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgbmV3SXRlbSBvZiBhY3RpdmVJdGVtcykge1xuICAgICAgICAgIGlmICh0aGlzLmxhc3RBY3RpdmVJdGVtcy5maW5kSW5kZXgoaSA9PiBpLmluZGV4ID09PSBuZXdJdGVtLmluZGV4KSA+PSAwKSB7XG4gICAgICAgICAgICBuZXdJdGVtLml0ZW0uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYWN0aXZlSXRlbXMgPSBhY3RpdmVJdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLml0ZW0uYWN0aXZlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGFzdEFjdGl2ZUl0ZW1zID0gYWN0aXZlSXRlbXM7XG5cbiAgICAvLyBTZSBjYW1iaWEgZWwgY29udGVuaWRvIGRlbCBib3TDs25cbiAgICBpZiAodGhpcy5kb2VzQ2hhbmdlQnV0dG9uVGV4dCAmJiAhdGhpcy5pc011bHRpc2VsZWN0YWJsZSAmJiBhY3RpdmVJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBhY3RpdmVJdGVtT3B0aW9uID0gdGhpcy5saXN0Ym94T3B0aW9ucy5maW5kKChpdGVtLCBpbmRleCkgPT4gaW5kZXggPT09IGFjdGl2ZUl0ZW1zWzBdLmluZGV4KTtcbiAgICAgIGlmIChhY3RpdmVJdGVtT3B0aW9uKSB7XG4gICAgICAgIHRoaXMuYnV0dG9uQ29udGVudEh0bWwgPSBhY3RpdmVJdGVtT3B0aW9uLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJ1dHRvbkNvbnRlbnRIdG1sID0gdGhpcy5odG1sID8gdGhpcy5odG1sIDogbnVsbDtcbiAgICB9XG5cbiAgICAvLyBTaSBoYXkgY2FtYmlvcywgc2UgZW1pdGVuXG4gICAgaWYgKGhhc0FjdGl2ZUl0ZW1DaGFuZ2UpIHtcbiAgICAgIHRoaXMuaXRlbXNDaGFuZ2UuZW1pdCh0aGlzLml0ZW1MaXN0KTtcbiAgICAgIHRoaXMuYWN0aXZlSXRlbUNoYW5nZS5lbWl0KGFjdGl2ZUl0ZW1zLmxlbmd0aCA+IDAgPyBhY3RpdmVJdGVtc1swXS5pdGVtIDogbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgb25MaXN0U2hvdygpOiB2b2lkIHtcbiAgICB0aGlzLmlzTGlzdFZpc2libGUgPSB0cnVlO1xuICAgIGlmICh0aGlzLmxpc3Rib3hMaXN0KSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubGlzdGJveExpc3QubmF0aXZlRWxlbWVudC5mb2N1cygpKTtcbiAgICB9XG4gIH1cblxuICBvbkxpc3RDbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzTGlzdFZpc2libGUgPSBmYWxzZTtcbiAgfVxuXG4gIG9uTGlzdEZvY3VzKCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZUl0ZW1zRGF0YSA9IHRoaXMuZ2V0QWN0aXZlSXRlbXNEYXRhKCk7XG4gICAgaWYgKGFjdGl2ZUl0ZW1zRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBhY3RpdmVFbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRJdGVtSWQoYWN0aXZlSXRlbXNEYXRhWzBdLml0ZW0sIGFjdGl2ZUl0ZW1zRGF0YVswXS5pbmRleCkpO1xuICAgICAgaWYgKGFjdGl2ZUVsZW0pIHtcbiAgICAgICAgYWN0aXZlRWxlbS5mb2N1cygpO1xuICAgICAgICB0aGlzLmN1cnJlbnRGb2N1c0luZGV4ID0gYWN0aXZlSXRlbXNEYXRhWzBdLmluZGV4O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtTGlzdCAmJiB0aGlzLml0ZW1MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY3VycmVudEZvY3VzSW5kZXggPSAwO1xuICAgICAgaWYgKCF0aGlzLmlzTXVsdGlzZWxlY3RhYmxlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0SXRlbSgwKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKCdObyBlbGVtZW50IHRvIGZvY3VzJyk7XG4gICAgfVxuICB9XG5cbiAgbW92ZUZvY3VzKHBvc2l0aW9uOiBudW1iZXIsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKHBvc2l0aW9uID49IDAgJiYgcG9zaXRpb24gPCB0aGlzLml0ZW1MaXN0Lmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMuaXNNdWx0aXNlbGVjdGFibGUpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Rm9jdXNJbmRleCA9IHBvc2l0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RJdGVtKHBvc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblNwYWNlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKHRoaXMuaXNNdWx0aXNlbGVjdGFibGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0SXRlbSh0aGlzLmN1cnJlbnRGb2N1c0luZGV4KTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RJdGVtKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNNdWx0aXNlbGVjdGFibGUpIHtcbiAgICAgIHRoaXMuaXRlbUxpc3QuZm9yRWFjaChpdGVtID0+IGl0ZW0uYWN0aXZlID0gZmFsc2UpO1xuICAgICAgdGhpcy5pdGVtTGlzdFtpbmRleF0uYWN0aXZlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pdGVtTGlzdFtpbmRleF0uYWN0aXZlID0gIXRoaXMuaXRlbUxpc3RbaW5kZXhdLmFjdGl2ZTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50Rm9jdXNJbmRleCA9IGluZGV4O1xuXG4gICAgdGhpcy5jaGVja0FjdGl2ZUl0ZW1zKCk7XG4gIH1cblxuICAvKlxuICAgKiBNw6l0b2RvcyBwYXJhIGZhY2lsaXRhciBjb250ZW5pZG8gYWwgdGVtcGxhdGVcbiAgICovXG5cbiAgZ2V0SWRQcmVmaXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pZFByZWZpeCA/IHRoaXMuaWRQcmVmaXggOiB0aGlzLmlkICsgJy1saXN0Ym94LWl0ZW0nO1xuICB9XG5cbiAgZ2V0SXRlbUlkKGl0ZW06IExpc3Rib3hJdGVtRGF0YSwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgbGV0IGl0ZW1JZDogc3RyaW5nO1xuICAgIGlmIChpdGVtLmlkKSB7XG4gICAgICBpdGVtSWQgPSBpdGVtLmlkO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtSWQgPSB0aGlzLmdldElkUHJlZml4KCk7XG4gICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgIGl0ZW1JZCArPSBgLSR7aW5kZXh9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1JZDtcbiAgfVxuXG4gIGhhc0xhYmVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLmxhYmVsIHx8IHRoaXMubGFiZWxDb21wb25lbnQpO1xuICB9XG5cbiAgZ2V0TGFiZWxDb250ZW50KGxhYmVsOiBMaXN0Ym94TGFiZWxEYXRhKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbGFiZWwuaHRtbCA/IGxhYmVsLmh0bWwgOiBgPHA+JHsgU3RyaW5nVXRpbHMuZXNjYXBlSHRtbChsYWJlbC50ZXh0KSB9PC9wPmA7XG4gIH1cbn1cbiIsIjxkaXYgW25nQ2xhc3NdPVwiY2xhc3Nlc0NvbnRhaW5lciA/IGNsYXNzZXNDb250YWluZXIgOiAncmVsYXRpdmUnXCI+XG4gIDxkaXYgW2lkXT1cImlkICsgJy1sYWJlbCdcIiBbY2xhc3NdPVwiWydtYi1zbScsIGxhYmVsQ29tcG9uZW50Py5jbGFzc2VzLCBsYWJlbD8uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIj5cbiAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IGxhYmVsQ29tcG9uZW50LCBodG1sOiBsYWJlbCA/IGdldExhYmVsQ29udGVudChsYWJlbCkgOiBudWxsIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxidXR0b24gI2J1dHRvbiBbaWRdPVwiaWQgKyAnLWJ1dHRvbidcIlxuICAgICAgICAgIFtjbGFzc109XCJbJ2MtbGlzdGJveCcsIGNsYXNzZXNdIHwgbWFrZUh0bWxMaXN0XCJcbiAgICAgICAgICBuZ3hUaXBweSBbdGlwcHlQcm9wc109XCJ0aXBweVByb3BlcnRpZXNcIlxuICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiW2hhc0xhYmVsKCkgPyBpZCArICctbGFiZWwnIDogbnVsbCwgaWQgKyAnLWJ1dHRvbiddIHwgbWFrZUh0bWxMaXN0XCJcbiAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICdkaXNhYmxlZCcgOiBudWxsXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImRpc2FibGVkID8gJ3RydWUnIDogKGFyaWFEaXNhYmxlZCA/IGFyaWFEaXNhYmxlZCA6IG51bGwpXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLXJvbGVdID0gXCJyb2xlID8gcm9sZSA6IG51bGxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdID0gXCJhcmlhTGFiZWwgPyBhcmlhTGFiZWwgOiBudWxsXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XSA9IFwiYXJpYURlc2NyaWJlZEJ5ID8gYXJpYURlc2NyaWJlZEJ5IDogbnVsbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dID0gXCJhcmlhSGlkZGVuID8gYXJpYUhpZGRlbiA6IG51bGxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdID0gXCJhcmlhQ29udHJvbHMgPyBhcmlhQ29udHJvbHMgOiBudWxsXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdID0gXCJhcmlhQ3VycmVudCA/IGFyaWFDdXJyZW50IDogbnVsbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1saXZlXSA9IFwiYXJpYUxpdmUgPyBhcmlhTGl2ZSA6IG51bGxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdID0gXCJhcmlhRXhwYW5kZWQgPyBhcmlhRXhwYW5kZWQgOiBudWxsXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWVycm9yTWVzc2FnZV0gPSBcImFyaWFFcnJvck1lc3NhZ2UgPyBhcmlhRXJyb3JNZXNzYWdlIDogbnVsbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1oYXNwcHVwXSA9IFwiYXJpYUhhc1BvcHVwID8gYXJpYUhhc1BvcHVwIDogbnVsbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS10YWJpbmRleF0gPSBcInRhYmluZGV4ID8gdGFiaW5kZXggOiBudWxsXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaW5saW5lLWZsZXggc2VsZi1jZW50ZXIgbWF4LXcteHMgYWxpZ24tbWlkZGxlIHRydW5jYXRlXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgaHRtbDogYnV0dG9uQ29udGVudEh0bWwsIHRleHQ6IHRleHQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG4gICAgPHN2ZyBjbGFzcz1cImlubGluZS1ibG9jayAtbXItMiAgYWxpZ24tbWlkZGxlIC1teS1weFwiIHZpZXdCb3g9XCIwIDAgOTYgOTZcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgZm9jdXNhYmxlPVwiZmFsc2VcIiB3aWR0aD1cIjEuNWVtXCIgaGVpZ2h0PVwiMS41ZW1cIj48Zz48cGF0aCBkPVwiTTQ2LjcxIDU4LjAzN2ExLjgyMyAxLjgyMyAwIDAwMi41ODEgMEw2Mi4wNDggNDUuMjhhMS44MjMgMS44MjMgMCAwMC0xLjI5LTMuMTEzSDM1LjI0M2ExLjgyMyAxLjgyMyAwIDAwLTEuMjkxIDMuMTEzelwiLz48L2c+PC9zdmc+XG4gIDwvYnV0dG9uPlxuICA8ZGl2ICN0b29sdGlwIFtjbGFzc109XCJbJ2MtbGlzdGJveF9fdG9vbHRpcCAtbWwtc20gbXQtMiBib3JkZXIgYm9yZGVyLW5ldXRyYWwtYmFzZSBzaGFkb3ctbWQgYmctd2hpdGUnLCBjbGFzc2VzVG9vbHRpcF0gfCBtYWtlSHRtbExpc3RcIj5cbiAgICA8dWwgKm5nSWY9XCJpdGVtTGlzdFwiXG4gICAgICAgICNsaXN0IFtpZF09XCJpZFwiXG4gICAgICAgIChmb2N1cyk9XCJvbkxpc3RGb2N1cygpXCJcbiAgICAgICAgKGtleWRvd24uYXJyb3dVcCk9XCJtb3ZlRm9jdXMoY3VycmVudEZvY3VzSW5kZXggLSAxLCAkZXZlbnQpXCJcbiAgICAgICAgKGtleWRvd24uYXJyb3dEb3duKT1cIm1vdmVGb2N1cyhjdXJyZW50Rm9jdXNJbmRleCArIDEsICRldmVudClcIlxuICAgICAgICAoa2V5ZG93bi5ob21lKT1cIm1vdmVGb2N1cygwLCAkZXZlbnQpXCJcbiAgICAgICAgKGtleWRvd24uZW5kKT1cIm1vdmVGb2N1cyhpdGVtcy5sZW5ndGggLSAxLCAkZXZlbnQpXCJcbiAgICAgICAgKGtleWRvd24uc3BhY2UpPVwib25TcGFjZSgkZXZlbnQpXCJcbiAgICAgICAgcm9sZT1cImxpc3Rib3hcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtIG91dGxpbmUtbm9uZVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJoYXNMYWJlbCgpID8gaWQgOiAoYXJpYUxhYmVsbGVkQnkgPyBhcmlhTGFiZWxsZWRCeSA6IG51bGwpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1tdWx0aXNlbGVjdGFibGVdPVwiaXNNdWx0aXNlbGVjdGFibGUgPyAndHJ1ZScgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJhcmlhRGlzYWJsZWQgPyBhcmlhRGlzYWJsZWQgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF0gPSBcImFyaWFMYWJlbCA/IGFyaWFMYWJlbCA6IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XSA9IFwiYXJpYURlc2NyaWJlZEJ5ID8gYXJpYURlc2NyaWJlZEJ5IDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXSA9IFwiYXJpYUhpZGRlbiA/IGFyaWFIaWRkZW4gOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc10gPSBcImFyaWFDb250cm9scyA/IGFyaWFDb250cm9scyA6IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdID0gXCJhcmlhQ3VycmVudCA/IGFyaWFDdXJyZW50IDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGl2ZV0gPSBcImFyaWFMaXZlID8gYXJpYUxpdmUgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF0gPSBcImFyaWFFeHBhbmRlZCA/IGFyaWFFeHBhbmRlZCA6IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLWVycm9ybWVzc2FnZV0gPSBcImFyaWFFcnJvck1lc3NhZ2UgPyBhcmlhRXJyb3JNZXNzYWdlIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdID0gXCJhcmlhSGFzUG9wdXAgPyBhcmlhSGFzUG9wdXAgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XSA9IFwibGFzdEFjdGl2ZUl0ZW1zLmxlbmd0aCA+IDAgPyBnZXRJdGVtSWQobGFzdEFjdGl2ZUl0ZW1zWzBdLml0ZW0sIGxhc3RBY3RpdmVJdGVtc1swXS5pbmRleCkgOiBudWxsXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1MaXN0OyBpbmRleCBhcyBpbmRleFwiPlxuICAgICAgICA8bGkgI29wdGlvbiAqbmdJZj1cIml0ZW1cIiByb2xlPVwib3B0aW9uXCIgKGNsaWNrKT1cInNlbGVjdEl0ZW0oaW5kZXgpXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJbJ2ZsZXggaXRlbXMtY2VudGVyIHByLWJhc2UgcGwtbGcgcHktc20gaG92ZXI6YmctcHJpbWFyeS1iYXNlIGhvdmVyOnRleHQtd2hpdGUgZm9jdXM6Ymctd2FybmluZy1iYXNlIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpzaGFkb3ctb3V0bGluZS1mb2N1cyBmb2N1czp0ZXh0LWJsYWNrJywgaXRlbS5jbGFzc2VzXSB8IG1ha2VIdG1sTGlzdFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ZvY3VzZWQnOiBpbmRleCA9PT0gY3VycmVudEZvY3VzSW5kZXh9XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXRlbS5hY3RpdmUgPyAndHJ1ZScgOiAoaXRlbS5hcmlhTGFiZWwgPyBpdGVtLmFyaWFMYWJlbCA6IG51bGwpXCJcbiAgICAgICAgICAgIFtpZF09XCJnZXRJdGVtSWQoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cIml0ZW0udGl0bGUgPyBpdGVtLnRpdGxlIDogbnVsbFwiXG5cbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaXRlbS5hcmlhRGVzY3JpYmVkQnkgPyBpdGVtLmFyaWFEZXNjcmliZWRCeSA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dID0gXCJpdGVtLmFyaWFIaWRkZW4gPyBpdGVtLmFyaWFIaWRkZW4gOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaXRlbS5hcmlhQ29udHJvbHMgPyBpdGVtLmFyaWFDb250cm9scyA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XSA9IFwiaXRlbS5hcmlhQ3VycmVudCA/IGl0ZW0uYXJpYUN1cnJlbnQgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGl2ZV0gPSBcIml0ZW0uYXJpYUxpdmUgPyBpdGVtLmFyaWFMaXZlIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIml0ZW0uYXJpYUV4cGFuZGVkID8gaXRlbS5hcmlhRXhwYW5kZWQgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXJyb3JtZXNzYWdlXT1cIml0ZW0uYXJpYUVycm9yTWVzc2FnZSA/IGl0ZW0uYXJpYUVycm9yTWVzc2FnZSA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF0gPSBcIml0ZW0uYXJpYUhhc1BvcHVwID8gaXRlbS5hcmlhSGFzUG9wdXAgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtdGFiaW5kZXhdID0gXCJpdGVtLnRhYmluZGV4ID8gaXRlbS50YWJpbmRleCA6IG51bGxcIlxuXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpdGVtLmFjdGl2ZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IHRlbXBsYXRlOiBpdGVtWydjb250ZW50J10sIGh0bWw6IGl0ZW0uaHRtbCwgdGV4dDogaXRlbS50ZXh0IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9saT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuPC9kaXY+Il19
339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdGJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LWJ1dHRvbnMvY29tcG9uZW50cy9saXN0Ym94L2xpc3Rib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzeS1hbmd1bGFyL3NyYy9saWIvZGVzeS1idXR0b25zL2NvbXBvbmVudHMvbGlzdGJveC9saXN0Ym94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBS0wsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNULFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsMkNBQTJDLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUd2RixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDL0QsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDOUUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFFM0UsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0seURBQXlELENBQUM7Ozs7Ozs7QUFNekYsTUFBTSxPQUFPLGdCQUFpQixTQUFRLDJDQUEyQztJQXdDL0UsWUFBb0IsaUJBQW9DO1FBQ3RELEtBQUssRUFBRSxDQUFDO1FBRFUsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQWpCOUMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFLaEQsa0JBQWEsR0FBRyxLQUFLLENBQUMsQ0FBSyx1Q0FBdUM7UUFDbEUsZ0JBQVcsR0FBRyxLQUFLLENBQUMsQ0FB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Z0JBQWdCLHNiQVVWLHFCQUFxQixvREFDckIsb0JBQW9CLGlIQVBSLFVBQVUsNEdBQ1osVUFBVSxvR0FDUCxVQUFVLG9HQUNSLFVBQVUseUVDckM1QyxpK0tBOEVNO0FEdENKO0lBREMsZ0JBQWdCLEVBQUU7d0RBQzJEOzJGQVZuRSxnQkFBZ0I7a0JBSjVCLFNBQVM7K0JBQ0UsY0FBYzt3R0FPaUMsYUFBYTtzQkFBckUsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ2QsV0FBVztzQkFBbkQsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUNtQixjQUFjO3NCQUF2RSxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDVixjQUFjO3NCQUEzRCxZQUFZO3VCQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBR0osY0FBYztzQkFBckQsZUFBZTt1QkFBQyxxQkFBcUI7Z0JBQ0MsaUJBQWlCO3NCQUF2RCxlQUFlO3VCQUFDLG9CQUFvQjtnQkFFNUIsRUFBRTtzQkFBVixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY2Nlc3NpYmlsaXR5QW5kVGV4dE9ySHRtbFJlcXVpcmVkQ29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50cyc7XG5pbXBvcnQge0xpc3Rib3hMYWJlbERhdGF9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbGlzdGJveC1sYWJlbC1kYXRhJztcbmltcG9ydCB7TGlzdGJveEl0ZW1EYXRhfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2xpc3Rib3gtaXRlbS1kYXRhJztcbmltcG9ydCB7U3RyaW5nVXRpbHN9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC91dGlscy9zdHJpbmctdXRpbHMnO1xuaW1wb3J0IHtMaXN0Ym94TGFiZWxDb21wb25lbnR9IGZyb20gJy4vbGlzdGJveC1sYWJlbC9saXN0Ym94LWxhYmVsLmNvbXBvbmVudCc7XG5pbXBvcnQge0xpc3Rib3hJdGVtQ29tcG9uZW50fSBmcm9tICcuL2xpc3Rib3gtaXRlbS9saXN0Ym94LWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7RGVzeUNvbnRlbnRDaGlsZH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2RlY29yYXRvcnMvZGVzeS1jb250ZW50LWNoaWxkLmRlY29yYXRvcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Rlc3ktbGlzdGJveCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0Ym94LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBMaXN0Ym94Q29tcG9uZW50IGV4dGVuZHMgQWNjZXNzaWJpbGl0eUFuZFRleHRPckh0bWxSZXF1aXJlZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBBZnRlclZpZXdDaGVja2VkIHtcblxuICBzdGF0aWMgcmVhZG9ubHkgS0VZX0NPREVfRVNDID0gJ0VzY2FwZSc7XG5cbiAgQFZpZXdDaGlsZCgnYnV0dG9uJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgbGlzdGJveEJ1dHRvbjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnbGlzdCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBsaXN0Ym94TGlzdDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndG9vbHRpcCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIGxpc3Rib3hDb250ZW50OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkcmVuKCdvcHRpb24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbGlzdGJveE9wdGlvbnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICBARGVzeUNvbnRlbnRDaGlsZCgpXG4gIEBDb250ZW50Q2hpbGRyZW4oTGlzdGJveExhYmVsQ29tcG9uZW50KSBsYWJlbENvbXBvbmVudDogTGlzdGJveExhYmVsQ29tcG9uZW50O1xuICBAQ29udGVudENoaWxkcmVuKExpc3Rib3hJdGVtQ29tcG9uZW50KSBpdGVtQ29tcG9uZW50TGlzdDogUXVlcnlMaXN0PExpc3Rib3hJdGVtQ29tcG9uZW50PjtcblxuICBASW5wdXQoKSBpZDogc3RyaW5nOyAvLyByZXF1aXJlZFxuICBASW5wdXQoKSBpc011bHRpc2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgZG9lc0NoYW5nZUJ1dHRvblRleHQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGxhYmVsOiBMaXN0Ym94TGFiZWxEYXRhO1xuICBASW5wdXQoKSBjbGFzc2VzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsYXNzZXNDb250YWluZXI6IHN0cmluZztcbiAgQElucHV0KCkgY2xhc3Nlc1Rvb2x0aXA6IHN0cmluZztcbiAgQElucHV0KCkgaWRQcmVmaXg6IHN0cmluZztcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGl0ZW1zOiBMaXN0Ym94SXRlbURhdGFbXTtcbiAgQE91dHB1dCgpIGl0ZW1zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgYWN0aXZlSXRlbUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICB0aXBweVByb3BlcnRpZXM6IGFueTsgICAgICAvLyBQcm9waWVkYWRlcyBkZSB0aXBweVxuICBjdXJyZW50Rm9jdXNJbmRleDogbnVtYmVyOyAvLyDDjW5kaWNlIGRlbCBlbGVtZW50byBhY3R1YWwgY29uIGZvY3VzXG4gIGJ1dHRvbkNvbnRlbnRIdG1sOiBzdHJpbmc7IC8vIFB1ZWRlIHNlciBlbCBwYXNhZG8gcG9yIHBhcsOhbWV0cm8gbyBlbCBpdGVtIHNlbGVjY2lvbmFkbyBlbiBjYXNvIGRlIGN1cnJlbnRGb2N1c0luZGV4PXRydWVcbiAgaXNMaXN0VmlzaWJsZSA9IGZhbHNlOyAgICAgLy8gSW5kaWNhIHNpIGxhIGxpc3RhIHNlIGVzdMOhIG1vc3RyYW5kb1xuICBjb250ZW50SW5pdCA9IGZhbHNlOyAgICAgICAvLyBTZSBoYSBpbmljaWFkbyBlbCBjb250ZW5pZG9cbiAgcGVuZGluZ0NoZWNrQWN0aXZlSXRlbXNBZnRlclZpZXdJbml0ID0gZmFsc2U7XG4gIHBlbmRpbmdGb2N1c09uTGlzdCA9IGZhbHNlO1xuXG4gIC8vIGNvbmRpdGlvbmFsSWQgeSBjb25kaXRpb25hbEl0ZW0gcmVwcmVzZW50YW4gZW4gZGVzeS1odG1sIGVsIGl0ZW0gYWN0aXZvLiBBcXXDrSBlcyBtZWpvciBvYnRlbmVybG8gY3VhbmRvIHNlIG5lY2VzaXRhXG4gIGxhc3RBY3RpdmVJdGVtczogeyBpdGVtOiBMaXN0Ym94SXRlbURhdGEsIGluZGV4OiBudW1iZXIgfVtdO1xuICBpdGVtQ29tcG9uZW50U3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW107XG5cbiAgaXRlbUxpc3Q6IExpc3Rib3hJdGVtRGF0YVtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxpc3Rib3hDb250ZW50ICYmIHRoaXMubGlzdGJveENvbnRlbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5pbml0VGlwcHkoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaXRlbUxpc3QgPSB0aGlzLml0ZW1zO1xuXG4gICAgICBpZiAodGhpcy5jb250ZW50SW5pdCkge1xuICAgICAgICB0aGlzLmNoZWNrQWN0aXZlSXRlbXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGVuZGluZ0NoZWNrQWN0aXZlSXRlbXNBZnRlclZpZXdJbml0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cbiAgICBpZiAodGhpcy5wZW5kaW5nQ2hlY2tBY3RpdmVJdGVtc0FmdGVyVmlld0luaXQpIHtcbiAgICAgIHRoaXMuY2hlY2tBY3RpdmVJdGVtcygpO1xuICAgICAgdGhpcy5wZW5kaW5nQ2hlY2tBY3RpdmVJdGVtc0FmdGVyVmlld0luaXQgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY29udGVudEluaXQgPSB0cnVlO1xuICAgIGlmICh0aGlzLml0ZW1Db21wb25lbnRMaXN0ICYmICghdGhpcy5pdGVtcyB8fCB0aGlzLml0ZW1zLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIHRoaXMuc2V0dXBJdGVtQ29tcG9uZW50TGlzdCgpO1xuICAgICAgdGhpcy5pdGVtQ29tcG9uZW50TGlzdC5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0dXBJdGVtQ29tcG9uZW50TGlzdCgpO1xuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGVuZGluZ0ZvY3VzT25MaXN0KSB7XG4gICAgICB0aGlzLnBlbmRpbmdGb2N1c09uTGlzdCA9IGZhbHNlO1xuICAgICAgdGhpcy5saXN0Ym94TGlzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cbiAgXG4gIHByaXZhdGUgc2V0dXBJdGVtQ29tcG9uZW50TGlzdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pdGVtQ29tcG9uZW50U3Vic2NyaXB0aW9ucykge1xuICAgICAgdGhpcy5pdGVtQ29tcG9uZW50U3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB9XG4gICAgdGhpcy5pdGVtQ29tcG9uZW50U3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIHRoaXMuaXRlbUxpc3QgPSBbXTtcbiAgICB0aGlzLml0ZW1Db21wb25lbnRMaXN0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICB0aGlzLml0ZW1MaXN0LnB1c2goaXRlbSk7XG4gICAgfSk7XG4gICAgdGhpcy5pdGVtQ29tcG9uZW50TGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gaXRlbS5pdGVtQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNoZWNrQWN0aXZlSXRlbXMoKSk7XG4gICAgICB0aGlzLml0ZW1Db21wb25lbnRTdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgICB9KTtcbiAgICAgIFxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuY2hlY2tBY3RpdmVJdGVtcygpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBY3RpdmVJdGVtc0RhdGEoKTogeyBpdGVtOiBMaXN0Ym94SXRlbURhdGEsIGluZGV4OiBudW1iZXIgfVtdIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtTGlzdFxuICAgICAgLm1hcCgoaXRlbSwgaW5kZXgpID0+IGl0ZW0uYWN0aXZlID8ge2l0ZW0sIGluZGV4fSA6IG51bGwpXG4gICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gbnVsbCk7XG4gIH1cblxuICBvbkNoYW5nZUl0ZW1DaGVja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tBY3RpdmVJdGVtcygpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgY2hlY2tBY3RpdmVJdGVtcygpOiB2b2lkIHtcbiAgICBsZXQgYWN0aXZlSXRlbXM6IHsgaXRlbTogTGlzdGJveEl0ZW1EYXRhLCBpbmRleDogbnVtYmVyIH1bXSA9IHRoaXMuaXRlbUxpc3RcbiAgICAgIC5tYXAoKGl0ZW0sIGluZGV4KSA9PiBpdGVtLmFjdGl2ZSA/IHtpdGVtLCBpbmRleH0gOiBudWxsKVxuICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0gIT09IG51bGwpO1xuXG4gICAgLy8gc2UgY29tcHJ1ZWJhIHNpIGFsZ8O6biBpdGVtIGhhIGNhbWJpYWRvIHN1IGVzdGFkbyBkZSBhY3RpdmVcbiAgICBsZXQgaGFzQWN0aXZlSXRlbUNoYW5nZSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmxhc3RBY3RpdmVJdGVtcyAmJiBhY3RpdmVJdGVtcy5sZW5ndGggPT09IHRoaXMubGFzdEFjdGl2ZUl0ZW1zLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3RpdmVJdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYWN0aXZlSXRlbXNbaV0uaW5kZXggIT09IHRoaXMubGFzdEFjdGl2ZUl0ZW1zW2ldLmluZGV4KSB7XG4gICAgICAgICAgaGFzQWN0aXZlSXRlbUNoYW5nZSA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGFzQWN0aXZlSXRlbUNoYW5nZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gU2kgaGF5IGNhbWJpb3MgZXh0ZXJub3MgeSBlcyBzZWxlY2Npw7NuIMO6bmljYSwgYW51bGFtb3MgbGEgc2VsZWNjacOzbiBhbnRlcmlvclxuICAgIGlmICh0aGlzLmxhc3RBY3RpdmVJdGVtcyAmJiAhdGhpcy5pc011bHRpc2VsZWN0YWJsZSAmJiBoYXNBY3RpdmVJdGVtQ2hhbmdlKSB7XG4gICAgICBpZiAoYWN0aXZlSXRlbXMubGVuZ3RoICE9PSB0aGlzLmxhc3RBY3RpdmVJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBhY3RpdmVJdGVtIG9mIGFjdGl2ZUl0ZW1zKSB7XG4gICAgICAgICAgaWYgKHRoaXMubGFzdEFjdGl2ZUl0ZW1zLmZpbmRJbmRleChpID0+IGkuaW5kZXggPT09IGFjdGl2ZUl0ZW0uaW5kZXgpID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SXRlbUFjdGl2ZVZhbHVlKGFjdGl2ZUl0ZW0uaW5kZXgsIGZhbHNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhY3RpdmVJdGVtcyA9IGFjdGl2ZUl0ZW1zLmZpbHRlcihhY3RpdmVJdGVtID0+IGFjdGl2ZUl0ZW0uaXRlbS5hY3RpdmUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0QWN0aXZlSXRlbXMgPSBhY3RpdmVJdGVtcztcblxuICAgIC8vIFNlIGNhbWJpYSBlbCBjb250ZW5pZG8gZGVsIGJvdMOzblxuICAgIGlmICh0aGlzLmRvZXNDaGFuZ2VCdXR0b25UZXh0ICYmICF0aGlzLmlzTXVsdGlzZWxlY3RhYmxlICYmIGFjdGl2ZUl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGFjdGl2ZUl0ZW1PcHRpb24gPSB0aGlzLmxpc3Rib3hPcHRpb25zLmZpbmQoKGl0ZW0sIGluZGV4KSA9PiBpbmRleCA9PT0gYWN0aXZlSXRlbXNbMF0uaW5kZXgpO1xuICAgICAgaWYgKGFjdGl2ZUl0ZW1PcHRpb24pIHtcbiAgICAgICAgdGhpcy5idXR0b25Db250ZW50SHRtbCA9IGFjdGl2ZUl0ZW1PcHRpb24ubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYnV0dG9uQ29udGVudEh0bWwgPSB0aGlzLmh0bWwgPyB0aGlzLmh0bWwgOiBudWxsO1xuICAgIH1cblxuICAgIC8vIFNpIGhheSBjYW1iaW9zLCBzZSBlbWl0ZW5cbiAgICBpZiAoaGFzQWN0aXZlSXRlbUNoYW5nZSkge1xuICAgICAgdGhpcy5pdGVtc0NoYW5nZS5lbWl0KHRoaXMuaXRlbUxpc3QpO1xuICAgICAgdGhpcy5hY3RpdmVJdGVtQ2hhbmdlLmVtaXQoYWN0aXZlSXRlbXMubGVuZ3RoID4gMCA/IGFjdGl2ZUl0ZW1zWzBdLml0ZW0gOiBudWxsKTtcbiAgICB9XG4gIH1cblxuICBvbkxpc3RTaG93KCk6IHZvaWQge1xuICAgIHRoaXMuaXNMaXN0VmlzaWJsZSA9IHRydWU7XG4gICAgaWYgKHRoaXMubGlzdGJveExpc3QpIHtcbiAgICAgIHRoaXMucGVuZGluZ0ZvY3VzT25MaXN0ID0gdHJ1ZTtcbiAgICAgIC8vc2V0VGltZW91dCgoKSA9PiB0aGlzLmxpc3Rib3hMaXN0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSk7XG4gICAgfVxuICB9XG5cbiAgb25MaXN0Q2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5pc0xpc3RWaXNpYmxlID0gZmFsc2U7XG4gIH1cblxuICBvbkxpc3RGb2N1cygpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVJdGVtc0RhdGEgPSB0aGlzLmdldEFjdGl2ZUl0ZW1zRGF0YSgpO1xuICAgIGlmIChhY3RpdmVJdGVtc0RhdGEubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgYWN0aXZlRWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0SXRlbUlkKGFjdGl2ZUl0ZW1zRGF0YVswXS5pdGVtLCBhY3RpdmVJdGVtc0RhdGFbMF0uaW5kZXgpKTtcbiAgICAgIGlmIChhY3RpdmVFbGVtKSB7XG4gICAgICAgIGFjdGl2ZUVsZW0uZm9jdXMoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50Rm9jdXNJbmRleCA9IGFjdGl2ZUl0ZW1zRGF0YVswXS5pbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUxpc3QgJiYgdGhpcy5pdGVtTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGb2N1c0luZGV4ID0gMDtcbiAgICAgIGlmICghdGhpcy5pc011bHRpc2VsZWN0YWJsZSkge1xuICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oMCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybignTm8gZWxlbWVudCB0byBmb2N1cycpO1xuICAgIH1cbiAgfVxuXG4gIG1vdmVGb2N1cyhwb3NpdGlvbjogbnVtYmVyLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChwb3NpdGlvbiA+PSAwICYmIHBvc2l0aW9uIDwgdGhpcy5pdGVtTGlzdC5sZW5ndGgpIHtcbiAgICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3RhYmxlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEZvY3VzSW5kZXggPSBwb3NpdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0SXRlbShwb3NpdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25TcGFjZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3RhYmxlKSB7XG4gICAgICB0aGlzLnNlbGVjdEl0ZW0odGhpcy5jdXJyZW50Rm9jdXNJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0SXRlbShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzTXVsdGlzZWxlY3RhYmxlKSB7XG4gICAgICB0aGlzLml0ZW1MaXN0LmZvckVhY2goaXRlbSA9PiB0aGlzLnNldEl0ZW1BY3RpdmVWYWx1ZShpbmRleCwgZmFsc2UpKTtcbiAgICAgIHRoaXMuc2V0SXRlbUFjdGl2ZVZhbHVlKGluZGV4LCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRJdGVtQWN0aXZlVmFsdWUoaW5kZXgsICF0aGlzLml0ZW1MaXN0W2luZGV4XS5hY3RpdmUpO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRGb2N1c0luZGV4ID0gaW5kZXg7XG5cbiAgICB0aGlzLmNoZWNrQWN0aXZlSXRlbXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SXRlbUFjdGl2ZVZhbHVlKGluZGV4OiBudW1iZXIsIGFjdGl2ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLml0ZW1Db21wb25lbnRMaXN0ICE9PSBudWxsICYmIHRoaXMuaXRlbUNvbXBvbmVudExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZGVhY3RpdmF0ZWRJdGVtID0gdGhpcy5pdGVtQ29tcG9uZW50TGlzdC5nZXQoaW5kZXgpO1xuICAgICAgZGVhY3RpdmF0ZWRJdGVtPy5zZXRBY3RpdmUoYWN0aXZlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pdGVtTGlzdFtpbmRleF0uYWN0aXZlID0gYWN0aXZlO1xuICAgIH1cbiAgfVxuXG4gIC8qXG4gICAqIE3DqXRvZG9zIHBhcmEgZmFjaWxpdGFyIGNvbnRlbmlkbyBhbCB0ZW1wbGF0ZVxuICAgKi9cblxuICBnZXRJZFByZWZpeCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkUHJlZml4ID8gdGhpcy5pZFByZWZpeCA6IHRoaXMuaWQgKyAnLWxpc3Rib3gtaXRlbSc7XG4gIH1cblxuICBnZXRJdGVtSWQoaXRlbTogTGlzdGJveEl0ZW1EYXRhLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBsZXQgaXRlbUlkOiBzdHJpbmc7XG4gICAgaWYgKGl0ZW0uaWQpIHtcbiAgICAgIGl0ZW1JZCA9IGl0ZW0uaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1JZCA9IHRoaXMuZ2V0SWRQcmVmaXgoKTtcbiAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgaXRlbUlkICs9IGAtJHtpbmRleH1gO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXRlbUlkO1xuICB9XG5cbiAgaGFzTGFiZWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMubGFiZWwgfHwgdGhpcy5sYWJlbENvbXBvbmVudCk7XG4gIH1cblxuICBnZXRMYWJlbENvbnRlbnQobGFiZWw6IExpc3Rib3hMYWJlbERhdGEpOiBzdHJpbmcge1xuICAgIHJldHVybiBsYWJlbC5odG1sID8gbGFiZWwuaHRtbCA6IGA8cD4keyBTdHJpbmdVdGlscy5lc2NhcGVIdG1sKGxhYmVsLnRleHQpIH08L3A+YDtcbiAgfVxuXG4gIGluaXRUaXBweSgpOiB2b2lkIHtcbiAgICBjb25zdCBjb250ZW50VG9vbHRpcCA9IHRoaXMubGlzdGJveENvbnRlbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBsaXN0Ym94QnV0dG9uRWxlbWVudCA9IHRoaXMubGlzdGJveEJ1dHRvbi5uYXRpdmVFbGVtZW50O1xuICAgIHRoaXMudGlwcHlQcm9wZXJ0aWVzID0geyAgICAgICAgXG4gICAgICBwbGFjZW1lbnQ6ICdib3R0b20tc3RhcnQnLFxuICAgICAgaW5saW5lUG9zaXRpb25pbmc6IHRydWUsICAgICAgICBcbiAgICAgIGNvbnRlbnQ6IGNvbnRlbnRUb29sdGlwLFxuICAgICAgYWxsb3dIVE1MOiB0cnVlLCAvLyBNYWtlIHN1cmUgeW91IGFyZSBzYW5pdGl6aW5nIGFueSB1c2VyIGRhdGEgaWYgcmVuZGVyaW5nIEhUTUwgdG8gcHJldmVudCBYU1MgYXR0YWNrcy5cbiAgICAgIHRyaWdnZXI6ICdjbGljaycsXG4gICAgICBoaWRlT25DbGljazogdHJ1ZSxcbiAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgYXJyb3c6IGZhbHNlLFxuICAgICAgb2Zmc2V0OiBbMCwgLTEwXSxcbiAgICAgIHRoZW1lOiAnJyxcbiAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdoaWRlT25Qb3BwZXJCbHVyJyxcbiAgICAgICAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gICAgICAgICAgZm4oaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIG9uQ3JlYXRlKCkge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlLnBvcHBlci5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5wcm9wcy5oaWRlT25Qb3BwZXJCbHVyICYmXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlbGF0ZWRUYXJnZXQgJiZcbiAgICAgICAgICAgICAgICAgICAgIWluc3RhbmNlLnBvcHBlci5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgbmFtZTogJ2hpZGVPbkVzYycsXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiB0cnVlLFxuICAgICAgICAgIGZuKHtoaWRlfSk6IGFueSB7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSBMaXN0Ym94Q29tcG9uZW50LktFWV9DT0RFX0VTQykge1xuICAgICAgICAgICAgICAgIGhpZGUoKTtcbiAgICAgICAgICAgICAgICBsaXN0Ym94QnV0dG9uRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIG9uU2hvdygpOiB2b2lkIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb25IaWRlKCk6IHZvaWQge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24pO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgcm9sZTogZmFsc2UsXG4gICAgICBhcmlhOiB7XG4gICAgICAgIGNvbnRlbnQ6ICdhdXRvJyxcbiAgICAgIH0sXG4gICAgICBvblNob3c6IHRoaXMub25MaXN0U2hvdy5iaW5kKHRoaXMpLFxuICAgICAgb25IaWRkZW46IHRoaXMub25MaXN0Q2xvc2UuYmluZCh0aGlzKVxuICAgIH07XG4gIH1cbiAgXG59XG4iLCI8ZGl2IFtuZ0NsYXNzXT1cImNsYXNzZXNDb250YWluZXIgPyBjbGFzc2VzQ29udGFpbmVyIDogJ3JlbGF0aXZlJ1wiPlxuICA8ZGl2IFtpZF09XCJpZCArICctbGFiZWwnXCIgW2NsYXNzXT1cIlsnbWItc20nLCBsYWJlbENvbXBvbmVudD8uY2xhc3NlcywgbGFiZWw/LmNsYXNzZXNdIHwgbWFrZUh0bWxMaXN0XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBsYWJlbENvbXBvbmVudCwgaHRtbDogbGFiZWwgPyBnZXRMYWJlbENvbnRlbnQobGFiZWwpIDogbnVsbCB9XCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICA8YnV0dG9uICNidXR0b24gW2lkXT1cImlkICsgJy1idXR0b24nXCJcbiAgICAgICAgICBbY2xhc3NdPVwiWydjLWxpc3Rib3gnLCBjbGFzc2VzXSB8IG1ha2VIdG1sTGlzdFwiXG4gICAgICAgICAgbmd4VGlwcHkgW3RpcHB5UHJvcHNdPVwidGlwcHlQcm9wZXJ0aWVzXCJcbiAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIltoYXNMYWJlbCgpID8gaWQgKyAnLWxhYmVsJyA6IG51bGwsIGlkICsgJy1idXR0b24nXSB8IG1ha2VIdG1sTGlzdFwiXG4gICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWQgPyAnZGlzYWJsZWQnIDogbnVsbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZCA/ICd0cnVlJyA6IChhcmlhRGlzYWJsZWQgPyBhcmlhRGlzYWJsZWQgOiBudWxsKVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1yb2xlXSA9IFwicm9sZSA/IHJvbGUgOiBudWxsXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXSA9IFwiYXJpYUxhYmVsID8gYXJpYUxhYmVsIDogbnVsbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV0gPSBcImFyaWFEZXNjcmliZWRCeSA/IGFyaWFEZXNjcmliZWRCeSA6IG51bGxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXSA9IFwiYXJpYUhpZGRlbiA/IGFyaWFIaWRkZW4gOiBudWxsXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXSA9IFwiYXJpYUNvbnRyb2xzID8gYXJpYUNvbnRyb2xzIDogbnVsbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XSA9IFwiYXJpYUN1cnJlbnQgPyBhcmlhQ3VycmVudCA6IG51bGxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGl2ZV0gPSBcImFyaWFMaXZlID8gYXJpYUxpdmUgOiBudWxsXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXSA9IFwiYXJpYUV4cGFuZGVkID8gYXJpYUV4cGFuZGVkIDogbnVsbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1lcnJvck1lc3NhZ2VdID0gXCJhcmlhRXJyb3JNZXNzYWdlID8gYXJpYUVycm9yTWVzc2FnZSA6IG51bGxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtaGFzcHB1cF0gPSBcImFyaWFIYXNQb3B1cCA/IGFyaWFIYXNQb3B1cCA6IG51bGxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtdGFiaW5kZXhdID0gXCJ0YWJpbmRleCA/IHRhYmluZGV4IDogbnVsbFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImlubGluZS1mbGV4IHNlbGYtY2VudGVyIG1heC13LXhzIGFsaWduLW1pZGRsZSB0cnVuY2F0ZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGh0bWw6IGJ1dHRvbkNvbnRlbnRIdG1sLCB0ZXh0OiB0ZXh0IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9zcGFuPlxuICAgIDxzdmcgY2xhc3M9XCJpbmxpbmUtYmxvY2sgLW1yLTIgIGFsaWduLW1pZGRsZSAtbXktcHhcIiB2aWV3Qm94PVwiMCAwIDk2IDk2XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGZvY3VzYWJsZT1cImZhbHNlXCIgd2lkdGg9XCIxLjVlbVwiIGhlaWdodD1cIjEuNWVtXCI+PGc+PHBhdGggZD1cIk00Ni43MSA1OC4wMzdhMS44MjMgMS44MjMgMCAwMDIuNTgxIDBMNjIuMDQ4IDQ1LjI4YTEuODIzIDEuODIzIDAgMDAtMS4yOS0zLjExM0gzNS4yNDNhMS44MjMgMS44MjMgMCAwMC0xLjI5MSAzLjExM3pcIi8+PC9nPjwvc3ZnPlxuICA8L2J1dHRvbj5cbiAgPGRpdiAjdG9vbHRpcCBbY2xhc3NdPVwiWydjLWxpc3Rib3hfX3Rvb2x0aXAgLW1sLXNtIG10LTIgYm9yZGVyIGJvcmRlci1uZXV0cmFsLWJhc2Ugc2hhZG93LW1kIGJnLXdoaXRlJywgY2xhc3Nlc1Rvb2x0aXBdIHwgbWFrZUh0bWxMaXN0XCI+XG4gICAgPHVsICpuZ0lmPVwiaXRlbUxpc3RcIlxuICAgICAgICAjbGlzdCBbaWRdPVwiaWRcIlxuICAgICAgICAoZm9jdXMpPVwib25MaXN0Rm9jdXMoKVwiXG4gICAgICAgIChrZXlkb3duLmFycm93VXApPVwibW92ZUZvY3VzKGN1cnJlbnRGb2N1c0luZGV4IC0gMSwgJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duLmFycm93RG93bik9XCJtb3ZlRm9jdXMoY3VycmVudEZvY3VzSW5kZXggKyAxLCAkZXZlbnQpXCJcbiAgICAgICAgKGtleWRvd24uaG9tZSk9XCJtb3ZlRm9jdXMoMCwgJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duLmVuZCk9XCJtb3ZlRm9jdXMoaXRlbXMubGVuZ3RoIC0gMSwgJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duLnNwYWNlKT1cIm9uU3BhY2UoJGV2ZW50KVwiXG4gICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGNsYXNzPVwidGV4dC1zbSBvdXRsaW5lLW5vbmVcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiaGFzTGFiZWwoKSA/IGlkIDogKGFyaWFMYWJlbGxlZEJ5ID8gYXJpYUxhYmVsbGVkQnkgOiBudWxsKVwiXG4gICAgICAgIFthdHRyLmFyaWEtbXVsdGlzZWxlY3RhYmxlXT1cImlzTXVsdGlzZWxlY3RhYmxlID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiYXJpYURpc2FibGVkID8gYXJpYURpc2FibGVkIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdID0gXCJhcmlhTGFiZWwgPyBhcmlhTGFiZWwgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV0gPSBcImFyaWFEZXNjcmliZWRCeSA/IGFyaWFEZXNjcmliZWRCeSA6IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl0gPSBcImFyaWFIaWRkZW4gPyBhcmlhSGlkZGVuIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdID0gXCJhcmlhQ29udHJvbHMgPyBhcmlhQ29udHJvbHMgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XSA9IFwiYXJpYUN1cnJlbnQgPyBhcmlhQ3VycmVudCA6IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLWxpdmVdID0gXCJhcmlhTGl2ZSA/IGFyaWFMaXZlIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdID0gXCJhcmlhRXhwYW5kZWQgPyBhcmlhRXhwYW5kZWQgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1lcnJvcm1lc3NhZ2VdID0gXCJhcmlhRXJyb3JNZXNzYWdlID8gYXJpYUVycm9yTWVzc2FnZSA6IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXSA9IFwiYXJpYUhhc1BvcHVwID8gYXJpYUhhc1BvcHVwIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF0gPSBcImxhc3RBY3RpdmVJdGVtcyAmJiBsYXN0QWN0aXZlSXRlbXMubGVuZ3RoID4gMCA/IGdldEl0ZW1JZChsYXN0QWN0aXZlSXRlbXNbMF0uaXRlbSwgbGFzdEFjdGl2ZUl0ZW1zWzBdLmluZGV4KSA6IG51bGxcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbUxpc3Q7IGluZGV4IGFzIGluZGV4XCI+XG4gICAgICAgIDxsaSAjb3B0aW9uICpuZ0lmPVwiaXRlbVwiIHJvbGU9XCJvcHRpb25cIiAoY2xpY2spPVwic2VsZWN0SXRlbShpbmRleClcIlxuICAgICAgICAgICAgW2NsYXNzXT1cIlsnZmxleCBpdGVtcy1jZW50ZXIgcHItYmFzZSBwbC1sZyBweS1zbSBob3ZlcjpiZy1wcmltYXJ5LWJhc2UgaG92ZXI6dGV4dC13aGl0ZSBmb2N1czpiZy13YXJuaW5nLWJhc2UgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnNoYWRvdy1vdXRsaW5lLWZvY3VzIGZvY3VzOnRleHQtYmxhY2snLCBpdGVtLmNsYXNzZXNdIHwgbWFrZUh0bWxMaXN0XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnZm9jdXNlZCc6IGluZGV4ID09PSBjdXJyZW50Rm9jdXNJbmRleH1cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtLmFjdGl2ZSA/ICd0cnVlJyA6IChpdGVtLmFyaWFMYWJlbCA/IGl0ZW0uYXJpYUxhYmVsIDogbnVsbClcIlxuICAgICAgICAgICAgW2lkXT1cImdldEl0ZW1JZChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiaXRlbS50aXRsZSA/IGl0ZW0udGl0bGUgOiBudWxsXCJcbiAgICAgICAgICAgIChkZXN5QXR0cmlidXRlQ2hhbmdlKT1cIm9uQ2hhbmdlSXRlbUNoZWNrZWQoKVwiIFthdHRyaWJ1dGVzVG9DaGVja109XCInYXJpYS1zZWxlY3RlZCdcIiBbZGVzeUF0dHJpYnV0ZUNoYW5nZUVuYWJsZWRdPVwiaXRlbXMgJiYgaXRlbXMubGVuZ3RoID4gMFwiXG5cbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaXRlbS5hcmlhRGVzY3JpYmVkQnkgPyBpdGVtLmFyaWFEZXNjcmliZWRCeSA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dID0gXCJpdGVtLmFyaWFIaWRkZW4gPyBpdGVtLmFyaWFIaWRkZW4gOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaXRlbS5hcmlhQ29udHJvbHMgPyBpdGVtLmFyaWFDb250cm9scyA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XSA9IFwiaXRlbS5hcmlhQ3VycmVudCA/IGl0ZW0uYXJpYUN1cnJlbnQgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGl2ZV0gPSBcIml0ZW0uYXJpYUxpdmUgPyBpdGVtLmFyaWFMaXZlIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIml0ZW0uYXJpYUV4cGFuZGVkID8gaXRlbS5hcmlhRXhwYW5kZWQgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXJyb3JtZXNzYWdlXT1cIml0ZW0uYXJpYUVycm9yTWVzc2FnZSA/IGl0ZW0uYXJpYUVycm9yTWVzc2FnZSA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF0gPSBcIml0ZW0uYXJpYUhhc1BvcHVwID8gaXRlbS5hcmlhSGFzUG9wdXAgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtdGFiaW5kZXhdID0gXCJpdGVtLnRhYmluZGV4ID8gaXRlbS50YWJpbmRleCA6IG51bGxcIlxuXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpdGVtLmFjdGl2ZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IHRlbXBsYXRlOiBpdGVtWydjb250ZW50J10sIGh0bWw6IGl0ZW0uaHRtbCwgdGV4dDogaXRlbS50ZXh0IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9saT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuPC9kaXY+Il19
@@ -52,9 +52,9 @@ export class PillComponent extends AccessibilityAndContentRequiredComponent {
52
52
  PillComponent.TYPE_A = 'a';
53
53
  PillComponent.TYPE_BUTTON = 'button';
54
54
  PillComponent.TYPE_SPAN = 'span';
55
- PillComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: PillComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
56
- PillComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: PillComponent, selector: "desy-pill", inputs: { type: "type", href: "href", target: "target", routerLink: "routerLink", routerLinkActiveClasses: "routerLinkActiveClasses", classes: "classes", id: "id" }, outputs: { clickEvent: "clickEvent" }, host: { properties: { "attr.tabindex": "this.hostTabIndex" } }, usesInheritance: true, ngImport: i0, template: "<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>\n\n<ng-container [ngSwitch]=\"getType()\">\n <ng-container *ngSwitchCase=\"staticElementTypeA\">\n <!-- routerLink modifica href, por eso se duplica para que no convivan en un mismo html -->\n <a *ngIf=\"routerLink\" data-module=\"c-pill\" (click)=\"onClick($event)\"\n [desyInnerContent]=\"html ? html : text\" [isHtml]=\"isHtml\" [deleteContentIfEmpty]=\"false\"\n [routerLink]=\"routerLink\" [routerLinkActive]=\"routerLinkActiveClasses ? routerLinkActiveClasses : []\"\n [class]=\"getClassNames()\"\n [attr.id]=\"id ? id : null\"\n [attr.role]=\"role ? role : null\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : 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.tabindex]=\"tabindex ? tabindex : null\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </a>\n\n <a *ngIf=\"!routerLink\" data-module=\"c-pill\" (click)=\"onClick($event)\"\n [desyInnerContent]=\"html ? html : text\" [isHtml]=\"isHtml\" [deleteContentIfEmpty]=\"false\"\n [href]=\"href | externalHref\"\n [class]=\"getClassNames()\"\n [attr.target]=\"target ? target : null\"\n [attr.id]=\"id ? id : null\"\n [attr.role]=\"role ? role : null\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : 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.tabindex]=\"tabindex ? tabindex : null\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </a>\n </ng-container>\n\n <button *ngSwitchCase=\"staticElementTypeButton\" data-module=\"c-pill\" (click)=\"onClick($event)\"\n [desyInnerContent]=\"html ? html : text\" [isHtml]=\"isHtml\" [deleteContentIfEmpty]=\"false\"\n [class]=\"getClassNames()\"\n [attr.id]=\"id ? id : null\"\n [attr.role]=\"role ? role : null\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : 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.tabindex]=\"tabindex ? tabindex : null\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </button>\n\n <span *ngSwitchCase=\"staticElementTypeSpan\" data-module=\"c-pill\" (click)=\"onClick($event)\"\n [desyInnerContent]=\"html ? html : text\" [isHtml]=\"isHtml\" [deleteContentIfEmpty]=\"false\"\n [class]=\"getClassNames()\"\n [attr.id]=\"id ? id : null\"\n [attr.role]=\"role ? role : null\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : 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.tabindex]=\"tabindex ? tabindex : null\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </span>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i3.InnerContentDirective, selector: "[desyInnerContent]", inputs: ["desyInnerContent", "isHtml", "deleteContentIfEmpty"] }, { kind: "pipe", type: i4.ExternalHrefPipe, name: "externalHref" }] });
57
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: PillComponent, decorators: [{
55
+ PillComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PillComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
56
+ PillComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: PillComponent, selector: "desy-pill", inputs: { type: "type", href: "href", target: "target", routerLink: "routerLink", routerLinkActiveClasses: "routerLinkActiveClasses", classes: "classes", id: "id" }, outputs: { clickEvent: "clickEvent" }, host: { properties: { "attr.tabindex": "this.hostTabIndex" } }, usesInheritance: true, ngImport: i0, template: "<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>\n\n<ng-container [ngSwitch]=\"getType()\">\n <ng-container *ngSwitchCase=\"staticElementTypeA\">\n <!-- routerLink modifica href, por eso se duplica para que no convivan en un mismo html -->\n <a *ngIf=\"routerLink\" data-module=\"c-pill\" (click)=\"onClick($event)\"\n [desyInnerContent]=\"html ? html : text\" [isHtml]=\"isHtml\" [deleteContentIfEmpty]=\"false\"\n [routerLink]=\"routerLink\" [routerLinkActive]=\"routerLinkActiveClasses ? routerLinkActiveClasses : []\"\n [class]=\"getClassNames()\"\n [attr.id]=\"id ? id : null\"\n [attr.role]=\"role ? role : null\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : 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.tabindex]=\"tabindex ? tabindex : null\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </a>\n\n <a *ngIf=\"!routerLink\" data-module=\"c-pill\" (click)=\"onClick($event)\"\n [desyInnerContent]=\"html ? html : text\" [isHtml]=\"isHtml\" [deleteContentIfEmpty]=\"false\"\n [href]=\"href | externalHref\"\n [class]=\"getClassNames()\"\n [attr.target]=\"target ? target : null\"\n [attr.id]=\"id ? id : null\"\n [attr.role]=\"role ? role : null\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : 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.tabindex]=\"tabindex ? tabindex : null\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </a>\n </ng-container>\n\n <button *ngSwitchCase=\"staticElementTypeButton\" data-module=\"c-pill\" (click)=\"onClick($event)\"\n [desyInnerContent]=\"html ? html : text\" [isHtml]=\"isHtml\" [deleteContentIfEmpty]=\"false\"\n [class]=\"getClassNames()\"\n [attr.id]=\"id ? id : null\"\n [attr.role]=\"role ? role : null\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : 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.tabindex]=\"tabindex ? tabindex : null\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </button>\n\n <span *ngSwitchCase=\"staticElementTypeSpan\" data-module=\"c-pill\" (click)=\"onClick($event)\"\n [desyInnerContent]=\"html ? html : text\" [isHtml]=\"isHtml\" [deleteContentIfEmpty]=\"false\"\n [class]=\"getClassNames()\"\n [attr.id]=\"id ? id : null\"\n [attr.role]=\"role ? role : null\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : 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.tabindex]=\"tabindex ? tabindex : null\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </span>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i3.InnerContentDirective, selector: "[desyInnerContent]", inputs: ["desyInnerContent", "isHtml", "deleteContentIfEmpty"] }, { kind: "pipe", type: i4.ExternalHrefPipe, name: "externalHref" }] });
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PillComponent, decorators: [{
58
58
  type: Component,
59
59
  args: [{ selector: 'desy-pill', template: "<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>\n\n<ng-container [ngSwitch]=\"getType()\">\n <ng-container *ngSwitchCase=\"staticElementTypeA\">\n <!-- routerLink modifica href, por eso se duplica para que no convivan en un mismo html -->\n <a *ngIf=\"routerLink\" data-module=\"c-pill\" (click)=\"onClick($event)\"\n [desyInnerContent]=\"html ? html : text\" [isHtml]=\"isHtml\" [deleteContentIfEmpty]=\"false\"\n [routerLink]=\"routerLink\" [routerLinkActive]=\"routerLinkActiveClasses ? routerLinkActiveClasses : []\"\n [class]=\"getClassNames()\"\n [attr.id]=\"id ? id : null\"\n [attr.role]=\"role ? role : null\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : 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.tabindex]=\"tabindex ? tabindex : null\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </a>\n\n <a *ngIf=\"!routerLink\" data-module=\"c-pill\" (click)=\"onClick($event)\"\n [desyInnerContent]=\"html ? html : text\" [isHtml]=\"isHtml\" [deleteContentIfEmpty]=\"false\"\n [href]=\"href | externalHref\"\n [class]=\"getClassNames()\"\n [attr.target]=\"target ? target : null\"\n [attr.id]=\"id ? id : null\"\n [attr.role]=\"role ? role : null\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : 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.tabindex]=\"tabindex ? tabindex : null\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </a>\n </ng-container>\n\n <button *ngSwitchCase=\"staticElementTypeButton\" data-module=\"c-pill\" (click)=\"onClick($event)\"\n [desyInnerContent]=\"html ? html : text\" [isHtml]=\"isHtml\" [deleteContentIfEmpty]=\"false\"\n [class]=\"getClassNames()\"\n [attr.id]=\"id ? id : null\"\n [attr.role]=\"role ? role : null\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : 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.tabindex]=\"tabindex ? tabindex : null\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </button>\n\n <span *ngSwitchCase=\"staticElementTypeSpan\" data-module=\"c-pill\" (click)=\"onClick($event)\"\n [desyInnerContent]=\"html ? html : text\" [isHtml]=\"isHtml\" [deleteContentIfEmpty]=\"false\"\n [class]=\"getClassNames()\"\n [attr.id]=\"id ? id : null\"\n [attr.role]=\"role ? role : null\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : 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.tabindex]=\"tabindex ? tabindex : null\">\n <ng-container *ngTemplateOutlet=\"contentTemplate\"></ng-container>\n </span>\n</ng-container>\n" }]
60
60
  }], propDecorators: { type: [{
@@ -3,9 +3,9 @@ import { AccessibilityComponent } from '../../../../shared/components';
3
3
  import * as i0 from "@angular/core";
4
4
  export class ToggleOffStateComponent extends AccessibilityComponent {
5
5
  }
6
- ToggleOffStateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ToggleOffStateComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
7
- ToggleOffStateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: ToggleOffStateComponent, selector: "desy-toggle-off-state", inputs: { classes: "classes" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["contentTemplateOffState"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #contentTemplateOffState>\n <ng-content></ng-content>\n</ng-template>" });
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ToggleOffStateComponent, decorators: [{
6
+ ToggleOffStateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ToggleOffStateComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
7
+ ToggleOffStateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ToggleOffStateComponent, selector: "desy-toggle-off-state", inputs: { classes: "classes" }, viewQueries: [{ propertyName: "content", first: true, predicate: ["contentTemplateOffState"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #contentTemplateOffState>\n <ng-content></ng-content>\n</ng-template>" });
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ToggleOffStateComponent, decorators: [{
9
9
  type: Component,
10
10
  args: [{ selector: 'desy-toggle-off-state', template: "<ng-template #contentTemplateOffState>\n <ng-content></ng-content>\n</ng-template>" }]
11
11
  }], propDecorators: { content: [{