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