spiderly 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/esm2022/lib/components/auth/auth.module.mjs +65 -0
- package/esm2022/lib/components/auth/login/login.component.mjs +60 -0
- package/esm2022/lib/components/auth/partials/auth.component.mjs +53 -0
- package/esm2022/lib/components/auth/partials/login-verification.component.mjs +39 -0
- package/esm2022/lib/components/auth/partials/registration-verification.component.mjs +37 -0
- package/esm2022/lib/components/auth/partials/verification-wrapper.component.mjs +74 -0
- package/esm2022/lib/components/auth/registration/registration.component.mjs +59 -0
- package/esm2022/lib/components/base-details/role-base-details.component.mjs +171 -0
- package/esm2022/lib/components/base-form/base-form copy.mjs +247 -0
- package/esm2022/lib/components/card-skeleton/card-skeleton.component.mjs +25 -0
- package/esm2022/lib/components/footer/footer.component.mjs +16 -0
- package/esm2022/lib/components/index-card/index-card.component.mjs +57 -0
- package/esm2022/lib/components/info-card/info-card.component.mjs +29 -0
- package/esm2022/lib/components/layout/layout-base.component.mjs +120 -0
- package/esm2022/lib/components/layout/sidebar/menuitem.component.mjs +161 -0
- package/esm2022/lib/components/layout/sidebar/sidebar-menu.component.mjs +34 -0
- package/esm2022/lib/components/layout/sidebar/sidebar-menu.service.mjs +26 -0
- package/esm2022/lib/components/layout/sidebar/sidebar.component.mjs +21 -0
- package/esm2022/lib/components/layout/topbar/topbar.component.mjs +115 -0
- package/esm2022/lib/components/not-found/not-found.component.mjs +20 -0
- package/esm2022/lib/components/required/required.component.mjs +12 -0
- package/esm2022/lib/components/spiderly-buttons/google-button/google-button.component.mjs +43 -0
- package/esm2022/lib/components/spiderly-buttons/return-button/return-button.component.mjs +37 -0
- package/esm2022/lib/components/spiderly-buttons/spiderly-button/spiderly-button.component.mjs +20 -0
- package/esm2022/lib/components/spiderly-buttons/spiderly-button-base/spiderly-button-base.mjs +68 -0
- package/esm2022/lib/components/spiderly-buttons/spiderly-split-button/spiderly-split-button.component.mjs +22 -0
- package/esm2022/lib/components/spiderly-data-table/spiderly-data-table.component.mjs +502 -0
- package/esm2022/lib/components/spiderly-delete-dialog/spiderly-delete-confirmation.component.mjs +42 -0
- package/esm2022/lib/components/spiderly-form-control/spiderly-form-control.mjs +36 -0
- package/esm2022/lib/components/spiderly-panels/panel-body/panel-body.component.mjs +19 -0
- package/esm2022/lib/components/spiderly-panels/panel-footer/panel-footer.component.mjs +14 -0
- package/esm2022/lib/components/spiderly-panels/panel-header/panel-header.component.mjs +49 -0
- package/esm2022/lib/components/spiderly-panels/spiderly-card/spiderly-card.component.mjs +20 -0
- package/esm2022/lib/components/spiderly-panels/spiderly-panel/spiderly-panel.component.mjs +63 -0
- package/esm2022/lib/components/spiderly-panels/spiderly-panels.module.mjs +49 -0
- package/esm2022/lib/controls/base-autocomplete-control.mjs +18 -0
- package/esm2022/lib/controls/base-control.mjs +62 -0
- package/esm2022/lib/controls/base-dropdown-control.mjs +37 -0
- package/esm2022/lib/controls/spiderly-autocomplete/spiderly-autocomplete.component.mjs +60 -0
- package/esm2022/lib/controls/spiderly-calendar/spiderly-calendar.component.mjs +39 -0
- package/esm2022/lib/controls/spiderly-checkbox/spiderly-checkbox.component.mjs +45 -0
- package/esm2022/lib/controls/spiderly-colorpick/spiderly-colorpick.component.mjs +40 -0
- package/esm2022/lib/controls/spiderly-controls.module.mjs +112 -0
- package/esm2022/lib/controls/spiderly-dropdown/spiderly-dropdown.component.mjs +40 -0
- package/esm2022/lib/controls/spiderly-editor/spiderly-editor.component.mjs +59 -0
- package/esm2022/lib/controls/spiderly-file/spiderly-file.component.mjs +106 -0
- package/esm2022/lib/controls/spiderly-multiautocomplete/spiderly-multiautocomplete.component.mjs +38 -0
- package/esm2022/lib/controls/spiderly-multiselect/spiderly-multiselect.component.mjs +34 -0
- package/esm2022/lib/controls/spiderly-number/spiderly-number.component.mjs +44 -0
- package/esm2022/lib/controls/spiderly-password/spiderly-password.component.mjs +37 -0
- package/esm2022/lib/controls/spiderly-textarea/spiderly-textarea.component.mjs +34 -0
- package/esm2022/lib/controls/spiderly-textbox/spiderly-textbox.component.mjs +45 -0
- package/esm2022/lib/entities/base-entity.mjs +18 -0
- package/esm2022/lib/entities/codebook.mjs +10 -0
- package/esm2022/lib/entities/init-company-auth-dialog-details.mjs +9 -0
- package/esm2022/lib/entities/init-top-bar-data.mjs +12 -0
- package/esm2022/lib/entities/is-authorized-for-save-event.mjs +9 -0
- package/esm2022/lib/entities/last-menu-icon-index-clicked.mjs +8 -0
- package/esm2022/lib/entities/lazy-load-selected-ids-result.mjs +11 -0
- package/esm2022/lib/entities/menuchangeevent.mjs +3 -0
- package/esm2022/lib/entities/mime-type.mjs +15 -0
- package/esm2022/lib/entities/namebook.mjs +9 -0
- package/esm2022/lib/entities/primeng-option.mjs +9 -0
- package/esm2022/lib/entities/security-entities.mjs +169 -0
- package/esm2022/lib/entities/simple-save-result.mjs +9 -0
- package/esm2022/lib/entities/spiderly-button.mjs +11 -0
- package/esm2022/lib/entities/table-filter-context.mjs +3 -0
- package/esm2022/lib/entities/table-filter-sort-meta.mjs +3 -0
- package/esm2022/lib/entities/table-filter.mjs +15 -0
- package/esm2022/lib/entities/table-response.mjs +3 -0
- package/esm2022/lib/enums/security-enums.mjs +26 -0
- package/esm2022/lib/enums/verification-type-codes.mjs +6 -0
- package/esm2022/lib/guards/auth.guard.mjs +40 -0
- package/esm2022/lib/guards/not-auth.guard.mjs +32 -0
- package/esm2022/lib/handlers/spiderly-error-handler.mjs +30 -0
- package/esm2022/lib/handlers/spiderly-transloco-fallback-strategy.mjs +24 -0
- package/esm2022/lib/interceptors/http-loading.interceptor.mjs +27 -0
- package/esm2022/lib/interceptors/json-parser.interceptor.mjs +47 -0
- package/esm2022/lib/interceptors/jwt.interceptor.mjs +27 -0
- package/esm2022/lib/interceptors/unauthorized.interceptor.mjs +64 -0
- package/esm2022/lib/modules/core.module.mjs +140 -0
- package/esm2022/lib/modules/primeng.module.mjs +278 -0
- package/esm2022/lib/modules/spiderly-transloco.module.mjs +44 -0
- package/esm2022/lib/services/api.service.security.mjs +86 -0
- package/esm2022/lib/services/app-initializer.mjs +6 -0
- package/esm2022/lib/services/app-layout-base.service.mjs +132 -0
- package/esm2022/lib/services/auth-base.service.mjs +220 -0
- package/esm2022/lib/services/base-form.service.mjs +124 -0
- package/esm2022/lib/services/config-base.service.mjs +33 -0
- package/esm2022/lib/services/helper-functions.mjs +229 -0
- package/esm2022/lib/services/spiderly-message.service.mjs +64 -0
- package/esm2022/lib/services/spiderly-transloco-loader.mjs +20 -0
- package/esm2022/lib/services/translate-labels-abstract.service.mjs +15 -0
- package/esm2022/lib/services/validator-abstract.service.mjs +51 -0
- package/esm2022/public-api.mjs +94 -0
- package/esm2022/spiderly.mjs +5 -0
- package/fesm2022/spiderly.mjs +4807 -0
- package/fesm2022/spiderly.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/auth/auth.module.d.ts +17 -0
- package/lib/components/auth/login/login.component.d.ts +35 -0
- package/lib/components/auth/partials/auth.component.d.ts +21 -0
- package/lib/components/auth/partials/login-verification.component.d.ts +18 -0
- package/lib/components/auth/partials/registration-verification.component.d.ts +17 -0
- package/lib/components/auth/partials/verification-wrapper.component.d.ts +31 -0
- package/lib/components/auth/registration/registration.component.d.ts +34 -0
- package/lib/components/base-details/role-base-details.component.d.ts +50 -0
- package/lib/components/base-form/base-form copy.d.ts +54 -0
- package/lib/components/card-skeleton/card-skeleton.component.d.ts +12 -0
- package/lib/components/footer/footer.component.d.ts +9 -0
- package/lib/components/index-card/index-card.component.d.ts +22 -0
- package/lib/components/info-card/info-card.component.d.ts +11 -0
- package/lib/components/layout/layout-base.component.d.ts +37 -0
- package/lib/components/layout/sidebar/menuitem.component.d.ts +43 -0
- package/lib/components/layout/sidebar/sidebar-menu.component.d.ts +23 -0
- package/lib/components/layout/sidebar/sidebar-menu.service.d.ts +12 -0
- package/lib/components/layout/sidebar/sidebar.component.d.ts +11 -0
- package/lib/components/layout/topbar/topbar.component.d.ts +45 -0
- package/lib/components/not-found/not-found.component.d.ts +9 -0
- package/lib/components/required/required.component.d.ts +6 -0
- package/lib/components/spiderly-buttons/google-button/google-button.component.d.ts +17 -0
- package/lib/components/spiderly-buttons/return-button/return-button.component.d.ts +10 -0
- package/lib/components/spiderly-buttons/spiderly-button/spiderly-button.component.d.ts +6 -0
- package/lib/components/spiderly-buttons/spiderly-button-base/spiderly-button-base.d.ts +27 -0
- package/lib/components/spiderly-buttons/spiderly-split-button/spiderly-split-button.component.d.ts +8 -0
- package/lib/components/spiderly-data-table/spiderly-data-table.component.d.ts +157 -0
- package/lib/components/spiderly-delete-dialog/spiderly-delete-confirmation.component.d.ts +11 -0
- package/lib/components/spiderly-form-control/spiderly-form-control.d.ts +37 -0
- package/lib/components/spiderly-panels/panel-body/panel-body.component.d.ts +9 -0
- package/lib/components/spiderly-panels/panel-footer/panel-footer.component.d.ts +8 -0
- package/lib/components/spiderly-panels/panel-header/panel-header.component.d.ts +29 -0
- package/lib/components/spiderly-panels/spiderly-card/spiderly-card.component.d.ts +10 -0
- package/lib/components/spiderly-panels/spiderly-panel/spiderly-panel.component.d.ts +25 -0
- package/lib/components/spiderly-panels/spiderly-panels.module.d.ts +13 -0
- package/lib/controls/base-autocomplete-control.d.ts +9 -0
- package/lib/controls/base-control.d.ts +23 -0
- package/lib/controls/base-dropdown-control.d.ts +18 -0
- package/lib/controls/spiderly-autocomplete/spiderly-autocomplete.component.d.ts +18 -0
- package/lib/controls/spiderly-calendar/spiderly-calendar.component.d.ts +13 -0
- package/lib/controls/spiderly-checkbox/spiderly-checkbox.component.d.ts +14 -0
- package/lib/controls/spiderly-colorpick/spiderly-colorpick.component.d.ts +11 -0
- package/lib/controls/spiderly-controls.module.d.ts +22 -0
- package/lib/controls/spiderly-dropdown/spiderly-dropdown.component.d.ts +14 -0
- package/lib/controls/spiderly-editor/spiderly-editor.component.d.ts +16 -0
- package/lib/controls/spiderly-file/spiderly-file.component.d.ts +36 -0
- package/lib/controls/spiderly-multiautocomplete/spiderly-multiautocomplete.component.d.ts +13 -0
- package/lib/controls/spiderly-multiselect/spiderly-multiselect.component.d.ts +11 -0
- package/lib/controls/spiderly-number/spiderly-number.component.d.ts +15 -0
- package/lib/controls/spiderly-password/spiderly-password.component.d.ts +12 -0
- package/lib/controls/spiderly-textarea/spiderly-textarea.component.d.ts +11 -0
- package/lib/controls/spiderly-textbox/spiderly-textbox.component.d.ts +15 -0
- package/lib/entities/base-entity.d.ts +14 -0
- package/lib/entities/codebook.d.ts +9 -0
- package/lib/entities/init-company-auth-dialog-details.d.ts +9 -0
- package/lib/entities/init-top-bar-data.d.ts +16 -0
- package/lib/entities/is-authorized-for-save-event.d.ts +9 -0
- package/lib/entities/last-menu-icon-index-clicked.d.ts +7 -0
- package/lib/entities/lazy-load-selected-ids-result.d.ts +9 -0
- package/lib/entities/menuchangeevent.d.ts +4 -0
- package/lib/entities/mime-type.d.ts +11 -0
- package/lib/entities/namebook.d.ts +9 -0
- package/lib/entities/primeng-option.d.ts +9 -0
- package/lib/entities/security-entities.d.ts +211 -0
- package/lib/entities/simple-save-result.d.ts +7 -0
- package/lib/entities/spiderly-button.d.ts +13 -0
- package/lib/entities/table-filter-context.d.ts +5 -0
- package/lib/entities/table-filter-sort-meta.d.ts +4 -0
- package/lib/entities/table-filter.d.ts +23 -0
- package/lib/entities/table-response.d.ts +4 -0
- package/lib/enums/security-enums.d.ts +22 -0
- package/lib/enums/verification-type-codes.d.ts +4 -0
- package/lib/guards/auth.guard.d.ts +15 -0
- package/lib/guards/not-auth.guard.d.ts +12 -0
- package/lib/handlers/spiderly-error-handler.d.ts +14 -0
- package/lib/handlers/spiderly-transloco-fallback-strategy.d.ts +13 -0
- package/lib/interceptors/http-loading.interceptor.d.ts +11 -0
- package/lib/interceptors/json-parser.interceptor.d.ts +11 -0
- package/lib/interceptors/jwt.interceptor.d.ts +11 -0
- package/lib/interceptors/unauthorized.interceptor.d.ts +16 -0
- package/lib/modules/core.module.d.ts +13 -0
- package/lib/modules/primeng.module.d.ts +42 -0
- package/lib/modules/spiderly-transloco.module.d.ts +9 -0
- package/lib/services/api.service.security.d.ts +35 -0
- package/lib/services/app-initializer.d.ts +4 -0
- package/lib/services/app-layout-base.service.d.ts +60 -0
- package/lib/services/auth-base.service.d.ts +55 -0
- package/lib/services/base-form.service.d.ts +27 -0
- package/lib/services/config-base.service.d.ts +24 -0
- package/lib/services/helper-functions.d.ts +37 -0
- package/lib/services/spiderly-message.service.d.ts +17 -0
- package/lib/services/spiderly-transloco-loader.d.ts +10 -0
- package/lib/services/translate-labels-abstract.service.d.ts +7 -0
- package/lib/services/validator-abstract.service.d.ts +13 -0
- package/package.json +60 -0
- package/public-api.d.ts +90 -0
- package/styles/components/spiderly-data-table/spiderly-data-table.component.scss +34 -0
- package/styles/components/spiderly-panels/panel-footer/panel-footer.component.scss +10 -0
- package/styles/styles/layout/_config.scss +42 -0
- package/styles/styles/layout/_content.scss +12 -0
- package/styles/styles/layout/_footer.scss +9 -0
- package/styles/styles/layout/_main.scss +28 -0
- package/styles/styles/layout/_menu.scss +135 -0
- package/styles/styles/layout/_mixins.scss +13 -0
- package/styles/styles/layout/_preloading.scss +47 -0
- package/styles/styles/layout/_responsive.scss +100 -0
- package/styles/styles/layout/_spiderly-controls.scss +12 -0
- package/styles/styles/layout/_topbar.scss +231 -0
- package/styles/styles/layout/_typography.scss +63 -0
- package/styles/styles/layout/_utils.scss +20 -0
- package/styles/styles/layout/_variables.scss +903 -0
- package/styles/styles/layout/layout.scss +13 -0
- package/styles/styles/shared.scss +519 -0
- package/styles/styles/styles.scss +6 -0
- package/styles/styles/theme/base/_colors.scss +18 -0
- package/styles/styles/theme/base/_common.scss +75 -0
- package/styles/styles/theme/base/_components.scss +106 -0
- package/styles/styles/theme/base/_mixins.scss +343 -0
- package/styles/styles/theme/base/components/button/_button.scss +564 -0
- package/styles/styles/theme/base/components/button/_speeddial.scss +96 -0
- package/styles/styles/theme/base/components/button/_splitbutton.scss +381 -0
- package/styles/styles/theme/base/components/data/_carousel.scss +37 -0
- package/styles/styles/theme/base/components/data/_datatable.scss +338 -0
- package/styles/styles/theme/base/components/data/_dataview.scss +55 -0
- package/styles/styles/theme/base/components/data/_filter.scss +138 -0
- package/styles/styles/theme/base/components/data/_orderlist.scss +103 -0
- package/styles/styles/theme/base/components/data/_organizationchart.scss +50 -0
- package/styles/styles/theme/base/components/data/_paginator.scss +92 -0
- package/styles/styles/theme/base/components/data/_picklist.scss +103 -0
- package/styles/styles/theme/base/components/data/_timeline.scss +81 -0
- package/styles/styles/theme/base/components/data/_tree.scss +149 -0
- package/styles/styles/theme/base/components/data/_treetable.scss +256 -0
- package/styles/styles/theme/base/components/data/_virtualscroller.scss +28 -0
- package/styles/styles/theme/base/components/file/_fileupload.scss +64 -0
- package/styles/styles/theme/base/components/input/_autocomplete.scss +118 -0
- package/styles/styles/theme/base/components/input/_calendar.scss +263 -0
- package/styles/styles/theme/base/components/input/_cascadeselect.scss +130 -0
- package/styles/styles/theme/base/components/input/_checkbox.scss +90 -0
- package/styles/styles/theme/base/components/input/_chips.scss +55 -0
- package/styles/styles/theme/base/components/input/_colorpicker.scss +26 -0
- package/styles/styles/theme/base/components/input/_dropdown.scss +152 -0
- package/styles/styles/theme/base/components/input/_editor.scss +122 -0
- package/styles/styles/theme/base/components/input/_inputgroup.scss +75 -0
- package/styles/styles/theme/base/components/input/_inputmask.scss +16 -0
- package/styles/styles/theme/base/components/input/_inputnumber.scss +28 -0
- package/styles/styles/theme/base/components/input/_inputswitch.scss +60 -0
- package/styles/styles/theme/base/components/input/_inputtext.scss +100 -0
- package/styles/styles/theme/base/components/input/_listbox.scss +82 -0
- package/styles/styles/theme/base/components/input/_multiselect.scss +173 -0
- package/styles/styles/theme/base/components/input/_password.scss +52 -0
- package/styles/styles/theme/base/components/input/_radiobutton.scss +78 -0
- package/styles/styles/theme/base/components/input/_rating.scss +55 -0
- package/styles/styles/theme/base/components/input/_selectbutton.scss +50 -0
- package/styles/styles/theme/base/components/input/_slider.scss +71 -0
- package/styles/styles/theme/base/components/input/_togglebutton.scss +48 -0
- package/styles/styles/theme/base/components/input/_treeselect.scss +139 -0
- package/styles/styles/theme/base/components/menu/_breadcrumb.scss +42 -0
- package/styles/styles/theme/base/components/menu/_contextmenu.scss +39 -0
- package/styles/styles/theme/base/components/menu/_dock.scss +95 -0
- package/styles/styles/theme/base/components/menu/_megamenu.scss +55 -0
- package/styles/styles/theme/base/components/menu/_menu.scss +37 -0
- package/styles/styles/theme/base/components/menu/_menubar.scss +141 -0
- package/styles/styles/theme/base/components/menu/_panelmenu.scss +153 -0
- package/styles/styles/theme/base/components/menu/_slidemenu.scss +59 -0
- package/styles/styles/theme/base/components/menu/_steps.scss +56 -0
- package/styles/styles/theme/base/components/menu/_tabmenu.scss +74 -0
- package/styles/styles/theme/base/components/menu/_tieredmenu.scss +43 -0
- package/styles/styles/theme/base/components/messages/_inlinemessage.scss +69 -0
- package/styles/styles/theme/base/components/messages/_message.scss +107 -0
- package/styles/styles/theme/base/components/messages/_toast.scss +103 -0
- package/styles/styles/theme/base/components/misc/_avatar.scss +30 -0
- package/styles/styles/theme/base/components/misc/_badge.scss +48 -0
- package/styles/styles/theme/base/components/misc/_blockui.scss +0 -0
- package/styles/styles/theme/base/components/misc/_chip.scss +42 -0
- package/styles/styles/theme/base/components/misc/_inplace.scss +17 -0
- package/styles/styles/theme/base/components/misc/_progressbar.scss +17 -0
- package/styles/styles/theme/base/components/misc/_scrolltop.scss +25 -0
- package/styles/styles/theme/base/components/misc/_skeleton.scss +8 -0
- package/styles/styles/theme/base/components/misc/_tag.scss +40 -0
- package/styles/styles/theme/base/components/misc/_terminal.scss +12 -0
- package/styles/styles/theme/base/components/multimedia/_galleria.scss +155 -0
- package/styles/styles/theme/base/components/multimedia/_image.scss +49 -0
- package/styles/styles/theme/base/components/overlay/_confirmpopup.scss +72 -0
- package/styles/styles/theme/base/components/overlay/_dialog.scss +73 -0
- package/styles/styles/theme/base/components/overlay/_overlaypanel.scss +64 -0
- package/styles/styles/theme/base/components/overlay/_sidebar.scss +27 -0
- package/styles/styles/theme/base/components/overlay/_tooltip.scss +33 -0
- package/styles/styles/theme/base/components/panel/_accordion.scss +119 -0
- package/styles/styles/theme/base/components/panel/_card.scss +30 -0
- package/styles/styles/theme/base/components/panel/_divider.scss +31 -0
- package/styles/styles/theme/base/components/panel/_fieldset.scss +47 -0
- package/styles/styles/theme/base/components/panel/_panel.scss +58 -0
- package/styles/styles/theme/base/components/panel/_scrollpanel.scss +6 -0
- package/styles/styles/theme/base/components/panel/_splitter.scss +19 -0
- package/styles/styles/theme/base/components/panel/_tabview.scss +82 -0
- package/styles/styles/theme/base/components/panel/_toolbar.scss +11 -0
- package/styles/styles/theme/saga/_extensions.scss +27 -0
- package/styles/styles/theme/saga/_variables.scss +1 -0
- package/styles/styles/theme/saga/saga-blue/_extensions.scss +2 -0
- package/styles/styles/theme/saga/saga-blue/_fonts.scss +1 -0
- package/styles/styles/theme/saga/saga-blue/_variables.scss +1 -0
- package/styles/styles/theme/saga/saga-blue/theme.scss +4 -0
|
@@ -0,0 +1,502 @@
|
|
|
1
|
+
import { Component, EventEmitter, Inject, Input, LOCALE_ID, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { SpiderlyDeleteConfirmationComponent } from '../spiderly-delete-dialog/spiderly-delete-confirmation.component';
|
|
3
|
+
import { CommonModule, formatDate } from '@angular/common';
|
|
4
|
+
import { FormsModule } from '@angular/forms';
|
|
5
|
+
import { firstValueFrom } from 'rxjs';
|
|
6
|
+
import { TranslocoDirective } from '@jsverse/transloco';
|
|
7
|
+
import { SpiderlyControlsModule } from '../../controls/spiderly-controls.module';
|
|
8
|
+
import { exportListToExcel } from '../../services/helper-functions';
|
|
9
|
+
import { PrimengModule } from '../../modules/primeng.module';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@angular/router";
|
|
12
|
+
import * as i2 from "primeng/dynamicdialog";
|
|
13
|
+
import * as i3 from "../../services/spiderly-message.service";
|
|
14
|
+
import * as i4 from "@jsverse/transloco";
|
|
15
|
+
import * as i5 from "@angular/forms";
|
|
16
|
+
import * as i6 from "@angular/common";
|
|
17
|
+
import * as i7 from "primeng/table";
|
|
18
|
+
import * as i8 from "primeng/api";
|
|
19
|
+
import * as i9 from "primeng/button";
|
|
20
|
+
import * as i10 from "primeng/multiselect";
|
|
21
|
+
import * as i11 from "primeng/tooltip";
|
|
22
|
+
import * as i12 from "primeng/checkbox";
|
|
23
|
+
import * as i13 from "../spiderly-buttons/spiderly-button/spiderly-button.component";
|
|
24
|
+
import * as i14 from "../../controls/spiderly-number/spiderly-number.component";
|
|
25
|
+
export class SpiderlyDataTableComponent {
|
|
26
|
+
;
|
|
27
|
+
constructor(router, dialogService, route, messageService, translocoService, locale) {
|
|
28
|
+
this.router = router;
|
|
29
|
+
this.dialogService = dialogService;
|
|
30
|
+
this.route = route;
|
|
31
|
+
this.messageService = messageService;
|
|
32
|
+
this.translocoService = translocoService;
|
|
33
|
+
this.locale = locale;
|
|
34
|
+
this.tableIcon = 'pi pi-list';
|
|
35
|
+
this.rows = 10;
|
|
36
|
+
this.showPaginator = true; // FT: Pass only when hasLazyLoad === false
|
|
37
|
+
this.showCardWrapper = true;
|
|
38
|
+
this.readonly = false;
|
|
39
|
+
this.onTotalRecordsChange = new EventEmitter();
|
|
40
|
+
this.loading = true;
|
|
41
|
+
this.newlySelectedItems = [];
|
|
42
|
+
this.fakeSelectedItems = []; // FT: Only for showing checkboxes, we will not send this to the backend
|
|
43
|
+
this.currentPageSelectedItemsFromDb = []; // FT: Made so we can add only newly selected items to the newlySelectedItems
|
|
44
|
+
this.unselectedItems = [];
|
|
45
|
+
this.onLazyLoad = new EventEmitter();
|
|
46
|
+
this.rowsSelectedNumber = 0;
|
|
47
|
+
this.isAllSelected = null;
|
|
48
|
+
this.fakeIsAllSelected = false; // FT: Only for showing checkboxes, we will not send this to the backend
|
|
49
|
+
this.isFirstTimeLazyLoad = true;
|
|
50
|
+
this.onIsAllSelectedChange = new EventEmitter();
|
|
51
|
+
this.matchModeDateOptions = [];
|
|
52
|
+
this.matchModeNumberOptions = [];
|
|
53
|
+
this.showAddButton = true;
|
|
54
|
+
this.showExportToExcelButton = true;
|
|
55
|
+
this.showReloadTableButton = false;
|
|
56
|
+
this.hasLazyLoad = true;
|
|
57
|
+
this.selectedItemIds = []; // FT: Pass only when hasLazyLoad === false, it's enough if the M2M association hasn't additional fields
|
|
58
|
+
this.selectedItems = []; // FT: Pass only when hasLazyLoad === false
|
|
59
|
+
this.onRowSelect = new EventEmitter();
|
|
60
|
+
this.onRowUnselect = new EventEmitter();
|
|
61
|
+
this.clientFilterCount = 0;
|
|
62
|
+
}
|
|
63
|
+
ngOnInit() {
|
|
64
|
+
this.matchModeDateOptions = [
|
|
65
|
+
{ label: this.translocoService.translate('OnDate'), value: 'equals' },
|
|
66
|
+
{ label: this.translocoService.translate('DatesBefore'), value: 'dateBefore' },
|
|
67
|
+
{ label: this.translocoService.translate('DatesAfter'), value: 'dateAfter' },
|
|
68
|
+
];
|
|
69
|
+
this.matchModeNumberOptions = [
|
|
70
|
+
{ label: this.translocoService.translate('Equals'), value: 'equals' },
|
|
71
|
+
{ label: this.translocoService.translate('MoreThan'), value: 'gte' },
|
|
72
|
+
{ label: this.translocoService.translate('LessThan'), value: 'lte' },
|
|
73
|
+
];
|
|
74
|
+
if (this.hasLazyLoad === false) {
|
|
75
|
+
this.clientLoad();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
lazyLoad(event) {
|
|
79
|
+
this.lastLazyLoadEvent = event;
|
|
80
|
+
let tableFilter = event;
|
|
81
|
+
tableFilter.additionalFilterIdLong = this.additionalFilterIdLong;
|
|
82
|
+
this.onLazyLoad.next(tableFilter);
|
|
83
|
+
this.getTableDataObservableMethod(tableFilter).subscribe({
|
|
84
|
+
next: async (res) => {
|
|
85
|
+
this.items = res.data;
|
|
86
|
+
this.totalRecords = res.totalRecords;
|
|
87
|
+
this.onTotalRecordsChange.next(res.totalRecords);
|
|
88
|
+
if (this.selectedLazyLoadObservableMethod != null) {
|
|
89
|
+
let selectedRowsMethodResult = await firstValueFrom(this.selectedLazyLoadObservableMethod(tableFilter));
|
|
90
|
+
this.currentPageSelectedItemsFromDb = [...selectedRowsMethodResult.selectedIds];
|
|
91
|
+
if (this.isFirstTimeLazyLoad == true) {
|
|
92
|
+
this.rowsSelectedNumber = selectedRowsMethodResult.totalRecordsSelected;
|
|
93
|
+
this.setFakeIsAllSelected();
|
|
94
|
+
this.isFirstTimeLazyLoad = false;
|
|
95
|
+
}
|
|
96
|
+
if (this.isAllSelected == true) {
|
|
97
|
+
let idsToInsert = [...this.items.map(x => x.id)];
|
|
98
|
+
idsToInsert = idsToInsert.filter(x => this.unselectedItems.includes(x) == false);
|
|
99
|
+
this.fakeSelectedItems = [...idsToInsert]; // FT: Only for showing checkboxes, we will not send this to the backend
|
|
100
|
+
}
|
|
101
|
+
else if (this.isAllSelected == false) {
|
|
102
|
+
this.fakeSelectedItems = [...this.newlySelectedItems]; // FT: Only for showing checkboxes, we will not send this to the backend
|
|
103
|
+
}
|
|
104
|
+
else if (this.isAllSelected == null) {
|
|
105
|
+
let idsToInsert = [...selectedRowsMethodResult.selectedIds, ...this.newlySelectedItems];
|
|
106
|
+
idsToInsert = idsToInsert.filter(x => this.unselectedItems.includes(x) == false);
|
|
107
|
+
this.fakeSelectedItems = [...idsToInsert];
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
this.loading = false;
|
|
111
|
+
},
|
|
112
|
+
error: () => {
|
|
113
|
+
this.loading = false;
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
clientLoad() {
|
|
118
|
+
this.loading = false;
|
|
119
|
+
this.loadFormArrayItems();
|
|
120
|
+
this.totalRecords = this.items.length;
|
|
121
|
+
this.onTotalRecordsChange.next(this.items.length);
|
|
122
|
+
if (this.getAlreadySelectedItemIds) {
|
|
123
|
+
this.selectedItemIds = this.getAlreadySelectedItemIds(this.additionalIndexes);
|
|
124
|
+
}
|
|
125
|
+
if (this.getAlreadySelectedItems) {
|
|
126
|
+
this.selectedItems = this.getAlreadySelectedItems(this.additionalIndexes);
|
|
127
|
+
}
|
|
128
|
+
this.rowsSelectedNumber = this.selectedItemIds.length;
|
|
129
|
+
this.setFakeIsAllSelected();
|
|
130
|
+
}
|
|
131
|
+
filter(event) {
|
|
132
|
+
if (this.hasLazyLoad && this.selectionMode === 'multiple')
|
|
133
|
+
this.selectAll(false); // FT: We need to do it like this because: totalRecords: 1 -> selectedRecords from earlyer selection 2 -> unselect current -> all checkbox is set to true
|
|
134
|
+
if (this.hasLazyLoad === false && this.selectionMode === 'multiple') {
|
|
135
|
+
if (this.clientFilterCount === 0) {
|
|
136
|
+
this.loadFormArrayItems();
|
|
137
|
+
this.clientFilterCount++;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
this.clientFilterCount--;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
loadFormArrayItems() {
|
|
145
|
+
this.items = this.getFormArrayItems(this.additionalIndexes);
|
|
146
|
+
this.items.forEach((item, index) => {
|
|
147
|
+
item.index = index;
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
getColHeaderWidth(filterType) {
|
|
151
|
+
switch (filterType) {
|
|
152
|
+
case 'text':
|
|
153
|
+
return 'min-width: 12rem;';
|
|
154
|
+
case 'date':
|
|
155
|
+
return 'min-width: 10rem;';
|
|
156
|
+
case 'multiselect':
|
|
157
|
+
return 'min-width: 12rem;';
|
|
158
|
+
case 'boolean':
|
|
159
|
+
return 'min-width: 8rem;';
|
|
160
|
+
case 'numeric':
|
|
161
|
+
return 'min-width: 12rem;';
|
|
162
|
+
default:
|
|
163
|
+
return 'width: 0rem;'; // fitting content of the row like this
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
getColMatchModeOptions(filterType) {
|
|
167
|
+
switch (filterType) {
|
|
168
|
+
case 'text':
|
|
169
|
+
return null;
|
|
170
|
+
case 'date':
|
|
171
|
+
return this.matchModeDateOptions;
|
|
172
|
+
case 'multiselect':
|
|
173
|
+
return null;
|
|
174
|
+
case 'boolean':
|
|
175
|
+
return null;
|
|
176
|
+
case 'numeric':
|
|
177
|
+
return this.matchModeNumberOptions;
|
|
178
|
+
default:
|
|
179
|
+
return null;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
getColMatchMode(filterType) {
|
|
183
|
+
switch (filterType) {
|
|
184
|
+
case 'text':
|
|
185
|
+
return 'contains';
|
|
186
|
+
case 'date':
|
|
187
|
+
return null;
|
|
188
|
+
case 'multiselect':
|
|
189
|
+
return 'in';
|
|
190
|
+
case 'boolean':
|
|
191
|
+
return 'equals';
|
|
192
|
+
case 'numeric':
|
|
193
|
+
return null;
|
|
194
|
+
default:
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
isDropOrMulti(filterType) {
|
|
199
|
+
if (filterType == 'dropdown' || filterType == 'multiselect') {
|
|
200
|
+
return true;
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
navigateToDetails(rowId) {
|
|
207
|
+
this.router.navigate([rowId], { relativeTo: this.route });
|
|
208
|
+
}
|
|
209
|
+
deleteObject(rowId) {
|
|
210
|
+
this.deleteRef = this.dialogService.open(SpiderlyDeleteConfirmationComponent, {
|
|
211
|
+
header: this.translocoService.translate('AreYouSure'),
|
|
212
|
+
width: '400px',
|
|
213
|
+
data: { deleteItemFromTableObservableMethod: this.deleteItemFromTableObservableMethod, id: rowId, }
|
|
214
|
+
});
|
|
215
|
+
this.deleteRef.onClose.subscribe((deletedSuccessfully) => {
|
|
216
|
+
if (deletedSuccessfully === true) {
|
|
217
|
+
this.messageService.successMessage(this.translocoService.translate('SuccessfullyDeletedMessage'));
|
|
218
|
+
this.reload();
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
reload() {
|
|
223
|
+
this.loading = true;
|
|
224
|
+
this.items = null;
|
|
225
|
+
this.lazyLoad(this.lastLazyLoadEvent);
|
|
226
|
+
}
|
|
227
|
+
showActions() {
|
|
228
|
+
return this.cols.some(x => x.actions?.length > 0);
|
|
229
|
+
}
|
|
230
|
+
getStyleForBodyColumn(col) {
|
|
231
|
+
switch (col.filterType) {
|
|
232
|
+
case 'numeric':
|
|
233
|
+
return 'text-align: right;';
|
|
234
|
+
default:
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
getClassForAction(action) {
|
|
239
|
+
switch (action.field) {
|
|
240
|
+
case 'Details':
|
|
241
|
+
return 'pi pi-pencil text-lg cursor-pointer primary-color';
|
|
242
|
+
case 'Delete':
|
|
243
|
+
return 'pi pi-trash text-lg text-red-500 cursor-pointer';
|
|
244
|
+
default:
|
|
245
|
+
return `${action.icon} ${action.style} text-lg cursor-pointer`;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
getMethodForAction(action, rowData) {
|
|
249
|
+
switch (action.field) {
|
|
250
|
+
case 'Details':
|
|
251
|
+
return this.navigateToDetails(rowData.id);
|
|
252
|
+
case 'Delete':
|
|
253
|
+
return this.deleteObject(rowData.id);
|
|
254
|
+
default:
|
|
255
|
+
return action.onClick(rowData.id);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
getRowData(rowData, col) {
|
|
259
|
+
switch (col.filterType) {
|
|
260
|
+
case 'text':
|
|
261
|
+
return rowData[col.field];
|
|
262
|
+
case 'date':
|
|
263
|
+
if (rowData[col.field] == null)
|
|
264
|
+
return null;
|
|
265
|
+
if (col.showTime)
|
|
266
|
+
return formatDate(rowData[col.field], 'dd.MM.yyyy. HH:mm', this.locale);
|
|
267
|
+
else
|
|
268
|
+
return formatDate(rowData[col.field], 'dd.MM.yyyy.', this.locale);
|
|
269
|
+
case 'multiselect':
|
|
270
|
+
return rowData[col.field];
|
|
271
|
+
case 'boolean':
|
|
272
|
+
return rowData[col.field] == true ? this.translocoService.translate('Yes') : this.translocoService.translate('No');
|
|
273
|
+
case 'numeric':
|
|
274
|
+
// TODO FT: make decimal pipe
|
|
275
|
+
return rowData[col.field];
|
|
276
|
+
default:
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
colTrackByFn(index, item) {
|
|
281
|
+
return item.field;
|
|
282
|
+
}
|
|
283
|
+
actionTrackByFn(index, item) {
|
|
284
|
+
return `${index}${item.field}`;
|
|
285
|
+
}
|
|
286
|
+
exportListToExcel() {
|
|
287
|
+
let tableFilter = this.lastLazyLoadEvent;
|
|
288
|
+
tableFilter.additionalFilterIdLong = this.additionalFilterIdLong;
|
|
289
|
+
exportListToExcel(this.exportTableDataToExcelObservableMethod, tableFilter);
|
|
290
|
+
}
|
|
291
|
+
clear(table) {
|
|
292
|
+
table.clear();
|
|
293
|
+
}
|
|
294
|
+
//#region Selection
|
|
295
|
+
setFakeIsAllSelected() {
|
|
296
|
+
if (this.rowsSelectedNumber == this.totalRecords)
|
|
297
|
+
this.fakeIsAllSelected = true;
|
|
298
|
+
else
|
|
299
|
+
this.fakeIsAllSelected = false;
|
|
300
|
+
}
|
|
301
|
+
selectAll(checked) {
|
|
302
|
+
this.unselectedItems.length = 0;
|
|
303
|
+
this.newlySelectedItems.length = 0;
|
|
304
|
+
if (checked == true) {
|
|
305
|
+
this.isAllSelected = true;
|
|
306
|
+
this.fakeIsAllSelected = true;
|
|
307
|
+
this.onIsAllSelectedChange.next(new AllClickEvent({ checked: true, additionalIndexes: this.additionalIndexes }));
|
|
308
|
+
this.rowsSelectedNumber = this.totalRecords;
|
|
309
|
+
this.fakeSelectedItems = [...this.items.map(x => x.id)];
|
|
310
|
+
this.selectedItemIds = [...this.items.map(x => x.id)];
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
this.isAllSelected = false;
|
|
314
|
+
this.fakeIsAllSelected = false;
|
|
315
|
+
this.onIsAllSelectedChange.next(new AllClickEvent({ checked: false, additionalIndexes: this.additionalIndexes }));
|
|
316
|
+
this.rowsSelectedNumber = 0;
|
|
317
|
+
this.fakeSelectedItems = [];
|
|
318
|
+
this.selectedItemIds = [];
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
selectRow(id, index) {
|
|
322
|
+
if (this.isRowSelected(id)) {
|
|
323
|
+
this.rowUnselect(id);
|
|
324
|
+
this.onRowUnselect.next(new RowClickEvent({ index: index, id: id, additionalIndexes: this.additionalIndexes }));
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
this.rowSelect(id);
|
|
328
|
+
this.onRowSelect.next(new RowClickEvent({ index: index, id: id, additionalIndexes: this.additionalIndexes }));
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
isRowSelected(id) {
|
|
332
|
+
if (this.hasLazyLoad) {
|
|
333
|
+
return this.fakeSelectedItems.find(x => x === id) != undefined;
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
return this.selectedItemIds.find(x => x === id) != undefined;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
rowSelect(id) {
|
|
340
|
+
if (this.isAllSelected == false || this.currentPageSelectedItemsFromDb.includes(id) == false) {
|
|
341
|
+
this.newlySelectedItems.push(id);
|
|
342
|
+
}
|
|
343
|
+
if (this.hasLazyLoad) {
|
|
344
|
+
this.fakeSelectedItems.push(id);
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
this.selectedItemIds.push(id);
|
|
348
|
+
}
|
|
349
|
+
this.rowsSelectedNumber++;
|
|
350
|
+
const index = this.unselectedItems.indexOf(id);
|
|
351
|
+
if (index !== -1) {
|
|
352
|
+
this.unselectedItems.splice(index, 1); // FT: Splice is mutating the array
|
|
353
|
+
}
|
|
354
|
+
this.setFakeIsAllSelected();
|
|
355
|
+
}
|
|
356
|
+
rowUnselect(id) {
|
|
357
|
+
if (this.isAllSelected == true || this.currentPageSelectedItemsFromDb.includes(id) == true) {
|
|
358
|
+
this.unselectedItems.push(id);
|
|
359
|
+
}
|
|
360
|
+
this.rowsSelectedNumber--;
|
|
361
|
+
const index = this.newlySelectedItems.indexOf(id);
|
|
362
|
+
const fakeIndex = this.fakeSelectedItems.indexOf(id);
|
|
363
|
+
const nonLazyLoadIndex = this.selectedItemIds.indexOf(id);
|
|
364
|
+
if (index !== -1) {
|
|
365
|
+
this.newlySelectedItems.splice(index, 1); // FT: Splice is mutating the array
|
|
366
|
+
}
|
|
367
|
+
if (fakeIndex !== -1) {
|
|
368
|
+
this.fakeSelectedItems.splice(fakeIndex, 1); // FT: Splice is mutating the array
|
|
369
|
+
}
|
|
370
|
+
if (nonLazyLoadIndex !== -1) {
|
|
371
|
+
this.selectedItemIds.splice(nonLazyLoadIndex, 1); // FT: Splice is mutating the array
|
|
372
|
+
}
|
|
373
|
+
this.setFakeIsAllSelected();
|
|
374
|
+
}
|
|
375
|
+
//#endregion
|
|
376
|
+
//#region Client side table
|
|
377
|
+
// FT: Can do it with Id also, because we are never adding the new record in the table at the same page.
|
|
378
|
+
getFormArrayControlByIndex(formControlName, index) {
|
|
379
|
+
if (this.getFormControl) {
|
|
380
|
+
return this.getFormControl(formControlName, index, this.additionalIndexes);
|
|
381
|
+
}
|
|
382
|
+
else {
|
|
383
|
+
return null;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SpiderlyDataTableComponent, deps: [{ token: i1.Router }, { token: i2.DialogService }, { token: i1.ActivatedRoute }, { token: i3.SpiderlyMessageService }, { token: i4.TranslocoService }, { token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
387
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SpiderlyDataTableComponent, isStandalone: true, selector: "spiderly-data-table", inputs: { tableTitle: "tableTitle", tableIcon: "tableIcon", items: "items", rows: "rows", cols: "cols", showPaginator: "showPaginator", showCardWrapper: "showCardWrapper", readonly: "readonly", getTableDataObservableMethod: "getTableDataObservableMethod", exportTableDataToExcelObservableMethod: "exportTableDataToExcelObservableMethod", deleteItemFromTableObservableMethod: "deleteItemFromTableObservableMethod", newlySelectedItems: "newlySelectedItems", unselectedItems: "unselectedItems", selectionMode: "selectionMode", selectedLazyLoadObservableMethod: "selectedLazyLoadObservableMethod", additionalFilterIdLong: "additionalFilterIdLong", showAddButton: "showAddButton", showExportToExcelButton: "showExportToExcelButton", showReloadTableButton: "showReloadTableButton", getFormArrayItems: "getFormArrayItems", hasLazyLoad: "hasLazyLoad", getAlreadySelectedItemIds: "getAlreadySelectedItemIds", getAlreadySelectedItems: "getAlreadySelectedItems", getFormControl: "getFormControl", additionalIndexes: "additionalIndexes" }, outputs: { onTotalRecordsChange: "onTotalRecordsChange", onLazyLoad: "onLazyLoad", onIsAllSelectedChange: "onIsAllSelectedChange", onRowSelect: "onRowSelect", onRowUnselect: "onRowUnselect" }, viewQueries: [{ propertyName: "table", first: true, predicate: ["dt"], descendants: true }], ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n <div [class]=\"showCardWrapper ? 'card responsive-card-padding overflow-auto' : ''\">\r\n <p-table #dt [value]=\"items\" [rows]=\"rows\" [rowHover]=\"true\" styleClass=\"p-datatable-gridlines\" [paginator]=\"showPaginator\" responsiveLayout=\"scroll\" [lazy]=\"hasLazyLoad\"\r\n (onLazyLoad)=\"lazyLoad($event)\" [totalRecords]=\"totalRecords\" class=\"spiderly-table\" [loading]=\"(items === undefined || loading === true)\" [selectionMode]=\"selectionMode\" dataKey=\"id\" \r\n (onFilter)=\"filter($event)\"> \r\n <ng-template pTemplate=\"caption\">\r\n <div class=\"table-header overflow-auto\">\r\n <div style=\"display: flex; align-items: center; gap: 8px;\">\r\n <i class=\"{{tableIcon}} text-2xl primary-color\"></i>\r\n <h5 style=\"margin: 0px;\">{{tableTitle}}</h5>\r\n </div>\r\n <div style=\"display: flex; gap: 8px;\">\r\n <button pButton [label]=\"t('ClearFilters')\" class=\"p-button-outlined remove-button-border-focus\" style=\"flex: none;\" icon=\"pi pi-filter-slash\" (click)=\"clear(dt)\"></button>\r\n <button pButton *ngIf=\"showExportToExcelButton\" [label]=\"t('ExportToExcel')\" class=\"p-button-outlined remove-button-border-focus\" style=\"flex: none;\" icon=\"pi pi-download\" (click)=\"exportListToExcel()\"></button>\r\n <button pButton *ngIf=\"showReloadTableButton\" [label]=\"t('Reload')\" class=\"p-button-outlined remove-button-border-focus\" style=\"flex: none;\" icon=\"pi pi-refresh\" (click)=\"reload()\"></button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width: 0rem;\" *ngIf=\"selectionMode == 'multiple'\">\r\n <div style=\"display: flex; gap: 8px;\">\r\n <p-checkbox [disabled]=\"readonly\" (onChange)=\"selectAll($event.checked)\" [(ngModel)]=\"fakeIsAllSelected\" [binary]=\"true\"></p-checkbox> ({{rowsSelectedNumber}})\r\n </div>\r\n </th>\r\n <ng-container *ngFor=\"let col of cols; trackBy: colTrackByFn\">\r\n <th [style]=\"getColHeaderWidth(col.filterType)\">\r\n <div style=\"display: flex; justify-content: space-between; align-items: center;\">\r\n {{col.name}}\r\n <!-- <p-sortIcon field=\"\"></p-sortIcon> -->\r\n <!-- <p-columnFilter type=\"date\" field=\"date\" display=\"menu\"></p-columnFilter> -->\r\n <p-columnFilter *ngIf=\"col.filterType != null\" [type]=\"col.filterType\" [field]=\"col.filterField ?? col.field\" display=\"menu\" [placeholder]=\"col.filterPlaceholder\" \r\n [showOperator]=\"false\" [showMatchModes]=\"col.showMatchModes\" [showAddButton]=\"col.showAddButton\" [matchModeOptions]=\"getColMatchModeOptions(col.filterType)\"\r\n [matchMode]=\"getColMatchMode(col.filterType)\"\r\n >\r\n <ng-container *ngIf=\"isDropOrMulti(col.filterType)\">\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filterCallback\">\r\n <p-multiSelect [ngModel]=\"value\" [options]=\"col.dropdownOrMultiselectValues\" [placeholder]=\"t('All')\" (onChange)=\"filter($event.value)\" optionLabel=\"label\" optionValue=\"value\" [style]=\"{'width':'240px'}\">\r\n <ng-template let-item pTemplate=\"item\">\r\n <div class=\"p-multiselect-representative-option\">\r\n <span class=\"ml-2\">{{ item.label }}</span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n </ng-template>\r\n </ng-container>\r\n </p-columnFilter>\r\n </div>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-index=\"rowIndex\" let-editing=\"editing\">\r\n <tr>\r\n <td *ngIf=\"selectionMode == 'multiple'\">\r\n <p-checkbox [disabled]=\"readonly\" (onChange)=\"selectRow(rowData.id, rowData.index)\" [ngModel]=\"isRowSelected(rowData.id)\" [binary]=\"true\"></p-checkbox>\r\n </td>\r\n <ng-container *ngFor=\"let col of cols; trackBy: colTrackByFn\">\r\n <td [pTooltip]=\"getRowData(rowData, col)\" [style]=\"getStyleForBodyColumn(col)\" *ngIf=\"!col.editable\">\r\n <div style=\"display: flex; align-items: center; justify-content: center; gap: 18px;\">\r\n <ng-container *ngFor=\"let action of col.actions; trackBy: actionTrackByFn\" >\r\n <span [pTooltip]=\"action.name\" [class]=\"getClassForAction(action)\" (click)=\"getMethodForAction(action, rowData)\"></span>\r\n </ng-container>\r\n </div>\r\n {{getRowData(rowData, col)}}\r\n </td>\r\n <td *ngIf=\"col.editable\">\r\n <spiderly-number [control]=\"getFormArrayControlByIndex(col.field, rowData.index)\" [showLabel]=\"false\"></spiderly-number>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"cols?.length + (selectionMode === 'multiple' ? 1 : 0)\">{{t('NoRecordsFound')}}</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"loadingbody\">\r\n <tr>\r\n <td [attr.colspan]=\"cols?.length + (selectionMode === 'multiple' ? 1 : 0)\">{{t('Loading')}}...</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"paginatorleft\">\r\n {{t('TotalRecords')}}: {{totalRecords}}\r\n </ng-template>\r\n <ng-template pTemplate=\"paginatorright\">\r\n <div style=\"display: flex; justify-content: end; gap: 10px;\">\r\n <spiderly-button *ngIf=\"showAddButton\" [label]=\"t('AddNew')\" icon=\"pi pi-plus\" (onClick)=\"navigateToDetails(0)\"></spiderly-button>\r\n </div>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n</ng-container>", styles: [".table-header{display:flex;justify-content:space-between;align-items:center}@media (max-width: 640px){.table-header{display:flex;flex-direction:column;align-items:start;gap:14px}}.spiderly-table .p-paginator{padding:1rem}@media (min-width: 1400px){.spiderly-table .p-paginator-left-content{position:absolute;padding:14px;left:0}}@media (min-width: 1400px){.spiderly-table .p-paginator-right-content{position:absolute;padding:14px;right:0}}\n", ":is() :is(.remove-button-border-focus:focus,.remove-button-border-focus:enabled:focus){box-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none;background-color:var(--gray-200)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: PrimengModule }, { kind: "component", type: i7.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i8.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i7.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons", "ariaLabel"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i9.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i10.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "directive", type: i11.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i12.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: SpiderlyControlsModule }, { kind: "component", type: i13.SpiderlyButtonComponent, selector: "spiderly-button" }, { kind: "component", type: i14.SpiderlyNumberComponent, selector: "spiderly-number", inputs: ["prefix", "showButtons", "decimal", "maxFractionDigits"] }] }); }
|
|
388
|
+
}
|
|
389
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SpiderlyDataTableComponent, decorators: [{
|
|
390
|
+
type: Component,
|
|
391
|
+
args: [{ selector: 'spiderly-data-table', imports: [
|
|
392
|
+
FormsModule,
|
|
393
|
+
CommonModule,
|
|
394
|
+
PrimengModule,
|
|
395
|
+
TranslocoDirective,
|
|
396
|
+
SpiderlyControlsModule,
|
|
397
|
+
], standalone: true, template: "<ng-container *transloco=\"let t\">\r\n <div [class]=\"showCardWrapper ? 'card responsive-card-padding overflow-auto' : ''\">\r\n <p-table #dt [value]=\"items\" [rows]=\"rows\" [rowHover]=\"true\" styleClass=\"p-datatable-gridlines\" [paginator]=\"showPaginator\" responsiveLayout=\"scroll\" [lazy]=\"hasLazyLoad\"\r\n (onLazyLoad)=\"lazyLoad($event)\" [totalRecords]=\"totalRecords\" class=\"spiderly-table\" [loading]=\"(items === undefined || loading === true)\" [selectionMode]=\"selectionMode\" dataKey=\"id\" \r\n (onFilter)=\"filter($event)\"> \r\n <ng-template pTemplate=\"caption\">\r\n <div class=\"table-header overflow-auto\">\r\n <div style=\"display: flex; align-items: center; gap: 8px;\">\r\n <i class=\"{{tableIcon}} text-2xl primary-color\"></i>\r\n <h5 style=\"margin: 0px;\">{{tableTitle}}</h5>\r\n </div>\r\n <div style=\"display: flex; gap: 8px;\">\r\n <button pButton [label]=\"t('ClearFilters')\" class=\"p-button-outlined remove-button-border-focus\" style=\"flex: none;\" icon=\"pi pi-filter-slash\" (click)=\"clear(dt)\"></button>\r\n <button pButton *ngIf=\"showExportToExcelButton\" [label]=\"t('ExportToExcel')\" class=\"p-button-outlined remove-button-border-focus\" style=\"flex: none;\" icon=\"pi pi-download\" (click)=\"exportListToExcel()\"></button>\r\n <button pButton *ngIf=\"showReloadTableButton\" [label]=\"t('Reload')\" class=\"p-button-outlined remove-button-border-focus\" style=\"flex: none;\" icon=\"pi pi-refresh\" (click)=\"reload()\"></button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width: 0rem;\" *ngIf=\"selectionMode == 'multiple'\">\r\n <div style=\"display: flex; gap: 8px;\">\r\n <p-checkbox [disabled]=\"readonly\" (onChange)=\"selectAll($event.checked)\" [(ngModel)]=\"fakeIsAllSelected\" [binary]=\"true\"></p-checkbox> ({{rowsSelectedNumber}})\r\n </div>\r\n </th>\r\n <ng-container *ngFor=\"let col of cols; trackBy: colTrackByFn\">\r\n <th [style]=\"getColHeaderWidth(col.filterType)\">\r\n <div style=\"display: flex; justify-content: space-between; align-items: center;\">\r\n {{col.name}}\r\n <!-- <p-sortIcon field=\"\"></p-sortIcon> -->\r\n <!-- <p-columnFilter type=\"date\" field=\"date\" display=\"menu\"></p-columnFilter> -->\r\n <p-columnFilter *ngIf=\"col.filterType != null\" [type]=\"col.filterType\" [field]=\"col.filterField ?? col.field\" display=\"menu\" [placeholder]=\"col.filterPlaceholder\" \r\n [showOperator]=\"false\" [showMatchModes]=\"col.showMatchModes\" [showAddButton]=\"col.showAddButton\" [matchModeOptions]=\"getColMatchModeOptions(col.filterType)\"\r\n [matchMode]=\"getColMatchMode(col.filterType)\"\r\n >\r\n <ng-container *ngIf=\"isDropOrMulti(col.filterType)\">\r\n <ng-template pTemplate=\"filter\" let-value let-filter=\"filterCallback\">\r\n <p-multiSelect [ngModel]=\"value\" [options]=\"col.dropdownOrMultiselectValues\" [placeholder]=\"t('All')\" (onChange)=\"filter($event.value)\" optionLabel=\"label\" optionValue=\"value\" [style]=\"{'width':'240px'}\">\r\n <ng-template let-item pTemplate=\"item\">\r\n <div class=\"p-multiselect-representative-option\">\r\n <span class=\"ml-2\">{{ item.label }}</span>\r\n </div>\r\n </ng-template>\r\n </p-multiSelect>\r\n </ng-template>\r\n </ng-container>\r\n </p-columnFilter>\r\n </div>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-rowData let-index=\"rowIndex\" let-editing=\"editing\">\r\n <tr>\r\n <td *ngIf=\"selectionMode == 'multiple'\">\r\n <p-checkbox [disabled]=\"readonly\" (onChange)=\"selectRow(rowData.id, rowData.index)\" [ngModel]=\"isRowSelected(rowData.id)\" [binary]=\"true\"></p-checkbox>\r\n </td>\r\n <ng-container *ngFor=\"let col of cols; trackBy: colTrackByFn\">\r\n <td [pTooltip]=\"getRowData(rowData, col)\" [style]=\"getStyleForBodyColumn(col)\" *ngIf=\"!col.editable\">\r\n <div style=\"display: flex; align-items: center; justify-content: center; gap: 18px;\">\r\n <ng-container *ngFor=\"let action of col.actions; trackBy: actionTrackByFn\" >\r\n <span [pTooltip]=\"action.name\" [class]=\"getClassForAction(action)\" (click)=\"getMethodForAction(action, rowData)\"></span>\r\n </ng-container>\r\n </div>\r\n {{getRowData(rowData, col)}}\r\n </td>\r\n <td *ngIf=\"col.editable\">\r\n <spiderly-number [control]=\"getFormArrayControlByIndex(col.field, rowData.index)\" [showLabel]=\"false\"></spiderly-number>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr>\r\n <td [attr.colspan]=\"cols?.length + (selectionMode === 'multiple' ? 1 : 0)\">{{t('NoRecordsFound')}}</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"loadingbody\">\r\n <tr>\r\n <td [attr.colspan]=\"cols?.length + (selectionMode === 'multiple' ? 1 : 0)\">{{t('Loading')}}...</td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"paginatorleft\">\r\n {{t('TotalRecords')}}: {{totalRecords}}\r\n </ng-template>\r\n <ng-template pTemplate=\"paginatorright\">\r\n <div style=\"display: flex; justify-content: end; gap: 10px;\">\r\n <spiderly-button *ngIf=\"showAddButton\" [label]=\"t('AddNew')\" icon=\"pi pi-plus\" (onClick)=\"navigateToDetails(0)\"></spiderly-button>\r\n </div>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n</ng-container>", styles: [".table-header{display:flex;justify-content:space-between;align-items:center}@media (max-width: 640px){.table-header{display:flex;flex-direction:column;align-items:start;gap:14px}}.spiderly-table .p-paginator{padding:1rem}@media (min-width: 1400px){.spiderly-table .p-paginator-left-content{position:absolute;padding:14px;left:0}}@media (min-width: 1400px){.spiderly-table .p-paginator-right-content{position:absolute;padding:14px;right:0}}\n", ":is() :is(.remove-button-border-focus:focus,.remove-button-border-focus:enabled:focus){box-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none;background-color:var(--gray-200)}\n"] }]
|
|
398
|
+
}], ctorParameters: () => [{ type: i1.Router }, { type: i2.DialogService }, { type: i1.ActivatedRoute }, { type: i3.SpiderlyMessageService }, { type: i4.TranslocoService }, { type: undefined, decorators: [{
|
|
399
|
+
type: Inject,
|
|
400
|
+
args: [LOCALE_ID]
|
|
401
|
+
}] }], propDecorators: { table: [{
|
|
402
|
+
type: ViewChild,
|
|
403
|
+
args: ['dt']
|
|
404
|
+
}], tableTitle: [{
|
|
405
|
+
type: Input
|
|
406
|
+
}], tableIcon: [{
|
|
407
|
+
type: Input
|
|
408
|
+
}], items: [{
|
|
409
|
+
type: Input
|
|
410
|
+
}], rows: [{
|
|
411
|
+
type: Input
|
|
412
|
+
}], cols: [{
|
|
413
|
+
type: Input
|
|
414
|
+
}], showPaginator: [{
|
|
415
|
+
type: Input
|
|
416
|
+
}], showCardWrapper: [{
|
|
417
|
+
type: Input
|
|
418
|
+
}], readonly: [{
|
|
419
|
+
type: Input
|
|
420
|
+
}], onTotalRecordsChange: [{
|
|
421
|
+
type: Output
|
|
422
|
+
}], getTableDataObservableMethod: [{
|
|
423
|
+
type: Input
|
|
424
|
+
}], exportTableDataToExcelObservableMethod: [{
|
|
425
|
+
type: Input
|
|
426
|
+
}], deleteItemFromTableObservableMethod: [{
|
|
427
|
+
type: Input
|
|
428
|
+
}], newlySelectedItems: [{
|
|
429
|
+
type: Input
|
|
430
|
+
}], unselectedItems: [{
|
|
431
|
+
type: Input
|
|
432
|
+
}], selectionMode: [{
|
|
433
|
+
type: Input
|
|
434
|
+
}], onLazyLoad: [{
|
|
435
|
+
type: Output
|
|
436
|
+
}], onIsAllSelectedChange: [{
|
|
437
|
+
type: Output
|
|
438
|
+
}], selectedLazyLoadObservableMethod: [{
|
|
439
|
+
type: Input
|
|
440
|
+
}], additionalFilterIdLong: [{
|
|
441
|
+
type: Input
|
|
442
|
+
}], showAddButton: [{
|
|
443
|
+
type: Input
|
|
444
|
+
}], showExportToExcelButton: [{
|
|
445
|
+
type: Input
|
|
446
|
+
}], showReloadTableButton: [{
|
|
447
|
+
type: Input
|
|
448
|
+
}], getFormArrayItems: [{
|
|
449
|
+
type: Input
|
|
450
|
+
}], hasLazyLoad: [{
|
|
451
|
+
type: Input
|
|
452
|
+
}], getAlreadySelectedItemIds: [{
|
|
453
|
+
type: Input
|
|
454
|
+
}], getAlreadySelectedItems: [{
|
|
455
|
+
type: Input
|
|
456
|
+
}], getFormControl: [{
|
|
457
|
+
type: Input
|
|
458
|
+
}], additionalIndexes: [{
|
|
459
|
+
type: Input
|
|
460
|
+
}], onRowSelect: [{
|
|
461
|
+
type: Output
|
|
462
|
+
}], onRowUnselect: [{
|
|
463
|
+
type: Output
|
|
464
|
+
}] } });
|
|
465
|
+
export class Action {
|
|
466
|
+
constructor({ name, field, icon, style, onClick, } = {}) {
|
|
467
|
+
this.name = name;
|
|
468
|
+
this.field = field;
|
|
469
|
+
this.icon = icon;
|
|
470
|
+
this.style = style;
|
|
471
|
+
this.onClick = onClick;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
export class Column {
|
|
475
|
+
constructor({ name, field, filterField, filterType, filterPlaceholder, showMatchModes, showAddButton, dropdownOrMultiselectValues, actions, editable, showTime, } = {}) {
|
|
476
|
+
this.name = name;
|
|
477
|
+
this.field = field;
|
|
478
|
+
this.filterField = filterField;
|
|
479
|
+
this.filterType = filterType;
|
|
480
|
+
this.filterPlaceholder = filterPlaceholder;
|
|
481
|
+
this.showMatchModes = showMatchModes;
|
|
482
|
+
this.showAddButton = showAddButton;
|
|
483
|
+
this.dropdownOrMultiselectValues = dropdownOrMultiselectValues;
|
|
484
|
+
this.actions = actions;
|
|
485
|
+
this.editable = editable;
|
|
486
|
+
this.showTime = showTime;
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
export class RowClickEvent {
|
|
490
|
+
constructor({ index, id, additionalIndexes } = {}) {
|
|
491
|
+
this.index = index;
|
|
492
|
+
this.id = id;
|
|
493
|
+
this.additionalIndexes = additionalIndexes;
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
export class AllClickEvent {
|
|
497
|
+
constructor({ checked, additionalIndexes } = {}) {
|
|
498
|
+
this.checked = checked;
|
|
499
|
+
this.additionalIndexes = additionalIndexes;
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BpZGVybHktZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGlkZXJseS9zcmMvbGliL2NvbXBvbmVudHMvc3BpZGVybHktZGF0YS10YWJsZS9zcGlkZXJseS1kYXRhLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwaWRlcmx5L3NyYy9saWIvY29tcG9uZW50cy9zcGlkZXJseS1kYXRhLXRhYmxlL3NwaWRlcmx5LWRhdGEtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUs3RyxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUN2SCxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsY0FBYyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBRWxELE9BQU8sRUFBRSxrQkFBa0IsRUFBb0IsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUlqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0QjdELE1BQU0sT0FBTywwQkFBMEI7SUFXcUMsQ0FBQztJQTRDM0UsWUFDVSxNQUFjLEVBQ2QsYUFBNEIsRUFDNUIsS0FBcUIsRUFDckIsY0FBc0MsRUFDdEMsZ0JB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Q0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsMkJBQTJCLENBQUM7UUFDL0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLGFBQWE7SUFLeEIsWUFDRSxFQUNFLEtBQUssRUFDTCxFQUFFLEVBQ0YsaUJBQWlCLEtBS2YsRUFBRTtRQUVOLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0lBQzdDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxhQUFhO0lBSXhCLFlBQ0UsRUFDRSxPQUFPLEVBQ1AsaUJBQWlCLEtBSWYsRUFBRTtRQUVOLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztJQUM3QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgTE9DQUxFX0lELCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTZWxlY3RJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBUYWJsZSwgVGFibGVGaWx0ZXJFdmVudCwgVGFibGVMYXp5TG9hZEV2ZW50IH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBTcGlkZXJseURlbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL3NwaWRlcmx5LWRlbGV0ZS1kaWFsb2cvc3BpZGVybHktZGVsZXRlLWNvbmZpcm1hdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIGZvcm1hdERhdGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3BpZGVybHlNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NwaWRlcmx5LW1lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFByaW1lbmdPcHRpb24gfSBmcm9tICcuLi8uLi9lbnRpdGllcy9wcmltZW5nLW9wdGlvbic7XHJcbmltcG9ydCB7IFRyYW5zbG9jb0RpcmVjdGl2ZSwgVHJhbnNsb2NvU2VydmljZSB9IGZyb20gJ0Bqc3ZlcnNlL3RyYW5zbG9jbyc7XHJcbmltcG9ydCB7IFNwaWRlcmx5Q29udHJvbHNNb2R1bGUgfSBmcm9tICcuLi8uLi9jb250cm9scy9zcGlkZXJseS1jb250cm9scy5tb2R1bGUnO1xyXG5pbXBvcnQgeyBTcGlkZXJseUZvcm1Db250cm9sIH0gZnJvbSAnLi4vc3BpZGVybHktZm9ybS1jb250cm9sL3NwaWRlcmx5LWZvcm0tY29udHJvbCc7XHJcbmltcG9ydCB7IFRhYmxlUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9lbnRpdGllcy90YWJsZS1yZXNwb25zZSc7XHJcbmltcG9ydCB7IExhenlMb2FkU2VsZWN0ZWRJZHNSZXN1bHQgfSBmcm9tICcuLi8uLi9lbnRpdGllcy9sYXp5LWxvYWQtc2VsZWN0ZWQtaWRzLXJlc3VsdCc7XHJcbmltcG9ydCB7IGV4cG9ydExpc3RUb0V4Y2VsIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaGVscGVyLWZ1bmN0aW9ucyc7XHJcbmltcG9ydCB7IFRhYmxlRmlsdGVyIH0gZnJvbSAnLi4vLi4vZW50aXRpZXMvdGFibGUtZmlsdGVyJztcclxuaW1wb3J0IHsgUHJpbWVuZ01vZHVsZSB9IGZyb20gJy4uLy4uL21vZHVsZXMvcHJpbWVuZy5tb2R1bGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzcGlkZXJseS1kYXRhLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc3BpZGVybHktZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICdzcGlkZXJseS1kYXRhLXRhYmxlLmNvbXBvbmVudC5zY3NzJyxcclxuICBzdHlsZXM6IFtgXHJcbiAgXHQ6aG9zdCB7XHJcblx0XHQgIDo6bmctZGVlcCB7XHJcblx0XHQgICAgLnJlbW92ZS1idXR0b24tYm9yZGVyLWZvY3VzOmZvY3VzLCBcclxuICAgICAgICAucmVtb3ZlLWJ1dHRvbi1ib3JkZXItZm9jdXM6ZW5hYmxlZDpmb2N1cyB7XHJcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcclxuICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XHJcbiAgICAgICAgLW1vei1ib3gtc2hhZG93OiBub25lO1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWdyYXktMjAwKTtcclxuXHRcdCAgICB9XHJcblx0XHQgIH1cclxuXHQgIH1cclxuICBgXSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFByaW1lbmdNb2R1bGUsXHJcbiAgICBUcmFuc2xvY29EaXJlY3RpdmUsXHJcbiAgICBTcGlkZXJseUNvbnRyb2xzTW9kdWxlLFxyXG4gIF0sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNwaWRlcmx5RGF0YVRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKCdkdCcpIHRhYmxlOiBUYWJsZTtcclxuICBASW5wdXQoKSB0YWJsZVRpdGxlOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdGFibGVJY29uOiBzdHJpbmcgPSAncGkgcGktbGlzdCc7XHJcbiAgQElucHV0KCkgaXRlbXM6IGFueVtdOyAvLyBGVDogUGFzcyBvbmx5IHdoZW4gaGFzTGF6eUxvYWQgPT09IGZhbHNlXHJcbiAgQElucHV0KCkgcm93czogbnVtYmVyID0gMTA7XHJcbiAgQElucHV0KCkgY29sczogQ29sdW1uW107XHJcbiAgQElucHV0KCkgc2hvd1BhZ2luYXRvcjogYm9vbGVhbiA9IHRydWU7IC8vIEZUOiBQYXNzIG9ubHkgd2hlbiBoYXNMYXp5TG9hZCA9PT0gZmFsc2VcclxuICBASW5wdXQoKSBzaG93Q2FyZFdyYXBwZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgdG90YWxSZWNvcmRzOiBudW1iZXI7XHJcbiAgQE91dHB1dCgpIG9uVG90YWxSZWNvcmRzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTs7XHJcbiAgXHJcbiAgQElucHV0KCkgZ2V0VGFibGVEYXRhT2JzZXJ2YWJsZU1ldGhvZDogKHRhYmxlRmlsdGVyOiBUYWJsZUZpbHRlcikgPT4gT2JzZXJ2YWJsZTxUYWJsZVJlc3BvbnNlPjtcclxuICBASW5wdXQoKSBleHBvcnRUYWJsZURhdGFUb0V4Y2VsT2JzZXJ2YWJsZU1ldGhvZDogKHRhYmxlRmlsdGVyOiBUYWJsZUZpbHRlcikgPT4gT2JzZXJ2YWJsZTxhbnk+O1xyXG4gIEBJbnB1dCgpIGRlbGV0ZUl0ZW1Gcm9tVGFibGVPYnNlcnZhYmxlTWV0aG9kOiAocm93SWQ6IG51bWJlcikgPT4gT2JzZXJ2YWJsZTxhbnk+O1xyXG5cclxuICBsYXN0TGF6eUxvYWRFdmVudDogVGFibGVMYXp5TG9hZEV2ZW50O1xyXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIFxyXG4gIEBJbnB1dCgpIG5ld2x5U2VsZWN0ZWRJdGVtczogbnVtYmVyW10gPSBbXTtcclxuICBmYWtlU2VsZWN0ZWRJdGVtczogbnVtYmVyW10gPSBbXTsgLy8gRlQ6IE9ubHkgZm9yIHNob3dpbmcgY2hlY2tib3hlcywgd2Ugd2lsbCBub3Qgc2VuZCB0aGlzIHRvIHRoZSBiYWNrZW5kXHJcbiAgY3VycmVudFBhZ2VTZWxlY3RlZEl0ZW1zRnJvbURiOiBudW1iZXJbXSA9IFtdOyAvLyBGVDogTWFkZSBzbyB3ZSBjYW4gYWRkIG9ubHkgbmV3bHkgc2VsZWN0ZWQgaXRlbXMgdG8gdGhlIG5ld2x5U2VsZWN0ZWRJdGVtc1xyXG4gIEBJbnB1dCgpIHVuc2VsZWN0ZWRJdGVtczogbnVtYmVyW10gPSBbXTtcclxuICBASW5wdXQoKSBzZWxlY3Rpb25Nb2RlOiAnc2luZ2xlJyB8ICdtdWx0aXBsZScgfCB1bmRlZmluZWQgfCBudWxsO1xyXG4gIEBPdXRwdXQoKSBvbkxhenlMb2FkOiBFdmVudEVtaXR0ZXI8VGFibGVGaWx0ZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHJvd3NTZWxlY3RlZE51bWJlcjogbnVtYmVyID0gMDtcclxuICBpc0FsbFNlbGVjdGVkOiBib29sZWFuID0gbnVsbDtcclxuICBmYWtlSXNBbGxTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlOyAvLyBGVDogT25seSBmb3Igc2hvd2luZyBjaGVja2JveGVzLCB3ZSB3aWxsIG5vdCBzZW5kIHRoaXMgdG8gdGhlIGJhY2tlbmRcclxuICBpc0ZpcnN0VGltZUxhenlMb2FkOiBib29sZWFuID0gdHJ1ZTtcclxuICBAT3V0cHV0KCkgb25Jc0FsbFNlbGVjdGVkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8QWxsQ2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRMYXp5TG9hZE9ic2VydmFibGVNZXRob2Q6ICh0YWJsZUZpbHRlcjogVGFibGVGaWx0ZXIpID0+IE9ic2VydmFibGU8TGF6eUxvYWRTZWxlY3RlZElkc1Jlc3VsdD47XHJcbiAgQElucHV0KCkgYWRkaXRpb25hbEZpbHRlcklkTG9uZzogbnVtYmVyO1xyXG4gIFxyXG4gIG1hdGNoTW9kZURhdGVPcHRpb25zOiBTZWxlY3RJdGVtW10gPSBbXTtcclxuICBtYXRjaE1vZGVOdW1iZXJPcHRpb25zOiBTZWxlY3RJdGVtW10gPSBbXTtcclxuICBASW5wdXQoKSBzaG93QWRkQnV0dG9uOiBib29sZWFuID0gdHJ1ZTsgXHJcbiAgQElucHV0KCkgc2hvd0V4cG9ydFRvRXhjZWxCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dSZWxvYWRUYWJsZUJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBkZWxldGVSZWY6IER5bmFtaWNEaWFsb2dSZWY7XHJcblxyXG4gIC8vIENsaWVudCBzaWRlIHRhYmxlXHJcbiAgLy8gQElucHV0KCkgZm9ybUFycmF5SXRlbXM6IGFueVtdOyAvLyBGVDogUGFzcyB0aGlzIG9ubHkgaWYgeW91IGhhdmUgc29tZSBhZGRpdGlvbmFsIGxvZ2ljIGZvciBzaG93aW5nIGRhdGFcclxuICBASW5wdXQoKSBnZXRGb3JtQXJyYXlJdGVtczogKGFkZGl0aW9uYWxJbmRleGVzPzogYW55KSA9PiBhbnlbXTtcclxuICBASW5wdXQoKSBoYXNMYXp5TG9hZDogYm9vbGVhbiA9IHRydWU7IFxyXG4gIHNlbGVjdGVkSXRlbUlkczogbnVtYmVyW10gPSBbXTsgLy8gRlQ6IFBhc3Mgb25seSB3aGVuIGhhc0xhenlMb2FkID09PSBmYWxzZSwgaXQncyBlbm91Z2ggaWYgdGhlIE0yTSBhc3NvY2lhdGlvbiBoYXNuJ3QgYWRkaXRpb25hbCBmaWVsZHNcclxuICBASW5wdXQoKSBnZXRBbHJlYWR5U2VsZWN0ZWRJdGVtSWRzOiAoYWRkaXRpb25hbEluZGV4ZXM/OiBhbnkpID0+IG51bWJlcltdOyAvLyBGVDogUGFzcyBvbmx5IHdoZW4gaGFzTGF6eUxvYWQgPT09IGZhbHNlLCBpdCdzIGVub3VnaCBpZiB0aGUgTTJNIGFzc29jaWF0aW9uIGhhc24ndCBhZGRpdGlvbmFsIGZpZWxkc1xyXG4gIHNlbGVjdGVkSXRlbXM6IGFueVtdID0gW107IC8vIEZUOiBQYXNzIG9ubHkgd2hlbiBoYXNMYXp5TG9hZCA9PT0gZmFsc2VcclxuICBASW5wdXQoKSBnZXRBbHJlYWR5U2VsZWN0ZWRJdGVtczogKGFkZGl0aW9uYWxJbmRleGVzPzogYW55KSA9PiBhbnlbXTsgLy8gRlQ6IFBhc3Mgb25seSB3aGVuIGhhc0xhenlMb2FkID09PSBmYWxzZSwgaXQncyBlbm91Z2ggaWYgdGhlIE0yTSBhc3NvY2lhdGlvbiBoYXNuJ3QgYWRkaXRpb25hbCBmaWVsZHNcclxuICBASW5wdXQoKSBnZXRGb3JtQ29udHJvbDogKGZvcm1Db250cm9sTmFtZTogc3RyaW5nLCBpbmRleDogbnVtYmVyLCBhZGRpdGlvbmFsSW5kZXhlcz86IGFueSkgPT4gU3BpZGVybHlGb3JtQ29udHJvbDtcclxuICBASW5wdXQoKSBhZGRpdGlvbmFsSW5kZXhlczogYW55O1xyXG4gIEBPdXRwdXQoKSBvblJvd1NlbGVjdDogRXZlbnRFbWl0dGVyPFJvd0NsaWNrRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvblJvd1Vuc2VsZWN0OiBFdmVudEVtaXR0ZXI8Um93Q2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogU3BpZGVybHlNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsb2NvU2VydmljZTogVHJhbnNsb2NvU2VydmljZSxcclxuICAgIEBJbmplY3QoTE9DQUxFX0lEKSBwcml2YXRlIGxvY2FsZTogc3RyaW5nXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubWF0Y2hNb2RlRGF0ZU9wdGlvbnMgPSBbXHJcbiAgICAgIHsgbGFiZWw6IHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ09uRGF0ZScpLCB2YWx1ZTogJ2VxdWFscycgfSxcclxuICAgICAgeyBsYWJlbDogdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgnRGF0ZXNCZWZvcmUnKSwgdmFsdWU6ICdkYXRlQmVmb3JlJyB9LFxyXG4gICAgICB7IGxhYmVsOiB0aGlzLnRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKCdEYXRlc0FmdGVyJyksIHZhbHVlOiAnZGF0ZUFmdGVyJyB9LFxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLm1hdGNoTW9kZU51bWJlck9wdGlvbnMgPSBbXHJcbiAgICAgIHsgbGFiZWw6IHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ0VxdWFscycpLCB2YWx1ZTogJ2VxdWFscycgfSxcclxuICAgICAgeyBsYWJlbDogdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgnTW9yZVRoYW4nKSwgdmFsdWU6ICdndGUnIH0sXHJcbiAgICAgIHsgbGFiZWw6IHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ0xlc3NUaGFuJyksIHZhbHVlOiAnbHRlJyB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAodGhpcy5oYXNMYXp5TG9hZCA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5jbGllbnRMb2FkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIGxhenlMb2FkKGV2ZW50OiBUYWJsZUxhenlMb2FkRXZlbnQpIHtcclxuICAgIHRoaXMubGFzdExhenlMb2FkRXZlbnQgPSBldmVudDtcclxuXHJcbiAgICBsZXQgdGFibGVGaWx0ZXI6IFRhYmxlRmlsdGVyID0gZXZlbnQgYXMgdW5rbm93biBhcyBUYWJsZUZpbHRlcjtcclxuICAgIHRhYmxlRmlsdGVyLmFkZGl0aW9uYWxGaWx0ZXJJZExvbmcgPSB0aGlzLmFkZGl0aW9uYWxGaWx0ZXJJZExvbmc7XHJcblxyXG4gICAgdGhpcy5vbkxhenlMb2FkLm5leHQodGFibGVGaWx0ZXIpO1xyXG4gICAgXHJcbiAgICB0aGlzLmdldFRhYmxlRGF0YU9ic2VydmFibGVNZXRob2QodGFibGVGaWx0ZXIpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IGFzeW5jIChyZXMpID0+IHsgXHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IHJlcy5kYXRhO1xyXG4gICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gcmVzLnRvdGFsUmVjb3JkcztcclxuICAgICAgICB0aGlzLm9uVG90YWxSZWNvcmRzQ2hhbmdlLm5leHQocmVzLnRvdGFsUmVjb3Jkcyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRMYXp5TG9hZE9ic2VydmFibGVNZXRob2QgIT0gbnVsbCkge1xyXG4gICAgICAgICAgbGV0IHNlbGVjdGVkUm93c01ldGhvZFJlc3VsdDogTGF6eUxvYWRTZWxlY3RlZElkc1Jlc3VsdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuc2VsZWN0ZWRMYXp5TG9hZE9ic2VydmFibGVNZXRob2QodGFibGVGaWx0ZXIpKTtcclxuICBcclxuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VTZWxlY3RlZEl0ZW1zRnJvbURiID0gWy4uLnNlbGVjdGVkUm93c01ldGhvZFJlc3VsdC5zZWxlY3RlZElkc107XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuaXNGaXJzdFRpbWVMYXp5TG9hZCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm93c1NlbGVjdGVkTnVtYmVyID0gc2VsZWN0ZWRSb3dzTWV0aG9kUmVzdWx0LnRvdGFsUmVjb3Jkc1NlbGVjdGVkO1xyXG4gICAgICAgICAgICB0aGlzLnNldEZha2VJc0FsbFNlbGVjdGVkKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNGaXJzdFRpbWVMYXp5TG9hZCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgICAgaWYgKHRoaXMuaXNBbGxTZWxlY3RlZCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGxldCBpZHNUb0luc2VydCA9IFsuLi50aGlzLml0ZW1zLm1hcCh4ID0+IHguaWQpXTtcclxuICAgICAgICAgICAgaWRzVG9JbnNlcnQgPSBpZHNUb0luc2VydC5maWx0ZXIoeCA9PiB0aGlzLnVuc2VsZWN0ZWRJdGVtcy5pbmNsdWRlcyh4KSA9PSBmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZmFrZVNlbGVjdGVkSXRlbXMgPSBbLi4uaWRzVG9JbnNlcnRdOyAvLyBGVDogT25seSBmb3Igc2hvd2luZyBjaGVja2JveGVzLCB3ZSB3aWxsIG5vdCBzZW5kIHRoaXMgdG8gdGhlIGJhY2tlbmRcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuaXNBbGxTZWxlY3RlZCA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZha2VTZWxlY3RlZEl0ZW1zID0gWy4uLnRoaXMubmV3bHlTZWxlY3RlZEl0ZW1zXTsgLy8gRlQ6IE9ubHkgZm9yIHNob3dpbmcgY2hlY2tib3hlcywgd2Ugd2lsbCBub3Qgc2VuZCB0aGlzIHRvIHRoZSBiYWNrZW5kXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBsZXQgaWRzVG9JbnNlcnQgPSBbLi4uc2VsZWN0ZWRSb3dzTWV0aG9kUmVzdWx0LnNlbGVjdGVkSWRzLCAuLi50aGlzLm5ld2x5U2VsZWN0ZWRJdGVtc107XHJcbiAgICAgICAgICAgIGlkc1RvSW5zZXJ0ID0gaWRzVG9JbnNlcnQuZmlsdGVyKHggPT4gdGhpcy51bnNlbGVjdGVkSXRlbXMuaW5jbHVkZXMoeCkgPT0gZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLmZha2VTZWxlY3RlZEl0ZW1zID0gWy4uLmlkc1RvSW5zZXJ0XTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbGllbnRMb2FkKCl7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmxvYWRGb3JtQXJyYXlJdGVtcygpO1xyXG4gICAgdGhpcy50b3RhbFJlY29yZHMgPSB0aGlzLml0ZW1zLmxlbmd0aDtcclxuICAgIHRoaXMub25Ub3RhbFJlY29yZHNDaGFuZ2UubmV4dCh0aGlzLml0ZW1zLmxlbmd0aCk7XHJcblxyXG4gICAgaWYgKHRoaXMuZ2V0QWxyZWFkeVNlbGVjdGVkSXRlbUlkcykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbUlkcyA9IHRoaXMuZ2V0QWxyZWFkeVNlbGVjdGVkSXRlbUlkcyh0aGlzLmFkZGl0aW9uYWxJbmRleGVzKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmdldEFscmVhZHlTZWxlY3RlZEl0ZW1zKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuZ2V0QWxyZWFkeVNlbGVjdGVkSXRlbXModGhpcy5hZGRpdGlvbmFsSW5kZXhlcyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJvd3NTZWxlY3RlZE51bWJlciA9IHRoaXMuc2VsZWN0ZWRJdGVtSWRzLmxlbmd0aDtcclxuICAgIHRoaXMuc2V0RmFrZUlzQWxsU2VsZWN0ZWQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xpZW50RmlsdGVyQ291bnQgPSAwO1xyXG5cclxuICBmaWx0ZXIoZXZlbnQ6IFRhYmxlRmlsdGVyRXZlbnQpe1xyXG4gICAgaWYgKHRoaXMuaGFzTGF6eUxvYWQgJiYgdGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbXVsdGlwbGUnKVxyXG4gICAgICB0aGlzLnNlbGVjdEFsbChmYWxzZSk7IC8vIEZUOiBXZSBuZWVkIHRvIGRvIGl0IGxpa2UgdGhpcyBiZWNhdXNlOiB0b3RhbFJlY29yZHM6IDEgLT4gc2VsZWN0ZWRSZWNvcmRzIGZyb20gZWFybHllciBzZWxlY3Rpb24gMiAtPiB1bnNlbGVjdCBjdXJyZW50IC0+IGFsbCBjaGVja2JveCBpcyBzZXQgdG8gdHJ1ZVxyXG5cclxuICAgIGlmICh0aGlzLmhhc0xhenlMb2FkID09PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aXBsZScpIHtcclxuICAgICAgaWYgKHRoaXMuY2xpZW50RmlsdGVyQ291bnQgPT09IDApIHtcclxuICAgICAgICB0aGlzLmxvYWRGb3JtQXJyYXlJdGVtcygpO1xyXG4gICAgICAgIHRoaXMuY2xpZW50RmlsdGVyQ291bnQrKztcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgdGhpcy5jbGllbnRGaWx0ZXJDb3VudC0tO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRGb3JtQXJyYXlJdGVtcygpe1xyXG4gICAgdGhpcy5pdGVtcyA9IHRoaXMuZ2V0Rm9ybUFycmF5SXRlbXModGhpcy5hZGRpdGlvbmFsSW5kZXhlcyk7XHJcbiAgICB0aGlzLml0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgIGl0ZW0uaW5kZXggPSBpbmRleDtcclxuICAgIH0pO1xyXG4gIH1cclxuICBcclxuICBnZXRDb2xIZWFkZXJXaWR0aChmaWx0ZXJUeXBlOiBzdHJpbmcpIHtcclxuICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkge1xyXG4gICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICByZXR1cm4gJ21pbi13aWR0aDogMTJyZW07JztcclxuICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgcmV0dXJuICdtaW4td2lkdGg6IDEwcmVtOyc7XHJcbiAgICAgIGNhc2UgJ211bHRpc2VsZWN0JzpcclxuICAgICAgICByZXR1cm4gJ21pbi13aWR0aDogMTJyZW07JztcclxuICAgICAgY2FzZSAnYm9vbGVhbic6XHJcbiAgICAgICAgcmV0dXJuICdtaW4td2lkdGg6IDhyZW07JztcclxuICAgICAgY2FzZSAnbnVtZXJpYyc6XHJcbiAgICAgICAgcmV0dXJuICdtaW4td2lkdGg6IDEycmVtOyc7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICd3aWR0aDogMHJlbTsnOyAvLyBmaXR0aW5nIGNvbnRlbnQgb2YgdGhlIHJvdyBsaWtlIHRoaXNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbE1hdGNoTW9kZU9wdGlvbnMoZmlsdGVyVHlwZTogc3RyaW5nKXtcclxuICAgIHN3aXRjaCAoZmlsdGVyVHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY2FzZSAnZGF0ZSc6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5tYXRjaE1vZGVEYXRlT3B0aW9ucztcclxuICAgICAgICBjYXNlICdtdWx0aXNlbGVjdCc6XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICBjYXNlICdib29sZWFuJzpcclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIGNhc2UgJ251bWVyaWMnOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMubWF0Y2hNb2RlTnVtYmVyT3B0aW9ucztcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICB9XHJcbiAgXHJcbiAgZ2V0Q29sTWF0Y2hNb2RlKGZpbHRlclR5cGU6IHN0cmluZyl7XHJcbiAgICBzd2l0Y2ggKGZpbHRlclR5cGUpIHtcclxuICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgIHJldHVybiAnY29udGFpbnMnO1xyXG4gICAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY2FzZSAnbXVsdGlzZWxlY3QnOlxyXG4gICAgICAgICAgcmV0dXJuICdpbic7XHJcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XHJcbiAgICAgICAgICByZXR1cm4gJ2VxdWFscyc7XHJcbiAgICAgICAgY2FzZSAnbnVtZXJpYyc6XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICB9XHJcblxyXG4gIGlzRHJvcE9yTXVsdGkoZmlsdGVyVHlwZTogc3RyaW5nKXtcclxuICAgIGlmIChmaWx0ZXJUeXBlID09ICdkcm9wZG93bicgfHwgZmlsdGVyVHlwZSA9PSAnbXVsdGlzZWxlY3QnKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IFxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGVUb0RldGFpbHMocm93SWQ6IG51bWJlcil7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcm93SWRdLCB7cmVsYXRpdmVUbzogdGhpcy5yb3V0ZX0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlT2JqZWN0KHJvd0lkOiBudW1iZXIpe1xyXG4gICAgdGhpcy5kZWxldGVSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihTcGlkZXJseURlbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCwgXHJcbiAgICAgIHsgXHJcbiAgICAgICAgaGVhZGVyOiB0aGlzLnRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKCdBcmVZb3VTdXJlJyksXHJcbiAgICAgICAgd2lkdGg6ICc0MDBweCcsXHJcbiAgICAgICAgZGF0YTp7IGRlbGV0ZUl0ZW1Gcm9tVGFibGVPYnNlcnZhYmxlTWV0aG9kOiB0aGlzLmRlbGV0ZUl0ZW1Gcm9tVGFibGVPYnNlcnZhYmxlTWV0aG9kLCBpZDogcm93SWQsIH0gXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5kZWxldGVSZWYub25DbG9zZS5zdWJzY3JpYmUoKGRlbGV0ZWRTdWNjZXNzZnVsbHk6IGJvb2xlYW4pPT57XHJcbiAgICAgICAgaWYoZGVsZXRlZFN1Y2Nlc3NmdWxseSA9PT0gdHJ1ZSl7XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnN1Y2Nlc3NNZXNzYWdlKHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ1N1Y2Nlc3NmdWxseURlbGV0ZWRNZXNzYWdlJykpO1xyXG4gICAgICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVsb2FkKCl7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5pdGVtcyA9IG51bGw7XHJcbiAgICB0aGlzLmxhenlMb2FkKHRoaXMubGFzdExhenlMb2FkRXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgc2hvd0FjdGlvbnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb2xzLnNvbWUoeCA9PiB4LmFjdGlvbnM/Lmxlbmd0aCA+IDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3R5bGVGb3JCb2R5Q29sdW1uKGNvbDogQ29sdW1uPGFueT4pIHtcclxuICAgIHN3aXRjaChjb2wuZmlsdGVyVHlwZSl7XHJcbiAgICAgIGNhc2UgJ251bWVyaWMnOlxyXG4gICAgICAgIHJldHVybiAndGV4dC1hbGlnbjogcmlnaHQ7JztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENsYXNzRm9yQWN0aW9uKGFjdGlvbjogQWN0aW9uKTogc3RyaW5ne1xyXG4gICAgc3dpdGNoKGFjdGlvbi5maWVsZCl7XHJcbiAgICAgIGNhc2UgJ0RldGFpbHMnOlxyXG4gICAgICAgIHJldHVybiAncGkgcGktcGVuY2lsIHRleHQtbGcgY3Vyc29yLXBvaW50ZXIgcHJpbWFyeS1jb2xvcic7XHJcbiAgICAgIGNhc2UgJ0RlbGV0ZSc6XHJcbiAgICAgICAgcmV0dXJuICdwaSBwaS10cmFzaCB0ZXh0LWxnIHRleHQtcmVkLTUwMCBjdXJzb3ItcG9pbnRlcic7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGAke2FjdGlvbi5pY29ufSAke2FjdGlvbi5zdHlsZX0gdGV4dC1sZyBjdXJzb3ItcG9pbnRlcmA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRNZXRob2RGb3JBY3Rpb24oYWN0aW9uOiBBY3Rpb24sIHJvd0RhdGE6IGFueSl7XHJcbiAgICBzd2l0Y2goYWN0aW9uLmZpZWxkKXtcclxuICAgICAgY2FzZSAnRGV0YWlscyc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUb0RldGFpbHMocm93RGF0YS5pZCk7XHJcbiAgICAgIGNhc2UgJ0RlbGV0ZSc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlT2JqZWN0KHJvd0RhdGEuaWQpO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBhY3Rpb24ub25DbGljayhyb3dEYXRhLmlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFJvd0RhdGEocm93RGF0YTogYW55LCBjb2w6IENvbHVtbik6IHN0cmluZ3tcclxuICAgICAgc3dpdGNoIChjb2wuZmlsdGVyVHlwZSkge1xyXG4gICAgICAgIGNhc2UgJ3RleHQnOlxyXG4gICAgICAgICAgcmV0dXJuIHJvd0RhdGFbY29sLmZpZWxkXTtcclxuICAgICAgICBjYXNlICdkYXRlJzpcclxuICAgICAgICAgIGlmIChyb3dEYXRhW2NvbC5maWVsZF0gPT0gbnVsbClcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGlmIChjb2wuc2hvd1RpbWUpXHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXREYXRlKHJvd0RhdGFbY29sLmZpZWxkXSwgJ2RkLk1NLnl5eXkuIEhIOm1tJywgdGhpcy5sb2NhbGUpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0RGF0ZShyb3dEYXRhW2NvbC5maWVsZF0sICdkZC5NTS55eXl5LicsIHRoaXMubG9jYWxlKTtcclxuICAgICAgICBjYXNlICdtdWx0aXNlbGVjdCc6XHJcbiAgICAgICAgICByZXR1cm4gcm93RGF0YVtjb2wuZmllbGRdO1xyXG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxyXG4gICAgICAgICAgcmV0dXJuIHJvd0RhdGFbY29sLmZpZWxkXSA9PSB0cnVlID8gdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgnWWVzJykgOiB0aGlzLnRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKCdObycpO1xyXG4gICAgICAgIGNhc2UgJ251bWVyaWMnOlxyXG4gICAgICAgICAgLy8gVE9ETyBGVDogbWFrZSBkZWNpbWFsIHBpcGVcclxuICAgICAgICAgIHJldHVybiByb3dEYXRhW2NvbC5maWVsZF07XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICBjb2xUcmFja0J5Rm4oaW5kZXgsIGl0ZW0pe1xyXG4gICAgcmV0dXJuIGl0ZW0uZmllbGQ7XHJcbiAgfVxyXG5cclxuICBhY3Rpb25UcmFja0J5Rm4oaW5kZXgsIGl0ZW06IEFjdGlvbil7XHJcbiAgICByZXR1cm4gYCR7aW5kZXh9JHtpdGVtLmZpZWxkfWBcclxuICB9XHJcblxyXG4gIGV4cG9ydExpc3RUb0V4Y2VsKCkge1xyXG4gICAgbGV0IHRhYmxlRmlsdGVyOiBUYWJsZUZpbHRlciA9IHRoaXMubGFzdExhenlMb2FkRXZlbnQgYXMgdW5rbm93biBhcyBUYWJsZUZpbHRlcjtcclxuICAgIHRhYmxlRmlsdGVyLmFkZGl0aW9uYWxGaWx0ZXJJZExvbmcgPSB0aGlzLmFkZGl0aW9uYWxGaWx0ZXJJZExvbmc7XHJcblxyXG4gICAgZXhwb3J0TGlzdFRvRXhjZWwodGhpcy5leHBvcnRUYWJsZURhdGFUb0V4Y2VsT2JzZXJ2YWJsZU1ldGhvZCwgdGFibGVGaWx0ZXIpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIodGFibGU6IFRhYmxlKSB7XHJcbiAgICB0YWJsZS5jbGVhcigpO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIFNlbGVjdGlvblxyXG5cclxuICBzZXRGYWtlSXNBbGxTZWxlY3RlZCgpe1xyXG4gICAgaWYodGhpcy5yb3dzU2VsZWN0ZWROdW1iZXIgPT0gdGhpcy50b3RhbFJlY29yZHMpXHJcbiAgICAgIHRoaXMuZmFrZUlzQWxsU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmZha2VJc0FsbFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RBbGwoY2hlY2tlZDogYm9vbGVhbil7XHJcbiAgICB0aGlzLnVuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPSAwO1xyXG4gICAgdGhpcy5uZXdseVNlbGVjdGVkSXRlbXMubGVuZ3RoID0gMDtcclxuXHJcbiAgICBpZiAoY2hlY2tlZCA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuaXNBbGxTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuZmFrZUlzQWxsU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLm9uSXNBbGxTZWxlY3RlZENoYW5nZS5uZXh0KG5ldyBBbGxDbGlja0V2ZW50KHtjaGVja2VkOiB0cnVlLCBhZGRpdGlvbmFsSW5kZXhlczogdGhpcy5hZGRpdGlvbmFsSW5kZXhlc30pKTtcclxuICAgICAgdGhpcy5yb3dzU2VsZWN0ZWROdW1iZXIgPSB0aGlzLnRvdGFsUmVjb3JkcztcclxuICAgICAgdGhpcy5mYWtlU2VsZWN0ZWRJdGVtcyA9IFsuLi50aGlzLml0ZW1zLm1hcCh4ID0+IHguaWQpXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JZHMgPSBbLi4udGhpcy5pdGVtcy5tYXAoeCA9PiB4LmlkKV1cclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMuaXNBbGxTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZha2VJc0FsbFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMub25Jc0FsbFNlbGVjdGVkQ2hhbmdlLm5leHQobmV3IEFsbENsaWNrRXZlbnQoe2NoZWNrZWQ6IGZhbHNlLCBhZGRpdGlvbmFsSW5kZXhlczogdGhpcy5hZGRpdGlvbmFsSW5kZXhlc30pKTtcclxuICAgICAgdGhpcy5yb3dzU2VsZWN0ZWROdW1iZXIgPSAwO1xyXG4gICAgICB0aGlzLmZha2VTZWxlY3RlZEl0ZW1zID0gW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSWRzID0gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RSb3coaWQ6IG51bWJlciwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuaXNSb3dTZWxlY3RlZChpZCkpIHtcclxuICAgICAgdGhpcy5yb3dVbnNlbGVjdChpZCk7XHJcbiAgICAgIHRoaXMub25Sb3dVbnNlbGVjdC5uZXh0KG5ldyBSb3dDbGlja0V2ZW50KHsgaW5kZXg6IGluZGV4LCBpZDogaWQsIGFkZGl0aW9uYWxJbmRleGVzOiB0aGlzLmFkZGl0aW9uYWxJbmRleGVzIH0pKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucm93U2VsZWN0KGlkKTtcclxuICAgICAgdGhpcy5vblJvd1NlbGVjdC5uZXh0KG5ldyBSb3dDbGlja0V2ZW50KHsgaW5kZXg6IGluZGV4LCBpZDogaWQsIGFkZGl0aW9uYWxJbmRleGVzOiB0aGlzLmFkZGl0aW9uYWxJbmRleGVzIH0pKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzUm93U2VsZWN0ZWQoaWQ6IG51bWJlcil7XHJcbiAgICBpZiAodGhpcy5oYXNMYXp5TG9hZCl7XHJcbiAgICAgIHJldHVybiB0aGlzLmZha2VTZWxlY3RlZEl0ZW1zLmZpbmQoeCA9PiB4ID09PSBpZCkgIT0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbUlkcy5maW5kKHggPT4geCA9PT0gaWQpICE9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJvd1NlbGVjdChpZDogbnVtYmVyKXtcclxuICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQgPT0gZmFsc2UgfHwgdGhpcy5jdXJyZW50UGFnZVNlbGVjdGVkSXRlbXNGcm9tRGIuaW5jbHVkZXMoaWQpID09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMubmV3bHlTZWxlY3RlZEl0ZW1zLnB1c2goaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhhc0xhenlMb2FkKXtcclxuICAgICAgdGhpcy5mYWtlU2VsZWN0ZWRJdGVtcy5wdXNoKGlkKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbUlkcy5wdXNoKGlkKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5yb3dzU2VsZWN0ZWROdW1iZXIrKztcclxuXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudW5zZWxlY3RlZEl0ZW1zLmluZGV4T2YoaWQpO1xyXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICB0aGlzLnVuc2VsZWN0ZWRJdGVtcy5zcGxpY2UoaW5kZXgsIDEpOyAvLyBGVDogU3BsaWNlIGlzIG11dGF0aW5nIHRoZSBhcnJheVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0RmFrZUlzQWxsU2VsZWN0ZWQoKTtcclxuICB9XHJcbiAgXHJcbiAgcm93VW5zZWxlY3QoaWQ6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuaXNBbGxTZWxlY3RlZCA9PSB0cnVlIHx8IHRoaXMuY3VycmVudFBhZ2VTZWxlY3RlZEl0ZW1zRnJvbURiLmluY2x1ZGVzKGlkKSA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMudW5zZWxlY3RlZEl0ZW1zLnB1c2goaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucm93c1NlbGVjdGVkTnVtYmVyLS07XHJcblxyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLm5ld2x5U2VsZWN0ZWRJdGVtcy5pbmRleE9mKGlkKTtcclxuICAgIGNvbnN0IGZha2VJbmRleCA9IHRoaXMuZmFrZVNlbGVjdGVkSXRlbXMuaW5kZXhPZihpZCk7XHJcbiAgICBjb25zdCBub25MYXp5TG9hZEluZGV4ID0gdGhpcy5zZWxlY3RlZEl0ZW1JZHMuaW5kZXhPZihpZCk7XHJcblxyXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICB0aGlzLm5ld2x5U2VsZWN0ZWRJdGVtcy5zcGxpY2UoaW5kZXgsIDEpOyAvLyBGVDogU3BsaWNlIGlzIG11dGF0aW5nIHRoZSBhcnJheVxyXG4gICAgfVxyXG4gICAgaWYgKGZha2VJbmRleCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5mYWtlU2VsZWN0ZWRJdGVtcy5zcGxpY2UoZmFrZUluZGV4LCAxKTsgLy8gRlQ6IFNwbGljZSBpcyBtdXRhdGluZyB0aGUgYXJyYXlcclxuICAgIH1cclxuICAgIGlmIChub25MYXp5TG9hZEluZGV4ICE9PSAtMSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbUlkcy5zcGxpY2Uobm9uTGF6eUxvYWRJbmRleCwgMSk7IC8vIEZUOiBTcGxpY2UgaXMgbXV0YXRpbmcgdGhlIGFycmF5XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRGYWtlSXNBbGxTZWxlY3RlZCgpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIENsaWVudCBzaWRlIHRhYmxlXHJcblxyXG4gIC8vIEZUOiBDYW4gZG8gaXQgd2l0aCBJZCBhbHNvLCBiZWNhdXNlIHdlIGFyZSBuZXZlciBhZGRpbmcgdGhlIG5ldyByZWNvcmQgaW4gdGhlIHRhYmxlIGF0IHRoZSBzYW1lIHBhZ2UuXHJcbiAgZ2V0Rm9ybUFycmF5Q29udHJvbEJ5SW5kZXgoZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBTcGlkZXJseUZvcm1Db250cm9se1xyXG4gICAgaWYgKHRoaXMuZ2V0Rm9ybUNvbnRyb2wpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybUNvbnRyb2woZm9ybUNvbnRyb2xOYW1lLCBpbmRleCwgdGhpcy5hZGRpdGlvbmFsSW5kZXhlcyk7XHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQWN0aW9uIHtcclxuICBuYW1lPzogc3RyaW5nO1xyXG4gIGZpZWxkPzogc3RyaW5nO1xyXG4gIGljb24/OiBzdHJpbmc7XHJcbiAgc3R5bGU/OiBzdHJpbmc7XHJcbiAgb25DbGljaz86IChpZDogbnVtYmVyKSA9PiB2b2lkO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHtcclxuICAgICAgbmFtZSxcclxuICAgICAgZmllbGQsXHJcbiAgICAgIGljb24sXHJcbiAgICAgIHN0eWxlLFxyXG4gICAgICBvbkNsaWNrLFxyXG4gICAgfTp7XHJcbiAgICAgIG5hbWU/OiBzdHJpbmc7XHJcbiAgICAgIGZpZWxkPzogc3RyaW5nO1xyXG4gICAgICBpY29uPzogc3RyaW5nO1xyXG4gICAgICBzdHlsZT86IHN0cmluZztcclxuICAgICAgb25DbGljaz86ICgpID0+IHZvaWQ7XHJcbiAgICB9ID0ge31cclxuICAgICkge1xyXG4gICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgICB0aGlzLmZpZWxkID0gZmllbGQ7XHJcbiAgICAgIHRoaXMuaWNvbiA9IGljb247XHJcbiAgICAgIHRoaXMuc3R5bGUgPSBzdHlsZTtcclxuICAgICAgdGhpcy5vbkNsaWNrID0gb25DbGljaztcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDb2x1bW48VCA9IGFueT4ge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBmaWVsZD86IHN0cmluZyAmIGtleW9mIFQ7XHJcbiAgZmlsdGVyRmllbGQ/OiBzdHJpbmcgJiBrZXlvZiBUOyAvLyBGVDogTWFkZSBzcGVjaWZpY2FseSBmb3IgbXVsdGlhdXRvY29tcGxldGUsIG1heWJlIGZvciBzb21ldGhpbmcgbW9yZSBpbiB0aGUgZnV0dXJlXHJcbiAgZmlsdGVyVHlwZT86ICd0ZXh0JyB8ICdkYXRlJyB8ICdtdWx0aXNlbGVjdCcgfCAnYm9vbGVhbicgfCAnbnVtZXJpYyc7XHJcbiAgZmlsdGVyUGxhY2Vob2xkZXI/OiBzdHJpbmc7XHJcbiAgc2hvd01hdGNoTW9kZXM/OiBib29sZWFuO1xyXG4gIHNob3dBZGRCdXR0b24/OiBib29sZWFuO1xyXG4gIGRyb3Bkb3duT3JNdWx0aXNlbGVjdFZhbHVlcz86IFByaW1lbmdPcHRpb25bXTtcclxuICBhY3Rpb25zPzogQWN0aW9uW107XHJcbiAgZWRpdGFibGU/OiBib29sZWFuO1xyXG4gIHNob3dUaW1lPzogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICB7XHJcbiAgICAgIG5hbWUsXHJcbiAgICAgIGZpZWxkLFxyXG4gICAgICBmaWx0ZXJGaWVsZCxcclxuICAgICAgZmlsdGVyVHlwZSxcclxuICAgICAgZmlsdGVyUGxhY2Vob2xkZXIsXHJcbiAgICAgIHNob3dNYXRjaE1vZGVzLFxyXG4gICAgICBzaG93QWRkQnV0dG9uLFxyXG4gICAgICBkcm9wZG93bk9yTXVsdGlzZWxlY3RWYWx1ZXMsXHJcbiAgICAgIGFjdGlvbnMsXHJcbiAgICAgIGVkaXRhYmxlLFxyXG4gICAgICBzaG93VGltZSxcclxuICAgIH06e1xyXG4gICAgICBuYW1lPzogc3RyaW5nO1xyXG4gICAgICBmaWVsZD86IHN0cmluZyAmIGtleW9mIFQ7XHJcbiAgICAgIGZpbHRlckZpZWxkPzogc3RyaW5nICYga2V5b2YgVDsgLy8gRlQ6IE1hZGUgc3BlY2lmaWNhbHkgZm9yIG11bHRpYXV0b2NvbXBsZXRlLCBtYXliZSBmb3Igc29tZXRoaW5nIG1vcmUgaW4gdGhlIGZ1dHVyZTtcclxuICAgICAgZmlsdGVyVHlwZT86ICd0ZXh0JyB8ICdkYXRlJyB8ICdtdWx0aXNlbGVjdCcgfCAnYm9vbGVhbicgfCAnbnVtZXJpYyc7XHJcbiAgICAgIGZpbHRlclBsYWNlaG9sZGVyPzogc3RyaW5nO1xyXG4gICAgICBzaG93TWF0Y2hNb2Rlcz86IGJvb2xlYW47XHJcbiAgICAgIHNob3dBZGRCdXR0b24/OiBib29sZWFuO1xyXG4gICAgICBkcm9wZG93bk9yTXVsdGlzZWxlY3RWYWx1ZXM/OiBQcmltZW5nT3B0aW9uW107XHJcbiAgICAgIGFjdGlvbnM/OiBBY3Rpb25bXTtcclxuICAgICAgZWRpdGFibGU/OiBib29sZWFuO1xyXG4gICAgICBzaG93VGltZT86IGJvb2xlYW47XHJcbiAgICB9ID0ge31cclxuICAgICkge1xyXG4gICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgICB0aGlzLmZpZWxkID0gZmllbGQ7XHJcbiAgICAgIHRoaXMuZmlsdGVyRmllbGQgPSBmaWx0ZXJGaWVsZDtcclxuICAgICAgdGhpcy5maWx0ZXJUeXBlID0gZmlsdGVyVHlwZTtcclxuICAgICAgdGhpcy5maWx0ZXJQbGFjZWhvbGRlciA9IGZpbHRlclBsYWNlaG9sZGVyO1xyXG4gICAgICB0aGlzLnNob3dNYXRjaE1vZGVzID0gc2hvd01hdGNoTW9kZXM7XHJcbiAgICAgIHRoaXMuc2hvd0FkZEJ1dHRvbiA9IHNob3dBZGRCdXR0b247XHJcbiAgICAgIHRoaXMuZHJvcGRvd25Pck11bHRpc2VsZWN0VmFsdWVzID0gZHJvcGRvd25Pck11bHRpc2VsZWN0VmFsdWVzO1xyXG4gICAgICB0aGlzLmFjdGlvbnMgPSBhY3Rpb25zO1xyXG4gICAgICB0aGlzLmVkaXRhYmxlID0gZWRpdGFibGU7XHJcbiAgICAgIHRoaXMuc2hvd1RpbWUgPSBzaG93VGltZTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSb3dDbGlja0V2ZW50IHtcclxuICBpbmRleD86IG51bWJlcjtcclxuICBpZD86IG51bWJlcjtcclxuICBhZGRpdGlvbmFsSW5kZXhlcz86IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICB7XHJcbiAgICAgIGluZGV4LCBcclxuICAgICAgaWQsIFxyXG4gICAgICBhZGRpdGlvbmFsSW5kZXhlc1xyXG4gICAgfTp7XHJcbiAgICAgIGluZGV4PzogbnVtYmVyOyBcclxuICAgICAgaWQ/OiBudW1iZXI7IFxyXG4gICAgICBhZGRpdGlvbmFsSW5kZXhlcz86IGFueTtcclxuICAgIH0gPSB7fVxyXG4gICAgKSB7XHJcbiAgICB0aGlzLmluZGV4ID0gaW5kZXg7XHJcbiAgICB0aGlzLmlkID0gaWQ7XHJcbiAgICB0aGlzLmFkZGl0aW9uYWxJbmRleGVzID0gYWRkaXRpb25hbEluZGV4ZXM7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQWxsQ2xpY2tFdmVudCB7XHJcbiAgY2hlY2tlZD86IGJvb2xlYW47XHJcbiAgYWRkaXRpb25hbEluZGV4ZXM/OiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAge1xyXG4gICAgICBjaGVja2VkLCBcclxuICAgICAgYWRkaXRpb25hbEluZGV4ZXNcclxuICAgIH06e1xyXG4gICAgICBjaGVja2VkPzogYm9vbGVhbjsgXHJcbiAgICAgIGFkZGl0aW9uYWxJbmRleGVzPzogYW55O1xyXG4gICAgfSA9IHt9XHJcbiAgICApIHtcclxuICAgIHRoaXMuY2hlY2tlZCA9IGNoZWNrZWQ7XHJcbiAgICB0aGlzLmFkZGl0aW9uYWxJbmRleGVzID0gYWRkaXRpb25hbEluZGV4ZXM7XHJcbiAgfVxyXG59IiwiPG5nLWNvbnRhaW5lciAqdHJhbnNsb2NvPVwibGV0IHRcIj5cclxuICA8ZGl2IFtjbGFzc109XCJzaG93Q2FyZFdyYXBwZXIgPyAnY2FyZCByZXNwb25zaXZlLWNhcmQtcGFkZGluZyBvdmVyZmxvdy1hdXRvJyA6ICcnXCI+XHJcbiAgICA8cC10YWJsZSAjZHQgW3ZhbHVlXT1cIml0ZW1zXCIgW3Jvd3NdPVwicm93c1wiIFtyb3dIb3Zlcl09XCJ0cnVlXCIgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLWdyaWRsaW5lc1wiIFtwYWdpbmF0b3JdPVwic2hvd1BhZ2luYXRvclwiIHJlc3BvbnNpdmVMYXlvdXQ9XCJzY3JvbGxcIiBbbGF6eV09XCJoYXNMYXp5TG9hZFwiXHJcbiAgICAob25MYXp5TG9hZCk9XCJsYXp5TG9hZCgkZXZlbnQpXCIgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIiBjbGFzcz1cInNwaWRlcmx5LXRhYmxlXCIgW2xvYWRpbmddPVwiKGl0ZW1zID09PSB1bmRlZmluZWQgfHwgbG9hZGluZyA9PT0gdHJ1ZSlcIiBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25Nb2RlXCIgZGF0YUtleT1cImlkXCIgXHJcbiAgICAob25GaWx0ZXIpPVwiZmlsdGVyKCRldmVudClcIj4gXHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLWhlYWRlciBvdmVyZmxvdy1hdXRvXCI+XHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA4cHg7XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwie3t0YWJsZUljb259fSB0ZXh0LTJ4bCBwcmltYXJ5LWNvbG9yXCI+PC9pPlxyXG4gICAgICAgICAgICA8aDUgc3R5bGU9XCJtYXJnaW46IDBweDtcIj57e3RhYmxlVGl0bGV9fTwvaDU+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBnYXA6IDhweDtcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIFtsYWJlbF09XCJ0KCdDbGVhckZpbHRlcnMnKVwiIGNsYXNzPVwicC1idXR0b24tb3V0bGluZWQgcmVtb3ZlLWJ1dHRvbi1ib3JkZXItZm9jdXNcIiBzdHlsZT1cImZsZXg6IG5vbmU7XCIgaWNvbj1cInBpIHBpLWZpbHRlci1zbGFzaFwiIChjbGljayk9XCJjbGVhcihkdClcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uICpuZ0lmPVwic2hvd0V4cG9ydFRvRXhjZWxCdXR0b25cIiBbbGFiZWxdPVwidCgnRXhwb3J0VG9FeGNlbCcpXCIgY2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZCByZW1vdmUtYnV0dG9uLWJvcmRlci1mb2N1c1wiIHN0eWxlPVwiZmxleDogbm9uZTtcIiBpY29uPVwicGkgcGktZG93bmxvYWRcIiAoY2xpY2spPVwiZXhwb3J0TGlzdFRvRXhjZWwoKVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gKm5nSWY9XCJzaG93UmVsb2FkVGFibGVCdXR0b25cIiBbbGFiZWxdPVwidCgnUmVsb2FkJylcIiBjbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkIHJlbW92ZS1idXR0b24tYm9yZGVyLWZvY3VzXCIgc3R5bGU9XCJmbGV4OiBub25lO1wiIGljb249XCJwaSBwaS1yZWZyZXNoXCIgKGNsaWNrKT1cInJlbG9hZCgpXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgIDx0cj5cclxuICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOiAwcmVtO1wiICpuZ0lmPVwic2VsZWN0aW9uTW9kZSA9PSAnbXVsdGlwbGUnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBnYXA6IDhweDtcIj5cclxuICAgICAgICAgICAgICA8cC1jaGVja2JveCBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIiAob25DaGFuZ2UpPVwic2VsZWN0QWxsKCRldmVudC5jaGVja2VkKVwiIFsobmdNb2RlbCldPVwiZmFrZUlzQWxsU2VsZWN0ZWRcIiBbYmluYXJ5XT1cInRydWVcIj48L3AtY2hlY2tib3g+ICh7e3Jvd3NTZWxlY3RlZE51bWJlcn19KVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sczsgdHJhY2tCeTogY29sVHJhY2tCeUZuXCI+XHJcbiAgICAgICAgICAgIDx0aCBbc3R5bGVdPVwiZ2V0Q29sSGVhZGVyV2lkdGgoY29sLmZpbHRlclR5cGUpXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgICAgIHt7Y29sLm5hbWV9fVxyXG4gICAgICAgICAgICAgICAgPCEtLSA8cC1zb3J0SWNvbiBmaWVsZD1cIlwiPjwvcC1zb3J0SWNvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxwLWNvbHVtbkZpbHRlciB0eXBlPVwiZGF0ZVwiIGZpZWxkPVwiZGF0ZVwiIGRpc3BsYXk9XCJtZW51XCI+PC9wLWNvbHVtbkZpbHRlcj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgKm5nSWY9XCJjb2wuZmlsdGVyVHlwZSAhPSBudWxsXCIgW3R5cGVdPVwiY29sLmZpbHRlclR5cGVcIiBbZmllbGRdPVwiY29sLmZpbHRlckZpZWxkID8/IGNvbC5maWVsZFwiIGRpc3BsYXk9XCJtZW51XCIgW3BsYWNlaG9sZGVyXT1cImNvbC5maWx0ZXJQbGFjZWhvbGRlclwiIFxyXG4gICAgICAgICAgICAgICAgW3Nob3dPcGVyYXRvcl09XCJmYWxzZVwiIFtzaG93TWF0Y2hNb2Rlc109XCJjb2wuc2hvd01hdGNoTW9kZXNcIiBbc2hvd0FkZEJ1dHRvbl09XCJjb2wuc2hvd0FkZEJ1dHRvblwiIFttYXRjaE1vZGVPcHRpb25zXT1cImdldENvbE1hdGNoTW9kZU9wdGlvbnMoY29sLmZpbHRlclR5cGUpXCJcclxuICAgICAgICAgICAgICAgIFttYXRjaE1vZGVdPVwiZ2V0Q29sTWF0Y2hNb2RlKGNvbC5maWx0ZXJUeXBlKVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNEcm9wT3JNdWx0aShjb2wuZmlsdGVyVHlwZSlcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cC1tdWx0aVNlbGVjdCBbbmdNb2RlbF09XCJ2YWx1ZVwiIFtvcHRpb25zXT1cImNvbC5kcm9wZG93bk9yTXVsdGlzZWxlY3RWYWx1ZXNcIiBbcGxhY2Vob2xkZXJdPVwidCgnQWxsJylcIiAob25DaGFuZ2UpPVwiZmlsdGVyKCRldmVudC52YWx1ZSlcIiBvcHRpb25MYWJlbD1cImxhYmVsXCIgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiIFtzdHlsZV09XCJ7J3dpZHRoJzonMjQwcHgnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1pdGVtIHBUZW1wbGF0ZT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtbXVsdGlzZWxlY3QtcmVwcmVzZW50YXRpdmUtb3B0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvcC1tdWx0aVNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3RyPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1yb3dEYXRhIGxldC1pbmRleD1cInJvd0luZGV4XCIgbGV0LWVkaXRpbmc9XCJlZGl0aW5nXCI+XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgPHRkICpuZ0lmPVwic2VsZWN0aW9uTW9kZSA9PSAnbXVsdGlwbGUnXCI+XHJcbiAgICAgICAgICAgICAgPHAtY2hlY2tib3ggW2Rpc2FibGVkXT1cInJlYWRvbmx5XCIgKG9uQ2hhbmdlKT1cInNlbGVjdFJvdyhyb3dEYXRhLmlkLCByb3dEYXRhLmluZGV4KVwiIFtuZ01vZGVsXT1cImlzUm93U2VsZWN0ZWQocm93RGF0YS5pZClcIiBbYmluYXJ5XT1cInRydWVcIj48L3AtY2hlY2tib3g+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHM7IHRyYWNrQnk6IGNvbFRyYWNrQnlGblwiPlxyXG4gICAgICAgICAgICA8dGQgW3BUb29sdGlwXT1cImdldFJvd0RhdGEocm93RGF0YSwgY29sKVwiIFtzdHlsZV09XCJnZXRTdHlsZUZvckJvZHlDb2x1bW4oY29sKVwiICpuZ0lmPVwiIWNvbC5lZGl0YWJsZVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZ2FwOiAxOHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbC5hY3Rpb25zOyB0cmFja0J5OiBhY3Rpb25UcmFja0J5Rm5cIiA+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtwVG9vbHRpcF09XCJhY3Rpb24ubmFtZVwiIFtjbGFzc109XCJnZXRDbGFzc0ZvckFjdGlvbihhY3Rpb24pXCIgKGNsaWNrKT1cImdldE1ldGhvZEZvckFjdGlvbihhY3Rpb24sIHJvd0RhdGEpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAge3tnZXRSb3dEYXRhKHJvd0RhdGEsIGNvbCl9fVxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJjb2wuZWRpdGFibGVcIj5cclxuICAgICAgICAgICAgICA8c3BpZGVybHktbnVtYmVyIFtjb250cm9sXT1cImdldEZvcm1BcnJheUNvbnRyb2xCeUluZGV4KGNvbC5maWVsZCwgcm93RGF0YS5pbmRleClcIiBbc2hvd0xhYmVsXT1cImZhbHNlXCI+PC9zcGlkZXJseS1udW1iZXI+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3RyPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiY29scz8ubGVuZ3RoICsgKHNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aXBsZScgPyAxIDogMClcIj57e3QoJ05vUmVjb3Jkc0ZvdW5kJyl9fTwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxvYWRpbmdib2R5XCI+XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiY29scz8ubGVuZ3RoICsgKHNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aXBsZScgPyAxIDogMClcIj57e3QoJ0xvYWRpbmcnKX19Li4uPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9ybGVmdFwiPlxyXG4gICAgICAgIHt7dCgnVG90YWxSZWNvcmRzJyl9fToge3t0b3RhbFJlY29yZHN9fVxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwicGFnaW5hdG9ycmlnaHRcIj5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBlbmQ7IGdhcDogMTBweDtcIj5cclxuICAgICAgICAgIDxzcGlkZXJseS1idXR0b24gKm5nSWY9XCJzaG93QWRkQnV0dG9uXCIgW2xhYmVsXT1cInQoJ0FkZE5ldycpXCIgaWNvbj1cInBpIHBpLXBsdXNcIiAob25DbGljayk9XCJuYXZpZ2F0ZVRvRGV0YWlscygwKVwiPjwvc3BpZGVybHktYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9wLXRhYmxlPlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj4iXX0=
|