@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
|
@@ -1,595 +0,0 @@
|
|
|
1
|
-
import { animate, AnimationBuilder, style } from "@angular/animations";
|
|
2
|
-
import { coerceBooleanProperty } from "@angular/cdk/coercion";
|
|
3
|
-
import { ScrollStrategyOptions } from "@angular/cdk/overlay";
|
|
4
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, Output, QueryList, Renderer2, ViewChild, ViewChildren, ViewEncapsulation } from "@angular/core";
|
|
5
|
-
import { NavigationEnd, Router } from "@angular/router";
|
|
6
|
-
import { merge, ReplaySubject } from "rxjs";
|
|
7
|
-
import { delay, filter, takeUntil } from "rxjs/operators";
|
|
8
|
-
import { niceAnimations } from "../../../animations";
|
|
9
|
-
import { NiceScrollbarDirective } from "../../../directives/scrollbar";
|
|
10
|
-
import { NiceUtilsService } from "../../../providers/utils";
|
|
11
|
-
import { NiceNavigationComponent } from "../navigation.component";
|
|
12
|
-
import { NiceNavigationService } from "../navigation.service";
|
|
13
|
-
import { NiceNavigationHintService } from "../providers/hint.service";
|
|
14
|
-
import * as i0 from "@angular/core";
|
|
15
|
-
import * as i1 from "../navigation.service";
|
|
16
|
-
import * as i2 from "../../../providers/utils";
|
|
17
|
-
import * as i3 from "@angular/animations";
|
|
18
|
-
import * as i4 from "@angular/router";
|
|
19
|
-
import * as i5 from "@angular/cdk/overlay";
|
|
20
|
-
import * as i6 from "../providers/hint.service";
|
|
21
|
-
import * as i7 from "@angular/common";
|
|
22
|
-
import * as i8 from "../../../directives/scrollbar/scrollbar.directive";
|
|
23
|
-
import * as i9 from "./components/aside/aside.component";
|
|
24
|
-
import * as i10 from "./components/basic/basic.component";
|
|
25
|
-
import * as i11 from "./components/collapsable/collapsable.component";
|
|
26
|
-
import * as i12 from "./components/divider/divider.component";
|
|
27
|
-
import * as i13 from "./components/group/group.component";
|
|
28
|
-
import * as i14 from "./components/spacer/spacer.component";
|
|
29
|
-
import * as i15 from "../pipes/should-hide.pipe";
|
|
30
|
-
export class NiceVerticalNavigationComponent extends NiceNavigationComponent {
|
|
31
|
-
set navigation(navigation) {
|
|
32
|
-
this._navigation = navigation;
|
|
33
|
-
this._changeDetectorRef.markForCheck();
|
|
34
|
-
}
|
|
35
|
-
get navigation() {
|
|
36
|
-
return this._navigation;
|
|
37
|
-
}
|
|
38
|
-
set forceHovered(forceHovered) {
|
|
39
|
-
this._forceHovered = forceHovered;
|
|
40
|
-
this.hoveredChanged.next((this.hovered || this._forceHovered) || this.hasHint);
|
|
41
|
-
this._changeDetectorRef.markForCheck();
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Constructor
|
|
45
|
-
*/
|
|
46
|
-
constructor(_changeDetectorRef, _niceNavigationService, _niceUtilsService, _animationBuilder, _elementRef, _renderer2, _router, _scrollStrategyOptions, _hintService) {
|
|
47
|
-
super(_changeDetectorRef, _niceNavigationService, _niceUtilsService);
|
|
48
|
-
this._animationBuilder = _animationBuilder;
|
|
49
|
-
this._elementRef = _elementRef;
|
|
50
|
-
this._renderer2 = _renderer2;
|
|
51
|
-
this._router = _router;
|
|
52
|
-
this._scrollStrategyOptions = _scrollStrategyOptions;
|
|
53
|
-
this._hintService = _hintService;
|
|
54
|
-
this._forceHovered = false;
|
|
55
|
-
this._animationsEnabled = false;
|
|
56
|
-
this._scrollStrategy = this._scrollStrategyOptions.block();
|
|
57
|
-
this.name = this._niceUtilsService.randomId();
|
|
58
|
-
this.appearance = "default";
|
|
59
|
-
this.autoCollapse = true;
|
|
60
|
-
this.inner = false;
|
|
61
|
-
this.mode = "side";
|
|
62
|
-
this.opened = true;
|
|
63
|
-
this.hovered = false;
|
|
64
|
-
this.hasHint = false;
|
|
65
|
-
this.position = "left";
|
|
66
|
-
this.showTooltips = false;
|
|
67
|
-
this.transparentOverlay = false;
|
|
68
|
-
this.tooltipPosition = "after";
|
|
69
|
-
this.appearanceChanged = new EventEmitter();
|
|
70
|
-
this.modeChanged = new EventEmitter();
|
|
71
|
-
this.openedChanged = new EventEmitter();
|
|
72
|
-
this.hoveredChanged = new EventEmitter();
|
|
73
|
-
this.positionChanged = new EventEmitter();
|
|
74
|
-
this.activeAsideItemId = null;
|
|
75
|
-
this.onCollapsableItemCollapsed = new ReplaySubject(1);
|
|
76
|
-
this.onCollapsableItemExpanded = new ReplaySubject(1);
|
|
77
|
-
this._handleAsideOverlayClick = () => {
|
|
78
|
-
this.closeAside();
|
|
79
|
-
};
|
|
80
|
-
this._handleOverlayClick = () => {
|
|
81
|
-
this.close();
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
// -----------------------------------------------------------------------------------------------------
|
|
85
|
-
// @ Accessors
|
|
86
|
-
// -----------------------------------------------------------------------------------------------------
|
|
87
|
-
/**
|
|
88
|
-
* Host binding for component classes
|
|
89
|
-
*/
|
|
90
|
-
get classList() {
|
|
91
|
-
return {
|
|
92
|
-
"nice-vertical-navigation-animations-enabled": this._animationsEnabled,
|
|
93
|
-
[`nice-vertical-navigation-appearance-${this.appearance}`]: true,
|
|
94
|
-
"nice-vertical-navigation-hover": this.hovered || this._forceHovered,
|
|
95
|
-
"nice-vertical-navigation-inner": this.inner,
|
|
96
|
-
"nice-vertical-navigation-mode-over": this.mode === "over",
|
|
97
|
-
"nice-vertical-navigation-mode-side": this.mode === "side",
|
|
98
|
-
"nice-vertical-navigation-opened": this.opened,
|
|
99
|
-
"nice-vertical-navigation-position-left": this.position === "left",
|
|
100
|
-
"nice-vertical-navigation-position-right": this.position === "right",
|
|
101
|
-
"nice-vertical-navigation-has-hint": this.hasHint
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Host binding for component inline styles
|
|
106
|
-
*/
|
|
107
|
-
get styleList() {
|
|
108
|
-
return {
|
|
109
|
-
"visibility": this.opened ? "visible" : "hidden"
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Setter for niceScrollbarDirectives
|
|
114
|
-
*/
|
|
115
|
-
set niceScrollbarDirectives(niceScrollbarDirectives) {
|
|
116
|
-
// Store the directives
|
|
117
|
-
this._niceScrollbarDirectives = niceScrollbarDirectives;
|
|
118
|
-
// Return if there are no directives
|
|
119
|
-
if (niceScrollbarDirectives.length === 0) {
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
// Unsubscribe the previous subscriptions
|
|
123
|
-
if (this._niceScrollbarDirectivesSubscription) {
|
|
124
|
-
this._niceScrollbarDirectivesSubscription.unsubscribe();
|
|
125
|
-
}
|
|
126
|
-
// Update the scrollbars on collapsable items' collapse/expand
|
|
127
|
-
this._niceScrollbarDirectivesSubscription =
|
|
128
|
-
merge(this.onCollapsableItemCollapsed, this.onCollapsableItemExpanded)
|
|
129
|
-
.pipe(takeUntil(this._unsubscribeAll), delay(250))
|
|
130
|
-
.subscribe(() => {
|
|
131
|
-
// Loop through the scrollbars and update them
|
|
132
|
-
niceScrollbarDirectives.forEach((niceScrollbarDirective) => {
|
|
133
|
-
niceScrollbarDirective.update();
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
// -----------------------------------------------------------------------------------------------------
|
|
138
|
-
// @ Lifecycle hooks
|
|
139
|
-
// -----------------------------------------------------------------------------------------------------
|
|
140
|
-
/**
|
|
141
|
-
* On changes
|
|
142
|
-
*
|
|
143
|
-
* @param changes
|
|
144
|
-
*/
|
|
145
|
-
ngOnChanges(changes) {
|
|
146
|
-
super.ngOnChanges(changes);
|
|
147
|
-
// Appearance
|
|
148
|
-
if ("appearance" in changes) {
|
|
149
|
-
// Execute the observable
|
|
150
|
-
this.appearanceChanged.next(changes.appearance.currentValue);
|
|
151
|
-
}
|
|
152
|
-
// Inner
|
|
153
|
-
if ("inner" in changes) {
|
|
154
|
-
// Coerce the value to a boolean
|
|
155
|
-
this.inner = coerceBooleanProperty(changes.inner.currentValue);
|
|
156
|
-
}
|
|
157
|
-
// Mode
|
|
158
|
-
if ("mode" in changes) {
|
|
159
|
-
// Get the previous and current values
|
|
160
|
-
const currentMode = changes.mode.currentValue;
|
|
161
|
-
const previousMode = changes.mode.previousValue;
|
|
162
|
-
// Disable the animations
|
|
163
|
-
this._disableAnimations();
|
|
164
|
-
// If the mode changes: 'over -> side'
|
|
165
|
-
if (previousMode === "over" && currentMode === "side") {
|
|
166
|
-
// Hide the overlay
|
|
167
|
-
this._hideOverlay();
|
|
168
|
-
}
|
|
169
|
-
// If the mode changes: 'side -> over'
|
|
170
|
-
if (previousMode === "side" && currentMode === "over") {
|
|
171
|
-
// Close the aside
|
|
172
|
-
this.closeAside();
|
|
173
|
-
// If the navigation is opened
|
|
174
|
-
if (this.opened) {
|
|
175
|
-
// Show the overlay
|
|
176
|
-
this._showOverlay();
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
// Execute the observable
|
|
180
|
-
this.modeChanged.next(currentMode);
|
|
181
|
-
// Enable the animations after a delay
|
|
182
|
-
// The delay must be bigger than the current transition-duration
|
|
183
|
-
// to make sure nothing will be animated while the mode changing
|
|
184
|
-
setTimeout(() => {
|
|
185
|
-
this._enableAnimations();
|
|
186
|
-
}, 500);
|
|
187
|
-
}
|
|
188
|
-
// Opened
|
|
189
|
-
if ("opened" in changes) {
|
|
190
|
-
// Coerce the value to a boolean
|
|
191
|
-
this.opened = coerceBooleanProperty(changes.opened.currentValue);
|
|
192
|
-
// Open/close the navigation
|
|
193
|
-
this._toggleOpened(this.opened);
|
|
194
|
-
}
|
|
195
|
-
// Position
|
|
196
|
-
if ("position" in changes) {
|
|
197
|
-
// Execute the observable
|
|
198
|
-
this.positionChanged.next(changes.position.currentValue);
|
|
199
|
-
}
|
|
200
|
-
// Transparent overlay
|
|
201
|
-
if ("transparentOverlay" in changes) {
|
|
202
|
-
// Coerce the value to a boolean
|
|
203
|
-
this.transparentOverlay = coerceBooleanProperty(changes.transparentOverlay.currentValue);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* On init
|
|
208
|
-
*/
|
|
209
|
-
ngOnInit() {
|
|
210
|
-
super.ngOnInit();
|
|
211
|
-
// Make sure the name input is not an empty string
|
|
212
|
-
if (this.name === "") {
|
|
213
|
-
this.name = this._niceUtilsService.randomId();
|
|
214
|
-
}
|
|
215
|
-
// Subscribe to the 'NavigationEnd' event
|
|
216
|
-
this._router.events
|
|
217
|
-
.pipe(filter(event => event instanceof NavigationEnd), takeUntil(this._unsubscribeAll))
|
|
218
|
-
.subscribe(() => {
|
|
219
|
-
// If the mode is 'over' and the navigation is opened...
|
|
220
|
-
if (this.mode === "over" && this.opened) {
|
|
221
|
-
// Close the navigation
|
|
222
|
-
this.close();
|
|
223
|
-
}
|
|
224
|
-
// If the mode is 'side' and the aside is active...
|
|
225
|
-
if (this.mode === "side" && this.activeAsideItemId) {
|
|
226
|
-
// Close the aside
|
|
227
|
-
this.closeAside();
|
|
228
|
-
}
|
|
229
|
-
});
|
|
230
|
-
this._hintService.hasActiveHint$.pipe(takeUntil(this._unsubscribeAll)).subscribe(hasHint => {
|
|
231
|
-
this.hasHint = hasHint;
|
|
232
|
-
this.hoveredChanged.next((this.hovered || this._forceHovered) || this.hasHint);
|
|
233
|
-
});
|
|
234
|
-
}
|
|
235
|
-
/**
|
|
236
|
-
* After view init
|
|
237
|
-
*/
|
|
238
|
-
ngAfterViewInit() {
|
|
239
|
-
setTimeout(() => {
|
|
240
|
-
// Return if 'navigation content' element does not exist
|
|
241
|
-
if (!this._navigationContentEl) {
|
|
242
|
-
return;
|
|
243
|
-
}
|
|
244
|
-
// If 'navigation content' element doesn't have
|
|
245
|
-
// perfect scrollbar activated on it...
|
|
246
|
-
if (!this._navigationContentEl.nativeElement.classList.contains("ps")) {
|
|
247
|
-
// Find the active item
|
|
248
|
-
const activeItem = this._navigationContentEl.nativeElement.querySelector(".nice-vertical-navigation-item-active");
|
|
249
|
-
// If the active item exists, scroll it into view
|
|
250
|
-
if (activeItem) {
|
|
251
|
-
activeItem.scrollIntoView();
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
// Otherwise
|
|
255
|
-
else {
|
|
256
|
-
// Go through all the scrollbar directives
|
|
257
|
-
this._niceScrollbarDirectives.forEach((niceScrollbarDirective) => {
|
|
258
|
-
// Skip if not enabled
|
|
259
|
-
if (!niceScrollbarDirective.isEnabled()) {
|
|
260
|
-
return;
|
|
261
|
-
}
|
|
262
|
-
// Scroll to the active element
|
|
263
|
-
niceScrollbarDirective.scrollToElement(".nice-vertical-navigation-item-active", -120, true);
|
|
264
|
-
});
|
|
265
|
-
}
|
|
266
|
-
});
|
|
267
|
-
}
|
|
268
|
-
// -----------------------------------------------------------------------------------------------------
|
|
269
|
-
// @ Public methods
|
|
270
|
-
// -----------------------------------------------------------------------------------------------------
|
|
271
|
-
/**
|
|
272
|
-
* Open the navigation
|
|
273
|
-
*/
|
|
274
|
-
open() {
|
|
275
|
-
// Return if the navigation is already open
|
|
276
|
-
if (this.opened) {
|
|
277
|
-
return;
|
|
278
|
-
}
|
|
279
|
-
// Set the opened
|
|
280
|
-
this._toggleOpened(true);
|
|
281
|
-
}
|
|
282
|
-
/**
|
|
283
|
-
* Close the navigation
|
|
284
|
-
*/
|
|
285
|
-
close() {
|
|
286
|
-
// Return if the navigation is already closed
|
|
287
|
-
if (!this.opened) {
|
|
288
|
-
return;
|
|
289
|
-
}
|
|
290
|
-
// Close the aside
|
|
291
|
-
this.closeAside();
|
|
292
|
-
// Set the opened
|
|
293
|
-
this._toggleOpened(false);
|
|
294
|
-
}
|
|
295
|
-
/**
|
|
296
|
-
* Toggle the navigation
|
|
297
|
-
*/
|
|
298
|
-
toggle() {
|
|
299
|
-
// Toggle
|
|
300
|
-
if (this.opened) {
|
|
301
|
-
this.close();
|
|
302
|
-
}
|
|
303
|
-
else {
|
|
304
|
-
this.open();
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
/**
|
|
308
|
-
* Open the aside
|
|
309
|
-
*/
|
|
310
|
-
openAside(item) {
|
|
311
|
-
// Return if the item is disabled
|
|
312
|
-
if (item.disabled || !item.id) {
|
|
313
|
-
return;
|
|
314
|
-
}
|
|
315
|
-
// Open
|
|
316
|
-
this.activeAsideItemId = item.id;
|
|
317
|
-
// Show the aside overlay
|
|
318
|
-
this._showAsideOverlay();
|
|
319
|
-
// Mark for check
|
|
320
|
-
this._changeDetectorRef.markForCheck();
|
|
321
|
-
}
|
|
322
|
-
/**
|
|
323
|
-
* Close the aside
|
|
324
|
-
*/
|
|
325
|
-
closeAside() {
|
|
326
|
-
// Close
|
|
327
|
-
this.activeAsideItemId = null;
|
|
328
|
-
// Hide the aside overlay
|
|
329
|
-
this._hideAsideOverlay();
|
|
330
|
-
// Mark for check
|
|
331
|
-
this._changeDetectorRef.markForCheck();
|
|
332
|
-
}
|
|
333
|
-
/**
|
|
334
|
-
* Toggle the aside
|
|
335
|
-
*/
|
|
336
|
-
toggleAside(item) {
|
|
337
|
-
// Toggle
|
|
338
|
-
if (this.activeAsideItemId === item.id) {
|
|
339
|
-
this.closeAside();
|
|
340
|
-
}
|
|
341
|
-
else {
|
|
342
|
-
this.openAside(item);
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
// -----------------------------------------------------------------------------------------------------
|
|
346
|
-
// @ Private methods
|
|
347
|
-
// -----------------------------------------------------------------------------------------------------
|
|
348
|
-
/**
|
|
349
|
-
* Enable the animations
|
|
350
|
-
*
|
|
351
|
-
* @private
|
|
352
|
-
*/
|
|
353
|
-
_enableAnimations() {
|
|
354
|
-
// Return if the animations are already enabled
|
|
355
|
-
if (this._animationsEnabled) {
|
|
356
|
-
return;
|
|
357
|
-
}
|
|
358
|
-
// Enable the animations
|
|
359
|
-
this._animationsEnabled = true;
|
|
360
|
-
}
|
|
361
|
-
/**
|
|
362
|
-
* Disable the animations
|
|
363
|
-
*
|
|
364
|
-
* @private
|
|
365
|
-
*/
|
|
366
|
-
_disableAnimations() {
|
|
367
|
-
// Return if the animations are already disabled
|
|
368
|
-
if (!this._animationsEnabled) {
|
|
369
|
-
return;
|
|
370
|
-
}
|
|
371
|
-
// Disable the animations
|
|
372
|
-
this._animationsEnabled = false;
|
|
373
|
-
}
|
|
374
|
-
/**
|
|
375
|
-
* Show the overlay
|
|
376
|
-
*
|
|
377
|
-
* @private
|
|
378
|
-
*/
|
|
379
|
-
_showOverlay() {
|
|
380
|
-
// Return if there is already an overlay
|
|
381
|
-
if (this._asideOverlay) {
|
|
382
|
-
return;
|
|
383
|
-
}
|
|
384
|
-
// Create the overlay element
|
|
385
|
-
this._overlay = this._renderer2.createElement("div");
|
|
386
|
-
// Add a class to the overlay element
|
|
387
|
-
this._overlay.classList.add("nice-vertical-navigation-overlay");
|
|
388
|
-
// Add a class depending on the transparentOverlay option
|
|
389
|
-
if (this.transparentOverlay) {
|
|
390
|
-
this._overlay.classList.add("nice-vertical-navigation-overlay-transparent");
|
|
391
|
-
}
|
|
392
|
-
// Append the overlay to the parent of the navigation
|
|
393
|
-
this._renderer2.appendChild(this._elementRef.nativeElement.parentElement, this._overlay);
|
|
394
|
-
// Enable block scroll strategy
|
|
395
|
-
this._scrollStrategy.enable();
|
|
396
|
-
// Create the enter animation and attach it to the player
|
|
397
|
-
this._player = this._animationBuilder.build([
|
|
398
|
-
animate("300ms cubic-bezier(0.25, 0.8, 0.25, 1)", style({ opacity: 1 }))
|
|
399
|
-
]).create(this._overlay);
|
|
400
|
-
// Play the animation
|
|
401
|
-
this._player.play();
|
|
402
|
-
// Add an event listener to the overlay
|
|
403
|
-
this._overlay.addEventListener("click", this._handleOverlayClick);
|
|
404
|
-
}
|
|
405
|
-
/**
|
|
406
|
-
* Hide the overlay
|
|
407
|
-
*
|
|
408
|
-
* @private
|
|
409
|
-
*/
|
|
410
|
-
_hideOverlay() {
|
|
411
|
-
if (!this._overlay) {
|
|
412
|
-
return;
|
|
413
|
-
}
|
|
414
|
-
// Create the leave animation and attach it to the player
|
|
415
|
-
this._player = this._animationBuilder.build([
|
|
416
|
-
animate("300ms cubic-bezier(0.25, 0.8, 0.25, 1)", style({ opacity: 0 }))
|
|
417
|
-
]).create(this._overlay);
|
|
418
|
-
// Play the animation
|
|
419
|
-
this._player.play();
|
|
420
|
-
// Once the animation is done...
|
|
421
|
-
this._player.onDone(() => {
|
|
422
|
-
// If the overlay still exists...
|
|
423
|
-
if (this._overlay) {
|
|
424
|
-
// Remove the event listener
|
|
425
|
-
this._overlay.removeEventListener("click", this._handleOverlayClick);
|
|
426
|
-
// Remove the overlay
|
|
427
|
-
this._overlay.parentNode.removeChild(this._overlay);
|
|
428
|
-
this._overlay = null;
|
|
429
|
-
}
|
|
430
|
-
// Disable block scroll strategy
|
|
431
|
-
this._scrollStrategy.disable();
|
|
432
|
-
});
|
|
433
|
-
}
|
|
434
|
-
/**
|
|
435
|
-
* Show the aside overlay
|
|
436
|
-
*
|
|
437
|
-
* @private
|
|
438
|
-
*/
|
|
439
|
-
_showAsideOverlay() {
|
|
440
|
-
// Return if there is already an overlay
|
|
441
|
-
if (this._asideOverlay) {
|
|
442
|
-
return;
|
|
443
|
-
}
|
|
444
|
-
// Create the aside overlay element
|
|
445
|
-
this._asideOverlay = this._renderer2.createElement("div");
|
|
446
|
-
// Add a class to the aside overlay element
|
|
447
|
-
this._asideOverlay.classList.add("nice-vertical-navigation-aside-overlay");
|
|
448
|
-
// Append the aside overlay to the parent of the navigation
|
|
449
|
-
this._renderer2.appendChild(this._elementRef.nativeElement.parentElement, this._asideOverlay);
|
|
450
|
-
// Create the enter animation and attach it to the player
|
|
451
|
-
this._player =
|
|
452
|
-
this._animationBuilder
|
|
453
|
-
.build([
|
|
454
|
-
animate("300ms cubic-bezier(0.25, 0.8, 0.25, 1)", style({ opacity: 1 }))
|
|
455
|
-
]).create(this._asideOverlay);
|
|
456
|
-
// Play the animation
|
|
457
|
-
this._player.play();
|
|
458
|
-
// Add an event listener to the aside overlay
|
|
459
|
-
this._asideOverlay.addEventListener("click", this._handleAsideOverlayClick);
|
|
460
|
-
}
|
|
461
|
-
/**
|
|
462
|
-
* Hide the aside overlay
|
|
463
|
-
*
|
|
464
|
-
* @private
|
|
465
|
-
*/
|
|
466
|
-
_hideAsideOverlay() {
|
|
467
|
-
if (!this._asideOverlay) {
|
|
468
|
-
return;
|
|
469
|
-
}
|
|
470
|
-
// Create the leave animation and attach it to the player
|
|
471
|
-
this._player =
|
|
472
|
-
this._animationBuilder
|
|
473
|
-
.build([
|
|
474
|
-
animate("300ms cubic-bezier(0.25, 0.8, 0.25, 1)", style({ opacity: 0 }))
|
|
475
|
-
]).create(this._asideOverlay);
|
|
476
|
-
// Play the animation
|
|
477
|
-
this._player.play();
|
|
478
|
-
// Once the animation is done...
|
|
479
|
-
this._player.onDone(() => {
|
|
480
|
-
// If the aside overlay still exists...
|
|
481
|
-
if (this._asideOverlay) {
|
|
482
|
-
// Remove the event listener
|
|
483
|
-
this._asideOverlay.removeEventListener("click", this._handleAsideOverlayClick);
|
|
484
|
-
// Remove the aside overlay
|
|
485
|
-
this._asideOverlay.parentNode.removeChild(this._asideOverlay);
|
|
486
|
-
this._asideOverlay = null;
|
|
487
|
-
}
|
|
488
|
-
});
|
|
489
|
-
}
|
|
490
|
-
/**
|
|
491
|
-
* On mouseenter
|
|
492
|
-
*/
|
|
493
|
-
_onMouseenter() {
|
|
494
|
-
// Enable the animations
|
|
495
|
-
this._enableAnimations();
|
|
496
|
-
// Set the hovered
|
|
497
|
-
this.hovered = true;
|
|
498
|
-
this.hoveredChanged.next(this.hovered || this._forceHovered);
|
|
499
|
-
}
|
|
500
|
-
/**
|
|
501
|
-
* On mouseleave
|
|
502
|
-
*/
|
|
503
|
-
_onMouseleave() {
|
|
504
|
-
// Enable the animations
|
|
505
|
-
this._enableAnimations();
|
|
506
|
-
// Set the hovered
|
|
507
|
-
this.hovered = false;
|
|
508
|
-
this.hoveredChanged.next(this.hovered || this._forceHovered || this.hasHint);
|
|
509
|
-
}
|
|
510
|
-
/**
|
|
511
|
-
* Open/close the navigation
|
|
512
|
-
*
|
|
513
|
-
* @param open
|
|
514
|
-
* @private
|
|
515
|
-
*/
|
|
516
|
-
_toggleOpened(open) {
|
|
517
|
-
// Set the opened
|
|
518
|
-
this.opened = open;
|
|
519
|
-
// Enable the animations
|
|
520
|
-
this._enableAnimations();
|
|
521
|
-
// If the navigation opened, and the mode
|
|
522
|
-
// is 'over', show the overlay
|
|
523
|
-
if (this.mode === "over") {
|
|
524
|
-
if (this.opened) {
|
|
525
|
-
this._showOverlay();
|
|
526
|
-
}
|
|
527
|
-
else {
|
|
528
|
-
this._hideOverlay();
|
|
529
|
-
}
|
|
530
|
-
}
|
|
531
|
-
// Execute the observable
|
|
532
|
-
this.openedChanged.next(open);
|
|
533
|
-
}
|
|
534
|
-
}
|
|
535
|
-
NiceVerticalNavigationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NiceVerticalNavigationComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.NiceNavigationService }, { token: i2.NiceUtilsService }, { token: i3.AnimationBuilder }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i4.Router }, { token: i5.ScrollStrategyOptions }, { token: i6.NiceNavigationHintService }], target: i0.ɵɵFactoryTarget.Component });
|
|
536
|
-
NiceVerticalNavigationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", 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", 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" } }, 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: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NiceScrollbarDirective, selector: "[niceScrollbar]", inputs: ["niceScrollbar", "niceScrollbarOptions"], exportAs: ["niceScrollbar"] }, { kind: "component", type: i9.NiceVerticalNavigationAsideItemComponent, selector: "nice-vertical-navigation-aside-item", inputs: ["activeItemId", "autoCollapse", "item", "name", "showTooltips", "skipChildren", "tooltipPosition"] }, { kind: "component", type: i10.NiceVerticalNavigationBasicItemComponent, selector: "nice-vertical-navigation-basic-item", inputs: ["item", "name", "showTooltips", "tooltipPosition"] }, { kind: "component", type: i11.NiceVerticalNavigationCollapsableItemComponent, selector: "nice-vertical-navigation-collapsable-item", inputs: ["autoCollapse", "item", "name", "showTooltips", "tooltipPosition"] }, { kind: "component", type: i12.NiceVerticalNavigationDividerItemComponent, selector: "nice-vertical-navigation-divider-item", inputs: ["item", "name"] }, { kind: "component", type: i13.NiceVerticalNavigationGroupItemComponent, selector: "nice-vertical-navigation-group-item", inputs: ["autoCollapse", "item", "name", "showTooltips", "tooltipPosition"] }, { kind: "component", type: i14.NiceVerticalNavigationSpacerItemComponent, selector: "nice-vertical-navigation-spacer-item", inputs: ["item", "name"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i15.NiceShouldHidePipe, name: "niceShouldHide" }], animations: niceAnimations, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
537
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: NiceVerticalNavigationComponent, decorators: [{
|
|
538
|
-
type: Component,
|
|
539
|
-
args: [{ selector: "nice-vertical-navigation", animations: niceAnimations, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, 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" }]
|
|
540
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.NiceNavigationService }, { type: i2.NiceUtilsService }, { type: i3.AnimationBuilder }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i4.Router }, { type: i5.ScrollStrategyOptions }, { type: i6.NiceNavigationHintService }]; }, propDecorators: { name: [{
|
|
541
|
-
type: Input
|
|
542
|
-
}], appearance: [{
|
|
543
|
-
type: Input
|
|
544
|
-
}], autoCollapse: [{
|
|
545
|
-
type: Input
|
|
546
|
-
}], inner: [{
|
|
547
|
-
type: Input
|
|
548
|
-
}], mode: [{
|
|
549
|
-
type: Input
|
|
550
|
-
}], opened: [{
|
|
551
|
-
type: Input
|
|
552
|
-
}], hovered: [{
|
|
553
|
-
type: Input
|
|
554
|
-
}], hasHint: [{
|
|
555
|
-
type: Input
|
|
556
|
-
}], position: [{
|
|
557
|
-
type: Input
|
|
558
|
-
}], showTooltips: [{
|
|
559
|
-
type: Input
|
|
560
|
-
}], transparentOverlay: [{
|
|
561
|
-
type: Input
|
|
562
|
-
}], tooltipPosition: [{
|
|
563
|
-
type: Input
|
|
564
|
-
}], appearanceChanged: [{
|
|
565
|
-
type: Output
|
|
566
|
-
}], modeChanged: [{
|
|
567
|
-
type: Output
|
|
568
|
-
}], openedChanged: [{
|
|
569
|
-
type: Output
|
|
570
|
-
}], hoveredChanged: [{
|
|
571
|
-
type: Output
|
|
572
|
-
}], positionChanged: [{
|
|
573
|
-
type: Output
|
|
574
|
-
}], _navigationContentEl: [{
|
|
575
|
-
type: ViewChild,
|
|
576
|
-
args: ["navigationContent"]
|
|
577
|
-
}], navigation: [{
|
|
578
|
-
type: Input
|
|
579
|
-
}], classList: [{
|
|
580
|
-
type: HostBinding,
|
|
581
|
-
args: ["class"]
|
|
582
|
-
}], styleList: [{
|
|
583
|
-
type: HostBinding,
|
|
584
|
-
args: ["style"]
|
|
585
|
-
}], niceScrollbarDirectives: [{
|
|
586
|
-
type: ViewChildren,
|
|
587
|
-
args: [NiceScrollbarDirective]
|
|
588
|
-
}], _onMouseenter: [{
|
|
589
|
-
type: HostListener,
|
|
590
|
-
args: ["mouseenter"]
|
|
591
|
-
}], _onMouseleave: [{
|
|
592
|
-
type: HostListener,
|
|
593
|
-
args: ["mouseleave"]
|
|
594
|
-
}] } });
|
|
595
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVydGljYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmljZS11aS1raXQtdjIvc3JjL2xpYi9jb21wb25lbnRzL25hdmlnYXRpb24vdmVydGljYWwvdmVydGljYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmljZS11aS1raXQtdjIvc3JjL2xpYi9jb21wb25lbnRzL25hdmlnYXRpb24vdmVydGljYWwvdmVydGljYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBbUIsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEYsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBa0IscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFFVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStC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ciwgc3R5bGUgfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2NvZXJjaW9uXCI7XG5pbXBvcnQgeyBTY3JvbGxTdHJhdGVneSwgU2Nyb2xsU3RyYXRlZ3lPcHRpb25zIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9vdmVybGF5XCI7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXBcIjtcbmltcG9ydCB7IE5hdmlnYXRpb25FbmQsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IG1lcmdlLCBSZXBsYXlTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgZGVsYXksIGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBuaWNlQW5pbWF0aW9ucyB9IGZyb20gXCIuLi8uLi8uLi9hbmltYXRpb25zXCI7XG5pbXBvcnQgeyBOaWNlU2Nyb2xsYmFyRGlyZWN0aXZlIH0gZnJvbSBcIi4uLy4uLy4uL2RpcmVjdGl2ZXMvc2Nyb2xsYmFyXCI7XG5pbXBvcnQgeyBOaWNlVXRpbHNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3Byb3ZpZGVycy91dGlsc1wiO1xuaW1wb3J0IHsgTmljZU5hdmlnYXRpb25Db21wb25lbnQgfSBmcm9tIFwiLi4vbmF2aWdhdGlvbi5jb21wb25lbnRcIjtcbmltcG9ydCB7IE5pY2VOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gXCIuLi9uYXZpZ2F0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gICAgTmljZU5hdmlnYXRpb25JdGVtLFxuICAgIE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25BcHBlYXJhbmNlLFxuICAgIE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25Nb2RlLFxuICAgIE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25Qb3NpdGlvblxufSBmcm9tIFwiLi4vbmF2aWdhdGlvbi50eXBlc1wiO1xuaW1wb3J0IHsgTmljZU5hdmlnYXRpb25IaW50U2VydmljZSB9IGZyb20gXCIuLi9wcm92aWRlcnMvaGludC5zZXJ2aWNlXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvblwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vdmVydGljYWwuY29tcG9uZW50Lmh0bWxcIixcbiAgICBhbmltYXRpb25zOiBuaWNlQW5pbWF0aW9ucyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGV4cG9ydEFzOiBcIm5pY2VWZXJ0aWNhbE5hdmlnYXRpb25cIlxufSlcbmV4cG9ydCBjbGFzcyBOaWNlVmVydGljYWxOYXZpZ2F0aW9uQ29tcG9uZW50IGV4dGVuZHMgTmljZU5hdmlnYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcbiAgICBwdWJsaWMgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2lubmVyOiBCb29sZWFuSW5wdXQ7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnZhcmlhYmxlLW5hbWVcbiAgICBwdWJsaWMgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX29wZW5lZDogQm9vbGVhbklucHV0O1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gICAgcHVibGljIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV90cmFuc3BhcmVudE92ZXJsYXk6IEJvb2xlYW5JbnB1dDtcblxuICAgIHByaXZhdGUgX2ZvcmNlSG92ZXJlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2FuaW1hdGlvbnNFbmFibGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfYXNpZGVPdmVybGF5OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVBc2lkZU92ZXJsYXlDbGljazogYW55O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2hhbmRsZU92ZXJsYXlDbGljazogYW55O1xuICAgIHByaXZhdGUgX292ZXJsYXk6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgX3BsYXllcjogQW5pbWF0aW9uUGxheWVyO1xuICAgIHByaXZhdGUgX3Njcm9sbFN0cmF0ZWd5OiBTY3JvbGxTdHJhdGVneSA9IHRoaXMuX3Njcm9sbFN0cmF0ZWd5T3B0aW9ucy5ibG9jaygpO1xuICAgIHByaXZhdGUgX25pY2VTY3JvbGxiYXJEaXJlY3RpdmVzITogUXVlcnlMaXN0PE5pY2VTY3JvbGxiYXJEaXJlY3RpdmU+O1xuICAgIHByaXZhdGUgX25pY2VTY3JvbGxiYXJEaXJlY3RpdmVzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSB0aGlzLl9uaWNlVXRpbHNTZXJ2aWNlLnJhbmRvbUlkKCk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhcHBlYXJhbmNlOiBOaWNlVmVydGljYWxOYXZpZ2F0aW9uQXBwZWFyYW5jZSA9IFwiZGVmYXVsdFwiO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXV0b0NvbGxhcHNlID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlubmVyID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtb2RlOiBOaWNlVmVydGljYWxOYXZpZ2F0aW9uTW9kZSA9IFwic2lkZVwiO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgb3BlbmVkID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhvdmVyZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGhhc0hpbnQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHBvc2l0aW9uOiBOaWNlVmVydGljYWxOYXZpZ2F0aW9uUG9zaXRpb24gPSBcImxlZnRcIjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dUb29sdGlwcyA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdHJhbnNwYXJlbnRPdmVybGF5ID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0b29sdGlwUG9zaXRpb246IFRvb2x0aXBQb3NpdGlvbiA9IFwiYWZ0ZXJcIjtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyByZWFkb25seSBhcHBlYXJhbmNlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TmljZVZlcnRpY2FsTmF2aWdhdGlvbkFwcGVhcmFuY2U+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgbW9kZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE5pY2VWZXJ0aWNhbE5hdmlnYXRpb25Nb2RlPigpO1xuXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHJlYWRvbmx5IG9wZW5lZENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgaG92ZXJlZENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgcG9zaXRpb25DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxOaWNlVmVydGljYWxOYXZpZ2F0aW9uUG9zaXRpb24+KCk7XG5cbiAgICBAVmlld0NoaWxkKFwibmF2aWdhdGlvbkNvbnRlbnRcIilcbiAgICBwcml2YXRlIF9uYXZpZ2F0aW9uQ29udGVudEVsOiBFbGVtZW50UmVmO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IG5hdmlnYXRpb24obmF2aWdhdGlvbjogTmljZU5hdmlnYXRpb25JdGVtW10pIHtcbiAgICAgICAgdGhpcy5fbmF2aWdhdGlvbiA9IG5hdmlnYXRpb247XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IG5hdmlnYXRpb24oKTogTmljZU5hdmlnYXRpb25JdGVtW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGZvcmNlSG92ZXJlZChmb3JjZUhvdmVyZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZm9yY2VIb3ZlcmVkID0gZm9yY2VIb3ZlcmVkO1xuICAgICAgICB0aGlzLmhvdmVyZWRDaGFuZ2VkLm5leHQoKHRoaXMuaG92ZXJlZCB8fCB0aGlzLl9mb3JjZUhvdmVyZWQpIHx8IHRoaXMuaGFzSGludCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhY3RpdmVBc2lkZUl0ZW1JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIG9uQ29sbGFwc2FibGVJdGVtQ29sbGFwc2VkID0gbmV3IFJlcGxheVN1YmplY3Q8TmljZU5hdmlnYXRpb25JdGVtPigxKTtcbiAgICBwdWJsaWMgb25Db2xsYXBzYWJsZUl0ZW1FeHBhbmRlZCA9IG5ldyBSZXBsYXlTdWJqZWN0PE5pY2VOYXZpZ2F0aW9uSXRlbT4oMSk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBfbmljZU5hdmlnYXRpb25TZXJ2aWNlOiBOaWNlTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIF9uaWNlVXRpbHNTZXJ2aWNlOiBOaWNlVXRpbHNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9hbmltYXRpb25CdWlsZGVyOiBBbmltYXRpb25CdWlsZGVyLFxuICAgICAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9yZW5kZXJlcjI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgX3Njcm9sbFN0cmF0ZWd5T3B0aW9uczogU2Nyb2xsU3RyYXRlZ3lPcHRpb25zLFxuICAgICAgICBwcml2YXRlIF9oaW50U2VydmljZTogTmljZU5hdmlnYXRpb25IaW50U2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihfY2hhbmdlRGV0ZWN0b3JSZWYsIF9uaWNlTmF2aWdhdGlvblNlcnZpY2UsIF9uaWNlVXRpbHNTZXJ2aWNlKTtcblxuICAgICAgICB0aGlzLl9oYW5kbGVBc2lkZU92ZXJsYXlDbGljayA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VBc2lkZSgpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLl9oYW5kbGVPdmVybGF5Q2xpY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBAIEFjY2Vzc29yc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvKipcbiAgICAgKiBIb3N0IGJpbmRpbmcgZm9yIGNvbXBvbmVudCBjbGFzc2VzXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKFwiY2xhc3NcIilcbiAgICBwdWJsaWMgZ2V0IGNsYXNzTGlzdCgpOiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYW5pbWF0aW9ucy1lbmFibGVkXCI6IHRoaXMuX2FuaW1hdGlvbnNFbmFibGVkLFxuICAgICAgICAgICAgW2BuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYXBwZWFyYW5jZS0ke3RoaXMuYXBwZWFyYW5jZX1gXTogdHJ1ZSxcbiAgICAgICAgICAgIFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWhvdmVyXCI6IHRoaXMuaG92ZXJlZCB8fCB0aGlzLl9mb3JjZUhvdmVyZWQsXG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1pbm5lclwiOiB0aGlzLmlubmVyLFxuICAgICAgICAgICAgXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tbW9kZS1vdmVyXCI6IHRoaXMubW9kZSA9PT0gXCJvdmVyXCIsXG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1tb2RlLXNpZGVcIjogdGhpcy5tb2RlID09PSBcInNpZGVcIixcbiAgICAgICAgICAgIFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLW9wZW5lZFwiOiB0aGlzLm9wZW5lZCxcbiAgICAgICAgICAgIFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLXBvc2l0aW9uLWxlZnRcIjogdGhpcy5wb3NpdGlvbiA9PT0gXCJsZWZ0XCIsXG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1wb3NpdGlvbi1yaWdodFwiOiB0aGlzLnBvc2l0aW9uID09PSBcInJpZ2h0XCIsXG4gICAgICAgICAgICBcIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1oYXMtaGludFwiOiB0aGlzLmhhc0hpbnRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIb3N0IGJpbmRpbmcgZm9yIGNvbXBvbmVudCBpbmxpbmUgc3R5bGVzXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKFwic3R5bGVcIilcbiAgICBwdWJsaWMgZ2V0IHN0eWxlTGlzdCgpOiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgXCJ2aXNpYmlsaXR5XCI6IHRoaXMub3BlbmVkID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0dGVyIGZvciBuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlc1xuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oTmljZVNjcm9sbGJhckRpcmVjdGl2ZSlcbiAgICBwdWJsaWMgc2V0IG5pY2VTY3JvbGxiYXJEaXJlY3RpdmVzKG5pY2VTY3JvbGxiYXJEaXJlY3RpdmVzOiBRdWVyeUxpc3Q8TmljZVNjcm9sbGJhckRpcmVjdGl2ZT4pIHtcbiAgICAgICAgLy8gU3RvcmUgdGhlIGRpcmVjdGl2ZXNcbiAgICAgICAgdGhpcy5fbmljZVNjcm9sbGJhckRpcmVjdGl2ZXMgPSBuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlcztcblxuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlcmUgYXJlIG5vIGRpcmVjdGl2ZXNcbiAgICAgICAgaWYgKG5pY2VTY3JvbGxiYXJEaXJlY3RpdmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVW5zdWJzY3JpYmUgdGhlIHByZXZpb3VzIHN1YnNjcmlwdGlvbnNcbiAgICAgICAgaWYgKHRoaXMuX25pY2VTY3JvbGxiYXJEaXJlY3RpdmVzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9uaWNlU2Nyb2xsYmFyRGlyZWN0aXZlc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBzY3JvbGxiYXJzIG9uIGNvbGxhcHNhYmxlIGl0ZW1zJyBjb2xsYXBzZS9leHBhbmRcbiAgICAgICAgdGhpcy5fbmljZVNjcm9sbGJhckRpcmVjdGl2ZXNTdWJzY3JpcHRpb24gPVxuICAgICAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy5vbkNvbGxhcHNhYmxlSXRlbUNvbGxhcHNlZCxcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ29sbGFwc2FibGVJdGVtRXhwYW5kZWRcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSxcbiAgICAgICAgICAgICAgICAgICAgZGVsYXkoMjUwKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAvLyBMb29wIHRocm91Z2ggdGhlIHNjcm9sbGJhcnMgYW5kIHVwZGF0ZSB0aGVtXG4gICAgICAgICAgICAgICAgICAgIG5pY2VTY3JvbGxiYXJEaXJlY3RpdmVzLmZvckVhY2goKG5pY2VTY3JvbGxiYXJEaXJlY3RpdmUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5pY2VTY3JvbGxiYXJEaXJlY3RpdmUudXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQCBMaWZlY3ljbGUgaG9va3NcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLyoqXG4gICAgICogT24gY2hhbmdlc1xuICAgICAqXG4gICAgICogQHBhcmFtIGNoYW5nZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcblxuICAgICAgICAvLyBBcHBlYXJhbmNlXG4gICAgICAgIGlmIChcImFwcGVhcmFuY2VcIiBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICAvLyBFeGVjdXRlIHRoZSBvYnNlcnZhYmxlXG4gICAgICAgICAgICB0aGlzLmFwcGVhcmFuY2VDaGFuZ2VkLm5leHQoY2hhbmdlcy5hcHBlYXJhbmNlLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJbm5lclxuICAgICAgICBpZiAoXCJpbm5lclwiIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIC8vIENvZXJjZSB0aGUgdmFsdWUgdG8gYSBib29sZWFuXG4gICAgICAgICAgICB0aGlzLmlubmVyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KGNoYW5nZXMuaW5uZXIuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1vZGVcbiAgICAgICAgaWYgKFwibW9kZVwiIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIC8vIEdldCB0aGUgcHJldmlvdXMgYW5kIGN1cnJlbnQgdmFsdWVzXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TW9kZSA9IGNoYW5nZXMubW9kZS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91c01vZGUgPSBjaGFuZ2VzLm1vZGUucHJldmlvdXNWYWx1ZTtcblxuICAgICAgICAgICAgLy8gRGlzYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZUFuaW1hdGlvbnMoKTtcblxuICAgICAgICAgICAgLy8gSWYgdGhlIG1vZGUgY2hhbmdlczogJ292ZXIgLT4gc2lkZSdcbiAgICAgICAgICAgIGlmIChwcmV2aW91c01vZGUgPT09IFwib3ZlclwiICYmIGN1cnJlbnRNb2RlID09PSBcInNpZGVcIikge1xuICAgICAgICAgICAgICAgIC8vIEhpZGUgdGhlIG92ZXJsYXlcbiAgICAgICAgICAgICAgICB0aGlzLl9oaWRlT3ZlcmxheSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB0aGUgbW9kZSBjaGFuZ2VzOiAnc2lkZSAtPiBvdmVyJ1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzTW9kZSA9PT0gXCJzaWRlXCIgJiYgY3VycmVudE1vZGUgPT09IFwib3ZlclwiKSB7XG4gICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGFzaWRlXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUFzaWRlKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbmF2aWdhdGlvbiBpcyBvcGVuZWRcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcGVuZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2hvdyB0aGUgb3ZlcmxheVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaG93T3ZlcmxheSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRXhlY3V0ZSB0aGUgb2JzZXJ2YWJsZVxuICAgICAgICAgICAgdGhpcy5tb2RlQ2hhbmdlZC5uZXh0KGN1cnJlbnRNb2RlKTtcblxuICAgICAgICAgICAgLy8gRW5hYmxlIHRoZSBhbmltYXRpb25zIGFmdGVyIGEgZGVsYXlcbiAgICAgICAgICAgIC8vIFRoZSBkZWxheSBtdXN0IGJlIGJpZ2dlciB0aGFuIHRoZSBjdXJyZW50IHRyYW5zaXRpb24tZHVyYXRpb25cbiAgICAgICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBub3RoaW5nIHdpbGwgYmUgYW5pbWF0ZWQgd2hpbGUgdGhlIG1vZGUgY2hhbmdpbmdcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VuYWJsZUFuaW1hdGlvbnMoKTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPcGVuZWRcbiAgICAgICAgaWYgKFwib3BlbmVkXCIgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgLy8gQ29lcmNlIHRoZSB2YWx1ZSB0byBhIGJvb2xlYW5cbiAgICAgICAgICAgIHRoaXMub3BlbmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KGNoYW5nZXMub3BlbmVkLmN1cnJlbnRWYWx1ZSk7XG5cbiAgICAgICAgICAgIC8vIE9wZW4vY2xvc2UgdGhlIG5hdmlnYXRpb25cbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZU9wZW5lZCh0aGlzLm9wZW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQb3NpdGlvblxuICAgICAgICBpZiAoXCJwb3NpdGlvblwiIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIG9ic2VydmFibGVcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25DaGFuZ2VkLm5leHQoY2hhbmdlcy5wb3NpdGlvbi5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHJhbnNwYXJlbnQgb3ZlcmxheVxuICAgICAgICBpZiAoXCJ0cmFuc3BhcmVudE92ZXJsYXlcIiBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICAvLyBDb2VyY2UgdGhlIHZhbHVlIHRvIGEgYm9vbGVhblxuICAgICAgICAgICAgdGhpcy50cmFuc3BhcmVudE92ZXJsYXkgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkoY2hhbmdlcy50cmFuc3BhcmVudE92ZXJsYXkuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIGluaXRcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBuYW1lIGlucHV0IGlzIG5vdCBhbiBlbXB0eSBzdHJpbmdcbiAgICAgICAgaWYgKHRoaXMubmFtZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5fbmljZVV0aWxzU2VydmljZS5yYW5kb21JZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3Vic2NyaWJlIHRvIHRoZSAnTmF2aWdhdGlvbkVuZCcgZXZlbnRcbiAgICAgICAgdGhpcy5fcm91dGVyLmV2ZW50c1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG1vZGUgaXMgJ292ZXInIGFuZCB0aGUgbmF2aWdhdGlvbiBpcyBvcGVuZWQuLi5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tb2RlID09PSBcIm92ZXJcIiAmJiB0aGlzLm9wZW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgbmF2aWdhdGlvblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIG1vZGUgaXMgJ3NpZGUnIGFuZCB0aGUgYXNpZGUgaXMgYWN0aXZlLi4uXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gXCJzaWRlXCIgJiYgdGhpcy5hY3RpdmVBc2lkZUl0ZW1JZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSB0aGUgYXNpZGVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZUFzaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5faGludFNlcnZpY2UuaGFzQWN0aXZlSGludCQucGlwZSh0YWtlVW50aWwodGhpcy5fdW5zdWJzY3JpYmVBbGwpKS5zdWJzY3JpYmUoaGFzSGludCA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhc0hpbnQgPSBoYXNIaW50O1xuICAgICAgICAgICAgdGhpcy5ob3ZlcmVkQ2hhbmdlZC5uZXh0KCh0aGlzLmhvdmVyZWQgfHwgdGhpcy5fZm9yY2VIb3ZlcmVkKSB8fCB0aGlzLmhhc0hpbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZnRlciB2aWV3IGluaXRcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgLy8gUmV0dXJuIGlmICduYXZpZ2F0aW9uIGNvbnRlbnQnIGVsZW1lbnQgZG9lcyBub3QgZXhpc3RcbiAgICAgICAgICAgIGlmICghdGhpcy5fbmF2aWdhdGlvbkNvbnRlbnRFbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgJ25hdmlnYXRpb24gY29udGVudCcgZWxlbWVudCBkb2Vzbid0IGhhdmVcbiAgICAgICAgICAgIC8vIHBlcmZlY3Qgc2Nyb2xsYmFyIGFjdGl2YXRlZCBvbiBpdC4uLlxuICAgICAgICAgICAgaWYgKCF0aGlzLl9uYXZpZ2F0aW9uQ29udGVudEVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwicHNcIikpIHtcbiAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBhY3RpdmUgaXRlbVxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUl0ZW0gPSB0aGlzLl9uYXZpZ2F0aW9uQ29udGVudEVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24taXRlbS1hY3RpdmVcIik7XG5cbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYWN0aXZlIGl0ZW0gZXhpc3RzLCBzY3JvbGwgaXQgaW50byB2aWV3XG4gICAgICAgICAgICAgICAgaWYgKGFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlSXRlbS5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gR28gdGhyb3VnaCBhbGwgdGhlIHNjcm9sbGJhciBkaXJlY3RpdmVzXG4gICAgICAgICAgICAgICAgdGhpcy5fbmljZVNjcm9sbGJhckRpcmVjdGl2ZXMuZm9yRWFjaCgobmljZVNjcm9sbGJhckRpcmVjdGl2ZSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFNraXAgaWYgbm90IGVuYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuaWNlU2Nyb2xsYmFyRGlyZWN0aXZlLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBTY3JvbGwgdG8gdGhlIGFjdGl2ZSBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIG5pY2VTY3JvbGxiYXJEaXJlY3RpdmUuc2Nyb2xsVG9FbGVtZW50KFwiLm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1pdGVtLWFjdGl2ZVwiLCAtMTIwLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBAIFB1YmxpYyBtZXRob2RzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8qKlxuICAgICAqIE9wZW4gdGhlIG5hdmlnYXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICAgICAgLy8gUmV0dXJuIGlmIHRoZSBuYXZpZ2F0aW9uIGlzIGFscmVhZHkgb3BlblxuICAgICAgICBpZiAodGhpcy5vcGVuZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCB0aGUgb3BlbmVkXG4gICAgICAgIHRoaXMuX3RvZ2dsZU9wZW5lZCh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZSB0aGUgbmF2aWdhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgLy8gUmV0dXJuIGlmIHRoZSBuYXZpZ2F0aW9uIGlzIGFscmVhZHkgY2xvc2VkXG4gICAgICAgIGlmICghdGhpcy5vcGVuZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENsb3NlIHRoZSBhc2lkZVxuICAgICAgICB0aGlzLmNsb3NlQXNpZGUoKTtcblxuICAgICAgICAvLyBTZXQgdGhlIG9wZW5lZFxuICAgICAgICB0aGlzLl90b2dnbGVPcGVuZWQoZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZSB0aGUgbmF2aWdhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGUoKTogdm9pZCB7XG4gICAgICAgIC8vIFRvZ2dsZVxuICAgICAgICBpZiAodGhpcy5vcGVuZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbiB0aGUgYXNpZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgb3BlbkFzaWRlKGl0ZW06IE5pY2VOYXZpZ2F0aW9uSXRlbSk6IHZvaWQge1xuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlIGl0ZW0gaXMgZGlzYWJsZWRcbiAgICAgICAgaWYgKGl0ZW0uZGlzYWJsZWQgfHwgIWl0ZW0uaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9wZW5cbiAgICAgICAgdGhpcy5hY3RpdmVBc2lkZUl0ZW1JZCA9IGl0ZW0uaWQ7XG5cbiAgICAgICAgLy8gU2hvdyB0aGUgYXNpZGUgb3ZlcmxheVxuICAgICAgICB0aGlzLl9zaG93QXNpZGVPdmVybGF5KCk7XG5cbiAgICAgICAgLy8gTWFyayBmb3IgY2hlY2tcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2UgdGhlIGFzaWRlXG4gICAgICovXG4gICAgcHVibGljIGNsb3NlQXNpZGUoKTogdm9pZCB7XG4gICAgICAgIC8vIENsb3NlXG4gICAgICAgIHRoaXMuYWN0aXZlQXNpZGVJdGVtSWQgPSBudWxsO1xuXG4gICAgICAgIC8vIEhpZGUgdGhlIGFzaWRlIG92ZXJsYXlcbiAgICAgICAgdGhpcy5faGlkZUFzaWRlT3ZlcmxheSgpO1xuXG4gICAgICAgIC8vIE1hcmsgZm9yIGNoZWNrXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZSB0aGUgYXNpZGVcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlQXNpZGUoaXRlbTogTmljZU5hdmlnYXRpb25JdGVtKTogdm9pZCB7XG4gICAgICAgIC8vIFRvZ2dsZVxuICAgICAgICBpZiAodGhpcy5hY3RpdmVBc2lkZUl0ZW1JZCA9PT0gaXRlbS5pZCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZUFzaWRlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5Bc2lkZShpdGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQCBQcml2YXRlIG1ldGhvZHNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLyoqXG4gICAgICogRW5hYmxlIHRoZSBhbmltYXRpb25zXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2VuYWJsZUFuaW1hdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIC8vIFJldHVybiBpZiB0aGUgYW5pbWF0aW9ucyBhcmUgYWxyZWFkeSBlbmFibGVkXG4gICAgICAgIGlmICh0aGlzLl9hbmltYXRpb25zRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRW5hYmxlIHRoZSBhbmltYXRpb25zXG4gICAgICAgIHRoaXMuX2FuaW1hdGlvbnNFbmFibGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlIHRoZSBhbmltYXRpb25zXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2Rpc2FibGVBbmltYXRpb25zKCk6IHZvaWQge1xuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlIGFuaW1hdGlvbnMgYXJlIGFscmVhZHkgZGlzYWJsZWRcbiAgICAgICAgaWYgKCF0aGlzLl9hbmltYXRpb25zRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGlzYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgICAgICB0aGlzLl9hbmltYXRpb25zRW5hYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3cgdGhlIG92ZXJsYXlcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2hvd092ZXJsYXkoKTogdm9pZCB7XG4gICAgICAgIC8vIFJldHVybiBpZiB0aGVyZSBpcyBhbHJlYWR5IGFuIG92ZXJsYXlcbiAgICAgICAgaWYgKHRoaXMuX2FzaWRlT3ZlcmxheSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBvdmVybGF5IGVsZW1lbnRcbiAgICAgICAgdGhpcy5fb3ZlcmxheSA9IHRoaXMuX3JlbmRlcmVyMi5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICAgIC8vIEFkZCBhIGNsYXNzIHRvIHRoZSBvdmVybGF5IGVsZW1lbnRcbiAgICAgICAgdGhpcy5fb3ZlcmxheS5jbGFzc0xpc3QuYWRkKFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLW92ZXJsYXlcIik7XG5cbiAgICAgICAgLy8gQWRkIGEgY2xhc3MgZGVwZW5kaW5nIG9uIHRoZSB0cmFuc3BhcmVudE92ZXJsYXkgb3B0aW9uXG4gICAgICAgIGlmICh0aGlzLnRyYW5zcGFyZW50T3ZlcmxheSkge1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheS5jbGFzc0xpc3QuYWRkKFwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLW92ZXJsYXktdHJhbnNwYXJlbnRcIik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBcHBlbmQgdGhlIG92ZXJsYXkgdG8gdGhlIHBhcmVudCBvZiB0aGUgbmF2aWdhdGlvblxuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQsIHRoaXMuX292ZXJsYXkpO1xuXG4gICAgICAgIC8vIEVuYWJsZSBibG9jayBzY3JvbGwgc3RyYXRlZ3lcbiAgICAgICAgdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuZW5hYmxlKCk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBlbnRlciBhbmltYXRpb24gYW5kIGF0dGFjaCBpdCB0byB0aGUgcGxheWVyXG4gICAgICAgIHRoaXMuX3BsYXllciA9IHRoaXMuX2FuaW1hdGlvbkJ1aWxkZXIuYnVpbGQoW1xuICAgICAgICAgICAgYW5pbWF0ZShcIjMwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpXCIsIHN0eWxlKHtvcGFjaXR5OiAxfSkpXG4gICAgICAgIF0pLmNyZWF0ZSh0aGlzLl9vdmVybGF5KTtcblxuICAgICAgICAvLyBQbGF5IHRoZSBhbmltYXRpb25cbiAgICAgICAgdGhpcy5fcGxheWVyLnBsYXkoKTtcblxuICAgICAgICAvLyBBZGQgYW4gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIG92ZXJsYXlcbiAgICAgICAgdGhpcy5fb3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGFuZGxlT3ZlcmxheUNsaWNrKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIaWRlIHRoZSBvdmVybGF5XG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgX2hpZGVPdmVybGF5KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX292ZXJsYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgbGVhdmUgYW5pbWF0aW9uIGFuZCBhdHRhY2ggaXQgdG8gdGhlIHBsYXllclxuICAgICAgICB0aGlzLl9wbGF5ZXIgPSB0aGlzLl9hbmltYXRpb25CdWlsZGVyLmJ1aWxkKFtcbiAgICAgICAgICAgIGFuaW1hdGUoXCIzMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKVwiLCBzdHlsZSh7b3BhY2l0eTogMH0pKVxuICAgICAgICBdKS5jcmVhdGUodGhpcy5fb3ZlcmxheSk7XG5cbiAgICAgICAgLy8gUGxheSB0aGUgYW5pbWF0aW9uXG4gICAgICAgIHRoaXMuX3BsYXllci5wbGF5KCk7XG5cbiAgICAgICAgLy8gT25jZSB0aGUgYW5pbWF0aW9uIGlzIGRvbmUuLi5cbiAgICAgICAgdGhpcy5fcGxheWVyLm9uRG9uZSgoKSA9PiB7XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBvdmVybGF5IHN0aWxsIGV4aXN0cy4uLlxuICAgICAgICAgICAgaWYgKHRoaXMuX292ZXJsYXkpIHtcbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyXG4gICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmxheS5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGFuZGxlT3ZlcmxheUNsaWNrKTtcblxuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgb3ZlcmxheVxuICAgICAgICAgICAgICAgIHRoaXMuX292ZXJsYXkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9vdmVybGF5KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vdmVybGF5ID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRGlzYWJsZSBibG9jayBzY3JvbGwgc3RyYXRlZ3lcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmRpc2FibGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hvdyB0aGUgYXNpZGUgb3ZlcmxheVxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF9zaG93QXNpZGVPdmVybGF5KCk6IHZvaWQge1xuICAgICAgICAvLyBSZXR1cm4gaWYgdGhlcmUgaXMgYWxyZWFkeSBhbiBvdmVybGF5XG4gICAgICAgIGlmICh0aGlzLl9hc2lkZU92ZXJsYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgYXNpZGUgb3ZlcmxheSBlbGVtZW50XG4gICAgICAgIHRoaXMuX2FzaWRlT3ZlcmxheSA9IHRoaXMuX3JlbmRlcmVyMi5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICAgIC8vIEFkZCBhIGNsYXNzIHRvIHRoZSBhc2lkZSBvdmVybGF5IGVsZW1lbnRcbiAgICAgICAgdGhpcy5fYXNpZGVPdmVybGF5LmNsYXNzTGlzdC5hZGQoXCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYXNpZGUtb3ZlcmxheVwiKTtcblxuICAgICAgICAvLyBBcHBlbmQgdGhlIGFzaWRlIG92ZXJsYXkgdG8gdGhlIHBhcmVudCBvZiB0aGUgbmF2aWdhdGlvblxuICAgICAgICB0aGlzLl9yZW5kZXJlcjIuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQsIHRoaXMuX2FzaWRlT3ZlcmxheSk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBlbnRlciBhbmltYXRpb24gYW5kIGF0dGFjaCBpdCB0byB0aGUgcGxheWVyXG4gICAgICAgIHRoaXMuX3BsYXllciA9XG4gICAgICAgICAgICB0aGlzLl9hbmltYXRpb25CdWlsZGVyXG4gICAgICAgICAgICAgICAgLmJ1aWxkKFtcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZShcIjMwMG1zIGN1YmljLWJlemllcigwLjI1LCAwLjgsIDAuMjUsIDEpXCIsIHN0eWxlKHtvcGFjaXR5OiAxfSkpXG4gICAgICAgICAgICAgICAgXSkuY3JlYXRlKHRoaXMuX2FzaWRlT3ZlcmxheSk7XG5cbiAgICAgICAgLy8gUGxheSB0aGUgYW5pbWF0aW9uXG4gICAgICAgIHRoaXMuX3BsYXllci5wbGF5KCk7XG5cbiAgICAgICAgLy8gQWRkIGFuIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBhc2lkZSBvdmVybGF5XG4gICAgICAgIHRoaXMuX2FzaWRlT3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGFuZGxlQXNpZGVPdmVybGF5Q2xpY2spO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhpZGUgdGhlIGFzaWRlIG92ZXJsYXlcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGlkZUFzaWRlT3ZlcmxheSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9hc2lkZU92ZXJsYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgbGVhdmUgYW5pbWF0aW9uIGFuZCBhdHRhY2ggaXQgdG8gdGhlIHBsYXllclxuICAgICAgICB0aGlzLl9wbGF5ZXIgPVxuICAgICAgICAgICAgdGhpcy5fYW5pbWF0aW9uQnVpbGRlclxuICAgICAgICAgICAgICAgIC5idWlsZChbXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGUoXCIzMDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKVwiLCBzdHlsZSh7b3BhY2l0eTogMH0pKVxuICAgICAgICAgICAgICAgIF0pLmNyZWF0ZSh0aGlzLl9hc2lkZU92ZXJsYXkpO1xuXG4gICAgICAgIC8vIFBsYXkgdGhlIGFuaW1hdGlvblxuICAgICAgICB0aGlzLl9wbGF5ZXIucGxheSgpO1xuXG4gICAgICAgIC8vIE9uY2UgdGhlIGFuaW1hdGlvbiBpcyBkb25lLi4uXG4gICAgICAgIHRoaXMuX3BsYXllci5vbkRvbmUoKCkgPT4ge1xuXG4gICAgICAgICAgICAvLyBJZiB0aGUgYXNpZGUgb3ZlcmxheSBzdGlsbCBleGlzdHMuLi5cbiAgICAgICAgICAgIGlmICh0aGlzLl9hc2lkZU92ZXJsYXkpIHtcbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyXG4gICAgICAgICAgICAgICAgdGhpcy5fYXNpZGVPdmVybGF5LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl9oYW5kbGVBc2lkZU92ZXJsYXlDbGljayk7XG5cbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGFzaWRlIG92ZXJsYXlcbiAgICAgICAgICAgICAgICB0aGlzLl9hc2lkZU92ZXJsYXkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9hc2lkZU92ZXJsYXkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FzaWRlT3ZlcmxheSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9uIG1vdXNlZW50ZXJcbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKFwibW91c2VlbnRlclwiKVxuICAgIHB1YmxpYyBfb25Nb3VzZWVudGVyKCk6IHZvaWQge1xuICAgICAgICAvLyBFbmFibGUgdGhlIGFuaW1hdGlvbnNcbiAgICAgICAgdGhpcy5fZW5hYmxlQW5pbWF0aW9ucygpO1xuXG4gICAgICAgIC8vIFNldCB0aGUgaG92ZXJlZFxuICAgICAgICB0aGlzLmhvdmVyZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmhvdmVyZWRDaGFuZ2VkLm5leHQodGhpcy5ob3ZlcmVkIHx8IHRoaXMuX2ZvcmNlSG92ZXJlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gbW91c2VsZWF2ZVxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIpXG4gICAgcHVibGljIF9vbk1vdXNlbGVhdmUoKTogdm9pZCB7XG4gICAgICAgIC8vIEVuYWJsZSB0aGUgYW5pbWF0aW9uc1xuICAgICAgICB0aGlzLl9lbmFibGVBbmltYXRpb25zKCk7XG5cbiAgICAgICAgLy8gU2V0IHRoZSBob3ZlcmVkXG4gICAgICAgIHRoaXMuaG92ZXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhvdmVyZWRDaGFuZ2VkLm5leHQodGhpcy5ob3ZlcmVkIHx8IHRoaXMuX2ZvcmNlSG92ZXJlZCB8fCB0aGlzLmhhc0hpbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW4vY2xvc2UgdGhlIG5hdmlnYXRpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcGVuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIF90b2dnbGVPcGVuZWQob3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICAvLyBTZXQgdGhlIG9wZW5lZFxuICAgICAgICB0aGlzLm9wZW5lZCA9IG9wZW47XG5cbiAgICAgICAgLy8gRW5hYmxlIHRoZSBhbmltYXRpb25zXG4gICAgICAgIHRoaXMuX2VuYWJsZUFuaW1hdGlvbnMoKTtcblxuICAgICAgICAvLyBJZiB0aGUgbmF2aWdhdGlvbiBvcGVuZWQsIGFuZCB0aGUgbW9kZVxuICAgICAgICAvLyBpcyAnb3ZlcicsIHNob3cgdGhlIG92ZXJsYXlcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gXCJvdmVyXCIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dPdmVybGF5KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hpZGVPdmVybGF5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFeGVjdXRlIHRoZSBvYnNlcnZhYmxlXG4gICAgICAgIHRoaXMub3BlbmVkQ2hhbmdlZC5uZXh0KG9wZW4pO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24td3JhcHBlclwiPlxuICAgIDwhLS0gSGVhZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24taGVhZGVyXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltuaWNlVmVydGljYWxOYXZpZ2F0aW9uSGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQ29udGVudCAtLT5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWNvbnRlbnRcIlxuICAgICAgICBuaWNlU2Nyb2xsYmFyXG4gICAgICAgIFtuaWNlU2Nyb2xsYmFyT3B0aW9uc109XCJ7IHdoZWVsUHJvcGFnYXRpb246IGlubmVyLCBzdXBwcmVzc1Njcm9sbFg6IHRydWUgfVwiXG4gICAgICAgICNuYXZpZ2F0aW9uQ29udGVudFxuICAgID5cbiAgICAgICAgPCEtLSBDb250ZW50IGhlYWRlciAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1jb250ZW50LWhlYWRlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW25pY2VWZXJ0aWNhbE5hdmlnYXRpb25Db250ZW50SGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBJdGVtcyAtLT5cbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBuYXZpZ2F0aW9uOyB0cmFja0J5OiB0cmFja0J5Rm5cIiBbQC5kaXNhYmxlZF09XCIhYW5pbWF0ZU5leHROYXZDaGFuZ2VcIiBAc2xpZGVJblJpZ2h0PlxuICAgICAgICAgICAgPCEtLSBTa2lwIHRoZSBoaWRkZW4gaXRlbXMgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShpdGVtIHwgbmljZVNob3VsZEhpZGUgfCBhc3luYylcIj5cbiAgICAgICAgICAgICAgICA8IS0tIEFzaWRlIC0tPlxuICAgICAgICAgICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYXNpZGUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2FzaWRlJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1JZF09XCJhY3RpdmVBc2lkZUl0ZW1JZFwiXG4gICAgICAgICAgICAgICAgICAgIFthdXRvQ29sbGFwc2VdPVwiYXV0b0NvbGxhcHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3NraXBDaGlsZHJlbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwc109XCJzaG93VG9vbHRpcHNcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVBc2lkZShpdGVtKVwiXG4gICAgICAgICAgICAgICAgPjwvbmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWFzaWRlLWl0ZW0+XG5cbiAgICAgICAgICAgICAgICA8IS0tIEJhc2ljIC0tPlxuICAgICAgICAgICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYmFzaWMtaXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2Jhc2ljJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwc109XCJzaG93VG9vbHRpcHNcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXG4gICAgICAgICAgICAgICAgPjwvbmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWJhc2ljLWl0ZW0+XG5cbiAgICAgICAgICAgICAgICA8IS0tIENvbGxhcHNhYmxlIC0tPlxuICAgICAgICAgICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tY29sbGFwc2FibGUtaXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2NvbGxhcHNhYmxlJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW2F1dG9Db2xsYXBzZV09XCJhdXRvQ29sbGFwc2VcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBzXT1cInNob3dUb29sdGlwc1wiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcbiAgICAgICAgICAgICAgICA+PC9uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tY29sbGFwc2FibGUtaXRlbT5cblxuICAgICAgICAgICAgICAgIDwhLS0gRGl2aWRlciAtLT5cbiAgICAgICAgICAgICAgICA8bmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWRpdmlkZXItaXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2RpdmlkZXInXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgID48L25pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1kaXZpZGVyLWl0ZW0+XG5cbiAgICAgICAgICAgICAgICA8IS0tIEdyb3VwIC0tPlxuICAgICAgICAgICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tZ3JvdXAtaXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2dyb3VwJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW2F1dG9Db2xsYXBzZV09XCJhdXRvQ29sbGFwc2VcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBzXT1cInNob3dUb29sdGlwc1wiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcbiAgICAgICAgICAgICAgICA+PC9uaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tZ3JvdXAtaXRlbT5cblxuICAgICAgICAgICAgICAgIDwhLS0gU3BhY2VyIC0tPlxuICAgICAgICAgICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tc3BhY2VyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdzcGFjZXInXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgID48L25pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1zcGFjZXItaXRlbT5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIENvbnRlbnQgZm9vdGVyIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmljZS12ZXJ0aWNhbC1uYXZpZ2F0aW9uLWNvbnRlbnQtZm9vdGVyXCI+XG4gICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbmljZVZlcnRpY2FsTmF2aWdhdGlvbkNvbnRlbnRGb290ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBGb290ZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cIm5pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1mb290ZXJcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW25pY2VWZXJ0aWNhbE5hdmlnYXRpb25Gb290ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gQXNpZGUgLS0+XG48ZGl2XG4gICAgY2xhc3M9XCJuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYXNpZGUtd3JhcHBlclwiXG4gICAgKm5nSWY9XCJhY3RpdmVBc2lkZUl0ZW1JZFwiXG4gICAgbmljZVNjcm9sbGJhclxuICAgIFtuaWNlU2Nyb2xsYmFyT3B0aW9uc109XCJ7IHdoZWVsUHJvcGFnYXRpb246IGZhbHNlLCBzdXBwcmVzc1Njcm9sbFg6IHRydWUgfVwiXG4gICAgW0BmYWRlSW5MZWZ0XT1cInBvc2l0aW9uID09PSAnbGVmdCdcIlxuICAgIFtAZmFkZUluUmlnaHRdPVwicG9zaXRpb24gPT09ICdyaWdodCdcIlxuICAgIFtAZmFkZU91dExlZnRdPVwicG9zaXRpb24gPT09ICdsZWZ0J1wiXG4gICAgW0BmYWRlT3V0UmlnaHRdPVwicG9zaXRpb24gPT09ICdyaWdodCdcIlxuPlxuXG4gICAgPCEtLSBJdGVtcyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIG5hdmlnYXRpb247IHRyYWNrQnk6IHRyYWNrQnlGblwiPlxuICAgICAgICA8IS0tIFNraXAgdGhlIGhpZGRlbiBpdGVtcyAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihpdGVtLmhpZGRlbiAmJiAhaXRlbS5oaWRkZW4oaXRlbSkpIHx8ICFpdGVtLmhpZGRlblwiPlxuICAgICAgICAgICAgPCEtLSBBc2lkZSAtLT5cbiAgICAgICAgICAgIDxuaWNlLXZlcnRpY2FsLW5hdmlnYXRpb24tYXNpZGUtaXRlbVxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS50eXBlID09PSAnYXNpZGUnICYmIGl0ZW0uaWQgPT09IGFjdGl2ZUFzaWRlSXRlbUlkXCJcbiAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJuYW1lXCJcbiAgICAgICAgICAgICAgICBbYXV0b0NvbGxhcHNlXT1cImF1dG9Db2xsYXBzZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwc109XCJzaG93VG9vbHRpcHNcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcbiAgICAgICAgICAgID48L25pY2UtdmVydGljYWwtbmF2aWdhdGlvbi1hc2lkZS1pdGVtPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
|