@onemrvapublic/design-system 18.3.0-develop.1 → 18.3.0-develop.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/_index.scss +0 -1
- package/_utils.scss +3 -3
- package/fesm2022/onemrvapublic-design-system-core.mjs +7 -7
- package/fesm2022/onemrvapublic-design-system-core.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-flag-icon.mjs +3 -3
- package/fesm2022/onemrvapublic-design-system-flag-icon.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-layout.mjs +188 -97
- package/fesm2022/onemrvapublic-design-system-layout.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-avatar.mjs +11 -11
- package/fesm2022/onemrvapublic-design-system-mat-avatar.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-breadcrumb.mjs +27 -18
- package/fesm2022/onemrvapublic-design-system-mat-breadcrumb.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-carousel.mjs +6 -6
- package/fesm2022/onemrvapublic-design-system-mat-carousel.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-copy-to-clipboard.mjs +3 -3
- package/fesm2022/onemrvapublic-design-system-mat-copy-to-clipboard.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-datepicker-header.mjs +3 -3
- package/fesm2022/onemrvapublic-design-system-mat-datepicker-header.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-empty-row.mjs +3 -3
- package/fesm2022/onemrvapublic-design-system-mat-empty-row.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-file-upload.mjs +107 -86
- package/fesm2022/onemrvapublic-design-system-mat-file-upload.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-input-birthplace.mjs +6 -6
- package/fesm2022/onemrvapublic-design-system-mat-input-birthplace.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-input-country.mjs +3 -3
- package/fesm2022/onemrvapublic-design-system-mat-input-country.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-input-enterprise-number.mjs +3 -3
- package/fesm2022/onemrvapublic-design-system-mat-input-enterprise-number.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-input-iban.mjs +4 -4
- package/fesm2022/onemrvapublic-design-system-mat-input-iban.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-input-phone.mjs +6 -6
- package/fesm2022/onemrvapublic-design-system-mat-input-phone.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-message-box.mjs +10 -13
- package/fesm2022/onemrvapublic-design-system-mat-message-box.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-multi-select.mjs +31 -51
- package/fesm2022/onemrvapublic-design-system-mat-multi-select.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-notification.mjs +3 -3
- package/fesm2022/onemrvapublic-design-system-mat-notification.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-paginator.mjs +24 -35
- package/fesm2022/onemrvapublic-design-system-mat-paginator.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-panel.mjs +28 -29
- package/fesm2022/onemrvapublic-design-system-mat-panel.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-pop-over.mjs +20 -20
- package/fesm2022/onemrvapublic-design-system-mat-pop-over.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-progress-bar.mjs +3 -3
- package/fesm2022/onemrvapublic-design-system-mat-progress-bar.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-select-search.mjs +48 -149
- package/fesm2022/onemrvapublic-design-system-mat-select-search.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-selectable-box.mjs +21 -53
- package/fesm2022/onemrvapublic-design-system-mat-selectable-box.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-side-menu.mjs +14 -17
- package/fesm2022/onemrvapublic-design-system-mat-side-menu.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-skeleton.mjs +11 -12
- package/fesm2022/onemrvapublic-design-system-mat-skeleton.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-spinner.mjs +12 -13
- package/fesm2022/onemrvapublic-design-system-mat-spinner.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-stepper.mjs +16 -41
- package/fesm2022/onemrvapublic-design-system-mat-stepper.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-sticker.mjs +11 -11
- package/fesm2022/onemrvapublic-design-system-mat-sticker.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-table-of-content.mjs +9 -9
- package/fesm2022/onemrvapublic-design-system-mat-table-of-content.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-task-list.mjs +26 -41
- package/fesm2022/onemrvapublic-design-system-mat-task-list.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-timepicker.mjs +51 -64
- package/fesm2022/onemrvapublic-design-system-mat-timepicker.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-toast.mjs +12 -12
- package/fesm2022/onemrvapublic-design-system-mat-toast.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-mat-tooltip.mjs +18 -18
- package/fesm2022/onemrvapublic-design-system-mat-tooltip.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-page-error.mjs +6 -6
- package/fesm2022/onemrvapublic-design-system-page-error.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-page-not-found.mjs +32 -26
- package/fesm2022/onemrvapublic-design-system-page-not-found.mjs.map +1 -1
- package/fesm2022/onemrvapublic-design-system-shared.mjs +70 -62
- package/fesm2022/onemrvapublic-design-system-shared.mjs.map +1 -1
- package/layout/index.d.ts +5 -5
- package/layout/src/components/layout/_layout-mixin.component.scss +5 -5
- package/layout/src/components/layout/layout.component.d.ts +1 -1
- package/layout/src/components/layout/layout.component.scss +7 -0
- package/layout/src/components/layout-after-nav/layout-after-nav.component.d.ts +1 -1
- package/layout/src/components/layout-content/layout-content.component.d.ts +1 -1
- package/layout/src/components/layout-footer/layout-footer.component.d.ts +1 -1
- package/layout/src/components/layout-login-menu/layout-login-menu.component.d.ts +1 -1
- package/layout/src/components/layout-route/layout-route.component.d.ts +1 -1
- package/layout/src/components/layout-sidenav/layout-sidenav.component.d.ts +1 -1
- package/layout/src/components/layout-sidenav-title/layout-sidenav-title.component.d.ts +1 -1
- package/layout/src/components/layout-subroute/layout-subroute.component.d.ts +1 -1
- package/layout/src/components/layout-title/layout-title.component.d.ts +1 -1
- package/layout/src/decorators/coerce-boolean-input.decorator.d.ts +1 -0
- package/layout/src/decorators/index.d.ts +2 -0
- package/layout/src/decorators/observable-content.decorator.d.ts +1 -0
- package/layout/src/directives/drawer-host.directive.d.ts +1 -1
- package/layout/src/directives/index.d.ts +2 -0
- package/layout/src/{striphtml.pipe.d.ts → directives/striphtml.pipe.d.ts} +1 -1
- package/layout/src/enums/index.d.ts +1 -0
- package/layout/src/layout.module.d.ts +3 -3
- package/layout/src/models/index.d.ts +2 -0
- package/layout/src/services/index.d.ts +1 -0
- package/mat-avatar/src/onemrva-mat-avatar.component.d.ts +1 -1
- package/mat-avatar/src/onemrva-mat-avatar.module.d.ts +1 -3
- package/mat-breadcrumb/src/onemrva-mat-breadcrumb.component.d.ts +1 -1
- package/mat-breadcrumb/src/onemrva-mat-breadcrumb.module.d.ts +5 -5
- package/mat-datepicker-header/src/_onemrva-mat-datepicker-header.component.scss +1 -1
- package/mat-file-upload/index.d.ts +1 -0
- package/mat-file-upload/src/components/onemrva-mat-file-panel/onemrva-file-panel.component.d.ts +1 -1
- package/mat-file-upload/src/components/onemrva-mat-file-panel/onemrva-file-panel.component.scss +3 -3
- package/mat-file-upload/src/components/onemrva-mat-file-upload/onemrva-mat-file-upload.component.d.ts +1 -1
- package/mat-file-upload/src/components/onemrva-mat-file-upload/onemrva-mat-file-upload.component.scss +2 -1
- package/mat-file-upload/src/directives/dnd.directive.d.ts +1 -1
- package/mat-file-upload/src/onemrva-mat-file-upload.module.d.ts +1 -1
- package/mat-message-box/src/onemrva-mat-message-box.component.d.ts +1 -1
- package/mat-message-box/src/onemrva-mat-message-box.module.d.ts +1 -4
- package/mat-multi-select/src/onemrva-mat-multi-select.component.d.ts +1 -1
- package/mat-multi-select/src/onemrva-mat-multi-select.module.d.ts +1 -9
- package/mat-paginator/src/onemrva-mat-paginator.component.d.ts +1 -1
- package/mat-paginator/src/onemrva-mat-paginator.module.d.ts +1 -6
- package/mat-panel/src/onemrva-mat-panel-content.component.d.ts +1 -1
- package/mat-panel/src/onemrva-mat-panel-icon.component.d.ts +1 -1
- package/mat-panel/src/onemrva-mat-panel-title-action.component.d.ts +1 -1
- package/mat-panel/src/onemrva-mat-panel-title.component.d.ts +1 -1
- package/mat-panel/src/onemrva-mat-panel.component.d.ts +1 -1
- package/mat-panel/src/onemrva-mat-panel.module.d.ts +1 -2
- package/mat-pop-over/src/onemrva-mat-pop-over-content.component.d.ts +1 -1
- package/mat-pop-over/src/onemrva-mat-pop-over-trigger.component.d.ts +1 -1
- package/mat-pop-over/src/onemrva-mat-pop-over.component.d.ts +1 -1
- package/mat-pop-over/src/onemrva-mat-pop-over.module.d.ts +1 -3
- package/mat-select-search/src/mat-select-no-entries-found.directive.d.ts +1 -1
- package/mat-select-search/src/mat-select-search-clear.directive.d.ts +1 -1
- package/mat-select-search/src/mat-select-search.component.d.ts +1 -79
- package/mat-select-search/src/mat-select-search.module.d.ts +1 -12
- package/mat-selectable-box/src/onemrva-mat-selectable-box.component.d.ts +1 -1
- package/mat-selectable-box/src/onemrva-mat-selectable-box.module.d.ts +1 -11
- package/mat-side-menu/src/onemrva-mat-side-menu.component.d.ts +1 -1
- package/mat-side-menu/src/onemrva-mat-side-menu.module.d.ts +1 -5
- package/mat-skeleton/src/onemrva-mat-skeleton.component.d.ts +1 -1
- package/mat-skeleton/src/onemrva-mat-skeleton.module.d.ts +1 -2
- package/mat-spinner/src/onemrva-mat-spinner.component.d.ts +1 -1
- package/mat-spinner/src/onemrva-mat-spinner.module.d.ts +1 -1
- package/mat-stepper/src/onemrva-mat-stepper.component.d.ts +1 -1
- package/mat-stepper/src/onemrva-mat-stepper.module.d.ts +2 -7
- package/mat-stepper/src/onemrva-mat-stepper.scss +1 -1
- package/mat-sticker/src/onemrva-mat-sticker.component.d.ts +1 -1
- package/mat-sticker/src/onemrva-mat-sticker.module.d.ts +1 -2
- package/mat-task-list/src/onemrva-mat-task-content.component.d.ts +1 -1
- package/mat-task-list/src/onemrva-mat-task-list.component.d.ts +1 -1
- package/mat-task-list/src/onemrva-mat-task-list.module.d.ts +1 -5
- package/mat-task-list/src/onemrva-mat-task-title.component.d.ts +1 -1
- package/mat-task-list/src/onemrva-mat-task.component.d.ts +1 -1
- package/mat-timepicker/src/clock/clock.component.d.ts +1 -1
- package/mat-timepicker/src/onemrva-mat-timepicker.component.d.ts +1 -1
- package/mat-timepicker/src/onemrva-mat-timepicker.module.d.ts +1 -7
- package/mat-timepicker/src/timepicker-dialog/timepicker-dialog.component.d.ts +1 -1
- package/mat-timepicker/src/timepicker-toggle/timepicker-toggle.component.d.ts +2 -2
- package/mat-timepicker/src/timepicker.directive.d.ts +1 -1
- package/mat-toast/src/onemrva-mat-toast.component.d.ts +1 -1
- package/mat-toast/src/onemrva-mat-toast.module.d.ts +2 -3
- package/mat-tooltip/src/onemrva-mat-tooltip.component.d.ts +1 -1
- package/mat-tooltip/src/onemrva-mat-tooltip.directive.d.ts +1 -1
- package/mat-tooltip/src/onemrva-mat-tooltip.module.d.ts +1 -2
- package/package.json +1 -85
- package/page-not-found/src/page-not-found-action.component.d.ts +1 -1
- package/page-not-found/src/page-not-found-extra.component.d.ts +1 -1
- package/page-not-found/src/page-not-found-invader.component.d.ts +1 -1
- package/page-not-found/src/page-not-found-mixin.component.scss +1 -1
- package/page-not-found/src/page-not-found.component.d.ts +1 -1
- package/page-not-found/src/page-not-found.module.d.ts +1 -3
- package/shared/src/lib/directives/clipboard.directive.d.ts +1 -1
- package/shared/src/lib/directives/color.directive.d.ts +1 -1
- package/shared/src/lib/directives/digit-only.directive.d.ts +1 -1
- package/shared/src/lib/directives/iconRight.directive.d.ts +1 -1
- package/shared/src/lib/directives/if-width-is.directive.d.ts +1 -1
- package/shared/src/lib/directives/mask.directive.d.ts +1 -1
- package/shared/src/lib/directives/mat-row-clickable.directive.d.ts +1 -1
- package/shared/src/lib/shared.module.d.ts +1 -2
- package/esm2022/core/index.mjs +0 -4
- package/esm2022/core/onemrvapublic-design-system-core.mjs +0 -5
- package/esm2022/core/src/lib/core.module.mjs +0 -39
- package/esm2022/core/src/lib/services/index.mjs +0 -3
- package/esm2022/core/src/lib/services/onemrva-error-handler.service.mjs +0 -26
- package/esm2022/core/src/lib/services/onemrva-missing-translation.service.mjs +0 -6
- package/esm2022/flag-icon/index.mjs +0 -2
- package/esm2022/flag-icon/onemrvapublic-design-system-flag-icon.mjs +0 -5
- package/esm2022/flag-icon/src/flag-icon.component.mjs +0 -41
- package/esm2022/layout/index.mjs +0 -8
- package/esm2022/layout/onemrvapublic-design-system-layout.mjs +0 -5
- package/esm2022/layout/src/components/index.mjs +0 -36
- package/esm2022/layout/src/components/layout/layout.component.mjs +0 -177
- package/esm2022/layout/src/components/layout-after-nav/layout-after-nav.component.mjs +0 -25
- package/esm2022/layout/src/components/layout-content/layout-content.component.mjs +0 -25
- package/esm2022/layout/src/components/layout-drawer-actions/layout-drawer-actions.component.mjs +0 -16
- package/esm2022/layout/src/components/layout-drawer-content/layout-drawer-content.component.mjs +0 -16
- package/esm2022/layout/src/components/layout-drawer-title/layout-drawer-title.component.mjs +0 -20
- package/esm2022/layout/src/components/layout-footer/layout-footer.component.mjs +0 -17
- package/esm2022/layout/src/components/layout-login-menu/layout-login-menu.component.mjs +0 -25
- package/esm2022/layout/src/components/layout-route/layout-route.component.mjs +0 -65
- package/esm2022/layout/src/components/layout-sidenav/layout-sidenav.component.mjs +0 -83
- package/esm2022/layout/src/components/layout-sidenav-title/layout-sidenav-title.component.mjs +0 -17
- package/esm2022/layout/src/components/layout-subroute/layout-subroute.component.mjs +0 -55
- package/esm2022/layout/src/components/layout-title/layout-title.component.mjs +0 -25
- package/esm2022/layout/src/directives/drawer-host.directive.mjs +0 -41
- package/esm2022/layout/src/enums/environment.enum.mjs +0 -8
- package/esm2022/layout/src/layout.module.mjs +0 -95
- package/esm2022/layout/src/models/onem-language.model.mjs +0 -2
- package/esm2022/layout/src/models/onemrva-profile.model.mjs +0 -46
- package/esm2022/layout/src/services/drawer.service.mjs +0 -31
- package/esm2022/layout/src/striphtml.pipe.mjs +0 -16
- package/esm2022/mat-avatar/index.mjs +0 -3
- package/esm2022/mat-avatar/onemrvapublic-design-system-mat-avatar.mjs +0 -5
- package/esm2022/mat-avatar/src/onemrva-mat-avatar.component.mjs +0 -440
- package/esm2022/mat-avatar/src/onemrva-mat-avatar.module.mjs +0 -19
- package/esm2022/mat-badge/index.mjs +0 -6
- package/esm2022/mat-badge/onemrvapublic-design-system-mat-badge.mjs +0 -5
- package/esm2022/mat-badge/src/onemrva-mat-badge.component.mjs +0 -250
- package/esm2022/mat-badge/src/onemrva-mat-badge.module.mjs +0 -16
- package/esm2022/mat-breadcrumb/index.mjs +0 -7
- package/esm2022/mat-breadcrumb/onemrvapublic-design-system-mat-breadcrumb.mjs +0 -5
- package/esm2022/mat-breadcrumb/src/onemrva-mat-breadcrumb.component.mjs +0 -19
- package/esm2022/mat-breadcrumb/src/onemrva-mat-breadcrumb.model.mjs +0 -2
- package/esm2022/mat-breadcrumb/src/onemrva-mat-breadcrumb.module.mjs +0 -20
- package/esm2022/mat-breadcrumb/src/onemrva-mat-breadcrumb.service.mjs +0 -59
- package/esm2022/mat-carousel/index.mjs +0 -3
- package/esm2022/mat-carousel/onemrvapublic-design-system-mat-carousel.mjs +0 -5
- package/esm2022/mat-carousel/src/mat-carousel-item/onemrva-mat-carousel-item.component.mjs +0 -23
- package/esm2022/mat-carousel/src/onemrva-mat-carousel.component.mjs +0 -175
- package/esm2022/mat-copy-to-clipboard/index.mjs +0 -2
- package/esm2022/mat-copy-to-clipboard/onemrvapublic-design-system-mat-copy-to-clipboard.mjs +0 -5
- package/esm2022/mat-copy-to-clipboard/src/components/copy-to-clipboard.component.mjs +0 -85
- package/esm2022/mat-datepicker-header/index.mjs +0 -5
- package/esm2022/mat-datepicker-header/onemrvapublic-design-system-mat-datepicker-header.mjs +0 -5
- package/esm2022/mat-datepicker-header/src/onemrva-mat-datepicker-header.component.mjs +0 -203
- package/esm2022/mat-empty-row/index.mjs +0 -2
- package/esm2022/mat-empty-row/onemrvapublic-design-system-mat-empty-row.mjs +0 -5
- package/esm2022/mat-empty-row/src/onemrva-mat-empty-row.component.mjs +0 -35
- package/esm2022/mat-file-upload/index.mjs +0 -11
- package/esm2022/mat-file-upload/onemrvapublic-design-system-mat-file-upload.mjs +0 -5
- package/esm2022/mat-file-upload/src/components/index.mjs +0 -9
- package/esm2022/mat-file-upload/src/components/onemrva-mat-file-panel/onemrva-file-panel.component.mjs +0 -88
- package/esm2022/mat-file-upload/src/components/onemrva-mat-file-upload/onemrva-mat-file-upload.component.mjs +0 -195
- package/esm2022/mat-file-upload/src/directives/dnd.directive.mjs +0 -53
- package/esm2022/mat-file-upload/src/models/action-config.model.mjs +0 -2
- package/esm2022/mat-file-upload/src/models/progress-file.model.mjs +0 -49
- package/esm2022/mat-file-upload/src/onemrva-mat-file-upload-itf.store.mjs +0 -2
- package/esm2022/mat-file-upload/src/onemrva-mat-file-upload.module.mjs +0 -51
- package/esm2022/mat-file-upload/src/onemrva-mat-file-upload.service.mjs +0 -49
- package/esm2022/mat-file-upload/src/onemrva-mat-file-upload.store.mjs +0 -320
- package/esm2022/mat-input-birthplace/index.mjs +0 -5
- package/esm2022/mat-input-birthplace/onemrvapublic-design-system-mat-input-birthplace.mjs +0 -5
- package/esm2022/mat-input-birthplace/src/country-item.component.mjs +0 -31
- package/esm2022/mat-input-birthplace/src/onemrva-mat-input-birthplace.component.mjs +0 -120
- package/esm2022/mat-input-country/index.mjs +0 -5
- package/esm2022/mat-input-country/onemrvapublic-design-system-mat-input-country.mjs +0 -5
- package/esm2022/mat-input-country/src/onemrva-mat-input-country.component.mjs +0 -90
- package/esm2022/mat-input-enterprise-number/index.mjs +0 -5
- package/esm2022/mat-input-enterprise-number/onemrvapublic-design-system-mat-input-enterprise-number.mjs +0 -5
- package/esm2022/mat-input-enterprise-number/src/onemrva-mat-input-enterprise-number.component.mjs +0 -180
- package/esm2022/mat-input-iban/index.mjs +0 -5
- package/esm2022/mat-input-iban/onemrvapublic-design-system-mat-input-iban.mjs +0 -5
- package/esm2022/mat-input-iban/src/onemrva-mat-input-iban.component.mjs +0 -295
- package/esm2022/mat-input-phone/index.mjs +0 -6
- package/esm2022/mat-input-phone/onemrvapublic-design-system-mat-input-phone.mjs +0 -5
- package/esm2022/mat-input-phone/src/onemrva-mat-input-phone.component.mjs +0 -234
- package/esm2022/mat-input-phone/src/phone-number.directive.mjs +0 -51
- package/esm2022/mat-message-box/index.mjs +0 -3
- package/esm2022/mat-message-box/onemrvapublic-design-system-mat-message-box.mjs +0 -5
- package/esm2022/mat-message-box/src/onemrva-mat-message-box.component.mjs +0 -175
- package/esm2022/mat-message-box/src/onemrva-mat-message-box.module.mjs +0 -20
- package/esm2022/mat-multi-select/index.mjs +0 -3
- package/esm2022/mat-multi-select/onemrvapublic-design-system-mat-multi-select.mjs +0 -5
- package/esm2022/mat-multi-select/src/onemrva-mat-multi-select.component.mjs +0 -200
- package/esm2022/mat-multi-select/src/onemrva-mat-multi-select.module.mjs +0 -51
- package/esm2022/mat-notification/index.mjs +0 -2
- package/esm2022/mat-notification/onemrvapublic-design-system-mat-notification.mjs +0 -5
- package/esm2022/mat-notification/src/onemrva-mat-notification.component.mjs +0 -165
- package/esm2022/mat-paginator/index.mjs +0 -6
- package/esm2022/mat-paginator/onemrvapublic-design-system-mat-paginator.mjs +0 -5
- package/esm2022/mat-paginator/src/onemrva-mat-paginator.component.mjs +0 -217
- package/esm2022/mat-paginator/src/onemrva-mat-paginator.module.mjs +0 -36
- package/esm2022/mat-panel/index.mjs +0 -7
- package/esm2022/mat-panel/onemrvapublic-design-system-mat-panel.mjs +0 -5
- package/esm2022/mat-panel/src/onemrva-mat-panel-content.component.mjs +0 -17
- package/esm2022/mat-panel/src/onemrva-mat-panel-icon.component.mjs +0 -17
- package/esm2022/mat-panel/src/onemrva-mat-panel-title-action.component.mjs +0 -17
- package/esm2022/mat-panel/src/onemrva-mat-panel-title.component.mjs +0 -27
- package/esm2022/mat-panel/src/onemrva-mat-panel.component.mjs +0 -132
- package/esm2022/mat-panel/src/onemrva-mat-panel.module.mjs +0 -42
- package/esm2022/mat-pop-over/index.mjs +0 -5
- package/esm2022/mat-pop-over/onemrvapublic-design-system-mat-pop-over.mjs +0 -5
- package/esm2022/mat-pop-over/src/onemrva-mat-pop-over-content.component.mjs +0 -23
- package/esm2022/mat-pop-over/src/onemrva-mat-pop-over-trigger.component.mjs +0 -23
- package/esm2022/mat-pop-over/src/onemrva-mat-pop-over.component.mjs +0 -46
- package/esm2022/mat-pop-over/src/onemrva-mat-pop-over.module.mjs +0 -30
- package/esm2022/mat-progress-bar/index.mjs +0 -2
- package/esm2022/mat-progress-bar/onemrvapublic-design-system-mat-progress-bar.mjs +0 -5
- package/esm2022/mat-progress-bar/src/onemrva-mat-progress-bar.component.mjs +0 -29
- package/esm2022/mat-select-search/index.mjs +0 -4
- package/esm2022/mat-select-search/onemrvapublic-design-system-mat-select-search.mjs +0 -5
- package/esm2022/mat-select-search/src/default-options.mjs +0 -35
- package/esm2022/mat-select-search/src/mat-select-no-entries-found.directive.mjs +0 -22
- package/esm2022/mat-select-search/src/mat-select-search-clear.directive.mjs +0 -20
- package/esm2022/mat-select-search/src/mat-select-search.component.mjs +0 -589
- package/esm2022/mat-select-search/src/mat-select-search.module.mjs +0 -79
- package/esm2022/mat-selectable-box/index.mjs +0 -6
- package/esm2022/mat-selectable-box/onemrvapublic-design-system-mat-selectable-box.mjs +0 -5
- package/esm2022/mat-selectable-box/src/onemrva-mat-selectable-box.component.mjs +0 -56
- package/esm2022/mat-selectable-box/src/onemrva-mat-selectable-box.module.mjs +0 -56
- package/esm2022/mat-side-menu/index.mjs +0 -6
- package/esm2022/mat-side-menu/onemrvapublic-design-system-mat-side-menu.mjs +0 -5
- package/esm2022/mat-side-menu/src/onemrva-mat-side-menu.component.mjs +0 -48
- package/esm2022/mat-side-menu/src/onemrva-mat-side-menu.module.mjs +0 -21
- package/esm2022/mat-skeleton/index.mjs +0 -4
- package/esm2022/mat-skeleton/onemrvapublic-design-system-mat-skeleton.mjs +0 -5
- package/esm2022/mat-skeleton/src/onemrva-mat-skeleton-enums.mjs +0 -20
- package/esm2022/mat-skeleton/src/onemrva-mat-skeleton.component.mjs +0 -202
- package/esm2022/mat-skeleton/src/onemrva-mat-skeleton.module.mjs +0 -18
- package/esm2022/mat-spinner/index.mjs +0 -7
- package/esm2022/mat-spinner/onemrvapublic-design-system-mat-spinner.mjs +0 -5
- package/esm2022/mat-spinner/src/onemrva-mat-loading.directive.mjs +0 -33
- package/esm2022/mat-spinner/src/onemrva-mat-spinner.component.mjs +0 -73
- package/esm2022/mat-spinner/src/onemrva-mat-spinner.module.mjs +0 -18
- package/esm2022/mat-stepper/index.mjs +0 -6
- package/esm2022/mat-stepper/onemrvapublic-design-system-mat-stepper.mjs +0 -5
- package/esm2022/mat-stepper/src/onemrva-mat-stepper.component.mjs +0 -74
- package/esm2022/mat-stepper/src/onemrva-mat-stepper.module.mjs +0 -44
- package/esm2022/mat-stepper/src/onemrva-stepper-animations.mjs +0 -28
- package/esm2022/mat-sticker/index.mjs +0 -6
- package/esm2022/mat-sticker/onemrvapublic-design-system-mat-sticker.mjs +0 -5
- package/esm2022/mat-sticker/src/onemrva-mat-sticker.component.mjs +0 -69
- package/esm2022/mat-sticker/src/onemrva-mat-sticker.module.mjs +0 -18
- package/esm2022/mat-table-of-content/index.mjs +0 -8
- package/esm2022/mat-table-of-content/onemrvapublic-design-system-mat-table-of-content.mjs +0 -5
- package/esm2022/mat-table-of-content/src/onemrva-mat-table-of-content.component.mjs +0 -104
- package/esm2022/mat-table-of-content/src/onemrva-mat-table-of-content.directive.mjs +0 -60
- package/esm2022/mat-table-of-content/src/onemrva-mat-table-of-content.service.mjs +0 -46
- package/esm2022/mat-table-of-content/src/onemrva-mat-toc-anchor.model.mjs +0 -11
- package/esm2022/mat-task-list/index.mjs +0 -6
- package/esm2022/mat-task-list/onemrvapublic-design-system-mat-task-list.mjs +0 -5
- package/esm2022/mat-task-list/src/onemrva-mat-task-content.component.mjs +0 -17
- package/esm2022/mat-task-list/src/onemrva-mat-task-list.component.mjs +0 -36
- package/esm2022/mat-task-list/src/onemrva-mat-task-list.module.mjs +0 -51
- package/esm2022/mat-task-list/src/onemrva-mat-task-title.component.mjs +0 -23
- package/esm2022/mat-task-list/src/onemrva-mat-task.component.mjs +0 -140
- package/esm2022/mat-timepicker/index.mjs +0 -7
- package/esm2022/mat-timepicker/onemrvapublic-design-system-mat-timepicker.mjs +0 -5
- package/esm2022/mat-timepicker/src/clock/clock.component.mjs +0 -232
- package/esm2022/mat-timepicker/src/interfaces-and-types.mjs +0 -2
- package/esm2022/mat-timepicker/src/onemrva-mat-timepicker.component.mjs +0 -279
- package/esm2022/mat-timepicker/src/onemrva-mat-timepicker.module.mjs +0 -62
- package/esm2022/mat-timepicker/src/timepicker-dialog/timepicker-dialog.component.mjs +0 -129
- package/esm2022/mat-timepicker/src/timepicker-toggle/timepicker-toggle.component.mjs +0 -115
- package/esm2022/mat-timepicker/src/timepicker.directive.mjs +0 -512
- package/esm2022/mat-timepicker/src/util.mjs +0 -83
- package/esm2022/mat-toast/index.mjs +0 -6
- package/esm2022/mat-toast/onemrvapublic-design-system-mat-toast.mjs +0 -5
- package/esm2022/mat-toast/src/onemrva-mat-toast.component.mjs +0 -52
- package/esm2022/mat-toast/src/onemrva-mat-toast.module.mjs +0 -19
- package/esm2022/mat-tooltip/index.mjs +0 -5
- package/esm2022/mat-tooltip/onemrvapublic-design-system-mat-tooltip.mjs +0 -5
- package/esm2022/mat-tooltip/src/onemrva-mat-tooltip.component.mjs +0 -36
- package/esm2022/mat-tooltip/src/onemrva-mat-tooltip.directive.mjs +0 -111
- package/esm2022/mat-tooltip/src/onemrva-mat-tooltip.module.mjs +0 -19
- package/esm2022/onemrvapublic-design-system.mjs +0 -5
- package/esm2022/page-error/index.mjs +0 -3
- package/esm2022/page-error/onemrvapublic-design-system-page-error.mjs +0 -5
- package/esm2022/page-error/src/page-error-action.component.mjs +0 -18
- package/esm2022/page-error/src/page-error.component.mjs +0 -61
- package/esm2022/page-not-found/index.mjs +0 -6
- package/esm2022/page-not-found/onemrvapublic-design-system-page-not-found.mjs +0 -5
- package/esm2022/page-not-found/src/page-not-found-action.component.mjs +0 -17
- package/esm2022/page-not-found/src/page-not-found-extra.component.mjs +0 -17
- package/esm2022/page-not-found/src/page-not-found-invader.component.mjs +0 -94
- package/esm2022/page-not-found/src/page-not-found.component.mjs +0 -54
- package/esm2022/page-not-found/src/page-not-found.module.mjs +0 -38
- package/esm2022/public-api.mjs +0 -5
- package/esm2022/shared/index.mjs +0 -19
- package/esm2022/shared/onemrvapublic-design-system-shared.mjs +0 -5
- package/esm2022/shared/src/lib/adapters/index.mjs +0 -3
- package/esm2022/shared/src/lib/adapters/luxon.date.adapter.mjs +0 -251
- package/esm2022/shared/src/lib/adapters/luxon.utils.mjs +0 -23
- package/esm2022/shared/src/lib/adapters/native.date.adapter.mjs +0 -66
- package/esm2022/shared/src/lib/components/clipboard-icon/clipboard-icon.component.mjs +0 -20
- package/esm2022/shared/src/lib/components/index.mjs +0 -2
- package/esm2022/shared/src/lib/constants/CDNUrlModeOptions.mjs +0 -6
- package/esm2022/shared/src/lib/constants/cdn.mjs +0 -3
- package/esm2022/shared/src/lib/constants/constants.mjs +0 -7
- package/esm2022/shared/src/lib/constants/date.format.mjs +0 -95
- package/esm2022/shared/src/lib/constants/index.mjs +0 -5
- package/esm2022/shared/src/lib/containers/WebComponentOverlayContainer.mjs +0 -84
- package/esm2022/shared/src/lib/containers/index.mjs +0 -2
- package/esm2022/shared/src/lib/decorators/HttpCacheDecorator.mjs +0 -123
- package/esm2022/shared/src/lib/decorators/index.mjs +0 -2
- package/esm2022/shared/src/lib/directives/clipboard.directive.mjs +0 -39
- package/esm2022/shared/src/lib/directives/color.directive.mjs +0 -64
- package/esm2022/shared/src/lib/directives/digit-only.directive.mjs +0 -52
- package/esm2022/shared/src/lib/directives/iconRight.directive.mjs +0 -22
- package/esm2022/shared/src/lib/directives/if-width-is.directive.mjs +0 -34
- package/esm2022/shared/src/lib/directives/index.mjs +0 -24
- package/esm2022/shared/src/lib/directives/mask.directive.mjs +0 -198
- package/esm2022/shared/src/lib/directives/mat-row-clickable.directive.mjs +0 -74
- package/esm2022/shared/src/lib/helpers/index.mjs +0 -2
- package/esm2022/shared/src/lib/helpers/translation-helper.mjs +0 -58
- package/esm2022/shared/src/lib/interfaces/OnemRvaCommonCountry.interface.mjs +0 -2
- package/esm2022/shared/src/lib/interfaces/index.mjs +0 -2
- package/esm2022/shared/src/lib/loaders/index.mjs +0 -3
- package/esm2022/shared/src/lib/loaders/onemrva-translate-cdn-loader.mjs +0 -15
- package/esm2022/shared/src/lib/loaders/onemrva-translate-http-loader.mjs +0 -30
- package/esm2022/shared/src/lib/pipes/index.mjs +0 -3
- package/esm2022/shared/src/lib/pipes/onemrva-bce.pipe.mjs +0 -20
- package/esm2022/shared/src/lib/pipes/onemrva-niss.pipe.mjs +0 -20
- package/esm2022/shared/src/lib/providers/index.mjs +0 -5
- package/esm2022/shared/src/lib/providers/onemrva.date.luxon.provider.mjs +0 -16
- package/esm2022/shared/src/lib/providers/onemrva.date.luxon.year.month.provider.mjs +0 -16
- package/esm2022/shared/src/lib/providers/onemrva.date.native.provider.mjs +0 -16
- package/esm2022/shared/src/lib/providers/onemrva.date.native.year.month.provider.mjs +0 -16
- package/esm2022/shared/src/lib/services/cache.service.mjs +0 -31
- package/esm2022/shared/src/lib/services/cdn.service.mjs +0 -105
- package/esm2022/shared/src/lib/services/country-cdn.service.mjs +0 -75
- package/esm2022/shared/src/lib/services/country-lookup.service.mjs +0 -43
- package/esm2022/shared/src/lib/services/index.mjs +0 -5
- package/esm2022/shared/src/lib/services/mime-cdn.service.mjs +0 -45
- package/esm2022/shared/src/lib/shared.module.mjs +0 -25
- package/esm2022/shared/src/lib/tokens/index.mjs +0 -2
- package/esm2022/shared/src/lib/tokens/lookup.token.mjs +0 -7
- package/esm2022/shared/src/lib/validators/bank-account.validator.utils.mjs +0 -56
- package/esm2022/shared/src/lib/validators/index.mjs +0 -3
- package/esm2022/shared/src/lib/validators/onemrva-validators.mjs +0 -75
- package/esm2022/utils/index.mjs +0 -3
- package/esm2022/utils/onemrvapublic-design-system-utils.mjs +0 -5
- package/esm2022/utils/src/enum.utils.mjs +0 -7
- package/esm2022/utils/src/enums/color.enum.mjs +0 -12
- package/esm2022/utils/src/enums/index.mjs +0 -3
- package/esm2022/utils/src/enums/size.enum.mjs +0 -9
- package/fesm2022/onemrvapublic-design-system-mat-badge.mjs +0 -274
- package/fesm2022/onemrvapublic-design-system-mat-badge.mjs.map +0 -1
- package/mat-badge/index.d.ts +0 -2
- package/mat-badge/src/onemrva-mat-badge.component.d.ts +0 -89
- package/mat-badge/src/onemrva-mat-badge.component.scss +0 -157
- package/mat-badge/src/onemrva-mat-badge.module.d.ts +0 -7
|
@@ -1,589 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2018 Bithost GmbH All Rights Reserved.
|
|
3
|
-
*
|
|
4
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
5
|
-
* found in the LICENSE file at https://angular.io/license
|
|
6
|
-
*/
|
|
7
|
-
import { A, DOWN_ARROW, END, ENTER, ESCAPE, HOME, NINE, SPACE, UP_ARROW, Z, ZERO, } from '@angular/cdk/keycodes';
|
|
8
|
-
import { ChangeDetectionStrategy, Component, ContentChild, ElementRef, EventEmitter, forwardRef, Inject, Input, Optional, Output, QueryList, ViewChild, } from '@angular/core';
|
|
9
|
-
import { FormControl, NG_VALUE_ACCESSOR, } from '@angular/forms';
|
|
10
|
-
import { MatOption } from '@angular/material/core';
|
|
11
|
-
import { MatFormField } from '@angular/material/form-field';
|
|
12
|
-
import { MatSelect } from '@angular/material/select';
|
|
13
|
-
import { BehaviorSubject, combineLatest, of, Subject } from 'rxjs';
|
|
14
|
-
import { delay, filter, map, startWith, switchMap, take, takeUntil, tap, } from 'rxjs/operators';
|
|
15
|
-
import { MatSelectSearchClearDirective } from './mat-select-search-clear.directive';
|
|
16
|
-
import { configurableDefaultOptions, MAT_SELECTSEARCH_DEFAULT_OPTIONS, } from './default-options';
|
|
17
|
-
import { MatSelectNoEntriesFoundDirective } from './mat-select-no-entries-found.directive';
|
|
18
|
-
import * as i0 from "@angular/core";
|
|
19
|
-
import * as i1 from "@angular/cdk/scrolling";
|
|
20
|
-
import * as i2 from "@angular/common";
|
|
21
|
-
import * as i3 from "@angular/forms";
|
|
22
|
-
import * as i4 from "@angular/material/button";
|
|
23
|
-
import * as i5 from "@angular/material/checkbox";
|
|
24
|
-
import * as i6 from "@angular/material/icon";
|
|
25
|
-
import * as i7 from "@angular/material/progress-spinner";
|
|
26
|
-
import * as i8 from "@angular/material/tooltip";
|
|
27
|
-
import * as i9 from "@angular/material/divider";
|
|
28
|
-
import * as i10 from "@angular/material/select";
|
|
29
|
-
import * as i11 from "@angular/material/core";
|
|
30
|
-
import * as i12 from "@angular/material/form-field";
|
|
31
|
-
/**
|
|
32
|
-
* Component providing an input field for searching MatSelect options.
|
|
33
|
-
*
|
|
34
|
-
* Example usage:
|
|
35
|
-
*
|
|
36
|
-
* interface Bank {
|
|
37
|
-
* id: string;
|
|
38
|
-
* name: string;
|
|
39
|
-
* }
|
|
40
|
-
*
|
|
41
|
-
* @Component({
|
|
42
|
-
* selector: 'my-app-data-selection',
|
|
43
|
-
* template: `
|
|
44
|
-
* <mat-form-field>
|
|
45
|
-
* <mat-select [formControl]="bankCtrl" placeholder="Bank">
|
|
46
|
-
* <mat-option>
|
|
47
|
-
* <ngx-mat-select-search [formControl]="bankFilterCtrl"></ngx-mat-select-search>
|
|
48
|
-
* </mat-option>
|
|
49
|
-
* <mat-option *ngFor="let bank of filteredBanks | async" [value]="bank.id">
|
|
50
|
-
* {{bank.name}}
|
|
51
|
-
* </mat-option>
|
|
52
|
-
* </mat-select>
|
|
53
|
-
* </mat-form-field>
|
|
54
|
-
* `
|
|
55
|
-
* })
|
|
56
|
-
* export class DataSelectionComponent implements OnInit, OnDestroy {
|
|
57
|
-
*
|
|
58
|
-
* // control for the selected bank
|
|
59
|
-
* public bankCtrl: FormControl = new FormControl();
|
|
60
|
-
* // control for the MatSelect filter keyword
|
|
61
|
-
* public bankFilterCtrl: FormControl = new FormControl();
|
|
62
|
-
*
|
|
63
|
-
* // list of banks
|
|
64
|
-
* private banks: Bank[] = [{name: 'Bank A', id: 'A'}, {name: 'Bank B', id: 'B'}, {name: 'Bank C', id: 'C'}];
|
|
65
|
-
* // list of banks filtered by search keyword
|
|
66
|
-
* public filteredBanks: ReplaySubject<Bank[]> = new ReplaySubject<Bank[]>(1);
|
|
67
|
-
*
|
|
68
|
-
* // Subject that emits when the component has been destroyed.
|
|
69
|
-
* private _onDestroy = new Subject<void>();
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
* ngOnInit() {
|
|
73
|
-
* // load the initial bank list
|
|
74
|
-
* this.filteredBanks.next(this.banks.slice());
|
|
75
|
-
* // listen for search field value changes
|
|
76
|
-
* this.bankFilterCtrl.valueChanges
|
|
77
|
-
* .pipe(takeUntil(this._onDestroy))
|
|
78
|
-
* .subscribe(() => {
|
|
79
|
-
* this.filterBanks();
|
|
80
|
-
* });
|
|
81
|
-
* }
|
|
82
|
-
*
|
|
83
|
-
* ngOnDestroy() {
|
|
84
|
-
* this._onDestroy.next();
|
|
85
|
-
* this._onDestroy.complete();
|
|
86
|
-
* }
|
|
87
|
-
*
|
|
88
|
-
* private filterBanks() {
|
|
89
|
-
* if (!this.banks) {
|
|
90
|
-
* return;
|
|
91
|
-
* }
|
|
92
|
-
*
|
|
93
|
-
* // get the search keyword
|
|
94
|
-
* let search = this.bankFilterCtrl.value;
|
|
95
|
-
* if (!search) {
|
|
96
|
-
* this.filteredBanks.next(this.banks.slice());
|
|
97
|
-
* return;
|
|
98
|
-
* } else {
|
|
99
|
-
* search = search.toLowerCase();
|
|
100
|
-
* }
|
|
101
|
-
*
|
|
102
|
-
* // filter the banks
|
|
103
|
-
* this.filteredBanks.next(
|
|
104
|
-
* this.banks.filter(bank => bank.name.toLowerCase().indexOf(search) > -1)
|
|
105
|
-
* );
|
|
106
|
-
* }
|
|
107
|
-
* }
|
|
108
|
-
*/
|
|
109
|
-
export class MatSelectSearchComponent {
|
|
110
|
-
/** Current search value */
|
|
111
|
-
get value() {
|
|
112
|
-
return this._formControl.value;
|
|
113
|
-
}
|
|
114
|
-
/** Reference to the MatSelect options */
|
|
115
|
-
set _options(_options) {
|
|
116
|
-
this._options$.next(_options);
|
|
117
|
-
}
|
|
118
|
-
get _options() {
|
|
119
|
-
return this._options$.getValue();
|
|
120
|
-
}
|
|
121
|
-
constructor(matSelect, changeDetectorRef, _viewportRuler, matOption, matFormField, defaultOptions) {
|
|
122
|
-
this.matSelect = matSelect;
|
|
123
|
-
this.changeDetectorRef = changeDetectorRef;
|
|
124
|
-
this._viewportRuler = _viewportRuler;
|
|
125
|
-
this.matOption = matOption;
|
|
126
|
-
this.matFormField = matFormField;
|
|
127
|
-
/** Label of the search placeholder */
|
|
128
|
-
this.placeholderLabel = 'Search';
|
|
129
|
-
/** Type of the search input field */
|
|
130
|
-
this.type = 'text';
|
|
131
|
-
/** Font-based icon used for displaying Close-Icon */
|
|
132
|
-
this.closeIcon = 'close';
|
|
133
|
-
/** Svg-based icon used for displaying Close-Icon. If set, closeIcon is overridden */
|
|
134
|
-
this.closeSvgIcon = '';
|
|
135
|
-
/** Label to be shown when no entries are found. Set to null if no message should be shown. */
|
|
136
|
-
this.noEntriesFoundLabel = 'Nothing found';
|
|
137
|
-
/**
|
|
138
|
-
* Whether or not the search field should be cleared after the dropdown menu is closed.
|
|
139
|
-
* Useful for server-side filtering. See [#3](https://github.com/bithost-gmbh/ngx-mat-select-search/issues/3)
|
|
140
|
-
*/
|
|
141
|
-
this.clearSearchInput = true;
|
|
142
|
-
/** Whether to show the search-in-progress indicator */
|
|
143
|
-
this.searching = false;
|
|
144
|
-
/** Disables initial focusing of the input field */
|
|
145
|
-
this.disableInitialFocus = false;
|
|
146
|
-
/** Enable clear input on escape pressed */
|
|
147
|
-
this.enableClearOnEscapePressed = false;
|
|
148
|
-
/**
|
|
149
|
-
* Prevents home / end key being propagated to mat-select,
|
|
150
|
-
* allowing to move the cursor within the search input instead of navigating the options
|
|
151
|
-
*/
|
|
152
|
-
this.preventHomeEndKeyPropagation = false;
|
|
153
|
-
/** Disables scrolling to active options when option list changes. Useful for server-side search */
|
|
154
|
-
this.disableScrollToActiveOnOptionsChanged = false;
|
|
155
|
-
/** Adds 508 screen reader support for search box */
|
|
156
|
-
this.ariaLabel = 'dropdown search';
|
|
157
|
-
/** Whether to show Select All Checkbox (for mat-select[multi=true]) */
|
|
158
|
-
this.showToggleAllCheckbox = false;
|
|
159
|
-
/** select all checkbox checked state */
|
|
160
|
-
this.toggleAllCheckboxChecked = false;
|
|
161
|
-
/** select all checkbox indeterminate state */
|
|
162
|
-
this.toggleAllCheckboxIndeterminate = false;
|
|
163
|
-
/** Display a message in a tooltip on the toggle-all checkbox */
|
|
164
|
-
this.toggleAllCheckboxTooltipMessage = '';
|
|
165
|
-
/** Define the position of the tooltip on the toggle-all checkbox. */
|
|
166
|
-
this.toggleAllCheckboxTooltipPosition = 'below';
|
|
167
|
-
/** Show/Hide the search clear button of the search input */
|
|
168
|
-
this.hideClearSearchButton = false;
|
|
169
|
-
/**
|
|
170
|
-
* Always restore selected options on selectionChange for mode multi (e.g. for lazy loading/infinity scrolling).
|
|
171
|
-
* Defaults to false, so selected options are only restored while filtering is active.
|
|
172
|
-
*/
|
|
173
|
-
this.alwaysRestoreSelectedOptionsMulti = false;
|
|
174
|
-
/** Output emitter to send to parent component with the toggle all boolean */
|
|
175
|
-
this.toggleAll = new EventEmitter();
|
|
176
|
-
this.onTouched = (_) => {
|
|
177
|
-
//
|
|
178
|
-
};
|
|
179
|
-
this._options$ = new BehaviorSubject(new QueryList());
|
|
180
|
-
this.optionsList$ = this._options$.pipe(switchMap(_options => _options
|
|
181
|
-
? _options.changes.pipe(map(options => options.toArray()), startWith(_options.toArray()))
|
|
182
|
-
: of([])));
|
|
183
|
-
this.optionsLength$ = this.optionsList$.pipe(map(options => (options ? options.length : 0)));
|
|
184
|
-
this._formControl = new FormControl('');
|
|
185
|
-
/** whether to show the no entries found message */
|
|
186
|
-
this._showNoEntriesFound$ = combineLatest([
|
|
187
|
-
this._formControl.valueChanges,
|
|
188
|
-
this.optionsLength$,
|
|
189
|
-
]).pipe(map(([_, optionsLength]) => {
|
|
190
|
-
return (this.noEntriesFoundLabel !== '' &&
|
|
191
|
-
optionsLength === this.getOptionsLengthOffset());
|
|
192
|
-
}));
|
|
193
|
-
/** Subject that emits when the component has been destroyed. */
|
|
194
|
-
this._onDestroy = new Subject();
|
|
195
|
-
this.applyDefaultOptions(defaultOptions);
|
|
196
|
-
}
|
|
197
|
-
applyDefaultOptions(defaultOptions) {
|
|
198
|
-
if (!defaultOptions) {
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
for (const key of configurableDefaultOptions) {
|
|
202
|
-
// eslint-disable-next-line
|
|
203
|
-
if (defaultOptions.hasOwnProperty(key)) {
|
|
204
|
-
this[key] = defaultOptions[key];
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
ngOnInit() {
|
|
209
|
-
// set custom mat-option class if the component was placed inside a mat-option
|
|
210
|
-
if (this.matOption) {
|
|
211
|
-
this.matOption.disabled = true;
|
|
212
|
-
this.matOption
|
|
213
|
-
._getHostElement()
|
|
214
|
-
.classList.add('contains-mat-select-search');
|
|
215
|
-
//this.matOption._getHostElement().setAttribute('aria-hidden', 'true'); // this provoke an error
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
console.error('<ngx-mat-select-search> must be placed inside a <mat-option> element');
|
|
219
|
-
}
|
|
220
|
-
// when the select dropdown panel is opened or closed
|
|
221
|
-
this.matSelect.openedChange
|
|
222
|
-
.pipe(delay(1), takeUntil(this._onDestroy))
|
|
223
|
-
.subscribe(opened => {
|
|
224
|
-
if (opened) {
|
|
225
|
-
this.updateInputWidth();
|
|
226
|
-
// focus the search field when opening
|
|
227
|
-
if (!this.disableInitialFocus) {
|
|
228
|
-
this._focus();
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
else {
|
|
232
|
-
// clear it when closing
|
|
233
|
-
if (this.clearSearchInput) {
|
|
234
|
-
this._reset();
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
});
|
|
238
|
-
// set the first item active after the options changed
|
|
239
|
-
this.matSelect.openedChange
|
|
240
|
-
.pipe(take(1), switchMap(_ => {
|
|
241
|
-
this._options = this.matSelect.options;
|
|
242
|
-
// Closure variable for tracking the most recent first option.
|
|
243
|
-
// In order to avoid avoid causing the list to
|
|
244
|
-
// scroll to the top when options are added to the bottom of
|
|
245
|
-
// the list (eg: infinite scroll), we compare only
|
|
246
|
-
// the changes to the first options to determine if we
|
|
247
|
-
// should set the first item as active.
|
|
248
|
-
// This prevents unnecessary scrolling to the top of the list
|
|
249
|
-
// when options are appended, but allows the first item
|
|
250
|
-
// in the list to be set as active by default when there
|
|
251
|
-
// is no active selection
|
|
252
|
-
let previousFirstOption = this._options.toArray()[this.getOptionsLengthOffset()];
|
|
253
|
-
return this._options.changes.pipe(tap(() => {
|
|
254
|
-
// avoid "expression has been changed" error
|
|
255
|
-
setTimeout(() => {
|
|
256
|
-
// Convert the QueryList to an array
|
|
257
|
-
const options = this._options.toArray();
|
|
258
|
-
// The true first item is offset by 1
|
|
259
|
-
const currentFirstOption = options[this.getOptionsLengthOffset()];
|
|
260
|
-
const keyManager = this.matSelect._keyManager;
|
|
261
|
-
if (keyManager && this.matSelect.panelOpen) {
|
|
262
|
-
// set first item active and input width
|
|
263
|
-
// Check to see if the first option in these changes is different from the previous.
|
|
264
|
-
const firstOptionIsChanged = !this.matSelect.compareWith(previousFirstOption, currentFirstOption);
|
|
265
|
-
// CASE: The first option is different now.
|
|
266
|
-
// Indiciates we should set it as active and scroll to the top.
|
|
267
|
-
if (firstOptionIsChanged ||
|
|
268
|
-
!keyManager.activeItem ||
|
|
269
|
-
!options.find(option => this.matSelect.compareWith(option, keyManager.activeItem))) {
|
|
270
|
-
keyManager.setFirstItemActive();
|
|
271
|
-
}
|
|
272
|
-
// wait for panel width changes
|
|
273
|
-
setTimeout(() => {
|
|
274
|
-
this.updateInputWidth();
|
|
275
|
-
});
|
|
276
|
-
}
|
|
277
|
-
// Update our reference
|
|
278
|
-
previousFirstOption = currentFirstOption;
|
|
279
|
-
});
|
|
280
|
-
}));
|
|
281
|
-
}))
|
|
282
|
-
.pipe(takeUntil(this._onDestroy))
|
|
283
|
-
.subscribe();
|
|
284
|
-
// add or remove css class depending on whether to show the no entries found message
|
|
285
|
-
// note: this is hacky
|
|
286
|
-
this._showNoEntriesFound$
|
|
287
|
-
.pipe(takeUntil(this._onDestroy))
|
|
288
|
-
.subscribe(showNoEntriesFound => {
|
|
289
|
-
// set no entries found class on mat option
|
|
290
|
-
if (this.matOption) {
|
|
291
|
-
if (showNoEntriesFound) {
|
|
292
|
-
this.matOption
|
|
293
|
-
._getHostElement()
|
|
294
|
-
.classList.add('mat-select-search-no-entries-found');
|
|
295
|
-
}
|
|
296
|
-
else {
|
|
297
|
-
this.matOption
|
|
298
|
-
._getHostElement()
|
|
299
|
-
.classList.remove('mat-select-search-no-entries-found');
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
});
|
|
303
|
-
// resize the input width when the viewport is resized, i.e. the trigger width could potentially be resized
|
|
304
|
-
this._viewportRuler
|
|
305
|
-
.change()
|
|
306
|
-
.pipe(takeUntil(this._onDestroy))
|
|
307
|
-
.subscribe(() => {
|
|
308
|
-
if (this.matSelect.panelOpen) {
|
|
309
|
-
this.updateInputWidth();
|
|
310
|
-
}
|
|
311
|
-
});
|
|
312
|
-
this.initMultipleHandling();
|
|
313
|
-
this.optionsList$.pipe(takeUntil(this._onDestroy)).subscribe(() => {
|
|
314
|
-
// update view when available options change
|
|
315
|
-
this.changeDetectorRef.markForCheck();
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
_emitSelectAllBooleanToParent(state) {
|
|
319
|
-
this.toggleAll.emit(state);
|
|
320
|
-
}
|
|
321
|
-
ngOnDestroy() {
|
|
322
|
-
this._onDestroy.next();
|
|
323
|
-
this._onDestroy.complete();
|
|
324
|
-
}
|
|
325
|
-
_isToggleAllCheckboxVisible() {
|
|
326
|
-
return this.matSelect.multiple && this.showToggleAllCheckbox;
|
|
327
|
-
}
|
|
328
|
-
/**
|
|
329
|
-
* Handles the key down event with MatSelect.
|
|
330
|
-
* Allows e.g. selecting with enter key, navigation with arrow keys, etc.
|
|
331
|
-
* @param event
|
|
332
|
-
*/
|
|
333
|
-
_handleKeydown(event) {
|
|
334
|
-
// Prevent propagation for all alphanumeric characters in order to avoid selection issues
|
|
335
|
-
if ((event.key && event.key.length === 1) ||
|
|
336
|
-
(event.keyCode >= A && event.keyCode <= Z) ||
|
|
337
|
-
(event.keyCode >= ZERO && event.keyCode <= NINE) ||
|
|
338
|
-
event.keyCode === SPACE ||
|
|
339
|
-
(this.preventHomeEndKeyPropagation &&
|
|
340
|
-
(event.keyCode === HOME || event.keyCode === END))) {
|
|
341
|
-
event.stopPropagation();
|
|
342
|
-
}
|
|
343
|
-
if (this.matSelect.multiple && event.key && event.keyCode === ENTER) {
|
|
344
|
-
// Regain focus after multiselect, so we can further type
|
|
345
|
-
setTimeout(() => this._focus());
|
|
346
|
-
}
|
|
347
|
-
// Special case if click Escape, if input is empty, close the dropdown, if not, empty out the search field
|
|
348
|
-
if (this.enableClearOnEscapePressed === true &&
|
|
349
|
-
event.keyCode === ESCAPE &&
|
|
350
|
-
this.value) {
|
|
351
|
-
this._reset(true);
|
|
352
|
-
event.stopPropagation();
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
/**
|
|
356
|
-
* Handles the key up event with MatSelect.
|
|
357
|
-
* Allows e.g. the announcing of the currently activeDescendant by screen readers.
|
|
358
|
-
*/
|
|
359
|
-
_handleKeyup(event) {
|
|
360
|
-
if (event.keyCode === UP_ARROW || event.keyCode === DOWN_ARROW) {
|
|
361
|
-
const ariaActiveDescendantId = this.matSelect._getAriaActiveDescendant();
|
|
362
|
-
const index = this._options
|
|
363
|
-
.toArray()
|
|
364
|
-
.findIndex(item => item.id === ariaActiveDescendantId);
|
|
365
|
-
if (index !== -1) {
|
|
366
|
-
this.unselectActiveDescendant();
|
|
367
|
-
const temp = this._options.toArray();
|
|
368
|
-
this.activeDescendant = temp[index]._getHostElement();
|
|
369
|
-
this.activeDescendant.setAttribute('aria-selected', 'true');
|
|
370
|
-
this.searchSelectInput?.nativeElement.setAttribute('aria-activedescendant', ariaActiveDescendantId);
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
writeValue(value) {
|
|
375
|
-
this._lastExternalInputValue = value;
|
|
376
|
-
this._formControl.setValue(value);
|
|
377
|
-
this.changeDetectorRef.markForCheck();
|
|
378
|
-
}
|
|
379
|
-
onBlur() {
|
|
380
|
-
this.unselectActiveDescendant();
|
|
381
|
-
}
|
|
382
|
-
registerOnChange(fn) {
|
|
383
|
-
this._formControl.valueChanges
|
|
384
|
-
.pipe(filter(value => value !== this._lastExternalInputValue), tap(() => (this._lastExternalInputValue = undefined)), takeUntil(this._onDestroy))
|
|
385
|
-
.subscribe(fn);
|
|
386
|
-
}
|
|
387
|
-
registerOnTouched(fn) {
|
|
388
|
-
this.onTouched = fn;
|
|
389
|
-
}
|
|
390
|
-
/**
|
|
391
|
-
* Focuses the search input field
|
|
392
|
-
*/
|
|
393
|
-
_focus() {
|
|
394
|
-
if (!this.searchSelectInput || !this.matSelect.panel) {
|
|
395
|
-
return;
|
|
396
|
-
}
|
|
397
|
-
// save and restore scrollTop of panel, since it will be reset by focus()
|
|
398
|
-
// note: this is hacky
|
|
399
|
-
const panel = this.matSelect.panel.nativeElement;
|
|
400
|
-
const scrollTop = panel.scrollTop;
|
|
401
|
-
// focus
|
|
402
|
-
this.searchSelectInput.nativeElement.focus();
|
|
403
|
-
panel.scrollTop = scrollTop;
|
|
404
|
-
}
|
|
405
|
-
/**
|
|
406
|
-
* Resets the current search value
|
|
407
|
-
* @param focus whether to focus after resetting
|
|
408
|
-
*/
|
|
409
|
-
_reset(focus) {
|
|
410
|
-
this._formControl.setValue('');
|
|
411
|
-
if (focus) {
|
|
412
|
-
this._focus();
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
/**
|
|
416
|
-
* Initializes handling <mat-select [multiple]="true">
|
|
417
|
-
* Note: to improve this code, mat-select should be extended to allow disabling resetting the selection while filtering.
|
|
418
|
-
*/
|
|
419
|
-
initMultipleHandling() {
|
|
420
|
-
if (!this.matSelect.ngControl) {
|
|
421
|
-
if (this.matSelect.multiple) {
|
|
422
|
-
// note: the access to matSelect.ngControl (instead of matSelect.value / matSelect.valueChanges)
|
|
423
|
-
// is necessary to properly work in multi-selection mode.
|
|
424
|
-
console.error('the mat-select containing ngx-mat-select-search must have a ngModel or formControl directive when multiple=true');
|
|
425
|
-
}
|
|
426
|
-
return;
|
|
427
|
-
}
|
|
428
|
-
// if <mat-select [multiple]="true">
|
|
429
|
-
// store previously selected values and restore them when they are deselected
|
|
430
|
-
// because the option is not available while we are currently filtering
|
|
431
|
-
this.previousSelectedValues = this.matSelect.ngControl.value;
|
|
432
|
-
this.matSelect.ngControl.valueChanges
|
|
433
|
-
?.pipe(takeUntil(this._onDestroy))
|
|
434
|
-
.subscribe(values => {
|
|
435
|
-
let restoreSelectedValues = false;
|
|
436
|
-
if (this.matSelect.multiple) {
|
|
437
|
-
if ((this.alwaysRestoreSelectedOptionsMulti ||
|
|
438
|
-
(this._formControl.value && this._formControl.value.length)) &&
|
|
439
|
-
this.previousSelectedValues &&
|
|
440
|
-
Array.isArray(this.previousSelectedValues)) {
|
|
441
|
-
if (!values || !Array.isArray(values)) {
|
|
442
|
-
values = [];
|
|
443
|
-
}
|
|
444
|
-
const optionValues = this.matSelect.options.map(option => option.value);
|
|
445
|
-
this.previousSelectedValues.forEach(previousValue => {
|
|
446
|
-
if (!values.some((v) => this.matSelect.compareWith(v, previousValue)) &&
|
|
447
|
-
!optionValues.some(v => this.matSelect.compareWith(v, previousValue))) {
|
|
448
|
-
// if a value that was selected before is deselected and not found in the options, it was deselected
|
|
449
|
-
// due to the filtering, so we restore it.
|
|
450
|
-
values.push(previousValue);
|
|
451
|
-
restoreSelectedValues = true;
|
|
452
|
-
}
|
|
453
|
-
});
|
|
454
|
-
}
|
|
455
|
-
}
|
|
456
|
-
this.previousSelectedValues = values;
|
|
457
|
-
if (restoreSelectedValues) {
|
|
458
|
-
this.matSelect._onChange(values);
|
|
459
|
-
}
|
|
460
|
-
});
|
|
461
|
-
}
|
|
462
|
-
/**
|
|
463
|
-
* Set the width of the innerSelectSearch to fit even custom scrollbars
|
|
464
|
-
* And support all Operation Systems
|
|
465
|
-
*/
|
|
466
|
-
updateInputWidth() {
|
|
467
|
-
if (!this.innerSelectSearch || !this.innerSelectSearch.nativeElement) {
|
|
468
|
-
return;
|
|
469
|
-
}
|
|
470
|
-
let element = this.innerSelectSearch.nativeElement;
|
|
471
|
-
if (element.parentElement !== null) {
|
|
472
|
-
let panelElement = null;
|
|
473
|
-
while ((element = element.parentElement)) {
|
|
474
|
-
if (element.classList.contains('mat-select-panel')) {
|
|
475
|
-
panelElement = element;
|
|
476
|
-
break;
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
if (panelElement !== null) {
|
|
480
|
-
this.innerSelectSearch.nativeElement.style.width =
|
|
481
|
-
panelElement.clientWidth + 'px';
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
}
|
|
485
|
-
/**
|
|
486
|
-
* Determine the offset to length that can be caused by the optional matOption used as a search input.
|
|
487
|
-
*/
|
|
488
|
-
getOptionsLengthOffset() {
|
|
489
|
-
if (this.matOption) {
|
|
490
|
-
return 1;
|
|
491
|
-
}
|
|
492
|
-
else {
|
|
493
|
-
return 0;
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
unselectActiveDescendant() {
|
|
497
|
-
this.activeDescendant?.removeAttribute('aria-selected');
|
|
498
|
-
this.searchSelectInput?.nativeElement.removeAttribute('aria-activedescendant');
|
|
499
|
-
}
|
|
500
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatSelectSearchComponent, deps: [{ token: MatSelect }, { token: i0.ChangeDetectorRef }, { token: i1.ViewportRuler }, { token: MatOption, optional: true }, { token: MatFormField, optional: true }, { token: MAT_SELECTSEARCH_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
501
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MatSelectSearchComponent, selector: "mat-select-search", inputs: { placeholderLabel: "placeholderLabel", type: "type", closeIcon: "closeIcon", closeSvgIcon: "closeSvgIcon", noEntriesFoundLabel: "noEntriesFoundLabel", clearSearchInput: "clearSearchInput", searching: "searching", disableInitialFocus: "disableInitialFocus", enableClearOnEscapePressed: "enableClearOnEscapePressed", preventHomeEndKeyPropagation: "preventHomeEndKeyPropagation", disableScrollToActiveOnOptionsChanged: "disableScrollToActiveOnOptionsChanged", ariaLabel: "ariaLabel", showToggleAllCheckbox: "showToggleAllCheckbox", toggleAllCheckboxChecked: "toggleAllCheckboxChecked", toggleAllCheckboxIndeterminate: "toggleAllCheckboxIndeterminate", toggleAllCheckboxTooltipMessage: "toggleAllCheckboxTooltipMessage", toggleAllCheckboxTooltipPosition: "toggleAllCheckboxTooltipPosition", hideClearSearchButton: "hideClearSearchButton", alwaysRestoreSelectedOptionsMulti: "alwaysRestoreSelectedOptionsMulti" }, outputs: { toggleAll: "toggleAll" }, providers: [
|
|
502
|
-
{
|
|
503
|
-
provide: NG_VALUE_ACCESSOR,
|
|
504
|
-
useExisting: forwardRef(() => MatSelectSearchComponent),
|
|
505
|
-
multi: true,
|
|
506
|
-
},
|
|
507
|
-
], queries: [{ propertyName: "clearIcon", first: true, predicate: MatSelectSearchClearDirective, descendants: true }, { propertyName: "noEntriesFound", first: true, predicate: MatSelectNoEntriesFoundDirective, descendants: true }], viewQueries: [{ propertyName: "searchSelectInput", first: true, predicate: ["searchSelectInput"], descendants: true, read: ElementRef, static: true }, { propertyName: "innerSelectSearch", first: true, predicate: ["innerSelectSearch"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<!--\nCopyright (c) 2018 Bithost GmbH All Rights Reserved.\n\nUse of this source code is governed by an MIT-style license that can be\nfound in the LICENSE file at https://angular.io/license\n-->\n<!-- Placeholder to adjust vertical offset of the mat-option elements -->\n<input matInput class=\"mat-select-search-input mat-select-search-hidden\" />\n\n<!-- Note: the mat-datepicker-content mat-tab-header are needed to inherit the material theme colors, see PR #22 -->\n<div\n #innerSelectSearch\n class=\"mat-select-search-inner mat-typography mat-datepicker-content mat-tab-header\"\n [ngClass]=\"{\n 'mat-select-search-inner-multiple': matSelect.multiple,\n 'mat-select-search-inner-toggle-all': _isToggleAllCheckboxVisible(),\n }\"\n>\n <mat-checkbox\n *ngIf=\"_isToggleAllCheckboxVisible()\"\n [color]=\"matFormField.color\"\n class=\"mat-select-search-toggle-all-checkbox\"\n [checked]=\"toggleAllCheckboxChecked\"\n [indeterminate]=\"toggleAllCheckboxIndeterminate\"\n [matTooltip]=\"toggleAllCheckboxTooltipMessage\"\n matTooltipClass=\"ngx-mat-select-search-toggle-all-tooltip\"\n [matTooltipPosition]=\"toggleAllCheckboxTooltipPosition\"\n (change)=\"_emitSelectAllBooleanToParent($event.checked)\"\n ></mat-checkbox>\n\n <input\n class=\"mat-select-search-input\"\n autocomplete=\"off\"\n [type]=\"type\"\n [formControl]=\"_formControl\"\n #searchSelectInput\n (keydown)=\"_handleKeydown($event)\"\n (keyup)=\"_handleKeyup($event)\"\n (blur)=\"onBlur()\"\n [placeholder]=\"placeholderLabel\"\n [attr.aria-label]=\"ariaLabel\"\n />\n <mat-icon *ngIf=\"value === '' && !searching\" class=\"suffix\">search</mat-icon>\n <mat-spinner\n *ngIf=\"searching\"\n class=\"mat-select-search-spinner\"\n diameter=\"16\"\n ></mat-spinner>\n\n <button\n *ngIf=\"!hideClearSearchButton && value && !searching\"\n mat-icon-button\n aria-label=\"Clear\"\n (click)=\"_reset(true)\"\n class=\"mat-select-search-clear\"\n >\n <ng-content\n *ngIf=\"clearIcon; else defaultIcon\"\n select=\"[matSelectSearchClear]\"\n ></ng-content>\n <ng-template #defaultIcon>\n <mat-icon [svgIcon]=\"closeSvgIcon\">\n {{ !closeSvgIcon ? closeIcon : null }}\n </mat-icon>\n </ng-template>\n </button>\n\n <ng-content select=\".mat-select-search-custom-header-content\"></ng-content>\n\n <mat-divider></mat-divider>\n</div>\n\n<div\n *ngIf=\"_showNoEntriesFound$ | async\"\n class=\"mat-select-search-no-entries-found\"\n>\n <ng-content\n *ngIf=\"noEntriesFound; else defaultNoEntriesFound\"\n select=\"[matSelectNoEntriesFound]\"\n ></ng-content>\n <ng-template #defaultNoEntriesFound>{{ noEntriesFoundLabel }}</ng-template>\n</div>\n", styles: [".mat-select-search-hidden{visibility:hidden}.mat-select-search-inner{position:absolute;top:0;left:0;width:100%;z-index:100;font-size:inherit;box-shadow:none}.mat-select-search-inner.mat-select-search-inner-multiple.mat-select-search-inner-toggle-all{display:flex;align-items:center}.suffix{position:absolute;top:12px;right:14px}.mat-select-search-input{box-sizing:border-box;width:100%;border:none;font-family:inherit;font-size:inherit;color:currentColor;outline:none;background:#fff;padding:0 44px 0 16px;height:calc(3em - 1px);line-height:calc(3em - 1px)}:host-context([dir=rtl]) .mat-select-search-input{padding-right:16px;padding-left:44px}.mat-select-search-inner-toggle-all .mat-select-search-input{padding-left:5px}.mat-select-search-no-entries-found{padding-top:8px}.mat-select-search-clear{position:absolute;right:4px;top:0}:host-context([dir=rtl]) .mat-select-search-clear{right:auto;left:4px}.mat-select-search-spinner{position:absolute;right:16px;top:calc(50% - 8px)}:host-context([dir=rtl]) .mat-select-search-spinner{right:auto;left:16px}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search{position:sticky;top:0;z-index:1;opacity:1;margin-top:-8px;pointer-events:all}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search .mat-icon{margin-right:0;margin-left:0}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search mat-pseudo-checkbox{display:none}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search .mdc-list-item__primary-text{opacity:1}.mat-select-search-toggle-all-checkbox{padding-left:5px}:host-context([dir=rtl]) .mat-select-search-toggle-all-checkbox{padding-left:0;padding-right:5px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i9.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
508
|
-
}
|
|
509
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatSelectSearchComponent, decorators: [{
|
|
510
|
-
type: Component,
|
|
511
|
-
args: [{ selector: 'mat-select-search', providers: [
|
|
512
|
-
{
|
|
513
|
-
provide: NG_VALUE_ACCESSOR,
|
|
514
|
-
useExisting: forwardRef(() => MatSelectSearchComponent),
|
|
515
|
-
multi: true,
|
|
516
|
-
},
|
|
517
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\nCopyright (c) 2018 Bithost GmbH All Rights Reserved.\n\nUse of this source code is governed by an MIT-style license that can be\nfound in the LICENSE file at https://angular.io/license\n-->\n<!-- Placeholder to adjust vertical offset of the mat-option elements -->\n<input matInput class=\"mat-select-search-input mat-select-search-hidden\" />\n\n<!-- Note: the mat-datepicker-content mat-tab-header are needed to inherit the material theme colors, see PR #22 -->\n<div\n #innerSelectSearch\n class=\"mat-select-search-inner mat-typography mat-datepicker-content mat-tab-header\"\n [ngClass]=\"{\n 'mat-select-search-inner-multiple': matSelect.multiple,\n 'mat-select-search-inner-toggle-all': _isToggleAllCheckboxVisible(),\n }\"\n>\n <mat-checkbox\n *ngIf=\"_isToggleAllCheckboxVisible()\"\n [color]=\"matFormField.color\"\n class=\"mat-select-search-toggle-all-checkbox\"\n [checked]=\"toggleAllCheckboxChecked\"\n [indeterminate]=\"toggleAllCheckboxIndeterminate\"\n [matTooltip]=\"toggleAllCheckboxTooltipMessage\"\n matTooltipClass=\"ngx-mat-select-search-toggle-all-tooltip\"\n [matTooltipPosition]=\"toggleAllCheckboxTooltipPosition\"\n (change)=\"_emitSelectAllBooleanToParent($event.checked)\"\n ></mat-checkbox>\n\n <input\n class=\"mat-select-search-input\"\n autocomplete=\"off\"\n [type]=\"type\"\n [formControl]=\"_formControl\"\n #searchSelectInput\n (keydown)=\"_handleKeydown($event)\"\n (keyup)=\"_handleKeyup($event)\"\n (blur)=\"onBlur()\"\n [placeholder]=\"placeholderLabel\"\n [attr.aria-label]=\"ariaLabel\"\n />\n <mat-icon *ngIf=\"value === '' && !searching\" class=\"suffix\">search</mat-icon>\n <mat-spinner\n *ngIf=\"searching\"\n class=\"mat-select-search-spinner\"\n diameter=\"16\"\n ></mat-spinner>\n\n <button\n *ngIf=\"!hideClearSearchButton && value && !searching\"\n mat-icon-button\n aria-label=\"Clear\"\n (click)=\"_reset(true)\"\n class=\"mat-select-search-clear\"\n >\n <ng-content\n *ngIf=\"clearIcon; else defaultIcon\"\n select=\"[matSelectSearchClear]\"\n ></ng-content>\n <ng-template #defaultIcon>\n <mat-icon [svgIcon]=\"closeSvgIcon\">\n {{ !closeSvgIcon ? closeIcon : null }}\n </mat-icon>\n </ng-template>\n </button>\n\n <ng-content select=\".mat-select-search-custom-header-content\"></ng-content>\n\n <mat-divider></mat-divider>\n</div>\n\n<div\n *ngIf=\"_showNoEntriesFound$ | async\"\n class=\"mat-select-search-no-entries-found\"\n>\n <ng-content\n *ngIf=\"noEntriesFound; else defaultNoEntriesFound\"\n select=\"[matSelectNoEntriesFound]\"\n ></ng-content>\n <ng-template #defaultNoEntriesFound>{{ noEntriesFoundLabel }}</ng-template>\n</div>\n", styles: [".mat-select-search-hidden{visibility:hidden}.mat-select-search-inner{position:absolute;top:0;left:0;width:100%;z-index:100;font-size:inherit;box-shadow:none}.mat-select-search-inner.mat-select-search-inner-multiple.mat-select-search-inner-toggle-all{display:flex;align-items:center}.suffix{position:absolute;top:12px;right:14px}.mat-select-search-input{box-sizing:border-box;width:100%;border:none;font-family:inherit;font-size:inherit;color:currentColor;outline:none;background:#fff;padding:0 44px 0 16px;height:calc(3em - 1px);line-height:calc(3em - 1px)}:host-context([dir=rtl]) .mat-select-search-input{padding-right:16px;padding-left:44px}.mat-select-search-inner-toggle-all .mat-select-search-input{padding-left:5px}.mat-select-search-no-entries-found{padding-top:8px}.mat-select-search-clear{position:absolute;right:4px;top:0}:host-context([dir=rtl]) .mat-select-search-clear{right:auto;left:4px}.mat-select-search-spinner{position:absolute;right:16px;top:calc(50% - 8px)}:host-context([dir=rtl]) .mat-select-search-spinner{right:auto;left:16px}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search{position:sticky;top:0;z-index:1;opacity:1;margin-top:-8px;pointer-events:all}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search .mat-icon{margin-right:0;margin-left:0}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search mat-pseudo-checkbox{display:none}::ng-deep .mat-mdc-option[aria-disabled=true].contains-mat-select-search .mdc-list-item__primary-text{opacity:1}.mat-select-search-toggle-all-checkbox{padding-left:5px}:host-context([dir=rtl]) .mat-select-search-toggle-all-checkbox{padding-left:0;padding-right:5px}\n"] }]
|
|
518
|
-
}], ctorParameters: () => [{ type: i10.MatSelect, decorators: [{
|
|
519
|
-
type: Inject,
|
|
520
|
-
args: [MatSelect]
|
|
521
|
-
}] }, { type: i0.ChangeDetectorRef }, { type: i1.ViewportRuler }, { type: i11.MatOption, decorators: [{
|
|
522
|
-
type: Optional
|
|
523
|
-
}, {
|
|
524
|
-
type: Inject,
|
|
525
|
-
args: [MatOption]
|
|
526
|
-
}] }, { type: i12.MatFormField, decorators: [{
|
|
527
|
-
type: Optional
|
|
528
|
-
}, {
|
|
529
|
-
type: Inject,
|
|
530
|
-
args: [MatFormField]
|
|
531
|
-
}] }, { type: undefined, decorators: [{
|
|
532
|
-
type: Optional
|
|
533
|
-
}, {
|
|
534
|
-
type: Inject,
|
|
535
|
-
args: [MAT_SELECTSEARCH_DEFAULT_OPTIONS]
|
|
536
|
-
}] }], propDecorators: { placeholderLabel: [{
|
|
537
|
-
type: Input
|
|
538
|
-
}], type: [{
|
|
539
|
-
type: Input
|
|
540
|
-
}], closeIcon: [{
|
|
541
|
-
type: Input
|
|
542
|
-
}], closeSvgIcon: [{
|
|
543
|
-
type: Input
|
|
544
|
-
}], noEntriesFoundLabel: [{
|
|
545
|
-
type: Input
|
|
546
|
-
}], clearSearchInput: [{
|
|
547
|
-
type: Input
|
|
548
|
-
}], searching: [{
|
|
549
|
-
type: Input
|
|
550
|
-
}], disableInitialFocus: [{
|
|
551
|
-
type: Input
|
|
552
|
-
}], enableClearOnEscapePressed: [{
|
|
553
|
-
type: Input
|
|
554
|
-
}], preventHomeEndKeyPropagation: [{
|
|
555
|
-
type: Input
|
|
556
|
-
}], disableScrollToActiveOnOptionsChanged: [{
|
|
557
|
-
type: Input
|
|
558
|
-
}], ariaLabel: [{
|
|
559
|
-
type: Input
|
|
560
|
-
}], showToggleAllCheckbox: [{
|
|
561
|
-
type: Input
|
|
562
|
-
}], toggleAllCheckboxChecked: [{
|
|
563
|
-
type: Input
|
|
564
|
-
}], toggleAllCheckboxIndeterminate: [{
|
|
565
|
-
type: Input
|
|
566
|
-
}], toggleAllCheckboxTooltipMessage: [{
|
|
567
|
-
type: Input
|
|
568
|
-
}], toggleAllCheckboxTooltipPosition: [{
|
|
569
|
-
type: Input
|
|
570
|
-
}], hideClearSearchButton: [{
|
|
571
|
-
type: Input
|
|
572
|
-
}], alwaysRestoreSelectedOptionsMulti: [{
|
|
573
|
-
type: Input
|
|
574
|
-
}], toggleAll: [{
|
|
575
|
-
type: Output
|
|
576
|
-
}], searchSelectInput: [{
|
|
577
|
-
type: ViewChild,
|
|
578
|
-
args: ['searchSelectInput', { read: ElementRef, static: true }]
|
|
579
|
-
}], innerSelectSearch: [{
|
|
580
|
-
type: ViewChild,
|
|
581
|
-
args: ['innerSelectSearch', { read: ElementRef, static: true }]
|
|
582
|
-
}], clearIcon: [{
|
|
583
|
-
type: ContentChild,
|
|
584
|
-
args: [MatSelectSearchClearDirective]
|
|
585
|
-
}], noEntriesFound: [{
|
|
586
|
-
type: ContentChild,
|
|
587
|
-
args: [MatSelectNoEntriesFoundDirective]
|
|
588
|
-
}] } });
|
|
589
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0LXNlbGVjdC1zZWFyY2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25lbXJ2YS9kZXNpZ24tc3lzdGVtL21hdC1zZWxlY3Qtc2VhcmNoL3NyYy9tYXQtc2VsZWN0LXNlYXJjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmVtcnZhL2Rlc2lnbi1zeXN0ZW0vbWF0LXNlbGVjdC1zZWFyY2gvc3JjL21hdC1zZWxlY3Qtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUNMLENBQUMsRUFDRCxVQUFVLEVBQ1YsR0FBRyxFQUNILEtBQUssRUFDTCxNQUFNLEVBQ04sSUFBSSxFQUNKLElBQUksRUFDSixLQUFLLEVBQ0wsUUFBUSxFQUNSLENBQUMsRUFDRCxJQUFJLEdBQ0wsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLFdBQVcsRUFDWCxpQkFBaUIsR0FDbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFDTCxLQUFL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biAqIENvcHlyaWdodCAoYykgMjAxOCBCaXRob3N0IEdtYkggQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7XG4gIEEsXG4gIERPV05fQVJST1csXG4gIEVORCxcbiAgRU5URVIsXG4gIEVTQ0FQRSxcbiAgSE9NRSxcbiAgTklORSxcbiAgU1BBQ0UsXG4gIFVQX0FSUk9XLFxuICBaLFxuICBaRVJPLFxufSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgVmlld3BvcnRSdWxlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIEZvcm1Db250cm9sLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0T3B0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkZWxheSxcbiAgZmlsdGVyLFxuICBtYXAsXG4gIHN0YXJ0V2l0aCxcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWF0U2VsZWN0U2VhcmNoQ2xlYXJEaXJlY3RpdmUgfSBmcm9tICcuL21hdC1zZWxlY3Qtc2VhcmNoLWNsZWFyLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICBjb25maWd1cmFibGVEZWZhdWx0T3B0aW9ucyxcbiAgTUFUX1NFTEVDVFNFQVJDSF9ERUZBVUxUX09QVElPTlMsXG4gIE1hdFNlbGVjdFNlYXJjaE9wdGlvbnMsXG59IGZyb20gJy4vZGVmYXVsdC1vcHRpb25zJztcbmltcG9ydCB7IE1hdFNlbGVjdE5vRW50cmllc0ZvdW5kRGlyZWN0aXZlIH0gZnJvbSAnLi9tYXQtc2VsZWN0LW5vLWVudHJpZXMtZm91bmQuZGlyZWN0aXZlJztcblxuLyoqXG4gKiBDb21wb25lbnQgcHJvdmlkaW5nIGFuIGlucHV0IGZpZWxkIGZvciBzZWFyY2hpbmcgTWF0U2VsZWN0IG9wdGlvbnMuXG4gKlxuICogRXhhbXBsZSB1c2FnZTpcbiAqXG4gKiBpbnRlcmZhY2UgQmFuayB7XG4gKiAgaWQ6IHN0cmluZztcbiAqICBuYW1lOiBzdHJpbmc7XG4gKiB9XG4gKlxuICogQENvbXBvbmVudCh7XG4gKiAgIHNlbGVjdG9yOiAnbXktYXBwLWRhdGEtc2VsZWN0aW9uJyxcbiAqICAgdGVtcGxhdGU6IGBcbiAqICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gKiAgICAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwiYmFua0N0cmxcIiBwbGFjZWhvbGRlcj1cIkJhbmtcIj5cbiAqICAgICAgICAgPG1hdC1vcHRpb24+XG4gKiAgICAgICAgICAgPG5neC1tYXQtc2VsZWN0LXNlYXJjaCBbZm9ybUNvbnRyb2xdPVwiYmFua0ZpbHRlckN0cmxcIj48L25neC1tYXQtc2VsZWN0LXNlYXJjaD5cbiAqICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICogICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgYmFuayBvZiBmaWx0ZXJlZEJhbmtzIHwgYXN5bmNcIiBbdmFsdWVdPVwiYmFuay5pZFwiPlxuICogICAgICAgICAgIHt7YmFuay5uYW1lfX1cbiAqICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICogICAgICAgPC9tYXQtc2VsZWN0PlxuICogICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gKiAgIGBcbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgRGF0YVNlbGVjdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAqXG4gKiAgIC8vIGNvbnRyb2wgZm9yIHRoZSBzZWxlY3RlZCBiYW5rXG4gKiAgIHB1YmxpYyBiYW5rQ3RybDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAqICAgLy8gY29udHJvbCBmb3IgdGhlIE1hdFNlbGVjdCBmaWx0ZXIga2V5d29yZFxuICogICBwdWJsaWMgYmFua0ZpbHRlckN0cmw6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gKlxuICogICAvLyBsaXN0IG9mIGJhbmtzXG4gKiAgIHByaXZhdGUgYmFua3M6IEJhbmtbXSA9IFt7bmFtZTogJ0JhbmsgQScsIGlkOiAnQSd9LCB7bmFtZTogJ0JhbmsgQicsIGlkOiAnQid9LCB7bmFtZTogJ0JhbmsgQycsIGlkOiAnQyd9XTtcbiAqICAgLy8gbGlzdCBvZiBiYW5rcyBmaWx0ZXJlZCBieSBzZWFyY2gga2V5d29yZFxuICogICBwdWJsaWMgZmlsdGVyZWRCYW5rczogUmVwbGF5U3ViamVjdDxCYW5rW10+ID0gbmV3IFJlcGxheVN1YmplY3Q8QmFua1tdPigxKTtcbiAqXG4gKiAgIC8vIFN1YmplY3QgdGhhdCBlbWl0cyB3aGVuIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gZGVzdHJveWVkLlxuICogICBwcml2YXRlIF9vbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICpcbiAqXG4gKiAgIG5nT25Jbml0KCkge1xuICogICAgIC8vIGxvYWQgdGhlIGluaXRpYWwgYmFuayBsaXN0XG4gKiAgICAgdGhpcy5maWx0ZXJlZEJhbmtzLm5leHQodGhpcy5iYW5rcy5zbGljZSgpKTtcbiAqICAgICAvLyBsaXN0ZW4gZm9yIHNlYXJjaCBmaWVsZCB2YWx1ZSBjaGFuZ2VzXG4gKiAgICAgdGhpcy5iYW5rRmlsdGVyQ3RybC52YWx1ZUNoYW5nZXNcbiAqICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpKVxuICogICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gKiAgICAgICAgIHRoaXMuZmlsdGVyQmFua3MoKTtcbiAqICAgICAgIH0pO1xuICogICB9XG4gKlxuICogICBuZ09uRGVzdHJveSgpIHtcbiAqICAgICB0aGlzLl9vbkRlc3Ryb3kubmV4dCgpO1xuICogICAgIHRoaXMuX29uRGVzdHJveS5jb21wbGV0ZSgpO1xuICogICB9XG4gKlxuICogICBwcml2YXRlIGZpbHRlckJhbmtzKCkge1xuICogICAgIGlmICghdGhpcy5iYW5rcykge1xuICogICAgICAgcmV0dXJuO1xuICogICAgIH1cbiAqXG4gKiAgICAgLy8gZ2V0IHRoZSBzZWFyY2gga2V5d29yZFxuICogICAgIGxldCBzZWFyY2ggPSB0aGlzLmJhbmtGaWx0ZXJDdHJsLnZhbHVlO1xuICogICAgIGlmICghc2VhcmNoKSB7XG4gKiAgICAgICB0aGlzLmZpbHRlcmVkQmFua3MubmV4dCh0aGlzLmJhbmtzLnNsaWNlKCkpO1xuICogICAgICAgcmV0dXJuO1xuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICBzZWFyY2ggPSBzZWFyY2gudG9Mb3dlckNhc2UoKTtcbiAqICAgICB9XG4gKlxuICogICAgIC8vIGZpbHRlciB0aGUgYmFua3NcbiAqICAgICB0aGlzLmZpbHRlcmVkQmFua3MubmV4dChcbiAqICAgICAgIHRoaXMuYmFua3MuZmlsdGVyKGJhbmsgPT4gYmFuay5uYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihzZWFyY2gpID4gLTEpXG4gKiAgICAgKTtcbiAqICAgfVxuICogfVxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtc2VsZWN0LXNlYXJjaCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXQtc2VsZWN0LXNlYXJjaC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21hdC1zZWxlY3Qtc2VhcmNoLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWF0U2VsZWN0U2VhcmNoQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRTZWxlY3RTZWFyY2hDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3JcbntcbiAgLyoqIExhYmVsIG9mIHRoZSBzZWFyY2ggcGxhY2Vob2xkZXIgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXJMYWJlbCA9ICdTZWFyY2gnO1xuXG4gIC8qKiBUeXBlIG9mIHRoZSBzZWFyY2ggaW5wdXQgZmllbGQgKi9cbiAgQElucHV0KCkgdHlwZSA9ICd0ZXh0JztcblxuICAvKiogRm9udC1iYXNlZCBpY29uIHVzZWQgZm9yIGRpc3BsYXlpbmcgQ2xvc2UtSWNvbiAqL1xuICBASW5wdXQoKSBjbG9zZUljb24gPSAnY2xvc2UnO1xuXG4gIC8qKiBTdmctYmFzZWQgaWNvbiB1c2VkIGZvciBkaXNwbGF5aW5nIENsb3NlLUljb24uIElmIHNldCwgY2xvc2VJY29uIGlzIG92ZXJyaWRkZW4gKi9cbiAgQElucHV0KCkgY2xvc2VTdmdJY29uID0gJyc7XG5cbiAgLyoqIExhYmVsIHRvIGJlIHNob3duIHdoZW4gbm8gZW50cmllcyBhcmUgZm91bmQuIFNldCB0byBudWxsIGlmIG5vIG1lc3NhZ2Ugc2hvdWxkIGJlIHNob3duLiAqL1xuICBASW5wdXQoKSBub0VudHJpZXNGb3VuZExhYmVsID0gJ05vdGhpbmcgZm91bmQnO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgc2VhcmNoIGZpZWxkIHNob3VsZCBiZSBjbGVhcmVkIGFmdGVyIHRoZSBkcm9wZG93biBtZW51IGlzIGNsb3NlZC5cbiAgICogVXNlZnVsIGZvciBzZXJ2ZXItc2lkZSBmaWx0ZXJpbmcuIFNlZSBbIzNdKGh0dHBzOi8vZ2l0aHViLmNvbS9iaXRob3N0LWdtYmgvbmd4LW1hdC1zZWxlY3Qtc2VhcmNoL2lzc3Vlcy8zKVxuICAgKi9cbiAgQElucHV0KCkgY2xlYXJTZWFyY2hJbnB1dCA9IHRydWU7XG5cbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyB0aGUgc2VhcmNoLWluLXByb2dyZXNzIGluZGljYXRvciAqL1xuICBASW5wdXQoKSBzZWFyY2hpbmcgPSBmYWxzZTtcblxuICAvKiogRGlzYWJsZXMgaW5pdGlhbCBmb2N1c2luZyBvZiB0aGUgaW5wdXQgZmllbGQgKi9cbiAgQElucHV0KCkgZGlzYWJsZUluaXRpYWxGb2N1cyA9IGZhbHNlO1xuXG4gIC8qKiBFbmFibGUgY2xlYXIgaW5wdXQgb24gZXNjYXBlIHByZXNzZWQgKi9cbiAgQElucHV0KCkgZW5hYmxlQ2xlYXJPbkVzY2FwZVByZXNzZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogUHJldmVudHMgaG9tZSAvIGVuZCBrZXkgYmVpbmcgcHJvcGFnYXRlZCB0byBtYXQtc2VsZWN0LFxuICAgKiBhbGxvd2luZyB0byBtb3ZlIHRoZSBjdXJzb3Igd2l0aGluIHRoZSBzZWFyY2ggaW5wdXQgaW5zdGVhZCBvZiBuYXZpZ2F0aW5nIHRoZSBvcHRpb25zXG4gICAqL1xuICBASW5wdXQoKSBwcmV2ZW50SG9tZUVuZEtleVByb3BhZ2F0aW9uID0gZmFsc2U7XG5cbiAgLyoqIERpc2FibGVzIHNjcm9sbGluZyB0byBhY3RpdmUgb3B0aW9ucyB3aGVuIG9wdGlvbiBsaXN0IGNoYW5nZXMuIFVzZWZ1bCBmb3Igc2VydmVyLXNpZGUgc2VhcmNoICovXG4gIEBJbnB1dCgpIGRpc2FibGVTY3JvbGxUb0FjdGl2ZU9uT3B0aW9uc0NoYW5nZWQgPSBmYWxzZTtcblxuICAvKiogQWRkcyA1MDggc2NyZWVuIHJlYWRlciBzdXBwb3J0IGZvciBzZWFyY2ggYm94ICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbCA9ICdkcm9wZG93biBzZWFyY2gnO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgU2VsZWN0IEFsbCBDaGVja2JveCAoZm9yIG1hdC1zZWxlY3RbbXVsdGk9dHJ1ZV0pICovXG4gIEBJbnB1dCgpIHNob3dUb2dnbGVBbGxDaGVja2JveCA9IGZhbHNlO1xuXG4gIC8qKiBzZWxlY3QgYWxsIGNoZWNrYm94IGNoZWNrZWQgc3RhdGUgKi9cbiAgQElucHV0KCkgdG9nZ2xlQWxsQ2hlY2tib3hDaGVja2VkID0gZmFsc2U7XG5cbiAgLyoqIHNlbGVjdCBhbGwgY2hlY2tib3ggaW5kZXRlcm1pbmF0ZSBzdGF0ZSAqL1xuICBASW5wdXQoKSB0b2dnbGVBbGxDaGVja2JveEluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcblxuICAvKiogRGlzcGxheSBhIG1lc3NhZ2UgaW4gYSB0b29sdGlwIG9uIHRoZSB0b2dnbGUtYWxsIGNoZWNrYm94ICovXG4gIEBJbnB1dCgpIHRvZ2dsZUFsbENoZWNrYm94VG9vbHRpcE1lc3NhZ2UgPSAnJztcblxuICAvKiogRGVmaW5lIHRoZSBwb3NpdGlvbiBvZiB0aGUgdG9vbHRpcCBvbiB0aGUgdG9nZ2xlLWFsbCBjaGVja2JveC4gKi9cbiAgQElucHV0KCkgdG9nZ2xlQWxsQ2hlY2tib3hUb29sdGlwUG9zaXRpb246XG4gICAgfCAnbGVmdCdcbiAgICB8ICdyaWdodCdcbiAgICB8ICdhYm92ZSdcbiAgICB8ICdiZWxvdydcbiAgICB8ICdiZWZvcmUnXG4gICAgfCAnYWZ0ZXInID0gJ2JlbG93JztcblxuICAvKiogU2hvdy9IaWRlIHRoZSBzZWFyY2ggY2xlYXIgYnV0dG9uIG9mIHRoZSBzZWFyY2ggaW5wdXQgKi9cbiAgQElucHV0KCkgaGlkZUNsZWFyU2VhcmNoQnV0dG9uID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEFsd2F5cyByZXN0b3JlIHNlbGVjdGVkIG9wdGlvbnMgb24gc2VsZWN0aW9uQ2hhbmdlIGZvciBtb2RlIG11bHRpIChlLmcuIGZvciBsYXp5IGxvYWRpbmcvaW5maW5pdHkgc2Nyb2xsaW5nKS5cbiAgICogRGVmYXVsdHMgdG8gZmFsc2UsIHNvIHNlbGVjdGVkIG9wdGlvbnMgYXJlIG9ubHkgcmVzdG9yZWQgd2hpbGUgZmlsdGVyaW5nIGlzIGFjdGl2ZS5cbiAgICovXG4gIEBJbnB1dCgpIGFsd2F5c1Jlc3RvcmVTZWxlY3RlZE9wdGlvbnNNdWx0aSA9IGZhbHNlO1xuXG4gIC8qKiBPdXRwdXQgZW1pdHRlciB0byBzZW5kIHRvIHBhcmVudCBjb21wb25lbnQgd2l0aCB0aGUgdG9nZ2xlIGFsbCBib29sZWFuICovXG4gIEBPdXRwdXQoKSB0b2dnbGVBbGwgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgc2VhcmNoIGlucHV0IGZpZWxkICovXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaFNlbGVjdElucHV0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgc2VhcmNoU2VsZWN0SW5wdXQ/OiBFbGVtZW50UmVmO1xuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIHNlYXJjaCBpbnB1dCBmaWVsZCAqL1xuICBAVmlld0NoaWxkKCdpbm5lclNlbGVjdFNlYXJjaCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIGlubmVyU2VsZWN0U2VhcmNoPzogRWxlbWVudFJlZjtcblxuICAvKiogUmVmZXJlbmNlIHRvIGN1c3RvbSBzZWFyY2ggaW5wdXQgY2xlYXIgaWNvbiAqL1xuICBAQ29udGVudENoaWxkKE1hdFNlbGVjdFNlYXJjaENsZWFyRGlyZWN0aXZlKVxuICBjbGVhckljb24/OiBNYXRTZWxlY3RTZWFyY2hDbGVhckRpcmVjdGl2ZTtcblxuICAvKiogUmVmZXJlbmNlIHRvIGN1c3RvbSBubyBlbnRyaWVzIGZvdW5kIGVsZW1lbnQgKi9cbiAgQENvbnRlbnRDaGlsZChNYXRTZWxlY3ROb0VudHJpZXNGb3VuZERpcmVjdGl2ZSlcbiAgbm9FbnRyaWVzRm91bmQ/OiBNYXRTZWxlY3ROb0VudHJpZXNGb3VuZERpcmVjdGl2ZTtcblxuICAvKiogQ3VycmVudCBzZWFyY2ggdmFsdWUgKi9cbiAgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLl9mb3JtQ29udHJvbCBhcyBGb3JtQ29udHJvbCkudmFsdWU7XG4gIH1cblxuICBwcml2YXRlIF9sYXN0RXh0ZXJuYWxJbnB1dFZhbHVlPzogc3RyaW5nO1xuXG4gIG9uVG91Y2hlZDogKF86IGFueSkgPT4gdm9pZCA9IChfOiBhbnkpID0+IHtcbiAgICAvL1xuICB9O1xuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIE1hdFNlbGVjdCBvcHRpb25zICovXG4gIHB1YmxpYyBzZXQgX29wdGlvbnMoX29wdGlvbnM6IFF1ZXJ5TGlzdDxNYXRPcHRpb24+KSB7XG4gICAgdGhpcy5fb3B0aW9ucyQubmV4dChfb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IF9vcHRpb25zKCk6IFF1ZXJ5TGlzdDxNYXRPcHRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucyQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBfb3B0aW9ucyQ6IEJlaGF2aW9yU3ViamVjdDxRdWVyeUxpc3Q8TWF0T3B0aW9uPj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxuICAgIFF1ZXJ5TGlzdDxNYXRPcHRpb24+XG4gID4obmV3IFF1ZXJ5TGlzdCgpKTtcblxuICBwcml2YXRlIG9wdGlvbnNMaXN0JDogT2JzZXJ2YWJsZTxNYXRPcHRpb25bXT4gPSB0aGlzLl9vcHRpb25zJC5waXBlKFxuICAgIHN3aXRjaE1hcChfb3B0aW9ucyA9PlxuICAgICAgX29wdGlvbnNcbiAgICAgICAgPyBfb3B0aW9ucy5jaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBtYXAob3B0aW9ucyA9PiBvcHRpb25zLnRvQXJyYXkoKSksXG4gICAgICAgICAgICBzdGFydFdpdGg8TWF0T3B0aW9uW10+KF9vcHRpb25zLnRvQXJyYXkoKSksXG4gICAgICAgICAgKVxuICAgICAgICA6IG9mKFtdKSxcbiAgICApLFxuICApO1xuXG4gIHByaXZhdGUgb3B0aW9uc0xlbmd0aCQ6IE9ic2VydmFibGU8bnVtYmVyPiA9IHRoaXMub3B0aW9uc0xpc3QkLnBpcGUoXG4gICAgbWFwKG9wdGlvbnMgPT4gKG9wdGlvbnMgPyBvcHRpb25zLmxlbmd0aCA6IDApKSxcbiAgKTtcblxuICAvKiogUHJldmlvdXNseSBzZWxlY3RlZCB2YWx1ZXMgd2hlbiB1c2luZyA8bWF0LXNlbGVjdCBbbXVsdGlwbGVdPVwidHJ1ZVwiPiovXG4gIHByaXZhdGUgcHJldmlvdXNTZWxlY3RlZFZhbHVlcz86IGFueVtdO1xuXG4gIHB1YmxpYyBfZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+ID0gbmV3IEZvcm1Db250cm9sPHN0cmluZz4oJycpO1xuXG4gIC8qKiB3aGV0aGVyIHRvIHNob3cgdGhlIG5vIGVudHJpZXMgZm91bmQgbWVzc2FnZSAqL1xuICBwdWJsaWMgX3Nob3dOb0VudHJpZXNGb3VuZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLl9mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMsXG4gICAgdGhpcy5vcHRpb25zTGVuZ3RoJCxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtfLCBvcHRpb25zTGVuZ3RoXSkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5ub0VudHJpZXNGb3VuZExhYmVsICE9PSAnJyAmJlxuICAgICAgICBvcHRpb25zTGVuZ3RoID09PSB0aGlzLmdldE9wdGlvbnNMZW5ndGhPZmZzZXQoKVxuICAgICAgKTtcbiAgICB9KSxcbiAgKTtcblxuICAvKiogU3ViamVjdCB0aGF0IGVtaXRzIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgYmVlbiBkZXN0cm95ZWQuICovXG4gIHByaXZhdGUgX29uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLyoqIFJlZmVyZW5jZSB0byBhY3RpdmUgZGVzY2VuZGFudCBmb3IgQVJJQSBTdXBwb3J0LiAqL1xuICBwcml2YXRlIGFjdGl2ZURlc2NlbmRhbnQ/OiBIVE1MRWxlbWVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KE1hdFNlbGVjdCkgcHVibGljIG1hdFNlbGVjdDogTWF0U2VsZWN0LFxuICAgIHB1YmxpYyBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfdmlld3BvcnRSdWxlcjogVmlld3BvcnRSdWxlcixcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1hdE9wdGlvbikgcHVibGljIG1hdE9wdGlvbjogTWF0T3B0aW9uLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTWF0Rm9ybUZpZWxkKSBwdWJsaWMgbWF0Rm9ybUZpZWxkOiBNYXRGb3JtRmllbGQsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KE1BVF9TRUxFQ1RTRUFSQ0hfREVGQVVMVF9PUFRJT05TKVxuICAgIGRlZmF1bHRPcHRpb25zOiBNYXRTZWxlY3RTZWFyY2hPcHRpb25zLFxuICApIHtcbiAgICB0aGlzLmFwcGx5RGVmYXVsdE9wdGlvbnMoZGVmYXVsdE9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseURlZmF1bHRPcHRpb25zKGRlZmF1bHRPcHRpb25zOiBNYXRTZWxlY3RTZWFyY2hPcHRpb25zKSB7XG4gICAgaWYgKCFkZWZhdWx0T3B0aW9ucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBjb25maWd1cmFibGVEZWZhdWx0T3B0aW9ucykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICBpZiAoZGVmYXVsdE9wdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAodGhpc1trZXldIGFzIGFueSkgPSBkZWZhdWx0T3B0aW9uc1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIHNldCBjdXN0b20gbWF0LW9wdGlvbiBjbGFzcyBpZiB0aGUgY29tcG9uZW50IHdhcyBwbGFjZWQgaW5zaWRlIGEgbWF0LW9wdGlvblxuICAgIGlmICh0aGlzLm1hdE9wdGlvbikge1xuICAgICAgdGhpcy5tYXRPcHRpb24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5tYXRPcHRpb25cbiAgICAgICAgLl9nZXRIb3N0RWxlbWVudCgpXG4gICAgICAgIC5jbGFzc0xpc3QuYWRkKCdjb250YWlucy1tYXQtc2VsZWN0LXNlYXJjaCcpO1xuICAgICAgLy90aGlzLm1hdE9wdGlvbi5fZ2V0SG9zdEVsZW1lbnQoKS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTsgLy8gdGhpcyBwcm92b2tlIGFuIGVycm9yXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICc8bmd4LW1hdC1zZWxlY3Qtc2VhcmNoPiBtdXN0IGJlIHBsYWNlZCBpbnNpZGUgYSA8bWF0LW9wdGlvbj4gZWxlbWVudCcsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIHdoZW4gdGhlIHNlbGVjdCBkcm9wZG93biBwYW5lbCBpcyBvcGVuZWQgb3IgY2xvc2VkXG4gICAgdGhpcy5tYXRTZWxlY3Qub3BlbmVkQ2hhbmdlXG4gICAgICAucGlwZShkZWxheSgxKSwgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSkpXG4gICAgICAuc3Vic2NyaWJlKG9wZW5lZCA9PiB7XG4gICAgICAgIGlmIChvcGVuZWQpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUlucHV0V2lkdGgoKTtcbiAgICAgICAgICAvLyBmb2N1cyB0aGUgc2VhcmNoIGZpZWxkIHdoZW4gb3BlbmluZ1xuICAgICAgICAgIGlmICghdGhpcy5kaXNhYmxlSW5pdGlhbEZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjbGVhciBpdCB3aGVuIGNsb3NpbmdcbiAgICAgICAgICBpZiAodGhpcy5jbGVhclNlYXJjaElucHV0KSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNldCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAvLyBzZXQgdGhlIGZpcnN0IGl0ZW0gYWN0aXZlIGFmdGVyIHRoZSBvcHRpb25zIGNoYW5nZWRcbiAgICB0aGlzLm1hdFNlbGVjdC5vcGVuZWRDaGFuZ2VcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBzd2l0Y2hNYXAoXyA9PiB7XG4gICAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHRoaXMubWF0U2VsZWN0Lm9wdGlvbnM7XG5cbiAgICAgICAgICAvLyBDbG9zdXJlIHZhcmlhYmxlIGZvciB0cmFja2luZyB0aGUgbW9zdCByZWNlbnQgZmlyc3Qgb3B0aW9uLlxuICAgICAgICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIGF2b2lkIGNhdXNpbmcgdGhlIGxpc3QgdG9cbiAgICAgICAgICAvLyBzY3JvbGwgdG8gdGhlIHRvcCB3aGVuIG9wdGlvbnMgYXJlIGFkZGVkIHRvIHRoZSBib3R0b20gb2ZcbiAgICAgICAgICAvLyB0aGUgbGlzdCAoZWc6IGluZmluaXRlIHNjcm9sbCksIHdlIGNvbXBhcmUgb25seVxuICAgICAgICAgIC8vIHRoZSBjaGFuZ2VzIHRvIHRoZSBmaXJzdCBvcHRpb25zIHRvIGRldGVybWluZSBpZiB3ZVxuICAgICAgICAgIC8vIHNob3VsZCBzZXQgdGhlIGZpcnN0IGl0ZW0gYXMgYWN0aXZlLlxuICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgdW5uZWNlc3Nhcnkgc2Nyb2xsaW5nIHRvIHRoZSB0b3Agb2YgdGhlIGxpc3RcbiAgICAgICAgICAvLyB3aGVuIG9wdGlvbnMgYXJlIGFwcGVuZGVkLCBidXQgYWxsb3dzIHRoZSBmaXJzdCBpdGVtXG4gICAgICAgICAgLy8gaW4gdGhlIGxpc3QgdG8gYmUgc2V0IGFzIGFjdGl2ZSBieSBkZWZhdWx0IHdoZW4gdGhlcmVcbiAgICAgICAgICAvLyBpcyBubyBhY3RpdmUgc2VsZWN0aW9uXG4gICAgICAgICAgbGV0IHByZXZpb3VzRmlyc3RPcHRpb24gPVxuICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy50b0FycmF5KClbdGhpcy5nZXRPcHRpb25zTGVuZ3RoT2Zmc2V0KCldO1xuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuY2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgLy8gYXZvaWQgXCJleHByZXNzaW9uIGhhcyBiZWVuIGNoYW5nZWRcIiBlcnJvclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBRdWVyeUxpc3QgdG8gYW4gYXJyYXlcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5fb3B0aW9ucy50b0FycmF5KCk7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGUgdHJ1ZSBmaXJzdCBpdGVtIGlzIG9mZnNldCBieSAxXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEZpcnN0T3B0aW9uID1cbiAgICAgICAgICAgICAgICAgIG9wdGlvbnNbdGhpcy5nZXRPcHRpb25zTGVuZ3RoT2Zmc2V0KCldO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qga2V5TWFuYWdlciA9IHRoaXMubWF0U2VsZWN0Ll9rZXlNYW5hZ2VyO1xuICAgICAgICAgICAgICAgIGlmIChrZXlNYW5hZ2VyICYmIHRoaXMubWF0U2VsZWN0LnBhbmVsT3Blbikge1xuICAgICAgICAgICAgICAgICAgLy8gc2V0IGZpcnN0IGl0ZW0gYWN0aXZlIGFuZCBpbnB1dCB3aWR0aFxuXG4gICAgICAgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIGZpcnN0IG9wdGlvbiBpbiB0aGVzZSBjaGFuZ2VzIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBwcmV2aW91cy5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0T3B0aW9uSXNDaGFuZ2VkID0gIXRoaXMubWF0U2VsZWN0LmNvbXBhcmVXaXRoKFxuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0ZpcnN0T3B0aW9uLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Rmlyc3RPcHRpb24sXG4gICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAvLyBDQVNFOiBUaGUgZmlyc3Qgb3B0aW9uIGlzIGRpZmZlcmVudCBub3cuXG4gICAgICAgICAgICAgICAgICAvLyBJbmRpY2lhdGVzIHdlIHNob3VsZCBzZXQgaXQgYXMgYWN0aXZlIGFuZCBzY3JvbGwgdG8gdGhlIHRvcC5cbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RPcHRpb25Jc0NoYW5nZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgIWtleU1hbmFnZXIuYWN0aXZlSXRlbSB8fFxuICAgICAgICAgICAgICAgICAgICAhb3B0aW9ucy5maW5kKG9wdGlvbiA9PlxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0U2VsZWN0LmNvbXBhcmVXaXRoKG9wdGlvbiwga2V5TWFuYWdlci5hY3RpdmVJdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleU1hbmFnZXIuc2V0Rmlyc3RJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIC8vIHdhaXQgZm9yIHBhbmVsIHdpZHRoIGNoYW5nZXNcbiAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUlucHV0V2lkdGgoKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBvdXIgcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgcHJldmlvdXNGaXJzdE9wdGlvbiA9IGN1cnJlbnRGaXJzdE9wdGlvbjtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgLy8gYWRkIG9yIHJlbW92ZSBjc3MgY2xhc3MgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdG8gc2hvdyB0aGUgbm8gZW50cmllcyBmb3VuZCBtZXNzYWdlXG4gICAgLy8gbm90ZTogdGhpcyBpcyBoYWNreVxuICAgIHRoaXMuX3Nob3dOb0VudHJpZXNGb3VuZCRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpKVxuICAgICAgLnN1YnNjcmliZShzaG93Tm9FbnRyaWVzRm91bmQgPT4ge1xuICAgICAgICAvLyBzZXQgbm8gZW50cmllcyBmb3VuZCBjbGFzcyBvbiBtYXQgb3B0aW9uXG4gICAgICAgIGlmICh0aGlzLm1hdE9wdGlvbikge1xuICAgICAgICAgIGlmIChzaG93Tm9FbnRyaWVzRm91bmQpIHtcbiAgICAgICAgICAgIHRoaXMubWF0T3B0aW9uXG4gICAgICAgICAgICAgIC5fZ2V0SG9zdEVsZW1lbnQoKVxuICAgICAgICAgICAgICAuY2xhc3NMaXN0LmFkZCgnbWF0LXNlbGVjdC1zZWFyY2gtbm8tZW50cmllcy1mb3VuZCcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1hdE9wdGlvblxuICAgICAgICAgICAgICAuX2dldEhvc3RFbGVtZW50KClcbiAgICAgICAgICAgICAgLmNsYXNzTGlzdC5yZW1vdmUoJ21hdC1zZWxlY3Qtc2VhcmNoLW5vLWVudHJpZXMtZm91bmQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgLy8gcmVzaXplIHRoZSBpbnB1dCB3aWR0aCB3aGVuIHRoZSB2aWV3cG9ydCBpcyByZXNpemVkLCBpLmUuIHRoZSB0cmlnZ2VyIHdpZHRoIGNvdWxkIHBvdGVudGlhbGx5IGJlIHJlc2l6ZWRcbiAgICB0aGlzLl92aWV3cG9ydFJ1bGVyXG4gICAgICAuY2hhbmdlKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm1hdFNlbGVjdC5wYW5lbE9wZW4pIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUlucHV0V2lkdGgoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLmluaXRNdWx0aXBsZUhhbmRsaW5nKCk7XG5cbiAgICB0aGlzLm9wdGlvbnNMaXN0JC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgLy8gdXBkYXRlIHZpZXcgd2hlbiBhdmFpbGFibGUgb3B0aW9ucyBjaGFuZ2VcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBfZW1pdFNlbGVjdEFsbEJvb2xlYW5Ub1BhcmVudChzdGF0ZTogYm9vbGVhbikge1xuICAgIHRoaXMudG9nZ2xlQWxsLmVtaXQoc3RhdGUpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fb25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLl9vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxuXG4gIF9pc1RvZ2dsZUFsbENoZWNrYm94VmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tYXRTZWxlY3QubXVsdGlwbGUgJiYgdGhpcy5zaG93VG9nZ2xlQWxsQ2hlY2tib3g7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUga2V5IGRvd24gZXZlbnQgd2l0aCBNYXRTZWxlY3QuXG4gICAqIEFsbG93cyBlLmcuIHNlbGVjdGluZyB3aXRoIGVudGVyIGtleSwgbmF2aWdhdGlvbiB3aXRoIGFycm93IGtleXMsIGV0Yy5cbiAgICogQHBhcmFtIGV2ZW50XG4gICAqL1xuICBfaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIC8vIFByZXZlbnQgcHJvcGFnYXRpb24gZm9yIGFsbCBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBpbiBvcmRlciB0byBhdm9pZCBzZWxlY3Rpb24gaXNzdWVzXG4gICAgaWYgKFxuICAgICAgKGV2ZW50LmtleSAmJiBldmVudC5rZXkubGVuZ3RoID09PSAxKSB8fFxuICAgICAgKGV2ZW50LmtleUNvZGUgPj0gQSAmJiBldmVudC5rZXlDb2RlIDw9IFopIHx8XG4gICAgICAoZXZlbnQua2V5Q29kZSA+PSBaRVJPICYmIGV2ZW50LmtleUNvZGUgPD0gTklORSkgfHxcbiAgICAgIGV2ZW50LmtleUNvZGUgPT09IFNQQUNFIHx8XG4gICAgICAodGhpcy5wcmV2ZW50SG9tZUVuZEtleVByb3BhZ2F0aW9uICYmXG4gICAgICAgIChldmVudC5rZXlDb2RlID09PSBIT01FIHx8IGV2ZW50LmtleUNvZGUgPT09IEVORCkpXG4gICAgKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYXRTZWxlY3QubXVsdGlwbGUgJiYgZXZlbnQua2V5ICYmIGV2ZW50LmtleUNvZGUgPT09IEVOVEVSKSB7XG4gICAgICAvLyBSZWdhaW4gZm9jdXMgYWZ0ZXIgbXVsdGlzZWxlY3QsIHNvIHdlIGNhbiBmdXJ0aGVyIHR5cGVcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fZm9jdXMoKSk7XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBjYXNlIGlmIGNsaWNrIEVzY2FwZSwgaWYgaW5wdXQgaXMgZW1wdHksIGNsb3NlIHRoZSBkcm9wZG93biwgaWYgbm90LCBlbXB0eSBvdXQgdGhlIHNlYXJjaCBmaWVsZFxuICAgIGlmIChcbiAgICAgIHRoaXMuZW5hYmxlQ2xlYXJPbkVzY2FwZVByZXNzZWQgPT09IHRydWUgJiZcbiAgICAgIGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRSAmJlxuICAgICAgdGhpcy52YWx1ZVxuICAgICkge1xuICAgICAgdGhpcy5fcmVzZXQodHJ1ZSk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUga2V5IHVwIGV2ZW50IHdpdGggTWF0U2VsZWN0LlxuICAgKiBBbGxvd3MgZS5nLiB0aGUgYW5ub3VuY2luZyBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZURlc2NlbmRhbnQgYnkgc2NyZWVuIHJlYWRlcnMuXG4gICAqL1xuICBfaGFuZGxlS2V5dXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gVVBfQVJST1cgfHwgZXZlbnQua2V5Q29kZSA9PT0gRE9XTl9BUlJPVykge1xuICAgICAgY29uc3QgYXJpYUFjdGl2ZURlc2NlbmRhbnRJZCA9IHRoaXMubWF0U2VsZWN0Ll9nZXRBcmlhQWN0aXZlRGVzY2VuZGFudCgpO1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9vcHRpb25zXG4gICAgICAgIC50b0FycmF5KClcbiAgICAgICAgLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IGFyaWFBY3RpdmVEZXNjZW5kYW50SWQpO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLnVuc2VsZWN0QWN0aXZlRGVzY2VuZGFudCgpO1xuXG4gICAgICAgIGNvbnN0IHRlbXAgPSB0aGlzLl9vcHRpb25zLnRvQXJyYXkoKTtcbiAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50ID0gdGVtcFtpbmRleF0uX2dldEhvc3RFbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsICd0cnVlJyk7XG5cbiAgICAgICAgdGhpcy5zZWFyY2hTZWxlY3RJbnB1dD8ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsXG4gICAgICAgICAgYXJpYUFjdGl2ZURlc2NlbmRhbnRJZCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sYXN0RXh0ZXJuYWxJbnB1dFZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5fZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy51bnNlbGVjdEFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nIHwgbnVsbCkgPT4gdm9pZCkge1xuICAgIHRoaXMuX2Zvcm1Db250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gdGhpcy5fbGFzdEV4dGVybmFsSW5wdXRWYWx1ZSksXG4gICAgICAgIHRhcCgoKSA9PiAodGhpcy5fbGFzdEV4dGVybmFsSW5wdXRWYWx1ZSA9IHVuZGVmaW5lZCkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoZm4pO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzZXMgdGhlIHNlYXJjaCBpbnB1dCBmaWVsZFxuICAgKi9cbiAgcHVibGljIF9mb2N1cygpIHtcbiAgICBpZiAoIXRoaXMuc2VhcmNoU2VsZWN0SW5wdXQgfHwgIXRoaXMubWF0U2VsZWN0LnBhbmVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIHNhdmUgYW5kIHJlc3RvcmUgc2Nyb2xsVG9wIG9mIHBhbmVsLCBzaW5jZSBpdCB3aWxsIGJlIHJlc2V0IGJ5IGZvY3VzKClcbiAgICAvLyBub3RlOiB0aGlzIGlzIGhhY2t5XG4gICAgY29uc3QgcGFuZWwgPSB0aGlzLm1hdFNlbGVjdC5wYW5lbC5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHNjcm9sbFRvcCA9IHBhbmVsLnNjcm9sbFRvcDtcblxuICAgIC8vIGZvY3VzXG4gICAgdGhpcy5zZWFyY2hTZWxlY3RJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cbiAgICBwYW5lbC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBjdXJyZW50IHNlYXJjaCB2YWx1ZVxuICAgKiBAcGFyYW0gZm9jdXMgd2hldGhlciB0byBmb2N1cyBhZnRlciByZXNldHRpbmdcbiAgICovXG4gIHB1YmxpYyBfcmVzZXQoZm9jdXM/OiBib29sZWFuKSB7XG4gICAgdGhpcy5fZm9ybUNvbnRyb2wuc2V0VmFsdWUoJycpO1xuICAgIGlmIChmb2N1cykge1xuICAgICAgdGhpcy5fZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgaGFuZGxpbmcgPG1hdC1zZWxlY3QgW211bHRpcGxlXT1cInRydWVcIj5cbiAgICogTm90ZTogdG8gaW1wcm92ZSB0aGlzIGNvZGUsIG1hdC1zZWxlY3Qgc2hvdWxkIGJlIGV4dGVuZGVkIHRvIGFsbG93IGRpc2FibGluZyByZXNldHRpbmcgdGhlIHNlbGVjdGlvbiB3aGlsZSBmaWx0ZXJpbmcuXG4gICAqL1xuICBwcml2YXRlIGluaXRNdWx0aXBsZUhhbmRsaW5nKCkge1xuICAgIGlmICghdGhpcy5tYXRTZWxlY3QubmdDb250cm9sKSB7XG4gICAgICBpZiAodGhpcy5tYXRTZWxlY3QubXVsdGlwbGUpIHtcbiAgICAgICAgLy8gbm90ZTogdGhlIGFjY2VzcyB0byBtYXRTZWxlY3QubmdDb250cm9sIChpbnN0ZWFkIG9mIG1hdFNlbGVjdC52YWx1ZSAvIG1hdFNlbGVjdC52YWx1ZUNoYW5nZXMpXG4gICAgICAgIC8vIGlzIG5lY2Vzc2FyeSB0byBwcm9wZXJseSB3b3JrIGluIG11bHRpLXNlbGVjdGlvbiBtb2RlLlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICd0aGUgbWF0LXNlbGVjdCBjb250YWluaW5nIG5neC1tYXQtc2VsZWN0LXNlYXJjaCBtdXN0IGhhdmUgYSBuZ01vZGVsIG9yIGZvcm1Db250cm9sIGRpcmVjdGl2ZSB3aGVuIG11bHRpcGxlPXRydWUnLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBpZiA8bWF0LXNlbGVjdCBbbXVsdGlwbGVdPVwidHJ1ZVwiPlxuICAgIC8vIHN0b3JlIHByZXZpb3VzbHkgc2VsZWN0ZWQgdmFsdWVzIGFuZCByZXN0b3JlIHRoZW0gd2hlbiB0aGV5IGFyZSBkZXNlbGVjdGVkXG4gICAgLy8gYmVjYXVzZSB0aGUgb3B0aW9uIGlzIG5vdCBhdmFpbGFibGUgd2hpbGUgd2UgYXJlIGN1cnJlbnRseSBmaWx0ZXJpbmdcbiAgICB0aGlzLnByZXZpb3VzU2VsZWN0ZWRWYWx1ZXMgPSB0aGlzLm1hdFNlbGVjdC5uZ0NvbnRyb2wudmFsdWU7XG5cbiAgICB0aGlzLm1hdFNlbGVjdC5uZ0NvbnRyb2wudmFsdWVDaGFuZ2VzXG4gICAgICA/LnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSkpXG4gICAgICAuc3Vic2NyaWJlKHZhbHVlcyA9PiB7XG4gICAgICAgIGxldCByZXN0b3JlU2VsZWN0ZWRWYWx1ZXMgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMubWF0U2VsZWN0Lm11bHRpcGxlKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKHRoaXMuYWx3YXlzUmVzdG9yZVNlbGVjdGVkT3B0aW9uc011bHRpIHx8XG4gICAgICAgICAgICAgICh0aGlzLl9mb3JtQ29udHJvbC52YWx1ZSAmJiB0aGlzLl9mb3JtQ29udHJvbC52YWx1ZS5sZW5ndGgpKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2aW91c1NlbGVjdGVkVmFsdWVzICYmXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KHRoaXMucHJldmlvdXNTZWxlY3RlZFZhbHVlcylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICghdmFsdWVzIHx8ICFBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcbiAgICAgICAgICAgICAgdmFsdWVzID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvcHRpb25WYWx1ZXMgPSB0aGlzLm1hdFNlbGVjdC5vcHRpb25zLm1hcChcbiAgICAgICAgICAgICAgb3B0aW9uID0+IG9wdGlvbi52YWx1ZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzU2VsZWN0ZWRWYWx1ZXMuZm9yRWFjaChwcmV2aW91c1ZhbHVlID0+IHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICF2YWx1ZXMuc29tZSgodjogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgdGhpcy5tYXRTZWxlY3QuY29tcGFyZVdpdGgodiwgcHJldmlvdXNWYWx1ZSksXG4gICAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICAgICFvcHRpb25WYWx1ZXMuc29tZSh2ID0+XG4gICAgICAgICAgICAgICAgICB0aGlzLm1hdFNlbGVjdC5jb21wYXJlV2l0aCh2LCBwcmV2aW91c1ZhbHVlKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIGlmIGEgdmFsdWUgdGhhdCB3YXMgc2VsZWN0ZWQgYmVmb3JlIGlzIGRlc2VsZWN0ZWQgYW5kIG5vdCBmb3VuZCBpbiB0aGUgb3B0aW9ucywgaXQgd2FzIGRlc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAvLyBkdWUgdG8gdGhlIGZpbHRlcmluZywgc28gd2UgcmVzdG9yZSBpdC5cbiAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChwcmV2aW91c1ZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXN0b3JlU2VsZWN0ZWRWYWx1ZXMgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmV2aW91c1NlbGVjdGVkVmFsdWVzID0gdmFsdWVzO1xuXG4gICAgICAgIGlmIChyZXN0b3JlU2VsZWN0ZWRWYWx1ZXMpIHtcbiAgICAgICAgICB0aGlzLm1hdFNlbGVjdC5fb25DaGFuZ2UodmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogIFNldCB0aGUgd2lkdGggb2YgdGhlIGlubmVyU2VsZWN0U2VhcmNoIHRvIGZpdCBldmVuIGN1c3RvbSBzY3JvbGxiYXJzXG4gICAqICBBbmQgc3VwcG9ydCBhbGwgT3BlcmF0aW9uIFN5c3RlbXNcbiAgICovXG4gIHB1YmxpYyB1cGRhdGVJbnB1dFdpZHRoKCkge1xuICAgIGlmICghdGhpcy5pbm5lclNlbGVjdFNlYXJjaCB8fCAhdGhpcy5pbm5lclNlbGVjdFNlYXJjaC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBlbGVtZW50OiBIVE1MRWxlbWVudCA9IHRoaXMuaW5uZXJTZWxlY3RTZWFyY2gubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50ICE9PSBudWxsKSB7XG4gICAgICBsZXQgcGFuZWxFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgICAgd2hpbGUgKChlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50KSkge1xuICAgICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ21hdC1zZWxlY3QtcGFuZWwnKSkge1xuICAgICAgICAgIHBhbmVsRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwYW5lbEVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5pbm5lclNlbGVjdFNlYXJjaC5uYXRpdmVFbGVtZW50LnN0eWxlLndpZHRoID1cbiAgICAgICAgICBwYW5lbEVsZW1lbnQuY2xpZW50V2lkdGggKyAncHgnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIG9mZnNldCB0byBsZW5ndGggdGhhdCBjYW4gYmUgY2F1c2VkIGJ5IHRoZSBvcHRpb25hbCBtYXRPcHRpb24gdXNlZCBhcyBhIHNlYXJjaCBpbnB1dC5cbiAgICovXG4gIHByaXZhdGUgZ2V0T3B0aW9uc0xlbmd0aE9mZnNldCgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLm1hdE9wdGlvbikge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdW5zZWxlY3RBY3RpdmVEZXNjZW5kYW50KCkge1xuICAgIHRoaXMuYWN0aXZlRGVzY2VuZGFudD8ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJyk7XG4gICAgdGhpcy5zZWFyY2hTZWxlY3RJbnB1dD8ubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXG4gICAgICAnYXJpYS1hY3RpdmVkZXNjZW5kYW50JyxcbiAgICApO1xuICB9XG59XG4iLCI8IS0tXG5Db3B5cmlnaHQgKGMpIDIwMTggQml0aG9zdCBHbWJIIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cblVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG5mb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4tLT5cbjwhLS0gUGxhY2Vob2xkZXIgdG8gYWRqdXN0IHZlcnRpY2FsIG9mZnNldCBvZiB0aGUgbWF0LW9wdGlvbiBlbGVtZW50cyAtLT5cbjxpbnB1dCBtYXRJbnB1dCBjbGFzcz1cIm1hdC1zZWxlY3Qtc2VhcmNoLWlucHV0IG1hdC1zZWxlY3Qtc2VhcmNoLWhpZGRlblwiIC8+XG5cbjwhLS0gTm90ZTogdGhlICBtYXQtZGF0ZXBpY2tlci1jb250ZW50IG1hdC10YWItaGVhZGVyIGFyZSBuZWVkZWQgdG8gaW5oZXJpdCB0aGUgbWF0ZXJpYWwgdGhlbWUgY29sb3JzLCBzZWUgUFIgIzIyIC0tPlxuPGRpdlxuICAjaW5uZXJTZWxlY3RTZWFyY2hcbiAgY2xhc3M9XCJtYXQtc2VsZWN0LXNlYXJjaC1pbm5lciBtYXQtdHlwb2dyYXBoeSBtYXQtZGF0ZXBpY2tlci1jb250ZW50IG1hdC10YWItaGVhZGVyXCJcbiAgW25nQ2xhc3NdPVwie1xuICAgICdtYXQtc2VsZWN0LXNlYXJjaC1pbm5lci1tdWx0aXBsZSc6IG1hdFNlbGVjdC5tdWx0aXBsZSxcbiAgICAnbWF0LXNlbGVjdC1zZWFyY2gtaW5uZXItdG9nZ2xlLWFsbCc6IF9pc1RvZ2dsZUFsbENoZWNrYm94VmlzaWJsZSgpLFxuICB9XCJcbj5cbiAgPG1hdC1jaGVja2JveFxuICAgICpuZ0lmPVwiX2lzVG9nZ2xlQWxsQ2hlY2tib3hWaXNpYmxlKClcIlxuICAgIFtjb2xvcl09XCJtYXRGb3JtRmllbGQuY29sb3JcIlxuICAgIGNsYXNzPVwibWF0LXNlbGVjdC1zZWFyY2gtdG9nZ2xlLWFsbC1jaGVja2JveFwiXG4gICAgW2NoZWNrZWRdPVwidG9nZ2xlQWxsQ2hlY2tib3hDaGVja2VkXCJcbiAgICBbaW5kZXRlcm1pbmF0ZV09XCJ0b2dnbGVBbGxDaGVja2JveEluZGV0ZXJtaW5hdGVcIlxuICAgIFttYXRUb29sdGlwXT1cInRvZ2dsZUFsbENoZWNrYm94VG9vbHRpcE1lc3NhZ2VcIlxuICAgIG1hdFRvb2x0aXBDbGFzcz1cIm5neC1tYXQtc2VsZWN0LXNlYXJjaC10b2dnbGUtYWxsLXRvb2x0aXBcIlxuICAgIFttYXRUb29sdGlwUG9zaXRpb25dPVwidG9nZ2xlQWxsQ2hlY2tib3hUb29sdGlwUG9zaXRpb25cIlxuICAgIChjaGFuZ2UpPVwiX2VtaXRTZWxlY3RBbGxCb29sZWFuVG9QYXJlbnQoJGV2ZW50LmNoZWNrZWQpXCJcbiAgPjwvbWF0LWNoZWNrYm94PlxuXG4gIDxpbnB1dFxuICAgIGNsYXNzPVwibWF0LXNlbGVjdC1zZWFyY2gtaW5wdXRcIlxuICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgW3R5cGVdPVwidHlwZVwiXG4gICAgW2Zvcm1Db250cm9sXT1cIl9mb3JtQ29udHJvbFwiXG4gICAgI3NlYXJjaFNlbGVjdElucHV0XG4gICAgKGtleWRvd24pPVwiX2hhbmRsZUtleWRvd24oJGV2ZW50KVwiXG4gICAgKGtleXVwKT1cIl9oYW5kbGVLZXl1cCgkZXZlbnQpXCJcbiAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyTGFiZWxcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgLz5cbiAgPG1hdC1pY29uICpuZ0lmPVwidmFsdWUgPT09ICcnICYmICFzZWFyY2hpbmdcIiBjbGFzcz1cInN1ZmZpeFwiPnNlYXJjaDwvbWF0LWljb24+XG4gIDxtYXQtc3Bpbm5lclxuICAgICpuZ0lmPVwic2VhcmNoaW5nXCJcbiAgICBjbGFzcz1cIm1hdC1zZWxlY3Qtc2VhcmNoLXNwaW5uZXJcIlxuICAgIGRpYW1ldGVyPVwiMTZcIlxuICA+PC9tYXQtc3Bpbm5lcj5cblxuICA8YnV0dG9uXG4gICAgKm5nSWY9XCIhaGlkZUNsZWFyU2VhcmNoQnV0dG9uICYmIHZhbHVlICYmICFzZWFyY2hpbmdcIlxuICAgIG1hdC1pY29uLWJ1dHRvblxuICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXG4gICAgKGNsaWNrKT1cIl9yZXNldCh0cnVlKVwiXG4gICAgY2xhc3M9XCJtYXQtc2VsZWN0LXNlYXJjaC1jbGVhclwiXG4gID5cbiAgICA8bmctY29udGVudFxuICAgICAgKm5nSWY9XCJjbGVhckljb247IGVsc2UgZGVmYXVsdEljb25cIlxuICAgICAgc2VsZWN0PVwiW21hdFNlbGVjdFNlYXJjaENsZWFyXVwiXG4gICAgPjwvbmctY29udGVudD5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRJY29uPlxuICAgICAgPG1hdC1pY29uIFtzdmdJY29uXT1cImNsb3NlU3ZnSWNvblwiPlxuICAgICAgICB7eyAhY2xvc2VTdmdJY29uID8gY2xvc2VJY29uIDogbnVsbCB9fVxuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2J1dHRvbj5cblxuICA8bmctY29udGVudCBzZWxlY3Q9XCIubWF0LXNlbGVjdC1zZWFyY2gtY3VzdG9tLWhlYWRlci1jb250ZW50XCI+PC9uZy1jb250ZW50PlxuXG4gIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuPC9kaXY+XG5cbjxkaXZcbiAgKm5nSWY9XCJfc2hvd05vRW50cmllc0ZvdW5kJCB8IGFzeW5jXCJcbiAgY2xhc3M9XCJtYXQtc2VsZWN0LXNlYXJjaC1uby1lbnRyaWVzLWZvdW5kXCJcbj5cbiAgPG5nLWNvbnRlbnRcbiAgICAqbmdJZj1cIm5vRW50cmllc0ZvdW5kOyBlbHNlIGRlZmF1bHROb0VudHJpZXNGb3VuZFwiXG4gICAgc2VsZWN0PVwiW21hdFNlbGVjdE5vRW50cmllc0ZvdW5kXVwiXG4gID48L25nLWNvbnRlbnQ+XG4gIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdE5vRW50cmllc0ZvdW5kPnt7IG5vRW50cmllc0ZvdW5kTGFiZWwgfX08L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
|