@recursyve/nice-ui-kit.v2 15.0.0-beta.131 → 16.0.0-beta.134
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/animations/defaults.mjs +32 -0
- package/{esm2020 → esm2022}/lib/api/interceptors/transform-response.interceptor.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/alert/alert.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/alert/alert.module.mjs +9 -9
- package/{esm2020 → esm2022}/lib/components/alert/alert.service.mjs +4 -4
- package/esm2022/lib/components/assets-carousel/assets-carousel.component.mjs +283 -0
- package/{esm2020 → esm2022}/lib/components/assets-carousel/assets-carousel.module.mjs +19 -19
- package/{esm2020 → esm2022}/lib/components/assets-carousel/directives/assets-carousel-active-content.directive.mjs +4 -4
- package/esm2022/lib/components/async-typeahead/async-typeahead.component.mjs +451 -0
- package/{esm2020 → esm2022}/lib/components/async-typeahead/async-typeahead.module.mjs +21 -21
- package/{esm2020 → esm2022}/lib/components/async-typeahead/providers/async-typeahead.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/base-form/base-form.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/base-form/base-form.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/base-form/form-submit.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/card/card.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/card/card.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/carousel/carousel.component.mjs +4 -4
- package/esm2022/lib/components/carousel/carousel.module.mjs +40 -0
- package/{esm2020 → esm2022}/lib/components/carousel/picture-modal/picture-modal.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/carousel/picture-modal/picture-modal.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/carousel/pipe/carousel-layout.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/collapsable/collapsable.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/collapsable/collapsable.module.mjs +7 -7
- package/{esm2020 → esm2022}/lib/components/date-range-picker/components/header/header.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/date-range-picker/components/range-preset/range-preset.component.mjs +4 -4
- package/esm2022/lib/components/date-range-picker/date-range-picker.component.mjs +95 -0
- package/{esm2020 → esm2022}/lib/components/date-range-picker/date-range-picker.module.mjs +21 -21
- package/{esm2020 → esm2022}/lib/components/date-range-picker/providers/date-range-picker.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/drawer/drawer.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/drawer/drawer.module.mjs +7 -7
- package/{esm2020 → esm2022}/lib/components/drawer/drawer.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/export-bottom-sheet/export-bottom-sheet.component.mjs +4 -4
- package/esm2022/lib/components/export-bottom-sheet/export-bottom-sheet.module.mjs +45 -0
- package/{esm2020 → esm2022}/lib/components/export-bottom-sheet/providers/export-bottom-sheet.service.mjs +7 -7
- package/{esm2020 → esm2022}/lib/components/form-error/control-status.directive.mjs +4 -4
- package/esm2022/lib/components/form-error/form-error.component.mjs +53 -0
- package/{esm2020 → esm2022}/lib/components/form-error/form-error.module.mjs +5 -5
- package/esm2022/lib/components/horizontal-stepper/horizontal-stepper.component.mjs +34 -0
- package/{esm2020 → esm2022}/lib/components/horizontal-stepper/horizontal-stepper.module.mjs +9 -9
- package/{esm2020 → esm2022}/lib/components/horizontal-stepper/step.component.mjs +6 -6
- package/esm2022/lib/components/image-cropper/image-cropper.component.mjs +1269 -0
- package/{esm2020 → esm2022}/lib/components/image-cropper/image-cropper.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/layout/layout.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/layout/layout.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/loading-spinner/loading-spinner.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/loading-spinner/loading-spinner.module.mjs +9 -9
- package/{esm2020 → esm2022}/lib/components/loading-spinner/loading.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/loading-toast/loading-toast.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/loading-toast/loading-toast.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/loading-toast/loading-toast.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/loading-toast/loading-toast.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/lottie/lottie.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/lottie/lottie.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/navigation/components/hint-component-base.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/navigation/directives/show-hint.directive.mjs +4 -4
- package/esm2022/lib/components/navigation/horizontal/components/basic/basic.component.mjs +62 -0
- package/{esm2020 → esm2022}/lib/components/navigation/horizontal/components/branch/branch.component.mjs +7 -7
- package/{esm2020 → esm2022}/lib/components/navigation/horizontal/components/divider/divider.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/navigation/horizontal/components/spacer/spacer.component.mjs +4 -4
- package/esm2022/lib/components/navigation/horizontal/horizontal.component.mjs +50 -0
- package/esm2022/lib/components/navigation/navigation.component.mjs +83 -0
- package/esm2022/lib/components/navigation/navigation.module.mjs +108 -0
- package/{esm2020 → esm2022}/lib/components/navigation/navigation.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/navigation/pipes/should-hide.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/navigation/pipes/should-show-hint.pipe.mjs +4 -4
- package/esm2022/lib/components/navigation/pipes/translate-with-context.pipe.mjs +25 -0
- package/{esm2020 → esm2022}/lib/components/navigation/providers/hint.service.mjs +4 -4
- package/esm2022/lib/components/navigation/providers/translation-context.service.mjs +16 -0
- package/{esm2020 → esm2022}/lib/components/navigation/vertical/components/aside/aside.component.mjs +6 -6
- package/esm2022/lib/components/navigation/vertical/components/basic/basic.component.mjs +76 -0
- package/{esm2020 → esm2022}/lib/components/navigation/vertical/components/collapsable/collapsable.component.mjs +8 -8
- package/{esm2020 → esm2022}/lib/components/navigation/vertical/components/divider/divider.component.mjs +4 -4
- package/esm2022/lib/components/navigation/vertical/components/group/group.component.mjs +75 -0
- package/{esm2020 → esm2022}/lib/components/navigation/vertical/components/spacer/spacer.component.mjs +4 -4
- package/esm2022/lib/components/navigation/vertical/vertical.component.mjs +599 -0
- package/esm2022/lib/components/search-bar/search-bar.component.mjs +76 -0
- package/{esm2020 → esm2022}/lib/components/search-bar/search-bar.module.mjs +13 -13
- package/{esm2020 → esm2022}/lib/components/sweet-alert/sweet-alert.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/sweet-alert/sweet-alert.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/sweet-alert/sweet-alert.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/sweet-alert/sweet-alert.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/toast/toast.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/toast/toast.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/toast/toast.service.mjs +4 -4
- package/esm2022/lib/components/toggle-button-group/toggle-button-group.component.mjs +134 -0
- package/{esm2020 → esm2022}/lib/components/toggle-button-group/toggle-button-group.module.mjs +7 -7
- package/{esm2020 → esm2022}/lib/components/toggle-button-group/toggle-button.component.mjs +4 -4
- package/esm2022/lib/components/translation-form/components/textarea/translation-form-textarea.component.mjs +38 -0
- package/esm2022/lib/components/translation-form/components/textfield/translation-form-textfield.component.mjs +26 -0
- package/{esm2020 → esm2022}/lib/components/translation-form/components/translation-form.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/translation-form/components/translation-form.module.mjs +19 -19
- package/{esm2020 → esm2022}/lib/components/translation-form/directives/translation-context.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/translation-form/providers/nice-translation-form.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/translation-form/toggle/translation-toggle.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/translation-form/validators/require-for-languages.validator.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/typeahead/directives/options-scroll.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components/typeahead/directives/options-scroll.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/components/typeahead/typeahead.component.mjs +9 -9
- package/{esm2020 → esm2022}/lib/components/typeahead/typeahead.module.mjs +25 -25
- package/{esm2020 → esm2022}/lib/directives/autofocus/autofocus.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/directives/autofocus/autofocus.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/directives/autogrow/autogrow.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/directives/autogrow/autogrow.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/directives/chip-async-typeahead/chip-async-typeahead.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/directives/chip-list/chip-list-items/chip-list-item-label.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/directives/chip-list/chip-list-items/chip-list-items.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/directives/chip-list/chip-list.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/directives/chip-list/chip-list.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/directives/draggable-list/draggable-list.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/directives/draggable-list/draggable-list.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/directives/dropzone/dropzone.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/directives/dropzone/dropzone.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/directives/image-error-placeholder/image-error-placeholder.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/directives/image-error-placeholder/image-error-placeholder.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/directives/material/material.module.mjs +7 -7
- package/{esm2020 → esm2022}/lib/directives/material/nice-material-style.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/directives/material/nice-rounded-style.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/directives/modals/modal-on-click.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/directives/modals/modal-opener.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/directives/rerender/rerender.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/directives/resolve/resolve.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/directives/scroll-reset/scroll-reset.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/directives/scroll-reset/scroll-reset.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/directives/scrollbar/scrollbar.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/directives/scrollbar/scrollbar.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/directives/stop-propagation/click-stop-propagation.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/directives/stop-propagation/stop-propagation.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/directives/window/prevent-close-window.directive.mjs +4 -4
- package/{esm2020 → esm2022}/lib/directives/window/window-directive.module.mjs +5 -5
- package/esm2022/lib/nice.module.mjs +124 -0
- package/{esm2020 → esm2022}/lib/pipes/boolean.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/capitalize-first-letter.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/ceil.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/entries.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/find-by-key.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/first-letter.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/floor.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/join-if-defined.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/link.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/localized-boolean.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/localized-currency.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/localized-date-only.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/localized-date.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/minutes-to-time.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/number-to-ordinal-indicator.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/pad.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/phone.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/pipes.module.mjs +72 -72
- package/{esm2020 → esm2022}/lib/pipes/postal-code.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/range.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/round.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/sanitize-bypass.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/seconds-to-time.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/pipes/track-by-prop.pipe.mjs +4 -4
- package/{esm2020 → esm2022}/lib/providers/config/config.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/providers/config/config.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/providers/media-watcher/media-watcher.module.mjs +7 -7
- package/{esm2020 → esm2022}/lib/providers/media-watcher/media-watcher.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/providers/overlay/dynamic-overlay-container.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/providers/overlay/dynamic-overlay.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/providers/splash-screen/splash-screen.module.mjs +7 -7
- package/{esm2020 → esm2022}/lib/providers/splash-screen/splash-screen.service.mjs +4 -4
- package/{esm2020 → esm2022}/lib/providers/utils/utils.module.mjs +5 -5
- package/{esm2020 → esm2022}/lib/providers/utils/utils.service.mjs +4 -4
- package/esm2022/lib/utils/regex.utils.mjs +11 -0
- package/{fesm2020 → fesm2022}/recursyve-nice-ui-kit.v2.mjs +948 -905
- package/fesm2022/recursyve-nice-ui-kit.v2.mjs.map +1 -0
- package/lib/components/alert/alert.component.d.ts +1 -1
- package/lib/components/assets-carousel/assets-carousel.component.d.ts +1 -1
- package/lib/components/async-typeahead/async-typeahead.component.d.ts +1 -1
- package/lib/components/base-form/base-form.component.d.ts +1 -1
- package/lib/components/base-form/form-submit.directive.d.ts +1 -1
- package/lib/components/card/card.component.d.ts +1 -1
- package/lib/components/carousel/carousel.component.d.ts +1 -1
- package/lib/components/collapsable/collapsable.component.d.ts +1 -1
- package/lib/components/date-range-picker/date-range-picker.component.d.ts +1 -1
- package/lib/components/drawer/drawer.component.d.ts +1 -1
- package/lib/components/form-error/form-error.component.d.ts +1 -1
- package/lib/components/image-cropper/image-cropper.component.d.ts +2 -2
- package/lib/components/loading-spinner/loading-spinner.component.d.ts +1 -1
- package/lib/components/loading-spinner/loading.directive.d.ts +1 -1
- package/lib/components/loading-toast/loading-toast.component.d.ts +1 -1
- package/lib/components/loading-toast/loading-toast.directive.d.ts +1 -1
- package/lib/components/lottie/lottie.component.d.ts +1 -1
- package/lib/components/navigation/directives/show-hint.directive.d.ts +1 -1
- package/lib/components/navigation/horizontal/components/basic/basic.component.d.ts +1 -1
- package/lib/components/navigation/horizontal/components/branch/branch.component.d.ts +1 -1
- package/lib/components/navigation/horizontal/components/divider/divider.component.d.ts +1 -1
- package/lib/components/navigation/horizontal/components/spacer/spacer.component.d.ts +1 -1
- package/lib/components/navigation/horizontal/horizontal.component.d.ts +4 -2
- package/lib/components/navigation/navigation.component.d.ts +3 -1
- package/lib/components/navigation/navigation.module.d.ts +12 -11
- package/lib/components/navigation/pipes/translate-with-context.pipe.d.ts +12 -0
- package/lib/components/navigation/providers/translation-context.service.d.ts +8 -0
- package/lib/components/navigation/vertical/components/aside/aside.component.d.ts +1 -1
- package/lib/components/navigation/vertical/components/basic/basic.component.d.ts +1 -1
- package/lib/components/navigation/vertical/components/collapsable/collapsable.component.d.ts +1 -1
- package/lib/components/navigation/vertical/components/divider/divider.component.d.ts +1 -1
- package/lib/components/navigation/vertical/components/group/group.component.d.ts +1 -1
- package/lib/components/navigation/vertical/components/spacer/spacer.component.d.ts +1 -1
- package/lib/components/navigation/vertical/vertical.component.d.ts +4 -2
- package/lib/components/search-bar/search-bar.component.d.ts +1 -1
- package/lib/components/sweet-alert/sweet-alert.directive.d.ts +1 -1
- package/lib/components/toggle-button-group/toggle-button-group.component.d.ts +1 -1
- package/lib/components/toggle-button-group/toggle-button.component.d.ts +1 -1
- package/lib/components/translation-form/components/textarea/translation-form-textarea.component.d.ts +1 -1
- package/lib/components/translation-form/components/translation-form.component.d.ts +1 -1
- package/lib/components/translation-form/validators/require-for-languages.validator.d.ts +1 -1
- package/lib/components/typeahead/directives/options-scroll.directive.d.ts +1 -1
- package/lib/components/typeahead/typeahead.component.d.ts +1 -1
- package/lib/directives/autogrow/autogrow.directive.d.ts +1 -1
- package/lib/directives/chip-list/chip-list-items/chip-list-items.component.d.ts +1 -1
- package/lib/directives/chip-list/chip-list.directive.d.ts +1 -1
- package/lib/directives/draggable-list/draggable-list.directive.d.ts +1 -1
- package/lib/directives/image-error-placeholder/image-error-placeholder.directive.d.ts +1 -1
- package/lib/directives/modals/modal-opener.directive.d.ts +1 -1
- package/lib/directives/rerender/rerender.directive.d.ts +1 -1
- package/lib/directives/resolve/resolve.directive.d.ts +1 -1
- package/lib/directives/scrollbar/scrollbar.directive.d.ts +1 -1
- package/package.json +12 -19
- package/esm2020/lib/animations/defaults.mjs +0 -32
- package/esm2020/lib/components/assets-carousel/assets-carousel.component.mjs +0 -283
- package/esm2020/lib/components/async-typeahead/async-typeahead.component.mjs +0 -451
- package/esm2020/lib/components/carousel/carousel.module.mjs +0 -41
- package/esm2020/lib/components/date-range-picker/date-range-picker.component.mjs +0 -95
- package/esm2020/lib/components/export-bottom-sheet/export-bottom-sheet.module.mjs +0 -45
- package/esm2020/lib/components/form-error/form-error.component.mjs +0 -53
- package/esm2020/lib/components/horizontal-stepper/horizontal-stepper.component.mjs +0 -34
- package/esm2020/lib/components/image-cropper/image-cropper.component.mjs +0 -1269
- package/esm2020/lib/components/navigation/horizontal/components/basic/basic.component.mjs +0 -62
- package/esm2020/lib/components/navigation/horizontal/horizontal.component.mjs +0 -46
- package/esm2020/lib/components/navigation/navigation.component.mjs +0 -76
- package/esm2020/lib/components/navigation/navigation.module.mjs +0 -105
- package/esm2020/lib/components/navigation/vertical/components/basic/basic.component.mjs +0 -76
- package/esm2020/lib/components/navigation/vertical/components/group/group.component.mjs +0 -75
- package/esm2020/lib/components/navigation/vertical/vertical.component.mjs +0 -595
- package/esm2020/lib/components/search-bar/search-bar.component.mjs +0 -76
- package/esm2020/lib/components/toggle-button-group/toggle-button-group.component.mjs +0 -134
- package/esm2020/lib/components/translation-form/components/textarea/translation-form-textarea.component.mjs +0 -38
- package/esm2020/lib/components/translation-form/components/textfield/translation-form-textfield.component.mjs +0 -26
- package/esm2020/lib/nice.module.mjs +0 -124
- package/esm2020/lib/utils/regex.utils.mjs +0 -11
- package/fesm2015/recursyve-nice-ui-kit.v2.mjs +0 -11867
- package/fesm2015/recursyve-nice-ui-kit.v2.mjs.map +0 -1
- package/fesm2020/recursyve-nice-ui-kit.v2.mjs.map +0 -1
- /package/{esm2020 → esm2022}/lib/animations/expand-collapse.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/animations/fade.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/animations/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/animations/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/animations/shake.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/animations/slide.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/animations/zoom.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/exceptions/api.exception.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/exceptions/exception.factory.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/nice.api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/api/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/alert/alert.types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/alert/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/alert/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/assets-carousel/assets-carousel.constant.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/assets-carousel/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/assets-carousel/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/async-typeahead/async-typeahead.constant.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/async-typeahead/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/async-typeahead/providers/async-typeahead.provider.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/async-typeahead/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/base-form/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/base-form/nice-base.form.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/base-form/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/card/card.types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/card/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/card/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/carousel/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/carousel/picture-modal/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/carousel/picture-modal/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/carousel/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/collapsable/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/collapsable/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/date-range-picker/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/date-range-picker/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/drawer/drawer.types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/drawer/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/drawer/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/export-bottom-sheet/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/export-bottom-sheet/models/export-strategy.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/export-bottom-sheet/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/form-error/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/form-error/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/horizontal-stepper/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/horizontal-stepper/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/image-cropper/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/image-cropper/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/image-cropper/resize-canvas.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/layout/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/layout/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/loading-spinner/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/loading-spinner/loading.constant.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/loading-spinner/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/loading-toast/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/loading-toast/loading-toast.constant.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/loading-toast/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/loading-toast/rxjs/show-loading-toast.operator.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/lottie/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/lottie/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/navigation/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/navigation/navigation.types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/navigation/providers/hide-item.resolver.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/navigation/providers/hint.resolver.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/navigation/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/search-bar/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/search-bar/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/sweet-alert/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/sweet-alert/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/sweet-alert/sweet-alert.constant.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/toast/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/toast/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/toast/rxjs/show-success-or-error-toast.operator.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/toast/rxjs/show-toast.operator.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/toast/toast.constant.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/toggle-button-group/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/toggle-button-group/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/translation-form/decorators/translation-form-group.decorator.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/translation-form/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/translation-form/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/translation-form/translation.form.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/typeahead/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/components/typeahead/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/autofocus/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/autofocus/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/autogrow/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/autogrow/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/chip-async-typeahead/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/chip-async-typeahead/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/chip-list/chip-list.constant.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/chip-list/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/chip-list/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/draggable-list/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/draggable-list/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/dropzone/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/dropzone/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/image-error-placeholder/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/image-error-placeholder/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/material/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/material/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/modals/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/modals/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/rerender/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/rerender/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/resolve/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/resolve/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/scroll-reset/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/scroll-reset/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/scrollbar/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/scrollbar/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/scrollbar/scrollbar.types.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/stop-propagation/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/stop-propagation/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/window/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/directives/window/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/pipes/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/pipes/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/providers/config/config.constants.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/providers/config/config.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/providers/config/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/providers/config/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/providers/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/providers/media-watcher/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/providers/media-watcher/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/providers/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/providers/splash-screen/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/providers/splash-screen/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/providers/utils/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/providers/utils/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/types/constructor.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/array.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/case.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/colors.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/date.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/file.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/font-awesome.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/form-data.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/http-status.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/keyboard.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/lexorank.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/modal.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/number.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/object.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/promise.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/query-params.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/type.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/utils/url.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/recursyve-nice-ui-kit.v2.mjs +0 -0
|
@@ -0,0 +1,599 @@
|
|
|
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: "16.0.5", 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: "16.0.5", 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: "16.0.5", 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: function () { return [{ 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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QjtnQkFtZDdCLGFBQWE7c0JBRG5CLFlBQVk7dUJBQUMsWUFBWTtnQkFjbkIsYUFBYTtzQkFEbkIsWUFBWTt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgQW5pbWF0aW9uQnVpbGRlciwgQW5pbWF0aW9uUGxheWVyLCBzdHlsZSB9IGZyb20gXCJAYW5ndWxhci9hbmltYXRpb25zXCI7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gXCJAYW5ndWxhci9jZGsvY29lcmNpb25cIjtcbmltcG9ydCB7IFNjcm9sbFN0cmF0ZWd5LCBTY3JvbGxTdHJhdGVneU9wdGlvbnMgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL292ZXJsYXlcIjtcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBUb29sdGlwUG9zaXRpb24gfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcFwiO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgbWVyZ2UsIFJlcGxheVN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBkZWxheSwgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IG5pY2VBbmltYXRpb25zIH0gZnJvbSBcIi4uLy4uLy4uL2FuaW1hdGlvbnNcIjtcbmltcG9ydCB7IE5pY2VTY3JvbGxiYXJEaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vLi4vZGlyZWN0aXZlcy9zY3JvbGxiYXJcIjtcbmltcG9ydCB7IE5pY2VVdGlsc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vcHJvdmlkZXJzL3V0aWxzXCI7XG5pbXBvcnQgeyBOaWNlTmF2aWdhdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9uYXZpZ2F0aW9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTmljZU5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uL25hdmlnYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgICBOaWNlTmF2aWdhdGlvbkl0ZW0sXG4gICAgTmljZVZlcnRpY2FsTmF2aWdhdGlvbkFwcGVhcmFuY2UsXG4gICAgTmljZVZlcnRpY2FsTmF2aWdhdGlvbk1vZGUsXG4gICAgTmljZVZlcnRpY2FsTmF2aWdhdGlvblBvc2l0aW9uXG59IGZyb20gXCIuLi9uYXZpZ2F0aW9uLnR5cGVzXCI7XG5pbXBvcnQgeyBOaWNlTmF2aWdhdGlvbkhpbnRTZXJ2aWNlIH0gZnJvbSBcIi4uL3Byb3ZpZGVycy9oaW50LnNlcnZpY2VcIjtcbmltcG9ydCB7IE5pY2VUcmFuc2xhdGlvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSBcIi4uL3Byb3ZpZGVycy90cmFuc2xhdGlvbi1jb250ZXh0LnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uXCIsXG4gICAgdGVtcGxhdGVVcmw6IFwiLi92ZXJ0aWNhbC5jb21wb25lbnQuaHRtbFwiLFxuICAgIGFuaW1hdGlvbnM6IG5pY2VBbmltYXRpb25zLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbTmljZVRyYW5zbGF0aW9uQ29udGV4dFNlcnZpY2VdLFxuICAgIGV4cG9ydEFzOiBcIm5pY2VWZXJ0aWNhbE5hdmlnYXRpb25cIlxufSlcbmV4cG9ydCBjbGFzcyBOaWNlVmVydGljYWxOYXZpZ2F0aW9uQ29tcG9uZW50IGV4dGVuZHMgTmljZU5hdmlnYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcbiAgICBwdWJsaWMgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2lubmVyOiBCb29sZWFuSW5wdXQ7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcbiAgICBwdWJsaWMgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX29wZW5lZDogQm9vbGVhbklucHV0O1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gICAgcHVibGljIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV90cmFuc3BhcmVudE92ZXJsYXk6IEJvb2xlYW5JbnB1dDtcblxuICAgIHByaXZhdGUgX2ZvcmNlSG92ZXJlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2FuaW1hdGlvbnNFbmFibGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfYXNpZGVPdmVybGF5OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVBc2lkZU92ZXJsYXlDbGljazogYW55O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZU92ZXJsYXlDbGljazogYW55O1xuICAgIHByaXZhdGUgX292ZXJsYXk6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgX3BsYXllcjogQW5pbWF0aW9uUGxheWVyO1xuICAgIHByaXZhdGUgX3Njcm9sbFN0cmF0ZWd5OiBTY3JvbGxTdHJhdGVneSA9IHRoaXMuX3Njcm9sbFN0cmF0ZWd5T3B0aW9ucy5ibG9jaygpO1xuICAgIHByaXZhdGUgX25pY2VTY3JvbGxiYXJEaXJlY3RpdmVzITogUXVlcnlMaXN0PE5pY2VTY3JvbGxiYXJEaXJlY3RpdmU+O1xuICAgIHByaXZhdGUgX25pY2VTY3JvbGxiYXJEaXJlY3RpdmVzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSB0aGlzLl9uaWNlVXRpbHNTZXJ2aWNlLnJhbmRvbUlkKCk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhcHBlYXJhbmNlOiBOaWNlVmVydGljYWxOYXZpZ2F0aW9uQXBwZWFyYW5jZSA9IFwiZGVmYXVsdFwiO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXV0b0NvbGxhcHNlID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlubmVyID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtb2RlOiBOaWNlVmVydGljYWxOYXZpZ2F0aW9uTW9kZSA9IFwic2lkZVwiO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3BlbmVkID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhvdmVyZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhhc0hpbnQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBvc2l0aW9uOiBOaWNlVmVydGljYWxOYXZpZ2F0aW9uUG9zaXRpb24gPSBcImxlZnRcIjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dUb29sdGlwcyA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdHJhbnNwYXJlbnRPdmVybGF5ID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0b29sdGlwUG9zaXRpb246IFRvb2x0aXBQb3NpdGlvbiA9IFwiYWZ0ZXJcIjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRyYW5zbGF0aW9uQ29udGV4dDogUmVjb3JkPHN0cmluZywgYW55PjtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBhcHBlYXJhbmNlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TmljZVZlcnRpY2FsTmF2aWdhdGlvbkFwcGVhcmFuY2U+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgbW9kZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25Nb2RlPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IG9wZW5lZENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgaG92ZXJlZENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgcG9zaXRpb25DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxOaWNlVmVydGljYWxOYXZpZ2F0aW9uUG9zaXRpb24+KCk7XG5cbiAgICBAVmlld0NoaWxkKFwibmF2aWdhdGlvbkNvbnRlbnRcIilcbiAgICBwcml2YXRlIF9uYXZpZ2F0aW9uQ29udGVudEVsOiBFbGVtZW50UmVmO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IG5hdmlnYXRpb24obmF2aWdhdGlvbjogTmljZU5hdmlnYXRpb25JdGVtW10pIHtcbiAgICAgICAgdGhpcy5fbmF2aWdhdGlvbiA9IG5hdmlnYXRpb247XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IG5hdmlnYXRpb24oKTogTmljZU5hdmlnYXRpb25JdGVtW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGZvcmNlSG92ZXJlZChmb3JjZUhvdmVyZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZm9yY2VIb3ZlcmVkID0gZm9yY2VIb3ZlcmVkO1xuICAgICAgICB0aGlzLmhvdmVyZWRDaGFuZ2VkLm5leHQoKHRoaXMuaG92ZXJlZCB8fCB0aGlzLl9mb3JjZUhvdmVyZWQpIHx8IHRoaXMuaGFzSGludCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhY3RpdmVBc2lkZUl0ZW1JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIG9uQ29sbGFwc2FibGVJdGVtQ29sbGFwc2VkID0gbmV3IFJlcGxheVN1YmplY3Q8TmljZU5hdmlnYXRpb25JdGVtPigxKTtcbiAgICBwdWJsaWMgb25Db2xsYXBzYWJsZUl0ZW1FeHBhbmRlZCA9IG5ldyBSZXBsYXlTdWJqZWN0PE5pY2VOYXZpZ2F0aW9uSXRlbT4oMSk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBfbmljZU5hdmlnYXRpb25TZXJ2aWNlOiBOaWNlTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIF9uaWNlVXRpbHNTZXJ2aWNlOiBOaWNlVXRpbHNTZXJ2aWNlLFxuICAgICAgICBfdHJhbnNsYXRpb25Db250ZXh0U2VydmljZTogTmljZVRyYW5zbGF0aW9uQ29udGV4dFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX2FuaW1hdGlvbkJ1aWxkZXI6IEFuaW1hdGlvbkJ1aWxkZXIsXG4gICAgICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX3JlbmRlcmVyMjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSBfc2Nyb2xsU3RyYXRlZ3lPcHRpb25zOiBTY3JvbGxTdHJhdGVneU9wdGlvbnMsXG4gICAgICAgIHByaXZhdGUgX2hpbnRTZXJ2aWNlOiBOaWNlTmF2aWdhdGlvbkhpbnRTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9jaGFuZ2VEZXRlY3RvclJlZiwgX25pY2VOYXZpZ2F0aW9uU2VydmljZSwgX25pY2VVdGlsc1NlcnZpY2UsIF90cmFuc2xhdGlvbkNvbnRleHRTZXJ2aWNlKTtcblxuICAgICAgICB0aGlzLl9oYW5kbGVBc2lkZU92ZXJsYXlDbGljayA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VBc2lkZSgpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9oYW5kbGVPdmVybGF5Q2xpY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBAIEFjY2Vzc29yc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvKipcbiAgICAgKiBIb3N0IGJpbmRpbmcgZm9yIGNvbXBvbmVudCBjbGFzc2VzXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKFwiY2xhc3NcIilcbiAgICBwdWJsaWMgZ2V0IGNsYXNzTGlzdCgpOiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYW5pbWF0aW9ucy1lbmFibGVkXCI6IHRoaXMuX2FuaW1hdGlvbnNFbmFibGVkLFxuICAgICAgICAgICAgW2BuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYXBwZWFyYW5jZS0ke3RoaXMuYXBwZWFyYW5jZX1gXTogdHJ1ZSxcbiAgICAgICAgICAgIFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWhvdmVyXCI6IHRoaXMuaG92ZXJlZCB8fCB0aGlzLl9mb3JjZUhvdmVyZWQsXG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1pbm5lclwiOiB0aGlzLmlubmVyLFxuICAgICAgICAgICAgXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tbW9kZS1vdmVyXCI6IHRoaXMubW9kZSA9PT0gXCJvdmVyXCIsXG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1tb2RlLXNpZGVcIjogdGhpcy5tb2RlID09PSBcInNpZGVcIixcbiAgICAgICAgICAgIFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLW9wZW5lZFwiOiB0aGlzLm9wZW5lZCxcbiAgICAgICAgICAgIFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLXBvc2l0aW9uLWxlZnRcIjogdGhpcy5wb3NpdGlvbiA9PT0gXCJsZWZ0XCIsXG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1wb3NpdGlvbi1yaWdodFwiOiB0aGlzLnBvc2l0aW9uID09PSBcInJpZ2h0XCIsXG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1oYXMtaGludFwiOiB0aGlzLmhhc0hpbnRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIb3N0IGJpbmRpbmcgZm9yIGNvbXBvbmVudCBpbmxpbmUgc3R5bGVzXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKFwic3R5bGVcIilcbiAgICBwdWJsaWMgZ2V0IHN0eWxlTGlzdCgpOiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgXCJ2aXNpYmlsaXR5XCI6IHRoaXMub3BlbmVkID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0dGVyIGZvciBuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlc1xuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oTmljZVNjcm9sbGJhckRpcmVjdGl2ZSlcbiAgICBwdWJsaWMgc2V0IG5pY2VTY3JvbGxiYXJEaXJlY3RpdmVzKG5pY2VTY3JvbGxiYXJEaXJlY3RpdmVzOiBRdWVyeUxpc3Q8TmljZVNjcm9sbGJhckRpcmVjdGl2ZT4pIHtcbiAgICAgICAgLy8gU3RvcmUgdGhlIGRpcmVjdGl2ZXNcbiAgICAgICAgdGhpcy5fbmljZVNjcm9sbGJhckRpcmVjdGl2ZXMgPSBuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlcztcblxuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlcmUgYXJlIG5vIGRpcmVjdGl2ZXNcbiAgICAgICAgaWYgKG5pY2VTY3JvbGxiYXJEaXJlY3RpdmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVW5zdWJzY3JpYmUgdGhlIHByZXZpb3VzIHN1YnNjcmlwdGlvbnNcbiAgICAgICAgaWYgKHRoaXMuX25pY2VTY3JvbGxiYXJEaXJlY3RpdmVzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9uaWNlU2Nyb2xsYmFyRGlyZWN0aXZlc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBzY3JvbGxiYXJzIG9uIGNvbGxhcHNhYmxlIGl0ZW1zJyBjb2xsYXBzZS9leHBhbmRcbiAgICAgICAgdGhpcy5fbmljZVNjcm9sbGJhckRpcmVjdGl2ZXNTdWJzY3JpcHRpb24gPVxuICAgICAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy5vbkNvbGxhcHNhYmxlSXRlbUNvbGxhcHNlZCxcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ29sbGFwc2FibGVJdGVtRXhwYW5kZWRcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSxcbiAgICAgICAgICAgICAgICAgICAgZGVsYXkoMjUwKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAvLyBMb29wIHRocm91Z2ggdGhlIHNjcm9sbGJhcnMgYW5kIHVwZGF0ZSB0aGVtXG4gICAgICAgICAgICAgICAgICAgIG5pY2VTY3JvbGxiYXJEaXJlY3RpdmVzLmZvckVhY2goKG5pY2VTY3JvbGxiYXJEaXJlY3RpdmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5pY2VTY3JvbGxiYXJEaXJlY3RpdmUudXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQCBMaWZlY3ljbGUgaG9va3NcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLyoqXG4gICAgICogT24gY2hhbmdlc1xuICAgICAqXG4gICAgICogQHBhcmFtIGNoYW5nZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcblxuICAgICAgICAvLyBBcHBlYXJhbmNlXG4gICAgICAgIGlmIChcImFwcGVhcmFuY2VcIiBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICAvLyBFeGVjdXRlIHRoZSBvYnNlcnZhYmxlXG4gICAgICAgICAgICB0aGlzLmFwcGVhcmFuY2VDaGFuZ2VkLm5leHQoY2hhbmdlcy5hcHBlYXJhbmNlLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbm5lclxuICAgICAgICBpZiAoXCJpbm5lclwiIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIC8vIENvZXJjZSB0aGUgdmFsdWUgdG8gYSBib29sZWFuXG4gICAgICAgICAgICB0aGlzLmlubmVyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KGNoYW5nZXMuaW5uZXIuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1vZGVcbiAgICAgICAgaWYgKFwibW9kZVwiIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIC8vIEdldCB0aGUgcHJldmlvdXMgYW5kIGN1cnJlbnQgdmFsdWVzXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TW9kZSA9IGNoYW5nZXMubW9kZS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c01vZGUgPSBjaGFuZ2VzLm1vZGUucHJldmlvdXNWYWx1ZTtcblxuICAgICAgICAgICAgLy8gRGlzYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZUFuaW1hdGlvbnMoKTtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIG1vZGUgY2hhbmdlczogJ292ZXIgLT4gc2lkZSdcbiAgICAgICAgICAgIGlmIChwcmV2aW91c01vZGUgPT09IFwib3ZlclwiICYmIGN1cnJlbnRNb2RlID09PSBcInNpZGVcIikge1xuICAgICAgICAgICAgICAgIC8vIEhpZGUgdGhlIG92ZXJsYXlcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWRlT3ZlcmxheSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB0aGUgbW9kZSBjaGFuZ2VzOiAnc2lkZSAtPiBvdmVyJ1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzTW9kZSA9PT0gXCJzaWRlXCIgJiYgY3VycmVudE1vZGUgPT09IFwib3ZlclwiKSB7XG4gICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGFzaWRlXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUFzaWRlKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbmF2aWdhdGlvbiBpcyBvcGVuZWRcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcGVuZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2hvdyB0aGUgb3ZlcmxheVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaG93T3ZlcmxheSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRXhlY3V0ZSB0aGUgb2JzZXJ2YWJsZVxuICAgICAgICAgICAgdGhpcy5tb2RlQ2hhbmdlZC5uZXh0KGN1cnJlbnRNb2RlKTtcblxuICAgICAgICAgICAgLy8gRW5hYmxlIHRoZSBhbmltYXRpb25zIGFmdGVyIGEgZGVsYXlcbiAgICAgICAgICAgIC8vIFRoZSBkZWxheSBtdXN0IGJlIGJpZ2dlciB0aGFuIHRoZSBjdXJyZW50IHRyYW5zaXRpb24tZHVyYXRpb25cbiAgICAgICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBub3RoaW5nIHdpbGwgYmUgYW5pbWF0ZWQgd2hpbGUgdGhlIG1vZGUgY2hhbmdpbmdcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VuYWJsZUFuaW1hdGlvbnMoKTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPcGVuZWRcbiAgICAgICAgaWYgKFwib3BlbmVkXCIgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgLy8gQ29lcmNlIHRoZSB2YWx1ZSB0byBhIGJvb2xlYW5cbiAgICAgICAgICAgIHRoaXMub3BlbmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KGNoYW5nZXMub3BlbmVkLmN1cnJlbnRWYWx1ZSk7XG5cbiAgICAgICAgICAgIC8vIE9wZW4vY2xvc2UgdGhlIG5hdmlnYXRpb25cbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZU9wZW5lZCh0aGlzLm9wZW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQb3NpdGlvblxuICAgICAgICBpZiAoXCJwb3NpdGlvblwiIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIG9ic2VydmFibGVcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25DaGFuZ2VkLm5leHQoY2hhbmdlcy5wb3NpdGlvbi5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHJhbnNwYXJlbnQgb3ZlcmxheVxuICAgICAgICBpZiAoXCJ0cmFuc3BhcmVudE92ZXJsYXlcIiBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICAvLyBDb2VyY2UgdGhlIHZhbHVlIHRvIGEgYm9vbGVhblxuICAgICAgICAgICAgdGhpcy50cmFuc3BhcmVudE92ZXJsYXkgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkoY2hhbmdlcy50cmFuc3BhcmVudE92ZXJsYXkuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIGluaXRcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlucHV0IGlzIG5vdCBhbiBlbXB0eSBzdHJpbmdcbiAgICAgICAgaWYgKHRoaXMubmFtZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5fbmljZVV0aWxzU2VydmljZS5yYW5kb21JZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3Vic2NyaWJlIHRvIHRoZSAnTmF2aWdhdGlvbkVuZCcgZXZlbnRcbiAgICAgICAgdGhpcy5fcm91dGVyLmV2ZW50c1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG1vZGUgaXMgJ292ZXInIGFuZCB0aGUgbmF2aWdhdGlvbiBpcyBvcGVuZWQuLi5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tb2RlID09PSBcIm92ZXJcIiAmJiB0aGlzLm9wZW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgbmF2aWdhdGlvblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG1vZGUgaXMgJ3NpZGUnIGFuZCB0aGUgYXNpZGUgaXMgYWN0aXZlLi4uXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gXCJzaWRlXCIgJiYgdGhpcy5hY3RpdmVBc2lkZUl0ZW1JZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgYXNpZGVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZUFzaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5faGludFNlcnZpY2UuaGFzQWN0aXZlSGludCQucGlwZSh0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpKS5zdWJzY3JpYmUoaGFzSGludCA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhc0hpbnQgPSBoYXNIaW50O1xuICAgICAgICAgICAgdGhpcy5ob3ZlcmVkQ2hhbmdlZC5uZXh0KCh0aGlzLmhvdmVyZWQgfHwgdGhpcy5fZm9yY2VIb3ZlcmVkKSB8fCB0aGlzLmhhc0hpbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZnRlciB2aWV3IGluaXRcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgLy8gUmV0dXJuIGlmICduYXZpZ2F0aW9uIGNvbnRlbnQnIGVsZW1lbnQgZG9lcyBub3QgZXhpc3RcbiAgICAgICAgICAgIGlmICghdGhpcy5fbmF2aWdhdGlvbkNvbnRlbnRFbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgJ25hdmlnYXRpb24gY29udGVudCcgZWxlbWVudCBkb2Vzbid0IGhhdmVcbiAgICAgICAgICAgIC8vIHBlcmZlY3Qgc2Nyb2xsYmFyIGFjdGl2YXRlZCBvbiBpdC4uLlxuICAgICAgICAgICAgaWYgKCF0aGlzLl9uYXZpZ2F0aW9uQ29udGVudEVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwicHNcIikpIHtcbiAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBhY3RpdmUgaXRlbVxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSB0aGlzLl9uYXZpZ2F0aW9uQ29udGVudEVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24taXRlbS1hY3RpdmVcIik7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYWN0aXZlIGl0ZW0gZXhpc3RzLCBzY3JvbGwgaXQgaW50byB2aWV3XG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlSXRlbS5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gR28gdGhyb3VnaCBhbGwgdGhlIHNjcm9sbGJhciBkaXJlY3RpdmVzXG4gICAgICAgICAgICAgICAgdGhpcy5fbmljZVNjcm9sbGJhckRpcmVjdGl2ZXMuZm9yRWFjaCgobmljZVNjcm9sbGJhckRpcmVjdGl2ZSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFNraXAgaWYgbm90IGVuYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBTY3JvbGwgdG8gdGhlIGFjdGl2ZSBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIG5pY2VTY3JvbGxiYXJEaXJlY3RpdmUuc2Nyb2xsVG9FbGVtZW50KFwiLm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLWFjdGl2ZVwiLCAtMTIwLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBAIFB1YmxpYyBtZXRob2RzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8qKlxuICAgICAqIE9wZW4gdGhlIG5hdmlnYXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICAgICAgLy8gUmV0dXJuIGlmIHRoZSBuYXZpZ2F0aW9uIGlzIGFscmVhZHkgb3BlblxuICAgICAgICBpZiAodGhpcy5vcGVuZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCB0aGUgb3BlbmVkXG4gICAgICAgIHRoaXMuX3RvZ2dsZU9wZW5lZCh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZSB0aGUgbmF2aWdhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgLy8gUmV0dXJuIGlmIHRoZSBuYXZpZ2F0aW9uIGlzIGFscmVhZHkgY2xvc2VkXG4gICAgICAgIGlmICghdGhpcy5vcGVuZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENsb3NlIHRoZSBhc2lkZVxuICAgICAgICB0aGlzLmNsb3NlQXNpZGUoKTtcblxuICAgICAgICAvLyBTZXQgdGhlIG9wZW5lZFxuICAgICAgICB0aGlzLl90b2dnbGVPcGVuZWQoZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZSB0aGUgbmF2aWdhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGUoKTogdm9pZCB7XG4gICAgICAgIC8vIFRvZ2dsZVxuICAgICAgICBpZiAodGhpcy5vcGVuZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbiB0aGUgYXNpZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlbkFzaWRlKGl0ZW06IE5pY2VOYXZpZ2F0aW9uSXRlbSk6IHZvaWQge1xuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlIGl0ZW0gaXMgZGlzYWJsZWRcbiAgICAgICAgaWYgKGl0ZW0uZGlzYWJsZWQgfHwgIWl0ZW0uaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9wZW5cbiAgICAgICAgdGhpcy5hY3RpdmVBc2lkZUl0ZW1JZCA9IGl0ZW0uaWQ7XG5cbiAgICAgICAgLy8gU2hvdyB0aGUgYXNpZGUgb3ZlcmxheVxuICAgICAgICB0aGlzLl9zaG93QXNpZGVPdmVybGF5KCk7XG5cbiAgICAgICAgLy8gTWFyayBmb3IgY2hlY2tcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2UgdGhlIGFzaWRlXG4gICAgICovXG4gICAgcHVibGljIGNsb3NlQXNpZGUoKTogdm9pZCB7XG4gICAgICAgIC8vIENsb3NlXG4gICAgICAgIHRoaXMuYWN0aXZlQXNpZGVJdGVtSWQgPSBudWxsO1xuXG4gICAgICAgIC8vIEhpZGUgdGhlIGFzaWRlIG92ZXJsYXlcbiAgICAgICAgdGhpcy5faGlkZUFzaWRlT3ZlcmxheSgpO1xuXG4gICAgICAgIC8vIE1hcmsgZm9yIGNoZWNrXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZSB0aGUgYXNpZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlQXNpZGUoaXRlbTogTmljZU5hdmlnYXRpb25JdGVtKTogdm9pZCB7XG4gICAgICAgIC8vIFRvZ2dsZVxuICAgICAgICBpZiAodGhpcy5hY3RpdmVBc2lkZUl0ZW1JZCA9PT0gaXRlbS5pZCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZUFzaWRlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5Bc2lkZShpdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQCBQcml2YXRlIG1ldGhvZHNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlIHRoZSBhbmltYXRpb25zXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2VuYWJsZUFuaW1hdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIC8vIFJldHVybiBpZiB0aGUgYW5pbWF0aW9ucyBhcmUgYWxyZWFkeSBlbmFibGVkXG4gICAgICAgIGlmICh0aGlzLl9hbmltYXRpb25zRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRW5hYmxlIHRoZSBhbmltYXRpb25zXG4gICAgICAgIHRoaXMuX2FuaW1hdGlvbnNFbmFibGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlIHRoZSBhbmltYXRpb25zXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2Rpc2FibGVBbmltYXRpb25zKCk6IHZvaWQge1xuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlIGFuaW1hdGlvbnMgYXJlIGFscmVhZHkgZGlzYWJsZWRcbiAgICAgICAgaWYgKCF0aGlzLl9hbmltYXRpb25zRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGlzYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgICAgICB0aGlzLl9hbmltYXRpb25zRW5hYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3cgdGhlIG92ZXJsYXlcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2hvd092ZXJsYXkoKTogdm9pZCB7XG4gICAgICAgIC8vIFJldHVybiBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIG92ZXJsYXlcbiAgICAgICAgaWYgKHRoaXMuX2FzaWRlT3ZlcmxheSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBvdmVybGF5IGVsZW1lbnRcbiAgICAgICAgdGhpcy5fb3ZlcmxheSA9IHRoaXMuX3JlbmRlcmVyMi5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICAgIC8vIEFkZCBhIGNsYXNzIHRvIHRoZSBvdmVybGF5IGVsZW1lbnRcbiAgICAgICAgdGhpcy5fb3ZlcmxheS5jbGFzc0xpc3QuYWRkKFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLW92ZXJsYXlcIik7XG5cbiAgICAgICAgLy8gQWRkIGEgY2xhc3MgZGVwZW5kaW5nIG9uIHRoZSB0cmFuc3BhcmVudE92ZXJsYXkgb3B0aW9uXG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50T3ZlcmxheSkge1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheS5jbGFzc0xpc3QuYWRkKFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLW92ZXJsYXktdHJhbnNwYXJlbnRcIik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBcHBlbmQgdGhlIG92ZXJsYXkgdG8gdGhlIHBhcmVudCBvZiB0aGUgbmF2aWdhdGlvblxuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQsIHRoaXMuX292ZXJsYXkpO1xuXG4gICAgICAgIC8vIEVuYWJsZSBibG9jayBzY3JvbGwgc3RyYXRlZ3lcbiAgICAgICAgdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuZW5hYmxlKCk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBlbnRlciBhbmltYXRpb24gYW5kIGF0dGFjaCBpdCB0byB0aGUgcGxheWVyXG4gICAgICAgIHRoaXMuX3BsYXllciA9IHRoaXMuX2FuaW1hdGlvbkJ1aWxkZXIuYnVpbGQoW1xuICAgICAgICAgICAgYW5pbWF0ZShcIjMwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpXCIsIHN0eWxlKHtvcGFjaXR5OiAxfSkpXG4gICAgICAgIF0pLmNyZWF0ZSh0aGlzLl9vdmVybGF5KTtcblxuICAgICAgICAvLyBQbGF5IHRoZSBhbmltYXRpb25cbiAgICAgICAgdGhpcy5fcGxheWVyLnBsYXkoKTtcblxuICAgICAgICAvLyBBZGQgYW4gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIG92ZXJsYXlcbiAgICAgICAgdGhpcy5fb3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGFuZGxlT3ZlcmxheUNsaWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIaWRlIHRoZSBvdmVybGF5XG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2hpZGVPdmVybGF5KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX292ZXJsYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgbGVhdmUgYW5pbWF0aW9uIGFuZCBhdHRhY2ggaXQgdG8gdGhlIHBsYXllclxuICAgICAgICB0aGlzLl9wbGF5ZXIgPSB0aGlzLl9hbmltYXRpb25CdWlsZGVyLmJ1aWxkKFtcbiAgICAgICAgICAgIGFuaW1hdGUoXCIzMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKVwiLCBzdHlsZSh7b3BhY2l0eTogMH0pKVxuICAgICAgICBdKS5jcmVhdGUodGhpcy5fb3ZlcmxheSk7XG5cbiAgICAgICAgLy8gUGxheSB0aGUgYW5pbWF0aW9uXG4gICAgICAgIHRoaXMuX3BsYXllci5wbGF5KCk7XG5cbiAgICAgICAgLy8gT25jZSB0aGUgYW5pbWF0aW9uIGlzIGRvbmUuLi5cbiAgICAgICAgdGhpcy5fcGxheWVyLm9uRG9uZSgoKSA9PiB7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBvdmVybGF5IHN0aWxsIGV4aXN0cy4uLlxuICAgICAgICAgICAgaWYgKHRoaXMuX292ZXJsYXkpIHtcbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGFuZGxlT3ZlcmxheUNsaWNrKTtcblxuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgb3ZlcmxheVxuICAgICAgICAgICAgICAgIHRoaXMuX292ZXJsYXkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9vdmVybGF5KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5ID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRGlzYWJsZSBibG9jayBzY3JvbGwgc3RyYXRlZ3lcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmRpc2FibGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hvdyB0aGUgYXNpZGUgb3ZlcmxheVxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zaG93QXNpZGVPdmVybGF5KCk6IHZvaWQge1xuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlcmUgaXMgYWxyZWFkeSBhbiBvdmVybGF5XG4gICAgICAgIGlmICh0aGlzLl9hc2lkZU92ZXJsYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgYXNpZGUgb3ZlcmxheSBlbGVtZW50XG4gICAgICAgIHRoaXMuX2FzaWRlT3ZlcmxheSA9IHRoaXMuX3JlbmRlcmVyMi5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICAgIC8vIEFkZCBhIGNsYXNzIHRvIHRoZSBhc2lkZSBvdmVybGF5IGVsZW1lbnRcbiAgICAgICAgdGhpcy5fYXNpZGVPdmVybGF5LmNsYXNzTGlzdC5hZGQoXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYXNpZGUtb3ZlcmxheVwiKTtcblxuICAgICAgICAvLyBBcHBlbmQgdGhlIGFzaWRlIG92ZXJsYXkgdG8gdGhlIHBhcmVudCBvZiB0aGUgbmF2aWdhdGlvblxuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQsIHRoaXMuX2FzaWRlT3ZlcmxheSk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBlbnRlciBhbmltYXRpb24gYW5kIGF0dGFjaCBpdCB0byB0aGUgcGxheWVyXG4gICAgICAgIHRoaXMuX3BsYXllciA9XG4gICAgICAgICAgICB0aGlzLl9hbmltYXRpb25CdWlsZGVyXG4gICAgICAgICAgICAgICAgLmJ1aWxkKFtcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZShcIjMwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpXCIsIHN0eWxlKHtvcGFjaXR5OiAxfSkpXG4gICAgICAgICAgICAgICAgXSkuY3JlYXRlKHRoaXMuX2FzaWRlT3ZlcmxheSk7XG5cbiAgICAgICAgLy8gUGxheSB0aGUgYW5pbWF0aW9uXG4gICAgICAgIHRoaXMuX3BsYXllci5wbGF5KCk7XG5cbiAgICAgICAgLy8gQWRkIGFuIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBhc2lkZSBvdmVybGF5XG4gICAgICAgIHRoaXMuX2FzaWRlT3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGFuZGxlQXNpZGVPdmVybGF5Q2xpY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhpZGUgdGhlIGFzaWRlIG92ZXJsYXlcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGlkZUFzaWRlT3ZlcmxheSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9hc2lkZU92ZXJsYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgbGVhdmUgYW5pbWF0aW9uIGFuZCBhdHRhY2ggaXQgdG8gdGhlIHBsYXllclxuICAgICAgICB0aGlzLl9wbGF5ZXIgPVxuICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uQnVpbGRlclxuICAgICAgICAgICAgICAgIC5idWlsZChbXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGUoXCIzMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKVwiLCBzdHlsZSh7b3BhY2l0eTogMH0pKVxuICAgICAgICAgICAgICAgIF0pLmNyZWF0ZSh0aGlzLl9hc2lkZU92ZXJsYXkpO1xuXG4gICAgICAgIC8vIFBsYXkgdGhlIGFuaW1hdGlvblxuICAgICAgICB0aGlzLl9wbGF5ZXIucGxheSgpO1xuXG4gICAgICAgIC8vIE9uY2UgdGhlIGFuaW1hdGlvbiBpcyBkb25lLi4uXG4gICAgICAgIHRoaXMuX3BsYXllci5vbkRvbmUoKCkgPT4ge1xuXG4gICAgICAgICAgICAvLyBJZiB0aGUgYXNpZGUgb3ZlcmxheSBzdGlsbCBleGlzdHMuLi5cbiAgICAgICAgICAgIGlmICh0aGlzLl9hc2lkZU92ZXJsYXkpIHtcbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyXG4gICAgICAgICAgICAgICAgdGhpcy5fYXNpZGVPdmVybGF5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9oYW5kbGVBc2lkZU92ZXJsYXlDbGljayk7XG5cbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGFzaWRlIG92ZXJsYXlcbiAgICAgICAgICAgICAgICB0aGlzLl9hc2lkZU92ZXJsYXkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9hc2lkZU92ZXJsYXkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FzaWRlT3ZlcmxheSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIG1vdXNlZW50ZXJcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKFwibW91c2VlbnRlclwiKVxuICAgIHB1YmxpYyBfb25Nb3VzZWVudGVyKCk6IHZvaWQge1xuICAgICAgICAvLyBFbmFibGUgdGhlIGFuaW1hdGlvbnNcbiAgICAgICAgdGhpcy5fZW5hYmxlQW5pbWF0aW9ucygpO1xuXG4gICAgICAgIC8vIFNldCB0aGUgaG92ZXJlZFxuICAgICAgICB0aGlzLmhvdmVyZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmhvdmVyZWRDaGFuZ2VkLm5leHQodGhpcy5ob3ZlcmVkIHx8IHRoaXMuX2ZvcmNlSG92ZXJlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gbW91c2VsZWF2ZVxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIpXG4gICAgcHVibGljIF9vbk1vdXNlbGVhdmUoKTogdm9pZCB7XG4gICAgICAgIC8vIEVuYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgICAgICB0aGlzLl9lbmFibGVBbmltYXRpb25zKCk7XG5cbiAgICAgICAgLy8gU2V0IHRoZSBob3ZlcmVkXG4gICAgICAgIHRoaXMuaG92ZXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhvdmVyZWRDaGFuZ2VkLm5leHQodGhpcy5ob3ZlcmVkIHx8IHRoaXMuX2ZvcmNlSG92ZXJlZCB8fCB0aGlzLmhhc0hpbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW4vY2xvc2UgdGhlIG5hdmlnYXRpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcGVuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF90b2dnbGVPcGVuZWQob3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICAvLyBTZXQgdGhlIG9wZW5lZFxuICAgICAgICB0aGlzLm9wZW5lZCA9IG9wZW47XG5cbiAgICAgICAgLy8gRW5hYmxlIHRoZSBhbmltYXRpb25zXG4gICAgICAgIHRoaXMuX2VuYWJsZUFuaW1hdGlvbnMoKTtcblxuICAgICAgICAvLyBJZiB0aGUgbmF2aWdhdGlvbiBvcGVuZWQsIGFuZCB0aGUgbW9kZVxuICAgICAgICAvLyBpcyAnb3ZlcicsIHNob3cgdGhlIG92ZXJsYXlcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gXCJvdmVyXCIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dPdmVybGF5KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hpZGVPdmVybGF5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFeGVjdXRlIHRoZSBvYnNlcnZhYmxlXG4gICAgICAgIHRoaXMub3BlbmVkQ2hhbmdlZC5uZXh0KG9wZW4pO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24td3JhcHBlclwiPlxuICAgIDwhLS0gSGVhZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24taGVhZGVyXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltuaWNlVmVydGljYWxOYXZpZ2F0aW9uSGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQ29udGVudCAtLT5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWNvbnRlbnRcIlxuICAgICAgICBuaWNlU2Nyb2xsYmFyXG4gICAgICAgIFtuaWNlU2Nyb2xsYmFyT3B0aW9uc109XCJ7IHdoZWVsUHJvcGFnYXRpb246IGlubmVyLCBzdXBwcmVzc1Njcm9sbFg6IHRydWUgfVwiXG4gICAgICAgICNuYXZpZ2F0aW9uQ29udGVudFxuICAgID5cbiAgICAgICAgPCEtLSBDb250ZW50IGhlYWRlciAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1jb250ZW50LWhlYWRlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW25pY2VWZXJ0aWNhbE5hdmlnYXRpb25Db250ZW50SGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBJdGVtcyAtLT5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBuYXZpZ2F0aW9uOyB0cmFja0J5OiB0cmFja0J5Rm5cIiBbQC5kaXNhYmxlZF09XCIhYW5pbWF0ZU5leHROYXZDaGFuZ2VcIiBAc2xpZGVJblJpZ2h0PlxuICAgICAgICAgICAgPCEtLSBTa2lwIHRoZSBoaWRkZW4gaXRlbXMgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShpdGVtIHwgbmljZVNob3VsZEhpZGUgfCBhc3luYylcIj5cbiAgICAgICAgICAgICAgICA8IS0tIEFzaWRlIC0tPlxuICAgICAgICAgICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYXNpZGUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2FzaWRlJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1JZF09XCJhY3RpdmVBc2lkZUl0ZW1JZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdXRvQ29sbGFwc2VdPVwiYXV0b0NvbGxhcHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3NraXBDaGlsZHJlbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwc109XCJzaG93VG9vbHRpcHNcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBc2lkZShpdGVtKVwiXG4gICAgICAgICAgICAgICAgPjwvbmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWFzaWRlLWl0ZW0+XG5cbiAgICAgICAgICAgICAgICA8IS0tIEJhc2ljIC0tPlxuICAgICAgICAgICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYmFzaWMtaXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2Jhc2ljJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwc109XCJzaG93VG9vbHRpcHNcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXG4gICAgICAgICAgICAgICAgPjwvbmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWJhc2ljLWl0ZW0+XG5cbiAgICAgICAgICAgICAgICA8IS0tIENvbGxhcHNhYmxlIC0tPlxuICAgICAgICAgICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tY29sbGFwc2FibGUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2NvbGxhcHNhYmxlJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW2F1dG9Db2xsYXBzZV09XCJhdXRvQ29sbGFwc2VcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBzXT1cInNob3dUb29sdGlwc1wiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcbiAgICAgICAgICAgICAgICA+PC9uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tY29sbGFwc2FibGUtaXRlbT5cblxuICAgICAgICAgICAgICAgIDwhLS0gRGl2aWRlciAtLT5cbiAgICAgICAgICAgICAgICA8bmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWRpdmlkZXItaXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2RpdmlkZXInXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgID48L25pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1kaXZpZGVyLWl0ZW0+XG5cbiAgICAgICAgICAgICAgICA8IS0tIEdyb3VwIC0tPlxuICAgICAgICAgICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tZ3JvdXAtaXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2dyb3VwJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW2F1dG9Db2xsYXBzZV09XCJhdXRvQ29sbGFwc2VcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBzXT1cInNob3dUb29sdGlwc1wiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcbiAgICAgICAgICAgICAgICA+PC9uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tZ3JvdXAtaXRlbT5cblxuICAgICAgICAgICAgICAgIDwhLS0gU3BhY2VyIC0tPlxuICAgICAgICAgICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tc3BhY2VyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdzcGFjZXInXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgID48L25pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1zcGFjZXItaXRlbT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIENvbnRlbnQgZm9vdGVyIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWNvbnRlbnQtZm9vdGVyXCI+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbmljZVZlcnRpY2FsTmF2aWdhdGlvbkNvbnRlbnRGb290ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBGb290ZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1mb290ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW25pY2VWZXJ0aWNhbE5hdmlnYXRpb25Gb290ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gQXNpZGUgLS0+XG48ZGl2XG4gICAgY2xhc3M9XCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYXNpZGUtd3JhcHBlclwiXG4gICAgKm5nSWY9XCJhY3RpdmVBc2lkZUl0ZW1JZFwiXG4gICAgbmljZVNjcm9sbGJhclxuICAgIFtuaWNlU2Nyb2xsYmFyT3B0aW9uc109XCJ7IHdoZWVsUHJvcGFnYXRpb246IGZhbHNlLCBzdXBwcmVzc1Njcm9sbFg6IHRydWUgfVwiXG4gICAgW0BmYWRlSW5MZWZ0XT1cInBvc2l0aW9uID09PSAnbGVmdCdcIlxuICAgIFtAZmFkZUluUmlnaHRdPVwicG9zaXRpb24gPT09ICdyaWdodCdcIlxuICAgIFtAZmFkZU91dExlZnRdPVwicG9zaXRpb24gPT09ICdsZWZ0J1wiXG4gICAgW0BmYWRlT3V0UmlnaHRdPVwicG9zaXRpb24gPT09ICdyaWdodCdcIlxuPlxuXG4gICAgPCEtLSBJdGVtcyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIG5hdmlnYXRpb247IHRyYWNrQnk6IHRyYWNrQnlGblwiPlxuICAgICAgICA8IS0tIFNraXAgdGhlIGhpZGRlbiBpdGVtcyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihpdGVtLmhpZGRlbiAmJiAhaXRlbS5oaWRkZW4oaXRlbSkpIHx8ICFpdGVtLmhpZGRlblwiPlxuICAgICAgICAgICAgPCEtLSBBc2lkZSAtLT5cbiAgICAgICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYXNpZGUtaXRlbVxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS50eXBlID09PSAnYXNpZGUnICYmIGl0ZW0uaWQgPT09IGFjdGl2ZUFzaWRlSXRlbUlkXCJcbiAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBbYXV0b0NvbGxhcHNlXT1cImF1dG9Db2xsYXBzZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwc109XCJzaG93VG9vbHRpcHNcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcbiAgICAgICAgICAgID48L25pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1hc2lkZS1pdGVtPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
|