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,265 +1,265 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { Component, ContentChildren, ElementRef, EventEmitter, Input, Output, ViewChild, ViewChildren } from '@angular/core';
|
|
3
|
-
import { AccessibilityAndTextOrHtmlRequiredComponent } from '../../../shared/components';
|
|
4
|
-
import { StringUtils } from '../../../shared/utils/string-utils';
|
|
5
|
-
import { ListboxLabelComponent } from './listbox-label/listbox-label.component';
|
|
6
|
-
import { ListboxItemComponent } from './listbox-item/listbox-item.component';
|
|
7
|
-
import { DesyContentChild } from '../../../shared/decorators/desy-content-child.decorator';
|
|
8
|
-
export class ListboxComponent extends AccessibilityAndTextOrHtmlRequiredComponent {
|
|
9
|
-
constructor() {
|
|
10
|
-
super(...arguments);
|
|
11
|
-
this.itemsChange = new EventEmitter();
|
|
12
|
-
this.activeItemChange = new EventEmitter();
|
|
13
|
-
this.isListVisible = false; // Indica si la lista se está mostrando
|
|
14
|
-
}
|
|
15
|
-
ngOnInit() {
|
|
16
|
-
const listboxButtonElement = this.listboxButton.nativeElement;
|
|
17
|
-
if (this.listboxContent && this.listboxContent.nativeElement) {
|
|
18
|
-
const contentTooltip = this.listboxContent.nativeElement;
|
|
19
|
-
this.tippyProperties = {
|
|
20
|
-
placement: 'bottom-start',
|
|
21
|
-
inlinePositioning: true,
|
|
22
|
-
content: contentTooltip,
|
|
23
|
-
allowHTML: true,
|
|
24
|
-
trigger: 'click',
|
|
25
|
-
hideOnClick: true,
|
|
26
|
-
interactive: true,
|
|
27
|
-
arrow: false,
|
|
28
|
-
offset: [0, -10],
|
|
29
|
-
theme: '',
|
|
30
|
-
plugins: [
|
|
31
|
-
{
|
|
32
|
-
name: 'hideOnPopperBlur',
|
|
33
|
-
defaultValue: true,
|
|
34
|
-
fn(instance) {
|
|
35
|
-
return {
|
|
36
|
-
onCreate() {
|
|
37
|
-
instance.popper.addEventListener('focusout', (event) => {
|
|
38
|
-
if (instance.props.hideOnPopperBlur &&
|
|
39
|
-
event.relatedTarget &&
|
|
40
|
-
!instance.popper.contains(event.relatedTarget)) {
|
|
41
|
-
instance.hide();
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
},
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
name: 'hideOnEsc',
|
|
50
|
-
defaultValue: true,
|
|
51
|
-
fn({ hide }) {
|
|
52
|
-
function onKeyDown(event) {
|
|
53
|
-
if (event.key === ListboxComponent.KEY_CODE_ESC) {
|
|
54
|
-
hide();
|
|
55
|
-
listboxButtonElement.focus();
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
return {
|
|
59
|
-
onShow() {
|
|
60
|
-
document.addEventListener('keydown', onKeyDown);
|
|
61
|
-
},
|
|
62
|
-
onHide() {
|
|
63
|
-
document.removeEventListener('keydown', onKeyDown);
|
|
64
|
-
},
|
|
65
|
-
};
|
|
66
|
-
},
|
|
67
|
-
}
|
|
68
|
-
],
|
|
69
|
-
role: false,
|
|
70
|
-
aria: {
|
|
71
|
-
content: 'auto',
|
|
72
|
-
},
|
|
73
|
-
onShow: this.onListShow.bind(this),
|
|
74
|
-
onHidden: this.onListClose.bind(this)
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
ngOnChanges() {
|
|
79
|
-
setTimeout(() => {
|
|
80
|
-
if (this.itemComponentList && this.itemComponentList.length > 0) {
|
|
81
|
-
if (this.itemComponentSubscriptions) {
|
|
82
|
-
this.itemComponentSubscriptions.forEach(s => s.unsubscribe());
|
|
83
|
-
}
|
|
84
|
-
this.itemComponentSubscriptions = [];
|
|
85
|
-
this.itemList = [];
|
|
86
|
-
this.itemComponentList.forEach(item => {
|
|
87
|
-
const subscription = item.itemChange.subscribe(() => this.checkActiveItems());
|
|
88
|
-
this.itemComponentSubscriptions.push(subscription);
|
|
89
|
-
this.itemList.push(item);
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
this.itemList = this.items;
|
|
94
|
-
}
|
|
95
|
-
this.checkActiveItems();
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
ngDoCheck() {
|
|
99
|
-
if (!this.items || !this.itemList) {
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
this.checkActiveItems();
|
|
103
|
-
}
|
|
104
|
-
getActiveItemsData() {
|
|
105
|
-
return this.itemList
|
|
106
|
-
.map((item, index) => item.active ? { item, index } : null)
|
|
107
|
-
.filter(item => item !== null);
|
|
108
|
-
}
|
|
109
|
-
checkActiveItems() {
|
|
110
|
-
let activeItems = this.itemList
|
|
111
|
-
.map((item, index) => item.active ? { item, index } : null)
|
|
112
|
-
.filter(item => item !== null);
|
|
113
|
-
let hasActiveItemChange = false;
|
|
114
|
-
if (this.lastActiveItems && activeItems.length === this.lastActiveItems.length) {
|
|
115
|
-
for (let i = 0; i < activeItems.length; i++) {
|
|
116
|
-
if (activeItems[i].index !== this.lastActiveItems[i].index) {
|
|
117
|
-
hasActiveItemChange = true;
|
|
118
|
-
break;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
hasActiveItemChange = true;
|
|
124
|
-
}
|
|
125
|
-
// Si hay cambios externos y es selección única, anulamos la selección anterior
|
|
126
|
-
if (this.lastActiveItems && !this.isMultiselectable && hasActiveItemChange) {
|
|
127
|
-
if (activeItems.length !== this.lastActiveItems.length) {
|
|
128
|
-
for (const newItem of activeItems) {
|
|
129
|
-
if (this.lastActiveItems.findIndex(i => i.index === newItem.index) >= 0) {
|
|
130
|
-
newItem.item.active = false;
|
|
131
|
-
}
|
|
132
|
-
activeItems = activeItems.filter(item => item.item.active);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
this.lastActiveItems = activeItems;
|
|
137
|
-
// Se cambia el contenido del botón
|
|
138
|
-
if (this.doesChangeButtonText && !this.isMultiselectable && activeItems.length > 0) {
|
|
139
|
-
const activeItemOption = this.listboxOptions.find((item, index) => index === activeItems[0].index);
|
|
140
|
-
if (activeItemOption) {
|
|
141
|
-
this.buttonContentHtml = activeItemOption.nativeElement.innerHTML;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
this.buttonContentHtml = this.html ? this.html : null;
|
|
146
|
-
}
|
|
147
|
-
// Si hay cambios, se emiten
|
|
148
|
-
if (hasActiveItemChange) {
|
|
149
|
-
this.itemsChange.emit(this.itemList);
|
|
150
|
-
this.activeItemChange.emit(activeItems.length > 0 ? activeItems[0].item : null);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
onListShow() {
|
|
154
|
-
this.isListVisible = true;
|
|
155
|
-
if (this.listboxList) {
|
|
156
|
-
setTimeout(() => this.listboxList.nativeElement.focus());
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
onListClose() {
|
|
160
|
-
this.isListVisible = false;
|
|
161
|
-
}
|
|
162
|
-
onListFocus() {
|
|
163
|
-
const activeItemsData = this.getActiveItemsData();
|
|
164
|
-
if (activeItemsData.length > 0) {
|
|
165
|
-
const activeElem = document.getElementById(this.getItemId(activeItemsData[0].item, activeItemsData[0].index));
|
|
166
|
-
if (activeElem) {
|
|
167
|
-
activeElem.focus();
|
|
168
|
-
this.currentFocusIndex = activeItemsData[0].index;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
else if (this.itemList && this.itemList.length > 0) {
|
|
172
|
-
this.currentFocusIndex = 0;
|
|
173
|
-
if (!this.isMultiselectable) {
|
|
174
|
-
this.selectItem(0);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
else {
|
|
178
|
-
console.warn('No element to focus');
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
moveFocus(position, event) {
|
|
182
|
-
event.preventDefault();
|
|
183
|
-
if (position >= 0 && position < this.itemList.length) {
|
|
184
|
-
if (this.isMultiselectable) {
|
|
185
|
-
this.currentFocusIndex = position;
|
|
186
|
-
}
|
|
187
|
-
else {
|
|
188
|
-
this.selectItem(position);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
onSpace(event) {
|
|
193
|
-
event.preventDefault();
|
|
194
|
-
if (this.isMultiselectable) {
|
|
195
|
-
this.selectItem(this.currentFocusIndex);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
selectItem(index) {
|
|
199
|
-
if (!this.isMultiselectable) {
|
|
200
|
-
this.itemList.forEach(item => item.active = false);
|
|
201
|
-
this.itemList[index].active = true;
|
|
202
|
-
}
|
|
203
|
-
else {
|
|
204
|
-
this.itemList[index].active = !this.itemList[index].active;
|
|
205
|
-
}
|
|
206
|
-
this.currentFocusIndex = index;
|
|
207
|
-
this.checkActiveItems();
|
|
208
|
-
}
|
|
209
|
-
/*
|
|
210
|
-
* Métodos para facilitar contenido al template
|
|
211
|
-
*/
|
|
212
|
-
getIdPrefix() {
|
|
213
|
-
return this.idPrefix ? this.idPrefix : this.id + '-listbox-item';
|
|
214
|
-
}
|
|
215
|
-
getItemId(item, index) {
|
|
216
|
-
let itemId;
|
|
217
|
-
if (item.id) {
|
|
218
|
-
itemId = item.id;
|
|
219
|
-
}
|
|
220
|
-
else {
|
|
221
|
-
itemId = this.getIdPrefix();
|
|
222
|
-
if (index > 0) {
|
|
223
|
-
itemId += `-${index}`;
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
return itemId;
|
|
227
|
-
}
|
|
228
|
-
hasLabel() {
|
|
229
|
-
return !!(this.label || this.labelComponent);
|
|
230
|
-
}
|
|
231
|
-
getLabelContent(label) {
|
|
232
|
-
return label.html ? label.html : `<p>${StringUtils.escapeHtml(label.text)}</p>`;
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
ListboxComponent.KEY_CODE_ESC = 'Escape';
|
|
236
|
-
ListboxComponent.decorators = [
|
|
237
|
-
{ type: Component, args: [{
|
|
238
|
-
selector: 'desy-listbox',
|
|
239
|
-
template: "<div [ngClass]=\"classesContainer ? classesContainer : 'relative'\">\
|
|
240
|
-
},] }
|
|
241
|
-
];
|
|
242
|
-
ListboxComponent.propDecorators = {
|
|
243
|
-
listboxButton: [{ type: ViewChild, args: ['button', { read: ElementRef, static: true },] }],
|
|
244
|
-
listboxList: [{ type: ViewChild, args: ['list', { read: ElementRef },] }],
|
|
245
|
-
listboxContent: [{ type: ViewChild, args: ['tooltip', { read: ElementRef, static: true },] }],
|
|
246
|
-
listboxOptions: [{ type: ViewChildren, args: ['option', { read: ElementRef },] }],
|
|
247
|
-
labelComponent: [{ type: ContentChildren, args: [ListboxLabelComponent,] }],
|
|
248
|
-
itemComponentList: [{ type: ContentChildren, args: [ListboxItemComponent,] }],
|
|
249
|
-
id: [{ type: Input }],
|
|
250
|
-
isMultiselectable: [{ type: Input }],
|
|
251
|
-
doesChangeButtonText: [{ type: Input }],
|
|
252
|
-
label: [{ type: Input }],
|
|
253
|
-
classes: [{ type: Input }],
|
|
254
|
-
classesContainer: [{ type: Input }],
|
|
255
|
-
classesTooltip: [{ type: Input }],
|
|
256
|
-
idPrefix: [{ type: Input }],
|
|
257
|
-
disabled: [{ type: Input }],
|
|
258
|
-
items: [{ type: Input }],
|
|
259
|
-
itemsChange: [{ type: Output }],
|
|
260
|
-
activeItemChange: [{ type: Output }]
|
|
261
|
-
};
|
|
262
|
-
__decorate([
|
|
263
|
-
DesyContentChild()
|
|
264
|
-
], ListboxComponent.prototype, "labelComponent", void 0);
|
|
265
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdGJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LWJ1dHRvbnMvY29tcG9uZW50cy9saXN0Ym94L2xpc3Rib3guY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUVaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNULFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsMkNBQTJDLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUd2RixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDL0QsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDOUUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFFM0UsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0seURBQXlELENBQUM7QUFNekYsTUFBTSxPQUFPLGdCQUFpQixTQUFRLDJDQUEyQztJQUpqRjs7UUEyQlksZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFLaEQsa0JBQWEsR0FBRyxLQUFLLENBQUMsQ0FBSyx1Q0FBdUM7SUF3UHBFLENBQUM7SUEvT0MsUUFBUTtRQUNOLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7UUFDOUQsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFO1lBQzVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBNEIsQ0FBQztZQUN4RSxJQUFJLENBQUMsZUFBZSxH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QztJQUVELFFBQVE7UUFDTixPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBdUI7UUFDckMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFPLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBRSxNQUFNLENBQUM7SUFDcEYsQ0FBQzs7QUFsUmUsNkJBQVksR0FBRyxRQUFRLENBQUM7O1lBTnpDLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsY0FBYztnQkFDeEIsazlLQUF1QzthQUN4Qzs7OzRCQUtFLFNBQVMsU0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7MEJBQ3RELFNBQVMsU0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFOzZCQUN0QyxTQUFTLFNBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzZCQUN2RCxZQUFZLFNBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTs2QkFHM0MsZUFBZSxTQUFDLHFCQUFxQjtnQ0FDckMsZUFBZSxTQUFDLG9CQUFvQjtpQkFFcEMsS0FBSztnQ0FDTCxLQUFLO21DQUNMLEtBQUs7b0JBQ0wsS0FBSztzQkFDTCxLQUFLOytCQUNMLEtBQUs7NkJBQ0wsS0FBSzt1QkFDTCxLQUFLO3VCQUNMLEtBQUs7b0JBQ0wsS0FBSzswQkFDTCxNQUFNOytCQUNOLE1BQU07O0FBZGlDO0lBRHZDLGdCQUFnQixFQUFFO3dEQUMyRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZHJlbiwgRG9DaGVjayxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0QmluZGluZyxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0FjY2Vzc2liaWxpdHlBbmRUZXh0T3JIdG1sUmVxdWlyZWRDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzJztcclxuaW1wb3J0IHtMaXN0Ym94TGFiZWxEYXRhfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2xpc3Rib3gtbGFiZWwtZGF0YSc7XHJcbmltcG9ydCB7TGlzdGJveEl0ZW1EYXRhfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2xpc3Rib3gtaXRlbS1kYXRhJztcclxuaW1wb3J0IHtTdHJpbmdVdGlsc30gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3V0aWxzL3N0cmluZy11dGlscyc7XHJcbmltcG9ydCB7TGlzdGJveExhYmVsQ29tcG9uZW50fSBmcm9tICcuL2xpc3Rib3gtbGFiZWwvbGlzdGJveC1sYWJlbC5jb21wb25lbnQnO1xyXG5pbXBvcnQge0xpc3Rib3hJdGVtQ29tcG9uZW50fSBmcm9tICcuL2xpc3Rib3gtaXRlbS9saXN0Ym94LWl0ZW0uY29tcG9uZW50JztcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0Rlc3lDb250ZW50Q2hpbGR9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9kZWNvcmF0b3JzL2Rlc3ktY29udGVudC1jaGlsZC5kZWNvcmF0b3InO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdkZXN5LWxpc3Rib3gnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0Ym94LmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTGlzdGJveENvbXBvbmVudCBleHRlbmRzIEFjY2Vzc2liaWxpdHlBbmRUZXh0T3JIdG1sUmVxdWlyZWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgRG9DaGVjayB7XHJcblxyXG4gIHN0YXRpYyByZWFkb25seSBLRVlfQ09ERV9FU0MgPSAnRXNjYXBlJztcclxuXHJcbiAgQFZpZXdDaGlsZCgnYnV0dG9uJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgbGlzdGJveEJ1dHRvbjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdsaXN0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGxpc3Rib3hMaXN0OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3Rvb2x0aXAnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBsaXN0Ym94Q29udGVudDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkcmVuKCdvcHRpb24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbGlzdGJveE9wdGlvbnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuXHJcbiAgQERlc3lDb250ZW50Q2hpbGQoKVxyXG4gIEBDb250ZW50Q2hpbGRyZW4oTGlzdGJveExhYmVsQ29tcG9uZW50KSBsYWJlbENvbXBvbmVudDogTGlzdGJveExhYmVsQ29tcG9uZW50O1xyXG4gIEBDb250ZW50Q2hpbGRyZW4oTGlzdGJveEl0ZW1Db21wb25lbnQpIGl0ZW1Db21wb25lbnRMaXN0OiBRdWVyeUxpc3Q8TGlzdGJveEl0ZW1Db21wb25lbnQ+O1xyXG5cclxuICBASW5wdXQoKSBpZDogc3RyaW5nOyAvLyByZXF1aXJlZFxyXG4gIEBJbnB1dCgpIGlzTXVsdGlzZWxlY3RhYmxlOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGRvZXNDaGFuZ2VCdXR0b25UZXh0OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGxhYmVsOiBMaXN0Ym94TGFiZWxEYXRhO1xyXG4gIEBJbnB1dCgpIGNsYXNzZXM6IHN0cmluZztcclxuICBASW5wdXQoKSBjbGFzc2VzQ29udGFpbmVyOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY2xhc3Nlc1Rvb2x0aXA6IHN0cmluZztcclxuICBASW5wdXQoKSBpZFByZWZpeDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGl0ZW1zOiBMaXN0Ym94SXRlbURhdGFbXTtcclxuICBAT3V0cHV0KCkgaXRlbXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGFjdGl2ZUl0ZW1DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHRpcHB5UHJvcGVydGllczogYW55OyAgICAgIC8vIFByb3BpZWRhZGVzIGRlIHRpcHB5XHJcbiAgY3VycmVudEZvY3VzSW5kZXg6IG51bWJlcjsgLy8gw41uZGljZSBkZWwgZWxlbWVudG8gYWN0dWFsIGNvbiBmb2N1c1xyXG4gIGJ1dHRvbkNvbnRlbnRIdG1sOiBzdHJpbmc7IC8vIFB1ZWRlIHNlciBlbCBwYXNhZG8gcG9yIHBhcsOhbWV0cm8gbyBlbCBpdGVtIHNlbGVjY2lvbmFkbyBlbiBjYXNvIGRlIGN1cnJlbnRGb2N1c0luZGV4PXRydWVcclxuICBpc0xpc3RWaXNpYmxlID0gZmFsc2U7ICAgICAvLyBJbmRpY2Egc2kgbGEgbGlzdGEgc2UgZXN0w6EgbW9zdHJhbmRvXHJcblxyXG4gIC8vIGNvbmRpdGlvbmFsSWQgeSBjb25kaXRpb25hbEl0ZW0gcmVwcmVzZW50YW4gZW4gZGVzeS1odG1sIGVsIGl0ZW0gYWN0aXZvLiBBcXXDrSBlcyBtZWpvciBvYnRlbmVybG8gY3VhbmRvIHNlIG5lY2VzaXRhXHJcbiAgbGFzdEFjdGl2ZUl0ZW1zOiB7IGl0ZW06IExpc3Rib3hJdGVtRGF0YSwgaW5kZXg6IG51bWJlciB9W107XHJcbiAgaXRlbUNvbXBvbmVudFN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdO1xyXG5cclxuICBpdGVtTGlzdDogTGlzdGJveEl0ZW1EYXRhW107XHJcblxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGxpc3Rib3hCdXR0b25FbGVtZW50ID0gdGhpcy5saXN0Ym94QnV0dG9uLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAodGhpcy5saXN0Ym94Q29udGVudCAmJiB0aGlzLmxpc3Rib3hDb250ZW50Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgY29uc3QgY29udGVudFRvb2x0aXAgPSB0aGlzLmxpc3Rib3hDb250ZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIHRoaXMudGlwcHlQcm9wZXJ0aWVzID0geyAgICAgICAgXHJcbiAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tLXN0YXJ0JyxcclxuICAgICAgICBpbmxpbmVQb3NpdGlvbmluZzogdHJ1ZSwgICAgICAgIFxyXG4gICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRUb29sdGlwLFxyXG4gICAgICAgIGFsbG93SFRNTDogdHJ1ZSwgLy8gTWFrZSBzdXJlIHlvdSBhcmUgc2FuaXRpemluZyBhbnkgdXNlciBkYXRhIGlmIHJlbmRlcmluZyBIVE1MIHRvIHByZXZlbnQgWFNTIGF0dGFja3MuXHJcbiAgICAgICAgdHJpZ2dlcjogJ2NsaWNrJyxcclxuICAgICAgICBoaWRlT25DbGljazogdHJ1ZSxcclxuICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcclxuICAgICAgICBhcnJvdzogZmFsc2UsXHJcbiAgICAgICAgb2Zmc2V0OiBbMCwgLTEwXSxcclxuICAgICAgICB0aGVtZTogJycsXHJcbiAgICAgICAgcGx1Z2luczogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiAnaGlkZU9uUG9wcGVyQmx1cicsXHJcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogdHJ1ZSxcclxuICAgICAgICAgICAgZm4oaW5zdGFuY2UpIHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgb25DcmVhdGUoKSB7XHJcbiAgICAgICAgICAgICAgICAgIGluc3RhbmNlLnBvcHBlci5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLnByb3BzLmhpZGVPblBvcHBlckJsdXIgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlbGF0ZWRUYXJnZXQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICFpbnN0YW5jZS5wb3BwZXIuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldClcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6ICdoaWRlT25Fc2MnLFxyXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IHRydWUsXHJcbiAgICAgICAgICAgIGZuKHtoaWRlfSk6IGFueSB7XHJcblxyXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gTGlzdGJveENvbXBvbmVudC5LRVlfQ09ERV9FU0MpIHtcclxuICAgICAgICAgICAgICAgICAgaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICBsaXN0Ym94QnV0dG9uRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIG9uU2hvdygpOiB2b2lkIHtcclxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uS2V5RG93bik7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgb25IaWRlKCk6IHZvaWQge1xyXG4gICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH1cclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGU6IGZhbHNlLFxyXG4gICAgICAgIGFyaWE6IHtcclxuICAgICAgICAgIGNvbnRlbnQ6ICdhdXRvJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uU2hvdzogdGhpcy5vbkxpc3RTaG93LmJpbmQodGhpcyksXHJcbiAgICAgICAgb25IaWRkZW46IHRoaXMub25MaXN0Q2xvc2UuYmluZCh0aGlzKVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgIGlmICh0aGlzLml0ZW1Db21wb25lbnRMaXN0ICYmIHRoaXMuaXRlbUNvbXBvbmVudExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1Db21wb25lbnRTdWJzY3JpcHRpb25zKSB7XHJcbiAgICAgICAgICB0aGlzLml0ZW1Db21wb25lbnRTdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLml0ZW1Db21wb25lbnRTdWJzY3JpcHRpb25zID0gW107XHJcbiAgICAgICAgdGhpcy5pdGVtTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuaXRlbUNvbXBvbmVudExpc3QuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGl0ZW0uaXRlbUNoYW5nZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jaGVja0FjdGl2ZUl0ZW1zKCkpO1xyXG4gICAgICAgICAgdGhpcy5pdGVtQ29tcG9uZW50U3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XHJcbiAgICAgICAgICB0aGlzLml0ZW1MaXN0LnB1c2goaXRlbSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pdGVtTGlzdCA9IHRoaXMuaXRlbXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY2hlY2tBY3RpdmVJdGVtcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXRlbXMgfHwgIXRoaXMuaXRlbUxpc3QpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hlY2tBY3RpdmVJdGVtcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRBY3RpdmVJdGVtc0RhdGEoKTogeyBpdGVtOiBMaXN0Ym94SXRlbURhdGEsIGluZGV4OiBudW1iZXIgfVtdIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW1MaXN0XHJcbiAgICAgIC5tYXAoKGl0ZW0sIGluZGV4KSA9PiBpdGVtLmFjdGl2ZSA/IHtpdGVtLCBpbmRleH0gOiBudWxsKVxyXG4gICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gbnVsbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrQWN0aXZlSXRlbXMoKTogdm9pZCB7XHJcbiAgICBsZXQgYWN0aXZlSXRlbXM6IHsgaXRlbTogTGlzdGJveEl0ZW1EYXRhLCBpbmRleDogbnVtYmVyIH1bXSA9IHRoaXMuaXRlbUxpc3RcclxuICAgICAgLm1hcCgoaXRlbSwgaW5kZXgpID0+IGl0ZW0uYWN0aXZlID8ge2l0ZW0sIGluZGV4fSA6IG51bGwpXHJcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtICE9PSBudWxsKTtcclxuXHJcbiAgICBsZXQgaGFzQWN0aXZlSXRlbUNoYW5nZSA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMubGFzdEFjdGl2ZUl0ZW1zICYmIGFjdGl2ZUl0ZW1zLmxlbmd0aCA9PT0gdGhpcy5sYXN0QWN0aXZlSXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0aXZlSXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAoYWN0aXZlSXRlbXNbaV0uaW5kZXggIT09IHRoaXMubGFzdEFjdGl2ZUl0ZW1zW2ldLmluZGV4KSB7XHJcbiAgICAgICAgICBoYXNBY3RpdmVJdGVtQ2hhbmdlID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaGFzQWN0aXZlSXRlbUNoYW5nZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2kgaGF5IGNhbWJpb3MgZXh0ZXJub3MgeSBlcyBzZWxlY2Npw7NuIMO6bmljYSwgYW51bGFtb3MgbGEgc2VsZWNjacOzbiBhbnRlcmlvclxyXG4gICAgaWYgKHRoaXMubGFzdEFjdGl2ZUl0ZW1zICYmICF0aGlzLmlzTXVsdGlzZWxlY3RhYmxlICYmIGhhc0FjdGl2ZUl0ZW1DaGFuZ2UpIHtcclxuICAgICAgaWYgKGFjdGl2ZUl0ZW1zLmxlbmd0aCAhPT0gdGhpcy5sYXN0QWN0aXZlSXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBuZXdJdGVtIG9mIGFjdGl2ZUl0ZW1zKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5sYXN0QWN0aXZlSXRlbXMuZmluZEluZGV4KGkgPT4gaS5pbmRleCA9PT0gbmV3SXRlbS5pbmRleCkgPj0gMCkge1xyXG4gICAgICAgICAgICBuZXdJdGVtLml0ZW0uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYWN0aXZlSXRlbXMgPSBhY3RpdmVJdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLml0ZW0uYWN0aXZlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxhc3RBY3RpdmVJdGVtcyA9IGFjdGl2ZUl0ZW1zO1xyXG5cclxuICAgIC8vIFNlIGNhbWJpYSBlbCBjb250ZW5pZG8gZGVsIGJvdMOzblxyXG4gICAgaWYgKHRoaXMuZG9lc0NoYW5nZUJ1dHRvblRleHQgJiYgIXRoaXMuaXNNdWx0aXNlbGVjdGFibGUgJiYgYWN0aXZlSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBhY3RpdmVJdGVtT3B0aW9uID0gdGhpcy5saXN0Ym94T3B0aW9ucy5maW5kKChpdGVtLCBpbmRleCkgPT4gaW5kZXggPT09IGFjdGl2ZUl0ZW1zWzBdLmluZGV4KTtcclxuICAgICAgaWYgKGFjdGl2ZUl0ZW1PcHRpb24pIHtcclxuICAgICAgICB0aGlzLmJ1dHRvbkNvbnRlbnRIdG1sID0gYWN0aXZlSXRlbU9wdGlvbi5uYXRpdmVFbGVtZW50LmlubmVySFRNTDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5idXR0b25Db250ZW50SHRtbCA9IHRoaXMuaHRtbCA/IHRoaXMuaHRtbCA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2kgaGF5IGNhbWJpb3MsIHNlIGVtaXRlblxyXG4gICAgaWYgKGhhc0FjdGl2ZUl0ZW1DaGFuZ2UpIHtcclxuICAgICAgdGhpcy5pdGVtc0NoYW5nZS5lbWl0KHRoaXMuaXRlbUxpc3QpO1xyXG4gICAgICB0aGlzLmFjdGl2ZUl0ZW1DaGFuZ2UuZW1pdChhY3RpdmVJdGVtcy5sZW5ndGggPiAwID8gYWN0aXZlSXRlbXNbMF0uaXRlbSA6IG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25MaXN0U2hvdygpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNMaXN0VmlzaWJsZSA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5saXN0Ym94TGlzdCkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubGlzdGJveExpc3QubmF0aXZlRWxlbWVudC5mb2N1cygpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTGlzdENsb3NlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0xpc3RWaXNpYmxlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvbkxpc3RGb2N1cygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGFjdGl2ZUl0ZW1zRGF0YSA9IHRoaXMuZ2V0QWN0aXZlSXRlbXNEYXRhKCk7XHJcbiAgICBpZiAoYWN0aXZlSXRlbXNEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgYWN0aXZlRWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0SXRlbUlkKGFjdGl2ZUl0ZW1zRGF0YVswXS5pdGVtLCBhY3RpdmVJdGVtc0RhdGFbMF0uaW5kZXgpKTtcclxuICAgICAgaWYgKGFjdGl2ZUVsZW0pIHtcclxuICAgICAgICBhY3RpdmVFbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Rm9jdXNJbmRleCA9IGFjdGl2ZUl0ZW1zRGF0YVswXS5pbmRleDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1MaXN0ICYmIHRoaXMuaXRlbUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRGb2N1c0luZGV4ID0gMDtcclxuICAgICAgaWYgKCF0aGlzLmlzTXVsdGlzZWxlY3RhYmxlKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RJdGVtKDApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ05vIGVsZW1lbnQgdG8gZm9jdXMnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1vdmVGb2N1cyhwb3NpdGlvbjogbnVtYmVyLCBldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGlmIChwb3NpdGlvbiA+PSAwICYmIHBvc2l0aW9uIDwgdGhpcy5pdGVtTGlzdC5sZW5ndGgpIHtcclxuICAgICAgaWYgKHRoaXMuaXNNdWx0aXNlbGVjdGFibGUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRGb2N1c0luZGV4ID0gcG9zaXRpb247XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RJdGVtKHBvc2l0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TcGFjZShldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3RhYmxlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0SXRlbSh0aGlzLmN1cnJlbnRGb2N1c0luZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdEl0ZW0oaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmlzTXVsdGlzZWxlY3RhYmxlKSB7XHJcbiAgICAgIHRoaXMuaXRlbUxpc3QuZm9yRWFjaChpdGVtID0+IGl0ZW0uYWN0aXZlID0gZmFsc2UpO1xyXG4gICAgICB0aGlzLml0ZW1MaXN0W2luZGV4XS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pdGVtTGlzdFtpbmRleF0uYWN0aXZlID0gIXRoaXMuaXRlbUxpc3RbaW5kZXhdLmFjdGl2ZTtcclxuICAgIH1cclxuICAgIHRoaXMuY3VycmVudEZvY3VzSW5kZXggPSBpbmRleDtcclxuXHJcbiAgICB0aGlzLmNoZWNrQWN0aXZlSXRlbXMoKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICogTcOpdG9kb3MgcGFyYSBmYWNpbGl0YXIgY29udGVuaWRvIGFsIHRlbXBsYXRlXHJcbiAgICovXHJcblxyXG4gIGdldElkUHJlZml4KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pZFByZWZpeCA/IHRoaXMuaWRQcmVmaXggOiB0aGlzLmlkICsgJy1saXN0Ym94LWl0ZW0nO1xyXG4gIH1cclxuXHJcbiAgZ2V0SXRlbUlkKGl0ZW06IExpc3Rib3hJdGVtRGF0YSwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgaXRlbUlkOiBzdHJpbmc7XHJcbiAgICBpZiAoaXRlbS5pZCkge1xyXG4gICAgICBpdGVtSWQgPSBpdGVtLmlkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXRlbUlkID0gdGhpcy5nZXRJZFByZWZpeCgpO1xyXG4gICAgICBpZiAoaW5kZXggPiAwKSB7XHJcbiAgICAgICAgaXRlbUlkICs9IGAtJHtpbmRleH1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXRlbUlkO1xyXG4gIH1cclxuXHJcbiAgaGFzTGFiZWwoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISEodGhpcy5sYWJlbCB8fCB0aGlzLmxhYmVsQ29tcG9uZW50KTtcclxuICB9XHJcblxyXG4gIGdldExhYmVsQ29udGVudChsYWJlbDogTGlzdGJveExhYmVsRGF0YSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gbGFiZWwuaHRtbCA/IGxhYmVsLmh0bWwgOiBgPHA+JHsgU3RyaW5nVXRpbHMuZXNjYXBlSHRtbChsYWJlbC50ZXh0KSB9PC9wPmA7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Component, ContentChildren, ElementRef, EventEmitter, Input, Output, ViewChild, ViewChildren } from '@angular/core';
|
|
3
|
+
import { AccessibilityAndTextOrHtmlRequiredComponent } from '../../../shared/components';
|
|
4
|
+
import { StringUtils } from '../../../shared/utils/string-utils';
|
|
5
|
+
import { ListboxLabelComponent } from './listbox-label/listbox-label.component';
|
|
6
|
+
import { ListboxItemComponent } from './listbox-item/listbox-item.component';
|
|
7
|
+
import { DesyContentChild } from '../../../shared/decorators/desy-content-child.decorator';
|
|
8
|
+
export class ListboxComponent extends AccessibilityAndTextOrHtmlRequiredComponent {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments);
|
|
11
|
+
this.itemsChange = new EventEmitter();
|
|
12
|
+
this.activeItemChange = new EventEmitter();
|
|
13
|
+
this.isListVisible = false; // Indica si la lista se está mostrando
|
|
14
|
+
}
|
|
15
|
+
ngOnInit() {
|
|
16
|
+
const listboxButtonElement = this.listboxButton.nativeElement;
|
|
17
|
+
if (this.listboxContent && this.listboxContent.nativeElement) {
|
|
18
|
+
const contentTooltip = this.listboxContent.nativeElement;
|
|
19
|
+
this.tippyProperties = {
|
|
20
|
+
placement: 'bottom-start',
|
|
21
|
+
inlinePositioning: true,
|
|
22
|
+
content: contentTooltip,
|
|
23
|
+
allowHTML: true,
|
|
24
|
+
trigger: 'click',
|
|
25
|
+
hideOnClick: true,
|
|
26
|
+
interactive: true,
|
|
27
|
+
arrow: false,
|
|
28
|
+
offset: [0, -10],
|
|
29
|
+
theme: '',
|
|
30
|
+
plugins: [
|
|
31
|
+
{
|
|
32
|
+
name: 'hideOnPopperBlur',
|
|
33
|
+
defaultValue: true,
|
|
34
|
+
fn(instance) {
|
|
35
|
+
return {
|
|
36
|
+
onCreate() {
|
|
37
|
+
instance.popper.addEventListener('focusout', (event) => {
|
|
38
|
+
if (instance.props.hideOnPopperBlur &&
|
|
39
|
+
event.relatedTarget &&
|
|
40
|
+
!instance.popper.contains(event.relatedTarget)) {
|
|
41
|
+
instance.hide();
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'hideOnEsc',
|
|
50
|
+
defaultValue: true,
|
|
51
|
+
fn({ hide }) {
|
|
52
|
+
function onKeyDown(event) {
|
|
53
|
+
if (event.key === ListboxComponent.KEY_CODE_ESC) {
|
|
54
|
+
hide();
|
|
55
|
+
listboxButtonElement.focus();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
onShow() {
|
|
60
|
+
document.addEventListener('keydown', onKeyDown);
|
|
61
|
+
},
|
|
62
|
+
onHide() {
|
|
63
|
+
document.removeEventListener('keydown', onKeyDown);
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
},
|
|
67
|
+
}
|
|
68
|
+
],
|
|
69
|
+
role: false,
|
|
70
|
+
aria: {
|
|
71
|
+
content: 'auto',
|
|
72
|
+
},
|
|
73
|
+
onShow: this.onListShow.bind(this),
|
|
74
|
+
onHidden: this.onListClose.bind(this)
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
ngOnChanges() {
|
|
79
|
+
setTimeout(() => {
|
|
80
|
+
if (this.itemComponentList && this.itemComponentList.length > 0) {
|
|
81
|
+
if (this.itemComponentSubscriptions) {
|
|
82
|
+
this.itemComponentSubscriptions.forEach(s => s.unsubscribe());
|
|
83
|
+
}
|
|
84
|
+
this.itemComponentSubscriptions = [];
|
|
85
|
+
this.itemList = [];
|
|
86
|
+
this.itemComponentList.forEach(item => {
|
|
87
|
+
const subscription = item.itemChange.subscribe(() => this.checkActiveItems());
|
|
88
|
+
this.itemComponentSubscriptions.push(subscription);
|
|
89
|
+
this.itemList.push(item);
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
this.itemList = this.items;
|
|
94
|
+
}
|
|
95
|
+
this.checkActiveItems();
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
ngDoCheck() {
|
|
99
|
+
if (!this.items || !this.itemList) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
this.checkActiveItems();
|
|
103
|
+
}
|
|
104
|
+
getActiveItemsData() {
|
|
105
|
+
return this.itemList
|
|
106
|
+
.map((item, index) => item.active ? { item, index } : null)
|
|
107
|
+
.filter(item => item !== null);
|
|
108
|
+
}
|
|
109
|
+
checkActiveItems() {
|
|
110
|
+
let activeItems = this.itemList
|
|
111
|
+
.map((item, index) => item.active ? { item, index } : null)
|
|
112
|
+
.filter(item => item !== null);
|
|
113
|
+
let hasActiveItemChange = false;
|
|
114
|
+
if (this.lastActiveItems && activeItems.length === this.lastActiveItems.length) {
|
|
115
|
+
for (let i = 0; i < activeItems.length; i++) {
|
|
116
|
+
if (activeItems[i].index !== this.lastActiveItems[i].index) {
|
|
117
|
+
hasActiveItemChange = true;
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
hasActiveItemChange = true;
|
|
124
|
+
}
|
|
125
|
+
// Si hay cambios externos y es selección única, anulamos la selección anterior
|
|
126
|
+
if (this.lastActiveItems && !this.isMultiselectable && hasActiveItemChange) {
|
|
127
|
+
if (activeItems.length !== this.lastActiveItems.length) {
|
|
128
|
+
for (const newItem of activeItems) {
|
|
129
|
+
if (this.lastActiveItems.findIndex(i => i.index === newItem.index) >= 0) {
|
|
130
|
+
newItem.item.active = false;
|
|
131
|
+
}
|
|
132
|
+
activeItems = activeItems.filter(item => item.item.active);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
this.lastActiveItems = activeItems;
|
|
137
|
+
// Se cambia el contenido del botón
|
|
138
|
+
if (this.doesChangeButtonText && !this.isMultiselectable && activeItems.length > 0) {
|
|
139
|
+
const activeItemOption = this.listboxOptions.find((item, index) => index === activeItems[0].index);
|
|
140
|
+
if (activeItemOption) {
|
|
141
|
+
this.buttonContentHtml = activeItemOption.nativeElement.innerHTML;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
this.buttonContentHtml = this.html ? this.html : null;
|
|
146
|
+
}
|
|
147
|
+
// Si hay cambios, se emiten
|
|
148
|
+
if (hasActiveItemChange) {
|
|
149
|
+
this.itemsChange.emit(this.itemList);
|
|
150
|
+
this.activeItemChange.emit(activeItems.length > 0 ? activeItems[0].item : null);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
onListShow() {
|
|
154
|
+
this.isListVisible = true;
|
|
155
|
+
if (this.listboxList) {
|
|
156
|
+
setTimeout(() => this.listboxList.nativeElement.focus());
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
onListClose() {
|
|
160
|
+
this.isListVisible = false;
|
|
161
|
+
}
|
|
162
|
+
onListFocus() {
|
|
163
|
+
const activeItemsData = this.getActiveItemsData();
|
|
164
|
+
if (activeItemsData.length > 0) {
|
|
165
|
+
const activeElem = document.getElementById(this.getItemId(activeItemsData[0].item, activeItemsData[0].index));
|
|
166
|
+
if (activeElem) {
|
|
167
|
+
activeElem.focus();
|
|
168
|
+
this.currentFocusIndex = activeItemsData[0].index;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
else if (this.itemList && this.itemList.length > 0) {
|
|
172
|
+
this.currentFocusIndex = 0;
|
|
173
|
+
if (!this.isMultiselectable) {
|
|
174
|
+
this.selectItem(0);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
console.warn('No element to focus');
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
moveFocus(position, event) {
|
|
182
|
+
event.preventDefault();
|
|
183
|
+
if (position >= 0 && position < this.itemList.length) {
|
|
184
|
+
if (this.isMultiselectable) {
|
|
185
|
+
this.currentFocusIndex = position;
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
this.selectItem(position);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
onSpace(event) {
|
|
193
|
+
event.preventDefault();
|
|
194
|
+
if (this.isMultiselectable) {
|
|
195
|
+
this.selectItem(this.currentFocusIndex);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
selectItem(index) {
|
|
199
|
+
if (!this.isMultiselectable) {
|
|
200
|
+
this.itemList.forEach(item => item.active = false);
|
|
201
|
+
this.itemList[index].active = true;
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
this.itemList[index].active = !this.itemList[index].active;
|
|
205
|
+
}
|
|
206
|
+
this.currentFocusIndex = index;
|
|
207
|
+
this.checkActiveItems();
|
|
208
|
+
}
|
|
209
|
+
/*
|
|
210
|
+
* Métodos para facilitar contenido al template
|
|
211
|
+
*/
|
|
212
|
+
getIdPrefix() {
|
|
213
|
+
return this.idPrefix ? this.idPrefix : this.id + '-listbox-item';
|
|
214
|
+
}
|
|
215
|
+
getItemId(item, index) {
|
|
216
|
+
let itemId;
|
|
217
|
+
if (item.id) {
|
|
218
|
+
itemId = item.id;
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
itemId = this.getIdPrefix();
|
|
222
|
+
if (index > 0) {
|
|
223
|
+
itemId += `-${index}`;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return itemId;
|
|
227
|
+
}
|
|
228
|
+
hasLabel() {
|
|
229
|
+
return !!(this.label || this.labelComponent);
|
|
230
|
+
}
|
|
231
|
+
getLabelContent(label) {
|
|
232
|
+
return label.html ? label.html : `<p>${StringUtils.escapeHtml(label.text)}</p>`;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
ListboxComponent.KEY_CODE_ESC = 'Escape';
|
|
236
|
+
ListboxComponent.decorators = [
|
|
237
|
+
{ type: Component, args: [{
|
|
238
|
+
selector: 'desy-listbox',
|
|
239
|
+
template: "<div [ngClass]=\"classesContainer ? classesContainer : 'relative'\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelComponent?.classes, label?.classes] | makeHtmlList\">\n <ng-container *desyCustomInnerContent=\"{ component: labelComponent, html: label ? getLabelContent(label) : null }\"></ng-container>\n </div>\n <button #button [id]=\"id + '-button'\"\n [class]=\"['c-listbox', classes] | makeHtmlList\"\n ngxTippy [tippyProps]=\"tippyProperties\"\n aria-haspopup=\"listbox\"\n [attr.aria-labelledby]=\"[hasLabel() ? id + '-label' : null, id + '-button'] | makeHtmlList\"\n [attr.disabled]=\"disabled ? 'disabled' : null\"\n [attr.aria-disabled]=\"disabled ? 'true' : (ariaDisabled ? ariaDisabled : null)\"\n [attr.aria-role] = \"role ? role : null\"\n [attr.aria-label] = \"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby] = \"ariaDescribedBy ? ariaDescribedBy : null\"\n [attr.aria-hidden] = \"ariaHidden ? ariaHidden : null\"\n [attr.aria-controls] = \"ariaControls ? ariaControls : null\"\n [attr.aria-current] = \"ariaCurrent ? ariaCurrent : null\"\n [attr.aria-live] = \"ariaLive ? ariaLive : null\"\n [attr.aria-expanded] = \"ariaExpanded ? ariaExpanded : null\"\n [attr.aria-errorMessage] = \"ariaErrorMessage ? ariaErrorMessage : null\"\n [attr.aria-hasppup] = \"ariaHasPopup ? ariaHasPopup : null\"\n [attr.aria-tabindex] = \"tabindex ? tabindex : null\">\n <span class=\"inline-flex self-center max-w-xs align-middle truncate\">\n <ng-container *desyCustomInnerContent=\"{ html: buttonContentHtml, text: text }\"></ng-container>\n </span>\n <svg class=\"inline-block -mr-2 align-middle -my-px\" viewBox=\"0 0 96 96\" aria-hidden=\"true\" fill=\"currentColor\" focusable=\"false\" width=\"1.5em\" height=\"1.5em\"><g><path d=\"M46.71 58.037a1.823 1.823 0 002.581 0L62.048 45.28a1.823 1.823 0 00-1.29-3.113H35.243a1.823 1.823 0 00-1.291 3.113z\"/></g></svg>\n </button>\n <div #tooltip [class]=\"['c-listbox__tooltip -ml-sm mt-2 border border-neutral-base shadow-md bg-white', classesTooltip] | makeHtmlList\">\n <ul *ngIf=\"itemList\"\n #list [id]=\"id\"\n (focus)=\"onListFocus()\"\n (keydown.arrowUp)=\"moveFocus(currentFocusIndex - 1, $event)\"\n (keydown.arrowDown)=\"moveFocus(currentFocusIndex + 1, $event)\"\n (keydown.home)=\"moveFocus(0, $event)\"\n (keydown.end)=\"moveFocus(items.length - 1, $event)\"\n (keydown.space)=\"onSpace($event)\"\n role=\"listbox\"\n tabindex=\"-1\"\n class=\"text-sm outline-none\"\n [attr.aria-labelledby]=\"hasLabel() ? id : (ariaLabelledBy ? ariaLabelledBy : null)\"\n [attr.aria-multiselectable]=\"isMultiselectable ? 'true' : null\"\n [attr.aria-disabled]=\"ariaDisabled ? ariaDisabled : null\"\n [attr.aria-label] = \"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby] = \"ariaDescribedBy ? ariaDescribedBy : null\"\n [attr.aria-hidden] = \"ariaHidden ? ariaHidden : null\"\n [attr.aria-controls] = \"ariaControls ? ariaControls : null\"\n [attr.aria-current] = \"ariaCurrent ? ariaCurrent : null\"\n [attr.aria-live] = \"ariaLive ? ariaLive : null\"\n [attr.aria-expanded] = \"ariaExpanded ? ariaExpanded : null\"\n [attr.aria-errormessage] = \"ariaErrorMessage ? ariaErrorMessage : null\"\n [attr.aria-haspopup] = \"ariaHasPopup ? ariaHasPopup : null\"\n [attr.aria-activedescendant] = \"lastActiveItems.length > 0 ? getItemId(lastActiveItems[0].item, lastActiveItems[0].index) : null\">\n <ng-container *ngFor=\"let item of itemList; index as index\">\n <li #option *ngIf=\"item\" role=\"option\" (click)=\"selectItem(index)\"\n [class]=\"['flex items-center pr-base pl-lg py-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black', item.classes] | makeHtmlList\"\n [ngClass]=\"{'focused': index === currentFocusIndex}\"\n [attr.aria-label]=\"item.active ? 'true' : (item.ariaLabel ? item.ariaLabel : null)\"\n [id]=\"getItemId(item, index)\"\n [attr.title]=\"item.title ? item.title : null\"\n\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-hidden] = \"item.ariaHidden ? item.ariaHidden : null\"\n [attr.aria-controls]=\"item.ariaControls ? item.ariaControls : null\"\n [attr.aria-current] = \"item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.aria-live] = \"item.ariaLive ? item.ariaLive : null\"\n [attr.aria-expanded]=\"item.ariaExpanded ? item.ariaExpanded : null\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage ? item.ariaErrorMessage : null\"\n [attr.aria-haspopup] = \"item.ariaHasPopup ? item.ariaHasPopup : null\"\n [attr.aria-tabindex] = \"item.tabindex ? item.tabindex : null\"\n\n [attr.aria-checked]=\"item.active\"\n [attr.aria-selected]=\"item.active\">\n <ng-container *desyCustomInnerContent=\"{ template: item['content'], html: item.html, text: item.text }\"></ng-container>\n </li>\n </ng-container>\n </ul>\n </div>\n</div>"
|
|
240
|
+
},] }
|
|
241
|
+
];
|
|
242
|
+
ListboxComponent.propDecorators = {
|
|
243
|
+
listboxButton: [{ type: ViewChild, args: ['button', { read: ElementRef, static: true },] }],
|
|
244
|
+
listboxList: [{ type: ViewChild, args: ['list', { read: ElementRef },] }],
|
|
245
|
+
listboxContent: [{ type: ViewChild, args: ['tooltip', { read: ElementRef, static: true },] }],
|
|
246
|
+
listboxOptions: [{ type: ViewChildren, args: ['option', { read: ElementRef },] }],
|
|
247
|
+
labelComponent: [{ type: ContentChildren, args: [ListboxLabelComponent,] }],
|
|
248
|
+
itemComponentList: [{ type: ContentChildren, args: [ListboxItemComponent,] }],
|
|
249
|
+
id: [{ type: Input }],
|
|
250
|
+
isMultiselectable: [{ type: Input }],
|
|
251
|
+
doesChangeButtonText: [{ type: Input }],
|
|
252
|
+
label: [{ type: Input }],
|
|
253
|
+
classes: [{ type: Input }],
|
|
254
|
+
classesContainer: [{ type: Input }],
|
|
255
|
+
classesTooltip: [{ type: Input }],
|
|
256
|
+
idPrefix: [{ type: Input }],
|
|
257
|
+
disabled: [{ type: Input }],
|
|
258
|
+
items: [{ type: Input }],
|
|
259
|
+
itemsChange: [{ type: Output }],
|
|
260
|
+
activeItemChange: [{ type: Output }]
|
|
261
|
+
};
|
|
262
|
+
__decorate([
|
|
263
|
+
DesyContentChild()
|
|
264
|
+
], ListboxComponent.prototype, "labelComponent", void 0);
|
|
265
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdGJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LWJ1dHRvbnMvY29tcG9uZW50cy9saXN0Ym94L2xpc3Rib3guY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUVaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNULFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsMkNBQTJDLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUd2RixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDL0QsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDOUUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFFM0UsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0seURBQXlELENBQUM7QUFNekYsTUFBTSxPQUFPLGdCQUFpQixTQUFRLDJDQUEyQztJQUpqRjs7UUEyQlksZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFLaEQsa0JBQWEsR0FBRyxLQUFLLENBQUMsQ0FBSyx1Q0FBdUM7SUF3UHBFLENBQUM7SUEvT0MsUUFBUTtRQUNOLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7UUFDOUQsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFO1lBQzVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBNEIsQ0FBQztZQUN4RSxJQUFJLENBQUMsZUFBZSxH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QztJQUVELFFBQVE7UUFDTixPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBdUI7UUFDckMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFPLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBRSxNQUFNLENBQUM7SUFDcEYsQ0FBQzs7QUFsUmUsNkJBQVksR0FBRyxRQUFRLENBQUM7O1lBTnpDLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsY0FBYztnQkFDeEIsd3pLQUF1QzthQUN4Qzs7OzRCQUtFLFNBQVMsU0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7MEJBQ3RELFNBQVMsU0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFOzZCQUN0QyxTQUFTLFNBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzZCQUN2RCxZQUFZLFNBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTs2QkFHM0MsZUFBZSxTQUFDLHFCQUFxQjtnQ0FDckMsZUFBZSxTQUFDLG9CQUFvQjtpQkFFcEMsS0FBSztnQ0FDTCxLQUFLO21DQUNMLEtBQUs7b0JBQ0wsS0FBSztzQkFDTCxLQUFLOytCQUNMLEtBQUs7NkJBQ0wsS0FBSzt1QkFDTCxLQUFLO3VCQUNMLEtBQUs7b0JBQ0wsS0FBSzswQkFDTCxNQUFNOytCQUNOLE1BQU07O0FBZGlDO0lBRHZDLGdCQUFnQixFQUFFO3dEQUMyRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLCBEb0NoZWNrLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWNjZXNzaWJpbGl0eUFuZFRleHRPckh0bWxSZXF1aXJlZENvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtMaXN0Ym94TGFiZWxEYXRhfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2xpc3Rib3gtbGFiZWwtZGF0YSc7XG5pbXBvcnQge0xpc3Rib3hJdGVtRGF0YX0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9saXN0Ym94LWl0ZW0tZGF0YSc7XG5pbXBvcnQge1N0cmluZ1V0aWxzfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdXRpbHMvc3RyaW5nLXV0aWxzJztcbmltcG9ydCB7TGlzdGJveExhYmVsQ29tcG9uZW50fSBmcm9tICcuL2xpc3Rib3gtbGFiZWwvbGlzdGJveC1sYWJlbC5jb21wb25lbnQnO1xuaW1wb3J0IHtMaXN0Ym94SXRlbUNvbXBvbmVudH0gZnJvbSAnLi9saXN0Ym94LWl0ZW0vbGlzdGJveC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0Rlc3lDb250ZW50Q2hpbGR9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9kZWNvcmF0b3JzL2Rlc3ktY29udGVudC1jaGlsZC5kZWNvcmF0b3InO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkZXN5LWxpc3Rib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdGJveC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgTGlzdGJveENvbXBvbmVudCBleHRlbmRzIEFjY2Vzc2liaWxpdHlBbmRUZXh0T3JIdG1sUmVxdWlyZWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgRG9DaGVjayB7XG5cbiAgc3RhdGljIHJlYWRvbmx5IEtFWV9DT0RFX0VTQyA9ICdFc2NhcGUnO1xuXG4gIEBWaWV3Q2hpbGQoJ2J1dHRvbicsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIGxpc3Rib3hCdXR0b246IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2xpc3QnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbGlzdGJveExpc3Q6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3Rvb2x0aXAnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBsaXN0Ym94Q29udGVudDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZHJlbignb3B0aW9uJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGxpc3Rib3hPcHRpb25zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgQERlc3lDb250ZW50Q2hpbGQoKVxuICBAQ29udGVudENoaWxkcmVuKExpc3Rib3hMYWJlbENvbXBvbmVudCkgbGFiZWxDb21wb25lbnQ6IExpc3Rib3hMYWJlbENvbXBvbmVudDtcbiAgQENvbnRlbnRDaGlsZHJlbihMaXN0Ym94SXRlbUNvbXBvbmVudCkgaXRlbUNvbXBvbmVudExpc3Q6IFF1ZXJ5TGlzdDxMaXN0Ym94SXRlbUNvbXBvbmVudD47XG5cbiAgQElucHV0KCkgaWQ6IHN0cmluZzsgLy8gcmVxdWlyZWRcbiAgQElucHV0KCkgaXNNdWx0aXNlbGVjdGFibGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGRvZXNDaGFuZ2VCdXR0b25UZXh0OiBib29sZWFuO1xuICBASW5wdXQoKSBsYWJlbDogTGlzdGJveExhYmVsRGF0YTtcbiAgQElucHV0KCkgY2xhc3Nlczogc3RyaW5nO1xuICBASW5wdXQoKSBjbGFzc2VzQ29udGFpbmVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsYXNzZXNUb29sdGlwOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlkUHJlZml4OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKSBpdGVtczogTGlzdGJveEl0ZW1EYXRhW107XG4gIEBPdXRwdXQoKSBpdGVtc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGFjdGl2ZUl0ZW1DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgdGlwcHlQcm9wZXJ0aWVzOiBhbnk7ICAgICAgLy8gUHJvcGllZGFkZXMgZGUgdGlwcHlcbiAgY3VycmVudEZvY3VzSW5kZXg6IG51bWJlcjsgLy8gw41uZGljZSBkZWwgZWxlbWVudG8gYWN0dWFsIGNvbiBmb2N1c1xuICBidXR0b25Db250ZW50SHRtbDogc3RyaW5nOyAvLyBQdWVkZSBzZXIgZWwgcGFzYWRvIHBvciBwYXLDoW1ldHJvIG8gZWwgaXRlbSBzZWxlY2Npb25hZG8gZW4gY2FzbyBkZSBjdXJyZW50Rm9jdXNJbmRleD10cnVlXG4gIGlzTGlzdFZpc2libGUgPSBmYWxzZTsgICAgIC8vIEluZGljYSBzaSBsYSBsaXN0YSBzZSBlc3TDoSBtb3N0cmFuZG9cblxuICAvLyBjb25kaXRpb25hbElkIHkgY29uZGl0aW9uYWxJdGVtIHJlcHJlc2VudGFuIGVuIGRlc3ktaHRtbCBlbCBpdGVtIGFjdGl2by4gQXF1w60gZXMgbWVqb3Igb2J0ZW5lcmxvIGN1YW5kbyBzZSBuZWNlc2l0YVxuICBsYXN0QWN0aXZlSXRlbXM6IHsgaXRlbTogTGlzdGJveEl0ZW1EYXRhLCBpbmRleDogbnVtYmVyIH1bXTtcbiAgaXRlbUNvbXBvbmVudFN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdO1xuXG4gIGl0ZW1MaXN0OiBMaXN0Ym94SXRlbURhdGFbXTtcblxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGxpc3Rib3hCdXR0b25FbGVtZW50ID0gdGhpcy5saXN0Ym94QnV0dG9uLm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKHRoaXMubGlzdGJveENvbnRlbnQgJiYgdGhpcy5saXN0Ym94Q29udGVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBjb25zdCBjb250ZW50VG9vbHRpcCA9IHRoaXMubGlzdGJveENvbnRlbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIHRoaXMudGlwcHlQcm9wZXJ0aWVzID0geyAgICAgICAgXG4gICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbS1zdGFydCcsXG4gICAgICAgIGlubGluZVBvc2l0aW9uaW5nOiB0cnVlLCAgICAgICAgXG4gICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRUb29sdGlwLFxuICAgICAgICBhbGxvd0hUTUw6IHRydWUsIC8vIE1ha2Ugc3VyZSB5b3UgYXJlIHNhbml0aXppbmcgYW55IHVzZXIgZGF0YSBpZiByZW5kZXJpbmcgSFRNTCB0byBwcmV2ZW50IFhTUyBhdHRhY2tzLlxuICAgICAgICB0cmlnZ2VyOiAnY2xpY2snLFxuICAgICAgICBoaWRlT25DbGljazogdHJ1ZSxcbiAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgIGFycm93OiBmYWxzZSxcbiAgICAgICAgb2Zmc2V0OiBbMCwgLTEwXSxcbiAgICAgICAgdGhlbWU6ICcnLFxuICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2hpZGVPblBvcHBlckJsdXInLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiB0cnVlLFxuICAgICAgICAgICAgZm4oaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBvbkNyZWF0ZSgpIHtcbiAgICAgICAgICAgICAgICAgIGluc3RhbmNlLnBvcHBlci5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UucHJvcHMuaGlkZU9uUG9wcGVyQmx1ciAmJlxuICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlbGF0ZWRUYXJnZXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAhaW5zdGFuY2UucG9wcGVyLmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiAnaGlkZU9uRXNjJyxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogdHJ1ZSxcbiAgICAgICAgICAgIGZuKHtoaWRlfSk6IGFueSB7XG5cbiAgICAgICAgICAgICAgZnVuY3Rpb24gb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gTGlzdGJveENvbXBvbmVudC5LRVlfQ09ERV9FU0MpIHtcbiAgICAgICAgICAgICAgICAgIGhpZGUoKTtcbiAgICAgICAgICAgICAgICAgIGxpc3Rib3hCdXR0b25FbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBvblNob3coKTogdm9pZCB7XG4gICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXlEb3duKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uSGlkZSgpOiB2b2lkIHtcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbktleURvd24pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcm9sZTogZmFsc2UsXG4gICAgICAgIGFyaWE6IHtcbiAgICAgICAgICBjb250ZW50OiAnYXV0bycsXG4gICAgICAgIH0sXG4gICAgICAgIG9uU2hvdzogdGhpcy5vbkxpc3RTaG93LmJpbmQodGhpcyksXG4gICAgICAgIG9uSGlkZGVuOiB0aGlzLm9uTGlzdENsb3NlLmJpbmQodGhpcylcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgIGlmICh0aGlzLml0ZW1Db21wb25lbnRMaXN0ICYmIHRoaXMuaXRlbUNvbXBvbmVudExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAodGhpcy5pdGVtQ29tcG9uZW50U3Vic2NyaXB0aW9ucykge1xuICAgICAgICAgIHRoaXMuaXRlbUNvbXBvbmVudFN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pdGVtQ29tcG9uZW50U3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgICAgICB0aGlzLml0ZW1MaXN0ID0gW107XG4gICAgICAgIHRoaXMuaXRlbUNvbXBvbmVudExpc3QuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBpdGVtLml0ZW1DaGFuZ2Uuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2hlY2tBY3RpdmVJdGVtcygpKTtcbiAgICAgICAgICB0aGlzLml0ZW1Db21wb25lbnRTdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICB0aGlzLml0ZW1MaXN0LnB1c2goaXRlbSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pdGVtTGlzdCA9IHRoaXMuaXRlbXM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2hlY2tBY3RpdmVJdGVtcygpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pdGVtcyB8fCAhdGhpcy5pdGVtTGlzdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2hlY2tBY3RpdmVJdGVtcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBY3RpdmVJdGVtc0RhdGEoKTogeyBpdGVtOiBMaXN0Ym94SXRlbURhdGEsIGluZGV4OiBudW1iZXIgfVtdIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtTGlzdFxuICAgICAgLm1hcCgoaXRlbSwgaW5kZXgpID0+IGl0ZW0uYWN0aXZlID8ge2l0ZW0sIGluZGV4fSA6IG51bGwpXG4gICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gbnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQWN0aXZlSXRlbXMoKTogdm9pZCB7XG4gICAgbGV0IGFjdGl2ZUl0ZW1zOiB7IGl0ZW06IExpc3Rib3hJdGVtRGF0YSwgaW5kZXg6IG51bWJlciB9W10gPSB0aGlzLml0ZW1MaXN0XG4gICAgICAubWFwKChpdGVtLCBpbmRleCkgPT4gaXRlbS5hY3RpdmUgPyB7aXRlbSwgaW5kZXh9IDogbnVsbClcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtICE9PSBudWxsKTtcblxuICAgIGxldCBoYXNBY3RpdmVJdGVtQ2hhbmdlID0gZmFsc2U7XG4gICAgaWYgKHRoaXMubGFzdEFjdGl2ZUl0ZW1zICYmIGFjdGl2ZUl0ZW1zLmxlbmd0aCA9PT0gdGhpcy5sYXN0QWN0aXZlSXRlbXMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdGl2ZUl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhY3RpdmVJdGVtc1tpXS5pbmRleCAhPT0gdGhpcy5sYXN0QWN0aXZlSXRlbXNbaV0uaW5kZXgpIHtcbiAgICAgICAgICBoYXNBY3RpdmVJdGVtQ2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoYXNBY3RpdmVJdGVtQ2hhbmdlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBTaSBoYXkgY2FtYmlvcyBleHRlcm5vcyB5IGVzIHNlbGVjY2nDs24gw7puaWNhLCBhbnVsYW1vcyBsYSBzZWxlY2Npw7NuIGFudGVyaW9yXG4gICAgaWYgKHRoaXMubGFzdEFjdGl2ZUl0ZW1zICYmICF0aGlzLmlzTXVsdGlzZWxlY3RhYmxlICYmIGhhc0FjdGl2ZUl0ZW1DaGFuZ2UpIHtcbiAgICAgIGlmIChhY3RpdmVJdGVtcy5sZW5ndGggIT09IHRoaXMubGFzdEFjdGl2ZUl0ZW1zLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IG5ld0l0ZW0gb2YgYWN0aXZlSXRlbXMpIHtcbiAgICAgICAgICBpZiAodGhpcy5sYXN0QWN0aXZlSXRlbXMuZmluZEluZGV4KGkgPT4gaS5pbmRleCA9PT0gbmV3SXRlbS5pbmRleCkgPj0gMCkge1xuICAgICAgICAgICAgbmV3SXRlbS5pdGVtLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFjdGl2ZUl0ZW1zID0gYWN0aXZlSXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pdGVtLmFjdGl2ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxhc3RBY3RpdmVJdGVtcyA9IGFjdGl2ZUl0ZW1zO1xuXG4gICAgLy8gU2UgY2FtYmlhIGVsIGNvbnRlbmlkbyBkZWwgYm90w7NuXG4gICAgaWYgKHRoaXMuZG9lc0NoYW5nZUJ1dHRvblRleHQgJiYgIXRoaXMuaXNNdWx0aXNlbGVjdGFibGUgJiYgYWN0aXZlSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgYWN0aXZlSXRlbU9wdGlvbiA9IHRoaXMubGlzdGJveE9wdGlvbnMuZmluZCgoaXRlbSwgaW5kZXgpID0+IGluZGV4ID09PSBhY3RpdmVJdGVtc1swXS5pbmRleCk7XG4gICAgICBpZiAoYWN0aXZlSXRlbU9wdGlvbikge1xuICAgICAgICB0aGlzLmJ1dHRvbkNvbnRlbnRIdG1sID0gYWN0aXZlSXRlbU9wdGlvbi5uYXRpdmVFbGVtZW50LmlubmVySFRNTDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5idXR0b25Db250ZW50SHRtbCA9IHRoaXMuaHRtbCA/IHRoaXMuaHRtbCA6IG51bGw7XG4gICAgfVxuXG4gICAgLy8gU2kgaGF5IGNhbWJpb3MsIHNlIGVtaXRlblxuICAgIGlmIChoYXNBY3RpdmVJdGVtQ2hhbmdlKSB7XG4gICAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQodGhpcy5pdGVtTGlzdCk7XG4gICAgICB0aGlzLmFjdGl2ZUl0ZW1DaGFuZ2UuZW1pdChhY3RpdmVJdGVtcy5sZW5ndGggPiAwID8gYWN0aXZlSXRlbXNbMF0uaXRlbSA6IG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIG9uTGlzdFNob3coKTogdm9pZCB7XG4gICAgdGhpcy5pc0xpc3RWaXNpYmxlID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5saXN0Ym94TGlzdCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmxpc3Rib3hMaXN0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSk7XG4gICAgfVxuICB9XG5cbiAgb25MaXN0Q2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5pc0xpc3RWaXNpYmxlID0gZmFsc2U7XG4gIH1cblxuICBvbkxpc3RGb2N1cygpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVJdGVtc0RhdGEgPSB0aGlzLmdldEFjdGl2ZUl0ZW1zRGF0YSgpO1xuICAgIGlmIChhY3RpdmVJdGVtc0RhdGEubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgYWN0aXZlRWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0SXRlbUlkKGFjdGl2ZUl0ZW1zRGF0YVswXS5pdGVtLCBhY3RpdmVJdGVtc0RhdGFbMF0uaW5kZXgpKTtcbiAgICAgIGlmIChhY3RpdmVFbGVtKSB7XG4gICAgICAgIGFjdGl2ZUVsZW0uZm9jdXMoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50Rm9jdXNJbmRleCA9IGFjdGl2ZUl0ZW1zRGF0YVswXS5pbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUxpc3QgJiYgdGhpcy5pdGVtTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGb2N1c0luZGV4ID0gMDtcbiAgICAgIGlmICghdGhpcy5pc011bHRpc2VsZWN0YWJsZSkge1xuICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oMCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybignTm8gZWxlbWVudCB0byBmb2N1cycpO1xuICAgIH1cbiAgfVxuXG4gIG1vdmVGb2N1cyhwb3NpdGlvbjogbnVtYmVyLCBldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKHBvc2l0aW9uID49IDAgJiYgcG9zaXRpb24gPCB0aGlzLml0ZW1MaXN0Lmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMuaXNNdWx0aXNlbGVjdGFibGUpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Rm9jdXNJbmRleCA9IHBvc2l0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RJdGVtKHBvc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblNwYWNlKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAodGhpcy5pc011bHRpc2VsZWN0YWJsZSkge1xuICAgICAgdGhpcy5zZWxlY3RJdGVtKHRoaXMuY3VycmVudEZvY3VzSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEl0ZW0oaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc011bHRpc2VsZWN0YWJsZSkge1xuICAgICAgdGhpcy5pdGVtTGlzdC5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5hY3RpdmUgPSBmYWxzZSk7XG4gICAgICB0aGlzLml0ZW1MaXN0W2luZGV4XS5hY3RpdmUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLml0ZW1MaXN0W2luZGV4XS5hY3RpdmUgPSAhdGhpcy5pdGVtTGlzdFtpbmRleF0uYWN0aXZlO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRGb2N1c0luZGV4ID0gaW5kZXg7XG5cbiAgICB0aGlzLmNoZWNrQWN0aXZlSXRlbXMoKTtcbiAgfVxuXG4gIC8qXG4gICAqIE3DqXRvZG9zIHBhcmEgZmFjaWxpdGFyIGNvbnRlbmlkbyBhbCB0ZW1wbGF0ZVxuICAgKi9cblxuICBnZXRJZFByZWZpeCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkUHJlZml4ID8gdGhpcy5pZFByZWZpeCA6IHRoaXMuaWQgKyAnLWxpc3Rib3gtaXRlbSc7XG4gIH1cblxuICBnZXRJdGVtSWQoaXRlbTogTGlzdGJveEl0ZW1EYXRhLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBsZXQgaXRlbUlkOiBzdHJpbmc7XG4gICAgaWYgKGl0ZW0uaWQpIHtcbiAgICAgIGl0ZW1JZCA9IGl0ZW0uaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1JZCA9IHRoaXMuZ2V0SWRQcmVmaXgoKTtcbiAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgaXRlbUlkICs9IGAtJHtpbmRleH1gO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXRlbUlkO1xuICB9XG5cbiAgaGFzTGFiZWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMubGFiZWwgfHwgdGhpcy5sYWJlbENvbXBvbmVudCk7XG4gIH1cblxuICBnZXRMYWJlbENvbnRlbnQobGFiZWw6IExpc3Rib3hMYWJlbERhdGEpOiBzdHJpbmcge1xuICAgIHJldHVybiBsYWJlbC5odG1sID8gbGFiZWwuaHRtbCA6IGA8cD4keyBTdHJpbmdVdGlscy5lc2NhcGVIdG1sKGxhYmVsLnRleHQpIH08L3A+YDtcbiAgfVxufVxuIl19
|