@ti-tecnologico-de-monterrey-oficial/ds-ng 1.5.1218-c → 1.5.1218-e
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/i18n/en.json +113 -0
- package/assets/i18n/es.json +113 -0
- package/assets/styles/main.min.css +1 -1
- package/assets/styles/main.min.css.map +1 -1
- package/esm2022/assets/i18n/en.json +113 -0
- package/esm2022/assets/i18n/es.json +113 -0
- package/esm2022/lib/components/bmb-academic-progress/bmb-academic-progress.component.mjs +2 -2
- package/esm2022/lib/components/bmb-accordion/bmb-accordion.component.mjs +2 -2
- package/esm2022/lib/components/bmb-account-statement/bmb-account-statement.component.mjs +21 -19
- package/esm2022/lib/components/bmb-advertisement-card/bmb-advertisement-card.component.mjs +6 -4
- package/esm2022/lib/components/bmb-alert-center/bmb-alert-center-empty/bmb-alert-center-empty.component.mjs +4 -3
- package/esm2022/lib/components/bmb-alert-center/bmb-alert-center-form/bmb-alert-center-form.component.mjs +2 -2
- package/esm2022/lib/components/bmb-alert-center/bmb-alert-center-list/bmb-alert-center-list.component.mjs +2 -2
- package/esm2022/lib/components/bmb-alert-center/bmb-alert-center.component.mjs +11 -10
- package/esm2022/lib/components/bmb-balance-overview/bmb-balance-overview.component.mjs +15 -9
- package/esm2022/lib/components/bmb-breadcrumb/bmb-breadcrumb.component.mjs +3 -3
- package/esm2022/lib/components/bmb-calendar/bmb-calendar.component.mjs +17 -15
- package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-header/bmb-calendar-header.component.mjs +19 -13
- package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-hour-view/bmb-calendar-hour-view.component.mjs +2 -2
- package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-schedule-cards/bmb-calendar-schedule-cards.component.mjs +3 -3
- package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-template-day/bmb-calendar-template-day.component.mjs +9 -7
- package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-template-mobile/bmb-calendar-template-mobile.component.mjs +16 -12
- package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-template-month/bmb-calendar-template-month.component.mjs +12 -10
- package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-template-week/bmb-calendar-template-week.component.mjs +10 -8
- package/esm2022/lib/components/bmb-calendar/common/bmb-calendar-time-indicator/bmb-calendar-time-indicator.component.mjs +3 -3
- package/esm2022/lib/components/bmb-card/bmb-card.component.mjs +3 -3
- package/esm2022/lib/components/bmb-card-button/bmb-card-button.component.mjs +3 -3
- package/esm2022/lib/components/bmb-chat-bar/bmb-chat-bar.component.mjs +7 -6
- package/esm2022/lib/components/bmb-checkbox/bmb-checkbox.component.mjs +3 -3
- package/esm2022/lib/components/bmb-container-button/bmb-container-button.component.mjs +3 -3
- package/esm2022/lib/components/bmb-date-range/bmb-date-range.component.mjs +3 -3
- package/esm2022/lib/components/bmb-datepicker/bmb-datepicker-modal/bmb-datepicker-modal.component.mjs +21 -19
- package/esm2022/lib/components/bmb-datepicker/bmb-datepicker.component.mjs +5 -5
- package/esm2022/lib/components/bmb-digital-id/bmb-digital-id.component.mjs +6 -4
- package/esm2022/lib/components/bmb-drawer-overlay/bmb-drawer-overlay.component.mjs +3 -3
- package/esm2022/lib/components/bmb-dropdown/bmb-dropdown.component.mjs +2 -2
- package/esm2022/lib/components/bmb-dropdown-menu/bmb-dropdown-menu.component.mjs +2 -2
- package/esm2022/lib/components/bmb-dropzone/bmb-dropzone.component.mjs +52 -35
- package/esm2022/lib/components/bmb-evaluation-rubric/bmb-evaluation-rubric.component.mjs +3 -3
- package/esm2022/lib/components/bmb-external-link/bmb-external-link.component.mjs +2 -2
- package/esm2022/lib/components/bmb-fab/bmb-fab.component.mjs +3 -3
- package/esm2022/lib/components/bmb-filter-card/bmb-filter-card.component.mjs +4 -4
- package/esm2022/lib/components/bmb-focus-element/bmb-focus-element.component.mjs +3 -3
- package/esm2022/lib/components/bmb-frequent-apps-selector/bmb-frequent-apps-selector.component.mjs +3 -3
- package/esm2022/lib/components/bmb-grade-value/bmb-grade-value.component.mjs +3 -3
- package/esm2022/lib/components/bmb-grades/bmb-grades.component.mjs +4 -4
- package/esm2022/lib/components/bmb-header-mitec/bmb-header-mitec.component.mjs +9 -4
- package/esm2022/lib/components/bmb-header-mobile/bmb-header-mobile.component.mjs +3 -3
- package/esm2022/lib/components/bmb-hito-card/bmb-hito-card.component.mjs +3 -3
- package/esm2022/lib/components/bmb-home-card/bmb-home-card-header/bmb-home-card-header.component.mjs +5 -5
- package/esm2022/lib/components/bmb-home-card-chat/bmb-home-card-chat.component.mjs +11 -5
- package/esm2022/lib/components/bmb-icon-item/bmb-icon-item.component.mjs +13 -4
- package/esm2022/lib/components/bmb-image/bmb-image.component.mjs +2 -2
- package/esm2022/lib/components/bmb-input/bmb-input-content/bmb-input-content.component.mjs +2 -1
- package/esm2022/lib/components/bmb-input/bmb-input-validator/bmb-input-validator.component.mjs +3 -3
- package/esm2022/lib/components/bmb-input-tags/bmb-input-tags.component.mjs +2 -2
- package/esm2022/lib/components/bmb-invoice/bmb-invoice.component.mjs +3 -3
- package/esm2022/lib/components/bmb-item/bmb-item.component.mjs +3 -3
- package/esm2022/lib/components/bmb-list-group/bmb-list-group-item/bmb-list-group-item.component.mjs +3 -3
- package/esm2022/lib/components/bmb-list-group/bmb-list-group.component.mjs +3 -3
- package/esm2022/lib/components/bmb-loader/bmb-loader.component.mjs +3 -3
- package/esm2022/lib/components/bmb-login/bmb-login.component.mjs +10 -8
- package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-logged/bmb-login-onboarding-logged.component.mjs +3 -3
- package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-login/bmb-login-onboarding-login.component.mjs +3 -3
- package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-logout/bmb-login-onboarding-logout.component.mjs +3 -3
- package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-stepper/bmb-login-onboarding-stepper-steps/bmb-login-onboarding-stepper-step-four.component.mjs +2 -2
- package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-stepper/bmb-login-onboarding-stepper-steps/bmb-login-onboarding-stepper-step.component.mjs +3 -3
- package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding-stepper/bmb-login-onboarding-stepper.component.mjs +3 -3
- package/esm2022/lib/components/bmb-login-onboarding/bmb-login-onboarding.component.mjs +24 -9
- package/esm2022/lib/components/bmb-mitec-logo-animation/bmb-mitec-logo-animation.component.mjs +2 -2
- package/esm2022/lib/components/bmb-mobile-templates/bmb-mobile-templates.component.mjs +2 -2
- package/esm2022/lib/components/bmb-modal/bmb-native-modal.component.mjs +4 -4
- package/esm2022/lib/components/bmb-multi-dot-paginator/bmb-multi-dot-paginator-item/bmb-multi-dot-paginator-item.component.mjs +3 -3
- package/esm2022/lib/components/bmb-multi-dot-paginator/bmb-multi-dot-paginator.component.mjs +3 -3
- package/esm2022/lib/components/bmb-navigation-bar/bmb-navigation-bar.component.mjs +2 -2
- package/esm2022/lib/components/bmb-notice-card/bmb-notice-card.component.mjs +6 -4
- package/esm2022/lib/components/bmb-portal/bmb-portal.component.mjs +4 -4
- package/esm2022/lib/components/bmb-portal/bmb-projected-content/bmb-projected-content.component.mjs +3 -3
- package/esm2022/lib/components/bmb-profile/bmb-profile.component.mjs +3 -3
- package/esm2022/lib/components/bmb-progress-bar/bmb-progress-bar.component.mjs +3 -3
- package/esm2022/lib/components/bmb-progress-cirlce/bmb-progress-circle.component.mjs +53 -69
- package/esm2022/lib/components/bmb-progress-cirlce/bmb-progress-circle.interface.mjs +1 -1
- package/esm2022/lib/components/bmb-push-notification/bmb-push-notification-item/bmb-push-notification-item.component.mjs +3 -3
- package/esm2022/lib/components/bmb-push-notification/bmb-push-notification.component.mjs +2 -2
- package/esm2022/lib/components/bmb-radial/bmb-radial.component.mjs +3 -3
- package/esm2022/lib/components/bmb-sidebar/bmb-sidebar.component.mjs +25 -24
- package/esm2022/lib/components/bmb-simple-header/bmb-simple-header.component.mjs +2 -2
- package/esm2022/lib/components/bmb-sounds-card/bmb-sounds-card.component.mjs +3 -3
- package/esm2022/lib/components/bmb-step-progress-bar/bmb-step-progress-bar.component.mjs +15 -11
- package/esm2022/lib/components/bmb-student-activity-card/bmb-student-activity-card.component.mjs +3 -3
- package/esm2022/lib/components/bmb-switch/bmb-switch.component.mjs +6 -4
- package/esm2022/lib/components/bmb-table-lite/bmb-table-lite.component.mjs +564 -0
- package/esm2022/lib/components/bmb-table-lite/bmb-table-lite.interface.mjs +2 -0
- package/esm2022/lib/components/bmb-tables/bmb-tables.component.mjs +3 -3
- package/esm2022/lib/components/bmb-tabs/bmb-tabs.component.mjs +6 -6
- package/esm2022/lib/components/bmb-tags/bmb-tags.component.mjs +5 -4
- package/esm2022/lib/components/bmb-text-link/bmb-text-link.component.mjs +3 -3
- package/esm2022/lib/components/bmb-theme/bmb-theme.component.mjs +2 -2
- package/esm2022/lib/components/bmb-three-cols/bmb-three-cols.component.mjs +2 -2
- package/esm2022/lib/components/bmb-timestream/bmb-timestream-detail/bmb-timestream-detail.component.mjs +3 -3
- package/esm2022/lib/components/bmb-timestream/bmb-timestream.component.mjs +4 -4
- package/esm2022/lib/components/bmb-toast/bmb-toast.component.mjs +3 -3
- package/esm2022/lib/components/bmb-tooltip/bmb-tooltip.component.mjs +6 -3
- package/esm2022/lib/components/bmb-top-bar/bmb-top-bar-item/bmb-top-bar-item.component.mjs +3 -3
- package/esm2022/lib/components/bmb-top-bar/bmb-top-bar-user-section/bmb-top-bar-user-section.component.mjs +3 -3
- package/esm2022/lib/components/bmb-top-bar/bmb-top-bar.component.mjs +3 -3
- package/esm2022/lib/components/bmb-totp/bmb-totp.component.mjs +7 -5
- package/esm2022/lib/components/bmb-user-profile/bmb-user-profile-content/bmb-user-profile-content.component.mjs +4 -4
- package/esm2022/lib/components/bmb-user-profile/bmb-user-profile.component.mjs +17 -11
- package/esm2022/lib/components/bmb-user-summary/bmb-user-summary-content/bmb-user-summary-content.component.mjs +9 -6
- package/esm2022/lib/components/bmb-user-summary/bmb-user-summary.component.mjs +10 -4
- package/esm2022/lib/components/bmb-web-templates/bmb-web-templates.component.mjs +3 -3
- package/esm2022/lib/components/bmb-wheel-menu/bmb-wheel-menu.component.mjs +3 -3
- package/esm2022/lib/directives/bmb-layout/bmb-layout-item.directive.mjs +19 -6
- package/esm2022/lib/directives/bmb-layout/bmb-layout.directive.mjs +11 -6
- package/esm2022/lib/directives/bmb-layout/bmb-vertical-layout/bmb-vertical-layout-item.directive.mjs +1 -1
- package/esm2022/lib/directives/bmb-layout/bmb-vertical-layout/bmb-vertical-layout.directive.mjs +2 -2
- package/esm2022/lib/directives/bmb-selector/bmb-selector.directive.mjs +28 -0
- package/esm2022/lib/pipes/translations.mjs +22 -0
- package/esm2022/lib/services/calendar/calendar.service.mjs +51 -0
- package/esm2022/lib/services/modal/native-modal.service.mjs +60 -0
- package/esm2022/lib/services/notification/notification.service.mjs +84 -0
- package/esm2022/lib/services/projection/projection.service.mjs +49 -0
- package/esm2022/lib/services/tabs/tabs.service.mjs +30 -0
- package/esm2022/lib/services/theme/theme.service.mjs +30 -0
- package/esm2022/lib/services/toast/toast.service.mjs +24 -0
- package/esm2022/lib/services/translations/translations.service.mjs +53 -0
- package/esm2022/public-api.mjs +14 -6
- package/fesm2022/ti-tecnologico-de-monterrey-oficial-ds-ng.mjs +1486 -486
- package/fesm2022/ti-tecnologico-de-monterrey-oficial-ds-ng.mjs.map +1 -1
- package/lib/components/bmb-account-statement/bmb-account-statement.component.d.ts +15 -15
- package/lib/components/bmb-alert-center/bmb-alert-center.component.d.ts +4 -2
- package/lib/components/bmb-calendar/bmb-calendar.component.d.ts +7 -6
- package/lib/components/bmb-calendar/common/bmb-calendar-header/bmb-calendar-header.component.d.ts +5 -2
- package/lib/components/bmb-calendar/common/bmb-calendar-template-day/bmb-calendar-template-day.component.d.ts +5 -2
- package/lib/components/bmb-calendar/common/bmb-calendar-template-mobile/bmb-calendar-template-mobile.component.d.ts +8 -5
- package/lib/components/bmb-calendar/common/bmb-calendar-template-month/bmb-calendar-template-month.component.d.ts +6 -3
- package/lib/components/bmb-calendar/common/bmb-calendar-template-week/bmb-calendar-template-week.component.d.ts +5 -2
- package/lib/components/bmb-chat-bar/bmb-chat-bar.component.d.ts +2 -3
- package/lib/components/bmb-datepicker/bmb-datepicker-modal/bmb-datepicker-modal.component.d.ts +8 -5
- package/lib/components/bmb-datepicker/bmb-datepicker.component.d.ts +2 -3
- package/lib/components/bmb-digital-id/bmb-digital-id.component.d.ts +1 -1
- package/lib/components/bmb-dropdown/bmb-dropdown.component.d.ts +1 -1
- package/lib/components/bmb-dropdown-menu/bmb-dropdown-menu.component.d.ts +1 -1
- package/lib/components/bmb-dropzone/bmb-dropzone.component.d.ts +11 -7
- package/lib/components/bmb-external-link/bmb-external-link.component.d.ts +1 -1
- package/lib/components/bmb-filter-card/bmb-filter-card.component.d.ts +1 -1
- package/lib/components/bmb-grades/bmb-grades.component.d.ts +1 -1
- package/lib/components/bmb-header-mitec/bmb-header-mitec.component.d.ts +1 -1
- package/lib/components/bmb-home-card-chat/bmb-home-card-chat.component.d.ts +2 -2
- package/lib/components/bmb-icon-item/bmb-icon-item.component.d.ts +2 -1
- package/lib/components/bmb-login/bmb-login.component.d.ts +5 -5
- package/lib/components/bmb-login-onboarding/bmb-login-onboarding-stepper/bmb-login-onboarding-stepper-steps/bmb-login-onboarding-stepper-step-four.component.d.ts +1 -1
- package/lib/components/bmb-login-onboarding/bmb-login-onboarding.component.d.ts +3 -1
- package/lib/components/bmb-modal/bmb-native-modal.component.d.ts +1 -1
- package/lib/components/bmb-notice-card/bmb-notice-card.component.d.ts +1 -1
- package/lib/components/bmb-portal/bmb-portal.component.d.ts +5 -5
- package/lib/components/bmb-portal/bmb-projected-content/bmb-projected-content.component.d.ts +1 -1
- package/lib/components/bmb-progress-cirlce/bmb-progress-circle.component.d.ts +25 -19
- package/lib/components/bmb-progress-cirlce/bmb-progress-circle.interface.d.ts +13 -10
- package/lib/components/bmb-push-notification/bmb-push-notification.component.d.ts +1 -1
- package/lib/components/bmb-sidebar/bmb-sidebar.component.d.ts +5 -4
- package/lib/components/bmb-step-progress-bar/bmb-step-progress-bar.component.d.ts +5 -3
- package/lib/components/bmb-switch/bmb-switch.component.d.ts +1 -1
- package/lib/components/bmb-table-lite/bmb-table-lite.component.d.ts +97 -0
- package/lib/components/bmb-table-lite/bmb-table-lite.interface.d.ts +22 -0
- package/lib/components/bmb-tabs/bmb-tabs.component.d.ts +1 -1
- package/lib/components/bmb-tags/bmb-tags.component.d.ts +2 -1
- package/lib/components/bmb-timestream/bmb-timestream.component.d.ts +1 -1
- package/lib/components/bmb-tooltip/bmb-tooltip.component.d.ts +1 -0
- package/lib/components/bmb-totp/bmb-totp.component.d.ts +2 -2
- package/lib/components/bmb-user-profile/bmb-user-profile.component.d.ts +3 -3
- package/lib/components/bmb-user-summary/bmb-user-summary-content/bmb-user-summary-content.component.d.ts +4 -2
- package/lib/components/bmb-user-summary/bmb-user-summary.component.d.ts +1 -1
- package/lib/directives/bmb-layout/bmb-layout-item.directive.d.ts +5 -1
- package/lib/directives/bmb-layout/bmb-layout.directive.d.ts +2 -2
- package/lib/directives/bmb-selector/bmb-selector.directive.d.ts +8 -0
- package/lib/pipes/translations.d.ts +10 -0
- package/lib/services/calendar/calendar.service.d.ts +15 -0
- package/lib/services/modal/native-modal.service.d.ts +18 -0
- package/lib/services/notification/notification.service.d.ts +20 -0
- package/lib/services/projection/projection.service.d.ts +31 -0
- package/lib/services/tabs/tabs.service.d.ts +13 -0
- package/lib/services/theme/theme.service.d.ts +11 -0
- package/lib/services/toast/toast.service.d.ts +9 -0
- package/lib/services/translations/translations.service.d.ts +22 -0
- package/package.json +1 -1
- package/public-api.d.ts +12 -5
|
@@ -0,0 +1,564 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { Component, Output, EventEmitter, TemplateRef, ViewEncapsulation, ChangeDetectionStrategy, input, effect, model, computed, HostBinding, } from '@angular/core';
|
|
3
|
+
import { ReactiveFormsModule, FormControl, FormGroup } from '@angular/forms';
|
|
4
|
+
import { DateTime } from 'luxon';
|
|
5
|
+
import { SelectionModel } from '@angular/cdk/collections';
|
|
6
|
+
import { BmbIconComponent } from '../bmb-icon/bmb-icon.component';
|
|
7
|
+
import { BmbCheckboxComponent } from '../bmb-checkbox/bmb-checkbox.component';
|
|
8
|
+
import { BmbInputComponent } from '../bmb-input/bmb-input.component';
|
|
9
|
+
import { BmbDateRangeComponent } from '../bmb-date-range/bmb-date-range.component';
|
|
10
|
+
import { BmbActionIconComponent } from '../bmb-action-icon/bmb-action-icon.component';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "@angular/common";
|
|
13
|
+
export class BmbTableLiteComponent {
|
|
14
|
+
// -----------------------------------------------------------------------------
|
|
15
|
+
// 🧠 CICLO DE VIDA Y EFECTOS REACTIVOS
|
|
16
|
+
// -----------------------------------------------------------------------------
|
|
17
|
+
constructor(cdr) {
|
|
18
|
+
this.cdr = cdr;
|
|
19
|
+
// -----------------------------------------------------------------------------
|
|
20
|
+
// 🔧 CONFIGURACIÓN INTERNA (no visible desde el template)
|
|
21
|
+
// -----------------------------------------------------------------------------
|
|
22
|
+
this._rawColumns = [];
|
|
23
|
+
this._rawConfig = {
|
|
24
|
+
isSelectable: false,
|
|
25
|
+
isExpandible: false,
|
|
26
|
+
isPaginable: false,
|
|
27
|
+
showActions: false,
|
|
28
|
+
};
|
|
29
|
+
// -----------------------------------------------------------------------------
|
|
30
|
+
// 📊 DATOS Y ESTADO DE LA TABLA
|
|
31
|
+
// -----------------------------------------------------------------------------
|
|
32
|
+
this.originalData = []; // Datos originales sin filtros
|
|
33
|
+
this.filteredData = []; // Datos tras aplicar filtros
|
|
34
|
+
this.pageSlice = []; // Página actual que se muestra
|
|
35
|
+
this.selection = new SelectionModel(true, []); // Selección de filas
|
|
36
|
+
// -----------------------------------------------------------------------------
|
|
37
|
+
// 🔍 FORMULARIO DE FILTROS Y BÚSQUEDA
|
|
38
|
+
// -----------------------------------------------------------------------------
|
|
39
|
+
this.filterForm = new FormGroup({}); // Controles dinámicos de filtros
|
|
40
|
+
this.searchControl = new FormControl(''); // Control de búsqueda (texto)
|
|
41
|
+
// -----------------------------------------------------------------------------
|
|
42
|
+
// 🧩 COLUMNAS Y ESTRUCTURA DE LA TABLA
|
|
43
|
+
// -----------------------------------------------------------------------------
|
|
44
|
+
this.tableColumns = []; // Columnas renderizadas en la tabla
|
|
45
|
+
// -----------------------------------------------------------------------------
|
|
46
|
+
// ⚙️ INPUTS (configuración externa del componente)
|
|
47
|
+
// -----------------------------------------------------------------------------
|
|
48
|
+
this.showSearch = input(false); // Muestra u oculta el buscador
|
|
49
|
+
this.pageSize = input(); // Tamaño de página
|
|
50
|
+
this.totalItems = input(0); // Total de elementos (server)
|
|
51
|
+
this.data = input([]); // Data recibida
|
|
52
|
+
this.columns = input([]); // Definición de columnas
|
|
53
|
+
this.config = input(); // Configuración general
|
|
54
|
+
this.truncate = input(false); // Activa truncado de texto
|
|
55
|
+
this.lang = input('es'); // Idioma ('es' | 'en')
|
|
56
|
+
this.serverSide = input(false); // Modo servidor o cliente
|
|
57
|
+
this.filtersPosition = input('top'); // Posición filtros
|
|
58
|
+
this.initialTableSelection = input([]); // Selección inicial de filas
|
|
59
|
+
this.actionTemplate = input(null); // Template de acciones
|
|
60
|
+
this.detailTemplate = input(null); // Template de detalle
|
|
61
|
+
// -----------------------------------------------------------------------------
|
|
62
|
+
// ⚡ MODELOS REACTIVOS (usando signals)
|
|
63
|
+
// -----------------------------------------------------------------------------
|
|
64
|
+
this.clearSelection = model(false); // Limpia selección desde fuera
|
|
65
|
+
this.currentPage = model(0); // Página actual
|
|
66
|
+
this.filtersVisible = model(false); // Estado visible/oculto de filtros
|
|
67
|
+
// -----------------------------------------------------------------------------
|
|
68
|
+
// 📤 OUTPUTS (eventos que emite la tabla)
|
|
69
|
+
// -----------------------------------------------------------------------------
|
|
70
|
+
this.select = new EventEmitter(); // Cambio de selección
|
|
71
|
+
this.clickedRow = new EventEmitter(); // Click en una fila
|
|
72
|
+
this.searchChange = new EventEmitter(); // Texto del buscador
|
|
73
|
+
this.filtersChange = new EventEmitter(); // Filtros aplicados
|
|
74
|
+
this.searchModeChange = new EventEmitter(); // Modo de búsqueda
|
|
75
|
+
this.pageChange = new EventEmitter(); // Cambio de página
|
|
76
|
+
// -----------------------------------------------------------------------------
|
|
77
|
+
// 🧮 PROPIEDADES COMPUTADAS
|
|
78
|
+
// -----------------------------------------------------------------------------
|
|
79
|
+
this.parsedFiltersColumns = computed(() => this.columns().filter((column) => column.isFilterable !== false));
|
|
80
|
+
// 🧩 Efecto: controla la página actual en modo servidor, asegurando que
|
|
81
|
+
// no exceda los límites (0 → lastPage)
|
|
82
|
+
effect(() => {
|
|
83
|
+
if (!this.serverSide())
|
|
84
|
+
return;
|
|
85
|
+
const last = this.lastPage();
|
|
86
|
+
if (this.currentPage() < 0) {
|
|
87
|
+
this.currentPage.set(0);
|
|
88
|
+
this.cdr.detectChanges();
|
|
89
|
+
}
|
|
90
|
+
else if (this.currentPage() > last) {
|
|
91
|
+
this.currentPage.set(last);
|
|
92
|
+
this.cdr.detectChanges();
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
// 🧩 Efecto: limpia la selección de filas si se activa `clearSelection`
|
|
96
|
+
effect(() => {
|
|
97
|
+
if (this.clearSelection()) {
|
|
98
|
+
this.selection.clear();
|
|
99
|
+
this.clearSelection.set(false);
|
|
100
|
+
this.select.emit(this.selection.selected);
|
|
101
|
+
}
|
|
102
|
+
}, { allowSignalWrites: true });
|
|
103
|
+
}
|
|
104
|
+
// 🧩 Detecta cambios en inputs reactivos (data, columns, config)
|
|
105
|
+
ngOnChanges(changes) {
|
|
106
|
+
if (changes['data'])
|
|
107
|
+
this.parseData(changes['data'].currentValue || []);
|
|
108
|
+
if (changes['columns'])
|
|
109
|
+
this.parseColumns(changes['columns'].currentValue || []);
|
|
110
|
+
if (changes['config'])
|
|
111
|
+
this.setConfig(changes['config'].currentValue || {});
|
|
112
|
+
}
|
|
113
|
+
// 🧩 Inicializa filtros y suscripciones del buscador
|
|
114
|
+
ngOnInit() {
|
|
115
|
+
this.searchControl.valueChanges.subscribe((value) => {
|
|
116
|
+
const search = (value || '').trim().toLowerCase();
|
|
117
|
+
if (this.serverSide()) {
|
|
118
|
+
this.searchModeChange.emit('server');
|
|
119
|
+
this.searchChange.emit(search);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
this.searchModeChange.emit('client');
|
|
123
|
+
this.applyFilters();
|
|
124
|
+
}
|
|
125
|
+
this.cdr.markForCheck();
|
|
126
|
+
});
|
|
127
|
+
this._rawConfig = this.config() || {};
|
|
128
|
+
this.parseData(this.data());
|
|
129
|
+
this.parseColumns(this.columns());
|
|
130
|
+
// 👇 importante: recrear filtros una vez que todo esté listo
|
|
131
|
+
setTimeout(() => {
|
|
132
|
+
this.setupDynamicFilters();
|
|
133
|
+
this.cdr.markForCheck();
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
// -----------------------------------------------------------------------------
|
|
137
|
+
// 🧩 MANEJO DE DATOS Y COLUMNAS
|
|
138
|
+
// -----------------------------------------------------------------------------
|
|
139
|
+
// 🔹 Normaliza y aplica los datos iniciales según el modo (server/client)
|
|
140
|
+
parseData(data) {
|
|
141
|
+
this.originalData = Array.isArray(data) ? data : [];
|
|
142
|
+
if (!this.serverSide()) {
|
|
143
|
+
this.applyFilters();
|
|
144
|
+
this.applyClientPagination();
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
this.filteredData = [...this.originalData];
|
|
148
|
+
this.pageSlice = [...this.filteredData];
|
|
149
|
+
}
|
|
150
|
+
// 🧩 Aplica selección inicial si está configurada
|
|
151
|
+
const selectedRows = this.initialTableSelection() ?? [];
|
|
152
|
+
if (selectedRows.length && this.filteredData.length) {
|
|
153
|
+
this.selection.clear();
|
|
154
|
+
selectedRows.forEach((idx) => {
|
|
155
|
+
if (this.filteredData[idx]) {
|
|
156
|
+
this.selection.select(this.filteredData[idx]);
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// 🔹 Estandariza las columnas y genera sus filtros dinámicos
|
|
162
|
+
parseColumns(columns) {
|
|
163
|
+
const normalized = (columns || []).map((col) => ({
|
|
164
|
+
type: 'string',
|
|
165
|
+
labelEn: col.labelEn,
|
|
166
|
+
...col,
|
|
167
|
+
}));
|
|
168
|
+
this._rawColumns = normalized;
|
|
169
|
+
this.applyColumnsAndConfig(normalized);
|
|
170
|
+
this.setupDynamicFilters();
|
|
171
|
+
this.applyFilters();
|
|
172
|
+
this.applyClientPagination();
|
|
173
|
+
}
|
|
174
|
+
// 🔹 Fusiona la configuración por defecto con la recibida vía input
|
|
175
|
+
setConfig(cfg) {
|
|
176
|
+
this.tableConfig = { ...this._rawConfig, ...cfg };
|
|
177
|
+
this.applyColumnsAndConfig(this._rawColumns);
|
|
178
|
+
}
|
|
179
|
+
// 🔹 Aplica columnas visibles y configura las especiales (select/expand/actions)
|
|
180
|
+
applyColumnsAndConfig(newColumns = []) {
|
|
181
|
+
if (!newColumns.length)
|
|
182
|
+
return;
|
|
183
|
+
const displayColumns = [...newColumns.map((c) => c.def)];
|
|
184
|
+
if (this._rawConfig.isExpandible)
|
|
185
|
+
displayColumns.unshift('expand');
|
|
186
|
+
if (this._rawConfig.isSelectable)
|
|
187
|
+
displayColumns.unshift('select');
|
|
188
|
+
if (this._rawConfig.showActions)
|
|
189
|
+
displayColumns.push('actions');
|
|
190
|
+
this.tableColumns = newColumns;
|
|
191
|
+
this.tableConfig = this._rawConfig;
|
|
192
|
+
}
|
|
193
|
+
// -----------------------------------------------------------------------------
|
|
194
|
+
// 🎛️ FILTROS Y BÚSQUEDA
|
|
195
|
+
// -----------------------------------------------------------------------------
|
|
196
|
+
// 🔹 Crea dinámicamente los controles del formulario de filtros
|
|
197
|
+
setupDynamicFilters() {
|
|
198
|
+
Object.keys(this.filterForm.controls).forEach((k) => this.filterForm.removeControl(k));
|
|
199
|
+
this._rawColumns.forEach((column) => {
|
|
200
|
+
const key = column.dataKey;
|
|
201
|
+
switch (column.type) {
|
|
202
|
+
case 'number':
|
|
203
|
+
this.filterForm.addControl(`${key}_min`, new FormControl());
|
|
204
|
+
this.filterForm.addControl(`${key}_max`, new FormControl());
|
|
205
|
+
break;
|
|
206
|
+
case 'date':
|
|
207
|
+
this.filterForm.addControl(`${key}_from`, new FormControl());
|
|
208
|
+
this.filterForm.addControl(`${key}_to`, new FormControl());
|
|
209
|
+
break;
|
|
210
|
+
default:
|
|
211
|
+
this.filterForm.addControl(`${key}_contains`, new FormControl(''));
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
this.filterForm.valueChanges.subscribe(() => {
|
|
215
|
+
if (this.serverSide()) {
|
|
216
|
+
this.filtersChange.emit(this.filterForm.value);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
this.applyFilters();
|
|
220
|
+
}
|
|
221
|
+
this.cdr.markForCheck();
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
// 🔹 Aplica los filtros, búsqueda y paginación según el modo activo
|
|
225
|
+
applyFilters() {
|
|
226
|
+
const values = this.filterForm.value;
|
|
227
|
+
if (this.serverSide()) {
|
|
228
|
+
this.filtersChange.emit(values);
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
if (!this._rawColumns || this._rawColumns.length === 0) {
|
|
232
|
+
this.filteredData = [...this.originalData];
|
|
233
|
+
this.applyClientPagination();
|
|
234
|
+
this.cdr.markForCheck();
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
const searchText = (this.searchControl.value || '').toLowerCase().trim();
|
|
238
|
+
let filtered = [...this.originalData];
|
|
239
|
+
// 🔹 Aplica filtros numéricos, de fecha y texto
|
|
240
|
+
this._rawColumns.forEach((column) => {
|
|
241
|
+
const key = column.dataKey;
|
|
242
|
+
const type = column.type || 'string';
|
|
243
|
+
if (type === 'number') {
|
|
244
|
+
const rawMin = values[`${key}_min`];
|
|
245
|
+
const rawMax = values[`${key}_max`];
|
|
246
|
+
const min = rawMin === null || rawMin === undefined || rawMin === ''
|
|
247
|
+
? null
|
|
248
|
+
: Number(rawMin);
|
|
249
|
+
const max = rawMax === null || rawMax === undefined || rawMax === ''
|
|
250
|
+
? null
|
|
251
|
+
: Number(rawMax);
|
|
252
|
+
filtered = filtered.filter((row) => {
|
|
253
|
+
const v = Number(row[key]);
|
|
254
|
+
if (Number.isNaN(v))
|
|
255
|
+
return false;
|
|
256
|
+
return (min === null || v >= min) && (max === null || v <= max);
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
if (type === 'date') {
|
|
260
|
+
const dateFormat = column.dateFormat || 'yyyy-MM-dd';
|
|
261
|
+
const rawFrom = values[`${key}_from`];
|
|
262
|
+
const rawTo = values[`${key}_to`];
|
|
263
|
+
const from = rawFrom
|
|
264
|
+
? DateTime.fromFormat(String(rawFrom), dateFormat)
|
|
265
|
+
: null;
|
|
266
|
+
const to = rawTo
|
|
267
|
+
? DateTime.fromFormat(String(rawTo), dateFormat)
|
|
268
|
+
: null;
|
|
269
|
+
filtered = filtered.filter((row) => {
|
|
270
|
+
const raw = row[key];
|
|
271
|
+
if (!raw)
|
|
272
|
+
return true;
|
|
273
|
+
const dateVal = DateTime.fromFormat(String(raw), dateFormat);
|
|
274
|
+
if (!dateVal.isValid)
|
|
275
|
+
return true;
|
|
276
|
+
const gte = !from || (from.isValid && dateVal >= from);
|
|
277
|
+
const lte = !to || (to.isValid && dateVal <= to);
|
|
278
|
+
return gte && lte;
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
if (type === 'string') {
|
|
282
|
+
const contains = (values[`${key}_contains`] || '').toLowerCase().trim();
|
|
283
|
+
if (contains) {
|
|
284
|
+
filtered = filtered.filter((row) => (row[key] ?? '').toString().toLowerCase().includes(contains));
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
// 🔹 Aplica búsqueda global
|
|
289
|
+
if (searchText) {
|
|
290
|
+
filtered = filtered.filter((row) => this._rawColumns.some((col) => ((row[col.dataKey] ?? '') + '').toLowerCase().includes(searchText)));
|
|
291
|
+
}
|
|
292
|
+
this.filteredData = filtered;
|
|
293
|
+
this.applyClientPagination();
|
|
294
|
+
this.cdr.markForCheck();
|
|
295
|
+
}
|
|
296
|
+
// -----------------------------------------------------------------------------
|
|
297
|
+
// 📄 PAGINACIÓN (CLIENTE Y SERVIDOR)
|
|
298
|
+
// -----------------------------------------------------------------------------
|
|
299
|
+
// 🔹 Determina el tamaño actual de página
|
|
300
|
+
get resolvedPageSize() {
|
|
301
|
+
return this.pageSize() ?? 10;
|
|
302
|
+
}
|
|
303
|
+
// 🔹 Aplica la paginación del lado del cliente
|
|
304
|
+
applyClientPagination() {
|
|
305
|
+
if (this.serverSide() || !this.tableConfig?.isPaginable) {
|
|
306
|
+
this.pageSlice = [...this.filteredData];
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
const start = this.currentPage() * this.resolvedPageSize;
|
|
310
|
+
const end = start + this.resolvedPageSize;
|
|
311
|
+
this.pageSlice = this.filteredData.slice(start, end);
|
|
312
|
+
}
|
|
313
|
+
// 🔹 Evento de cambio de página (client/server)
|
|
314
|
+
onPageEvent(pageIndex) {
|
|
315
|
+
this.currentPage.set(pageIndex);
|
|
316
|
+
if (this.serverSide()) {
|
|
317
|
+
this.pageChange.emit({
|
|
318
|
+
pageIndex: pageIndex + 1,
|
|
319
|
+
pageSize: this.resolvedPageSize,
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
this.applyClientPagination();
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
// 🔹 Helpers de control de página
|
|
327
|
+
isFirstPage() {
|
|
328
|
+
return this.currentPage() <= 0;
|
|
329
|
+
}
|
|
330
|
+
isLastPage() {
|
|
331
|
+
return this.currentPage() >= this.lastPage();
|
|
332
|
+
}
|
|
333
|
+
isSinglePage() {
|
|
334
|
+
const totalItems = this.serverSide()
|
|
335
|
+
? this.totalItems() ?? 0
|
|
336
|
+
: this.filteredData.length;
|
|
337
|
+
return totalItems <= this.resolvedPageSize;
|
|
338
|
+
}
|
|
339
|
+
// 🔹 Calcula la última página disponible
|
|
340
|
+
lastPage() {
|
|
341
|
+
const total = this.serverSide()
|
|
342
|
+
? this.totalItems() ?? 0
|
|
343
|
+
: this.filteredData.length;
|
|
344
|
+
const size = this.resolvedPageSize;
|
|
345
|
+
const result = size === 0 ? 0 : Math.ceil(total / size) - 1;
|
|
346
|
+
return Math.max(0, result);
|
|
347
|
+
}
|
|
348
|
+
// 🔹 Navegación entre páginas
|
|
349
|
+
goToFirstPage() {
|
|
350
|
+
if (this.currentPage() > 0)
|
|
351
|
+
this.onPageEvent(0);
|
|
352
|
+
}
|
|
353
|
+
goToPreviousPage() {
|
|
354
|
+
if (this.currentPage() > 0)
|
|
355
|
+
this.onPageEvent(this.currentPage() - 1);
|
|
356
|
+
}
|
|
357
|
+
goToNextPage() {
|
|
358
|
+
if (this.currentPage() < this.lastPage())
|
|
359
|
+
this.onPageEvent(this.currentPage() + 1);
|
|
360
|
+
}
|
|
361
|
+
goToLastPage() {
|
|
362
|
+
this.onPageEvent(this.lastPage());
|
|
363
|
+
}
|
|
364
|
+
// 🔹 Texto descriptivo del rango paginado (ej. "1 - 5 de 20")
|
|
365
|
+
getPaginationText() {
|
|
366
|
+
const total = this.serverSide()
|
|
367
|
+
? this.totalItems?.() ?? 0
|
|
368
|
+
: this.filteredData.length;
|
|
369
|
+
const pageIndex = this.currentPage?.() ?? 0;
|
|
370
|
+
const pageSize = this.resolvedPageSize;
|
|
371
|
+
if (total === 0 || pageSize === 0)
|
|
372
|
+
return `0 de ${total}`;
|
|
373
|
+
const startIndex = pageIndex * pageSize + 1;
|
|
374
|
+
const endIndex = Math.min((pageIndex + 1) * pageSize, total);
|
|
375
|
+
return `${startIndex} - ${endIndex} de ${total}`;
|
|
376
|
+
}
|
|
377
|
+
// -----------------------------------------------------------------------------
|
|
378
|
+
// 🖱️ INTERACCIÓN DE FILAS Y SELECCIÓN
|
|
379
|
+
// -----------------------------------------------------------------------------
|
|
380
|
+
// 🔹 Emite el evento de click en fila
|
|
381
|
+
onSelectRow(row) {
|
|
382
|
+
this.clickedRow.emit(row);
|
|
383
|
+
}
|
|
384
|
+
// 🔹 Emite el evento cuando cambia la selección
|
|
385
|
+
onSelect() {
|
|
386
|
+
console.log(this.selection.selected);
|
|
387
|
+
this.select.emit(this.selection.selected);
|
|
388
|
+
}
|
|
389
|
+
// 🔹 Comprueba si todas las filas visibles están seleccionadas
|
|
390
|
+
isAllSelected() {
|
|
391
|
+
const numSelected = this.selection.selected.length;
|
|
392
|
+
const numRows = this.pageSlice.length;
|
|
393
|
+
return numRows > 0 && numSelected === numRows;
|
|
394
|
+
}
|
|
395
|
+
// 🔹 Alterna la selección de todas las filas visibles
|
|
396
|
+
toggleAllRows() {
|
|
397
|
+
if (this.isAllSelected()) {
|
|
398
|
+
this.selection.clear();
|
|
399
|
+
this.onSelect();
|
|
400
|
+
return;
|
|
401
|
+
}
|
|
402
|
+
this.selection.select(...this.pageSlice);
|
|
403
|
+
this.onSelect();
|
|
404
|
+
}
|
|
405
|
+
// 🔹 Etiqueta accesible del checkbox (usada por ARIA)
|
|
406
|
+
checkboxLabel(row) {
|
|
407
|
+
if (!row)
|
|
408
|
+
return `${this.isAllSelected() ? 'deselect' : 'select'} all`;
|
|
409
|
+
const idx = this.pageSlice.indexOf(row);
|
|
410
|
+
return `${this.selection.isSelected(row) ? 'deselect' : 'select'} row ${idx + 1}`;
|
|
411
|
+
}
|
|
412
|
+
// -----------------------------------------------------------------------------
|
|
413
|
+
// 🎨 UTILIDADES DE RENDERIZADO Y CLASES
|
|
414
|
+
// -----------------------------------------------------------------------------
|
|
415
|
+
isEven(rowIndex) {
|
|
416
|
+
return rowIndex % 2 === 0;
|
|
417
|
+
}
|
|
418
|
+
isOdd(rowIndex) {
|
|
419
|
+
return !this.isEven(rowIndex);
|
|
420
|
+
}
|
|
421
|
+
isTemplateRef(value) {
|
|
422
|
+
return value instanceof TemplateRef;
|
|
423
|
+
}
|
|
424
|
+
// 🔹 Define clases dinámicas para celdas de datos
|
|
425
|
+
getCellClasses(row, columnKey, index) {
|
|
426
|
+
const semanticType = row[columnKey + 'Type'];
|
|
427
|
+
return {
|
|
428
|
+
'bmb_table_lite-sticky': index === 0,
|
|
429
|
+
truncated: this.truncate(),
|
|
430
|
+
['bmb_table_lite-' + semanticType]: !!semanticType,
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
// 🔹 Define clases dinámicas para encabezados
|
|
434
|
+
getHeaderCellClasses(i) {
|
|
435
|
+
return {
|
|
436
|
+
'bmb_table_lite-sticky': i === 0,
|
|
437
|
+
truncated: this.truncate(),
|
|
438
|
+
};
|
|
439
|
+
}
|
|
440
|
+
// 🔹 Determina clases principales del contenedor según posición de filtros
|
|
441
|
+
getTableClasses() {
|
|
442
|
+
const classList = ['bmb_table_lite'];
|
|
443
|
+
switch (this.filtersPosition()) {
|
|
444
|
+
case 'right':
|
|
445
|
+
classList.push('bmb_table_lite-filters-right');
|
|
446
|
+
break;
|
|
447
|
+
case 'bottom':
|
|
448
|
+
classList.push('bmb_table_lite-filters-bottom');
|
|
449
|
+
break;
|
|
450
|
+
case 'left':
|
|
451
|
+
classList.push('bmb_table_lite-filters-left');
|
|
452
|
+
break;
|
|
453
|
+
default:
|
|
454
|
+
classList.push('bmb_table_lite-filters-top');
|
|
455
|
+
}
|
|
456
|
+
return classList;
|
|
457
|
+
}
|
|
458
|
+
// 🔹 Obtiene un control del formulario de filtros
|
|
459
|
+
getFormControl(name) {
|
|
460
|
+
return this.filterForm.get(name);
|
|
461
|
+
}
|
|
462
|
+
// 🔹 Alterna la visibilidad del panel de filtros
|
|
463
|
+
toggleFilters() {
|
|
464
|
+
this.filtersVisible.set(!this.filtersVisible());
|
|
465
|
+
}
|
|
466
|
+
// -----------------------------------------------------------------------------
|
|
467
|
+
// 🧮 VARIABLES CSS Y BINDINGS DINÁMICOS
|
|
468
|
+
// -----------------------------------------------------------------------------
|
|
469
|
+
get colCount() {
|
|
470
|
+
return this.tableColumns.length;
|
|
471
|
+
}
|
|
472
|
+
get colCheckbox() {
|
|
473
|
+
return this.tableConfig?.isSelectable ? '62px' : '0px';
|
|
474
|
+
}
|
|
475
|
+
get colExpand() {
|
|
476
|
+
return this.tableConfig?.isExpandible ? '40px' : '0px';
|
|
477
|
+
}
|
|
478
|
+
get colActions() {
|
|
479
|
+
return this.tableConfig?.showActions ? '80px' : '0px';
|
|
480
|
+
}
|
|
481
|
+
get hasCheckbox() {
|
|
482
|
+
return this.tableConfig?.isSelectable ? 1 : 0;
|
|
483
|
+
}
|
|
484
|
+
get hasExpand() {
|
|
485
|
+
return this.tableConfig?.isExpandible ? 1 : 0;
|
|
486
|
+
}
|
|
487
|
+
get hasActions() {
|
|
488
|
+
return this.tableConfig?.showActions ? 1 : 0;
|
|
489
|
+
}
|
|
490
|
+
// 🔹 Expone las variables CSS usadas para el grid dinámico
|
|
491
|
+
get cssVars() {
|
|
492
|
+
const hasSelect = this.tableConfig?.isSelectable;
|
|
493
|
+
const hasExpand = this.tableConfig?.isExpandible;
|
|
494
|
+
const hasActions = this.tableConfig?.showActions;
|
|
495
|
+
const columnTemplate = `repeat(${this.tableColumns.length}, minmax(120px, 1fr))`;
|
|
496
|
+
const parts = [
|
|
497
|
+
hasSelect ? 'var(--col-checkbox, 62px)' : '',
|
|
498
|
+
hasExpand ? 'var(--col-expand, 40px)' : '',
|
|
499
|
+
columnTemplate,
|
|
500
|
+
hasActions ? 'var(--col-actions, 80px)' : '',
|
|
501
|
+
].filter(Boolean);
|
|
502
|
+
return {
|
|
503
|
+
'--col-count': this.tableColumns.length,
|
|
504
|
+
'--col-checkbox': hasSelect ? '62px' : '0px',
|
|
505
|
+
'--col-expand': hasExpand ? '40px' : '0px',
|
|
506
|
+
'--col-actions': hasActions ? '80px' : '0px',
|
|
507
|
+
'--grid-template': parts.join(' '),
|
|
508
|
+
};
|
|
509
|
+
}
|
|
510
|
+
trackByColumn(column) {
|
|
511
|
+
return column.def || column.label;
|
|
512
|
+
}
|
|
513
|
+
trackByRow(row) {
|
|
514
|
+
return row.id || row.sociedad;
|
|
515
|
+
}
|
|
516
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BmbTableLiteComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
517
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: BmbTableLiteComponent, isStandalone: true, selector: "bmb-table-lite", inputs: { showSearch: { classPropertyName: "showSearch", publicName: "showSearch", 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 }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, truncate: { classPropertyName: "truncate", publicName: "truncate", isSignal: true, isRequired: false, transformFunction: null }, lang: { classPropertyName: "lang", publicName: "lang", isSignal: true, isRequired: false, transformFunction: null }, serverSide: { classPropertyName: "serverSide", publicName: "serverSide", isSignal: true, isRequired: false, transformFunction: null }, filtersPosition: { classPropertyName: "filtersPosition", publicName: "filtersPosition", isSignal: true, isRequired: false, transformFunction: null }, initialTableSelection: { classPropertyName: "initialTableSelection", publicName: "initialTableSelection", isSignal: true, isRequired: false, transformFunction: null }, actionTemplate: { classPropertyName: "actionTemplate", publicName: "actionTemplate", isSignal: true, isRequired: false, transformFunction: null }, detailTemplate: { classPropertyName: "detailTemplate", publicName: "detailTemplate", isSignal: true, isRequired: false, transformFunction: null }, clearSelection: { classPropertyName: "clearSelection", publicName: "clearSelection", 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 } }, outputs: { clearSelection: "clearSelectionChange", currentPage: "currentPageChange", filtersVisible: "filtersVisibleChange", select: "select", clickedRow: "clickedRow", searchChange: "searchChange", filtersChange: "filtersChange", searchModeChange: "searchModeChange", pageChange: "pageChange" }, host: { properties: { "style.--col-count": "this.colCount", "style.--col-checkbox": "this.colCheckbox", "style.--col-expand": "this.colExpand", "style.--col-actions": "this.colActions", "style.--has-checkbox": "this.hasCheckbox", "style.--has-expand": "this.hasExpand", "style.--has-actions": "this.hasActions" } }, usesOnChanges: true, ngImport: i0, template: "<div [ngClass]=\"getTableClasses()\" [ngStyle]=\"cssVars\">\n @if (showSearch() || filtersVisible()) {\n <header class=\"bmb_table_lite-header\">\n @if (showSearch()) {\n <section class=\"bmb_table_lite-search\">\n <bmb-input\n class=\"bmb_table_lite-input\"\n [type]=\"'text'\"\n [placeholder]=\"'Buscar'\"\n [disabled]=\"false\"\n [icon]=\"'search'\"\n [appearance]=\"'normal'\"\n [control]=\"searchControl\"\n ></bmb-input>\n <bmb-action-icon\n [idElement]=\"''\"\n [icon]=\"'filter_list'\"\n [iconSize]=\"24\"\n (buttonClick)=\"toggleFilters()\"\n ></bmb-action-icon>\n </section>\n }\n <div class=\"bmb_table_lite-filter\">\n @if (filtersVisible()) {\n @for (column of parsedFiltersColumns(); track $index) {\n <section class=\"bmb_table_lite-filter-item\">\n @switch (column.type) {\n @case ('number') {\n <div class=\"bmb_table_lite-filter-item-number\">\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 @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 @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\n <div class=\"bmb_table_lite-container\">\n <section class=\"bmb_table_lite-container-table\">\n <div class=\"bmb_table_lite-row bmb_table_lite-row--header\">\n @if (tableConfig?.isSelectable) {\n <div class=\"bmb_table_lite-th bmb_table_lite-checkbox\">\n <bmb-checkbox\n (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\n [ariaLabel]=\"checkboxLabel()\"\n [disabled]=\"false\"\n />\n </div>\n }\n\n @if (tableConfig?.isExpandible) {\n <div class=\"bmb_table_lite-th bmb_table_lite-expand\"> </div>\n }\n\n @for (\n column of tableColumns;\n track trackByColumn(column);\n let i = $index\n ) {\n <div\n class=\"bmb_table_lite-th\"\n [ngClass]=\"getHeaderCellClasses(i)\"\n [title]=\"\n lang() === 'es' ? column.label : column.labelEn || column.label\n \"\n >\n <ng-container *ngIf=\"column.icon\">\n <bmb-icon [icon]=\"column.icon\"></bmb-icon>\n </ng-container>\n\n @if (column.htmlLabel) {\n <ng-template\n [ngTemplateOutlet]=\"column.htmlLabel\"\n [ngTemplateOutletContext]=\"{ column: column, index: i }\"\n ></ng-template>\n } @else {\n <span class=\"bmb_table_lite-th-text\">\n {{\n lang() === 'es'\n ? column.label\n : column.labelEn || column.label\n }}\n </span>\n }\n </div>\n }\n\n @if (tableConfig?.showActions) {\n <div class=\"bmb_table_lite-th bmb_table_lite-actions\"></div>\n }\n </div>\n\n @for (row of pageSlice; track trackByRow(row); let rIndex = $index) {\n <div\n class=\"bmb_table_lite-row\"\n (click)=\"onSelectRow(row)\"\n [ngClass]=\"{\n 'bmb_table_lite-even': isEven(rIndex),\n 'bmb_table_lite-odd': isOdd(rIndex),\n 'bmb_table_lite-expandible': expandedElement === row\n }\"\n >\n @if (tableConfig?.isSelectable) {\n <div class=\"bmb_table_lite-td bmb_table_lite-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 </div>\n }\n\n @if (tableConfig?.isExpandible) {\n <div class=\"bmb_table_lite-td bmb_table_lite-expand\">\n <button\n type=\"button\"\n class=\"bmb_btn-icon\"\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 ></bmb-icon>\n </button>\n </div>\n }\n\n @for (\n column of tableColumns;\n track trackByColumn(column);\n let i = $index\n ) {\n <div\n class=\"bmb_table_lite-td\"\n [ngClass]=\"getCellClasses(row, column.dataKey, i)\"\n [title]=\"row[column.dataKey]?.propertyName || row[column.dataKey]\"\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 <span>\n {{ row[column.dataKey]?.propertyName || row[column.dataKey] }}\n </span>\n }\n </div>\n }\n\n @if (tableConfig?.showActions) {\n <div class=\"bmb_table_lite-td bmb_table_lite-actions\">\n @if (\n tableColumns.length &&\n tableColumns[tableColumns.length - 1].templateActions\n ) {\n <ng-template\n [ngTemplateOutlet]=\"\n tableColumns[tableColumns.length - 1].templateActions!\n \"\n [ngTemplateOutletContext]=\"{ row: row }\"\n ></ng-template>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"actionTemplate()!\"\n [ngTemplateOutletContext]=\"{ row: row }\"\n ></ng-template>\n }\n </div>\n }\n </div>\n\n @if (tableConfig?.isExpandible) {\n <div\n class=\"bmb_table_lite-row bmb_table_lite-details\"\n [class.bmb_table_lite-expanded]=\"expandedElement === row\"\n >\n <div class=\"bmb_table_lite-detail\" *ngIf=\"expandedElement === row\">\n <ng-container\n *ngTemplateOutlet=\"detailTemplate(); context: { row: row }\"\n ></ng-container>\n </div>\n </div>\n }\n }\n </section>\n\n @if (tableConfig?.isPaginable) {\n <div class=\"bmb_table_lite-paginator\">\n <span class=\"bmb_table_lite-paginator-text\">\n {{ getPaginationText() }}\n </span>\n\n <button\n class=\"bmb_table_lite-paginator-btn\"\n [disabled]=\"isFirstPage() || isSinglePage()\"\n (click)=\"goToFirstPage()\"\n >\n <bmb-icon\n icon=\"keyboard_double_arrow_left\"\n class=\"bmb_table_lite-paginator-icon\"\n />\n </button>\n\n <button\n class=\"bmb_table_lite-paginator-btn\"\n [disabled]=\"isFirstPage() || isSinglePage()\"\n (click)=\"goToPreviousPage()\"\n >\n <bmb-icon\n icon=\"keyboard_arrow_left\"\n class=\"bmb_table_lite-paginator-icon\"\n />\n </button>\n\n <button\n class=\"bmb_table_lite-paginator-btn\"\n [disabled]=\"isLastPage() || isSinglePage()\"\n (click)=\"goToNextPage()\"\n >\n <bmb-icon\n icon=\"keyboard_arrow_right\"\n class=\"bmb_table_lite-paginator-icon\"\n />\n </button>\n\n <button\n class=\"bmb_table_lite-paginator-btn\"\n [disabled]=\"isLastPage() || isSinglePage()\"\n (click)=\"goToLastPage()\"\n >\n <bmb-icon\n icon=\"keyboard_double_arrow_right\"\n class=\"bmb_table_lite-paginator-icon\"\n />\n </button>\n </div>\n }\n </div>\n</div>\n", styles: ["@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-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_lite{background:var(--containers-modal);box-shadow:var(--bmb-box-shadow-3);box-sizing:border-box;container-type:inline-size;padding:1.5rem 1rem;width:100%}.bmb_table_lite-filters-top,.bmb_table_lite-filters-left{display:flex;flex-flow:column;gap:1rem;overflow:auto}.bmb_table_lite-filters-bottom,.bmb_table_lite-filters-right{align-items:flex-start;display:flex;flex-flow:column;gap:1rem;overflow:auto;flex-direction:column-reverse}@media (min-width: 62.5625rem){.bmb_table_lite-filters-top .bmb_table_lite-header,.bmb_table_lite-filters-bottom .bmb_table_lite-header{height:30%;width:100%}.bmb_table_lite-filters-top .bmb_table_lite-container,.bmb_table_lite-filters-bottom .bmb_table_lite-container{flex:1}}@media (min-width: 62.5625rem){.bmb_table_lite-filters-left,.bmb_table_lite-filters-right{flex-flow:row}.bmb_table_lite-filters-left .bmb_table_lite-header,.bmb_table_lite-filters-right .bmb_table_lite-header{width:30%}.bmb_table_lite-filters-left .bmb_table_lite-container,.bmb_table_lite-filters-right .bmb_table_lite-container{flex:1}}@media (min-width: 62.5625rem){.bmb_table_lite-filters-right{flex-flow:row-reverse}}.bmb_table_lite-header{container-type:inline-size;max-height:100%;overflow:auto}.bmb_table_lite-header .bmb_table_lite-filter{display:flex;flex-flow:column;gap:1rem;overflow:auto;width:100%}@container (min-width: 37.5rem){.bmb_table_lite-header .bmb_table_lite-filter{flex-flow:row;flex-wrap:wrap}}.bmb_table_lite-filter-item{width:100%}@container (min-width: 37.5rem){.bmb_table_lite-filter-item{width:calc(50% - .5rem)}}.bmb_table_lite-filter-item-number{display:flex;flex-flow:row}@media (max-width: 43.6875rem){.bmb_table_lite-filter-item-number{flex-flow:column}}.bmb_table_lite-filter-item-number>*{flex:1}.bmb_table_lite-filter-item-number bmb-input:first-child .bmb_field-actions{right:2.5rem}.bmb_table_lite-filter-item-number bmb-input:first-child .bmb_field-wrapper:after{border-top:.125rem solid;content:\"\";display:inline-block;height:0;margin:0 .625rem;width:1rem}@media (max-width: 43.6875rem){.bmb_table_lite-filter-item-number bmb-input:first-child .bmb_field-wrapper:after{display:none}}.bmb_table_lite-search{align-items:center;display:flex;gap:1rem}.bmb_table_lite-input{flex:1}.bmb_table_lite-filters{width:100%}.bmb_table_lite-container{display:flex;flex-direction:column;height:100%;overflow:hidden;position:relative;width:100%}.bmb_table_lite-container-table{display:block;overflow-x:auto;overflow-y:visible;position:relative;width:100%}.bmb_table_lite-content{width:100%}.bmb_table_lite-row{align-items:stretch;border-bottom:1px dashed var(--general_contrasts-25);display:grid;grid-template-columns:var(--grid-template);min-height:2.875rem;padding-inline:.5rem;position:relative;width:100%;isolation:isolate}@media (max-width: 47.9375rem){.bmb_table_lite-row{width:max-content;min-width:100%}}.bmb_table_lite-row--header{background-color:var(--containers-modal);border-bottom:0;color:RGBA(var(--color-charade-500));text-transform:uppercase;font-family:Poppins-Regular,sans-serif;font-size:.875rem}.bmb_table_lite-th,.bmb_table_lite-td{align-items:center;display:flex;gap:.375rem;min-width:0;overflow:hidden;padding:0 .5rem;position:relative}@media (max-width: 47.9375rem){.bmb_table_lite-th,.bmb_table_lite-td{max-width:7.5rem}}@media (max-width: 47.9375rem){.bmb_table_lite-th.truncated,.bmb_table_lite-td.truncated{max-width:6.25rem;min-width:5rem;text-overflow:ellipsis;white-space:nowrap}.bmb_table_lite-th.truncated>*,.bmb_table_lite-td.truncated>*{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bmb_table_lite-th.truncated bmb-icon,.bmb_table_lite-th.truncated button,.bmb_table_lite-td.truncated bmb-icon,.bmb_table_lite-td.truncated button{flex:0 0 auto;margin-right:.25rem}}.bmb_table_lite-th.bmb_table_lite-checkbox,.bmb_table_lite-td.bmb_table_lite-checkbox{background:inherit;left:0;padding-right:0;position:sticky;text-align:center;width:3.875rem;z-index:2}.bmb_table_lite-th.bmb_table_lite-expand,.bmb_table_lite-td.bmb_table_lite-expand{background:inherit;left:var(--col-checkbox, 0px);position:sticky;width:2.5rem;z-index:2}@supports (left: max(0px)){.bmb_table_lite-th.bmb_table_lite-expand,.bmb_table_lite-td.bmb_table_lite-expand{left:max(var(--col-checkbox, 0px),0px)}}.bmb_table_lite-th.bmb_table_lite-sticky,.bmb_table_lite-td.bmb_table_lite-sticky{background:inherit;border-right:.0625rem solid var(--buttons-inactive-step);position:sticky;z-index:2;left:calc(var(--col-checkbox, 0px) * var(--has-checkbox) + var(--col-expand, 0px) * var(--has-expand))}@supports (left: max(0px)){.bmb_table_lite-th.bmb_table_lite-sticky,.bmb_table_lite-td.bmb_table_lite-sticky{left:max(var(--col-checkbox, 0px) * var(--has-checkbox) + var(--col-expand, 0px) * var(--has-expand),0px)}}.bmb_table_lite-th.bmb_table_lite-actions,.bmb_table_lite-td.bmb_table_lite-actions{background:inherit;border-left:.0625rem solid var(--buttons-inactive-step);color:var(--color-table-90);position:sticky;right:0;z-index:2}.bmb_table_lite-th button,.bmb_table_lite-td button{align-items:center;background:transparent;border:0;color:var(--color-table-90);cursor:pointer;display:flex;padding:0}.bmb_table_lite-row>.bmb_table_lite-td{font-family:Poppins-Regular,sans-serif;font-size:.875rem}.bmb_table_lite-row>.bmb_table_lite-td.bmb_table_lite-actions .action-container{display:flex}.bmb_table_lite-row>.bmb_table_lite-td.bmb_table_lite-actions .action-container bmb-icon{font-size:1.125rem}.bmb_table_lite-row>.bmb_table_lite-td .bmb_btn-icon bmb-icon{font-size:1.5rem}.bmb_table_lite-even{background-color:var(--containers-modal);color:var(--menu_select-label-menu-inactive)}.bmb_table_lite-even.bmb_table_lite-expandible{background-color:var(--menu_select-on-surface-hovered-w-checkbox)}.bmb_table_lite-odd{background-color:var(--general_contrasts-15);color:var(--vertical-step-active-color)}.bmb_table_lite-odd.bmb_table_lite-expandible{background-color:var(--menu_select-on-surface-hovered-w-checkbox)}.bmb_table_lite-details{background-color:var(--menu_select-on-surface-hovered-w-checkbox);height:auto}.bmb_table_lite-details:empty{display:none}.bmb_table_lite-details.bmb_table_lite-expanded{border-bottom:.0625rem dashed var(--general_contrasts-25)}.bmb_table_lite-details.bmb_table_lite-expanded .bmb_table_lite-detail{grid-column:1/-1}.bmb_table_lite-details>.bmb_table_lite-td{border:0;padding:0 1rem}.bmb_table_lite-detail{color:var(--general_contrasts-75);display:flex;overflow:hidden}.bmb_table_lite-detail>bmb-table-lite{width:100%}.bmb_table_lite-paginator{align-items:center;bottom:0;display:flex;height:3rem;justify-content:flex-end;right:0;z-index:10}.bmb_table_lite-paginator-text{color:var(--general_contrasts-75);margin-right:2rem;font-family:Poppins-Regular,sans-serif;font-size:.75rem}.bmb_table_lite-paginator-btn{align-items:center;background:transparent;border:0;color:var(--color-table-btn-900);cursor:pointer;display:inline-flex;height:3rem;justify-content:center;padding:0;width:3rem}.bmb_table_lite-paginator-btn[disabled]{color:var(--buttons-inactive-step);cursor:not-allowed}.bmb_table_lite-paginator-icon{font-size:1.5rem}.bmb_table_lite bmb-checkbox{display:block;height:1.5rem}.bmb_table_lite-success{color:var(--semantic-success)}.bmb_table_lite-error{color:var(--semantic-error)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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: "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: "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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
518
|
+
}
|
|
519
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BmbTableLiteComponent, decorators: [{
|
|
520
|
+
type: Component,
|
|
521
|
+
args: [{ selector: 'bmb-table-lite', standalone: true, imports: [
|
|
522
|
+
CommonModule,
|
|
523
|
+
ReactiveFormsModule,
|
|
524
|
+
BmbIconComponent,
|
|
525
|
+
BmbCheckboxComponent,
|
|
526
|
+
BmbInputComponent,
|
|
527
|
+
BmbDateRangeComponent,
|
|
528
|
+
BmbActionIconComponent,
|
|
529
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div [ngClass]=\"getTableClasses()\" [ngStyle]=\"cssVars\">\n @if (showSearch() || filtersVisible()) {\n <header class=\"bmb_table_lite-header\">\n @if (showSearch()) {\n <section class=\"bmb_table_lite-search\">\n <bmb-input\n class=\"bmb_table_lite-input\"\n [type]=\"'text'\"\n [placeholder]=\"'Buscar'\"\n [disabled]=\"false\"\n [icon]=\"'search'\"\n [appearance]=\"'normal'\"\n [control]=\"searchControl\"\n ></bmb-input>\n <bmb-action-icon\n [idElement]=\"''\"\n [icon]=\"'filter_list'\"\n [iconSize]=\"24\"\n (buttonClick)=\"toggleFilters()\"\n ></bmb-action-icon>\n </section>\n }\n <div class=\"bmb_table_lite-filter\">\n @if (filtersVisible()) {\n @for (column of parsedFiltersColumns(); track $index) {\n <section class=\"bmb_table_lite-filter-item\">\n @switch (column.type) {\n @case ('number') {\n <div class=\"bmb_table_lite-filter-item-number\">\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 @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 @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\n <div class=\"bmb_table_lite-container\">\n <section class=\"bmb_table_lite-container-table\">\n <div class=\"bmb_table_lite-row bmb_table_lite-row--header\">\n @if (tableConfig?.isSelectable) {\n <div class=\"bmb_table_lite-th bmb_table_lite-checkbox\">\n <bmb-checkbox\n (change)=\"$event ? toggleAllRows() : null\"\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\n [ariaLabel]=\"checkboxLabel()\"\n [disabled]=\"false\"\n />\n </div>\n }\n\n @if (tableConfig?.isExpandible) {\n <div class=\"bmb_table_lite-th bmb_table_lite-expand\"> </div>\n }\n\n @for (\n column of tableColumns;\n track trackByColumn(column);\n let i = $index\n ) {\n <div\n class=\"bmb_table_lite-th\"\n [ngClass]=\"getHeaderCellClasses(i)\"\n [title]=\"\n lang() === 'es' ? column.label : column.labelEn || column.label\n \"\n >\n <ng-container *ngIf=\"column.icon\">\n <bmb-icon [icon]=\"column.icon\"></bmb-icon>\n </ng-container>\n\n @if (column.htmlLabel) {\n <ng-template\n [ngTemplateOutlet]=\"column.htmlLabel\"\n [ngTemplateOutletContext]=\"{ column: column, index: i }\"\n ></ng-template>\n } @else {\n <span class=\"bmb_table_lite-th-text\">\n {{\n lang() === 'es'\n ? column.label\n : column.labelEn || column.label\n }}\n </span>\n }\n </div>\n }\n\n @if (tableConfig?.showActions) {\n <div class=\"bmb_table_lite-th bmb_table_lite-actions\"></div>\n }\n </div>\n\n @for (row of pageSlice; track trackByRow(row); let rIndex = $index) {\n <div\n class=\"bmb_table_lite-row\"\n (click)=\"onSelectRow(row)\"\n [ngClass]=\"{\n 'bmb_table_lite-even': isEven(rIndex),\n 'bmb_table_lite-odd': isOdd(rIndex),\n 'bmb_table_lite-expandible': expandedElement === row\n }\"\n >\n @if (tableConfig?.isSelectable) {\n <div class=\"bmb_table_lite-td bmb_table_lite-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 </div>\n }\n\n @if (tableConfig?.isExpandible) {\n <div class=\"bmb_table_lite-td bmb_table_lite-expand\">\n <button\n type=\"button\"\n class=\"bmb_btn-icon\"\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 ></bmb-icon>\n </button>\n </div>\n }\n\n @for (\n column of tableColumns;\n track trackByColumn(column);\n let i = $index\n ) {\n <div\n class=\"bmb_table_lite-td\"\n [ngClass]=\"getCellClasses(row, column.dataKey, i)\"\n [title]=\"row[column.dataKey]?.propertyName || row[column.dataKey]\"\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 <span>\n {{ row[column.dataKey]?.propertyName || row[column.dataKey] }}\n </span>\n }\n </div>\n }\n\n @if (tableConfig?.showActions) {\n <div class=\"bmb_table_lite-td bmb_table_lite-actions\">\n @if (\n tableColumns.length &&\n tableColumns[tableColumns.length - 1].templateActions\n ) {\n <ng-template\n [ngTemplateOutlet]=\"\n tableColumns[tableColumns.length - 1].templateActions!\n \"\n [ngTemplateOutletContext]=\"{ row: row }\"\n ></ng-template>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"actionTemplate()!\"\n [ngTemplateOutletContext]=\"{ row: row }\"\n ></ng-template>\n }\n </div>\n }\n </div>\n\n @if (tableConfig?.isExpandible) {\n <div\n class=\"bmb_table_lite-row bmb_table_lite-details\"\n [class.bmb_table_lite-expanded]=\"expandedElement === row\"\n >\n <div class=\"bmb_table_lite-detail\" *ngIf=\"expandedElement === row\">\n <ng-container\n *ngTemplateOutlet=\"detailTemplate(); context: { row: row }\"\n ></ng-container>\n </div>\n </div>\n }\n }\n </section>\n\n @if (tableConfig?.isPaginable) {\n <div class=\"bmb_table_lite-paginator\">\n <span class=\"bmb_table_lite-paginator-text\">\n {{ getPaginationText() }}\n </span>\n\n <button\n class=\"bmb_table_lite-paginator-btn\"\n [disabled]=\"isFirstPage() || isSinglePage()\"\n (click)=\"goToFirstPage()\"\n >\n <bmb-icon\n icon=\"keyboard_double_arrow_left\"\n class=\"bmb_table_lite-paginator-icon\"\n />\n </button>\n\n <button\n class=\"bmb_table_lite-paginator-btn\"\n [disabled]=\"isFirstPage() || isSinglePage()\"\n (click)=\"goToPreviousPage()\"\n >\n <bmb-icon\n icon=\"keyboard_arrow_left\"\n class=\"bmb_table_lite-paginator-icon\"\n />\n </button>\n\n <button\n class=\"bmb_table_lite-paginator-btn\"\n [disabled]=\"isLastPage() || isSinglePage()\"\n (click)=\"goToNextPage()\"\n >\n <bmb-icon\n icon=\"keyboard_arrow_right\"\n class=\"bmb_table_lite-paginator-icon\"\n />\n </button>\n\n <button\n class=\"bmb_table_lite-paginator-btn\"\n [disabled]=\"isLastPage() || isSinglePage()\"\n (click)=\"goToLastPage()\"\n >\n <bmb-icon\n icon=\"keyboard_double_arrow_right\"\n class=\"bmb_table_lite-paginator-icon\"\n />\n </button>\n </div>\n }\n </div>\n</div>\n", styles: ["@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-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_lite{background:var(--containers-modal);box-shadow:var(--bmb-box-shadow-3);box-sizing:border-box;container-type:inline-size;padding:1.5rem 1rem;width:100%}.bmb_table_lite-filters-top,.bmb_table_lite-filters-left{display:flex;flex-flow:column;gap:1rem;overflow:auto}.bmb_table_lite-filters-bottom,.bmb_table_lite-filters-right{align-items:flex-start;display:flex;flex-flow:column;gap:1rem;overflow:auto;flex-direction:column-reverse}@media (min-width: 62.5625rem){.bmb_table_lite-filters-top .bmb_table_lite-header,.bmb_table_lite-filters-bottom .bmb_table_lite-header{height:30%;width:100%}.bmb_table_lite-filters-top .bmb_table_lite-container,.bmb_table_lite-filters-bottom .bmb_table_lite-container{flex:1}}@media (min-width: 62.5625rem){.bmb_table_lite-filters-left,.bmb_table_lite-filters-right{flex-flow:row}.bmb_table_lite-filters-left .bmb_table_lite-header,.bmb_table_lite-filters-right .bmb_table_lite-header{width:30%}.bmb_table_lite-filters-left .bmb_table_lite-container,.bmb_table_lite-filters-right .bmb_table_lite-container{flex:1}}@media (min-width: 62.5625rem){.bmb_table_lite-filters-right{flex-flow:row-reverse}}.bmb_table_lite-header{container-type:inline-size;max-height:100%;overflow:auto}.bmb_table_lite-header .bmb_table_lite-filter{display:flex;flex-flow:column;gap:1rem;overflow:auto;width:100%}@container (min-width: 37.5rem){.bmb_table_lite-header .bmb_table_lite-filter{flex-flow:row;flex-wrap:wrap}}.bmb_table_lite-filter-item{width:100%}@container (min-width: 37.5rem){.bmb_table_lite-filter-item{width:calc(50% - .5rem)}}.bmb_table_lite-filter-item-number{display:flex;flex-flow:row}@media (max-width: 43.6875rem){.bmb_table_lite-filter-item-number{flex-flow:column}}.bmb_table_lite-filter-item-number>*{flex:1}.bmb_table_lite-filter-item-number bmb-input:first-child .bmb_field-actions{right:2.5rem}.bmb_table_lite-filter-item-number bmb-input:first-child .bmb_field-wrapper:after{border-top:.125rem solid;content:\"\";display:inline-block;height:0;margin:0 .625rem;width:1rem}@media (max-width: 43.6875rem){.bmb_table_lite-filter-item-number bmb-input:first-child .bmb_field-wrapper:after{display:none}}.bmb_table_lite-search{align-items:center;display:flex;gap:1rem}.bmb_table_lite-input{flex:1}.bmb_table_lite-filters{width:100%}.bmb_table_lite-container{display:flex;flex-direction:column;height:100%;overflow:hidden;position:relative;width:100%}.bmb_table_lite-container-table{display:block;overflow-x:auto;overflow-y:visible;position:relative;width:100%}.bmb_table_lite-content{width:100%}.bmb_table_lite-row{align-items:stretch;border-bottom:1px dashed var(--general_contrasts-25);display:grid;grid-template-columns:var(--grid-template);min-height:2.875rem;padding-inline:.5rem;position:relative;width:100%;isolation:isolate}@media (max-width: 47.9375rem){.bmb_table_lite-row{width:max-content;min-width:100%}}.bmb_table_lite-row--header{background-color:var(--containers-modal);border-bottom:0;color:RGBA(var(--color-charade-500));text-transform:uppercase;font-family:Poppins-Regular,sans-serif;font-size:.875rem}.bmb_table_lite-th,.bmb_table_lite-td{align-items:center;display:flex;gap:.375rem;min-width:0;overflow:hidden;padding:0 .5rem;position:relative}@media (max-width: 47.9375rem){.bmb_table_lite-th,.bmb_table_lite-td{max-width:7.5rem}}@media (max-width: 47.9375rem){.bmb_table_lite-th.truncated,.bmb_table_lite-td.truncated{max-width:6.25rem;min-width:5rem;text-overflow:ellipsis;white-space:nowrap}.bmb_table_lite-th.truncated>*,.bmb_table_lite-td.truncated>*{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bmb_table_lite-th.truncated bmb-icon,.bmb_table_lite-th.truncated button,.bmb_table_lite-td.truncated bmb-icon,.bmb_table_lite-td.truncated button{flex:0 0 auto;margin-right:.25rem}}.bmb_table_lite-th.bmb_table_lite-checkbox,.bmb_table_lite-td.bmb_table_lite-checkbox{background:inherit;left:0;padding-right:0;position:sticky;text-align:center;width:3.875rem;z-index:2}.bmb_table_lite-th.bmb_table_lite-expand,.bmb_table_lite-td.bmb_table_lite-expand{background:inherit;left:var(--col-checkbox, 0px);position:sticky;width:2.5rem;z-index:2}@supports (left: max(0px)){.bmb_table_lite-th.bmb_table_lite-expand,.bmb_table_lite-td.bmb_table_lite-expand{left:max(var(--col-checkbox, 0px),0px)}}.bmb_table_lite-th.bmb_table_lite-sticky,.bmb_table_lite-td.bmb_table_lite-sticky{background:inherit;border-right:.0625rem solid var(--buttons-inactive-step);position:sticky;z-index:2;left:calc(var(--col-checkbox, 0px) * var(--has-checkbox) + var(--col-expand, 0px) * var(--has-expand))}@supports (left: max(0px)){.bmb_table_lite-th.bmb_table_lite-sticky,.bmb_table_lite-td.bmb_table_lite-sticky{left:max(var(--col-checkbox, 0px) * var(--has-checkbox) + var(--col-expand, 0px) * var(--has-expand),0px)}}.bmb_table_lite-th.bmb_table_lite-actions,.bmb_table_lite-td.bmb_table_lite-actions{background:inherit;border-left:.0625rem solid var(--buttons-inactive-step);color:var(--color-table-90);position:sticky;right:0;z-index:2}.bmb_table_lite-th button,.bmb_table_lite-td button{align-items:center;background:transparent;border:0;color:var(--color-table-90);cursor:pointer;display:flex;padding:0}.bmb_table_lite-row>.bmb_table_lite-td{font-family:Poppins-Regular,sans-serif;font-size:.875rem}.bmb_table_lite-row>.bmb_table_lite-td.bmb_table_lite-actions .action-container{display:flex}.bmb_table_lite-row>.bmb_table_lite-td.bmb_table_lite-actions .action-container bmb-icon{font-size:1.125rem}.bmb_table_lite-row>.bmb_table_lite-td .bmb_btn-icon bmb-icon{font-size:1.5rem}.bmb_table_lite-even{background-color:var(--containers-modal);color:var(--menu_select-label-menu-inactive)}.bmb_table_lite-even.bmb_table_lite-expandible{background-color:var(--menu_select-on-surface-hovered-w-checkbox)}.bmb_table_lite-odd{background-color:var(--general_contrasts-15);color:var(--vertical-step-active-color)}.bmb_table_lite-odd.bmb_table_lite-expandible{background-color:var(--menu_select-on-surface-hovered-w-checkbox)}.bmb_table_lite-details{background-color:var(--menu_select-on-surface-hovered-w-checkbox);height:auto}.bmb_table_lite-details:empty{display:none}.bmb_table_lite-details.bmb_table_lite-expanded{border-bottom:.0625rem dashed var(--general_contrasts-25)}.bmb_table_lite-details.bmb_table_lite-expanded .bmb_table_lite-detail{grid-column:1/-1}.bmb_table_lite-details>.bmb_table_lite-td{border:0;padding:0 1rem}.bmb_table_lite-detail{color:var(--general_contrasts-75);display:flex;overflow:hidden}.bmb_table_lite-detail>bmb-table-lite{width:100%}.bmb_table_lite-paginator{align-items:center;bottom:0;display:flex;height:3rem;justify-content:flex-end;right:0;z-index:10}.bmb_table_lite-paginator-text{color:var(--general_contrasts-75);margin-right:2rem;font-family:Poppins-Regular,sans-serif;font-size:.75rem}.bmb_table_lite-paginator-btn{align-items:center;background:transparent;border:0;color:var(--color-table-btn-900);cursor:pointer;display:inline-flex;height:3rem;justify-content:center;padding:0;width:3rem}.bmb_table_lite-paginator-btn[disabled]{color:var(--buttons-inactive-step);cursor:not-allowed}.bmb_table_lite-paginator-icon{font-size:1.5rem}.bmb_table_lite bmb-checkbox{display:block;height:1.5rem}.bmb_table_lite-success{color:var(--semantic-success)}.bmb_table_lite-error{color:var(--semantic-error)}\n"] }]
|
|
530
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { select: [{
|
|
531
|
+
type: Output
|
|
532
|
+
}], clickedRow: [{
|
|
533
|
+
type: Output
|
|
534
|
+
}], searchChange: [{
|
|
535
|
+
type: Output
|
|
536
|
+
}], filtersChange: [{
|
|
537
|
+
type: Output
|
|
538
|
+
}], searchModeChange: [{
|
|
539
|
+
type: Output
|
|
540
|
+
}], pageChange: [{
|
|
541
|
+
type: Output
|
|
542
|
+
}], colCount: [{
|
|
543
|
+
type: HostBinding,
|
|
544
|
+
args: ['style.--col-count']
|
|
545
|
+
}], colCheckbox: [{
|
|
546
|
+
type: HostBinding,
|
|
547
|
+
args: ['style.--col-checkbox']
|
|
548
|
+
}], colExpand: [{
|
|
549
|
+
type: HostBinding,
|
|
550
|
+
args: ['style.--col-expand']
|
|
551
|
+
}], colActions: [{
|
|
552
|
+
type: HostBinding,
|
|
553
|
+
args: ['style.--col-actions']
|
|
554
|
+
}], hasCheckbox: [{
|
|
555
|
+
type: HostBinding,
|
|
556
|
+
args: ['style.--has-checkbox']
|
|
557
|
+
}], hasExpand: [{
|
|
558
|
+
type: HostBinding,
|
|
559
|
+
args: ['style.--has-expand']
|
|
560
|
+
}], hasActions: [{
|
|
561
|
+
type: HostBinding,
|
|
562
|
+
args: ['style.--has-actions']
|
|
563
|
+
}] } });
|
|
564
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm1iLXRhYmxlLWxpdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZHMtbmcvc3JjL2xpYi9jb21wb25lbnRzL2JtYi10YWJsZS1saXRlL2JtYi10YWJsZS1saXRlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RzLW5nL3NyYy9saWIvY29tcG9uZW50cy9ibWItdGFibGUtbGl0ZS9ibWItdGFibGUtbGl0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLFNBQVMsRUFFVCxNQUFNLEVBQ04sWUFBWSxFQUNaLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLEtBQUssRUFFTCxNQUFNLEVBRU4sS0FBSyxFQUVMLFFBQVEsRUFDUixXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7O0FBMEJ0RixNQUFNLE9BQU8scUJBQXFCO0lBK0VoQyxnRkFBZ0Y7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QjttR0FBckIscUJBQXFCLDgxRkNwRGxDLDJrVUFrU0EsK2lhRDNQSSxZQUFZLDRkQUNaLG1CQUFtQiwrQkFDbkIsZ0JBQWdCLDhKQUNoQixvQkFBb0Isb2FBQ3BCLGlCQUFpQix3aUJBQ2pCLHFCQUFxQixnZEFDckIsc0JBQXNCOzs0RkFPYixxQkFBcUI7a0JBakJqQyxTQUFTOytCQUNFLGdCQUFnQixjQUNkLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixvQkFBb0I7d0JBQ3BCLGlCQUFpQjt3QkFDakIscUJBQXFCO3dCQUNyQixzQkFBc0I7cUJBQ3ZCLG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJO3NGQWdFM0IsTUFBTTtzQkFBZixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQXVjSCxRQUFRO3NCQURYLFdBQVc7dUJBQUMsbUJBQW1CO2dCQU01QixXQUFXO3NCQURkLFdBQVc7dUJBQUMsc0JBQXNCO2dCQU0vQixTQUFTO3NCQURaLFdBQVc7dUJBQUMsb0JBQW9CO2dCQU03QixVQUFVO3NCQURiLFdBQVc7dUJBQUMscUJBQXFCO2dCQU05QixXQUFXO3NCQURkLFdBQVc7dUJBQUMsc0JBQXNCO2dCQU0vQixTQUFTO3NCQURaLFdBQVc7dUJBQUMsb0JBQW9CO2dCQU03QixVQUFVO3NCQURiLFdBQVc7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgaW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgZWZmZWN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBtb2RlbCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIGNvbXB1dGVkLFxuICBIb3N0QmluZGluZyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbic7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5cbmltcG9ydCB7IEJtYkljb25Db21wb25lbnQgfSBmcm9tICcuLi9ibWItaWNvbi9ibWItaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQm1iQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi9ibWItY2hlY2tib3gvYm1iLWNoZWNrYm94LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCbWJJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL2JtYi1pbnB1dC9ibWItaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEJtYkRhdGVSYW5nZUNvbXBvbmVudCB9IGZyb20gJy4uL2JtYi1kYXRlLXJhbmdlL2JtYi1kYXRlLXJhbmdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCbWJBY3Rpb25JY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vYm1iLWFjdGlvbi1pY29uL2JtYi1hY3Rpb24taWNvbi5jb21wb25lbnQnO1xuXG5pbXBvcnQge1xuICBJQm1iRmlsdGVyc1Bvc2l0aW9uLFxuICBUYWJsZUNvbHVtLFxuICBUYWJsZUNvbmZpZyxcbiAgSUJtYlRhYmxlTGFuZyxcbn0gZnJvbSAnLi9ibWItdGFibGUtbGl0ZS5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdibWItdGFibGUtbGl0ZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBCbWJJY29uQ29tcG9uZW50LFxuICAgIEJtYkNoZWNrYm94Q29tcG9uZW50LFxuICAgIEJtYklucHV0Q29tcG9uZW50LFxuICAgIEJtYkRhdGVSYW5nZUNvbXBvbmVudCxcbiAgICBCbWJBY3Rpb25JY29uQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vYm1iLXRhYmxlLWxpdGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vYm1iLXRhYmxlLWxpdGUuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgQm1iVGFibGVMaXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyDwn5SnIENPTkZJR1VSQUNJw5NOIElOVEVSTkEgKG5vIHZpc2libGUgZGVzZGUgZWwgdGVtcGxhdGUpXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHByaXZhdGUgX3Jhd0NvbHVtbnM6IFRhYmxlQ29sdW1bXSA9IFtdO1xuICBwcml2YXRlIF9yYXdDb25maWc6IFRhYmxlQ29uZmlnID0ge1xuICAgIGlzU2VsZWN0YWJsZTogZmFsc2UsXG4gICAgaXNFeHBhbmRpYmxlOiBmYWxzZSxcbiAgICBpc1BhZ2luYWJsZTogZmFsc2UsXG4gICAgc2hvd0FjdGlvbnM6IGZhbHNlLFxuICB9O1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIPCfk4ogREFUT1MgWSBFU1RBRE8gREUgTEEgVEFCTEFcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgb3JpZ2luYWxEYXRhOiBhbnlbXSA9IFtdOyAvLyBEYXRvcyBvcmlnaW5hbGVzIHNpbiBmaWx0cm9zXG4gIGZpbHRlcmVkRGF0YTogYW55W10gPSBbXTsgLy8gRGF0b3MgdHJhcyBhcGxpY2FyIGZpbHRyb3NcbiAgcGFnZVNsaWNlOiBhbnlbXSA9IFtdOyAvLyBQw6FnaW5hIGFjdHVhbCBxdWUgc2UgbXVlc3RyYVxuXG4gIGV4cGFuZGVkRWxlbWVudDogYW55OyAvLyBGaWxhIGV4cGFuZGlkYSBhY3R1YWxcbiAgc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odHJ1ZSwgW10pOyAvLyBTZWxlY2Npw7NuIGRlIGZpbGFzXG4gIHRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZyB8IHVuZGVmaW5lZDsgLy8gQ29uZmlndXJhY2nDs24gYWN0aXZhIGRlIGxhIHRhYmxhXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8g8J+UjSBGT1JNVUxBUklPIERFIEZJTFRST1MgWSBCw5pTUVVFREFcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgZmlsdGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pOyAvLyBDb250cm9sZXMgZGluw6FtaWNvcyBkZSBmaWx0cm9zXG4gIHNlYXJjaENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpOyAvLyBDb250cm9sIGRlIGLDunNxdWVkYSAodGV4dG8pXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8g8J+nqSBDT0xVTU5BUyBZIEVTVFJVQ1RVUkEgREUgTEEgVEFCTEFcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgdGFibGVDb2x1bW5zOiBUYWJsZUNvbHVtW10gPSBbXTsgLy8gQ29sdW1uYXMgcmVuZGVyaXphZGFzIGVuIGxhIHRhYmxhXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8g4pqZ77iPIElOUFVUUyAoY29uZmlndXJhY2nDs24gZXh0ZXJuYSBkZWwgY29tcG9uZW50ZSlcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgc2hvd1NlYXJjaCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTsgLy8gTXVlc3RyYSB1IG9jdWx0YSBlbCBidXNjYWRvclxuICBwYWdlU2l6ZSA9IGlucHV0PG51bWJlcj4oKTsgLy8gVGFtYcOxbyBkZSBww6FnaW5hXG4gIHRvdGFsSXRlbXMgPSBpbnB1dDxudW1iZXI+KDApOyAvLyBUb3RhbCBkZSBlbGVtZW50b3MgKHNlcnZlcilcbiAgZGF0YSA9IGlucHV0PGFueVtdPihbXSk7IC8vIERhdGEgcmVjaWJpZGFcbiAgY29sdW1ucyA9IGlucHV0PFRhYmxlQ29sdW1bXT4oW10pOyAvLyBEZWZpbmljacOzbiBkZSBjb2x1bW5hc1xuICBjb25maWcgPSBpbnB1dDxUYWJsZUNvbmZpZz4oKTsgLy8gQ29uZmlndXJhY2nDs24gZ2VuZXJhbFxuXG4gIHRydW5jYXRlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpOyAvLyBBY3RpdmEgdHJ1bmNhZG8gZGUgdGV4dG9cbiAgbGFuZyA9IGlucHV0PElCbWJUYWJsZUxhbmc+KCdlcycpOyAvLyBJZGlvbWEgKCdlcycgfCAnZW4nKVxuICBzZXJ2ZXJTaWRlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpOyAvLyBNb2RvIHNlcnZpZG9yIG8gY2xpZW50ZVxuICBmaWx0ZXJzUG9zaXRpb24gPSBpbnB1dDxJQm1iRmlsdGVyc1Bvc2l0aW9uPigndG9wJyk7IC8vIFBvc2ljacOzbiBmaWx0cm9zXG4gIGluaXRpYWxUYWJsZVNlbGVjdGlvbiA9IGlucHV0PG51bWJlcltdPihbXSk7IC8vIFNlbGVjY2nDs24gaW5pY2lhbCBkZSBmaWxhc1xuICBhY3Rpb25UZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPGFueT4gfCBudWxsPihudWxsKTsgLy8gVGVtcGxhdGUgZGUgYWNjaW9uZXNcbiAgZGV0YWlsVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbD4obnVsbCk7IC8vIFRlbXBsYXRlIGRlIGRldGFsbGVcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyDimqEgTU9ERUxPUyBSRUFDVElWT1MgKHVzYW5kbyBzaWduYWxzKVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBjbGVhclNlbGVjdGlvbiA9IG1vZGVsPGJvb2xlYW4+KGZhbHNlKTsgLy8gTGltcGlhIHNlbGVjY2nDs24gZGVzZGUgZnVlcmFcbiAgY3VycmVudFBhZ2UgPSBtb2RlbDxudW1iZXI+KDApOyAvLyBQw6FnaW5hIGFjdHVhbFxuICBmaWx0ZXJzVmlzaWJsZSA9IG1vZGVsPGJvb2xlYW4+KGZhbHNlKTsgLy8gRXN0YWRvIHZpc2libGUvb2N1bHRvIGRlIGZpbHRyb3NcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyDwn5OkIE9VVFBVVFMgKGV2ZW50b3MgcXVlIGVtaXRlIGxhIHRhYmxhKVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBAT3V0cHV0KCkgc2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7IC8vIENhbWJpbyBkZSBzZWxlY2Npw7NuXG4gIEBPdXRwdXQoKSBjbGlja2VkUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7IC8vIENsaWNrIGVuIHVuYSBmaWxhXG4gIEBPdXRwdXQoKSBzZWFyY2hDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTsgLy8gVGV4dG8gZGVsIGJ1c2NhZG9yXG4gIEBPdXRwdXQoKSBmaWx0ZXJzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ8c3RyaW5nLCBhbnk+PigpOyAvLyBGaWx0cm9zIGFwbGljYWRvc1xuICBAT3V0cHV0KCkgc2VhcmNoTW9kZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8J2NsaWVudCcgfCAnc2VydmVyJz4oKTsgLy8gTW9kbyBkZSBiw7pzcXVlZGFcbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBwYWdlSW5kZXg6IG51bWJlcjtcbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICB9PigpOyAvLyBDYW1iaW8gZGUgcMOhZ2luYVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIPCfp64gUFJPUElFREFERVMgQ09NUFVUQURBU1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBwYXJzZWRGaWx0ZXJzQ29sdW1ucyA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5jb2x1bW5zKCkuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi5pc0ZpbHRlcmFibGUgIT09IGZhbHNlKSxcbiAgKTtcblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyDwn6egIENJQ0xPIERFIFZJREEgWSBFRkVDVE9TIFJFQUNUSVZPU1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIC8vIPCfp6kgRWZlY3RvOiBjb250cm9sYSBsYSBww6FnaW5hIGFjdHVhbCBlbiBtb2RvIHNlcnZpZG9yLCBhc2VndXJhbmRvIHF1ZVxuICAgIC8vIG5vIGV4Y2VkYSBsb3MgbMOtbWl0ZXMgKDAg4oaSIGxhc3RQYWdlKVxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuc2VydmVyU2lkZSgpKSByZXR1cm47XG4gICAgICBjb25zdCBsYXN0ID0gdGhpcy5sYXN0UGFnZSgpO1xuICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UoKSA8IDApIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZS5zZXQoMCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50UGFnZSgpID4gbGFzdCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlLnNldChsYXN0KTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8g8J+nqSBFZmVjdG86IGxpbXBpYSBsYSBzZWxlY2Npw7NuIGRlIGZpbGFzIHNpIHNlIGFjdGl2YSBgY2xlYXJTZWxlY3Rpb25gXG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jbGVhclNlbGVjdGlvbigpKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uLnNldChmYWxzZSk7XG4gICAgICAgICAgdGhpcy5zZWxlY3QuZW1pdCh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIPCfp6kgRGV0ZWN0YSBjYW1iaW9zIGVuIGlucHV0cyByZWFjdGl2b3MgKGRhdGEsIGNvbHVtbnMsIGNvbmZpZylcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10pIHRoaXMucGFyc2VEYXRhKGNoYW5nZXNbJ2RhdGEnXS5jdXJyZW50VmFsdWUgfHwgW10pO1xuICAgIGlmIChjaGFuZ2VzWydjb2x1bW5zJ10pXG4gICAgICB0aGlzLnBhcnNlQ29sdW1ucyhjaGFuZ2VzWydjb2x1bW5zJ10uY3VycmVudFZhbHVlIHx8IFtdKTtcbiAgICBpZiAoY2hhbmdlc1snY29uZmlnJ10pIHRoaXMuc2V0Q29uZmlnKGNoYW5nZXNbJ2NvbmZpZyddLmN1cnJlbnRWYWx1ZSB8fCB7fSk7XG4gIH1cblxuICAvLyDwn6epIEluaWNpYWxpemEgZmlsdHJvcyB5IHN1c2NyaXBjaW9uZXMgZGVsIGJ1c2NhZG9yXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgY29uc3Qgc2VhcmNoID0gKHZhbHVlIHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICAgICAgaWYgKHRoaXMuc2VydmVyU2lkZSgpKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoTW9kZUNoYW5nZS5lbWl0KCdzZXJ2ZXInKTtcbiAgICAgICAgdGhpcy5zZWFyY2hDaGFuZ2UuZW1pdChzZWFyY2gpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWFyY2hNb2RlQ2hhbmdlLmVtaXQoJ2NsaWVudCcpO1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3Jhd0NvbmZpZyA9IHRoaXMuY29uZmlnKCkgfHwge307XG4gICAgdGhpcy5wYXJzZURhdGEodGhpcy5kYXRhKCkpO1xuICAgIHRoaXMucGFyc2VDb2x1bW5zKHRoaXMuY29sdW1ucygpKTtcblxuICAgIC8vIPCfkYcgaW1wb3J0YW50ZTogcmVjcmVhciBmaWx0cm9zIHVuYSB2ZXogcXVlIHRvZG8gZXN0w6kgbGlzdG9cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2V0dXBEeW5hbWljRmlsdGVycygpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyDwn6epIE1BTkVKTyBERSBEQVRPUyBZIENPTFVNTkFTXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8g8J+UuSBOb3JtYWxpemEgeSBhcGxpY2EgbG9zIGRhdG9zIGluaWNpYWxlcyBzZWfDum4gZWwgbW9kbyAoc2VydmVyL2NsaWVudClcbiAgcGFyc2VEYXRhKGRhdGE6IGFueVtdKSB7XG4gICAgdGhpcy5vcmlnaW5hbERhdGEgPSBBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFtdO1xuICAgIGlmICghdGhpcy5zZXJ2ZXJTaWRlKCkpIHtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgICB0aGlzLmFwcGx5Q2xpZW50UGFnaW5hdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IFsuLi50aGlzLm9yaWdpbmFsRGF0YV07XG4gICAgICB0aGlzLnBhZ2VTbGljZSA9IFsuLi50aGlzLmZpbHRlcmVkRGF0YV07XG4gICAgfVxuXG4gICAgLy8g8J+nqSBBcGxpY2Egc2VsZWNjacOzbiBpbmljaWFsIHNpIGVzdMOhIGNvbmZpZ3VyYWRhXG4gICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5pbml0aWFsVGFibGVTZWxlY3Rpb24oKSA/PyBbXTtcbiAgICBpZiAoc2VsZWN0ZWRSb3dzLmxlbmd0aCAmJiB0aGlzLmZpbHRlcmVkRGF0YS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICBzZWxlY3RlZFJvd3MuZm9yRWFjaCgoaWR4KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcmVkRGF0YVtpZHhdKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KHRoaXMuZmlsdGVyZWREYXRhW2lkeF0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyDwn5S5IEVzdGFuZGFyaXphIGxhcyBjb2x1bW5hcyB5IGdlbmVyYSBzdXMgZmlsdHJvcyBkaW7DoW1pY29zXG4gIHBhcnNlQ29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtW10pIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gKGNvbHVtbnMgfHwgW10pLm1hcCgoY29sKSA9PiAoe1xuICAgICAgdHlwZTogJ3N0cmluZycgYXMgY29uc3QsXG4gICAgICBsYWJlbEVuOiBjb2wubGFiZWxFbixcbiAgICAgIC4uLmNvbCxcbiAgICB9KSk7XG4gICAgdGhpcy5fcmF3Q29sdW1ucyA9IG5vcm1hbGl6ZWQ7XG4gICAgdGhpcy5hcHBseUNvbHVtbnNBbmRDb25maWcobm9ybWFsaXplZCk7XG4gICAgdGhpcy5zZXR1cER5bmFtaWNGaWx0ZXJzKCk7XG4gICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICB0aGlzLmFwcGx5Q2xpZW50UGFnaW5hdGlvbigpO1xuICB9XG5cbiAgLy8g8J+UuSBGdXNpb25hIGxhIGNvbmZpZ3VyYWNpw7NuIHBvciBkZWZlY3RvIGNvbiBsYSByZWNpYmlkYSB2w61hIGlucHV0XG4gIHNldENvbmZpZyhjZmc6IFRhYmxlQ29uZmlnKSB7XG4gICAgdGhpcy50YWJsZUNvbmZpZyA9IHsgLi4udGhpcy5fcmF3Q29uZmlnLCAuLi5jZmcgfTtcbiAgICB0aGlzLmFwcGx5Q29sdW1uc0FuZENvbmZpZyh0aGlzLl9yYXdDb2x1bW5zKTtcbiAgfVxuXG4gIC8vIPCflLkgQXBsaWNhIGNvbHVtbmFzIHZpc2libGVzIHkgY29uZmlndXJhIGxhcyBlc3BlY2lhbGVzIChzZWxlY3QvZXhwYW5kL2FjdGlvbnMpXG4gIHByaXZhdGUgYXBwbHlDb2x1bW5zQW5kQ29uZmlnKG5ld0NvbHVtbnM6IFRhYmxlQ29sdW1bXSA9IFtdKSB7XG4gICAgaWYgKCFuZXdDb2x1bW5zLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZGlzcGxheUNvbHVtbnMgPSBbLi4ubmV3Q29sdW1ucy5tYXAoKGMpID0+IGMuZGVmKV07XG4gICAgaWYgKHRoaXMuX3Jhd0NvbmZpZy5pc0V4cGFuZGlibGUpIGRpc3BsYXlDb2x1bW5zLnVuc2hpZnQoJ2V4cGFuZCcpO1xuICAgIGlmICh0aGlzLl9yYXdDb25maWcuaXNTZWxlY3RhYmxlKSBkaXNwbGF5Q29sdW1ucy51bnNoaWZ0KCdzZWxlY3QnKTtcbiAgICBpZiAodGhpcy5fcmF3Q29uZmlnLnNob3dBY3Rpb25zKSBkaXNwbGF5Q29sdW1ucy5wdXNoKCdhY3Rpb25zJyk7XG5cbiAgICB0aGlzLnRhYmxlQ29sdW1ucyA9IG5ld0NvbHVtbnM7XG4gICAgdGhpcy50YWJsZUNvbmZpZyA9IHRoaXMuX3Jhd0NvbmZpZztcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIPCfjpvvuI8gRklMVFJPUyBZIELDmlNRVUVEQVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8vIPCflLkgQ3JlYSBkaW7DoW1pY2FtZW50ZSBsb3MgY29udHJvbGVzIGRlbCBmb3JtdWxhcmlvIGRlIGZpbHRyb3NcbiAgc2V0dXBEeW5hbWljRmlsdGVycygpIHtcbiAgICBPYmplY3Qua2V5cyh0aGlzLmZpbHRlckZvcm0uY29udHJvbHMpLmZvckVhY2goKGspID0+XG4gICAgICB0aGlzLmZpbHRlckZvcm0ucmVtb3ZlQ29udHJvbChrKSxcbiAgICApO1xuXG4gICAgdGhpcy5fcmF3Q29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGNvbHVtbi5kYXRhS2V5O1xuICAgICAgc3dpdGNoIChjb2x1bW4udHlwZSkge1xuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybS5hZGRDb250cm9sKGAke2tleX1fbWluYCwgbmV3IEZvcm1Db250cm9sKCkpO1xuICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybS5hZGRDb250cm9sKGAke2tleX1fbWF4YCwgbmV3IEZvcm1Db250cm9sKCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICB0aGlzLmZpbHRlckZvcm0uYWRkQ29udHJvbChgJHtrZXl9X2Zyb21gLCBuZXcgRm9ybUNvbnRyb2woKSk7XG4gICAgICAgICAgdGhpcy5maWx0ZXJGb3JtLmFkZENvbnRyb2woYCR7a2V5fV90b2AsIG5ldyBGb3JtQ29udHJvbCgpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aGlzLmZpbHRlckZvcm0uYWRkQ29udHJvbChgJHtrZXl9X2NvbnRhaW5zYCwgbmV3IEZvcm1Db250cm9sKCcnKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmZpbHRlckZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zZXJ2ZXJTaWRlKCkpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJzQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXJGb3JtLnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIPCflLkgQXBsaWNhIGxvcyBmaWx0cm9zLCBiw7pzcXVlZGEgeSBwYWdpbmFjacOzbiBzZWfDum4gZWwgbW9kbyBhY3Rpdm9cbiAgYXBwbHlGaWx0ZXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZmlsdGVyRm9ybS52YWx1ZSBhcyBhbnk7XG5cbiAgICBpZiAodGhpcy5zZXJ2ZXJTaWRlKCkpIHtcbiAgICAgIHRoaXMuZmlsdGVyc0NoYW5nZS5lbWl0KHZhbHVlcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9yYXdDb2x1bW5zIHx8IHRoaXMuX3Jhd0NvbHVtbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IFsuLi50aGlzLm9yaWdpbmFsRGF0YV07XG4gICAgICB0aGlzLmFwcGx5Q2xpZW50UGFnaW5hdGlvbigpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VhcmNoVGV4dCA9ICh0aGlzLnNlYXJjaENvbnRyb2wudmFsdWUgfHwgJycpLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGxldCBmaWx0ZXJlZCA9IFsuLi50aGlzLm9yaWdpbmFsRGF0YV07XG5cbiAgICAvLyDwn5S5IEFwbGljYSBmaWx0cm9zIG51bcOpcmljb3MsIGRlIGZlY2hhIHkgdGV4dG9cbiAgICB0aGlzLl9yYXdDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gY29sdW1uLmRhdGFLZXk7XG4gICAgICBjb25zdCB0eXBlID0gY29sdW1uLnR5cGUgfHwgJ3N0cmluZyc7XG5cbiAgICAgIGlmICh0eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25zdCByYXdNaW4gPSB2YWx1ZXNbYCR7a2V5fV9taW5gXTtcbiAgICAgICAgY29uc3QgcmF3TWF4ID0gdmFsdWVzW2Ake2tleX1fbWF4YF07XG4gICAgICAgIGNvbnN0IG1pbiA9XG4gICAgICAgICAgcmF3TWluID09PSBudWxsIHx8IHJhd01pbiA9PT0gdW5kZWZpbmVkIHx8IHJhd01pbiA9PT0gJydcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBOdW1iZXIocmF3TWluKTtcbiAgICAgICAgY29uc3QgbWF4ID1cbiAgICAgICAgICByYXdNYXggPT09IG51bGwgfHwgcmF3TWF4ID09PSB1bmRlZmluZWQgfHwgcmF3TWF4ID09PSAnJ1xuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IE51bWJlcihyYXdNYXgpO1xuICAgICAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcigocm93KSA9PiB7XG4gICAgICAgICAgY29uc3QgdiA9IE51bWJlcihyb3dba2V5XSk7XG4gICAgICAgICAgaWYgKE51bWJlci5pc05hTih2KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIHJldHVybiAobWluID09PSBudWxsIHx8IHYgPj0gbWluKSAmJiAobWF4ID09PSBudWxsIHx8IHYgPD0gbWF4KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgY29uc3QgZGF0ZUZvcm1hdCA9IGNvbHVtbi5kYXRlRm9ybWF0IHx8ICd5eXl5LU1NLWRkJztcbiAgICAgICAgY29uc3QgcmF3RnJvbSA9IHZhbHVlc1tgJHtrZXl9X2Zyb21gXTtcbiAgICAgICAgY29uc3QgcmF3VG8gPSB2YWx1ZXNbYCR7a2V5fV90b2BdO1xuICAgICAgICBjb25zdCBmcm9tID0gcmF3RnJvbVxuICAgICAgICAgID8gRGF0ZVRpbWUuZnJvbUZvcm1hdChTdHJpbmcocmF3RnJvbSksIGRhdGVGb3JtYXQpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICBjb25zdCB0byA9IHJhd1RvXG4gICAgICAgICAgPyBEYXRlVGltZS5mcm9tRm9ybWF0KFN0cmluZyhyYXdUbyksIGRhdGVGb3JtYXQpXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgIGZpbHRlcmVkID0gZmlsdGVyZWQuZmlsdGVyKChyb3cpID0+IHtcbiAgICAgICAgICBjb25zdCByYXcgPSByb3dba2V5XTtcbiAgICAgICAgICBpZiAoIXJhdykgcmV0dXJuIHRydWU7XG4gICAgICAgICAgY29uc3QgZGF0ZVZhbCA9IERhdGVUaW1lLmZyb21Gb3JtYXQoU3RyaW5nKHJhdyksIGRhdGVGb3JtYXQpO1xuICAgICAgICAgIGlmICghZGF0ZVZhbC5pc1ZhbGlkKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBndGUgPSAhZnJvbSB8fCAoZnJvbS5pc1ZhbGlkICYmIGRhdGVWYWwgPj0gZnJvbSk7XG4gICAgICAgICAgY29uc3QgbHRlID0gIXRvIHx8ICh0by5pc1ZhbGlkICYmIGRhdGVWYWwgPD0gdG8pO1xuICAgICAgICAgIHJldHVybiBndGUgJiYgbHRlO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5zID0gKHZhbHVlc1tgJHtrZXl9X2NvbnRhaW5zYF0gfHwgJycpLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgICBpZiAoY29udGFpbnMpIHtcbiAgICAgICAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkLmZpbHRlcigocm93KSA9PlxuICAgICAgICAgICAgKHJvd1trZXldID8/ICcnKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoY29udGFpbnMpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIPCflLkgQXBsaWNhIGLDunNxdWVkYSBnbG9iYWxcbiAgICBpZiAoc2VhcmNoVGV4dCkge1xuICAgICAgZmlsdGVyZWQgPSBmaWx0ZXJlZC5maWx0ZXIoKHJvdykgPT5cbiAgICAgICAgdGhpcy5fcmF3Q29sdW1ucy5zb21lKChjb2wpID0+XG4gICAgICAgICAgKChyb3dbY29sLmRhdGFLZXldID8/ICcnKSArICcnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRleHQpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkO1xuICAgIHRoaXMuYXBwbHlDbGllbnRQYWdpbmF0aW9uKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyDwn5OEIFBBR0lOQUNJw5NOIChDTElFTlRFIFkgU0VSVklET1IpXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8g8J+UuSBEZXRlcm1pbmEgZWwgdGFtYcOxbyBhY3R1YWwgZGUgcMOhZ2luYVxuICBnZXQgcmVzb2x2ZWRQYWdlU2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhZ2VTaXplKCkgPz8gMTA7XG4gIH1cblxuICAvLyDwn5S5IEFwbGljYSBsYSBwYWdpbmFjacOzbiBkZWwgbGFkbyBkZWwgY2xpZW50ZVxuICBwcml2YXRlIGFwcGx5Q2xpZW50UGFnaW5hdGlvbigpIHtcbiAgICBpZiAodGhpcy5zZXJ2ZXJTaWRlKCkgfHwgIXRoaXMudGFibGVDb25maWc/LmlzUGFnaW5hYmxlKSB7XG4gICAgICB0aGlzLnBhZ2VTbGljZSA9IFsuLi50aGlzLmZpbHRlcmVkRGF0YV07XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5jdXJyZW50UGFnZSgpICogdGhpcy5yZXNvbHZlZFBhZ2VTaXplO1xuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgdGhpcy5yZXNvbHZlZFBhZ2VTaXplO1xuICAgIHRoaXMucGFnZVNsaWNlID0gdGhpcy5maWx0ZXJlZERhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH1cblxuICAvLyDwn5S5IEV2ZW50byBkZSBjYW1iaW8gZGUgcMOhZ2luYSAoY2xpZW50L3NlcnZlcilcbiAgb25QYWdlRXZlbnQocGFnZUluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlLnNldChwYWdlSW5kZXgpO1xuICAgIGlmICh0aGlzLnNlcnZlclNpZGUoKSkge1xuICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoe1xuICAgICAgICBwYWdlSW5kZXg6IHBhZ2VJbmRleCArIDEsXG4gICAgICAgIHBhZ2VTaXplOiB0aGlzLnJlc29sdmVkUGFnZVNpemUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcHBseUNsaWVudFBhZ2luYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvLyDwn5S5IEhlbHBlcnMgZGUgY29udHJvbCBkZSBww6FnaW5hXG4gIGlzRmlyc3RQYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlKCkgPD0gMDtcbiAgfVxuICBpc0xhc3RQYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRQYWdlKCkgPj0gdGhpcy5sYXN0UGFnZSgpO1xuICB9XG4gIGlzU2luZ2xlUGFnZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCB0b3RhbEl0ZW1zID0gdGhpcy5zZXJ2ZXJTaWRlKClcbiAgICAgID8gdGhpcy50b3RhbEl0ZW1zKCkgPz8gMFxuICAgICAgOiB0aGlzLmZpbHRlcmVkRGF0YS5sZW5ndGg7XG4gICAgcmV0dXJuIHRvdGFsSXRlbXMgPD0gdGhpcy5yZXNvbHZlZFBhZ2VTaXplO1xuICB9XG5cbiAgLy8g8J+UuSBDYWxjdWxhIGxhIMO6bHRpbWEgcMOhZ2luYSBkaXNwb25pYmxlXG4gIGxhc3RQYWdlKCk6IG51bWJlciB7XG4gICAgY29uc3QgdG90YWwgPSB0aGlzLnNlcnZlclNpZGUoKVxuICAgICAgPyB0aGlzLnRvdGFsSXRlbXMoKSA/PyAwXG4gICAgICA6IHRoaXMuZmlsdGVyZWREYXRhLmxlbmd0aDtcbiAgICBjb25zdCBzaXplID0gdGhpcy5yZXNvbHZlZFBhZ2VTaXplO1xuICAgIGNvbnN0IHJlc3VsdCA9IHNpemUgPT09IDAgPyAwIDogTWF0aC5jZWlsKHRvdGFsIC8gc2l6ZSkgLSAxO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCByZXN1bHQpO1xuICB9XG5cbiAgLy8g8J+UuSBOYXZlZ2FjacOzbiBlbnRyZSBww6FnaW5hc1xuICBnb1RvRmlyc3RQYWdlKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlKCkgPiAwKSB0aGlzLm9uUGFnZUV2ZW50KDApO1xuICB9XG4gIGdvVG9QcmV2aW91c1BhZ2UoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UoKSA+IDApIHRoaXMub25QYWdlRXZlbnQodGhpcy5jdXJyZW50UGFnZSgpIC0gMSk7XG4gIH1cbiAgZ29Ub05leHRQYWdlKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlKCkgPCB0aGlzLmxhc3RQYWdlKCkpXG4gICAgICB0aGlzLm9uUGFnZUV2ZW50KHRoaXMuY3VycmVudFBhZ2UoKSArIDEpO1xuICB9XG4gIGdvVG9MYXN0UGFnZSgpIHtcbiAgICB0aGlzLm9uUGFnZUV2ZW50KHRoaXMubGFzdFBhZ2UoKSk7XG4gIH1cblxuICAvLyDwn5S5IFRleHRvIGRlc2NyaXB0aXZvIGRlbCByYW5nbyBwYWdpbmFkbyAoZWouIFwiMSAtIDUgZGUgMjBcIilcbiAgZ2V0UGFnaW5hdGlvblRleHQoKTogc3RyaW5nIHtcbiAgICBjb25zdCB0b3RhbCA9IHRoaXMuc2VydmVyU2lkZSgpXG4gICAgICA/IHRoaXMudG90YWxJdGVtcz8uKCkgPz8gMFxuICAgICAgOiB0aGlzLmZpbHRlcmVkRGF0YS5sZW5ndGg7XG4gICAgY29uc3QgcGFnZUluZGV4ID0gdGhpcy5jdXJyZW50UGFnZT8uKCkgPz8gMDtcbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMucmVzb2x2ZWRQYWdlU2l6ZTtcbiAgICBpZiAodG90YWwgPT09IDAgfHwgcGFnZVNpemUgPT09IDApIHJldHVybiBgMCBkZSAke3RvdGFsfWA7XG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IHBhZ2VJbmRleCAqIHBhZ2VTaXplICsgMTtcbiAgICBjb25zdCBlbmRJbmRleCA9IE1hdGgubWluKChwYWdlSW5kZXggKyAxKSAqIHBhZ2VTaXplLCB0b3RhbCk7XG4gICAgcmV0dXJuIGAke3N0YXJ0SW5kZXh9IC0gJHtlbmRJbmRleH0gZGUgJHt0b3RhbH1gO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8g8J+Wse+4jyBJTlRFUkFDQ0nDk04gREUgRklMQVMgWSBTRUxFQ0NJw5NOXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLy8g8J+UuSBFbWl0ZSBlbCBldmVudG8gZGUgY2xpY2sgZW4gZmlsYVxuICBvblNlbGVjdFJvdyhyb3c6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2xpY2tlZFJvdy5lbWl0KHJvdyk7XG4gIH1cblxuICAvLyDwn5S5IEVtaXRlIGVsIGV2ZW50byBjdWFuZG8gY2FtYmlhIGxhIHNlbGVjY2nDs25cbiAgb25TZWxlY3QoKSB7XG4gICAgY29uc29sZS5sb2codGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xuXG4gICAgdGhpcy5zZWxlY3QuZW1pdCh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gIH1cblxuICAvLyDwn5S5IENvbXBydWViYSBzaSB0b2RhcyBsYXMgZmlsYXMgdmlzaWJsZXMgZXN0w6FuIHNlbGVjY2lvbmFkYXNcbiAgaXNBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBudW1TZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aDtcbiAgICBjb25zdCBudW1Sb3dzID0gdGhpcy5wYWdlU2xpY2UubGVuZ3RoO1xuICAgIHJldHVybiBudW1Sb3dzID4gMCAmJiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcbiAgfVxuXG4gIC8vIPCflLkgQWx0ZXJuYSBsYSBzZWxlY2Npw7NuIGRlIHRvZGFzIGxhcyBmaWxhcyB2aXNpYmxlc1xuICB0b2dnbGVBbGxSb3dzKCkge1xuICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgIHRoaXMub25TZWxlY3QoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KC4uLnRoaXMucGFnZVNsaWNlKTtcbiAgICB0aGlzLm9uU2VsZWN0KCk7XG4gIH1cblxuICAvLyDwn5S5IEV0aXF1ZXRhIGFjY2VzaWJsZSBkZWwgY2hlY2tib3ggKHVzYWRhIHBvciBBUklBKVxuICBjaGVja2JveExhYmVsKHJvdz86IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFyb3cpIHJldHVybiBgJHt0aGlzLmlzQWxsU2VsZWN0ZWQoKSA/ICdkZXNlbGVjdCcgOiAnc2VsZWN0J30gYWxsYDtcbiAgICBjb25zdCBpZHggPSB0aGlzLnBhZ2VTbGljZS5pbmRleE9mKHJvdyk7XG4gICAgcmV0dXJuIGAke3RoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KSA/ICdkZXNlbGVjdCcgOiAnc2VsZWN0J30gcm93ICR7aWR4ICsgMX1gO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8g8J+OqCBVVElMSURBREVTIERFIFJFTkRFUklaQURPIFkgQ0xBU0VTXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgaXNFdmVuKHJvd0luZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcm93SW5kZXggJSAyID09PSAwO1xuICB9XG4gIGlzT2RkKHJvd0luZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaXNFdmVuKHJvd0luZGV4KTtcbiAgfVxuICBpc1RlbXBsYXRlUmVmKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbiAgfVxuXG4gIC8vIPCflLkgRGVmaW5lIGNsYXNlcyBkaW7DoW1pY2FzIHBhcmEgY2VsZGFzIGRlIGRhdG9zXG4gIGdldENlbGxDbGFzc2VzKHJvdzogYW55LCBjb2x1bW5LZXk6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgY29uc3Qgc2VtYW50aWNUeXBlID0gcm93W2NvbHVtbktleSArICdUeXBlJ107XG4gICAgcmV0dXJuIHtcbiAgICAgICdibWJfdGFibGVfbGl0ZS1zdGlja3knOiBpbmRleCA9PT0gMCxcbiAgICAgIHRydW5jYXRlZDogdGhpcy50cnVuY2F0ZSgpLFxuICAgICAgWydibWJfdGFibGVfbGl0ZS0nICsgc2VtYW50aWNUeXBlXTogISFzZW1hbnRpY1R5cGUsXG4gICAgfTtcbiAgfVxuXG4gIC8vIPCflLkgRGVmaW5lIGNsYXNlcyBkaW7DoW1pY2FzIHBhcmEgZW5jYWJlemFkb3NcbiAgZ2V0SGVhZGVyQ2VsbENsYXNzZXMoaTogbnVtYmVyKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2JtYl90YWJsZV9saXRlLXN0aWNreSc6IGkgPT09IDAsXG4gICAgICB0cnVuY2F0ZWQ6IHRoaXMudHJ1bmNhdGUoKSxcbiAgICB9O1xuICB9XG5cbiAgLy8g8J+UuSBEZXRlcm1pbmEgY2xhc2VzIHByaW5jaXBhbGVzIGRlbCBjb250ZW5lZG9yIHNlZ8O6biBwb3NpY2nDs24gZGUgZmlsdHJvc1xuICBnZXRUYWJsZUNsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNsYXNzTGlzdCA9IFsnYm1iX3RhYmxlX2xpdGUnXTtcbiAgICBzd2l0Y2ggKHRoaXMuZmlsdGVyc1Bvc2l0aW9uKCkpIHtcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgY2xhc3NMaXN0LnB1c2goJ2JtYl90YWJsZV9saXRlLWZpbHRlcnMtcmlnaHQnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICBjbGFzc0xpc3QucHVzaCgnYm1iX3RhYmxlX2xpdGUtZmlsdGVycy1ib3R0b20nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgY2xhc3NMaXN0LnB1c2goJ2JtYl90YWJsZV9saXRlLWZpbHRlcnMtbGVmdCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNsYXNzTGlzdC5wdXNoKCdibWJfdGFibGVfbGl0ZS1maWx0ZXJzLXRvcCcpO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NMaXN0O1xuICB9XG5cbiAgLy8g8J+UuSBPYnRpZW5lIHVuIGNvbnRyb2wgZGVsIGZvcm11bGFyaW8gZGUgZmlsdHJvc1xuICBnZXRGb3JtQ29udHJvbChuYW1lOiBzdHJpbmcpOiBGb3JtQ29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyRm9ybS5nZXQobmFtZSkgYXMgRm9ybUNvbnRyb2w7XG4gIH1cblxuICAvLyDwn5S5IEFsdGVybmEgbGEgdmlzaWJpbGlkYWQgZGVsIHBhbmVsIGRlIGZpbHRyb3NcbiAgdG9nZ2xlRmlsdGVycygpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlcnNWaXNpYmxlLnNldCghdGhpcy5maWx0ZXJzVmlzaWJsZSgpKTtcbiAgfVxuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIPCfp64gVkFSSUFCTEVTIENTUyBZIEJJTkRJTkdTIERJTsOBTUlDT1NcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLi0tY29sLWNvdW50JylcbiAgZ2V0IGNvbENvdW50KCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlQ29sdW1ucy5sZW5ndGg7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLi0tY29sLWNoZWNrYm94JylcbiAgZ2V0IGNvbENoZWNrYm94KCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlQ29uZmlnPy5pc1NlbGVjdGFibGUgPyAnNjJweCcgOiAnMHB4JztcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnc3R5bGUuLS1jb2wtZXhwYW5kJylcbiAgZ2V0IGNvbEV4cGFuZCgpIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZUNvbmZpZz8uaXNFeHBhbmRpYmxlID8gJzQwcHgnIDogJzBweCc7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLi0tY29sLWFjdGlvbnMnKVxuICBnZXQgY29sQWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZUNvbmZpZz8uc2hvd0FjdGlvbnMgPyAnODBweCcgOiAnMHB4JztcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnc3R5bGUuLS1oYXMtY2hlY2tib3gnKVxuICBnZXQgaGFzQ2hlY2tib3goKSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVDb25maWc/LmlzU2VsZWN0YWJsZSA/IDEgOiAwO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS4tLWhhcy1leHBhbmQnKVxuICBnZXQgaGFzRXhwYW5kKCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlQ29uZmlnPy5pc0V4cGFuZGlibGUgPyAxIDogMDtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnc3R5bGUuLS1oYXMtYWN0aW9ucycpXG4gIGdldCBoYXNBY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlQ29uZmlnPy5zaG93QWN0aW9ucyA/IDEgOiAwO1xuICB9XG5cbiAgLy8g8J+UuSBFeHBvbmUgbGFzIHZhcmlhYmxlcyBDU1MgdXNhZGFzIHBhcmEgZWwgZ3JpZCBkaW7DoW1pY29cbiAgZ2V0IGNzc1ZhcnMoKSB7XG4gICAgY29uc3QgaGFzU2VsZWN0ID0gdGhpcy50YWJsZUNvbmZpZz8uaXNTZWxlY3RhYmxlO1xuICAgIGNvbnN0IGhhc0V4cGFuZCA9IHRoaXMudGFibGVDb25maWc/LmlzRXhwYW5kaWJsZTtcbiAgICBjb25zdCBoYXNBY3Rpb25zID0gdGhpcy50YWJsZUNvbmZpZz8uc2hvd0FjdGlvbnM7XG5cbiAgICBjb25zdCBjb2x1bW5UZW1wbGF0ZSA9IGByZXBlYXQoJHt0aGlzLnRhYmxlQ29sdW1ucy5sZW5ndGh9LCBtaW5tYXgoMTIwcHgsIDFmcikpYDtcblxuICAgIGNvbnN0IHBhcnRzID0gW1xuICAgICAgaGFzU2VsZWN0ID8gJ3ZhcigtLWNvbC1jaGVja2JveCwgNjJweCknIDogJycsXG4gICAgICBoYXNFeHBhbmQgPyAndmFyKC0tY29sLWV4cGFuZCwgNDBweCknIDogJycsXG4gICAgICBjb2x1bW5UZW1wbGF0ZSxcbiAgICAgIGhhc0FjdGlvbnMgPyAndmFyKC0tY29sLWFjdGlvbnMsIDgwcHgpJyA6ICcnLFxuICAgIF0uZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICctLWNvbC1jb3VudCc6IHRoaXMudGFibGVDb2x1bW5zLmxlbmd0aCxcbiAgICAgICctLWNvbC1jaGVja2JveCc6IGhhc1NlbGVjdCA/ICc2MnB4JyA6ICcwcHgnLFxuICAgICAgJy0tY29sLWV4cGFuZCc6IGhhc0V4cGFuZCA/ICc0MHB4JyA6ICcwcHgnLFxuICAgICAgJy0tY29sLWFjdGlvbnMnOiBoYXNBY3Rpb25zID8gJzgwcHgnIDogJzBweCcsXG4gICAgICAnLS1ncmlkLXRlbXBsYXRlJzogcGFydHMuam9pbignICcpLFxuICAgIH07XG4gIH1cblxuICB0cmFja0J5Q29sdW1uKGNvbHVtbjogYW55KTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICByZXR1cm4gY29sdW1uLmRlZiB8fCBjb2x1bW4ubGFiZWw7XG4gIH1cblxuICB0cmFja0J5Um93KHJvdzogYW55KTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICByZXR1cm4gcm93LmlkIHx8IHJvdy5zb2NpZWRhZDtcbiAgfVxufVxuIiwiPGRpdiBbbmdDbGFzc109XCJnZXRUYWJsZUNsYXNzZXMoKVwiIFtuZ1N0eWxlXT1cImNzc1ZhcnNcIj5cbiAgQGlmIChzaG93U2VhcmNoKCkgfHwgZmlsdGVyc1Zpc2libGUoKSkge1xuICAgIDxoZWFkZXIgY2xhc3M9XCJibWJfdGFibGVfbGl0ZS1oZWFkZXJcIj5cbiAgICAgIEBpZiAoc2hvd1NlYXJjaCgpKSB7XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiYm1iX3RhYmxlX2xpdGUtc2VhcmNoXCI+XG4gICAgICAgICAgPGJtYi1pbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJibWJfdGFibGVfbGl0ZS1pbnB1dFwiXG4gICAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidCdXNjYXInXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICBbaWNvbl09XCInc2VhcmNoJ1wiXG4gICAgICAgICAgICBbYXBwZWFyYW5jZV09XCInbm9ybWFsJ1wiXG4gICAgICAgICAgICBbY29udHJvbF09XCJzZWFyY2hDb250cm9sXCJcbiAgICAgICAgICA+PC9ibWItaW5wdXQ+XG4gICAgICAgICAgPGJtYi1hY3Rpb24taWNvblxuICAgICAgICAgICAgW2lkRWxlbWVudF09XCInJ1wiXG4gICAgICAgICAgICBbaWNvbl09XCInZmlsdGVyX2xpc3QnXCJcbiAgICAgICAgICAgIFtpY29uU2l6ZV09XCIyNFwiXG4gICAgICAgICAgICAoYnV0dG9uQ2xpY2spPVwidG9nZ2xlRmlsdGVycygpXCJcbiAgICAgICAgICA+PC9ibWItYWN0aW9uLWljb24+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJibWJfdGFibGVfbGl0ZS1maWx0ZXJcIj5cbiAgICAgICAgQGlmIChmaWx0ZXJzVmlzaWJsZSgpKSB7XG4gICAgICAgICAgQGZvciAoY29sdW1uIG9mIHBhcnNlZEZpbHRlcnNDb2x1bW5zKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJibWJfdGFibGVfbGl0ZS1maWx0ZXItaXRlbVwiPlxuICAgICAgICAgICAgICBAc3dpdGNoIChjb2x1bW4udHlwZSkge1xuICAgICAgICAgICAgICAgIEBjYXNlICgnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJtYl90YWJsZV9saXRlLWZpbHRlci1pdGVtLW51bWJlclwiPlxuICAgICAgICAgICAgICAgICAgICA8Ym1iLWlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImNvbHVtbi5sYWJlbCArICcgbcOtbmltbydcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cIidudW1iZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ03DrW4nXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCInbm9ybWFsJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwiZ2V0Rm9ybUNvbnRyb2woY29sdW1uLmRhdGFLZXkgKyAnX21pbicpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPGJtYi1pbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb2x1bW4ubGFiZWwgKyAnIG3DoXhpbW8nXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCInbnVtYmVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidNw6F4J1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiJ25vcm1hbCdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjb250cm9sXT1cImdldEZvcm1Db250cm9sKGNvbHVtbi5kYXRhS2V5ICsgJ19tYXgnKVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGNhc2UgKCdkYXRlJykge1xuICAgICAgICAgICAgICAgICAgPGJtYi1kYXRlLXJhbmdlXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjb2x1bW4ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJTdGFydERhdGVdPVwiJ0Rlc2RlJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlckVuZERhdGVdPVwiJ0hhc3RhJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpY29uXT1cIidjYWxlbmRhcl9tb250aCdcIlxuICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCInbm9ybWFsJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtkYXRlRm9ybWF0XT1cIidkZC9NTS95eXl5J1wiXG4gICAgICAgICAgICAgICAgICAgIFtjb250cm9sU3RhcnRdPVwiZ2V0Rm9ybUNvbnRyb2woY29sdW1uLmRhdGFLZXkgKyAnX2Zyb20nKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb250cm9sRW5kXT1cImdldEZvcm1Db250cm9sKGNvbHVtbi5kYXRhS2V5ICsgJ190bycpXCJcbiAgICAgICAgICAgICAgICAgICAgKHN0YXJ0RGF0ZUNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgICBnZXRGb3JtQ29udHJvbChjb2x1bW4uZGF0YUtleSArICdfZnJvbScpLnNldFZhbHVlKCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgKGVuZERhdGVDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgICAgICAgZ2V0Rm9ybUNvbnRyb2woY29sdW1uLmRhdGFLZXkgKyAnX3RvJykuc2V0VmFsdWUoJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgICAgICAgPGJtYi1pbnB1dFxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiY29sdW1uLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidGaWx0cmFyJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtjb250cm9sXT1cImdldEZvcm1Db250cm9sKGNvbHVtbi5kYXRhS2V5ICsgJ19jb250YWlucycpXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2hlYWRlcj5cbiAgfVxuXG4gIDxkaXYgY2xhc3M9XCJibWJfdGFibGVfbGl0ZS1jb250YWluZXJcIj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cImJtYl90YWJsZV9saXRlLWNvbnRhaW5lci10YWJsZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImJtYl90YWJsZV9saXRlLXJvdyBibWJfdGFibGVfbGl0ZS1yb3ctLWhlYWRlclwiPlxuICAgICAgICBAaWYgKHRhYmxlQ29uZmlnPy5pc1NlbGVjdGFibGUpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm1iX3RhYmxlX2xpdGUtdGggYm1iX3RhYmxlX2xpdGUtY2hlY2tib3hcIj5cbiAgICAgICAgICAgIDxibWItY2hlY2tib3hcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyB0b2dnbGVBbGxSb3dzKCkgOiBudWxsXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNBbGxTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgIWlzQWxsU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiY2hlY2tib3hMYWJlbCgpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKHRhYmxlQ29uZmlnPy5pc0V4cGFuZGlibGUpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm1iX3RhYmxlX2xpdGUtdGggYm1iX3RhYmxlX2xpdGUtZXhwYW5kXCI+Jm5ic3A7PC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICBAZm9yIChcbiAgICAgICAgICBjb2x1bW4gb2YgdGFibGVDb2x1bW5zO1xuICAgICAgICAgIHRyYWNrIHRyYWNrQnlDb2x1bW4oY29sdW1uKTtcbiAgICAgICAgICBsZXQgaSA9ICRpbmRleFxuICAgICAgICApIHtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImJtYl90YWJsZV9saXRlLXRoXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldEhlYWRlckNlbGxDbGFzc2VzKGkpXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJcbiAgICAgICAgICAgICAgbGFuZygpID09PSAnZXMnID8gY29sdW1uLmxhYmVsIDogY29sdW1uLmxhYmVsRW4gfHwgY29sdW1uLmxhYmVsXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uaWNvblwiPlxuICAgICAgICAgICAgICA8Ym1iLWljb24gW2ljb25dPVwiY29sdW1uLmljb25cIj48L2JtYi1pY29uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIEBpZiAoY29sdW1uLmh0bWxMYWJlbCkge1xuICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uaHRtbExhYmVsXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBjb2x1bW46IGNvbHVtbiwgaW5kZXg6IGkgfVwiXG4gICAgICAgICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYm1iX3RhYmxlX2xpdGUtdGgtdGV4dFwiPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICBsYW5nKCkgPT09ICdlcydcbiAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4ubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4ubGFiZWxFbiB8fCBjb2x1bW4ubGFiZWxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKHRhYmxlQ29uZmlnPy5zaG93QWN0aW9ucykge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJibWJfdGFibGVfbGl0ZS10aCBibWJfdGFibGVfbGl0ZS1hY3Rpb25zXCI+PC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuXG4gICAgICBAZm9yIChyb3cgb2YgcGFnZVNsaWNlOyB0cmFjayB0cmFja0J5Um93KHJvdyk7IGxldCBySW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlX2xpdGUtcm93XCJcbiAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3RSb3cocm93KVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2JtYl90YWJsZV9saXRlLWV2ZW4nOiBpc0V2ZW4ockluZGV4KSxcbiAgICAgICAgICAgICdibWJfdGFibGVfbGl0ZS1vZGQnOiBpc09kZChySW5kZXgpLFxuICAgICAgICAgICAgJ2JtYl90YWJsZV9saXRlLWV4cGFuZGlibGUnOiBleHBhbmRlZEVsZW1lbnQgPT09IHJvd1xuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgQGlmICh0YWJsZUNvbmZpZz8uaXNTZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm1iX3RhYmxlX2xpdGUtdGQgYm1iX3RhYmxlX2xpdGUtY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgPGJtYi1jaGVja2JveFxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiJGV2ZW50ID8gc2VsZWN0aW9uLnRvZ2dsZShyb3cpIDogbnVsbDsgb25TZWxlY3QoKVwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KVwiXG4gICAgICAgICAgICAgICAgW2FyaWFMYWJlbF09XCJjaGVja2JveExhYmVsKHJvdylcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgb25rZXlwcmVzcz1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaWYgKHRhYmxlQ29uZmlnPy5pc0V4cGFuZGlibGUpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJibWJfdGFibGVfbGl0ZS10ZCBibWJfdGFibGVfbGl0ZS1leHBhbmRcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYm1iX2J0bi1pY29uXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiZXhwYW5kIHJvd1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgZXhwYW5kZWRFbGVtZW50ID0gZXhwYW5kZWRFbGVtZW50ID09PSByb3cgPyBudWxsIDogcm93O1xuICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxibWItaWNvblxuICAgICAgICAgICAgICAgICAgW2ljb25dPVwiXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkRWxlbWVudCA9PT0gcm93ID8gJ2V4cGFuZF9sZXNzJyA6ICdleHBhbmRfbW9yZSdcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvYm1iLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICBjb2x1bW4gb2YgdGFibGVDb2x1bW5zO1xuICAgICAgICAgICAgdHJhY2sgdHJhY2tCeUNvbHVtbihjb2x1bW4pO1xuICAgICAgICAgICAgbGV0IGkgPSAkaW5kZXhcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJibWJfdGFibGVfbGl0ZS10ZFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzc2VzKHJvdywgY29sdW1uLmRhdGFLZXksIGkpXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cInJvd1tjb2x1bW4uZGF0YUtleV0/LnByb3BlcnR5TmFtZSB8fCByb3dbY29sdW1uLmRhdGFLZXldXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQGlmIChpc1RlbXBsYXRlUmVmKHJvd1tjb2x1bW4uZGF0YUtleSArICdUZW1wbGF0ZSddKSkge1xuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicm93W2NvbHVtbi5kYXRhS2V5ICsgJ1RlbXBsYXRlJ11cIlxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgcm93OiByb3cgfVwiXG4gICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5kYXRhS2V5XT8ucHJvcGVydHlOYW1lIHx8IHJvd1tjb2x1bW4uZGF0YUtleV0gfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpZiAodGFibGVDb25maWc/LnNob3dBY3Rpb25zKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm1iX3RhYmxlX2xpdGUtdGQgYm1iX3RhYmxlX2xpdGUtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgIHRhYmxlQ29sdW1ucy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICB0YWJsZUNvbHVtbnNbdGFibGVDb2x1bW5zLmxlbmd0aCAtIDFdLnRlbXBsYXRlQWN0aW9uc1xuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIlxuICAgICAgICAgICAgICAgICAgICB0YWJsZUNvbHVtbnNbdGFibGVDb2x1bW5zLmxlbmd0aCAtIDFdLnRlbXBsYXRlQWN0aW9ucyFcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3c6IHJvdyB9XCJcbiAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJhY3Rpb25UZW1wbGF0ZSgpIVwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3c6IHJvdyB9XCJcbiAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICBAaWYgKHRhYmxlQ29uZmlnPy5pc0V4cGFuZGlibGUpIHtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImJtYl90YWJsZV9saXRlLXJvdyBibWJfdGFibGVfbGl0ZS1kZXRhaWxzXCJcbiAgICAgICAgICAgIFtjbGFzcy5ibWJfdGFibGVfbGl0ZS1leHBhbmRlZF09XCJleHBhbmRlZEVsZW1lbnQgPT09IHJvd1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJtYl90YWJsZV9saXRlLWRldGFpbFwiICpuZ0lmPVwiZXhwYW5kZWRFbGVtZW50ID09PSByb3dcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGV0YWlsVGVtcGxhdGUoKTsgY29udGV4dDogeyByb3c6IHJvdyB9XCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA8L3NlY3Rpb24+XG5cbiAgICBAaWYgKHRhYmxlQ29uZmlnPy5pc1BhZ2luYWJsZSkge1xuICAgICAgPGRpdiBjbGFzcz1cImJtYl90YWJsZV9saXRlLXBhZ2luYXRvclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImJtYl90YWJsZV9saXRlLXBhZ2luYXRvci10ZXh0XCI+XG4gICAgICAgICAge3sgZ2V0UGFnaW5hdGlvblRleHQoKSB9fVxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlX2xpdGUtcGFnaW5hdG9yLWJ0blwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImlzRmlyc3RQYWdlKCkgfHwgaXNTaW5nbGVQYWdlKClcIlxuICAgICAgICAgIChjbGljayk9XCJnb1RvRmlyc3RQYWdlKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJtYi1pY29uXG4gICAgICAgICAgICBpY29uPVwia2V5Ym9hcmRfZG91YmxlX2Fycm93X2xlZnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJibWJfdGFibGVfbGl0ZS1wYWdpbmF0b3ItaWNvblwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlX2xpdGUtcGFnaW5hdG9yLWJ0blwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImlzRmlyc3RQYWdlKCkgfHwgaXNTaW5nbGVQYWdlKClcIlxuICAgICAgICAgIChjbGljayk9XCJnb1RvUHJldmlvdXNQYWdlKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJtYi1pY29uXG4gICAgICAgICAgICBpY29uPVwia2V5Ym9hcmRfYXJyb3dfbGVmdFwiXG4gICAgICAgICAgICBjbGFzcz1cImJtYl90YWJsZV9saXRlLXBhZ2luYXRvci1pY29uXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJibWJfdGFibGVfbGl0ZS1wYWdpbmF0b3ItYnRuXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNMYXN0UGFnZSgpIHx8IGlzU2luZ2xlUGFnZSgpXCJcbiAgICAgICAgICAoY2xpY2spPVwiZ29Ub05leHRQYWdlKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJtYi1pY29uXG4gICAgICAgICAgICBpY29uPVwia2V5Ym9hcmRfYXJyb3dfcmlnaHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJibWJfdGFibGVfbGl0ZS1wYWdpbmF0b3ItaWNvblwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYm1iX3RhYmxlX2xpdGUtcGFnaW5hdG9yLWJ0blwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImlzTGFzdFBhZ2UoKSB8fCBpc1NpbmdsZVBhZ2UoKVwiXG4gICAgICAgICAgKGNsaWNrKT1cImdvVG9MYXN0UGFnZSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxibWItaWNvblxuICAgICAgICAgICAgaWNvbj1cImtleWJvYXJkX2RvdWJsZV9hcnJvd19yaWdodFwiXG4gICAgICAgICAgICBjbGFzcz1cImJtYl90YWJsZV9saXRlLXBhZ2luYXRvci1pY29uXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|