ngx-tethys 18.2.7 → 19.0.0-next.0
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 +10 -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 +1 -169
- 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,648 +0,0 @@
|
|
|
1
|
-
import { coerceBooleanProperty, helpers } from 'ngx-tethys/util';
|
|
2
|
-
import { useHostRenderer } from '@tethys/cdk/dom';
|
|
3
|
-
import { SelectionModel } from '@angular/cdk/collections';
|
|
4
|
-
import { CdkVirtualScrollViewport, CdkFixedSizeVirtualScroll, CdkVirtualForOf } from '@angular/cdk/scrolling';
|
|
5
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, EventEmitter, forwardRef, HostBinding, Input, numberAttribute, Output, QueryList, TemplateRef, ViewChild, ViewChildren, ViewEncapsulation, inject } from '@angular/core';
|
|
6
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
7
|
-
import { THY_TREE_ABSTRACT_TOKEN } from './tree-abstract';
|
|
8
|
-
import { ThyTreeNode } from './tree-node.class';
|
|
9
|
-
import { ThyTreeDropPosition, ThyTreeIcons } from './tree.class';
|
|
10
|
-
import { ThyTreeService } from './tree.service';
|
|
11
|
-
import { ThyTreeNodeComponent } from './tree-node.component';
|
|
12
|
-
import { DOCUMENT } from '@angular/common';
|
|
13
|
-
import { CdkDrag, CdkDropList } from '@angular/cdk/drag-drop';
|
|
14
|
-
import { filter, startWith, takeUntil } from 'rxjs/operators';
|
|
15
|
-
import { Subject } from 'rxjs';
|
|
16
|
-
import { ThyTreeNodeDraggablePipe } from './tree.pipe';
|
|
17
|
-
import * as i0 from "@angular/core";
|
|
18
|
-
const treeTypeClassMap = {
|
|
19
|
-
default: ['thy-tree-default'],
|
|
20
|
-
especial: ['thy-tree-especial']
|
|
21
|
-
};
|
|
22
|
-
const treeItemSizeMap = {
|
|
23
|
-
default: 44,
|
|
24
|
-
sm: 42
|
|
25
|
-
};
|
|
26
|
-
/**
|
|
27
|
-
* 树形控件组件
|
|
28
|
-
* @name thy-tree
|
|
29
|
-
*/
|
|
30
|
-
export class ThyTree {
|
|
31
|
-
constructor() {
|
|
32
|
-
this.thyTreeService = inject(ThyTreeService);
|
|
33
|
-
this.cdr = inject(ChangeDetectorRef);
|
|
34
|
-
this.document = inject(DOCUMENT);
|
|
35
|
-
this._draggable = false;
|
|
36
|
-
this.hostRenderer = useHostRenderer();
|
|
37
|
-
this._onTouched = () => { };
|
|
38
|
-
this._onChange = (_) => { };
|
|
39
|
-
this.destroy$ = new Subject();
|
|
40
|
-
// 缓存 Element 和 DragRef 的关系,方便在 Item 拖动时查找
|
|
41
|
-
this.nodeDragsMap = new Map();
|
|
42
|
-
this.nodeDragMoved = new Subject();
|
|
43
|
-
this.dropEnterPredicate = context => {
|
|
44
|
-
return (this.isShowExpand(context.target) || (!this.isShowExpand(context.target) && context.dropPosition !== ThyTreeDropPosition.in));
|
|
45
|
-
};
|
|
46
|
-
this.flattenTreeNodes = [];
|
|
47
|
-
/**
|
|
48
|
-
* 设置 TreeNode 是否支持展开
|
|
49
|
-
* @type boolean | Function
|
|
50
|
-
*/
|
|
51
|
-
this.thyShowExpand = true;
|
|
52
|
-
/**
|
|
53
|
-
* 设置是否支持多选节点
|
|
54
|
-
*/
|
|
55
|
-
this.thyMultiple = false;
|
|
56
|
-
/**
|
|
57
|
-
* 点击节点的行为,`default` 为选中当前节点,`selectCheckbox` 为选中节点的 Checkbox, `thyCheckable` 为 true 时生效。
|
|
58
|
-
*/
|
|
59
|
-
this.thyClickBehavior = 'default';
|
|
60
|
-
/**
|
|
61
|
-
* 设置 TreeNode 是否支持异步加载
|
|
62
|
-
*/
|
|
63
|
-
this.thyAsync = false;
|
|
64
|
-
this._thyType = 'default';
|
|
65
|
-
/**
|
|
66
|
-
* 设置不同 Tree 展开折叠的图标,`expand` 为展开状态的图标,`collapse` 为折叠状态的图标
|
|
67
|
-
* @type { expand: string, collapse: string }
|
|
68
|
-
*/
|
|
69
|
-
this.thyIcons = {};
|
|
70
|
-
this._thySize = 'default';
|
|
71
|
-
/**
|
|
72
|
-
* 设置是否开启虚拟滚动
|
|
73
|
-
*/
|
|
74
|
-
this.thyVirtualScroll = false;
|
|
75
|
-
this._thyItemSize = 44;
|
|
76
|
-
/**
|
|
77
|
-
* 设置节点名称是否支持超出截取
|
|
78
|
-
* @type boolean
|
|
79
|
-
*/
|
|
80
|
-
this.thyTitleTruncate = true;
|
|
81
|
-
/**
|
|
82
|
-
* 是否展开所有树节点
|
|
83
|
-
*/
|
|
84
|
-
this.thyExpandAll = false;
|
|
85
|
-
/**
|
|
86
|
-
* 设置缩进距离,缩进距离 = thyIndent * node.level
|
|
87
|
-
* @type number
|
|
88
|
-
*/
|
|
89
|
-
this.thyIndent = 25;
|
|
90
|
-
/**
|
|
91
|
-
* 设置子 TreeNode 点击事件
|
|
92
|
-
*/
|
|
93
|
-
this.thyOnClick = new EventEmitter();
|
|
94
|
-
/**
|
|
95
|
-
* 设置 check 选择事件
|
|
96
|
-
*/
|
|
97
|
-
this.thyOnCheckboxChange = new EventEmitter();
|
|
98
|
-
/**
|
|
99
|
-
* 设置点击展开触发事件
|
|
100
|
-
*/
|
|
101
|
-
this.thyOnExpandChange = new EventEmitter();
|
|
102
|
-
/**
|
|
103
|
-
* 设置 TreeNode 拖拽事件
|
|
104
|
-
*/
|
|
105
|
-
this.thyOnDragDrop = new EventEmitter();
|
|
106
|
-
/**
|
|
107
|
-
* 双击 TreeNode 事件
|
|
108
|
-
*/
|
|
109
|
-
this.thyDblClick = new EventEmitter();
|
|
110
|
-
this.thyTreeClass = true;
|
|
111
|
-
this.renderView = () => { };
|
|
112
|
-
}
|
|
113
|
-
get treeNodes() {
|
|
114
|
-
return this.thyTreeService.treeNodes;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* 设置 TreeNode 是否支持拖拽排序
|
|
118
|
-
* @default false
|
|
119
|
-
*/
|
|
120
|
-
set thyDraggable(value) {
|
|
121
|
-
this._draggable = value;
|
|
122
|
-
}
|
|
123
|
-
get thyDraggable() {
|
|
124
|
-
return this._draggable;
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* 设置 check 状态的计算策略
|
|
128
|
-
*/
|
|
129
|
-
set thyCheckStateResolve(resolve) {
|
|
130
|
-
if (resolve) {
|
|
131
|
-
this.thyTreeService.setCheckStateResolve(resolve);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* 设置不同展示类型的 Tree,`default` 为小箭头展示, `especial` 为 加减号图标展示
|
|
136
|
-
* @type ThyTreeType
|
|
137
|
-
* @default default
|
|
138
|
-
*/
|
|
139
|
-
set thyType(type) {
|
|
140
|
-
this._thyType = type;
|
|
141
|
-
if (type === 'especial') {
|
|
142
|
-
this.thyIcons = { expand: 'minus-square', collapse: 'plus-square' };
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
get thyType() {
|
|
146
|
-
return this._thyType;
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* 支持 `sm` | `default` 两种大小,默认值为 `default`
|
|
150
|
-
* @type ThyTreeSize
|
|
151
|
-
* @default default
|
|
152
|
-
*/
|
|
153
|
-
set thySize(size) {
|
|
154
|
-
this._thySize = size;
|
|
155
|
-
if (this._thySize) {
|
|
156
|
-
this._thyItemSize = treeItemSizeMap[this._thySize];
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
this._thyItemSize = treeItemSizeMap.default;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
get thySize() {
|
|
163
|
-
return this._thySize;
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* 开启虚拟滚动时,单行节点的高度,当`thySize`为`default`时,该参数才生效
|
|
167
|
-
* @default 44
|
|
168
|
-
*/
|
|
169
|
-
set thyItemSize(itemSize) {
|
|
170
|
-
if (this.thySize !== 'default') {
|
|
171
|
-
throw new Error('setting thySize and thyItemSize at the same time is not allowed');
|
|
172
|
-
}
|
|
173
|
-
this._thyItemSize = itemSize;
|
|
174
|
-
}
|
|
175
|
-
get thyItemSize() {
|
|
176
|
-
return this._thyItemSize;
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* 设置 TreeNode 的渲染模板
|
|
180
|
-
*/
|
|
181
|
-
set templateRef(template) {
|
|
182
|
-
if (template) {
|
|
183
|
-
this._templateRef = template;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
get templateRef() {
|
|
187
|
-
return this._templateRef;
|
|
188
|
-
}
|
|
189
|
-
set emptyChildrenTemplateRef(template) {
|
|
190
|
-
if (template) {
|
|
191
|
-
this._emptyChildrenTemplateRef = template;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
get emptyChildrenTemplateRef() {
|
|
195
|
-
return this._emptyChildrenTemplateRef;
|
|
196
|
-
}
|
|
197
|
-
ngOnInit() {
|
|
198
|
-
this._initThyNodes();
|
|
199
|
-
this._setTreeType();
|
|
200
|
-
this._setTreeSize();
|
|
201
|
-
this._instanceSelectionModel();
|
|
202
|
-
this._selectTreeNodes(this.thySelectedKeys);
|
|
203
|
-
this.thyTreeService.flattenNodes$.subscribe(flattenTreeNodes => {
|
|
204
|
-
this.flattenTreeNodes = flattenTreeNodes;
|
|
205
|
-
this.cdr.markForCheck();
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
ngAfterViewInit() {
|
|
209
|
-
this.cdkDrags.changes
|
|
210
|
-
.pipe(startWith(this.cdkDrags), takeUntil(this.destroy$))
|
|
211
|
-
.subscribe((drags) => {
|
|
212
|
-
this.nodeDragsMap.clear();
|
|
213
|
-
drags.forEach(drag => {
|
|
214
|
-
if (drag.data) {
|
|
215
|
-
// cdkDrag 变化时,缓存 Element 与 DragRef 的关系,方便 Drag Move 时查找
|
|
216
|
-
this.nodeDragsMap.set(drag.element.nativeElement, drag);
|
|
217
|
-
}
|
|
218
|
-
});
|
|
219
|
-
});
|
|
220
|
-
this.nodeDragMoved
|
|
221
|
-
.pipe(
|
|
222
|
-
// auditTime(30),
|
|
223
|
-
// auditTime 可能会导致拖动结束后仍然执行 moved ,所以通过判断 dragging 状态来过滤无效 moved
|
|
224
|
-
filter((event) => event.source._dragRef.isDragging()), takeUntil(this.destroy$))
|
|
225
|
-
.subscribe(event => {
|
|
226
|
-
this.onDragMoved(event);
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
ngOnChanges(changes) {
|
|
230
|
-
if (changes.thyNodes && !changes.thyNodes.isFirstChange()) {
|
|
231
|
-
this._initThyNodes();
|
|
232
|
-
}
|
|
233
|
-
if (changes.thyType && !changes.thyType.isFirstChange()) {
|
|
234
|
-
this._setTreeType();
|
|
235
|
-
}
|
|
236
|
-
if (changes.thyMultiple && !changes.thyMultiple.isFirstChange()) {
|
|
237
|
-
this._instanceSelectionModel();
|
|
238
|
-
}
|
|
239
|
-
if (changes.thySelectedKeys && !changes.thySelectedKeys.isFirstChange()) {
|
|
240
|
-
this._selectedKeys = changes.thySelectedKeys.currentValue;
|
|
241
|
-
this._selectTreeNodes(changes.thySelectedKeys.currentValue);
|
|
242
|
-
}
|
|
243
|
-
if (changes.thyExpandedKeys && !changes.thyExpandedKeys.isFirstChange()) {
|
|
244
|
-
this._handleExpandedKeys();
|
|
245
|
-
}
|
|
246
|
-
if (changes.thyExpandAll && !changes.thyExpandAll.isFirstChange()) {
|
|
247
|
-
this._handleExpandedKeys();
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
eventTriggerChanged(event) {
|
|
251
|
-
switch (event.eventName) {
|
|
252
|
-
case 'expand':
|
|
253
|
-
this.thyOnExpandChange.emit(event);
|
|
254
|
-
break;
|
|
255
|
-
case 'checkboxChange':
|
|
256
|
-
this.thyOnCheckboxChange.emit(event);
|
|
257
|
-
break;
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
_initThyNodes() {
|
|
261
|
-
this._expandedKeys = this.getExpandedNodes().map(node => node.key);
|
|
262
|
-
this._selectedKeys = this.getSelectedNodes().map(node => node.key);
|
|
263
|
-
this.thyTreeService.initializeTreeNodes(this.thyNodes);
|
|
264
|
-
this.flattenTreeNodes = this.thyTreeService.flattenTreeNodes;
|
|
265
|
-
this._selectTreeNodes(this._selectedKeys);
|
|
266
|
-
this._handleExpandedKeys();
|
|
267
|
-
}
|
|
268
|
-
_handleExpandedKeys() {
|
|
269
|
-
if (this.thyExpandedKeys?.length) {
|
|
270
|
-
this._expandedKeys = helpers.concatArray(this.thyExpandedKeys.filter(key => !this._expandedKeys.includes(key)), this._expandedKeys);
|
|
271
|
-
}
|
|
272
|
-
this.thyTreeService.expandTreeNodes(this.thyExpandAll || this._expandedKeys);
|
|
273
|
-
}
|
|
274
|
-
_setTreeType() {
|
|
275
|
-
if (this.thyType && treeTypeClassMap[this.thyType]) {
|
|
276
|
-
treeTypeClassMap[this.thyType].forEach(className => {
|
|
277
|
-
this.hostRenderer.addClass(className);
|
|
278
|
-
});
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
_setTreeSize() {
|
|
282
|
-
if (this.thySize) {
|
|
283
|
-
this.hostRenderer.addClass(`thy-tree-${this.thySize}`);
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
_instanceSelectionModel() {
|
|
287
|
-
this._selectionModel = new SelectionModel(this.thyMultiple);
|
|
288
|
-
}
|
|
289
|
-
_selectTreeNodes(keys) {
|
|
290
|
-
(keys || []).forEach(key => {
|
|
291
|
-
const node = this.thyTreeService.getTreeNode(key);
|
|
292
|
-
if (node) {
|
|
293
|
-
this.selectTreeNode(this.thyTreeService.getTreeNode(key));
|
|
294
|
-
}
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
isSelected(node) {
|
|
298
|
-
return this._selectionModel.isSelected(node);
|
|
299
|
-
}
|
|
300
|
-
toggleTreeNode(node) {
|
|
301
|
-
if (node && !node.isDisabled) {
|
|
302
|
-
this._selectionModel.toggle(node);
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
trackByFn(index, item) {
|
|
306
|
-
return item.key || index;
|
|
307
|
-
}
|
|
308
|
-
isShowExpand(node) {
|
|
309
|
-
if (helpers.isFunction(this.thyShowExpand)) {
|
|
310
|
-
return this.thyShowExpand(node);
|
|
311
|
-
}
|
|
312
|
-
else {
|
|
313
|
-
return this.thyShowExpand;
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
writeValue(value) {
|
|
317
|
-
if (value) {
|
|
318
|
-
this.thyNodes = value;
|
|
319
|
-
this._initThyNodes();
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
registerOnChange(fn) {
|
|
323
|
-
this._onChange = fn;
|
|
324
|
-
}
|
|
325
|
-
registerOnTouched(fn) {
|
|
326
|
-
this._onTouched = fn;
|
|
327
|
-
}
|
|
328
|
-
onDragStarted(event) {
|
|
329
|
-
this.dragging = true;
|
|
330
|
-
this.startDragNodeClone = Object.assign({}, event.source.data);
|
|
331
|
-
if (event.source.data.isExpanded) {
|
|
332
|
-
event.source.data.setExpanded(false);
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
emitDragMoved(event) {
|
|
336
|
-
this.nodeDragMoved.next(event);
|
|
337
|
-
}
|
|
338
|
-
onDragMoved(event) {
|
|
339
|
-
// 通过鼠标位置查找对应的目标 Item 元素
|
|
340
|
-
let currentPointElement = this.document.elementFromPoint(event.pointerPosition.x, event.pointerPosition.y);
|
|
341
|
-
if (!currentPointElement) {
|
|
342
|
-
this.cleanupDragArtifacts();
|
|
343
|
-
return;
|
|
344
|
-
}
|
|
345
|
-
let targetElement = currentPointElement.classList.contains('thy-tree-node')
|
|
346
|
-
? currentPointElement
|
|
347
|
-
: currentPointElement.closest('.thy-tree-node');
|
|
348
|
-
if (!targetElement) {
|
|
349
|
-
this.cleanupDragArtifacts();
|
|
350
|
-
return;
|
|
351
|
-
}
|
|
352
|
-
// 缓存放置目标Id 并计算鼠标相对应的位置
|
|
353
|
-
this.nodeDropTarget = {
|
|
354
|
-
key: this.nodeDragsMap.get(targetElement)?.data.key,
|
|
355
|
-
position: this.getTargetPosition(targetElement, event)
|
|
356
|
-
};
|
|
357
|
-
// 执行外部传入的 dropEnterPredicate 判断是否允许拖入目标项
|
|
358
|
-
if (this.dropEnterPredicate) {
|
|
359
|
-
const targetDragRef = this.nodeDragsMap.get(targetElement);
|
|
360
|
-
if (this.dropEnterPredicate({
|
|
361
|
-
source: event.source.data,
|
|
362
|
-
target: targetDragRef.data,
|
|
363
|
-
dropPosition: this.nodeDropTarget.position
|
|
364
|
-
})) {
|
|
365
|
-
this.showDropPositionPlaceholder(targetElement);
|
|
366
|
-
}
|
|
367
|
-
else {
|
|
368
|
-
this.nodeDropTarget = null;
|
|
369
|
-
this.cleanupDragArtifacts();
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
else {
|
|
373
|
-
this.showDropPositionPlaceholder(targetElement);
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
onDragEnded(event) {
|
|
377
|
-
this.dragging = false;
|
|
378
|
-
// 拖拽结束后恢复原始的展开状态
|
|
379
|
-
event.source.data.setExpanded(this.startDragNodeClone.isExpanded);
|
|
380
|
-
setTimeout(() => {
|
|
381
|
-
this.startDragNodeClone = null;
|
|
382
|
-
});
|
|
383
|
-
}
|
|
384
|
-
onListDropped(event) {
|
|
385
|
-
if (!this.nodeDropTarget) {
|
|
386
|
-
return;
|
|
387
|
-
}
|
|
388
|
-
if (!this.isShowExpand(this.startDragNodeClone) && this.nodeDropTarget.position === ThyTreeDropPosition.in) {
|
|
389
|
-
this.cleanupDragArtifacts();
|
|
390
|
-
return;
|
|
391
|
-
}
|
|
392
|
-
const sourceNode = this.startDragNodeClone;
|
|
393
|
-
const sourceNodeParent = sourceNode.parentNode;
|
|
394
|
-
const targetDragRef = this.cdkDrags.find(item => item.data?.key === this.nodeDropTarget.key);
|
|
395
|
-
const targetNode = targetDragRef?.data;
|
|
396
|
-
const targetNodeParent = targetNode.parentNode;
|
|
397
|
-
const beforeDragDropContext = {
|
|
398
|
-
previousItem: sourceNode,
|
|
399
|
-
previousContainerItems: sourceNodeParent?.children,
|
|
400
|
-
item: targetNode,
|
|
401
|
-
containerItems: targetNodeParent?.children,
|
|
402
|
-
position: this.nodeDropTarget.position
|
|
403
|
-
};
|
|
404
|
-
if (this.thyBeforeDragDrop && !this.thyBeforeDragDrop(beforeDragDropContext)) {
|
|
405
|
-
this.cleanupDragArtifacts();
|
|
406
|
-
return;
|
|
407
|
-
}
|
|
408
|
-
this.thyTreeService.deleteTreeNode(sourceNode);
|
|
409
|
-
switch (this.nodeDropTarget.position) {
|
|
410
|
-
case 'before':
|
|
411
|
-
const beforeInsertIndex = (targetNodeParent?.children || this.treeNodes).indexOf(targetNode);
|
|
412
|
-
this.thyTreeService.addTreeNode(sourceNode, targetNodeParent, beforeInsertIndex);
|
|
413
|
-
break;
|
|
414
|
-
case 'after':
|
|
415
|
-
const afterInsertIndex = (targetNodeParent?.children || this.treeNodes).indexOf(targetNode) + 1;
|
|
416
|
-
this.thyTreeService.addTreeNode(sourceNode, targetNodeParent, afterInsertIndex);
|
|
417
|
-
break;
|
|
418
|
-
case 'in':
|
|
419
|
-
this.thyTreeService.addTreeNode(sourceNode, targetNode);
|
|
420
|
-
break;
|
|
421
|
-
}
|
|
422
|
-
this.thyTreeService.syncFlattenTreeNodes();
|
|
423
|
-
let after = null;
|
|
424
|
-
let targe = null;
|
|
425
|
-
if (beforeDragDropContext.position === ThyTreeDropPosition.before) {
|
|
426
|
-
const targetContainerNodes = targetNodeParent?.children || this.treeNodes;
|
|
427
|
-
after = targetContainerNodes[targetContainerNodes.indexOf(targetNode) - 2];
|
|
428
|
-
targe = targetNodeParent;
|
|
429
|
-
}
|
|
430
|
-
else if (beforeDragDropContext.position === ThyTreeDropPosition.after) {
|
|
431
|
-
after = targetNode;
|
|
432
|
-
targe = targetNodeParent;
|
|
433
|
-
}
|
|
434
|
-
else {
|
|
435
|
-
after = targetNode.children?.length > 0 ? targetNode.children[targetNode.children.length - 2] : null;
|
|
436
|
-
targe = targetNode;
|
|
437
|
-
}
|
|
438
|
-
this.thyOnDragDrop.emit({
|
|
439
|
-
dragNode: this.thyTreeService.getTreeNode(sourceNode.key),
|
|
440
|
-
targetNode: targe,
|
|
441
|
-
afterNode: after
|
|
442
|
-
});
|
|
443
|
-
this.cleanupDragArtifacts();
|
|
444
|
-
}
|
|
445
|
-
getTargetPosition(target, event) {
|
|
446
|
-
const targetRect = target.getBoundingClientRect();
|
|
447
|
-
const beforeOrAfterGap = targetRect.height * 0.3;
|
|
448
|
-
// 将 Node 高度分为上中下三段,其中上下的 Gap 为 height 的 30%,通过判断鼠标位置在哪一段 gap 来计算对应的位置
|
|
449
|
-
if (event.pointerPosition.y - targetRect.top < beforeOrAfterGap) {
|
|
450
|
-
return ThyTreeDropPosition.before;
|
|
451
|
-
}
|
|
452
|
-
else if (event.pointerPosition.y >= targetRect.bottom - beforeOrAfterGap) {
|
|
453
|
-
return ThyTreeDropPosition.after;
|
|
454
|
-
}
|
|
455
|
-
else {
|
|
456
|
-
return ThyTreeDropPosition.in;
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
showDropPositionPlaceholder(targetElement) {
|
|
460
|
-
this.cleanupDropPositionPlaceholder();
|
|
461
|
-
if (this.nodeDropTarget && targetElement) {
|
|
462
|
-
targetElement.classList.add(`drop-position-${this.nodeDropTarget.position}`);
|
|
463
|
-
}
|
|
464
|
-
}
|
|
465
|
-
cleanupDropPositionPlaceholder() {
|
|
466
|
-
this.document.querySelectorAll('.drop-position-before').forEach(element => element.classList.remove('drop-position-before'));
|
|
467
|
-
this.document.querySelectorAll('.drop-position-after').forEach(element => element.classList.remove('drop-position-after'));
|
|
468
|
-
this.document.querySelectorAll('.drop-position-in').forEach(element => element.classList.remove('drop-position-in'));
|
|
469
|
-
}
|
|
470
|
-
cleanupDragArtifacts() {
|
|
471
|
-
this.nodeDropTarget = null;
|
|
472
|
-
this.cleanupDropPositionPlaceholder();
|
|
473
|
-
}
|
|
474
|
-
// region Public Functions
|
|
475
|
-
selectTreeNode(node) {
|
|
476
|
-
if (node && !node.isDisabled) {
|
|
477
|
-
this._selectionModel.select(node);
|
|
478
|
-
this.thyTreeService.syncFlattenTreeNodes();
|
|
479
|
-
}
|
|
480
|
-
}
|
|
481
|
-
getRootNodes() {
|
|
482
|
-
return this.treeNodes;
|
|
483
|
-
}
|
|
484
|
-
getTreeNode(key) {
|
|
485
|
-
return this.thyTreeService.getTreeNode(key);
|
|
486
|
-
}
|
|
487
|
-
getSelectedNode() {
|
|
488
|
-
return this._selectionModel ? this._selectionModel.selected[0] : null;
|
|
489
|
-
}
|
|
490
|
-
getSelectedNodes() {
|
|
491
|
-
return this._selectionModel ? this._selectionModel.selected : [];
|
|
492
|
-
}
|
|
493
|
-
getExpandedNodes() {
|
|
494
|
-
return this.thyTreeService.getExpandedNodes();
|
|
495
|
-
}
|
|
496
|
-
getCheckedNodes() {
|
|
497
|
-
return this.thyTreeService.getCheckedNodes();
|
|
498
|
-
}
|
|
499
|
-
addTreeNode(node, parent, index = -1) {
|
|
500
|
-
this.thyTreeService.addTreeNode(new ThyTreeNode(node, null, this.thyTreeService), parent, index);
|
|
501
|
-
this.thyTreeService.syncFlattenTreeNodes();
|
|
502
|
-
}
|
|
503
|
-
deleteTreeNode(node) {
|
|
504
|
-
if (this.isSelected(node)) {
|
|
505
|
-
this._selectionModel.toggle(node);
|
|
506
|
-
}
|
|
507
|
-
this.thyTreeService.deleteTreeNode(node);
|
|
508
|
-
this.thyTreeService.syncFlattenTreeNodes();
|
|
509
|
-
}
|
|
510
|
-
expandAllNodes() {
|
|
511
|
-
const nodes = this.getRootNodes();
|
|
512
|
-
nodes.forEach(n => n.setExpanded(true, true));
|
|
513
|
-
}
|
|
514
|
-
collapsedAllNodes() {
|
|
515
|
-
const nodes = this.getRootNodes();
|
|
516
|
-
nodes.forEach(n => n.setExpanded(false, true));
|
|
517
|
-
}
|
|
518
|
-
// endregion
|
|
519
|
-
ngOnDestroy() {
|
|
520
|
-
this.destroy$.next();
|
|
521
|
-
this.destroy$.complete();
|
|
522
|
-
}
|
|
523
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThyTree, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
524
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ThyTree, isStandalone: true, selector: "thy-tree", inputs: { thyNodes: "thyNodes", thyShowExpand: "thyShowExpand", thyMultiple: ["thyMultiple", "thyMultiple", coerceBooleanProperty], thyDraggable: ["thyDraggable", "thyDraggable", coerceBooleanProperty], thyCheckable: ["thyCheckable", "thyCheckable", coerceBooleanProperty], thyClickBehavior: "thyClickBehavior", thyCheckStateResolve: "thyCheckStateResolve", thyAsync: ["thyAsync", "thyAsync", coerceBooleanProperty], thyType: "thyType", thyIcons: "thyIcons", thySize: "thySize", thyVirtualScroll: ["thyVirtualScroll", "thyVirtualScroll", coerceBooleanProperty], thyItemSize: ["thyItemSize", "thyItemSize", numberAttribute], thyTitleTruncate: ["thyTitleTruncate", "thyTitleTruncate", coerceBooleanProperty], thySelectedKeys: "thySelectedKeys", thyExpandedKeys: "thyExpandedKeys", thyExpandAll: ["thyExpandAll", "thyExpandAll", coerceBooleanProperty], thyIndent: ["thyIndent", "thyIndent", numberAttribute], thyBeforeDragStart: "thyBeforeDragStart", thyBeforeDragDrop: "thyBeforeDragDrop" }, outputs: { viewport: "viewport", thyOnClick: "thyOnClick", thyOnCheckboxChange: "thyOnCheckboxChange", thyOnExpandChange: "thyOnExpandChange", thyOnDragDrop: "thyOnDragDrop", thyDblClick: "thyDblClick" }, host: { properties: { "class.thy-multiple-selection-list": "this.thyMultiple", "class.thy-tree-draggable": "this.thyDraggable", "class.thy-virtual-scrolling-tree": "this.thyVirtualScroll", "class.thy-tree": "this.thyTreeClass", "class.thy-tree-dragging": "this.dragging" } }, providers: [
|
|
525
|
-
{
|
|
526
|
-
provide: NG_VALUE_ACCESSOR,
|
|
527
|
-
useExisting: forwardRef(() => ThyTree),
|
|
528
|
-
multi: true
|
|
529
|
-
},
|
|
530
|
-
{
|
|
531
|
-
provide: THY_TREE_ABSTRACT_TOKEN,
|
|
532
|
-
useExisting: forwardRef(() => ThyTree)
|
|
533
|
-
},
|
|
534
|
-
ThyTreeService
|
|
535
|
-
], queries: [{ propertyName: "templateRef", first: true, predicate: ["treeNodeTemplate"], descendants: true, static: true }, { propertyName: "emptyChildrenTemplate", first: true, predicate: ["emptyChildrenTemplate"], descendants: true, static: true }], viewQueries: [{ propertyName: "viewport", first: true, predicate: ["viewport"], descendants: true }, { propertyName: "cdkDrags", predicate: CdkDrag, descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (thyVirtualScroll) {\n <cdk-virtual-scroll-viewport\n #viewport\n [itemSize]=\"thyItemSize\"\n [style.height]=\"'100%'\"\n cdkDropList\n [cdkDropListAutoScrollStep]=\"6\"\n [cdkDropListData]=\"flattenTreeNodes\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onListDropped($event)\"\n >\n <div class=\"virtual-trees-container\">\n <thy-tree-node\n *cdkVirtualFor=\"let node of flattenTreeNodes; trackBy: trackByFn; let i = index\"\n cdkDrag\n [cdkDragData]=\"node\"\n [cdkDragDisabled]=\"!thyDraggable || !(node | treeNodeDraggable : thyBeforeDragStart)\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n (cdkDragMoved)=\"emitDragMoved($event)\"\n [node]=\"node\"\n [templateRef]=\"templateRef\"\n [emptyChildrenTemplateRef]=\"emptyChildrenTemplate\"\n [thyAsync]=\"thyAsync\"\n [thyDraggable]=\"thyDraggable\"\n [thyCheckable]=\"thyCheckable\"\n [thyMultiple]=\"thyMultiple\"\n [thyClickBehavior]=\"thyClickBehavior\"\n [thyTitleTruncate]=\"thyTitleTruncate\"\n [thyItemSize]=\"thyItemSize\"\n [thyIndent]=\"thyIndent\"\n (thyOnClick)=\"thyOnClick.emit($event)\"\n (thyDblClick)=\"thyDblClick.emit($event)\"\n (thyOnExpandChange)=\"eventTriggerChanged($event)\"\n (thyOnCheckboxChange)=\"eventTriggerChanged($event)\">\n </thy-tree-node>\n </div>\n </cdk-virtual-scroll-viewport>\n}\n\n@if (!thyVirtualScroll) {\n <div\n cdkDropList\n [cdkDropListAutoScrollStep]=\"6\"\n [cdkDropListData]=\"flattenTreeNodes\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onListDropped($event)\">\n @for (node of flattenTreeNodes; track trackByFn(i, node); let i = $index) {\n <thy-tree-node\n cdkDrag\n [cdkDragData]=\"node\"\n [cdkDragDisabled]=\"!thyDraggable || !(node | treeNodeDraggable : thyBeforeDragStart)\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n (cdkDragMoved)=\"emitDragMoved($event)\"\n [node]=\"node\"\n [templateRef]=\"templateRef\"\n [emptyChildrenTemplateRef]=\"emptyChildrenTemplate\"\n [thyAsync]=\"thyAsync\"\n [thyDraggable]=\"thyDraggable\"\n [thyCheckable]=\"thyCheckable\"\n [thyMultiple]=\"thyMultiple\"\n [thyTitleTruncate]=\"thyTitleTruncate\"\n [thyItemSize]=\"thyItemSize\"\n [thyClickBehavior]=\"thyClickBehavior\"\n [thyIndent]=\"thyIndent\"\n (thyOnClick)=\"thyOnClick.emit($event)\"\n (thyDblClick)=\"thyDblClick.emit($event)\"\n (thyOnExpandChange)=\"eventTriggerChanged($event)\"\n (thyOnCheckboxChange)=\"thyOnCheckboxChange.emit($event)\">\n </thy-tree-node>\n }\n </div>\n}\n", dependencies: [{ kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "component", type: CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: ThyTreeNodeComponent, selector: "thy-tree-node", inputs: ["node", "thyAsync", "thyMultiple", "thyDraggable", "thyCheckable", "thyClickBehavior", "thyTitleTruncate", "templateRef", "emptyChildrenTemplateRef", "thyItemSize", "thyIndent"], outputs: ["thyOnClick", "thyDblClick", "thyOnExpandChange", "thyOnCheckboxChange"] }, { kind: "pipe", type: ThyTreeNodeDraggablePipe, name: "treeNodeDraggable" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
536
|
-
}
|
|
537
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ThyTree, decorators: [{
|
|
538
|
-
type: Component,
|
|
539
|
-
args: [{ selector: 'thy-tree', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
540
|
-
{
|
|
541
|
-
provide: NG_VALUE_ACCESSOR,
|
|
542
|
-
useExisting: forwardRef(() => ThyTree),
|
|
543
|
-
multi: true
|
|
544
|
-
},
|
|
545
|
-
{
|
|
546
|
-
provide: THY_TREE_ABSTRACT_TOKEN,
|
|
547
|
-
useExisting: forwardRef(() => ThyTree)
|
|
548
|
-
},
|
|
549
|
-
ThyTreeService
|
|
550
|
-
], standalone: true, imports: [
|
|
551
|
-
CdkDrag,
|
|
552
|
-
CdkDropList,
|
|
553
|
-
CdkVirtualScrollViewport,
|
|
554
|
-
CdkFixedSizeVirtualScroll,
|
|
555
|
-
CdkVirtualForOf,
|
|
556
|
-
ThyTreeNodeComponent,
|
|
557
|
-
ThyTreeNodeDraggablePipe
|
|
558
|
-
], template: "@if (thyVirtualScroll) {\n <cdk-virtual-scroll-viewport\n #viewport\n [itemSize]=\"thyItemSize\"\n [style.height]=\"'100%'\"\n cdkDropList\n [cdkDropListAutoScrollStep]=\"6\"\n [cdkDropListData]=\"flattenTreeNodes\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onListDropped($event)\"\n >\n <div class=\"virtual-trees-container\">\n <thy-tree-node\n *cdkVirtualFor=\"let node of flattenTreeNodes; trackBy: trackByFn; let i = index\"\n cdkDrag\n [cdkDragData]=\"node\"\n [cdkDragDisabled]=\"!thyDraggable || !(node | treeNodeDraggable : thyBeforeDragStart)\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n (cdkDragMoved)=\"emitDragMoved($event)\"\n [node]=\"node\"\n [templateRef]=\"templateRef\"\n [emptyChildrenTemplateRef]=\"emptyChildrenTemplate\"\n [thyAsync]=\"thyAsync\"\n [thyDraggable]=\"thyDraggable\"\n [thyCheckable]=\"thyCheckable\"\n [thyMultiple]=\"thyMultiple\"\n [thyClickBehavior]=\"thyClickBehavior\"\n [thyTitleTruncate]=\"thyTitleTruncate\"\n [thyItemSize]=\"thyItemSize\"\n [thyIndent]=\"thyIndent\"\n (thyOnClick)=\"thyOnClick.emit($event)\"\n (thyDblClick)=\"thyDblClick.emit($event)\"\n (thyOnExpandChange)=\"eventTriggerChanged($event)\"\n (thyOnCheckboxChange)=\"eventTriggerChanged($event)\">\n </thy-tree-node>\n </div>\n </cdk-virtual-scroll-viewport>\n}\n\n@if (!thyVirtualScroll) {\n <div\n cdkDropList\n [cdkDropListAutoScrollStep]=\"6\"\n [cdkDropListData]=\"flattenTreeNodes\"\n [cdkDropListSortingDisabled]=\"true\"\n (cdkDropListDropped)=\"onListDropped($event)\">\n @for (node of flattenTreeNodes; track trackByFn(i, node); let i = $index) {\n <thy-tree-node\n cdkDrag\n [cdkDragData]=\"node\"\n [cdkDragDisabled]=\"!thyDraggable || !(node | treeNodeDraggable : thyBeforeDragStart)\"\n (cdkDragStarted)=\"onDragStarted($event)\"\n (cdkDragEnded)=\"onDragEnded($event)\"\n (cdkDragMoved)=\"emitDragMoved($event)\"\n [node]=\"node\"\n [templateRef]=\"templateRef\"\n [emptyChildrenTemplateRef]=\"emptyChildrenTemplate\"\n [thyAsync]=\"thyAsync\"\n [thyDraggable]=\"thyDraggable\"\n [thyCheckable]=\"thyCheckable\"\n [thyMultiple]=\"thyMultiple\"\n [thyTitleTruncate]=\"thyTitleTruncate\"\n [thyItemSize]=\"thyItemSize\"\n [thyClickBehavior]=\"thyClickBehavior\"\n [thyIndent]=\"thyIndent\"\n (thyOnClick)=\"thyOnClick.emit($event)\"\n (thyDblClick)=\"thyDblClick.emit($event)\"\n (thyOnExpandChange)=\"eventTriggerChanged($event)\"\n (thyOnCheckboxChange)=\"thyOnCheckboxChange.emit($event)\">\n </thy-tree-node>\n }\n </div>\n}\n" }]
|
|
559
|
-
}], propDecorators: { viewport: [{
|
|
560
|
-
type: Output
|
|
561
|
-
}, {
|
|
562
|
-
type: ViewChild,
|
|
563
|
-
args: ['viewport', { static: false }]
|
|
564
|
-
}], thyNodes: [{
|
|
565
|
-
type: Input
|
|
566
|
-
}], thyShowExpand: [{
|
|
567
|
-
type: Input
|
|
568
|
-
}], thyMultiple: [{
|
|
569
|
-
type: HostBinding,
|
|
570
|
-
args: [`class.thy-multiple-selection-list`]
|
|
571
|
-
}, {
|
|
572
|
-
type: Input,
|
|
573
|
-
args: [{ transform: coerceBooleanProperty }]
|
|
574
|
-
}], thyDraggable: [{
|
|
575
|
-
type: HostBinding,
|
|
576
|
-
args: ['class.thy-tree-draggable']
|
|
577
|
-
}, {
|
|
578
|
-
type: Input,
|
|
579
|
-
args: [{ transform: coerceBooleanProperty }]
|
|
580
|
-
}], thyCheckable: [{
|
|
581
|
-
type: Input,
|
|
582
|
-
args: [{ transform: coerceBooleanProperty }]
|
|
583
|
-
}], thyClickBehavior: [{
|
|
584
|
-
type: Input
|
|
585
|
-
}], thyCheckStateResolve: [{
|
|
586
|
-
type: Input
|
|
587
|
-
}], thyAsync: [{
|
|
588
|
-
type: Input,
|
|
589
|
-
args: [{ transform: coerceBooleanProperty }]
|
|
590
|
-
}], thyType: [{
|
|
591
|
-
type: Input
|
|
592
|
-
}], thyIcons: [{
|
|
593
|
-
type: Input
|
|
594
|
-
}], thySize: [{
|
|
595
|
-
type: Input
|
|
596
|
-
}], thyVirtualScroll: [{
|
|
597
|
-
type: HostBinding,
|
|
598
|
-
args: ['class.thy-virtual-scrolling-tree']
|
|
599
|
-
}, {
|
|
600
|
-
type: Input,
|
|
601
|
-
args: [{ transform: coerceBooleanProperty }]
|
|
602
|
-
}], thyItemSize: [{
|
|
603
|
-
type: Input,
|
|
604
|
-
args: [{ transform: numberAttribute }]
|
|
605
|
-
}], thyTitleTruncate: [{
|
|
606
|
-
type: Input,
|
|
607
|
-
args: [{ transform: coerceBooleanProperty }]
|
|
608
|
-
}], thySelectedKeys: [{
|
|
609
|
-
type: Input
|
|
610
|
-
}], thyExpandedKeys: [{
|
|
611
|
-
type: Input
|
|
612
|
-
}], thyExpandAll: [{
|
|
613
|
-
type: Input,
|
|
614
|
-
args: [{ transform: coerceBooleanProperty }]
|
|
615
|
-
}], thyIndent: [{
|
|
616
|
-
type: Input,
|
|
617
|
-
args: [{ transform: numberAttribute }]
|
|
618
|
-
}], thyBeforeDragStart: [{
|
|
619
|
-
type: Input
|
|
620
|
-
}], thyBeforeDragDrop: [{
|
|
621
|
-
type: Input
|
|
622
|
-
}], thyOnClick: [{
|
|
623
|
-
type: Output
|
|
624
|
-
}], thyOnCheckboxChange: [{
|
|
625
|
-
type: Output
|
|
626
|
-
}], thyOnExpandChange: [{
|
|
627
|
-
type: Output
|
|
628
|
-
}], thyOnDragDrop: [{
|
|
629
|
-
type: Output
|
|
630
|
-
}], thyDblClick: [{
|
|
631
|
-
type: Output
|
|
632
|
-
}], templateRef: [{
|
|
633
|
-
type: ContentChild,
|
|
634
|
-
args: ['treeNodeTemplate', { static: true }]
|
|
635
|
-
}], emptyChildrenTemplate: [{
|
|
636
|
-
type: ContentChild,
|
|
637
|
-
args: ['emptyChildrenTemplate', { static: true }]
|
|
638
|
-
}], thyTreeClass: [{
|
|
639
|
-
type: HostBinding,
|
|
640
|
-
args: ['class.thy-tree']
|
|
641
|
-
}], dragging: [{
|
|
642
|
-
type: HostBinding,
|
|
643
|
-
args: ['class.thy-tree-dragging']
|
|
644
|
-
}], cdkDrags: [{
|
|
645
|
-
type: ViewChildren,
|
|
646
|
-
args: [CdkDrag]
|
|
647
|
-
}] } });
|
|
648
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHJlZS90cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy90cmVlL3RyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHlCQUF5QixFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlHLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUNMLGVBQWUsRUFJZixNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBS0gsbUJBQW1CLEVBRW5CLFlBQVksRUFHZixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFD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QWdCO3NCQUZmLFdBQVc7dUJBQUMsa0NBQWtDOztzQkFDOUMsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRTtnQkFVdkMsV0FBVztzQkFEZCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFnQlEsZ0JBQWdCO3NCQUE1RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFO2dCQU1sQyxlQUFlO3NCQUF2QixLQUFLO2dCQUtHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBS3VDLFlBQVk7c0JBQXhELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUU7Z0JBTUosU0FBUztzQkFBL0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUU7Z0JBSzVCLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFLRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBS0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFLRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBS0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUtHLGFBQWE7c0JBQXRCLE1BQU07Z0JBS0csV0FBVztzQkFBcEIsTUFBTTtnQkFNSCxXQUFXO3NCQURkLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQWNPLHFCQUFxQjtzQkFBN0UsWUFBWTt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBWXZELFlBQVk7c0JBRFgsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBSTdCLFFBQVE7c0JBRFAsV0FBVzt1QkFBQyx5QkFBeUI7Z0JBR2YsUUFBUTtzQkFBOUIsWUFBWTt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5LCBoZWxwZXJzIH0gZnJvbSAnbmd4LXRldGh5cy91dGlsJztcbmltcG9ydCB7IHVzZUhvc3RSZW5kZXJlciB9IGZyb20gJ0B0ZXRoeXMvY2RrL2RvbSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsIENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsIENka1ZpcnR1YWxGb3JPZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgbnVtYmVyQXR0cmlidXRlLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRIWV9UUkVFX0FCU1RSQUNUX1RPS0VOIH0gZnJvbSAnLi90cmVlLWFic3RyYWN0JztcbmltcG9ydCB7IFRoeVRyZWVOb2RlIH0gZnJvbSAnLi90cmVlLW5vZGUuY2xhc3MnO1xuaW1wb3J0IHtcbiAgICBUaHlUcmVlQmVmb3JlRHJhZ0Ryb3BDb250ZXh0LFxuICAgIFRoeVRyZWVCZWZvcmVEcmFnU3RhcnRDb250ZXh0LFxuICAgIFRoeUNsaWNrQmVoYXZpb3IsXG4gICAgVGh5VHJlZURyYWdEcm9wRXZlbnQsXG4gICAgVGh5VHJlZURyb3BQb3NpdGlvbixcbiAgICBUaHlUcmVlRW1pdEV2ZW50LFxuICAgIFRoeVRyZWVJY29ucyxcbiAgICBUaHlUcmVlTm9kZUNoZWNrU3RhdGUsXG4gICAgVGh5VHJlZU5vZGVEYXRhXG59IGZyb20gJy4vdHJlZS5jbGFzcyc7XG5pbXBvcnQgeyBUaHlUcmVlU2VydmljZSB9IGZyb20gJy4vdHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRoeVRyZWVOb2RlQ29tcG9uZW50IH0gZnJvbSAnLi90cmVlLW5vZGUuY29tcG9uZW50JztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENka0RyYWcsIENka0RyYWdEcm9wLCBDZGtEcmFnRW5kLCBDZGtEcmFnTW92ZSwgQ2RrRHJhZ1N0YXJ0LCBDZGtEcm9wTGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgYXVkaXRUaW1lLCBmaWx0ZXIsIHN0YXJ0V2l0aCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVGh5VHJlZU5vZGVEcmFnZ2FibGVQaXBlIH0gZnJvbSAnLi90cmVlLnBpcGUnO1xuXG50eXBlIFRoeVRyZWVTaXplID0gJ3NtJyB8ICdkZWZhdWx0JztcblxudHlwZSBUaHlUcmVlVHlwZSA9ICdkZWZhdWx0JyB8ICdlc3BlY2lhbCc7XG5cbmNvbnN0IHRyZWVUeXBlQ2xhc3NNYXAgPSB7XG4gICAgZGVmYXVsdDogWyd0aHktdHJlZS1kZWZhdWx0J10sXG4gICAgZXNwZWNpYWw6IFsndGh5LXRyZWUtZXNwZWNpYWwnXVxufTtcblxuY29uc3QgdHJlZUl0ZW1TaXplTWFwID0ge1xuICAgIGRlZmF1bHQ6IDQ0LFxuICAgIHNtOiA0MlxufTtcblxuLyoqXG4gKiDmoJHlvaLmjqfku7bnu4Tku7ZcbiAqIEBuYW1lIHRoeS10cmVlXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGh5LXRyZWUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRoeVRyZWUpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogVEhZX1RSRUVfQUJTVFJBQ1RfVE9LRU4sXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUaHlUcmVlKVxuICAgICAgICB9LFxuICAgICAgICBUaHlUcmVlU2VydmljZVxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENka0RyYWcsXG4gICAgICAgIENka0Ryb3BMaXN0LFxuICAgICAgICBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsXG4gICAgICAgIENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsXG4gICAgICAgIENka1ZpcnR1YWxGb3JPZixcbiAgICAgICAgVGh5VHJlZU5vZGVDb21wb25lbnQsXG4gICAgICAgIFRoeVRyZWVOb2RlRHJhZ2dhYmxlUGlwZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVGh5VHJlZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICB0aHlUcmVlU2VydmljZSA9IGluamVjdChUaHlUcmVlU2VydmljZSk7XG4gICAgcHJpdmF0ZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIHByaXZhdGUgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gICAgcHJpdmF0ZSBfdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBwcml2YXRlIF9lbXB0eUNoaWxkcmVuVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBwcml2YXRlIF9kcmFnZ2FibGUgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX2V4cGFuZGVkS2V5czogKHN0cmluZyB8IG51bWJlcilbXTtcblxuICAgIHByaXZhdGUgX3NlbGVjdGVkS2V5czogKHN0cmluZyB8IG51bWJlcilbXTtcblxuICAgIHByaXZhdGUgaG9zdFJlbmRlcmVyID0gdXNlSG9zdFJlbmRlcmVyKCk7XG5cbiAgICBwcml2YXRlIF9vblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIHByaXZhdGUgX29uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9IChfOiBhbnkpID0+IHt9O1xuXG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvLyDnvJPlrZggRWxlbWVudCDlkowgRHJhZ1JlZiDnmoTlhbPns7vvvIzmlrnkvr/lnKggSXRlbSDmi5bliqjml7bmn6Xmib5cbiAgICBwcml2YXRlIG5vZGVEcmFnc01hcCA9IG5ldyBNYXA8SFRNTEVsZW1lbnQsIENka0RyYWc8VGh5VHJlZU5vZGU+PigpO1xuXG4gICAgcHJpdmF0ZSBub2RlRHJhZ01vdmVkID0gbmV3IFN1YmplY3Q8Q2RrRHJhZ01vdmU+KCk7XG5cbiAgICAvLyBwcml2YXRlIHN0YXJ0RHJhZ05vZGVFeHBhbmRlZDogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgc3RhcnREcmFnTm9kZUNsb25lOiBUaHlUcmVlTm9kZTtcblxuICAgIC8vIE5vZGUg5ouW5Yqo57uP6L+H55uu5qCH5pe25Li05pe26K6w5b2V55uu5qCHaWTku6Xlj4rnm7jlr7nlupTnm67moIfnmoTkvY3nva5cbiAgICBwcml2YXRlIG5vZGVEcm9wVGFyZ2V0OiB7XG4gICAgICAgIHBvc2l0aW9uPzogVGh5VHJlZURyb3BQb3NpdGlvbjtcbiAgICAgICAga2V5PzogbnVtYmVyIHwgc3RyaW5nO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGRyb3BFbnRlclByZWRpY2F0ZT86IChjb250ZXh0OiB7IHNvdXJjZTogVGh5VHJlZU5vZGU7IHRhcmdldDogVGh5VHJlZU5vZGU7IGRyb3BQb3NpdGlvbjogVGh5VHJlZURyb3BQb3NpdGlvbiB9KSA9PiBib29sZWFuID1cbiAgICAgICAgY29udGV4dCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuaXNTaG93RXhwYW5kKGNvbnRleHQudGFyZ2V0KSB8fCAoIXRoaXMuaXNTaG93RXhwYW5kKGNvbnRleHQudGFyZ2V0KSAmJiBjb250ZXh0LmRyb3BQb3NpdGlvbiAhPT0gVGh5VHJlZURyb3BQb3NpdGlvbi5pbilcbiAgICAgICAgICAgICk7XG4gICAgICAgIH07XG5cbiAgICBwdWJsaWMgX3NlbGVjdGlvbk1vZGVsOiBTZWxlY3Rpb25Nb2RlbDxUaHlUcmVlTm9kZT47XG5cbiAgICBwdWJsaWMgZ2V0IHRyZWVOb2RlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh5VHJlZVNlcnZpY2UudHJlZU5vZGVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBmbGF0dGVuVHJlZU5vZGVzOiBUaHlUcmVlTm9kZVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiDomZrmi5/ljJbmu5rliqjnmoTop4blj6NcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgQFZpZXdDaGlsZCgndmlld3BvcnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgdmlld3BvcnQ6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcblxuICAgIC8qKlxuICAgICAqIFRyZWVOb2RlIOWxleeOsOaJgOmcgOeahOaVsOaNrlxuICAgICAqIEB0eXBlIFRoeVRyZWVOb2RlRGF0YVtdXG4gICAgICovXG4gICAgQElucHV0KCkgdGh5Tm9kZXM6IFRoeVRyZWVOb2RlRGF0YVtdO1xuXG4gICAgLyoqXG4gICAgICog6K6+572uIFRyZWVOb2RlIOaYr+WQpuaUr+aMgeWxleW8gFxuICAgICAqIEB0eXBlIGJvb2xlYW4gfCBGdW5jdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVNob3dFeHBhbmQ6IGJvb2xlYW4gfCAoKF86IFRoeVRyZWVOb2RlRGF0YSkgPT4gYm9vbGVhbikgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u5piv5ZCm5pSv5oyB5aSa6YCJ6IqC54K5XG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKGBjbGFzcy50aHktbXVsdGlwbGUtc2VsZWN0aW9uLWxpc3RgKVxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pXG4gICAgdGh5TXVsdGlwbGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9riBUcmVlTm9kZSDmmK/lkKbmlK/mjIHmi5bmi73mjpLluo9cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LXRyZWUtZHJhZ2dhYmxlJylcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KVxuICAgIHNldCB0aHlEcmFnZ2FibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZHJhZ2dhYmxlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IHRoeURyYWdnYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RyYWdnYWJsZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gVHJlZU5vZGUg5piv5ZCm5pSv5oyBIENoZWNrYm94IOmAieaLqVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5Q2hlY2thYmxlOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICog54K55Ye76IqC54K555qE6KGM5Li677yMYGRlZmF1bHRgIOS4uumAieS4reW9k+WJjeiKgueCue+8jGBzZWxlY3RDaGVja2JveGAg5Li66YCJ5Lit6IqC54K555qEIENoZWNrYm9477yMIGB0aHlDaGVja2FibGVgIOS4uiB0cnVlIOaXtueUn+aViOOAglxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUNsaWNrQmVoYXZpb3I6IFRoeUNsaWNrQmVoYXZpb3IgPSAnZGVmYXVsdCc7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gY2hlY2sg54q25oCB55qE6K6h566X562W55WlXG4gICAgICovXG4gICAgQElucHV0KCkgc2V0IHRoeUNoZWNrU3RhdGVSZXNvbHZlKHJlc29sdmU6IChub2RlOiBUaHlUcmVlTm9kZSkgPT4gVGh5VHJlZU5vZGVDaGVja1N0YXRlKSB7XG4gICAgICAgIGlmIChyZXNvbHZlKSB7XG4gICAgICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLnNldENoZWNrU3RhdGVSZXNvbHZlKHJlc29sdmUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog6K6+572uIFRyZWVOb2RlIOaYr+WQpuaUr+aMgeW8guatpeWKoOi9vVxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pIHRoeUFzeW5jID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF90aHlUeXBlOiBUaHlUcmVlVHlwZSA9ICdkZWZhdWx0JztcblxuICAgIC8qKlxuICAgICAqIOiuvue9ruS4jeWQjOWxleekuuexu+Wei+eahCBUcmVl77yMYGRlZmF1bHRgIOS4uuWwj+eureWktOWxleekuu+8jCBgZXNwZWNpYWxgIOS4uiDliqDlh4/lj7flm77moIflsZXnpLpcbiAgICAgKiBAdHlwZSBUaHlUcmVlVHlwZVxuICAgICAqIEBkZWZhdWx0IGRlZmF1bHRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlUeXBlKHR5cGU6IFRoeVRyZWVUeXBlKSB7XG4gICAgICAgIHRoaXMuX3RoeVR5cGUgPSB0eXBlO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ2VzcGVjaWFsJykge1xuICAgICAgICAgICAgdGhpcy50aHlJY29ucyA9IHsgZXhwYW5kOiAnbWludXMtc3F1YXJlJywgY29sbGFwc2U6ICdwbHVzLXNxdWFyZScgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCB0aHlUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGh5VHlwZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7kuI3lkIwgVHJlZSDlsZXlvIDmipjlj6DnmoTlm77moIfvvIxgZXhwYW5kYCDkuLrlsZXlvIDnirbmgIHnmoTlm77moIfvvIxgY29sbGFwc2VgIOS4uuaKmOWPoOeKtuaAgeeahOWbvuagh1xuICAgICAqIEB0eXBlIHsgZXhwYW5kOiBzdHJpbmcsIGNvbGxhcHNlOiBzdHJpbmcgfVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeUljb25zOiBUaHlUcmVlSWNvbnMgPSB7fTtcblxuICAgIHByaXZhdGUgX3RoeVNpemU6IFRoeVRyZWVTaXplID0gJ2RlZmF1bHQnO1xuICAgIC8qKlxuICAgICAqIOaUr+aMgSBgc21gIHwgYGRlZmF1bHRgIOS4pOenjeWkp+Wwj++8jOm7mOiupOWAvOS4uiBgZGVmYXVsdGBcbiAgICAgKiBAdHlwZSBUaHlUcmVlU2l6ZVxuICAgICAqIEBkZWZhdWx0IGRlZmF1bHRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0aHlTaXplKHNpemU6IFRoeVRyZWVTaXplKSB7XG4gICAgICAgIHRoaXMuX3RoeVNpemUgPSBzaXplO1xuICAgICAgICBpZiAodGhpcy5fdGh5U2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5fdGh5SXRlbVNpemUgPSB0cmVlSXRlbVNpemVNYXBbdGhpcy5fdGh5U2l6ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl90aHlJdGVtU2l6ZSA9IHRyZWVJdGVtU2l6ZU1hcC5kZWZhdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHRoeVNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aHlTaXplO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIOiuvue9ruaYr+WQpuW8gOWQr+iZmuaLn+a7muWKqFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MudGh5LXZpcnR1YWwtc2Nyb2xsaW5nLXRyZWUnKVxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQm9vbGVhblByb3BlcnR5IH0pXG4gICAgdGh5VmlydHVhbFNjcm9sbCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfdGh5SXRlbVNpemUgPSA0NDtcblxuICAgIC8qKlxuICAgICAqIOW8gOWQr+iZmuaLn+a7muWKqOaXtu+8jOWNleihjOiKgueCueeahOmrmOW6pu+8jOW9k2B0aHlTaXplYOS4umBkZWZhdWx0YOaXtu+8jOivpeWPguaVsOaJjeeUn+aViFxuICAgICAqIEBkZWZhdWx0IDQ0XG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSlcbiAgICBzZXQgdGh5SXRlbVNpemUoaXRlbVNpemU6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy50aHlTaXplICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0dGluZyB0aHlTaXplIGFuZCB0aHlJdGVtU2l6ZSBhdCB0aGUgc2FtZSB0aW1lIGlzIG5vdCBhbGxvd2VkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdGh5SXRlbVNpemUgPSBpdGVtU2l6ZTtcbiAgICB9XG5cbiAgICBnZXQgdGh5SXRlbVNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aHlJdGVtU2l6ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7oioLngrnlkI3np7DmmK/lkKbmlK/mjIHotoXlh7rmiKrlj5ZcbiAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSkgdGh5VGl0bGVUcnVuY2F0ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiDlt7LpgInkuK3nmoQgbm9kZSDoioLngrnpm4blkIhcbiAgICAgKiBAZGVmYXVsdCBbXVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHRoeVNlbGVjdGVkS2V5czogc3RyaW5nW107XG5cbiAgICAvKipcbiAgICAgKiDlsZXlvIDmjIflrprnmoTmoJHoioLngrlcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlFeHBhbmRlZEtleXM6IChzdHJpbmcgfCBudW1iZXIpW107XG5cbiAgICAvKipcbiAgICAgKiDmmK/lkKblsZXlvIDmiYDmnInmoJHoioLngrlcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9KSB0aHlFeHBhbmRBbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9rue8qei/m+i3neemu++8jOe8qei/m+i3neemuyA9IHRoeUluZGVudCAqIG5vZGUubGV2ZWxcbiAgICAgKiBAdHlwZSBudW1iZXJcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSB0aHlJbmRlbnQgPSAyNTtcblxuICAgIC8qKlxuICAgICAqIOaLluaLveS5i+WJjeeahOWbnuiwg++8jOWHveaVsOi/lOWbniBmYWxzZSDliJnpmLvmraLmi5bmi71cbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlCZWZvcmVEcmFnU3RhcnQ6IChjb250ZXh0OiBUaHlUcmVlQmVmb3JlRHJhZ1N0YXJ0Q29udGV4dCkgPT4gYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIOaLluaUvuWIsOWFg+e0oOaXtuWbnuiwg++8jOWHveaVsOi/lOWbniBmYWxzZSDliJnpmLvmraLmi5bmlL7liLDlvZPliY3lhYPntKBcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0aHlCZWZvcmVEcmFnRHJvcDogKGNvbnRleHQ6IFRoeVRyZWVCZWZvcmVEcmFnRHJvcENvbnRleHQpID0+IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lrZAgVHJlZU5vZGUg54K55Ye75LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uQ2xpY2s6IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIOiuvue9riBjaGVjayDpgInmi6nkuovku7ZcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGh5T25DaGVja2JveENoYW5nZTogRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6K6+572u54K55Ye75bGV5byA6Kem5Y+R5LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uRXhwYW5kQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGh5VHJlZUVtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiDorr7nva4gVHJlZU5vZGUg5ouW5ou95LqL5Lu2XG4gICAgICovXG4gICAgQE91dHB1dCgpIHRoeU9uRHJhZ0Ryb3A6IEV2ZW50RW1pdHRlcjxUaHlUcmVlRHJhZ0Ryb3BFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRoeVRyZWVEcmFnRHJvcEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog5Y+M5Ye7IFRyZWVOb2RlIOS6i+S7tlxuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0aHlEYmxDbGljazogRXZlbnRFbWl0dGVyPFRoeVRyZWVFbWl0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUaHlUcmVlRW1pdEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICog6K6+572uIFRyZWVOb2RlIOeahOa4suafk+aooeadv1xuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ3RyZWVOb2RlVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHNldCB0ZW1wbGF0ZVJlZih0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgICAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3RlbXBsYXRlUmVmID0gdGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgdGVtcGxhdGVSZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZVJlZjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDorr7nva7lrZDnmoTnqbrmlbDmja7muLLmn5PmqKHmnb9cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdlbXB0eUNoaWxkcmVuVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBlbXB0eUNoaWxkcmVuVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgc2V0IGVtcHR5Q2hpbGRyZW5UZW1wbGF0ZVJlZih0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pikge1xuICAgICAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtcHR5Q2hpbGRyZW5UZW1wbGF0ZVJlZiA9IHRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGVtcHR5Q2hpbGRyZW5UZW1wbGF0ZVJlZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VtcHR5Q2hpbGRyZW5UZW1wbGF0ZVJlZjtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRoeS10cmVlJylcbiAgICB0aHlUcmVlQ2xhc3MgPSB0cnVlO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy50aHktdHJlZS1kcmFnZ2luZycpXG4gICAgZHJhZ2dpbmc6IGJvb2xlYW47XG5cbiAgICBAVmlld0NoaWxkcmVuKENka0RyYWcpIGNka0RyYWdzOiBRdWVyeUxpc3Q8Q2RrRHJhZzxUaHlUcmVlTm9kZT4+O1xuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luaXRUaHlOb2RlcygpO1xuICAgICAgICB0aGlzLl9zZXRUcmVlVHlwZSgpO1xuICAgICAgICB0aGlzLl9zZXRUcmVlU2l6ZSgpO1xuICAgICAgICB0aGlzLl9pbnN0YW5jZVNlbGVjdGlvbk1vZGVsKCk7XG4gICAgICAgIHRoaXMuX3NlbGVjdFRyZWVOb2Rlcyh0aGlzLnRoeVNlbGVjdGVkS2V5cyk7XG5cbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5mbGF0dGVuTm9kZXMkLnN1YnNjcmliZShmbGF0dGVuVHJlZU5vZGVzID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmxhdHRlblRyZWVOb2RlcyA9IGZsYXR0ZW5UcmVlTm9kZXM7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNka0RyYWdzLmNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHN0YXJ0V2l0aCh0aGlzLmNka0RyYWdzKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZHJhZ3M6IFF1ZXJ5TGlzdDxDZGtEcmFnPFRoeVRyZWVOb2RlPj4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVEcmFnc01hcC5jbGVhcigpO1xuICAgICAgICAgICAgICAgIGRyYWdzLmZvckVhY2goZHJhZyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkcmFnLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNka0RyYWcg5Y+Y5YyW5pe277yM57yT5a2YIEVsZW1lbnQg5LiOIERyYWdSZWYg55qE5YWz57O777yM5pa55L6/IERyYWcgTW92ZSDml7bmn6Xmib5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZURyYWdzTWFwLnNldChkcmFnLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgZHJhZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubm9kZURyYWdNb3ZlZFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8gYXVkaXRUaW1lKDMwKSxcbiAgICAgICAgICAgICAgICAvLyAgYXVkaXRUaW1lIOWPr+iDveS8muWvvOiHtOaLluWKqOe7k+adn+WQjuS7jeeEtuaJp+ihjCBtb3ZlZCDvvIzmiYDku6XpgJrov4fliKTmlq0gZHJhZ2dpbmcg54q25oCB5p2l6L+H5ruk5peg5pWIIG1vdmVkXG4gICAgICAgICAgICAgICAgZmlsdGVyKChldmVudDogQ2RrRHJhZ01vdmUpID0+IGV2ZW50LnNvdXJjZS5fZHJhZ1JlZi5pc0RyYWdnaW5nKCkpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRyYWdNb3ZlZChldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLnRoeU5vZGVzICYmICFjaGFuZ2VzLnRoeU5vZGVzLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5faW5pdFRoeU5vZGVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMudGh5VHlwZSAmJiAhY2hhbmdlcy50aHlUeXBlLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0VHJlZVR5cGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy50aHlNdWx0aXBsZSAmJiAhY2hhbmdlcy50aHlNdWx0aXBsZS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlU2VsZWN0aW9uTW9kZWwoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLnRoeVNlbGVjdGVkS2V5cyAmJiAhY2hhbmdlcy50aHlTZWxlY3RlZEtleXMuaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEtleXMgPSBjaGFuZ2VzLnRoeVNlbGVjdGVkS2V5cy5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RUcmVlTm9kZXMoY2hhbmdlcy50aHlTZWxlY3RlZEtleXMuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLnRoeUV4cGFuZGVkS2V5cyAmJiAhY2hhbmdlcy50aHlFeHBhbmRlZEtleXMuaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVFeHBhbmRlZEtleXMoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy50aHlFeHBhbmRBbGwgJiYgIWNoYW5nZXMudGh5RXhwYW5kQWxsLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlRXhwYW5kZWRLZXlzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXJWaWV3ID0gKCkgPT4ge307XG5cbiAgICBldmVudFRyaWdnZXJDaGFuZ2VkKGV2ZW50OiBUaHlUcmVlRW1pdEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQuZXZlbnROYW1lKSB7XG4gICAgICAgICAgICBjYXNlICdleHBhbmQnOlxuICAgICAgICAgICAgICAgIHRoaXMudGh5T25FeHBhbmRDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ2NoZWNrYm94Q2hhbmdlJzpcbiAgICAgICAgICAgICAgICB0aGlzLnRoeU9uQ2hlY2tib3hDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbml0VGh5Tm9kZXMoKSB7XG4gICAgICAgIHRoaXMuX2V4cGFuZGVkS2V5cyA9IHRoaXMuZ2V0RXhwYW5kZWROb2RlcygpLm1hcChub2RlID0+IG5vZGUua2V5KTtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRLZXlzID0gdGhpcy5nZXRTZWxlY3RlZE5vZGVzKCkubWFwKG5vZGUgPT4gbm9kZS5rZXkpO1xuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmluaXRpYWxpemVUcmVlTm9kZXModGhpcy50aHlOb2Rlcyk7XG4gICAgICAgIHRoaXMuZmxhdHRlblRyZWVOb2RlcyA9IHRoaXMudGh5VHJlZVNlcnZpY2UuZmxhdHRlblRyZWVOb2RlcztcbiAgICAgICAgdGhpcy5fc2VsZWN0VHJlZU5vZGVzKHRoaXMuX3NlbGVjdGVkS2V5cyk7XG4gICAgICAgIHRoaXMuX2hhbmRsZUV4cGFuZGVkS2V5cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2hhbmRsZUV4cGFuZGVkS2V5cygpIHtcbiAgICAgICAgaWYgKHRoaXMudGh5RXhwYW5kZWRLZXlzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2V4cGFuZGVkS2V5cyA9IGhlbHBlcnMuY29uY2F0QXJyYXkoXG4gICAgICAgICAgICAgICAgdGhpcy50aHlFeHBhbmRlZEtleXMuZmlsdGVyKGtleSA9PiAhdGhpcy5fZXhwYW5kZWRLZXlzLmluY2x1ZGVzKGtleSkpLFxuICAgICAgICAgICAgICAgIHRoaXMuX2V4cGFuZGVkS2V5c1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmV4cGFuZFRyZWVOb2Rlcyh0aGlzLnRoeUV4cGFuZEFsbCB8fCB0aGlzLl9leHBhbmRlZEtleXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldFRyZWVUeXBlKCkge1xuICAgICAgICBpZiAodGhpcy50aHlUeXBlICYmIHRyZWVUeXBlQ2xhc3NNYXBbdGhpcy50aHlUeXBlXSkge1xuICAgICAgICAgICAgdHJlZVR5cGVDbGFzc01hcFt0aGlzLnRoeVR5cGVdLmZvckVhY2goY2xhc3NOYW1lID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvc3RSZW5kZXJlci5hZGRDbGFzcyhjbGFzc05hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRUcmVlU2l6ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMudGh5U2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5ob3N0UmVuZGVyZXIuYWRkQ2xhc3MoYHRoeS10cmVlLSR7dGhpcy50aHlTaXplfWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5zdGFuY2VTZWxlY3Rpb25Nb2RlbCgpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55Pih0aGlzLnRoeU11bHRpcGxlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZWxlY3RUcmVlTm9kZXMoa2V5czogKHN0cmluZyB8IG51bWJlcilbXSkge1xuICAgICAgICAoa2V5cyB8fCBbXSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMudGh5VHJlZVNlcnZpY2UuZ2V0VHJlZU5vZGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RUcmVlTm9kZSh0aGlzLnRoeVRyZWVTZXJ2aWNlLmdldFRyZWVOb2RlKGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkKG5vZGU6IFRoeVRyZWVOb2RlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKG5vZGUpO1xuICAgIH1cblxuICAgIHRvZ2dsZVRyZWVOb2RlKG5vZGU6IFRoeVRyZWVOb2RlKSB7XG4gICAgICAgIGlmIChub2RlICYmICFub2RlLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnRvZ2dsZShub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0ua2V5IHx8IGluZGV4O1xuICAgIH1cblxuICAgIGlzU2hvd0V4cGFuZChub2RlOiBUaHlUcmVlTm9kZSkge1xuICAgICAgICBpZiAoaGVscGVycy5pc0Z1bmN0aW9uKHRoaXMudGh5U2hvd0V4cGFuZCkpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy50aHlTaG93RXhwYW5kIGFzIEZ1bmN0aW9uKShub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRoeVNob3dFeHBhbmQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBUaHlUcmVlTm9kZURhdGFbXSk6IHZvaWQge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudGh5Tm9kZXMgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRUaHlOb2RlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydGVkKGV2ZW50OiBDZGtEcmFnU3RhcnQ8VGh5VHJlZU5vZGU+KSB7XG4gICAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0YXJ0RHJhZ05vZGVDbG9uZSA9IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50LnNvdXJjZS5kYXRhKTtcbiAgICAgICAgaWYgKGV2ZW50LnNvdXJjZS5kYXRhLmlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgIGV2ZW50LnNvdXJjZS5kYXRhLnNldEV4cGFuZGVkKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVtaXREcmFnTW92ZWQoZXZlbnQ6IENka0RyYWdNb3ZlKSB7XG4gICAgICAgIHRoaXMubm9kZURyYWdNb3ZlZC5uZXh0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbkRyYWdNb3ZlZChldmVudDogQ2RrRHJhZ01vdmU8VGh5VHJlZU5vZGU+KSB7XG4gICAgICAgIC8vIOmAmui/h+m8oOagh+S9jee9ruafpeaJvuWvueW6lOeahOebruaghyBJdGVtIOWFg+e0oFxuICAgICAgICBsZXQgY3VycmVudFBvaW50RWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChldmVudC5wb2ludGVyUG9zaXRpb24ueCwgZXZlbnQucG9pbnRlclBvc2l0aW9uLnkpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoIWN1cnJlbnRQb2ludEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYW51cERyYWdBcnRpZmFjdHMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdGFyZ2V0RWxlbWVudCA9IGN1cnJlbnRQb2ludEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCd0aHktdHJlZS1ub2RlJylcbiAgICAgICAgICAgID8gY3VycmVudFBvaW50RWxlbWVudFxuICAgICAgICAgICAgOiAoY3VycmVudFBvaW50RWxlbWVudC5jbG9zZXN0KCcudGh5LXRyZWUtbm9kZScpIGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKCF0YXJnZXRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXBEcmFnQXJ0aWZhY3RzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8g57yT5a2Y5pS+572u55uu5qCHSWQg5bm26K6h566X6byg5qCH55u45a+55bqU55qE5L2N572uXG4gICAgICAgIHRoaXMubm9kZURyb3BUYXJnZXQgPSB7XG4gICAgICAgICAgICBrZXk6IHRoaXMubm9kZURyYWdzTWFwLmdldCh0YXJnZXRFbGVtZW50KT8uZGF0YS5rZXksXG4gICAgICAgICAgICBwb3NpdGlvbjogdGhpcy5nZXRUYXJnZXRQb3NpdGlvbih0YXJnZXRFbGVtZW50LCBldmVudClcbiAgICAgICAgfTtcbiAgICAgICAgLy8g5omn6KGM5aSW6YOo5Lyg5YWl55qEIGRyb3BFbnRlclByZWRpY2F0ZSDliKTmlq3mmK/lkKblhYHorrjmi5blhaXnm67moIfpoblcbiAgICAgICAgaWYgKHRoaXMuZHJvcEVudGVyUHJlZGljYXRlKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXREcmFnUmVmID0gdGhpcy5ub2RlRHJhZ3NNYXAuZ2V0KHRhcmdldEVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuZHJvcEVudGVyUHJlZGljYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiBldmVudC5zb3VyY2UuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXREcmFnUmVmLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIGRyb3BQb3NpdGlvbjogdGhpcy5ub2RlRHJvcFRhcmdldC5wb3NpdGlvblxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dEcm9wUG9zaXRpb25QbGFjZWhvbGRlcih0YXJnZXRFbGVtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlRHJvcFRhcmdldCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ0FydGlmYWN0cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93RHJvcFBvc2l0aW9uUGxhY2Vob2xkZXIodGFyZ2V0RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRyYWdFbmRlZChldmVudDogQ2RrRHJhZ0VuZDxUaHlUcmVlTm9kZT4pIHtcbiAgICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICAvLyDmi5bmi73nu5PmnZ/lkI7mgaLlpI3ljp/lp4vnmoTlsZXlvIDnirbmgIFcbiAgICAgICAgZXZlbnQuc291cmNlLmRhdGEuc2V0RXhwYW5kZWQodGhpcy5zdGFydERyYWdOb2RlQ2xvbmUuaXNFeHBhbmRlZCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdGFydERyYWdOb2RlQ2xvbmUgPSBudWxsO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkxpc3REcm9wcGVkKGV2ZW50OiBDZGtEcmFnRHJvcDxUaHlUcmVlTm9kZVtdLCBUaHlUcmVlTm9kZVtdLCBUaHlUcmVlTm9kZT4pIHtcbiAgICAgICAgaWYgKCF0aGlzLm5vZGVEcm9wVGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmlzU2hvd0V4cGFuZCh0aGlzLnN0YXJ0RHJhZ05vZGVDbG9uZSkgJiYgdGhpcy5ub2RlRHJvcFRhcmdldC5wb3NpdGlvbiA9PT0gVGh5VHJlZURyb3BQb3NpdGlvbi5pbikge1xuICAgICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ0FydGlmYWN0cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc291cmNlTm9kZSA9IHRoaXMuc3RhcnREcmFnTm9kZUNsb25lO1xuICAgICAgICBjb25zdCBzb3VyY2VOb2RlUGFyZW50ID0gc291cmNlTm9kZS5wYXJlbnROb2RlO1xuICAgICAgICBjb25zdCB0YXJnZXREcmFnUmVmID0gdGhpcy5jZGtEcmFncy5maW5kKGl0ZW0gPT4gaXRlbS5kYXRhPy5rZXkgPT09IHRoaXMubm9kZURyb3BUYXJnZXQua2V5KTtcbiAgICAgICAgY29uc3QgdGFyZ2V0Tm9kZSA9IHRhcmdldERyYWdSZWY/LmRhdGE7XG4gICAgICAgIGNvbnN0IHRhcmdldE5vZGVQYXJlbnQgPSB0YXJnZXROb2RlLnBhcmVudE5vZGU7XG5cbiAgICAgICAgY29uc3QgYmVmb3JlRHJhZ0Ryb3BDb250ZXh0OiBUaHlUcmVlQmVmb3JlRHJhZ0Ryb3BDb250ZXh0ID0ge1xuICAgICAgICAgICAgcHJldmlvdXNJdGVtOiBzb3VyY2VOb2RlLFxuICAgICAgICAgICAgcHJldmlvdXNDb250YWluZXJJdGVtczogc291cmNlTm9kZVBhcmVudD8uY2hpbGRyZW4sXG4gICAgICAgICAgICBpdGVtOiB0YXJnZXROb2RlLFxuICAgICAgICAgICAgY29udGFpbmVySXRlbXM6IHRhcmdldE5vZGVQYXJlbnQ/LmNoaWxkcmVuLFxuICAgICAgICAgICAgcG9zaXRpb246IHRoaXMubm9kZURyb3BUYXJnZXQucG9zaXRpb25cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy50aHlCZWZvcmVEcmFnRHJvcCAmJiAhdGhpcy50aHlCZWZvcmVEcmFnRHJvcChiZWZvcmVEcmFnRHJvcENvbnRleHQpKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFudXBEcmFnQXJ0aWZhY3RzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmRlbGV0ZVRyZWVOb2RlKHNvdXJjZU5vZGUpO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy5ub2RlRHJvcFRhcmdldC5wb3NpdGlvbikge1xuICAgICAgICAgICAgY2FzZSAnYmVmb3JlJzpcbiAgICAgICAgICAgICAgICBjb25zdCBiZWZvcmVJbnNlcnRJbmRleCA9ICh0YXJnZXROb2RlUGFyZW50Py5jaGlsZHJlbiB8fCB0aGlzLnRyZWVOb2RlcykuaW5kZXhPZih0YXJnZXROb2RlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmFkZFRyZWVOb2RlKHNvdXJjZU5vZGUsIHRhcmdldE5vZGVQYXJlbnQsIGJlZm9yZUluc2VydEluZGV4KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2FmdGVyJzpcbiAgICAgICAgICAgICAgICBjb25zdCBhZnRlckluc2VydEluZGV4ID0gKHRhcmdldE5vZGVQYXJlbnQ/LmNoaWxkcmVuIHx8IHRoaXMudHJlZU5vZGVzKS5pbmRleE9mKHRhcmdldE5vZGUpICsgMTtcbiAgICAgICAgICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLmFkZFRyZWVOb2RlKHNvdXJjZU5vZGUsIHRhcmdldE5vZGVQYXJlbnQsIGFmdGVySW5zZXJ0SW5kZXgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaW4nOlxuICAgICAgICAgICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2UuYWRkVHJlZU5vZGUoc291cmNlTm9kZSwgdGFyZ2V0Tm9kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLnN5bmNGbGF0dGVuVHJlZU5vZGVzKCk7XG5cbiAgICAgICAgbGV0IGFmdGVyOiBUaHlUcmVlTm9kZSA9IG51bGw7XG4gICAgICAgIGxldCB0YXJnZTogVGh5VHJlZU5vZGUgPSBudWxsO1xuICAgICAgICBpZiAoYmVmb3JlRHJhZ0Ryb3BDb250ZXh0LnBvc2l0aW9uID09PSBUaHlUcmVlRHJvcFBvc2l0aW9uLmJlZm9yZSkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0Q29udGFpbmVyTm9kZXMgPSB0YXJnZXROb2RlUGFyZW50Py5jaGlsZHJlbiB8fCB0aGlzLnRyZWVOb2RlcztcbiAgICAgICAgICAgIGFmdGVyID0gdGFyZ2V0Q29udGFpbmVyTm9kZXNbdGFyZ2V0Q29udGFpbmVyTm9kZXMuaW5kZXhPZih0YXJnZXROb2RlKSAtIDJdO1xuICAgICAgICAgICAgdGFyZ2UgPSB0YXJnZXROb2RlUGFyZW50O1xuICAgICAgICB9IGVsc2UgaWYgKGJlZm9yZURyYWdEcm9wQ29udGV4dC5wb3NpdGlvbiA9PT0gVGh5VHJlZURyb3BQb3NpdGlvbi5hZnRlcikge1xuICAgICAgICAgICAgYWZ0ZXIgPSB0YXJnZXROb2RlO1xuICAgICAgICAgICAgdGFyZ2UgPSB0YXJnZXROb2RlUGFyZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWZ0ZXIgPSB0YXJnZXROb2RlLmNoaWxkcmVuPy5sZW5ndGggPiAwID8gdGFyZ2V0Tm9kZS5jaGlsZHJlblt0YXJnZXROb2RlLmNoaWxkcmVuLmxlbmd0aCAtIDJdIDogbnVsbDtcbiAgICAgICAgICAgIHRhcmdlID0gdGFyZ2V0Tm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGh5T25EcmFnRHJvcC5lbWl0KHtcbiAgICAgICAgICAgIGRyYWdOb2RlOiB0aGlzLnRoeVRyZWVTZXJ2aWNlLmdldFRyZWVOb2RlKHNvdXJjZU5vZGUua2V5KSxcbiAgICAgICAgICAgIHRhcmdldE5vZGU6IHRhcmdlLFxuICAgICAgICAgICAgYWZ0ZXJOb2RlOiBhZnRlclxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNsZWFudXBEcmFnQXJ0aWZhY3RzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUYXJnZXRQb3NpdGlvbih0YXJnZXQ6IEhUTUxFbGVtZW50LCBldmVudDogQ2RrRHJhZ01vdmUpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0UmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgYmVmb3JlT3JBZnRlckdhcCA9IHRhcmdldFJlY3QuaGVpZ2h0ICogMC4zO1xuICAgICAgICAvLyDlsIYgTm9kZSDpq5jluqbliIbkuLrkuIrkuK3kuIvkuInmrrXvvIzlhbbkuK3kuIrkuIvnmoQgR2FwIOS4uiBoZWlnaHQg55qEIDMwJe+8jOmAmui/h+WIpOaWrem8oOagh+S9jee9ruWcqOWTquS4gOautSBnYXAg5p2l6K6h566X5a+55bqU55qE5L2N572uXG4gICAgICAgIGlmIChldmVudC5wb2ludGVyUG9zaXRpb24ueSAtIHRhcmdldFJlY3QudG9wIDwgYmVmb3JlT3JBZnRlckdhcCkge1xuICAgICAgICAgICAgcmV0dXJuIFRoeVRyZWVEcm9wUG9zaXRpb24uYmVmb3JlO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnBvaW50ZXJQb3NpdGlvbi55ID49IHRhcmdldFJlY3QuYm90dG9tIC0gYmVmb3JlT3JBZnRlckdhcCkge1xuICAgICAgICAgICAgcmV0dXJuIFRoeVRyZWVEcm9wUG9zaXRpb24uYWZ0ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gVGh5VHJlZURyb3BQb3NpdGlvbi5pbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd0Ryb3BQb3NpdGlvblBsYWNlaG9sZGVyKHRhcmdldEVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuY2xlYW51cERyb3BQb3NpdGlvblBsYWNlaG9sZGVyKCk7XG4gICAgICAgIGlmICh0aGlzLm5vZGVEcm9wVGFyZ2V0ICYmIHRhcmdldEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRhcmdldEVsZW1lbnQuY2xhc3NMaXN0LmFkZChgZHJvcC1wb3NpdGlvbi0ke3RoaXMubm9kZURyb3BUYXJnZXQucG9zaXRpb259YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFudXBEcm9wUG9zaXRpb25QbGFjZWhvbGRlcigpIHtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZHJvcC1wb3NpdGlvbi1iZWZvcmUnKS5mb3JFYWNoKGVsZW1lbnQgPT4gZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkcm9wLXBvc2l0aW9uLWJlZm9yZScpKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZHJvcC1wb3NpdGlvbi1hZnRlcicpLmZvckVhY2goZWxlbWVudCA9PiBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2Ryb3AtcG9zaXRpb24tYWZ0ZXInKSk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRyb3AtcG9zaXRpb24taW4nKS5mb3JFYWNoKGVsZW1lbnQgPT4gZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkcm9wLXBvc2l0aW9uLWluJykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYW51cERyYWdBcnRpZmFjdHMoKSB7XG4gICAgICAgIHRoaXMubm9kZURyb3BUYXJnZXQgPSBudWxsO1xuICAgICAgICB0aGlzLmNsZWFudXBEcm9wUG9zaXRpb25QbGFjZWhvbGRlcigpO1xuICAgIH1cblxuICAgIC8vIHJlZ2lvbiBQdWJsaWMgRnVuY3Rpb25zXG5cbiAgICBzZWxlY3RUcmVlTm9kZShub2RlOiBUaHlUcmVlTm9kZSkge1xuICAgICAgICBpZiAobm9kZSAmJiAhbm9kZS5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3Qobm9kZSk7XG4gICAgICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLnN5bmNGbGF0dGVuVHJlZU5vZGVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRSb290Tm9kZXMoKTogVGh5VHJlZU5vZGVbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVOb2RlcztcbiAgICB9XG5cbiAgICBnZXRUcmVlTm9kZShrZXk6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy50aHlUcmVlU2VydmljZS5nZXRUcmVlTm9kZShrZXkpO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGVkTm9kZSgpOiBUaHlUcmVlTm9kZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25Nb2RlbCA/IHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkWzBdIDogbnVsbDtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZE5vZGVzKCk6IFRoeVRyZWVOb2RlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZWwgPyB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZCA6IFtdO1xuICAgIH1cblxuICAgIGdldEV4cGFuZGVkTm9kZXMoKTogVGh5VHJlZU5vZGVbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoeVRyZWVTZXJ2aWNlLmdldEV4cGFuZGVkTm9kZXMoKTtcbiAgICB9XG5cbiAgICBnZXRDaGVja2VkTm9kZXMoKTogVGh5VHJlZU5vZGVbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRoeVRyZWVTZXJ2aWNlLmdldENoZWNrZWROb2RlcygpO1xuICAgIH1cblxuICAgIGFkZFRyZWVOb2RlKG5vZGU6IFRoeVRyZWVOb2RlRGF0YSwgcGFyZW50PzogVGh5VHJlZU5vZGUsIGluZGV4ID0gLTEpIHtcbiAgICAgICAgdGhpcy50aHlUcmVlU2VydmljZS5hZGRUcmVlTm9kZShuZXcgVGh5VHJlZU5vZGUobm9kZSwgbnVsbCwgdGhpcy50aHlUcmVlU2VydmljZSksIHBhcmVudCwgaW5kZXgpO1xuICAgICAgICB0aGlzLnRoeVRyZWVTZXJ2aWNlLnN5bmNGbGF0dGVuVHJlZU5vZGVzKCk7XG4gICAgfVxuXG4gICAgZGVsZXRlVHJlZU5vZGUobm9kZTogVGh5VHJlZU5vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZChub2RlKSkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwudG9nZ2xlKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2UuZGVsZXRlVHJlZU5vZGUobm9kZSk7XG4gICAgICAgIHRoaXMudGh5VHJlZVNlcnZpY2Uuc3luY0ZsYXR0ZW5UcmVlTm9kZXMoKTtcbiAgICB9XG5cbiAgICBleHBhbmRBbGxOb2RlcygpIHtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLmdldFJvb3ROb2RlcygpO1xuICAgICAgICBub2Rlcy5mb3JFYWNoKG4gPT4gbi5zZXRFeHBhbmRlZCh0cnVlLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgY29sbGFwc2VkQWxsTm9kZXMoKSB7XG4gICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5nZXRSb290Tm9kZXMoKTtcbiAgICAgICAgbm9kZXMuZm9yRWFjaChuID0+IG4uc2V0RXhwYW5kZWQoZmFsc2UsIHRydWUpKTtcbiAgICB9XG5cbiAgICAvLyBlbmRyZWdpb25cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cbn1cbiIsIkBpZiAodGh5VmlydHVhbFNjcm9sbCkge1xuICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgI3ZpZXdwb3J0XG4gICAgW2l0ZW1TaXplXT1cInRoeUl0ZW1TaXplXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cIicxMDAlJ1wiXG4gICAgY2RrRHJvcExpc3RcbiAgICBbY2RrRHJvcExpc3RBdXRvU2Nyb2xsU3RlcF09XCI2XCJcbiAgICBbY2RrRHJvcExpc3REYXRhXT1cImZsYXR0ZW5UcmVlTm9kZXNcIlxuICAgIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uTGlzdERyb3BwZWQoJGV2ZW50KVwiXG4gICAgPlxuICAgIDxkaXYgY2xhc3M9XCJ2aXJ0dWFsLXRyZWVzLWNvbnRhaW5lclwiPlxuICAgICAgPHRoeS10cmVlLW5vZGVcbiAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJsZXQgbm9kZSBvZiBmbGF0dGVuVHJlZU5vZGVzOyB0cmFja0J5OiB0cmFja0J5Rm47IGxldCBpID0gaW5kZXhcIlxuICAgICAgICBjZGtEcmFnXG4gICAgICAgIFtjZGtEcmFnRGF0YV09XCJub2RlXCJcbiAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCIhdGh5RHJhZ2dhYmxlIHx8ICEobm9kZSB8IHRyZWVOb2RlRHJhZ2dhYmxlIDogdGh5QmVmb3JlRHJhZ1N0YXJ0KVwiXG4gICAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJvbkRyYWdTdGFydGVkKCRldmVudClcIlxuICAgICAgICAoY2RrRHJhZ0VuZGVkKT1cIm9uRHJhZ0VuZGVkKCRldmVudClcIlxuICAgICAgICAoY2RrRHJhZ01vdmVkKT1cImVtaXREcmFnTW92ZWQoJGV2ZW50KVwiXG4gICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICBbdGVtcGxhdGVSZWZdPVwidGVtcGxhdGVSZWZcIlxuICAgICAgICBbZW1wdHlDaGlsZHJlblRlbXBsYXRlUmVmXT1cImVtcHR5Q2hpbGRyZW5UZW1wbGF0ZVwiXG4gICAgICAgIFt0aHlBc3luY109XCJ0aHlBc3luY1wiXG4gICAgICAgIFt0aHlEcmFnZ2FibGVdPVwidGh5RHJhZ2dhYmxlXCJcbiAgICAgICAgW3RoeUNoZWNrYWJsZV09XCJ0aHlDaGVja2FibGVcIlxuICAgICAgICBbdGh5TXVsdGlwbGVdPVwidGh5TXVsdGlwbGVcIlxuICAgICAgICBbdGh5Q2xpY2tCZWhhdmlvcl09XCJ0aHlDbGlja0JlaGF2aW9yXCJcbiAgICAgICAgW3RoeVRpdGxlVHJ1bmNhdGVdPVwidGh5VGl0bGVUcnVuY2F0ZVwiXG4gICAgICAgIFt0aHlJdGVtU2l6ZV09XCJ0aHlJdGVtU2l6ZVwiXG4gICAgICAgIFt0aHlJbmRlbnRdPVwidGh5SW5kZW50XCJcbiAgICAgICAgKHRoeU9uQ2xpY2spPVwidGh5T25DbGljay5lbWl0KCRldmVudClcIlxuICAgICAgICAodGh5RGJsQ2xpY2spPVwidGh5RGJsQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKHRoeU9uRXhwYW5kQ2hhbmdlKT1cImV2ZW50VHJpZ2dlckNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICh0aHlPbkNoZWNrYm94Q2hhbmdlKT1cImV2ZW50VHJpZ2dlckNoYW5nZWQoJGV2ZW50KVwiPlxuICAgICAgPC90aHktdHJlZS1ub2RlPlxuICAgIDwvZGl2PlxuICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbn1cblxuQGlmICghdGh5VmlydHVhbFNjcm9sbCkge1xuICA8ZGl2XG4gICAgY2RrRHJvcExpc3RcbiAgICBbY2RrRHJvcExpc3RBdXRvU2Nyb2xsU3RlcF09XCI2XCJcbiAgICBbY2RrRHJvcExpc3REYXRhXT1cImZsYXR0ZW5UcmVlTm9kZXNcIlxuICAgIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uTGlzdERyb3BwZWQoJGV2ZW50KVwiPlxuICAgIEBmb3IgKG5vZGUgb2YgZmxhdHRlblRyZWVOb2RlczsgdHJhY2sgdHJhY2tCeUZuKGksIG5vZGUpOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgPHRoeS10cmVlLW5vZGVcbiAgICAgICAgY2RrRHJhZ1xuICAgICAgICBbY2RrRHJhZ0RhdGFdPVwibm9kZVwiXG4gICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiIXRoeURyYWdnYWJsZSB8fCAhKG5vZGUgfCB0cmVlTm9kZURyYWdnYWJsZSA6IHRoeUJlZm9yZURyYWdTdGFydClcIlxuICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAgICAgKGNka0RyYWdFbmRlZCk9XCJvbkRyYWdFbmRlZCgkZXZlbnQpXCJcbiAgICAgICAgKGNka0RyYWdNb3ZlZCk9XCJlbWl0RHJhZ01vdmVkKCRldmVudClcIlxuICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgW3RlbXBsYXRlUmVmXT1cInRlbXBsYXRlUmVmXCJcbiAgICAgICAgW2VtcHR5Q2hpbGRyZW5UZW1wbGF0ZVJlZl09XCJlbXB0eUNoaWxkcmVuVGVtcGxhdGVcIlxuICAgICAgICBbdGh5QXN5bmNdPVwidGh5QXN5bmNcIlxuICAgICAgICBbdGh5RHJhZ2dhYmxlXT1cInRoeURyYWdnYWJsZVwiXG4gICAgICAgIFt0aHlDaGVja2FibGVdPVwidGh5Q2hlY2thYmxlXCJcbiAgICAgICAgW3RoeU11bHRpcGxlXT1cInRoeU11bHRpcGxlXCJcbiAgICAgICAgW3RoeVRpdGxlVHJ1bmNhdGVdPVwidGh5VGl0bGVUcnVuY2F0ZVwiXG4gICAgICAgIFt0aHlJdGVtU2l6ZV09XCJ0aHlJdGVtU2l6ZVwiXG4gICAgICAgIFt0aHlDbGlja0JlaGF2aW9yXT1cInRoeUNsaWNrQmVoYXZpb3JcIlxuICAgICAgICBbdGh5SW5kZW50XT1cInRoeUluZGVudFwiXG4gICAgICAgICh0aHlPbkNsaWNrKT1cInRoeU9uQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKHRoeURibENsaWNrKT1cInRoeURibENsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICh0aHlPbkV4cGFuZENoYW5nZSk9XCJldmVudFRyaWdnZXJDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAodGh5T25DaGVja2JveENoYW5nZSk9XCJ0aHlPbkNoZWNrYm94Q2hhbmdlLmVtaXQoJGV2ZW50KVwiPlxuICAgICAgPC90aHktdHJlZS1ub2RlPlxuICAgIH1cbiAgPC9kaXY+XG59XG4iXX0=
|