@koalarx/ui 14.0.7 → 14.0.9
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/alert/esm2020/index.mjs +6 -6
- package/alert/esm2020/koalarx-ui-alert.mjs +4 -4
- package/alert/esm2020/lib/dialog-alert.component.mjs +48 -48
- package/alert/esm2020/lib/koala.alert-config.interface.mjs +1 -1
- package/alert/esm2020/lib/koala.alert.enum.mjs +8 -8
- package/alert/esm2020/lib/koala.alert.module.mjs +46 -46
- package/alert/esm2020/lib/koala.alert.service.mjs +19 -19
- package/alert/esm2020/lib/koala.request-code-to-alert-enum.translate.mjs +17 -17
- package/alert/fesm2015/koalarx-ui-alert.mjs +111 -111
- package/alert/fesm2015/koalarx-ui-alert.mjs.map +1 -1
- package/alert/fesm2020/koalarx-ui-alert.mjs +109 -109
- package/alert/fesm2020/koalarx-ui-alert.mjs.map +1 -1
- package/alert/index.d.ts +6 -6
- package/alert/lib/dialog-alert.component.d.ts +10 -10
- package/alert/lib/koala.alert-config.interface.d.ts +14 -14
- package/alert/lib/koala.alert.enum.d.ts +7 -7
- package/alert/lib/koala.alert.module.d.ts +12 -12
- package/alert/lib/koala.alert.service.d.ts +10 -10
- package/alert/lib/koala.request-code-to-alert-enum.translate.d.ts +4 -4
- package/button/esm2020/index.mjs +2 -2
- package/button/esm2020/koalarx-ui-button.mjs +4 -4
- package/button/esm2020/lib/button.component.mjs +44 -44
- package/button/esm2020/lib/koala.button.module.mjs +40 -40
- package/button/fesm2015/koalarx-ui-button.mjs +67 -67
- package/button/fesm2015/koalarx-ui-button.mjs.map +1 -1
- package/button/fesm2020/koalarx-ui-button.mjs +67 -67
- package/button/fesm2020/koalarx-ui-button.mjs.map +1 -1
- package/button/index.d.ts +2 -2
- package/button/lib/button.component.d.ts +18 -18
- package/button/lib/koala.button.module.d.ts +12 -12
- package/common/esm2020/index.mjs +4 -4
- package/common/esm2020/koalarx-ui-common.mjs +4 -4
- package/common/esm2020/lib/mask-options.mjs +3 -3
- package/common/esm2020/lib/services/csv/koala.csv.service.mjs +36 -36
- package/common/esm2020/lib/services/xlsx/koala.xlsx-config.interface.mjs +1 -1
- package/common/esm2020/lib/services/xlsx/koala.xlsx.service.mjs +127 -127
- package/common/fesm2015/koalarx-ui-common.mjs +160 -160
- package/common/fesm2015/koalarx-ui-common.mjs.map +1 -1
- package/common/fesm2020/koalarx-ui-common.mjs +155 -155
- package/common/fesm2020/koalarx-ui-common.mjs.map +1 -1
- package/common/index.d.ts +4 -4
- package/common/lib/mask-options.d.ts +2 -2
- package/common/lib/services/csv/koala.csv.service.d.ts +10 -10
- package/common/lib/services/xlsx/koala.xlsx-config.interface.d.ts +11 -11
- package/common/lib/services/xlsx/koala.xlsx.service.d.ts +12 -12
- package/core/esm2020/index.mjs +36 -36
- package/core/esm2020/koalarx-ui-core.mjs +4 -4
- package/core/esm2020/lib/environments/koalaEnvironment.mjs +3 -3
- package/core/esm2020/lib/helpers/mat-form-field.helper.mjs +16 -16
- package/core/esm2020/lib/loader/loader-bar-page.component.mjs +24 -24
- package/core/esm2020/lib/loader/loader-bar-page.interface.mjs +1 -1
- package/core/esm2020/lib/loader/loader-config.interface.mjs +1 -1
- package/core/esm2020/lib/ngx-koala.module.mjs +47 -47
- package/core/esm2020/lib/page/koala-language.helper.mjs +113 -113
- package/core/esm2020/lib/page/koala-page-pallet-colors.interface.mjs +1 -1
- package/core/esm2020/lib/page/koala.page.module.mjs +76 -76
- package/core/esm2020/lib/page/koala.user-menu-options.interface.mjs +1 -1
- package/core/esm2020/lib/page/notifications/koala.notification.interface.mjs +1 -1
- package/core/esm2020/lib/page/notifications/notification.component.mjs +43 -43
- package/core/esm2020/lib/page/page.component.mjs +302 -302
- package/core/esm2020/lib/router/koala.parameter-hash-location-stategy.mjs +18 -18
- package/core/esm2020/lib/services/api-requester/factory/koala.response.factory.mjs +43 -43
- package/core/esm2020/lib/services/api-requester/helpers/error/koala.client.error.mjs +2 -2
- package/core/esm2020/lib/services/api-requester/helpers/error/koala.errors.helper.mjs +45 -45
- package/core/esm2020/lib/services/api-requester/helpers/error/koala.not-found.error.mjs +2 -2
- package/core/esm2020/lib/services/api-requester/helpers/error/koala.success.error.mjs +2 -2
- package/core/esm2020/lib/services/api-requester/helpers/error/koala.unhautorized.error.mjs +2 -2
- package/core/esm2020/lib/services/api-requester/helpers/service/koala.request-header.helper.mjs +14 -14
- package/core/esm2020/lib/services/api-requester/koala.api-requester.base.mjs +86 -86
- package/core/esm2020/lib/services/api-requester/koala.api-requester.cache.mjs +37 -37
- package/core/esm2020/lib/services/api-requester/koala.api-requester.service.mjs +158 -158
- package/core/esm2020/lib/services/loader/koala.loader.service.mjs +34 -34
- package/core/esm2020/lib/services/openid/koala-oauth2-config.interface.mjs +1 -1
- package/core/esm2020/lib/services/openid/koala.oauth.config.mjs +29 -29
- package/core/esm2020/lib/services/openid/koala.oauth2.service.mjs +188 -188
- package/core/esm2020/lib/services/request/koala.request.service.mjs +52 -52
- package/core/esm2020/lib/services/token/koala.token.service.mjs +55 -55
- package/core/esm2020/lib/services/token/token.factory.mjs +26 -26
- package/core/fesm2015/koalarx-ui-core.mjs +1294 -1294
- package/core/fesm2015/koalarx-ui-core.mjs.map +1 -1
- package/core/fesm2020/koalarx-ui-core.mjs +1256 -1256
- package/core/fesm2020/koalarx-ui-core.mjs.map +1 -1
- package/core/index.d.ts +30 -30
- package/core/lib/environments/koalaEnvironment.d.ts +15 -15
- package/core/lib/helpers/mat-form-field.helper.d.ts +3 -3
- package/core/lib/loader/loader-bar-page.component.d.ts +9 -9
- package/core/lib/loader/loader-bar-page.interface.d.ts +5 -5
- package/core/lib/loader/loader-config.interface.d.ts +7 -7
- package/core/lib/ngx-koala.module.d.ts +12 -12
- package/core/lib/page/koala-language.helper.d.ts +19 -19
- package/core/lib/page/koala-page-pallet-colors.interface.d.ts +38 -38
- package/core/lib/page/koala.page.module.d.ts +21 -21
- package/core/lib/page/koala.user-menu-options.interface.d.ts +5 -5
- package/core/lib/page/notifications/koala.notification.interface.d.ts +6 -6
- package/core/lib/page/notifications/notification.component.d.ts +15 -15
- package/core/lib/page/page.component.d.ts +58 -58
- package/core/lib/router/koala.parameter-hash-location-stategy.d.ts +7 -7
- package/core/lib/services/api-requester/factory/koala.response.factory.d.ts +5 -5
- package/core/lib/services/api-requester/helpers/error/koala.client.error.d.ts +2 -2
- package/core/lib/services/api-requester/helpers/error/koala.errors.helper.d.ts +13 -13
- package/core/lib/services/api-requester/helpers/error/koala.not-found.error.d.ts +2 -2
- package/core/lib/services/api-requester/helpers/error/koala.success.error.d.ts +2 -2
- package/core/lib/services/api-requester/helpers/error/koala.unhautorized.error.d.ts +2 -2
- package/core/lib/services/api-requester/helpers/service/koala.request-header.helper.d.ts +4 -4
- package/core/lib/services/api-requester/koala.api-requester.base.d.ts +19 -19
- package/core/lib/services/api-requester/koala.api-requester.cache.d.ts +13 -13
- package/core/lib/services/api-requester/koala.api-requester.service.d.ts +24 -24
- package/core/lib/services/loader/koala.loader.service.d.ts +14 -14
- package/core/lib/services/openid/koala-oauth2-config.interface.d.ts +11 -11
- package/core/lib/services/openid/koala.oauth.config.d.ts +9 -9
- package/core/lib/services/openid/koala.oauth2.service.d.ts +82 -82
- package/core/lib/services/request/koala.request.service.d.ts +11 -11
- package/core/lib/services/token/koala.token.service.d.ts +26 -26
- package/core/lib/services/token/token.factory.d.ts +9 -9
- package/dialog/esm2020/index.mjs +3 -3
- package/dialog/esm2020/koalarx-ui-dialog.mjs +4 -4
- package/dialog/esm2020/lib/dialog.component.mjs +25 -25
- package/dialog/esm2020/lib/koala.dialog-template.interface.mjs +1 -1
- package/dialog/esm2020/lib/koala.dialog.module.mjs +36 -36
- package/dialog/esm2020/lib/koala.dialog.service.mjs +57 -57
- package/dialog/fesm2015/koalarx-ui-dialog.mjs +96 -96
- package/dialog/fesm2015/koalarx-ui-dialog.mjs.map +1 -1
- package/dialog/fesm2020/koalarx-ui-dialog.mjs +96 -96
- package/dialog/fesm2020/koalarx-ui-dialog.mjs.map +1 -1
- package/dialog/index.d.ts +3 -3
- package/dialog/lib/dialog.component.d.ts +11 -11
- package/dialog/lib/koala.dialog-template.interface.d.ts +9 -9
- package/dialog/lib/koala.dialog.module.d.ts +11 -11
- package/dialog/lib/koala.dialog.service.d.ts +14 -14
- package/dynamic-component/esm2020/index.mjs +5 -5
- package/dynamic-component/esm2020/koalarx-ui-dynamic-component.mjs +4 -4
- package/dynamic-component/esm2020/lib/koala-dynamic-component.component.mjs +1 -1
- package/dynamic-component/esm2020/lib/koala-dynamic-component.directive.mjs +16 -16
- package/dynamic-component/esm2020/lib/koala-dynamic-component.factory.mjs +40 -40
- package/dynamic-component/esm2020/lib/koala-dynamic-component.mjs +6 -6
- package/dynamic-component/esm2020/lib/koala-dynamic-component.module.mjs +23 -23
- package/dynamic-component/fesm2015/koalarx-ui-dynamic-component.mjs +71 -71
- package/dynamic-component/fesm2015/koalarx-ui-dynamic-component.mjs.map +1 -1
- package/dynamic-component/fesm2020/koalarx-ui-dynamic-component.mjs +70 -70
- package/dynamic-component/fesm2020/koalarx-ui-dynamic-component.mjs.map +1 -1
- package/dynamic-component/index.d.ts +5 -5
- package/dynamic-component/lib/koala-dynamic-component.component.d.ts +3 -3
- package/dynamic-component/lib/koala-dynamic-component.d.ts +6 -6
- package/dynamic-component/lib/koala-dynamic-component.directive.d.ts +8 -8
- package/dynamic-component/lib/koala-dynamic-component.factory.d.ts +14 -14
- package/dynamic-component/lib/koala-dynamic-component.module.d.ts +8 -8
- package/file-button/esm2020/index.mjs +4 -4
- package/file-button/esm2020/koalarx-ui-file-button.mjs +4 -4
- package/file-button/esm2020/lib/file-button.component.mjs +125 -125
- package/file-button/esm2020/lib/koala.btn-file.service.mjs +25 -25
- package/file-button/esm2020/lib/koala.file-button.module.mjs +36 -36
- package/file-button/esm2020/lib/koala.file.interface.mjs +1 -1
- package/file-button/fesm2015/koalarx-ui-file-button.mjs +174 -174
- package/file-button/fesm2015/koalarx-ui-file-button.mjs.map +1 -1
- package/file-button/fesm2020/koalarx-ui-file-button.mjs +165 -165
- package/file-button/fesm2020/koalarx-ui-file-button.mjs.map +1 -1
- package/file-button/index.d.ts +4 -4
- package/file-button/lib/file-button.component.d.ts +29 -29
- package/file-button/lib/koala.btn-file.service.d.ts +11 -11
- package/file-button/lib/koala.file-button.module.d.ts +11 -11
- package/file-button/lib/koala.file.interface.d.ts +5 -5
- package/folder-page/esm2020/index.mjs +3 -3
- package/folder-page/esm2020/koalarx-ui-folder-page.mjs +4 -4
- package/folder-page/esm2020/lib/folder.component.mjs +70 -70
- package/folder-page/esm2020/lib/koala-navigate-history.interface.mjs +1 -1
- package/folder-page/esm2020/lib/koala.folder-page.module.mjs +40 -40
- package/folder-page/fesm2015/koalarx-ui-folder-page.mjs +95 -95
- package/folder-page/fesm2015/koalarx-ui-folder-page.mjs.map +1 -1
- package/folder-page/fesm2020/koalarx-ui-folder-page.mjs +94 -94
- package/folder-page/fesm2020/koalarx-ui-folder-page.mjs.map +1 -1
- package/folder-page/index.d.ts +3 -3
- package/folder-page/lib/folder.component.d.ts +21 -21
- package/folder-page/lib/koala-navigate-history.interface.d.ts +4 -4
- package/folder-page/lib/koala.folder-page.module.d.ts +12 -12
- package/form/esm2020/index.mjs +19 -19
- package/form/esm2020/koalarx-ui-form.mjs +4 -4
- package/form/esm2020/lib/btn-submit/btn-submit.component.mjs +49 -49
- package/form/esm2020/lib/directives/koala-autofocus.directive.mjs +25 -25
- package/form/esm2020/lib/dynamic-form/builder/dynamic-form.builder.mjs +139 -138
- package/form/esm2020/lib/dynamic-form/builder/fields/autocomplete.builder.mjs +37 -37
- package/form/esm2020/lib/dynamic-form/builder/fields/field.base.mjs +147 -147
- package/form/esm2020/lib/dynamic-form/builder/fields/field.builder.mjs +6 -6
- package/form/esm2020/lib/dynamic-form/builder/fields/more-items.builder.mjs +56 -56
- package/form/esm2020/lib/dynamic-form/dynamic-form.component.mjs +598 -598
- package/form/esm2020/lib/dynamic-form/enums/dynamic-form-type-field.enum.mjs +34 -34
- package/form/esm2020/lib/dynamic-form/interfaces/koala-custom-validator-fn.interface.mjs +1 -1
- package/form/esm2020/lib/dynamic-form/interfaces/koala.dynamic-autocomplete-options.interface.mjs +1 -1
- package/form/esm2020/lib/dynamic-form/interfaces/koala.dynamic-form-autocomplete-multiple-config.interface.mjs +1 -1
- package/form/esm2020/lib/dynamic-form/interfaces/koala.dynamic-form-config.interface.mjs +2 -2
- package/form/esm2020/lib/dynamic-form/interfaces/koala.dynamic-form-field.interface.mjs +1 -1
- package/form/esm2020/lib/dynamic-form/interfaces/koala.dynamic-form-more-itens-show-field-config.interface.mjs +1 -1
- package/form/esm2020/lib/dynamic-form/interfaces/koala.dynamic-form-show-field.interface.mjs +1 -1
- package/form/esm2020/lib/dynamic-form/interfaces/koala.dynamic-set-value.interface.mjs +1 -1
- package/form/esm2020/lib/dynamic-form/koala.dynamic-form.service.mjs +212 -212
- package/form/esm2020/lib/dynamic-form/validators/autocomplete-selected.validator.mjs +9 -9
- package/form/esm2020/lib/dynamic-form/validators/cnpj.validator.mjs +9 -9
- package/form/esm2020/lib/dynamic-form/validators/cpf.validator.mjs +9 -9
- package/form/esm2020/lib/dynamic-form/validators/date-max.validator.mjs +10 -10
- package/form/esm2020/lib/dynamic-form/validators/date-min.validator.mjs +10 -10
- package/form/esm2020/lib/dynamic-form/validators/koala-dynamic-form-validator-result.helper.mjs +9 -9
- package/form/esm2020/lib/dynamic-form/validators/validation.helper.mjs +85 -85
- package/form/esm2020/lib/form.abstract.mjs +41 -41
- package/form/esm2020/lib/koala.form.module.mjs +132 -132
- package/form/esm2020/lib/show-invalid-fields/show-invalid-fields.mjs +8 -8
- package/form/fesm2015/koalarx-ui-form.mjs +1517 -1516
- package/form/fesm2015/koalarx-ui-form.mjs.map +1 -1
- package/form/fesm2020/koalarx-ui-form.mjs +1499 -1498
- package/form/fesm2020/koalarx-ui-form.mjs.map +1 -1
- package/form/index.d.ts +19 -19
- package/form/lib/btn-submit/btn-submit.component.d.ts +20 -20
- package/form/lib/directives/koala-autofocus.directive.d.ts +10 -10
- package/form/lib/dynamic-form/builder/dynamic-form.builder.d.ts +21 -21
- package/form/lib/dynamic-form/builder/fields/autocomplete.builder.d.ts +16 -16
- package/form/lib/dynamic-form/builder/fields/field.base.d.ts +42 -42
- package/form/lib/dynamic-form/builder/fields/field.builder.d.ts +8 -8
- package/form/lib/dynamic-form/builder/fields/more-items.builder.d.ts +17 -17
- package/form/lib/dynamic-form/dynamic-form.component.d.ts +54 -54
- package/form/lib/dynamic-form/enums/dynamic-form-type-field.enum.d.ts +33 -33
- package/form/lib/dynamic-form/interfaces/koala-custom-validator-fn.interface.d.ts +4 -4
- package/form/lib/dynamic-form/interfaces/koala.dynamic-autocomplete-options.interface.d.ts +4 -4
- package/form/lib/dynamic-form/interfaces/koala.dynamic-form-autocomplete-multiple-config.interface.d.ts +4 -4
- package/form/lib/dynamic-form/interfaces/koala.dynamic-form-config.interface.d.ts +12 -11
- package/form/lib/dynamic-form/interfaces/koala.dynamic-form-field.interface.d.ts +69 -69
- package/form/lib/dynamic-form/interfaces/koala.dynamic-form-more-itens-show-field-config.interface.d.ts +8 -8
- package/form/lib/dynamic-form/interfaces/koala.dynamic-form-show-field.interface.d.ts +5 -5
- package/form/lib/dynamic-form/interfaces/koala.dynamic-set-value.interface.d.ts +4 -4
- package/form/lib/dynamic-form/koala.dynamic-form.service.d.ts +28 -28
- package/form/lib/dynamic-form/validators/autocomplete-selected.validator.d.ts +4 -4
- package/form/lib/dynamic-form/validators/cnpj.validator.d.ts +4 -4
- package/form/lib/dynamic-form/validators/cpf.validator.d.ts +4 -4
- package/form/lib/dynamic-form/validators/date-max.validator.d.ts +2 -2
- package/form/lib/dynamic-form/validators/date-min.validator.d.ts +2 -2
- package/form/lib/dynamic-form/validators/koala-dynamic-form-validator-result.helper.d.ts +7 -7
- package/form/lib/dynamic-form/validators/validation.helper.d.ts +4 -4
- package/form/lib/form.abstract.d.ts +16 -16
- package/form/lib/koala.form.module.d.ts +25 -25
- package/form/lib/show-invalid-fields/show-invalid-fields.d.ts +6 -6
- package/icon/esm2020/index.mjs +3 -3
- package/icon/esm2020/koalarx-ui-icon.mjs +4 -4
- package/icon/esm2020/lib/icon.component.mjs +41 -41
- package/icon/esm2020/lib/koala.icon.module.mjs +24 -24
- package/icon/esm2020/lib/koala.icon.type.mjs +1 -1
- package/icon/fesm2015/koalarx-ui-icon.mjs +56 -56
- package/icon/fesm2015/koalarx-ui-icon.mjs.map +1 -1
- package/icon/fesm2020/koalarx-ui-icon.mjs +55 -55
- package/icon/fesm2020/koalarx-ui-icon.mjs.map +1 -1
- package/icon/index.d.ts +3 -3
- package/icon/lib/icon.component.d.ts +14 -14
- package/icon/lib/koala.icon.module.d.ts +8 -8
- package/icon/lib/koala.icon.type.d.ts +1 -1
- package/icons-animated/esm2020/index.mjs +4 -4
- package/icons-animated/esm2020/koalarx-ui-icons-animated.mjs +4 -4
- package/icons-animated/esm2020/lib/icons/downloading/downloading-icon-animated.component.mjs +23 -23
- package/icons-animated/esm2020/lib/icons/loading/loading-icon-animated.component.mjs +23 -23
- package/icons-animated/esm2020/lib/icons-animated.component.mjs +20 -20
- package/icons-animated/esm2020/lib/icons-animated.service.mjs +27 -27
- package/icons-animated/esm2020/lib/koala-icons-animated.module.mjs +30 -30
- package/icons-animated/fesm2015/koalarx-ui-icons-animated.mjs +95 -95
- package/icons-animated/fesm2015/koalarx-ui-icons-animated.mjs.map +1 -1
- package/icons-animated/fesm2020/koalarx-ui-icons-animated.mjs +93 -93
- package/icons-animated/fesm2020/koalarx-ui-icons-animated.mjs.map +1 -1
- package/icons-animated/index.d.ts +4 -4
- package/icons-animated/lib/icons/downloading/downloading-icon-animated.component.d.ts +12 -12
- package/icons-animated/lib/icons/loading/loading-icon-animated.component.d.ts +12 -12
- package/icons-animated/lib/icons-animated.component.d.ts +8 -8
- package/icons-animated/lib/icons-animated.service.d.ts +9 -9
- package/icons-animated/lib/koala-icons-animated.module.d.ts +10 -10
- package/list/esm2020/index.mjs +11 -11
- package/list/esm2020/koalarx-ui-list.mjs +4 -4
- package/list/esm2020/lib/koala-list-btn-collapse-sub-list-config.interface.mjs +1 -1
- package/list/esm2020/lib/koala-list-filter.interface.mjs +1 -1
- package/list/esm2020/lib/koala-list-form-filter.interface.mjs +1 -1
- package/list/esm2020/lib/koala-list-item-menu-option.interface.mjs +1 -1
- package/list/esm2020/lib/koala-list-item.interface.mjs +1 -1
- package/list/esm2020/lib/koala.list-config.interface.mjs +1 -1
- package/list/esm2020/lib/koala.list.module.mjs +68 -68
- package/list/esm2020/lib/koala.list.service.mjs +15 -15
- package/list/esm2020/lib/list-builder/list.builder.mjs +104 -104
- package/list/esm2020/lib/list.abstract.mjs +163 -163
- package/list/esm2020/lib/list.component.mjs +172 -172
- package/list/esm2020/lib/providers/pagination/pagination.provider.mjs +32 -32
- package/list/fesm2015/koalarx-ui-list.mjs +521 -521
- package/list/fesm2015/koalarx-ui-list.mjs.map +1 -1
- package/list/fesm2020/koalarx-ui-list.mjs +491 -491
- package/list/fesm2020/koalarx-ui-list.mjs.map +1 -1
- package/list/index.d.ts +11 -11
- package/list/lib/koala-list-btn-collapse-sub-list-config.interface.d.ts +8 -8
- package/list/lib/koala-list-filter.interface.d.ts +10 -10
- package/list/lib/koala-list-form-filter.interface.d.ts +8 -8
- package/list/lib/koala-list-item-menu-option.interface.d.ts +7 -7
- package/list/lib/koala-list-item.interface.d.ts +13 -13
- package/list/lib/koala.list-config.interface.d.ts +37 -37
- package/list/lib/koala.list.module.d.ts +17 -17
- package/list/lib/koala.list.service.d.ts +7 -7
- package/list/lib/list-builder/list.builder.d.ts +32 -32
- package/list/lib/list.abstract.d.ts +44 -44
- package/list/lib/list.component.d.ts +54 -54
- package/list/lib/providers/pagination/pagination.provider.d.ts +9 -9
- package/menu/esm2020/index.mjs +5 -5
- package/menu/esm2020/koalarx-ui-menu.mjs +4 -4
- package/menu/esm2020/lib/koala.menu-module.interface.mjs +1 -1
- package/menu/esm2020/lib/koala.menu-tool.interface.mjs +1 -1
- package/menu/esm2020/lib/koala.menu.module.mjs +36 -36
- package/menu/esm2020/lib/koala.menu.service.mjs +24 -24
- package/menu/esm2020/lib/menu.component.mjs +100 -100
- package/menu/fesm2015/koalarx-ui-menu.mjs +139 -139
- package/menu/fesm2015/koalarx-ui-menu.mjs.map +1 -1
- package/menu/fesm2020/koalarx-ui-menu.mjs +135 -135
- package/menu/fesm2020/koalarx-ui-menu.mjs.map +1 -1
- package/menu/index.d.ts +5 -5
- package/menu/lib/koala.menu-module.interface.d.ts +12 -12
- package/menu/lib/koala.menu-tool.interface.d.ts +6 -6
- package/menu/lib/koala.menu.module.d.ts +11 -11
- package/menu/lib/koala.menu.service.d.ts +10 -10
- package/menu/lib/menu.component.d.ts +22 -22
- package/package.json +1 -1
- package/question/esm2020/index.mjs +4 -4
- package/question/esm2020/koalarx-ui-question.mjs +4 -4
- package/question/esm2020/lib/dialog-question.component.mjs +25 -25
- package/question/esm2020/lib/koala-question-config.interface.mjs +1 -1
- package/question/esm2020/lib/koala.question.module.mjs +40 -40
- package/question/esm2020/lib/koala.question.service.mjs +26 -26
- package/question/fesm2015/koalarx-ui-question.mjs +68 -68
- package/question/fesm2015/koalarx-ui-question.mjs.map +1 -1
- package/question/fesm2020/koalarx-ui-question.mjs +66 -66
- package/question/fesm2020/koalarx-ui-question.mjs.map +1 -1
- package/question/index.d.ts +4 -4
- package/question/lib/dialog-question.component.d.ts +10 -10
- package/question/lib/koala-question-config.interface.d.ts +5 -5
- package/question/lib/koala.question.module.d.ts +12 -12
- package/question/lib/koala.question.service.d.ts +10 -10
- package/snackbar/esm2020/index.mjs +4 -4
- package/snackbar/esm2020/koalarx-ui-snackbar.mjs +4 -4
- package/snackbar/esm2020/lib/koala.snackbar.component.mjs +22 -22
- package/snackbar/esm2020/lib/koala.snackbar.interface.mjs +1 -1
- package/snackbar/esm2020/lib/koala.snackbar.module.mjs +36 -36
- package/snackbar/esm2020/lib/koala.snackbar.service.mjs +35 -35
- package/snackbar/fesm2015/koalarx-ui-snackbar.mjs +74 -74
- package/snackbar/fesm2015/koalarx-ui-snackbar.mjs.map +1 -1
- package/snackbar/fesm2020/koalarx-ui-snackbar.mjs +72 -72
- package/snackbar/fesm2020/koalarx-ui-snackbar.mjs.map +1 -1
- package/snackbar/index.d.ts +4 -4
- package/snackbar/lib/koala.snackbar.component.d.ts +10 -10
- package/snackbar/lib/koala.snackbar.interface.d.ts +4 -4
- package/snackbar/lib/koala.snackbar.module.d.ts +10 -10
- package/snackbar/lib/koala.snackbar.service.d.ts +12 -12
|
@@ -1,172 +1,172 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, Input, ViewChild } from '@angular/core';
|
|
2
|
-
import { ListAbstract } from './list.abstract';
|
|
3
|
-
import { UntypedFormControl } from '@angular/forms';
|
|
4
|
-
import { BehaviorSubject, Observable } from 'rxjs';
|
|
5
|
-
import { MatSort } from "@angular/material/sort";
|
|
6
|
-
import { delay } from "@koalarx/utils/operators/delay";
|
|
7
|
-
import { koala } from "@koalarx/utils";
|
|
8
|
-
import { MatPaginator } from "@angular/material/paginator";
|
|
9
|
-
import { animate, state, style, transition, trigger } from "@angular/animations";
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "@angular/forms";
|
|
12
|
-
import * as i2 from "@koalarx/ui/form";
|
|
13
|
-
import * as i3 from "ngx-device-detector";
|
|
14
|
-
import * as i4 from "@angular/common";
|
|
15
|
-
import * as i5 from "@angular/material/checkbox";
|
|
16
|
-
import * as i6 from "@angular/material/button";
|
|
17
|
-
import * as i7 from "@angular/material/icon";
|
|
18
|
-
import * as i8 from "@angular/material/progress-spinner";
|
|
19
|
-
import * as i9 from "@koalarx/ui/dynamic-component";
|
|
20
|
-
import * as i10 from "@koalarx/ui/button";
|
|
21
|
-
import * as i11 from "@angular/material/menu";
|
|
22
|
-
import * as i12 from "@angular/material/table";
|
|
23
|
-
import * as i13 from "@angular/material/sort";
|
|
24
|
-
import * as i14 from "@angular/material/tooltip";
|
|
25
|
-
import * as i15 from "@angular/material/paginator";
|
|
26
|
-
export class ListComponent extends ListAbstract {
|
|
27
|
-
constructor(fb, dynamicFormService, deviceService) {
|
|
28
|
-
super(() => this.config?.request ?? new Observable(), (response) => {
|
|
29
|
-
this.responseRequest = response;
|
|
30
|
-
this.dataSource.data = this.config?.responseIndexName
|
|
31
|
-
? (this.config.responseIndexName
|
|
32
|
-
? response[this.config.responseIndexName]
|
|
33
|
-
: [])
|
|
34
|
-
: response;
|
|
35
|
-
if (this.config?.getDataSource)
|
|
36
|
-
this.config?.getDataSource(this.dataSource.data);
|
|
37
|
-
this.qtdListResult = this.config?.responseQtdResultIndexName
|
|
38
|
-
? this.config.responseQtdResultIndexName(response) ?? 0
|
|
39
|
-
: this.dataSource.data?.length ?? 0;
|
|
40
|
-
}, () => this.formFilter ?? fb.group({}));
|
|
41
|
-
this.fb = fb;
|
|
42
|
-
this.dynamicFormService = dynamicFormService;
|
|
43
|
-
this.deviceService = deviceService;
|
|
44
|
-
this.hidePaginator = false;
|
|
45
|
-
this.sortDirection = 'asc';
|
|
46
|
-
this.typeRequest = 'all';
|
|
47
|
-
this.showAdvancedFilter = false;
|
|
48
|
-
this.qtdListResult = 0;
|
|
49
|
-
this.expandedElement = false;
|
|
50
|
-
}
|
|
51
|
-
ngOnInit() {
|
|
52
|
-
this.initConfig();
|
|
53
|
-
this.formFilter = this.fb.group({
|
|
54
|
-
formSearch: this.filterFormConfig?.main?.form ?? [''],
|
|
55
|
-
formAdvancedSearch: this.filterFormConfig?.advanced?.form ?? ['']
|
|
56
|
-
});
|
|
57
|
-
this.loading(true);
|
|
58
|
-
if (this.filterFormConfig) {
|
|
59
|
-
this.filterFormConfig?.main?.formConfig?.map(item => {
|
|
60
|
-
item.class += ' padding-none w-99';
|
|
61
|
-
return item;
|
|
62
|
-
});
|
|
63
|
-
this.filterFormConfig?.advanced?.formConfig?.map(item => {
|
|
64
|
-
item.class += ' padding-none';
|
|
65
|
-
return item;
|
|
66
|
-
});
|
|
67
|
-
if (this.filterFormConfig?.checkAndSearch) {
|
|
68
|
-
this.formFilter.addControl(this.filterFormConfig.checkAndSearch.formControlName, new UntypedFormControl(this.filterFormConfig.checkAndSearch.isChecked ?? false));
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
if (this.config.getSelectionList)
|
|
72
|
-
this.config.getSelectionList(this.selection);
|
|
73
|
-
if (this.reload) {
|
|
74
|
-
this.reload.subscribe(async (reload) => {
|
|
75
|
-
if (reload) {
|
|
76
|
-
await this.filterSubmit();
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
ngOnDestroy() {
|
|
82
|
-
super.onDestroy();
|
|
83
|
-
}
|
|
84
|
-
ngAfterViewInit() {
|
|
85
|
-
super.afterViewInit().then();
|
|
86
|
-
}
|
|
87
|
-
async filterSubmit() {
|
|
88
|
-
this.showAdvancedFilter = false;
|
|
89
|
-
await delay(1);
|
|
90
|
-
let dados = koala(this.filterFormConfig?.main?.form
|
|
91
|
-
? this.dynamicFormService.emitData(this.filterFormConfig?.main?.form)
|
|
92
|
-
: {})
|
|
93
|
-
.object()
|
|
94
|
-
.merge(this.filterFormConfig?.advanced?.form
|
|
95
|
-
? this.dynamicFormService.emitData(this.filterFormConfig?.advanced?.form)
|
|
96
|
-
: {})
|
|
97
|
-
.getValue();
|
|
98
|
-
if (this.filterFormConfig?.checkAndSearch) {
|
|
99
|
-
const controlName = this.filterFormConfig.checkAndSearch.formControlName;
|
|
100
|
-
dados[controlName] = this.formFilter.get(controlName).value;
|
|
101
|
-
}
|
|
102
|
-
await super.search(dados);
|
|
103
|
-
}
|
|
104
|
-
toogleFilter() {
|
|
105
|
-
this.showAdvancedFilter = !this.showAdvancedFilter;
|
|
106
|
-
}
|
|
107
|
-
haveOptionsOnItemLine(item) {
|
|
108
|
-
return this.itemsMenuListOptions.filter(option => option.havePermission && (!option.showByItemList ||
|
|
109
|
-
option.showByItemList(item))).length > 0;
|
|
110
|
-
}
|
|
111
|
-
hasFooter() {
|
|
112
|
-
return !!this.itemsList.find(item => !!item.footer);
|
|
113
|
-
}
|
|
114
|
-
initConfig() {
|
|
115
|
-
this.columnSort = this.config.columnSort ?? null;
|
|
116
|
-
this.sortDirection = this.config.sortDirection ?? 'asc';
|
|
117
|
-
this.itemsMenuListOptions = this.config.itemsMenuListOptions ?? [];
|
|
118
|
-
this.typeRequest = this.config.typeRequest ?? 'all';
|
|
119
|
-
this.qtdListResult = this.config.qtdListResult ?? 0;
|
|
120
|
-
this.columnsToShowInList = this.config.columnsToShowInList;
|
|
121
|
-
this.itemsList = this.config.itemsList.map(item => {
|
|
122
|
-
if (!item.dblClick) {
|
|
123
|
-
item.dblClick = () => {
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
return item;
|
|
127
|
-
});
|
|
128
|
-
this.showAdvancedFilter = this.config.showAdvancedFilter;
|
|
129
|
-
this.filterFormConfig = this.config.filterFormConfig;
|
|
130
|
-
this.request = this.config.request;
|
|
131
|
-
this.reload = this.config.reload;
|
|
132
|
-
this.responseIndexName = this.config.responseIndexName;
|
|
133
|
-
this.responseQtdResultIndexName = this.config.responseQtdResultIndexName;
|
|
134
|
-
this.filterParams = this.config.filterParams ?? new BehaviorSubject(null);
|
|
135
|
-
this.emptyListComponent = this.config.emptyListComponent;
|
|
136
|
-
this.errorListComponent = this.config.errorListComponent;
|
|
137
|
-
this.pageSize = this.config.pageSize ?? 30;
|
|
138
|
-
this.disabledCheckboxItemList = this.config.disabledCheckboxItemList;
|
|
139
|
-
this.subListConfig = this.config.subListConfig;
|
|
140
|
-
this.btnCollapseSubListConfig = this.config.btnCollapseSubListConfig;
|
|
141
|
-
this.hidePaginator = this.config.hidePaginator;
|
|
142
|
-
this.customClass = this.config.customClass;
|
|
143
|
-
this.limitOptions = this.config.limitOptions ?? this.limitOptions;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
ListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.
|
|
147
|
-
ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.11", type: ListComponent, selector: "koala-list", inputs: { config: "config" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"list-container\" [ngClass]=\"customClass\">\n <div *ngIf=\"filterFormConfig\" class=\"list-filter\">\n <form (ngSubmit)=\"filterSubmit()\" [formGroup]=\"formFilter\">\n <div class=\"main\">\n <koala-dynamic-form\n *ngIf=\"filterFormConfig.main\"\n [form]=\"filterFormConfig.main.form\"\n [formConfig]=\"filterFormConfig.main.formConfig\"\n [setValues]=\"filterFormConfig.main.setValues\"\n [showFields]=\"filterFormConfig.main.showFields\">\n </koala-dynamic-form>\n <ul>\n <li *ngIf=\"filterFormConfig.advanced\" class=\"option\">\n <button (click)=\"toogleFilter()\" color=\"primary\" mat-icon-button matTooltip=\"Filtro Avan\u00E7ado\"\n matTooltipPosition=\"below\" type=\"button\">\n <mat-icon>tune</mat-icon>\n </button>\n </li>\n <li *ngIf=\"filterFormConfig.checkAndSearch\" class=\"checkbox-filter\">\n <mat-checkbox (click)=\"filterSubmit()\"\n [formControlName]=\"filterFormConfig.checkAndSearch.formControlName\">\n {{filterFormConfig.checkAndSearch.label}}\n </mat-checkbox>\n </li>\n <li class=\"option\">\n <koala-submit\n [btnSubmitDisabled]=\"btnSubmitDisabled\"\n [fg]=\"formFilter\"\n [iconButton]=\"true\"\n [loader]=\"loader\"\n icon=\"search\">\n </koala-submit>\n </li>\n </ul>\n </div>\n <div *ngIf=\"filterFormConfig.advanced\" [ngClass]=\"{'show': showAdvancedFilter}\" class=\"advanced\">\n <div class=\"container-filter\">\n <koala-dynamic-form\n [form]=\"filterFormConfig.advanced.form\"\n [formConfig]=\"filterFormConfig.advanced.formConfig\"\n [setValues]=\"filterFormConfig.advanced.setValues\"\n [showFields]=\"filterFormConfig.advanced.showFields\">\n </koala-dynamic-form>\n </div>\n </div>\n </form>\n </div>\n <nav class=\"menu-list\">\n <ul class=\"menu\">\n <li *ngIf=\"selection.hasValue()\">\n <ng-content select=\"[itemsSelectList]\"></ng-content>\n </li>\n <li *ngIf=\"selection.hasValue()\" class=\"text-center\">|</li>\n <li>\n <ng-content select=\"[itemsList]\"></ng-content>\n </li>\n </ul>\n </nav>\n <div *ngIf=\"loader | async\" class=\"spinner-container\" [ngClass]=\"{\n 'no-filter': !filterFormConfig\n }\">\n <mat-spinner color=\"primary\" diameter=\"40\"></mat-spinner>\n </div>\n <div class=\"list\">\n <table\n *ngIf=\"!emptyListComponent || (emptyListComponent && dataSource?.data?.length > 0) else emptyList\"\n [dataSource]=\"dataSource\"\n [matSortActive]=\"columnSort\"\n [id]=\"tableId\"\n multiTemplateDataRows\n class=\"table-hover\"\n mat-table\n matSort\n [matSortDirection]=\"sortDirection\" matSortDisableClear>\n <ng-container matColumnDef=\"select\">\n <th *matHeaderCellDef mat-header-cell>\n <mat-checkbox (change)=\"$event ? selectAll() : null\"\n [checked]=\"selection.hasValue() && allSelected$ | async\"\n [indeterminate]=\"selection.hasValue() && !(allSelected$ | async)\">\n </mat-checkbox>\n </th>\n <td *matCellDef=\"let item\" mat-cell>\n <mat-checkbox *ngIf=\"disabledCheckboxItemList ? !disabledCheckboxItemList(item) : true\"\n (change)=\"$event ? selection.toggle(item) : null\"\n (click)=\"$event.stopPropagation(); selectItem();\"\n [checked]=\"selection.isSelected(item)\">\n </mat-checkbox>\n </td>\n <td *matFooterCellDef mat-footer-cell></td>\n </ng-container>\n\n <ng-container *ngIf=\"subListConfig && btnCollapseSubListConfig\" matColumnDef=\"collapseButton\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let item\" mat-cell>\n <koala-button\n *ngIf=\"btnCollapseSubListConfig.show(item)\"\n (click)=\"expandedElement = expandedElement === item ? null : item\"\n [koalaIcon]=\"btnCollapseSubListConfig.koalaIcon\"\n [icon]=\"btnCollapseSubListConfig.icon\"\n [tooltip]=\"btnCollapseSubListConfig.tooltip\"\n [color]=\"btnCollapseSubListConfig.iconColor\"\n [backgroundColor]=\"btnCollapseSubListConfig.backgroundColor\"\n [koalaIconSize]=\"22\">\n </koala-button>\n </td>\n <td *matFooterCellDef mat-footer-cell></td>\n </ng-container>\n\n <ng-container *ngFor=\"let itemList of itemsList\" [matColumnDef]=\"itemList.columnDef\">\n <th *matHeaderCellDef [mat-sort-header]=\"itemList.sortHeader\" [disabled]=\"!itemList.sortHeader\" mat-header-cell>{{itemList.label}}</th>\n <td (dblclick)=\"itemList.dblClick(item)\" *matCellDef=\"let item\" mat-cell>\n\t <koala-dynamic-component *ngIf=\"itemList.itemComponent else itemText\"\n\t [dynamicComponent]=\"itemList.itemComponent(item)\"></koala-dynamic-component>\n\t <ng-template #itemText>\n\t {{itemList.itemNameProperty(item)}}\n\t </ng-template>\n </td>\n <td *matFooterCellDef mat-footer-cell>\n <koala-dynamic-component *ngIf=\"itemList.footer?.itemComponent else itemFooterText\"\n [dynamicComponent]=\"itemList.footer?.itemComponent(responseRequest)\"></koala-dynamic-component>\n <ng-template #itemFooterText>\n {{itemList.footer?.itemNameProperty(responseRequest)}}\n </ng-template>\n </td>\n </ng-container>\n\n <ng-container *ngIf=\"subListConfig && btnCollapseSubListConfig\" matColumnDef=\"koalaListDetails\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let item\" [attr.colspan]=\"columnsToShowInList.length\" mat-cell>\n <div class=\"item-detail\" [@detailExpand]=\"item == expandedElement ? 'expanded' : 'collapsed'\">\n <koala-list [config]=\"subListConfig(item)\"></koala-list>\n </div>\n </td>\n <td *matFooterCellDef mat-footer-cell></td>\n </ng-container>\n\n <ng-container matColumnDef=\"options\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let item\" mat-cell>\n <div *ngIf=\"haveOptionsOnItemLine(item)\">\n <button [matMenuTriggerFor]=\"options\" mat-icon-button type=\"button\">\n <i class='material-icons'>more_vert</i>\n </button>\n <mat-menu #options=\"matMenu\" class=\"menu-list\" yPosition=\"below\">\n\t <div *ngFor=\"let option of itemsMenuListOptions\">\n\t <button\n\t\t (click)=\"option.action(item)\"\n\t\t *ngIf=\"option.havePermission && (\n\t\t !option.showByItemList ||\n\t\t option.showByItemList(item)\n\t )\"\n\t\t mat-menu-item>\n\t <mat-icon>{{option.icon}}</mat-icon>\n\t <span>{{option.name}}</span>\n\t </button>\n\t </div>\n </mat-menu>\n </div>\n </td>\n <td *matFooterCellDef mat-footer-cell></td>\n </ng-container>\n\n <tr *matHeaderRowDef=\"columnsToShowInList; sticky: true\" mat-header-row></tr>\n <tr *matRowDef=\"let item; columns: columnsToShowInList;\" mat-row></tr>\n <ng-container *ngIf=\"subListConfig && btnCollapseSubListConfig\">\n <tr mat-row *matRowDef=\"let row; columns: ['koalaListDetails']\" class=\"item-detail-row\"></tr>\n </ng-container>\n <ng-container *ngIf=\"hasFooter()\">\n <tr *matFooterRowDef=\"columnsToShowInList; sticky: true\" mat-footer-row></tr>\n </ng-container>\n </table>\n <ng-template #emptyList>\n <koala-dynamic-component *ngIf=\"!(filterError$ | async) else errorList\" [dynamicComponent]=\"emptyListComponent\"></koala-dynamic-component>\n <ng-template #errorList>\n <koala-dynamic-component [dynamicComponent]=\"errorListComponent\"></koala-dynamic-component>\n </ng-template>\n </ng-template>\n </div>\n <div *ngIf=\"!hidePaginator\" class=\"content-paginator\">\n <mat-paginator\n [length]=\"qtdListResult\"\n [pageSizeOptions]=\"limitOptions\"\n [pageSize]=\"pageSize\"\n showFirstLastButtons>\n </mat-paginator>\n </div>\n</div>\n", styles: [".list-container{border-radius:10px;margin:0 auto;overflow-x:hidden;width:calc(100% - 40px);position:relative}.list-container .spinner-container{position:absolute;width:100%;height:calc(100vh - 320px);top:100px;left:0;background:rgba(0,0,0,.15);z-index:2;display:flex;align-items:center;justify-content:center}.list-container .spinner-container.no-filter{top:40px}.list-container .list{display:block;height:calc(100vh - 320px);overflow-y:auto;position:relative;top:0;width:100%;z-index:1}.list-container .list table:not(.table-not-selection) .mat-header-cell:first-child,.list-container .list .mat-header-cell:last-child,.list-container .list .mat-header-cell.mat-column-collapseButton{width:5%}.list-container .list .mat-header-cell:last-child{text-align:center}.list-container .list .mat-header-row,.list-container .list .mat-row,.list-container .list .mat-footer-row{height:35px}.list-container .list .mat-row .mat-icon-button{height:35px;line-height:35px;width:35px}.list-container .list tr.detail-row:not(.expanded-row){height:0}.list-container .list .element-detail{display:flex;overflow:hidden}.list-container .list table{position:relative;width:100%;font-family:OpenSans,sans-serif;font-size:1em}.list-container .list table.table-hover tr{cursor:pointer;transition:.2s}.list-container .list table th:first-child,.list-container .list table td:first-child{padding:0 8px 0 20px}.list-container .list table th{font-size:.7em;padding:0 8px;font-family:OpenSans,sans-serif;line-height:1em}.list-container .list table td{font-size:.8em;padding:0 8px;font-family:OpenSans,sans-serif}.list-container .list table th:last-child,.list-container .list table td:last-child{padding:0 20px 0 8px}.list-container .list .mat-list-item-content,.list-container .list .mat-list-item-content .mat-list-text{padding:0}.list-container .list-filter{box-shadow:0 1px 3px #0000004d;height:60px;position:relative;z-index:3}.list-container .list-filter .main{display:flex;justify-content:space-between;font-size:1.05em;height:60px;overflow:hidden;padding-left:2.5px;position:relative;width:100%}.list-container .list-filter .main koala-dynamic-form{width:100%}.list-container .list-filter .main mat-form-field{display:inline-block}.list-container .list-filter .main .mat-form-field-appearance-fill .mat-form-field-flex{background:transparent}.list-container .list-filter .main .mat-form-field .mat-form-field-wrapper{padding-bottom:0}.list-container .list-filter .main .mat-form-field-underline,.list-container .list-filter .main .mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper,.list-container .list-filter .main .mat-form-field-wrapper .mat-form-field-subscript-wrapper{display:none}.list-container .list-filter ul{display:flex;align-items:center;font-size:0;list-style:none;margin:0;padding:0 15px 0 0;position:relative;text-align:right}.list-container .list-filter ul li{display:inline-block;font-size:14px;padding:5px;position:relative}.list-container .list-filter ul li.option button{transition:.2s}.list-container .list-filter ul li.option button:hover{background:rgba(0,0,0,.1)}.list-container .list-filter ul li.checkbox-filter{text-align:center}.list-container .list-filter ul li.checkbox-filter .checkbox-inline{top:-5px}.list-container .list-filter ul li.checkbox-filter input[type=checkbox]{margin-left:0}.list-container .list-filter ul li.checkbox-filter label{padding:0!important;width:auto}.list-container .list-filter .advanced{border-top:1px solid #dddddd;box-shadow:0 3px 10px #0000004d;height:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:60px;transition:.2s;width:100%;z-index:1}.list-container .list-filter .advanced .container-filter{padding:15px}.list-container .list-filter .advanced.show{height:360px}.list-container nav.menu-list{height:40px;margin:0;padding:3px 0;position:relative;transition:.2s;width:100%;z-index:2;box-sizing:border-box}.list-container nav.menu-list ul.menu{float:left;font-size:0;list-style:none;margin:0;padding:0 10px;position:relative;text-align:left}.list-container nav.menu-list ul.menu li{color:#616161;display:inline-block;font-size:16px;padding:0 4px}.list-container nav.menu-list ul.menu li button.mat-button,.list-container nav.menu-list ul.menu li button.koala-icon-button{display:inline-block}.list-container .content-paginator mat-paginator .mat-paginator-container{height:40px!important;min-height:40px!important}.list-container .content-paginator mat-paginator .mat-paginator-container .mat-paginator-page-size-select{height:40px;margin-top:0!important}.list-container .content-paginator mat-paginator .mat-paginator-container .mat-paginator-range-label{margin-top:3px}.list-container .content-paginator{position:relative;background:transparent!important;z-index:2;box-shadow:-3px 1px 3px #0000004d}.list-container .item-detail{overflow:hidden}.list-container tr.item-detail-row{height:0!important}.list-container tr.item-detail-row .list-container{width:100%!important}.list-container tr.item-detail-row .list-container .list{height:auto!important;max-height:250px!important}.list-container tr.item-detail-row .list-container nav.menu-list{display:none}@media (max-width: 900px){.list-container{width:100%;box-shadow:none!important;padding:15px 10px 15px 15px;box-sizing:border-box}.list-container .list{height:auto;overflow:visible;overflow:initial}.list-container .list-filter .main{justify-content:flex-end}}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i2.BtnSubmitComponent, selector: "koala-submit", inputs: ["fg", "color", "btnLabel", "btnSubmitDisabled", "loader", "iconButton", "icon", "iconColor"] }, { kind: "component", type: i2.DynamicFormComponent, selector: "koala-dynamic-form", inputs: ["form", "formConfig", "showFields", "showFieldsMoreItensConfig", "setValues", "tabIndexStart"] }, { kind: "component", type: i9.KoalaDynamicComponentFactory, selector: "koala-dynamic-component", inputs: ["dynamicComponent"] }, { kind: "component", type: i10.ButtonComponent, selector: "koala-button", inputs: ["color", "backgroundColor", "icon", "text", "tooltip", "disabled", "koalaIcon", "koalaIconSize"] }, { kind: "component", type: i11.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i11.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i11.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i12.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i12.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i12.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i12.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i12.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i12.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i12.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i12.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i12.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i12.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i12.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i12.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i12.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i12.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "directive", type: i13.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i13.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: i14.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i15.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: ListComponent, selector: "koala-list", inputs: ["config"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], animations: [
|
|
148
|
-
trigger('detailExpand', [
|
|
149
|
-
state('collapsed', style({ height: '0px', minHeight: '0' })),
|
|
150
|
-
state('expanded', style({ height: '*' })),
|
|
151
|
-
transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
|
|
152
|
-
]),
|
|
153
|
-
], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
154
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.
|
|
155
|
-
type: Component,
|
|
156
|
-
args: [{ selector: 'koala-list', changeDetection: ChangeDetectionStrategy.OnPush, animations: [
|
|
157
|
-
trigger('detailExpand', [
|
|
158
|
-
state('collapsed', style({ height: '0px', minHeight: '0' })),
|
|
159
|
-
state('expanded', style({ height: '*' })),
|
|
160
|
-
transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
|
|
161
|
-
]),
|
|
162
|
-
], template: "<div class=\"list-container\" [ngClass]=\"customClass\">\n <div *ngIf=\"filterFormConfig\" class=\"list-filter\">\n <form (ngSubmit)=\"filterSubmit()\" [formGroup]=\"formFilter\">\n <div class=\"main\">\n <koala-dynamic-form\n *ngIf=\"filterFormConfig.main\"\n [form]=\"filterFormConfig.main.form\"\n [formConfig]=\"filterFormConfig.main.formConfig\"\n [setValues]=\"filterFormConfig.main.setValues\"\n [showFields]=\"filterFormConfig.main.showFields\">\n </koala-dynamic-form>\n <ul>\n <li *ngIf=\"filterFormConfig.advanced\" class=\"option\">\n <button (click)=\"toogleFilter()\" color=\"primary\" mat-icon-button matTooltip=\"Filtro Avan\u00E7ado\"\n matTooltipPosition=\"below\" type=\"button\">\n <mat-icon>tune</mat-icon>\n </button>\n </li>\n <li *ngIf=\"filterFormConfig.checkAndSearch\" class=\"checkbox-filter\">\n <mat-checkbox (click)=\"filterSubmit()\"\n [formControlName]=\"filterFormConfig.checkAndSearch.formControlName\">\n {{filterFormConfig.checkAndSearch.label}}\n </mat-checkbox>\n </li>\n <li class=\"option\">\n <koala-submit\n [btnSubmitDisabled]=\"btnSubmitDisabled\"\n [fg]=\"formFilter\"\n [iconButton]=\"true\"\n [loader]=\"loader\"\n icon=\"search\">\n </koala-submit>\n </li>\n </ul>\n </div>\n <div *ngIf=\"filterFormConfig.advanced\" [ngClass]=\"{'show': showAdvancedFilter}\" class=\"advanced\">\n <div class=\"container-filter\">\n <koala-dynamic-form\n [form]=\"filterFormConfig.advanced.form\"\n [formConfig]=\"filterFormConfig.advanced.formConfig\"\n [setValues]=\"filterFormConfig.advanced.setValues\"\n [showFields]=\"filterFormConfig.advanced.showFields\">\n </koala-dynamic-form>\n </div>\n </div>\n </form>\n </div>\n <nav class=\"menu-list\">\n <ul class=\"menu\">\n <li *ngIf=\"selection.hasValue()\">\n <ng-content select=\"[itemsSelectList]\"></ng-content>\n </li>\n <li *ngIf=\"selection.hasValue()\" class=\"text-center\">|</li>\n <li>\n <ng-content select=\"[itemsList]\"></ng-content>\n </li>\n </ul>\n </nav>\n <div *ngIf=\"loader | async\" class=\"spinner-container\" [ngClass]=\"{\n 'no-filter': !filterFormConfig\n }\">\n <mat-spinner color=\"primary\" diameter=\"40\"></mat-spinner>\n </div>\n <div class=\"list\">\n <table\n *ngIf=\"!emptyListComponent || (emptyListComponent && dataSource?.data?.length > 0) else emptyList\"\n [dataSource]=\"dataSource\"\n [matSortActive]=\"columnSort\"\n [id]=\"tableId\"\n multiTemplateDataRows\n class=\"table-hover\"\n mat-table\n matSort\n [matSortDirection]=\"sortDirection\" matSortDisableClear>\n <ng-container matColumnDef=\"select\">\n <th *matHeaderCellDef mat-header-cell>\n <mat-checkbox (change)=\"$event ? selectAll() : null\"\n [checked]=\"selection.hasValue() && allSelected$ | async\"\n [indeterminate]=\"selection.hasValue() && !(allSelected$ | async)\">\n </mat-checkbox>\n </th>\n <td *matCellDef=\"let item\" mat-cell>\n <mat-checkbox *ngIf=\"disabledCheckboxItemList ? !disabledCheckboxItemList(item) : true\"\n (change)=\"$event ? selection.toggle(item) : null\"\n (click)=\"$event.stopPropagation(); selectItem();\"\n [checked]=\"selection.isSelected(item)\">\n </mat-checkbox>\n </td>\n <td *matFooterCellDef mat-footer-cell></td>\n </ng-container>\n\n <ng-container *ngIf=\"subListConfig && btnCollapseSubListConfig\" matColumnDef=\"collapseButton\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let item\" mat-cell>\n <koala-button\n *ngIf=\"btnCollapseSubListConfig.show(item)\"\n (click)=\"expandedElement = expandedElement === item ? null : item\"\n [koalaIcon]=\"btnCollapseSubListConfig.koalaIcon\"\n [icon]=\"btnCollapseSubListConfig.icon\"\n [tooltip]=\"btnCollapseSubListConfig.tooltip\"\n [color]=\"btnCollapseSubListConfig.iconColor\"\n [backgroundColor]=\"btnCollapseSubListConfig.backgroundColor\"\n [koalaIconSize]=\"22\">\n </koala-button>\n </td>\n <td *matFooterCellDef mat-footer-cell></td>\n </ng-container>\n\n <ng-container *ngFor=\"let itemList of itemsList\" [matColumnDef]=\"itemList.columnDef\">\n <th *matHeaderCellDef [mat-sort-header]=\"itemList.sortHeader\" [disabled]=\"!itemList.sortHeader\" mat-header-cell>{{itemList.label}}</th>\n <td (dblclick)=\"itemList.dblClick(item)\" *matCellDef=\"let item\" mat-cell>\n\t <koala-dynamic-component *ngIf=\"itemList.itemComponent else itemText\"\n\t [dynamicComponent]=\"itemList.itemComponent(item)\"></koala-dynamic-component>\n\t <ng-template #itemText>\n\t {{itemList.itemNameProperty(item)}}\n\t </ng-template>\n </td>\n <td *matFooterCellDef mat-footer-cell>\n <koala-dynamic-component *ngIf=\"itemList.footer?.itemComponent else itemFooterText\"\n [dynamicComponent]=\"itemList.footer?.itemComponent(responseRequest)\"></koala-dynamic-component>\n <ng-template #itemFooterText>\n {{itemList.footer?.itemNameProperty(responseRequest)}}\n </ng-template>\n </td>\n </ng-container>\n\n <ng-container *ngIf=\"subListConfig && btnCollapseSubListConfig\" matColumnDef=\"koalaListDetails\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let item\" [attr.colspan]=\"columnsToShowInList.length\" mat-cell>\n <div class=\"item-detail\" [@detailExpand]=\"item == expandedElement ? 'expanded' : 'collapsed'\">\n <koala-list [config]=\"subListConfig(item)\"></koala-list>\n </div>\n </td>\n <td *matFooterCellDef mat-footer-cell></td>\n </ng-container>\n\n <ng-container matColumnDef=\"options\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let item\" mat-cell>\n <div *ngIf=\"haveOptionsOnItemLine(item)\">\n <button [matMenuTriggerFor]=\"options\" mat-icon-button type=\"button\">\n <i class='material-icons'>more_vert</i>\n </button>\n <mat-menu #options=\"matMenu\" class=\"menu-list\" yPosition=\"below\">\n\t <div *ngFor=\"let option of itemsMenuListOptions\">\n\t <button\n\t\t (click)=\"option.action(item)\"\n\t\t *ngIf=\"option.havePermission && (\n\t\t !option.showByItemList ||\n\t\t option.showByItemList(item)\n\t )\"\n\t\t mat-menu-item>\n\t <mat-icon>{{option.icon}}</mat-icon>\n\t <span>{{option.name}}</span>\n\t </button>\n\t </div>\n </mat-menu>\n </div>\n </td>\n <td *matFooterCellDef mat-footer-cell></td>\n </ng-container>\n\n <tr *matHeaderRowDef=\"columnsToShowInList; sticky: true\" mat-header-row></tr>\n <tr *matRowDef=\"let item; columns: columnsToShowInList;\" mat-row></tr>\n <ng-container *ngIf=\"subListConfig && btnCollapseSubListConfig\">\n <tr mat-row *matRowDef=\"let row; columns: ['koalaListDetails']\" class=\"item-detail-row\"></tr>\n </ng-container>\n <ng-container *ngIf=\"hasFooter()\">\n <tr *matFooterRowDef=\"columnsToShowInList; sticky: true\" mat-footer-row></tr>\n </ng-container>\n </table>\n <ng-template #emptyList>\n <koala-dynamic-component *ngIf=\"!(filterError$ | async) else errorList\" [dynamicComponent]=\"emptyListComponent\"></koala-dynamic-component>\n <ng-template #errorList>\n <koala-dynamic-component [dynamicComponent]=\"errorListComponent\"></koala-dynamic-component>\n </ng-template>\n </ng-template>\n </div>\n <div *ngIf=\"!hidePaginator\" class=\"content-paginator\">\n <mat-paginator\n [length]=\"qtdListResult\"\n [pageSizeOptions]=\"limitOptions\"\n [pageSize]=\"pageSize\"\n showFirstLastButtons>\n </mat-paginator>\n </div>\n</div>\n", styles: [".list-container{border-radius:10px;margin:0 auto;overflow-x:hidden;width:calc(100% - 40px);position:relative}.list-container .spinner-container{position:absolute;width:100%;height:calc(100vh - 320px);top:100px;left:0;background:rgba(0,0,0,.15);z-index:2;display:flex;align-items:center;justify-content:center}.list-container .spinner-container.no-filter{top:40px}.list-container .list{display:block;height:calc(100vh - 320px);overflow-y:auto;position:relative;top:0;width:100%;z-index:1}.list-container .list table:not(.table-not-selection) .mat-header-cell:first-child,.list-container .list .mat-header-cell:last-child,.list-container .list .mat-header-cell.mat-column-collapseButton{width:5%}.list-container .list .mat-header-cell:last-child{text-align:center}.list-container .list .mat-header-row,.list-container .list .mat-row,.list-container .list .mat-footer-row{height:35px}.list-container .list .mat-row .mat-icon-button{height:35px;line-height:35px;width:35px}.list-container .list tr.detail-row:not(.expanded-row){height:0}.list-container .list .element-detail{display:flex;overflow:hidden}.list-container .list table{position:relative;width:100%;font-family:OpenSans,sans-serif;font-size:1em}.list-container .list table.table-hover tr{cursor:pointer;transition:.2s}.list-container .list table th:first-child,.list-container .list table td:first-child{padding:0 8px 0 20px}.list-container .list table th{font-size:.7em;padding:0 8px;font-family:OpenSans,sans-serif;line-height:1em}.list-container .list table td{font-size:.8em;padding:0 8px;font-family:OpenSans,sans-serif}.list-container .list table th:last-child,.list-container .list table td:last-child{padding:0 20px 0 8px}.list-container .list .mat-list-item-content,.list-container .list .mat-list-item-content .mat-list-text{padding:0}.list-container .list-filter{box-shadow:0 1px 3px #0000004d;height:60px;position:relative;z-index:3}.list-container .list-filter .main{display:flex;justify-content:space-between;font-size:1.05em;height:60px;overflow:hidden;padding-left:2.5px;position:relative;width:100%}.list-container .list-filter .main koala-dynamic-form{width:100%}.list-container .list-filter .main mat-form-field{display:inline-block}.list-container .list-filter .main .mat-form-field-appearance-fill .mat-form-field-flex{background:transparent}.list-container .list-filter .main .mat-form-field .mat-form-field-wrapper{padding-bottom:0}.list-container .list-filter .main .mat-form-field-underline,.list-container .list-filter .main .mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper,.list-container .list-filter .main .mat-form-field-wrapper .mat-form-field-subscript-wrapper{display:none}.list-container .list-filter ul{display:flex;align-items:center;font-size:0;list-style:none;margin:0;padding:0 15px 0 0;position:relative;text-align:right}.list-container .list-filter ul li{display:inline-block;font-size:14px;padding:5px;position:relative}.list-container .list-filter ul li.option button{transition:.2s}.list-container .list-filter ul li.option button:hover{background:rgba(0,0,0,.1)}.list-container .list-filter ul li.checkbox-filter{text-align:center}.list-container .list-filter ul li.checkbox-filter .checkbox-inline{top:-5px}.list-container .list-filter ul li.checkbox-filter input[type=checkbox]{margin-left:0}.list-container .list-filter ul li.checkbox-filter label{padding:0!important;width:auto}.list-container .list-filter .advanced{border-top:1px solid #dddddd;box-shadow:0 3px 10px #0000004d;height:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:60px;transition:.2s;width:100%;z-index:1}.list-container .list-filter .advanced .container-filter{padding:15px}.list-container .list-filter .advanced.show{height:360px}.list-container nav.menu-list{height:40px;margin:0;padding:3px 0;position:relative;transition:.2s;width:100%;z-index:2;box-sizing:border-box}.list-container nav.menu-list ul.menu{float:left;font-size:0;list-style:none;margin:0;padding:0 10px;position:relative;text-align:left}.list-container nav.menu-list ul.menu li{color:#616161;display:inline-block;font-size:16px;padding:0 4px}.list-container nav.menu-list ul.menu li button.mat-button,.list-container nav.menu-list ul.menu li button.koala-icon-button{display:inline-block}.list-container .content-paginator mat-paginator .mat-paginator-container{height:40px!important;min-height:40px!important}.list-container .content-paginator mat-paginator .mat-paginator-container .mat-paginator-page-size-select{height:40px;margin-top:0!important}.list-container .content-paginator mat-paginator .mat-paginator-container .mat-paginator-range-label{margin-top:3px}.list-container .content-paginator{position:relative;background:transparent!important;z-index:2;box-shadow:-3px 1px 3px #0000004d}.list-container .item-detail{overflow:hidden}.list-container tr.item-detail-row{height:0!important}.list-container tr.item-detail-row .list-container{width:100%!important}.list-container tr.item-detail-row .list-container .list{height:auto!important;max-height:250px!important}.list-container tr.item-detail-row .list-container nav.menu-list{display:none}@media (max-width: 900px){.list-container{width:100%;box-shadow:none!important;padding:15px 10px 15px 15px;box-sizing:border-box}.list-container .list{height:auto;overflow:visible;overflow:initial}.list-container .list-filter .main{justify-content:flex-end}}\n"] }]
|
|
163
|
-
}], ctorParameters: function () { return [{ type: i1.UntypedFormBuilder }, { type: i2.KoalaDynamicFormService }, { type: i3.DeviceDetectorService }]; }, propDecorators: { config: [{
|
|
164
|
-
type: Input
|
|
165
|
-
}], paginator: [{
|
|
166
|
-
type: ViewChild,
|
|
167
|
-
args: [MatPaginator]
|
|
168
|
-
}], sort: [{
|
|
169
|
-
type: ViewChild,
|
|
170
|
-
args: [MatSort, { static: false }]
|
|
171
|
-
}] } });
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9saXN0L3NyYy9saWIvbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9saXN0L3NyYy9saWIvbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2SCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFzQixrQkFBa0IsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUtuRCxPQUFPLEVBQUUsT0FBTyxFQUFpQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZWpGLE1BQU0sT0FBTyxhQUFjLFNBQVEsWUFBWTtJQTRCN0MsWUFDVSxFQUFzQixFQUN0QixrQkFBMkMsRUFDM0MsYUFBb0M7UUFFNUMsS0FBSyxDQUNILEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxJQUFJLElBQUksVUFBVSxFQUFPLEVBQ25ELENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDWCxJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQztZ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QUFHLEVBQUMsQ0FBQyxDQUFDOzRCQUMxRCxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDOzRCQUN2QyxVQUFVLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7eUJBQ3RGLENBQUM7cUJBQ0g7bUxBR2UsTUFBTTtzQkFBckIsS0FBSztnQkFFNkIsU0FBUztzQkFBM0MsU0FBUzt1QkFBQyxZQUFZO2dCQUN3QixJQUFJO3NCQUFsRCxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlzdEFic3RyYWN0IH0gZnJvbSAnLi9saXN0LmFic3RyYWN0JztcbmltcG9ydCB7IEtvYWxhTGlzdEl0ZW1NZW51T3B0aW9uSW50ZXJmYWNlIH0gZnJvbSAnLi9rb2FsYS1saXN0LWl0ZW0tbWVudS1vcHRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBLb2FsYUxpc3RGaWx0ZXJJbnRlcmZhY2UgfSBmcm9tICcuL2tvYWxhLWxpc3QtZmlsdGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBLb2FsYUR5bmFtaWNGb3JtU2VydmljZSB9IGZyb20gJ0Brb2FsYXJ4L3VpL2Zvcm0nO1xuaW1wb3J0IHsgS29hbGFMaXN0SXRlbUludGVyZmFjZSB9IGZyb20gJy4va29hbGEtbGlzdC1pdGVtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBLb2FsYUxpc3RGb3JtRmlsdGVySW50ZXJmYWNlIH0gZnJvbSBcIi4va29hbGEtbGlzdC1mb3JtLWZpbHRlci5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IE1hdFNvcnQsIFNvcnREaXJlY3Rpb24gfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydFwiO1xuaW1wb3J0IHsgZGVsYXkgfSBmcm9tIFwiQGtvYWxhcngvdXRpbHMvb3BlcmF0b3JzL2RlbGF5XCI7XG5pbXBvcnQgeyBrb2FsYSB9IGZyb20gXCJAa29hbGFyeC91dGlsc1wiO1xuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSBcIm5neC1kZXZpY2UtZGV0ZWN0b3JcIjtcbmltcG9ydCB7IEtvYWxhTGlzdENvbmZpZ0ludGVyZmFjZSB9IGZyb20gXCIuL2tvYWxhLmxpc3QtY29uZmlnLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvclwiO1xuaW1wb3J0IHsgS29hbGFMaXN0QnRuQ29sbGFwc2VTdWJMaXN0Q29uZmlnSW50ZXJmYWNlIH0gZnJvbSBcIi4va29hbGEtbGlzdC1idG4tY29sbGFwc2Utc3ViLWxpc3QtY29uZmlnLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSBcIkBhbmd1bGFyL2FuaW1hdGlvbnNcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna29hbGEtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydsaXN0LmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdkZXRhaWxFeHBhbmQnLCBbXG4gICAgICBzdGF0ZSgnY29sbGFwc2VkJywgc3R5bGUoe2hlaWdodDogJzBweCcsIG1pbkhlaWdodDogJzAnfSkpLFxuICAgICAgc3RhdGUoJ2V4cGFuZGVkJywgc3R5bGUoe2hlaWdodDogJyonfSkpLFxuICAgICAgdHJhbnNpdGlvbignZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCcsIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpKSxcbiAgICBdKSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTGlzdENvbXBvbmVudCBleHRlbmRzIExpc3RBYnN0cmFjdCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgcHVibGljIGNvbmZpZz86IEtvYWxhTGlzdENvbmZpZ0ludGVyZmFjZTtcblxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgcHJvdGVjdGVkIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuICBAVmlld0NoaWxkKE1hdFNvcnQsIHtzdGF0aWM6IGZhbHNlfSkgcHJvdGVjdGVkIHNvcnQ6IE1hdFNvcnQ7XG5cbiAgcHVibGljIGN1c3RvbUNsYXNzPzogc3RyaW5nO1xuICBwdWJsaWMgY29sdW1uc1RvU2hvd0luTGlzdD86IHN0cmluZ1tdO1xuICBwdWJsaWMgaGlkZVBhZ2luYXRvcj86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNvbHVtblNvcnQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBzb3J0RGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uID0gJ2FzYyc7XG4gIHB1YmxpYyBpdGVtc01lbnVMaXN0T3B0aW9ucz86IEtvYWxhTGlzdEl0ZW1NZW51T3B0aW9uSW50ZXJmYWNlPGFueT5bXTtcbiAgcHVibGljIGl0ZW1zTGlzdD86IEtvYWxhTGlzdEl0ZW1JbnRlcmZhY2U8YW55PltdO1xuICBwdWJsaWMgcmVxdWVzdD86IE9ic2VydmFibGU8YW55PjtcbiAgcHVibGljIHJlc3BvbnNlSW5kZXhOYW1lPzogc3RyaW5nO1xuICBwdWJsaWMgcmVzcG9uc2VRdGRSZXN1bHRJbmRleE5hbWU/OiAocmVzcG9uc2U6IGFueSkgPT4gbnVtYmVyO1xuICBwdWJsaWMgcmVzcG9uc2VSZXF1ZXN0PzogYW55O1xuICBwdWJsaWMgdHlwZVJlcXVlc3Q6ICdhbGwnIHwgJ29uRGVtYW5kJyA9ICdhbGwnXG4gIHB1YmxpYyBmaWx0ZXJGb3JtQ29uZmlnPzogS29hbGFMaXN0RmlsdGVySW50ZXJmYWNlO1xuICBwdWJsaWMgcmVsb2FkPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICBwdWJsaWMgZm9ybUZpbHRlcj86IFVudHlwZWRGb3JtR3JvdXA7XG4gIHB1YmxpYyBzaG93QWR2YW5jZWRGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHF0ZExpc3RSZXN1bHQgPSAwO1xuICBwdWJsaWMgZGlzYWJsZWRDaGVja2JveEl0ZW1MaXN0PzogKGl0ZW06IGFueSkgPT4gYm9vbGVhbjtcbiAgcHVibGljIGV4cGFuZGVkRWxlbWVudCA9IGZhbHNlO1xuICBwdWJsaWMgYnRuQ29sbGFwc2VTdWJMaXN0Q29uZmlnPzogS29hbGFMaXN0QnRuQ29sbGFwc2VTdWJMaXN0Q29uZmlnSW50ZXJmYWNlPGFueT47XG4gIHB1YmxpYyBzdWJMaXN0Q29uZmlnPzogKGl0ZW06IGFueSkgPT4gS29hbGFMaXN0Q29uZmlnSW50ZXJmYWNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGR5bmFtaWNGb3JtU2VydmljZTogS29hbGFEeW5hbWljRm9ybVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkZXZpY2VTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICAoKSA9PiB0aGlzLmNvbmZpZz8ucmVxdWVzdCA/PyBuZXcgT2JzZXJ2YWJsZTxhbnk+KCksXG4gICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5yZXNwb25zZVJlcXVlc3QgPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmNvbmZpZz8ucmVzcG9uc2VJbmRleE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICh0aGlzLmNvbmZpZy5yZXNwb25zZUluZGV4TmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcmVzcG9uc2VbdGhpcy5jb25maWcucmVzcG9uc2VJbmRleE5hbWVdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBbXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlc3BvbnNlO1xuICAgICAgICBpZiAodGhpcy5jb25maWc/LmdldERhdGFTb3VyY2UpIHRoaXMuY29uZmlnPy5nZXREYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZS5kYXRhKTtcbiAgICAgICAgdGhpcy5xdGRMaXN0UmVzdWx0ID0gdGhpcy5jb25maWc/LnJlc3BvbnNlUXRkUmVzdWx0SW5kZXhOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5jb25maWcucmVzcG9uc2VRdGRSZXN1bHRJbmRleE5hbWUocmVzcG9uc2UpID8/IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmRhdGFTb3VyY2UuZGF0YT8ubGVuZ3RoID8/IDA7XG4gICAgICB9LFxuICAgICAgKCkgPT4gdGhpcy5mb3JtRmlsdGVyID8/IGZiLmdyb3VwKHt9KVxuICAgICk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRDb25maWcoKTtcbiAgICB0aGlzLmZvcm1GaWx0ZXIgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGZvcm1TZWFyY2g6IHRoaXMuZmlsdGVyRm9ybUNvbmZpZz8ubWFpbj8uZm9ybSA/PyBbJyddLFxuICAgICAgZm9ybUFkdmFuY2VkU2VhcmNoOiB0aGlzLmZpbHRlckZvcm1Db25maWc/LmFkdmFuY2VkPy5mb3JtID8/IFsnJ11cbiAgICB9KTtcbiAgICB0aGlzLmxvYWRpbmcodHJ1ZSk7XG4gICAgaWYgKHRoaXMuZmlsdGVyRm9ybUNvbmZpZykge1xuICAgICAgdGhpcy5maWx0ZXJGb3JtQ29uZmlnPy5tYWluPy5mb3JtQ29uZmlnPy5tYXAoaXRlbSA9PiB7XG4gICAgICAgIGl0ZW0uY2xhc3MgKz0gJyBwYWRkaW5nLW5vbmUgdy05OSc7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmZpbHRlckZvcm1Db25maWc/LmFkdmFuY2VkPy5mb3JtQ29uZmlnPy5tYXAoaXRlbSA9PiB7XG4gICAgICAgIGl0ZW0uY2xhc3MgKz0gJyBwYWRkaW5nLW5vbmUnO1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuZmlsdGVyRm9ybUNvbmZpZz8uY2hlY2tBbmRTZWFyY2gpIHtcbiAgICAgICAgdGhpcy5mb3JtRmlsdGVyLmFkZENvbnRyb2wodGhpcy5maWx0ZXJGb3JtQ29uZmlnLmNoZWNrQW5kU2VhcmNoLmZvcm1Db250cm9sTmFtZSwgbmV3IFVudHlwZWRGb3JtQ29udHJvbCh0aGlzLmZpbHRlckZvcm1Db25maWcuY2hlY2tBbmRTZWFyY2guaXNDaGVja2VkID8/IGZhbHNlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLmdldFNlbGVjdGlvbkxpc3QpIHRoaXMuY29uZmlnLmdldFNlbGVjdGlvbkxpc3QodGhpcy5zZWxlY3Rpb24pO1xuXG4gICAgaWYgKHRoaXMucmVsb2FkKSB7XG4gICAgICB0aGlzLnJlbG9hZC5zdWJzY3JpYmUoYXN5bmMgcmVsb2FkID0+IHtcbiAgICAgICAgaWYgKHJlbG9hZCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuZmlsdGVyU3VibWl0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHN1cGVyLm9uRGVzdHJveSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHN1cGVyLmFmdGVyVmlld0luaXQoKS50aGVuKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZmlsdGVyU3VibWl0KCkge1xuICAgIHRoaXMuc2hvd0FkdmFuY2VkRmlsdGVyID0gZmFsc2U7XG4gICAgYXdhaXQgZGVsYXkoMSk7XG4gICAgbGV0IGRhZG9zID0ga29hbGEoXG4gICAgICB0aGlzLmZpbHRlckZvcm1Db25maWc/Lm1haW4/LmZvcm1cbiAgICAgID8gdGhpcy5keW5hbWljRm9ybVNlcnZpY2UuZW1pdERhdGEodGhpcy5maWx0ZXJGb3JtQ29uZmlnPy5tYWluPy5mb3JtKVxuICAgICAgOiB7fVxuICAgIClcbiAgICAgIC5vYmplY3QoKVxuICAgICAgLm1lcmdlKFxuICAgICAgICB0aGlzLmZpbHRlckZvcm1Db25maWc/LmFkdmFuY2VkPy5mb3JtXG4gICAgICAgID8gdGhpcy5keW5hbWljRm9ybVNlcnZpY2UuZW1pdERhdGEodGhpcy5maWx0ZXJGb3JtQ29uZmlnPy5hZHZhbmNlZD8uZm9ybSlcbiAgICAgICAgOiB7fSlcbiAgICAgIC5nZXRWYWx1ZSgpO1xuXG4gICAgaWYgKHRoaXMuZmlsdGVyRm9ybUNvbmZpZz8uY2hlY2tBbmRTZWFyY2gpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2xOYW1lID0gdGhpcy5maWx0ZXJGb3JtQ29uZmlnLmNoZWNrQW5kU2VhcmNoLmZvcm1Db250cm9sTmFtZTtcbiAgICAgIGRhZG9zW2NvbnRyb2xOYW1lXSA9IHRoaXMuZm9ybUZpbHRlci5nZXQoY29udHJvbE5hbWUpLnZhbHVlO1xuICAgIH1cbiAgICBhd2FpdCBzdXBlci5zZWFyY2goZGFkb3MpO1xuICB9XG5cbiAgcHVibGljIHRvb2dsZUZpbHRlcigpIHtcbiAgICB0aGlzLnNob3dBZHZhbmNlZEZpbHRlciA9ICF0aGlzLnNob3dBZHZhbmNlZEZpbHRlcjtcbiAgfVxuXG4gIHB1YmxpYyBoYXZlT3B0aW9uc09uSXRlbUxpbmUoaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXNNZW51TGlzdE9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24uaGF2ZVBlcm1pc3Npb24gJiYgKFxuICAgICAgIW9wdGlvbi5zaG93QnlJdGVtTGlzdCB8fFxuICAgICAgb3B0aW9uLnNob3dCeUl0ZW1MaXN0KGl0ZW0pXG4gICAgKSkubGVuZ3RoID4gMFxuICB9XG5cbiAgcHVibGljIGhhc0Zvb3RlcigpIHtcbiAgICByZXR1cm4gISF0aGlzLml0ZW1zTGlzdC5maW5kKGl0ZW0gPT4gISFpdGVtLmZvb3Rlcik7XG4gIH1cblxuICBwcml2YXRlIGluaXRDb25maWcoKSB7XG4gICAgdGhpcy5jb2x1bW5Tb3J0ID0gdGhpcy5jb25maWcuY29sdW1uU29ydCA/PyBudWxsO1xuICAgIHRoaXMuc29ydERpcmVjdGlvbiA9IHRoaXMuY29uZmlnLnNvcnREaXJlY3Rpb24gPz8gJ2FzYyc7XG4gICAgdGhpcy5pdGVtc01lbnVMaXN0T3B0aW9ucyA9IHRoaXMuY29uZmlnLml0ZW1zTWVudUxpc3RPcHRpb25zID8/IFtdO1xuICAgIHRoaXMudHlwZVJlcXVlc3QgPSB0aGlzLmNvbmZpZy50eXBlUmVxdWVzdCA/PyAnYWxsJztcbiAgICB0aGlzLnF0ZExpc3RSZXN1bHQgPSB0aGlzLmNvbmZpZy5xdGRMaXN0UmVzdWx0ID8/IDA7XG4gICAgdGhpcy5jb2x1bW5zVG9TaG93SW5MaXN0ID0gdGhpcy5jb25maWcuY29sdW1uc1RvU2hvd0luTGlzdDtcbiAgICB0aGlzLml0ZW1zTGlzdCA9IHRoaXMuY29uZmlnLml0ZW1zTGlzdC5tYXAoaXRlbSA9PiB7XG4gICAgICBpZiAoIWl0ZW0uZGJsQ2xpY2spIHtcbiAgICAgICAgaXRlbS5kYmxDbGljayA9ICgpID0+IHtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH0pO1xuICAgIHRoaXMuc2hvd0FkdmFuY2VkRmlsdGVyID0gdGhpcy5jb25maWcuc2hvd0FkdmFuY2VkRmlsdGVyO1xuICAgIHRoaXMuZmlsdGVyRm9ybUNvbmZpZyA9IHRoaXMuY29uZmlnLmZpbHRlckZvcm1Db25maWc7XG4gICAgdGhpcy5yZXF1ZXN0ID0gdGhpcy5jb25maWcucmVxdWVzdDtcbiAgICB0aGlzLnJlbG9hZCA9IHRoaXMuY29uZmlnLnJlbG9hZDtcbiAgICB0aGlzLnJlc3BvbnNlSW5kZXhOYW1lID0gdGhpcy5jb25maWcucmVzcG9uc2VJbmRleE5hbWU7XG4gICAgdGhpcy5yZXNwb25zZVF0ZFJlc3VsdEluZGV4TmFtZSA9IHRoaXMuY29uZmlnLnJlc3BvbnNlUXRkUmVzdWx0SW5kZXhOYW1lO1xuICAgIHRoaXMuZmlsdGVyUGFyYW1zID0gdGhpcy5jb25maWcuZmlsdGVyUGFyYW1zID8/IG5ldyBCZWhhdmlvclN1YmplY3Q8S29hbGFMaXN0Rm9ybUZpbHRlckludGVyZmFjZT4obnVsbCk7XG4gICAgdGhpcy5lbXB0eUxpc3RDb21wb25lbnQgPSB0aGlzLmNvbmZpZy5lbXB0eUxpc3RDb21wb25lbnQ7XG4gICAgdGhpcy5lcnJvckxpc3RDb21wb25lbnQgPSB0aGlzLmNvbmZpZy5lcnJvckxpc3RDb21wb25lbnQ7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IHRoaXMuY29uZmlnLnBhZ2VTaXplID8/IDMwO1xuICAgIHRoaXMuZGlzYWJsZWRDaGVja2JveEl0ZW1MaXN0ID0gdGhpcy5jb25maWcuZGlzYWJsZWRDaGVja2JveEl0ZW1MaXN0O1xuICAgIHRoaXMuc3ViTGlzdENvbmZpZyA9IHRoaXMuY29uZmlnLnN1Ykxpc3RDb25maWc7XG4gICAgdGhpcy5idG5Db2xsYXBzZVN1Ykxpc3RDb25maWcgPSB0aGlzLmNvbmZpZy5idG5Db2xsYXBzZVN1Ykxpc3RDb25maWc7XG4gICAgdGhpcy5oaWRlUGFnaW5hdG9yID0gdGhpcy5jb25maWcuaGlkZVBhZ2luYXRvcjtcbiAgICB0aGlzLmN1c3RvbUNsYXNzID0gdGhpcy5jb25maWcuY3VzdG9tQ2xhc3M7XG4gICAgdGhpcy5saW1pdE9wdGlvbnMgPSB0aGlzLmNvbmZpZy5saW1pdE9wdGlvbnMgPz8gdGhpcy5saW1pdE9wdGlvbnM7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJsaXN0LWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cImN1c3RvbUNsYXNzXCI+XG4gIDxkaXYgKm5nSWY9XCJmaWx0ZXJGb3JtQ29uZmlnXCIgY2xhc3M9XCJsaXN0LWZpbHRlclwiPlxuICAgIDxmb3JtIChuZ1N1Ym1pdCk9XCJmaWx0ZXJTdWJtaXQoKVwiIFtmb3JtR3JvdXBdPVwiZm9ybUZpbHRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1haW5cIj5cbiAgICAgICAgPGtvYWxhLWR5bmFtaWMtZm9ybVxuICAgICAgICAgICpuZ0lmPVwiZmlsdGVyRm9ybUNvbmZpZy5tYWluXCJcbiAgICAgICAgICBbZm9ybV09XCJmaWx0ZXJGb3JtQ29uZmlnLm1haW4uZm9ybVwiXG4gICAgICAgICAgW2Zvcm1Db25maWddPVwiZmlsdGVyRm9ybUNvbmZpZy5tYWluLmZvcm1Db25maWdcIlxuICAgICAgICAgIFtzZXRWYWx1ZXNdPVwiZmlsdGVyRm9ybUNvbmZpZy5tYWluLnNldFZhbHVlc1wiXG4gICAgICAgICAgW3Nob3dGaWVsZHNdPVwiZmlsdGVyRm9ybUNvbmZpZy5tYWluLnNob3dGaWVsZHNcIj5cbiAgICAgICAgPC9rb2FsYS1keW5hbWljLWZvcm0+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICA8bGkgKm5nSWY9XCJmaWx0ZXJGb3JtQ29uZmlnLmFkdmFuY2VkXCIgY2xhc3M9XCJvcHRpb25cIj5cbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInRvb2dsZUZpbHRlcigpXCIgY29sb3I9XCJwcmltYXJ5XCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJGaWx0cm8gQXZhbsOnYWRvXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYmVsb3dcIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj50dW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPGxpICpuZ0lmPVwiZmlsdGVyRm9ybUNvbmZpZy5jaGVja0FuZFNlYXJjaFwiIGNsYXNzPVwiY2hlY2tib3gtZmlsdGVyXCI+XG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjbGljayk9XCJmaWx0ZXJTdWJtaXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmlsdGVyRm9ybUNvbmZpZy5jaGVja0FuZFNlYXJjaC5mb3JtQ29udHJvbE5hbWVcIj5cbiAgICAgICAgICAgICAge3tmaWx0ZXJGb3JtQ29uZmlnLmNoZWNrQW5kU2VhcmNoLmxhYmVsfX1cbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgPGxpIGNsYXNzPVwib3B0aW9uXCI+XG4gICAgICAgICAgICA8a29hbGEtc3VibWl0XG4gICAgICAgICAgICAgIFtidG5TdWJtaXREaXNhYmxlZF09XCJidG5TdWJtaXREaXNhYmxlZFwiXG4gICAgICAgICAgICAgIFtmZ109XCJmb3JtRmlsdGVyXCJcbiAgICAgICAgICAgICAgW2ljb25CdXR0b25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtsb2FkZXJdPVwibG9hZGVyXCJcbiAgICAgICAgICAgICAgaWNvbj1cInNlYXJjaFwiPlxuICAgICAgICAgICAgPC9rb2FsYS1zdWJtaXQ+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImZpbHRlckZvcm1Db25maWcuYWR2YW5jZWRcIiBbbmdDbGFzc109XCJ7J3Nob3cnOiBzaG93QWR2YW5jZWRGaWx0ZXJ9XCIgY2xhc3M9XCJhZHZhbmNlZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZpbHRlclwiPlxuICAgICAgICAgIDxrb2FsYS1keW5hbWljLWZvcm1cbiAgICAgICAgICAgIFtmb3JtXT1cImZpbHRlckZvcm1Db25maWcuYWR2YW5jZWQuZm9ybVwiXG4gICAgICAgICAgICBbZm9ybUNvbmZpZ109XCJmaWx0ZXJGb3JtQ29uZmlnLmFkdmFuY2VkLmZvcm1Db25maWdcIlxuICAgICAgICAgICAgW3NldFZhbHVlc109XCJmaWx0ZXJGb3JtQ29uZmlnLmFkdmFuY2VkLnNldFZhbHVlc1wiXG4gICAgICAgICAgICBbc2hvd0ZpZWxkc109XCJmaWx0ZXJGb3JtQ29uZmlnLmFkdmFuY2VkLnNob3dGaWVsZHNcIj5cbiAgICAgICAgICA8L2tvYWxhLWR5bmFtaWMtZm9ybT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+XG4gIDwvZGl2PlxuICA8bmF2IGNsYXNzPVwibWVudS1saXN0XCI+XG4gICAgPHVsIGNsYXNzPVwibWVudVwiPlxuICAgICAgPGxpICpuZ0lmPVwic2VsZWN0aW9uLmhhc1ZhbHVlKClcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2l0ZW1zU2VsZWN0TGlzdF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2xpPlxuICAgICAgPGxpICpuZ0lmPVwic2VsZWN0aW9uLmhhc1ZhbHVlKClcIiBjbGFzcz1cInRleHQtY2VudGVyXCI+fDwvbGk+XG4gICAgICA8bGk+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpdGVtc0xpc3RdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L25hdj5cbiAgPGRpdiAqbmdJZj1cImxvYWRlciB8IGFzeW5jXCIgY2xhc3M9XCJzcGlubmVyLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntcbiAgICAnbm8tZmlsdGVyJzogIWZpbHRlckZvcm1Db25maWdcbiAgfVwiPlxuICAgIDxtYXQtc3Bpbm5lciBjb2xvcj1cInByaW1hcnlcIiBkaWFtZXRlcj1cIjQwXCI+PC9tYXQtc3Bpbm5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJsaXN0XCI+XG4gICAgPHRhYmxlXG4gICAgICAqbmdJZj1cIiFlbXB0eUxpc3RDb21wb25lbnQgfHwgKGVtcHR5TGlzdENvbXBvbmVudCAmJiBkYXRhU291cmNlPy5kYXRhPy5sZW5ndGggPiAwKSBlbHNlIGVtcHR5TGlzdFwiXG4gICAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcbiAgICAgIFttYXRTb3J0QWN0aXZlXT1cImNvbHVtblNvcnRcIlxuICAgICAgW2lkXT1cInRhYmxlSWRcIlxuICAgICAgbXVsdGlUZW1wbGF0ZURhdGFSb3dzXG4gICAgICBjbGFzcz1cInRhYmxlLWhvdmVyXCJcbiAgICAgIG1hdC10YWJsZVxuICAgICAgbWF0U29ydFxuICAgICAgW21hdFNvcnREaXJlY3Rpb25dPVwic29ydERpcmVjdGlvblwiIG1hdFNvcnREaXNhYmxlQ2xlYXI+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInNlbGVjdFwiPlxuICAgICAgICA8dGggKm1hdEhlYWRlckNlbGxEZWYgbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3RBbGwoKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgYWxsU2VsZWN0ZWQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgIShhbGxTZWxlY3RlZCQgfCBhc3luYylcIj5cbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBtYXQtY2VsbD5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94ICpuZ0lmPVwiZGlzYWJsZWRDaGVja2JveEl0ZW1MaXN0ID8gIWRpc2FibGVkQ2hlY2tib3hJdGVtTGlzdChpdGVtKSA6IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3Rpb24udG9nZ2xlKGl0ZW0pIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBzZWxlY3RJdGVtKCk7XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvbi5pc1NlbGVjdGVkKGl0ZW0pXCI+XG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCAqbWF0Rm9vdGVyQ2VsbERlZiBtYXQtZm9vdGVyLWNlbGw+PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3ViTGlzdENvbmZpZyAmJiBidG5Db2xsYXBzZVN1Ykxpc3RDb25maWdcIiBtYXRDb2x1bW5EZWY9XCJjb2xsYXBzZUJ1dHRvblwiPlxuICAgICAgICA8dGggKm1hdEhlYWRlckNlbGxEZWYgbWF0LWhlYWRlci1jZWxsPjwvdGg+XG4gICAgICAgIDx0ZCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgbWF0LWNlbGw+XG4gICAgICAgICAgPGtvYWxhLWJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJidG5Db2xsYXBzZVN1Ykxpc3RDb25maWcuc2hvdyhpdGVtKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhwYW5kZWRFbGVtZW50ID0gZXhwYW5kZWRFbGVtZW50ID09PSBpdGVtID8gbnVsbCA6IGl0ZW1cIlxuICAgICAgICAgICAgW2tvYWxhSWNvbl09XCJidG5Db2xsYXBzZVN1Ykxpc3RDb25maWcua29hbGFJY29uXCJcbiAgICAgICAgICAgIFtpY29uXT1cImJ0bkNvbGxhcHNlU3ViTGlzdENvbmZpZy5pY29uXCJcbiAgICAgICAgICAgIFt0b29sdGlwXT1cImJ0bkNvbGxhcHNlU3ViTGlzdENvbmZpZy50b29sdGlwXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJidG5Db2xsYXBzZVN1Ykxpc3RDb25maWcuaWNvbkNvbG9yXCJcbiAgICAgICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPVwiYnRuQ29sbGFwc2VTdWJMaXN0Q29uZmlnLmJhY2tncm91bmRDb2xvclwiXG4gICAgICAgICAgICBba29hbGFJY29uU2l6ZV09XCIyMlwiPlxuICAgICAgICAgIDwva29hbGEtYnV0dG9uPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgKm1hdEZvb3RlckNlbGxEZWYgbWF0LWZvb3Rlci1jZWxsPjwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbUxpc3Qgb2YgaXRlbXNMaXN0XCIgW21hdENvbHVtbkRlZl09XCJpdGVtTGlzdC5jb2x1bW5EZWZcIj5cbiAgICAgICAgPHRoICptYXRIZWFkZXJDZWxsRGVmIFttYXQtc29ydC1oZWFkZXJdPVwiaXRlbUxpc3Quc29ydEhlYWRlclwiIFtkaXNhYmxlZF09XCIhaXRlbUxpc3Quc29ydEhlYWRlclwiIG1hdC1oZWFkZXItY2VsbD57e2l0ZW1MaXN0LmxhYmVsfX08L3RoPlxuICAgICAgICA8dGQgKGRibGNsaWNrKT1cIml0ZW1MaXN0LmRibENsaWNrKGl0ZW0pXCIgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiIG1hdC1jZWxsPlxuXHQgICAgICAgIDxrb2FsYS1keW5hbWljLWNvbXBvbmVudCAqbmdJZj1cIml0ZW1MaXN0Lml0ZW1Db21wb25lbnQgZWxzZSBpdGVtVGV4dFwiXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkeW5hbWljQ29tcG9uZW50XT1cIml0ZW1MaXN0Lml0ZW1Db21wb25lbnQoaXRlbSlcIj48L2tvYWxhLWR5bmFtaWMtY29tcG9uZW50PlxuXHQgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXRlbVRleHQ+XG5cdCAgICAgICAgICB7e2l0ZW1MaXN0Lml0ZW1OYW1lUHJvcGVydHkoaXRlbSl9fVxuXHQgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCAqbWF0Rm9vdGVyQ2VsbERlZiBtYXQtZm9vdGVyLWNlbGw+XG4gICAgICAgICAgPGtvYWxhLWR5bmFtaWMtY29tcG9uZW50ICpuZ0lmPVwiaXRlbUxpc3QuZm9vdGVyPy5pdGVtQ29tcG9uZW50IGVsc2UgaXRlbUZvb3RlclRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZHluYW1pY0NvbXBvbmVudF09XCJpdGVtTGlzdC5mb290ZXI/Lml0ZW1Db21wb25lbnQocmVzcG9uc2VSZXF1ZXN0KVwiPjwva29hbGEtZHluYW1pYy1jb21wb25lbnQ+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNpdGVtRm9vdGVyVGV4dD5cbiAgICAgICAgICAgIHt7aXRlbUxpc3QuZm9vdGVyPy5pdGVtTmFtZVByb3BlcnR5KHJlc3BvbnNlUmVxdWVzdCl9fVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN1Ykxpc3RDb25maWcgJiYgYnRuQ29sbGFwc2VTdWJMaXN0Q29uZmlnXCIgbWF0Q29sdW1uRGVmPVwia29hbGFMaXN0RGV0YWlsc1wiPlxuICAgICAgICA8dGggKm1hdEhlYWRlckNlbGxEZWYgbWF0LWhlYWRlci1jZWxsPjwvdGg+XG4gICAgICAgIDx0ZCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5zVG9TaG93SW5MaXN0Lmxlbmd0aFwiIG1hdC1jZWxsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLWRldGFpbFwiIFtAZGV0YWlsRXhwYW5kXT1cIml0ZW0gPT0gZXhwYW5kZWRFbGVtZW50ID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnXCI+XG4gICAgICAgICAgICA8a29hbGEtbGlzdCBbY29uZmlnXT1cInN1Ykxpc3RDb25maWcoaXRlbSlcIj48L2tvYWxhLWxpc3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCAqbWF0Rm9vdGVyQ2VsbERlZiBtYXQtZm9vdGVyLWNlbGw+PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIm9wdGlvbnNcIj5cbiAgICAgICAgPHRoICptYXRIZWFkZXJDZWxsRGVmIG1hdC1oZWFkZXItY2VsbD48L3RoPlxuICAgICAgICA8dGQgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiIG1hdC1jZWxsPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJoYXZlT3B0aW9uc09uSXRlbUxpbmUoaXRlbSlcIj5cbiAgICAgICAgICAgIDxidXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm9wdGlvbnNcIiBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz0nbWF0ZXJpYWwtaWNvbnMnPm1vcmVfdmVydDwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPG1hdC1tZW51ICNvcHRpb25zPVwibWF0TWVudVwiIGNsYXNzPVwibWVudS1saXN0XCIgeVBvc2l0aW9uPVwiYmVsb3dcIj5cblx0ICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGl0ZW1zTWVudUxpc3RPcHRpb25zXCI+XG5cdCAgICAgICAgICAgICAgPGJ1dHRvblxuXHRcdCAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wdGlvbi5hY3Rpb24oaXRlbSlcIlxuXHRcdCAgICAgICAgICAgICAgKm5nSWY9XCJvcHRpb24uaGF2ZVBlcm1pc3Npb24gJiYgKFxuXHRcdCAgICAgICAgICAgICAgICAhb3B0aW9uLnNob3dCeUl0ZW1MaXN0IHx8XG5cdFx0ICAgICAgICAgICAgICAgIG9wdGlvbi5zaG93QnlJdGVtTGlzdChpdGVtKVxuXHQgICAgICAgICAgICAgICAgKVwiXG5cdFx0ICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtPlxuXHQgICAgICAgICAgICAgICAgPG1hdC1pY29uPnt7b3B0aW9uLmljb259fTwvbWF0LWljb24+XG5cdCAgICAgICAgICAgICAgICA8c3Bhbj57e29wdGlvbi5uYW1lfX08L3NwYW4+XG5cdCAgICAgICAgICAgICAgPC9idXR0b24+XG5cdCAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkICptYXRGb290ZXJDZWxsRGVmIG1hdC1mb290ZXItY2VsbD48L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDx0ciAqbWF0SGVhZGVyUm93RGVmPVwiY29sdW1uc1RvU2hvd0luTGlzdDsgc3RpY2t5OiB0cnVlXCIgbWF0LWhlYWRlci1yb3c+PC90cj5cbiAgICAgIDx0ciAqbWF0Um93RGVmPVwibGV0IGl0ZW07IGNvbHVtbnM6IGNvbHVtbnNUb1Nob3dJbkxpc3Q7XCIgbWF0LXJvdz48L3RyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN1Ykxpc3RDb25maWcgJiYgYnRuQ29sbGFwc2VTdWJMaXN0Q29uZmlnXCI+XG4gICAgICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ2tvYWxhTGlzdERldGFpbHMnXVwiIGNsYXNzPVwiaXRlbS1kZXRhaWwtcm93XCI+PC90cj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0Zvb3RlcigpXCI+XG4gICAgICAgIDx0ciAqbWF0Rm9vdGVyUm93RGVmPVwiY29sdW1uc1RvU2hvd0luTGlzdDsgc3RpY2t5OiB0cnVlXCIgbWF0LWZvb3Rlci1yb3c+PC90cj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvdGFibGU+XG4gICAgPG5nLXRlbXBsYXRlICNlbXB0eUxpc3Q+XG4gICAgICA8a29hbGEtZHluYW1pYy1jb21wb25lbnQgKm5nSWY9XCIhKGZpbHRlckVycm9yJCB8IGFzeW5jKSBlbHNlIGVycm9yTGlzdFwiIFtkeW5hbWljQ29tcG9uZW50XT1cImVtcHR5TGlzdENvbXBvbmVudFwiPjwva29hbGEtZHluYW1pYy1jb21wb25lbnQ+XG4gICAgICA8bmctdGVtcGxhdGUgI2Vycm9yTGlzdD5cbiAgICAgICAgPGtvYWxhLWR5bmFtaWMtY29tcG9uZW50IFtkeW5hbWljQ29tcG9uZW50XT1cImVycm9yTGlzdENvbXBvbmVudFwiPjwva29hbGEtZHluYW1pYy1jb21wb25lbnQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiIWhpZGVQYWdpbmF0b3JcIiBjbGFzcz1cImNvbnRlbnQtcGFnaW5hdG9yXCI+XG4gICAgPG1hdC1wYWdpbmF0b3JcbiAgICAgIFtsZW5ndGhdPVwicXRkTGlzdFJlc3VsdFwiXG4gICAgICBbcGFnZVNpemVPcHRpb25zXT1cImxpbWl0T3B0aW9uc1wiXG4gICAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxuICAgICAgc2hvd0ZpcnN0TGFzdEJ1dHRvbnM+XG4gICAgPC9tYXQtcGFnaW5hdG9yPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input, ViewChild } from '@angular/core';
|
|
2
|
+
import { ListAbstract } from './list.abstract';
|
|
3
|
+
import { UntypedFormControl } from '@angular/forms';
|
|
4
|
+
import { BehaviorSubject, Observable } from 'rxjs';
|
|
5
|
+
import { MatSort } from "@angular/material/sort";
|
|
6
|
+
import { delay } from "@koalarx/utils/operators/delay";
|
|
7
|
+
import { koala } from "@koalarx/utils";
|
|
8
|
+
import { MatPaginator } from "@angular/material/paginator";
|
|
9
|
+
import { animate, state, style, transition, trigger } from "@angular/animations";
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@angular/forms";
|
|
12
|
+
import * as i2 from "@koalarx/ui/form";
|
|
13
|
+
import * as i3 from "ngx-device-detector";
|
|
14
|
+
import * as i4 from "@angular/common";
|
|
15
|
+
import * as i5 from "@angular/material/checkbox";
|
|
16
|
+
import * as i6 from "@angular/material/button";
|
|
17
|
+
import * as i7 from "@angular/material/icon";
|
|
18
|
+
import * as i8 from "@angular/material/progress-spinner";
|
|
19
|
+
import * as i9 from "@koalarx/ui/dynamic-component";
|
|
20
|
+
import * as i10 from "@koalarx/ui/button";
|
|
21
|
+
import * as i11 from "@angular/material/menu";
|
|
22
|
+
import * as i12 from "@angular/material/table";
|
|
23
|
+
import * as i13 from "@angular/material/sort";
|
|
24
|
+
import * as i14 from "@angular/material/tooltip";
|
|
25
|
+
import * as i15 from "@angular/material/paginator";
|
|
26
|
+
export class ListComponent extends ListAbstract {
|
|
27
|
+
constructor(fb, dynamicFormService, deviceService) {
|
|
28
|
+
super(() => this.config?.request ?? new Observable(), (response) => {
|
|
29
|
+
this.responseRequest = response;
|
|
30
|
+
this.dataSource.data = this.config?.responseIndexName
|
|
31
|
+
? (this.config.responseIndexName
|
|
32
|
+
? response[this.config.responseIndexName]
|
|
33
|
+
: [])
|
|
34
|
+
: response;
|
|
35
|
+
if (this.config?.getDataSource)
|
|
36
|
+
this.config?.getDataSource(this.dataSource.data);
|
|
37
|
+
this.qtdListResult = this.config?.responseQtdResultIndexName
|
|
38
|
+
? this.config.responseQtdResultIndexName(response) ?? 0
|
|
39
|
+
: this.dataSource.data?.length ?? 0;
|
|
40
|
+
}, () => this.formFilter ?? fb.group({}));
|
|
41
|
+
this.fb = fb;
|
|
42
|
+
this.dynamicFormService = dynamicFormService;
|
|
43
|
+
this.deviceService = deviceService;
|
|
44
|
+
this.hidePaginator = false;
|
|
45
|
+
this.sortDirection = 'asc';
|
|
46
|
+
this.typeRequest = 'all';
|
|
47
|
+
this.showAdvancedFilter = false;
|
|
48
|
+
this.qtdListResult = 0;
|
|
49
|
+
this.expandedElement = false;
|
|
50
|
+
}
|
|
51
|
+
ngOnInit() {
|
|
52
|
+
this.initConfig();
|
|
53
|
+
this.formFilter = this.fb.group({
|
|
54
|
+
formSearch: this.filterFormConfig?.main?.form ?? [''],
|
|
55
|
+
formAdvancedSearch: this.filterFormConfig?.advanced?.form ?? ['']
|
|
56
|
+
});
|
|
57
|
+
this.loading(true);
|
|
58
|
+
if (this.filterFormConfig) {
|
|
59
|
+
this.filterFormConfig?.main?.formConfig?.map(item => {
|
|
60
|
+
item.class += ' padding-none w-99';
|
|
61
|
+
return item;
|
|
62
|
+
});
|
|
63
|
+
this.filterFormConfig?.advanced?.formConfig?.map(item => {
|
|
64
|
+
item.class += ' padding-none';
|
|
65
|
+
return item;
|
|
66
|
+
});
|
|
67
|
+
if (this.filterFormConfig?.checkAndSearch) {
|
|
68
|
+
this.formFilter.addControl(this.filterFormConfig.checkAndSearch.formControlName, new UntypedFormControl(this.filterFormConfig.checkAndSearch.isChecked ?? false));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (this.config.getSelectionList)
|
|
72
|
+
this.config.getSelectionList(this.selection);
|
|
73
|
+
if (this.reload) {
|
|
74
|
+
this.reload.subscribe(async (reload) => {
|
|
75
|
+
if (reload) {
|
|
76
|
+
await this.filterSubmit();
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
ngOnDestroy() {
|
|
82
|
+
super.onDestroy();
|
|
83
|
+
}
|
|
84
|
+
ngAfterViewInit() {
|
|
85
|
+
super.afterViewInit().then();
|
|
86
|
+
}
|
|
87
|
+
async filterSubmit() {
|
|
88
|
+
this.showAdvancedFilter = false;
|
|
89
|
+
await delay(1);
|
|
90
|
+
let dados = koala(this.filterFormConfig?.main?.form
|
|
91
|
+
? this.dynamicFormService.emitData(this.filterFormConfig?.main?.form)
|
|
92
|
+
: {})
|
|
93
|
+
.object()
|
|
94
|
+
.merge(this.filterFormConfig?.advanced?.form
|
|
95
|
+
? this.dynamicFormService.emitData(this.filterFormConfig?.advanced?.form)
|
|
96
|
+
: {})
|
|
97
|
+
.getValue();
|
|
98
|
+
if (this.filterFormConfig?.checkAndSearch) {
|
|
99
|
+
const controlName = this.filterFormConfig.checkAndSearch.formControlName;
|
|
100
|
+
dados[controlName] = this.formFilter.get(controlName).value;
|
|
101
|
+
}
|
|
102
|
+
await super.search(dados);
|
|
103
|
+
}
|
|
104
|
+
toogleFilter() {
|
|
105
|
+
this.showAdvancedFilter = !this.showAdvancedFilter;
|
|
106
|
+
}
|
|
107
|
+
haveOptionsOnItemLine(item) {
|
|
108
|
+
return this.itemsMenuListOptions.filter(option => option.havePermission && (!option.showByItemList ||
|
|
109
|
+
option.showByItemList(item))).length > 0;
|
|
110
|
+
}
|
|
111
|
+
hasFooter() {
|
|
112
|
+
return !!this.itemsList.find(item => !!item.footer);
|
|
113
|
+
}
|
|
114
|
+
initConfig() {
|
|
115
|
+
this.columnSort = this.config.columnSort ?? null;
|
|
116
|
+
this.sortDirection = this.config.sortDirection ?? 'asc';
|
|
117
|
+
this.itemsMenuListOptions = this.config.itemsMenuListOptions ?? [];
|
|
118
|
+
this.typeRequest = this.config.typeRequest ?? 'all';
|
|
119
|
+
this.qtdListResult = this.config.qtdListResult ?? 0;
|
|
120
|
+
this.columnsToShowInList = this.config.columnsToShowInList;
|
|
121
|
+
this.itemsList = this.config.itemsList.map(item => {
|
|
122
|
+
if (!item.dblClick) {
|
|
123
|
+
item.dblClick = () => {
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
return item;
|
|
127
|
+
});
|
|
128
|
+
this.showAdvancedFilter = this.config.showAdvancedFilter;
|
|
129
|
+
this.filterFormConfig = this.config.filterFormConfig;
|
|
130
|
+
this.request = this.config.request;
|
|
131
|
+
this.reload = this.config.reload;
|
|
132
|
+
this.responseIndexName = this.config.responseIndexName;
|
|
133
|
+
this.responseQtdResultIndexName = this.config.responseQtdResultIndexName;
|
|
134
|
+
this.filterParams = this.config.filterParams ?? new BehaviorSubject(null);
|
|
135
|
+
this.emptyListComponent = this.config.emptyListComponent;
|
|
136
|
+
this.errorListComponent = this.config.errorListComponent;
|
|
137
|
+
this.pageSize = this.config.pageSize ?? 30;
|
|
138
|
+
this.disabledCheckboxItemList = this.config.disabledCheckboxItemList;
|
|
139
|
+
this.subListConfig = this.config.subListConfig;
|
|
140
|
+
this.btnCollapseSubListConfig = this.config.btnCollapseSubListConfig;
|
|
141
|
+
this.hidePaginator = this.config.hidePaginator;
|
|
142
|
+
this.customClass = this.config.customClass;
|
|
143
|
+
this.limitOptions = this.config.limitOptions ?? this.limitOptions;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
ListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ListComponent, deps: [{ token: i1.UntypedFormBuilder }, { token: i2.KoalaDynamicFormService }, { token: i3.DeviceDetectorService }], target: i0.ɵɵFactoryTarget.Component });
|
|
147
|
+
ListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ListComponent, selector: "koala-list", inputs: { config: "config" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"list-container\" [ngClass]=\"customClass\">\n <div *ngIf=\"filterFormConfig\" class=\"list-filter\">\n <form (ngSubmit)=\"filterSubmit()\" [formGroup]=\"formFilter\">\n <div class=\"main\">\n <koala-dynamic-form\n *ngIf=\"filterFormConfig.main\"\n [form]=\"filterFormConfig.main.form\"\n [formConfig]=\"filterFormConfig.main.formConfig\"\n [setValues]=\"filterFormConfig.main.setValues\"\n [showFields]=\"filterFormConfig.main.showFields\"\n [tabIndexStart]=\"filterFormConfig.main.tabIndexStart\">\n </koala-dynamic-form>\n <ul>\n <li *ngIf=\"filterFormConfig.advanced\" class=\"option\">\n <button (click)=\"toogleFilter()\" color=\"primary\" mat-icon-button matTooltip=\"Filtro Avan\u00E7ado\"\n matTooltipPosition=\"below\" type=\"button\">\n <mat-icon>tune</mat-icon>\n </button>\n </li>\n <li *ngIf=\"filterFormConfig.checkAndSearch\" class=\"checkbox-filter\">\n <mat-checkbox (click)=\"filterSubmit()\"\n [formControlName]=\"filterFormConfig.checkAndSearch.formControlName\">\n {{filterFormConfig.checkAndSearch.label}}\n </mat-checkbox>\n </li>\n <li class=\"option\">\n <koala-submit\n [btnSubmitDisabled]=\"btnSubmitDisabled\"\n [fg]=\"formFilter\"\n [iconButton]=\"true\"\n [loader]=\"loader\"\n icon=\"search\">\n </koala-submit>\n </li>\n </ul>\n </div>\n <div *ngIf=\"filterFormConfig.advanced\" [ngClass]=\"{'show': showAdvancedFilter}\" class=\"advanced\">\n <div class=\"container-filter\">\n <koala-dynamic-form\n [form]=\"filterFormConfig.advanced.form\"\n [formConfig]=\"filterFormConfig.advanced.formConfig\"\n [setValues]=\"filterFormConfig.advanced.setValues\"\n [showFields]=\"filterFormConfig.advanced.showFields\"\n [tabIndexStart]=\"filterFormConfig.advanced.tabIndexStart\">\n </koala-dynamic-form>\n </div>\n </div>\n </form>\n </div>\n <nav class=\"menu-list\">\n <ul class=\"menu\">\n <li *ngIf=\"selection.hasValue()\">\n <ng-content select=\"[itemsSelectList]\"></ng-content>\n </li>\n <li *ngIf=\"selection.hasValue()\" class=\"text-center\">|</li>\n <li>\n <ng-content select=\"[itemsList]\"></ng-content>\n </li>\n </ul>\n </nav>\n <div *ngIf=\"loader | async\" class=\"spinner-container\" [ngClass]=\"{\n 'no-filter': !filterFormConfig\n }\">\n <mat-spinner color=\"primary\" diameter=\"40\"></mat-spinner>\n </div>\n <div class=\"list\">\n <table\n *ngIf=\"!emptyListComponent || (emptyListComponent && dataSource?.data?.length > 0) else emptyList\"\n [dataSource]=\"dataSource\"\n [matSortActive]=\"columnSort\"\n [id]=\"tableId\"\n multiTemplateDataRows\n class=\"table-hover\"\n mat-table\n matSort\n [matSortDirection]=\"sortDirection\" matSortDisableClear>\n <ng-container matColumnDef=\"select\">\n <th *matHeaderCellDef mat-header-cell>\n <mat-checkbox (change)=\"$event ? selectAll() : null\"\n [checked]=\"selection.hasValue() && allSelected$ | async\"\n [indeterminate]=\"selection.hasValue() && !(allSelected$ | async)\">\n </mat-checkbox>\n </th>\n <td *matCellDef=\"let item\" mat-cell>\n <mat-checkbox *ngIf=\"disabledCheckboxItemList ? !disabledCheckboxItemList(item) : true\"\n (change)=\"$event ? selection.toggle(item) : null\"\n (click)=\"$event.stopPropagation(); selectItem();\"\n [checked]=\"selection.isSelected(item)\">\n </mat-checkbox>\n </td>\n <td *matFooterCellDef mat-footer-cell></td>\n </ng-container>\n\n <ng-container *ngIf=\"subListConfig && btnCollapseSubListConfig\" matColumnDef=\"collapseButton\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let item\" mat-cell>\n <koala-button\n *ngIf=\"btnCollapseSubListConfig.show(item)\"\n (click)=\"expandedElement = expandedElement === item ? null : item\"\n [koalaIcon]=\"btnCollapseSubListConfig.koalaIcon\"\n [icon]=\"btnCollapseSubListConfig.icon\"\n [tooltip]=\"btnCollapseSubListConfig.tooltip\"\n [color]=\"btnCollapseSubListConfig.iconColor\"\n [backgroundColor]=\"btnCollapseSubListConfig.backgroundColor\"\n [koalaIconSize]=\"22\">\n </koala-button>\n </td>\n <td *matFooterCellDef mat-footer-cell></td>\n </ng-container>\n\n <ng-container *ngFor=\"let itemList of itemsList\" [matColumnDef]=\"itemList.columnDef\">\n <th *matHeaderCellDef [mat-sort-header]=\"itemList.sortHeader\" [disabled]=\"!itemList.sortHeader\" mat-header-cell>{{itemList.label}}</th>\n <td (dblclick)=\"itemList.dblClick(item)\" *matCellDef=\"let item\" mat-cell>\n\t <koala-dynamic-component *ngIf=\"itemList.itemComponent else itemText\"\n\t [dynamicComponent]=\"itemList.itemComponent(item)\"></koala-dynamic-component>\n\t <ng-template #itemText>\n\t {{itemList.itemNameProperty(item)}}\n\t </ng-template>\n </td>\n <td *matFooterCellDef mat-footer-cell>\n <koala-dynamic-component *ngIf=\"itemList.footer?.itemComponent else itemFooterText\"\n [dynamicComponent]=\"itemList.footer?.itemComponent(responseRequest)\"></koala-dynamic-component>\n <ng-template #itemFooterText>\n {{itemList.footer?.itemNameProperty(responseRequest)}}\n </ng-template>\n </td>\n </ng-container>\n\n <ng-container *ngIf=\"subListConfig && btnCollapseSubListConfig\" matColumnDef=\"koalaListDetails\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let item\" [attr.colspan]=\"columnsToShowInList.length\" mat-cell>\n <div class=\"item-detail\" [@detailExpand]=\"item == expandedElement ? 'expanded' : 'collapsed'\">\n <koala-list [config]=\"subListConfig(item)\"></koala-list>\n </div>\n </td>\n <td *matFooterCellDef mat-footer-cell></td>\n </ng-container>\n\n <ng-container matColumnDef=\"options\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let item\" mat-cell>\n <div *ngIf=\"haveOptionsOnItemLine(item)\">\n <button [matMenuTriggerFor]=\"options\" mat-icon-button type=\"button\">\n <i class='material-icons'>more_vert</i>\n </button>\n <mat-menu #options=\"matMenu\" class=\"menu-list\" yPosition=\"below\">\n\t <div *ngFor=\"let option of itemsMenuListOptions\">\n\t <button\n\t\t (click)=\"option.action(item)\"\n\t\t *ngIf=\"option.havePermission && (\n\t\t !option.showByItemList ||\n\t\t option.showByItemList(item)\n\t )\"\n\t\t mat-menu-item>\n\t <mat-icon>{{option.icon}}</mat-icon>\n\t <span>{{option.name}}</span>\n\t </button>\n\t </div>\n </mat-menu>\n </div>\n </td>\n <td *matFooterCellDef mat-footer-cell></td>\n </ng-container>\n\n <tr *matHeaderRowDef=\"columnsToShowInList; sticky: true\" mat-header-row></tr>\n <tr *matRowDef=\"let item; columns: columnsToShowInList;\" mat-row></tr>\n <ng-container *ngIf=\"subListConfig && btnCollapseSubListConfig\">\n <tr mat-row *matRowDef=\"let row; columns: ['koalaListDetails']\" class=\"item-detail-row\"></tr>\n </ng-container>\n <ng-container *ngIf=\"hasFooter()\">\n <tr *matFooterRowDef=\"columnsToShowInList; sticky: true\" mat-footer-row></tr>\n </ng-container>\n </table>\n <ng-template #emptyList>\n <koala-dynamic-component *ngIf=\"!(filterError$ | async) else errorList\" [dynamicComponent]=\"emptyListComponent\"></koala-dynamic-component>\n <ng-template #errorList>\n <koala-dynamic-component [dynamicComponent]=\"errorListComponent\"></koala-dynamic-component>\n </ng-template>\n </ng-template>\n </div>\n <div *ngIf=\"!hidePaginator\" class=\"content-paginator\">\n <mat-paginator\n [length]=\"qtdListResult\"\n [pageSizeOptions]=\"limitOptions\"\n [pageSize]=\"pageSize\"\n showFirstLastButtons>\n </mat-paginator>\n </div>\n</div>\n", styles: [".list-container{border-radius:10px;margin:0 auto;overflow-x:hidden;width:calc(100% - 40px);position:relative}.list-container .spinner-container{position:absolute;width:100%;height:calc(100vh - 320px);top:100px;left:0;background:rgba(0,0,0,.15);z-index:2;display:flex;align-items:center;justify-content:center}.list-container .spinner-container.no-filter{top:40px}.list-container .list{display:block;height:calc(100vh - 320px);overflow-y:auto;position:relative;top:0;width:100%;z-index:1}.list-container .list table:not(.table-not-selection) .mat-header-cell:first-child,.list-container .list .mat-header-cell:last-child,.list-container .list .mat-header-cell.mat-column-collapseButton{width:5%}.list-container .list .mat-header-cell:last-child{text-align:center}.list-container .list .mat-header-row,.list-container .list .mat-row,.list-container .list .mat-footer-row{height:35px}.list-container .list .mat-row .mat-icon-button{height:35px;line-height:35px;width:35px}.list-container .list tr.detail-row:not(.expanded-row){height:0}.list-container .list .element-detail{display:flex;overflow:hidden}.list-container .list table{position:relative;width:100%;font-family:OpenSans,sans-serif;font-size:1em}.list-container .list table.table-hover tr{cursor:pointer;transition:.2s}.list-container .list table th:first-child,.list-container .list table td:first-child{padding:0 8px 0 20px}.list-container .list table th{font-size:.7em;padding:0 8px;font-family:OpenSans,sans-serif;line-height:1em}.list-container .list table td{font-size:.8em;padding:0 8px;font-family:OpenSans,sans-serif}.list-container .list table th:last-child,.list-container .list table td:last-child{padding:0 20px 0 8px}.list-container .list .mat-list-item-content,.list-container .list .mat-list-item-content .mat-list-text{padding:0}.list-container .list-filter{box-shadow:0 1px 3px #0000004d;height:60px;position:relative;z-index:3}.list-container .list-filter .main{display:flex;justify-content:space-between;font-size:1.05em;height:60px;overflow:hidden;padding-left:2.5px;position:relative;width:100%}.list-container .list-filter .main koala-dynamic-form{width:100%}.list-container .list-filter .main mat-form-field{display:inline-block}.list-container .list-filter .main .mat-form-field-appearance-fill .mat-form-field-flex{background:transparent}.list-container .list-filter .main .mat-form-field .mat-form-field-wrapper{padding-bottom:0}.list-container .list-filter .main .mat-form-field-underline,.list-container .list-filter .main .mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper,.list-container .list-filter .main .mat-form-field-wrapper .mat-form-field-subscript-wrapper{display:none}.list-container .list-filter ul{display:flex;align-items:center;font-size:0;list-style:none;margin:0;padding:0 15px 0 0;position:relative;text-align:right}.list-container .list-filter ul li{display:inline-block;font-size:14px;padding:5px;position:relative}.list-container .list-filter ul li.option button{transition:.2s}.list-container .list-filter ul li.option button:hover{background:rgba(0,0,0,.1)}.list-container .list-filter ul li.checkbox-filter{text-align:center}.list-container .list-filter ul li.checkbox-filter .checkbox-inline{top:-5px}.list-container .list-filter ul li.checkbox-filter input[type=checkbox]{margin-left:0}.list-container .list-filter ul li.checkbox-filter label{padding:0!important;width:auto}.list-container .list-filter .advanced{border-top:1px solid #dddddd;box-shadow:0 3px 10px #0000004d;height:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:60px;transition:.2s;width:100%;z-index:1}.list-container .list-filter .advanced .container-filter{padding:15px}.list-container .list-filter .advanced.show{height:360px}.list-container nav.menu-list{height:40px;margin:0;padding:3px 0;position:relative;transition:.2s;width:100%;z-index:2;box-sizing:border-box}.list-container nav.menu-list ul.menu{float:left;font-size:0;list-style:none;margin:0;padding:0 10px;position:relative;text-align:left}.list-container nav.menu-list ul.menu li{color:#616161;display:inline-block;font-size:16px;padding:0 4px}.list-container nav.menu-list ul.menu li button.mat-button,.list-container nav.menu-list ul.menu li button.koala-icon-button{display:inline-block}.list-container .content-paginator mat-paginator .mat-paginator-container{height:40px!important;min-height:40px!important}.list-container .content-paginator mat-paginator .mat-paginator-container .mat-paginator-page-size-select{height:40px;margin-top:0!important}.list-container .content-paginator mat-paginator .mat-paginator-container .mat-paginator-range-label{margin-top:3px}.list-container .content-paginator{position:relative;background:transparent!important;z-index:2;box-shadow:-3px 1px 3px #0000004d}.list-container .item-detail{overflow:hidden}.list-container tr.item-detail-row{height:0!important}.list-container tr.item-detail-row .list-container{width:100%!important}.list-container tr.item-detail-row .list-container .list{height:auto!important;max-height:250px!important}.list-container tr.item-detail-row .list-container nav.menu-list{display:none}@media (max-width: 900px){.list-container{width:100%;box-shadow:none!important;padding:15px 10px 15px 15px;box-sizing:border-box}.list-container .list{height:auto;overflow:visible;overflow:initial}.list-container .list-filter .main{justify-content:flex-end}}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i2.BtnSubmitComponent, selector: "koala-submit", inputs: ["fg", "color", "btnLabel", "btnSubmitDisabled", "loader", "iconButton", "icon", "iconColor"] }, { kind: "component", type: i2.DynamicFormComponent, selector: "koala-dynamic-form", inputs: ["form", "formConfig", "showFields", "showFieldsMoreItensConfig", "setValues", "tabIndexStart"] }, { kind: "component", type: i9.KoalaDynamicComponentFactory, selector: "koala-dynamic-component", inputs: ["dynamicComponent"] }, { kind: "component", type: i10.ButtonComponent, selector: "koala-button", inputs: ["color", "backgroundColor", "icon", "text", "tooltip", "disabled", "koalaIcon", "koalaIconSize"] }, { kind: "component", type: i11.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i11.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i11.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i12.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i12.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i12.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i12.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i12.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i12.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i12.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i12.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i12.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i12.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i12.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i12.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i12.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i12.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "directive", type: i13.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i13.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: i14.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i15.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: ListComponent, selector: "koala-list", inputs: ["config"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], animations: [
|
|
148
|
+
trigger('detailExpand', [
|
|
149
|
+
state('collapsed', style({ height: '0px', minHeight: '0' })),
|
|
150
|
+
state('expanded', style({ height: '*' })),
|
|
151
|
+
transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
|
|
152
|
+
]),
|
|
153
|
+
], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
154
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ListComponent, decorators: [{
|
|
155
|
+
type: Component,
|
|
156
|
+
args: [{ selector: 'koala-list', changeDetection: ChangeDetectionStrategy.OnPush, animations: [
|
|
157
|
+
trigger('detailExpand', [
|
|
158
|
+
state('collapsed', style({ height: '0px', minHeight: '0' })),
|
|
159
|
+
state('expanded', style({ height: '*' })),
|
|
160
|
+
transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
|
|
161
|
+
]),
|
|
162
|
+
], template: "<div class=\"list-container\" [ngClass]=\"customClass\">\n <div *ngIf=\"filterFormConfig\" class=\"list-filter\">\n <form (ngSubmit)=\"filterSubmit()\" [formGroup]=\"formFilter\">\n <div class=\"main\">\n <koala-dynamic-form\n *ngIf=\"filterFormConfig.main\"\n [form]=\"filterFormConfig.main.form\"\n [formConfig]=\"filterFormConfig.main.formConfig\"\n [setValues]=\"filterFormConfig.main.setValues\"\n [showFields]=\"filterFormConfig.main.showFields\"\n [tabIndexStart]=\"filterFormConfig.main.tabIndexStart\">\n </koala-dynamic-form>\n <ul>\n <li *ngIf=\"filterFormConfig.advanced\" class=\"option\">\n <button (click)=\"toogleFilter()\" color=\"primary\" mat-icon-button matTooltip=\"Filtro Avan\u00E7ado\"\n matTooltipPosition=\"below\" type=\"button\">\n <mat-icon>tune</mat-icon>\n </button>\n </li>\n <li *ngIf=\"filterFormConfig.checkAndSearch\" class=\"checkbox-filter\">\n <mat-checkbox (click)=\"filterSubmit()\"\n [formControlName]=\"filterFormConfig.checkAndSearch.formControlName\">\n {{filterFormConfig.checkAndSearch.label}}\n </mat-checkbox>\n </li>\n <li class=\"option\">\n <koala-submit\n [btnSubmitDisabled]=\"btnSubmitDisabled\"\n [fg]=\"formFilter\"\n [iconButton]=\"true\"\n [loader]=\"loader\"\n icon=\"search\">\n </koala-submit>\n </li>\n </ul>\n </div>\n <div *ngIf=\"filterFormConfig.advanced\" [ngClass]=\"{'show': showAdvancedFilter}\" class=\"advanced\">\n <div class=\"container-filter\">\n <koala-dynamic-form\n [form]=\"filterFormConfig.advanced.form\"\n [formConfig]=\"filterFormConfig.advanced.formConfig\"\n [setValues]=\"filterFormConfig.advanced.setValues\"\n [showFields]=\"filterFormConfig.advanced.showFields\"\n [tabIndexStart]=\"filterFormConfig.advanced.tabIndexStart\">\n </koala-dynamic-form>\n </div>\n </div>\n </form>\n </div>\n <nav class=\"menu-list\">\n <ul class=\"menu\">\n <li *ngIf=\"selection.hasValue()\">\n <ng-content select=\"[itemsSelectList]\"></ng-content>\n </li>\n <li *ngIf=\"selection.hasValue()\" class=\"text-center\">|</li>\n <li>\n <ng-content select=\"[itemsList]\"></ng-content>\n </li>\n </ul>\n </nav>\n <div *ngIf=\"loader | async\" class=\"spinner-container\" [ngClass]=\"{\n 'no-filter': !filterFormConfig\n }\">\n <mat-spinner color=\"primary\" diameter=\"40\"></mat-spinner>\n </div>\n <div class=\"list\">\n <table\n *ngIf=\"!emptyListComponent || (emptyListComponent && dataSource?.data?.length > 0) else emptyList\"\n [dataSource]=\"dataSource\"\n [matSortActive]=\"columnSort\"\n [id]=\"tableId\"\n multiTemplateDataRows\n class=\"table-hover\"\n mat-table\n matSort\n [matSortDirection]=\"sortDirection\" matSortDisableClear>\n <ng-container matColumnDef=\"select\">\n <th *matHeaderCellDef mat-header-cell>\n <mat-checkbox (change)=\"$event ? selectAll() : null\"\n [checked]=\"selection.hasValue() && allSelected$ | async\"\n [indeterminate]=\"selection.hasValue() && !(allSelected$ | async)\">\n </mat-checkbox>\n </th>\n <td *matCellDef=\"let item\" mat-cell>\n <mat-checkbox *ngIf=\"disabledCheckboxItemList ? !disabledCheckboxItemList(item) : true\"\n (change)=\"$event ? selection.toggle(item) : null\"\n (click)=\"$event.stopPropagation(); selectItem();\"\n [checked]=\"selection.isSelected(item)\">\n </mat-checkbox>\n </td>\n <td *matFooterCellDef mat-footer-cell></td>\n </ng-container>\n\n <ng-container *ngIf=\"subListConfig && btnCollapseSubListConfig\" matColumnDef=\"collapseButton\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let item\" mat-cell>\n <koala-button\n *ngIf=\"btnCollapseSubListConfig.show(item)\"\n (click)=\"expandedElement = expandedElement === item ? null : item\"\n [koalaIcon]=\"btnCollapseSubListConfig.koalaIcon\"\n [icon]=\"btnCollapseSubListConfig.icon\"\n [tooltip]=\"btnCollapseSubListConfig.tooltip\"\n [color]=\"btnCollapseSubListConfig.iconColor\"\n [backgroundColor]=\"btnCollapseSubListConfig.backgroundColor\"\n [koalaIconSize]=\"22\">\n </koala-button>\n </td>\n <td *matFooterCellDef mat-footer-cell></td>\n </ng-container>\n\n <ng-container *ngFor=\"let itemList of itemsList\" [matColumnDef]=\"itemList.columnDef\">\n <th *matHeaderCellDef [mat-sort-header]=\"itemList.sortHeader\" [disabled]=\"!itemList.sortHeader\" mat-header-cell>{{itemList.label}}</th>\n <td (dblclick)=\"itemList.dblClick(item)\" *matCellDef=\"let item\" mat-cell>\n\t <koala-dynamic-component *ngIf=\"itemList.itemComponent else itemText\"\n\t [dynamicComponent]=\"itemList.itemComponent(item)\"></koala-dynamic-component>\n\t <ng-template #itemText>\n\t {{itemList.itemNameProperty(item)}}\n\t </ng-template>\n </td>\n <td *matFooterCellDef mat-footer-cell>\n <koala-dynamic-component *ngIf=\"itemList.footer?.itemComponent else itemFooterText\"\n [dynamicComponent]=\"itemList.footer?.itemComponent(responseRequest)\"></koala-dynamic-component>\n <ng-template #itemFooterText>\n {{itemList.footer?.itemNameProperty(responseRequest)}}\n </ng-template>\n </td>\n </ng-container>\n\n <ng-container *ngIf=\"subListConfig && btnCollapseSubListConfig\" matColumnDef=\"koalaListDetails\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let item\" [attr.colspan]=\"columnsToShowInList.length\" mat-cell>\n <div class=\"item-detail\" [@detailExpand]=\"item == expandedElement ? 'expanded' : 'collapsed'\">\n <koala-list [config]=\"subListConfig(item)\"></koala-list>\n </div>\n </td>\n <td *matFooterCellDef mat-footer-cell></td>\n </ng-container>\n\n <ng-container matColumnDef=\"options\">\n <th *matHeaderCellDef mat-header-cell></th>\n <td *matCellDef=\"let item\" mat-cell>\n <div *ngIf=\"haveOptionsOnItemLine(item)\">\n <button [matMenuTriggerFor]=\"options\" mat-icon-button type=\"button\">\n <i class='material-icons'>more_vert</i>\n </button>\n <mat-menu #options=\"matMenu\" class=\"menu-list\" yPosition=\"below\">\n\t <div *ngFor=\"let option of itemsMenuListOptions\">\n\t <button\n\t\t (click)=\"option.action(item)\"\n\t\t *ngIf=\"option.havePermission && (\n\t\t !option.showByItemList ||\n\t\t option.showByItemList(item)\n\t )\"\n\t\t mat-menu-item>\n\t <mat-icon>{{option.icon}}</mat-icon>\n\t <span>{{option.name}}</span>\n\t </button>\n\t </div>\n </mat-menu>\n </div>\n </td>\n <td *matFooterCellDef mat-footer-cell></td>\n </ng-container>\n\n <tr *matHeaderRowDef=\"columnsToShowInList; sticky: true\" mat-header-row></tr>\n <tr *matRowDef=\"let item; columns: columnsToShowInList;\" mat-row></tr>\n <ng-container *ngIf=\"subListConfig && btnCollapseSubListConfig\">\n <tr mat-row *matRowDef=\"let row; columns: ['koalaListDetails']\" class=\"item-detail-row\"></tr>\n </ng-container>\n <ng-container *ngIf=\"hasFooter()\">\n <tr *matFooterRowDef=\"columnsToShowInList; sticky: true\" mat-footer-row></tr>\n </ng-container>\n </table>\n <ng-template #emptyList>\n <koala-dynamic-component *ngIf=\"!(filterError$ | async) else errorList\" [dynamicComponent]=\"emptyListComponent\"></koala-dynamic-component>\n <ng-template #errorList>\n <koala-dynamic-component [dynamicComponent]=\"errorListComponent\"></koala-dynamic-component>\n </ng-template>\n </ng-template>\n </div>\n <div *ngIf=\"!hidePaginator\" class=\"content-paginator\">\n <mat-paginator\n [length]=\"qtdListResult\"\n [pageSizeOptions]=\"limitOptions\"\n [pageSize]=\"pageSize\"\n showFirstLastButtons>\n </mat-paginator>\n </div>\n</div>\n", styles: [".list-container{border-radius:10px;margin:0 auto;overflow-x:hidden;width:calc(100% - 40px);position:relative}.list-container .spinner-container{position:absolute;width:100%;height:calc(100vh - 320px);top:100px;left:0;background:rgba(0,0,0,.15);z-index:2;display:flex;align-items:center;justify-content:center}.list-container .spinner-container.no-filter{top:40px}.list-container .list{display:block;height:calc(100vh - 320px);overflow-y:auto;position:relative;top:0;width:100%;z-index:1}.list-container .list table:not(.table-not-selection) .mat-header-cell:first-child,.list-container .list .mat-header-cell:last-child,.list-container .list .mat-header-cell.mat-column-collapseButton{width:5%}.list-container .list .mat-header-cell:last-child{text-align:center}.list-container .list .mat-header-row,.list-container .list .mat-row,.list-container .list .mat-footer-row{height:35px}.list-container .list .mat-row .mat-icon-button{height:35px;line-height:35px;width:35px}.list-container .list tr.detail-row:not(.expanded-row){height:0}.list-container .list .element-detail{display:flex;overflow:hidden}.list-container .list table{position:relative;width:100%;font-family:OpenSans,sans-serif;font-size:1em}.list-container .list table.table-hover tr{cursor:pointer;transition:.2s}.list-container .list table th:first-child,.list-container .list table td:first-child{padding:0 8px 0 20px}.list-container .list table th{font-size:.7em;padding:0 8px;font-family:OpenSans,sans-serif;line-height:1em}.list-container .list table td{font-size:.8em;padding:0 8px;font-family:OpenSans,sans-serif}.list-container .list table th:last-child,.list-container .list table td:last-child{padding:0 20px 0 8px}.list-container .list .mat-list-item-content,.list-container .list .mat-list-item-content .mat-list-text{padding:0}.list-container .list-filter{box-shadow:0 1px 3px #0000004d;height:60px;position:relative;z-index:3}.list-container .list-filter .main{display:flex;justify-content:space-between;font-size:1.05em;height:60px;overflow:hidden;padding-left:2.5px;position:relative;width:100%}.list-container .list-filter .main koala-dynamic-form{width:100%}.list-container .list-filter .main mat-form-field{display:inline-block}.list-container .list-filter .main .mat-form-field-appearance-fill .mat-form-field-flex{background:transparent}.list-container .list-filter .main .mat-form-field .mat-form-field-wrapper{padding-bottom:0}.list-container .list-filter .main .mat-form-field-underline,.list-container .list-filter .main .mat-form-field-appearance-legacy .mat-form-field-subscript-wrapper,.list-container .list-filter .main .mat-form-field-wrapper .mat-form-field-subscript-wrapper{display:none}.list-container .list-filter ul{display:flex;align-items:center;font-size:0;list-style:none;margin:0;padding:0 15px 0 0;position:relative;text-align:right}.list-container .list-filter ul li{display:inline-block;font-size:14px;padding:5px;position:relative}.list-container .list-filter ul li.option button{transition:.2s}.list-container .list-filter ul li.option button:hover{background:rgba(0,0,0,.1)}.list-container .list-filter ul li.checkbox-filter{text-align:center}.list-container .list-filter ul li.checkbox-filter .checkbox-inline{top:-5px}.list-container .list-filter ul li.checkbox-filter input[type=checkbox]{margin-left:0}.list-container .list-filter ul li.checkbox-filter label{padding:0!important;width:auto}.list-container .list-filter .advanced{border-top:1px solid #dddddd;box-shadow:0 3px 10px #0000004d;height:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:60px;transition:.2s;width:100%;z-index:1}.list-container .list-filter .advanced .container-filter{padding:15px}.list-container .list-filter .advanced.show{height:360px}.list-container nav.menu-list{height:40px;margin:0;padding:3px 0;position:relative;transition:.2s;width:100%;z-index:2;box-sizing:border-box}.list-container nav.menu-list ul.menu{float:left;font-size:0;list-style:none;margin:0;padding:0 10px;position:relative;text-align:left}.list-container nav.menu-list ul.menu li{color:#616161;display:inline-block;font-size:16px;padding:0 4px}.list-container nav.menu-list ul.menu li button.mat-button,.list-container nav.menu-list ul.menu li button.koala-icon-button{display:inline-block}.list-container .content-paginator mat-paginator .mat-paginator-container{height:40px!important;min-height:40px!important}.list-container .content-paginator mat-paginator .mat-paginator-container .mat-paginator-page-size-select{height:40px;margin-top:0!important}.list-container .content-paginator mat-paginator .mat-paginator-container .mat-paginator-range-label{margin-top:3px}.list-container .content-paginator{position:relative;background:transparent!important;z-index:2;box-shadow:-3px 1px 3px #0000004d}.list-container .item-detail{overflow:hidden}.list-container tr.item-detail-row{height:0!important}.list-container tr.item-detail-row .list-container{width:100%!important}.list-container tr.item-detail-row .list-container .list{height:auto!important;max-height:250px!important}.list-container tr.item-detail-row .list-container nav.menu-list{display:none}@media (max-width: 900px){.list-container{width:100%;box-shadow:none!important;padding:15px 10px 15px 15px;box-sizing:border-box}.list-container .list{height:auto;overflow:visible;overflow:initial}.list-container .list-filter .main{justify-content:flex-end}}\n"] }]
|
|
163
|
+
}], ctorParameters: function () { return [{ type: i1.UntypedFormBuilder }, { type: i2.KoalaDynamicFormService }, { type: i3.DeviceDetectorService }]; }, propDecorators: { config: [{
|
|
164
|
+
type: Input
|
|
165
|
+
}], paginator: [{
|
|
166
|
+
type: ViewChild,
|
|
167
|
+
args: [MatPaginator]
|
|
168
|
+
}], sort: [{
|
|
169
|
+
type: ViewChild,
|
|
170
|
+
args: [MatSort, { static: false }]
|
|
171
|
+
}] } });
|
|
172
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9saXN0L3NyYy9saWIvbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9saXN0L3NyYy9saWIvbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2SCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFzQixrQkFBa0IsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUtuRCxPQUFPLEVBQUUsT0FBTyxFQUFpQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTNELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZWpGLE1BQU0sT0FBTyxhQUFjLFNBQVEsWUFBWTtJQTRCN0MsWUFDVSxFQUFzQixFQUN0QixrQkFBMkMsRUFDM0MsYUFBb0M7UUFFNUMsS0FBSyxDQUNILEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxJQUFJLElBQUksVUFBVSxFQUFPLEVBQ25ELENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDWCxJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQztZ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QUFHLEVBQUMsQ0FBQyxDQUFDOzRCQUMxRCxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFDOzRCQUN2QyxVQUFVLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7eUJBQ3RGLENBQUM7cUJBQ0g7bUxBR2UsTUFBTTtzQkFBckIsS0FBSztnQkFFNkIsU0FBUztzQkFBM0MsU0FBUzt1QkFBQyxZQUFZO2dCQUN3QixJQUFJO3NCQUFsRCxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlzdEFic3RyYWN0IH0gZnJvbSAnLi9saXN0LmFic3RyYWN0JztcbmltcG9ydCB7IEtvYWxhTGlzdEl0ZW1NZW51T3B0aW9uSW50ZXJmYWNlIH0gZnJvbSAnLi9rb2FsYS1saXN0LWl0ZW0tbWVudS1vcHRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBLb2FsYUxpc3RGaWx0ZXJJbnRlcmZhY2UgfSBmcm9tICcuL2tvYWxhLWxpc3QtZmlsdGVyLmludGVyZmFjZSc7XG5pbXBvcnQgeyBLb2FsYUR5bmFtaWNGb3JtU2VydmljZSB9IGZyb20gJ0Brb2FsYXJ4L3VpL2Zvcm0nO1xuaW1wb3J0IHsgS29hbGFMaXN0SXRlbUludGVyZmFjZSB9IGZyb20gJy4va29hbGEtbGlzdC1pdGVtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBLb2FsYUxpc3RGb3JtRmlsdGVySW50ZXJmYWNlIH0gZnJvbSBcIi4va29hbGEtbGlzdC1mb3JtLWZpbHRlci5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IE1hdFNvcnQsIFNvcnREaXJlY3Rpb24gfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydFwiO1xuaW1wb3J0IHsgZGVsYXkgfSBmcm9tIFwiQGtvYWxhcngvdXRpbHMvb3BlcmF0b3JzL2RlbGF5XCI7XG5pbXBvcnQgeyBrb2FsYSB9IGZyb20gXCJAa29hbGFyeC91dGlsc1wiO1xuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSBcIm5neC1kZXZpY2UtZGV0ZWN0b3JcIjtcbmltcG9ydCB7IEtvYWxhTGlzdENvbmZpZ0ludGVyZmFjZSB9IGZyb20gXCIuL2tvYWxhLmxpc3QtY29uZmlnLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvclwiO1xuaW1wb3J0IHsgS29hbGFMaXN0QnRuQ29sbGFwc2VTdWJMaXN0Q29uZmlnSW50ZXJmYWNlIH0gZnJvbSBcIi4va29hbGEtbGlzdC1idG4tY29sbGFwc2Utc3ViLWxpc3QtY29uZmlnLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSBcIkBhbmd1bGFyL2FuaW1hdGlvbnNcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAna29hbGEtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydsaXN0LmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdkZXRhaWxFeHBhbmQnLCBbXG4gICAgICBzdGF0ZSgnY29sbGFwc2VkJywgc3R5bGUoe2hlaWdodDogJzBweCcsIG1pbkhlaWdodDogJzAnfSkpLFxuICAgICAgc3RhdGUoJ2V4cGFuZGVkJywgc3R5bGUoe2hlaWdodDogJyonfSkpLFxuICAgICAgdHJhbnNpdGlvbignZXhwYW5kZWQgPD0+IGNvbGxhcHNlZCcsIGFuaW1hdGUoJzIyNW1zIGN1YmljLWJlemllcigwLjQsIDAuMCwgMC4yLCAxKScpKSxcbiAgICBdKSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTGlzdENvbXBvbmVudCBleHRlbmRzIExpc3RBYnN0cmFjdCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgcHVibGljIGNvbmZpZz86IEtvYWxhTGlzdENvbmZpZ0ludGVyZmFjZTtcblxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgcHJvdGVjdGVkIHBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuICBAVmlld0NoaWxkKE1hdFNvcnQsIHtzdGF0aWM6IGZhbHNlfSkgcHJvdGVjdGVkIHNvcnQ6IE1hdFNvcnQ7XG5cbiAgcHVibGljIGN1c3RvbUNsYXNzPzogc3RyaW5nO1xuICBwdWJsaWMgY29sdW1uc1RvU2hvd0luTGlzdD86IHN0cmluZ1tdO1xuICBwdWJsaWMgaGlkZVBhZ2luYXRvcj86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNvbHVtblNvcnQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBzb3J0RGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uID0gJ2FzYyc7XG4gIHB1YmxpYyBpdGVtc01lbnVMaXN0T3B0aW9ucz86IEtvYWxhTGlzdEl0ZW1NZW51T3B0aW9uSW50ZXJmYWNlPGFueT5bXTtcbiAgcHVibGljIGl0ZW1zTGlzdD86IEtvYWxhTGlzdEl0ZW1JbnRlcmZhY2U8YW55PltdO1xuICBwdWJsaWMgcmVxdWVzdD86IE9ic2VydmFibGU8YW55PjtcbiAgcHVibGljIHJlc3BvbnNlSW5kZXhOYW1lPzogc3RyaW5nO1xuICBwdWJsaWMgcmVzcG9uc2VRdGRSZXN1bHRJbmRleE5hbWU/OiAocmVzcG9uc2U6IGFueSkgPT4gbnVtYmVyO1xuICBwdWJsaWMgcmVzcG9uc2VSZXF1ZXN0PzogYW55O1xuICBwdWJsaWMgdHlwZVJlcXVlc3Q6ICdhbGwnIHwgJ29uRGVtYW5kJyA9ICdhbGwnXG4gIHB1YmxpYyBmaWx0ZXJGb3JtQ29uZmlnPzogS29hbGFMaXN0RmlsdGVySW50ZXJmYWNlO1xuICBwdWJsaWMgcmVsb2FkPzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuICBwdWJsaWMgZm9ybUZpbHRlcj86IFVudHlwZWRGb3JtR3JvdXA7XG4gIHB1YmxpYyBzaG93QWR2YW5jZWRGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHF0ZExpc3RSZXN1bHQgPSAwO1xuICBwdWJsaWMgZGlzYWJsZWRDaGVja2JveEl0ZW1MaXN0PzogKGl0ZW06IGFueSkgPT4gYm9vbGVhbjtcbiAgcHVibGljIGV4cGFuZGVkRWxlbWVudCA9IGZhbHNlO1xuICBwdWJsaWMgYnRuQ29sbGFwc2VTdWJMaXN0Q29uZmlnPzogS29hbGFMaXN0QnRuQ29sbGFwc2VTdWJMaXN0Q29uZmlnSW50ZXJmYWNlPGFueT47XG4gIHB1YmxpYyBzdWJMaXN0Q29uZmlnPzogKGl0ZW06IGFueSkgPT4gS29hbGFMaXN0Q29uZmlnSW50ZXJmYWNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGR5bmFtaWNGb3JtU2VydmljZTogS29hbGFEeW5hbWljRm9ybVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkZXZpY2VTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICAoKSA9PiB0aGlzLmNvbmZpZz8ucmVxdWVzdCA/PyBuZXcgT2JzZXJ2YWJsZTxhbnk+KCksXG4gICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5yZXNwb25zZVJlcXVlc3QgPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSB0aGlzLmNvbmZpZz8ucmVzcG9uc2VJbmRleE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICh0aGlzLmNvbmZpZy5yZXNwb25zZUluZGV4TmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcmVzcG9uc2VbdGhpcy5jb25maWcucmVzcG9uc2VJbmRleE5hbWVdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBbXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlc3BvbnNlO1xuICAgICAgICBpZiAodGhpcy5jb25maWc/LmdldERhdGFTb3VyY2UpIHRoaXMuY29uZmlnPy5nZXREYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZS5kYXRhKTtcbiAgICAgICAgdGhpcy5xdGRMaXN0UmVzdWx0ID0gdGhpcy5jb25maWc/LnJlc3BvbnNlUXRkUmVzdWx0SW5kZXhOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5jb25maWcucmVzcG9uc2VRdGRSZXN1bHRJbmRleE5hbWUocmVzcG9uc2UpID8/IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmRhdGFTb3VyY2UuZGF0YT8ubGVuZ3RoID8/IDA7XG4gICAgICB9LFxuICAgICAgKCkgPT4gdGhpcy5mb3JtRmlsdGVyID8/IGZiLmdyb3VwKHt9KVxuICAgICk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRDb25maWcoKTtcbiAgICB0aGlzLmZvcm1GaWx0ZXIgPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGZvcm1TZWFyY2g6IHRoaXMuZmlsdGVyRm9ybUNvbmZpZz8ubWFpbj8uZm9ybSA/PyBbJyddLFxuICAgICAgZm9ybUFkdmFuY2VkU2VhcmNoOiB0aGlzLmZpbHRlckZvcm1Db25maWc/LmFkdmFuY2VkPy5mb3JtID8/IFsnJ11cbiAgICB9KTtcbiAgICB0aGlzLmxvYWRpbmcodHJ1ZSk7XG4gICAgaWYgKHRoaXMuZmlsdGVyRm9ybUNvbmZpZykge1xuICAgICAgdGhpcy5maWx0ZXJGb3JtQ29uZmlnPy5tYWluPy5mb3JtQ29uZmlnPy5tYXAoaXRlbSA9PiB7XG4gICAgICAgIGl0ZW0uY2xhc3MgKz0gJyBwYWRkaW5nLW5vbmUgdy05OSc7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmZpbHRlckZvcm1Db25maWc/LmFkdmFuY2VkPy5mb3JtQ29uZmlnPy5tYXAoaXRlbSA9PiB7XG4gICAgICAgIGl0ZW0uY2xhc3MgKz0gJyBwYWRkaW5nLW5vbmUnO1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuZmlsdGVyRm9ybUNvbmZpZz8uY2hlY2tBbmRTZWFyY2gpIHtcbiAgICAgICAgdGhpcy5mb3JtRmlsdGVyLmFkZENvbnRyb2wodGhpcy5maWx0ZXJGb3JtQ29uZmlnLmNoZWNrQW5kU2VhcmNoLmZvcm1Db250cm9sTmFtZSwgbmV3IFVudHlwZWRGb3JtQ29udHJvbCh0aGlzLmZpbHRlckZvcm1Db25maWcuY2hlY2tBbmRTZWFyY2guaXNDaGVja2VkID8/IGZhbHNlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLmdldFNlbGVjdGlvbkxpc3QpIHRoaXMuY29uZmlnLmdldFNlbGVjdGlvbkxpc3QodGhpcy5zZWxlY3Rpb24pO1xuXG4gICAgaWYgKHRoaXMucmVsb2FkKSB7XG4gICAgICB0aGlzLnJlbG9hZC5zdWJzY3JpYmUoYXN5bmMgcmVsb2FkID0+IHtcbiAgICAgICAgaWYgKHJlbG9hZCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuZmlsdGVyU3VibWl0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHN1cGVyLm9uRGVzdHJveSgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHN1cGVyLmFmdGVyVmlld0luaXQoKS50aGVuKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZmlsdGVyU3VibWl0KCkge1xuICAgIHRoaXMuc2hvd0FkdmFuY2VkRmlsdGVyID0gZmFsc2U7XG4gICAgYXdhaXQgZGVsYXkoMSk7XG4gICAgbGV0IGRhZG9zID0ga29hbGEoXG4gICAgICB0aGlzLmZpbHRlckZvcm1Db25maWc/Lm1haW4/LmZvcm1cbiAgICAgID8gdGhpcy5keW5hbWljRm9ybVNlcnZpY2UuZW1pdERhdGEodGhpcy5maWx0ZXJGb3JtQ29uZmlnPy5tYWluPy5mb3JtKVxuICAgICAgOiB7fVxuICAgIClcbiAgICAgIC5vYmplY3QoKVxuICAgICAgLm1lcmdlKFxuICAgICAgICB0aGlzLmZpbHRlckZvcm1Db25maWc/LmFkdmFuY2VkPy5mb3JtXG4gICAgICAgID8gdGhpcy5keW5hbWljRm9ybVNlcnZpY2UuZW1pdERhdGEodGhpcy5maWx0ZXJGb3JtQ29uZmlnPy5hZHZhbmNlZD8uZm9ybSlcbiAgICAgICAgOiB7fSlcbiAgICAgIC5nZXRWYWx1ZSgpO1xuXG4gICAgaWYgKHRoaXMuZmlsdGVyRm9ybUNvbmZpZz8uY2hlY2tBbmRTZWFyY2gpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2xOYW1lID0gdGhpcy5maWx0ZXJGb3JtQ29uZmlnLmNoZWNrQW5kU2VhcmNoLmZvcm1Db250cm9sTmFtZTtcbiAgICAgIGRhZG9zW2NvbnRyb2xOYW1lXSA9IHRoaXMuZm9ybUZpbHRlci5nZXQoY29udHJvbE5hbWUpLnZhbHVlO1xuICAgIH1cbiAgICBhd2FpdCBzdXBlci5zZWFyY2goZGFkb3MpO1xuICB9XG5cbiAgcHVibGljIHRvb2dsZUZpbHRlcigpIHtcbiAgICB0aGlzLnNob3dBZHZhbmNlZEZpbHRlciA9ICF0aGlzLnNob3dBZHZhbmNlZEZpbHRlcjtcbiAgfVxuXG4gIHB1YmxpYyBoYXZlT3B0aW9uc09uSXRlbUxpbmUoaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXNNZW51TGlzdE9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24uaGF2ZVBlcm1pc3Npb24gJiYgKFxuICAgICAgIW9wdGlvbi5zaG93QnlJdGVtTGlzdCB8fFxuICAgICAgb3B0aW9uLnNob3dCeUl0ZW1MaXN0KGl0ZW0pXG4gICAgKSkubGVuZ3RoID4gMFxuICB9XG5cbiAgcHVibGljIGhhc0Zvb3RlcigpIHtcbiAgICByZXR1cm4gISF0aGlzLml0ZW1zTGlzdC5maW5kKGl0ZW0gPT4gISFpdGVtLmZvb3Rlcik7XG4gIH1cblxuICBwcml2YXRlIGluaXRDb25maWcoKSB7XG4gICAgdGhpcy5jb2x1bW5Tb3J0ID0gdGhpcy5jb25maWcuY29sdW1uU29ydCA/PyBudWxsO1xuICAgIHRoaXMuc29ydERpcmVjdGlvbiA9IHRoaXMuY29uZmlnLnNvcnREaXJlY3Rpb24gPz8gJ2FzYyc7XG4gICAgdGhpcy5pdGVtc01lbnVMaXN0T3B0aW9ucyA9IHRoaXMuY29uZmlnLml0ZW1zTWVudUxpc3RPcHRpb25zID8/IFtdO1xuICAgIHRoaXMudHlwZVJlcXVlc3QgPSB0aGlzLmNvbmZpZy50eXBlUmVxdWVzdCA/PyAnYWxsJztcbiAgICB0aGlzLnF0ZExpc3RSZXN1bHQgPSB0aGlzLmNvbmZpZy5xdGRMaXN0UmVzdWx0ID8/IDA7XG4gICAgdGhpcy5jb2x1bW5zVG9TaG93SW5MaXN0ID0gdGhpcy5jb25maWcuY29sdW1uc1RvU2hvd0luTGlzdDtcbiAgICB0aGlzLml0ZW1zTGlzdCA9IHRoaXMuY29uZmlnLml0ZW1zTGlzdC5tYXAoaXRlbSA9PiB7XG4gICAgICBpZiAoIWl0ZW0uZGJsQ2xpY2spIHtcbiAgICAgICAgaXRlbS5kYmxDbGljayA9ICgpID0+IHtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH0pO1xuICAgIHRoaXMuc2hvd0FkdmFuY2VkRmlsdGVyID0gdGhpcy5jb25maWcuc2hvd0FkdmFuY2VkRmlsdGVyO1xuICAgIHRoaXMuZmlsdGVyRm9ybUNvbmZpZyA9IHRoaXMuY29uZmlnLmZpbHRlckZvcm1Db25maWc7XG4gICAgdGhpcy5yZXF1ZXN0ID0gdGhpcy5jb25maWcucmVxdWVzdDtcbiAgICB0aGlzLnJlbG9hZCA9IHRoaXMuY29uZmlnLnJlbG9hZDtcbiAgICB0aGlzLnJlc3BvbnNlSW5kZXhOYW1lID0gdGhpcy5jb25maWcucmVzcG9uc2VJbmRleE5hbWU7XG4gICAgdGhpcy5yZXNwb25zZVF0ZFJlc3VsdEluZGV4TmFtZSA9IHRoaXMuY29uZmlnLnJlc3BvbnNlUXRkUmVzdWx0SW5kZXhOYW1lO1xuICAgIHRoaXMuZmlsdGVyUGFyYW1zID0gdGhpcy5jb25maWcuZmlsdGVyUGFyYW1zID8/IG5ldyBCZWhhdmlvclN1YmplY3Q8S29hbGFMaXN0Rm9ybUZpbHRlckludGVyZmFjZT4obnVsbCk7XG4gICAgdGhpcy5lbXB0eUxpc3RDb21wb25lbnQgPSB0aGlzLmNvbmZpZy5lbXB0eUxpc3RDb21wb25lbnQ7XG4gICAgdGhpcy5lcnJvckxpc3RDb21wb25lbnQgPSB0aGlzLmNvbmZpZy5lcnJvckxpc3RDb21wb25lbnQ7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IHRoaXMuY29uZmlnLnBhZ2VTaXplID8/IDMwO1xuICAgIHRoaXMuZGlzYWJsZWRDaGVja2JveEl0ZW1MaXN0ID0gdGhpcy5jb25maWcuZGlzYWJsZWRDaGVja2JveEl0ZW1MaXN0O1xuICAgIHRoaXMuc3ViTGlzdENvbmZpZyA9IHRoaXMuY29uZmlnLnN1Ykxpc3RDb25maWc7XG4gICAgdGhpcy5idG5Db2xsYXBzZVN1Ykxpc3RDb25maWcgPSB0aGlzLmNvbmZpZy5idG5Db2xsYXBzZVN1Ykxpc3RDb25maWc7XG4gICAgdGhpcy5oaWRlUGFnaW5hdG9yID0gdGhpcy5jb25maWcuaGlkZVBhZ2luYXRvcjtcbiAgICB0aGlzLmN1c3RvbUNsYXNzID0gdGhpcy5jb25maWcuY3VzdG9tQ2xhc3M7XG4gICAgdGhpcy5saW1pdE9wdGlvbnMgPSB0aGlzLmNvbmZpZy5saW1pdE9wdGlvbnMgPz8gdGhpcy5saW1pdE9wdGlvbnM7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJsaXN0LWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cImN1c3RvbUNsYXNzXCI+XG4gIDxkaXYgKm5nSWY9XCJmaWx0ZXJGb3JtQ29uZmlnXCIgY2xhc3M9XCJsaXN0LWZpbHRlclwiPlxuICAgIDxmb3JtIChuZ1N1Ym1pdCk9XCJmaWx0ZXJTdWJtaXQoKVwiIFtmb3JtR3JvdXBdPVwiZm9ybUZpbHRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1haW5cIj5cbiAgICAgICAgPGtvYWxhLWR5bmFtaWMtZm9ybVxuICAgICAgICAgICpuZ0lmPVwiZmlsdGVyRm9ybUNvbmZpZy5tYWluXCJcbiAgICAgICAgICBbZm9ybV09XCJmaWx0ZXJGb3JtQ29uZmlnLm1haW4uZm9ybVwiXG4gICAgICAgICAgW2Zvcm1Db25maWddPVwiZmlsdGVyRm9ybUNvbmZpZy5tYWluLmZvcm1Db25maWdcIlxuICAgICAgICAgIFtzZXRWYWx1ZXNdPVwiZmlsdGVyRm9ybUNvbmZpZy5tYWluLnNldFZhbHVlc1wiXG4gICAgICAgICAgW3Nob3dGaWVsZHNdPVwiZmlsdGVyRm9ybUNvbmZpZy5tYWluLnNob3dGaWVsZHNcIlxuICAgICAgICAgIFt0YWJJbmRleFN0YXJ0XT1cImZpbHRlckZvcm1Db25maWcubWFpbi50YWJJbmRleFN0YXJ0XCI+XG4gICAgICAgIDwva29hbGEtZHluYW1pYy1mb3JtPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpICpuZ0lmPVwiZmlsdGVyRm9ybUNvbmZpZy5hZHZhbmNlZFwiIGNsYXNzPVwib3B0aW9uXCI+XG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJ0b29nbGVGaWx0ZXIoKVwiIGNvbG9yPVwicHJpbWFyeVwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiRmlsdHJvIEF2YW7Dp2Fkb1wiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24+dHVuZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDxsaSAqbmdJZj1cImZpbHRlckZvcm1Db25maWcuY2hlY2tBbmRTZWFyY2hcIiBjbGFzcz1cImNoZWNrYm94LWZpbHRlclwiPlxuICAgICAgICAgICAgPG1hdC1jaGVja2JveCAoY2xpY2spPVwiZmlsdGVyU3VibWl0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpbHRlckZvcm1Db25maWcuY2hlY2tBbmRTZWFyY2guZm9ybUNvbnRyb2xOYW1lXCI+XG4gICAgICAgICAgICAgIHt7ZmlsdGVyRm9ybUNvbmZpZy5jaGVja0FuZFNlYXJjaC5sYWJlbH19XG4gICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDxsaSBjbGFzcz1cIm9wdGlvblwiPlxuICAgICAgICAgICAgPGtvYWxhLXN1Ym1pdFxuICAgICAgICAgICAgICBbYnRuU3VibWl0RGlzYWJsZWRdPVwiYnRuU3VibWl0RGlzYWJsZWRcIlxuICAgICAgICAgICAgICBbZmddPVwiZm9ybUZpbHRlclwiXG4gICAgICAgICAgICAgIFtpY29uQnV0dG9uXT1cInRydWVcIlxuICAgICAgICAgICAgICBbbG9hZGVyXT1cImxvYWRlclwiXG4gICAgICAgICAgICAgIGljb249XCJzZWFyY2hcIj5cbiAgICAgICAgICAgIDwva29hbGEtc3VibWl0PlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJmaWx0ZXJGb3JtQ29uZmlnLmFkdmFuY2VkXCIgW25nQ2xhc3NdPVwieydzaG93Jzogc2hvd0FkdmFuY2VkRmlsdGVyfVwiIGNsYXNzPVwiYWR2YW5jZWRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1maWx0ZXJcIj5cbiAgICAgICAgICA8a29hbGEtZHluYW1pYy1mb3JtXG4gICAgICAgICAgICBbZm9ybV09XCJmaWx0ZXJGb3JtQ29uZmlnLmFkdmFuY2VkLmZvcm1cIlxuICAgICAgICAgICAgW2Zvcm1Db25maWddPVwiZmlsdGVyRm9ybUNvbmZpZy5hZHZhbmNlZC5mb3JtQ29uZmlnXCJcbiAgICAgICAgICAgIFtzZXRWYWx1ZXNdPVwiZmlsdGVyRm9ybUNvbmZpZy5hZHZhbmNlZC5zZXRWYWx1ZXNcIlxuICAgICAgICAgICAgW3Nob3dGaWVsZHNdPVwiZmlsdGVyRm9ybUNvbmZpZy5hZHZhbmNlZC5zaG93RmllbGRzXCJcbiAgICAgICAgICAgIFt0YWJJbmRleFN0YXJ0XT1cImZpbHRlckZvcm1Db25maWcuYWR2YW5jZWQudGFiSW5kZXhTdGFydFwiPlxuICAgICAgICAgIDwva29hbGEtZHluYW1pYy1mb3JtPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT5cbiAgPC9kaXY+XG4gIDxuYXYgY2xhc3M9XCJtZW51LWxpc3RcIj5cbiAgICA8dWwgY2xhc3M9XCJtZW51XCI+XG4gICAgICA8bGkgKm5nSWY9XCJzZWxlY3Rpb24uaGFzVmFsdWUoKVwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaXRlbXNTZWxlY3RMaXN0XVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgKm5nSWY9XCJzZWxlY3Rpb24uaGFzVmFsdWUoKVwiIGNsYXNzPVwidGV4dC1jZW50ZXJcIj58PC9saT5cbiAgICAgIDxsaT5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2l0ZW1zTGlzdF1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG4gIDwvbmF2PlxuICA8ZGl2ICpuZ0lmPVwibG9hZGVyIHwgYXN5bmNcIiBjbGFzcz1cInNwaW5uZXItY29udGFpbmVyXCIgW25nQ2xhc3NdPVwie1xuICAgICduby1maWx0ZXInOiAhZmlsdGVyRm9ybUNvbmZpZ1xuICB9XCI+XG4gICAgPG1hdC1zcGlubmVyIGNvbG9yPVwicHJpbWFyeVwiIGRpYW1ldGVyPVwiNDBcIj48L21hdC1zcGlubmVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImxpc3RcIj5cbiAgICA8dGFibGVcbiAgICAgICpuZ0lmPVwiIWVtcHR5TGlzdENvbXBvbmVudCB8fCAoZW1wdHlMaXN0Q29tcG9uZW50ICYmIGRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCA+IDApIGVsc2UgZW1wdHlMaXN0XCJcbiAgICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxuICAgICAgW21hdFNvcnRBY3RpdmVdPVwiY29sdW1uU29ydFwiXG4gICAgICBbaWRdPVwidGFibGVJZFwiXG4gICAgICBtdWx0aVRlbXBsYXRlRGF0YVJvd3NcbiAgICAgIGNsYXNzPVwidGFibGUtaG92ZXJcIlxuICAgICAgbWF0LXRhYmxlXG4gICAgICBtYXRTb3J0XG4gICAgICBbbWF0U29ydERpcmVjdGlvbl09XCJzb3J0RGlyZWN0aW9uXCIgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VsZWN0XCI+XG4gICAgICAgIDx0aCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jaGVja2JveCAoY2hhbmdlKT1cIiRldmVudCA/IHNlbGVjdEFsbCgpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiBhbGxTZWxlY3RlZCQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhKGFsbFNlbGVjdGVkJCB8IGFzeW5jKVwiPlxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgKm1hdENlbGxEZWY9XCJsZXQgaXRlbVwiIG1hdC1jZWxsPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggKm5nSWY9XCJkaXNhYmxlZENoZWNrYm94SXRlbUxpc3QgPyAhZGlzYWJsZWRDaGVja2JveEl0ZW1MaXN0KGl0ZW0pIDogdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIiRldmVudCA/IHNlbGVjdGlvbi50b2dnbGUoaXRlbSkgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHNlbGVjdEl0ZW0oKTtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0aW9uLmlzU2VsZWN0ZWQoaXRlbSlcIj5cbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkICptYXRGb290ZXJDZWxsRGVmIG1hdC1mb290ZXItY2VsbD48L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdWJMaXN0Q29uZmlnICYmIGJ0bkNvbGxhcHNlU3ViTGlzdENvbmZpZ1wiIG1hdENvbHVtbkRlZj1cImNvbGxhcHNlQnV0dG9uXCI+XG4gICAgICAgIDx0aCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtaGVhZGVyLWNlbGw+PC90aD5cbiAgICAgICAgPHRkICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBtYXQtY2VsbD5cbiAgICAgICAgICA8a29hbGEtYnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImJ0bkNvbGxhcHNlU3ViTGlzdENvbmZpZy5zaG93KGl0ZW0pXCJcbiAgICAgICAgICAgIChjbGljayk9XCJleHBhbmRlZEVsZW1lbnQgPSBleHBhbmRlZEVsZW1lbnQgPT09IGl0ZW0gPyBudWxsIDogaXRlbVwiXG4gICAgICAgICAgICBba29hbGFJY29uXT1cImJ0bkNvbGxhcHNlU3ViTGlzdENvbmZpZy5rb2FsYUljb25cIlxuICAgICAgICAgICAgW2ljb25dPVwiYnRuQ29sbGFwc2VTdWJMaXN0Q29uZmlnLmljb25cIlxuICAgICAgICAgICAgW3Rvb2x0aXBdPVwiYnRuQ29sbGFwc2VTdWJMaXN0Q29uZmlnLnRvb2x0aXBcIlxuICAgICAgICAgICAgW2NvbG9yXT1cImJ0bkNvbGxhcHNlU3ViTGlzdENvbmZpZy5pY29uQ29sb3JcIlxuICAgICAgICAgICAgW2JhY2tncm91bmRDb2xvcl09XCJidG5Db2xsYXBzZVN1Ykxpc3RDb25maWcuYmFja2dyb3VuZENvbG9yXCJcbiAgICAgICAgICAgIFtrb2FsYUljb25TaXplXT1cIjIyXCI+XG4gICAgICAgICAgPC9rb2FsYS1idXR0b24+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCAqbWF0Rm9vdGVyQ2VsbERlZiBtYXQtZm9vdGVyLWNlbGw+PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtTGlzdCBvZiBpdGVtc0xpc3RcIiBbbWF0Q29sdW1uRGVmXT1cIml0ZW1MaXN0LmNvbHVtbkRlZlwiPlxuICAgICAgICA8dGggKm1hdEhlYWRlckNlbGxEZWYgW21hdC1zb3J0LWhlYWRlcl09XCJpdGVtTGlzdC5zb3J0SGVhZGVyXCIgW2Rpc2FibGVkXT1cIiFpdGVtTGlzdC5zb3J0SGVhZGVyXCIgbWF0LWhlYWRlci1jZWxsPnt7aXRlbUxpc3QubGFiZWx9fTwvdGg+XG4gICAgICAgIDx0ZCAoZGJsY2xpY2spPVwiaXRlbUxpc3QuZGJsQ2xpY2soaXRlbSlcIiAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgbWF0LWNlbGw+XG5cdCAgICAgICAgPGtvYWxhLWR5bmFtaWMtY29tcG9uZW50ICpuZ0lmPVwiaXRlbUxpc3QuaXRlbUNvbXBvbmVudCBlbHNlIGl0ZW1UZXh0XCJcblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2R5bmFtaWNDb21wb25lbnRdPVwiaXRlbUxpc3QuaXRlbUNvbXBvbmVudChpdGVtKVwiPjwva29hbGEtZHluYW1pYy1jb21wb25lbnQ+XG5cdCAgICAgICAgPG5nLXRlbXBsYXRlICNpdGVtVGV4dD5cblx0ICAgICAgICAgIHt7aXRlbUxpc3QuaXRlbU5hbWVQcm9wZXJ0eShpdGVtKX19XG5cdCAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkICptYXRGb290ZXJDZWxsRGVmIG1hdC1mb290ZXItY2VsbD5cbiAgICAgICAgICA8a29hbGEtZHluYW1pYy1jb21wb25lbnQgKm5nSWY9XCJpdGVtTGlzdC5mb290ZXI/Lml0ZW1Db21wb25lbnQgZWxzZSBpdGVtRm9vdGVyVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkeW5hbWljQ29tcG9uZW50XT1cIml0ZW1MaXN0LmZvb3Rlcj8uaXRlbUNvbXBvbmVudChyZXNwb25zZVJlcXVlc3QpXCI+PC9rb2FsYS1keW5hbWljLWNvbXBvbmVudD5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2l0ZW1Gb290ZXJUZXh0PlxuICAgICAgICAgICAge3tpdGVtTGlzdC5mb290ZXI/Lml0ZW1OYW1lUHJvcGVydHkocmVzcG9uc2VSZXF1ZXN0KX19XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3ViTGlzdENvbmZpZyAmJiBidG5Db2xsYXBzZVN1Ykxpc3RDb25maWdcIiBtYXRDb2x1bW5EZWY9XCJrb2FsYUxpc3REZXRhaWxzXCI+XG4gICAgICAgIDx0aCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtaGVhZGVyLWNlbGw+PC90aD5cbiAgICAgICAgPHRkICptYXRDZWxsRGVmPVwibGV0IGl0ZW1cIiBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbnNUb1Nob3dJbkxpc3QubGVuZ3RoXCIgbWF0LWNlbGw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tZGV0YWlsXCIgW0BkZXRhaWxFeHBhbmRdPVwiaXRlbSA9PSBleHBhbmRlZEVsZW1lbnQgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCdcIj5cbiAgICAgICAgICAgIDxrb2FsYS1saXN0IFtjb25maWddPVwic3ViTGlzdENvbmZpZyhpdGVtKVwiPjwva29hbGEtbGlzdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkICptYXRGb290ZXJDZWxsRGVmIG1hdC1mb290ZXItY2VsbD48L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwib3B0aW9uc1wiPlxuICAgICAgICA8dGggKm1hdEhlYWRlckNlbGxEZWYgbWF0LWhlYWRlci1jZWxsPjwvdGg+XG4gICAgICAgIDx0ZCAqbWF0Q2VsbERlZj1cImxldCBpdGVtXCIgbWF0LWNlbGw+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImhhdmVPcHRpb25zT25JdGVtTGluZShpdGVtKVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwib3B0aW9uc1wiIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPSdtYXRlcmlhbC1pY29ucyc+bW9yZV92ZXJ0PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8bWF0LW1lbnUgI29wdGlvbnM9XCJtYXRNZW51XCIgY2xhc3M9XCJtZW51LWxpc3RcIiB5UG9zaXRpb249XCJiZWxvd1wiPlxuXHQgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgaXRlbXNNZW51TGlzdE9wdGlvbnNcIj5cblx0ICAgICAgICAgICAgICA8YnV0dG9uXG5cdFx0ICAgICAgICAgICAgICAoY2xpY2spPVwib3B0aW9uLmFjdGlvbihpdGVtKVwiXG5cdFx0ICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbi5oYXZlUGVybWlzc2lvbiAmJiAoXG5cdFx0ICAgICAgICAgICAgICAgICFvcHRpb24uc2hvd0J5SXRlbUxpc3QgfHxcblx0XHQgICAgICAgICAgICAgICAgb3B0aW9uLnNob3dCeUl0ZW1MaXN0KGl0ZW0pXG5cdCAgICAgICAgICAgICAgICApXCJcblx0XHQgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW0+XG5cdCAgICAgICAgICAgICAgICA8bWF0LWljb24+e3tvcHRpb24uaWNvbn19PC9tYXQtaWNvbj5cblx0ICAgICAgICAgICAgICAgIDxzcGFuPnt7b3B0aW9uLm5hbWV9fTwvc3Bhbj5cblx0ICAgICAgICAgICAgICA8L2J1dHRvbj5cblx0ICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgKm1hdEZvb3RlckNlbGxEZWYgbWF0LWZvb3Rlci1jZWxsPjwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPHRyICptYXRIZWFkZXJSb3dEZWY9XCJjb2x1bW5zVG9TaG93SW5MaXN0OyBzdGlja3k6IHRydWVcIiBtYXQtaGVhZGVyLXJvdz48L3RyPlxuICAgICAgPHRyICptYXRSb3dEZWY9XCJsZXQgaXRlbTsgY29sdW1uczogY29sdW1uc1RvU2hvd0luTGlzdDtcIiBtYXQtcm93PjwvdHI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3ViTGlzdENvbmZpZyAmJiBidG5Db2xsYXBzZVN1Ykxpc3RDb25maWdcIj5cbiAgICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFsna29hbGFMaXN0RGV0YWlscyddXCIgY2xhc3M9XCJpdGVtLWRldGFpbC1yb3dcIj48L3RyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzRm9vdGVyKClcIj5cbiAgICAgICAgPHRyICptYXRGb290ZXJSb3dEZWY9XCJjb2x1bW5zVG9TaG93SW5MaXN0OyBzdGlja3k6IHRydWVcIiBtYXQtZm9vdGVyLXJvdz48L3RyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC90YWJsZT5cbiAgICA8bmctdGVtcGxhdGUgI2VtcHR5TGlzdD5cbiAgICAgIDxrb2FsYS1keW5hbWljLWNvbXBvbmVudCAqbmdJZj1cIiEoZmlsdGVyRXJyb3IkIHwgYXN5bmMpIGVsc2UgZXJyb3JMaXN0XCIgW2R5bmFtaWNDb21wb25lbnRdPVwiZW1wdHlMaXN0Q29tcG9uZW50XCI+PC9rb2FsYS1keW5hbWljLWNvbXBvbmVudD5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZXJyb3JMaXN0PlxuICAgICAgICA8a29hbGEtZHluYW1pYy1jb21wb25lbnQgW2R5bmFtaWNDb21wb25lbnRdPVwiZXJyb3JMaXN0Q29tcG9uZW50XCI+PC9rb2FsYS1keW5hbWljLWNvbXBvbmVudD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCIhaGlkZVBhZ2luYXRvclwiIGNsYXNzPVwiY29udGVudC1wYWdpbmF0b3JcIj5cbiAgICA8bWF0LXBhZ2luYXRvclxuICAgICAgW2xlbmd0aF09XCJxdGRMaXN0UmVzdWx0XCJcbiAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwibGltaXRPcHRpb25zXCJcbiAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgICBzaG93Rmlyc3RMYXN0QnV0dG9ucz5cbiAgICA8L21hdC1wYWdpbmF0b3I+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|