desy-angular 6.0.2 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/desy-angular.mjs +5 -0
- package/esm2020/lib/desy-angular.module.mjs +75 -0
- package/esm2020/lib/desy-buttons/components/button/button.component.mjs +115 -0
- package/esm2020/lib/desy-buttons/components/button-loader/button-loader.component.mjs +63 -0
- package/esm2020/lib/desy-buttons/components/dropdown/dropdown.component.mjs +126 -0
- package/esm2020/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.mjs +32 -0
- package/esm2020/lib/desy-buttons/components/listbox/listbox-label/listbox-label.component.mjs +14 -0
- package/esm2020/lib/desy-buttons/components/listbox/listbox.component.mjs +291 -0
- package/esm2020/lib/desy-buttons/components/pill/pill.component.mjs +80 -0
- package/esm2020/lib/desy-buttons/components/toggle/toggle-off-state/toggle-off-state.component.mjs +17 -0
- package/esm2020/lib/desy-buttons/components/toggle/toggle-on-state/toggle-on-state.component.mjs +17 -0
- package/esm2020/lib/desy-buttons/components/toggle/toggle.component.mjs +59 -0
- package/{esm2015/lib/desy-buttons/desy-buttons.module.js → esm2020/lib/desy-buttons/desy-buttons.module.mjs} +64 -35
- package/esm2020/lib/desy-commons/components/content/content.component.mjs +14 -0
- package/esm2020/lib/desy-commons/components/description/description.component.mjs +19 -0
- package/esm2020/lib/desy-commons/components/divider/divider.component.mjs +16 -0
- package/esm2020/lib/desy-commons/components/icon/icon.component.mjs +16 -0
- package/esm2020/lib/desy-commons/components/title/title.component.mjs +17 -0
- package/esm2020/lib/desy-commons/desy-commons.module.mjs +53 -0
- package/esm2020/lib/desy-forms/components/character-count/character-count.component.mjs +130 -0
- package/esm2020/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.mjs +240 -0
- package/esm2020/lib/desy-forms/components/checkboxes/checkboxes.component.mjs +264 -0
- package/esm2020/lib/desy-forms/components/date-input/date-input-day/date-input-day.component.mjs +52 -0
- package/esm2020/lib/desy-forms/components/date-input/date-input-divider/date-input-divider.component.mjs +19 -0
- package/esm2020/lib/desy-forms/components/date-input/date-input-item/date-input-item.component.mjs +16 -0
- package/esm2020/lib/desy-forms/components/date-input/date-input-month/date-input-month.component.mjs +52 -0
- package/esm2020/lib/desy-forms/components/date-input/date-input-year/date-input-year.component.mjs +48 -0
- package/esm2020/lib/desy-forms/components/date-input/date-input.component.mjs +266 -0
- package/esm2020/lib/desy-forms/components/error-message/error-message.component.mjs +31 -0
- package/esm2020/lib/desy-forms/components/fieldset/fieldset.component.mjs +56 -0
- package/esm2020/lib/desy-forms/components/fieldset/legend/legend.component.mjs +23 -0
- package/esm2020/lib/desy-forms/components/file-upload/file-upload.component.mjs +72 -0
- package/esm2020/lib/desy-forms/components/form-field/form-field.component.mjs +124 -0
- package/esm2020/lib/desy-forms/components/hint/hint.component.mjs +29 -0
- package/esm2020/lib/desy-forms/components/input/input.component.mjs +99 -0
- package/esm2020/lib/desy-forms/components/input-group/input-group-divider/input-group-divider.component.mjs +20 -0
- package/esm2020/lib/desy-forms/components/input-group/input-group-input/input-group-input.component.mjs +53 -0
- package/esm2020/lib/desy-forms/components/input-group/input-group-item/input-group-item.component.mjs +16 -0
- package/esm2020/lib/desy-forms/components/input-group/input-group-select/input-group-select.component.mjs +45 -0
- package/esm2020/lib/desy-forms/components/input-group/input-group.component.mjs +223 -0
- package/esm2020/lib/desy-forms/components/label/label.component.mjs +38 -0
- package/esm2020/lib/desy-forms/components/radios/radio-item/radio-item.component.mjs +185 -0
- package/esm2020/lib/desy-forms/components/radios/radios.component.mjs +270 -0
- package/esm2020/lib/desy-forms/components/search-bar/search-bar.component.mjs +66 -0
- package/esm2020/lib/desy-forms/components/select/option/option.component.mjs +22 -0
- package/esm2020/lib/desy-forms/components/select/option-group/option-group.component.mjs +18 -0
- package/esm2020/lib/desy-forms/components/select/select-item/select-item.component.mjs +14 -0
- package/esm2020/lib/desy-forms/components/select/select.component.mjs +93 -0
- package/esm2020/lib/desy-forms/components/template-driven-wrapper/template-driven-wrapper.component.mjs +12 -0
- package/esm2020/lib/desy-forms/components/textarea/textarea.component.mjs +86 -0
- package/esm2020/lib/desy-forms/components/tree/tree-checkbox/tree-checkbox.component.mjs +167 -0
- package/esm2020/lib/desy-forms/components/tree/tree-item/tree-item.component.mjs +397 -0
- package/esm2020/lib/desy-forms/components/tree/tree-items-generator/tree-items-generator.component.mjs +25 -0
- package/esm2020/lib/desy-forms/components/tree/tree-sub/tree-sub.component.mjs +15 -0
- package/esm2020/lib/desy-forms/components/tree/tree.component.mjs +425 -0
- package/esm2020/lib/desy-forms/desy-forms.module.mjs +209 -0
- package/esm2020/lib/desy-forms/directives/condition.directive.mjs +34 -0
- package/{esm2015/lib/desy-forms/interfaces/select-item-data.js → esm2020/lib/desy-forms/interfaces/select-item-data.mjs} +1 -1
- package/esm2020/lib/desy-forms/models/checkbox-service-item.component.mjs +9 -0
- package/esm2020/lib/desy-forms/models/radio-service-item.component.mjs +9 -0
- package/esm2020/lib/desy-forms/services/checkbox.service.mjs +61 -0
- package/esm2020/lib/desy-forms/services/radio.service.mjs +53 -0
- package/esm2020/lib/desy-modals/components/dialog/dialog.component.mjs +130 -0
- package/esm2020/lib/desy-modals/components/modal/modal-button-loader-primary/modal-button-loader-primary.component.mjs +25 -0
- package/esm2020/lib/desy-modals/components/modal/modal-button-loader-secondary/modal-button-loader-secondary.component.mjs +23 -0
- package/esm2020/lib/desy-modals/components/modal/modal-button-primary/modal-button-primary.component.mjs +23 -0
- package/esm2020/lib/desy-modals/components/modal/modal-button-secondary/modal-button-secondary.component.mjs +23 -0
- package/esm2020/lib/desy-modals/components/modal/modal.component.mjs +178 -0
- package/esm2020/lib/desy-modals/desy-modals.module.mjs +62 -0
- package/esm2020/lib/desy-modals/services/dialog.service.mjs +114 -0
- package/esm2020/lib/desy-nav/components/breadcrumbs/breadcrumbs-item/breadcrumbs-item.component.mjs +16 -0
- package/esm2020/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.mjs +47 -0
- package/esm2020/lib/desy-nav/components/error-summary/error-summary-item/error-summary-item.component.mjs +19 -0
- package/esm2020/lib/desy-nav/components/error-summary/error-summary.component.mjs +62 -0
- package/esm2020/lib/desy-nav/components/footer/footer-meta/footer-meta-item/footer-meta-item.component.mjs +21 -0
- package/esm2020/lib/desy-nav/components/footer/footer-meta/footer-meta.component.mjs +30 -0
- package/esm2020/lib/desy-nav/components/footer/footer-navigation/footer-navigation-item/footer-navigation-item.component.mjs +21 -0
- package/esm2020/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.mjs +19 -0
- package/esm2020/lib/desy-nav/components/footer/footer.component.mjs +71 -0
- package/esm2020/lib/desy-nav/components/header/header-custom-navigation/header-custom-navigation.component.mjs +15 -0
- package/esm2020/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.mjs +45 -0
- package/esm2020/lib/desy-nav/components/header/header-navigation/header-navigation-item/header-navigation-item.component.mjs +27 -0
- package/esm2020/lib/desy-nav/components/header/header-navigation/header-navigation.component.mjs +36 -0
- package/esm2020/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.mjs +20 -0
- package/esm2020/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component.mjs +15 -0
- package/esm2020/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.mjs +95 -0
- package/esm2020/lib/desy-nav/components/header/header-subnav/header-subnav.component.mjs +41 -0
- package/esm2020/lib/desy-nav/components/header/header.component.mjs +103 -0
- package/esm2020/lib/desy-nav/components/menu-horizontal/menu-horizontal-item/menu-horizontal-item.component.mjs +40 -0
- package/esm2020/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.mjs +79 -0
- package/esm2020/lib/desy-nav/components/menu-navigation/components/menu-navigation-item/menu-navigation-item.component.mjs +49 -0
- package/esm2020/lib/desy-nav/components/menu-navigation/components/menu-navigation-subitem/menu-navigation-subitem.component.mjs +43 -0
- package/esm2020/lib/desy-nav/components/menu-navigation/menu-navigation.component.mjs +616 -0
- package/esm2020/lib/desy-nav/components/menu-vertical/menu-vertical-item/menu-vertical-item.component.mjs +45 -0
- package/esm2020/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub/menu-vertical-item-sub.component.mjs +18 -0
- package/esm2020/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component.mjs +34 -0
- package/esm2020/lib/desy-nav/components/menu-vertical/menu-vertical.component.mjs +113 -0
- package/esm2020/lib/desy-nav/components/menubar/components/menubar-item/menubar-item.component.mjs +51 -0
- package/esm2020/lib/desy-nav/components/menubar/components/menubar-label/menubar-label.component.mjs +14 -0
- package/esm2020/lib/desy-nav/components/menubar/components/menubar-subitem/menubar-subitem.component.mjs +36 -0
- package/esm2020/lib/desy-nav/components/menubar/components/menubar-subsubitem/menubar-subsubitem.component.mjs +27 -0
- package/esm2020/lib/desy-nav/components/menubar/directives/menubaritem.directive.mjs +45 -0
- package/esm2020/lib/desy-nav/components/menubar/menubar.component.mjs +727 -0
- package/esm2020/lib/desy-nav/components/nav/nav-item/nav-item.component.mjs +41 -0
- package/esm2020/lib/desy-nav/components/nav/nav.component.mjs +116 -0
- package/esm2020/lib/desy-nav/components/notification/notification-item/notification-item.component.mjs +25 -0
- package/esm2020/lib/desy-nav/components/notification/notification.component.mjs +141 -0
- package/esm2020/lib/desy-nav/components/skip-link/skip-link.component.mjs +37 -0
- package/esm2020/lib/desy-nav/desy-nav.module.mjs +221 -0
- package/{esm2015/lib/desy-nav/interfaces/menu-horizontal-item-data.js → esm2020/lib/desy-nav/interfaces/menu-horizontal-item-data.mjs} +1 -1
- package/{esm2015/lib/desy-nav/interfaces/menu-horizontal-item-event-data.js → esm2020/lib/desy-nav/interfaces/menu-horizontal-item-event-data.mjs} +1 -1
- package/esm2020/lib/desy-nav/interfaces/menu-navigation-item-sub-item.mjs +2 -0
- package/esm2020/lib/desy-pagination/components/pagination/pagination.component.mjs +167 -0
- package/esm2020/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.mjs +19 -0
- package/esm2020/lib/desy-pagination/components/pagination-listbox-label/pagination-listbox-label.component.mjs +17 -0
- package/esm2020/lib/desy-pagination/desy-pagination.module.mjs +46 -0
- package/esm2020/lib/desy-tables/components/table/components/table-caption.component.mjs +17 -0
- package/esm2020/lib/desy-tables/components/table/components/table-cell.component.mjs +23 -0
- package/esm2020/lib/desy-tables/components/table/components/table-header.component.mjs +18 -0
- package/esm2020/lib/desy-tables/components/table/components/table-row.component.mjs +18 -0
- package/esm2020/lib/desy-tables/components/table/table.component.mjs +78 -0
- package/esm2020/lib/desy-tables/components/table-advanced/components/table-advanced-header-cell.component.mjs +47 -0
- package/esm2020/lib/desy-tables/components/table-advanced/components/table-advanced-header.component.mjs +18 -0
- package/esm2020/lib/desy-tables/components/table-advanced/components/table-advanced-row-cell.component.mjs +23 -0
- package/esm2020/lib/desy-tables/components/table-advanced/components/table-advanced-row.component.mjs +27 -0
- package/esm2020/lib/desy-tables/components/table-advanced/components/table-advanced-select.component.mjs +28 -0
- package/esm2020/lib/desy-tables/components/table-advanced/table-advanced.component.mjs +342 -0
- package/esm2020/lib/desy-tables/desy-tables.module.mjs +102 -0
- package/esm2020/lib/desy-tables/directives/cell.directive.mjs +28 -0
- package/esm2020/lib/desy-tables/directives/focus-clicked-cell.directive.mjs +81 -0
- package/esm2020/lib/desy-tables/directives/row.directive.mjs +29 -0
- package/esm2020/lib/desy-tables/interfaces/head-cell-data.mjs +7 -0
- package/esm2020/lib/desy-views/components/accordion/accordion-header/accordion-header.component.mjs +17 -0
- package/esm2020/lib/desy-views/components/accordion/accordion-item/accordion-item.component.mjs +57 -0
- package/esm2020/lib/desy-views/components/accordion/accordion.component.mjs +198 -0
- package/esm2020/lib/desy-views/components/accordion-history/accordion-history-item/accordion-history-item.component.mjs +39 -0
- package/esm2020/lib/desy-views/components/accordion-history/accordion-history.component.mjs +19 -0
- package/esm2020/lib/desy-views/components/accordion-history/accordion-item-hide-button/accordion-item-hide-button.component.mjs +17 -0
- package/esm2020/lib/desy-views/components/accordion-history/accordion-item-show-button/accordion-item-show-button.component.mjs +17 -0
- package/esm2020/lib/desy-views/components/alert/alert.component.mjs +81 -0
- package/esm2020/lib/desy-views/components/collapsible/collapsible.component.mjs +81 -0
- package/esm2020/lib/desy-views/components/description-list/definition/definition.component.mjs +19 -0
- package/esm2020/lib/desy-views/components/description-list/description-item/description-item.component.mjs +34 -0
- package/esm2020/lib/desy-views/components/description-list/description-list.component.mjs +28 -0
- package/esm2020/lib/desy-views/components/description-list/term/term.component.mjs +19 -0
- package/esm2020/lib/desy-views/components/details/details.component.mjs +31 -0
- package/esm2020/lib/desy-views/components/item/item-content-bottom/item-content-bottom.component.mjs +17 -0
- package/esm2020/lib/desy-views/components/item/item-content-right/item-content-right.component.mjs +15 -0
- package/esm2020/lib/desy-views/components/item/item-item/item-item.component.mjs +15 -0
- package/esm2020/lib/desy-views/components/item/item.component.mjs +121 -0
- package/esm2020/lib/desy-views/components/media-object/media-object-figure/media-object-figure.component.mjs +12 -0
- package/esm2020/lib/desy-views/components/media-object/media-object.component.mjs +115 -0
- package/esm2020/lib/desy-views/components/spinner/spinner.component.mjs +77 -0
- package/esm2020/lib/desy-views/components/status/status.component.mjs +97 -0
- package/esm2020/lib/desy-views/components/status-item/status-item.component.mjs +143 -0
- package/esm2020/lib/desy-views/components/tabs/panel/panel.component.mjs +19 -0
- package/esm2020/lib/desy-views/components/tabs/tab-item/tab-item.component.mjs +37 -0
- package/esm2020/lib/desy-views/components/tabs/tabs.component.mjs +199 -0
- package/esm2020/lib/desy-views/components/tooltip/tooltip-content/tooltip-content.component.mjs +12 -0
- package/esm2020/lib/desy-views/components/tooltip/tooltip.component.mjs +202 -0
- package/esm2020/lib/desy-views/desy-views.module.mjs +175 -0
- package/{esm2015/lib/desy-views/interfaces/accordion-item.data.js → esm2020/lib/desy-views/interfaces/accordion-item.data.mjs} +1 -1
- package/esm2020/lib/desy-views/interfaces/tabs-items-data.mjs +2 -0
- package/esm2020/lib/desy-views/services/alert.service.mjs +88 -0
- package/esm2020/lib/shared/components/accessibility/accessibility.component.mjs +45 -0
- package/esm2020/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.mjs +44 -0
- package/esm2020/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.mjs +41 -0
- package/esm2020/lib/shared/components/content-base/content-base.component.mjs +24 -0
- package/esm2020/lib/shared/components/text-or-html-required/text-or-html-required.component.mjs +18 -0
- package/esm2020/lib/shared/directives/attribute-change.directive.mjs +45 -0
- package/esm2020/lib/shared/directives/click-outside.directive.mjs +40 -0
- package/esm2020/lib/shared/directives/content-change.directive.mjs +45 -0
- package/esm2020/lib/shared/directives/custom-inner-content.directive.mjs +60 -0
- package/esm2020/lib/shared/directives/inner-content.directive.mjs +37 -0
- package/esm2020/lib/shared/pipes/external-href.pipe.mjs +32 -0
- package/esm2020/lib/shared/pipes/inner-html.pipe.mjs +20 -0
- package/esm2020/lib/shared/pipes/make-html-list.pipe.mjs +20 -0
- package/esm2020/lib/shared/shared.module.mjs +99 -0
- package/esm2020/public-api.mjs +221 -0
- package/fesm2015/desy-angular.mjs +11752 -0
- package/fesm2015/desy-angular.mjs.map +1 -0
- package/fesm2020/desy-angular.mjs +11731 -0
- package/fesm2020/desy-angular.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/desy-angular.module.d.ts +12 -0
- package/lib/desy-buttons/components/button/button.component.d.ts +7 -2
- package/lib/desy-buttons/components/button-loader/button-loader.component.d.ts +7 -1
- package/lib/desy-buttons/components/dropdown/dropdown.component.d.ts +3 -0
- package/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.d.ts +3 -0
- package/lib/desy-buttons/components/listbox/listbox-label/listbox-label.component.d.ts +3 -0
- package/lib/desy-buttons/components/listbox/listbox.component.d.ts +5 -2
- package/lib/desy-buttons/components/pill/pill.component.d.ts +7 -2
- package/lib/desy-buttons/components/toggle/toggle-off-state/toggle-off-state.component.d.ts +3 -0
- package/lib/desy-buttons/components/toggle/toggle-on-state/toggle-on-state.component.d.ts +3 -0
- package/lib/desy-buttons/components/toggle/toggle.component.d.ts +3 -0
- package/lib/desy-buttons/desy-buttons.module.d.ts +18 -0
- package/lib/desy-commons/components/content/content.component.d.ts +3 -0
- package/lib/desy-commons/components/description/description.component.d.ts +3 -0
- package/lib/desy-commons/components/divider/divider.component.d.ts +3 -0
- package/lib/desy-commons/components/icon/icon.component.d.ts +3 -0
- package/lib/desy-commons/components/title/title.component.d.ts +3 -0
- package/lib/desy-commons/desy-commons.module.d.ts +12 -0
- package/lib/desy-forms/components/character-count/character-count.component.d.ts +3 -0
- package/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.d.ts +6 -3
- package/lib/desy-forms/components/checkboxes/checkboxes.component.d.ts +11 -10
- package/lib/desy-forms/components/date-input/date-input-day/date-input-day.component.d.ts +3 -0
- package/lib/desy-forms/components/date-input/date-input-divider/date-input-divider.component.d.ts +3 -0
- package/lib/desy-forms/components/date-input/date-input-item/date-input-item.component.d.ts +3 -0
- package/lib/desy-forms/components/date-input/date-input-month/date-input-month.component.d.ts +3 -0
- package/lib/desy-forms/components/date-input/date-input-year/date-input-year.component.d.ts +3 -0
- package/lib/desy-forms/components/date-input/date-input.component.d.ts +8 -3
- package/lib/desy-forms/components/error-message/error-message.component.d.ts +3 -0
- package/lib/desy-forms/components/fieldset/fieldset.component.d.ts +3 -0
- package/lib/desy-forms/components/fieldset/legend/legend.component.d.ts +7 -1
- package/lib/desy-forms/components/file-upload/file-upload.component.d.ts +4 -1
- package/lib/desy-forms/components/form-field/form-field.component.d.ts +3 -0
- package/lib/desy-forms/components/hint/hint.component.d.ts +3 -0
- package/lib/desy-forms/components/input/input.component.d.ts +4 -0
- package/lib/desy-forms/components/input-group/input-group-divider/input-group-divider.component.d.ts +3 -0
- package/lib/desy-forms/components/input-group/input-group-input/input-group-input.component.d.ts +3 -0
- package/lib/desy-forms/components/input-group/input-group-item/input-group-item.component.d.ts +3 -0
- package/lib/desy-forms/components/input-group/input-group-select/input-group-select.component.d.ts +3 -0
- package/lib/desy-forms/components/input-group/input-group.component.d.ts +5 -1
- package/lib/desy-forms/components/label/label.component.d.ts +7 -2
- package/lib/desy-forms/components/radios/radio-item/radio-item.component.d.ts +6 -3
- package/lib/desy-forms/components/radios/radios.component.d.ts +11 -10
- package/lib/desy-forms/components/search-bar/search-bar.component.d.ts +4 -0
- package/lib/desy-forms/components/select/option/option.component.d.ts +3 -0
- package/lib/desy-forms/components/select/option-group/option-group.component.d.ts +3 -0
- package/lib/desy-forms/components/select/select-item/select-item.component.d.ts +3 -0
- package/lib/desy-forms/components/select/select.component.d.ts +4 -0
- package/lib/desy-forms/components/template-driven-wrapper/template-driven-wrapper.component.d.ts +3 -0
- package/lib/desy-forms/components/textarea/textarea.component.d.ts +4 -1
- package/lib/desy-forms/components/tree/tree-checkbox/tree-checkbox.component.d.ts +4 -1
- package/lib/desy-forms/components/tree/tree-item/tree-item.component.d.ts +9 -6
- package/lib/desy-forms/components/tree/tree-items-generator/tree-items-generator.component.d.ts +3 -0
- package/lib/desy-forms/components/tree/tree-sub/tree-sub.component.d.ts +3 -0
- package/lib/desy-forms/components/tree/tree.component.d.ts +3 -0
- package/lib/desy-forms/desy-forms.module.d.ts +45 -0
- package/lib/desy-forms/directives/condition.directive.d.ts +3 -0
- package/lib/desy-forms/interfaces/select-item-data.d.ts +3 -0
- package/lib/desy-forms/models/checkbox-service-item.component.d.ts +13 -0
- package/lib/desy-forms/models/radio-service-item.component.d.ts +12 -0
- package/lib/desy-forms/services/checkbox.service.d.ts +14 -0
- package/lib/desy-forms/services/radio.service.d.ts +13 -0
- package/lib/desy-modals/components/dialog/dialog.component.d.ts +5 -2
- package/lib/desy-modals/components/modal/modal-button-loader-primary/modal-button-loader-primary.component.d.ts +3 -0
- package/lib/desy-modals/components/modal/modal-button-loader-secondary/modal-button-loader-secondary.component.d.ts +3 -0
- package/lib/desy-modals/components/modal/modal-button-primary/modal-button-primary.component.d.ts +3 -0
- package/lib/desy-modals/components/modal/modal-button-secondary/modal-button-secondary.component.d.ts +3 -0
- package/lib/desy-modals/components/modal/modal.component.d.ts +3 -0
- package/lib/desy-modals/desy-modals.module.d.ts +14 -0
- package/lib/desy-modals/services/dialog.service.d.ts +3 -0
- package/lib/desy-nav/components/breadcrumbs/breadcrumbs-item/breadcrumbs-item.component.d.ts +3 -0
- package/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.d.ts +3 -0
- package/lib/desy-nav/components/error-summary/error-summary-item/error-summary-item.component.d.ts +3 -0
- package/lib/desy-nav/components/error-summary/error-summary.component.d.ts +3 -0
- package/lib/desy-nav/components/footer/footer-meta/footer-meta-item/footer-meta-item.component.d.ts +3 -0
- package/lib/desy-nav/components/footer/footer-meta/footer-meta.component.d.ts +3 -0
- package/lib/desy-nav/components/footer/footer-navigation/footer-navigation-item/footer-navigation-item.component.d.ts +3 -0
- package/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.d.ts +3 -0
- package/lib/desy-nav/components/footer/footer.component.d.ts +3 -0
- 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 +3 -0
- package/lib/desy-nav/components/header/header-navigation/header-navigation-item/header-navigation-item.component.d.ts +3 -0
- package/lib/desy-nav/components/header/header-navigation/header-navigation.component.d.ts +3 -0
- package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.d.ts +3 -0
- package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component.d.ts +3 -0
- package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.d.ts +3 -0
- package/lib/desy-nav/components/header/header-subnav/header-subnav.component.d.ts +3 -0
- package/lib/desy-nav/components/header/header.component.d.ts +3 -0
- package/lib/desy-nav/components/menu-horizontal/menu-horizontal-item/menu-horizontal-item.component.d.ts +3 -0
- package/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.d.ts +3 -0
- package/lib/desy-nav/components/menu-navigation/components/menu-navigation-item/menu-navigation-item.component.d.ts +3 -0
- package/lib/desy-nav/components/menu-navigation/components/menu-navigation-subitem/menu-navigation-subitem.component.d.ts +3 -0
- package/lib/desy-nav/components/menu-navigation/menu-navigation.component.d.ts +3 -0
- package/lib/desy-nav/components/menu-vertical/menu-vertical-item/menu-vertical-item.component.d.ts +3 -0
- package/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub/menu-vertical-item-sub.component.d.ts +3 -0
- package/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component.d.ts +3 -0
- package/lib/desy-nav/components/menu-vertical/menu-vertical.component.d.ts +3 -0
- package/lib/desy-nav/components/menubar/components/menubar-item/menubar-item.component.d.ts +3 -0
- package/lib/desy-nav/components/menubar/components/menubar-label/menubar-label.component.d.ts +3 -0
- package/lib/desy-nav/components/menubar/components/menubar-subitem/menubar-subitem.component.d.ts +3 -0
- package/lib/desy-nav/components/menubar/components/menubar-subsubitem/menubar-subsubitem.component.d.ts +3 -0
- package/lib/desy-nav/components/menubar/directives/menubaritem.directive.d.ts +3 -0
- package/lib/desy-nav/components/menubar/menubar.component.d.ts +3 -0
- package/lib/desy-nav/components/nav/nav-item/nav-item.component.d.ts +3 -0
- package/lib/desy-nav/components/nav/nav.component.d.ts +6 -3
- package/lib/desy-nav/components/notification/notification-item/notification-item.component.d.ts +3 -0
- package/lib/desy-nav/components/notification/notification.component.d.ts +3 -0
- package/lib/desy-nav/components/skip-link/skip-link.component.d.ts +3 -0
- package/lib/desy-nav/desy-nav.module.d.ts +46 -0
- package/lib/desy-nav/interfaces/menu-horizontal-item-data.d.ts +1 -0
- package/lib/desy-nav/interfaces/menu-horizontal-item-event-data.d.ts +1 -0
- package/lib/desy-nav/interfaces/menu-navigation-item-sub-item.d.ts +8 -0
- package/lib/desy-pagination/components/pagination/pagination.component.d.ts +3 -0
- package/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.d.ts +3 -0
- package/lib/desy-pagination/components/pagination-listbox-label/pagination-listbox-label.component.d.ts +3 -0
- package/lib/desy-pagination/desy-pagination.module.d.ts +11 -0
- package/lib/desy-tables/components/table/components/table-caption.component.d.ts +3 -0
- package/lib/desy-tables/components/table/components/table-cell.component.d.ts +3 -0
- package/lib/desy-tables/components/table/components/table-header.component.d.ts +3 -0
- package/lib/desy-tables/components/table/components/table-row.component.d.ts +3 -0
- package/lib/desy-tables/components/table/table.component.d.ts +4 -1
- package/lib/desy-tables/components/table-advanced/components/table-advanced-header-cell.component.d.ts +3 -0
- package/lib/desy-tables/components/table-advanced/components/table-advanced-header.component.d.ts +3 -0
- package/lib/desy-tables/components/table-advanced/components/table-advanced-row-cell.component.d.ts +3 -0
- package/lib/desy-tables/components/table-advanced/components/table-advanced-row.component.d.ts +3 -0
- package/lib/desy-tables/components/table-advanced/components/table-advanced-select.component.d.ts +3 -0
- package/lib/desy-tables/components/table-advanced/table-advanced.component.d.ts +6 -3
- package/lib/desy-tables/desy-tables.module.d.ts +23 -0
- package/lib/desy-tables/directives/cell.directive.d.ts +3 -0
- package/lib/desy-tables/directives/focus-clicked-cell.directive.d.ts +3 -0
- package/lib/desy-tables/directives/row.directive.d.ts +3 -0
- package/lib/desy-tables/interfaces/head-cell-data.d.ts +2 -0
- package/lib/desy-views/components/accordion/accordion-header/accordion-header.component.d.ts +3 -0
- package/lib/desy-views/components/accordion/accordion-item/accordion-item.component.d.ts +3 -0
- package/lib/desy-views/components/accordion/accordion.component.d.ts +3 -0
- package/lib/desy-views/components/accordion-history/accordion-history-item/accordion-history-item.component.d.ts +3 -0
- package/lib/desy-views/components/accordion-history/accordion-history.component.d.ts +3 -0
- package/lib/desy-views/components/accordion-history/accordion-item-hide-button/accordion-item-hide-button.component.d.ts +3 -0
- package/lib/desy-views/components/accordion-history/accordion-item-show-button/accordion-item-show-button.component.d.ts +3 -0
- package/lib/desy-views/components/alert/alert.component.d.ts +4 -1
- package/lib/desy-views/components/collapsible/collapsible.component.d.ts +5 -1
- package/lib/desy-views/components/description-list/definition/definition.component.d.ts +3 -0
- package/lib/desy-views/components/description-list/description-item/description-item.component.d.ts +3 -0
- package/lib/desy-views/components/description-list/description-list.component.d.ts +3 -0
- package/lib/desy-views/components/description-list/term/term.component.d.ts +3 -0
- package/lib/desy-views/components/details/details.component.d.ts +7 -1
- package/lib/desy-views/components/item/item-content-bottom/item-content-bottom.component.d.ts +3 -0
- package/lib/desy-views/components/item/item-content-right/item-content-right.component.d.ts +3 -0
- package/lib/desy-views/components/item/item-item/item-item.component.d.ts +3 -0
- package/lib/desy-views/components/item/item.component.d.ts +4 -1
- package/lib/desy-views/components/media-object/media-object-figure/media-object-figure.component.d.ts +3 -0
- package/lib/desy-views/components/media-object/media-object.component.d.ts +3 -0
- package/lib/desy-views/components/spinner/spinner.component.d.ts +3 -0
- package/lib/desy-views/components/status/status.component.d.ts +7 -2
- package/lib/desy-views/components/status-item/status-item.component.d.ts +3 -0
- package/lib/desy-views/components/tabs/panel/panel.component.d.ts +3 -0
- package/lib/desy-views/components/tabs/tab-item/tab-item.component.d.ts +3 -0
- package/lib/desy-views/components/tabs/tabs.component.d.ts +9 -3
- package/lib/desy-views/components/tooltip/tooltip-content/tooltip-content.component.d.ts +3 -0
- package/lib/desy-views/components/tooltip/tooltip.component.d.ts +3 -0
- package/lib/desy-views/desy-views.module.d.ts +37 -0
- package/lib/desy-views/interfaces/accordion-item.data.d.ts +1 -0
- package/lib/desy-views/interfaces/tabs-items-data.d.ts +2 -0
- package/lib/desy-views/services/alert.service.d.ts +3 -0
- package/lib/shared/components/accessibility/accessibility.component.d.ts +3 -0
- package/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.d.ts +4 -1
- package/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.d.ts +3 -0
- package/lib/shared/components/content-base/content-base.component.d.ts +3 -0
- package/lib/shared/components/text-or-html-required/text-or-html-required.component.d.ts +3 -0
- package/lib/shared/directives/attribute-change.directive.d.ts +3 -0
- package/lib/shared/directives/click-outside.directive.d.ts +3 -0
- package/lib/shared/directives/content-change.directive.d.ts +3 -0
- package/lib/shared/directives/custom-inner-content.directive.d.ts +3 -0
- package/lib/shared/directives/inner-content.directive.d.ts +3 -0
- package/lib/shared/pipes/external-href.pipe.d.ts +3 -0
- package/lib/shared/pipes/inner-html.pipe.d.ts +3 -0
- package/lib/shared/pipes/make-html-list.pipe.d.ts +3 -0
- package/lib/shared/shared.module.d.ts +19 -0
- package/package.json +33 -20
- package/public-api.d.ts +24 -0
- package/bundles/desy-angular.umd.js +0 -10918
- package/bundles/desy-angular.umd.js.map +0 -1
- package/bundles/desy-angular.umd.min.js +0 -2
- package/bundles/desy-angular.umd.min.js.map +0 -1
- package/desy-angular.d.ts +0 -51
- package/desy-angular.metadata.json +0 -1
- package/esm2015/desy-angular.js +0 -52
- package/esm2015/lib/desy-angular.module.js +0 -38
- package/esm2015/lib/desy-buttons/components/button/button.component.js +0 -92
- package/esm2015/lib/desy-buttons/components/button-loader/button-loader.component.js +0 -50
- package/esm2015/lib/desy-buttons/components/dropdown/dropdown.component.js +0 -111
- package/esm2015/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.js +0 -26
- package/esm2015/lib/desy-buttons/components/listbox/listbox-label/listbox-label.component.js +0 -14
- package/esm2015/lib/desy-buttons/components/listbox/listbox.component.js +0 -265
- package/esm2015/lib/desy-buttons/components/pill/pill.component.js +0 -64
- package/esm2015/lib/desy-buttons/components/toggle/toggle-off-state/toggle-off-state.component.js +0 -15
- package/esm2015/lib/desy-buttons/components/toggle/toggle-on-state/toggle-on-state.component.js +0 -15
- package/esm2015/lib/desy-buttons/components/toggle/toggle.component.js +0 -44
- package/esm2015/lib/desy-commons/components/content/content.component.js +0 -14
- package/esm2015/lib/desy-commons/components/description/description.component.js +0 -15
- package/esm2015/lib/desy-commons/components/divider/divider.component.js +0 -15
- package/esm2015/lib/desy-commons/components/icon/icon.component.js +0 -15
- package/esm2015/lib/desy-commons/components/title/title.component.js +0 -14
- package/esm2015/lib/desy-commons/desy-commons.module.js +0 -36
- package/esm2015/lib/desy-forms/components/character-count/character-count.component.js +0 -109
- package/esm2015/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.js +0 -188
- package/esm2015/lib/desy-forms/components/checkboxes/checkboxes.component.js +0 -226
- package/esm2015/lib/desy-forms/components/date-input/date-input-day/date-input-day.component.js +0 -38
- package/esm2015/lib/desy-forms/components/date-input/date-input-divider/date-input-divider.component.js +0 -19
- package/esm2015/lib/desy-forms/components/date-input/date-input-item/date-input-item.component.js +0 -13
- package/esm2015/lib/desy-forms/components/date-input/date-input-month/date-input-month.component.js +0 -38
- package/esm2015/lib/desy-forms/components/date-input/date-input-year/date-input-year.component.js +0 -36
- package/esm2015/lib/desy-forms/components/date-input/date-input.component.js +0 -222
- package/esm2015/lib/desy-forms/components/error-message/error-message.component.js +0 -28
- package/esm2015/lib/desy-forms/components/fieldset/fieldset.component.js +0 -44
- package/esm2015/lib/desy-forms/components/fieldset/legend/legend.component.js +0 -16
- package/esm2015/lib/desy-forms/components/file-upload/file-upload.component.js +0 -51
- package/esm2015/lib/desy-forms/components/form-field/form-field.component.js +0 -103
- package/esm2015/lib/desy-forms/components/hint/hint.component.js +0 -27
- package/esm2015/lib/desy-forms/components/input/input.component.js +0 -67
- package/esm2015/lib/desy-forms/components/input-group/input-group-divider/input-group-divider.component.js +0 -20
- package/esm2015/lib/desy-forms/components/input-group/input-group-input/input-group-input.component.js +0 -39
- package/esm2015/lib/desy-forms/components/input-group/input-group-item/input-group-item.component.js +0 -13
- package/esm2015/lib/desy-forms/components/input-group/input-group-select/input-group-select.component.js +0 -35
- package/esm2015/lib/desy-forms/components/input-group/input-group.component.js +0 -179
- package/esm2015/lib/desy-forms/components/label/label.component.js +0 -30
- package/esm2015/lib/desy-forms/components/radios/radio-item/radio-item.component.js +0 -144
- package/esm2015/lib/desy-forms/components/radios/radios.component.js +0 -233
- package/esm2015/lib/desy-forms/components/search-bar/search-bar.component.js +0 -45
- package/esm2015/lib/desy-forms/components/select/option/option.component.js +0 -17
- package/esm2015/lib/desy-forms/components/select/option-group/option-group.component.js +0 -17
- package/esm2015/lib/desy-forms/components/select/select-item/select-item.component.js +0 -14
- package/esm2015/lib/desy-forms/components/select/select.component.js +0 -64
- package/esm2015/lib/desy-forms/components/template-driven-wrapper/template-driven-wrapper.component.js +0 -12
- package/esm2015/lib/desy-forms/components/textarea/textarea.component.js +0 -60
- package/esm2015/lib/desy-forms/components/tree/tree-checkbox/tree-checkbox.component.js +0 -151
- package/esm2015/lib/desy-forms/components/tree/tree-item/tree-item.component.js +0 -370
- package/esm2015/lib/desy-forms/components/tree/tree-items-generator/tree-items-generator.component.js +0 -25
- package/esm2015/lib/desy-forms/components/tree/tree-sub/tree-sub.component.js +0 -14
- package/esm2015/lib/desy-forms/components/tree/tree.component.js +0 -408
- package/esm2015/lib/desy-forms/desy-forms.module.js +0 -130
- package/esm2015/lib/desy-forms/directives/condition.directive.js +0 -32
- package/esm2015/lib/desy-modals/components/dialog/dialog.component.js +0 -121
- package/esm2015/lib/desy-modals/components/modal/modal-button-loader-primary/modal-button-loader-primary.component.js +0 -20
- package/esm2015/lib/desy-modals/components/modal/modal-button-loader-secondary/modal-button-loader-secondary.component.js +0 -19
- package/esm2015/lib/desy-modals/components/modal/modal-button-primary/modal-button-primary.component.js +0 -19
- package/esm2015/lib/desy-modals/components/modal/modal-button-secondary/modal-button-secondary.component.js +0 -19
- package/esm2015/lib/desy-modals/components/modal/modal.component.js +0 -145
- package/esm2015/lib/desy-modals/desy-modals.module.js +0 -41
- package/esm2015/lib/desy-modals/services/dialog.service.js +0 -117
- package/esm2015/lib/desy-nav/components/breadcrumbs/breadcrumbs-item/breadcrumbs-item.component.js +0 -15
- package/esm2015/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.js +0 -42
- package/esm2015/lib/desy-nav/components/error-summary/error-summary-item/error-summary-item.component.js +0 -15
- package/esm2015/lib/desy-nav/components/error-summary/error-summary.component.js +0 -46
- package/esm2015/lib/desy-nav/components/footer/footer-meta/footer-meta-item/footer-meta-item.component.js +0 -16
- package/esm2015/lib/desy-nav/components/footer/footer-meta/footer-meta.component.js +0 -23
- package/esm2015/lib/desy-nav/components/footer/footer-navigation/footer-navigation-item/footer-navigation-item.component.js +0 -16
- package/esm2015/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.js +0 -16
- package/esm2015/lib/desy-nav/components/footer/footer.component.js +0 -52
- package/esm2015/lib/desy-nav/components/header/header-custom-navigation/header-custom-navigation.component.js +0 -11
- package/esm2015/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.js +0 -36
- package/esm2015/lib/desy-nav/components/header/header-navigation/header-navigation-item/header-navigation-item.component.js +0 -19
- package/esm2015/lib/desy-nav/components/header/header-navigation/header-navigation.component.js +0 -29
- package/esm2015/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.js +0 -22
- package/esm2015/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component.js +0 -11
- package/esm2015/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.js +0 -88
- package/esm2015/lib/desy-nav/components/header/header-subnav/header-subnav.component.js +0 -34
- package/esm2015/lib/desy-nav/components/header/header.component.js +0 -66
- package/esm2015/lib/desy-nav/components/menu-horizontal/menu-horizontal-item/menu-horizontal-item.component.js +0 -28
- package/esm2015/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.js +0 -68
- package/esm2015/lib/desy-nav/components/menu-navigation/components/menu-navigation-item/menu-navigation-item.component.js +0 -35
- package/esm2015/lib/desy-nav/components/menu-navigation/components/menu-navigation-subitem/menu-navigation-subitem.component.js +0 -31
- package/esm2015/lib/desy-nav/components/menu-navigation/menu-navigation.component.js +0 -568
- package/esm2015/lib/desy-nav/components/menu-vertical/menu-vertical-item/menu-vertical-item.component.js +0 -32
- package/esm2015/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub/menu-vertical-item-sub.component.js +0 -16
- package/esm2015/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component.js +0 -24
- package/esm2015/lib/desy-nav/components/menu-vertical/menu-vertical.component.js +0 -89
- package/esm2015/lib/desy-nav/components/menubar/components/menubar-item/menubar-item.component.js +0 -36
- package/esm2015/lib/desy-nav/components/menubar/components/menubar-label/menubar-label.component.js +0 -14
- package/esm2015/lib/desy-nav/components/menubar/components/menubar-subitem/menubar-subitem.component.js +0 -29
- package/esm2015/lib/desy-nav/components/menubar/components/menubar-subsubitem/menubar-subsubitem.component.js +0 -23
- package/esm2015/lib/desy-nav/components/menubar/directives/menubaritem.directive.js +0 -37
- package/esm2015/lib/desy-nav/components/menubar/menubar.component.js +0 -672
- package/esm2015/lib/desy-nav/components/nav/nav-item/nav-item.component.js +0 -30
- package/esm2015/lib/desy-nav/components/nav/nav.component.js +0 -105
- package/esm2015/lib/desy-nav/components/notification/notification-item/notification-item.component.js +0 -18
- package/esm2015/lib/desy-nav/components/notification/notification.component.js +0 -102
- package/esm2015/lib/desy-nav/components/skip-link/skip-link.component.js +0 -33
- package/esm2015/lib/desy-nav/desy-nav.module.js +0 -136
- package/esm2015/lib/desy-nav/interfaces/menu-navigation-item-sub-item.js +0 -2
- package/esm2015/lib/desy-pagination/components/pagination/pagination.component.js +0 -138
- package/esm2015/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.js +0 -15
- package/esm2015/lib/desy-pagination/components/pagination-listbox-label/pagination-listbox-label.component.js +0 -14
- package/esm2015/lib/desy-pagination/desy-pagination.module.js +0 -31
- package/esm2015/lib/desy-tables/components/table/components/table-caption.component.js +0 -14
- package/esm2015/lib/desy-tables/components/table/components/table-cell.component.js +0 -17
- package/esm2015/lib/desy-tables/components/table/components/table-header.component.js +0 -14
- package/esm2015/lib/desy-tables/components/table/components/table-row.component.js +0 -14
- package/esm2015/lib/desy-tables/components/table/table.component.js +0 -55
- package/esm2015/lib/desy-tables/components/table-advanced/components/table-advanced-header-cell.component.js +0 -33
- package/esm2015/lib/desy-tables/components/table-advanced/components/table-advanced-header.component.js +0 -14
- package/esm2015/lib/desy-tables/components/table-advanced/components/table-advanced-row-cell.component.js +0 -17
- package/esm2015/lib/desy-tables/components/table-advanced/components/table-advanced-row.component.js +0 -20
- package/esm2015/lib/desy-tables/components/table-advanced/components/table-advanced-select.component.js +0 -22
- package/esm2015/lib/desy-tables/components/table-advanced/table-advanced.component.js +0 -316
- package/esm2015/lib/desy-tables/desy-tables.module.js +0 -64
- package/esm2015/lib/desy-tables/directives/cell.directive.js +0 -26
- package/esm2015/lib/desy-tables/directives/focus-clicked-cell.directive.js +0 -78
- package/esm2015/lib/desy-tables/directives/row.directive.js +0 -24
- package/esm2015/lib/desy-tables/interfaces/head-cell-data.js +0 -7
- package/esm2015/lib/desy-views/components/accordion/accordion-header/accordion-header.component.js +0 -14
- package/esm2015/lib/desy-views/components/accordion/accordion-item/accordion-item.component.js +0 -43
- package/esm2015/lib/desy-views/components/accordion/accordion.component.js +0 -153
- package/esm2015/lib/desy-views/components/accordion-history/accordion-history-item/accordion-history-item.component.js +0 -31
- package/esm2015/lib/desy-views/components/accordion-history/accordion-history.component.js +0 -15
- package/esm2015/lib/desy-views/components/accordion-history/accordion-item-hide-button/accordion-item-hide-button.component.js +0 -14
- package/esm2015/lib/desy-views/components/accordion-history/accordion-item-show-button/accordion-item-show-button.component.js +0 -14
- package/esm2015/lib/desy-views/components/alert/alert.component.js +0 -75
- package/esm2015/lib/desy-views/components/collapsible/collapsible.component.js +0 -55
- package/esm2015/lib/desy-views/components/description-list/definition/definition.component.js +0 -15
- package/esm2015/lib/desy-views/components/description-list/description-item/description-item.component.js +0 -26
- package/esm2015/lib/desy-views/components/description-list/description-list.component.js +0 -22
- package/esm2015/lib/desy-views/components/description-list/term/term.component.js +0 -15
- package/esm2015/lib/desy-views/components/details/details.component.js +0 -20
- package/esm2015/lib/desy-views/components/item/item-content-bottom/item-content-bottom.component.js +0 -14
- package/esm2015/lib/desy-views/components/item/item-content-right/item-content-right.component.js +0 -11
- package/esm2015/lib/desy-views/components/item/item-item/item-item.component.js +0 -11
- package/esm2015/lib/desy-views/components/item/item.component.js +0 -87
- package/esm2015/lib/desy-views/components/media-object/media-object-figure/media-object-figure.component.js +0 -11
- package/esm2015/lib/desy-views/components/media-object/media-object.component.js +0 -67
- package/esm2015/lib/desy-views/components/spinner/spinner.component.js +0 -45
- package/esm2015/lib/desy-views/components/status/status.component.js +0 -58
- package/esm2015/lib/desy-views/components/status-item/status-item.component.js +0 -86
- package/esm2015/lib/desy-views/components/tabs/panel/panel.component.js +0 -15
- package/esm2015/lib/desy-views/components/tabs/tab-item/tab-item.component.js +0 -28
- package/esm2015/lib/desy-views/components/tabs/tabs.component.js +0 -150
- package/esm2015/lib/desy-views/components/tooltip/tooltip-content/tooltip-content.component.js +0 -11
- package/esm2015/lib/desy-views/components/tooltip/tooltip.component.js +0 -155
- package/esm2015/lib/desy-views/desy-views.module.js +0 -108
- package/esm2015/lib/desy-views/interfaces/tabs-items-data.js +0 -2
- package/esm2015/lib/desy-views/services/alert.service.js +0 -89
- package/esm2015/lib/shared/components/accessibility/accessibility.component.js +0 -29
- package/esm2015/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.js +0 -27
- package/esm2015/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.js +0 -26
- package/esm2015/lib/shared/components/content-base/content-base.component.js +0 -20
- package/esm2015/lib/shared/components/text-or-html-required/text-or-html-required.component.js +0 -14
- package/esm2015/lib/shared/directives/attribute-change.directive.js +0 -43
- package/esm2015/lib/shared/directives/click-outside.directive.js +0 -35
- package/esm2015/lib/shared/directives/content-change.directive.js +0 -43
- package/esm2015/lib/shared/directives/custom-inner-content.directive.js +0 -62
- package/esm2015/lib/shared/directives/inner-content.directive.js +0 -34
- package/esm2015/lib/shared/pipes/external-href.pipe.js +0 -28
- package/esm2015/lib/shared/pipes/inner-html.pipe.js +0 -19
- package/esm2015/lib/shared/pipes/make-html-list.pipe.js +0 -16
- package/esm2015/lib/shared/shared.module.js +0 -62
- package/esm2015/public-api.js +0 -197
- package/fesm2015/desy-angular.js +0 -9650
- package/fesm2015/desy-angular.js.map +0 -1
- /package/{esm2015/lib/desy-buttons/interfaces/listbox-item-data.js → esm2020/lib/desy-buttons/interfaces/listbox-item-data.mjs} +0 -0
- /package/{esm2015/lib/desy-buttons/interfaces/listbox-label-data.js → esm2020/lib/desy-buttons/interfaces/listbox-label-data.mjs} +0 -0
- /package/{esm2015/lib/desy-commons/interfaces/content-data.js → esm2020/lib/desy-commons/interfaces/content-data.mjs} +0 -0
- /package/{esm2015/lib/desy-commons/interfaces/description-data.js → esm2020/lib/desy-commons/interfaces/description-data.mjs} +0 -0
- /package/{esm2015/lib/desy-commons/interfaces/divider-data.js → esm2020/lib/desy-commons/interfaces/divider-data.mjs} +0 -0
- /package/{esm2015/lib/desy-commons/interfaces/icon-data.js → esm2020/lib/desy-commons/interfaces/icon-data.mjs} +0 -0
- /package/{esm2015/lib/desy-commons/interfaces/index.js → esm2020/lib/desy-commons/interfaces/index.mjs} +0 -0
- /package/{esm2015/lib/desy-commons/interfaces/title-data.js → esm2020/lib/desy-commons/interfaces/title-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/components/tree/interfaces/itree-item.js → esm2020/lib/desy-forms/components/tree/interfaces/itree-item.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/components/tree/interfaces/quit-tree-item-focus-options.js → esm2020/lib/desy-forms/components/tree/interfaces/quit-tree-item-focus-options.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/accesibility-data.js → esm2020/lib/desy-forms/interfaces/accesibility-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/error-message-data.js → esm2020/lib/desy-forms/interfaces/error-message-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/fieldset-data.js → esm2020/lib/desy-forms/interfaces/fieldset-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/hint-data.js → esm2020/lib/desy-forms/interfaces/hint-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/index.js → esm2020/lib/desy-forms/interfaces/index.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/item-checkbox-data.js → esm2020/lib/desy-forms/interfaces/item-checkbox-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/item-date-input-data.js → esm2020/lib/desy-forms/interfaces/item-date-input-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/item-divider-date-input-data.js → esm2020/lib/desy-forms/interfaces/item-divider-date-input-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/item-divider-input-group-data.js → esm2020/lib/desy-forms/interfaces/item-divider-input-group-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/item-input-group-data.js → esm2020/lib/desy-forms/interfaces/item-input-group-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/item-radio-data.js → esm2020/lib/desy-forms/interfaces/item-radio-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/item-radio-with-template-data.js → esm2020/lib/desy-forms/interfaces/item-radio-with-template-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/label-data.js → esm2020/lib/desy-forms/interfaces/label-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/legend-data.js → esm2020/lib/desy-forms/interfaces/legend-data.mjs} +0 -0
- /package/{esm2015/lib/desy-modals/interfaces/dialog-options.js → esm2020/lib/desy-modals/interfaces/dialog-options.mjs} +0 -0
- /package/{esm2015/lib/desy-modals/interfaces/index.js → esm2020/lib/desy-modals/interfaces/index.mjs} +0 -0
- /package/{esm2015/lib/desy-modals/interfaces/modal-button-data.js → esm2020/lib/desy-modals/interfaces/modal-button-data.mjs} +0 -0
- /package/{esm2015/lib/desy-modals/interfaces/modal-data.js → esm2020/lib/desy-modals/interfaces/modal-data.mjs} +0 -0
- /package/{esm2015/lib/desy-modals/interfaces/modal-icon-data.js → esm2020/lib/desy-modals/interfaces/modal-icon-data.mjs} +0 -0
- /package/{esm2015/lib/desy-modals/interfaces/modal-options.js → esm2020/lib/desy-modals/interfaces/modal-options.mjs} +0 -0
- /package/{esm2015/lib/desy-modals/interfaces/open-dialog-result.js → esm2020/lib/desy-modals/interfaces/open-dialog-result.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/breadcrumbs.data.js → esm2020/lib/desy-nav/interfaces/breadcrumbs.data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/error-summary-data.js → esm2020/lib/desy-nav/interfaces/error-summary-data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/footer-data.js → esm2020/lib/desy-nav/interfaces/footer-data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/header-dropdown-data.js → esm2020/lib/desy-nav/interfaces/header-dropdown-data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/header-navigation-data.js → esm2020/lib/desy-nav/interfaces/header-navigation-data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/header-navigation-item-data.js → esm2020/lib/desy-nav/interfaces/header-navigation-item-data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/header-offcanvas-data.js → esm2020/lib/desy-nav/interfaces/header-offcanvas-data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/header-subnav-data.js → esm2020/lib/desy-nav/interfaces/header-subnav-data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/index.js → esm2020/lib/desy-nav/interfaces/index.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/menu-navigation-item-sub-item-sub-item.js → esm2020/lib/desy-nav/interfaces/menu-navigation-item-sub-item-sub-item.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/menu-navigation.js → esm2020/lib/desy-nav/interfaces/menu-navigation.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/menu-vertical-items-data.js → esm2020/lib/desy-nav/interfaces/menu-vertical-items-data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/menu-vertical-sub-data.js → esm2020/lib/desy-nav/interfaces/menu-vertical-sub-data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/menu-vertical-sub-items-data.js → esm2020/lib/desy-nav/interfaces/menu-vertical-sub-items-data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/menubar-item-sub-item-sub-item.js → esm2020/lib/desy-nav/interfaces/menubar-item-sub-item-sub-item.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/menubar-item-sub-item.js → esm2020/lib/desy-nav/interfaces/menubar-item-sub-item.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/menubar-item-sub.js → esm2020/lib/desy-nav/interfaces/menubar-item-sub.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/menubar-item.js → esm2020/lib/desy-nav/interfaces/menubar-item.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/nav-item-event.data.js → esm2020/lib/desy-nav/interfaces/nav-item-event.data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/nav-item.data.js → esm2020/lib/desy-nav/interfaces/nav-item.data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/notification-items-data.js → esm2020/lib/desy-nav/interfaces/notification-items-data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/notification-options.js → esm2020/lib/desy-nav/interfaces/notification-options.mjs} +0 -0
- /package/{esm2015/lib/desy-pagination/interfaces/index.js → esm2020/lib/desy-pagination/interfaces/index.mjs} +0 -0
- /package/{esm2015/lib/desy-pagination/interfaces/pagination-item.data.js → esm2020/lib/desy-pagination/interfaces/pagination-item.data.mjs} +0 -0
- /package/{esm2015/lib/desy-tables/interfaces/cell-data.js → esm2020/lib/desy-tables/interfaces/cell-data.mjs} +0 -0
- /package/{esm2015/lib/desy-tables/interfaces/index.js → esm2020/lib/desy-tables/interfaces/index.mjs} +0 -0
- /package/{esm2015/lib/desy-tables/interfaces/recalculate-table-params.js → esm2020/lib/desy-tables/interfaces/recalculate-table-params.mjs} +0 -0
- /package/{esm2015/lib/desy-tables/interfaces/row-data.js → esm2020/lib/desy-tables/interfaces/row-data.mjs} +0 -0
- /package/{esm2015/lib/desy-tables/interfaces/wrapper-data.js → esm2020/lib/desy-tables/interfaces/wrapper-data.mjs} +0 -0
- /package/{esm2015/lib/desy-views/interfaces/accordion-header.data.js → esm2020/lib/desy-views/interfaces/accordion-header.data.mjs} +0 -0
- /package/{esm2015/lib/desy-views/interfaces/alert-options.js → esm2020/lib/desy-views/interfaces/alert-options.mjs} +0 -0
- /package/{esm2015/lib/desy-views/interfaces/description-item.data.js → esm2020/lib/desy-views/interfaces/description-item.data.mjs} +0 -0
- /package/{esm2015/lib/desy-views/interfaces/index.js → esm2020/lib/desy-views/interfaces/index.mjs} +0 -0
- /package/{esm2015/lib/desy-views/interfaces/open-alert-result.js → esm2020/lib/desy-views/interfaces/open-alert-result.mjs} +0 -0
- /package/{esm2015/lib/desy-views/interfaces/status-data.js → esm2020/lib/desy-views/interfaces/status-data.mjs} +0 -0
- /package/{esm2015/lib/desy-views/interfaces/status-icon-data.js → esm2020/lib/desy-views/interfaces/status-icon-data.mjs} +0 -0
- /package/{esm2015/lib/desy-views/interfaces/status-item-title-data.js → esm2020/lib/desy-views/interfaces/status-item-title-data.mjs} +0 -0
- /package/{esm2015/lib/desy-views/interfaces/tabs-panel-data.js → esm2020/lib/desy-views/interfaces/tabs-panel-data.mjs} +0 -0
- /package/{esm2015/lib/desy-views/interfaces/term-definition.data.js → esm2020/lib/desy-views/interfaces/term-definition.data.mjs} +0 -0
- /package/{esm2015/lib/shared/components/index.js → esm2020/lib/shared/components/index.mjs} +0 -0
- /package/{esm2015/lib/shared/decorators/desy-content-child.decorator.js → esm2020/lib/shared/decorators/desy-content-child.decorator.mjs} +0 -0
- /package/{esm2015/lib/shared/decorators/desy-on-input-change.decorator.js → esm2020/lib/shared/decorators/desy-on-input-change.decorator.mjs} +0 -0
- /package/{esm2015/lib/shared/interfaces/accesibility-data.js → esm2020/lib/shared/interfaces/accesibility-data.mjs} +0 -0
- /package/{esm2015/lib/shared/utils/focus-utils.js → esm2020/lib/shared/utils/focus-utils.mjs} +0 -0
- /package/{esm2015/lib/shared/utils/search-utils.js → esm2020/lib/shared/utils/search-utils.mjs} +0 -0
- /package/{esm2015/lib/shared/utils/string-utils.js → esm2020/lib/shared/utils/string-utils.mjs} +0 -0
|
@@ -0,0 +1,727 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Component, ContentChildren, ElementRef, EventEmitter, HostBinding, Input, Output, ViewChild, ViewChildren } from '@angular/core';
|
|
3
|
+
import { AccessibilityComponent } from '../../../shared/components';
|
|
4
|
+
import { MenubaritemDirective } from './directives/menubaritem.directive';
|
|
5
|
+
import { StringUtils } from '../../../shared/utils/string-utils';
|
|
6
|
+
import { MenubarItemComponent } from './components/menubar-item/menubar-item.component';
|
|
7
|
+
import { MenubarSubitemComponent } from './components/menubar-subitem/menubar-subitem.component';
|
|
8
|
+
import { MenubarSubsubitemComponent } from './components/menubar-subsubitem/menubar-subsubitem.component';
|
|
9
|
+
import { MenubarLabelComponent } from './components/menubar-label/menubar-label.component';
|
|
10
|
+
import { DesyContentChild } from '../../../shared/decorators/desy-content-child.decorator';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "@angular/common";
|
|
13
|
+
import * as i2 from "@angular/router";
|
|
14
|
+
import * as i3 from "../../../shared/directives/attribute-change.directive";
|
|
15
|
+
import * as i4 from "../../../shared/directives/custom-inner-content.directive";
|
|
16
|
+
import * as i5 from "./directives/menubaritem.directive";
|
|
17
|
+
import * as i6 from "../../../shared/pipes/make-html-list.pipe";
|
|
18
|
+
import * as i7 from "../../../shared/pipes/external-href.pipe";
|
|
19
|
+
export class MenubarComponent extends AccessibilityComponent {
|
|
20
|
+
constructor(changeDetectorRef) {
|
|
21
|
+
super();
|
|
22
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
23
|
+
this.itemsChange = new EventEmitter();
|
|
24
|
+
this.activeItemChange = new EventEmitter();
|
|
25
|
+
this.activeSubItemChange = new EventEmitter();
|
|
26
|
+
this.cfg = true;
|
|
27
|
+
this.viewInit = false;
|
|
28
|
+
this.currentFocusItemIndex = 0;
|
|
29
|
+
}
|
|
30
|
+
ngOnChanges(changes) {
|
|
31
|
+
this.roleData = this.role ? this.role : null;
|
|
32
|
+
this.ariaLabelData = this.ariaLabel ? this.ariaLabel : null;
|
|
33
|
+
this.ariaDescribedbyData = this.ariaDescribedBy ? this.ariaDescribedBy : null;
|
|
34
|
+
this.ariaLabelledbyData = this.ariaLabelledBy ? this.ariaLabelledBy : null;
|
|
35
|
+
this.ariaHiddenData = this.ariaHidden ? this.ariaHidden : null;
|
|
36
|
+
this.ariaDisabledData = this.ariaDisabled ? this.ariaDisabled : null;
|
|
37
|
+
this.ariaControlsData = this.ariaControls ? this.ariaControls : null;
|
|
38
|
+
this.ariaCurrentData = this.ariaCurrent ? this.ariaCurrent : null;
|
|
39
|
+
this.ariaLiveData = this.ariaLive ? this.ariaLive : null;
|
|
40
|
+
this.ariaExpandedData = this.ariaExpanded ? this.ariaExpanded : null;
|
|
41
|
+
this.ariaErrormessageData = this.ariaErrorMessage ? this.ariaErrorMessage : null;
|
|
42
|
+
this.ariaHaspopupData = this.ariaHasPopup ? this.ariaHasPopup : null;
|
|
43
|
+
this.ariaModalData = this.ariaModal ? this.ariaModal : null;
|
|
44
|
+
if (this.viewInit) {
|
|
45
|
+
this.checkChanges();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
ngAfterViewInit() {
|
|
49
|
+
this.viewInit = true;
|
|
50
|
+
this.checkChanges();
|
|
51
|
+
}
|
|
52
|
+
checkChanges() {
|
|
53
|
+
if (!this.menuItems) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
this.menuData = [];
|
|
57
|
+
this.getItems().forEach((_, index) => {
|
|
58
|
+
const itemData = {
|
|
59
|
+
open: false,
|
|
60
|
+
currentFocusSubItemIndex: 0,
|
|
61
|
+
currentFocusSubSubItemIndex: 0,
|
|
62
|
+
menuItem: this.menuItems.toArray()[index]
|
|
63
|
+
};
|
|
64
|
+
this.menuData.push(itemData);
|
|
65
|
+
});
|
|
66
|
+
if (this.viewInit) {
|
|
67
|
+
this.checkRequired();
|
|
68
|
+
}
|
|
69
|
+
const lastCurrentFocusItemIndex = this.currentFocusItemIndex;
|
|
70
|
+
const items = this.getItems();
|
|
71
|
+
if (items) {
|
|
72
|
+
while (!this.isItemFocusable(this.currentFocusItemIndex % items.length)) {
|
|
73
|
+
this.currentFocusItemIndex = (this.currentFocusItemIndex + items.length + 1) % items.length;
|
|
74
|
+
if (this.currentFocusItemIndex === lastCurrentFocusItemIndex) {
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/*
|
|
81
|
+
* Eventos
|
|
82
|
+
*/
|
|
83
|
+
handleMenuFocusIn() {
|
|
84
|
+
this.isFocused = true;
|
|
85
|
+
this.changeDetectorRef.detectChanges();
|
|
86
|
+
}
|
|
87
|
+
handleMenuFocusOut(event) {
|
|
88
|
+
if (!this.menubar.nativeElement.contains(event.relatedTarget)) {
|
|
89
|
+
this.closeMenu();
|
|
90
|
+
}
|
|
91
|
+
this.isFocused = false;
|
|
92
|
+
this.changeDetectorRef.detectChanges();
|
|
93
|
+
}
|
|
94
|
+
handleMenuItemClick(event, itemIndex) {
|
|
95
|
+
if (this.hasPopupMenu(itemIndex)) {
|
|
96
|
+
event.preventDefault();
|
|
97
|
+
const isOpen = this.menuData[itemIndex].open;
|
|
98
|
+
this.closeMenu();
|
|
99
|
+
if (!isOpen) {
|
|
100
|
+
this.openMenu(itemIndex);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
this.activateMenuItem(itemIndex);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
handleMenuItemKeydown(event, itemIndex) {
|
|
108
|
+
switch (event.key) {
|
|
109
|
+
case 'Enter':
|
|
110
|
+
case ' ':
|
|
111
|
+
case 'ArrowDown':
|
|
112
|
+
if (this.hasPopupMenu(itemIndex)) {
|
|
113
|
+
this.openMenu(itemIndex);
|
|
114
|
+
setTimeout(() => this.focusFirstSubItem(itemIndex));
|
|
115
|
+
event.stopPropagation();
|
|
116
|
+
event.preventDefault();
|
|
117
|
+
}
|
|
118
|
+
break;
|
|
119
|
+
case 'Escape':
|
|
120
|
+
if (this.hasPopupMenu(itemIndex)) {
|
|
121
|
+
this.closeMenu(itemIndex);
|
|
122
|
+
}
|
|
123
|
+
event.stopPropagation();
|
|
124
|
+
event.preventDefault();
|
|
125
|
+
break;
|
|
126
|
+
case 'ArrowLeft':
|
|
127
|
+
this.focusNextAvailableItem(itemIndex, -1);
|
|
128
|
+
event.stopPropagation();
|
|
129
|
+
event.preventDefault();
|
|
130
|
+
break;
|
|
131
|
+
case 'ArrowRight':
|
|
132
|
+
this.focusNextAvailableItem(itemIndex, +1);
|
|
133
|
+
event.stopPropagation();
|
|
134
|
+
event.preventDefault();
|
|
135
|
+
break;
|
|
136
|
+
case 'ArrowUp':
|
|
137
|
+
if (this.hasPopupMenu(itemIndex)) {
|
|
138
|
+
this.openMenu(itemIndex);
|
|
139
|
+
setTimeout(() => this.focusLastSubItem(itemIndex));
|
|
140
|
+
}
|
|
141
|
+
event.stopPropagation();
|
|
142
|
+
event.preventDefault();
|
|
143
|
+
break;
|
|
144
|
+
case 'Home':
|
|
145
|
+
case 'PageUp':
|
|
146
|
+
if (this.hasPopupMenu(itemIndex)) {
|
|
147
|
+
this.closeMenu();
|
|
148
|
+
}
|
|
149
|
+
this.focusFirstItem();
|
|
150
|
+
event.stopPropagation();
|
|
151
|
+
event.preventDefault();
|
|
152
|
+
break;
|
|
153
|
+
case 'End':
|
|
154
|
+
case 'PageDown':
|
|
155
|
+
if (this.hasPopupMenu(itemIndex)) {
|
|
156
|
+
this.closeMenu();
|
|
157
|
+
}
|
|
158
|
+
this.focusLastItem();
|
|
159
|
+
event.stopPropagation();
|
|
160
|
+
event.preventDefault();
|
|
161
|
+
break;
|
|
162
|
+
default:
|
|
163
|
+
if (this.isPrintableChar(event.key)) {
|
|
164
|
+
this.focusItemByFirstChar(event.key);
|
|
165
|
+
event.stopPropagation();
|
|
166
|
+
event.preventDefault();
|
|
167
|
+
}
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
handleMenuItemMouseOver(itemIndex) {
|
|
172
|
+
this.focusItem(itemIndex, true);
|
|
173
|
+
}
|
|
174
|
+
handlePopupMenuItemClick(itemIndex, subItemIndex, subSubItemIndex) {
|
|
175
|
+
this.activatePopupMenuItem(itemIndex, subItemIndex, subSubItemIndex);
|
|
176
|
+
this.focusItem(itemIndex);
|
|
177
|
+
this.closeMenu(itemIndex);
|
|
178
|
+
}
|
|
179
|
+
handlePopupMenuItemKeydown(event, itemIndex, subItemIndex, subSubItemIndex) {
|
|
180
|
+
const currentSubIndex = this.menuData[itemIndex].currentFocusSubItemIndex;
|
|
181
|
+
const currentSubSubIndex = this.menuData[itemIndex].currentFocusSubSubItemIndex;
|
|
182
|
+
const items = this.getItems();
|
|
183
|
+
switch (event.key) {
|
|
184
|
+
case ' ':
|
|
185
|
+
this.activatePopupMenuItem(itemIndex, subItemIndex, subSubItemIndex);
|
|
186
|
+
if (this.mustCloseAfterSelectPopupItem(itemIndex, subItemIndex, subSubItemIndex)) {
|
|
187
|
+
this.closeMenu(itemIndex);
|
|
188
|
+
this.focusItem(itemIndex);
|
|
189
|
+
}
|
|
190
|
+
event.stopPropagation();
|
|
191
|
+
event.preventDefault();
|
|
192
|
+
break;
|
|
193
|
+
case 'Enter':
|
|
194
|
+
this.activatePopupMenuItem(itemIndex, subItemIndex, subSubItemIndex);
|
|
195
|
+
this.closeMenu(itemIndex);
|
|
196
|
+
this.focusItem(itemIndex);
|
|
197
|
+
event.stopPropagation();
|
|
198
|
+
event.preventDefault();
|
|
199
|
+
break;
|
|
200
|
+
case 'Escape':
|
|
201
|
+
this.closeMenu(itemIndex);
|
|
202
|
+
this.focusItem(itemIndex);
|
|
203
|
+
event.stopPropagation();
|
|
204
|
+
event.preventDefault();
|
|
205
|
+
break;
|
|
206
|
+
case 'ArrowUp':
|
|
207
|
+
this.focusNextAvailableSubItem(itemIndex, currentSubIndex, currentSubSubIndex, -1);
|
|
208
|
+
// this.focusSubItem(itemIndex, (currentSubIndex + listLength - 1) % listLength);
|
|
209
|
+
event.stopPropagation();
|
|
210
|
+
event.preventDefault();
|
|
211
|
+
break;
|
|
212
|
+
case 'ArrowDown':
|
|
213
|
+
this.focusNextAvailableSubItem(itemIndex, currentSubIndex, currentSubSubIndex, +1);
|
|
214
|
+
// this.focusSubItem(itemIndex, (currentSubIndex + listLength + 1) % listLength);
|
|
215
|
+
event.stopPropagation();
|
|
216
|
+
event.preventDefault();
|
|
217
|
+
break;
|
|
218
|
+
case 'ArrowLeft':
|
|
219
|
+
this.closeMenu(itemIndex);
|
|
220
|
+
this.focusItem((itemIndex + items.length - 1) % items.length);
|
|
221
|
+
event.stopPropagation();
|
|
222
|
+
event.preventDefault();
|
|
223
|
+
break;
|
|
224
|
+
case 'ArrowRight':
|
|
225
|
+
this.closeMenu(itemIndex);
|
|
226
|
+
this.focusItem((itemIndex + items.length + 1) % items.length);
|
|
227
|
+
event.stopPropagation();
|
|
228
|
+
event.preventDefault();
|
|
229
|
+
break;
|
|
230
|
+
case 'Home':
|
|
231
|
+
case 'PageUp':
|
|
232
|
+
this.focusFirstSubItem(itemIndex);
|
|
233
|
+
event.stopPropagation();
|
|
234
|
+
event.preventDefault();
|
|
235
|
+
break;
|
|
236
|
+
case 'End':
|
|
237
|
+
case 'PageDown':
|
|
238
|
+
this.focusLastSubItem(itemIndex);
|
|
239
|
+
event.stopPropagation();
|
|
240
|
+
event.preventDefault();
|
|
241
|
+
break;
|
|
242
|
+
case 'Tab':
|
|
243
|
+
this.closeMenu(itemIndex);
|
|
244
|
+
this.focusItem(itemIndex);
|
|
245
|
+
break;
|
|
246
|
+
default:
|
|
247
|
+
if (this.isPrintableChar(event.key)) {
|
|
248
|
+
this.focusSubItemByFirstChar(itemIndex, event.key);
|
|
249
|
+
event.stopPropagation();
|
|
250
|
+
event.preventDefault();
|
|
251
|
+
}
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
handlePopupMenuItemMouseOver(itemIndex, subItemIndex, subSubItemIndex) {
|
|
256
|
+
this.focusSubItem(itemIndex, subItemIndex, subSubItemIndex);
|
|
257
|
+
}
|
|
258
|
+
/*
|
|
259
|
+
* Comunes
|
|
260
|
+
*/
|
|
261
|
+
checkRequired() {
|
|
262
|
+
const items = this.getItems();
|
|
263
|
+
// No se ha puesto label required porque en algunos ejemplos de desy-html no aparece
|
|
264
|
+
}
|
|
265
|
+
activateMenuItem(itemIndex) {
|
|
266
|
+
const items = this.getItems();
|
|
267
|
+
this.activeItemChange.emit(items[itemIndex]);
|
|
268
|
+
if (items[itemIndex] instanceof MenubarItemComponent) {
|
|
269
|
+
items[itemIndex].selected.emit();
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
activatePopupMenuItem(itemIndex, subItemIndex, subSubItemIndex) {
|
|
273
|
+
const items = this.getItems();
|
|
274
|
+
const subItems = this.getItemSubitems(items[itemIndex]);
|
|
275
|
+
let item = subItems[subItemIndex];
|
|
276
|
+
let subSubItems = [];
|
|
277
|
+
if (subSubItemIndex !== null && subSubItemIndex !== undefined) {
|
|
278
|
+
subSubItems = this.getSubItemSubitems(item);
|
|
279
|
+
item = subSubItems[subSubItemIndex];
|
|
280
|
+
}
|
|
281
|
+
let checkedChange = false;
|
|
282
|
+
if (item.role === 'menuitemcheckbox') {
|
|
283
|
+
item.checked = !item.checked;
|
|
284
|
+
checkedChange = true;
|
|
285
|
+
}
|
|
286
|
+
else if (item.role === 'menuitemradio') {
|
|
287
|
+
checkedChange = !item.checked;
|
|
288
|
+
subSubItems.forEach(i => i.checked = false);
|
|
289
|
+
item.checked = true;
|
|
290
|
+
}
|
|
291
|
+
this.itemsChange.emit(items);
|
|
292
|
+
this.activeSubItemChange.emit(item);
|
|
293
|
+
if (item instanceof MenubarSubitemComponent || item instanceof MenubarSubsubitemComponent) {
|
|
294
|
+
item.selected.emit();
|
|
295
|
+
if (checkedChange) {
|
|
296
|
+
item.checkedChange.emit(item.checked);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
mustCloseAfterSelectPopupItem(itemIndex, subItemIndex, subSubItemIndex) {
|
|
301
|
+
const items = this.getItems();
|
|
302
|
+
const subItems = this.getItemSubitems(items[itemIndex]);
|
|
303
|
+
let item = subItems[subItemIndex];
|
|
304
|
+
if (subSubItemIndex !== null && subSubItemIndex !== undefined) {
|
|
305
|
+
const subSubItems = this.getSubItemSubitems(item);
|
|
306
|
+
item = subSubItems[subSubItemIndex];
|
|
307
|
+
}
|
|
308
|
+
return item.role !== 'menuitemcheckbox' && item.role !== 'menuitemradio';
|
|
309
|
+
}
|
|
310
|
+
openMenu(itemIndex) {
|
|
311
|
+
const wasOpened = this.menuData[itemIndex].open;
|
|
312
|
+
this.menuData[itemIndex].open = true;
|
|
313
|
+
if (wasOpened) {
|
|
314
|
+
this.activateMenuItem(itemIndex);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
closeMenu(itemIndex) {
|
|
318
|
+
if (itemIndex !== null && itemIndex !== undefined) {
|
|
319
|
+
this.menuData[itemIndex].open = false;
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
this.menuData.forEach(item => item.open = false);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
hasPopupMenu(itemIndex) {
|
|
326
|
+
const items = this.getItems();
|
|
327
|
+
const subItems = this.getItemSubitems(items[itemIndex]);
|
|
328
|
+
return items[itemIndex].sub && subItems && subItems.length > 0;
|
|
329
|
+
}
|
|
330
|
+
isPrintableChar(str) {
|
|
331
|
+
return str.length === 1 && !!str.match(/\S/);
|
|
332
|
+
}
|
|
333
|
+
getMenuDataIndex(itemIndex, subItemIndex, subSubItemIndex) {
|
|
334
|
+
let menuDataIndex = 0;
|
|
335
|
+
const items = this.getItems();
|
|
336
|
+
const subItems = this.getItemSubitems(items[itemIndex]);
|
|
337
|
+
for (let i = 0; i < subItemIndex; i++) {
|
|
338
|
+
const subItem = subItems[i];
|
|
339
|
+
const subSubItems = this.getSubItemSubitems(subItem);
|
|
340
|
+
menuDataIndex += subSubItems && subSubItems.length > 0 ? subSubItems.length : 1;
|
|
341
|
+
}
|
|
342
|
+
if (subSubItemIndex !== null && subSubItemIndex !== undefined) {
|
|
343
|
+
menuDataIndex += subSubItemIndex;
|
|
344
|
+
}
|
|
345
|
+
return menuDataIndex;
|
|
346
|
+
}
|
|
347
|
+
/*
|
|
348
|
+
* Comunes - focus
|
|
349
|
+
*/
|
|
350
|
+
focusItem(itemIndex, hover) {
|
|
351
|
+
const hasFocus = this.menubar.nativeElement.contains(document.activeElement);
|
|
352
|
+
const isOpen = this.menuData[this.currentFocusItemIndex].open;
|
|
353
|
+
if (!hover || hasFocus) {
|
|
354
|
+
this.menuData[itemIndex].menuItem.link.nativeElement.focus();
|
|
355
|
+
}
|
|
356
|
+
this.closeMenu();
|
|
357
|
+
if (isOpen && this.hasPopupMenu(itemIndex)) {
|
|
358
|
+
this.openMenu(itemIndex);
|
|
359
|
+
}
|
|
360
|
+
this.currentFocusItemIndex = itemIndex;
|
|
361
|
+
}
|
|
362
|
+
focusNextAvailableItem(fromItemIndex, step) {
|
|
363
|
+
let nextItem = fromItemIndex;
|
|
364
|
+
const items = this.getItems();
|
|
365
|
+
do {
|
|
366
|
+
nextItem = (nextItem + items.length + step) % items.length;
|
|
367
|
+
} while (!this.isItemFocusable(nextItem) && nextItem !== fromItemIndex);
|
|
368
|
+
if (nextItem !== fromItemIndex) {
|
|
369
|
+
this.focusItem(nextItem);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
focusFirstItem() {
|
|
373
|
+
if (this.isItemFocusable(0)) {
|
|
374
|
+
this.focusItem(0);
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
this.focusNextAvailableItem(0, +1);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
focusLastItem() {
|
|
381
|
+
const items = this.getItems();
|
|
382
|
+
if (this.isItemFocusable(items.length - 1)) {
|
|
383
|
+
this.focusItem(items.length - 1);
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
this.focusNextAvailableItem(items.length - 1, -1);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
isItemFocusable(itemIndex) {
|
|
390
|
+
return !this.getItems()[itemIndex].disabled;
|
|
391
|
+
}
|
|
392
|
+
focusItemByFirstChar(char) {
|
|
393
|
+
const itemContents = this.menuItems.map(menuItem => menuItem.itemContentWrapper.nativeElement.textContent);
|
|
394
|
+
let index = this.currentFocusItemIndex;
|
|
395
|
+
let foundIndex = -1;
|
|
396
|
+
do {
|
|
397
|
+
index = (index + itemContents.length + 1) % itemContents.length;
|
|
398
|
+
if (itemContents[index] && itemContents[index].trim().substr(0, 1).toLowerCase() === char.toLowerCase()
|
|
399
|
+
&& this.isItemFocusable(index)) {
|
|
400
|
+
foundIndex = index;
|
|
401
|
+
}
|
|
402
|
+
} while (foundIndex === -1 && index !== this.currentFocusItemIndex);
|
|
403
|
+
if (foundIndex >= 0) {
|
|
404
|
+
this.focusItem(foundIndex);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
focusSubItem(itemIndex, subItemIndex, subSubItemIndex) {
|
|
408
|
+
if (this.menuData[itemIndex].menuItem.popupMenuItems.length > 0) {
|
|
409
|
+
const menuDataIndex = this.getMenuDataIndex(itemIndex, subItemIndex, subSubItemIndex);
|
|
410
|
+
this.menuData[itemIndex].currentFocusSubItemIndex = subItemIndex;
|
|
411
|
+
this.menuData[itemIndex].currentFocusSubSubItemIndex = subSubItemIndex;
|
|
412
|
+
const elem = this.menuData[itemIndex].menuItem.popupMenuItems.toArray()[menuDataIndex].nativeElement;
|
|
413
|
+
if (elem) {
|
|
414
|
+
elem.focus();
|
|
415
|
+
}
|
|
416
|
+
else {
|
|
417
|
+
console.error('No subitem to focus');
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
else {
|
|
421
|
+
console.error('No subitems');
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
focusNextAvailableSubItem(itemIndex, fromItemSubIndex, fromItemSubSubIndex, step) {
|
|
425
|
+
let nextSubIndex = fromItemSubIndex;
|
|
426
|
+
let nextSubSubIndex = fromItemSubSubIndex;
|
|
427
|
+
let allSubItemsChecked;
|
|
428
|
+
const items = this.getItems();
|
|
429
|
+
do {
|
|
430
|
+
const nextIndexes = this.getNextSubItemIndexes(items, itemIndex, nextSubIndex, nextSubSubIndex, step);
|
|
431
|
+
nextSubIndex = nextIndexes.subIndex;
|
|
432
|
+
nextSubSubIndex = nextIndexes.subSubIndex;
|
|
433
|
+
allSubItemsChecked = (fromItemSubIndex === nextSubIndex && fromItemSubSubIndex === nextSubSubIndex);
|
|
434
|
+
} while (!this.isSubItemFocusable(itemIndex, nextSubIndex, nextSubSubIndex) && !allSubItemsChecked);
|
|
435
|
+
if (!allSubItemsChecked) {
|
|
436
|
+
this.focusSubItem(itemIndex, nextSubIndex, nextSubSubIndex);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
focusFirstSubItem(itemIndex) {
|
|
440
|
+
let firstSubSubItem = null;
|
|
441
|
+
const items = this.getItems();
|
|
442
|
+
const subItems = this.getItemSubitems(items[itemIndex]);
|
|
443
|
+
const subSubItems = this.getSubItemSubitems(subItems[0]);
|
|
444
|
+
if (subSubItems && subSubItems.length > 0) {
|
|
445
|
+
firstSubSubItem = 0;
|
|
446
|
+
}
|
|
447
|
+
if (this.isSubItemFocusable(itemIndex, 0, firstSubSubItem)) {
|
|
448
|
+
this.focusSubItem(itemIndex, 0, firstSubSubItem);
|
|
449
|
+
}
|
|
450
|
+
else {
|
|
451
|
+
this.focusNextAvailableSubItem(itemIndex, 0, firstSubSubItem, +1);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
focusLastSubItem(itemIndex) {
|
|
455
|
+
const items = this.getItems();
|
|
456
|
+
const subItems = this.getItemSubitems(items[itemIndex]);
|
|
457
|
+
const lastItemIndex = subItems.length - 1;
|
|
458
|
+
const lastItem = subItems[lastItemIndex];
|
|
459
|
+
const subSubItems = this.getSubItemSubitems(lastItem);
|
|
460
|
+
let lastSubSubItem = null;
|
|
461
|
+
if (subSubItems && subSubItems.length > 0) {
|
|
462
|
+
lastSubSubItem = subSubItems.length - 1;
|
|
463
|
+
}
|
|
464
|
+
if (this.isSubItemFocusable(itemIndex, lastItemIndex, lastSubSubItem)) {
|
|
465
|
+
this.focusSubItem(itemIndex, lastItemIndex, lastSubSubItem);
|
|
466
|
+
}
|
|
467
|
+
else {
|
|
468
|
+
this.focusNextAvailableSubItem(itemIndex, lastItemIndex, lastSubSubItem, -1);
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
isSubItemFocusable(itemIndex, subItemIndex, subSubItemIndex) {
|
|
472
|
+
const items = this.getItems();
|
|
473
|
+
const subItems = this.getItemSubitems(items[itemIndex]);
|
|
474
|
+
let item = subItems[subItemIndex];
|
|
475
|
+
if (subSubItemIndex !== null && subSubItemIndex !== undefined) {
|
|
476
|
+
const subSubItems = this.getSubItemSubitems(item);
|
|
477
|
+
item = subSubItems[subSubItemIndex];
|
|
478
|
+
}
|
|
479
|
+
let isFocusable = false;
|
|
480
|
+
if (item.role !== 'separator' && item.role !== 'none') {
|
|
481
|
+
isFocusable = true;
|
|
482
|
+
}
|
|
483
|
+
return isFocusable;
|
|
484
|
+
}
|
|
485
|
+
focusSubItemByFirstChar(itemIndex, char) {
|
|
486
|
+
const itemContents = this.menuItems.toArray()[itemIndex].popupMenuItems.map(menuItem => menuItem.nativeElement.textContent);
|
|
487
|
+
let subItemIndex = this.menuData[itemIndex].currentFocusSubItemIndex;
|
|
488
|
+
let subSubItemIndex = this.menuData[itemIndex].currentFocusSubSubItemIndex;
|
|
489
|
+
let foundSubIndex = -1;
|
|
490
|
+
let foundSubSubIndex = null;
|
|
491
|
+
let allSubItemsChecked = false;
|
|
492
|
+
const items = this.getItems();
|
|
493
|
+
do {
|
|
494
|
+
const nextIndexes = this.getNextSubItemIndexes(items, itemIndex, subItemIndex, subSubItemIndex, +1);
|
|
495
|
+
subItemIndex = nextIndexes.subIndex;
|
|
496
|
+
subSubItemIndex = nextIndexes.subSubIndex;
|
|
497
|
+
const index = this.getMenuDataIndex(itemIndex, subItemIndex, subSubItemIndex);
|
|
498
|
+
if (itemContents[index] && itemContents[index].trim().substr(0, 1).toLowerCase() === char.toLowerCase()
|
|
499
|
+
&& this.isSubItemFocusable(itemIndex, subItemIndex, subSubItemIndex)) {
|
|
500
|
+
foundSubIndex = subItemIndex;
|
|
501
|
+
foundSubSubIndex = subSubItemIndex;
|
|
502
|
+
}
|
|
503
|
+
allSubItemsChecked = (this.menuData[itemIndex].currentFocusSubItemIndex === subItemIndex
|
|
504
|
+
&& this.menuData[itemIndex].currentFocusSubSubItemIndex === subSubItemIndex);
|
|
505
|
+
} while (foundSubIndex === -1 && !allSubItemsChecked);
|
|
506
|
+
if (foundSubIndex >= 0) {
|
|
507
|
+
this.focusSubItem(itemIndex, foundSubIndex, foundSubSubIndex);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
/*
|
|
511
|
+
* Metodos para facilitar contenido
|
|
512
|
+
*/
|
|
513
|
+
getItems() {
|
|
514
|
+
let items;
|
|
515
|
+
if (this.itemComponentList && this.itemComponentList.length > 0) {
|
|
516
|
+
items = this.itemComponentList.toArray();
|
|
517
|
+
}
|
|
518
|
+
else {
|
|
519
|
+
items = this.items;
|
|
520
|
+
}
|
|
521
|
+
return items;
|
|
522
|
+
}
|
|
523
|
+
getItemSubitems(item) {
|
|
524
|
+
let subItems = [];
|
|
525
|
+
if (item instanceof MenubarItemComponent) {
|
|
526
|
+
subItems = item.getSubItems();
|
|
527
|
+
}
|
|
528
|
+
if (!subItems || subItems.length === 0) {
|
|
529
|
+
subItems = item.sub ? item.sub.items : [];
|
|
530
|
+
}
|
|
531
|
+
return subItems;
|
|
532
|
+
}
|
|
533
|
+
getSubItemSubitems(item) {
|
|
534
|
+
let subItems = [];
|
|
535
|
+
if (item.role === 'group') {
|
|
536
|
+
if (item instanceof MenubarSubitemComponent) {
|
|
537
|
+
subItems = item.getSubItems();
|
|
538
|
+
}
|
|
539
|
+
if (!subItems || subItems.length === 0) {
|
|
540
|
+
subItems = item.items ? item.items : [];
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
return subItems;
|
|
544
|
+
}
|
|
545
|
+
getNextSubItemIndexes(items, itemIndex, nextSubIndex, nextSubSubIndex, step) {
|
|
546
|
+
const subItems = this.getItemSubitems(items[itemIndex]);
|
|
547
|
+
const subSubItems = this.getSubItemSubitems(subItems[nextSubIndex]);
|
|
548
|
+
let checkNextSubItem = true;
|
|
549
|
+
if (subSubItems && subSubItems.length > 0) {
|
|
550
|
+
if (nextSubSubIndex + step >= 0 && nextSubSubIndex + step < subSubItems.length) {
|
|
551
|
+
nextSubSubIndex += step;
|
|
552
|
+
checkNextSubItem = false;
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
if (checkNextSubItem) {
|
|
556
|
+
nextSubIndex = (nextSubIndex + step + subItems.length) % subItems.length;
|
|
557
|
+
const nextSubItemItems = this.getSubItemSubitems(subItems[nextSubIndex]);
|
|
558
|
+
if (nextSubItemItems && nextSubItemItems.length > 0) {
|
|
559
|
+
nextSubSubIndex = ((step > 0 ? -1 : 0) + step + nextSubItemItems.length) % nextSubItemItems.length;
|
|
560
|
+
}
|
|
561
|
+
else {
|
|
562
|
+
nextSubSubIndex = null;
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
return { subIndex: nextSubIndex, subSubIndex: nextSubSubIndex };
|
|
566
|
+
}
|
|
567
|
+
getIdPrefix() {
|
|
568
|
+
return this.idPrefix ? this.idPrefix : this.id + 'menubar-item';
|
|
569
|
+
}
|
|
570
|
+
getLabelRef() {
|
|
571
|
+
return this.labelComponent ? this.labelComponent.getContent() : this.labelRef;
|
|
572
|
+
}
|
|
573
|
+
getLabelContent() {
|
|
574
|
+
let content;
|
|
575
|
+
if (this.labelData) {
|
|
576
|
+
content = this.labelData.html ? this.labelData.html : `<p>${StringUtils.escapeHtml(this.labelData.text)}</p>`;
|
|
577
|
+
}
|
|
578
|
+
else if (this.labelText) {
|
|
579
|
+
content = `<p>${StringUtils.escapeHtml(this.labelText)}</p>`;
|
|
580
|
+
}
|
|
581
|
+
return content;
|
|
582
|
+
}
|
|
583
|
+
getItemId(item, index) {
|
|
584
|
+
let id;
|
|
585
|
+
if (item) {
|
|
586
|
+
if (item.id) {
|
|
587
|
+
id = item.id;
|
|
588
|
+
}
|
|
589
|
+
else {
|
|
590
|
+
id = index === 0 ? this.getIdPrefix() : `${this.getIdPrefix()}-${index}`;
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
return id;
|
|
594
|
+
}
|
|
595
|
+
getPopupStyle(itemIndex) {
|
|
596
|
+
let style = {};
|
|
597
|
+
if (this.menuData && itemIndex < this.menuData.length) {
|
|
598
|
+
const menuItem = this.menuData[itemIndex].menuItem;
|
|
599
|
+
const rect = menuItem.link.nativeElement.getBoundingClientRect();
|
|
600
|
+
if (this.menuData[itemIndex].open) {
|
|
601
|
+
style = {
|
|
602
|
+
position: 'absolute',
|
|
603
|
+
top: (rect.height - 1) + 'px',
|
|
604
|
+
left: '0px',
|
|
605
|
+
zIndex: 100,
|
|
606
|
+
display: 'block'
|
|
607
|
+
};
|
|
608
|
+
}
|
|
609
|
+
else {
|
|
610
|
+
style = {
|
|
611
|
+
zIndex: 0,
|
|
612
|
+
display: 'none'
|
|
613
|
+
};
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
return style;
|
|
617
|
+
}
|
|
618
|
+
getSubItemId(item, index, parentId) {
|
|
619
|
+
let id;
|
|
620
|
+
if (item) {
|
|
621
|
+
if (item.id) {
|
|
622
|
+
id = item.id;
|
|
623
|
+
}
|
|
624
|
+
else {
|
|
625
|
+
id = index === 0 ? `sub-${parentId}` : `sub-${parentId}-${index}`;
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
return id;
|
|
629
|
+
}
|
|
630
|
+
getSubSubItemAriaChecked(subsubitem) {
|
|
631
|
+
let ariaChecked = null;
|
|
632
|
+
if (subsubitem.role === 'menuitemcheckbox' || subsubitem.role === 'menuitemradio') {
|
|
633
|
+
ariaChecked = !!subsubitem.checked;
|
|
634
|
+
}
|
|
635
|
+
return ariaChecked;
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
MenubarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MenubarComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
639
|
+
MenubarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: MenubarComponent, selector: "desy-menubar", inputs: { idPrefix: "idPrefix", items: "items", labelRef: "labelRef", labelData: "labelData", labelText: "labelText", classes: "classes", id: "id" }, outputs: { itemsChange: "itemsChange", activeItemChange: "activeItemChange", activeSubItemChange: "activeSubItemChange" }, host: { properties: { "class": "this.classes", "class.c-menubar": "this.cfg", "attr.id": "this.id", "attr.role": "this.roleData", "attr.aria-label": "this.ariaLabelData", "attr.aria-describedby": "this.ariaDescribedbyData", "attr.aria-labelledby": "this.ariaLabelledbyData", "attr.aria-hidden": "this.ariaHiddenData", "attr.aria-disabled": "this.ariaDisabledData", "attr.aria-controls": "this.ariaControlsData", "attr.aria-current": "this.ariaCurrentData", "attr.aria-live": "this.ariaLiveData", "attr.aria-expanded": "this.ariaExpandedData", "attr.aria-errormessage": "this.ariaErrormessageData", "attr.aria-haspopup": "this.ariaHaspopupData", "attr.aria-modal": "this.ariaModalData" } }, queries: [{ propertyName: "labelComponent", predicate: MenubarLabelComponent }, { propertyName: "itemComponentList", predicate: MenubarItemComponent }], viewQueries: [{ propertyName: "menubar", first: true, predicate: ["menubar"], descendants: true, read: ElementRef }, { propertyName: "menuItems", predicate: MenubaritemDirective, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: " <ng-container *ngIf=\"getLabelRef()\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelComponent ? labelComponent.classes : (labelData ? labelData.classes : null)] | makeHtmlList\">\n <ng-container *ngTemplateOutlet=\"getLabelRef()\"></ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!getLabelRef() && (labelData || labelText)\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelData ? labelData.classes : null] | makeHtmlList\">\n <ng-container *desyCustomInnerContent=\"{ html: getLabelContent() }\"></ng-container>\n </div>\n </ng-container>\n <ul #menubar [id]=\"id + '-menubar'\" class=\"lg:flex lg:flex-wrap\" role=\"menubar\"\n (focusin)=\"handleMenuFocusIn()\"\n (focusout)=\"handleMenuFocusOut($event)\"\n [ngClass]=\"{ 'focus': isFocused }\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby]=\"getLabelRef() || labelData || labelText ? id + '-label' : null\">\n <ng-container *ngFor=\"let item of getItems(); index as itemIndex\">\n <li class=\"relative\" role=\"none\" desyMenubaritem (contentChanged)=\"checkChanges()\">\n <a *ngIf=\"item.sub\" #link\n role=\"menuitem\" aria-haspopup=\"true\" aria-expanded=\"false\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--primary': item.active}\" \n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"item.ariaLabelledBy ? item.ariaLabelledBy : 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-errormessage]=\"item.ariaErrorMessage ? item.ariaErrorMessage : null\"\n [attr.aria-modal]=\"item.ariaModal ? item.ariaModal : null\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\">\n <span class=\"inline-flex self-center max-w-xs align-middle truncate\" #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.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 </a>\n <a *ngIf=\"item.routerLink && !item.sub\" #link #itemContentWrapper\n role=\"menuitem\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [fragment]=\"item.fragment\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--primary': item.active}\"\n [attr.title]=\"item.title ? item.title : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\"\n [attr.target]=\"item.target ? item.target : null\"\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-labelledBy]=\"item.ariaLabelledBy ? item.ariaLabelledBy : 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-modal]=\"item.ariaModal ? item.ariaModal : null\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </a>\n <a *ngIf=\"!item.routerLink && item.href && !item.sub\" #link #itemContentWrapper\n role=\"menuitem\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [href]=\"item.href | externalHref\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--primary': item.active}\"\n [attr.title]=\"item.title ? item.title : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\"\n [attr.target]=\"item.target ? item.target : null\"\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-labelledBy]=\"item.ariaLabelledBy ? item.ariaLabelledBy : 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-modal]=\"item.ariaModal ? item.ariaModal : null\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </a>\n\n <ul *ngIf=\"item.sub && getItemSubitems(item)\" #popupMenu role=\"menu\" tabindex=\"-1\"\n [ngStyle]=\"getPopupStyle(itemIndex)\"\n [class]=\"['c-menubar__tooltip w-max max-w-64 hidden border border-neutral-base shadow-md bg-white text-sm', item.sub.classes] | makeHtmlList\"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : (item.sub.ariaLabel ? item.sub.ariaLabel : null)\"\n [attr.aria-describedby]=\"item.sub.ariaDescribedBy ? item.sub.ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"item.sub.ariaLabelledBy ? item.sub.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"item.sub.ariaHidden ? item.sub.ariaHidden : null\"\n [attr.aria-disabled]=\"item.sub.ariaDisabled ? item.sub.ariaDisabled : null\"\n [attr.aria-controls]=\"item.sub.ariaControls ? item.sub.ariaControls : null\"\n [attr.aria-current]=\"item.sub.ariaCurrent ? item.sub.ariaCurrent : null\"\n [attr.aria-live]=\"item.sub.ariaLive ? item.sub.ariaLive : null\"\n [attr.aria-expanded]=\"!!(menuData && menuData[itemIndex].open)\"\n [attr.aria-errormessage]=\"item.sub.ariaErrorMessage ? item.sub.ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"item.sub.ariaHasPopup ? item.sub.ariaHasPopup : null\"\n [attr.aria-modal]=\"item.sub.ariaModal ? item.sub.ariaModal : null\">\n <ng-container *ngFor=\"let subItem of getItemSubitems(item); index as subItemIndex\">\n <ng-container [ngSwitch]=\"subItem.role\">\n <li #popupMenuItem *ngSwitchCase=\"'none'\" role=\"none\" tabindex=\"-1\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li *ngSwitchCase=\"'group'\" role=\"none\">\n <ul role=\"group\" [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n [attr.aria-label]=\"subItem.ariaLabel ? subItem.ariaLabel : null\">\n <ng-container *ngFor=\"let subsubitem of getSubItemSubitems(subItem); index as subsubIndex\">\n <ng-container *ngIf=\"subsubitem\">\n <li #popupMenuItem [attr.role]=\"subsubitem.role ? subsubitem.role : null\" tabindex=\"-1\"\n [id]=\"getSubItemId(subsubitem, subsubIndex, getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex)))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex, subsubIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex, subsubIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex, subsubIndex)\"\n [attr.aria-checked]=\"getSubSubItemAriaChecked(subsubitem)\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white\">\n <ng-container *desyCustomInnerContent=\"{ component: subsubitem, html: subsubitem.html, text: subsubitem.text}\"></ng-container>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'menuitem'\" role=\"menuitem\" tabindex=\"-1\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white focus:bg-primary-base focus:text-white focus:outline-none\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'menuitemcheckbox'\" role=\"menuitemcheckbox\" tabindex=\"-1\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n [attr.aria-checked]=\"!!subItem.checked\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'separator'\" role=\"separator\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n class=\"my-sm border-b border-neutral-base\">\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ul>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i3.AttributeChangeDirective, selector: "[desyAttributeChange]", inputs: ["attributesToCheck"], outputs: ["desyAttributeChange", "desyAttributeChangeMutation"] }, { kind: "directive", type: i4.CustomInnerContentDirective, selector: "[desyCustomInnerContent]", inputs: ["desyCustomInnerContent"] }, { kind: "directive", type: i5.MenubaritemDirective, selector: "[desyMenubaritem]", outputs: ["contentChanged"] }, { kind: "pipe", type: i6.MakeHtmlListPipe, name: "makeHtmlList" }, { kind: "pipe", type: i7.ExternalHrefPipe, name: "externalHref" }] });
|
|
640
|
+
__decorate([
|
|
641
|
+
DesyContentChild()
|
|
642
|
+
], MenubarComponent.prototype, "labelComponent", void 0);
|
|
643
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: MenubarComponent, decorators: [{
|
|
644
|
+
type: Component,
|
|
645
|
+
args: [{ selector: 'desy-menubar', template: " <ng-container *ngIf=\"getLabelRef()\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelComponent ? labelComponent.classes : (labelData ? labelData.classes : null)] | makeHtmlList\">\n <ng-container *ngTemplateOutlet=\"getLabelRef()\"></ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"!getLabelRef() && (labelData || labelText)\">\n <div [id]=\"id + '-label'\" [class]=\"['mb-sm', labelData ? labelData.classes : null] | makeHtmlList\">\n <ng-container *desyCustomInnerContent=\"{ html: getLabelContent() }\"></ng-container>\n </div>\n </ng-container>\n <ul #menubar [id]=\"id + '-menubar'\" class=\"lg:flex lg:flex-wrap\" role=\"menubar\"\n (focusin)=\"handleMenuFocusIn()\"\n (focusout)=\"handleMenuFocusOut($event)\"\n [ngClass]=\"{ 'focus': isFocused }\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby]=\"getLabelRef() || labelData || labelText ? id + '-label' : null\">\n <ng-container *ngFor=\"let item of getItems(); index as itemIndex\">\n <li class=\"relative\" role=\"none\" desyMenubaritem (contentChanged)=\"checkChanges()\">\n <a *ngIf=\"item.sub\" #link\n role=\"menuitem\" aria-haspopup=\"true\" aria-expanded=\"false\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--primary': item.active}\" \n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"item.ariaLabelledBy ? item.ariaLabelledBy : 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-errormessage]=\"item.ariaErrorMessage ? item.ariaErrorMessage : null\"\n [attr.aria-modal]=\"item.ariaModal ? item.ariaModal : null\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\">\n <span class=\"inline-flex self-center max-w-xs align-middle truncate\" #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.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 </a>\n <a *ngIf=\"item.routerLink && !item.sub\" #link #itemContentWrapper\n role=\"menuitem\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [fragment]=\"item.fragment\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--primary': item.active}\"\n [attr.title]=\"item.title ? item.title : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\"\n [attr.target]=\"item.target ? item.target : null\"\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-labelledBy]=\"item.ariaLabelledBy ? item.ariaLabelledBy : 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-modal]=\"item.ariaModal ? item.ariaModal : null\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </a>\n <a *ngIf=\"!item.routerLink && item.href && !item.sub\" #link #itemContentWrapper\n role=\"menuitem\"\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\" [attributesToCheck]=\"'disabled'\"\n [id]=\"getItemId(item, itemIndex)\"\n [href]=\"item.href | externalHref\"\n [class]=\"['c-menubar__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{'c-menubar__button--disabled': item.disabled, 'c-menubar__button--primary': item.active}\"\n [attr.title]=\"item.title ? item.title : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : (item.ariaDisabled ? item.ariaDisabled : null)\"\n [attr.tabindex]=\"item.disabled ? -1 : (itemIndex === currentFocusItemIndex ? 0 : -1)\"\n [attr.target]=\"item.target ? item.target : null\"\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-labelledBy]=\"item.ariaLabelledBy ? item.ariaLabelledBy : 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-modal]=\"item.ariaModal ? item.ariaModal : null\">\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text}\"></ng-container>\n </a>\n\n <ul *ngIf=\"item.sub && getItemSubitems(item)\" #popupMenu role=\"menu\" tabindex=\"-1\"\n [ngStyle]=\"getPopupStyle(itemIndex)\"\n [class]=\"['c-menubar__tooltip w-max max-w-64 hidden border border-neutral-base shadow-md bg-white text-sm', item.sub.classes] | makeHtmlList\"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : (item.sub.ariaLabel ? item.sub.ariaLabel : null)\"\n [attr.aria-describedby]=\"item.sub.ariaDescribedBy ? item.sub.ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"item.sub.ariaLabelledBy ? item.sub.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"item.sub.ariaHidden ? item.sub.ariaHidden : null\"\n [attr.aria-disabled]=\"item.sub.ariaDisabled ? item.sub.ariaDisabled : null\"\n [attr.aria-controls]=\"item.sub.ariaControls ? item.sub.ariaControls : null\"\n [attr.aria-current]=\"item.sub.ariaCurrent ? item.sub.ariaCurrent : null\"\n [attr.aria-live]=\"item.sub.ariaLive ? item.sub.ariaLive : null\"\n [attr.aria-expanded]=\"!!(menuData && menuData[itemIndex].open)\"\n [attr.aria-errormessage]=\"item.sub.ariaErrorMessage ? item.sub.ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"item.sub.ariaHasPopup ? item.sub.ariaHasPopup : null\"\n [attr.aria-modal]=\"item.sub.ariaModal ? item.sub.ariaModal : null\">\n <ng-container *ngFor=\"let subItem of getItemSubitems(item); index as subItemIndex\">\n <ng-container [ngSwitch]=\"subItem.role\">\n <li #popupMenuItem *ngSwitchCase=\"'none'\" role=\"none\" tabindex=\"-1\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li *ngSwitchCase=\"'group'\" role=\"none\">\n <ul role=\"group\" [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n [attr.aria-label]=\"subItem.ariaLabel ? subItem.ariaLabel : null\">\n <ng-container *ngFor=\"let subsubitem of getSubItemSubitems(subItem); index as subsubIndex\">\n <ng-container *ngIf=\"subsubitem\">\n <li #popupMenuItem [attr.role]=\"subsubitem.role ? subsubitem.role : null\" tabindex=\"-1\"\n [id]=\"getSubItemId(subsubitem, subsubIndex, getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex)))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex, subsubIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex, subsubIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex, subsubIndex)\"\n [attr.aria-checked]=\"getSubSubItemAriaChecked(subsubitem)\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white\">\n <ng-container *desyCustomInnerContent=\"{ component: subsubitem, html: subsubitem.html, text: subsubitem.text}\"></ng-container>\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'menuitem'\" role=\"menuitem\" tabindex=\"-1\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white focus:bg-primary-base focus:text-white focus:outline-none\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'menuitemcheckbox'\" role=\"menuitemcheckbox\" tabindex=\"-1\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n [attr.aria-checked]=\"!!subItem.checked\"\n class=\"flex items-center pr-base pl-lg py-sm cursor-pointer hover:bg-primary-base hover:text-white\">\n <ng-container *desyCustomInnerContent=\"{ component: subItem, html: subItem.html, text: subItem.text}\"></ng-container>\n </li>\n <li #popupMenuItem *ngSwitchCase=\"'separator'\" role=\"separator\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n class=\"my-sm border-b border-neutral-base\">\n </li>\n </ng-container>\n </ng-container>\n </ul>\n </li>\n </ng-container>\n </ul>\n" }]
|
|
646
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { idPrefix: [{
|
|
647
|
+
type: Input
|
|
648
|
+
}], items: [{
|
|
649
|
+
type: Input
|
|
650
|
+
}], itemsChange: [{
|
|
651
|
+
type: Output
|
|
652
|
+
}], activeItemChange: [{
|
|
653
|
+
type: Output
|
|
654
|
+
}], activeSubItemChange: [{
|
|
655
|
+
type: Output
|
|
656
|
+
}], labelRef: [{
|
|
657
|
+
type: Input
|
|
658
|
+
}], labelData: [{
|
|
659
|
+
type: Input
|
|
660
|
+
}], labelText: [{
|
|
661
|
+
type: Input
|
|
662
|
+
}], classes: [{
|
|
663
|
+
type: Input
|
|
664
|
+
}, {
|
|
665
|
+
type: HostBinding,
|
|
666
|
+
args: ['class']
|
|
667
|
+
}], cfg: [{
|
|
668
|
+
type: HostBinding,
|
|
669
|
+
args: ['class.c-menubar']
|
|
670
|
+
}], id: [{
|
|
671
|
+
type: Input
|
|
672
|
+
}, {
|
|
673
|
+
type: HostBinding,
|
|
674
|
+
args: ['attr.id']
|
|
675
|
+
}], roleData: [{
|
|
676
|
+
type: HostBinding,
|
|
677
|
+
args: ['attr.role']
|
|
678
|
+
}], ariaLabelData: [{
|
|
679
|
+
type: HostBinding,
|
|
680
|
+
args: ['attr.aria-label']
|
|
681
|
+
}], ariaDescribedbyData: [{
|
|
682
|
+
type: HostBinding,
|
|
683
|
+
args: ['attr.aria-describedby']
|
|
684
|
+
}], ariaLabelledbyData: [{
|
|
685
|
+
type: HostBinding,
|
|
686
|
+
args: ['attr.aria-labelledby']
|
|
687
|
+
}], ariaHiddenData: [{
|
|
688
|
+
type: HostBinding,
|
|
689
|
+
args: ['attr.aria-hidden']
|
|
690
|
+
}], ariaDisabledData: [{
|
|
691
|
+
type: HostBinding,
|
|
692
|
+
args: ['attr.aria-disabled']
|
|
693
|
+
}], ariaControlsData: [{
|
|
694
|
+
type: HostBinding,
|
|
695
|
+
args: ['attr.aria-controls']
|
|
696
|
+
}], ariaCurrentData: [{
|
|
697
|
+
type: HostBinding,
|
|
698
|
+
args: ['attr.aria-current']
|
|
699
|
+
}], ariaLiveData: [{
|
|
700
|
+
type: HostBinding,
|
|
701
|
+
args: ['attr.aria-live']
|
|
702
|
+
}], ariaExpandedData: [{
|
|
703
|
+
type: HostBinding,
|
|
704
|
+
args: ['attr.aria-expanded']
|
|
705
|
+
}], ariaErrormessageData: [{
|
|
706
|
+
type: HostBinding,
|
|
707
|
+
args: ['attr.aria-errormessage']
|
|
708
|
+
}], ariaHaspopupData: [{
|
|
709
|
+
type: HostBinding,
|
|
710
|
+
args: ['attr.aria-haspopup']
|
|
711
|
+
}], ariaModalData: [{
|
|
712
|
+
type: HostBinding,
|
|
713
|
+
args: ['attr.aria-modal']
|
|
714
|
+
}], menubar: [{
|
|
715
|
+
type: ViewChild,
|
|
716
|
+
args: ['menubar', { read: ElementRef }]
|
|
717
|
+
}], menuItems: [{
|
|
718
|
+
type: ViewChildren,
|
|
719
|
+
args: [MenubaritemDirective]
|
|
720
|
+
}], labelComponent: [{
|
|
721
|
+
type: ContentChildren,
|
|
722
|
+
args: [MenubarLabelComponent]
|
|
723
|
+
}], itemComponentList: [{
|
|
724
|
+
type: ContentChildren,
|
|
725
|
+
args: [MenubarItemComponent]
|
|
726
|
+
}] } });
|
|
727
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW5hdi9jb21wb25lbnRzL21lbnViYXIvbWVudWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW5hdi9jb21wb25lbnRzL21lbnViYXIvbWVudWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVMLFNBQVMsRUFBRSxlQUFlLEVBQzFCLFVBQVUsRUFBRSxZQUFZLEVBQ3hCLFdBQVcsRUFDWCxLQUFLLEVBQ00sTUFBTSxFQUlqQixTQUFTLEVBQ1QsWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRWxFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBS3hFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUN0RixPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSx3REFBd0QsQ0FBQztBQUMvRixPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSw4REFBOEQsQ0FBQztBQUN4RyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxvREFBb0QsQ0FBQztBQUN6RixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5REFBeUQsQ0FBQzs7Ozs7Ozs7O0FBTXpGLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxzQkFBc0I7SUErQzFELFlBQW9CLGlCQUFvQztRQUN0RCxLQUFLLEVBQUUsQ0FBQztRQURVLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUEz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QVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDTixTQUFTO3NCQUE1QyxZQUFZO3VCQUFDLG9CQUFvQjtnQkFDMEIsY0FBYztzQkFBckQsZUFBZTt1QkFBQyxxQkFBcUI7Z0JBQ25CLGlCQUFpQjtzQkFBdkQsZUFBZTt1QkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjY2Vzc2liaWxpdHlDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzJztcbmltcG9ydCB7TWVudWJhckl0ZW19IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbWVudWJhci1pdGVtJztcbmltcG9ydCB7TWVudWJhcml0ZW1EaXJlY3RpdmV9IGZyb20gJy4vZGlyZWN0aXZlcy9tZW51YmFyaXRlbS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtNZW51YmFySXRlbVN1Ykl0ZW19IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbWVudWJhci1pdGVtLXN1Yi1pdGVtJztcbmltcG9ydCB7TWVudWJhckl0ZW1TdWJJdGVtU3ViSXRlbX0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9tZW51YmFyLWl0ZW0tc3ViLWl0ZW0tc3ViLWl0ZW0nO1xuaW1wb3J0IHtMYWJlbENvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vZGVzeS1mb3Jtcy9jb21wb25lbnRzL2xhYmVsL2xhYmVsLmNvbXBvbmVudCc7XG5pbXBvcnQge0xhYmVsRGF0YX0gZnJvbSAnLi4vLi4vLi4vZGVzeS1mb3Jtcy9pbnRlcmZhY2VzJztcbmltcG9ydCB7U3RyaW5nVXRpbHN9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC91dGlscy9zdHJpbmctdXRpbHMnO1xuaW1wb3J0IHtNZW51YmFySXRlbUNvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL21lbnViYXItaXRlbS9tZW51YmFyLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7TWVudWJhclN1Yml0ZW1Db21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9tZW51YmFyLXN1Yml0ZW0vbWVudWJhci1zdWJpdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQge01lbnViYXJTdWJzdWJpdGVtQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvbWVudWJhci1zdWJzdWJpdGVtL21lbnViYXItc3Vic3ViaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHtNZW51YmFyTGFiZWxDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9tZW51YmFyLWxhYmVsL21lbnViYXItbGFiZWwuY29tcG9uZW50JztcbmltcG9ydCB7RGVzeUNvbnRlbnRDaGlsZH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2RlY29yYXRvcnMvZGVzeS1jb250ZW50LWNoaWxkLmRlY29yYXRvcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Rlc3ktbWVudWJhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZW51YmFyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBNZW51YmFyQ29tcG9uZW50IGV4dGVuZHMgQWNjZXNzaWJpbGl0eUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgQElucHV0KCkgaWRQcmVmaXg6IHN0cmluZztcbiAgQElucHV0KCkgaXRlbXM6IE1lbnViYXJJdGVtW107XG4gIEBPdXRwdXQoKSBpdGVtc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TWVudWJhckl0ZW1bXT4oKTtcbiAgQE91dHB1dCgpIGFjdGl2ZUl0ZW1DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE1lbnViYXJJdGVtPigpO1xuICBAT3V0cHV0KCkgYWN0aXZlU3ViSXRlbUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TWVudWJhckl0ZW1TdWJJdGVtfE1lbnViYXJJdGVtU3ViSXRlbVN1Ykl0ZW0+KCk7XG5cbiAgLyoqXG4gICAqIGxhYmVsLCBkaWZlcmVudGVzIGZvcm1hcyBkZSBpbXBsZW1lbnRhciwgZW51bWVyYWRhcyBwb3IgcHJpb3JpZGFkXG4gICAqIDEpIGluY2x1aXIgY29tcG9uZW50ZSBtZW51YmFyLWxhYmVsIGFuaWRhZG9cbiAgICogMikgaW5jbHVpciB0ZW1wbGF0ZVxuICAgKiAzKSBpbmNsdWlyIG9iamV0byBsYWJlbCAoaW50ZXJmYXogZXhwdWVzdGEpXG4gICAqIDQpIGluY2x1aXIgbGVnZW5kVGV4dCAtIGluY2x1aXIgdW4gbGFiZWwgY29uIHNvbG8gdW4gdGV4dG9cbiAgICovXG4gIEBJbnB1dCgpIGxhYmVsUmVmOiBUZW1wbGF0ZVJlZjxMYWJlbENvbXBvbmVudD47XG4gIEBJbnB1dCgpIGxhYmVsRGF0YTogTGFiZWxEYXRhO1xuICBASW5wdXQoKSBsYWJlbFRleHQ6IHN0cmluZztcblxuICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2NsYXNzJykgY2xhc3NlczogYW55O1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmMtbWVudWJhcicpIGNmZyA9IHRydWVcbiAgQElucHV0KCkgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJykgaWQ6IGFueTtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpIHJvbGVEYXRhOiBhbnk7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxhYmVsJykgYXJpYUxhYmVsRGF0YTogYW55O1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1kZXNjcmliZWRieScpIGFyaWFEZXNjcmliZWRieURhdGE6IGFueTtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWxsZWRieScpIGFyaWFMYWJlbGxlZGJ5RGF0YTogYW55O1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1oaWRkZW4nKSBhcmlhSGlkZGVuRGF0YTogYW55O1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1kaXNhYmxlZCcpIGFyaWFEaXNhYmxlZERhdGE6IGFueTtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtY29udHJvbHMnKSBhcmlhQ29udHJvbHNEYXRhOiBhbnk7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWN1cnJlbnQnKSBhcmlhQ3VycmVudERhdGE6IGFueTtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGl2ZScpIGFyaWFMaXZlRGF0YTogYW55O1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1leHBhbmRlZCcpIGFyaWFFeHBhbmRlZERhdGE6IGFueTtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZXJyb3JtZXNzYWdlJykgYXJpYUVycm9ybWVzc2FnZURhdGE6IGFueTtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtaGFzcG9wdXAnKSBhcmlhSGFzcG9wdXBEYXRhOiBhbnk7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLW1vZGFsJykgYXJpYU1vZGFsRGF0YTogYW55XG5cbiAgQFZpZXdDaGlsZCgnbWVudWJhcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBtZW51YmFyOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkcmVuKE1lbnViYXJpdGVtRGlyZWN0aXZlKSBtZW51SXRlbXM6IFF1ZXJ5TGlzdDxNZW51YmFyaXRlbURpcmVjdGl2ZT47XG4gIEBEZXN5Q29udGVudENoaWxkKCkgQENvbnRlbnRDaGlsZHJlbihNZW51YmFyTGFiZWxDb21wb25lbnQpIGxhYmVsQ29tcG9uZW50OiBNZW51YmFyTGFiZWxDb21wb25lbnQ7XG4gIEBDb250ZW50Q2hpbGRyZW4oTWVudWJhckl0ZW1Db21wb25lbnQpIGl0ZW1Db21wb25lbnRMaXN0OiBRdWVyeUxpc3Q8TWVudWJhckl0ZW1Db21wb25lbnQ+O1xuXG4gIG1lbnVEYXRhOiBhbnlbXTtcbiAgdmlld0luaXQgPSBmYWxzZTtcbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBjdXJyZW50Rm9jdXNJdGVtSW5kZXggPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM/OiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5yb2xlRGF0YSA9IHRoaXMucm9sZSA/IHRoaXMucm9sZSA6IG51bGw7XG4gICAgdGhpcy5hcmlhTGFiZWxEYXRhID0gdGhpcy5hcmlhTGFiZWwgPyB0aGlzLmFyaWFMYWJlbCA6IG51bGw7XG4gICAgdGhpcy5hcmlhRGVzY3JpYmVkYnlEYXRhID0gdGhpcy5hcmlhRGVzY3JpYmVkQnkgPyB0aGlzLmFyaWFEZXNjcmliZWRCeSA6IG51bGw7XG4gICAgdGhpcy5hcmlhTGFiZWxsZWRieURhdGEgPSB0aGlzLmFyaWFMYWJlbGxlZEJ5ID8gdGhpcy5hcmlhTGFiZWxsZWRCeSA6IG51bGw7XG4gICAgdGhpcy5hcmlhSGlkZGVuRGF0YSA9IHRoaXMuYXJpYUhpZGRlbiA/IHRoaXMuYXJpYUhpZGRlbiA6IG51bGw7XG4gICAgdGhpcy5hcmlhRGlzYWJsZWREYXRhID0gdGhpcy5hcmlhRGlzYWJsZWQgPyB0aGlzLmFyaWFEaXNhYmxlZCA6IG51bGw7XG4gICAgdGhpcy5hcmlhQ29udHJvbHNEYXRhID0gdGhpcy5hcmlhQ29udHJvbHMgPyB0aGlzLmFyaWFDb250cm9scyA6IG51bGw7XG4gICAgdGhpcy5hcmlhQ3VycmVudERhdGEgPSB0aGlzLmFyaWFDdXJyZW50ID8gdGhpcy5hcmlhQ3VycmVudCA6IG51bGw7XG4gICAgdGhpcy5hcmlhTGl2ZURhdGEgPSB0aGlzLmFyaWFMaXZlID8gdGhpcy5hcmlhTGl2ZSA6IG51bGw7XG4gICAgdGhpcy5hcmlhRXhwYW5kZWREYXRhID0gdGhpcy5hcmlhRXhwYW5kZWQgPyB0aGlzLmFyaWFFeHBhbmRlZCA6IG51bGw7XG4gICAgdGhpcy5hcmlhRXJyb3JtZXNzYWdlRGF0YSA9IHRoaXMuYXJpYUVycm9yTWVzc2FnZSA/IHRoaXMuYXJpYUVycm9yTWVzc2FnZSA6IG51bGw7XG4gICAgdGhpcy5hcmlhSGFzcG9wdXBEYXRhID0gdGhpcy5hcmlhSGFzUG9wdXAgPyB0aGlzLmFyaWFIYXNQb3B1cCA6IG51bGw7XG4gICAgdGhpcy5hcmlhTW9kYWxEYXRhID0gdGhpcy5hcmlhTW9kYWwgPyB0aGlzLmFyaWFNb2RhbCA6IG51bGw7XG4gICAgaWYgKHRoaXMudmlld0luaXQpIHtcbiAgICAgIHRoaXMuY2hlY2tDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMudmlld0luaXQgPSB0cnVlO1xuICAgIHRoaXMuY2hlY2tDaGFuZ2VzKCk7XG4gIH1cblxuICBjaGVja0NoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm1lbnVJdGVtcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLm1lbnVEYXRhID0gW107XG4gICAgdGhpcy5nZXRJdGVtcygpLmZvckVhY2goKF8sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBpdGVtRGF0YSA9IHtcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICAgIGN1cnJlbnRGb2N1c1N1Ykl0ZW1JbmRleDogMCxcbiAgICAgICAgY3VycmVudEZvY3VzU3ViU3ViSXRlbUluZGV4OiAwLFxuICAgICAgICBtZW51SXRlbTogdGhpcy5tZW51SXRlbXMudG9BcnJheSgpW2luZGV4XVxuICAgICAgfTtcbiAgICAgIHRoaXMubWVudURhdGEucHVzaChpdGVtRGF0YSk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy52aWV3SW5pdCkge1xuICAgICAgdGhpcy5jaGVja1JlcXVpcmVkKCk7XG4gICAgfVxuXG5cbiAgICBjb25zdCBsYXN0Q3VycmVudEZvY3VzSXRlbUluZGV4ID0gdGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXg7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgaWYgKGl0ZW1zKSB7XG4gICAgICB3aGlsZSAoIXRoaXMuaXNJdGVtRm9jdXNhYmxlKHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4ICUgaXRlbXMubGVuZ3RoKSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleCA9ICh0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleCArIGl0ZW1zLmxlbmd0aCArIDEpICUgaXRlbXMubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXggPT09IGxhc3RDdXJyZW50Rm9jdXNJdGVtSW5kZXgpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgLypcbiAgICogRXZlbnRvc1xuICAgKi9cblxuICBoYW5kbGVNZW51Rm9jdXNJbigpOiB2b2lkIHtcbiAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBoYW5kbGVNZW51Rm9jdXNPdXQoZXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubWVudWJhci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgIH1cbiAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaGFuZGxlTWVudUl0ZW1DbGljayhldmVudCwgaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IGlzT3BlbiA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5vcGVuO1xuICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAgIHRoaXMub3Blbk1lbnUoaXRlbUluZGV4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmF0ZU1lbnVJdGVtKGl0ZW1JbmRleCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTWVudUl0ZW1LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICBjYXNlICcgJzpcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIGlmICh0aGlzLmhhc1BvcHVwTWVudShpdGVtSW5kZXgpKSB7XG4gICAgICAgICAgdGhpcy5vcGVuTWVudShpdGVtSW5kZXgpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5mb2N1c0ZpcnN0U3ViSXRlbShpdGVtSW5kZXgpKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICBpZiAodGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZUl0ZW0oaXRlbUluZGV4LCAtMSk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlSXRlbShpdGVtSW5kZXgsICsxKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgICAgICB0aGlzLm9wZW5NZW51KGl0ZW1JbmRleCk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzTGFzdFN1Ykl0ZW0oaXRlbUluZGV4KSk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdIb21lJzpcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgIGlmICh0aGlzLmhhc1BvcHVwTWVudShpdGVtSW5kZXgpKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvY3VzRmlyc3RJdGVtKCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW5kJzpcbiAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXNMYXN0SXRlbSgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICh0aGlzLmlzUHJpbnRhYmxlQ2hhcihldmVudC5rZXkpKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c0l0ZW1CeUZpcnN0Q2hhcihldmVudC5rZXkpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzSXRlbShpdGVtSW5kZXgsIHRydWUpO1xuICB9XG5cbiAgaGFuZGxlUG9wdXBNZW51SXRlbUNsaWNrKGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmF0ZVBvcHVwTWVudUl0ZW0oaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCk7XG4gICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4KTtcbiAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICB9XG5cbiAgaGFuZGxlUG9wdXBNZW51SXRlbUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFN1YkluZGV4ID0gdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1Ykl0ZW1JbmRleDtcbiAgICBjb25zdCBjdXJyZW50U3ViU3ViSW5kZXggPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViU3ViSXRlbUluZGV4O1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICcgJzpcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVBvcHVwTWVudUl0ZW0oaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCk7XG4gICAgICAgIGlmICh0aGlzLm11c3RDbG9zZUFmdGVyU2VsZWN0UG9wdXBJdGVtKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgpKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgICB0aGlzLmZvY3VzSXRlbShpdGVtSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICB0aGlzLmFjdGl2YXRlUG9wdXBNZW51SXRlbShpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICAgICAgICB0aGlzLmZvY3VzSXRlbShpdGVtSW5kZXgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZVN1Ykl0ZW0oaXRlbUluZGV4LCBjdXJyZW50U3ViSW5kZXgsIGN1cnJlbnRTdWJTdWJJbmRleCwgLTEpO1xuICAgICAgICAvLyB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIChjdXJyZW50U3ViSW5kZXggKyBsaXN0TGVuZ3RoIC0gMSkgJSBsaXN0TGVuZ3RoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZVN1Ykl0ZW0oaXRlbUluZGV4LCBjdXJyZW50U3ViSW5kZXgsIGN1cnJlbnRTdWJTdWJJbmRleCwgKzEpO1xuICAgICAgICAvLyB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIChjdXJyZW50U3ViSW5kZXggKyBsaXN0TGVuZ3RoICsgMSkgJSBsaXN0TGVuZ3RoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICAgICAgICB0aGlzLmZvY3VzSXRlbSgoaXRlbUluZGV4ICsgaXRlbXMubGVuZ3RoIC0gMSkgJSBpdGVtcy5sZW5ndGgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICAgICAgICB0aGlzLmZvY3VzSXRlbSgoaXRlbUluZGV4ICsgaXRlbXMubGVuZ3RoICsgMSkgJSBpdGVtcy5sZW5ndGgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgY2FzZSAnUGFnZVVwJzpcbiAgICAgICAgdGhpcy5mb2N1c0ZpcnN0U3ViSXRlbShpdGVtSW5kZXgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICBjYXNlICdQYWdlRG93bic6XG4gICAgICAgIHRoaXMuZm9jdXNMYXN0U3ViSXRlbShpdGVtSW5kZXgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKGl0ZW1JbmRleCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAodGhpcy5pc1ByaW50YWJsZUNoYXIoZXZlbnQua2V5KSkge1xuICAgICAgICAgIHRoaXMuZm9jdXNTdWJJdGVtQnlGaXJzdENoYXIoaXRlbUluZGV4LCBldmVudC5rZXkpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlUG9wdXBNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNTdWJJdGVtKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgpO1xuICB9XG5cbiAgLypcbiAgICogQ29tdW5lc1xuICAgKi9cblxuICBjaGVja1JlcXVpcmVkKCk6IHZvaWQge1xuXG5cbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcblxuICAgIC8vIE5vIHNlIGhhIHB1ZXN0byBsYWJlbCByZXF1aXJlZCBwb3JxdWUgZW4gYWxndW5vcyBlamVtcGxvcyBkZSBkZXN5LWh0bWwgbm8gYXBhcmVjZVxuICB9XG5cblxuICBhY3RpdmF0ZU1lbnVJdGVtKGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgdGhpcy5hY3RpdmVJdGVtQ2hhbmdlLmVtaXQoaXRlbXNbaXRlbUluZGV4XSBhcyBNZW51YmFySXRlbSk7XG4gICAgaWYgKGl0ZW1zW2l0ZW1JbmRleF0gaW5zdGFuY2VvZiBNZW51YmFySXRlbUNvbXBvbmVudCkge1xuICAgICAgKGl0ZW1zW2l0ZW1JbmRleF0gYXMgTWVudWJhckl0ZW1Db21wb25lbnQpLnNlbGVjdGVkLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBhY3RpdmF0ZVBvcHVwTWVudUl0ZW0oaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIGxldCBpdGVtOiBNZW51YmFySXRlbVN1Ykl0ZW18TWVudWJhckl0ZW1TdWJJdGVtU3ViSXRlbSA9IHN1Ykl0ZW1zW3N1Ykl0ZW1JbmRleF07XG4gICAgbGV0IHN1YlN1Ykl0ZW1zID0gW107XG4gICAgaWYgKHN1YlN1Ykl0ZW1JbmRleCAhPT0gbnVsbCAmJiBzdWJTdWJJdGVtSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgc3ViU3ViSXRlbXMgPSB0aGlzLmdldFN1Ykl0ZW1TdWJpdGVtcyhpdGVtKTtcbiAgICAgIGl0ZW0gPSBzdWJTdWJJdGVtc1tzdWJTdWJJdGVtSW5kZXhdO1xuICAgIH1cblxuICAgIGxldCBjaGVja2VkQ2hhbmdlID0gZmFsc2U7XG4gICAgaWYgKGl0ZW0ucm9sZSA9PT0gJ21lbnVpdGVtY2hlY2tib3gnKSB7XG4gICAgICBpdGVtLmNoZWNrZWQgPSAhaXRlbS5jaGVja2VkO1xuICAgICAgY2hlY2tlZENoYW5nZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChpdGVtLnJvbGUgPT09ICdtZW51aXRlbXJhZGlvJykge1xuICAgICAgY2hlY2tlZENoYW5nZSA9ICFpdGVtLmNoZWNrZWQ7XG4gICAgICBzdWJTdWJJdGVtcy5mb3JFYWNoKGkgPT4gaS5jaGVja2VkID0gZmFsc2UpO1xuICAgICAgaXRlbS5jaGVja2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQoaXRlbXMpO1xuICAgIHRoaXMuYWN0aXZlU3ViSXRlbUNoYW5nZS5lbWl0KGl0ZW0gYXMgTWVudWJhckl0ZW0pO1xuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTWVudWJhclN1Yml0ZW1Db21wb25lbnQgfHwgaXRlbSBpbnN0YW5jZW9mIE1lbnViYXJTdWJzdWJpdGVtQ29tcG9uZW50KSB7XG4gICAgICBpdGVtLnNlbGVjdGVkLmVtaXQoKTtcblxuICAgICAgaWYgKGNoZWNrZWRDaGFuZ2UpIHtcbiAgICAgICAgaXRlbS5jaGVja2VkQ2hhbmdlLmVtaXQoaXRlbS5jaGVja2VkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtdXN0Q2xvc2VBZnRlclNlbGVjdFBvcHVwSXRlbShpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGNvbnN0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbXNbaXRlbUluZGV4XSk7XG4gICAgbGV0IGl0ZW06IE1lbnViYXJJdGVtU3ViSXRlbXxNZW51YmFySXRlbVN1Ykl0ZW1TdWJJdGVtID0gc3ViSXRlbXNbc3ViSXRlbUluZGV4XTtcbiAgICBpZiAoc3ViU3ViSXRlbUluZGV4ICE9PSBudWxsICYmIHN1YlN1Ykl0ZW1JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBzdWJTdWJJdGVtcyA9IHRoaXMuZ2V0U3ViSXRlbVN1Yml0ZW1zKGl0ZW0pO1xuICAgICAgaXRlbSA9IHN1YlN1Ykl0ZW1zW3N1YlN1Ykl0ZW1JbmRleF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZW0ucm9sZSAhPT0gJ21lbnVpdGVtY2hlY2tib3gnICYmIGl0ZW0ucm9sZSAhPT0gJ21lbnVpdGVtcmFkaW8nO1xuICB9XG5cbiAgb3Blbk1lbnUoaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3YXNPcGVuZWQgPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ub3BlbjtcbiAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ub3BlbiA9IHRydWU7XG4gICAgaWYgKHdhc09wZW5lZCkge1xuICAgICAgdGhpcy5hY3RpdmF0ZU1lbnVJdGVtKGl0ZW1JbmRleCk7XG4gICAgfVxuICB9XG5cbiAgY2xvc2VNZW51KGl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChpdGVtSW5kZXggIT09IG51bGwgJiYgaXRlbUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5vcGVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWVudURhdGEuZm9yRWFjaChpdGVtID0+IGl0ZW0ub3BlbiA9IGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBoYXNQb3B1cE1lbnUoaXRlbUluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIHJldHVybiBpdGVtc1tpdGVtSW5kZXhdLnN1YiAmJiBzdWJJdGVtcyAmJiBzdWJJdGVtcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1ByaW50YWJsZUNoYXIoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3RyLmxlbmd0aCA9PT0gMSAmJiAhIXN0ci5tYXRjaCgvXFxTLyk7XG4gIH1cblxuICBwcml2YXRlIGdldE1lbnVEYXRhSW5kZXgoaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBtZW51RGF0YUluZGV4ID0gMDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3ViSXRlbUluZGV4OyBpKyspIHtcbiAgICAgIGNvbnN0IHN1Ykl0ZW0gPSBzdWJJdGVtc1tpXTtcbiAgICAgIGNvbnN0IHN1YlN1Ykl0ZW1zID0gdGhpcy5nZXRTdWJJdGVtU3ViaXRlbXMoc3ViSXRlbSk7XG4gICAgICBtZW51RGF0YUluZGV4ICs9IHN1YlN1Ykl0ZW1zICYmIHN1YlN1Ykl0ZW1zLmxlbmd0aCA+IDAgPyBzdWJTdWJJdGVtcy5sZW5ndGggOiAxO1xuICAgIH1cblxuICAgIGlmIChzdWJTdWJJdGVtSW5kZXggIT09IG51bGwgJiYgc3ViU3ViSXRlbUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG1lbnVEYXRhSW5kZXggKz0gc3ViU3ViSXRlbUluZGV4O1xuICAgIH1cblxuICAgIHJldHVybiBtZW51RGF0YUluZGV4O1xuICB9XG5cbiAgLypcbiAgICogQ29tdW5lcyAtIGZvY3VzXG4gICAqL1xuXG4gIGZvY3VzSXRlbShpdGVtSW5kZXg6IG51bWJlciwgaG92ZXI/OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgaGFzRm9jdXMgPSB0aGlzLm1lbnViYXIubmF0aXZlRWxlbWVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbiAgICBjb25zdCBpc09wZW4gPSB0aGlzLm1lbnVEYXRhW3RoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4XS5vcGVuO1xuXG4gICAgaWYgKCFob3ZlciB8fCBoYXNGb2N1cykge1xuICAgICAgdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLm1lbnVJdGVtLmxpbmsubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIHRoaXMuY2xvc2VNZW51KCk7XG4gICAgaWYgKGlzT3BlbiAmJiB0aGlzLmhhc1BvcHVwTWVudShpdGVtSW5kZXgpKSB7XG4gICAgICB0aGlzLm9wZW5NZW51KGl0ZW1JbmRleCk7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXggPSBpdGVtSW5kZXg7XG4gIH1cblxuICBmb2N1c05leHRBdmFpbGFibGVJdGVtKGZyb21JdGVtSW5kZXg6IG51bWJlciwgc3RlcDogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IG5leHRJdGVtID0gZnJvbUl0ZW1JbmRleDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBkbyB7XG4gICAgICBuZXh0SXRlbSA9IChuZXh0SXRlbSArIGl0ZW1zLmxlbmd0aCArIHN0ZXApICUgaXRlbXMubGVuZ3RoO1xuICAgIH0gd2hpbGUgKCF0aGlzLmlzSXRlbUZvY3VzYWJsZShuZXh0SXRlbSkgJiYgbmV4dEl0ZW0gIT09IGZyb21JdGVtSW5kZXgpO1xuXG4gICAgaWYgKG5leHRJdGVtICE9PSBmcm9tSXRlbUluZGV4KSB7XG4gICAgICB0aGlzLmZvY3VzSXRlbShuZXh0SXRlbSk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNGaXJzdEl0ZW0oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNJdGVtRm9jdXNhYmxlKDApKSB7XG4gICAgICB0aGlzLmZvY3VzSXRlbSgwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVJdGVtKDAsICsxKTtcbiAgICB9XG4gIH1cblxuICBmb2N1c0xhc3RJdGVtKCk6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGlmICh0aGlzLmlzSXRlbUZvY3VzYWJsZShpdGVtcy5sZW5ndGggLSAxKSkge1xuICAgICAgdGhpcy5mb2N1c0l0ZW0oaXRlbXMubGVuZ3RoIC0gMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlSXRlbShpdGVtcy5sZW5ndGggLSAxLCAtMSk7XG4gICAgfVxuICB9XG5cbiAgaXNJdGVtRm9jdXNhYmxlKGl0ZW1JbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmdldEl0ZW1zKClbaXRlbUluZGV4XS5kaXNhYmxlZDtcbiAgfVxuXG4gIGZvY3VzSXRlbUJ5Rmlyc3RDaGFyKGNoYXI6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1Db250ZW50czogc3RyaW5nW10gPSB0aGlzLm1lbnVJdGVtcy5tYXAobWVudUl0ZW0gPT4gbWVudUl0ZW0uaXRlbUNvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQpO1xuICAgIGxldCBpbmRleCA9IHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4O1xuICAgIGxldCBmb3VuZEluZGV4ID0gLTE7XG4gICAgZG8ge1xuICAgICAgaW5kZXggPSAoaW5kZXggKyBpdGVtQ29udGVudHMubGVuZ3RoICsgMSkgJSBpdGVtQ29udGVudHMubGVuZ3RoO1xuICAgICAgaWYgKGl0ZW1Db250ZW50c1tpbmRleF0gJiYgaXRlbUNvbnRlbnRzW2luZGV4XS50cmltKCkuc3Vic3RyKDAsIDEpLnRvTG93ZXJDYXNlKCkgPT09IGNoYXIudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICYmIHRoaXMuaXNJdGVtRm9jdXNhYmxlKGluZGV4KSkge1xuICAgICAgICBmb3VuZEluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZm91bmRJbmRleCA9PT0gLTEgJiYgaW5kZXggIT09IHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4KTtcblxuICAgIGlmIChmb3VuZEluZGV4ID49IDApIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKGZvdW5kSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzU3ViSXRlbShpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ubWVudUl0ZW0ucG9wdXBNZW51SXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbWVudURhdGFJbmRleCA9IHRoaXMuZ2V0TWVudURhdGFJbmRleChpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KTtcblxuICAgICAgdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1Ykl0ZW1JbmRleCA9IHN1Ykl0ZW1JbmRleDtcbiAgICAgIHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJTdWJJdGVtSW5kZXggPSBzdWJTdWJJdGVtSW5kZXg7XG4gICAgICBjb25zdCBlbGVtID0gdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLm1lbnVJdGVtLnBvcHVwTWVudUl0ZW1zLnRvQXJyYXkoKVttZW51RGF0YUluZGV4XS5uYXRpdmVFbGVtZW50O1xuICAgICAgaWYgKGVsZW0pIHtcbiAgICAgICAgZWxlbS5mb2N1cygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gc3ViaXRlbSB0byBmb2N1cycpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdObyBzdWJpdGVtcycpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzTmV4dEF2YWlsYWJsZVN1Ykl0ZW0oaXRlbUluZGV4OiBudW1iZXIsIGZyb21JdGVtU3ViSW5kZXg6IG51bWJlciwgZnJvbUl0ZW1TdWJTdWJJbmRleDogbnVtYmVyLCBzdGVwOiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgbmV4dFN1YkluZGV4ID0gZnJvbUl0ZW1TdWJJbmRleDtcbiAgICBsZXQgbmV4dFN1YlN1YkluZGV4ID0gZnJvbUl0ZW1TdWJTdWJJbmRleDtcbiAgICBsZXQgYWxsU3ViSXRlbXNDaGVja2VkO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IG5leHRJbmRleGVzID0gdGhpcy5nZXROZXh0U3ViSXRlbUluZGV4ZXMoaXRlbXMsIGl0ZW1JbmRleCwgbmV4dFN1YkluZGV4LCBuZXh0U3ViU3ViSW5kZXgsIHN0ZXApO1xuICAgICAgbmV4dFN1YkluZGV4ID0gbmV4dEluZGV4ZXMuc3ViSW5kZXg7XG4gICAgICBuZXh0U3ViU3ViSW5kZXggPSBuZXh0SW5kZXhlcy5zdWJTdWJJbmRleDtcbiAgICAgIGFsbFN1Ykl0ZW1zQ2hlY2tlZCA9IChmcm9tSXRlbVN1YkluZGV4ID09PSBuZXh0U3ViSW5kZXggJiYgZnJvbUl0ZW1TdWJTdWJJbmRleCA9PT0gbmV4dFN1YlN1YkluZGV4KTtcbiAgICB9IHdoaWxlICghdGhpcy5pc1N1Ykl0ZW1Gb2N1c2FibGUoaXRlbUluZGV4LCBuZXh0U3ViSW5kZXgsIG5leHRTdWJTdWJJbmRleCkgJiYgIWFsbFN1Ykl0ZW1zQ2hlY2tlZCk7XG5cbiAgICBpZiAoIWFsbFN1Ykl0ZW1zQ2hlY2tlZCkge1xuICAgICAgdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCBuZXh0U3ViSW5kZXgsIG5leHRTdWJTdWJJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNGaXJzdFN1Ykl0ZW0oaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgZmlyc3RTdWJTdWJJdGVtID0gbnVsbDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIGNvbnN0IHN1YlN1Ykl0ZW1zID0gdGhpcy5nZXRTdWJJdGVtU3ViaXRlbXMoc3ViSXRlbXNbMF0pO1xuICAgIGlmIChzdWJTdWJJdGVtcyAmJiBzdWJTdWJJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICBmaXJzdFN1YlN1Ykl0ZW0gPSAwO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzU3ViSXRlbUZvY3VzYWJsZShpdGVtSW5kZXgsIDAsIGZpcnN0U3ViU3ViSXRlbSkpIHtcbiAgICAgIHRoaXMuZm9jdXNTdWJJdGVtKGl0ZW1JbmRleCwgMCwgZmlyc3RTdWJTdWJJdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVTdWJJdGVtKGl0ZW1JbmRleCwgMCwgZmlyc3RTdWJTdWJJdGVtLCArMSk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNMYXN0U3ViSXRlbShpdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGNvbnN0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbXNbaXRlbUluZGV4XSk7XG4gICAgY29uc3QgbGFzdEl0ZW1JbmRleCA9IHN1Ykl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgY29uc3QgbGFzdEl0ZW0gPSBzdWJJdGVtc1tsYXN0SXRlbUluZGV4XTtcbiAgICBjb25zdCBzdWJTdWJJdGVtcyA9IHRoaXMuZ2V0U3ViSXRlbVN1Yml0ZW1zKGxhc3RJdGVtKTtcbiAgICBsZXQgbGFzdFN1YlN1Ykl0ZW0gPSBudWxsO1xuICAgIGlmIChzdWJTdWJJdGVtcyAmJiBzdWJTdWJJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICBsYXN0U3ViU3ViSXRlbSA9IHN1YlN1Ykl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTdWJJdGVtRm9jdXNhYmxlKGl0ZW1JbmRleCwgbGFzdEl0ZW1JbmRleCwgbGFzdFN1YlN1Ykl0ZW0pKSB7XG4gICAgICB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIGxhc3RJdGVtSW5kZXgsIGxhc3RTdWJTdWJJdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVTdWJJdGVtKGl0ZW1JbmRleCwgbGFzdEl0ZW1JbmRleCwgbGFzdFN1YlN1Ykl0ZW0sIC0xKTtcbiAgICB9XG4gIH1cblxuICBpc1N1Ykl0ZW1Gb2N1c2FibGUoaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIGxldCBpdGVtOiBNZW51YmFySXRlbVN1Ykl0ZW18TWVudWJhckl0ZW1TdWJJdGVtU3ViSXRlbSA9IHN1Ykl0ZW1zW3N1Ykl0ZW1JbmRleF07XG4gICAgaWYgKHN1YlN1Ykl0ZW1JbmRleCAhPT0gbnVsbCAmJiBzdWJTdWJJdGVtSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgc3ViU3ViSXRlbXMgPSB0aGlzLmdldFN1Ykl0ZW1TdWJpdGVtcyhpdGVtKTtcbiAgICAgIGl0ZW0gPSBzdWJTdWJJdGVtc1tzdWJTdWJJdGVtSW5kZXhdO1xuICAgIH1cblxuICAgIGxldCBpc0ZvY3VzYWJsZSA9IGZhbHNlO1xuICAgIGlmIChpdGVtLnJvbGUgIT09ICdzZXBhcmF0b3InICYmIGl0ZW0ucm9sZSAhPT0gJ25vbmUnKSB7XG4gICAgICBpc0ZvY3VzYWJsZSA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzRm9jdXNhYmxlO1xuICB9XG5cbiAgZm9jdXNTdWJJdGVtQnlGaXJzdENoYXIoaXRlbUluZGV4OiBudW1iZXIsIGNoYXI6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1Db250ZW50czogc3RyaW5nW10gPSB0aGlzLm1lbnVJdGVtcy50b0FycmF5KClbaXRlbUluZGV4XS5wb3B1cE1lbnVJdGVtcy5tYXAobWVudUl0ZW0gPT4gbWVudUl0ZW0ubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudCk7XG4gICAgbGV0IHN1Ykl0ZW1JbmRleCA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJJdGVtSW5kZXg7XG4gICAgbGV0IHN1YlN1Ykl0ZW1JbmRleCA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJTdWJJdGVtSW5kZXg7XG4gICAgbGV0IGZvdW5kU3ViSW5kZXggPSAtMTtcbiAgICBsZXQgZm91bmRTdWJTdWJJbmRleCA9IG51bGw7XG4gICAgbGV0IGFsbFN1Ykl0ZW1zQ2hlY2tlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IG5leHRJbmRleGVzID0gdGhpcy5nZXROZXh0U3ViSXRlbUluZGV4ZXMoaXRlbXMsIGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgsICsxKTtcbiAgICAgIHN1Ykl0ZW1JbmRleCA9IG5leHRJbmRleGVzLnN1YkluZGV4O1xuICAgICAgc3ViU3ViSXRlbUluZGV4ID0gbmV4dEluZGV4ZXMuc3ViU3ViSW5kZXg7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0TWVudURhdGFJbmRleChpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KTtcbiAgICAgIGlmIChpdGVtQ29udGVudHNbaW5kZXhdICYmIGl0ZW1Db250ZW50c1tpbmRleF0udHJpbSgpLnN1YnN0cigwLCAxKS50b0xvd2VyQ2FzZSgpID09PSBjaGFyLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAmJiB0aGlzLmlzU3ViSXRlbUZvY3VzYWJsZShpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KSkge1xuICAgICAgICBmb3VuZFN1YkluZGV4ID0gc3ViSXRlbUluZGV4O1xuICAgICAgICBmb3VuZFN1YlN1YkluZGV4ID0gc3ViU3ViSXRlbUluZGV4O1xuICAgICAgfVxuICAgICAgYWxsU3ViSXRlbXNDaGVja2VkID0gKHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJJdGVtSW5kZXggPT09IHN1Ykl0ZW1JbmRleFxuICAgICAgICAmJiB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViU3ViSXRlbUluZGV4ID09PSBzdWJTdWJJdGVtSW5kZXgpO1xuICAgIH0gd2hpbGUgKGZvdW5kU3ViSW5kZXggPT09IC0xICYmICFhbGxTdWJJdGVtc0NoZWNrZWQpO1xuXG4gICAgaWYgKGZvdW5kU3ViSW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCBmb3VuZFN1YkluZGV4LCBmb3VuZFN1YlN1YkluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKlxuICAgKiBNZXRvZG9zIHBhcmEgZmFjaWxpdGFyIGNvbnRlbmlkb1xuICAgKi9cblxuICBnZXRJdGVtcygpOiBNZW51YmFySXRlbVtdfE1lbnViYXJJdGVtQ29tcG9uZW50W10ge1xuICAgIGxldCBpdGVtcztcbiAgICBpZiAodGhpcy5pdGVtQ29tcG9uZW50TGlzdCAmJiB0aGlzLml0ZW1Db21wb25lbnRMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGl0ZW1zID0gdGhpcy5pdGVtQ29tcG9uZW50TGlzdC50b0FycmF5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgZ2V0SXRlbVN1Yml0ZW1zKGl0ZW06IE1lbnViYXJJdGVtfE1lbnViYXJJdGVtQ29tcG9uZW50KTogTWVudWJhckl0ZW1TdWJJdGVtW118TWVudWJhclN1Yml0ZW1Db21wb25lbnRbXSB7XG4gICAgbGV0IHN1Ykl0ZW1zID0gW107XG4gICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBNZW51YmFySXRlbUNvbXBvbmVudCl7XG4gICAgICBzdWJJdGVtcyA9IGl0ZW0uZ2V0U3ViSXRlbXMoKTtcbiAgICB9XG5cbiAgICBpZiAoIXN1Ykl0ZW1zIHx8IHN1Ykl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgc3ViSXRlbXMgPSBpdGVtLnN1YiA/IGl0ZW0uc3ViLml0ZW1zIDogW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1Ykl0ZW1zO1xuICB9XG5cbiAgZ2V0U3ViSXRlbVN1Yml0ZW1zKGl0ZW06IE1lbnViYXJJdGVtU3ViSXRlbXxNZW51YmFyU3ViaXRlbUNvbXBvbmVudCk6IE1lbnViYXJJdGVtU3ViSXRlbVN1Ykl0ZW1bXXxNZW51YmFyU3Vic3ViaXRlbUNvbXBvbmVudFtdIHtcbiAgICBsZXQgc3ViSXRlbXMgPSBbXTtcblxuICAgIGlmIChpdGVtLnJvbGUgPT09ICdncm91cCcpIHtcbiAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTWVudWJhclN1Yml0ZW1Db21wb25lbnQpIHtcbiAgICAgICAgc3ViSXRlbXMgPSBpdGVtLmdldFN1Ykl0ZW1zKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3ViSXRlbXMgfHwgc3ViSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHN1Ykl0ZW1zID0gaXRlbS5pdGVtcyA/IGl0ZW0uaXRlbXMgOiBbXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3ViSXRlbXM7XG4gIH1cblxuICBnZXROZXh0U3ViSXRlbUluZGV4ZXMoaXRlbXMsIGl0ZW1JbmRleCwgbmV4dFN1YkluZGV4LCBuZXh0U3ViU3ViSW5kZXgsIHN0ZXApOiB7IHN1YkluZGV4OiBudW1iZXIsIHN1YlN1YkluZGV4PzogbnVtYmVyfSB7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICBjb25zdCBzdWJTdWJJdGVtcyA9IHRoaXMuZ2V0U3ViSXRlbVN1Yml0ZW1zKHN1Ykl0ZW1zW25leHRTdWJJbmRleF0pO1xuXG4gICAgbGV0IGNoZWNrTmV4dFN1Ykl0ZW0gPSB0cnVlO1xuICAgIGlmIChzdWJTdWJJdGVtcyAmJiBzdWJTdWJJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAobmV4dFN1YlN1YkluZGV4ICsgc3RlcCA+PSAwICYmIG5leHRTdWJTdWJJbmRleCArIHN0ZXAgPCBzdWJTdWJJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgbmV4dFN1YlN1YkluZGV4ICs9IHN0ZXA7XG4gICAgICAgIGNoZWNrTmV4dFN1Ykl0ZW0gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hlY2tOZXh0U3ViSXRlbSkge1xuICAgICAgbmV4dFN1YkluZGV4ID0gKG5leHRTdWJJbmRleCArIHN0ZXAgKyBzdWJJdGVtcy5sZW5ndGgpICUgc3ViSXRlbXMubGVuZ3RoO1xuICAgICAgY29uc3QgbmV4dFN1Ykl0ZW1JdGVtcyA9IHRoaXMuZ2V0U3ViSXRlbVN1Yml0ZW1zKHN1Ykl0ZW1zW25leHRTdWJJbmRleF0pO1xuICAgICAgaWYgKG5leHRTdWJJdGVtSXRlbXMgJiYgbmV4dFN1Ykl0ZW1JdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG5leHRTdWJTdWJJbmRleCA9ICgoc3RlcCA+IDAgPyAtMSA6IDApICsgc3RlcCArIG5leHRTdWJJdGVtSXRlbXMubGVuZ3RoKSAlIG5leHRTdWJJdGVtSXRlbXMubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dFN1YlN1YkluZGV4ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge3N1YkluZGV4OiBuZXh0U3ViSW5kZXgsIHN1YlN1YkluZGV4OiBuZXh0U3ViU3ViSW5kZXh9O1xuICB9XG5cbiAgZ2V0SWRQcmVmaXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pZFByZWZpeCA/IHRoaXMuaWRQcmVmaXggOiB0aGlzLmlkICsgJ21lbnViYXItaXRlbSc7XG4gIH1cblxuICBnZXRMYWJlbFJlZigpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbENvbXBvbmVudCA/IHRoaXMubGFiZWxDb21wb25lbnQuZ2V0Q29udGVudCgpIDogdGhpcy5sYWJlbFJlZjtcbiAgfVxuXG4gIGdldExhYmVsQ29udGVudCgpOiBzdHJpbmcge1xuICAgIGxldCBjb250ZW50OiBzdHJpbmc7XG4gICAgaWYgKHRoaXMubGFiZWxEYXRhKSB7XG4gICAgICBjb250ZW50ID0gdGhpcy5sYWJlbERhdGEuaHRtbCA/IHRoaXMubGFiZWxEYXRhLmh0bWwgOiBgPHA+JHsgU3RyaW5nVXRpbHMuZXNjYXBlSHRtbCh0aGlzLmxhYmVsRGF0YS50ZXh0KSB9PC9wPmA7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxhYmVsVGV4dCkge1xuICAgICAgY29udGVudCA9IGA8cD4keyBTdHJpbmdVdGlscy5lc2NhcGVIdG1sKHRoaXMubGFiZWxUZXh0KSB9PC9wPmA7XG4gICAgfVxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgZ2V0SXRlbUlkKGl0ZW0sIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGxldCBpZDogc3RyaW5nO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICBpZiAoaXRlbS5pZCkge1xuICAgICAgICBpZCA9IGl0ZW0uaWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZCA9IGluZGV4ID09PSAwID8gdGhpcy5nZXRJZFByZWZpeCgpIDogYCR7dGhpcy5nZXRJZFByZWZpeCgpfS0ke2luZGV4fWA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIGdldFBvcHVwU3R5bGUoaXRlbUluZGV4OiBudW1iZXIpOiBvYmplY3Qge1xuICAgIGxldCBzdHlsZSA9IHt9O1xuICAgIGlmICh0aGlzLm1lbnVEYXRhICYmIGl0ZW1JbmRleCA8IHRoaXMubWVudURhdGEubGVuZ3RoKSB7XG4gICAgICBjb25zdCBtZW51SXRlbSA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5tZW51SXRlbTtcbiAgICAgIGNvbnN0IHJlY3QgPSBtZW51SXRlbS5saW5rLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBpZiAodGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLm9wZW4pIHtcbiAgICAgICAgc3R5bGUgPSB7XG4gICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgdG9wOiAocmVjdC5oZWlnaHQgLSAxKSArICdweCcsXG4gICAgICAgICAgbGVmdDogJzBweCcsXG4gICAgICAgICAgekluZGV4OiAxMDAsXG4gICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJ1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGUgPSB7XG4gICAgICAgICAgekluZGV4OiAwLFxuICAgICAgICAgIGRpc3BsYXk6ICdub25lJ1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxuXG4gIGdldFN1Ykl0ZW1JZChpdGVtLCBpbmRleDogbnVtYmVyLCBwYXJlbnRJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgaWQ6IHN0cmluZztcbiAgICBpZiAoaXRlbSkge1xuICAgICAgaWYgKGl0ZW0uaWQpIHtcbiAgICAgICAgaWQgPSBpdGVtLmlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWQgPSBpbmRleCA9PT0gMCA/IGBzdWItJHtwYXJlbnRJZH1gIDogYHN1Yi0ke3BhcmVudElkfS0ke2luZGV4fWA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZDtcbiAgfVxuXG4gIGdldFN1YlN1Ykl0ZW1BcmlhQ2hlY2tlZChzdWJzdWJpdGVtKTogc3RyaW5nIHtcbiAgICBsZXQgYXJpYUNoZWNrZWQgPSBudWxsO1xuICAgIGlmIChzdWJzdWJpdGVtLnJvbGUgPT09ICdtZW51aXRlbWNoZWNrYm94JyB8fCBzdWJzdWJpdGVtLnJvbGUgPT09ICdtZW51aXRlbXJhZGlvJykge1xuICAgICAgYXJpYUNoZWNrZWQgPSAhIXN1YnN1Yml0ZW0uY2hlY2tlZDtcbiAgICB9XG4gICAgcmV0dXJuIGFyaWFDaGVja2VkO1xuICB9XG59XG4iLCIgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRMYWJlbFJlZigpXCI+XG4gICAgPGRpdiBbaWRdPVwiaWQgKyAnLWxhYmVsJ1wiIFtjbGFzc109XCJbJ21iLXNtJywgbGFiZWxDb21wb25lbnQgPyBsYWJlbENvbXBvbmVudC5jbGFzc2VzIDogKGxhYmVsRGF0YSA/IGxhYmVsRGF0YS5jbGFzc2VzIDogbnVsbCldIHwgbWFrZUh0bWxMaXN0XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2V0TGFiZWxSZWYoKVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFnZXRMYWJlbFJlZigpICYmIChsYWJlbERhdGEgfHwgbGFiZWxUZXh0KVwiPlxuICAgIDxkaXYgW2lkXT1cImlkICsgJy1sYWJlbCdcIiBbY2xhc3NdPVwiWydtYi1zbScsIGxhYmVsRGF0YSA/IGxhYmVsRGF0YS5jbGFzc2VzIDogbnVsbF0gfCBtYWtlSHRtbExpc3RcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGh0bWw6IGdldExhYmVsQ29udGVudCgpIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDx1bCAjbWVudWJhciBbaWRdPVwiaWQgKyAnLW1lbnViYXInXCIgY2xhc3M9XCJsZzpmbGV4IGxnOmZsZXgtd3JhcFwiIHJvbGU9XCJtZW51YmFyXCJcbiAgICAgIChmb2N1c2luKT1cImhhbmRsZU1lbnVGb2N1c0luKClcIlxuICAgICAgKGZvY3Vzb3V0KT1cImhhbmRsZU1lbnVGb2N1c091dCgkZXZlbnQpXCJcbiAgICAgIFtuZ0NsYXNzXT1cInsgJ2ZvY3VzJzogaXNGb2N1c2VkIH1cIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwgPyBhcmlhTGFiZWwgOiBudWxsXCJcbiAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZ2V0TGFiZWxSZWYoKSB8fCBsYWJlbERhdGEgfHwgbGFiZWxUZXh0ID8gaWQgKyAnLWxhYmVsJyA6IG51bGxcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEl0ZW1zKCk7IGluZGV4IGFzIGl0ZW1JbmRleFwiPlxuICAgICAgPGxpIGNsYXNzPVwicmVsYXRpdmVcIiByb2xlPVwibm9uZVwiIGRlc3lNZW51YmFyaXRlbSAoY29udGVudENoYW5nZWQpPVwiY2hlY2tDaGFuZ2VzKClcIj5cbiAgICAgICAgPGEgKm5nSWY9XCJpdGVtLnN1YlwiICNsaW5rXG4gICAgICAgICAgIHJvbGU9XCJtZW51aXRlbVwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU1lbnVJdGVtQ2xpY2soJGV2ZW50LCBpdGVtSW5kZXgpXCJcbiAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChkZXN5QXR0cmlidXRlQ2hhbmdlKT1cImNoZWNrQ2hhbmdlcygpXCIgW2F0dHJpYnV0ZXNUb0NoZWNrXT1cIidkaXNhYmxlZCdcIlxuICAgICAgICAgICBbaWRdPVwiZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleClcIlxuICAgICAgICAgICBbY2xhc3NdPVwiWydjLW1lbnViYXJfX2J1dHRvbicsIGl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICAgICBbbmdDbGFzc109XCJ7J2MtbWVudWJhcl9fYnV0dG9uLS1kaXNhYmxlZCc6IGl0ZW0uZGlzYWJsZWQsICdjLW1lbnViYXJfX2J1dHRvbi0tcHJpbWFyeSc6IGl0ZW0uYWN0aXZlfVwiICAgICAgICAgICBcbiAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkID8gaXRlbS5kaXNhYmxlZCA6IChpdGVtLmFyaWFEaXNhYmxlZCA/IGl0ZW0uYXJpYURpc2FibGVkIDogbnVsbClcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cIml0ZW0uYXJpYURlc2NyaWJlZEJ5ID8gaXRlbS5hcmlhRGVzY3JpYmVkQnkgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIml0ZW0uYXJpYUxhYmVsbGVkQnkgPyBpdGVtLmFyaWFMYWJlbGxlZEJ5IDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cIml0ZW0uYXJpYUhpZGRlbiA/IGl0ZW0uYXJpYUhpZGRlbiA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIml0ZW0uYXJpYUNvbnRyb2xzID8gaXRlbS5hcmlhQ29udHJvbHMgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cIml0ZW0uYXJpYUN1cnJlbnQgPyBpdGVtLmFyaWFDdXJyZW50IDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbGl2ZV09XCJpdGVtLmFyaWFMaXZlID8gaXRlbS5hcmlhTGl2ZSA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWVycm9ybWVzc2FnZV09XCJpdGVtLmFyaWFFcnJvck1lc3NhZ2UgPyBpdGVtLmFyaWFFcnJvck1lc3NhZ2UgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1tb2RhbF09XCJpdGVtLmFyaWFNb2RhbCA/IGl0ZW0uYXJpYU1vZGFsIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIml0ZW0uZGlzYWJsZWQgPyAtMSA6IChpdGVtSW5kZXggPT09IGN1cnJlbnRGb2N1c0l0ZW1JbmRleCA/IDAgOiAtMSlcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlubGluZS1mbGV4IHNlbGYtY2VudGVyIG1heC13LXhzIGFsaWduLW1pZGRsZSB0cnVuY2F0ZVwiICNpdGVtQ29udGVudFdyYXBwZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IGl0ZW0sIGh0bWw6IGl0ZW0uaHRtbCwgdGV4dDogaXRlbS50ZXh0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3ZnIGNsYXNzPVwiaW5saW5lLWJsb2NrIC1tci0yICBhbGlnbi1taWRkbGUgLW15LXB4XCIgdmlld0JveD1cIjAgMCA5NiA5NlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBmb2N1c2FibGU9XCJmYWxzZVwiIHdpZHRoPVwiMS41ZW1cIiBoZWlnaHQ9XCIxLjVlbVwiPjxnPjxwYXRoIGQ9XCJNNDYuNzEgNTguMDM3YTEuODIzIDEuODIzIDAgMDAyLjU4MSAwTDYyLjA0OCA0NS4yOGExLjgyMyAxLjgyMyAwIDAwLTEuMjktMy4xMTNIMzUuMjQzYTEuODIzIDEuODIzIDAgMDAtMS4yOTEgMy4xMTN6XCIvPjwvZz48L3N2Zz5cbiAgICAgICAgPC9hPlxuICAgICAgICA8YSAqbmdJZj1cIml0ZW0ucm91dGVyTGluayAmJiAhaXRlbS5zdWJcIiAjbGluayAjaXRlbUNvbnRlbnRXcmFwcGVyXG4gICAgICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgICAgICAgIChjbGljayk9XCJoYW5kbGVNZW51SXRlbUNsaWNrKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZU1lbnVJdGVtS2V5ZG93bigkZXZlbnQsIGl0ZW1JbmRleClcIlxuICAgICAgICAgICAobW91c2VvdmVyKT1cImhhbmRsZU1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleClcIlxuICAgICAgICAgICAoZGVzeUF0dHJpYnV0ZUNoYW5nZSk9XCJjaGVja0NoYW5nZXMoKVwiIFthdHRyaWJ1dGVzVG9DaGVja109XCInZGlzYWJsZWQnXCJcbiAgICAgICAgICAgW2lkXT1cImdldEl0ZW1JZChpdGVtLCBpdGVtSW5kZXgpXCJcbiAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS5yb3V0ZXJMaW5rXCJcbiAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwiaXRlbS5yb3V0ZXJMaW5rQWN0aXZlQ2xhc3NlcyA/IGl0ZW0ucm91dGVyTGlua0FjdGl2ZUNsYXNzZXMgOiBbXVwiXG4gICAgICAgICAgIFtmcmFnbWVudF09XCJpdGVtLmZyYWdtZW50XCJcbiAgICAgICAgICAgW2NsYXNzXT1cIlsnYy1tZW51YmFyX19idXR0b24nLCBpdGVtLmNsYXNzZXNdIHwgbWFrZUh0bWxMaXN0XCJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwieydjLW1lbnViYXJfX2J1dHRvbi0tZGlzYWJsZWQnOiBpdGVtLmRpc2FibGVkLCAnYy1tZW51YmFyX19idXR0b24tLXByaW1hcnknOiBpdGVtLmFjdGl2ZX1cIlxuICAgICAgICAgICBbYXR0ci50aXRsZV09XCJpdGVtLnRpdGxlID8gaXRlbS50aXRsZSA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkID8gaXRlbS5kaXNhYmxlZCA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgPyBpdGVtLmRpc2FibGVkIDogKGl0ZW0uYXJpYURpc2FibGVkID8gaXRlbS5hcmlhRGlzYWJsZWQgOiBudWxsKVwiXG4gICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIml0ZW0uZGlzYWJsZWQgPyAtMSA6IChpdGVtSW5kZXggPT09IGN1cnJlbnRGb2N1c0l0ZW1JbmRleCA/IDAgOiAtMSlcIlxuICAgICAgICAgICBbYXR0ci50YXJnZXRdPVwiaXRlbS50YXJnZXQgPyBpdGVtLnRhcmdldCA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cIml0ZW0uYXJpYURlc2NyaWJlZEJ5ID8gaXRlbS5hcmlhRGVzY3JpYmVkQnkgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZEJ5XT1cIml0ZW0uYXJpYUxhYmVsbGVkQnkgPyBpdGVtLmFyaWFMYWJlbGxlZEJ5IDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cIml0ZW0uYXJpYUhpZGRlbiA/IGl0ZW0uYXJpYUhpZGRlbiA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIml0ZW0uYXJpYUNvbnRyb2xzID8gaXRlbS5hcmlhQ29udHJvbHMgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cIml0ZW0uYXJpYUN1cnJlbnQgPyBpdGVtLmFyaWFDdXJyZW50IDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbGl2ZV09XCJpdGVtLmFyaWFMaXZlID8gaXRlbS5hcmlhTGl2ZSA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIml0ZW0uYXJpYUV4cGFuZGVkID8gaXRlbS5hcmlhRXhwYW5kZWQgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1lcnJvcm1lc3NhZ2VdPVwiaXRlbS5hcmlhRXJyb3JNZXNzYWdlID8gaXRlbS5hcmlhRXJyb3JNZXNzYWdlIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiaXRlbS5hcmlhSGFzUG9wdXAgPyBpdGVtLmFyaWFIYXNQb3B1cCA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLW1vZGFsXT1cIml0ZW0uYXJpYU1vZGFsID8gaXRlbS5hcmlhTW9kYWwgOiBudWxsXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBpdGVtLCBodG1sOiBpdGVtLmh0bWwsIHRleHQ6IGl0ZW0udGV4dH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9hPlxuICAgICAgICA8YSAqbmdJZj1cIiFpdGVtLnJvdXRlckxpbmsgJiYgaXRlbS5ocmVmICYmICFpdGVtLnN1YlwiICNsaW5rICNpdGVtQ29udGVudFdyYXBwZXJcbiAgICAgICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcbiAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU1lbnVJdGVtQ2xpY2soJGV2ZW50LCBpdGVtSW5kZXgpXCJcbiAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4KVwiXG4gICAgICAgICAgIChkZXN5QXR0cmlidXRlQ2hhbmdlKT1cImNoZWNrQ2hhbmdlcygpXCIgW2F0dHJpYnV0ZXNUb0NoZWNrXT1cIidkaXNhYmxlZCdcIlxuICAgICAgICAgICBbaWRdPVwiZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleClcIlxuICAgICAgICAgICBbaHJlZl09XCJpdGVtLmhyZWYgfCBleHRlcm5hbEhyZWZcIlxuICAgICAgICAgICBbY2xhc3NdPVwiWydjLW1lbnViYXJfX2J1dHRvbicsIGl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICAgICBbbmdDbGFzc109XCJ7J2MtbWVudWJhcl9fYnV0dG9uLS1kaXNhYmxlZCc6IGl0ZW0uZGlzYWJsZWQsICdjLW1lbnViYXJfX2J1dHRvbi0tcHJpbWFyeSc6IGl0ZW0uYWN0aXZlfVwiXG4gICAgICAgICAgIFthdHRyLnRpdGxlXT1cIml0ZW0udGl0bGUgPyBpdGVtLnRpdGxlIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgPyBpdGVtLmRpc2FibGVkIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZCA/IGl0ZW0uZGlzYWJsZWQgOiAoaXRlbS5hcmlhRGlzYWJsZWQgPyBpdGVtLmFyaWFEaXNhYmxlZCA6IG51bGwpXCJcbiAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaXRlbS5kaXNhYmxlZCA/IC0xIDogKGl0ZW1JbmRleCA9PT0gY3VycmVudEZvY3VzSXRlbUluZGV4ID8gMCA6IC0xKVwiXG4gICAgICAgICAgIFthdHRyLnRhcmdldF09XCJpdGVtLnRhcmdldCA/IGl0ZW0udGFyZ2V0IDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaXRlbS5hcmlhRGVzY3JpYmVkQnkgPyBpdGVtLmFyaWFEZXNjcmliZWRCeSA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkQnldPVwiaXRlbS5hcmlhTGFiZWxsZWRCeSA/IGl0ZW0uYXJpYUxhYmVsbGVkQnkgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwiaXRlbS5hcmlhSGlkZGVuID8gaXRlbS5hcmlhSGlkZGVuIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaXRlbS5hcmlhQ29udHJvbHMgPyBpdGVtLmFyaWFDb250cm9scyA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiaXRlbS5hcmlhQ3VycmVudCA/IGl0ZW0uYXJpYUN1cnJlbnQgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1saXZlXT1cIml0ZW0uYXJpYUxpdmUgPyBpdGVtLmFyaWFMaXZlIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXRlbS5hcmlhRXhwYW5kZWQgPyBpdGVtLmFyaWFFeHBhbmRlZCA6IG51bGxcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWVycm9ybWVzc2FnZV09XCJpdGVtLmFyaWFFcnJvck1lc3NhZ2UgPyBpdGVtLmFyaWFFcnJvck1lc3NhZ2UgOiBudWxsXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJpdGVtLmFyaWFIYXNQb3B1cCA/IGl0ZW0uYXJpYUhhc1BvcHVwIDogbnVsbFwiXG4gICAgICAgICAgIFthdHRyLmFyaWEtbW9kYWxdPVwiaXRlbS5hcmlhTW9kYWwgPyBpdGVtLmFyaWFNb2RhbCA6IG51bGxcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IGl0ZW0sIGh0bWw6IGl0ZW0uaHRtbCwgdGV4dDogaXRlbS50ZXh0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2E+XG5cbiAgICAgICAgPHVsICpuZ0lmPVwiaXRlbS5zdWIgJiYgZ2V0SXRlbVN1Yml0ZW1zKGl0ZW0pXCIgI3BvcHVwTWVudSByb2xlPVwibWVudVwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0UG9wdXBTdHlsZShpdGVtSW5kZXgpXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJbJ2MtbWVudWJhcl9fdG9vbHRpcCB3LW1heCBtYXgtdy02NCBoaWRkZW4gYm9yZGVyIGJvcmRlci1uZXV0cmFsLWJhc2Ugc2hhZG93LW1kIGJnLXdoaXRlIHRleHQtc20nLCBpdGVtLnN1Yi5jbGFzc2VzXSB8IG1ha2VIdG1sTGlzdFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIml0ZW0uYXJpYUxhYmVsID8gaXRlbS5hcmlhTGFiZWwgOiAoaXRlbS5zdWIuYXJpYUxhYmVsID8gaXRlbS5zdWIuYXJpYUxhYmVsIDogbnVsbClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJpdGVtLnN1Yi5hcmlhRGVzY3JpYmVkQnkgPyBpdGVtLnN1Yi5hcmlhRGVzY3JpYmVkQnkgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpdGVtLnN1Yi5hcmlhTGFiZWxsZWRCeSA/IGl0ZW0uc3ViLmFyaWFMYWJlbGxlZEJ5IDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCJpdGVtLnN1Yi5hcmlhSGlkZGVuID8gaXRlbS5zdWIuYXJpYUhpZGRlbiA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpdGVtLnN1Yi5hcmlhRGlzYWJsZWQgPyBpdGVtLnN1Yi5hcmlhRGlzYWJsZWQgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaXRlbS5zdWIuYXJpYUNvbnRyb2xzID8gaXRlbS5zdWIuYXJpYUNvbnRyb2xzIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiaXRlbS5zdWIuYXJpYUN1cnJlbnQgPyBpdGVtLnN1Yi5hcmlhQ3VycmVudCA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1saXZlXT1cIml0ZW0uc3ViLmFyaWFMaXZlID8gaXRlbS5zdWIuYXJpYUxpdmUgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiISEobWVudURhdGEgJiYgbWVudURhdGFbaXRlbUluZGV4XS5vcGVuKVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWVycm9ybWVzc2FnZV09XCJpdGVtLnN1Yi5hcmlhRXJyb3JNZXNzYWdlID8gaXRlbS5zdWIuYXJpYUVycm9yTWVzc2FnZSA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJpdGVtLnN1Yi5hcmlhSGFzUG9wdXAgPyBpdGVtLnN1Yi5hcmlhSGFzUG9wdXAgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbW9kYWxdPVwiaXRlbS5zdWIuYXJpYU1vZGFsID8gaXRlbS5zdWIuYXJpYU1vZGFsIDogbnVsbFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN1Ykl0ZW0gb2YgZ2V0SXRlbVN1Yml0ZW1zKGl0ZW0pOyBpbmRleCBhcyBzdWJJdGVtSW5kZXhcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInN1Ykl0ZW0ucm9sZVwiPlxuICAgICAgICAgICAgICA8bGkgI3BvcHVwTWVudUl0ZW0gKm5nU3dpdGNoQ2FzZT1cIidub25lJ1wiIHJvbGU9XCJub25lXCIgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0U3ViSXRlbUlkKHN1Ykl0ZW0sIHN1Ykl0ZW1JbmRleCwgZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleCkpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVQb3B1cE1lbnVJdGVtQ2xpY2soaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlUG9wdXBNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlUG9wdXBNZW51SXRlbUtleWRvd24oJGV2ZW50LCBpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IHN1Ykl0ZW0sIGh0bWw6IHN1Ykl0ZW0uaHRtbCwgdGV4dDogc3ViSXRlbS50ZXh0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8bGkgKm5nU3dpdGNoQ2FzZT1cIidncm91cCdcIiByb2xlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgIDx1bCByb2xlPVwiZ3JvdXBcIiBbaWRdPVwiZ2V0U3ViSXRlbUlkKHN1Ykl0ZW0sIHN1Ykl0ZW1JbmRleCwgZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleCkpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzdWJJdGVtLmFyaWFMYWJlbCA/IHN1Ykl0ZW0uYXJpYUxhYmVsIDogbnVsbFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3Vic3ViaXRlbSBvZiBnZXRTdWJJdGVtU3ViaXRlbXMoc3ViSXRlbSk7IGluZGV4IGFzIHN1YnN1YkluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdWJzdWJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxpICNwb3B1cE1lbnVJdGVtIFthdHRyLnJvbGVdPVwic3Vic3ViaXRlbS5yb2xlID8gc3Vic3ViaXRlbS5yb2xlIDogbnVsbFwiICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFN1Ykl0ZW1JZChzdWJzdWJpdGVtLCBzdWJzdWJJbmRleCwgZ2V0U3ViSXRlbUlkKHN1Ykl0ZW0sIHN1Ykl0ZW1JbmRleCwgZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleCkpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVQb3B1cE1lbnVJdGVtQ2xpY2soaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YnN1YkluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlUG9wdXBNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3Vic3ViSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlUG9wdXBNZW51SXRlbUtleWRvd24oJGV2ZW50LCBpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3Vic3ViSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cImdldFN1YlN1Ykl0ZW1BcmlhQ2hlY2tlZChzdWJzdWJpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcHItYmFzZSBwbC1sZyBweS1zbSBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1wcmltYXJ5LWJhc2UgaG92ZXI6dGV4dC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBzdWJzdWJpdGVtLCBodG1sOiBzdWJzdWJpdGVtLmh0bWwsIHRleHQ6IHN1YnN1Yml0ZW0udGV4dH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDxsaSAjcG9wdXBNZW51SXRlbSAqbmdTd2l0Y2hDYXNlPVwiJ21lbnVpdGVtJ1wiIHJvbGU9XCJtZW51aXRlbVwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1DbGljayhpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgKG1vdXNlb3Zlcik9XCJoYW5kbGVQb3B1cE1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVQb3B1cE1lbnVJdGVtS2V5ZG93bigkZXZlbnQsIGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0U3ViSXRlbUlkKHN1Ykl0ZW0sIHN1Ykl0ZW1JbmRleCwgZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleCkpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcHItYmFzZSBwbC1sZyBweS1zbSBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1wcmltYXJ5LWJhc2UgaG92ZXI6dGV4dC13aGl0ZSBmb2N1czpiZy1wcmltYXJ5LWJhc2UgZm9jdXM6dGV4dC13aGl0ZSBmb2N1czpvdXRsaW5lLW5vbmVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IHN1Ykl0ZW0sIGh0bWw6IHN1Ykl0ZW0uaHRtbCwgdGV4dDogc3ViSXRlbS50ZXh0fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8bGkgI3BvcHVwTWVudUl0ZW0gKm5nU3dpdGNoQ2FzZT1cIidtZW51aXRlbWNoZWNrYm94J1wiIHJvbGU9XCJtZW51aXRlbWNoZWNrYm94XCIgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlUG9wdXBNZW51SXRlbUNsaWNrKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAobW91c2VvdmVyKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRTdWJJdGVtSWQoc3ViSXRlbSwgc3ViSXRlbUluZGV4LCBnZXRJdGVtSWQoaXRlbSwgaXRlbUluZGV4KSlcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cIiEhc3ViSXRlbS5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcHItYmFzZSBwbC1sZyBweS1zbSBjdXJzb3ItcG9pbnRlciBob3ZlcjpiZy1wcmltYXJ5LWJhc2UgaG92ZXI6dGV4dC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogc3ViSXRlbSwgaHRtbDogc3ViSXRlbS5odG1sLCB0ZXh0OiBzdWJJdGVtLnRleHR9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDxsaSAjcG9wdXBNZW51SXRlbSAqbmdTd2l0Y2hDYXNlPVwiJ3NlcGFyYXRvcidcIiByb2xlPVwic2VwYXJhdG9yXCJcbiAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRTdWJJdGVtSWQoc3ViSXRlbSwgc3ViSXRlbUluZGV4LCBnZXRJdGVtSWQoaXRlbSwgaXRlbUluZGV4KSlcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteS1zbSBib3JkZXItYiBib3JkZXItbmV1dHJhbC1iYXNlXCI+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvbGk+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdWw+XG4iXX0=
|