ngx-tethys 18.2.7 → 19.0.0-next.1
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/CHANGELOG.md +14 -0
- package/badge/badge.component.d.ts +21 -3
- package/cascader/cascader-search-option.component.d.ts +6 -3
- package/core/store/store.d.ts +1 -1
- package/date-picker/abstract-picker.component.d.ts +1 -1
- package/date-picker/abstract-picker.directive.d.ts +1 -1
- package/date-picker/lib/calendar/calendar-header.component.d.ts +1 -1
- package/date-picker/lib/calendar/calendar-table.component.d.ts +1 -1
- package/date-range/date-range.component.d.ts +12 -2
- package/divider/divider.component.d.ts +2 -8
- package/dropdown/dropdown-menu.component.d.ts +1 -1
- package/empty/empty.component.d.ts +1 -4
- package/fesm2022/ngx-tethys-action.mjs +12 -12
- package/fesm2022/ngx-tethys-action.mjs.map +1 -1
- package/fesm2022/ngx-tethys-affix.mjs +8 -8
- package/fesm2022/ngx-tethys-affix.mjs.map +1 -1
- package/fesm2022/ngx-tethys-alert.mjs +12 -12
- package/fesm2022/ngx-tethys-alert.mjs.map +1 -1
- package/fesm2022/ngx-tethys-anchor.mjs +11 -13
- package/fesm2022/ngx-tethys-anchor.mjs.map +1 -1
- package/fesm2022/ngx-tethys-arrow-switcher.mjs +9 -9
- package/fesm2022/ngx-tethys-arrow-switcher.mjs.map +1 -1
- package/fesm2022/ngx-tethys-autocomplete.mjs +20 -20
- package/fesm2022/ngx-tethys-autocomplete.mjs.map +1 -1
- package/fesm2022/ngx-tethys-avatar.mjs +26 -26
- package/fesm2022/ngx-tethys-avatar.mjs.map +1 -1
- package/fesm2022/ngx-tethys-back-top.mjs +10 -10
- package/fesm2022/ngx-tethys-back-top.mjs.map +1 -1
- package/fesm2022/ngx-tethys-badge.mjs +9 -9
- package/fesm2022/ngx-tethys-badge.mjs.map +1 -1
- package/fesm2022/ngx-tethys-breadcrumb.mjs +13 -15
- package/fesm2022/ngx-tethys-breadcrumb.mjs.map +1 -1
- package/fesm2022/ngx-tethys-button.mjs +16 -16
- package/fesm2022/ngx-tethys-button.mjs.map +1 -1
- package/fesm2022/ngx-tethys-calendar.mjs +20 -20
- package/fesm2022/ngx-tethys-calendar.mjs.map +1 -1
- package/fesm2022/ngx-tethys-card.mjs +15 -15
- package/fesm2022/ngx-tethys-card.mjs.map +1 -1
- package/fesm2022/ngx-tethys-carousel.mjs +15 -15
- package/fesm2022/ngx-tethys-carousel.mjs.map +1 -1
- package/fesm2022/ngx-tethys-cascader.mjs +23 -24
- package/fesm2022/ngx-tethys-cascader.mjs.map +1 -1
- package/fesm2022/ngx-tethys-checkbox.mjs +9 -9
- package/fesm2022/ngx-tethys-checkbox.mjs.map +1 -1
- package/fesm2022/ngx-tethys-collapse.mjs +12 -12
- package/fesm2022/ngx-tethys-collapse.mjs.map +1 -1
- package/fesm2022/ngx-tethys-color-picker.mjs +38 -38
- package/fesm2022/ngx-tethys-color-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-comment.mjs +15 -15
- package/fesm2022/ngx-tethys-comment.mjs.map +1 -1
- package/fesm2022/ngx-tethys-copy.mjs +8 -8
- package/fesm2022/ngx-tethys-copy.mjs.map +1 -1
- package/fesm2022/ngx-tethys-core.mjs +21 -21
- package/fesm2022/ngx-tethys-core.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-picker.mjs +141 -141
- package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-range.mjs +14 -14
- package/fesm2022/ngx-tethys-date-range.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dialog.mjs +27 -28
- package/fesm2022/ngx-tethys-dialog.mjs.map +1 -1
- package/fesm2022/ngx-tethys-divider.mjs +8 -9
- package/fesm2022/ngx-tethys-divider.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dot.mjs +8 -8
- package/fesm2022/ngx-tethys-dot.mjs.map +1 -1
- package/fesm2022/ngx-tethys-drag-drop.mjs +20 -20
- package/fesm2022/ngx-tethys-drag-drop.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dropdown.mjs +47 -48
- package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
- package/fesm2022/ngx-tethys-empty.mjs +12 -12
- package/fesm2022/ngx-tethys-empty.mjs.map +1 -1
- package/fesm2022/ngx-tethys-flexible-text.mjs +8 -8
- package/fesm2022/ngx-tethys-flexible-text.mjs.map +1 -1
- package/fesm2022/ngx-tethys-form.mjs +44 -44
- package/fesm2022/ngx-tethys-form.mjs.map +1 -1
- package/fesm2022/ngx-tethys-fullscreen.mjs +14 -14
- package/fesm2022/ngx-tethys-fullscreen.mjs.map +1 -1
- package/fesm2022/ngx-tethys-grid.mjs +35 -38
- package/fesm2022/ngx-tethys-grid.mjs.map +1 -1
- package/fesm2022/ngx-tethys-guider.mjs +18 -18
- package/fesm2022/ngx-tethys-guider.mjs.map +1 -1
- package/fesm2022/ngx-tethys-i18n.mjs +3 -3
- package/fesm2022/ngx-tethys-i18n.mjs.map +1 -1
- package/fesm2022/ngx-tethys-icon.mjs +11 -11
- package/fesm2022/ngx-tethys-icon.mjs.map +1 -1
- package/fesm2022/ngx-tethys-image.mjs +19 -19
- package/fesm2022/ngx-tethys-image.mjs.map +1 -1
- package/fesm2022/ngx-tethys-input-number.mjs +11 -11
- package/fesm2022/ngx-tethys-input-number.mjs.map +1 -1
- package/fesm2022/ngx-tethys-input.mjs +23 -23
- package/fesm2022/ngx-tethys-input.mjs.map +1 -1
- package/fesm2022/ngx-tethys-layout.mjs +63 -64
- package/fesm2022/ngx-tethys-layout.mjs.map +1 -1
- package/fesm2022/ngx-tethys-list.mjs +19 -19
- package/fesm2022/ngx-tethys-list.mjs.map +1 -1
- package/fesm2022/ngx-tethys-loading.mjs +9 -9
- package/fesm2022/ngx-tethys-loading.mjs.map +1 -1
- package/fesm2022/ngx-tethys-mention.mjs +12 -12
- package/fesm2022/ngx-tethys-mention.mjs.map +1 -1
- package/fesm2022/ngx-tethys-menu.mjs +29 -29
- package/fesm2022/ngx-tethys-menu.mjs.map +1 -1
- package/fesm2022/ngx-tethys-message.mjs +25 -26
- package/fesm2022/ngx-tethys-message.mjs.map +1 -1
- package/fesm2022/ngx-tethys-nav.mjs +24 -25
- package/fesm2022/ngx-tethys-nav.mjs.map +1 -1
- package/fesm2022/ngx-tethys-notify.mjs +20 -20
- package/fesm2022/ngx-tethys-notify.mjs.map +1 -1
- package/fesm2022/ngx-tethys-pagination.mjs +15 -15
- package/fesm2022/ngx-tethys-pagination.mjs.map +1 -1
- package/fesm2022/ngx-tethys-popover.mjs +23 -23
- package/fesm2022/ngx-tethys-popover.mjs.map +1 -1
- package/fesm2022/ngx-tethys-progress.mjs +17 -17
- package/fesm2022/ngx-tethys-progress.mjs.map +1 -1
- package/fesm2022/ngx-tethys-property-operation.mjs +12 -12
- package/fesm2022/ngx-tethys-property-operation.mjs.map +1 -1
- package/fesm2022/ngx-tethys-property.mjs +12 -12
- package/fesm2022/ngx-tethys-property.mjs.map +1 -1
- package/fesm2022/ngx-tethys-radio.mjs +15 -15
- package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
- package/fesm2022/ngx-tethys-rate.mjs +12 -13
- package/fesm2022/ngx-tethys-rate.mjs.map +1 -1
- package/fesm2022/ngx-tethys-resizable.mjs +17 -19
- package/fesm2022/ngx-tethys-resizable.mjs.map +1 -1
- package/fesm2022/ngx-tethys-result.mjs +9 -9
- package/fesm2022/ngx-tethys-result.mjs.map +1 -1
- package/fesm2022/ngx-tethys-segment.mjs +13 -13
- package/fesm2022/ngx-tethys-segment.mjs.map +1 -1
- package/fesm2022/ngx-tethys-select.mjs +16 -16
- package/fesm2022/ngx-tethys-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-shared.mjs +70 -70
- package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
- package/fesm2022/ngx-tethys-skeleton.mjs +23 -28
- package/fesm2022/ngx-tethys-skeleton.mjs.map +1 -1
- package/fesm2022/ngx-tethys-slide.mjs +34 -35
- package/fesm2022/ngx-tethys-slide.mjs.map +1 -1
- package/fesm2022/ngx-tethys-slider.mjs +9 -9
- package/fesm2022/ngx-tethys-slider.mjs.map +1 -1
- package/fesm2022/ngx-tethys-space.mjs +12 -12
- package/fesm2022/ngx-tethys-space.mjs.map +1 -1
- package/fesm2022/ngx-tethys-statistic.mjs +9 -9
- package/fesm2022/ngx-tethys-statistic.mjs.map +1 -1
- package/fesm2022/ngx-tethys-stepper.mjs +22 -22
- package/fesm2022/ngx-tethys-stepper.mjs.map +1 -1
- package/fesm2022/ngx-tethys-strength.mjs +8 -8
- package/fesm2022/ngx-tethys-strength.mjs.map +1 -1
- package/fesm2022/ngx-tethys-switch.mjs +9 -9
- package/fesm2022/ngx-tethys-switch.mjs.map +1 -1
- package/fesm2022/ngx-tethys-table.mjs +23 -23
- package/fesm2022/ngx-tethys-table.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tabs.mjs +15 -16
- package/fesm2022/ngx-tethys-tabs.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tag.mjs +11 -11
- package/fesm2022/ngx-tethys-tag.mjs.map +1 -1
- package/fesm2022/ngx-tethys-testing.mjs.map +1 -1
- package/fesm2022/ngx-tethys-time-picker.mjs +24 -24
- package/fesm2022/ngx-tethys-time-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-timeline.mjs +15 -16
- package/fesm2022/ngx-tethys-timeline.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tooltip.mjs +16 -16
- package/fesm2022/ngx-tethys-tooltip.mjs.map +1 -1
- package/fesm2022/ngx-tethys-transfer.mjs +13 -13
- package/fesm2022/ngx-tethys-transfer.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree-select.mjs +13 -13
- package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree.mjs +19 -19
- package/fesm2022/ngx-tethys-tree.mjs.map +1 -1
- package/fesm2022/ngx-tethys-typography.mjs +15 -15
- package/fesm2022/ngx-tethys-typography.mjs.map +1 -1
- package/fesm2022/ngx-tethys-upload.mjs +17 -17
- package/fesm2022/ngx-tethys-upload.mjs.map +1 -1
- package/fesm2022/ngx-tethys-util.mjs +2 -18
- package/fesm2022/ngx-tethys-util.mjs.map +1 -1
- package/fesm2022/ngx-tethys-vote.mjs +9 -9
- package/fesm2022/ngx-tethys-vote.mjs.map +1 -1
- package/fesm2022/ngx-tethys-watermark.mjs +8 -8
- package/fesm2022/ngx-tethys-watermark.mjs.map +1 -1
- package/fesm2022/ngx-tethys.mjs +1 -1
- package/fesm2022/ngx-tethys.mjs.map +1 -1
- package/input/input.component.d.ts +1 -1
- package/layout/header.component.d.ts +21 -3
- package/menu/group/menu-group.component.d.ts +6 -30
- package/message/abstract/abstract-message-container.component.d.ts +1 -1
- package/message/abstract/abstract-message.component.d.ts +1 -1
- package/nav/nav.component.d.ts +2 -2
- package/package.json +4 -172
- package/pagination/pagination.component.d.ts +45 -5
- package/property/property-item.component.d.ts +4 -2
- package/schematics/dependencies.js +3 -3
- package/schematics/ng-add/index.js +7 -3
- package/schematics/ng-update/core/complete.js +1 -2
- package/schematics/ng-update/migration-collection.json +4 -4
- package/schematics/ng-update/{update-18 → update-19}/index.js +4 -5
- package/schematics/ng-update/{update-18 → update-19}/index.spec.js +4 -4
- package/schematics/testing/get-json-content.js +1 -2
- package/schematics/testing/test-app.js +1 -2
- package/schematics/testing/test-project.js +1 -2
- package/schematics/testing/test-workspace.d.ts +0 -2
- package/schematics/testing/test-workspace.js +2 -2
- package/schematics/utils/create-tree-compiler-host.js +1 -2
- package/schematics/utils/create-tree-ts-parse-config-host.js +2 -2
- package/schematics/utils/get-angular-json.js +1 -2
- package/schematics/utils/get-project.js +1 -2
- package/schematics/utils/get-workspace-tsconfig.js +1 -2
- package/schematics/utils/package-config.js +2 -3
- package/schematics/utils/update-file.service.js +2 -2
- package/schematics/version.d.ts +1 -1
- package/schematics/version.js +1 -1
- package/shared/base-form-check.component.d.ts +1 -1
- package/shared/option/list-option/list-option.component.d.ts +1 -4
- package/shared/select/styles/select.mixin.scss +2 -1
- package/skeleton/skeleton-rectangle.component.d.ts +1 -4
- package/skeleton/stylized/bullet-list.component.d.ts +1 -9
- package/styles/bootstrap/utilities/_background.scss +2 -1
- package/styles/bootstrap/utilities/_text.scss +1 -1
- package/table/table.component.d.ts +1 -1
- package/upload/file-select-base.d.ts +1 -1
- package/esm2022/action/action.component.mjs +0 -174
- package/esm2022/action/action.module.mjs +0 -19
- package/esm2022/action/actions.component.mjs +0 -57
- package/esm2022/action/index.mjs +0 -4
- package/esm2022/action/ngx-tethys-action.mjs +0 -5
- package/esm2022/affix/affix.component.mjs +0 -243
- package/esm2022/affix/affix.module.mjs +0 -18
- package/esm2022/affix/index.mjs +0 -3
- package/esm2022/affix/ngx-tethys-affix.mjs +0 -5
- package/esm2022/affix/respond-events.mjs +0 -11
- package/esm2022/alert/alert.component.mjs +0 -98
- package/esm2022/alert/alert.directive.mjs +0 -25
- package/esm2022/alert/alert.module.mjs +0 -19
- package/esm2022/alert/index.mjs +0 -4
- package/esm2022/alert/ngx-tethys-alert.mjs +0 -5
- package/esm2022/anchor/anchor-link.component.mjs +0 -106
- package/esm2022/anchor/anchor.component.mjs +0 -266
- package/esm2022/anchor/anchor.module.mjs +0 -20
- package/esm2022/anchor/index.mjs +0 -4
- package/esm2022/anchor/ngx-tethys-anchor.mjs +0 -5
- package/esm2022/arrow-switcher/arrow-switcher.component.mjs +0 -130
- package/esm2022/arrow-switcher/index.mjs +0 -3
- package/esm2022/arrow-switcher/module.mjs +0 -21
- package/esm2022/arrow-switcher/ngx-tethys-arrow-switcher.mjs +0 -5
- package/esm2022/autocomplete/autocomplete.component.mjs +0 -182
- package/esm2022/autocomplete/autocomplete.trigger.directive.mjs +0 -275
- package/esm2022/autocomplete/index.mjs +0 -8
- package/esm2022/autocomplete/module.mjs +0 -67
- package/esm2022/autocomplete/ngx-tethys-autocomplete.mjs +0 -5
- package/esm2022/autocomplete/overlay/autocomplete-animations.mjs +0 -10
- package/esm2022/autocomplete/overlay/autocomplete-container.component.mjs +0 -64
- package/esm2022/autocomplete/overlay/autocomplete-ref.mjs +0 -18
- package/esm2022/autocomplete/overlay/autocomplete.config.mjs +0 -18
- package/esm2022/autocomplete/overlay/autocomplete.options.mjs +0 -6
- package/esm2022/autocomplete/overlay/autocomplete.service.mjs +0 -127
- package/esm2022/avatar/avatar-list/avatar-list.component.mjs +0 -76
- package/esm2022/avatar/avatar.component.mjs +0 -179
- package/esm2022/avatar/avatar.module.mjs +0 -33
- package/esm2022/avatar/avatar.pipe.mjs +0 -91
- package/esm2022/avatar/avatar.service.mjs +0 -27
- package/esm2022/avatar/index.mjs +0 -6
- package/esm2022/avatar/ngx-tethys-avatar.mjs +0 -5
- package/esm2022/back-top/back-top.component.mjs +0 -126
- package/esm2022/back-top/back-top.module.mjs +0 -18
- package/esm2022/back-top/index.mjs +0 -3
- package/esm2022/back-top/ngx-tethys-back-top.mjs +0 -5
- package/esm2022/badge/badge.component.mjs +0 -238
- package/esm2022/badge/badge.module.mjs +0 -18
- package/esm2022/badge/index.mjs +0 -3
- package/esm2022/badge/ngx-tethys-badge.mjs +0 -5
- package/esm2022/breadcrumb/breadcrumb-item.component.mjs +0 -49
- package/esm2022/breadcrumb/breadcrumb.component.mjs +0 -115
- package/esm2022/breadcrumb/index.mjs +0 -4
- package/esm2022/breadcrumb/module.mjs +0 -21
- package/esm2022/breadcrumb/ngx-tethys-breadcrumb.mjs +0 -5
- package/esm2022/button/button-group.component.mjs +0 -90
- package/esm2022/button/button-icon.component.mjs +0 -166
- package/esm2022/button/button.component.mjs +0 -216
- package/esm2022/button/button.module.mjs +0 -20
- package/esm2022/button/index.mjs +0 -5
- package/esm2022/button/ngx-tethys-button.mjs +0 -5
- package/esm2022/calendar/calendar-cells.mjs +0 -35
- package/esm2022/calendar/calendar-header.component.mjs +0 -117
- package/esm2022/calendar/calendar.component.mjs +0 -122
- package/esm2022/calendar/index.mjs +0 -5
- package/esm2022/calendar/module.mjs +0 -63
- package/esm2022/calendar/ngx-tethys-calendar.mjs +0 -5
- package/esm2022/card/card.component.mjs +0 -48
- package/esm2022/card/card.module.mjs +0 -19
- package/esm2022/card/content.component.mjs +0 -58
- package/esm2022/card/header.component.mjs +0 -42
- package/esm2022/card/index.mjs +0 -5
- package/esm2022/card/ngx-tethys-card.mjs +0 -5
- package/esm2022/carousel/carousel-item.directive.mjs +0 -37
- package/esm2022/carousel/carousel.component.mjs +0 -290
- package/esm2022/carousel/carousel.service.mjs +0 -74
- package/esm2022/carousel/engine/carousel-base.mjs +0 -43
- package/esm2022/carousel/engine/carousel-fade.mjs +0 -46
- package/esm2022/carousel/engine/carousel-noop.mjs +0 -28
- package/esm2022/carousel/engine/carousel-slide.mjs +0 -62
- package/esm2022/carousel/engine/index.mjs +0 -5
- package/esm2022/carousel/index.mjs +0 -5
- package/esm2022/carousel/module.mjs +0 -21
- package/esm2022/carousel/ngx-tethys-carousel.mjs +0 -5
- package/esm2022/carousel/typings.mjs +0 -2
- package/esm2022/cascader/cascader-li.component.mjs +0 -81
- package/esm2022/cascader/cascader-search-option.component.mjs +0 -73
- package/esm2022/cascader/cascader.component.mjs +0 -768
- package/esm2022/cascader/cascader.service.mjs +0 -558
- package/esm2022/cascader/index.mjs +0 -5
- package/esm2022/cascader/module.mjs +0 -62
- package/esm2022/cascader/ngx-tethys-cascader.mjs +0 -5
- package/esm2022/cascader/types.mjs +0 -2
- package/esm2022/checkbox/checkbox.component.mjs +0 -51
- package/esm2022/checkbox/index.mjs +0 -4
- package/esm2022/checkbox/module.mjs +0 -18
- package/esm2022/checkbox/ngx-tethys-checkbox.mjs +0 -5
- package/esm2022/collapse/collapse-item.component.mjs +0 -88
- package/esm2022/collapse/collapse.component.mjs +0 -79
- package/esm2022/collapse/index.mjs +0 -4
- package/esm2022/collapse/module.mjs +0 -22
- package/esm2022/collapse/ngx-tethys-collapse.mjs +0 -5
- package/esm2022/color-picker/color-picker-custom-panel.component.mjs +0 -38
- package/esm2022/color-picker/color-picker-panel.component.mjs +0 -100
- package/esm2022/color-picker/color-picker.component.mjs +0 -289
- package/esm2022/color-picker/constant.mjs +0 -73
- package/esm2022/color-picker/coordinates.directive.mjs +0 -73
- package/esm2022/color-picker/helpers/color.class.mjs +0 -281
- package/esm2022/color-picker/helpers/colors-table.class.mjs +0 -155
- package/esm2022/color-picker/helpers/rgba.class.mjs +0 -34
- package/esm2022/color-picker/index.mjs +0 -14
- package/esm2022/color-picker/module.mjs +0 -72
- package/esm2022/color-picker/ngx-tethys-color-picker.mjs +0 -5
- package/esm2022/color-picker/parts/alpha/alpha.component.mjs +0 -64
- package/esm2022/color-picker/parts/hue/hue.component.mjs +0 -54
- package/esm2022/color-picker/parts/indicator/indicator.component.mjs +0 -26
- package/esm2022/color-picker/parts/inputs/inputs.component.mjs +0 -61
- package/esm2022/color-picker/parts/saturation/saturation.component.mjs +0 -68
- package/esm2022/comment/comment-actions.directive.mjs +0 -19
- package/esm2022/comment/comment-content.directive.mjs +0 -19
- package/esm2022/comment/comment.component.mjs +0 -30
- package/esm2022/comment/comment.module.mjs +0 -41
- package/esm2022/comment/index.mjs +0 -5
- package/esm2022/comment/ngx-tethys-comment.mjs +0 -5
- package/esm2022/copy/copy.directive.mjs +0 -101
- package/esm2022/copy/index.mjs +0 -3
- package/esm2022/copy/module.mjs +0 -18
- package/esm2022/copy/ngx-tethys-copy.mjs +0 -5
- package/esm2022/core/animation/animation-consts.mjs +0 -23
- package/esm2022/core/animation/collapse.mjs +0 -12
- package/esm2022/core/animation/fade.mjs +0 -7
- package/esm2022/core/animation/index.mjs +0 -2
- package/esm2022/core/animation/public-api.mjs +0 -6
- package/esm2022/core/animation/thumb.mjs +0 -12
- package/esm2022/core/animation/zoom.mjs +0 -66
- package/esm2022/core/behaviors/constructor.mjs +0 -5
- package/esm2022/core/behaviors/control-value-accessor.mjs +0 -17
- package/esm2022/core/behaviors/decorators.mjs +0 -47
- package/esm2022/core/behaviors/disabled.mjs +0 -17
- package/esm2022/core/behaviors/focus-control.mjs +0 -31
- package/esm2022/core/behaviors/index.mjs +0 -11
- package/esm2022/core/behaviors/initialized.mjs +0 -12
- package/esm2022/core/behaviors/loading-done.mjs +0 -12
- package/esm2022/core/behaviors/mixin.mjs +0 -5
- package/esm2022/core/behaviors/tabindex.mjs +0 -21
- package/esm2022/core/behaviors/unsubscribe.mjs +0 -23
- package/esm2022/core/click-positioner.mjs +0 -36
- package/esm2022/core/color/color.mjs +0 -13
- package/esm2022/core/color/index.mjs +0 -2
- package/esm2022/core/debounce-time.mjs +0 -11
- package/esm2022/core/event-dispatchers/index.mjs +0 -2
- package/esm2022/core/index.mjs +0 -16
- package/esm2022/core/ngx-tethys-core.mjs +0 -5
- package/esm2022/core/overlay/abstract-overlay-container.mjs +0 -53
- package/esm2022/core/overlay/abstract-overlay-ref.mjs +0 -160
- package/esm2022/core/overlay/abstract-overlay.config.mjs +0 -70
- package/esm2022/core/overlay/abstract-overlay.service.mjs +0 -158
- package/esm2022/core/overlay/index.mjs +0 -10
- package/esm2022/core/overlay/interface.mjs +0 -2
- package/esm2022/core/overlay/overlay-position-map.mjs +0 -88
- package/esm2022/core/overlay/overlay.directive.mjs +0 -175
- package/esm2022/core/overlay/portal-directives.mjs +0 -47
- package/esm2022/core/overlay/utils.mjs +0 -69
- package/esm2022/core/request-animation.mjs +0 -41
- package/esm2022/core/scroll-to.service.mjs +0 -33
- package/esm2022/core/scroll.mjs +0 -83
- package/esm2022/core/spacing/index.mjs +0 -2
- package/esm2022/core/spacing/spacing.mjs +0 -17
- package/esm2022/core/store/action-state.mjs +0 -11
- package/esm2022/core/store/action.mjs +0 -48
- package/esm2022/core/store/actions-stream.mjs +0 -2
- package/esm2022/core/store/index.mjs +0 -4
- package/esm2022/core/store/store.mjs +0 -125
- package/esm2022/core/store/types.mjs +0 -6
- package/esm2022/core/store/utils.mjs +0 -14
- package/esm2022/core/theme/index.mjs +0 -3
- package/esm2022/core/theme/store.mjs +0 -42
- package/esm2022/core/theme/theme.mjs +0 -9
- package/esm2022/core/translate.mjs +0 -22
- package/esm2022/core/update-host-class.service.mjs +0 -60
- package/esm2022/date-picker/abstract-picker.component.mjs +0 -318
- package/esm2022/date-picker/abstract-picker.directive.mjs +0 -218
- package/esm2022/date-picker/base-picker.component.mjs +0 -249
- package/esm2022/date-picker/date-helper.service.mjs +0 -37
- package/esm2022/date-picker/date-picker.component.mjs +0 -41
- package/esm2022/date-picker/date-picker.config.mjs +0 -103
- package/esm2022/date-picker/date-picker.directive.mjs +0 -39
- package/esm2022/date-picker/date-picker.module.mjs +0 -117
- package/esm2022/date-picker/date-picker.service.mjs +0 -31
- package/esm2022/date-picker/index.mjs +0 -37
- package/esm2022/date-picker/inner-types.mjs +0 -2
- package/esm2022/date-picker/lib/calendar/calendar-footer.component.mjs +0 -98
- package/esm2022/date-picker/lib/calendar/calendar-header.component.mjs +0 -92
- package/esm2022/date-picker/lib/calendar/calendar-table.component.mjs +0 -105
- package/esm2022/date-picker/lib/date/date-header.component.mjs +0 -35
- package/esm2022/date-picker/lib/date/date-table-cell.component.mjs +0 -24
- package/esm2022/date-picker/lib/date/date-table.component.mjs +0 -149
- package/esm2022/date-picker/lib/date/types.mjs +0 -2
- package/esm2022/date-picker/lib/date-carousel/date-carousel.component.mjs +0 -388
- package/esm2022/date-picker/lib/decade/decade-header.component.mjs +0 -42
- package/esm2022/date-picker/lib/decade/decade-table.component.mjs +0 -81
- package/esm2022/date-picker/lib/lib-packer.module.mjs +0 -123
- package/esm2022/date-picker/lib/month/month-header.component.mjs +0 -27
- package/esm2022/date-picker/lib/month/month-table.component.mjs +0 -97
- package/esm2022/date-picker/lib/popups/date-popup.component.mjs +0 -566
- package/esm2022/date-picker/lib/popups/inner-popup.component.mjs +0 -196
- package/esm2022/date-picker/lib/quarter/quarter-table.component.mjs +0 -98
- package/esm2022/date-picker/lib/year/year-header.component.mjs +0 -39
- package/esm2022/date-picker/lib/year/year-table.component.mjs +0 -100
- package/esm2022/date-picker/month-picker.component.mjs +0 -45
- package/esm2022/date-picker/ngx-tethys-date-picker.mjs +0 -5
- package/esm2022/date-picker/picker.component.mjs +0 -273
- package/esm2022/date-picker/picker.pipes.mjs +0 -112
- package/esm2022/date-picker/picker.util.mjs +0 -220
- package/esm2022/date-picker/picker.validators.mjs +0 -79
- package/esm2022/date-picker/quarter-picker.component.mjs +0 -48
- package/esm2022/date-picker/range-picker.component.mjs +0 -39
- package/esm2022/date-picker/range-picker.directive.mjs +0 -39
- package/esm2022/date-picker/standard-types.mjs +0 -2
- package/esm2022/date-picker/week-picker.component.mjs +0 -40
- package/esm2022/date-picker/year-picker.component.mjs +0 -48
- package/esm2022/date-range/date-range.class.mjs +0 -6
- package/esm2022/date-range/date-range.component.mjs +0 -255
- package/esm2022/date-range/index.mjs +0 -5
- package/esm2022/date-range/module.mjs +0 -50
- package/esm2022/date-range/ngx-tethys-date-range.mjs +0 -5
- package/esm2022/date-range/optional-dates/optional-dates.component.mjs +0 -50
- package/esm2022/dialog/body/dialog-body.component.mjs +0 -49
- package/esm2022/dialog/confirm/confirm.component.mjs +0 -77
- package/esm2022/dialog/confirm/token.mjs +0 -3
- package/esm2022/dialog/confirm.config.mjs +0 -29
- package/esm2022/dialog/dialog-animations.mjs +0 -19
- package/esm2022/dialog/dialog-container.component.mjs +0 -169
- package/esm2022/dialog/dialog-ref.mjs +0 -35
- package/esm2022/dialog/dialog.config.mjs +0 -62
- package/esm2022/dialog/dialog.module.mjs +0 -91
- package/esm2022/dialog/dialog.options.mjs +0 -6
- package/esm2022/dialog/dialog.service.mjs +0 -145
- package/esm2022/dialog/footer/dialog-footer.component.mjs +0 -51
- package/esm2022/dialog/header/dialog-header.component.mjs +0 -87
- package/esm2022/dialog/index.mjs +0 -12
- package/esm2022/dialog/ngx-tethys-dialog.mjs +0 -5
- package/esm2022/divider/divider.component.mjs +0 -117
- package/esm2022/divider/divider.module.mjs +0 -20
- package/esm2022/divider/index.mjs +0 -3
- package/esm2022/divider/ngx-tethys-divider.mjs +0 -5
- package/esm2022/dot/dot.component.mjs +0 -111
- package/esm2022/dot/dot.module.mjs +0 -17
- package/esm2022/dot/index.mjs +0 -3
- package/esm2022/dot/ngx-tethys-dot.mjs +0 -5
- package/esm2022/drag-drop/drag-content.directive.mjs +0 -32
- package/esm2022/drag-drop/drag-drop.class.mjs +0 -7
- package/esm2022/drag-drop/drag-drop.service.mjs +0 -23
- package/esm2022/drag-drop/drag-handle.directive.mjs +0 -43
- package/esm2022/drag-drop/drag-ref.mjs +0 -225
- package/esm2022/drag-drop/drag.directive.mjs +0 -71
- package/esm2022/drag-drop/drop-container.class.mjs +0 -6
- package/esm2022/drag-drop/drop-container.directive.mjs +0 -129
- package/esm2022/drag-drop/index.mjs +0 -10
- package/esm2022/drag-drop/module.mjs +0 -27
- package/esm2022/drag-drop/ngx-tethys-drag-drop.mjs +0 -5
- package/esm2022/dropdown/dropdown-active.directive.mjs +0 -66
- package/esm2022/dropdown/dropdown-menu-item.directive.mjs +0 -210
- package/esm2022/dropdown/dropdown-menu.component.mjs +0 -156
- package/esm2022/dropdown/dropdown-submenu.component.mjs +0 -83
- package/esm2022/dropdown/dropdown.directive.mjs +0 -189
- package/esm2022/dropdown/index.mjs +0 -7
- package/esm2022/dropdown/module.mjs +0 -79
- package/esm2022/dropdown/ngx-tethys-dropdown.mjs +0 -5
- package/esm2022/empty/empty.component.mjs +0 -183
- package/esm2022/empty/empty.config.mjs +0 -17
- package/esm2022/empty/empty.module.mjs +0 -21
- package/esm2022/empty/index.mjs +0 -4
- package/esm2022/empty/ngx-tethys-empty.mjs +0 -5
- package/esm2022/empty/svgs.mjs +0 -207
- package/esm2022/flexible-text/flexible-text.component.mjs +0 -157
- package/esm2022/flexible-text/flexible-text.module.mjs +0 -19
- package/esm2022/flexible-text/index.mjs +0 -3
- package/esm2022/flexible-text/ngx-tethys-flexible-text.mjs +0 -5
- package/esm2022/form/form-group-error/form-group-error.component.mjs +0 -53
- package/esm2022/form/form-group-label.directive.mjs +0 -49
- package/esm2022/form/form-group.component.mjs +0 -145
- package/esm2022/form/form-submit.directive.mjs +0 -40
- package/esm2022/form/form-validator-loader.mjs +0 -134
- package/esm2022/form/form-validator.service.mjs +0 -252
- package/esm2022/form/form.class.mjs +0 -8
- package/esm2022/form/form.directive.mjs +0 -158
- package/esm2022/form/from-group-footer/form-group-footer.component.mjs +0 -53
- package/esm2022/form/index.mjs +0 -12
- package/esm2022/form/module.mjs +0 -104
- package/esm2022/form/ngx-tethys-form.mjs +0 -5
- package/esm2022/form/validator/confirm-validator.directive.mjs +0 -33
- package/esm2022/form/validator/index.mjs +0 -5
- package/esm2022/form/validator/max-validator.directive.mjs +0 -41
- package/esm2022/form/validator/min-validator.directive.mjs +0 -41
- package/esm2022/form/validator/unique-validator.directive.mjs +0 -52
- package/esm2022/fullscreen/fullscreen-launch.directive.mjs +0 -18
- package/esm2022/fullscreen/fullscreen-ref.mjs +0 -151
- package/esm2022/fullscreen/fullscreen.component.mjs +0 -78
- package/esm2022/fullscreen/fullscreen.config.mjs +0 -6
- package/esm2022/fullscreen/fullscreen.module.mjs +0 -17
- package/esm2022/fullscreen/fullscreen.service.mjs +0 -47
- package/esm2022/fullscreen/index.mjs +0 -7
- package/esm2022/fullscreen/ngx-tethys-fullscreen.mjs +0 -5
- package/esm2022/grid/flex.mjs +0 -179
- package/esm2022/grid/grid.token.mjs +0 -5
- package/esm2022/grid/index.mjs +0 -7
- package/esm2022/grid/module.mjs +0 -56
- package/esm2022/grid/ngx-tethys-grid.mjs +0 -5
- package/esm2022/grid/thy-col.directive.mjs +0 -66
- package/esm2022/grid/thy-grid-item.component.mjs +0 -60
- package/esm2022/grid/thy-grid.component.mjs +0 -256
- package/esm2022/grid/thy-row.directive.mjs +0 -59
- package/esm2022/guider/guider-hint/guider-hint.component.mjs +0 -52
- package/esm2022/guider/guider-manager.mjs +0 -39
- package/esm2022/guider/guider-ref.mjs +0 -133
- package/esm2022/guider/guider-step-ref.mjs +0 -242
- package/esm2022/guider/guider.class.mjs +0 -15
- package/esm2022/guider/guider.directive.mjs +0 -50
- package/esm2022/guider/guider.module.mjs +0 -24
- package/esm2022/guider/guider.service.mjs +0 -76
- package/esm2022/guider/index.mjs +0 -9
- package/esm2022/guider/ngx-tethys-guider.mjs +0 -5
- package/esm2022/guider/utils.mjs +0 -10
- package/esm2022/i18n/i18n.mjs +0 -9
- package/esm2022/i18n/i18n.service.mjs +0 -45
- package/esm2022/i18n/i18n.token.mjs +0 -10
- package/esm2022/i18n/index.mjs +0 -10
- package/esm2022/i18n/locale.mjs +0 -13
- package/esm2022/i18n/locales/de-de.mjs +0 -134
- package/esm2022/i18n/locales/en-us.mjs +0 -155
- package/esm2022/i18n/locales/ja-jp.mjs +0 -134
- package/esm2022/i18n/locales/zh-hans.mjs +0 -134
- package/esm2022/i18n/locales/zh-hant.mjs +0 -134
- package/esm2022/i18n/ngx-tethys-i18n.mjs +0 -5
- package/esm2022/icon/config.mjs +0 -8
- package/esm2022/icon/icon-registry.mjs +0 -340
- package/esm2022/icon/icon.component.mjs +0 -198
- package/esm2022/icon/icon.module.mjs +0 -20
- package/esm2022/icon/index.mjs +0 -5
- package/esm2022/icon/ngx-tethys-icon.mjs +0 -5
- package/esm2022/image/image-group.component.mjs +0 -32
- package/esm2022/image/image.class.mjs +0 -2
- package/esm2022/image/image.config.mjs +0 -21
- package/esm2022/image/image.directive.mjs +0 -130
- package/esm2022/image/image.service.mjs +0 -58
- package/esm2022/image/index.mjs +0 -9
- package/esm2022/image/module.mjs +0 -67
- package/esm2022/image/ngx-tethys-image.mjs +0 -5
- package/esm2022/image/preview/image-preview-ref.mjs +0 -32
- package/esm2022/image/preview/image-preview.component.mjs +0 -413
- package/esm2022/image/utils.mjs +0 -13
- package/esm2022/input/index.mjs +0 -7
- package/esm2022/input/input-count.component.mjs +0 -68
- package/esm2022/input/input-group.component.mjs +0 -161
- package/esm2022/input/input-search.component.mjs +0 -152
- package/esm2022/input/input.component.mjs +0 -142
- package/esm2022/input/input.directive.mjs +0 -63
- package/esm2022/input/module.mjs +0 -51
- package/esm2022/input/ngx-tethys-input.mjs +0 -5
- package/esm2022/input-number/index.mjs +0 -3
- package/esm2022/input-number/input-number.component.mjs +0 -362
- package/esm2022/input-number/module.mjs +0 -22
- package/esm2022/input-number/ngx-tethys-input-number.mjs +0 -5
- package/esm2022/layout/content-main.component.mjs +0 -42
- package/esm2022/layout/content-section.component.mjs +0 -42
- package/esm2022/layout/content.component.mjs +0 -42
- package/esm2022/layout/header.component.mjs +0 -125
- package/esm2022/layout/index.mjs +0 -11
- package/esm2022/layout/layout.component.mjs +0 -47
- package/esm2022/layout/layout.module.mjs +0 -121
- package/esm2022/layout/ngx-tethys-layout.mjs +0 -5
- package/esm2022/layout/sidebar-content.component.mjs +0 -41
- package/esm2022/layout/sidebar-footer.component.mjs +0 -41
- package/esm2022/layout/sidebar-header.component.mjs +0 -54
- package/esm2022/layout/sidebar.component.mjs +0 -405
- package/esm2022/list/index.mjs +0 -7
- package/esm2022/list/list-item-meta.component.mjs +0 -38
- package/esm2022/list/list-item.component.mjs +0 -25
- package/esm2022/list/list.component.mjs +0 -41
- package/esm2022/list/list.module.mjs +0 -22
- package/esm2022/list/ngx-tethys-list.mjs +0 -5
- package/esm2022/list/selection/selection-list.mjs +0 -393
- package/esm2022/list/selection/selection.interface.mjs +0 -2
- package/esm2022/loading/index.mjs +0 -3
- package/esm2022/loading/loading.component.mjs +0 -54
- package/esm2022/loading/loading.module.mjs +0 -17
- package/esm2022/loading/ngx-tethys-loading.mjs +0 -5
- package/esm2022/mention/adapter/adapter.mjs +0 -20
- package/esm2022/mention/adapter/editable.adapter.mjs +0 -48
- package/esm2022/mention/adapter/index.mjs +0 -16
- package/esm2022/mention/adapter/textarea.adapter.mjs +0 -58
- package/esm2022/mention/caret-positioner.mjs +0 -194
- package/esm2022/mention/index.mjs +0 -5
- package/esm2022/mention/interfaces.mjs +0 -2
- package/esm2022/mention/mention.directive.mjs +0 -160
- package/esm2022/mention/mention.module.mjs +0 -23
- package/esm2022/mention/ngx-tethys-mention.mjs +0 -5
- package/esm2022/mention/suggestions/suggestions.component.mjs +0 -80
- package/esm2022/menu/divider/menu-divider.component.mjs +0 -21
- package/esm2022/menu/group/menu-group.component.mjs +0 -187
- package/esm2022/menu/index.mjs +0 -9
- package/esm2022/menu/item/action/menu-item-action.component.mjs +0 -75
- package/esm2022/menu/item/icon/menu-item-icon.component.mjs +0 -33
- package/esm2022/menu/item/menu-item.component.mjs +0 -42
- package/esm2022/menu/item/name/menu-item-name.component.mjs +0 -32
- package/esm2022/menu/menu.component.mjs +0 -39
- package/esm2022/menu/menu.module.mjs +0 -49
- package/esm2022/menu/ngx-tethys-menu.mjs +0 -5
- package/esm2022/message/abstract/abstract-message-container.component.mjs +0 -26
- package/esm2022/message/abstract/abstract-message-queue.service.mjs +0 -34
- package/esm2022/message/abstract/abstract-message-ref.mjs +0 -22
- package/esm2022/message/abstract/abstract-message.component.mjs +0 -76
- package/esm2022/message/abstract/abstract-message.service.mjs +0 -29
- package/esm2022/message/abstract/index.mjs +0 -6
- package/esm2022/message/index.mjs +0 -9
- package/esm2022/message/message-container.component.mjs +0 -45
- package/esm2022/message/message-queue.service.mjs +0 -25
- package/esm2022/message/message-ref.mjs +0 -4
- package/esm2022/message/message.component.mjs +0 -61
- package/esm2022/message/message.config.mjs +0 -14
- package/esm2022/message/message.service.mjs +0 -92
- package/esm2022/message/module.mjs +0 -24
- package/esm2022/message/ngx-tethys-message.mjs +0 -5
- package/esm2022/nav/icon-nav/icon-nav-link.directive.mjs +0 -43
- package/esm2022/nav/icon-nav/icon-nav.component.mjs +0 -45
- package/esm2022/nav/index.mjs +0 -7
- package/esm2022/nav/nav-ink-bar.directive.mjs +0 -79
- package/esm2022/nav/nav-item.directive.mjs +0 -98
- package/esm2022/nav/nav.component.mjs +0 -410
- package/esm2022/nav/nav.module.mjs +0 -54
- package/esm2022/nav/nav.pipe.mjs +0 -24
- package/esm2022/nav/ngx-tethys-nav.mjs +0 -5
- package/esm2022/ngx-tethys.mjs +0 -5
- package/esm2022/notify/index.mjs +0 -8
- package/esm2022/notify/module.mjs +0 -24
- package/esm2022/notify/ngx-tethys-notify.mjs +0 -5
- package/esm2022/notify/notify-container.component.mjs +0 -31
- package/esm2022/notify/notify-queue.service.mjs +0 -30
- package/esm2022/notify/notify-ref.mjs +0 -4
- package/esm2022/notify/notify.component.mjs +0 -99
- package/esm2022/notify/notify.config.mjs +0 -14
- package/esm2022/notify/notify.service.mjs +0 -97
- package/esm2022/pagination/index.mjs +0 -6
- package/esm2022/pagination/ngx-tethys-pagination.mjs +0 -5
- package/esm2022/pagination/pagination.class.mjs +0 -2
- package/esm2022/pagination/pagination.component.mjs +0 -366
- package/esm2022/pagination/pagination.config.mjs +0 -30
- package/esm2022/pagination/pagination.module.mjs +0 -43
- package/esm2022/pagination/pagination.pipe.mjs +0 -53
- package/esm2022/popover/body/popover-body.component.mjs +0 -25
- package/esm2022/popover/header/popover-header.component.mjs +0 -54
- package/esm2022/popover/index.mjs +0 -10
- package/esm2022/popover/module.mjs +0 -47
- package/esm2022/popover/ngx-tethys-popover.mjs +0 -5
- package/esm2022/popover/popover-animations.mjs +0 -22
- package/esm2022/popover/popover-container.component.mjs +0 -125
- package/esm2022/popover/popover-ref.mjs +0 -25
- package/esm2022/popover/popover.config.mjs +0 -38
- package/esm2022/popover/popover.directive.mjs +0 -157
- package/esm2022/popover/popover.options.mjs +0 -6
- package/esm2022/popover/popover.service.mjs +0 -201
- package/esm2022/progress/index.mjs +0 -6
- package/esm2022/progress/interfaces.mjs +0 -2
- package/esm2022/progress/ngx-tethys-progress.mjs +0 -5
- package/esm2022/progress/progress-circle.component.mjs +0 -136
- package/esm2022/progress/progress-strip.component.mjs +0 -54
- package/esm2022/progress/progress.component.mjs +0 -142
- package/esm2022/progress/progress.module.mjs +0 -20
- package/esm2022/property/index.mjs +0 -4
- package/esm2022/property/module.mjs +0 -20
- package/esm2022/property/ngx-tethys-property.mjs +0 -5
- package/esm2022/property/properties.component.mjs +0 -59
- package/esm2022/property/property-item.component.mjs +0 -175
- package/esm2022/property-operation/group/property-operation-group.component.mjs +0 -20
- package/esm2022/property-operation/index.mjs +0 -4
- package/esm2022/property-operation/module.mjs +0 -21
- package/esm2022/property-operation/ngx-tethys-property-operation.mjs +0 -5
- package/esm2022/property-operation/property-operation.component.mjs +0 -183
- package/esm2022/public-api.mjs +0 -2
- package/esm2022/radio/button/radio-button.component.mjs +0 -56
- package/esm2022/radio/group/radio-group.component.mjs +0 -138
- package/esm2022/radio/index.mjs +0 -5
- package/esm2022/radio/module.mjs +0 -20
- package/esm2022/radio/ngx-tethys-radio.mjs +0 -5
- package/esm2022/radio/radio.component.mjs +0 -58
- package/esm2022/rate/index.mjs +0 -4
- package/esm2022/rate/module.mjs +0 -23
- package/esm2022/rate/ngx-tethys-rate.mjs +0 -5
- package/esm2022/rate/rate-item.component.mjs +0 -76
- package/esm2022/rate/rate.component.mjs +0 -244
- package/esm2022/resizable/index.mjs +0 -8
- package/esm2022/resizable/interface.mjs +0 -2
- package/esm2022/resizable/module.mjs +0 -19
- package/esm2022/resizable/ngx-tethys-resizable.mjs +0 -5
- package/esm2022/resizable/resizable.directive.mjs +0 -363
- package/esm2022/resizable/resizable.service.mjs +0 -69
- package/esm2022/resizable/resize-handle.component.mjs +0 -104
- package/esm2022/resizable/resize-handles.component.mjs +0 -64
- package/esm2022/resizable/utils.mjs +0 -14
- package/esm2022/result/index.mjs +0 -3
- package/esm2022/result/ngx-tethys-result.mjs +0 -5
- package/esm2022/result/result.component.mjs +0 -43
- package/esm2022/result/result.module.mjs +0 -17
- package/esm2022/segment/index.mjs +0 -5
- package/esm2022/segment/ngx-tethys-segment.mjs +0 -5
- package/esm2022/segment/segment-item.component.mjs +0 -87
- package/esm2022/segment/segment.component.mjs +0 -143
- package/esm2022/segment/segment.module.mjs +0 -20
- package/esm2022/segment/segment.token.mjs +0 -3
- package/esm2022/segment/types.mjs +0 -2
- package/esm2022/select/custom-select/custom-select.component.mjs +0 -904
- package/esm2022/select/index.mjs +0 -5
- package/esm2022/select/module.mjs +0 -62
- package/esm2022/select/native-select/native-select.component.mjs +0 -98
- package/esm2022/select/ngx-tethys-select.mjs +0 -5
- package/esm2022/select/select.config.mjs +0 -21
- package/esm2022/shared/base-form-check.component.mjs +0 -120
- package/esm2022/shared/directives/string-or-template-outlet.directive.mjs +0 -57
- package/esm2022/shared/directives/thy-autofocus.directive.mjs +0 -60
- package/esm2022/shared/directives/thy-contextmenu.directive.mjs +0 -39
- package/esm2022/shared/directives/thy-ctrl-enter.directive.mjs +0 -43
- package/esm2022/shared/directives/thy-drag-drop.directive.mjs +0 -51
- package/esm2022/shared/directives/thy-enter.directive.mjs +0 -43
- package/esm2022/shared/directives/thy-scroll.directive.mjs +0 -84
- package/esm2022/shared/directives/thy-show.mjs +0 -59
- package/esm2022/shared/directives/thy-stop-propagation.directive.mjs +0 -57
- package/esm2022/shared/directives/view-outlet.directive.mjs +0 -85
- package/esm2022/shared/index.mjs +0 -16
- package/esm2022/shared/ng-transclude.directive.mjs +0 -32
- package/esm2022/shared/ngx-tethys-shared.mjs +0 -5
- package/esm2022/shared/option/group/option-group.component.mjs +0 -92
- package/esm2022/shared/option/index.mjs +0 -9
- package/esm2022/shared/option/list-option/list-option.component.mjs +0 -96
- package/esm2022/shared/option/module.mjs +0 -29
- package/esm2022/shared/option/option-group.component.mjs +0 -25
- package/esm2022/shared/option/option.component.mjs +0 -181
- package/esm2022/shared/option/option.token.mjs +0 -14
- package/esm2022/shared/option/options-container.component.mjs +0 -29
- package/esm2022/shared/option/select-option-base.mjs +0 -3
- package/esm2022/shared/select/index.mjs +0 -3
- package/esm2022/shared/select/module.mjs +0 -27
- package/esm2022/shared/select/select-control/select-control.component.mjs +0 -280
- package/esm2022/shared/shared.module.mjs +0 -71
- package/esm2022/skeleton/index.mjs +0 -9
- package/esm2022/skeleton/module.mjs +0 -27
- package/esm2022/skeleton/ngx-tethys-skeleton.mjs +0 -5
- package/esm2022/skeleton/skeleton-circle.component.mjs +0 -92
- package/esm2022/skeleton/skeleton-rectangle.component.mjs +0 -100
- package/esm2022/skeleton/skeleton.component.mjs +0 -32
- package/esm2022/skeleton/skeleton.config.mjs +0 -8
- package/esm2022/skeleton/stylized/bullet-list.component.mjs +0 -124
- package/esm2022/skeleton/stylized/list.component.mjs +0 -95
- package/esm2022/skeleton/stylized/paragraph.component.mjs +0 -107
- package/esm2022/slide/drawer/drawer-container.directive.mjs +0 -21
- package/esm2022/slide/index.mjs +0 -13
- package/esm2022/slide/ngx-tethys-slide.mjs +0 -5
- package/esm2022/slide/slide-animations.mjs +0 -24
- package/esm2022/slide/slide-body/slide-body-section.component.mjs +0 -41
- package/esm2022/slide/slide-body/slide-body.component.mjs +0 -25
- package/esm2022/slide/slide-container.component.mjs +0 -192
- package/esm2022/slide/slide-footer/slide-footer.component.mjs +0 -26
- package/esm2022/slide/slide-header/slide-header.component.mjs +0 -59
- package/esm2022/slide/slide-layout/slide-layout.component.mjs +0 -27
- package/esm2022/slide/slide-ref.service.mjs +0 -32
- package/esm2022/slide/slide.config.mjs +0 -38
- package/esm2022/slide/slide.module.mjs +0 -65
- package/esm2022/slide/slide.service.mjs +0 -104
- package/esm2022/slider/index.mjs +0 -3
- package/esm2022/slider/ngx-tethys-slider.mjs +0 -5
- package/esm2022/slider/slider.component.mjs +0 -346
- package/esm2022/slider/slider.module.mjs +0 -19
- package/esm2022/space/index.mjs +0 -3
- package/esm2022/space/ngx-tethys-space.mjs +0 -5
- package/esm2022/space/space.component.mjs +0 -88
- package/esm2022/space/space.module.mjs +0 -17
- package/esm2022/statistic/index.mjs +0 -3
- package/esm2022/statistic/ngx-tethys-statistic.mjs +0 -5
- package/esm2022/statistic/statistic.component.mjs +0 -184
- package/esm2022/statistic/statistic.module.mjs +0 -20
- package/esm2022/stepper/index.mjs +0 -6
- package/esm2022/stepper/ngx-tethys-stepper.mjs +0 -5
- package/esm2022/stepper/step-header.component.mjs +0 -40
- package/esm2022/stepper/step.component.mjs +0 -32
- package/esm2022/stepper/stepper-button.directive.mjs +0 -56
- package/esm2022/stepper/stepper.component.mjs +0 -105
- package/esm2022/stepper/stepper.module.mjs +0 -21
- package/esm2022/strength/index.mjs +0 -3
- package/esm2022/strength/ngx-tethys-strength.mjs +0 -5
- package/esm2022/strength/strength.component.mjs +0 -122
- package/esm2022/strength/strength.module.mjs +0 -17
- package/esm2022/switch/index.mjs +0 -3
- package/esm2022/switch/ngx-tethys-switch.mjs +0 -5
- package/esm2022/switch/switch.component.mjs +0 -181
- package/esm2022/switch/switch.module.mjs +0 -17
- package/esm2022/table/enums/column-skeleton-type.mjs +0 -8
- package/esm2022/table/enums/index.mjs +0 -2
- package/esm2022/table/index.mjs +0 -9
- package/esm2022/table/ngx-tethys-table.mjs +0 -5
- package/esm2022/table/pipes/drag.pipe.mjs +0 -20
- package/esm2022/table/pipes/table.pipe.mjs +0 -20
- package/esm2022/table/table-column.component.mjs +0 -200
- package/esm2022/table/table-skeleton.component.mjs +0 -165
- package/esm2022/table/table.component.mjs +0 -966
- package/esm2022/table/table.interface.mjs +0 -7
- package/esm2022/table/table.module.mjs +0 -75
- package/esm2022/tabs/index.mjs +0 -5
- package/esm2022/tabs/ngx-tethys-tabs.mjs +0 -5
- package/esm2022/tabs/tab-content.component.mjs +0 -52
- package/esm2022/tabs/tab.component.mjs +0 -36
- package/esm2022/tabs/tabs.component.mjs +0 -139
- package/esm2022/tabs/tabs.module.mjs +0 -21
- package/esm2022/tabs/types.mjs +0 -2
- package/esm2022/tag/index.mjs +0 -4
- package/esm2022/tag/ngx-tethys-tag.mjs +0 -5
- package/esm2022/tag/tag.component.mjs +0 -109
- package/esm2022/tag/tag.module.mjs +0 -19
- package/esm2022/tag/tags.component.mjs +0 -24
- package/esm2022/testing/data-transfer.mjs +0 -55
- package/esm2022/testing/dispatcher-events.mjs +0 -46
- package/esm2022/testing/element-focus.mjs +0 -18
- package/esm2022/testing/events.mjs +0 -145
- package/esm2022/testing/index.mjs +0 -8
- package/esm2022/testing/ngx-tethys-testing.mjs +0 -5
- package/esm2022/testing/thy-icon.mjs +0 -50
- package/esm2022/testing/type-in-element.mjs +0 -20
- package/esm2022/testing/xhr-mock.mjs +0 -100
- package/esm2022/time-picker/index.mjs +0 -8
- package/esm2022/time-picker/inner/inner-time-picker.class.mjs +0 -2
- package/esm2022/time-picker/inner/inner-time-picker.component.mjs +0 -239
- package/esm2022/time-picker/inner/inner-time-picker.config.mjs +0 -45
- package/esm2022/time-picker/inner/inner-time-picker.store.mjs +0 -134
- package/esm2022/time-picker/ngx-tethys-time-picker.mjs +0 -5
- package/esm2022/time-picker/time-picker-controls.util.mjs +0 -118
- package/esm2022/time-picker/time-picker-panel.component.mjs +0 -265
- package/esm2022/time-picker/time-picker.component.mjs +0 -363
- package/esm2022/time-picker/time-picker.module.mjs +0 -54
- package/esm2022/time-picker/time-picker.utils.mjs +0 -131
- package/esm2022/timeline/index.mjs +0 -5
- package/esm2022/timeline/ngx-tethys-timeline.mjs +0 -5
- package/esm2022/timeline/timeline-item.component.mjs +0 -59
- package/esm2022/timeline/timeline.component.mjs +0 -156
- package/esm2022/timeline/timeline.module.mjs +0 -21
- package/esm2022/timeline/timeline.service.mjs +0 -17
- package/esm2022/tooltip/index.mjs +0 -9
- package/esm2022/tooltip/interface.mjs +0 -2
- package/esm2022/tooltip/ngx-tethys-tooltip.mjs +0 -5
- package/esm2022/tooltip/tooltip-animations.mjs +0 -23
- package/esm2022/tooltip/tooltip-ref.mjs +0 -147
- package/esm2022/tooltip/tooltip.component.mjs +0 -103
- package/esm2022/tooltip/tooltip.config.mjs +0 -17
- package/esm2022/tooltip/tooltip.directive.mjs +0 -150
- package/esm2022/tooltip/tooltip.module.mjs +0 -22
- package/esm2022/tooltip/tooltip.service.mjs +0 -28
- package/esm2022/transfer/index.mjs +0 -5
- package/esm2022/transfer/ngx-tethys-transfer.mjs +0 -5
- package/esm2022/transfer/transfer-list.component.mjs +0 -154
- package/esm2022/transfer/transfer.component.mjs +0 -180
- package/esm2022/transfer/transfer.interface.mjs +0 -6
- package/esm2022/transfer/transfer.module.mjs +0 -50
- package/esm2022/tree/index.mjs +0 -7
- package/esm2022/tree/ngx-tethys-tree.mjs +0 -5
- package/esm2022/tree/tree-abstract.mjs +0 -3
- package/esm2022/tree/tree-node.class.mjs +0 -93
- package/esm2022/tree/tree-node.component.mjs +0 -212
- package/esm2022/tree/tree.class.mjs +0 -15
- package/esm2022/tree/tree.component.mjs +0 -648
- package/esm2022/tree/tree.module.mjs +0 -74
- package/esm2022/tree/tree.pipe.mjs +0 -26
- package/esm2022/tree/tree.service.mjs +0 -187
- package/esm2022/tree-select/index.mjs +0 -4
- package/esm2022/tree-select/module.mjs +0 -52
- package/esm2022/tree-select/ngx-tethys-tree-select.mjs +0 -5
- package/esm2022/tree-select/tree-select.class.mjs +0 -2
- package/esm2022/tree-select/tree-select.component.mjs +0 -653
- package/esm2022/types/common.mjs +0 -2
- package/esm2022/types/dictionary.mjs +0 -2
- package/esm2022/types/index.mjs +0 -4
- package/esm2022/types/ngx-tethys-types.mjs +0 -5
- package/esm2022/types/pagination.mjs +0 -2
- package/esm2022/typography/bg-color.directive.mjs +0 -51
- package/esm2022/typography/index.mjs +0 -5
- package/esm2022/typography/module.mjs +0 -21
- package/esm2022/typography/ngx-tethys-typography.mjs +0 -5
- package/esm2022/typography/text/text.component.mjs +0 -23
- package/esm2022/typography/text-color.directive.mjs +0 -52
- package/esm2022/upload/constant.mjs +0 -75
- package/esm2022/upload/file-drop.directive.mjs +0 -166
- package/esm2022/upload/file-select-base.mjs +0 -75
- package/esm2022/upload/file-select.component.mjs +0 -98
- package/esm2022/upload/index.mjs +0 -7
- package/esm2022/upload/module.mjs +0 -22
- package/esm2022/upload/ngx-tethys-upload.mjs +0 -5
- package/esm2022/upload/types.mjs +0 -2
- package/esm2022/upload/upload.config.mjs +0 -21
- package/esm2022/upload/upload.service.mjs +0 -169
- package/esm2022/upload/util.mjs +0 -27
- package/esm2022/util/date/functions.mjs +0 -84
- package/esm2022/util/date/tiny-date.mjs +0 -362
- package/esm2022/util/dom.mjs +0 -247
- package/esm2022/util/helpers/helpers.mjs +0 -293
- package/esm2022/util/helpers/index.mjs +0 -2
- package/esm2022/util/immutable.mjs +0 -108
- package/esm2022/util/index.mjs +0 -16
- package/esm2022/util/keycodes.mjs +0 -2
- package/esm2022/util/logger/index.mjs +0 -2
- package/esm2022/util/logger/logger.mjs +0 -42
- package/esm2022/util/ng.mjs +0 -7
- package/esm2022/util/ngx-tethys-util.mjs +0 -5
- package/esm2022/util/references.mjs +0 -84
- package/esm2022/version.mjs +0 -3
- package/esm2022/vote/index.mjs +0 -3
- package/esm2022/vote/ngx-tethys-vote.mjs +0 -5
- package/esm2022/vote/vote.component.mjs +0 -130
- package/esm2022/vote/vote.module.mjs +0 -20
- package/esm2022/watermark/config.mjs +0 -20
- package/esm2022/watermark/index.mjs +0 -3
- package/esm2022/watermark/ngx-tethys-watermark.mjs +0 -5
- package/esm2022/watermark/watermark.directive.mjs +0 -178
- package/esm2022/watermark/watermark.module.mjs +0 -19
- package/schematics/ng-update/update-18/complete.d.ts +0 -3
- package/schematics/ng-update/update-18/complete.js +0 -13
- /package/schematics/ng-update/{update-18 → update-19}/class-name-migration.d.ts +0 -0
- /package/schematics/ng-update/{update-18 → update-19}/class-name-migration.js +0 -0
- /package/schematics/ng-update/{update-18 → update-19}/index.d.ts +0 -0
- /package/schematics/ng-update/{update-18 → update-19}/index.spec.d.ts +0 -0
- /package/schematics/ng-update/{update-18 → update-19}/update-data.d.ts +0 -0
- /package/schematics/ng-update/{update-18 → update-19}/update-data.js +0 -0
|
@@ -1,904 +0,0 @@
|
|
|
1
|
-
import { getFlexiblePositions, injectPanelEmptyIcon, scaleMotion, scaleXMotion, scaleYMotion, ScrollToService, TabIndexDisabledControlValueAccessorMixin, ThyClickDispatcher } from 'ngx-tethys/core';
|
|
2
|
-
import { ThyEmpty } from 'ngx-tethys/empty';
|
|
3
|
-
import { ThyLoading } from 'ngx-tethys/loading';
|
|
4
|
-
import { THY_OPTION_PARENT_COMPONENT, ThyOption, ThyOptionsContainer, ThyScrollDirective, ThySelectControl, ThySelectOptionGroup, ThyStopPropagationDirective } from 'ngx-tethys/shared';
|
|
5
|
-
import { A, coerceBooleanProperty, DOWN_ARROW, elementMatchClosest, END, ENTER, hasModifierKey, helpers, HOME, isArray, isFunction, LEFT_ARROW, RIGHT_ARROW, SPACE, UP_ARROW } from 'ngx-tethys/util';
|
|
6
|
-
import { defer, merge, Observable, Subject, timer } from 'rxjs';
|
|
7
|
-
import { distinctUntilChanged, filter, map, startWith, switchMap, take, takeUntil } from 'rxjs/operators';
|
|
8
|
-
import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';
|
|
9
|
-
import { coerceElement } from '@angular/cdk/coercion';
|
|
10
|
-
import { SelectionModel } from '@angular/cdk/collections';
|
|
11
|
-
import { CdkConnectedOverlay, CdkOverlayOrigin, Overlay } from '@angular/cdk/overlay';
|
|
12
|
-
import { isPlatformBrowser, NgClass, NgTemplateOutlet } from '@angular/common';
|
|
13
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, forwardRef, HostBinding, HostListener, Input, NgZone, numberAttribute, Output, PLATFORM_ID, QueryList, TemplateRef, ViewChild, ViewChildren, inject } from '@angular/core';
|
|
14
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
15
|
-
import { DEFAULT_SELECT_CONFIG, THY_SELECT_CONFIG, THY_SELECT_SCROLL_STRATEGY } from '../select.config';
|
|
16
|
-
import { injectLocale } from 'ngx-tethys/i18n';
|
|
17
|
-
import * as i0 from "@angular/core";
|
|
18
|
-
export const SELECT_PANEL_MAX_HEIGHT = 300;
|
|
19
|
-
export const SELECT_OPTION_MAX_HEIGHT = 40;
|
|
20
|
-
export const SELECT_OPTION_GROUP_MAX_HEIGHT = 30;
|
|
21
|
-
export const SELECT_PANEL_PADDING_TOP = 10;
|
|
22
|
-
export const THY_SELECT_PANEL_MIN_WIDTH = 200;
|
|
23
|
-
const noop = () => { };
|
|
24
|
-
/**
|
|
25
|
-
* 下拉选择组件
|
|
26
|
-
* @name thy-select,thy-custom-select
|
|
27
|
-
* @order 10
|
|
28
|
-
*/
|
|
29
|
-
export class ThySelect extends TabIndexDisabledControlValueAccessorMixin {
|
|
30
|
-
/**
|
|
31
|
-
* 下拉选择模式
|
|
32
|
-
* @type 'multiple' | ''
|
|
33
|
-
*/
|
|
34
|
-
set thyMode(value) {
|
|
35
|
-
this.mode = value;
|
|
36
|
-
this.instanceSelectionModel();
|
|
37
|
-
this.getPositions();
|
|
38
|
-
this.setDropDownClass();
|
|
39
|
-
}
|
|
40
|
-
get thyMode() {
|
|
41
|
-
return this.mode;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* 操作图标类型
|
|
45
|
-
* @type primary | success | danger | warning
|
|
46
|
-
* @default primary
|
|
47
|
-
*/
|
|
48
|
-
get thySize() {
|
|
49
|
-
return this.size;
|
|
50
|
-
}
|
|
51
|
-
set thySize(value) {
|
|
52
|
-
this.size = value;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* 数据为空时显示的提示文字
|
|
56
|
-
*/
|
|
57
|
-
set thyEmptyStateText(value) {
|
|
58
|
-
this.emptyStateText = value;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* 搜索结果为空时显示的提示文字
|
|
62
|
-
*/
|
|
63
|
-
set thyEmptySearchMessageText(value) {
|
|
64
|
-
this.emptySearchMessageText = value;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* 是否禁用
|
|
68
|
-
* @default false
|
|
69
|
-
*/
|
|
70
|
-
set thyDisabled(value) {
|
|
71
|
-
this.disabled = value;
|
|
72
|
-
}
|
|
73
|
-
get thyDisabled() {
|
|
74
|
-
return this.disabled;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* option 列表
|
|
78
|
-
* @type ThySelectOptionModel[]
|
|
79
|
-
*/
|
|
80
|
-
set thyOptions(value) {
|
|
81
|
-
if (value === null) {
|
|
82
|
-
value = [];
|
|
83
|
-
}
|
|
84
|
-
this.innerOptions = value;
|
|
85
|
-
this.isReactiveDriven = true;
|
|
86
|
-
this.buildReactiveOptions();
|
|
87
|
-
}
|
|
88
|
-
handleKeydown(event) {
|
|
89
|
-
if (!this.disabled) {
|
|
90
|
-
if (event.keyCode === ENTER) {
|
|
91
|
-
event.stopPropagation();
|
|
92
|
-
}
|
|
93
|
-
this.panelOpen ? this.handleOpenKeydown(event) : this.handleClosedKeydown(event);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
get optionsChanges$() {
|
|
97
|
-
this.options = this.isReactiveDriven ? this.viewOptions : this.contentOptions;
|
|
98
|
-
let previousOptions = this.options.toArray();
|
|
99
|
-
return this.options.changes.pipe(map(data => {
|
|
100
|
-
return this.options.toArray();
|
|
101
|
-
}), filter(data => {
|
|
102
|
-
const res = previousOptions.length !== data.length || previousOptions.some((op, index) => op !== data[index]);
|
|
103
|
-
previousOptions = data;
|
|
104
|
-
return res;
|
|
105
|
-
}));
|
|
106
|
-
}
|
|
107
|
-
buildScrollStrategy() {
|
|
108
|
-
if (this.scrollStrategyFactory && isFunction(this.scrollStrategyFactory)) {
|
|
109
|
-
this.scrollStrategy = this.scrollStrategyFactory();
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
this.scrollStrategy = this.overlay.scrollStrategies.reposition();
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
get placement() {
|
|
116
|
-
return this.thyPlacement || this.config.placement;
|
|
117
|
-
}
|
|
118
|
-
constructor() {
|
|
119
|
-
super();
|
|
120
|
-
this.ngZone = inject(NgZone);
|
|
121
|
-
this.elementRef = inject(ElementRef);
|
|
122
|
-
this.changeDetectorRef = inject(ChangeDetectorRef);
|
|
123
|
-
this.overlay = inject(Overlay);
|
|
124
|
-
this.thyClickDispatcher = inject(ThyClickDispatcher);
|
|
125
|
-
this.platformId = inject(PLATFORM_ID);
|
|
126
|
-
this.locale = injectLocale('select');
|
|
127
|
-
this.scrollStrategyFactory = inject(THY_SELECT_SCROLL_STRATEGY, { optional: true });
|
|
128
|
-
this.selectConfig = inject(THY_SELECT_CONFIG, { optional: true });
|
|
129
|
-
this.emptyIcon = injectPanelEmptyIcon();
|
|
130
|
-
this.disabled = false;
|
|
131
|
-
this.mode = '';
|
|
132
|
-
this.emptyStateText = this.locale().empty;
|
|
133
|
-
this.emptySearchMessageText = this.locale().empty;
|
|
134
|
-
this.scrollTop = 0;
|
|
135
|
-
this.modalValue = null;
|
|
136
|
-
this.defaultOffset = 4;
|
|
137
|
-
this.dropDownMinWidth = null;
|
|
138
|
-
/**
|
|
139
|
-
* 手动聚焦中的标识
|
|
140
|
-
*/
|
|
141
|
-
this.manualFocusing = false;
|
|
142
|
-
this.destroy$ = new Subject();
|
|
143
|
-
this.optionSelectionChanges = defer(() => {
|
|
144
|
-
if (this.options) {
|
|
145
|
-
return merge(...this.options.map(option => option.selectionChange));
|
|
146
|
-
}
|
|
147
|
-
return this.ngZone.onStable.asObservable().pipe(take(1), switchMap(() => this.optionSelectionChanges));
|
|
148
|
-
});
|
|
149
|
-
this.isSelectCustom = true;
|
|
150
|
-
this.isSelect = true;
|
|
151
|
-
this.panelOpen = false;
|
|
152
|
-
/**
|
|
153
|
-
* 搜索时回调
|
|
154
|
-
*/
|
|
155
|
-
this.thyOnSearch = new EventEmitter();
|
|
156
|
-
/**
|
|
157
|
-
* 下拉菜单滚动到底部事件,可以用这个事件实现滚动加载
|
|
158
|
-
*/
|
|
159
|
-
this.thyOnScrollToBottom = new EventEmitter();
|
|
160
|
-
/**
|
|
161
|
-
* 下拉菜单展开和折叠状态事件
|
|
162
|
-
*/
|
|
163
|
-
this.thyOnExpandStatusChange = new EventEmitter();
|
|
164
|
-
/**
|
|
165
|
-
* 选择框默认文字
|
|
166
|
-
*/
|
|
167
|
-
this.thyPlaceHolder = this.locale().placeholder;
|
|
168
|
-
/**
|
|
169
|
-
* 异步加载 loading 状态,false 表示加载中,true 表示加载完成
|
|
170
|
-
*/
|
|
171
|
-
this.thyLoadState = true;
|
|
172
|
-
/**
|
|
173
|
-
* 是否自动设置选项第一条为高亮状态
|
|
174
|
-
*/
|
|
175
|
-
this.thyAutoActiveFirstItem = true;
|
|
176
|
-
/**
|
|
177
|
-
* 滚动加载是否可用,只能当这个参数可以,下面的thyOnScrollToBottom事件才会触发
|
|
178
|
-
*/
|
|
179
|
-
this.thyEnableScrollLoad = false;
|
|
180
|
-
/**
|
|
181
|
-
* 单选( thyMode="" 或者不设置)时,选择框支持清除
|
|
182
|
-
*/
|
|
183
|
-
this.thyAllowClear = false;
|
|
184
|
-
/**
|
|
185
|
-
* 自定义 Footer 模板容器 class
|
|
186
|
-
*/
|
|
187
|
-
this.thyFooterClass = 'thy-custom-select-footer';
|
|
188
|
-
/**
|
|
189
|
-
* 是否弹出透明遮罩,如果显示遮罩则会阻止滚动区域滚动
|
|
190
|
-
*/
|
|
191
|
-
this.thyHasBackdrop = false;
|
|
192
|
-
/**
|
|
193
|
-
* 设置多选时最大显示的标签数量,0 表示不限制
|
|
194
|
-
*/
|
|
195
|
-
this.thyMaxTagCount = 0;
|
|
196
|
-
/**
|
|
197
|
-
* 是否隐藏选择框边框
|
|
198
|
-
* @default false
|
|
199
|
-
*/
|
|
200
|
-
this.thyBorderless = false;
|
|
201
|
-
this.isReactiveDriven = false;
|
|
202
|
-
this.optionGroups = [];
|
|
203
|
-
/**
|
|
204
|
-
* 目前只支持多选选中项的展示,默认为空,渲染文字模板,传入tag,渲染展示模板,
|
|
205
|
-
* @default ''|tag
|
|
206
|
-
*/
|
|
207
|
-
this.thyPreset = '';
|
|
208
|
-
this.isSearching = false;
|
|
209
|
-
this.groupBy = (item) => item.groupLabel;
|
|
210
|
-
const selectConfig = this.selectConfig;
|
|
211
|
-
this.config = { ...DEFAULT_SELECT_CONFIG, ...selectConfig };
|
|
212
|
-
this.buildScrollStrategy();
|
|
213
|
-
}
|
|
214
|
-
writeValue(value) {
|
|
215
|
-
this.modalValue = value;
|
|
216
|
-
this.setSelectionByModelValue(this.modalValue);
|
|
217
|
-
}
|
|
218
|
-
ngOnInit() {
|
|
219
|
-
this.getPositions();
|
|
220
|
-
this.dropDownMinWidth = this.getDropdownMinWidth();
|
|
221
|
-
if (!this.selectionModel) {
|
|
222
|
-
this.instanceSelectionModel();
|
|
223
|
-
}
|
|
224
|
-
this.setDropDownClass();
|
|
225
|
-
if (isPlatformBrowser(this.platformId)) {
|
|
226
|
-
this.thyClickDispatcher
|
|
227
|
-
.clicked(0)
|
|
228
|
-
.pipe(takeUntil(this.destroy$))
|
|
229
|
-
.subscribe(event => {
|
|
230
|
-
if (!this.elementRef.nativeElement.contains(event.target) && this.panelOpen) {
|
|
231
|
-
this.ngZone.run(() => {
|
|
232
|
-
this.close();
|
|
233
|
-
this.changeDetectorRef.markForCheck();
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
});
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
buildOptionGroups(options) {
|
|
240
|
-
const optionGroups = [];
|
|
241
|
-
const groups = [...new Set(options.filter(item => this.groupBy(item)).map(sub => this.groupBy(sub)))];
|
|
242
|
-
const groupMap = new Map();
|
|
243
|
-
groups.forEach(group => {
|
|
244
|
-
const children = options.filter(item => this.groupBy(item) === group);
|
|
245
|
-
const groupOption = {
|
|
246
|
-
groupLabel: group,
|
|
247
|
-
children: children
|
|
248
|
-
};
|
|
249
|
-
groupMap.set(group, groupOption);
|
|
250
|
-
});
|
|
251
|
-
options.forEach(option => {
|
|
252
|
-
if (this.groupBy(option)) {
|
|
253
|
-
const currentIndex = optionGroups.findIndex(item => item.groupLabel === this.groupBy(option));
|
|
254
|
-
if (currentIndex === -1) {
|
|
255
|
-
const item = groupMap.get(this.groupBy(option));
|
|
256
|
-
optionGroups.push(item);
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
else {
|
|
260
|
-
optionGroups.push(option);
|
|
261
|
-
}
|
|
262
|
-
});
|
|
263
|
-
return optionGroups;
|
|
264
|
-
}
|
|
265
|
-
buildReactiveOptions() {
|
|
266
|
-
if (this.innerOptions.filter(item => this.groupBy(item)).length > 0) {
|
|
267
|
-
this.optionGroups = this.buildOptionGroups(this.innerOptions);
|
|
268
|
-
}
|
|
269
|
-
else {
|
|
270
|
-
this.optionGroups = this.innerOptions;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
getDropdownMinWidth() {
|
|
274
|
-
const mode = this.thyDropdownWidthMode || this.config.dropdownWidthMode;
|
|
275
|
-
let dropdownMinWidth = null;
|
|
276
|
-
if (mode?.minWidth) {
|
|
277
|
-
dropdownMinWidth = mode.minWidth;
|
|
278
|
-
}
|
|
279
|
-
else if (mode === 'min-width') {
|
|
280
|
-
dropdownMinWidth = THY_SELECT_PANEL_MIN_WIDTH;
|
|
281
|
-
}
|
|
282
|
-
else {
|
|
283
|
-
dropdownMinWidth = null;
|
|
284
|
-
}
|
|
285
|
-
return dropdownMinWidth;
|
|
286
|
-
}
|
|
287
|
-
ngAfterViewInit() {
|
|
288
|
-
if (this.isReactiveDriven) {
|
|
289
|
-
this.setup();
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
ngAfterContentInit() {
|
|
293
|
-
if (!this.isReactiveDriven) {
|
|
294
|
-
this.setup();
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
setup() {
|
|
298
|
-
this.optionsChanges$.pipe(startWith(null), takeUntil(this.destroy$)).subscribe(data => {
|
|
299
|
-
this.resetOptions();
|
|
300
|
-
this.initializeSelection();
|
|
301
|
-
this.initKeyManager();
|
|
302
|
-
if (this.isSearching) {
|
|
303
|
-
this.highlightCorrectOption(false);
|
|
304
|
-
this.isSearching = false;
|
|
305
|
-
}
|
|
306
|
-
this.changeDetectorRef.markForCheck();
|
|
307
|
-
this.ngZone.onStable
|
|
308
|
-
.asObservable()
|
|
309
|
-
.pipe(take(1))
|
|
310
|
-
.subscribe(() => {
|
|
311
|
-
if (this.cdkConnectedOverlay && this.cdkConnectedOverlay.overlayRef) {
|
|
312
|
-
this.cdkConnectedOverlay.overlayRef.updatePosition();
|
|
313
|
-
}
|
|
314
|
-
});
|
|
315
|
-
});
|
|
316
|
-
if (this.thyAutoExpand) {
|
|
317
|
-
timer(0).subscribe(() => {
|
|
318
|
-
this.changeDetectorRef.markForCheck();
|
|
319
|
-
this.open();
|
|
320
|
-
this.focus();
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
get isHiddenOptions() {
|
|
325
|
-
return this.options.toArray().every(option => option.hidden);
|
|
326
|
-
}
|
|
327
|
-
onAttached() {
|
|
328
|
-
this.cdkConnectedOverlay.positionChange.pipe(take(1)).subscribe(() => {
|
|
329
|
-
if (this.panel) {
|
|
330
|
-
if (this.keyManager.activeItem) {
|
|
331
|
-
ScrollToService.scrollToElement(this.keyManager.activeItem.element.nativeElement, this.panel.nativeElement);
|
|
332
|
-
this.changeDetectorRef.detectChanges();
|
|
333
|
-
}
|
|
334
|
-
else {
|
|
335
|
-
if (!this.empty) {
|
|
336
|
-
ScrollToService.scrollToElement(this.selectionModel.selected[0].element.nativeElement, this.panel.nativeElement);
|
|
337
|
-
this.changeDetectorRef.detectChanges();
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
});
|
|
342
|
-
}
|
|
343
|
-
dropDownMouseMove(event) {
|
|
344
|
-
if (this.keyManager.activeItem) {
|
|
345
|
-
this.keyManager.setActiveItem(-1);
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
onOptionsScrolled(elementRef) {
|
|
349
|
-
const scroll = elementRef.nativeElement.scrollTop, height = elementRef.nativeElement.clientHeight, scrollHeight = elementRef.nativeElement.scrollHeight;
|
|
350
|
-
if (scroll + height + 10 >= scrollHeight) {
|
|
351
|
-
if (this.thyOnScrollToBottom.observers.length > 0) {
|
|
352
|
-
this.ngZone.run(() => {
|
|
353
|
-
this.thyOnScrollToBottom.emit();
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
onSearchFilter(searchText) {
|
|
359
|
-
searchText = searchText.trim();
|
|
360
|
-
if (this.thyServerSearch) {
|
|
361
|
-
this.isSearching = true;
|
|
362
|
-
this.thyOnSearch.emit(searchText);
|
|
363
|
-
}
|
|
364
|
-
else {
|
|
365
|
-
const options = this.options.toArray();
|
|
366
|
-
options.forEach(option => {
|
|
367
|
-
if (option.matchSearchText(searchText)) {
|
|
368
|
-
option.showOption();
|
|
369
|
-
}
|
|
370
|
-
else {
|
|
371
|
-
option.hideOption();
|
|
372
|
-
}
|
|
373
|
-
});
|
|
374
|
-
this.highlightCorrectOption(false);
|
|
375
|
-
this.updateCdkConnectedOverlayPositions();
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
onBlur(event) {
|
|
379
|
-
// Tab 聚焦后自动聚焦到 input 输入框,此分支下直接返回,无需触发 onTouchedFn
|
|
380
|
-
if (elementMatchClosest(event?.relatedTarget, ['.thy-select-dropdown', 'thy-select'])) {
|
|
381
|
-
return;
|
|
382
|
-
}
|
|
383
|
-
this.onTouchedFn();
|
|
384
|
-
}
|
|
385
|
-
onFocus(event) {
|
|
386
|
-
// thyShowSearch 与 panelOpen 均为 true 时,点击 thySelectControl 需要触发自动聚焦到 input 的逻辑
|
|
387
|
-
// manualFocusing 如果是手动聚焦,不触发自动聚焦到 input 的逻辑
|
|
388
|
-
if ((this.thyShowSearch && this.panelOpen) ||
|
|
389
|
-
(!this.manualFocusing &&
|
|
390
|
-
!elementMatchClosest(event?.relatedTarget, ['.thy-select-dropdown', 'thy-custom-select']))) {
|
|
391
|
-
const inputElement = this.elementRef.nativeElement.querySelector('input');
|
|
392
|
-
inputElement.focus();
|
|
393
|
-
}
|
|
394
|
-
this.manualFocusing = false;
|
|
395
|
-
}
|
|
396
|
-
focus(options) {
|
|
397
|
-
this.manualFocusing = true;
|
|
398
|
-
this.elementRef.nativeElement.focus(options);
|
|
399
|
-
this.manualFocusing = false;
|
|
400
|
-
}
|
|
401
|
-
remove($event) {
|
|
402
|
-
$event.$eventOrigin.stopPropagation();
|
|
403
|
-
if (this.disabled) {
|
|
404
|
-
return;
|
|
405
|
-
}
|
|
406
|
-
if (!this.options.find(option => option === $event.item)) {
|
|
407
|
-
$event.item.deselect();
|
|
408
|
-
// fix option unselect can not emit changes;
|
|
409
|
-
this.onSelect($event.item, true);
|
|
410
|
-
}
|
|
411
|
-
else {
|
|
412
|
-
$event.item.deselect();
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
clearSelectValue(event) {
|
|
416
|
-
if (event) {
|
|
417
|
-
event.stopPropagation();
|
|
418
|
-
}
|
|
419
|
-
if (this.disabled) {
|
|
420
|
-
return;
|
|
421
|
-
}
|
|
422
|
-
this.selectionModel.clear();
|
|
423
|
-
this.changeDetectorRef.markForCheck();
|
|
424
|
-
this.emitModelValueChange();
|
|
425
|
-
}
|
|
426
|
-
updateCdkConnectedOverlayPositions() {
|
|
427
|
-
setTimeout(() => {
|
|
428
|
-
if (this.cdkConnectedOverlay && this.cdkConnectedOverlay.overlayRef) {
|
|
429
|
-
this.cdkConnectedOverlay.overlayRef.updatePosition();
|
|
430
|
-
}
|
|
431
|
-
});
|
|
432
|
-
}
|
|
433
|
-
get selected() {
|
|
434
|
-
return this.isMultiple ? this.selectionModel.selected : this.selectionModel.selected[0];
|
|
435
|
-
}
|
|
436
|
-
get isMultiple() {
|
|
437
|
-
return this.mode === 'multiple';
|
|
438
|
-
}
|
|
439
|
-
get empty() {
|
|
440
|
-
return !this.selectionModel || this.selectionModel.isEmpty();
|
|
441
|
-
}
|
|
442
|
-
getItemCount() {
|
|
443
|
-
const group = this.isReactiveDriven ? this.viewGroups : this.contentGroups;
|
|
444
|
-
return this.options.length + group.length;
|
|
445
|
-
}
|
|
446
|
-
toggle(event) {
|
|
447
|
-
if (this.panelOpen) {
|
|
448
|
-
if (!this.thyShowSearch) {
|
|
449
|
-
this.close();
|
|
450
|
-
}
|
|
451
|
-
}
|
|
452
|
-
else {
|
|
453
|
-
this.open();
|
|
454
|
-
}
|
|
455
|
-
}
|
|
456
|
-
open() {
|
|
457
|
-
if (this.disabled || !this.options || this.panelOpen) {
|
|
458
|
-
return;
|
|
459
|
-
}
|
|
460
|
-
this.triggerRectWidth = this.getOriginRectWidth();
|
|
461
|
-
this.subscribeTriggerResize();
|
|
462
|
-
this.panelOpen = true;
|
|
463
|
-
this.highlightCorrectOption();
|
|
464
|
-
this.thyOnExpandStatusChange.emit(this.panelOpen);
|
|
465
|
-
this.changeDetectorRef.markForCheck();
|
|
466
|
-
}
|
|
467
|
-
close() {
|
|
468
|
-
if (this.panelOpen) {
|
|
469
|
-
this.panelOpen = false;
|
|
470
|
-
this.unsubscribeTriggerResize();
|
|
471
|
-
this.thyOnExpandStatusChange.emit(this.panelOpen);
|
|
472
|
-
this.changeDetectorRef.markForCheck();
|
|
473
|
-
this.onTouchedFn();
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
emitModelValueChange() {
|
|
477
|
-
const selectedValues = this.selectionModel.selected;
|
|
478
|
-
const changeValue = selectedValues.map((option) => {
|
|
479
|
-
return option.thyValue;
|
|
480
|
-
});
|
|
481
|
-
if (this.isMultiple) {
|
|
482
|
-
this.modalValue = changeValue;
|
|
483
|
-
}
|
|
484
|
-
else {
|
|
485
|
-
if (changeValue.length === 0) {
|
|
486
|
-
this.modalValue = null;
|
|
487
|
-
}
|
|
488
|
-
else {
|
|
489
|
-
this.modalValue = changeValue[0];
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
this.onChangeFn(this.modalValue);
|
|
493
|
-
this.updateCdkConnectedOverlayPositions();
|
|
494
|
-
}
|
|
495
|
-
highlightCorrectOption(fromOpenPanel = true) {
|
|
496
|
-
if (this.keyManager && this.panelOpen) {
|
|
497
|
-
if (fromOpenPanel) {
|
|
498
|
-
if (this.keyManager.activeItem) {
|
|
499
|
-
return;
|
|
500
|
-
}
|
|
501
|
-
if (this.empty) {
|
|
502
|
-
if (!this.thyAutoActiveFirstItem) {
|
|
503
|
-
return;
|
|
504
|
-
}
|
|
505
|
-
this.keyManager.setFirstItemActive();
|
|
506
|
-
}
|
|
507
|
-
else {
|
|
508
|
-
this.keyManager.setActiveItem(this.selectionModel.selected[0]);
|
|
509
|
-
}
|
|
510
|
-
}
|
|
511
|
-
else {
|
|
512
|
-
if (!this.thyAutoActiveFirstItem) {
|
|
513
|
-
return;
|
|
514
|
-
}
|
|
515
|
-
// always set first option active
|
|
516
|
-
this.keyManager.setFirstItemActive();
|
|
517
|
-
}
|
|
518
|
-
}
|
|
519
|
-
}
|
|
520
|
-
initKeyManager() {
|
|
521
|
-
if (this.keyManager && this.keyManager.activeItem) {
|
|
522
|
-
this.keyManager.activeItem.setInactiveStyles();
|
|
523
|
-
}
|
|
524
|
-
this.keyManager = new ActiveDescendantKeyManager(this.options)
|
|
525
|
-
.withTypeAhead()
|
|
526
|
-
.withWrap()
|
|
527
|
-
.withVerticalOrientation()
|
|
528
|
-
.withAllowedModifierKeys(['shiftKey']);
|
|
529
|
-
this.keyManager.tabOut.pipe(takeUntil(this.destroy$)).subscribe(() => {
|
|
530
|
-
this.focus();
|
|
531
|
-
this.close();
|
|
532
|
-
});
|
|
533
|
-
this.keyManager.change.pipe(takeUntil(this.destroy$)).subscribe(() => {
|
|
534
|
-
if (this.panelOpen && this.panel) {
|
|
535
|
-
if (this.keyManager.activeItem) {
|
|
536
|
-
ScrollToService.scrollToElement(this.keyManager.activeItem.element.nativeElement, this.panel.nativeElement);
|
|
537
|
-
}
|
|
538
|
-
}
|
|
539
|
-
else if (!this.panelOpen && !this.isMultiple && this.keyManager.activeItem) {
|
|
540
|
-
this.keyManager.activeItem.selectViaInteraction();
|
|
541
|
-
}
|
|
542
|
-
});
|
|
543
|
-
}
|
|
544
|
-
handleClosedKeydown(event) {
|
|
545
|
-
const keyCode = event.keyCode;
|
|
546
|
-
const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW || keyCode === LEFT_ARROW || keyCode === RIGHT_ARROW;
|
|
547
|
-
const isOpenKey = keyCode === ENTER || keyCode === SPACE;
|
|
548
|
-
const manager = this.keyManager;
|
|
549
|
-
// Open the select on ALT + arrow key to match the native <select>
|
|
550
|
-
if ((isOpenKey && !hasModifierKey(event)) || ((this.isMultiple || event.altKey) && isArrowKey)) {
|
|
551
|
-
event.preventDefault(); // prevents the page from scrolling down when pressing space
|
|
552
|
-
this.open();
|
|
553
|
-
}
|
|
554
|
-
else if (!this.isMultiple) {
|
|
555
|
-
if (keyCode === HOME || keyCode === END) {
|
|
556
|
-
keyCode === HOME ? manager.setFirstItemActive() : manager.setLastItemActive();
|
|
557
|
-
event.preventDefault();
|
|
558
|
-
}
|
|
559
|
-
else {
|
|
560
|
-
manager.onKeydown(event);
|
|
561
|
-
}
|
|
562
|
-
}
|
|
563
|
-
}
|
|
564
|
-
handleOpenKeydown(event) {
|
|
565
|
-
const keyCode = event.keyCode;
|
|
566
|
-
const isArrowKey = keyCode === DOWN_ARROW || keyCode === UP_ARROW;
|
|
567
|
-
const manager = this.keyManager;
|
|
568
|
-
if (keyCode === HOME || keyCode === END) {
|
|
569
|
-
event.preventDefault();
|
|
570
|
-
keyCode === HOME ? manager.setFirstItemActive() : manager.setLastItemActive();
|
|
571
|
-
}
|
|
572
|
-
else if (isArrowKey && event.altKey) {
|
|
573
|
-
// Close the select on ALT + arrow key to match the native <select>
|
|
574
|
-
event.preventDefault();
|
|
575
|
-
this.close();
|
|
576
|
-
}
|
|
577
|
-
else if ((keyCode === ENTER || keyCode === SPACE) && (manager.activeItem || !this.empty) && !hasModifierKey(event)) {
|
|
578
|
-
event.preventDefault();
|
|
579
|
-
if (!manager.activeItem) {
|
|
580
|
-
if (manager.activeItemIndex === -1 && !this.empty) {
|
|
581
|
-
manager.setActiveItem(this.selectionModel.selected[0]);
|
|
582
|
-
}
|
|
583
|
-
}
|
|
584
|
-
manager.activeItem.selectViaInteraction();
|
|
585
|
-
}
|
|
586
|
-
else if (this.isMultiple && keyCode === A && event.ctrlKey) {
|
|
587
|
-
event.preventDefault();
|
|
588
|
-
const hasDeselectedOptions = this.options.some(opt => !opt.disabled && !opt.selected);
|
|
589
|
-
this.options.forEach(option => {
|
|
590
|
-
if (!option.disabled) {
|
|
591
|
-
hasDeselectedOptions ? option.select() : option.deselect();
|
|
592
|
-
}
|
|
593
|
-
});
|
|
594
|
-
}
|
|
595
|
-
else {
|
|
596
|
-
if (manager.activeItemIndex === -1 && !this.empty) {
|
|
597
|
-
manager.setActiveItem(this.selectionModel.selected[0]);
|
|
598
|
-
}
|
|
599
|
-
const previouslyFocusedIndex = manager.activeItemIndex;
|
|
600
|
-
manager.onKeydown(event);
|
|
601
|
-
if (this.isMultiple &&
|
|
602
|
-
isArrowKey &&
|
|
603
|
-
event.shiftKey &&
|
|
604
|
-
manager.activeItem &&
|
|
605
|
-
manager.activeItemIndex !== previouslyFocusedIndex) {
|
|
606
|
-
manager.activeItem.selectViaInteraction();
|
|
607
|
-
}
|
|
608
|
-
}
|
|
609
|
-
}
|
|
610
|
-
getPositions() {
|
|
611
|
-
this.dropDownPositions = getFlexiblePositions(this.thyPlacement || this.config.placement, this.defaultOffset);
|
|
612
|
-
}
|
|
613
|
-
instanceSelectionModel() {
|
|
614
|
-
if (this.selectionModel) {
|
|
615
|
-
this.selectionModel.clear();
|
|
616
|
-
}
|
|
617
|
-
this.selectionModel = new SelectionModel(this.isMultiple);
|
|
618
|
-
if (this.selectionModelSubscription) {
|
|
619
|
-
this.selectionModelSubscription.unsubscribe();
|
|
620
|
-
this.selectionModelSubscription = null;
|
|
621
|
-
}
|
|
622
|
-
this.selectionModelSubscription = this.selectionModel.changed.pipe(takeUntil(this.destroy$)).subscribe(event => {
|
|
623
|
-
event.added.forEach(option => option.select());
|
|
624
|
-
event.removed.forEach(option => option.deselect());
|
|
625
|
-
});
|
|
626
|
-
}
|
|
627
|
-
resetOptions() {
|
|
628
|
-
const changedOrDestroyed$ = merge(this.optionsChanges$, this.destroy$);
|
|
629
|
-
this.optionSelectionChanges.pipe(takeUntil(changedOrDestroyed$)).subscribe((event) => {
|
|
630
|
-
this.onSelect(event.option, event.isUserInput);
|
|
631
|
-
if (event.isUserInput && !this.isMultiple && this.panelOpen) {
|
|
632
|
-
this.close();
|
|
633
|
-
this.focus();
|
|
634
|
-
}
|
|
635
|
-
});
|
|
636
|
-
}
|
|
637
|
-
initializeSelection() {
|
|
638
|
-
Promise.resolve().then(() => {
|
|
639
|
-
this.setSelectionByModelValue(this.modalValue);
|
|
640
|
-
});
|
|
641
|
-
}
|
|
642
|
-
setDropDownClass() {
|
|
643
|
-
let modeClass = '';
|
|
644
|
-
if (this.isMultiple) {
|
|
645
|
-
modeClass = `thy-select-dropdown-${this.mode}`;
|
|
646
|
-
}
|
|
647
|
-
else {
|
|
648
|
-
modeClass = `thy-select-dropdown-single`;
|
|
649
|
-
}
|
|
650
|
-
this.dropDownClass = {
|
|
651
|
-
[`thy-select-dropdown`]: true,
|
|
652
|
-
[modeClass]: true
|
|
653
|
-
};
|
|
654
|
-
}
|
|
655
|
-
setSelectionByModelValue(modalValue) {
|
|
656
|
-
if (helpers.isUndefinedOrNull(modalValue)) {
|
|
657
|
-
if (this.selectionModel.selected.length > 0) {
|
|
658
|
-
this.selectionModel.clear();
|
|
659
|
-
this.changeDetectorRef.markForCheck();
|
|
660
|
-
}
|
|
661
|
-
return;
|
|
662
|
-
}
|
|
663
|
-
if (this.isMultiple) {
|
|
664
|
-
if (isArray(modalValue)) {
|
|
665
|
-
const selected = [...this.selectionModel.selected];
|
|
666
|
-
this.selectionModel.clear();
|
|
667
|
-
modalValue.forEach(itemValue => {
|
|
668
|
-
const option = this.options.find(_option => _option.thyValue === itemValue) ||
|
|
669
|
-
selected.find(_option => _option.thyValue === itemValue);
|
|
670
|
-
if (option) {
|
|
671
|
-
this.selectionModel.select(option);
|
|
672
|
-
}
|
|
673
|
-
});
|
|
674
|
-
}
|
|
675
|
-
}
|
|
676
|
-
else {
|
|
677
|
-
const selectedOption = this.options?.find(option => {
|
|
678
|
-
return option.thyValue === modalValue;
|
|
679
|
-
});
|
|
680
|
-
if (selectedOption) {
|
|
681
|
-
this.selectionModel.select(selectedOption);
|
|
682
|
-
}
|
|
683
|
-
}
|
|
684
|
-
this.changeDetectorRef.markForCheck();
|
|
685
|
-
}
|
|
686
|
-
onSelect(option, isUserInput) {
|
|
687
|
-
const wasSelected = this.selectionModel.isSelected(option);
|
|
688
|
-
if (option.thyValue == null && !this.isMultiple) {
|
|
689
|
-
option.deselect();
|
|
690
|
-
this.selectionModel.clear();
|
|
691
|
-
}
|
|
692
|
-
else {
|
|
693
|
-
if (wasSelected !== option.selected) {
|
|
694
|
-
option.selected ? this.selectionModel.select(option) : this.selectionModel.deselect(option);
|
|
695
|
-
}
|
|
696
|
-
if (isUserInput) {
|
|
697
|
-
this.keyManager.setActiveItem(option);
|
|
698
|
-
}
|
|
699
|
-
if (this.isMultiple) {
|
|
700
|
-
this.sortValues();
|
|
701
|
-
if (isUserInput) {
|
|
702
|
-
this.focus();
|
|
703
|
-
}
|
|
704
|
-
}
|
|
705
|
-
}
|
|
706
|
-
if (wasSelected !== this.selectionModel.isSelected(option)) {
|
|
707
|
-
this.emitModelValueChange();
|
|
708
|
-
}
|
|
709
|
-
if (!this.isMultiple) {
|
|
710
|
-
this.onTouchedFn();
|
|
711
|
-
}
|
|
712
|
-
this.changeDetectorRef.markForCheck();
|
|
713
|
-
}
|
|
714
|
-
sortValues() {
|
|
715
|
-
if (this.isMultiple) {
|
|
716
|
-
const options = this.options.toArray();
|
|
717
|
-
if (this.thySortComparator) {
|
|
718
|
-
this.selectionModel.sort((a, b) => {
|
|
719
|
-
return this.thySortComparator(a, b, options);
|
|
720
|
-
});
|
|
721
|
-
}
|
|
722
|
-
}
|
|
723
|
-
}
|
|
724
|
-
getOriginRectWidth() {
|
|
725
|
-
return this.thyOrigin ? coerceElement(this.thyOrigin).offsetWidth : this.trigger.nativeElement.offsetWidth;
|
|
726
|
-
}
|
|
727
|
-
subscribeTriggerResize() {
|
|
728
|
-
this.unsubscribeTriggerResize();
|
|
729
|
-
this.ngZone.runOutsideAngular(() => {
|
|
730
|
-
this.resizeSubscription = new Observable(observer => {
|
|
731
|
-
const resize = new ResizeObserver((entries) => {
|
|
732
|
-
observer.next();
|
|
733
|
-
});
|
|
734
|
-
resize.observe(this.trigger.nativeElement);
|
|
735
|
-
})
|
|
736
|
-
.pipe(startWith(), map(() => {
|
|
737
|
-
return this.getOriginRectWidth();
|
|
738
|
-
}), distinctUntilChanged())
|
|
739
|
-
.subscribe((width) => {
|
|
740
|
-
this.ngZone.run(() => {
|
|
741
|
-
this.triggerRectWidth = width;
|
|
742
|
-
this.updateCdkConnectedOverlayPositions();
|
|
743
|
-
this.changeDetectorRef.markForCheck();
|
|
744
|
-
});
|
|
745
|
-
});
|
|
746
|
-
});
|
|
747
|
-
}
|
|
748
|
-
unsubscribeTriggerResize() {
|
|
749
|
-
if (this.resizeSubscription) {
|
|
750
|
-
this.resizeSubscription.unsubscribe();
|
|
751
|
-
this.resizeSubscription = null;
|
|
752
|
-
}
|
|
753
|
-
}
|
|
754
|
-
ngOnDestroy() {
|
|
755
|
-
this.unsubscribeTriggerResize();
|
|
756
|
-
this.destroy$.next();
|
|
757
|
-
this.destroy$.complete();
|
|
758
|
-
}
|
|
759
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThySelect, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
760
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ThySelect, isStandalone: true, selector: "thy-select,thy-custom-select", inputs: { thyDropdownWidthMode: "thyDropdownWidthMode", thyShowSearch: ["thyShowSearch", "thyShowSearch", coerceBooleanProperty], thyPlaceHolder: "thyPlaceHolder", thyServerSearch: ["thyServerSearch", "thyServerSearch", coerceBooleanProperty], thyLoadState: ["thyLoadState", "thyLoadState", coerceBooleanProperty], thyAutoActiveFirstItem: ["thyAutoActiveFirstItem", "thyAutoActiveFirstItem", coerceBooleanProperty], thyMode: "thyMode", thySize: "thySize", thyEmptyStateText: "thyEmptyStateText", thyEmptySearchMessageText: "thyEmptySearchMessageText", thyEnableScrollLoad: ["thyEnableScrollLoad", "thyEnableScrollLoad", coerceBooleanProperty], thyAllowClear: ["thyAllowClear", "thyAllowClear", coerceBooleanProperty], thyDisabled: ["thyDisabled", "thyDisabled", coerceBooleanProperty], thySortComparator: "thySortComparator", thyFooterTemplate: "thyFooterTemplate", thyPlacement: "thyPlacement", thyOrigin: "thyOrigin", thyFooterClass: "thyFooterClass", thyAutoExpand: ["thyAutoExpand", "thyAutoExpand", coerceBooleanProperty], thyHasBackdrop: ["thyHasBackdrop", "thyHasBackdrop", coerceBooleanProperty], thyMaxTagCount: ["thyMaxTagCount", "thyMaxTagCount", numberAttribute], thyBorderless: ["thyBorderless", "thyBorderless", coerceBooleanProperty], thyOptions: "thyOptions", thyPreset: "thyPreset" }, outputs: { thyOnSearch: "thyOnSearch", thyOnScrollToBottom: "thyOnScrollToBottom", thyOnExpandStatusChange: "thyOnExpandStatusChange" }, host: { listeners: { "focus": "onFocus($event)", "blur": "onBlur($event)", "keydown": "handleKeydown($event)" }, properties: { "attr.tabindex": "tabIndex", "class.thy-select-custom": "this.isSelectCustom", "class.thy-select": "this.isSelect", "class.menu-is-opened": "this.panelOpen" } }, providers: [
|
|
761
|
-
{
|
|
762
|
-
provide: THY_OPTION_PARENT_COMPONENT,
|
|
763
|
-
useExisting: ThySelect
|
|
764
|
-
},
|
|
765
|
-
{
|
|
766
|
-
provide: NG_VALUE_ACCESSOR,
|
|
767
|
-
useExisting: forwardRef(() => ThySelect),
|
|
768
|
-
multi: true
|
|
769
|
-
}
|
|
770
|
-
], queries: [{ propertyName: "selectedValueDisplayRef", first: true, predicate: ["selectedDisplay"], descendants: true }, { propertyName: "contentOptions", predicate: ThyOption, descendants: true }, { propertyName: "contentGroups", predicate: ThySelectOptionGroup }], viewQueries: [{ propertyName: "cdkConnectedOverlay", first: true, predicate: CdkConnectedOverlay, descendants: true, static: true }, { propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true, read: ElementRef, static: true }, { propertyName: "panel", first: true, predicate: ["panel"], descendants: true, read: ElementRef }, { propertyName: "viewOptions", predicate: ThyOption, descendants: true }, { propertyName: "viewGroups", predicate: ThySelectOptionGroup, descendants: true }], exportAs: ["thySelect"], usesInheritance: true, ngImport: i0, template: "<div\n cdk-overlay-origin\n thySelectControl\n (click)=\"toggle($event)\"\n #origin=\"cdkOverlayOrigin\"\n #trigger\n [thyPanelOpened]=\"panelOpen\"\n [thySelectedOptions]=\"selected\"\n [thyIsMultiple]=\"isMultiple\"\n [thyShowSearch]=\"thyShowSearch\"\n [thyAllowClear]=\"thyAllowClear\"\n [thySize]=\"thySize\"\n [thyPlaceholder]=\"thyPlaceHolder\"\n [customDisplayTemplate]=\"selectedValueDisplayRef\"\n [thyDisabled]=\"disabled\"\n [thyBorderless]=\"thyBorderless\"\n (thyOnClear)=\"clearSelectValue($event)\"\n (thyOnRemove)=\"remove($event)\"\n (thyOnSearch)=\"onSearchFilter($event)\"\n (thyOnBlur)=\"onBlur($event)\"\n [thyMaxTagCount]=\"thyMaxTagCount\"\n [thyPreset]=\"thyPreset\"></div>\n\n<ng-template\n cdk-connected-overlay\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayHasBackdrop]=\"thyHasBackdrop\"\n [cdkConnectedOverlayPositions]=\"dropDownPositions\"\n [cdkConnectedOverlayOrigin]=\"thyOrigin || origin\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayWidth]=\"triggerRectWidth\"\n [cdkConnectedOverlayMinWidth]=\"dropDownMinWidth\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n cdkConnectedOverlayTransformOriginOn=\".thy-select-dropdown\"\n (attach)=\"onAttached()\"\n (detach)=\"close()\">\n <div\n thyStopPropagation\n [attr.tabindex]=\"-1\"\n [ngClass]=\"dropDownClass\"\n [@scaleYMotion]=\"placement === 'top' || placement === 'bottom' ? 'enter' : 'void'\"\n [@scaleXMotion]=\"placement === 'left' || placement === 'right' ? 'enter' : 'void'\"\n [@scaleMotion]=\"placement !== 'top' && placement !== 'bottom' && placement !== 'left' && placement !== 'right' ? 'enter' : 'void'\"\n (mousemove)=\"dropDownMouseMove($event)\">\n @if (contentOptions?.length > 0 || contentGroups?.length > 0 || innerOptions?.length > 0) {\n <div\n #panel\n class=\"thy-select-dropdown-options thy-select-dropdown-options-{{ size }}\"\n thyScroll\n (thyOnScrolled)=\"onOptionsScrolled($event)\"\n [thyEnable]=\"thyEnableScrollLoad\">\n @if (isReactiveDriven) {\n <ng-template [ngTemplateOutlet]=\"optionsContainer.optionsTemplate\"></ng-template>\n }\n <ng-content></ng-content>\n @if (isHiddenOptions) {\n <thy-loading [thyDone]=\"thyLoadState\" thySize=\"sm\"></thy-loading>\n <div class=\"thy-select-empty-content\">\n @if (thyLoadState) {\n <thy-empty [thyMessage]=\"emptySearchMessageText\" thySize=\"sm\" [thyIconName]=\"emptyIcon()\"></thy-empty>\n }\n </div>\n }\n </div>\n } @else {\n <thy-loading [thyDone]=\"thyLoadState\" thySize=\"sm\"></thy-loading>\n <div class=\"thy-select-empty-content\">\n @if (thyLoadState) {\n <thy-empty [thyMessage]=\"emptyStateText\" thySize=\"sm\" [thyIconName]=\"emptyIcon()\"></thy-empty>\n }\n </div>\n }\n @if (thyFooterTemplate) {\n <div [class]=\"thyFooterClass ? thyFooterClass : 'thy-custom-select-footer'\">\n @if (thyFooterTemplate) {\n <ng-template [ngTemplateOutlet]=\"thyFooterTemplate\"></ng-template>\n }\n </div>\n }\n </div>\n</ng-template>\n\n<thy-options-container #optionsContainer>\n @for (option of optionGroups; track $index) {\n @if (!option.children) {\n <thy-option\n [thyDisabled]=\"option.disabled\"\n [thyLabelText]=\"option.label\"\n [thyValue]=\"option.value\"\n [thyRawValue]=\"option\"></thy-option>\n } @else {\n <thy-option-group [thyGroupLabel]=\"option.groupLabel\">\n @for (sub of option.children; track sub.value) {\n <thy-option [thyDisabled]=\"sub.disabled\" [thyLabelText]=\"sub.label\" [thyValue]=\"sub.value\" [thyRawValue]=\"sub\"></thy-option>\n }\n </thy-option-group>\n }\n }\n</thy-options-container>\n", dependencies: [{ kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ThySelectControl, selector: "thy-select-control,[thySelectControl]", inputs: ["thyPanelOpened", "thyIsMultiple", "thyShowSearch", "thySelectedOptions", "thyDisabled", "customDisplayTemplate", "thyAllowClear", "thyPlaceholder", "thySize", "thyMaxTagCount", "thyBorderless", "thyPreset"], outputs: ["thyOnSearch", "thyOnRemove", "thyOnClear", "thyOnBlur"] }, { kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: ThyStopPropagationDirective, selector: "[thyStopPropagation]", inputs: ["thyStopPropagation"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: ThyScrollDirective, selector: "[thyScroll]", inputs: ["thyEnable"], outputs: ["thyOnScrolled"] }, { kind: "component", type: ThyLoading, selector: "thy-loading", inputs: ["thyDone", "thyTip", "thyIsMask"] }, { kind: "component", type: ThyEmpty, selector: "thy-empty", inputs: ["thyMessage", "thyTranslationKey", "thyTranslationValues", "thyEntityName", "thyEntityNameTranslateKey", "thyIconName", "thySize", "thyMarginTop", "thyTopAuto", "thyContainer", "thyImageUrl", "thyImageLoading", "thyImageFetchPriority", "thyDescription"] }, { kind: "component", type: ThyOptionsContainer, selector: "thy-options-container" }, { kind: "component", type: ThyOption, selector: "thy-option", inputs: ["thyValue", "thyRawValue", "thyLabelText", "thyShowOptionCustom", "thySearchKey", "thyDisabled"], outputs: ["selectionChange", "visibleChange"] }, { kind: "component", type: ThySelectOptionGroup, selector: "thy-option-group", inputs: ["thyDisabled", "thyGroupLabel"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [scaleXMotion, scaleYMotion, scaleMotion], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
771
|
-
}
|
|
772
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThySelect, decorators: [{
|
|
773
|
-
type: Component,
|
|
774
|
-
args: [{ selector: 'thy-select,thy-custom-select', exportAs: 'thySelect', providers: [
|
|
775
|
-
{
|
|
776
|
-
provide: THY_OPTION_PARENT_COMPONENT,
|
|
777
|
-
useExisting: ThySelect
|
|
778
|
-
},
|
|
779
|
-
{
|
|
780
|
-
provide: NG_VALUE_ACCESSOR,
|
|
781
|
-
useExisting: forwardRef(() => ThySelect),
|
|
782
|
-
multi: true
|
|
783
|
-
}
|
|
784
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
785
|
-
CdkOverlayOrigin,
|
|
786
|
-
ThySelectControl,
|
|
787
|
-
CdkConnectedOverlay,
|
|
788
|
-
ThyStopPropagationDirective,
|
|
789
|
-
NgClass,
|
|
790
|
-
ThyScrollDirective,
|
|
791
|
-
ThyLoading,
|
|
792
|
-
ThyEmpty,
|
|
793
|
-
ThyOptionsContainer,
|
|
794
|
-
ThyOption,
|
|
795
|
-
ThySelectOptionGroup,
|
|
796
|
-
NgTemplateOutlet
|
|
797
|
-
], host: {
|
|
798
|
-
'[attr.tabindex]': 'tabIndex',
|
|
799
|
-
'(focus)': 'onFocus($event)',
|
|
800
|
-
'(blur)': 'onBlur($event)'
|
|
801
|
-
}, animations: [scaleXMotion, scaleYMotion, scaleMotion], template: "<div\n cdk-overlay-origin\n thySelectControl\n (click)=\"toggle($event)\"\n #origin=\"cdkOverlayOrigin\"\n #trigger\n [thyPanelOpened]=\"panelOpen\"\n [thySelectedOptions]=\"selected\"\n [thyIsMultiple]=\"isMultiple\"\n [thyShowSearch]=\"thyShowSearch\"\n [thyAllowClear]=\"thyAllowClear\"\n [thySize]=\"thySize\"\n [thyPlaceholder]=\"thyPlaceHolder\"\n [customDisplayTemplate]=\"selectedValueDisplayRef\"\n [thyDisabled]=\"disabled\"\n [thyBorderless]=\"thyBorderless\"\n (thyOnClear)=\"clearSelectValue($event)\"\n (thyOnRemove)=\"remove($event)\"\n (thyOnSearch)=\"onSearchFilter($event)\"\n (thyOnBlur)=\"onBlur($event)\"\n [thyMaxTagCount]=\"thyMaxTagCount\"\n [thyPreset]=\"thyPreset\"></div>\n\n<ng-template\n cdk-connected-overlay\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayHasBackdrop]=\"thyHasBackdrop\"\n [cdkConnectedOverlayPositions]=\"dropDownPositions\"\n [cdkConnectedOverlayOrigin]=\"thyOrigin || origin\"\n [cdkConnectedOverlayOpen]=\"panelOpen\"\n [cdkConnectedOverlayWidth]=\"triggerRectWidth\"\n [cdkConnectedOverlayMinWidth]=\"dropDownMinWidth\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n cdkConnectedOverlayTransformOriginOn=\".thy-select-dropdown\"\n (attach)=\"onAttached()\"\n (detach)=\"close()\">\n <div\n thyStopPropagation\n [attr.tabindex]=\"-1\"\n [ngClass]=\"dropDownClass\"\n [@scaleYMotion]=\"placement === 'top' || placement === 'bottom' ? 'enter' : 'void'\"\n [@scaleXMotion]=\"placement === 'left' || placement === 'right' ? 'enter' : 'void'\"\n [@scaleMotion]=\"placement !== 'top' && placement !== 'bottom' && placement !== 'left' && placement !== 'right' ? 'enter' : 'void'\"\n (mousemove)=\"dropDownMouseMove($event)\">\n @if (contentOptions?.length > 0 || contentGroups?.length > 0 || innerOptions?.length > 0) {\n <div\n #panel\n class=\"thy-select-dropdown-options thy-select-dropdown-options-{{ size }}\"\n thyScroll\n (thyOnScrolled)=\"onOptionsScrolled($event)\"\n [thyEnable]=\"thyEnableScrollLoad\">\n @if (isReactiveDriven) {\n <ng-template [ngTemplateOutlet]=\"optionsContainer.optionsTemplate\"></ng-template>\n }\n <ng-content></ng-content>\n @if (isHiddenOptions) {\n <thy-loading [thyDone]=\"thyLoadState\" thySize=\"sm\"></thy-loading>\n <div class=\"thy-select-empty-content\">\n @if (thyLoadState) {\n <thy-empty [thyMessage]=\"emptySearchMessageText\" thySize=\"sm\" [thyIconName]=\"emptyIcon()\"></thy-empty>\n }\n </div>\n }\n </div>\n } @else {\n <thy-loading [thyDone]=\"thyLoadState\" thySize=\"sm\"></thy-loading>\n <div class=\"thy-select-empty-content\">\n @if (thyLoadState) {\n <thy-empty [thyMessage]=\"emptyStateText\" thySize=\"sm\" [thyIconName]=\"emptyIcon()\"></thy-empty>\n }\n </div>\n }\n @if (thyFooterTemplate) {\n <div [class]=\"thyFooterClass ? thyFooterClass : 'thy-custom-select-footer'\">\n @if (thyFooterTemplate) {\n <ng-template [ngTemplateOutlet]=\"thyFooterTemplate\"></ng-template>\n }\n </div>\n }\n </div>\n</ng-template>\n\n<thy-options-container #optionsContainer>\n @for (option of optionGroups; track $index) {\n @if (!option.children) {\n <thy-option\n [thyDisabled]=\"option.disabled\"\n [thyLabelText]=\"option.label\"\n [thyValue]=\"option.value\"\n [thyRawValue]=\"option\"></thy-option>\n } @else {\n <thy-option-group [thyGroupLabel]=\"option.groupLabel\">\n @for (sub of option.children; track sub.value) {\n <thy-option [thyDisabled]=\"sub.disabled\" [thyLabelText]=\"sub.label\" [thyValue]=\"sub.value\" [thyRawValue]=\"sub\"></thy-option>\n }\n </thy-option-group>\n }\n }\n</thy-options-container>\n" }]
|
|
802
|
-
}], ctorParameters: () => [], propDecorators: { thyDropdownWidthMode: [{
|
|
803
|
-
type: Input
|
|
804
|
-
}], cdkConnectedOverlay: [{
|
|
805
|
-
type: ViewChild,
|
|
806
|
-
args: [CdkConnectedOverlay, { static: true }]
|
|
807
|
-
}], isSelectCustom: [{
|
|
808
|
-
type: HostBinding,
|
|
809
|
-
args: ['class.thy-select-custom']
|
|
810
|
-
}], isSelect: [{
|
|
811
|
-
type: HostBinding,
|
|
812
|
-
args: ['class.thy-select']
|
|
813
|
-
}], panelOpen: [{
|
|
814
|
-
type: HostBinding,
|
|
815
|
-
args: ['class.menu-is-opened']
|
|
816
|
-
}], thyOnSearch: [{
|
|
817
|
-
type: Output
|
|
818
|
-
}], thyOnScrollToBottom: [{
|
|
819
|
-
type: Output
|
|
820
|
-
}], thyOnExpandStatusChange: [{
|
|
821
|
-
type: Output
|
|
822
|
-
}], thyShowSearch: [{
|
|
823
|
-
type: Input,
|
|
824
|
-
args: [{ transform: coerceBooleanProperty }]
|
|
825
|
-
}], thyPlaceHolder: [{
|
|
826
|
-
type: Input
|
|
827
|
-
}], thyServerSearch: [{
|
|
828
|
-
type: Input,
|
|
829
|
-
args: [{ transform: coerceBooleanProperty }]
|
|
830
|
-
}], thyLoadState: [{
|
|
831
|
-
type: Input,
|
|
832
|
-
args: [{ transform: coerceBooleanProperty }]
|
|
833
|
-
}], thyAutoActiveFirstItem: [{
|
|
834
|
-
type: Input,
|
|
835
|
-
args: [{ transform: coerceBooleanProperty }]
|
|
836
|
-
}], thyMode: [{
|
|
837
|
-
type: Input
|
|
838
|
-
}], thySize: [{
|
|
839
|
-
type: Input
|
|
840
|
-
}], thyEmptyStateText: [{
|
|
841
|
-
type: Input
|
|
842
|
-
}], thyEmptySearchMessageText: [{
|
|
843
|
-
type: Input
|
|
844
|
-
}], thyEnableScrollLoad: [{
|
|
845
|
-
type: Input,
|
|
846
|
-
args: [{ transform: coerceBooleanProperty }]
|
|
847
|
-
}], thyAllowClear: [{
|
|
848
|
-
type: Input,
|
|
849
|
-
args: [{ transform: coerceBooleanProperty }]
|
|
850
|
-
}], thyDisabled: [{
|
|
851
|
-
type: Input,
|
|
852
|
-
args: [{ transform: coerceBooleanProperty }]
|
|
853
|
-
}], thySortComparator: [{
|
|
854
|
-
type: Input
|
|
855
|
-
}], thyFooterTemplate: [{
|
|
856
|
-
type: Input
|
|
857
|
-
}], thyPlacement: [{
|
|
858
|
-
type: Input
|
|
859
|
-
}], thyOrigin: [{
|
|
860
|
-
type: Input
|
|
861
|
-
}], thyFooterClass: [{
|
|
862
|
-
type: Input
|
|
863
|
-
}], selectedValueDisplayRef: [{
|
|
864
|
-
type: ContentChild,
|
|
865
|
-
args: ['selectedDisplay']
|
|
866
|
-
}], thyAutoExpand: [{
|
|
867
|
-
type: Input,
|
|
868
|
-
args: [{ transform: coerceBooleanProperty }]
|
|
869
|
-
}], thyHasBackdrop: [{
|
|
870
|
-
type: Input,
|
|
871
|
-
args: [{ transform: coerceBooleanProperty }]
|
|
872
|
-
}], thyMaxTagCount: [{
|
|
873
|
-
type: Input,
|
|
874
|
-
args: [{ transform: numberAttribute }]
|
|
875
|
-
}], thyBorderless: [{
|
|
876
|
-
type: Input,
|
|
877
|
-
args: [{ transform: coerceBooleanProperty }]
|
|
878
|
-
}], thyOptions: [{
|
|
879
|
-
type: Input
|
|
880
|
-
}], thyPreset: [{
|
|
881
|
-
type: Input
|
|
882
|
-
}], trigger: [{
|
|
883
|
-
type: ViewChild,
|
|
884
|
-
args: ['trigger', { read: ElementRef, static: true }]
|
|
885
|
-
}], panel: [{
|
|
886
|
-
type: ViewChild,
|
|
887
|
-
args: ['panel', { read: ElementRef }]
|
|
888
|
-
}], contentOptions: [{
|
|
889
|
-
type: ContentChildren,
|
|
890
|
-
args: [ThyOption, { descendants: true }]
|
|
891
|
-
}], viewOptions: [{
|
|
892
|
-
type: ViewChildren,
|
|
893
|
-
args: [ThyOption]
|
|
894
|
-
}], contentGroups: [{
|
|
895
|
-
type: ContentChildren,
|
|
896
|
-
args: [ThySelectOptionGroup]
|
|
897
|
-
}], viewGroups: [{
|
|
898
|
-
type: ViewChildren,
|
|
899
|
-
args: [ThySelectOptionGroup]
|
|
900
|
-
}], handleKeydown: [{
|
|
901
|
-
type: HostListener,
|
|
902
|
-
args: ['keydown', ['$event']]
|
|
903
|
-
}] } });
|
|
904
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvc2VsZWN0L2N1c3RvbS1zZWxlY3QvY3VzdG9tLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvc2VsZWN0L2N1c3RvbS1zZWxlY3QvY3VzdG9tLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQixXQUFXLEVBQ1gsWUFBWSxFQUNaLFlBQVksRUFDWixlQUFlLEVBQ2YseUNBQXlDLEVBQ3pDLGtCQUFrQixFQUVyQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUdILDJCQUEyQixFQUMzQixTQUFTLEVBQ1QsbUJBQW1CLEVBRW5CLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLDJCQUEyQixFQUM5QixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFDSCxDQUFDLEVBQ0QscUJBQXFCLEVBQ3JCLFVBQVUsRUFDVixtQkFBbUIsRUFDbkIsR0FBRyxFQUNILEtBQUssRUFFTCxjQUFjLEVBQ2QsT0FBTyxFQUNQLElBQUksRUFDSixPQUFPLEVBQ1AsVUFBVSxFQUNWLFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUNMLFFBQVEsRUFDWCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQWdCLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUs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TixjQUFjO3NCQURiLEtBQUs7Z0JBTTJCLHVCQUF1QjtzQkFBdkQsWUFBWTt1QkFBQyxpQkFBaUI7Z0JBTWMsYUFBYTtzQkFBekQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRTtnQkFNM0MsY0FBYztzQkFEYixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFO2dCQU1KLGNBQWM7c0JBQXBELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQU1RLGFBQWE7c0JBQXpELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUU7Z0JBYXZDLFVBQVU7c0JBRGIsS0FBSztnQkFnQkcsU0FBUztzQkFBakIsS0FBSztnQkFFb0QsT0FBTztzQkFBaEUsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRWQsS0FBSztzQkFBOUMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUtXLGNBQWM7c0JBQWhFLGVBQWU7dUJBQUMsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFFeEIsV0FBVztzQkFBbkMsWUFBWTt1QkFBQyxTQUFTO2dCQUtnQixhQUFhO3NCQUFuRCxlQUFlO3VCQUFDLG9CQUFvQjtnQkFFRCxVQUFVO3NCQUE3QyxZQUFZO3VCQUFDLG9CQUFvQjtnQkFHbEMsYUFBYTtzQkFEWixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgZ2V0RmxleGlibGVQb3NpdGlvbnMsXG4gICAgaW5qZWN0UGFuZWxFbXB0eUljb24sXG4gICAgc2NhbGVNb3Rpb24sXG4gICAgc2NhbGVYTW90aW9uLFxuICAgIHNjYWxlWU1vdGlvbixcbiAgICBTY3JvbGxUb1NlcnZpY2UsXG4gICAgVGFiSW5kZXhEaXNhYmxlZENvbnRyb2xWYWx1ZUFjY2Vzc29yTWl4aW4sXG4gICAgVGh5Q2xpY2tEaXNwYXRjaGVyLFxuICAgIFRoeVBsYWNlbWVudFxufSBmcm9tICduZ3gtdGV0aHlzL2NvcmUnO1xuaW1wb3J0IHsgVGh5RW1wdHkgfSBmcm9tICduZ3gtdGV0aHlzL2VtcHR5JztcbmltcG9ydCB7IFRoeUxvYWRpbmcgfSBmcm9tICduZ3gtdGV0aHlzL2xvYWRpbmcnO1xuaW1wb3J0IHtcbiAgICBJVGh5T3B0aW9uUGFyZW50Q29tcG9uZW50LFxuICAgIFNlbGVjdENvbnRyb2xTaXplLFxuICAgIFRIWV9PUFRJT05fUEFSRU5UX0NPTVBPTkVOVCxcbiAgICBUaHlPcHRpb24sXG4gICAgVGh5T3B0aW9uc0NvbnRhaW5lcixcbiAgICBUaHlPcHRpb25TZWxlY3Rpb25DaGFuZ2VFdmVudCxcbiAgICBUaHlTY3JvbGxEaXJlY3RpdmUsXG4gICAgVGh5U2VsZWN0Q29udHJvbCxcbiAgICBUaHlTZWxlY3RPcHRpb25Hcm91cCxcbiAgICBUaHlTdG9wUHJvcGFnYXRpb25EaXJlY3RpdmVcbn0gZnJvbSAnbmd4LXRldGh5cy9zaGFyZWQnO1xuaW1wb3J0IHtcbiAgICBBLFxuICAgIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSxcbiAgICBET1dOX0FSUk9XLFxuICAgIGVsZW1lbnRNYXRjaENsb3Nlc3QsXG4gICAgRU5ELFxuICAgIEVOVEVSLFxuICAgIEZ1bmN0aW9uUHJvcCxcbiAgICBoYXNNb2RpZmllcktleSxcbiAgICBoZWxwZXJzLFxuICAgIEhPTUUsXG4gICAgaXNBcnJheSxcbiAgICBpc0Z1bmN0aW9uLFxuICAgIExFRlRfQVJST1csXG4gICAgUklHSFRfQVJST1csXG4gICAgU1BBQ0UsXG4gICAgVVBfQVJST1dcbn0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcbmltcG9ydCB7IGRlZmVyLCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IGNvZXJjZUVsZW1lbnQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgQ2RrQ29ubmVjdGVkT3ZlcmxheSwgQ2RrT3ZlcmxheU9yaWdpbiwgQ29ubmVjdGlvblBvc2l0aW9uUGFpciwgT3ZlcmxheSwgU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciwgTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgbnVtYmVyQXR0cmlidXRlLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFBMQVRGT1JNX0lELFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIGluamVjdCxcbiAgICBTaWduYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7XG4gICAgREVGQVVMVF9TRUxFQ1RfQ09ORklHLFxuICAgIFRIWV9TRUxFQ1RfQ09ORklHLFxuICAgIFRIWV9TRUxFQ1RfU0NST0xMX1NUUkFURUdZLFxuICAgIFRoeURyb3Bkb3duV2lkdGhNb2RlLFxuICAgIFRoeVNlbGVjdENvbmZpZ1xufSBmcm9tICcuLi9zZWxlY3QuY29uZmlnJztcbmltcG9ydCB7IGluamVjdExvY2FsZSwgVGh5U2VsZWN0TG9jYWxlIH0gZnJvbSAnbmd4LXRldGh5cy9pMThuJztcblxuZXhwb3J0IHR5cGUgU2VsZWN0TW9kZSA9ICdtdWx0aXBsZScgfCAnJztcblxuZXhwb3J0IHR5cGUgVGh5U2VsZWN0VHJpZ2dlclR5cGUgPSAnY2xpY2snIHwgJ2hvdmVyJztcblxuZXhwb3J0IGNvbnN0IFNFTEVDVF9QQU5FTF9NQVhfSEVJR0hUID0gMzAwO1xuXG5leHBvcnQgY29uc3QgU0VMRUNUX09QVElPTl9NQVhfSEVJR0hUID0gNDA7XG5cbmV4cG9ydCBjb25zdCBTRUxFQ1RfT1BUSU9OX0dST1VQX01BWF9IRUlHSFQgPSAzMDtcblxuZXhwb3J0IGNvbnN0IFNFTEVDVF9QQU5FTF9QQURESU5HX1RPUCA9IDEwO1xuXG5leHBvcnQgY29uc3QgVEhZX1NFTEVDVF9QQU5FTF9NSU5fV0lEVEggPSAyMDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uVmFsdWUge1xuICAgIHRoeUxhYmVsVGV4dD86IHN0cmluZztcbiAgICB0aHlWYWx1ZT86IHN0cmluZztcbiAgICB0aHlEaXNhYmxlZD86IGJvb2xlYW47XG4gICAgdGh5U2hvd09wdGlvbkN1c3RvbT86IGJvb2xlYW47XG4gICAgdGh5U2VhcmNoS2V5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRoeVNlbGVjdE9wdGlvbk1vZGVsIHtcbiAgICB2YWx1ZT86IHN0cmluZyB8IG51bWJlcjtcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgbGFiZWw/OiBzdHJpbmc7XG4gICAgaWNvbj86IHN0cmluZztcbiAgICBncm91cExhYmVsPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVGh5T3B0aW9uR3JvdXBNb2RlbCBleHRlbmRzIFRoeVNlbGVjdE9wdGlvbk1vZGVsIHtcbiAgICBjaGlsZHJlbj86IFRoeVNlbGVjdE9wdGlvbk1vZGVsW107XG59XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuLyoqXG4gKiDkuIvmi4npgInmi6nnu4Tku7ZcbiAqIEBuYW1lIHRoeS1zZWxlY3QsdGh5LWN1c3RvbS1zZWxlY3RcbiAqIEBvcmRlciAxMFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoeS1zZWxlY3QsdGh5LWN1c3RvbS1zZWxlY3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBleHBvcnRBczogJ3RoeVNlbGVjdCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFRIWV9PUFRJT05fUEFSRU5UX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBUaHlTZWxlY3RcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUaHlTZWxlY3QpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfVxuICAgIF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENka092ZXJsYXlPcmlnaW4sXG4gICAgICAgIFRoeVNlbGVjdENvbnRyb2wsXG4gICAgICAgIENka0Nvbm5lY3RlZE92ZXJsYXksXG4gICAgICAgIFRoeVN0b3BQcm9wYWdhdGlvbkRpcmVjdGl2ZSxcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgVGh5U2Nyb2xsRGlyZWN0aXZlLFxuICAgICAgICBUaHlMb2FkaW5nLFxuICAgICAgICBUaHlFbXB0eSxcbiAgICAgICAgVGh5T3B0aW9uc0NvbnRhaW5lcixcbiAgICAgICAgVGh5T3B0aW9uLFxuICAgICAgICBUaHlTZWxlY3RPcHRpb25Hcm91cCxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldFxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIudGFiaW5kZXhdJzogJ3RhYkluZGV4JyxcbiAgICAgICAgJyhmb2N1cyknOiAnb25Gb2N1cygkZXZlbnQpJyxcbiAgICAgICAgJyhibHVyKSc6ICdvbkJsdXIoJGV2ZW50KSdcbiAgICB9LFxuICAgIGFuaW1hdGlvbnM6IFtzY2FsZVhNb3Rpb24sIHNjYWxlWU1vdGlvbiwgc2NhbGVNb3Rpb25dXG59KVxuZXhwb3J0IGNsYXNzIFRoeVNlbGVjdFxuICAgIGV4dGVuZHMgVGFiSW5kZXhEaXNhYmxlZENvbnRyb2xWYWx1ZUFjY2Vzc29yTWl4aW5cbiAgICBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBJVGh5T3B0aW9uUGFyZW50Q29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveVxue1xuICAgIHByaXZhdGUgbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIHByaXZhdGUgb3ZlcmxheSA9IGluamVjdChPdmVybGF5KTtcbiAgICBwcml2YXRlIHRoeUNsaWNrRGlzcGF0Y2hlciA9IGluamVjdChUaHlDbGlja0Rpc3BhdGNoZXIpO1xuICAgIHByaXZhdGUgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gICAgcHJpdmF0ZSBsb2NhbGU6IFNpZ25hbDxUaHlTZWxlY3RMb2NhbGU+ID0gaW5qZWN0TG9jYWxlKCdzZWxlY3QnKTtcbiAgICBzY3JvbGxTdHJhdGVneUZhY3RvcnkgPSBpbmplY3Q8RnVuY3Rpb25Qcm9wPFNjcm9sbFN0cmF0ZWd5Pj4oVEhZX1NFTEVDVF9TQ1JPTExfU1RSQVRFR1ksIHsgb3B0aW9uYWw6IHRydWUgfSkhO1xuICAgIHNlbGVjdENvbmZpZyA9IGluamVjdChUSFlfU0VMRUNUX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KSE7XG4gICAgZW1wdHlJY29uOiBTaWduYWw8c3RyaW5nPiA9IGluamVjdFBhbmVsRW1wdHlJY29uKCk7XG5cbiAgICBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgc2l6ZTogU2VsZWN0Q29udHJvbFNpemU7XG5cbiAgICBtb2RlOiBTZWxlY3RNb2RlID0gJyc7XG5cbiAgICBlbXB0eVN0YXRlVGV4dCA9IHRoaXMubG9jYWxlKCkuZW1wdHk7XG5cbiAgICBlbXB0eVNlYXJjaE1lc3NhZ2VUZXh0ID0gdGhpcy5sb2NhbGUoKS5lbXB0eTtcblxuICAgIHNjcm9sbFRvcCA9IDA7XG5cbiAgICBtb2RhbFZhbHVlOiBhbnkgPSBudWxsO1xuXG4gICAgZGVmYXVsdE9mZnNldCA9IDQ7XG5cbiAgICBkcm9wRG93bkNsYXNzOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfTtcblxuICAgIGRyb3BEb3duTWluV2lkdGg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5LiL5ouJ5qGG55qE5pyA5bCP5a695bqm77yM6buY6K6k5YC8IGBtYXRjaC1zZWxlY3Rg77yM6KGo56S65LiO6L6T5YWl5qGG55qE5a695bqm5LiA6Ie077ybYG1pbi13aWR0aGAg6KGo56S65pyA5bCP5a695bqm5Li6MjAwcHjvvJvmlK/mjIHoh6rlrprkuYnmnIDlsI/lrr3luqbvvIzmr5TlpoLkvKAgYHttaW5XaWR0aDogMTUwfWAg6KGo56S65pyA5bCP5a695bqm5Li6MTUwcHhcbiAgICAgKiBAZGVmYXVsdCBtYXRjaC1zZWxlY3RcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlEcm9wZG93bldpZHRoTW9kZTogVGh5RHJvcGRvd25XaWR0aE1vZGU7XG5cbiAgICBwdWJsaWMgZHJvcERvd25Qb3NpdGlvbnM6IENvbm5lY3Rpb25Qb3NpdGlvblBhaXJbXTtcblxuICAgIHB1YmxpYyBzZWxlY3Rpb25Nb2RlbDogU2VsZWN0aW9uTW9kZWw8VGh5T3B0aW9uPjtcblxuICAgIHB1YmxpYyB0cmlnZ2VyUmVjdFdpZHRoOiBudW1iZXI7XG5cbiAgICBwdWJsaWMgc2Nyb2xsU3RyYXRlZ3k6IFNjcm9sbFN0cmF0ZWd5O1xuXG4gICAgcHJpdmF0ZSByZXNpemVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIHByaXZhdGUgc2VsZWN0aW9uTW9kZWxTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKlxuICAgICAqIOaJi+WKqOiBmueEpuS4reeahOagh+ivhlxuICAgICAqL1xuICAgIHByaXZhdGUgbWFudWFsRm9jdXNpbmcgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgY29uZmlnOiBUaHlTZWxlY3RDb25maWc7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIHJlYWRvbmx5IG9wdGlvblNlbGVjdGlvbkNoYW5nZXM6IE9ic2VydmFibGU8VGh5T3B0aW9uU2VsZWN0aW9uQ2hhbmdlRXZlbnQ+ID0gZGVmZXIoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVyZ2UoLi4udGhpcy5vcHRpb25zLm1hcChvcHRpb24gPT4gb3B0aW9uLnNlbGVjdGlvbkNoYW5nZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5nWm9uZS5vblN0YWJsZS5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLm9wdGlvblNlbGVjdGlvbkNoYW5nZXMpXG4gICAgICAgICk7XG4gICAgfSkgYXMgT2JzZXJ2YWJsZTxUaHlPcHRpb25TZWxlY3Rpb25DaGFuZ2VFdmVudD47XG5cbiAgICBAVmlld0NoaWxkKENka0Nvbm5lY3RlZE92ZXJsYXksIHsgc3RhdGljOiB0cnVlIH0pIGNka0Nvbm5lY3RlZE92ZXJsYXk6IENka0Nvbm5lY3RlZE92ZXJsYXk7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS1zZWxlY3QtY3VzdG9tJykgaXNTZWxlY3RDdXN0b20gPSB0cnVlO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktc2VsZWN0JykgaXNTZWxlY3QgPSB0cnVlO1xuXG4gICAga2V5TWFuYWdlcjogQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXI8VGh5T3B0aW9uPjtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MubWVudS1pcy1vcGVuZWQnKVxuICAgIHBhbmVsT3BlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5pCc57Si5pe25Zue6LCDXG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uU2VhcmNoOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgLyoqXG4gICAgICog5LiL5ouJ6I+c5Y2V5rua5Yqo5Yiw5bqV6YOo5LqL5Lu277yM5Y+v5Lul55So6L+Z5Liq5LqL5Lu25a6e546w5rua5Yqo5Yqg6L29XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uU2Nyb2xsVG9Cb3R0b206IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIOS4i+aLieiPnOWNleWxleW8gOWSjOaKmOWPoOeKtuaAgeS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlPbkV4cGFuZFN0YXR1c0NoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqXG4gICAgICog5LiL5ouJ5YiX6KGo5piv5ZCm5pi+56S65pCc57Si5qGGXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlTaG93U2VhcmNoOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog6YCJ5oup5qGG6buY6K6k5paH5a2XXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5UGxhY2VIb2xkZXIgPSB0aGlzLmxvY2FsZSgpLnBsYWNlaG9sZGVyO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5L2/55So5pyN5Yqh56uv5pCc57Si77yM5b2T5Li6IHRydWUg5pe277yM5bCG5LiN5YaN5Zyo5YmN56uv6L+b6KGM6L+H5rukXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlTZXJ2ZXJTZWFyY2g6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDlvILmraXliqDovb0gbG9hZGluZyDnirbmgIHvvIxmYWxzZSDooajnpLrliqDovb3kuK3vvIx0cnVlIOihqOekuuWKoOi9veWujOaIkFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeUxvYWRTdGF0ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKboh6rliqjorr7nva7pgInpobnnrKzkuIDmnaHkuLrpq5jkuq7nirbmgIFcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlBdXRvQWN0aXZlRmlyc3RJdGVtID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIOS4i+aLiemAieaLqeaooeW8j1xuICAgICAqIEB0eXBlICdtdWx0aXBsZScgfCAnJ1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeU1vZGUodmFsdWU6IFNlbGVjdE1vZGUpIHtcbiAgICAgICAgdGhpcy5tb2RlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaW5zdGFuY2VTZWxlY3Rpb25Nb2RlbCgpO1xuICAgICAgICB0aGlzLmdldFBvc2l0aW9ucygpO1xuICAgICAgICB0aGlzLnNldERyb3BEb3duQ2xhc3MoKTtcbiAgICB9XG5cbiAgICBnZXQgdGh5TW9kZSgpOiBTZWxlY3RNb2RlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmk43kvZzlm77moIfnsbvlnotcbiAgICAgKiBAdHlwZSBwcmltYXJ5IHwgc3VjY2VzcyB8IGRhbmdlciB8IHdhcm5pbmdcbiAgICAgKiBAZGVmYXVsdCBwcmltYXJ5XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBnZXQgdGh5U2l6ZSgpOiBTZWxlY3RDb250cm9sU2l6ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNpemU7XG4gICAgfVxuICAgIHNldCB0aHlTaXplKHZhbHVlOiBTZWxlY3RDb250cm9sU2l6ZSkge1xuICAgICAgICB0aGlzLnNpemUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmlbDmja7kuLrnqbrml7bmmL7npLrnmoTmj5DnpLrmloflrZdcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlFbXB0eVN0YXRlVGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZW1wdHlTdGF0ZVRleHQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmkJzntKLnu5PmnpzkuLrnqbrml7bmmL7npLrnmoTmj5DnpLrmloflrZdcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlFbXB0eVNlYXJjaE1lc3NhZ2VUZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5lbXB0eVNlYXJjaE1lc3NhZ2VUZXh0ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog5rua5Yqo5Yqg6L295piv5ZCm5Y+v55So77yM5Y+q6IO95b2T6L+Z5Liq5Y+C5pWw5Y+v5Lul77yM5LiL6Z2i55qEdGh5T25TY3JvbGxUb0JvdHRvbeS6i+S7tuaJjeS8muinpuWPkVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pXG4gICAgdGh5RW5hYmxlU2Nyb2xsTG9hZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog5Y2V6YCJKCB0aHlNb2RlPVwiXCIg5oiW6ICF5LiN6K6+572uKeaXtu+8jOmAieaLqeahhuaUr+aMgea4hemZpFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeUFsbG93Q2xlYXIgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOaYr+WQpuemgeeUqFxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSlcbiAgICBzZXQgdGh5RGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgdGh5RGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOaOkuW6j+avlOi+g+WHveaVsFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVNvcnRDb21wYXJhdG9yOiAoYTogVGh5T3B0aW9uLCBiOiBUaHlPcHRpb24sIG9wdGlvbnM6IFRoeU9wdGlvbltdKSA9PiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBGb290ZXIg5qih5p2/77yM6buY6K6k5YC85Li656m65LiN5pi+56S6IEZvb3RlclxuICAgICAqIEB0eXBlIFRlbXBsYXRlUmVmXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB0aHlGb290ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIOW8ueWHuuS9jee9rlxuICAgICAqIEB0eXBlIFRoeVBsYWNlbWVudFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGh5UGxhY2VtZW50OiBUaHlQbGFjZW1lbnQ7XG5cbiAgICAvKipcbiAgICAgKiDoh6rlrprkuYkgT3ZlcmxheSBPcmlnaW5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRoeU9yaWdpbjogRWxlbWVudFJlZiB8IEhUTUxFbGVtZW50O1xuXG4gICAgLyoqXG4gICAgICog6Ieq5a6a5LmJIEZvb3RlciDmqKHmnb/lrrnlmaggY2xhc3NcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHRoeUZvb3RlckNsYXNzID0gJ3RoeS1jdXN0b20tc2VsZWN0LWZvb3Rlcic7XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ3NlbGVjdGVkRGlzcGxheScpIHNlbGVjdGVkVmFsdWVEaXNwbGF5UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICog5Yid5aeL5YyW5pe277yM5piv5ZCm5bGV5byA6Z2i5p2/XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlBdXRvRXhwYW5kOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog5piv5ZCm5by55Ye66YCP5piO6YGu572p77yM5aaC5p6c5pi+56S66YGu572p5YiZ5Lya6Zi75q2i5rua5Yqo5Yy65Z+f5rua5YqoXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSlcbiAgICB0aHlIYXNCYWNrZHJvcCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5aSa6YCJ5pe25pyA5aSn5pi+56S655qE5qCH562+5pWw6YeP77yMMCDooajnpLrkuI3pmZDliLZcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSB0aHlNYXhUYWdDb3VudCA9IDA7XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKbpmpDol4/pgInmi6nmoYbovrnmoYZcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeUJvcmRlcmxlc3MgPSBmYWxzZTtcblxuICAgIGlzUmVhY3RpdmVEcml2ZW4gPSBmYWxzZTtcblxuICAgIGlubmVyT3B0aW9uczogVGh5U2VsZWN0T3B0aW9uTW9kZWxbXTtcblxuICAgIG9wdGlvbkdyb3VwczogVGh5T3B0aW9uR3JvdXBNb2RlbFtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBvcHRpb24g5YiX6KGoXG4gICAgICogQHR5cGUgVGh5U2VsZWN0T3B0aW9uTW9kZWxbXVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRoeU9wdGlvbnModmFsdWU6IFRoeVNlbGVjdE9wdGlvbk1vZGVsW10pIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5uZXJPcHRpb25zID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaXNSZWFjdGl2ZURyaXZlbiA9IHRydWU7XG4gICAgICAgIHRoaXMuYnVpbGRSZWFjdGl2ZU9wdGlvbnMoKTtcbiAgICB9XG5cbiAgICBvcHRpb25zOiBRdWVyeUxpc3Q8VGh5T3B0aW9uPjtcblxuICAgIC8qKlxuICAgICAqIOebruWJjeWPquaUr+aMgeWkmumAiemAieS4remhueeahOWxleekuu+8jOm7mOiupOS4uuepuu+8jOa4suafk+aWh+Wtl+aooeadv++8jOS8oOWFpXRhZ++8jOa4suafk+WxleekuuaooeadvyxcbiAgICAgKiBAZGVmYXVsdCAnJ++9nHRhZ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVByZXNldDogc3RyaW5nID0gJyc7XG5cbiAgICBAVmlld0NoaWxkKCd0cmlnZ2VyJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgdHJpZ2dlcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICBAVmlld0NoaWxkKCdwYW5lbCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBwYW5lbDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVGh5T3B0aW9uLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGNvbnRlbnRPcHRpb25zOiBRdWVyeUxpc3Q8VGh5T3B0aW9uPjtcblxuICAgIEBWaWV3Q2hpbGRyZW4oVGh5T3B0aW9uKSB2aWV3T3B0aW9uczogUXVlcnlMaXN0PFRoeU9wdGlvbj47XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVGh5U2VsZWN0T3B0aW9uR3JvdXApIGNvbnRlbnRHcm91cHM6IFF1ZXJ5TGlzdDxUaHlTZWxlY3RPcHRpb25Hcm91cD47XG5cbiAgICBAVmlld0NoaWxkcmVuKFRoeVNlbGVjdE9wdGlvbkdyb3VwKSB2aWV3R3JvdXBzOiBRdWVyeUxpc3Q8VGh5U2VsZWN0T3B0aW9uR3JvdXA+O1xuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBFTlRFUikge1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYW5lbE9wZW4gPyB0aGlzLmhhbmRsZU9wZW5LZXlkb3duKGV2ZW50KSA6IHRoaXMuaGFuZGxlQ2xvc2VkS2V5ZG93bihldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgb3B0aW9uc0NoYW5nZXMkKCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmlzUmVhY3RpdmVEcml2ZW4gPyB0aGlzLnZpZXdPcHRpb25zIDogdGhpcy5jb250ZW50T3B0aW9ucztcbiAgICAgICAgbGV0IHByZXZpb3VzT3B0aW9uczogVGh5T3B0aW9uW10gPSB0aGlzLm9wdGlvbnMudG9BcnJheSgpO1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmNoYW5nZXMucGlwZShcbiAgICAgICAgICAgIG1hcChkYXRhID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRvQXJyYXkoKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZmlsdGVyKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IHByZXZpb3VzT3B0aW9ucy5sZW5ndGggIT09IGRhdGEubGVuZ3RoIHx8IHByZXZpb3VzT3B0aW9ucy5zb21lKChvcCwgaW5kZXgpID0+IG9wICE9PSBkYXRhW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNPcHRpb25zID0gZGF0YTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkU2Nyb2xsU3RyYXRlZ3koKSB7XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbFN0cmF0ZWd5RmFjdG9yeSAmJiBpc0Z1bmN0aW9uKHRoaXMuc2Nyb2xsU3RyYXRlZ3lGYWN0b3J5KSkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxTdHJhdGVneSA9IHRoaXMuc2Nyb2xsU3RyYXRlZ3lGYWN0b3J5KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1NlYXJjaGluZyA9IGZhbHNlO1xuXG4gICAgZ3JvdXBCeSA9IChpdGVtOiBUaHlTZWxlY3RPcHRpb25Nb2RlbCkgPT4gaXRlbS5ncm91cExhYmVsO1xuXG4gICAgZ2V0IHBsYWNlbWVudCgpOiBUaHlQbGFjZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlQbGFjZW1lbnQgfHwgdGhpcy5jb25maWcucGxhY2VtZW50O1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBjb25zdCBzZWxlY3RDb25maWcgPSB0aGlzLnNlbGVjdENvbmZpZztcblxuICAgICAgICB0aGlzLmNvbmZpZyA9IHsgLi4uREVGQVVMVF9TRUxFQ1RfQ09ORklHLCAuLi5zZWxlY3RDb25maWcgfTtcbiAgICAgICAgdGhpcy5idWlsZFNjcm9sbFN0cmF0ZWd5KCk7XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMubW9kYWxWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGlvbkJ5TW9kZWxWYWx1ZSh0aGlzLm1vZGFsVmFsdWUpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmdldFBvc2l0aW9ucygpO1xuICAgICAgICB0aGlzLmRyb3BEb3duTWluV2lkdGggPSB0aGlzLmdldERyb3Bkb3duTWluV2lkdGgoKTtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbk1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlU2VsZWN0aW9uTW9kZWwoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldERyb3BEb3duQ2xhc3MoKTtcblxuICAgICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICAgICAgdGhpcy50aHlDbGlja0Rpc3BhdGNoZXJcbiAgICAgICAgICAgICAgICAuY2xpY2tlZCgwKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmIHRoaXMucGFuZWxPcGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJ1aWxkT3B0aW9uR3JvdXBzKG9wdGlvbnM6IFRoeVNlbGVjdE9wdGlvbk1vZGVsW10pIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uR3JvdXBzOiBUaHlPcHRpb25Hcm91cE1vZGVsW10gPSBbXTtcbiAgICAgICAgY29uc3QgZ3JvdXBzID0gWy4uLm5ldyBTZXQob3B0aW9ucy5maWx0ZXIoaXRlbSA9PiB0aGlzLmdyb3VwQnkoaXRlbSkpLm1hcChzdWIgPT4gdGhpcy5ncm91cEJ5KHN1YikpKV07XG4gICAgICAgIGNvbnN0IGdyb3VwTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBncm91cHMuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IG9wdGlvbnMuZmlsdGVyKGl0ZW0gPT4gdGhpcy5ncm91cEJ5KGl0ZW0pID09PSBncm91cCk7XG4gICAgICAgICAgICBjb25zdCBncm91cE9wdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBncm91cExhYmVsOiBncm91cCxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBncm91cE1hcC5zZXQoZ3JvdXAsIGdyb3VwT3B0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXBCeShvcHRpb24pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gb3B0aW9uR3JvdXBzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uZ3JvdXBMYWJlbCA9PT0gdGhpcy5ncm91cEJ5KG9wdGlvbikpO1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBncm91cE1hcC5nZXQodGhpcy5ncm91cEJ5KG9wdGlvbikpO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25Hcm91cHMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9wdGlvbkdyb3Vwcy5wdXNoKG9wdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gb3B0aW9uR3JvdXBzO1xuICAgIH1cblxuICAgIGJ1aWxkUmVhY3RpdmVPcHRpb25zKCkge1xuICAgICAgICBpZiAodGhpcy5pbm5lck9wdGlvbnMuZmlsdGVyKGl0ZW0gPT4gdGhpcy5ncm91cEJ5KGl0ZW0pKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbkdyb3VwcyA9IHRoaXMuYnVpbGRPcHRpb25Hcm91cHModGhpcy5pbm5lck9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25Hcm91cHMgPSB0aGlzLmlubmVyT3B0aW9ucztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldERyb3Bkb3duTWluV2lkdGgoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLnRoeURyb3Bkb3duV2lkdGhNb2RlIHx8IHRoaXMuY29uZmlnLmRyb3Bkb3duV2lkdGhNb2RlO1xuICAgICAgICBsZXQgZHJvcGRvd25NaW5XaWR0aDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgaWYgKChtb2RlIGFzIHsgbWluV2lkdGg6IG51bWJlciB9KT8ubWluV2lkdGgpIHtcbiAgICAgICAgICAgIGRyb3Bkb3duTWluV2lkdGggPSAobW9kZSBhcyB7IG1pbldpZHRoOiBudW1iZXIgfSkubWluV2lkdGg7XG4gICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gJ21pbi13aWR0aCcpIHtcbiAgICAgICAgICAgIGRyb3Bkb3duTWluV2lkdGggPSBUSFlfU0VMRUNUX1BBTkVMX01JTl9XSURUSDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRyb3Bkb3duTWluV2lkdGggPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRyb3Bkb3duTWluV2lkdGg7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc1JlYWN0aXZlRHJpdmVuKSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1JlYWN0aXZlRHJpdmVuKSB7XG4gICAgICAgICAgICB0aGlzLnNldHVwKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXR1cCgpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zQ2hhbmdlcyQucGlwZShzdGFydFdpdGgobnVsbCksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXNldE9wdGlvbnMoKTtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVNlbGVjdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5pbml0S2V5TWFuYWdlcigpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTZWFyY2hpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodENvcnJlY3RPcHRpb24oZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTZWFyY2hpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNka0Nvbm5lY3RlZE92ZXJsYXkgJiYgdGhpcy5jZGtDb25uZWN0ZWRPdmVybGF5Lm92ZXJsYXlSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2RrQ29ubmVjdGVkT3ZlcmxheS5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMudGh5QXV0b0V4cGFuZCkge1xuICAgICAgICAgICAgdGltZXIoMCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc0hpZGRlbk9wdGlvbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMudG9BcnJheSgpLmV2ZXJ5KG9wdGlvbiA9PiBvcHRpb24uaGlkZGVuKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25BdHRhY2hlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jZGtDb25uZWN0ZWRPdmVybGF5LnBvc2l0aW9uQ2hhbmdlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhbmVsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMua2V5TWFuYWdlci5hY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIFNjcm9sbFRvU2VydmljZS5zY3JvbGxUb0VsZW1lbnQodGhpcy5rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uZWxlbWVudC5uYXRpdmVFbGVtZW50LCB0aGlzLnBhbmVsLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZW1wdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbFRvU2VydmljZS5zY3JvbGxUb0VsZW1lbnQodGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZFswXS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHRoaXMucGFuZWwubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRyb3BEb3duTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmtleU1hbmFnZXIuYWN0aXZlSXRlbSkge1xuICAgICAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uT3B0aW9uc1Njcm9sbGVkKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCxcbiAgICAgICAgICAgIGhlaWdodCA9IGVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgICBzY3JvbGxIZWlnaHQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuXG4gICAgICAgIGlmIChzY3JvbGwgKyBoZWlnaHQgKyAxMCA+PSBzY3JvbGxIZWlnaHQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRoeU9uU2Nyb2xsVG9Cb3R0b20ub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRoeU9uU2Nyb2xsVG9Cb3R0b20uZW1pdCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2VhcmNoRmlsdGVyKHNlYXJjaFRleHQ6IHN0cmluZykge1xuICAgICAgICBzZWFyY2hUZXh0ID0gc2VhcmNoVGV4dC50cmltKCk7XG4gICAgICAgIGlmICh0aGlzLnRoeVNlcnZlclNlYXJjaCkge1xuICAgICAgICAgICAgdGhpcy5pc1NlYXJjaGluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnRoeU9uU2VhcmNoLmVtaXQoc2VhcmNoVGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zLnRvQXJyYXkoKTtcbiAgICAgICAgICAgIG9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb24ubWF0Y2hTZWFyY2hUZXh0KHNlYXJjaFRleHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbi5zaG93T3B0aW9uKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uLmhpZGVPcHRpb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0Q29ycmVjdE9wdGlvbihmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQmx1cihldmVudD86IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgLy8gVGFiIOiBmueEpuWQjuiHquWKqOiBmueEpuWIsCBpbnB1dCDovpPlhaXmoYbvvIzmraTliIbmlK/kuIvnm7TmjqXov5Tlm57vvIzml6DpnIDop6blj5Egb25Ub3VjaGVkRm5cbiAgICAgICAgaWYgKGVsZW1lbnRNYXRjaENsb3Nlc3QoZXZlbnQ/LnJlbGF0ZWRUYXJnZXQgYXMgSFRNTEVsZW1lbnQsIFsnLnRoeS1zZWxlY3QtZHJvcGRvd24nLCAndGh5LXNlbGVjdCddKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25Ub3VjaGVkRm4oKTtcbiAgICB9XG5cbiAgICBvbkZvY3VzKGV2ZW50PzogRm9jdXNFdmVudCkge1xuICAgICAgICAvLyB0aHlTaG93U2VhcmNoIOS4jiBwYW5lbE9wZW4g5Z2H5Li6IHRydWUg5pe277yM54K55Ye7IHRoeVNlbGVjdENvbnRyb2wg6ZyA6KaB6Kem5Y+R6Ieq5Yqo6IGa54Sm5YiwIGlucHV0IOeahOmAu+i+kVxuICAgICAgICAvLyBtYW51YWxGb2N1c2luZyDlpoLmnpzmmK/miYvliqjogZrnhKbvvIzkuI3op6blj5Hoh6rliqjogZrnhKbliLAgaW5wdXQg55qE6YC76L6RXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICh0aGlzLnRoeVNob3dTZWFyY2ggJiYgdGhpcy5wYW5lbE9wZW4pIHx8XG4gICAgICAgICAgICAoIXRoaXMubWFudWFsRm9jdXNpbmcgJiZcbiAgICAgICAgICAgICAgICAhZWxlbWVudE1hdGNoQ2xvc2VzdChldmVudD8ucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCwgWycudGh5LXNlbGVjdC1kcm9wZG93bicsICd0aHktY3VzdG9tLXNlbGVjdCddKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgICAgICAgICAgaW5wdXRFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tYW51YWxGb2N1c2luZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb2N1cyhvcHRpb25zPzogRm9jdXNPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWFudWFsRm9jdXNpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cyhvcHRpb25zKTtcbiAgICAgICAgdGhpcy5tYW51YWxGb2N1c2luZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmUoJGV2ZW50OiB7IGl0ZW06IFRoeU9wdGlvbjsgJGV2ZW50T3JpZ2luOiBFdmVudCB9KSB7XG4gICAgICAgICRldmVudC4kZXZlbnRPcmlnaW4uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZmluZChvcHRpb24gPT4gb3B0aW9uID09PSAkZXZlbnQuaXRlbSkpIHtcbiAgICAgICAgICAgICRldmVudC5pdGVtLmRlc2VsZWN0KCk7XG4gICAgICAgICAgICAvLyBmaXggb3B0aW9uIHVuc2VsZWN0IGNhbiBub3QgZW1pdCBjaGFuZ2VzO1xuICAgICAgICAgICAgdGhpcy5vblNlbGVjdCgkZXZlbnQuaXRlbSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkZXZlbnQuaXRlbS5kZXNlbGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyU2VsZWN0VmFsdWUoZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5jbGVhcigpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLmVtaXRNb2RlbFZhbHVlQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2RrQ29ubmVjdGVkT3ZlcmxheSAmJiB0aGlzLmNka0Nvbm5lY3RlZE92ZXJsYXkub3ZlcmxheVJlZikge1xuICAgICAgICAgICAgICAgIHRoaXMuY2RrQ29ubmVjdGVkT3ZlcmxheS5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKTogVGh5T3B0aW9uIHwgVGh5T3B0aW9uW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc011bHRpcGxlID8gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZCA6IHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWRbMF07XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc011bHRpcGxlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnbXVsdGlwbGUnO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5zZWxlY3Rpb25Nb2RlbCB8fCB0aGlzLnNlbGVjdGlvbk1vZGVsLmlzRW1wdHkoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SXRlbUNvdW50KCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5pc1JlYWN0aXZlRHJpdmVuID8gdGhpcy52aWV3R3JvdXBzIDogdGhpcy5jb250ZW50R3JvdXBzO1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmxlbmd0aCArIGdyb3VwLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBhbmVsT3Blbikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnRoeVNob3dTZWFyY2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5vcHRpb25zIHx8IHRoaXMucGFuZWxPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50cmlnZ2VyUmVjdFdpZHRoID0gdGhpcy5nZXRPcmlnaW5SZWN0V2lkdGgoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUcmlnZ2VyUmVzaXplKCk7XG4gICAgICAgIHRoaXMucGFuZWxPcGVuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5oaWdobGlnaHRDb3JyZWN0T3B0aW9uKCk7XG4gICAgICAgIHRoaXMudGh5T25FeHBhbmRTdGF0dXNDaGFuZ2UuZW1pdCh0aGlzLnBhbmVsT3Blbik7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wYW5lbE9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMucGFuZWxPcGVuID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlVHJpZ2dlclJlc2l6ZSgpO1xuICAgICAgICAgICAgdGhpcy50aHlPbkV4cGFuZFN0YXR1c0NoYW5nZS5lbWl0KHRoaXMucGFuZWxPcGVuKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZEZuKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRNb2RlbFZhbHVlQ2hhbmdlKCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFZhbHVlcyA9IHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQ7XG4gICAgICAgIGNvbnN0IGNoYW5nZVZhbHVlID0gc2VsZWN0ZWRWYWx1ZXMubWFwKChvcHRpb246IFRoeU9wdGlvbikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi50aHlWYWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMubW9kYWxWYWx1ZSA9IGNoYW5nZVZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNoYW5nZVZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kYWxWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kYWxWYWx1ZSA9IGNoYW5nZVZhbHVlWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2VGbih0aGlzLm1vZGFsVmFsdWUpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZ2hsaWdodENvcnJlY3RPcHRpb24oZnJvbU9wZW5QYW5lbDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMua2V5TWFuYWdlciAmJiB0aGlzLnBhbmVsT3Blbikge1xuICAgICAgICAgICAgaWYgKGZyb21PcGVuUGFuZWwpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lbXB0eSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGh5QXV0b0FjdGl2ZUZpcnN0SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMua2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmtleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSh0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkWzBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy50aHlBdXRvQWN0aXZlRmlyc3RJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gYWx3YXlzIHNldCBmaXJzdCBvcHRpb24gYWN0aXZlXG4gICAgICAgICAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLnNldEZpcnN0SXRlbUFjdGl2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0S2V5TWFuYWdlcigpIHtcbiAgICAgICAgaWYgKHRoaXMua2V5TWFuYWdlciAmJiB0aGlzLmtleU1hbmFnZXIuYWN0aXZlSXRlbSkge1xuICAgICAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uc2V0SW5hY3RpdmVTdHlsZXMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmtleU1hbmFnZXIgPSBuZXcgQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXI8VGh5T3B0aW9uPih0aGlzLm9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aFR5cGVBaGVhZCgpXG4gICAgICAgICAgICAud2l0aFdyYXAoKVxuICAgICAgICAgICAgLndpdGhWZXJ0aWNhbE9yaWVudGF0aW9uKClcbiAgICAgICAgICAgIC53aXRoQWxsb3dlZE1vZGlmaWVyS2V5cyhbJ3NoaWZ0S2V5J10pO1xuXG4gICAgICAgIHRoaXMua2V5TWFuYWdlci50YWJPdXQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmtleU1hbmFnZXIuY2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucGFuZWxPcGVuICYmIHRoaXMucGFuZWwpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgU2Nyb2xsVG9TZXJ2aWNlLnNjcm9sbFRvRWxlbWVudCh0aGlzLmtleU1hbmFnZXIuYWN0aXZlSXRlbS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHRoaXMucGFuZWwubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5wYW5lbE9wZW4gJiYgIXRoaXMuaXNNdWx0aXBsZSAmJiB0aGlzLmtleU1hbmFnZXIuYWN0aXZlSXRlbSkge1xuICAgICAgICAgICAgICAgIHRoaXMua2V5TWFuYWdlci5hY3RpdmVJdGVtLnNlbGVjdFZpYUludGVyYWN0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQ2xvc2VkS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcbiAgICAgICAgY29uc3QgaXNBcnJvd0tleSA9IGtleUNvZGUgPT09IERPV05fQVJST1cgfHwga2V5Q29kZSA9PT0gVVBfQVJST1cgfHwga2V5Q29kZSA9PT0gTEVGVF9BUlJPVyB8fCBrZXlDb2RlID09PSBSSUdIVF9BUlJPVztcbiAgICAgICAgY29uc3QgaXNPcGVuS2V5ID0ga2V5Q29kZSA9PT0gRU5URVIgfHwga2V5Q29kZSA9PT0gU1BBQ0U7XG4gICAgICAgIGNvbnN0IG1hbmFnZXIgPSB0aGlzLmtleU1hbmFnZXI7XG5cbiAgICAgICAgLy8gT3BlbiB0aGUgc2VsZWN0IG9uIEFMVCArIGFycm93IGtleSB0byBtYXRjaCB0aGUgbmF0aXZlIDxzZWxlY3Q+XG4gICAgICAgIGlmICgoaXNPcGVuS2V5ICYmICFoYXNNb2RpZmllcktleShldmVudCkpIHx8ICgodGhpcy5pc011bHRpcGxlIHx8IGV2ZW50LmFsdEtleSkgJiYgaXNBcnJvd0tleSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIHByZXZlbnRzIHRoZSBwYWdlIGZyb20gc2Nyb2xsaW5nIGRvd24gd2hlbiBwcmVzc2luZyBzcGFjZVxuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgaWYgKGtleUNvZGUgPT09IEhPTUUgfHwga2V5Q29kZSA9PT0gRU5EKSB7XG4gICAgICAgICAgICAgICAga2V5Q29kZSA9PT0gSE9NRSA/IG1hbmFnZXIuc2V0Rmlyc3RJdGVtQWN0aXZlKCkgOiBtYW5hZ2VyLnNldExhc3RJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWFuYWdlci5vbktleWRvd24oZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVPcGVuS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcbiAgICAgICAgY29uc3QgaXNBcnJvd0tleSA9IGtleUNvZGUgPT09IERPV05fQVJST1cgfHwga2V5Q29kZSA9PT0gVVBfQVJST1c7XG4gICAgICAgIGNvbnN0IG1hbmFnZXIgPSB0aGlzLmtleU1hbmFnZXI7XG5cbiAgICAgICAgaWYgKGtleUNvZGUgPT09IEhPTUUgfHwga2V5Q29kZSA9PT0gRU5EKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAga2V5Q29kZSA9PT0gSE9NRSA/IG1hbmFnZXIuc2V0Rmlyc3RJdGVtQWN0aXZlKCkgOiBtYW5hZ2VyLnNldExhc3RJdGVtQWN0aXZlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJvd0tleSAmJiBldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgIC8vIENsb3NlIHRoZSBzZWxlY3Qgb24gQUxUICsgYXJyb3cga2V5IHRvIG1hdGNoIHRoZSBuYXRpdmUgPHNlbGVjdD5cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGtleUNvZGUgPT09IEVOVEVSIHx8IGtleUNvZGUgPT09IFNQQUNFKSAmJiAobWFuYWdlci5hY3RpdmVJdGVtIHx8ICF0aGlzLmVtcHR5KSAmJiAhaGFzTW9kaWZpZXJLZXkoZXZlbnQpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaWYgKCFtYW5hZ2VyLmFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICBpZiAobWFuYWdlci5hY3RpdmVJdGVtSW5kZXggPT09IC0xICYmICF0aGlzLmVtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIG1hbmFnZXIuc2V0QWN0aXZlSXRlbSh0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkWzBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtYW5hZ2VyLmFjdGl2ZUl0ZW0uc2VsZWN0VmlhSW50ZXJhY3Rpb24oKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzTXVsdGlwbGUgJiYga2V5Q29kZSA9PT0gQSAmJiBldmVudC5jdHJsS2V5KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3QgaGFzRGVzZWxlY3RlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuc29tZShvcHQgPT4gIW9wdC5kaXNhYmxlZCAmJiAhb3B0LnNlbGVjdGVkKTtcblxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbi5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICBoYXNEZXNlbGVjdGVkT3B0aW9ucyA/IG9wdGlvbi5zZWxlY3QoKSA6IG9wdGlvbi5kZXNlbGVjdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG1hbmFnZXIuYWN0aXZlSXRlbUluZGV4ID09PSAtMSAmJiAhdGhpcy5lbXB0eSkge1xuICAgICAgICAgICAgICAgIG1hbmFnZXIuc2V0QWN0aXZlSXRlbSh0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzbHlGb2N1c2VkSW5kZXggPSBtYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleDtcblxuICAgICAgICAgICAgbWFuYWdlci5vbktleWRvd24oZXZlbnQpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5pc011bHRpcGxlICYmXG4gICAgICAgICAgICAgICAgaXNBcnJvd0tleSAmJlxuICAgICAgICAgICAgICAgIGV2ZW50LnNoaWZ0S2V5ICYmXG4gICAgICAgICAgICAgICAgbWFuYWdlci5hY3RpdmVJdGVtICYmXG4gICAgICAgICAgICAgICAgbWFuYWdlci5hY3RpdmVJdGVtSW5kZXggIT09IHByZXZpb3VzbHlGb2N1c2VkSW5kZXhcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG1hbmFnZXIuYWN0aXZlSXRlbS5zZWxlY3RWaWFJbnRlcmFjdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQb3NpdGlvbnMoKSB7XG4gICAgICAgIHRoaXMuZHJvcERvd25Qb3NpdGlvbnMgPSBnZXRGbGV4aWJsZVBvc2l0aW9ucyh0aGlzLnRoeVBsYWNlbWVudCB8fCB0aGlzLmNvbmZpZy5wbGFjZW1lbnQsIHRoaXMuZGVmYXVsdE9mZnNldCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbnN0YW5jZVNlbGVjdGlvbk1vZGVsKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWw8VGh5T3B0aW9uPih0aGlzLmlzTXVsdGlwbGUpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VsZWN0aW9uTW9kZWwuY2hhbmdlZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGV2ZW50LmFkZGVkLmZvckVhY2gob3B0aW9uID0+IG9wdGlvbi5zZWxlY3QoKSk7XG4gICAgICAgICAgICBldmVudC5yZW1vdmVkLmZvckVhY2gob3B0aW9uID0+IG9wdGlvbi5kZXNlbGVjdCgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldE9wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZWRPckRlc3Ryb3llZCQgPSBtZXJnZSh0aGlzLm9wdGlvbnNDaGFuZ2VzJCwgdGhpcy5kZXN0cm95JCk7XG5cbiAgICAgICAgdGhpcy5vcHRpb25TZWxlY3Rpb25DaGFuZ2VzLnBpcGUodGFrZVVudGlsKGNoYW5nZWRPckRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKGV2ZW50OiBUaHlPcHRpb25TZWxlY3Rpb25DaGFuZ2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblNlbGVjdChldmVudC5vcHRpb24sIGV2ZW50LmlzVXNlcklucHV0KTtcbiAgICAgICAgICAgIGlmIChldmVudC5pc1VzZXJJbnB1dCAmJiAhdGhpcy5pc011bHRpcGxlICYmIHRoaXMucGFuZWxPcGVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplU2VsZWN0aW9uKCkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uQnlNb2RlbFZhbHVlKHRoaXMubW9kYWxWYWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RHJvcERvd25DbGFzcygpIHtcbiAgICAgICAgbGV0IG1vZGVDbGFzcyA9ICcnO1xuICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlKSB7XG4gICAgICAgICAgICBtb2RlQ2xhc3MgPSBgdGh5LXNlbGVjdC1kcm9wZG93bi0ke3RoaXMubW9kZX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9kZUNsYXNzID0gYHRoeS1zZWxlY3QtZHJvcGRvd24tc2luZ2xlYDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRyb3BEb3duQ2xhc3MgPSB7XG4gICAgICAgICAgICBbYHRoeS1zZWxlY3QtZHJvcGRvd25gXTogdHJ1ZSxcbiAgICAgICAgICAgIFttb2RlQ2xhc3NdOiB0cnVlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTZWxlY3Rpb25CeU1vZGVsVmFsdWUobW9kYWxWYWx1ZTogYW55KSB7XG4gICAgICAgIGlmIChoZWxwZXJzLmlzVW5kZWZpbmVkT3JOdWxsKG1vZGFsVmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5jbGVhcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgaWYgKGlzQXJyYXkobW9kYWxWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IFsuLi50aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkXTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgKG1vZGFsVmFsdWUgYXMgQXJyYXk8YW55PikuZm9yRWFjaChpdGVtVmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpb25zLmZpbmQoX29wdGlvbiA9PiBfb3B0aW9uLnRoeVZhbHVlID09PSBpdGVtVmFsdWUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZC5maW5kKF9vcHRpb24gPT4gX29wdGlvbi50aHlWYWx1ZSA9PT0gaXRlbVZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3Qob3B0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSB0aGlzLm9wdGlvbnM/LmZpbmQob3B0aW9uID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uLnRoeVZhbHVlID09PSBtb2RhbFZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdChzZWxlY3RlZE9wdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uU2VsZWN0KG9wdGlvbjogVGh5T3B0aW9uLCBpc1VzZXJJbnB1dDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCB3YXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uTW9kZWwuaXNTZWxlY3RlZChvcHRpb24pO1xuXG4gICAgICAgIGlmIChvcHRpb24udGh5VmFsdWUgPT0gbnVsbCAmJiAhdGhpcy5pc011bHRpcGxlKSB7XG4gICAgICAgICAgICBvcHRpb24uZGVzZWxlY3QoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh3YXNTZWxlY3RlZCAhPT0gb3B0aW9uLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID8gdGhpcy5zZWxlY3Rpb25Nb2RlbC5zZWxlY3Qob3B0aW9uKSA6IHRoaXMuc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3Qob3B0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzVXNlcklucHV0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0ob3B0aW9uKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc29ydFZhbHVlcygpO1xuICAgICAgICAgICAgICAgIGlmIChpc1VzZXJJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdhc1NlbGVjdGVkICE9PSB0aGlzLnNlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQob3B0aW9uKSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0TW9kZWxWYWx1ZUNoYW5nZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5pc011bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZEZuKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRWYWx1ZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMudG9BcnJheSgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy50aHlTb3J0Q29tcGFyYXRvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uTW9kZWwuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50aHlTb3J0Q29tcGFyYXRvcihhLCBiLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3JpZ2luUmVjdFdpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlPcmlnaW4gPyBjb2VyY2VFbGVtZW50KHRoaXMudGh5T3JpZ2luKS5vZmZzZXRXaWR0aCA6IHRoaXMudHJpZ2dlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaWJlVHJpZ2dlclJlc2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZVRyaWdnZXJSZXNpemUoKTtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVTdWJzY3JpcHRpb24gPSBuZXcgT2JzZXJ2YWJsZTxudW1iZXI+KG9ic2VydmVyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNpemUgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXM6IFJlc2l6ZU9ic2VydmVyRW50cnlbXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmVzaXplLm9ic2VydmUodGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKCksXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRPcmlnaW5SZWN0V2lkdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgod2lkdGg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyUmVjdFdpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVuc3Vic2NyaWJlVHJpZ2dlclJlc2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucmVzaXplU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5yZXNpemVTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVUcmlnZ2VyUmVzaXplKCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIiwiPGRpdlxuICBjZGstb3ZlcmxheS1vcmlnaW5cbiAgdGh5U2VsZWN0Q29udHJvbFxuICAoY2xpY2spPVwidG9nZ2xlKCRldmVudClcIlxuICAjb3JpZ2luPVwiY2RrT3ZlcmxheU9yaWdpblwiXG4gICN0cmlnZ2VyXG4gIFt0aHlQYW5lbE9wZW5lZF09XCJwYW5lbE9wZW5cIlxuICBbdGh5U2VsZWN0ZWRPcHRpb25zXT1cInNlbGVjdGVkXCJcbiAgW3RoeUlzTXVsdGlwbGVdPVwiaXNNdWx0aXBsZVwiXG4gIFt0aHlTaG93U2VhcmNoXT1cInRoeVNob3dTZWFyY2hcIlxuICBbdGh5QWxsb3dDbGVhcl09XCJ0aHlBbGxvd0NsZWFyXCJcbiAgW3RoeVNpemVdPVwidGh5U2l6ZVwiXG4gIFt0aHlQbGFjZWhvbGRlcl09XCJ0aHlQbGFjZUhvbGRlclwiXG4gIFtjdXN0b21EaXNwbGF5VGVtcGxhdGVdPVwic2VsZWN0ZWRWYWx1ZURpc3BsYXlSZWZcIlxuICBbdGh5RGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbdGh5Qm9yZGVybGVzc109XCJ0aHlCb3JkZXJsZXNzXCJcbiAgKHRoeU9uQ2xlYXIpPVwiY2xlYXJTZWxlY3RWYWx1ZSgkZXZlbnQpXCJcbiAgKHRoeU9uUmVtb3ZlKT1cInJlbW92ZSgkZXZlbnQpXCJcbiAgKHRoeU9uU2VhcmNoKT1cIm9uU2VhcmNoRmlsdGVyKCRldmVudClcIlxuICAodGh5T25CbHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcbiAgW3RoeU1heFRhZ0NvdW50XT1cInRoeU1heFRhZ0NvdW50XCJcbiAgW3RoeVByZXNldF09XCJ0aHlQcmVzZXRcIj48L2Rpdj5cblxuPG5nLXRlbXBsYXRlXG4gIGNkay1jb25uZWN0ZWQtb3ZlcmxheVxuICBjZGtDb25uZWN0ZWRPdmVybGF5QmFja2Ryb3BDbGFzcz1cImNkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcF09XCJ0aHlIYXNCYWNrZHJvcFwiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25zXT1cImRyb3BEb3duUG9zaXRpb25zXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwidGh5T3JpZ2luIHx8IG9yaWdpblwiXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJwYW5lbE9wZW5cIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheVdpZHRoXT1cInRyaWdnZXJSZWN0V2lkdGhcIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheU1pbldpZHRoXT1cImRyb3BEb3duTWluV2lkdGhcIlxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheVNjcm9sbFN0cmF0ZWd5XT1cInNjcm9sbFN0cmF0ZWd5XCJcbiAgY2RrQ29ubmVjdGVkT3ZlcmxheVRyYW5zZm9ybU9yaWdpbk9uPVwiLnRoeS1zZWxlY3QtZHJvcGRvd25cIlxuICAoYXR0YWNoKT1cIm9uQXR0YWNoZWQoKVwiXG4gIChkZXRhY2gpPVwiY2xvc2UoKVwiPlxuICA8ZGl2XG4gICAgdGh5U3RvcFByb3BhZ2F0aW9uXG4gICAgW2F0dHIudGFiaW5kZXhdPVwiLTFcIlxuICAgIFtuZ0NsYXNzXT1cImRyb3BEb3duQ2xhc3NcIlxuICAgIFtAc2NhbGVZTW90aW9uXT1cInBsYWNlbWVudCA9PT0gJ3RvcCcgfHwgcGxhY2VtZW50ID09PSAnYm90dG9tJyA/ICdlbnRlcicgOiAndm9pZCdcIlxuICAgIFtAc2NhbGVYTW90aW9uXT1cInBsYWNlbWVudCA9PT0gJ2xlZnQnIHx8IHBsYWNlbWVudCA9PT0gJ3JpZ2h0JyA/ICdlbnRlcicgOiAndm9pZCdcIlxuICAgIFtAc2NhbGVNb3Rpb25dPVwicGxhY2VtZW50ICE9PSAndG9wJyAmJiBwbGFjZW1lbnQgIT09ICdib3R0b20nICYmIHBsYWNlbWVudCAhPT0gJ2xlZnQnICYmIHBsYWNlbWVudCAhPT0gJ3JpZ2h0JyA/ICdlbnRlcicgOiAndm9pZCdcIlxuICAgIChtb3VzZW1vdmUpPVwiZHJvcERvd25Nb3VzZU1vdmUoJGV2ZW50KVwiPlxuICAgIEBpZiAoY29udGVudE9wdGlvbnM/Lmxlbmd0aCA+IDAgfHwgY29udGVudEdyb3Vwcz8ubGVuZ3RoID4gMCB8fCBpbm5lck9wdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIDxkaXZcbiAgICAgICAgI3BhbmVsXG4gICAgICAgIGNsYXNzPVwidGh5LXNlbGVjdC1kcm9wZG93bi1vcHRpb25zIHRoeS1zZWxlY3QtZHJvcGRvd24tb3B0aW9ucy17eyBzaXplIH19XCJcbiAgICAgICAgdGh5U2Nyb2xsXG4gICAgICAgICh0aHlPblNjcm9sbGVkKT1cIm9uT3B0aW9uc1Njcm9sbGVkKCRldmVudClcIlxuICAgICAgICBbdGh5RW5hYmxlXT1cInRoeUVuYWJsZVNjcm9sbExvYWRcIj5cbiAgICAgICAgQGlmIChpc1JlYWN0aXZlRHJpdmVuKSB7XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbnNDb250YWluZXIub3B0aW9uc1RlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgfVxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIEBpZiAoaXNIaWRkZW5PcHRpb25zKSB7XG4gICAgICAgICAgPHRoeS1sb2FkaW5nIFt0aHlEb25lXT1cInRoeUxvYWRTdGF0ZVwiIHRoeVNpemU9XCJzbVwiPjwvdGh5LWxvYWRpbmc+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRoeS1zZWxlY3QtZW1wdHktY29udGVudFwiPlxuICAgICAgICAgICAgQGlmICh0aHlMb2FkU3RhdGUpIHtcbiAgICAgICAgICAgICAgPHRoeS1lbXB0eSBbdGh5TWVzc2FnZV09XCJlbXB0eVNlYXJjaE1lc3NhZ2VUZXh0XCIgdGh5U2l6ZT1cInNtXCIgW3RoeUljb25OYW1lXT1cImVtcHR5SWNvbigpXCI+PC90aHktZW1wdHk+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgPHRoeS1sb2FkaW5nIFt0aHlEb25lXT1cInRoeUxvYWRTdGF0ZVwiIHRoeVNpemU9XCJzbVwiPjwvdGh5LWxvYWRpbmc+XG4gICAgICA8ZGl2IGNsYXNzPVwidGh5LXNlbGVjdC1lbXB0eS1jb250ZW50XCI+XG4gICAgICAgIEBpZiAodGh5TG9hZFN0YXRlKSB7XG4gICAgICAgICAgPHRoeS1lbXB0eSBbdGh5TWVzc2FnZV09XCJlbXB0eVN0YXRlVGV4dFwiIHRoeVNpemU9XCJzbVwiIFt0aHlJY29uTmFtZV09XCJlbXB0eUljb24oKVwiPjwvdGh5LWVtcHR5PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmICh0aHlGb290ZXJUZW1wbGF0ZSkge1xuICAgICAgPGRpdiBbY2xhc3NdPVwidGh5Rm9vdGVyQ2xhc3MgPyB0aHlGb290ZXJDbGFzcyA6ICd0aHktY3VzdG9tLXNlbGVjdC1mb290ZXInXCI+XG4gICAgICAgIEBpZiAodGh5Rm9vdGVyVGVtcGxhdGUpIHtcbiAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidGh5Rm9vdGVyVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPHRoeS1vcHRpb25zLWNvbnRhaW5lciAjb3B0aW9uc0NvbnRhaW5lcj5cbiAgQGZvciAob3B0aW9uIG9mIG9wdGlvbkdyb3VwczsgdHJhY2sgJGluZGV4KSB7XG4gICAgQGlmICghb3B0aW9uLmNoaWxkcmVuKSB7XG4gICAgICA8dGh5LW9wdGlvblxuICAgICAgICBbdGh5RGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCJcbiAgICAgICAgW3RoeUxhYmVsVGV4dF09XCJvcHRpb24ubGFiZWxcIlxuICAgICAgICBbdGh5VmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgW3RoeVJhd1ZhbHVlXT1cIm9wdGlvblwiPjwvdGh5LW9wdGlvbj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDx0aHktb3B0aW9uLWdyb3VwIFt0aHlHcm91cExhYmVsXT1cIm9wdGlvbi5ncm91cExhYmVsXCI+XG4gICAgICAgIEBmb3IgKHN1YiBvZiBvcHRpb24uY2hpbGRyZW47IHRyYWNrIHN1Yi52YWx1ZSkge1xuICAgICAgICAgIDx0aHktb3B0aW9uIFt0aHlEaXNhYmxlZF09XCJzdWIuZGlzYWJsZWRcIiBbdGh5TGFiZWxUZXh0XT1cInN1Yi5sYWJlbFwiIFt0aHlWYWx1ZV09XCJzdWIudmFsdWVcIiBbdGh5UmF3VmFsdWVdPVwic3ViXCI+PC90aHktb3B0aW9uPlxuICAgICAgICB9XG4gICAgICA8L3RoeS1vcHRpb24tZ3JvdXA+XG4gICAgfVxuICB9XG48L3RoeS1vcHRpb25zLWNvbnRhaW5lcj5cbiJdfQ==
|