@recursyve/nice-ui-kit.v2 13.2.0-beta.113 → 13.2.0-beta.115
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/esm2020/lib/directives/chip-list/chip-list-items/chip-list-items.component.mjs +21 -7
- package/esm2020/lib/directives/chip-list/chip-list.constant.mjs +3 -0
- package/esm2020/lib/directives/chip-list/chip-list.directive.mjs +1 -1
- package/esm2020/lib/directives/chip-list/chip-list.module.mjs +20 -1
- package/fesm2015/recursyve-nice-ui-kit.v2.mjs +40 -5
- package/fesm2015/recursyve-nice-ui-kit.v2.mjs.map +1 -1
- package/fesm2020/recursyve-nice-ui-kit.v2.mjs +38 -5
- package/fesm2020/recursyve-nice-ui-kit.v2.mjs.map +1 -1
- package/lib/directives/chip-list/chip-list-items/chip-list-items.component.d.ts +13 -1
- package/lib/directives/chip-list/chip-list.constant.d.ts +2 -0
- package/lib/directives/chip-list/chip-list.module.d.ts +3 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recursyve-nice-ui-kit.v2.mjs","sources":["../../../projects/nice-ui-kit-v2/src/lib/animations/defaults.ts","../../../projects/nice-ui-kit-v2/src/lib/animations/expand-collapse.ts","../../../projects/nice-ui-kit-v2/src/lib/animations/fade.ts","../../../projects/nice-ui-kit-v2/src/lib/animations/shake.ts","../../../projects/nice-ui-kit-v2/src/lib/animations/slide.ts","../../../projects/nice-ui-kit-v2/src/lib/animations/zoom.ts","../../../projects/nice-ui-kit-v2/src/lib/animations/public-api.ts","../../../projects/nice-ui-kit-v2/src/lib/api/exceptions/api.exception.ts","../../../projects/nice-ui-kit-v2/src/lib/api/exceptions/exception.factory.ts","../../../projects/nice-ui-kit-v2/src/lib/api/interceptors/transform-response.interceptor.ts","../../../projects/nice-ui-kit-v2/src/lib/api/nice.api.ts","../../../projects/nice-ui-kit-v2/src/lib/components/alert/alert.service.ts","../../../projects/nice-ui-kit-v2/src/lib/providers/utils/utils.service.ts","../../../projects/nice-ui-kit-v2/src/lib/providers/utils/utils.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/alert/alert.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/alert/alert.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/alert/alert.module.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/type.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/array.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/case.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/colors.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/date.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/file.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/font-awesome.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/form-data.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/http-status.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/keyboard.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/modal.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/number.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/object.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/promise.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/query-params.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/regex.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/url.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/components/assets-carousel/assets-carousel.constant.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/dropzone/dropzone.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/components/assets-carousel/assets-carousel.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/assets-carousel/assets-carousel.template.html","../../../projects/nice-ui-kit-v2/src/lib/directives/dropzone/dropzone.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/assets-carousel/assets-carousel.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/async-typeahead/providers/async-typeahead.provider.ts","../../../projects/nice-ui-kit-v2/src/lib/components/typeahead/directives/options-scroll.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/components/typeahead/typeahead.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/typeahead/typeahead.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/typeahead/directives/options-scroll.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/typeahead/typeahead.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/async-typeahead/async-typeahead.constant.ts","../../../projects/nice-ui-kit-v2/src/lib/components/async-typeahead/providers/async-typeahead.service.ts","../../../projects/nice-ui-kit-v2/src/lib/components/async-typeahead/async-typeahead.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/async-typeahead/async-typeahead.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/async-typeahead/async-typeahead.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/base-form/base-form.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/base-form/form-submit.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/components/base-form/base-form.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/base-form/nice-base.form.ts","../../../projects/nice-ui-kit-v2/src/lib/components/card/card.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/card/card.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/card/card.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/carousel/picture-modal/picture-modal.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/carousel/picture-modal/picture-modal.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/carousel/picture-modal/picture-modal.service.ts","../../../projects/nice-ui-kit-v2/src/lib/components/carousel/pipe/carousel-layout.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/components/carousel/carousel.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/carousel/carousel.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/carousel/carousel.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/date-range-picker/providers/date-range-picker.service.ts","../../../projects/nice-ui-kit-v2/src/lib/components/date-range-picker/components/range-preset/range-preset.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/date-range-picker/components/range-preset/range-preset.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/date-range-picker/components/header/header.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/date-range-picker/components/header/header.template.html","../../../projects/nice-ui-kit-v2/src/lib/pipes/localized-date.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/components/date-range-picker/date-range-picker.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/date-range-picker/date-range-picker.template.html","../../../projects/nice-ui-kit-v2/src/lib/pipes/boolean.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/capitalize-first-letter.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/ceil.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/entries.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/find-by-key.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/first-letter.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/floor.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/join-if-defined.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/link.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/localized-boolean.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/localized-currency.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/localized-date-only.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/minutes-to-time.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/number-to-ordinal-indicator.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/pad.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/phone.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/postal-code.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/round.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/range.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/seconds-to-time.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/sanitize-bypass.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/pipes.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/date-range-picker/date-range-picker.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/drawer/drawer.service.ts","../../../projects/nice-ui-kit-v2/src/lib/providers/config/config.constants.ts","../../../projects/nice-ui-kit-v2/src/lib/providers/config/config.service.ts","../../../projects/nice-ui-kit-v2/src/lib/providers/config/config.module.ts","../../../projects/nice-ui-kit-v2/src/lib/providers/media-watcher/media-watcher.service.ts","../../../projects/nice-ui-kit-v2/src/lib/providers/media-watcher/media-watcher.module.ts","../../../projects/nice-ui-kit-v2/src/lib/providers/splash-screen/splash-screen.service.ts","../../../projects/nice-ui-kit-v2/src/lib/providers/splash-screen/splash-screen.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/drawer/drawer.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/drawer/drawer.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/drawer/drawer.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/export-bottom-sheet/providers/export-bottom-sheet.service.ts","../../../projects/nice-ui-kit-v2/src/lib/components/export-bottom-sheet/export-bottom-sheet.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/export-bottom-sheet/export-bottom-sheet.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/export-bottom-sheet/export-bottom-sheet.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/form-error/form-error.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/form-error/control-status.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/components/form-error/form-error.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/horizontal-stepper/horizontal-stepper.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/horizontal-stepper/horizontal-stepper.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/horizontal-stepper/step.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/horizontal-stepper/horizontal-stepper.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/image-cropper/resize-canvas.ts","../../../projects/nice-ui-kit-v2/src/lib/components/image-cropper/image-cropper.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/image-cropper/image-cropper.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/image-cropper/image-cropper-area.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/image-cropper/image-cropper.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/layout/layout.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/layout/layout.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/loading-spinner/loading-spinner.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/loading-spinner/loading-spinner.template.html","../../../projects/nice-ui-kit-v2/src/lib/providers/overlay/dynamic-overlay-container.service.ts","../../../projects/nice-ui-kit-v2/src/lib/providers/overlay/dynamic-overlay.service.ts","../../../projects/nice-ui-kit-v2/src/lib/components/loading-spinner/loading.constant.ts","../../../projects/nice-ui-kit-v2/src/lib/components/loading-spinner/loading.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/components/loading-spinner/loading-spinner.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/lottie/lottie.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/lottie/lottie.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/lottie/lottie.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/navigation.service.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/navigation.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/horizontal/components/basic/basic.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/horizontal/components/basic/basic.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/horizontal/components/divider/divider.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/horizontal/components/divider/divider.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/pipes/should-hide.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/horizontal/components/branch/branch.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/horizontal/components/branch/branch.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/horizontal/components/spacer/spacer.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/horizontal/components/spacer/spacer.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/horizontal/horizontal.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/horizontal/horizontal.component.html","../../../projects/nice-ui-kit-v2/src/lib/directives/scrollbar/scrollbar.types.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/scrollbar/scrollbar.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/scrollbar/scrollbar.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/directives/show-hint.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/pipes/should-show-hint.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/basic/basic.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/basic/basic.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/divider/divider.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/divider/divider.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/spacer/spacer.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/spacer/spacer.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/collapsable/collapsable.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/collapsable/collapsable.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/group/group.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/group/group.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/aside/aside.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/aside/aside.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/vertical.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/vertical.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/navigation.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/providers/hide-item.resolver.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/providers/hint.resolver.ts","../../../projects/nice-ui-kit-v2/src/lib/components/search-bar/search-bar.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/search-bar/search-bar.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/search-bar/search-bar.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/sweet-alert/sweet-alert.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/sweet-alert/sweet-alert.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/sweet-alert/sweet-alert.constant.ts","../../../projects/nice-ui-kit-v2/src/lib/components/sweet-alert/sweet-alert.service.ts","../../../projects/nice-ui-kit-v2/src/lib/components/sweet-alert/sweet-alert.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/toast/toast.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/toast/toast.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/toast/toast.constant.ts","../../../projects/nice-ui-kit-v2/src/lib/components/toast/toast.service.ts","../../../projects/nice-ui-kit-v2/src/lib/components/toast/toast.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/toggle-button-group/toggle-button.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/toggle-button-group/toggle-button-group.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/toggle-button-group/toggle-button-group.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/toggle-button-group/toggle-button-group.module.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/autofocus/autofocus.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/autofocus/autofocus.module.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/autogrow/autogrow.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/autogrow/autogrow.module.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/chip-async-typeahead/chip-async-typeahead.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/chip-list/chip-list-items/chip-list-item-label.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/chip-list/chip-list-items/chip-list-items.component.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/chip-list/chip-list-items/chip-list-items.template.html","../../../projects/nice-ui-kit-v2/src/lib/directives/chip-list/chip-list.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/chip-list/chip-list.module.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/image-error-placeholder/image-error-placeholder.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/image-error-placeholder/image-error-placeholder.module.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/material/nice-material-style.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/material/nice-rounded-style.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/material/material.module.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/modals/modal-opener.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/modals/modal-on-click.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/scroll-reset/scroll-reset.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/scroll-reset/scroll-reset.module.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/stop-propagation/click-stop-propagation.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/stop-propagation/stop-propagation.module.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/window/prevent-close-window.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/window/window-directive.module.ts","../../../projects/nice-ui-kit-v2/src/lib/nice.module.ts","../../../projects/nice-ui-kit-v2/src/public-api.ts","../../../projects/nice-ui-kit-v2/src/recursyve-nice-ui-kit.v2.ts"],"sourcesContent":["import { animate, animation, style, transition, trigger, useAnimation } from \"@angular/animations\";\n\nexport class NiceAnimationCurves {\n static STANDARD_CURVE = \"cubic-bezier(0.4, 0.0, 0.2, 1)\";\n static DECELERATION_CURVE = \"cubic-bezier(0.0, 0.0, 0.2, 1)\";\n static ACCELERATION_CURVE = \"cubic-bezier(0.4, 0.0, 1, 1)\";\n static SHARP_CURVE = \"cubic-bezier(0.4, 0.0, 0.6, 1)\";\n}\n\nexport class NiceAnimationDurations {\n static COMPLEX = \"375ms\";\n static ENTERING = \"225ms\";\n static EXITING = \"195ms\";\n}\n\nconst customAnimation = animation([\n style({\n opacity: \"{{opacity}}\",\n transform: \"scale({{scale}}) translate3d({{x}}, {{y}}, {{z}})\"\n }),\n animate(\"{{duration}} {{delay}} cubic-bezier(0.0, 0.0, 0.2, 1)\", style(\"*\"))\n], {\n params: {\n duration: \"200ms\",\n delay: \"0ms\",\n opacity: \"0\",\n scale: \"1\",\n x: \"0\",\n y: \"0\",\n z: \"0\"\n }\n});\n\nconst defaultAnimation = trigger(\"animate\", [transition(\"void => *\", [useAnimation(customAnimation)])]);\n\nexport { defaultAnimation };\n","import { animate, state, style, transition, trigger } from \"@angular/animations\";\nimport { NiceAnimationCurves, NiceAnimationDurations } from \"./defaults\";\n\n// -----------------------------------------------------------------------------------------------------\n// @ Expand / collapse\n// -----------------------------------------------------------------------------------------------------\nconst expandCollapse = trigger(\"expandCollapse\",\n [\n state(\"void, collapsed\",\n style({\n height: \"0\"\n })\n ),\n\n state(\"*, expanded\",\n style(\"*\")\n ),\n\n // Prevent the transition if the state is false\n transition(\"void <=> false, collapsed <=> false, expanded <=> false\", []),\n\n // Transition\n transition(\"void <=> *, collapsed <=> expanded\",\n animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.ENTERING} ${NiceAnimationCurves.DECELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\nexport { expandCollapse };\n","import { animate, state, style, transition, trigger } from \"@angular/animations\";\nimport { NiceAnimationCurves, NiceAnimationDurations } from \"./defaults\";\n\n// -----------------------------------------------------------------------------------------------------\n// @ Fade in\n// -----------------------------------------------------------------------------------------------------\nconst fadeIn = trigger(\"fadeIn\",\n [\n state(\"void\",\n style({\n opacity: 0\n })\n ),\n\n state(\"*\",\n style({\n opacity: 1\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"void => false\", []),\n\n // Transition\n transition(\"void => *\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.ENTERING} ${NiceAnimationCurves.DECELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Fade in top\n// -----------------------------------------------------------------------------------------------------\nconst fadeInTop = trigger(\"fadeInTop\",\n [\n state(\"void\",\n style({\n opacity: 0,\n transform: \"translate3d(0, -100%, 0)\"\n })\n ),\n\n state(\"*\",\n style({\n opacity: 1,\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"void => false\", []),\n\n // Transition\n transition(\"void => *\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.ENTERING} ${NiceAnimationCurves.DECELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Fade in bottom\n// -----------------------------------------------------------------------------------------------------\nconst fadeInBottom = trigger(\"fadeInBottom\",\n [\n state(\"void\",\n style({\n opacity: 0,\n transform: \"translate3d(0, 100%, 0)\"\n })\n ),\n\n state(\"*\",\n style({\n opacity: 1,\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"void => false\", []),\n\n // Transition\n transition(\"void => *\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.ENTERING} ${NiceAnimationCurves.DECELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Fade in left\n// -----------------------------------------------------------------------------------------------------\nconst fadeInLeft = trigger(\"fadeInLeft\",\n [\n state(\"void\",\n style({\n opacity: 0,\n transform: \"translate3d(-100%, 0, 0)\"\n })\n ),\n\n state(\"*\",\n style({\n opacity: 1,\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"void => false\", []),\n\n // Transition\n transition(\"void => *\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.ENTERING} ${NiceAnimationCurves.DECELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Fade in right\n// -----------------------------------------------------------------------------------------------------\nconst fadeInRight = trigger(\"fadeInRight\",\n [\n state(\"void\",\n style({\n opacity: 0,\n transform: \"translate3d(100%, 0, 0)\"\n })\n ),\n\n state(\"*\",\n style({\n opacity: 1,\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"void => false\", []),\n\n // Transition\n transition(\"void => *\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.ENTERING} ${NiceAnimationCurves.DECELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Fade out\n// -----------------------------------------------------------------------------------------------------\nconst fadeOut = trigger(\"fadeOut\",\n [\n state(\"*\",\n style({\n opacity: 1\n })\n ),\n\n state(\"void\",\n style({\n opacity: 0\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"false => void\", []),\n\n // Transition\n transition(\"* => void\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.EXITING} ${NiceAnimationCurves.ACCELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Fade out top\n// -----------------------------------------------------------------------------------------------------\nconst fadeOutTop = trigger(\"fadeOutTop\",\n [\n state(\"*\",\n style({\n opacity: 1,\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n state(\"void\",\n style({\n opacity: 0,\n transform: \"translate3d(0, -100%, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"false => void\", []),\n\n // Transition\n transition(\"* => void\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.EXITING} ${NiceAnimationCurves.ACCELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Fade out bottom\n// -----------------------------------------------------------------------------------------------------\nconst fadeOutBottom = trigger(\"fadeOutBottom\",\n [\n state(\"*\",\n style({\n opacity: 1,\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n state(\"void\",\n style({\n opacity: 0,\n transform: \"translate3d(0, 100%, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"false => void\", []),\n\n // Transition\n transition(\"* => void\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.EXITING} ${NiceAnimationCurves.ACCELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Fade out left\n// -----------------------------------------------------------------------------------------------------\nconst fadeOutLeft = trigger(\"fadeOutLeft\",\n [\n state(\"*\",\n style({\n opacity: 1,\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n state(\"void\",\n style({\n opacity: 0,\n transform: \"translate3d(-100%, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"false => void\", []),\n\n // Transition\n transition(\"* => void\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.EXITING} ${NiceAnimationCurves.ACCELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Fade out right\n// -----------------------------------------------------------------------------------------------------\nconst fadeOutRight = trigger(\"fadeOutRight\",\n [\n state(\"*\",\n style({\n opacity: 1,\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n state(\"void\",\n style({\n opacity: 0,\n transform: \"translate3d(100%, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"false => void\", []),\n\n // Transition\n transition(\"* => void\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.EXITING} ${NiceAnimationCurves.ACCELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\nexport { fadeIn, fadeInTop, fadeInBottom, fadeInLeft, fadeInRight, fadeOut, fadeOutTop, fadeOutBottom, fadeOutLeft, fadeOutRight };\n","import { animate, keyframes, style, transition, trigger } from \"@angular/animations\";\n\n// -----------------------------------------------------------------------------------------------------\n// @ Shake\n// -----------------------------------------------------------------------------------------------------\nconst shake = trigger(\"shake\",\n [\n\n // Prevent the transition if the state is false\n transition(\"void => false\", []),\n\n // Transition\n transition(\"void => *, * => true\",\n [\n animate(\"{{timings}}\",\n keyframes([\n style({\n transform: \"translate3d(0, 0, 0)\",\n offset: 0\n }),\n style({\n transform: \"translate3d(-10px, 0, 0)\",\n offset: 0.1\n }),\n style({\n transform: \"translate3d(10px, 0, 0)\",\n offset: 0.2\n }),\n style({\n transform: \"translate3d(-10px, 0, 0)\",\n offset: 0.3\n }),\n style({\n transform: \"translate3d(10px, 0, 0)\",\n offset: 0.4\n }),\n style({\n transform: \"translate3d(-10px, 0, 0)\",\n offset: 0.5\n }),\n style({\n transform: \"translate3d(10px, 0, 0)\",\n offset: 0.6\n }),\n style({\n transform: \"translate3d(-10px, 0, 0)\",\n offset: 0.7\n }),\n style({\n transform: \"translate3d(10px, 0, 0)\",\n offset: 0.8\n }),\n style({\n transform: \"translate3d(-10px, 0, 0)\",\n offset: 0.9\n }),\n style({\n transform: \"translate3d(0, 0, 0)\",\n offset: 1\n })\n ])\n )\n ],\n {\n params: {\n timings: \"0.8s cubic-bezier(0.455, 0.03, 0.515, 0.955)\"\n }\n }\n )\n ]\n);\n\nexport { shake };\n","import { animate, state, style, transition, trigger } from \"@angular/animations\";\nimport { NiceAnimationCurves, NiceAnimationDurations } from \"./defaults\";\n\n// -----------------------------------------------------------------------------------------------------\n// @ Slide in top\n// -----------------------------------------------------------------------------------------------------\nconst slideInTop = trigger(\"slideInTop\",\n [\n state(\"void\",\n style({\n transform: \"translate3d(0, -100%, 0)\"\n })\n ),\n\n state(\"*\",\n style({\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"void => false\", []),\n\n // Transition\n transition(\"void => *\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.ENTERING} ${NiceAnimationCurves.DECELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Slide in bottom\n// -----------------------------------------------------------------------------------------------------\nconst slideInBottom = trigger(\"slideInBottom\",\n [\n state(\"void\",\n style({\n transform: \"translate3d(0, 100%, 0)\"\n })\n ),\n\n state(\"*\",\n style({\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"void => false\", []),\n\n // Transition\n transition(\"void => *\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.ENTERING} ${NiceAnimationCurves.DECELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Slide in left\n// -----------------------------------------------------------------------------------------------------\nconst slideInLeft = trigger(\"slideInLeft\",\n [\n state(\"void\",\n style({\n transform: \"translate3d(-100%, 0, 0)\"\n })\n ),\n\n state(\"*\",\n style({\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"void => false\", []),\n\n // Transition\n transition(\"void => *\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.ENTERING} ${NiceAnimationCurves.DECELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Slide in right\n// -----------------------------------------------------------------------------------------------------\nconst slideInRight = trigger(\"slideInRight\",\n [\n state(\"void\",\n style({\n transform: \"translate3d(100%, 0, 0)\"\n })\n ),\n\n state(\"*\",\n style({\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"void => false\", []),\n\n // Transition\n transition(\"void => *\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.ENTERING} ${NiceAnimationCurves.DECELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Slide out top\n// -----------------------------------------------------------------------------------------------------\nconst slideOutTop = trigger(\"slideOutTop\",\n [\n state(\"*\",\n style({\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n state(\"void\",\n style({\n transform: \"translate3d(0, -100%, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"false => void\", []),\n\n // Transition\n transition(\"* => void\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.EXITING} ${NiceAnimationCurves.ACCELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Slide out bottom\n// -----------------------------------------------------------------------------------------------------\nconst slideOutBottom = trigger(\"slideOutBottom\",\n [\n state(\"*\",\n style({\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n state(\"void\",\n style({\n transform: \"translate3d(0, 100%, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"false => void\", []),\n\n // Transition\n transition(\"* => void\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.EXITING} ${NiceAnimationCurves.ACCELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Slide out left\n// -----------------------------------------------------------------------------------------------------\nconst slideOutLeft = trigger(\"slideOutLeft\",\n [\n state(\"*\",\n style({\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n state(\"void\",\n style({\n transform: \"translate3d(-100%, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"false => void\", []),\n\n // Transition\n transition(\"* => void\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.EXITING} ${NiceAnimationCurves.ACCELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Slide out right\n// -----------------------------------------------------------------------------------------------------\nconst slideOutRight = trigger(\"slideOutRight\",\n [\n state(\"*\",\n style({\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n state(\"void\",\n style({\n transform: \"translate3d(100%, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"false => void\", []),\n\n // Transition\n transition(\"* => void\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.EXITING} ${NiceAnimationCurves.ACCELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\nexport { slideInTop, slideInBottom, slideInLeft, slideInRight, slideOutTop, slideOutBottom, slideOutLeft, slideOutRight };\n","import { animate, state, style, transition, trigger } from \"@angular/animations\";\nimport { NiceAnimationCurves, NiceAnimationDurations } from \"./defaults\";\n\n// -----------------------------------------------------------------------------------------------------\n// @ Zoom in\n// -----------------------------------------------------------------------------------------------------\nconst zoomIn = trigger(\"zoomIn\",\n [\n\n state(\"void\",\n style({\n opacity: 0,\n transform: \"scale(0.5)\"\n })\n ),\n\n state(\"*\",\n style({\n opacity: 1,\n transform: \"scale(1)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"void => false\", []),\n\n // Transition\n transition(\"void => *\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.ENTERING} ${NiceAnimationCurves.DECELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Zoom out\n// -----------------------------------------------------------------------------------------------------\nconst zoomOut = trigger(\"zoomOut\",\n [\n\n state(\"*\",\n style({\n opacity: 1,\n transform: \"scale(1)\"\n })\n ),\n\n state(\"void\",\n style({\n opacity: 0,\n transform: \"scale(0.5)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"false => void\", []),\n\n // Transition\n transition(\"* => void\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.EXITING} ${NiceAnimationCurves.ACCELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\nexport { zoomIn, zoomOut };\n\n","import { defaultAnimation } from \"./defaults\";\nimport { expandCollapse } from \"./expand-collapse\";\nimport {\n fadeIn,\n fadeInBottom,\n fadeInLeft,\n fadeInRight,\n fadeInTop,\n fadeOut,\n fadeOutBottom,\n fadeOutLeft,\n fadeOutRight,\n fadeOutTop\n} from \"./fade\";\nimport { shake } from \"./shake\";\nimport { slideInBottom, slideInLeft, slideInRight, slideInTop, slideOutBottom, slideOutLeft, slideOutRight, slideOutTop } from \"./slide\";\nimport { zoomIn, zoomOut } from \"./zoom\";\n\nexport const niceAnimations = [\n defaultAnimation,\n expandCollapse,\n fadeIn, fadeInTop, fadeInBottom, fadeInLeft, fadeInRight,\n fadeOut, fadeOutTop, fadeOutBottom, fadeOutLeft, fadeOutRight,\n shake,\n slideInTop, slideInBottom, slideInLeft, slideInRight,\n slideOutTop, slideOutBottom, slideOutLeft, slideOutRight,\n zoomIn, zoomOut\n];\n","export abstract class NiceApiException<Code> {\n public abstract code: Code;\n}\n","import { HttpErrorResponse } from \"@angular/common/http\";\nimport { NiceApiException } from \"./api.exception\";\n\nexport abstract class NiceHttpExceptionFactory<Code = any> {\n public transform(error: HttpErrorResponse): NiceApiException<Code> | HttpErrorResponse {\n if (error.error?.message === undefined) {\n return error;\n }\n return this.transformCodeError(error.error.message, error.error);\n }\n\n protected abstract transformCodeError(code: Code, data: any): NiceApiException<Code>;\n}\n","import { HttpContextToken, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from \"@angular/common/http\";\nimport { Injectable, Type } from \"@angular/core\";\nimport { plainToInstance } from \"class-transformer\";\nimport { map } from \"rxjs/operators\";\n\nexport const TRANSFORM_TYPE = new HttpContextToken<Type<any>>(() => null);\n\n@Injectable()\nexport class NiceTransformResponseInterceptor implements HttpInterceptor {\n public intercept(req: HttpRequest<any>, next: HttpHandler) {\n return next.handle(req).pipe(\n map(event => {\n if (event instanceof HttpResponse) {\n const type = req.context.get(TRANSFORM_TYPE);\n if (!type) {\n return event;\n }\n\n return event.clone({\n body: plainToInstance(type, event.body)\n });\n }\n\n return event;\n })\n );\n }\n}\n","import { HttpClient, HttpContext, HttpErrorResponse, HttpHeaders, HttpParams } from \"@angular/common/http\";\nimport { Type } from \"@angular/core\";\nimport { catchError, Observable } from \"rxjs\";\nimport { AbstractConstructor, Constructor } from \"../types/constructor\";\nimport { NiceHttpExceptionFactory } from \"./exceptions/exception.factory\";\nimport { TRANSFORM_TYPE } from \"./interceptors/transform-response.interceptor\";\n\nexport interface HttpOptions {\n type?: Type<any>;\n context?: HttpContext;\n headers?: HttpHeaders | {\n [header: string]: string | string[];\n };\n responseType?: \"text\" | \"json\" | \"arraybuffer\" | \"blob\";\n params?: HttpParams | {\n [param: string]: string | number | boolean | ReadonlyArray<string | number | boolean>;\n };\n}\n\nexport interface NiceApiDefinition {\n url(route?: string): string;\n delete<T>(route?: string, options?: HttpOptions): Observable<T>;\n get<T>(route?: string, options?: HttpOptions): Observable<T>;\n patch<T>(route?: string, body?: any, options?: HttpOptions): Observable<T>;\n post<T>(route?: string, body?: any, options?: HttpOptions): Observable<T>;\n put<T>(route?: string, body?: any, options?: HttpOptions): Observable<T>;\n}\n\nexport interface HasNiceApiDefinition {\n exceptionFactory: NiceHttpExceptionFactory;\n httpClient: HttpClient;\n apiUrl: string;\n path: string;\n}\n\ntype NiceApiDefinitionCtor = Constructor<NiceApiDefinition> & AbstractConstructor<NiceApiDefinition>;\n\nexport function mixinNiceApi<C extends AbstractConstructor<HasNiceApiDefinition>>(\n base: C,\n): NiceApiDefinitionCtor & C;\nexport function mixinNiceApi<C extends Constructor<HasNiceApiDefinition>>(\n base: C,\n): NiceApiDefinitionCtor & C {\n return class extends base {\n public url(route = \"\"): string {\n if (route === \"\" && (!this.path || this.path === \"\")) {\n return this.apiUrl;\n } else if (route === \"\") {\n return `${this.apiUrl}/${this.path}`;\n }\n return `${this.apiUrl}/${this.path}/${route}`;\n }\n\n public delete<T>(route = \"\", options?: HttpOptions): Observable<T> {\n return this.httpClient.delete<T>(this.url(route), this.transformOptions(options) as any).pipe(\n catchError(e => this.transformError(e))\n );\n }\n\n public get<T>(route = \"\", options?: HttpOptions): Observable<T> {\n return this.httpClient.get<T>(this.url(route), this.transformOptions(options) as any).pipe(\n catchError(e => this.transformError(e))\n );\n }\n\n public head<T>(route = \"\", options?: HttpOptions): Observable<T> {\n return this.httpClient.head<T>(this.url(route), this.transformOptions(options) as any).pipe(\n catchError(e => this.transformError(e))\n );\n }\n\n public patch<T>(route = \"\", body?: any, options?: HttpOptions): Observable<T> {\n return this.httpClient.patch<T>(this.url(route), body, this.transformOptions(options) as any).pipe(\n catchError(e => this.transformError(e))\n );\n }\n\n public post<T>(route = \"\", body?: any, options?: HttpOptions): Observable<T> {\n return this.httpClient.post<T>(this.url(route), body, this.transformOptions(options) as any).pipe(\n catchError(e => this.transformError(e))\n );\n }\n\n public put<T>(route = \"\", body?: any, options?: HttpOptions): Observable<T> {\n return this.httpClient.put<T>(this.url(route), body, this.transformOptions(options) as any).pipe(\n catchError(e => this.transformError(e))\n );\n }\n\n private transformError(error: HttpErrorResponse): Observable<any> {\n if (!this.exceptionFactory) {\n throw error;\n }\n throw this.exceptionFactory.transform(error);\n }\n\n private transformOptions(options?: HttpOptions): HttpOptions {\n if (!options) {\n return options;\n }\n\n const { type, context: c, ...values } = options;\n const context = c ?? new HttpContext();\n if (type) {\n context.set(TRANSFORM_TYPE, type);\n }\n return {\n ...values,\n responseType: values.responseType ?? \"json\",\n context\n };\n }\n\n constructor(...args: any[]) {\n super(...args);\n }\n };\n}\n","import { Injectable } from \"@angular/core\";\nimport { Observable, ReplaySubject } from \"rxjs\";\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class NiceAlertService {\n private readonly _onDismiss: ReplaySubject<string> = new ReplaySubject<string>(1);\n private readonly _onShow: ReplaySubject<string> = new ReplaySubject<string>(1);\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Getter for onDismiss\n */\n public get onDismiss(): Observable<any> {\n return this._onDismiss.asObservable();\n }\n\n /**\n * Getter for onShow\n */\n public get onShow(): Observable<any> {\n return this._onShow.asObservable();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Dismiss the alert\n */\n public dismiss(name: string): void {\n // Return if the name is not provided\n if (!name) {\n return;\n }\n\n // Execute the observable\n this._onDismiss.next(name);\n }\n\n /**\n * Show the dismissed alert\n */\n public show(name: string): void {\n // Return if the name is not provided\n if (!name) {\n return;\n }\n\n // Execute the observable\n this._onShow.next(name);\n }\n}\n","import { Injectable } from \"@angular/core\";\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class NiceUtilsService {\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Generates a random id\n */\n public randomId(length: number = 10): string {\n const chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n let name = \"\";\n\n for (let i = 0; i < 10; i++) {\n name += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n\n return name;\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NiceUtilsService } from \"./utils.service\";\n\n@NgModule({\n providers: [NiceUtilsService]\n})\nexport class NiceUtilsModule {\n constructor(private _niceUtilsService: NiceUtilsService) {}\n}\n","import { BooleanInput, coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { filter, takeUntil } from \"rxjs/operators\";\nimport { niceAnimations } from \"../../animations\";\nimport { NiceUtilsService } from \"../../providers/utils\";\nimport { NiceAlertService } from \"./alert.service\";\nimport { NiceAlertType, NiceAlertAppearance, NiceAlertColor } from \"./alert.types\";\n\n@Component({\n selector: \"nice-alert\",\n templateUrl: \"./alert.template.html\",\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: niceAnimations,\n exportAs: \"niceAlert\"\n})\nexport class NiceAlertComponent implements OnChanges, OnInit, OnDestroy {\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_dismissible: BooleanInput;\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_dismissed: BooleanInput;\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_disableAnimation: BooleanInput;\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_showIcon: BooleanInput;\n\n @Input()\n public appearance: NiceAlertAppearance = \"soft\";\n\n @Input()\n public dismissed = false;\n\n @Input()\n public dismissible = false;\n\n @Input()\n public disableAnimation = false;\n\n @Input()\n public name: string = this._niceUtilsService.randomId();\n\n @Input()\n public showIcon = true;\n\n @Input()\n public type: NiceAlertType = \"primary\";\n\n @Input()\n public color?: NiceAlertColor;\n\n @Output()\n public readonly dismissedChanged: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n private _unsubscribeAll: Subject<void> = new Subject<void>();\n\n /**\n * Constructor\n */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _niceAlertService: NiceAlertService,\n private _niceUtilsService: NiceUtilsService\n ) {}\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Host binding for component classes\n */\n @HostBinding(\"class\")\n public get classList(): any {\n let types: { [className: string]: boolean } = {\n \"nice-alert-type-primary\": this.type === \"primary\",\n \"nice-alert-type-accent\": this.type === \"accent\",\n \"nice-alert-type-warn\": this.type === \"warn\",\n \"nice-alert-type-basic\": this.type === \"basic\",\n \"nice-alert-type-info\": this.type === \"info\",\n \"nice-alert-type-success\": this.type === \"success\",\n \"nice-alert-type-warning\": this.type === \"warning\",\n \"nice-alert-type-error\": this.type === \"error\"\n };\n\n if (this.color) {\n types = {\n \"nice-alert-type-primary\": this.color === \"primary\",\n \"nice-alert-type-accent\": this.color === \"accent\",\n \"nice-alert-type-warn\": this.color === \"warn\"\n };\n }\n\n return {\n \"nice-alert-appearance-border\": this.appearance === \"border\",\n \"nice-alert-appearance-fill\": this.appearance === \"fill\",\n \"nice-alert-appearance-outline\": this.appearance === \"outline\",\n \"nice-alert-appearance-soft\": this.appearance === \"soft\",\n \"nice-alert-dismissed\": this.dismissed,\n \"nice-alert-dismissible\": this.dismissible,\n \"nice-alert-show-icon\": this.showIcon,\n ...types\n };\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On changes\n *\n * @param changes\n */\n public ngOnChanges(changes: SimpleChanges): void {\n // Dismissed\n if (\"dismissed\" in changes) {\n // Coerce the value to a boolean\n this.dismissed = coerceBooleanProperty(changes.dismissed.currentValue);\n\n // Dismiss/show the alert\n this._toggleDismiss(this.dismissed);\n }\n\n // Dismissible\n if (\"dismissible\" in changes) {\n // Coerce the value to a boolean\n this.dismissible = coerceBooleanProperty(changes.dismissible.currentValue);\n }\n\n // Disable animation\n if (\"disableAnimation\" in changes) {\n // Coerce the value to a boolean\n this.disableAnimation = coerceBooleanProperty(changes.disableAnimation.currentValue);\n }\n\n // Show icon\n if (\"showIcon\" in changes) {\n // Coerce the value to a boolean\n this.showIcon = coerceBooleanProperty(changes.showIcon.currentValue);\n }\n }\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Subscribe to the dismiss calls\n this._niceAlertService.onDismiss\n .pipe(\n filter((name) => this.name === name),\n takeUntil(this._unsubscribeAll)\n )\n .subscribe(() => {\n\n // Dismiss the alert\n this.dismiss();\n });\n\n // Subscribe to the show calls\n this._niceAlertService.onShow\n .pipe(\n filter((name) => this.name === name),\n takeUntil(this._unsubscribeAll)\n )\n .subscribe(() => {\n\n // Show the alert\n this.show();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next();\n this._unsubscribeAll.complete();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Dismiss the alert\n */\n public dismiss(): void {\n // Return if the alert is already dismissed\n if (this.dismissed) {\n return;\n }\n\n // Dismiss the alert\n this._toggleDismiss(true);\n }\n\n /**\n * Show the dismissed alert\n */\n public show(): void {\n // Return if the alert is already showing\n if (!this.dismissed) {\n return;\n }\n\n // Show the alert\n this._toggleDismiss(false);\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Dismiss/show the alert\n *\n * @param dismissed\n * @private\n */\n private _toggleDismiss(dismissed: boolean): void {\n // Return if the alert is not dismissible\n if (!this.dismissible) {\n return;\n }\n\n // Set the dismissed\n this.dismissed = dismissed;\n\n // Execute the observable\n this.dismissedChanged.next(this.dismissed);\n\n // Notify the change detector\n this._changeDetectorRef.markForCheck();\n }\n}\n","<div\n class=\"nice-alert-container\"\n *ngIf=\"!dismissible || dismissible && !dismissed\"\n [@fadeIn]=\"!dismissed && !disableAnimation\"\n [@fadeOut]=\"!dismissed && !disableAnimation\">\n\n <!-- Border -->\n <div\n class=\"nice-alert-border\"\n *ngIf=\"appearance === 'border'\"></div>\n\n <!-- Icon -->\n <div\n class=\"nice-alert-icon\"\n *ngIf=\"showIcon\">\n\n <!-- Custom icon -->\n <div class=\"nice-alert-custom-icon\">\n <ng-content select=\"[niceAlertIcon]\"></ng-content>\n </div>\n\n <!-- Default icons -->\n <div class=\"nice-alert-default-icon\">\n\n <mat-icon\n *ngIf=\"type === 'primary'\"\n [svgIcon]=\"'heroicons_solid:check-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'accent'\"\n [svgIcon]=\"'heroicons_solid:check-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'warn'\"\n [svgIcon]=\"'heroicons_solid:x-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'basic'\"\n [svgIcon]=\"'heroicons_solid:check-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'info'\"\n [svgIcon]=\"'heroicons_solid:information-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'success'\"\n [svgIcon]=\"'heroicons_solid:check-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'warning'\"\n [svgIcon]=\"'heroicons_solid:exclamation'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'error'\"\n [svgIcon]=\"'heroicons_solid:x-circle'\"></mat-icon>\n\n </div>\n\n </div>\n\n <!-- Content -->\n <div class=\"nice-alert-content\">\n\n <div class=\"nice-alert-title\">\n <ng-content select=\"[niceAlertTitle]\"></ng-content>\n </div>\n\n <div class=\"nice-alert-message\">\n <ng-content></ng-content>\n </div>\n\n </div>\n\n <!-- Dismiss button -->\n <button\n class=\"nice-alert-dismiss-button\"\n mat-icon-button\n (click)=\"dismiss()\">\n <mat-icon [svgIcon]=\"'heroicons_solid:x'\"></mat-icon>\n </button>\n\n</div>\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { NiceAlertComponent } from \"./alert.component\";\n\n@NgModule({\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule\n ],\n declarations: [\n NiceAlertComponent\n ],\n exports: [\n NiceAlertComponent\n ]\n})\nexport class NiceAlertModule {\n}\n","export const isNullOrUndefined = (value: unknown): boolean => {\n return TypeUtils.isNullOrUndefined(value);\n};\n\nexport const isNotNullOrUndefined = (value: unknown): boolean => {\n return TypeUtils.isNotNullOrUndefined(value);\n};\n\nexport class TypeUtils {\n public static isNullOrUndefined(value: unknown): boolean {\n return value === null || value === undefined;\n }\n\n public static isNotNullOrUndefined(value: unknown): boolean {\n return !TypeUtils.isNullOrUndefined(value);\n }\n}\n","import { isNullOrUndefined } from \"./type.utils\";\n\nexport class ArrayUtils {\n public static joinIfDefined(array: any[], join = \" \"): string {\n return array?.filter(val => val)?.join(join);\n }\n\n public static uniqueObjects<Item>(array: Item[], keySelector: (item: Item) => unknown): Item[] {\n return Array.from(new Map(array.map(x => [keySelector(x), x])).values());\n }\n\n public static unique<T>(\n array: T[],\n comparator: (value1: T, value2: T) => boolean = (value1: T, value2: T) => value1 === value2\n ): T[] {\n if (isNullOrUndefined(array)) {\n return array;\n }\n\n const newArray: T[] = [];\n for (const value of array) {\n if (newArray.findIndex((valueInArray) => comparator(valueInArray, value)) < 0) {\n newArray.push(value);\n }\n }\n\n return newArray;\n }\n\n public static equals(arr1: any[], arr2: any[], options: { shallow: boolean, ordered: boolean } = { shallow: true, ordered: false }): boolean {\n if (options.shallow && !options.ordered) {\n return this.unorderedShallowEquals(arr1, arr2);\n }\n\n // TODO: Implement other types of equals.\n throw new Error(\"Not implemented.\");\n }\n\n private static unorderedShallowEquals(arr1: any[], arr2: any[]): boolean {\n return (arr1 ?? []).every((arr1Element) => (arr2 ?? []).includes(arr1Element))\n && (arr2 ?? []).every((arr2Element) => (arr1 ?? []).includes(arr2Element));\n }\n\n public static sortByKey(array: any[], key: string) {\n return array.sort(ArrayUtils.sortByKeyFn(key));\n }\n\n public static sortByKeyFn(key: string) {\n return (a, b) => {\n if (a[key] < b[key]) {\n return -1;\n }\n if (a[key] > b[key]) {\n return 1;\n }\n return 0;\n };\n }\n\n public static groupBy<Item, Key, Value>(\n array: Item[],\n keySelector: (item: Item) => Key,\n valueSelector: (item: Item) => Value[] | Value\n ): Map<Key, Value[]> {\n const groups: Map<Key, Value[]> = new Map<Key, Value[]>();\n for (const item of array) {\n const key: Key = keySelector(item);\n if (key == null) {\n continue;\n }\n let value: Value[] | Value = valueSelector(item);\n if (value == null) {\n continue;\n }\n\n if (!(value instanceof Array)) {\n value = [value];\n }\n\n if (!groups.has(key)) {\n groups.set(key, value);\n } else {\n groups.get(key).push(...value);\n }\n }\n return groups;\n }\n}\n\ndeclare global {\n interface Array<T> {\n distinct<T>(): Array<T>;\n\n groupBy<T>(value: T): T[];\n\n includesWithCallback(callbackfn: (value: T, index: number, array: T[]) => boolean): boolean;\n\n pushOrRemove<T>(value: T): void;\n\n replace<T>(item: T, ...newItems: T[]): Array<T>;\n\n skipNullValues(): T[];\n\n difference<T>(...not: T[]): T[];\n }\n}\n\nArray.prototype.distinct = function <T>(): T[] {\n return this.filter((value, index) => {\n return this.indexOf(value) === index;\n });\n};\n\nArray.prototype.groupBy = function <T>(property: T): T[] {\n return this.reduce((acc, obj) => {\n const key = obj[property];\n if (!acc[key]) {\n acc[key] = [];\n }\n acc[key].push(obj);\n return acc;\n }, {});\n};\n\nArray.prototype.includesWithCallback = function <T>(callbackfn: (value: T, index: number, array: T[]) => boolean) {\n return this.findIndex(callbackfn) < 0;\n};\n\nArray.prototype.pushOrRemove = function <T>(value: T): void {\n const index = this.indexOf(value);\n if (index !== -1) {\n this.splice(index, 1);\n } else {\n this.push(value);\n }\n};\n\nArray.prototype.replace = function <T>(item: T, ...newItems: T[]): T[] {\n return [...this.slice(0, this.indexOf(item)), ...newItems, ...this.slice(this.indexOf(item) + 1, this.length)];\n};\n\nArray.prototype.skipNullValues = function <T>(): T[] {\n return this.filter(x => !!x);\n};\n\nArray.prototype.difference = function <T>(...not: T[]) {\n return this.filter(i => !not.includes(i));\n};\n","export class CaseUtils {\n // myValue -> my-value\n public static toCamelFromKebab(data: string): string {\n return data.replace(/(-\\w)/g, (m) => m[1].toUpperCase());\n }\n\n // MyValue -> my_value\n public static toSnakeCaseFromPascalCase(str: string): string {\n return str.replace(/[A-Z]/g, (letter, index) => {\n if (index === 0) {\n return letter.toLowerCase();\n }\n const pastLetter = str[index - 1] as string;\n const nextLetter = str[index + 1] as string;\n if (pastLetter.toLowerCase() === pastLetter) {\n return `_${letter.toLowerCase()}`;\n }\n if (nextLetter && nextLetter.toLowerCase() === nextLetter) {\n return `_${letter.toLowerCase()}`;\n }\n return letter.toLowerCase();\n });\n }\n\n // myValue -> my_value\n public static toSnakeCaseFromCamelCase(str: string): string {\n return this.toSnakeCaseFromPascalCase(this.capitalizeFirstLetter(str));\n }\n\n // my_value -> myValue\n public static toCamelCaseFromSnakeCase(stringToConvert: string): string {\n const regExp = new RegExp(\"_.\");\n const index = stringToConvert.indexOf(\"_\") + 1;\n const toUpperCase = stringToConvert.charAt(index).toUpperCase();\n return stringToConvert.replace(regExp, toUpperCase);\n }\n\n // MyValue -> my-value\n public static toKebabCasePascalCase(str: string): string {\n return str\n .replace(/[A-Z]/g, (letter, index) => {\n return index === 0 ? letter.toLowerCase() : \"-\" + letter.toLowerCase();\n })\n .replace(/_/g, \"-\");\n }\n\n // my_value -> MyValue\n public static toPascalCaseFromSnakeCase(str: string): string {\n return str.replace(/(^[a-z]|_[a-z])/g, (letter) => {\n if (letter.length === 1) {\n return letter.toUpperCase();\n }\n\n return letter[1].toUpperCase();\n });\n }\n\n public static capitalizeFirstLetter(str: string): string {\n const firstLetter = str.substr(0, 1);\n return firstLetter.toUpperCase() + str.substr(1);\n }\n}\n","export class ColorsUtils {\n /**\n * https://codepen.io/cferdinandi/pen/Yomroj\n *\n * (c) 2019 Chris Ferdinandi, MIT License, https://gomakethings.com\n * Derived from work by Brian Suda, https://24ways.org/2010/calculating-color-contrast/\n */\n public static contrastFromHex(hex: string): string {\n if (hex.slice(0, 1) === \"#\") {\n hex = hex.slice(1);\n }\n\n // If a three-character hex, make six-character\n if (hex.length === 3) {\n hex = hex\n .split(\"\")\n .map((i) => i + i)\n .join(\"\");\n }\n\n // Convert to RGB value\n const r = parseInt(hex.substr(0, 2), 16);\n const g = parseInt(hex.substr(2, 2), 16);\n const b = parseInt(hex.substr(4, 2), 16);\n\n // Get YIQ ratio\n const yiq = (r * 299 + g * 587 + b * 114) / 1000;\n\n // Check contrast\n return yiq >= 128 ? \"000000\" : \"ffffff\";\n }\n}\n","import { isNullOrUndefined } from \"./type.utils\";\n\nexport class DateUtils {\n public static currentYear(): number {\n return new Date().getUTCFullYear();\n }\n\n public static extractTimeAsString(date: Date): string {\n if (!date) {\n return null;\n }\n\n const hours = date.getHours();\n const minutes = date.getMinutes();\n\n return `${(hours ?? \"\").toString().padStart(2, \"0\")}:${(minutes ?? \"\").toString().padStart(2, \"0\")}`;\n }\n\n public static setTimeFromString(date: Date, time: string): Date {\n if (isNullOrUndefined(time) || time.length === 0 || !time.includes(\":\")) {\n return date;\n }\n\n const parts = time.split(\":\");\n if (parts.length !== 2 || isNaN(+parts[0]) || isNaN(+parts[1])) {\n return date;\n }\n\n const [hours, minutes] = parts.map((part) => +part);\n const updatedDate = new Date(date);\n updatedDate.setHours(hours, minutes);\n return updatedDate;\n }\n}\n\ndeclare global {\n export interface Date {\n getSeason(): string;\n getYear(): number;\n }\n}\n\nDate.prototype.getSeason = function(): \"winter\" | \"spring\" | \"summer\" | \"fall\" {\n const month = this.getUTCMonth();\n const date = this.getUTCDate();\n\n if ((month === 11 && date >= 21) || (month >= 0 && month <= 1) || (month === 2 && date <= 19)) {\n return \"winter\";\n } else if ((month === 2 && date >= 20) || (month >= 3 && month <= 4) || (month === 5 && date <= 20)) {\n return \"spring\";\n } else if ((month === 5 && date >= 21) || (month >= 6 && month <= 7) || (month === 8 && date <= 22)) {\n return \"summer\";\n } else {\n return \"fall\";\n }\n};\n\nDate.prototype.getYear = function (): number {\n return +this.getFullYear().toString().substr(-2);\n};\n","export class FileUtils {\n public static async getFileFromUrl(url?: string, name = \"\"): Promise<File | undefined> {\n if (!url) {\n return undefined;\n }\n const res = await fetch(url);\n return new File([await res.blob()], name);\n }\n\n public static async selectFile(accept: string, multiple = false): Promise<File | File[]> {\n return new Promise(resolve => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.multiple = multiple;\n input.accept = accept;\n\n input.onchange = () => {\n if (input.files) {\n const files = Array.from(input.files);\n return resolve(multiple ? files : files[0]);\n }\n\n resolve(null);\n };\n\n input.click();\n });\n }\n\n public static downloadFile(fileName: string, content: Blob, downloadLink?: HTMLAnchorElement): void {\n if (!downloadLink) {\n downloadLink = document.createElement(\"a\");\n document.body.appendChild(downloadLink);\n downloadLink.style.display = \"none\";\n }\n\n const dataUrl = window.URL.createObjectURL(content);\n downloadLink.href = dataUrl;\n downloadLink.download = fileName;\n downloadLink.click();\n window.URL.revokeObjectURL(dataUrl);\n document.body.removeChild(downloadLink);\n }\n\n public static downloadUrl(url: string): void {\n const downloadLink = document.createElement(\"a\");\n document.body.appendChild(downloadLink);\n downloadLink.style.display = \"none\";\n downloadLink.href = url;\n downloadLink.click();\n document.body.removeChild(downloadLink);\n }\n\n public static openPrintableWindow(content: string): void {\n const win = window.open(\"\");\n if (!win) {\n return;\n }\n\n win.document.open();\n win.document.write(content);\n win.document.close();\n }\n\n public static filenameToExtension(filename: string): string {\n const re = /(?:\\.([^.]+))?$/;\n return re.exec(filename)[1];\n }\n\n public static getDataUrl(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = error => reject(error);\n });\n }\n\n public static async getFileFromDataUrl(data: string, name: string): Promise<File> {\n const base64Response = await fetch(data);\n const blob = await base64Response.blob();\n const [, type] = blob.type.split(\"/\");\n return new File([blob], `${name}.${type}`, {\n lastModified: Date.now(),\n type: blob.type\n });\n }\n}\n","export class FontAwesomeUtils {\n public static fileExtensionToIcon(extension: string): string {\n switch (extension) {\n case \"pdf\":\n return \"fa-file-pdf\";\n case \"doc\":\n case \"docx\":\n return \"fa-file-word\";\n case \"xlsx\":\n case \"xls\":\n return \"fa-file-excel\";\n case \"csv\":\n return \"fa-file-csv\";\n case \"ppt\":\n case \"pptx\":\n return \"fa-file-powerpoint\";\n case \"mp4\":\n case \"mov\":\n case \"wmv\":\n case \"webm\":\n return \"fa-file-video\";\n case \"mp3\":\n case \"wav\":\n return \"fa-file-audio\";\n case \"jpeg\":\n case \"jpg\":\n case \"png\":\n case \"gif\":\n case \"svg\":\n return \"fa-file-image\";\n case \"zip\":\n return \"fa-file-archive\";\n case \"txt\":\n return \"fa-file-alt\";\n default:\n return \"fa-file\";\n }\n }\n}\n","import { isNullOrUndefined } from \"./type.utils\";\n\nexport class FormDataUtils {\n public static appendFormDataWithDto(form: FormData, value: object): void {\n if (typeof value !== \"object\") {\n return;\n }\n\n for (const key in value) {\n if (value.hasOwnProperty(key)) {\n FormDataUtils.appendFormDataWithValue(form, value[key], key);\n }\n }\n }\n\n // FormData does not handle object and arrays, instead we add them as:\n // Object: forms.append(name[key], value) (e.g. forms.append(\"company-admin[name]\", \"digitalmomentum\"))\n // Array: forms.append(name[index], value) (e.g. forms.append(\"expressions[0]\", \"incroyable\"))\n // Recursive method that appends values, objects and arrays to the forms as name.\n public static appendFormDataWithValue(form: FormData, value, name) {\n if (isNullOrUndefined(value)) {\n return;\n }\n\n if (value instanceof Array) {\n for (let i = 0; i < value.length; ++i) {\n FormDataUtils.appendFormDataWithValue(form, value[i], name + `[${i}]`);\n }\n } else if (value instanceof Date) {\n form.append(name, value.toISOString());\n } else if (value instanceof Object) {\n for (const key in value) {\n if (value.hasOwnProperty(key)) {\n FormDataUtils.appendFormDataWithValue(form, value[key], name + `[${key}]`);\n }\n }\n } else {\n form.append(name, value);\n }\n }\n}\n","export enum HttpStatusCodes {\n CONTINUE = 100,\n SWITCHING_PROTOCOLS = 101,\n PROCESSING = 102,\n OK = 200,\n CREATED = 201,\n ACCEPTED = 202,\n NON_AUTHORITATIVE_INFORMATION = 203,\n NO_CONTENT = 204,\n RESET_CONTENT = 205,\n PARTIAL_CONTENT = 206,\n AMBIGUOUS = 300,\n MOVED_PERMANENTLY = 301,\n FOUND = 302,\n SEE_OTHER = 303,\n NOT_MODIFIED = 304,\n TEMPORARY_REDIRECT = 307,\n PERMANENT_REDIRECT = 308,\n BAD_REQUEST = 400,\n UNAUTHORIZED = 401,\n PAYMENT_REQUIRED = 402,\n FORBIDDEN = 403,\n NOT_FOUND = 404,\n METHOD_NOT_ALLOWED = 405,\n NOT_ACCEPTABLE = 406,\n PROXY_AUTHENTICATION_REQUIRED = 407,\n REQUEST_TIMEOUT = 408,\n CONFLICT = 409,\n GONE = 410,\n LENGTH_REQUIRED = 411,\n PRECONDITION_FAILED = 412,\n PAYLOAD_TOO_LARGE = 413,\n URI_TOO_LONG = 414,\n UNSUPPORTED_MEDIA_TYPE = 415,\n REQUESTED_RANGE_NOT_SATISFIABLE = 416,\n EXPECTATION_FAILED = 417,\n UNPROCESSABLE_ENTITY = 422,\n TOO_MANY_REQUESTS = 429,\n INTERNAL_SERVER_ERROR = 500,\n NOT_IMPLEMENTED = 501,\n BAD_GATEWAY = 502,\n SERVICE_UNAVAILABLE = 503,\n GATEWAY_TIMEOUT = 504,\n HTTP_VERSION_NOT_SUPPORTED = 505\n}\n","export enum KeyboardCodes {\n ArrowUp = \"ArrowUp\",\n ArrowDown = \"ArrowDown\",\n Enter = \"Enter\",\n Shift = \"Shift\"\n}\n","export interface ModalData {\n mode: ModalMode;\n}\n\nexport enum ModalMode {\n Create,\n Edit\n}\n","export class NumberUtils {\n}\n\ndeclare global {\n interface Number {\n inRange(a: number, b: number): boolean;\n }\n}\n\nNumber.prototype.inRange = function (a: number, b: number): boolean {\n return this >= a && this <= b;\n};\n","import { isNullOrUndefined } from \"./type.utils\";\n\nexport class ObjectUtils {\n public static transformStringProperties(obj: any): object {\n for (const property in obj) {\n if (obj.hasOwnProperty(property)) {\n if (typeof obj[property] === \"object\") {\n obj = ObjectUtils.transformStringProperties(obj);\n } else {\n obj = ObjectUtils.stringPropertiesToNumber(obj, property);\n }\n }\n }\n\n return obj;\n }\n\n public static stringPropertiesToNumber(obj: any, property: string): object {\n if (!isNaN(obj[property])) {\n obj[property] = +obj[property];\n }\n\n return obj;\n }\n\n public static assignDefined(target: any, source: any): object {\n Object.keys(source).map(key => {\n if (source[key] !== undefined) {\n target[key] = source[key];\n }\n });\n\n return target;\n }\n\n public static areObjectsEqual(obj1: any, obj2: any): boolean {\n const keys1 = Object.keys(obj1).sort();\n const keys2 = Object.keys(obj2).sort();\n if (keys1.length !== keys2.length) {\n return false;\n }\n if (!keys1.every((k, i) => k === keys2[i])) {\n return false;\n }\n return keys1.every(kk => {\n const v1 = obj1[kk];\n const v2 = obj2[kk];\n if (Array.isArray(v1)) {\n return ObjectUtils.areObjectsEqual(v1, v2);\n } else if (typeof v1 === \"object\" && v1 !== null) {\n return ObjectUtils.areObjectsEqual(v1, v2);\n } else {\n return v1 === v2;\n }\n });\n }\n\n public static deepCopy(obj: any): any {\n // Handle the primitive types, null and undefined\n if (obj == null || typeof obj != \"object\") {\n return obj;\n }\n\n // Handle Date\n if (obj instanceof Date) {\n const copy = new Date();\n copy.setTime(obj.getTime());\n return copy;\n }\n\n // Handle Array\n if (obj instanceof Array) {\n const copy = [];\n for (const item of obj) {\n copy.push(ObjectUtils.deepCopy(item));\n }\n return copy;\n }\n\n // Handle Object\n if (obj instanceof Object) {\n const copy = {};\n for (const attr in obj) {\n if (obj.hasOwnProperty(attr)) {\n copy[attr] = ObjectUtils.deepCopy(obj[attr]);\n }\n }\n return copy;\n }\n\n throw new Error(\"Unable to copy obj! Its type isn't supported.\");\n }\n\n // To do an immutable assignment, we need to first deep copy the model and then run the deep assign.\n public static immutableDeepAssign<Source, Target>(key: string, deepObj: Source, obj: Target): Target {\n const output = ObjectUtils.deepCopy(obj);\n ObjectUtils.deepAssign(key, deepObj, output);\n return output;\n }\n\n // Does a shallow assignment on a deep value. The value is located by the key.\n public static deepAssign<Source, Target>(key: string, deepObj: Source, obj: Target) {\n ObjectUtils.internalDeepAssign(key?.split(\".\"), deepObj, obj);\n }\n\n private static internalDeepAssign<Source, Target>(segments: string[], deepObj: Source, obj: Target) {\n // No more depth to be navigated through, we can do the shallow assignment.\n if (segments?.length === 0) {\n Object.assign(obj, deepObj);\n return;\n }\n\n if (isNullOrUndefined(obj)) {\n obj = {} as Target;\n }\n\n const segment = segments.shift();\n // If we cannot complete the key's path, we create it.\n if (!obj.hasOwnProperty(segment)) {\n obj[segment] = {};\n }\n\n ObjectUtils.internalDeepAssign(segments, deepObj, obj[segment]);\n }\n}\n","export class PromiseUtils {}\n\ndeclare global {\n export interface PromiseConstructor {\n delay(ms: number): Promise<void>;\n }\n}\n\n// tslint:disable-next-line:only-arrow-functions\nPromise.delay = function(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n};\n","import { HttpParams } from \"@angular/common/http\";\n\nexport class QueryParamsUtils {\n public static fromObject(obj: any): string {\n Object.entries(obj).forEach(([key, value]) => {\n if (value === undefined) {\n delete obj[key];\n }\n });\n return new HttpParams({\n fromObject: obj\n }).toString();\n }\n}\n","const lowerUpperDigit8 = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d).{8,}$/;\n\nexport class RegexUtils {\n public static email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\n public static password = {\n // Used as default.\n // 8 chars, lower + upper + digit.\n lowerUpperDigit8\n };\n\n public static canadianPostalCode = /^((?!.*[DFIOQU])[A-VXYa-vxy][0-9][A-Za-z] ?[0-9][A-Za-z][0-9])?$/;\n}\n","export class UrlUtils {\n public static emailUrl(email: string): string {\n return `mailto:${email}`;\n }\n\n public static directionUrl(address: string, postalCode: string): string {\n return `https://www.google.com/maps/dir/?api=1&destination=${address}+${postalCode}`;\n }\n\n public static phoneCallUrl(phone: string, ext?: string): string {\n if (ext?.length) {\n return `tel:${phone};${ext}`;\n }\n\n return `tel:${phone}`;\n }\n\n // Takes location ref and returns fragment\n // http://localhost:4200/dashboard/profile returns [\"dashboard\", \"profile\"]\n public static getCurrentUrlFragments(): string[] {\n return window.location.href.replace(\"://\", \"\").split(\"/\").slice(1);\n }\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const NICE_ASSETS_CAROUSEL_OPTIONS = new InjectionToken(\"nice_assets_options\");\n","import { Directive, EventEmitter, HostBinding, HostListener, Output } from \"@angular/core\";\n\n@Directive({ selector: \"[niceDropzone]\"})\nexport class NiceDropzoneDirective {\n @HostBinding(\"class.file-over\")\n public fileOver: boolean;\n\n @Output()\n public filesDropped = new EventEmitter<FileList>();\n\n // Dragover listener\n @HostListener(\"dragover\", [\"$event\"])\n public onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.fileOver = true;\n }\n\n // Dragleave listener\n @HostListener(\"dragleave\", [\"$event\"])\n public onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.fileOver = false;\n }\n\n // Drop listener\n @HostListener(\"drop\", [\"$event\"])\n public ondrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.fileOver = false;\n const files = event.dataTransfer.files;\n if (files.length > 0) {\n this.filesDropped.emit(files);\n }\n }\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n Optional,\n Output, QueryList,\n ViewChild, ViewChildren,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { CanColor, ThemePalette } from \"@angular/material/core\";\nimport { niceAnimations } from \"../../animations\";\nimport { FileUtils } from \"../../utils\";\nimport { NICE_ASSETS_CAROUSEL_OPTIONS } from \"./assets-carousel.constant\";\n\nexport interface NiceAssets {\n type: \"image\" | \"video\";\n id?: number | string;\n url?: string;\n base64?: string;\n file?: File;\n}\n\nexport type NiceAssetsCarouselActionIcon = { matIcon: string; svgIcon?: string; } | { matIcon?: string; svgIcon: string; };\n\nexport interface NiceAssetsCarouselActions {\n icon: NiceAssetsCarouselActionIcon;\n name: string;\n action: (active: number) => void;\n}\n\nexport interface NiceAssetsCarouselOptions {\n actionButtons?: {\n moreOptions?: NiceAssetsCarouselActionIcon;\n addPhoto?: NiceAssetsCarouselActionIcon;\n remove?: NiceAssetsCarouselActionIcon;\n };\n addPhoto?: NiceAssetsCarouselActionIcon;\n leftArrow?: NiceAssetsCarouselActionIcon;\n rightArrow?: NiceAssetsCarouselActionIcon;\n upload?: NiceAssetsCarouselActionIcon;\n}\n\n@Component({\n selector: \"nice-assets-carousel\",\n templateUrl: \"assets-carousel.template.html\",\n styleUrls: [\"assets-carousel.theme.scss\"],\n encapsulation: ViewEncapsulation.None,\n animations: niceAnimations,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NiceAssetsCarouselComponent),\n multi: true\n }\n ]\n})\nexport class NiceAssetsCarouselComponent implements ControlValueAccessor, CanColor {\n public _activeTranslationPosition = 0;\n public _active = 0;\n public _assets: NiceAssets[] = [];\n public _activeAsset: NiceAssets;\n public _lastAsset = true;\n public _shouldTransform = false;\n public _activeVideoElement: ElementRef<HTMLVideoElement>;\n public _assetsElement: QueryList<ElementRef<HTMLDivElement>>;\n public defaultColor: ThemePalette = \"primary\";\n\n @ViewChild(\"fileInput\")\n public inputElement: ElementRef<HTMLInputElement>;\n\n @Input()\n public color: ThemePalette = this.defaultColor;\n\n @Input()\n public edit = false;\n\n @Input()\n public accept: string[] = [\"image/*\"];\n\n @Input()\n public customActions: NiceAssetsCarouselActions[] = [];\n\n @Input()\n public multipleUpload = false;\n\n @Input()\n public visiblePreviewAsset = 4;\n\n @Input()\n public showAddAssetContainer = true;\n\n @Output()\n public activeChange = new EventEmitter<number>();\n\n @Output()\n public removedAsset = new EventEmitter<NiceAssets>();\n\n public listStyle: { transform: string } = { transform: \"translateX(0px)\" };\n\n public showOverlay: boolean;\n\n private propagate: (assets: NiceAssets[]) => void;\n\n @ViewChild(\"activeVideo\")\n public set activeVideoElement(activeVideoElement: ElementRef<HTMLVideoElement>) {\n this._activeVideoElement = activeVideoElement;\n if (!this._activeVideoElement || !this._assetsElement) {\n return;\n }\n\n this.startSyncVideo();\n }\n\n @ViewChildren(\"assets\")\n public set assetsElement(assetsElement: QueryList<ElementRef<HTMLDivElement>>) {\n this._assetsElement = assetsElement;\n if (!this._activeVideoElement || !this._assetsElement) {\n return;\n }\n\n this.startSyncVideo();\n }\n\n @Input()\n public set assets(assets: NiceAssets[]) {\n this.writeValue(assets ?? []);\n }\n\n private set activeTranslationPosition(position: number) {\n this._activeTranslationPosition = position;\n this.listStyle.transform = `translateX(calc((var(--nice-assets-carousel-asset-width) + var(--nice-assets-carousel-asset-gap)) * ${position}))`;\n }\n\n private set activeAsset(position: number) {\n if (position < 0) {\n position = 0;\n }\n\n this._active = position;\n this._activeAsset = this._assets[this._active];\n this._lastAsset = this._active === this._assets.length - 1 || !this._assets.length;\n this._shouldTransform\n = ((this.edit && this.showAddAssetContainer) && this._active >= (this.visiblePreviewAsset - 1))\n || this._active >= this.visiblePreviewAsset;\n this.activeChange.emit(this._active);\n }\n\n constructor(@Optional() @Inject(NICE_ASSETS_CAROUSEL_OPTIONS) public readonly options: NiceAssetsCarouselOptions) {\n if (!this.options) {\n this.options = {\n actionButtons: {\n addPhoto: {\n matIcon: \"photo_camera\"\n },\n moreOptions: {\n matIcon: \"more_vert\"\n },\n remove: {\n matIcon: \"delete\"\n }\n },\n addPhoto: {\n matIcon: \"photo_camera\"\n },\n leftArrow: {\n matIcon: \"chevron_left\"\n },\n rightArrow: {\n matIcon: \"chevron_right\"\n },\n upload: {\n matIcon: \"file_upload\"\n }\n };\n }\n }\n\n public writeValue(assets: NiceAssets[]): void {\n this._assets = assets ?? [];\n if (this._assets?.length) {\n this._activeAsset = this._assets[this._active];\n } else {\n this._lastAsset = true;\n }\n }\n\n public registerOnChange(fn: (assets: NiceAssets[]) => void): void {\n this.propagate = fn;\n }\n\n public registerOnTouched(fn: (assets: NiceAssets[]) => void): void {}\n\n public clickLeft(): void {\n if (this._active) {\n this.activeAsset = this._active - 1;\n }\n\n if (this._activeTranslationPosition < 0) {\n this.activeTranslationPosition = this._activeTranslationPosition + 1;\n }\n }\n\n public clickRight(): void {\n if (this._lastAsset) {\n return;\n }\n\n this.activeAsset = this._active + 1;\n if (this._shouldTransform) {\n this.activeTranslationPosition = this._activeTranslationPosition - 1;\n }\n }\n\n public clickAsset(index: number): void {\n let visibleAssets = (this.edit && this.showAddAssetContainer) ? (this.visiblePreviewAsset - 2) : (this.visiblePreviewAsset - 1);\n if (index < visibleAssets) {\n visibleAssets = index;\n }\n\n if (index >= 0) {\n this.activeTranslationPosition = (index - visibleAssets) * -1;\n }\n\n this.activeAsset = index;\n }\n\n public async onFilesChange(event: Event): Promise<void> {\n const files = (event.target as HTMLInputElement)?.files;\n await this.onFilesDrop(files);\n\n this.inputElement.nativeElement.value = \"\";\n }\n\n public async onFilesDrop(files: FileList): Promise<void> {\n if (!files?.length) {\n return;\n }\n\n let newAssetsAdded = false;\n for (let i = 0; i < files.length; i++) {\n const file = files.item(i);\n if (!this.accept.some((accept) => {\n if (accept.endsWith(\"*\")) {\n return file.type.startsWith(accept.replace(\"*\", \"\"));\n }\n\n return accept === file.type;\n })) {\n continue;\n }\n\n newAssetsAdded = true;\n this._assets.push({\n file,\n type: file.type.split(\"/\").shift() as \"image\" | \"video\",\n base64: await FileUtils.getDataUrl(file)\n });\n }\n\n if (newAssetsAdded) {\n this.clickAsset(this._assets.length - 1);\n this.propagate?.(this._assets);\n }\n }\n\n public clickRemove(): void {\n this.removedAsset.emit(this._assets[this._active]);\n this._assets.splice(this._active, 1);\n\n if (this._lastAsset) {\n this.clickAsset(this._assets.length - 1);\n } else {\n this.clickAsset(this._active);\n }\n\n this.propagate?.(this._assets);\n }\n\n public clickCustom(action: NiceAssetsCarouselActions): void {\n action.action(this._active);\n }\n\n public async startSyncVideo(): Promise<void> {\n (this._assetsElement.get(this._active).nativeElement.firstElementChild as HTMLVideoElement).pause();\n (this._assetsElement.get(this._active).nativeElement.firstElementChild as HTMLVideoElement).currentTime = 0;\n\n this._activeVideoElement.nativeElement.currentTime = 0;\n await this._activeVideoElement.nativeElement.play();\n await (this._assetsElement.get(this._active).nativeElement.firstElementChild as HTMLVideoElement).play();\n }\n}\n","<div class=\"carousel-container\" niceDropzone (filesDropped)=\"onFilesDrop($event)\">\n <div class=\"active-image\"\n matRipple\n [class.empty-state]=\"!_activeAsset\"\n (click)=\"edit && fileInput.click(); $event.stopPropagation()\"\n >\n <img\n *ngIf=\"_activeAsset?.type === 'image'\"\n (mouseover)=\"showOverlay=true\"\n [src]=\"_activeAsset.url ?? _activeAsset.base64\"\n draggable=\"false\"\n class=\"relative\"\n alt=\"active-image\"\n >\n <video #activeVideo *ngIf=\"_activeAsset?.type === 'video'\" draggable=\"false\" loop [src]=\"_activeAsset.url ?? _activeAsset.base64\"></video>\n\n <div class=\"empty-state-content\" *ngIf=\"!_activeAsset\">\n <mat-icon *ngIf=\"options.upload.matIcon\">{{ options.upload.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.upload.svgIcon\" [svgIcon]=\"options.upload.svgIcon\"></mat-icon>\n\n <div class=\"text\">\n {{ \"nice_ui_kit.assets_carousel.upload_here\" | translate }}\n </div>\n </div>\n\n <div *ngIf=\"_activeAsset && showOverlay && edit\" class=\"active-image-overlay\">\n <div\n (mouseout)=\"showOverlay=false\"\n class=\"flex flex-col justify-center items-center w-full h-full\"\n >\n <mat-icon *ngIf=\"options.upload.matIcon\">{{ options.upload.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.upload.svgIcon\" [svgIcon]=\"options.upload.svgIcon\"></mat-icon>\n </div>\n </div>\n\n <div *ngIf=\"edit\" class=\"active-buttons\">\n <button mat-icon-button (click)=\"fileInput.click(); $event.stopPropagation()\">\n <mat-icon *ngIf=\"options.actionButtons.addPhoto.matIcon\">{{ options.actionButtons.addPhoto.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.actionButtons.addPhoto.svgIcon\" [svgIcon]=\"options.actionButtons.addPhoto.svgIcon\"></mat-icon>\n </button>\n <button mat-icon-button [matMenuTriggerFor]=\"assetActions\" (click)=\"$event.stopPropagation()\" [disabled]=\"!_activeAsset\">\n <mat-icon *ngIf=\"options.actionButtons.moreOptions.matIcon\">{{ options.actionButtons.moreOptions.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.actionButtons.moreOptions.svgIcon\" [svgIcon]=\"options.actionButtons.moreOptions.svgIcon\"></mat-icon>\n </button>\n\n <mat-menu class=\"nice-asset-options-menu\" [xPosition]=\"'before'\" #assetActions=\"matMenu\">\n <button\n mat-menu-item\n *ngFor=\"let action of customActions\"\n (click)=\"clickCustom(action)\"\n >\n <mat-icon *ngIf=\"action.icon.matIcon\">{{ action.icon.matIcon }}</mat-icon>\n <mat-icon [svgIcon]=\"action.icon.svgIcon\" *ngIf=\"action.icon.svgIcon\"></mat-icon>\n <span>{{ action.name | translate }}</span>\n </button>\n <button mat-menu-item (click)=\"clickRemove()\">\n <mat-icon *ngIf=\"options.actionButtons.remove.matIcon\">{{ options.actionButtons.remove.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.actionButtons.remove.svgIcon\" [svgIcon]=\"options.actionButtons.remove.svgIcon\"></mat-icon>\n <span>{{ \"nice_ui_kit.assets_carousel.delete\" | translate }}</span>\n </button>\n </mat-menu>\n </div>\n </div>\n\n <div class=\"carousel\">\n <button *ngIf=\"showAddAssetContainer || _activeAsset\" class=\"action-button left-arrow\" mat-icon-button [disabled]=\"!_active\" (click)=\"clickLeft()\">\n <mat-icon *ngIf=\"options.leftArrow.matIcon\">{{ options.leftArrow.matIcon }}</mat-icon>\n <mat-icon class=\"arrows\" *ngIf=\"options.leftArrow.svgIcon\" [svgIcon]=\"options.leftArrow.svgIcon\"></mat-icon>\n </button>\n <div class=\"asset-list-container\">\n <div *ngIf=\"showAddAssetContainer && edit\" class=\"add-asset-container\">\n <div class=\"add-asset\" matRipple (click)=\"fileInput.click()\">\n <mat-icon *ngIf=\"options.addPhoto.matIcon\">{{ options.addPhoto.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.addPhoto.svgIcon\" [svgIcon]=\"options.addPhoto.svgIcon\"></mat-icon>\n </div>\n </div>\n\n <div class=\"asset-list\" [ngStyle]=\"listStyle\">\n <div #assets class=\"asset\" *ngFor=\"let asset of _assets; let i = index\" (click)=\"clickAsset(i)\" [ngClass]=\"color\" [class.active]=\"_active === i\">\n <img *ngIf=\"asset.type === 'image'\" draggable=\"false\" [src]=\"asset.url ?? asset.base64\" alt=\"add-image\">\n <video *ngIf=\"asset.type === 'video'\" draggable=\"false\" loop [src]=\"asset.url ?? asset.base64\"></video>\n </div>\n </div>\n </div>\n <button *ngIf=\"showAddAssetContainer || _activeAsset\" class=\"action-button right-arrow\" mat-icon-button [disabled]=\"_lastAsset\" (click)=\"clickRight()\">\n <mat-icon *ngIf=\"options.rightArrow.matIcon\">{{ options.rightArrow.matIcon }}</mat-icon>\n <mat-icon class=\"arrows\" *ngIf=\"options.rightArrow.svgIcon\" [svgIcon]=\"options.rightArrow.svgIcon\"></mat-icon>\n </button>\n </div>\n</div>\n\n<input #fileInput type=\"file\" hidden [accept]=\"accept\" (change)=\"onFilesChange($event)\" [multiple]=\"multipleUpload\">\n","import { NgModule } from \"@angular/core\";\nimport { NiceDropzoneDirective } from \"./dropzone.directive\";\n\n@NgModule({\n imports: [],\n declarations: [NiceDropzoneDirective],\n providers: [],\n exports: [NiceDropzoneDirective]\n})\nexport class NiceDropzoneModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatRippleModule } from \"@angular/material/core\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatMenuModule } from \"@angular/material/menu\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { NiceDropzoneModule } from \"../../directives/dropzone\";\n\nimport { NiceAssetsCarouselComponent, NiceAssetsCarouselOptions } from \"./assets-carousel.component\";\nimport { NICE_ASSETS_CAROUSEL_OPTIONS } from \"./assets-carousel.constant\";\n\n@NgModule({\n imports: [\n CommonModule,\n MatIconModule,\n MatButtonModule,\n MatMenuModule,\n MatRippleModule,\n NiceDropzoneModule,\n TranslateModule\n ],\n declarations: [NiceAssetsCarouselComponent],\n providers: [],\n exports: [NiceAssetsCarouselComponent]\n})\nexport class NiceAssetsCarouselModule {\n public static forRoot(options?: NiceAssetsCarouselOptions): ModuleWithProviders<NiceAssetsCarouselModule> {\n if (!options) {\n options = {\n actionButtons: {}\n };\n }\n if (!options.actionButtons.moreOptions) {\n options.actionButtons.moreOptions = { matIcon: \"more_vert\" };\n }\n if (!options.actionButtons.addPhoto) {\n options.actionButtons.addPhoto = { matIcon: \"photo_camera\" };\n }\n if (!options.actionButtons.remove) {\n options.actionButtons.remove = { matIcon: \"delete\" };\n }\n if (!options.addPhoto) {\n options.addPhoto = { matIcon: \"photo_camera\" };\n }\n if (!options.leftArrow) {\n options.leftArrow = { matIcon: \"chevron_left\" };\n }\n if (!options.rightArrow) {\n options.rightArrow = { matIcon: \"chevron_right\" };\n }\n if (!options.upload) {\n options.upload = { matIcon: \"file_upload\" };\n }\n\n return {\n ngModule: NiceAssetsCarouselModule,\n providers: [\n {\n provide: NICE_ASSETS_CAROUSEL_OPTIONS,\n useValue: options\n }\n ]\n };\n }\n}\n","export interface NiceAsyncTypeaheadSearchResult<T> {\n items: T[];\n nextPage: number | null;\n}\n\nexport abstract class NiceAsyncTypeaheadProvider<T, ID = number, Options = any> {\n public abstract resource: string;\n public abstract search(searchQuery: string, page: number, options?: Options): Promise<NiceAsyncTypeaheadSearchResult<T>>;\n public abstract getById(id: ID, options?: Options): Promise<T>;\n\n public format(item: T): string {\n return \"\";\n }\n}\n","import { Directive, EventEmitter, Input, OnDestroy, Output } from \"@angular/core\";\nimport { MatAutocomplete } from \"@angular/material/autocomplete\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil, tap } from \"rxjs/operators\";\n\nexport interface IAutoCompleteScrollEvent {\n autoComplete: MatAutocomplete;\n scrollEvent: Event;\n}\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: \"mat-autocomplete[optionsScroll]\"\n})\nexport class OptionsScrollDirective implements OnDestroy {\n private _onDestroy$ = new Subject();\n\n @Input()\n public thresholdPercent = 0.99;\n\n @Output()\n public optionsScroll = new EventEmitter<IAutoCompleteScrollEvent>();\n\n constructor(public autoComplete: MatAutocomplete) {\n this.autoComplete.opened\n .pipe(\n tap(() => {\n // Note: When autocomplete raises opened, panel is not yet created (by Overlay)\n // Note: The panel will be available on next tick\n // Note: The panel wil NOT open if there are no options to display\n setTimeout(() => {\n // Note: remove listner just for safety, in case the close event is skipped.\n this.removeScrollEventListener();\n if (this.autoComplete && this.autoComplete.panel) {\n this.autoComplete.panel.nativeElement.addEventListener(\"scroll\", this.onScroll.bind(this));\n }\n });\n }),\n takeUntil(this._onDestroy$)\n )\n .subscribe();\n\n this.autoComplete.closed\n .pipe(\n tap(() => this.removeScrollEventListener()),\n takeUntil(this._onDestroy$)\n )\n .subscribe();\n }\n\n public ngOnDestroy() {\n this._onDestroy$.next(null);\n this._onDestroy$.complete();\n\n this.removeScrollEventListener();\n }\n\n public onScroll(event: Event) {\n if (this.thresholdPercent === undefined) {\n this.optionsScroll.next({ autoComplete: this.autoComplete, scrollEvent: event });\n } else {\n const target = event.target as HTMLElement;\n const threshold = (this.thresholdPercent * 100 * target.scrollHeight) / 100;\n const current = target.scrollTop + target.clientHeight;\n\n if (current > threshold) {\n this.optionsScroll.next({ autoComplete: this.autoComplete, scrollEvent: event });\n }\n }\n }\n\n private removeScrollEventListener() {\n if (this.autoComplete && this.autoComplete.panel) {\n this.autoComplete.panel.nativeElement.removeEventListener(\"scroll\", this.onScroll);\n }\n }\n}\n","import { FocusMonitor } from \"@angular/cdk/a11y\";\nimport { coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input, NgZone,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { ControlValueAccessor, FormControl, NgControl, Validators } from \"@angular/forms\";\nimport { MatAutocompleteActivatedEvent, MatAutocompleteSelectedEvent } from \"@angular/material/autocomplete\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatFormFieldControl } from \"@angular/material/form-field\";\nimport { Subject, Subscription } from \"rxjs\";\nimport * as uuid from \"uuid\";\nimport { isNullOrUndefined } from \"../../utils\";\n\nexport class NiceTypeaheadNewValue {\n constructor(public $new: string) {}\n}\n\n@Component({\n selector: \"nice-typeahead\",\n templateUrl: \"typeahead.template.html\",\n styleUrls: [\"typeahead.style.scss\"],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: MatFormFieldControl,\n useExisting: NiceTypeaheadComponent\n }\n ]\n})\nexport class NiceTypeaheadComponent implements OnInit, OnDestroy, ControlValueAccessor, MatFormFieldControl<string> {\n @Input()\n public set items(items: any[] | null | undefined) {\n this._items = items ?? [];\n this.values = items ?? [];\n this.setLoading(false);\n this.setLoadingPage(false);\n this.updateSearchInput();\n this.checkIfValueStillExist();\n }\n\n @Input()\n public set labelFormatFn(labelFormatFn: (item: any) => string) {\n this._labelFormatFn = labelFormatFn;\n this.updateSearchInput();\n }\n\n @Input()\n public set required(req) {\n this._required = coerceBooleanProperty(req);\n this.stateChanges.next();\n }\n\n public get required(): boolean {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n\n @Input()\n public get disabled(): boolean {\n return this._disabled;\n }\n\n public set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n if (this._disabled) {\n this.searchControl.disable({ emitEvent: false });\n } else {\n this.searchControl.enable({ emitEvent: false });\n }\n this.stateChanges.next();\n }\n\n @Input()\n public set placeholder(placeholder: string) {\n this._placeholder = placeholder;\n this.stateChanges.next();\n }\n\n public get placeholder(): string {\n return this._placeholder;\n }\n\n @Input()\n public set emptyPlaceholder(emptyPlaceholder: string) {\n this._emptyPlaceholder = emptyPlaceholder;\n this.stateChanges.next();\n }\n\n public get emptyPlaceholder(): string {\n return this._emptyPlaceholder;\n }\n\n public set value(value: any) {\n if (value === this._value) {\n return;\n }\n this._value = value;\n this.propagate(this._value);\n }\n\n public get value(): any {\n return this._value;\n }\n\n public get empty(): boolean {\n return (\n (!this.searchControl.value || !this.searchControl.value.length) &&\n (!this._value || (typeof this._value === \"string\" && !this._value.length))\n );\n }\n\n public get errorState(): boolean {\n return this.ngControl ? this.ngControl.touched && this.ngControl.invalid : false;\n }\n\n @HostBinding(\"class.floating\")\n public get shouldLabelFloat(): boolean {\n return this.open || !this.empty;\n }\n\n constructor(\n @Optional() @Self() public ngControl: NgControl,\n private fm: FocusMonitor,\n private zone: NgZone,\n public elRef: ElementRef<HTMLElement>\n ) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n fm.monitor(elRef.nativeElement, true).subscribe(origin => {\n if (this.ignoreNextFocus) {\n this.ignoreNextFocus = false;\n return;\n }\n\n this.focused = !!origin;\n this.stateChanges.next();\n if (this.focused && (!this._items || !this._items.length) && !this.loading) {\n this.searchControl.patchValue(\"\");\n }\n\n if (!this.focused && !this._value) {\n if (this.activeOption && this.activeOption.viewValue?.toLowerCase() === this.searchControl.value?.toLowerCase()) {\n this.onOptionSelected({\n option: this.activeOption,\n source: null\n });\n } else {\n if (!this.open) {\n this.onRemove();\n }\n }\n }\n });\n }\n\n private _items: any[];\n private _labelFormatFn: (item: unknown) => string;\n private _page = 0;\n\n @Input()\n public allowNotFoundItems = false;\n\n @Input()\n public panelClass: string | string[] = [];\n\n @Input()\n public bindValue: string;\n @Input()\n public bindLabel: string;\n\n /** @deprecated: Use NiceRemoteTypeahead instead */\n @Input()\n public typeahead: Subject<string>;\n /** @deprecated: Use NiceRemoteTypeahead instead */\n @Input()\n public page$: Subject<number>;\n\n @Input()\n public loading: boolean;\n @Input()\n public loadingPage: boolean;\n\n @Input()\n public searchFn: (search: string, option: any) => boolean;\n\n // tslint:disable-next-line:no-output-native\n @Output()\n public change = new EventEmitter();\n\n @ViewChild(\"searchInput\", { static: true })\n public input: ElementRef<HTMLInputElement>;\n\n @ViewChildren(MatOption)\n public options: MatOption[];\n\n public search$ = new Subject<string>();\n public searchControl = new FormControl(null);\n public values: unknown[] = [];\n public valueChangesSub$: Subscription;\n public searchSub$: Subscription;\n public open = false;\n public panelWidth = 0;\n public activeOption: MatOption;\n\n private updatingItem = false;\n private waitForItems = false;\n private ignoreNextFocus = false;\n private observer: ResizeObserver;\n\n /** MatFormField */\n private _required: boolean;\n private _disabled = false;\n private _placeholder: string;\n private _value: any;\n private _emptyPlaceholder: string;\n\n public stateChanges = new Subject<void>();\n public controlType = \"typeahead\";\n public focused = false;\n\n @HostBinding()\n public id: string = uuid.v4();\n @HostBinding(\"attr.aria-describedby\")\n public describedBy = \"\";\n\n @Input()\n public optionTemplate: TemplateRef<HTMLElement>;\n\n public propagate: (value: string) => void = () => {};\n\n public ngOnInit(): void {\n if (this.ngControl) {\n this.ngControl.statusChanges.subscribe((status) => {\n this.disabled = status === \"DISABLED\";\n });\n }\n\n this.searchSub$ = this.search$.subscribe(text => {\n if (!text || typeof text !== \"string\") {\n this.values = this._filter(\"\");\n return;\n }\n this.values = this._filter(text);\n });\n if (this.searchControl) {\n this.valueChangesSub$ = this.searchControl.valueChanges.subscribe(text => {\n if (this.updatingItem) {\n return;\n }\n\n if (this._value) {\n if (text === this.formatLabel(this.getValueItem())) {\n return;\n }\n\n this.value = null;\n }\n\n if (this.waitForItems) {\n this.waitForItems = false;\n return;\n }\n\n if (typeof text !== \"string\") {\n return;\n }\n\n if (this.typeahead) {\n this.setLoading(true);\n this._page = 0;\n this.typeahead.next(text);\n } else {\n this.search$.next(text);\n }\n });\n }\n\n this.observer = new ResizeObserver(entries => {\n this.zone.run(() => {\n this.panelWidth = entries[0].contentRect.width;\n });\n });\n\n this.observer.observe(this.elRef.nativeElement);\n }\n\n public ngOnDestroy(): void {\n this.search$?.complete();\n this.searchSub$?.unsubscribe();\n this.valueChangesSub$?.unsubscribe();\n this.stateChanges?.complete();\n this.fm.stopMonitoring(this.elRef.nativeElement);\n this.observer?.unobserve(this.elRef.nativeElement);\n }\n\n public onContainerClick(event: MouseEvent): void {}\n\n public setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(\" \");\n }\n\n public registerOnChange(propagate: (value: string) => void): void {\n this.propagate = propagate;\n }\n\n public registerOnTouched(fn: any): void {\n // NO-OP\n }\n\n public writeValue(value: string): void {\n try {\n this.updatingItem = true;\n // If both are equal (considering null === undefined), consider that the value has not changed.\n if (this._value === value || (isNullOrUndefined(this._value) && isNullOrUndefined(value))) {\n return;\n }\n\n if (!value && this._value !== value) {\n this.onRemove(null);\n return;\n }\n this.value = value;\n if (!this._items) {\n this.waitForItems = true;\n return;\n }\n\n this.updateSearchInput();\n } finally {\n this.updatingItem = false;\n }\n }\n\n public onOptionActivated(event: MatAutocompleteActivatedEvent): void {\n this.activeOption = event.option;\n }\n\n public onOptionSelected(event: MatAutocompleteSelectedEvent): void {\n if (event.option.id === \"new-value-option\") {\n this.value = new NiceTypeaheadNewValue(this.searchControl.value);\n } else {\n this.updateLabel(event.option.value);\n this.value = this.bindValue ? this.getObjectItem(this.bindValue, event.option.value) : event.option.value;\n }\n this.change.emit(event.option.value);\n }\n\n public updateState(open: boolean): void {\n this.open = open;\n if (!this.open && this.ngControl) {\n this.ngControl.control.markAsTouched();\n }\n\n if (!this.open) {\n this.activeOption = null;\n if (!this._value) {\n this.onRemove();\n }\n }\n }\n\n public onRemove(event?: Event): void {\n if (event) {\n event.stopPropagation();\n }\n if (this.disabled) {\n return;\n }\n this.ignoreNextFocus = true;\n this.focused = false;\n this.value = null;\n this.searchControl.patchValue(null);\n if (this.ngControl?.control) {\n this.ngControl.control.markAsTouched();\n }\n this.stateChanges.next();\n this.change.emit();\n\n if (this.typeahead) {\n this.setLoading(true);\n this._page = 0;\n this.typeahead.next(\"\");\n } else {\n this.search$.next(\"\");\n }\n }\n\n public formatLabel(item: any): string {\n if (this._labelFormatFn) {\n return this._labelFormatFn(item);\n }\n\n if (this.bindLabel) {\n return this.getObjectItem(this.bindLabel, item);\n }\n\n if (typeof item !== \"string\") {\n return \"\";\n }\n\n return item;\n }\n\n private _filter(text: string): unknown[] {\n if (this._items) {\n const searchFn = this.searchFn || this.defaultSearch.bind(this);\n return this._items.filter(x => searchFn(text, x));\n }\n return [];\n }\n\n private defaultSearch(search: string, option: unknown): boolean {\n if (typeof option === \"string\") {\n return this.filterString(search, option);\n }\n\n if (typeof option !== \"object\") {\n return false;\n }\n\n if (this.bindLabel) {\n const item = this.getObjectItem(this.bindLabel, option);\n if (typeof item === \"string\") {\n return this.filterString(search, item);\n }\n } else if (this.formatLabel) {\n const item = this.formatLabel(option);\n if (typeof item === \"string\") {\n return this.filterString(search, item);\n }\n }\n\n return false;\n }\n\n private updateSearchInput(): void {\n if ((!this.waitForItems && !this._items) || !this._items) {\n return;\n }\n\n if (this._value instanceof NiceTypeaheadNewValue) {\n this.updateLabel(this._value.$new);\n return;\n }\n\n if (typeof this._value === \"object\") {\n this.updateLabel(this._value);\n return;\n }\n\n const search = this._items.find(\n v => (this.bindValue && typeof v === \"object\" ? this.getObjectItem(this.bindValue, v) : v) === this._value\n );\n if (search) {\n this.updateLabel(search);\n }\n }\n\n private filterString(text: string, value: string): boolean {\n return value.toLowerCase().includes(text.toLowerCase());\n }\n\n private updateLabel(item: unknown | string): void {\n if (!item) {\n return;\n }\n\n const label = this.formatLabel(item);\n\n if (label && label !== this.searchControl.value) {\n this.searchControl.patchValue(label, { emitEvent: false });\n }\n }\n\n public onEndScroll(): void {\n if (this.page$ && !this.loadingPage) {\n this.setLoadingPage(true);\n this._page++;\n this.page$.next(this._page);\n }\n }\n\n private getObjectItem(key: string, obj: object): any {\n const keys = key.split(\".\");\n let item = obj;\n for (const k of keys) {\n if (!item) {\n return item;\n }\n\n if (!item.hasOwnProperty(k)) {\n return item;\n }\n item = item[k];\n }\n\n return item;\n }\n\n private getValueItem(): any {\n if (!this.bindValue) {\n return this._value;\n }\n\n const keys = this.bindValue.split(\".\");\n return this._items.find(x => {\n let item = x;\n for (const k of keys) {\n if (!item) {\n return item;\n }\n\n if (!item.hasOwnProperty(k)) {\n return item;\n }\n item = item[k];\n }\n\n return item === this._value;\n });\n }\n\n private setLoading(loading: boolean): void {\n if (this.loading === undefined) {\n this.loading = loading;\n }\n }\n\n private setLoadingPage(loading: boolean): void {\n if (this.loadingPage === undefined) {\n this.loadingPage = loading;\n }\n }\n\n private checkIfValueStillExist(): void {\n if (this._value instanceof NiceTypeaheadNewValue) {\n return;\n }\n\n const item = this._items.find(\n v => (this.bindValue && typeof v === \"object\" ? this.getObjectItem(this.bindValue, v) : v) === this._value\n );\n if (item) {\n return;\n }\n\n if (this._value !== null && this._value !== undefined) {\n this.onRemove(null);\n }\n }\n}\n","<div class=\"flex\" *ngIf=\"!disabled; else disable\">\n <input\n #searchInput\n matInput\n class=\"flex-auto\"\n type=\"text\"\n name=\"mat-autocomplete\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [formControl]=\"searchControl\"\n [matAutocomplete]=\"auto\"\n [required]=\"required\"\n />\n <mat-icon *ngIf=\"value && !loading\" matSuffix class=\"close-button secondary-text\" (click)=\"onRemove($event)\">\n close\n </mat-icon>\n\n <mat-spinner class=\"self-center\" [diameter]=\"16\" *ngIf=\"loading\"></mat-spinner>\n</div>\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n [panelWidth]=\"panelWidth\"\n [class]=\"panelClass\"\n (optionActivated)=\"onOptionActivated($event)\"\n (optionSelected)=\"onOptionSelected($event)\"\n (closed)=\"updateState(false)\"\n (opened)=\"updateState(true)\"\n (optionsScroll)=\"onEndScroll()\"\n autoActiveFirstOption\n>\n <mat-progress-bar *ngIf=\"open && loading\" mode=\"indeterminate\" color=\"primary\"></mat-progress-bar>\n <mat-option *ngFor=\"let option of values\" [value]=\"option\">\n <ng-container\n *ngIf=\"optionTemplate; else format\"\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: option }\">\n </ng-container>\n <ng-template #format>\n {{ formatLabel(option) }}\n </ng-template>\n </mat-option>\n <mat-option *ngIf=\"!values?.length && !allowNotFoundItems\" disabled>\n <ng-container *ngIf=\"emptyPlaceholder; else defaultEmptyPlaceholder\">\n {{ emptyPlaceholder }}\n </ng-container>\n <ng-template #defaultEmptyPlaceholder>\n {{ \"components.typeahead.no_item_found\" | translate }}\n </ng-template>\n </mat-option>\n <mat-option *ngIf=\"!values?.length && allowNotFoundItems\" id=\"new-value-option\" [value]=\"searchControl.value\">\n <span class=\"italic\">{{ searchControl.value }}</span>\n </mat-option>\n <mat-progress-bar *ngIf=\"open && loadingPage\" mode=\"indeterminate\" color=\"primary\"></mat-progress-bar>\n</mat-autocomplete>\n\n<ng-template #disable>\n <input\n matInput\n class=\"disabled-input\"\n type=\"text\"\n [disabled]=\"true\"\n [placeholder]=\"placeholder\"\n [formControl]=\"searchControl\"\n [required]=\"required\"\n />\n</ng-template>\n","import { NgModule } from \"@angular/core\";\nimport { OptionsScrollDirective } from \"./options-scroll.directive\";\n\n@NgModule({\n declarations: [OptionsScrollDirective],\n exports: [OptionsScrollDirective]\n})\nexport class OptionScrollModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatAutocompleteModule } from \"@angular/material/autocomplete\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatInputModule } from \"@angular/material/input\";\nimport { MatProgressBarModule } from \"@angular/material/progress-bar\";\nimport { MatProgressSpinnerModule } from \"@angular/material/progress-spinner\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { OptionScrollModule } from \"./directives/options-scroll.module\";\n\nimport { NiceTypeaheadComponent } from \"./typeahead.component\";\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n OptionScrollModule,\n MatAutocompleteModule,\n FormsModule,\n MatInputModule,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n MatIconModule,\n MatButtonModule,\n TranslateModule\n ],\n declarations: [NiceTypeaheadComponent],\n exports: [NiceTypeaheadComponent]\n})\nexport class NiceTypeaheadModule {}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const NICE_ASYNC_TYPEAHEAD_PROVIDER = new InjectionToken(\"nice_async_typeahead_provider\");\n","import { Inject, Injectable, Optional } from \"@angular/core\";\nimport { BehaviorSubject, firstValueFrom, from, isObservable, mergeMap, Observable } from \"rxjs\";\nimport { map } from \"rxjs/operators\";\nimport { NICE_ASYNC_TYPEAHEAD_PROVIDER } from \"../async-typeahead.constant\";\nimport { NiceAsyncTypeaheadProvider } from \"./async-typeahead.provider\";\n\nexport class AsyncTypeaheadState {\n items: any[];\n active: any;\n loading: boolean;\n loadingPage: boolean;\n initialized: boolean;\n page: number;\n isLastPage: boolean;\n searchQuery?: string;\n excludedIds: any[];\n}\n\n@Injectable()\nexport class NiceAsyncTypeaheadService {\n private state$: BehaviorSubject<AsyncTypeaheadState> = new BehaviorSubject({\n items: [],\n active: null,\n loading: false,\n loadingPage: false,\n initialized: false,\n searchQuery: null,\n page: 0,\n isLastPage: false,\n excludedIds: []\n });\n\n public loading$ = this.state$.pipe(map(x => x.loading));\n public loadingPage$ = this.state$.pipe(map(x => x.loadingPage));\n public active$ = this.state$.pipe(map(x => x.active));\n public items$ = this.state$.pipe(map(x => x.items));\n public filteredItems$ = this.state$.pipe(map(x => x.items.filter(item => !x.excludedIds.includes(item.id))));\n\n constructor(@Optional() @Inject(NICE_ASYNC_TYPEAHEAD_PROVIDER) private readonly apis: NiceAsyncTypeaheadProvider<any>[]) {\n if (!this.apis) {\n this.apis = [];\n }\n }\n\n public async initialize(resource: string, options?: any): Promise<void> {\n const { initialized } = this.state$.getValue();\n if (initialized) {\n return;\n }\n\n return this.search(resource, \"\", options);\n }\n\n public async search(resource: string, searchQuery: string, options?: any): Promise<void> {\n const { active, initialized } = this.state$.getValue();\n\n if (active && !initialized) {\n this.state$.next({\n ...this.state$.value,\n initialized: true\n });\n return;\n }\n\n const api = this.apis.find(x => x.resource === resource);\n if (!api) {\n return;\n }\n\n try {\n this.state$.next({\n ...this.state$.value,\n loading: true,\n initialized: true,\n page: 0,\n isLastPage: false,\n searchQuery\n });\n\n const result = await api.search(searchQuery, 0, options);\n this.state$.next({\n ...this.state$.value,\n items: result.items,\n page: result.nextPage ? result.nextPage : this.state$.value.page,\n isLastPage: !result.nextPage\n });\n } catch {} finally {\n this.state$.next({\n ...this.state$.value,\n loading: false\n });\n }\n }\n\n public async loadMore(resource: string, options?: any): Promise<void> {\n const { loadingPage, isLastPage } = this.state$.getValue();\n if (loadingPage || isLastPage) {\n return;\n }\n\n const api = this.apis.find(x => x.resource === resource);\n if (!api) {\n return;\n }\n\n try {\n this.state$.next({\n ...this.state$.value,\n loadingPage: true\n });\n\n const { searchQuery, page, items } = this.state$.getValue();\n const result = await api.search(searchQuery, page, options);\n this.state$.next({\n ...this.state$.value,\n items: [...items, ...result.items],\n page: result.nextPage ? result.nextPage : this.state$.value.page,\n isLastPage: !result.nextPage\n });\n } catch {} finally {\n this.state$.next({\n ...this.state$.value,\n loadingPage: false\n });\n }\n }\n\n public getActive(): any {\n return this.state$.value.active;\n }\n\n public getInitialized(): boolean {\n return this.state$.value.initialized;\n }\n\n public setActive(entity: any | undefined): void {\n this.state$.next({\n ...this.state$.value,\n active: entity ?? null\n });\n }\n\n public async setActiveId(resource: string, id: any, options?: any): Promise<void> {\n if (!id) {\n return;\n }\n\n const api = this.apis.find(x => x.resource === resource);\n if (!api) {\n return;\n }\n\n try {\n this.state$.next({\n ...this.state$.value,\n loading: true\n });\n\n const entity = await api.getById(id, options);\n if (!entity) {\n return;\n }\n\n this.state$.next({\n ...this.state$.value,\n items: [entity],\n active: entity,\n page: 0,\n isLastPage: false\n });\n } catch {} finally {\n this.state$.next({\n ...this.state$.value,\n loading: false\n });\n }\n }\n\n public reloadActive(resource: string, options?: any): Promise<void> {\n return this.setActiveId(resource, this.state$.value.active?.id, options);\n }\n\n public reloadFilteredItems(): void {\n // TODO: Use a better way to trigger the items$ observable\n this.state$.next({\n ...this.state$.value\n });\n }\n\n public setFilterFn(filterFn: (value: any) => boolean | Promise<boolean> | Observable<boolean>): void {\n this.filteredItems$ = this.items$.pipe(mergeMap(items => {\n return from(Promise.all(items.map(async item => {\n const result = filterFn(item);\n\n const unwrappedResult = isObservable(result) ? await firstValueFrom(result) : await result;\n\n return [item, unwrappedResult];\n })));\n }\n ),\n map(items => items.filter(([item, keep]) => keep).map(([item, keep]) => item))\n );\n }\n\n public format(resource: string, item: string): string {\n const api = this.apis.find(x => x.resource === resource);\n if (!api) {\n return \"\";\n }\n\n return api.format(item);\n }\n}\n","import { BooleanInput, coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport {\n ChangeDetectorRef,\n Component,\n DoCheck,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional, Output,\n Self,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { ControlValueAccessor, FormControl, FormGroupDirective, NgControl, NgForm, Validators } from \"@angular/forms\";\nimport { MatAutocompleteActivatedEvent, MatAutocompleteSelectedEvent } from \"@angular/material/autocomplete\";\nimport { ErrorStateMatcher, MatOption, mixinErrorState } from \"@angular/material/core\";\nimport { MatFormFieldControl } from \"@angular/material/form-field\";\nimport { debounceTime, distinctUntilChanged, firstValueFrom, Observable, Subject, Subscription } from \"rxjs\";\nimport * as uuid from \"uuid\";\nimport { isNullOrUndefined } from \"../../utils\";\nimport { NiceTypeaheadNewValue } from \"../typeahead\";\nimport { NiceAsyncTypeaheadService } from \"./providers/async-typeahead.service\";\n\n// Boilerplate for applying mixins to ).\n/** @docs-private */\nconst _BaseAsyncTypeaheadComponent = mixinErrorState(\n class {\n /**\n * Emits whenever the component state changes and should cause the parent\n * form field to update. Implemented as part of `MatFormFieldControl`.\n * @docs-private\n */\n readonly stateChanges = new Subject<void>();\n\n constructor(\n public _defaultErrorStateMatcher: ErrorStateMatcher,\n public _parentForm: NgForm,\n public _parentFormGroup: FormGroupDirective,\n /**\n * Form control bound to the component.\n * Implemented as part of `MatFormFieldControl`.\n * @docs-private\n */\n public ngControl: NgControl\n ) {}\n }\n);\n\n@Component({\n selector: \"nice-async-typeahead\",\n templateUrl: \"async-typeahead.template.html\",\n styleUrls: [\"async-typeahead.style.scss\"],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: MatFormFieldControl,\n useExisting: NiceAsyncTypeaheadComponent\n },\n NiceAsyncTypeaheadService\n ]\n})\n// tslint:disable-next-line:max-line-length\nexport class NiceAsyncTypeaheadComponent extends _BaseAsyncTypeaheadComponent implements OnInit, OnDestroy, OnChanges, ControlValueAccessor, MatFormFieldControl<any>, DoCheck {\n public stateChanges = new Subject<void>();\n public controlType = \"remote-typeahead\";\n public focused = false;\n\n public searchControl = new FormControl(null);\n public valueChangesSub$: Subscription;\n public open = false;\n public panelWidth = 0;\n public activeOption: MatOption;\n\n public active$ = this.service.active$;\n\n @ViewChild(\"searchInput\")\n public input: ElementRef<HTMLInputElement>;\n\n @ViewChildren(MatOption)\n public options: MatOption[];\n\n @Input()\n public resource: string;\n\n @Input()\n public searchOptions: any;\n\n @Input()\n public preloadResource = false;\n\n @Input()\n public allowNotFoundItems = false;\n\n @Input()\n public panelClass: string | string[] = [];\n\n @Input()\n public bindValue = \"id\";\n\n @Input()\n public bindLabel: string;\n\n @Input()\n public placeholder: string;\n\n @Input()\n public emptyPlaceholder: string;\n\n @Input()\n public optionTemplate: TemplateRef<HTMLElement>;\n\n @Input()\n public filterFn: (value: any) => boolean | Promise<boolean> | Observable<boolean>;\n\n @Output()\n public selected = new EventEmitter<any>();\n\n @Input()\n public set labelFormatFn(labelFormatFn: (item: any) => string) {\n this._labelFormatFn = labelFormatFn;\n }\n private _labelFormatFn: (item: any) => string;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n public set disabled(value: BooleanInput) {\n this._disabled = coerceBooleanProperty(value);\n\n if (this._disabled) {\n this.searchControl.disable({ emitEvent: false });\n } else {\n this.searchControl.enable({ emitEvent: false });\n }\n\n // Browsers may not fire the blur event if the input is disabled too quickly.\n // Reset from here to ensure that the element doesn't become stuck.\n if (this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n\n this.changeDetectorRef.detectChanges();\n }\n\n public get disabled(): boolean {\n if (this.ngControl && this.ngControl.disabled !== null) {\n return this.ngControl.disabled;\n }\n return this._disabled;\n }\n protected _disabled = false;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n public set value(value: any) {\n if (value !== this._value) {\n this._value = value;\n this.propagate(value);\n this.stateChanges.next();\n this.selected.emit(value);\n }\n }\n public get value(): string {\n return this._value;\n }\n private _value: any;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n public set required(value: BooleanInput) {\n this._required = coerceBooleanProperty(value);\n }\n public get required(): boolean {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n protected _required: boolean | undefined;\n\n @HostBinding(\"class.floating\")\n public get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n\n @HostBinding()\n public id: string = uuid.v4();\n\n @HostBinding(\"attr.aria-describedby\")\n public describedBy = \"\";\n\n public get empty(): boolean {\n return (\n (!this.searchControl.value || !this.searchControl.value.length) &&\n (!this._value || (typeof this._value === \"string\" && !this._value.length))\n );\n }\n\n public get initialized(): boolean {\n return this.service.getInitialized();\n }\n\n public propagate: (value: string) => void = () => {};\n\n constructor(\n @Optional() @Self() ngControl: NgControl,\n @Optional() parentForm: NgForm,\n @Optional() parentFormGroup: FormGroupDirective,\n defaultErrorStateMatcher: ErrorStateMatcher,\n private ngZone: NgZone,\n private changeDetectorRef: ChangeDetectorRef,\n public service: NiceAsyncTypeaheadService,\n ) {\n super(defaultErrorStateMatcher, parentForm, parentFormGroup, ngControl);\n\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n public ngOnInit(): void {\n if (this.ngControl) {\n if (this.ngControl.disabled) {\n this.searchControl.disable({ emitEvent: false });\n }\n\n this.ngControl.statusChanges.subscribe((status) => {\n this.disabled = status === \"DISABLED\";\n if (this._disabled) {\n this.searchControl.disable({ emitEvent: false });\n } else {\n this.searchControl.enable({ emitEvent: false });\n }\n });\n }\n\n if (this.filterFn) {\n this.service.setFilterFn(this.filterFn);\n }\n\n if (this.searchControl) {\n this.valueChangesSub$ = this.searchControl.valueChanges.pipe(debounceTime(500), distinctUntilChanged()).subscribe(text => {\n if (typeof text !== \"string\") {\n return;\n }\n\n this.service.search(this.resource, text, this.searchOptions);\n });\n }\n\n if (this.preloadResource) {\n this.service.search(this.resource, \"\", this.searchOptions);\n }\n }\n\n public ngOnDestroy(): void {\n this.valueChangesSub$.unsubscribe();\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n if (\"searchOptions\" in changes) {\n const change = changes.searchOptions;\n if (!change.isFirstChange() && change.currentValue !== change.previousValue) {\n this.service.search(this.resource, \"\", change.currentValue).then(() => this.checkIfValueStillExist());\n }\n }\n\n if (\"filterFn\" in changes) {\n const change = changes.filterFn;\n if (!change.isFirstChange() && change.currentValue !== change.previousValue) {\n this.service.setFilterFn(change.currentValue);\n }\n }\n\n this.stateChanges.next();\n }\n\n public ngDoCheck(): void {\n if (this.ngControl) {\n this.updateErrorState();\n }\n }\n\n public async writeValue(value: any): Promise<void> {\n if (this._value === value || (isNullOrUndefined(this._value) && isNullOrUndefined(value))) {\n return;\n }\n\n if (!value && this._value !== value) {\n this.onRemove(null);\n return;\n }\n\n if (value instanceof NiceTypeaheadNewValue) {\n this.updateSearchInput();\n return;\n } else {\n await this.service.setActiveId(this.resource, value, this.searchOptions).then(() => this.updateSearchInput());\n }\n\n this.value = value;\n }\n\n public registerOnChange(propagate: (value: string) => void): void {\n this.propagate = propagate;\n }\n\n public registerOnTouched(fn: any): void {\n // NO-OP\n }\n\n public onContainerClick(event: MouseEvent): void {\n this.stateChanges.next();\n }\n\n public setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(\" \");\n }\n\n public getActive<T = any>(): T {\n return this.service.getActive();\n }\n\n public onOptionActivated(event: MatAutocompleteActivatedEvent): void {\n this.activeOption = event.option;\n }\n\n public onOptionSelected(event: MatAutocompleteSelectedEvent): void {\n if (event.option.id === \"new-value-option\") {\n this.value = new NiceTypeaheadNewValue(this.searchControl.value);\n } else {\n this.updateLabel(event.option.value);\n this.service.setActive(event.option.value);\n this.value = this.bindValue ? this.getObjectItem(this.bindValue, event.option.value) : event.option.value;\n }\n }\n\n public updateState(open: boolean): void {\n this.open = open;\n\n if (!this.open) {\n this.ngZone.run(() => {\n this.focusChanged(false);\n this.changeDetectorRef.markForCheck();\n });\n }\n\n if (this.open && !this.initialized) {\n this.service.initialize(this.resource, this.searchOptions);\n }\n\n if (!this.open && this.ngControl) {\n this.ngControl.control.markAsTouched();\n }\n\n if (!this.open) {\n this.activeOption = null;\n if (!this._value && this.searchControl.value) {\n this.onRemove();\n }\n }\n }\n\n public onRemove(event?: Event, reload = true): void {\n if (event) {\n // event.stopPropagation();\n }\n if (this.disabled) {\n return;\n }\n this.service.setActive(null);\n this.value = null;\n this.searchControl.patchValue(null);\n if (this.ngControl?.control) {\n this.ngControl.control.markAsTouched();\n }\n this.stateChanges.next();\n\n if (reload) {\n this.service.search(this.resource, \"\", this.searchOptions);\n }\n }\n\n public formatLabel(item: any): string {\n if (this._labelFormatFn) {\n return this._labelFormatFn(item);\n }\n\n if (this.bindLabel) {\n return this.getObjectItem(this.bindLabel, item);\n }\n\n if (typeof item !== \"string\") {\n return this.service.format(this.resource, item);\n }\n\n return item;\n }\n\n public onEndScroll(): void {\n this.service.loadMore(this.resource, this.searchOptions);\n }\n\n public focusChanged(isFocused: boolean) {\n if (isFocused !== this.focused) {\n this.focused = isFocused;\n this.stateChanges.next();\n\n if (isFocused && this.filterFn) {\n this.service.reloadFilteredItems();\n }\n }\n }\n\n public async reloadActive(): Promise<void> {\n await this.service?.reloadActive(this.resource, this.searchOptions);\n const active = this.service?.getActive();\n this.updateLabel(active);\n }\n\n private updateLabel(item: unknown | string): void {\n if (!item) {\n return;\n }\n\n const label = this.formatLabel(item);\n\n if (label && label !== this.searchControl.value) {\n this.searchControl.patchValue(label, { emitEvent: false });\n }\n }\n\n private getObjectItem(key: string, obj: object): any {\n const keys = key.split(\".\");\n let item = obj;\n for (const k of keys) {\n if (!item) {\n return item;\n }\n\n if (!item.hasOwnProperty(k)) {\n return item;\n }\n item = item[k];\n }\n\n return item;\n }\n\n private updateSearchInput(): void {\n if (this._value instanceof NiceTypeaheadNewValue) {\n this.updateLabel(this._value.$new);\n return;\n }\n\n const active = this.service.getActive();\n if (active) {\n this.updateLabel(active);\n return;\n }\n }\n\n private async checkIfValueStillExist(): Promise<void> {\n if (this._value instanceof NiceTypeaheadNewValue) {\n return;\n }\n\n const items = await firstValueFrom(this.service.filteredItems$);\n const item = items.find(\n v => (this.bindValue && typeof v === \"object\" ? this.getObjectItem(this.bindValue, v) : v) === this._value\n );\n if (item) {\n return;\n }\n\n if (this._value !== null && this._value !== undefined) {\n this.onRemove(null);\n }\n }\n}\n","<ng-container *ngIf=\"{ loading: service.loading$ | async, loadingPage: service.loadingPage$ | async, values: service.filteredItems$ | async } as ctx\">\n <div class=\"flex\" *ngIf=\"!disabled; else disable\">\n <input\n #searchInput\n matInput\n class=\"flex-auto\"\n type=\"text\"\n name=\"mat-autocomplete\"\n [disabled]=\"$any(disabled)\"\n [placeholder]=\"placeholder\"\n [formControl]=\"searchControl\"\n [matAutocomplete]=\"auto\"\n [required]=\"$any(required)\"\n (focus)=\"focusChanged(true)\"\n />\n <mat-icon *ngIf=\"value && !ctx.loading\" matSuffix class=\"close-button secondary-text\" (click)=\"onRemove($event)\">\n close\n </mat-icon>\n\n <mat-spinner class=\"self-center\" [diameter]=\"16\" *ngIf=\"ctx.loading\"></mat-spinner>\n </div>\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n [panelWidth]=\"panelWidth\"\n [class]=\"panelClass\"\n (optionActivated)=\"onOptionActivated($event)\"\n (optionSelected)=\"onOptionSelected($event)\"\n (closed)=\"updateState(false)\"\n (opened)=\"updateState(true)\"\n (optionsScroll)=\"onEndScroll()\"\n autoActiveFirstOption\n >\n <mat-progress-bar *ngIf=\"open && ctx.loading\" mode=\"indeterminate\" color=\"primary\"></mat-progress-bar>\n <mat-option *ngFor=\"let option of ctx.values\" [value]=\"option\">\n <ng-container\n *ngIf=\"optionTemplate; else format\"\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: option }\">\n </ng-container>\n <ng-template #format>\n {{ formatLabel(option) }}\n </ng-template>\n </mat-option>\n <mat-option *ngIf=\"!ctx.values?.length && !allowNotFoundItems\" disabled>\n <ng-container *ngIf=\"emptyPlaceholder; else defaultEmptyPlaceholder\">\n {{ emptyPlaceholder }}\n </ng-container>\n <ng-template #defaultEmptyPlaceholder>\n {{ \"components.typeahead.no_item_found\" | translate }}\n </ng-template>\n </mat-option>\n <mat-option *ngIf=\"!ctx.values?.length && allowNotFoundItems\" id=\"new-value-option\" [value]=\"searchControl.value\">\n <span class=\"italic\">{{ searchControl.value }}</span>\n </mat-option>\n <mat-progress-bar *ngIf=\"open && ctx.loadingPage\" mode=\"indeterminate\" color=\"primary\"></mat-progress-bar>\n </mat-autocomplete>\n</ng-container>\n\n<ng-template #disable>\n <input\n matInput\n class=\"disabled-input\"\n type=\"text\"\n [disabled]=\"true\"\n [placeholder]=\"placeholder\"\n [formControl]=\"searchControl\"\n [required]=\"$any(required)\"\n />\n</ng-template>\n","import { CommonModule } from \"@angular/common\";\nimport { ModuleWithProviders, NgModule, Type } from \"@angular/core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { MatAutocompleteModule } from \"@angular/material/autocomplete\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatInputModule } from \"@angular/material/input\";\nimport { MatProgressBarModule } from \"@angular/material/progress-bar\";\nimport { MatProgressSpinnerModule } from \"@angular/material/progress-spinner\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { OptionScrollModule } from \"../typeahead/directives/options-scroll.module\";\n\nimport { NiceAsyncTypeaheadComponent } from \"./async-typeahead.component\";\nimport { NICE_ASYNC_TYPEAHEAD_PROVIDER } from \"./async-typeahead.constant\";\nimport { NiceAsyncTypeaheadProvider } from \"./providers/async-typeahead.provider\";\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n OptionScrollModule,\n MatInputModule,\n MatAutocompleteModule,\n MatIconModule,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n TranslateModule\n ],\n declarations: [NiceAsyncTypeaheadComponent],\n providers: [],\n exports: [NiceAsyncTypeaheadComponent]\n})\nexport class NiceAsyncTypeaheadModule {\n public static register(providers: Type<NiceAsyncTypeaheadProvider<any, any>>[]): ModuleWithProviders<NiceAsyncTypeaheadModule> {\n return {\n ngModule: NiceAsyncTypeaheadModule,\n providers: providers.map(x => ({\n provide: NICE_ASYNC_TYPEAHEAD_PROVIDER,\n useClass: x,\n multi: true\n }))\n };\n }\n}\n","import { CdkStepper } from \"@angular/cdk/stepper\";\nimport { Component, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output, ViewChild } from \"@angular/core\";\nimport { ControlValueAccessor, FormGroup } from \"@angular/forms\";\nimport { GeneratedFormGroup } from \"@recursyve/ngx-form-generator\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { KeyboardCodes } from \"../../utils\";\n\n@Component({\n template: ``\n})\nexport abstract class NiceBaseFormComponent<Form> implements OnInit, OnDestroy, ControlValueAccessor {\n @ViewChild(CdkStepper)\n private stepper: CdkStepper;\n\n @Input()\n public loading = false;\n\n // tslint:disable-next-line:no-output-native\n @Output()\n public submit = new EventEmitter<Form>();\n\n protected unsubscribeAll$ = new Subject<void>();\n\n private propagate: (form: Form) => void = () => {};\n\n constructor(public formGroup: GeneratedFormGroup<Form>) {}\n\n @HostListener(\"keyup\", [\"$event\"])\n public onChange(event: KeyboardEvent): void {\n if (event) {\n if (event.code === KeyboardCodes.Enter) {\n this.clickSubmit();\n }\n }\n }\n\n public ngOnInit(): void {\n this.formGroup.valueChanges.pipe(takeUntil(this.unsubscribeAll$)).subscribe(() => {\n this.onValueChange(this.formGroup.getRawValue());\n });\n }\n\n public ngOnDestroy(): void {\n this.unsubscribeAll$?.next();\n this.unsubscribeAll$?.complete();\n }\n\n public registerOnChange(fn: (form: Form) => void): void {\n this.propagate = fn;\n }\n\n public registerOnTouched(fn: (form: Form) => void): void {\n // NO-OP\n }\n\n public writeValue(form: Form): void {\n if (form) {\n this.formGroup.patchValue(form);\n }\n }\n\n public clickSubmit(): void {\n if (!this.validate()) {\n return;\n }\n this.submit.emit(this.formGroup.getRawValue());\n }\n\n public clickNext(index: number): void {\n this.validateStep(index);\n if (this.stepper) {\n this.stepper.next();\n }\n }\n\n public clickPrevious(): void {\n if (this.stepper) {\n this.stepper.previous();\n }\n }\n\n protected onValueChange(value: Form): void {\n this.propagate(value);\n }\n\n public validate(): boolean {\n if (this.formGroup.valid) {\n return true;\n }\n this.formGroup.markAllAsTouched();\n return false;\n }\n\n protected validateStep(index: number): boolean {\n const group = this.getCurrentStepGroup(index);\n if (group?.valid) {\n return true;\n }\n group?.markAllAsTouched();\n return false;\n }\n\n protected getCurrentStepGroup(index: number): FormGroup | null {\n return null;\n }\n}\n","import { Directive, HostListener, Input } from \"@angular/core\";\nimport { NiceBaseFormComponent } from \"./base-form.component\";\n\n@Directive({ selector: \"[niceFormSubmit]\" })\nexport class NiceFormSubmitDirective {\n @Input()\n public form: NiceBaseFormComponent<any>;\n\n @HostListener(\"click\")\n public onClick(): void {\n this.form.clickSubmit();\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NiceFormSubmitDirective } from \"./form-submit.directive\";\n\n@NgModule({\n declarations: [NiceFormSubmitDirective],\n exports: [NiceFormSubmitDirective]\n})\nexport class NiceBaseFormModule {}\n","export class NiceBaseForm<T, Dto> {\n\n constructor(value?: Partial<T>) {\n if (!value) {\n return;\n }\n Object.assign(this, value);\n }\n\n public toDto(): Dto {\n return {\n ...this\n } as any;\n }\n}\n","import { BooleanInput, coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport { Component, HostBinding, Input, OnChanges, SimpleChanges, ViewEncapsulation } from \"@angular/core\";\nimport { niceAnimations } from \"../../animations\";\nimport { NiceCardFace } from \"./card.types\";\n\n@Component({\n selector: \"nice-card\",\n templateUrl: \"./card.component.html\",\n encapsulation: ViewEncapsulation.None,\n animations: niceAnimations,\n exportAs: \"niceCard\"\n})\nexport class NiceCardComponent implements OnChanges {\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_expanded: BooleanInput;\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_flippable: BooleanInput;\n\n @Input()\n public expanded = false;\n\n @Input()\n public face: NiceCardFace = \"front\";\n\n @Input()\n public flippable = false;\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Host binding for component classes\n */\n @HostBinding(\"class\")\n public get classList(): any {\n return {\n \"nice-card-expanded\": this.expanded,\n \"nice-card-face-back\": this.flippable && this.face === \"back\",\n \"nice-card-face-front\": this.flippable && this.face === \"front\",\n \"nice-card-flippable\": this.flippable\n };\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On changes\n */\n public ngOnChanges(changes: SimpleChanges): void {\n // Expanded\n if (\"expanded\" in changes) {\n // Coerce the value to a boolean\n this.expanded = coerceBooleanProperty(changes.expanded.currentValue);\n }\n\n // Flippable\n if (\"flippable\" in changes) {\n // Coerce the value to a boolean\n this.flippable = coerceBooleanProperty(changes.flippable.currentValue);\n }\n }\n}\n","<!-- Flippable card -->\n<ng-container *ngIf=\"flippable\">\n <!-- Front -->\n <div class=\"nice-card-front\">\n <ng-content select=\"[niceCardFront]\"></ng-content>\n </div>\n\n <!-- Back -->\n <div class=\"nice-card-back\">\n <ng-content select=\"[niceCardBack]\"></ng-content>\n </div>\n</ng-container>\n\n<!-- Normal card -->\n<ng-container *ngIf=\"!flippable\">\n <!-- Content -->\n <ng-content></ng-content>\n\n <!-- Expansion -->\n <div\n class=\"nice-card-expansion\"\n *ngIf=\"expanded\"\n [@expandCollapse]>\n <ng-content select=\"[niceCardExpansion]\"></ng-content>\n </div>\n</ng-container>\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { NiceCardComponent } from \"./card.component\";\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [\n NiceCardComponent\n ],\n exports: [\n NiceCardComponent\n ]\n})\nexport class NiceCardModule {\n}\n","import { Component, ViewEncapsulation } from \"@angular/core\";\n\n@Component({\n encapsulation: ViewEncapsulation.None,\n selector: \"nice-picture-modal\",\n styleUrls: [\"picture-modal.style.scss\"],\n templateUrl: \"picture-modal.template.html\"\n})\nexport class PictureModalComponent {\n public picture: string;\n}\n","<div class=\"overlay-content\">\n <img [src]=\"picture\" />\n</div>\n","import { Overlay } from \"@angular/cdk/overlay\";\nimport { ComponentPortal } from \"@angular/cdk/portal\";\nimport { Injectable } from \"@angular/core\";\nimport { PictureModalComponent } from \"./picture-modal.component\";\n\nexport interface PictureModalConfig {\n picture?: string;\n}\n\n@Injectable()\nexport class PictureModalService {\n constructor(private overlay: Overlay) {}\n\n public open(config: PictureModalConfig) {\n const positionStrategy = this.overlay\n .position()\n .global()\n .centerHorizontally()\n .centerVertically();\n\n const overlayRef = this.overlay.create({\n backdropClass: \"cdk-overlay-dark-backdrop\",\n hasBackdrop: true,\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.block(),\n });\n\n const pictureModalPortal = new ComponentPortal(PictureModalComponent);\n const pictureModalRef = overlayRef.attach(pictureModalPortal);\n\n pictureModalRef.instance.picture = config.picture;\n\n overlayRef.backdropClick().subscribe(() => overlayRef.dispose());\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"carouselLayout\" })\nexport class CarouselLayoutPipe implements PipeTransform {\n public transform(value: \"row\" | \"column\", direction: \"ltr\" | \"rtl\" | \"utd\" | \"dtu\"): string {\n if (value === \"row\") {\n return direction === \"rtl\" ? \"flex-row-reverse\" : \"flex-row\";\n }\n return direction === \"utd\" ? \"flex-col\" : \"flex-col-reverse\";\n }\n}\n","import { Component, EventEmitter, Input, Output, ViewEncapsulation } from \"@angular/core\";\nimport { PictureModalService } from \"./picture-modal/picture-modal.service\";\n\nexport interface Picture {\n id: number;\n url: string;\n}\n\n@Component({\n selector: \"nice-carousel\",\n templateUrl: \"carousel.template.html\",\n styleUrls: [\"./carousel.style.scss\"],\n encapsulation: ViewEncapsulation.None\n})\nexport class CarouselComponent {\n public currentImages: Picture[];\n\n @Input()\n public set images(urls: Picture[]) {\n this.currentImages = urls;\n }\n\n @Input()\n public direction: \"ltr\" | \"rtl\" | \"utd\" | \"dtu\" = \"ltr\";\n\n @Input()\n public layout: \"row\" | \"column\" = \"row\";\n\n @Input()\n public editable = false;\n\n @Output()\n public delete = new EventEmitter<Picture>();\n\n constructor(private pictureModalService: PictureModalService) {}\n\n public clickView(picture: Picture) {\n this.pictureModalService.open({\n picture: picture.url\n });\n }\n\n public clickDelete(picture: Picture) {\n this.delete.emit(picture);\n }\n}\n","<div class=\"slides-container\">\n <div class=\"slides flex\" [ngClass]=\"layout | carouselLayout: direction\">\n <div class=\"slide\" *ngFor=\"let image of currentImages\">\n <img [src]=\"image?.url\" (click)=\"clickView(image)\"/>\n <i class=\"fad fa-times-circle remove-button\" (click)=\"clickDelete(image)\" *ngIf=\"editable\"></i>\n </div>\n </div>\n</div>\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatCardModule } from \"@angular/material/card\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { CarouselComponent } from \"./carousel.component\";\nimport { PictureModalComponent } from \"./picture-modal\";\nimport { PictureModalService } from \"./picture-modal\";\nimport { CarouselLayoutPipe } from \"./pipe/carousel-layout.pipe\";\n\n@NgModule({\n imports: [\n CommonModule,\n MatCardModule,\n MatButtonModule,\n TranslateModule,\n MatIconModule\n ],\n exports: [CarouselComponent],\n declarations: [CarouselComponent, PictureModalComponent, CarouselLayoutPipe],\n entryComponents: [PictureModalComponent],\n providers: [PictureModalService]\n})\nexport class NiceCarouselModule {}\n","import { Injectable } from \"@angular/core\";\nimport { BehaviorSubject } from \"rxjs\";\n\n@Injectable()\nexport class NiceDateRangePickerServiceService {\n public allowClear$ = new BehaviorSubject(true);\n\n public setAllowClear(allowClear: boolean): void {\n this.allowClear$.next(allowClear);\n }\n}\n","import { ChangeDetectionStrategy, Component } from \"@angular/core\";\nimport { DateAdapter } from \"@angular/material/core\";\nimport { MatDateRangePicker } from \"@angular/material/datepicker\";\nimport { NiceDateRangePickerServiceService } from \"../../providers/date-range-picker.service\";\n\nconst customPresets = [\n \"today\",\n \"last_7_days\",\n \"this_week\",\n \"this_month\",\n \"this_year\",\n \"last_week\",\n \"last_month\",\n \"last_year\",\n];\n\ntype CustomPreset = typeof customPresets[number];\n\n@Component({\n selector: \"nice-range-preset\",\n templateUrl: \"range-preset.template.html\",\n styleUrls: [\"range-preset.style.scss\"],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RangePresetComponent<D> {\n public readonly customPresets = customPresets;\n public readonly allowClear$ = this.service.allowClear$;\n\n constructor(\n private dateAdapter: DateAdapter<D>,\n private picker: MatDateRangePicker<D>,\n private service: NiceDateRangePickerServiceService\n ) {}\n\n public clearRange(): void {\n this.picker.select(null);\n this.picker.select(null);\n this.picker.close();\n }\n\n public selectRange(rangeName: CustomPreset): void {\n const [start, end] = this.calculateDateRange(rangeName);\n this.picker.select(start);\n this.picker.select(end);\n this.picker.close();\n }\n\n private calculateDateRange(rangeName: CustomPreset): [start: D, end: D] {\n const today = this.today;\n const year = this.dateAdapter.getYear(today);\n\n switch (rangeName) {\n case \"today\":\n return [today, today];\n case \"last_7_days\": {\n const start = this.dateAdapter.addCalendarDays(today, -6);\n return [start, today];\n }\n case \"this_week\": {\n return this.calculateWeek(today);\n }\n case \"this_month\": {\n return this.calculateMonth(today);\n }\n case \"this_year\": {\n const start = this.dateAdapter.createDate(year, 0, 1);\n const end = this.dateAdapter.createDate(year, 11, 31);\n return [start, end];\n }\n case \"last_week\": {\n const thisDayLastWeek = this.dateAdapter.addCalendarDays(today, -7);\n return this.calculateWeek(thisDayLastWeek);\n }\n case \"last_month\": {\n const thisDayLastMonth = this.dateAdapter.addCalendarMonths(today, -1);\n return this.calculateMonth(thisDayLastMonth);\n }\n case \"last_year\": {\n const start = this.dateAdapter.createDate(year - 1, 0, 1);\n const end = this.dateAdapter.createDate(year - 1, 11, 31);\n return [start, end];\n }\n default:\n return null;\n }\n }\n\n private calculateMonth(forDay: D): [start: D, end: D] {\n const year = this.dateAdapter.getYear(forDay);\n const month = this.dateAdapter.getMonth(forDay);\n const start = this.dateAdapter.createDate(year, month, 1);\n const end = this.dateAdapter.addCalendarDays(\n start,\n this.dateAdapter.getNumDaysInMonth(forDay) - 1\n );\n return [start, end];\n }\n\n private calculateWeek(forDay: D): [start: D, end: D] {\n const deltaStart = this.dateAdapter.getFirstDayOfWeek() - this.dateAdapter.getDayOfWeek(forDay);\n const start = this.dateAdapter.addCalendarDays(forDay, deltaStart);\n const end = this.dateAdapter.addCalendarDays(start, 6);\n return [start, end];\n }\n\n private get today(): D {\n const today = this.dateAdapter.getValidDateOrNull(new Date());\n if (today === null) {\n throw new Error(\"date creation failed\");\n }\n return today;\n }\n}\n","<mat-card class=\"mat-elevation-z3\">\n <button\n *ngIf=\"allowClear$ | async\"\n mat-button\n (click)=\"clearRange()\"\n >\n {{ \"nice_ui_kit.date_range_picker.clear\" | translate }}\n </button>\n\n <button\n *ngFor=\"let item of customPresets\"\n mat-button\n (click)=\"selectRange(item)\"\n >\n {{ \"nice_ui_kit.date_range_picker.presets.\" + item | translate }}\n </button>\n</mat-card>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnDestroy } from \"@angular/core\";\nimport { DateAdapter, MAT_DATE_FORMATS, MatDateFormats } from \"@angular/material/core\";\nimport { MatCalendar } from \"@angular/material/datepicker\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\n@Component({\n templateUrl: \"header.template.html\",\n styleUrls: [\"header.style.scss\"],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class HeaderComponent<D> implements OnDestroy {\n private readonly destroy$ = new Subject<void>();\n\n public toggled = false;\n\n constructor(\n private calendar: MatCalendar<D>,\n private dateAdapter: DateAdapter<D>,\n @Inject(MAT_DATE_FORMATS) private dateFormats: MatDateFormats,\n cdr: ChangeDetectorRef\n ) {\n calendar.stateChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => cdr.markForCheck());\n }\n\n public get periodLabel(): string {\n return this.dateAdapter\n .format(this.calendar.activeDate, this.dateFormats.display.monthYearLabel)\n .toLocaleUpperCase();\n }\n\n public previousClicked(mode: \"month\" | \"year\"): void {\n this.changeDate(mode, -1);\n }\n\n public nextClicked(mode: \"month\" | \"year\"): void {\n this.changeDate(mode, 1);\n }\n\n private changeDate(mode: \"month\" | \"year\", amount: -1 | 1): void {\n this.calendar.activeDate =\n mode === \"month\"\n ? this.dateAdapter.addCalendarMonths(this.calendar.activeDate, amount)\n : this.dateAdapter.addCalendarYears(this.calendar.activeDate, amount);\n }\n\n public clickOptions() {\n this.toggled = !this.toggled;\n }\n\n public ngOnDestroy(): void {\n this.destroy$.next();\n }\n}\n","<div class=\"hidden md:block\" fxHide.lt-md>\n <nice-range-preset></nice-range-preset>\n</div>\n<div class=\"block md:hidden\">\n <ng-container *ngIf=\"toggled\">\n <nice-range-preset></nice-range-preset>\n </ng-container>\n</div>\n\n<div class=\"header\">\n <button\n fxHide.gt-md\n mat-icon-button\n (click)=\"clickOptions()\"\n >\n <mat-icon>sort</mat-icon>\n </button>\n <button\n mat-icon-button\n class=\"double-arrow\"\n (click)=\"previousClicked('year')\"\n >\n <mat-icon>keyboard_arrow_left</mat-icon>\n <mat-icon>keyboard_arrow_left</mat-icon>\n </button>\n <button mat-icon-button (click)=\"previousClicked('month')\">\n <mat-icon>keyboard_arrow_left</mat-icon>\n </button>\n\n <span class=\"header-label\">{{ periodLabel }}</span>\n\n <button mat-icon-button (click)=\"nextClicked('month')\">\n <mat-icon>keyboard_arrow_right</mat-icon>\n </button>\n <button\n mat-icon-button\n class=\"double-arrow\"\n (click)=\"nextClicked('year')\"\n >\n <mat-icon>keyboard_arrow_right</mat-icon>\n <mat-icon>keyboard_arrow_right</mat-icon>\n </button>\n</div>\n","import { DatePipe } from \"@angular/common\";\nimport { Pipe, PipeTransform } from \"@angular/core\";\nimport { TranslateService } from \"@ngx-translate/core\";\n\n@Pipe({ name: \"localizedDate\" })\nexport class LocalizedDatePipe implements PipeTransform {\n constructor(private readonly translateService: TranslateService) {}\n\n public transform(value: any, pattern: string = \"mediumDate\", fallbackWithNull = false, timeZone?: string): string {\n if (pattern === \"mediumDateWithoutYear\") {\n pattern = this.getMediumDateWithoutYearPattern();\n }\n\n const datePipe: DatePipe = new DatePipe(this.translateService.currentLang, timeZone);\n\n if (value instanceof Date) {\n if (isNaN(value.getTime())) {\n return fallbackWithNull ? null : this.translateService.instant(\"general.not_available\");\n }\n }\n\n if (value && value !== \"0000-00-00\") {\n return datePipe.transform(value, pattern);\n } else {\n return fallbackWithNull ? null : this.translateService.instant(\"general.not_available\");\n }\n }\n\n private getMediumDateWithoutYearPattern(): string {\n if (this.translateService.defaultLang === \"fr\") {\n return \"d MMMM\";\n }\n return \"MMMM d\";\n }\n}\n","import { Component, forwardRef, Input, OnInit, ViewChild, ViewEncapsulation } from \"@angular/core\";\nimport { ControlValueAccessor, FormControl, FormGroup, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { MatDateRangePicker } from \"@angular/material/datepicker\";\nimport subDays from \"date-fns/subDays\";\nimport { HeaderComponent } from \"./components/header/header.component\";\n\nexport interface NiceDateRangePickerValue {\n from: Date;\n to: Date;\n}\n\n@Component({\n selector: \"nice-date-range-picker\",\n templateUrl: \"date-range-picker.template.html\",\n styleUrls: [\"date-range-picker.style.scss\"],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NiceDateRangePickerComponent),\n multi: true\n }\n ]\n})\nexport class NiceDateRangePickerComponent implements OnInit, ControlValueAccessor {\n public readonly HeaderComponent = HeaderComponent;\n\n @ViewChild(MatDateRangePicker)\n private picker: MatDateRangePicker<any>;\n\n @Input()\n public min = subDays(new Date(), 3);\n\n @Input()\n public max = new Date();\n\n @Input()\n public nowIsMax = true;\n\n @Input()\n public allowClear = true;\n\n public formGroup = new FormGroup({\n from: new FormControl(),\n to: new FormControl()\n });\n public now = new Date();\n public value: NiceDateRangePickerValue;\n\n private propage: (value: NiceDateRangePickerValue) => void;\n\n public ngOnInit(): void {\n this.value = {\n from: this.min,\n to: this.max\n };\n this.formGroup.patchValue(this.value);\n\n this.formGroup.valueChanges.subscribe((_) => {\n this.value = this.formGroup.getRawValue();\n this.propage?.(this.value);\n });\n }\n\n public writeValue(value: NiceDateRangePickerValue): void {\n this.value = value;\n this.formGroup.patchValue(this.value);\n }\n\n public registerOnChange(fn: (value: NiceDateRangePickerValue) => void): void {\n this.propage = fn;\n }\n\n public registerOnTouched(fn: any): void {}\n}\n","<div class=\"nice-date-picker-container\">\n <div class=\"nice-date-picker-header\">\n <div class=\"from-to\">\n <ng-container *ngIf=\"value.from\">\n {{ value.from | localizedDate: \"longDate\" }}\n </ng-container>\n <ng-container *ngIf=\"value.to\">\n <div class=\"separator\">-</div>\n {{ value.to | localizedDate: \"longDate\" }}\n </ng-container>\n </div>\n </div>\n\n <mat-date-range-input [formGroup]=\"formGroup\" [max]=\"nowIsMax ? now : null\" [rangePicker]=\"picker\">\n <input formControlName=\"from\" class=\"hidden-input\" matStartDate placeholder=\"Start date\">\n <input formControlName=\"to\" class=\"hidden-input\" matEndDate placeholder=\"End date\">\n </mat-date-range-input>\n\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n\n <mat-date-range-picker\n [calendarHeaderComponent]=\"HeaderComponent\"\n #picker\n ></mat-date-range-picker>\n</div>\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { TranslateService } from \"@ngx-translate/core\";\n\n@Pipe({ name: \"boolean\" })\nexport class BooleanPipe implements PipeTransform {\n constructor(private readonly translateService: TranslateService) {}\n\n public transform(value: any): string {\n if (typeof value !== \"boolean\") {\n return \"\";\n }\n\n return this.translateService.instant(value ? \"general.yes\" : \"general.no\");\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { isNullOrUndefined } from \"../utils/type.utils\";\n\n@Pipe({ name: \"capitalizeFirstLetter\" })\nexport class CapitalizeFirstLetterPipe implements PipeTransform {\n public transform(value: string): string {\n if (isNullOrUndefined(value)) {\n return value;\n }\n\n return value.charAt(0).toUpperCase() + value.slice(1);\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"ceil\" })\nexport class CeilPipe implements PipeTransform {\n public transform(input: number) {\n return Math.ceil(input);\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"entries\" })\nexport class EntriesPipe implements PipeTransform {\n public transform<Value>(value: Value): { key: keyof Value, value: any }[] {\n const keys: { key: keyof Value, value: any }[] = [];\n\n for (const key in value) {\n if (value.hasOwnProperty(key)) {\n keys.push({\n key,\n value: value[key]\n });\n }\n }\n\n return keys;\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"findByKey\" })\nexport class FindByKeyPipe implements PipeTransform {\n public transform<ArrayType, ValueType>(array: ArrayType[], value: ValueType, key = \"id\"): ArrayType {\n return (array ?? []).find((v) => v?.[key] === value);\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"firstLetter\" })\nexport class FirstLetterPipe implements PipeTransform {\n public transform(value: string): string {\n return value?.[0];\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"floor\" })\nexport class FloorPipe implements PipeTransform {\n public transform(input: number) {\n return Math.floor(input);\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"join\" })\nexport class JoinPipe implements PipeTransform {\n public transform(array: any[], separator = \" \", prop?: string): string {\n if (!array?.length) {\n return \"general.not_available\";\n }\n\n if (!prop) {\n return array.filter(x => x).join(separator);\n }\n return array.filter(x => x).map(x => x[prop]).join(separator);\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { UrlUtils } from \"../utils/url.utils\";\n\n@Pipe({ name: \"link\" })\nexport class LinkPipe implements PipeTransform {\n public transform(value: string, type: \"mailto\"): string;\n public transform(value: { phoneNumber: string, extension?: string }, type: \"tel\"): string;\n public transform(value: { address: string, postalCode: string }, type: \"direction\"): string;\n public transform(value: any, type: \"mailto\" | \"tel\" | \"direction\"): string {\n if (!value) {\n return;\n }\n\n switch (type) {\n case \"mailto\":\n return UrlUtils.emailUrl(value);\n case \"tel\":\n return UrlUtils.phoneCallUrl(value.phoneNumber, value.extension);\n case \"direction\":\n return UrlUtils.directionUrl(value.address, value.postalCode);\n }\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { TranslateService } from \"@ngx-translate/core\";\n\n@Pipe({ name: \"localizedBoolean\" })\nexport class LocalizedBooleanPipe implements PipeTransform {\n constructor(private readonly translateService: TranslateService) {}\n\n public transform(value: boolean): any {\n return this.translateService.instant(`general.bool_${value}`);\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { CurrencyPipe } from \"@angular/common\";\nimport { TranslateService } from \"@ngx-translate/core\";\n\n@Pipe({ name: \"localizedCurrency\" })\nexport class LocalizedCurrencyPipe extends CurrencyPipe implements PipeTransform {\n constructor(private readonly translateService: TranslateService) {\n super(translateService.currentLang);\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { TranslateService } from \"@ngx-translate/core\";\nimport { LocalizedDatePipe } from \"./localized-date.pipe\";\n\n@Pipe({ name: \"localizedDateOnly\" })\nexport class LocalizedDateOnlyPipe implements PipeTransform {\n constructor(private readonly translateService: TranslateService) {}\n\n public transform(value: any, pattern: string = \"mediumDate\", fallbackWithNull = false): string {\n const pipe = new LocalizedDatePipe(this.translateService);\n return pipe.transform(value, pattern, fallbackWithNull, \"UTC\");\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n// Formats minutes in hh:mm format.\n@Pipe({ name: \"minutesToTime\" })\nexport class MinutesToTimePipe implements PipeTransform {\n public transform(totalMinutes: number, separator: string = \":\"): string {\n const hours = `${Math.floor(totalMinutes / 60)}`.padStart(2, \"0\");\n const minutes = `${Math.floor(totalMinutes % 60)}`.padStart(2, \"0\");\n return `${hours}${separator}${minutes}`;\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"numberToOrdinalIndicator\" })\nexport class NumberToOrdinalIndicatorPipe implements PipeTransform {\n public transform(value: number): string {\n switch (value) {\n case 1:\n return \"general.first\";\n case 2:\n return \"general.second\";\n case 3:\n return \"general.third\";\n default:\n return \"general.xth\";\n }\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"pad\" })\nexport class PadPipe implements PipeTransform {\n public transform(value: number | string, length: number, direction: \"start\" | \"end\" = \"start\", maxLength = 2, fillString = \"0\"): string {\n const strValue = typeof value === \"number\" ? `${value}` : value;\n switch (direction) {\n case \"start\":\n return strValue.padStart(maxLength, fillString);\n case \"end\":\n return strValue.padEnd(maxLength, fillString);\n }\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { MaskApplierService } from \"ngx-mask\";\n\n@Pipe({ name: \"phone\" })\nexport class PhonePipe implements PipeTransform {\n constructor(private maskApplierService: MaskApplierService) {}\n\n public transform(rawPhoneNumber: string, extension?: string): string {\n const formattedPhoneNumber = this.maskApplierService.applyMask(rawPhoneNumber, \"(000) 000-0000\");\n if (!extension) {\n return formattedPhoneNumber;\n }\n\n return `${formattedPhoneNumber} #${extension}`;\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { MaskApplierService } from \"ngx-mask\";\n\n@Pipe({ name: \"postalCode\" })\nexport class PostalCodePipe implements PipeTransform {\n constructor(private maskApplierService: MaskApplierService) {}\n\n public transform(postalCode: string): string {\n if (postalCode) {\n return this.maskApplierService.applyMask(postalCode, \"S0S 0S0\");\n }\n return \"\";\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"round\" })\nexport class RoundPipe implements PipeTransform {\n public transform(input: number) {\n return Math.round(input);\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"range\" })\nexport class RangePipe implements PipeTransform {\n public transform(value: number): number[] {\n const range: number[] = [];\n for (let i = 0; i < value; i++) {\n range.push(i);\n }\n return range;\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n// Formats seconds in hh:mm:ss format.\n@Pipe({ name: \"secondsToTime\" })\nexport class SecondsToTimePipe implements PipeTransform {\n public transform(value: number, separator = \":\"): string {\n const hours = `${Math.floor(value / 60 / 60)}`.padStart(2, \"0\");\n const minutes = `${Math.floor(value / 60 % 60)}`.padStart(2, \"0\");\n const seconds = `${Math.floor(value % 60)}`.padStart(2, \"0\");\n return `${hours}${separator}${minutes}${separator}${seconds}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({ name: \"sanitizeBypass\" })\nexport class SanitizeBypassPipe implements PipeTransform {\n constructor(private readonly sanitizer: DomSanitizer) {}\n\n public transform(value: any, bypass: \"html\" | \"style\"): any {\n switch (bypass) {\n case \"html\":\n return this.sanitizer.bypassSecurityTrustHtml(value || '');\n case \"style\":\n return this.sanitizer.bypassSecurityTrustStyle(value || '');\n }\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { EntriesPipe } from \"./entries.pipe\";\nimport { BooleanPipe } from \"./boolean.pipe\";\nimport { LocalizedDateOnlyPipe } from \"./localized-date-only.pipe\";\nimport { PostalCodePipe } from \"./postal-code.pipe\";\nimport { PhonePipe } from \"./phone.pipe\";\nimport { CeilPipe } from \"./ceil.pipe\";\nimport { FloorPipe } from \"./floor.pipe\";\nimport { RoundPipe } from \"./round.pipe\";\nimport { FindByKeyPipe } from \"./find-by-key.pipe\";\nimport { PadPipe } from \"./pad.pipe\";\nimport { LinkPipe } from \"./link.pipe\";\nimport { MinutesToTimePipe } from \"./minutes-to-time.pipe\";\nimport { NumberToOrdinalIndicatorPipe } from \"./number-to-ordinal-indicator.pipe\";\nimport { RangePipe } from \"./range.pipe\";\nimport { SecondsToTimePipe } from \"./seconds-to-time.pipe\";\nimport { LocalizedDatePipe } from \"./localized-date.pipe\";\nimport { LocalizedCurrencyPipe } from \"./localized-currency.pipe\";\nimport { CapitalizeFirstLetterPipe } from \"./capitalize-first-letter.pipe\";\nimport { JoinPipe } from \"./join-if-defined.pipe\";\nimport { SanitizeBypassPipe } from \"./sanitize-bypass.pipe\";\nimport { FirstLetterPipe } from \"./first-letter.pipe\";\nimport { LocalizedBooleanPipe } from \"./localized-boolean.pipe\";\n\n@NgModule({\n declarations: [\n BooleanPipe,\n CapitalizeFirstLetterPipe,\n CeilPipe,\n FindByKeyPipe,\n FirstLetterPipe,\n FloorPipe,\n JoinPipe,\n EntriesPipe,\n LinkPipe,\n LocalizedBooleanPipe,\n LocalizedCurrencyPipe,\n LocalizedDatePipe,\n LocalizedDateOnlyPipe,\n MinutesToTimePipe,\n NumberToOrdinalIndicatorPipe,\n PadPipe,\n PhonePipe,\n PostalCodePipe,\n RangePipe,\n RoundPipe,\n SanitizeBypassPipe,\n SecondsToTimePipe\n ],\n providers: [\n BooleanPipe,\n CapitalizeFirstLetterPipe,\n CeilPipe,\n FindByKeyPipe,\n FirstLetterPipe,\n FloorPipe,\n JoinPipe,\n EntriesPipe,\n LinkPipe,\n LocalizedBooleanPipe,\n LocalizedCurrencyPipe,\n LocalizedDatePipe,\n LocalizedDateOnlyPipe,\n MinutesToTimePipe,\n NumberToOrdinalIndicatorPipe,\n PadPipe,\n PhonePipe,\n PostalCodePipe,\n RangePipe,\n RoundPipe,\n SanitizeBypassPipe,\n SecondsToTimePipe\n ],\n exports: [\n BooleanPipe,\n CapitalizeFirstLetterPipe,\n CeilPipe,\n FindByKeyPipe,\n FirstLetterPipe,\n FloorPipe,\n JoinPipe,\n EntriesPipe,\n LinkPipe,\n LocalizedBooleanPipe,\n LocalizedCurrencyPipe,\n LocalizedDatePipe,\n LocalizedDateOnlyPipe,\n MinutesToTimePipe,\n NumberToOrdinalIndicatorPipe,\n PadPipe,\n PhonePipe,\n PostalCodePipe,\n RangePipe,\n RoundPipe,\n SanitizeBypassPipe,\n SecondsToTimePipe\n ]\n})\nexport class NicePipesModule {\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatCardModule } from \"@angular/material/card\";\nimport { MatDatepickerModule } from \"@angular/material/datepicker\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { NicePipesModule } from \"../../pipes\";\nimport { HeaderComponent } from \"./components/header/header.component\";\nimport { RangePresetComponent } from \"./components/range-preset/range-preset.component\";\nimport { NiceDateRangePickerComponent } from \"./date-range-picker.component\";\nimport { NiceDateRangePickerServiceService } from \"./providers/date-range-picker.service\";\n\n@NgModule({\n imports: [\n CommonModule,\n MatDatepickerModule,\n MatFormFieldModule,\n MatCardModule,\n MatButtonModule,\n MatIconModule,\n TranslateModule,\n ReactiveFormsModule,\n NicePipesModule\n ],\n declarations: [NiceDateRangePickerComponent, RangePresetComponent, HeaderComponent],\n providers: [NiceDateRangePickerServiceService],\n exports: [NiceDateRangePickerComponent]\n})\nexport class NiceDateRangePickerModule {}\n","import { Injectable } from \"@angular/core\";\nimport { NiceDrawerComponent } from \"./drawer.component\";\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class NiceDrawerService {\n private _componentRegistry: Map<string, NiceDrawerComponent> = new Map<string, NiceDrawerComponent>();\n\n /**\n * Constructor\n */\n constructor() {}\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Register drawer component\n */\n registerComponent(name: string, component: NiceDrawerComponent): void\n {\n this._componentRegistry.set(name, component);\n }\n\n /**\n * Deregister drawer component\n */\n deregisterComponent(name: string): void\n {\n this._componentRegistry.delete(name);\n }\n\n /**\n * Get drawer component from the registry\n */\n getComponent(name: string): NiceDrawerComponent | undefined\n {\n return this._componentRegistry.get(name);\n }\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const NICE_APP_CONFIG = new InjectionToken<any>(\"NICE_APP_CONFIG\");\n","import { Inject, Injectable } from \"@angular/core\";\nimport { merge } from \"lodash-es\";\nimport { BehaviorSubject, Observable } from \"rxjs\";\nimport { NICE_APP_CONFIG } from \"./config.constants\";\nimport { NiceConfig } from \"./config.model\";\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class NiceConfigService {\n private _config: BehaviorSubject<any>;\n\n /**\n * Constructor\n */\n constructor(@Inject(NICE_APP_CONFIG) config: NiceConfig) {\n // Private\n this._config = new BehaviorSubject(config);\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Setter & getter for config\n */\n public set config(value: NiceConfig) {\n // Merge the new config over to the current config\n const config = merge({}, this._config.getValue(), value);\n\n // Execute the observable\n this._config.next(config);\n }\n\n public get config$(): Observable<NiceConfig> {\n return this._config.asObservable();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Resets the config to the default\n */\n public reset(): void {\n // Set the config\n this._config.next(this.config);\n }\n}\n","import { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { NICE_APP_CONFIG } from \"./config.constants\";\nimport { NiceConfig } from \"./config.model\";\nimport { NiceConfigService } from \"./config.service\";\n\n@NgModule()\nexport class NiceConfigModule {\n /**\n * Constructor\n */\n constructor(private _niceConfigService: NiceConfigService) {\n }\n\n /**\n * forRoot method for setting user configuration\n */\n public static forRoot(config: NiceConfig): ModuleWithProviders<NiceConfigModule> {\n return {\n ngModule: NiceConfigModule,\n providers: [\n {\n provide: NICE_APP_CONFIG,\n useValue: config\n }\n ]\n };\n }\n}\n","import { BreakpointObserver, Breakpoints, BreakpointState } from \"@angular/cdk/layout\";\nimport { Injectable } from \"@angular/core\";\nimport { Observable, ReplaySubject, startWith, tap } from \"rxjs\";\nimport { map } from \"rxjs/operators\";\n\n@Injectable()\nexport class NiceMediaWatcherService {\n private _onMediaChange = new ReplaySubject<{ matchingAliases: string[], matchingQueries: any }>(1);\n private _currentBreakpoints: { [key: string]: boolean };\n private _breakpoint$: Observable<BreakpointState>;\n\n public xsBreakpointActive$ = this.onMediaQueryChange$(Breakpoints.XSmall).pipe(\n startWith({ matches: false }),\n map((x) => x.matches)\n );\n public smBreakpointActive$ = this.onMediaQueryChange$(Breakpoints.Small).pipe(\n startWith({ matches: false }),\n map((x) => x.matches)\n );\n public mdBreakpointActive$ = this.onMediaQueryChange$(Breakpoints.Medium).pipe(\n startWith({ matches: false }),\n map((x) => x.matches)\n );\n public lgBreakpointActive$ = this.onMediaQueryChange$(Breakpoints.Large).pipe(\n startWith({ matches: false }),\n map((x) => x.matches)\n );\n public xlBreakpointActive$ = this.onMediaQueryChange$(Breakpoints.XLarge).pipe(\n startWith({ matches: false }),\n map((x) => x.matches)\n );\n\n /**\n * Constructor\n */\n constructor(private _breakpointObserver: BreakpointObserver) {\n this._breakpoint$ = this.onMediaQueryChange$([\n Breakpoints.XSmall,\n Breakpoints.Small,\n Breakpoints.Medium,\n Breakpoints.Large,\n Breakpoints.XLarge\n ]).pipe(\n tap((res) => this._currentBreakpoints = res.breakpoints)\n );\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On media query change\n */\n public onMediaQueryChange$(query: string | string[]): Observable<BreakpointState> {\n return this._breakpointObserver.observe(query);\n }\n\n public asObservable(): Observable<BreakpointState> {\n return this._breakpoint$;\n }\n\n public isActive(query: string | string[]): boolean {\n if (typeof query === \"string\") {\n query = [query];\n }\n\n for (const q of query) {\n if (this.isBreakpointActive(q)) {\n return true;\n }\n }\n\n return false;\n }\n\n private isBreakpointActive(breakpoint: string): boolean {\n if (breakpoint.startsWith(\"gt-\")) {\n switch (breakpoint.replace(\"gt-\", \"\")) {\n case \"xs\":\n return this._currentBreakpoints[Breakpoints.Small]\n || this._currentBreakpoints[Breakpoints.Medium]\n || this._currentBreakpoints[Breakpoints.Large]\n || this._currentBreakpoints[Breakpoints.XLarge];\n case \"sm\":\n return this._currentBreakpoints[Breakpoints.Medium]\n || this._currentBreakpoints[Breakpoints.Large]\n || this._currentBreakpoints[Breakpoints.XLarge];\n case \"md\":\n return this._currentBreakpoints[Breakpoints.Large]\n || this._currentBreakpoints[Breakpoints.XLarge];\n case \"lg\":\n return this._currentBreakpoints[Breakpoints.XLarge];\n }\n }\n\n if (breakpoint.startsWith(\"lt-\")) {\n switch (breakpoint.replace(\"lt-\", \"\")) {\n case \"sm\":\n return this._currentBreakpoints[Breakpoints.XSmall];\n case \"md\":\n return this._currentBreakpoints[Breakpoints.XSmall]\n || this._currentBreakpoints[Breakpoints.Small];\n case \"lg\":\n return this._currentBreakpoints[Breakpoints.XSmall]\n || this._currentBreakpoints[Breakpoints.Small]\n || this._currentBreakpoints[Breakpoints.Medium];\n case \"xl\":\n return this._currentBreakpoints[Breakpoints.XSmall]\n || this._currentBreakpoints[Breakpoints.Small]\n || this._currentBreakpoints[Breakpoints.Medium]\n || this._currentBreakpoints[Breakpoints.Large];\n }\n }\n\n switch (breakpoint) {\n case \"xs\":\n return this._currentBreakpoints[Breakpoints.XSmall];\n case \"sm\":\n return this._currentBreakpoints[Breakpoints.Small];\n case \"md\":\n return this._currentBreakpoints[Breakpoints.Medium];\n case \"lg\":\n return this._currentBreakpoints[Breakpoints.Large];\n case \"xl\":\n return this._currentBreakpoints[Breakpoints.XLarge];\n }\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NiceMediaWatcherService } from \"./media-watcher.service\";\n\n@NgModule({\n providers: [\n NiceMediaWatcherService\n ]\n})\nexport class NiceMediaWatcherModule {\n /**\n * Constructor\n */\n constructor(private _niceMediaWatcherService: NiceMediaWatcherService) {}\n}\n","import { DOCUMENT } from \"@angular/common\";\nimport { Inject, Injectable } from \"@angular/core\";\nimport { NavigationEnd, Router } from \"@angular/router\";\nimport { filter, take } from \"rxjs/operators\";\n\n@Injectable()\nexport class NiceSplashScreenService {\n /**\n * Constructor\n */\n constructor(\n @Inject(DOCUMENT) private _document: any,\n private _router: Router\n ) {\n // Hide it on the first NavigationEnd event\n this._router.events\n .pipe(\n filter(event => event instanceof NavigationEnd),\n take(1)\n )\n .subscribe(() => {\n this.hide();\n });\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Show the splash screen\n */\n public show(): void {\n this._document.body.classList.remove(\"nice-splash-screen-hidden\");\n }\n\n /**\n * Hide the splash screen\n */\n public hide(): void {\n this._document.body.classList.add(\"nice-splash-screen-hidden\");\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NiceSplashScreenService } from \"./splash-screen.service\";\n\n@NgModule({\n providers: [\n NiceSplashScreenService\n ]\n})\nexport class NiceSplashScreenModule {\n /**\n * Constructor\n */\n constructor(private _niceSplashScreenService: NiceSplashScreenService) {}\n}\n","import { animate, AnimationBuilder, AnimationPlayer, style } from \"@angular/animations\";\nimport { BooleanInput, coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n SimpleChanges,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { NiceUtilsService } from \"../../providers\";\nimport { NiceDrawerService } from \"./drawer.service\";\nimport { NiceDrawerMode, NiceDrawerPosition } from \"./drawer.types\";\n\n@Component({\n selector: \"nice-drawer\",\n templateUrl: \"./drawer.component.html\",\n styleUrls: [\"./drawer.theme.scss\"],\n encapsulation: ViewEncapsulation.None,\n exportAs: \"niceDrawer\"\n})\nexport class NiceDrawerComponent implements OnChanges, OnInit, OnDestroy {\n // tslint:disable-next-line:variable-name\n static ngAcceptInputType_fixed: BooleanInput;\n // tslint:disable-next-line:variable-name\n static ngAcceptInputType_opened: BooleanInput;\n // tslint:disable-next-line:variable-name\n static ngAcceptInputType_transparentOverlay: BooleanInput;\n\n @Input()\n public fixed = false;\n\n @Input()\n public mode: NiceDrawerMode = \"side\";\n\n @Input()\n public width: string | number = 320;\n\n @Input()\n public name: string = this._niceUtilsService.randomId();\n\n @Input()\n public opened = false;\n\n @Input()\n public position: NiceDrawerPosition = \"left\";\n\n @Input()\n public transparentOverlay = false;\n\n @Output()\n private readonly fixedChanged: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n @Output()\n private readonly modeChanged: EventEmitter<NiceDrawerMode> = new EventEmitter<NiceDrawerMode>();\n\n @Output()\n private readonly openedChanged: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n @Output()\n private readonly positionChanged: EventEmitter<NiceDrawerPosition> = new EventEmitter<NiceDrawerPosition>();\n\n private _animationsEnabled = false;\n private _hovered = false;\n private _overlay: HTMLElement;\n private _player: AnimationPlayer;\n\n /**\n * Constructor\n */\n constructor(\n private _animationBuilder: AnimationBuilder,\n private _elementRef: ElementRef,\n private _renderer2: Renderer2,\n private _niceDrawerService: NiceDrawerService,\n private _niceUtilsService: NiceUtilsService\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Host binding for component classes\n */\n @HostBinding(\"class\")\n public get classList(): any {\n return {\n \"nice-drawer-animations-enabled\": this._animationsEnabled,\n \"nice-drawer-fixed\": this.fixed,\n \"nice-drawer-hover\": this._hovered,\n [`nice-drawer-mode-${this.mode}`]: true,\n \"nice-drawer-opened\": this.opened,\n [`nice-drawer-position-${this.position}`]: true\n };\n }\n\n /**\n * Host binding for component inline styles\n */\n @HostBinding(\"style\")\n public get styleList(): any {\n const width = typeof this.width === \"number\" ? `${this.width}px` : this.width;\n const dynamicStyle = {\n \"width\": width,\n \"min-width\": width,\n \"max-width\": width\n };\n\n if (this.mode === \"side\") {\n dynamicStyle[`margin-${this.position}`] = this.opened ? 0 : `-${width}`;\n }\n\n return dynamicStyle;\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Decorated methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On mouseenter\n *\n * @private\n */\n @HostListener(\"mouseenter\")\n private _onMouseenter(): void {\n // Enable the animations\n this._enableAnimations();\n\n // Set the hovered\n this._hovered = true;\n }\n\n /**\n * On mouseleave\n *\n * @private\n */\n @HostListener(\"mouseleave\")\n private _onMouseleave(): void {\n // Enable the animations\n this._enableAnimations();\n\n // Set the hovered\n this._hovered = false;\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On changes\n *\n * @param changes\n */\n public ngOnChanges(changes: SimpleChanges): void {\n // Fixed\n if (\"fixed\" in changes) {\n // Coerce the value to a boolean\n this.fixed = coerceBooleanProperty(changes.fixed.currentValue);\n\n // Execute the observable\n this.fixedChanged.next(this.fixed);\n }\n\n // Mode\n if (\"mode\" in changes) {\n // Get the previous and current values\n const previousMode = changes.mode.previousValue;\n const currentMode = changes.mode.currentValue;\n\n // Disable the animations\n this._disableAnimations();\n\n // If the mode changes: 'over -> side'\n if (previousMode === \"over\" && currentMode === \"side\") {\n // Hide the overlay\n this._hideOverlay();\n }\n\n // If the mode changes: 'side -> over'\n if (previousMode === \"side\" && currentMode === \"over\") {\n // If the drawer is opened\n if (this.opened) {\n // Show the overlay\n this._showOverlay();\n }\n }\n\n // Execute the observable\n this.modeChanged.next(currentMode);\n\n // Enable the animations after a delay\n // The delay must be bigger than the current transition-duration\n // to make sure nothing will be animated while the mode is changing\n setTimeout(() => {\n this._enableAnimations();\n }, 500);\n }\n\n // Opened\n if (\"opened\" in changes) {\n // Coerce the value to a boolean\n const open = coerceBooleanProperty(changes.opened.currentValue);\n\n // Open/close the drawer\n this._toggleOpened(open);\n }\n\n // Position\n if (\"position\" in changes) {\n // Execute the observable\n this.positionChanged.next(this.position);\n }\n\n // Transparent overlay\n if (\"transparentOverlay\" in changes) {\n // Coerce the value to a boolean\n this.transparentOverlay = coerceBooleanProperty(changes.transparentOverlay.currentValue);\n }\n }\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Register the drawer\n this._niceDrawerService.registerComponent(this.name, this);\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Finish the animation\n if (this._player) {\n this._player.finish();\n }\n\n // Deregister the drawer from the registry\n this._niceDrawerService.deregisterComponent(this.name);\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Open the drawer\n */\n public open(): void {\n // Return if the drawer has already opened\n if (this.opened) {\n return;\n }\n\n // Open the drawer\n this._toggleOpened(true);\n }\n\n /**\n * Close the drawer\n */\n public close(): void {\n // Return if the drawer has already closed\n if (!this.opened) {\n return;\n }\n\n // Close the drawer\n this._toggleOpened(false);\n }\n\n /**\n * Toggle the drawer\n */\n public toggle(): void {\n if (this.opened) {\n this.close();\n } else {\n this.open();\n }\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Enable the animations\n *\n * @private\n */\n private _enableAnimations(): void {\n // Return if the animations are already enabled\n if (this._animationsEnabled) {\n return;\n }\n\n // Enable the animations\n this._animationsEnabled = true;\n }\n\n /**\n * Disable the animations\n *\n * @private\n */\n private _disableAnimations(): void {\n // Return if the animations are already disabled\n if (!this._animationsEnabled) {\n return;\n }\n\n // Disable the animations\n this._animationsEnabled = false;\n }\n\n /**\n * Show the backdrop\n *\n * @private\n */\n private _showOverlay(): void {\n // Create the backdrop element\n this._overlay = this._renderer2.createElement(\"div\");\n\n // Return if overlay couldn't be create for some reason\n if (!this._overlay) {\n return;\n }\n\n // Add a class to the backdrop element\n this._overlay.classList.add(\"nice-drawer-overlay\");\n\n // Add a class depending on the fixed option\n if (this.fixed) {\n this._overlay.classList.add(\"nice-drawer-overlay-fixed\");\n }\n\n // Add a class depending on the transparentOverlay option\n if (this.transparentOverlay) {\n this._overlay.classList.add(\"nice-drawer-overlay-transparent\");\n }\n\n // Append the backdrop to the parent of the drawer\n this._renderer2.appendChild(this._elementRef.nativeElement.parentElement, this._overlay);\n\n // Create the enter animation and attach it to the player\n this._player = this._animationBuilder.build([\n style({opacity: 0}),\n animate(\"300ms cubic-bezier(0.25, 0.8, 0.25, 1)\", style({opacity: 1}))\n ]).create(this._overlay);\n\n // Once the animation is done...\n this._player.onDone(() => {\n\n // Destroy the player\n this._player.destroy();\n this._player = null;\n });\n\n // Play the animation\n this._player.play();\n\n // Add an event listener to the overlay\n this._overlay.addEventListener(\"click\", () => {\n this.close();\n });\n }\n\n /**\n * Hide the backdrop\n *\n * @private\n */\n private _hideOverlay(): void {\n if (!this._overlay) {\n return;\n }\n\n // Create the leave animation and attach it to the player\n this._player = this._animationBuilder.build([\n animate(\"300ms cubic-bezier(0.25, 0.8, 0.25, 1)\", style({opacity: 0}))\n ]).create(this._overlay);\n\n // Play the animation\n this._player.play();\n\n // Once the animation is done...\n this._player.onDone(() => {\n\n // Destroy the player\n this._player.destroy();\n this._player = null;\n\n // If the backdrop still exists...\n if (this._overlay) {\n // Remove the backdrop\n this._overlay.parentNode.removeChild(this._overlay);\n this._overlay = null;\n }\n });\n }\n\n /**\n * Open/close the drawer\n *\n * @param open\n * @private\n */\n private _toggleOpened(open: boolean): void {\n // Set the opened\n this.opened = open;\n\n // Enable the animations\n this._enableAnimations();\n\n // If the mode is 'over'\n if (this.mode === \"over\") {\n // If the drawer opens, show the overlay\n if (open) {\n this._showOverlay();\n }\n // Otherwise, close the overlay\n else {\n this._hideOverlay();\n }\n }\n\n // Execute the observable\n this.openedChanged.next(open);\n }\n}\n","<div class=\"nice-drawer-toggle\">\n <ng-content select=\"[niceDrawerToggle]\"></ng-content>\n</div>\n\n<div class=\"nice-drawer-content\" [style.visibility]=\"opened ? 'visible' : 'hidden'\">\n <ng-content></ng-content>\n</div>\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { NiceDrawerComponent } from \"./drawer.component\";\n\n@NgModule({\n imports: [\n CommonModule,\n MatIconModule\n ],\n declarations: [\n NiceDrawerComponent\n ],\n exports: [\n NiceDrawerComponent\n ]\n})\nexport class NiceDrawerModule {\n}\n","import { Injectable } from \"@angular/core\";\nimport { ExportStrategy } from \"../models/export-strategy.model\";\n\n@Injectable()\nexport abstract class ExportBottomSheetService {\n public abstract getStrategyIcon(strategy: ExportStrategy): string;\n}\n\n@Injectable()\nexport class DefaultExportBottomSheetService extends ExportBottomSheetService {\n public getStrategyIcon(strategy: ExportStrategy): string {\n switch (strategy.type) {\n case \"xlsx\":\n return \"fas fa-file-excel\";\n case \"pdf\":\n return \"fas fa-file-pdf\";\n case \"csv\":\n return \"fas fa-file-csv\";\n }\n return \"\";\n }\n}\n","import { Component, Inject } from \"@angular/core\";\nimport { MatBottomSheetRef, MAT_BOTTOM_SHEET_DATA } from \"@angular/material/bottom-sheet\";\nimport { ExportStrategy } from \"./models/export-strategy.model\";\nimport { ExportBottomSheetService } from \"./providers/export-bottom-sheet.service\";\n\nexport interface ExportBottomSheetConfig {\n exportStrategies: ExportStrategy[];\n}\n\n@Component({\n selector: \"nice-export-bottom-sheet\",\n templateUrl: \"export-bottom-sheet.template.html\"\n})\nexport class ExportBottomSheetComponent {\n constructor(\n @Inject(MAT_BOTTOM_SHEET_DATA) public exportBottomSheetConfig: ExportBottomSheetConfig,\n private bottomSheetRef: MatBottomSheetRef<ExportBottomSheetComponent>,\n private service: ExportBottomSheetService\n ) {}\n\n public getStrategyIcon(strategy: ExportStrategy): string {\n return this.service.getStrategyIcon(strategy);\n }\n\n public clickExport(strategy: ExportStrategy) {\n this.bottomSheetRef.dismiss();\n strategy.onClickExport();\n }\n}\n","<mat-nav-list>\n <a *ngFor=\"let strategy of exportBottomSheetConfig.exportStrategies\" mat-list-item (click)=\"clickExport(strategy)\">\n <i [ngClass]=\"getStrategyIcon(strategy)\" mat-list-icon></i>\n <span mat-line>{{ (\"components.export_bottom_sheet.types.\" + strategy.type) | translate }}</span>\n </a>\n</mat-nav-list>\n","import { CommonModule } from \"@angular/common\";\nimport { ModuleWithProviders, NgModule, Type } from \"@angular/core\";\nimport { MatBottomSheetModule } from \"@angular/material/bottom-sheet\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatListModule } from \"@angular/material/list\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { ExportBottomSheetComponent } from \"./export-bottom-sheet.component\";\nimport { DefaultExportBottomSheetService, ExportBottomSheetService } from \"./providers/export-bottom-sheet.service\";\n\nexport interface ExportBottomSheetOptions {\n service: Type<ExportBottomSheetService>;\n}\n\n@NgModule({\n imports: [CommonModule, MatBottomSheetModule, MatListModule, MatIconModule, TranslateModule],\n declarations: [ExportBottomSheetComponent],\n providers: [\n {\n provide: ExportBottomSheetService,\n useClass: DefaultExportBottomSheetService\n }\n ],\n exports: [ExportBottomSheetComponent]\n})\nexport class NiceExportBottomSheetModule {\n public static forFeature(options: ExportBottomSheetOptions): ModuleWithProviders<NiceExportBottomSheetModule> {\n return {\n ngModule: NiceExportBottomSheetModule,\n providers: [\n {\n provide: ExportBottomSheetService,\n useClass: options.service\n }\n ]\n };\n }\n}\n","import { Component, Input } from \"@angular/core\";\nimport { animate, style, transition, trigger } from \"@angular/animations\";\n\n@Component({\n // tslint:disable-next-line:components-selector component-selector\n selector: \"[form-error]\",\n template: `\n <div [@animation]=\"increment\" *ngIf=\"message\">\n <mat-error>\n {{ message }}\n </mat-error>\n </div>\n `,\n animations: [\n trigger(\"animation\", [\n transition(\":increment\", [style({ opacity: 0 }), animate(\"200ms ease-in\", style({ opacity: 1 }))]),\n transition(\":enter\", [\n style({ opacity: 0, transform: \"translateY(-1rem)\" }),\n animate(\"200ms ease-in\", style({ opacity: 1, transform: \"translateY(0)\" }))\n ]),\n transition(\":leave\", [animate(\"200ms ease-out\", style({ opacity: 0, transform: \"translateY(-1rem)\" }))])\n ])\n ]\n})\nexport class NiceFormErrorComponent {\n public message: string;\n public increment = 0;\n\n @Input()\n public set error(value) {\n if (value) {\n if (this.message !== value) {\n this.increment++;\n }\n }\n this.message = value;\n }\n}\n","import { AfterViewInit, ComponentRef, Directive, ElementRef, ViewContainerRef } from \"@angular/core\";\nimport { NgControl } from \"@angular/forms\";\nimport { MatFormField } from \"@angular/material/form-field\";\nimport { TranslateService } from \"@ngx-translate/core\";\nimport { NiceFormErrorComponent } from \"./form-error.component\";\n\n@Directive({ selector: \"[niceControlStatus]\" })\nexport class NiceControlStatusDirective implements AfterViewInit {\n ref: ComponentRef<NiceFormErrorComponent>;\n control: NgControl;\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private vcr: ViewContainerRef,\n private formField: MatFormField,\n private translateService: TranslateService\n ) {}\n\n public ngAfterViewInit() {\n this.control = this.formField._control.ngControl as NgControl;\n this.control.statusChanges.subscribe(() => this.onChange());\n }\n\n public onChange(): void {\n if (this.control.pending) {\n return;\n }\n\n if (this.control.invalid && this.control.touched) {\n for (const error in this.control.errors) {\n if (this.control.errors.hasOwnProperty(error)) {\n if (this.control.errors[error]) {\n let lastErrorKey = error;\n let param: any;\n if (error === \"pattern\") {\n lastErrorKey = this.control.errors[error].requiredPattern;\n }\n if (error === \"mask\") {\n lastErrorKey = this.control.errors[error].requiredMask;\n }\n if (error === \"minlength\" || error === \"maxlength\") {\n param = {\n value: this.control.errors[error].requiredLength\n };\n }\n if (error === \"min\") {\n param = {\n min: this.control.errors[error].min,\n actual: this.control.errors[error].actual\n };\n }\n if (error === \"max\") {\n param = {\n min: this.control.errors[error].max,\n actual: this.control.errors[error].actual\n };\n }\n\n if (typeof this.control.errors[error] === \"object\" && !param) {\n param = this.control.errors[error];\n }\n\n this.setError(this.translateService.instant(`errors.${lastErrorKey}`, param));\n break;\n }\n }\n }\n } else {\n this.setError(\"\");\n }\n }\n\n public setError(text: string): void {\n if (!this.ref) {\n this.ref = this.vcr.createComponent(NiceFormErrorComponent);\n this.el.nativeElement\n .getElementsByClassName(\"mat-form-field-wrapper\")\n .item(0)\n .getElementsByClassName(\"mat-form-field-subscript-wrapper\")\n .item(0)\n .appendChild(this.ref.location.nativeElement);\n }\n this.ref.instance.error = text;\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NiceFormErrorComponent } from \"./form-error.component\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { CommonModule } from \"@angular/common\";\nimport { NiceControlStatusDirective } from \"./control-status.directive\";\n\n@NgModule({\n imports: [CommonModule, MatFormFieldModule],\n declarations: [NiceFormErrorComponent, NiceControlStatusDirective],\n exports: [NiceFormErrorComponent, NiceControlStatusDirective],\n entryComponents: [NiceFormErrorComponent]\n})\nexport class NiceFormErrorModule {\n}\n","import {\n Component, EventEmitter, Output,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { CdkStep, CdkStepper } from \"@angular/cdk/stepper\";\nimport { animate, state, style, transition, trigger } from \"@angular/animations\";\n\n@Component({\n selector: \"nice-horizontal-stepper\",\n templateUrl: \"horizontal-stepper.template.html\",\n styleUrls: [\"./horizontal-stepper.style.scss\"],\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: CdkStepper, useExisting: NiceHorizontalStepperComponent }],\n animations: [trigger(\"stepTransition\", [\n state(\"previous\", style({ transform: \"translate3d(-100%, 0, 0)\", visibility: \"hidden\" })),\n state(\"current\", style({ transform: \"none\", visibility: \"visible\" })),\n state(\"next\", style({ transform: \"translate3d(100%, 0, 0)\", visibility: \"hidden\" })),\n transition(\"* => *\", animate(\"500ms cubic-bezier(0.35, 0, 0.25, 1)\"))\n ])]\n})\nexport class NiceHorizontalStepperComponent extends CdkStepper {\n @Output()\n private onStepperClick = new EventEmitter<number>();\n\n public onClick(step: CdkStep, index: number): void {\n step.select();\n this.onStepperClick.emit(index);\n }\n}\n","<section class=\"stepper-container\">\n <div class=\"flex justify-center content-center items-center\">\n <button\n class=\"step\"\n *ngFor=\"let step of steps; let i = index\"\n [ngClass]=\"{ 'active': selectedIndex === i }\"\n (click)=\"onClick(step, i)\"\n >\n </button>\n </div>\n <div class=\"mat-horizontal-content-container h-full\">\n <div *ngFor=\"let step of steps; let i = index\"\n class=\"mat-horizontal-stepper-content h-full\" role=\"tabpanel\"\n [@stepTransition]=\"_getAnimationDirection(i)\"\n [id]=\"_getStepContentId(i)\"\n [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n [attr.aria-expanded]=\"selectedIndex === i\">\n <ng-container [ngTemplateOutlet]=\"step.content\"></ng-container>\n </div>\n </div>\n</section>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from \"@angular/core\";\nimport { CdkStep } from \"@angular/cdk/stepper\";\n\n@Component({\n selector: \"nice-step\",\n template: `<ng-template><ng-content></ng-content></ng-template>`,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: CdkStep, useExisting: NiceStepComponent }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NiceStepComponent extends CdkStep {}\n","import { NgModule } from \"@angular/core\";\nimport { NiceHorizontalStepperComponent } from \"./horizontal-stepper.component\";\nimport { CommonModule } from \"@angular/common\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { CdkStepperModule } from \"@angular/cdk/stepper\";\nimport { NiceStepComponent } from \"./step.component\";\n\n@NgModule({\n imports: [\n CommonModule,\n MatButtonModule,\n CdkStepperModule\n ],\n declarations: [NiceStepComponent, NiceHorizontalStepperComponent],\n exports: [NiceStepComponent, NiceHorizontalStepperComponent]\n})\nexport class NiceHorizontalStepperModule {}\n","/*\n * Hermite resize - fast image resize/resample using Hermite filter.\n * https://github.com/viliusle/Hermite-resize\n */\nexport function resizeCanvas(canvas: HTMLCanvasElement, width: number, height: number) {\n const width_source = canvas.width;\n const height_source = canvas.height;\n width = Math.round(width);\n height = Math.round(height);\n\n const ratio_w = width_source / width;\n const ratio_h = height_source / height;\n const ratio_w_half = Math.ceil(ratio_w / 2);\n const ratio_h_half = Math.ceil(ratio_h / 2);\n\n const ctx = canvas.getContext('2d');\n const img = ctx!.getImageData(0, 0, width_source, height_source);\n const img2 = ctx!.createImageData(width, height);\n const data = img.data;\n const data2 = img2.data;\n\n for (let j = 0; j < height; j++) {\n for (let i = 0; i < width; i++) {\n const x2 = (i + j * width) * 4;\n let weight = 0;\n let weights = 0;\n let weights_alpha = 0;\n let gx_r = 0;\n let gx_g = 0;\n let gx_b = 0;\n let gx_a = 0;\n const center_y = j * ratio_h;\n\n const xx_start = Math.floor(i * ratio_w);\n let xx_stop = Math.ceil((i + 1) * ratio_w);\n const yy_start = Math.floor(j * ratio_h);\n let yy_stop = Math.ceil((j + 1) * ratio_h);\n xx_stop = Math.min(xx_stop, width_source);\n yy_stop = Math.min(yy_stop, height_source);\n\n for (let yy = yy_start; yy < yy_stop; yy++) {\n const dy = Math.abs(center_y - yy) / ratio_h_half;\n const center_x = i * ratio_w;\n const w0 = dy * dy; // pre-calc part of w\n for (let xx = xx_start; xx < xx_stop; xx++) {\n const dx = Math.abs(center_x - xx) / ratio_w_half;\n const w = Math.sqrt(w0 + dx * dx);\n if (w >= 1) {\n // pixel too far\n continue;\n }\n // hermite filter\n weight = 2 * w * w * w - 3 * w * w + 1;\n const pos_x = 4 * (xx + yy * width_source);\n // alpha\n gx_a += weight * data[pos_x + 3];\n weights_alpha += weight;\n // colors\n if (data[pos_x + 3] < 255) {\n weight = weight * data[pos_x + 3] / 250;\n }\n gx_r += weight * data[pos_x];\n gx_g += weight * data[pos_x + 1];\n gx_b += weight * data[pos_x + 2];\n weights += weight;\n }\n }\n data2[x2] = gx_r / weights;\n data2[x2 + 1] = gx_g / weights;\n data2[x2 + 2] = gx_b / weights;\n data2[x2 + 3] = gx_a / weights_alpha;\n }\n }\n\n // clear and resize canvas\n canvas.width = width;\n canvas.height = height;\n\n // draw\n ctx!.putImageData(img2, 0, 0);\n return ctx;\n}\n","/**\n * Adapted from https://github.com/A-l-y-l-e/Alyle-UI/tree/10.5.3/src/lib/image-cropper\n */\n\nimport { normalizePassiveListenerOptions } from \"@angular/cdk/platform\";\nimport { ViewportRuler } from \"@angular/cdk/scrolling\";\nimport { DOCUMENT } from \"@angular/common\";\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter, HostBinding,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n ViewChild,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { Observable, Subject } from \"rxjs\";\nimport { take, takeUntil } from \"rxjs/operators\";\nimport { resizeCanvas } from \"./resize-canvas\";\n\nconst activeEventOptions = normalizePassiveListenerOptions({ passive: false });\n\n/** Image Cropper Config */\nexport class ImgCropperConfig {\n /** Cropper area width */\n width = 250;\n /** Cropper area height */\n height = 200;\n minWidth = 40;\n minHeight = 40;\n /** If this is not defined, the new image will be automatically defined. */\n type?: string;\n /** Background color( default: null), if is null in png is transparent but not in jpg. */\n fill?: string | null;\n /**\n * Set anti-aliased (default: true)\n * @deprecated this is not necessary as the cropper will automatically resize the image\n * to the best quality\n */\n antiAliased = true;\n autoCrop?: boolean;\n output?: ImgOutput | ImgResolution = ImgResolution.Default;\n /**\n * Zoom out until the entire image fits into the cropping area.\n * default: false\n */\n extraZoomOut?: boolean;\n /**\n * Emit event `error` if the file size in bytes for the limit.\n * Note: It only works when the image is received from the `<input>` event.\n */\n maxFileSize?: number | null;\n /**\n * Whether the cropper area will be round.\n * This implies that the cropper area will maintain its aspect ratio.\n * default: false\n */\n round?: boolean;\n /**\n * Whether the cropper area is resizable.\n * default: false\n */\n resizableArea?: boolean;\n /**\n * Keep the width and height of the growing area the same according\n * to `ImgCropperConfig.width` and `ImgCropperConfig.height`\n * default: false\n */\n keepAspectRatio?: boolean;\n /**\n * Whether the cropper area is responsive.\n * By default, the width and height of the cropper area is fixed,\n * so can use when the cropper area is larger than its container,\n * otherwise this will bring problems when cropping.\n */\n responsiveArea?: boolean;\n}\n\n/**\n * The output image\n * With this option you can resize the output image.\n * If `width` or `height` are 0, this will be set automatically.\n * Both cannot be 0.\n */\nexport interface ImgOutput {\n /**\n * The cropped image will be resized to this `width`.\n */\n width: number;\n /**\n * Cropped image will be resized to this `height`.\n */\n height: number;\n}\n\n/** Image output */\nexport enum ImgResolution {\n /**\n * The output image will be equal to the initial size of the cropper area.\n */\n Default,\n /** Just crop the image without resizing */\n OriginalImage\n}\n\n/** Image output */\nexport enum ImgCropperError {\n /** The loaded image exceeds the size limit set. */\n Size,\n /** The file loaded is not image. */\n Type,\n /** When the image has not been loaded. */\n Other\n}\n\nexport interface ImgCropperEvent {\n /** Cropped image data URL */\n dataURL?: string;\n name: string | null;\n /** Filetype */\n type?: string;\n /** Cropped area width */\n areaWidth: number;\n /** Cropped area height */\n areaHeight: number;\n /** Cropped image width */\n width: number;\n /** Cropped image height */\n height: number;\n /** Original Image data URL */\n originalDataURL?: string;\n scale: number;\n /** Current rotation in degrees */\n rotation: number;\n /** Size of the image in bytes */\n size: number;\n /** Scaled offset from the left edge of the image */\n left: number;\n /** Scaled offset from the top edge of the image */\n top: number;\n /**\n * Scaled offset from the left edge of the image to center of area\n * Can be used to set image position\n */\n xOrigin: number;\n /**\n * Scaled offset from the top edge of the image to center of area\n * Can be used to set image position\n */\n yOrigin: number;\n /** @deprecated Use `xOrigin & yOrigin` instead. */\n position?: {\n x: number\n y: number\n };\n}\n\nexport interface ImgCropperErrorEvent {\n name?: string;\n /** Size of the image in bytes */\n size: number;\n /** Filetype */\n type: string;\n /** Type of error */\n error: ImgCropperError;\n errorMsg?: string;\n}\n\ninterface ImgRect {\n x: number;\n y: number;\n xc: number;\n yc: number;\n /** transform with */\n wt: number;\n ht: number;\n}\n\nexport interface ImgCropperLoaderConfig {\n name?: string | null;\n /** Filetype */\n type?: string;\n /** Cropped area width */\n areaWidth?: number;\n /** Cropped area height */\n areaHeight?: number;\n /** Cropped image width */\n width?: number;\n /** Cropped image height */\n height?: number;\n /** Original Image data URL */\n originalDataURL: string;\n scale?: number;\n /** Current rotation in degrees */\n rotation?: number;\n /** Size of the image in bytes */\n size?: number;\n /** Offset from the left edge of the image to center of area */\n xOrigin?: number;\n /** Offset from the top edge of the image to center of area */\n yOrigin?: number;\n}\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false,\n selector: \"nice-img-cropper, nice-image-cropper\",\n templateUrl: \"image-cropper.template.html\",\n styleUrls: [\"image-cropper.style.scss\"],\n encapsulation: ViewEncapsulation.None\n})\nexport class NiceImageCropperComponent implements OnInit, OnDestroy {\n static readonly и = \"NiceImageCropper\";\n\n private _currentLoadConfig?: ImgCropperLoaderConfig;\n\n /** Original image */\n private _img: HTMLImageElement;\n private offset?: {\n x: number\n y: number\n left: number\n top: number\n };\n private _scale?: number;\n private _scal3Fix?: number;\n private _minScale?: number;\n private _maxScale?: number;\n /** Initial config */\n private _configPrimary: ImgCropperConfig;\n private _config: ImgCropperConfig;\n private _imgRect: ImgRect = {} as any;\n private _rotation = 0;\n // private _sizeInBytes: number | null;\n private _isSliding: boolean;\n /** Keeps track of the last pointer event that was captured by the crop area. */\n private _lastPointerEvent: MouseEvent | TouchEvent | null;\n private _startPointerEvent: {\n x: number\n y: number\n } | null;\n public _primaryAreaWidth: number;\n public _primaryAreaHeight: number;\n\n public _absoluteScale: number;\n\n /**\n * When is loaded image\n * @internal\n */\n public _isLoadedImg: boolean;\n\n /** When is loaded image & ready for crop */\n public isLoaded: boolean;\n /** When the cropper is ready to be interacted */\n public isReady: boolean;\n public isCropped: boolean;\n\n @ViewChild(\"_imgContainer\", { static: true })\n private _imgContainer: ElementRef;\n\n @ViewChild(\"_area\", { read: ElementRef })\n private _areaRef: ElementRef;\n @ViewChild(\"_imgCanvas\", { static: true })\n private _imgCanvas: ElementRef<HTMLCanvasElement>;\n\n @Input()\n public set config(val: ImgCropperConfig) {\n this._config = mergeDeep({}, new ImgCropperConfig(), val);\n this._configPrimary = mergeDeep({}, this._config);\n this._primaryAreaWidth = this.config.width;\n this._primaryAreaHeight = this.config.height;\n if (\n this._config.round\n && this.config.width !== this.config.height\n ) {\n throw new Error(`${NiceImageCropperComponent.и}: Both width and height must be equal when using \\`ImgCropperConfig.round = true\\``);\n }\n const maxFileSize = this._config.maxFileSize;\n if (maxFileSize) {\n this.maxFileSize = maxFileSize;\n }\n }\n public get config(): ImgCropperConfig {\n return this._config;\n }\n /** Set scale */\n @Input()\n public set scale(val: number | undefined) {\n this.setScale(val);\n }\n public get scale(): number | undefined {\n return this._scale;\n }\n\n /**\n * Emit event `error` if the file size for the limit.\n * Note: It only works when the image is received from the `<input>` event.\n */\n @Input()\n public maxFileSize: number;\n\n /** Get min scale */\n public get minScale(): number | undefined {\n return this._minScale;\n }\n\n @Output()\n private readonly scaleChange = new EventEmitter<number>();\n\n /** Emits minimum supported image scale */\n // tslint:disable-next-line:no-output-rename\n @Output(\"minScale\")\n private readonly minScaleChange = new EventEmitter<number>();\n\n /** Emits maximum supported image scale */\n // tslint:disable-next-line:no-output-rename\n @Output(\"maxScale\")\n private readonly maxScaleChange = new EventEmitter<number>();\n\n /** Emits when the image is loaded */\n @Output()\n private readonly imageLoaded = new EventEmitter<ImgCropperEvent>();\n\n /** Emits when the cropper is ready to be interacted */\n @Output()\n private readonly ready = new EventEmitter<ImgCropperEvent>();\n\n /** On crop new image */\n @Output()\n private readonly cropped = new EventEmitter<ImgCropperEvent>();\n\n /** Emits when the cropper is cleaned */\n @Output()\n private readonly cleaned = new EventEmitter<void>();\n\n /** Emit an error when the loaded image is not valid */\n // tslint:disable-next-line: no-output-native\n @Output()\n private readonly error = new EventEmitter<ImgCropperErrorEvent>();\n\n private _currentInputElement?: HTMLInputElement;\n\n /** Emits whenever the component is destroyed. */\n private readonly _destroy = new Subject<void>();\n\n /** Used to subscribe to global move and end events */\n protected _document: Document;\n\n constructor(\n private _renderer: Renderer2,\n readonly _elementRef: ElementRef<HTMLElement>,\n private cd: ChangeDetectorRef,\n private _ngZone: NgZone,\n @Inject(DOCUMENT) _document: any,\n viewPortRuler: ViewportRuler\n ) {\n this._document = _document;\n viewPortRuler.change()\n .pipe(takeUntil(this._destroy))\n .subscribe(() =>\n this._ngZone.run(() => this.updateCropperPosition())\n );\n }\n\n public ngOnInit(): void {\n this._ngZone.runOutsideAngular(() => {\n const element = this._imgContainer.nativeElement;\n element.addEventListener(\"mousedown\", this._pointerDown, activeEventOptions);\n element.addEventListener(\"touchstart\", this._pointerDown, activeEventOptions);\n });\n }\n\n public ngOnDestroy(): void {\n this._destroy.next();\n this._destroy.complete();\n const element = this._imgContainer.nativeElement;\n this._lastPointerEvent = null;\n this._removeGlobalEvents();\n element.removeEventListener(\"mousedown\", this._pointerDown, activeEventOptions);\n element.removeEventListener(\"touchstart\", this._pointerDown, activeEventOptions);\n }\n\n /** Load image with canvas */\n private _imgLoaded(imgElement: HTMLImageElement): void {\n if (imgElement) {\n this._img = imgElement;\n const canvas = this._imgCanvas.nativeElement;\n canvas.width = imgElement.width;\n canvas.height = imgElement.height;\n const ctx = canvas.getContext(\"2d\");\n ctx.clearRect(0, 0, imgElement.width, imgElement.height);\n ctx.drawImage(imgElement, 0, 0);\n\n /** set min scale */\n this._updateMinScale(canvas);\n this._updateMaxScale();\n }\n }\n\n private _setStylesForContImg(values: { x?: number, y?: number }) {\n const newStyles = { } as any;\n if (values.x != null && values.y != null) {\n const rootRect = this._rootRect();\n const x = rootRect.width / 2 - (values.x);\n const y = rootRect.height / 2 - (values.y);\n\n this._imgRect.x = (values.x);\n this._imgRect.y = (values.y);\n this._imgRect.xc = (x);\n this._imgRect.yc = (y);\n\n }\n newStyles.transform = `translate3d(${(this._imgRect.x)}px,${(this._imgRect.y)}px, 0)`;\n newStyles.transform += `scale(${this._scal3Fix})`;\n newStyles.transformOrigin = `${this._imgRect.xc}px ${this._imgRect.yc}px 0`;\n newStyles[\"-webkit-transform\"] = newStyles.transform;\n newStyles[\"-webkit-transform-origin\"] = newStyles.transformOrigin;\n for (const key in newStyles) {\n if (newStyles.hasOwnProperty(key)) {\n this._renderer.setStyle(this._imgContainer.nativeElement, key, newStyles[key]);\n }\n }\n }\n /**\n * Update area and image position only if needed,\n * this is used when window resize\n */\n public updateCropperPosition(): void {\n if (this.isLoaded) {\n this.updatePosition();\n this._updateAreaIfNeeded();\n }\n }\n\n /** Load Image from input event */\n public selectInputEvent(img: Event) {\n this._currentInputElement = img.target as HTMLInputElement;\n const _img = img.target as HTMLInputElement;\n if (_img.files && _img.files.length !== 1) {\n return;\n }\n const fileSize = _img.files[0].size;\n const fileName = _img.value.replace(/.*(\\/|\\\\)/, \"\");\n\n if (this.maxFileSize && fileSize > this.maxFileSize) {\n const cropEvent: ImgCropperErrorEvent = {\n name: fileName,\n type: _img.files[0].type,\n size: fileSize,\n error: ImgCropperError.Size\n };\n this.clean();\n this.error.emit(cropEvent as ImgCropperErrorEvent);\n return;\n }\n\n new Observable<ProgressEvent>(observer => {\n\n const reader = new FileReader();\n\n reader.onerror = err => observer.error(err);\n reader.onabort = err => observer.error(err);\n reader.onload = (ev) => setTimeout(() => {\n observer.next(ev);\n observer.complete();\n });\n\n reader.readAsDataURL(_img.files[0]);\n })\n .pipe(take(1), takeUntil(this._destroy))\n .subscribe(\n (loadEvent) => {\n const originalDataURL = (loadEvent.target as FileReader).result as string;\n\n this.loadImage({\n name: fileName,\n size: _img.files[0].size, // size in bytes\n type: this.config.type || _img.files[0].type,\n originalDataURL\n });\n\n this.cd.markForCheck();\n },\n () => {\n const cropEvent: ImgCropperErrorEvent = {\n name: fileName,\n size: fileSize,\n error: ImgCropperError.Other,\n errorMsg: \"The File could not be loaded.\",\n type: _img.files[0].type\n };\n this.clean();\n this.error.emit(cropEvent as ImgCropperErrorEvent);\n }\n );\n\n }\n\n /** Set the size of the image, the values can be 0 between 1, where 1 is the original size */\n public setScale(size?: number, noAutoCrop?: boolean) {\n // fix min scale\n const newSize = size >= this.minScale && size <= 1 ? size : this.minScale;\n\n // check\n const changed = size != null && size !== this.scale && newSize !== this.scale;\n this._scale = size;\n if (!changed) {\n return;\n }\n this._scal3Fix = newSize;\n this._updateAbsoluteScale();\n if (this.isLoaded) {\n if (changed) {\n const originPosition = {...this._imgRect};\n this.offset = {\n x: originPosition.x,\n y: originPosition.y,\n left: originPosition.xc,\n top: originPosition.yc\n };\n this._setStylesForContImg({});\n this._simulatePointerMove();\n } else {\n return;\n }\n } else if (this.minScale) {\n this._setStylesForContImg({\n ...this._getCenterPoints()\n });\n } else {\n return;\n }\n\n this.scaleChange.emit(size);\n if (!noAutoCrop) {\n this._cropIfAutoCrop();\n }\n\n }\n\n private _getCenterPoints() {\n const root = this._elementRef.nativeElement as HTMLElement;\n const img = this._imgCanvas.nativeElement;\n const x = (root.offsetWidth - (img.width)) / 2;\n const y = (root.offsetHeight - (img.height)) / 2;\n return {\n x,\n y\n };\n }\n\n /**\n * Fit to screen\n */\n public fitToScreen() {\n const container = this._elementRef.nativeElement as HTMLElement;\n const min = {\n width: container.offsetWidth,\n height: container.offsetHeight\n };\n const { width, height } = this._img;\n const minScale = {\n width: min.width / width,\n height: min.height / height\n };\n const result = Math.max(minScale.width, minScale.height);\n this.setScale(result);\n }\n\n public fit() {\n this.setScale(this.minScale);\n }\n\n private _pointerDown = (event: TouchEvent | MouseEvent) => {\n // Don't do anything if the\n // user is using anything other than the main mouse button.\n if (this._isSliding || (!isTouchEvent(event) && event.button !== 0)) {\n return;\n }\n\n this._ngZone.run(() => {\n this._isSliding = true;\n this.offset = {\n x: this._imgRect.x,\n y: this._imgRect.y,\n left: this._imgRect.xc,\n top: this._imgRect.yc\n };\n this._lastPointerEvent = event;\n this._startPointerEvent = getGesturePointFromEvent(event);\n event.preventDefault();\n this._bindGlobalEvents(event);\n });\n\n }\n\n /**\n * Simulate pointerMove with clientX = 0 and clientY = 0,\n * this is used by `setScale` and `rotate`\n */\n private _simulatePointerMove() {\n this._isSliding = true;\n this._startPointerEvent = {\n x: 0,\n y: 0\n };\n this._pointerMove({\n clientX: 0,\n clientY: 0,\n type: \"n\",\n preventDefault: () => {}\n } as MouseEvent);\n this._isSliding = false;\n this._startPointerEvent = null;\n }\n\n public _markForCheck() {\n this.cd.markForCheck();\n }\n\n /**\n * Called when the user has moved their pointer after\n * starting to drag.\n */\n private _pointerMove = (event: TouchEvent | MouseEvent) => {\n if (this._isSliding) {\n event.preventDefault();\n this._lastPointerEvent = event;\n let x: number | undefined;\n let y: number | undefined;\n const canvas = this._imgCanvas.nativeElement;\n const scaleFix = this._scal3Fix;\n const config = this.config;\n const startP = this.offset;\n const point = getGesturePointFromEvent(event);\n const deltaX = point.x - this._startPointerEvent.x;\n const deltaY = point.y - this._startPointerEvent.y;\n if (!scaleFix || !startP) {\n return;\n }\n\n const isMinScaleY = canvas.height * scaleFix < config.height && config.extraZoomOut;\n const isMinScaleX = canvas.width * scaleFix < config.width && config.extraZoomOut;\n\n const limitLeft = (config.width / 2 / scaleFix) >= startP.left - (deltaX / scaleFix);\n const limitRight = (config.width / 2 / scaleFix) +\n (canvas.width) - (startP.left - (deltaX / scaleFix)) <= config.width / scaleFix;\n const limitTop = ((config.height / 2 / scaleFix) >= (startP.top - (deltaY / scaleFix)));\n const limitBottom = (\n ((config.height / 2 / scaleFix) + (canvas.height) - (startP.top - (deltaY / scaleFix))) <= (config.height / scaleFix)\n );\n\n // Limit for left\n if ((limitLeft && !isMinScaleX) || (!limitLeft && isMinScaleX)) {\n x = startP.x + (startP.left) - (config.width / 2 / scaleFix);\n }\n\n // Limit for right\n if ((limitRight && !isMinScaleX) || (!limitRight && isMinScaleX)) {\n x = startP.x + (startP.left) + (config.width / 2 / scaleFix) - canvas.width;\n }\n\n // Limit for top\n if ((limitTop && !isMinScaleY) || (!limitTop && isMinScaleY)) {\n y = startP.y + (startP.top) - (config.height / 2 / scaleFix);\n }\n\n // Limit for bottom\n if ((limitBottom && !isMinScaleY) || (!limitBottom && isMinScaleY)) {\n y = startP.y + (startP.top) + (config.height / 2 / scaleFix) - canvas.height;\n }\n\n // When press shiftKey, deprecated\n // if (event.srcEvent && event.srcEvent.shiftKey) {\n // if (Math.abs(event.deltaX) === Math.max(Math.abs(event.deltaX), Math.abs(event.deltaY))) {\n // y = this.offset.top;\n // } else {\n // x = this.offset.left;\n // }\n // }\n\n if (x === void 0) { x = (deltaX / scaleFix) + (startP.x); }\n if (y === void 0) { y = (deltaY / scaleFix) + (startP.y); }\n this._setStylesForContImg({\n x, y\n });\n }\n }\n\n public updatePosition(): void;\n public updatePosition(xOrigin: number, yOrigin: number): void;\n public updatePosition(xOrigin?: number, yOrigin?: number): void {\n const hostRect = this._rootRect();\n const areaRect = this._areaCropperRect();\n const areaWidth = areaRect.width > hostRect.width\n ? hostRect.width\n : areaRect.width;\n const areaHeight = areaRect.height > hostRect.height\n ? hostRect.height\n : areaRect.height;\n let x: number;\n let y: number;\n if (xOrigin == null && yOrigin == null) {\n xOrigin = this._imgRect.xc;\n yOrigin = this._imgRect.yc;\n }\n x = (areaRect.left - hostRect.left);\n y = (areaRect.top - hostRect.top);\n x -= (xOrigin - (areaWidth / 2));\n y -= (yOrigin - (areaHeight / 2));\n\n this._setStylesForContImg({\n x, y\n });\n }\n\n public _slideEnd() {\n this._cropIfAutoCrop();\n }\n\n private _cropIfAutoCrop() {\n if (this.config.autoCrop) {\n this.crop();\n }\n }\n\n /** + */\n public zoomIn() {\n const scale = this._scal3Fix + .05;\n if (scale > this.minScale && scale <= this._maxScale) {\n this.setScale(scale);\n } else {\n this.setScale(this._maxScale);\n }\n }\n\n /** Clean the img cropper */\n public clean() {\n // fix choosing the same image does not load\n if (this._currentInputElement) {\n this._currentInputElement.value = \"\";\n this._currentInputElement = null;\n }\n if (this.isLoaded) {\n this._imgRect = { } as any;\n this.offset = undefined;\n this.scale = undefined as any;\n this._scal3Fix = undefined;\n this._rotation = 0;\n this._minScale = undefined;\n this._isLoadedImg = false;\n this.isLoaded = false;\n this.isCropped = false;\n this._currentLoadConfig = undefined;\n this.config = this._configPrimary;\n const canvas = this._imgCanvas.nativeElement;\n canvas.width = 0;\n canvas.height = 0;\n this.cleaned.emit(null);\n this.cd.markForCheck();\n }\n }\n\n /** - */\n public zoomOut() {\n const scale = this._scal3Fix - .05;\n if (scale > this.minScale && scale <= this._maxScale) {\n this.setScale(scale);\n } else {\n this.fit();\n }\n }\n public center() {\n const newStyles = {\n ...this._getCenterPoints()\n };\n this._setStylesForContImg(newStyles);\n this._cropIfAutoCrop();\n }\n /**\n * load an image from a given configuration,\n * or from the result of a cropped image\n */\n public loadImage(config: ImgCropperLoaderConfig | string, fn?: () => void) {\n this.clean();\n const _config = this._currentLoadConfig = typeof config === \"string\"\n ? { originalDataURL: config }\n : { ...config };\n let src = _config.originalDataURL;\n this._primaryAreaWidth = this._configPrimary.width;\n this._primaryAreaHeight = this._configPrimary.height;\n if (_config.areaWidth && _config.areaHeight) {\n this.config.width = _config.areaWidth;\n this.config.height = _config.areaHeight;\n }\n src = normalizeSVG(src);\n\n const img = createHtmlImg(src);\n\n const cropEvent = { ..._config } as ImgCropperEvent;\n\n new Observable<void>(observer => {\n\n img.onerror = err => observer.error(err);\n img.onabort = err => observer.error(err);\n img.onload = () => observer.next(null);\n })\n .pipe(take(1), takeUntil(this._destroy))\n .subscribe(\n () => {\n this._imgLoaded(img);\n this._isLoadedImg = true;\n this.imageLoaded.emit(cropEvent);\n this.cd.markForCheck();\n this._ngZone.runOutsideAngular(() => {\n this._ngZone\n .onStable\n .asObservable()\n .pipe(take(1), takeUntil(this._destroy))\n .subscribe(\n () => setTimeout(() => this._ngZone.run(() => this._positionImg(cropEvent, fn)))\n );\n });\n },\n () => {\n const error: ImgCropperErrorEvent = {\n name: _config.name,\n error: ImgCropperError.Type,\n type: _config.type,\n size: _config.size\n };\n this.error.emit(error);\n }\n );\n }\n\n private _updateAreaIfNeeded() {\n if (!this._config.responsiveArea) {\n return;\n }\n\n const rootRect = this._rootRect();\n const areaRect = this._areaCropperRect();\n const minWidth = this.config.minWidth || 1;\n const minHeight = this.config.minHeight || 1;\n if (!(\n areaRect.width > rootRect.width\n || areaRect.height > rootRect.height\n || areaRect.width < this._primaryAreaWidth\n || areaRect.height < this._primaryAreaHeight\n )) {\n return;\n }\n const areaWidthConf = Math.max(this.config.width, minWidth);\n const areaWidthMax = Math.max(rootRect.width, minWidth);\n const minHost = Math.min(\n Math.max(rootRect.width, minWidth), Math.max(rootRect.height, minHeight)\n );\n const currentScale = this._scal3Fix;\n let newScale = 0;\n const roundConf = this.config.round;\n\n if (roundConf) {\n this.config.width = this.config.height = minHost;\n } else {\n if (areaWidthConf === areaRect.width) {\n if (areaWidthMax > this._primaryAreaWidth) {\n this.config.width = this._primaryAreaWidth;\n this.config.height = (this._primaryAreaWidth * areaRect.height) / areaRect.width;\n newScale = (currentScale * this._primaryAreaWidth) / areaRect.width;\n } else {\n this.config.width = areaWidthMax;\n this.config.height = (areaWidthMax * areaRect.height) / areaRect.width;\n newScale = (currentScale * areaWidthMax) / areaRect.width;\n }\n this._updateMinScale();\n this._updateMaxScale();\n this.setScale(newScale, true);\n this._markForCheck();\n }\n }\n }\n\n private _updateAbsoluteScale() {\n const scale = this._scal3Fix / (this.config.width / this._primaryAreaWidth);\n this._absoluteScale = scale;\n }\n\n /**\n * Load Image from URL\n * @deprecated Use `loadImage` instead of `setImageUrl`\n * @param src URL\n * @param fn function that will be called before emit the event loaded\n */\n public setImageUrl(src: string, fn?: () => void) {\n this.loadImage(src, fn);\n }\n\n private _positionImg(cropEvent: ImgCropperEvent, fn?: () => void) {\n const loadConfig = this._currentLoadConfig;\n this._updateMinScale(this._imgCanvas.nativeElement);\n this._updateMaxScale();\n this.isLoaded = false;\n if (fn) {\n fn();\n } else {\n if (loadConfig.scale) {\n this.setScale(loadConfig.scale, true);\n } else {\n this.setScale(this.minScale, true);\n }\n this.rotate(loadConfig.rotation || 0);\n this._updateAreaIfNeeded();\n this._markForCheck();\n this._ngZone.runOutsideAngular(() => {\n this._ngZone\n .onStable\n .asObservable()\n .pipe(take(1), takeUntil(this._destroy))\n .subscribe(() => {\n if (loadConfig.xOrigin != null && loadConfig.yOrigin != null) {\n this.updatePosition(loadConfig.xOrigin, loadConfig.yOrigin);\n }\n this._updateAreaIfNeeded();\n this.isLoaded = true;\n this._cropIfAutoCrop();\n this._ngZone.run(() => {\n this._markForCheck();\n this.ready.emit(cropEvent);\n });\n });\n });\n }\n }\n\n public rotate(degrees: number) {\n let validDegrees = _normalizeDegrees(degrees);\n // If negative convert to positive\n if (validDegrees < 0) {\n validDegrees += 360;\n }\n const newRotation = _normalizeDegrees((this._rotation || 0) + validDegrees);\n if (newRotation === this._rotation) {\n return;\n }\n const degreesRad = validDegrees * Math.PI / 180;\n const canvas = this._imgCanvas.nativeElement;\n const canvasClon = createCanvasImg(canvas);\n const ctx = canvas.getContext(\"2d\");\n this._rotation = newRotation;\n\n // clear\n ctx.clearRect(0, 0, canvasClon.width, canvasClon.height);\n\n // rotate canvas image\n const transform = `rotate(${validDegrees}deg) scale(${1 / this._scal3Fix})`;\n const transformOrigin = `${this._imgRect.xc}px ${this._imgRect.yc}px 0`;\n canvas.style.transform = transform;\n // tslint:disable-next-line: deprecation\n canvas.style.webkitTransform = transform;\n canvas.style.transformOrigin = transformOrigin;\n // tslint:disable-next-line: deprecation\n canvas.style.webkitTransformOrigin = transformOrigin;\n\n const { left, top } = canvas.getBoundingClientRect() as DOMRect;\n\n // save rect\n const canvasRect = canvas.getBoundingClientRect();\n\n // remove rotate styles\n canvas.removeAttribute(\"style\");\n\n // set w & h\n const w = canvasRect.width;\n const h = canvasRect.height;\n ctx.canvas.width = w;\n ctx.canvas.height = h;\n\n // clear\n ctx.clearRect(0, 0, w, h);\n\n // translate and rotate\n ctx.translate(w / 2, h / 2);\n ctx.rotate(degreesRad);\n ctx.drawImage(canvasClon, -canvasClon.width / 2, -canvasClon.height / 2);\n\n // Update min scale\n this._updateMinScale(canvas);\n this._updateMaxScale();\n\n // set the minimum scale, only if necessary\n if (this.scale < this.minScale) {\n this.setScale(0, true);\n } // ↑ no AutoCrop\n\n const rootRect = this._rootRect();\n\n this._setStylesForContImg({\n x: (left - rootRect.left),\n y: (top - rootRect.top)\n });\n\n // keep image inside the frame\n const originPosition = {...this._imgRect};\n this.offset = {\n x: originPosition.x,\n y: originPosition.y,\n left: originPosition.xc,\n top: originPosition.yc\n };\n this._setStylesForContImg({});\n this._simulatePointerMove();\n\n this._cropIfAutoCrop();\n }\n\n public _updateMinScale(canvas?: HTMLCanvasElement) {\n if (!canvas) {\n canvas = this._imgCanvas.nativeElement;\n }\n const config = this.config;\n const minScale = (config.extraZoomOut ? Math.min : Math.max)(\n config.width / canvas.width,\n config.height / canvas.height);\n this._minScale = minScale;\n this.minScaleChange.emit(minScale);\n }\n\n private _updateMaxScale() {\n const maxScale = (this.config.width / this._primaryAreaWidth);\n this._maxScale = maxScale;\n this.maxScaleChange.emit(maxScale);\n }\n\n /**\n * Resize & crop image\n */\n public crop(config?: ImgCropperConfig): ImgCropperEvent {\n const newConfig = config\n ? mergeDeep({ }, this.config || new ImgCropperConfig(), config) : this.config;\n const cropEvent = this._imgCrop(newConfig);\n this.cd.markForCheck();\n return cropEvent;\n }\n\n /**\n * @docs-private\n */\n private _imgCrop(myConfig: ImgCropperConfig) {\n const canvasElement: HTMLCanvasElement = document.createElement(\"canvas\");\n const areaRect = this._areaCropperRect();\n const canvasRect = this._canvasRect();\n const scaleFix = this._scal3Fix;\n const left = (areaRect.left - canvasRect.left) / scaleFix;\n const top = (areaRect.top - canvasRect.top) / scaleFix;\n const { output } = myConfig;\n const currentImageLoadConfig = this._currentLoadConfig;\n const area = {\n width: myConfig.width,\n height: myConfig.height\n };\n canvasElement.width = area.width / scaleFix;\n canvasElement.height = area.height / scaleFix;\n const ctx = canvasElement.getContext(\"2d\");\n if (myConfig.fill) {\n ctx.fillStyle = myConfig.fill;\n ctx.fillRect(0, 0, canvasElement.width, canvasElement.height);\n }\n ctx.drawImage(this._imgCanvas.nativeElement,\n -(left), -(top),\n );\n const result = canvasElement;\n if (myConfig.output === ImgResolution.Default) {\n resizeCanvas(\n result,\n this._configPrimary.width,\n this._configPrimary.height);\n } else if (typeof output === \"object\") {\n if (output.width && output.height) {\n resizeCanvas(result, output.width, output.height);\n } else if (output.width) {\n const newHeight = area.height * output.width / area.width;\n resizeCanvas(result, output.width, newHeight);\n } else if (output.height) {\n const newWidth = area.width * output.height / area.height;\n resizeCanvas(result, newWidth, output.height);\n }\n }\n const type = currentImageLoadConfig.originalDataURL.startsWith(\"http\")\n ? currentImageLoadConfig.type || myConfig.type\n : myConfig.type || currentImageLoadConfig.type;\n const dataURL = result.toDataURL(type);\n const cropEvent: ImgCropperEvent = {\n dataURL,\n type,\n name: currentImageLoadConfig.name,\n areaWidth: this._primaryAreaWidth,\n areaHeight: this._primaryAreaHeight,\n width: result.width,\n height: result.height,\n originalDataURL: currentImageLoadConfig.originalDataURL,\n scale: this._absoluteScale,\n rotation: this._rotation,\n left: (areaRect.left - canvasRect.left) / this._scal3Fix,\n top: (areaRect.top - canvasRect.top) / this._scal3Fix,\n size: currentImageLoadConfig.size,\n xOrigin: this._imgRect.xc,\n yOrigin: this._imgRect.yc,\n position: {\n x: this._imgRect.xc,\n y: this._imgRect.yc\n }\n };\n\n this.isCropped = true;\n this.cropped.emit(cropEvent);\n return cropEvent;\n }\n\n public _rootRect(): DOMRect {\n return this._elementRef.nativeElement.getBoundingClientRect() as DOMRect;\n }\n\n public _areaCropperRect(): DOMRect {\n return this._areaRef.nativeElement.getBoundingClientRect() as DOMRect;\n }\n\n public _canvasRect(): DOMRect {\n return this._imgCanvas.nativeElement.getBoundingClientRect();\n }\n\n\n /** Called when the user has lifted their pointer. */\n private _pointerUp = (event: TouchEvent | MouseEvent) => {\n if (this._isSliding) {\n event.preventDefault();\n this._removeGlobalEvents();\n this._isSliding = false;\n this._startPointerEvent = null;\n this._cropIfAutoCrop();\n }\n }\n\n /** Called when the window has lost focus. */\n private _windowBlur = () => {\n // If the window is blurred while dragging we need to stop dragging because the\n // browser won't dispatch the `mouseup` and `touchend` events anymore.\n if (this._lastPointerEvent) {\n this._pointerUp(this._lastPointerEvent);\n }\n }\n\n private _bindGlobalEvents(triggerEvent: TouchEvent | MouseEvent) {\n const element = this._document;\n const isTouch = isTouchEvent(triggerEvent);\n const moveEventName = isTouch ? \"touchmove\" : \"mousemove\";\n const endEventName = isTouch ? \"touchend\" : \"mouseup\";\n element.addEventListener(moveEventName, this._pointerMove, activeEventOptions);\n element.addEventListener(endEventName, this._pointerUp, activeEventOptions);\n\n if (isTouch) {\n element.addEventListener(\"touchcancel\", this._pointerUp, activeEventOptions);\n }\n\n const window = this._getWindow();\n\n if (typeof window !== \"undefined\" && window) {\n window.addEventListener(\"blur\", this._windowBlur);\n }\n }\n\n /** Removes any global event listeners that we may have added. */\n private _removeGlobalEvents() {\n const element = this._document;\n element.removeEventListener(\"mousemove\", this._pointerMove, activeEventOptions);\n element.removeEventListener(\"mouseup\", this._pointerUp, activeEventOptions);\n element.removeEventListener(\"touchmove\", this._pointerMove, activeEventOptions);\n element.removeEventListener(\"touchend\", this._pointerUp, activeEventOptions);\n element.removeEventListener(\"touchcancel\", this._pointerUp, activeEventOptions);\n\n const window = this._getWindow();\n\n if (typeof window !== \"undefined\" && window) {\n window.removeEventListener(\"blur\", this._windowBlur);\n }\n }\n\n /** Use defaultView of injected document if available or fallback to global window reference */\n private _getWindow(): Window {\n return this._document.defaultView || window;\n }\n\n}\n\n/**\n * Normalize degrees for cropper rotation\n * @docs-private\n */\nexport function _normalizeDegrees(n: number) {\n const de = n % 360;\n if (de % 90) {\n throw new Error(`LyCropper: Invalid \\`${n}\\` degree, only accepted values: 0, 90, 180, 270 & 360.`);\n }\n return de;\n}\n\n/**\n * @docs-private\n */\nfunction createCanvasImg(img: HTMLCanvasElement | HTMLImageElement) {\n\n // create a new canvas\n const newCanvas = document.createElement(\"canvas\");\n const context = newCanvas.getContext(\"2d\");\n\n // set dimensions\n newCanvas.width = img.width;\n newCanvas.height = img.height;\n\n // apply the old canvas to the new one\n context.drawImage(img, 0, 0);\n\n // return the new canvas\n return newCanvas;\n}\n\n\nconst DATA_IMAGE_SVG_PREFIX = \"data:image/svg+xml;base64,\";\n\nfunction normalizeSVG(dataURL: string) {\n if (window.atob && isSvgImage(dataURL)) {\n const len = dataURL.length / 5;\n const text = window.atob(dataURL.replace(DATA_IMAGE_SVG_PREFIX, \"\"));\n const span = document.createElement(\"span\");\n span.innerHTML = text;\n const svg = span.querySelector(\"svg\");\n span.setAttribute(\"style\", \"display:none\");\n document.body.appendChild(span);\n const width = parseFloat(getComputedStyle(svg).width) || 1;\n const height = parseFloat(getComputedStyle(svg).height) || 1;\n const max = Math.max(width, height);\n\n svg.setAttribute(\"width\", `${len / (width / max)}px`);\n svg.setAttribute(\"height\", `${len / (height / max)}px`);\n const result = DATA_IMAGE_SVG_PREFIX + window.btoa(span.innerHTML);\n document.body.removeChild(span);\n return result;\n }\n return dataURL;\n}\n\nfunction isSvgImage(dataUrl: string) {\n return dataUrl.startsWith(DATA_IMAGE_SVG_PREFIX);\n}\n\nfunction createHtmlImg(src: string) {\n const img = new Image();\n img.crossOrigin = \"anonymous\";\n img.src = src;\n return img;\n}\n\n\nfunction getGesturePointFromEvent(event: TouchEvent | MouseEvent) {\n\n // `touches` will be empty for start/end events so we have to fall back to `changedTouches`.\n const point = isTouchEvent(event)\n ? (event.touches[0] || event.changedTouches[0])\n : event;\n\n return {\n x: point.clientX,\n y: point.clientY\n };\n}\n\n/** Returns whether an event is a touch event. */\nfunction isTouchEvent(event: MouseEvent | TouchEvent): event is TouchEvent {\n return event.type[0] === \"t\";\n}\n\nexport function round(n: number) {\n return Math.round(n);\n}\n\n/**\n * Simple object check.\n * @param item\n */\nfunction isObject(item) {\n return (item && typeof item === \"object\" && !Array.isArray(item));\n}\n\nexport function mergeDeep<T, U>(target: T, source: U): T & U;\nexport function mergeDeep<T, U, V>(target: T, source1: U, source2: V): T & U & V;\nexport function mergeDeep<T, U, V, W>(target: T, source1: U, source2: V, source3: W): T & U & V & W;\nexport function mergeDeep(target: object, ...sources: any[]): any;\n\n/**\n * Deep merge two objects.\n * @param target\n * @param ...sources\n */\nexport function mergeDeep(target: any, ...sources: any[]) {\n if (!sources.length) { return target; }\n const source = sources.shift();\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) { Object.assign(target, { [key]: {} }); }\n mergeDeep(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return mergeDeep(target, ...sources);\n}\n\n\n/**\n * We have the cropper area in the same file to fix the build\n */\n\n@Component({\n selector: \"nice-cropper-area\",\n templateUrl: \"./image-cropper-area.template.html\",\n styleUrls: [\"./image-cropper-area.style.scss\"],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceCropperAreaComponent implements OnDestroy {\n @ViewChild(\"resizer\")\n private readonly _resizer?: ElementRef;\n\n @Input()\n public keepAspectRatio: boolean;\n\n @Input()\n @HostBinding(\"class.round\")\n public round: boolean;\n\n /** Used to subscribe to global move and end events */\n protected _document: Document;\n private _isSliding: boolean;\n\n /** Keeps track of the last pointer event that was captured by the crop area. */\n private _lastPointerEvent: MouseEvent | TouchEvent | null;\n private _startPointerEvent: {\n x: number\n y: number\n } | null;\n private _currentWidth: number;\n private _currentHeight: number;\n private _startAreaRect: DOMRect;\n private _startImgRect: DOMRect;\n\n constructor(\n @Inject(DOCUMENT) _document: any,\n private readonly _elementRef: ElementRef,\n private readonly _cropper: NiceImageCropperComponent,\n private readonly _ngZone: NgZone,\n ) {\n this._document = _document;\n }\n\n private _resizableArea: boolean;\n\n @Input()\n public set resizableArea(val: boolean) {\n if (val !== this._resizableArea) {\n this._resizableArea = val;\n Promise.resolve(null).then(() => {\n if (val) {\n this._removeResizableArea();\n this._addResizableArea();\n } else {\n this._removeResizableArea();\n }\n });\n }\n }\n public get resizableArea() {\n return this._resizableArea;\n }\n\n public ngOnDestroy() {\n this._removeResizableArea();\n }\n\n private _addResizableArea() {\n this._ngZone.runOutsideAngular(() => {\n const element = this._resizer.nativeElement;\n element.addEventListener(\"mousedown\", this._pointerDown, activeEventOptions);\n element.addEventListener(\"touchstart\", this._pointerDown, activeEventOptions);\n });\n }\n\n private _removeResizableArea() {\n const element = this._resizer?.nativeElement;\n if (element) {\n this._lastPointerEvent = null;\n this._removeGlobalEvents();\n element.removeEventListener(\"mousedown\", this._pointerDown, activeEventOptions);\n element.removeEventListener(\"touchstart\", this._pointerDown, activeEventOptions);\n }\n }\n\n private _pointerDown = (event: MouseEvent | TouchEvent) => {\n // Don't do anything if the\n // user is using anything other than the main mouse button.\n if (this._isSliding || (!isTouchEvent(event) && event.button !== 0)) {\n return;\n }\n\n event.preventDefault();\n\n this._ngZone.run(() => {\n this._isSliding = true;\n this._lastPointerEvent = event;\n this._startPointerEvent = getGesturePointFromEvent(event);\n this._startAreaRect = this._cropper._areaCropperRect();\n this._startImgRect = this._cropper._canvasRect();\n event.preventDefault();\n this._bindGlobalEvents(event);\n });\n }\n\n private _pointerMove = (event: MouseEvent | TouchEvent) => {\n if (this._isSliding) {\n event.preventDefault();\n this._lastPointerEvent = event;\n const element: HTMLDivElement = this._elementRef.nativeElement;\n const {width, height, minWidth, minHeight} = this._cropper.config;\n const point = getGesturePointFromEvent(event);\n const deltaX = point.x - this._startPointerEvent.x;\n const deltaY = point.y - this._startPointerEvent.y;\n const startAreaRect = this._startAreaRect;\n const startImgRect = this._startImgRect;\n const isRound = this.round;\n const keepAspectRatio = this._cropper.config.keepAspectRatio || event.shiftKey;\n let newWidth = 0;\n let newHeight = 0;\n const rootRect = this._cropper._rootRect();\n\n if (isRound) {\n // The distance from the center of the cropper area to the pointer\n const originX = ((width / 2 / Math.sqrt(2)) + deltaX);\n const originY = ((height / 2 / Math.sqrt(2)) + deltaY);\n\n // Leg\n const side = Math.sqrt(originX ** 2 + originY ** 2);\n newWidth = newHeight = side * 2;\n\n } else if (keepAspectRatio) {\n newWidth = width + deltaX * 2;\n newHeight = height + deltaY * 2;\n if (width !== height) {\n if (width > height) {\n newHeight = height / (width / newWidth);\n } else if (height > width) {\n newWidth = width / (height / newHeight);\n }\n } else {\n newWidth = newHeight = Math.max(newWidth, newHeight);\n }\n } else {\n newWidth = width + deltaX * 2;\n newHeight = height + deltaY * 2;\n }\n\n // To min width\n if (newWidth < minWidth) {\n newWidth = minWidth;\n }\n // To min height\n if (newHeight < minHeight) {\n newHeight = minHeight;\n }\n\n // Do not overflow the cropper area\n const centerX = startAreaRect.x + startAreaRect.width / 2;\n const centerY = startAreaRect.y + startAreaRect.height / 2;\n const topOverflow = startImgRect.y > centerY - (newHeight / 2);\n const bottomOverflow = centerY + (newHeight / 2) > startImgRect.bottom;\n const minHeightOnOverflow = Math.min((centerY - startImgRect.y) * 2, (startImgRect.bottom - centerY) * 2);\n const leftOverflow = startImgRect.x > centerX - (newWidth / 2);\n const rightOverflow = centerX + (newWidth / 2) > startImgRect.right;\n const minWidthOnOverflow = Math.min((centerX - startImgRect.x) * 2, (startImgRect.right - centerX) * 2);\n const minOnOverflow = Math.min(minWidthOnOverflow, minHeightOnOverflow);\n if (round) {\n if (topOverflow || bottomOverflow || leftOverflow || rightOverflow) {\n newHeight = newWidth = minOnOverflow;\n }\n } else if (keepAspectRatio) {\n const newNewWidth: number[] = [];\n const newNewHeight: number[] = [];\n if ((topOverflow || bottomOverflow) && Math.min()) {\n newHeight = minHeightOnOverflow;\n newNewHeight.push(newHeight);\n newWidth = width / (height / minHeightOnOverflow);\n newNewWidth.push(newWidth);\n }\n if ((leftOverflow || rightOverflow)) {\n newWidth = minWidthOnOverflow;\n newNewWidth.push(newWidth);\n newHeight = height / (width / minWidthOnOverflow);\n newNewHeight.push(newHeight);\n }\n if (newNewWidth.length === 2) {\n newWidth = Math.min(...newNewWidth);\n }\n if (newNewHeight.length === 2) {\n newHeight = Math.min(...newNewHeight);\n }\n } else {\n if (topOverflow || bottomOverflow) {\n newHeight = minHeightOnOverflow;\n }\n if (leftOverflow || rightOverflow) {\n newWidth = minWidthOnOverflow;\n }\n }\n\n // Do not overflow the container\n if (round) {\n const min = Math.min(rootRect.width, rootRect.height);\n if (newWidth > min) {\n newWidth = newHeight = min;\n } else if (newHeight > min) {\n newWidth = newHeight = min;\n }\n } else if (keepAspectRatio) {\n if (newWidth > rootRect.width) {\n newWidth = rootRect.width;\n newHeight = height / (width / rootRect.width);\n } else if (newHeight > rootRect.height) {\n newWidth = width / (height / rootRect.height);\n newHeight = rootRect.height;\n }\n } else {\n if (newWidth > rootRect.width) {\n newWidth = rootRect.width;\n } else if (newHeight > rootRect.height) {\n newHeight = rootRect.height;\n }\n }\n\n\n // round values\n newWidth = Math.round(newWidth);\n newHeight = Math.round(newHeight);\n\n element.style.width = `${newWidth}px`;\n element.style.height = `${newHeight}px`;\n this._currentWidth = newWidth;\n this._currentHeight = newHeight;\n }\n }\n\n /** Called when the user has lifted their pointer. */\n private _pointerUp = (event: TouchEvent | MouseEvent) => {\n if (this._isSliding) {\n event.preventDefault();\n this._removeGlobalEvents();\n this._cropper._primaryAreaWidth = this._cropper.config.width = this._currentWidth;\n this._cropper._primaryAreaHeight = this._cropper.config.height = this._currentHeight;\n this._cropper.config = this._cropper.config;\n this._cropper._updateMinScale();\n this._isSliding = false;\n this._startPointerEvent = null;\n }\n }\n\n /** Called when the window has lost focus. */\n private _windowBlur = () => {\n // If the window is blurred while dragging we need to stop dragging because the\n // browser won't dispatch the `mouseup` and `touchend` events anymore.\n if (this._lastPointerEvent) {\n this._pointerUp(this._lastPointerEvent);\n }\n }\n\n private _bindGlobalEvents(triggerEvent: TouchEvent | MouseEvent) {\n const element = this._document;\n const isTouch = isTouchEvent(triggerEvent);\n const moveEventName = isTouch ? \"touchmove\" : \"mousemove\";\n const endEventName = isTouch ? \"touchend\" : \"mouseup\";\n element.addEventListener(moveEventName, this._pointerMove, activeEventOptions);\n element.addEventListener(endEventName, this._pointerUp, activeEventOptions);\n\n if (isTouch) {\n element.addEventListener(\"touchcancel\", this._pointerUp, activeEventOptions);\n }\n\n const window = this._getWindow();\n\n if (typeof window !== \"undefined\" && window) {\n window.addEventListener(\"blur\", this._windowBlur);\n }\n }\n\n /** Removes any global event listeners that we may have added. */\n private _removeGlobalEvents() {\n const element = this._document;\n element.removeEventListener(\"mousemove\", this._pointerMove, activeEventOptions);\n element.removeEventListener(\"mouseup\", this._pointerUp, activeEventOptions);\n element.removeEventListener(\"touchmove\", this._pointerMove, activeEventOptions);\n element.removeEventListener(\"touchend\", this._pointerUp, activeEventOptions);\n element.removeEventListener(\"touchcancel\", this._pointerUp, activeEventOptions);\n\n const window = this._getWindow();\n\n if (typeof window !== \"undefined\" && window) {\n window.removeEventListener(\"blur\", this._windowBlur);\n }\n }\n\n /** Use defaultView of injected document if available or fallback to global window reference */\n private _getWindow(): Window {\n return this._document.defaultView || window;\n }\n}\n","<!-- (selectstart): On Safari starting to slide temporarily triggers text selection mode which\nshow the wrong cursor. We prevent it by stopping the `selectstart` event. -->\n<div class=\"image-container\" #_imgContainer\n (selectstart)=\"$event.preventDefault()\"\n>\n <canvas #_imgCanvas></canvas>\n</div>\n<nice-cropper-area\n #_area\n *ngIf=\"_isLoadedImg\"\n [round]=\"!!config.round\"\n [resizableArea]=\"!!config.resizableArea\"\n [keepAspectRatio]=\"!!config.keepAspectRatio\"\n [ngStyle]=\"{\n width: config.width + 'px',\n height: config.height + 'px'\n }\"\n></nice-cropper-area>\n<button class=\"close-button\" mat-icon-button *ngIf=\"_isLoadedImg\" (click)=\"clean()\">\n <mat-icon>arrow_back</mat-icon>\n</button>\n","<div class=\"resizer\" #resizer *ngIf=\"resizableArea\"></div>\n","/**\n * Adapted from https://github.com/A-l-y-l-e/Alyle-UI/tree/10.5.3/src/lib/image-cropper\n */\n\nimport { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatIconModule } from \"@angular/material/icon\";\n\nimport { NiceCropperAreaComponent, NiceImageCropperComponent } from \"./image-cropper.component\";\n\n@NgModule({\n imports: [CommonModule, MatButtonModule, MatIconModule],\n declarations: [NiceImageCropperComponent, NiceCropperAreaComponent],\n exports: [NiceImageCropperComponent]\n})\nexport class NiceImageCropperModule {}\n","import { DOCUMENT } from \"@angular/common\";\nimport { Component, Inject, OnDestroy, OnInit, Renderer2 } from \"@angular/core\";\nimport { combineLatest, Subject } from \"rxjs\";\nimport { map, takeUntil } from \"rxjs/operators\";\nimport { NiceConfigService, NiceMediaWatcherService } from \"../../providers\";\nimport { NiceConfig, Scheme } from \"../../providers/config/config.model\";\n\n@Component({\n selector: \"nice-layout\",\n template: `<ng-content></ng-content>`\n})\nexport class NiceLayoutComponent implements OnInit, OnDestroy {\n private config: NiceConfig;\n private scheme: Scheme;\n private theme: string;\n private _unsubscribeAll: Subject<any> = new Subject<any>();\n\n /**\n * Constructor\n */\n constructor(\n @Inject(DOCUMENT) private _document: any,\n private _renderer2: Renderer2,\n private _niceConfigService: NiceConfigService,\n private _niceMediaWatcherService: NiceMediaWatcherService\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Set the theme and scheme based on the configuration\n combineLatest([\n this._niceConfigService.config$,\n this._niceMediaWatcherService.onMediaQueryChange$([\"(prefers-color-scheme: dark)\", \"(prefers-color-scheme: light)\"])\n ]).pipe(\n takeUntil(this._unsubscribeAll),\n map(([config, mql]) => {\n const options = {\n scheme: config.scheme,\n theme: config.theme\n };\n\n if (config.scheme === \"auto\") {\n options.scheme = mql.breakpoints[\"(prefers-color-scheme: dark)\"] ? \"dark\" : \"light\";\n }\n\n return options;\n })\n ).subscribe((options) => {\n this.scheme = options.scheme;\n this.theme = options.theme;\n\n this._updateScheme();\n this._updateTheme();\n });\n\n // Subscribe to config changes\n this._niceConfigService.config$\n .pipe(takeUntil(this._unsubscribeAll))\n .subscribe((config: NiceConfig) => {\n this.config = config;\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n\n /**\n * Update the selected scheme\n *\n * @private\n */\n private _updateScheme(): void {\n // Remove class names for all schemes\n this._document.body.classList.remove(\"light\", \"dark\");\n\n // Add class name for the currently selected scheme\n this._document.body.classList.add(this.scheme);\n }\n\n /**\n * Update the selected theme\n *\n * @private\n */\n private _updateTheme(): void {\n // Find the class name for the previously selected theme and remove it\n this._document.body.classList.forEach((className: string) => {\n if (className.startsWith(\"theme-\")) {\n this._document.body.classList.remove(className, className.split(\"-\")[1]);\n }\n });\n\n // Add class name for the currently selected theme\n this._document.body.classList.add(`theme-${this.theme}`);\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { NiceLayoutComponent } from \"./layout.component\";\n\n@NgModule({\n imports: [],\n declarations: [NiceLayoutComponent],\n providers: [],\n exports: [NiceLayoutComponent]\n})\nexport class NiceLayoutModule {}\n","import { Component, Input } from \"@angular/core\";\nimport { ProgressSpinnerMode } from \"@angular/material/progress-spinner\";\n\n@Component({\n selector: \"nice-loading-spinner\",\n templateUrl: \"loading-spinner.template.html\",\n styleUrls: [\"./loading-spinner.style.scss\"]\n})\nexport class NiceLoadingSpinnerComponent {\n @Input()\n public loading: boolean;\n\n @Input()\n mode: ProgressSpinnerMode = \"indeterminate\";\n\n @Input()\n diameter = 50;\n}\n","<mat-spinner [diameter]=\"diameter\" [mode]=\"mode\" [color]=\"'accent'\"></mat-spinner>\n","import { OverlayContainer } from \"@angular/cdk/overlay\";\nimport { Injectable } from \"@angular/core\";\n\n@Injectable()\nexport class DynamicOverlayContainer extends OverlayContainer {\n public setContainerElement(containerElement: HTMLElement): void {\n this._containerElement = containerElement;\n }\n}\n","import { Overlay, OverlayKeyboardDispatcher, OverlayPositionBuilder, ScrollStrategyOptions, OverlayOutsideClickDispatcher } from \"@angular/cdk/overlay\";\nimport { ComponentFactoryResolver, Inject, Injectable, Injector, NgZone, Renderer2, RendererFactory2 } from \"@angular/core\";\nimport { DynamicOverlayContainer } from \"./dynamic-overlay-container.service\";\nimport { Directionality } from \"@angular/cdk/bidi\";\nimport { DOCUMENT, Location } from \"@angular/common\";\n\n@Injectable({ providedIn: \"root\" })\nexport class DynamicOverlay extends Overlay {\n private readonly _dynamicOverlayContainer: DynamicOverlayContainer;\n private renderer: Renderer2;\n\n constructor(\n @Inject(DOCUMENT) _document: any,\n scrollStrategies: ScrollStrategyOptions,\n _overlayContainer: DynamicOverlayContainer,\n _componentFactoryResolver: ComponentFactoryResolver,\n _positionBuilder: OverlayPositionBuilder,\n _keyboardDispatcher: OverlayKeyboardDispatcher,\n _injector: Injector,\n _ngZone: NgZone,\n _directionality: Directionality,\n rendererFactory: RendererFactory2,\n _location: Location,\n _outsideClickDispatcher: OverlayOutsideClickDispatcher\n ) {\n super(\n scrollStrategies,\n _overlayContainer,\n _componentFactoryResolver,\n _positionBuilder,\n _keyboardDispatcher,\n _injector,\n _ngZone,\n _document,\n _directionality,\n _location,\n _outsideClickDispatcher\n );\n this.renderer = rendererFactory.createRenderer(null, null);\n\n this._dynamicOverlayContainer = _overlayContainer;\n }\n\n public setContainerElement(containerElement: HTMLElement): void {\n this.renderer.setStyle(containerElement, \"transform\", \"translateZ(0)\");\n this._dynamicOverlayContainer.setContainerElement(containerElement);\n }\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const NICE_LOADING_OPTIONS = new InjectionToken(\"nice_loading_options\");\n","import { Directive, ElementRef, Inject, Input, Optional, Type } from \"@angular/core\";\nimport { OverlayRef } from \"@angular/cdk/overlay\";\nimport { ComponentPortal } from \"@angular/cdk/portal\";\nimport { DynamicOverlay } from \"../../providers/overlay/dynamic-overlay.service\";\nimport { NiceLoadingSpinnerComponent } from \"./loading-spinner.component\";\nimport { NICE_LOADING_OPTIONS } from \"./loading.constant\";\n\nexport interface NiceLoadingOptions {\n customLoading?: Type<any>;\n}\n\n@Directive({ selector: \"[niceLoadingOverlay]\" })\nexport class NiceLoadingDirective {\n private overlayRef: OverlayRef;\n private _loading = false;\n\n @Input(\"niceLoadingOverlay\")\n public set loading(loading: boolean | null) {\n setTimeout(() => {\n if (loading === this._loading) {\n return;\n }\n this._loading = loading;\n if (!this.overlayRef) {\n this.overlay.setContainerElement(this.elRef.nativeElement);\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .global()\n .centerHorizontally()\n .centerVertically(),\n hasBackdrop: true,\n panelClass: \"nice-loading-overlay\"\n });\n }\n if (this._loading) {\n this.overlayRef.attach(new ComponentPortal(this.options?.customLoading ?? NiceLoadingSpinnerComponent));\n } else {\n this.overlayRef.detach();\n }\n }, 0);\n }\n\n constructor(\n @Optional() @Inject(NICE_LOADING_OPTIONS) private options: NiceLoadingOptions,\n private elRef: ElementRef,\n private overlay: DynamicOverlay\n ) {}\n}\n","import { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { DynamicOverlayContainer } from \"../../providers/overlay/dynamic-overlay-container.service\";\nimport { DynamicOverlay } from \"../../providers/overlay/dynamic-overlay.service\";\nimport { NiceLoadingSpinnerComponent } from \"./loading-spinner.component\";\nimport { CommonModule } from \"@angular/common\";\nimport { MatProgressSpinnerModule } from \"@angular/material/progress-spinner\";\nimport { NiceLoadingDirective, NiceLoadingOptions } from \"./loading.directive\";\nimport { NICE_LOADING_OPTIONS } from \"./loading.constant\";\n\n@NgModule({\n imports: [\n CommonModule,\n MatProgressSpinnerModule\n ],\n declarations: [\n NiceLoadingSpinnerComponent,\n NiceLoadingDirective\n ],\n providers: [DynamicOverlayContainer, DynamicOverlay],\n exports: [\n NiceLoadingSpinnerComponent,\n NiceLoadingDirective\n ]\n})\nexport class NiceLoadingSpinnerModule {\n public static forRoot(options?: NiceLoadingOptions): ModuleWithProviders<NiceLoadingSpinnerModule> {\n return {\n ngModule: NiceLoadingSpinnerModule,\n providers: [\n {\n provide: NICE_LOADING_OPTIONS,\n useValue: options\n }\n ]\n };\n }\n}\n","import { AfterViewInit, Component, ElementRef, EventEmitter, Inject, Input, OnInit, Output, PLATFORM_ID, ViewChild } from \"@angular/core\";\nimport { isPlatformServer } from \"@angular/common\";\n\n@Component({\n selector: \"nice-lottie\",\n templateUrl: \"lottie.template.html\"\n})\nexport class NiceLottieComponent implements OnInit, AfterViewInit {\n private _options: import(\"lottie-web\").AnimationConfigWithPath | import(\"lottie-web\").AnimationConfigWithData;\n private _lottie: typeof import(\"lottie-web\").default;\n\n @Input()\n public options: any;\n @Input()\n public width: number;\n @Input()\n public height: number;\n\n @Output()\n public animCreated: EventEmitter<any> = new EventEmitter();\n\n @ViewChild(\"animationContainer\")\n public animationContainer: ElementRef;\n\n public viewWidth: string;\n public viewHeight: string;\n\n constructor(@Inject(PLATFORM_ID) private platformId: string) {\n }\n\n public ngOnInit(): void {\n this.viewWidth = this.width + \"px\" || \"100%\";\n this.viewHeight = this.height + \"px\" || \"100%\";\n }\n\n public async ngAfterViewInit(): Promise<void> {\n if (isPlatformServer(this.platformId)) {\n return;\n }\n\n this._lottie = (await import(\"lottie-web\")).default;\n this._options = {\n container: this.animationContainer.nativeElement,\n renderer: this.options.renderer || \"svg\",\n loop: this.options.loop !== false,\n autoplay: this.options.autoplay !== false,\n animationData: this.options.animationData,\n path: this.options.path || \"\",\n rendererSettings: this.options.rendererSettings || {}\n };\n\n const anim: any = this._lottie.loadAnimation(this._options);\n this.animCreated.emit(anim);\n }\n}\n","<div #animationContainer\n [ngStyle]=\"{'width': viewWidth, 'height': viewHeight, 'overflow':'hidden', 'margin': '0 auto'}\">\n</div>\n","import { NgModule } from \"@angular/core\";\nimport { NiceLottieComponent } from \"./lottie.component\";\nimport { CommonModule } from \"@angular/common\";\n\n@NgModule({\n imports: [CommonModule],\n declarations: [NiceLottieComponent],\n exports: [NiceLottieComponent]\n})\nexport class NiceLottieModule {}\n","import { Injectable, OnDestroy } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, NavigationEnd, Router } from \"@angular/router\";\nimport { BehaviorSubject, Observable, Subject } from \"rxjs\";\nimport { filter, takeUntil } from \"rxjs/operators\";\nimport { NiceNavigationItem } from \"./navigation.types\";\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class NiceNavigationService implements OnDestroy {\n private _onNavigationChanged = new BehaviorSubject<any>(null);\n private _onNavigationRegistered = new BehaviorSubject<any>(null);\n private _onNavigationUnregistered = new BehaviorSubject<any>(null);\n private _defaultNavigationKey: string;\n private _currentNavigationKey: string;\n private _componentRegistry: Map<string, any> = new Map<string, any>();\n private _navigationStore: Map<string, NiceNavigationItem[]> = new Map<string, any>();\n\n protected _unsubscribeAll: Subject<any>;\n\n /**\n * Constructor\n */\n constructor(private router: Router) {\n this._unsubscribeAll = new Subject();\n this.listenOnRouteChange();\n }\n\n public get onNavigationChanged(): Observable<any> {\n return this._onNavigationChanged.asObservable();\n }\n\n public get onNavigationRegistered(): Observable<any> {\n return this._onNavigationRegistered.asObservable();\n }\n\n public get onNavigationUnregistered(): Observable<any> {\n return this._onNavigationUnregistered.asObservable();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n public ngOnDestroy(): void {\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n\n /**\n * Register navigation component\n */\n public registerComponent(name: string, component: any): void {\n this._componentRegistry.set(name, component);\n }\n\n /**\n * Deregister navigation component\n */\n public deregisterComponent(name: string): void {\n this._componentRegistry.delete(name);\n }\n\n /**\n * Get navigation component from the registry\n */\n public getComponent(name: string): any {\n return this._componentRegistry.get(name);\n }\n\n /**\n * Store the given navigation with the given key\n */\n public storeNavigation(key: string, navigation: NiceNavigationItem[], isDefault = false): void {\n // Add to the store\n this._navigationStore.set(key, navigation);\n\n // Notify the subject\n this._onNavigationRegistered.next([key, navigation, key === this._currentNavigationKey]);\n\n if (isDefault) {\n this._defaultNavigationKey = key;\n }\n }\n\n /**\n * Get navigation from storage by key\n */\n public getNavigation(key: string): NiceNavigationItem[] {\n return this._navigationStore.get(key) ?? [];\n }\n\n /**\n * Delete the navigation from the storage\n */\n public deleteNavigation(key: string): void {\n // Check if the navigation exists\n if (!this._navigationStore.has(key)) {\n console.warn(`Navigation with the key '${key}' does not exist in the store.`);\n }\n\n // Delete from the storage\n this._navigationStore.delete(key);\n\n // Notify the subject\n this._onNavigationUnregistered.next(key);\n }\n\n /**\n * Utility function that returns a flattened\n * version of the given navigation array\n */\n public getFlatNavigation(navigation: NiceNavigationItem[], flatNavigation: NiceNavigationItem[] = []): NiceNavigationItem[] {\n for (const item of navigation) {\n if (item.type === \"basic\") {\n flatNavigation.push(item);\n continue;\n }\n\n if (item.type === \"aside\" || item.type === \"collapsable\" || item.type === \"group\") {\n if (item.children) {\n this.getFlatNavigation(item.children, flatNavigation);\n }\n }\n }\n\n return flatNavigation;\n }\n\n /**\n * Utility function that returns the item\n * with the given id from given navigation\n */\n public getItem(id: string, navigation: NiceNavigationItem[]): NiceNavigationItem | null {\n for (const item of navigation) {\n if (item.id === id) {\n return item;\n }\n\n if (item.children) {\n const childItem = this.getItem(id, item.children);\n\n if (childItem) {\n return childItem;\n }\n }\n }\n\n return null;\n }\n\n /**\n * Utility function that returns the item's parent\n * with the given id from given navigation\n */\n public getItemParent(\n id: string,\n navigation: NiceNavigationItem[],\n parent: NiceNavigationItem[] | NiceNavigationItem\n ): NiceNavigationItem[] | NiceNavigationItem | null {\n for (const item of navigation) {\n if (item.id === id) {\n return parent;\n }\n\n if (item.children) {\n const childItem = this.getItemParent(id, item.children, item);\n\n if (childItem) {\n return childItem;\n }\n }\n }\n\n return null;\n }\n\n public getCurrentNavigation(): NiceNavigationItem[] {\n if (!this._currentNavigationKey) {\n console.warn(`The current navigation is not set.`);\n return;\n }\n\n return this.getNavigation(this._currentNavigationKey);\n }\n\n public setCurrentNavigation(key: string): void {\n // Check if the sidebar exists\n if (!this._navigationStore.has(key)) {\n console.warn(`Navigation with the key '${key}' does not exist in the store.`);\n }\n\n if (this._currentNavigationKey === key) {\n return;\n }\n\n // Set the current adminNavigation key\n this._currentNavigationKey = key;\n\n // Notify the subject\n this._onNavigationChanged.next(key);\n }\n\n private listenOnRouteChange(): void {\n this.router.events.pipe(\n takeUntil(this._unsubscribeAll),\n filter((e) => e instanceof NavigationEnd)\n ).subscribe(() => {\n const route = this.lastChild(this.router.routerState.snapshot.root);\n if (route.data.navigationKey) {\n this.setCurrentNavigation(route.data.navigationKey);\n } else if (this._defaultNavigationKey) {\n this.setCurrentNavigation(this._defaultNavigationKey);\n }\n });\n }\n\n private lastChild(route: ActivatedRouteSnapshot): ActivatedRouteSnapshot {\n if (route.firstChild) {\n return this.lastChild(route.firstChild);\n } else {\n return route;\n }\n }\n}\n","import { ChangeDetectorRef, Component, Directive, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from \"@angular/core\";\nimport { distinctUntilChanged, ReplaySubject, startWith, Subject } from \"rxjs\";\nimport { filter, takeUntil } from \"rxjs/operators\";\nimport { NiceUtilsService } from \"../../providers\";\nimport { NiceNavigationService } from \"./navigation.service\";\nimport { NiceNavigationItem } from \"./navigation.types\";\n\n@Component({\n template: ``\n})\nexport class NiceNavigationComponent implements OnInit, OnDestroy, OnChanges {\n protected _navigation: NiceNavigationItem[];\n protected _unsubscribeAll: Subject<any>;\n\n public animateNextNavChange = false;\n public onRefreshed = new ReplaySubject<boolean>(1);\n public name: string;\n\n constructor(\n protected _changeDetectorRef: ChangeDetectorRef,\n protected _niceNavigationService: NiceNavigationService,\n protected _niceUtilsService: NiceUtilsService\n ) {\n this._unsubscribeAll = new Subject();\n }\n\n public ngOnInit(): void {\n // Make sure the name input is not an empty string\n if (this.name === \"\") {\n this.name = this._niceUtilsService.randomId();\n }\n\n // Register the navigation component\n this._niceNavigationService.registerComponent(this.name, this);\n\n this._niceNavigationService.onNavigationChanged.pipe(\n distinctUntilChanged(),\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n this.animateNextNavChange = !!this._navigation?.length;\n this._navigation = this._niceNavigationService.getCurrentNavigation();\n this._changeDetectorRef.markForCheck();\n });\n\n this._niceNavigationService.onNavigationRegistered.pipe(\n filter((x) => !!x),\n distinctUntilChanged(),\n takeUntil(this._unsubscribeAll)\n ).subscribe(([_, __, isActive]) => {\n if (!isActive) {\n return;\n }\n\n this.animateNextNavChange = !!this._navigation?.length;\n this._navigation = this._niceNavigationService.getCurrentNavigation();\n this._changeDetectorRef.markForCheck();\n });\n }\n\n public ngOnDestroy(): void {\n // Deregister the navigation component from the registry\n this._niceNavigationService.deregisterComponent(this.name);\n\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n // Navigation\n if (\"navigation\" in changes) {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /**\n * Refresh the component to apply the changes\n */\n public refresh(): void {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n\n // Execute the observable\n this.onRefreshed.next(true);\n }\n\n /**\n * Track by function for ngFor loops\n */\n public trackByFn(index: number, item: any): any {\n return item.id || index;\n }\n}\n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { NiceNavigationService } from \"../../../navigation.service\";\nimport { NiceNavigationItem } from \"../../../navigation.types\";\n\n@Component({\n selector: \"nice-horizontal-navigation-basic-item\",\n templateUrl: \"./basic.component.html\",\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceHorizontalNavigationBasicItemComponent implements OnInit, OnDestroy {\n private _niceHorizontalNavigationComponent;\n private _unsubscribeAll = new Subject<any>();\n\n @Input()\n public item: NiceNavigationItem;\n\n @Input()\n public name: string;\n\n /**\n * Constructor\n */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _niceNavigationService: NiceNavigationService\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Get the parent navigation component\n this._niceHorizontalNavigationComponent = this._niceNavigationService.getComponent(this.name);\n\n // Subscribe to onRefreshed on the navigation component\n this._niceHorizontalNavigationComponent.onRefreshed.pipe(\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n}\n","<!-- Item wrapper -->\n<div\n class=\"nice-horizontal-navigation-item-wrapper\"\n [class.nice-horizontal-navigation-item-has-subtitle]=\"!!item.subtitle\"\n [ngClass]=\"item.classes?.wrapper\"\n>\n <!-- Item with an internal link -->\n <div\n class=\"nice-horizontal-navigation-item\"\n *ngIf=\"item.link && !item.externalLink && !item.function && !item.disabled\"\n [ngClass]=\"{ 'nice-horizontal-navigation-item-active-forced': item.active }\"\n [routerLink]=\"[item.link]\"\n [routerLinkActive]=\"'nice-horizontal-navigation-item-active'\"\n [routerLinkActiveOptions]=\"{ exact: item.exactMatch || false }\"\n [queryParams]=\"item?.queryParams\"\n [state]=\"item?.state\"\n >\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </div>\n\n <!-- Item with an external link -->\n <a\n class=\"nice-horizontal-navigation-item\"\n *ngIf=\"item.link && item.externalLink && !item.function && !item.disabled\"\n [href]=\"item.link\"\n >\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </a>\n\n <!-- Item with a function -->\n <div\n class=\"nice-horizontal-navigation-item\"\n *ngIf=\"!item.link && item.function && !item.disabled\"\n [ngClass]=\"{ 'nice-horizontal-navigation-item-active-forced': item.active }\"\n (click)=\"item.function(item)\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </div>\n\n <!-- Item with an internal link and function -->\n <div\n class=\"nice-horizontal-navigation-item\"\n *ngIf=\"item.link && !item.externalLink && item.function && !item.disabled\"\n [ngClass]=\"{ 'nice-horizontal-navigation-item-active-forced': item.active }\"\n [routerLink]=\"[item.link]\"\n [routerLinkActive]=\"'nice-horizontal-navigation-item-active'\"\n [routerLinkActiveOptions]=\"{ exact: item.exactMatch || false }\"\n [queryParams]=\"item?.queryParams\"\n [state]=\"item?.state\"\n (click)=\"item.function(item)\"\n >\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </div>\n\n <!-- Item with an external link and function -->\n <a\n class=\"nice-horizontal-navigation-item\"\n *ngIf=\"item.link && item.externalLink && item.function && !item.disabled\"\n [href]=\"item.link\"\n (click)=\"item.function(item)\"\n mat-menu-item\n >\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </a>\n\n <!-- Item with a no link and no function -->\n <div\n class=\"nice-horizontal-navigation-item\"\n *ngIf=\"!item.link && !item.function && !item.disabled\"\n [ngClass]=\"{'nice-horizontal-navigation-item-active-forced': item.active}\"\n >\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </div>\n\n <!-- Item is disabled -->\n <div\n class=\"nice-horizontal-navigation-item nice-horizontal-navigation-item-disabled\"\n *ngIf=\"item.disabled\"\n >\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </div>\n</div>\n\n<!-- Item template -->\n<ng-template #itemTemplate>\n <!-- Icon -->\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n *ngIf=\"item.icon && item.iconType === 'material'\"\n >\n {{ item.icon }}\n </mat-icon>\n\n <span class=\"nice-vertical-navigation-item-icon\" [ngClass]=\"item.icon\" *ngIf=\"item.icon && item.iconType == 'fontawesome'\"></span>\n\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n [svgIcon]=\"item.icon\"\n *ngIf=\"item.icon && item.iconType === 'svg'\"\n ></mat-icon>\n\n <!-- Title & Subtitle -->\n <div class=\"nice-horizontal-navigation-item-title-wrapper\">\n <div class=\"nice-horizontal-navigation-item-title\">\n <span [ngClass]=\"item.classes?.title\">\n {{ item.title | translate }}\n </span>\n </div>\n <div\n class=\"nice-horizontal-navigation-item-subtitle text-hint\"\n *ngIf=\"item.subtitle\"\n >\n <span [ngClass]=\"item.classes?.subtitle\">\n {{ item.subtitle | translate }}\n </span>\n </div>\n </div>\n\n <!-- Badge -->\n <div\n class=\"nice-horizontal-navigation-item-badge\"\n *ngIf=\"item.badge\"\n >\n <div\n class=\"nice-horizontal-navigation-item-badge-content\"\n [ngClass]=\"item.badge.classes\">\n {{ item.badge.title | translate }}\n </div>\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { NiceNavigationService } from \"../../../navigation.service\";\nimport { NiceNavigationItem } from \"../../../navigation.types\";\n\n@Component({\n selector: \"nice-horizontal-navigation-divider-item\",\n templateUrl: \"./divider.component.html\",\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceHorizontalNavigationDividerItemComponent implements OnInit, OnDestroy {\n private _niceHorizontalNavigationComponent;\n private _unsubscribeAll: Subject<any> = new Subject<any>();\n\n @Input()\n public item: NiceNavigationItem;\n\n @Input()\n public name: string;\n\n /**\n * Constructor\n */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _niceNavigationService: NiceNavigationService\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Get the parent navigation component\n this._niceHorizontalNavigationComponent = this._niceNavigationService.getComponent(this.name);\n\n // Subscribe to onRefreshed on the navigation component\n this._niceHorizontalNavigationComponent.onRefreshed.pipe(\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n}\n","<!-- Divider -->\n<div\n class=\"nice-horizontal-navigation-item-wrapper divider\"\n [ngClass]=\"item.classes?.wrapper\"\n></div>\n","import { Injector, Pipe, PipeTransform } from \"@angular/core\";\nimport { Observable, of } from \"rxjs\";\nimport { NiceNavigationItem } from \"../navigation.types\";\nimport { NavigationHideItemResolver } from \"../providers/hide-item.resolver\";\n\n@Pipe({ name: \"niceShouldHide\" })\nexport class NiceShouldHidePipe implements PipeTransform {\n constructor(private injector: Injector) {}\n\n public transform(value: NiceNavigationItem): Observable<boolean> {\n if (!value.hidden) {\n return of(false);\n }\n\n if (typeof value === \"boolean\") {\n return of(true);\n }\n\n if (typeof value.hidden !== \"function\") {\n return of(false);\n }\n\n const resolver = this.injector.get(value.hidden, null) as NavigationHideItemResolver;\n if (!resolver) {\n return of((value.hidden as (item: NiceNavigationItem) => boolean)(value));\n }\n\n return resolver.shouldHide(value);\n }\n}\n","import { BooleanInput } from \"@angular/cdk/coercion\";\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit,\n ViewChild\n} from \"@angular/core\";\nimport { MatMenu } from \"@angular/material/menu\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { NiceNavigationService } from \"../../../navigation.service\";\nimport { NiceNavigationItem } from \"../../../navigation.types\";\n\n@Component({\n selector: \"nice-horizontal-navigation-branch-item\",\n templateUrl: \"./branch.component.html\",\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceHorizontalNavigationBranchItemComponent implements OnInit, OnDestroy {\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_child: BooleanInput;\n\n private _niceHorizontalNavigationComponent;\n private _unsubscribeAll = new Subject<any>();\n\n @Input()\n public child = false;\n\n @Input()\n public item: NiceNavigationItem;\n\n @Input()\n public name: string;\n\n @ViewChild(\"matMenu\", { static: true })\n public matMenu: MatMenu;\n\n /**\n * Constructor\n */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _niceNavigationService: NiceNavigationService\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Get the parent navigation component\n this._niceHorizontalNavigationComponent = this._niceNavigationService.getComponent(this.name);\n\n // Subscribe to onRefreshed on the navigation component\n this._niceHorizontalNavigationComponent.onRefreshed.pipe(\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Trigger the change detection\n */\n public triggerChangeDetection(): void {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n}\n","<div\n *ngIf=\"!child\"\n [ngClass]=\"{\n 'nice-horizontal-navigation-menu-active': trigger.menuOpen,\n 'nice-horizontal-navigation-menu-active-forced': item.active\n }\"\n [matMenuTriggerFor]=\"matMenu\"\n (onMenuOpen)=\"triggerChangeDetection()\"\n (onMenuClose)=\"triggerChangeDetection()\"\n #trigger=\"matMenuTrigger\"\n>\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: item}\"></ng-container>\n</div>\n\n<mat-menu\n class=\"nice-horizontal-navigation-menu-panel\"\n [overlapTrigger]=\"false\"\n #matMenu=\"matMenu\"\n>\n <ng-container *ngFor=\"let item of item.children\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"!(item | niceShouldHide | async)\">\n <!-- Basic -->\n <div\n class=\"nice-horizontal-navigation-menu-item\"\n *ngIf=\"item.type === 'basic'\"\n [disabled]=\"item.disabled\"\n mat-menu-item\n >\n <nice-horizontal-navigation-basic-item\n [item]=\"item\"\n [name]=\"name\"\n ></nice-horizontal-navigation-basic-item>\n </div>\n\n <!-- Branch: aside, collapsable, group -->\n <div\n class=\"nice-horizontal-navigation-menu-item\"\n *ngIf=\"item.type === 'aside' || item.type === 'collapsable' || item.type === 'group'\"\n [disabled]=\"item.disabled\"\n [matMenuTriggerFor]=\"branch.matMenu\"\n mat-menu-item\n >\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item }\"></ng-container>\n <nice-horizontal-navigation-branch-item\n [child]=\"true\"\n [item]=\"item\"\n [name]=\"name\"\n #branch\n ></nice-horizontal-navigation-branch-item>\n </div>\n\n <!-- Divider -->\n <div\n class=\"nice-horizontal-navigation-menu-item\"\n *ngIf=\"item.type === 'divider'\"\n mat-menu-item\n >\n <nice-horizontal-navigation-divider-item\n [item]=\"item\"\n [name]=\"name\"\n ></nice-horizontal-navigation-divider-item>\n </div>\n </ng-container>\n </ng-container>\n</mat-menu>\n\n<!-- Item template -->\n<ng-template\n let-item\n #itemTemplate\n>\n <div\n class=\"nice-horizontal-navigation-item-wrapper\"\n [class.nice-horizontal-navigation-item-has-subtitle]=\"!!item.subtitle\"\n [ngClass]=\"item.classes?.wrapper\"\n >\n <div\n class=\"nice-horizontal-navigation-item\"\n [ngClass]=\"{\n 'nice-horizontal-navigation-item-disabled': item.disabled,\n 'nice-horizontal-navigation-item-active-forced': item.active\n }\">\n\n <!-- Icon -->\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n *ngIf=\"item.icon && item.iconType === 'material'\"\n >\n {{ item.icon }}\n </mat-icon>\n\n <span class=\"nice-vertical-navigation-item-icon\" [ngClass]=\"item.icon\" *ngIf=\"item.icon && item.iconType == 'fontawesome'\"></span>\n\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n [svgIcon]=\"item.icon\"\n *ngIf=\"item.icon && item.iconType === 'svg'\"\n ></mat-icon>\n\n <!-- Title & Subtitle -->\n <div class=\"nice-horizontal-navigation-item-title-wrapper\">\n <div class=\"nice-horizontal-navigation-item-title\">\n <span [ngClass]=\"item.classes?.title\">\n {{ item.title | translate }}\n </span>\n </div>\n <div\n class=\"nice-horizontal-navigation-item-subtitle text-hint\"\n *ngIf=\"item.subtitle\"\n >\n <span [ngClass]=\"item.classes?.subtitle\">\n {{ item.subtitle | translate }}\n </span>\n </div>\n </div>\n\n <!-- Badge -->\n <div\n class=\"nice-horizontal-navigation-item-badge\"\n *ngIf=\"item.badge\">\n <div\n class=\"nice-horizontal-navigation-item-badge-content\"\n [ngClass]=\"item.badge.classes\"\n >\n {{ item.badge.title | translate }}\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { NiceNavigationService } from \"../../../navigation.service\";\nimport { NiceNavigationItem } from \"../../../navigation.types\";\n\n@Component({\n selector: \"nice-horizontal-navigation-spacer-item\",\n templateUrl: \"./spacer.component.html\",\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceHorizontalNavigationSpacerItemComponent implements OnInit, OnDestroy {\n private _niceHorizontalNavigationComponent;\n private _unsubscribeAll = new Subject<any>();\n\n @Input()\n public item: NiceNavigationItem;\n\n @Input()\n public name: string;\n\n /**\n * Constructor\n */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _niceNavigationService: NiceNavigationService\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Get the parent navigation component\n this._niceHorizontalNavigationComponent = this._niceNavigationService.getComponent(this.name);\n\n // Subscribe to onRefreshed on the navigation component\n this._niceHorizontalNavigationComponent.onRefreshed.pipe(\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n}\n","<!-- Spacer -->\n<div\n class=\"nice-horizontal-navigation-item-wrapper\"\n [ngClass]=\"item.classes?.wrapper\"\n></div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, ViewEncapsulation } from \"@angular/core\";\nimport { niceAnimations } from \"../../../animations\";\nimport { NiceUtilsService } from \"../../../providers/utils\";\nimport { NiceNavigationComponent } from \"../navigation.component\";\nimport { NiceNavigationService } from \"../navigation.service\";\nimport { NiceNavigationItem } from \"../navigation.types\";\n\n@Component({\n selector: \"nice-horizontal-navigation\",\n templateUrl: \"./horizontal.component.html\",\n animations: niceAnimations,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: \"niceHorizontalNavigation\"\n})\nexport class NiceHorizontalNavigationComponent extends NiceNavigationComponent {\n @Input()\n public name: string = this._niceUtilsService.randomId();\n\n @Input()\n public set navigation(navigation: NiceNavigationItem[]) {\n this._navigation = navigation;\n this._changeDetectorRef.markForCheck();\n }\n public get navigation(): NiceNavigationItem[] {\n return this._navigation;\n }\n\n /**\n * Constructor\n */\n constructor(\n _changeDetectorRef: ChangeDetectorRef,\n _niceNavigationService: NiceNavigationService,\n _niceUtilsService: NiceUtilsService\n ) {\n super(_changeDetectorRef, _niceNavigationService, _niceUtilsService);\n }\n}\n","<div class=\"nice-horizontal-navigation-wrapper\">\n <ng-container *ngFor=\"let item of navigation\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"!(item | niceShouldHide | async)\">\n <!-- Basic -->\n <nice-horizontal-navigation-basic-item\n class=\"nice-horizontal-navigation-menu-item\"\n *ngIf=\"item.type === 'basic'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-horizontal-navigation-basic-item>\n\n <!-- Branch: aside, collapsable, group -->\n <nice-horizontal-navigation-branch-item\n class=\"nice-horizontal-navigation-menu-item\"\n *ngIf=\"item.type === 'aside' || item.type === 'collapsable' || item.type === 'group'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-horizontal-navigation-branch-item>\n\n <!-- Spacer -->\n <nice-horizontal-navigation-spacer-item\n class=\"nice-horizontal-navigation-menu-item\"\n *ngIf=\"item.type === 'spacer'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-horizontal-navigation-spacer-item>\n </ng-container>\n </ng-container>\n</div>\n","export class ScrollbarGeometry {\n public x: number;\n public y: number;\n\n public w: number;\n public h: number;\n\n constructor(x: number, y: number, w: number, h: number) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n}\n\nexport class ScrollbarPosition {\n public x: number | \"start\" | \"end\";\n public y: number | \"start\" | \"end\";\n\n constructor(x: number | \"start\" | \"end\", y: number | \"start\" | \"end\") {\n this.x = x;\n this.y = y;\n }\n}\n","import { BooleanInput, coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport { Platform } from \"@angular/cdk/platform\";\nimport { Directive, ElementRef, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { ScrollbarGeometry, ScrollbarPosition } from \"./scrollbar.types\";\nimport { merge } from \"lodash-es\";\nimport PerfectScrollbar from \"perfect-scrollbar\";\nimport { fromEvent, Subject } from \"rxjs\";\nimport { debounceTime, takeUntil } from \"rxjs/operators\";\n\n/**\n * Wrapper directive for the Perfect Scrollbar: https://github.com/mdbootstrap/perfect-scrollbar\n */\n@Directive({\n selector: \"[niceScrollbar]\",\n exportAs: \"niceScrollbar\"\n})\nexport class NiceScrollbarDirective implements OnChanges, OnInit, OnDestroy {\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_niceScrollbar: BooleanInput;\n\n private _animation: number;\n private _options: PerfectScrollbar.Options;\n private _ps: PerfectScrollbar;\n private _unsubscribeAll: Subject<any> = new Subject<any>();\n\n @Input()\n public niceScrollbar = true;\n\n @Input()\n public niceScrollbarOptions: PerfectScrollbar.Options;\n\n /**\n * Constructor\n */\n constructor(\n private _elementRef: ElementRef,\n private _platform: Platform,\n private _router: Router\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Getter for _elementRef\n */\n public get elementRef(): ElementRef {\n return this._elementRef;\n }\n\n /**\n * Getter for _ps\n */\n public get ps(): PerfectScrollbar | null {\n return this._ps;\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On changes\n */\n public ngOnChanges(changes: SimpleChanges): void {\n // Enabled\n if (\"niceScrollbar\" in changes) {\n // Interpret empty string as 'true'\n this.niceScrollbar = coerceBooleanProperty(changes.niceScrollbar.currentValue);\n\n // If enabled, init the directive\n if (this.niceScrollbar) {\n this._init();\n }\n // Otherwise destroy it\n else {\n this._destroy();\n }\n }\n\n // Scrollbar options\n if (\"niceScrollbarOptions\" in changes) {\n // Merge the options\n this._options = merge({}, this._options, changes.niceScrollbarOptions.currentValue);\n\n // Return if not initialized\n if (!this._ps) {\n return;\n }\n\n // Destroy and re-init the PerfectScrollbar to update its options\n setTimeout(() => {\n this._destroy();\n });\n\n setTimeout(() => {\n this._init();\n });\n }\n }\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Subscribe to window resize event\n fromEvent(window, \"resize\")\n .pipe(\n takeUntil(this._unsubscribeAll),\n debounceTime(150)\n )\n .subscribe(() => {\n\n // Update the PerfectScrollbar\n this.update();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n this._destroy();\n\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Is enabled\n */\n public isEnabled(): boolean {\n return this.niceScrollbar;\n }\n\n /**\n * Update the scrollbar\n */\n public update(): void {\n // Return if not initialized\n if (!this._ps) {\n return;\n }\n\n // Update the PerfectScrollbar\n this._ps.update();\n }\n\n /**\n * Destroy the scrollbar\n */\n public destroy(): void {\n this.ngOnDestroy();\n }\n\n /**\n * Returns the geometry of the scrollable element\n */\n public geometry(prefix: string = \"scroll\"): ScrollbarGeometry {\n return new ScrollbarGeometry(\n this._elementRef.nativeElement[prefix + \"Left\"],\n this._elementRef.nativeElement[prefix + \"Top\"],\n this._elementRef.nativeElement[prefix + \"Width\"],\n this._elementRef.nativeElement[prefix + \"Height\"]);\n }\n\n /**\n * Returns the position of the scrollable element\n */\n public position(absolute: boolean = false): ScrollbarPosition {\n let scrollbarPosition;\n\n if (!absolute && this._ps) {\n scrollbarPosition = new ScrollbarPosition(\n this._ps.reach.x || 0,\n this._ps.reach.y || 0\n );\n } else {\n scrollbarPosition = new ScrollbarPosition(\n this._elementRef.nativeElement.scrollLeft,\n this._elementRef.nativeElement.scrollTop\n );\n }\n\n return scrollbarPosition;\n }\n\n /**\n * Scroll to\n */\n public scrollTo(x: number, y?: number, speed?: number): void {\n if (y == null && speed == null) {\n this.animateScrolling(\"scrollTop\", x, speed);\n } else {\n if (x != null) {\n this.animateScrolling(\"scrollLeft\", x, speed);\n }\n\n if (y != null) {\n this.animateScrolling(\"scrollTop\", y, speed);\n }\n }\n }\n\n /**\n * Scroll to X\n */\n public scrollToX(x: number, speed?: number): void {\n this.animateScrolling(\"scrollLeft\", x, speed);\n }\n\n /**\n * Scroll to Y\n */\n public scrollToY(y: number, speed?: number): void {\n this.animateScrolling(\"scrollTop\", y, speed);\n }\n\n /**\n * Scroll to top\n */\n public scrollToTop(offset: number = 0, speed?: number): void {\n this.animateScrolling(\"scrollTop\", offset, speed);\n }\n\n /**\n * Scroll to bottom\n */\n public scrollToBottom(offset: number = 0, speed?: number): void {\n const top = this._elementRef.nativeElement.scrollHeight - this._elementRef.nativeElement.clientHeight;\n this.animateScrolling(\"scrollTop\", top - offset, speed);\n }\n\n /**\n * Scroll to left\n */\n public scrollToLeft(offset: number = 0, speed?: number): void {\n this.animateScrolling(\"scrollLeft\", offset, speed);\n }\n\n /**\n * Scroll to right\n */\n public scrollToRight(offset: number = 0, speed?: number): void {\n const left = this._elementRef.nativeElement.scrollWidth - this._elementRef.nativeElement.clientWidth;\n this.animateScrolling(\"scrollLeft\", left - offset, speed);\n }\n\n /**\n * Scroll to element\n */\n public scrollToElement(qs: string, offset: number = 0, ignoreVisible: boolean = false, speed?: number): void {\n const element = this._elementRef.nativeElement.querySelector(qs);\n\n if (!element) {\n return;\n }\n\n const elementPos = element.getBoundingClientRect();\n const scrollerPos = this._elementRef.nativeElement.getBoundingClientRect();\n\n if (this._elementRef.nativeElement.classList.contains(\"ps--active-x\")) {\n if (ignoreVisible && elementPos.right <= (scrollerPos.right - Math.abs(offset))) {\n return;\n }\n\n const currentPos = this._elementRef.nativeElement.scrollLeft;\n const position = elementPos.left - scrollerPos.left + currentPos;\n\n this.animateScrolling(\"scrollLeft\", position + offset, speed);\n }\n\n if (this._elementRef.nativeElement.classList.contains(\"ps--active-y\")) {\n if (ignoreVisible && elementPos.bottom <= (scrollerPos.bottom - Math.abs(offset))) {\n return;\n }\n\n const currentPos = this._elementRef.nativeElement.scrollTop;\n const position = elementPos.top - scrollerPos.top + currentPos;\n\n this.animateScrolling(\"scrollTop\", position + offset, speed);\n }\n }\n\n /**\n * Animate scrolling\n */\n public animateScrolling(target: string, value: number, speed?: number): void {\n if (this._animation) {\n window.cancelAnimationFrame(this._animation);\n this._animation = null;\n }\n\n if (!speed || typeof window === \"undefined\") {\n this._elementRef.nativeElement[target] = value;\n } else if (value !== this._elementRef.nativeElement[target]) {\n let newValue = 0;\n let scrollCount = 0;\n\n let oldTimestamp = performance.now();\n let oldValue = this._elementRef.nativeElement[target];\n\n const cosParameter = (oldValue - value) / 2;\n\n const step = (newTimestamp: number) => {\n scrollCount += Math.PI / (speed / (newTimestamp - oldTimestamp));\n newValue = Math.round(value + cosParameter + cosParameter * Math.cos(scrollCount));\n\n // Only continue animation if scroll position has not changed\n if (this._elementRef.nativeElement[target] === oldValue) {\n if (scrollCount >= Math.PI) {\n this.animateScrolling(target, value, 0);\n } else {\n this._elementRef.nativeElement[target] = newValue;\n\n // On a zoomed out page the resulting offset may differ\n oldValue = this._elementRef.nativeElement[target];\n oldTimestamp = newTimestamp;\n\n this._animation = window.requestAnimationFrame(step);\n }\n }\n };\n\n window.requestAnimationFrame(step);\n }\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Initialize\n */\n private _init(): void {\n // Return if already initialized\n if (this._ps) {\n return;\n }\n\n // Return if on mobile or not on browser\n if (this._platform.ANDROID || this._platform.IOS || !this._platform.isBrowser) {\n this.niceScrollbar = false;\n return;\n }\n\n // Initialize the PerfectScrollbar\n this._ps = new PerfectScrollbar(this._elementRef.nativeElement, {...this._options});\n }\n\n /**\n * Destroy\n */\n private _destroy(): void {\n // Return if not initialized\n if (!this._ps) {\n return;\n }\n\n // Destroy the PerfectScrollbar\n this._ps.destroy();\n\n // Clean up\n this._ps = null;\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NiceScrollbarDirective } from \"./scrollbar.directive\";\n\n@NgModule({\n declarations: [\n NiceScrollbarDirective\n ],\n exports: [\n NiceScrollbarDirective\n ]\n})\nexport class NiceScrollbarModule {}\n","import { FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from \"@angular/cdk/overlay\";\nimport { Platform } from \"@angular/cdk/platform\";\nimport { ComponentPortal } from \"@angular/cdk/portal\";\nimport { AfterViewInit, Directive, ElementRef, Input, NgZone, OnDestroy, ViewContainerRef } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { NiceNavigationItem } from \"../navigation.types\";\n\n@Directive({ selector: \"[niceShowHint]\" })\nexport class NiceShowHintDirective implements AfterViewInit, OnDestroy {\n @Input()\n public shouldShow = false;\n\n @Input()\n public item: NiceNavigationItem;\n\n private _pointerExitEventsInitialized = false;\n private _portal: ComponentPortal<any>;\n private _hintInstance: any;\n private _overlayRef: OverlayRef;\n\n private readonly _passiveListeners: (readonly [string, EventListenerOrEventListenerObject])[] = [];\n private readonly unsubscribeAll$ = new Subject<void>();\n\n constructor(\n private _overlay: Overlay,\n private _elementRef: ElementRef<HTMLElement>,\n private _viewContainerRef: ViewContainerRef,\n private _ngZone: NgZone,\n private _platform: Platform\n ) {}\n\n public ngAfterViewInit(): void {\n this._setupPointerEnterEventsIfNeeded();\n\n if (this.item.hint) {\n this._portal = new ComponentPortal<any>(this.item.hint.component, this._viewContainerRef);\n }\n }\n\n public ngOnDestroy(): void {\n this.unsubscribeAll$.next();\n this.unsubscribeAll$.complete();\n }\n\n public show(): void {\n if (!this.shouldShow || !this.item.hint || this._isHintVisible()) {\n return;\n }\n\n const overlayRef = this._createOverlay();\n this._detach();\n const instance = (this._hintInstance = overlayRef.attach(this._portal).instance);\n instance._triggerElement = this._elementRef.nativeElement;\n instance\n .afterHidden()\n .pipe(takeUntil(this.unsubscribeAll$))\n .subscribe(() => this._detach());\n\n instance.show();\n }\n\n public hide(): void {\n const instance = this._hintInstance;\n\n if (instance) {\n this._detach();\n }\n }\n\n private _createOverlay(): OverlayRef {\n if (this._overlayRef) {\n const existingStrategy = this._overlayRef.getConfig()\n .positionStrategy as FlexibleConnectedPositionStrategy;\n\n // @ts-ignore\n if (!origin && existingStrategy._origin instanceof ElementRef) {\n return this._overlayRef;\n }\n\n this._detach();\n }\n\n // Create connected position strategy that listens for scroll events to reposition.\n const strategy = this._overlay\n .position()\n .flexibleConnectedTo(this._elementRef)\n .withPositions([\n {\n originX: \"center\",\n originY: \"bottom\",\n overlayX: \"start\",\n overlayY: \"top\",\n offsetY: 8\n }\n ])\n .withFlexibleDimensions(false);\n\n strategy.positionChanges.pipe(takeUntil(this.unsubscribeAll$)).subscribe(change => {\n if (this._hintInstance) {\n if (change.scrollableViewProperties.isOverlayClipped && this._hintInstance.isVisible()) {\n // After position changes occur and the overlay is clipped by\n // a parent scrollable then close the tooltip.\n this._ngZone.run(() => this.hide());\n }\n }\n });\n\n this._overlayRef = this._overlay.create({\n positionStrategy: strategy\n });\n\n this._overlayRef\n .detachments()\n .pipe(takeUntil(this.unsubscribeAll$))\n .subscribe(() => this._detach());\n\n this._overlayRef\n .outsidePointerEvents()\n .pipe(takeUntil(this.unsubscribeAll$))\n .subscribe(() => this._hintInstance?._handleBodyInteraction());\n\n return this._overlayRef;\n }\n\n private _detach() {\n if (this._overlayRef && this._overlayRef.hasAttached()) {\n this._overlayRef.detach();\n }\n\n this._hintInstance = null;\n }\n\n private _isHintVisible(): boolean {\n return !!this._hintInstance && this._hintInstance.isVisible();\n }\n\n private _setupPointerEnterEventsIfNeeded() {\n // Optimization: Defer hooking up events if there's no message or the tooltip is disabled.\n if (this._passiveListeners.length) {\n return;\n }\n\n // The mouse events shouldn't be bound on mobile devices, because they can prevent the\n // first tap from firing its click event or can cause the tooltip to open for clicks.\n if (this._platformSupportsMouseEvents()) {\n this._passiveListeners.push([\n \"mouseenter\",\n () => {\n this._setupPointerExitEventsIfNeeded();\n this.show();\n },\n ]);\n }\n\n this._addListeners(this._passiveListeners);\n }\n\n private _setupPointerExitEventsIfNeeded() {\n if (this._pointerExitEventsInitialized) {\n return;\n }\n this._pointerExitEventsInitialized = true;\n\n const exitListeners: (readonly [string, EventListenerOrEventListenerObject])[] = [];\n if (this._platformSupportsMouseEvents()) {\n exitListeners.push(\n [\n \"mouseleave\",\n event => {\n const newTarget = (event as MouseEvent).relatedTarget as Node | null;\n if (!newTarget || !this._overlayRef?.overlayElement.contains(newTarget)) {\n this.hide();\n }\n },\n ]\n );\n }\n\n this._addListeners(exitListeners);\n this._passiveListeners.push(...exitListeners);\n }\n\n private _platformSupportsMouseEvents() {\n return !this._platform.IOS && !this._platform.ANDROID;\n }\n\n private _addListeners(listeners: (readonly [string, EventListenerOrEventListenerObject])[]) {\n listeners.forEach(([event, listener]) => {\n this._elementRef.nativeElement.addEventListener(event, listener);\n });\n }\n}\n","import { Injector, Pipe, PipeTransform } from \"@angular/core\";\nimport { Observable, combineLatest, of } from \"rxjs\";\nimport { map } from \"rxjs/operators\";\nimport { NiceNavigationItem } from \"../navigation.types\";\n\n@Pipe({ name: \"niceShouldShowHint\" })\nexport class NiceShouldShowHintPipe implements PipeTransform {\n constructor(private injector: Injector) {}\n\n public transform(value: NiceNavigationItem | NiceNavigationItem[]): Observable<boolean> {\n if (!Array.isArray(value)) {\n value = [value];\n }\n\n return combineLatest(value.map(x => this.transformHint(x))).pipe(map(res => res.some(x => x)));\n }\n\n private transformHint(value: NiceNavigationItem): Observable<boolean> {\n if (!value.hint) {\n return of(false);\n }\n\n const resolver = this.injector.get(value.hint.resolver);\n if (!resolver) {\n return of(false);\n }\n\n return resolver.shouldShowHint();\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { Subject } from \"rxjs\";\nimport { map, takeUntil } from \"rxjs/operators\";\nimport { NiceUtilsService } from \"../../../../../providers/utils\";\nimport { NiceNavigationService } from \"../../../navigation.service\";\nimport { NiceNavigationItem } from \"../../../navigation.types\";\n\n@Component({\n selector: \"nice-vertical-navigation-basic-item\",\n templateUrl: \"./basic.component.html\",\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceVerticalNavigationBasicItemComponent implements OnInit, OnDestroy {\n private _niceVerticalNavigationComponent;\n private _unsubscribeAll: Subject<any> = new Subject<any>();\n\n @Input()\n public item: NiceNavigationItem;\n\n @Input()\n public name: string;\n\n public itemActive$ = this._route.url.pipe(\n map(() => {\n const url = this._router.url.split(\"?\").shift();\n if (this.item.exactMatch === true) {\n return url === this.item.link;\n }\n return url.startsWith(this.item.link) && url.length >= this.item.link.length;\n })\n );\n\n /**\n * Constructor\n */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _niceNavigationService: NiceNavigationService,\n private _niceUtilsService: NiceUtilsService,\n private _route: ActivatedRoute,\n private _router: Router\n ) {}\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Get the parent navigation component\n this._niceVerticalNavigationComponent = this._niceNavigationService.getComponent(this.name);\n\n // Subscribe to onRefreshed on the navigation component\n this._niceVerticalNavigationComponent.onRefreshed.pipe(\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n}\n","<!-- Item wrapper -->\n<div\n class=\"nice-vertical-navigation-item-wrapper\"\n [class.nice-vertical-navigation-item-has-subtitle]=\"!!item.subtitle\"\n [ngClass]=\"item.classes?.wrapper\"\n>\n\n <!-- Item with an internal link -->\n <a\n class=\"nice-vertical-navigation-item\"\n *ngIf=\"item.link && !item.externalLink && !item.function && !item.disabled\"\n [ngClass]=\"{'nice-vertical-navigation-item-active-forced': item.active}\"\n [routerLink]=\"[item.link]\"\n [routerLinkActive]=\"'nice-vertical-navigation-item-active'\"\n [routerLinkActiveOptions]=\"{exact: item.exactMatch || false}\"\n [queryParams]=\"item?.queryParams\"\n [state]=\"item?.state\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </a>\n\n <!-- Item with an external link -->\n <a\n class=\"nice-vertical-navigation-item\"\n *ngIf=\"item.link && item.externalLink && !item.function && !item.disabled\"\n [href]=\"item.link\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </a>\n\n <!-- Item with a function -->\n <div\n class=\"nice-vertical-navigation-item\"\n *ngIf=\"!item.link && item.function && !item.disabled\"\n [ngClass]=\"{'nice-vertical-navigation-item-active-forced': item.active}\"\n (click)=\"item.function(item)\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </div>\n\n <!-- Item with an internal link and function -->\n <a\n class=\"nice-vertical-navigation-item\"\n *ngIf=\"item.link && !item.externalLink && item.function && !item.disabled\"\n [ngClass]=\"{'nice-vertical-navigation-item-active-forced': item.active}\"\n [routerLink]=\"[item.link]\"\n [routerLinkActive]=\"'nice-vertical-navigation-item-active'\"\n [routerLinkActiveOptions]=\"{exact: item.exactMatch || false}\"\n (click)=\"item.function(item)\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </a>\n\n <!-- Item with an external link and function -->\n <a\n class=\"nice-vertical-navigation-item\"\n *ngIf=\"item.link && item.externalLink && item.function && !item.disabled\"\n [href]=\"item.link\"\n (click)=\"item.function(item)\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </a>\n\n <!-- Item with a no link and no function -->\n <div\n class=\"nice-vertical-navigation-item\"\n *ngIf=\"!item.link && !item.function && !item.disabled\"\n [ngClass]=\"{'nice-vertical-navigation-item-active-forced': item.active}\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </div>\n\n <!-- Item is disabled -->\n <div\n class=\"nice-vertical-navigation-item nice-vertical-navigation-item-disabled\"\n *ngIf=\"item.disabled\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </div>\n\n</div>\n\n<!-- Item template -->\n<ng-template #itemTemplate>\n <ng-container *ngIf=\"{ showHint: item | niceShouldShowHint | async } as ctx\">\n <!-- Icon -->\n <div class=\"nice-vertical-navigation-item-icon-wrapper\">\n <ng-container *ngIf=\"itemActive$ | async; else notActive\">\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n *ngIf=\"item.icon && item.iconType === 'material'\"\n >\n {{ item.activeIcon || item.icon }}\n </mat-icon>\n\n <i class=\"nice-vertical-navigation-item-icon fontawesome\" [ngClass]=\"item.activeIcon || item.icon\" *ngIf=\"item.icon && item.iconType == 'fontawesome'\"></i>\n\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n [svgIcon]=\"item.activeIcon || item.icon\"\n *ngIf=\"item.icon && item.iconType == 'svg'\"\n ></mat-icon>\n </ng-container>\n\n <ng-template #notActive>\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n *ngIf=\"item.icon && item.iconType === 'material'\"\n >\n {{ item.icon }}\n </mat-icon>\n\n <i class=\"nice-vertical-navigation-item-icon fontawesome\" [ngClass]=\"item.icon\" *ngIf=\"item.icon && item.iconType == 'fontawesome'\"></i>\n\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n [svgIcon]=\"item.icon\"\n *ngIf=\"item.icon && item.iconType == 'svg'\"\n ></mat-icon>\n </ng-template>\n\n <div *ngIf=\"ctx.showHint && item.icon\" class=\"nice-vertical-navigation-hint\"></div>\n </div>\n\n <!-- Title & Subtitle -->\n <div class=\"nice-vertical-navigation-item-title-wrapper\">\n <div class=\"nice-vertical-navigation-item-title\" niceShowHint [shouldShow]=\"ctx.showHint\" [item]=\"item\">\n <span [ngClass]=\"item.classes?.title\">\n {{ item.title | translate }}\n </span>\n\n <div *ngIf=\"ctx.showHint\" class=\"nice-vertical-navigation-hint\"></div>\n </div>\n <div\n class=\"nice-vertical-navigation-item-subtitle\"\n *ngIf=\"item.subtitle\"\n >\n <span [ngClass]=\"item.classes?.subtitle\">\n {{ item.subtitle | translate }}\n </span>\n </div>\n </div>\n\n <!-- Badge -->\n <div\n class=\"nice-vertical-navigation-item-badge\"\n *ngIf=\"item.badge\"\n >\n <div\n class=\"nice-vertical-navigation-item-badge-content\"\n [ngClass]=\"item.badge.classes\"\n >\n {{ item.badge.title | translate }}\n </div>\n </div>\n </ng-container>\n</ng-template>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { NiceNavigationService } from \"../../../navigation.service\";\nimport { NiceNavigationItem } from \"../../../navigation.types\";\n\n@Component({\n selector: \"nice-vertical-navigation-divider-item\",\n templateUrl: \"./divider.component.html\",\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceVerticalNavigationDividerItemComponent implements OnInit, OnDestroy {\n private _niceVerticalNavigationComponent;\n private _unsubscribeAll = new Subject<any>();\n\n @Input()\n public item: NiceNavigationItem;\n\n @Input()\n public name: string;\n\n /**\n * Constructor\n */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _niceNavigationService: NiceNavigationService\n ) {}\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Get the parent navigation component\n this._niceVerticalNavigationComponent = this._niceNavigationService.getComponent(this.name);\n\n // Subscribe to onRefreshed on the navigation component\n this._niceVerticalNavigationComponent.onRefreshed.pipe(\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n}\n","<!-- Divider -->\n<div\n class=\"nice-vertical-navigation-item-wrapper divider\"\n [ngClass]=\"item.classes?.wrapper\"\n></div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { NiceNavigationService } from \"../../../navigation.service\";\nimport { NiceNavigationItem } from \"../../../navigation.types\";\n\n@Component({\n selector: \"nice-vertical-navigation-spacer-item\",\n templateUrl: \"./spacer.component.html\",\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceVerticalNavigationSpacerItemComponent implements OnInit, OnDestroy {\n private _niceVerticalNavigationComponent;\n private _unsubscribeAll: Subject<any> = new Subject<any>();\n\n @Input()\n public item: NiceNavigationItem;\n\n @Input()\n public name: string;\n\n /**\n * Constructor\n */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _niceNavigationService: NiceNavigationService\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Get the parent navigation component\n this._niceVerticalNavigationComponent = this._niceNavigationService.getComponent(this.name);\n\n // Subscribe to onRefreshed on the navigation component\n this._niceVerticalNavigationComponent.onRefreshed.pipe(\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n}\n","<!-- Spacer -->\n<div\n class=\"nice-vertical-navigation-item-wrapper\"\n [ngClass]=\"item.classes?.wrapper\"\n></div>\n","import { BooleanInput } from \"@angular/cdk/coercion\";\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostBinding,\n Input,\n OnDestroy,\n OnInit\n} from \"@angular/core\";\nimport { NavigationEnd, Router } from \"@angular/router\";\nimport { BehaviorSubject, Subject } from \"rxjs\";\nimport { filter, takeUntil } from \"rxjs/operators\";\nimport { niceAnimations } from \"../../../../../animations\";\nimport { NiceNavigationService } from \"../../../navigation.service\";\nimport { NiceNavigationItem } from \"../../../navigation.types\";\n\n@Component({\n selector: \"nice-vertical-navigation-collapsable-item\",\n templateUrl: \"./collapsable.component.html\",\n styles: [],\n animations: niceAnimations,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceVerticalNavigationCollapsableItemComponent implements OnInit, OnDestroy {\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_autoCollapse: BooleanInput;\n\n private _niceVerticalNavigationComponent;\n private _unsubscribeAll = new Subject<any>();\n\n @Input()\n public autoCollapse: boolean;\n\n @Input()\n public item: NiceNavigationItem;\n\n @Input()\n public name: string;\n\n public isCollapsed = true;\n public isExpanded = false;\n\n public hasChildActivated$ = new BehaviorSubject(false);\n\n /**\n * Constructor\n */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _router: Router,\n private _niceNavigationService: NiceNavigationService\n ) {}\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Host binding for component classes\n */\n @HostBinding(\"class\")\n public get classList(): any {\n return {\n \"nice-vertical-navigation-item-collapsed\": this.isCollapsed,\n \"nice-vertical-navigation-item-expanded\": this.isExpanded\n };\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Get the parent navigation component\n this._niceVerticalNavigationComponent = this._niceNavigationService.getComponent(this.name);\n\n // If the item has a children that has a matching url with the current url, expand...\n if (this._hasActiveChild(this.item, this._router.url)) {\n this.hasChildActivated$.next(true);\n this.expand();\n }\n // Otherwise...\n else {\n // If the autoCollapse is on, collapse...\n if (this.autoCollapse) {\n this.hasChildActivated$.next(false);\n this.collapse();\n }\n }\n\n // Listen for the onCollapsableItemCollapsed from the service\n this._niceVerticalNavigationComponent.onCollapsableItemCollapsed\n .pipe(takeUntil(this._unsubscribeAll))\n .subscribe((collapsedItem) => {\n\n // Check if the collapsed item is null\n if (collapsedItem === null) {\n return;\n }\n\n // Collapse if this is a children of the collapsed item\n if (this._isChildrenOf(collapsedItem, this.item)) {\n this.collapse();\n }\n });\n\n // Listen for the onCollapsableItemExpanded from the service if the autoCollapse is on\n if (this.autoCollapse) {\n this._niceVerticalNavigationComponent.onCollapsableItemExpanded\n .pipe(takeUntil(this._unsubscribeAll))\n .subscribe((expandedItem) => {\n\n // Check if the expanded item is null\n if (expandedItem === null) {\n return;\n }\n\n // Check if this is a parent of the expanded item\n if (this._isChildrenOf(this.item, expandedItem)) {\n return;\n }\n\n // Check if this has a children with a matching url with the current active url\n if (this._hasActiveChild(this.item, this._router.url)) {\n return;\n }\n\n // Check if this is the expanded item\n if (this.item === expandedItem) {\n return;\n }\n\n // If none of the above conditions are matched, collapse this item\n this.collapse();\n });\n }\n\n // Attach a listener to the NavigationEnd event\n this._router.events\n .pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n takeUntil(this._unsubscribeAll)\n )\n .subscribe((event: NavigationEnd) => {\n\n // If the item has a children that has a matching url with the current url, expand...\n if (this._hasActiveChild(this.item, event.urlAfterRedirects)) {\n this.hasChildActivated$.next(true);\n this.expand();\n }\n // Otherwise...\n else {\n this.hasChildActivated$.next(false);\n\n // If the autoCollapse is on, collapse...\n if (this.autoCollapse) {\n this.collapse();\n }\n }\n });\n\n // Subscribe to onRefreshed on the navigation component\n this._niceVerticalNavigationComponent.onRefreshed.pipe(\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Check if the given item has the given url\n * in one of its children\n */\n private _hasActiveChild(item: NiceNavigationItem, currentUrl: string): boolean {\n const children = item.children;\n\n if (!children) {\n return false;\n }\n\n for (const child of children) {\n if (child.children) {\n if (this._hasActiveChild(child, currentUrl)) {\n return true;\n }\n }\n\n // Check if the child has a link and is active\n if (child.link && this._router.isActive(child.link, child.exactMatch || false)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Check if this is a children\n * of the given item\n */\n private _isChildrenOf(parent: NiceNavigationItem, item: NiceNavigationItem): boolean {\n const children = parent.children;\n\n if (!children) {\n return false;\n }\n\n if (children.indexOf(item) > -1) {\n return true;\n }\n\n for (const child of children) {\n if (child.children) {\n if (this._isChildrenOf(child, item)) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Collapse\n */\n public collapse(): void {\n // Return if the item is disabled\n if (this.item.disabled) {\n return;\n }\n\n // Return if the item is already collapsed\n if (this.isCollapsed) {\n return;\n }\n\n // Collapse it\n this.isCollapsed = true;\n this.isExpanded = !this.isCollapsed;\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n\n // Execute the observable\n this._niceVerticalNavigationComponent.onCollapsableItemCollapsed.next(this.item);\n }\n\n /**\n * Expand\n */\n public expand(): void {\n // Return if the item is disabled\n if (this.item.disabled) {\n return;\n }\n\n // Return if the item is already expanded\n if (!this.isCollapsed) {\n return;\n }\n\n // Expand it\n this.isCollapsed = false;\n this.isExpanded = !this.isCollapsed;\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n\n // Execute the observable\n this._niceVerticalNavigationComponent.onCollapsableItemExpanded.next(this.item);\n }\n\n /**\n * Toggle collapsable\n */\n public toggleCollapsable(): void {\n // Toggle collapse/expand\n if (this.isCollapsed) {\n this.expand();\n } else {\n this.collapse();\n }\n }\n\n /**\n * Track by function for ngFor loops\n */\n public trackByFn(index: number, item: any): any {\n return item.id || index;\n }\n}\n","<div\n class=\"nice-vertical-navigation-item-wrapper\"\n [class.nice-vertical-navigation-item-has-subtitle]=\"!!item.subtitle\"\n [ngClass]=\"item.classes?.wrapper\"\n>\n <div\n class=\"nice-vertical-navigation-item\"\n [ngClass]=\"{ 'nice-vertical-navigation-item-disabled': item.disabled }\"\n [class.child-activated]=\"hasChildActivated$ | async\"\n (click)=\"toggleCollapsable()\"\n *ngIf=\"{ showHint: item.children ?? [] | niceShouldShowHint | async } as ctx\"\n >\n <!-- Icon -->\n <div class=\"nice-vertical-navigation-item-icon-wrapper\" style=\"position: relative\">\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n *ngIf=\"item.icon && item.iconType === 'material'\"\n >\n {{ item.icon }}\n </mat-icon>\n\n <i class=\"nice-vertical-navigation-item-icon fontawesome\" [ngClass]=\"item.icon\" *ngIf=\"item.icon && item.iconType == 'fontawesome'\"></i>\n\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n [svgIcon]=\"item.icon\"\n *ngIf=\"item.icon && item.iconType == 'svg'\"\n ></mat-icon>\n\n <div *ngIf=\"ctx.showHint && item.icon\" class=\"nice-vertical-navigation-hint\"></div>\n </div>\n\n <!-- Title & Subtitle -->\n <div class=\"nice-vertical-navigation-item-title-wrapper\">\n <div class=\"nice-vertical-navigation-item-title\">\n <span [ngClass]=\"item.classes?.title\">\n {{ item.title | translate }}\n </span>\n\n <div *ngIf=\"ctx.showHint && isCollapsed\" class=\"nice-vertical-navigation-hint\"></div>\n </div>\n <div\n class=\"nice-vertical-navigation-item-subtitle\"\n *ngIf=\"item.subtitle\"\n >\n <span [ngClass]=\"item.classes?.subtitle\">\n {{ item.subtitle | translate }}\n </span>\n </div>\n </div>\n\n <!-- Badge -->\n <div\n class=\"nice-vertical-navigation-item-badge\"\n *ngIf=\"item.badge\">\n\n <div\n class=\"nice-vertical-navigation-item-badge-content\"\n [ngClass]=\"item.badge.classes\"\n >\n {{ item.badge.title | translate }}\n </div>\n </div>\n\n <!-- Arrow -->\n <mat-icon class=\"nice-vertical-navigation-item-arrow icon-size-4\">chevron_right</mat-icon>\n </div>\n</div>\n\n<div\n class=\"nice-vertical-navigation-item-children\"\n *ngIf=\"!isCollapsed\"\n @expandCollapse\n>\n <ng-container *ngFor=\"let item of item.children; trackBy: trackByFn\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"!(item | niceShouldHide | async)\">\n <!-- Basic -->\n <nice-vertical-navigation-basic-item\n *ngIf=\"item.type === 'basic'\"\n [item]=\"item\"\n [name]=\"name\"\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 ></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 ></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 </ng-container>\n</div>\n","import { BooleanInput } from \"@angular/cdk/coercion\";\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { NiceNavigationService } from \"../../../navigation.service\";\nimport { NiceNavigationItem } from \"../../../navigation.types\";\n\n@Component({\n selector: \"nice-vertical-navigation-group-item\",\n templateUrl: \"./group.component.html\",\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceVerticalNavigationGroupItemComponent implements OnInit, OnDestroy {\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_autoCollapse: BooleanInput;\n\n private _niceVerticalNavigationComponent;\n private _unsubscribeAll = new Subject<any>();\n\n @Input()\n public autoCollapse: boolean;\n\n @Input()\n public item: NiceNavigationItem;\n\n @Input()\n public name: string;\n\n /**\n * Constructor\n */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _niceNavigationService: NiceNavigationService\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Get the parent navigation component\n this._niceVerticalNavigationComponent = this._niceNavigationService.getComponent(this.name);\n\n // Subscribe to onRefreshed on the navigation component\n this._niceVerticalNavigationComponent.onRefreshed.pipe(\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Track by function for ngFor loops\n */\n public trackByFn(index: number, item: any): any {\n return item.id || index;\n }\n}\n","<!-- Item wrapper -->\n<div\n class=\"nice-vertical-navigation-item-wrapper\"\n [class.nice-vertical-navigation-item-has-subtitle]=\"!!item.subtitle\"\n [ngClass]=\"item.classes?.wrapper\"\n>\n <div class=\"nice-vertical-navigation-item\">\n <!-- Icon -->\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n *ngIf=\"item.icon && item.iconType === 'material'\"\n >\n {{ item.icon }}\n </mat-icon>\n\n <span class=\"nice-vertical-navigation-item-icon\" [ngClass]=\"item.icon\" *ngIf=\"item.icon && item.iconType == 'fontawesome'\"></span>\n\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n [svgIcon]=\"item.icon\"\n *ngIf=\"item.icon && item.iconType === 'svg'\"\n ></mat-icon>\n\n <!-- Title & Subtitle -->\n <div class=\"nice-vertical-navigation-item-title-wrapper\">\n <div class=\"nice-vertical-navigation-item-title\">\n <span [ngClass]=\"item.classes?.title\">\n {{ item.title | translate }}\n </span>\n </div>\n <div\n class=\"nice-vertical-navigation-item-subtitle\"\n *ngIf=\"item.subtitle\"\n >\n <span [ngClass]=\"item.classes?.subtitle\">\n {{ item.subtitle | translate }}\n </span>\n </div>\n </div>\n\n <!-- Badge -->\n <div\n class=\"nice-vertical-navigation-item-badge\"\n *ngIf=\"item.badge\"\n >\n <div\n class=\"nice-vertical-navigation-item-badge-content\"\n [ngClass]=\"item.badge.classes\"\n >\n {{ item.badge.title | translate }}\n </div>\n </div>\n </div>\n</div>\n\n<ng-container *ngFor=\"let item of item.children; trackBy: trackByFn\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"!(item | niceShouldHide | async)\">\n <!-- Basic -->\n <nice-vertical-navigation-basic-item\n *ngIf=\"item.type === 'basic'\"\n [item]=\"item\"\n [name]=\"name\"\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 ></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 ></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</ng-container>\n","import { BooleanInput } from \"@angular/cdk/coercion\";\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from \"@angular/core\";\nimport { NavigationEnd, Router } from \"@angular/router\";\nimport { Subject } from \"rxjs\";\nimport { filter, takeUntil } from \"rxjs/operators\";\nimport { NiceNavigationService } from \"../../../navigation.service\";\nimport { NiceNavigationItem } from \"../../../navigation.types\";\n\n@Component({\n selector: \"nice-vertical-navigation-aside-item\",\n templateUrl: \"./aside.component.html\",\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceVerticalNavigationAsideItemComponent implements OnChanges, OnInit, OnDestroy {\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_autoCollapse: BooleanInput;\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_skipChildren: BooleanInput;\n\n private _niceVerticalNavigationComponent;\n private _unsubscribeAll = new Subject<any>();\n\n @Input()\n public activeItemId: string;\n\n @Input()\n public autoCollapse: boolean;\n\n @Input()\n public item: NiceNavigationItem;\n\n @Input()\n public name: string;\n\n @Input()\n public skipChildren: boolean;\n\n public active = false;\n\n /**\n * Constructor\n */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _router: Router,\n private _niceNavigationService: NiceNavigationService\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On changes\n */\n public ngOnChanges(changes: SimpleChanges): void {\n // Active item id\n if (\"activeItemId\" in changes) {\n // Mark if active\n this._markIfActive(this._router.url);\n }\n }\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Mark if active\n this._markIfActive(this._router.url);\n\n // Attach a listener to the NavigationEnd event\n this._router.events\n .pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n takeUntil(this._unsubscribeAll)\n )\n .subscribe((event: NavigationEnd) => {\n\n // Mark if active\n this._markIfActive(event.urlAfterRedirects);\n });\n\n // Get the parent navigation component\n this._niceVerticalNavigationComponent = this._niceNavigationService.getComponent(this.name);\n\n // Subscribe to onRefreshed on the navigation component\n this._niceVerticalNavigationComponent.onRefreshed.pipe(\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Check if the given item has the given url\n * in one of its children\n */\n private _hasActiveChild(item: NiceNavigationItem, currentUrl: string): boolean {\n const children = item.children;\n\n if (!children) {\n return false;\n }\n\n for (const child of children) {\n if (child.children) {\n if (this._hasActiveChild(child, currentUrl)) {\n return true;\n }\n }\n\n // Skip items other than 'basic'\n if (child.type !== \"basic\") {\n continue;\n }\n\n // Check if the child has a link and is active\n if (child.link && this._router.isActive(child.link, child.exactMatch || false)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Decide and mark if the item is active\n */\n private _markIfActive(currentUrl: string): void {\n // Check if the activeItemId is equals to this item id\n this.active = this.activeItemId === this.item.id;\n\n // If the aside has a children that is active,\n // always mark it as active\n if (this._hasActiveChild(this.item, currentUrl)) {\n this.active = true;\n }\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Track by function for ngFor loops\n */\n public trackByFn(index: number, item: any): any {\n return item.id || index;\n }\n}\n","<div\n class=\"nice-vertical-navigation-item-wrapper\"\n [class.nice-vertical-navigation-item-has-subtitle]=\"!!item.subtitle\"\n [ngClass]=\"item.classes?.wrapper\"\n>\n <div\n class=\"nice-vertical-navigation-item\"\n [ngClass]=\"{\n 'nice-vertical-navigation-item-active': active,\n 'nice-vertical-navigation-item-disabled': item.disabled,\n 'nice-vertical-navigation-item-active-forced': item.active\n }\"\n >\n <!-- Icon -->\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n *ngIf=\"item.icon && item.iconType === 'material'\"\n >\n {{ item.icon }}\n </mat-icon>\n\n <span class=\"nice-vertical-navigation-item-icon\" [ngClass]=\"item.icon\" *ngIf=\"item.icon && item.iconType == 'fontawesome'\"></span>\n\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n [svgIcon]=\"item.icon\"\n *ngIf=\"item.icon && item.iconType === 'svg'\"\n ></mat-icon>\n\n <!-- Title & Subtitle -->\n <div class=\"nice-vertical-navigation-item-title-wrapper\">\n <div class=\"nice-vertical-navigation-item-title\">\n <span [ngClass]=\"item.classes?.title\">\n {{ item.title | translate }}\n </span>\n </div>\n <div\n class=\"nice-vertical-navigation-item-subtitle\"\n *ngIf=\"item.subtitle\"\n >\n <span [ngClass]=\"item.classes?.subtitle\">\n {{ item.subtitle | translate }}\n </span>\n </div>\n </div>\n\n <!-- Badge -->\n <div\n class=\"nice-vertical-navigation-item-badge\"\n *ngIf=\"item.badge\"\n >\n <div\n class=\"nice-vertical-navigation-item-badge-content\"\n [ngClass]=\"item.badge.classes\"\n >\n {{ item.badge.title | translate }}\n </div>\n </div>\n </div>\n</div>\n\n<ng-container *ngIf=\"!skipChildren\">\n <div class=\"nice-vertical-navigation-item-children\">\n <ng-container *ngFor=\"let item of item.children; trackBy: trackByFn\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"(item.hidden && !item.hidden(item)) || !item.hidden\">\n <!-- Basic -->\n <nice-vertical-navigation-basic-item\n *ngIf=\"item.type === 'basic'\"\n [item]=\"item\"\n [name]=\"name\"\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 ></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 ></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 </ng-container>\n </div>\n</ng-container>\n","import { animate, AnimationBuilder, AnimationPlayer, style } from \"@angular/animations\";\nimport { BooleanInput, coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport { ScrollStrategy, ScrollStrategyOptions } from \"@angular/cdk/overlay\";\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnInit,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { NavigationEnd, Router } from \"@angular/router\";\nimport { merge, ReplaySubject, Subscription } from \"rxjs\";\nimport { delay, filter, takeUntil } from \"rxjs/operators\";\nimport { niceAnimations } from \"../../../animations\";\nimport { NiceScrollbarDirective } from \"../../../directives/scrollbar\";\nimport { NiceUtilsService } from \"../../../providers/utils\";\nimport { NiceNavigationComponent } from \"../navigation.component\";\nimport { NiceNavigationService } from \"../navigation.service\";\nimport {\n NiceNavigationItem,\n NiceVerticalNavigationAppearance,\n NiceVerticalNavigationMode,\n NiceVerticalNavigationPosition\n} from \"../navigation.types\";\n\n@Component({\n selector: \"nice-vertical-navigation\",\n templateUrl: \"./vertical.component.html\",\n animations: niceAnimations,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: \"niceVerticalNavigation\"\n})\nexport class NiceVerticalNavigationComponent extends NiceNavigationComponent implements OnChanges, OnInit, AfterViewInit {\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_inner: BooleanInput;\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_opened: BooleanInput;\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_transparentOverlay: BooleanInput;\n\n private _animationsEnabled = false;\n private _asideOverlay: HTMLElement;\n private readonly _handleAsideOverlayClick: any;\n private readonly _handleOverlayClick: any;\n private _overlay: HTMLElement;\n private _player: AnimationPlayer;\n private _scrollStrategy: ScrollStrategy = this._scrollStrategyOptions.block();\n private _niceScrollbarDirectives!: QueryList<NiceScrollbarDirective>;\n private _niceScrollbarDirectivesSubscription: Subscription;\n\n @Input()\n public name: string = this._niceUtilsService.randomId();\n\n @Input()\n public appearance: NiceVerticalNavigationAppearance = \"default\";\n\n @Input()\n public autoCollapse = true;\n\n @Input()\n public inner = false;\n\n @Input()\n public mode: NiceVerticalNavigationMode = \"side\";\n\n @Input()\n public opened = true;\n\n @Input()\n public hovered = false;\n\n @Input()\n public position: NiceVerticalNavigationPosition = \"left\";\n\n @Input()\n public transparentOverlay = false;\n\n @Output()\n public readonly appearanceChanged = new EventEmitter<NiceVerticalNavigationAppearance>();\n\n @Output()\n public readonly modeChanged = new EventEmitter<NiceVerticalNavigationMode>();\n\n @Output()\n public readonly openedChanged = new EventEmitter<boolean>();\n\n @Output()\n public readonly positionChanged = new EventEmitter<NiceVerticalNavigationPosition>();\n\n @ViewChild(\"navigationContent\")\n private _navigationContentEl: ElementRef;\n\n @Input()\n public set navigation(navigation: NiceNavigationItem[]) {\n this._navigation = navigation;\n this._changeDetectorRef.markForCheck();\n }\n public get navigation(): NiceNavigationItem[] {\n return this._navigation;\n }\n\n public activeAsideItemId: string | null = null;\n public onCollapsableItemCollapsed = new ReplaySubject<NiceNavigationItem>(1);\n public onCollapsableItemExpanded = new ReplaySubject<NiceNavigationItem>(1);\n\n /**\n * Constructor\n */\n constructor(\n _changeDetectorRef: ChangeDetectorRef,\n _niceNavigationService: NiceNavigationService,\n _niceUtilsService: NiceUtilsService,\n private _animationBuilder: AnimationBuilder,\n private _elementRef: ElementRef,\n private _renderer2: Renderer2,\n private _router: Router,\n private _scrollStrategyOptions: ScrollStrategyOptions\n ) {\n super(_changeDetectorRef, _niceNavigationService, _niceUtilsService);\n\n this._handleAsideOverlayClick = () => {\n this.closeAside();\n };\n this._handleOverlayClick = () => {\n this.close();\n };\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Host binding for component classes\n */\n @HostBinding(\"class\")\n public get classList(): any {\n return {\n \"nice-vertical-navigation-animations-enabled\": this._animationsEnabled,\n [`nice-vertical-navigation-appearance-${this.appearance}`]: true,\n \"nice-vertical-navigation-hover\": this.hovered,\n \"nice-vertical-navigation-inner\": this.inner,\n \"nice-vertical-navigation-mode-over\": this.mode === \"over\",\n \"nice-vertical-navigation-mode-side\": this.mode === \"side\",\n \"nice-vertical-navigation-opened\": this.opened,\n \"nice-vertical-navigation-position-left\": this.position === \"left\",\n \"nice-vertical-navigation-position-right\": this.position === \"right\"\n };\n }\n\n /**\n * Host binding for component inline styles\n */\n @HostBinding(\"style\")\n public get styleList(): any {\n return {\n \"visibility\": this.opened ? \"visible\" : \"hidden\"\n };\n }\n\n /**\n * Setter for niceScrollbarDirectives\n */\n @ViewChildren(NiceScrollbarDirective)\n public set niceScrollbarDirectives(niceScrollbarDirectives: QueryList<NiceScrollbarDirective>) {\n // Store the directives\n this._niceScrollbarDirectives = niceScrollbarDirectives;\n\n // Return if there are no directives\n if (niceScrollbarDirectives.length === 0) {\n return;\n }\n\n // Unsubscribe the previous subscriptions\n if (this._niceScrollbarDirectivesSubscription) {\n this._niceScrollbarDirectivesSubscription.unsubscribe();\n }\n\n // Update the scrollbars on collapsable items' collapse/expand\n this._niceScrollbarDirectivesSubscription =\n merge(\n this.onCollapsableItemCollapsed,\n this.onCollapsableItemExpanded\n )\n .pipe(\n takeUntil(this._unsubscribeAll),\n delay(250)\n )\n .subscribe(() => {\n\n // Loop through the scrollbars and update them\n niceScrollbarDirectives.forEach((niceScrollbarDirective) => {\n niceScrollbarDirective.update();\n });\n });\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On changes\n *\n * @param changes\n */\n public ngOnChanges(changes: SimpleChanges): void {\n super.ngOnChanges(changes);\n\n // Appearance\n if (\"appearance\" in changes) {\n // Execute the observable\n this.appearanceChanged.next(changes.appearance.currentValue);\n }\n\n // Inner\n if (\"inner\" in changes) {\n // Coerce the value to a boolean\n this.inner = coerceBooleanProperty(changes.inner.currentValue);\n }\n\n // Mode\n if (\"mode\" in changes) {\n // Get the previous and current values\n const currentMode = changes.mode.currentValue;\n const previousMode = changes.mode.previousValue;\n\n // Disable the animations\n this._disableAnimations();\n\n // If the mode changes: 'over -> side'\n if (previousMode === \"over\" && currentMode === \"side\") {\n // Hide the overlay\n this._hideOverlay();\n }\n\n // If the mode changes: 'side -> over'\n if (previousMode === \"side\" && currentMode === \"over\") {\n // Close the aside\n this.closeAside();\n\n // If the navigation is opened\n if (this.opened) {\n // Show the overlay\n this._showOverlay();\n }\n }\n\n // Execute the observable\n this.modeChanged.next(currentMode);\n\n // Enable the animations after a delay\n // The delay must be bigger than the current transition-duration\n // to make sure nothing will be animated while the mode changing\n setTimeout(() => {\n this._enableAnimations();\n }, 500);\n }\n\n // Opened\n if (\"opened\" in changes) {\n // Coerce the value to a boolean\n this.opened = coerceBooleanProperty(changes.opened.currentValue);\n\n // Open/close the navigation\n this._toggleOpened(this.opened);\n }\n\n // Position\n if (\"position\" in changes) {\n // Execute the observable\n this.positionChanged.next(changes.position.currentValue);\n }\n\n // Transparent overlay\n if (\"transparentOverlay\" in changes) {\n // Coerce the value to a boolean\n this.transparentOverlay = coerceBooleanProperty(changes.transparentOverlay.currentValue);\n }\n }\n\n /**\n * On init\n */\n public ngOnInit(): void {\n super.ngOnInit();\n\n // Make sure the name input is not an empty string\n if (this.name === \"\") {\n this.name = this._niceUtilsService.randomId();\n }\n\n // Subscribe to the 'NavigationEnd' event\n this._router.events\n .pipe(\n filter(event => event instanceof NavigationEnd),\n takeUntil(this._unsubscribeAll)\n )\n .subscribe(() => {\n // If the mode is 'over' and the navigation is opened...\n if (this.mode === \"over\" && this.opened) {\n // Close the navigation\n this.close();\n }\n\n // If the mode is 'side' and the aside is active...\n if (this.mode === \"side\" && this.activeAsideItemId) {\n // Close the aside\n this.closeAside();\n }\n });\n }\n\n /**\n * After view init\n */\n public ngAfterViewInit(): void {\n setTimeout(() => {\n\n // Return if 'navigation content' element does not exist\n if (!this._navigationContentEl) {\n return;\n }\n\n // If 'navigation content' element doesn't have\n // perfect scrollbar activated on it...\n if (!this._navigationContentEl.nativeElement.classList.contains(\"ps\")) {\n // Find the active item\n const activeItem = this._navigationContentEl.nativeElement.querySelector(\".nice-vertical-navigation-item-active\");\n\n // If the active item exists, scroll it into view\n if (activeItem) {\n activeItem.scrollIntoView();\n }\n }\n // Otherwise\n else {\n // Go through all the scrollbar directives\n this._niceScrollbarDirectives.forEach((niceScrollbarDirective) => {\n\n // Skip if not enabled\n if (!niceScrollbarDirective.isEnabled()) {\n return;\n }\n\n // Scroll to the active element\n niceScrollbarDirective.scrollToElement(\".nice-vertical-navigation-item-active\", -120, true);\n });\n }\n });\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Open the navigation\n */\n public open(): void {\n // Return if the navigation is already open\n if (this.opened) {\n return;\n }\n\n // Set the opened\n this._toggleOpened(true);\n }\n\n /**\n * Close the navigation\n */\n public close(): void {\n // Return if the navigation is already closed\n if (!this.opened) {\n return;\n }\n\n // Close the aside\n this.closeAside();\n\n // Set the opened\n this._toggleOpened(false);\n }\n\n /**\n * Toggle the navigation\n */\n public toggle(): void {\n // Toggle\n if (this.opened) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * Open the aside\n */\n public openAside(item: NiceNavigationItem): void {\n // Return if the item is disabled\n if (item.disabled || !item.id) {\n return;\n }\n\n // Open\n this.activeAsideItemId = item.id;\n\n // Show the aside overlay\n this._showAsideOverlay();\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Close the aside\n */\n public closeAside(): void {\n // Close\n this.activeAsideItemId = null;\n\n // Hide the aside overlay\n this._hideAsideOverlay();\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Toggle the aside\n */\n public toggleAside(item: NiceNavigationItem): void {\n // Toggle\n if (this.activeAsideItemId === item.id) {\n this.closeAside();\n } else {\n this.openAside(item);\n }\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Enable the animations\n *\n * @private\n */\n private _enableAnimations(): void {\n // Return if the animations are already enabled\n if (this._animationsEnabled) {\n return;\n }\n\n // Enable the animations\n this._animationsEnabled = true;\n }\n\n /**\n * Disable the animations\n *\n * @private\n */\n private _disableAnimations(): void {\n // Return if the animations are already disabled\n if (!this._animationsEnabled) {\n return;\n }\n\n // Disable the animations\n this._animationsEnabled = false;\n }\n\n /**\n * Show the overlay\n *\n * @private\n */\n private _showOverlay(): void {\n // Return if there is already an overlay\n if (this._asideOverlay) {\n return;\n }\n\n // Create the overlay element\n this._overlay = this._renderer2.createElement(\"div\");\n\n // Add a class to the overlay element\n this._overlay.classList.add(\"nice-vertical-navigation-overlay\");\n\n // Add a class depending on the transparentOverlay option\n if (this.transparentOverlay) {\n this._overlay.classList.add(\"nice-vertical-navigation-overlay-transparent\");\n }\n\n // Append the overlay to the parent of the navigation\n this._renderer2.appendChild(this._elementRef.nativeElement.parentElement, this._overlay);\n\n // Enable block scroll strategy\n this._scrollStrategy.enable();\n\n // Create the enter animation and attach it to the player\n this._player = this._animationBuilder.build([\n animate(\"300ms cubic-bezier(0.25, 0.8, 0.25, 1)\", style({opacity: 1}))\n ]).create(this._overlay);\n\n // Play the animation\n this._player.play();\n\n // Add an event listener to the overlay\n this._overlay.addEventListener(\"click\", this._handleOverlayClick);\n }\n\n /**\n * Hide the overlay\n *\n * @private\n */\n private _hideOverlay(): void {\n if (!this._overlay) {\n return;\n }\n\n // Create the leave animation and attach it to the player\n this._player = this._animationBuilder.build([\n animate(\"300ms cubic-bezier(0.25, 0.8, 0.25, 1)\", style({opacity: 0}))\n ]).create(this._overlay);\n\n // Play the animation\n this._player.play();\n\n // Once the animation is done...\n this._player.onDone(() => {\n\n // If the overlay still exists...\n if (this._overlay) {\n // Remove the event listener\n this._overlay.removeEventListener(\"click\", this._handleOverlayClick);\n\n // Remove the overlay\n this._overlay.parentNode.removeChild(this._overlay);\n this._overlay = null;\n }\n\n // Disable block scroll strategy\n this._scrollStrategy.disable();\n });\n }\n\n /**\n * Show the aside overlay\n *\n * @private\n */\n private _showAsideOverlay(): void {\n // Return if there is already an overlay\n if (this._asideOverlay) {\n return;\n }\n\n // Create the aside overlay element\n this._asideOverlay = this._renderer2.createElement(\"div\");\n\n // Add a class to the aside overlay element\n this._asideOverlay.classList.add(\"nice-vertical-navigation-aside-overlay\");\n\n // Append the aside overlay to the parent of the navigation\n this._renderer2.appendChild(this._elementRef.nativeElement.parentElement, this._asideOverlay);\n\n // Create the enter animation and attach it to the player\n this._player =\n this._animationBuilder\n .build([\n animate(\"300ms cubic-bezier(0.25, 0.8, 0.25, 1)\", style({opacity: 1}))\n ]).create(this._asideOverlay);\n\n // Play the animation\n this._player.play();\n\n // Add an event listener to the aside overlay\n this._asideOverlay.addEventListener(\"click\", this._handleAsideOverlayClick);\n }\n\n /**\n * Hide the aside overlay\n *\n * @private\n */\n private _hideAsideOverlay(): void {\n if (!this._asideOverlay) {\n return;\n }\n\n // Create the leave animation and attach it to the player\n this._player =\n this._animationBuilder\n .build([\n animate(\"300ms cubic-bezier(0.25, 0.8, 0.25, 1)\", style({opacity: 0}))\n ]).create(this._asideOverlay);\n\n // Play the animation\n this._player.play();\n\n // Once the animation is done...\n this._player.onDone(() => {\n\n // If the aside overlay still exists...\n if (this._asideOverlay) {\n // Remove the event listener\n this._asideOverlay.removeEventListener(\"click\", this._handleAsideOverlayClick);\n\n // Remove the aside overlay\n this._asideOverlay.parentNode.removeChild(this._asideOverlay);\n this._asideOverlay = null;\n }\n });\n }\n\n /**\n * On mouseenter\n */\n @HostListener(\"mouseenter\")\n public _onMouseenter(): void {\n // Enable the animations\n this._enableAnimations();\n\n // Set the hovered\n this.hovered = true;\n }\n\n /**\n * On mouseleave\n */\n @HostListener(\"mouseleave\")\n public _onMouseleave(): void {\n // Enable the animations\n this._enableAnimations();\n\n // Set the hovered\n this.hovered = false;\n }\n\n /**\n * Open/close the navigation\n *\n * @param open\n * @private\n */\n private _toggleOpened(open: boolean): void {\n // Set the opened\n this.opened = open;\n\n // Enable the animations\n this._enableAnimations();\n\n // If the navigation opened, and the mode\n // is 'over', show the overlay\n if (this.mode === \"over\") {\n if (this.opened) {\n this._showOverlay();\n } else {\n this._hideOverlay();\n }\n }\n\n // Execute the observable\n this.openedChanged.next(open);\n }\n}\n","<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 (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 ></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 ></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 ></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 ></nice-vertical-navigation-aside-item>\n </ng-container>\n </ng-container>\n</div>\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatDividerModule } from \"@angular/material/divider\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatMenuModule } from \"@angular/material/menu\";\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\nimport { RouterModule } from \"@angular/router\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { NiceScrollbarModule } from \"../../directives/scrollbar\";\nimport { NiceShowHintDirective } from \"./directives/show-hint.directive\";\nimport { NiceHorizontalNavigationBasicItemComponent } from \"./horizontal/components/basic/basic.component\";\nimport { NiceHorizontalNavigationBranchItemComponent } from \"./horizontal/components/branch/branch.component\";\nimport { NiceHorizontalNavigationDividerItemComponent } from \"./horizontal/components/divider/divider.component\";\nimport { NiceHorizontalNavigationSpacerItemComponent } from \"./horizontal/components/spacer/spacer.component\";\nimport { NiceHorizontalNavigationComponent } from \"./horizontal/horizontal.component\";\nimport { NiceNavigationComponent } from \"./navigation.component\";\nimport { NiceShouldHidePipe } from \"./pipes/should-hide.pipe\";\nimport { NiceShouldShowHintPipe } from \"./pipes/should-show-hint.pipe\";\nimport { NiceVerticalNavigationAsideItemComponent } from \"./vertical/components/aside/aside.component\";\nimport { NiceVerticalNavigationBasicItemComponent } from \"./vertical/components/basic/basic.component\";\nimport { NiceVerticalNavigationCollapsableItemComponent } from \"./vertical/components/collapsable/collapsable.component\";\nimport { NiceVerticalNavigationDividerItemComponent } from \"./vertical/components/divider/divider.component\";\nimport { NiceVerticalNavigationGroupItemComponent } from \"./vertical/components/group/group.component\";\nimport { NiceVerticalNavigationSpacerItemComponent } from \"./vertical/components/spacer/spacer.component\";\nimport { NiceVerticalNavigationComponent } from \"./vertical/vertical.component\";\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n MatButtonModule,\n MatDividerModule,\n MatIconModule,\n MatMenuModule,\n MatTooltipModule,\n NiceScrollbarModule,\n TranslateModule,\n ],\n declarations: [\n NiceNavigationComponent,\n NiceHorizontalNavigationBasicItemComponent,\n NiceHorizontalNavigationBranchItemComponent,\n NiceHorizontalNavigationDividerItemComponent,\n NiceHorizontalNavigationSpacerItemComponent,\n NiceHorizontalNavigationComponent,\n NiceVerticalNavigationAsideItemComponent,\n NiceVerticalNavigationBasicItemComponent,\n NiceVerticalNavigationCollapsableItemComponent,\n NiceVerticalNavigationDividerItemComponent,\n NiceVerticalNavigationGroupItemComponent,\n NiceVerticalNavigationSpacerItemComponent,\n NiceVerticalNavigationComponent,\n\n NiceShouldHidePipe,\n NiceShouldShowHintPipe,\n NiceShowHintDirective\n ],\n exports: [\n NiceHorizontalNavigationComponent,\n NiceVerticalNavigationComponent\n ]\n})\nexport class NiceNavigationModule {\n}\n","import { Observable } from \"rxjs\";\nimport { NiceNavigationItem } from \"../navigation.types\";\n\nexport abstract class NavigationHideItemResolver {\n public abstract shouldHide(item: NiceNavigationItem): Observable<boolean>;\n}\n","import { Observable } from \"rxjs\";\n\nexport abstract class NavigationHintResolver {\n public abstract shouldShowHint(): Observable<boolean>;\n}\n","import { Component, EventEmitter, forwardRef, HostBinding, Input, Output } from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { niceAnimations } from \"../../animations\";\n\n@Component({\n selector: \"nice-search-bar\",\n templateUrl: \"./search-bar.template.html\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NiceSearchBarComponent),\n multi: true\n }\n ],\n animations: niceAnimations\n})\nexport class NiceSearchBarComponent implements ControlValueAccessor {\n @Input()\n public collapsed = true;\n\n @Output()\n public collapse = new EventEmitter<boolean>();\n\n public searchValue: string;\n public opened = false;\n\n private propagateChanges = (value: string) => {};\n\n @HostBinding(\"class\")\n public get classList(): any {\n return {\n \"search-opened\": this.opened\n };\n }\n\n public toggleCollapsed(): void {\n this.collapsed = !this.collapsed;\n this.collapse.emit(this.collapsed);\n }\n\n public registerOnChange(fn: (value: string) => void): void {\n this.propagateChanges = fn;\n }\n\n public registerOnTouched(fn: any): void {\n // NO-OP\n }\n\n public writeValue(value: string): void {\n this.searchValue = value;\n }\n\n public onSearchChange(value: string) {\n this.propagateChanges(value);\n }\n\n public open(): void {\n if (this.opened) {\n return;\n }\n\n this.opened = true;\n }\n\n public close(): void {\n if (!this.opened) {\n return;\n }\n\n this.searchValue = \"\";\n this.opened = false;\n }\n}\n","<button mat-icon-button *ngIf=\"!opened\" (click)=\"open()\">\n <mat-icon [svgIcon]=\"'heroicons_outline:search'\"></mat-icon>\n</button>\n\n<div class=\"absolute inset-0 flex items-center flex-shrink-0 z-99 bg-default\" *ngIf=\"opened\" @slideInTop @slideOutTop >\n <mat-icon class=\"absolute ml-6 sm:ml-8\" [svgIcon]=\"'heroicons_outline:search'\"></mat-icon>\n <input class=\"w-full h-full px-16 sm:px-18 bg-transparent\" [ngModel]=\"searchValue\" (ngModelChange)=\"onSearchChange($event)\">\n <button class=\"absolute top-1/2 right-5 sm:right-7 flex-shrink-0 w-10 h-10 -mt-5\" mat-icon-button (click)=\"close()\">\n <mat-icon [svgIcon]=\"'heroicons_outline:x'\"></mat-icon>\n </button>\n</div>\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { RouterModule } from \"@angular/router\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { NiceSearchBarComponent } from \"./search-bar.component\";\nimport { FormsModule } from \"@angular/forms\";\n\n@NgModule({\n declarations: [\n NiceSearchBarComponent\n ],\n imports: [\n CommonModule,\n RouterModule,\n\n MatButtonModule,\n MatIconModule,\n FormsModule\n ],\n exports: [\n NiceSearchBarComponent\n ]\n})\nexport class NiceSearchBarModule {\n}\n","import { Component, Inject, OnInit, ViewEncapsulation } from \"@angular/core\";\nimport { MAT_DIALOG_DATA, MatDialogRef } from \"@angular/material/dialog\";\n\nexport interface NiceAlertConfig {\n type: \"success\" | \"warning\" | \"info\";\n title?: string;\n message?: string;\n buttons: string[];\n}\n\n@Component({\n selector: \"nice-alert\",\n templateUrl: \"sweet-alert.template.html\",\n styleUrls: [\"sweet-alert.style.scss\"],\n encapsulation: ViewEncapsulation.None\n})\nexport class NiceSweetAlertComponent implements OnInit {\n public lottieConfig = {\n path: \"assets/animations/success.json\",\n autoplay: true,\n loop: false\n };\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public alertConfig: NiceAlertConfig,\n private dialogRef: MatDialogRef<NiceSweetAlertComponent>\n ) {\n this.lottieConfig.path = this.getAnimationPath();\n }\n\n public ngOnInit() {}\n\n public handleAnimation(animation) {\n animation.setSpeed(1.0);\n }\n\n public confirm() {\n this.dialogRef.close(true);\n }\n\n public close() {\n this.dialogRef.close(false);\n }\n\n public getAnimationPath(): string {\n switch (this.alertConfig.type) {\n case \"success\":\n return \"assets/animations/success.json\";\n case \"warning\":\n return \"assets/animations/warning.json\";\n case \"info\":\n return \"assets/animations/info.json\";\n }\n }\n\n public getConfirmButtonClass(): string {\n switch (this.alertConfig.type) {\n case \"success\":\n return \"mat-accent\";\n case \"warning\":\n return \"mat-warn\";\n case \"info\":\n return \"bg-light-blue-500\";\n }\n }\n}\n","<mat-dialog-content class=\"mat-typography mb-12 text-center\">\n <nice-lottie\n [options]=\"lottieConfig\"\n [width]=\"250\"\n (animCreated)=\"handleAnimation($event)\"\n ></nice-lottie>\n <h2 class=\"mt-8\">{{ alertConfig?.title }}</h2>\n <span [innerHTML]=\"alertConfig?.message\"></span>\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <ng-container *ngFor=\"let button of alertConfig.buttons; let i = index\">\n <button mat-raised-button class=\"mr-4\" [ngClass]=\"getConfirmButtonClass()\" *ngIf=\"i === 0\" (click)=\"confirm()\">\n {{ button }}\n </button>\n <button mat-button (click)=\"close()\" *ngIf=\"i !== 0\">{{ button }}</button>\n </ng-container>\n</mat-dialog-actions>\n","import { InjectionToken } from \"@angular/core\";\n\nexport const NICE_ALERT_OPTIONS = new InjectionToken(\"nice_alert_options\");\n","import { Inject, Injectable, Optional, Type } from \"@angular/core\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { TranslateService } from \"@ngx-translate/core\";\nimport { map, switchMap } from \"rxjs/operators\";\nimport { NiceSweetAlertComponent } from \"./sweet-alert.component\";\nimport { Observable } from \"rxjs\";\nimport { NICE_ALERT_OPTIONS } from \"./sweet-alert.constant\";\n\nexport interface NiceSweetAlertOptions {\n customModal?: Type<any>;\n}\n\n@Injectable()\nexport class NiceSweetAlertService {\n private readonly modal: Type<any>;\n\n constructor(\n @Optional() @Inject(NICE_ALERT_OPTIONS) private options: NiceSweetAlertOptions,\n private matDialog: MatDialog,\n private translateService: TranslateService\n ) {\n this.modal = this.options?.customModal ?? NiceSweetAlertComponent;\n }\n\n public success(titleKey: string, messageKey: string, buttonsKey: string[], params?: object): Observable<boolean> {\n return this.getTranslations(titleKey, messageKey, buttonsKey, params).pipe(\n switchMap(([title, message, buttons]) => {\n return this.matDialog\n .open(this.modal, {\n panelClass: \"nice-alert-modal\",\n data: {\n type: \"success\",\n title,\n message,\n buttons\n }\n })\n .afterClosed();\n })\n );\n }\n\n public warning(titleKey: string, messageKey: string, buttonsKey: string[], params?: object): Observable<boolean> {\n return this.getTranslations(titleKey, messageKey, buttonsKey, params).pipe(\n switchMap(([title, message, buttons]) => {\n return this.matDialog\n .open(this.modal, {\n panelClass: \"nice-alert-modal\",\n data: {\n type: \"warning\",\n title,\n message,\n buttons\n }\n })\n .afterClosed();\n })\n );\n }\n\n public info(titleKey: string, messageKey: string, buttonsKey: string[], params?: object): Observable<boolean> {\n return this.getTranslations(titleKey, messageKey, buttonsKey, params).pipe(\n switchMap(([title, message, buttons]) => {\n return this.matDialog\n .open(this.modal, {\n panelClass: \"nice-alert-modal\",\n data: {\n type: \"info\",\n title,\n message,\n buttons\n }\n })\n .afterClosed();\n })\n );\n }\n\n private getTranslations(\n title: string,\n message: string,\n buttons: string[],\n params?: object\n ): Observable<[string, string, string[]]> {\n return this.translateService.get([title, message, ...buttons], params).pipe(\n map((result: { [key: string]: string }) => {\n return [result[title], result[message], buttons.map(button => result[button])] as [\n string,\n string,\n string[]\n ];\n })\n );\n }\n}\n","import { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { NiceSweetAlertComponent } from \"./sweet-alert.component\";\nimport { CommonModule } from \"@angular/common\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { NiceSweetAlertOptions, NiceSweetAlertService } from \"./sweet-alert.service\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatDialogModule } from \"@angular/material/dialog\";\nimport { NiceLottieModule } from \"../lottie/lottie.module\";\nimport { NICE_ALERT_OPTIONS } from \"./sweet-alert.constant\";\n\n@NgModule({\n imports: [CommonModule, TranslateModule, MatDialogModule, MatButtonModule, NiceLottieModule],\n declarations: [NiceSweetAlertComponent],\n providers: [NiceSweetAlertService]\n})\nexport class NiceSweetAlertModule {\n public static forRoot(options?: NiceSweetAlertOptions): ModuleWithProviders<NiceSweetAlertModule> {\n return {\n ngModule: NiceSweetAlertModule,\n providers: [\n {\n provide: NICE_ALERT_OPTIONS,\n useValue: options\n }\n ]\n };\n }\n}\n","import { Component, Inject, ViewEncapsulation } from \"@angular/core\";\nimport { MAT_SNACK_BAR_DATA, MatSnackBarRef } from \"@angular/material/snack-bar\";\nimport { NiceAlertAppearance } from \"../alert\";\n\nexport interface NiceToastData {\n title?: string;\n message?: string;\n appearance?: NiceAlertAppearance;\n type: \"info\" | \"success\" | \"warning\" | \"error\";\n}\n\n@Component({\n selector: \"nice-toast\",\n templateUrl: \"toast.template.html\",\n styleUrls: [\"toast.style.scss\"],\n encapsulation: ViewEncapsulation.None\n})\nexport class NiceToastComponent {\n constructor(\n @Inject(MAT_SNACK_BAR_DATA) public data: NiceToastData,\n private snackbarRef: MatSnackBarRef<NiceToastComponent>\n ) {}\n\n public dismiss() {\n this.snackbarRef.dismiss();\n }\n}\n","<nice-alert disableAnimation [type]=\"data.type\" [appearance]=\"data.appearance || 'outline'\" (click)=\"dismiss()\">\n <span niceAlertTitle *ngIf=\"data.title\">{{ data.title }}</span>\n <span [innerHtml]=\"data.message\" *ngIf=\"data.message\"></span>\n</nice-alert>\n","import { InjectionToken } from \"@angular/core\";\n\nexport const NICE_TOAST_OPTIONS = new InjectionToken(\"nice_toast_options\");\n","import { Inject, Injectable } from \"@angular/core\";\nimport { MatSnackBar, MatSnackBarConfig } from \"@angular/material/snack-bar\";\nimport { TranslateService } from \"@ngx-translate/core\";\nimport { NiceAlertAppearance } from \"../alert\";\nimport { NiceToastComponent } from \"./toast.component\";\nimport { NICE_TOAST_OPTIONS } from \"./toast.constant\";\n\nexport interface NiceToastOptions extends MatSnackBarConfig {\n appearance?: NiceAlertAppearance;\n successDuration?: number;\n warningDuration?: number;\n errorDuration?: number;\n infoDuration?: number;\n}\n\n@Injectable({ providedIn: \"any\" })\nexport class NiceToastService {\n constructor(\n @Inject(NICE_TOAST_OPTIONS)\n private options: NiceToastOptions,\n private snackbar: MatSnackBar,\n private translateService: TranslateService\n ) {}\n\n public success(messageKey: string, titleKey?: string, params?: object): void {\n this.showToast(\"success\", messageKey, titleKey, params);\n }\n\n public error(messageKey: string, titleKey?: string, params?: object): void {\n this.showToast(\"error\", messageKey, titleKey, params);\n }\n\n public warning(messageKey: string, titleKey?: string, params?: object): void {\n this.showToast(\"warning\", messageKey, titleKey, params);\n }\n\n public info(messageKey: string, titleKey?: string, params?: object): void {\n this.showToast(\"info\", messageKey, titleKey, params);\n }\n\n private showToast(type: string, messageKey: string, titleKey?: string, params?: object): void {\n const [message, title] = this.getTranslations(messageKey, titleKey, params);\n const duration = this.options[`${type}Duration`] ?? this.options.duration;\n this.snackbar.openFromComponent(NiceToastComponent, {\n ...this.options,\n duration,\n panelClass: [\"message-box\", type],\n data: {\n message,\n title,\n type,\n appearance: this.options.appearance\n }\n });\n }\n\n private getTranslations(message: string, title: string, params: object): [string, string] {\n const translations = [message];\n if (title) {\n translations.push(title);\n }\n\n try {\n const result = this.translateService.instant(translations, params) as { [key: string]: string };\n return [result[message], result[title]];\n } catch (e) {\n return [\"\", \"\"];\n }\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { MatSnackBarModule } from \"@angular/material/snack-bar\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { NiceAlertModule } from \"../alert\";\nimport { NiceToastComponent } from \"./toast.component\";\nimport { NICE_TOAST_OPTIONS } from \"./toast.constant\";\nimport { NiceToastOptions, NiceToastService } from \"./toast.service\";\n\nconst defaultOptions: NiceToastOptions = {\n duration: 3000,\n horizontalPosition: \"end\",\n verticalPosition: \"bottom\"\n};\n\n@NgModule({\n imports: [CommonModule, MatSnackBarModule, TranslateModule, NiceAlertModule],\n declarations: [NiceToastComponent]\n})\nexport class NiceToastModule {\n public static forRoot(options?: NiceToastOptions): ModuleWithProviders<NiceToastModule> {\n return {\n ngModule: NiceToastModule,\n providers: [\n NiceToastService,\n {\n provide: NICE_TOAST_OPTIONS,\n useValue: {\n ...defaultOptions,\n ...(options ?? {})\n }\n }\n ]\n };\n }\n\n public static forFeature(options: NiceToastOptions): ModuleWithProviders<NiceToastModule> {\n return {\n ngModule: NiceToastModule,\n providers: [\n NiceToastService,\n {\n provide: NICE_TOAST_OPTIONS,\n useValue: {\n ...defaultOptions,\n ...options\n }\n }\n ]\n };\n }\n}\n","import { Component, Input, TemplateRef, ViewChild } from \"@angular/core\";\n\n@Component({\n selector: \"nice-toggle-button\",\n template: `<ng-template><ng-content></ng-content></ng-template>`\n})\nexport class ToggleButtonComponent {\n @ViewChild(TemplateRef, { static: true })\n public content: TemplateRef<any>;\n\n @Input()\n public value: string;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n EventEmitter,\n forwardRef,\n HostListener,\n Input, Output,\n QueryList,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { CanColor, ThemePalette } from \"@angular/material/core\";\nimport { ToggleButtonComponent } from \"./toggle-button.component\";\n\nexport type ToggleButtonGroupDataType = any | any[];\n\n@Component({\n selector: \"nice-toggle-button-group\",\n templateUrl: \"toggle-button-group.template.html\",\n styleUrls: [\"toggle-button-group.style.scss\"],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ToggleButtonGroupComponent),\n multi: true\n }\n ]\n})\nexport class ToggleButtonGroupComponent implements CanColor {\n private _multiple = false;\n\n @ContentChildren(ToggleButtonComponent)\n public toggleButtons: QueryList<ToggleButtonComponent>;\n\n @Input()\n public selected: ToggleButtonGroupDataType;\n\n @Input()\n public color: ThemePalette;\n\n @Output()\n public selectedChange = new EventEmitter<ToggleButtonGroupDataType>();\n\n public defaultColor: ThemePalette = \"accent\";\n\n @Input()\n public set multiple(multiple: boolean) {\n if (multiple === this._multiple) {\n return;\n }\n\n if (multiple) {\n if (this.selected) {\n this.selected = [this.selected];\n } else {\n this.selected = [];\n }\n } else {\n if (this.selected) {\n this.selected = this.selected[0];\n }\n }\n this._multiple = multiple;\n }\n\n private onTouched: () => void;\n private onChange: (selected: ToggleButtonGroupDataType) => void;\n\n @HostListener(\"blur\")\n public onBlur(): void {\n this.onTouched();\n }\n\n public writeValue(value: ToggleButtonGroupDataType): void {\n if (!value) {\n return;\n }\n\n this.selected = value;\n }\n\n public registerOnChange(fn: (color: string) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public onSelect(value: any): void {\n if (this._multiple) {\n if (this.selected) {\n const index = this.selected.findIndex(x => x === value);\n if (index < 0) {\n this.selected.push(value);\n } else {\n this.selected.splice(index, 1);\n }\n } else {\n this.selected = [value];\n }\n } else {\n this.selected = value;\n }\n this.onChange?.(this.selected);\n this.selectedChange?.emit(this.selected);\n }\n\n public conditionalColorObj(value: any): any {\n const colorClass = this.color ?? this.defaultColor;\n const isActive = this._multiple ? this.selected.includes(value) : this.selected === value;\n\n const obj = {} as any;\n obj.selected = isActive;\n obj[`bg-${colorClass}`] = isActive;\n obj[`bg-selected-${colorClass}`] = isActive;\n obj[\"left-selected\"] = this.isLeftValueSelected(value);\n obj[\"right-selected\"] = this.isRightValueSelected(value);\n\n return obj;\n }\n\n private isLeftValueSelected(value: any): boolean {\n if (!this._multiple || !this.selected.includes(value)) {\n return false;\n }\n\n const values = this.toggleButtons.map(btn => btn.value);\n const index = values.indexOf(value);\n\n if (index <= 0) {\n return false;\n }\n\n return this.selected.includes(values[index - 1]);\n }\n\n private isRightValueSelected(value: any): boolean {\n if (!this._multiple) {\n return false;\n }\n\n const values = this.toggleButtons.map(btn => btn.value);\n const index = values.indexOf(value);\n\n if (index === -1 || index === values.length - 1) {\n return false;\n }\n\n return this.selected.includes(values[index + 1]);\n }\n}\n","<div class=\"toggle-button-group-wrapper\">\n <div class=\"toggle-button-group flex flex-row items-center\">\n <div\n class=\"toggle-button\"\n [ngClass]=\"conditionalColorObj(btn.value)\"\n *ngFor=\"let btn of toggleButtons\"\n >\n <div matRipple class=\"toggle-button-inner flex place-content-center items-center\" (click)=\"onSelect(btn.value)\">\n <ng-container *ngTemplateOutlet=\"btn.content\"></ng-container>\n </div>\n </div>\n </div>\n</div>\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { MatRippleModule } from \"@angular/material/core\";\n\nimport { ToggleButtonGroupComponent } from \"./toggle-button-group.component\";\nimport { ToggleButtonComponent } from \"./toggle-button.component\";\n\n@NgModule({\n imports: [\n CommonModule,\n MatRippleModule\n ],\n declarations: [ToggleButtonComponent, ToggleButtonGroupComponent],\n providers: [],\n exports: [ToggleButtonComponent, ToggleButtonGroupComponent]\n})\nexport class NiceToggleButtonGroupModule {}\n","import { Directive, ElementRef, OnInit } from \"@angular/core\";\n\n@Directive({ selector: \"[niceAutofocus]\" })\nexport class NiceAutofocusDirective implements OnInit {\n constructor(private elem: ElementRef) {}\n\n public ngOnInit(): void {\n this.elem.nativeElement.focus?.();\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NiceAutofocusDirective } from \"./autofocus.directive\";\n\n@NgModule({\n declarations: [NiceAutofocusDirective],\n exports: [NiceAutofocusDirective]\n})\nexport class NiceAutofocusDirectiveModule {}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges\n} from \"@angular/core\";\nimport { Subject } from \"rxjs\";\n\n@Directive({\n selector: \"textarea[niceAutogrow]\",\n exportAs: \"niceAutogrow\"\n})\nexport class NiceAutogrowDirective implements OnChanges, OnInit, OnDestroy {\n private _height = \"auto\";\n private _unsubscribeAll: Subject<any> = new Subject<any>();\n\n // tslint:disable-next-line:no-input-rename\n @Input(\"niceAutogrowVerticalPadding\")\n public padding = 8;\n\n @HostBinding(\"rows\")\n private _rows = 1;\n\n /**\n * Constructor\n */\n constructor(\n private _elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef,\n private _ngZone: NgZone\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Host binding for component inline styles\n */\n @HostBinding(\"style\")\n public get styleList(): any {\n return {\n \"height\": this._height,\n \"overflow\": \"hidden\",\n \"resize\": \"none\"\n };\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On changes\n */\n public ngOnChanges(changes: SimpleChanges): void {\n // Padding\n if (\"niceAutogrowVerticalPadding\" in changes) {\n // Resize\n this._resize();\n }\n }\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Resize for the first time\n this._resize();\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Resize on 'input' and 'ngModelChange' events\n */\n @HostListener(\"input\")\n @HostListener(\"ngModelChange\")\n private _resize(): void {\n // This doesn't need to trigger Angular's change detection by itself\n this._ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n // Set the height to 'auto' so we can correctly read the scrollHeight\n this._height = \"auto\";\n\n // Detect the changes so the height is applied\n this._changeDetectorRef.detectChanges();\n\n // Get the scrollHeight and subtract the vertical padding\n this._height = `${this._elementRef.nativeElement.scrollHeight - this.padding}px`;\n\n // Detect the changes one more time to apply the final height\n this._changeDetectorRef.detectChanges();\n });\n });\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NiceAutogrowDirective } from \"./autogrow.directive\";\n\n@NgModule({\n declarations: [\n NiceAutogrowDirective\n ],\n exports: [\n NiceAutogrowDirective\n ]\n})\nexport class NiceAutogrowModule {}\n","import { Directive, ElementRef, EventEmitter, OnDestroy, OnInit, Output, } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { filter, takeUntil } from \"rxjs/operators\";\nimport { NiceAsyncTypeaheadComponent } from \"../../components\";\n\n@Directive({\n selector: \"[niceChipAsyncTypeahead]\",\n exportAs: \"niceChipAsyncTypeahead\",\n})\nexport class NiceChipAsyncTypeaheadDirective implements OnInit, OnDestroy {\n @Output()\n public niceChipAsyncTypeaheadTokenEnd = new EventEmitter<any>();\n\n private unsubscribeAll$ = new Subject();\n\n constructor(\n private typeahead: NiceAsyncTypeaheadComponent,\n private elementRef: ElementRef<HTMLElement>\n ) {\n }\n\n public ngOnInit(): void {\n this.typeahead.selected\n .pipe(\n takeUntil(this.unsubscribeAll$),\n filter((selected) => selected)\n )\n .subscribe((_) => {\n this.niceChipAsyncTypeaheadTokenEnd.emit(this.typeahead.getActive());\n this.typeahead.writeValue(null);\n });\n\n this.elementRef.nativeElement.classList.add(\"nice-chip-async-typeahead\");\n }\n\n public ngOnDestroy(): void {\n this.unsubscribeAll$.next(null);\n this.unsubscribeAll$.complete();\n }\n}\n","import { Directive, TemplateRef } from \"@angular/core\";\n\n@Directive({ selector: \"[niceChipListItemLabel]\" })\nexport class ChipListItemLabelDirective {\n constructor(public template: TemplateRef<any>) {}\n}\n","import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, TemplateRef } from \"@angular/core\";\nimport { CanColor, ThemePalette } from \"@angular/material/core\";\nimport { Observable } from \"rxjs\";\nimport { ChipListItemLabelDirective } from \"./chip-list-item-label.directive\";\n\n@Component({\n selector: \"nice-chip-list-items\",\n templateUrl: \"./chip-list-items.template.html\",\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceChipListItemsComponent implements CanColor {\n @ContentChild(ChipListItemLabelDirective, { read: TemplateRef })\n public itemLabel: TemplateRef<any>;\n\n @Input()\n public color: ThemePalette = \"primary\";\n\n @Output()\n public removeChip = new EventEmitter<number>();\n\n @Input()\n public items$: Observable<any[]>;\n\n public defaultColor: ThemePalette = \"primary\";\n\n public remove(index: number): void {\n this.removeChip.next(index);\n }\n}\n","<div class=\"nice-items-row\" *ngIf=\"(items$ | async)?.length\">\n <div\n class=\"nice-chip\"\n *ngFor=\"let value of items$ | async; let i = index\"\n [ngClass]=\"color\"\n >\n <span *ngIf=\"!itemLabel\">{{ value }}</span>\n <ng-container *ngIf=\"itemLabel\">\n <ng-container *ngTemplateOutlet=\"itemLabel; context: { $implicit: value }\"></ng-container>\n </ng-container>\n <button (click)=\"remove(i)\">\n <mat-icon class=\"close-icon\">cancel</mat-icon>\n </button>\n </div>\n</div>\n","import { Directive, ElementRef, HostListener, Input, OnChanges, OnInit, Optional, SimpleChange, SimpleChanges } from \"@angular/core\";\nimport { ControlValueAccessor, NgControl } from \"@angular/forms\";\nimport { BehaviorSubject, Subject } from \"rxjs\";\nimport { filter, takeUntil } from \"rxjs/operators\";\nimport { NiceAsyncTypeaheadComponent, NiceTypeaheadNewValue } from \"../../components\";\nimport { KeyboardCodes } from \"../../utils\";\nimport { NiceChipListItemsComponent } from \"./chip-list-items/chip-list-items.component\";\n\n@Directive({\n selector: \"input[niceChipList], nice-async-typeahead[niceChipList]\"\n})\nexport class NiceChipListDirective implements ControlValueAccessor, OnInit, OnChanges {\n @Input()\n public withItemList: NiceChipListItemsComponent;\n\n @Input()\n public reloadOnSelected = true;\n\n private unsubscribeAll$ = new Subject<void>();\n private values$ = new BehaviorSubject([]);\n\n private _values: any[] = [];\n private propagateChanges = (value: any[]) => {};\n\n public get values(): any[] {\n return this._values;\n }\n\n constructor(\n @Optional() private asyncTypeahead: NiceAsyncTypeaheadComponent,\n @Optional() private ngControl: NgControl,\n private elementRef: ElementRef<HTMLInputElement>\n ) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n @HostListener(\"keydown\", [\"$event\"])\n public onKeyDown(event: KeyboardEvent): void {\n if (this.asyncTypeahead) {\n return;\n }\n\n if (event.code === KeyboardCodes.Enter) {\n if (!this.elementRef.nativeElement.validity.valid) {\n return;\n }\n\n this.addValue(this.elementRef.nativeElement.value);\n this.elementRef.nativeElement.value = \"\";\n return;\n }\n }\n\n public ngOnInit(): void {\n if (this.asyncTypeahead) {\n this.setupAsyncTypeahead();\n }\n\n if (this.elementRef.nativeElement.parentElement.classList.contains(\"mat-form-field-infix\")) {\n this.elementRef.nativeElement.parentElement.style.alignItems = \"flex-start\";\n this.elementRef.nativeElement.parentElement.style.flexDirection = \"column-reverse\";\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (\"withItemList\" in changes) {\n this.withItemList.items$ = this.values$;\n this.withItemList.removeChip.pipe(takeUntil(this.unsubscribeAll$)).subscribe(x => {\n this._values.splice(x, 1);\n\n this.updateTypeaheadSearchOptions();\n\n this.propagateChanges(this._values);\n this.values$.next(this._values);\n });\n }\n }\n\n public writeValue(obj: any[]): void {\n this._values = obj ?? [];\n this.updateTypeaheadSearchOptions();\n this.values$.next(this._values);\n }\n\n public registerOnChange(fn: any): void {\n this.propagateChanges = fn;\n }\n\n public registerOnTouched(fn: any): void {}\n\n private setupAsyncTypeahead(): void {\n this.asyncTypeahead.selected\n .pipe(\n takeUntil(this.unsubscribeAll$),\n filter((selected) => selected)\n )\n .subscribe((value) => {\n if (value instanceof NiceTypeaheadNewValue) {\n this.addValue(value);\n } else {\n this.addValue(this.asyncTypeahead.getActive());\n }\n\n this.asyncTypeahead.searchOptions = { ...(this.asyncTypeahead.searchOptions ?? {}), ignore: this._values ?? [] };\n this.asyncTypeahead.onRemove(null, this.reloadOnSelected);\n });\n }\n\n private addValue(value: any): void {\n if (this._values.includes(value)) {\n return;\n }\n\n if (value instanceof NiceTypeaheadNewValue) {\n if (this._values.some(x => x instanceof NiceTypeaheadNewValue && x.$new === value.$new)) {\n return;\n }\n }\n\n this._values.push(value);\n this.propagateChanges(this._values);\n this.values$.next(this._values);\n }\n\n private updateTypeaheadSearchOptions(): void {\n if (!this.asyncTypeahead) {\n return;\n }\n\n const searchOptions = this.asyncTypeahead.searchOptions;\n this.asyncTypeahead.searchOptions = { ...(searchOptions ?? {}), ignore: this._values ?? [] };\n this.asyncTypeahead.ngOnChanges({\n searchOptions: new SimpleChange(searchOptions, this.asyncTypeahead.searchOptions, false)\n });\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { ChipListItemLabelDirective } from \"./chip-list-items/chip-list-item-label.directive\";\nimport { NiceChipListItemsComponent } from \"./chip-list-items/chip-list-items.component\";\n\nimport { NiceChipListDirective } from \"./chip-list.directive\";\n\n@NgModule({\n imports: [CommonModule, MatIconModule],\n declarations: [NiceChipListDirective, NiceChipListItemsComponent, ChipListItemLabelDirective],\n exports: [NiceChipListDirective, NiceChipListItemsComponent, ChipListItemLabelDirective]\n})\nexport class NiceChipListDirectiveModule {}\n","import { Directive, ElementRef, HostListener, Input, TemplateRef, ViewContainerRef } from \"@angular/core\";\n\n@Directive({ selector: \"img[niceImageErrorPlaceholder]\" })\nexport class NiceImageErrorPlaceholderDirective {\n @Input()\n public fallback?: TemplateRef<any>;\n\n constructor(private elementRef: ElementRef, private viewContainerRef: ViewContainerRef) {}\n\n @HostListener(\"error\")\n public onError(): void {\n this.elementRef.nativeElement.style.display = \"none\";\n if (this.fallback) {\n this.viewContainerRef.createEmbeddedView(this.fallback);\n }\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NiceImageErrorPlaceholderDirective } from \"./image-error-placeholder.directive\";\n\n@NgModule({\n declarations: [NiceImageErrorPlaceholderDirective],\n exports: [NiceImageErrorPlaceholderDirective]\n})\nexport class NiceImageErrorPlaceholderDirectiveModule {}\n","import { Directive, ElementRef, OnInit } from \"@angular/core\";\nimport { MatFormField } from \"@angular/material/form-field\";\n\n// tslint:disable-next-line:directive-selector\n@Directive({selector: \"[keep-material-style]\"})\nexport class NiceMaterialStyleDirective implements OnInit {\n constructor(private element: ElementRef) {}\n\n public ngOnInit(): void {\n (this.element.nativeElement as HTMLElement).classList.add(\"keep-material-style\");\n }\n}\n","import { Directive, ElementRef, OnInit } from \"@angular/core\";\nimport { MatFormField } from \"@angular/material/form-field\";\n\n// tslint:disable-next-line:directive-selector\n@Directive({selector: \"[nice-rounded-style]\"})\nexport class NiceRoundedStyleDirective implements OnInit {\n constructor(private element: ElementRef) {}\n\n public ngOnInit(): void {\n (this.element.nativeElement as HTMLElement).classList.add(\"nice-rounded-style\");\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NiceMaterialStyleDirective } from \"./nice-material-style.directive\";\nimport { NiceRoundedStyleDirective } from \"./nice-rounded-style.directive\";\n\n@NgModule({\n declarations: [\n NiceMaterialStyleDirective,\n NiceRoundedStyleDirective\n ],\n exports: [\n NiceMaterialStyleDirective,\n NiceRoundedStyleDirective\n ]\n})\nexport class NiceMaterialModule {}\n","import { Directive, EventEmitter, Input, Output, Type } from \"@angular/core\";\nimport { MatDialog, MatDialogConfig } from \"@angular/material/dialog\";\n\n@Directive()\nexport class NiceModalOpenerDirective<T, Return, Data> {\n @Input()\n public modalData: Data;\n\n @Output()\n public modalAfterClosed = new EventEmitter<Return>();\n\n constructor(protected dialog: MatDialog, private modal: Type<T>, private options: MatDialogConfig<Data>) {}\n\n public open(): void {\n this.dialog\n .open(this.modal, {\n ...this.options,\n data: this.modalData\n })\n .afterClosed()\n .subscribe(res => this.modalAfterClosed.emit(res));\n }\n}\n","import { Directive, HostListener, Type } from \"@angular/core\";\nimport { MatDialog, MatDialogConfig } from \"@angular/material/dialog\";\nimport { NiceModalOpenerDirective } from \"./modal-opener.directive\";\n\n@Directive()\nexport class NiceModalOnClickDirective<T, Return, Data = any> extends NiceModalOpenerDirective<T, Return, Data> {\n constructor(dialog: MatDialog, modal: Type<T>, options: MatDialogConfig<Data>) {\n super(dialog, modal, options);\n }\n\n @HostListener(\"click\")\n public onClick(): void {\n this.open();\n }\n}\n","import { Directive, ElementRef, OnDestroy, OnInit } from \"@angular/core\";\nimport { NavigationEnd, Router } from \"@angular/router\";\nimport { Subject } from \"rxjs\";\nimport { filter, takeUntil } from \"rxjs/operators\";\n\n@Directive({\n selector: \"[niceScrollReset]\",\n exportAs: \"niceScrollReset\"\n})\nexport class NiceScrollResetDirective implements OnInit, OnDestroy {\n private _unsubscribeAll: Subject<any> = new Subject<any>();\n\n /**\n * Constructor\n */\n constructor(\n private _elementRef: ElementRef,\n private _router: Router\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Subscribe to NavigationEnd event\n this._router.events.pipe(\n filter(event => event instanceof NavigationEnd),\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n // Reset the element's scroll position to the top\n this._elementRef.nativeElement.scrollTop = 0;\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NiceScrollResetDirective } from \"./scroll-reset.directive\";\n\n@NgModule({\n declarations: [\n NiceScrollResetDirective\n ],\n exports: [\n NiceScrollResetDirective\n ]\n})\nexport class NiceScrollResetModule {\n}\n","import { Directive, HostListener } from \"@angular/core\";\n\n@Directive({ selector: \"[niceClickStopPropagation]\" })\nexport class NiceClickStopPropagationDirective {\n @HostListener(\"click\", [\"$event\"])\n public stopClick(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { NiceClickStopPropagationDirective } from \"./click-stop-propagation.directive\";\n\n@NgModule({\n exports: [NiceClickStopPropagationDirective],\n declarations: [NiceClickStopPropagationDirective],\n\n})\nexport class NiceStopPropagationModule {\n}\n","import { Directive, HostListener } from \"@angular/core\";\n\n// https://stackoverflow.com/questions/48886460/prevent-closing-browser-tab-window-in-angular-5-x\n@Directive({ selector: \"[nicePreventCloseWindow]\" })\nexport class NicePreventCloseWindowDirective {\n @HostListener(\"window:beforeunload\", [\"$event\"])\n public handleClose($event) {\n $event.returnValue = false;\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NicePreventCloseWindowDirective } from \"./prevent-close-window.directive\";\n\n@NgModule({\n declarations: [NicePreventCloseWindowDirective],\n exports: [NicePreventCloseWindowDirective]\n})\nexport class NiceWindowDirectiveModule {\n}\n","import { NgModule, Optional, SkipSelf } from \"@angular/core\";\nimport { MATERIAL_SANITY_CHECKS } from \"@angular/material/core\";\nimport { MAT_FORM_FIELD_DEFAULT_OPTIONS } from \"@angular/material/form-field\";\nimport { NiceMediaWatcherModule, NiceSplashScreenModule, NiceUtilsModule } from \"./providers\";\n\n@NgModule({\n imports: [\n NiceMediaWatcherModule,\n NiceSplashScreenModule,\n NiceUtilsModule\n ],\n providers: [\n {\n // Disable 'theme' sanity check\n provide : MATERIAL_SANITY_CHECKS,\n useValue: {\n doctype: true,\n theme : false,\n version: true\n }\n },\n {\n // Use the 'fill' appearance on Angular Material form fields by default\n provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,\n useValue: {\n appearance: \"fill\"\n }\n }\n ]\n})\nexport class NiceModule {\n /**\n * Constructor\n */\n constructor(@Optional() @SkipSelf() parentModule?: NiceModule) {\n if (parentModule) {\n throw new Error(\"NiceModule has already been loaded. Import this module in the AppModule only!\");\n }\n }\n}\n","/*\n * Public API Surface of nice-ui-kit-v2\n */\n\nexport * from \"./lib/animations\";\nexport * from \"./lib/api\";\nexport * from \"./lib/components\";\nexport * from \"./lib/directives\";\nexport * from \"./lib/pipes\";\nexport * from \"./lib/providers\";\nexport * from \"./lib/utils\";\nexport * from \"./lib/nice.module\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["tap","debounceTime","merge"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"recursyve-nice-ui-kit.v2.mjs","sources":["../../../projects/nice-ui-kit-v2/src/lib/animations/defaults.ts","../../../projects/nice-ui-kit-v2/src/lib/animations/expand-collapse.ts","../../../projects/nice-ui-kit-v2/src/lib/animations/fade.ts","../../../projects/nice-ui-kit-v2/src/lib/animations/shake.ts","../../../projects/nice-ui-kit-v2/src/lib/animations/slide.ts","../../../projects/nice-ui-kit-v2/src/lib/animations/zoom.ts","../../../projects/nice-ui-kit-v2/src/lib/animations/public-api.ts","../../../projects/nice-ui-kit-v2/src/lib/api/exceptions/api.exception.ts","../../../projects/nice-ui-kit-v2/src/lib/api/exceptions/exception.factory.ts","../../../projects/nice-ui-kit-v2/src/lib/api/interceptors/transform-response.interceptor.ts","../../../projects/nice-ui-kit-v2/src/lib/api/nice.api.ts","../../../projects/nice-ui-kit-v2/src/lib/components/alert/alert.service.ts","../../../projects/nice-ui-kit-v2/src/lib/providers/utils/utils.service.ts","../../../projects/nice-ui-kit-v2/src/lib/providers/utils/utils.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/alert/alert.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/alert/alert.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/alert/alert.module.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/type.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/array.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/case.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/colors.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/date.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/file.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/font-awesome.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/form-data.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/http-status.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/keyboard.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/modal.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/number.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/object.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/promise.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/query-params.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/regex.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/utils/url.utils.ts","../../../projects/nice-ui-kit-v2/src/lib/components/assets-carousel/assets-carousel.constant.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/dropzone/dropzone.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/components/assets-carousel/assets-carousel.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/assets-carousel/assets-carousel.template.html","../../../projects/nice-ui-kit-v2/src/lib/directives/dropzone/dropzone.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/assets-carousel/assets-carousel.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/async-typeahead/providers/async-typeahead.provider.ts","../../../projects/nice-ui-kit-v2/src/lib/components/typeahead/directives/options-scroll.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/components/typeahead/typeahead.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/typeahead/typeahead.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/typeahead/directives/options-scroll.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/typeahead/typeahead.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/async-typeahead/async-typeahead.constant.ts","../../../projects/nice-ui-kit-v2/src/lib/components/async-typeahead/providers/async-typeahead.service.ts","../../../projects/nice-ui-kit-v2/src/lib/components/async-typeahead/async-typeahead.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/async-typeahead/async-typeahead.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/async-typeahead/async-typeahead.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/base-form/base-form.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/base-form/form-submit.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/components/base-form/base-form.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/base-form/nice-base.form.ts","../../../projects/nice-ui-kit-v2/src/lib/components/card/card.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/card/card.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/card/card.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/carousel/picture-modal/picture-modal.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/carousel/picture-modal/picture-modal.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/carousel/picture-modal/picture-modal.service.ts","../../../projects/nice-ui-kit-v2/src/lib/components/carousel/pipe/carousel-layout.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/components/carousel/carousel.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/carousel/carousel.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/carousel/carousel.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/date-range-picker/providers/date-range-picker.service.ts","../../../projects/nice-ui-kit-v2/src/lib/components/date-range-picker/components/range-preset/range-preset.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/date-range-picker/components/range-preset/range-preset.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/date-range-picker/components/header/header.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/date-range-picker/components/header/header.template.html","../../../projects/nice-ui-kit-v2/src/lib/pipes/localized-date.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/components/date-range-picker/date-range-picker.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/date-range-picker/date-range-picker.template.html","../../../projects/nice-ui-kit-v2/src/lib/pipes/boolean.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/capitalize-first-letter.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/ceil.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/entries.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/find-by-key.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/first-letter.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/floor.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/join-if-defined.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/link.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/localized-boolean.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/localized-currency.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/localized-date-only.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/minutes-to-time.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/number-to-ordinal-indicator.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/pad.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/phone.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/postal-code.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/round.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/range.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/seconds-to-time.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/sanitize-bypass.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/pipes/pipes.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/date-range-picker/date-range-picker.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/drawer/drawer.service.ts","../../../projects/nice-ui-kit-v2/src/lib/providers/config/config.constants.ts","../../../projects/nice-ui-kit-v2/src/lib/providers/config/config.service.ts","../../../projects/nice-ui-kit-v2/src/lib/providers/config/config.module.ts","../../../projects/nice-ui-kit-v2/src/lib/providers/media-watcher/media-watcher.service.ts","../../../projects/nice-ui-kit-v2/src/lib/providers/media-watcher/media-watcher.module.ts","../../../projects/nice-ui-kit-v2/src/lib/providers/splash-screen/splash-screen.service.ts","../../../projects/nice-ui-kit-v2/src/lib/providers/splash-screen/splash-screen.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/drawer/drawer.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/drawer/drawer.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/drawer/drawer.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/export-bottom-sheet/providers/export-bottom-sheet.service.ts","../../../projects/nice-ui-kit-v2/src/lib/components/export-bottom-sheet/export-bottom-sheet.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/export-bottom-sheet/export-bottom-sheet.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/export-bottom-sheet/export-bottom-sheet.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/form-error/form-error.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/form-error/control-status.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/components/form-error/form-error.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/horizontal-stepper/horizontal-stepper.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/horizontal-stepper/horizontal-stepper.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/horizontal-stepper/step.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/horizontal-stepper/horizontal-stepper.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/image-cropper/resize-canvas.ts","../../../projects/nice-ui-kit-v2/src/lib/components/image-cropper/image-cropper.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/image-cropper/image-cropper.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/image-cropper/image-cropper-area.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/image-cropper/image-cropper.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/layout/layout.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/layout/layout.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/loading-spinner/loading-spinner.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/loading-spinner/loading-spinner.template.html","../../../projects/nice-ui-kit-v2/src/lib/providers/overlay/dynamic-overlay-container.service.ts","../../../projects/nice-ui-kit-v2/src/lib/providers/overlay/dynamic-overlay.service.ts","../../../projects/nice-ui-kit-v2/src/lib/components/loading-spinner/loading.constant.ts","../../../projects/nice-ui-kit-v2/src/lib/components/loading-spinner/loading.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/components/loading-spinner/loading-spinner.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/lottie/lottie.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/lottie/lottie.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/lottie/lottie.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/navigation.service.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/navigation.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/horizontal/components/basic/basic.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/horizontal/components/basic/basic.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/horizontal/components/divider/divider.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/horizontal/components/divider/divider.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/pipes/should-hide.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/horizontal/components/branch/branch.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/horizontal/components/branch/branch.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/horizontal/components/spacer/spacer.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/horizontal/components/spacer/spacer.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/horizontal/horizontal.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/horizontal/horizontal.component.html","../../../projects/nice-ui-kit-v2/src/lib/directives/scrollbar/scrollbar.types.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/scrollbar/scrollbar.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/scrollbar/scrollbar.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/directives/show-hint.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/pipes/should-show-hint.pipe.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/basic/basic.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/basic/basic.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/divider/divider.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/divider/divider.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/spacer/spacer.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/spacer/spacer.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/collapsable/collapsable.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/collapsable/collapsable.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/group/group.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/group/group.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/aside/aside.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/components/aside/aside.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/vertical.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/vertical/vertical.component.html","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/navigation.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/providers/hide-item.resolver.ts","../../../projects/nice-ui-kit-v2/src/lib/components/navigation/providers/hint.resolver.ts","../../../projects/nice-ui-kit-v2/src/lib/components/search-bar/search-bar.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/search-bar/search-bar.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/search-bar/search-bar.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/sweet-alert/sweet-alert.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/sweet-alert/sweet-alert.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/sweet-alert/sweet-alert.constant.ts","../../../projects/nice-ui-kit-v2/src/lib/components/sweet-alert/sweet-alert.service.ts","../../../projects/nice-ui-kit-v2/src/lib/components/sweet-alert/sweet-alert.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/toast/toast.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/toast/toast.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/toast/toast.constant.ts","../../../projects/nice-ui-kit-v2/src/lib/components/toast/toast.service.ts","../../../projects/nice-ui-kit-v2/src/lib/components/toast/toast.module.ts","../../../projects/nice-ui-kit-v2/src/lib/components/toggle-button-group/toggle-button.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/toggle-button-group/toggle-button-group.component.ts","../../../projects/nice-ui-kit-v2/src/lib/components/toggle-button-group/toggle-button-group.template.html","../../../projects/nice-ui-kit-v2/src/lib/components/toggle-button-group/toggle-button-group.module.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/autofocus/autofocus.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/autofocus/autofocus.module.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/autogrow/autogrow.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/autogrow/autogrow.module.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/chip-async-typeahead/chip-async-typeahead.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/chip-list/chip-list-items/chip-list-item-label.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/chip-list/chip-list.constant.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/chip-list/chip-list-items/chip-list-items.component.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/chip-list/chip-list-items/chip-list-items.template.html","../../../projects/nice-ui-kit-v2/src/lib/directives/chip-list/chip-list.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/chip-list/chip-list.module.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/image-error-placeholder/image-error-placeholder.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/image-error-placeholder/image-error-placeholder.module.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/material/nice-material-style.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/material/nice-rounded-style.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/material/material.module.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/modals/modal-opener.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/modals/modal-on-click.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/scroll-reset/scroll-reset.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/scroll-reset/scroll-reset.module.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/stop-propagation/click-stop-propagation.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/stop-propagation/stop-propagation.module.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/window/prevent-close-window.directive.ts","../../../projects/nice-ui-kit-v2/src/lib/directives/window/window-directive.module.ts","../../../projects/nice-ui-kit-v2/src/lib/nice.module.ts","../../../projects/nice-ui-kit-v2/src/public-api.ts","../../../projects/nice-ui-kit-v2/src/recursyve-nice-ui-kit.v2.ts"],"sourcesContent":["import { animate, animation, style, transition, trigger, useAnimation } from \"@angular/animations\";\n\nexport class NiceAnimationCurves {\n static STANDARD_CURVE = \"cubic-bezier(0.4, 0.0, 0.2, 1)\";\n static DECELERATION_CURVE = \"cubic-bezier(0.0, 0.0, 0.2, 1)\";\n static ACCELERATION_CURVE = \"cubic-bezier(0.4, 0.0, 1, 1)\";\n static SHARP_CURVE = \"cubic-bezier(0.4, 0.0, 0.6, 1)\";\n}\n\nexport class NiceAnimationDurations {\n static COMPLEX = \"375ms\";\n static ENTERING = \"225ms\";\n static EXITING = \"195ms\";\n}\n\nconst customAnimation = animation([\n style({\n opacity: \"{{opacity}}\",\n transform: \"scale({{scale}}) translate3d({{x}}, {{y}}, {{z}})\"\n }),\n animate(\"{{duration}} {{delay}} cubic-bezier(0.0, 0.0, 0.2, 1)\", style(\"*\"))\n], {\n params: {\n duration: \"200ms\",\n delay: \"0ms\",\n opacity: \"0\",\n scale: \"1\",\n x: \"0\",\n y: \"0\",\n z: \"0\"\n }\n});\n\nconst defaultAnimation = trigger(\"animate\", [transition(\"void => *\", [useAnimation(customAnimation)])]);\n\nexport { defaultAnimation };\n","import { animate, state, style, transition, trigger } from \"@angular/animations\";\nimport { NiceAnimationCurves, NiceAnimationDurations } from \"./defaults\";\n\n// -----------------------------------------------------------------------------------------------------\n// @ Expand / collapse\n// -----------------------------------------------------------------------------------------------------\nconst expandCollapse = trigger(\"expandCollapse\",\n [\n state(\"void, collapsed\",\n style({\n height: \"0\"\n })\n ),\n\n state(\"*, expanded\",\n style(\"*\")\n ),\n\n // Prevent the transition if the state is false\n transition(\"void <=> false, collapsed <=> false, expanded <=> false\", []),\n\n // Transition\n transition(\"void <=> *, collapsed <=> expanded\",\n animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.ENTERING} ${NiceAnimationCurves.DECELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\nexport { expandCollapse };\n","import { animate, state, style, transition, trigger } from \"@angular/animations\";\nimport { NiceAnimationCurves, NiceAnimationDurations } from \"./defaults\";\n\n// -----------------------------------------------------------------------------------------------------\n// @ Fade in\n// -----------------------------------------------------------------------------------------------------\nconst fadeIn = trigger(\"fadeIn\",\n [\n state(\"void\",\n style({\n opacity: 0\n })\n ),\n\n state(\"*\",\n style({\n opacity: 1\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"void => false\", []),\n\n // Transition\n transition(\"void => *\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.ENTERING} ${NiceAnimationCurves.DECELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Fade in top\n// -----------------------------------------------------------------------------------------------------\nconst fadeInTop = trigger(\"fadeInTop\",\n [\n state(\"void\",\n style({\n opacity: 0,\n transform: \"translate3d(0, -100%, 0)\"\n })\n ),\n\n state(\"*\",\n style({\n opacity: 1,\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"void => false\", []),\n\n // Transition\n transition(\"void => *\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.ENTERING} ${NiceAnimationCurves.DECELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Fade in bottom\n// -----------------------------------------------------------------------------------------------------\nconst fadeInBottom = trigger(\"fadeInBottom\",\n [\n state(\"void\",\n style({\n opacity: 0,\n transform: \"translate3d(0, 100%, 0)\"\n })\n ),\n\n state(\"*\",\n style({\n opacity: 1,\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"void => false\", []),\n\n // Transition\n transition(\"void => *\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.ENTERING} ${NiceAnimationCurves.DECELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Fade in left\n// -----------------------------------------------------------------------------------------------------\nconst fadeInLeft = trigger(\"fadeInLeft\",\n [\n state(\"void\",\n style({\n opacity: 0,\n transform: \"translate3d(-100%, 0, 0)\"\n })\n ),\n\n state(\"*\",\n style({\n opacity: 1,\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"void => false\", []),\n\n // Transition\n transition(\"void => *\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.ENTERING} ${NiceAnimationCurves.DECELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Fade in right\n// -----------------------------------------------------------------------------------------------------\nconst fadeInRight = trigger(\"fadeInRight\",\n [\n state(\"void\",\n style({\n opacity: 0,\n transform: \"translate3d(100%, 0, 0)\"\n })\n ),\n\n state(\"*\",\n style({\n opacity: 1,\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"void => false\", []),\n\n // Transition\n transition(\"void => *\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.ENTERING} ${NiceAnimationCurves.DECELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Fade out\n// -----------------------------------------------------------------------------------------------------\nconst fadeOut = trigger(\"fadeOut\",\n [\n state(\"*\",\n style({\n opacity: 1\n })\n ),\n\n state(\"void\",\n style({\n opacity: 0\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"false => void\", []),\n\n // Transition\n transition(\"* => void\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.EXITING} ${NiceAnimationCurves.ACCELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Fade out top\n// -----------------------------------------------------------------------------------------------------\nconst fadeOutTop = trigger(\"fadeOutTop\",\n [\n state(\"*\",\n style({\n opacity: 1,\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n state(\"void\",\n style({\n opacity: 0,\n transform: \"translate3d(0, -100%, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"false => void\", []),\n\n // Transition\n transition(\"* => void\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.EXITING} ${NiceAnimationCurves.ACCELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Fade out bottom\n// -----------------------------------------------------------------------------------------------------\nconst fadeOutBottom = trigger(\"fadeOutBottom\",\n [\n state(\"*\",\n style({\n opacity: 1,\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n state(\"void\",\n style({\n opacity: 0,\n transform: \"translate3d(0, 100%, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"false => void\", []),\n\n // Transition\n transition(\"* => void\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.EXITING} ${NiceAnimationCurves.ACCELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Fade out left\n// -----------------------------------------------------------------------------------------------------\nconst fadeOutLeft = trigger(\"fadeOutLeft\",\n [\n state(\"*\",\n style({\n opacity: 1,\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n state(\"void\",\n style({\n opacity: 0,\n transform: \"translate3d(-100%, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"false => void\", []),\n\n // Transition\n transition(\"* => void\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.EXITING} ${NiceAnimationCurves.ACCELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Fade out right\n// -----------------------------------------------------------------------------------------------------\nconst fadeOutRight = trigger(\"fadeOutRight\",\n [\n state(\"*\",\n style({\n opacity: 1,\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n state(\"void\",\n style({\n opacity: 0,\n transform: \"translate3d(100%, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"false => void\", []),\n\n // Transition\n transition(\"* => void\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.EXITING} ${NiceAnimationCurves.ACCELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\nexport { fadeIn, fadeInTop, fadeInBottom, fadeInLeft, fadeInRight, fadeOut, fadeOutTop, fadeOutBottom, fadeOutLeft, fadeOutRight };\n","import { animate, keyframes, style, transition, trigger } from \"@angular/animations\";\n\n// -----------------------------------------------------------------------------------------------------\n// @ Shake\n// -----------------------------------------------------------------------------------------------------\nconst shake = trigger(\"shake\",\n [\n\n // Prevent the transition if the state is false\n transition(\"void => false\", []),\n\n // Transition\n transition(\"void => *, * => true\",\n [\n animate(\"{{timings}}\",\n keyframes([\n style({\n transform: \"translate3d(0, 0, 0)\",\n offset: 0\n }),\n style({\n transform: \"translate3d(-10px, 0, 0)\",\n offset: 0.1\n }),\n style({\n transform: \"translate3d(10px, 0, 0)\",\n offset: 0.2\n }),\n style({\n transform: \"translate3d(-10px, 0, 0)\",\n offset: 0.3\n }),\n style({\n transform: \"translate3d(10px, 0, 0)\",\n offset: 0.4\n }),\n style({\n transform: \"translate3d(-10px, 0, 0)\",\n offset: 0.5\n }),\n style({\n transform: \"translate3d(10px, 0, 0)\",\n offset: 0.6\n }),\n style({\n transform: \"translate3d(-10px, 0, 0)\",\n offset: 0.7\n }),\n style({\n transform: \"translate3d(10px, 0, 0)\",\n offset: 0.8\n }),\n style({\n transform: \"translate3d(-10px, 0, 0)\",\n offset: 0.9\n }),\n style({\n transform: \"translate3d(0, 0, 0)\",\n offset: 1\n })\n ])\n )\n ],\n {\n params: {\n timings: \"0.8s cubic-bezier(0.455, 0.03, 0.515, 0.955)\"\n }\n }\n )\n ]\n);\n\nexport { shake };\n","import { animate, state, style, transition, trigger } from \"@angular/animations\";\nimport { NiceAnimationCurves, NiceAnimationDurations } from \"./defaults\";\n\n// -----------------------------------------------------------------------------------------------------\n// @ Slide in top\n// -----------------------------------------------------------------------------------------------------\nconst slideInTop = trigger(\"slideInTop\",\n [\n state(\"void\",\n style({\n transform: \"translate3d(0, -100%, 0)\"\n })\n ),\n\n state(\"*\",\n style({\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"void => false\", []),\n\n // Transition\n transition(\"void => *\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.ENTERING} ${NiceAnimationCurves.DECELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Slide in bottom\n// -----------------------------------------------------------------------------------------------------\nconst slideInBottom = trigger(\"slideInBottom\",\n [\n state(\"void\",\n style({\n transform: \"translate3d(0, 100%, 0)\"\n })\n ),\n\n state(\"*\",\n style({\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"void => false\", []),\n\n // Transition\n transition(\"void => *\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.ENTERING} ${NiceAnimationCurves.DECELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Slide in left\n// -----------------------------------------------------------------------------------------------------\nconst slideInLeft = trigger(\"slideInLeft\",\n [\n state(\"void\",\n style({\n transform: \"translate3d(-100%, 0, 0)\"\n })\n ),\n\n state(\"*\",\n style({\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"void => false\", []),\n\n // Transition\n transition(\"void => *\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.ENTERING} ${NiceAnimationCurves.DECELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Slide in right\n// -----------------------------------------------------------------------------------------------------\nconst slideInRight = trigger(\"slideInRight\",\n [\n state(\"void\",\n style({\n transform: \"translate3d(100%, 0, 0)\"\n })\n ),\n\n state(\"*\",\n style({\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"void => false\", []),\n\n // Transition\n transition(\"void => *\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.ENTERING} ${NiceAnimationCurves.DECELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Slide out top\n// -----------------------------------------------------------------------------------------------------\nconst slideOutTop = trigger(\"slideOutTop\",\n [\n state(\"*\",\n style({\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n state(\"void\",\n style({\n transform: \"translate3d(0, -100%, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"false => void\", []),\n\n // Transition\n transition(\"* => void\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.EXITING} ${NiceAnimationCurves.ACCELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Slide out bottom\n// -----------------------------------------------------------------------------------------------------\nconst slideOutBottom = trigger(\"slideOutBottom\",\n [\n state(\"*\",\n style({\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n state(\"void\",\n style({\n transform: \"translate3d(0, 100%, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"false => void\", []),\n\n // Transition\n transition(\"* => void\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.EXITING} ${NiceAnimationCurves.ACCELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Slide out left\n// -----------------------------------------------------------------------------------------------------\nconst slideOutLeft = trigger(\"slideOutLeft\",\n [\n state(\"*\",\n style({\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n state(\"void\",\n style({\n transform: \"translate3d(-100%, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"false => void\", []),\n\n // Transition\n transition(\"* => void\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.EXITING} ${NiceAnimationCurves.ACCELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Slide out right\n// -----------------------------------------------------------------------------------------------------\nconst slideOutRight = trigger(\"slideOutRight\",\n [\n state(\"*\",\n style({\n transform: \"translate3d(0, 0, 0)\"\n })\n ),\n\n state(\"void\",\n style({\n transform: \"translate3d(100%, 0, 0)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"false => void\", []),\n\n // Transition\n transition(\"* => void\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.EXITING} ${NiceAnimationCurves.ACCELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\nexport { slideInTop, slideInBottom, slideInLeft, slideInRight, slideOutTop, slideOutBottom, slideOutLeft, slideOutRight };\n","import { animate, state, style, transition, trigger } from \"@angular/animations\";\nimport { NiceAnimationCurves, NiceAnimationDurations } from \"./defaults\";\n\n// -----------------------------------------------------------------------------------------------------\n// @ Zoom in\n// -----------------------------------------------------------------------------------------------------\nconst zoomIn = trigger(\"zoomIn\",\n [\n\n state(\"void\",\n style({\n opacity: 0,\n transform: \"scale(0.5)\"\n })\n ),\n\n state(\"*\",\n style({\n opacity: 1,\n transform: \"scale(1)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"void => false\", []),\n\n // Transition\n transition(\"void => *\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.ENTERING} ${NiceAnimationCurves.DECELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\n// -----------------------------------------------------------------------------------------------------\n// @ Zoom out\n// -----------------------------------------------------------------------------------------------------\nconst zoomOut = trigger(\"zoomOut\",\n [\n\n state(\"*\",\n style({\n opacity: 1,\n transform: \"scale(1)\"\n })\n ),\n\n state(\"void\",\n style({\n opacity: 0,\n transform: \"scale(0.5)\"\n })\n ),\n\n // Prevent the transition if the state is false\n transition(\"false => void\", []),\n\n // Transition\n transition(\"* => void\", animate(\"{{timings}}\"),\n {\n params: {\n timings: `${NiceAnimationDurations.EXITING} ${NiceAnimationCurves.ACCELERATION_CURVE}`\n }\n }\n )\n ]\n);\n\nexport { zoomIn, zoomOut };\n\n","import { defaultAnimation } from \"./defaults\";\nimport { expandCollapse } from \"./expand-collapse\";\nimport {\n fadeIn,\n fadeInBottom,\n fadeInLeft,\n fadeInRight,\n fadeInTop,\n fadeOut,\n fadeOutBottom,\n fadeOutLeft,\n fadeOutRight,\n fadeOutTop\n} from \"./fade\";\nimport { shake } from \"./shake\";\nimport { slideInBottom, slideInLeft, slideInRight, slideInTop, slideOutBottom, slideOutLeft, slideOutRight, slideOutTop } from \"./slide\";\nimport { zoomIn, zoomOut } from \"./zoom\";\n\nexport const niceAnimations = [\n defaultAnimation,\n expandCollapse,\n fadeIn, fadeInTop, fadeInBottom, fadeInLeft, fadeInRight,\n fadeOut, fadeOutTop, fadeOutBottom, fadeOutLeft, fadeOutRight,\n shake,\n slideInTop, slideInBottom, slideInLeft, slideInRight,\n slideOutTop, slideOutBottom, slideOutLeft, slideOutRight,\n zoomIn, zoomOut\n];\n","export abstract class NiceApiException<Code> {\n public abstract code: Code;\n}\n","import { HttpErrorResponse } from \"@angular/common/http\";\nimport { NiceApiException } from \"./api.exception\";\n\nexport abstract class NiceHttpExceptionFactory<Code = any> {\n public transform(error: HttpErrorResponse): NiceApiException<Code> | HttpErrorResponse {\n if (error.error?.message === undefined) {\n return error;\n }\n return this.transformCodeError(error.error.message, error.error);\n }\n\n protected abstract transformCodeError(code: Code, data: any): NiceApiException<Code>;\n}\n","import { HttpContextToken, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from \"@angular/common/http\";\nimport { Injectable, Type } from \"@angular/core\";\nimport { plainToInstance } from \"class-transformer\";\nimport { map } from \"rxjs/operators\";\n\nexport const TRANSFORM_TYPE = new HttpContextToken<Type<any>>(() => null);\n\n@Injectable()\nexport class NiceTransformResponseInterceptor implements HttpInterceptor {\n public intercept(req: HttpRequest<any>, next: HttpHandler) {\n return next.handle(req).pipe(\n map(event => {\n if (event instanceof HttpResponse) {\n const type = req.context.get(TRANSFORM_TYPE);\n if (!type) {\n return event;\n }\n\n return event.clone({\n body: plainToInstance(type, event.body)\n });\n }\n\n return event;\n })\n );\n }\n}\n","import { HttpClient, HttpContext, HttpErrorResponse, HttpHeaders, HttpParams } from \"@angular/common/http\";\nimport { Type } from \"@angular/core\";\nimport { catchError, Observable } from \"rxjs\";\nimport { AbstractConstructor, Constructor } from \"../types/constructor\";\nimport { NiceHttpExceptionFactory } from \"./exceptions/exception.factory\";\nimport { TRANSFORM_TYPE } from \"./interceptors/transform-response.interceptor\";\n\nexport interface HttpOptions {\n type?: Type<any>;\n context?: HttpContext;\n headers?: HttpHeaders | {\n [header: string]: string | string[];\n };\n responseType?: \"text\" | \"json\" | \"arraybuffer\" | \"blob\";\n params?: HttpParams | {\n [param: string]: string | number | boolean | ReadonlyArray<string | number | boolean>;\n };\n}\n\nexport interface NiceApiDefinition {\n url(route?: string): string;\n delete<T>(route?: string, options?: HttpOptions): Observable<T>;\n get<T>(route?: string, options?: HttpOptions): Observable<T>;\n patch<T>(route?: string, body?: any, options?: HttpOptions): Observable<T>;\n post<T>(route?: string, body?: any, options?: HttpOptions): Observable<T>;\n put<T>(route?: string, body?: any, options?: HttpOptions): Observable<T>;\n}\n\nexport interface HasNiceApiDefinition {\n exceptionFactory: NiceHttpExceptionFactory;\n httpClient: HttpClient;\n apiUrl: string;\n path: string;\n}\n\ntype NiceApiDefinitionCtor = Constructor<NiceApiDefinition> & AbstractConstructor<NiceApiDefinition>;\n\nexport function mixinNiceApi<C extends AbstractConstructor<HasNiceApiDefinition>>(\n base: C,\n): NiceApiDefinitionCtor & C;\nexport function mixinNiceApi<C extends Constructor<HasNiceApiDefinition>>(\n base: C,\n): NiceApiDefinitionCtor & C {\n return class extends base {\n public url(route = \"\"): string {\n if (route === \"\" && (!this.path || this.path === \"\")) {\n return this.apiUrl;\n } else if (route === \"\") {\n return `${this.apiUrl}/${this.path}`;\n }\n return `${this.apiUrl}/${this.path}/${route}`;\n }\n\n public delete<T>(route = \"\", options?: HttpOptions): Observable<T> {\n return this.httpClient.delete<T>(this.url(route), this.transformOptions(options) as any).pipe(\n catchError(e => this.transformError(e))\n );\n }\n\n public get<T>(route = \"\", options?: HttpOptions): Observable<T> {\n return this.httpClient.get<T>(this.url(route), this.transformOptions(options) as any).pipe(\n catchError(e => this.transformError(e))\n );\n }\n\n public head<T>(route = \"\", options?: HttpOptions): Observable<T> {\n return this.httpClient.head<T>(this.url(route), this.transformOptions(options) as any).pipe(\n catchError(e => this.transformError(e))\n );\n }\n\n public patch<T>(route = \"\", body?: any, options?: HttpOptions): Observable<T> {\n return this.httpClient.patch<T>(this.url(route), body, this.transformOptions(options) as any).pipe(\n catchError(e => this.transformError(e))\n );\n }\n\n public post<T>(route = \"\", body?: any, options?: HttpOptions): Observable<T> {\n return this.httpClient.post<T>(this.url(route), body, this.transformOptions(options) as any).pipe(\n catchError(e => this.transformError(e))\n );\n }\n\n public put<T>(route = \"\", body?: any, options?: HttpOptions): Observable<T> {\n return this.httpClient.put<T>(this.url(route), body, this.transformOptions(options) as any).pipe(\n catchError(e => this.transformError(e))\n );\n }\n\n private transformError(error: HttpErrorResponse): Observable<any> {\n if (!this.exceptionFactory) {\n throw error;\n }\n throw this.exceptionFactory.transform(error);\n }\n\n private transformOptions(options?: HttpOptions): HttpOptions {\n if (!options) {\n return options;\n }\n\n const { type, context: c, ...values } = options;\n const context = c ?? new HttpContext();\n if (type) {\n context.set(TRANSFORM_TYPE, type);\n }\n return {\n ...values,\n responseType: values.responseType ?? \"json\",\n context\n };\n }\n\n constructor(...args: any[]) {\n super(...args);\n }\n };\n}\n","import { Injectable } from \"@angular/core\";\nimport { Observable, ReplaySubject } from \"rxjs\";\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class NiceAlertService {\n private readonly _onDismiss: ReplaySubject<string> = new ReplaySubject<string>(1);\n private readonly _onShow: ReplaySubject<string> = new ReplaySubject<string>(1);\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Getter for onDismiss\n */\n public get onDismiss(): Observable<any> {\n return this._onDismiss.asObservable();\n }\n\n /**\n * Getter for onShow\n */\n public get onShow(): Observable<any> {\n return this._onShow.asObservable();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Dismiss the alert\n */\n public dismiss(name: string): void {\n // Return if the name is not provided\n if (!name) {\n return;\n }\n\n // Execute the observable\n this._onDismiss.next(name);\n }\n\n /**\n * Show the dismissed alert\n */\n public show(name: string): void {\n // Return if the name is not provided\n if (!name) {\n return;\n }\n\n // Execute the observable\n this._onShow.next(name);\n }\n}\n","import { Injectable } from \"@angular/core\";\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class NiceUtilsService {\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Generates a random id\n */\n public randomId(length: number = 10): string {\n const chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n let name = \"\";\n\n for (let i = 0; i < 10; i++) {\n name += chars.charAt(Math.floor(Math.random() * chars.length));\n }\n\n return name;\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NiceUtilsService } from \"./utils.service\";\n\n@NgModule({\n providers: [NiceUtilsService]\n})\nexport class NiceUtilsModule {\n constructor(private _niceUtilsService: NiceUtilsService) {}\n}\n","import { BooleanInput, coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { filter, takeUntil } from \"rxjs/operators\";\nimport { niceAnimations } from \"../../animations\";\nimport { NiceUtilsService } from \"../../providers/utils\";\nimport { NiceAlertService } from \"./alert.service\";\nimport { NiceAlertType, NiceAlertAppearance, NiceAlertColor } from \"./alert.types\";\n\n@Component({\n selector: \"nice-alert\",\n templateUrl: \"./alert.template.html\",\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: niceAnimations,\n exportAs: \"niceAlert\"\n})\nexport class NiceAlertComponent implements OnChanges, OnInit, OnDestroy {\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_dismissible: BooleanInput;\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_dismissed: BooleanInput;\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_disableAnimation: BooleanInput;\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_showIcon: BooleanInput;\n\n @Input()\n public appearance: NiceAlertAppearance = \"soft\";\n\n @Input()\n public dismissed = false;\n\n @Input()\n public dismissible = false;\n\n @Input()\n public disableAnimation = false;\n\n @Input()\n public name: string = this._niceUtilsService.randomId();\n\n @Input()\n public showIcon = true;\n\n @Input()\n public type: NiceAlertType = \"primary\";\n\n @Input()\n public color?: NiceAlertColor;\n\n @Output()\n public readonly dismissedChanged: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n private _unsubscribeAll: Subject<void> = new Subject<void>();\n\n /**\n * Constructor\n */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _niceAlertService: NiceAlertService,\n private _niceUtilsService: NiceUtilsService\n ) {}\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Host binding for component classes\n */\n @HostBinding(\"class\")\n public get classList(): any {\n let types: { [className: string]: boolean } = {\n \"nice-alert-type-primary\": this.type === \"primary\",\n \"nice-alert-type-accent\": this.type === \"accent\",\n \"nice-alert-type-warn\": this.type === \"warn\",\n \"nice-alert-type-basic\": this.type === \"basic\",\n \"nice-alert-type-info\": this.type === \"info\",\n \"nice-alert-type-success\": this.type === \"success\",\n \"nice-alert-type-warning\": this.type === \"warning\",\n \"nice-alert-type-error\": this.type === \"error\"\n };\n\n if (this.color) {\n types = {\n \"nice-alert-type-primary\": this.color === \"primary\",\n \"nice-alert-type-accent\": this.color === \"accent\",\n \"nice-alert-type-warn\": this.color === \"warn\"\n };\n }\n\n return {\n \"nice-alert-appearance-border\": this.appearance === \"border\",\n \"nice-alert-appearance-fill\": this.appearance === \"fill\",\n \"nice-alert-appearance-outline\": this.appearance === \"outline\",\n \"nice-alert-appearance-soft\": this.appearance === \"soft\",\n \"nice-alert-dismissed\": this.dismissed,\n \"nice-alert-dismissible\": this.dismissible,\n \"nice-alert-show-icon\": this.showIcon,\n ...types\n };\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On changes\n *\n * @param changes\n */\n public ngOnChanges(changes: SimpleChanges): void {\n // Dismissed\n if (\"dismissed\" in changes) {\n // Coerce the value to a boolean\n this.dismissed = coerceBooleanProperty(changes.dismissed.currentValue);\n\n // Dismiss/show the alert\n this._toggleDismiss(this.dismissed);\n }\n\n // Dismissible\n if (\"dismissible\" in changes) {\n // Coerce the value to a boolean\n this.dismissible = coerceBooleanProperty(changes.dismissible.currentValue);\n }\n\n // Disable animation\n if (\"disableAnimation\" in changes) {\n // Coerce the value to a boolean\n this.disableAnimation = coerceBooleanProperty(changes.disableAnimation.currentValue);\n }\n\n // Show icon\n if (\"showIcon\" in changes) {\n // Coerce the value to a boolean\n this.showIcon = coerceBooleanProperty(changes.showIcon.currentValue);\n }\n }\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Subscribe to the dismiss calls\n this._niceAlertService.onDismiss\n .pipe(\n filter((name) => this.name === name),\n takeUntil(this._unsubscribeAll)\n )\n .subscribe(() => {\n\n // Dismiss the alert\n this.dismiss();\n });\n\n // Subscribe to the show calls\n this._niceAlertService.onShow\n .pipe(\n filter((name) => this.name === name),\n takeUntil(this._unsubscribeAll)\n )\n .subscribe(() => {\n\n // Show the alert\n this.show();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next();\n this._unsubscribeAll.complete();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Dismiss the alert\n */\n public dismiss(): void {\n // Return if the alert is already dismissed\n if (this.dismissed) {\n return;\n }\n\n // Dismiss the alert\n this._toggleDismiss(true);\n }\n\n /**\n * Show the dismissed alert\n */\n public show(): void {\n // Return if the alert is already showing\n if (!this.dismissed) {\n return;\n }\n\n // Show the alert\n this._toggleDismiss(false);\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Dismiss/show the alert\n *\n * @param dismissed\n * @private\n */\n private _toggleDismiss(dismissed: boolean): void {\n // Return if the alert is not dismissible\n if (!this.dismissible) {\n return;\n }\n\n // Set the dismissed\n this.dismissed = dismissed;\n\n // Execute the observable\n this.dismissedChanged.next(this.dismissed);\n\n // Notify the change detector\n this._changeDetectorRef.markForCheck();\n }\n}\n","<div\n class=\"nice-alert-container\"\n *ngIf=\"!dismissible || dismissible && !dismissed\"\n [@fadeIn]=\"!dismissed && !disableAnimation\"\n [@fadeOut]=\"!dismissed && !disableAnimation\">\n\n <!-- Border -->\n <div\n class=\"nice-alert-border\"\n *ngIf=\"appearance === 'border'\"></div>\n\n <!-- Icon -->\n <div\n class=\"nice-alert-icon\"\n *ngIf=\"showIcon\">\n\n <!-- Custom icon -->\n <div class=\"nice-alert-custom-icon\">\n <ng-content select=\"[niceAlertIcon]\"></ng-content>\n </div>\n\n <!-- Default icons -->\n <div class=\"nice-alert-default-icon\">\n\n <mat-icon\n *ngIf=\"type === 'primary'\"\n [svgIcon]=\"'heroicons_solid:check-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'accent'\"\n [svgIcon]=\"'heroicons_solid:check-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'warn'\"\n [svgIcon]=\"'heroicons_solid:x-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'basic'\"\n [svgIcon]=\"'heroicons_solid:check-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'info'\"\n [svgIcon]=\"'heroicons_solid:information-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'success'\"\n [svgIcon]=\"'heroicons_solid:check-circle'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'warning'\"\n [svgIcon]=\"'heroicons_solid:exclamation'\"></mat-icon>\n\n <mat-icon\n *ngIf=\"type === 'error'\"\n [svgIcon]=\"'heroicons_solid:x-circle'\"></mat-icon>\n\n </div>\n\n </div>\n\n <!-- Content -->\n <div class=\"nice-alert-content\">\n\n <div class=\"nice-alert-title\">\n <ng-content select=\"[niceAlertTitle]\"></ng-content>\n </div>\n\n <div class=\"nice-alert-message\">\n <ng-content></ng-content>\n </div>\n\n </div>\n\n <!-- Dismiss button -->\n <button\n class=\"nice-alert-dismiss-button\"\n mat-icon-button\n (click)=\"dismiss()\">\n <mat-icon [svgIcon]=\"'heroicons_solid:x'\"></mat-icon>\n </button>\n\n</div>\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { NiceAlertComponent } from \"./alert.component\";\n\n@NgModule({\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule\n ],\n declarations: [\n NiceAlertComponent\n ],\n exports: [\n NiceAlertComponent\n ]\n})\nexport class NiceAlertModule {\n}\n","export const isNullOrUndefined = (value: unknown): boolean => {\n return TypeUtils.isNullOrUndefined(value);\n};\n\nexport const isNotNullOrUndefined = (value: unknown): boolean => {\n return TypeUtils.isNotNullOrUndefined(value);\n};\n\nexport class TypeUtils {\n public static isNullOrUndefined(value: unknown): boolean {\n return value === null || value === undefined;\n }\n\n public static isNotNullOrUndefined(value: unknown): boolean {\n return !TypeUtils.isNullOrUndefined(value);\n }\n}\n","import { isNullOrUndefined } from \"./type.utils\";\n\nexport class ArrayUtils {\n public static joinIfDefined(array: any[], join = \" \"): string {\n return array?.filter(val => val)?.join(join);\n }\n\n public static uniqueObjects<Item>(array: Item[], keySelector: (item: Item) => unknown): Item[] {\n return Array.from(new Map(array.map(x => [keySelector(x), x])).values());\n }\n\n public static unique<T>(\n array: T[],\n comparator: (value1: T, value2: T) => boolean = (value1: T, value2: T) => value1 === value2\n ): T[] {\n if (isNullOrUndefined(array)) {\n return array;\n }\n\n const newArray: T[] = [];\n for (const value of array) {\n if (newArray.findIndex((valueInArray) => comparator(valueInArray, value)) < 0) {\n newArray.push(value);\n }\n }\n\n return newArray;\n }\n\n public static equals(arr1: any[], arr2: any[], options: { shallow: boolean, ordered: boolean } = { shallow: true, ordered: false }): boolean {\n if (options.shallow && !options.ordered) {\n return this.unorderedShallowEquals(arr1, arr2);\n }\n\n // TODO: Implement other types of equals.\n throw new Error(\"Not implemented.\");\n }\n\n private static unorderedShallowEquals(arr1: any[], arr2: any[]): boolean {\n return (arr1 ?? []).every((arr1Element) => (arr2 ?? []).includes(arr1Element))\n && (arr2 ?? []).every((arr2Element) => (arr1 ?? []).includes(arr2Element));\n }\n\n public static sortByKey(array: any[], key: string) {\n return array.sort(ArrayUtils.sortByKeyFn(key));\n }\n\n public static sortByKeyFn(key: string) {\n return (a, b) => {\n if (a[key] < b[key]) {\n return -1;\n }\n if (a[key] > b[key]) {\n return 1;\n }\n return 0;\n };\n }\n\n public static groupBy<Item, Key, Value>(\n array: Item[],\n keySelector: (item: Item) => Key,\n valueSelector: (item: Item) => Value[] | Value\n ): Map<Key, Value[]> {\n const groups: Map<Key, Value[]> = new Map<Key, Value[]>();\n for (const item of array) {\n const key: Key = keySelector(item);\n if (key == null) {\n continue;\n }\n let value: Value[] | Value = valueSelector(item);\n if (value == null) {\n continue;\n }\n\n if (!(value instanceof Array)) {\n value = [value];\n }\n\n if (!groups.has(key)) {\n groups.set(key, value);\n } else {\n groups.get(key).push(...value);\n }\n }\n return groups;\n }\n}\n\ndeclare global {\n interface Array<T> {\n distinct<T>(): Array<T>;\n\n groupBy<T>(value: T): T[];\n\n includesWithCallback(callbackfn: (value: T, index: number, array: T[]) => boolean): boolean;\n\n pushOrRemove<T>(value: T): void;\n\n replace<T>(item: T, ...newItems: T[]): Array<T>;\n\n skipNullValues(): T[];\n\n difference<T>(...not: T[]): T[];\n }\n}\n\nArray.prototype.distinct = function <T>(): T[] {\n return this.filter((value, index) => {\n return this.indexOf(value) === index;\n });\n};\n\nArray.prototype.groupBy = function <T>(property: T): T[] {\n return this.reduce((acc, obj) => {\n const key = obj[property];\n if (!acc[key]) {\n acc[key] = [];\n }\n acc[key].push(obj);\n return acc;\n }, {});\n};\n\nArray.prototype.includesWithCallback = function <T>(callbackfn: (value: T, index: number, array: T[]) => boolean) {\n return this.findIndex(callbackfn) < 0;\n};\n\nArray.prototype.pushOrRemove = function <T>(value: T): void {\n const index = this.indexOf(value);\n if (index !== -1) {\n this.splice(index, 1);\n } else {\n this.push(value);\n }\n};\n\nArray.prototype.replace = function <T>(item: T, ...newItems: T[]): T[] {\n return [...this.slice(0, this.indexOf(item)), ...newItems, ...this.slice(this.indexOf(item) + 1, this.length)];\n};\n\nArray.prototype.skipNullValues = function <T>(): T[] {\n return this.filter(x => !!x);\n};\n\nArray.prototype.difference = function <T>(...not: T[]) {\n return this.filter(i => !not.includes(i));\n};\n","export class CaseUtils {\n // myValue -> my-value\n public static toCamelFromKebab(data: string): string {\n return data.replace(/(-\\w)/g, (m) => m[1].toUpperCase());\n }\n\n // MyValue -> my_value\n public static toSnakeCaseFromPascalCase(str: string): string {\n return str.replace(/[A-Z]/g, (letter, index) => {\n if (index === 0) {\n return letter.toLowerCase();\n }\n const pastLetter = str[index - 1] as string;\n const nextLetter = str[index + 1] as string;\n if (pastLetter.toLowerCase() === pastLetter) {\n return `_${letter.toLowerCase()}`;\n }\n if (nextLetter && nextLetter.toLowerCase() === nextLetter) {\n return `_${letter.toLowerCase()}`;\n }\n return letter.toLowerCase();\n });\n }\n\n // myValue -> my_value\n public static toSnakeCaseFromCamelCase(str: string): string {\n return this.toSnakeCaseFromPascalCase(this.capitalizeFirstLetter(str));\n }\n\n // my_value -> myValue\n public static toCamelCaseFromSnakeCase(stringToConvert: string): string {\n const regExp = new RegExp(\"_.\");\n const index = stringToConvert.indexOf(\"_\") + 1;\n const toUpperCase = stringToConvert.charAt(index).toUpperCase();\n return stringToConvert.replace(regExp, toUpperCase);\n }\n\n // MyValue -> my-value\n public static toKebabCasePascalCase(str: string): string {\n return str\n .replace(/[A-Z]/g, (letter, index) => {\n return index === 0 ? letter.toLowerCase() : \"-\" + letter.toLowerCase();\n })\n .replace(/_/g, \"-\");\n }\n\n // my_value -> MyValue\n public static toPascalCaseFromSnakeCase(str: string): string {\n return str.replace(/(^[a-z]|_[a-z])/g, (letter) => {\n if (letter.length === 1) {\n return letter.toUpperCase();\n }\n\n return letter[1].toUpperCase();\n });\n }\n\n public static capitalizeFirstLetter(str: string): string {\n const firstLetter = str.substr(0, 1);\n return firstLetter.toUpperCase() + str.substr(1);\n }\n}\n","export class ColorsUtils {\n /**\n * https://codepen.io/cferdinandi/pen/Yomroj\n *\n * (c) 2019 Chris Ferdinandi, MIT License, https://gomakethings.com\n * Derived from work by Brian Suda, https://24ways.org/2010/calculating-color-contrast/\n */\n public static contrastFromHex(hex: string): string {\n if (hex.slice(0, 1) === \"#\") {\n hex = hex.slice(1);\n }\n\n // If a three-character hex, make six-character\n if (hex.length === 3) {\n hex = hex\n .split(\"\")\n .map((i) => i + i)\n .join(\"\");\n }\n\n // Convert to RGB value\n const r = parseInt(hex.substr(0, 2), 16);\n const g = parseInt(hex.substr(2, 2), 16);\n const b = parseInt(hex.substr(4, 2), 16);\n\n // Get YIQ ratio\n const yiq = (r * 299 + g * 587 + b * 114) / 1000;\n\n // Check contrast\n return yiq >= 128 ? \"000000\" : \"ffffff\";\n }\n}\n","import { isNullOrUndefined } from \"./type.utils\";\n\nexport class DateUtils {\n public static currentYear(): number {\n return new Date().getUTCFullYear();\n }\n\n public static extractTimeAsString(date: Date): string {\n if (!date) {\n return null;\n }\n\n const hours = date.getHours();\n const minutes = date.getMinutes();\n\n return `${(hours ?? \"\").toString().padStart(2, \"0\")}:${(minutes ?? \"\").toString().padStart(2, \"0\")}`;\n }\n\n public static setTimeFromString(date: Date, time: string): Date {\n if (isNullOrUndefined(time) || time.length === 0 || !time.includes(\":\")) {\n return date;\n }\n\n const parts = time.split(\":\");\n if (parts.length !== 2 || isNaN(+parts[0]) || isNaN(+parts[1])) {\n return date;\n }\n\n const [hours, minutes] = parts.map((part) => +part);\n const updatedDate = new Date(date);\n updatedDate.setHours(hours, minutes);\n return updatedDate;\n }\n}\n\ndeclare global {\n export interface Date {\n getSeason(): string;\n getYear(): number;\n }\n}\n\nDate.prototype.getSeason = function(): \"winter\" | \"spring\" | \"summer\" | \"fall\" {\n const month = this.getUTCMonth();\n const date = this.getUTCDate();\n\n if ((month === 11 && date >= 21) || (month >= 0 && month <= 1) || (month === 2 && date <= 19)) {\n return \"winter\";\n } else if ((month === 2 && date >= 20) || (month >= 3 && month <= 4) || (month === 5 && date <= 20)) {\n return \"spring\";\n } else if ((month === 5 && date >= 21) || (month >= 6 && month <= 7) || (month === 8 && date <= 22)) {\n return \"summer\";\n } else {\n return \"fall\";\n }\n};\n\nDate.prototype.getYear = function (): number {\n return +this.getFullYear().toString().substr(-2);\n};\n","export class FileUtils {\n public static async getFileFromUrl(url?: string, name = \"\"): Promise<File | undefined> {\n if (!url) {\n return undefined;\n }\n const res = await fetch(url);\n return new File([await res.blob()], name);\n }\n\n public static async selectFile(accept: string, multiple = false): Promise<File | File[]> {\n return new Promise(resolve => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.multiple = multiple;\n input.accept = accept;\n\n input.onchange = () => {\n if (input.files) {\n const files = Array.from(input.files);\n return resolve(multiple ? files : files[0]);\n }\n\n resolve(null);\n };\n\n input.click();\n });\n }\n\n public static downloadFile(fileName: string, content: Blob, downloadLink?: HTMLAnchorElement): void {\n if (!downloadLink) {\n downloadLink = document.createElement(\"a\");\n document.body.appendChild(downloadLink);\n downloadLink.style.display = \"none\";\n }\n\n const dataUrl = window.URL.createObjectURL(content);\n downloadLink.href = dataUrl;\n downloadLink.download = fileName;\n downloadLink.click();\n window.URL.revokeObjectURL(dataUrl);\n document.body.removeChild(downloadLink);\n }\n\n public static downloadUrl(url: string): void {\n const downloadLink = document.createElement(\"a\");\n document.body.appendChild(downloadLink);\n downloadLink.style.display = \"none\";\n downloadLink.href = url;\n downloadLink.click();\n document.body.removeChild(downloadLink);\n }\n\n public static openPrintableWindow(content: string): void {\n const win = window.open(\"\");\n if (!win) {\n return;\n }\n\n win.document.open();\n win.document.write(content);\n win.document.close();\n }\n\n public static filenameToExtension(filename: string): string {\n const re = /(?:\\.([^.]+))?$/;\n return re.exec(filename)[1];\n }\n\n public static getDataUrl(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = error => reject(error);\n });\n }\n\n public static async getFileFromDataUrl(data: string, name: string): Promise<File> {\n const base64Response = await fetch(data);\n const blob = await base64Response.blob();\n const [, type] = blob.type.split(\"/\");\n return new File([blob], `${name}.${type}`, {\n lastModified: Date.now(),\n type: blob.type\n });\n }\n}\n","export class FontAwesomeUtils {\n public static fileExtensionToIcon(extension: string): string {\n switch (extension) {\n case \"pdf\":\n return \"fa-file-pdf\";\n case \"doc\":\n case \"docx\":\n return \"fa-file-word\";\n case \"xlsx\":\n case \"xls\":\n return \"fa-file-excel\";\n case \"csv\":\n return \"fa-file-csv\";\n case \"ppt\":\n case \"pptx\":\n return \"fa-file-powerpoint\";\n case \"mp4\":\n case \"mov\":\n case \"wmv\":\n case \"webm\":\n return \"fa-file-video\";\n case \"mp3\":\n case \"wav\":\n return \"fa-file-audio\";\n case \"jpeg\":\n case \"jpg\":\n case \"png\":\n case \"gif\":\n case \"svg\":\n return \"fa-file-image\";\n case \"zip\":\n return \"fa-file-archive\";\n case \"txt\":\n return \"fa-file-alt\";\n default:\n return \"fa-file\";\n }\n }\n}\n","import { isNullOrUndefined } from \"./type.utils\";\n\nexport class FormDataUtils {\n public static appendFormDataWithDto(form: FormData, value: object): void {\n if (typeof value !== \"object\") {\n return;\n }\n\n for (const key in value) {\n if (value.hasOwnProperty(key)) {\n FormDataUtils.appendFormDataWithValue(form, value[key], key);\n }\n }\n }\n\n // FormData does not handle object and arrays, instead we add them as:\n // Object: forms.append(name[key], value) (e.g. forms.append(\"company-admin[name]\", \"digitalmomentum\"))\n // Array: forms.append(name[index], value) (e.g. forms.append(\"expressions[0]\", \"incroyable\"))\n // Recursive method that appends values, objects and arrays to the forms as name.\n public static appendFormDataWithValue(form: FormData, value, name) {\n if (isNullOrUndefined(value)) {\n return;\n }\n\n if (value instanceof Array) {\n for (let i = 0; i < value.length; ++i) {\n FormDataUtils.appendFormDataWithValue(form, value[i], name + `[${i}]`);\n }\n } else if (value instanceof Date) {\n form.append(name, value.toISOString());\n } else if (value instanceof Object) {\n for (const key in value) {\n if (value.hasOwnProperty(key)) {\n FormDataUtils.appendFormDataWithValue(form, value[key], name + `[${key}]`);\n }\n }\n } else {\n form.append(name, value);\n }\n }\n}\n","export enum HttpStatusCodes {\n CONTINUE = 100,\n SWITCHING_PROTOCOLS = 101,\n PROCESSING = 102,\n OK = 200,\n CREATED = 201,\n ACCEPTED = 202,\n NON_AUTHORITATIVE_INFORMATION = 203,\n NO_CONTENT = 204,\n RESET_CONTENT = 205,\n PARTIAL_CONTENT = 206,\n AMBIGUOUS = 300,\n MOVED_PERMANENTLY = 301,\n FOUND = 302,\n SEE_OTHER = 303,\n NOT_MODIFIED = 304,\n TEMPORARY_REDIRECT = 307,\n PERMANENT_REDIRECT = 308,\n BAD_REQUEST = 400,\n UNAUTHORIZED = 401,\n PAYMENT_REQUIRED = 402,\n FORBIDDEN = 403,\n NOT_FOUND = 404,\n METHOD_NOT_ALLOWED = 405,\n NOT_ACCEPTABLE = 406,\n PROXY_AUTHENTICATION_REQUIRED = 407,\n REQUEST_TIMEOUT = 408,\n CONFLICT = 409,\n GONE = 410,\n LENGTH_REQUIRED = 411,\n PRECONDITION_FAILED = 412,\n PAYLOAD_TOO_LARGE = 413,\n URI_TOO_LONG = 414,\n UNSUPPORTED_MEDIA_TYPE = 415,\n REQUESTED_RANGE_NOT_SATISFIABLE = 416,\n EXPECTATION_FAILED = 417,\n UNPROCESSABLE_ENTITY = 422,\n TOO_MANY_REQUESTS = 429,\n INTERNAL_SERVER_ERROR = 500,\n NOT_IMPLEMENTED = 501,\n BAD_GATEWAY = 502,\n SERVICE_UNAVAILABLE = 503,\n GATEWAY_TIMEOUT = 504,\n HTTP_VERSION_NOT_SUPPORTED = 505\n}\n","export enum KeyboardCodes {\n ArrowUp = \"ArrowUp\",\n ArrowDown = \"ArrowDown\",\n Enter = \"Enter\",\n Shift = \"Shift\"\n}\n","export interface ModalData {\n mode: ModalMode;\n}\n\nexport enum ModalMode {\n Create,\n Edit\n}\n","export class NumberUtils {\n}\n\ndeclare global {\n interface Number {\n inRange(a: number, b: number): boolean;\n }\n}\n\nNumber.prototype.inRange = function (a: number, b: number): boolean {\n return this >= a && this <= b;\n};\n","import { isNullOrUndefined } from \"./type.utils\";\n\nexport class ObjectUtils {\n public static transformStringProperties(obj: any): object {\n for (const property in obj) {\n if (obj.hasOwnProperty(property)) {\n if (typeof obj[property] === \"object\") {\n obj = ObjectUtils.transformStringProperties(obj);\n } else {\n obj = ObjectUtils.stringPropertiesToNumber(obj, property);\n }\n }\n }\n\n return obj;\n }\n\n public static stringPropertiesToNumber(obj: any, property: string): object {\n if (!isNaN(obj[property])) {\n obj[property] = +obj[property];\n }\n\n return obj;\n }\n\n public static assignDefined(target: any, source: any): object {\n Object.keys(source).map(key => {\n if (source[key] !== undefined) {\n target[key] = source[key];\n }\n });\n\n return target;\n }\n\n public static areObjectsEqual(obj1: any, obj2: any): boolean {\n const keys1 = Object.keys(obj1).sort();\n const keys2 = Object.keys(obj2).sort();\n if (keys1.length !== keys2.length) {\n return false;\n }\n if (!keys1.every((k, i) => k === keys2[i])) {\n return false;\n }\n return keys1.every(kk => {\n const v1 = obj1[kk];\n const v2 = obj2[kk];\n if (Array.isArray(v1)) {\n return ObjectUtils.areObjectsEqual(v1, v2);\n } else if (typeof v1 === \"object\" && v1 !== null) {\n return ObjectUtils.areObjectsEqual(v1, v2);\n } else {\n return v1 === v2;\n }\n });\n }\n\n public static deepCopy(obj: any): any {\n // Handle the primitive types, null and undefined\n if (obj == null || typeof obj != \"object\") {\n return obj;\n }\n\n // Handle Date\n if (obj instanceof Date) {\n const copy = new Date();\n copy.setTime(obj.getTime());\n return copy;\n }\n\n // Handle Array\n if (obj instanceof Array) {\n const copy = [];\n for (const item of obj) {\n copy.push(ObjectUtils.deepCopy(item));\n }\n return copy;\n }\n\n // Handle Object\n if (obj instanceof Object) {\n const copy = {};\n for (const attr in obj) {\n if (obj.hasOwnProperty(attr)) {\n copy[attr] = ObjectUtils.deepCopy(obj[attr]);\n }\n }\n return copy;\n }\n\n throw new Error(\"Unable to copy obj! Its type isn't supported.\");\n }\n\n // To do an immutable assignment, we need to first deep copy the model and then run the deep assign.\n public static immutableDeepAssign<Source, Target>(key: string, deepObj: Source, obj: Target): Target {\n const output = ObjectUtils.deepCopy(obj);\n ObjectUtils.deepAssign(key, deepObj, output);\n return output;\n }\n\n // Does a shallow assignment on a deep value. The value is located by the key.\n public static deepAssign<Source, Target>(key: string, deepObj: Source, obj: Target) {\n ObjectUtils.internalDeepAssign(key?.split(\".\"), deepObj, obj);\n }\n\n private static internalDeepAssign<Source, Target>(segments: string[], deepObj: Source, obj: Target) {\n // No more depth to be navigated through, we can do the shallow assignment.\n if (segments?.length === 0) {\n Object.assign(obj, deepObj);\n return;\n }\n\n if (isNullOrUndefined(obj)) {\n obj = {} as Target;\n }\n\n const segment = segments.shift();\n // If we cannot complete the key's path, we create it.\n if (!obj.hasOwnProperty(segment)) {\n obj[segment] = {};\n }\n\n ObjectUtils.internalDeepAssign(segments, deepObj, obj[segment]);\n }\n}\n","export class PromiseUtils {}\n\ndeclare global {\n export interface PromiseConstructor {\n delay(ms: number): Promise<void>;\n }\n}\n\n// tslint:disable-next-line:only-arrow-functions\nPromise.delay = function(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n};\n","import { HttpParams } from \"@angular/common/http\";\n\nexport class QueryParamsUtils {\n public static fromObject(obj: any): string {\n Object.entries(obj).forEach(([key, value]) => {\n if (value === undefined) {\n delete obj[key];\n }\n });\n return new HttpParams({\n fromObject: obj\n }).toString();\n }\n}\n","const lowerUpperDigit8 = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d).{8,}$/;\n\nexport class RegexUtils {\n public static email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\n public static password = {\n // Used as default.\n // 8 chars, lower + upper + digit.\n lowerUpperDigit8\n };\n\n public static canadianPostalCode = /^((?!.*[DFIOQU])[A-VXYa-vxy][0-9][A-Za-z] ?[0-9][A-Za-z][0-9])?$/;\n}\n","export class UrlUtils {\n public static emailUrl(email: string): string {\n return `mailto:${email}`;\n }\n\n public static directionUrl(address: string, postalCode: string): string {\n return `https://www.google.com/maps/dir/?api=1&destination=${address}+${postalCode}`;\n }\n\n public static phoneCallUrl(phone: string, ext?: string): string {\n if (ext?.length) {\n return `tel:${phone};${ext}`;\n }\n\n return `tel:${phone}`;\n }\n\n // Takes location ref and returns fragment\n // http://localhost:4200/dashboard/profile returns [\"dashboard\", \"profile\"]\n public static getCurrentUrlFragments(): string[] {\n return window.location.href.replace(\"://\", \"\").split(\"/\").slice(1);\n }\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const NICE_ASSETS_CAROUSEL_OPTIONS = new InjectionToken(\"nice_assets_options\");\n","import { Directive, EventEmitter, HostBinding, HostListener, Output } from \"@angular/core\";\n\n@Directive({ selector: \"[niceDropzone]\"})\nexport class NiceDropzoneDirective {\n @HostBinding(\"class.file-over\")\n public fileOver: boolean;\n\n @Output()\n public filesDropped = new EventEmitter<FileList>();\n\n // Dragover listener\n @HostListener(\"dragover\", [\"$event\"])\n public onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.fileOver = true;\n }\n\n // Dragleave listener\n @HostListener(\"dragleave\", [\"$event\"])\n public onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.fileOver = false;\n }\n\n // Drop listener\n @HostListener(\"drop\", [\"$event\"])\n public ondrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.fileOver = false;\n const files = event.dataTransfer.files;\n if (files.length > 0) {\n this.filesDropped.emit(files);\n }\n }\n}\n","import {\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n Optional,\n Output, QueryList,\n ViewChild, ViewChildren,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { CanColor, ThemePalette } from \"@angular/material/core\";\nimport { niceAnimations } from \"../../animations\";\nimport { FileUtils } from \"../../utils\";\nimport { NICE_ASSETS_CAROUSEL_OPTIONS } from \"./assets-carousel.constant\";\n\nexport interface NiceAssets {\n type: \"image\" | \"video\";\n id?: number | string;\n url?: string;\n base64?: string;\n file?: File;\n}\n\nexport type NiceAssetsCarouselActionIcon = { matIcon: string; svgIcon?: string; } | { matIcon?: string; svgIcon: string; };\n\nexport interface NiceAssetsCarouselActions {\n icon: NiceAssetsCarouselActionIcon;\n name: string;\n action: (active: number) => void;\n}\n\nexport interface NiceAssetsCarouselOptions {\n actionButtons?: {\n moreOptions?: NiceAssetsCarouselActionIcon;\n addPhoto?: NiceAssetsCarouselActionIcon;\n remove?: NiceAssetsCarouselActionIcon;\n };\n addPhoto?: NiceAssetsCarouselActionIcon;\n leftArrow?: NiceAssetsCarouselActionIcon;\n rightArrow?: NiceAssetsCarouselActionIcon;\n upload?: NiceAssetsCarouselActionIcon;\n}\n\n@Component({\n selector: \"nice-assets-carousel\",\n templateUrl: \"assets-carousel.template.html\",\n styleUrls: [\"assets-carousel.theme.scss\"],\n encapsulation: ViewEncapsulation.None,\n animations: niceAnimations,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NiceAssetsCarouselComponent),\n multi: true\n }\n ]\n})\nexport class NiceAssetsCarouselComponent implements ControlValueAccessor, CanColor {\n public _activeTranslationPosition = 0;\n public _active = 0;\n public _assets: NiceAssets[] = [];\n public _activeAsset: NiceAssets;\n public _lastAsset = true;\n public _shouldTransform = false;\n public _activeVideoElement: ElementRef<HTMLVideoElement>;\n public _assetsElement: QueryList<ElementRef<HTMLDivElement>>;\n public defaultColor: ThemePalette = \"primary\";\n\n @ViewChild(\"fileInput\")\n public inputElement: ElementRef<HTMLInputElement>;\n\n @Input()\n public color: ThemePalette = this.defaultColor;\n\n @Input()\n public edit = false;\n\n @Input()\n public accept: string[] = [\"image/*\"];\n\n @Input()\n public customActions: NiceAssetsCarouselActions[] = [];\n\n @Input()\n public multipleUpload = false;\n\n @Input()\n public visiblePreviewAsset = 4;\n\n @Input()\n public showAddAssetContainer = true;\n\n @Output()\n public activeChange = new EventEmitter<number>();\n\n @Output()\n public removedAsset = new EventEmitter<NiceAssets>();\n\n public listStyle: { transform: string } = { transform: \"translateX(0px)\" };\n\n public showOverlay: boolean;\n\n private propagate: (assets: NiceAssets[]) => void;\n\n @ViewChild(\"activeVideo\")\n public set activeVideoElement(activeVideoElement: ElementRef<HTMLVideoElement>) {\n this._activeVideoElement = activeVideoElement;\n if (!this._activeVideoElement || !this._assetsElement) {\n return;\n }\n\n this.startSyncVideo();\n }\n\n @ViewChildren(\"assets\")\n public set assetsElement(assetsElement: QueryList<ElementRef<HTMLDivElement>>) {\n this._assetsElement = assetsElement;\n if (!this._activeVideoElement || !this._assetsElement) {\n return;\n }\n\n this.startSyncVideo();\n }\n\n @Input()\n public set assets(assets: NiceAssets[]) {\n this.writeValue(assets ?? []);\n }\n\n private set activeTranslationPosition(position: number) {\n this._activeTranslationPosition = position;\n this.listStyle.transform = `translateX(calc((var(--nice-assets-carousel-asset-width) + var(--nice-assets-carousel-asset-gap)) * ${position}))`;\n }\n\n private set activeAsset(position: number) {\n if (position < 0) {\n position = 0;\n }\n\n this._active = position;\n this._activeAsset = this._assets[this._active];\n this._lastAsset = this._active === this._assets.length - 1 || !this._assets.length;\n this._shouldTransform\n = ((this.edit && this.showAddAssetContainer) && this._active >= (this.visiblePreviewAsset - 1))\n || this._active >= this.visiblePreviewAsset;\n this.activeChange.emit(this._active);\n }\n\n constructor(@Optional() @Inject(NICE_ASSETS_CAROUSEL_OPTIONS) public readonly options: NiceAssetsCarouselOptions) {\n if (!this.options) {\n this.options = {\n actionButtons: {\n addPhoto: {\n matIcon: \"photo_camera\"\n },\n moreOptions: {\n matIcon: \"more_vert\"\n },\n remove: {\n matIcon: \"delete\"\n }\n },\n addPhoto: {\n matIcon: \"photo_camera\"\n },\n leftArrow: {\n matIcon: \"chevron_left\"\n },\n rightArrow: {\n matIcon: \"chevron_right\"\n },\n upload: {\n matIcon: \"file_upload\"\n }\n };\n }\n }\n\n public writeValue(assets: NiceAssets[]): void {\n this._assets = assets ?? [];\n if (this._assets?.length) {\n this._activeAsset = this._assets[this._active];\n } else {\n this._lastAsset = true;\n }\n }\n\n public registerOnChange(fn: (assets: NiceAssets[]) => void): void {\n this.propagate = fn;\n }\n\n public registerOnTouched(fn: (assets: NiceAssets[]) => void): void {}\n\n public clickLeft(): void {\n if (this._active) {\n this.activeAsset = this._active - 1;\n }\n\n if (this._activeTranslationPosition < 0) {\n this.activeTranslationPosition = this._activeTranslationPosition + 1;\n }\n }\n\n public clickRight(): void {\n if (this._lastAsset) {\n return;\n }\n\n this.activeAsset = this._active + 1;\n if (this._shouldTransform) {\n this.activeTranslationPosition = this._activeTranslationPosition - 1;\n }\n }\n\n public clickAsset(index: number): void {\n let visibleAssets = (this.edit && this.showAddAssetContainer) ? (this.visiblePreviewAsset - 2) : (this.visiblePreviewAsset - 1);\n if (index < visibleAssets) {\n visibleAssets = index;\n }\n\n if (index >= 0) {\n this.activeTranslationPosition = (index - visibleAssets) * -1;\n }\n\n this.activeAsset = index;\n }\n\n public async onFilesChange(event: Event): Promise<void> {\n const files = (event.target as HTMLInputElement)?.files;\n await this.onFilesDrop(files);\n\n this.inputElement.nativeElement.value = \"\";\n }\n\n public async onFilesDrop(files: FileList): Promise<void> {\n if (!files?.length) {\n return;\n }\n\n let newAssetsAdded = false;\n for (let i = 0; i < files.length; i++) {\n const file = files.item(i);\n if (!this.accept.some((accept) => {\n if (accept.endsWith(\"*\")) {\n return file.type.startsWith(accept.replace(\"*\", \"\"));\n }\n\n return accept === file.type;\n })) {\n continue;\n }\n\n newAssetsAdded = true;\n this._assets.push({\n file,\n type: file.type.split(\"/\").shift() as \"image\" | \"video\",\n base64: await FileUtils.getDataUrl(file)\n });\n }\n\n if (newAssetsAdded) {\n this.clickAsset(this._assets.length - 1);\n this.propagate?.(this._assets);\n }\n }\n\n public clickRemove(): void {\n this.removedAsset.emit(this._assets[this._active]);\n this._assets.splice(this._active, 1);\n\n if (this._lastAsset) {\n this.clickAsset(this._assets.length - 1);\n } else {\n this.clickAsset(this._active);\n }\n\n this.propagate?.(this._assets);\n }\n\n public clickCustom(action: NiceAssetsCarouselActions): void {\n action.action(this._active);\n }\n\n public async startSyncVideo(): Promise<void> {\n (this._assetsElement.get(this._active).nativeElement.firstElementChild as HTMLVideoElement).pause();\n (this._assetsElement.get(this._active).nativeElement.firstElementChild as HTMLVideoElement).currentTime = 0;\n\n this._activeVideoElement.nativeElement.currentTime = 0;\n await this._activeVideoElement.nativeElement.play();\n await (this._assetsElement.get(this._active).nativeElement.firstElementChild as HTMLVideoElement).play();\n }\n}\n","<div class=\"carousel-container\" niceDropzone (filesDropped)=\"onFilesDrop($event)\">\n <div class=\"active-image\"\n matRipple\n [class.empty-state]=\"!_activeAsset\"\n (click)=\"edit && fileInput.click(); $event.stopPropagation()\"\n >\n <img\n *ngIf=\"_activeAsset?.type === 'image'\"\n (mouseover)=\"showOverlay=true\"\n [src]=\"_activeAsset.url ?? _activeAsset.base64\"\n draggable=\"false\"\n class=\"relative\"\n alt=\"active-image\"\n >\n <video #activeVideo *ngIf=\"_activeAsset?.type === 'video'\" draggable=\"false\" loop [src]=\"_activeAsset.url ?? _activeAsset.base64\"></video>\n\n <div class=\"empty-state-content\" *ngIf=\"!_activeAsset\">\n <mat-icon *ngIf=\"options.upload.matIcon\">{{ options.upload.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.upload.svgIcon\" [svgIcon]=\"options.upload.svgIcon\"></mat-icon>\n\n <div class=\"text\">\n {{ \"nice_ui_kit.assets_carousel.upload_here\" | translate }}\n </div>\n </div>\n\n <div *ngIf=\"_activeAsset && showOverlay && edit\" class=\"active-image-overlay\">\n <div\n (mouseout)=\"showOverlay=false\"\n class=\"flex flex-col justify-center items-center w-full h-full\"\n >\n <mat-icon *ngIf=\"options.upload.matIcon\">{{ options.upload.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.upload.svgIcon\" [svgIcon]=\"options.upload.svgIcon\"></mat-icon>\n </div>\n </div>\n\n <div *ngIf=\"edit\" class=\"active-buttons\">\n <button mat-icon-button (click)=\"fileInput.click(); $event.stopPropagation()\">\n <mat-icon *ngIf=\"options.actionButtons.addPhoto.matIcon\">{{ options.actionButtons.addPhoto.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.actionButtons.addPhoto.svgIcon\" [svgIcon]=\"options.actionButtons.addPhoto.svgIcon\"></mat-icon>\n </button>\n <button mat-icon-button [matMenuTriggerFor]=\"assetActions\" (click)=\"$event.stopPropagation()\" [disabled]=\"!_activeAsset\">\n <mat-icon *ngIf=\"options.actionButtons.moreOptions.matIcon\">{{ options.actionButtons.moreOptions.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.actionButtons.moreOptions.svgIcon\" [svgIcon]=\"options.actionButtons.moreOptions.svgIcon\"></mat-icon>\n </button>\n\n <mat-menu class=\"nice-asset-options-menu\" [xPosition]=\"'before'\" #assetActions=\"matMenu\">\n <button\n mat-menu-item\n *ngFor=\"let action of customActions\"\n (click)=\"clickCustom(action)\"\n >\n <mat-icon *ngIf=\"action.icon.matIcon\">{{ action.icon.matIcon }}</mat-icon>\n <mat-icon [svgIcon]=\"action.icon.svgIcon\" *ngIf=\"action.icon.svgIcon\"></mat-icon>\n <span>{{ action.name | translate }}</span>\n </button>\n <button mat-menu-item (click)=\"clickRemove()\">\n <mat-icon *ngIf=\"options.actionButtons.remove.matIcon\">{{ options.actionButtons.remove.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.actionButtons.remove.svgIcon\" [svgIcon]=\"options.actionButtons.remove.svgIcon\"></mat-icon>\n <span>{{ \"nice_ui_kit.assets_carousel.delete\" | translate }}</span>\n </button>\n </mat-menu>\n </div>\n </div>\n\n <div class=\"carousel\">\n <button *ngIf=\"showAddAssetContainer || _activeAsset\" class=\"action-button left-arrow\" mat-icon-button [disabled]=\"!_active\" (click)=\"clickLeft()\">\n <mat-icon *ngIf=\"options.leftArrow.matIcon\">{{ options.leftArrow.matIcon }}</mat-icon>\n <mat-icon class=\"arrows\" *ngIf=\"options.leftArrow.svgIcon\" [svgIcon]=\"options.leftArrow.svgIcon\"></mat-icon>\n </button>\n <div class=\"asset-list-container\">\n <div *ngIf=\"showAddAssetContainer && edit\" class=\"add-asset-container\">\n <div class=\"add-asset\" matRipple (click)=\"fileInput.click()\">\n <mat-icon *ngIf=\"options.addPhoto.matIcon\">{{ options.addPhoto.matIcon }}</mat-icon>\n <mat-icon *ngIf=\"options.addPhoto.svgIcon\" [svgIcon]=\"options.addPhoto.svgIcon\"></mat-icon>\n </div>\n </div>\n\n <div class=\"asset-list\" [ngStyle]=\"listStyle\">\n <div #assets class=\"asset\" *ngFor=\"let asset of _assets; let i = index\" (click)=\"clickAsset(i)\" [ngClass]=\"color\" [class.active]=\"_active === i\">\n <img *ngIf=\"asset.type === 'image'\" draggable=\"false\" [src]=\"asset.url ?? asset.base64\" alt=\"add-image\">\n <video *ngIf=\"asset.type === 'video'\" draggable=\"false\" loop [src]=\"asset.url ?? asset.base64\"></video>\n </div>\n </div>\n </div>\n <button *ngIf=\"showAddAssetContainer || _activeAsset\" class=\"action-button right-arrow\" mat-icon-button [disabled]=\"_lastAsset\" (click)=\"clickRight()\">\n <mat-icon *ngIf=\"options.rightArrow.matIcon\">{{ options.rightArrow.matIcon }}</mat-icon>\n <mat-icon class=\"arrows\" *ngIf=\"options.rightArrow.svgIcon\" [svgIcon]=\"options.rightArrow.svgIcon\"></mat-icon>\n </button>\n </div>\n</div>\n\n<input #fileInput type=\"file\" hidden [accept]=\"accept\" (change)=\"onFilesChange($event)\" [multiple]=\"multipleUpload\">\n","import { NgModule } from \"@angular/core\";\nimport { NiceDropzoneDirective } from \"./dropzone.directive\";\n\n@NgModule({\n imports: [],\n declarations: [NiceDropzoneDirective],\n providers: [],\n exports: [NiceDropzoneDirective]\n})\nexport class NiceDropzoneModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatRippleModule } from \"@angular/material/core\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatMenuModule } from \"@angular/material/menu\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { NiceDropzoneModule } from \"../../directives/dropzone\";\n\nimport { NiceAssetsCarouselComponent, NiceAssetsCarouselOptions } from \"./assets-carousel.component\";\nimport { NICE_ASSETS_CAROUSEL_OPTIONS } from \"./assets-carousel.constant\";\n\n@NgModule({\n imports: [\n CommonModule,\n MatIconModule,\n MatButtonModule,\n MatMenuModule,\n MatRippleModule,\n NiceDropzoneModule,\n TranslateModule\n ],\n declarations: [NiceAssetsCarouselComponent],\n providers: [],\n exports: [NiceAssetsCarouselComponent]\n})\nexport class NiceAssetsCarouselModule {\n public static forRoot(options?: NiceAssetsCarouselOptions): ModuleWithProviders<NiceAssetsCarouselModule> {\n if (!options) {\n options = {\n actionButtons: {}\n };\n }\n if (!options.actionButtons.moreOptions) {\n options.actionButtons.moreOptions = { matIcon: \"more_vert\" };\n }\n if (!options.actionButtons.addPhoto) {\n options.actionButtons.addPhoto = { matIcon: \"photo_camera\" };\n }\n if (!options.actionButtons.remove) {\n options.actionButtons.remove = { matIcon: \"delete\" };\n }\n if (!options.addPhoto) {\n options.addPhoto = { matIcon: \"photo_camera\" };\n }\n if (!options.leftArrow) {\n options.leftArrow = { matIcon: \"chevron_left\" };\n }\n if (!options.rightArrow) {\n options.rightArrow = { matIcon: \"chevron_right\" };\n }\n if (!options.upload) {\n options.upload = { matIcon: \"file_upload\" };\n }\n\n return {\n ngModule: NiceAssetsCarouselModule,\n providers: [\n {\n provide: NICE_ASSETS_CAROUSEL_OPTIONS,\n useValue: options\n }\n ]\n };\n }\n}\n","export interface NiceAsyncTypeaheadSearchResult<T> {\n items: T[];\n nextPage: number | null;\n}\n\nexport abstract class NiceAsyncTypeaheadProvider<T, ID = number, Options = any> {\n public abstract resource: string;\n public abstract search(searchQuery: string, page: number, options?: Options): Promise<NiceAsyncTypeaheadSearchResult<T>>;\n public abstract getById(id: ID, options?: Options): Promise<T>;\n\n public format(item: T): string {\n return \"\";\n }\n}\n","import { Directive, EventEmitter, Input, OnDestroy, Output } from \"@angular/core\";\nimport { MatAutocomplete } from \"@angular/material/autocomplete\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil, tap } from \"rxjs/operators\";\n\nexport interface IAutoCompleteScrollEvent {\n autoComplete: MatAutocomplete;\n scrollEvent: Event;\n}\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: \"mat-autocomplete[optionsScroll]\"\n})\nexport class OptionsScrollDirective implements OnDestroy {\n private _onDestroy$ = new Subject();\n\n @Input()\n public thresholdPercent = 0.99;\n\n @Output()\n public optionsScroll = new EventEmitter<IAutoCompleteScrollEvent>();\n\n constructor(public autoComplete: MatAutocomplete) {\n this.autoComplete.opened\n .pipe(\n tap(() => {\n // Note: When autocomplete raises opened, panel is not yet created (by Overlay)\n // Note: The panel will be available on next tick\n // Note: The panel wil NOT open if there are no options to display\n setTimeout(() => {\n // Note: remove listner just for safety, in case the close event is skipped.\n this.removeScrollEventListener();\n if (this.autoComplete && this.autoComplete.panel) {\n this.autoComplete.panel.nativeElement.addEventListener(\"scroll\", this.onScroll.bind(this));\n }\n });\n }),\n takeUntil(this._onDestroy$)\n )\n .subscribe();\n\n this.autoComplete.closed\n .pipe(\n tap(() => this.removeScrollEventListener()),\n takeUntil(this._onDestroy$)\n )\n .subscribe();\n }\n\n public ngOnDestroy() {\n this._onDestroy$.next(null);\n this._onDestroy$.complete();\n\n this.removeScrollEventListener();\n }\n\n public onScroll(event: Event) {\n if (this.thresholdPercent === undefined) {\n this.optionsScroll.next({ autoComplete: this.autoComplete, scrollEvent: event });\n } else {\n const target = event.target as HTMLElement;\n const threshold = (this.thresholdPercent * 100 * target.scrollHeight) / 100;\n const current = target.scrollTop + target.clientHeight;\n\n if (current > threshold) {\n this.optionsScroll.next({ autoComplete: this.autoComplete, scrollEvent: event });\n }\n }\n }\n\n private removeScrollEventListener() {\n if (this.autoComplete && this.autoComplete.panel) {\n this.autoComplete.panel.nativeElement.removeEventListener(\"scroll\", this.onScroll);\n }\n }\n}\n","import { FocusMonitor } from \"@angular/cdk/a11y\";\nimport { coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input, NgZone,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n Self,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { ControlValueAccessor, FormControl, NgControl, Validators } from \"@angular/forms\";\nimport { MatAutocompleteActivatedEvent, MatAutocompleteSelectedEvent } from \"@angular/material/autocomplete\";\nimport { MatOption } from \"@angular/material/core\";\nimport { MatFormFieldControl } from \"@angular/material/form-field\";\nimport { Subject, Subscription } from \"rxjs\";\nimport * as uuid from \"uuid\";\nimport { isNullOrUndefined } from \"../../utils\";\n\nexport class NiceTypeaheadNewValue {\n constructor(public $new: string) {}\n}\n\n@Component({\n selector: \"nice-typeahead\",\n templateUrl: \"typeahead.template.html\",\n styleUrls: [\"typeahead.style.scss\"],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: MatFormFieldControl,\n useExisting: NiceTypeaheadComponent\n }\n ]\n})\nexport class NiceTypeaheadComponent implements OnInit, OnDestroy, ControlValueAccessor, MatFormFieldControl<string> {\n @Input()\n public set items(items: any[] | null | undefined) {\n this._items = items ?? [];\n this.values = items ?? [];\n this.setLoading(false);\n this.setLoadingPage(false);\n this.updateSearchInput();\n this.checkIfValueStillExist();\n }\n\n @Input()\n public set labelFormatFn(labelFormatFn: (item: any) => string) {\n this._labelFormatFn = labelFormatFn;\n this.updateSearchInput();\n }\n\n @Input()\n public set required(req) {\n this._required = coerceBooleanProperty(req);\n this.stateChanges.next();\n }\n\n public get required(): boolean {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n\n @Input()\n public get disabled(): boolean {\n return this._disabled;\n }\n\n public set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n if (this._disabled) {\n this.searchControl.disable({ emitEvent: false });\n } else {\n this.searchControl.enable({ emitEvent: false });\n }\n this.stateChanges.next();\n }\n\n @Input()\n public set placeholder(placeholder: string) {\n this._placeholder = placeholder;\n this.stateChanges.next();\n }\n\n public get placeholder(): string {\n return this._placeholder;\n }\n\n @Input()\n public set emptyPlaceholder(emptyPlaceholder: string) {\n this._emptyPlaceholder = emptyPlaceholder;\n this.stateChanges.next();\n }\n\n public get emptyPlaceholder(): string {\n return this._emptyPlaceholder;\n }\n\n public set value(value: any) {\n if (value === this._value) {\n return;\n }\n this._value = value;\n this.propagate(this._value);\n }\n\n public get value(): any {\n return this._value;\n }\n\n public get empty(): boolean {\n return (\n (!this.searchControl.value || !this.searchControl.value.length) &&\n (!this._value || (typeof this._value === \"string\" && !this._value.length))\n );\n }\n\n public get errorState(): boolean {\n return this.ngControl ? this.ngControl.touched && this.ngControl.invalid : false;\n }\n\n @HostBinding(\"class.floating\")\n public get shouldLabelFloat(): boolean {\n return this.open || !this.empty;\n }\n\n constructor(\n @Optional() @Self() public ngControl: NgControl,\n private fm: FocusMonitor,\n private zone: NgZone,\n public elRef: ElementRef<HTMLElement>\n ) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n fm.monitor(elRef.nativeElement, true).subscribe(origin => {\n if (this.ignoreNextFocus) {\n this.ignoreNextFocus = false;\n return;\n }\n\n this.focused = !!origin;\n this.stateChanges.next();\n if (this.focused && (!this._items || !this._items.length) && !this.loading) {\n this.searchControl.patchValue(\"\");\n }\n\n if (!this.focused && !this._value) {\n if (this.activeOption && this.activeOption.viewValue?.toLowerCase() === this.searchControl.value?.toLowerCase()) {\n this.onOptionSelected({\n option: this.activeOption,\n source: null\n });\n } else {\n if (!this.open) {\n this.onRemove();\n }\n }\n }\n });\n }\n\n private _items: any[];\n private _labelFormatFn: (item: unknown) => string;\n private _page = 0;\n\n @Input()\n public allowNotFoundItems = false;\n\n @Input()\n public panelClass: string | string[] = [];\n\n @Input()\n public bindValue: string;\n @Input()\n public bindLabel: string;\n\n /** @deprecated: Use NiceRemoteTypeahead instead */\n @Input()\n public typeahead: Subject<string>;\n /** @deprecated: Use NiceRemoteTypeahead instead */\n @Input()\n public page$: Subject<number>;\n\n @Input()\n public loading: boolean;\n @Input()\n public loadingPage: boolean;\n\n @Input()\n public searchFn: (search: string, option: any) => boolean;\n\n // tslint:disable-next-line:no-output-native\n @Output()\n public change = new EventEmitter();\n\n @ViewChild(\"searchInput\", { static: true })\n public input: ElementRef<HTMLInputElement>;\n\n @ViewChildren(MatOption)\n public options: MatOption[];\n\n public search$ = new Subject<string>();\n public searchControl = new FormControl(null);\n public values: unknown[] = [];\n public valueChangesSub$: Subscription;\n public searchSub$: Subscription;\n public open = false;\n public panelWidth = 0;\n public activeOption: MatOption;\n\n private updatingItem = false;\n private waitForItems = false;\n private ignoreNextFocus = false;\n private observer: ResizeObserver;\n\n /** MatFormField */\n private _required: boolean;\n private _disabled = false;\n private _placeholder: string;\n private _value: any;\n private _emptyPlaceholder: string;\n\n public stateChanges = new Subject<void>();\n public controlType = \"typeahead\";\n public focused = false;\n\n @HostBinding()\n public id: string = uuid.v4();\n @HostBinding(\"attr.aria-describedby\")\n public describedBy = \"\";\n\n @Input()\n public optionTemplate: TemplateRef<HTMLElement>;\n\n public propagate: (value: string) => void = () => {};\n\n public ngOnInit(): void {\n if (this.ngControl) {\n this.ngControl.statusChanges.subscribe((status) => {\n this.disabled = status === \"DISABLED\";\n });\n }\n\n this.searchSub$ = this.search$.subscribe(text => {\n if (!text || typeof text !== \"string\") {\n this.values = this._filter(\"\");\n return;\n }\n this.values = this._filter(text);\n });\n if (this.searchControl) {\n this.valueChangesSub$ = this.searchControl.valueChanges.subscribe(text => {\n if (this.updatingItem) {\n return;\n }\n\n if (this._value) {\n if (text === this.formatLabel(this.getValueItem())) {\n return;\n }\n\n this.value = null;\n }\n\n if (this.waitForItems) {\n this.waitForItems = false;\n return;\n }\n\n if (typeof text !== \"string\") {\n return;\n }\n\n if (this.typeahead) {\n this.setLoading(true);\n this._page = 0;\n this.typeahead.next(text);\n } else {\n this.search$.next(text);\n }\n });\n }\n\n this.observer = new ResizeObserver(entries => {\n this.zone.run(() => {\n this.panelWidth = entries[0].contentRect.width;\n });\n });\n\n this.observer.observe(this.elRef.nativeElement);\n }\n\n public ngOnDestroy(): void {\n this.search$?.complete();\n this.searchSub$?.unsubscribe();\n this.valueChangesSub$?.unsubscribe();\n this.stateChanges?.complete();\n this.fm.stopMonitoring(this.elRef.nativeElement);\n this.observer?.unobserve(this.elRef.nativeElement);\n }\n\n public onContainerClick(event: MouseEvent): void {}\n\n public setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(\" \");\n }\n\n public registerOnChange(propagate: (value: string) => void): void {\n this.propagate = propagate;\n }\n\n public registerOnTouched(fn: any): void {\n // NO-OP\n }\n\n public writeValue(value: string): void {\n try {\n this.updatingItem = true;\n // If both are equal (considering null === undefined), consider that the value has not changed.\n if (this._value === value || (isNullOrUndefined(this._value) && isNullOrUndefined(value))) {\n return;\n }\n\n if (!value && this._value !== value) {\n this.onRemove(null);\n return;\n }\n this.value = value;\n if (!this._items) {\n this.waitForItems = true;\n return;\n }\n\n this.updateSearchInput();\n } finally {\n this.updatingItem = false;\n }\n }\n\n public onOptionActivated(event: MatAutocompleteActivatedEvent): void {\n this.activeOption = event.option;\n }\n\n public onOptionSelected(event: MatAutocompleteSelectedEvent): void {\n if (event.option.id === \"new-value-option\") {\n this.value = new NiceTypeaheadNewValue(this.searchControl.value);\n } else {\n this.updateLabel(event.option.value);\n this.value = this.bindValue ? this.getObjectItem(this.bindValue, event.option.value) : event.option.value;\n }\n this.change.emit(event.option.value);\n }\n\n public updateState(open: boolean): void {\n this.open = open;\n if (!this.open && this.ngControl) {\n this.ngControl.control.markAsTouched();\n }\n\n if (!this.open) {\n this.activeOption = null;\n if (!this._value) {\n this.onRemove();\n }\n }\n }\n\n public onRemove(event?: Event): void {\n if (event) {\n event.stopPropagation();\n }\n if (this.disabled) {\n return;\n }\n this.ignoreNextFocus = true;\n this.focused = false;\n this.value = null;\n this.searchControl.patchValue(null);\n if (this.ngControl?.control) {\n this.ngControl.control.markAsTouched();\n }\n this.stateChanges.next();\n this.change.emit();\n\n if (this.typeahead) {\n this.setLoading(true);\n this._page = 0;\n this.typeahead.next(\"\");\n } else {\n this.search$.next(\"\");\n }\n }\n\n public formatLabel(item: any): string {\n if (this._labelFormatFn) {\n return this._labelFormatFn(item);\n }\n\n if (this.bindLabel) {\n return this.getObjectItem(this.bindLabel, item);\n }\n\n if (typeof item !== \"string\") {\n return \"\";\n }\n\n return item;\n }\n\n private _filter(text: string): unknown[] {\n if (this._items) {\n const searchFn = this.searchFn || this.defaultSearch.bind(this);\n return this._items.filter(x => searchFn(text, x));\n }\n return [];\n }\n\n private defaultSearch(search: string, option: unknown): boolean {\n if (typeof option === \"string\") {\n return this.filterString(search, option);\n }\n\n if (typeof option !== \"object\") {\n return false;\n }\n\n if (this.bindLabel) {\n const item = this.getObjectItem(this.bindLabel, option);\n if (typeof item === \"string\") {\n return this.filterString(search, item);\n }\n } else if (this.formatLabel) {\n const item = this.formatLabel(option);\n if (typeof item === \"string\") {\n return this.filterString(search, item);\n }\n }\n\n return false;\n }\n\n private updateSearchInput(): void {\n if ((!this.waitForItems && !this._items) || !this._items) {\n return;\n }\n\n if (this._value instanceof NiceTypeaheadNewValue) {\n this.updateLabel(this._value.$new);\n return;\n }\n\n if (typeof this._value === \"object\") {\n this.updateLabel(this._value);\n return;\n }\n\n const search = this._items.find(\n v => (this.bindValue && typeof v === \"object\" ? this.getObjectItem(this.bindValue, v) : v) === this._value\n );\n if (search) {\n this.updateLabel(search);\n }\n }\n\n private filterString(text: string, value: string): boolean {\n return value.toLowerCase().includes(text.toLowerCase());\n }\n\n private updateLabel(item: unknown | string): void {\n if (!item) {\n return;\n }\n\n const label = this.formatLabel(item);\n\n if (label && label !== this.searchControl.value) {\n this.searchControl.patchValue(label, { emitEvent: false });\n }\n }\n\n public onEndScroll(): void {\n if (this.page$ && !this.loadingPage) {\n this.setLoadingPage(true);\n this._page++;\n this.page$.next(this._page);\n }\n }\n\n private getObjectItem(key: string, obj: object): any {\n const keys = key.split(\".\");\n let item = obj;\n for (const k of keys) {\n if (!item) {\n return item;\n }\n\n if (!item.hasOwnProperty(k)) {\n return item;\n }\n item = item[k];\n }\n\n return item;\n }\n\n private getValueItem(): any {\n if (!this.bindValue) {\n return this._value;\n }\n\n const keys = this.bindValue.split(\".\");\n return this._items.find(x => {\n let item = x;\n for (const k of keys) {\n if (!item) {\n return item;\n }\n\n if (!item.hasOwnProperty(k)) {\n return item;\n }\n item = item[k];\n }\n\n return item === this._value;\n });\n }\n\n private setLoading(loading: boolean): void {\n if (this.loading === undefined) {\n this.loading = loading;\n }\n }\n\n private setLoadingPage(loading: boolean): void {\n if (this.loadingPage === undefined) {\n this.loadingPage = loading;\n }\n }\n\n private checkIfValueStillExist(): void {\n if (this._value instanceof NiceTypeaheadNewValue) {\n return;\n }\n\n const item = this._items.find(\n v => (this.bindValue && typeof v === \"object\" ? this.getObjectItem(this.bindValue, v) : v) === this._value\n );\n if (item) {\n return;\n }\n\n if (this._value !== null && this._value !== undefined) {\n this.onRemove(null);\n }\n }\n}\n","<div class=\"flex\" *ngIf=\"!disabled; else disable\">\n <input\n #searchInput\n matInput\n class=\"flex-auto\"\n type=\"text\"\n name=\"mat-autocomplete\"\n [disabled]=\"disabled\"\n [placeholder]=\"placeholder\"\n [formControl]=\"searchControl\"\n [matAutocomplete]=\"auto\"\n [required]=\"required\"\n />\n <mat-icon *ngIf=\"value && !loading\" matSuffix class=\"close-button secondary-text\" (click)=\"onRemove($event)\">\n close\n </mat-icon>\n\n <mat-spinner class=\"self-center\" [diameter]=\"16\" *ngIf=\"loading\"></mat-spinner>\n</div>\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n [panelWidth]=\"panelWidth\"\n [class]=\"panelClass\"\n (optionActivated)=\"onOptionActivated($event)\"\n (optionSelected)=\"onOptionSelected($event)\"\n (closed)=\"updateState(false)\"\n (opened)=\"updateState(true)\"\n (optionsScroll)=\"onEndScroll()\"\n autoActiveFirstOption\n>\n <mat-progress-bar *ngIf=\"open && loading\" mode=\"indeterminate\" color=\"primary\"></mat-progress-bar>\n <mat-option *ngFor=\"let option of values\" [value]=\"option\">\n <ng-container\n *ngIf=\"optionTemplate; else format\"\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: option }\">\n </ng-container>\n <ng-template #format>\n {{ formatLabel(option) }}\n </ng-template>\n </mat-option>\n <mat-option *ngIf=\"!values?.length && !allowNotFoundItems\" disabled>\n <ng-container *ngIf=\"emptyPlaceholder; else defaultEmptyPlaceholder\">\n {{ emptyPlaceholder }}\n </ng-container>\n <ng-template #defaultEmptyPlaceholder>\n {{ \"components.typeahead.no_item_found\" | translate }}\n </ng-template>\n </mat-option>\n <mat-option *ngIf=\"!values?.length && allowNotFoundItems\" id=\"new-value-option\" [value]=\"searchControl.value\">\n <span class=\"italic\">{{ searchControl.value }}</span>\n </mat-option>\n <mat-progress-bar *ngIf=\"open && loadingPage\" mode=\"indeterminate\" color=\"primary\"></mat-progress-bar>\n</mat-autocomplete>\n\n<ng-template #disable>\n <input\n matInput\n class=\"disabled-input\"\n type=\"text\"\n [disabled]=\"true\"\n [placeholder]=\"placeholder\"\n [formControl]=\"searchControl\"\n [required]=\"required\"\n />\n</ng-template>\n","import { NgModule } from \"@angular/core\";\nimport { OptionsScrollDirective } from \"./options-scroll.directive\";\n\n@NgModule({\n declarations: [OptionsScrollDirective],\n exports: [OptionsScrollDirective]\n})\nexport class OptionScrollModule {}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { MatAutocompleteModule } from \"@angular/material/autocomplete\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatInputModule } from \"@angular/material/input\";\nimport { MatProgressBarModule } from \"@angular/material/progress-bar\";\nimport { MatProgressSpinnerModule } from \"@angular/material/progress-spinner\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { OptionScrollModule } from \"./directives/options-scroll.module\";\n\nimport { NiceTypeaheadComponent } from \"./typeahead.component\";\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n OptionScrollModule,\n MatAutocompleteModule,\n FormsModule,\n MatInputModule,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n MatIconModule,\n MatButtonModule,\n TranslateModule\n ],\n declarations: [NiceTypeaheadComponent],\n exports: [NiceTypeaheadComponent]\n})\nexport class NiceTypeaheadModule {}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const NICE_ASYNC_TYPEAHEAD_PROVIDER = new InjectionToken(\"nice_async_typeahead_provider\");\n","import { Inject, Injectable, Optional } from \"@angular/core\";\nimport { BehaviorSubject, firstValueFrom, from, isObservable, mergeMap, Observable } from \"rxjs\";\nimport { map } from \"rxjs/operators\";\nimport { NICE_ASYNC_TYPEAHEAD_PROVIDER } from \"../async-typeahead.constant\";\nimport { NiceAsyncTypeaheadProvider } from \"./async-typeahead.provider\";\n\nexport class AsyncTypeaheadState {\n items: any[];\n active: any;\n loading: boolean;\n loadingPage: boolean;\n initialized: boolean;\n page: number;\n isLastPage: boolean;\n searchQuery?: string;\n excludedIds: any[];\n}\n\n@Injectable()\nexport class NiceAsyncTypeaheadService {\n private state$: BehaviorSubject<AsyncTypeaheadState> = new BehaviorSubject({\n items: [],\n active: null,\n loading: false,\n loadingPage: false,\n initialized: false,\n searchQuery: null,\n page: 0,\n isLastPage: false,\n excludedIds: []\n });\n\n public loading$ = this.state$.pipe(map(x => x.loading));\n public loadingPage$ = this.state$.pipe(map(x => x.loadingPage));\n public active$ = this.state$.pipe(map(x => x.active));\n public items$ = this.state$.pipe(map(x => x.items));\n public filteredItems$ = this.state$.pipe(map(x => x.items.filter(item => !x.excludedIds.includes(item.id))));\n\n constructor(@Optional() @Inject(NICE_ASYNC_TYPEAHEAD_PROVIDER) private readonly apis: NiceAsyncTypeaheadProvider<any>[]) {\n if (!this.apis) {\n this.apis = [];\n }\n }\n\n public async initialize(resource: string, options?: any): Promise<void> {\n const { initialized } = this.state$.getValue();\n if (initialized) {\n return;\n }\n\n return this.search(resource, \"\", options);\n }\n\n public async search(resource: string, searchQuery: string, options?: any): Promise<void> {\n const { active, initialized } = this.state$.getValue();\n\n if (active && !initialized) {\n this.state$.next({\n ...this.state$.value,\n initialized: true\n });\n return;\n }\n\n const api = this.apis.find(x => x.resource === resource);\n if (!api) {\n return;\n }\n\n try {\n this.state$.next({\n ...this.state$.value,\n loading: true,\n initialized: true,\n page: 0,\n isLastPage: false,\n searchQuery\n });\n\n const result = await api.search(searchQuery, 0, options);\n this.state$.next({\n ...this.state$.value,\n items: result.items,\n page: result.nextPage ? result.nextPage : this.state$.value.page,\n isLastPage: !result.nextPage\n });\n } catch {} finally {\n this.state$.next({\n ...this.state$.value,\n loading: false\n });\n }\n }\n\n public async loadMore(resource: string, options?: any): Promise<void> {\n const { loadingPage, isLastPage } = this.state$.getValue();\n if (loadingPage || isLastPage) {\n return;\n }\n\n const api = this.apis.find(x => x.resource === resource);\n if (!api) {\n return;\n }\n\n try {\n this.state$.next({\n ...this.state$.value,\n loadingPage: true\n });\n\n const { searchQuery, page, items } = this.state$.getValue();\n const result = await api.search(searchQuery, page, options);\n this.state$.next({\n ...this.state$.value,\n items: [...items, ...result.items],\n page: result.nextPage ? result.nextPage : this.state$.value.page,\n isLastPage: !result.nextPage\n });\n } catch {} finally {\n this.state$.next({\n ...this.state$.value,\n loadingPage: false\n });\n }\n }\n\n public getActive(): any {\n return this.state$.value.active;\n }\n\n public getInitialized(): boolean {\n return this.state$.value.initialized;\n }\n\n public setActive(entity: any | undefined): void {\n this.state$.next({\n ...this.state$.value,\n active: entity ?? null\n });\n }\n\n public async setActiveId(resource: string, id: any, options?: any): Promise<void> {\n if (!id) {\n return;\n }\n\n const api = this.apis.find(x => x.resource === resource);\n if (!api) {\n return;\n }\n\n try {\n this.state$.next({\n ...this.state$.value,\n loading: true\n });\n\n const entity = await api.getById(id, options);\n if (!entity) {\n return;\n }\n\n this.state$.next({\n ...this.state$.value,\n items: [entity],\n active: entity,\n page: 0,\n isLastPage: false\n });\n } catch {} finally {\n this.state$.next({\n ...this.state$.value,\n loading: false\n });\n }\n }\n\n public reloadActive(resource: string, options?: any): Promise<void> {\n return this.setActiveId(resource, this.state$.value.active?.id, options);\n }\n\n public reloadFilteredItems(): void {\n // TODO: Use a better way to trigger the items$ observable\n this.state$.next({\n ...this.state$.value\n });\n }\n\n public setFilterFn(filterFn: (value: any) => boolean | Promise<boolean> | Observable<boolean>): void {\n this.filteredItems$ = this.items$.pipe(mergeMap(items => {\n return from(Promise.all(items.map(async item => {\n const result = filterFn(item);\n\n const unwrappedResult = isObservable(result) ? await firstValueFrom(result) : await result;\n\n return [item, unwrappedResult];\n })));\n }\n ),\n map(items => items.filter(([item, keep]) => keep).map(([item, keep]) => item))\n );\n }\n\n public format(resource: string, item: string): string {\n const api = this.apis.find(x => x.resource === resource);\n if (!api) {\n return \"\";\n }\n\n return api.format(item);\n }\n}\n","import { BooleanInput, coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport {\n ChangeDetectorRef,\n Component,\n DoCheck,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional, Output,\n Self,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { ControlValueAccessor, FormControl, FormGroupDirective, NgControl, NgForm, Validators } from \"@angular/forms\";\nimport { MatAutocompleteActivatedEvent, MatAutocompleteSelectedEvent } from \"@angular/material/autocomplete\";\nimport { ErrorStateMatcher, MatOption, mixinErrorState } from \"@angular/material/core\";\nimport { MatFormFieldControl } from \"@angular/material/form-field\";\nimport { debounceTime, distinctUntilChanged, firstValueFrom, Observable, Subject, Subscription } from \"rxjs\";\nimport * as uuid from \"uuid\";\nimport { isNullOrUndefined } from \"../../utils\";\nimport { NiceTypeaheadNewValue } from \"../typeahead\";\nimport { NiceAsyncTypeaheadService } from \"./providers/async-typeahead.service\";\n\n// Boilerplate for applying mixins to ).\n/** @docs-private */\nconst _BaseAsyncTypeaheadComponent = mixinErrorState(\n class {\n /**\n * Emits whenever the component state changes and should cause the parent\n * form field to update. Implemented as part of `MatFormFieldControl`.\n * @docs-private\n */\n readonly stateChanges = new Subject<void>();\n\n constructor(\n public _defaultErrorStateMatcher: ErrorStateMatcher,\n public _parentForm: NgForm,\n public _parentFormGroup: FormGroupDirective,\n /**\n * Form control bound to the component.\n * Implemented as part of `MatFormFieldControl`.\n * @docs-private\n */\n public ngControl: NgControl\n ) {}\n }\n);\n\n@Component({\n selector: \"nice-async-typeahead\",\n templateUrl: \"async-typeahead.template.html\",\n styleUrls: [\"async-typeahead.style.scss\"],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: MatFormFieldControl,\n useExisting: NiceAsyncTypeaheadComponent\n },\n NiceAsyncTypeaheadService\n ]\n})\n// tslint:disable-next-line:max-line-length\nexport class NiceAsyncTypeaheadComponent extends _BaseAsyncTypeaheadComponent implements OnInit, OnDestroy, OnChanges, ControlValueAccessor, MatFormFieldControl<any>, DoCheck {\n public stateChanges = new Subject<void>();\n public controlType = \"remote-typeahead\";\n public focused = false;\n\n public searchControl = new FormControl(null);\n public valueChangesSub$: Subscription;\n public open = false;\n public panelWidth = 0;\n public activeOption: MatOption;\n\n public active$ = this.service.active$;\n\n @ViewChild(\"searchInput\")\n public input: ElementRef<HTMLInputElement>;\n\n @ViewChildren(MatOption)\n public options: MatOption[];\n\n @Input()\n public resource: string;\n\n @Input()\n public searchOptions: any;\n\n @Input()\n public preloadResource = false;\n\n @Input()\n public allowNotFoundItems = false;\n\n @Input()\n public panelClass: string | string[] = [];\n\n @Input()\n public bindValue = \"id\";\n\n @Input()\n public bindLabel: string;\n\n @Input()\n public placeholder: string;\n\n @Input()\n public emptyPlaceholder: string;\n\n @Input()\n public optionTemplate: TemplateRef<HTMLElement>;\n\n @Input()\n public filterFn: (value: any) => boolean | Promise<boolean> | Observable<boolean>;\n\n @Output()\n public selected = new EventEmitter<any>();\n\n @Input()\n public set labelFormatFn(labelFormatFn: (item: any) => string) {\n this._labelFormatFn = labelFormatFn;\n }\n private _labelFormatFn: (item: any) => string;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n public set disabled(value: BooleanInput) {\n this._disabled = coerceBooleanProperty(value);\n\n if (this._disabled) {\n this.searchControl.disable({ emitEvent: false });\n } else {\n this.searchControl.enable({ emitEvent: false });\n }\n\n // Browsers may not fire the blur event if the input is disabled too quickly.\n // Reset from here to ensure that the element doesn't become stuck.\n if (this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n\n this.changeDetectorRef.detectChanges();\n }\n\n public get disabled(): boolean {\n if (this.ngControl && this.ngControl.disabled !== null) {\n return this.ngControl.disabled;\n }\n return this._disabled;\n }\n protected _disabled = false;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n public set value(value: any) {\n if (value !== this._value) {\n this._value = value;\n this.propagate(value);\n this.stateChanges.next();\n this.selected.emit(value);\n }\n }\n public get value(): string {\n return this._value;\n }\n private _value: any;\n\n /**\n * Implemented as part of MatFormFieldControl.\n * @docs-private\n */\n @Input()\n public set required(value: BooleanInput) {\n this._required = coerceBooleanProperty(value);\n }\n public get required(): boolean {\n return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n }\n protected _required: boolean | undefined;\n\n @HostBinding(\"class.floating\")\n public get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n\n @HostBinding()\n public id: string = uuid.v4();\n\n @HostBinding(\"attr.aria-describedby\")\n public describedBy = \"\";\n\n public get empty(): boolean {\n return (\n (!this.searchControl.value || !this.searchControl.value.length) &&\n (!this._value || (typeof this._value === \"string\" && !this._value.length))\n );\n }\n\n public get initialized(): boolean {\n return this.service.getInitialized();\n }\n\n public propagate: (value: string) => void = () => {};\n\n constructor(\n @Optional() @Self() ngControl: NgControl,\n @Optional() parentForm: NgForm,\n @Optional() parentFormGroup: FormGroupDirective,\n defaultErrorStateMatcher: ErrorStateMatcher,\n private ngZone: NgZone,\n private changeDetectorRef: ChangeDetectorRef,\n public service: NiceAsyncTypeaheadService,\n ) {\n super(defaultErrorStateMatcher, parentForm, parentFormGroup, ngControl);\n\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n public ngOnInit(): void {\n if (this.ngControl) {\n if (this.ngControl.disabled) {\n this.searchControl.disable({ emitEvent: false });\n }\n\n this.ngControl.statusChanges.subscribe((status) => {\n this.disabled = status === \"DISABLED\";\n if (this._disabled) {\n this.searchControl.disable({ emitEvent: false });\n } else {\n this.searchControl.enable({ emitEvent: false });\n }\n });\n }\n\n if (this.filterFn) {\n this.service.setFilterFn(this.filterFn);\n }\n\n if (this.searchControl) {\n this.valueChangesSub$ = this.searchControl.valueChanges.pipe(debounceTime(500), distinctUntilChanged()).subscribe(text => {\n if (typeof text !== \"string\") {\n return;\n }\n\n this.service.search(this.resource, text, this.searchOptions);\n });\n }\n\n if (this.preloadResource) {\n this.service.search(this.resource, \"\", this.searchOptions);\n }\n }\n\n public ngOnDestroy(): void {\n this.valueChangesSub$.unsubscribe();\n }\n\n public ngOnChanges(changes: SimpleChanges) {\n if (\"searchOptions\" in changes) {\n const change = changes.searchOptions;\n if (!change.isFirstChange() && change.currentValue !== change.previousValue) {\n this.service.search(this.resource, \"\", change.currentValue).then(() => this.checkIfValueStillExist());\n }\n }\n\n if (\"filterFn\" in changes) {\n const change = changes.filterFn;\n if (!change.isFirstChange() && change.currentValue !== change.previousValue) {\n this.service.setFilterFn(change.currentValue);\n }\n }\n\n this.stateChanges.next();\n }\n\n public ngDoCheck(): void {\n if (this.ngControl) {\n this.updateErrorState();\n }\n }\n\n public async writeValue(value: any): Promise<void> {\n if (this._value === value || (isNullOrUndefined(this._value) && isNullOrUndefined(value))) {\n return;\n }\n\n if (!value && this._value !== value) {\n this.onRemove(null);\n return;\n }\n\n if (value instanceof NiceTypeaheadNewValue) {\n this.updateSearchInput();\n return;\n } else {\n await this.service.setActiveId(this.resource, value, this.searchOptions).then(() => this.updateSearchInput());\n }\n\n this.value = value;\n }\n\n public registerOnChange(propagate: (value: string) => void): void {\n this.propagate = propagate;\n }\n\n public registerOnTouched(fn: any): void {\n // NO-OP\n }\n\n public onContainerClick(event: MouseEvent): void {\n this.stateChanges.next();\n }\n\n public setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(\" \");\n }\n\n public getActive<T = any>(): T {\n return this.service.getActive();\n }\n\n public onOptionActivated(event: MatAutocompleteActivatedEvent): void {\n this.activeOption = event.option;\n }\n\n public onOptionSelected(event: MatAutocompleteSelectedEvent): void {\n if (event.option.id === \"new-value-option\") {\n this.value = new NiceTypeaheadNewValue(this.searchControl.value);\n } else {\n this.updateLabel(event.option.value);\n this.service.setActive(event.option.value);\n this.value = this.bindValue ? this.getObjectItem(this.bindValue, event.option.value) : event.option.value;\n }\n }\n\n public updateState(open: boolean): void {\n this.open = open;\n\n if (!this.open) {\n this.ngZone.run(() => {\n this.focusChanged(false);\n this.changeDetectorRef.markForCheck();\n });\n }\n\n if (this.open && !this.initialized) {\n this.service.initialize(this.resource, this.searchOptions);\n }\n\n if (!this.open && this.ngControl) {\n this.ngControl.control.markAsTouched();\n }\n\n if (!this.open) {\n this.activeOption = null;\n if (!this._value && this.searchControl.value) {\n this.onRemove();\n }\n }\n }\n\n public onRemove(event?: Event, reload = true): void {\n if (event) {\n // event.stopPropagation();\n }\n if (this.disabled) {\n return;\n }\n this.service.setActive(null);\n this.value = null;\n this.searchControl.patchValue(null);\n if (this.ngControl?.control) {\n this.ngControl.control.markAsTouched();\n }\n this.stateChanges.next();\n\n if (reload) {\n this.service.search(this.resource, \"\", this.searchOptions);\n }\n }\n\n public formatLabel(item: any): string {\n if (this._labelFormatFn) {\n return this._labelFormatFn(item);\n }\n\n if (this.bindLabel) {\n return this.getObjectItem(this.bindLabel, item);\n }\n\n if (typeof item !== \"string\") {\n return this.service.format(this.resource, item);\n }\n\n return item;\n }\n\n public onEndScroll(): void {\n this.service.loadMore(this.resource, this.searchOptions);\n }\n\n public focusChanged(isFocused: boolean) {\n if (isFocused !== this.focused) {\n this.focused = isFocused;\n this.stateChanges.next();\n\n if (isFocused && this.filterFn) {\n this.service.reloadFilteredItems();\n }\n }\n }\n\n public async reloadActive(): Promise<void> {\n await this.service?.reloadActive(this.resource, this.searchOptions);\n const active = this.service?.getActive();\n this.updateLabel(active);\n }\n\n private updateLabel(item: unknown | string): void {\n if (!item) {\n return;\n }\n\n const label = this.formatLabel(item);\n\n if (label && label !== this.searchControl.value) {\n this.searchControl.patchValue(label, { emitEvent: false });\n }\n }\n\n private getObjectItem(key: string, obj: object): any {\n const keys = key.split(\".\");\n let item = obj;\n for (const k of keys) {\n if (!item) {\n return item;\n }\n\n if (!item.hasOwnProperty(k)) {\n return item;\n }\n item = item[k];\n }\n\n return item;\n }\n\n private updateSearchInput(): void {\n if (this._value instanceof NiceTypeaheadNewValue) {\n this.updateLabel(this._value.$new);\n return;\n }\n\n const active = this.service.getActive();\n if (active) {\n this.updateLabel(active);\n return;\n }\n }\n\n private async checkIfValueStillExist(): Promise<void> {\n if (this._value instanceof NiceTypeaheadNewValue) {\n return;\n }\n\n const items = await firstValueFrom(this.service.filteredItems$);\n const item = items.find(\n v => (this.bindValue && typeof v === \"object\" ? this.getObjectItem(this.bindValue, v) : v) === this._value\n );\n if (item) {\n return;\n }\n\n if (this._value !== null && this._value !== undefined) {\n this.onRemove(null);\n }\n }\n}\n","<ng-container *ngIf=\"{ loading: service.loading$ | async, loadingPage: service.loadingPage$ | async, values: service.filteredItems$ | async } as ctx\">\n <div class=\"flex\" *ngIf=\"!disabled; else disable\">\n <input\n #searchInput\n matInput\n class=\"flex-auto\"\n type=\"text\"\n name=\"mat-autocomplete\"\n [disabled]=\"$any(disabled)\"\n [placeholder]=\"placeholder\"\n [formControl]=\"searchControl\"\n [matAutocomplete]=\"auto\"\n [required]=\"$any(required)\"\n (focus)=\"focusChanged(true)\"\n />\n <mat-icon *ngIf=\"value && !ctx.loading\" matSuffix class=\"close-button secondary-text\" (click)=\"onRemove($event)\">\n close\n </mat-icon>\n\n <mat-spinner class=\"self-center\" [diameter]=\"16\" *ngIf=\"ctx.loading\"></mat-spinner>\n </div>\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n [panelWidth]=\"panelWidth\"\n [class]=\"panelClass\"\n (optionActivated)=\"onOptionActivated($event)\"\n (optionSelected)=\"onOptionSelected($event)\"\n (closed)=\"updateState(false)\"\n (opened)=\"updateState(true)\"\n (optionsScroll)=\"onEndScroll()\"\n autoActiveFirstOption\n >\n <mat-progress-bar *ngIf=\"open && ctx.loading\" mode=\"indeterminate\" color=\"primary\"></mat-progress-bar>\n <mat-option *ngFor=\"let option of ctx.values\" [value]=\"option\">\n <ng-container\n *ngIf=\"optionTemplate; else format\"\n [ngTemplateOutlet]=\"optionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: option }\">\n </ng-container>\n <ng-template #format>\n {{ formatLabel(option) }}\n </ng-template>\n </mat-option>\n <mat-option *ngIf=\"!ctx.values?.length && !allowNotFoundItems\" disabled>\n <ng-container *ngIf=\"emptyPlaceholder; else defaultEmptyPlaceholder\">\n {{ emptyPlaceholder }}\n </ng-container>\n <ng-template #defaultEmptyPlaceholder>\n {{ \"components.typeahead.no_item_found\" | translate }}\n </ng-template>\n </mat-option>\n <mat-option *ngIf=\"!ctx.values?.length && allowNotFoundItems\" id=\"new-value-option\" [value]=\"searchControl.value\">\n <span class=\"italic\">{{ searchControl.value }}</span>\n </mat-option>\n <mat-progress-bar *ngIf=\"open && ctx.loadingPage\" mode=\"indeterminate\" color=\"primary\"></mat-progress-bar>\n </mat-autocomplete>\n</ng-container>\n\n<ng-template #disable>\n <input\n matInput\n class=\"disabled-input\"\n type=\"text\"\n [disabled]=\"true\"\n [placeholder]=\"placeholder\"\n [formControl]=\"searchControl\"\n [required]=\"$any(required)\"\n />\n</ng-template>\n","import { CommonModule } from \"@angular/common\";\nimport { ModuleWithProviders, NgModule, Type } from \"@angular/core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { MatAutocompleteModule } from \"@angular/material/autocomplete\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatInputModule } from \"@angular/material/input\";\nimport { MatProgressBarModule } from \"@angular/material/progress-bar\";\nimport { MatProgressSpinnerModule } from \"@angular/material/progress-spinner\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { OptionScrollModule } from \"../typeahead/directives/options-scroll.module\";\n\nimport { NiceAsyncTypeaheadComponent } from \"./async-typeahead.component\";\nimport { NICE_ASYNC_TYPEAHEAD_PROVIDER } from \"./async-typeahead.constant\";\nimport { NiceAsyncTypeaheadProvider } from \"./providers/async-typeahead.provider\";\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n OptionScrollModule,\n MatInputModule,\n MatAutocompleteModule,\n MatIconModule,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n TranslateModule\n ],\n declarations: [NiceAsyncTypeaheadComponent],\n providers: [],\n exports: [NiceAsyncTypeaheadComponent]\n})\nexport class NiceAsyncTypeaheadModule {\n public static register(providers: Type<NiceAsyncTypeaheadProvider<any, any>>[]): ModuleWithProviders<NiceAsyncTypeaheadModule> {\n return {\n ngModule: NiceAsyncTypeaheadModule,\n providers: providers.map(x => ({\n provide: NICE_ASYNC_TYPEAHEAD_PROVIDER,\n useClass: x,\n multi: true\n }))\n };\n }\n}\n","import { CdkStepper } from \"@angular/cdk/stepper\";\nimport { Component, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output, ViewChild } from \"@angular/core\";\nimport { ControlValueAccessor, FormGroup } from \"@angular/forms\";\nimport { GeneratedFormGroup } from \"@recursyve/ngx-form-generator\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { KeyboardCodes } from \"../../utils\";\n\n@Component({\n template: ``\n})\nexport abstract class NiceBaseFormComponent<Form> implements OnInit, OnDestroy, ControlValueAccessor {\n @ViewChild(CdkStepper)\n private stepper: CdkStepper;\n\n @Input()\n public loading = false;\n\n // tslint:disable-next-line:no-output-native\n @Output()\n public submit = new EventEmitter<Form>();\n\n protected unsubscribeAll$ = new Subject<void>();\n\n private propagate: (form: Form) => void = () => {};\n\n constructor(public formGroup: GeneratedFormGroup<Form>) {}\n\n @HostListener(\"keyup\", [\"$event\"])\n public onChange(event: KeyboardEvent): void {\n if (event) {\n if (event.code === KeyboardCodes.Enter) {\n this.clickSubmit();\n }\n }\n }\n\n public ngOnInit(): void {\n this.formGroup.valueChanges.pipe(takeUntil(this.unsubscribeAll$)).subscribe(() => {\n this.onValueChange(this.formGroup.getRawValue());\n });\n }\n\n public ngOnDestroy(): void {\n this.unsubscribeAll$?.next();\n this.unsubscribeAll$?.complete();\n }\n\n public registerOnChange(fn: (form: Form) => void): void {\n this.propagate = fn;\n }\n\n public registerOnTouched(fn: (form: Form) => void): void {\n // NO-OP\n }\n\n public writeValue(form: Form): void {\n if (form) {\n this.formGroup.patchValue(form);\n }\n }\n\n public clickSubmit(): void {\n if (!this.validate()) {\n return;\n }\n this.submit.emit(this.formGroup.getRawValue());\n }\n\n public clickNext(index: number): void {\n this.validateStep(index);\n if (this.stepper) {\n this.stepper.next();\n }\n }\n\n public clickPrevious(): void {\n if (this.stepper) {\n this.stepper.previous();\n }\n }\n\n protected onValueChange(value: Form): void {\n this.propagate(value);\n }\n\n public validate(): boolean {\n if (this.formGroup.valid) {\n return true;\n }\n this.formGroup.markAllAsTouched();\n return false;\n }\n\n protected validateStep(index: number): boolean {\n const group = this.getCurrentStepGroup(index);\n if (group?.valid) {\n return true;\n }\n group?.markAllAsTouched();\n return false;\n }\n\n protected getCurrentStepGroup(index: number): FormGroup | null {\n return null;\n }\n}\n","import { Directive, HostListener, Input } from \"@angular/core\";\nimport { NiceBaseFormComponent } from \"./base-form.component\";\n\n@Directive({ selector: \"[niceFormSubmit]\" })\nexport class NiceFormSubmitDirective {\n @Input()\n public form: NiceBaseFormComponent<any>;\n\n @HostListener(\"click\")\n public onClick(): void {\n this.form.clickSubmit();\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NiceFormSubmitDirective } from \"./form-submit.directive\";\n\n@NgModule({\n declarations: [NiceFormSubmitDirective],\n exports: [NiceFormSubmitDirective]\n})\nexport class NiceBaseFormModule {}\n","export class NiceBaseForm<T, Dto> {\n\n constructor(value?: Partial<T>) {\n if (!value) {\n return;\n }\n Object.assign(this, value);\n }\n\n public toDto(): Dto {\n return {\n ...this\n } as any;\n }\n}\n","import { BooleanInput, coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport { Component, HostBinding, Input, OnChanges, SimpleChanges, ViewEncapsulation } from \"@angular/core\";\nimport { niceAnimations } from \"../../animations\";\nimport { NiceCardFace } from \"./card.types\";\n\n@Component({\n selector: \"nice-card\",\n templateUrl: \"./card.component.html\",\n encapsulation: ViewEncapsulation.None,\n animations: niceAnimations,\n exportAs: \"niceCard\"\n})\nexport class NiceCardComponent implements OnChanges {\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_expanded: BooleanInput;\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_flippable: BooleanInput;\n\n @Input()\n public expanded = false;\n\n @Input()\n public face: NiceCardFace = \"front\";\n\n @Input()\n public flippable = false;\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Host binding for component classes\n */\n @HostBinding(\"class\")\n public get classList(): any {\n return {\n \"nice-card-expanded\": this.expanded,\n \"nice-card-face-back\": this.flippable && this.face === \"back\",\n \"nice-card-face-front\": this.flippable && this.face === \"front\",\n \"nice-card-flippable\": this.flippable\n };\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On changes\n */\n public ngOnChanges(changes: SimpleChanges): void {\n // Expanded\n if (\"expanded\" in changes) {\n // Coerce the value to a boolean\n this.expanded = coerceBooleanProperty(changes.expanded.currentValue);\n }\n\n // Flippable\n if (\"flippable\" in changes) {\n // Coerce the value to a boolean\n this.flippable = coerceBooleanProperty(changes.flippable.currentValue);\n }\n }\n}\n","<!-- Flippable card -->\n<ng-container *ngIf=\"flippable\">\n <!-- Front -->\n <div class=\"nice-card-front\">\n <ng-content select=\"[niceCardFront]\"></ng-content>\n </div>\n\n <!-- Back -->\n <div class=\"nice-card-back\">\n <ng-content select=\"[niceCardBack]\"></ng-content>\n </div>\n</ng-container>\n\n<!-- Normal card -->\n<ng-container *ngIf=\"!flippable\">\n <!-- Content -->\n <ng-content></ng-content>\n\n <!-- Expansion -->\n <div\n class=\"nice-card-expansion\"\n *ngIf=\"expanded\"\n [@expandCollapse]>\n <ng-content select=\"[niceCardExpansion]\"></ng-content>\n </div>\n</ng-container>\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { NiceCardComponent } from \"./card.component\";\n\n@NgModule({\n imports: [\n CommonModule\n ],\n declarations: [\n NiceCardComponent\n ],\n exports: [\n NiceCardComponent\n ]\n})\nexport class NiceCardModule {\n}\n","import { Component, ViewEncapsulation } from \"@angular/core\";\n\n@Component({\n encapsulation: ViewEncapsulation.None,\n selector: \"nice-picture-modal\",\n styleUrls: [\"picture-modal.style.scss\"],\n templateUrl: \"picture-modal.template.html\"\n})\nexport class PictureModalComponent {\n public picture: string;\n}\n","<div class=\"overlay-content\">\n <img [src]=\"picture\" />\n</div>\n","import { Overlay } from \"@angular/cdk/overlay\";\nimport { ComponentPortal } from \"@angular/cdk/portal\";\nimport { Injectable } from \"@angular/core\";\nimport { PictureModalComponent } from \"./picture-modal.component\";\n\nexport interface PictureModalConfig {\n picture?: string;\n}\n\n@Injectable()\nexport class PictureModalService {\n constructor(private overlay: Overlay) {}\n\n public open(config: PictureModalConfig) {\n const positionStrategy = this.overlay\n .position()\n .global()\n .centerHorizontally()\n .centerVertically();\n\n const overlayRef = this.overlay.create({\n backdropClass: \"cdk-overlay-dark-backdrop\",\n hasBackdrop: true,\n positionStrategy,\n scrollStrategy: this.overlay.scrollStrategies.block(),\n });\n\n const pictureModalPortal = new ComponentPortal(PictureModalComponent);\n const pictureModalRef = overlayRef.attach(pictureModalPortal);\n\n pictureModalRef.instance.picture = config.picture;\n\n overlayRef.backdropClick().subscribe(() => overlayRef.dispose());\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"carouselLayout\" })\nexport class CarouselLayoutPipe implements PipeTransform {\n public transform(value: \"row\" | \"column\", direction: \"ltr\" | \"rtl\" | \"utd\" | \"dtu\"): string {\n if (value === \"row\") {\n return direction === \"rtl\" ? \"flex-row-reverse\" : \"flex-row\";\n }\n return direction === \"utd\" ? \"flex-col\" : \"flex-col-reverse\";\n }\n}\n","import { Component, EventEmitter, Input, Output, ViewEncapsulation } from \"@angular/core\";\nimport { PictureModalService } from \"./picture-modal/picture-modal.service\";\n\nexport interface Picture {\n id: number;\n url: string;\n}\n\n@Component({\n selector: \"nice-carousel\",\n templateUrl: \"carousel.template.html\",\n styleUrls: [\"./carousel.style.scss\"],\n encapsulation: ViewEncapsulation.None\n})\nexport class CarouselComponent {\n public currentImages: Picture[];\n\n @Input()\n public set images(urls: Picture[]) {\n this.currentImages = urls;\n }\n\n @Input()\n public direction: \"ltr\" | \"rtl\" | \"utd\" | \"dtu\" = \"ltr\";\n\n @Input()\n public layout: \"row\" | \"column\" = \"row\";\n\n @Input()\n public editable = false;\n\n @Output()\n public delete = new EventEmitter<Picture>();\n\n constructor(private pictureModalService: PictureModalService) {}\n\n public clickView(picture: Picture) {\n this.pictureModalService.open({\n picture: picture.url\n });\n }\n\n public clickDelete(picture: Picture) {\n this.delete.emit(picture);\n }\n}\n","<div class=\"slides-container\">\n <div class=\"slides flex\" [ngClass]=\"layout | carouselLayout: direction\">\n <div class=\"slide\" *ngFor=\"let image of currentImages\">\n <img [src]=\"image?.url\" (click)=\"clickView(image)\"/>\n <i class=\"fad fa-times-circle remove-button\" (click)=\"clickDelete(image)\" *ngIf=\"editable\"></i>\n </div>\n </div>\n</div>\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatCardModule } from \"@angular/material/card\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { CarouselComponent } from \"./carousel.component\";\nimport { PictureModalComponent } from \"./picture-modal\";\nimport { PictureModalService } from \"./picture-modal\";\nimport { CarouselLayoutPipe } from \"./pipe/carousel-layout.pipe\";\n\n@NgModule({\n imports: [\n CommonModule,\n MatCardModule,\n MatButtonModule,\n TranslateModule,\n MatIconModule\n ],\n exports: [CarouselComponent],\n declarations: [CarouselComponent, PictureModalComponent, CarouselLayoutPipe],\n entryComponents: [PictureModalComponent],\n providers: [PictureModalService]\n})\nexport class NiceCarouselModule {}\n","import { Injectable } from \"@angular/core\";\nimport { BehaviorSubject } from \"rxjs\";\n\n@Injectable()\nexport class NiceDateRangePickerServiceService {\n public allowClear$ = new BehaviorSubject(true);\n\n public setAllowClear(allowClear: boolean): void {\n this.allowClear$.next(allowClear);\n }\n}\n","import { ChangeDetectionStrategy, Component } from \"@angular/core\";\nimport { DateAdapter } from \"@angular/material/core\";\nimport { MatDateRangePicker } from \"@angular/material/datepicker\";\nimport { NiceDateRangePickerServiceService } from \"../../providers/date-range-picker.service\";\n\nconst customPresets = [\n \"today\",\n \"last_7_days\",\n \"this_week\",\n \"this_month\",\n \"this_year\",\n \"last_week\",\n \"last_month\",\n \"last_year\",\n];\n\ntype CustomPreset = typeof customPresets[number];\n\n@Component({\n selector: \"nice-range-preset\",\n templateUrl: \"range-preset.template.html\",\n styleUrls: [\"range-preset.style.scss\"],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RangePresetComponent<D> {\n public readonly customPresets = customPresets;\n public readonly allowClear$ = this.service.allowClear$;\n\n constructor(\n private dateAdapter: DateAdapter<D>,\n private picker: MatDateRangePicker<D>,\n private service: NiceDateRangePickerServiceService\n ) {}\n\n public clearRange(): void {\n this.picker.select(null);\n this.picker.select(null);\n this.picker.close();\n }\n\n public selectRange(rangeName: CustomPreset): void {\n const [start, end] = this.calculateDateRange(rangeName);\n this.picker.select(start);\n this.picker.select(end);\n this.picker.close();\n }\n\n private calculateDateRange(rangeName: CustomPreset): [start: D, end: D] {\n const today = this.today;\n const year = this.dateAdapter.getYear(today);\n\n switch (rangeName) {\n case \"today\":\n return [today, today];\n case \"last_7_days\": {\n const start = this.dateAdapter.addCalendarDays(today, -6);\n return [start, today];\n }\n case \"this_week\": {\n return this.calculateWeek(today);\n }\n case \"this_month\": {\n return this.calculateMonth(today);\n }\n case \"this_year\": {\n const start = this.dateAdapter.createDate(year, 0, 1);\n const end = this.dateAdapter.createDate(year, 11, 31);\n return [start, end];\n }\n case \"last_week\": {\n const thisDayLastWeek = this.dateAdapter.addCalendarDays(today, -7);\n return this.calculateWeek(thisDayLastWeek);\n }\n case \"last_month\": {\n const thisDayLastMonth = this.dateAdapter.addCalendarMonths(today, -1);\n return this.calculateMonth(thisDayLastMonth);\n }\n case \"last_year\": {\n const start = this.dateAdapter.createDate(year - 1, 0, 1);\n const end = this.dateAdapter.createDate(year - 1, 11, 31);\n return [start, end];\n }\n default:\n return null;\n }\n }\n\n private calculateMonth(forDay: D): [start: D, end: D] {\n const year = this.dateAdapter.getYear(forDay);\n const month = this.dateAdapter.getMonth(forDay);\n const start = this.dateAdapter.createDate(year, month, 1);\n const end = this.dateAdapter.addCalendarDays(\n start,\n this.dateAdapter.getNumDaysInMonth(forDay) - 1\n );\n return [start, end];\n }\n\n private calculateWeek(forDay: D): [start: D, end: D] {\n const deltaStart = this.dateAdapter.getFirstDayOfWeek() - this.dateAdapter.getDayOfWeek(forDay);\n const start = this.dateAdapter.addCalendarDays(forDay, deltaStart);\n const end = this.dateAdapter.addCalendarDays(start, 6);\n return [start, end];\n }\n\n private get today(): D {\n const today = this.dateAdapter.getValidDateOrNull(new Date());\n if (today === null) {\n throw new Error(\"date creation failed\");\n }\n return today;\n }\n}\n","<mat-card class=\"mat-elevation-z3\">\n <button\n *ngIf=\"allowClear$ | async\"\n mat-button\n (click)=\"clearRange()\"\n >\n {{ \"nice_ui_kit.date_range_picker.clear\" | translate }}\n </button>\n\n <button\n *ngFor=\"let item of customPresets\"\n mat-button\n (click)=\"selectRange(item)\"\n >\n {{ \"nice_ui_kit.date_range_picker.presets.\" + item | translate }}\n </button>\n</mat-card>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, OnDestroy } from \"@angular/core\";\nimport { DateAdapter, MAT_DATE_FORMATS, MatDateFormats } from \"@angular/material/core\";\nimport { MatCalendar } from \"@angular/material/datepicker\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\n\n@Component({\n templateUrl: \"header.template.html\",\n styleUrls: [\"header.style.scss\"],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class HeaderComponent<D> implements OnDestroy {\n private readonly destroy$ = new Subject<void>();\n\n public toggled = false;\n\n constructor(\n private calendar: MatCalendar<D>,\n private dateAdapter: DateAdapter<D>,\n @Inject(MAT_DATE_FORMATS) private dateFormats: MatDateFormats,\n cdr: ChangeDetectorRef\n ) {\n calendar.stateChanges\n .pipe(takeUntil(this.destroy$))\n .subscribe(() => cdr.markForCheck());\n }\n\n public get periodLabel(): string {\n return this.dateAdapter\n .format(this.calendar.activeDate, this.dateFormats.display.monthYearLabel)\n .toLocaleUpperCase();\n }\n\n public previousClicked(mode: \"month\" | \"year\"): void {\n this.changeDate(mode, -1);\n }\n\n public nextClicked(mode: \"month\" | \"year\"): void {\n this.changeDate(mode, 1);\n }\n\n private changeDate(mode: \"month\" | \"year\", amount: -1 | 1): void {\n this.calendar.activeDate =\n mode === \"month\"\n ? this.dateAdapter.addCalendarMonths(this.calendar.activeDate, amount)\n : this.dateAdapter.addCalendarYears(this.calendar.activeDate, amount);\n }\n\n public clickOptions() {\n this.toggled = !this.toggled;\n }\n\n public ngOnDestroy(): void {\n this.destroy$.next();\n }\n}\n","<div class=\"hidden md:block\" fxHide.lt-md>\n <nice-range-preset></nice-range-preset>\n</div>\n<div class=\"block md:hidden\">\n <ng-container *ngIf=\"toggled\">\n <nice-range-preset></nice-range-preset>\n </ng-container>\n</div>\n\n<div class=\"header\">\n <button\n fxHide.gt-md\n mat-icon-button\n (click)=\"clickOptions()\"\n >\n <mat-icon>sort</mat-icon>\n </button>\n <button\n mat-icon-button\n class=\"double-arrow\"\n (click)=\"previousClicked('year')\"\n >\n <mat-icon>keyboard_arrow_left</mat-icon>\n <mat-icon>keyboard_arrow_left</mat-icon>\n </button>\n <button mat-icon-button (click)=\"previousClicked('month')\">\n <mat-icon>keyboard_arrow_left</mat-icon>\n </button>\n\n <span class=\"header-label\">{{ periodLabel }}</span>\n\n <button mat-icon-button (click)=\"nextClicked('month')\">\n <mat-icon>keyboard_arrow_right</mat-icon>\n </button>\n <button\n mat-icon-button\n class=\"double-arrow\"\n (click)=\"nextClicked('year')\"\n >\n <mat-icon>keyboard_arrow_right</mat-icon>\n <mat-icon>keyboard_arrow_right</mat-icon>\n </button>\n</div>\n","import { DatePipe } from \"@angular/common\";\nimport { Pipe, PipeTransform } from \"@angular/core\";\nimport { TranslateService } from \"@ngx-translate/core\";\n\n@Pipe({ name: \"localizedDate\" })\nexport class LocalizedDatePipe implements PipeTransform {\n constructor(private readonly translateService: TranslateService) {}\n\n public transform(value: any, pattern: string = \"mediumDate\", fallbackWithNull = false, timeZone?: string): string {\n if (pattern === \"mediumDateWithoutYear\") {\n pattern = this.getMediumDateWithoutYearPattern();\n }\n\n const datePipe: DatePipe = new DatePipe(this.translateService.currentLang, timeZone);\n\n if (value instanceof Date) {\n if (isNaN(value.getTime())) {\n return fallbackWithNull ? null : this.translateService.instant(\"general.not_available\");\n }\n }\n\n if (value && value !== \"0000-00-00\") {\n return datePipe.transform(value, pattern);\n } else {\n return fallbackWithNull ? null : this.translateService.instant(\"general.not_available\");\n }\n }\n\n private getMediumDateWithoutYearPattern(): string {\n if (this.translateService.defaultLang === \"fr\") {\n return \"d MMMM\";\n }\n return \"MMMM d\";\n }\n}\n","import { Component, forwardRef, Input, OnInit, ViewChild, ViewEncapsulation } from \"@angular/core\";\nimport { ControlValueAccessor, FormControl, FormGroup, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { MatDateRangePicker } from \"@angular/material/datepicker\";\nimport subDays from \"date-fns/subDays\";\nimport { HeaderComponent } from \"./components/header/header.component\";\n\nexport interface NiceDateRangePickerValue {\n from: Date;\n to: Date;\n}\n\n@Component({\n selector: \"nice-date-range-picker\",\n templateUrl: \"date-range-picker.template.html\",\n styleUrls: [\"date-range-picker.style.scss\"],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NiceDateRangePickerComponent),\n multi: true\n }\n ]\n})\nexport class NiceDateRangePickerComponent implements OnInit, ControlValueAccessor {\n public readonly HeaderComponent = HeaderComponent;\n\n @ViewChild(MatDateRangePicker)\n private picker: MatDateRangePicker<any>;\n\n @Input()\n public min = subDays(new Date(), 3);\n\n @Input()\n public max = new Date();\n\n @Input()\n public nowIsMax = true;\n\n @Input()\n public allowClear = true;\n\n public formGroup = new FormGroup({\n from: new FormControl(),\n to: new FormControl()\n });\n public now = new Date();\n public value: NiceDateRangePickerValue;\n\n private propage: (value: NiceDateRangePickerValue) => void;\n\n public ngOnInit(): void {\n this.value = {\n from: this.min,\n to: this.max\n };\n this.formGroup.patchValue(this.value);\n\n this.formGroup.valueChanges.subscribe((_) => {\n this.value = this.formGroup.getRawValue();\n this.propage?.(this.value);\n });\n }\n\n public writeValue(value: NiceDateRangePickerValue): void {\n this.value = value;\n this.formGroup.patchValue(this.value);\n }\n\n public registerOnChange(fn: (value: NiceDateRangePickerValue) => void): void {\n this.propage = fn;\n }\n\n public registerOnTouched(fn: any): void {}\n}\n","<div class=\"nice-date-picker-container\">\n <div class=\"nice-date-picker-header\">\n <div class=\"from-to\">\n <ng-container *ngIf=\"value.from\">\n {{ value.from | localizedDate: \"longDate\" }}\n </ng-container>\n <ng-container *ngIf=\"value.to\">\n <div class=\"separator\">-</div>\n {{ value.to | localizedDate: \"longDate\" }}\n </ng-container>\n </div>\n </div>\n\n <mat-date-range-input [formGroup]=\"formGroup\" [max]=\"nowIsMax ? now : null\" [rangePicker]=\"picker\">\n <input formControlName=\"from\" class=\"hidden-input\" matStartDate placeholder=\"Start date\">\n <input formControlName=\"to\" class=\"hidden-input\" matEndDate placeholder=\"End date\">\n </mat-date-range-input>\n\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n\n <mat-date-range-picker\n [calendarHeaderComponent]=\"HeaderComponent\"\n #picker\n ></mat-date-range-picker>\n</div>\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { TranslateService } from \"@ngx-translate/core\";\n\n@Pipe({ name: \"boolean\" })\nexport class BooleanPipe implements PipeTransform {\n constructor(private readonly translateService: TranslateService) {}\n\n public transform(value: any): string {\n if (typeof value !== \"boolean\") {\n return \"\";\n }\n\n return this.translateService.instant(value ? \"general.yes\" : \"general.no\");\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { isNullOrUndefined } from \"../utils/type.utils\";\n\n@Pipe({ name: \"capitalizeFirstLetter\" })\nexport class CapitalizeFirstLetterPipe implements PipeTransform {\n public transform(value: string): string {\n if (isNullOrUndefined(value)) {\n return value;\n }\n\n return value.charAt(0).toUpperCase() + value.slice(1);\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"ceil\" })\nexport class CeilPipe implements PipeTransform {\n public transform(input: number) {\n return Math.ceil(input);\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"entries\" })\nexport class EntriesPipe implements PipeTransform {\n public transform<Value>(value: Value): { key: keyof Value, value: any }[] {\n const keys: { key: keyof Value, value: any }[] = [];\n\n for (const key in value) {\n if (value.hasOwnProperty(key)) {\n keys.push({\n key,\n value: value[key]\n });\n }\n }\n\n return keys;\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"findByKey\" })\nexport class FindByKeyPipe implements PipeTransform {\n public transform<ArrayType, ValueType>(array: ArrayType[], value: ValueType, key = \"id\"): ArrayType {\n return (array ?? []).find((v) => v?.[key] === value);\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"firstLetter\" })\nexport class FirstLetterPipe implements PipeTransform {\n public transform(value: string): string {\n return value?.[0];\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"floor\" })\nexport class FloorPipe implements PipeTransform {\n public transform(input: number) {\n return Math.floor(input);\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"join\" })\nexport class JoinPipe implements PipeTransform {\n public transform(array: any[], separator = \" \", prop?: string): string {\n if (!array?.length) {\n return \"general.not_available\";\n }\n\n if (!prop) {\n return array.filter(x => x).join(separator);\n }\n return array.filter(x => x).map(x => x[prop]).join(separator);\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { UrlUtils } from \"../utils/url.utils\";\n\n@Pipe({ name: \"link\" })\nexport class LinkPipe implements PipeTransform {\n public transform(value: string, type: \"mailto\"): string;\n public transform(value: { phoneNumber: string, extension?: string }, type: \"tel\"): string;\n public transform(value: { address: string, postalCode: string }, type: \"direction\"): string;\n public transform(value: any, type: \"mailto\" | \"tel\" | \"direction\"): string {\n if (!value) {\n return;\n }\n\n switch (type) {\n case \"mailto\":\n return UrlUtils.emailUrl(value);\n case \"tel\":\n return UrlUtils.phoneCallUrl(value.phoneNumber, value.extension);\n case \"direction\":\n return UrlUtils.directionUrl(value.address, value.postalCode);\n }\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { TranslateService } from \"@ngx-translate/core\";\n\n@Pipe({ name: \"localizedBoolean\" })\nexport class LocalizedBooleanPipe implements PipeTransform {\n constructor(private readonly translateService: TranslateService) {}\n\n public transform(value: boolean): any {\n return this.translateService.instant(`general.bool_${value}`);\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { CurrencyPipe } from \"@angular/common\";\nimport { TranslateService } from \"@ngx-translate/core\";\n\n@Pipe({ name: \"localizedCurrency\" })\nexport class LocalizedCurrencyPipe extends CurrencyPipe implements PipeTransform {\n constructor(private readonly translateService: TranslateService) {\n super(translateService.currentLang);\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { TranslateService } from \"@ngx-translate/core\";\nimport { LocalizedDatePipe } from \"./localized-date.pipe\";\n\n@Pipe({ name: \"localizedDateOnly\" })\nexport class LocalizedDateOnlyPipe implements PipeTransform {\n constructor(private readonly translateService: TranslateService) {}\n\n public transform(value: any, pattern: string = \"mediumDate\", fallbackWithNull = false): string {\n const pipe = new LocalizedDatePipe(this.translateService);\n return pipe.transform(value, pattern, fallbackWithNull, \"UTC\");\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n// Formats minutes in hh:mm format.\n@Pipe({ name: \"minutesToTime\" })\nexport class MinutesToTimePipe implements PipeTransform {\n public transform(totalMinutes: number, separator: string = \":\"): string {\n const hours = `${Math.floor(totalMinutes / 60)}`.padStart(2, \"0\");\n const minutes = `${Math.floor(totalMinutes % 60)}`.padStart(2, \"0\");\n return `${hours}${separator}${minutes}`;\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"numberToOrdinalIndicator\" })\nexport class NumberToOrdinalIndicatorPipe implements PipeTransform {\n public transform(value: number): string {\n switch (value) {\n case 1:\n return \"general.first\";\n case 2:\n return \"general.second\";\n case 3:\n return \"general.third\";\n default:\n return \"general.xth\";\n }\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"pad\" })\nexport class PadPipe implements PipeTransform {\n public transform(value: number | string, length: number, direction: \"start\" | \"end\" = \"start\", maxLength = 2, fillString = \"0\"): string {\n const strValue = typeof value === \"number\" ? `${value}` : value;\n switch (direction) {\n case \"start\":\n return strValue.padStart(maxLength, fillString);\n case \"end\":\n return strValue.padEnd(maxLength, fillString);\n }\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { MaskApplierService } from \"ngx-mask\";\n\n@Pipe({ name: \"phone\" })\nexport class PhonePipe implements PipeTransform {\n constructor(private maskApplierService: MaskApplierService) {}\n\n public transform(rawPhoneNumber: string, extension?: string): string {\n const formattedPhoneNumber = this.maskApplierService.applyMask(rawPhoneNumber, \"(000) 000-0000\");\n if (!extension) {\n return formattedPhoneNumber;\n }\n\n return `${formattedPhoneNumber} #${extension}`;\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\nimport { MaskApplierService } from \"ngx-mask\";\n\n@Pipe({ name: \"postalCode\" })\nexport class PostalCodePipe implements PipeTransform {\n constructor(private maskApplierService: MaskApplierService) {}\n\n public transform(postalCode: string): string {\n if (postalCode) {\n return this.maskApplierService.applyMask(postalCode, \"S0S 0S0\");\n }\n return \"\";\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"round\" })\nexport class RoundPipe implements PipeTransform {\n public transform(input: number) {\n return Math.round(input);\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n@Pipe({ name: \"range\" })\nexport class RangePipe implements PipeTransform {\n public transform(value: number): number[] {\n const range: number[] = [];\n for (let i = 0; i < value; i++) {\n range.push(i);\n }\n return range;\n }\n}\n","import { Pipe, PipeTransform } from \"@angular/core\";\n\n// Formats seconds in hh:mm:ss format.\n@Pipe({ name: \"secondsToTime\" })\nexport class SecondsToTimePipe implements PipeTransform {\n public transform(value: number, separator = \":\"): string {\n const hours = `${Math.floor(value / 60 / 60)}`.padStart(2, \"0\");\n const minutes = `${Math.floor(value / 60 % 60)}`.padStart(2, \"0\");\n const seconds = `${Math.floor(value % 60)}`.padStart(2, \"0\");\n return `${hours}${separator}${minutes}${separator}${seconds}`;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({ name: \"sanitizeBypass\" })\nexport class SanitizeBypassPipe implements PipeTransform {\n constructor(private readonly sanitizer: DomSanitizer) {}\n\n public transform(value: any, bypass: \"html\" | \"style\"): any {\n switch (bypass) {\n case \"html\":\n return this.sanitizer.bypassSecurityTrustHtml(value || '');\n case \"style\":\n return this.sanitizer.bypassSecurityTrustStyle(value || '');\n }\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { EntriesPipe } from \"./entries.pipe\";\nimport { BooleanPipe } from \"./boolean.pipe\";\nimport { LocalizedDateOnlyPipe } from \"./localized-date-only.pipe\";\nimport { PostalCodePipe } from \"./postal-code.pipe\";\nimport { PhonePipe } from \"./phone.pipe\";\nimport { CeilPipe } from \"./ceil.pipe\";\nimport { FloorPipe } from \"./floor.pipe\";\nimport { RoundPipe } from \"./round.pipe\";\nimport { FindByKeyPipe } from \"./find-by-key.pipe\";\nimport { PadPipe } from \"./pad.pipe\";\nimport { LinkPipe } from \"./link.pipe\";\nimport { MinutesToTimePipe } from \"./minutes-to-time.pipe\";\nimport { NumberToOrdinalIndicatorPipe } from \"./number-to-ordinal-indicator.pipe\";\nimport { RangePipe } from \"./range.pipe\";\nimport { SecondsToTimePipe } from \"./seconds-to-time.pipe\";\nimport { LocalizedDatePipe } from \"./localized-date.pipe\";\nimport { LocalizedCurrencyPipe } from \"./localized-currency.pipe\";\nimport { CapitalizeFirstLetterPipe } from \"./capitalize-first-letter.pipe\";\nimport { JoinPipe } from \"./join-if-defined.pipe\";\nimport { SanitizeBypassPipe } from \"./sanitize-bypass.pipe\";\nimport { FirstLetterPipe } from \"./first-letter.pipe\";\nimport { LocalizedBooleanPipe } from \"./localized-boolean.pipe\";\n\n@NgModule({\n declarations: [\n BooleanPipe,\n CapitalizeFirstLetterPipe,\n CeilPipe,\n FindByKeyPipe,\n FirstLetterPipe,\n FloorPipe,\n JoinPipe,\n EntriesPipe,\n LinkPipe,\n LocalizedBooleanPipe,\n LocalizedCurrencyPipe,\n LocalizedDatePipe,\n LocalizedDateOnlyPipe,\n MinutesToTimePipe,\n NumberToOrdinalIndicatorPipe,\n PadPipe,\n PhonePipe,\n PostalCodePipe,\n RangePipe,\n RoundPipe,\n SanitizeBypassPipe,\n SecondsToTimePipe\n ],\n providers: [\n BooleanPipe,\n CapitalizeFirstLetterPipe,\n CeilPipe,\n FindByKeyPipe,\n FirstLetterPipe,\n FloorPipe,\n JoinPipe,\n EntriesPipe,\n LinkPipe,\n LocalizedBooleanPipe,\n LocalizedCurrencyPipe,\n LocalizedDatePipe,\n LocalizedDateOnlyPipe,\n MinutesToTimePipe,\n NumberToOrdinalIndicatorPipe,\n PadPipe,\n PhonePipe,\n PostalCodePipe,\n RangePipe,\n RoundPipe,\n SanitizeBypassPipe,\n SecondsToTimePipe\n ],\n exports: [\n BooleanPipe,\n CapitalizeFirstLetterPipe,\n CeilPipe,\n FindByKeyPipe,\n FirstLetterPipe,\n FloorPipe,\n JoinPipe,\n EntriesPipe,\n LinkPipe,\n LocalizedBooleanPipe,\n LocalizedCurrencyPipe,\n LocalizedDatePipe,\n LocalizedDateOnlyPipe,\n MinutesToTimePipe,\n NumberToOrdinalIndicatorPipe,\n PadPipe,\n PhonePipe,\n PostalCodePipe,\n RangePipe,\n RoundPipe,\n SanitizeBypassPipe,\n SecondsToTimePipe\n ]\n})\nexport class NicePipesModule {\n}\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { ReactiveFormsModule } from \"@angular/forms\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatCardModule } from \"@angular/material/card\";\nimport { MatDatepickerModule } from \"@angular/material/datepicker\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { NicePipesModule } from \"../../pipes\";\nimport { HeaderComponent } from \"./components/header/header.component\";\nimport { RangePresetComponent } from \"./components/range-preset/range-preset.component\";\nimport { NiceDateRangePickerComponent } from \"./date-range-picker.component\";\nimport { NiceDateRangePickerServiceService } from \"./providers/date-range-picker.service\";\n\n@NgModule({\n imports: [\n CommonModule,\n MatDatepickerModule,\n MatFormFieldModule,\n MatCardModule,\n MatButtonModule,\n MatIconModule,\n TranslateModule,\n ReactiveFormsModule,\n NicePipesModule\n ],\n declarations: [NiceDateRangePickerComponent, RangePresetComponent, HeaderComponent],\n providers: [NiceDateRangePickerServiceService],\n exports: [NiceDateRangePickerComponent]\n})\nexport class NiceDateRangePickerModule {}\n","import { Injectable } from \"@angular/core\";\nimport { NiceDrawerComponent } from \"./drawer.component\";\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class NiceDrawerService {\n private _componentRegistry: Map<string, NiceDrawerComponent> = new Map<string, NiceDrawerComponent>();\n\n /**\n * Constructor\n */\n constructor() {}\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Register drawer component\n */\n registerComponent(name: string, component: NiceDrawerComponent): void\n {\n this._componentRegistry.set(name, component);\n }\n\n /**\n * Deregister drawer component\n */\n deregisterComponent(name: string): void\n {\n this._componentRegistry.delete(name);\n }\n\n /**\n * Get drawer component from the registry\n */\n getComponent(name: string): NiceDrawerComponent | undefined\n {\n return this._componentRegistry.get(name);\n }\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const NICE_APP_CONFIG = new InjectionToken<any>(\"NICE_APP_CONFIG\");\n","import { Inject, Injectable } from \"@angular/core\";\nimport { merge } from \"lodash-es\";\nimport { BehaviorSubject, Observable } from \"rxjs\";\nimport { NICE_APP_CONFIG } from \"./config.constants\";\nimport { NiceConfig } from \"./config.model\";\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class NiceConfigService {\n private _config: BehaviorSubject<any>;\n\n /**\n * Constructor\n */\n constructor(@Inject(NICE_APP_CONFIG) config: NiceConfig) {\n // Private\n this._config = new BehaviorSubject(config);\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Setter & getter for config\n */\n public set config(value: NiceConfig) {\n // Merge the new config over to the current config\n const config = merge({}, this._config.getValue(), value);\n\n // Execute the observable\n this._config.next(config);\n }\n\n public get config$(): Observable<NiceConfig> {\n return this._config.asObservable();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Resets the config to the default\n */\n public reset(): void {\n // Set the config\n this._config.next(this.config);\n }\n}\n","import { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { NICE_APP_CONFIG } from \"./config.constants\";\nimport { NiceConfig } from \"./config.model\";\nimport { NiceConfigService } from \"./config.service\";\n\n@NgModule()\nexport class NiceConfigModule {\n /**\n * Constructor\n */\n constructor(private _niceConfigService: NiceConfigService) {\n }\n\n /**\n * forRoot method for setting user configuration\n */\n public static forRoot(config: NiceConfig): ModuleWithProviders<NiceConfigModule> {\n return {\n ngModule: NiceConfigModule,\n providers: [\n {\n provide: NICE_APP_CONFIG,\n useValue: config\n }\n ]\n };\n }\n}\n","import { BreakpointObserver, Breakpoints, BreakpointState } from \"@angular/cdk/layout\";\nimport { Injectable } from \"@angular/core\";\nimport { Observable, ReplaySubject, startWith, tap } from \"rxjs\";\nimport { map } from \"rxjs/operators\";\n\n@Injectable()\nexport class NiceMediaWatcherService {\n private _onMediaChange = new ReplaySubject<{ matchingAliases: string[], matchingQueries: any }>(1);\n private _currentBreakpoints: { [key: string]: boolean };\n private _breakpoint$: Observable<BreakpointState>;\n\n public xsBreakpointActive$ = this.onMediaQueryChange$(Breakpoints.XSmall).pipe(\n startWith({ matches: false }),\n map((x) => x.matches)\n );\n public smBreakpointActive$ = this.onMediaQueryChange$(Breakpoints.Small).pipe(\n startWith({ matches: false }),\n map((x) => x.matches)\n );\n public mdBreakpointActive$ = this.onMediaQueryChange$(Breakpoints.Medium).pipe(\n startWith({ matches: false }),\n map((x) => x.matches)\n );\n public lgBreakpointActive$ = this.onMediaQueryChange$(Breakpoints.Large).pipe(\n startWith({ matches: false }),\n map((x) => x.matches)\n );\n public xlBreakpointActive$ = this.onMediaQueryChange$(Breakpoints.XLarge).pipe(\n startWith({ matches: false }),\n map((x) => x.matches)\n );\n\n /**\n * Constructor\n */\n constructor(private _breakpointObserver: BreakpointObserver) {\n this._breakpoint$ = this.onMediaQueryChange$([\n Breakpoints.XSmall,\n Breakpoints.Small,\n Breakpoints.Medium,\n Breakpoints.Large,\n Breakpoints.XLarge\n ]).pipe(\n tap((res) => this._currentBreakpoints = res.breakpoints)\n );\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On media query change\n */\n public onMediaQueryChange$(query: string | string[]): Observable<BreakpointState> {\n return this._breakpointObserver.observe(query);\n }\n\n public asObservable(): Observable<BreakpointState> {\n return this._breakpoint$;\n }\n\n public isActive(query: string | string[]): boolean {\n if (typeof query === \"string\") {\n query = [query];\n }\n\n for (const q of query) {\n if (this.isBreakpointActive(q)) {\n return true;\n }\n }\n\n return false;\n }\n\n private isBreakpointActive(breakpoint: string): boolean {\n if (breakpoint.startsWith(\"gt-\")) {\n switch (breakpoint.replace(\"gt-\", \"\")) {\n case \"xs\":\n return this._currentBreakpoints[Breakpoints.Small]\n || this._currentBreakpoints[Breakpoints.Medium]\n || this._currentBreakpoints[Breakpoints.Large]\n || this._currentBreakpoints[Breakpoints.XLarge];\n case \"sm\":\n return this._currentBreakpoints[Breakpoints.Medium]\n || this._currentBreakpoints[Breakpoints.Large]\n || this._currentBreakpoints[Breakpoints.XLarge];\n case \"md\":\n return this._currentBreakpoints[Breakpoints.Large]\n || this._currentBreakpoints[Breakpoints.XLarge];\n case \"lg\":\n return this._currentBreakpoints[Breakpoints.XLarge];\n }\n }\n\n if (breakpoint.startsWith(\"lt-\")) {\n switch (breakpoint.replace(\"lt-\", \"\")) {\n case \"sm\":\n return this._currentBreakpoints[Breakpoints.XSmall];\n case \"md\":\n return this._currentBreakpoints[Breakpoints.XSmall]\n || this._currentBreakpoints[Breakpoints.Small];\n case \"lg\":\n return this._currentBreakpoints[Breakpoints.XSmall]\n || this._currentBreakpoints[Breakpoints.Small]\n || this._currentBreakpoints[Breakpoints.Medium];\n case \"xl\":\n return this._currentBreakpoints[Breakpoints.XSmall]\n || this._currentBreakpoints[Breakpoints.Small]\n || this._currentBreakpoints[Breakpoints.Medium]\n || this._currentBreakpoints[Breakpoints.Large];\n }\n }\n\n switch (breakpoint) {\n case \"xs\":\n return this._currentBreakpoints[Breakpoints.XSmall];\n case \"sm\":\n return this._currentBreakpoints[Breakpoints.Small];\n case \"md\":\n return this._currentBreakpoints[Breakpoints.Medium];\n case \"lg\":\n return this._currentBreakpoints[Breakpoints.Large];\n case \"xl\":\n return this._currentBreakpoints[Breakpoints.XLarge];\n }\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NiceMediaWatcherService } from \"./media-watcher.service\";\n\n@NgModule({\n providers: [\n NiceMediaWatcherService\n ]\n})\nexport class NiceMediaWatcherModule {\n /**\n * Constructor\n */\n constructor(private _niceMediaWatcherService: NiceMediaWatcherService) {}\n}\n","import { DOCUMENT } from \"@angular/common\";\nimport { Inject, Injectable } from \"@angular/core\";\nimport { NavigationEnd, Router } from \"@angular/router\";\nimport { filter, take } from \"rxjs/operators\";\n\n@Injectable()\nexport class NiceSplashScreenService {\n /**\n * Constructor\n */\n constructor(\n @Inject(DOCUMENT) private _document: any,\n private _router: Router\n ) {\n // Hide it on the first NavigationEnd event\n this._router.events\n .pipe(\n filter(event => event instanceof NavigationEnd),\n take(1)\n )\n .subscribe(() => {\n this.hide();\n });\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Show the splash screen\n */\n public show(): void {\n this._document.body.classList.remove(\"nice-splash-screen-hidden\");\n }\n\n /**\n * Hide the splash screen\n */\n public hide(): void {\n this._document.body.classList.add(\"nice-splash-screen-hidden\");\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NiceSplashScreenService } from \"./splash-screen.service\";\n\n@NgModule({\n providers: [\n NiceSplashScreenService\n ]\n})\nexport class NiceSplashScreenModule {\n /**\n * Constructor\n */\n constructor(private _niceSplashScreenService: NiceSplashScreenService) {}\n}\n","import { animate, AnimationBuilder, AnimationPlayer, style } from \"@angular/animations\";\nimport { BooleanInput, coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n SimpleChanges,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { NiceUtilsService } from \"../../providers\";\nimport { NiceDrawerService } from \"./drawer.service\";\nimport { NiceDrawerMode, NiceDrawerPosition } from \"./drawer.types\";\n\n@Component({\n selector: \"nice-drawer\",\n templateUrl: \"./drawer.component.html\",\n styleUrls: [\"./drawer.theme.scss\"],\n encapsulation: ViewEncapsulation.None,\n exportAs: \"niceDrawer\"\n})\nexport class NiceDrawerComponent implements OnChanges, OnInit, OnDestroy {\n // tslint:disable-next-line:variable-name\n static ngAcceptInputType_fixed: BooleanInput;\n // tslint:disable-next-line:variable-name\n static ngAcceptInputType_opened: BooleanInput;\n // tslint:disable-next-line:variable-name\n static ngAcceptInputType_transparentOverlay: BooleanInput;\n\n @Input()\n public fixed = false;\n\n @Input()\n public mode: NiceDrawerMode = \"side\";\n\n @Input()\n public width: string | number = 320;\n\n @Input()\n public name: string = this._niceUtilsService.randomId();\n\n @Input()\n public opened = false;\n\n @Input()\n public position: NiceDrawerPosition = \"left\";\n\n @Input()\n public transparentOverlay = false;\n\n @Output()\n private readonly fixedChanged: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n @Output()\n private readonly modeChanged: EventEmitter<NiceDrawerMode> = new EventEmitter<NiceDrawerMode>();\n\n @Output()\n private readonly openedChanged: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n @Output()\n private readonly positionChanged: EventEmitter<NiceDrawerPosition> = new EventEmitter<NiceDrawerPosition>();\n\n private _animationsEnabled = false;\n private _hovered = false;\n private _overlay: HTMLElement;\n private _player: AnimationPlayer;\n\n /**\n * Constructor\n */\n constructor(\n private _animationBuilder: AnimationBuilder,\n private _elementRef: ElementRef,\n private _renderer2: Renderer2,\n private _niceDrawerService: NiceDrawerService,\n private _niceUtilsService: NiceUtilsService\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Host binding for component classes\n */\n @HostBinding(\"class\")\n public get classList(): any {\n return {\n \"nice-drawer-animations-enabled\": this._animationsEnabled,\n \"nice-drawer-fixed\": this.fixed,\n \"nice-drawer-hover\": this._hovered,\n [`nice-drawer-mode-${this.mode}`]: true,\n \"nice-drawer-opened\": this.opened,\n [`nice-drawer-position-${this.position}`]: true\n };\n }\n\n /**\n * Host binding for component inline styles\n */\n @HostBinding(\"style\")\n public get styleList(): any {\n const width = typeof this.width === \"number\" ? `${this.width}px` : this.width;\n const dynamicStyle = {\n \"width\": width,\n \"min-width\": width,\n \"max-width\": width\n };\n\n if (this.mode === \"side\") {\n dynamicStyle[`margin-${this.position}`] = this.opened ? 0 : `-${width}`;\n }\n\n return dynamicStyle;\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Decorated methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On mouseenter\n *\n * @private\n */\n @HostListener(\"mouseenter\")\n private _onMouseenter(): void {\n // Enable the animations\n this._enableAnimations();\n\n // Set the hovered\n this._hovered = true;\n }\n\n /**\n * On mouseleave\n *\n * @private\n */\n @HostListener(\"mouseleave\")\n private _onMouseleave(): void {\n // Enable the animations\n this._enableAnimations();\n\n // Set the hovered\n this._hovered = false;\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On changes\n *\n * @param changes\n */\n public ngOnChanges(changes: SimpleChanges): void {\n // Fixed\n if (\"fixed\" in changes) {\n // Coerce the value to a boolean\n this.fixed = coerceBooleanProperty(changes.fixed.currentValue);\n\n // Execute the observable\n this.fixedChanged.next(this.fixed);\n }\n\n // Mode\n if (\"mode\" in changes) {\n // Get the previous and current values\n const previousMode = changes.mode.previousValue;\n const currentMode = changes.mode.currentValue;\n\n // Disable the animations\n this._disableAnimations();\n\n // If the mode changes: 'over -> side'\n if (previousMode === \"over\" && currentMode === \"side\") {\n // Hide the overlay\n this._hideOverlay();\n }\n\n // If the mode changes: 'side -> over'\n if (previousMode === \"side\" && currentMode === \"over\") {\n // If the drawer is opened\n if (this.opened) {\n // Show the overlay\n this._showOverlay();\n }\n }\n\n // Execute the observable\n this.modeChanged.next(currentMode);\n\n // Enable the animations after a delay\n // The delay must be bigger than the current transition-duration\n // to make sure nothing will be animated while the mode is changing\n setTimeout(() => {\n this._enableAnimations();\n }, 500);\n }\n\n // Opened\n if (\"opened\" in changes) {\n // Coerce the value to a boolean\n const open = coerceBooleanProperty(changes.opened.currentValue);\n\n // Open/close the drawer\n this._toggleOpened(open);\n }\n\n // Position\n if (\"position\" in changes) {\n // Execute the observable\n this.positionChanged.next(this.position);\n }\n\n // Transparent overlay\n if (\"transparentOverlay\" in changes) {\n // Coerce the value to a boolean\n this.transparentOverlay = coerceBooleanProperty(changes.transparentOverlay.currentValue);\n }\n }\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Register the drawer\n this._niceDrawerService.registerComponent(this.name, this);\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Finish the animation\n if (this._player) {\n this._player.finish();\n }\n\n // Deregister the drawer from the registry\n this._niceDrawerService.deregisterComponent(this.name);\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Open the drawer\n */\n public open(): void {\n // Return if the drawer has already opened\n if (this.opened) {\n return;\n }\n\n // Open the drawer\n this._toggleOpened(true);\n }\n\n /**\n * Close the drawer\n */\n public close(): void {\n // Return if the drawer has already closed\n if (!this.opened) {\n return;\n }\n\n // Close the drawer\n this._toggleOpened(false);\n }\n\n /**\n * Toggle the drawer\n */\n public toggle(): void {\n if (this.opened) {\n this.close();\n } else {\n this.open();\n }\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Enable the animations\n *\n * @private\n */\n private _enableAnimations(): void {\n // Return if the animations are already enabled\n if (this._animationsEnabled) {\n return;\n }\n\n // Enable the animations\n this._animationsEnabled = true;\n }\n\n /**\n * Disable the animations\n *\n * @private\n */\n private _disableAnimations(): void {\n // Return if the animations are already disabled\n if (!this._animationsEnabled) {\n return;\n }\n\n // Disable the animations\n this._animationsEnabled = false;\n }\n\n /**\n * Show the backdrop\n *\n * @private\n */\n private _showOverlay(): void {\n // Create the backdrop element\n this._overlay = this._renderer2.createElement(\"div\");\n\n // Return if overlay couldn't be create for some reason\n if (!this._overlay) {\n return;\n }\n\n // Add a class to the backdrop element\n this._overlay.classList.add(\"nice-drawer-overlay\");\n\n // Add a class depending on the fixed option\n if (this.fixed) {\n this._overlay.classList.add(\"nice-drawer-overlay-fixed\");\n }\n\n // Add a class depending on the transparentOverlay option\n if (this.transparentOverlay) {\n this._overlay.classList.add(\"nice-drawer-overlay-transparent\");\n }\n\n // Append the backdrop to the parent of the drawer\n this._renderer2.appendChild(this._elementRef.nativeElement.parentElement, this._overlay);\n\n // Create the enter animation and attach it to the player\n this._player = this._animationBuilder.build([\n style({opacity: 0}),\n animate(\"300ms cubic-bezier(0.25, 0.8, 0.25, 1)\", style({opacity: 1}))\n ]).create(this._overlay);\n\n // Once the animation is done...\n this._player.onDone(() => {\n\n // Destroy the player\n this._player.destroy();\n this._player = null;\n });\n\n // Play the animation\n this._player.play();\n\n // Add an event listener to the overlay\n this._overlay.addEventListener(\"click\", () => {\n this.close();\n });\n }\n\n /**\n * Hide the backdrop\n *\n * @private\n */\n private _hideOverlay(): void {\n if (!this._overlay) {\n return;\n }\n\n // Create the leave animation and attach it to the player\n this._player = this._animationBuilder.build([\n animate(\"300ms cubic-bezier(0.25, 0.8, 0.25, 1)\", style({opacity: 0}))\n ]).create(this._overlay);\n\n // Play the animation\n this._player.play();\n\n // Once the animation is done...\n this._player.onDone(() => {\n\n // Destroy the player\n this._player.destroy();\n this._player = null;\n\n // If the backdrop still exists...\n if (this._overlay) {\n // Remove the backdrop\n this._overlay.parentNode.removeChild(this._overlay);\n this._overlay = null;\n }\n });\n }\n\n /**\n * Open/close the drawer\n *\n * @param open\n * @private\n */\n private _toggleOpened(open: boolean): void {\n // Set the opened\n this.opened = open;\n\n // Enable the animations\n this._enableAnimations();\n\n // If the mode is 'over'\n if (this.mode === \"over\") {\n // If the drawer opens, show the overlay\n if (open) {\n this._showOverlay();\n }\n // Otherwise, close the overlay\n else {\n this._hideOverlay();\n }\n }\n\n // Execute the observable\n this.openedChanged.next(open);\n }\n}\n","<div class=\"nice-drawer-toggle\">\n <ng-content select=\"[niceDrawerToggle]\"></ng-content>\n</div>\n\n<div class=\"nice-drawer-content\" [style.visibility]=\"opened ? 'visible' : 'hidden'\">\n <ng-content></ng-content>\n</div>\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { NiceDrawerComponent } from \"./drawer.component\";\n\n@NgModule({\n imports: [\n CommonModule,\n MatIconModule\n ],\n declarations: [\n NiceDrawerComponent\n ],\n exports: [\n NiceDrawerComponent\n ]\n})\nexport class NiceDrawerModule {\n}\n","import { Injectable } from \"@angular/core\";\nimport { ExportStrategy } from \"../models/export-strategy.model\";\n\n@Injectable()\nexport abstract class ExportBottomSheetService {\n public abstract getStrategyIcon(strategy: ExportStrategy): string;\n}\n\n@Injectable()\nexport class DefaultExportBottomSheetService extends ExportBottomSheetService {\n public getStrategyIcon(strategy: ExportStrategy): string {\n switch (strategy.type) {\n case \"xlsx\":\n return \"fas fa-file-excel\";\n case \"pdf\":\n return \"fas fa-file-pdf\";\n case \"csv\":\n return \"fas fa-file-csv\";\n }\n return \"\";\n }\n}\n","import { Component, Inject } from \"@angular/core\";\nimport { MatBottomSheetRef, MAT_BOTTOM_SHEET_DATA } from \"@angular/material/bottom-sheet\";\nimport { ExportStrategy } from \"./models/export-strategy.model\";\nimport { ExportBottomSheetService } from \"./providers/export-bottom-sheet.service\";\n\nexport interface ExportBottomSheetConfig {\n exportStrategies: ExportStrategy[];\n}\n\n@Component({\n selector: \"nice-export-bottom-sheet\",\n templateUrl: \"export-bottom-sheet.template.html\"\n})\nexport class ExportBottomSheetComponent {\n constructor(\n @Inject(MAT_BOTTOM_SHEET_DATA) public exportBottomSheetConfig: ExportBottomSheetConfig,\n private bottomSheetRef: MatBottomSheetRef<ExportBottomSheetComponent>,\n private service: ExportBottomSheetService\n ) {}\n\n public getStrategyIcon(strategy: ExportStrategy): string {\n return this.service.getStrategyIcon(strategy);\n }\n\n public clickExport(strategy: ExportStrategy) {\n this.bottomSheetRef.dismiss();\n strategy.onClickExport();\n }\n}\n","<mat-nav-list>\n <a *ngFor=\"let strategy of exportBottomSheetConfig.exportStrategies\" mat-list-item (click)=\"clickExport(strategy)\">\n <i [ngClass]=\"getStrategyIcon(strategy)\" mat-list-icon></i>\n <span mat-line>{{ (\"components.export_bottom_sheet.types.\" + strategy.type) | translate }}</span>\n </a>\n</mat-nav-list>\n","import { CommonModule } from \"@angular/common\";\nimport { ModuleWithProviders, NgModule, Type } from \"@angular/core\";\nimport { MatBottomSheetModule } from \"@angular/material/bottom-sheet\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatListModule } from \"@angular/material/list\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { ExportBottomSheetComponent } from \"./export-bottom-sheet.component\";\nimport { DefaultExportBottomSheetService, ExportBottomSheetService } from \"./providers/export-bottom-sheet.service\";\n\nexport interface ExportBottomSheetOptions {\n service: Type<ExportBottomSheetService>;\n}\n\n@NgModule({\n imports: [CommonModule, MatBottomSheetModule, MatListModule, MatIconModule, TranslateModule],\n declarations: [ExportBottomSheetComponent],\n providers: [\n {\n provide: ExportBottomSheetService,\n useClass: DefaultExportBottomSheetService\n }\n ],\n exports: [ExportBottomSheetComponent]\n})\nexport class NiceExportBottomSheetModule {\n public static forFeature(options: ExportBottomSheetOptions): ModuleWithProviders<NiceExportBottomSheetModule> {\n return {\n ngModule: NiceExportBottomSheetModule,\n providers: [\n {\n provide: ExportBottomSheetService,\n useClass: options.service\n }\n ]\n };\n }\n}\n","import { Component, Input } from \"@angular/core\";\nimport { animate, style, transition, trigger } from \"@angular/animations\";\n\n@Component({\n // tslint:disable-next-line:components-selector component-selector\n selector: \"[form-error]\",\n template: `\n <div [@animation]=\"increment\" *ngIf=\"message\">\n <mat-error>\n {{ message }}\n </mat-error>\n </div>\n `,\n animations: [\n trigger(\"animation\", [\n transition(\":increment\", [style({ opacity: 0 }), animate(\"200ms ease-in\", style({ opacity: 1 }))]),\n transition(\":enter\", [\n style({ opacity: 0, transform: \"translateY(-1rem)\" }),\n animate(\"200ms ease-in\", style({ opacity: 1, transform: \"translateY(0)\" }))\n ]),\n transition(\":leave\", [animate(\"200ms ease-out\", style({ opacity: 0, transform: \"translateY(-1rem)\" }))])\n ])\n ]\n})\nexport class NiceFormErrorComponent {\n public message: string;\n public increment = 0;\n\n @Input()\n public set error(value) {\n if (value) {\n if (this.message !== value) {\n this.increment++;\n }\n }\n this.message = value;\n }\n}\n","import { AfterViewInit, ComponentRef, Directive, ElementRef, ViewContainerRef } from \"@angular/core\";\nimport { NgControl } from \"@angular/forms\";\nimport { MatFormField } from \"@angular/material/form-field\";\nimport { TranslateService } from \"@ngx-translate/core\";\nimport { NiceFormErrorComponent } from \"./form-error.component\";\n\n@Directive({ selector: \"[niceControlStatus]\" })\nexport class NiceControlStatusDirective implements AfterViewInit {\n ref: ComponentRef<NiceFormErrorComponent>;\n control: NgControl;\n\n constructor(\n private el: ElementRef<HTMLElement>,\n private vcr: ViewContainerRef,\n private formField: MatFormField,\n private translateService: TranslateService\n ) {}\n\n public ngAfterViewInit() {\n this.control = this.formField._control.ngControl as NgControl;\n this.control.statusChanges.subscribe(() => this.onChange());\n }\n\n public onChange(): void {\n if (this.control.pending) {\n return;\n }\n\n if (this.control.invalid && this.control.touched) {\n for (const error in this.control.errors) {\n if (this.control.errors.hasOwnProperty(error)) {\n if (this.control.errors[error]) {\n let lastErrorKey = error;\n let param: any;\n if (error === \"pattern\") {\n lastErrorKey = this.control.errors[error].requiredPattern;\n }\n if (error === \"mask\") {\n lastErrorKey = this.control.errors[error].requiredMask;\n }\n if (error === \"minlength\" || error === \"maxlength\") {\n param = {\n value: this.control.errors[error].requiredLength\n };\n }\n if (error === \"min\") {\n param = {\n min: this.control.errors[error].min,\n actual: this.control.errors[error].actual\n };\n }\n if (error === \"max\") {\n param = {\n min: this.control.errors[error].max,\n actual: this.control.errors[error].actual\n };\n }\n\n if (typeof this.control.errors[error] === \"object\" && !param) {\n param = this.control.errors[error];\n }\n\n this.setError(this.translateService.instant(`errors.${lastErrorKey}`, param));\n break;\n }\n }\n }\n } else {\n this.setError(\"\");\n }\n }\n\n public setError(text: string): void {\n if (!this.ref) {\n this.ref = this.vcr.createComponent(NiceFormErrorComponent);\n this.el.nativeElement\n .getElementsByClassName(\"mat-form-field-wrapper\")\n .item(0)\n .getElementsByClassName(\"mat-form-field-subscript-wrapper\")\n .item(0)\n .appendChild(this.ref.location.nativeElement);\n }\n this.ref.instance.error = text;\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NiceFormErrorComponent } from \"./form-error.component\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { CommonModule } from \"@angular/common\";\nimport { NiceControlStatusDirective } from \"./control-status.directive\";\n\n@NgModule({\n imports: [CommonModule, MatFormFieldModule],\n declarations: [NiceFormErrorComponent, NiceControlStatusDirective],\n exports: [NiceFormErrorComponent, NiceControlStatusDirective],\n entryComponents: [NiceFormErrorComponent]\n})\nexport class NiceFormErrorModule {\n}\n","import {\n Component, EventEmitter, Output,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { CdkStep, CdkStepper } from \"@angular/cdk/stepper\";\nimport { animate, state, style, transition, trigger } from \"@angular/animations\";\n\n@Component({\n selector: \"nice-horizontal-stepper\",\n templateUrl: \"horizontal-stepper.template.html\",\n styleUrls: [\"./horizontal-stepper.style.scss\"],\n encapsulation: ViewEncapsulation.None,\n providers: [{ provide: CdkStepper, useExisting: NiceHorizontalStepperComponent }],\n animations: [trigger(\"stepTransition\", [\n state(\"previous\", style({ transform: \"translate3d(-100%, 0, 0)\", visibility: \"hidden\" })),\n state(\"current\", style({ transform: \"none\", visibility: \"visible\" })),\n state(\"next\", style({ transform: \"translate3d(100%, 0, 0)\", visibility: \"hidden\" })),\n transition(\"* => *\", animate(\"500ms cubic-bezier(0.35, 0, 0.25, 1)\"))\n ])]\n})\nexport class NiceHorizontalStepperComponent extends CdkStepper {\n @Output()\n private onStepperClick = new EventEmitter<number>();\n\n public onClick(step: CdkStep, index: number): void {\n step.select();\n this.onStepperClick.emit(index);\n }\n}\n","<section class=\"stepper-container\">\n <div class=\"flex justify-center content-center items-center\">\n <button\n class=\"step\"\n *ngFor=\"let step of steps; let i = index\"\n [ngClass]=\"{ 'active': selectedIndex === i }\"\n (click)=\"onClick(step, i)\"\n >\n </button>\n </div>\n <div class=\"mat-horizontal-content-container h-full\">\n <div *ngFor=\"let step of steps; let i = index\"\n class=\"mat-horizontal-stepper-content h-full\" role=\"tabpanel\"\n [@stepTransition]=\"_getAnimationDirection(i)\"\n [id]=\"_getStepContentId(i)\"\n [attr.aria-labelledby]=\"_getStepLabelId(i)\"\n [attr.aria-expanded]=\"selectedIndex === i\">\n <ng-container [ngTemplateOutlet]=\"step.content\"></ng-container>\n </div>\n </div>\n</section>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from \"@angular/core\";\nimport { CdkStep } from \"@angular/cdk/stepper\";\n\n@Component({\n selector: \"nice-step\",\n template: `<ng-template><ng-content></ng-content></ng-template>`,\n encapsulation: ViewEncapsulation.None,\n providers: [\n { provide: CdkStep, useExisting: NiceStepComponent }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NiceStepComponent extends CdkStep {}\n","import { NgModule } from \"@angular/core\";\nimport { NiceHorizontalStepperComponent } from \"./horizontal-stepper.component\";\nimport { CommonModule } from \"@angular/common\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { CdkStepperModule } from \"@angular/cdk/stepper\";\nimport { NiceStepComponent } from \"./step.component\";\n\n@NgModule({\n imports: [\n CommonModule,\n MatButtonModule,\n CdkStepperModule\n ],\n declarations: [NiceStepComponent, NiceHorizontalStepperComponent],\n exports: [NiceStepComponent, NiceHorizontalStepperComponent]\n})\nexport class NiceHorizontalStepperModule {}\n","/*\n * Hermite resize - fast image resize/resample using Hermite filter.\n * https://github.com/viliusle/Hermite-resize\n */\nexport function resizeCanvas(canvas: HTMLCanvasElement, width: number, height: number) {\n const width_source = canvas.width;\n const height_source = canvas.height;\n width = Math.round(width);\n height = Math.round(height);\n\n const ratio_w = width_source / width;\n const ratio_h = height_source / height;\n const ratio_w_half = Math.ceil(ratio_w / 2);\n const ratio_h_half = Math.ceil(ratio_h / 2);\n\n const ctx = canvas.getContext('2d');\n const img = ctx!.getImageData(0, 0, width_source, height_source);\n const img2 = ctx!.createImageData(width, height);\n const data = img.data;\n const data2 = img2.data;\n\n for (let j = 0; j < height; j++) {\n for (let i = 0; i < width; i++) {\n const x2 = (i + j * width) * 4;\n let weight = 0;\n let weights = 0;\n let weights_alpha = 0;\n let gx_r = 0;\n let gx_g = 0;\n let gx_b = 0;\n let gx_a = 0;\n const center_y = j * ratio_h;\n\n const xx_start = Math.floor(i * ratio_w);\n let xx_stop = Math.ceil((i + 1) * ratio_w);\n const yy_start = Math.floor(j * ratio_h);\n let yy_stop = Math.ceil((j + 1) * ratio_h);\n xx_stop = Math.min(xx_stop, width_source);\n yy_stop = Math.min(yy_stop, height_source);\n\n for (let yy = yy_start; yy < yy_stop; yy++) {\n const dy = Math.abs(center_y - yy) / ratio_h_half;\n const center_x = i * ratio_w;\n const w0 = dy * dy; // pre-calc part of w\n for (let xx = xx_start; xx < xx_stop; xx++) {\n const dx = Math.abs(center_x - xx) / ratio_w_half;\n const w = Math.sqrt(w0 + dx * dx);\n if (w >= 1) {\n // pixel too far\n continue;\n }\n // hermite filter\n weight = 2 * w * w * w - 3 * w * w + 1;\n const pos_x = 4 * (xx + yy * width_source);\n // alpha\n gx_a += weight * data[pos_x + 3];\n weights_alpha += weight;\n // colors\n if (data[pos_x + 3] < 255) {\n weight = weight * data[pos_x + 3] / 250;\n }\n gx_r += weight * data[pos_x];\n gx_g += weight * data[pos_x + 1];\n gx_b += weight * data[pos_x + 2];\n weights += weight;\n }\n }\n data2[x2] = gx_r / weights;\n data2[x2 + 1] = gx_g / weights;\n data2[x2 + 2] = gx_b / weights;\n data2[x2 + 3] = gx_a / weights_alpha;\n }\n }\n\n // clear and resize canvas\n canvas.width = width;\n canvas.height = height;\n\n // draw\n ctx!.putImageData(img2, 0, 0);\n return ctx;\n}\n","/**\n * Adapted from https://github.com/A-l-y-l-e/Alyle-UI/tree/10.5.3/src/lib/image-cropper\n */\n\nimport { normalizePassiveListenerOptions } from \"@angular/cdk/platform\";\nimport { ViewportRuler } from \"@angular/cdk/scrolling\";\nimport { DOCUMENT } from \"@angular/common\";\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter, HostBinding,\n Inject,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n ViewChild,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { Observable, Subject } from \"rxjs\";\nimport { take, takeUntil } from \"rxjs/operators\";\nimport { resizeCanvas } from \"./resize-canvas\";\n\nconst activeEventOptions = normalizePassiveListenerOptions({ passive: false });\n\n/** Image Cropper Config */\nexport class ImgCropperConfig {\n /** Cropper area width */\n width = 250;\n /** Cropper area height */\n height = 200;\n minWidth = 40;\n minHeight = 40;\n /** If this is not defined, the new image will be automatically defined. */\n type?: string;\n /** Background color( default: null), if is null in png is transparent but not in jpg. */\n fill?: string | null;\n /**\n * Set anti-aliased (default: true)\n * @deprecated this is not necessary as the cropper will automatically resize the image\n * to the best quality\n */\n antiAliased = true;\n autoCrop?: boolean;\n output?: ImgOutput | ImgResolution = ImgResolution.Default;\n /**\n * Zoom out until the entire image fits into the cropping area.\n * default: false\n */\n extraZoomOut?: boolean;\n /**\n * Emit event `error` if the file size in bytes for the limit.\n * Note: It only works when the image is received from the `<input>` event.\n */\n maxFileSize?: number | null;\n /**\n * Whether the cropper area will be round.\n * This implies that the cropper area will maintain its aspect ratio.\n * default: false\n */\n round?: boolean;\n /**\n * Whether the cropper area is resizable.\n * default: false\n */\n resizableArea?: boolean;\n /**\n * Keep the width and height of the growing area the same according\n * to `ImgCropperConfig.width` and `ImgCropperConfig.height`\n * default: false\n */\n keepAspectRatio?: boolean;\n /**\n * Whether the cropper area is responsive.\n * By default, the width and height of the cropper area is fixed,\n * so can use when the cropper area is larger than its container,\n * otherwise this will bring problems when cropping.\n */\n responsiveArea?: boolean;\n}\n\n/**\n * The output image\n * With this option you can resize the output image.\n * If `width` or `height` are 0, this will be set automatically.\n * Both cannot be 0.\n */\nexport interface ImgOutput {\n /**\n * The cropped image will be resized to this `width`.\n */\n width: number;\n /**\n * Cropped image will be resized to this `height`.\n */\n height: number;\n}\n\n/** Image output */\nexport enum ImgResolution {\n /**\n * The output image will be equal to the initial size of the cropper area.\n */\n Default,\n /** Just crop the image without resizing */\n OriginalImage\n}\n\n/** Image output */\nexport enum ImgCropperError {\n /** The loaded image exceeds the size limit set. */\n Size,\n /** The file loaded is not image. */\n Type,\n /** When the image has not been loaded. */\n Other\n}\n\nexport interface ImgCropperEvent {\n /** Cropped image data URL */\n dataURL?: string;\n name: string | null;\n /** Filetype */\n type?: string;\n /** Cropped area width */\n areaWidth: number;\n /** Cropped area height */\n areaHeight: number;\n /** Cropped image width */\n width: number;\n /** Cropped image height */\n height: number;\n /** Original Image data URL */\n originalDataURL?: string;\n scale: number;\n /** Current rotation in degrees */\n rotation: number;\n /** Size of the image in bytes */\n size: number;\n /** Scaled offset from the left edge of the image */\n left: number;\n /** Scaled offset from the top edge of the image */\n top: number;\n /**\n * Scaled offset from the left edge of the image to center of area\n * Can be used to set image position\n */\n xOrigin: number;\n /**\n * Scaled offset from the top edge of the image to center of area\n * Can be used to set image position\n */\n yOrigin: number;\n /** @deprecated Use `xOrigin & yOrigin` instead. */\n position?: {\n x: number\n y: number\n };\n}\n\nexport interface ImgCropperErrorEvent {\n name?: string;\n /** Size of the image in bytes */\n size: number;\n /** Filetype */\n type: string;\n /** Type of error */\n error: ImgCropperError;\n errorMsg?: string;\n}\n\ninterface ImgRect {\n x: number;\n y: number;\n xc: number;\n yc: number;\n /** transform with */\n wt: number;\n ht: number;\n}\n\nexport interface ImgCropperLoaderConfig {\n name?: string | null;\n /** Filetype */\n type?: string;\n /** Cropped area width */\n areaWidth?: number;\n /** Cropped area height */\n areaHeight?: number;\n /** Cropped image width */\n width?: number;\n /** Cropped image height */\n height?: number;\n /** Original Image data URL */\n originalDataURL: string;\n scale?: number;\n /** Current rotation in degrees */\n rotation?: number;\n /** Size of the image in bytes */\n size?: number;\n /** Offset from the left edge of the image to center of area */\n xOrigin?: number;\n /** Offset from the top edge of the image to center of area */\n yOrigin?: number;\n}\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n preserveWhitespaces: false,\n selector: \"nice-img-cropper, nice-image-cropper\",\n templateUrl: \"image-cropper.template.html\",\n styleUrls: [\"image-cropper.style.scss\"],\n encapsulation: ViewEncapsulation.None\n})\nexport class NiceImageCropperComponent implements OnInit, OnDestroy {\n static readonly и = \"NiceImageCropper\";\n\n private _currentLoadConfig?: ImgCropperLoaderConfig;\n\n /** Original image */\n private _img: HTMLImageElement;\n private offset?: {\n x: number\n y: number\n left: number\n top: number\n };\n private _scale?: number;\n private _scal3Fix?: number;\n private _minScale?: number;\n private _maxScale?: number;\n /** Initial config */\n private _configPrimary: ImgCropperConfig;\n private _config: ImgCropperConfig;\n private _imgRect: ImgRect = {} as any;\n private _rotation = 0;\n // private _sizeInBytes: number | null;\n private _isSliding: boolean;\n /** Keeps track of the last pointer event that was captured by the crop area. */\n private _lastPointerEvent: MouseEvent | TouchEvent | null;\n private _startPointerEvent: {\n x: number\n y: number\n } | null;\n public _primaryAreaWidth: number;\n public _primaryAreaHeight: number;\n\n public _absoluteScale: number;\n\n /**\n * When is loaded image\n * @internal\n */\n public _isLoadedImg: boolean;\n\n /** When is loaded image & ready for crop */\n public isLoaded: boolean;\n /** When the cropper is ready to be interacted */\n public isReady: boolean;\n public isCropped: boolean;\n\n @ViewChild(\"_imgContainer\", { static: true })\n private _imgContainer: ElementRef;\n\n @ViewChild(\"_area\", { read: ElementRef })\n private _areaRef: ElementRef;\n @ViewChild(\"_imgCanvas\", { static: true })\n private _imgCanvas: ElementRef<HTMLCanvasElement>;\n\n @Input()\n public set config(val: ImgCropperConfig) {\n this._config = mergeDeep({}, new ImgCropperConfig(), val);\n this._configPrimary = mergeDeep({}, this._config);\n this._primaryAreaWidth = this.config.width;\n this._primaryAreaHeight = this.config.height;\n if (\n this._config.round\n && this.config.width !== this.config.height\n ) {\n throw new Error(`${NiceImageCropperComponent.и}: Both width and height must be equal when using \\`ImgCropperConfig.round = true\\``);\n }\n const maxFileSize = this._config.maxFileSize;\n if (maxFileSize) {\n this.maxFileSize = maxFileSize;\n }\n }\n public get config(): ImgCropperConfig {\n return this._config;\n }\n /** Set scale */\n @Input()\n public set scale(val: number | undefined) {\n this.setScale(val);\n }\n public get scale(): number | undefined {\n return this._scale;\n }\n\n /**\n * Emit event `error` if the file size for the limit.\n * Note: It only works when the image is received from the `<input>` event.\n */\n @Input()\n public maxFileSize: number;\n\n /** Get min scale */\n public get minScale(): number | undefined {\n return this._minScale;\n }\n\n @Output()\n private readonly scaleChange = new EventEmitter<number>();\n\n /** Emits minimum supported image scale */\n // tslint:disable-next-line:no-output-rename\n @Output(\"minScale\")\n private readonly minScaleChange = new EventEmitter<number>();\n\n /** Emits maximum supported image scale */\n // tslint:disable-next-line:no-output-rename\n @Output(\"maxScale\")\n private readonly maxScaleChange = new EventEmitter<number>();\n\n /** Emits when the image is loaded */\n @Output()\n private readonly imageLoaded = new EventEmitter<ImgCropperEvent>();\n\n /** Emits when the cropper is ready to be interacted */\n @Output()\n private readonly ready = new EventEmitter<ImgCropperEvent>();\n\n /** On crop new image */\n @Output()\n private readonly cropped = new EventEmitter<ImgCropperEvent>();\n\n /** Emits when the cropper is cleaned */\n @Output()\n private readonly cleaned = new EventEmitter<void>();\n\n /** Emit an error when the loaded image is not valid */\n // tslint:disable-next-line: no-output-native\n @Output()\n private readonly error = new EventEmitter<ImgCropperErrorEvent>();\n\n private _currentInputElement?: HTMLInputElement;\n\n /** Emits whenever the component is destroyed. */\n private readonly _destroy = new Subject<void>();\n\n /** Used to subscribe to global move and end events */\n protected _document: Document;\n\n constructor(\n private _renderer: Renderer2,\n readonly _elementRef: ElementRef<HTMLElement>,\n private cd: ChangeDetectorRef,\n private _ngZone: NgZone,\n @Inject(DOCUMENT) _document: any,\n viewPortRuler: ViewportRuler\n ) {\n this._document = _document;\n viewPortRuler.change()\n .pipe(takeUntil(this._destroy))\n .subscribe(() =>\n this._ngZone.run(() => this.updateCropperPosition())\n );\n }\n\n public ngOnInit(): void {\n this._ngZone.runOutsideAngular(() => {\n const element = this._imgContainer.nativeElement;\n element.addEventListener(\"mousedown\", this._pointerDown, activeEventOptions);\n element.addEventListener(\"touchstart\", this._pointerDown, activeEventOptions);\n });\n }\n\n public ngOnDestroy(): void {\n this._destroy.next();\n this._destroy.complete();\n const element = this._imgContainer.nativeElement;\n this._lastPointerEvent = null;\n this._removeGlobalEvents();\n element.removeEventListener(\"mousedown\", this._pointerDown, activeEventOptions);\n element.removeEventListener(\"touchstart\", this._pointerDown, activeEventOptions);\n }\n\n /** Load image with canvas */\n private _imgLoaded(imgElement: HTMLImageElement): void {\n if (imgElement) {\n this._img = imgElement;\n const canvas = this._imgCanvas.nativeElement;\n canvas.width = imgElement.width;\n canvas.height = imgElement.height;\n const ctx = canvas.getContext(\"2d\");\n ctx.clearRect(0, 0, imgElement.width, imgElement.height);\n ctx.drawImage(imgElement, 0, 0);\n\n /** set min scale */\n this._updateMinScale(canvas);\n this._updateMaxScale();\n }\n }\n\n private _setStylesForContImg(values: { x?: number, y?: number }) {\n const newStyles = { } as any;\n if (values.x != null && values.y != null) {\n const rootRect = this._rootRect();\n const x = rootRect.width / 2 - (values.x);\n const y = rootRect.height / 2 - (values.y);\n\n this._imgRect.x = (values.x);\n this._imgRect.y = (values.y);\n this._imgRect.xc = (x);\n this._imgRect.yc = (y);\n\n }\n newStyles.transform = `translate3d(${(this._imgRect.x)}px,${(this._imgRect.y)}px, 0)`;\n newStyles.transform += `scale(${this._scal3Fix})`;\n newStyles.transformOrigin = `${this._imgRect.xc}px ${this._imgRect.yc}px 0`;\n newStyles[\"-webkit-transform\"] = newStyles.transform;\n newStyles[\"-webkit-transform-origin\"] = newStyles.transformOrigin;\n for (const key in newStyles) {\n if (newStyles.hasOwnProperty(key)) {\n this._renderer.setStyle(this._imgContainer.nativeElement, key, newStyles[key]);\n }\n }\n }\n /**\n * Update area and image position only if needed,\n * this is used when window resize\n */\n public updateCropperPosition(): void {\n if (this.isLoaded) {\n this.updatePosition();\n this._updateAreaIfNeeded();\n }\n }\n\n /** Load Image from input event */\n public selectInputEvent(img: Event) {\n this._currentInputElement = img.target as HTMLInputElement;\n const _img = img.target as HTMLInputElement;\n if (_img.files && _img.files.length !== 1) {\n return;\n }\n const fileSize = _img.files[0].size;\n const fileName = _img.value.replace(/.*(\\/|\\\\)/, \"\");\n\n if (this.maxFileSize && fileSize > this.maxFileSize) {\n const cropEvent: ImgCropperErrorEvent = {\n name: fileName,\n type: _img.files[0].type,\n size: fileSize,\n error: ImgCropperError.Size\n };\n this.clean();\n this.error.emit(cropEvent as ImgCropperErrorEvent);\n return;\n }\n\n new Observable<ProgressEvent>(observer => {\n\n const reader = new FileReader();\n\n reader.onerror = err => observer.error(err);\n reader.onabort = err => observer.error(err);\n reader.onload = (ev) => setTimeout(() => {\n observer.next(ev);\n observer.complete();\n });\n\n reader.readAsDataURL(_img.files[0]);\n })\n .pipe(take(1), takeUntil(this._destroy))\n .subscribe(\n (loadEvent) => {\n const originalDataURL = (loadEvent.target as FileReader).result as string;\n\n this.loadImage({\n name: fileName,\n size: _img.files[0].size, // size in bytes\n type: this.config.type || _img.files[0].type,\n originalDataURL\n });\n\n this.cd.markForCheck();\n },\n () => {\n const cropEvent: ImgCropperErrorEvent = {\n name: fileName,\n size: fileSize,\n error: ImgCropperError.Other,\n errorMsg: \"The File could not be loaded.\",\n type: _img.files[0].type\n };\n this.clean();\n this.error.emit(cropEvent as ImgCropperErrorEvent);\n }\n );\n\n }\n\n /** Set the size of the image, the values can be 0 between 1, where 1 is the original size */\n public setScale(size?: number, noAutoCrop?: boolean) {\n // fix min scale\n const newSize = size >= this.minScale && size <= 1 ? size : this.minScale;\n\n // check\n const changed = size != null && size !== this.scale && newSize !== this.scale;\n this._scale = size;\n if (!changed) {\n return;\n }\n this._scal3Fix = newSize;\n this._updateAbsoluteScale();\n if (this.isLoaded) {\n if (changed) {\n const originPosition = {...this._imgRect};\n this.offset = {\n x: originPosition.x,\n y: originPosition.y,\n left: originPosition.xc,\n top: originPosition.yc\n };\n this._setStylesForContImg({});\n this._simulatePointerMove();\n } else {\n return;\n }\n } else if (this.minScale) {\n this._setStylesForContImg({\n ...this._getCenterPoints()\n });\n } else {\n return;\n }\n\n this.scaleChange.emit(size);\n if (!noAutoCrop) {\n this._cropIfAutoCrop();\n }\n\n }\n\n private _getCenterPoints() {\n const root = this._elementRef.nativeElement as HTMLElement;\n const img = this._imgCanvas.nativeElement;\n const x = (root.offsetWidth - (img.width)) / 2;\n const y = (root.offsetHeight - (img.height)) / 2;\n return {\n x,\n y\n };\n }\n\n /**\n * Fit to screen\n */\n public fitToScreen() {\n const container = this._elementRef.nativeElement as HTMLElement;\n const min = {\n width: container.offsetWidth,\n height: container.offsetHeight\n };\n const { width, height } = this._img;\n const minScale = {\n width: min.width / width,\n height: min.height / height\n };\n const result = Math.max(minScale.width, minScale.height);\n this.setScale(result);\n }\n\n public fit() {\n this.setScale(this.minScale);\n }\n\n private _pointerDown = (event: TouchEvent | MouseEvent) => {\n // Don't do anything if the\n // user is using anything other than the main mouse button.\n if (this._isSliding || (!isTouchEvent(event) && event.button !== 0)) {\n return;\n }\n\n this._ngZone.run(() => {\n this._isSliding = true;\n this.offset = {\n x: this._imgRect.x,\n y: this._imgRect.y,\n left: this._imgRect.xc,\n top: this._imgRect.yc\n };\n this._lastPointerEvent = event;\n this._startPointerEvent = getGesturePointFromEvent(event);\n event.preventDefault();\n this._bindGlobalEvents(event);\n });\n\n }\n\n /**\n * Simulate pointerMove with clientX = 0 and clientY = 0,\n * this is used by `setScale` and `rotate`\n */\n private _simulatePointerMove() {\n this._isSliding = true;\n this._startPointerEvent = {\n x: 0,\n y: 0\n };\n this._pointerMove({\n clientX: 0,\n clientY: 0,\n type: \"n\",\n preventDefault: () => {}\n } as MouseEvent);\n this._isSliding = false;\n this._startPointerEvent = null;\n }\n\n public _markForCheck() {\n this.cd.markForCheck();\n }\n\n /**\n * Called when the user has moved their pointer after\n * starting to drag.\n */\n private _pointerMove = (event: TouchEvent | MouseEvent) => {\n if (this._isSliding) {\n event.preventDefault();\n this._lastPointerEvent = event;\n let x: number | undefined;\n let y: number | undefined;\n const canvas = this._imgCanvas.nativeElement;\n const scaleFix = this._scal3Fix;\n const config = this.config;\n const startP = this.offset;\n const point = getGesturePointFromEvent(event);\n const deltaX = point.x - this._startPointerEvent.x;\n const deltaY = point.y - this._startPointerEvent.y;\n if (!scaleFix || !startP) {\n return;\n }\n\n const isMinScaleY = canvas.height * scaleFix < config.height && config.extraZoomOut;\n const isMinScaleX = canvas.width * scaleFix < config.width && config.extraZoomOut;\n\n const limitLeft = (config.width / 2 / scaleFix) >= startP.left - (deltaX / scaleFix);\n const limitRight = (config.width / 2 / scaleFix) +\n (canvas.width) - (startP.left - (deltaX / scaleFix)) <= config.width / scaleFix;\n const limitTop = ((config.height / 2 / scaleFix) >= (startP.top - (deltaY / scaleFix)));\n const limitBottom = (\n ((config.height / 2 / scaleFix) + (canvas.height) - (startP.top - (deltaY / scaleFix))) <= (config.height / scaleFix)\n );\n\n // Limit for left\n if ((limitLeft && !isMinScaleX) || (!limitLeft && isMinScaleX)) {\n x = startP.x + (startP.left) - (config.width / 2 / scaleFix);\n }\n\n // Limit for right\n if ((limitRight && !isMinScaleX) || (!limitRight && isMinScaleX)) {\n x = startP.x + (startP.left) + (config.width / 2 / scaleFix) - canvas.width;\n }\n\n // Limit for top\n if ((limitTop && !isMinScaleY) || (!limitTop && isMinScaleY)) {\n y = startP.y + (startP.top) - (config.height / 2 / scaleFix);\n }\n\n // Limit for bottom\n if ((limitBottom && !isMinScaleY) || (!limitBottom && isMinScaleY)) {\n y = startP.y + (startP.top) + (config.height / 2 / scaleFix) - canvas.height;\n }\n\n // When press shiftKey, deprecated\n // if (event.srcEvent && event.srcEvent.shiftKey) {\n // if (Math.abs(event.deltaX) === Math.max(Math.abs(event.deltaX), Math.abs(event.deltaY))) {\n // y = this.offset.top;\n // } else {\n // x = this.offset.left;\n // }\n // }\n\n if (x === void 0) { x = (deltaX / scaleFix) + (startP.x); }\n if (y === void 0) { y = (deltaY / scaleFix) + (startP.y); }\n this._setStylesForContImg({\n x, y\n });\n }\n }\n\n public updatePosition(): void;\n public updatePosition(xOrigin: number, yOrigin: number): void;\n public updatePosition(xOrigin?: number, yOrigin?: number): void {\n const hostRect = this._rootRect();\n const areaRect = this._areaCropperRect();\n const areaWidth = areaRect.width > hostRect.width\n ? hostRect.width\n : areaRect.width;\n const areaHeight = areaRect.height > hostRect.height\n ? hostRect.height\n : areaRect.height;\n let x: number;\n let y: number;\n if (xOrigin == null && yOrigin == null) {\n xOrigin = this._imgRect.xc;\n yOrigin = this._imgRect.yc;\n }\n x = (areaRect.left - hostRect.left);\n y = (areaRect.top - hostRect.top);\n x -= (xOrigin - (areaWidth / 2));\n y -= (yOrigin - (areaHeight / 2));\n\n this._setStylesForContImg({\n x, y\n });\n }\n\n public _slideEnd() {\n this._cropIfAutoCrop();\n }\n\n private _cropIfAutoCrop() {\n if (this.config.autoCrop) {\n this.crop();\n }\n }\n\n /** + */\n public zoomIn() {\n const scale = this._scal3Fix + .05;\n if (scale > this.minScale && scale <= this._maxScale) {\n this.setScale(scale);\n } else {\n this.setScale(this._maxScale);\n }\n }\n\n /** Clean the img cropper */\n public clean() {\n // fix choosing the same image does not load\n if (this._currentInputElement) {\n this._currentInputElement.value = \"\";\n this._currentInputElement = null;\n }\n if (this.isLoaded) {\n this._imgRect = { } as any;\n this.offset = undefined;\n this.scale = undefined as any;\n this._scal3Fix = undefined;\n this._rotation = 0;\n this._minScale = undefined;\n this._isLoadedImg = false;\n this.isLoaded = false;\n this.isCropped = false;\n this._currentLoadConfig = undefined;\n this.config = this._configPrimary;\n const canvas = this._imgCanvas.nativeElement;\n canvas.width = 0;\n canvas.height = 0;\n this.cleaned.emit(null);\n this.cd.markForCheck();\n }\n }\n\n /** - */\n public zoomOut() {\n const scale = this._scal3Fix - .05;\n if (scale > this.minScale && scale <= this._maxScale) {\n this.setScale(scale);\n } else {\n this.fit();\n }\n }\n public center() {\n const newStyles = {\n ...this._getCenterPoints()\n };\n this._setStylesForContImg(newStyles);\n this._cropIfAutoCrop();\n }\n /**\n * load an image from a given configuration,\n * or from the result of a cropped image\n */\n public loadImage(config: ImgCropperLoaderConfig | string, fn?: () => void) {\n this.clean();\n const _config = this._currentLoadConfig = typeof config === \"string\"\n ? { originalDataURL: config }\n : { ...config };\n let src = _config.originalDataURL;\n this._primaryAreaWidth = this._configPrimary.width;\n this._primaryAreaHeight = this._configPrimary.height;\n if (_config.areaWidth && _config.areaHeight) {\n this.config.width = _config.areaWidth;\n this.config.height = _config.areaHeight;\n }\n src = normalizeSVG(src);\n\n const img = createHtmlImg(src);\n\n const cropEvent = { ..._config } as ImgCropperEvent;\n\n new Observable<void>(observer => {\n\n img.onerror = err => observer.error(err);\n img.onabort = err => observer.error(err);\n img.onload = () => observer.next(null);\n })\n .pipe(take(1), takeUntil(this._destroy))\n .subscribe(\n () => {\n this._imgLoaded(img);\n this._isLoadedImg = true;\n this.imageLoaded.emit(cropEvent);\n this.cd.markForCheck();\n this._ngZone.runOutsideAngular(() => {\n this._ngZone\n .onStable\n .asObservable()\n .pipe(take(1), takeUntil(this._destroy))\n .subscribe(\n () => setTimeout(() => this._ngZone.run(() => this._positionImg(cropEvent, fn)))\n );\n });\n },\n () => {\n const error: ImgCropperErrorEvent = {\n name: _config.name,\n error: ImgCropperError.Type,\n type: _config.type,\n size: _config.size\n };\n this.error.emit(error);\n }\n );\n }\n\n private _updateAreaIfNeeded() {\n if (!this._config.responsiveArea) {\n return;\n }\n\n const rootRect = this._rootRect();\n const areaRect = this._areaCropperRect();\n const minWidth = this.config.minWidth || 1;\n const minHeight = this.config.minHeight || 1;\n if (!(\n areaRect.width > rootRect.width\n || areaRect.height > rootRect.height\n || areaRect.width < this._primaryAreaWidth\n || areaRect.height < this._primaryAreaHeight\n )) {\n return;\n }\n const areaWidthConf = Math.max(this.config.width, minWidth);\n const areaWidthMax = Math.max(rootRect.width, minWidth);\n const minHost = Math.min(\n Math.max(rootRect.width, minWidth), Math.max(rootRect.height, minHeight)\n );\n const currentScale = this._scal3Fix;\n let newScale = 0;\n const roundConf = this.config.round;\n\n if (roundConf) {\n this.config.width = this.config.height = minHost;\n } else {\n if (areaWidthConf === areaRect.width) {\n if (areaWidthMax > this._primaryAreaWidth) {\n this.config.width = this._primaryAreaWidth;\n this.config.height = (this._primaryAreaWidth * areaRect.height) / areaRect.width;\n newScale = (currentScale * this._primaryAreaWidth) / areaRect.width;\n } else {\n this.config.width = areaWidthMax;\n this.config.height = (areaWidthMax * areaRect.height) / areaRect.width;\n newScale = (currentScale * areaWidthMax) / areaRect.width;\n }\n this._updateMinScale();\n this._updateMaxScale();\n this.setScale(newScale, true);\n this._markForCheck();\n }\n }\n }\n\n private _updateAbsoluteScale() {\n const scale = this._scal3Fix / (this.config.width / this._primaryAreaWidth);\n this._absoluteScale = scale;\n }\n\n /**\n * Load Image from URL\n * @deprecated Use `loadImage` instead of `setImageUrl`\n * @param src URL\n * @param fn function that will be called before emit the event loaded\n */\n public setImageUrl(src: string, fn?: () => void) {\n this.loadImage(src, fn);\n }\n\n private _positionImg(cropEvent: ImgCropperEvent, fn?: () => void) {\n const loadConfig = this._currentLoadConfig;\n this._updateMinScale(this._imgCanvas.nativeElement);\n this._updateMaxScale();\n this.isLoaded = false;\n if (fn) {\n fn();\n } else {\n if (loadConfig.scale) {\n this.setScale(loadConfig.scale, true);\n } else {\n this.setScale(this.minScale, true);\n }\n this.rotate(loadConfig.rotation || 0);\n this._updateAreaIfNeeded();\n this._markForCheck();\n this._ngZone.runOutsideAngular(() => {\n this._ngZone\n .onStable\n .asObservable()\n .pipe(take(1), takeUntil(this._destroy))\n .subscribe(() => {\n if (loadConfig.xOrigin != null && loadConfig.yOrigin != null) {\n this.updatePosition(loadConfig.xOrigin, loadConfig.yOrigin);\n }\n this._updateAreaIfNeeded();\n this.isLoaded = true;\n this._cropIfAutoCrop();\n this._ngZone.run(() => {\n this._markForCheck();\n this.ready.emit(cropEvent);\n });\n });\n });\n }\n }\n\n public rotate(degrees: number) {\n let validDegrees = _normalizeDegrees(degrees);\n // If negative convert to positive\n if (validDegrees < 0) {\n validDegrees += 360;\n }\n const newRotation = _normalizeDegrees((this._rotation || 0) + validDegrees);\n if (newRotation === this._rotation) {\n return;\n }\n const degreesRad = validDegrees * Math.PI / 180;\n const canvas = this._imgCanvas.nativeElement;\n const canvasClon = createCanvasImg(canvas);\n const ctx = canvas.getContext(\"2d\");\n this._rotation = newRotation;\n\n // clear\n ctx.clearRect(0, 0, canvasClon.width, canvasClon.height);\n\n // rotate canvas image\n const transform = `rotate(${validDegrees}deg) scale(${1 / this._scal3Fix})`;\n const transformOrigin = `${this._imgRect.xc}px ${this._imgRect.yc}px 0`;\n canvas.style.transform = transform;\n // tslint:disable-next-line: deprecation\n canvas.style.webkitTransform = transform;\n canvas.style.transformOrigin = transformOrigin;\n // tslint:disable-next-line: deprecation\n canvas.style.webkitTransformOrigin = transformOrigin;\n\n const { left, top } = canvas.getBoundingClientRect() as DOMRect;\n\n // save rect\n const canvasRect = canvas.getBoundingClientRect();\n\n // remove rotate styles\n canvas.removeAttribute(\"style\");\n\n // set w & h\n const w = canvasRect.width;\n const h = canvasRect.height;\n ctx.canvas.width = w;\n ctx.canvas.height = h;\n\n // clear\n ctx.clearRect(0, 0, w, h);\n\n // translate and rotate\n ctx.translate(w / 2, h / 2);\n ctx.rotate(degreesRad);\n ctx.drawImage(canvasClon, -canvasClon.width / 2, -canvasClon.height / 2);\n\n // Update min scale\n this._updateMinScale(canvas);\n this._updateMaxScale();\n\n // set the minimum scale, only if necessary\n if (this.scale < this.minScale) {\n this.setScale(0, true);\n } // ↑ no AutoCrop\n\n const rootRect = this._rootRect();\n\n this._setStylesForContImg({\n x: (left - rootRect.left),\n y: (top - rootRect.top)\n });\n\n // keep image inside the frame\n const originPosition = {...this._imgRect};\n this.offset = {\n x: originPosition.x,\n y: originPosition.y,\n left: originPosition.xc,\n top: originPosition.yc\n };\n this._setStylesForContImg({});\n this._simulatePointerMove();\n\n this._cropIfAutoCrop();\n }\n\n public _updateMinScale(canvas?: HTMLCanvasElement) {\n if (!canvas) {\n canvas = this._imgCanvas.nativeElement;\n }\n const config = this.config;\n const minScale = (config.extraZoomOut ? Math.min : Math.max)(\n config.width / canvas.width,\n config.height / canvas.height);\n this._minScale = minScale;\n this.minScaleChange.emit(minScale);\n }\n\n private _updateMaxScale() {\n const maxScale = (this.config.width / this._primaryAreaWidth);\n this._maxScale = maxScale;\n this.maxScaleChange.emit(maxScale);\n }\n\n /**\n * Resize & crop image\n */\n public crop(config?: ImgCropperConfig): ImgCropperEvent {\n const newConfig = config\n ? mergeDeep({ }, this.config || new ImgCropperConfig(), config) : this.config;\n const cropEvent = this._imgCrop(newConfig);\n this.cd.markForCheck();\n return cropEvent;\n }\n\n /**\n * @docs-private\n */\n private _imgCrop(myConfig: ImgCropperConfig) {\n const canvasElement: HTMLCanvasElement = document.createElement(\"canvas\");\n const areaRect = this._areaCropperRect();\n const canvasRect = this._canvasRect();\n const scaleFix = this._scal3Fix;\n const left = (areaRect.left - canvasRect.left) / scaleFix;\n const top = (areaRect.top - canvasRect.top) / scaleFix;\n const { output } = myConfig;\n const currentImageLoadConfig = this._currentLoadConfig;\n const area = {\n width: myConfig.width,\n height: myConfig.height\n };\n canvasElement.width = area.width / scaleFix;\n canvasElement.height = area.height / scaleFix;\n const ctx = canvasElement.getContext(\"2d\");\n if (myConfig.fill) {\n ctx.fillStyle = myConfig.fill;\n ctx.fillRect(0, 0, canvasElement.width, canvasElement.height);\n }\n ctx.drawImage(this._imgCanvas.nativeElement,\n -(left), -(top),\n );\n const result = canvasElement;\n if (myConfig.output === ImgResolution.Default) {\n resizeCanvas(\n result,\n this._configPrimary.width,\n this._configPrimary.height);\n } else if (typeof output === \"object\") {\n if (output.width && output.height) {\n resizeCanvas(result, output.width, output.height);\n } else if (output.width) {\n const newHeight = area.height * output.width / area.width;\n resizeCanvas(result, output.width, newHeight);\n } else if (output.height) {\n const newWidth = area.width * output.height / area.height;\n resizeCanvas(result, newWidth, output.height);\n }\n }\n const type = currentImageLoadConfig.originalDataURL.startsWith(\"http\")\n ? currentImageLoadConfig.type || myConfig.type\n : myConfig.type || currentImageLoadConfig.type;\n const dataURL = result.toDataURL(type);\n const cropEvent: ImgCropperEvent = {\n dataURL,\n type,\n name: currentImageLoadConfig.name,\n areaWidth: this._primaryAreaWidth,\n areaHeight: this._primaryAreaHeight,\n width: result.width,\n height: result.height,\n originalDataURL: currentImageLoadConfig.originalDataURL,\n scale: this._absoluteScale,\n rotation: this._rotation,\n left: (areaRect.left - canvasRect.left) / this._scal3Fix,\n top: (areaRect.top - canvasRect.top) / this._scal3Fix,\n size: currentImageLoadConfig.size,\n xOrigin: this._imgRect.xc,\n yOrigin: this._imgRect.yc,\n position: {\n x: this._imgRect.xc,\n y: this._imgRect.yc\n }\n };\n\n this.isCropped = true;\n this.cropped.emit(cropEvent);\n return cropEvent;\n }\n\n public _rootRect(): DOMRect {\n return this._elementRef.nativeElement.getBoundingClientRect() as DOMRect;\n }\n\n public _areaCropperRect(): DOMRect {\n return this._areaRef.nativeElement.getBoundingClientRect() as DOMRect;\n }\n\n public _canvasRect(): DOMRect {\n return this._imgCanvas.nativeElement.getBoundingClientRect();\n }\n\n\n /** Called when the user has lifted their pointer. */\n private _pointerUp = (event: TouchEvent | MouseEvent) => {\n if (this._isSliding) {\n event.preventDefault();\n this._removeGlobalEvents();\n this._isSliding = false;\n this._startPointerEvent = null;\n this._cropIfAutoCrop();\n }\n }\n\n /** Called when the window has lost focus. */\n private _windowBlur = () => {\n // If the window is blurred while dragging we need to stop dragging because the\n // browser won't dispatch the `mouseup` and `touchend` events anymore.\n if (this._lastPointerEvent) {\n this._pointerUp(this._lastPointerEvent);\n }\n }\n\n private _bindGlobalEvents(triggerEvent: TouchEvent | MouseEvent) {\n const element = this._document;\n const isTouch = isTouchEvent(triggerEvent);\n const moveEventName = isTouch ? \"touchmove\" : \"mousemove\";\n const endEventName = isTouch ? \"touchend\" : \"mouseup\";\n element.addEventListener(moveEventName, this._pointerMove, activeEventOptions);\n element.addEventListener(endEventName, this._pointerUp, activeEventOptions);\n\n if (isTouch) {\n element.addEventListener(\"touchcancel\", this._pointerUp, activeEventOptions);\n }\n\n const window = this._getWindow();\n\n if (typeof window !== \"undefined\" && window) {\n window.addEventListener(\"blur\", this._windowBlur);\n }\n }\n\n /** Removes any global event listeners that we may have added. */\n private _removeGlobalEvents() {\n const element = this._document;\n element.removeEventListener(\"mousemove\", this._pointerMove, activeEventOptions);\n element.removeEventListener(\"mouseup\", this._pointerUp, activeEventOptions);\n element.removeEventListener(\"touchmove\", this._pointerMove, activeEventOptions);\n element.removeEventListener(\"touchend\", this._pointerUp, activeEventOptions);\n element.removeEventListener(\"touchcancel\", this._pointerUp, activeEventOptions);\n\n const window = this._getWindow();\n\n if (typeof window !== \"undefined\" && window) {\n window.removeEventListener(\"blur\", this._windowBlur);\n }\n }\n\n /** Use defaultView of injected document if available or fallback to global window reference */\n private _getWindow(): Window {\n return this._document.defaultView || window;\n }\n\n}\n\n/**\n * Normalize degrees for cropper rotation\n * @docs-private\n */\nexport function _normalizeDegrees(n: number) {\n const de = n % 360;\n if (de % 90) {\n throw new Error(`LyCropper: Invalid \\`${n}\\` degree, only accepted values: 0, 90, 180, 270 & 360.`);\n }\n return de;\n}\n\n/**\n * @docs-private\n */\nfunction createCanvasImg(img: HTMLCanvasElement | HTMLImageElement) {\n\n // create a new canvas\n const newCanvas = document.createElement(\"canvas\");\n const context = newCanvas.getContext(\"2d\");\n\n // set dimensions\n newCanvas.width = img.width;\n newCanvas.height = img.height;\n\n // apply the old canvas to the new one\n context.drawImage(img, 0, 0);\n\n // return the new canvas\n return newCanvas;\n}\n\n\nconst DATA_IMAGE_SVG_PREFIX = \"data:image/svg+xml;base64,\";\n\nfunction normalizeSVG(dataURL: string) {\n if (window.atob && isSvgImage(dataURL)) {\n const len = dataURL.length / 5;\n const text = window.atob(dataURL.replace(DATA_IMAGE_SVG_PREFIX, \"\"));\n const span = document.createElement(\"span\");\n span.innerHTML = text;\n const svg = span.querySelector(\"svg\");\n span.setAttribute(\"style\", \"display:none\");\n document.body.appendChild(span);\n const width = parseFloat(getComputedStyle(svg).width) || 1;\n const height = parseFloat(getComputedStyle(svg).height) || 1;\n const max = Math.max(width, height);\n\n svg.setAttribute(\"width\", `${len / (width / max)}px`);\n svg.setAttribute(\"height\", `${len / (height / max)}px`);\n const result = DATA_IMAGE_SVG_PREFIX + window.btoa(span.innerHTML);\n document.body.removeChild(span);\n return result;\n }\n return dataURL;\n}\n\nfunction isSvgImage(dataUrl: string) {\n return dataUrl.startsWith(DATA_IMAGE_SVG_PREFIX);\n}\n\nfunction createHtmlImg(src: string) {\n const img = new Image();\n img.crossOrigin = \"anonymous\";\n img.src = src;\n return img;\n}\n\n\nfunction getGesturePointFromEvent(event: TouchEvent | MouseEvent) {\n\n // `touches` will be empty for start/end events so we have to fall back to `changedTouches`.\n const point = isTouchEvent(event)\n ? (event.touches[0] || event.changedTouches[0])\n : event;\n\n return {\n x: point.clientX,\n y: point.clientY\n };\n}\n\n/** Returns whether an event is a touch event. */\nfunction isTouchEvent(event: MouseEvent | TouchEvent): event is TouchEvent {\n return event.type[0] === \"t\";\n}\n\nexport function round(n: number) {\n return Math.round(n);\n}\n\n/**\n * Simple object check.\n * @param item\n */\nfunction isObject(item) {\n return (item && typeof item === \"object\" && !Array.isArray(item));\n}\n\nexport function mergeDeep<T, U>(target: T, source: U): T & U;\nexport function mergeDeep<T, U, V>(target: T, source1: U, source2: V): T & U & V;\nexport function mergeDeep<T, U, V, W>(target: T, source1: U, source2: V, source3: W): T & U & V & W;\nexport function mergeDeep(target: object, ...sources: any[]): any;\n\n/**\n * Deep merge two objects.\n * @param target\n * @param ...sources\n */\nexport function mergeDeep(target: any, ...sources: any[]) {\n if (!sources.length) { return target; }\n const source = sources.shift();\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) { Object.assign(target, { [key]: {} }); }\n mergeDeep(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return mergeDeep(target, ...sources);\n}\n\n\n/**\n * We have the cropper area in the same file to fix the build\n */\n\n@Component({\n selector: \"nice-cropper-area\",\n templateUrl: \"./image-cropper-area.template.html\",\n styleUrls: [\"./image-cropper-area.style.scss\"],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceCropperAreaComponent implements OnDestroy {\n @ViewChild(\"resizer\")\n private readonly _resizer?: ElementRef;\n\n @Input()\n public keepAspectRatio: boolean;\n\n @Input()\n @HostBinding(\"class.round\")\n public round: boolean;\n\n /** Used to subscribe to global move and end events */\n protected _document: Document;\n private _isSliding: boolean;\n\n /** Keeps track of the last pointer event that was captured by the crop area. */\n private _lastPointerEvent: MouseEvent | TouchEvent | null;\n private _startPointerEvent: {\n x: number\n y: number\n } | null;\n private _currentWidth: number;\n private _currentHeight: number;\n private _startAreaRect: DOMRect;\n private _startImgRect: DOMRect;\n\n constructor(\n @Inject(DOCUMENT) _document: any,\n private readonly _elementRef: ElementRef,\n private readonly _cropper: NiceImageCropperComponent,\n private readonly _ngZone: NgZone,\n ) {\n this._document = _document;\n }\n\n private _resizableArea: boolean;\n\n @Input()\n public set resizableArea(val: boolean) {\n if (val !== this._resizableArea) {\n this._resizableArea = val;\n Promise.resolve(null).then(() => {\n if (val) {\n this._removeResizableArea();\n this._addResizableArea();\n } else {\n this._removeResizableArea();\n }\n });\n }\n }\n public get resizableArea() {\n return this._resizableArea;\n }\n\n public ngOnDestroy() {\n this._removeResizableArea();\n }\n\n private _addResizableArea() {\n this._ngZone.runOutsideAngular(() => {\n const element = this._resizer.nativeElement;\n element.addEventListener(\"mousedown\", this._pointerDown, activeEventOptions);\n element.addEventListener(\"touchstart\", this._pointerDown, activeEventOptions);\n });\n }\n\n private _removeResizableArea() {\n const element = this._resizer?.nativeElement;\n if (element) {\n this._lastPointerEvent = null;\n this._removeGlobalEvents();\n element.removeEventListener(\"mousedown\", this._pointerDown, activeEventOptions);\n element.removeEventListener(\"touchstart\", this._pointerDown, activeEventOptions);\n }\n }\n\n private _pointerDown = (event: MouseEvent | TouchEvent) => {\n // Don't do anything if the\n // user is using anything other than the main mouse button.\n if (this._isSliding || (!isTouchEvent(event) && event.button !== 0)) {\n return;\n }\n\n event.preventDefault();\n\n this._ngZone.run(() => {\n this._isSliding = true;\n this._lastPointerEvent = event;\n this._startPointerEvent = getGesturePointFromEvent(event);\n this._startAreaRect = this._cropper._areaCropperRect();\n this._startImgRect = this._cropper._canvasRect();\n event.preventDefault();\n this._bindGlobalEvents(event);\n });\n }\n\n private _pointerMove = (event: MouseEvent | TouchEvent) => {\n if (this._isSliding) {\n event.preventDefault();\n this._lastPointerEvent = event;\n const element: HTMLDivElement = this._elementRef.nativeElement;\n const {width, height, minWidth, minHeight} = this._cropper.config;\n const point = getGesturePointFromEvent(event);\n const deltaX = point.x - this._startPointerEvent.x;\n const deltaY = point.y - this._startPointerEvent.y;\n const startAreaRect = this._startAreaRect;\n const startImgRect = this._startImgRect;\n const isRound = this.round;\n const keepAspectRatio = this._cropper.config.keepAspectRatio || event.shiftKey;\n let newWidth = 0;\n let newHeight = 0;\n const rootRect = this._cropper._rootRect();\n\n if (isRound) {\n // The distance from the center of the cropper area to the pointer\n const originX = ((width / 2 / Math.sqrt(2)) + deltaX);\n const originY = ((height / 2 / Math.sqrt(2)) + deltaY);\n\n // Leg\n const side = Math.sqrt(originX ** 2 + originY ** 2);\n newWidth = newHeight = side * 2;\n\n } else if (keepAspectRatio) {\n newWidth = width + deltaX * 2;\n newHeight = height + deltaY * 2;\n if (width !== height) {\n if (width > height) {\n newHeight = height / (width / newWidth);\n } else if (height > width) {\n newWidth = width / (height / newHeight);\n }\n } else {\n newWidth = newHeight = Math.max(newWidth, newHeight);\n }\n } else {\n newWidth = width + deltaX * 2;\n newHeight = height + deltaY * 2;\n }\n\n // To min width\n if (newWidth < minWidth) {\n newWidth = minWidth;\n }\n // To min height\n if (newHeight < minHeight) {\n newHeight = minHeight;\n }\n\n // Do not overflow the cropper area\n const centerX = startAreaRect.x + startAreaRect.width / 2;\n const centerY = startAreaRect.y + startAreaRect.height / 2;\n const topOverflow = startImgRect.y > centerY - (newHeight / 2);\n const bottomOverflow = centerY + (newHeight / 2) > startImgRect.bottom;\n const minHeightOnOverflow = Math.min((centerY - startImgRect.y) * 2, (startImgRect.bottom - centerY) * 2);\n const leftOverflow = startImgRect.x > centerX - (newWidth / 2);\n const rightOverflow = centerX + (newWidth / 2) > startImgRect.right;\n const minWidthOnOverflow = Math.min((centerX - startImgRect.x) * 2, (startImgRect.right - centerX) * 2);\n const minOnOverflow = Math.min(minWidthOnOverflow, minHeightOnOverflow);\n if (round) {\n if (topOverflow || bottomOverflow || leftOverflow || rightOverflow) {\n newHeight = newWidth = minOnOverflow;\n }\n } else if (keepAspectRatio) {\n const newNewWidth: number[] = [];\n const newNewHeight: number[] = [];\n if ((topOverflow || bottomOverflow) && Math.min()) {\n newHeight = minHeightOnOverflow;\n newNewHeight.push(newHeight);\n newWidth = width / (height / minHeightOnOverflow);\n newNewWidth.push(newWidth);\n }\n if ((leftOverflow || rightOverflow)) {\n newWidth = minWidthOnOverflow;\n newNewWidth.push(newWidth);\n newHeight = height / (width / minWidthOnOverflow);\n newNewHeight.push(newHeight);\n }\n if (newNewWidth.length === 2) {\n newWidth = Math.min(...newNewWidth);\n }\n if (newNewHeight.length === 2) {\n newHeight = Math.min(...newNewHeight);\n }\n } else {\n if (topOverflow || bottomOverflow) {\n newHeight = minHeightOnOverflow;\n }\n if (leftOverflow || rightOverflow) {\n newWidth = minWidthOnOverflow;\n }\n }\n\n // Do not overflow the container\n if (round) {\n const min = Math.min(rootRect.width, rootRect.height);\n if (newWidth > min) {\n newWidth = newHeight = min;\n } else if (newHeight > min) {\n newWidth = newHeight = min;\n }\n } else if (keepAspectRatio) {\n if (newWidth > rootRect.width) {\n newWidth = rootRect.width;\n newHeight = height / (width / rootRect.width);\n } else if (newHeight > rootRect.height) {\n newWidth = width / (height / rootRect.height);\n newHeight = rootRect.height;\n }\n } else {\n if (newWidth > rootRect.width) {\n newWidth = rootRect.width;\n } else if (newHeight > rootRect.height) {\n newHeight = rootRect.height;\n }\n }\n\n\n // round values\n newWidth = Math.round(newWidth);\n newHeight = Math.round(newHeight);\n\n element.style.width = `${newWidth}px`;\n element.style.height = `${newHeight}px`;\n this._currentWidth = newWidth;\n this._currentHeight = newHeight;\n }\n }\n\n /** Called when the user has lifted their pointer. */\n private _pointerUp = (event: TouchEvent | MouseEvent) => {\n if (this._isSliding) {\n event.preventDefault();\n this._removeGlobalEvents();\n this._cropper._primaryAreaWidth = this._cropper.config.width = this._currentWidth;\n this._cropper._primaryAreaHeight = this._cropper.config.height = this._currentHeight;\n this._cropper.config = this._cropper.config;\n this._cropper._updateMinScale();\n this._isSliding = false;\n this._startPointerEvent = null;\n }\n }\n\n /** Called when the window has lost focus. */\n private _windowBlur = () => {\n // If the window is blurred while dragging we need to stop dragging because the\n // browser won't dispatch the `mouseup` and `touchend` events anymore.\n if (this._lastPointerEvent) {\n this._pointerUp(this._lastPointerEvent);\n }\n }\n\n private _bindGlobalEvents(triggerEvent: TouchEvent | MouseEvent) {\n const element = this._document;\n const isTouch = isTouchEvent(triggerEvent);\n const moveEventName = isTouch ? \"touchmove\" : \"mousemove\";\n const endEventName = isTouch ? \"touchend\" : \"mouseup\";\n element.addEventListener(moveEventName, this._pointerMove, activeEventOptions);\n element.addEventListener(endEventName, this._pointerUp, activeEventOptions);\n\n if (isTouch) {\n element.addEventListener(\"touchcancel\", this._pointerUp, activeEventOptions);\n }\n\n const window = this._getWindow();\n\n if (typeof window !== \"undefined\" && window) {\n window.addEventListener(\"blur\", this._windowBlur);\n }\n }\n\n /** Removes any global event listeners that we may have added. */\n private _removeGlobalEvents() {\n const element = this._document;\n element.removeEventListener(\"mousemove\", this._pointerMove, activeEventOptions);\n element.removeEventListener(\"mouseup\", this._pointerUp, activeEventOptions);\n element.removeEventListener(\"touchmove\", this._pointerMove, activeEventOptions);\n element.removeEventListener(\"touchend\", this._pointerUp, activeEventOptions);\n element.removeEventListener(\"touchcancel\", this._pointerUp, activeEventOptions);\n\n const window = this._getWindow();\n\n if (typeof window !== \"undefined\" && window) {\n window.removeEventListener(\"blur\", this._windowBlur);\n }\n }\n\n /** Use defaultView of injected document if available or fallback to global window reference */\n private _getWindow(): Window {\n return this._document.defaultView || window;\n }\n}\n","<!-- (selectstart): On Safari starting to slide temporarily triggers text selection mode which\nshow the wrong cursor. We prevent it by stopping the `selectstart` event. -->\n<div class=\"image-container\" #_imgContainer\n (selectstart)=\"$event.preventDefault()\"\n>\n <canvas #_imgCanvas></canvas>\n</div>\n<nice-cropper-area\n #_area\n *ngIf=\"_isLoadedImg\"\n [round]=\"!!config.round\"\n [resizableArea]=\"!!config.resizableArea\"\n [keepAspectRatio]=\"!!config.keepAspectRatio\"\n [ngStyle]=\"{\n width: config.width + 'px',\n height: config.height + 'px'\n }\"\n></nice-cropper-area>\n<button class=\"close-button\" mat-icon-button *ngIf=\"_isLoadedImg\" (click)=\"clean()\">\n <mat-icon>arrow_back</mat-icon>\n</button>\n","<div class=\"resizer\" #resizer *ngIf=\"resizableArea\"></div>\n","/**\n * Adapted from https://github.com/A-l-y-l-e/Alyle-UI/tree/10.5.3/src/lib/image-cropper\n */\n\nimport { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatIconModule } from \"@angular/material/icon\";\n\nimport { NiceCropperAreaComponent, NiceImageCropperComponent } from \"./image-cropper.component\";\n\n@NgModule({\n imports: [CommonModule, MatButtonModule, MatIconModule],\n declarations: [NiceImageCropperComponent, NiceCropperAreaComponent],\n exports: [NiceImageCropperComponent]\n})\nexport class NiceImageCropperModule {}\n","import { DOCUMENT } from \"@angular/common\";\nimport { Component, Inject, OnDestroy, OnInit, Renderer2 } from \"@angular/core\";\nimport { combineLatest, Subject } from \"rxjs\";\nimport { map, takeUntil } from \"rxjs/operators\";\nimport { NiceConfigService, NiceMediaWatcherService } from \"../../providers\";\nimport { NiceConfig, Scheme } from \"../../providers/config/config.model\";\n\n@Component({\n selector: \"nice-layout\",\n template: `<ng-content></ng-content>`\n})\nexport class NiceLayoutComponent implements OnInit, OnDestroy {\n private config: NiceConfig;\n private scheme: Scheme;\n private theme: string;\n private _unsubscribeAll: Subject<any> = new Subject<any>();\n\n /**\n * Constructor\n */\n constructor(\n @Inject(DOCUMENT) private _document: any,\n private _renderer2: Renderer2,\n private _niceConfigService: NiceConfigService,\n private _niceMediaWatcherService: NiceMediaWatcherService\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Set the theme and scheme based on the configuration\n combineLatest([\n this._niceConfigService.config$,\n this._niceMediaWatcherService.onMediaQueryChange$([\"(prefers-color-scheme: dark)\", \"(prefers-color-scheme: light)\"])\n ]).pipe(\n takeUntil(this._unsubscribeAll),\n map(([config, mql]) => {\n const options = {\n scheme: config.scheme,\n theme: config.theme\n };\n\n if (config.scheme === \"auto\") {\n options.scheme = mql.breakpoints[\"(prefers-color-scheme: dark)\"] ? \"dark\" : \"light\";\n }\n\n return options;\n })\n ).subscribe((options) => {\n this.scheme = options.scheme;\n this.theme = options.theme;\n\n this._updateScheme();\n this._updateTheme();\n });\n\n // Subscribe to config changes\n this._niceConfigService.config$\n .pipe(takeUntil(this._unsubscribeAll))\n .subscribe((config: NiceConfig) => {\n this.config = config;\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n\n /**\n * Update the selected scheme\n *\n * @private\n */\n private _updateScheme(): void {\n // Remove class names for all schemes\n this._document.body.classList.remove(\"light\", \"dark\");\n\n // Add class name for the currently selected scheme\n this._document.body.classList.add(this.scheme);\n }\n\n /**\n * Update the selected theme\n *\n * @private\n */\n private _updateTheme(): void {\n // Find the class name for the previously selected theme and remove it\n this._document.body.classList.forEach((className: string) => {\n if (className.startsWith(\"theme-\")) {\n this._document.body.classList.remove(className, className.split(\"-\")[1]);\n }\n });\n\n // Add class name for the currently selected theme\n this._document.body.classList.add(`theme-${this.theme}`);\n }\n}\n","import { NgModule } from \"@angular/core\";\n\nimport { NiceLayoutComponent } from \"./layout.component\";\n\n@NgModule({\n imports: [],\n declarations: [NiceLayoutComponent],\n providers: [],\n exports: [NiceLayoutComponent]\n})\nexport class NiceLayoutModule {}\n","import { Component, Input } from \"@angular/core\";\nimport { ProgressSpinnerMode } from \"@angular/material/progress-spinner\";\n\n@Component({\n selector: \"nice-loading-spinner\",\n templateUrl: \"loading-spinner.template.html\",\n styleUrls: [\"./loading-spinner.style.scss\"]\n})\nexport class NiceLoadingSpinnerComponent {\n @Input()\n public loading: boolean;\n\n @Input()\n mode: ProgressSpinnerMode = \"indeterminate\";\n\n @Input()\n diameter = 50;\n}\n","<mat-spinner [diameter]=\"diameter\" [mode]=\"mode\" [color]=\"'accent'\"></mat-spinner>\n","import { OverlayContainer } from \"@angular/cdk/overlay\";\nimport { Injectable } from \"@angular/core\";\n\n@Injectable()\nexport class DynamicOverlayContainer extends OverlayContainer {\n public setContainerElement(containerElement: HTMLElement): void {\n this._containerElement = containerElement;\n }\n}\n","import { Overlay, OverlayKeyboardDispatcher, OverlayPositionBuilder, ScrollStrategyOptions, OverlayOutsideClickDispatcher } from \"@angular/cdk/overlay\";\nimport { ComponentFactoryResolver, Inject, Injectable, Injector, NgZone, Renderer2, RendererFactory2 } from \"@angular/core\";\nimport { DynamicOverlayContainer } from \"./dynamic-overlay-container.service\";\nimport { Directionality } from \"@angular/cdk/bidi\";\nimport { DOCUMENT, Location } from \"@angular/common\";\n\n@Injectable({ providedIn: \"root\" })\nexport class DynamicOverlay extends Overlay {\n private readonly _dynamicOverlayContainer: DynamicOverlayContainer;\n private renderer: Renderer2;\n\n constructor(\n @Inject(DOCUMENT) _document: any,\n scrollStrategies: ScrollStrategyOptions,\n _overlayContainer: DynamicOverlayContainer,\n _componentFactoryResolver: ComponentFactoryResolver,\n _positionBuilder: OverlayPositionBuilder,\n _keyboardDispatcher: OverlayKeyboardDispatcher,\n _injector: Injector,\n _ngZone: NgZone,\n _directionality: Directionality,\n rendererFactory: RendererFactory2,\n _location: Location,\n _outsideClickDispatcher: OverlayOutsideClickDispatcher\n ) {\n super(\n scrollStrategies,\n _overlayContainer,\n _componentFactoryResolver,\n _positionBuilder,\n _keyboardDispatcher,\n _injector,\n _ngZone,\n _document,\n _directionality,\n _location,\n _outsideClickDispatcher\n );\n this.renderer = rendererFactory.createRenderer(null, null);\n\n this._dynamicOverlayContainer = _overlayContainer;\n }\n\n public setContainerElement(containerElement: HTMLElement): void {\n this.renderer.setStyle(containerElement, \"transform\", \"translateZ(0)\");\n this._dynamicOverlayContainer.setContainerElement(containerElement);\n }\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const NICE_LOADING_OPTIONS = new InjectionToken(\"nice_loading_options\");\n","import { Directive, ElementRef, Inject, Input, Optional, Type } from \"@angular/core\";\nimport { OverlayRef } from \"@angular/cdk/overlay\";\nimport { ComponentPortal } from \"@angular/cdk/portal\";\nimport { DynamicOverlay } from \"../../providers/overlay/dynamic-overlay.service\";\nimport { NiceLoadingSpinnerComponent } from \"./loading-spinner.component\";\nimport { NICE_LOADING_OPTIONS } from \"./loading.constant\";\n\nexport interface NiceLoadingOptions {\n customLoading?: Type<any>;\n}\n\n@Directive({ selector: \"[niceLoadingOverlay]\" })\nexport class NiceLoadingDirective {\n private overlayRef: OverlayRef;\n private _loading = false;\n\n @Input(\"niceLoadingOverlay\")\n public set loading(loading: boolean | null) {\n setTimeout(() => {\n if (loading === this._loading) {\n return;\n }\n this._loading = loading;\n if (!this.overlayRef) {\n this.overlay.setContainerElement(this.elRef.nativeElement);\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .global()\n .centerHorizontally()\n .centerVertically(),\n hasBackdrop: true,\n panelClass: \"nice-loading-overlay\"\n });\n }\n if (this._loading) {\n this.overlayRef.attach(new ComponentPortal(this.options?.customLoading ?? NiceLoadingSpinnerComponent));\n } else {\n this.overlayRef.detach();\n }\n }, 0);\n }\n\n constructor(\n @Optional() @Inject(NICE_LOADING_OPTIONS) private options: NiceLoadingOptions,\n private elRef: ElementRef,\n private overlay: DynamicOverlay\n ) {}\n}\n","import { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { DynamicOverlayContainer } from \"../../providers/overlay/dynamic-overlay-container.service\";\nimport { DynamicOverlay } from \"../../providers/overlay/dynamic-overlay.service\";\nimport { NiceLoadingSpinnerComponent } from \"./loading-spinner.component\";\nimport { CommonModule } from \"@angular/common\";\nimport { MatProgressSpinnerModule } from \"@angular/material/progress-spinner\";\nimport { NiceLoadingDirective, NiceLoadingOptions } from \"./loading.directive\";\nimport { NICE_LOADING_OPTIONS } from \"./loading.constant\";\n\n@NgModule({\n imports: [\n CommonModule,\n MatProgressSpinnerModule\n ],\n declarations: [\n NiceLoadingSpinnerComponent,\n NiceLoadingDirective\n ],\n providers: [DynamicOverlayContainer, DynamicOverlay],\n exports: [\n NiceLoadingSpinnerComponent,\n NiceLoadingDirective\n ]\n})\nexport class NiceLoadingSpinnerModule {\n public static forRoot(options?: NiceLoadingOptions): ModuleWithProviders<NiceLoadingSpinnerModule> {\n return {\n ngModule: NiceLoadingSpinnerModule,\n providers: [\n {\n provide: NICE_LOADING_OPTIONS,\n useValue: options\n }\n ]\n };\n }\n}\n","import { AfterViewInit, Component, ElementRef, EventEmitter, Inject, Input, OnInit, Output, PLATFORM_ID, ViewChild } from \"@angular/core\";\nimport { isPlatformServer } from \"@angular/common\";\n\n@Component({\n selector: \"nice-lottie\",\n templateUrl: \"lottie.template.html\"\n})\nexport class NiceLottieComponent implements OnInit, AfterViewInit {\n private _options: import(\"lottie-web\").AnimationConfigWithPath | import(\"lottie-web\").AnimationConfigWithData;\n private _lottie: typeof import(\"lottie-web\").default;\n\n @Input()\n public options: any;\n @Input()\n public width: number;\n @Input()\n public height: number;\n\n @Output()\n public animCreated: EventEmitter<any> = new EventEmitter();\n\n @ViewChild(\"animationContainer\")\n public animationContainer: ElementRef;\n\n public viewWidth: string;\n public viewHeight: string;\n\n constructor(@Inject(PLATFORM_ID) private platformId: string) {\n }\n\n public ngOnInit(): void {\n this.viewWidth = this.width + \"px\" || \"100%\";\n this.viewHeight = this.height + \"px\" || \"100%\";\n }\n\n public async ngAfterViewInit(): Promise<void> {\n if (isPlatformServer(this.platformId)) {\n return;\n }\n\n this._lottie = (await import(\"lottie-web\")).default;\n this._options = {\n container: this.animationContainer.nativeElement,\n renderer: this.options.renderer || \"svg\",\n loop: this.options.loop !== false,\n autoplay: this.options.autoplay !== false,\n animationData: this.options.animationData,\n path: this.options.path || \"\",\n rendererSettings: this.options.rendererSettings || {}\n };\n\n const anim: any = this._lottie.loadAnimation(this._options);\n this.animCreated.emit(anim);\n }\n}\n","<div #animationContainer\n [ngStyle]=\"{'width': viewWidth, 'height': viewHeight, 'overflow':'hidden', 'margin': '0 auto'}\">\n</div>\n","import { NgModule } from \"@angular/core\";\nimport { NiceLottieComponent } from \"./lottie.component\";\nimport { CommonModule } from \"@angular/common\";\n\n@NgModule({\n imports: [CommonModule],\n declarations: [NiceLottieComponent],\n exports: [NiceLottieComponent]\n})\nexport class NiceLottieModule {}\n","import { Injectable, OnDestroy } from \"@angular/core\";\nimport { ActivatedRouteSnapshot, NavigationEnd, Router } from \"@angular/router\";\nimport { BehaviorSubject, Observable, Subject } from \"rxjs\";\nimport { filter, takeUntil } from \"rxjs/operators\";\nimport { NiceNavigationItem } from \"./navigation.types\";\n\n@Injectable({\n providedIn: \"root\"\n})\nexport class NiceNavigationService implements OnDestroy {\n private _onNavigationChanged = new BehaviorSubject<any>(null);\n private _onNavigationRegistered = new BehaviorSubject<any>(null);\n private _onNavigationUnregistered = new BehaviorSubject<any>(null);\n private _defaultNavigationKey: string;\n private _currentNavigationKey: string;\n private _componentRegistry: Map<string, any> = new Map<string, any>();\n private _navigationStore: Map<string, NiceNavigationItem[]> = new Map<string, any>();\n\n protected _unsubscribeAll: Subject<any>;\n\n /**\n * Constructor\n */\n constructor(private router: Router) {\n this._unsubscribeAll = new Subject();\n this.listenOnRouteChange();\n }\n\n public get onNavigationChanged(): Observable<any> {\n return this._onNavigationChanged.asObservable();\n }\n\n public get onNavigationRegistered(): Observable<any> {\n return this._onNavigationRegistered.asObservable();\n }\n\n public get onNavigationUnregistered(): Observable<any> {\n return this._onNavigationUnregistered.asObservable();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n public ngOnDestroy(): void {\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n\n /**\n * Register navigation component\n */\n public registerComponent(name: string, component: any): void {\n this._componentRegistry.set(name, component);\n }\n\n /**\n * Deregister navigation component\n */\n public deregisterComponent(name: string): void {\n this._componentRegistry.delete(name);\n }\n\n /**\n * Get navigation component from the registry\n */\n public getComponent(name: string): any {\n return this._componentRegistry.get(name);\n }\n\n /**\n * Store the given navigation with the given key\n */\n public storeNavigation(key: string, navigation: NiceNavigationItem[], isDefault = false): void {\n // Add to the store\n this._navigationStore.set(key, navigation);\n\n // Notify the subject\n this._onNavigationRegistered.next([key, navigation, key === this._currentNavigationKey]);\n\n if (isDefault) {\n this._defaultNavigationKey = key;\n }\n }\n\n /**\n * Get navigation from storage by key\n */\n public getNavigation(key: string): NiceNavigationItem[] {\n return this._navigationStore.get(key) ?? [];\n }\n\n /**\n * Delete the navigation from the storage\n */\n public deleteNavigation(key: string): void {\n // Check if the navigation exists\n if (!this._navigationStore.has(key)) {\n console.warn(`Navigation with the key '${key}' does not exist in the store.`);\n }\n\n // Delete from the storage\n this._navigationStore.delete(key);\n\n // Notify the subject\n this._onNavigationUnregistered.next(key);\n }\n\n /**\n * Utility function that returns a flattened\n * version of the given navigation array\n */\n public getFlatNavigation(navigation: NiceNavigationItem[], flatNavigation: NiceNavigationItem[] = []): NiceNavigationItem[] {\n for (const item of navigation) {\n if (item.type === \"basic\") {\n flatNavigation.push(item);\n continue;\n }\n\n if (item.type === \"aside\" || item.type === \"collapsable\" || item.type === \"group\") {\n if (item.children) {\n this.getFlatNavigation(item.children, flatNavigation);\n }\n }\n }\n\n return flatNavigation;\n }\n\n /**\n * Utility function that returns the item\n * with the given id from given navigation\n */\n public getItem(id: string, navigation: NiceNavigationItem[]): NiceNavigationItem | null {\n for (const item of navigation) {\n if (item.id === id) {\n return item;\n }\n\n if (item.children) {\n const childItem = this.getItem(id, item.children);\n\n if (childItem) {\n return childItem;\n }\n }\n }\n\n return null;\n }\n\n /**\n * Utility function that returns the item's parent\n * with the given id from given navigation\n */\n public getItemParent(\n id: string,\n navigation: NiceNavigationItem[],\n parent: NiceNavigationItem[] | NiceNavigationItem\n ): NiceNavigationItem[] | NiceNavigationItem | null {\n for (const item of navigation) {\n if (item.id === id) {\n return parent;\n }\n\n if (item.children) {\n const childItem = this.getItemParent(id, item.children, item);\n\n if (childItem) {\n return childItem;\n }\n }\n }\n\n return null;\n }\n\n public getCurrentNavigation(): NiceNavigationItem[] {\n if (!this._currentNavigationKey) {\n console.warn(`The current navigation is not set.`);\n return;\n }\n\n return this.getNavigation(this._currentNavigationKey);\n }\n\n public setCurrentNavigation(key: string): void {\n // Check if the sidebar exists\n if (!this._navigationStore.has(key)) {\n console.warn(`Navigation with the key '${key}' does not exist in the store.`);\n }\n\n if (this._currentNavigationKey === key) {\n return;\n }\n\n // Set the current adminNavigation key\n this._currentNavigationKey = key;\n\n // Notify the subject\n this._onNavigationChanged.next(key);\n }\n\n private listenOnRouteChange(): void {\n this.router.events.pipe(\n takeUntil(this._unsubscribeAll),\n filter((e) => e instanceof NavigationEnd)\n ).subscribe(() => {\n const route = this.lastChild(this.router.routerState.snapshot.root);\n if (route.data.navigationKey) {\n this.setCurrentNavigation(route.data.navigationKey);\n } else if (this._defaultNavigationKey) {\n this.setCurrentNavigation(this._defaultNavigationKey);\n }\n });\n }\n\n private lastChild(route: ActivatedRouteSnapshot): ActivatedRouteSnapshot {\n if (route.firstChild) {\n return this.lastChild(route.firstChild);\n } else {\n return route;\n }\n }\n}\n","import { ChangeDetectorRef, Component, Directive, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from \"@angular/core\";\nimport { distinctUntilChanged, ReplaySubject, startWith, Subject } from \"rxjs\";\nimport { filter, takeUntil } from \"rxjs/operators\";\nimport { NiceUtilsService } from \"../../providers\";\nimport { NiceNavigationService } from \"./navigation.service\";\nimport { NiceNavigationItem } from \"./navigation.types\";\n\n@Component({\n template: ``\n})\nexport class NiceNavigationComponent implements OnInit, OnDestroy, OnChanges {\n protected _navigation: NiceNavigationItem[];\n protected _unsubscribeAll: Subject<any>;\n\n public animateNextNavChange = false;\n public onRefreshed = new ReplaySubject<boolean>(1);\n public name: string;\n\n constructor(\n protected _changeDetectorRef: ChangeDetectorRef,\n protected _niceNavigationService: NiceNavigationService,\n protected _niceUtilsService: NiceUtilsService\n ) {\n this._unsubscribeAll = new Subject();\n }\n\n public ngOnInit(): void {\n // Make sure the name input is not an empty string\n if (this.name === \"\") {\n this.name = this._niceUtilsService.randomId();\n }\n\n // Register the navigation component\n this._niceNavigationService.registerComponent(this.name, this);\n\n this._niceNavigationService.onNavigationChanged.pipe(\n distinctUntilChanged(),\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n this.animateNextNavChange = !!this._navigation?.length;\n this._navigation = this._niceNavigationService.getCurrentNavigation();\n this._changeDetectorRef.markForCheck();\n });\n\n this._niceNavigationService.onNavigationRegistered.pipe(\n filter((x) => !!x),\n distinctUntilChanged(),\n takeUntil(this._unsubscribeAll)\n ).subscribe(([_, __, isActive]) => {\n if (!isActive) {\n return;\n }\n\n this.animateNextNavChange = !!this._navigation?.length;\n this._navigation = this._niceNavigationService.getCurrentNavigation();\n this._changeDetectorRef.markForCheck();\n });\n }\n\n public ngOnDestroy(): void {\n // Deregister the navigation component from the registry\n this._niceNavigationService.deregisterComponent(this.name);\n\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n // Navigation\n if (\"navigation\" in changes) {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n }\n\n /**\n * Refresh the component to apply the changes\n */\n public refresh(): void {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n\n // Execute the observable\n this.onRefreshed.next(true);\n }\n\n /**\n * Track by function for ngFor loops\n */\n public trackByFn(index: number, item: any): any {\n return item.id || index;\n }\n}\n\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { NiceNavigationService } from \"../../../navigation.service\";\nimport { NiceNavigationItem } from \"../../../navigation.types\";\n\n@Component({\n selector: \"nice-horizontal-navigation-basic-item\",\n templateUrl: \"./basic.component.html\",\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceHorizontalNavigationBasicItemComponent implements OnInit, OnDestroy {\n private _niceHorizontalNavigationComponent;\n private _unsubscribeAll = new Subject<any>();\n\n @Input()\n public item: NiceNavigationItem;\n\n @Input()\n public name: string;\n\n /**\n * Constructor\n */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _niceNavigationService: NiceNavigationService\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Get the parent navigation component\n this._niceHorizontalNavigationComponent = this._niceNavigationService.getComponent(this.name);\n\n // Subscribe to onRefreshed on the navigation component\n this._niceHorizontalNavigationComponent.onRefreshed.pipe(\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n}\n","<!-- Item wrapper -->\n<div\n class=\"nice-horizontal-navigation-item-wrapper\"\n [class.nice-horizontal-navigation-item-has-subtitle]=\"!!item.subtitle\"\n [ngClass]=\"item.classes?.wrapper\"\n>\n <!-- Item with an internal link -->\n <div\n class=\"nice-horizontal-navigation-item\"\n *ngIf=\"item.link && !item.externalLink && !item.function && !item.disabled\"\n [ngClass]=\"{ 'nice-horizontal-navigation-item-active-forced': item.active }\"\n [routerLink]=\"[item.link]\"\n [routerLinkActive]=\"'nice-horizontal-navigation-item-active'\"\n [routerLinkActiveOptions]=\"{ exact: item.exactMatch || false }\"\n [queryParams]=\"item?.queryParams\"\n [state]=\"item?.state\"\n >\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </div>\n\n <!-- Item with an external link -->\n <a\n class=\"nice-horizontal-navigation-item\"\n *ngIf=\"item.link && item.externalLink && !item.function && !item.disabled\"\n [href]=\"item.link\"\n >\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </a>\n\n <!-- Item with a function -->\n <div\n class=\"nice-horizontal-navigation-item\"\n *ngIf=\"!item.link && item.function && !item.disabled\"\n [ngClass]=\"{ 'nice-horizontal-navigation-item-active-forced': item.active }\"\n (click)=\"item.function(item)\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </div>\n\n <!-- Item with an internal link and function -->\n <div\n class=\"nice-horizontal-navigation-item\"\n *ngIf=\"item.link && !item.externalLink && item.function && !item.disabled\"\n [ngClass]=\"{ 'nice-horizontal-navigation-item-active-forced': item.active }\"\n [routerLink]=\"[item.link]\"\n [routerLinkActive]=\"'nice-horizontal-navigation-item-active'\"\n [routerLinkActiveOptions]=\"{ exact: item.exactMatch || false }\"\n [queryParams]=\"item?.queryParams\"\n [state]=\"item?.state\"\n (click)=\"item.function(item)\"\n >\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </div>\n\n <!-- Item with an external link and function -->\n <a\n class=\"nice-horizontal-navigation-item\"\n *ngIf=\"item.link && item.externalLink && item.function && !item.disabled\"\n [href]=\"item.link\"\n (click)=\"item.function(item)\"\n mat-menu-item\n >\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </a>\n\n <!-- Item with a no link and no function -->\n <div\n class=\"nice-horizontal-navigation-item\"\n *ngIf=\"!item.link && !item.function && !item.disabled\"\n [ngClass]=\"{'nice-horizontal-navigation-item-active-forced': item.active}\"\n >\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </div>\n\n <!-- Item is disabled -->\n <div\n class=\"nice-horizontal-navigation-item nice-horizontal-navigation-item-disabled\"\n *ngIf=\"item.disabled\"\n >\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </div>\n</div>\n\n<!-- Item template -->\n<ng-template #itemTemplate>\n <!-- Icon -->\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n *ngIf=\"item.icon && item.iconType === 'material'\"\n >\n {{ item.icon }}\n </mat-icon>\n\n <span class=\"nice-vertical-navigation-item-icon\" [ngClass]=\"item.icon\" *ngIf=\"item.icon && item.iconType == 'fontawesome'\"></span>\n\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n [svgIcon]=\"item.icon\"\n *ngIf=\"item.icon && item.iconType === 'svg'\"\n ></mat-icon>\n\n <!-- Title & Subtitle -->\n <div class=\"nice-horizontal-navigation-item-title-wrapper\">\n <div class=\"nice-horizontal-navigation-item-title\">\n <span [ngClass]=\"item.classes?.title\">\n {{ item.title | translate }}\n </span>\n </div>\n <div\n class=\"nice-horizontal-navigation-item-subtitle text-hint\"\n *ngIf=\"item.subtitle\"\n >\n <span [ngClass]=\"item.classes?.subtitle\">\n {{ item.subtitle | translate }}\n </span>\n </div>\n </div>\n\n <!-- Badge -->\n <div\n class=\"nice-horizontal-navigation-item-badge\"\n *ngIf=\"item.badge\"\n >\n <div\n class=\"nice-horizontal-navigation-item-badge-content\"\n [ngClass]=\"item.badge.classes\">\n {{ item.badge.title | translate }}\n </div>\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { NiceNavigationService } from \"../../../navigation.service\";\nimport { NiceNavigationItem } from \"../../../navigation.types\";\n\n@Component({\n selector: \"nice-horizontal-navigation-divider-item\",\n templateUrl: \"./divider.component.html\",\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceHorizontalNavigationDividerItemComponent implements OnInit, OnDestroy {\n private _niceHorizontalNavigationComponent;\n private _unsubscribeAll: Subject<any> = new Subject<any>();\n\n @Input()\n public item: NiceNavigationItem;\n\n @Input()\n public name: string;\n\n /**\n * Constructor\n */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _niceNavigationService: NiceNavigationService\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Get the parent navigation component\n this._niceHorizontalNavigationComponent = this._niceNavigationService.getComponent(this.name);\n\n // Subscribe to onRefreshed on the navigation component\n this._niceHorizontalNavigationComponent.onRefreshed.pipe(\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n}\n","<!-- Divider -->\n<div\n class=\"nice-horizontal-navigation-item-wrapper divider\"\n [ngClass]=\"item.classes?.wrapper\"\n></div>\n","import { Injector, Pipe, PipeTransform } from \"@angular/core\";\nimport { Observable, of } from \"rxjs\";\nimport { NiceNavigationItem } from \"../navigation.types\";\nimport { NavigationHideItemResolver } from \"../providers/hide-item.resolver\";\n\n@Pipe({ name: \"niceShouldHide\" })\nexport class NiceShouldHidePipe implements PipeTransform {\n constructor(private injector: Injector) {}\n\n public transform(value: NiceNavigationItem): Observable<boolean> {\n if (!value.hidden) {\n return of(false);\n }\n\n if (typeof value === \"boolean\") {\n return of(true);\n }\n\n if (typeof value.hidden !== \"function\") {\n return of(false);\n }\n\n const resolver = this.injector.get(value.hidden, null) as NavigationHideItemResolver;\n if (!resolver) {\n return of((value.hidden as (item: NiceNavigationItem) => boolean)(value));\n }\n\n return resolver.shouldHide(value);\n }\n}\n","import { BooleanInput } from \"@angular/cdk/coercion\";\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Input,\n OnDestroy,\n OnInit,\n ViewChild\n} from \"@angular/core\";\nimport { MatMenu } from \"@angular/material/menu\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { NiceNavigationService } from \"../../../navigation.service\";\nimport { NiceNavigationItem } from \"../../../navigation.types\";\n\n@Component({\n selector: \"nice-horizontal-navigation-branch-item\",\n templateUrl: \"./branch.component.html\",\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceHorizontalNavigationBranchItemComponent implements OnInit, OnDestroy {\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_child: BooleanInput;\n\n private _niceHorizontalNavigationComponent;\n private _unsubscribeAll = new Subject<any>();\n\n @Input()\n public child = false;\n\n @Input()\n public item: NiceNavigationItem;\n\n @Input()\n public name: string;\n\n @ViewChild(\"matMenu\", { static: true })\n public matMenu: MatMenu;\n\n /**\n * Constructor\n */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _niceNavigationService: NiceNavigationService\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Get the parent navigation component\n this._niceHorizontalNavigationComponent = this._niceNavigationService.getComponent(this.name);\n\n // Subscribe to onRefreshed on the navigation component\n this._niceHorizontalNavigationComponent.onRefreshed.pipe(\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Trigger the change detection\n */\n public triggerChangeDetection(): void {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n}\n","<div\n *ngIf=\"!child\"\n [ngClass]=\"{\n 'nice-horizontal-navigation-menu-active': trigger.menuOpen,\n 'nice-horizontal-navigation-menu-active-forced': item.active\n }\"\n [matMenuTriggerFor]=\"matMenu\"\n (onMenuOpen)=\"triggerChangeDetection()\"\n (onMenuClose)=\"triggerChangeDetection()\"\n #trigger=\"matMenuTrigger\"\n>\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: item}\"></ng-container>\n</div>\n\n<mat-menu\n class=\"nice-horizontal-navigation-menu-panel\"\n [overlapTrigger]=\"false\"\n #matMenu=\"matMenu\"\n>\n <ng-container *ngFor=\"let item of item.children\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"!(item | niceShouldHide | async)\">\n <!-- Basic -->\n <div\n class=\"nice-horizontal-navigation-menu-item\"\n *ngIf=\"item.type === 'basic'\"\n [disabled]=\"item.disabled\"\n mat-menu-item\n >\n <nice-horizontal-navigation-basic-item\n [item]=\"item\"\n [name]=\"name\"\n ></nice-horizontal-navigation-basic-item>\n </div>\n\n <!-- Branch: aside, collapsable, group -->\n <div\n class=\"nice-horizontal-navigation-menu-item\"\n *ngIf=\"item.type === 'aside' || item.type === 'collapsable' || item.type === 'group'\"\n [disabled]=\"item.disabled\"\n [matMenuTriggerFor]=\"branch.matMenu\"\n mat-menu-item\n >\n <ng-container *ngTemplateOutlet=\"itemTemplate; context: { $implicit: item }\"></ng-container>\n <nice-horizontal-navigation-branch-item\n [child]=\"true\"\n [item]=\"item\"\n [name]=\"name\"\n #branch\n ></nice-horizontal-navigation-branch-item>\n </div>\n\n <!-- Divider -->\n <div\n class=\"nice-horizontal-navigation-menu-item\"\n *ngIf=\"item.type === 'divider'\"\n mat-menu-item\n >\n <nice-horizontal-navigation-divider-item\n [item]=\"item\"\n [name]=\"name\"\n ></nice-horizontal-navigation-divider-item>\n </div>\n </ng-container>\n </ng-container>\n</mat-menu>\n\n<!-- Item template -->\n<ng-template\n let-item\n #itemTemplate\n>\n <div\n class=\"nice-horizontal-navigation-item-wrapper\"\n [class.nice-horizontal-navigation-item-has-subtitle]=\"!!item.subtitle\"\n [ngClass]=\"item.classes?.wrapper\"\n >\n <div\n class=\"nice-horizontal-navigation-item\"\n [ngClass]=\"{\n 'nice-horizontal-navigation-item-disabled': item.disabled,\n 'nice-horizontal-navigation-item-active-forced': item.active\n }\">\n\n <!-- Icon -->\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n *ngIf=\"item.icon && item.iconType === 'material'\"\n >\n {{ item.icon }}\n </mat-icon>\n\n <span class=\"nice-vertical-navigation-item-icon\" [ngClass]=\"item.icon\" *ngIf=\"item.icon && item.iconType == 'fontawesome'\"></span>\n\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n [svgIcon]=\"item.icon\"\n *ngIf=\"item.icon && item.iconType === 'svg'\"\n ></mat-icon>\n\n <!-- Title & Subtitle -->\n <div class=\"nice-horizontal-navigation-item-title-wrapper\">\n <div class=\"nice-horizontal-navigation-item-title\">\n <span [ngClass]=\"item.classes?.title\">\n {{ item.title | translate }}\n </span>\n </div>\n <div\n class=\"nice-horizontal-navigation-item-subtitle text-hint\"\n *ngIf=\"item.subtitle\"\n >\n <span [ngClass]=\"item.classes?.subtitle\">\n {{ item.subtitle | translate }}\n </span>\n </div>\n </div>\n\n <!-- Badge -->\n <div\n class=\"nice-horizontal-navigation-item-badge\"\n *ngIf=\"item.badge\">\n <div\n class=\"nice-horizontal-navigation-item-badge-content\"\n [ngClass]=\"item.badge.classes\"\n >\n {{ item.badge.title | translate }}\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { NiceNavigationService } from \"../../../navigation.service\";\nimport { NiceNavigationItem } from \"../../../navigation.types\";\n\n@Component({\n selector: \"nice-horizontal-navigation-spacer-item\",\n templateUrl: \"./spacer.component.html\",\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceHorizontalNavigationSpacerItemComponent implements OnInit, OnDestroy {\n private _niceHorizontalNavigationComponent;\n private _unsubscribeAll = new Subject<any>();\n\n @Input()\n public item: NiceNavigationItem;\n\n @Input()\n public name: string;\n\n /**\n * Constructor\n */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _niceNavigationService: NiceNavigationService\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Get the parent navigation component\n this._niceHorizontalNavigationComponent = this._niceNavigationService.getComponent(this.name);\n\n // Subscribe to onRefreshed on the navigation component\n this._niceHorizontalNavigationComponent.onRefreshed.pipe(\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n}\n","<!-- Spacer -->\n<div\n class=\"nice-horizontal-navigation-item-wrapper\"\n [ngClass]=\"item.classes?.wrapper\"\n></div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, ViewEncapsulation } from \"@angular/core\";\nimport { niceAnimations } from \"../../../animations\";\nimport { NiceUtilsService } from \"../../../providers/utils\";\nimport { NiceNavigationComponent } from \"../navigation.component\";\nimport { NiceNavigationService } from \"../navigation.service\";\nimport { NiceNavigationItem } from \"../navigation.types\";\n\n@Component({\n selector: \"nice-horizontal-navigation\",\n templateUrl: \"./horizontal.component.html\",\n animations: niceAnimations,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: \"niceHorizontalNavigation\"\n})\nexport class NiceHorizontalNavigationComponent extends NiceNavigationComponent {\n @Input()\n public name: string = this._niceUtilsService.randomId();\n\n @Input()\n public set navigation(navigation: NiceNavigationItem[]) {\n this._navigation = navigation;\n this._changeDetectorRef.markForCheck();\n }\n public get navigation(): NiceNavigationItem[] {\n return this._navigation;\n }\n\n /**\n * Constructor\n */\n constructor(\n _changeDetectorRef: ChangeDetectorRef,\n _niceNavigationService: NiceNavigationService,\n _niceUtilsService: NiceUtilsService\n ) {\n super(_changeDetectorRef, _niceNavigationService, _niceUtilsService);\n }\n}\n","<div class=\"nice-horizontal-navigation-wrapper\">\n <ng-container *ngFor=\"let item of navigation\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"!(item | niceShouldHide | async)\">\n <!-- Basic -->\n <nice-horizontal-navigation-basic-item\n class=\"nice-horizontal-navigation-menu-item\"\n *ngIf=\"item.type === 'basic'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-horizontal-navigation-basic-item>\n\n <!-- Branch: aside, collapsable, group -->\n <nice-horizontal-navigation-branch-item\n class=\"nice-horizontal-navigation-menu-item\"\n *ngIf=\"item.type === 'aside' || item.type === 'collapsable' || item.type === 'group'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-horizontal-navigation-branch-item>\n\n <!-- Spacer -->\n <nice-horizontal-navigation-spacer-item\n class=\"nice-horizontal-navigation-menu-item\"\n *ngIf=\"item.type === 'spacer'\"\n [item]=\"item\"\n [name]=\"name\"\n ></nice-horizontal-navigation-spacer-item>\n </ng-container>\n </ng-container>\n</div>\n","export class ScrollbarGeometry {\n public x: number;\n public y: number;\n\n public w: number;\n public h: number;\n\n constructor(x: number, y: number, w: number, h: number) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n}\n\nexport class ScrollbarPosition {\n public x: number | \"start\" | \"end\";\n public y: number | \"start\" | \"end\";\n\n constructor(x: number | \"start\" | \"end\", y: number | \"start\" | \"end\") {\n this.x = x;\n this.y = y;\n }\n}\n","import { BooleanInput, coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport { Platform } from \"@angular/cdk/platform\";\nimport { Directive, ElementRef, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { ScrollbarGeometry, ScrollbarPosition } from \"./scrollbar.types\";\nimport { merge } from \"lodash-es\";\nimport PerfectScrollbar from \"perfect-scrollbar\";\nimport { fromEvent, Subject } from \"rxjs\";\nimport { debounceTime, takeUntil } from \"rxjs/operators\";\n\n/**\n * Wrapper directive for the Perfect Scrollbar: https://github.com/mdbootstrap/perfect-scrollbar\n */\n@Directive({\n selector: \"[niceScrollbar]\",\n exportAs: \"niceScrollbar\"\n})\nexport class NiceScrollbarDirective implements OnChanges, OnInit, OnDestroy {\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_niceScrollbar: BooleanInput;\n\n private _animation: number;\n private _options: PerfectScrollbar.Options;\n private _ps: PerfectScrollbar;\n private _unsubscribeAll: Subject<any> = new Subject<any>();\n\n @Input()\n public niceScrollbar = true;\n\n @Input()\n public niceScrollbarOptions: PerfectScrollbar.Options;\n\n /**\n * Constructor\n */\n constructor(\n private _elementRef: ElementRef,\n private _platform: Platform,\n private _router: Router\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Getter for _elementRef\n */\n public get elementRef(): ElementRef {\n return this._elementRef;\n }\n\n /**\n * Getter for _ps\n */\n public get ps(): PerfectScrollbar | null {\n return this._ps;\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On changes\n */\n public ngOnChanges(changes: SimpleChanges): void {\n // Enabled\n if (\"niceScrollbar\" in changes) {\n // Interpret empty string as 'true'\n this.niceScrollbar = coerceBooleanProperty(changes.niceScrollbar.currentValue);\n\n // If enabled, init the directive\n if (this.niceScrollbar) {\n this._init();\n }\n // Otherwise destroy it\n else {\n this._destroy();\n }\n }\n\n // Scrollbar options\n if (\"niceScrollbarOptions\" in changes) {\n // Merge the options\n this._options = merge({}, this._options, changes.niceScrollbarOptions.currentValue);\n\n // Return if not initialized\n if (!this._ps) {\n return;\n }\n\n // Destroy and re-init the PerfectScrollbar to update its options\n setTimeout(() => {\n this._destroy();\n });\n\n setTimeout(() => {\n this._init();\n });\n }\n }\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Subscribe to window resize event\n fromEvent(window, \"resize\")\n .pipe(\n takeUntil(this._unsubscribeAll),\n debounceTime(150)\n )\n .subscribe(() => {\n\n // Update the PerfectScrollbar\n this.update();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n this._destroy();\n\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Is enabled\n */\n public isEnabled(): boolean {\n return this.niceScrollbar;\n }\n\n /**\n * Update the scrollbar\n */\n public update(): void {\n // Return if not initialized\n if (!this._ps) {\n return;\n }\n\n // Update the PerfectScrollbar\n this._ps.update();\n }\n\n /**\n * Destroy the scrollbar\n */\n public destroy(): void {\n this.ngOnDestroy();\n }\n\n /**\n * Returns the geometry of the scrollable element\n */\n public geometry(prefix: string = \"scroll\"): ScrollbarGeometry {\n return new ScrollbarGeometry(\n this._elementRef.nativeElement[prefix + \"Left\"],\n this._elementRef.nativeElement[prefix + \"Top\"],\n this._elementRef.nativeElement[prefix + \"Width\"],\n this._elementRef.nativeElement[prefix + \"Height\"]);\n }\n\n /**\n * Returns the position of the scrollable element\n */\n public position(absolute: boolean = false): ScrollbarPosition {\n let scrollbarPosition;\n\n if (!absolute && this._ps) {\n scrollbarPosition = new ScrollbarPosition(\n this._ps.reach.x || 0,\n this._ps.reach.y || 0\n );\n } else {\n scrollbarPosition = new ScrollbarPosition(\n this._elementRef.nativeElement.scrollLeft,\n this._elementRef.nativeElement.scrollTop\n );\n }\n\n return scrollbarPosition;\n }\n\n /**\n * Scroll to\n */\n public scrollTo(x: number, y?: number, speed?: number): void {\n if (y == null && speed == null) {\n this.animateScrolling(\"scrollTop\", x, speed);\n } else {\n if (x != null) {\n this.animateScrolling(\"scrollLeft\", x, speed);\n }\n\n if (y != null) {\n this.animateScrolling(\"scrollTop\", y, speed);\n }\n }\n }\n\n /**\n * Scroll to X\n */\n public scrollToX(x: number, speed?: number): void {\n this.animateScrolling(\"scrollLeft\", x, speed);\n }\n\n /**\n * Scroll to Y\n */\n public scrollToY(y: number, speed?: number): void {\n this.animateScrolling(\"scrollTop\", y, speed);\n }\n\n /**\n * Scroll to top\n */\n public scrollToTop(offset: number = 0, speed?: number): void {\n this.animateScrolling(\"scrollTop\", offset, speed);\n }\n\n /**\n * Scroll to bottom\n */\n public scrollToBottom(offset: number = 0, speed?: number): void {\n const top = this._elementRef.nativeElement.scrollHeight - this._elementRef.nativeElement.clientHeight;\n this.animateScrolling(\"scrollTop\", top - offset, speed);\n }\n\n /**\n * Scroll to left\n */\n public scrollToLeft(offset: number = 0, speed?: number): void {\n this.animateScrolling(\"scrollLeft\", offset, speed);\n }\n\n /**\n * Scroll to right\n */\n public scrollToRight(offset: number = 0, speed?: number): void {\n const left = this._elementRef.nativeElement.scrollWidth - this._elementRef.nativeElement.clientWidth;\n this.animateScrolling(\"scrollLeft\", left - offset, speed);\n }\n\n /**\n * Scroll to element\n */\n public scrollToElement(qs: string, offset: number = 0, ignoreVisible: boolean = false, speed?: number): void {\n const element = this._elementRef.nativeElement.querySelector(qs);\n\n if (!element) {\n return;\n }\n\n const elementPos = element.getBoundingClientRect();\n const scrollerPos = this._elementRef.nativeElement.getBoundingClientRect();\n\n if (this._elementRef.nativeElement.classList.contains(\"ps--active-x\")) {\n if (ignoreVisible && elementPos.right <= (scrollerPos.right - Math.abs(offset))) {\n return;\n }\n\n const currentPos = this._elementRef.nativeElement.scrollLeft;\n const position = elementPos.left - scrollerPos.left + currentPos;\n\n this.animateScrolling(\"scrollLeft\", position + offset, speed);\n }\n\n if (this._elementRef.nativeElement.classList.contains(\"ps--active-y\")) {\n if (ignoreVisible && elementPos.bottom <= (scrollerPos.bottom - Math.abs(offset))) {\n return;\n }\n\n const currentPos = this._elementRef.nativeElement.scrollTop;\n const position = elementPos.top - scrollerPos.top + currentPos;\n\n this.animateScrolling(\"scrollTop\", position + offset, speed);\n }\n }\n\n /**\n * Animate scrolling\n */\n public animateScrolling(target: string, value: number, speed?: number): void {\n if (this._animation) {\n window.cancelAnimationFrame(this._animation);\n this._animation = null;\n }\n\n if (!speed || typeof window === \"undefined\") {\n this._elementRef.nativeElement[target] = value;\n } else if (value !== this._elementRef.nativeElement[target]) {\n let newValue = 0;\n let scrollCount = 0;\n\n let oldTimestamp = performance.now();\n let oldValue = this._elementRef.nativeElement[target];\n\n const cosParameter = (oldValue - value) / 2;\n\n const step = (newTimestamp: number) => {\n scrollCount += Math.PI / (speed / (newTimestamp - oldTimestamp));\n newValue = Math.round(value + cosParameter + cosParameter * Math.cos(scrollCount));\n\n // Only continue animation if scroll position has not changed\n if (this._elementRef.nativeElement[target] === oldValue) {\n if (scrollCount >= Math.PI) {\n this.animateScrolling(target, value, 0);\n } else {\n this._elementRef.nativeElement[target] = newValue;\n\n // On a zoomed out page the resulting offset may differ\n oldValue = this._elementRef.nativeElement[target];\n oldTimestamp = newTimestamp;\n\n this._animation = window.requestAnimationFrame(step);\n }\n }\n };\n\n window.requestAnimationFrame(step);\n }\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Initialize\n */\n private _init(): void {\n // Return if already initialized\n if (this._ps) {\n return;\n }\n\n // Return if on mobile or not on browser\n if (this._platform.ANDROID || this._platform.IOS || !this._platform.isBrowser) {\n this.niceScrollbar = false;\n return;\n }\n\n // Initialize the PerfectScrollbar\n this._ps = new PerfectScrollbar(this._elementRef.nativeElement, {...this._options});\n }\n\n /**\n * Destroy\n */\n private _destroy(): void {\n // Return if not initialized\n if (!this._ps) {\n return;\n }\n\n // Destroy the PerfectScrollbar\n this._ps.destroy();\n\n // Clean up\n this._ps = null;\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NiceScrollbarDirective } from \"./scrollbar.directive\";\n\n@NgModule({\n declarations: [\n NiceScrollbarDirective\n ],\n exports: [\n NiceScrollbarDirective\n ]\n})\nexport class NiceScrollbarModule {}\n","import { FlexibleConnectedPositionStrategy, Overlay, OverlayRef } from \"@angular/cdk/overlay\";\nimport { Platform } from \"@angular/cdk/platform\";\nimport { ComponentPortal } from \"@angular/cdk/portal\";\nimport { AfterViewInit, Directive, ElementRef, Input, NgZone, OnDestroy, ViewContainerRef } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { NiceNavigationItem } from \"../navigation.types\";\n\n@Directive({ selector: \"[niceShowHint]\" })\nexport class NiceShowHintDirective implements AfterViewInit, OnDestroy {\n @Input()\n public shouldShow = false;\n\n @Input()\n public item: NiceNavigationItem;\n\n private _pointerExitEventsInitialized = false;\n private _portal: ComponentPortal<any>;\n private _hintInstance: any;\n private _overlayRef: OverlayRef;\n\n private readonly _passiveListeners: (readonly [string, EventListenerOrEventListenerObject])[] = [];\n private readonly unsubscribeAll$ = new Subject<void>();\n\n constructor(\n private _overlay: Overlay,\n private _elementRef: ElementRef<HTMLElement>,\n private _viewContainerRef: ViewContainerRef,\n private _ngZone: NgZone,\n private _platform: Platform\n ) {}\n\n public ngAfterViewInit(): void {\n this._setupPointerEnterEventsIfNeeded();\n\n if (this.item.hint) {\n this._portal = new ComponentPortal<any>(this.item.hint.component, this._viewContainerRef);\n }\n }\n\n public ngOnDestroy(): void {\n this.unsubscribeAll$.next();\n this.unsubscribeAll$.complete();\n }\n\n public show(): void {\n if (!this.shouldShow || !this.item.hint || this._isHintVisible()) {\n return;\n }\n\n const overlayRef = this._createOverlay();\n this._detach();\n const instance = (this._hintInstance = overlayRef.attach(this._portal).instance);\n instance._triggerElement = this._elementRef.nativeElement;\n instance\n .afterHidden()\n .pipe(takeUntil(this.unsubscribeAll$))\n .subscribe(() => this._detach());\n\n instance.show();\n }\n\n public hide(): void {\n const instance = this._hintInstance;\n\n if (instance) {\n this._detach();\n }\n }\n\n private _createOverlay(): OverlayRef {\n if (this._overlayRef) {\n const existingStrategy = this._overlayRef.getConfig()\n .positionStrategy as FlexibleConnectedPositionStrategy;\n\n // @ts-ignore\n if (!origin && existingStrategy._origin instanceof ElementRef) {\n return this._overlayRef;\n }\n\n this._detach();\n }\n\n // Create connected position strategy that listens for scroll events to reposition.\n const strategy = this._overlay\n .position()\n .flexibleConnectedTo(this._elementRef)\n .withPositions([\n {\n originX: \"center\",\n originY: \"bottom\",\n overlayX: \"start\",\n overlayY: \"top\",\n offsetY: 8\n }\n ])\n .withFlexibleDimensions(false);\n\n strategy.positionChanges.pipe(takeUntil(this.unsubscribeAll$)).subscribe(change => {\n if (this._hintInstance) {\n if (change.scrollableViewProperties.isOverlayClipped && this._hintInstance.isVisible()) {\n // After position changes occur and the overlay is clipped by\n // a parent scrollable then close the tooltip.\n this._ngZone.run(() => this.hide());\n }\n }\n });\n\n this._overlayRef = this._overlay.create({\n positionStrategy: strategy\n });\n\n this._overlayRef\n .detachments()\n .pipe(takeUntil(this.unsubscribeAll$))\n .subscribe(() => this._detach());\n\n this._overlayRef\n .outsidePointerEvents()\n .pipe(takeUntil(this.unsubscribeAll$))\n .subscribe(() => this._hintInstance?._handleBodyInteraction());\n\n return this._overlayRef;\n }\n\n private _detach() {\n if (this._overlayRef && this._overlayRef.hasAttached()) {\n this._overlayRef.detach();\n }\n\n this._hintInstance = null;\n }\n\n private _isHintVisible(): boolean {\n return !!this._hintInstance && this._hintInstance.isVisible();\n }\n\n private _setupPointerEnterEventsIfNeeded() {\n // Optimization: Defer hooking up events if there's no message or the tooltip is disabled.\n if (this._passiveListeners.length) {\n return;\n }\n\n // The mouse events shouldn't be bound on mobile devices, because they can prevent the\n // first tap from firing its click event or can cause the tooltip to open for clicks.\n if (this._platformSupportsMouseEvents()) {\n this._passiveListeners.push([\n \"mouseenter\",\n () => {\n this._setupPointerExitEventsIfNeeded();\n this.show();\n },\n ]);\n }\n\n this._addListeners(this._passiveListeners);\n }\n\n private _setupPointerExitEventsIfNeeded() {\n if (this._pointerExitEventsInitialized) {\n return;\n }\n this._pointerExitEventsInitialized = true;\n\n const exitListeners: (readonly [string, EventListenerOrEventListenerObject])[] = [];\n if (this._platformSupportsMouseEvents()) {\n exitListeners.push(\n [\n \"mouseleave\",\n event => {\n const newTarget = (event as MouseEvent).relatedTarget as Node | null;\n if (!newTarget || !this._overlayRef?.overlayElement.contains(newTarget)) {\n this.hide();\n }\n },\n ]\n );\n }\n\n this._addListeners(exitListeners);\n this._passiveListeners.push(...exitListeners);\n }\n\n private _platformSupportsMouseEvents() {\n return !this._platform.IOS && !this._platform.ANDROID;\n }\n\n private _addListeners(listeners: (readonly [string, EventListenerOrEventListenerObject])[]) {\n listeners.forEach(([event, listener]) => {\n this._elementRef.nativeElement.addEventListener(event, listener);\n });\n }\n}\n","import { Injector, Pipe, PipeTransform } from \"@angular/core\";\nimport { Observable, combineLatest, of } from \"rxjs\";\nimport { map } from \"rxjs/operators\";\nimport { NiceNavigationItem } from \"../navigation.types\";\n\n@Pipe({ name: \"niceShouldShowHint\" })\nexport class NiceShouldShowHintPipe implements PipeTransform {\n constructor(private injector: Injector) {}\n\n public transform(value: NiceNavigationItem | NiceNavigationItem[]): Observable<boolean> {\n if (!Array.isArray(value)) {\n value = [value];\n }\n\n return combineLatest(value.map(x => this.transformHint(x))).pipe(map(res => res.some(x => x)));\n }\n\n private transformHint(value: NiceNavigationItem): Observable<boolean> {\n if (!value.hint) {\n return of(false);\n }\n\n const resolver = this.injector.get(value.hint.resolver);\n if (!resolver) {\n return of(false);\n }\n\n return resolver.shouldShowHint();\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { ActivatedRoute, Router } from \"@angular/router\";\nimport { Subject } from \"rxjs\";\nimport { map, takeUntil } from \"rxjs/operators\";\nimport { NiceUtilsService } from \"../../../../../providers/utils\";\nimport { NiceNavigationService } from \"../../../navigation.service\";\nimport { NiceNavigationItem } from \"../../../navigation.types\";\n\n@Component({\n selector: \"nice-vertical-navigation-basic-item\",\n templateUrl: \"./basic.component.html\",\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceVerticalNavigationBasicItemComponent implements OnInit, OnDestroy {\n private _niceVerticalNavigationComponent;\n private _unsubscribeAll: Subject<any> = new Subject<any>();\n\n @Input()\n public item: NiceNavigationItem;\n\n @Input()\n public name: string;\n\n public itemActive$ = this._route.url.pipe(\n map(() => {\n const url = this._router.url.split(\"?\").shift();\n if (this.item.exactMatch === true) {\n return url === this.item.link;\n }\n return url.startsWith(this.item.link) && url.length >= this.item.link.length;\n })\n );\n\n /**\n * Constructor\n */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _niceNavigationService: NiceNavigationService,\n private _niceUtilsService: NiceUtilsService,\n private _route: ActivatedRoute,\n private _router: Router\n ) {}\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Get the parent navigation component\n this._niceVerticalNavigationComponent = this._niceNavigationService.getComponent(this.name);\n\n // Subscribe to onRefreshed on the navigation component\n this._niceVerticalNavigationComponent.onRefreshed.pipe(\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n}\n","<!-- Item wrapper -->\n<div\n class=\"nice-vertical-navigation-item-wrapper\"\n [class.nice-vertical-navigation-item-has-subtitle]=\"!!item.subtitle\"\n [ngClass]=\"item.classes?.wrapper\"\n>\n\n <!-- Item with an internal link -->\n <a\n class=\"nice-vertical-navigation-item\"\n *ngIf=\"item.link && !item.externalLink && !item.function && !item.disabled\"\n [ngClass]=\"{'nice-vertical-navigation-item-active-forced': item.active}\"\n [routerLink]=\"[item.link]\"\n [routerLinkActive]=\"'nice-vertical-navigation-item-active'\"\n [routerLinkActiveOptions]=\"{exact: item.exactMatch || false}\"\n [queryParams]=\"item?.queryParams\"\n [state]=\"item?.state\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </a>\n\n <!-- Item with an external link -->\n <a\n class=\"nice-vertical-navigation-item\"\n *ngIf=\"item.link && item.externalLink && !item.function && !item.disabled\"\n [href]=\"item.link\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </a>\n\n <!-- Item with a function -->\n <div\n class=\"nice-vertical-navigation-item\"\n *ngIf=\"!item.link && item.function && !item.disabled\"\n [ngClass]=\"{'nice-vertical-navigation-item-active-forced': item.active}\"\n (click)=\"item.function(item)\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </div>\n\n <!-- Item with an internal link and function -->\n <a\n class=\"nice-vertical-navigation-item\"\n *ngIf=\"item.link && !item.externalLink && item.function && !item.disabled\"\n [ngClass]=\"{'nice-vertical-navigation-item-active-forced': item.active}\"\n [routerLink]=\"[item.link]\"\n [routerLinkActive]=\"'nice-vertical-navigation-item-active'\"\n [routerLinkActiveOptions]=\"{exact: item.exactMatch || false}\"\n (click)=\"item.function(item)\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </a>\n\n <!-- Item with an external link and function -->\n <a\n class=\"nice-vertical-navigation-item\"\n *ngIf=\"item.link && item.externalLink && item.function && !item.disabled\"\n [href]=\"item.link\"\n (click)=\"item.function(item)\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </a>\n\n <!-- Item with a no link and no function -->\n <div\n class=\"nice-vertical-navigation-item\"\n *ngIf=\"!item.link && !item.function && !item.disabled\"\n [ngClass]=\"{'nice-vertical-navigation-item-active-forced': item.active}\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </div>\n\n <!-- Item is disabled -->\n <div\n class=\"nice-vertical-navigation-item nice-vertical-navigation-item-disabled\"\n *ngIf=\"item.disabled\">\n <ng-container *ngTemplateOutlet=\"itemTemplate\"></ng-container>\n </div>\n\n</div>\n\n<!-- Item template -->\n<ng-template #itemTemplate>\n <ng-container *ngIf=\"{ showHint: item | niceShouldShowHint | async } as ctx\">\n <!-- Icon -->\n <div class=\"nice-vertical-navigation-item-icon-wrapper\">\n <ng-container *ngIf=\"itemActive$ | async; else notActive\">\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n *ngIf=\"item.icon && item.iconType === 'material'\"\n >\n {{ item.activeIcon || item.icon }}\n </mat-icon>\n\n <i class=\"nice-vertical-navigation-item-icon fontawesome\" [ngClass]=\"item.activeIcon || item.icon\" *ngIf=\"item.icon && item.iconType == 'fontawesome'\"></i>\n\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n [svgIcon]=\"item.activeIcon || item.icon\"\n *ngIf=\"item.icon && item.iconType == 'svg'\"\n ></mat-icon>\n </ng-container>\n\n <ng-template #notActive>\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n *ngIf=\"item.icon && item.iconType === 'material'\"\n >\n {{ item.icon }}\n </mat-icon>\n\n <i class=\"nice-vertical-navigation-item-icon fontawesome\" [ngClass]=\"item.icon\" *ngIf=\"item.icon && item.iconType == 'fontawesome'\"></i>\n\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n [svgIcon]=\"item.icon\"\n *ngIf=\"item.icon && item.iconType == 'svg'\"\n ></mat-icon>\n </ng-template>\n\n <div *ngIf=\"ctx.showHint && item.icon\" class=\"nice-vertical-navigation-hint\"></div>\n </div>\n\n <!-- Title & Subtitle -->\n <div class=\"nice-vertical-navigation-item-title-wrapper\">\n <div class=\"nice-vertical-navigation-item-title\" niceShowHint [shouldShow]=\"ctx.showHint\" [item]=\"item\">\n <span [ngClass]=\"item.classes?.title\">\n {{ item.title | translate }}\n </span>\n\n <div *ngIf=\"ctx.showHint\" class=\"nice-vertical-navigation-hint\"></div>\n </div>\n <div\n class=\"nice-vertical-navigation-item-subtitle\"\n *ngIf=\"item.subtitle\"\n >\n <span [ngClass]=\"item.classes?.subtitle\">\n {{ item.subtitle | translate }}\n </span>\n </div>\n </div>\n\n <!-- Badge -->\n <div\n class=\"nice-vertical-navigation-item-badge\"\n *ngIf=\"item.badge\"\n >\n <div\n class=\"nice-vertical-navigation-item-badge-content\"\n [ngClass]=\"item.badge.classes\"\n >\n {{ item.badge.title | translate }}\n </div>\n </div>\n </ng-container>\n</ng-template>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { NiceNavigationService } from \"../../../navigation.service\";\nimport { NiceNavigationItem } from \"../../../navigation.types\";\n\n@Component({\n selector: \"nice-vertical-navigation-divider-item\",\n templateUrl: \"./divider.component.html\",\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceVerticalNavigationDividerItemComponent implements OnInit, OnDestroy {\n private _niceVerticalNavigationComponent;\n private _unsubscribeAll = new Subject<any>();\n\n @Input()\n public item: NiceNavigationItem;\n\n @Input()\n public name: string;\n\n /**\n * Constructor\n */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _niceNavigationService: NiceNavigationService\n ) {}\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Get the parent navigation component\n this._niceVerticalNavigationComponent = this._niceNavigationService.getComponent(this.name);\n\n // Subscribe to onRefreshed on the navigation component\n this._niceVerticalNavigationComponent.onRefreshed.pipe(\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n}\n","<!-- Divider -->\n<div\n class=\"nice-vertical-navigation-item-wrapper divider\"\n [ngClass]=\"item.classes?.wrapper\"\n></div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { NiceNavigationService } from \"../../../navigation.service\";\nimport { NiceNavigationItem } from \"../../../navigation.types\";\n\n@Component({\n selector: \"nice-vertical-navigation-spacer-item\",\n templateUrl: \"./spacer.component.html\",\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceVerticalNavigationSpacerItemComponent implements OnInit, OnDestroy {\n private _niceVerticalNavigationComponent;\n private _unsubscribeAll: Subject<any> = new Subject<any>();\n\n @Input()\n public item: NiceNavigationItem;\n\n @Input()\n public name: string;\n\n /**\n * Constructor\n */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _niceNavigationService: NiceNavigationService\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Get the parent navigation component\n this._niceVerticalNavigationComponent = this._niceNavigationService.getComponent(this.name);\n\n // Subscribe to onRefreshed on the navigation component\n this._niceVerticalNavigationComponent.onRefreshed.pipe(\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n}\n","<!-- Spacer -->\n<div\n class=\"nice-vertical-navigation-item-wrapper\"\n [ngClass]=\"item.classes?.wrapper\"\n></div>\n","import { BooleanInput } from \"@angular/cdk/coercion\";\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n HostBinding,\n Input,\n OnDestroy,\n OnInit\n} from \"@angular/core\";\nimport { NavigationEnd, Router } from \"@angular/router\";\nimport { BehaviorSubject, Subject } from \"rxjs\";\nimport { filter, takeUntil } from \"rxjs/operators\";\nimport { niceAnimations } from \"../../../../../animations\";\nimport { NiceNavigationService } from \"../../../navigation.service\";\nimport { NiceNavigationItem } from \"../../../navigation.types\";\n\n@Component({\n selector: \"nice-vertical-navigation-collapsable-item\",\n templateUrl: \"./collapsable.component.html\",\n styles: [],\n animations: niceAnimations,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceVerticalNavigationCollapsableItemComponent implements OnInit, OnDestroy {\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_autoCollapse: BooleanInput;\n\n private _niceVerticalNavigationComponent;\n private _unsubscribeAll = new Subject<any>();\n\n @Input()\n public autoCollapse: boolean;\n\n @Input()\n public item: NiceNavigationItem;\n\n @Input()\n public name: string;\n\n public isCollapsed = true;\n public isExpanded = false;\n\n public hasChildActivated$ = new BehaviorSubject(false);\n\n /**\n * Constructor\n */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _router: Router,\n private _niceNavigationService: NiceNavigationService\n ) {}\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Host binding for component classes\n */\n @HostBinding(\"class\")\n public get classList(): any {\n return {\n \"nice-vertical-navigation-item-collapsed\": this.isCollapsed,\n \"nice-vertical-navigation-item-expanded\": this.isExpanded\n };\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Get the parent navigation component\n this._niceVerticalNavigationComponent = this._niceNavigationService.getComponent(this.name);\n\n // If the item has a children that has a matching url with the current url, expand...\n if (this._hasActiveChild(this.item, this._router.url)) {\n this.hasChildActivated$.next(true);\n this.expand();\n }\n // Otherwise...\n else {\n // If the autoCollapse is on, collapse...\n if (this.autoCollapse) {\n this.hasChildActivated$.next(false);\n this.collapse();\n }\n }\n\n // Listen for the onCollapsableItemCollapsed from the service\n this._niceVerticalNavigationComponent.onCollapsableItemCollapsed\n .pipe(takeUntil(this._unsubscribeAll))\n .subscribe((collapsedItem) => {\n\n // Check if the collapsed item is null\n if (collapsedItem === null) {\n return;\n }\n\n // Collapse if this is a children of the collapsed item\n if (this._isChildrenOf(collapsedItem, this.item)) {\n this.collapse();\n }\n });\n\n // Listen for the onCollapsableItemExpanded from the service if the autoCollapse is on\n if (this.autoCollapse) {\n this._niceVerticalNavigationComponent.onCollapsableItemExpanded\n .pipe(takeUntil(this._unsubscribeAll))\n .subscribe((expandedItem) => {\n\n // Check if the expanded item is null\n if (expandedItem === null) {\n return;\n }\n\n // Check if this is a parent of the expanded item\n if (this._isChildrenOf(this.item, expandedItem)) {\n return;\n }\n\n // Check if this has a children with a matching url with the current active url\n if (this._hasActiveChild(this.item, this._router.url)) {\n return;\n }\n\n // Check if this is the expanded item\n if (this.item === expandedItem) {\n return;\n }\n\n // If none of the above conditions are matched, collapse this item\n this.collapse();\n });\n }\n\n // Attach a listener to the NavigationEnd event\n this._router.events\n .pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n takeUntil(this._unsubscribeAll)\n )\n .subscribe((event: NavigationEnd) => {\n\n // If the item has a children that has a matching url with the current url, expand...\n if (this._hasActiveChild(this.item, event.urlAfterRedirects)) {\n this.hasChildActivated$.next(true);\n this.expand();\n }\n // Otherwise...\n else {\n this.hasChildActivated$.next(false);\n\n // If the autoCollapse is on, collapse...\n if (this.autoCollapse) {\n this.collapse();\n }\n }\n });\n\n // Subscribe to onRefreshed on the navigation component\n this._niceVerticalNavigationComponent.onRefreshed.pipe(\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Check if the given item has the given url\n * in one of its children\n */\n private _hasActiveChild(item: NiceNavigationItem, currentUrl: string): boolean {\n const children = item.children;\n\n if (!children) {\n return false;\n }\n\n for (const child of children) {\n if (child.children) {\n if (this._hasActiveChild(child, currentUrl)) {\n return true;\n }\n }\n\n // Check if the child has a link and is active\n if (child.link && this._router.isActive(child.link, child.exactMatch || false)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Check if this is a children\n * of the given item\n */\n private _isChildrenOf(parent: NiceNavigationItem, item: NiceNavigationItem): boolean {\n const children = parent.children;\n\n if (!children) {\n return false;\n }\n\n if (children.indexOf(item) > -1) {\n return true;\n }\n\n for (const child of children) {\n if (child.children) {\n if (this._isChildrenOf(child, item)) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Collapse\n */\n public collapse(): void {\n // Return if the item is disabled\n if (this.item.disabled) {\n return;\n }\n\n // Return if the item is already collapsed\n if (this.isCollapsed) {\n return;\n }\n\n // Collapse it\n this.isCollapsed = true;\n this.isExpanded = !this.isCollapsed;\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n\n // Execute the observable\n this._niceVerticalNavigationComponent.onCollapsableItemCollapsed.next(this.item);\n }\n\n /**\n * Expand\n */\n public expand(): void {\n // Return if the item is disabled\n if (this.item.disabled) {\n return;\n }\n\n // Return if the item is already expanded\n if (!this.isCollapsed) {\n return;\n }\n\n // Expand it\n this.isCollapsed = false;\n this.isExpanded = !this.isCollapsed;\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n\n // Execute the observable\n this._niceVerticalNavigationComponent.onCollapsableItemExpanded.next(this.item);\n }\n\n /**\n * Toggle collapsable\n */\n public toggleCollapsable(): void {\n // Toggle collapse/expand\n if (this.isCollapsed) {\n this.expand();\n } else {\n this.collapse();\n }\n }\n\n /**\n * Track by function for ngFor loops\n */\n public trackByFn(index: number, item: any): any {\n return item.id || index;\n }\n}\n","<div\n class=\"nice-vertical-navigation-item-wrapper\"\n [class.nice-vertical-navigation-item-has-subtitle]=\"!!item.subtitle\"\n [ngClass]=\"item.classes?.wrapper\"\n>\n <div\n class=\"nice-vertical-navigation-item\"\n [ngClass]=\"{ 'nice-vertical-navigation-item-disabled': item.disabled }\"\n [class.child-activated]=\"hasChildActivated$ | async\"\n (click)=\"toggleCollapsable()\"\n *ngIf=\"{ showHint: item.children ?? [] | niceShouldShowHint | async } as ctx\"\n >\n <!-- Icon -->\n <div class=\"nice-vertical-navigation-item-icon-wrapper\" style=\"position: relative\">\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n *ngIf=\"item.icon && item.iconType === 'material'\"\n >\n {{ item.icon }}\n </mat-icon>\n\n <i class=\"nice-vertical-navigation-item-icon fontawesome\" [ngClass]=\"item.icon\" *ngIf=\"item.icon && item.iconType == 'fontawesome'\"></i>\n\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n [svgIcon]=\"item.icon\"\n *ngIf=\"item.icon && item.iconType == 'svg'\"\n ></mat-icon>\n\n <div *ngIf=\"ctx.showHint && item.icon\" class=\"nice-vertical-navigation-hint\"></div>\n </div>\n\n <!-- Title & Subtitle -->\n <div class=\"nice-vertical-navigation-item-title-wrapper\">\n <div class=\"nice-vertical-navigation-item-title\">\n <span [ngClass]=\"item.classes?.title\">\n {{ item.title | translate }}\n </span>\n\n <div *ngIf=\"ctx.showHint && isCollapsed\" class=\"nice-vertical-navigation-hint\"></div>\n </div>\n <div\n class=\"nice-vertical-navigation-item-subtitle\"\n *ngIf=\"item.subtitle\"\n >\n <span [ngClass]=\"item.classes?.subtitle\">\n {{ item.subtitle | translate }}\n </span>\n </div>\n </div>\n\n <!-- Badge -->\n <div\n class=\"nice-vertical-navigation-item-badge\"\n *ngIf=\"item.badge\">\n\n <div\n class=\"nice-vertical-navigation-item-badge-content\"\n [ngClass]=\"item.badge.classes\"\n >\n {{ item.badge.title | translate }}\n </div>\n </div>\n\n <!-- Arrow -->\n <mat-icon class=\"nice-vertical-navigation-item-arrow icon-size-4\">chevron_right</mat-icon>\n </div>\n</div>\n\n<div\n class=\"nice-vertical-navigation-item-children\"\n *ngIf=\"!isCollapsed\"\n @expandCollapse\n>\n <ng-container *ngFor=\"let item of item.children; trackBy: trackByFn\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"!(item | niceShouldHide | async)\">\n <!-- Basic -->\n <nice-vertical-navigation-basic-item\n *ngIf=\"item.type === 'basic'\"\n [item]=\"item\"\n [name]=\"name\"\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 ></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 ></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 </ng-container>\n</div>\n","import { BooleanInput } from \"@angular/cdk/coercion\";\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { takeUntil } from \"rxjs/operators\";\nimport { NiceNavigationService } from \"../../../navigation.service\";\nimport { NiceNavigationItem } from \"../../../navigation.types\";\n\n@Component({\n selector: \"nice-vertical-navigation-group-item\",\n templateUrl: \"./group.component.html\",\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceVerticalNavigationGroupItemComponent implements OnInit, OnDestroy {\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_autoCollapse: BooleanInput;\n\n private _niceVerticalNavigationComponent;\n private _unsubscribeAll = new Subject<any>();\n\n @Input()\n public autoCollapse: boolean;\n\n @Input()\n public item: NiceNavigationItem;\n\n @Input()\n public name: string;\n\n /**\n * Constructor\n */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _niceNavigationService: NiceNavigationService\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Get the parent navigation component\n this._niceVerticalNavigationComponent = this._niceNavigationService.getComponent(this.name);\n\n // Subscribe to onRefreshed on the navigation component\n this._niceVerticalNavigationComponent.onRefreshed.pipe(\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Track by function for ngFor loops\n */\n public trackByFn(index: number, item: any): any {\n return item.id || index;\n }\n}\n","<!-- Item wrapper -->\n<div\n class=\"nice-vertical-navigation-item-wrapper\"\n [class.nice-vertical-navigation-item-has-subtitle]=\"!!item.subtitle\"\n [ngClass]=\"item.classes?.wrapper\"\n>\n <div class=\"nice-vertical-navigation-item\">\n <!-- Icon -->\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n *ngIf=\"item.icon && item.iconType === 'material'\"\n >\n {{ item.icon }}\n </mat-icon>\n\n <span class=\"nice-vertical-navigation-item-icon\" [ngClass]=\"item.icon\" *ngIf=\"item.icon && item.iconType == 'fontawesome'\"></span>\n\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n [svgIcon]=\"item.icon\"\n *ngIf=\"item.icon && item.iconType === 'svg'\"\n ></mat-icon>\n\n <!-- Title & Subtitle -->\n <div class=\"nice-vertical-navigation-item-title-wrapper\">\n <div class=\"nice-vertical-navigation-item-title\">\n <span [ngClass]=\"item.classes?.title\">\n {{ item.title | translate }}\n </span>\n </div>\n <div\n class=\"nice-vertical-navigation-item-subtitle\"\n *ngIf=\"item.subtitle\"\n >\n <span [ngClass]=\"item.classes?.subtitle\">\n {{ item.subtitle | translate }}\n </span>\n </div>\n </div>\n\n <!-- Badge -->\n <div\n class=\"nice-vertical-navigation-item-badge\"\n *ngIf=\"item.badge\"\n >\n <div\n class=\"nice-vertical-navigation-item-badge-content\"\n [ngClass]=\"item.badge.classes\"\n >\n {{ item.badge.title | translate }}\n </div>\n </div>\n </div>\n</div>\n\n<ng-container *ngFor=\"let item of item.children; trackBy: trackByFn\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"!(item | niceShouldHide | async)\">\n <!-- Basic -->\n <nice-vertical-navigation-basic-item\n *ngIf=\"item.type === 'basic'\"\n [item]=\"item\"\n [name]=\"name\"\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 ></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 ></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</ng-container>\n","import { BooleanInput } from \"@angular/cdk/coercion\";\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnChanges, OnDestroy, OnInit, SimpleChanges } from \"@angular/core\";\nimport { NavigationEnd, Router } from \"@angular/router\";\nimport { Subject } from \"rxjs\";\nimport { filter, takeUntil } from \"rxjs/operators\";\nimport { NiceNavigationService } from \"../../../navigation.service\";\nimport { NiceNavigationItem } from \"../../../navigation.types\";\n\n@Component({\n selector: \"nice-vertical-navigation-aside-item\",\n templateUrl: \"./aside.component.html\",\n styles: [],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceVerticalNavigationAsideItemComponent implements OnChanges, OnInit, OnDestroy {\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_autoCollapse: BooleanInput;\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_skipChildren: BooleanInput;\n\n private _niceVerticalNavigationComponent;\n private _unsubscribeAll = new Subject<any>();\n\n @Input()\n public activeItemId: string;\n\n @Input()\n public autoCollapse: boolean;\n\n @Input()\n public item: NiceNavigationItem;\n\n @Input()\n public name: string;\n\n @Input()\n public skipChildren: boolean;\n\n public active = false;\n\n /**\n * Constructor\n */\n constructor(\n private _changeDetectorRef: ChangeDetectorRef,\n private _router: Router,\n private _niceNavigationService: NiceNavigationService\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On changes\n */\n public ngOnChanges(changes: SimpleChanges): void {\n // Active item id\n if (\"activeItemId\" in changes) {\n // Mark if active\n this._markIfActive(this._router.url);\n }\n }\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Mark if active\n this._markIfActive(this._router.url);\n\n // Attach a listener to the NavigationEnd event\n this._router.events\n .pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n takeUntil(this._unsubscribeAll)\n )\n .subscribe((event: NavigationEnd) => {\n\n // Mark if active\n this._markIfActive(event.urlAfterRedirects);\n });\n\n // Get the parent navigation component\n this._niceVerticalNavigationComponent = this._niceNavigationService.getComponent(this.name);\n\n // Subscribe to onRefreshed on the navigation component\n this._niceVerticalNavigationComponent.onRefreshed.pipe(\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Check if the given item has the given url\n * in one of its children\n */\n private _hasActiveChild(item: NiceNavigationItem, currentUrl: string): boolean {\n const children = item.children;\n\n if (!children) {\n return false;\n }\n\n for (const child of children) {\n if (child.children) {\n if (this._hasActiveChild(child, currentUrl)) {\n return true;\n }\n }\n\n // Skip items other than 'basic'\n if (child.type !== \"basic\") {\n continue;\n }\n\n // Check if the child has a link and is active\n if (child.link && this._router.isActive(child.link, child.exactMatch || false)) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Decide and mark if the item is active\n */\n private _markIfActive(currentUrl: string): void {\n // Check if the activeItemId is equals to this item id\n this.active = this.activeItemId === this.item.id;\n\n // If the aside has a children that is active,\n // always mark it as active\n if (this._hasActiveChild(this.item, currentUrl)) {\n this.active = true;\n }\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Track by function for ngFor loops\n */\n public trackByFn(index: number, item: any): any {\n return item.id || index;\n }\n}\n","<div\n class=\"nice-vertical-navigation-item-wrapper\"\n [class.nice-vertical-navigation-item-has-subtitle]=\"!!item.subtitle\"\n [ngClass]=\"item.classes?.wrapper\"\n>\n <div\n class=\"nice-vertical-navigation-item\"\n [ngClass]=\"{\n 'nice-vertical-navigation-item-active': active,\n 'nice-vertical-navigation-item-disabled': item.disabled,\n 'nice-vertical-navigation-item-active-forced': item.active\n }\"\n >\n <!-- Icon -->\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n *ngIf=\"item.icon && item.iconType === 'material'\"\n >\n {{ item.icon }}\n </mat-icon>\n\n <span class=\"nice-vertical-navigation-item-icon\" [ngClass]=\"item.icon\" *ngIf=\"item.icon && item.iconType == 'fontawesome'\"></span>\n\n <mat-icon\n class=\"nice-vertical-navigation-item-icon\"\n [ngClass]=\"item.classes?.icon\"\n [svgIcon]=\"item.icon\"\n *ngIf=\"item.icon && item.iconType === 'svg'\"\n ></mat-icon>\n\n <!-- Title & Subtitle -->\n <div class=\"nice-vertical-navigation-item-title-wrapper\">\n <div class=\"nice-vertical-navigation-item-title\">\n <span [ngClass]=\"item.classes?.title\">\n {{ item.title | translate }}\n </span>\n </div>\n <div\n class=\"nice-vertical-navigation-item-subtitle\"\n *ngIf=\"item.subtitle\"\n >\n <span [ngClass]=\"item.classes?.subtitle\">\n {{ item.subtitle | translate }}\n </span>\n </div>\n </div>\n\n <!-- Badge -->\n <div\n class=\"nice-vertical-navigation-item-badge\"\n *ngIf=\"item.badge\"\n >\n <div\n class=\"nice-vertical-navigation-item-badge-content\"\n [ngClass]=\"item.badge.classes\"\n >\n {{ item.badge.title | translate }}\n </div>\n </div>\n </div>\n</div>\n\n<ng-container *ngIf=\"!skipChildren\">\n <div class=\"nice-vertical-navigation-item-children\">\n <ng-container *ngFor=\"let item of item.children; trackBy: trackByFn\">\n <!-- Skip the hidden items -->\n <ng-container *ngIf=\"(item.hidden && !item.hidden(item)) || !item.hidden\">\n <!-- Basic -->\n <nice-vertical-navigation-basic-item\n *ngIf=\"item.type === 'basic'\"\n [item]=\"item\"\n [name]=\"name\"\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 ></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 ></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 </ng-container>\n </div>\n</ng-container>\n","import { animate, AnimationBuilder, AnimationPlayer, style } from \"@angular/animations\";\nimport { BooleanInput, coerceBooleanProperty } from \"@angular/cdk/coercion\";\nimport { ScrollStrategy, ScrollStrategyOptions } from \"@angular/cdk/overlay\";\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n HostListener,\n Input,\n OnChanges,\n OnInit,\n Output,\n QueryList,\n Renderer2,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { NavigationEnd, Router } from \"@angular/router\";\nimport { merge, ReplaySubject, Subscription } from \"rxjs\";\nimport { delay, filter, takeUntil } from \"rxjs/operators\";\nimport { niceAnimations } from \"../../../animations\";\nimport { NiceScrollbarDirective } from \"../../../directives/scrollbar\";\nimport { NiceUtilsService } from \"../../../providers/utils\";\nimport { NiceNavigationComponent } from \"../navigation.component\";\nimport { NiceNavigationService } from \"../navigation.service\";\nimport {\n NiceNavigationItem,\n NiceVerticalNavigationAppearance,\n NiceVerticalNavigationMode,\n NiceVerticalNavigationPosition\n} from \"../navigation.types\";\n\n@Component({\n selector: \"nice-vertical-navigation\",\n templateUrl: \"./vertical.component.html\",\n animations: niceAnimations,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: \"niceVerticalNavigation\"\n})\nexport class NiceVerticalNavigationComponent extends NiceNavigationComponent implements OnChanges, OnInit, AfterViewInit {\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_inner: BooleanInput;\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_opened: BooleanInput;\n // tslint:disable-next-line:variable-name\n public static ngAcceptInputType_transparentOverlay: BooleanInput;\n\n private _animationsEnabled = false;\n private _asideOverlay: HTMLElement;\n private readonly _handleAsideOverlayClick: any;\n private readonly _handleOverlayClick: any;\n private _overlay: HTMLElement;\n private _player: AnimationPlayer;\n private _scrollStrategy: ScrollStrategy = this._scrollStrategyOptions.block();\n private _niceScrollbarDirectives!: QueryList<NiceScrollbarDirective>;\n private _niceScrollbarDirectivesSubscription: Subscription;\n\n @Input()\n public name: string = this._niceUtilsService.randomId();\n\n @Input()\n public appearance: NiceVerticalNavigationAppearance = \"default\";\n\n @Input()\n public autoCollapse = true;\n\n @Input()\n public inner = false;\n\n @Input()\n public mode: NiceVerticalNavigationMode = \"side\";\n\n @Input()\n public opened = true;\n\n @Input()\n public hovered = false;\n\n @Input()\n public position: NiceVerticalNavigationPosition = \"left\";\n\n @Input()\n public transparentOverlay = false;\n\n @Output()\n public readonly appearanceChanged = new EventEmitter<NiceVerticalNavigationAppearance>();\n\n @Output()\n public readonly modeChanged = new EventEmitter<NiceVerticalNavigationMode>();\n\n @Output()\n public readonly openedChanged = new EventEmitter<boolean>();\n\n @Output()\n public readonly positionChanged = new EventEmitter<NiceVerticalNavigationPosition>();\n\n @ViewChild(\"navigationContent\")\n private _navigationContentEl: ElementRef;\n\n @Input()\n public set navigation(navigation: NiceNavigationItem[]) {\n this._navigation = navigation;\n this._changeDetectorRef.markForCheck();\n }\n public get navigation(): NiceNavigationItem[] {\n return this._navigation;\n }\n\n public activeAsideItemId: string | null = null;\n public onCollapsableItemCollapsed = new ReplaySubject<NiceNavigationItem>(1);\n public onCollapsableItemExpanded = new ReplaySubject<NiceNavigationItem>(1);\n\n /**\n * Constructor\n */\n constructor(\n _changeDetectorRef: ChangeDetectorRef,\n _niceNavigationService: NiceNavigationService,\n _niceUtilsService: NiceUtilsService,\n private _animationBuilder: AnimationBuilder,\n private _elementRef: ElementRef,\n private _renderer2: Renderer2,\n private _router: Router,\n private _scrollStrategyOptions: ScrollStrategyOptions\n ) {\n super(_changeDetectorRef, _niceNavigationService, _niceUtilsService);\n\n this._handleAsideOverlayClick = () => {\n this.closeAside();\n };\n this._handleOverlayClick = () => {\n this.close();\n };\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Host binding for component classes\n */\n @HostBinding(\"class\")\n public get classList(): any {\n return {\n \"nice-vertical-navigation-animations-enabled\": this._animationsEnabled,\n [`nice-vertical-navigation-appearance-${this.appearance}`]: true,\n \"nice-vertical-navigation-hover\": this.hovered,\n \"nice-vertical-navigation-inner\": this.inner,\n \"nice-vertical-navigation-mode-over\": this.mode === \"over\",\n \"nice-vertical-navigation-mode-side\": this.mode === \"side\",\n \"nice-vertical-navigation-opened\": this.opened,\n \"nice-vertical-navigation-position-left\": this.position === \"left\",\n \"nice-vertical-navigation-position-right\": this.position === \"right\"\n };\n }\n\n /**\n * Host binding for component inline styles\n */\n @HostBinding(\"style\")\n public get styleList(): any {\n return {\n \"visibility\": this.opened ? \"visible\" : \"hidden\"\n };\n }\n\n /**\n * Setter for niceScrollbarDirectives\n */\n @ViewChildren(NiceScrollbarDirective)\n public set niceScrollbarDirectives(niceScrollbarDirectives: QueryList<NiceScrollbarDirective>) {\n // Store the directives\n this._niceScrollbarDirectives = niceScrollbarDirectives;\n\n // Return if there are no directives\n if (niceScrollbarDirectives.length === 0) {\n return;\n }\n\n // Unsubscribe the previous subscriptions\n if (this._niceScrollbarDirectivesSubscription) {\n this._niceScrollbarDirectivesSubscription.unsubscribe();\n }\n\n // Update the scrollbars on collapsable items' collapse/expand\n this._niceScrollbarDirectivesSubscription =\n merge(\n this.onCollapsableItemCollapsed,\n this.onCollapsableItemExpanded\n )\n .pipe(\n takeUntil(this._unsubscribeAll),\n delay(250)\n )\n .subscribe(() => {\n\n // Loop through the scrollbars and update them\n niceScrollbarDirectives.forEach((niceScrollbarDirective) => {\n niceScrollbarDirective.update();\n });\n });\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On changes\n *\n * @param changes\n */\n public ngOnChanges(changes: SimpleChanges): void {\n super.ngOnChanges(changes);\n\n // Appearance\n if (\"appearance\" in changes) {\n // Execute the observable\n this.appearanceChanged.next(changes.appearance.currentValue);\n }\n\n // Inner\n if (\"inner\" in changes) {\n // Coerce the value to a boolean\n this.inner = coerceBooleanProperty(changes.inner.currentValue);\n }\n\n // Mode\n if (\"mode\" in changes) {\n // Get the previous and current values\n const currentMode = changes.mode.currentValue;\n const previousMode = changes.mode.previousValue;\n\n // Disable the animations\n this._disableAnimations();\n\n // If the mode changes: 'over -> side'\n if (previousMode === \"over\" && currentMode === \"side\") {\n // Hide the overlay\n this._hideOverlay();\n }\n\n // If the mode changes: 'side -> over'\n if (previousMode === \"side\" && currentMode === \"over\") {\n // Close the aside\n this.closeAside();\n\n // If the navigation is opened\n if (this.opened) {\n // Show the overlay\n this._showOverlay();\n }\n }\n\n // Execute the observable\n this.modeChanged.next(currentMode);\n\n // Enable the animations after a delay\n // The delay must be bigger than the current transition-duration\n // to make sure nothing will be animated while the mode changing\n setTimeout(() => {\n this._enableAnimations();\n }, 500);\n }\n\n // Opened\n if (\"opened\" in changes) {\n // Coerce the value to a boolean\n this.opened = coerceBooleanProperty(changes.opened.currentValue);\n\n // Open/close the navigation\n this._toggleOpened(this.opened);\n }\n\n // Position\n if (\"position\" in changes) {\n // Execute the observable\n this.positionChanged.next(changes.position.currentValue);\n }\n\n // Transparent overlay\n if (\"transparentOverlay\" in changes) {\n // Coerce the value to a boolean\n this.transparentOverlay = coerceBooleanProperty(changes.transparentOverlay.currentValue);\n }\n }\n\n /**\n * On init\n */\n public ngOnInit(): void {\n super.ngOnInit();\n\n // Make sure the name input is not an empty string\n if (this.name === \"\") {\n this.name = this._niceUtilsService.randomId();\n }\n\n // Subscribe to the 'NavigationEnd' event\n this._router.events\n .pipe(\n filter(event => event instanceof NavigationEnd),\n takeUntil(this._unsubscribeAll)\n )\n .subscribe(() => {\n // If the mode is 'over' and the navigation is opened...\n if (this.mode === \"over\" && this.opened) {\n // Close the navigation\n this.close();\n }\n\n // If the mode is 'side' and the aside is active...\n if (this.mode === \"side\" && this.activeAsideItemId) {\n // Close the aside\n this.closeAside();\n }\n });\n }\n\n /**\n * After view init\n */\n public ngAfterViewInit(): void {\n setTimeout(() => {\n\n // Return if 'navigation content' element does not exist\n if (!this._navigationContentEl) {\n return;\n }\n\n // If 'navigation content' element doesn't have\n // perfect scrollbar activated on it...\n if (!this._navigationContentEl.nativeElement.classList.contains(\"ps\")) {\n // Find the active item\n const activeItem = this._navigationContentEl.nativeElement.querySelector(\".nice-vertical-navigation-item-active\");\n\n // If the active item exists, scroll it into view\n if (activeItem) {\n activeItem.scrollIntoView();\n }\n }\n // Otherwise\n else {\n // Go through all the scrollbar directives\n this._niceScrollbarDirectives.forEach((niceScrollbarDirective) => {\n\n // Skip if not enabled\n if (!niceScrollbarDirective.isEnabled()) {\n return;\n }\n\n // Scroll to the active element\n niceScrollbarDirective.scrollToElement(\".nice-vertical-navigation-item-active\", -120, true);\n });\n }\n });\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Public methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Open the navigation\n */\n public open(): void {\n // Return if the navigation is already open\n if (this.opened) {\n return;\n }\n\n // Set the opened\n this._toggleOpened(true);\n }\n\n /**\n * Close the navigation\n */\n public close(): void {\n // Return if the navigation is already closed\n if (!this.opened) {\n return;\n }\n\n // Close the aside\n this.closeAside();\n\n // Set the opened\n this._toggleOpened(false);\n }\n\n /**\n * Toggle the navigation\n */\n public toggle(): void {\n // Toggle\n if (this.opened) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * Open the aside\n */\n public openAside(item: NiceNavigationItem): void {\n // Return if the item is disabled\n if (item.disabled || !item.id) {\n return;\n }\n\n // Open\n this.activeAsideItemId = item.id;\n\n // Show the aside overlay\n this._showAsideOverlay();\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Close the aside\n */\n public closeAside(): void {\n // Close\n this.activeAsideItemId = null;\n\n // Hide the aside overlay\n this._hideAsideOverlay();\n\n // Mark for check\n this._changeDetectorRef.markForCheck();\n }\n\n /**\n * Toggle the aside\n */\n public toggleAside(item: NiceNavigationItem): void {\n // Toggle\n if (this.activeAsideItemId === item.id) {\n this.closeAside();\n } else {\n this.openAside(item);\n }\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Enable the animations\n *\n * @private\n */\n private _enableAnimations(): void {\n // Return if the animations are already enabled\n if (this._animationsEnabled) {\n return;\n }\n\n // Enable the animations\n this._animationsEnabled = true;\n }\n\n /**\n * Disable the animations\n *\n * @private\n */\n private _disableAnimations(): void {\n // Return if the animations are already disabled\n if (!this._animationsEnabled) {\n return;\n }\n\n // Disable the animations\n this._animationsEnabled = false;\n }\n\n /**\n * Show the overlay\n *\n * @private\n */\n private _showOverlay(): void {\n // Return if there is already an overlay\n if (this._asideOverlay) {\n return;\n }\n\n // Create the overlay element\n this._overlay = this._renderer2.createElement(\"div\");\n\n // Add a class to the overlay element\n this._overlay.classList.add(\"nice-vertical-navigation-overlay\");\n\n // Add a class depending on the transparentOverlay option\n if (this.transparentOverlay) {\n this._overlay.classList.add(\"nice-vertical-navigation-overlay-transparent\");\n }\n\n // Append the overlay to the parent of the navigation\n this._renderer2.appendChild(this._elementRef.nativeElement.parentElement, this._overlay);\n\n // Enable block scroll strategy\n this._scrollStrategy.enable();\n\n // Create the enter animation and attach it to the player\n this._player = this._animationBuilder.build([\n animate(\"300ms cubic-bezier(0.25, 0.8, 0.25, 1)\", style({opacity: 1}))\n ]).create(this._overlay);\n\n // Play the animation\n this._player.play();\n\n // Add an event listener to the overlay\n this._overlay.addEventListener(\"click\", this._handleOverlayClick);\n }\n\n /**\n * Hide the overlay\n *\n * @private\n */\n private _hideOverlay(): void {\n if (!this._overlay) {\n return;\n }\n\n // Create the leave animation and attach it to the player\n this._player = this._animationBuilder.build([\n animate(\"300ms cubic-bezier(0.25, 0.8, 0.25, 1)\", style({opacity: 0}))\n ]).create(this._overlay);\n\n // Play the animation\n this._player.play();\n\n // Once the animation is done...\n this._player.onDone(() => {\n\n // If the overlay still exists...\n if (this._overlay) {\n // Remove the event listener\n this._overlay.removeEventListener(\"click\", this._handleOverlayClick);\n\n // Remove the overlay\n this._overlay.parentNode.removeChild(this._overlay);\n this._overlay = null;\n }\n\n // Disable block scroll strategy\n this._scrollStrategy.disable();\n });\n }\n\n /**\n * Show the aside overlay\n *\n * @private\n */\n private _showAsideOverlay(): void {\n // Return if there is already an overlay\n if (this._asideOverlay) {\n return;\n }\n\n // Create the aside overlay element\n this._asideOverlay = this._renderer2.createElement(\"div\");\n\n // Add a class to the aside overlay element\n this._asideOverlay.classList.add(\"nice-vertical-navigation-aside-overlay\");\n\n // Append the aside overlay to the parent of the navigation\n this._renderer2.appendChild(this._elementRef.nativeElement.parentElement, this._asideOverlay);\n\n // Create the enter animation and attach it to the player\n this._player =\n this._animationBuilder\n .build([\n animate(\"300ms cubic-bezier(0.25, 0.8, 0.25, 1)\", style({opacity: 1}))\n ]).create(this._asideOverlay);\n\n // Play the animation\n this._player.play();\n\n // Add an event listener to the aside overlay\n this._asideOverlay.addEventListener(\"click\", this._handleAsideOverlayClick);\n }\n\n /**\n * Hide the aside overlay\n *\n * @private\n */\n private _hideAsideOverlay(): void {\n if (!this._asideOverlay) {\n return;\n }\n\n // Create the leave animation and attach it to the player\n this._player =\n this._animationBuilder\n .build([\n animate(\"300ms cubic-bezier(0.25, 0.8, 0.25, 1)\", style({opacity: 0}))\n ]).create(this._asideOverlay);\n\n // Play the animation\n this._player.play();\n\n // Once the animation is done...\n this._player.onDone(() => {\n\n // If the aside overlay still exists...\n if (this._asideOverlay) {\n // Remove the event listener\n this._asideOverlay.removeEventListener(\"click\", this._handleAsideOverlayClick);\n\n // Remove the aside overlay\n this._asideOverlay.parentNode.removeChild(this._asideOverlay);\n this._asideOverlay = null;\n }\n });\n }\n\n /**\n * On mouseenter\n */\n @HostListener(\"mouseenter\")\n public _onMouseenter(): void {\n // Enable the animations\n this._enableAnimations();\n\n // Set the hovered\n this.hovered = true;\n }\n\n /**\n * On mouseleave\n */\n @HostListener(\"mouseleave\")\n public _onMouseleave(): void {\n // Enable the animations\n this._enableAnimations();\n\n // Set the hovered\n this.hovered = false;\n }\n\n /**\n * Open/close the navigation\n *\n * @param open\n * @private\n */\n private _toggleOpened(open: boolean): void {\n // Set the opened\n this.opened = open;\n\n // Enable the animations\n this._enableAnimations();\n\n // If the navigation opened, and the mode\n // is 'over', show the overlay\n if (this.mode === \"over\") {\n if (this.opened) {\n this._showOverlay();\n } else {\n this._hideOverlay();\n }\n }\n\n // Execute the observable\n this.openedChanged.next(open);\n }\n}\n","<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 (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 ></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 ></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 ></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 ></nice-vertical-navigation-aside-item>\n </ng-container>\n </ng-container>\n</div>\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatDividerModule } from \"@angular/material/divider\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatMenuModule } from \"@angular/material/menu\";\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\nimport { RouterModule } from \"@angular/router\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { NiceScrollbarModule } from \"../../directives/scrollbar\";\nimport { NiceShowHintDirective } from \"./directives/show-hint.directive\";\nimport { NiceHorizontalNavigationBasicItemComponent } from \"./horizontal/components/basic/basic.component\";\nimport { NiceHorizontalNavigationBranchItemComponent } from \"./horizontal/components/branch/branch.component\";\nimport { NiceHorizontalNavigationDividerItemComponent } from \"./horizontal/components/divider/divider.component\";\nimport { NiceHorizontalNavigationSpacerItemComponent } from \"./horizontal/components/spacer/spacer.component\";\nimport { NiceHorizontalNavigationComponent } from \"./horizontal/horizontal.component\";\nimport { NiceNavigationComponent } from \"./navigation.component\";\nimport { NiceShouldHidePipe } from \"./pipes/should-hide.pipe\";\nimport { NiceShouldShowHintPipe } from \"./pipes/should-show-hint.pipe\";\nimport { NiceVerticalNavigationAsideItemComponent } from \"./vertical/components/aside/aside.component\";\nimport { NiceVerticalNavigationBasicItemComponent } from \"./vertical/components/basic/basic.component\";\nimport { NiceVerticalNavigationCollapsableItemComponent } from \"./vertical/components/collapsable/collapsable.component\";\nimport { NiceVerticalNavigationDividerItemComponent } from \"./vertical/components/divider/divider.component\";\nimport { NiceVerticalNavigationGroupItemComponent } from \"./vertical/components/group/group.component\";\nimport { NiceVerticalNavigationSpacerItemComponent } from \"./vertical/components/spacer/spacer.component\";\nimport { NiceVerticalNavigationComponent } from \"./vertical/vertical.component\";\n\n@NgModule({\n imports: [\n CommonModule,\n RouterModule,\n MatButtonModule,\n MatDividerModule,\n MatIconModule,\n MatMenuModule,\n MatTooltipModule,\n NiceScrollbarModule,\n TranslateModule,\n ],\n declarations: [\n NiceNavigationComponent,\n NiceHorizontalNavigationBasicItemComponent,\n NiceHorizontalNavigationBranchItemComponent,\n NiceHorizontalNavigationDividerItemComponent,\n NiceHorizontalNavigationSpacerItemComponent,\n NiceHorizontalNavigationComponent,\n NiceVerticalNavigationAsideItemComponent,\n NiceVerticalNavigationBasicItemComponent,\n NiceVerticalNavigationCollapsableItemComponent,\n NiceVerticalNavigationDividerItemComponent,\n NiceVerticalNavigationGroupItemComponent,\n NiceVerticalNavigationSpacerItemComponent,\n NiceVerticalNavigationComponent,\n\n NiceShouldHidePipe,\n NiceShouldShowHintPipe,\n NiceShowHintDirective\n ],\n exports: [\n NiceHorizontalNavigationComponent,\n NiceVerticalNavigationComponent\n ]\n})\nexport class NiceNavigationModule {\n}\n","import { Observable } from \"rxjs\";\nimport { NiceNavigationItem } from \"../navigation.types\";\n\nexport abstract class NavigationHideItemResolver {\n public abstract shouldHide(item: NiceNavigationItem): Observable<boolean>;\n}\n","import { Observable } from \"rxjs\";\n\nexport abstract class NavigationHintResolver {\n public abstract shouldShowHint(): Observable<boolean>;\n}\n","import { Component, EventEmitter, forwardRef, HostBinding, Input, Output } from \"@angular/core\";\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { niceAnimations } from \"../../animations\";\n\n@Component({\n selector: \"nice-search-bar\",\n templateUrl: \"./search-bar.template.html\",\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NiceSearchBarComponent),\n multi: true\n }\n ],\n animations: niceAnimations\n})\nexport class NiceSearchBarComponent implements ControlValueAccessor {\n @Input()\n public collapsed = true;\n\n @Output()\n public collapse = new EventEmitter<boolean>();\n\n public searchValue: string;\n public opened = false;\n\n private propagateChanges = (value: string) => {};\n\n @HostBinding(\"class\")\n public get classList(): any {\n return {\n \"search-opened\": this.opened\n };\n }\n\n public toggleCollapsed(): void {\n this.collapsed = !this.collapsed;\n this.collapse.emit(this.collapsed);\n }\n\n public registerOnChange(fn: (value: string) => void): void {\n this.propagateChanges = fn;\n }\n\n public registerOnTouched(fn: any): void {\n // NO-OP\n }\n\n public writeValue(value: string): void {\n this.searchValue = value;\n }\n\n public onSearchChange(value: string) {\n this.propagateChanges(value);\n }\n\n public open(): void {\n if (this.opened) {\n return;\n }\n\n this.opened = true;\n }\n\n public close(): void {\n if (!this.opened) {\n return;\n }\n\n this.searchValue = \"\";\n this.opened = false;\n }\n}\n","<button mat-icon-button *ngIf=\"!opened\" (click)=\"open()\">\n <mat-icon [svgIcon]=\"'heroicons_outline:search'\"></mat-icon>\n</button>\n\n<div class=\"absolute inset-0 flex items-center flex-shrink-0 z-99 bg-default\" *ngIf=\"opened\" @slideInTop @slideOutTop >\n <mat-icon class=\"absolute ml-6 sm:ml-8\" [svgIcon]=\"'heroicons_outline:search'\"></mat-icon>\n <input class=\"w-full h-full px-16 sm:px-18 bg-transparent\" [ngModel]=\"searchValue\" (ngModelChange)=\"onSearchChange($event)\">\n <button class=\"absolute top-1/2 right-5 sm:right-7 flex-shrink-0 w-10 h-10 -mt-5\" mat-icon-button (click)=\"close()\">\n <mat-icon [svgIcon]=\"'heroicons_outline:x'\"></mat-icon>\n </button>\n</div>\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { RouterModule } from \"@angular/router\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { NiceSearchBarComponent } from \"./search-bar.component\";\nimport { FormsModule } from \"@angular/forms\";\n\n@NgModule({\n declarations: [\n NiceSearchBarComponent\n ],\n imports: [\n CommonModule,\n RouterModule,\n\n MatButtonModule,\n MatIconModule,\n FormsModule\n ],\n exports: [\n NiceSearchBarComponent\n ]\n})\nexport class NiceSearchBarModule {\n}\n","import { Component, Inject, OnInit, ViewEncapsulation } from \"@angular/core\";\nimport { MAT_DIALOG_DATA, MatDialogRef } from \"@angular/material/dialog\";\n\nexport interface NiceAlertConfig {\n type: \"success\" | \"warning\" | \"info\";\n title?: string;\n message?: string;\n buttons: string[];\n}\n\n@Component({\n selector: \"nice-alert\",\n templateUrl: \"sweet-alert.template.html\",\n styleUrls: [\"sweet-alert.style.scss\"],\n encapsulation: ViewEncapsulation.None\n})\nexport class NiceSweetAlertComponent implements OnInit {\n public lottieConfig = {\n path: \"assets/animations/success.json\",\n autoplay: true,\n loop: false\n };\n\n constructor(\n @Inject(MAT_DIALOG_DATA) public alertConfig: NiceAlertConfig,\n private dialogRef: MatDialogRef<NiceSweetAlertComponent>\n ) {\n this.lottieConfig.path = this.getAnimationPath();\n }\n\n public ngOnInit() {}\n\n public handleAnimation(animation) {\n animation.setSpeed(1.0);\n }\n\n public confirm() {\n this.dialogRef.close(true);\n }\n\n public close() {\n this.dialogRef.close(false);\n }\n\n public getAnimationPath(): string {\n switch (this.alertConfig.type) {\n case \"success\":\n return \"assets/animations/success.json\";\n case \"warning\":\n return \"assets/animations/warning.json\";\n case \"info\":\n return \"assets/animations/info.json\";\n }\n }\n\n public getConfirmButtonClass(): string {\n switch (this.alertConfig.type) {\n case \"success\":\n return \"mat-accent\";\n case \"warning\":\n return \"mat-warn\";\n case \"info\":\n return \"bg-light-blue-500\";\n }\n }\n}\n","<mat-dialog-content class=\"mat-typography mb-12 text-center\">\n <nice-lottie\n [options]=\"lottieConfig\"\n [width]=\"250\"\n (animCreated)=\"handleAnimation($event)\"\n ></nice-lottie>\n <h2 class=\"mt-8\">{{ alertConfig?.title }}</h2>\n <span [innerHTML]=\"alertConfig?.message\"></span>\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <ng-container *ngFor=\"let button of alertConfig.buttons; let i = index\">\n <button mat-raised-button class=\"mr-4\" [ngClass]=\"getConfirmButtonClass()\" *ngIf=\"i === 0\" (click)=\"confirm()\">\n {{ button }}\n </button>\n <button mat-button (click)=\"close()\" *ngIf=\"i !== 0\">{{ button }}</button>\n </ng-container>\n</mat-dialog-actions>\n","import { InjectionToken } from \"@angular/core\";\n\nexport const NICE_ALERT_OPTIONS = new InjectionToken(\"nice_alert_options\");\n","import { Inject, Injectable, Optional, Type } from \"@angular/core\";\nimport { MatDialog } from \"@angular/material/dialog\";\nimport { TranslateService } from \"@ngx-translate/core\";\nimport { map, switchMap } from \"rxjs/operators\";\nimport { NiceSweetAlertComponent } from \"./sweet-alert.component\";\nimport { Observable } from \"rxjs\";\nimport { NICE_ALERT_OPTIONS } from \"./sweet-alert.constant\";\n\nexport interface NiceSweetAlertOptions {\n customModal?: Type<any>;\n}\n\n@Injectable()\nexport class NiceSweetAlertService {\n private readonly modal: Type<any>;\n\n constructor(\n @Optional() @Inject(NICE_ALERT_OPTIONS) private options: NiceSweetAlertOptions,\n private matDialog: MatDialog,\n private translateService: TranslateService\n ) {\n this.modal = this.options?.customModal ?? NiceSweetAlertComponent;\n }\n\n public success(titleKey: string, messageKey: string, buttonsKey: string[], params?: object): Observable<boolean> {\n return this.getTranslations(titleKey, messageKey, buttonsKey, params).pipe(\n switchMap(([title, message, buttons]) => {\n return this.matDialog\n .open(this.modal, {\n panelClass: \"nice-alert-modal\",\n data: {\n type: \"success\",\n title,\n message,\n buttons\n }\n })\n .afterClosed();\n })\n );\n }\n\n public warning(titleKey: string, messageKey: string, buttonsKey: string[], params?: object): Observable<boolean> {\n return this.getTranslations(titleKey, messageKey, buttonsKey, params).pipe(\n switchMap(([title, message, buttons]) => {\n return this.matDialog\n .open(this.modal, {\n panelClass: \"nice-alert-modal\",\n data: {\n type: \"warning\",\n title,\n message,\n buttons\n }\n })\n .afterClosed();\n })\n );\n }\n\n public info(titleKey: string, messageKey: string, buttonsKey: string[], params?: object): Observable<boolean> {\n return this.getTranslations(titleKey, messageKey, buttonsKey, params).pipe(\n switchMap(([title, message, buttons]) => {\n return this.matDialog\n .open(this.modal, {\n panelClass: \"nice-alert-modal\",\n data: {\n type: \"info\",\n title,\n message,\n buttons\n }\n })\n .afterClosed();\n })\n );\n }\n\n private getTranslations(\n title: string,\n message: string,\n buttons: string[],\n params?: object\n ): Observable<[string, string, string[]]> {\n return this.translateService.get([title, message, ...buttons], params).pipe(\n map((result: { [key: string]: string }) => {\n return [result[title], result[message], buttons.map(button => result[button])] as [\n string,\n string,\n string[]\n ];\n })\n );\n }\n}\n","import { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { NiceSweetAlertComponent } from \"./sweet-alert.component\";\nimport { CommonModule } from \"@angular/common\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { NiceSweetAlertOptions, NiceSweetAlertService } from \"./sweet-alert.service\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatDialogModule } from \"@angular/material/dialog\";\nimport { NiceLottieModule } from \"../lottie/lottie.module\";\nimport { NICE_ALERT_OPTIONS } from \"./sweet-alert.constant\";\n\n@NgModule({\n imports: [CommonModule, TranslateModule, MatDialogModule, MatButtonModule, NiceLottieModule],\n declarations: [NiceSweetAlertComponent],\n providers: [NiceSweetAlertService]\n})\nexport class NiceSweetAlertModule {\n public static forRoot(options?: NiceSweetAlertOptions): ModuleWithProviders<NiceSweetAlertModule> {\n return {\n ngModule: NiceSweetAlertModule,\n providers: [\n {\n provide: NICE_ALERT_OPTIONS,\n useValue: options\n }\n ]\n };\n }\n}\n","import { Component, Inject, ViewEncapsulation } from \"@angular/core\";\nimport { MAT_SNACK_BAR_DATA, MatSnackBarRef } from \"@angular/material/snack-bar\";\nimport { NiceAlertAppearance } from \"../alert\";\n\nexport interface NiceToastData {\n title?: string;\n message?: string;\n appearance?: NiceAlertAppearance;\n type: \"info\" | \"success\" | \"warning\" | \"error\";\n}\n\n@Component({\n selector: \"nice-toast\",\n templateUrl: \"toast.template.html\",\n styleUrls: [\"toast.style.scss\"],\n encapsulation: ViewEncapsulation.None\n})\nexport class NiceToastComponent {\n constructor(\n @Inject(MAT_SNACK_BAR_DATA) public data: NiceToastData,\n private snackbarRef: MatSnackBarRef<NiceToastComponent>\n ) {}\n\n public dismiss() {\n this.snackbarRef.dismiss();\n }\n}\n","<nice-alert disableAnimation [type]=\"data.type\" [appearance]=\"data.appearance || 'outline'\" (click)=\"dismiss()\">\n <span niceAlertTitle *ngIf=\"data.title\">{{ data.title }}</span>\n <span [innerHtml]=\"data.message\" *ngIf=\"data.message\"></span>\n</nice-alert>\n","import { InjectionToken } from \"@angular/core\";\n\nexport const NICE_TOAST_OPTIONS = new InjectionToken(\"nice_toast_options\");\n","import { Inject, Injectable } from \"@angular/core\";\nimport { MatSnackBar, MatSnackBarConfig } from \"@angular/material/snack-bar\";\nimport { TranslateService } from \"@ngx-translate/core\";\nimport { NiceAlertAppearance } from \"../alert\";\nimport { NiceToastComponent } from \"./toast.component\";\nimport { NICE_TOAST_OPTIONS } from \"./toast.constant\";\n\nexport interface NiceToastOptions extends MatSnackBarConfig {\n appearance?: NiceAlertAppearance;\n successDuration?: number;\n warningDuration?: number;\n errorDuration?: number;\n infoDuration?: number;\n}\n\n@Injectable({ providedIn: \"any\" })\nexport class NiceToastService {\n constructor(\n @Inject(NICE_TOAST_OPTIONS)\n private options: NiceToastOptions,\n private snackbar: MatSnackBar,\n private translateService: TranslateService\n ) {}\n\n public success(messageKey: string, titleKey?: string, params?: object): void {\n this.showToast(\"success\", messageKey, titleKey, params);\n }\n\n public error(messageKey: string, titleKey?: string, params?: object): void {\n this.showToast(\"error\", messageKey, titleKey, params);\n }\n\n public warning(messageKey: string, titleKey?: string, params?: object): void {\n this.showToast(\"warning\", messageKey, titleKey, params);\n }\n\n public info(messageKey: string, titleKey?: string, params?: object): void {\n this.showToast(\"info\", messageKey, titleKey, params);\n }\n\n private showToast(type: string, messageKey: string, titleKey?: string, params?: object): void {\n const [message, title] = this.getTranslations(messageKey, titleKey, params);\n const duration = this.options[`${type}Duration`] ?? this.options.duration;\n this.snackbar.openFromComponent(NiceToastComponent, {\n ...this.options,\n duration,\n panelClass: [\"message-box\", type],\n data: {\n message,\n title,\n type,\n appearance: this.options.appearance\n }\n });\n }\n\n private getTranslations(message: string, title: string, params: object): [string, string] {\n const translations = [message];\n if (title) {\n translations.push(title);\n }\n\n try {\n const result = this.translateService.instant(translations, params) as { [key: string]: string };\n return [result[message], result[title]];\n } catch (e) {\n return [\"\", \"\"];\n }\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { MatSnackBarModule } from \"@angular/material/snack-bar\";\nimport { TranslateModule } from \"@ngx-translate/core\";\nimport { NiceAlertModule } from \"../alert\";\nimport { NiceToastComponent } from \"./toast.component\";\nimport { NICE_TOAST_OPTIONS } from \"./toast.constant\";\nimport { NiceToastOptions, NiceToastService } from \"./toast.service\";\n\nconst defaultOptions: NiceToastOptions = {\n duration: 3000,\n horizontalPosition: \"end\",\n verticalPosition: \"bottom\"\n};\n\n@NgModule({\n imports: [CommonModule, MatSnackBarModule, TranslateModule, NiceAlertModule],\n declarations: [NiceToastComponent]\n})\nexport class NiceToastModule {\n public static forRoot(options?: NiceToastOptions): ModuleWithProviders<NiceToastModule> {\n return {\n ngModule: NiceToastModule,\n providers: [\n NiceToastService,\n {\n provide: NICE_TOAST_OPTIONS,\n useValue: {\n ...defaultOptions,\n ...(options ?? {})\n }\n }\n ]\n };\n }\n\n public static forFeature(options: NiceToastOptions): ModuleWithProviders<NiceToastModule> {\n return {\n ngModule: NiceToastModule,\n providers: [\n NiceToastService,\n {\n provide: NICE_TOAST_OPTIONS,\n useValue: {\n ...defaultOptions,\n ...options\n }\n }\n ]\n };\n }\n}\n","import { Component, Input, TemplateRef, ViewChild } from \"@angular/core\";\n\n@Component({\n selector: \"nice-toggle-button\",\n template: `<ng-template><ng-content></ng-content></ng-template>`\n})\nexport class ToggleButtonComponent {\n @ViewChild(TemplateRef, { static: true })\n public content: TemplateRef<any>;\n\n @Input()\n public value: string;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n EventEmitter,\n forwardRef,\n HostListener,\n Input, Output,\n QueryList,\n ViewEncapsulation\n} from \"@angular/core\";\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { CanColor, ThemePalette } from \"@angular/material/core\";\nimport { ToggleButtonComponent } from \"./toggle-button.component\";\n\nexport type ToggleButtonGroupDataType = any | any[];\n\n@Component({\n selector: \"nice-toggle-button-group\",\n templateUrl: \"toggle-button-group.template.html\",\n styleUrls: [\"toggle-button-group.style.scss\"],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ToggleButtonGroupComponent),\n multi: true\n }\n ]\n})\nexport class ToggleButtonGroupComponent implements CanColor {\n private _multiple = false;\n\n @ContentChildren(ToggleButtonComponent)\n public toggleButtons: QueryList<ToggleButtonComponent>;\n\n @Input()\n public selected: ToggleButtonGroupDataType;\n\n @Input()\n public color: ThemePalette;\n\n @Output()\n public selectedChange = new EventEmitter<ToggleButtonGroupDataType>();\n\n public defaultColor: ThemePalette = \"accent\";\n\n @Input()\n public set multiple(multiple: boolean) {\n if (multiple === this._multiple) {\n return;\n }\n\n if (multiple) {\n if (this.selected) {\n this.selected = [this.selected];\n } else {\n this.selected = [];\n }\n } else {\n if (this.selected) {\n this.selected = this.selected[0];\n }\n }\n this._multiple = multiple;\n }\n\n private onTouched: () => void;\n private onChange: (selected: ToggleButtonGroupDataType) => void;\n\n @HostListener(\"blur\")\n public onBlur(): void {\n this.onTouched();\n }\n\n public writeValue(value: ToggleButtonGroupDataType): void {\n if (!value) {\n return;\n }\n\n this.selected = value;\n }\n\n public registerOnChange(fn: (color: string) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public onSelect(value: any): void {\n if (this._multiple) {\n if (this.selected) {\n const index = this.selected.findIndex(x => x === value);\n if (index < 0) {\n this.selected.push(value);\n } else {\n this.selected.splice(index, 1);\n }\n } else {\n this.selected = [value];\n }\n } else {\n this.selected = value;\n }\n this.onChange?.(this.selected);\n this.selectedChange?.emit(this.selected);\n }\n\n public conditionalColorObj(value: any): any {\n const colorClass = this.color ?? this.defaultColor;\n const isActive = this._multiple ? this.selected.includes(value) : this.selected === value;\n\n const obj = {} as any;\n obj.selected = isActive;\n obj[`bg-${colorClass}`] = isActive;\n obj[`bg-selected-${colorClass}`] = isActive;\n obj[\"left-selected\"] = this.isLeftValueSelected(value);\n obj[\"right-selected\"] = this.isRightValueSelected(value);\n\n return obj;\n }\n\n private isLeftValueSelected(value: any): boolean {\n if (!this._multiple || !this.selected.includes(value)) {\n return false;\n }\n\n const values = this.toggleButtons.map(btn => btn.value);\n const index = values.indexOf(value);\n\n if (index <= 0) {\n return false;\n }\n\n return this.selected.includes(values[index - 1]);\n }\n\n private isRightValueSelected(value: any): boolean {\n if (!this._multiple) {\n return false;\n }\n\n const values = this.toggleButtons.map(btn => btn.value);\n const index = values.indexOf(value);\n\n if (index === -1 || index === values.length - 1) {\n return false;\n }\n\n return this.selected.includes(values[index + 1]);\n }\n}\n","<div class=\"toggle-button-group-wrapper\">\n <div class=\"toggle-button-group flex flex-row items-center\">\n <div\n class=\"toggle-button\"\n [ngClass]=\"conditionalColorObj(btn.value)\"\n *ngFor=\"let btn of toggleButtons\"\n >\n <div matRipple class=\"toggle-button-inner flex place-content-center items-center\" (click)=\"onSelect(btn.value)\">\n <ng-container *ngTemplateOutlet=\"btn.content\"></ng-container>\n </div>\n </div>\n </div>\n</div>\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { MatRippleModule } from \"@angular/material/core\";\n\nimport { ToggleButtonGroupComponent } from \"./toggle-button-group.component\";\nimport { ToggleButtonComponent } from \"./toggle-button.component\";\n\n@NgModule({\n imports: [\n CommonModule,\n MatRippleModule\n ],\n declarations: [ToggleButtonComponent, ToggleButtonGroupComponent],\n providers: [],\n exports: [ToggleButtonComponent, ToggleButtonGroupComponent]\n})\nexport class NiceToggleButtonGroupModule {}\n","import { Directive, ElementRef, OnInit } from \"@angular/core\";\n\n@Directive({ selector: \"[niceAutofocus]\" })\nexport class NiceAutofocusDirective implements OnInit {\n constructor(private elem: ElementRef) {}\n\n public ngOnInit(): void {\n this.elem.nativeElement.focus?.();\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NiceAutofocusDirective } from \"./autofocus.directive\";\n\n@NgModule({\n declarations: [NiceAutofocusDirective],\n exports: [NiceAutofocusDirective]\n})\nexport class NiceAutofocusDirectiveModule {}\n","import {\n ChangeDetectorRef,\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges\n} from \"@angular/core\";\nimport { Subject } from \"rxjs\";\n\n@Directive({\n selector: \"textarea[niceAutogrow]\",\n exportAs: \"niceAutogrow\"\n})\nexport class NiceAutogrowDirective implements OnChanges, OnInit, OnDestroy {\n private _height = \"auto\";\n private _unsubscribeAll: Subject<any> = new Subject<any>();\n\n // tslint:disable-next-line:no-input-rename\n @Input(\"niceAutogrowVerticalPadding\")\n public padding = 8;\n\n @HostBinding(\"rows\")\n private _rows = 1;\n\n /**\n * Constructor\n */\n constructor(\n private _elementRef: ElementRef,\n private _changeDetectorRef: ChangeDetectorRef,\n private _ngZone: NgZone\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Accessors\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Host binding for component inline styles\n */\n @HostBinding(\"style\")\n public get styleList(): any {\n return {\n \"height\": this._height,\n \"overflow\": \"hidden\",\n \"resize\": \"none\"\n };\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On changes\n */\n public ngOnChanges(changes: SimpleChanges): void {\n // Padding\n if (\"niceAutogrowVerticalPadding\" in changes) {\n // Resize\n this._resize();\n }\n }\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Resize for the first time\n this._resize();\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Private methods\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * Resize on 'input' and 'ngModelChange' events\n */\n @HostListener(\"input\")\n @HostListener(\"ngModelChange\")\n private _resize(): void {\n // This doesn't need to trigger Angular's change detection by itself\n this._ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n // Set the height to 'auto' so we can correctly read the scrollHeight\n this._height = \"auto\";\n\n // Detect the changes so the height is applied\n this._changeDetectorRef.detectChanges();\n\n // Get the scrollHeight and subtract the vertical padding\n this._height = `${this._elementRef.nativeElement.scrollHeight - this.padding}px`;\n\n // Detect the changes one more time to apply the final height\n this._changeDetectorRef.detectChanges();\n });\n });\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NiceAutogrowDirective } from \"./autogrow.directive\";\n\n@NgModule({\n declarations: [\n NiceAutogrowDirective\n ],\n exports: [\n NiceAutogrowDirective\n ]\n})\nexport class NiceAutogrowModule {}\n","import { Directive, ElementRef, EventEmitter, OnDestroy, OnInit, Output, } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\nimport { filter, takeUntil } from \"rxjs/operators\";\nimport { NiceAsyncTypeaheadComponent } from \"../../components\";\n\n@Directive({\n selector: \"[niceChipAsyncTypeahead]\",\n exportAs: \"niceChipAsyncTypeahead\",\n})\nexport class NiceChipAsyncTypeaheadDirective implements OnInit, OnDestroy {\n @Output()\n public niceChipAsyncTypeaheadTokenEnd = new EventEmitter<any>();\n\n private unsubscribeAll$ = new Subject();\n\n constructor(\n private typeahead: NiceAsyncTypeaheadComponent,\n private elementRef: ElementRef<HTMLElement>\n ) {\n }\n\n public ngOnInit(): void {\n this.typeahead.selected\n .pipe(\n takeUntil(this.unsubscribeAll$),\n filter((selected) => selected)\n )\n .subscribe((_) => {\n this.niceChipAsyncTypeaheadTokenEnd.emit(this.typeahead.getActive());\n this.typeahead.writeValue(null);\n });\n\n this.elementRef.nativeElement.classList.add(\"nice-chip-async-typeahead\");\n }\n\n public ngOnDestroy(): void {\n this.unsubscribeAll$.next(null);\n this.unsubscribeAll$.complete();\n }\n}\n","import { Directive, TemplateRef } from \"@angular/core\";\n\n@Directive({ selector: \"[niceChipListItemLabel]\" })\nexport class ChipListItemLabelDirective {\n constructor(public template: TemplateRef<any>) {}\n}\n","import { InjectionToken } from \"@angular/core\";\n\nexport const NICE_CHIP_LIST_OPTIONS = new InjectionToken(\"nice_chip_list_options\");\n","import {\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n EventEmitter, Inject,\n Input,\n Optional,\n Output,\n TemplateRef\n} from \"@angular/core\";\nimport { CanColor, ThemePalette } from \"@angular/material/core\";\nimport { Observable } from \"rxjs\";\nimport { NICE_CHIP_LIST_OPTIONS } from \"../chip-list.constant\";\nimport { ChipListItemLabelDirective } from \"./chip-list-item-label.directive\";\n\nexport type NiceChipListActionIcon = { matIcon: string; svgIcon?: string; } | { matIcon?: string; svgIcon: string; };\n\nexport interface NiceChipListOptions {\n closeButtonIcon: NiceChipListActionIcon;\n}\n\n@Component({\n selector: \"nice-chip-list-items\",\n templateUrl: \"./chip-list-items.template.html\",\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NiceChipListItemsComponent implements CanColor {\n @ContentChild(ChipListItemLabelDirective, { read: TemplateRef })\n public itemLabel: TemplateRef<any>;\n\n @Input()\n public color: ThemePalette = \"primary\";\n\n @Output()\n public removeChip = new EventEmitter<number>();\n\n @Input()\n public items$: Observable<any[]>;\n\n public defaultColor: ThemePalette = \"primary\";\n\n constructor(@Optional() @Inject(NICE_CHIP_LIST_OPTIONS) public readonly options: NiceChipListOptions) {\n if (!this.options) {\n this.options = {\n closeButtonIcon: {\n matIcon: \"cancel\"\n }\n };\n }\n }\n\n public remove(index: number): void {\n this.removeChip.next(index);\n }\n}\n","<div class=\"nice-items-row\" *ngIf=\"(items$ | async)?.length\">\n <div\n class=\"nice-chip\"\n *ngFor=\"let value of items$ | async; let i = index\"\n [ngClass]=\"color\"\n >\n <span *ngIf=\"!itemLabel\">{{ value }}</span>\n <ng-container *ngIf=\"itemLabel\">\n <ng-container *ngTemplateOutlet=\"itemLabel; context: { $implicit: value }\"></ng-container>\n </ng-container>\n <button (click)=\"remove(i)\">\n <mat-icon *ngIf=\"options.closeButtonIcon.matIcon\">\n {{ options.closeButtonIcon.matIcon }}\n </mat-icon>\n <mat-icon\n *ngIf=\"options.closeButtonIcon.svgIcon\"\n [svgIcon]=\"options.closeButtonIcon.svgIcon\"\n ></mat-icon>\n </button>\n </div>\n</div>\n","import {\n Directive,\n ElementRef,\n HostListener,\n Inject,\n Input,\n OnChanges,\n OnInit,\n Optional,\n SimpleChange,\n SimpleChanges\n} from \"@angular/core\";\nimport { ControlValueAccessor, NgControl } from \"@angular/forms\";\nimport { BehaviorSubject, Subject } from \"rxjs\";\nimport { filter, takeUntil } from \"rxjs/operators\";\nimport {\n NiceAsyncTypeaheadComponent,\n NiceTypeaheadNewValue\n} from \"../../components\";\nimport { KeyboardCodes } from \"../../utils\";\nimport { NiceChipListItemsComponent } from \"./chip-list-items/chip-list-items.component\";\n\n@Directive({\n selector: \"input[niceChipList], nice-async-typeahead[niceChipList]\"\n})\nexport class NiceChipListDirective implements ControlValueAccessor, OnInit, OnChanges {\n @Input()\n public withItemList: NiceChipListItemsComponent;\n\n @Input()\n public reloadOnSelected = true;\n\n private unsubscribeAll$ = new Subject<void>();\n private values$ = new BehaviorSubject([]);\n\n private _values: any[] = [];\n private propagateChanges = (value: any[]) => {};\n\n public get values(): any[] {\n return this._values;\n }\n\n constructor(\n @Optional() private asyncTypeahead: NiceAsyncTypeaheadComponent,\n @Optional() private ngControl: NgControl,\n private elementRef: ElementRef<HTMLInputElement>\n ) {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n @HostListener(\"keydown\", [\"$event\"])\n public onKeyDown(event: KeyboardEvent): void {\n if (this.asyncTypeahead) {\n return;\n }\n\n if (event.code === KeyboardCodes.Enter) {\n if (!this.elementRef.nativeElement.validity.valid) {\n return;\n }\n\n this.addValue(this.elementRef.nativeElement.value);\n this.elementRef.nativeElement.value = \"\";\n return;\n }\n }\n\n public ngOnInit(): void {\n if (this.asyncTypeahead) {\n this.setupAsyncTypeahead();\n }\n\n if (this.elementRef.nativeElement.parentElement.classList.contains(\"mat-form-field-infix\")) {\n this.elementRef.nativeElement.parentElement.style.alignItems = \"flex-start\";\n this.elementRef.nativeElement.parentElement.style.flexDirection = \"column-reverse\";\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (\"withItemList\" in changes) {\n this.withItemList.items$ = this.values$;\n this.withItemList.removeChip.pipe(takeUntil(this.unsubscribeAll$)).subscribe(x => {\n this._values.splice(x, 1);\n\n this.updateTypeaheadSearchOptions();\n\n this.propagateChanges(this._values);\n this.values$.next(this._values);\n });\n }\n }\n\n public writeValue(obj: any[]): void {\n this._values = obj ?? [];\n this.updateTypeaheadSearchOptions();\n this.values$.next(this._values);\n }\n\n public registerOnChange(fn: any): void {\n this.propagateChanges = fn;\n }\n\n public registerOnTouched(fn: any): void {}\n\n private setupAsyncTypeahead(): void {\n this.asyncTypeahead.selected\n .pipe(\n takeUntil(this.unsubscribeAll$),\n filter((selected) => selected)\n )\n .subscribe((value) => {\n if (value instanceof NiceTypeaheadNewValue) {\n this.addValue(value);\n } else {\n this.addValue(this.asyncTypeahead.getActive());\n }\n\n this.asyncTypeahead.searchOptions = { ...(this.asyncTypeahead.searchOptions ?? {}), ignore: this._values ?? [] };\n this.asyncTypeahead.onRemove(null, this.reloadOnSelected);\n });\n }\n\n private addValue(value: any): void {\n if (this._values.includes(value)) {\n return;\n }\n\n if (value instanceof NiceTypeaheadNewValue) {\n if (this._values.some(x => x instanceof NiceTypeaheadNewValue && x.$new === value.$new)) {\n return;\n }\n }\n\n this._values.push(value);\n this.propagateChanges(this._values);\n this.values$.next(this._values);\n }\n\n private updateTypeaheadSearchOptions(): void {\n if (!this.asyncTypeahead) {\n return;\n }\n\n const searchOptions = this.asyncTypeahead.searchOptions;\n this.asyncTypeahead.searchOptions = { ...(searchOptions ?? {}), ignore: this._values ?? [] };\n this.asyncTypeahead.ngOnChanges({\n searchOptions: new SimpleChange(searchOptions, this.asyncTypeahead.searchOptions, false)\n });\n }\n}\n","import { CommonModule } from \"@angular/common\";\nimport { ModuleWithProviders, NgModule } from \"@angular/core\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { ChipListItemLabelDirective } from \"./chip-list-items/chip-list-item-label.directive\";\nimport { NiceChipListItemsComponent, NiceChipListOptions } from \"./chip-list-items/chip-list-items.component\";\nimport { NICE_CHIP_LIST_OPTIONS } from \"./chip-list.constant\";\n\nimport { NiceChipListDirective } from \"./chip-list.directive\";\n\n@NgModule({\n imports: [CommonModule, MatIconModule],\n declarations: [NiceChipListDirective, NiceChipListItemsComponent, ChipListItemLabelDirective],\n exports: [NiceChipListDirective, NiceChipListItemsComponent, ChipListItemLabelDirective]\n})\nexport class NiceChipListDirectiveModule {\n public static forRoot(options?: NiceChipListOptions): ModuleWithProviders<NiceChipListDirectiveModule> {\n if (!options) {\n options = {\n closeButtonIcon: {\n matIcon: \"cancel\"\n }\n };\n }\n return {\n ngModule: NiceChipListDirectiveModule,\n providers: [\n {\n provide: NICE_CHIP_LIST_OPTIONS,\n useValue: options\n }\n ]\n };\n }\n}\n","import { Directive, ElementRef, HostListener, Input, TemplateRef, ViewContainerRef } from \"@angular/core\";\n\n@Directive({ selector: \"img[niceImageErrorPlaceholder]\" })\nexport class NiceImageErrorPlaceholderDirective {\n @Input()\n public fallback?: TemplateRef<any>;\n\n constructor(private elementRef: ElementRef, private viewContainerRef: ViewContainerRef) {}\n\n @HostListener(\"error\")\n public onError(): void {\n this.elementRef.nativeElement.style.display = \"none\";\n if (this.fallback) {\n this.viewContainerRef.createEmbeddedView(this.fallback);\n }\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NiceImageErrorPlaceholderDirective } from \"./image-error-placeholder.directive\";\n\n@NgModule({\n declarations: [NiceImageErrorPlaceholderDirective],\n exports: [NiceImageErrorPlaceholderDirective]\n})\nexport class NiceImageErrorPlaceholderDirectiveModule {}\n","import { Directive, ElementRef, OnInit } from \"@angular/core\";\nimport { MatFormField } from \"@angular/material/form-field\";\n\n// tslint:disable-next-line:directive-selector\n@Directive({selector: \"[keep-material-style]\"})\nexport class NiceMaterialStyleDirective implements OnInit {\n constructor(private element: ElementRef) {}\n\n public ngOnInit(): void {\n (this.element.nativeElement as HTMLElement).classList.add(\"keep-material-style\");\n }\n}\n","import { Directive, ElementRef, OnInit } from \"@angular/core\";\nimport { MatFormField } from \"@angular/material/form-field\";\n\n// tslint:disable-next-line:directive-selector\n@Directive({selector: \"[nice-rounded-style]\"})\nexport class NiceRoundedStyleDirective implements OnInit {\n constructor(private element: ElementRef) {}\n\n public ngOnInit(): void {\n (this.element.nativeElement as HTMLElement).classList.add(\"nice-rounded-style\");\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NiceMaterialStyleDirective } from \"./nice-material-style.directive\";\nimport { NiceRoundedStyleDirective } from \"./nice-rounded-style.directive\";\n\n@NgModule({\n declarations: [\n NiceMaterialStyleDirective,\n NiceRoundedStyleDirective\n ],\n exports: [\n NiceMaterialStyleDirective,\n NiceRoundedStyleDirective\n ]\n})\nexport class NiceMaterialModule {}\n","import { Directive, EventEmitter, Input, Output, Type } from \"@angular/core\";\nimport { MatDialog, MatDialogConfig } from \"@angular/material/dialog\";\n\n@Directive()\nexport class NiceModalOpenerDirective<T, Return, Data> {\n @Input()\n public modalData: Data;\n\n @Output()\n public modalAfterClosed = new EventEmitter<Return>();\n\n constructor(protected dialog: MatDialog, private modal: Type<T>, private options: MatDialogConfig<Data>) {}\n\n public open(): void {\n this.dialog\n .open(this.modal, {\n ...this.options,\n data: this.modalData\n })\n .afterClosed()\n .subscribe(res => this.modalAfterClosed.emit(res));\n }\n}\n","import { Directive, HostListener, Type } from \"@angular/core\";\nimport { MatDialog, MatDialogConfig } from \"@angular/material/dialog\";\nimport { NiceModalOpenerDirective } from \"./modal-opener.directive\";\n\n@Directive()\nexport class NiceModalOnClickDirective<T, Return, Data = any> extends NiceModalOpenerDirective<T, Return, Data> {\n constructor(dialog: MatDialog, modal: Type<T>, options: MatDialogConfig<Data>) {\n super(dialog, modal, options);\n }\n\n @HostListener(\"click\")\n public onClick(): void {\n this.open();\n }\n}\n","import { Directive, ElementRef, OnDestroy, OnInit } from \"@angular/core\";\nimport { NavigationEnd, Router } from \"@angular/router\";\nimport { Subject } from \"rxjs\";\nimport { filter, takeUntil } from \"rxjs/operators\";\n\n@Directive({\n selector: \"[niceScrollReset]\",\n exportAs: \"niceScrollReset\"\n})\nexport class NiceScrollResetDirective implements OnInit, OnDestroy {\n private _unsubscribeAll: Subject<any> = new Subject<any>();\n\n /**\n * Constructor\n */\n constructor(\n private _elementRef: ElementRef,\n private _router: Router\n ) {\n }\n\n // -----------------------------------------------------------------------------------------------------\n // @ Lifecycle hooks\n // -----------------------------------------------------------------------------------------------------\n\n /**\n * On init\n */\n public ngOnInit(): void {\n // Subscribe to NavigationEnd event\n this._router.events.pipe(\n filter(event => event instanceof NavigationEnd),\n takeUntil(this._unsubscribeAll)\n ).subscribe(() => {\n // Reset the element's scroll position to the top\n this._elementRef.nativeElement.scrollTop = 0;\n });\n }\n\n /**\n * On destroy\n */\n public ngOnDestroy(): void {\n // Unsubscribe from all subscriptions\n this._unsubscribeAll.next(null);\n this._unsubscribeAll.complete();\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NiceScrollResetDirective } from \"./scroll-reset.directive\";\n\n@NgModule({\n declarations: [\n NiceScrollResetDirective\n ],\n exports: [\n NiceScrollResetDirective\n ]\n})\nexport class NiceScrollResetModule {\n}\n","import { Directive, HostListener } from \"@angular/core\";\n\n@Directive({ selector: \"[niceClickStopPropagation]\" })\nexport class NiceClickStopPropagationDirective {\n @HostListener(\"click\", [\"$event\"])\n public stopClick(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { NiceClickStopPropagationDirective } from \"./click-stop-propagation.directive\";\n\n@NgModule({\n exports: [NiceClickStopPropagationDirective],\n declarations: [NiceClickStopPropagationDirective],\n\n})\nexport class NiceStopPropagationModule {\n}\n","import { Directive, HostListener } from \"@angular/core\";\n\n// https://stackoverflow.com/questions/48886460/prevent-closing-browser-tab-window-in-angular-5-x\n@Directive({ selector: \"[nicePreventCloseWindow]\" })\nexport class NicePreventCloseWindowDirective {\n @HostListener(\"window:beforeunload\", [\"$event\"])\n public handleClose($event) {\n $event.returnValue = false;\n }\n}\n","import { NgModule } from \"@angular/core\";\nimport { NicePreventCloseWindowDirective } from \"./prevent-close-window.directive\";\n\n@NgModule({\n declarations: [NicePreventCloseWindowDirective],\n exports: [NicePreventCloseWindowDirective]\n})\nexport class NiceWindowDirectiveModule {\n}\n","import { NgModule, Optional, SkipSelf } from \"@angular/core\";\nimport { MATERIAL_SANITY_CHECKS } from \"@angular/material/core\";\nimport { MAT_FORM_FIELD_DEFAULT_OPTIONS } from \"@angular/material/form-field\";\nimport { NiceMediaWatcherModule, NiceSplashScreenModule, NiceUtilsModule } from \"./providers\";\n\n@NgModule({\n imports: [\n NiceMediaWatcherModule,\n NiceSplashScreenModule,\n NiceUtilsModule\n ],\n providers: [\n {\n // Disable 'theme' sanity check\n provide : MATERIAL_SANITY_CHECKS,\n useValue: {\n doctype: true,\n theme : false,\n version: true\n }\n },\n {\n // Use the 'fill' appearance on Angular Material form fields by default\n provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,\n useValue: {\n appearance: \"fill\"\n }\n }\n ]\n})\nexport class NiceModule {\n /**\n * Constructor\n */\n constructor(@Optional() @SkipSelf() parentModule?: NiceModule) {\n if (parentModule) {\n throw new Error(\"NiceModule has already been loaded. Import this module in the AppModule only!\");\n }\n }\n}\n","/*\n * Public API Surface of nice-ui-kit-v2\n */\n\nexport * from \"./lib/animations\";\nexport * from \"./lib/api\";\nexport * from \"./lib/components\";\nexport * from \"./lib/directives\";\nexport * from \"./lib/pipes\";\nexport * from \"./lib/providers\";\nexport * from \"./lib/utils\";\nexport * from \"./lib/nice.module\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["tap","debounceTime","merge"],"mappings":"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"}
|