@recursyve/nice-ui-kit.v2 17.0.0-beta.140 → 20.0.0-beta.145
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_index.scss +2 -2
- package/fesm2022/recursyve-nice-ui-kit.v2.mjs +1019 -804
- package/fesm2022/recursyve-nice-ui-kit.v2.mjs.map +1 -1
- package/index.d.ts +3664 -3
- package/package.json +8 -10
- package/src/lib/components/base-form/base-form.theme.scss +5 -4
- package/src/lib/components/chip-list/chip-list.theme.scss +2 -2
- package/src/lib/components/date-range-picker/date-range-picker.theme.scss +7 -6
- package/src/lib/components/horizontal-stepper/horizontal-stepper.theme.scss +5 -4
- package/src/lib/components/navigation/vertical/vertical.theme.scss +8 -8
- package/src/lib/components/toggle-button-group/toggle-button-group.theme.scss +11 -10
- package/src/lib/nice.theme.scss +77 -85
- package/src/lib/nice.utils.scss +3 -1
- package/styles/main.scss +4 -4
- package/styles/nice.scss +3 -1
- package/styles/overrides/angular-material.scss +3 -3
- package/esm2022/lib/animations/defaults.mjs +0 -32
- package/esm2022/lib/animations/expand-collapse.mjs +0 -21
- package/esm2022/lib/animations/fade.mjs +0 -210
- package/esm2022/lib/animations/index.mjs +0 -2
- package/esm2022/lib/animations/public-api.mjs +0 -17
- package/esm2022/lib/animations/shake.mjs +0 -63
- package/esm2022/lib/animations/slide.mjs +0 -156
- package/esm2022/lib/animations/zoom.mjs +0 -46
- package/esm2022/lib/api/exceptions/api.exception.mjs +0 -3
- package/esm2022/lib/api/exceptions/exception.factory.mjs +0 -9
- package/esm2022/lib/api/index.mjs +0 -2
- package/esm2022/lib/api/interceptors/transform-response.interceptor.mjs +0 -28
- package/esm2022/lib/api/nice.api.mjs +0 -68
- package/esm2022/lib/api/public-api.mjs +0 -5
- package/esm2022/lib/components/alert/alert.component.mjs +0 -200
- package/esm2022/lib/components/alert/alert.module.mjs +0 -32
- package/esm2022/lib/components/alert/alert.service.mjs +0 -58
- package/esm2022/lib/components/alert/alert.types.mjs +0 -2
- package/esm2022/lib/components/alert/index.mjs +0 -2
- package/esm2022/lib/components/alert/public-api.mjs +0 -5
- package/esm2022/lib/components/assets-carousel/assets-carousel.component.mjs +0 -283
- package/esm2022/lib/components/assets-carousel/assets-carousel.constant.mjs +0 -3
- package/esm2022/lib/components/assets-carousel/assets-carousel.module.mjs +0 -88
- package/esm2022/lib/components/assets-carousel/directives/assets-carousel-active-content.directive.mjs +0 -14
- package/esm2022/lib/components/assets-carousel/index.mjs +0 -2
- package/esm2022/lib/components/assets-carousel/public-api.mjs +0 -4
- package/esm2022/lib/components/async-typeahead/async-typeahead.component.mjs +0 -453
- package/esm2022/lib/components/async-typeahead/async-typeahead.constant.mjs +0 -3
- package/esm2022/lib/components/async-typeahead/async-typeahead.module.mjs +0 -64
- package/esm2022/lib/components/async-typeahead/index.mjs +0 -2
- package/esm2022/lib/components/async-typeahead/providers/async-typeahead.provider.mjs +0 -6
- package/esm2022/lib/components/async-typeahead/providers/async-typeahead.service.mjs +0 -219
- package/esm2022/lib/components/async-typeahead/public-api.mjs +0 -5
- package/esm2022/lib/components/base-form/base-form.component.mjs +0 -91
- package/esm2022/lib/components/base-form/base-form.module.mjs +0 -16
- package/esm2022/lib/components/base-form/form-submit.directive.mjs +0 -20
- package/esm2022/lib/components/base-form/index.mjs +0 -2
- package/esm2022/lib/components/base-form/nice-base.form.mjs +0 -14
- package/esm2022/lib/components/base-form/public-api.mjs +0 -5
- package/esm2022/lib/components/card/card.component.mjs +0 -60
- package/esm2022/lib/components/card/card.module.mjs +0 -24
- package/esm2022/lib/components/card/card.types.mjs +0 -2
- package/esm2022/lib/components/card/index.mjs +0 -2
- package/esm2022/lib/components/card/public-api.mjs +0 -3
- package/esm2022/lib/components/carousel/carousel.component.mjs +0 -43
- package/esm2022/lib/components/carousel/carousel.module.mjs +0 -40
- package/esm2022/lib/components/carousel/index.mjs +0 -2
- package/esm2022/lib/components/carousel/picture-modal/index.mjs +0 -2
- package/esm2022/lib/components/carousel/picture-modal/picture-modal.component.mjs +0 -11
- package/esm2022/lib/components/carousel/picture-modal/picture-modal.service.mjs +0 -34
- package/esm2022/lib/components/carousel/picture-modal/public-api.mjs +0 -3
- package/esm2022/lib/components/carousel/pipe/carousel-layout.pipe.mjs +0 -17
- package/esm2022/lib/components/carousel/public-api.mjs +0 -4
- package/esm2022/lib/components/collapsable/collapsable.component.mjs +0 -36
- package/esm2022/lib/components/collapsable/collapsable.module.mjs +0 -25
- package/esm2022/lib/components/collapsable/index.mjs +0 -2
- package/esm2022/lib/components/collapsable/public-api.mjs +0 -3
- package/esm2022/lib/components/date-range-picker/components/header/header.component.mjs +0 -57
- package/esm2022/lib/components/date-range-picker/components/range-preset/range-preset.component.mjs +0 -107
- package/esm2022/lib/components/date-range-picker/date-range-picker.component.mjs +0 -95
- package/esm2022/lib/components/date-range-picker/date-range-picker.module.mjs +0 -56
- package/esm2022/lib/components/date-range-picker/index.mjs +0 -2
- package/esm2022/lib/components/date-range-picker/providers/date-range-picker.service.mjs +0 -17
- package/esm2022/lib/components/date-range-picker/public-api.mjs +0 -3
- package/esm2022/lib/components/drawer/drawer.component.mjs +0 -372
- package/esm2022/lib/components/drawer/drawer.module.mjs +0 -28
- package/esm2022/lib/components/drawer/drawer.service.mjs +0 -40
- package/esm2022/lib/components/drawer/drawer.types.mjs +0 -2
- package/esm2022/lib/components/drawer/index.mjs +0 -2
- package/esm2022/lib/components/drawer/public-api.mjs +0 -5
- package/esm2022/lib/components/export-bottom-sheet/export-bottom-sheet.component.mjs +0 -33
- package/esm2022/lib/components/export-bottom-sheet/export-bottom-sheet.module.mjs +0 -45
- package/esm2022/lib/components/export-bottom-sheet/index.mjs +0 -2
- package/esm2022/lib/components/export-bottom-sheet/models/export-strategy.model.mjs +0 -2
- package/esm2022/lib/components/export-bottom-sheet/providers/export-bottom-sheet.service.mjs +0 -28
- package/esm2022/lib/components/export-bottom-sheet/public-api.mjs +0 -5
- package/esm2022/lib/components/form-error/control-status.directive.mjs +0 -123
- package/esm2022/lib/components/form-error/form-error.component.mjs +0 -53
- package/esm2022/lib/components/form-error/form-error.module.mjs +0 -20
- package/esm2022/lib/components/form-error/index.mjs +0 -2
- package/esm2022/lib/components/form-error/public-api.mjs +0 -4
- package/esm2022/lib/components/horizontal-stepper/horizontal-stepper.component.mjs +0 -34
- package/esm2022/lib/components/horizontal-stepper/horizontal-stepper.module.mjs +0 -29
- package/esm2022/lib/components/horizontal-stepper/index.mjs +0 -2
- package/esm2022/lib/components/horizontal-stepper/public-api.mjs +0 -4
- package/esm2022/lib/components/horizontal-stepper/step.component.mjs +0 -22
- package/esm2022/lib/components/image-cropper/image-cropper.component.mjs +0 -1269
- package/esm2022/lib/components/image-cropper/image-cropper.module.mjs +0 -23
- package/esm2022/lib/components/image-cropper/index.mjs +0 -2
- package/esm2022/lib/components/image-cropper/public-api.mjs +0 -3
- package/esm2022/lib/components/image-cropper/resize-canvas.mjs +0 -76
- package/esm2022/lib/components/index.mjs +0 -2
- package/esm2022/lib/components/layout/index.mjs +0 -2
- package/esm2022/lib/components/layout/layout.component.mjs +0 -98
- package/esm2022/lib/components/layout/layout.module.mjs +0 -18
- package/esm2022/lib/components/layout/public-api.mjs +0 -3
- package/esm2022/lib/components/loading-spinner/index.mjs +0 -2
- package/esm2022/lib/components/loading-spinner/loading-spinner.component.mjs +0 -22
- package/esm2022/lib/components/loading-spinner/loading-spinner.module.mjs +0 -48
- package/esm2022/lib/components/loading-spinner/loading.constant.mjs +0 -3
- package/esm2022/lib/components/loading-spinner/loading.directive.mjs +0 -56
- package/esm2022/lib/components/loading-spinner/public-api.mjs +0 -4
- package/esm2022/lib/components/loading-toast/index.mjs +0 -2
- package/esm2022/lib/components/loading-toast/loading-toast.component.mjs +0 -38
- package/esm2022/lib/components/loading-toast/loading-toast.constant.mjs +0 -3
- package/esm2022/lib/components/loading-toast/loading-toast.directive.mjs +0 -64
- package/esm2022/lib/components/loading-toast/loading-toast.module.mjs +0 -62
- package/esm2022/lib/components/loading-toast/loading-toast.service.mjs +0 -47
- package/esm2022/lib/components/loading-toast/public-api.mjs +0 -6
- package/esm2022/lib/components/loading-toast/rxjs/show-loading-toast.operator.mjs +0 -12
- package/esm2022/lib/components/lottie/index.mjs +0 -2
- package/esm2022/lib/components/lottie/lottie.component.mjs +0 -52
- package/esm2022/lib/components/lottie/lottie.module.mjs +0 -18
- package/esm2022/lib/components/lottie/public-api.mjs +0 -3
- package/esm2022/lib/components/navigation/components/hint-component-base.mjs +0 -120
- package/esm2022/lib/components/navigation/directives/show-hint.directive.mjs +0 -187
- package/esm2022/lib/components/navigation/horizontal/components/basic/basic.component.mjs +0 -62
- package/esm2022/lib/components/navigation/horizontal/components/branch/branch.component.mjs +0 -80
- package/esm2022/lib/components/navigation/horizontal/components/divider/divider.component.mjs +0 -51
- package/esm2022/lib/components/navigation/horizontal/components/spacer/spacer.component.mjs +0 -51
- package/esm2022/lib/components/navigation/horizontal/horizontal.component.mjs +0 -50
- package/esm2022/lib/components/navigation/index.mjs +0 -2
- package/esm2022/lib/components/navigation/navigation.component.mjs +0 -83
- package/esm2022/lib/components/navigation/navigation.module.mjs +0 -108
- package/esm2022/lib/components/navigation/navigation.service.mjs +0 -188
- package/esm2022/lib/components/navigation/navigation.types.mjs +0 -2
- package/esm2022/lib/components/navigation/pipes/should-hide.pipe.mjs +0 -31
- package/esm2022/lib/components/navigation/pipes/should-show-hint.pipe.mjs +0 -32
- package/esm2022/lib/components/navigation/pipes/translate-with-context.pipe.mjs +0 -25
- package/esm2022/lib/components/navigation/providers/hide-item.resolver.mjs +0 -3
- package/esm2022/lib/components/navigation/providers/hint.resolver.mjs +0 -3
- package/esm2022/lib/components/navigation/providers/hint.service.mjs +0 -20
- package/esm2022/lib/components/navigation/providers/translation-context.service.mjs +0 -16
- package/esm2022/lib/components/navigation/public-api.mjs +0 -20
- package/esm2022/lib/components/navigation/vertical/components/aside/aside.component.mjs +0 -145
- package/esm2022/lib/components/navigation/vertical/components/basic/basic.component.mjs +0 -76
- package/esm2022/lib/components/navigation/vertical/components/collapsable/collapsable.component.mjs +0 -264
- package/esm2022/lib/components/navigation/vertical/components/divider/divider.component.mjs +0 -51
- package/esm2022/lib/components/navigation/vertical/components/group/group.component.mjs +0 -75
- package/esm2022/lib/components/navigation/vertical/components/spacer/spacer.component.mjs +0 -51
- package/esm2022/lib/components/navigation/vertical/vertical.component.mjs +0 -599
- package/esm2022/lib/components/public-api.mjs +0 -25
- package/esm2022/lib/components/search-bar/index.mjs +0 -2
- package/esm2022/lib/components/search-bar/public-api.mjs +0 -3
- package/esm2022/lib/components/search-bar/search-bar.component.mjs +0 -76
- package/esm2022/lib/components/search-bar/search-bar.module.mjs +0 -40
- package/esm2022/lib/components/sweet-alert/index.mjs +0 -2
- package/esm2022/lib/components/sweet-alert/public-api.mjs +0 -5
- package/esm2022/lib/components/sweet-alert/sweet-alert.component.mjs +0 -59
- package/esm2022/lib/components/sweet-alert/sweet-alert.constant.mjs +0 -3
- package/esm2022/lib/components/sweet-alert/sweet-alert.directive.mjs +0 -37
- package/esm2022/lib/components/sweet-alert/sweet-alert.module.mjs +0 -37
- package/esm2022/lib/components/sweet-alert/sweet-alert.service.mjs +0 -95
- package/esm2022/lib/components/toast/index.mjs +0 -2
- package/esm2022/lib/components/toast/public-api.mjs +0 -6
- package/esm2022/lib/components/toast/rxjs/show-success-or-error-toast.operator.mjs +0 -22
- package/esm2022/lib/components/toast/rxjs/show-toast.operator.mjs +0 -26
- package/esm2022/lib/components/toast/toast.component.mjs +0 -25
- package/esm2022/lib/components/toast/toast.constant.mjs +0 -3
- package/esm2022/lib/components/toast/toast.module.mjs +0 -57
- package/esm2022/lib/components/toast/toast.service.mjs +0 -65
- package/esm2022/lib/components/toggle-button-group/index.mjs +0 -2
- package/esm2022/lib/components/toggle-button-group/public-api.mjs +0 -4
- package/esm2022/lib/components/toggle-button-group/toggle-button-group.component.mjs +0 -134
- package/esm2022/lib/components/toggle-button-group/toggle-button-group.module.mjs +0 -26
- package/esm2022/lib/components/toggle-button-group/toggle-button.component.mjs +0 -19
- package/esm2022/lib/components/translation-form/components/textarea/translation-form-textarea.component.mjs +0 -38
- package/esm2022/lib/components/translation-form/components/textfield/translation-form-textfield.component.mjs +0 -26
- package/esm2022/lib/components/translation-form/components/translation-form.component.mjs +0 -172
- package/esm2022/lib/components/translation-form/components/translation-form.module.mjs +0 -71
- package/esm2022/lib/components/translation-form/decorators/translation-form-group.decorator.mjs +0 -4
- package/esm2022/lib/components/translation-form/directives/translation-context.directive.mjs +0 -40
- package/esm2022/lib/components/translation-form/index.mjs +0 -2
- package/esm2022/lib/components/translation-form/providers/nice-translation-form.service.mjs +0 -59
- package/esm2022/lib/components/translation-form/public-api.mjs +0 -11
- package/esm2022/lib/components/translation-form/toggle/translation-toggle.component.mjs +0 -26
- package/esm2022/lib/components/translation-form/translation.form.mjs +0 -6
- package/esm2022/lib/components/translation-form/validators/require-for-languages.validator.mjs +0 -43
- package/esm2022/lib/components/typeahead/directives/options-scroll.directive.mjs +0 -68
- package/esm2022/lib/components/typeahead/directives/options-scroll.module.mjs +0 -16
- package/esm2022/lib/components/typeahead/index.mjs +0 -2
- package/esm2022/lib/components/typeahead/public-api.mjs +0 -4
- package/esm2022/lib/components/typeahead/typeahead.component.mjs +0 -486
- package/esm2022/lib/components/typeahead/typeahead.module.mjs +0 -59
- package/esm2022/lib/directives/autofocus/autofocus.directive.mjs +0 -17
- package/esm2022/lib/directives/autofocus/autofocus.module.mjs +0 -16
- package/esm2022/lib/directives/autofocus/index.mjs +0 -2
- package/esm2022/lib/directives/autofocus/public-api.mjs +0 -3
- package/esm2022/lib/directives/autogrow/autogrow.directive.mjs +0 -105
- package/esm2022/lib/directives/autogrow/autogrow.module.mjs +0 -20
- package/esm2022/lib/directives/autogrow/index.mjs +0 -2
- package/esm2022/lib/directives/autogrow/public-api.mjs +0 -3
- package/esm2022/lib/directives/chip-async-typeahead/chip-async-typeahead.directive.mjs +0 -39
- package/esm2022/lib/directives/chip-async-typeahead/index.mjs +0 -2
- package/esm2022/lib/directives/chip-async-typeahead/public-api.mjs +0 -2
- package/esm2022/lib/directives/chip-list/chip-list-items/chip-list-item-label.directive.mjs +0 -14
- package/esm2022/lib/directives/chip-list/chip-list-items/chip-list-items.component.mjs +0 -46
- package/esm2022/lib/directives/chip-list/chip-list.constant.mjs +0 -3
- package/esm2022/lib/directives/chip-list/chip-list.directive.mjs +0 -144
- package/esm2022/lib/directives/chip-list/chip-list.module.mjs +0 -40
- package/esm2022/lib/directives/chip-list/index.mjs +0 -2
- package/esm2022/lib/directives/chip-list/public-api.mjs +0 -5
- package/esm2022/lib/directives/draggable-list/draggable-list.directive.mjs +0 -94
- package/esm2022/lib/directives/draggable-list/draggable-list.module.mjs +0 -18
- package/esm2022/lib/directives/draggable-list/index.mjs +0 -2
- package/esm2022/lib/directives/draggable-list/public-api.mjs +0 -3
- package/esm2022/lib/directives/dropzone/dropzone.directive.mjs +0 -50
- package/esm2022/lib/directives/dropzone/dropzone.module.mjs +0 -18
- package/esm2022/lib/directives/dropzone/index.mjs +0 -2
- package/esm2022/lib/directives/dropzone/public-api.mjs +0 -3
- package/esm2022/lib/directives/image-error-placeholder/image-error-placeholder.directive.mjs +0 -26
- package/esm2022/lib/directives/image-error-placeholder/image-error-placeholder.module.mjs +0 -16
- package/esm2022/lib/directives/image-error-placeholder/index.mjs +0 -2
- package/esm2022/lib/directives/image-error-placeholder/public-api.mjs +0 -3
- package/esm2022/lib/directives/index.mjs +0 -2
- package/esm2022/lib/directives/material/index.mjs +0 -2
- package/esm2022/lib/directives/material/material.module.mjs +0 -25
- package/esm2022/lib/directives/material/nice-material-style.directive.mjs +0 -18
- package/esm2022/lib/directives/material/nice-rounded-style.directive.mjs +0 -18
- package/esm2022/lib/directives/material/public-api.mjs +0 -4
- package/esm2022/lib/directives/modals/index.mjs +0 -2
- package/esm2022/lib/directives/modals/modal-on-click.directive.mjs +0 -22
- package/esm2022/lib/directives/modals/modal-opener.directive.mjs +0 -31
- package/esm2022/lib/directives/modals/public-api.mjs +0 -3
- package/esm2022/lib/directives/public-api.mjs +0 -16
- package/esm2022/lib/directives/rerender/index.mjs +0 -2
- package/esm2022/lib/directives/rerender/public-api.mjs +0 -2
- package/esm2022/lib/directives/rerender/rerender.directive.mjs +0 -22
- package/esm2022/lib/directives/resolve/index.mjs +0 -2
- package/esm2022/lib/directives/resolve/public-api.mjs +0 -2
- package/esm2022/lib/directives/resolve/resolve.directive.mjs +0 -32
- package/esm2022/lib/directives/scroll-reset/index.mjs +0 -2
- package/esm2022/lib/directives/scroll-reset/public-api.mjs +0 -3
- package/esm2022/lib/directives/scroll-reset/scroll-reset.directive.mjs +0 -47
- package/esm2022/lib/directives/scroll-reset/scroll-reset.module.mjs +0 -20
- package/esm2022/lib/directives/scrollbar/index.mjs +0 -2
- package/esm2022/lib/directives/scrollbar/public-api.mjs +0 -3
- package/esm2022/lib/directives/scrollbar/scrollbar.directive.mjs +0 -309
- package/esm2022/lib/directives/scrollbar/scrollbar.module.mjs +0 -20
- package/esm2022/lib/directives/scrollbar/scrollbar.types.mjs +0 -15
- package/esm2022/lib/directives/stop-propagation/click-stop-propagation.directive.mjs +0 -18
- package/esm2022/lib/directives/stop-propagation/index.mjs +0 -2
- package/esm2022/lib/directives/stop-propagation/public-api.mjs +0 -3
- package/esm2022/lib/directives/stop-propagation/stop-propagation.module.mjs +0 -16
- package/esm2022/lib/directives/window/index.mjs +0 -2
- package/esm2022/lib/directives/window/prevent-close-window.directive.mjs +0 -18
- package/esm2022/lib/directives/window/public-api.mjs +0 -3
- package/esm2022/lib/directives/window/window-directive.module.mjs +0 -16
- package/esm2022/lib/nice.module.mjs +0 -124
- package/esm2022/lib/pipes/boolean.pipe.mjs +0 -22
- package/esm2022/lib/pipes/capitalize-first-letter.pipe.mjs +0 -18
- package/esm2022/lib/pipes/ceil.pipe.mjs +0 -14
- package/esm2022/lib/pipes/entries.pipe.mjs +0 -23
- package/esm2022/lib/pipes/find-by-key.pipe.mjs +0 -14
- package/esm2022/lib/pipes/first-letter.pipe.mjs +0 -14
- package/esm2022/lib/pipes/floor.pipe.mjs +0 -14
- package/esm2022/lib/pipes/index.mjs +0 -2
- package/esm2022/lib/pipes/join-if-defined.pipe.mjs +0 -20
- package/esm2022/lib/pipes/link.pipe.mjs +0 -25
- package/esm2022/lib/pipes/localized-boolean.pipe.mjs +0 -19
- package/esm2022/lib/pipes/localized-currency.pipe.mjs +0 -18
- package/esm2022/lib/pipes/localized-date-only.pipe.mjs +0 -21
- package/esm2022/lib/pipes/localized-date.pipe.mjs +0 -40
- package/esm2022/lib/pipes/minutes-to-time.pipe.mjs +0 -17
- package/esm2022/lib/pipes/number-to-ordinal-indicator.pipe.mjs +0 -23
- package/esm2022/lib/pipes/pad.pipe.mjs +0 -20
- package/esm2022/lib/pipes/phone.pipe.mjs +0 -23
- package/esm2022/lib/pipes/pipes.module.mjs +0 -177
- package/esm2022/lib/pipes/postal-code.pipe.mjs +0 -22
- package/esm2022/lib/pipes/public-api.mjs +0 -25
- package/esm2022/lib/pipes/range.pipe.mjs +0 -18
- package/esm2022/lib/pipes/round.pipe.mjs +0 -14
- package/esm2022/lib/pipes/sanitize-bypass.pipe.mjs +0 -24
- package/esm2022/lib/pipes/seconds-to-time.pipe.mjs +0 -18
- package/esm2022/lib/pipes/track-by-prop.pipe.mjs +0 -14
- package/esm2022/lib/providers/config/config.constants.mjs +0 -3
- package/esm2022/lib/providers/config/config.model.mjs +0 -2
- package/esm2022/lib/providers/config/config.module.mjs +0 -34
- package/esm2022/lib/providers/config/config.service.mjs +0 -51
- package/esm2022/lib/providers/config/index.mjs +0 -2
- package/esm2022/lib/providers/config/public-api.mjs +0 -3
- package/esm2022/lib/providers/index.mjs +0 -2
- package/esm2022/lib/providers/media-watcher/index.mjs +0 -2
- package/esm2022/lib/providers/media-watcher/media-watcher.module.mjs +0 -26
- package/esm2022/lib/providers/media-watcher/media-watcher.service.mjs +0 -106
- package/esm2022/lib/providers/media-watcher/public-api.mjs +0 -3
- package/esm2022/lib/providers/overlay/dynamic-overlay-container.service.mjs +0 -14
- package/esm2022/lib/providers/overlay/dynamic-overlay.service.mjs +0 -31
- package/esm2022/lib/providers/public-api.mjs +0 -5
- package/esm2022/lib/providers/splash-screen/index.mjs +0 -2
- package/esm2022/lib/providers/splash-screen/public-api.mjs +0 -3
- package/esm2022/lib/providers/splash-screen/splash-screen.module.mjs +0 -26
- package/esm2022/lib/providers/splash-screen/splash-screen.service.mjs +0 -45
- package/esm2022/lib/providers/utils/index.mjs +0 -2
- package/esm2022/lib/providers/utils/public-api.mjs +0 -3
- package/esm2022/lib/providers/utils/utils.module.mjs +0 -19
- package/esm2022/lib/providers/utils/utils.service.mjs +0 -27
- package/esm2022/lib/types/constructor.mjs +0 -5
- package/esm2022/lib/utils/array.utils.mjs +0 -106
- package/esm2022/lib/utils/case.utils.mjs +0 -58
- package/esm2022/lib/utils/colors.utils.mjs +0 -29
- package/esm2022/lib/utils/date.utils.mjs +0 -47
- package/esm2022/lib/utils/file.utils.mjs +0 -77
- package/esm2022/lib/utils/font-awesome.utils.mjs +0 -40
- package/esm2022/lib/utils/form-data.utils.mjs +0 -41
- package/esm2022/lib/utils/http-status.utils.mjs +0 -47
- package/esm2022/lib/utils/index.mjs +0 -2
- package/esm2022/lib/utils/keyboard.utils.mjs +0 -9
- package/esm2022/lib/utils/lexorank.utils.mjs +0 -28
- package/esm2022/lib/utils/modal.utils.mjs +0 -6
- package/esm2022/lib/utils/number.utils.mjs +0 -6
- package/esm2022/lib/utils/object.utils.mjs +0 -111
- package/esm2022/lib/utils/promise.utils.mjs +0 -7
- package/esm2022/lib/utils/public-api.mjs +0 -19
- package/esm2022/lib/utils/query-params.utils.mjs +0 -14
- package/esm2022/lib/utils/regex.utils.mjs +0 -11
- package/esm2022/lib/utils/type.utils.mjs +0 -15
- package/esm2022/lib/utils/url.utils.mjs +0 -20
- package/esm2022/public-api.mjs +0 -12
- package/esm2022/recursyve-nice-ui-kit.v2.mjs +0 -5
- package/lib/animations/defaults.d.ts +0 -13
- package/lib/animations/expand-collapse.d.ts +0 -2
- package/lib/animations/fade.d.ts +0 -11
- package/lib/animations/index.d.ts +0 -1
- package/lib/animations/public-api.d.ts +0 -1
- package/lib/animations/shake.d.ts +0 -2
- package/lib/animations/slide.d.ts +0 -9
- package/lib/animations/zoom.d.ts +0 -3
- package/lib/api/exceptions/api.exception.d.ts +0 -3
- package/lib/api/exceptions/exception.factory.d.ts +0 -6
- package/lib/api/index.d.ts +0 -1
- package/lib/api/interceptors/transform-response.interceptor.d.ts +0 -9
- package/lib/api/nice.api.d.ts +0 -33
- package/lib/api/public-api.d.ts +0 -4
- package/lib/components/alert/alert.component.d.ts +0 -64
- package/lib/components/alert/alert.module.d.ts +0 -10
- package/lib/components/alert/alert.service.d.ts +0 -24
- package/lib/components/alert/alert.types.d.ts +0 -3
- package/lib/components/alert/index.d.ts +0 -1
- package/lib/components/alert/public-api.d.ts +0 -4
- package/lib/components/assets-carousel/assets-carousel.component.d.ts +0 -88
- package/lib/components/assets-carousel/assets-carousel.constant.d.ts +0 -2
- package/lib/components/assets-carousel/assets-carousel.module.d.ts +0 -19
- package/lib/components/assets-carousel/directives/assets-carousel-active-content.directive.d.ts +0 -8
- package/lib/components/assets-carousel/index.d.ts +0 -1
- package/lib/components/assets-carousel/public-api.d.ts +0 -3
- package/lib/components/async-typeahead/async-typeahead.component.d.ts +0 -119
- package/lib/components/async-typeahead/async-typeahead.constant.d.ts +0 -2
- package/lib/components/async-typeahead/async-typeahead.module.d.ts +0 -19
- package/lib/components/async-typeahead/index.d.ts +0 -1
- package/lib/components/async-typeahead/providers/async-typeahead.provider.d.ts +0 -11
- package/lib/components/async-typeahead/providers/async-typeahead.service.d.ts +0 -51
- package/lib/components/async-typeahead/public-api.d.ts +0 -4
- package/lib/components/base-form/base-form.component.d.ts +0 -30
- package/lib/components/base-form/base-form.module.d.ts +0 -7
- package/lib/components/base-form/form-submit.directive.d.ts +0 -8
- package/lib/components/base-form/index.d.ts +0 -1
- package/lib/components/base-form/nice-base.form.d.ts +0 -4
- package/lib/components/base-form/public-api.d.ts +0 -4
- package/lib/components/card/card.component.d.ts +0 -21
- package/lib/components/card/card.module.d.ts +0 -8
- package/lib/components/card/card.types.d.ts +0 -1
- package/lib/components/card/index.d.ts +0 -1
- package/lib/components/card/public-api.d.ts +0 -2
- package/lib/components/carousel/carousel.component.d.ts +0 -21
- package/lib/components/carousel/carousel.module.d.ts +0 -14
- package/lib/components/carousel/index.d.ts +0 -1
- package/lib/components/carousel/picture-modal/index.d.ts +0 -1
- package/lib/components/carousel/picture-modal/picture-modal.component.d.ts +0 -6
- package/lib/components/carousel/picture-modal/picture-modal.service.d.ts +0 -12
- package/lib/components/carousel/picture-modal/public-api.d.ts +0 -2
- package/lib/components/carousel/pipe/carousel-layout.pipe.d.ts +0 -7
- package/lib/components/carousel/public-api.d.ts +0 -3
- package/lib/components/collapsable/collapsable.component.d.ts +0 -15
- package/lib/components/collapsable/collapsable.module.d.ts +0 -9
- package/lib/components/collapsable/index.d.ts +0 -1
- package/lib/components/collapsable/public-api.d.ts +0 -2
- package/lib/components/date-range-picker/components/header/header.component.d.ts +0 -20
- package/lib/components/date-range-picker/components/range-preset/range-preset.component.d.ts +0 -23
- package/lib/components/date-range-picker/date-range-picker.component.d.ts +0 -28
- package/lib/components/date-range-picker/date-range-picker.module.d.ts +0 -18
- package/lib/components/date-range-picker/index.d.ts +0 -1
- package/lib/components/date-range-picker/providers/date-range-picker.service.d.ts +0 -8
- package/lib/components/date-range-picker/public-api.d.ts +0 -2
- package/lib/components/drawer/drawer.component.d.ts +0 -115
- package/lib/components/drawer/drawer.module.d.ts +0 -9
- package/lib/components/drawer/drawer.service.d.ts +0 -23
- package/lib/components/drawer/drawer.types.d.ts +0 -2
- package/lib/components/drawer/index.d.ts +0 -1
- package/lib/components/drawer/public-api.d.ts +0 -4
- package/lib/components/export-bottom-sheet/export-bottom-sheet.component.d.ts +0 -17
- package/lib/components/export-bottom-sheet/export-bottom-sheet.module.d.ts +0 -18
- package/lib/components/export-bottom-sheet/index.d.ts +0 -1
- package/lib/components/export-bottom-sheet/models/export-strategy.model.d.ts +0 -5
- package/lib/components/export-bottom-sheet/providers/export-bottom-sheet.service.d.ts +0 -12
- package/lib/components/export-bottom-sheet/public-api.d.ts +0 -4
- package/lib/components/form-error/control-status.directive.d.ts +0 -20
- package/lib/components/form-error/form-error.component.d.ts +0 -8
- package/lib/components/form-error/form-error.module.d.ts +0 -10
- package/lib/components/form-error/index.d.ts +0 -1
- package/lib/components/form-error/public-api.d.ts +0 -3
- package/lib/components/horizontal-stepper/horizontal-stepper.component.d.ts +0 -8
- package/lib/components/horizontal-stepper/horizontal-stepper.module.d.ts +0 -11
- package/lib/components/horizontal-stepper/index.d.ts +0 -1
- package/lib/components/horizontal-stepper/public-api.d.ts +0 -3
- package/lib/components/horizontal-stepper/step.component.d.ts +0 -6
- package/lib/components/image-cropper/image-cropper.component.d.ts +0 -374
- package/lib/components/image-cropper/image-cropper.module.d.ts +0 -10
- package/lib/components/image-cropper/index.d.ts +0 -1
- package/lib/components/image-cropper/public-api.d.ts +0 -2
- package/lib/components/image-cropper/resize-canvas.d.ts +0 -1
- package/lib/components/index.d.ts +0 -1
- package/lib/components/layout/index.d.ts +0 -1
- package/lib/components/layout/layout.component.d.ts +0 -39
- package/lib/components/layout/layout.module.d.ts +0 -7
- package/lib/components/layout/public-api.d.ts +0 -2
- package/lib/components/loading-spinner/index.d.ts +0 -1
- package/lib/components/loading-spinner/loading-spinner.component.d.ts +0 -9
- package/lib/components/loading-spinner/loading-spinner.module.d.ts +0 -13
- package/lib/components/loading-spinner/loading.constant.d.ts +0 -2
- package/lib/components/loading-spinner/loading.directive.d.ts +0 -17
- package/lib/components/loading-spinner/public-api.d.ts +0 -3
- package/lib/components/loading-toast/index.d.ts +0 -1
- package/lib/components/loading-toast/loading-toast.component.d.ts +0 -19
- package/lib/components/loading-toast/loading-toast.constant.d.ts +0 -2
- package/lib/components/loading-toast/loading-toast.directive.d.ts +0 -18
- package/lib/components/loading-toast/loading-toast.module.d.ts +0 -16
- package/lib/components/loading-toast/loading-toast.service.d.ts +0 -20
- package/lib/components/loading-toast/public-api.d.ts +0 -5
- package/lib/components/loading-toast/rxjs/show-loading-toast.operator.d.ts +0 -6
- package/lib/components/lottie/index.d.ts +0 -1
- package/lib/components/lottie/lottie.component.d.ts +0 -19
- package/lib/components/lottie/lottie.module.d.ts +0 -8
- package/lib/components/lottie/public-api.d.ts +0 -2
- package/lib/components/navigation/components/hint-component-base.d.ts +0 -65
- package/lib/components/navigation/directives/show-hint.directive.d.ts +0 -39
- package/lib/components/navigation/horizontal/components/basic/basic.component.d.ts +0 -29
- package/lib/components/navigation/horizontal/components/branch/branch.component.d.ts +0 -38
- package/lib/components/navigation/horizontal/components/divider/divider.component.d.ts +0 -26
- package/lib/components/navigation/horizontal/components/spacer/spacer.component.d.ts +0 -26
- package/lib/components/navigation/horizontal/horizontal.component.d.ts +0 -22
- package/lib/components/navigation/index.d.ts +0 -1
- package/lib/components/navigation/navigation.component.d.ts +0 -32
- package/lib/components/navigation/navigation.module.d.ts +0 -32
- package/lib/components/navigation/navigation.service.d.ts +0 -69
- package/lib/components/navigation/navigation.types.d.ts +0 -42
- package/lib/components/navigation/pipes/should-hide.pipe.d.ts +0 -11
- package/lib/components/navigation/pipes/should-show-hint.pipe.d.ts +0 -12
- package/lib/components/navigation/pipes/translate-with-context.pipe.d.ts +0 -12
- package/lib/components/navigation/providers/hide-item.resolver.d.ts +0 -5
- package/lib/components/navigation/providers/hint.resolver.d.ts +0 -4
- package/lib/components/navigation/providers/hint.service.d.ts +0 -9
- package/lib/components/navigation/providers/translation-context.service.d.ts +0 -8
- package/lib/components/navigation/public-api.d.ts +0 -19
- package/lib/components/navigation/vertical/components/aside/aside.component.d.ts +0 -55
- package/lib/components/navigation/vertical/components/basic/basic.component.d.ts +0 -35
- package/lib/components/navigation/vertical/components/collapsable/collapsable.component.d.ts +0 -68
- package/lib/components/navigation/vertical/components/divider/divider.component.d.ts +0 -26
- package/lib/components/navigation/vertical/components/group/group.component.d.ts +0 -36
- package/lib/components/navigation/vertical/components/spacer/spacer.component.d.ts +0 -26
- package/lib/components/navigation/vertical/vertical.component.d.ts +0 -168
- package/lib/components/public-api.d.ts +0 -24
- package/lib/components/search-bar/index.d.ts +0 -1
- package/lib/components/search-bar/public-api.d.ts +0 -2
- package/lib/components/search-bar/search-bar.component.d.ts +0 -20
- package/lib/components/search-bar/search-bar.module.d.ts +0 -12
- package/lib/components/sweet-alert/index.d.ts +0 -1
- package/lib/components/sweet-alert/public-api.d.ts +0 -4
- package/lib/components/sweet-alert/sweet-alert.component.d.ts +0 -27
- package/lib/components/sweet-alert/sweet-alert.constant.d.ts +0 -2
- package/lib/components/sweet-alert/sweet-alert.directive.d.ts +0 -13
- package/lib/components/sweet-alert/sweet-alert.module.d.ts +0 -16
- package/lib/components/sweet-alert/sweet-alert.service.d.ts +0 -32
- package/lib/components/toast/index.d.ts +0 -1
- package/lib/components/toast/public-api.d.ts +0 -5
- package/lib/components/toast/rxjs/show-success-or-error-toast.operator.d.ts +0 -37
- package/lib/components/toast/rxjs/show-toast.operator.d.ts +0 -20
- package/lib/components/toast/toast.component.d.ts +0 -17
- package/lib/components/toast/toast.constant.d.ts +0 -2
- package/lib/components/toast/toast.module.d.ts +0 -15
- package/lib/components/toast/toast.service.d.ts +0 -25
- package/lib/components/toggle-button-group/index.d.ts +0 -1
- package/lib/components/toggle-button-group/public-api.d.ts +0 -3
- package/lib/components/toggle-button-group/toggle-button-group.component.d.ts +0 -26
- package/lib/components/toggle-button-group/toggle-button-group.module.d.ts +0 -10
- package/lib/components/toggle-button-group/toggle-button.component.d.ts +0 -8
- package/lib/components/translation-form/components/textarea/translation-form-textarea.component.d.ts +0 -9
- package/lib/components/translation-form/components/textfield/translation-form-textfield.component.d.ts +0 -6
- package/lib/components/translation-form/components/translation-form.component.d.ts +0 -56
- package/lib/components/translation-form/components/translation-form.module.d.ts +0 -16
- package/lib/components/translation-form/decorators/translation-form-group.decorator.d.ts +0 -1
- package/lib/components/translation-form/directives/translation-context.directive.d.ts +0 -16
- package/lib/components/translation-form/index.d.ts +0 -1
- package/lib/components/translation-form/providers/nice-translation-form.service.d.ts +0 -16
- package/lib/components/translation-form/public-api.d.ts +0 -10
- package/lib/components/translation-form/toggle/translation-toggle.component.d.ts +0 -14
- package/lib/components/translation-form/translation.form.d.ts +0 -5
- package/lib/components/translation-form/validators/require-for-languages.validator.d.ts +0 -14
- package/lib/components/typeahead/directives/options-scroll.directive.d.ts +0 -19
- package/lib/components/typeahead/directives/options-scroll.module.d.ts +0 -7
- package/lib/components/typeahead/index.d.ts +0 -1
- package/lib/components/typeahead/public-api.d.ts +0 -3
- package/lib/components/typeahead/typeahead.component.d.ts +0 -101
- package/lib/components/typeahead/typeahead.module.d.ts +0 -17
- package/lib/directives/autofocus/autofocus.directive.d.ts +0 -9
- package/lib/directives/autofocus/autofocus.module.d.ts +0 -7
- package/lib/directives/autofocus/index.d.ts +0 -1
- package/lib/directives/autofocus/public-api.d.ts +0 -2
- package/lib/directives/autogrow/autogrow.directive.d.ts +0 -37
- package/lib/directives/autogrow/autogrow.module.d.ts +0 -7
- package/lib/directives/autogrow/index.d.ts +0 -1
- package/lib/directives/autogrow/public-api.d.ts +0 -2
- package/lib/directives/chip-async-typeahead/chip-async-typeahead.directive.d.ts +0 -14
- package/lib/directives/chip-async-typeahead/index.d.ts +0 -1
- package/lib/directives/chip-async-typeahead/public-api.d.ts +0 -1
- package/lib/directives/chip-list/chip-list-items/chip-list-item-label.directive.d.ts +0 -8
- package/lib/directives/chip-list/chip-list-items/chip-list-items.component.d.ts +0 -26
- package/lib/directives/chip-list/chip-list.constant.d.ts +0 -2
- package/lib/directives/chip-list/chip-list.directive.d.ts +0 -32
- package/lib/directives/chip-list/chip-list.module.d.ts +0 -14
- package/lib/directives/chip-list/index.d.ts +0 -1
- package/lib/directives/chip-list/public-api.d.ts +0 -4
- package/lib/directives/draggable-list/draggable-list.directive.d.ts +0 -24
- package/lib/directives/draggable-list/draggable-list.module.d.ts +0 -8
- package/lib/directives/draggable-list/index.d.ts +0 -1
- package/lib/directives/draggable-list/public-api.d.ts +0 -2
- package/lib/directives/dropzone/dropzone.directive.d.ts +0 -11
- package/lib/directives/dropzone/dropzone.module.d.ts +0 -7
- package/lib/directives/dropzone/index.d.ts +0 -1
- package/lib/directives/dropzone/public-api.d.ts +0 -2
- package/lib/directives/image-error-placeholder/image-error-placeholder.directive.d.ts +0 -11
- package/lib/directives/image-error-placeholder/image-error-placeholder.module.d.ts +0 -7
- package/lib/directives/image-error-placeholder/index.d.ts +0 -1
- package/lib/directives/image-error-placeholder/public-api.d.ts +0 -2
- package/lib/directives/index.d.ts +0 -1
- package/lib/directives/material/index.d.ts +0 -1
- package/lib/directives/material/material.module.d.ts +0 -8
- package/lib/directives/material/nice-material-style.directive.d.ts +0 -9
- package/lib/directives/material/nice-rounded-style.directive.d.ts +0 -9
- package/lib/directives/material/public-api.d.ts +0 -3
- package/lib/directives/modals/index.d.ts +0 -1
- package/lib/directives/modals/modal-on-click.directive.d.ts +0 -10
- package/lib/directives/modals/modal-opener.directive.d.ts +0 -14
- package/lib/directives/modals/public-api.d.ts +0 -2
- package/lib/directives/public-api.d.ts +0 -15
- package/lib/directives/rerender/index.d.ts +0 -1
- package/lib/directives/rerender/public-api.d.ts +0 -1
- package/lib/directives/rerender/rerender.directive.d.ts +0 -10
- package/lib/directives/resolve/index.d.ts +0 -1
- package/lib/directives/resolve/public-api.d.ts +0 -1
- package/lib/directives/resolve/resolve.directive.d.ts +0 -18
- package/lib/directives/scroll-reset/index.d.ts +0 -1
- package/lib/directives/scroll-reset/public-api.d.ts +0 -2
- package/lib/directives/scroll-reset/scroll-reset.directive.d.ts +0 -22
- package/lib/directives/scroll-reset/scroll-reset.module.d.ts +0 -7
- package/lib/directives/scrollbar/index.d.ts +0 -1
- package/lib/directives/scrollbar/public-api.d.ts +0 -2
- package/lib/directives/scrollbar/scrollbar.directive.d.ts +0 -112
- package/lib/directives/scrollbar/scrollbar.module.d.ts +0 -7
- package/lib/directives/scrollbar/scrollbar.types.d.ts +0 -12
- package/lib/directives/stop-propagation/click-stop-propagation.directive.d.ts +0 -6
- package/lib/directives/stop-propagation/index.d.ts +0 -1
- package/lib/directives/stop-propagation/public-api.d.ts +0 -2
- package/lib/directives/stop-propagation/stop-propagation.module.d.ts +0 -7
- package/lib/directives/window/index.d.ts +0 -1
- package/lib/directives/window/prevent-close-window.directive.d.ts +0 -6
- package/lib/directives/window/public-api.d.ts +0 -2
- package/lib/directives/window/window-directive.module.d.ts +0 -7
- package/lib/nice.module.d.ts +0 -13
- package/lib/pipes/boolean.pipe.d.ts +0 -10
- package/lib/pipes/capitalize-first-letter.pipe.d.ts +0 -7
- package/lib/pipes/ceil.pipe.d.ts +0 -7
- package/lib/pipes/entries.pipe.d.ts +0 -10
- package/lib/pipes/find-by-key.pipe.d.ts +0 -7
- package/lib/pipes/first-letter.pipe.d.ts +0 -7
- package/lib/pipes/floor.pipe.d.ts +0 -7
- package/lib/pipes/index.d.ts +0 -1
- package/lib/pipes/join-if-defined.pipe.d.ts +0 -7
- package/lib/pipes/link.pipe.d.ts +0 -15
- package/lib/pipes/localized-boolean.pipe.d.ts +0 -10
- package/lib/pipes/localized-currency.pipe.d.ts +0 -10
- package/lib/pipes/localized-date-only.pipe.d.ts +0 -10
- package/lib/pipes/localized-date.pipe.d.ts +0 -11
- package/lib/pipes/minutes-to-time.pipe.d.ts +0 -7
- package/lib/pipes/number-to-ordinal-indicator.pipe.d.ts +0 -7
- package/lib/pipes/pad.pipe.d.ts +0 -7
- package/lib/pipes/phone.pipe.d.ts +0 -10
- package/lib/pipes/pipes.module.d.ts +0 -29
- package/lib/pipes/postal-code.pipe.d.ts +0 -10
- package/lib/pipes/public-api.d.ts +0 -24
- package/lib/pipes/range.pipe.d.ts +0 -7
- package/lib/pipes/round.pipe.d.ts +0 -7
- package/lib/pipes/sanitize-bypass.pipe.d.ts +0 -10
- package/lib/pipes/seconds-to-time.pipe.d.ts +0 -7
- package/lib/pipes/track-by-prop.pipe.d.ts +0 -7
- package/lib/providers/config/config.constants.d.ts +0 -2
- package/lib/providers/config/config.model.d.ts +0 -14
- package/lib/providers/config/config.module.d.ts +0 -18
- package/lib/providers/config/config.service.d.ts +0 -21
- package/lib/providers/config/index.d.ts +0 -1
- package/lib/providers/config/public-api.d.ts +0 -2
- package/lib/providers/index.d.ts +0 -1
- package/lib/providers/media-watcher/index.d.ts +0 -1
- package/lib/providers/media-watcher/media-watcher.module.d.ts +0 -12
- package/lib/providers/media-watcher/media-watcher.service.d.ts +0 -27
- package/lib/providers/media-watcher/public-api.d.ts +0 -2
- package/lib/providers/overlay/dynamic-overlay-container.service.d.ts +0 -7
- package/lib/providers/overlay/dynamic-overlay.service.d.ts +0 -14
- package/lib/providers/public-api.d.ts +0 -4
- package/lib/providers/splash-screen/index.d.ts +0 -1
- package/lib/providers/splash-screen/public-api.d.ts +0 -2
- package/lib/providers/splash-screen/splash-screen.module.d.ts +0 -12
- package/lib/providers/splash-screen/splash-screen.service.d.ts +0 -20
- package/lib/providers/utils/index.d.ts +0 -1
- package/lib/providers/utils/public-api.d.ts +0 -2
- package/lib/providers/utils/utils.module.d.ts +0 -9
- package/lib/providers/utils/utils.service.d.ts +0 -9
- package/lib/types/constructor.d.ts +0 -5
- package/lib/utils/array.utils.d.ts +0 -24
- package/lib/utils/case.utils.d.ts +0 -9
- package/lib/utils/colors.utils.d.ts +0 -9
- package/lib/utils/date.utils.d.ts +0 -11
- package/lib/utils/file.utils.d.ts +0 -10
- package/lib/utils/font-awesome.utils.d.ts +0 -3
- package/lib/utils/form-data.utils.d.ts +0 -4
- package/lib/utils/http-status.utils.d.ts +0 -45
- package/lib/utils/index.d.ts +0 -1
- package/lib/utils/keyboard.utils.d.ts +0 -7
- package/lib/utils/lexorank.utils.d.ts +0 -6
- package/lib/utils/modal.utils.d.ts +0 -7
- package/lib/utils/number.utils.d.ts +0 -7
- package/lib/utils/object.utils.d.ts +0 -10
- package/lib/utils/promise.utils.d.ts +0 -7
- package/lib/utils/public-api.d.ts +0 -18
- package/lib/utils/query-params.utils.d.ts +0 -3
- package/lib/utils/regex.utils.d.ts +0 -7
- package/lib/utils/type.utils.d.ts +0 -6
- package/lib/utils/url.utils.d.ts +0 -6
- package/public-api.d.ts +0 -8
|
@@ -1,599 +0,0 @@
|
|
|
1
|
-
import { animate, AnimationBuilder, style } from "@angular/animations";
|
|
2
|
-
import { coerceBooleanProperty } from "@angular/cdk/coercion";
|
|
3
|
-
import { ScrollStrategyOptions } from "@angular/cdk/overlay";
|
|
4
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, QueryList, Renderer2, ViewChild, ViewChildren, ViewEncapsulation } from "@angular/core";
|
|
5
|
-
import { NavigationEnd, Router } from "@angular/router";
|
|
6
|
-
import { merge, ReplaySubject } from "rxjs";
|
|
7
|
-
import { delay, filter, takeUntil } from "rxjs/operators";
|
|
8
|
-
import { niceAnimations } from "../../../animations";
|
|
9
|
-
import { NiceScrollbarDirective } from "../../../directives/scrollbar";
|
|
10
|
-
import { NiceUtilsService } from "../../../providers/utils";
|
|
11
|
-
import { NiceNavigationComponent } from "../navigation.component";
|
|
12
|
-
import { NiceNavigationService } from "../navigation.service";
|
|
13
|
-
import { NiceNavigationHintService } from "../providers/hint.service";
|
|
14
|
-
import { NiceTranslationContextService } from "../providers/translation-context.service";
|
|
15
|
-
import * as i0 from "@angular/core";
|
|
16
|
-
import * as i1 from "../navigation.service";
|
|
17
|
-
import * as i2 from "../../../providers/utils";
|
|
18
|
-
import * as i3 from "../providers/translation-context.service";
|
|
19
|
-
import * as i4 from "@angular/animations";
|
|
20
|
-
import * as i5 from "@angular/router";
|
|
21
|
-
import * as i6 from "@angular/cdk/overlay";
|
|
22
|
-
import * as i7 from "../providers/hint.service";
|
|
23
|
-
import * as i8 from "@angular/common";
|
|
24
|
-
import * as i9 from "../../../directives/scrollbar/scrollbar.directive";
|
|
25
|
-
import * as i10 from "./components/aside/aside.component";
|
|
26
|
-
import * as i11 from "./components/basic/basic.component";
|
|
27
|
-
import * as i12 from "./components/collapsable/collapsable.component";
|
|
28
|
-
import * as i13 from "./components/divider/divider.component";
|
|
29
|
-
import * as i14 from "./components/group/group.component";
|
|
30
|
-
import * as i15 from "./components/spacer/spacer.component";
|
|
31
|
-
import * as i16 from "../pipes/should-hide.pipe";
|
|
32
|
-
export class NiceVerticalNavigationComponent extends NiceNavigationComponent {
|
|
33
|
-
set navigation(navigation) {
|
|
34
|
-
this._navigation = navigation;
|
|
35
|
-
this._changeDetectorRef.markForCheck();
|
|
36
|
-
}
|
|
37
|
-
get navigation() {
|
|
38
|
-
return this._navigation;
|
|
39
|
-
}
|
|
40
|
-
set forceHovered(forceHovered) {
|
|
41
|
-
this._forceHovered = forceHovered;
|
|
42
|
-
this.hoveredChanged.next((this.hovered || this._forceHovered) || this.hasHint);
|
|
43
|
-
this._changeDetectorRef.markForCheck();
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Constructor
|
|
47
|
-
*/
|
|
48
|
-
constructor(_changeDetectorRef, _niceNavigationService, _niceUtilsService, _translationContextService, _animationBuilder, _elementRef, _renderer2, _router, _scrollStrategyOptions, _hintService) {
|
|
49
|
-
super(_changeDetectorRef, _niceNavigationService, _niceUtilsService, _translationContextService);
|
|
50
|
-
this._animationBuilder = _animationBuilder;
|
|
51
|
-
this._elementRef = _elementRef;
|
|
52
|
-
this._renderer2 = _renderer2;
|
|
53
|
-
this._router = _router;
|
|
54
|
-
this._scrollStrategyOptions = _scrollStrategyOptions;
|
|
55
|
-
this._hintService = _hintService;
|
|
56
|
-
this._forceHovered = false;
|
|
57
|
-
this._animationsEnabled = false;
|
|
58
|
-
this._scrollStrategy = this._scrollStrategyOptions.block();
|
|
59
|
-
this.name = this._niceUtilsService.randomId();
|
|
60
|
-
this.appearance = "default";
|
|
61
|
-
this.autoCollapse = true;
|
|
62
|
-
this.inner = false;
|
|
63
|
-
this.mode = "side";
|
|
64
|
-
this.opened = true;
|
|
65
|
-
this.hovered = false;
|
|
66
|
-
this.hasHint = false;
|
|
67
|
-
this.position = "left";
|
|
68
|
-
this.showTooltips = false;
|
|
69
|
-
this.transparentOverlay = false;
|
|
70
|
-
this.tooltipPosition = "after";
|
|
71
|
-
this.appearanceChanged = new EventEmitter();
|
|
72
|
-
this.modeChanged = new EventEmitter();
|
|
73
|
-
this.openedChanged = new EventEmitter();
|
|
74
|
-
this.hoveredChanged = new EventEmitter();
|
|
75
|
-
this.positionChanged = new EventEmitter();
|
|
76
|
-
this.activeAsideItemId = null;
|
|
77
|
-
this.onCollapsableItemCollapsed = new ReplaySubject(1);
|
|
78
|
-
this.onCollapsableItemExpanded = new ReplaySubject(1);
|
|
79
|
-
this._handleAsideOverlayClick = () => {
|
|
80
|
-
this.closeAside();
|
|
81
|
-
};
|
|
82
|
-
this._handleOverlayClick = () => {
|
|
83
|
-
this.close();
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
// -----------------------------------------------------------------------------------------------------
|
|
87
|
-
// @ Accessors
|
|
88
|
-
// -----------------------------------------------------------------------------------------------------
|
|
89
|
-
/**
|
|
90
|
-
* Host binding for component classes
|
|
91
|
-
*/
|
|
92
|
-
get classList() {
|
|
93
|
-
return {
|
|
94
|
-
"nice-vertical-navigation-animations-enabled": this._animationsEnabled,
|
|
95
|
-
[`nice-vertical-navigation-appearance-${this.appearance}`]: true,
|
|
96
|
-
"nice-vertical-navigation-hover": this.hovered || this._forceHovered,
|
|
97
|
-
"nice-vertical-navigation-inner": this.inner,
|
|
98
|
-
"nice-vertical-navigation-mode-over": this.mode === "over",
|
|
99
|
-
"nice-vertical-navigation-mode-side": this.mode === "side",
|
|
100
|
-
"nice-vertical-navigation-opened": this.opened,
|
|
101
|
-
"nice-vertical-navigation-position-left": this.position === "left",
|
|
102
|
-
"nice-vertical-navigation-position-right": this.position === "right",
|
|
103
|
-
"nice-vertical-navigation-has-hint": this.hasHint
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Host binding for component inline styles
|
|
108
|
-
*/
|
|
109
|
-
get styleList() {
|
|
110
|
-
return {
|
|
111
|
-
"visibility": this.opened ? "visible" : "hidden"
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Setter for niceScrollbarDirectives
|
|
116
|
-
*/
|
|
117
|
-
set niceScrollbarDirectives(niceScrollbarDirectives) {
|
|
118
|
-
// Store the directives
|
|
119
|
-
this._niceScrollbarDirectives = niceScrollbarDirectives;
|
|
120
|
-
// Return if there are no directives
|
|
121
|
-
if (niceScrollbarDirectives.length === 0) {
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
// Unsubscribe the previous subscriptions
|
|
125
|
-
if (this._niceScrollbarDirectivesSubscription) {
|
|
126
|
-
this._niceScrollbarDirectivesSubscription.unsubscribe();
|
|
127
|
-
}
|
|
128
|
-
// Update the scrollbars on collapsable items' collapse/expand
|
|
129
|
-
this._niceScrollbarDirectivesSubscription =
|
|
130
|
-
merge(this.onCollapsableItemCollapsed, this.onCollapsableItemExpanded)
|
|
131
|
-
.pipe(takeUntil(this._unsubscribeAll), delay(250))
|
|
132
|
-
.subscribe(() => {
|
|
133
|
-
// Loop through the scrollbars and update them
|
|
134
|
-
niceScrollbarDirectives.forEach((niceScrollbarDirective) => {
|
|
135
|
-
niceScrollbarDirective.update();
|
|
136
|
-
});
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
// -----------------------------------------------------------------------------------------------------
|
|
140
|
-
// @ Lifecycle hooks
|
|
141
|
-
// -----------------------------------------------------------------------------------------------------
|
|
142
|
-
/**
|
|
143
|
-
* On changes
|
|
144
|
-
*
|
|
145
|
-
* @param changes
|
|
146
|
-
*/
|
|
147
|
-
ngOnChanges(changes) {
|
|
148
|
-
super.ngOnChanges(changes);
|
|
149
|
-
// Appearance
|
|
150
|
-
if ("appearance" in changes) {
|
|
151
|
-
// Execute the observable
|
|
152
|
-
this.appearanceChanged.next(changes.appearance.currentValue);
|
|
153
|
-
}
|
|
154
|
-
// Inner
|
|
155
|
-
if ("inner" in changes) {
|
|
156
|
-
// Coerce the value to a boolean
|
|
157
|
-
this.inner = coerceBooleanProperty(changes.inner.currentValue);
|
|
158
|
-
}
|
|
159
|
-
// Mode
|
|
160
|
-
if ("mode" in changes) {
|
|
161
|
-
// Get the previous and current values
|
|
162
|
-
const currentMode = changes.mode.currentValue;
|
|
163
|
-
const previousMode = changes.mode.previousValue;
|
|
164
|
-
// Disable the animations
|
|
165
|
-
this._disableAnimations();
|
|
166
|
-
// If the mode changes: 'over -> side'
|
|
167
|
-
if (previousMode === "over" && currentMode === "side") {
|
|
168
|
-
// Hide the overlay
|
|
169
|
-
this._hideOverlay();
|
|
170
|
-
}
|
|
171
|
-
// If the mode changes: 'side -> over'
|
|
172
|
-
if (previousMode === "side" && currentMode === "over") {
|
|
173
|
-
// Close the aside
|
|
174
|
-
this.closeAside();
|
|
175
|
-
// If the navigation is opened
|
|
176
|
-
if (this.opened) {
|
|
177
|
-
// Show the overlay
|
|
178
|
-
this._showOverlay();
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
// Execute the observable
|
|
182
|
-
this.modeChanged.next(currentMode);
|
|
183
|
-
// Enable the animations after a delay
|
|
184
|
-
// The delay must be bigger than the current transition-duration
|
|
185
|
-
// to make sure nothing will be animated while the mode changing
|
|
186
|
-
setTimeout(() => {
|
|
187
|
-
this._enableAnimations();
|
|
188
|
-
}, 500);
|
|
189
|
-
}
|
|
190
|
-
// Opened
|
|
191
|
-
if ("opened" in changes) {
|
|
192
|
-
// Coerce the value to a boolean
|
|
193
|
-
this.opened = coerceBooleanProperty(changes.opened.currentValue);
|
|
194
|
-
// Open/close the navigation
|
|
195
|
-
this._toggleOpened(this.opened);
|
|
196
|
-
}
|
|
197
|
-
// Position
|
|
198
|
-
if ("position" in changes) {
|
|
199
|
-
// Execute the observable
|
|
200
|
-
this.positionChanged.next(changes.position.currentValue);
|
|
201
|
-
}
|
|
202
|
-
// Transparent overlay
|
|
203
|
-
if ("transparentOverlay" in changes) {
|
|
204
|
-
// Coerce the value to a boolean
|
|
205
|
-
this.transparentOverlay = coerceBooleanProperty(changes.transparentOverlay.currentValue);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
/**
|
|
209
|
-
* On init
|
|
210
|
-
*/
|
|
211
|
-
ngOnInit() {
|
|
212
|
-
super.ngOnInit();
|
|
213
|
-
// Make sure the name input is not an empty string
|
|
214
|
-
if (this.name === "") {
|
|
215
|
-
this.name = this._niceUtilsService.randomId();
|
|
216
|
-
}
|
|
217
|
-
// Subscribe to the 'NavigationEnd' event
|
|
218
|
-
this._router.events
|
|
219
|
-
.pipe(filter(event => event instanceof NavigationEnd), takeUntil(this._unsubscribeAll))
|
|
220
|
-
.subscribe(() => {
|
|
221
|
-
// If the mode is 'over' and the navigation is opened...
|
|
222
|
-
if (this.mode === "over" && this.opened) {
|
|
223
|
-
// Close the navigation
|
|
224
|
-
this.close();
|
|
225
|
-
}
|
|
226
|
-
// If the mode is 'side' and the aside is active...
|
|
227
|
-
if (this.mode === "side" && this.activeAsideItemId) {
|
|
228
|
-
// Close the aside
|
|
229
|
-
this.closeAside();
|
|
230
|
-
}
|
|
231
|
-
});
|
|
232
|
-
this._hintService.hasActiveHint$.pipe(takeUntil(this._unsubscribeAll)).subscribe(hasHint => {
|
|
233
|
-
this.hasHint = hasHint;
|
|
234
|
-
this.hoveredChanged.next((this.hovered || this._forceHovered) || this.hasHint);
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* After view init
|
|
239
|
-
*/
|
|
240
|
-
ngAfterViewInit() {
|
|
241
|
-
setTimeout(() => {
|
|
242
|
-
// Return if 'navigation content' element does not exist
|
|
243
|
-
if (!this._navigationContentEl) {
|
|
244
|
-
return;
|
|
245
|
-
}
|
|
246
|
-
// If 'navigation content' element doesn't have
|
|
247
|
-
// perfect scrollbar activated on it...
|
|
248
|
-
if (!this._navigationContentEl.nativeElement.classList.contains("ps")) {
|
|
249
|
-
// Find the active item
|
|
250
|
-
const activeItem = this._navigationContentEl.nativeElement.querySelector(".nice-vertical-navigation-item-active");
|
|
251
|
-
// If the active item exists, scroll it into view
|
|
252
|
-
if (activeItem) {
|
|
253
|
-
activeItem.scrollIntoView();
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
// Otherwise
|
|
257
|
-
else {
|
|
258
|
-
// Go through all the scrollbar directives
|
|
259
|
-
this._niceScrollbarDirectives.forEach((niceScrollbarDirective) => {
|
|
260
|
-
// Skip if not enabled
|
|
261
|
-
if (!niceScrollbarDirective.isEnabled()) {
|
|
262
|
-
return;
|
|
263
|
-
}
|
|
264
|
-
// Scroll to the active element
|
|
265
|
-
niceScrollbarDirective.scrollToElement(".nice-vertical-navigation-item-active", -120, true);
|
|
266
|
-
});
|
|
267
|
-
}
|
|
268
|
-
});
|
|
269
|
-
}
|
|
270
|
-
// -----------------------------------------------------------------------------------------------------
|
|
271
|
-
// @ Public methods
|
|
272
|
-
// -----------------------------------------------------------------------------------------------------
|
|
273
|
-
/**
|
|
274
|
-
* Open the navigation
|
|
275
|
-
*/
|
|
276
|
-
open() {
|
|
277
|
-
// Return if the navigation is already open
|
|
278
|
-
if (this.opened) {
|
|
279
|
-
return;
|
|
280
|
-
}
|
|
281
|
-
// Set the opened
|
|
282
|
-
this._toggleOpened(true);
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Close the navigation
|
|
286
|
-
*/
|
|
287
|
-
close() {
|
|
288
|
-
// Return if the navigation is already closed
|
|
289
|
-
if (!this.opened) {
|
|
290
|
-
return;
|
|
291
|
-
}
|
|
292
|
-
// Close the aside
|
|
293
|
-
this.closeAside();
|
|
294
|
-
// Set the opened
|
|
295
|
-
this._toggleOpened(false);
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Toggle the navigation
|
|
299
|
-
*/
|
|
300
|
-
toggle() {
|
|
301
|
-
// Toggle
|
|
302
|
-
if (this.opened) {
|
|
303
|
-
this.close();
|
|
304
|
-
}
|
|
305
|
-
else {
|
|
306
|
-
this.open();
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
/**
|
|
310
|
-
* Open the aside
|
|
311
|
-
*/
|
|
312
|
-
openAside(item) {
|
|
313
|
-
// Return if the item is disabled
|
|
314
|
-
if (item.disabled || !item.id) {
|
|
315
|
-
return;
|
|
316
|
-
}
|
|
317
|
-
// Open
|
|
318
|
-
this.activeAsideItemId = item.id;
|
|
319
|
-
// Show the aside overlay
|
|
320
|
-
this._showAsideOverlay();
|
|
321
|
-
// Mark for check
|
|
322
|
-
this._changeDetectorRef.markForCheck();
|
|
323
|
-
}
|
|
324
|
-
/**
|
|
325
|
-
* Close the aside
|
|
326
|
-
*/
|
|
327
|
-
closeAside() {
|
|
328
|
-
// Close
|
|
329
|
-
this.activeAsideItemId = null;
|
|
330
|
-
// Hide the aside overlay
|
|
331
|
-
this._hideAsideOverlay();
|
|
332
|
-
// Mark for check
|
|
333
|
-
this._changeDetectorRef.markForCheck();
|
|
334
|
-
}
|
|
335
|
-
/**
|
|
336
|
-
* Toggle the aside
|
|
337
|
-
*/
|
|
338
|
-
toggleAside(item) {
|
|
339
|
-
// Toggle
|
|
340
|
-
if (this.activeAsideItemId === item.id) {
|
|
341
|
-
this.closeAside();
|
|
342
|
-
}
|
|
343
|
-
else {
|
|
344
|
-
this.openAside(item);
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
// -----------------------------------------------------------------------------------------------------
|
|
348
|
-
// @ Private methods
|
|
349
|
-
// -----------------------------------------------------------------------------------------------------
|
|
350
|
-
/**
|
|
351
|
-
* Enable the animations
|
|
352
|
-
*
|
|
353
|
-
* @private
|
|
354
|
-
*/
|
|
355
|
-
_enableAnimations() {
|
|
356
|
-
// Return if the animations are already enabled
|
|
357
|
-
if (this._animationsEnabled) {
|
|
358
|
-
return;
|
|
359
|
-
}
|
|
360
|
-
// Enable the animations
|
|
361
|
-
this._animationsEnabled = true;
|
|
362
|
-
}
|
|
363
|
-
/**
|
|
364
|
-
* Disable the animations
|
|
365
|
-
*
|
|
366
|
-
* @private
|
|
367
|
-
*/
|
|
368
|
-
_disableAnimations() {
|
|
369
|
-
// Return if the animations are already disabled
|
|
370
|
-
if (!this._animationsEnabled) {
|
|
371
|
-
return;
|
|
372
|
-
}
|
|
373
|
-
// Disable the animations
|
|
374
|
-
this._animationsEnabled = false;
|
|
375
|
-
}
|
|
376
|
-
/**
|
|
377
|
-
* Show the overlay
|
|
378
|
-
*
|
|
379
|
-
* @private
|
|
380
|
-
*/
|
|
381
|
-
_showOverlay() {
|
|
382
|
-
// Return if there is already an overlay
|
|
383
|
-
if (this._asideOverlay) {
|
|
384
|
-
return;
|
|
385
|
-
}
|
|
386
|
-
// Create the overlay element
|
|
387
|
-
this._overlay = this._renderer2.createElement("div");
|
|
388
|
-
// Add a class to the overlay element
|
|
389
|
-
this._overlay.classList.add("nice-vertical-navigation-overlay");
|
|
390
|
-
// Add a class depending on the transparentOverlay option
|
|
391
|
-
if (this.transparentOverlay) {
|
|
392
|
-
this._overlay.classList.add("nice-vertical-navigation-overlay-transparent");
|
|
393
|
-
}
|
|
394
|
-
// Append the overlay to the parent of the navigation
|
|
395
|
-
this._renderer2.appendChild(this._elementRef.nativeElement.parentElement, this._overlay);
|
|
396
|
-
// Enable block scroll strategy
|
|
397
|
-
this._scrollStrategy.enable();
|
|
398
|
-
// Create the enter animation and attach it to the player
|
|
399
|
-
this._player = this._animationBuilder.build([
|
|
400
|
-
animate("300ms cubic-bezier(0.25, 0.8, 0.25, 1)", style({ opacity: 1 }))
|
|
401
|
-
]).create(this._overlay);
|
|
402
|
-
// Play the animation
|
|
403
|
-
this._player.play();
|
|
404
|
-
// Add an event listener to the overlay
|
|
405
|
-
this._overlay.addEventListener("click", this._handleOverlayClick);
|
|
406
|
-
}
|
|
407
|
-
/**
|
|
408
|
-
* Hide the overlay
|
|
409
|
-
*
|
|
410
|
-
* @private
|
|
411
|
-
*/
|
|
412
|
-
_hideOverlay() {
|
|
413
|
-
if (!this._overlay) {
|
|
414
|
-
return;
|
|
415
|
-
}
|
|
416
|
-
// Create the leave animation and attach it to the player
|
|
417
|
-
this._player = this._animationBuilder.build([
|
|
418
|
-
animate("300ms cubic-bezier(0.25, 0.8, 0.25, 1)", style({ opacity: 0 }))
|
|
419
|
-
]).create(this._overlay);
|
|
420
|
-
// Play the animation
|
|
421
|
-
this._player.play();
|
|
422
|
-
// Once the animation is done...
|
|
423
|
-
this._player.onDone(() => {
|
|
424
|
-
// If the overlay still exists...
|
|
425
|
-
if (this._overlay) {
|
|
426
|
-
// Remove the event listener
|
|
427
|
-
this._overlay.removeEventListener("click", this._handleOverlayClick);
|
|
428
|
-
// Remove the overlay
|
|
429
|
-
this._overlay.parentNode.removeChild(this._overlay);
|
|
430
|
-
this._overlay = null;
|
|
431
|
-
}
|
|
432
|
-
// Disable block scroll strategy
|
|
433
|
-
this._scrollStrategy.disable();
|
|
434
|
-
});
|
|
435
|
-
}
|
|
436
|
-
/**
|
|
437
|
-
* Show the aside overlay
|
|
438
|
-
*
|
|
439
|
-
* @private
|
|
440
|
-
*/
|
|
441
|
-
_showAsideOverlay() {
|
|
442
|
-
// Return if there is already an overlay
|
|
443
|
-
if (this._asideOverlay) {
|
|
444
|
-
return;
|
|
445
|
-
}
|
|
446
|
-
// Create the aside overlay element
|
|
447
|
-
this._asideOverlay = this._renderer2.createElement("div");
|
|
448
|
-
// Add a class to the aside overlay element
|
|
449
|
-
this._asideOverlay.classList.add("nice-vertical-navigation-aside-overlay");
|
|
450
|
-
// Append the aside overlay to the parent of the navigation
|
|
451
|
-
this._renderer2.appendChild(this._elementRef.nativeElement.parentElement, this._asideOverlay);
|
|
452
|
-
// Create the enter animation and attach it to the player
|
|
453
|
-
this._player =
|
|
454
|
-
this._animationBuilder
|
|
455
|
-
.build([
|
|
456
|
-
animate("300ms cubic-bezier(0.25, 0.8, 0.25, 1)", style({ opacity: 1 }))
|
|
457
|
-
]).create(this._asideOverlay);
|
|
458
|
-
// Play the animation
|
|
459
|
-
this._player.play();
|
|
460
|
-
// Add an event listener to the aside overlay
|
|
461
|
-
this._asideOverlay.addEventListener("click", this._handleAsideOverlayClick);
|
|
462
|
-
}
|
|
463
|
-
/**
|
|
464
|
-
* Hide the aside overlay
|
|
465
|
-
*
|
|
466
|
-
* @private
|
|
467
|
-
*/
|
|
468
|
-
_hideAsideOverlay() {
|
|
469
|
-
if (!this._asideOverlay) {
|
|
470
|
-
return;
|
|
471
|
-
}
|
|
472
|
-
// Create the leave animation and attach it to the player
|
|
473
|
-
this._player =
|
|
474
|
-
this._animationBuilder
|
|
475
|
-
.build([
|
|
476
|
-
animate("300ms cubic-bezier(0.25, 0.8, 0.25, 1)", style({ opacity: 0 }))
|
|
477
|
-
]).create(this._asideOverlay);
|
|
478
|
-
// Play the animation
|
|
479
|
-
this._player.play();
|
|
480
|
-
// Once the animation is done...
|
|
481
|
-
this._player.onDone(() => {
|
|
482
|
-
// If the aside overlay still exists...
|
|
483
|
-
if (this._asideOverlay) {
|
|
484
|
-
// Remove the event listener
|
|
485
|
-
this._asideOverlay.removeEventListener("click", this._handleAsideOverlayClick);
|
|
486
|
-
// Remove the aside overlay
|
|
487
|
-
this._asideOverlay.parentNode.removeChild(this._asideOverlay);
|
|
488
|
-
this._asideOverlay = null;
|
|
489
|
-
}
|
|
490
|
-
});
|
|
491
|
-
}
|
|
492
|
-
/**
|
|
493
|
-
* On mouseenter
|
|
494
|
-
*/
|
|
495
|
-
_onMouseenter() {
|
|
496
|
-
// Enable the animations
|
|
497
|
-
this._enableAnimations();
|
|
498
|
-
// Set the hovered
|
|
499
|
-
this.hovered = true;
|
|
500
|
-
this.hoveredChanged.next(this.hovered || this._forceHovered);
|
|
501
|
-
}
|
|
502
|
-
/**
|
|
503
|
-
* On mouseleave
|
|
504
|
-
*/
|
|
505
|
-
_onMouseleave() {
|
|
506
|
-
// Enable the animations
|
|
507
|
-
this._enableAnimations();
|
|
508
|
-
// Set the hovered
|
|
509
|
-
this.hovered = false;
|
|
510
|
-
this.hoveredChanged.next(this.hovered || this._forceHovered || this.hasHint);
|
|
511
|
-
}
|
|
512
|
-
/**
|
|
513
|
-
* Open/close the navigation
|
|
514
|
-
*
|
|
515
|
-
* @param open
|
|
516
|
-
* @private
|
|
517
|
-
*/
|
|
518
|
-
_toggleOpened(open) {
|
|
519
|
-
// Set the opened
|
|
520
|
-
this.opened = open;
|
|
521
|
-
// Enable the animations
|
|
522
|
-
this._enableAnimations();
|
|
523
|
-
// If the navigation opened, and the mode
|
|
524
|
-
// is 'over', show the overlay
|
|
525
|
-
if (this.mode === "over") {
|
|
526
|
-
if (this.opened) {
|
|
527
|
-
this._showOverlay();
|
|
528
|
-
}
|
|
529
|
-
else {
|
|
530
|
-
this._hideOverlay();
|
|
531
|
-
}
|
|
532
|
-
}
|
|
533
|
-
// Execute the observable
|
|
534
|
-
this.openedChanged.next(open);
|
|
535
|
-
}
|
|
536
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: NiceVerticalNavigationComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NiceNavigationService }, { token: i2.NiceUtilsService }, { token: i3.NiceTranslationContextService }, { token: i4.AnimationBuilder }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i5.Router }, { token: i6.ScrollStrategyOptions }, { token: i7.NiceNavigationHintService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
537
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.10", type: NiceVerticalNavigationComponent, selector: "nice-vertical-navigation", inputs: { name: "name", appearance: "appearance", autoCollapse: "autoCollapse", inner: "inner", mode: "mode", opened: "opened", hovered: "hovered", hasHint: "hasHint", position: "position", showTooltips: "showTooltips", transparentOverlay: "transparentOverlay", tooltipPosition: "tooltipPosition", translationContext: "translationContext", navigation: "navigation" }, outputs: { appearanceChanged: "appearanceChanged", modeChanged: "modeChanged", openedChanged: "openedChanged", hoveredChanged: "hoveredChanged", positionChanged: "positionChanged" }, host: { listeners: { "mouseenter": "_onMouseenter()", "mouseleave": "_onMouseleave()" }, properties: { "class": "this.classList", "style": "this.styleList" } }, providers: [NiceTranslationContextService], viewQueries: [{ propertyName: "_navigationContentEl", first: true, predicate: ["navigationContent"], descendants: true }, { propertyName: "niceScrollbarDirectives", predicate: NiceScrollbarDirective, descendants: true }], exportAs: ["niceVerticalNavigation"], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"nice-vertical-navigation-wrapper\">\n <!-- Header -->\n <div class=\"nice-vertical-navigation-header\">\n <ng-content select=\"[niceVerticalNavigationHeader]\"></ng-content>\n </div>\n\n <!-- Content -->\n <div\n class=\"nice-vertical-navigation-content\"\n niceScrollbar\n [niceScrollbarOptions]=\"{ wheelPropagation: inner, suppressScrollX: true }\"\n #navigationContent\n >\n <!-- Content header -->\n <div class=\"nice-vertical-navigation-content-header\">\n <ng-content select=\"[niceVerticalNavigationContentHeader]\"></ng-content>\n </div>\n\n <!-- Items -->\n <div *ngFor=\"let item of navigation; trackBy: trackByFn\" [@.disabled]=\"!animateNextNavChange\" @slideInRight>\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"!(item | niceShouldHide | async)\">\n <!-- Aside -->\n <nice-vertical-navigation-aside-item\n *ngIf=\"item.type === 'aside'\"\n [item]=\"item\"\n [name]=\"name\"\n [activeItemId]=\"activeAsideItemId\"\n [autoCollapse]=\"autoCollapse\"\n [skipChildren]=\"true\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n (click)=\"toggleAside(item)\"\n ></nice-vertical-navigation-aside-item>\n\n <!-- Basic -->\n <nice-vertical-navigation-basic-item\n *ngIf=\"item.type === 'basic'\"\n [item]=\"item\"\n [name]=\"name\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-basic-item>\n\n <!-- Collapsable -->\n <nice-vertical-navigation-collapsable-item\n *ngIf=\"item.type === 'collapsable'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-collapsable-item>\n\n <!-- Divider -->\n <nice-vertical-navigation-divider-item\n *ngIf=\"item.type === 'divider'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-divider-item>\n\n <!-- Group -->\n <nice-vertical-navigation-group-item\n *ngIf=\"item.type === 'group'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-group-item>\n\n <!-- Spacer -->\n <nice-vertical-navigation-spacer-item\n *ngIf=\"item.type === 'spacer'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-spacer-item>\n </ng-container>\n </div>\n\n <!-- Content footer -->\n <div class=\"nice-vertical-navigation-content-footer\">\n <ng-content select=\"[niceVerticalNavigationContentFooter]\"></ng-content>\n </div>\n\n </div>\n\n <!-- Footer -->\n <div class=\"nice-vertical-navigation-footer\">\n <ng-content select=\"[niceVerticalNavigationFooter]\"></ng-content>\n </div>\n</div>\n\n<!-- Aside -->\n<div\n class=\"nice-vertical-navigation-aside-wrapper\"\n *ngIf=\"activeAsideItemId\"\n niceScrollbar\n [niceScrollbarOptions]=\"{ wheelPropagation: false, suppressScrollX: true }\"\n [@fadeInLeft]=\"position === 'left'\"\n [@fadeInRight]=\"position === 'right'\"\n [@fadeOutLeft]=\"position === 'left'\"\n [@fadeOutRight]=\"position === 'right'\"\n>\n\n <!-- Items -->\n <ng-container *ngFor=\"let item of navigation; trackBy: trackByFn\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"(item.hidden && !item.hidden(item)) || !item.hidden\">\n <!-- Aside -->\n <nice-vertical-navigation-aside-item\n *ngIf=\"item.type === 'aside' && item.id === activeAsideItemId\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-aside-item>\n </ng-container>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NiceScrollbarDirective, selector: "[niceScrollbar]", inputs: ["niceScrollbar", "niceScrollbarOptions"], exportAs: ["niceScrollbar"] }, { kind: "component", type: i10.NiceVerticalNavigationAsideItemComponent, selector: "nice-vertical-navigation-aside-item", inputs: ["activeItemId", "autoCollapse", "item", "name", "showTooltips", "skipChildren", "tooltipPosition"] }, { kind: "component", type: i11.NiceVerticalNavigationBasicItemComponent, selector: "nice-vertical-navigation-basic-item", inputs: ["item", "name", "showTooltips", "tooltipPosition"] }, { kind: "component", type: i12.NiceVerticalNavigationCollapsableItemComponent, selector: "nice-vertical-navigation-collapsable-item", inputs: ["autoCollapse", "item", "name", "showTooltips", "tooltipPosition"] }, { kind: "component", type: i13.NiceVerticalNavigationDividerItemComponent, selector: "nice-vertical-navigation-divider-item", inputs: ["item", "name"] }, { kind: "component", type: i14.NiceVerticalNavigationGroupItemComponent, selector: "nice-vertical-navigation-group-item", inputs: ["autoCollapse", "item", "name", "showTooltips", "tooltipPosition"] }, { kind: "component", type: i15.NiceVerticalNavigationSpacerItemComponent, selector: "nice-vertical-navigation-spacer-item", inputs: ["item", "name"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i16.NiceShouldHidePipe, name: "niceShouldHide" }], animations: niceAnimations, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
538
|
-
}
|
|
539
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: NiceVerticalNavigationComponent, decorators: [{
|
|
540
|
-
type: Component,
|
|
541
|
-
args: [{ selector: "nice-vertical-navigation", animations: niceAnimations, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [NiceTranslationContextService], exportAs: "niceVerticalNavigation", template: "<div class=\"nice-vertical-navigation-wrapper\">\n <!-- Header -->\n <div class=\"nice-vertical-navigation-header\">\n <ng-content select=\"[niceVerticalNavigationHeader]\"></ng-content>\n </div>\n\n <!-- Content -->\n <div\n class=\"nice-vertical-navigation-content\"\n niceScrollbar\n [niceScrollbarOptions]=\"{ wheelPropagation: inner, suppressScrollX: true }\"\n #navigationContent\n >\n <!-- Content header -->\n <div class=\"nice-vertical-navigation-content-header\">\n <ng-content select=\"[niceVerticalNavigationContentHeader]\"></ng-content>\n </div>\n\n <!-- Items -->\n <div *ngFor=\"let item of navigation; trackBy: trackByFn\" [@.disabled]=\"!animateNextNavChange\" @slideInRight>\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"!(item | niceShouldHide | async)\">\n <!-- Aside -->\n <nice-vertical-navigation-aside-item\n *ngIf=\"item.type === 'aside'\"\n [item]=\"item\"\n [name]=\"name\"\n [activeItemId]=\"activeAsideItemId\"\n [autoCollapse]=\"autoCollapse\"\n [skipChildren]=\"true\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n (click)=\"toggleAside(item)\"\n ></nice-vertical-navigation-aside-item>\n\n <!-- Basic -->\n <nice-vertical-navigation-basic-item\n *ngIf=\"item.type === 'basic'\"\n [item]=\"item\"\n [name]=\"name\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-basic-item>\n\n <!-- Collapsable -->\n <nice-vertical-navigation-collapsable-item\n *ngIf=\"item.type === 'collapsable'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-collapsable-item>\n\n <!-- Divider -->\n <nice-vertical-navigation-divider-item\n *ngIf=\"item.type === 'divider'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-divider-item>\n\n <!-- Group -->\n <nice-vertical-navigation-group-item\n *ngIf=\"item.type === 'group'\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-group-item>\n\n <!-- Spacer -->\n <nice-vertical-navigation-spacer-item\n *ngIf=\"item.type === 'spacer'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-vertical-navigation-spacer-item>\n </ng-container>\n </div>\n\n <!-- Content footer -->\n <div class=\"nice-vertical-navigation-content-footer\">\n <ng-content select=\"[niceVerticalNavigationContentFooter]\"></ng-content>\n </div>\n\n </div>\n\n <!-- Footer -->\n <div class=\"nice-vertical-navigation-footer\">\n <ng-content select=\"[niceVerticalNavigationFooter]\"></ng-content>\n </div>\n</div>\n\n<!-- Aside -->\n<div\n class=\"nice-vertical-navigation-aside-wrapper\"\n *ngIf=\"activeAsideItemId\"\n niceScrollbar\n [niceScrollbarOptions]=\"{ wheelPropagation: false, suppressScrollX: true }\"\n [@fadeInLeft]=\"position === 'left'\"\n [@fadeInRight]=\"position === 'right'\"\n [@fadeOutLeft]=\"position === 'left'\"\n [@fadeOutRight]=\"position === 'right'\"\n>\n\n <!-- Items -->\n <ng-container *ngFor=\"let item of navigation; trackBy: trackByFn\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"(item.hidden && !item.hidden(item)) || !item.hidden\">\n <!-- Aside -->\n <nice-vertical-navigation-aside-item\n *ngIf=\"item.type === 'aside' && item.id === activeAsideItemId\"\n [item]=\"item\"\n [name]=\"name\"\n [autoCollapse]=\"autoCollapse\"\n [showTooltips]=\"showTooltips\"\n [tooltipPosition]=\"tooltipPosition\"\n ></nice-vertical-navigation-aside-item>\n </ng-container>\n </ng-container>\n</div>\n" }]
|
|
542
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.NiceNavigationService }, { type: i2.NiceUtilsService }, { type: i3.NiceTranslationContextService }, { type: i4.AnimationBuilder }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i5.Router }, { type: i6.ScrollStrategyOptions }, { type: i7.NiceNavigationHintService }], propDecorators: { name: [{
|
|
543
|
-
type: Input
|
|
544
|
-
}], appearance: [{
|
|
545
|
-
type: Input
|
|
546
|
-
}], autoCollapse: [{
|
|
547
|
-
type: Input
|
|
548
|
-
}], inner: [{
|
|
549
|
-
type: Input
|
|
550
|
-
}], mode: [{
|
|
551
|
-
type: Input
|
|
552
|
-
}], opened: [{
|
|
553
|
-
type: Input
|
|
554
|
-
}], hovered: [{
|
|
555
|
-
type: Input
|
|
556
|
-
}], hasHint: [{
|
|
557
|
-
type: Input
|
|
558
|
-
}], position: [{
|
|
559
|
-
type: Input
|
|
560
|
-
}], showTooltips: [{
|
|
561
|
-
type: Input
|
|
562
|
-
}], transparentOverlay: [{
|
|
563
|
-
type: Input
|
|
564
|
-
}], tooltipPosition: [{
|
|
565
|
-
type: Input
|
|
566
|
-
}], translationContext: [{
|
|
567
|
-
type: Input
|
|
568
|
-
}], appearanceChanged: [{
|
|
569
|
-
type: Output
|
|
570
|
-
}], modeChanged: [{
|
|
571
|
-
type: Output
|
|
572
|
-
}], openedChanged: [{
|
|
573
|
-
type: Output
|
|
574
|
-
}], hoveredChanged: [{
|
|
575
|
-
type: Output
|
|
576
|
-
}], positionChanged: [{
|
|
577
|
-
type: Output
|
|
578
|
-
}], _navigationContentEl: [{
|
|
579
|
-
type: ViewChild,
|
|
580
|
-
args: ["navigationContent"]
|
|
581
|
-
}], navigation: [{
|
|
582
|
-
type: Input
|
|
583
|
-
}], classList: [{
|
|
584
|
-
type: HostBinding,
|
|
585
|
-
args: ["class"]
|
|
586
|
-
}], styleList: [{
|
|
587
|
-
type: HostBinding,
|
|
588
|
-
args: ["style"]
|
|
589
|
-
}], niceScrollbarDirectives: [{
|
|
590
|
-
type: ViewChildren,
|
|
591
|
-
args: [NiceScrollbarDirective]
|
|
592
|
-
}], _onMouseenter: [{
|
|
593
|
-
type: HostListener,
|
|
594
|
-
args: ["mouseenter"]
|
|
595
|
-
}], _onMouseleave: [{
|
|
596
|
-
type: HostListener,
|
|
597
|
-
args: ["mouseleave"]
|
|
598
|
-
}] } });
|
|
599
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVydGljYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmljZS11aS1raXQtdjIvc3JjL2xpYi9jb21wb25lbnRzL25hdmlnYXRpb24vdmVydGljYWwvdmVydGljYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmljZS11aS1raXQtdjIvc3JjL2xpYi9jb21wb25lbnRzL25hdmlnYXRpb24vdmVydGljYWwvdmVydGljYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBbUIsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEYsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBa0IscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFFVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStC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O2dCQUlDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBSUMsa0JBQWtCO3NCQUR4QixLQUFLO2dCQUlDLGVBQWU7c0JBRHJCLEtBQUs7Z0JBSUMsa0JBQWtCO3NCQUR4QixLQUFLO2dCQUlVLGlCQUFpQjtzQkFEaEMsTUFBTTtnQkFJUyxXQUFXO3NCQUQxQixNQUFNO2dCQUlTLGFBQWE7c0JBRDVCLE1BQU07Z0JBSVMsY0FBYztzQkFEN0IsTUFBTTtnQkFJUyxlQUFlO3NCQUQ5QixNQUFNO2dCQUlDLG9CQUFvQjtzQkFEM0IsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBSW5CLFVBQVU7c0JBRHBCLEtBQUs7Z0JBb0RLLFNBQVM7c0JBRG5CLFdBQVc7dUJBQUMsT0FBTztnQkFvQlQsU0FBUztzQkFEbkIsV0FBVzt1QkFBQyxPQUFPO2dCQVdULHVCQUF1QjtzQkFEakMsWUFBWTt1QkFBQyxzQkFBc0I7Z0JBbWQ3QixhQUFhO3NCQURuQixZQUFZO3VCQUFDLFlBQVk7Z0JBY25CLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIEFuaW1hdGlvbkJ1aWxkZXIsIEFuaW1hdGlvblBsYXllciwgc3R5bGUgfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2NvZXJjaW9uXCI7XG5pbXBvcnQgeyBTY3JvbGxTdHJhdGVneSwgU2Nyb2xsU3RyYXRlZ3lPcHRpb25zIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9vdmVybGF5XCI7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXBcIjtcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IG1lcmdlLCBSZXBsYXlTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgZGVsYXksIGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBuaWNlQW5pbWF0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9hbmltYXRpb25zXCI7XG5pbXBvcnQgeyBOaWNlU2Nyb2xsYmFyRGlyZWN0aXZlIH0gZnJvbSBcIi4uLy4uLy4uL2RpcmVjdGl2ZXMvc2Nyb2xsYmFyXCI7XG5pbXBvcnQgeyBOaWNlVXRpbHNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3Byb3ZpZGVycy91dGlsc1wiO1xuaW1wb3J0IHsgTmljZU5hdmlnYXRpb25Db21wb25lbnQgfSBmcm9tIFwiLi4vbmF2aWdhdGlvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IE5pY2VOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gXCIuLi9uYXZpZ2F0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gICAgTmljZU5hdmlnYXRpb25JdGVtLFxuICAgIE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25BcHBlYXJhbmNlLFxuICAgIE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25Nb2RlLFxuICAgIE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25Qb3NpdGlvblxufSBmcm9tIFwiLi4vbmF2aWdhdGlvbi50eXBlc1wiO1xuaW1wb3J0IHsgTmljZU5hdmlnYXRpb25IaW50U2VydmljZSB9IGZyb20gXCIuLi9wcm92aWRlcnMvaGludC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBOaWNlVHJhbnNsYXRpb25Db250ZXh0U2VydmljZSB9IGZyb20gXCIuLi9wcm92aWRlcnMvdHJhbnNsYXRpb24tY29udGV4dC5zZXJ2aWNlXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvblwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vdmVydGljYWwuY29tcG9uZW50Lmh0bWxcIixcbiAgICBhbmltYXRpb25zOiBuaWNlQW5pbWF0aW9ucyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW05pY2VUcmFuc2xhdGlvbkNvbnRleHRTZXJ2aWNlXSxcbiAgICBleHBvcnRBczogXCJuaWNlVmVydGljYWxOYXZpZ2F0aW9uXCJcbn0pXG5leHBvcnQgY2xhc3MgTmljZVZlcnRpY2FsTmF2aWdhdGlvbkNvbXBvbmVudCBleHRlbmRzIE5pY2VOYXZpZ2F0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gICAgcHVibGljIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9pbm5lcjogQm9vbGVhbklucHV0O1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gICAgcHVibGljIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9vcGVuZWQ6IEJvb2xlYW5JbnB1dDtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICAgIHB1YmxpYyBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfdHJhbnNwYXJlbnRPdmVybGF5OiBCb29sZWFuSW5wdXQ7XG5cbiAgICBwcml2YXRlIF9mb3JjZUhvdmVyZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9hbmltYXRpb25zRW5hYmxlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2FzaWRlT3ZlcmxheTogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlQXNpZGVPdmVybGF5Q2xpY2s6IGFueTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVPdmVybGF5Q2xpY2s6IGFueTtcbiAgICBwcml2YXRlIF9vdmVybGF5OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIF9wbGF5ZXI6IEFuaW1hdGlvblBsYXllcjtcbiAgICBwcml2YXRlIF9zY3JvbGxTdHJhdGVneTogU2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLl9zY3JvbGxTdHJhdGVneU9wdGlvbnMuYmxvY2soKTtcbiAgICBwcml2YXRlIF9uaWNlU2Nyb2xsYmFyRGlyZWN0aXZlcyE6IFF1ZXJ5TGlzdDxOaWNlU2Nyb2xsYmFyRGlyZWN0aXZlPjtcbiAgICBwcml2YXRlIF9uaWNlU2Nyb2xsYmFyRGlyZWN0aXZlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nID0gdGhpcy5fbmljZVV0aWxzU2VydmljZS5yYW5kb21JZCgpO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXBwZWFyYW5jZTogTmljZVZlcnRpY2FsTmF2aWdhdGlvbkFwcGVhcmFuY2UgPSBcImRlZmF1bHRcIjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGF1dG9Db2xsYXBzZSA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbm5lciA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbW9kZTogTmljZVZlcnRpY2FsTmF2aWdhdGlvbk1vZGUgPSBcInNpZGVcIjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG9wZW5lZCA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBob3ZlcmVkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBoYXNIaW50ID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBwb3NpdGlvbjogTmljZVZlcnRpY2FsTmF2aWdhdGlvblBvc2l0aW9uID0gXCJsZWZ0XCI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93VG9vbHRpcHMgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRyYW5zcGFyZW50T3ZlcmxheSA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdG9vbHRpcFBvc2l0aW9uOiBUb29sdGlwUG9zaXRpb24gPSBcImFmdGVyXCI7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0cmFuc2xhdGlvbkNvbnRleHQ6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgYXBwZWFyYW5jZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25BcHBlYXJhbmNlPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IG1vZGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxOaWNlVmVydGljYWxOYXZpZ2F0aW9uTW9kZT4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBvcGVuZWRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IGhvdmVyZWRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IHBvc2l0aW9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TmljZVZlcnRpY2FsTmF2aWdhdGlvblBvc2l0aW9uPigpO1xuXG4gICAgQFZpZXdDaGlsZChcIm5hdmlnYXRpb25Db250ZW50XCIpXG4gICAgcHJpdmF0ZSBfbmF2aWdhdGlvbkNvbnRlbnRFbDogRWxlbWVudFJlZjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBuYXZpZ2F0aW9uKG5hdmlnYXRpb246IE5pY2VOYXZpZ2F0aW9uSXRlbVtdKSB7XG4gICAgICAgIHRoaXMuX25hdmlnYXRpb24gPSBuYXZpZ2F0aW9uO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gICAgcHVibGljIGdldCBuYXZpZ2F0aW9uKCk6IE5pY2VOYXZpZ2F0aW9uSXRlbVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb247XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBmb3JjZUhvdmVyZWQoZm9yY2VIb3ZlcmVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2ZvcmNlSG92ZXJlZCA9IGZvcmNlSG92ZXJlZDtcbiAgICAgICAgdGhpcy5ob3ZlcmVkQ2hhbmdlZC5uZXh0KCh0aGlzLmhvdmVyZWQgfHwgdGhpcy5fZm9yY2VIb3ZlcmVkKSB8fCB0aGlzLmhhc0hpbnQpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWN0aXZlQXNpZGVJdGVtSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyBvbkNvbGxhcHNhYmxlSXRlbUNvbGxhcHNlZCA9IG5ldyBSZXBsYXlTdWJqZWN0PE5pY2VOYXZpZ2F0aW9uSXRlbT4oMSk7XG4gICAgcHVibGljIG9uQ29sbGFwc2FibGVJdGVtRXhwYW5kZWQgPSBuZXcgUmVwbGF5U3ViamVjdDxOaWNlTmF2aWdhdGlvbkl0ZW0+KDEpO1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgX25pY2VOYXZpZ2F0aW9uU2VydmljZTogTmljZU5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBfbmljZVV0aWxzU2VydmljZTogTmljZVV0aWxzU2VydmljZSxcbiAgICAgICAgX3RyYW5zbGF0aW9uQ29udGV4dFNlcnZpY2U6IE5pY2VUcmFuc2xhdGlvbkNvbnRleHRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9hbmltYXRpb25CdWlsZGVyOiBBbmltYXRpb25CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9yZW5kZXJlcjI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgX3Njcm9sbFN0cmF0ZWd5T3B0aW9uczogU2Nyb2xsU3RyYXRlZ3lPcHRpb25zLFxuICAgICAgICBwcml2YXRlIF9oaW50U2VydmljZTogTmljZU5hdmlnYXRpb25IaW50U2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihfY2hhbmdlRGV0ZWN0b3JSZWYsIF9uaWNlTmF2aWdhdGlvblNlcnZpY2UsIF9uaWNlVXRpbHNTZXJ2aWNlLCBfdHJhbnNsYXRpb25Db250ZXh0U2VydmljZSk7XG5cbiAgICAgICAgdGhpcy5faGFuZGxlQXNpZGVPdmVybGF5Q2xpY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQXNpZGUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5faGFuZGxlT3ZlcmxheUNsaWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQCBBY2Nlc3NvcnNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLyoqXG4gICAgICogSG9zdCBiaW5kaW5nIGZvciBjb21wb25lbnQgY2xhc3Nlc1xuICAgICAqL1xuICAgIEBIb3N0QmluZGluZyhcImNsYXNzXCIpXG4gICAgcHVibGljIGdldCBjbGFzc0xpc3QoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWFuaW1hdGlvbnMtZW5hYmxlZFwiOiB0aGlzLl9hbmltYXRpb25zRW5hYmxlZCxcbiAgICAgICAgICAgIFtgbmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWFwcGVhcmFuY2UtJHt0aGlzLmFwcGVhcmFuY2V9YF06IHRydWUsXG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1ob3ZlclwiOiB0aGlzLmhvdmVyZWQgfHwgdGhpcy5fZm9yY2VIb3ZlcmVkLFxuICAgICAgICAgICAgXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24taW5uZXJcIjogdGhpcy5pbm5lcixcbiAgICAgICAgICAgIFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLW1vZGUtb3ZlclwiOiB0aGlzLm1vZGUgPT09IFwib3ZlclwiLFxuICAgICAgICAgICAgXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tbW9kZS1zaWRlXCI6IHRoaXMubW9kZSA9PT0gXCJzaWRlXCIsXG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1vcGVuZWRcIjogdGhpcy5vcGVuZWQsXG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1wb3NpdGlvbi1sZWZ0XCI6IHRoaXMucG9zaXRpb24gPT09IFwibGVmdFwiLFxuICAgICAgICAgICAgXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tcG9zaXRpb24tcmlnaHRcIjogdGhpcy5wb3NpdGlvbiA9PT0gXCJyaWdodFwiLFxuICAgICAgICAgICAgXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24taGFzLWhpbnRcIjogdGhpcy5oYXNIaW50XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSG9zdCBiaW5kaW5nIGZvciBjb21wb25lbnQgaW5saW5lIHN0eWxlc1xuICAgICAqL1xuICAgIEBIb3N0QmluZGluZyhcInN0eWxlXCIpXG4gICAgcHVibGljIGdldCBzdHlsZUxpc3QoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFwidmlzaWJpbGl0eVwiOiB0aGlzLm9wZW5lZCA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIlxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHRlciBmb3IgbmljZVNjcm9sbGJhckRpcmVjdGl2ZXNcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKE5pY2VTY3JvbGxiYXJEaXJlY3RpdmUpXG4gICAgcHVibGljIHNldCBuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlcyhuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlczogUXVlcnlMaXN0PE5pY2VTY3JvbGxiYXJEaXJlY3RpdmU+KSB7XG4gICAgICAgIC8vIFN0b3JlIHRoZSBkaXJlY3RpdmVzXG4gICAgICAgIHRoaXMuX25pY2VTY3JvbGxiYXJEaXJlY3RpdmVzID0gbmljZVNjcm9sbGJhckRpcmVjdGl2ZXM7XG5cbiAgICAgICAgLy8gUmV0dXJuIGlmIHRoZXJlIGFyZSBubyBkaXJlY3RpdmVzXG4gICAgICAgIGlmIChuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVuc3Vic2NyaWJlIHRoZSBwcmV2aW91cyBzdWJzY3JpcHRpb25zXG4gICAgICAgIGlmICh0aGlzLl9uaWNlU2Nyb2xsYmFyRGlyZWN0aXZlc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fbmljZVNjcm9sbGJhckRpcmVjdGl2ZXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgc2Nyb2xsYmFycyBvbiBjb2xsYXBzYWJsZSBpdGVtcycgY29sbGFwc2UvZXhwYW5kXG4gICAgICAgIHRoaXMuX25pY2VTY3JvbGxiYXJEaXJlY3RpdmVzU3Vic2NyaXB0aW9uID1cbiAgICAgICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgICAgIHRoaXMub25Db2xsYXBzYWJsZUl0ZW1Db2xsYXBzZWQsXG4gICAgICAgICAgICAgICAgdGhpcy5vbkNvbGxhcHNhYmxlSXRlbUV4cGFuZGVkXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCksXG4gICAgICAgICAgICAgICAgICAgIGRlbGF5KDI1MClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIHRoZSBzY3JvbGxiYXJzIGFuZCB1cGRhdGUgdGhlbVxuICAgICAgICAgICAgICAgICAgICBuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlcy5mb3JFYWNoKChuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlLnVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEAgTGlmZWN5Y2xlIGhvb2tzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8qKlxuICAgICAqIE9uIGNoYW5nZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaGFuZ2VzXG4gICAgICovXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XG5cbiAgICAgICAgLy8gQXBwZWFyYW5jZVxuICAgICAgICBpZiAoXCJhcHBlYXJhbmNlXCIgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgLy8gRXhlY3V0ZSB0aGUgb2JzZXJ2YWJsZVxuICAgICAgICAgICAgdGhpcy5hcHBlYXJhbmNlQ2hhbmdlZC5uZXh0KGNoYW5nZXMuYXBwZWFyYW5jZS5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW5uZXJcbiAgICAgICAgaWYgKFwiaW5uZXJcIiBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICAvLyBDb2VyY2UgdGhlIHZhbHVlIHRvIGEgYm9vbGVhblxuICAgICAgICAgICAgdGhpcy5pbm5lciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShjaGFuZ2VzLmlubmVyLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNb2RlXG4gICAgICAgIGlmIChcIm1vZGVcIiBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIHByZXZpb3VzIGFuZCBjdXJyZW50IHZhbHVlc1xuICAgICAgICAgICAgY29uc3QgY3VycmVudE1vZGUgPSBjaGFuZ2VzLm1vZGUuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgY29uc3QgcHJldmlvdXNNb2RlID0gY2hhbmdlcy5tb2RlLnByZXZpb3VzVmFsdWU7XG5cbiAgICAgICAgICAgIC8vIERpc2FibGUgdGhlIGFuaW1hdGlvbnNcbiAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVBbmltYXRpb25zKCk7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBtb2RlIGNoYW5nZXM6ICdvdmVyIC0+IHNpZGUnXG4gICAgICAgICAgICBpZiAocHJldmlvdXNNb2RlID09PSBcIm92ZXJcIiAmJiBjdXJyZW50TW9kZSA9PT0gXCJzaWRlXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBIaWRlIHRoZSBvdmVybGF5XG4gICAgICAgICAgICAgICAgdGhpcy5faGlkZU92ZXJsYXkoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgdGhlIG1vZGUgY2hhbmdlczogJ3NpZGUgLT4gb3ZlcidcbiAgICAgICAgICAgIGlmIChwcmV2aW91c01vZGUgPT09IFwic2lkZVwiICYmIGN1cnJlbnRNb2RlID09PSBcIm92ZXJcIikge1xuICAgICAgICAgICAgICAgIC8vIENsb3NlIHRoZSBhc2lkZVxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VBc2lkZSgpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5hdmlnYXRpb24gaXMgb3BlbmVkXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3BlbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNob3cgdGhlIG92ZXJsYXlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hvd092ZXJsYXkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIG9ic2VydmFibGVcbiAgICAgICAgICAgIHRoaXMubW9kZUNoYW5nZWQubmV4dChjdXJyZW50TW9kZSk7XG5cbiAgICAgICAgICAgIC8vIEVuYWJsZSB0aGUgYW5pbWF0aW9ucyBhZnRlciBhIGRlbGF5XG4gICAgICAgICAgICAvLyBUaGUgZGVsYXkgbXVzdCBiZSBiaWdnZXIgdGhhbiB0aGUgY3VycmVudCB0cmFuc2l0aW9uLWR1cmF0aW9uXG4gICAgICAgICAgICAvLyB0byBtYWtlIHN1cmUgbm90aGluZyB3aWxsIGJlIGFuaW1hdGVkIHdoaWxlIHRoZSBtb2RlIGNoYW5naW5nXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbmFibGVBbmltYXRpb25zKCk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3BlbmVkXG4gICAgICAgIGlmIChcIm9wZW5lZFwiIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIC8vIENvZXJjZSB0aGUgdmFsdWUgdG8gYSBib29sZWFuXG4gICAgICAgICAgICB0aGlzLm9wZW5lZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShjaGFuZ2VzLm9wZW5lZC5jdXJyZW50VmFsdWUpO1xuXG4gICAgICAgICAgICAvLyBPcGVuL2Nsb3NlIHRoZSBuYXZpZ2F0aW9uXG4gICAgICAgICAgICB0aGlzLl90b2dnbGVPcGVuZWQodGhpcy5vcGVuZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUG9zaXRpb25cbiAgICAgICAgaWYgKFwicG9zaXRpb25cIiBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICAvLyBFeGVjdXRlIHRoZSBvYnNlcnZhYmxlXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uQ2hhbmdlZC5uZXh0KGNoYW5nZXMucG9zaXRpb24uY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRyYW5zcGFyZW50IG92ZXJsYXlcbiAgICAgICAgaWYgKFwidHJhbnNwYXJlbnRPdmVybGF5XCIgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgLy8gQ29lcmNlIHRoZSB2YWx1ZSB0byBhIGJvb2xlYW5cbiAgICAgICAgICAgIHRoaXMudHJhbnNwYXJlbnRPdmVybGF5ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KGNoYW5nZXMudHJhbnNwYXJlbnRPdmVybGF5LmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBpbml0XG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbmFtZSBpbnB1dCBpcyBub3QgYW4gZW1wdHkgc3RyaW5nXG4gICAgICAgIGlmICh0aGlzLm5hbWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IHRoaXMuX25pY2VVdGlsc1NlcnZpY2UucmFuZG9tSWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN1YnNjcmliZSB0byB0aGUgJ05hdmlnYXRpb25FbmQnIGV2ZW50XG4gICAgICAgIHRoaXMuX3JvdXRlci5ldmVudHNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcihldmVudCA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBtb2RlIGlzICdvdmVyJyBhbmQgdGhlIG5hdmlnYXRpb24gaXMgb3BlbmVkLi4uXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gXCJvdmVyXCIgJiYgdGhpcy5vcGVuZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIG5hdmlnYXRpb25cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBtb2RlIGlzICdzaWRlJyBhbmQgdGhlIGFzaWRlIGlzIGFjdGl2ZS4uLlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwic2lkZVwiICYmIHRoaXMuYWN0aXZlQXNpZGVJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGFzaWRlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VBc2lkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2hpbnRTZXJ2aWNlLmhhc0FjdGl2ZUhpbnQkLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSkuc3Vic2NyaWJlKGhhc0hpbnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYXNIaW50ID0gaGFzSGludDtcbiAgICAgICAgICAgIHRoaXMuaG92ZXJlZENoYW5nZWQubmV4dCgodGhpcy5ob3ZlcmVkIHx8IHRoaXMuX2ZvcmNlSG92ZXJlZCkgfHwgdGhpcy5oYXNIaW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWZ0ZXIgdmlldyBpbml0XG4gICAgICovXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgIC8vIFJldHVybiBpZiAnbmF2aWdhdGlvbiBjb250ZW50JyBlbGVtZW50IGRvZXMgbm90IGV4aXN0XG4gICAgICAgICAgICBpZiAoIXRoaXMuX25hdmlnYXRpb25Db250ZW50RWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmICduYXZpZ2F0aW9uIGNvbnRlbnQnIGVsZW1lbnQgZG9lc24ndCBoYXZlXG4gICAgICAgICAgICAvLyBwZXJmZWN0IHNjcm9sbGJhciBhY3RpdmF0ZWQgb24gaXQuLi5cbiAgICAgICAgICAgIGlmICghdGhpcy5fbmF2aWdhdGlvbkNvbnRlbnRFbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcInBzXCIpKSB7XG4gICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgYWN0aXZlIGl0ZW1cbiAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVJdGVtID0gdGhpcy5fbmF2aWdhdGlvbkNvbnRlbnRFbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIubmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWl0ZW0tYWN0aXZlXCIpO1xuXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGFjdGl2ZSBpdGVtIGV4aXN0cywgc2Nyb2xsIGl0IGludG8gdmlld1xuICAgICAgICAgICAgICAgIGlmIChhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0ZW0uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBPdGhlcndpc2VcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEdvIHRocm91Z2ggYWxsIHRoZSBzY3JvbGxiYXIgZGlyZWN0aXZlc1xuICAgICAgICAgICAgICAgIHRoaXMuX25pY2VTY3JvbGxiYXJEaXJlY3RpdmVzLmZvckVhY2goKG5pY2VTY3JvbGxiYXJEaXJlY3RpdmUpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAvLyBTa2lwIGlmIG5vdCBlbmFibGVkXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmljZVNjcm9sbGJhckRpcmVjdGl2ZS5pc0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gU2Nyb2xsIHRvIHRoZSBhY3RpdmUgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICBuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlLnNjcm9sbFRvRWxlbWVudChcIi5uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24taXRlbS1hY3RpdmVcIiwgLTEyMCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQCBQdWJsaWMgbWV0aG9kc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvKipcbiAgICAgKiBPcGVuIHRoZSBuYXZpZ2F0aW9uXG4gICAgICovXG4gICAgcHVibGljIG9wZW4oKTogdm9pZCB7XG4gICAgICAgIC8vIFJldHVybiBpZiB0aGUgbmF2aWdhdGlvbiBpcyBhbHJlYWR5IG9wZW5cbiAgICAgICAgaWYgKHRoaXMub3BlbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgdGhlIG9wZW5lZFxuICAgICAgICB0aGlzLl90b2dnbGVPcGVuZWQodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2UgdGhlIG5hdmlnYXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIC8vIFJldHVybiBpZiB0aGUgbmF2aWdhdGlvbiBpcyBhbHJlYWR5IGNsb3NlZFxuICAgICAgICBpZiAoIXRoaXMub3BlbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDbG9zZSB0aGUgYXNpZGVcbiAgICAgICAgdGhpcy5jbG9zZUFzaWRlKCk7XG5cbiAgICAgICAgLy8gU2V0IHRoZSBvcGVuZWRcbiAgICAgICAgdGhpcy5fdG9nZ2xlT3BlbmVkKGZhbHNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGUgdGhlIG5hdmlnYXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlKCk6IHZvaWQge1xuICAgICAgICAvLyBUb2dnbGVcbiAgICAgICAgaWYgKHRoaXMub3BlbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW4gdGhlIGFzaWRlXG4gICAgICovXG4gICAgcHVibGljIG9wZW5Bc2lkZShpdGVtOiBOaWNlTmF2aWdhdGlvbkl0ZW0pOiB2b2lkIHtcbiAgICAgICAgLy8gUmV0dXJuIGlmIHRoZSBpdGVtIGlzIGRpc2FibGVkXG4gICAgICAgIGlmIChpdGVtLmRpc2FibGVkIHx8ICFpdGVtLmlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPcGVuXG4gICAgICAgIHRoaXMuYWN0aXZlQXNpZGVJdGVtSWQgPSBpdGVtLmlkO1xuXG4gICAgICAgIC8vIFNob3cgdGhlIGFzaWRlIG92ZXJsYXlcbiAgICAgICAgdGhpcy5fc2hvd0FzaWRlT3ZlcmxheSgpO1xuXG4gICAgICAgIC8vIE1hcmsgZm9yIGNoZWNrXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlIHRoZSBhc2lkZVxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zZUFzaWRlKCk6IHZvaWQge1xuICAgICAgICAvLyBDbG9zZVxuICAgICAgICB0aGlzLmFjdGl2ZUFzaWRlSXRlbUlkID0gbnVsbDtcblxuICAgICAgICAvLyBIaWRlIHRoZSBhc2lkZSBvdmVybGF5XG4gICAgICAgIHRoaXMuX2hpZGVBc2lkZU92ZXJsYXkoKTtcblxuICAgICAgICAvLyBNYXJrIGZvciBjaGVja1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGUgdGhlIGFzaWRlXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZUFzaWRlKGl0ZW06IE5pY2VOYXZpZ2F0aW9uSXRlbSk6IHZvaWQge1xuICAgICAgICAvLyBUb2dnbGVcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlQXNpZGVJdGVtSWQgPT09IGl0ZW0uaWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VBc2lkZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcGVuQXNpZGUoaXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEAgUHJpdmF0ZSBtZXRob2RzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9lbmFibGVBbmltYXRpb25zKCk6IHZvaWQge1xuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlIGFuaW1hdGlvbnMgYXJlIGFscmVhZHkgZW5hYmxlZFxuICAgICAgICBpZiAodGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVuYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgICAgICB0aGlzLl9hbmltYXRpb25zRW5hYmxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9kaXNhYmxlQW5pbWF0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgLy8gUmV0dXJuIGlmIHRoZSBhbmltYXRpb25zIGFyZSBhbHJlYWR5IGRpc2FibGVkXG4gICAgICAgIGlmICghdGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERpc2FibGUgdGhlIGFuaW1hdGlvbnNcbiAgICAgICAgdGhpcy5fYW5pbWF0aW9uc0VuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHRoZSBvdmVybGF5XG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX3Nob3dPdmVybGF5KCk6IHZvaWQge1xuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlcmUgaXMgYWxyZWFkeSBhbiBvdmVybGF5XG4gICAgICAgIGlmICh0aGlzLl9hc2lkZU92ZXJsYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgb3ZlcmxheSBlbGVtZW50XG4gICAgICAgIHRoaXMuX292ZXJsYXkgPSB0aGlzLl9yZW5kZXJlcjIuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgICAgICAvLyBBZGQgYSBjbGFzcyB0byB0aGUgb3ZlcmxheSBlbGVtZW50XG4gICAgICAgIHRoaXMuX292ZXJsYXkuY2xhc3NMaXN0LmFkZChcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1vdmVybGF5XCIpO1xuXG4gICAgICAgIC8vIEFkZCBhIGNsYXNzIGRlcGVuZGluZyBvbiB0aGUgdHJhbnNwYXJlbnRPdmVybGF5IG9wdGlvblxuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudE92ZXJsYXkpIHtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXkuY2xhc3NMaXN0LmFkZChcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1vdmVybGF5LXRyYW5zcGFyZW50XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQXBwZW5kIHRoZSBvdmVybGF5IHRvIHRoZSBwYXJlbnQgb2YgdGhlIG5hdmlnYXRpb25cbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LCB0aGlzLl9vdmVybGF5KTtcblxuICAgICAgICAvLyBFbmFibGUgYmxvY2sgc2Nyb2xsIHN0cmF0ZWd5XG4gICAgICAgIHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmVuYWJsZSgpO1xuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgZW50ZXIgYW5pbWF0aW9uIGFuZCBhdHRhY2ggaXQgdG8gdGhlIHBsYXllclxuICAgICAgICB0aGlzLl9wbGF5ZXIgPSB0aGlzLl9hbmltYXRpb25CdWlsZGVyLmJ1aWxkKFtcbiAgICAgICAgICAgIGFuaW1hdGUoXCIzMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKVwiLCBzdHlsZSh7b3BhY2l0eTogMX0pKVxuICAgICAgICBdKS5jcmVhdGUodGhpcy5fb3ZlcmxheSk7XG5cbiAgICAgICAgLy8gUGxheSB0aGUgYW5pbWF0aW9uXG4gICAgICAgIHRoaXMuX3BsYXllci5wbGF5KCk7XG5cbiAgICAgICAgLy8gQWRkIGFuIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBvdmVybGF5XG4gICAgICAgIHRoaXMuX292ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX2hhbmRsZU92ZXJsYXlDbGljayk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGlkZSB0aGUgb3ZlcmxheVxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9oaWRlT3ZlcmxheSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9vdmVybGF5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgdGhlIGxlYXZlIGFuaW1hdGlvbiBhbmQgYXR0YWNoIGl0IHRvIHRoZSBwbGF5ZXJcbiAgICAgICAgdGhpcy5fcGxheWVyID0gdGhpcy5fYW5pbWF0aW9uQnVpbGRlci5idWlsZChbXG4gICAgICAgICAgICBhbmltYXRlKFwiMzAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSlcIiwgc3R5bGUoe29wYWNpdHk6IDB9KSlcbiAgICAgICAgXSkuY3JlYXRlKHRoaXMuX292ZXJsYXkpO1xuXG4gICAgICAgIC8vIFBsYXkgdGhlIGFuaW1hdGlvblxuICAgICAgICB0aGlzLl9wbGF5ZXIucGxheSgpO1xuXG4gICAgICAgIC8vIE9uY2UgdGhlIGFuaW1hdGlvbiBpcyBkb25lLi4uXG4gICAgICAgIHRoaXMuX3BsYXllci5vbkRvbmUoKCkgPT4ge1xuXG4gICAgICAgICAgICAvLyBJZiB0aGUgb3ZlcmxheSBzdGlsbCBleGlzdHMuLi5cbiAgICAgICAgICAgIGlmICh0aGlzLl9vdmVybGF5KSB7XG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBldmVudCBsaXN0ZW5lclxuICAgICAgICAgICAgICAgIHRoaXMuX292ZXJsYXkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX2hhbmRsZU92ZXJsYXlDbGljayk7XG5cbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIG92ZXJsYXlcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fb3ZlcmxheSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheSA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIERpc2FibGUgYmxvY2sgc2Nyb2xsIHN0cmF0ZWd5XG4gICAgICAgICAgICB0aGlzLl9zY3JvbGxTdHJhdGVneS5kaXNhYmxlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3cgdGhlIGFzaWRlIG92ZXJsYXlcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2hvd0FzaWRlT3ZlcmxheSgpOiB2b2lkIHtcbiAgICAgICAgLy8gUmV0dXJuIGlmIHRoZXJlIGlzIGFscmVhZHkgYW4gb3ZlcmxheVxuICAgICAgICBpZiAodGhpcy5fYXNpZGVPdmVybGF5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgdGhlIGFzaWRlIG92ZXJsYXkgZWxlbWVudFxuICAgICAgICB0aGlzLl9hc2lkZU92ZXJsYXkgPSB0aGlzLl9yZW5kZXJlcjIuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgICAgICAvLyBBZGQgYSBjbGFzcyB0byB0aGUgYXNpZGUgb3ZlcmxheSBlbGVtZW50XG4gICAgICAgIHRoaXMuX2FzaWRlT3ZlcmxheS5jbGFzc0xpc3QuYWRkKFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWFzaWRlLW92ZXJsYXlcIik7XG5cbiAgICAgICAgLy8gQXBwZW5kIHRoZSBhc2lkZSBvdmVybGF5IHRvIHRoZSBwYXJlbnQgb2YgdGhlIG5hdmlnYXRpb25cbiAgICAgICAgdGhpcy5fcmVuZGVyZXIyLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LCB0aGlzLl9hc2lkZU92ZXJsYXkpO1xuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgZW50ZXIgYW5pbWF0aW9uIGFuZCBhdHRhY2ggaXQgdG8gdGhlIHBsYXllclxuICAgICAgICB0aGlzLl9wbGF5ZXIgPVxuICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uQnVpbGRlclxuICAgICAgICAgICAgICAgIC5idWlsZChbXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGUoXCIzMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKVwiLCBzdHlsZSh7b3BhY2l0eTogMX0pKVxuICAgICAgICAgICAgICAgIF0pLmNyZWF0ZSh0aGlzLl9hc2lkZU92ZXJsYXkpO1xuXG4gICAgICAgIC8vIFBsYXkgdGhlIGFuaW1hdGlvblxuICAgICAgICB0aGlzLl9wbGF5ZXIucGxheSgpO1xuXG4gICAgICAgIC8vIEFkZCBhbiBldmVudCBsaXN0ZW5lciB0byB0aGUgYXNpZGUgb3ZlcmxheVxuICAgICAgICB0aGlzLl9hc2lkZU92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuX2hhbmRsZUFzaWRlT3ZlcmxheUNsaWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIaWRlIHRoZSBhc2lkZSBvdmVybGF5XG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2hpZGVBc2lkZU92ZXJsYXkoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fYXNpZGVPdmVybGF5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgdGhlIGxlYXZlIGFuaW1hdGlvbiBhbmQgYXR0YWNoIGl0IHRvIHRoZSBwbGF5ZXJcbiAgICAgICAgdGhpcy5fcGxheWVyID1cbiAgICAgICAgICAgIHRoaXMuX2FuaW1hdGlvbkJ1aWxkZXJcbiAgICAgICAgICAgICAgICAuYnVpbGQoW1xuICAgICAgICAgICAgICAgICAgICBhbmltYXRlKFwiMzAwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSlcIiwgc3R5bGUoe29wYWNpdHk6IDB9KSlcbiAgICAgICAgICAgICAgICBdKS5jcmVhdGUodGhpcy5fYXNpZGVPdmVybGF5KTtcblxuICAgICAgICAvLyBQbGF5IHRoZSBhbmltYXRpb25cbiAgICAgICAgdGhpcy5fcGxheWVyLnBsYXkoKTtcblxuICAgICAgICAvLyBPbmNlIHRoZSBhbmltYXRpb24gaXMgZG9uZS4uLlxuICAgICAgICB0aGlzLl9wbGF5ZXIub25Eb25lKCgpID0+IHtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIGFzaWRlIG92ZXJsYXkgc3RpbGwgZXhpc3RzLi4uXG4gICAgICAgICAgICBpZiAodGhpcy5fYXNpZGVPdmVybGF5KSB7XG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBldmVudCBsaXN0ZW5lclxuICAgICAgICAgICAgICAgIHRoaXMuX2FzaWRlT3ZlcmxheS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGFuZGxlQXNpZGVPdmVybGF5Q2xpY2spO1xuXG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBhc2lkZSBvdmVybGF5XG4gICAgICAgICAgICAgICAgdGhpcy5fYXNpZGVPdmVybGF5LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fYXNpZGVPdmVybGF5KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hc2lkZU92ZXJsYXkgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBtb3VzZWVudGVyXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIilcbiAgICBwdWJsaWMgX29uTW91c2VlbnRlcigpOiB2b2lkIHtcbiAgICAgICAgLy8gRW5hYmxlIHRoZSBhbmltYXRpb25zXG4gICAgICAgIHRoaXMuX2VuYWJsZUFuaW1hdGlvbnMoKTtcblxuICAgICAgICAvLyBTZXQgdGhlIGhvdmVyZWRcbiAgICAgICAgdGhpcy5ob3ZlcmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ob3ZlcmVkQ2hhbmdlZC5uZXh0KHRoaXMuaG92ZXJlZCB8fCB0aGlzLl9mb3JjZUhvdmVyZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIG1vdXNlbGVhdmVcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKFwibW91c2VsZWF2ZVwiKVxuICAgIHB1YmxpYyBfb25Nb3VzZWxlYXZlKCk6IHZvaWQge1xuICAgICAgICAvLyBFbmFibGUgdGhlIGFuaW1hdGlvbnNcbiAgICAgICAgdGhpcy5fZW5hYmxlQW5pbWF0aW9ucygpO1xuXG4gICAgICAgIC8vIFNldCB0aGUgaG92ZXJlZFxuICAgICAgICB0aGlzLmhvdmVyZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ob3ZlcmVkQ2hhbmdlZC5uZXh0KHRoaXMuaG92ZXJlZCB8fCB0aGlzLl9mb3JjZUhvdmVyZWQgfHwgdGhpcy5oYXNIaW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVuL2Nsb3NlIHRoZSBuYXZpZ2F0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3BlblxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfdG9nZ2xlT3BlbmVkKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgLy8gU2V0IHRoZSBvcGVuZWRcbiAgICAgICAgdGhpcy5vcGVuZWQgPSBvcGVuO1xuXG4gICAgICAgIC8vIEVuYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgICAgICB0aGlzLl9lbmFibGVBbmltYXRpb25zKCk7XG5cbiAgICAgICAgLy8gSWYgdGhlIG5hdmlnYXRpb24gb3BlbmVkLCBhbmQgdGhlIG1vZGVcbiAgICAgICAgLy8gaXMgJ292ZXInLCBzaG93IHRoZSBvdmVybGF5XG4gICAgICAgIGlmICh0aGlzLm1vZGUgPT09IFwib3ZlclwiKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG93T3ZlcmxheSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWRlT3ZlcmxheSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXhlY3V0ZSB0aGUgb2JzZXJ2YWJsZVxuICAgICAgICB0aGlzLm9wZW5lZENoYW5nZWQubmV4dChvcGVuKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLXdyYXBwZXJcIj5cbiAgICA8IS0tIEhlYWRlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWhlYWRlclwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbmljZVZlcnRpY2FsTmF2aWdhdGlvbkhlYWRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENvbnRlbnQgLS0+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1jb250ZW50XCJcbiAgICAgICAgbmljZVNjcm9sbGJhclxuICAgICAgICBbbmljZVNjcm9sbGJhck9wdGlvbnNdPVwieyB3aGVlbFByb3BhZ2F0aW9uOiBpbm5lciwgc3VwcHJlc3NTY3JvbGxYOiB0cnVlIH1cIlxuICAgICAgICAjbmF2aWdhdGlvbkNvbnRlbnRcbiAgICA+XG4gICAgICAgIDwhLS0gQ29udGVudCBoZWFkZXIgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tY29udGVudC1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltuaWNlVmVydGljYWxOYXZpZ2F0aW9uQ29udGVudEhlYWRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gSXRlbXMgLS0+XG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbmF2aWdhdGlvbjsgdHJhY2tCeTogdHJhY2tCeUZuXCIgW0AuZGlzYWJsZWRdPVwiIWFuaW1hdGVOZXh0TmF2Q2hhbmdlXCIgQHNsaWRlSW5SaWdodD5cbiAgICAgICAgICAgIDwhLS0gU2tpcCB0aGUgaGlkZGVuIGl0ZW1zIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEoaXRlbSB8IG5pY2VTaG91bGRIaWRlIHwgYXN5bmMpXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBBc2lkZSAtLT5cbiAgICAgICAgICAgICAgICA8bmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWFzaWRlLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdhc2lkZSdcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtSWRdPVwiYWN0aXZlQXNpZGVJdGVtSWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXV0b0NvbGxhcHNlXT1cImF1dG9Db2xsYXBzZVwiXG4gICAgICAgICAgICAgICAgICAgIFtza2lwQ2hpbGRyZW5dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcHNdPVwic2hvd1Rvb2x0aXBzXCJcbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQXNpZGUoaXRlbSlcIlxuICAgICAgICAgICAgICAgID48L25pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1hc2lkZS1pdGVtPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBCYXNpYyAtLT5cbiAgICAgICAgICAgICAgICA8bmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWJhc2ljLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdiYXNpYydcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcHNdPVwic2hvd1Rvb2x0aXBzXCJcbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxuICAgICAgICAgICAgICAgID48L25pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1iYXNpYy1pdGVtPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBDb2xsYXBzYWJsZSAtLT5cbiAgICAgICAgICAgICAgICA8bmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWNvbGxhcHNhYmxlLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdjb2xsYXBzYWJsZSdcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdXRvQ29sbGFwc2VdPVwiYXV0b0NvbGxhcHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwc109XCJzaG93VG9vbHRpcHNcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXG4gICAgICAgICAgICAgICAgPjwvbmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWNvbGxhcHNhYmxlLWl0ZW0+XG5cbiAgICAgICAgICAgICAgICA8IS0tIERpdmlkZXIgLS0+XG4gICAgICAgICAgICAgICAgPG5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1kaXZpZGVyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdkaXZpZGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICA+PC9uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tZGl2aWRlci1pdGVtPlxuXG4gICAgICAgICAgICAgICAgPCEtLSBHcm91cCAtLT5cbiAgICAgICAgICAgICAgICA8bmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWdyb3VwLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdncm91cCdcIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdXRvQ29sbGFwc2VdPVwiYXV0b0NvbGxhcHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwc109XCJzaG93VG9vbHRpcHNcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXG4gICAgICAgICAgICAgICAgPjwvbmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWdyb3VwLWl0ZW0+XG5cbiAgICAgICAgICAgICAgICA8IS0tIFNwYWNlciAtLT5cbiAgICAgICAgICAgICAgICA8bmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLXNwYWNlci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS50eXBlID09PSAnc3BhY2VyJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICA+PC9uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tc3BhY2VyLWl0ZW0+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBDb250ZW50IGZvb3RlciAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1jb250ZW50LWZvb3RlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW25pY2VWZXJ0aWNhbE5hdmlnYXRpb25Db250ZW50Rm9vdGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRm9vdGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tZm9vdGVyXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltuaWNlVmVydGljYWxOYXZpZ2F0aW9uRm9vdGVyXVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIEFzaWRlIC0tPlxuPGRpdlxuICAgIGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWFzaWRlLXdyYXBwZXJcIlxuICAgICpuZ0lmPVwiYWN0aXZlQXNpZGVJdGVtSWRcIlxuICAgIG5pY2VTY3JvbGxiYXJcbiAgICBbbmljZVNjcm9sbGJhck9wdGlvbnNdPVwieyB3aGVlbFByb3BhZ2F0aW9uOiBmYWxzZSwgc3VwcHJlc3NTY3JvbGxYOiB0cnVlIH1cIlxuICAgIFtAZmFkZUluTGVmdF09XCJwb3NpdGlvbiA9PT0gJ2xlZnQnXCJcbiAgICBbQGZhZGVJblJpZ2h0XT1cInBvc2l0aW9uID09PSAncmlnaHQnXCJcbiAgICBbQGZhZGVPdXRMZWZ0XT1cInBvc2l0aW9uID09PSAnbGVmdCdcIlxuICAgIFtAZmFkZU91dFJpZ2h0XT1cInBvc2l0aW9uID09PSAncmlnaHQnXCJcbj5cblxuICAgIDwhLS0gSXRlbXMgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBuYXZpZ2F0aW9uOyB0cmFja0J5OiB0cmFja0J5Rm5cIj5cbiAgICAgICAgPCEtLSBTa2lwIHRoZSBoaWRkZW4gaXRlbXMgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoaXRlbS5oaWRkZW4gJiYgIWl0ZW0uaGlkZGVuKGl0ZW0pKSB8fCAhaXRlbS5oaWRkZW5cIj5cbiAgICAgICAgICAgIDwhLS0gQXNpZGUgLS0+XG4gICAgICAgICAgICA8bmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWFzaWRlLWl0ZW1cbiAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2FzaWRlJyAmJiBpdGVtLmlkID09PSBhY3RpdmVBc2lkZUl0ZW1JZFwiXG4gICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgW2F1dG9Db2xsYXBzZV09XCJhdXRvQ29sbGFwc2VcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcHNdPVwic2hvd1Rvb2x0aXBzXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXG4gICAgICAgICAgICA+PC9uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYXNpZGUtaXRlbT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==
|