@ti-tecnologico-de-monterrey-oficial/ds-ng 1.5.1118 → 1.5.1119
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/assets/styles/main.min.css +1 -1
- package/fesm2022/ti-tecnologico-de-monterrey-oficial-ds-ng.mjs +541 -541
- package/fesm2022/ti-tecnologico-de-monterrey-oficial-ds-ng.mjs.map +1 -1
- package/lib/ds-ng.component.d.ts +1 -1
- package/package.json +1 -3
- package/esm2022/lib/components/bmb-academic-progress/bmb-academic-progress.component.mjs +0 -87
- package/esm2022/lib/components/bmb-accordion/bmb-accordion.component.mjs +0 -159
- package/esm2022/lib/components/bmb-account-statement/bmb-account-statement.component.mjs +0 -150
- package/esm2022/lib/components/bmb-action-icon/bmb-action-icon.component.mjs +0 -49
- package/esm2022/lib/components/bmb-action-menu/bmb-action-menu.component.mjs +0 -31
- package/esm2022/lib/components/bmb-advertisement-card/bmb-advertisement-card.component.mjs +0 -35
- package/esm2022/lib/components/bmb-advertisement-card/types.mjs +0 -2
- package/esm2022/lib/components/bmb-alert-center/bmb-alert-center-ads/bmb-alert-center-ads.component.mjs +0 -40
- package/esm2022/lib/components/bmb-alert-center/bmb-alert-center-empty/bmb-alert-center-empty.component.mjs +0 -18
- package/esm2022/lib/components/bmb-alert-center/bmb-alert-center-form/bmb-alert-center-form.component.mjs +0 -148
- package/esm2022/lib/components/bmb-alert-center/bmb-alert-center-list/bmb-alert-center-list.component.mjs +0 -52
- package/esm2022/lib/components/bmb-alert-center/bmb-alert-center.component.mjs +0 -196
- package/esm2022/lib/components/bmb-alert-center/bmb-alert-center.service.mjs +0 -62
- package/esm2022/lib/components/bmb-alert-center/types.mjs +0 -2
- package/esm2022/lib/components/bmb-badge/bmb-badge.component.mjs +0 -26
- package/esm2022/lib/components/bmb-balance-overview/bmb-balance-overview.component.mjs +0 -26
- package/esm2022/lib/components/bmb-bookmark/bmb-bookmark.component.mjs +0 -27
- package/esm2022/lib/components/bmb-bottom-navigation-bar/bmb-bottom-navigation-bar.component.mjs +0 -42
- package/esm2022/lib/components/bmb-breadcrumb/bmb-breadcrumb.component.mjs +0 -55
- package/esm2022/lib/components/bmb-button-icon/bmb-button-icon.component.mjs +0 -30
- package/esm2022/lib/components/bmb-calendar/bmb-calendar.component.mjs +0 -262
- package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-header/bmb-calendar-header.component.mjs +0 -95
- package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-hour-view/bmb-calendar-hour-view.component.mjs +0 -40
- package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-schedule-cards/bmb-calendar-schedule-cards.component.mjs +0 -68
- package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-template-day/bmb-calendar-template-day.component.mjs +0 -41
- package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-template-event-list/bmb-calendar-template-event-list.component.mjs +0 -63
- package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-template-mobile/bmb-calendar-template-mobile.component.mjs +0 -95
- package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-template-month/bmb-calendar-template-month.component.mjs +0 -45
- package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-template-week/bmb-calendar-template-week.component.mjs +0 -54
- package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-time-indicator/bmb-calendar-time-indicator.component.mjs +0 -24
- package/esm2022/lib/components/bmb-calendar/types.mjs +0 -2
- package/esm2022/lib/components/bmb-calendar/utils.mjs +0 -96
- package/esm2022/lib/components/bmb-card/bmb-card.component.mjs +0 -154
- package/esm2022/lib/components/bmb-card-button/bmb-card-button.component.mjs +0 -76
- package/esm2022/lib/components/bmb-carousel/bmb-carousel.component.mjs +0 -80
- package/esm2022/lib/components/bmb-chat-bar/bmb-chat-bar.component.mjs +0 -175
- package/esm2022/lib/components/bmb-chat-bar/bot_list.mjs +0 -57
- package/esm2022/lib/components/bmb-chat-bar/types.mjs +0 -2
- package/esm2022/lib/components/bmb-chat-bubbles/bmb-chat-bubbles.component.mjs +0 -56
- package/esm2022/lib/components/bmb-chat-bubbles/types.mjs +0 -2
- package/esm2022/lib/components/bmb-check-external-link-button/bmb-check-external-link-button.component.mjs +0 -46
- package/esm2022/lib/components/bmb-checkbox/bmb-checkbox.component.mjs +0 -80
- package/esm2022/lib/components/bmb-chevron-title-selector/bmb-chevron-title-selector.component.mjs +0 -36
- package/esm2022/lib/components/bmb-container/bmb-container.component.mjs +0 -27
- package/esm2022/lib/components/bmb-container-button/bmb-container-button.component.mjs +0 -83
- package/esm2022/lib/components/bmb-date-range/bmb-date-range.component.mjs +0 -69
- package/esm2022/lib/components/bmb-datepicker/bmb-datepicker-modal/bmb-datepicker-modal.component.mjs +0 -211
- package/esm2022/lib/components/bmb-datepicker/bmb-datepicker.component.mjs +0 -123
- package/esm2022/lib/components/bmb-digital-id/bmb-digital-id.component.mjs +0 -54
- package/esm2022/lib/components/bmb-divider/bmb-divider.component.mjs +0 -25
- package/esm2022/lib/components/bmb-dot-paginator/bmb-dot-paginator.component.mjs +0 -34
- package/esm2022/lib/components/bmb-drawer-overlay/bmb-drawer-overlay.component.mjs +0 -54
- package/esm2022/lib/components/bmb-dropdown/bmb-dropdown.component.mjs +0 -200
- package/esm2022/lib/components/bmb-dropdown-menu/bmb-dropdown-menu.component.mjs +0 -28
- package/esm2022/lib/components/bmb-dropzone/bmb-dropzone.component.mjs +0 -175
- package/esm2022/lib/components/bmb-evaluation-rubric/bmb-evaluation-rubric.component.mjs +0 -76
- package/esm2022/lib/components/bmb-external-link/bmb-external-link.component.mjs +0 -78
- package/esm2022/lib/components/bmb-fab/bmb-fab-.interface.mjs +0 -9
- package/esm2022/lib/components/bmb-fab/bmb-fab.component.mjs +0 -37
- package/esm2022/lib/components/bmb-filter-card/bmb-filter-card.component.mjs +0 -154
- package/esm2022/lib/components/bmb-filter-card/bmb-filter-card.interface.mjs +0 -2
- package/esm2022/lib/components/bmb-focus-element/bmb-focus-element.component.mjs +0 -36
- package/esm2022/lib/components/bmb-form-validation/bmb-form-validation.component.mjs +0 -159
- package/esm2022/lib/components/bmb-form-validator/bmb-form-validator.component.mjs +0 -159
- package/esm2022/lib/components/bmb-frequent-apps-selector/bmb-frequent-apps-selector.component.mjs +0 -29
- package/esm2022/lib/components/bmb-grade-value/bmb-grade-value.component.mjs +0 -22
- package/esm2022/lib/components/bmb-grades/bmb-grades.component.mjs +0 -181
- package/esm2022/lib/components/bmb-grades/types.mjs +0 -2
- package/esm2022/lib/components/bmb-header-mitec/bmb-header-mitec.component.mjs +0 -55
- package/esm2022/lib/components/bmb-header-mobile/bmb-header-mobile.component.mjs +0 -49
- package/esm2022/lib/components/bmb-hito-card/bmb-hito-card.component.mjs +0 -77
- package/esm2022/lib/components/bmb-hito-list/bmb-hito-list.component.mjs +0 -59
- package/esm2022/lib/components/bmb-home-card/bmb-home-card-header/bmb-home-card-header.component.mjs +0 -76
- package/esm2022/lib/components/bmb-home-card/bmb-home-card.component.mjs +0 -41
- package/esm2022/lib/components/bmb-home-card-chat/bmb-home-card-chat.component.mjs +0 -39
- package/esm2022/lib/components/bmb-home-section/bmb-home-section.component.mjs +0 -20
- package/esm2022/lib/components/bmb-icon/bmb-icon.component.mjs +0 -49
- package/esm2022/lib/components/bmb-icon/types.mjs +0 -2
- package/esm2022/lib/components/bmb-icon-item/bmb-icon-item.component.mjs +0 -23
- package/esm2022/lib/components/bmb-icon-status/bmb-icon-status.component.mjs +0 -24
- package/esm2022/lib/components/bmb-iframe/bmb-iframe.component.mjs +0 -19
- package/esm2022/lib/components/bmb-iframe/bmb-iframe.pipe.mjs +0 -21
- package/esm2022/lib/components/bmb-image/bmb-image.component.mjs +0 -33
- package/esm2022/lib/components/bmb-inner-header/bmb-inner-header.component.mjs +0 -77
- package/esm2022/lib/components/bmb-input/bmb-input-content/bmb-input-content.component.mjs +0 -147
- package/esm2022/lib/components/bmb-input/bmb-input-validation/bmb-input-validation.component.mjs +0 -162
- package/esm2022/lib/components/bmb-input/bmb-input-validation/bmb-input-validation.service.mjs +0 -116
- package/esm2022/lib/components/bmb-input/bmb-input-validator/bmb-input-validator.component.mjs +0 -178
- package/esm2022/lib/components/bmb-input/bmb-input.component.mjs +0 -85
- package/esm2022/lib/components/bmb-input-phone-number/bmb-input-phone-number.component.mjs +0 -219
- package/esm2022/lib/components/bmb-input-tags/bmb-input-tags.component.mjs +0 -191
- package/esm2022/lib/components/bmb-interactive-icon/bmb-interactive-icon.component.mjs +0 -54
- package/esm2022/lib/components/bmb-invoice/bmb-invoice.component.mjs +0 -34
- package/esm2022/lib/components/bmb-item/bmb-item.component.mjs +0 -28
- package/esm2022/lib/components/bmb-legend/bmb-legend.component.mjs +0 -23
- package/esm2022/lib/components/bmb-list-group/bmb-list-group-item/bmb-list-group-item.component.mjs +0 -83
- package/esm2022/lib/components/bmb-list-group/bmb-list-group.component.mjs +0 -60
- package/esm2022/lib/components/bmb-list-group/bmb-list-group.service.mjs +0 -55
- package/esm2022/lib/components/bmb-list-group/types.mjs +0 -2
- package/esm2022/lib/components/bmb-list-items/bmb-list-items.component.mjs +0 -83
- package/esm2022/lib/components/bmb-loader/bmb-loader.component.mjs +0 -77
- package/esm2022/lib/components/bmb-login/bmb-login-content/bmb-login-content.component.mjs +0 -55
- package/esm2022/lib/components/bmb-login/bmb-login.component.mjs +0 -66
- package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-logged/bmb-login-onboarding-logged.component.mjs +0 -40
- package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-login/bmb-login-onboarding-login.component.mjs +0 -20
- package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-logout/bmb-login-onboarding-logout.component.mjs +0 -33
- package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-stepper/bmb-login-onboarding-stepper-steps/bmb-login-onboarding-stepper-step-four.component.mjs +0 -87
- package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-stepper/bmb-login-onboarding-stepper-steps/bmb-login-onboarding-stepper-step-one.component.mjs +0 -88
- package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-stepper/bmb-login-onboarding-stepper-steps/bmb-login-onboarding-stepper-step-three.component.mjs +0 -57
- package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-stepper/bmb-login-onboarding-stepper-steps/bmb-login-onboarding-stepper-step-two.component.mjs +0 -99
- package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-stepper/bmb-login-onboarding-stepper-steps/bmb-login-onboarding-stepper-step.component.mjs +0 -39
- package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-stepper/bmb-login-onboarding-stepper.component.mjs +0 -44
- package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding.component.mjs +0 -52
- package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding.service.mjs +0 -70
- package/esm2022/lib/components/bmb-login-onboarding/types.mjs +0 -2
- package/esm2022/lib/components/bmb-logo/bmb-logo.component.mjs +0 -43
- package/esm2022/lib/components/bmb-media-card/bmb-media-card.component.mjs +0 -64
- package/esm2022/lib/components/bmb-mitec-logo-animation/bmb-mitec-logo-animation.component.mjs +0 -14
- package/esm2022/lib/components/bmb-mobile-templates/bmb-mobile-templates.component.mjs +0 -88
- package/esm2022/lib/components/bmb-modal/bmb-modal.component.mjs +0 -139
- package/esm2022/lib/components/bmb-modal/bmb-modal.interface.mjs +0 -2
- package/esm2022/lib/components/bmb-modal/bmb-native-modal.component.mjs +0 -84
- package/esm2022/lib/components/bmb-multi-dot-paginator/bmb-multi-dot-paginator-item/bmb-multi-dot-paginator-item.component.mjs +0 -15
- package/esm2022/lib/components/bmb-multi-dot-paginator/bmb-multi-dot-paginator.component.mjs +0 -59
- package/esm2022/lib/components/bmb-navigation-bar/bmb-navigation-bar.component.mjs +0 -30
- package/esm2022/lib/components/bmb-notice-card/bmb-notice-card.component.mjs +0 -43
- package/esm2022/lib/components/bmb-notification-card/bmb-notification-card.component.mjs +0 -86
- package/esm2022/lib/components/bmb-overlay/bmb-overlay.component.mjs +0 -22
- package/esm2022/lib/components/bmb-paginator/bmb-paginator.component.mjs +0 -52
- package/esm2022/lib/components/bmb-portal/bmb-portal.component.mjs +0 -52
- package/esm2022/lib/components/bmb-profile/bmb-profile.component.mjs +0 -153
- package/esm2022/lib/components/bmb-progress-bar/bmb-progress-bar.component.mjs +0 -39
- package/esm2022/lib/components/bmb-progress-cirlce/bmb-progress-circle.component.mjs +0 -196
- package/esm2022/lib/components/bmb-progress-cirlce/bmb-progress-circle.interface.mjs +0 -2
- package/esm2022/lib/components/bmb-pull-wedge/bmb-pull-wedge.component.mjs +0 -88
- package/esm2022/lib/components/bmb-push-notification/bmb-push-notification-item/bmb-push-notification-item.component.mjs +0 -75
- package/esm2022/lib/components/bmb-push-notification/bmb-push-notification.component.mjs +0 -24
- package/esm2022/lib/components/bmb-push-notification/types.mjs +0 -2
- package/esm2022/lib/components/bmb-radial/bmb-radial.component.mjs +0 -78
- package/esm2022/lib/components/bmb-search-input/bmb-search-input.component.mjs +0 -117
- package/esm2022/lib/components/bmb-select/bmb-select-item/bmb-select-item.component.mjs +0 -16
- package/esm2022/lib/components/bmb-select/bmb-select.component.mjs +0 -55
- package/esm2022/lib/components/bmb-server-table/bmb-server-table.component.mjs +0 -82
- package/esm2022/lib/components/bmb-sidebar/bmb-sidebar.component.mjs +0 -103
- package/esm2022/lib/components/bmb-sidebar/bmb-sidebar.interface.mjs +0 -2
- package/esm2022/lib/components/bmb-simple-header/bmb-simple-header.component.mjs +0 -64
- package/esm2022/lib/components/bmb-skeleton/bmb-skeleton.component.mjs +0 -16
- package/esm2022/lib/components/bmb-sounds-card/bmb-sounds-card.component.mjs +0 -64
- package/esm2022/lib/components/bmb-stat-counter/bmb-stat-counter.component.mjs +0 -32
- package/esm2022/lib/components/bmb-step-progress-bar/bmb-step-progress-bar.component.mjs +0 -53
- package/esm2022/lib/components/bmb-student-activity-card/bmb-student-activity-card.component.mjs +0 -53
- package/esm2022/lib/components/bmb-student-activity-selector/bmb-student-activity-tab/bmb-student-activity-tab.component.mjs +0 -27
- package/esm2022/lib/components/bmb-switch/bmb-switch.component.mjs +0 -88
- package/esm2022/lib/components/bmb-tables/bmb-tables.component.mjs +0 -545
- package/esm2022/lib/components/bmb-tables/bmb-tables.interface.mjs +0 -2
- package/esm2022/lib/components/bmb-tabs/bmb-tabs.component.mjs +0 -127
- package/esm2022/lib/components/bmb-tags/bmb-tags.component.mjs +0 -65
- package/esm2022/lib/components/bmb-text-editor/bmb-text-editor.component.mjs +0 -135
- package/esm2022/lib/components/bmb-text-link/bmb-text-link.component.mjs +0 -43
- package/esm2022/lib/components/bmb-theme/bmb-theme.component.mjs +0 -65
- package/esm2022/lib/components/bmb-three-cols/bmb-three-cols.component.mjs +0 -30
- package/esm2022/lib/components/bmb-timestream/bmb-timestream-detail/bmb-timestream-detail.component.mjs +0 -74
- package/esm2022/lib/components/bmb-timestream/bmb-timestream-error/bmb-timestream-error.component.mjs +0 -13
- package/esm2022/lib/components/bmb-timestream/bmb-timestream.component.mjs +0 -238
- package/esm2022/lib/components/bmb-timestream/types.mjs +0 -2
- package/esm2022/lib/components/bmb-timestream-card/bmb-timestream-card.component.mjs +0 -139
- package/esm2022/lib/components/bmb-title-content/bmb-title-content.component.mjs +0 -61
- package/esm2022/lib/components/bmb-toast/bmb-toast.component.mjs +0 -47
- package/esm2022/lib/components/bmb-tooltip/bmb-tooltip.component.mjs +0 -26
- package/esm2022/lib/components/bmb-top-bar/bmb-top-bar-item/bmb-top-bar-item.component.mjs +0 -31
- package/esm2022/lib/components/bmb-top-bar/bmb-top-bar-user-section/bmb-top-bar-user-section.component.mjs +0 -70
- package/esm2022/lib/components/bmb-top-bar/bmb-top-bar.component.mjs +0 -122
- package/esm2022/lib/components/bmb-top-bar/types.mjs +0 -2
- package/esm2022/lib/components/bmb-totp/bmb-totp.component.mjs +0 -138
- package/esm2022/lib/components/bmb-user-image/bmb-user-image.component.mjs +0 -44
- package/esm2022/lib/components/bmb-user-profile/bmb-user-profile-content/bmb-user-profile-content.component.mjs +0 -19
- package/esm2022/lib/components/bmb-user-profile/bmb-user-profile.component.mjs +0 -71
- package/esm2022/lib/components/bmb-user-summary/bmb-user-summary-content/bmb-user-summary-content.component.mjs +0 -51
- package/esm2022/lib/components/bmb-user-summary/bmb-user-summary.component.mjs +0 -28
- package/esm2022/lib/components/bmb-value-counter/bmb-value-counter.component.mjs +0 -23
- package/esm2022/lib/components/bmb-web-templates/bmb-web-templates.component.mjs +0 -85
- package/esm2022/lib/components/bmb-wheel-menu/bmb-wheel-menu.component.mjs +0 -128
- package/esm2022/lib/components/utils/bmb-dropdown-content/bmb-dropdown-content.component.mjs +0 -55
- package/esm2022/lib/directives/bmb-accordion/bmb-accordion-control.directive.mjs +0 -88
- package/esm2022/lib/directives/bmb-button/button.directive.mjs +0 -84
- package/esm2022/lib/directives/bmb-button-group/bmb-button-group.directive.mjs +0 -29
- package/esm2022/lib/directives/bmb-layout/bmb-layout-item.directive.mjs +0 -51
- package/esm2022/lib/directives/bmb-layout/bmb-layout.directive.mjs +0 -36
- package/esm2022/lib/directives/bmb-layout/bmb-vertical-layout/bmb-vertical-layout-item.directive.mjs +0 -34
- package/esm2022/lib/directives/bmb-layout/bmb-vertical-layout/bmb-vertical-layout.directive.mjs +0 -37
- package/esm2022/lib/directives/bmb-layout-grid/bmb-layout-grid.directive.mjs +0 -89
- package/esm2022/lib/directives/utils/clickoutside.directive.mjs +0 -41
- package/esm2022/lib/ds-ng.component.mjs +0 -11
- package/esm2022/lib/ds-ng.service.mjs +0 -14
- package/esm2022/lib/services/calendar.service.mjs +0 -51
- package/esm2022/lib/services/index.mjs +0 -3
- package/esm2022/lib/services/native-modal.service.mjs +0 -69
- package/esm2022/lib/services/notification.service.mjs +0 -77
- package/esm2022/lib/services/tabs.service.mjs +0 -30
- package/esm2022/lib/services/theme.service.mjs +0 -30
- package/esm2022/lib/services/toast.service.mjs +0 -24
- package/esm2022/lib/services/user/profile.service.mjs +0 -26
- package/esm2022/lib/types/colors.mjs +0 -2
- package/esm2022/lib/types/index.mjs +0 -11
- package/esm2022/lib/utils/countryCodes.mjs +0 -1089
- package/esm2022/lib/utils/currencyFormat.mjs +0 -7
- package/esm2022/lib/utils/dropdown.mjs +0 -85
- package/esm2022/lib/utils/formControl.mjs +0 -25
- package/esm2022/lib/utils/timestreamFilters.mjs +0 -32
- package/esm2022/lib/utils/utils.mjs +0 -66
- package/esm2022/public-api.mjs +0 -151
- package/esm2022/ti-tecnologico-de-monterrey-oficial-ds-ng.mjs +0 -5
|
@@ -1,545 +0,0 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { Component, ViewChild, Output, EventEmitter, ElementRef, TemplateRef, HostListener, ViewEncapsulation, ChangeDetectionStrategy, input, effect, model, computed, } from '@angular/core';
|
|
3
|
-
import { MatPaginator, MatPaginatorModule, } from '@angular/material/paginator';
|
|
4
|
-
import { MatTableDataSource, MatTableModule, MatTable, } from '@angular/material/table';
|
|
5
|
-
import { animate, state, style, transition, trigger, } from '@angular/animations';
|
|
6
|
-
import { MatInputModule } from '@angular/material/input';
|
|
7
|
-
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
8
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
9
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
10
|
-
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
11
|
-
import { SelectionModel } from '@angular/cdk/collections';
|
|
12
|
-
import { BmbIconComponent } from '../bmb-icon/bmb-icon.component';
|
|
13
|
-
import { BmbCheckboxComponent } from '../bmb-checkbox/bmb-checkbox.component';
|
|
14
|
-
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
15
|
-
import { BmbInputComponent } from '../bmb-input/bmb-input.component';
|
|
16
|
-
import { ReactiveFormsModule, FormControl, FormGroup } from '@angular/forms';
|
|
17
|
-
import { BmbDateRangeComponent } from '../bmb-date-range/bmb-date-range.component';
|
|
18
|
-
import { BmbActionIconComponent } from '../bmb-action-icon/bmb-action-icon.component';
|
|
19
|
-
import { BmbLayoutDirective } from '../../directives/bmb-layout/bmb-layout.directive';
|
|
20
|
-
import { BmbLayoutItemDirective } from '../../directives/bmb-layout/bmb-layout-item.directive';
|
|
21
|
-
import { DateTime } from 'luxon';
|
|
22
|
-
import * as i0 from "@angular/core";
|
|
23
|
-
import * as i1 from "@angular/platform-browser";
|
|
24
|
-
import * as i2 from "@angular/common";
|
|
25
|
-
import * as i3 from "@angular/material/paginator";
|
|
26
|
-
import * as i4 from "@angular/material/table";
|
|
27
|
-
import * as i5 from "@angular/material/button";
|
|
28
|
-
import * as i6 from "@angular/material/tooltip";
|
|
29
|
-
export class BmbTablesComponent {
|
|
30
|
-
onResize(event) {
|
|
31
|
-
this.setTableResize(this.matTableRef.nativeElement.clientWidth);
|
|
32
|
-
}
|
|
33
|
-
constructor(renderer, sanitizer, cdr) {
|
|
34
|
-
this.renderer = renderer;
|
|
35
|
-
this.sanitizer = sanitizer;
|
|
36
|
-
this.cdr = cdr;
|
|
37
|
-
this._rawColumns = [];
|
|
38
|
-
this._rawConfig = {
|
|
39
|
-
isSelectable: false,
|
|
40
|
-
isExpandible: false,
|
|
41
|
-
isPaginable: false,
|
|
42
|
-
showActions: false,
|
|
43
|
-
};
|
|
44
|
-
this.dataSource = new MatTableDataSource();
|
|
45
|
-
this.originalData = [];
|
|
46
|
-
this.filterForm = new FormGroup({});
|
|
47
|
-
this.tableDisplayColumns = [];
|
|
48
|
-
this.tableColumns = [];
|
|
49
|
-
this.selection = new SelectionModel(true, []);
|
|
50
|
-
this.pressed = false;
|
|
51
|
-
this.searchControl = new FormControl('');
|
|
52
|
-
this.showSearch = input(false);
|
|
53
|
-
this.showFilters = input(false);
|
|
54
|
-
this.pageSize = input();
|
|
55
|
-
this.totalItems = input(0);
|
|
56
|
-
this.data = input([]);
|
|
57
|
-
this.columns = input([]);
|
|
58
|
-
this.actionTemplate = input(null);
|
|
59
|
-
this.config = input();
|
|
60
|
-
this.detailTemplate = input(null);
|
|
61
|
-
this.truncate = input(false);
|
|
62
|
-
this.wrap = input(true);
|
|
63
|
-
this.initialTableSelection = input([]);
|
|
64
|
-
this.lang = input('es');
|
|
65
|
-
this.clearSelection = model(false);
|
|
66
|
-
this.serverSide = input(false);
|
|
67
|
-
this.currentPage = model(0);
|
|
68
|
-
this.filtersVisible = model(false);
|
|
69
|
-
this.filtersPosition = input('top');
|
|
70
|
-
this.select = new EventEmitter();
|
|
71
|
-
this.clickedRow = new EventEmitter();
|
|
72
|
-
this.searchChange = new EventEmitter();
|
|
73
|
-
this.filtersChange = new EventEmitter();
|
|
74
|
-
this.searchModeChange = new EventEmitter();
|
|
75
|
-
this.pageChange = new EventEmitter();
|
|
76
|
-
this.parsedFiltersColumns = computed(() => this.columns().filter((column) => column.isFilterable !== false));
|
|
77
|
-
effect(() => {
|
|
78
|
-
const total = this.totalItems();
|
|
79
|
-
const size = this.pageSize();
|
|
80
|
-
if (this.serverSide()) {
|
|
81
|
-
const last = this.lastPage();
|
|
82
|
-
if (this.currentPage() < 0) {
|
|
83
|
-
this.currentPage.set(0);
|
|
84
|
-
this.cdr.detectChanges();
|
|
85
|
-
}
|
|
86
|
-
else if (this.currentPage() > last) {
|
|
87
|
-
this.currentPage.set(last);
|
|
88
|
-
this.cdr.detectChanges();
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
effect(() => {
|
|
93
|
-
const selectedRows = this.initialTableSelection() ?? [];
|
|
94
|
-
if (selectedRows.length && this.dataSource.data.length) {
|
|
95
|
-
selectedRows.forEach((row) => {
|
|
96
|
-
this.selection.select(this.dataSource.data[row]);
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
this.selection.clear();
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
ngOnChanges(changes) {
|
|
105
|
-
if (changes['data']) {
|
|
106
|
-
this.parseData(changes['data'].currentValue);
|
|
107
|
-
}
|
|
108
|
-
if (changes['columns']) {
|
|
109
|
-
this.parseColumns(changes['columns'].currentValue);
|
|
110
|
-
}
|
|
111
|
-
if (changes['config']) {
|
|
112
|
-
this.setConfig(changes['config'].currentValue);
|
|
113
|
-
}
|
|
114
|
-
if (changes['clearSelection']) {
|
|
115
|
-
if (this.clearSelection()) {
|
|
116
|
-
this.selection.clear();
|
|
117
|
-
this.clearSelection.set(false);
|
|
118
|
-
this.select.emit(this.selection.selected);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
ngOnInit() {
|
|
123
|
-
this.searchControl.valueChanges.subscribe((value) => {
|
|
124
|
-
const search = (value || '').trim().toLowerCase();
|
|
125
|
-
if (this.serverSide()) {
|
|
126
|
-
this.searchModeChange.emit('server');
|
|
127
|
-
this.searchChange.emit(search);
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
this.searchModeChange.emit('client');
|
|
131
|
-
this.dataSource.filter = search;
|
|
132
|
-
}
|
|
133
|
-
});
|
|
134
|
-
this.dataSource.filterPredicate = (data, filter) => {
|
|
135
|
-
const searchText = filter.trim().toLowerCase();
|
|
136
|
-
return this._rawColumns.some((column) => {
|
|
137
|
-
const value = (data[column.dataKey] ?? '').toString().toLowerCase();
|
|
138
|
-
return value.includes(searchText);
|
|
139
|
-
});
|
|
140
|
-
};
|
|
141
|
-
const selectedRows = this.initialTableSelection() ?? [];
|
|
142
|
-
if (selectedRows.length && this.dataSource.data.length) {
|
|
143
|
-
selectedRows.forEach((row) => {
|
|
144
|
-
this.selection.select(this.dataSource.data[row]);
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
else {
|
|
148
|
-
this.selection.clear();
|
|
149
|
-
}
|
|
150
|
-
this._rawConfig = this.config() || {};
|
|
151
|
-
//this.applyColumnsAndConfig();
|
|
152
|
-
this.parseData(this.data());
|
|
153
|
-
this.parseColumns(this.columns());
|
|
154
|
-
}
|
|
155
|
-
parseData(data) {
|
|
156
|
-
this.dataSource.data = data;
|
|
157
|
-
this.originalData = data;
|
|
158
|
-
if (!this.serverSide()) {
|
|
159
|
-
this.applyFilters();
|
|
160
|
-
}
|
|
161
|
-
if (this.paginator) {
|
|
162
|
-
this.dataSource.paginator = this.paginator;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
parseColumns(columns) {
|
|
166
|
-
this._rawColumns = columns;
|
|
167
|
-
this.applyColumnsAndConfig(columns);
|
|
168
|
-
this.setupDynamicFilters();
|
|
169
|
-
}
|
|
170
|
-
sanitizeHTML(label) {
|
|
171
|
-
return this.sanitizer.bypassSecurityTrustHtml(label);
|
|
172
|
-
}
|
|
173
|
-
ngAfterViewInit() {
|
|
174
|
-
if (this.dataSource && this.paginator) {
|
|
175
|
-
this.dataSource.paginator = this.paginator;
|
|
176
|
-
}
|
|
177
|
-
this.setTableResize(this.matTableRef.nativeElement.clientWidth);
|
|
178
|
-
}
|
|
179
|
-
applyColumnsAndConfig(newColumns = []) {
|
|
180
|
-
if (!newColumns || !Array.isArray(newColumns) || newColumns.length === 0)
|
|
181
|
-
return;
|
|
182
|
-
const parsedNewColumns = newColumns.map((col) => {
|
|
183
|
-
return {
|
|
184
|
-
type: 'string',
|
|
185
|
-
labelEn: col.label,
|
|
186
|
-
...col,
|
|
187
|
-
};
|
|
188
|
-
});
|
|
189
|
-
const displayColumns = [...parsedNewColumns.map((col) => col.def)];
|
|
190
|
-
if (this._rawConfig.isExpandible) {
|
|
191
|
-
displayColumns.unshift('expand');
|
|
192
|
-
}
|
|
193
|
-
if (this._rawConfig.isSelectable) {
|
|
194
|
-
displayColumns.unshift('select');
|
|
195
|
-
}
|
|
196
|
-
if (this._rawConfig.showActions) {
|
|
197
|
-
displayColumns.push('actions');
|
|
198
|
-
}
|
|
199
|
-
this._rawColumns = parsedNewColumns;
|
|
200
|
-
this.tableColumns = parsedNewColumns;
|
|
201
|
-
this.tableDisplayColumns = displayColumns;
|
|
202
|
-
this.tableConfig = this._rawConfig;
|
|
203
|
-
}
|
|
204
|
-
setTableResize(tableWidth) {
|
|
205
|
-
let totWidth = 0;
|
|
206
|
-
this.tableColumns.forEach((column) => {
|
|
207
|
-
column.width = column.width || 50;
|
|
208
|
-
totWidth += column.width;
|
|
209
|
-
});
|
|
210
|
-
const scale = (tableWidth - 5) / totWidth;
|
|
211
|
-
}
|
|
212
|
-
mouseMove(index) {
|
|
213
|
-
this.resizableMousemove = this.renderer.listen('document', 'mousemove', (event) => {
|
|
214
|
-
if (this.pressed && event.buttons) {
|
|
215
|
-
const dx = this.isResizingRight
|
|
216
|
-
? event.pageX - this.startX
|
|
217
|
-
: -event.pageX + this.startX;
|
|
218
|
-
const width = this.startWidth + dx;
|
|
219
|
-
}
|
|
220
|
-
});
|
|
221
|
-
this.resizableMouseup = this.renderer.listen('document', 'mouseup', () => {
|
|
222
|
-
if (this.pressed) {
|
|
223
|
-
this.pressed = false;
|
|
224
|
-
this.currentResizeIndex = -1;
|
|
225
|
-
this.resizableMousemove();
|
|
226
|
-
this.resizableMouseup();
|
|
227
|
-
}
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
checkResizing(event, index) {
|
|
231
|
-
const cellData = this.getCellData(index);
|
|
232
|
-
this.isResizingRight =
|
|
233
|
-
index === 0 ||
|
|
234
|
-
(Math.abs(event.pageX - cellData.right) < cellData.width / 2 &&
|
|
235
|
-
index !== this.tableColumns.length - 1);
|
|
236
|
-
}
|
|
237
|
-
getCellData(index) {
|
|
238
|
-
const headerRow = this.matTableRef.nativeElement.children[0].querySelector('tr');
|
|
239
|
-
const cell = headerRow.children[index];
|
|
240
|
-
return cell.getBoundingClientRect();
|
|
241
|
-
}
|
|
242
|
-
onResizeColumn(event, index) {
|
|
243
|
-
this.checkResizing(event, index);
|
|
244
|
-
this.currentResizeIndex = index;
|
|
245
|
-
this.pressed = true;
|
|
246
|
-
this.startX = event.pageX;
|
|
247
|
-
this.startWidth = event.target.parentElement.clientWidth;
|
|
248
|
-
event.preventDefault();
|
|
249
|
-
this.mouseMove(index);
|
|
250
|
-
}
|
|
251
|
-
onSelect() {
|
|
252
|
-
const indexSelected = this.dataSource.data.reduce((acc, current, index) => {
|
|
253
|
-
if (this.selection.isSelected(current))
|
|
254
|
-
acc.push(index);
|
|
255
|
-
return acc;
|
|
256
|
-
}, []);
|
|
257
|
-
this.select.emit(this.selection.selected);
|
|
258
|
-
}
|
|
259
|
-
setConfig(config) {
|
|
260
|
-
this.tableConfig = config;
|
|
261
|
-
if (this.tableConfig.isExpandible) {
|
|
262
|
-
this.tableDisplayColumns?.unshift('expand');
|
|
263
|
-
}
|
|
264
|
-
if (this.tableConfig.isSelectable) {
|
|
265
|
-
this.tableDisplayColumns?.unshift('select');
|
|
266
|
-
}
|
|
267
|
-
if (this.tableConfig.showActions) {
|
|
268
|
-
this.tableDisplayColumns?.push('actions');
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
isAllSelected() {
|
|
272
|
-
const numSelected = this.selection.selected.length;
|
|
273
|
-
const numRows = this.dataSource.data.length;
|
|
274
|
-
return numSelected === numRows;
|
|
275
|
-
}
|
|
276
|
-
toggleAllRows() {
|
|
277
|
-
if (this.isAllSelected()) {
|
|
278
|
-
this.selection.clear();
|
|
279
|
-
this.onSelect();
|
|
280
|
-
return;
|
|
281
|
-
}
|
|
282
|
-
this.selection.select(...this.dataSource.data);
|
|
283
|
-
this.onSelect();
|
|
284
|
-
}
|
|
285
|
-
checkboxLabel(row) {
|
|
286
|
-
if (!row) {
|
|
287
|
-
return `${this.isAllSelected() ? 'deselect' : 'select'} all`;
|
|
288
|
-
}
|
|
289
|
-
return `${this.selection.isSelected(row) ? 'deselect' : 'select'} row ${row.position + 1}`;
|
|
290
|
-
}
|
|
291
|
-
isEven(rowIndex) {
|
|
292
|
-
const filteredIndex = this.dataSource.data
|
|
293
|
-
.filter((row) => !row.isDetail)
|
|
294
|
-
.findIndex((row, index) => index === rowIndex);
|
|
295
|
-
return filteredIndex % 2 === 0;
|
|
296
|
-
}
|
|
297
|
-
isOdd(rowIndex) {
|
|
298
|
-
return !this.isEven(rowIndex);
|
|
299
|
-
}
|
|
300
|
-
hasEllipsis(element) {
|
|
301
|
-
if (!element) {
|
|
302
|
-
return false;
|
|
303
|
-
}
|
|
304
|
-
const elementRef = new ElementRef(element);
|
|
305
|
-
return (elementRef.nativeElement.scrollWidth >
|
|
306
|
-
elementRef.nativeElement.clientWidth);
|
|
307
|
-
}
|
|
308
|
-
getPaginationText() {
|
|
309
|
-
const total = this.serverSide()
|
|
310
|
-
? (this.totalItems?.() ?? 0)
|
|
311
|
-
: (this.paginator?.length ?? 0);
|
|
312
|
-
const pageIndex = this.serverSide()
|
|
313
|
-
? (this.currentPage?.() ?? 0)
|
|
314
|
-
: (this.paginator?.pageIndex ?? 0);
|
|
315
|
-
const pageSize = this.serverSide()
|
|
316
|
-
? (this.pageSize?.() ?? 10)
|
|
317
|
-
: (this.paginator?.pageSize ?? 10);
|
|
318
|
-
if (total === 0 || pageSize === 0) {
|
|
319
|
-
return `0 de ${total}`;
|
|
320
|
-
}
|
|
321
|
-
const startIndex = pageIndex * pageSize + 1;
|
|
322
|
-
const endIndex = Math.min((pageIndex + 1) * pageSize, total);
|
|
323
|
-
return `${startIndex} - ${endIndex} de ${total}`;
|
|
324
|
-
}
|
|
325
|
-
isTemplateRef(value) {
|
|
326
|
-
return value instanceof TemplateRef;
|
|
327
|
-
}
|
|
328
|
-
onSelectRow(row) {
|
|
329
|
-
this.clickedRow.emit(row);
|
|
330
|
-
}
|
|
331
|
-
getCellClasses(row, columnKey, index) {
|
|
332
|
-
const semanticType = row[columnKey + 'Type'];
|
|
333
|
-
const classes = {
|
|
334
|
-
'bmb_table-sticky': index === 0,
|
|
335
|
-
truncated: this.truncate(),
|
|
336
|
-
wrapped: this.wrap(),
|
|
337
|
-
};
|
|
338
|
-
if (semanticType) {
|
|
339
|
-
classes['bmb_table-' + semanticType] = true;
|
|
340
|
-
}
|
|
341
|
-
return classes;
|
|
342
|
-
}
|
|
343
|
-
setupDynamicFilters() {
|
|
344
|
-
this._rawColumns.forEach((column) => {
|
|
345
|
-
const key = column.dataKey;
|
|
346
|
-
switch (column.type) {
|
|
347
|
-
case 'number':
|
|
348
|
-
this.filterForm.addControl(`${key}_min`, new FormControl());
|
|
349
|
-
this.filterForm.addControl(`${key}_max`, new FormControl());
|
|
350
|
-
break;
|
|
351
|
-
case 'date':
|
|
352
|
-
this.filterForm.addControl(`${key}_from`, new FormControl());
|
|
353
|
-
this.filterForm.addControl(`${key}_to`, new FormControl());
|
|
354
|
-
break;
|
|
355
|
-
case 'string':
|
|
356
|
-
this.filterForm.addControl(`${key}_contains`, new FormControl(''));
|
|
357
|
-
break;
|
|
358
|
-
}
|
|
359
|
-
});
|
|
360
|
-
this.filterForm.valueChanges.subscribe(() => this.applyFilters());
|
|
361
|
-
}
|
|
362
|
-
applyFilters() {
|
|
363
|
-
let filtered = [...this.originalData];
|
|
364
|
-
const values = this.filterForm.value;
|
|
365
|
-
if (this.serverSide()) {
|
|
366
|
-
this.filtersChange.emit(values);
|
|
367
|
-
return;
|
|
368
|
-
}
|
|
369
|
-
this._rawColumns.forEach((column) => {
|
|
370
|
-
const key = column.dataKey;
|
|
371
|
-
const type = column.type;
|
|
372
|
-
if (type === 'number') {
|
|
373
|
-
const min = parseInt(values[`${key}_min`]) || null;
|
|
374
|
-
const max = parseInt(values[`${key}_max`]) || null;
|
|
375
|
-
filtered = filtered.filter((row) => {
|
|
376
|
-
const value = +row[key];
|
|
377
|
-
return ((min === null || value >= min) && (max === null || value <= max));
|
|
378
|
-
});
|
|
379
|
-
}
|
|
380
|
-
if (type === 'date') {
|
|
381
|
-
const dateFormat = column.dateFormat || 'yyyy-MM-dd';
|
|
382
|
-
const from = values[`${key}_from`]
|
|
383
|
-
? DateTime.fromFormat(values[`${key}_from`], dateFormat)
|
|
384
|
-
: null;
|
|
385
|
-
const to = values[`${key}_to`]
|
|
386
|
-
? DateTime.fromFormat(values[`${key}_to`], dateFormat)
|
|
387
|
-
: null;
|
|
388
|
-
filtered = filtered.filter((row) => {
|
|
389
|
-
const dateVal = DateTime.fromFormat(row[key], dateFormat);
|
|
390
|
-
return (!from || dateVal >= from) && (!to || dateVal <= to);
|
|
391
|
-
});
|
|
392
|
-
}
|
|
393
|
-
if (type === 'string') {
|
|
394
|
-
const search = values[`${key}_contains`]?.toLowerCase();
|
|
395
|
-
if (search) {
|
|
396
|
-
filtered = filtered.filter((row) => row[key]?.toLowerCase().includes(search));
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
});
|
|
400
|
-
this.dataSource.data = filtered;
|
|
401
|
-
}
|
|
402
|
-
getFormControl(name) {
|
|
403
|
-
return this.filterForm.get(name);
|
|
404
|
-
}
|
|
405
|
-
toggleFilters() {
|
|
406
|
-
this.filtersVisible.set(!this.filtersVisible());
|
|
407
|
-
}
|
|
408
|
-
onPageEvent(event) {
|
|
409
|
-
this.currentPage.set(event.pageIndex);
|
|
410
|
-
if (this.serverSide()) {
|
|
411
|
-
this.pageChange.emit({
|
|
412
|
-
pageIndex: event.pageIndex + 1,
|
|
413
|
-
pageSize: event.pageSize,
|
|
414
|
-
});
|
|
415
|
-
}
|
|
416
|
-
else {
|
|
417
|
-
this.dataSource.paginator.pageIndex = event.pageIndex;
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
get resolvedPageSize() {
|
|
421
|
-
return this.pageSize() ?? 10;
|
|
422
|
-
}
|
|
423
|
-
lastPage() {
|
|
424
|
-
const total = this.totalItems() ?? 0;
|
|
425
|
-
const size = this.resolvedPageSize;
|
|
426
|
-
const result = size === 0 ? 0 : Math.ceil(total / size) - 1;
|
|
427
|
-
return Math.max(0, result);
|
|
428
|
-
}
|
|
429
|
-
goToFirstPage() {
|
|
430
|
-
if (this.currentPage() > 0) {
|
|
431
|
-
this.currentPage.set(0);
|
|
432
|
-
this.pageChange.emit({
|
|
433
|
-
pageIndex: 1,
|
|
434
|
-
pageSize: this.resolvedPageSize,
|
|
435
|
-
});
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
goToPreviousPage() {
|
|
439
|
-
if (this.currentPage() > 0) {
|
|
440
|
-
this.currentPage.set(this.currentPage() - 1);
|
|
441
|
-
this.pageChange.emit({
|
|
442
|
-
pageIndex: this.currentPage() + 1,
|
|
443
|
-
pageSize: this.resolvedPageSize,
|
|
444
|
-
});
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
goToNextPage() {
|
|
448
|
-
if (this.currentPage() < this.lastPage()) {
|
|
449
|
-
this.currentPage.set(this.currentPage() + 1);
|
|
450
|
-
this.pageChange.emit({
|
|
451
|
-
pageIndex: this.currentPage() + 1,
|
|
452
|
-
pageSize: this.resolvedPageSize,
|
|
453
|
-
});
|
|
454
|
-
}
|
|
455
|
-
}
|
|
456
|
-
goToLastPage() {
|
|
457
|
-
const last = this.lastPage();
|
|
458
|
-
this.currentPage.set(last);
|
|
459
|
-
this.pageChange.emit({
|
|
460
|
-
pageIndex: last + 1,
|
|
461
|
-
pageSize: this.resolvedPageSize,
|
|
462
|
-
});
|
|
463
|
-
}
|
|
464
|
-
getTableClasses() {
|
|
465
|
-
const classList = ['bmb_table'];
|
|
466
|
-
switch (this.filtersPosition()) {
|
|
467
|
-
case 'right':
|
|
468
|
-
classList.push('bmb_table-filters-right');
|
|
469
|
-
break;
|
|
470
|
-
case 'bottom':
|
|
471
|
-
classList.push('bmb_table-filters-bottom');
|
|
472
|
-
break;
|
|
473
|
-
case 'left':
|
|
474
|
-
classList.push('bmb_table-filters-left');
|
|
475
|
-
break;
|
|
476
|
-
default:
|
|
477
|
-
classList.push('bmb_table-filters-top');
|
|
478
|
-
}
|
|
479
|
-
return classList;
|
|
480
|
-
}
|
|
481
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BmbTablesComponent, deps: [{ token: i0.Renderer2 }, { token: i1.DomSanitizer }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
482
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: BmbTablesComponent, isStandalone: true, selector: "bmb-table", inputs: { showSearch: { classPropertyName: "showSearch", publicName: "showSearch", isSignal: true, isRequired: false, transformFunction: null }, showFilters: { classPropertyName: "showFilters", publicName: "showFilters", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, totalItems: { classPropertyName: "totalItems", publicName: "totalItems", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, actionTemplate: { classPropertyName: "actionTemplate", publicName: "actionTemplate", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, detailTemplate: { classPropertyName: "detailTemplate", publicName: "detailTemplate", isSignal: true, isRequired: false, transformFunction: null }, truncate: { classPropertyName: "truncate", publicName: "truncate", isSignal: true, isRequired: false, transformFunction: null }, wrap: { classPropertyName: "wrap", publicName: "wrap", isSignal: true, isRequired: false, transformFunction: null }, initialTableSelection: { classPropertyName: "initialTableSelection", publicName: "initialTableSelection", isSignal: true, isRequired: false, transformFunction: null }, lang: { classPropertyName: "lang", publicName: "lang", isSignal: true, isRequired: false, transformFunction: null }, clearSelection: { classPropertyName: "clearSelection", publicName: "clearSelection", isSignal: true, isRequired: false, transformFunction: null }, serverSide: { classPropertyName: "serverSide", publicName: "serverSide", isSignal: true, isRequired: false, transformFunction: null }, currentPage: { classPropertyName: "currentPage", publicName: "currentPage", isSignal: true, isRequired: false, transformFunction: null }, filtersVisible: { classPropertyName: "filtersVisible", publicName: "filtersVisible", isSignal: true, isRequired: false, transformFunction: null }, filtersPosition: { classPropertyName: "filtersPosition", publicName: "filtersPosition", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { clearSelection: "clearSelectionChange", currentPage: "currentPageChange", filtersVisible: "filtersVisibleChange", select: "select", clickedRow: "clickedRow", searchChange: "searchChange", filtersChange: "filtersChange", searchModeChange: "searchModeChange", pageChange: "pageChange" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "matTableRef", first: true, predicate: MatTable, descendants: true, read: ElementRef }, { propertyName: "headerCellRef", first: true, predicate: ["headerCellRef"], descendants: true }, { propertyName: "cellRef", first: true, predicate: ["cellRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div [ngClass]=\"getTableClasses()\">\n @if (showSearch() || filtersVisible()) {\n <header class=\"bmb_table-header\">\n <div class=\"bmb_table-filter\">\n @if (showSearch()) {\n <section class=\"bmb_table-filter-item bmb_table-filter-item-search\">\n <bmb-input\n class=\"bmb_table-search\"\n [type]=\"'text'\"\n [placeholder]=\"'Buscar'\"\n [disabled]=\"false\"\n [icon]=\"'search'\"\n [appearance]=\"'normal'\"\n [control]=\"searchControl\"\n ></bmb-input>\n </section>\n }\n\n @if (filtersVisible()) {\n @for (column of parsedFiltersColumns(); track $index) {\n <section class=\"bmb_table-filter-item\">\n @switch (column.type) {\n @case (\"number\") {\n <div class=\"bmb_table-filter-item-number\" margin=\"none\">\n <bmb-input\n [label]=\"column.label + ' m\u00EDnimo'\"\n [type]=\"'number'\"\n [placeholder]=\"'M\u00EDn'\"\n [appearance]=\"'normal'\"\n [control]=\"getFormControl(column.dataKey + '_min')\"\n />\n <bmb-input\n [label]=\"column.label + ' m\u00E1ximo'\"\n [type]=\"'number'\"\n [placeholder]=\"'M\u00E1x'\"\n [appearance]=\"'normal'\"\n [control]=\"getFormControl(column.dataKey + '_max')\"\n />\n </div>\n }\n\n @case (\"date\") {\n <bmb-date-range\n [label]=\"column.label\"\n [placeholderStartDate]=\"'Desde'\"\n [placeholderEndDate]=\"'Hasta'\"\n [icon]=\"'calendar_month'\"\n [appearance]=\"'normal'\"\n [dateFormat]=\"'dd/MM/yyyy'\"\n [controlStart]=\"getFormControl(column.dataKey + '_from')\"\n [controlEnd]=\"getFormControl(column.dataKey + '_to')\"\n (startDateChange)=\"\n getFormControl(column.dataKey + '_from').setValue($event)\n \"\n (endDateChange)=\"\n getFormControl(column.dataKey + '_to').setValue($event)\n \"\n />\n }\n\n @default {\n <bmb-input\n [label]=\"column.label\"\n [placeholder]=\"'Filtrar'\"\n [control]=\"getFormControl(column.dataKey + '_contains')\"\n />\n }\n }\n </section>\n }\n }\n </div>\n </header>\n }\n <div class=\"bmb_table-container\">\n @if (showFilters()) {\n <bmb-action-icon\n [idElement]=\"''\"\n [icon]=\"'filter_list'\"\n [iconSize]=\"24\"\n (buttonClick)=\"toggleFilters()\"\n ></bmb-action-icon>\n }\n <section class=\"bmb_table-container-table\">\n <table\n mat-table\n [dataSource]=\"dataSource\"\n class=\"bmb_table-content\"\n multiTemplateDataRows\n >\n <!-- Checkbox Column -->\n <ng-container matColumnDef=\"select\" sticky>\n <th mat-header-cell *matHeaderCellDef class=\"bmb_table-checkbox\">\n <bmb-checkbox\n (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\n [ariaLabel]=\"checkboxLabel()\"\n [disabled]=\"false\"\n />\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"bmb_table-checkbox\">\n <bmb-checkbox\n (change)=\"$event ? selection.toggle(row) : null; onSelect()\"\n [checked]=\"selection.isSelected(row)\"\n [ariaLabel]=\"checkboxLabel(row)\"\n [disabled]=\"false\"\n onkeypress=\"$event.stopPropagation()\"\n />\n </td>\n </ng-container>\n\n <!-- Expand Column -->\n <ng-container matColumnDef=\"expand\" sticky>\n <th\n mat-header-cell\n *matHeaderCellDef\n class=\"bmb_table-expand\"\n aria-label=\"row actions\"\n >\n \n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"bmb_table-expand\">\n <ng-container *ngIf=\"row.detail\">\n <button\n mat-icon-button\n aria-label=\"expand row\"\n (click)=\"\n expandedElement = expandedElement === row ? null : row;\n $event.stopPropagation()\n \"\n >\n <bmb-icon\n [icon]=\"\n expandedElement === row ? 'expand_less' : 'expand_more'\n \"\n />\n </button>\n </ng-container>\n </td>\n </ng-container>\n\n <!-- Display Columns -->\n @for (column of tableColumns; track column; let i = $index) {\n <ng-container [matColumnDef]=\"column.def\" [sticky]=\"i === 0\">\n <th\n mat-header-cell\n *matHeaderCellDef\n #headerCell\n [matTooltip]=\"hasEllipsis(headerCell) ? column.label : ''\"\n matTooltipPosition=\"below\"\n matTooltipClass=\"bmb_tooltip\"\n [ngClass]=\"{\n 'bmb_table-sticky': i === 0,\n truncated: truncate(),\n wrapped: wrap(),\n }\"\n >\n <!-- T\u00EDtulo -->\n @if (column.htmlLabel) {\n <ng-template\n [ngTemplateOutlet]=\"column.htmlLabel\"\n [ngTemplateOutletContext]=\"{ column: column, index: i }\"\n ></ng-template>\n } @else {\n {{ this.lang() === \"es\" ? column.label : column.labelEn }}\n }\n\n <!-- Resize Handle -->\n <span\n class=\"bmb_table-resize\"\n (mousedown)=\"onResizeColumn($event, i)\"\n ></span>\n </th>\n\n <td\n mat-cell\n *matCellDef=\"let row; let a = index\"\n #cell\n [matTooltip]=\"hasEllipsis(cell) ? row[column.dataKey] : ''\"\n tooltipClass=\"bmb_tooltip\"\n [ngClass]=\"getCellClasses(row, column.dataKey, i)\"\n >\n @if (isTemplateRef(row[column.dataKey + \"Template\"])) {\n <ng-template\n [ngTemplateOutlet]=\"row[column.dataKey + 'Template']\"\n [ngTemplateOutletContext]=\"{ row: row }\"\n ></ng-template>\n } @else {\n {{ row[column.dataKey]?.propertyName || row[column.dataKey] }}\n }\n </td>\n </ng-container>\n }\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\" stickyEnd>\n <th mat-header-cell *matHeaderCellDef class=\"bmb_table-actions\"></th>\n <td mat-cell *matCellDef=\"let row\" class=\"bmb_table-actions\">\n <ng-template\n [ngTemplateOutlet]=\"actionTemplate()!\"\n [ngTemplateOutletContext]=\"{ row: row }\"\n >\n </ng-template>\n </td>\n </ng-container>\n\n <!-- Row to expand -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td\n mat-cell\n *matCellDef=\"let row\"\n [attr.colspan]=\"tableDisplayColumns.length\"\n >\n <div\n class=\"bmb_table-detail\"\n [@detailExpand]=\"\n row == expandedElement ? 'expanded' : 'collapsed'\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"detailTemplate(); context: { row: row }\"\n ></ng-container>\n </div>\n </td>\n </ng-container>\n\n <!-- Rows -->\n <tr\n mat-header-row\n *matHeaderRowDef=\"tableDisplayColumns\"\n class=\"bmb_table-row\"\n ></tr>\n\n <tr\n mat-row\n *matRowDef=\"let row; columns: tableDisplayColumns; let i = dataIndex\"\n (click)=\"onSelectRow(row)\"\n class=\"bmb_table-row\"\n [class.bmb_table-expandible]=\"expandedElement === row\"\n [ngClass]=\"{\n 'bmb_table-even': isEven(i),\n 'bmb_table-odd': isOdd(i),\n }\"\n ></tr>\n\n <ng-container *ngIf=\"tableConfig?.isExpandible\">\n <tr\n mat-row\n *matRowDef=\"let row; columns: ['expandedDetail']; let i = dataIndex\"\n class=\"bmb_table-details\"\n [class.bmb_table-expanded]=\"expandedElement === row\"\n ></tr>\n </ng-container>\n </table>\n </section>\n <!-- Paginator -->\n <ng-container *ngIf=\"tableConfig?.isPaginable\" sticky>\n <mat-paginator\n #paginator\n [length]=\"totalItems()\"\n [pageSize]=\"this.pageSize()\"\n [hidePageSize]=\"true\"\n (page)=\"onPageEvent($event)\"\n >\n </mat-paginator>\n\n <div class=\"bmb_table-paginator\">\n <span class=\"bmb_table-paginator-text\">{{ getPaginationText() }}</span>\n\n <button\n [disabled]=\"\n serverSide() ? currentPage() === 0 : !paginator?.hasPreviousPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() === 0\n : !paginator?.hasPreviousPage(),\n }\"\n (click)=\"serverSide() ? goToFirstPage() : paginator.firstPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_double_arrow_left\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n <button\n [disabled]=\"\n serverSide() ? currentPage() === 0 : !paginator?.hasPreviousPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() === 0\n : !paginator?.hasPreviousPage(),\n }\"\n (click)=\"serverSide() ? goToPreviousPage() : paginator.previousPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_arrow_left\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n <button\n [disabled]=\"\n serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage(),\n }\"\n (click)=\"serverSide() ? goToNextPage() : paginator.nextPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_arrow_right\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n <button\n [disabled]=\"\n serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage(),\n }\"\n (click)=\"serverSide() ? goToLastPage() : paginator.lastPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_double_arrow_right\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: ["@font-face{font-family:Poppins-Thin;font-style:normal;font-weight:100;src:url(/assets/fonts/Poppins/Poppins-Thin.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Light;font-style:normal;font-weight:300;src:url(/assets/fonts/Poppins/Poppins-ExtraLight.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Regular;font-style:normal;font-weight:400;src:url(/assets/fonts/Poppins/Poppins-Regular.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Medium;font-style:normal;font-weight:500;src:url(/assets/fonts/Poppins/Poppins-Medium.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Semibold;font-style:normal;font-weight:600;src:url(/assets/fonts/Poppins/Poppins-SemiBold.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Bold;font-style:normal;font-weight:700;src:url(/assets/fonts/Poppins/Poppins-Bold.ttf) format(\"truetype\")}:root,:host{--font-display: \"Poppins-Regular\", sans-serif}.font-thin-1{font-family:Poppins-Thin,sans-serif;font-size:.625rem}.font-light-1{font-family:Poppins-Light,sans-serif;font-size:.625rem}.font-regular-1{font-family:Poppins-Regular,sans-serif;font-size:.625rem}.font-medium-1{font-family:Poppins-Medium,sans-serif;font-size:.625rem}.font-semibold-1{font-family:Poppins-Semibold,sans-serif;font-size:.625rem}.font-bold-1{font-family:Poppins-Bold,sans-serif;font-size:.625rem}.font-thin-2{font-family:Poppins-Thin,sans-serif;font-size:.6875rem}.font-light-2{font-family:Poppins-Light,sans-serif;font-size:.6875rem}.font-regular-2{font-family:Poppins-Regular,sans-serif;font-size:.6875rem}.font-medium-2{font-family:Poppins-Medium,sans-serif;font-size:.6875rem}.font-semibold-2{font-family:Poppins-Semibold,sans-serif;font-size:.6875rem}.font-bold-2{font-family:Poppins-Bold,sans-serif;font-size:.6875rem}.font-thin-3{font-family:Poppins-Thin,sans-serif;font-size:.75rem}.font-light-3{font-family:Poppins-Light,sans-serif;font-size:.75rem}.font-regular-3{font-family:Poppins-Regular,sans-serif;font-size:.75rem}.font-medium-3{font-family:Poppins-Medium,sans-serif;font-size:.75rem}.font-semibold-3{font-family:Poppins-Semibold,sans-serif;font-size:.75rem}.font-bold-3{font-family:Poppins-Bold,sans-serif;font-size:.75rem}.font-thin-4{font-family:Poppins-Thin,sans-serif;font-size:.875rem}.font-light-4{font-family:Poppins-Light,sans-serif;font-size:.875rem}.font-regular-4{font-family:Poppins-Regular,sans-serif;font-size:.875rem}.font-medium-4{font-family:Poppins-Medium,sans-serif;font-size:.875rem}.font-semibold-4{font-family:Poppins-Semibold,sans-serif;font-size:.875rem}.font-bold-4{font-family:Poppins-Bold,sans-serif;font-size:.875rem}.font-thin-4_5{font-family:Poppins-Thin,sans-serif;font-size:.9375rem}.font-light-4_5{font-family:Poppins-Light,sans-serif;font-size:.9375rem}.font-regular-4_5{font-family:Poppins-Regular,sans-serif;font-size:.9375rem}.font-medium-4_5{font-family:Poppins-Medium,sans-serif;font-size:.9375rem}.font-semibold-4_5{font-family:Poppins-Semibold,sans-serif;font-size:.9375rem}.font-bold-4_5{font-family:Poppins-Bold,sans-serif;font-size:.9375rem}.font-thin-5{font-family:Poppins-Thin,sans-serif;font-size:1rem}.font-light-5{font-family:Poppins-Light,sans-serif;font-size:1rem}.font-regular-5{font-family:Poppins-Regular,sans-serif;font-size:1rem}.font-medium-5{font-family:Poppins-Medium,sans-serif;font-size:1rem}.font-semibold-5{font-family:Poppins-Semibold,sans-serif;font-size:1rem}.font-bold-5{font-family:Poppins-Bold,sans-serif;font-size:1rem}.font-thin-6{font-family:Poppins-Thin,sans-serif;font-size:1.125rem}.font-light-6{font-family:Poppins-Light,sans-serif;font-size:1.125rem}.font-regular-6{font-family:Poppins-Regular,sans-serif;font-size:1.125rem}.font-medium-6{font-family:Poppins-Medium,sans-serif;font-size:1.125rem}.font-semibold-6{font-family:Poppins-Semibold,sans-serif;font-size:1.125rem}.font-bold-6{font-family:Poppins-Bold,sans-serif;font-size:1.125rem}.font-thin-7{font-family:Poppins-Thin,sans-serif;font-size:1.25rem}.font-light-7{font-family:Poppins-Light,sans-serif;font-size:1.25rem}.font-regular-7{font-family:Poppins-Regular,sans-serif;font-size:1.25rem}.font-medium-7{font-family:Poppins-Medium,sans-serif;font-size:1.25rem}.font-semibold-7{font-family:Poppins-Semibold,sans-serif;font-size:1.25rem}.font-bold-7{font-family:Poppins-Bold,sans-serif;font-size:1.25rem}.font-thin-8{font-family:Poppins-Thin,sans-serif;font-size:1.375rem}.font-light-8{font-family:Poppins-Light,sans-serif;font-size:1.375rem}.font-regular-8{font-family:Poppins-Regular,sans-serif;font-size:1.375rem}.font-medium-8{font-family:Poppins-Medium,sans-serif;font-size:1.375rem}.font-semibold-8{font-family:Poppins-Semibold,sans-serif;font-size:1.375rem}.font-bold-8{font-family:Poppins-Bold,sans-serif;font-size:1.375rem}.font-thin-9{font-family:Poppins-Thin,sans-serif;font-size:1.5rem}.font-light-9{font-family:Poppins-Light,sans-serif;font-size:1.5rem}.font-regular-9{font-family:Poppins-Regular,sans-serif;font-size:1.5rem}.font-medium-9{font-family:Poppins-Medium,sans-serif;font-size:1.5rem}.font-semibold-9{font-family:Poppins-Semibold,sans-serif;font-size:1.5rem}.font-bold-9{font-family:Poppins-Bold,sans-serif;font-size:1.5rem}.font-thin-10{font-family:Poppins-Thin,sans-serif;font-size:1.625rem}.font-light-10{font-family:Poppins-Light,sans-serif;font-size:1.625rem}.font-regular-10{font-family:Poppins-Regular,sans-serif;font-size:1.625rem}.font-medium-10{font-family:Poppins-Medium,sans-serif;font-size:1.625rem}.font-semibold-10{font-family:Poppins-Semibold,sans-serif;font-size:1.625rem}.font-bold-10{font-family:Poppins-Bold,sans-serif;font-size:1.625rem}.font-thin-11{font-family:Poppins-Thin,sans-serif;font-size:2.25rem}.font-light-11{font-family:Poppins-Light,sans-serif;font-size:2.25rem}.font-regular-11{font-family:Poppins-Regular,sans-serif;font-size:2.25rem}.font-medium-11{font-family:Poppins-Medium,sans-serif;font-size:2.25rem}.font-semibold-11{font-family:Poppins-Semibold,sans-serif;font-size:2.25rem}.font-bold-11{font-family:Poppins-Bold,sans-serif;font-size:2.25rem}.font-thin-12{font-family:Poppins-Thin,sans-serif;font-size:3rem}.font-light-12{font-family:Poppins-Light,sans-serif;font-size:3rem}.font-regular-12{font-family:Poppins-Regular,sans-serif;font-size:3rem}.font-medium-12{font-family:Poppins-Medium,sans-serif;font-size:3rem}.font-semibold-12{font-family:Poppins-Semibold,sans-serif;font-size:3rem}.font-bold-12{font-family:Poppins-Bold,sans-serif;font-size:3rem}.bmb_table{background:var(--containers-modal);box-shadow:var(--bmb-box-shadow-3);padding:1.5rem 1rem;width:100%;height:auto;box-sizing:border-box;container-type:inline-size}@media (min-width: 1000px){.bmb_table{height:100%}}.bmb_table-filters-top,.bmb_table-filters-left{display:flex;gap:1rem;overflow:auto;flex-flow:column}.bmb_table-filters-bottom,.bmb_table-filters-right{display:flex;gap:1rem;overflow:auto;flex-flow:column;flex-direction:column-reverse;align-items:flex-start}@media (min-width: 1000px){.bmb_table-filters-top .bmb_table-header,.bmb_table-filters-bottom .bmb_table-header{height:30%;width:100%}.bmb_table-filters-top .bmb_table-container,.bmb_table-filters-bottom .bmb_table-container{flex:1}}@media (min-width: 1000px){.bmb_table-filters-left,.bmb_table-filters-right{flex-flow:row}.bmb_table-filters-left .bmb_table-header,.bmb_table-filters-right .bmb_table-header{width:30%}.bmb_table-filters-left .bmb_table-container,.bmb_table-filters-right .bmb_table-container{flex:1}}@media (min-width: 1000px){.bmb_table-filters-right{flex-flow:row-reverse}}.bmb_table-header{container-type:inline-size;overflow:auto;max-height:100%}.bmb_table-header .bmb_table-filter{display:flex;gap:1rem;flex-flow:column;overflow:auto;width:100%}@container (min-width: 600px){.bmb_table-header .bmb_table-filter{flex-flow:row;flex-wrap:wrap}}.bmb_table-filter-item{width:100%}@container (min-width: 600px){.bmb_table-filter-item{width:calc(50% - .5rem)}}.bmb_table-filter-item-number{display:flex;flex-flow:row}@media (max-width: 699px){.bmb_table-filter-item-number{flex-flow:column}}.bmb_table-filter-item-number>*{flex:1}.bmb_table-filter-item-number bmb-input:first-child .bmb_field-actions{right:2.5rem}.bmb_table-filter-item-number bmb-input:first-child .bmb_field-wrapper:after{content:\"\";width:1rem;height:0;border-top:.125rem solid;margin:0 .625rem;display:inline-block}@media (max-width: 699px){.bmb_table-filter-item-number bmb-input:first-child .bmb_field-wrapper:after{display:none}}.bmb_table-search{flex:1}.bmb_table-filters{width:100%}.bmb_table-container{flex:1 0 auto;max-width:100%;overflow:auto;width:100%;max-height:100%;display:flex;flex-flow:column;gap:1rem}.bmb_table-container-table{overflow:auto;flex:1}.bmb_table-content{width:100%}.bmb_table-row.mat-mdc-row{height:2.875rem}.bmb_table-row>td,.bmb_table-row>th{height:100%;overflow:hidden;padding:0 .5rem}.bmb_table-row>td.truncated,.bmb_table-row>th.truncated{max-width:6.25rem;min-width:4.375rem;text-overflow:ellipsis;white-space:nowrap}.bmb_table-row>td.wrapped,.bmb_table-row>th.wrapped{white-space:nowrap}@media (min-width: 768px){.bmb_table-row>td,.bmb_table-row>th{max-width:fit-content}}.bmb_table-row>td.bmb_table-checkbox,.bmb_table-row>th.bmb_table-checkbox{min-width:3.875rem;padding-right:0;text-align:center;width:3.875rem}.bmb_table-row>td.bmb_table-checkbox+.bmb_table-sticky,.bmb_table-row>th.bmb_table-checkbox+.bmb_table-sticky{left:3.625rem!important}.bmb_table-row>td.bmb_table-expand,.bmb_table-row>th.bmb_table-expand{min-width:2.5rem;width:2.5rem}.bmb_table-row>td.bmb_table-expand+.bmb_table-sticky,.bmb_table-row>th.bmb_table-expand+.bmb_table-sticky{left:6.125rem!important}.bmb_table-row>td.bmb_table-sticky,.bmb_table-row>th.bmb_table-sticky{border-right:.0625rem solid var(--buttons-inactive-step);max-width:9rem}@media (min-width: 1200px){.bmb_table-row>td.bmb_table-sticky,.bmb_table-row>th.bmb_table-sticky{max-width:fit-content}}.bmb_table-row>td.bmb_table-actions,.bmb_table-row>th.bmb_table-actions{border-left:.0625rem solid var(--buttons-inactive-step);color:var(--color-table-90)}.bmb_table-row>td button,.bmb_table-row>th button{align-items:center;color:var(--color-table-90);display:flex}.bmb_table-row>th{border-bottom:0;color:RGBA(var(--color-charade-500));overflow:inherit;position:relative;text-transform:uppercase;font-family:Poppins-Medium,sans-serif;font-size:.875rem}.bmb_table-row>th.mat-mdc-header-cell{background-color:var(--containers-modal)}.bmb_table-row>td{font-family:Poppins-Medium,sans-serif;font-size:.875rem;border-bottom-color:var(--general_contrasts-25);border-bottom-style:dashed}.bmb_table-row>td.bmb_table-actions .action-container{display:flex}.bmb_table-row>td.bmb_table-actions .action-container bmb-icon{font-size:1.125rem}.bmb_table-row>td .mat-mdc-icon-button{align-items:center;display:flex;height:auto;padding:0;width:auto}.bmb_table-row>td .mat-mdc-icon-button bmb-icon{font-size:1.5rem}.bmb_table-even.mat-mdc-row{background-color:var(--containers-modal);color:var(--menu_select-label-menu-inactive)}.bmb_table-even.mat-mdc-row.bmb_table-expandible{background-color:var(--menu_select-on-surface-hovered-w-checkbox)}.bmb_table-odd.mat-mdc-row{background-color:var(--general_contrasts-15);color:var(--vertical-step-active-color)}.bmb_table-odd.bmb_table-expandible{background-color:var(--menu_select-on-surface-hovered-w-checkbox)}.bmb_table-details.mat-mdc-row{background-color:var(--menu_select-on-surface-hovered-w-checkbox);height:0}.bmb_table-details.mat-mdc-row>td{border:0;padding:0 1rem}.bmb_table-details.mat-mdc-row.bmb_table-expanded>td{border-bottom:.0625rem dashed var(--general_contrasts-25);padding:1rem}.bmb_table-detail{color:var(--general_contrasts-75);display:flex;overflow:hidden}.bmb_table-detail>bmb-table{width:100%}.bmb_table-resize{border-right:.0625rem solid var(--general_contrasts-25);cursor:col-resize;display:inline-block;height:100%;opacity:0;position:absolute;right:0;top:0}.bmb_table-resize:hover{opacity:1;width:1.25rem}.bmb_table .mat-mdc-paginator{display:none}.bmb_table-paginator{align-items:center;bottom:0;display:flex;height:3rem;justify-content:flex-end;right:0;z-index:10}.bmb_table-paginator-text{color:var(--general_contrasts-75);margin-right:2rem;font-family:Poppins-Regular,sans-serif;font-size:.75rem}.bmb_table-paginator-btn{color:var(--color-table-btn-900);height:3rem;padding:0;width:3rem}.bmb_table-paginator-btn-disabled{color:var(--buttons-inactive-step);cursor:not-allowed}.bmb_table-paginator-icon{font-size:1.5rem}.bmb_table bmb-checkbox{display:block;height:1.5rem}.bmb_table bmb-checkbox .bmb_checkbox-mark{margin:0}.bmb_table-success{color:var(--semantic-success)}.bmb_table-error{color:var(--semantic-error)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: BmbIconComponent, selector: "bmb-icon", inputs: ["icon", "materialIcon", "styleIcon", "isFill", "fontWeight", "size", "alt", "dotNotification"] }, { kind: "component", type: BmbCheckboxComponent, selector: "bmb-checkbox", inputs: ["name", "id", "disabled", "required", "value", "label", "labelPosition", "ariaDescribedby", "ariaLabel", "ariaLabelledby", "errorMessage", "helperMessage", "customValidation", "control", "checked", "showError", "indeterminate", "inputId"], outputs: ["controlChange", "checkedChange", "showErrorChange", "indeterminateChange", "inputIdChange", "change"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i3.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: BmbInputComponent, selector: "bmb-input", inputs: ["label", "type", "placeholder", "icon", "appearance", "errorMessage", "helperMessage", "disabled", "isRequired", "name", "spellcheck", "jsonFormat", "heightTextArea", "maxlength", "minlength", "pattern", "size", "max", "min", "id", "value", "autocomplete", "tooltip", "rows", "showMaxTextLength", "additionalAction", "tooltipPosition", "isClearable", "customValidation", "showError", "control"], outputs: ["showErrorChange", "controlChange", "isFocus", "isBlur", "onChange", "onKeyDown"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: BmbDateRangeComponent, selector: "bmb-date-range", inputs: ["inputId", "label", "labelStartDate", "labelEndDate", "icon", "invalidFormatErrorMessage", "requiredFieldErrorMessage", "appearance", "disabled", "isRequired", "isClearable", "controlStart", "controlEnd", "dateFormat", "placeholderStartDate", "placeholderEndDate", "stepYearPicker", "name", "multipleRow", "customValidation", "errorMessage"], outputs: ["controlStartChange", "controlEndChange"] }, { kind: "component", type: BmbActionIconComponent, selector: "bmb-action-icon", inputs: ["idElement", "icon", "alt", "iconSize", "isFill", "toggleIconActive", "isToggleActive", "isAccentColor", "dotNotification", "target", "link", "disabled"], outputs: ["isToggleActiveChange", "isAccentColorChange", "buttonPress", "buttonClick"] }], animations: [
|
|
483
|
-
trigger('detailExpand', [
|
|
484
|
-
state('collapsed,void', style({ height: '0px', minHeight: '0' })),
|
|
485
|
-
state('expanded', style({ height: '*' })),
|
|
486
|
-
transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
|
|
487
|
-
]),
|
|
488
|
-
], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
489
|
-
}
|
|
490
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BmbTablesComponent, decorators: [{
|
|
491
|
-
type: Component,
|
|
492
|
-
args: [{ selector: 'bmb-table', standalone: true, imports: [
|
|
493
|
-
CommonModule,
|
|
494
|
-
BmbIconComponent,
|
|
495
|
-
BmbCheckboxComponent,
|
|
496
|
-
MatPaginatorModule,
|
|
497
|
-
MatTableModule,
|
|
498
|
-
MatCheckboxModule,
|
|
499
|
-
MatIconModule,
|
|
500
|
-
MatButtonModule,
|
|
501
|
-
MatFormFieldModule,
|
|
502
|
-
MatInputModule,
|
|
503
|
-
MatTooltipModule,
|
|
504
|
-
BmbInputComponent,
|
|
505
|
-
ReactiveFormsModule,
|
|
506
|
-
BmbDateRangeComponent,
|
|
507
|
-
BmbActionIconComponent,
|
|
508
|
-
BmbLayoutDirective,
|
|
509
|
-
BmbLayoutItemDirective,
|
|
510
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, animations: [
|
|
511
|
-
trigger('detailExpand', [
|
|
512
|
-
state('collapsed,void', style({ height: '0px', minHeight: '0' })),
|
|
513
|
-
state('expanded', style({ height: '*' })),
|
|
514
|
-
transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
|
|
515
|
-
]),
|
|
516
|
-
], template: "<div [ngClass]=\"getTableClasses()\">\n @if (showSearch() || filtersVisible()) {\n <header class=\"bmb_table-header\">\n <div class=\"bmb_table-filter\">\n @if (showSearch()) {\n <section class=\"bmb_table-filter-item bmb_table-filter-item-search\">\n <bmb-input\n class=\"bmb_table-search\"\n [type]=\"'text'\"\n [placeholder]=\"'Buscar'\"\n [disabled]=\"false\"\n [icon]=\"'search'\"\n [appearance]=\"'normal'\"\n [control]=\"searchControl\"\n ></bmb-input>\n </section>\n }\n\n @if (filtersVisible()) {\n @for (column of parsedFiltersColumns(); track $index) {\n <section class=\"bmb_table-filter-item\">\n @switch (column.type) {\n @case (\"number\") {\n <div class=\"bmb_table-filter-item-number\" margin=\"none\">\n <bmb-input\n [label]=\"column.label + ' m\u00EDnimo'\"\n [type]=\"'number'\"\n [placeholder]=\"'M\u00EDn'\"\n [appearance]=\"'normal'\"\n [control]=\"getFormControl(column.dataKey + '_min')\"\n />\n <bmb-input\n [label]=\"column.label + ' m\u00E1ximo'\"\n [type]=\"'number'\"\n [placeholder]=\"'M\u00E1x'\"\n [appearance]=\"'normal'\"\n [control]=\"getFormControl(column.dataKey + '_max')\"\n />\n </div>\n }\n\n @case (\"date\") {\n <bmb-date-range\n [label]=\"column.label\"\n [placeholderStartDate]=\"'Desde'\"\n [placeholderEndDate]=\"'Hasta'\"\n [icon]=\"'calendar_month'\"\n [appearance]=\"'normal'\"\n [dateFormat]=\"'dd/MM/yyyy'\"\n [controlStart]=\"getFormControl(column.dataKey + '_from')\"\n [controlEnd]=\"getFormControl(column.dataKey + '_to')\"\n (startDateChange)=\"\n getFormControl(column.dataKey + '_from').setValue($event)\n \"\n (endDateChange)=\"\n getFormControl(column.dataKey + '_to').setValue($event)\n \"\n />\n }\n\n @default {\n <bmb-input\n [label]=\"column.label\"\n [placeholder]=\"'Filtrar'\"\n [control]=\"getFormControl(column.dataKey + '_contains')\"\n />\n }\n }\n </section>\n }\n }\n </div>\n </header>\n }\n <div class=\"bmb_table-container\">\n @if (showFilters()) {\n <bmb-action-icon\n [idElement]=\"''\"\n [icon]=\"'filter_list'\"\n [iconSize]=\"24\"\n (buttonClick)=\"toggleFilters()\"\n ></bmb-action-icon>\n }\n <section class=\"bmb_table-container-table\">\n <table\n mat-table\n [dataSource]=\"dataSource\"\n class=\"bmb_table-content\"\n multiTemplateDataRows\n >\n <!-- Checkbox Column -->\n <ng-container matColumnDef=\"select\" sticky>\n <th mat-header-cell *matHeaderCellDef class=\"bmb_table-checkbox\">\n <bmb-checkbox\n (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\n [ariaLabel]=\"checkboxLabel()\"\n [disabled]=\"false\"\n />\n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"bmb_table-checkbox\">\n <bmb-checkbox\n (change)=\"$event ? selection.toggle(row) : null; onSelect()\"\n [checked]=\"selection.isSelected(row)\"\n [ariaLabel]=\"checkboxLabel(row)\"\n [disabled]=\"false\"\n onkeypress=\"$event.stopPropagation()\"\n />\n </td>\n </ng-container>\n\n <!-- Expand Column -->\n <ng-container matColumnDef=\"expand\" sticky>\n <th\n mat-header-cell\n *matHeaderCellDef\n class=\"bmb_table-expand\"\n aria-label=\"row actions\"\n >\n \n </th>\n <td mat-cell *matCellDef=\"let row\" class=\"bmb_table-expand\">\n <ng-container *ngIf=\"row.detail\">\n <button\n mat-icon-button\n aria-label=\"expand row\"\n (click)=\"\n expandedElement = expandedElement === row ? null : row;\n $event.stopPropagation()\n \"\n >\n <bmb-icon\n [icon]=\"\n expandedElement === row ? 'expand_less' : 'expand_more'\n \"\n />\n </button>\n </ng-container>\n </td>\n </ng-container>\n\n <!-- Display Columns -->\n @for (column of tableColumns; track column; let i = $index) {\n <ng-container [matColumnDef]=\"column.def\" [sticky]=\"i === 0\">\n <th\n mat-header-cell\n *matHeaderCellDef\n #headerCell\n [matTooltip]=\"hasEllipsis(headerCell) ? column.label : ''\"\n matTooltipPosition=\"below\"\n matTooltipClass=\"bmb_tooltip\"\n [ngClass]=\"{\n 'bmb_table-sticky': i === 0,\n truncated: truncate(),\n wrapped: wrap(),\n }\"\n >\n <!-- T\u00EDtulo -->\n @if (column.htmlLabel) {\n <ng-template\n [ngTemplateOutlet]=\"column.htmlLabel\"\n [ngTemplateOutletContext]=\"{ column: column, index: i }\"\n ></ng-template>\n } @else {\n {{ this.lang() === \"es\" ? column.label : column.labelEn }}\n }\n\n <!-- Resize Handle -->\n <span\n class=\"bmb_table-resize\"\n (mousedown)=\"onResizeColumn($event, i)\"\n ></span>\n </th>\n\n <td\n mat-cell\n *matCellDef=\"let row; let a = index\"\n #cell\n [matTooltip]=\"hasEllipsis(cell) ? row[column.dataKey] : ''\"\n tooltipClass=\"bmb_tooltip\"\n [ngClass]=\"getCellClasses(row, column.dataKey, i)\"\n >\n @if (isTemplateRef(row[column.dataKey + \"Template\"])) {\n <ng-template\n [ngTemplateOutlet]=\"row[column.dataKey + 'Template']\"\n [ngTemplateOutletContext]=\"{ row: row }\"\n ></ng-template>\n } @else {\n {{ row[column.dataKey]?.propertyName || row[column.dataKey] }}\n }\n </td>\n </ng-container>\n }\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\" stickyEnd>\n <th mat-header-cell *matHeaderCellDef class=\"bmb_table-actions\"></th>\n <td mat-cell *matCellDef=\"let row\" class=\"bmb_table-actions\">\n <ng-template\n [ngTemplateOutlet]=\"actionTemplate()!\"\n [ngTemplateOutletContext]=\"{ row: row }\"\n >\n </ng-template>\n </td>\n </ng-container>\n\n <!-- Row to expand -->\n <ng-container matColumnDef=\"expandedDetail\">\n <td\n mat-cell\n *matCellDef=\"let row\"\n [attr.colspan]=\"tableDisplayColumns.length\"\n >\n <div\n class=\"bmb_table-detail\"\n [@detailExpand]=\"\n row == expandedElement ? 'expanded' : 'collapsed'\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"detailTemplate(); context: { row: row }\"\n ></ng-container>\n </div>\n </td>\n </ng-container>\n\n <!-- Rows -->\n <tr\n mat-header-row\n *matHeaderRowDef=\"tableDisplayColumns\"\n class=\"bmb_table-row\"\n ></tr>\n\n <tr\n mat-row\n *matRowDef=\"let row; columns: tableDisplayColumns; let i = dataIndex\"\n (click)=\"onSelectRow(row)\"\n class=\"bmb_table-row\"\n [class.bmb_table-expandible]=\"expandedElement === row\"\n [ngClass]=\"{\n 'bmb_table-even': isEven(i),\n 'bmb_table-odd': isOdd(i),\n }\"\n ></tr>\n\n <ng-container *ngIf=\"tableConfig?.isExpandible\">\n <tr\n mat-row\n *matRowDef=\"let row; columns: ['expandedDetail']; let i = dataIndex\"\n class=\"bmb_table-details\"\n [class.bmb_table-expanded]=\"expandedElement === row\"\n ></tr>\n </ng-container>\n </table>\n </section>\n <!-- Paginator -->\n <ng-container *ngIf=\"tableConfig?.isPaginable\" sticky>\n <mat-paginator\n #paginator\n [length]=\"totalItems()\"\n [pageSize]=\"this.pageSize()\"\n [hidePageSize]=\"true\"\n (page)=\"onPageEvent($event)\"\n >\n </mat-paginator>\n\n <div class=\"bmb_table-paginator\">\n <span class=\"bmb_table-paginator-text\">{{ getPaginationText() }}</span>\n\n <button\n [disabled]=\"\n serverSide() ? currentPage() === 0 : !paginator?.hasPreviousPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() === 0\n : !paginator?.hasPreviousPage(),\n }\"\n (click)=\"serverSide() ? goToFirstPage() : paginator.firstPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_double_arrow_left\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n <button\n [disabled]=\"\n serverSide() ? currentPage() === 0 : !paginator?.hasPreviousPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() === 0\n : !paginator?.hasPreviousPage(),\n }\"\n (click)=\"serverSide() ? goToPreviousPage() : paginator.previousPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_arrow_left\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n <button\n [disabled]=\"\n serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage(),\n }\"\n (click)=\"serverSide() ? goToNextPage() : paginator.nextPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_arrow_right\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n <button\n [disabled]=\"\n serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage()\n \"\n [ngClass]=\"{\n 'bmb_table-paginator-btn-disabled': serverSide()\n ? currentPage() >= lastPage()\n : !paginator?.hasNextPage(),\n }\"\n (click)=\"serverSide() ? goToLastPage() : paginator.lastPage()\"\n class=\"bmb_table-paginator-btn\"\n >\n <bmb-icon\n icon=\"keyboard_double_arrow_right\"\n class=\"bmb_table-paginator-icon\"\n />\n </button>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: ["@font-face{font-family:Poppins-Thin;font-style:normal;font-weight:100;src:url(/assets/fonts/Poppins/Poppins-Thin.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Light;font-style:normal;font-weight:300;src:url(/assets/fonts/Poppins/Poppins-ExtraLight.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Regular;font-style:normal;font-weight:400;src:url(/assets/fonts/Poppins/Poppins-Regular.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Medium;font-style:normal;font-weight:500;src:url(/assets/fonts/Poppins/Poppins-Medium.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Semibold;font-style:normal;font-weight:600;src:url(/assets/fonts/Poppins/Poppins-SemiBold.ttf) format(\"truetype\")}@font-face{font-family:Poppins-Bold;font-style:normal;font-weight:700;src:url(/assets/fonts/Poppins/Poppins-Bold.ttf) format(\"truetype\")}:root,:host{--font-display: \"Poppins-Regular\", sans-serif}.font-thin-1{font-family:Poppins-Thin,sans-serif;font-size:.625rem}.font-light-1{font-family:Poppins-Light,sans-serif;font-size:.625rem}.font-regular-1{font-family:Poppins-Regular,sans-serif;font-size:.625rem}.font-medium-1{font-family:Poppins-Medium,sans-serif;font-size:.625rem}.font-semibold-1{font-family:Poppins-Semibold,sans-serif;font-size:.625rem}.font-bold-1{font-family:Poppins-Bold,sans-serif;font-size:.625rem}.font-thin-2{font-family:Poppins-Thin,sans-serif;font-size:.6875rem}.font-light-2{font-family:Poppins-Light,sans-serif;font-size:.6875rem}.font-regular-2{font-family:Poppins-Regular,sans-serif;font-size:.6875rem}.font-medium-2{font-family:Poppins-Medium,sans-serif;font-size:.6875rem}.font-semibold-2{font-family:Poppins-Semibold,sans-serif;font-size:.6875rem}.font-bold-2{font-family:Poppins-Bold,sans-serif;font-size:.6875rem}.font-thin-3{font-family:Poppins-Thin,sans-serif;font-size:.75rem}.font-light-3{font-family:Poppins-Light,sans-serif;font-size:.75rem}.font-regular-3{font-family:Poppins-Regular,sans-serif;font-size:.75rem}.font-medium-3{font-family:Poppins-Medium,sans-serif;font-size:.75rem}.font-semibold-3{font-family:Poppins-Semibold,sans-serif;font-size:.75rem}.font-bold-3{font-family:Poppins-Bold,sans-serif;font-size:.75rem}.font-thin-4{font-family:Poppins-Thin,sans-serif;font-size:.875rem}.font-light-4{font-family:Poppins-Light,sans-serif;font-size:.875rem}.font-regular-4{font-family:Poppins-Regular,sans-serif;font-size:.875rem}.font-medium-4{font-family:Poppins-Medium,sans-serif;font-size:.875rem}.font-semibold-4{font-family:Poppins-Semibold,sans-serif;font-size:.875rem}.font-bold-4{font-family:Poppins-Bold,sans-serif;font-size:.875rem}.font-thin-4_5{font-family:Poppins-Thin,sans-serif;font-size:.9375rem}.font-light-4_5{font-family:Poppins-Light,sans-serif;font-size:.9375rem}.font-regular-4_5{font-family:Poppins-Regular,sans-serif;font-size:.9375rem}.font-medium-4_5{font-family:Poppins-Medium,sans-serif;font-size:.9375rem}.font-semibold-4_5{font-family:Poppins-Semibold,sans-serif;font-size:.9375rem}.font-bold-4_5{font-family:Poppins-Bold,sans-serif;font-size:.9375rem}.font-thin-5{font-family:Poppins-Thin,sans-serif;font-size:1rem}.font-light-5{font-family:Poppins-Light,sans-serif;font-size:1rem}.font-regular-5{font-family:Poppins-Regular,sans-serif;font-size:1rem}.font-medium-5{font-family:Poppins-Medium,sans-serif;font-size:1rem}.font-semibold-5{font-family:Poppins-Semibold,sans-serif;font-size:1rem}.font-bold-5{font-family:Poppins-Bold,sans-serif;font-size:1rem}.font-thin-6{font-family:Poppins-Thin,sans-serif;font-size:1.125rem}.font-light-6{font-family:Poppins-Light,sans-serif;font-size:1.125rem}.font-regular-6{font-family:Poppins-Regular,sans-serif;font-size:1.125rem}.font-medium-6{font-family:Poppins-Medium,sans-serif;font-size:1.125rem}.font-semibold-6{font-family:Poppins-Semibold,sans-serif;font-size:1.125rem}.font-bold-6{font-family:Poppins-Bold,sans-serif;font-size:1.125rem}.font-thin-7{font-family:Poppins-Thin,sans-serif;font-size:1.25rem}.font-light-7{font-family:Poppins-Light,sans-serif;font-size:1.25rem}.font-regular-7{font-family:Poppins-Regular,sans-serif;font-size:1.25rem}.font-medium-7{font-family:Poppins-Medium,sans-serif;font-size:1.25rem}.font-semibold-7{font-family:Poppins-Semibold,sans-serif;font-size:1.25rem}.font-bold-7{font-family:Poppins-Bold,sans-serif;font-size:1.25rem}.font-thin-8{font-family:Poppins-Thin,sans-serif;font-size:1.375rem}.font-light-8{font-family:Poppins-Light,sans-serif;font-size:1.375rem}.font-regular-8{font-family:Poppins-Regular,sans-serif;font-size:1.375rem}.font-medium-8{font-family:Poppins-Medium,sans-serif;font-size:1.375rem}.font-semibold-8{font-family:Poppins-Semibold,sans-serif;font-size:1.375rem}.font-bold-8{font-family:Poppins-Bold,sans-serif;font-size:1.375rem}.font-thin-9{font-family:Poppins-Thin,sans-serif;font-size:1.5rem}.font-light-9{font-family:Poppins-Light,sans-serif;font-size:1.5rem}.font-regular-9{font-family:Poppins-Regular,sans-serif;font-size:1.5rem}.font-medium-9{font-family:Poppins-Medium,sans-serif;font-size:1.5rem}.font-semibold-9{font-family:Poppins-Semibold,sans-serif;font-size:1.5rem}.font-bold-9{font-family:Poppins-Bold,sans-serif;font-size:1.5rem}.font-thin-10{font-family:Poppins-Thin,sans-serif;font-size:1.625rem}.font-light-10{font-family:Poppins-Light,sans-serif;font-size:1.625rem}.font-regular-10{font-family:Poppins-Regular,sans-serif;font-size:1.625rem}.font-medium-10{font-family:Poppins-Medium,sans-serif;font-size:1.625rem}.font-semibold-10{font-family:Poppins-Semibold,sans-serif;font-size:1.625rem}.font-bold-10{font-family:Poppins-Bold,sans-serif;font-size:1.625rem}.font-thin-11{font-family:Poppins-Thin,sans-serif;font-size:2.25rem}.font-light-11{font-family:Poppins-Light,sans-serif;font-size:2.25rem}.font-regular-11{font-family:Poppins-Regular,sans-serif;font-size:2.25rem}.font-medium-11{font-family:Poppins-Medium,sans-serif;font-size:2.25rem}.font-semibold-11{font-family:Poppins-Semibold,sans-serif;font-size:2.25rem}.font-bold-11{font-family:Poppins-Bold,sans-serif;font-size:2.25rem}.font-thin-12{font-family:Poppins-Thin,sans-serif;font-size:3rem}.font-light-12{font-family:Poppins-Light,sans-serif;font-size:3rem}.font-regular-12{font-family:Poppins-Regular,sans-serif;font-size:3rem}.font-medium-12{font-family:Poppins-Medium,sans-serif;font-size:3rem}.font-semibold-12{font-family:Poppins-Semibold,sans-serif;font-size:3rem}.font-bold-12{font-family:Poppins-Bold,sans-serif;font-size:3rem}.bmb_table{background:var(--containers-modal);box-shadow:var(--bmb-box-shadow-3);padding:1.5rem 1rem;width:100%;height:auto;box-sizing:border-box;container-type:inline-size}@media (min-width: 1000px){.bmb_table{height:100%}}.bmb_table-filters-top,.bmb_table-filters-left{display:flex;gap:1rem;overflow:auto;flex-flow:column}.bmb_table-filters-bottom,.bmb_table-filters-right{display:flex;gap:1rem;overflow:auto;flex-flow:column;flex-direction:column-reverse;align-items:flex-start}@media (min-width: 1000px){.bmb_table-filters-top .bmb_table-header,.bmb_table-filters-bottom .bmb_table-header{height:30%;width:100%}.bmb_table-filters-top .bmb_table-container,.bmb_table-filters-bottom .bmb_table-container{flex:1}}@media (min-width: 1000px){.bmb_table-filters-left,.bmb_table-filters-right{flex-flow:row}.bmb_table-filters-left .bmb_table-header,.bmb_table-filters-right .bmb_table-header{width:30%}.bmb_table-filters-left .bmb_table-container,.bmb_table-filters-right .bmb_table-container{flex:1}}@media (min-width: 1000px){.bmb_table-filters-right{flex-flow:row-reverse}}.bmb_table-header{container-type:inline-size;overflow:auto;max-height:100%}.bmb_table-header .bmb_table-filter{display:flex;gap:1rem;flex-flow:column;overflow:auto;width:100%}@container (min-width: 600px){.bmb_table-header .bmb_table-filter{flex-flow:row;flex-wrap:wrap}}.bmb_table-filter-item{width:100%}@container (min-width: 600px){.bmb_table-filter-item{width:calc(50% - .5rem)}}.bmb_table-filter-item-number{display:flex;flex-flow:row}@media (max-width: 699px){.bmb_table-filter-item-number{flex-flow:column}}.bmb_table-filter-item-number>*{flex:1}.bmb_table-filter-item-number bmb-input:first-child .bmb_field-actions{right:2.5rem}.bmb_table-filter-item-number bmb-input:first-child .bmb_field-wrapper:after{content:\"\";width:1rem;height:0;border-top:.125rem solid;margin:0 .625rem;display:inline-block}@media (max-width: 699px){.bmb_table-filter-item-number bmb-input:first-child .bmb_field-wrapper:after{display:none}}.bmb_table-search{flex:1}.bmb_table-filters{width:100%}.bmb_table-container{flex:1 0 auto;max-width:100%;overflow:auto;width:100%;max-height:100%;display:flex;flex-flow:column;gap:1rem}.bmb_table-container-table{overflow:auto;flex:1}.bmb_table-content{width:100%}.bmb_table-row.mat-mdc-row{height:2.875rem}.bmb_table-row>td,.bmb_table-row>th{height:100%;overflow:hidden;padding:0 .5rem}.bmb_table-row>td.truncated,.bmb_table-row>th.truncated{max-width:6.25rem;min-width:4.375rem;text-overflow:ellipsis;white-space:nowrap}.bmb_table-row>td.wrapped,.bmb_table-row>th.wrapped{white-space:nowrap}@media (min-width: 768px){.bmb_table-row>td,.bmb_table-row>th{max-width:fit-content}}.bmb_table-row>td.bmb_table-checkbox,.bmb_table-row>th.bmb_table-checkbox{min-width:3.875rem;padding-right:0;text-align:center;width:3.875rem}.bmb_table-row>td.bmb_table-checkbox+.bmb_table-sticky,.bmb_table-row>th.bmb_table-checkbox+.bmb_table-sticky{left:3.625rem!important}.bmb_table-row>td.bmb_table-expand,.bmb_table-row>th.bmb_table-expand{min-width:2.5rem;width:2.5rem}.bmb_table-row>td.bmb_table-expand+.bmb_table-sticky,.bmb_table-row>th.bmb_table-expand+.bmb_table-sticky{left:6.125rem!important}.bmb_table-row>td.bmb_table-sticky,.bmb_table-row>th.bmb_table-sticky{border-right:.0625rem solid var(--buttons-inactive-step);max-width:9rem}@media (min-width: 1200px){.bmb_table-row>td.bmb_table-sticky,.bmb_table-row>th.bmb_table-sticky{max-width:fit-content}}.bmb_table-row>td.bmb_table-actions,.bmb_table-row>th.bmb_table-actions{border-left:.0625rem solid var(--buttons-inactive-step);color:var(--color-table-90)}.bmb_table-row>td button,.bmb_table-row>th button{align-items:center;color:var(--color-table-90);display:flex}.bmb_table-row>th{border-bottom:0;color:RGBA(var(--color-charade-500));overflow:inherit;position:relative;text-transform:uppercase;font-family:Poppins-Medium,sans-serif;font-size:.875rem}.bmb_table-row>th.mat-mdc-header-cell{background-color:var(--containers-modal)}.bmb_table-row>td{font-family:Poppins-Medium,sans-serif;font-size:.875rem;border-bottom-color:var(--general_contrasts-25);border-bottom-style:dashed}.bmb_table-row>td.bmb_table-actions .action-container{display:flex}.bmb_table-row>td.bmb_table-actions .action-container bmb-icon{font-size:1.125rem}.bmb_table-row>td .mat-mdc-icon-button{align-items:center;display:flex;height:auto;padding:0;width:auto}.bmb_table-row>td .mat-mdc-icon-button bmb-icon{font-size:1.5rem}.bmb_table-even.mat-mdc-row{background-color:var(--containers-modal);color:var(--menu_select-label-menu-inactive)}.bmb_table-even.mat-mdc-row.bmb_table-expandible{background-color:var(--menu_select-on-surface-hovered-w-checkbox)}.bmb_table-odd.mat-mdc-row{background-color:var(--general_contrasts-15);color:var(--vertical-step-active-color)}.bmb_table-odd.bmb_table-expandible{background-color:var(--menu_select-on-surface-hovered-w-checkbox)}.bmb_table-details.mat-mdc-row{background-color:var(--menu_select-on-surface-hovered-w-checkbox);height:0}.bmb_table-details.mat-mdc-row>td{border:0;padding:0 1rem}.bmb_table-details.mat-mdc-row.bmb_table-expanded>td{border-bottom:.0625rem dashed var(--general_contrasts-25);padding:1rem}.bmb_table-detail{color:var(--general_contrasts-75);display:flex;overflow:hidden}.bmb_table-detail>bmb-table{width:100%}.bmb_table-resize{border-right:.0625rem solid var(--general_contrasts-25);cursor:col-resize;display:inline-block;height:100%;opacity:0;position:absolute;right:0;top:0}.bmb_table-resize:hover{opacity:1;width:1.25rem}.bmb_table .mat-mdc-paginator{display:none}.bmb_table-paginator{align-items:center;bottom:0;display:flex;height:3rem;justify-content:flex-end;right:0;z-index:10}.bmb_table-paginator-text{color:var(--general_contrasts-75);margin-right:2rem;font-family:Poppins-Regular,sans-serif;font-size:.75rem}.bmb_table-paginator-btn{color:var(--color-table-btn-900);height:3rem;padding:0;width:3rem}.bmb_table-paginator-btn-disabled{color:var(--buttons-inactive-step);cursor:not-allowed}.bmb_table-paginator-icon{font-size:1.5rem}.bmb_table bmb-checkbox{display:block;height:1.5rem}.bmb_table bmb-checkbox .bmb_checkbox-mark{margin:0}.bmb_table-success{color:var(--semantic-success)}.bmb_table-error{color:var(--semantic-error)}\n"] }]
|
|
517
|
-
}], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i1.DomSanitizer }, { type: i0.ChangeDetectorRef }], propDecorators: { select: [{
|
|
518
|
-
type: Output
|
|
519
|
-
}], clickedRow: [{
|
|
520
|
-
type: Output
|
|
521
|
-
}], searchChange: [{
|
|
522
|
-
type: Output
|
|
523
|
-
}], filtersChange: [{
|
|
524
|
-
type: Output
|
|
525
|
-
}], searchModeChange: [{
|
|
526
|
-
type: Output
|
|
527
|
-
}], pageChange: [{
|
|
528
|
-
type: Output
|
|
529
|
-
}], paginator: [{
|
|
530
|
-
type: ViewChild,
|
|
531
|
-
args: [MatPaginator]
|
|
532
|
-
}], matTableRef: [{
|
|
533
|
-
type: ViewChild,
|
|
534
|
-
args: [MatTable, { read: ElementRef }]
|
|
535
|
-
}], headerCellRef: [{
|
|
536
|
-
type: ViewChild,
|
|
537
|
-
args: ['headerCellRef']
|
|
538
|
-
}], cellRef: [{
|
|
539
|
-
type: ViewChild,
|
|
540
|
-
args: ['cellRef']
|
|
541
|
-
}], onResize: [{
|
|
542
|
-
type: HostListener,
|
|
543
|
-
args: ['window:resize', ['$event']]
|
|
544
|
-
}] } });
|
|
545
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm1iLXRhYmxlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kcy1uZy9zcmMvbGliL2NvbXBvbmVudHMvYm1iLXRhYmxlcy9ibWItdGFibGVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RzLW5nL3NyYy9saWIvY29tcG9uZW50cy9ibWItdGFibGVzL2JtYi10YWJsZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBRVQsU0FBUyxFQUVULE1BQU0sRUFDTixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBRVosaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUN2QixLQUFLLEVBRUwsTUFBTSxFQUVOLEtBQUssRUFFTCxRQUFRLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLFlBQVksRUFDWixrQkFBa0IsR0FFbkIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxRQUFRLEdBQ1QsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxLQUFLLEVBQ0wsVUFBVSxFQUNWLE9BQU8sR0FDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRC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QixzQkFBc0I7cUJBQ3ZCLG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLGNBQ3pCO3dCQUNWLE9BQU8sQ0FBQyxjQUFjLEVBQUU7NEJBQ3RCLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDOzRCQUNqRSxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDOzRCQUN6QyxVQUFVLENBQ1Isd0JBQXdCLEVBQ3hCLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUNoRDt5QkFDRixDQUFDO3FCQUNIO3lJQWlEUyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUVHLFVBQVU7c0JBQW5CLE1BQU07Z0JBS2tCLFNBQVM7c0JBQWpDLFNBQVM7dUJBQUMsWUFBWTtnQkFDNEIsV0FBVztzQkFBN0QsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUNiLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZTtnQkFDSixPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVM7Z0JBR3BCLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBBZnRlclZpZXdJbml0LFxuICBWaWV3Q2hpbGQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIEVsZW1lbnRSZWYsXG4gIFRlbXBsYXRlUmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIFJlbmRlcmVyMixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBpbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBlZmZlY3QsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIG1vZGVsLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgY29tcHV0ZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgTWF0UGFnaW5hdG9yLFxuICBNYXRQYWdpbmF0b3JNb2R1bGUsXG4gIFBhZ2VFdmVudCxcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7XG4gIE1hdFRhYmxlRGF0YVNvdXJjZSxcbiAgTWF0VGFibGVNb2R1bGUsXG4gIE1hdFRhYmxlLFxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XG5pbXBvcnQge1xuICBhbmltYXRlLFxuICBzdGF0ZSxcbiAgc3R5bGUsXG4gIHRyYW5zaXRpb24sXG4gIHRyaWdnZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEJtYkljb25Db21wb25lbnQgfSBmcm9tICcuLi9ibWItaWNvbi9ibWItaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQm1iQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi9ibWItY2hlY2tib3gvYm1iLWNoZWNrYm94LmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBJQm1iRmlsdGVyc1Bvc2l0aW9uLFxuICBUYWJsZUNvbHVtLFxuICBUYWJsZUNvbmZpZyxcbn0gZnJvbSAnLi9ibWItdGFibGVzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBCbWJJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL2JtYi1pbnB1dC9ibWItaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCbWJEYXRlUmFuZ2VDb21wb25lbnQgfSBmcm9tICcuLi9ibWItZGF0ZS1yYW5nZS9ibWItZGF0ZS1yYW5nZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQm1iQWN0aW9uSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2JtYi1hY3Rpb24taWNvbi9ibWItYWN0aW9uLWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IEJtYkxheW91dERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvYm1iLWxheW91dC9ibWItbGF5b3V0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBCbWJMYXlvdXRJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9ibWItbGF5b3V0L2JtYi1sYXlvdXQtaXRlbS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbic7XG5cbmV4cG9ydCB0eXBlIEJtYlRhYmxlTGFuZyA9ICdlbicgfCAnZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdibWItdGFibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEJtYkljb25Db21wb25lbnQsXG4gICAgQm1iQ2hlY2tib3hDb21wb25lbnQsXG4gICAgTWF0UGFnaW5hdG9yTW9kdWxlLFxuICAgIE1hdFRhYmxlTW9kdWxlLFxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgIEJtYklucHV0Q29tcG9uZW50LFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgQm1iRGF0ZVJhbmdlQ29tcG9uZW50LFxuICAgIEJtYkFjdGlvbkljb25Db21wb25lbnQsXG4gICAgQm1iTGF5b3V0RGlyZWN0aXZlLFxuICAgIEJtYkxheW91dEl0ZW1EaXJlY3RpdmUsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9ibWItdGFibGVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2JtYi10YWJsZXMuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ2RldGFpbEV4cGFuZCcsIFtcbiAgICAgIHN0YXRlKCdjb2xsYXBzZWQsdm9pZCcsIHN0eWxlKHsgaGVpZ2h0OiAnMHB4JywgbWluSGVpZ2h0OiAnMCcgfSkpLFxuICAgICAgc3RhdGUoJ2V4cGFuZGVkJywgc3R5bGUoeyBoZWlnaHQ6ICcqJyB9KSksXG4gICAgICB0cmFuc2l0aW9uKFxuICAgICAgICAnZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCcsXG4gICAgICAgIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpLFxuICAgICAgKSxcbiAgICBdKSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQm1iVGFibGVzQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkNoYW5nZXMge1xuICBwcml2YXRlIF9yYXdDb2x1bW5zOiBUYWJsZUNvbHVtW10gPSBbXTtcbiAgcHJpdmF0ZSBfcmF3Q29uZmlnOiBUYWJsZUNvbmZpZyA9IHtcbiAgICBpc1NlbGVjdGFibGU6IGZhbHNlLFxuICAgIGlzRXhwYW5kaWJsZTogZmFsc2UsXG4gICAgaXNQYWdpbmFibGU6IGZhbHNlLFxuICAgIHNob3dBY3Rpb25zOiBmYWxzZSxcbiAgfTtcblxuICBkYXRhU291cmNlOiBNYXRUYWJsZURhdGFTb3VyY2U8YW55PiA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoKTtcbiAgb3JpZ2luYWxEYXRhOiBhbnlbXSA9IFtdO1xuICBmaWx0ZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gIHRhYmxlRGlzcGxheUNvbHVtbnM6IHN0cmluZ1tdID0gW107XG4gIHRhYmxlQ29sdW1uczogVGFibGVDb2x1bVtdID0gW107XG4gIGV4cGFuZGVkRWxlbWVudDogYW55O1xuICBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55Pih0cnVlLCBbXSk7XG4gIHRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZyB8IHVuZGVmaW5lZDtcblxuICBwcmVzc2VkID0gZmFsc2U7XG4gIGN1cnJlbnRSZXNpemVJbmRleD86IG51bWJlcjtcbiAgc3RhcnRYPzogbnVtYmVyO1xuICBzdGFydFdpZHRoPzogbnVtYmVyO1xuICBpc1Jlc2l6aW5nUmlnaHQ/OiBib29sZWFuO1xuICByZXNpemFibGVNb3VzZW1vdmU/OiAoKSA9PiB2b2lkO1xuICByZXNpemFibGVNb3VzZXVwPzogKCkgPT4gdm9pZDtcblxuICBzZWFyY2hDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcblxuICBzaG93U2VhcmNoID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBzaG93RmlsdGVycyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcGFnZVNpemUgPSBpbnB1dDxudW1iZXI+KCk7XG4gIHRvdGFsSXRlbXMgPSBpbnB1dDxudW1iZXI+KDApO1xuICBkYXRhID0gaW5wdXQ8YW55W10+KFtdKTtcbiAgY29sdW1ucyA9IGlucHV0PFRhYmxlQ29sdW1bXT4oW10pO1xuICBhY3Rpb25UZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4gfCBudWxsPihudWxsKTtcbiAgY29uZmlnID0gaW5wdXQ8VGFibGVDb25maWc+KCk7XG4gIGRldGFpbFRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8YW55PiB8IG51bGw+KG51bGwpO1xuICB0cnVuY2F0ZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgd3JhcCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICBpbml0aWFsVGFibGVTZWxlY3Rpb24gPSBpbnB1dDxudW1iZXJbXT4oW10pO1xuICBsYW5nID0gaW5wdXQ8Qm1iVGFibGVMYW5nPignZXMnKTtcbiAgY2xlYXJTZWxlY3Rpb24gPSBtb2RlbDxib29sZWFuPihmYWxzZSk7XG4gIHNlcnZlclNpZGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIGN1cnJlbnRQYWdlID0gbW9kZWw8bnVtYmVyPigwKTtcbiAgZmlsdGVyc1Zpc2libGUgPSBtb2RlbDxib29sZWFuPihmYWxzZSk7XG4gIGZpbHRlcnNQb3NpdGlvbiA9IGlucHV0PElCbWJGaWx0ZXJzUG9zaXRpb24+KCd0b3AnKTtcblxuICBAT3V0cHV0KCkgc2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNsaWNrZWRSb3c6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2VhcmNoQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBmaWx0ZXJzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ8c3RyaW5nLCBhbnk+PigpO1xuICBAT3V0cHV0KCkgc2VhcmNoTW9kZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8J2NsaWVudCcgfCAnc2VydmVyJz4oKTtcblxuICBAT3V0cHV0KCkgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHBhZ2VJbmRleDogbnVtYmVyO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG4gIH0+KCk7XG5cbiAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IpIHBhZ2luYXRvciE6IE1hdFBhZ2luYXRvcjtcbiAgQFZpZXdDaGlsZChNYXRUYWJsZSwgeyByZWFkOiBFbGVtZW50UmVmIH0pIHByaXZhdGUgbWF0VGFibGVSZWY/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdoZWFkZXJDZWxsUmVmJykgaGVhZGVyQ2VsbFJlZiE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NlbGxSZWYnKSBjZWxsUmVmITogRWxlbWVudFJlZjtcblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgb25SZXNpemUoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc2V0VGFibGVSZXNpemUodGhpcy5tYXRUYWJsZVJlZiEubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCk7XG4gIH1cblxuICBwYXJzZWRGaWx0ZXJzQ29sdW1ucyA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5jb2x1bW5zKCkuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi5pc0ZpbHRlcmFibGUgIT09IGZhbHNlKSxcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCB0b3RhbCA9IHRoaXMudG90YWxJdGVtcygpO1xuICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucGFnZVNpemUoKTtcblxuICAgICAgaWYgKHRoaXMuc2VydmVyU2lkZSgpKSB7XG4gICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzLmxhc3RQYWdlKCk7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlKCkgPCAwKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZS5zZXQoMCk7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFBhZ2UoKSA+IGxhc3QpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlLnNldChsYXN0KTtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmluaXRpYWxUYWJsZVNlbGVjdGlvbigpID8/IFtdO1xuICAgICAgaWYgKHNlbGVjdGVkUm93cy5sZW5ndGggJiYgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgIHNlbGVjdGVkUm93cy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QodGhpcy5kYXRhU291cmNlLmRhdGFbcm93XSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZGF0YSddKSB7XG4gICAgICB0aGlzLnBhcnNlRGF0YShjaGFuZ2VzWydkYXRhJ10uY3VycmVudFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snY29sdW1ucyddKSB7XG4gICAgICB0aGlzLnBhcnNlQ29sdW1ucyhjaGFuZ2VzWydjb2x1bW5zJ10uY3VycmVudFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlc1snY29uZmlnJ10pIHtcbiAgICAgIHRoaXMuc2V0Q29uZmlnKGNoYW5nZXNbJ2NvbmZpZyddLmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXNbJ2NsZWFyU2VsZWN0aW9uJ10pIHtcbiAgICAgIGlmICh0aGlzLmNsZWFyU2VsZWN0aW9uKCkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbi5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLnNlbGVjdC5lbWl0KHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIGNvbnN0IHNlYXJjaCA9ICh2YWx1ZSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmICh0aGlzLnNlcnZlclNpZGUoKSkge1xuICAgICAgICB0aGlzLnNlYXJjaE1vZGVDaGFuZ2UuZW1pdCgnc2VydmVyJyk7XG4gICAgICAgIHRoaXMuc2VhcmNoQ2hhbmdlLmVtaXQoc2VhcmNoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VhcmNoTW9kZUNoYW5nZS5lbWl0KCdjbGllbnQnKTtcblxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gc2VhcmNoO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5kYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZSA9IChkYXRhOiBhbnksIGZpbHRlcjogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gZmlsdGVyLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIHRoaXMuX3Jhd0NvbHVtbnMuc29tZSgoY29sdW1uKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gKGRhdGFbY29sdW1uLmRhdGFLZXldID8/ICcnKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiB2YWx1ZS5pbmNsdWRlcyhzZWFyY2hUZXh0KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmluaXRpYWxUYWJsZVNlbGVjdGlvbigpID8/IFtdO1xuICAgIGlmIChzZWxlY3RlZFJvd3MubGVuZ3RoICYmIHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCkge1xuICAgICAgc2VsZWN0ZWRSb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QodGhpcy5kYXRhU291cmNlLmRhdGFbcm93XSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yYXdDb25maWcgPSB0aGlzLmNvbmZpZygpIHx8IHt9O1xuICAgIC8vdGhpcy5hcHBseUNvbHVtbnNBbmRDb25maWcoKTtcblxuICAgIHRoaXMucGFyc2VEYXRhKHRoaXMuZGF0YSgpKTtcbiAgICB0aGlzLnBhcnNlQ29sdW1ucyh0aGlzLmNvbHVtbnMoKSk7XG4gIH1cblxuICBwYXJzZURhdGEoZGF0YTogYW55W10pIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5vcmlnaW5hbERhdGEgPSBkYXRhO1xuXG4gICAgaWYgKCF0aGlzLnNlcnZlclNpZGUoKSkge1xuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcbiAgICB9XG4gIH1cblxuICBwYXJzZUNvbHVtbnMoY29sdW1uczogVGFibGVDb2x1bVtdKSB7XG4gICAgdGhpcy5fcmF3Q29sdW1ucyA9IGNvbHVtbnM7XG4gICAgdGhpcy5hcHBseUNvbHVtbnNBbmRDb25maWcoY29sdW1ucyk7XG4gICAgdGhpcy5zZXR1cER5bmFtaWNGaWx0ZXJzKCk7XG4gIH1cblxuICBzYW5pdGl6ZUhUTUwobGFiZWw6IHN0cmluZyk6IFNhZmVIdG1sIHtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwobGFiZWwpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UgJiYgdGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcbiAgICB9XG5cbiAgICB0aGlzLnNldFRhYmxlUmVzaXplKHRoaXMubWF0VGFibGVSZWYhLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUNvbHVtbnNBbmRDb25maWcobmV3Q29sdW1uczogVGFibGVDb2x1bVtdID0gW10pIHtcbiAgICBpZiAoIW5ld0NvbHVtbnMgfHwgIUFycmF5LmlzQXJyYXkobmV3Q29sdW1ucykgfHwgbmV3Q29sdW1ucy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCBwYXJzZWROZXdDb2x1bW5zOiBUYWJsZUNvbHVtW10gPSBuZXdDb2x1bW5zLm1hcCgoY29sKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgbGFiZWxFbjogY29sLmxhYmVsLFxuICAgICAgICAuLi5jb2wsXG4gICAgICB9O1xuICAgIH0pO1xuICAgIGNvbnN0IGRpc3BsYXlDb2x1bW5zID0gWy4uLnBhcnNlZE5ld0NvbHVtbnMubWFwKChjb2wpID0+IGNvbC5kZWYpXTtcblxuICAgIGlmICh0aGlzLl9yYXdDb25maWcuaXNFeHBhbmRpYmxlKSB7XG4gICAgICBkaXNwbGF5Q29sdW1ucy51bnNoaWZ0KCdleHBhbmQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcmF3Q29uZmlnLmlzU2VsZWN0YWJsZSkge1xuICAgICAgZGlzcGxheUNvbHVtbnMudW5zaGlmdCgnc2VsZWN0Jyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Jhd0NvbmZpZy5zaG93QWN0aW9ucykge1xuICAgICAgZGlzcGxheUNvbHVtbnMucHVzaCgnYWN0aW9ucycpO1xuICAgIH1cblxuICAgIHRoaXMuX3Jhd0NvbHVtbnMgPSBwYXJzZWROZXdDb2x1bW5zO1xuICAgIHRoaXMudGFibGVDb2x1bW5zID0gcGFyc2VkTmV3Q29sdW1ucztcbiAgICB0aGlzLnRhYmxlRGlzcGxheUNvbHVtbnMgPSBkaXNwbGF5Q29sdW1ucztcbiAgICB0aGlzLnRhYmxlQ29uZmlnID0gdGhpcy5fcmF3Q29uZmlnO1xuICB9XG5cbiAgc2V0VGFibGVSZXNpemUodGFibGVXaWR0aDogbnVtYmVyKSB7XG4gICAgbGV0IHRvdFdpZHRoID0gMDtcbiAgICB0aGlzLnRhYmxlQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGNvbHVtbi53aWR0aCA9IGNvbHVtbi53aWR0aCB8fCA1MDtcbiAgICAgIHRvdFdpZHRoICs9IGNvbHVtbi53aWR0aCE7XG4gICAgfSk7XG4gICAgY29uc3Qgc2NhbGUgPSAodGFibGVXaWR0aCAtIDUpIC8gdG90V2lkdGg7XG4gIH1cblxuICBtb3VzZU1vdmUoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMucmVzaXphYmxlTW91c2Vtb3ZlID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAnZG9jdW1lbnQnLFxuICAgICAgJ21vdXNlbW92ZScsXG4gICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucHJlc3NlZCAmJiBldmVudC5idXR0b25zKSB7XG4gICAgICAgICAgY29uc3QgZHggPSB0aGlzLmlzUmVzaXppbmdSaWdodFxuICAgICAgICAgICAgPyBldmVudC5wYWdlWCAtIHRoaXMuc3RhcnRYIVxuICAgICAgICAgICAgOiAtZXZlbnQucGFnZVggKyB0aGlzLnN0YXJ0WCE7XG4gICAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLnN0YXJ0V2lkdGghICsgZHg7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgICB0aGlzLnJlc2l6YWJsZU1vdXNldXAgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnbW91c2V1cCcsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnByZXNzZWQpIHtcbiAgICAgICAgdGhpcy5wcmVzc2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY3VycmVudFJlc2l6ZUluZGV4ID0gLTE7XG4gICAgICAgIHRoaXMucmVzaXphYmxlTW91c2Vtb3ZlISgpO1xuICAgICAgICB0aGlzLnJlc2l6YWJsZU1vdXNldXAhKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjaGVja1Jlc2l6aW5nKGV2ZW50OiBhbnksIGluZGV4OiBhbnkpIHtcbiAgICBjb25zdCBjZWxsRGF0YSA9IHRoaXMuZ2V0Q2VsbERhdGEoaW5kZXgpO1xuICAgIHRoaXMuaXNSZXNpemluZ1JpZ2h0ID1cbiAgICAgIGluZGV4ID09PSAwIHx8XG4gICAgICAoTWF0aC5hYnMoZXZlbnQucGFnZVggLSBjZWxsRGF0YS5yaWdodCkgPCBjZWxsRGF0YS53aWR0aCAvIDIgJiZcbiAgICAgICAgaW5kZXggIT09IHRoaXMudGFibGVDb2x1bW5zLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgZ2V0Q2VsbERhdGEoaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGhlYWRlclJvdyA9XG4gICAgICB0aGlzLm1hdFRhYmxlUmVmIS5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLnF1ZXJ5U2VsZWN0b3IoJ3RyJyk7XG4gICAgY29uc3QgY2VsbCA9IGhlYWRlclJvdy5jaGlsZHJlbltpbmRleF07XG4gICAgcmV0dXJuIGNlbGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIH1cblxuICBvblJlc2l6ZUNvbHVtbihldmVudDogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5jaGVja1Jlc2l6aW5nKGV2ZW50LCBpbmRleCk7XG4gICAgdGhpcy5jdXJyZW50UmVzaXplSW5kZXggPSBpbmRleDtcbiAgICB0aGlzLnByZXNzZWQgPSB0cnVlO1xuICAgIHRoaXMuc3RhcnRYID0gZXZlbnQucGFnZVg7XG4gICAgdGhpcy5zdGFydFdpZHRoID0gZXZlbnQudGFyZ2V0LnBhcmVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLm1vdXNlTW92ZShpbmRleCk7XG4gIH1cblxuICBvblNlbGVjdCgpIHtcbiAgICBjb25zdCBpbmRleFNlbGVjdGVkID0gdGhpcy5kYXRhU291cmNlLmRhdGEucmVkdWNlKChhY2MsIGN1cnJlbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZChjdXJyZW50KSkgYWNjLnB1c2goaW5kZXgpO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG4gICAgdGhpcy5zZWxlY3QuZW1pdCh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gIH1cblxuICBzZXRDb25maWcoY29uZmlnOiBUYWJsZUNvbmZpZykge1xuICAgIHRoaXMudGFibGVDb25maWcgPSBjb25maWc7XG5cbiAgICBpZiAodGhpcy50YWJsZUNvbmZpZy5pc0V4cGFuZGlibGUpIHtcbiAgICAgIHRoaXMudGFibGVEaXNwbGF5Q29sdW1ucz8udW5zaGlmdCgnZXhwYW5kJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFibGVDb25maWcuaXNTZWxlY3RhYmxlKSB7XG4gICAgICB0aGlzLnRhYmxlRGlzcGxheUNvbHVtbnM/LnVuc2hpZnQoJ3NlbGVjdCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnLnNob3dBY3Rpb25zKSB7XG4gICAgICB0aGlzLnRhYmxlRGlzcGxheUNvbHVtbnM/LnB1c2goJ2FjdGlvbnMnKTtcbiAgICB9XG4gIH1cblxuICBpc0FsbFNlbGVjdGVkKCkge1xuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoO1xuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGg7XG4gICAgcmV0dXJuIG51bVNlbGVjdGVkID09PSBudW1Sb3dzO1xuICB9XG5cbiAgdG9nZ2xlQWxsUm93cygpIHtcbiAgICBpZiAodGhpcy5pc0FsbFNlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICB0aGlzLm9uU2VsZWN0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KC4uLnRoaXMuZGF0YVNvdXJjZS5kYXRhKTtcbiAgICB0aGlzLm9uU2VsZWN0KCk7XG4gIH1cblxuICBjaGVja2JveExhYmVsKHJvdz86IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFyb3cpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmlzQWxsU2VsZWN0ZWQoKSA/ICdkZXNlbGVjdCcgOiAnc2VsZWN0J30gYWxsYDtcbiAgICB9XG4gICAgcmV0dXJuIGAke3RoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KSA/ICdkZXNlbGVjdCcgOiAnc2VsZWN0J30gcm93ICR7cm93LnBvc2l0aW9uICsgMX1gO1xuICB9XG5cbiAgaXNFdmVuKHJvd0luZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBmaWx0ZXJlZEluZGV4ID0gdGhpcy5kYXRhU291cmNlLmRhdGFcbiAgICAgIC5maWx0ZXIoKHJvdykgPT4gIXJvdy5pc0RldGFpbClcbiAgICAgIC5maW5kSW5kZXgoKHJvdywgaW5kZXgpID0+IGluZGV4ID09PSByb3dJbmRleCk7XG4gICAgcmV0dXJuIGZpbHRlcmVkSW5kZXggJSAyID09PSAwO1xuICB9XG5cbiAgaXNPZGQocm93SW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc0V2ZW4ocm93SW5kZXgpO1xuICB9XG5cbiAgaGFzRWxsaXBzaXMoZWxlbWVudDogSFRNTFRhYmxlQ2VsbEVsZW1lbnQgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50UmVmID0gbmV3IEVsZW1lbnRSZWYoZWxlbWVudCk7XG4gICAgcmV0dXJuIChcbiAgICAgIGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aCA+XG4gICAgICBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGhcbiAgICApO1xuICB9XG5cbiAgZ2V0UGFnaW5hdGlvblRleHQoKTogc3RyaW5nIHtcbiAgICBjb25zdCB0b3RhbCA9IHRoaXMuc2VydmVyU2lkZSgpXG4gICAgICA/ICh0aGlzLnRvdGFsSXRlbXM/LigpID8/IDApXG4gICAgICA6ICh0aGlzLnBhZ2luYXRvcj8ubGVuZ3RoID8/IDApO1xuXG4gICAgY29uc3QgcGFnZUluZGV4ID0gdGhpcy5zZXJ2ZXJTaWRlKClcbiAgICAgID8gKHRoaXMuY3VycmVudFBhZ2U/LigpID8/IDApXG4gICAgICA6ICh0aGlzLnBhZ2luYXRvcj8ucGFnZUluZGV4ID8/IDApO1xuXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLnNlcnZlclNpZGUoKVxuICAgICAgPyAodGhpcy5wYWdlU2l6ZT8uKCkgPz8gMTApXG4gICAgICA6ICh0aGlzLnBhZ2luYXRvcj8ucGFnZVNpemUgPz8gMTApO1xuXG4gICAgaWYgKHRvdGFsID09PSAwIHx8IHBhZ2VTaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gYDAgZGUgJHt0b3RhbH1gO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBwYWdlSW5kZXggKiBwYWdlU2l6ZSArIDE7XG4gICAgY29uc3QgZW5kSW5kZXggPSBNYXRoLm1pbigocGFnZUluZGV4ICsgMSkgKiBwYWdlU2l6ZSwgdG90YWwpO1xuXG4gICAgcmV0dXJuIGAke3N0YXJ0SW5kZXh9IC0gJHtlbmRJbmRleH0gZGUgJHt0b3RhbH1gO1xuICB9XG5cbiAgaXNUZW1wbGF0ZVJlZih2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWY7XG4gIH1cblxuICBvblNlbGVjdFJvdyhyb3c6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2xpY2tlZFJvdy5lbWl0KHJvdyk7XG4gIH1cblxuICBnZXRDZWxsQ2xhc3Nlcyhyb3c6IGFueSwgY29sdW1uS2V5OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBhbnkge1xuICAgIGNvbnN0IHNlbWFudGljVHlwZSA9IHJvd1tjb2x1bW5LZXkgKyAnVHlwZSddO1xuICAgIGNvbnN0IGNsYXNzZXM6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge1xuICAgICAgJ2JtYl90YWJsZS1zdGlja3knOiBpbmRleCA9PT0gMCxcbiAgICAgIHRydW5jYXRlZDogdGhpcy50cnVuY2F0ZSgpLFxuICAgICAgd3JhcHBlZDogdGhpcy53cmFwKCksXG4gICAgfTtcblxuICAgIGlmIChzZW1hbnRpY1R5cGUpIHtcbiAgICAgIGNsYXNzZXNbJ2JtYl90YWJsZS0nICsgc2VtYW50aWNUeXBlXSA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH1cblxuICBzZXR1cER5bmFtaWNGaWx0ZXJzKCkge1xuICAgIHRoaXMuX3Jhd0NvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBjb2x1bW4uZGF0YUtleTtcbiAgICAgIHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICB0aGlzLmZpbHRlckZvcm0uYWRkQ29udHJvbChgJHtrZXl9X21pbmAsIG5ldyBGb3JtQ29udHJvbCgpKTtcbiAgICAgICAgICB0aGlzLmZpbHRlckZvcm0uYWRkQ29udHJvbChgJHtrZXl9X21heGAsIG5ldyBGb3JtQ29udHJvbCgpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgdGhpcy5maWx0ZXJGb3JtLmFkZENvbnRyb2woYCR7a2V5fV9mcm9tYCwgbmV3IEZvcm1Db250cm9sKCkpO1xuICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybS5hZGRDb250cm9sKGAke2tleX1fdG9gLCBuZXcgRm9ybUNvbnRyb2woKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgdGhpcy5maWx0ZXJGb3JtLmFkZENvbnRyb2woYCR7a2V5fV9jb250YWluc2AsIG5ldyBGb3JtQ29udHJvbCgnJykpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5maWx0ZXJGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5hcHBseUZpbHRlcnMoKSk7XG4gIH1cblxuICBhcHBseUZpbHRlcnMoKTogdm9pZCB7XG4gICAgbGV0IGZpbHRlcmVkID0gWy4uLnRoaXMub3JpZ2luYWxEYXRhXTtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLmZpbHRlckZvcm0udmFsdWUgYXMgYW55O1xuXG4gICAgaWYgKHRoaXMuc2VydmVyU2lkZSgpKSB7XG4gICAgICB0aGlzLmZpbHRlcnNDaGFuZ2UuZW1pdCh2YWx1ZXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3Jhd0NvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBjb2x1bW4uZGF0YUtleTtcbiAgICAgIGNvbnN0IHR5cGUgPSBjb2x1bW4udHlwZTtcblxuICAgICAgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGNvbnN0IG1pbiA9IHBhcnNlSW50KHZhbHVlc1tgJHtrZXl9X21pbmBdKSB8fCBudWxsO1xuICAgICAgICBjb25zdCBtYXggPSBwYXJzZUludCh2YWx1ZXNbYCR7a2V5fV9tYXhgXSkgfHwgbnVsbDtcblxuICAgICAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcigocm93KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSArcm93W2tleV07XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChtaW4gPT09IG51bGwgfHwgdmFsdWUgPj0gbWluKSAmJiAobWF4ID09PSBudWxsIHx8IHZhbHVlIDw9IG1heClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUgPT09ICdkYXRlJykge1xuICAgICAgICBjb25zdCBkYXRlRm9ybWF0ID0gY29sdW1uLmRhdGVGb3JtYXQgfHwgJ3l5eXktTU0tZGQnO1xuICAgICAgICBjb25zdCBmcm9tID0gdmFsdWVzW2Ake2tleX1fZnJvbWBdXG4gICAgICAgICAgPyBEYXRlVGltZS5mcm9tRm9ybWF0KHZhbHVlc1tgJHtrZXl9X2Zyb21gXSwgZGF0ZUZvcm1hdClcbiAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGNvbnN0IHRvID0gdmFsdWVzW2Ake2tleX1fdG9gXVxuICAgICAgICAgID8gRGF0ZVRpbWUuZnJvbUZvcm1hdCh2YWx1ZXNbYCR7a2V5fV90b2BdLCBkYXRlRm9ybWF0KVxuICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcigocm93KSA9PiB7XG4gICAgICAgICAgY29uc3QgZGF0ZVZhbCA9IERhdGVUaW1lLmZyb21Gb3JtYXQocm93W2tleV0sIGRhdGVGb3JtYXQpO1xuICAgICAgICAgIHJldHVybiAoIWZyb20gfHwgZGF0ZVZhbCA+PSBmcm9tKSAmJiAoIXRvIHx8IGRhdGVWYWwgPD0gdG8pO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaCA9IHZhbHVlc1tgJHtrZXl9X2NvbnRhaW5zYF0/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcigocm93KSA9PlxuICAgICAgICAgICAgcm93W2tleV0/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGZpbHRlcmVkO1xuICB9XG5cbiAgZ2V0Rm9ybUNvbnRyb2wobmFtZTogc3RyaW5nKTogRm9ybUNvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm0uZ2V0KG5hbWUpIGFzIEZvcm1Db250cm9sO1xuICB9XG5cbiAgdG9nZ2xlRmlsdGVycygpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlcnNWaXNpYmxlLnNldCghdGhpcy5maWx0ZXJzVmlzaWJsZSgpKTtcbiAgfVxuXG4gIG9uUGFnZUV2ZW50KGV2ZW50OiBQYWdlRXZlbnQpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlLnNldChldmVudC5wYWdlSW5kZXgpO1xuICAgIGlmICh0aGlzLnNlcnZlclNpZGUoKSkge1xuICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoe1xuICAgICAgICBwYWdlSW5kZXg6IGV2ZW50LnBhZ2VJbmRleCArIDEsXG4gICAgICAgIHBhZ2VTaXplOiBldmVudC5wYWdlU2l6ZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yIS5wYWdlSW5kZXggPSBldmVudC5wYWdlSW5kZXg7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlc29sdmVkUGFnZVNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlU2l6ZSgpID8/IDEwO1xuICB9XG5cbiAgbGFzdFBhZ2UoKTogbnVtYmVyIHtcbiAgICBjb25zdCB0b3RhbCA9IHRoaXMudG90YWxJdGVtcygpID8/IDA7XG4gICAgY29uc3Qgc2l6ZSA9IHRoaXMucmVzb2x2ZWRQYWdlU2l6ZTtcbiAgICBjb25zdCByZXN1bHQgPSBzaXplID09PSAwID8gMCA6IE1hdGguY2VpbCh0b3RhbCAvIHNpemUpIC0gMTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgcmVzdWx0KTtcbiAgfVxuXG4gIGdvVG9GaXJzdFBhZ2UoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UoKSA+IDApIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2Uuc2V0KDApO1xuICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoe1xuICAgICAgICBwYWdlSW5kZXg6IDEsXG4gICAgICAgIHBhZ2VTaXplOiB0aGlzLnJlc29sdmVkUGFnZVNpemUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnb1RvUHJldmlvdXNQYWdlKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlKCkgPiAwKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlLnNldCh0aGlzLmN1cnJlbnRQYWdlKCkgLSAxKTtcbiAgICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHtcbiAgICAgICAgcGFnZUluZGV4OiB0aGlzLmN1cnJlbnRQYWdlKCkgKyAxLFxuICAgICAgICBwYWdlU2l6ZTogdGhpcy5yZXNvbHZlZFBhZ2VTaXplLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ29Ub05leHRQYWdlKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlKCkgPCB0aGlzLmxhc3RQYWdlKCkpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2Uuc2V0KHRoaXMuY3VycmVudFBhZ2UoKSArIDEpO1xuICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoe1xuICAgICAgICBwYWdlSW5kZXg6IHRoaXMuY3VycmVudFBhZ2UoKSArIDEsXG4gICAgICAgIHBhZ2VTaXplOiB0aGlzLnJlc29sdmVkUGFnZVNpemUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnb1RvTGFzdFBhZ2UoKSB7XG4gICAgY29uc3QgbGFzdCA9IHRoaXMubGFzdFBhZ2UoKTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlLnNldChsYXN0KTtcbiAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7XG4gICAgICBwYWdlSW5kZXg6IGxhc3QgKyAxLFxuICAgICAgcGFnZVNpemU6IHRoaXMucmVzb2x2ZWRQYWdlU2l6ZSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldFRhYmxlQ2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY2xhc3NMaXN0ID0gWydibWJfdGFibGUnXTtcbiAgICBzd2l0Y2ggKHRoaXMuZmlsdGVyc1Bvc2l0aW9uKCkpIHtcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgY2xhc3NMaXN0LnB1c2goJ2JtYl90YWJsZS1maWx0ZXJzLXJpZ2h0Jyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgY2xhc3NMaXN0LnB1c2goJ2JtYl90YWJsZS1maWx0ZXJzLWJvdHRvbScpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICBjbGFzc0xpc3QucHVzaCgnYm1iX3RhYmxlLWZpbHRlcnMtbGVmdCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNsYXNzTGlzdC5wdXNoKCdibWJfdGFibGUtZmlsdGVycy10b3AnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzTGlzdDtcbiAgfVxufVxuIiwiPGRpdiBbbmdDbGFzc109XCJnZXRUYWJsZUNsYXNzZXMoKVwiPlxuICBAaWYgKHNob3dTZWFyY2goKSB8fCBmaWx0ZXJzVmlzaWJsZSgpKSB7XG4gICAgPGhlYWRlciBjbGFzcz1cImJtYl90YWJsZS1oZWFkZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJibWJfdGFibGUtZmlsdGVyXCI+XG4gICAgICAgIEBpZiAoc2hvd1NlYXJjaCgpKSB7XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJibWJfdGFibGUtZmlsdGVyLWl0ZW0gYm1iX3RhYmxlLWZpbHRlci1pdGVtLXNlYXJjaFwiPlxuICAgICAgICAgICAgPGJtYi1pbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImJtYl90YWJsZS1zZWFyY2hcIlxuICAgICAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0J1c2NhcidcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbaWNvbl09XCInc2VhcmNoJ1wiXG4gICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cIidub3JtYWwnXCJcbiAgICAgICAgICAgICAgW2NvbnRyb2xdPVwic2VhcmNoQ29udHJvbFwiXG4gICAgICAgICAgICA+PC9ibWItaW5wdXQ+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChmaWx0ZXJzVmlzaWJsZSgpKSB7XG4gICAgICAgICAgQGZvciAoY29sdW1uIG9mIHBhcnNlZEZpbHRlcnNDb2x1bW5zKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJibWJfdGFibGUtZmlsdGVyLWl0ZW1cIj5cbiAgICAgICAgICAgICAgQHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcbiAgICAgICAgICAgICAgICBAY2FzZSAoXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJtYl90YWJsZS1maWx0ZXItaXRlbS1udW1iZXJcIiBtYXJnaW49XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxibWItaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29sdW1uLmxhYmVsICsgJyBtw61uaW1vJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiJ251bWJlcidcIlxuICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInTcOtbidcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cIidub3JtYWwnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY29udHJvbF09XCJnZXRGb3JtQ29udHJvbChjb2x1bW4uZGF0YUtleSArICdfbWluJylcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8Ym1iLWlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbHVtbi5sYWJlbCArICcgbcOheGltbydcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cIidudW1iZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ03DoXgnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCInbm9ybWFsJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwiZ2V0Rm9ybUNvbnRyb2woY29sdW1uLmRhdGFLZXkgKyAnX21heCcpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIEBjYXNlIChcImRhdGVcIikge1xuICAgICAgICAgICAgICAgICAgPGJtYi1kYXRlLXJhbmdlXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb2x1bW4ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJTdGFydERhdGVdPVwiJ0Rlc2RlJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlckVuZERhdGVdPVwiJ0hhc3RhJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpY29uXT1cIidjYWxlbmRhcl9tb250aCdcIlxuICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCInbm9ybWFsJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtkYXRlRm9ybWF0XT1cIidkZC9NTS95eXl5J1wiXG4gICAgICAgICAgICAgICAgICAgIFtjb250cm9sU3RhcnRdPVwiZ2V0Rm9ybUNvbnRyb2woY29sdW1uLmRhdGFLZXkgKyAnX2Zyb20nKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb250cm9sRW5kXT1cImdldEZvcm1Db250cm9sKGNvbHVtbi5kYXRhS2V5ICsgJ190bycpXCJcbiAgICAgICAgICAgICAgICAgICAgKHN0YXJ0RGF0ZUNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgICBnZXRGb3JtQ29udHJvbChjb2x1bW4uZGF0YUtleSArICdfZnJvbScpLnNldFZhbHVlKCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgKGVuZERhdGVDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0Rm9ybUNvbnRyb2woY29sdW1uLmRhdGFLZXkgKyAnX3RvJykuc2V0VmFsdWUoJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBAZGVmYXVsdCB7XG4gICAgICAgICAgICAgICAgICA8Ym1iLWlucHV0XG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb2x1bW4ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0ZpbHRyYXInXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwiZ2V0Rm9ybUNvbnRyb2woY29sdW1uLmRhdGFLZXkgKyAnX2NvbnRhaW5zJylcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvaGVhZGVyPlxuICB9XG4gIDxkaXYgY2xhc3M9XCJibWJfdGFibGUtY29udGFpbmVyXCI+XG4gICAgQGlmIChzaG93RmlsdGVycygpKSB7XG4gICAgICA8Ym1iLWFjdGlvbi1pY29uXG4gICAgICAgIFtpZEVsZW1lbnRdPVwiJydcIlxuICAgICAgICBbaWNvbl09XCInZmlsdGVyX2xpc3QnXCJcbiAgICAgICAgW2ljb25TaXplXT1cIjI0XCJcbiAgICAgICAgKGJ1dHRvbkNsaWNrKT1cInRvZ2dsZUZpbHRlcnMoKVwiXG4gICAgICA+PC9ibWItYWN0aW9uLWljb24+XG4gICAgfVxuICAgIDxzZWN0aW9uIGNsYXNzPVwiYm1iX3RhYmxlLWNvbnRhaW5lci10YWJsZVwiPlxuICAgICAgPHRhYmxlXG4gICAgICAgIG1hdC10YWJsZVxuICAgICAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcbiAgICAgICAgY2xhc3M9XCJibWJfdGFibGUtY29udGVudFwiXG4gICAgICAgIG11bHRpVGVtcGxhdGVEYXRhUm93c1xuICAgICAgPlxuICAgICAgICA8IS0tIENoZWNrYm94IENvbHVtbiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzZWxlY3RcIiBzdGlja3k+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz1cImJtYl90YWJsZS1jaGVja2JveFwiPlxuICAgICAgICAgICAgPGJtYi1jaGVja2JveFxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IHRvZ2dsZUFsbFJvd3MoKSA6IG51bGxcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiBpc0FsbFNlbGVjdGVkKClcIlxuICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgW2FyaWFMYWJlbF09XCJjaGVja2JveExhYmVsKClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cImJtYl90YWJsZS1jaGVja2JveFwiPlxuICAgICAgICAgICAgPGJtYi1jaGVja2JveFxuICAgICAgICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IHNlbGVjdGlvbi50b2dnbGUocm93KSA6IG51bGw7IG9uU2VsZWN0KClcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaXNTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICAgICAgW2FyaWFMYWJlbF09XCJjaGVja2JveExhYmVsKHJvdylcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBvbmtleXByZXNzPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBFeHBhbmQgQ29sdW1uIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImV4cGFuZFwiIHN0aWNreT5cbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlLWV4cGFuZFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwicm93IGFjdGlvbnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiYm1iX3RhYmxlLWV4cGFuZFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdy5kZXRhaWxcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJleHBhbmQgcm93XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICBleHBhbmRlZEVsZW1lbnQgPSBleHBhbmRlZEVsZW1lbnQgPT09IHJvdyA/IG51bGwgOiByb3c7XG4gICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJtYi1pY29uXG4gICAgICAgICAgICAgICAgICBbaWNvbl09XCJcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWRFbGVtZW50ID09PSByb3cgPyAnZXhwYW5kX2xlc3MnIDogJ2V4cGFuZF9tb3JlJ1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gRGlzcGxheSBDb2x1bW5zIC0tPlxuICAgICAgICBAZm9yIChjb2x1bW4gb2YgdGFibGVDb2x1bW5zOyB0cmFjayBjb2x1bW47IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5kZWZcIiBbc3RpY2t5XT1cImkgPT09IDBcIj5cbiAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICBtYXQtaGVhZGVyLWNlbGxcbiAgICAgICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgI2hlYWRlckNlbGxcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiaGFzRWxsaXBzaXMoaGVhZGVyQ2VsbCkgPyBjb2x1bW4ubGFiZWwgOiAnJ1wiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwiYm1iX3Rvb2x0aXBcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ2JtYl90YWJsZS1zdGlja3knOiBpID09PSAwLFxuICAgICAgICAgICAgICAgIHRydW5jYXRlZDogdHJ1bmNhdGUoKSxcbiAgICAgICAgICAgICAgICB3cmFwcGVkOiB3cmFwKCksXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8IS0tIFTDrXR1bG8gLS0+XG4gICAgICAgICAgICAgIEBpZiAoY29sdW1uLmh0bWxMYWJlbCkge1xuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmh0bWxMYWJlbFwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBjb2x1bW46IGNvbHVtbiwgaW5kZXg6IGkgfVwiXG4gICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIHt7IHRoaXMubGFuZygpID09PSBcImVzXCIgPyBjb2x1bW4ubGFiZWwgOiBjb2x1bW4ubGFiZWxFbiB9fVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgPCEtLSBSZXNpemUgSGFuZGxlIC0tPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlLXJlc2l6ZVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvblJlc2l6ZUNvbHVtbigkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGg+XG5cbiAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICBtYXQtY2VsbFxuICAgICAgICAgICAgICAqbWF0Q2VsbERlZj1cImxldCByb3c7IGxldCBhID0gaW5kZXhcIlxuICAgICAgICAgICAgICAjY2VsbFxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCJoYXNFbGxpcHNpcyhjZWxsKSA/IHJvd1tjb2x1bW4uZGF0YUtleV0gOiAnJ1wiXG4gICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImJtYl90b29sdGlwXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzZXMocm93LCBjb2x1bW4uZGF0YUtleSwgaSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBAaWYgKGlzVGVtcGxhdGVSZWYocm93W2NvbHVtbi5kYXRhS2V5ICsgXCJUZW1wbGF0ZVwiXSkpIHtcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJvd1tjb2x1bW4uZGF0YUtleSArICdUZW1wbGF0ZSddXCJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHJvdzogcm93IH1cIlxuICAgICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICB7eyByb3dbY29sdW1uLmRhdGFLZXldPy5wcm9wZXJ0eU5hbWUgfHwgcm93W2NvbHVtbi5kYXRhS2V5XSB9fVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBBY3Rpb25zIENvbHVtbiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJhY3Rpb25zXCIgc3RpY2t5RW5kPlxuICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJibWJfdGFibGUtYWN0aW9uc1wiPjwvdGg+XG4gICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiIGNsYXNzPVwiYm1iX3RhYmxlLWFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJhY3Rpb25UZW1wbGF0ZSgpIVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHJvdzogcm93IH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIFJvdyB0byBleHBhbmQgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZXhwYW5kZWREZXRhaWxcIj5cbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgIG1hdC1jZWxsXG4gICAgICAgICAgICAqbWF0Q2VsbERlZj1cImxldCByb3dcIlxuICAgICAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJ0YWJsZURpc3BsYXlDb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImJtYl90YWJsZS1kZXRhaWxcIlxuICAgICAgICAgICAgICBbQGRldGFpbEV4cGFuZF09XCJcbiAgICAgICAgICAgICAgICByb3cgPT0gZXhwYW5kZWRFbGVtZW50ID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImRldGFpbFRlbXBsYXRlKCk7IGNvbnRleHQ6IHsgcm93OiByb3cgfVwiXG4gICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gUm93cyAtLT5cbiAgICAgICAgPHRyXG4gICAgICAgICAgbWF0LWhlYWRlci1yb3dcbiAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPVwidGFibGVEaXNwbGF5Q29sdW1uc1wiXG4gICAgICAgICAgY2xhc3M9XCJibWJfdGFibGUtcm93XCJcbiAgICAgICAgPjwvdHI+XG5cbiAgICAgICAgPHRyXG4gICAgICAgICAgbWF0LXJvd1xuICAgICAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiB0YWJsZURpc3BsYXlDb2x1bW5zOyBsZXQgaSA9IGRhdGFJbmRleFwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0Um93KHJvdylcIlxuICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlLXJvd1wiXG4gICAgICAgICAgW2NsYXNzLmJtYl90YWJsZS1leHBhbmRpYmxlXT1cImV4cGFuZGVkRWxlbWVudCA9PT0gcm93XCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnYm1iX3RhYmxlLWV2ZW4nOiBpc0V2ZW4oaSksXG4gICAgICAgICAgICAnYm1iX3RhYmxlLW9kZCc6IGlzT2RkKGkpLFxuICAgICAgICAgIH1cIlxuICAgICAgICA+PC90cj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFibGVDb25maWc/LmlzRXhwYW5kaWJsZVwiPlxuICAgICAgICAgIDx0clxuICAgICAgICAgICAgbWF0LXJvd1xuICAgICAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFsnZXhwYW5kZWREZXRhaWwnXTsgbGV0IGkgPSBkYXRhSW5kZXhcIlxuICAgICAgICAgICAgY2xhc3M9XCJibWJfdGFibGUtZGV0YWlsc1wiXG4gICAgICAgICAgICBbY2xhc3MuYm1iX3RhYmxlLWV4cGFuZGVkXT1cImV4cGFuZGVkRWxlbWVudCA9PT0gcm93XCJcbiAgICAgICAgICA+PC90cj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvc2VjdGlvbj5cbiAgICA8IS0tIFBhZ2luYXRvciAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFibGVDb25maWc/LmlzUGFnaW5hYmxlXCIgc3RpY2t5PlxuICAgICAgPG1hdC1wYWdpbmF0b3JcbiAgICAgICAgI3BhZ2luYXRvclxuICAgICAgICBbbGVuZ3RoXT1cInRvdGFsSXRlbXMoKVwiXG4gICAgICAgIFtwYWdlU2l6ZV09XCJ0aGlzLnBhZ2VTaXplKClcIlxuICAgICAgICBbaGlkZVBhZ2VTaXplXT1cInRydWVcIlxuICAgICAgICAocGFnZSk9XCJvblBhZ2VFdmVudCgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgIDwvbWF0LXBhZ2luYXRvcj5cblxuICAgICAgPGRpdiBjbGFzcz1cImJtYl90YWJsZS1wYWdpbmF0b3JcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJibWJfdGFibGUtcGFnaW5hdG9yLXRleHRcIj57eyBnZXRQYWdpbmF0aW9uVGV4dCgpIH19PC9zcGFuPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICBzZXJ2ZXJTaWRlKCkgPyBjdXJyZW50UGFnZSgpID09PSAwIDogIXBhZ2luYXRvcj8uaGFzUHJldmlvdXNQYWdlKClcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdibWJfdGFibGUtcGFnaW5hdG9yLWJ0bi1kaXNhYmxlZCc6IHNlcnZlclNpZGUoKVxuICAgICAgICAgICAgICA/IGN1cnJlbnRQYWdlKCkgPT09IDBcbiAgICAgICAgICAgICAgOiAhcGFnaW5hdG9yPy5oYXNQcmV2aW91c1BhZ2UoKSxcbiAgICAgICAgICB9XCJcbiAgICAgICAgICAoY2xpY2spPVwic2VydmVyU2lkZSgpID8gZ29Ub0ZpcnN0UGFnZSgpIDogcGFnaW5hdG9yLmZpcnN0UGFnZSgpXCJcbiAgICAgICAgICBjbGFzcz1cImJtYl90YWJsZS1wYWdpbmF0b3ItYnRuXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxibWItaWNvblxuICAgICAgICAgICAgaWNvbj1cImtleWJvYXJkX2RvdWJsZV9hcnJvd19sZWZ0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlLXBhZ2luYXRvci1pY29uXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgIHNlcnZlclNpZGUoKSA/IGN1cnJlbnRQYWdlKCkgPT09IDAgOiAhcGFnaW5hdG9yPy5oYXNQcmV2aW91c1BhZ2UoKVxuICAgICAgICAgIFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2JtYl90YWJsZS1wYWdpbmF0b3ItYnRuLWRpc2FibGVkJzogc2VydmVyU2lkZSgpXG4gICAgICAgICAgICAgID8gY3VycmVudFBhZ2UoKSA9PT0gMFxuICAgICAgICAgICAgICA6ICFwYWdpbmF0b3I/Lmhhc1ByZXZpb3VzUGFnZSgpLFxuICAgICAgICAgIH1cIlxuICAgICAgICAgIChjbGljayk9XCJzZXJ2ZXJTaWRlKCkgPyBnb1RvUHJldmlvdXNQYWdlKCkgOiBwYWdpbmF0b3IucHJldmlvdXNQYWdlKClcIlxuICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlLXBhZ2luYXRvci1idG5cIlxuICAgICAgICA+XG4gICAgICAgICAgPGJtYi1pY29uXG4gICAgICAgICAgICBpY29uPVwia2V5Ym9hcmRfYXJyb3dfbGVmdFwiXG4gICAgICAgICAgICBjbGFzcz1cImJtYl90YWJsZS1wYWdpbmF0b3ItaWNvblwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICBzZXJ2ZXJTaWRlKClcbiAgICAgICAgICAgICAgPyBjdXJyZW50UGFnZSgpID49IGxhc3RQYWdlKClcbiAgICAgICAgICAgICAgOiAhcGFnaW5hdG9yPy5oYXNOZXh0UGFnZSgpXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnYm1iX3RhYmxlLXBhZ2luYXRvci1idG4tZGlzYWJsZWQnOiBzZXJ2ZXJTaWRlKClcbiAgICAgICAgICAgICAgPyBjdXJyZW50UGFnZSgpID49IGxhc3RQYWdlKClcbiAgICAgICAgICAgICAgOiAhcGFnaW5hdG9yPy5oYXNOZXh0UGFnZSgpLFxuICAgICAgICAgIH1cIlxuICAgICAgICAgIChjbGljayk9XCJzZXJ2ZXJTaWRlKCkgPyBnb1RvTmV4dFBhZ2UoKSA6IHBhZ2luYXRvci5uZXh0UGFnZSgpXCJcbiAgICAgICAgICBjbGFzcz1cImJtYl90YWJsZS1wYWdpbmF0b3ItYnRuXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxibWItaWNvblxuICAgICAgICAgICAgaWNvbj1cImtleWJvYXJkX2Fycm93X3JpZ2h0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlLXBhZ2luYXRvci1pY29uXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgIHNlcnZlclNpZGUoKVxuICAgICAgICAgICAgICA/IGN1cnJlbnRQYWdlKCkgPj0gbGFzdFBhZ2UoKVxuICAgICAgICAgICAgICA6ICFwYWdpbmF0b3I/Lmhhc05leHRQYWdlKClcbiAgICAgICAgICBcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdibWJfdGFibGUtcGFnaW5hdG9yLWJ0bi1kaXNhYmxlZCc6IHNlcnZlclNpZGUoKVxuICAgICAgICAgICAgICA/IGN1cnJlbnRQYWdlKCkgPj0gbGFzdFBhZ2UoKVxuICAgICAgICAgICAgICA6ICFwYWdpbmF0b3I/Lmhhc05leHRQYWdlKCksXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlcnZlclNpZGUoKSA/IGdvVG9MYXN0UGFnZSgpIDogcGFnaW5hdG9yLmxhc3RQYWdlKClcIlxuICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlLXBhZ2luYXRvci1idG5cIlxuICAgICAgICA+XG4gICAgICAgICAgPGJtYi1pY29uXG4gICAgICAgICAgICBpY29uPVwia2V5Ym9hcmRfZG91YmxlX2Fycm93X3JpZ2h0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlLXBhZ2luYXRvci1pY29uXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|