desy-angular 6.0.0 → 6.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -21
- package/bundles/desy-angular.umd.js +10693 -10672
- package/bundles/desy-angular.umd.js.map +1 -1
- package/bundles/desy-angular.umd.min.js +1 -1
- package/bundles/desy-angular.umd.min.js.map +1 -1
- package/desy-angular.d.ts +51 -50
- package/desy-angular.metadata.json +1 -1
- package/esm2015/desy-angular.js +52 -51
- package/esm2015/lib/desy-angular.module.js +38 -38
- package/esm2015/lib/desy-buttons/components/button/button.component.js +92 -92
- package/esm2015/lib/desy-buttons/components/button-loader/button-loader.component.js +50 -50
- package/esm2015/lib/desy-buttons/components/dropdown/dropdown.component.js +111 -111
- package/esm2015/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.js +26 -26
- package/esm2015/lib/desy-buttons/components/listbox/listbox-label/listbox-label.component.js +14 -14
- package/esm2015/lib/desy-buttons/components/listbox/listbox.component.js +265 -265
- package/esm2015/lib/desy-buttons/components/pill/pill.component.js +64 -64
- package/esm2015/lib/desy-buttons/components/toggle/toggle-off-state/toggle-off-state.component.js +15 -15
- package/esm2015/lib/desy-buttons/components/toggle/toggle-on-state/toggle-on-state.component.js +15 -15
- package/esm2015/lib/desy-buttons/components/toggle/toggle.component.js +44 -44
- package/esm2015/lib/desy-buttons/desy-buttons.module.js +53 -53
- package/esm2015/lib/desy-buttons/interfaces/listbox-item-data.js +2 -2
- package/esm2015/lib/desy-buttons/interfaces/listbox-label-data.js +2 -2
- package/esm2015/lib/desy-commons/components/content/content.component.js +14 -14
- package/esm2015/lib/desy-commons/components/description/description.component.js +15 -15
- package/esm2015/lib/desy-commons/components/divider/divider.component.js +15 -15
- package/esm2015/lib/desy-commons/components/icon/icon.component.js +15 -15
- package/esm2015/lib/desy-commons/components/title/title.component.js +14 -14
- package/esm2015/lib/desy-commons/desy-commons.module.js +36 -36
- package/esm2015/lib/desy-commons/interfaces/content-data.js +2 -2
- package/esm2015/lib/desy-commons/interfaces/description-data.js +2 -2
- package/esm2015/lib/desy-commons/interfaces/divider-data.js +2 -2
- package/esm2015/lib/desy-commons/interfaces/icon-data.js +2 -2
- package/esm2015/lib/desy-commons/interfaces/index.js +6 -6
- package/esm2015/lib/desy-commons/interfaces/title-data.js +2 -2
- package/esm2015/lib/desy-forms/components/character-count/character-count.component.js +109 -109
- package/esm2015/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.js +188 -188
- package/esm2015/lib/desy-forms/components/checkboxes/checkboxes.component.js +226 -226
- package/esm2015/lib/desy-forms/components/date-input/date-input-day/date-input-day.component.js +38 -38
- package/esm2015/lib/desy-forms/components/date-input/date-input-divider/date-input-divider.component.js +19 -19
- package/esm2015/lib/desy-forms/components/date-input/date-input-item/date-input-item.component.js +13 -13
- package/esm2015/lib/desy-forms/components/date-input/date-input-month/date-input-month.component.js +38 -38
- package/esm2015/lib/desy-forms/components/date-input/date-input-year/date-input-year.component.js +36 -36
- package/esm2015/lib/desy-forms/components/date-input/date-input.component.js +222 -222
- package/esm2015/lib/desy-forms/components/error-message/error-message.component.js +28 -28
- package/esm2015/lib/desy-forms/components/fieldset/fieldset.component.js +44 -44
- package/esm2015/lib/desy-forms/components/fieldset/legend/legend.component.js +16 -16
- package/esm2015/lib/desy-forms/components/file-upload/file-upload.component.js +51 -51
- package/esm2015/lib/desy-forms/components/form-field/form-field.component.js +103 -103
- package/esm2015/lib/desy-forms/components/hint/hint.component.js +27 -27
- package/esm2015/lib/desy-forms/components/input/input.component.js +67 -67
- package/esm2015/lib/desy-forms/components/input-group/input-group-divider/input-group-divider.component.js +20 -20
- package/esm2015/lib/desy-forms/components/input-group/input-group-input/input-group-input.component.js +39 -39
- package/esm2015/lib/desy-forms/components/input-group/input-group-item/input-group-item.component.js +13 -13
- package/esm2015/lib/desy-forms/components/input-group/input-group-select/input-group-select.component.js +35 -35
- package/esm2015/lib/desy-forms/components/input-group/input-group.component.js +179 -179
- package/esm2015/lib/desy-forms/components/label/label.component.js +30 -30
- package/esm2015/lib/desy-forms/components/radios/radio-item/radio-item.component.js +144 -144
- package/esm2015/lib/desy-forms/components/radios/radios.component.js +233 -233
- package/esm2015/lib/desy-forms/components/search-bar/search-bar.component.js +45 -45
- package/esm2015/lib/desy-forms/components/select/option/option.component.js +17 -17
- package/esm2015/lib/desy-forms/components/select/option-group/option-group.component.js +17 -17
- package/esm2015/lib/desy-forms/components/select/select-item/select-item.component.js +14 -14
- package/esm2015/lib/desy-forms/components/select/select.component.js +64 -64
- package/esm2015/lib/desy-forms/components/template-driven-wrapper/template-driven-wrapper.component.js +12 -12
- package/esm2015/lib/desy-forms/components/textarea/textarea.component.js +60 -60
- package/esm2015/lib/desy-forms/components/tree/interfaces/itree-item.js +3 -3
- package/esm2015/lib/desy-forms/components/tree/interfaces/quit-tree-item-focus-options.js +2 -2
- package/esm2015/lib/desy-forms/components/tree/tree-checkbox/tree-checkbox.component.js +151 -151
- package/esm2015/lib/desy-forms/components/tree/tree-item/tree-item.component.js +370 -370
- package/esm2015/lib/desy-forms/components/tree/tree-items-generator/tree-items-generator.component.js +25 -25
- package/esm2015/lib/desy-forms/components/tree/tree-sub/tree-sub.component.js +14 -14
- package/esm2015/lib/desy-forms/components/tree/tree.component.js +408 -408
- package/esm2015/lib/desy-forms/desy-forms.module.js +130 -130
- package/esm2015/lib/desy-forms/directives/condition.directive.js +32 -32
- package/esm2015/lib/desy-forms/interfaces/accesibility-data.js +2 -2
- package/esm2015/lib/desy-forms/interfaces/error-message-data.js +2 -2
- package/esm2015/lib/desy-forms/interfaces/fieldset-data.js +2 -2
- package/esm2015/lib/desy-forms/interfaces/hint-data.js +2 -2
- package/esm2015/lib/desy-forms/interfaces/index.js +13 -13
- package/esm2015/lib/desy-forms/interfaces/item-checkbox-data.js +2 -2
- package/esm2015/lib/desy-forms/interfaces/item-date-input-data.js +2 -2
- package/esm2015/lib/desy-forms/interfaces/item-divider-date-input-data.js +2 -2
- package/esm2015/lib/desy-forms/interfaces/item-divider-input-group-data.js +2 -2
- package/esm2015/lib/desy-forms/interfaces/item-input-group-data.js +2 -2
- package/esm2015/lib/desy-forms/interfaces/item-radio-data.js +2 -2
- package/esm2015/lib/desy-forms/interfaces/item-radio-with-template-data.js +2 -2
- package/esm2015/lib/desy-forms/interfaces/label-data.js +2 -2
- package/esm2015/lib/desy-forms/interfaces/legend-data.js +2 -2
- package/esm2015/lib/desy-forms/interfaces/select-item-data.js +2 -2
- package/esm2015/lib/desy-modals/components/dialog/dialog.component.js +121 -121
- package/esm2015/lib/desy-modals/components/modal/modal-button-loader-primary/modal-button-loader-primary.component.js +20 -20
- package/esm2015/lib/desy-modals/components/modal/modal-button-loader-secondary/modal-button-loader-secondary.component.js +19 -19
- package/esm2015/lib/desy-modals/components/modal/modal-button-primary/modal-button-primary.component.js +19 -19
- package/esm2015/lib/desy-modals/components/modal/modal-button-secondary/modal-button-secondary.component.js +19 -19
- package/esm2015/lib/desy-modals/components/modal/modal.component.js +145 -145
- package/esm2015/lib/desy-modals/desy-modals.module.js +41 -41
- package/esm2015/lib/desy-modals/interfaces/dialog-options.js +2 -2
- package/esm2015/lib/desy-modals/interfaces/index.js +8 -8
- package/esm2015/lib/desy-modals/interfaces/modal-button-data.js +2 -2
- package/esm2015/lib/desy-modals/interfaces/modal-data.js +2 -2
- package/esm2015/lib/desy-modals/interfaces/modal-icon-data.js +2 -2
- package/esm2015/lib/desy-modals/interfaces/modal-options.js +2 -2
- package/esm2015/lib/desy-modals/interfaces/open-dialog-result.js +2 -2
- package/esm2015/lib/desy-modals/services/dialog.service.js +117 -117
- package/esm2015/lib/desy-nav/components/breadcrumbs/breadcrumbs-item/breadcrumbs-item.component.js +15 -15
- package/esm2015/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.js +42 -42
- package/esm2015/lib/desy-nav/components/error-summary/error-summary-item/error-summary-item.component.js +15 -15
- package/esm2015/lib/desy-nav/components/error-summary/error-summary.component.js +46 -46
- package/esm2015/lib/desy-nav/components/footer/footer-meta/footer-meta-item/footer-meta-item.component.js +16 -16
- package/esm2015/lib/desy-nav/components/footer/footer-meta/footer-meta.component.js +23 -23
- package/esm2015/lib/desy-nav/components/footer/footer-navigation/footer-navigation-item/footer-navigation-item.component.js +16 -16
- package/esm2015/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.js +16 -16
- package/esm2015/lib/desy-nav/components/footer/footer.component.js +52 -52
- package/esm2015/lib/desy-nav/components/header/header-custom-navigation/header-custom-navigation.component.js +11 -0
- package/esm2015/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.js +36 -36
- package/esm2015/lib/desy-nav/components/header/header-navigation/header-navigation-item/header-navigation-item.component.js +19 -19
- package/esm2015/lib/desy-nav/components/header/header-navigation/header-navigation.component.js +29 -29
- package/esm2015/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.js +22 -22
- package/esm2015/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component.js +11 -11
- package/esm2015/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.js +88 -88
- package/esm2015/lib/desy-nav/components/header/header-subnav/header-subnav.component.js +34 -34
- package/esm2015/lib/desy-nav/components/header/header.component.js +66 -61
- package/esm2015/lib/desy-nav/components/menu-horizontal/menu-horizontal-item/menu-horizontal-item.component.js +28 -28
- package/esm2015/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.js +68 -68
- package/esm2015/lib/desy-nav/components/menu-navigation/components/menu-navigation-item/menu-navigation-item.component.js +35 -35
- package/esm2015/lib/desy-nav/components/menu-navigation/components/menu-navigation-subitem/menu-navigation-subitem.component.js +31 -31
- package/esm2015/lib/desy-nav/components/menu-navigation/menu-navigation.component.js +568 -568
- package/esm2015/lib/desy-nav/components/menu-vertical/menu-vertical-item/menu-vertical-item.component.js +32 -32
- package/esm2015/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub/menu-vertical-item-sub.component.js +16 -16
- package/esm2015/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component.js +24 -24
- package/esm2015/lib/desy-nav/components/menu-vertical/menu-vertical.component.js +89 -89
- package/esm2015/lib/desy-nav/components/menubar/components/menubar-item/menubar-item.component.js +36 -36
- package/esm2015/lib/desy-nav/components/menubar/components/menubar-label/menubar-label.component.js +14 -14
- package/esm2015/lib/desy-nav/components/menubar/components/menubar-subitem/menubar-subitem.component.js +29 -29
- package/esm2015/lib/desy-nav/components/menubar/components/menubar-subsubitem/menubar-subsubitem.component.js +23 -23
- package/esm2015/lib/desy-nav/components/menubar/directives/menubaritem.directive.js +37 -37
- package/esm2015/lib/desy-nav/components/menubar/menubar.component.js +672 -672
- package/esm2015/lib/desy-nav/components/nav/nav-item/nav-item.component.js +30 -30
- package/esm2015/lib/desy-nav/components/nav/nav.component.js +105 -105
- package/esm2015/lib/desy-nav/components/notification/notification-item/notification-item.component.js +18 -18
- package/esm2015/lib/desy-nav/components/notification/notification.component.js +102 -102
- package/esm2015/lib/desy-nav/components/skip-link/skip-link.component.js +33 -33
- package/esm2015/lib/desy-nav/desy-nav.module.js +136 -133
- package/esm2015/lib/desy-nav/interfaces/breadcrumbs.data.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/error-summary-data.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/footer-data.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/header-dropdown-data.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/header-navigation-data.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/header-navigation-item-data.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/header-offcanvas-data.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/header-subnav-data.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/index.js +20 -20
- package/esm2015/lib/desy-nav/interfaces/menu-horizontal-item-data.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/menu-horizontal-item-event-data.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/menu-navigation-item-sub-item-sub-item.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/menu-navigation-item-sub-item.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/menu-navigation.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/menu-vertical-items-data.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/menu-vertical-sub-data.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/menu-vertical-sub-items-data.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/menubar-item-sub-item-sub-item.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/menubar-item-sub-item.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/menubar-item-sub.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/menubar-item.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/nav-item-event.data.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/nav-item.data.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/notification-items-data.js +2 -2
- package/esm2015/lib/desy-nav/interfaces/notification-options.js +2 -2
- package/esm2015/lib/desy-pagination/components/pagination/pagination.component.js +138 -138
- package/esm2015/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.js +15 -15
- package/esm2015/lib/desy-pagination/components/pagination-listbox-label/pagination-listbox-label.component.js +14 -14
- package/esm2015/lib/desy-pagination/desy-pagination.module.js +31 -31
- package/esm2015/lib/desy-pagination/interfaces/index.js +1 -1
- package/esm2015/lib/desy-pagination/interfaces/pagination-item.data.js +2 -2
- package/esm2015/lib/desy-tables/components/table/components/table-caption.component.js +14 -14
- package/esm2015/lib/desy-tables/components/table/components/table-cell.component.js +17 -17
- package/esm2015/lib/desy-tables/components/table/components/table-header.component.js +14 -14
- package/esm2015/lib/desy-tables/components/table/components/table-row.component.js +14 -14
- package/esm2015/lib/desy-tables/components/table/table.component.js +55 -55
- package/esm2015/lib/desy-tables/components/table-advanced/components/table-advanced-header-cell.component.js +33 -33
- package/esm2015/lib/desy-tables/components/table-advanced/components/table-advanced-header.component.js +14 -14
- package/esm2015/lib/desy-tables/components/table-advanced/components/table-advanced-row-cell.component.js +17 -17
- package/esm2015/lib/desy-tables/components/table-advanced/components/table-advanced-row.component.js +20 -20
- package/esm2015/lib/desy-tables/components/table-advanced/components/table-advanced-select.component.js +22 -22
- package/esm2015/lib/desy-tables/components/table-advanced/table-advanced.component.js +316 -316
- package/esm2015/lib/desy-tables/desy-tables.module.js +64 -64
- package/esm2015/lib/desy-tables/directives/cell.directive.js +26 -26
- package/esm2015/lib/desy-tables/directives/focus-clicked-cell.directive.js +78 -78
- package/esm2015/lib/desy-tables/directives/row.directive.js +24 -24
- package/esm2015/lib/desy-tables/interfaces/cell-data.js +2 -2
- package/esm2015/lib/desy-tables/interfaces/head-cell-data.js +7 -7
- package/esm2015/lib/desy-tables/interfaces/index.js +5 -5
- package/esm2015/lib/desy-tables/interfaces/recalculate-table-params.js +2 -2
- package/esm2015/lib/desy-tables/interfaces/row-data.js +2 -2
- package/esm2015/lib/desy-tables/interfaces/wrapper-data.js +2 -2
- package/esm2015/lib/desy-views/components/accordion/accordion-header/accordion-header.component.js +14 -14
- package/esm2015/lib/desy-views/components/accordion/accordion-item/accordion-item.component.js +43 -43
- package/esm2015/lib/desy-views/components/accordion/accordion.component.js +153 -153
- package/esm2015/lib/desy-views/components/accordion-history/accordion-history-item/accordion-history-item.component.js +31 -31
- package/esm2015/lib/desy-views/components/accordion-history/accordion-history.component.js +15 -15
- package/esm2015/lib/desy-views/components/accordion-history/accordion-item-hide-button/accordion-item-hide-button.component.js +14 -14
- package/esm2015/lib/desy-views/components/accordion-history/accordion-item-show-button/accordion-item-show-button.component.js +14 -14
- package/esm2015/lib/desy-views/components/alert/alert.component.js +75 -75
- package/esm2015/lib/desy-views/components/collapsible/collapsible.component.js +55 -55
- package/esm2015/lib/desy-views/components/description-list/definition/definition.component.js +15 -15
- package/esm2015/lib/desy-views/components/description-list/description-item/description-item.component.js +26 -26
- package/esm2015/lib/desy-views/components/description-list/description-list.component.js +22 -22
- package/esm2015/lib/desy-views/components/description-list/term/term.component.js +15 -15
- package/esm2015/lib/desy-views/components/details/details.component.js +20 -20
- package/esm2015/lib/desy-views/components/item/item-content-bottom/item-content-bottom.component.js +14 -14
- package/esm2015/lib/desy-views/components/item/item-content-right/item-content-right.component.js +11 -11
- package/esm2015/lib/desy-views/components/item/item-item/item-item.component.js +11 -11
- package/esm2015/lib/desy-views/components/item/item.component.js +87 -87
- package/esm2015/lib/desy-views/components/media-object/media-object-figure/media-object-figure.component.js +11 -11
- package/esm2015/lib/desy-views/components/media-object/media-object.component.js +67 -67
- package/esm2015/lib/desy-views/components/spinner/spinner.component.js +45 -45
- package/esm2015/lib/desy-views/components/status/status.component.js +58 -58
- package/esm2015/lib/desy-views/components/status-item/status-item.component.js +86 -86
- package/esm2015/lib/desy-views/components/tabs/panel/panel.component.js +15 -15
- package/esm2015/lib/desy-views/components/tabs/tab-item/tab-item.component.js +28 -28
- package/esm2015/lib/desy-views/components/tabs/tabs.component.js +150 -150
- package/esm2015/lib/desy-views/components/tooltip/tooltip-content/tooltip-content.component.js +11 -11
- package/esm2015/lib/desy-views/components/tooltip/tooltip.component.js +155 -155
- package/esm2015/lib/desy-views/desy-views.module.js +108 -108
- package/esm2015/lib/desy-views/interfaces/accordion-header.data.js +2 -2
- package/esm2015/lib/desy-views/interfaces/accordion-item.data.js +2 -2
- package/esm2015/lib/desy-views/interfaces/alert-options.js +2 -2
- package/esm2015/lib/desy-views/interfaces/description-item.data.js +2 -2
- package/esm2015/lib/desy-views/interfaces/index.js +11 -11
- package/esm2015/lib/desy-views/interfaces/open-alert-result.js +2 -2
- package/esm2015/lib/desy-views/interfaces/status-data.js +2 -2
- package/esm2015/lib/desy-views/interfaces/status-icon-data.js +2 -2
- package/esm2015/lib/desy-views/interfaces/status-item-title-data.js +2 -2
- package/esm2015/lib/desy-views/interfaces/tabs-items-data.js +2 -2
- package/esm2015/lib/desy-views/interfaces/tabs-panel-data.js +2 -2
- package/esm2015/lib/desy-views/interfaces/term-definition.data.js +2 -2
- package/esm2015/lib/desy-views/services/alert.service.js +89 -89
- package/esm2015/lib/shared/components/accessibility/accessibility.component.js +29 -29
- package/esm2015/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.js +27 -27
- package/esm2015/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.js +26 -26
- package/esm2015/lib/shared/components/content-base/content-base.component.js +20 -20
- package/esm2015/lib/shared/components/index.js +6 -6
- package/esm2015/lib/shared/components/text-or-html-required/text-or-html-required.component.js +14 -14
- package/esm2015/lib/shared/decorators/desy-content-child.decorator.js +41 -41
- package/esm2015/lib/shared/decorators/desy-on-input-change.decorator.js +19 -19
- package/esm2015/lib/shared/directives/attribute-change.directive.js +43 -43
- package/esm2015/lib/shared/directives/click-outside.directive.js +35 -35
- package/esm2015/lib/shared/directives/content-change.directive.js +43 -43
- package/esm2015/lib/shared/directives/custom-inner-content.directive.js +62 -62
- package/esm2015/lib/shared/directives/inner-content.directive.js +34 -34
- package/esm2015/lib/shared/interfaces/accesibility-data.js +2 -2
- package/esm2015/lib/shared/pipes/external-href.pipe.js +28 -28
- package/esm2015/lib/shared/pipes/inner-html.pipe.js +19 -19
- package/esm2015/lib/shared/pipes/make-html-list.pipe.js +16 -16
- package/esm2015/lib/shared/shared.module.js +62 -62
- package/esm2015/lib/shared/utils/focus-utils.js +51 -51
- package/esm2015/lib/shared/utils/search-utils.js +78 -78
- package/esm2015/lib/shared/utils/string-utils.js +18 -18
- package/esm2015/public-api.js +197 -197
- package/fesm2015/desy-angular.js +9589 -9574
- package/fesm2015/desy-angular.js.map +1 -1
- package/lib/desy-angular.module.d.ts +2 -2
- package/lib/desy-buttons/components/button/button.component.d.ts +31 -31
- package/lib/desy-buttons/components/button-loader/button-loader.component.d.ts +15 -15
- package/lib/desy-buttons/components/dropdown/dropdown.component.d.ts +22 -22
- package/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.d.ts +12 -12
- package/lib/desy-buttons/components/listbox/listbox-label/listbox-label.component.d.ts +4 -4
- package/lib/desy-buttons/components/listbox/listbox.component.d.ts +53 -53
- package/lib/desy-buttons/components/pill/pill.component.d.ts +22 -22
- package/lib/desy-buttons/components/toggle/toggle-off-state/toggle-off-state.component.d.ts +5 -5
- package/lib/desy-buttons/components/toggle/toggle-on-state/toggle-on-state.component.d.ts +5 -5
- package/lib/desy-buttons/components/toggle/toggle.component.d.ts +17 -17
- package/lib/desy-buttons/desy-buttons.module.d.ts +2 -2
- package/lib/desy-buttons/interfaces/listbox-item-data.d.ts +9 -9
- package/lib/desy-buttons/interfaces/listbox-label-data.d.ts +5 -5
- package/lib/desy-commons/components/content/content.component.d.ts +5 -5
- package/lib/desy-commons/components/description/description.component.d.ts +6 -6
- package/lib/desy-commons/components/divider/divider.component.d.ts +6 -6
- package/lib/desy-commons/components/icon/icon.component.d.ts +6 -6
- package/lib/desy-commons/components/title/title.component.d.ts +5 -5
- package/lib/desy-commons/desy-commons.module.d.ts +2 -2
- package/lib/desy-commons/interfaces/content-data.d.ts +5 -5
- package/lib/desy-commons/interfaces/description-data.d.ts +6 -6
- package/lib/desy-commons/interfaces/divider-data.d.ts +4 -4
- package/lib/desy-commons/interfaces/icon-data.d.ts +5 -5
- package/lib/desy-commons/interfaces/index.d.ts +5 -5
- package/lib/desy-commons/interfaces/title-data.d.ts +6 -6
- package/lib/desy-forms/components/character-count/character-count.component.d.ts +27 -27
- package/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.d.ts +47 -47
- package/lib/desy-forms/components/checkboxes/checkboxes.component.d.ts +75 -75
- package/lib/desy-forms/components/date-input/date-input-day/date-input-day.component.d.ts +21 -21
- package/lib/desy-forms/components/date-input/date-input-divider/date-input-divider.component.d.ts +7 -7
- package/lib/desy-forms/components/date-input/date-input-item/date-input-item.component.d.ts +4 -4
- package/lib/desy-forms/components/date-input/date-input-month/date-input-month.component.d.ts +21 -21
- package/lib/desy-forms/components/date-input/date-input-year/date-input-year.component.d.ts +18 -18
- package/lib/desy-forms/components/date-input/date-input.component.d.ts +55 -55
- package/lib/desy-forms/components/error-message/error-message.component.d.ts +12 -12
- package/lib/desy-forms/components/fieldset/fieldset.component.d.ts +28 -28
- package/lib/desy-forms/components/fieldset/legend/legend.component.d.ts +6 -6
- package/lib/desy-forms/components/file-upload/file-upload.component.d.ts +20 -20
- package/lib/desy-forms/components/form-field/form-field.component.d.ts +40 -40
- package/lib/desy-forms/components/hint/hint.component.d.ts +11 -11
- package/lib/desy-forms/components/input/input.component.d.ts +23 -23
- package/lib/desy-forms/components/input-group/input-group-divider/input-group-divider.component.d.ts +8 -8
- package/lib/desy-forms/components/input-group/input-group-input/input-group-input.component.d.ts +20 -20
- package/lib/desy-forms/components/input-group/input-group-item/input-group-item.component.d.ts +4 -4
- package/lib/desy-forms/components/input-group/input-group-select/input-group-select.component.d.ts +16 -16
- package/lib/desy-forms/components/input-group/input-group.component.d.ts +56 -56
- package/lib/desy-forms/components/label/label.component.d.ts +14 -14
- package/lib/desy-forms/components/radios/radio-item/radio-item.component.d.ts +43 -43
- package/lib/desy-forms/components/radios/radios.component.d.ts +75 -75
- package/lib/desy-forms/components/search-bar/search-bar.component.d.ts +16 -16
- package/lib/desy-forms/components/select/option/option.component.d.ts +7 -7
- package/lib/desy-forms/components/select/option-group/option-group.component.d.ts +7 -7
- package/lib/desy-forms/components/select/select-item/select-item.component.d.ts +4 -4
- package/lib/desy-forms/components/select/select.component.d.ts +21 -21
- package/lib/desy-forms/components/template-driven-wrapper/template-driven-wrapper.component.d.ts +2 -2
- package/lib/desy-forms/components/textarea/textarea.component.d.ts +24 -24
- package/lib/desy-forms/components/tree/interfaces/itree-item.d.ts +5 -5
- package/lib/desy-forms/components/tree/interfaces/quit-tree-item-focus-options.d.ts +5 -5
- package/lib/desy-forms/components/tree/tree-checkbox/tree-checkbox.component.d.ts +43 -43
- package/lib/desy-forms/components/tree/tree-item/tree-item.component.d.ts +87 -87
- package/lib/desy-forms/components/tree/tree-items-generator/tree-items-generator.component.d.ts +10 -10
- package/lib/desy-forms/components/tree/tree-sub/tree-sub.component.d.ts +6 -6
- package/lib/desy-forms/components/tree/tree.component.d.ts +112 -112
- package/lib/desy-forms/desy-forms.module.d.ts +2 -2
- package/lib/desy-forms/directives/condition.directive.d.ts +15 -15
- package/lib/desy-forms/interfaces/accesibility-data.d.ts +15 -15
- package/lib/desy-forms/interfaces/error-message-data.d.ts +8 -8
- package/lib/desy-forms/interfaces/fieldset-data.d.ts +10 -10
- package/lib/desy-forms/interfaces/hint-data.d.ts +7 -7
- package/lib/desy-forms/interfaces/index.d.ts +12 -12
- package/lib/desy-forms/interfaces/item-checkbox-data.d.ts +21 -21
- package/lib/desy-forms/interfaces/item-date-input-data.d.ts +17 -17
- package/lib/desy-forms/interfaces/item-divider-date-input-data.d.ts +5 -5
- package/lib/desy-forms/interfaces/item-divider-input-group-data.d.ts +5 -5
- package/lib/desy-forms/interfaces/item-input-group-data.d.ts +23 -23
- package/lib/desy-forms/interfaces/item-radio-data.d.ts +20 -20
- package/lib/desy-forms/interfaces/item-radio-with-template-data.d.ts +5 -5
- package/lib/desy-forms/interfaces/label-data.d.ts +9 -9
- package/lib/desy-forms/interfaces/legend-data.d.ts +6 -6
- package/lib/desy-forms/interfaces/select-item-data.d.ts +8 -8
- package/lib/desy-modals/components/dialog/dialog.component.d.ts +35 -35
- package/lib/desy-modals/components/modal/modal-button-loader-primary/modal-button-loader-primary.component.d.ts +8 -8
- package/lib/desy-modals/components/modal/modal-button-loader-secondary/modal-button-loader-secondary.component.d.ts +7 -7
- package/lib/desy-modals/components/modal/modal-button-primary/modal-button-primary.component.d.ts +7 -7
- package/lib/desy-modals/components/modal/modal-button-secondary/modal-button-secondary.component.d.ts +7 -7
- package/lib/desy-modals/components/modal/modal.component.d.ts +51 -51
- package/lib/desy-modals/desy-modals.module.d.ts +2 -2
- package/lib/desy-modals/interfaces/dialog-options.d.ts +9 -9
- package/lib/desy-modals/interfaces/index.d.ts +6 -6
- package/lib/desy-modals/interfaces/modal-button-data.d.ts +20 -20
- package/lib/desy-modals/interfaces/modal-data.d.ts +5 -5
- package/lib/desy-modals/interfaces/modal-icon-data.d.ts +4 -4
- package/lib/desy-modals/interfaces/modal-options.d.ts +16 -16
- package/lib/desy-modals/interfaces/open-dialog-result.d.ts +6 -6
- package/lib/desy-modals/services/dialog.service.d.ts +14 -14
- package/lib/desy-nav/components/breadcrumbs/breadcrumbs-item/breadcrumbs-item.component.d.ts +6 -6
- package/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.d.ts +18 -18
- package/lib/desy-nav/components/error-summary/error-summary-item/error-summary-item.component.d.ts +6 -6
- package/lib/desy-nav/components/error-summary/error-summary.component.d.ts +20 -20
- package/lib/desy-nav/components/footer/footer-meta/footer-meta-item/footer-meta-item.component.d.ts +7 -7
- package/lib/desy-nav/components/footer/footer-meta/footer-meta.component.d.ts +10 -10
- package/lib/desy-nav/components/footer/footer-navigation/footer-navigation-item/footer-navigation-item.component.d.ts +7 -7
- package/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.d.ts +8 -8
- package/lib/desy-nav/components/footer/footer.component.d.ts +27 -27
- package/lib/desy-nav/components/header/header-custom-navigation/header-custom-navigation.component.d.ts +3 -0
- package/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.d.ts +12 -12
- package/lib/desy-nav/components/header/header-navigation/header-navigation-item/header-navigation-item.component.d.ts +10 -10
- package/lib/desy-nav/components/header/header-navigation/header-navigation.component.d.ts +13 -13
- package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.d.ts +5 -5
- package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component.d.ts +3 -3
- package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.d.ts +30 -30
- package/lib/desy-nav/components/header/header-subnav/header-subnav.component.d.ts +11 -11
- package/lib/desy-nav/components/header/header.component.d.ts +34 -32
- package/lib/desy-nav/components/menu-horizontal/menu-horizontal-item/menu-horizontal-item.component.d.ts +15 -15
- package/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.d.ts +16 -16
- package/lib/desy-nav/components/menu-navigation/components/menu-navigation-item/menu-navigation-item.component.d.ts +22 -22
- package/lib/desy-nav/components/menu-navigation/components/menu-navigation-subitem/menu-navigation-subitem.component.d.ts +19 -19
- package/lib/desy-nav/components/menu-navigation/menu-navigation.component.d.ts +80 -80
- package/lib/desy-nav/components/menu-vertical/menu-vertical-item/menu-vertical-item.component.d.ts +18 -18
- package/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub/menu-vertical-item-sub.component.d.ts +8 -8
- package/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component.d.ts +15 -15
- package/lib/desy-nav/components/menu-vertical/menu-vertical.component.d.ts +18 -18
- package/lib/desy-nav/components/menubar/components/menubar-item/menubar-item.component.d.ts +23 -23
- package/lib/desy-nav/components/menubar/components/menubar-label/menubar-label.component.d.ts +4 -4
- package/lib/desy-nav/components/menubar/components/menubar-subitem/menubar-subitem.component.d.ts +15 -15
- package/lib/desy-nav/components/menubar/components/menubar-subsubitem/menubar-subsubitem.component.d.ts +10 -10
- package/lib/desy-nav/components/menubar/directives/menubaritem.directive.d.ts +16 -16
- package/lib/desy-nav/components/menubar/menubar.component.d.ts +101 -101
- package/lib/desy-nav/components/nav/nav-item/nav-item.component.d.ts +17 -17
- package/lib/desy-nav/components/nav/nav.component.d.ts +20 -20
- package/lib/desy-nav/components/notification/notification-item/notification-item.component.d.ts +9 -9
- package/lib/desy-nav/components/notification/notification.component.d.ts +36 -36
- package/lib/desy-nav/components/skip-link/skip-link.component.d.ts +13 -13
- package/lib/desy-nav/desy-nav.module.d.ts +2 -2
- package/lib/desy-nav/interfaces/breadcrumbs.data.d.ts +7 -7
- package/lib/desy-nav/interfaces/error-summary-data.d.ts +7 -7
- package/lib/desy-nav/interfaces/footer-data.d.ts +24 -24
- package/lib/desy-nav/interfaces/header-dropdown-data.d.ts +11 -11
- package/lib/desy-nav/interfaces/header-navigation-data.d.ts +5 -5
- package/lib/desy-nav/interfaces/header-navigation-item-data.d.ts +12 -12
- package/lib/desy-nav/interfaces/header-offcanvas-data.d.ts +8 -8
- package/lib/desy-nav/interfaces/header-subnav-data.d.ts +11 -11
- package/lib/desy-nav/interfaces/index.d.ts +19 -19
- package/lib/desy-nav/interfaces/menu-horizontal-item-data.d.ts +13 -13
- package/lib/desy-nav/interfaces/menu-horizontal-item-event-data.d.ts +5 -5
- package/lib/desy-nav/interfaces/menu-navigation-item-sub-item-sub-item.d.ts +14 -14
- package/lib/desy-nav/interfaces/menu-navigation-item-sub-item.d.ts +6 -6
- package/lib/desy-nav/interfaces/menu-navigation.d.ts +17 -17
- package/lib/desy-nav/interfaces/menu-vertical-items-data.d.ts +19 -19
- package/lib/desy-nav/interfaces/menu-vertical-sub-data.d.ts +7 -7
- package/lib/desy-nav/interfaces/menu-vertical-sub-items-data.d.ts +16 -16
- package/lib/desy-nav/interfaces/menubar-item-sub-item-sub-item.d.ts +6 -6
- package/lib/desy-nav/interfaces/menubar-item-sub-item.d.ts +9 -9
- package/lib/desy-nav/interfaces/menubar-item-sub.d.ts +6 -6
- package/lib/desy-nav/interfaces/menubar-item.d.ts +18 -18
- package/lib/desy-nav/interfaces/nav-item-event.data.d.ts +5 -5
- package/lib/desy-nav/interfaces/nav-item.data.d.ts +15 -15
- package/lib/desy-nav/interfaces/notification-items-data.d.ts +10 -10
- package/lib/desy-nav/interfaces/notification-options.d.ts +15 -15
- package/lib/desy-pagination/components/pagination/pagination.component.d.ts +44 -44
- package/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.d.ts +7 -7
- package/lib/desy-pagination/components/pagination-listbox-label/pagination-listbox-label.component.d.ts +4 -4
- package/lib/desy-pagination/desy-pagination.module.d.ts +2 -2
- package/lib/desy-pagination/interfaces/index.d.ts +1 -1
- package/lib/desy-pagination/interfaces/pagination-item.data.d.ts +4 -4
- package/lib/desy-tables/components/table/components/table-caption.component.d.ts +4 -4
- package/lib/desy-tables/components/table/components/table-cell.component.d.ts +8 -8
- package/lib/desy-tables/components/table/components/table-header.component.d.ts +5 -5
- package/lib/desy-tables/components/table/components/table-row.component.d.ts +5 -5
- package/lib/desy-tables/components/table/table.component.d.ts +24 -24
- package/lib/desy-tables/components/table-advanced/components/table-advanced-header-cell.component.d.ts +20 -20
- package/lib/desy-tables/components/table-advanced/components/table-advanced-header.component.d.ts +5 -5
- package/lib/desy-tables/components/table-advanced/components/table-advanced-row-cell.component.d.ts +8 -8
- package/lib/desy-tables/components/table-advanced/components/table-advanced-row.component.d.ts +8 -8
- package/lib/desy-tables/components/table-advanced/components/table-advanced-select.component.d.ts +9 -9
- package/lib/desy-tables/components/table-advanced/table-advanced.component.d.ts +122 -122
- package/lib/desy-tables/desy-tables.module.d.ts +2 -2
- package/lib/desy-tables/directives/cell.directive.d.ts +14 -14
- package/lib/desy-tables/directives/focus-clicked-cell.directive.d.ts +10 -10
- package/lib/desy-tables/directives/row.directive.d.ts +16 -16
- package/lib/desy-tables/interfaces/cell-data.d.ts +9 -9
- package/lib/desy-tables/interfaces/head-cell-data.d.ts +18 -18
- package/lib/desy-tables/interfaces/index.d.ts +4 -4
- package/lib/desy-tables/interfaces/recalculate-table-params.d.ts +11 -11
- package/lib/desy-tables/interfaces/row-data.d.ts +6 -6
- package/lib/desy-tables/interfaces/wrapper-data.d.ts +4 -4
- package/lib/desy-views/components/accordion/accordion-header/accordion-header.component.d.ts +5 -5
- package/lib/desy-views/components/accordion/accordion-item/accordion-item.component.d.ts +17 -17
- package/lib/desy-views/components/accordion/accordion.component.d.ts +48 -48
- package/lib/desy-views/components/accordion-history/accordion-history-item/accordion-history-item.component.d.ts +9 -9
- package/lib/desy-views/components/accordion-history/accordion-history.component.d.ts +6 -6
- package/lib/desy-views/components/accordion-history/accordion-item-hide-button/accordion-item-hide-button.component.d.ts +4 -4
- package/lib/desy-views/components/accordion-history/accordion-item-show-button/accordion-item-show-button.component.d.ts +4 -4
- package/lib/desy-views/components/alert/alert.component.d.ts +29 -29
- package/lib/desy-views/components/collapsible/collapsible.component.d.ts +14 -14
- package/lib/desy-views/components/description-list/definition/definition.component.d.ts +6 -6
- package/lib/desy-views/components/description-list/description-item/description-item.component.d.ts +9 -9
- package/lib/desy-views/components/description-list/description-list.component.d.ts +11 -11
- package/lib/desy-views/components/description-list/term/term.component.d.ts +6 -6
- package/lib/desy-views/components/details/details.component.d.ts +10 -10
- package/lib/desy-views/components/item/item-content-bottom/item-content-bottom.component.d.ts +5 -5
- package/lib/desy-views/components/item/item-content-right/item-content-right.component.d.ts +3 -3
- package/lib/desy-views/components/item/item-item/item-item.component.d.ts +3 -3
- package/lib/desy-views/components/item/item.component.d.ts +37 -37
- package/lib/desy-views/components/media-object/media-object-figure/media-object-figure.component.d.ts +3 -3
- package/lib/desy-views/components/media-object/media-object.component.d.ts +33 -33
- package/lib/desy-views/components/spinner/spinner.component.d.ts +21 -21
- package/lib/desy-views/components/status/status.component.d.ts +25 -25
- package/lib/desy-views/components/status-item/status-item.component.d.ts +44 -44
- package/lib/desy-views/components/tabs/panel/panel.component.d.ts +6 -6
- package/lib/desy-views/components/tabs/tab-item/tab-item.component.d.ts +12 -12
- package/lib/desy-views/components/tabs/tabs.component.d.ts +48 -48
- package/lib/desy-views/components/tooltip/tooltip-content/tooltip-content.component.d.ts +3 -3
- package/lib/desy-views/components/tooltip/tooltip.component.d.ts +48 -48
- package/lib/desy-views/desy-views.module.d.ts +2 -2
- package/lib/desy-views/interfaces/accordion-header.data.d.ts +5 -5
- package/lib/desy-views/interfaces/accordion-item.data.d.ts +10 -10
- package/lib/desy-views/interfaces/alert-options.d.ts +8 -8
- package/lib/desy-views/interfaces/description-item.data.d.ts +8 -8
- package/lib/desy-views/interfaces/index.d.ts +10 -10
- package/lib/desy-views/interfaces/open-alert-result.d.ts +6 -6
- package/lib/desy-views/interfaces/status-data.d.ts +8 -8
- package/lib/desy-views/interfaces/status-icon-data.d.ts +4 -4
- package/lib/desy-views/interfaces/status-item-title-data.d.ts +5 -5
- package/lib/desy-views/interfaces/tabs-items-data.d.ts +9 -9
- package/lib/desy-views/interfaces/tabs-panel-data.d.ts +8 -8
- package/lib/desy-views/interfaces/term-definition.data.d.ts +7 -7
- package/lib/desy-views/services/alert.service.d.ts +14 -14
- package/lib/shared/components/accessibility/accessibility.component.d.ts +20 -20
- package/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.d.ts +26 -26
- package/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.d.ts +23 -23
- package/lib/shared/components/content-base/content-base.component.d.ts +9 -9
- package/lib/shared/components/index.d.ts +5 -5
- package/lib/shared/components/text-or-html-required/text-or-html-required.component.d.ts +8 -8
- package/lib/shared/decorators/desy-content-child.decorator.d.ts +15 -15
- package/lib/shared/decorators/desy-on-input-change.decorator.d.ts +5 -5
- package/lib/shared/directives/attribute-change.directive.d.ts +10 -10
- package/lib/shared/directives/click-outside.directive.d.ts +9 -9
- package/lib/shared/directives/content-change.directive.d.ts +19 -19
- package/lib/shared/directives/custom-inner-content.directive.d.ts +22 -22
- package/lib/shared/directives/inner-content.directive.d.ts +9 -9
- package/lib/shared/interfaces/accesibility-data.d.ts +16 -16
- package/lib/shared/pipes/external-href.pipe.d.ts +8 -8
- package/lib/shared/pipes/inner-html.pipe.d.ts +7 -7
- package/lib/shared/pipes/make-html-list.pipe.d.ts +4 -4
- package/lib/shared/shared.module.d.ts +2 -2
- package/lib/shared/utils/focus-utils.d.ts +4 -4
- package/lib/shared/utils/search-utils.d.ts +14 -14
- package/lib/shared/utils/string-utils.d.ts +10 -10
- package/package.json +1 -1
- package/public-api.d.ts +168 -168
|
@@ -1,316 +1,316 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, Input, Output, ViewChildren } from '@angular/core';
|
|
3
|
-
import { AccessibilityComponent } from '../../../shared/components';
|
|
4
|
-
import { SearchUtils } from '../../../shared/utils/search-utils';
|
|
5
|
-
import { OrderBy } from '../../interfaces';
|
|
6
|
-
import { TableCaptionComponent } from '../table/components/table-caption.component';
|
|
7
|
-
import { TableAdvancedHeaderComponent } from './components/table-advanced-header.component';
|
|
8
|
-
import { TableAdvancedRowComponent } from './components/table-advanced-row.component';
|
|
9
|
-
import { RowDirective } from '../../directives/row.directive';
|
|
10
|
-
import { DesyContentChild } from '../../../shared/decorators/desy-content-child.decorator';
|
|
11
|
-
export class TableAdvancedComponent extends AccessibilityComponent {
|
|
12
|
-
constructor(el, changeDetector) {
|
|
13
|
-
super();
|
|
14
|
-
this.el = el;
|
|
15
|
-
this.changeDetector = changeDetector;
|
|
16
|
-
this.rowsChange = new EventEmitter();
|
|
17
|
-
this.rowsChecked = new EventEmitter();
|
|
18
|
-
this.recalculateTable = new EventEmitter();
|
|
19
|
-
this.orderByType = OrderBy;
|
|
20
|
-
}
|
|
21
|
-
ngAfterViewInit() {
|
|
22
|
-
const elemntsFocus = this.el.nativeElement.querySelector('[tabindex]');
|
|
23
|
-
if (elemntsFocus) {
|
|
24
|
-
elemntsFocus.setAttribute('tabindex', '0');
|
|
25
|
-
}
|
|
26
|
-
this.recalculateVisibleElements();
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Refresca las filas visibles tras realizarse una búsqueda o una ordenación
|
|
30
|
-
*/
|
|
31
|
-
recalculateVisibleElements() {
|
|
32
|
-
const recalculateParams = this.buildRecalculateParams();
|
|
33
|
-
// Si se captura el evento recalculateTable se deja al usuario la responsabilidad de filtrar y ordenar los elementos.
|
|
34
|
-
if (this.recalculateTable.observers.length > 0) {
|
|
35
|
-
this.recalculateTable.emit(recalculateParams);
|
|
36
|
-
this.changeDetector.markForCheck();
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
// Se deben mostrar todas las filas temporalmente para poder aplicar el filtro y la ordenación sobre el contenido insertado
|
|
40
|
-
this.visibleRows = this.getRows();
|
|
41
|
-
this.changeDetector.detectChanges();
|
|
42
|
-
// Se aplica el filtro y la ordenación
|
|
43
|
-
let rowData = this.filterRows(recalculateParams, this.rowData.toArray());
|
|
44
|
-
rowData = this.sortRows(recalculateParams, rowData);
|
|
45
|
-
this.visibleRows = rowData.map(r => r.desyRow);
|
|
46
|
-
this.changeDetector.detectChanges();
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Construye los parámetros necesarios para recalcular la tabla, indicando los filtros y la ordenación
|
|
51
|
-
*/
|
|
52
|
-
buildRecalculateParams() {
|
|
53
|
-
const params = {
|
|
54
|
-
filters: [],
|
|
55
|
-
sort: null
|
|
56
|
-
};
|
|
57
|
-
const head = this.getHeaderCells();
|
|
58
|
-
if (head) {
|
|
59
|
-
head.forEach((headerCell, headerCellIndex) => {
|
|
60
|
-
if (headerCell.hasFilter && headerCell.activeFilter) {
|
|
61
|
-
params.filters.push({ columnIndex: headerCellIndex, filterText: headerCell.valueFilter });
|
|
62
|
-
}
|
|
63
|
-
if (headerCell.hasSelect && headerCell.activeSelect) {
|
|
64
|
-
params.filters.push({ columnIndex: headerCellIndex, filterText: headerCell.valueSelect });
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
const orderByColumnIndex = head.findIndex(cell => cell.orderBy && cell.orderBy !== OrderBy.none);
|
|
68
|
-
params.sort = (orderByColumnIndex >= 0) ? { columnIndex: orderByColumnIndex, order: head[orderByColumnIndex].orderBy } : null;
|
|
69
|
-
}
|
|
70
|
-
return params;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* funciones de recoger ids, y caracteristicas
|
|
74
|
-
*/
|
|
75
|
-
hasFilters() {
|
|
76
|
-
const head = this.getHeaderCells();
|
|
77
|
-
return head ? head.findIndex(cell => (cell.hasFilter) || (cell.hasSelect)) >= 0 : false;
|
|
78
|
-
}
|
|
79
|
-
getHeaderCells() {
|
|
80
|
-
return this.headerComponent && this.headerComponent.cells.length > 0 ? this.headerComponent.cells.toArray() : this.head;
|
|
81
|
-
}
|
|
82
|
-
getRows() {
|
|
83
|
-
let rows = [];
|
|
84
|
-
if (this.rowComponentList.length > 0) {
|
|
85
|
-
rows = this.rowComponentList.toArray();
|
|
86
|
-
}
|
|
87
|
-
else if (this.rows) {
|
|
88
|
-
rows = this.rows;
|
|
89
|
-
}
|
|
90
|
-
return rows;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Si se sobreescribe el comportamiento por defecto de filtrado y ordenación, se utilizarán las indicadas desde fuera del
|
|
94
|
-
* componente (ya sea por parámetro o por contenido).
|
|
95
|
-
* Si no se sobreescribe, devuelve las filas calculadas.
|
|
96
|
-
*/
|
|
97
|
-
getVisibleRows() {
|
|
98
|
-
return this.recalculateTable.observers.length > 0 ? this.getRows() : this.visibleRows;
|
|
99
|
-
}
|
|
100
|
-
getIdPrefix() {
|
|
101
|
-
return this.idPrefix ? this.idPrefix : 'id-table-row';
|
|
102
|
-
}
|
|
103
|
-
getIdHeader(index) {
|
|
104
|
-
return this.getIdPrefix() + '-header-' + index;
|
|
105
|
-
}
|
|
106
|
-
getIdRowCheckbox(index) {
|
|
107
|
-
return this.getIdPrefix() + '-checkbox-' + index;
|
|
108
|
-
}
|
|
109
|
-
getIdHeaderFilter(index) {
|
|
110
|
-
return this.getIdPrefix() + '-header-filter-' + index;
|
|
111
|
-
}
|
|
112
|
-
getIdHeaderSelect(index) {
|
|
113
|
-
return this.getIdPrefix() + '-header-select-' + index;
|
|
114
|
-
}
|
|
115
|
-
getCaptionClass() {
|
|
116
|
-
return this.captionComponent ? this.captionComponent.classes : this.captionClasses;
|
|
117
|
-
}
|
|
118
|
-
getStringOrderBy(orderBy) {
|
|
119
|
-
if (orderBy === OrderBy.asc) {
|
|
120
|
-
return 'ascending';
|
|
121
|
-
}
|
|
122
|
-
else if (orderBy === OrderBy.desc) {
|
|
123
|
-
return 'descending';
|
|
124
|
-
}
|
|
125
|
-
else if (orderBy === OrderBy.none) {
|
|
126
|
-
return 'none';
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
getSelectForItem(item) {
|
|
130
|
-
return item.selectComponent ? item.selectComponent : null;
|
|
131
|
-
}
|
|
132
|
-
getItemSelectOptions(item) {
|
|
133
|
-
return item.selectItemComponentList && item.selectItemComponentList.length > 0 ?
|
|
134
|
-
item.selectItemComponentList.toArray() : item.items;
|
|
135
|
-
}
|
|
136
|
-
getContentComponent(item) {
|
|
137
|
-
return item.contentComponent ? item.contentComponent : null;
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* checks
|
|
141
|
-
*/
|
|
142
|
-
handleCheckboxChange(row) {
|
|
143
|
-
if (row instanceof TableAdvancedRowComponent) {
|
|
144
|
-
row.checkedChange.emit(row.checked);
|
|
145
|
-
}
|
|
146
|
-
this.notifyCheckedChange();
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Permite desmarcar todas las filas
|
|
150
|
-
*/
|
|
151
|
-
uncheckAll() {
|
|
152
|
-
this.getRows().forEach(r => {
|
|
153
|
-
const mustEmit = r.checked && r instanceof TableAdvancedRowComponent;
|
|
154
|
-
r.checked = false;
|
|
155
|
-
if (mustEmit) {
|
|
156
|
-
r.checkedChange.emit(r.checked);
|
|
157
|
-
}
|
|
158
|
-
});
|
|
159
|
-
this.notifyCheckedChange();
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Notifica cambios en las filas
|
|
163
|
-
*/
|
|
164
|
-
notifyCheckedChange() {
|
|
165
|
-
if (this.rowComponentList.length === 0) {
|
|
166
|
-
this.rowsChange.emit(this.rows);
|
|
167
|
-
}
|
|
168
|
-
const rowChecks = {};
|
|
169
|
-
this.getRows().forEach(r => rowChecks[r.id] = !!r.checked); // Se aplican también a las no visibles
|
|
170
|
-
this.rowsChecked.emit(rowChecks);
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* busqueda
|
|
174
|
-
*/
|
|
175
|
-
handleInputSearch(item) {
|
|
176
|
-
if (item.hasFilter) { // si tiene buscador
|
|
177
|
-
item.activeFilter = !!item.valueFilter;
|
|
178
|
-
this.uncheckAll();
|
|
179
|
-
}
|
|
180
|
-
if (item.hasSelect) { //Si tiene seleccionable
|
|
181
|
-
item.activeSelect = !!item.valueSelect;
|
|
182
|
-
this.uncheckAll();
|
|
183
|
-
}
|
|
184
|
-
this.recalculateVisibleElements();
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Se filtran las filas según lo especificado en la barra de búsqueda de cada columna.
|
|
188
|
-
* Si no hay búsqueda sse devuelven todas las filas.
|
|
189
|
-
* @param recalculateParams parametros para recalcular los elementos visibles
|
|
190
|
-
* @param rows lista con todas las filas
|
|
191
|
-
* @return lista de filas filtrada
|
|
192
|
-
*/
|
|
193
|
-
filterRows(recalculateParams, rows) {
|
|
194
|
-
let filteredRows = rows;
|
|
195
|
-
recalculateParams.filters.forEach(filter => {
|
|
196
|
-
filteredRows = filteredRows.filter(row => SearchUtils.containsAnyWordFrom(row.getCell(filter.columnIndex).getContent(), filter.filterText));
|
|
197
|
-
});
|
|
198
|
-
return filteredRows;
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* ordenacion
|
|
202
|
-
*/
|
|
203
|
-
/**
|
|
204
|
-
* Permite indicar que se debe ordenar la tabla
|
|
205
|
-
* @param index indice de la columna
|
|
206
|
-
*/
|
|
207
|
-
handleSortByColumn(index) {
|
|
208
|
-
const head = this.getHeaderCells();
|
|
209
|
-
if (head) {
|
|
210
|
-
head.forEach((cell, cellIndex) => {
|
|
211
|
-
if (cell.orderBy) {
|
|
212
|
-
cell.orderBy = cellIndex === index ? this.getNextDirection(cell) : OrderBy.none;
|
|
213
|
-
}
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
this.recalculateVisibleElements();
|
|
217
|
-
}
|
|
218
|
-
/**
|
|
219
|
-
* Ordena las filas indicadas según la columna especificada en la cabecera
|
|
220
|
-
* @param recalculateParams parametros para recalcular los elementos visibles
|
|
221
|
-
* @param rows filas de la tabla a ordenar
|
|
222
|
-
* @return mismas filas pero ordenadas por la columna indicada
|
|
223
|
-
*/
|
|
224
|
-
sortRows(recalculateParams, rows) {
|
|
225
|
-
let sortedRows = rows;
|
|
226
|
-
if (recalculateParams.sort) {
|
|
227
|
-
const columnIndex = recalculateParams.sort.columnIndex;
|
|
228
|
-
const isAsc = recalculateParams.sort.order === OrderBy.asc;
|
|
229
|
-
sortedRows = rows.sort((a, b) => this.compareCellContent(a.getCell(columnIndex), b.getCell(columnIndex), isAsc));
|
|
230
|
-
}
|
|
231
|
-
return sortedRows;
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* Compara el contenido de dos celdas. Este se invierte si el orden especificado es descendente.
|
|
235
|
-
*/
|
|
236
|
-
compareCellContent(a, b, isAsc) {
|
|
237
|
-
let result;
|
|
238
|
-
const aComparable = this.cleanCurrency(a.getContent());
|
|
239
|
-
const bComparable = this.cleanCurrency(b.getContent());
|
|
240
|
-
if (isNaN(+aComparable) && isNaN(+bComparable)) { // son textos
|
|
241
|
-
result = aComparable.localeCompare(bComparable, 'es', { sensitivity: 'base', ignorePunctuation: true });
|
|
242
|
-
}
|
|
243
|
-
else { // son numeros
|
|
244
|
-
result = aComparable.localeCompare(bComparable, undefined, { numeric: true });
|
|
245
|
-
}
|
|
246
|
-
return result * (isAsc ? 1 : -1);
|
|
247
|
-
}
|
|
248
|
-
/**
|
|
249
|
-
* se calcula la ordenación nueva
|
|
250
|
-
*/
|
|
251
|
-
getNextDirection(item) {
|
|
252
|
-
if (item.orderBy === OrderBy.none || item.orderBy === OrderBy.desc) {
|
|
253
|
-
return OrderBy.asc;
|
|
254
|
-
}
|
|
255
|
-
else {
|
|
256
|
-
return OrderBy.desc;
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
/**
|
|
260
|
-
* si es una cantidad de dinero se quita € para poder comparar los numeros
|
|
261
|
-
*/
|
|
262
|
-
cleanCurrency(txt) {
|
|
263
|
-
if (/[\d.,]+[\€]/g.test(txt)) {
|
|
264
|
-
txt = txt.replace(/€/g, '');
|
|
265
|
-
}
|
|
266
|
-
return txt;
|
|
267
|
-
}
|
|
268
|
-
selectFilter(item, itemValue) {
|
|
269
|
-
item.valueChange.emit(itemValue);
|
|
270
|
-
const head = this.getHeaderCells();
|
|
271
|
-
const rows = this.getRows();
|
|
272
|
-
if (head && rows) {
|
|
273
|
-
head.forEach((cell, cellIndex) => {
|
|
274
|
-
});
|
|
275
|
-
rows.forEach(row => {
|
|
276
|
-
});
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
TableAdvancedComponent.decorators = [
|
|
281
|
-
{ type: Component, args: [{
|
|
282
|
-
selector: 'desy-table-advanced',
|
|
283
|
-
template: "<ng-template #tableContent>\r\n <table role=\"grid\"\r\n [class]=\"['c-table-advanced border-t-2 border-b-2 border-neutral-base', classes] | makeHtmlList\"\r\n [attr.id]=\"id ? id : null\"\r\n [attr.role]=\"role ? role : null\"\r\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\r\n [attr.aria-describedby]=\"ariaDescribedBy ? ariaDescribedBy : null\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy ? ariaLabelledBy : null\"\r\n [attr.aria-hidden]=\"ariaHidden ? ariaHidden : null\"\r\n [attr.aria-disabled]=\"ariaDisabled ? ariaDisabled : null\"\r\n [attr.aria-controls]=\"ariaControls ? ariaControls : null\"\r\n [attr.aria-current]=\"ariaCurrent ? ariaCurrent : null\"\r\n [attr.aria-live]=\"ariaLive ? ariaLive : null\"\r\n [attr.aria-expanded]=\"ariaExpanded ? ariaExpanded : null\"\r\n [attr.aria-errormessage]=\"ariaErrorMessage ? ariaErrorMessage : null\"\r\n [attr.aria-haspopup]=\"ariaHasPopup ? ariaHasPopup : null\"\r\n [attr.tabindex]=\"tabindex ? tabindex : null\">\r\n <caption *ngIf=\"caption || captionComponent\" [class]=\"getCaptionClass()\">\r\n <ng-container *desyCustomInnerContent=\"{ component: captionComponent, text: caption ? caption : null }\"></ng-container>\r\n </caption>\r\n <thead *ngIf=\"getHeaderCells()\">\r\n <tr class=\"border-t border-neutral-base divide-x divide-neutral-base\">\r\n <th *ngIf=\"hasCheckboxes\" scope=\"col\" [class]=\"['align-top px-base py-xs', checkboxClasses] | makeHtmlList\">\r\n <span class=\"sr-only\">Seleccionar fila</span>\r\n </th>\r\n <th scope=\"col\" *ngFor=\"let item of getHeaderCells(); index as iHeader\" [id]=\"getIdHeader(iHeader)\"\r\n [attr.aria-sort]=\"item.orderBy ? getStringOrderBy(item.orderBy) : null\"\r\n [class]=\"['align-top px-base py-sm border-neutral-base border-b-0 text-left text-sm font-normal text-neutral-dark', item.classes] | makeHtmlList\"\r\n [attr.colspan]=\"item.colspan ? item.colspan : null\"\r\n [attr.rowspan]=\"item.rowspan ? item.rowspan : null\"\r\n [attr.role]=\"item.role ? item.role : null\"\r\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : null\"\r\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\r\n [attr.aria-labelledby]=\"item.ariaLabelledBy ? item.ariaLabelledBy : null\"\r\n [attr.aria-hidden]=\"item.ariaHidden ? item.ariaHidden : null\"\r\n [attr.aria-disabled]=\"item.ariaDisabled ? item.ariaDisabled : null\"\r\n [attr.aria-controls]=\"item.ariaControls ? item.ariaControls : null\"\r\n [attr.aria-current]=\"item.ariaCurrent ? item.ariaCurrent : null\"\r\n [attr.aria-live]=\"item.ariaLive ? item.ariaLive : null\"\r\n [attr.aria-expanded]=\"item.ariaExpanded ? item.ariaExpanded : null\"\r\n [attr.aria-errormessage]=\"item.ariaErrorMessage ? item.ariaErrorMessage : null\"\r\n [attr.aria-haspopup]=\"item.ariaHasPopup ? item.ariaHasPopup : null\"\r\n [attr.tabindex]=\"item.tabindex ? item.tabindex : null\">\r\n\r\n <span *ngIf=\"item.orderBy\" class=\"inline-block relative\" (click)=\"handleSortByColumn(iHeader)\" desyFocusClickedCell\r\n [attr.tabindex]=\"item.orderBy ? -1 : null\"\r\n [attr.role]=\"item.orderBy ? 'button' : null\">\r\n <ng-container *ngIf=\"item.text\">{{item.text}}</ng-container>\r\n <ng-container *ngIf=\"item.contentComponent\">\r\n <ng-container *desyCustomInnerContent=\"{ component: item.contentComponent }\"></ng-container>\r\n </ng-container>\r\n <span class=\"c-table-advanced__order\" *ngIf=\"item.orderBy\">\r\n <span class=\"sr-only\">Pulsa para ordenar por esta columna</span>\r\n <span class=\"c-table-advanced__ascending\" *ngIf=\"item.orderBy == orderByType.asc\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" aria-hidden=\"true\" width=\"1em\" height=\"1em\"><path d=\"M112.07 37.93l-35-35a10 10 0 00-14.14 0l-35 35a10 10 0 0014.14 14.14l13.66-13.66A2.5 2.5 0 0160 40.18V130a10 10 0 0020 0V40.18a2.5 2.5 0 014.27-1.77l13.66 13.66a10 10 0 0014.14-14.14z\" fill=\"currentColor\"/></svg>\r\n </span>\r\n <span class=\"c-table-advanced__descending\" *ngIf=\"item.orderBy == orderByType.desc\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" aria-hidden=\"true\" width=\"1em\" height=\"1em\"><path d=\"M27.93 102.07l35 35a10 10 0 0014.14 0l35-35a10 10 0 00-14.14-14.14l-13.66 13.66A2.5 2.5 0 0180 99.82V10a10 10 0 00-20 0v89.82a2.5 2.5 0 01-4.27 1.77L42.07 87.93a10 10 0 00-14.14 14.14z\" fill=\"currentColor\"/></svg>\r\n </span>\r\n <span class=\"c-table-advanced__none\" *ngIf=\"item.orderBy == orderByType.none\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" class=\"text-neutral-base\" aria-hidden=\"true\" width=\"1em\" height=\"1em\"><path d=\"M94.7 97.2l-17.2 17.19V25.61L94.7 42.8a7.5 7.5 0 0010.6-10.6l-30-30a7.49 7.49 0 00-10.6 0l-30 30a7.5 7.5 0 0010.6 10.6l17.2-17.19v88.78L45.3 97.2a7.5 7.5 0 10-10.6 10.6l30 30a7.48 7.48 0 0010.6 0l30-30a7.5 7.5 0 00-10.6-10.6z\" fill=\"currentColor\"/></svg>\r\n </span>\r\n </span>\r\n </span>\r\n\r\n <span *ngIf=\"!item.orderBy\" class=\"inline-block relative\">\r\n <ng-container *ngIf=\"item.text\">{{item.text}}</ng-container>\r\n <ng-container *ngIf=\"item.contentComponent\">\r\n <ng-container *desyCustomInnerContent=\"{ component: item.contentComponent }\"></ng-container>\r\n </ng-container>\r\n </span>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <tr class=\"divide-x divide-neutral-base\" *ngIf=\"hasFilters()\">\r\n <td *ngIf=\"hasCheckboxes\" [ngClass]=\"checkboxClasses\"></td>\r\n <td tabindex=\"-1\" *ngFor=\"let item of getHeaderCells(); index as iHead\" desyFocusClickedCell\r\n [class]=\"['align-top px-base pb-sm border-neutral-base border-b-0 text-left text-sm font-normal text-neutral-dark', item.classes] | makeHtmlList\">\r\n <ng-container *ngIf=\"item.hasSelect && getSelectForItem(item) != null\">\r\n <ng-container *ngTemplateOutlet=\"tableSelect; context: {selectable: getSelectForItem(item)}\"></ng-container>\r\n <ng-template #tableSelect let-selectable=\"selectable\">\r\n <desy-select [id]=\"getIdHeaderSelect(iHead)\"\r\n [labelData]=\"{ text: 'Filtrar en esta columna', classes: 'sr-only' }\"\r\n [classes]=\"selectable.classes ? selectable.classes : 'c-select--sm w-full mt-0'\"\r\n [formGroupClasses]=\"selectable.formGroupClasses ? selectable.formGroupClasses : 'mb-0'\"\r\n [name]=\"selectable.name\"\r\n [items]=\"getItemSelectOptions(selectable)\"\r\n [disabled]=\"selectable.disabled\"\r\n [describedBy]=\"getIdHeaderSelect(iHead)\"\r\n\r\n [(ngModel)]=\"item.valueSelect\" (ngModelChange)=\"handleInputSearch(item)\"\r\n\r\n [role]=\"selectable.role\"\r\n [ariaLabel]=\"selectable.ariaLabel\"\r\n [ariaDescribedBy]=\"selectable.ariaDescribedBy\"\r\n [ariaLabelledBy]=\"selectable.ariaLabelledBy\"\r\n [ariaHidden]=\"selectable.ariaHidden\"\r\n [ariaDisabled]=\"selectable.ariaDisabled\"\r\n [ariaControls]=\"selectable.ariaControls\"\r\n [ariaCurrent]=\"selectable.ariaCurrent\"\r\n [ariaLive]=\"selectable.ariaLive\"\r\n [ariaExpanded]=\"selectable.ariaExpanded\"\r\n [ariaErrorMessage]=\"selectable.ariaErrorMessage\"\r\n [ariaHasPopup]=\"selectable.ariaHasPopup\"\r\n [tabindex]=\"selectable.tabindex\">\r\n </desy-select>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <div *ngIf=\"item.hasSelect && item.hasFilter\" class=\"pb-sm\"></div>\r\n\r\n <desy-search-bar *ngIf=\"item.hasFilter\"\r\n [(ngModel)]=\"item.valueFilter\" [ngModelOptions]=\"{standalone: true}\"\r\n (clickEvent)=\"handleInputSearch(item)\"\r\n (ngModelChange)=\"handleInputSearch(item)\"\r\n labelText=\"Buscar en esta columna\"\r\n [id]=\"getIdHeaderFilter(iHead)\"\r\n placeholder=\"Buscar\"\r\n [classes]=\"['c-input--sm', item.filterClasses] | makeHtmlList\"\r\n buttonClasses=\"m-xs p-0.5 text-xs\"\r\n [describedBy]=\"getIdHeader(iHead)\"> </desy-search-bar>\r\n </td>\r\n </tr>\r\n\r\n\r\n <tr *ngFor=\"let row of getVisibleRows(); index as iRow\" class=\"border-t border-b border-neutral-base hover:bg-neutral-lighter\"\r\n [desyRow]=\"row\"\r\n [ngClass]=\"{'bg-neutral-light': hasCheckboxes && row.checked }\">\r\n <td *ngIf=\"hasCheckboxes\" desyFocusClickedCell [class]=\"['px-base py-sm', checkboxClasses] | makeHtmlList\"\r\n tabindex=\"-1\" >\r\n <div class=\"c-checkboxes c-checkboxes--sm\">\r\n <div>\r\n <div class=\"relative flex items-start\">\r\n <div class=\"flex items-center mx-sm\">\r\n <input type=\"checkbox\" class=\"w-6 h-6 transition duration-150 ease-in-out border-black focus:border-black focus:shadow-outline-focus-input focus:ring-4 focus:ring-offset-0 focus:ring-warning-base disabled:bg-neutral-light disabled:border-neutral-base text-primary-base\"\r\n [(ngModel)]=\"row.checked\" (ngModelChange)=\"handleCheckboxChange(row)\"\r\n [id]=\"getIdRowCheckbox(iRow)\"\r\n [name]=\"getIdRowCheckbox(iRow)\"\r\n [attr.aria-label]=\"'Fila ' + iRow\">\r\n </div>\r\n <div class=\"pt-0.5 leading-5\">\r\n <label class=\"sr-only block text-sm -mt-1\" [for]=\"getIdRowCheckbox(iRow)\">Selecciona fila {{ iRow }}</label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </td>\r\n <ng-container *ngFor=\"let cell of row.cellsList; first as isFirstCell; index as columnIndex\">\r\n <th *ngIf=\"firstCellIsHeader && isFirstCell; else elseTd\" scope=\"row\"\r\n [class]=\"['px-base py-xs border-neutral-base border-b-0 border-r text-left font-normal text-sm text-neutral-dark', cell.classes] | makeHtmlList\"\r\n desyCell [row]=\"row\" [rowIndex]=\"iRow\" [columnIndex]=\"columnIndex\"\r\n [attr.colspan]=\"cell.colspan ? cell.colspan : null\"\r\n [attr.rowspan]=\"cell.rowspan ? cell.rowspan : null\"\r\n [attr.id]=\"cell.id ? cell.id : null\"\r\n [attr.role]=\"cell.role ? cell.role : null\"\r\n [attr.aria-label]=\"cell.ariaLabel ? cell.ariaLabel : null\"\r\n [attr.aria-describedby]=\"cell.ariaDescribedBy ? cell.ariaDescribedBy : null\"\r\n [attr.aria-labelledby]=\"cell.ariaLabelledBy ? cell.ariaLabelledBy : null\"\r\n [attr.aria-hidden]=\"cell.ariaHidden ? cell.ariaHidden : null\"\r\n [attr.aria-disabled]=\"cell.ariaDisabled ? cell.ariaDisabled : null\"\r\n [attr.aria-controls]=\"cell.ariaControls ? cell.ariaControls : null\"\r\n [attr.aria-current]=\"cell.ariaCurrent ? cell.ariaCurrent : null\"\r\n [attr.aria-live]=\"cell.ariaLive ? cell.ariaLive : null\"\r\n [attr.aria-expanded]=\"cell.ariaExpanded ? cell.ariaExpanded : null\"\r\n [attr.aria-errormessage]=\"cell.ariaErrorMessage ? cell.ariaErrorMessage : null\"\r\n [attr.aria-haspopup]=\"cell.ariaHasPopup ? cell.ariaHasPopup : null\"\r\n [attr.tabindex]=\"cell.tabindex ? cell.tabindex : null\">\r\n <ng-container *desyCustomInnerContent=\"{ component: cell, html: cell.html, text: cell.text }\"></ng-container>\r\n </th>\r\n <ng-template #elseTd>\r\n <td tabindex=\"-1\" desyFocusClickedCell\r\n [class]=\"['px-base py-sm', cell.classes] | makeHtmlList\"\r\n desyCell [row]=\"row\" [rowIndex]=\"iRow\" [columnIndex]=\"columnIndex\"\r\n [attr.colspan]=\"cell.colspan ? cell.colspan : null\"\r\n [attr.rowspan]=\"cell.rowspan ? cell.rowspan : null\"\r\n [attr.id]=\"cell.id ? cell.id : null\"\r\n [attr.role]=\"cell.role ? cell.role : null\"\r\n [attr.aria-label]=\"cell.ariaLabel ? cell.ariaLabel : null\"\r\n [attr.aria-describedby]=\"cell.ariaDescribedBy ? cell.ariaDescribedBy : null\"\r\n [attr.aria-labelledby]=\"cell.ariaLabelledBy ? cell.ariaLabelledBy : null\"\r\n [attr.aria-hidden]=\"cell.ariaHidden ? cell.ariaHidden : null\"\r\n [attr.aria-disabled]=\"cell.ariaDisabled ? cell.ariaDisabled : null\"\r\n [attr.aria-controls]=\"cell.ariaControls ? cell.ariaControls : null\"\r\n [attr.aria-current]=\"cell.ariaCurrent ? cell.ariaCurrent : null\"\r\n [attr.aria-live]=\"cell.ariaLive ? cell.ariaLive : null\"\r\n [attr.aria-expanded]=\"cell.ariaExpanded ? cell.ariaExpanded : null\"\r\n [attr.aria-errormessage]=\"cell.ariaErrorMessage ? cell.ariaErrorMessage : null\"\r\n [attr.aria-haspopup]=\"cell.ariaHasPopup ? cell.ariaHasPopup : null\"\r\n [attr.tabindex]=\"cell.tabindex ? cell.tabindex : -1\">\r\n <ng-container *desyCustomInnerContent=\"{ component: cell, html: cell.html, text: cell.text }\"></ng-container>\r\n </td>\r\n </ng-template>\r\n </ng-container>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</ng-template>\r\n\r\n<div *ngIf=\"wrapper; else tableContent\" [class]=\"wrapper.classes\">\r\n <ng-container *ngTemplateOutlet=\"tableContent\"></ng-container>\r\n</div>\r\n"
|
|
284
|
-
},] }
|
|
285
|
-
];
|
|
286
|
-
TableAdvancedComponent.ctorParameters = () => [
|
|
287
|
-
{ type: ElementRef },
|
|
288
|
-
{ type: ChangeDetectorRef }
|
|
289
|
-
];
|
|
290
|
-
TableAdvancedComponent.propDecorators = {
|
|
291
|
-
rows: [{ type: Input }],
|
|
292
|
-
head: [{ type: Input }],
|
|
293
|
-
caption: [{ type: Input }],
|
|
294
|
-
captionClasses: [{ type: Input }],
|
|
295
|
-
firstCellIsHeader: [{ type: Input }],
|
|
296
|
-
hasCheckboxes: [{ type: Input }],
|
|
297
|
-
idPrefix: [{ type: Input }],
|
|
298
|
-
classes: [{ type: Input }],
|
|
299
|
-
checkboxClasses: [{ type: Input }],
|
|
300
|
-
id: [{ type: Input }],
|
|
301
|
-
wrapper: [{ type: Input }],
|
|
302
|
-
captionComponent: [{ type: ContentChildren, args: [TableCaptionComponent,] }],
|
|
303
|
-
headerComponent: [{ type: ContentChildren, args: [TableAdvancedHeaderComponent,] }],
|
|
304
|
-
rowComponentList: [{ type: ContentChildren, args: [TableAdvancedRowComponent,] }],
|
|
305
|
-
rowData: [{ type: ViewChildren, args: [RowDirective,] }],
|
|
306
|
-
rowsChange: [{ type: Output }],
|
|
307
|
-
rowsChecked: [{ type: Output }],
|
|
308
|
-
recalculateTable: [{ type: Output }]
|
|
309
|
-
};
|
|
310
|
-
__decorate([
|
|
311
|
-
DesyContentChild()
|
|
312
|
-
], TableAdvancedComponent.prototype, "captionComponent", void 0);
|
|
313
|
-
__decorate([
|
|
314
|
-
DesyContentChild()
|
|
315
|
-
], TableAdvancedComponent.prototype, "headerComponent", void 0);
|
|
316
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYWR2YW5jZWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzeS1hbmd1bGFyL3NyYy9saWIvZGVzeS10YWJsZXMvY29tcG9uZW50cy90YWJsZS1hZHZhbmNlZC90YWJsZS1hZHZhbmNlZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRU4sWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRCxPQUFPLEVBQW9CLE9BQU8sRUFBdUIsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQztBQUVsRixPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUMxRixPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUVwRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFFNUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0seURBQXlELENBQUM7QUFRekYsTUFBTSxPQUFPLHNCQUF1QixTQUFRLHNCQUFzQjtJQWlDaEUsWUFBb0IsRUFBYyxFQUFVLGNBQWlDO1FBQzNFLEtBQUssRUFBRSxDQUFDO1FBRFUsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQVJuRSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNoQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7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LEVBQUU7Z0VBQzZEO0FBR2pDO0lBRDlDLGdCQUFnQixFQUFFOytEQUMwRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRlbnRDb21wb25lbnQgfSBmcm9tICcuLy4uLy4uLy4uL2Rlc3ktY29tbW9ucy9jb21wb25lbnRzL2NvbnRlbnQvY29udGVudC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZHJlbixcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFZpZXdDaGlsZHJlblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0FjY2Vzc2liaWxpdHlDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzJztcclxuaW1wb3J0IHtTZWFyY2hVdGlsc30gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3V0aWxzL3NlYXJjaC11dGlscyc7XHJcbmltcG9ydCB7SGVhZENlbGxNb2RlbERhdGEsIE9yZGVyQnksIFJvd0RhdGEsIFdyYXBwZXJEYXRhfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHtUYWJsZUNhcHRpb25Db21wb25lbnR9IGZyb20gJy4uL3RhYmxlL2NvbXBvbmVudHMvdGFibGUtY2FwdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQge1RhYmxlQWR2YW5jZWRIZWFkZXJDZWxsQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtYWR2YW5jZWQtaGVhZGVyLWNlbGwuY29tcG9uZW50JztcclxuaW1wb3J0IHtUYWJsZUFkdmFuY2VkSGVhZGVyQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtYWR2YW5jZWQtaGVhZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VGFibGVBZHZhbmNlZFJvd0NvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLWFkdmFuY2VkLXJvdy5jb21wb25lbnQnO1xyXG5pbXBvcnQge0NlbGxEaXJlY3RpdmV9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY2VsbC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQge1Jvd0RpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9yb3cuZGlyZWN0aXZlJztcclxuaW1wb3J0IHtSZWNhbGN1bGF0ZVRhYmxlUGFyYW1zfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlY2FsY3VsYXRlLXRhYmxlLXBhcmFtcyc7XHJcbmltcG9ydCB7RGVzeUNvbnRlbnRDaGlsZH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2RlY29yYXRvcnMvZGVzeS1jb250ZW50LWNoaWxkLmRlY29yYXRvcic7XHJcbmltcG9ydCB7IFRhYmxlQWR2YW5jZWRTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtYWR2YW5jZWQtc2VsZWN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNlbGVjdEl0ZW1EYXRhIH0gZnJvbSAnLi4vLi4vLi4vZGVzeS1mb3Jtcy9pbnRlcmZhY2VzL3NlbGVjdC1pdGVtLWRhdGEnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdkZXN5LXRhYmxlLWFkdmFuY2VkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtYWR2YW5jZWQuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZUFkdmFuY2VkQ29tcG9uZW50IGV4dGVuZHMgQWNjZXNzaWJpbGl0eUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG5cclxuICBASW5wdXQoKSByb3dzOiBSb3dEYXRhW107IC8vIG9yaWdpbmFsIGRhdGFcclxuICBASW5wdXQoKSBoZWFkOiBIZWFkQ2VsbE1vZGVsRGF0YVtdO1xyXG5cclxuICBASW5wdXQoKSBjYXB0aW9uOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY2FwdGlvbkNsYXNzZXM6IHN0cmluZztcclxuICBASW5wdXQoKSBmaXJzdENlbGxJc0hlYWRlcjogYm9vbGVhbjtcclxuICBASW5wdXQoKSBoYXNDaGVja2JveGVzOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGlkUHJlZml4OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY2xhc3Nlczogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGNoZWNrYm94Q2xhc3Nlczogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgd3JhcHBlcjogV3JhcHBlckRhdGE7XHJcblxyXG5cclxuICBARGVzeUNvbnRlbnRDaGlsZCgpXHJcbiAgQENvbnRlbnRDaGlsZHJlbihUYWJsZUNhcHRpb25Db21wb25lbnQpIGNhcHRpb25Db21wb25lbnQ6IFRhYmxlQ2FwdGlvbkNvbXBvbmVudDtcclxuXHJcbiAgQERlc3lDb250ZW50Q2hpbGQoKVxyXG4gIEBDb250ZW50Q2hpbGRyZW4oVGFibGVBZHZhbmNlZEhlYWRlckNvbXBvbmVudCkgaGVhZGVyQ29tcG9uZW50OiBUYWJsZUFkdmFuY2VkSGVhZGVyQ29tcG9uZW50O1xyXG5cclxuICBAQ29udGVudENoaWxkcmVuKFRhYmxlQWR2YW5jZWRSb3dDb21wb25lbnQpIHJvd0NvbXBvbmVudExpc3Q6IFF1ZXJ5TGlzdDxUYWJsZUFkdmFuY2VkUm93Q29tcG9uZW50PjtcclxuICBAVmlld0NoaWxkcmVuKFJvd0RpcmVjdGl2ZSkgcm93RGF0YTogUXVlcnlMaXN0PFJvd0RpcmVjdGl2ZT47XHJcblxyXG4gIEBPdXRwdXQoKSByb3dzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSByb3dzQ2hlY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcmVjYWxjdWxhdGVUYWJsZSA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjYWxjdWxhdGVUYWJsZVBhcmFtcz4oKTtcclxuXHJcbiAgdmlzaWJsZVJvd3M6IFJvd0RhdGFbXXxUYWJsZUFkdmFuY2VkUm93Q29tcG9uZW50W107XHJcbiAgb3JkZXJCeVR5cGUgPSBPcmRlckJ5O1xyXG4gIGlzUmVzZXQ6IGJvb2xlYW47XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZWxlbW50c0ZvY3VzID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRleF0nKTtcclxuICAgIGlmIChlbGVtbnRzRm9jdXMpIHtcclxuICAgICAgZWxlbW50c0ZvY3VzLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZWNhbGN1bGF0ZVZpc2libGVFbGVtZW50cygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVmcmVzY2EgbGFzIGZpbGFzIHZpc2libGVzIHRyYXMgcmVhbGl6YXJzZSB1bmEgYsO6c3F1ZWRhIG8gdW5hIG9yZGVuYWNpw7NuXHJcbiAgICovXHJcbiAgcmVjYWxjdWxhdGVWaXNpYmxlRWxlbWVudHMoKTogdm9pZCB7XHJcbiAgICBjb25zdCByZWNhbGN1bGF0ZVBhcmFtcyA9IHRoaXMuYnVpbGRSZWNhbGN1bGF0ZVBhcmFtcygpO1xyXG5cclxuICAgIC8vIFNpIHNlIGNhcHR1cmEgZWwgZXZlbnRvIHJlY2FsY3VsYXRlVGFibGUgc2UgZGVqYSBhbCB1c3VhcmlvIGxhIHJlc3BvbnNhYmlsaWRhZCBkZSBmaWx0cmFyIHkgb3JkZW5hciBsb3MgZWxlbWVudG9zLlxyXG4gICAgaWYgKHRoaXMucmVjYWxjdWxhdGVUYWJsZS5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGUuZW1pdChyZWNhbGN1bGF0ZVBhcmFtcyk7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgLy8gU2UgZGViZW4gbW9zdHJhciB0b2RhcyBsYXMgZmlsYXMgdGVtcG9yYWxtZW50ZSBwYXJhIHBvZGVyIGFwbGljYXIgZWwgZmlsdHJvIHkgbGEgb3JkZW5hY2nDs24gc29icmUgZWwgY29udGVuaWRvIGluc2VydGFkb1xyXG4gICAgICB0aGlzLnZpc2libGVSb3dzID0gdGhpcy5nZXRSb3dzKCk7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgLy8gU2UgYXBsaWNhIGVsIGZpbHRybyB5IGxhIG9yZGVuYWNpw7NuXHJcbiAgICAgIGxldCByb3dEYXRhID0gdGhpcy5maWx0ZXJSb3dzKHJlY2FsY3VsYXRlUGFyYW1zLCB0aGlzLnJvd0RhdGEudG9BcnJheSgpKTtcclxuICAgICAgcm93RGF0YSA9IHRoaXMuc29ydFJvd3MocmVjYWxjdWxhdGVQYXJhbXMsIHJvd0RhdGEpO1xyXG4gICAgICB0aGlzLnZpc2libGVSb3dzID0gcm93RGF0YS5tYXAociA9PiByLmRlc3lSb3cpIGFzIFJvd0RhdGFbXXxUYWJsZUFkdmFuY2VkUm93Q29tcG9uZW50W107XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnN0cnV5ZSBsb3MgcGFyw6FtZXRyb3MgbmVjZXNhcmlvcyBwYXJhIHJlY2FsY3VsYXIgbGEgdGFibGEsIGluZGljYW5kbyBsb3MgZmlsdHJvcyB5IGxhIG9yZGVuYWNpw7NuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBidWlsZFJlY2FsY3VsYXRlUGFyYW1zKCk6IFJlY2FsY3VsYXRlVGFibGVQYXJhbXMge1xyXG4gICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICBmaWx0ZXJzOiBbXSxcclxuICAgICAgc29ydDogbnVsbFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBoZWFkID0gdGhpcy5nZXRIZWFkZXJDZWxscygpIGFzIChIZWFkQ2VsbE1vZGVsRGF0YXxUYWJsZUFkdmFuY2VkSGVhZGVyQ2VsbENvbXBvbmVudClbXTtcclxuICAgIGlmIChoZWFkKSB7XHJcbiAgICAgIGhlYWQuZm9yRWFjaCgoaGVhZGVyQ2VsbCwgaGVhZGVyQ2VsbEluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKGhlYWRlckNlbGwuaGFzRmlsdGVyICYmIGhlYWRlckNlbGwuYWN0aXZlRmlsdGVyKSB7XHJcbiAgICAgICAgICBwYXJhbXMuZmlsdGVycy5wdXNoKHsgY29sdW1uSW5kZXg6IGhlYWRlckNlbGxJbmRleCwgZmlsdGVyVGV4dDogaGVhZGVyQ2VsbC52YWx1ZUZpbHRlciB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoaGVhZGVyQ2VsbC5oYXNTZWxlY3QgJiYgaGVhZGVyQ2VsbC5hY3RpdmVTZWxlY3Qpe1xyXG4gICAgICAgICAgcGFyYW1zLmZpbHRlcnMucHVzaCh7IGNvbHVtbkluZGV4OiBoZWFkZXJDZWxsSW5kZXgsIGZpbHRlclRleHQ6IGhlYWRlckNlbGwudmFsdWVTZWxlY3QgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IG9yZGVyQnlDb2x1bW5JbmRleCA9IGhlYWQuZmluZEluZGV4KGNlbGwgPT4gY2VsbC5vcmRlckJ5ICYmIGNlbGwub3JkZXJCeSAhPT0gT3JkZXJCeS5ub25lKTtcclxuICAgICAgcGFyYW1zLnNvcnQgPSAob3JkZXJCeUNvbHVtbkluZGV4ID49IDApID8geyBjb2x1bW5JbmRleDogb3JkZXJCeUNvbHVtbkluZGV4LCBvcmRlcjogaGVhZFtvcmRlckJ5Q29sdW1uSW5kZXhdLm9yZGVyQnkgfSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcmFtcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGZ1bmNpb25lcyBkZSByZWNvZ2VyIGlkcywgeSBjYXJhY3RlcmlzdGljYXNcclxuICAgKi9cclxuXHJcbiAgaGFzRmlsdGVycygpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGhlYWQgPSB0aGlzLmdldEhlYWRlckNlbGxzKCk7XHJcbiAgICByZXR1cm4gaGVhZCA/IGhlYWQuZmluZEluZGV4KGNlbGwgPT4gKGNlbGwuaGFzRmlsdGVyKSB8fCAoY2VsbC5oYXNTZWxlY3QpKSA+PSAwIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRIZWFkZXJDZWxscygpOiBIZWFkQ2VsbE1vZGVsRGF0YVtdfFRhYmxlQWR2YW5jZWRIZWFkZXJDZWxsQ29tcG9uZW50W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuaGVhZGVyQ29tcG9uZW50ICYmIHRoaXMuaGVhZGVyQ29tcG9uZW50LmNlbGxzLmxlbmd0aCA+IDAgPyB0aGlzLmhlYWRlckNvbXBvbmVudC5jZWxscy50b0FycmF5KCkgOiB0aGlzLmhlYWQ7XHJcbiAgfVxyXG5cclxuICBnZXRSb3dzKCk6IFJvd0RhdGFbXXxUYWJsZUFkdmFuY2VkUm93Q29tcG9uZW50W10ge1xyXG4gICAgbGV0IHJvd3MgPSBbXTtcclxuICAgIGlmICh0aGlzLnJvd0NvbXBvbmVudExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICByb3dzID0gdGhpcy5yb3dDb21wb25lbnRMaXN0LnRvQXJyYXkoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5yb3dzKSB7XHJcbiAgICAgIHJvd3MgPSB0aGlzLnJvd3M7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm93cztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNpIHNlIHNvYnJlZXNjcmliZSAgZWwgY29tcG9ydGFtaWVudG8gcG9yIGRlZmVjdG8gZGUgZmlsdHJhZG8geSBvcmRlbmFjacOzbiwgc2UgdXRpbGl6YXLDoW4gbGFzIGluZGljYWRhcyBkZXNkZSBmdWVyYSBkZWxcclxuICAgKiBjb21wb25lbnRlICh5YSBzZWEgcG9yIHBhcsOhbWV0cm8gbyBwb3IgY29udGVuaWRvKS5cclxuICAgKiBTaSBubyBzZSBzb2JyZWVzY3JpYmUsIGRldnVlbHZlIGxhcyBmaWxhcyBjYWxjdWxhZGFzLlxyXG4gICAqL1xyXG4gIGdldFZpc2libGVSb3dzKCk6IFJvd0RhdGFbXXxUYWJsZUFkdmFuY2VkUm93Q29tcG9uZW50W10ge1xyXG4gICAgcmV0dXJuIHRoaXMucmVjYWxjdWxhdGVUYWJsZS5vYnNlcnZlcnMubGVuZ3RoID4gMCA/IHRoaXMuZ2V0Um93cygpIDogdGhpcy52aXNpYmxlUm93cztcclxuICB9XHJcblxyXG4gIGdldElkUHJlZml4KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pZFByZWZpeCA/IHRoaXMuaWRQcmVmaXggOiAnaWQtdGFibGUtcm93JztcclxuICB9XHJcblxyXG4gIGdldElkSGVhZGVyKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0SWRQcmVmaXgoKSArICctaGVhZGVyLScgKyBpbmRleDtcclxuICB9XHJcblxyXG4gIGdldElkUm93Q2hlY2tib3goaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRJZFByZWZpeCgpICsgJy1jaGVja2JveC0nICsgaW5kZXg7XHJcbiAgfVxyXG5cclxuICBnZXRJZEhlYWRlckZpbHRlcihpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmdldElkUHJlZml4KCkgKyAnLWhlYWRlci1maWx0ZXItJyArIGluZGV4O1xyXG4gIH1cclxuXHJcbiAgZ2V0SWRIZWFkZXJTZWxlY3QoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRJZFByZWZpeCgpICsgJy1oZWFkZXItc2VsZWN0LScgKyBpbmRleDtcclxuICB9XHJcblxyXG4gIGdldENhcHRpb25DbGFzcygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY2FwdGlvbkNvbXBvbmVudCA/IHRoaXMuY2FwdGlvbkNvbXBvbmVudC5jbGFzc2VzIDogdGhpcy5jYXB0aW9uQ2xhc3NlcztcclxuICB9XHJcblxyXG4gIGdldFN0cmluZ09yZGVyQnkob3JkZXJCeTogT3JkZXJCeSk6IHN0cmluZyB7XHJcbiAgICBpZiAob3JkZXJCeSA9PT0gT3JkZXJCeS5hc2Mpe1xyXG4gICAgICByZXR1cm4gJ2FzY2VuZGluZyc7XHJcbiAgICB9IGVsc2UgaWYgKG9yZGVyQnkgPT09IE9yZGVyQnkuZGVzYyl7XHJcbiAgICAgIHJldHVybiAnZGVzY2VuZGluZyc7XHJcbiAgICB9IGVsc2UgaWYgKG9yZGVyQnkgPT09IE9yZGVyQnkubm9uZSl7XHJcbiAgICAgIHJldHVybiAnbm9uZSc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3RGb3JJdGVtKGl0ZW06IFRhYmxlQWR2YW5jZWRIZWFkZXJDZWxsQ29tcG9uZW50KTogVGFibGVBZHZhbmNlZFNlbGVjdENvbXBvbmVudHtcclxuICAgIHJldHVybiBpdGVtLnNlbGVjdENvbXBvbmVudCA/IGl0ZW0uc2VsZWN0Q29tcG9uZW50IDogbnVsbDtcclxuICB9XHJcblxyXG4gIGdldEl0ZW1TZWxlY3RPcHRpb25zKGl0ZW06IFRhYmxlQWR2YW5jZWRTZWxlY3RDb21wb25lbnQpOiBTZWxlY3RJdGVtRGF0YVtdIHtcclxuICAgIHJldHVybiBpdGVtLnNlbGVjdEl0ZW1Db21wb25lbnRMaXN0ICYmIGl0ZW0uc2VsZWN0SXRlbUNvbXBvbmVudExpc3QubGVuZ3RoID4gMCA/XHJcbiAgICAgIGl0ZW0uc2VsZWN0SXRlbUNvbXBvbmVudExpc3QudG9BcnJheSgpIDogaXRlbS5pdGVtcztcclxuICB9XHJcblxyXG4gIGdldENvbnRlbnRDb21wb25lbnQoaXRlbTogVGFibGVBZHZhbmNlZEhlYWRlckNlbGxDb21wb25lbnQpOiBDb250ZW50Q29tcG9uZW50e1xyXG4gICAgcmV0dXJuIGl0ZW0uY29udGVudENvbXBvbmVudCA/IGl0ZW0uY29udGVudENvbXBvbmVudCA6IG51bGw7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogY2hlY2tzXHJcbiAgICovXHJcbiAgaGFuZGxlQ2hlY2tib3hDaGFuZ2Uocm93OiBSb3dEYXRhfFRhYmxlQWR2YW5jZWRSb3dDb21wb25lbnQpOiB2b2lkIHtcclxuICAgIGlmIChyb3cgaW5zdGFuY2VvZiBUYWJsZUFkdmFuY2VkUm93Q29tcG9uZW50KSB7XHJcbiAgICAgIHJvdy5jaGVja2VkQ2hhbmdlLmVtaXQocm93LmNoZWNrZWQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5ub3RpZnlDaGVja2VkQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQZXJtaXRlIGRlc21hcmNhciB0b2RhcyBsYXMgZmlsYXNcclxuICAgKi9cclxuICBwcml2YXRlIHVuY2hlY2tBbGwoKTogdm9pZHtcclxuICAgIHRoaXMuZ2V0Um93cygpLmZvckVhY2gociA9PiB7XHJcbiAgICAgIGNvbnN0IG11c3RFbWl0ID0gci5jaGVja2VkICYmIHIgaW5zdGFuY2VvZiBUYWJsZUFkdmFuY2VkUm93Q29tcG9uZW50O1xyXG4gICAgICByLmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgaWYgKG11c3RFbWl0KSB7XHJcbiAgICAgICAgKHIgYXMgVGFibGVBZHZhbmNlZFJvd0NvbXBvbmVudCkuY2hlY2tlZENoYW5nZS5lbWl0KHIuY2hlY2tlZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5ub3RpZnlDaGVja2VkQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBOb3RpZmljYSBjYW1iaW9zIGVuIGxhcyBmaWxhc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgbm90aWZ5Q2hlY2tlZENoYW5nZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnJvd0NvbXBvbmVudExpc3QubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93cyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgcm93Q2hlY2tzOiBhbnkgPSB7fTtcclxuICAgIHRoaXMuZ2V0Um93cygpLmZvckVhY2gociA9PiByb3dDaGVja3Nbci5pZF0gPSAhIXIuY2hlY2tlZCk7IC8vIFNlIGFwbGljYW4gdGFtYmnDqW4gYSBsYXMgbm8gdmlzaWJsZXNcclxuICAgIHRoaXMucm93c0NoZWNrZWQuZW1pdChyb3dDaGVja3MpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIGJ1c3F1ZWRhXHJcbiAgICovXHJcbiAgaGFuZGxlSW5wdXRTZWFyY2goaXRlbTogSGVhZENlbGxNb2RlbERhdGEpOiB2b2lkIHtcclxuICAgIGlmIChpdGVtLmhhc0ZpbHRlcikgeyAvLyBzaSB0aWVuZSBidXNjYWRvclxyXG4gICAgICBpdGVtLmFjdGl2ZUZpbHRlciA9ICEhaXRlbS52YWx1ZUZpbHRlcjtcclxuICAgICAgdGhpcy51bmNoZWNrQWxsKCk7XHJcbiAgICB9XHJcbiAgICBpZihpdGVtLmhhc1NlbGVjdCl7IC8vU2kgdGllbmUgc2VsZWNjaW9uYWJsZVxyXG4gICAgICBpdGVtLmFjdGl2ZVNlbGVjdCA9ICEhaXRlbS52YWx1ZVNlbGVjdDtcclxuICAgICAgdGhpcy51bmNoZWNrQWxsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZWNhbGN1bGF0ZVZpc2libGVFbGVtZW50cygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2UgZmlsdHJhbiBsYXMgZmlsYXMgc2Vnw7puIGxvIGVzcGVjaWZpY2FkbyBlbiBsYSBiYXJyYSBkZSBiw7pzcXVlZGEgZGUgY2FkYSBjb2x1bW5hLlxyXG4gICAqIFNpIG5vIGhheSBiw7pzcXVlZGEgc3NlIGRldnVlbHZlbiB0b2RhcyBsYXMgZmlsYXMuXHJcbiAgICogQHBhcmFtIHJlY2FsY3VsYXRlUGFyYW1zIHBhcmFtZXRyb3MgcGFyYSByZWNhbGN1bGFyIGxvcyBlbGVtZW50b3MgdmlzaWJsZXNcclxuICAgKiBAcGFyYW0gcm93cyBsaXN0YSBjb24gdG9kYXMgbGFzIGZpbGFzXHJcbiAgICogQHJldHVybiBsaXN0YSBkZSBmaWxhcyBmaWx0cmFkYVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZmlsdGVyUm93cyhyZWNhbGN1bGF0ZVBhcmFtczogUmVjYWxjdWxhdGVUYWJsZVBhcmFtcywgcm93czogUm93RGlyZWN0aXZlW10pOiBSb3dEaXJlY3RpdmVbXSB7XHJcbiAgICBsZXQgZmlsdGVyZWRSb3dzID0gcm93cztcclxuICAgIHJlY2FsY3VsYXRlUGFyYW1zLmZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xyXG4gICAgICBmaWx0ZXJlZFJvd3MgPSBmaWx0ZXJlZFJvd3MuZmlsdGVyKHJvdyA9PlxyXG4gICAgICAgIFNlYXJjaFV0aWxzLmNvbnRhaW5zQW55V29yZEZyb20ocm93LmdldENlbGwoZmlsdGVyLmNvbHVtbkluZGV4KS5nZXRDb250ZW50KCksIGZpbHRlci5maWx0ZXJUZXh0KSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBmaWx0ZXJlZFJvd3M7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBvcmRlbmFjaW9uXHJcbiAgICovXHJcblxyXG4gIC8qKlxyXG4gICAqIFBlcm1pdGUgaW5kaWNhciBxdWUgc2UgZGViZSBvcmRlbmFyIGxhIHRhYmxhXHJcbiAgICogQHBhcmFtIGluZGV4IGluZGljZSBkZSBsYSBjb2x1bW5hXHJcbiAgICovXHJcbiAgaGFuZGxlU29ydEJ5Q29sdW1uKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGhlYWQgPSB0aGlzLmdldEhlYWRlckNlbGxzKCk7XHJcbiAgICBpZiAoaGVhZCkge1xyXG4gICAgICBoZWFkLmZvckVhY2goKGNlbGwsIGNlbGxJbmRleCkgPT4ge1xyXG4gICAgICAgIGlmIChjZWxsLm9yZGVyQnkpIHtcclxuICAgICAgICAgIGNlbGwub3JkZXJCeSA9IGNlbGxJbmRleCA9PT0gaW5kZXggPyB0aGlzLmdldE5leHREaXJlY3Rpb24oY2VsbCkgOiBPcmRlckJ5Lm5vbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlY2FsY3VsYXRlVmlzaWJsZUVsZW1lbnRzKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogT3JkZW5hIGxhcyBmaWxhcyBpbmRpY2FkYXMgc2Vnw7puIGxhIGNvbHVtbmEgZXNwZWNpZmljYWRhIGVuIGxhIGNhYmVjZXJhXHJcbiAgICogQHBhcmFtIHJlY2FsY3VsYXRlUGFyYW1zIHBhcmFtZXRyb3MgcGFyYSByZWNhbGN1bGFyIGxvcyBlbGVtZW50b3MgdmlzaWJsZXNcclxuICAgKiBAcGFyYW0gcm93cyBmaWxhcyBkZSBsYSB0YWJsYSBhIG9yZGVuYXJcclxuICAgKiBAcmV0dXJuIG1pc21hcyBmaWxhcyBwZXJvIG9yZGVuYWRhcyBwb3IgbGEgY29sdW1uYSBpbmRpY2FkYVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc29ydFJvd3MocmVjYWxjdWxhdGVQYXJhbXM6IFJlY2FsY3VsYXRlVGFibGVQYXJhbXMsIHJvd3M6IFJvd0RpcmVjdGl2ZVtdKTogUm93RGlyZWN0aXZlW10ge1xyXG4gICAgbGV0IHNvcnRlZFJvd3MgPSByb3dzO1xyXG4gICAgaWYgKHJlY2FsY3VsYXRlUGFyYW1zLnNvcnQpIHtcclxuICAgICAgY29uc3QgY29sdW1uSW5kZXggPSByZWNhbGN1bGF0ZVBhcmFtcy5zb3J0LmNvbHVtbkluZGV4O1xyXG4gICAgICBjb25zdCBpc0FzYyA9IHJlY2FsY3VsYXRlUGFyYW1zLnNvcnQub3JkZXIgPT09IE9yZGVyQnkuYXNjO1xyXG4gICAgICBzb3J0ZWRSb3dzID0gcm93cy5zb3J0KChhLCBiKSA9PlxyXG4gICAgICAgIHRoaXMuY29tcGFyZUNlbGxDb250ZW50KGEuZ2V0Q2VsbChjb2x1bW5JbmRleCksIGIuZ2V0Q2VsbChjb2x1bW5JbmRleCksIGlzQXNjKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNvcnRlZFJvd3M7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb21wYXJhIGVsIGNvbnRlbmlkbyBkZSBkb3MgY2VsZGFzLiBFc3RlIHNlIGludmllcnRlIHNpIGVsIG9yZGVuIGVzcGVjaWZpY2FkbyBlcyBkZXNjZW5kZW50ZS5cclxuICAgKi9cclxuICBjb21wYXJlQ2VsbENvbnRlbnQoYTogQ2VsbERpcmVjdGl2ZSwgYjogQ2VsbERpcmVjdGl2ZSwgaXNBc2M6IGJvb2xlYW4pOiBudW1iZXJ7XHJcbiAgICBsZXQgcmVzdWx0O1xyXG4gICAgY29uc3QgYUNvbXBhcmFibGUgPSB0aGlzLmNsZWFuQ3VycmVuY3koYS5nZXRDb250ZW50KCkpO1xyXG4gICAgY29uc3QgYkNvbXBhcmFibGUgPSB0aGlzLmNsZWFuQ3VycmVuY3koYi5nZXRDb250ZW50KCkpO1xyXG5cclxuICAgIGlmIChpc05hTigrYUNvbXBhcmFibGUpICYmIGlzTmFOKCtiQ29tcGFyYWJsZSkgKSB7IC8vIHNvbiB0ZXh0b3NcclxuICAgICAgcmVzdWx0ID0gYUNvbXBhcmFibGUubG9jYWxlQ29tcGFyZShiQ29tcGFyYWJsZSwgJ2VzJywgeyBzZW5zaXRpdml0eTogJ2Jhc2UnLCBpZ25vcmVQdW5jdHVhdGlvbjogdHJ1ZSB9KTtcclxuICAgIH1lbHNleyAvLyBzb24gbnVtZXJvc1xyXG4gICAgICByZXN1bHQgPSBhQ29tcGFyYWJsZS5sb2NhbGVDb21wYXJlKGJDb21wYXJhYmxlLCB1bmRlZmluZWQsIHsgbnVtZXJpYzogdHJ1ZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0ICogKGlzQXNjID8gMSA6IC0xKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHNlIGNhbGN1bGEgbGEgb3JkZW5hY2nDs24gbnVldmFcclxuICAgKi9cclxuICBwcml2YXRlIGdldE5leHREaXJlY3Rpb24oaXRlbTogSGVhZENlbGxNb2RlbERhdGEpOiBPcmRlckJ5IHtcclxuICAgIGlmIChpdGVtLm9yZGVyQnkgPT09IE9yZGVyQnkubm9uZSB8fCBpdGVtLm9yZGVyQnkgPT09IE9yZGVyQnkuZGVzYykge1xyXG4gICAgICByZXR1cm4gT3JkZXJCeS5hc2M7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gT3JkZXJCeS5kZXNjO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogc2kgZXMgdW5hIGNhbnRpZGFkIGRlIGRpbmVybyBzZSBxdWl0YSDigqwgcGFyYSBwb2RlciBjb21wYXJhciBsb3MgbnVtZXJvc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgY2xlYW5DdXJyZW5jeSh0eHQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoL1tcXGQuLF0rW1xc4oKsXS9nLnRlc3QodHh0KSkge1xyXG4gICAgICB0eHQgPSB0eHQucmVwbGFjZSgv4oKsL2csICcnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0eHQ7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RGaWx0ZXIoaXRlbTogVGFibGVBZHZhbmNlZFNlbGVjdENvbXBvbmVudCwgaXRlbVZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGl0ZW0udmFsdWVDaGFuZ2UuZW1pdChpdGVtVmFsdWUpO1xyXG5cclxuICAgIGNvbnN0IGhlYWQgPSB0aGlzLmdldEhlYWRlckNlbGxzKCk7XHJcbiAgICBjb25zdCByb3dzID0gdGhpcy5nZXRSb3dzKCk7XHJcbiAgICBpZiAoaGVhZCAmJiByb3dzKSB7XHJcbiAgICAgIGhlYWQuZm9yRWFjaCgoY2VsbDogVGFibGVBZHZhbmNlZEhlYWRlckNlbGxDb21wb25lbnQsIGNlbGxJbmRleCkgPT4ge1xyXG4gICAgICB9KTtcclxuICAgICAgcm93cy5mb3JFYWNoKHJvdyA9PiB7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, Input, Output, ViewChildren } from '@angular/core';
|
|
3
|
+
import { AccessibilityComponent } from '../../../shared/components';
|
|
4
|
+
import { SearchUtils } from '../../../shared/utils/search-utils';
|
|
5
|
+
import { OrderBy } from '../../interfaces';
|
|
6
|
+
import { TableCaptionComponent } from '../table/components/table-caption.component';
|
|
7
|
+
import { TableAdvancedHeaderComponent } from './components/table-advanced-header.component';
|
|
8
|
+
import { TableAdvancedRowComponent } from './components/table-advanced-row.component';
|
|
9
|
+
import { RowDirective } from '../../directives/row.directive';
|
|
10
|
+
import { DesyContentChild } from '../../../shared/decorators/desy-content-child.decorator';
|
|
11
|
+
export class TableAdvancedComponent extends AccessibilityComponent {
|
|
12
|
+
constructor(el, changeDetector) {
|
|
13
|
+
super();
|
|
14
|
+
this.el = el;
|
|
15
|
+
this.changeDetector = changeDetector;
|
|
16
|
+
this.rowsChange = new EventEmitter();
|
|
17
|
+
this.rowsChecked = new EventEmitter();
|
|
18
|
+
this.recalculateTable = new EventEmitter();
|
|
19
|
+
this.orderByType = OrderBy;
|
|
20
|
+
}
|
|
21
|
+
ngAfterViewInit() {
|
|
22
|
+
const elemntsFocus = this.el.nativeElement.querySelector('[tabindex]');
|
|
23
|
+
if (elemntsFocus) {
|
|
24
|
+
elemntsFocus.setAttribute('tabindex', '0');
|
|
25
|
+
}
|
|
26
|
+
this.recalculateVisibleElements();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Refresca las filas visibles tras realizarse una búsqueda o una ordenación
|
|
30
|
+
*/
|
|
31
|
+
recalculateVisibleElements() {
|
|
32
|
+
const recalculateParams = this.buildRecalculateParams();
|
|
33
|
+
// Si se captura el evento recalculateTable se deja al usuario la responsabilidad de filtrar y ordenar los elementos.
|
|
34
|
+
if (this.recalculateTable.observers.length > 0) {
|
|
35
|
+
this.recalculateTable.emit(recalculateParams);
|
|
36
|
+
this.changeDetector.markForCheck();
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
// Se deben mostrar todas las filas temporalmente para poder aplicar el filtro y la ordenación sobre el contenido insertado
|
|
40
|
+
this.visibleRows = this.getRows();
|
|
41
|
+
this.changeDetector.detectChanges();
|
|
42
|
+
// Se aplica el filtro y la ordenación
|
|
43
|
+
let rowData = this.filterRows(recalculateParams, this.rowData.toArray());
|
|
44
|
+
rowData = this.sortRows(recalculateParams, rowData);
|
|
45
|
+
this.visibleRows = rowData.map(r => r.desyRow);
|
|
46
|
+
this.changeDetector.detectChanges();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Construye los parámetros necesarios para recalcular la tabla, indicando los filtros y la ordenación
|
|
51
|
+
*/
|
|
52
|
+
buildRecalculateParams() {
|
|
53
|
+
const params = {
|
|
54
|
+
filters: [],
|
|
55
|
+
sort: null
|
|
56
|
+
};
|
|
57
|
+
const head = this.getHeaderCells();
|
|
58
|
+
if (head) {
|
|
59
|
+
head.forEach((headerCell, headerCellIndex) => {
|
|
60
|
+
if (headerCell.hasFilter && headerCell.activeFilter) {
|
|
61
|
+
params.filters.push({ columnIndex: headerCellIndex, filterText: headerCell.valueFilter });
|
|
62
|
+
}
|
|
63
|
+
if (headerCell.hasSelect && headerCell.activeSelect) {
|
|
64
|
+
params.filters.push({ columnIndex: headerCellIndex, filterText: headerCell.valueSelect });
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
const orderByColumnIndex = head.findIndex(cell => cell.orderBy && cell.orderBy !== OrderBy.none);
|
|
68
|
+
params.sort = (orderByColumnIndex >= 0) ? { columnIndex: orderByColumnIndex, order: head[orderByColumnIndex].orderBy } : null;
|
|
69
|
+
}
|
|
70
|
+
return params;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* funciones de recoger ids, y caracteristicas
|
|
74
|
+
*/
|
|
75
|
+
hasFilters() {
|
|
76
|
+
const head = this.getHeaderCells();
|
|
77
|
+
return head ? head.findIndex(cell => (cell.hasFilter) || (cell.hasSelect)) >= 0 : false;
|
|
78
|
+
}
|
|
79
|
+
getHeaderCells() {
|
|
80
|
+
return this.headerComponent && this.headerComponent.cells.length > 0 ? this.headerComponent.cells.toArray() : this.head;
|
|
81
|
+
}
|
|
82
|
+
getRows() {
|
|
83
|
+
let rows = [];
|
|
84
|
+
if (this.rowComponentList.length > 0) {
|
|
85
|
+
rows = this.rowComponentList.toArray();
|
|
86
|
+
}
|
|
87
|
+
else if (this.rows) {
|
|
88
|
+
rows = this.rows;
|
|
89
|
+
}
|
|
90
|
+
return rows;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Si se sobreescribe el comportamiento por defecto de filtrado y ordenación, se utilizarán las indicadas desde fuera del
|
|
94
|
+
* componente (ya sea por parámetro o por contenido).
|
|
95
|
+
* Si no se sobreescribe, devuelve las filas calculadas.
|
|
96
|
+
*/
|
|
97
|
+
getVisibleRows() {
|
|
98
|
+
return this.recalculateTable.observers.length > 0 ? this.getRows() : this.visibleRows;
|
|
99
|
+
}
|
|
100
|
+
getIdPrefix() {
|
|
101
|
+
return this.idPrefix ? this.idPrefix : 'id-table-row';
|
|
102
|
+
}
|
|
103
|
+
getIdHeader(index) {
|
|
104
|
+
return this.getIdPrefix() + '-header-' + index;
|
|
105
|
+
}
|
|
106
|
+
getIdRowCheckbox(index) {
|
|
107
|
+
return this.getIdPrefix() + '-checkbox-' + index;
|
|
108
|
+
}
|
|
109
|
+
getIdHeaderFilter(index) {
|
|
110
|
+
return this.getIdPrefix() + '-header-filter-' + index;
|
|
111
|
+
}
|
|
112
|
+
getIdHeaderSelect(index) {
|
|
113
|
+
return this.getIdPrefix() + '-header-select-' + index;
|
|
114
|
+
}
|
|
115
|
+
getCaptionClass() {
|
|
116
|
+
return this.captionComponent ? this.captionComponent.classes : this.captionClasses;
|
|
117
|
+
}
|
|
118
|
+
getStringOrderBy(orderBy) {
|
|
119
|
+
if (orderBy === OrderBy.asc) {
|
|
120
|
+
return 'ascending';
|
|
121
|
+
}
|
|
122
|
+
else if (orderBy === OrderBy.desc) {
|
|
123
|
+
return 'descending';
|
|
124
|
+
}
|
|
125
|
+
else if (orderBy === OrderBy.none) {
|
|
126
|
+
return 'none';
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
getSelectForItem(item) {
|
|
130
|
+
return item.selectComponent ? item.selectComponent : null;
|
|
131
|
+
}
|
|
132
|
+
getItemSelectOptions(item) {
|
|
133
|
+
return item.selectItemComponentList && item.selectItemComponentList.length > 0 ?
|
|
134
|
+
item.selectItemComponentList.toArray() : item.items;
|
|
135
|
+
}
|
|
136
|
+
getContentComponent(item) {
|
|
137
|
+
return item.contentComponent ? item.contentComponent : null;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* checks
|
|
141
|
+
*/
|
|
142
|
+
handleCheckboxChange(row) {
|
|
143
|
+
if (row instanceof TableAdvancedRowComponent) {
|
|
144
|
+
row.checkedChange.emit(row.checked);
|
|
145
|
+
}
|
|
146
|
+
this.notifyCheckedChange();
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Permite desmarcar todas las filas
|
|
150
|
+
*/
|
|
151
|
+
uncheckAll() {
|
|
152
|
+
this.getRows().forEach(r => {
|
|
153
|
+
const mustEmit = r.checked && r instanceof TableAdvancedRowComponent;
|
|
154
|
+
r.checked = false;
|
|
155
|
+
if (mustEmit) {
|
|
156
|
+
r.checkedChange.emit(r.checked);
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
this.notifyCheckedChange();
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Notifica cambios en las filas
|
|
163
|
+
*/
|
|
164
|
+
notifyCheckedChange() {
|
|
165
|
+
if (this.rowComponentList.length === 0) {
|
|
166
|
+
this.rowsChange.emit(this.rows);
|
|
167
|
+
}
|
|
168
|
+
const rowChecks = {};
|
|
169
|
+
this.getRows().forEach(r => rowChecks[r.id] = !!r.checked); // Se aplican también a las no visibles
|
|
170
|
+
this.rowsChecked.emit(rowChecks);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* busqueda
|
|
174
|
+
*/
|
|
175
|
+
handleInputSearch(item) {
|
|
176
|
+
if (item.hasFilter) { // si tiene buscador
|
|
177
|
+
item.activeFilter = !!item.valueFilter;
|
|
178
|
+
this.uncheckAll();
|
|
179
|
+
}
|
|
180
|
+
if (item.hasSelect) { //Si tiene seleccionable
|
|
181
|
+
item.activeSelect = !!item.valueSelect;
|
|
182
|
+
this.uncheckAll();
|
|
183
|
+
}
|
|
184
|
+
this.recalculateVisibleElements();
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Se filtran las filas según lo especificado en la barra de búsqueda de cada columna.
|
|
188
|
+
* Si no hay búsqueda sse devuelven todas las filas.
|
|
189
|
+
* @param recalculateParams parametros para recalcular los elementos visibles
|
|
190
|
+
* @param rows lista con todas las filas
|
|
191
|
+
* @return lista de filas filtrada
|
|
192
|
+
*/
|
|
193
|
+
filterRows(recalculateParams, rows) {
|
|
194
|
+
let filteredRows = rows;
|
|
195
|
+
recalculateParams.filters.forEach(filter => {
|
|
196
|
+
filteredRows = filteredRows.filter(row => SearchUtils.containsAnyWordFrom(row.getCell(filter.columnIndex).getContent(), filter.filterText));
|
|
197
|
+
});
|
|
198
|
+
return filteredRows;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* ordenacion
|
|
202
|
+
*/
|
|
203
|
+
/**
|
|
204
|
+
* Permite indicar que se debe ordenar la tabla
|
|
205
|
+
* @param index indice de la columna
|
|
206
|
+
*/
|
|
207
|
+
handleSortByColumn(index) {
|
|
208
|
+
const head = this.getHeaderCells();
|
|
209
|
+
if (head) {
|
|
210
|
+
head.forEach((cell, cellIndex) => {
|
|
211
|
+
if (cell.orderBy) {
|
|
212
|
+
cell.orderBy = cellIndex === index ? this.getNextDirection(cell) : OrderBy.none;
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
this.recalculateVisibleElements();
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Ordena las filas indicadas según la columna especificada en la cabecera
|
|
220
|
+
* @param recalculateParams parametros para recalcular los elementos visibles
|
|
221
|
+
* @param rows filas de la tabla a ordenar
|
|
222
|
+
* @return mismas filas pero ordenadas por la columna indicada
|
|
223
|
+
*/
|
|
224
|
+
sortRows(recalculateParams, rows) {
|
|
225
|
+
let sortedRows = rows;
|
|
226
|
+
if (recalculateParams.sort) {
|
|
227
|
+
const columnIndex = recalculateParams.sort.columnIndex;
|
|
228
|
+
const isAsc = recalculateParams.sort.order === OrderBy.asc;
|
|
229
|
+
sortedRows = rows.sort((a, b) => this.compareCellContent(a.getCell(columnIndex), b.getCell(columnIndex), isAsc));
|
|
230
|
+
}
|
|
231
|
+
return sortedRows;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Compara el contenido de dos celdas. Este se invierte si el orden especificado es descendente.
|
|
235
|
+
*/
|
|
236
|
+
compareCellContent(a, b, isAsc) {
|
|
237
|
+
let result;
|
|
238
|
+
const aComparable = this.cleanCurrency(a.getContent());
|
|
239
|
+
const bComparable = this.cleanCurrency(b.getContent());
|
|
240
|
+
if (isNaN(+aComparable) && isNaN(+bComparable)) { // son textos
|
|
241
|
+
result = aComparable.localeCompare(bComparable, 'es', { sensitivity: 'base', ignorePunctuation: true });
|
|
242
|
+
}
|
|
243
|
+
else { // son numeros
|
|
244
|
+
result = aComparable.localeCompare(bComparable, undefined, { numeric: true });
|
|
245
|
+
}
|
|
246
|
+
return result * (isAsc ? 1 : -1);
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* se calcula la ordenación nueva
|
|
250
|
+
*/
|
|
251
|
+
getNextDirection(item) {
|
|
252
|
+
if (item.orderBy === OrderBy.none || item.orderBy === OrderBy.desc) {
|
|
253
|
+
return OrderBy.asc;
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
return OrderBy.desc;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* si es una cantidad de dinero se quita € para poder comparar los numeros
|
|
261
|
+
*/
|
|
262
|
+
cleanCurrency(txt) {
|
|
263
|
+
if (/[\d.,]+[\€]/g.test(txt)) {
|
|
264
|
+
txt = txt.replace(/€/g, '');
|
|
265
|
+
}
|
|
266
|
+
return txt;
|
|
267
|
+
}
|
|
268
|
+
selectFilter(item, itemValue) {
|
|
269
|
+
item.valueChange.emit(itemValue);
|
|
270
|
+
const head = this.getHeaderCells();
|
|
271
|
+
const rows = this.getRows();
|
|
272
|
+
if (head && rows) {
|
|
273
|
+
head.forEach((cell, cellIndex) => {
|
|
274
|
+
});
|
|
275
|
+
rows.forEach(row => {
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
TableAdvancedComponent.decorators = [
|
|
281
|
+
{ type: Component, args: [{
|
|
282
|
+
selector: 'desy-table-advanced',
|
|
283
|
+
template: "<ng-template #tableContent>\n <table role=\"grid\"\n [class]=\"['c-table-advanced border-t-2 border-b-2 border-neutral-base', classes] | makeHtmlList\"\n [attr.id]=\"id ? id : null\"\n [attr.role]=\"role ? role : null\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby]=\"ariaDescribedBy ? ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"ariaLabelledBy ? ariaLabelledBy : null\"\n [attr.aria-hidden]=\"ariaHidden ? ariaHidden : null\"\n [attr.aria-disabled]=\"ariaDisabled ? ariaDisabled : null\"\n [attr.aria-controls]=\"ariaControls ? ariaControls : null\"\n [attr.aria-current]=\"ariaCurrent ? ariaCurrent : null\"\n [attr.aria-live]=\"ariaLive ? ariaLive : null\"\n [attr.aria-expanded]=\"ariaExpanded ? ariaExpanded : null\"\n [attr.aria-errormessage]=\"ariaErrorMessage ? ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"ariaHasPopup ? ariaHasPopup : null\"\n [attr.tabindex]=\"tabindex ? tabindex : null\">\n <caption *ngIf=\"caption || captionComponent\" [class]=\"getCaptionClass()\">\n <ng-container *desyCustomInnerContent=\"{ component: captionComponent, text: caption ? caption : null }\"></ng-container>\n </caption>\n <thead *ngIf=\"getHeaderCells()\">\n <tr class=\"border-t border-neutral-base divide-x divide-neutral-base\">\n <th *ngIf=\"hasCheckboxes\" scope=\"col\" [class]=\"['align-top px-base py-xs', checkboxClasses] | makeHtmlList\">\n <span class=\"sr-only\">Seleccionar fila</span>\n </th>\n <th scope=\"col\" *ngFor=\"let item of getHeaderCells(); index as iHeader\" [id]=\"getIdHeader(iHeader)\"\n [attr.aria-sort]=\"item.orderBy ? getStringOrderBy(item.orderBy) : null\"\n [class]=\"['align-top px-base py-sm border-neutral-base border-b-0 text-left text-sm font-normal text-neutral-dark', item.classes] | makeHtmlList\"\n [attr.colspan]=\"item.colspan ? item.colspan : null\"\n [attr.rowspan]=\"item.rowspan ? item.rowspan : null\"\n [attr.role]=\"item.role ? item.role : null\"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : 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-disabled]=\"item.ariaDisabled ? item.ariaDisabled : 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.tabindex]=\"item.tabindex ? item.tabindex : null\">\n\n <span *ngIf=\"item.orderBy\" class=\"inline-block relative\" (click)=\"handleSortByColumn(iHeader)\" desyFocusClickedCell\n [attr.tabindex]=\"item.orderBy ? -1 : null\"\n [attr.role]=\"item.orderBy ? 'button' : null\">\n <ng-container *ngIf=\"item.text\">{{item.text}}</ng-container>\n <ng-container *ngIf=\"item.contentComponent\">\n <ng-container *desyCustomInnerContent=\"{ component: item.contentComponent }\"></ng-container>\n </ng-container>\n <span class=\"c-table-advanced__order\" *ngIf=\"item.orderBy\">\n <span class=\"sr-only\">Pulsa para ordenar por esta columna</span>\n <span class=\"c-table-advanced__ascending\" *ngIf=\"item.orderBy == orderByType.asc\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" aria-hidden=\"true\" width=\"1em\" height=\"1em\"><path d=\"M112.07 37.93l-35-35a10 10 0 00-14.14 0l-35 35a10 10 0 0014.14 14.14l13.66-13.66A2.5 2.5 0 0160 40.18V130a10 10 0 0020 0V40.18a2.5 2.5 0 014.27-1.77l13.66 13.66a10 10 0 0014.14-14.14z\" fill=\"currentColor\"/></svg>\n </span>\n <span class=\"c-table-advanced__descending\" *ngIf=\"item.orderBy == orderByType.desc\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" aria-hidden=\"true\" width=\"1em\" height=\"1em\"><path d=\"M27.93 102.07l35 35a10 10 0 0014.14 0l35-35a10 10 0 00-14.14-14.14l-13.66 13.66A2.5 2.5 0 0180 99.82V10a10 10 0 00-20 0v89.82a2.5 2.5 0 01-4.27 1.77L42.07 87.93a10 10 0 00-14.14 14.14z\" fill=\"currentColor\"/></svg>\n </span>\n <span class=\"c-table-advanced__none\" *ngIf=\"item.orderBy == orderByType.none\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" class=\"text-neutral-base\" aria-hidden=\"true\" width=\"1em\" height=\"1em\"><path d=\"M94.7 97.2l-17.2 17.19V25.61L94.7 42.8a7.5 7.5 0 0010.6-10.6l-30-30a7.49 7.49 0 00-10.6 0l-30 30a7.5 7.5 0 0010.6 10.6l17.2-17.19v88.78L45.3 97.2a7.5 7.5 0 10-10.6 10.6l30 30a7.48 7.48 0 0010.6 0l30-30a7.5 7.5 0 00-10.6-10.6z\" fill=\"currentColor\"/></svg>\n </span>\n </span>\n </span>\n\n <span *ngIf=\"!item.orderBy\" class=\"inline-block relative\">\n <ng-container *ngIf=\"item.text\">{{item.text}}</ng-container>\n <ng-container *ngIf=\"item.contentComponent\">\n <ng-container *desyCustomInnerContent=\"{ component: item.contentComponent }\"></ng-container>\n </ng-container>\n </span>\n </th>\n </tr>\n </thead>\n\n <tbody>\n <tr class=\"divide-x divide-neutral-base\" *ngIf=\"hasFilters()\">\n <td *ngIf=\"hasCheckboxes\" [ngClass]=\"checkboxClasses\"></td>\n <td tabindex=\"-1\" *ngFor=\"let item of getHeaderCells(); index as iHead\" desyFocusClickedCell\n [class]=\"['align-top px-base pb-sm border-neutral-base border-b-0 text-left text-sm font-normal text-neutral-dark', item.classes] | makeHtmlList\">\n <ng-container *ngIf=\"item.hasSelect && getSelectForItem(item) != null\">\n <ng-container *ngTemplateOutlet=\"tableSelect; context: {selectable: getSelectForItem(item)}\"></ng-container>\n <ng-template #tableSelect let-selectable=\"selectable\">\n <desy-select [id]=\"getIdHeaderSelect(iHead)\"\n [labelData]=\"{ text: 'Filtrar en esta columna', classes: 'sr-only' }\"\n [classes]=\"selectable.classes ? selectable.classes : 'c-select--sm w-full mt-0'\"\n [formGroupClasses]=\"selectable.formGroupClasses ? selectable.formGroupClasses : 'mb-0'\"\n [name]=\"selectable.name\"\n [items]=\"getItemSelectOptions(selectable)\"\n [disabled]=\"selectable.disabled\"\n [describedBy]=\"getIdHeaderSelect(iHead)\"\n\n [(ngModel)]=\"item.valueSelect\" (ngModelChange)=\"handleInputSearch(item)\"\n\n [role]=\"selectable.role\"\n [ariaLabel]=\"selectable.ariaLabel\"\n [ariaDescribedBy]=\"selectable.ariaDescribedBy\"\n [ariaLabelledBy]=\"selectable.ariaLabelledBy\"\n [ariaHidden]=\"selectable.ariaHidden\"\n [ariaDisabled]=\"selectable.ariaDisabled\"\n [ariaControls]=\"selectable.ariaControls\"\n [ariaCurrent]=\"selectable.ariaCurrent\"\n [ariaLive]=\"selectable.ariaLive\"\n [ariaExpanded]=\"selectable.ariaExpanded\"\n [ariaErrorMessage]=\"selectable.ariaErrorMessage\"\n [ariaHasPopup]=\"selectable.ariaHasPopup\"\n [tabindex]=\"selectable.tabindex\">\n </desy-select>\n </ng-template>\n </ng-container>\n\n <div *ngIf=\"item.hasSelect && item.hasFilter\" class=\"pb-sm\"></div>\n\n <desy-search-bar *ngIf=\"item.hasFilter\"\n [(ngModel)]=\"item.valueFilter\" [ngModelOptions]=\"{standalone: true}\"\n (clickEvent)=\"handleInputSearch(item)\"\n (ngModelChange)=\"handleInputSearch(item)\"\n labelText=\"Buscar en esta columna\"\n [id]=\"getIdHeaderFilter(iHead)\"\n placeholder=\"Buscar\"\n [classes]=\"['c-input--sm', item.filterClasses] | makeHtmlList\"\n buttonClasses=\"m-xs p-0.5 text-xs\"\n [describedBy]=\"getIdHeader(iHead)\"> </desy-search-bar>\n </td>\n </tr>\n\n\n <tr *ngFor=\"let row of getVisibleRows(); index as iRow\" class=\"border-t border-b border-neutral-base hover:bg-neutral-lighter\"\n [desyRow]=\"row\"\n [ngClass]=\"{'bg-neutral-light': hasCheckboxes && row.checked }\">\n <td *ngIf=\"hasCheckboxes\" desyFocusClickedCell [class]=\"['px-base py-sm', checkboxClasses] | makeHtmlList\"\n tabindex=\"-1\" >\n <div class=\"c-checkboxes c-checkboxes--sm\">\n <div>\n <div class=\"relative flex items-start\">\n <div class=\"flex items-center mx-sm\">\n <input type=\"checkbox\" class=\"w-6 h-6 transition duration-150 ease-in-out border-black focus:border-black focus:shadow-outline-focus-input focus:ring-4 focus:ring-offset-0 focus:ring-warning-base disabled:bg-neutral-light disabled:border-neutral-base text-primary-base\"\n [(ngModel)]=\"row.checked\" (ngModelChange)=\"handleCheckboxChange(row)\"\n [id]=\"getIdRowCheckbox(iRow)\"\n [name]=\"getIdRowCheckbox(iRow)\"\n [attr.aria-label]=\"'Fila ' + iRow\">\n </div>\n <div class=\"pt-0.5 leading-5\">\n <label class=\"sr-only block text-sm -mt-1\" [for]=\"getIdRowCheckbox(iRow)\">Selecciona fila {{ iRow }}</label>\n </div>\n </div>\n </div>\n </div>\n </td>\n <ng-container *ngFor=\"let cell of row.cellsList; first as isFirstCell; index as columnIndex\">\n <th *ngIf=\"firstCellIsHeader && isFirstCell; else elseTd\" scope=\"row\"\n [class]=\"['px-base py-xs border-neutral-base border-b-0 border-r text-left font-normal text-sm text-neutral-dark', cell.classes] | makeHtmlList\"\n desyCell [row]=\"row\" [rowIndex]=\"iRow\" [columnIndex]=\"columnIndex\"\n [attr.colspan]=\"cell.colspan ? cell.colspan : null\"\n [attr.rowspan]=\"cell.rowspan ? cell.rowspan : null\"\n [attr.id]=\"cell.id ? cell.id : null\"\n [attr.role]=\"cell.role ? cell.role : null\"\n [attr.aria-label]=\"cell.ariaLabel ? cell.ariaLabel : null\"\n [attr.aria-describedby]=\"cell.ariaDescribedBy ? cell.ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"cell.ariaLabelledBy ? cell.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"cell.ariaHidden ? cell.ariaHidden : null\"\n [attr.aria-disabled]=\"cell.ariaDisabled ? cell.ariaDisabled : null\"\n [attr.aria-controls]=\"cell.ariaControls ? cell.ariaControls : null\"\n [attr.aria-current]=\"cell.ariaCurrent ? cell.ariaCurrent : null\"\n [attr.aria-live]=\"cell.ariaLive ? cell.ariaLive : null\"\n [attr.aria-expanded]=\"cell.ariaExpanded ? cell.ariaExpanded : null\"\n [attr.aria-errormessage]=\"cell.ariaErrorMessage ? cell.ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"cell.ariaHasPopup ? cell.ariaHasPopup : null\"\n [attr.tabindex]=\"cell.tabindex ? cell.tabindex : null\">\n <ng-container *desyCustomInnerContent=\"{ component: cell, html: cell.html, text: cell.text }\"></ng-container>\n </th>\n <ng-template #elseTd>\n <td tabindex=\"-1\" desyFocusClickedCell\n [class]=\"['px-base py-sm', cell.classes] | makeHtmlList\"\n desyCell [row]=\"row\" [rowIndex]=\"iRow\" [columnIndex]=\"columnIndex\"\n [attr.colspan]=\"cell.colspan ? cell.colspan : null\"\n [attr.rowspan]=\"cell.rowspan ? cell.rowspan : null\"\n [attr.id]=\"cell.id ? cell.id : null\"\n [attr.role]=\"cell.role ? cell.role : null\"\n [attr.aria-label]=\"cell.ariaLabel ? cell.ariaLabel : null\"\n [attr.aria-describedby]=\"cell.ariaDescribedBy ? cell.ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"cell.ariaLabelledBy ? cell.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"cell.ariaHidden ? cell.ariaHidden : null\"\n [attr.aria-disabled]=\"cell.ariaDisabled ? cell.ariaDisabled : null\"\n [attr.aria-controls]=\"cell.ariaControls ? cell.ariaControls : null\"\n [attr.aria-current]=\"cell.ariaCurrent ? cell.ariaCurrent : null\"\n [attr.aria-live]=\"cell.ariaLive ? cell.ariaLive : null\"\n [attr.aria-expanded]=\"cell.ariaExpanded ? cell.ariaExpanded : null\"\n [attr.aria-errormessage]=\"cell.ariaErrorMessage ? cell.ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"cell.ariaHasPopup ? cell.ariaHasPopup : null\"\n [attr.tabindex]=\"cell.tabindex ? cell.tabindex : -1\">\n <ng-container *desyCustomInnerContent=\"{ component: cell, html: cell.html, text: cell.text }\"></ng-container>\n </td>\n </ng-template>\n </ng-container>\n </tr>\n </tbody>\n </table>\n</ng-template>\n\n<div *ngIf=\"wrapper; else tableContent\" [class]=\"wrapper.classes\">\n <ng-container *ngTemplateOutlet=\"tableContent\"></ng-container>\n</div>\n"
|
|
284
|
+
},] }
|
|
285
|
+
];
|
|
286
|
+
TableAdvancedComponent.ctorParameters = () => [
|
|
287
|
+
{ type: ElementRef },
|
|
288
|
+
{ type: ChangeDetectorRef }
|
|
289
|
+
];
|
|
290
|
+
TableAdvancedComponent.propDecorators = {
|
|
291
|
+
rows: [{ type: Input }],
|
|
292
|
+
head: [{ type: Input }],
|
|
293
|
+
caption: [{ type: Input }],
|
|
294
|
+
captionClasses: [{ type: Input }],
|
|
295
|
+
firstCellIsHeader: [{ type: Input }],
|
|
296
|
+
hasCheckboxes: [{ type: Input }],
|
|
297
|
+
idPrefix: [{ type: Input }],
|
|
298
|
+
classes: [{ type: Input }],
|
|
299
|
+
checkboxClasses: [{ type: Input }],
|
|
300
|
+
id: [{ type: Input }],
|
|
301
|
+
wrapper: [{ type: Input }],
|
|
302
|
+
captionComponent: [{ type: ContentChildren, args: [TableCaptionComponent,] }],
|
|
303
|
+
headerComponent: [{ type: ContentChildren, args: [TableAdvancedHeaderComponent,] }],
|
|
304
|
+
rowComponentList: [{ type: ContentChildren, args: [TableAdvancedRowComponent,] }],
|
|
305
|
+
rowData: [{ type: ViewChildren, args: [RowDirective,] }],
|
|
306
|
+
rowsChange: [{ type: Output }],
|
|
307
|
+
rowsChecked: [{ type: Output }],
|
|
308
|
+
recalculateTable: [{ type: Output }]
|
|
309
|
+
};
|
|
310
|
+
__decorate([
|
|
311
|
+
DesyContentChild()
|
|
312
|
+
], TableAdvancedComponent.prototype, "captionComponent", void 0);
|
|
313
|
+
__decorate([
|
|
314
|
+
DesyContentChild()
|
|
315
|
+
], TableAdvancedComponent.prototype, "headerComponent", void 0);
|
|
316
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYWR2YW5jZWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzeS1hbmd1bGFyL3NyYy9saWIvZGVzeS10YWJsZXMvY29tcG9uZW50cy90YWJsZS1hZHZhbmNlZC90YWJsZS1hZHZhbmNlZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRU4sWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRCxPQUFPLEVBQW9CLE9BQU8sRUFBdUIsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQztBQUVsRixPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQUMxRixPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUVwRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFFNUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0seURBQXlELENBQUM7QUFRekYsTUFBTSxPQUFPLHNCQUF1QixTQUFRLHNCQUFzQjtJQWlDaEUsWUFBb0IsRUFBYyxFQUFVLGNBQWlDO1FBQzNFLEtBQUssRUFBRSxDQUFDO1FBRFUsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQVJuRSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNoQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7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LEVBQUU7Z0VBQzZEO0FBR2pDO0lBRDlDLGdCQUFnQixFQUFFOytEQUMwRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRlbnRDb21wb25lbnQgfSBmcm9tICcuLy4uLy4uLy4uL2Rlc3ktY29tbW9ucy9jb21wb25lbnRzL2NvbnRlbnQvY29udGVudC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY2Nlc3NpYmlsaXR5Q29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50cyc7XG5pbXBvcnQge1NlYXJjaFV0aWxzfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdXRpbHMvc2VhcmNoLXV0aWxzJztcbmltcG9ydCB7SGVhZENlbGxNb2RlbERhdGEsIE9yZGVyQnksIFJvd0RhdGEsIFdyYXBwZXJEYXRhfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7VGFibGVDYXB0aW9uQ29tcG9uZW50fSBmcm9tICcuLi90YWJsZS9jb21wb25lbnRzL3RhYmxlLWNhcHRpb24uY29tcG9uZW50JztcbmltcG9ydCB7VGFibGVBZHZhbmNlZEhlYWRlckNlbGxDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS1hZHZhbmNlZC1oZWFkZXItY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHtUYWJsZUFkdmFuY2VkSGVhZGVyQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtYWR2YW5jZWQtaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQge1RhYmxlQWR2YW5jZWRSb3dDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS1hZHZhbmNlZC1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7Q2VsbERpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jZWxsLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1Jvd0RpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9yb3cuZGlyZWN0aXZlJztcbmltcG9ydCB7UmVjYWxjdWxhdGVUYWJsZVBhcmFtc30gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZWNhbGN1bGF0ZS10YWJsZS1wYXJhbXMnO1xuaW1wb3J0IHtEZXN5Q29udGVudENoaWxkfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZGVjb3JhdG9ycy9kZXN5LWNvbnRlbnQtY2hpbGQuZGVjb3JhdG9yJztcbmltcG9ydCB7IFRhYmxlQWR2YW5jZWRTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtYWR2YW5jZWQtc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWxlY3RJdGVtRGF0YSB9IGZyb20gJy4uLy4uLy4uL2Rlc3ktZm9ybXMvaW50ZXJmYWNlcy9zZWxlY3QtaXRlbS1kYXRhJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGVzeS10YWJsZS1hZHZhbmNlZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1hZHZhbmNlZC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVBZHZhbmNlZENvbXBvbmVudCBleHRlbmRzIEFjY2Vzc2liaWxpdHlDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcblxuICBASW5wdXQoKSByb3dzOiBSb3dEYXRhW107IC8vIG9yaWdpbmFsIGRhdGFcbiAgQElucHV0KCkgaGVhZDogSGVhZENlbGxNb2RlbERhdGFbXTtcblxuICBASW5wdXQoKSBjYXB0aW9uOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNhcHRpb25DbGFzc2VzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZpcnN0Q2VsbElzSGVhZGVyOiBib29sZWFuO1xuICBASW5wdXQoKSBoYXNDaGVja2JveGVzOiBib29sZWFuO1xuICBASW5wdXQoKSBpZFByZWZpeDogc3RyaW5nO1xuICBASW5wdXQoKSBjbGFzc2VzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNoZWNrYm94Q2xhc3Nlczogc3RyaW5nO1xuICBASW5wdXQoKSBpZDogc3RyaW5nO1xuICBASW5wdXQoKSB3cmFwcGVyOiBXcmFwcGVyRGF0YTtcblxuXG4gIEBEZXN5Q29udGVudENoaWxkKClcbiAgQENvbnRlbnRDaGlsZHJlbihUYWJsZUNhcHRpb25Db21wb25lbnQpIGNhcHRpb25Db21wb25lbnQ6IFRhYmxlQ2FwdGlvbkNvbXBvbmVudDtcblxuICBARGVzeUNvbnRlbnRDaGlsZCgpXG4gIEBDb250ZW50Q2hpbGRyZW4oVGFibGVBZHZhbmNlZEhlYWRlckNvbXBvbmVudCkgaGVhZGVyQ29tcG9uZW50OiBUYWJsZUFkdmFuY2VkSGVhZGVyQ29tcG9uZW50O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oVGFibGVBZHZhbmNlZFJvd0NvbXBvbmVudCkgcm93Q29tcG9uZW50TGlzdDogUXVlcnlMaXN0PFRhYmxlQWR2YW5jZWRSb3dDb21wb25lbnQ+O1xuICBAVmlld0NoaWxkcmVuKFJvd0RpcmVjdGl2ZSkgcm93RGF0YTogUXVlcnlMaXN0PFJvd0RpcmVjdGl2ZT47XG5cbiAgQE91dHB1dCgpIHJvd3NDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSByb3dzQ2hlY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHJlY2FsY3VsYXRlVGFibGUgPSBuZXcgRXZlbnRFbWl0dGVyPFJlY2FsY3VsYXRlVGFibGVQYXJhbXM+KCk7XG5cbiAgdmlzaWJsZVJvd3M6IFJvd0RhdGFbXXxUYWJsZUFkdmFuY2VkUm93Q29tcG9uZW50W107XG4gIG9yZGVyQnlUeXBlID0gT3JkZXJCeTtcbiAgaXNSZXNldDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29uc3QgZWxlbW50c0ZvY3VzID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRleF0nKTtcbiAgICBpZiAoZWxlbW50c0ZvY3VzKSB7XG4gICAgICBlbGVtbnRzRm9jdXMuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJyk7XG4gICAgfVxuICAgIHRoaXMucmVjYWxjdWxhdGVWaXNpYmxlRWxlbWVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNjYSBsYXMgZmlsYXMgdmlzaWJsZXMgdHJhcyByZWFsaXphcnNlIHVuYSBiw7pzcXVlZGEgbyB1bmEgb3JkZW5hY2nDs25cbiAgICovXG4gIHJlY2FsY3VsYXRlVmlzaWJsZUVsZW1lbnRzKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlY2FsY3VsYXRlUGFyYW1zID0gdGhpcy5idWlsZFJlY2FsY3VsYXRlUGFyYW1zKCk7XG5cbiAgICAvLyBTaSBzZSBjYXB0dXJhIGVsIGV2ZW50byByZWNhbGN1bGF0ZVRhYmxlIHNlIGRlamEgYWwgdXN1YXJpbyBsYSByZXNwb25zYWJpbGlkYWQgZGUgZmlsdHJhciB5IG9yZGVuYXIgbG9zIGVsZW1lbnRvcy5cbiAgICBpZiAodGhpcy5yZWNhbGN1bGF0ZVRhYmxlLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlY2FsY3VsYXRlVGFibGUuZW1pdChyZWNhbGN1bGF0ZVBhcmFtcyk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIC8vIFNlIGRlYmVuIG1vc3RyYXIgdG9kYXMgbGFzIGZpbGFzIHRlbXBvcmFsbWVudGUgcGFyYSBwb2RlciBhcGxpY2FyIGVsIGZpbHRybyB5IGxhIG9yZGVuYWNpw7NuIHNvYnJlIGVsIGNvbnRlbmlkbyBpbnNlcnRhZG9cbiAgICAgIHRoaXMudmlzaWJsZVJvd3MgPSB0aGlzLmdldFJvd3MoKTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAvLyBTZSBhcGxpY2EgZWwgZmlsdHJvIHkgbGEgb3JkZW5hY2nDs25cbiAgICAgIGxldCByb3dEYXRhID0gdGhpcy5maWx0ZXJSb3dzKHJlY2FsY3VsYXRlUGFyYW1zLCB0aGlzLnJvd0RhdGEudG9BcnJheSgpKTtcbiAgICAgIHJvd0RhdGEgPSB0aGlzLnNvcnRSb3dzKHJlY2FsY3VsYXRlUGFyYW1zLCByb3dEYXRhKTtcbiAgICAgIHRoaXMudmlzaWJsZVJvd3MgPSByb3dEYXRhLm1hcChyID0+IHIuZGVzeVJvdykgYXMgUm93RGF0YVtdfFRhYmxlQWR2YW5jZWRSb3dDb21wb25lbnRbXTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnV5ZSBsb3MgcGFyw6FtZXRyb3MgbmVjZXNhcmlvcyBwYXJhIHJlY2FsY3VsYXIgbGEgdGFibGEsIGluZGljYW5kbyBsb3MgZmlsdHJvcyB5IGxhIG9yZGVuYWNpw7NuXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkUmVjYWxjdWxhdGVQYXJhbXMoKTogUmVjYWxjdWxhdGVUYWJsZVBhcmFtcyB7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgZmlsdGVyczogW10sXG4gICAgICBzb3J0OiBudWxsXG4gICAgfTtcblxuICAgIGNvbnN0IGhlYWQgPSB0aGlzLmdldEhlYWRlckNlbGxzKCkgYXMgKEhlYWRDZWxsTW9kZWxEYXRhfFRhYmxlQWR2YW5jZWRIZWFkZXJDZWxsQ29tcG9uZW50KVtdO1xuICAgIGlmIChoZWFkKSB7XG4gICAgICBoZWFkLmZvckVhY2goKGhlYWRlckNlbGwsIGhlYWRlckNlbGxJbmRleCkgPT4ge1xuICAgICAgICBpZiAoaGVhZGVyQ2VsbC5oYXNGaWx0ZXIgJiYgaGVhZGVyQ2VsbC5hY3RpdmVGaWx0ZXIpIHtcbiAgICAgICAgICBwYXJhbXMuZmlsdGVycy5wdXNoKHsgY29sdW1uSW5kZXg6IGhlYWRlckNlbGxJbmRleCwgZmlsdGVyVGV4dDogaGVhZGVyQ2VsbC52YWx1ZUZpbHRlciB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZihoZWFkZXJDZWxsLmhhc1NlbGVjdCAmJiBoZWFkZXJDZWxsLmFjdGl2ZVNlbGVjdCl7XG4gICAgICAgICAgcGFyYW1zLmZpbHRlcnMucHVzaCh7IGNvbHVtbkluZGV4OiBoZWFkZXJDZWxsSW5kZXgsIGZpbHRlclRleHQ6IGhlYWRlckNlbGwudmFsdWVTZWxlY3QgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBvcmRlckJ5Q29sdW1uSW5kZXggPSBoZWFkLmZpbmRJbmRleChjZWxsID0+IGNlbGwub3JkZXJCeSAmJiBjZWxsLm9yZGVyQnkgIT09IE9yZGVyQnkubm9uZSk7XG4gICAgICBwYXJhbXMuc29ydCA9IChvcmRlckJ5Q29sdW1uSW5kZXggPj0gMCkgPyB7IGNvbHVtbkluZGV4OiBvcmRlckJ5Q29sdW1uSW5kZXgsIG9yZGVyOiBoZWFkW29yZGVyQnlDb2x1bW5JbmRleF0ub3JkZXJCeSB9IDogbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIGZ1bmNpb25lcyBkZSByZWNvZ2VyIGlkcywgeSBjYXJhY3RlcmlzdGljYXNcbiAgICovXG5cbiAgaGFzRmlsdGVycygpOiBib29sZWFuIHtcbiAgICBjb25zdCBoZWFkID0gdGhpcy5nZXRIZWFkZXJDZWxscygpO1xuICAgIHJldHVybiBoZWFkID8gaGVhZC5maW5kSW5kZXgoY2VsbCA9PiAoY2VsbC5oYXNGaWx0ZXIpIHx8IChjZWxsLmhhc1NlbGVjdCkpID49IDAgOiBmYWxzZTtcbiAgfVxuXG4gIGdldEhlYWRlckNlbGxzKCk6IEhlYWRDZWxsTW9kZWxEYXRhW118VGFibGVBZHZhbmNlZEhlYWRlckNlbGxDb21wb25lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZGVyQ29tcG9uZW50ICYmIHRoaXMuaGVhZGVyQ29tcG9uZW50LmNlbGxzLmxlbmd0aCA+IDAgPyB0aGlzLmhlYWRlckNvbXBvbmVudC5jZWxscy50b0FycmF5KCkgOiB0aGlzLmhlYWQ7XG4gIH1cblxuICBnZXRSb3dzKCk6IFJvd0RhdGFbXXxUYWJsZUFkdmFuY2VkUm93Q29tcG9uZW50W10ge1xuICAgIGxldCByb3dzID0gW107XG4gICAgaWYgKHRoaXMucm93Q29tcG9uZW50TGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICByb3dzID0gdGhpcy5yb3dDb21wb25lbnRMaXN0LnRvQXJyYXkoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucm93cykge1xuICAgICAgcm93cyA9IHRoaXMucm93cztcbiAgICB9XG4gICAgcmV0dXJuIHJvd3M7XG4gIH1cblxuICAvKipcbiAgICogU2kgc2Ugc29icmVlc2NyaWJlICBlbCBjb21wb3J0YW1pZW50byBwb3IgZGVmZWN0byBkZSBmaWx0cmFkbyB5IG9yZGVuYWNpw7NuLCBzZSB1dGlsaXphcsOhbiBsYXMgaW5kaWNhZGFzIGRlc2RlIGZ1ZXJhIGRlbFxuICAgKiBjb21wb25lbnRlICh5YSBzZWEgcG9yIHBhcsOhbWV0cm8gbyBwb3IgY29udGVuaWRvKS5cbiAgICogU2kgbm8gc2Ugc29icmVlc2NyaWJlLCBkZXZ1ZWx2ZSBsYXMgZmlsYXMgY2FsY3VsYWRhcy5cbiAgICovXG4gIGdldFZpc2libGVSb3dzKCk6IFJvd0RhdGFbXXxUYWJsZUFkdmFuY2VkUm93Q29tcG9uZW50W10ge1xuICAgIHJldHVybiB0aGlzLnJlY2FsY3VsYXRlVGFibGUub2JzZXJ2ZXJzLmxlbmd0aCA+IDAgPyB0aGlzLmdldFJvd3MoKSA6IHRoaXMudmlzaWJsZVJvd3M7XG4gIH1cblxuICBnZXRJZFByZWZpeCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkUHJlZml4ID8gdGhpcy5pZFByZWZpeCA6ICdpZC10YWJsZS1yb3cnO1xuICB9XG5cbiAgZ2V0SWRIZWFkZXIoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SWRQcmVmaXgoKSArICctaGVhZGVyLScgKyBpbmRleDtcbiAgfVxuXG4gIGdldElkUm93Q2hlY2tib3goaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SWRQcmVmaXgoKSArICctY2hlY2tib3gtJyArIGluZGV4O1xuICB9XG5cbiAgZ2V0SWRIZWFkZXJGaWx0ZXIoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SWRQcmVmaXgoKSArICctaGVhZGVyLWZpbHRlci0nICsgaW5kZXg7XG4gIH1cblxuICBnZXRJZEhlYWRlclNlbGVjdChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJZFByZWZpeCgpICsgJy1oZWFkZXItc2VsZWN0LScgKyBpbmRleDtcbiAgfVxuXG4gIGdldENhcHRpb25DbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNhcHRpb25Db21wb25lbnQgPyB0aGlzLmNhcHRpb25Db21wb25lbnQuY2xhc3NlcyA6IHRoaXMuY2FwdGlvbkNsYXNzZXM7XG4gIH1cblxuICBnZXRTdHJpbmdPcmRlckJ5KG9yZGVyQnk6IE9yZGVyQnkpOiBzdHJpbmcge1xuICAgIGlmIChvcmRlckJ5ID09PSBPcmRlckJ5LmFzYyl7XG4gICAgICByZXR1cm4gJ2FzY2VuZGluZyc7XG4gICAgfSBlbHNlIGlmIChvcmRlckJ5ID09PSBPcmRlckJ5LmRlc2Mpe1xuICAgICAgcmV0dXJuICdkZXNjZW5kaW5nJztcbiAgICB9IGVsc2UgaWYgKG9yZGVyQnkgPT09IE9yZGVyQnkubm9uZSl7XG4gICAgICByZXR1cm4gJ25vbmUnO1xuICAgIH1cbiAgfVxuXG4gIGdldFNlbGVjdEZvckl0ZW0oaXRlbTogVGFibGVBZHZhbmNlZEhlYWRlckNlbGxDb21wb25lbnQpOiBUYWJsZUFkdmFuY2VkU2VsZWN0Q29tcG9uZW50e1xuICAgIHJldHVybiBpdGVtLnNlbGVjdENvbXBvbmVudCA/IGl0ZW0uc2VsZWN0Q29tcG9uZW50IDogbnVsbDtcbiAgfVxuXG4gIGdldEl0ZW1TZWxlY3RPcHRpb25zKGl0ZW06IFRhYmxlQWR2YW5jZWRTZWxlY3RDb21wb25lbnQpOiBTZWxlY3RJdGVtRGF0YVtdIHtcbiAgICByZXR1cm4gaXRlbS5zZWxlY3RJdGVtQ29tcG9uZW50TGlzdCAmJiBpdGVtLnNlbGVjdEl0ZW1Db21wb25lbnRMaXN0Lmxlbmd0aCA+IDAgP1xuICAgICAgaXRlbS5zZWxlY3RJdGVtQ29tcG9uZW50TGlzdC50b0FycmF5KCkgOiBpdGVtLml0ZW1zO1xuICB9XG5cbiAgZ2V0Q29udGVudENvbXBvbmVudChpdGVtOiBUYWJsZUFkdmFuY2VkSGVhZGVyQ2VsbENvbXBvbmVudCk6IENvbnRlbnRDb21wb25lbnR7XG4gICAgcmV0dXJuIGl0ZW0uY29udGVudENvbXBvbmVudCA/IGl0ZW0uY29udGVudENvbXBvbmVudCA6IG51bGw7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBjaGVja3NcbiAgICovXG4gIGhhbmRsZUNoZWNrYm94Q2hhbmdlKHJvdzogUm93RGF0YXxUYWJsZUFkdmFuY2VkUm93Q29tcG9uZW50KTogdm9pZCB7XG4gICAgaWYgKHJvdyBpbnN0YW5jZW9mIFRhYmxlQWR2YW5jZWRSb3dDb21wb25lbnQpIHtcbiAgICAgIHJvdy5jaGVja2VkQ2hhbmdlLmVtaXQocm93LmNoZWNrZWQpO1xuICAgIH1cbiAgICB0aGlzLm5vdGlmeUNoZWNrZWRDaGFuZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJtaXRlIGRlc21hcmNhciB0b2RhcyBsYXMgZmlsYXNcbiAgICovXG4gIHByaXZhdGUgdW5jaGVja0FsbCgpOiB2b2lke1xuICAgIHRoaXMuZ2V0Um93cygpLmZvckVhY2gociA9PiB7XG4gICAgICBjb25zdCBtdXN0RW1pdCA9IHIuY2hlY2tlZCAmJiByIGluc3RhbmNlb2YgVGFibGVBZHZhbmNlZFJvd0NvbXBvbmVudDtcbiAgICAgIHIuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgaWYgKG11c3RFbWl0KSB7XG4gICAgICAgIChyIGFzIFRhYmxlQWR2YW5jZWRSb3dDb21wb25lbnQpLmNoZWNrZWRDaGFuZ2UuZW1pdChyLmNoZWNrZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMubm90aWZ5Q2hlY2tlZENoYW5nZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vdGlmaWNhIGNhbWJpb3MgZW4gbGFzIGZpbGFzXG4gICAqL1xuICBwcml2YXRlIG5vdGlmeUNoZWNrZWRDaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucm93Q29tcG9uZW50TGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93cyk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm93Q2hlY2tzOiBhbnkgPSB7fTtcbiAgICB0aGlzLmdldFJvd3MoKS5mb3JFYWNoKHIgPT4gcm93Q2hlY2tzW3IuaWRdID0gISFyLmNoZWNrZWQpOyAvLyBTZSBhcGxpY2FuIHRhbWJpw6luIGEgbGFzIG5vIHZpc2libGVzXG4gICAgdGhpcy5yb3dzQ2hlY2tlZC5lbWl0KHJvd0NoZWNrcyk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBidXNxdWVkYVxuICAgKi9cbiAgaGFuZGxlSW5wdXRTZWFyY2goaXRlbTogSGVhZENlbGxNb2RlbERhdGEpOiB2b2lkIHtcbiAgICBpZiAoaXRlbS5oYXNGaWx0ZXIpIHsgLy8gc2kgdGllbmUgYnVzY2Fkb3JcbiAgICAgIGl0ZW0uYWN0aXZlRmlsdGVyID0gISFpdGVtLnZhbHVlRmlsdGVyO1xuICAgICAgdGhpcy51bmNoZWNrQWxsKCk7XG4gICAgfVxuICAgIGlmKGl0ZW0uaGFzU2VsZWN0KXsgLy9TaSB0aWVuZSBzZWxlY2Npb25hYmxlXG4gICAgICBpdGVtLmFjdGl2ZVNlbGVjdCA9ICEhaXRlbS52YWx1ZVNlbGVjdDtcbiAgICAgIHRoaXMudW5jaGVja0FsbCgpO1xuICAgIH1cblxuICAgIHRoaXMucmVjYWxjdWxhdGVWaXNpYmxlRWxlbWVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZSBmaWx0cmFuIGxhcyBmaWxhcyBzZWfDum4gbG8gZXNwZWNpZmljYWRvIGVuIGxhIGJhcnJhIGRlIGLDunNxdWVkYSBkZSBjYWRhIGNvbHVtbmEuXG4gICAqIFNpIG5vIGhheSBiw7pzcXVlZGEgc3NlIGRldnVlbHZlbiB0b2RhcyBsYXMgZmlsYXMuXG4gICAqIEBwYXJhbSByZWNhbGN1bGF0ZVBhcmFtcyBwYXJhbWV0cm9zIHBhcmEgcmVjYWxjdWxhciBsb3MgZWxlbWVudG9zIHZpc2libGVzXG4gICAqIEBwYXJhbSByb3dzIGxpc3RhIGNvbiB0b2RhcyBsYXMgZmlsYXNcbiAgICogQHJldHVybiBsaXN0YSBkZSBmaWxhcyBmaWx0cmFkYVxuICAgKi9cbiAgcHJpdmF0ZSBmaWx0ZXJSb3dzKHJlY2FsY3VsYXRlUGFyYW1zOiBSZWNhbGN1bGF0ZVRhYmxlUGFyYW1zLCByb3dzOiBSb3dEaXJlY3RpdmVbXSk6IFJvd0RpcmVjdGl2ZVtdIHtcbiAgICBsZXQgZmlsdGVyZWRSb3dzID0gcm93cztcbiAgICByZWNhbGN1bGF0ZVBhcmFtcy5maWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgIGZpbHRlcmVkUm93cyA9IGZpbHRlcmVkUm93cy5maWx0ZXIocm93ID0+XG4gICAgICAgIFNlYXJjaFV0aWxzLmNvbnRhaW5zQW55V29yZEZyb20ocm93LmdldENlbGwoZmlsdGVyLmNvbHVtbkluZGV4KS5nZXRDb250ZW50KCksIGZpbHRlci5maWx0ZXJUZXh0KSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbHRlcmVkUm93cztcbiAgfVxuXG4gIC8qKlxuICAgKiBvcmRlbmFjaW9uXG4gICAqL1xuXG4gIC8qKlxuICAgKiBQZXJtaXRlIGluZGljYXIgcXVlIHNlIGRlYmUgb3JkZW5hciBsYSB0YWJsYVxuICAgKiBAcGFyYW0gaW5kZXggaW5kaWNlIGRlIGxhIGNvbHVtbmFcbiAgICovXG4gIGhhbmRsZVNvcnRCeUNvbHVtbihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgaGVhZCA9IHRoaXMuZ2V0SGVhZGVyQ2VsbHMoKTtcbiAgICBpZiAoaGVhZCkge1xuICAgICAgaGVhZC5mb3JFYWNoKChjZWxsLCBjZWxsSW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGNlbGwub3JkZXJCeSkge1xuICAgICAgICAgIGNlbGwub3JkZXJCeSA9IGNlbGxJbmRleCA9PT0gaW5kZXggPyB0aGlzLmdldE5leHREaXJlY3Rpb24oY2VsbCkgOiBPcmRlckJ5Lm5vbmU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMucmVjYWxjdWxhdGVWaXNpYmxlRWxlbWVudHMoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIE9yZGVuYSBsYXMgZmlsYXMgaW5kaWNhZGFzIHNlZ8O6biBsYSBjb2x1bW5hIGVzcGVjaWZpY2FkYSBlbiBsYSBjYWJlY2VyYVxuICAgKiBAcGFyYW0gcmVjYWxjdWxhdGVQYXJhbXMgcGFyYW1ldHJvcyBwYXJhIHJlY2FsY3VsYXIgbG9zIGVsZW1lbnRvcyB2aXNpYmxlc1xuICAgKiBAcGFyYW0gcm93cyBmaWxhcyBkZSBsYSB0YWJsYSBhIG9yZGVuYXJcbiAgICogQHJldHVybiBtaXNtYXMgZmlsYXMgcGVybyBvcmRlbmFkYXMgcG9yIGxhIGNvbHVtbmEgaW5kaWNhZGFcbiAgICovXG4gIHByaXZhdGUgc29ydFJvd3MocmVjYWxjdWxhdGVQYXJhbXM6IFJlY2FsY3VsYXRlVGFibGVQYXJhbXMsIHJvd3M6IFJvd0RpcmVjdGl2ZVtdKTogUm93RGlyZWN0aXZlW10ge1xuICAgIGxldCBzb3J0ZWRSb3dzID0gcm93cztcbiAgICBpZiAocmVjYWxjdWxhdGVQYXJhbXMuc29ydCkge1xuICAgICAgY29uc3QgY29sdW1uSW5kZXggPSByZWNhbGN1bGF0ZVBhcmFtcy5zb3J0LmNvbHVtbkluZGV4O1xuICAgICAgY29uc3QgaXNBc2MgPSByZWNhbGN1bGF0ZVBhcmFtcy5zb3J0Lm9yZGVyID09PSBPcmRlckJ5LmFzYztcbiAgICAgIHNvcnRlZFJvd3MgPSByb3dzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgIHRoaXMuY29tcGFyZUNlbGxDb250ZW50KGEuZ2V0Q2VsbChjb2x1bW5JbmRleCksIGIuZ2V0Q2VsbChjb2x1bW5JbmRleCksIGlzQXNjKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvcnRlZFJvd3M7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyYSBlbCBjb250ZW5pZG8gZGUgZG9zIGNlbGRhcy4gRXN0ZSBzZSBpbnZpZXJ0ZSBzaSBlbCBvcmRlbiBlc3BlY2lmaWNhZG8gZXMgZGVzY2VuZGVudGUuXG4gICAqL1xuICBjb21wYXJlQ2VsbENvbnRlbnQoYTogQ2VsbERpcmVjdGl2ZSwgYjogQ2VsbERpcmVjdGl2ZSwgaXNBc2M6IGJvb2xlYW4pOiBudW1iZXJ7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBjb25zdCBhQ29tcGFyYWJsZSA9IHRoaXMuY2xlYW5DdXJyZW5jeShhLmdldENvbnRlbnQoKSk7XG4gICAgY29uc3QgYkNvbXBhcmFibGUgPSB0aGlzLmNsZWFuQ3VycmVuY3koYi5nZXRDb250ZW50KCkpO1xuXG4gICAgaWYgKGlzTmFOKCthQ29tcGFyYWJsZSkgJiYgaXNOYU4oK2JDb21wYXJhYmxlKSApIHsgLy8gc29uIHRleHRvc1xuICAgICAgcmVzdWx0ID0gYUNvbXBhcmFibGUubG9jYWxlQ29tcGFyZShiQ29tcGFyYWJsZSwgJ2VzJywgeyBzZW5zaXRpdml0eTogJ2Jhc2UnLCBpZ25vcmVQdW5jdHVhdGlvbjogdHJ1ZSB9KTtcbiAgICB9ZWxzZXsgLy8gc29uIG51bWVyb3NcbiAgICAgIHJlc3VsdCA9IGFDb21wYXJhYmxlLmxvY2FsZUNvbXBhcmUoYkNvbXBhcmFibGUsIHVuZGVmaW5lZCwgeyBudW1lcmljOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQgKiAoaXNBc2MgPyAxIDogLTEpO1xuICB9XG5cbiAgLyoqXG4gICAqIHNlIGNhbGN1bGEgbGEgb3JkZW5hY2nDs24gbnVldmFcbiAgICovXG4gIHByaXZhdGUgZ2V0TmV4dERpcmVjdGlvbihpdGVtOiBIZWFkQ2VsbE1vZGVsRGF0YSk6IE9yZGVyQnkge1xuICAgIGlmIChpdGVtLm9yZGVyQnkgPT09IE9yZGVyQnkubm9uZSB8fCBpdGVtLm9yZGVyQnkgPT09IE9yZGVyQnkuZGVzYykge1xuICAgICAgcmV0dXJuIE9yZGVyQnkuYXNjO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gT3JkZXJCeS5kZXNjO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBzaSBlcyB1bmEgY2FudGlkYWQgZGUgZGluZXJvIHNlIHF1aXRhIOKCrCBwYXJhIHBvZGVyIGNvbXBhcmFyIGxvcyBudW1lcm9zXG4gICAqL1xuICBwcml2YXRlIGNsZWFuQ3VycmVuY3kodHh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICgvW1xcZC4sXStbXFzigqxdL2cudGVzdCh0eHQpKSB7XG4gICAgICB0eHQgPSB0eHQucmVwbGFjZSgv4oKsL2csICcnKTtcbiAgICB9XG4gICAgcmV0dXJuIHR4dDtcbiAgfVxuXG4gIHNlbGVjdEZpbHRlcihpdGVtOiBUYWJsZUFkdmFuY2VkU2VsZWN0Q29tcG9uZW50LCBpdGVtVmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGl0ZW0udmFsdWVDaGFuZ2UuZW1pdChpdGVtVmFsdWUpO1xuXG4gICAgY29uc3QgaGVhZCA9IHRoaXMuZ2V0SGVhZGVyQ2VsbHMoKTtcbiAgICBjb25zdCByb3dzID0gdGhpcy5nZXRSb3dzKCk7XG4gICAgaWYgKGhlYWQgJiYgcm93cykge1xuICAgICAgaGVhZC5mb3JFYWNoKChjZWxsOiBUYWJsZUFkdmFuY2VkSGVhZGVyQ2VsbENvbXBvbmVudCwgY2VsbEluZGV4KSA9PiB7XG4gICAgICB9KTtcbiAgICAgIHJvd3MuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|