@tilde-nlp/ngx-common 4.0.28 → 5.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/close-button/close-button.component.mjs +34 -34
- package/esm2022/lib/close-button/close-button.module.mjs +36 -36
- package/esm2022/lib/close-button/index.mjs +2 -2
- package/esm2022/lib/company-product/company-product.component.mjs +20 -20
- package/esm2022/lib/company-product/company-product.module.mjs +22 -22
- package/esm2022/lib/company-product/index.mjs +2 -2
- package/esm2022/lib/confirmation-modal/confirmation-modal.component.mjs +25 -25
- package/esm2022/lib/confirmation-modal/confirmation-modal.module.mjs +21 -21
- package/esm2022/lib/confirmation-modal/index.mjs +5 -5
- package/esm2022/lib/confirmation-modal/models/confirmation-body.model.mjs +1 -1
- package/esm2022/lib/confirmation-modal/models/confirmation.enum.mjs +5 -5
- package/esm2022/lib/confirmation-modal/services/confirmation.service.mjs +25 -25
- package/esm2022/lib/confirmation-modal/services/index.mjs +1 -1
- package/esm2022/lib/constants/index.mjs +1 -1
- package/esm2022/lib/constants/screen-size.const.mjs +10 -10
- package/esm2022/lib/directives/click-outside/click-outside.directive.mjs +29 -29
- package/esm2022/lib/directives/click-outside/click-outside.module.mjs +24 -24
- package/esm2022/lib/directives/click-outside/index.mjs +2 -2
- package/esm2022/lib/directives/drag-and-drop/drag-and-drop.directive.mjs +62 -62
- package/esm2022/lib/directives/drag-and-drop/drag-and-drop.module.mjs +24 -24
- package/esm2022/lib/directives/drag-and-drop/index.mjs +2 -2
- package/esm2022/lib/directives/index.mjs +3 -3
- package/esm2022/lib/directives/mat-button-loading/index.mjs +2 -2
- package/esm2022/lib/directives/mat-button-loading/mat-button-loading.directive.mjs +59 -59
- package/esm2022/lib/directives/mat-button-loading/mat-button-loading.module.mjs +20 -20
- package/esm2022/lib/extension-dialog/components/index.mjs +1 -1
- package/esm2022/lib/extension-dialog/components/open-extension-dialog/open-extension-dialog.component.mjs +22 -22
- package/esm2022/lib/extension-dialog/extension-dialog.component.mjs +142 -142
- package/esm2022/lib/extension-dialog/extension-dialog.module.mjs +51 -51
- package/esm2022/lib/extension-dialog/icons/file-types/excel.icon.mjs +1 -1
- package/esm2022/lib/extension-dialog/icons/file-types/index.mjs +9 -9
- package/esm2022/lib/extension-dialog/icons/file-types/interchange.icon.mjs +1 -1
- package/esm2022/lib/extension-dialog/icons/file-types/office-other.icon.mjs +1 -1
- package/esm2022/lib/extension-dialog/icons/file-types/other.icon.mjs +1 -1
- package/esm2022/lib/extension-dialog/icons/file-types/pdf.icon.mjs +1 -1
- package/esm2022/lib/extension-dialog/icons/file-types/powerpoint.icon.mjs +1 -1
- package/esm2022/lib/extension-dialog/icons/file-types/scanned.icon.mjs +1 -1
- package/esm2022/lib/extension-dialog/icons/file-types/web.icon.mjs +1 -1
- package/esm2022/lib/extension-dialog/icons/file-types/word.icon.mjs +1 -1
- package/esm2022/lib/extension-dialog/icons/index.mjs +1 -1
- package/esm2022/lib/extension-dialog/index.mjs +5 -5
- package/esm2022/lib/extension-dialog/models/enums/file-categories.enum.mjs +8 -8
- package/esm2022/lib/extension-dialog/models/enums/file-extensions.enum.mjs +34 -34
- package/esm2022/lib/extension-dialog/models/enums/file-type-icons.enum.mjs +12 -12
- package/esm2022/lib/extension-dialog/models/enums/file-types.enum.mjs +12 -12
- package/esm2022/lib/extension-dialog/models/enums/index.mjs +4 -4
- package/esm2022/lib/extension-dialog/models/index.mjs +2 -2
- package/esm2022/lib/extension-dialog/models/interfaces/config.mjs +1 -1
- package/esm2022/lib/extension-dialog/models/interfaces/dialog-data.model.mjs +1 -1
- package/esm2022/lib/extension-dialog/models/interfaces/index.mjs +2 -2
- package/esm2022/lib/extension-dialog/services/extension-dialog.service.mjs +22 -22
- package/esm2022/lib/extension-dialog/services/index.mjs +1 -1
- package/esm2022/lib/file-upload/file-upload.component.mjs +107 -107
- package/esm2022/lib/file-upload/file-upload.module.mjs +42 -42
- package/esm2022/lib/file-upload/index.mjs +3 -3
- package/esm2022/lib/file-upload/models/file-upload-error-type.enum.mjs +7 -7
- package/esm2022/lib/file-upload/models/file-upload-error.model.mjs +1 -1
- package/esm2022/lib/file-upload/models/index.mjs +2 -2
- package/esm2022/lib/filter-bar/filter-bar.component.mjs +146 -146
- package/esm2022/lib/filter-bar/filter-bar.module.mjs +71 -71
- package/esm2022/lib/filter-bar/index.mjs +3 -3
- package/esm2022/lib/filter-bar/models/filter-bar-change-event.model.mjs +1 -1
- package/esm2022/lib/filter-bar/models/filter-bar-filter-item.model.mjs +1 -1
- package/esm2022/lib/filter-bar/models/filter-bar-filter.model.mjs +1 -1
- package/esm2022/lib/filter-bar/models/filter-bar-settings.model.mjs +1 -1
- package/esm2022/lib/filter-bar/models/index.mjs +3 -3
- package/esm2022/lib/footer/footer.component.mjs +37 -37
- package/esm2022/lib/footer/footer.module.mjs +34 -34
- package/esm2022/lib/footer/index.mjs +2 -2
- package/esm2022/lib/helpers/auth-headers.helper.mjs +24 -21
- package/esm2022/lib/helpers/conversion.helper.mjs +10 -10
- package/esm2022/lib/helpers/file-extension.helper.mjs +5 -5
- package/esm2022/lib/helpers/html-element-parse.helper.mjs +15 -15
- package/esm2022/lib/helpers/html.helper.mjs +54 -54
- package/esm2022/lib/helpers/index.mjs +9 -9
- package/esm2022/lib/helpers/missing-translation.helper.mjs +6 -6
- package/esm2022/lib/helpers/resolution.helper.mjs +6 -6
- package/esm2022/lib/helpers/save-file.helper.mjs +10 -10
- package/esm2022/lib/helpers/sort.helper.mjs +11 -10
- package/esm2022/lib/inline-message/index.mjs +3 -3
- package/esm2022/lib/inline-message/inline-message.component.mjs +23 -23
- package/esm2022/lib/inline-message/inline-message.module.mjs +32 -32
- package/esm2022/lib/inline-message/models/index.mjs +3 -3
- package/esm2022/lib/inline-message/models/inline-message-icon-position.enum.mjs +5 -5
- package/esm2022/lib/inline-message/models/inline-message-type.enum.mjs +6 -6
- package/esm2022/lib/inline-message/models/inline-message.model.mjs +1 -1
- package/esm2022/lib/multi-functional-table/constants/disable-export-attribute-name.const.mjs +1 -1
- package/esm2022/lib/multi-functional-table/constants/index.mjs +1 -1
- package/esm2022/lib/multi-functional-table/index.mjs +4 -4
- package/esm2022/lib/multi-functional-table/models/batch-config.model.mjs +1 -1
- package/esm2022/lib/multi-functional-table/models/column-config.model.mjs +1 -1
- package/esm2022/lib/multi-functional-table/models/column-select-config.model.mjs +1 -1
- package/esm2022/lib/multi-functional-table/models/export-config.model.mjs +1 -1
- package/esm2022/lib/multi-functional-table/models/export-format.enum.mjs +4 -4
- package/esm2022/lib/multi-functional-table/models/filter-config.model.mjs +2 -2
- package/esm2022/lib/multi-functional-table/models/index.mjs +6 -6
- package/esm2022/lib/multi-functional-table/models/multi-functional-table-config.model.mjs +1 -1
- package/esm2022/lib/multi-functional-table/models/selected-column-local-storage-config.model.mjs +1 -1
- package/esm2022/lib/multi-functional-table/multi-functional-table.component.mjs +228 -229
- package/esm2022/lib/multi-functional-table/multi-functional-table.module.mjs +72 -72
- package/esm2022/lib/notification-message/enums/index.mjs +1 -1
- package/esm2022/lib/notification-message/enums/notification-message-type.enum.mjs +8 -8
- package/esm2022/lib/notification-message/index.mjs +4 -4
- package/esm2022/lib/notification-message/interfaces/index.mjs +1 -1
- package/esm2022/lib/notification-message/interfaces/notification-message.model.mjs +1 -1
- package/esm2022/lib/notification-message/notification-message.component.mjs +52 -52
- package/esm2022/lib/notification-message/notification-message.module.mjs +44 -44
- package/esm2022/lib/open-close-button/index.mjs +4 -4
- package/esm2022/lib/open-close-button/injection-tokens/index.mjs +1 -1
- package/esm2022/lib/open-close-button/injection-tokens/open-close-btn-icons.token.mjs +1 -1
- package/esm2022/lib/open-close-button/models/index.mjs +1 -1
- package/esm2022/lib/open-close-button/models/open-close-btn-icons.model.mjs +1 -1
- package/esm2022/lib/open-close-button/open-close-button.component.mjs +53 -53
- package/esm2022/lib/open-close-button/open-close-button.module.mjs +21 -21
- package/esm2022/lib/pipes/date-ago/date-ago.module.mjs +28 -28
- package/esm2022/lib/pipes/date-ago/date-ago.pipe.mjs +114 -114
- package/esm2022/lib/pipes/date-ago/index.mjs +2 -2
- package/esm2022/lib/pipes/date-ago/models/date-ago-interval.model.mjs +1 -1
- package/esm2022/lib/pipes/date-ago/models/date-ago-settings.model.mjs +1 -1
- package/esm2022/lib/pipes/date-ago/models/date-ago-settings.token.mjs +1 -1
- package/esm2022/lib/pipes/date-ago/models/date-ago.model.mjs +1 -1
- package/esm2022/lib/pipes/date-ago/models/index.mjs +4 -4
- package/esm2022/lib/pipes/filter-with-highlight/filter-with-highlight.module.mjs +24 -24
- package/esm2022/lib/pipes/filter-with-highlight/filter-with-highlight.pipe.mjs +43 -42
- package/esm2022/lib/pipes/filter-with-highlight/index.mjs +2 -2
- package/esm2022/lib/pipes/index.mjs +6 -7
- package/esm2022/lib/pipes/language-translate/index.mjs +2 -2
- package/esm2022/lib/pipes/language-translate/language-translate.module.mjs +18 -18
- package/esm2022/lib/pipes/language-translate/language-translate.pipe.mjs +100 -99
- package/esm2022/lib/pipes/sort-translations/index.mjs +2 -2
- package/esm2022/lib/pipes/sort-translations/sort-translations.module.mjs +22 -22
- package/esm2022/lib/pipes/sort-translations/sort-translations.pipe.mjs +60 -60
- package/esm2022/lib/pipes/sort-translations-by-property/index.mjs +2 -2
- package/esm2022/lib/pipes/sort-translations-by-property/sort-translations-by-property.module.mjs +18 -18
- package/esm2022/lib/pipes/sort-translations-by-property/sort-translations-by-property.pipe.mjs +40 -40
- package/esm2022/lib/plausible/index.mjs +4 -4
- package/esm2022/lib/plausible/models/index.mjs +1 -1
- package/esm2022/lib/plausible/models/plausible-event.model.mjs +1 -1
- package/esm2022/lib/plausible/plausible-event.directive.mjs +40 -40
- package/esm2022/lib/plausible/plausible.helper.mjs +37 -37
- package/esm2022/lib/plausible/plausible.module.mjs +24 -24
- package/esm2022/lib/services/alert/alert.service.mjs +167 -165
- package/esm2022/lib/services/alert/index.mjs +3 -3
- package/esm2022/lib/services/alert/injection-tokens/alert-configuration.token.mjs +1 -1
- package/esm2022/lib/services/alert/injection-tokens/index.mjs +1 -1
- package/esm2022/lib/services/alert/models/alert-configuration.model.mjs +2 -2
- package/esm2022/lib/services/alert/models/index.mjs +1 -1
- package/esm2022/lib/services/dom/dom.service.mjs +21 -21
- package/esm2022/lib/services/dom/index.mjs +1 -1
- package/esm2022/lib/services/icon/icon.service.mjs +35 -35
- package/esm2022/lib/services/icon/index.mjs +1 -1
- package/esm2022/lib/services/index.mjs +6 -6
- package/esm2022/lib/services/language-translate/index.mjs +1 -1
- package/esm2022/lib/services/language-translate/language-translate.service.mjs +25 -25
- package/esm2022/lib/services/notification/index.mjs +2 -2
- package/esm2022/lib/services/notification/models/index.mjs +2 -2
- package/esm2022/lib/services/notification/models/notification.model.mjs +1 -1
- package/esm2022/lib/services/notification/models/operations.enum.mjs +5 -5
- package/esm2022/lib/services/notification/notification.service.mjs +35 -35
- package/esm2022/lib/services/system/index.mjs +1 -1
- package/esm2022/lib/services/system/system.service.mjs +23 -23
- package/esm2022/lib/status-display/index.mjs +3 -3
- package/esm2022/lib/status-display/models/index.mjs +1 -1
- package/esm2022/lib/status-display/models/status-display-config.model.mjs +1 -1
- package/esm2022/lib/status-display/status-display.component.mjs +17 -17
- package/esm2022/lib/status-display/status-display.module.mjs +21 -21
- package/esm2022/lib/terminology/components/terminology-panel/terminology-collection-list/terminology-collection-card/terminology-collection-card.component.mjs +65 -65
- package/esm2022/lib/terminology/components/terminology-panel/terminology-collection-list/terminology-collection-list.component.mjs +70 -70
- package/esm2022/lib/terminology/components/terminology-panel/terminology-create-collection/terminology-create-collection-dialog/terminology-create-collection-dialog.component.mjs +60 -58
- package/esm2022/lib/terminology/components/terminology-panel/terminology-create-collection/terminology-create-collection.component.mjs +56 -56
- package/esm2022/lib/terminology/components/terminology-panel/terminology-panel.component.mjs +49 -49
- package/esm2022/lib/terminology/config/models/index.mjs +1 -1
- package/esm2022/lib/terminology/config/models/terminology-config.model.mjs +1 -1
- package/esm2022/lib/terminology/config/services/index.mjs +1 -1
- package/esm2022/lib/terminology/config/services/terminology-config/terminology-config.service.mjs +45 -48
- package/esm2022/lib/terminology/enums/combined-collection-tooltip-key.enum.mjs +5 -5
- package/esm2022/lib/terminology/enums/engine-term-collection-scope.enum.mjs +6 -6
- package/esm2022/lib/terminology/enums/engine-term-collection-source.enum.mjs +5 -5
- package/esm2022/lib/terminology/enums/engine-term-collection-status.enum.mjs +7 -7
- package/esm2022/lib/terminology/enums/engine-term-collection-sub-status.enum.mjs +13 -13
- package/esm2022/lib/terminology/enums/index.mjs +6 -6
- package/esm2022/lib/terminology/enums/mt-collection-status.enum.mjs +10 -10
- package/esm2022/lib/terminology/enums/mt-term-collection-v1-status.enum.mjs +6 -6
- package/esm2022/lib/terminology/enums/system-metadata-key.enum.mjs +6 -6
- package/esm2022/lib/terminology/enums/translation-api-version.model.mjs +5 -5
- package/esm2022/lib/terminology/factories/terminology-api.factory.mjs +12 -12
- package/esm2022/lib/terminology/factories/terminology-system.factory.mjs +13 -13
- package/esm2022/lib/terminology/icons/collections-menu.icon.mjs +1 -1
- package/esm2022/lib/terminology/icons/index.mjs +1 -1
- package/esm2022/lib/terminology/index.mjs +9 -9
- package/esm2022/lib/terminology/injection-tokens/terminology-api.token.mjs +1 -1
- package/esm2022/lib/terminology/injection-tokens/terminology-system.token.mjs +1 -1
- package/esm2022/lib/terminology/models/active-data.model.mjs +2 -2
- package/esm2022/lib/terminology/models/add-engine-terms-request-params.model.mjs +1 -1
- package/esm2022/lib/terminology/models/api-system.model.mjs +2 -2
- package/esm2022/lib/terminology/models/combined-collection.model.mjs +189 -189
- package/esm2022/lib/terminology/models/default-term-collection-order-update.model.mjs +1 -1
- package/esm2022/lib/terminology/models/domain.model.mjs +1 -1
- package/esm2022/lib/terminology/models/engine-term-collection-access-scope-update.model.mjs +1 -1
- package/esm2022/lib/terminology/models/engine-term-collection-access-scope.model.mjs +1 -1
- package/esm2022/lib/terminology/models/engine-term-collection-access-update.model.mjs +1 -1
- package/esm2022/lib/terminology/models/engine-term-collection-access.model.mjs +1 -1
- package/esm2022/lib/terminology/models/engine-term-collection-list.model.mjs +1 -1
- package/esm2022/lib/terminology/models/engine-term-collection.model.mjs +1 -1
- package/esm2022/lib/terminology/models/index.mjs +20 -20
- package/esm2022/lib/terminology/models/lang-list-item.model.mjs +1 -1
- package/esm2022/lib/terminology/models/mt-collection.model.mjs +1 -1
- package/esm2022/lib/terminology/models/mt-term-collection-v1.model.mjs +1 -1
- package/esm2022/lib/terminology/models/mt-term-service.model.mjs +1 -1
- package/esm2022/lib/terminology/models/system-api-service.model.mjs +1 -1
- package/esm2022/lib/terminology/models/system.model.mjs +2 -2
- package/esm2022/lib/terminology/models/terminology-engine.model.mjs +2 -2
- package/esm2022/lib/terminology/models/tld-term-collection-languages.model.mjs +1 -1
- package/esm2022/lib/terminology/models/tld-term-collection.model.mjs +2 -2
- package/esm2022/lib/terminology/models/update-engine-terms-request-params.model.mjs +1 -1
- package/esm2022/lib/terminology/models/vendor.model.mjs +1 -1
- package/esm2022/lib/terminology/services/engine-term-api/engine-term-api.service.mjs +51 -51
- package/esm2022/lib/terminology/services/engine-term-api/index.mjs +1 -1
- package/esm2022/lib/terminology/services/index.mjs +5 -5
- package/esm2022/lib/terminology/services/system-api-v1/system-api-v1.service.mjs +60 -59
- package/esm2022/lib/terminology/services/system-api-v2/models/engine-deployment.model.mjs +1 -1
- package/esm2022/lib/terminology/services/system-api-v2/models/engine-domain-list.model.mjs +1 -1
- package/esm2022/lib/terminology/services/system-api-v2/models/engine-domain.model.mjs +1 -1
- package/esm2022/lib/terminology/services/system-api-v2/models/engine-list.model.mjs +1 -1
- package/esm2022/lib/terminology/services/system-api-v2/models/engine-status.enum.mjs +10 -10
- package/esm2022/lib/terminology/services/system-api-v2/models/engine-sub-status.enum.mjs +17 -17
- package/esm2022/lib/terminology/services/system-api-v2/models/engine.model.mjs +1 -1
- package/esm2022/lib/terminology/services/system-api-v2/models/index.mjs +8 -8
- package/esm2022/lib/terminology/services/system-api-v2/models/revision.model.mjs +1 -1
- package/esm2022/lib/terminology/services/system-api-v2/models/worker-status.model.mjs +1 -1
- package/esm2022/lib/terminology/services/system-api-v2/system-api-v2.service.mjs +81 -81
- package/esm2022/lib/terminology/services/terminology/terminology.service.mjs +325 -324
- package/esm2022/lib/terminology/services/terminology-api-v1/terminology-api-v1.service.mjs +59 -58
- package/esm2022/lib/terminology/services/terminology-api-v2/terminology-api-v2.service.mjs +85 -84
- package/esm2022/lib/terminology/services/terminology-collection/index.mjs +1 -1
- package/esm2022/lib/terminology/services/terminology-collection/terminology-collection.service.mjs +54 -54
- package/esm2022/lib/terminology/terminology.component.mjs +137 -137
- package/esm2022/lib/terminology/terminology.module.mjs +132 -132
- package/esm2022/lib/tld-loader/index.mjs +2 -2
- package/esm2022/lib/tld-loader/tld-loader.component.mjs +11 -11
- package/esm2022/lib/tld-loader/tld-loader.module.mjs +20 -20
- package/esm2022/public-api.mjs +23 -23
- package/esm2022/tilde-nlp-ngx-common.mjs +4 -4
- package/fesm2022/tilde-nlp-ngx-common.mjs +3768 -3791
- package/fesm2022/tilde-nlp-ngx-common.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/close-button/close-button.component.d.ts +13 -13
- package/lib/close-button/close-button.module.d.ts +11 -11
- package/lib/close-button/index.d.ts +2 -2
- package/lib/company-product/company-product.component.d.ts +7 -7
- package/lib/company-product/company-product.module.d.ts +8 -8
- package/lib/company-product/index.d.ts +2 -2
- package/lib/confirmation-modal/confirmation-modal.component.d.ts +12 -12
- package/lib/confirmation-modal/confirmation-modal.module.d.ts +11 -11
- package/lib/confirmation-modal/index.d.ts +5 -5
- package/lib/confirmation-modal/models/confirmation-body.model.d.ts +8 -8
- package/lib/confirmation-modal/models/confirmation.enum.d.ts +4 -4
- package/lib/confirmation-modal/services/confirmation.service.d.ts +12 -12
- package/lib/confirmation-modal/services/index.d.ts +1 -1
- package/lib/constants/index.d.ts +1 -1
- package/lib/constants/screen-size.const.d.ts +10 -10
- package/lib/directives/click-outside/click-outside.directive.d.ts +10 -10
- package/lib/directives/click-outside/click-outside.module.d.ts +8 -8
- package/lib/directives/click-outside/index.d.ts +2 -2
- package/lib/directives/drag-and-drop/drag-and-drop.directive.d.ts +14 -14
- package/lib/directives/drag-and-drop/drag-and-drop.module.d.ts +8 -8
- package/lib/directives/drag-and-drop/index.d.ts +2 -2
- package/lib/directives/index.d.ts +3 -3
- package/lib/directives/mat-button-loading/index.d.ts +2 -2
- package/lib/directives/mat-button-loading/mat-button-loading.directive.d.ts +18 -18
- package/lib/directives/mat-button-loading/mat-button-loading.module.d.ts +8 -8
- package/lib/extension-dialog/components/index.d.ts +1 -1
- package/lib/extension-dialog/components/open-extension-dialog/open-extension-dialog.component.d.ts +10 -10
- package/lib/extension-dialog/extension-dialog.component.d.ts +21 -21
- package/lib/extension-dialog/extension-dialog.module.d.ts +15 -15
- package/lib/extension-dialog/icons/file-types/excel.icon.d.ts +1 -1
- package/lib/extension-dialog/icons/file-types/index.d.ts +9 -9
- package/lib/extension-dialog/icons/file-types/interchange.icon.d.ts +1 -1
- package/lib/extension-dialog/icons/file-types/office-other.icon.d.ts +1 -1
- package/lib/extension-dialog/icons/file-types/other.icon.d.ts +1 -1
- package/lib/extension-dialog/icons/file-types/pdf.icon.d.ts +1 -1
- package/lib/extension-dialog/icons/file-types/powerpoint.icon.d.ts +1 -1
- package/lib/extension-dialog/icons/file-types/scanned.icon.d.ts +1 -1
- package/lib/extension-dialog/icons/file-types/web.icon.d.ts +1 -1
- package/lib/extension-dialog/icons/file-types/word.icon.d.ts +1 -1
- package/lib/extension-dialog/icons/index.d.ts +1 -1
- package/lib/extension-dialog/index.d.ts +5 -5
- package/lib/extension-dialog/models/enums/file-categories.enum.d.ts +7 -7
- package/lib/extension-dialog/models/enums/file-extensions.enum.d.ts +33 -33
- package/lib/extension-dialog/models/enums/file-type-icons.enum.d.ts +11 -11
- package/lib/extension-dialog/models/enums/file-types.enum.d.ts +11 -11
- package/lib/extension-dialog/models/enums/index.d.ts +4 -4
- package/lib/extension-dialog/models/index.d.ts +2 -2
- package/lib/extension-dialog/models/interfaces/config.d.ts +18 -18
- package/lib/extension-dialog/models/interfaces/dialog-data.model.d.ts +3 -3
- package/lib/extension-dialog/models/interfaces/index.d.ts +2 -2
- package/lib/extension-dialog/services/extension-dialog.service.d.ts +9 -9
- package/lib/extension-dialog/services/index.d.ts +1 -1
- package/lib/file-upload/file-upload.component.d.ts +29 -29
- package/lib/file-upload/file-upload.module.d.ts +13 -13
- package/lib/file-upload/index.d.ts +3 -3
- package/lib/file-upload/models/file-upload-error-type.enum.d.ts +6 -6
- package/lib/file-upload/models/file-upload-error.model.d.ts +6 -6
- package/lib/file-upload/models/index.d.ts +2 -2
- package/lib/filter-bar/filter-bar.component.d.ts +54 -54
- package/lib/filter-bar/filter-bar.module.d.ts +19 -19
- package/lib/filter-bar/index.d.ts +3 -3
- package/lib/filter-bar/models/filter-bar-change-event.model.d.ts +6 -6
- package/lib/filter-bar/models/filter-bar-filter-item.model.d.ts +4 -4
- package/lib/filter-bar/models/filter-bar-filter.model.d.ts +6 -6
- package/lib/filter-bar/models/filter-bar-settings.model.d.ts +19 -19
- package/lib/filter-bar/models/index.d.ts +3 -3
- package/lib/footer/footer.component.d.ts +15 -15
- package/lib/footer/footer.module.d.ts +11 -11
- package/lib/footer/index.d.ts +2 -2
- package/lib/helpers/auth-headers.helper.d.ts +4 -4
- package/lib/helpers/conversion.helper.d.ts +4 -4
- package/lib/helpers/file-extension.helper.d.ts +3 -3
- package/lib/helpers/html-element-parse.helper.d.ts +3 -3
- package/lib/helpers/html.helper.d.ts +17 -17
- package/lib/helpers/index.d.ts +9 -9
- package/lib/helpers/missing-translation.helper.d.ts +4 -4
- package/lib/helpers/resolution.helper.d.ts +3 -3
- package/lib/helpers/save-file.helper.d.ts +3 -3
- package/lib/helpers/sort.helper.d.ts +3 -3
- package/lib/inline-message/index.d.ts +3 -3
- package/lib/inline-message/inline-message.component.d.ts +10 -10
- package/lib/inline-message/inline-message.module.d.ts +10 -10
- package/lib/inline-message/models/index.d.ts +3 -3
- package/lib/inline-message/models/inline-message-icon-position.enum.d.ts +4 -4
- package/lib/inline-message/models/inline-message-type.enum.d.ts +5 -5
- package/lib/inline-message/models/inline-message.model.d.ts +10 -10
- package/lib/multi-functional-table/constants/disable-export-attribute-name.const.d.ts +1 -1
- package/lib/multi-functional-table/constants/index.d.ts +1 -1
- package/lib/multi-functional-table/index.d.ts +4 -4
- package/lib/multi-functional-table/models/batch-config.model.d.ts +4 -4
- package/lib/multi-functional-table/models/column-config.model.d.ts +18 -18
- package/lib/multi-functional-table/models/column-select-config.model.d.ts +14 -14
- package/lib/multi-functional-table/models/export-config.model.d.ts +9 -9
- package/lib/multi-functional-table/models/export-format.enum.d.ts +3 -3
- package/lib/multi-functional-table/models/filter-config.model.d.ts +6 -7
- package/lib/multi-functional-table/models/index.d.ts +6 -6
- package/lib/multi-functional-table/models/multi-functional-table-config.model.d.ts +36 -36
- package/lib/multi-functional-table/models/selected-column-local-storage-config.model.d.ts +20 -20
- package/lib/multi-functional-table/multi-functional-table.component.d.ts +66 -67
- package/lib/multi-functional-table/multi-functional-table.module.d.ts +20 -20
- package/lib/notification-message/enums/index.d.ts +1 -1
- package/lib/notification-message/enums/notification-message-type.enum.d.ts +7 -7
- package/lib/notification-message/index.d.ts +4 -4
- package/lib/notification-message/interfaces/index.d.ts +1 -1
- package/lib/notification-message/interfaces/notification-message.model.d.ts +22 -22
- package/lib/notification-message/notification-message.component.d.ts +22 -22
- package/lib/notification-message/notification-message.module.d.ts +13 -13
- package/lib/open-close-button/index.d.ts +4 -4
- package/lib/open-close-button/injection-tokens/index.d.ts +1 -1
- package/lib/open-close-button/injection-tokens/open-close-btn-icons.token.d.ts +1 -1
- package/lib/open-close-button/models/index.d.ts +1 -1
- package/lib/open-close-button/models/open-close-btn-icons.model.d.ts +4 -4
- package/lib/open-close-button/open-close-button.component.d.ts +22 -22
- package/lib/open-close-button/open-close-button.module.d.ts +11 -11
- package/lib/pipes/date-ago/date-ago.module.d.ts +9 -9
- package/lib/pipes/date-ago/date-ago.pipe.d.ts +20 -20
- package/lib/pipes/date-ago/index.d.ts +2 -2
- package/lib/pipes/date-ago/models/date-ago-interval.model.d.ts +5 -5
- package/lib/pipes/date-ago/models/date-ago-settings.model.d.ts +26 -26
- package/lib/pipes/date-ago/models/date-ago-settings.token.d.ts +1 -1
- package/lib/pipes/date-ago/models/date-ago.model.d.ts +4 -4
- package/lib/pipes/date-ago/models/index.d.ts +4 -4
- package/lib/pipes/filter-with-highlight/filter-with-highlight.module.d.ts +8 -8
- package/lib/pipes/filter-with-highlight/filter-with-highlight.pipe.d.ts +7 -7
- package/lib/pipes/filter-with-highlight/index.d.ts +2 -2
- package/lib/pipes/index.d.ts +5 -6
- package/lib/pipes/language-translate/index.d.ts +2 -2
- package/lib/pipes/language-translate/language-translate.module.d.ts +8 -8
- package/lib/pipes/language-translate/language-translate.pipe.d.ts +19 -19
- package/lib/pipes/sort-translations/index.d.ts +2 -2
- package/lib/pipes/sort-translations/sort-translations.module.d.ts +8 -8
- package/lib/pipes/sort-translations/sort-translations.pipe.d.ts +20 -20
- package/lib/pipes/sort-translations-by-property/index.d.ts +2 -2
- package/lib/pipes/sort-translations-by-property/sort-translations-by-property.module.d.ts +8 -8
- package/lib/pipes/sort-translations-by-property/sort-translations-by-property.pipe.d.ts +15 -15
- package/lib/plausible/index.d.ts +4 -4
- package/lib/plausible/models/index.d.ts +1 -1
- package/lib/plausible/models/plausible-event.model.d.ts +7 -7
- package/lib/plausible/plausible-event.directive.d.ts +11 -11
- package/lib/plausible/plausible.helper.d.ts +15 -15
- package/lib/plausible/plausible.module.d.ts +8 -8
- package/lib/services/alert/alert.service.d.ts +37 -37
- package/lib/services/alert/index.d.ts +3 -3
- package/lib/services/alert/injection-tokens/alert-configuration.token.d.ts +1 -1
- package/lib/services/alert/injection-tokens/index.d.ts +1 -1
- package/lib/services/alert/models/alert-configuration.model.d.ts +7 -7
- package/lib/services/alert/models/index.d.ts +1 -1
- package/lib/services/dom/dom.service.d.ts +7 -7
- package/lib/services/dom/index.d.ts +1 -1
- package/lib/services/icon/icon.service.d.ts +14 -14
- package/lib/services/icon/index.d.ts +1 -1
- package/lib/services/index.d.ts +6 -6
- package/lib/services/language-translate/index.d.ts +1 -1
- package/lib/services/language-translate/language-translate.service.d.ts +10 -10
- package/lib/services/notification/index.d.ts +2 -2
- package/lib/services/notification/models/index.d.ts +2 -2
- package/lib/services/notification/models/notification.model.d.ts +6 -6
- package/lib/services/notification/models/operations.enum.d.ts +4 -4
- package/lib/services/notification/notification.service.d.ts +15 -15
- package/lib/services/system/index.d.ts +1 -1
- package/lib/services/system/system.service.d.ts +11 -11
- package/lib/status-display/index.d.ts +3 -3
- package/lib/status-display/models/index.d.ts +1 -1
- package/lib/status-display/models/status-display-config.model.d.ts +9 -9
- package/lib/status-display/status-display.component.d.ts +7 -7
- package/lib/status-display/status-display.module.d.ts +11 -11
- package/lib/terminology/components/terminology-panel/terminology-collection-list/terminology-collection-card/terminology-collection-card.component.d.ts +28 -28
- package/lib/terminology/components/terminology-panel/terminology-collection-list/terminology-collection-list.component.d.ts +30 -30
- package/lib/terminology/components/terminology-panel/terminology-create-collection/terminology-create-collection-dialog/terminology-create-collection-dialog.component.d.ts +32 -32
- package/lib/terminology/components/terminology-panel/terminology-create-collection/terminology-create-collection.component.d.ts +20 -20
- package/lib/terminology/components/terminology-panel/terminology-panel.component.d.ts +30 -30
- package/lib/terminology/config/models/index.d.ts +1 -1
- package/lib/terminology/config/models/terminology-config.model.d.ts +39 -39
- package/lib/terminology/config/services/index.d.ts +1 -1
- package/lib/terminology/config/services/terminology-config/terminology-config.service.d.ts +9 -10
- package/lib/terminology/enums/combined-collection-tooltip-key.enum.d.ts +4 -4
- package/lib/terminology/enums/engine-term-collection-scope.enum.d.ts +5 -5
- package/lib/terminology/enums/engine-term-collection-source.enum.d.ts +4 -4
- package/lib/terminology/enums/engine-term-collection-status.enum.d.ts +6 -6
- package/lib/terminology/enums/engine-term-collection-sub-status.enum.d.ts +12 -12
- package/lib/terminology/enums/index.d.ts +6 -6
- package/lib/terminology/enums/mt-collection-status.enum.d.ts +8 -8
- package/lib/terminology/enums/mt-term-collection-v1-status.enum.d.ts +5 -5
- package/lib/terminology/enums/system-metadata-key.enum.d.ts +5 -5
- package/lib/terminology/enums/translation-api-version.model.d.ts +4 -4
- package/lib/terminology/factories/terminology-api.factory.d.ts +5 -5
- package/lib/terminology/factories/terminology-system.factory.d.ts +5 -5
- package/lib/terminology/icons/collections-menu.icon.d.ts +1 -1
- package/lib/terminology/icons/index.d.ts +1 -1
- package/lib/terminology/index.d.ts +9 -9
- package/lib/terminology/injection-tokens/terminology-api.token.d.ts +1 -1
- package/lib/terminology/injection-tokens/terminology-system.token.d.ts +1 -1
- package/lib/terminology/models/active-data.model.d.ts +22 -23
- package/lib/terminology/models/add-engine-terms-request-params.model.d.ts +7 -7
- package/lib/terminology/models/api-system.model.d.ts +27 -27
- package/lib/terminology/models/combined-collection.model.d.ts +92 -92
- package/lib/terminology/models/default-term-collection-order-update.model.d.ts +5 -5
- package/lib/terminology/models/domain.model.d.ts +9 -9
- package/lib/terminology/models/engine-term-collection-access-scope-update.model.d.ts +3 -3
- package/lib/terminology/models/engine-term-collection-access-scope.model.d.ts +4 -4
- package/lib/terminology/models/engine-term-collection-access-update.model.d.ts +6 -6
- package/lib/terminology/models/engine-term-collection-access.model.d.ts +6 -6
- package/lib/terminology/models/engine-term-collection-list.model.d.ts +4 -4
- package/lib/terminology/models/engine-term-collection.model.d.ts +24 -24
- package/lib/terminology/models/index.d.ts +20 -20
- package/lib/terminology/models/lang-list-item.model.d.ts +6 -6
- package/lib/terminology/models/mt-collection.model.d.ts +17 -17
- package/lib/terminology/models/mt-term-collection-v1.model.d.ts +12 -12
- package/lib/terminology/models/mt-term-service.model.d.ts +8 -8
- package/lib/terminology/models/system-api-service.model.d.ts +5 -5
- package/lib/terminology/models/system.model.d.ts +19 -20
- package/lib/terminology/models/terminology-engine.model.d.ts +15 -15
- package/lib/terminology/models/tld-term-collection-languages.model.d.ts +11 -11
- package/lib/terminology/models/tld-term-collection.model.d.ts +46 -46
- package/lib/terminology/models/update-engine-terms-request-params.model.d.ts +4 -4
- package/lib/terminology/models/vendor.model.d.ts +5 -5
- package/lib/terminology/services/engine-term-api/engine-term-api.service.d.ts +19 -19
- package/lib/terminology/services/engine-term-api/index.d.ts +1 -1
- package/lib/terminology/services/index.d.ts +5 -5
- package/lib/terminology/services/system-api-v1/system-api-v1.service.d.ts +15 -15
- package/lib/terminology/services/system-api-v2/models/engine-deployment.model.d.ts +9 -9
- package/lib/terminology/services/system-api-v2/models/engine-domain-list.model.d.ts +4 -4
- package/lib/terminology/services/system-api-v2/models/engine-domain.model.d.ts +5 -5
- package/lib/terminology/services/system-api-v2/models/engine-list.model.d.ts +4 -4
- package/lib/terminology/services/system-api-v2/models/engine-status.enum.d.ts +9 -9
- package/lib/terminology/services/system-api-v2/models/engine-sub-status.enum.d.ts +16 -16
- package/lib/terminology/services/system-api-v2/models/engine.model.d.ts +24 -24
- package/lib/terminology/services/system-api-v2/models/index.d.ts +8 -8
- package/lib/terminology/services/system-api-v2/models/revision.model.d.ts +9 -9
- package/lib/terminology/services/system-api-v2/models/worker-status.model.d.ts +12 -12
- package/lib/terminology/services/system-api-v2/system-api-v2.service.d.ts +16 -16
- package/lib/terminology/services/terminology/terminology.service.d.ts +61 -61
- package/lib/terminology/services/terminology-api-v1/terminology-api-v1.service.d.ts +17 -17
- package/lib/terminology/services/terminology-api-v2/terminology-api-v2.service.d.ts +18 -18
- package/lib/terminology/services/terminology-collection/index.d.ts +1 -1
- package/lib/terminology/services/terminology-collection/terminology-collection.service.d.ts +17 -17
- package/lib/terminology/terminology.component.d.ts +37 -37
- package/lib/terminology/terminology.module.d.ts +29 -29
- package/lib/tld-loader/index.d.ts +2 -2
- package/lib/tld-loader/tld-loader.component.d.ts +5 -5
- package/lib/tld-loader/tld-loader.module.d.ts +7 -7
- package/package.json +5 -4
- package/public-api.d.ts +20 -20
- package/styles/custom/containers.scss +1 -1
- package/styles/typography.scss +1 -1
- package/esm2022/lib/pipes/object-length/index.mjs +0 -3
- package/esm2022/lib/pipes/object-length/object-length.module.mjs +0 -18
- package/esm2022/lib/pipes/object-length/object-length.pipe.mjs +0 -22
- package/lib/pipes/object-length/index.d.ts +0 -2
- package/lib/pipes/object-length/object-length.module.d.ts +0 -8
- package/lib/pipes/object-length/object-length.pipe.d.ts +0 -7
|
@@ -1,229 +1,228 @@
|
|
|
1
|
-
import { SelectionModel } from '@angular/cdk/collections';
|
|
2
|
-
import { Component, ContentChild, ContentChildren, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
3
|
-
import { MatSort } from '@angular/material/sort';
|
|
4
|
-
import { MatColumnDef, MatHeaderRowDef, MatNoDataRow, MatRowDef, MatTable } from '@angular/material/table';
|
|
5
|
-
import { map, take } from 'rxjs';
|
|
6
|
-
import { HtmlElementParseHelper } from '../helpers';
|
|
7
|
-
import { SaveFileHelper } from '../helpers/save-file.helper';
|
|
8
|
-
import { DISABLE_EXPORT_ATTRIBUTE_NAME } from './constants/disable-export-attribute-name.const';
|
|
9
|
-
import { ExportFormat } from './models';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "../services";
|
|
12
|
-
import * as i2 from "@ngx-translate/core";
|
|
13
|
-
import * as i3 from "@angular/common";
|
|
14
|
-
import * as i4 from "@angular/material/table";
|
|
15
|
-
import * as i5 from "@angular/material/button";
|
|
16
|
-
import * as i6 from "@angular/material/menu";
|
|
17
|
-
import * as i7 from "@angular/material/checkbox";
|
|
18
|
-
import * as i8 from "@angular/forms";
|
|
19
|
-
import * as i9 from "../filter-bar/filter-bar.component";
|
|
20
|
-
import * as i10 from "@
|
|
21
|
-
import * as i11 from "@angular/material/tooltip";
|
|
22
|
-
import * as i12 from "../status-display/status-display.component";
|
|
23
|
-
export class MultiFunctionalTableComponent {
|
|
24
|
-
set selection(value) {
|
|
25
|
-
this.matSelection.setSelection(...(value ?? []));
|
|
26
|
-
}
|
|
27
|
-
get ignoreAttributeName() { return DISABLE_EXPORT_ATTRIBUTE_NAME; }
|
|
28
|
-
get filterActive() { return this.config.filter?.enabled; }
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
this.
|
|
32
|
-
this.
|
|
33
|
-
this
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
this.
|
|
38
|
-
this.
|
|
39
|
-
this.
|
|
40
|
-
this.
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
this.
|
|
46
|
-
this.
|
|
47
|
-
this.
|
|
48
|
-
this.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
this.
|
|
53
|
-
this.
|
|
54
|
-
this.headerRowDefs.forEach(headerRowDef => this.table.addHeaderRowDef(headerRowDef));
|
|
55
|
-
this.
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
this.
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
let
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
this.
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
this.
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
this.
|
|
178
|
-
this.noDataRowConfig = this.config.noDataRow;
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
}
|
|
187
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MultiFunctionalTableComponent, deps: [{ token: i1.DOMService }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
type:
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
}] } });
|
|
229
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktZnVuY3Rpb25hbC10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvbXVsdGktZnVuY3Rpb25hbC10YWJsZS9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlL211bHRpLWZ1bmN0aW9uYWwtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBbUMsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFhLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqTCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUzRyxPQUFPLEVBQUUsR0FBRyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBWXhDLE1BQU0sT0FBTyw2QkFBNkI7SUFLeEMsSUFBYSxTQUFTLENBQUMsS0FBVTtRQUMvQixJQUFJLENBQUMs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QUFZO2dCQUVhLEtBQUs7c0JBQTNDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDakIsSUFBSTtzQkFBdkIsU0FBUzt1QkFBQyxPQUFPO2dCQUd5QixlQUFlO3NCQUF6RCxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBDb250ZW50Q2hpbGRyZW4sIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XHJcbmltcG9ydCB7IE1hdENvbHVtbkRlZiwgTWF0SGVhZGVyUm93RGVmLCBNYXROb0RhdGFSb3csIE1hdFJvd0RlZiwgTWF0VGFibGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCB0YWtlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEZpbHRlckJhckNoYW5nZUV2ZW50IH0gZnJvbSAnLi4vZmlsdGVyLWJhci9tb2RlbHMvZmlsdGVyLWJhci1jaGFuZ2UtZXZlbnQubW9kZWwnO1xyXG5pbXBvcnQgeyBIdG1sRWxlbWVudFBhcnNlSGVscGVyIH0gZnJvbSAnLi4vaGVscGVycyc7XHJcbmltcG9ydCB7IFNhdmVGaWxlSGVscGVyIH0gZnJvbSAnLi4vaGVscGVycy9zYXZlLWZpbGUuaGVscGVyJztcclxuaW1wb3J0IHsgRE9NU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgRElTQUJMRV9FWFBPUlRfQVRUUklCVVRFX05BTUUgfSBmcm9tICcuL2NvbnN0YW50cy9kaXNhYmxlLWV4cG9ydC1hdHRyaWJ1dGUtbmFtZS5jb25zdCc7XHJcbmltcG9ydCB7IEV4cG9ydEZvcm1hdCB9IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHsgQ29sdW1uQ29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvY29sdW1uLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IE11bHRpRnVuY3Rpb25hbFRhYmxlQ29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvbXVsdGktZnVuY3Rpb25hbC10YWJsZS1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBTZWxlY3RlZENvbHVtbkxvY2FsU3RvcmFnZUNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL3NlbGVjdGVkLWNvbHVtbi1sb2NhbC1zdG9yYWdlLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IFN0YXR1c0Rpc3BsYXlDb25maWcgfSBmcm9tICcuLi9zdGF0dXMtZGlzcGxheS9tb2RlbHMvc3RhdHVzLWRpc3BsYXktY29uZmlnLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICd0bGQtbXVsdGktZnVuY3Rpb25hbC10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpLWZ1bmN0aW9uYWwtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL211bHRpLWZ1bmN0aW9uYWwtdGFibGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTXVsdGlGdW5jdGlvbmFsVGFibGVDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIHJlYWRvbmx5IG1hdFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUPih0cnVlLCBbXSk7XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZyE6IE11bHRpRnVuY3Rpb25hbFRhYmxlQ29uZmlnPFQ+O1xyXG4gIEBJbnB1dCgpIGhpZ2hsaWdodGVkRWxlbWVudHMhOiBUW107XHJcbiAgQElucHV0KCkgc2V0IHNlbGVjdGlvbih2YWx1ZTogVFtdKSB7XHJcbiAgICB0aGlzLm1hdFNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oLi4uKHZhbHVlID8/IFtdKSk7XHJcbiAgfVxyXG5cclxuICAvLyBTZXQgdGhpcyB0byBmYWxzZSBpZiB5b3Ugd2FudCB0byBkaXNwbGF5IGNoZWNrYm94ZXMgb25seSBvbiByb3cgaG92ZXIuXHJcbiAgQElucHV0KCkgaXNSb3dDaGVja2JveEFsd2F5c1Zpc2libGUgPSB0cnVlO1xyXG5cclxuICAvLyNyZWdpb24gT3V0cHV0IHByb3BlcnRpZXNcclxuICBAT3V0cHV0KCkgZmlsdGVyQmFyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RmlsdGVyQmFyQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJCYXJDaGFuZ2VFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgZXhwb3J0ZWQ6IEV2ZW50RW1pdHRlcjxUW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZTogT2JzZXJ2YWJsZTxUW10+ID0gdGhpcy5tYXRTZWxlY3Rpb24uY2hhbmdlZC5hc09ic2VydmFibGUoKS5waXBlKG1hcCgoKSA9PiB7IHJldHVybiB0aGlzLm1hdFNlbGVjdGlvbi5zZWxlY3RlZDsgfSkpO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyAjcmVnaW9uIFByb3BlcnRpZXMgZm9yIG1hdCB0YWJsZSB3cmFwcGVyXHJcbiAgQENvbnRlbnRDaGlsZHJlbihNYXRIZWFkZXJSb3dEZWYpIGhlYWRlclJvd0RlZnMhOiBRdWVyeUxpc3Q8TWF0SGVhZGVyUm93RGVmPjtcclxuICBAQ29udGVudENoaWxkcmVuKE1hdFJvd0RlZiwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSByb3dEZWZzITogUXVlcnlMaXN0PE1hdFJvd0RlZjxUPj47XHJcbiAgQENvbnRlbnRDaGlsZHJlbihNYXRDb2x1bW5EZWYpIGNvbHVtbkRlZnMhOiBRdWVyeUxpc3Q8TWF0Q29sdW1uRGVmPjtcclxuICBAQ29udGVudENoaWxkKE1hdE5vRGF0YVJvdykgbm9EYXRhUm93ITogTWF0Tm9EYXRhUm93O1xyXG5cclxuICBAVmlld0NoaWxkKE1hdFRhYmxlLCB7IHN0YXRpYzogdHJ1ZSB9KSB0YWJsZSE6IE1hdFRhYmxlPFQ+O1xyXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydCE6IE1hdFNvcnQ7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIEBWaWV3Q2hpbGQoTWF0VGFibGUsIHsgcmVhZDogRWxlbWVudFJlZiB9KSB0YWJsZUVsZW1lbnRSZWYhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcblxyXG4gIGdldCBpZ25vcmVBdHRyaWJ1dGVOYW1lKCkgeyByZXR1cm4gRElTQUJMRV9FWFBPUlRfQVRUUklCVVRFX05BTUUgfVxyXG4gIGRpc3BsYXlDb2x1bW5zITogc3RyaW5nW107XHJcblxyXG4gIGNvbHVtblNlbGVjdEFjdGl2ZSE6IGJvb2xlYW47XHJcbiAgZXhwb3J0QWN0aXZlITogYm9vbGVhbjtcclxuICBub0RhdGFSb3dBY3RpdmUhOiBib29sZWFuO1xyXG5cclxuICBmaWx0ZXJCYXJWaXNpYmxlITogYm9vbGVhbjtcclxuXHJcbiAgbm9EYXRhUm93Q29uZmlnITogU3RhdHVzRGlzcGxheUNvbmZpZztcclxuICBub0RhdGFSb3dJY29uID0gXCJtYW5hZ2Vfc2VhcmNoXCI7XHJcblxyXG4gIGNvbmZpZ3VyYWJsZUNvbHVtbnMhOiBDb2x1bW5Db25maWdbXTtcclxuICBiYXRjaFNlbGVjdGVkRW5hYmxlZCE6IGJvb2xlYW47XHJcblxyXG4gIC8vIGlzIHVzZWQgaW4gaHRtbCB0byBkaXNwbGF5IGJhdGNoIGNoZWNrYm94IG9uIGhvdmVyZWQgcm93XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBob3ZlcmVkUm93OiBhbnk7XHJcblxyXG4gIGdldCBmaWx0ZXJBY3RpdmUoKSB7IHJldHVybiB0aGlzLmNvbmZpZy5maWx0ZXI/LmVuYWJsZWQ7IH1cclxuICBnZXQgc2hvd0ZpbHRlclRvZ2dsZSgpIHsgcmV0dXJuICF0aGlzLmNvbmZpZy5maWx0ZXI/LmhpZGVGaWx0ZXJUb2dnbGU7IH1cclxuXHJcbiAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VWYWx1ZSE6IFNlbGVjdGVkQ29sdW1uTG9jYWxTdG9yYWdlQ29uZmlnO1xyXG4gIHJlYWRvbmx5IGJhdGNoQ29sdW1uTmFtZSA9IFwiYmF0Y2hcIjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkb21TZXJ2aWNlOiBET01TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7IH1cclxuXHJcbiAgLy8jcmVnaW9uIEFuZ3VsYXIgbGlmZWN5Y2xlIGhvb2tzXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlYWRGcm9tTG9jYWxTdG9yYWdlKCk7XHJcbiAgICB0aGlzLnNldEZpbHRlclZpc2liaWxpdHkoKTtcclxuICAgIHRoaXMuc2V0Q29sdW1uU2VsZWN0UHJvcGVydGllcygpO1xyXG4gICAgdGhpcy5zZXRFeHBvcnRQcm9wZXJ0aWVzKCk7XHJcbiAgICB0aGlzLnNldE5vRGF0YVJvd1Byb3BlcnRpZXMoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcclxuICAgIHRoaXMuY29sdW1uRGVmcy5mb3JFYWNoKGNvbHVtbkRlZiA9PiB0aGlzLnRhYmxlLmFkZENvbHVtbkRlZihjb2x1bW5EZWYpKTtcclxuICAgIHRoaXMucm93RGVmcy5mb3JFYWNoKHJvd0RlZiA9PiB0aGlzLnRhYmxlLmFkZFJvd0RlZihyb3dEZWYpKTtcclxuICAgIHRoaXMuaGVhZGVyUm93RGVmcy5mb3JFYWNoKGhlYWRlclJvd0RlZiA9PiB0aGlzLnRhYmxlLmFkZEhlYWRlclJvd0RlZihoZWFkZXJSb3dEZWYpKTtcclxuICAgIHRoaXMuaGVhZGVyUm93RGVmcy5mb3JFYWNoKGhlYWRlclJvd0RlZiA9PiB0aGlzLnRhYmxlLmFkZEhlYWRlclJvd0RlZihoZWFkZXJSb3dEZWYpKTtcclxuICAgIHRoaXMudGFibGUuc2V0Tm9EYXRhUm93KHRoaXMubm9EYXRhUm93KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uZmlnLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHVwZGF0ZURpc3BsYXlDb2x1bW5zKGluaXRpYWwgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5iYXRjaFNlbGVjdGVkRW5hYmxlZCA9IHRoaXMuY29uZmlnLmJhdGNoQ29uZmlnPy5lbmFibGVkID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuY29uZmlnLmNvbHVtblNlbGVjdD8uY29sdW1ucyA/PyBbXTtcclxuICAgIHRoaXMuZGlzcGxheUNvbHVtbnMgPSBbXTtcclxuICAgIHRoaXMuY29uZmlndXJhYmxlQ29sdW1ucyA9IGFsbENvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiAhY29sdW1uLm5vdENvbmZpZ3VyYWJsZSk7XHJcblxyXG4gICAgaWYgKHRoaXMuYmF0Y2hTZWxlY3RlZEVuYWJsZWQpIHtcclxuICAgICAgdGhpcy5kaXNwbGF5Q29sdW1ucy5wdXNoKHRoaXMuYmF0Y2hDb2x1bW5OYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWFsbENvbHVtbnMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsb2NhbFN0b3JhZ2VWYWx1ZSA9IHRoaXMubG9jYWxTdG9yYWdlVmFsdWUgPz8ge307XHJcbiAgICBpZiAoIWxvY2FsU3RvcmFnZVZhbHVlLmNvbHVtbnMpIHtcclxuICAgICAgbG9jYWxTdG9yYWdlVmFsdWUuY29sdW1ucyA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIGFsbENvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgIGlmIChpbml0aWFsKSB7XHJcbiAgICAgICAgY29sdW1uLnNlbGVjdGVkID0gbG9jYWxTdG9yYWdlVmFsdWUuY29sdW1ucz8uW2NvbHVtbi5uYW1lXSA/PyBjb2x1bW4uc2VsZWN0ZWQ7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICBsb2NhbFN0b3JhZ2VWYWx1ZS5jb2x1bW5zIVtjb2x1bW4ubmFtZV0gPSBjb2x1bW4uc2VsZWN0ZWQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbHVtbi5zZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUNvbHVtbnMucHVzaChjb2x1bW4ubmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICBpZiAoIWluaXRpYWwpIHtcclxuICAgICAgdGhpcy51cGRhdGVMb2NhbFN0b3JhZ2UobG9jYWxTdG9yYWdlVmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRmlsdGVyQmFyKCkge1xyXG4gICAgY29uc3QgbG9jYWxzdG9yYWdlT2JqZWN0ID0gdGhpcy5sb2NhbFN0b3JhZ2VWYWx1ZSA/PyB7fTtcclxuICAgIGlmICghbG9jYWxzdG9yYWdlT2JqZWN0LmZpbHRlcikge1xyXG4gICAgICBsb2NhbHN0b3JhZ2VPYmplY3QuZmlsdGVyID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWx0ZXJCYXJWaXNpYmxlID0gIXRoaXMuZmlsdGVyQmFyVmlzaWJsZTtcclxuICAgIGxvY2Fsc3RvcmFnZU9iamVjdC5maWx0ZXIudmlzaWJsZSA9IHRoaXMuZmlsdGVyQmFyVmlzaWJsZTtcclxuICAgIHRoaXMudXBkYXRlTG9jYWxTdG9yYWdlKGxvY2Fsc3RvcmFnZU9iamVjdCk7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJzQ2hhbmdlZChmaWx0ZXJzOiBGaWx0ZXJCYXJDaGFuZ2VFdmVudCkge1xyXG4gICAgdGhpcy5maWx0ZXJCYXJDaGFuZ2UuZW1pdChmaWx0ZXJzKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCgpIHtcclxuICAgIHRoaXMuY29uZmlnLmRhdGFTb3VyY2UuY29ubmVjdCgpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgIHRoaXMuZXhwb3J0ZWQuZW1pdChkYXRhKTtcclxuICAgIH0pXHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnLmV4cG9ydD8uZmlsZU9wdGlvbnMpIHtcclxuICAgICAgdGhpcy5leHBvcnRUb0ZpbGUoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGlnaGxpZ2h0RWxlbWVudChlbGVtZW50OiBUKSB7XHJcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRlZEVsZW1lbnRzPy5pbmNsdWRlcyhlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBNZXRob2RzIGZvciBiYXRjaCBzZWxlY3Rpb25cclxuICBpc0FsbFNlbGVjdGVkKCkge1xyXG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLm1hdFNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7XHJcbiAgICBjb25zdCBudW1Sb3dzID0gdGhpcy5jb25maWcuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aDtcclxuICAgIHJldHVybiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcclxuICB9XHJcblxyXG4gIHRvZ2dsZUFsbFJvd1NlbGVjdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xyXG4gICAgICB0aGlzLm1hdFNlbGVjdGlvbi5jbGVhcigpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tYXRTZWxlY3Rpb24uc2VsZWN0KC4uLnRoaXMuY29uZmlnLmRhdGFTb3VyY2UuZGF0YSk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVFbGVtZW50U2VsZWN0aW9uKGVsZW1lbnQ6IFQpIHtcclxuICAgIHRoaXMubWF0U2VsZWN0aW9uLnRvZ2dsZShlbGVtZW50KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHByaXZhdGUgZXhwb3J0VG9GaWxlKCkge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5leHBvcnQ/LmZpbGVPcHRpb25zPy5zYXZlVG9GaWxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZmlsZVN0cmluZyA9IFwiXCI7XHJcbiAgICBsZXQgZXh0ZW5zaW9uITogRXhwb3J0Rm9ybWF0O1xyXG4gICAgc3dpdGNoICh0aGlzLmNvbmZpZy5leHBvcnQuZmlsZU9wdGlvbnMuZm9ybWF0KSB7XHJcbiAgICAgIGNhc2UgRXhwb3J0Rm9ybWF0LkNTVjpcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBleHRlbnNpb24gPSBFeHBvcnRGb3JtYXQuQ1NWO1xyXG4gICAgICAgIGZpbGVTdHJpbmcgPSBIdG1sRWxlbWVudFBhcnNlSGVscGVyLnRhYmxlQXNDc3YodGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5pZ25vcmVBdHRyaWJ1dGVOYW1lKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGNvbnN0IHRyYW5zbGF0ZWRGaWxlTmFtZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuY29uZmlnLmV4cG9ydC5maWxlT3B0aW9ucy5maWxlTmFtZSk7XHJcbiAgICBTYXZlRmlsZUhlbHBlci5zYXZlRmlsZShmaWxlU3RyaW5nLCBgJHt0cmFuc2xhdGVkRmlsZU5hbWV9LiR7ZXh0ZW5zaW9ufWApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVMb2NhbFN0b3JhZ2UobmV3VmFsdWU6IFNlbGVjdGVkQ29sdW1uTG9jYWxTdG9yYWdlQ29uZmlnKSB7XHJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICBpZiAodGhpcy5jb25maWcubG9jYWxTdG9yYWdlS2V5ICYmIG5ld1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuZG9tU2VydmljZS5sb2NhbFN0b3JhZ2U/LnNldEl0ZW0odGhpcy5jb25maWcubG9jYWxTdG9yYWdlS2V5LCBKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIHJlYWRGcm9tTG9jYWxTdG9yYWdlKCkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmxvY2FsU3RvcmFnZUtleSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGxvY2FsU3RvcmFnZVN0cmluZyA9IHRoaXMuZG9tU2VydmljZS5sb2NhbFN0b3JhZ2U/LmdldEl0ZW0odGhpcy5jb25maWcubG9jYWxTdG9yYWdlS2V5KTtcclxuICAgICAgICBpZiAobG9jYWxTdG9yYWdlU3RyaW5nKSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcclxuICAgICAgY2F0Y2gge1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENvbHVtblNlbGVjdFByb3BlcnRpZXMoKSB7XHJcbiAgICB0aGlzLmNvbHVtblNlbGVjdEFjdGl2ZSA9IHRoaXMuY29uZmlnLmNvbHVtblNlbGVjdD8uZW5hYmxlZCA/IHRydWUgOiBmYWxzZTtcclxuICAgIHRoaXMudXBkYXRlRGlzcGxheUNvbHVtbnModHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZpbHRlclZpc2liaWxpdHkoKSB7XHJcbiAgICB0aGlzLmZpbHRlckJhclZpc2libGUgPSB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlPy5maWx0ZXI/LnZpc2libGUgPz8gdGhpcy5jb25maWc/LmZpbHRlcj8udmlzaWJsZSA/PyBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Tm9EYXRhUm93UHJvcGVydGllcygpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5ub0RhdGFSb3cpIHtcclxuICAgICAgdGhpcy5ub0RhdGFSb3dBY3RpdmUgPSB0cnVlO1xyXG4gICAgICB0aGlzLm5vRGF0YVJvd0NvbmZpZyA9IHRoaXMuY29uZmlnLm5vRGF0YVJvdztcclxuICAgICAgdGhpcy5ub0RhdGFSb3dDb25maWcuaWNvbiA9IHRoaXMuY29uZmlnLm5vRGF0YVJvdz8uaWNvbiA/PyB0aGlzLm5vRGF0YVJvd0ljb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEV4cG9ydFByb3BlcnRpZXMoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuZXhwb3J0Py5lbmFibGVkKSB7XHJcbiAgICAgIHRoaXMuZXhwb3J0QWN0aXZlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0R2FwPVwiMXJlbVwiPlxyXG5cclxuICA8ZGl2IGZ4TGF5b3V0PVwicm93XCI+XHJcbiAgICA8ZGl2IGZ4RmxleCBmeExheW91dEdhcD1cIjFyZW1cIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJjb2x1bW5NZW51XCIgKm5nSWY9XCJjb2x1bW5TZWxlY3RBY3RpdmVcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGNvbHVtbi1zZWxlY3QtaWNvblwiPm1lbnU8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4+e3snTVVMVElfRlVOQ1RJT05BTF9UQUJMRS5DT0xVTU5fU0VMRUNUJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKm5nSWY9XCJmaWx0ZXJBY3RpdmUgJiYgc2hvd0ZpbHRlclRvZ2dsZVwiIChjbGljayk9XCJ0b2dnbGVGaWx0ZXJCYXIoKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5maWx0ZXJfbGlzdDwvc3Bhbj5cclxuICAgICAgICA8c3Bhbj57eydNVUxUSV9GVU5DVElPTkFMX1RBQkxFLkZJTFRFUl9UT0dHTEUnIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImV4cG9ydC1kYXRhXCIgbWF0LXN0cm9rZWQtYnV0dG9uICpuZ0lmPVwiZXhwb3J0QWN0aXZlXCIgKGNsaWNrKT1cImV4cG9ydCgpXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPmNsb3VkX2Rvd25sb2FkPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuPnt7J01VTFRJX0ZVTkNUSU9OQUxfVEFCTEUuRVhQT1JUJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlthZGRpdGlvbmFsQWN0aW9uc11cIj48L25nLWNvbnRlbnQ+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxtYXQtbWVudSAjY29sdW1uTWVudT1cIm1hdE1lbnVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4tc2VsZWN0LXdyYXBwZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb25maWd1cmFibGVDb2x1bW5zXCI+XHJcbiAgICAgICAgPG1hdC1jaGVja2JveCBbKG5nTW9kZWwpXT1cImNvbHVtbi5zZWxlY3RlZFwiIChjaGFuZ2UpPVwidXBkYXRlRGlzcGxheUNvbHVtbnMoKVwiPlxyXG4gICAgICAgICAge3tjb2x1bW4uZGlzcGxheU5hbWUgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LW1lbnU+XHJcblxyXG4gIDx0bGQtZmlsdGVyLWJhciAqbmdJZj1cImNvbmZpZy5maWx0ZXIgJiYgY29uZmlnLmZpbHRlci5lbmFibGVkXCIgW2ZpbHRlclJvd1Zpc2libGVdPVwiIWZpbHRlckJhclZpc2libGVcIiBbc2V0dGluZ3NdPVwiY29uZmlnLmZpbHRlci5zZXR0aW5nc1wiIFxyXG4gICAgKGZpbHRlckJhckNoYW5nZSk9XCJmaWx0ZXJzQ2hhbmdlZCgkZXZlbnQpXCI+XHJcbiAgPC90bGQtZmlsdGVyLWJhcj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInRhYmxlLW92ZXJmbG93XCI+XHJcbiAgICA8dGFibGUgI3RhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJjb25maWcuZGF0YVNvdXJjZVwiPlxyXG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJiYXRjaENvbHVtbk5hbWVcIj5cclxuICAgICAgICA8dGggY2xhc3M9XCJyb3ctc2VsZWN0XCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGRpc2FibGUtZXhwb3J0PlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveCBbbWF0VG9vbHRpcF09XCInTVVMVElfRlVOQ1RJT05BTF9UQUJMRS5TRUxFQ1RfQUxMJyB8IHRyYW5zbGF0ZVwiIFtkaXNhYmxlZF09XCJjb25maWcuYmF0Y2hDb25maWchLmNoZWNrQm94ZXNEaXNhYmxlZFwiIChjaGFuZ2UpPVwidG9nZ2xlQWxsUm93U2VsZWN0aW9uKClcIlxyXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJtYXRTZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiBpc0FsbFNlbGVjdGVkKClcIlxyXG4gICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJtYXRTZWxlY3Rpb24uaGFzVmFsdWUoKSAmJiAhaXNBbGxTZWxlY3RlZCgpXCI+XHJcbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICA8L3RoPlxyXG4gICAgICAgIDx0ZCBjbGFzcz1cInJvdy1zZWxlY3RcIiBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCIgZGlzYWJsZS1leHBvcnQ+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94IFttYXRUb29sdGlwXT1cIidNVUxUSV9GVU5DVElPTkFMX1RBQkxFLlNFTEVDVCcgfCB0cmFuc2xhdGVcIiAqbmdJZj1cImlzUm93Q2hlY2tib3hBbHdheXNWaXNpYmxlIHx8IGhvdmVyZWRSb3cgPT09IGVsZW1lbnQgfHwgbWF0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoZWxlbWVudClcIiBbZGlzYWJsZWRdPVwiY29uZmlnLmJhdGNoQ29uZmlnIS5jaGVja0JveGVzRGlzYWJsZWRcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVFbGVtZW50U2VsZWN0aW9uKGVsZW1lbnQpXCIgW2NoZWNrZWRdPVwibWF0U2VsZWN0aW9uLmlzU2VsZWN0ZWQoZWxlbWVudClcIj5cclxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXlDb2x1bW5zXCIgc3RpY2t5PjwvdHI+XHJcbiAgICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5Q29sdW1uc1wiIChtb3VzZW92ZXIpPVwiaG92ZXJlZFJvdyA9IHJvd1wiIChtb3VzZWxlYXZlKT1cImhvdmVyZWRSb3cgPSBudWxsXCIgW2NsYXNzLmhpZ2hsaWdodF09XCJoaWdobGlnaHRFbGVtZW50KHJvdylcIj48L3RyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vRGF0YVJvd0FjdGl2ZVwiPlxyXG4gICAgICAgIDx0ciAqbWF0Tm9EYXRhUm93PlxyXG4gICAgICAgICAgPCEtLSBhZGQgcmFuZG9tIG51bWJlciB0byBtYWtlIHN1cmUgaXQgdGFrZXMgZnVsbCB3aWR0aCAtLT5cclxuICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiOTlcIj5cclxuICAgICAgICAgICAgPGxpYi1zdGF0dXMtZGlzcGxheSBbY29uZmlnXT1cIm5vRGF0YVJvd0NvbmZpZ1wiPjwvbGliLXN0YXR1cy1kaXNwbGF5PlxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvdGFibGU+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
1
|
+
import { SelectionModel } from '@angular/cdk/collections';
|
|
2
|
+
import { Component, ContentChild, ContentChildren, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
3
|
+
import { MatSort } from '@angular/material/sort';
|
|
4
|
+
import { MatColumnDef, MatHeaderRowDef, MatNoDataRow, MatRowDef, MatTable } from '@angular/material/table';
|
|
5
|
+
import { map, take } from 'rxjs';
|
|
6
|
+
import { HtmlElementParseHelper } from '../helpers';
|
|
7
|
+
import { SaveFileHelper } from '../helpers/save-file.helper';
|
|
8
|
+
import { DISABLE_EXPORT_ATTRIBUTE_NAME } from './constants/disable-export-attribute-name.const';
|
|
9
|
+
import { ExportFormat } from './models';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "../services";
|
|
12
|
+
import * as i2 from "@ngx-translate/core";
|
|
13
|
+
import * as i3 from "@angular/common";
|
|
14
|
+
import * as i4 from "@angular/material/table";
|
|
15
|
+
import * as i5 from "@angular/material/button";
|
|
16
|
+
import * as i6 from "@angular/material/menu";
|
|
17
|
+
import * as i7 from "@angular/material/checkbox";
|
|
18
|
+
import * as i8 from "@angular/forms";
|
|
19
|
+
import * as i9 from "../filter-bar/filter-bar.component";
|
|
20
|
+
import * as i10 from "@ngbracket/ngx-layout/flex";
|
|
21
|
+
import * as i11 from "@angular/material/tooltip";
|
|
22
|
+
import * as i12 from "../status-display/status-display.component";
|
|
23
|
+
export class MultiFunctionalTableComponent {
|
|
24
|
+
set selection(value) {
|
|
25
|
+
this.matSelection.setSelection(...(value ?? []));
|
|
26
|
+
}
|
|
27
|
+
get ignoreAttributeName() { return DISABLE_EXPORT_ATTRIBUTE_NAME; }
|
|
28
|
+
get filterActive() { return this.config.filter?.enabled; }
|
|
29
|
+
constructor(domService, translateService) {
|
|
30
|
+
this.domService = domService;
|
|
31
|
+
this.translateService = translateService;
|
|
32
|
+
this.matSelection = new SelectionModel(true, []);
|
|
33
|
+
// Set this to false if you want to display checkboxes only on row hover.
|
|
34
|
+
this.isRowCheckboxAlwaysVisible = true;
|
|
35
|
+
//#region Output properties
|
|
36
|
+
this.filterBarChange = new EventEmitter();
|
|
37
|
+
this.exported = new EventEmitter();
|
|
38
|
+
this.selectionChange = this.matSelection.changed.asObservable().pipe(map(() => { return this.matSelection.selected; }));
|
|
39
|
+
this.noDataRowIcon = "manage_search";
|
|
40
|
+
this.batchColumnName = "batch";
|
|
41
|
+
}
|
|
42
|
+
//#region Angular lifecycle hooks
|
|
43
|
+
ngOnInit() {
|
|
44
|
+
this.readFromLocalStorage();
|
|
45
|
+
this.setFilterVisibility();
|
|
46
|
+
this.setColumnSelectProperties();
|
|
47
|
+
this.setExportProperties();
|
|
48
|
+
this.setNoDataRowProperties();
|
|
49
|
+
}
|
|
50
|
+
ngAfterContentInit() {
|
|
51
|
+
this.columnDefs.forEach(columnDef => this.table.addColumnDef(columnDef));
|
|
52
|
+
this.rowDefs.forEach(rowDef => this.table.addRowDef(rowDef));
|
|
53
|
+
this.headerRowDefs.forEach(headerRowDef => this.table.addHeaderRowDef(headerRowDef));
|
|
54
|
+
this.headerRowDefs.forEach(headerRowDef => this.table.addHeaderRowDef(headerRowDef));
|
|
55
|
+
this.table.setNoDataRow(this.noDataRow);
|
|
56
|
+
}
|
|
57
|
+
ngAfterViewInit() {
|
|
58
|
+
this.config.dataSource.sort = this.sort;
|
|
59
|
+
}
|
|
60
|
+
//#endregion
|
|
61
|
+
updateDisplayColumns(initial = false) {
|
|
62
|
+
this.batchSelectedEnabled = this.config.batchConfig?.enabled ? true : false;
|
|
63
|
+
const allColumns = this.config.columnSelect?.columns ?? [];
|
|
64
|
+
this.displayColumns = [];
|
|
65
|
+
this.configurableColumns = allColumns.filter(column => !column.notConfigurable);
|
|
66
|
+
if (this.batchSelectedEnabled) {
|
|
67
|
+
this.displayColumns.push(this.batchColumnName);
|
|
68
|
+
}
|
|
69
|
+
if (!allColumns.length) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const localStorageValue = this.localStorageValue ?? {};
|
|
73
|
+
if (!localStorageValue.columns) {
|
|
74
|
+
localStorageValue.columns = {};
|
|
75
|
+
}
|
|
76
|
+
allColumns.forEach((column) => {
|
|
77
|
+
if (initial) {
|
|
78
|
+
column.selected = localStorageValue.columns?.[column.name] ?? column.selected;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
82
|
+
localStorageValue.columns[column.name] = column.selected;
|
|
83
|
+
}
|
|
84
|
+
if (column.selected) {
|
|
85
|
+
this.displayColumns.push(column.name);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
if (!initial) {
|
|
89
|
+
this.updateLocalStorage(localStorageValue);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
toggleFilterBar() {
|
|
93
|
+
const localstorageObject = this.localStorageValue ?? {};
|
|
94
|
+
if (!localstorageObject.filter) {
|
|
95
|
+
localstorageObject.filter = {};
|
|
96
|
+
}
|
|
97
|
+
this.filterBarVisible = !this.filterBarVisible;
|
|
98
|
+
localstorageObject.filter.visible = this.filterBarVisible;
|
|
99
|
+
this.updateLocalStorage(localstorageObject);
|
|
100
|
+
}
|
|
101
|
+
filtersChanged(filters) {
|
|
102
|
+
this.filterBarChange.emit(filters);
|
|
103
|
+
}
|
|
104
|
+
export() {
|
|
105
|
+
this.config.dataSource.connect().pipe(take(1)).subscribe((data) => {
|
|
106
|
+
this.exported.emit(data);
|
|
107
|
+
});
|
|
108
|
+
if (this.config.export?.fileOptions) {
|
|
109
|
+
this.exportToFile();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
highlightElement(element) {
|
|
113
|
+
return this.highlightedElements?.includes(element);
|
|
114
|
+
}
|
|
115
|
+
//#region Methods for batch selection
|
|
116
|
+
isAllSelected() {
|
|
117
|
+
const numSelected = this.matSelection.selected.length;
|
|
118
|
+
const numRows = this.config.dataSource.data.length;
|
|
119
|
+
return numSelected === numRows;
|
|
120
|
+
}
|
|
121
|
+
toggleAllRowSelection() {
|
|
122
|
+
if (this.isAllSelected()) {
|
|
123
|
+
this.matSelection.clear();
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
this.matSelection.select(...this.config.dataSource.data);
|
|
127
|
+
}
|
|
128
|
+
toggleElementSelection(element) {
|
|
129
|
+
this.matSelection.toggle(element);
|
|
130
|
+
}
|
|
131
|
+
//#endregion
|
|
132
|
+
exportToFile() {
|
|
133
|
+
if (!this.config.export?.fileOptions?.saveToFile) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
let fileString = "";
|
|
137
|
+
let extension;
|
|
138
|
+
switch (this.config.export.fileOptions.format) {
|
|
139
|
+
case ExportFormat.CSV:
|
|
140
|
+
default:
|
|
141
|
+
extension = ExportFormat.CSV;
|
|
142
|
+
fileString = HtmlElementParseHelper.tableAsCsv(this.tableElementRef.nativeElement, this.ignoreAttributeName);
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
const translatedFileName = this.translateService.instant(this.config.export.fileOptions.fileName);
|
|
146
|
+
SaveFileHelper.saveFile(fileString, `${translatedFileName}.${extension}`);
|
|
147
|
+
}
|
|
148
|
+
updateLocalStorage(newValue) {
|
|
149
|
+
this.localStorageValue = newValue;
|
|
150
|
+
if (this.config.localStorageKey && newValue) {
|
|
151
|
+
this.domService.localStorage?.setItem(this.config.localStorageKey, JSON.stringify(newValue));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
readFromLocalStorage() {
|
|
155
|
+
if (this.config.localStorageKey) {
|
|
156
|
+
try {
|
|
157
|
+
const localStorageString = this.domService.localStorage?.getItem(this.config.localStorageKey);
|
|
158
|
+
if (localStorageString) {
|
|
159
|
+
this.localStorageValue = JSON.parse(localStorageString);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// eslint-disable-next-line no-empty
|
|
163
|
+
catch {
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
setColumnSelectProperties() {
|
|
168
|
+
this.columnSelectActive = this.config.columnSelect?.enabled ? true : false;
|
|
169
|
+
this.updateDisplayColumns(true);
|
|
170
|
+
}
|
|
171
|
+
setFilterVisibility() {
|
|
172
|
+
this.filterBarVisible = this.localStorageValue?.filter?.visible ?? this.config?.filter?.visible ?? false;
|
|
173
|
+
}
|
|
174
|
+
setNoDataRowProperties() {
|
|
175
|
+
if (this.config.noDataRow) {
|
|
176
|
+
this.noDataRowActive = true;
|
|
177
|
+
this.noDataRowConfig = this.config.noDataRow;
|
|
178
|
+
this.noDataRowConfig.icon = this.config.noDataRow?.icon ?? this.noDataRowIcon;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
setExportProperties() {
|
|
182
|
+
if (this.config.export?.enabled) {
|
|
183
|
+
this.exportActive = true;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: MultiFunctionalTableComponent, deps: [{ token: i1.DOMService }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
187
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: MultiFunctionalTableComponent, selector: "tld-multi-functional-table", inputs: { config: "config", highlightedElements: "highlightedElements", selection: "selection", isRowCheckboxAlwaysVisible: "isRowCheckboxAlwaysVisible" }, outputs: { filterBarChange: "filterBarChange", exported: "exported", selectionChange: "selectionChange" }, queries: [{ propertyName: "noDataRow", first: true, predicate: MatNoDataRow, descendants: true }, { propertyName: "headerRowDefs", predicate: MatHeaderRowDef }, { propertyName: "rowDefs", predicate: MatRowDef, descendants: true }, { propertyName: "columnDefs", predicate: MatColumnDef }], viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true, static: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "tableElementRef", first: true, predicate: MatTable, descendants: true, read: ElementRef }], ngImport: i0, template: "<div fxLayout=\"column\" fxLayoutGap=\"1rem\">\r\n\r\n <div fxLayout=\"row\">\r\n <div fxFlex fxLayoutGap=\"1rem\">\r\n <button mat-button [matMenuTriggerFor]=\"columnMenu\" *ngIf=\"columnSelectActive\">\r\n <span class=\"material-icons column-select-icon\">menu</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.COLUMN_SELECT' | translate}}</span>\r\n </button>\r\n\r\n <button mat-button *ngIf=\"filterActive\" (click)=\"toggleFilterBar()\">\r\n <span class=\"material-icons\">filter_list</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.FILTER_TOGGLE' | translate}}</span>\r\n </button>\r\n\r\n <button class=\"export-data\" mat-stroked-button *ngIf=\"exportActive\" (click)=\"export()\">\r\n <span class=\"material-icons-outlined\">cloud_download</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.EXPORT' | translate}}</span>\r\n </button>\r\n </div>\r\n\r\n <ng-content select=\"[additionalActions]\"></ng-content>\r\n </div>\r\n\r\n <mat-menu #columnMenu=\"matMenu\">\r\n <div class=\"column-select-wrapper\" (click)=\"$event.stopPropagation()\">\r\n <div *ngFor=\"let column of configurableColumns\">\r\n <mat-checkbox [(ngModel)]=\"column.selected\" (change)=\"updateDisplayColumns()\">\r\n {{column.displayName | translate}}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n\r\n <tld-filter-bar *ngIf=\"config.filter && config.filter.enabled\" [filterRowVisible]=\"!filterBarVisible\" [settings]=\"config.filter.settings\" \r\n (filterBarChange)=\"filtersChanged($event)\">\r\n </tld-filter-bar>\r\n\r\n <div class=\"table-overflow\">\r\n <table #table mat-table [dataSource]=\"config.dataSource\">\r\n <ng-content></ng-content>\r\n <ng-container [matColumnDef]=\"batchColumnName\">\r\n <th class=\"row-select\" mat-header-cell *matHeaderCellDef disable-export>\r\n <mat-checkbox [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT_ALL' | translate\" [disabled]=\"config.batchConfig!.checkBoxesDisabled\" (change)=\"toggleAllRowSelection()\"\r\n [checked]=\"matSelection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"matSelection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </th>\r\n <td class=\"row-select\" mat-cell *matCellDef=\"let element\" disable-export>\r\n <mat-checkbox [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT' | translate\" *ngIf=\"isRowCheckboxAlwaysVisible || hoveredRow === element || matSelection.isSelected(element)\" [disabled]=\"config.batchConfig!.checkBoxesDisabled\" (click)=\"$event.stopPropagation()\"\r\n (change)=\"toggleElementSelection(element)\" [checked]=\"matSelection.isSelected(element)\">\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"displayColumns\" sticky></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayColumns\" (mouseover)=\"hoveredRow = row\" (mouseleave)=\"hoveredRow = null\" [class.highlight]=\"highlightElement(row)\"></tr>\r\n\r\n <ng-container *ngIf=\"noDataRowActive\">\r\n <tr *matNoDataRow>\r\n <!-- add random number to make sure it takes full width -->\r\n <td colspan=\"99\">\r\n <lib-status-display [config]=\"noDataRowConfig\"></lib-status-display>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n</div>\r\n", styles: [":host ::ng-deep th,:host ::ng-deep tr{white-space:nowrap}:host ::ng-deep td:not(:first-of-type){padding-right:10px!important}:host ::ng-deep tr.mat-mdc-row:hover,:host ::ng-deep tr.mat-mdc-row.highlight{background-color:var(--base-95)}:host ::ng-deep .export-data .mdc-button__label{display:flex;align-items:center}:host ::ng-deep .mat-mdc-cell,:host ::ng-deep .mat-mdc-header-cell,:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-color:var(--base-70)}:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-width:1px;border-bottom-style:solid}:host ::ng-deep .mdc-data-table__cell:nth-child(2),:host ::ng-deep .mdc-data-table__header-cell:nth-child(2){padding:0 16px 0 10px}table{width:100%}.column-select-icon{rotate:90deg}.column-select-wrapper{padding:1rem}.material-icons,.material-icons-outlined{margin-right:.5rem}.table-action-button{margin-bottom:1rem}th.mat-mdc-header-cell:first-of-type,td.mat-mdc-cell:first-of-type,td.mat-mdc-footer-cell:first-of-type{padding:0 0 0 10px}.row-select{width:0}.table-overflow{overflow-x:auto}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i4.MatNoDataRow, selector: "ng-template[matNoDataRow]" }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.FilterBarComponent, selector: "tld-filter-bar", inputs: ["settings", "filterRowVisible"], outputs: ["filterBarChange"] }, { kind: "directive", type: i10.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i10.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i10.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i11.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i12.StatusDisplayComponent, selector: "lib-status-display", inputs: ["config"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
|
|
188
|
+
}
|
|
189
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: MultiFunctionalTableComponent, decorators: [{
|
|
190
|
+
type: Component,
|
|
191
|
+
args: [{ selector: 'tld-multi-functional-table', template: "<div fxLayout=\"column\" fxLayoutGap=\"1rem\">\r\n\r\n <div fxLayout=\"row\">\r\n <div fxFlex fxLayoutGap=\"1rem\">\r\n <button mat-button [matMenuTriggerFor]=\"columnMenu\" *ngIf=\"columnSelectActive\">\r\n <span class=\"material-icons column-select-icon\">menu</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.COLUMN_SELECT' | translate}}</span>\r\n </button>\r\n\r\n <button mat-button *ngIf=\"filterActive\" (click)=\"toggleFilterBar()\">\r\n <span class=\"material-icons\">filter_list</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.FILTER_TOGGLE' | translate}}</span>\r\n </button>\r\n\r\n <button class=\"export-data\" mat-stroked-button *ngIf=\"exportActive\" (click)=\"export()\">\r\n <span class=\"material-icons-outlined\">cloud_download</span>\r\n <span>{{'MULTI_FUNCTIONAL_TABLE.EXPORT' | translate}}</span>\r\n </button>\r\n </div>\r\n\r\n <ng-content select=\"[additionalActions]\"></ng-content>\r\n </div>\r\n\r\n <mat-menu #columnMenu=\"matMenu\">\r\n <div class=\"column-select-wrapper\" (click)=\"$event.stopPropagation()\">\r\n <div *ngFor=\"let column of configurableColumns\">\r\n <mat-checkbox [(ngModel)]=\"column.selected\" (change)=\"updateDisplayColumns()\">\r\n {{column.displayName | translate}}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n\r\n <tld-filter-bar *ngIf=\"config.filter && config.filter.enabled\" [filterRowVisible]=\"!filterBarVisible\" [settings]=\"config.filter.settings\" \r\n (filterBarChange)=\"filtersChanged($event)\">\r\n </tld-filter-bar>\r\n\r\n <div class=\"table-overflow\">\r\n <table #table mat-table [dataSource]=\"config.dataSource\">\r\n <ng-content></ng-content>\r\n <ng-container [matColumnDef]=\"batchColumnName\">\r\n <th class=\"row-select\" mat-header-cell *matHeaderCellDef disable-export>\r\n <mat-checkbox [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT_ALL' | translate\" [disabled]=\"config.batchConfig!.checkBoxesDisabled\" (change)=\"toggleAllRowSelection()\"\r\n [checked]=\"matSelection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"matSelection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n </th>\r\n <td class=\"row-select\" mat-cell *matCellDef=\"let element\" disable-export>\r\n <mat-checkbox [matTooltip]=\"'MULTI_FUNCTIONAL_TABLE.SELECT' | translate\" *ngIf=\"isRowCheckboxAlwaysVisible || hoveredRow === element || matSelection.isSelected(element)\" [disabled]=\"config.batchConfig!.checkBoxesDisabled\" (click)=\"$event.stopPropagation()\"\r\n (change)=\"toggleElementSelection(element)\" [checked]=\"matSelection.isSelected(element)\">\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"displayColumns\" sticky></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayColumns\" (mouseover)=\"hoveredRow = row\" (mouseleave)=\"hoveredRow = null\" [class.highlight]=\"highlightElement(row)\"></tr>\r\n\r\n <ng-container *ngIf=\"noDataRowActive\">\r\n <tr *matNoDataRow>\r\n <!-- add random number to make sure it takes full width -->\r\n <td colspan=\"99\">\r\n <lib-status-display [config]=\"noDataRowConfig\"></lib-status-display>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n</div>\r\n", styles: [":host ::ng-deep th,:host ::ng-deep tr{white-space:nowrap}:host ::ng-deep td:not(:first-of-type){padding-right:10px!important}:host ::ng-deep tr.mat-mdc-row:hover,:host ::ng-deep tr.mat-mdc-row.highlight{background-color:var(--base-95)}:host ::ng-deep .export-data .mdc-button__label{display:flex;align-items:center}:host ::ng-deep .mat-mdc-cell,:host ::ng-deep .mat-mdc-header-cell,:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-color:var(--base-70)}:host ::ng-deep .mdc-data-table__row:last-child{border-bottom-width:1px;border-bottom-style:solid}:host ::ng-deep .mdc-data-table__cell:nth-child(2),:host ::ng-deep .mdc-data-table__header-cell:nth-child(2){padding:0 16px 0 10px}table{width:100%}.column-select-icon{rotate:90deg}.column-select-wrapper{padding:1rem}.material-icons,.material-icons-outlined{margin-right:.5rem}.table-action-button{margin-bottom:1rem}th.mat-mdc-header-cell:first-of-type,td.mat-mdc-cell:first-of-type,td.mat-mdc-footer-cell:first-of-type{padding:0 0 0 10px}.row-select{width:0}.table-overflow{overflow-x:auto}\n"] }]
|
|
192
|
+
}], ctorParameters: () => [{ type: i1.DOMService }, { type: i2.TranslateService }], propDecorators: { config: [{
|
|
193
|
+
type: Input
|
|
194
|
+
}], highlightedElements: [{
|
|
195
|
+
type: Input
|
|
196
|
+
}], selection: [{
|
|
197
|
+
type: Input
|
|
198
|
+
}], isRowCheckboxAlwaysVisible: [{
|
|
199
|
+
type: Input
|
|
200
|
+
}], filterBarChange: [{
|
|
201
|
+
type: Output
|
|
202
|
+
}], exported: [{
|
|
203
|
+
type: Output
|
|
204
|
+
}], selectionChange: [{
|
|
205
|
+
type: Output
|
|
206
|
+
}], headerRowDefs: [{
|
|
207
|
+
type: ContentChildren,
|
|
208
|
+
args: [MatHeaderRowDef]
|
|
209
|
+
}], rowDefs: [{
|
|
210
|
+
type: ContentChildren,
|
|
211
|
+
args: [MatRowDef, { descendants: true }]
|
|
212
|
+
}], columnDefs: [{
|
|
213
|
+
type: ContentChildren,
|
|
214
|
+
args: [MatColumnDef]
|
|
215
|
+
}], noDataRow: [{
|
|
216
|
+
type: ContentChild,
|
|
217
|
+
args: [MatNoDataRow]
|
|
218
|
+
}], table: [{
|
|
219
|
+
type: ViewChild,
|
|
220
|
+
args: [MatTable, { static: true }]
|
|
221
|
+
}], sort: [{
|
|
222
|
+
type: ViewChild,
|
|
223
|
+
args: [MatSort]
|
|
224
|
+
}], tableElementRef: [{
|
|
225
|
+
type: ViewChild,
|
|
226
|
+
args: [MatTable, { read: ElementRef }]
|
|
227
|
+
}] } });
|
|
228
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktZnVuY3Rpb25hbC10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvbXVsdGktZnVuY3Rpb25hbC10YWJsZS9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9tdWx0aS1mdW5jdGlvbmFsLXRhYmxlL211bHRpLWZ1bmN0aW9uYWwtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBbUMsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFhLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqTCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUzRyxPQUFPLEVBQUUsR0FBRyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRTdELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBWXhDLE1BQU0sT0FBTyw2QkFBNkI7SUFLeEMsSUFBYSxTQUFTLENBQUMsS0FBVTtRQUMvQixJQUFJLENBQUMs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QkFBQyxTQUFTLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUNsQixVQUFVO3NCQUF4QyxlQUFlO3VCQUFDLFlBQVk7Z0JBQ0QsU0FBUztzQkFBcEMsWUFBWTt1QkFBQyxZQUFZO2dCQUVhLEtBQUs7c0JBQTNDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDakIsSUFBSTtzQkFBdkIsU0FBUzt1QkFBQyxPQUFPO2dCQUd5QixlQUFlO3NCQUF6RCxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBDb250ZW50Q2hpbGRyZW4sIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XHJcbmltcG9ydCB7IE1hdENvbHVtbkRlZiwgTWF0SGVhZGVyUm93RGVmLCBNYXROb0RhdGFSb3csIE1hdFJvd0RlZiwgTWF0VGFibGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCB0YWtlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEZpbHRlckJhckNoYW5nZUV2ZW50IH0gZnJvbSAnLi4vZmlsdGVyLWJhci9tb2RlbHMvZmlsdGVyLWJhci1jaGFuZ2UtZXZlbnQubW9kZWwnO1xyXG5pbXBvcnQgeyBIdG1sRWxlbWVudFBhcnNlSGVscGVyIH0gZnJvbSAnLi4vaGVscGVycyc7XHJcbmltcG9ydCB7IFNhdmVGaWxlSGVscGVyIH0gZnJvbSAnLi4vaGVscGVycy9zYXZlLWZpbGUuaGVscGVyJztcclxuaW1wb3J0IHsgRE9NU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgRElTQUJMRV9FWFBPUlRfQVRUUklCVVRFX05BTUUgfSBmcm9tICcuL2NvbnN0YW50cy9kaXNhYmxlLWV4cG9ydC1hdHRyaWJ1dGUtbmFtZS5jb25zdCc7XHJcbmltcG9ydCB7IEV4cG9ydEZvcm1hdCB9IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHsgQ29sdW1uQ29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvY29sdW1uLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IE11bHRpRnVuY3Rpb25hbFRhYmxlQ29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvbXVsdGktZnVuY3Rpb25hbC10YWJsZS1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBTZWxlY3RlZENvbHVtbkxvY2FsU3RvcmFnZUNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL3NlbGVjdGVkLWNvbHVtbi1sb2NhbC1zdG9yYWdlLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IFN0YXR1c0Rpc3BsYXlDb25maWcgfSBmcm9tICcuLi9zdGF0dXMtZGlzcGxheS9tb2RlbHMvc3RhdHVzLWRpc3BsYXktY29uZmlnLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICd0bGQtbXVsdGktZnVuY3Rpb25hbC10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpLWZ1bmN0aW9uYWwtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL211bHRpLWZ1bmN0aW9uYWwtdGFibGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTXVsdGlGdW5jdGlvbmFsVGFibGVDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIHJlYWRvbmx5IG1hdFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxUPih0cnVlLCBbXSk7XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZyE6IE11bHRpRnVuY3Rpb25hbFRhYmxlQ29uZmlnPFQ+O1xyXG4gIEBJbnB1dCgpIGhpZ2hsaWdodGVkRWxlbWVudHMhOiBUW107XHJcbiAgQElucHV0KCkgc2V0IHNlbGVjdGlvbih2YWx1ZTogVFtdKSB7XHJcbiAgICB0aGlzLm1hdFNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oLi4uKHZhbHVlID8/IFtdKSk7XHJcbiAgfVxyXG5cclxuICAvLyBTZXQgdGhpcyB0byBmYWxzZSBpZiB5b3Ugd2FudCB0byBkaXNwbGF5IGNoZWNrYm94ZXMgb25seSBvbiByb3cgaG92ZXIuXHJcbiAgQElucHV0KCkgaXNSb3dDaGVja2JveEFsd2F5c1Zpc2libGUgPSB0cnVlO1xyXG5cclxuICAvLyNyZWdpb24gT3V0cHV0IHByb3BlcnRpZXNcclxuICBAT3V0cHV0KCkgZmlsdGVyQmFyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RmlsdGVyQmFyQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJCYXJDaGFuZ2VFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgZXhwb3J0ZWQ6IEV2ZW50RW1pdHRlcjxUW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KCk7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZTogT2JzZXJ2YWJsZTxUW10+ID0gdGhpcy5tYXRTZWxlY3Rpb24uY2hhbmdlZC5hc09ic2VydmFibGUoKS5waXBlKG1hcCgoKSA9PiB7IHJldHVybiB0aGlzLm1hdFNlbGVjdGlvbi5zZWxlY3RlZDsgfSkpO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyAjcmVnaW9uIFByb3BlcnRpZXMgZm9yIG1hdCB0YWJsZSB3cmFwcGVyXHJcbiAgQENvbnRlbnRDaGlsZHJlbihNYXRIZWFkZXJSb3dEZWYpIGhlYWRlclJvd0RlZnMhOiBRdWVyeUxpc3Q8TWF0SGVhZGVyUm93RGVmPjtcclxuICBAQ29udGVudENoaWxkcmVuKE1hdFJvd0RlZiwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSByb3dEZWZzITogUXVlcnlMaXN0PE1hdFJvd0RlZjxUPj47XHJcbiAgQENvbnRlbnRDaGlsZHJlbihNYXRDb2x1bW5EZWYpIGNvbHVtbkRlZnMhOiBRdWVyeUxpc3Q8TWF0Q29sdW1uRGVmPjtcclxuICBAQ29udGVudENoaWxkKE1hdE5vRGF0YVJvdykgbm9EYXRhUm93ITogTWF0Tm9EYXRhUm93O1xyXG5cclxuICBAVmlld0NoaWxkKE1hdFRhYmxlLCB7IHN0YXRpYzogdHJ1ZSB9KSB0YWJsZSE6IE1hdFRhYmxlPFQ+O1xyXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydCE6IE1hdFNvcnQ7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIEBWaWV3Q2hpbGQoTWF0VGFibGUsIHsgcmVhZDogRWxlbWVudFJlZiB9KSB0YWJsZUVsZW1lbnRSZWYhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcblxyXG4gIGdldCBpZ25vcmVBdHRyaWJ1dGVOYW1lKCkgeyByZXR1cm4gRElTQUJMRV9FWFBPUlRfQVRUUklCVVRFX05BTUUgfVxyXG4gIGRpc3BsYXlDb2x1bW5zITogc3RyaW5nW107XHJcblxyXG4gIGNvbHVtblNlbGVjdEFjdGl2ZSE6IGJvb2xlYW47XHJcbiAgZXhwb3J0QWN0aXZlITogYm9vbGVhbjtcclxuICBub0RhdGFSb3dBY3RpdmUhOiBib29sZWFuO1xyXG5cclxuICBmaWx0ZXJCYXJWaXNpYmxlITogYm9vbGVhbjtcclxuXHJcbiAgbm9EYXRhUm93Q29uZmlnITogU3RhdHVzRGlzcGxheUNvbmZpZztcclxuICBub0RhdGFSb3dJY29uID0gXCJtYW5hZ2Vfc2VhcmNoXCI7XHJcblxyXG4gIGNvbmZpZ3VyYWJsZUNvbHVtbnMhOiBDb2x1bW5Db25maWdbXTtcclxuICBiYXRjaFNlbGVjdGVkRW5hYmxlZCE6IGJvb2xlYW47XHJcblxyXG4gIC8vIGlzIHVzZWQgaW4gaHRtbCB0byBkaXNwbGF5IGJhdGNoIGNoZWNrYm94IG9uIGhvdmVyZWQgcm93XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBob3ZlcmVkUm93OiBhbnk7XHJcblxyXG4gIGdldCBmaWx0ZXJBY3RpdmUoKSB7IHJldHVybiB0aGlzLmNvbmZpZy5maWx0ZXI/LmVuYWJsZWQ7IH1cclxuXHJcbiAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VWYWx1ZSE6IFNlbGVjdGVkQ29sdW1uTG9jYWxTdG9yYWdlQ29uZmlnO1xyXG4gIHJlYWRvbmx5IGJhdGNoQ29sdW1uTmFtZSA9IFwiYmF0Y2hcIjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkb21TZXJ2aWNlOiBET01TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7IH1cclxuXHJcbiAgLy8jcmVnaW9uIEFuZ3VsYXIgbGlmZWN5Y2xlIGhvb2tzXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlYWRGcm9tTG9jYWxTdG9yYWdlKCk7XHJcbiAgICB0aGlzLnNldEZpbHRlclZpc2liaWxpdHkoKTtcclxuICAgIHRoaXMuc2V0Q29sdW1uU2VsZWN0UHJvcGVydGllcygpO1xyXG4gICAgdGhpcy5zZXRFeHBvcnRQcm9wZXJ0aWVzKCk7XHJcbiAgICB0aGlzLnNldE5vRGF0YVJvd1Byb3BlcnRpZXMoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcclxuICAgIHRoaXMuY29sdW1uRGVmcy5mb3JFYWNoKGNvbHVtbkRlZiA9PiB0aGlzLnRhYmxlLmFkZENvbHVtbkRlZihjb2x1bW5EZWYpKTtcclxuICAgIHRoaXMucm93RGVmcy5mb3JFYWNoKHJvd0RlZiA9PiB0aGlzLnRhYmxlLmFkZFJvd0RlZihyb3dEZWYpKTtcclxuICAgIHRoaXMuaGVhZGVyUm93RGVmcy5mb3JFYWNoKGhlYWRlclJvd0RlZiA9PiB0aGlzLnRhYmxlLmFkZEhlYWRlclJvd0RlZihoZWFkZXJSb3dEZWYpKTtcclxuICAgIHRoaXMuaGVhZGVyUm93RGVmcy5mb3JFYWNoKGhlYWRlclJvd0RlZiA9PiB0aGlzLnRhYmxlLmFkZEhlYWRlclJvd0RlZihoZWFkZXJSb3dEZWYpKTtcclxuICAgIHRoaXMudGFibGUuc2V0Tm9EYXRhUm93KHRoaXMubm9EYXRhUm93KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uZmlnLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHVwZGF0ZURpc3BsYXlDb2x1bW5zKGluaXRpYWwgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5iYXRjaFNlbGVjdGVkRW5hYmxlZCA9IHRoaXMuY29uZmlnLmJhdGNoQ29uZmlnPy5lbmFibGVkID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuY29uZmlnLmNvbHVtblNlbGVjdD8uY29sdW1ucyA/PyBbXTtcclxuICAgIHRoaXMuZGlzcGxheUNvbHVtbnMgPSBbXTtcclxuICAgIHRoaXMuY29uZmlndXJhYmxlQ29sdW1ucyA9IGFsbENvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiAhY29sdW1uLm5vdENvbmZpZ3VyYWJsZSk7XHJcblxyXG4gICAgaWYgKHRoaXMuYmF0Y2hTZWxlY3RlZEVuYWJsZWQpIHtcclxuICAgICAgdGhpcy5kaXNwbGF5Q29sdW1ucy5wdXNoKHRoaXMuYmF0Y2hDb2x1bW5OYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWFsbENvbHVtbnMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsb2NhbFN0b3JhZ2VWYWx1ZSA9IHRoaXMubG9jYWxTdG9yYWdlVmFsdWUgPz8ge307XHJcbiAgICBpZiAoIWxvY2FsU3RvcmFnZVZhbHVlLmNvbHVtbnMpIHtcclxuICAgICAgbG9jYWxTdG9yYWdlVmFsdWUuY29sdW1ucyA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIGFsbENvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgIGlmIChpbml0aWFsKSB7XHJcbiAgICAgICAgY29sdW1uLnNlbGVjdGVkID0gbG9jYWxTdG9yYWdlVmFsdWUuY29sdW1ucz8uW2NvbHVtbi5uYW1lXSA/PyBjb2x1bW4uc2VsZWN0ZWQ7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICBsb2NhbFN0b3JhZ2VWYWx1ZS5jb2x1bW5zIVtjb2x1bW4ubmFtZV0gPSBjb2x1bW4uc2VsZWN0ZWQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbHVtbi5zZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUNvbHVtbnMucHVzaChjb2x1bW4ubmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICBpZiAoIWluaXRpYWwpIHtcclxuICAgICAgdGhpcy51cGRhdGVMb2NhbFN0b3JhZ2UobG9jYWxTdG9yYWdlVmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRmlsdGVyQmFyKCkge1xyXG4gICAgY29uc3QgbG9jYWxzdG9yYWdlT2JqZWN0ID0gdGhpcy5sb2NhbFN0b3JhZ2VWYWx1ZSA/PyB7fTtcclxuICAgIGlmICghbG9jYWxzdG9yYWdlT2JqZWN0LmZpbHRlcikge1xyXG4gICAgICBsb2NhbHN0b3JhZ2VPYmplY3QuZmlsdGVyID0ge307XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWx0ZXJCYXJWaXNpYmxlID0gIXRoaXMuZmlsdGVyQmFyVmlzaWJsZTtcclxuICAgIGxvY2Fsc3RvcmFnZU9iamVjdC5maWx0ZXIudmlzaWJsZSA9IHRoaXMuZmlsdGVyQmFyVmlzaWJsZTtcclxuICAgIHRoaXMudXBkYXRlTG9jYWxTdG9yYWdlKGxvY2Fsc3RvcmFnZU9iamVjdCk7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJzQ2hhbmdlZChmaWx0ZXJzOiBGaWx0ZXJCYXJDaGFuZ2VFdmVudCkge1xyXG4gICAgdGhpcy5maWx0ZXJCYXJDaGFuZ2UuZW1pdChmaWx0ZXJzKTtcclxuICB9XHJcblxyXG4gIGV4cG9ydCgpIHtcclxuICAgIHRoaXMuY29uZmlnLmRhdGFTb3VyY2UuY29ubmVjdCgpLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChkYXRhKSA9PiB7XHJcbiAgICAgIHRoaXMuZXhwb3J0ZWQuZW1pdChkYXRhKTtcclxuICAgIH0pXHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnLmV4cG9ydD8uZmlsZU9wdGlvbnMpIHtcclxuICAgICAgdGhpcy5leHBvcnRUb0ZpbGUoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGlnaGxpZ2h0RWxlbWVudChlbGVtZW50OiBUKSB7XHJcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRlZEVsZW1lbnRzPy5pbmNsdWRlcyhlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBNZXRob2RzIGZvciBiYXRjaCBzZWxlY3Rpb25cclxuICBpc0FsbFNlbGVjdGVkKCkge1xyXG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLm1hdFNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7XHJcbiAgICBjb25zdCBudW1Sb3dzID0gdGhpcy5jb25maWcuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aDtcclxuICAgIHJldHVybiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcclxuICB9XHJcblxyXG4gIHRvZ2dsZUFsbFJvd1NlbGVjdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmlzQWxsU2VsZWN0ZWQoKSkge1xyXG4gICAgICB0aGlzLm1hdFNlbGVjdGlvbi5jbGVhcigpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tYXRTZWxlY3Rpb24uc2VsZWN0KC4uLnRoaXMuY29uZmlnLmRhdGFTb3VyY2UuZGF0YSk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVFbGVtZW50U2VsZWN0aW9uKGVsZW1lbnQ6IFQpIHtcclxuICAgIHRoaXMubWF0U2VsZWN0aW9uLnRvZ2dsZShlbGVtZW50KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHByaXZhdGUgZXhwb3J0VG9GaWxlKCkge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5leHBvcnQ/LmZpbGVPcHRpb25zPy5zYXZlVG9GaWxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZmlsZVN0cmluZyA9IFwiXCI7XHJcbiAgICBsZXQgZXh0ZW5zaW9uITogRXhwb3J0Rm9ybWF0O1xyXG4gICAgc3dpdGNoICh0aGlzLmNvbmZpZy5leHBvcnQuZmlsZU9wdGlvbnMuZm9ybWF0KSB7XHJcbiAgICAgIGNhc2UgRXhwb3J0Rm9ybWF0LkNTVjpcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBleHRlbnNpb24gPSBFeHBvcnRGb3JtYXQuQ1NWO1xyXG4gICAgICAgIGZpbGVTdHJpbmcgPSBIdG1sRWxlbWVudFBhcnNlSGVscGVyLnRhYmxlQXNDc3YodGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5pZ25vcmVBdHRyaWJ1dGVOYW1lKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGNvbnN0IHRyYW5zbGF0ZWRGaWxlTmFtZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuY29uZmlnLmV4cG9ydC5maWxlT3B0aW9ucy5maWxlTmFtZSk7XHJcbiAgICBTYXZlRmlsZUhlbHBlci5zYXZlRmlsZShmaWxlU3RyaW5nLCBgJHt0cmFuc2xhdGVkRmlsZU5hbWV9LiR7ZXh0ZW5zaW9ufWApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVMb2NhbFN0b3JhZ2UobmV3VmFsdWU6IFNlbGVjdGVkQ29sdW1uTG9jYWxTdG9yYWdlQ29uZmlnKSB7XHJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICBpZiAodGhpcy5jb25maWcubG9jYWxTdG9yYWdlS2V5ICYmIG5ld1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuZG9tU2VydmljZS5sb2NhbFN0b3JhZ2U/LnNldEl0ZW0odGhpcy5jb25maWcubG9jYWxTdG9yYWdlS2V5LCBKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIHJlYWRGcm9tTG9jYWxTdG9yYWdlKCkge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnLmxvY2FsU3RvcmFnZUtleSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGxvY2FsU3RvcmFnZVN0cmluZyA9IHRoaXMuZG9tU2VydmljZS5sb2NhbFN0b3JhZ2U/LmdldEl0ZW0odGhpcy5jb25maWcubG9jYWxTdG9yYWdlS2V5KTtcclxuICAgICAgICBpZiAobG9jYWxTdG9yYWdlU3RyaW5nKSB7XHJcbiAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2VTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcclxuICAgICAgY2F0Y2gge1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENvbHVtblNlbGVjdFByb3BlcnRpZXMoKSB7XHJcbiAgICB0aGlzLmNvbHVtblNlbGVjdEFjdGl2ZSA9IHRoaXMuY29uZmlnLmNvbHVtblNlbGVjdD8uZW5hYmxlZCA/IHRydWUgOiBmYWxzZTtcclxuICAgIHRoaXMudXBkYXRlRGlzcGxheUNvbHVtbnModHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZpbHRlclZpc2liaWxpdHkoKSB7XHJcbiAgICB0aGlzLmZpbHRlckJhclZpc2libGUgPSB0aGlzLmxvY2FsU3RvcmFnZVZhbHVlPy5maWx0ZXI/LnZpc2libGUgPz8gdGhpcy5jb25maWc/LmZpbHRlcj8udmlzaWJsZSA/PyBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Tm9EYXRhUm93UHJvcGVydGllcygpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZy5ub0RhdGFSb3cpIHtcclxuICAgICAgdGhpcy5ub0RhdGFSb3dBY3RpdmUgPSB0cnVlO1xyXG4gICAgICB0aGlzLm5vRGF0YVJvd0NvbmZpZyA9IHRoaXMuY29uZmlnLm5vRGF0YVJvdztcclxuICAgICAgdGhpcy5ub0RhdGFSb3dDb25maWcuaWNvbiA9IHRoaXMuY29uZmlnLm5vRGF0YVJvdz8uaWNvbiA/PyB0aGlzLm5vRGF0YVJvd0ljb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEV4cG9ydFByb3BlcnRpZXMoKSB7XHJcbiAgICBpZiAodGhpcy5jb25maWcuZXhwb3J0Py5lbmFibGVkKSB7XHJcbiAgICAgIHRoaXMuZXhwb3J0QWN0aXZlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0R2FwPVwiMXJlbVwiPlxyXG5cclxuICA8ZGl2IGZ4TGF5b3V0PVwicm93XCI+XHJcbiAgICA8ZGl2IGZ4RmxleCBmeExheW91dEdhcD1cIjFyZW1cIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJjb2x1bW5NZW51XCIgKm5nSWY9XCJjb2x1bW5TZWxlY3RBY3RpdmVcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGNvbHVtbi1zZWxlY3QtaWNvblwiPm1lbnU8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4+e3snTVVMVElfRlVOQ1RJT05BTF9UQUJMRS5DT0xVTU5fU0VMRUNUJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKm5nSWY9XCJmaWx0ZXJBY3RpdmVcIiAoY2xpY2spPVwidG9nZ2xlRmlsdGVyQmFyKClcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+ZmlsdGVyX2xpc3Q8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4+e3snTVVMVElfRlVOQ1RJT05BTF9UQUJMRS5GSUxURVJfVE9HR0xFJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJleHBvcnQtZGF0YVwiIG1hdC1zdHJva2VkLWJ1dHRvbiAqbmdJZj1cImV4cG9ydEFjdGl2ZVwiIChjbGljayk9XCJleHBvcnQoKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5jbG91ZF9kb3dubG9hZDwvc3Bhbj5cclxuICAgICAgICA8c3Bhbj57eydNVUxUSV9GVU5DVElPTkFMX1RBQkxFLkVYUE9SVCcgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbYWRkaXRpb25hbEFjdGlvbnNdXCI+PC9uZy1jb250ZW50PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bWF0LW1lbnUgI2NvbHVtbk1lbnU9XCJtYXRNZW51XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLXNlbGVjdC13cmFwcGVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29uZmlndXJhYmxlQ29sdW1uc1wiPlxyXG4gICAgICAgIDxtYXQtY2hlY2tib3ggWyhuZ01vZGVsKV09XCJjb2x1bW4uc2VsZWN0ZWRcIiAoY2hhbmdlKT1cInVwZGF0ZURpc3BsYXlDb2x1bW5zKClcIj5cclxuICAgICAgICAgIHt7Y29sdW1uLmRpc3BsYXlOYW1lIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1tZW51PlxyXG5cclxuICA8dGxkLWZpbHRlci1iYXIgKm5nSWY9XCJjb25maWcuZmlsdGVyICYmIGNvbmZpZy5maWx0ZXIuZW5hYmxlZFwiIFtmaWx0ZXJSb3dWaXNpYmxlXT1cIiFmaWx0ZXJCYXJWaXNpYmxlXCIgW3NldHRpbmdzXT1cImNvbmZpZy5maWx0ZXIuc2V0dGluZ3NcIiBcclxuICAgIChmaWx0ZXJCYXJDaGFuZ2UpPVwiZmlsdGVyc0NoYW5nZWQoJGV2ZW50KVwiPlxyXG4gIDwvdGxkLWZpbHRlci1iYXI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJ0YWJsZS1vdmVyZmxvd1wiPlxyXG4gICAgPHRhYmxlICN0YWJsZSBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwiY29uZmlnLmRhdGFTb3VyY2VcIj5cclxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiYmF0Y2hDb2x1bW5OYW1lXCI+XHJcbiAgICAgICAgPHRoIGNsYXNzPVwicm93LXNlbGVjdFwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBkaXNhYmxlLWV4cG9ydD5cclxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggW21hdFRvb2x0aXBdPVwiJ01VTFRJX0ZVTkNUSU9OQUxfVEFCTEUuU0VMRUNUX0FMTCcgfCB0cmFuc2xhdGVcIiBbZGlzYWJsZWRdPVwiY29uZmlnLmJhdGNoQ29uZmlnIS5jaGVja0JveGVzRGlzYWJsZWRcIiAoY2hhbmdlKT1cInRvZ2dsZUFsbFJvd1NlbGVjdGlvbigpXCJcclxuICAgICAgICAgICAgW2NoZWNrZWRdPVwibWF0U2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgaXNBbGxTZWxlY3RlZCgpXCJcclxuICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwibWF0U2VsZWN0aW9uLmhhc1ZhbHVlKCkgJiYgIWlzQWxsU2VsZWN0ZWQoKVwiPlxyXG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgPC90aD5cclxuICAgICAgICA8dGQgY2xhc3M9XCJyb3ctc2VsZWN0XCIgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiIGRpc2FibGUtZXhwb3J0PlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveCBbbWF0VG9vbHRpcF09XCInTVVMVElfRlVOQ1RJT05BTF9UQUJMRS5TRUxFQ1QnIHwgdHJhbnNsYXRlXCIgKm5nSWY9XCJpc1Jvd0NoZWNrYm94QWx3YXlzVmlzaWJsZSB8fCBob3ZlcmVkUm93ID09PSBlbGVtZW50IHx8IG1hdFNlbGVjdGlvbi5pc1NlbGVjdGVkKGVsZW1lbnQpXCIgW2Rpc2FibGVkXT1cImNvbmZpZy5iYXRjaENvbmZpZyEuY2hlY2tCb3hlc0Rpc2FibGVkXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlRWxlbWVudFNlbGVjdGlvbihlbGVtZW50KVwiIFtjaGVja2VkXT1cIm1hdFNlbGVjdGlvbi5pc1NlbGVjdGVkKGVsZW1lbnQpXCI+XHJcbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5Q29sdW1uc1wiIHN0aWNreT48L3RyPlxyXG4gICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheUNvbHVtbnNcIiAobW91c2VvdmVyKT1cImhvdmVyZWRSb3cgPSByb3dcIiAobW91c2VsZWF2ZSk9XCJob3ZlcmVkUm93ID0gbnVsbFwiIFtjbGFzcy5oaWdobGlnaHRdPVwiaGlnaGxpZ2h0RWxlbWVudChyb3cpXCI+PC90cj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub0RhdGFSb3dBY3RpdmVcIj5cclxuICAgICAgICA8dHIgKm1hdE5vRGF0YVJvdz5cclxuICAgICAgICAgIDwhLS0gYWRkIHJhbmRvbSBudW1iZXIgdG8gbWFrZSBzdXJlIGl0IHRha2VzIGZ1bGwgd2lkdGggLS0+XHJcbiAgICAgICAgICA8dGQgY29sc3Bhbj1cIjk5XCI+XHJcbiAgICAgICAgICAgIDxsaWItc3RhdHVzLWRpc3BsYXkgW2NvbmZpZ109XCJub0RhdGFSb3dDb25maWdcIj48L2xpYi1zdGF0dXMtZGlzcGxheT5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L3RhYmxlPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|